<?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>175926</bug_id>
          
          <creation_ts>2017-08-24 00:04:12 -0700</creation_ts>
          <short_desc>Speedometer: Restructure Ember example</short_desc>
          <delta_ts>2017-08-25 15:04:27 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>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>
          <dependson>175956</dependson>
          <blocked>172339</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mathias Bynens">mathias</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>addyo</cc>
    
    <cc>buildbot</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>mathias</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1341975</commentid>
    <comment_count>0</comment_count>
    <who name="Mathias Bynens">mathias</who>
    <bug_when>2017-08-24 00:04:12 -0700</bug_when>
    <thetext>Speedometer: Remove unused stylesheet in Ember example</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1341976</commentid>
    <comment_count>1</comment_count>
      <attachid>318971</attachid>
    <who name="Mathias Bynens">mathias</who>
    <bug_when>2017-08-24 00:05:54 -0700</bug_when>
    <thetext>Created attachment 318971
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1341977</commentid>
    <comment_count>2</comment_count>
    <who name="Mathias Bynens">mathias</who>
    <bug_when>2017-08-24 00:14:24 -0700</bug_when>
    <thetext>I know the diff looks massive (because of the generated + minified files), but don’t despair! Only the hashes changed.

E.g. the only difference in todomvc-*.js is the `version` hash at the bottom. Old version:

    version: &quot;0.0.0+164d27e2&quot;

New version:

    version: &quot;0.0.0+a2ca1650&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1341981</commentid>
    <comment_count>3</comment_count>
      <attachid>318972</attachid>
    <who name="Mathias Bynens">mathias</who>
    <bug_when>2017-08-24 00:19:47 -0700</bug_when>
    <thetext>Created attachment 318972
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1341990</commentid>
    <comment_count>4</comment_count>
      <attachid>318972</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-08-24 01:28:07 -0700</bug_when>
    <thetext>Comment on attachment 318972
Patch

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

&gt; PerformanceTests/ChangeLog:10
&gt; +        * Speedometer/resources/todomvc/architecture-examples/emberjs/source/app/index.html: Removed stylesheet reference.
&gt; +        * Speedometer/resources/todomvc/architecture-examples/emberjs/source/app/styles/.gitkeep: Added.
&gt; +        * Speedometer/resources/todomvc/architecture-examples/emberjs/source/dist/*: Regenerated per build instructions.

Something is not right. tests.js refer to todomvc/architecture-examples/emberjs/index.html yet this is re-generating emberjs/source/dist/index.html:

Suites.push({
    name: &apos;EmberJS-TodoMVC&apos;,
    url: &apos;todomvc/architecture-examples/emberjs/index.html&apos;,</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1341992</commentid>
    <comment_count>5</comment_count>
      <attachid>318976</attachid>
    <who name="Mathias Bynens">mathias</who>
    <bug_when>2017-08-24 01:51:26 -0700</bug_when>
    <thetext>Created attachment 318976
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1341994</commentid>
    <comment_count>6</comment_count>
    <who name="Mathias Bynens">mathias</who>
    <bug_when>2017-08-24 01:54:39 -0700</bug_when>
    <thetext>(In reply to Ryosuke Niwa from comment #4)
&gt; Comment on attachment 318972 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=318972&amp;action=review
&gt; 
&gt; &gt; PerformanceTests/ChangeLog:10
&gt; &gt; +        * Speedometer/resources/todomvc/architecture-examples/emberjs/source/app/index.html: Removed stylesheet reference.
&gt; &gt; +        * Speedometer/resources/todomvc/architecture-examples/emberjs/source/app/styles/.gitkeep: Added.
&gt; &gt; +        * Speedometer/resources/todomvc/architecture-examples/emberjs/source/dist/*: Regenerated per build instructions.
&gt; 
&gt; Something is not right. tests.js refer to
&gt; todomvc/architecture-examples/emberjs/index.html yet this is re-generating
&gt; emberjs/source/dist/index.html:
&gt; 
&gt; Suites.push({
&gt;     name: &apos;EmberJS-TodoMVC&apos;,
&gt;     url: &apos;todomvc/architecture-examples/emberjs/index.html&apos;,

Good catch. That should’ve been `todomvc/architecture-examples/emberjs/source/dist/index.html` all along.

EmberJS is the only test with such a weird directory structure: `/emberjs` is pretty much empty, `/emberjs/source` contains the actual source, but the output is written to `/emberjs/source/dist`. The new patch fixes that as well by getting rid of the intermediate `source` folder.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1341998</commentid>
    <comment_count>7</comment_count>
      <attachid>318978</attachid>
    <who name="Mathias Bynens">mathias</who>
    <bug_when>2017-08-24 02:18:58 -0700</bug_when>
    <thetext>Created attachment 318978
Results before and after applying the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1342149</commentid>
    <comment_count>8</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-08-24 13:46:15 -0700</bug_when>
    <thetext>Okay, this results in a dramatic performance improvements in both Safari &amp; Chrome. The magnitude of the change here is almost 4x. I don&apos;t think we can accept this change as is.

== Before ==

Safari
34.6
34.9
34.7

Chrome
28.0
28.4
28.1

== After ==

Safari
108
107
109

Chrome
109
107
110</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1342528</commentid>
    <comment_count>9</comment_count>
      <attachid>318976</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-08-25 14:25:35 -0700</bug_when>
    <thetext>Comment on attachment 318976
Patch

Now that https://trac.webkit.org/changeset/221205 has been landed, we can land this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1342538</commentid>
    <comment_count>10</comment_count>
      <attachid>318976</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-08-25 15:00:56 -0700</bug_when>
    <thetext>Comment on attachment 318976
Patch

Clearing flags on attachment: 318976

Committed r221206: &lt;http://trac.webkit.org/changeset/221206&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1342539</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-08-25 15:00:58 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1342540</commentid>
    <comment_count>12</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-08-25 15:04:27 -0700</bug_when>
    <thetext>&lt;rdar://problem/34089824&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>318971</attachid>
            <date>2017-08-24 00:05:54 -0700</date>
            <delta_ts>2017-08-24 00:19:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-175926-20170824090553.patch</filename>
            <type>text/plain</type>
            <size>33141</size>
            <attacher name="Mathias Bynens">mathias</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIxMTMwCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCmluZGV4IGUxMmUyMmM3OGU4
MWMwYWY4NDgzNWU1MmM2ZjgyMmYwNzU0ZjM5ZTQuLjA3MGRlMTk3NjllMzA3ZmM3ZTAzYjEwODlj
YjViMjM5MWU2NmNjYjMgMTAwNjQ0Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCisr
KyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTctMDgt
MjQgIE1hdGhpYXMgQnluZW5zICA8bWF0aGlhc0BxaXdpLmJlPgorCisgICAgICAgIFNwZWVkb21l
dGVyOiBSZW1vdmUgdW51c2VkIHN0eWxlc2hlZXQgaW4gRW1iZXIgZXhhbXBsZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1OTI2CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNv
dXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy9zb3VyY2UvYXBwL2lu
ZGV4Lmh0bWw6IFJlbW92ZWQgc3R5bGVzaGVldCByZWZlcmVuY2UuCisgICAgICAgICogU3BlZWRv
bWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvc291
cmNlL2FwcC9zdHlsZXMvLmdpdGtlZXA6IEFkZGVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jl
c291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL3NvdXJjZS9kaXN0
Lyo6IFJlZ2VuZXJhdGVkIHBlciBidWlsZCBpbnN0cnVjdGlvbnMuCisKIDIwMTctMDgtMjMgIFJ5
b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgU3BlZWRvbWV0ZXI6IEFk
ZCBtaXNzaW5nIHN0eWxlc2hlZXQgdG8gQW5ndWxhciBleGFtcGxlCmRpZmYgLS1naXQgYS9QZXJm
b3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1l
eGFtcGxlcy9lbWJlcmpzL3NvdXJjZS9hcHAvaW5kZXguaHRtbCBiL1BlcmZvcm1hbmNlVGVzdHMv
U3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVy
anMvc291cmNlL2FwcC9pbmRleC5odG1sCmluZGV4IDA1MmYzNjc2Mjg2YzgxYzQwMjMxMGJkMGRl
ZjBhY2RkMDE2YWI2YTcuLjJlNGFmMGJiNDc2MDA0NzVkYTg5ODVmZjllMTk1MzAxZDkwY2RlNmMg
MTAwNjQ0Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9t
dmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvc291cmNlL2FwcC9pbmRleC5odG1sCisr
KyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0
ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvc291cmNlL2FwcC9pbmRleC5odG1sCkBAIC04LDcgKzgs
NiBAQAogICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lk
dGgsIGluaXRpYWwtc2NhbGU9MSI+CiAgICAge3tjb250ZW50LWZvciAiaGVhZCJ9fQogICAgIDxs
aW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ie3tyb290VVJMfX1hc3NldHMvdmVuZG9yLmNzcyI+
Ci0gICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJ7e3Jvb3RVUkx9fWFzc2V0cy90b2Rv
bXZjLmNzcyI+CiAgICAge3tjb250ZW50LWZvciAiaGVhZC1mb290ZXIifX0KICAgPC9oZWFkPgog
ICA8Ym9keT4KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3Vy
Y2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvc291cmNlL2FwcC9zdHls
ZXMvLmdpdGtlZXAgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2Rv
bXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL3NvdXJjZS9hcHAvc3R5bGVzLy5naXRr
ZWVwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjljMmI4YmJkNzhkMTg5ZWNkMWQzNTdkMGFkM2JjMzg4Yjk2N2RiMDkK
LS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNl
cy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL3NvdXJjZS9hcHAvc3R5bGVz
Ly5naXRrZWVwCkBAIC0wLDAgKzEsMiBAQAorIyBUaGlzIGZpbGUgZW5zdXJlcyB0aGUgYXBwL3N0
eWxlcyBkaXJlY3RvcnkgaXMgaW5jbHVkZWQgaW4gdGhlIHJlcG9zaXRvcnkuCisjIFdpdGhvdXQg
dGhhdCBkaXJlY3RvcnkgcHJlc2VudCwgdGhlIEVtYmVyIFRvZG9NVkMgZXhhbXBsZSBmYWlscy4K
ZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9t
dmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvc291cmNlL2Rpc3QvYXNzZXRzL3RvZG9t
dmMtMWEwOGI3MTg5NWIxZTMyNDAwMTYyM2VlMGFmMmI5MjcuanMgYi9QZXJmb3JtYW5jZVRlc3Rz
L1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJl
cmpzL3NvdXJjZS9kaXN0L2Fzc2V0cy90b2RvbXZjLTFhMDhiNzE4OTViMWUzMjQwMDE2MjNlZTBh
ZjJiOTI3LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgxNmZkMjYyZjZlY2M1ZWNkN2MzNjJjMmVhZTFhZDlmMjRj
Mzg5ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jl
c291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL3NvdXJjZS9kaXN0
L2Fzc2V0cy90b2RvbXZjLTFhMDhiNzE4OTViMWUzMjQwMDE2MjNlZTBhZjJiOTI3LmpzCkBAIC0w
LDAgKzEsMzAgQEAKKyJ1c2Ugc3RyaWN0IgorZGVmaW5lKCJ0b2RvbXZjL2FwcCIsWyJleHBvcnRz
IiwiZW1iZXIiLCJ0b2RvbXZjL3Jlc29sdmVyIiwiZW1iZXItbG9hZC1pbml0aWFsaXplcnMiLCJ0
b2RvbXZjL2NvbmZpZy9lbnZpcm9ubWVudCJdLGZ1bmN0aW9uKGUsdCxvLG4sbCl7dmFyIGk9dm9p
ZCAwCit0LmRlZmF1bHQuTU9ERUxfRkFDVE9SWV9JTkpFQ1RJT05TPSEwLGk9dC5kZWZhdWx0LkFw
cGxpY2F0aW9uLmV4dGVuZCh7bW9kdWxlUHJlZml4OmwuZGVmYXVsdC5tb2R1bGVQcmVmaXgscG9k
TW9kdWxlUHJlZml4OmwuZGVmYXVsdC5wb2RNb2R1bGVQcmVmaXgsUmVzb2x2ZXI6by5kZWZhdWx0
fSksKDAsbi5kZWZhdWx0KShpLGwuZGVmYXVsdC5tb2R1bGVQcmVmaXgpLGUuZGVmYXVsdD1pfSks
ZGVmaW5lKCJ0b2RvbXZjL2NvbXBvbmVudHMvdG9kby1pdGVtIixbImV4cG9ydHMiLCJlbWJlciJd
LGZ1bmN0aW9uKGUsdCl7ZS5kZWZhdWx0PXQuZGVmYXVsdC5Db21wb25lbnQuZXh0ZW5kKHtyZXBv
OnQuZGVmYXVsdC5pbmplY3Quc2VydmljZSgpLHRhZ05hbWU6ImxpIixlZGl0aW5nOiExLGNsYXNz
TmFtZUJpbmRpbmdzOlsidG9kby5jb21wbGV0ZWQiLCJlZGl0aW5nIl0sYWN0aW9uczp7c3RhcnRF
ZGl0aW5nOmZ1bmN0aW9uKCl7dGhpcy5nZXQoIm9uU3RhcnRFZGl0IikoKSx0aGlzLnNldCgiZWRp
dGluZyIsITApLHQuZGVmYXVsdC5ydW4uc2NoZWR1bGVPbmNlKCJhZnRlclJlbmRlciIsdGhpcywi
Zm9jdXNJbnB1dCIpfSxkb25lRWRpdGluZzpmdW5jdGlvbihlKXt0aGlzLmdldCgiZWRpdGluZyIp
JiYodC5kZWZhdWx0LmlzQmxhbmsoZSk/dGhpcy5zZW5kKCJyZW1vdmVUb2RvIik6KHRoaXMuc2V0
KCJ0b2RvLnRpdGxlIixlLnRyaW0oKSksdGhpcy5zZXQoImVkaXRpbmciLCExKSx0aGlzLmdldCgi
b25FbmRFZGl0IikoKSkpfSxoYW5kbGVLZXlkb3duOmZ1bmN0aW9uKGUpezEzPT09ZS5rZXlDb2Rl
P2UudGFyZ2V0LmJsdXIoKToyNz09PWUua2V5Q29kZSYmdGhpcy5zZXQoImVkaXRpbmciLCExKX0s
dG9nZ2xlQ29tcGxldGVkOmZ1bmN0aW9uKGUpe3ZhciBvPXRoaXMuZ2V0KCJ0b2RvIikKK3QuZGVm
YXVsdC5zZXQobywiY29tcGxldGVkIixlLnRhcmdldC5jaGVja2VkKSx0aGlzLmdldCgicmVwbyIp
LnBlcnNpc3QoKX0scmVtb3ZlVG9kbzpmdW5jdGlvbigpe3RoaXMuZ2V0KCJyZXBvIikuZGVsZXRl
KHRoaXMuZ2V0KCJ0b2RvIikpfX0sZm9jdXNJbnB1dDpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5x
dWVyeVNlbGVjdG9yKCJpbnB1dC5lZGl0IikuZm9jdXMoKX19KX0pLGRlZmluZSgidG9kb212Yy9j
b21wb25lbnRzL3RvZG8tbGlzdCIsWyJleHBvcnRzIiwiZW1iZXIiXSxmdW5jdGlvbihlLHQpe2Uu
ZGVmYXVsdD10LmRlZmF1bHQuQ29tcG9uZW50LmV4dGVuZCh7cmVwbzp0LmRlZmF1bHQuaW5qZWN0
LnNlcnZpY2UoKSx0YWdOYW1lOiJzZWN0aW9uIixlbGVtZW50SWQ6Im1haW4iLGNhblRvZ2dsZToh
MCxhbGxDb21wbGV0ZWQ6dC5kZWZhdWx0LmNvbXB1dGVkKCJ0b2Rvcy5AZWFjaC5jb21wbGV0ZWQi
LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0KCJ0b2RvcyIpLmlzRXZlcnkoImNvbXBsZXRlZCIp
fSksYWN0aW9uczp7ZW5hYmxlVG9nZ2xlOmZ1bmN0aW9uKCl7dGhpcy5zZXQoImNhblRvZ2dsZSIs
ITApfSxkaXNhYmxlVG9nZ2xlOmZ1bmN0aW9uKCl7dGhpcy5zZXQoImNhblRvZ2dsZSIsITEpfSx0
b2dnbGVBbGw6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmdldCgiYWxsQ29tcGxldGVkIikKK3RoaXMu
Z2V0KCJ0b2RvcyIpLmZvckVhY2goZnVuY3Rpb24obyl7cmV0dXJuIHQuZGVmYXVsdC5zZXQobywi
Y29tcGxldGVkIiwhZSl9KSx0aGlzLmdldCgicmVwbyIpLnBlcnNpc3QoKX19fSl9KSxkZWZpbmUo
InRvZG9tdmMvY29udHJvbGxlcnMvYWN0aXZlIixbImV4cG9ydHMiLCJlbWJlciJdLGZ1bmN0aW9u
KGUsdCl7ZS5kZWZhdWx0PXQuZGVmYXVsdC5Db250cm9sbGVyLmV4dGVuZCh7dG9kb3M6dC5kZWZh
dWx0LmNvbXB1dGVkLmZpbHRlckJ5KCJtb2RlbCIsImNvbXBsZXRlZCIsITEpfSl9KSxkZWZpbmUo
InRvZG9tdmMvY29udHJvbGxlcnMvYXBwbGljYXRpb24iLFsiZXhwb3J0cyIsImVtYmVyIl0sZnVu
Y3Rpb24oZSx0KXtlLmRlZmF1bHQ9dC5kZWZhdWx0LkNvbnRyb2xsZXIuZXh0ZW5kKHtyZXBvOnQu
ZGVmYXVsdC5pbmplY3Quc2VydmljZSgpLHJlbWFpbmluZzp0LmRlZmF1bHQuY29tcHV0ZWQuZmls
dGVyQnkoIm1vZGVsIiwiY29tcGxldGVkIiwhMSksY29tcGxldGVkOnQuZGVmYXVsdC5jb21wdXRl
ZC5maWx0ZXJCeSgibW9kZWwiLCJjb21wbGV0ZWQiKSxhY3Rpb25zOntjcmVhdGVUb2RvOmZ1bmN0
aW9uKGUpezEzIT09ZS5rZXlDb2RlfHx0LmRlZmF1bHQuaXNCbGFuayhlLnRhcmdldC52YWx1ZSl8
fCh0aGlzLmdldCgicmVwbyIpLmFkZCh7dGl0bGU6ZS50YXJnZXQudmFsdWUudHJpbSgpLGNvbXBs
ZXRlZDohMX0pLGUudGFyZ2V0LnZhbHVlPSIiKX0sY2xlYXJDb21wbGV0ZWQ6ZnVuY3Rpb24oKXt0
aGlzLmdldCgibW9kZWwiKS5yZW1vdmVPYmplY3RzKHRoaXMuZ2V0KCJjb21wbGV0ZWQiKSksdGhp
cy5nZXQoInJlcG8iKS5wZXJzaXN0KCl9fX0pfSksZGVmaW5lKCJ0b2RvbXZjL2NvbnRyb2xsZXJz
L2NvbXBsZXRlZCIsWyJleHBvcnRzIiwiZW1iZXIiXSxmdW5jdGlvbihlLHQpe2UuZGVmYXVsdD10
LmRlZmF1bHQuQ29udHJvbGxlci5leHRlbmQoe3RvZG9zOnQuZGVmYXVsdC5jb21wdXRlZC5maWx0
ZXJCeSgibW9kZWwiLCJjb21wbGV0ZWQiLCEwKX0pfSksZGVmaW5lKCJ0b2RvbXZjL2hlbHBlcnMv
YXBwLXZlcnNpb24iLFsiZXhwb3J0cyIsImVtYmVyIiwidG9kb212Yy9jb25maWcvZW52aXJvbm1l
bnQiLCJlbWJlci1jbGktYXBwLXZlcnNpb24vdXRpbHMvcmVnZXhwIl0sZnVuY3Rpb24oZSx0LG8s
bil7ZnVuY3Rpb24gbChlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPD0xfHx2b2lkIDA9PT1hcmd1
bWVudHNbMV0/e306YXJndW1lbnRzWzFdCityZXR1cm4gdC5oaWRlU2hhP2kubWF0Y2gobi52ZXJz
aW9uUmVnRXhwKVswXTp0LmhpZGVWZXJzaW9uP2kubWF0Y2gobi5zaGFSZWdFeHApWzBdOml9ZS5h
cHBWZXJzaW9uPWwKK3ZhciBpPW8uZGVmYXVsdC5BUFAudmVyc2lvbgorZS5kZWZhdWx0PXQuZGVm
YXVsdC5IZWxwZXIuaGVscGVyKGwpfSksZGVmaW5lKCJ0b2RvbXZjL2hlbHBlcnMvZ3QiLFsiZXhw
b3J0cyIsImVtYmVyIl0sZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBvKGUpe3ZhciB0PW4oZSwyKQor
cmV0dXJuIHRbMF0+dFsxXX12YXIgbj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt2YXIgbz1b
XSxuPSEwLGw9ITEsaT12b2lkIDAKK3RyeXtmb3IodmFyIGEsZD1lW1N5bWJvbC5pdGVyYXRvcl0o
KTshKG49KGE9ZC5uZXh0KCkpLmRvbmUpJiYoby5wdXNoKGEudmFsdWUpLCF0fHxvLmxlbmd0aCE9
PXQpO249ITApO31jYXRjaChlKXtsPSEwLGk9ZX1maW5hbGx5e3RyeXshbiYmZC5yZXR1cm4mJmQu
cmV0dXJuKCl9ZmluYWxseXtpZihsKXRocm93IGl9fXJldHVybiBvfXJldHVybiBmdW5jdGlvbih0
LG8pe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIHQKK2lmKFN5bWJvbC5pdGVyYXRvciBpbiBP
YmplY3QodCkpcmV0dXJuIGUodCxvKQordGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRl
bXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZSIpfX0oKQorZS5ndD1vLGUu
ZGVmYXVsdD10LmRlZmF1bHQuSGVscGVyLmhlbHBlcihvKX0pLGRlZmluZSgidG9kb212Yy9oZWxw
ZXJzL3BsdXJhbGl6ZSIsWyJleHBvcnRzIiwiZW1iZXIiLCJlbWJlci1pbmZsZWN0b3IiXSxmdW5j
dGlvbihlLHQsbyl7ZnVuY3Rpb24gbihlKXt2YXIgdD1sKGUsMiksbj10WzBdCityZXR1cm4gMT09
PXRbMV0/bjooMCxvLnBsdXJhbGl6ZSkobil9dmFyIGw9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUs
dCl7dmFyIG89W10sbj0hMCxsPSExLGk9dm9pZCAwCit0cnl7Zm9yKHZhciBhLGQ9ZVtTeW1ib2wu
aXRlcmF0b3JdKCk7IShuPShhPWQubmV4dCgpKS5kb25lKSYmKG8ucHVzaChhLnZhbHVlKSwhdHx8
by5sZW5ndGghPT10KTtuPSEwKTt9Y2F0Y2goZSl7bD0hMCxpPWV9ZmluYWxseXt0cnl7IW4mJmQu
cmV0dXJuJiZkLnJldHVybigpfWZpbmFsbHl7aWYobCl0aHJvdyBpfX1yZXR1cm4gb31yZXR1cm4g
ZnVuY3Rpb24odCxvKXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB0CitpZihTeW1ib2wuaXRl
cmF0b3IgaW4gT2JqZWN0KHQpKXJldHVybiBlKHQsbykKK3Rocm93IG5ldyBUeXBlRXJyb3IoIklu
dmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UiKX19KCkK
K2UucGx1cmFsaXplSGVscGVyPW4sZS5kZWZhdWx0PXQuZGVmYXVsdC5IZWxwZXIuaGVscGVyKG4p
fSksZGVmaW5lKCJ0b2RvbXZjL2hlbHBlcnMvc2luZ3VsYXJpemUiLFsiZXhwb3J0cyIsImVtYmVy
LWluZmxlY3Rvci9saWIvaGVscGVycy9zaW5ndWxhcml6ZSJdLGZ1bmN0aW9uKGUsdCl7ZS5kZWZh
dWx0PXQuZGVmYXVsdH0pLGRlZmluZSgidG9kb212Yy9pbml0aWFsaXplcnMvYXBwLXZlcnNpb24i
LFsiZXhwb3J0cyIsImVtYmVyLWNsaS1hcHAtdmVyc2lvbi9pbml0aWFsaXplci1mYWN0b3J5Iiwi
dG9kb212Yy9jb25maWcvZW52aXJvbm1lbnQiXSxmdW5jdGlvbihlLHQsbyl7dmFyIG49by5kZWZh
dWx0LkFQUCxsPW4ubmFtZSxpPW4udmVyc2lvbgorZS5kZWZhdWx0PXtuYW1lOiJBcHAgVmVyc2lv
biIsaW5pdGlhbGl6ZTooMCx0LmRlZmF1bHQpKGwsaSl9fSksZGVmaW5lKCJ0b2RvbXZjL2luaXRp
YWxpemVycy9jb250YWluZXItZGVidWctYWRhcHRlciIsWyJleHBvcnRzIiwiZW1iZXItcmVzb2x2
ZXIvY29udGFpbmVyLWRlYnVnLWFkYXB0ZXIiXSxmdW5jdGlvbihlLHQpe2UuZGVmYXVsdD17bmFt
ZToiY29udGFpbmVyLWRlYnVnLWFkYXB0ZXIiLGluaXRpYWxpemU6ZnVuY3Rpb24oKXt2YXIgZT1h
cmd1bWVudHNbMV18fGFyZ3VtZW50c1swXQorZS5yZWdpc3RlcigiY29udGFpbmVyLWRlYnVnLWFk
YXB0ZXI6bWFpbiIsdC5kZWZhdWx0KSxlLmluamVjdCgiY29udGFpbmVyLWRlYnVnLWFkYXB0ZXI6
bWFpbiIsIm5hbWVzcGFjZSIsImFwcGxpY2F0aW9uOm1haW4iKX19fSksZGVmaW5lKCJ0b2RvbXZj
L2luaXRpYWxpemVycy9leHBvcnQtYXBwbGljYXRpb24tZ2xvYmFsIixbImV4cG9ydHMiLCJlbWJl
ciIsInRvZG9tdmMvY29uZmlnL2Vudmlyb25tZW50Il0sZnVuY3Rpb24oZSx0LG8pe2Z1bmN0aW9u
IG4oKXt2YXIgZT1hcmd1bWVudHNbMV18fGFyZ3VtZW50c1swXQoraWYoITEhPT1vLmRlZmF1bHQu
ZXhwb3J0QXBwbGljYXRpb25HbG9iYWwpe3ZhciBuCitpZigidW5kZWZpbmVkIiE9dHlwZW9mIHdp
bmRvdyluPXdpbmRvdworZWxzZSBpZigidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbCluPWdsb2Jh
bAorZWxzZXtpZigidW5kZWZpbmVkIj09dHlwZW9mIHNlbGYpcmV0dXJuCituPXNlbGZ9dmFyIGws
aT1vLmRlZmF1bHQuZXhwb3J0QXBwbGljYXRpb25HbG9iYWwKK2w9InN0cmluZyI9PXR5cGVvZiBp
P2k6dC5kZWZhdWx0LlN0cmluZy5jbGFzc2lmeShvLmRlZmF1bHQubW9kdWxlUHJlZml4KSxuW2xd
fHwobltsXT1lLGUucmVvcGVuKHt3aWxsRGVzdHJveTpmdW5jdGlvbigpe3RoaXMuX3N1cGVyLmFw
cGx5KHRoaXMsYXJndW1lbnRzKSxkZWxldGUgbltsXX19KSl9fWUuaW5pdGlhbGl6ZT1uLGUuZGVm
YXVsdD17bmFtZToiZXhwb3J0LWFwcGxpY2F0aW9uLWdsb2JhbCIsaW5pdGlhbGl6ZTpufX0pLGRl
ZmluZSgidG9kb212Yy9yZXNvbHZlciIsWyJleHBvcnRzIiwiZW1iZXItcmVzb2x2ZXIiXSxmdW5j
dGlvbihlLHQpe2UuZGVmYXVsdD10LmRlZmF1bHR9KSxkZWZpbmUoInRvZG9tdmMvcm91dGVyIixb
ImV4cG9ydHMiLCJlbWJlciIsInRvZG9tdmMvY29uZmlnL2Vudmlyb25tZW50Il0sZnVuY3Rpb24o
ZSx0LG8pe3ZhciBuPXQuZGVmYXVsdC5Sb3V0ZXIuZXh0ZW5kKHtsb2NhdGlvbjpvLmRlZmF1bHQu
bG9jYXRpb25UeXBlLHJvb3RVUkw6by5kZWZhdWx0LnJvb3RVUkx9KQorbi5tYXAoZnVuY3Rpb24o
KXt0aGlzLnJvdXRlKCJhY3RpdmUiKSx0aGlzLnJvdXRlKCJjb21wbGV0ZWQiKX0pLGUuZGVmYXVs
dD1ufSksZGVmaW5lKCJ0b2RvbXZjL3JvdXRlcy9hcHBsaWNhdGlvbiIsWyJleHBvcnRzIiwiZW1i
ZXIiXSxmdW5jdGlvbihlLHQpe2UuZGVmYXVsdD10LmRlZmF1bHQuUm91dGUuZXh0ZW5kKHtyZXBv
OnQuZGVmYXVsdC5pbmplY3Quc2VydmljZSgpLG1vZGVsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMu
Z2V0KCJyZXBvIikuZmluZEFsbCgpfX0pfSksZGVmaW5lKCJ0b2RvbXZjL3NlcnZpY2VzL2FqYXgi
LFsiZXhwb3J0cyIsImVtYmVyLWFqYXgvc2VydmljZXMvYWpheCJdLGZ1bmN0aW9uKGUsdCl7T2Jq
ZWN0LmRlZmluZVByb3BlcnR5KGUsImRlZmF1bHQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlv
bigpe3JldHVybiB0LmRlZmF1bHR9fSl9KSxkZWZpbmUoInRvZG9tdmMvc2VydmljZXMvbWVtb3J5
IixbImV4cG9ydHMiXSxmdW5jdGlvbihlKXsoZnVuY3Rpb24oZSl7dmFyIHQ9e30sbz17fQordC5s
ZW5ndGg9MCx0LmdldEl0ZW09ZnVuY3Rpb24oZSl7cmV0dXJuIG9bZV18fG51bGx9LHQuc2V0SXRl
bT1mdW5jdGlvbihlLG4pe3ZvaWQgMD09PW4/dC5yZW1vdmVJdGVtKGUpOihvLmhhc093blByb3Bl
cnR5KGUpfHx0Lmxlbmd0aCsrLG9bZV09IiIrbil9LHQucmVtb3ZlSXRlbT1mdW5jdGlvbihlKXtv
Lmhhc093blByb3BlcnR5KGUpJiYoZGVsZXRlIG9bZV0sdC5sZW5ndGgtLSl9LHQua2V5PWZ1bmN0
aW9uKGUpe3JldHVybiBPYmplY3Qua2V5cyhvKVtlXXx8bnVsbH0sdC5jbGVhcj1mdW5jdGlvbigp
e289e30sdC5sZW5ndGg9MH0sZS5sb2NhbFN0b3JhZ2VNZW1vcnk9dH0pKHdpbmRvdyl9KSxkZWZp
bmUoInRvZG9tdmMvc2VydmljZXMvcmVwbyIsWyJleHBvcnRzIiwiZW1iZXIiLCJ0b2RvbXZjL3Nl
cnZpY2VzL21lbW9yeSJdLGZ1bmN0aW9uKGUsdCxvKXtlLmRlZmF1bHQ9dC5kZWZhdWx0LlNlcnZp
Y2UuZXh0ZW5kKHtsYXN0SWQ6MCxkYXRhOm51bGwsZmluZEFsbDpmdW5jdGlvbigpe3JldHVybiB0
aGlzLmdldCgiZGF0YSIpfHx0aGlzLnNldCgiZGF0YSIsSlNPTi5wYXJzZSh3aW5kb3cubG9jYWxT
dG9yYWdlTWVtb3J5LmdldEl0ZW0oInRvZG9zIil8fCJbXSIpKX0sYWRkOmZ1bmN0aW9uKGUpe3Zh
ciB0PU9iamVjdC5hc3NpZ24oe2lkOnRoaXMuaW5jcmVtZW50UHJvcGVydHkoImxhc3RJZCIpfSxl
KQorcmV0dXJuIHRoaXMuZ2V0KCJkYXRhIikucHVzaE9iamVjdCh0KSx0aGlzLnBlcnNpc3QoKSx0
fSxkZWxldGU6ZnVuY3Rpb24oZSl7dGhpcy5nZXQoImRhdGEiKS5yZW1vdmVPYmplY3QoZSksdGhp
cy5wZXJzaXN0KCl9LHBlcnNpc3Q6ZnVuY3Rpb24oKXt3aW5kb3cubG9jYWxTdG9yYWdlTWVtb3J5
LnNldEl0ZW0oInRvZG9zIixKU09OLnN0cmluZ2lmeSh0aGlzLmdldCgiZGF0YSIpKSl9fSl9KSxk
ZWZpbmUoInRvZG9tdmMvdGVtcGxhdGVzL2FjdGl2ZSIsWyJleHBvcnRzIl0sZnVuY3Rpb24oZSl7
ZS5kZWZhdWx0PUVtYmVyLkhUTUxCYXJzLnRlbXBsYXRlKHtpZDoiYUFzYzRMdDgiLGJsb2NrOid7
InN0YXRlbWVudHMiOltbMSxbMzMsWyJ0b2RvLWxpc3QiXSxudWxsLFtbInRvZG9zIl0sW1syOCxb
InRvZG9zIl1dXV1dLGZhbHNlXV0sImxvY2FscyI6W10sIm5hbWVkIjpbXSwieWllbGRzIjpbXSwi
aGFzUGFydGlhbHMiOmZhbHNlfScsbWV0YTp7bW9kdWxlTmFtZToidG9kb212Yy90ZW1wbGF0ZXMv
YWN0aXZlLmhicyJ9fSl9KSxkZWZpbmUoInRvZG9tdmMvdGVtcGxhdGVzL2FwcGxpY2F0aW9uIixb
ImV4cG9ydHMiXSxmdW5jdGlvbihlKXtlLmRlZmF1bHQ9RW1iZXIuSFRNTEJhcnMudGVtcGxhdGUo
e2lkOiJCWW55ejVPTiIsYmxvY2s6J3sic3RhdGVtZW50cyI6W1sxMSwic2VjdGlvbiIsW11dLFsx
NSwiaWQiLCJ0b2RvYXBwIl0sWzEzXSxbMCwiXFxuICAiXSxbMTEsImhlYWRlciIsW11dLFsxNSwi
aWQiLCJoZWFkZXIiXSxbMTNdLFswLCJcXG4gICAgIl0sWzExLCJoMSIsW11dLFsxM10sWzAsInRv
ZG9zIl0sWzE0XSxbMCwiXFxuICAgICJdLFsxMSwiaW5wdXQiLFtdXSxbMTUsInR5cGUiLCJ0ZXh0
Il0sWzE1LCJpZCIsIm5ldy10b2RvIl0sWzE2LCJvbmtleWRvd24iLFszMyxbImFjdGlvbiJdLFtb
MjgsW251bGxdXSwiY3JlYXRlVG9kbyJdLG51bGxdLG51bGxdLFsxNSwicGxhY2Vob2xkZXIiLCJX
aGF0IG5lZWRzIHRvIGJlIGRvbmU/Il0sWzE1LCJhdXRvZm9jdXMiLCIiXSxbMTNdLFsxNF0sWzAs
IlxcbiAgIl0sWzE0XSxbMCwiXFxuICAgICJdLFsxLFsyNixbIm91dGxldCJdXSxmYWxzZV0sWzAs
IlxcbiJdLFs2LFsiaWYiXSxbWzMzLFsiZ3QiXSxbWzI4LFsibW9kZWwiLCJsZW5ndGgiXV0sMF0s
bnVsbF1dLG51bGwseyJzdGF0ZW1lbnRzIjpbWzAsIiAgICAgICJdLFsxMSwiZm9vdGVyIixbXV0s
WzE1LCJpZCIsImZvb3RlciJdLFsxM10sWzAsIlxcbiAgICAgICAgIl0sWzExLCJzcGFuIixbXV0s
WzE1LCJpZCIsInRvZG8tY291bnQiXSxbMTNdLFsxMSwic3Ryb25nIixbXV0sWzEzXSxbMSxbMjgs
WyJyZW1haW5pbmciLCJsZW5ndGgiXV0sZmFsc2VdLFsxNF0sWzAsIiAiXSxbMSxbMzMsWyJwbHVy
YWxpemUiXSxbIml0ZW0iLFsyOCxbInJlbWFpbmluZyIsImxlbmd0aCJdXV0sbnVsbF0sZmFsc2Vd
LFswLCIgbGVmdCJdLFsxNF0sWzAsIlxcbiAgICAgICAgIl0sWzExLCJ1bCIsW11dLFsxNSwiaWQi
LCJmaWx0ZXJzIl0sWzEzXSxbMCwiXFxuICAgICAgICAgICJdLFsxMSwibGkiLFtdXSxbMTNdLFs2
LFsibGluay10byJdLFsiaW5kZXgiXSxbWyJhY3RpdmVDbGFzcyJdLFsic2VsZWN0ZWQiXV0seyJz
dGF0ZW1lbnRzIjpbWzAsIkFsbCJdXSwibG9jYWxzIjpbXX0sbnVsbF0sWzE0XSxbMCwiXFxuICAg
ICAgICAgICJdLFsxMSwibGkiLFtdXSxbMTNdLFs2LFsibGluay10byJdLFsiYWN0aXZlIl0sW1si
YWN0aXZlQ2xhc3MiXSxbInNlbGVjdGVkIl1dLHsic3RhdGVtZW50cyI6W1swLCJBY3RpdmUiXV0s
ImxvY2FscyI6W119LG51bGxdLFsxNF0sWzAsIlxcbiAgICAgICAgICAiXSxbMTEsImxpIixbXV0s
WzEzXSxbNixbImxpbmstdG8iXSxbImNvbXBsZXRlZCJdLFtbImFjdGl2ZUNsYXNzIl0sWyJzZWxl
Y3RlZCJdXSx7InN0YXRlbWVudHMiOltbMCwiQ29tcGxldGVkIl1dLCJsb2NhbHMiOltdfSxudWxs
XSxbMTRdLFswLCJcXG4gICAgICAgICJdLFsxNF0sWzAsIlxcbiJdLFs2LFsiaWYiXSxbWzI4LFsi
Y29tcGxldGVkIiwibGVuZ3RoIl1dXSxudWxsLHsic3RhdGVtZW50cyI6W1swLCIgICAgICAgICAg
Il0sWzExLCJidXR0b24iLFtdXSxbMTUsImlkIiwiY2xlYXItY29tcGxldGVkIl0sWzE2LCJvbmNs
aWNrIixbMzMsWyJhY3Rpb24iXSxbWzI4LFtudWxsXV0sImNsZWFyQ29tcGxldGVkIl0sbnVsbF0s
bnVsbF0sWzEzXSxbMCwiQ2xlYXIgY29tcGxldGVkIl0sWzE0XSxbMCwiXFxuIl1dLCJsb2NhbHMi
OltdfSxudWxsXSxbMCwiICAgICAgIl0sWzE0XSxbMCwiXFxuIl1dLCJsb2NhbHMiOltdfSxudWxs
XSxbMTRdLFswLCJcXG4iXSxbMTEsImZvb3RlciIsW11dLFsxNSwiaWQiLCJpbmZvIl0sWzEzXSxb
MCwiXFxuICAiXSxbMTEsInAiLFtdXSxbMTNdLFswLCJEb3VibGUtY2xpY2sgdG8gZWRpdCBhIHRv
ZG8iXSxbMTRdLFswLCJcXG4gICJdLFsxMSwicCIsW11dLFsxM10sWzAsIlxcbiAgICBDcmVhdGVk
IGJ5XFxuICAgICJdLFsxMSwiYSIsW11dLFsxNSwiaHJlZiIsImh0dHA6Ly9naXRodWIuY29tL2Np
YmVybm94Il0sWzEzXSxbMCwiTWlndWVsIENhbWJhIl0sWzE0XSxbMCwiLFxcbiAgICAiXSxbMTEs
ImEiLFtdXSxbMTUsImhyZWYiLCJodHRwOi8vZ2l0aHViLmNvbS9hZGR5b3NtYW5pIl0sWzEzXSxb
MCwiQWRkeSBPc21hbmkiXSxbMTRdLFswLCJcXG4gICJdLFsxNF0sWzAsIlxcbiAgIl0sWzExLCJw
IixbXV0sWzEzXSxbMCwiUGFydCBvZiAiXSxbMTEsImEiLFtdXSxbMTUsImhyZWYiLCJodHRwOi8v
dG9kb212Yy5jb20iXSxbMTNdLFswLCJUb2RvTVZDIl0sWzE0XSxbMTRdLFswLCJcXG4iXSxbMTRd
XSwibG9jYWxzIjpbXSwibmFtZWQiOltdLCJ5aWVsZHMiOltdLCJoYXNQYXJ0aWFscyI6ZmFsc2V9
JyxtZXRhOnttb2R1bGVOYW1lOiJ0b2RvbXZjL3RlbXBsYXRlcy9hcHBsaWNhdGlvbi5oYnMifX0p
fSksZGVmaW5lKCJ0b2RvbXZjL3RlbXBsYXRlcy9jb21wbGV0ZWQiLFsiZXhwb3J0cyJdLGZ1bmN0
aW9uKGUpe2UuZGVmYXVsdD1FbWJlci5IVE1MQmFycy50ZW1wbGF0ZSh7aWQ6IkY0bGE5d3RiIixi
bG9jazoneyJzdGF0ZW1lbnRzIjpbWzEsWzMzLFsidG9kby1saXN0Il0sbnVsbCxbWyJ0b2RvcyJd
LFtbMjgsWyJ0b2RvcyJdXV1dXSxmYWxzZV1dLCJsb2NhbHMiOltdLCJuYW1lZCI6W10sInlpZWxk
cyI6W10sImhhc1BhcnRpYWxzIjpmYWxzZX0nLG1ldGE6e21vZHVsZU5hbWU6InRvZG9tdmMvdGVt
cGxhdGVzL2NvbXBsZXRlZC5oYnMifX0pfSksZGVmaW5lKCJ0b2RvbXZjL3RlbXBsYXRlcy9jb21w
b25lbnRzL3RvZG8taXRlbSIsWyJleHBvcnRzIl0sZnVuY3Rpb24oZSl7ZS5kZWZhdWx0PUVtYmVy
LkhUTUxCYXJzLnRlbXBsYXRlKHtpZDoiZFEzK2NLNUUiLGJsb2NrOid7InN0YXRlbWVudHMiOltb
MTEsImRpdiIsW11dLFsxNSwiY2xhc3MiLCJ2aWV3Il0sWzEzXSxbMCwiXFxuICAiXSxbMTEsImlu
cHV0IixbXV0sWzE1LCJ0eXBlIiwiY2hlY2tib3giXSxbMTUsImNsYXNzIiwidG9nZ2xlIl0sWzE2
LCJjaGVja2VkIixbMjgsWyJ0b2RvIiwiY29tcGxldGVkIl1dLG51bGxdLFsxNiwib25jaGFuZ2Ui
LFszMyxbImFjdGlvbiJdLFtbMjgsW251bGxdXSwidG9nZ2xlQ29tcGxldGVkIl0sbnVsbF0sbnVs
bF0sWzEzXSxbMTRdLFswLCJcXG4gICJdLFsxMSwibGFiZWwiLFtdXSxbMTYsIm9uZGJsY2xpY2si
LFszMyxbImFjdGlvbiJdLFtbMjgsW251bGxdXSwic3RhcnRFZGl0aW5nIl0sbnVsbF0sbnVsbF0s
WzEzXSxbMSxbMjgsWyJ0b2RvIiwidGl0bGUiXV0sZmFsc2VdLFsxNF0sWzAsIlxcbiAgIl0sWzEx
LCJidXR0b24iLFtdXSxbMTYsIm9uY2xpY2siLFszMyxbImFjdGlvbiJdLFtbMjgsW251bGxdXSwi
cmVtb3ZlVG9kbyJdLG51bGxdLG51bGxdLFsxNSwiY2xhc3MiLCJkZXN0cm95Il0sWzEzXSxbMTRd
LFswLCJcXG4iXSxbMTRdLFswLCJcXG4iXSxbMTEsImlucHV0IixbXV0sWzE1LCJ0eXBlIiwidGV4
dCJdLFsxNSwiY2xhc3MiLCJlZGl0Il0sWzE2LCJ2YWx1ZSIsWzI4LFsidG9kbyIsInRpdGxlIl1d
LG51bGxdLFsxNiwib25ibHVyIixbMzMsWyJhY3Rpb24iXSxbWzI4LFtudWxsXV0sImRvbmVFZGl0
aW5nIl0sW1sidmFsdWUiXSxbInRhcmdldC52YWx1ZSJdXV0sbnVsbF0sWzE2LCJvbmtleWRvd24i
LFszMyxbImFjdGlvbiJdLFtbMjgsW251bGxdXSwiaGFuZGxlS2V5ZG93biJdLG51bGxdLG51bGxd
LFsxNSwiYXV0b2ZvY3VzIiwiIl0sWzEzXSxbMTRdXSwibG9jYWxzIjpbXSwibmFtZWQiOltdLCJ5
aWVsZHMiOltdLCJoYXNQYXJ0aWFscyI6ZmFsc2V9JyxtZXRhOnttb2R1bGVOYW1lOiJ0b2RvbXZj
L3RlbXBsYXRlcy9jb21wb25lbnRzL3RvZG8taXRlbS5oYnMifX0pfSksZGVmaW5lKCJ0b2RvbXZj
L3RlbXBsYXRlcy9jb21wb25lbnRzL3RvZG8tbGlzdCIsWyJleHBvcnRzIl0sZnVuY3Rpb24oZSl7
ZS5kZWZhdWx0PUVtYmVyLkhUTUxCYXJzLnRlbXBsYXRlKHtpZDoiWEdtV1dENjMiLGJsb2NrOid7
InN0YXRlbWVudHMiOltbNixbImlmIl0sW1syOCxbInRvZG9zIiwibGVuZ3RoIl1dXSxudWxsLHsi
c3RhdGVtZW50cyI6W1s2LFsiaWYiXSxbWzI4LFsiY2FuVG9nZ2xlIl1dXSxudWxsLHsic3RhdGVt
ZW50cyI6W1swLCIgICAgIl0sWzExLCJpbnB1dCIsW11dLFsxNSwidHlwZSIsImNoZWNrYm94Il0s
WzE1LCJpZCIsInRvZ2dsZS1hbGwiXSxbMTYsImNoZWNrZWQiLFsyNixbImFsbENvbXBsZXRlZCJd
XSxudWxsXSxbMTYsIm9uY2hhbmdlIixbMzMsWyJhY3Rpb24iXSxbWzI4LFtudWxsXV0sInRvZ2ds
ZUFsbCJdLG51bGxdLG51bGxdLFsxM10sWzE0XSxbMCwiXFxuIl1dLCJsb2NhbHMiOltdfSxudWxs
XSxbMCwiICAiXSxbMTEsInVsIixbXV0sWzE1LCJpZCIsInRvZG8tbGlzdCJdLFsxNSwiY2xhc3Mi
LCJ0b2RvLWxpc3QiXSxbMTNdLFswLCJcXG4iXSxbNixbImVhY2giXSxbWzI4LFsidG9kb3MiXV1d
LG51bGwseyJzdGF0ZW1lbnRzIjpbWzAsIiAgICAgICJdLFsxLFszMyxbInRvZG8taXRlbSJdLG51
bGwsW1sidG9kbyIsIm9uU3RhcnRFZGl0Iiwib25FbmRFZGl0Il0sW1syOCxbInRvZG8iXV0sWzMz
LFsiYWN0aW9uIl0sW1syOCxbbnVsbF1dLCJkaXNhYmxlVG9nZ2xlIl0sbnVsbF0sWzMzLFsiYWN0
aW9uIl0sW1syOCxbbnVsbF1dLCJlbmFibGVUb2dnbGUiXSxudWxsXV1dXSxmYWxzZV0sWzAsIlxc
biJdXSwibG9jYWxzIjpbInRvZG8iXX0sbnVsbF0sWzAsIiAgIl0sWzE0XSxbMCwiXFxuIl1dLCJs
b2NhbHMiOltdfSxudWxsXV0sImxvY2FscyI6W10sIm5hbWVkIjpbXSwieWllbGRzIjpbXSwiaGFz
UGFydGlhbHMiOmZhbHNlfScsbWV0YTp7bW9kdWxlTmFtZToidG9kb212Yy90ZW1wbGF0ZXMvY29t
cG9uZW50cy90b2RvLWxpc3QuaGJzIn19KX0pLGRlZmluZSgidG9kb212Yy90ZW1wbGF0ZXMvaW5k
ZXgiLFsiZXhwb3J0cyJdLGZ1bmN0aW9uKGUpe2UuZGVmYXVsdD1FbWJlci5IVE1MQmFycy50ZW1w
bGF0ZSh7aWQ6ImhCYWROSXBvIixibG9jazoneyJzdGF0ZW1lbnRzIjpbWzYsWyJpZiJdLFtbMjgs
WyJtb2RlbCIsImxlbmd0aCJdXV0sbnVsbCx7InN0YXRlbWVudHMiOltbMCwiICAiXSxbMSxbMzMs
WyJ0b2RvLWxpc3QiXSxudWxsLFtbInRvZG9zIl0sW1syOCxbIm1vZGVsIl1dXV1dLGZhbHNlXSxb
MCwiXFxuIl1dLCJsb2NhbHMiOltdfSxudWxsXV0sImxvY2FscyI6W10sIm5hbWVkIjpbXSwieWll
bGRzIjpbXSwiaGFzUGFydGlhbHMiOmZhbHNlfScsbWV0YTp7bW9kdWxlTmFtZToidG9kb212Yy90
ZW1wbGF0ZXMvaW5kZXguaGJzIn19KX0pLGRlZmluZSgidG9kb212Yy9jb25maWcvZW52aXJvbm1l
bnQiLFsiZW1iZXIiXSxmdW5jdGlvbihlKXt0cnl7dmFyIHQ9InRvZG9tdmMvY29uZmlnL2Vudmly
b25tZW50IixvPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ21ldGFbbmFtZT0iJyt0KyciXScpLmdl
dEF0dHJpYnV0ZSgiY29udGVudCIpLG49SlNPTi5wYXJzZSh1bmVzY2FwZShvKSksbD17ZGVmYXVs
dDpufQorcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJfX2VzTW9kdWxlIix7dmFsdWU6
ITB9KSxsfWNhdGNoKGUpe3Rocm93IG5ldyBFcnJvcignQ291bGQgbm90IHJlYWQgY29uZmlnIGZy
b20gbWV0YSB0YWcgd2l0aCBuYW1lICInK3QrJyIuJyl9fSkscnVubmluZ1Rlc3RzfHxyZXF1aXJl
KCJ0b2RvbXZjL2FwcCIpLmRlZmF1bHQuY3JlYXRlKHtuYW1lOiJ0b2RvbXZjIix2ZXJzaW9uOiIw
LjAuMCthMmNhMTY1MCJ9KQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRl
ci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy9zb3VyY2Uv
ZGlzdC9hc3NldHMvdG9kb212Yy03NjAxZmZjYTYxNTBlZDYzM2YwZjMzM2ZlNzZiZmFmMi5qcyBi
L1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0
dXJlLWV4YW1wbGVzL2VtYmVyanMvc291cmNlL2Rpc3QvYXNzZXRzL3RvZG9tdmMtNzYwMWZmY2E2
MTUwZWQ2MzNmMGYzMzNmZTc2YmZhZjIuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGYyNWUyY2EwOGE1NjNiNDkxOWZhOWNhMzkwODZhNGE0YTBiOGZlYTEuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9t
ZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy9zb3Vy
Y2UvZGlzdC9hc3NldHMvdG9kb212Yy03NjAxZmZjYTYxNTBlZDYzM2YwZjMzM2ZlNzZiZmFmMi5q
cworKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLSJ1c2Ugc3RyaWN0IgotZGVmaW5lKCJ0
b2RvbXZjL2FwcCIsWyJleHBvcnRzIiwiZW1iZXIiLCJ0b2RvbXZjL3Jlc29sdmVyIiwiZW1iZXIt
bG9hZC1pbml0aWFsaXplcnMiLCJ0b2RvbXZjL2NvbmZpZy9lbnZpcm9ubWVudCJdLGZ1bmN0aW9u
KGUsdCxvLG4sbCl7dmFyIGk9dm9pZCAwCi10LmRlZmF1bHQuTU9ERUxfRkFDVE9SWV9JTkpFQ1RJ
T05TPSEwLGk9dC5kZWZhdWx0LkFwcGxpY2F0aW9uLmV4dGVuZCh7bW9kdWxlUHJlZml4OmwuZGVm
YXVsdC5tb2R1bGVQcmVmaXgscG9kTW9kdWxlUHJlZml4OmwuZGVmYXVsdC5wb2RNb2R1bGVQcmVm
aXgsUmVzb2x2ZXI6by5kZWZhdWx0fSksKDAsbi5kZWZhdWx0KShpLGwuZGVmYXVsdC5tb2R1bGVQ
cmVmaXgpLGUuZGVmYXVsdD1pfSksZGVmaW5lKCJ0b2RvbXZjL2NvbXBvbmVudHMvdG9kby1pdGVt
IixbImV4cG9ydHMiLCJlbWJlciJdLGZ1bmN0aW9uKGUsdCl7ZS5kZWZhdWx0PXQuZGVmYXVsdC5D
b21wb25lbnQuZXh0ZW5kKHtyZXBvOnQuZGVmYXVsdC5pbmplY3Quc2VydmljZSgpLHRhZ05hbWU6
ImxpIixlZGl0aW5nOiExLGNsYXNzTmFtZUJpbmRpbmdzOlsidG9kby5jb21wbGV0ZWQiLCJlZGl0
aW5nIl0sYWN0aW9uczp7c3RhcnRFZGl0aW5nOmZ1bmN0aW9uKCl7dGhpcy5nZXQoIm9uU3RhcnRF
ZGl0IikoKSx0aGlzLnNldCgiZWRpdGluZyIsITApLHQuZGVmYXVsdC5ydW4uc2NoZWR1bGVPbmNl
KCJhZnRlclJlbmRlciIsdGhpcywiZm9jdXNJbnB1dCIpfSxkb25lRWRpdGluZzpmdW5jdGlvbihl
KXt0aGlzLmdldCgiZWRpdGluZyIpJiYodC5kZWZhdWx0LmlzQmxhbmsoZSk/dGhpcy5zZW5kKCJy
ZW1vdmVUb2RvIik6KHRoaXMuc2V0KCJ0b2RvLnRpdGxlIixlLnRyaW0oKSksdGhpcy5zZXQoImVk
aXRpbmciLCExKSx0aGlzLmdldCgib25FbmRFZGl0IikoKSkpfSxoYW5kbGVLZXlkb3duOmZ1bmN0
aW9uKGUpezEzPT09ZS5rZXlDb2RlP2UudGFyZ2V0LmJsdXIoKToyNz09PWUua2V5Q29kZSYmdGhp
cy5zZXQoImVkaXRpbmciLCExKX0sdG9nZ2xlQ29tcGxldGVkOmZ1bmN0aW9uKGUpe3ZhciBvPXRo
aXMuZ2V0KCJ0b2RvIikKLXQuZGVmYXVsdC5zZXQobywiY29tcGxldGVkIixlLnRhcmdldC5jaGVj
a2VkKSx0aGlzLmdldCgicmVwbyIpLnBlcnNpc3QoKX0scmVtb3ZlVG9kbzpmdW5jdGlvbigpe3Ro
aXMuZ2V0KCJyZXBvIikuZGVsZXRlKHRoaXMuZ2V0KCJ0b2RvIikpfX0sZm9jdXNJbnB1dDpmdW5j
dGlvbigpe3RoaXMuZWxlbWVudC5xdWVyeVNlbGVjdG9yKCJpbnB1dC5lZGl0IikuZm9jdXMoKX19
KX0pLGRlZmluZSgidG9kb212Yy9jb21wb25lbnRzL3RvZG8tbGlzdCIsWyJleHBvcnRzIiwiZW1i
ZXIiXSxmdW5jdGlvbihlLHQpe2UuZGVmYXVsdD10LmRlZmF1bHQuQ29tcG9uZW50LmV4dGVuZCh7
cmVwbzp0LmRlZmF1bHQuaW5qZWN0LnNlcnZpY2UoKSx0YWdOYW1lOiJzZWN0aW9uIixlbGVtZW50
SWQ6Im1haW4iLGNhblRvZ2dsZTohMCxhbGxDb21wbGV0ZWQ6dC5kZWZhdWx0LmNvbXB1dGVkKCJ0
b2Rvcy5AZWFjaC5jb21wbGV0ZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0KCJ0b2RvcyIp
LmlzRXZlcnkoImNvbXBsZXRlZCIpfSksYWN0aW9uczp7ZW5hYmxlVG9nZ2xlOmZ1bmN0aW9uKCl7
dGhpcy5zZXQoImNhblRvZ2dsZSIsITApfSxkaXNhYmxlVG9nZ2xlOmZ1bmN0aW9uKCl7dGhpcy5z
ZXQoImNhblRvZ2dsZSIsITEpfSx0b2dnbGVBbGw6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmdldCgi
YWxsQ29tcGxldGVkIikKLXRoaXMuZ2V0KCJ0b2RvcyIpLmZvckVhY2goZnVuY3Rpb24obyl7cmV0
dXJuIHQuZGVmYXVsdC5zZXQobywiY29tcGxldGVkIiwhZSl9KSx0aGlzLmdldCgicmVwbyIpLnBl
cnNpc3QoKX19fSl9KSxkZWZpbmUoInRvZG9tdmMvY29udHJvbGxlcnMvYWN0aXZlIixbImV4cG9y
dHMiLCJlbWJlciJdLGZ1bmN0aW9uKGUsdCl7ZS5kZWZhdWx0PXQuZGVmYXVsdC5Db250cm9sbGVy
LmV4dGVuZCh7dG9kb3M6dC5kZWZhdWx0LmNvbXB1dGVkLmZpbHRlckJ5KCJtb2RlbCIsImNvbXBs
ZXRlZCIsITEpfSl9KSxkZWZpbmUoInRvZG9tdmMvY29udHJvbGxlcnMvYXBwbGljYXRpb24iLFsi
ZXhwb3J0cyIsImVtYmVyIl0sZnVuY3Rpb24oZSx0KXtlLmRlZmF1bHQ9dC5kZWZhdWx0LkNvbnRy
b2xsZXIuZXh0ZW5kKHtyZXBvOnQuZGVmYXVsdC5pbmplY3Quc2VydmljZSgpLHJlbWFpbmluZzp0
LmRlZmF1bHQuY29tcHV0ZWQuZmlsdGVyQnkoIm1vZGVsIiwiY29tcGxldGVkIiwhMSksY29tcGxl
dGVkOnQuZGVmYXVsdC5jb21wdXRlZC5maWx0ZXJCeSgibW9kZWwiLCJjb21wbGV0ZWQiKSxhY3Rp
b25zOntjcmVhdGVUb2RvOmZ1bmN0aW9uKGUpezEzIT09ZS5rZXlDb2RlfHx0LmRlZmF1bHQuaXNC
bGFuayhlLnRhcmdldC52YWx1ZSl8fCh0aGlzLmdldCgicmVwbyIpLmFkZCh7dGl0bGU6ZS50YXJn
ZXQudmFsdWUudHJpbSgpLGNvbXBsZXRlZDohMX0pLGUudGFyZ2V0LnZhbHVlPSIiKX0sY2xlYXJD
b21wbGV0ZWQ6ZnVuY3Rpb24oKXt0aGlzLmdldCgibW9kZWwiKS5yZW1vdmVPYmplY3RzKHRoaXMu
Z2V0KCJjb21wbGV0ZWQiKSksdGhpcy5nZXQoInJlcG8iKS5wZXJzaXN0KCl9fX0pfSksZGVmaW5l
KCJ0b2RvbXZjL2NvbnRyb2xsZXJzL2NvbXBsZXRlZCIsWyJleHBvcnRzIiwiZW1iZXIiXSxmdW5j
dGlvbihlLHQpe2UuZGVmYXVsdD10LmRlZmF1bHQuQ29udHJvbGxlci5leHRlbmQoe3RvZG9zOnQu
ZGVmYXVsdC5jb21wdXRlZC5maWx0ZXJCeSgibW9kZWwiLCJjb21wbGV0ZWQiLCEwKX0pfSksZGVm
aW5lKCJ0b2RvbXZjL2hlbHBlcnMvYXBwLXZlcnNpb24iLFsiZXhwb3J0cyIsImVtYmVyIiwidG9k
b212Yy9jb25maWcvZW52aXJvbm1lbnQiLCJlbWJlci1jbGktYXBwLXZlcnNpb24vdXRpbHMvcmVn
ZXhwIl0sZnVuY3Rpb24oZSx0LG8sbil7ZnVuY3Rpb24gbChlKXt2YXIgdD1hcmd1bWVudHMubGVu
Z3RoPD0xfHx2b2lkIDA9PT1hcmd1bWVudHNbMV0/e306YXJndW1lbnRzWzFdCi1yZXR1cm4gdC5o
aWRlU2hhP2kubWF0Y2gobi52ZXJzaW9uUmVnRXhwKVswXTp0LmhpZGVWZXJzaW9uP2kubWF0Y2go
bi5zaGFSZWdFeHApWzBdOml9ZS5hcHBWZXJzaW9uPWwKLXZhciBpPW8uZGVmYXVsdC5BUFAudmVy
c2lvbgotZS5kZWZhdWx0PXQuZGVmYXVsdC5IZWxwZXIuaGVscGVyKGwpfSksZGVmaW5lKCJ0b2Rv
bXZjL2hlbHBlcnMvZ3QiLFsiZXhwb3J0cyIsImVtYmVyIl0sZnVuY3Rpb24oZSx0KXtmdW5jdGlv
biBvKGUpe3ZhciB0PW4oZSwyKQotcmV0dXJuIHRbMF0+dFsxXX12YXIgbj1mdW5jdGlvbigpe2Z1
bmN0aW9uIGUoZSx0KXt2YXIgbz1bXSxuPSEwLGw9ITEsaT12b2lkIDAKLXRyeXtmb3IodmFyIGEs
ZD1lW1N5bWJvbC5pdGVyYXRvcl0oKTshKG49KGE9ZC5uZXh0KCkpLmRvbmUpJiYoby5wdXNoKGEu
dmFsdWUpLCF0fHxvLmxlbmd0aCE9PXQpO249ITApO31jYXRjaChlKXtsPSEwLGk9ZX1maW5hbGx5
e3RyeXshbiYmZC5yZXR1cm4mJmQucmV0dXJuKCl9ZmluYWxseXtpZihsKXRocm93IGl9fXJldHVy
biBvfXJldHVybiBmdW5jdGlvbih0LG8pe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIHQKLWlm
KFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QodCkpcmV0dXJuIGUodCxvKQotdGhyb3cgbmV3IFR5
cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0
YW5jZSIpfX0oKQotZS5ndD1vLGUuZGVmYXVsdD10LmRlZmF1bHQuSGVscGVyLmhlbHBlcihvKX0p
LGRlZmluZSgidG9kb212Yy9oZWxwZXJzL3BsdXJhbGl6ZSIsWyJleHBvcnRzIiwiZW1iZXIiLCJl
bWJlci1pbmZsZWN0b3IiXSxmdW5jdGlvbihlLHQsbyl7ZnVuY3Rpb24gbihlKXt2YXIgdD1sKGUs
Miksbj10WzBdCi1yZXR1cm4gMT09PXRbMV0/bjooMCxvLnBsdXJhbGl6ZSkobil9dmFyIGw9ZnVu
Y3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dmFyIG89W10sbj0hMCxsPSExLGk9dm9pZCAwCi10cnl7
Zm9yKHZhciBhLGQ9ZVtTeW1ib2wuaXRlcmF0b3JdKCk7IShuPShhPWQubmV4dCgpKS5kb25lKSYm
KG8ucHVzaChhLnZhbHVlKSwhdHx8by5sZW5ndGghPT10KTtuPSEwKTt9Y2F0Y2goZSl7bD0hMCxp
PWV9ZmluYWxseXt0cnl7IW4mJmQucmV0dXJuJiZkLnJldHVybigpfWZpbmFsbHl7aWYobCl0aHJv
dyBpfX1yZXR1cm4gb31yZXR1cm4gZnVuY3Rpb24odCxvKXtpZihBcnJheS5pc0FycmF5KHQpKXJl
dHVybiB0Ci1pZihTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KHQpKXJldHVybiBlKHQsbykKLXRo
cm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRl
cmFibGUgaW5zdGFuY2UiKX19KCkKLWUucGx1cmFsaXplSGVscGVyPW4sZS5kZWZhdWx0PXQuZGVm
YXVsdC5IZWxwZXIuaGVscGVyKG4pfSksZGVmaW5lKCJ0b2RvbXZjL2hlbHBlcnMvc2luZ3VsYXJp
emUiLFsiZXhwb3J0cyIsImVtYmVyLWluZmxlY3Rvci9saWIvaGVscGVycy9zaW5ndWxhcml6ZSJd
LGZ1bmN0aW9uKGUsdCl7ZS5kZWZhdWx0PXQuZGVmYXVsdH0pLGRlZmluZSgidG9kb212Yy9pbml0
aWFsaXplcnMvYXBwLXZlcnNpb24iLFsiZXhwb3J0cyIsImVtYmVyLWNsaS1hcHAtdmVyc2lvbi9p
bml0aWFsaXplci1mYWN0b3J5IiwidG9kb212Yy9jb25maWcvZW52aXJvbm1lbnQiXSxmdW5jdGlv
bihlLHQsbyl7dmFyIG49by5kZWZhdWx0LkFQUCxsPW4ubmFtZSxpPW4udmVyc2lvbgotZS5kZWZh
dWx0PXtuYW1lOiJBcHAgVmVyc2lvbiIsaW5pdGlhbGl6ZTooMCx0LmRlZmF1bHQpKGwsaSl9fSks
ZGVmaW5lKCJ0b2RvbXZjL2luaXRpYWxpemVycy9jb250YWluZXItZGVidWctYWRhcHRlciIsWyJl
eHBvcnRzIiwiZW1iZXItcmVzb2x2ZXIvY29udGFpbmVyLWRlYnVnLWFkYXB0ZXIiXSxmdW5jdGlv
bihlLHQpe2UuZGVmYXVsdD17bmFtZToiY29udGFpbmVyLWRlYnVnLWFkYXB0ZXIiLGluaXRpYWxp
emU6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHNbMV18fGFyZ3VtZW50c1swXQotZS5yZWdpc3Rl
cigiY29udGFpbmVyLWRlYnVnLWFkYXB0ZXI6bWFpbiIsdC5kZWZhdWx0KSxlLmluamVjdCgiY29u
dGFpbmVyLWRlYnVnLWFkYXB0ZXI6bWFpbiIsIm5hbWVzcGFjZSIsImFwcGxpY2F0aW9uOm1haW4i
KX19fSksZGVmaW5lKCJ0b2RvbXZjL2luaXRpYWxpemVycy9leHBvcnQtYXBwbGljYXRpb24tZ2xv
YmFsIixbImV4cG9ydHMiLCJlbWJlciIsInRvZG9tdmMvY29uZmlnL2Vudmlyb25tZW50Il0sZnVu
Y3Rpb24oZSx0LG8pe2Z1bmN0aW9uIG4oKXt2YXIgZT1hcmd1bWVudHNbMV18fGFyZ3VtZW50c1sw
XQotaWYoITEhPT1vLmRlZmF1bHQuZXhwb3J0QXBwbGljYXRpb25HbG9iYWwpe3ZhciBuCi1pZigi
dW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyluPXdpbmRvdwotZWxzZSBpZigidW5kZWZpbmVkIiE9
dHlwZW9mIGdsb2JhbCluPWdsb2JhbAotZWxzZXtpZigidW5kZWZpbmVkIj09dHlwZW9mIHNlbGYp
cmV0dXJuCi1uPXNlbGZ9dmFyIGwsaT1vLmRlZmF1bHQuZXhwb3J0QXBwbGljYXRpb25HbG9iYWwK
LWw9InN0cmluZyI9PXR5cGVvZiBpP2k6dC5kZWZhdWx0LlN0cmluZy5jbGFzc2lmeShvLmRlZmF1
bHQubW9kdWxlUHJlZml4KSxuW2xdfHwobltsXT1lLGUucmVvcGVuKHt3aWxsRGVzdHJveTpmdW5j
dGlvbigpe3RoaXMuX3N1cGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxkZWxldGUgbltsXX19KSl9
fWUuaW5pdGlhbGl6ZT1uLGUuZGVmYXVsdD17bmFtZToiZXhwb3J0LWFwcGxpY2F0aW9uLWdsb2Jh
bCIsaW5pdGlhbGl6ZTpufX0pLGRlZmluZSgidG9kb212Yy9yZXNvbHZlciIsWyJleHBvcnRzIiwi
ZW1iZXItcmVzb2x2ZXIiXSxmdW5jdGlvbihlLHQpe2UuZGVmYXVsdD10LmRlZmF1bHR9KSxkZWZp
bmUoInRvZG9tdmMvcm91dGVyIixbImV4cG9ydHMiLCJlbWJlciIsInRvZG9tdmMvY29uZmlnL2Vu
dmlyb25tZW50Il0sZnVuY3Rpb24oZSx0LG8pe3ZhciBuPXQuZGVmYXVsdC5Sb3V0ZXIuZXh0ZW5k
KHtsb2NhdGlvbjpvLmRlZmF1bHQubG9jYXRpb25UeXBlLHJvb3RVUkw6by5kZWZhdWx0LnJvb3RV
Ukx9KQotbi5tYXAoZnVuY3Rpb24oKXt0aGlzLnJvdXRlKCJhY3RpdmUiKSx0aGlzLnJvdXRlKCJj
b21wbGV0ZWQiKX0pLGUuZGVmYXVsdD1ufSksZGVmaW5lKCJ0b2RvbXZjL3JvdXRlcy9hcHBsaWNh
dGlvbiIsWyJleHBvcnRzIiwiZW1iZXIiXSxmdW5jdGlvbihlLHQpe2UuZGVmYXVsdD10LmRlZmF1
bHQuUm91dGUuZXh0ZW5kKHtyZXBvOnQuZGVmYXVsdC5pbmplY3Quc2VydmljZSgpLG1vZGVsOmZ1
bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0KCJyZXBvIikuZmluZEFsbCgpfX0pfSksZGVmaW5lKCJ0
b2RvbXZjL3NlcnZpY2VzL2FqYXgiLFsiZXhwb3J0cyIsImVtYmVyLWFqYXgvc2VydmljZXMvYWph
eCJdLGZ1bmN0aW9uKGUsdCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImRlZmF1bHQiLHtlbnVt
ZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0LmRlZmF1bHR9fSl9KSxkZWZpbmUoInRv
ZG9tdmMvc2VydmljZXMvbWVtb3J5IixbImV4cG9ydHMiXSxmdW5jdGlvbihlKXsoZnVuY3Rpb24o
ZSl7dmFyIHQ9e30sbz17fQotdC5sZW5ndGg9MCx0LmdldEl0ZW09ZnVuY3Rpb24oZSl7cmV0dXJu
IG9bZV18fG51bGx9LHQuc2V0SXRlbT1mdW5jdGlvbihlLG4pe3ZvaWQgMD09PW4/dC5yZW1vdmVJ
dGVtKGUpOihvLmhhc093blByb3BlcnR5KGUpfHx0Lmxlbmd0aCsrLG9bZV09IiIrbil9LHQucmVt
b3ZlSXRlbT1mdW5jdGlvbihlKXtvLmhhc093blByb3BlcnR5KGUpJiYoZGVsZXRlIG9bZV0sdC5s
ZW5ndGgtLSl9LHQua2V5PWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Qua2V5cyhvKVtlXXx8bnVs
bH0sdC5jbGVhcj1mdW5jdGlvbigpe289e30sdC5sZW5ndGg9MH0sZS5sb2NhbFN0b3JhZ2VNZW1v
cnk9dH0pKHdpbmRvdyl9KSxkZWZpbmUoInRvZG9tdmMvc2VydmljZXMvcmVwbyIsWyJleHBvcnRz
IiwiZW1iZXIiLCJ0b2RvbXZjL3NlcnZpY2VzL21lbW9yeSJdLGZ1bmN0aW9uKGUsdCxvKXtlLmRl
ZmF1bHQ9dC5kZWZhdWx0LlNlcnZpY2UuZXh0ZW5kKHtsYXN0SWQ6MCxkYXRhOm51bGwsZmluZEFs
bDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldCgiZGF0YSIpfHx0aGlzLnNldCgiZGF0YSIsSlNP
Ti5wYXJzZSh3aW5kb3cubG9jYWxTdG9yYWdlTWVtb3J5LmdldEl0ZW0oInRvZG9zIil8fCJbXSIp
KX0sYWRkOmZ1bmN0aW9uKGUpe3ZhciB0PU9iamVjdC5hc3NpZ24oe2lkOnRoaXMuaW5jcmVtZW50
UHJvcGVydHkoImxhc3RJZCIpfSxlKQotcmV0dXJuIHRoaXMuZ2V0KCJkYXRhIikucHVzaE9iamVj
dCh0KSx0aGlzLnBlcnNpc3QoKSx0fSxkZWxldGU6ZnVuY3Rpb24oZSl7dGhpcy5nZXQoImRhdGEi
KS5yZW1vdmVPYmplY3QoZSksdGhpcy5wZXJzaXN0KCl9LHBlcnNpc3Q6ZnVuY3Rpb24oKXt3aW5k
b3cubG9jYWxTdG9yYWdlTWVtb3J5LnNldEl0ZW0oInRvZG9zIixKU09OLnN0cmluZ2lmeSh0aGlz
LmdldCgiZGF0YSIpKSl9fSl9KSxkZWZpbmUoInRvZG9tdmMvdGVtcGxhdGVzL2FjdGl2ZSIsWyJl
eHBvcnRzIl0sZnVuY3Rpb24oZSl7ZS5kZWZhdWx0PUVtYmVyLkhUTUxCYXJzLnRlbXBsYXRlKHtp
ZDoiYUFzYzRMdDgiLGJsb2NrOid7InN0YXRlbWVudHMiOltbMSxbMzMsWyJ0b2RvLWxpc3QiXSxu
dWxsLFtbInRvZG9zIl0sW1syOCxbInRvZG9zIl1dXV1dLGZhbHNlXV0sImxvY2FscyI6W10sIm5h
bWVkIjpbXSwieWllbGRzIjpbXSwiaGFzUGFydGlhbHMiOmZhbHNlfScsbWV0YTp7bW9kdWxlTmFt
ZToidG9kb212Yy90ZW1wbGF0ZXMvYWN0aXZlLmhicyJ9fSl9KSxkZWZpbmUoInRvZG9tdmMvdGVt
cGxhdGVzL2FwcGxpY2F0aW9uIixbImV4cG9ydHMiXSxmdW5jdGlvbihlKXtlLmRlZmF1bHQ9RW1i
ZXIuSFRNTEJhcnMudGVtcGxhdGUoe2lkOiJCWW55ejVPTiIsYmxvY2s6J3sic3RhdGVtZW50cyI6
W1sxMSwic2VjdGlvbiIsW11dLFsxNSwiaWQiLCJ0b2RvYXBwIl0sWzEzXSxbMCwiXFxuICAiXSxb
MTEsImhlYWRlciIsW11dLFsxNSwiaWQiLCJoZWFkZXIiXSxbMTNdLFswLCJcXG4gICAgIl0sWzEx
LCJoMSIsW11dLFsxM10sWzAsInRvZG9zIl0sWzE0XSxbMCwiXFxuICAgICJdLFsxMSwiaW5wdXQi
LFtdXSxbMTUsInR5cGUiLCJ0ZXh0Il0sWzE1LCJpZCIsIm5ldy10b2RvIl0sWzE2LCJvbmtleWRv
d24iLFszMyxbImFjdGlvbiJdLFtbMjgsW251bGxdXSwiY3JlYXRlVG9kbyJdLG51bGxdLG51bGxd
LFsxNSwicGxhY2Vob2xkZXIiLCJXaGF0IG5lZWRzIHRvIGJlIGRvbmU/Il0sWzE1LCJhdXRvZm9j
dXMiLCIiXSxbMTNdLFsxNF0sWzAsIlxcbiAgIl0sWzE0XSxbMCwiXFxuICAgICJdLFsxLFsyNixb
Im91dGxldCJdXSxmYWxzZV0sWzAsIlxcbiJdLFs2LFsiaWYiXSxbWzMzLFsiZ3QiXSxbWzI4LFsi
bW9kZWwiLCJsZW5ndGgiXV0sMF0sbnVsbF1dLG51bGwseyJzdGF0ZW1lbnRzIjpbWzAsIiAgICAg
ICJdLFsxMSwiZm9vdGVyIixbXV0sWzE1LCJpZCIsImZvb3RlciJdLFsxM10sWzAsIlxcbiAgICAg
ICAgIl0sWzExLCJzcGFuIixbXV0sWzE1LCJpZCIsInRvZG8tY291bnQiXSxbMTNdLFsxMSwic3Ry
b25nIixbXV0sWzEzXSxbMSxbMjgsWyJyZW1haW5pbmciLCJsZW5ndGgiXV0sZmFsc2VdLFsxNF0s
WzAsIiAiXSxbMSxbMzMsWyJwbHVyYWxpemUiXSxbIml0ZW0iLFsyOCxbInJlbWFpbmluZyIsImxl
bmd0aCJdXV0sbnVsbF0sZmFsc2VdLFswLCIgbGVmdCJdLFsxNF0sWzAsIlxcbiAgICAgICAgIl0s
WzExLCJ1bCIsW11dLFsxNSwiaWQiLCJmaWx0ZXJzIl0sWzEzXSxbMCwiXFxuICAgICAgICAgICJd
LFsxMSwibGkiLFtdXSxbMTNdLFs2LFsibGluay10byJdLFsiaW5kZXgiXSxbWyJhY3RpdmVDbGFz
cyJdLFsic2VsZWN0ZWQiXV0seyJzdGF0ZW1lbnRzIjpbWzAsIkFsbCJdXSwibG9jYWxzIjpbXX0s
bnVsbF0sWzE0XSxbMCwiXFxuICAgICAgICAgICJdLFsxMSwibGkiLFtdXSxbMTNdLFs2LFsibGlu
ay10byJdLFsiYWN0aXZlIl0sW1siYWN0aXZlQ2xhc3MiXSxbInNlbGVjdGVkIl1dLHsic3RhdGVt
ZW50cyI6W1swLCJBY3RpdmUiXV0sImxvY2FscyI6W119LG51bGxdLFsxNF0sWzAsIlxcbiAgICAg
ICAgICAiXSxbMTEsImxpIixbXV0sWzEzXSxbNixbImxpbmstdG8iXSxbImNvbXBsZXRlZCJdLFtb
ImFjdGl2ZUNsYXNzIl0sWyJzZWxlY3RlZCJdXSx7InN0YXRlbWVudHMiOltbMCwiQ29tcGxldGVk
Il1dLCJsb2NhbHMiOltdfSxudWxsXSxbMTRdLFswLCJcXG4gICAgICAgICJdLFsxNF0sWzAsIlxc
biJdLFs2LFsiaWYiXSxbWzI4LFsiY29tcGxldGVkIiwibGVuZ3RoIl1dXSxudWxsLHsic3RhdGVt
ZW50cyI6W1swLCIgICAgICAgICAgIl0sWzExLCJidXR0b24iLFtdXSxbMTUsImlkIiwiY2xlYXIt
Y29tcGxldGVkIl0sWzE2LCJvbmNsaWNrIixbMzMsWyJhY3Rpb24iXSxbWzI4LFtudWxsXV0sImNs
ZWFyQ29tcGxldGVkIl0sbnVsbF0sbnVsbF0sWzEzXSxbMCwiQ2xlYXIgY29tcGxldGVkIl0sWzE0
XSxbMCwiXFxuIl1dLCJsb2NhbHMiOltdfSxudWxsXSxbMCwiICAgICAgIl0sWzE0XSxbMCwiXFxu
Il1dLCJsb2NhbHMiOltdfSxudWxsXSxbMTRdLFswLCJcXG4iXSxbMTEsImZvb3RlciIsW11dLFsx
NSwiaWQiLCJpbmZvIl0sWzEzXSxbMCwiXFxuICAiXSxbMTEsInAiLFtdXSxbMTNdLFswLCJEb3Vi
bGUtY2xpY2sgdG8gZWRpdCBhIHRvZG8iXSxbMTRdLFswLCJcXG4gICJdLFsxMSwicCIsW11dLFsx
M10sWzAsIlxcbiAgICBDcmVhdGVkIGJ5XFxuICAgICJdLFsxMSwiYSIsW11dLFsxNSwiaHJlZiIs
Imh0dHA6Ly9naXRodWIuY29tL2NpYmVybm94Il0sWzEzXSxbMCwiTWlndWVsIENhbWJhIl0sWzE0
XSxbMCwiLFxcbiAgICAiXSxbMTEsImEiLFtdXSxbMTUsImhyZWYiLCJodHRwOi8vZ2l0aHViLmNv
bS9hZGR5b3NtYW5pIl0sWzEzXSxbMCwiQWRkeSBPc21hbmkiXSxbMTRdLFswLCJcXG4gICJdLFsx
NF0sWzAsIlxcbiAgIl0sWzExLCJwIixbXV0sWzEzXSxbMCwiUGFydCBvZiAiXSxbMTEsImEiLFtd
XSxbMTUsImhyZWYiLCJodHRwOi8vdG9kb212Yy5jb20iXSxbMTNdLFswLCJUb2RvTVZDIl0sWzE0
XSxbMTRdLFswLCJcXG4iXSxbMTRdXSwibG9jYWxzIjpbXSwibmFtZWQiOltdLCJ5aWVsZHMiOltd
LCJoYXNQYXJ0aWFscyI6ZmFsc2V9JyxtZXRhOnttb2R1bGVOYW1lOiJ0b2RvbXZjL3RlbXBsYXRl
cy9hcHBsaWNhdGlvbi5oYnMifX0pfSksZGVmaW5lKCJ0b2RvbXZjL3RlbXBsYXRlcy9jb21wbGV0
ZWQiLFsiZXhwb3J0cyJdLGZ1bmN0aW9uKGUpe2UuZGVmYXVsdD1FbWJlci5IVE1MQmFycy50ZW1w
bGF0ZSh7aWQ6IkY0bGE5d3RiIixibG9jazoneyJzdGF0ZW1lbnRzIjpbWzEsWzMzLFsidG9kby1s
aXN0Il0sbnVsbCxbWyJ0b2RvcyJdLFtbMjgsWyJ0b2RvcyJdXV1dXSxmYWxzZV1dLCJsb2NhbHMi
OltdLCJuYW1lZCI6W10sInlpZWxkcyI6W10sImhhc1BhcnRpYWxzIjpmYWxzZX0nLG1ldGE6e21v
ZHVsZU5hbWU6InRvZG9tdmMvdGVtcGxhdGVzL2NvbXBsZXRlZC5oYnMifX0pfSksZGVmaW5lKCJ0
b2RvbXZjL3RlbXBsYXRlcy9jb21wb25lbnRzL3RvZG8taXRlbSIsWyJleHBvcnRzIl0sZnVuY3Rp
b24oZSl7ZS5kZWZhdWx0PUVtYmVyLkhUTUxCYXJzLnRlbXBsYXRlKHtpZDoiZFEzK2NLNUUiLGJs
b2NrOid7InN0YXRlbWVudHMiOltbMTEsImRpdiIsW11dLFsxNSwiY2xhc3MiLCJ2aWV3Il0sWzEz
XSxbMCwiXFxuICAiXSxbMTEsImlucHV0IixbXV0sWzE1LCJ0eXBlIiwiY2hlY2tib3giXSxbMTUs
ImNsYXNzIiwidG9nZ2xlIl0sWzE2LCJjaGVja2VkIixbMjgsWyJ0b2RvIiwiY29tcGxldGVkIl1d
LG51bGxdLFsxNiwib25jaGFuZ2UiLFszMyxbImFjdGlvbiJdLFtbMjgsW251bGxdXSwidG9nZ2xl
Q29tcGxldGVkIl0sbnVsbF0sbnVsbF0sWzEzXSxbMTRdLFswLCJcXG4gICJdLFsxMSwibGFiZWwi
LFtdXSxbMTYsIm9uZGJsY2xpY2siLFszMyxbImFjdGlvbiJdLFtbMjgsW251bGxdXSwic3RhcnRF
ZGl0aW5nIl0sbnVsbF0sbnVsbF0sWzEzXSxbMSxbMjgsWyJ0b2RvIiwidGl0bGUiXV0sZmFsc2Vd
LFsxNF0sWzAsIlxcbiAgIl0sWzExLCJidXR0b24iLFtdXSxbMTYsIm9uY2xpY2siLFszMyxbImFj
dGlvbiJdLFtbMjgsW251bGxdXSwicmVtb3ZlVG9kbyJdLG51bGxdLG51bGxdLFsxNSwiY2xhc3Mi
LCJkZXN0cm95Il0sWzEzXSxbMTRdLFswLCJcXG4iXSxbMTRdLFswLCJcXG4iXSxbMTEsImlucHV0
IixbXV0sWzE1LCJ0eXBlIiwidGV4dCJdLFsxNSwiY2xhc3MiLCJlZGl0Il0sWzE2LCJ2YWx1ZSIs
WzI4LFsidG9kbyIsInRpdGxlIl1dLG51bGxdLFsxNiwib25ibHVyIixbMzMsWyJhY3Rpb24iXSxb
WzI4LFtudWxsXV0sImRvbmVFZGl0aW5nIl0sW1sidmFsdWUiXSxbInRhcmdldC52YWx1ZSJdXV0s
bnVsbF0sWzE2LCJvbmtleWRvd24iLFszMyxbImFjdGlvbiJdLFtbMjgsW251bGxdXSwiaGFuZGxl
S2V5ZG93biJdLG51bGxdLG51bGxdLFsxNSwiYXV0b2ZvY3VzIiwiIl0sWzEzXSxbMTRdXSwibG9j
YWxzIjpbXSwibmFtZWQiOltdLCJ5aWVsZHMiOltdLCJoYXNQYXJ0aWFscyI6ZmFsc2V9JyxtZXRh
Onttb2R1bGVOYW1lOiJ0b2RvbXZjL3RlbXBsYXRlcy9jb21wb25lbnRzL3RvZG8taXRlbS5oYnMi
fX0pfSksZGVmaW5lKCJ0b2RvbXZjL3RlbXBsYXRlcy9jb21wb25lbnRzL3RvZG8tbGlzdCIsWyJl
eHBvcnRzIl0sZnVuY3Rpb24oZSl7ZS5kZWZhdWx0PUVtYmVyLkhUTUxCYXJzLnRlbXBsYXRlKHtp
ZDoiWEdtV1dENjMiLGJsb2NrOid7InN0YXRlbWVudHMiOltbNixbImlmIl0sW1syOCxbInRvZG9z
IiwibGVuZ3RoIl1dXSxudWxsLHsic3RhdGVtZW50cyI6W1s2LFsiaWYiXSxbWzI4LFsiY2FuVG9n
Z2xlIl1dXSxudWxsLHsic3RhdGVtZW50cyI6W1swLCIgICAgIl0sWzExLCJpbnB1dCIsW11dLFsx
NSwidHlwZSIsImNoZWNrYm94Il0sWzE1LCJpZCIsInRvZ2dsZS1hbGwiXSxbMTYsImNoZWNrZWQi
LFsyNixbImFsbENvbXBsZXRlZCJdXSxudWxsXSxbMTYsIm9uY2hhbmdlIixbMzMsWyJhY3Rpb24i
XSxbWzI4LFtudWxsXV0sInRvZ2dsZUFsbCJdLG51bGxdLG51bGxdLFsxM10sWzE0XSxbMCwiXFxu
Il1dLCJsb2NhbHMiOltdfSxudWxsXSxbMCwiICAiXSxbMTEsInVsIixbXV0sWzE1LCJpZCIsInRv
ZG8tbGlzdCJdLFsxNSwiY2xhc3MiLCJ0b2RvLWxpc3QiXSxbMTNdLFswLCJcXG4iXSxbNixbImVh
Y2giXSxbWzI4LFsidG9kb3MiXV1dLG51bGwseyJzdGF0ZW1lbnRzIjpbWzAsIiAgICAgICJdLFsx
LFszMyxbInRvZG8taXRlbSJdLG51bGwsW1sidG9kbyIsIm9uU3RhcnRFZGl0Iiwib25FbmRFZGl0
Il0sW1syOCxbInRvZG8iXV0sWzMzLFsiYWN0aW9uIl0sW1syOCxbbnVsbF1dLCJkaXNhYmxlVG9n
Z2xlIl0sbnVsbF0sWzMzLFsiYWN0aW9uIl0sW1syOCxbbnVsbF1dLCJlbmFibGVUb2dnbGUiXSxu
dWxsXV1dXSxmYWxzZV0sWzAsIlxcbiJdXSwibG9jYWxzIjpbInRvZG8iXX0sbnVsbF0sWzAsIiAg
Il0sWzE0XSxbMCwiXFxuIl1dLCJsb2NhbHMiOltdfSxudWxsXV0sImxvY2FscyI6W10sIm5hbWVk
IjpbXSwieWllbGRzIjpbXSwiaGFzUGFydGlhbHMiOmZhbHNlfScsbWV0YTp7bW9kdWxlTmFtZToi
dG9kb212Yy90ZW1wbGF0ZXMvY29tcG9uZW50cy90b2RvLWxpc3QuaGJzIn19KX0pLGRlZmluZSgi
dG9kb212Yy90ZW1wbGF0ZXMvaW5kZXgiLFsiZXhwb3J0cyJdLGZ1bmN0aW9uKGUpe2UuZGVmYXVs
dD1FbWJlci5IVE1MQmFycy50ZW1wbGF0ZSh7aWQ6ImhCYWROSXBvIixibG9jazoneyJzdGF0ZW1l
bnRzIjpbWzYsWyJpZiJdLFtbMjgsWyJtb2RlbCIsImxlbmd0aCJdXV0sbnVsbCx7InN0YXRlbWVu
dHMiOltbMCwiICAiXSxbMSxbMzMsWyJ0b2RvLWxpc3QiXSxudWxsLFtbInRvZG9zIl0sW1syOCxb
Im1vZGVsIl1dXV1dLGZhbHNlXSxbMCwiXFxuIl1dLCJsb2NhbHMiOltdfSxudWxsXV0sImxvY2Fs
cyI6W10sIm5hbWVkIjpbXSwieWllbGRzIjpbXSwiaGFzUGFydGlhbHMiOmZhbHNlfScsbWV0YTp7
bW9kdWxlTmFtZToidG9kb212Yy90ZW1wbGF0ZXMvaW5kZXguaGJzIn19KX0pLGRlZmluZSgidG9k
b212Yy9jb25maWcvZW52aXJvbm1lbnQiLFsiZW1iZXIiXSxmdW5jdGlvbihlKXt0cnl7dmFyIHQ9
InRvZG9tdmMvY29uZmlnL2Vudmlyb25tZW50IixvPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ21l
dGFbbmFtZT0iJyt0KyciXScpLmdldEF0dHJpYnV0ZSgiY29udGVudCIpLG49SlNPTi5wYXJzZSh1
bmVzY2FwZShvKSksbD17ZGVmYXVsdDpufQotcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShs
LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxsfWNhdGNoKGUpe3Rocm93IG5ldyBFcnJvcignQ291
bGQgbm90IHJlYWQgY29uZmlnIGZyb20gbWV0YSB0YWcgd2l0aCBuYW1lICInK3QrJyIuJyl9fSks
cnVubmluZ1Rlc3RzfHxyZXF1aXJlKCJ0b2RvbXZjL2FwcCIpLmRlZmF1bHQuY3JlYXRlKHtuYW1l
OiJ0b2RvbXZjIix2ZXJzaW9uOiIwLjAuMCsxNjRkMjdlMiJ9KQpkaWZmIC0tZ2l0IGEvUGVyZm9y
bWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhh
bXBsZXMvZW1iZXJqcy9zb3VyY2UvZGlzdC9pbmRleC5odG1sIGIvUGVyZm9ybWFuY2VUZXN0cy9T
cGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJq
cy9zb3VyY2UvZGlzdC9pbmRleC5odG1sCmluZGV4IGU4ZDU5YzFmZmIzMWFhN2M3OGQ5YWRhN2E3
ZDBkMWQ0NjI0ZWY1ZmUuLmMzNTI3YWQ0ZWY2NmIxOGU1YzhiOWQ2MTUzZmU5OGI0YmUyYWY4ZmEg
MTAwNjQ0Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9t
dmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvc291cmNlL2Rpc3QvaW5kZXguaHRtbAor
KysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hp
dGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL3NvdXJjZS9kaXN0L2luZGV4Lmh0bWwKQEAgLTcsMTUg
KzcsMTQgQEAKICAgICA8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iIj4KICAgICA8
bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFs
LXNjYWxlPTEiPgogICAgIAotPG1ldGEgbmFtZT0idG9kb212Yy9jb25maWcvZW52aXJvbm1lbnQi
IGNvbnRlbnQ9IiU3QiUyMm1vZHVsZVByZWZpeCUyMiUzQSUyMnRvZG9tdmMlMjIlMkMlMjJlbnZp
cm9ubWVudCUyMiUzQSUyMnByb2R1Y3Rpb24lMjIlMkMlMjJiYXNlVVJMJTIyJTNBbnVsbCUyQyUy
MmxvY2F0aW9uVHlwZSUyMiUzQSUyMmhhc2glMjIlMkMlMjJFbWJlckVOViUyMiUzQSU3QiUyMkZF
QVRVUkVTJTIyJTNBJTdCJTdEJTJDJTIyRVhURU5EX1BST1RPVFlQRVMlMjIlM0ElN0IlMjJEYXRl
JTIyJTNBZmFsc2UlN0QlN0QlMkMlMjJBUFAlMjIlM0ElN0IlMjJuYW1lJTIyJTNBJTIydG9kb212
YyUyMiUyQyUyMnZlcnNpb24lMjIlM0ElMjIwLjAuMCsxNjRkMjdlMiUyMiU3RCUyQyUyMmV4cG9y
dEFwcGxpY2F0aW9uR2xvYmFsJTIyJTNBZmFsc2UlN0QiIC8+Cis8bWV0YSBuYW1lPSJ0b2RvbXZj
L2NvbmZpZy9lbnZpcm9ubWVudCIgY29udGVudD0iJTdCJTIybW9kdWxlUHJlZml4JTIyJTNBJTIy
dG9kb212YyUyMiUyQyUyMmVudmlyb25tZW50JTIyJTNBJTIycHJvZHVjdGlvbiUyMiUyQyUyMmJh
c2VVUkwlMjIlM0FudWxsJTJDJTIybG9jYXRpb25UeXBlJTIyJTNBJTIyaGFzaCUyMiUyQyUyMkVt
YmVyRU5WJTIyJTNBJTdCJTIyRkVBVFVSRVMlMjIlM0ElN0IlN0QlMkMlMjJFWFRFTkRfUFJPVE9U
WVBFUyUyMiUzQSU3QiUyMkRhdGUlMjIlM0FmYWxzZSU3RCU3RCUyQyUyMkFQUCUyMiUzQSU3QiUy
Mm5hbWUlMjIlM0ElMjJ0b2RvbXZjJTIyJTJDJTIydmVyc2lvbiUyMiUzQSUyMjAuMC4wK2EyY2Ex
NjUwJTIyJTdEJTJDJTIyZXhwb3J0QXBwbGljYXRpb25HbG9iYWwlMjIlM0FmYWxzZSU3RCIgLz4K
ICAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImFzc2V0cy92ZW5kb3ItN2I1Yzk4NTIw
OTEwYWZhNThkNzRlMDVlYzg2Y2Q4NzMuY3NzIiBpbnRlZ3JpdHk9InNoYTI1Ni1ic2FnR0hkdWhh
eTlRUExVRnBkZGNaRnE3S21yMlNjTTNWS25XaGRYOG9NPSBzaGE1MTItZU5zR04yYUxlY1dQdm9x
TlZIOG9YSzhvL0lKN3JPNXRpMHpnUzhsRjhMaXdtS1VIZEVJdUZkdXdjREwxVkxBdDJyKzNZamdE
em9TTllLNmM1N3BKenc9PSIgPgotICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iYXNz
ZXRzL3RvZG9tdmMtZDQxZDhjZDk4ZjAwYjIwNGU5ODAwOTk4ZWNmODQyN2UuY3NzIiBpbnRlZ3Jp
dHk9InNoYTI1Ni00N0RFUXBqOEhCU2ErL1RJbVcrNUpDZXVRZVJrbTVOTXBKV1pHM2hTdUZVPSBz
aGE1MTItejRQaE5YN3Z1TDN4VkNoUTFtMkFCOVlnNUFVTFZ4WGNnL1NwSWROczZjNUgwTkU4WFlY
eXNQK0RHTktIZnV3dlk3a3h2VWRCZW9HbE9ESjYrU2ZhUGc9PSIgPgogICAgIAogICA8L2hlYWQ+
CiAgIDxib2R5PgogICAgIAogICAgIDxzY3JpcHQgc3JjPSJhc3NldHMvdmVuZG9yLTgyMDkxOTU2
N2ViN2JkNGQ5ZmFjMzU4YTkwYTVhYWM0LmpzIiBpbnRlZ3JpdHk9InNoYTI1Ni1CWkhCYmYxVTIx
K2tnUFltb0lLN2dMa3FIdTg4djVjd0VWRmZ3VVBYb2pzPSBzaGE1MTItMllXckFiUjQ1cDhmazMv
eTRRaGJvay9LVWZMRS92NnlNU1VxSVduY1RtV3FmSmJ5SmowK0FpVGtKTDAzazBvUFVNWmJGWXlR
eDlTdUw2WG9YcDRzZ2c9PSIgPjwvc2NyaXB0PgotICAgIDxzY3JpcHQgc3JjPSJhc3NldHMvdG9k
b212Yy03NjAxZmZjYTYxNTBlZDYzM2YwZjMzM2ZlNzZiZmFmMi5qcyIgaW50ZWdyaXR5PSJzaGEy
NTYtSjlTQlBTVlBpVGxEekJyQWV2RXFSdk56M0UrK3U3ak5Fclo3OUVEZ1IzZz0gc2hhNTEyLThR
dG5vV202YVhkS1dPSXNudXFRd2FVNTc1VGtPbWFnVUpTNjZiSXFxWnp3TThhVWR1TTZESGxyYlRz
b3BaOU01b2s5TkxxaEtzYWZFWEhXUVAwY1hnPT0iID48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNy
Yz0iYXNzZXRzL3RvZG9tdmMtMWEwOGI3MTg5NWIxZTMyNDAwMTYyM2VlMGFmMmI5MjcuanMiIGlu
dGVncml0eT0ic2hhMjU2LWNWR1hBbzh5blVBTk5OMUN3QUNPTSttWEVVYWdqYTkybE9aL2dFblNS
U009IHNoYTUxMi1uZUNmWG9INHQzYTd2L2FDR3ZNMmNyejlOOTRMd09KMDBkUys4WGdpWXBtbFJy
NUY5STN6bkZiSkJ0MTA2alZnL1RhR2RtelcyRUdKcmNvc21nSkI4dz09IiA+PC9zY3JpcHQ+CiAg
ICAgCiAgIDwvYm9keT4KIDwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>318972</attachid>
            <date>2017-08-24 00:19:47 -0700</date>
            <delta_ts>2017-08-24 01:51:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-175926-20170824091945.patch</filename>
            <type>text/plain</type>
            <size>33150</size>
            <attacher name="Mathias Bynens">mathias</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIxMTMwCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCmluZGV4IGUxMmUyMmM3OGU4
MWMwYWY4NDgzNWU1MmM2ZjgyMmYwNzU0ZjM5ZTQuLjA3MGRlMTk3NjllMzA3ZmM3ZTAzYjEwODlj
YjViMjM5MWU2NmNjYjMgMTAwNjQ0Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCisr
KyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTctMDgt
MjQgIE1hdGhpYXMgQnluZW5zICA8bWF0aGlhc0BxaXdpLmJlPgorCisgICAgICAgIFNwZWVkb21l
dGVyOiBSZW1vdmUgdW51c2VkIHN0eWxlc2hlZXQgaW4gRW1iZXIgZXhhbXBsZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1OTI2CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNv
dXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy9zb3VyY2UvYXBwL2lu
ZGV4Lmh0bWw6IFJlbW92ZWQgc3R5bGVzaGVldCByZWZlcmVuY2UuCisgICAgICAgICogU3BlZWRv
bWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvc291
cmNlL2FwcC9zdHlsZXMvLmdpdGtlZXA6IEFkZGVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jl
c291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL3NvdXJjZS9kaXN0
Lyo6IFJlZ2VuZXJhdGVkIHBlciBidWlsZCBpbnN0cnVjdGlvbnMuCisKIDIwMTctMDgtMjMgIFJ5
b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgU3BlZWRvbWV0ZXI6IEFk
ZCBtaXNzaW5nIHN0eWxlc2hlZXQgdG8gQW5ndWxhciBleGFtcGxlCmRpZmYgLS1naXQgYS9QZXJm
b3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1l
eGFtcGxlcy9lbWJlcmpzL3NvdXJjZS9hcHAvaW5kZXguaHRtbCBiL1BlcmZvcm1hbmNlVGVzdHMv
U3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVy
anMvc291cmNlL2FwcC9pbmRleC5odG1sCmluZGV4IDA1MmYzNjc2Mjg2YzgxYzQwMjMxMGJkMGRl
ZjBhY2RkMDE2YWI2YTcuLjJlNGFmMGJiNDc2MDA0NzVkYTg5ODVmZjllMTk1MzAxZDkwY2RlNmMg
MTAwNjQ0Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9t
dmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvc291cmNlL2FwcC9pbmRleC5odG1sCisr
KyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0
ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvc291cmNlL2FwcC9pbmRleC5odG1sCkBAIC04LDcgKzgs
NiBAQAogICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lk
dGgsIGluaXRpYWwtc2NhbGU9MSI+CiAgICAge3tjb250ZW50LWZvciAiaGVhZCJ9fQogICAgIDxs
aW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ie3tyb290VVJMfX1hc3NldHMvdmVuZG9yLmNzcyI+
Ci0gICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJ7e3Jvb3RVUkx9fWFzc2V0cy90b2Rv
bXZjLmNzcyI+CiAgICAge3tjb250ZW50LWZvciAiaGVhZC1mb290ZXIifX0KICAgPC9oZWFkPgog
ICA8Ym9keT4KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3Vy
Y2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvc291cmNlL2FwcC9zdHls
ZXMvLmdpdGtlZXAgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2Rv
bXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL3NvdXJjZS9hcHAvc3R5bGVzLy5naXRr
ZWVwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjZjZDE1MmQ5Yzg1NjdkMjdjOWRiYWVmZWVhMjE2NTQ1N2RmODFhY2MK
LS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNl
cy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL3NvdXJjZS9hcHAvc3R5bGVz
Ly5naXRrZWVwCkBAIC0wLDAgKzEsMiBAQAorIyBUaGlzIGZpbGUgZW5zdXJlcyB0aGUgYXBwL3N0
eWxlcyBkaXJlY3RvcnkgaXMgaW5jbHVkZWQgaW4gdGhlIHJlcG9zaXRvcnkuCisjIFdpdGhvdXQg
dGhhdCBkaXJlY3RvcnkgcHJlc2VudCwgdGhlIEVtYmVyIFRvZG9NVkMgZXhhbXBsZSBmYWlscyB0
byBidWlsZC4KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3Vy
Y2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvc291cmNlL2Rpc3QvYXNz
ZXRzL3RvZG9tdmMtMWEwOGI3MTg5NWIxZTMyNDAwMTYyM2VlMGFmMmI5MjcuanMgYi9QZXJmb3Jt
YW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFt
cGxlcy9lbWJlcmpzL3NvdXJjZS9kaXN0L2Fzc2V0cy90b2RvbXZjLTFhMDhiNzE4OTViMWUzMjQw
MDE2MjNlZTBhZjJiOTI3LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgxNmZkMjYyZjZlY2M1ZWNkN2MzNjJjMmVh
ZTFhZDlmMjRjMzg5ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVk
b21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL3Nv
dXJjZS9kaXN0L2Fzc2V0cy90b2RvbXZjLTFhMDhiNzE4OTViMWUzMjQwMDE2MjNlZTBhZjJiOTI3
LmpzCkBAIC0wLDAgKzEsMzAgQEAKKyJ1c2Ugc3RyaWN0IgorZGVmaW5lKCJ0b2RvbXZjL2FwcCIs
WyJleHBvcnRzIiwiZW1iZXIiLCJ0b2RvbXZjL3Jlc29sdmVyIiwiZW1iZXItbG9hZC1pbml0aWFs
aXplcnMiLCJ0b2RvbXZjL2NvbmZpZy9lbnZpcm9ubWVudCJdLGZ1bmN0aW9uKGUsdCxvLG4sbCl7
dmFyIGk9dm9pZCAwCit0LmRlZmF1bHQuTU9ERUxfRkFDVE9SWV9JTkpFQ1RJT05TPSEwLGk9dC5k
ZWZhdWx0LkFwcGxpY2F0aW9uLmV4dGVuZCh7bW9kdWxlUHJlZml4OmwuZGVmYXVsdC5tb2R1bGVQ
cmVmaXgscG9kTW9kdWxlUHJlZml4OmwuZGVmYXVsdC5wb2RNb2R1bGVQcmVmaXgsUmVzb2x2ZXI6
by5kZWZhdWx0fSksKDAsbi5kZWZhdWx0KShpLGwuZGVmYXVsdC5tb2R1bGVQcmVmaXgpLGUuZGVm
YXVsdD1pfSksZGVmaW5lKCJ0b2RvbXZjL2NvbXBvbmVudHMvdG9kby1pdGVtIixbImV4cG9ydHMi
LCJlbWJlciJdLGZ1bmN0aW9uKGUsdCl7ZS5kZWZhdWx0PXQuZGVmYXVsdC5Db21wb25lbnQuZXh0
ZW5kKHtyZXBvOnQuZGVmYXVsdC5pbmplY3Quc2VydmljZSgpLHRhZ05hbWU6ImxpIixlZGl0aW5n
OiExLGNsYXNzTmFtZUJpbmRpbmdzOlsidG9kby5jb21wbGV0ZWQiLCJlZGl0aW5nIl0sYWN0aW9u
czp7c3RhcnRFZGl0aW5nOmZ1bmN0aW9uKCl7dGhpcy5nZXQoIm9uU3RhcnRFZGl0IikoKSx0aGlz
LnNldCgiZWRpdGluZyIsITApLHQuZGVmYXVsdC5ydW4uc2NoZWR1bGVPbmNlKCJhZnRlclJlbmRl
ciIsdGhpcywiZm9jdXNJbnB1dCIpfSxkb25lRWRpdGluZzpmdW5jdGlvbihlKXt0aGlzLmdldCgi
ZWRpdGluZyIpJiYodC5kZWZhdWx0LmlzQmxhbmsoZSk/dGhpcy5zZW5kKCJyZW1vdmVUb2RvIik6
KHRoaXMuc2V0KCJ0b2RvLnRpdGxlIixlLnRyaW0oKSksdGhpcy5zZXQoImVkaXRpbmciLCExKSx0
aGlzLmdldCgib25FbmRFZGl0IikoKSkpfSxoYW5kbGVLZXlkb3duOmZ1bmN0aW9uKGUpezEzPT09
ZS5rZXlDb2RlP2UudGFyZ2V0LmJsdXIoKToyNz09PWUua2V5Q29kZSYmdGhpcy5zZXQoImVkaXRp
bmciLCExKX0sdG9nZ2xlQ29tcGxldGVkOmZ1bmN0aW9uKGUpe3ZhciBvPXRoaXMuZ2V0KCJ0b2Rv
IikKK3QuZGVmYXVsdC5zZXQobywiY29tcGxldGVkIixlLnRhcmdldC5jaGVja2VkKSx0aGlzLmdl
dCgicmVwbyIpLnBlcnNpc3QoKX0scmVtb3ZlVG9kbzpmdW5jdGlvbigpe3RoaXMuZ2V0KCJyZXBv
IikuZGVsZXRlKHRoaXMuZ2V0KCJ0b2RvIikpfX0sZm9jdXNJbnB1dDpmdW5jdGlvbigpe3RoaXMu
ZWxlbWVudC5xdWVyeVNlbGVjdG9yKCJpbnB1dC5lZGl0IikuZm9jdXMoKX19KX0pLGRlZmluZSgi
dG9kb212Yy9jb21wb25lbnRzL3RvZG8tbGlzdCIsWyJleHBvcnRzIiwiZW1iZXIiXSxmdW5jdGlv
bihlLHQpe2UuZGVmYXVsdD10LmRlZmF1bHQuQ29tcG9uZW50LmV4dGVuZCh7cmVwbzp0LmRlZmF1
bHQuaW5qZWN0LnNlcnZpY2UoKSx0YWdOYW1lOiJzZWN0aW9uIixlbGVtZW50SWQ6Im1haW4iLGNh
blRvZ2dsZTohMCxhbGxDb21wbGV0ZWQ6dC5kZWZhdWx0LmNvbXB1dGVkKCJ0b2Rvcy5AZWFjaC5j
b21wbGV0ZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0KCJ0b2RvcyIpLmlzRXZlcnkoImNv
bXBsZXRlZCIpfSksYWN0aW9uczp7ZW5hYmxlVG9nZ2xlOmZ1bmN0aW9uKCl7dGhpcy5zZXQoImNh
blRvZ2dsZSIsITApfSxkaXNhYmxlVG9nZ2xlOmZ1bmN0aW9uKCl7dGhpcy5zZXQoImNhblRvZ2ds
ZSIsITEpfSx0b2dnbGVBbGw6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmdldCgiYWxsQ29tcGxldGVk
IikKK3RoaXMuZ2V0KCJ0b2RvcyIpLmZvckVhY2goZnVuY3Rpb24obyl7cmV0dXJuIHQuZGVmYXVs
dC5zZXQobywiY29tcGxldGVkIiwhZSl9KSx0aGlzLmdldCgicmVwbyIpLnBlcnNpc3QoKX19fSl9
KSxkZWZpbmUoInRvZG9tdmMvY29udHJvbGxlcnMvYWN0aXZlIixbImV4cG9ydHMiLCJlbWJlciJd
LGZ1bmN0aW9uKGUsdCl7ZS5kZWZhdWx0PXQuZGVmYXVsdC5Db250cm9sbGVyLmV4dGVuZCh7dG9k
b3M6dC5kZWZhdWx0LmNvbXB1dGVkLmZpbHRlckJ5KCJtb2RlbCIsImNvbXBsZXRlZCIsITEpfSl9
KSxkZWZpbmUoInRvZG9tdmMvY29udHJvbGxlcnMvYXBwbGljYXRpb24iLFsiZXhwb3J0cyIsImVt
YmVyIl0sZnVuY3Rpb24oZSx0KXtlLmRlZmF1bHQ9dC5kZWZhdWx0LkNvbnRyb2xsZXIuZXh0ZW5k
KHtyZXBvOnQuZGVmYXVsdC5pbmplY3Quc2VydmljZSgpLHJlbWFpbmluZzp0LmRlZmF1bHQuY29t
cHV0ZWQuZmlsdGVyQnkoIm1vZGVsIiwiY29tcGxldGVkIiwhMSksY29tcGxldGVkOnQuZGVmYXVs
dC5jb21wdXRlZC5maWx0ZXJCeSgibW9kZWwiLCJjb21wbGV0ZWQiKSxhY3Rpb25zOntjcmVhdGVU
b2RvOmZ1bmN0aW9uKGUpezEzIT09ZS5rZXlDb2RlfHx0LmRlZmF1bHQuaXNCbGFuayhlLnRhcmdl
dC52YWx1ZSl8fCh0aGlzLmdldCgicmVwbyIpLmFkZCh7dGl0bGU6ZS50YXJnZXQudmFsdWUudHJp
bSgpLGNvbXBsZXRlZDohMX0pLGUudGFyZ2V0LnZhbHVlPSIiKX0sY2xlYXJDb21wbGV0ZWQ6ZnVu
Y3Rpb24oKXt0aGlzLmdldCgibW9kZWwiKS5yZW1vdmVPYmplY3RzKHRoaXMuZ2V0KCJjb21wbGV0
ZWQiKSksdGhpcy5nZXQoInJlcG8iKS5wZXJzaXN0KCl9fX0pfSksZGVmaW5lKCJ0b2RvbXZjL2Nv
bnRyb2xsZXJzL2NvbXBsZXRlZCIsWyJleHBvcnRzIiwiZW1iZXIiXSxmdW5jdGlvbihlLHQpe2Uu
ZGVmYXVsdD10LmRlZmF1bHQuQ29udHJvbGxlci5leHRlbmQoe3RvZG9zOnQuZGVmYXVsdC5jb21w
dXRlZC5maWx0ZXJCeSgibW9kZWwiLCJjb21wbGV0ZWQiLCEwKX0pfSksZGVmaW5lKCJ0b2RvbXZj
L2hlbHBlcnMvYXBwLXZlcnNpb24iLFsiZXhwb3J0cyIsImVtYmVyIiwidG9kb212Yy9jb25maWcv
ZW52aXJvbm1lbnQiLCJlbWJlci1jbGktYXBwLXZlcnNpb24vdXRpbHMvcmVnZXhwIl0sZnVuY3Rp
b24oZSx0LG8sbil7ZnVuY3Rpb24gbChlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPD0xfHx2b2lk
IDA9PT1hcmd1bWVudHNbMV0/e306YXJndW1lbnRzWzFdCityZXR1cm4gdC5oaWRlU2hhP2kubWF0
Y2gobi52ZXJzaW9uUmVnRXhwKVswXTp0LmhpZGVWZXJzaW9uP2kubWF0Y2gobi5zaGFSZWdFeHAp
WzBdOml9ZS5hcHBWZXJzaW9uPWwKK3ZhciBpPW8uZGVmYXVsdC5BUFAudmVyc2lvbgorZS5kZWZh
dWx0PXQuZGVmYXVsdC5IZWxwZXIuaGVscGVyKGwpfSksZGVmaW5lKCJ0b2RvbXZjL2hlbHBlcnMv
Z3QiLFsiZXhwb3J0cyIsImVtYmVyIl0sZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBvKGUpe3ZhciB0
PW4oZSwyKQorcmV0dXJuIHRbMF0+dFsxXX12YXIgbj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0
KXt2YXIgbz1bXSxuPSEwLGw9ITEsaT12b2lkIDAKK3RyeXtmb3IodmFyIGEsZD1lW1N5bWJvbC5p
dGVyYXRvcl0oKTshKG49KGE9ZC5uZXh0KCkpLmRvbmUpJiYoby5wdXNoKGEudmFsdWUpLCF0fHxv
Lmxlbmd0aCE9PXQpO249ITApO31jYXRjaChlKXtsPSEwLGk9ZX1maW5hbGx5e3RyeXshbiYmZC5y
ZXR1cm4mJmQucmV0dXJuKCl9ZmluYWxseXtpZihsKXRocm93IGl9fXJldHVybiBvfXJldHVybiBm
dW5jdGlvbih0LG8pe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIHQKK2lmKFN5bWJvbC5pdGVy
YXRvciBpbiBPYmplY3QodCkpcmV0dXJuIGUodCxvKQordGhyb3cgbmV3IFR5cGVFcnJvcigiSW52
YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZSIpfX0oKQor
ZS5ndD1vLGUuZGVmYXVsdD10LmRlZmF1bHQuSGVscGVyLmhlbHBlcihvKX0pLGRlZmluZSgidG9k
b212Yy9oZWxwZXJzL3BsdXJhbGl6ZSIsWyJleHBvcnRzIiwiZW1iZXIiLCJlbWJlci1pbmZsZWN0
b3IiXSxmdW5jdGlvbihlLHQsbyl7ZnVuY3Rpb24gbihlKXt2YXIgdD1sKGUsMiksbj10WzBdCity
ZXR1cm4gMT09PXRbMV0/bjooMCxvLnBsdXJhbGl6ZSkobil9dmFyIGw9ZnVuY3Rpb24oKXtmdW5j
dGlvbiBlKGUsdCl7dmFyIG89W10sbj0hMCxsPSExLGk9dm9pZCAwCit0cnl7Zm9yKHZhciBhLGQ9
ZVtTeW1ib2wuaXRlcmF0b3JdKCk7IShuPShhPWQubmV4dCgpKS5kb25lKSYmKG8ucHVzaChhLnZh
bHVlKSwhdHx8by5sZW5ndGghPT10KTtuPSEwKTt9Y2F0Y2goZSl7bD0hMCxpPWV9ZmluYWxseXt0
cnl7IW4mJmQucmV0dXJuJiZkLnJldHVybigpfWZpbmFsbHl7aWYobCl0aHJvdyBpfX1yZXR1cm4g
b31yZXR1cm4gZnVuY3Rpb24odCxvKXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB0CitpZihT
eW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KHQpKXJldHVybiBlKHQsbykKK3Rocm93IG5ldyBUeXBl
RXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFu
Y2UiKX19KCkKK2UucGx1cmFsaXplSGVscGVyPW4sZS5kZWZhdWx0PXQuZGVmYXVsdC5IZWxwZXIu
aGVscGVyKG4pfSksZGVmaW5lKCJ0b2RvbXZjL2hlbHBlcnMvc2luZ3VsYXJpemUiLFsiZXhwb3J0
cyIsImVtYmVyLWluZmxlY3Rvci9saWIvaGVscGVycy9zaW5ndWxhcml6ZSJdLGZ1bmN0aW9uKGUs
dCl7ZS5kZWZhdWx0PXQuZGVmYXVsdH0pLGRlZmluZSgidG9kb212Yy9pbml0aWFsaXplcnMvYXBw
LXZlcnNpb24iLFsiZXhwb3J0cyIsImVtYmVyLWNsaS1hcHAtdmVyc2lvbi9pbml0aWFsaXplci1m
YWN0b3J5IiwidG9kb212Yy9jb25maWcvZW52aXJvbm1lbnQiXSxmdW5jdGlvbihlLHQsbyl7dmFy
IG49by5kZWZhdWx0LkFQUCxsPW4ubmFtZSxpPW4udmVyc2lvbgorZS5kZWZhdWx0PXtuYW1lOiJB
cHAgVmVyc2lvbiIsaW5pdGlhbGl6ZTooMCx0LmRlZmF1bHQpKGwsaSl9fSksZGVmaW5lKCJ0b2Rv
bXZjL2luaXRpYWxpemVycy9jb250YWluZXItZGVidWctYWRhcHRlciIsWyJleHBvcnRzIiwiZW1i
ZXItcmVzb2x2ZXIvY29udGFpbmVyLWRlYnVnLWFkYXB0ZXIiXSxmdW5jdGlvbihlLHQpe2UuZGVm
YXVsdD17bmFtZToiY29udGFpbmVyLWRlYnVnLWFkYXB0ZXIiLGluaXRpYWxpemU6ZnVuY3Rpb24o
KXt2YXIgZT1hcmd1bWVudHNbMV18fGFyZ3VtZW50c1swXQorZS5yZWdpc3RlcigiY29udGFpbmVy
LWRlYnVnLWFkYXB0ZXI6bWFpbiIsdC5kZWZhdWx0KSxlLmluamVjdCgiY29udGFpbmVyLWRlYnVn
LWFkYXB0ZXI6bWFpbiIsIm5hbWVzcGFjZSIsImFwcGxpY2F0aW9uOm1haW4iKX19fSksZGVmaW5l
KCJ0b2RvbXZjL2luaXRpYWxpemVycy9leHBvcnQtYXBwbGljYXRpb24tZ2xvYmFsIixbImV4cG9y
dHMiLCJlbWJlciIsInRvZG9tdmMvY29uZmlnL2Vudmlyb25tZW50Il0sZnVuY3Rpb24oZSx0LG8p
e2Z1bmN0aW9uIG4oKXt2YXIgZT1hcmd1bWVudHNbMV18fGFyZ3VtZW50c1swXQoraWYoITEhPT1v
LmRlZmF1bHQuZXhwb3J0QXBwbGljYXRpb25HbG9iYWwpe3ZhciBuCitpZigidW5kZWZpbmVkIiE9
dHlwZW9mIHdpbmRvdyluPXdpbmRvdworZWxzZSBpZigidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2Jh
bCluPWdsb2JhbAorZWxzZXtpZigidW5kZWZpbmVkIj09dHlwZW9mIHNlbGYpcmV0dXJuCituPXNl
bGZ9dmFyIGwsaT1vLmRlZmF1bHQuZXhwb3J0QXBwbGljYXRpb25HbG9iYWwKK2w9InN0cmluZyI9
PXR5cGVvZiBpP2k6dC5kZWZhdWx0LlN0cmluZy5jbGFzc2lmeShvLmRlZmF1bHQubW9kdWxlUHJl
Zml4KSxuW2xdfHwobltsXT1lLGUucmVvcGVuKHt3aWxsRGVzdHJveTpmdW5jdGlvbigpe3RoaXMu
X3N1cGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxkZWxldGUgbltsXX19KSl9fWUuaW5pdGlhbGl6
ZT1uLGUuZGVmYXVsdD17bmFtZToiZXhwb3J0LWFwcGxpY2F0aW9uLWdsb2JhbCIsaW5pdGlhbGl6
ZTpufX0pLGRlZmluZSgidG9kb212Yy9yZXNvbHZlciIsWyJleHBvcnRzIiwiZW1iZXItcmVzb2x2
ZXIiXSxmdW5jdGlvbihlLHQpe2UuZGVmYXVsdD10LmRlZmF1bHR9KSxkZWZpbmUoInRvZG9tdmMv
cm91dGVyIixbImV4cG9ydHMiLCJlbWJlciIsInRvZG9tdmMvY29uZmlnL2Vudmlyb25tZW50Il0s
ZnVuY3Rpb24oZSx0LG8pe3ZhciBuPXQuZGVmYXVsdC5Sb3V0ZXIuZXh0ZW5kKHtsb2NhdGlvbjpv
LmRlZmF1bHQubG9jYXRpb25UeXBlLHJvb3RVUkw6by5kZWZhdWx0LnJvb3RVUkx9KQorbi5tYXAo
ZnVuY3Rpb24oKXt0aGlzLnJvdXRlKCJhY3RpdmUiKSx0aGlzLnJvdXRlKCJjb21wbGV0ZWQiKX0p
LGUuZGVmYXVsdD1ufSksZGVmaW5lKCJ0b2RvbXZjL3JvdXRlcy9hcHBsaWNhdGlvbiIsWyJleHBv
cnRzIiwiZW1iZXIiXSxmdW5jdGlvbihlLHQpe2UuZGVmYXVsdD10LmRlZmF1bHQuUm91dGUuZXh0
ZW5kKHtyZXBvOnQuZGVmYXVsdC5pbmplY3Quc2VydmljZSgpLG1vZGVsOmZ1bmN0aW9uKCl7cmV0
dXJuIHRoaXMuZ2V0KCJyZXBvIikuZmluZEFsbCgpfX0pfSksZGVmaW5lKCJ0b2RvbXZjL3NlcnZp
Y2VzL2FqYXgiLFsiZXhwb3J0cyIsImVtYmVyLWFqYXgvc2VydmljZXMvYWpheCJdLGZ1bmN0aW9u
KGUsdCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImRlZmF1bHQiLHtlbnVtZXJhYmxlOiEwLGdl
dDpmdW5jdGlvbigpe3JldHVybiB0LmRlZmF1bHR9fSl9KSxkZWZpbmUoInRvZG9tdmMvc2Vydmlj
ZXMvbWVtb3J5IixbImV4cG9ydHMiXSxmdW5jdGlvbihlKXsoZnVuY3Rpb24oZSl7dmFyIHQ9e30s
bz17fQordC5sZW5ndGg9MCx0LmdldEl0ZW09ZnVuY3Rpb24oZSl7cmV0dXJuIG9bZV18fG51bGx9
LHQuc2V0SXRlbT1mdW5jdGlvbihlLG4pe3ZvaWQgMD09PW4/dC5yZW1vdmVJdGVtKGUpOihvLmhh
c093blByb3BlcnR5KGUpfHx0Lmxlbmd0aCsrLG9bZV09IiIrbil9LHQucmVtb3ZlSXRlbT1mdW5j
dGlvbihlKXtvLmhhc093blByb3BlcnR5KGUpJiYoZGVsZXRlIG9bZV0sdC5sZW5ndGgtLSl9LHQu
a2V5PWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Qua2V5cyhvKVtlXXx8bnVsbH0sdC5jbGVhcj1m
dW5jdGlvbigpe289e30sdC5sZW5ndGg9MH0sZS5sb2NhbFN0b3JhZ2VNZW1vcnk9dH0pKHdpbmRv
dyl9KSxkZWZpbmUoInRvZG9tdmMvc2VydmljZXMvcmVwbyIsWyJleHBvcnRzIiwiZW1iZXIiLCJ0
b2RvbXZjL3NlcnZpY2VzL21lbW9yeSJdLGZ1bmN0aW9uKGUsdCxvKXtlLmRlZmF1bHQ9dC5kZWZh
dWx0LlNlcnZpY2UuZXh0ZW5kKHtsYXN0SWQ6MCxkYXRhOm51bGwsZmluZEFsbDpmdW5jdGlvbigp
e3JldHVybiB0aGlzLmdldCgiZGF0YSIpfHx0aGlzLnNldCgiZGF0YSIsSlNPTi5wYXJzZSh3aW5k
b3cubG9jYWxTdG9yYWdlTWVtb3J5LmdldEl0ZW0oInRvZG9zIil8fCJbXSIpKX0sYWRkOmZ1bmN0
aW9uKGUpe3ZhciB0PU9iamVjdC5hc3NpZ24oe2lkOnRoaXMuaW5jcmVtZW50UHJvcGVydHkoImxh
c3RJZCIpfSxlKQorcmV0dXJuIHRoaXMuZ2V0KCJkYXRhIikucHVzaE9iamVjdCh0KSx0aGlzLnBl
cnNpc3QoKSx0fSxkZWxldGU6ZnVuY3Rpb24oZSl7dGhpcy5nZXQoImRhdGEiKS5yZW1vdmVPYmpl
Y3QoZSksdGhpcy5wZXJzaXN0KCl9LHBlcnNpc3Q6ZnVuY3Rpb24oKXt3aW5kb3cubG9jYWxTdG9y
YWdlTWVtb3J5LnNldEl0ZW0oInRvZG9zIixKU09OLnN0cmluZ2lmeSh0aGlzLmdldCgiZGF0YSIp
KSl9fSl9KSxkZWZpbmUoInRvZG9tdmMvdGVtcGxhdGVzL2FjdGl2ZSIsWyJleHBvcnRzIl0sZnVu
Y3Rpb24oZSl7ZS5kZWZhdWx0PUVtYmVyLkhUTUxCYXJzLnRlbXBsYXRlKHtpZDoiYUFzYzRMdDgi
LGJsb2NrOid7InN0YXRlbWVudHMiOltbMSxbMzMsWyJ0b2RvLWxpc3QiXSxudWxsLFtbInRvZG9z
Il0sW1syOCxbInRvZG9zIl1dXV1dLGZhbHNlXV0sImxvY2FscyI6W10sIm5hbWVkIjpbXSwieWll
bGRzIjpbXSwiaGFzUGFydGlhbHMiOmZhbHNlfScsbWV0YTp7bW9kdWxlTmFtZToidG9kb212Yy90
ZW1wbGF0ZXMvYWN0aXZlLmhicyJ9fSl9KSxkZWZpbmUoInRvZG9tdmMvdGVtcGxhdGVzL2FwcGxp
Y2F0aW9uIixbImV4cG9ydHMiXSxmdW5jdGlvbihlKXtlLmRlZmF1bHQ9RW1iZXIuSFRNTEJhcnMu
dGVtcGxhdGUoe2lkOiJCWW55ejVPTiIsYmxvY2s6J3sic3RhdGVtZW50cyI6W1sxMSwic2VjdGlv
biIsW11dLFsxNSwiaWQiLCJ0b2RvYXBwIl0sWzEzXSxbMCwiXFxuICAiXSxbMTEsImhlYWRlciIs
W11dLFsxNSwiaWQiLCJoZWFkZXIiXSxbMTNdLFswLCJcXG4gICAgIl0sWzExLCJoMSIsW11dLFsx
M10sWzAsInRvZG9zIl0sWzE0XSxbMCwiXFxuICAgICJdLFsxMSwiaW5wdXQiLFtdXSxbMTUsInR5
cGUiLCJ0ZXh0Il0sWzE1LCJpZCIsIm5ldy10b2RvIl0sWzE2LCJvbmtleWRvd24iLFszMyxbImFj
dGlvbiJdLFtbMjgsW251bGxdXSwiY3JlYXRlVG9kbyJdLG51bGxdLG51bGxdLFsxNSwicGxhY2Vo
b2xkZXIiLCJXaGF0IG5lZWRzIHRvIGJlIGRvbmU/Il0sWzE1LCJhdXRvZm9jdXMiLCIiXSxbMTNd
LFsxNF0sWzAsIlxcbiAgIl0sWzE0XSxbMCwiXFxuICAgICJdLFsxLFsyNixbIm91dGxldCJdXSxm
YWxzZV0sWzAsIlxcbiJdLFs2LFsiaWYiXSxbWzMzLFsiZ3QiXSxbWzI4LFsibW9kZWwiLCJsZW5n
dGgiXV0sMF0sbnVsbF1dLG51bGwseyJzdGF0ZW1lbnRzIjpbWzAsIiAgICAgICJdLFsxMSwiZm9v
dGVyIixbXV0sWzE1LCJpZCIsImZvb3RlciJdLFsxM10sWzAsIlxcbiAgICAgICAgIl0sWzExLCJz
cGFuIixbXV0sWzE1LCJpZCIsInRvZG8tY291bnQiXSxbMTNdLFsxMSwic3Ryb25nIixbXV0sWzEz
XSxbMSxbMjgsWyJyZW1haW5pbmciLCJsZW5ndGgiXV0sZmFsc2VdLFsxNF0sWzAsIiAiXSxbMSxb
MzMsWyJwbHVyYWxpemUiXSxbIml0ZW0iLFsyOCxbInJlbWFpbmluZyIsImxlbmd0aCJdXV0sbnVs
bF0sZmFsc2VdLFswLCIgbGVmdCJdLFsxNF0sWzAsIlxcbiAgICAgICAgIl0sWzExLCJ1bCIsW11d
LFsxNSwiaWQiLCJmaWx0ZXJzIl0sWzEzXSxbMCwiXFxuICAgICAgICAgICJdLFsxMSwibGkiLFtd
XSxbMTNdLFs2LFsibGluay10byJdLFsiaW5kZXgiXSxbWyJhY3RpdmVDbGFzcyJdLFsic2VsZWN0
ZWQiXV0seyJzdGF0ZW1lbnRzIjpbWzAsIkFsbCJdXSwibG9jYWxzIjpbXX0sbnVsbF0sWzE0XSxb
MCwiXFxuICAgICAgICAgICJdLFsxMSwibGkiLFtdXSxbMTNdLFs2LFsibGluay10byJdLFsiYWN0
aXZlIl0sW1siYWN0aXZlQ2xhc3MiXSxbInNlbGVjdGVkIl1dLHsic3RhdGVtZW50cyI6W1swLCJB
Y3RpdmUiXV0sImxvY2FscyI6W119LG51bGxdLFsxNF0sWzAsIlxcbiAgICAgICAgICAiXSxbMTEs
ImxpIixbXV0sWzEzXSxbNixbImxpbmstdG8iXSxbImNvbXBsZXRlZCJdLFtbImFjdGl2ZUNsYXNz
Il0sWyJzZWxlY3RlZCJdXSx7InN0YXRlbWVudHMiOltbMCwiQ29tcGxldGVkIl1dLCJsb2NhbHMi
OltdfSxudWxsXSxbMTRdLFswLCJcXG4gICAgICAgICJdLFsxNF0sWzAsIlxcbiJdLFs2LFsiaWYi
XSxbWzI4LFsiY29tcGxldGVkIiwibGVuZ3RoIl1dXSxudWxsLHsic3RhdGVtZW50cyI6W1swLCIg
ICAgICAgICAgIl0sWzExLCJidXR0b24iLFtdXSxbMTUsImlkIiwiY2xlYXItY29tcGxldGVkIl0s
WzE2LCJvbmNsaWNrIixbMzMsWyJhY3Rpb24iXSxbWzI4LFtudWxsXV0sImNsZWFyQ29tcGxldGVk
Il0sbnVsbF0sbnVsbF0sWzEzXSxbMCwiQ2xlYXIgY29tcGxldGVkIl0sWzE0XSxbMCwiXFxuIl1d
LCJsb2NhbHMiOltdfSxudWxsXSxbMCwiICAgICAgIl0sWzE0XSxbMCwiXFxuIl1dLCJsb2NhbHMi
OltdfSxudWxsXSxbMTRdLFswLCJcXG4iXSxbMTEsImZvb3RlciIsW11dLFsxNSwiaWQiLCJpbmZv
Il0sWzEzXSxbMCwiXFxuICAiXSxbMTEsInAiLFtdXSxbMTNdLFswLCJEb3VibGUtY2xpY2sgdG8g
ZWRpdCBhIHRvZG8iXSxbMTRdLFswLCJcXG4gICJdLFsxMSwicCIsW11dLFsxM10sWzAsIlxcbiAg
ICBDcmVhdGVkIGJ5XFxuICAgICJdLFsxMSwiYSIsW11dLFsxNSwiaHJlZiIsImh0dHA6Ly9naXRo
dWIuY29tL2NpYmVybm94Il0sWzEzXSxbMCwiTWlndWVsIENhbWJhIl0sWzE0XSxbMCwiLFxcbiAg
ICAiXSxbMTEsImEiLFtdXSxbMTUsImhyZWYiLCJodHRwOi8vZ2l0aHViLmNvbS9hZGR5b3NtYW5p
Il0sWzEzXSxbMCwiQWRkeSBPc21hbmkiXSxbMTRdLFswLCJcXG4gICJdLFsxNF0sWzAsIlxcbiAg
Il0sWzExLCJwIixbXV0sWzEzXSxbMCwiUGFydCBvZiAiXSxbMTEsImEiLFtdXSxbMTUsImhyZWYi
LCJodHRwOi8vdG9kb212Yy5jb20iXSxbMTNdLFswLCJUb2RvTVZDIl0sWzE0XSxbMTRdLFswLCJc
XG4iXSxbMTRdXSwibG9jYWxzIjpbXSwibmFtZWQiOltdLCJ5aWVsZHMiOltdLCJoYXNQYXJ0aWFs
cyI6ZmFsc2V9JyxtZXRhOnttb2R1bGVOYW1lOiJ0b2RvbXZjL3RlbXBsYXRlcy9hcHBsaWNhdGlv
bi5oYnMifX0pfSksZGVmaW5lKCJ0b2RvbXZjL3RlbXBsYXRlcy9jb21wbGV0ZWQiLFsiZXhwb3J0
cyJdLGZ1bmN0aW9uKGUpe2UuZGVmYXVsdD1FbWJlci5IVE1MQmFycy50ZW1wbGF0ZSh7aWQ6IkY0
bGE5d3RiIixibG9jazoneyJzdGF0ZW1lbnRzIjpbWzEsWzMzLFsidG9kby1saXN0Il0sbnVsbCxb
WyJ0b2RvcyJdLFtbMjgsWyJ0b2RvcyJdXV1dXSxmYWxzZV1dLCJsb2NhbHMiOltdLCJuYW1lZCI6
W10sInlpZWxkcyI6W10sImhhc1BhcnRpYWxzIjpmYWxzZX0nLG1ldGE6e21vZHVsZU5hbWU6InRv
ZG9tdmMvdGVtcGxhdGVzL2NvbXBsZXRlZC5oYnMifX0pfSksZGVmaW5lKCJ0b2RvbXZjL3RlbXBs
YXRlcy9jb21wb25lbnRzL3RvZG8taXRlbSIsWyJleHBvcnRzIl0sZnVuY3Rpb24oZSl7ZS5kZWZh
dWx0PUVtYmVyLkhUTUxCYXJzLnRlbXBsYXRlKHtpZDoiZFEzK2NLNUUiLGJsb2NrOid7InN0YXRl
bWVudHMiOltbMTEsImRpdiIsW11dLFsxNSwiY2xhc3MiLCJ2aWV3Il0sWzEzXSxbMCwiXFxuICAi
XSxbMTEsImlucHV0IixbXV0sWzE1LCJ0eXBlIiwiY2hlY2tib3giXSxbMTUsImNsYXNzIiwidG9n
Z2xlIl0sWzE2LCJjaGVja2VkIixbMjgsWyJ0b2RvIiwiY29tcGxldGVkIl1dLG51bGxdLFsxNiwi
b25jaGFuZ2UiLFszMyxbImFjdGlvbiJdLFtbMjgsW251bGxdXSwidG9nZ2xlQ29tcGxldGVkIl0s
bnVsbF0sbnVsbF0sWzEzXSxbMTRdLFswLCJcXG4gICJdLFsxMSwibGFiZWwiLFtdXSxbMTYsIm9u
ZGJsY2xpY2siLFszMyxbImFjdGlvbiJdLFtbMjgsW251bGxdXSwic3RhcnRFZGl0aW5nIl0sbnVs
bF0sbnVsbF0sWzEzXSxbMSxbMjgsWyJ0b2RvIiwidGl0bGUiXV0sZmFsc2VdLFsxNF0sWzAsIlxc
biAgIl0sWzExLCJidXR0b24iLFtdXSxbMTYsIm9uY2xpY2siLFszMyxbImFjdGlvbiJdLFtbMjgs
W251bGxdXSwicmVtb3ZlVG9kbyJdLG51bGxdLG51bGxdLFsxNSwiY2xhc3MiLCJkZXN0cm95Il0s
WzEzXSxbMTRdLFswLCJcXG4iXSxbMTRdLFswLCJcXG4iXSxbMTEsImlucHV0IixbXV0sWzE1LCJ0
eXBlIiwidGV4dCJdLFsxNSwiY2xhc3MiLCJlZGl0Il0sWzE2LCJ2YWx1ZSIsWzI4LFsidG9kbyIs
InRpdGxlIl1dLG51bGxdLFsxNiwib25ibHVyIixbMzMsWyJhY3Rpb24iXSxbWzI4LFtudWxsXV0s
ImRvbmVFZGl0aW5nIl0sW1sidmFsdWUiXSxbInRhcmdldC52YWx1ZSJdXV0sbnVsbF0sWzE2LCJv
bmtleWRvd24iLFszMyxbImFjdGlvbiJdLFtbMjgsW251bGxdXSwiaGFuZGxlS2V5ZG93biJdLG51
bGxdLG51bGxdLFsxNSwiYXV0b2ZvY3VzIiwiIl0sWzEzXSxbMTRdXSwibG9jYWxzIjpbXSwibmFt
ZWQiOltdLCJ5aWVsZHMiOltdLCJoYXNQYXJ0aWFscyI6ZmFsc2V9JyxtZXRhOnttb2R1bGVOYW1l
OiJ0b2RvbXZjL3RlbXBsYXRlcy9jb21wb25lbnRzL3RvZG8taXRlbS5oYnMifX0pfSksZGVmaW5l
KCJ0b2RvbXZjL3RlbXBsYXRlcy9jb21wb25lbnRzL3RvZG8tbGlzdCIsWyJleHBvcnRzIl0sZnVu
Y3Rpb24oZSl7ZS5kZWZhdWx0PUVtYmVyLkhUTUxCYXJzLnRlbXBsYXRlKHtpZDoiWEdtV1dENjMi
LGJsb2NrOid7InN0YXRlbWVudHMiOltbNixbImlmIl0sW1syOCxbInRvZG9zIiwibGVuZ3RoIl1d
XSxudWxsLHsic3RhdGVtZW50cyI6W1s2LFsiaWYiXSxbWzI4LFsiY2FuVG9nZ2xlIl1dXSxudWxs
LHsic3RhdGVtZW50cyI6W1swLCIgICAgIl0sWzExLCJpbnB1dCIsW11dLFsxNSwidHlwZSIsImNo
ZWNrYm94Il0sWzE1LCJpZCIsInRvZ2dsZS1hbGwiXSxbMTYsImNoZWNrZWQiLFsyNixbImFsbENv
bXBsZXRlZCJdXSxudWxsXSxbMTYsIm9uY2hhbmdlIixbMzMsWyJhY3Rpb24iXSxbWzI4LFtudWxs
XV0sInRvZ2dsZUFsbCJdLG51bGxdLG51bGxdLFsxM10sWzE0XSxbMCwiXFxuIl1dLCJsb2NhbHMi
OltdfSxudWxsXSxbMCwiICAiXSxbMTEsInVsIixbXV0sWzE1LCJpZCIsInRvZG8tbGlzdCJdLFsx
NSwiY2xhc3MiLCJ0b2RvLWxpc3QiXSxbMTNdLFswLCJcXG4iXSxbNixbImVhY2giXSxbWzI4LFsi
dG9kb3MiXV1dLG51bGwseyJzdGF0ZW1lbnRzIjpbWzAsIiAgICAgICJdLFsxLFszMyxbInRvZG8t
aXRlbSJdLG51bGwsW1sidG9kbyIsIm9uU3RhcnRFZGl0Iiwib25FbmRFZGl0Il0sW1syOCxbInRv
ZG8iXV0sWzMzLFsiYWN0aW9uIl0sW1syOCxbbnVsbF1dLCJkaXNhYmxlVG9nZ2xlIl0sbnVsbF0s
WzMzLFsiYWN0aW9uIl0sW1syOCxbbnVsbF1dLCJlbmFibGVUb2dnbGUiXSxudWxsXV1dXSxmYWxz
ZV0sWzAsIlxcbiJdXSwibG9jYWxzIjpbInRvZG8iXX0sbnVsbF0sWzAsIiAgIl0sWzE0XSxbMCwi
XFxuIl1dLCJsb2NhbHMiOltdfSxudWxsXV0sImxvY2FscyI6W10sIm5hbWVkIjpbXSwieWllbGRz
IjpbXSwiaGFzUGFydGlhbHMiOmZhbHNlfScsbWV0YTp7bW9kdWxlTmFtZToidG9kb212Yy90ZW1w
bGF0ZXMvY29tcG9uZW50cy90b2RvLWxpc3QuaGJzIn19KX0pLGRlZmluZSgidG9kb212Yy90ZW1w
bGF0ZXMvaW5kZXgiLFsiZXhwb3J0cyJdLGZ1bmN0aW9uKGUpe2UuZGVmYXVsdD1FbWJlci5IVE1M
QmFycy50ZW1wbGF0ZSh7aWQ6ImhCYWROSXBvIixibG9jazoneyJzdGF0ZW1lbnRzIjpbWzYsWyJp
ZiJdLFtbMjgsWyJtb2RlbCIsImxlbmd0aCJdXV0sbnVsbCx7InN0YXRlbWVudHMiOltbMCwiICAi
XSxbMSxbMzMsWyJ0b2RvLWxpc3QiXSxudWxsLFtbInRvZG9zIl0sW1syOCxbIm1vZGVsIl1dXV1d
LGZhbHNlXSxbMCwiXFxuIl1dLCJsb2NhbHMiOltdfSxudWxsXV0sImxvY2FscyI6W10sIm5hbWVk
IjpbXSwieWllbGRzIjpbXSwiaGFzUGFydGlhbHMiOmZhbHNlfScsbWV0YTp7bW9kdWxlTmFtZToi
dG9kb212Yy90ZW1wbGF0ZXMvaW5kZXguaGJzIn19KX0pLGRlZmluZSgidG9kb212Yy9jb25maWcv
ZW52aXJvbm1lbnQiLFsiZW1iZXIiXSxmdW5jdGlvbihlKXt0cnl7dmFyIHQ9InRvZG9tdmMvY29u
ZmlnL2Vudmlyb25tZW50IixvPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ21ldGFbbmFtZT0iJyt0
KyciXScpLmdldEF0dHJpYnV0ZSgiY29udGVudCIpLG49SlNPTi5wYXJzZSh1bmVzY2FwZShvKSks
bD17ZGVmYXVsdDpufQorcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJfX2VzTW9kdWxl
Iix7dmFsdWU6ITB9KSxsfWNhdGNoKGUpe3Rocm93IG5ldyBFcnJvcignQ291bGQgbm90IHJlYWQg
Y29uZmlnIGZyb20gbWV0YSB0YWcgd2l0aCBuYW1lICInK3QrJyIuJyl9fSkscnVubmluZ1Rlc3Rz
fHxyZXF1aXJlKCJ0b2RvbXZjL2FwcCIpLmRlZmF1bHQuY3JlYXRlKHtuYW1lOiJ0b2RvbXZjIix2
ZXJzaW9uOiIwLjAuMCthMmNhMTY1MCJ9KQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9T
cGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJq
cy9zb3VyY2UvZGlzdC9hc3NldHMvdG9kb212Yy03NjAxZmZjYTYxNTBlZDYzM2YwZjMzM2ZlNzZi
ZmFmMi5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMv
YXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvc291cmNlL2Rpc3QvYXNzZXRzL3RvZG9tdmMt
NzYwMWZmY2E2MTUwZWQ2MzNmMGYzMzNmZTc2YmZhZjIuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGYyNWUyY2EwOGE1NjNiNDkxOWZhOWNhMzkwODZhNGE0YTBiOGZlYTEuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0
cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1i
ZXJqcy9zb3VyY2UvZGlzdC9hc3NldHMvdG9kb212Yy03NjAxZmZjYTYxNTBlZDYzM2YwZjMzM2Zl
NzZiZmFmMi5qcworKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLSJ1c2Ugc3RyaWN0Igot
ZGVmaW5lKCJ0b2RvbXZjL2FwcCIsWyJleHBvcnRzIiwiZW1iZXIiLCJ0b2RvbXZjL3Jlc29sdmVy
IiwiZW1iZXItbG9hZC1pbml0aWFsaXplcnMiLCJ0b2RvbXZjL2NvbmZpZy9lbnZpcm9ubWVudCJd
LGZ1bmN0aW9uKGUsdCxvLG4sbCl7dmFyIGk9dm9pZCAwCi10LmRlZmF1bHQuTU9ERUxfRkFDVE9S
WV9JTkpFQ1RJT05TPSEwLGk9dC5kZWZhdWx0LkFwcGxpY2F0aW9uLmV4dGVuZCh7bW9kdWxlUHJl
Zml4OmwuZGVmYXVsdC5tb2R1bGVQcmVmaXgscG9kTW9kdWxlUHJlZml4OmwuZGVmYXVsdC5wb2RN
b2R1bGVQcmVmaXgsUmVzb2x2ZXI6by5kZWZhdWx0fSksKDAsbi5kZWZhdWx0KShpLGwuZGVmYXVs
dC5tb2R1bGVQcmVmaXgpLGUuZGVmYXVsdD1pfSksZGVmaW5lKCJ0b2RvbXZjL2NvbXBvbmVudHMv
dG9kby1pdGVtIixbImV4cG9ydHMiLCJlbWJlciJdLGZ1bmN0aW9uKGUsdCl7ZS5kZWZhdWx0PXQu
ZGVmYXVsdC5Db21wb25lbnQuZXh0ZW5kKHtyZXBvOnQuZGVmYXVsdC5pbmplY3Quc2VydmljZSgp
LHRhZ05hbWU6ImxpIixlZGl0aW5nOiExLGNsYXNzTmFtZUJpbmRpbmdzOlsidG9kby5jb21wbGV0
ZWQiLCJlZGl0aW5nIl0sYWN0aW9uczp7c3RhcnRFZGl0aW5nOmZ1bmN0aW9uKCl7dGhpcy5nZXQo
Im9uU3RhcnRFZGl0IikoKSx0aGlzLnNldCgiZWRpdGluZyIsITApLHQuZGVmYXVsdC5ydW4uc2No
ZWR1bGVPbmNlKCJhZnRlclJlbmRlciIsdGhpcywiZm9jdXNJbnB1dCIpfSxkb25lRWRpdGluZzpm
dW5jdGlvbihlKXt0aGlzLmdldCgiZWRpdGluZyIpJiYodC5kZWZhdWx0LmlzQmxhbmsoZSk/dGhp
cy5zZW5kKCJyZW1vdmVUb2RvIik6KHRoaXMuc2V0KCJ0b2RvLnRpdGxlIixlLnRyaW0oKSksdGhp
cy5zZXQoImVkaXRpbmciLCExKSx0aGlzLmdldCgib25FbmRFZGl0IikoKSkpfSxoYW5kbGVLZXlk
b3duOmZ1bmN0aW9uKGUpezEzPT09ZS5rZXlDb2RlP2UudGFyZ2V0LmJsdXIoKToyNz09PWUua2V5
Q29kZSYmdGhpcy5zZXQoImVkaXRpbmciLCExKX0sdG9nZ2xlQ29tcGxldGVkOmZ1bmN0aW9uKGUp
e3ZhciBvPXRoaXMuZ2V0KCJ0b2RvIikKLXQuZGVmYXVsdC5zZXQobywiY29tcGxldGVkIixlLnRh
cmdldC5jaGVja2VkKSx0aGlzLmdldCgicmVwbyIpLnBlcnNpc3QoKX0scmVtb3ZlVG9kbzpmdW5j
dGlvbigpe3RoaXMuZ2V0KCJyZXBvIikuZGVsZXRlKHRoaXMuZ2V0KCJ0b2RvIikpfX0sZm9jdXNJ
bnB1dDpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5xdWVyeVNlbGVjdG9yKCJpbnB1dC5lZGl0Iiku
Zm9jdXMoKX19KX0pLGRlZmluZSgidG9kb212Yy9jb21wb25lbnRzL3RvZG8tbGlzdCIsWyJleHBv
cnRzIiwiZW1iZXIiXSxmdW5jdGlvbihlLHQpe2UuZGVmYXVsdD10LmRlZmF1bHQuQ29tcG9uZW50
LmV4dGVuZCh7cmVwbzp0LmRlZmF1bHQuaW5qZWN0LnNlcnZpY2UoKSx0YWdOYW1lOiJzZWN0aW9u
IixlbGVtZW50SWQ6Im1haW4iLGNhblRvZ2dsZTohMCxhbGxDb21wbGV0ZWQ6dC5kZWZhdWx0LmNv
bXB1dGVkKCJ0b2Rvcy5AZWFjaC5jb21wbGV0ZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0
KCJ0b2RvcyIpLmlzRXZlcnkoImNvbXBsZXRlZCIpfSksYWN0aW9uczp7ZW5hYmxlVG9nZ2xlOmZ1
bmN0aW9uKCl7dGhpcy5zZXQoImNhblRvZ2dsZSIsITApfSxkaXNhYmxlVG9nZ2xlOmZ1bmN0aW9u
KCl7dGhpcy5zZXQoImNhblRvZ2dsZSIsITEpfSx0b2dnbGVBbGw6ZnVuY3Rpb24oKXt2YXIgZT10
aGlzLmdldCgiYWxsQ29tcGxldGVkIikKLXRoaXMuZ2V0KCJ0b2RvcyIpLmZvckVhY2goZnVuY3Rp
b24obyl7cmV0dXJuIHQuZGVmYXVsdC5zZXQobywiY29tcGxldGVkIiwhZSl9KSx0aGlzLmdldCgi
cmVwbyIpLnBlcnNpc3QoKX19fSl9KSxkZWZpbmUoInRvZG9tdmMvY29udHJvbGxlcnMvYWN0aXZl
IixbImV4cG9ydHMiLCJlbWJlciJdLGZ1bmN0aW9uKGUsdCl7ZS5kZWZhdWx0PXQuZGVmYXVsdC5D
b250cm9sbGVyLmV4dGVuZCh7dG9kb3M6dC5kZWZhdWx0LmNvbXB1dGVkLmZpbHRlckJ5KCJtb2Rl
bCIsImNvbXBsZXRlZCIsITEpfSl9KSxkZWZpbmUoInRvZG9tdmMvY29udHJvbGxlcnMvYXBwbGlj
YXRpb24iLFsiZXhwb3J0cyIsImVtYmVyIl0sZnVuY3Rpb24oZSx0KXtlLmRlZmF1bHQ9dC5kZWZh
dWx0LkNvbnRyb2xsZXIuZXh0ZW5kKHtyZXBvOnQuZGVmYXVsdC5pbmplY3Quc2VydmljZSgpLHJl
bWFpbmluZzp0LmRlZmF1bHQuY29tcHV0ZWQuZmlsdGVyQnkoIm1vZGVsIiwiY29tcGxldGVkIiwh
MSksY29tcGxldGVkOnQuZGVmYXVsdC5jb21wdXRlZC5maWx0ZXJCeSgibW9kZWwiLCJjb21wbGV0
ZWQiKSxhY3Rpb25zOntjcmVhdGVUb2RvOmZ1bmN0aW9uKGUpezEzIT09ZS5rZXlDb2RlfHx0LmRl
ZmF1bHQuaXNCbGFuayhlLnRhcmdldC52YWx1ZSl8fCh0aGlzLmdldCgicmVwbyIpLmFkZCh7dGl0
bGU6ZS50YXJnZXQudmFsdWUudHJpbSgpLGNvbXBsZXRlZDohMX0pLGUudGFyZ2V0LnZhbHVlPSIi
KX0sY2xlYXJDb21wbGV0ZWQ6ZnVuY3Rpb24oKXt0aGlzLmdldCgibW9kZWwiKS5yZW1vdmVPYmpl
Y3RzKHRoaXMuZ2V0KCJjb21wbGV0ZWQiKSksdGhpcy5nZXQoInJlcG8iKS5wZXJzaXN0KCl9fX0p
fSksZGVmaW5lKCJ0b2RvbXZjL2NvbnRyb2xsZXJzL2NvbXBsZXRlZCIsWyJleHBvcnRzIiwiZW1i
ZXIiXSxmdW5jdGlvbihlLHQpe2UuZGVmYXVsdD10LmRlZmF1bHQuQ29udHJvbGxlci5leHRlbmQo
e3RvZG9zOnQuZGVmYXVsdC5jb21wdXRlZC5maWx0ZXJCeSgibW9kZWwiLCJjb21wbGV0ZWQiLCEw
KX0pfSksZGVmaW5lKCJ0b2RvbXZjL2hlbHBlcnMvYXBwLXZlcnNpb24iLFsiZXhwb3J0cyIsImVt
YmVyIiwidG9kb212Yy9jb25maWcvZW52aXJvbm1lbnQiLCJlbWJlci1jbGktYXBwLXZlcnNpb24v
dXRpbHMvcmVnZXhwIl0sZnVuY3Rpb24oZSx0LG8sbil7ZnVuY3Rpb24gbChlKXt2YXIgdD1hcmd1
bWVudHMubGVuZ3RoPD0xfHx2b2lkIDA9PT1hcmd1bWVudHNbMV0/e306YXJndW1lbnRzWzFdCi1y
ZXR1cm4gdC5oaWRlU2hhP2kubWF0Y2gobi52ZXJzaW9uUmVnRXhwKVswXTp0LmhpZGVWZXJzaW9u
P2kubWF0Y2gobi5zaGFSZWdFeHApWzBdOml9ZS5hcHBWZXJzaW9uPWwKLXZhciBpPW8uZGVmYXVs
dC5BUFAudmVyc2lvbgotZS5kZWZhdWx0PXQuZGVmYXVsdC5IZWxwZXIuaGVscGVyKGwpfSksZGVm
aW5lKCJ0b2RvbXZjL2hlbHBlcnMvZ3QiLFsiZXhwb3J0cyIsImVtYmVyIl0sZnVuY3Rpb24oZSx0
KXtmdW5jdGlvbiBvKGUpe3ZhciB0PW4oZSwyKQotcmV0dXJuIHRbMF0+dFsxXX12YXIgbj1mdW5j
dGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt2YXIgbz1bXSxuPSEwLGw9ITEsaT12b2lkIDAKLXRyeXtm
b3IodmFyIGEsZD1lW1N5bWJvbC5pdGVyYXRvcl0oKTshKG49KGE9ZC5uZXh0KCkpLmRvbmUpJiYo
by5wdXNoKGEudmFsdWUpLCF0fHxvLmxlbmd0aCE9PXQpO249ITApO31jYXRjaChlKXtsPSEwLGk9
ZX1maW5hbGx5e3RyeXshbiYmZC5yZXR1cm4mJmQucmV0dXJuKCl9ZmluYWxseXtpZihsKXRocm93
IGl9fXJldHVybiBvfXJldHVybiBmdW5jdGlvbih0LG8pe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0
dXJuIHQKLWlmKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QodCkpcmV0dXJuIGUodCxvKQotdGhy
b3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVy
YWJsZSBpbnN0YW5jZSIpfX0oKQotZS5ndD1vLGUuZGVmYXVsdD10LmRlZmF1bHQuSGVscGVyLmhl
bHBlcihvKX0pLGRlZmluZSgidG9kb212Yy9oZWxwZXJzL3BsdXJhbGl6ZSIsWyJleHBvcnRzIiwi
ZW1iZXIiLCJlbWJlci1pbmZsZWN0b3IiXSxmdW5jdGlvbihlLHQsbyl7ZnVuY3Rpb24gbihlKXt2
YXIgdD1sKGUsMiksbj10WzBdCi1yZXR1cm4gMT09PXRbMV0/bjooMCxvLnBsdXJhbGl6ZSkobil9
dmFyIGw9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dmFyIG89W10sbj0hMCxsPSExLGk9dm9p
ZCAwCi10cnl7Zm9yKHZhciBhLGQ9ZVtTeW1ib2wuaXRlcmF0b3JdKCk7IShuPShhPWQubmV4dCgp
KS5kb25lKSYmKG8ucHVzaChhLnZhbHVlKSwhdHx8by5sZW5ndGghPT10KTtuPSEwKTt9Y2F0Y2go
ZSl7bD0hMCxpPWV9ZmluYWxseXt0cnl7IW4mJmQucmV0dXJuJiZkLnJldHVybigpfWZpbmFsbHl7
aWYobCl0aHJvdyBpfX1yZXR1cm4gb31yZXR1cm4gZnVuY3Rpb24odCxvKXtpZihBcnJheS5pc0Fy
cmF5KHQpKXJldHVybiB0Ci1pZihTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KHQpKXJldHVybiBl
KHQsbykKLXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVy
ZSBub24taXRlcmFibGUgaW5zdGFuY2UiKX19KCkKLWUucGx1cmFsaXplSGVscGVyPW4sZS5kZWZh
dWx0PXQuZGVmYXVsdC5IZWxwZXIuaGVscGVyKG4pfSksZGVmaW5lKCJ0b2RvbXZjL2hlbHBlcnMv
c2luZ3VsYXJpemUiLFsiZXhwb3J0cyIsImVtYmVyLWluZmxlY3Rvci9saWIvaGVscGVycy9zaW5n
dWxhcml6ZSJdLGZ1bmN0aW9uKGUsdCl7ZS5kZWZhdWx0PXQuZGVmYXVsdH0pLGRlZmluZSgidG9k
b212Yy9pbml0aWFsaXplcnMvYXBwLXZlcnNpb24iLFsiZXhwb3J0cyIsImVtYmVyLWNsaS1hcHAt
dmVyc2lvbi9pbml0aWFsaXplci1mYWN0b3J5IiwidG9kb212Yy9jb25maWcvZW52aXJvbm1lbnQi
XSxmdW5jdGlvbihlLHQsbyl7dmFyIG49by5kZWZhdWx0LkFQUCxsPW4ubmFtZSxpPW4udmVyc2lv
bgotZS5kZWZhdWx0PXtuYW1lOiJBcHAgVmVyc2lvbiIsaW5pdGlhbGl6ZTooMCx0LmRlZmF1bHQp
KGwsaSl9fSksZGVmaW5lKCJ0b2RvbXZjL2luaXRpYWxpemVycy9jb250YWluZXItZGVidWctYWRh
cHRlciIsWyJleHBvcnRzIiwiZW1iZXItcmVzb2x2ZXIvY29udGFpbmVyLWRlYnVnLWFkYXB0ZXIi
XSxmdW5jdGlvbihlLHQpe2UuZGVmYXVsdD17bmFtZToiY29udGFpbmVyLWRlYnVnLWFkYXB0ZXIi
LGluaXRpYWxpemU6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHNbMV18fGFyZ3VtZW50c1swXQot
ZS5yZWdpc3RlcigiY29udGFpbmVyLWRlYnVnLWFkYXB0ZXI6bWFpbiIsdC5kZWZhdWx0KSxlLmlu
amVjdCgiY29udGFpbmVyLWRlYnVnLWFkYXB0ZXI6bWFpbiIsIm5hbWVzcGFjZSIsImFwcGxpY2F0
aW9uOm1haW4iKX19fSksZGVmaW5lKCJ0b2RvbXZjL2luaXRpYWxpemVycy9leHBvcnQtYXBwbGlj
YXRpb24tZ2xvYmFsIixbImV4cG9ydHMiLCJlbWJlciIsInRvZG9tdmMvY29uZmlnL2Vudmlyb25t
ZW50Il0sZnVuY3Rpb24oZSx0LG8pe2Z1bmN0aW9uIG4oKXt2YXIgZT1hcmd1bWVudHNbMV18fGFy
Z3VtZW50c1swXQotaWYoITEhPT1vLmRlZmF1bHQuZXhwb3J0QXBwbGljYXRpb25HbG9iYWwpe3Zh
ciBuCi1pZigidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyluPXdpbmRvdwotZWxzZSBpZigidW5k
ZWZpbmVkIiE9dHlwZW9mIGdsb2JhbCluPWdsb2JhbAotZWxzZXtpZigidW5kZWZpbmVkIj09dHlw
ZW9mIHNlbGYpcmV0dXJuCi1uPXNlbGZ9dmFyIGwsaT1vLmRlZmF1bHQuZXhwb3J0QXBwbGljYXRp
b25HbG9iYWwKLWw9InN0cmluZyI9PXR5cGVvZiBpP2k6dC5kZWZhdWx0LlN0cmluZy5jbGFzc2lm
eShvLmRlZmF1bHQubW9kdWxlUHJlZml4KSxuW2xdfHwobltsXT1lLGUucmVvcGVuKHt3aWxsRGVz
dHJveTpmdW5jdGlvbigpe3RoaXMuX3N1cGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxkZWxldGUg
bltsXX19KSl9fWUuaW5pdGlhbGl6ZT1uLGUuZGVmYXVsdD17bmFtZToiZXhwb3J0LWFwcGxpY2F0
aW9uLWdsb2JhbCIsaW5pdGlhbGl6ZTpufX0pLGRlZmluZSgidG9kb212Yy9yZXNvbHZlciIsWyJl
eHBvcnRzIiwiZW1iZXItcmVzb2x2ZXIiXSxmdW5jdGlvbihlLHQpe2UuZGVmYXVsdD10LmRlZmF1
bHR9KSxkZWZpbmUoInRvZG9tdmMvcm91dGVyIixbImV4cG9ydHMiLCJlbWJlciIsInRvZG9tdmMv
Y29uZmlnL2Vudmlyb25tZW50Il0sZnVuY3Rpb24oZSx0LG8pe3ZhciBuPXQuZGVmYXVsdC5Sb3V0
ZXIuZXh0ZW5kKHtsb2NhdGlvbjpvLmRlZmF1bHQubG9jYXRpb25UeXBlLHJvb3RVUkw6by5kZWZh
dWx0LnJvb3RVUkx9KQotbi5tYXAoZnVuY3Rpb24oKXt0aGlzLnJvdXRlKCJhY3RpdmUiKSx0aGlz
LnJvdXRlKCJjb21wbGV0ZWQiKX0pLGUuZGVmYXVsdD1ufSksZGVmaW5lKCJ0b2RvbXZjL3JvdXRl
cy9hcHBsaWNhdGlvbiIsWyJleHBvcnRzIiwiZW1iZXIiXSxmdW5jdGlvbihlLHQpe2UuZGVmYXVs
dD10LmRlZmF1bHQuUm91dGUuZXh0ZW5kKHtyZXBvOnQuZGVmYXVsdC5pbmplY3Quc2VydmljZSgp
LG1vZGVsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0KCJyZXBvIikuZmluZEFsbCgpfX0pfSks
ZGVmaW5lKCJ0b2RvbXZjL3NlcnZpY2VzL2FqYXgiLFsiZXhwb3J0cyIsImVtYmVyLWFqYXgvc2Vy
dmljZXMvYWpheCJdLGZ1bmN0aW9uKGUsdCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImRlZmF1
bHQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0LmRlZmF1bHR9fSl9KSxk
ZWZpbmUoInRvZG9tdmMvc2VydmljZXMvbWVtb3J5IixbImV4cG9ydHMiXSxmdW5jdGlvbihlKXso
ZnVuY3Rpb24oZSl7dmFyIHQ9e30sbz17fQotdC5sZW5ndGg9MCx0LmdldEl0ZW09ZnVuY3Rpb24o
ZSl7cmV0dXJuIG9bZV18fG51bGx9LHQuc2V0SXRlbT1mdW5jdGlvbihlLG4pe3ZvaWQgMD09PW4/
dC5yZW1vdmVJdGVtKGUpOihvLmhhc093blByb3BlcnR5KGUpfHx0Lmxlbmd0aCsrLG9bZV09IiIr
bil9LHQucmVtb3ZlSXRlbT1mdW5jdGlvbihlKXtvLmhhc093blByb3BlcnR5KGUpJiYoZGVsZXRl
IG9bZV0sdC5sZW5ndGgtLSl9LHQua2V5PWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Qua2V5cyhv
KVtlXXx8bnVsbH0sdC5jbGVhcj1mdW5jdGlvbigpe289e30sdC5sZW5ndGg9MH0sZS5sb2NhbFN0
b3JhZ2VNZW1vcnk9dH0pKHdpbmRvdyl9KSxkZWZpbmUoInRvZG9tdmMvc2VydmljZXMvcmVwbyIs
WyJleHBvcnRzIiwiZW1iZXIiLCJ0b2RvbXZjL3NlcnZpY2VzL21lbW9yeSJdLGZ1bmN0aW9uKGUs
dCxvKXtlLmRlZmF1bHQ9dC5kZWZhdWx0LlNlcnZpY2UuZXh0ZW5kKHtsYXN0SWQ6MCxkYXRhOm51
bGwsZmluZEFsbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldCgiZGF0YSIpfHx0aGlzLnNldCgi
ZGF0YSIsSlNPTi5wYXJzZSh3aW5kb3cubG9jYWxTdG9yYWdlTWVtb3J5LmdldEl0ZW0oInRvZG9z
Iil8fCJbXSIpKX0sYWRkOmZ1bmN0aW9uKGUpe3ZhciB0PU9iamVjdC5hc3NpZ24oe2lkOnRoaXMu
aW5jcmVtZW50UHJvcGVydHkoImxhc3RJZCIpfSxlKQotcmV0dXJuIHRoaXMuZ2V0KCJkYXRhIiku
cHVzaE9iamVjdCh0KSx0aGlzLnBlcnNpc3QoKSx0fSxkZWxldGU6ZnVuY3Rpb24oZSl7dGhpcy5n
ZXQoImRhdGEiKS5yZW1vdmVPYmplY3QoZSksdGhpcy5wZXJzaXN0KCl9LHBlcnNpc3Q6ZnVuY3Rp
b24oKXt3aW5kb3cubG9jYWxTdG9yYWdlTWVtb3J5LnNldEl0ZW0oInRvZG9zIixKU09OLnN0cmlu
Z2lmeSh0aGlzLmdldCgiZGF0YSIpKSl9fSl9KSxkZWZpbmUoInRvZG9tdmMvdGVtcGxhdGVzL2Fj
dGl2ZSIsWyJleHBvcnRzIl0sZnVuY3Rpb24oZSl7ZS5kZWZhdWx0PUVtYmVyLkhUTUxCYXJzLnRl
bXBsYXRlKHtpZDoiYUFzYzRMdDgiLGJsb2NrOid7InN0YXRlbWVudHMiOltbMSxbMzMsWyJ0b2Rv
LWxpc3QiXSxudWxsLFtbInRvZG9zIl0sW1syOCxbInRvZG9zIl1dXV1dLGZhbHNlXV0sImxvY2Fs
cyI6W10sIm5hbWVkIjpbXSwieWllbGRzIjpbXSwiaGFzUGFydGlhbHMiOmZhbHNlfScsbWV0YTp7
bW9kdWxlTmFtZToidG9kb212Yy90ZW1wbGF0ZXMvYWN0aXZlLmhicyJ9fSl9KSxkZWZpbmUoInRv
ZG9tdmMvdGVtcGxhdGVzL2FwcGxpY2F0aW9uIixbImV4cG9ydHMiXSxmdW5jdGlvbihlKXtlLmRl
ZmF1bHQ9RW1iZXIuSFRNTEJhcnMudGVtcGxhdGUoe2lkOiJCWW55ejVPTiIsYmxvY2s6J3sic3Rh
dGVtZW50cyI6W1sxMSwic2VjdGlvbiIsW11dLFsxNSwiaWQiLCJ0b2RvYXBwIl0sWzEzXSxbMCwi
XFxuICAiXSxbMTEsImhlYWRlciIsW11dLFsxNSwiaWQiLCJoZWFkZXIiXSxbMTNdLFswLCJcXG4g
ICAgIl0sWzExLCJoMSIsW11dLFsxM10sWzAsInRvZG9zIl0sWzE0XSxbMCwiXFxuICAgICJdLFsx
MSwiaW5wdXQiLFtdXSxbMTUsInR5cGUiLCJ0ZXh0Il0sWzE1LCJpZCIsIm5ldy10b2RvIl0sWzE2
LCJvbmtleWRvd24iLFszMyxbImFjdGlvbiJdLFtbMjgsW251bGxdXSwiY3JlYXRlVG9kbyJdLG51
bGxdLG51bGxdLFsxNSwicGxhY2Vob2xkZXIiLCJXaGF0IG5lZWRzIHRvIGJlIGRvbmU/Il0sWzE1
LCJhdXRvZm9jdXMiLCIiXSxbMTNdLFsxNF0sWzAsIlxcbiAgIl0sWzE0XSxbMCwiXFxuICAgICJd
LFsxLFsyNixbIm91dGxldCJdXSxmYWxzZV0sWzAsIlxcbiJdLFs2LFsiaWYiXSxbWzMzLFsiZ3Qi
XSxbWzI4LFsibW9kZWwiLCJsZW5ndGgiXV0sMF0sbnVsbF1dLG51bGwseyJzdGF0ZW1lbnRzIjpb
WzAsIiAgICAgICJdLFsxMSwiZm9vdGVyIixbXV0sWzE1LCJpZCIsImZvb3RlciJdLFsxM10sWzAs
IlxcbiAgICAgICAgIl0sWzExLCJzcGFuIixbXV0sWzE1LCJpZCIsInRvZG8tY291bnQiXSxbMTNd
LFsxMSwic3Ryb25nIixbXV0sWzEzXSxbMSxbMjgsWyJyZW1haW5pbmciLCJsZW5ndGgiXV0sZmFs
c2VdLFsxNF0sWzAsIiAiXSxbMSxbMzMsWyJwbHVyYWxpemUiXSxbIml0ZW0iLFsyOCxbInJlbWFp
bmluZyIsImxlbmd0aCJdXV0sbnVsbF0sZmFsc2VdLFswLCIgbGVmdCJdLFsxNF0sWzAsIlxcbiAg
ICAgICAgIl0sWzExLCJ1bCIsW11dLFsxNSwiaWQiLCJmaWx0ZXJzIl0sWzEzXSxbMCwiXFxuICAg
ICAgICAgICJdLFsxMSwibGkiLFtdXSxbMTNdLFs2LFsibGluay10byJdLFsiaW5kZXgiXSxbWyJh
Y3RpdmVDbGFzcyJdLFsic2VsZWN0ZWQiXV0seyJzdGF0ZW1lbnRzIjpbWzAsIkFsbCJdXSwibG9j
YWxzIjpbXX0sbnVsbF0sWzE0XSxbMCwiXFxuICAgICAgICAgICJdLFsxMSwibGkiLFtdXSxbMTNd
LFs2LFsibGluay10byJdLFsiYWN0aXZlIl0sW1siYWN0aXZlQ2xhc3MiXSxbInNlbGVjdGVkIl1d
LHsic3RhdGVtZW50cyI6W1swLCJBY3RpdmUiXV0sImxvY2FscyI6W119LG51bGxdLFsxNF0sWzAs
IlxcbiAgICAgICAgICAiXSxbMTEsImxpIixbXV0sWzEzXSxbNixbImxpbmstdG8iXSxbImNvbXBs
ZXRlZCJdLFtbImFjdGl2ZUNsYXNzIl0sWyJzZWxlY3RlZCJdXSx7InN0YXRlbWVudHMiOltbMCwi
Q29tcGxldGVkIl1dLCJsb2NhbHMiOltdfSxudWxsXSxbMTRdLFswLCJcXG4gICAgICAgICJdLFsx
NF0sWzAsIlxcbiJdLFs2LFsiaWYiXSxbWzI4LFsiY29tcGxldGVkIiwibGVuZ3RoIl1dXSxudWxs
LHsic3RhdGVtZW50cyI6W1swLCIgICAgICAgICAgIl0sWzExLCJidXR0b24iLFtdXSxbMTUsImlk
IiwiY2xlYXItY29tcGxldGVkIl0sWzE2LCJvbmNsaWNrIixbMzMsWyJhY3Rpb24iXSxbWzI4LFtu
dWxsXV0sImNsZWFyQ29tcGxldGVkIl0sbnVsbF0sbnVsbF0sWzEzXSxbMCwiQ2xlYXIgY29tcGxl
dGVkIl0sWzE0XSxbMCwiXFxuIl1dLCJsb2NhbHMiOltdfSxudWxsXSxbMCwiICAgICAgIl0sWzE0
XSxbMCwiXFxuIl1dLCJsb2NhbHMiOltdfSxudWxsXSxbMTRdLFswLCJcXG4iXSxbMTEsImZvb3Rl
ciIsW11dLFsxNSwiaWQiLCJpbmZvIl0sWzEzXSxbMCwiXFxuICAiXSxbMTEsInAiLFtdXSxbMTNd
LFswLCJEb3VibGUtY2xpY2sgdG8gZWRpdCBhIHRvZG8iXSxbMTRdLFswLCJcXG4gICJdLFsxMSwi
cCIsW11dLFsxM10sWzAsIlxcbiAgICBDcmVhdGVkIGJ5XFxuICAgICJdLFsxMSwiYSIsW11dLFsx
NSwiaHJlZiIsImh0dHA6Ly9naXRodWIuY29tL2NpYmVybm94Il0sWzEzXSxbMCwiTWlndWVsIENh
bWJhIl0sWzE0XSxbMCwiLFxcbiAgICAiXSxbMTEsImEiLFtdXSxbMTUsImhyZWYiLCJodHRwOi8v
Z2l0aHViLmNvbS9hZGR5b3NtYW5pIl0sWzEzXSxbMCwiQWRkeSBPc21hbmkiXSxbMTRdLFswLCJc
XG4gICJdLFsxNF0sWzAsIlxcbiAgIl0sWzExLCJwIixbXV0sWzEzXSxbMCwiUGFydCBvZiAiXSxb
MTEsImEiLFtdXSxbMTUsImhyZWYiLCJodHRwOi8vdG9kb212Yy5jb20iXSxbMTNdLFswLCJUb2Rv
TVZDIl0sWzE0XSxbMTRdLFswLCJcXG4iXSxbMTRdXSwibG9jYWxzIjpbXSwibmFtZWQiOltdLCJ5
aWVsZHMiOltdLCJoYXNQYXJ0aWFscyI6ZmFsc2V9JyxtZXRhOnttb2R1bGVOYW1lOiJ0b2RvbXZj
L3RlbXBsYXRlcy9hcHBsaWNhdGlvbi5oYnMifX0pfSksZGVmaW5lKCJ0b2RvbXZjL3RlbXBsYXRl
cy9jb21wbGV0ZWQiLFsiZXhwb3J0cyJdLGZ1bmN0aW9uKGUpe2UuZGVmYXVsdD1FbWJlci5IVE1M
QmFycy50ZW1wbGF0ZSh7aWQ6IkY0bGE5d3RiIixibG9jazoneyJzdGF0ZW1lbnRzIjpbWzEsWzMz
LFsidG9kby1saXN0Il0sbnVsbCxbWyJ0b2RvcyJdLFtbMjgsWyJ0b2RvcyJdXV1dXSxmYWxzZV1d
LCJsb2NhbHMiOltdLCJuYW1lZCI6W10sInlpZWxkcyI6W10sImhhc1BhcnRpYWxzIjpmYWxzZX0n
LG1ldGE6e21vZHVsZU5hbWU6InRvZG9tdmMvdGVtcGxhdGVzL2NvbXBsZXRlZC5oYnMifX0pfSks
ZGVmaW5lKCJ0b2RvbXZjL3RlbXBsYXRlcy9jb21wb25lbnRzL3RvZG8taXRlbSIsWyJleHBvcnRz
Il0sZnVuY3Rpb24oZSl7ZS5kZWZhdWx0PUVtYmVyLkhUTUxCYXJzLnRlbXBsYXRlKHtpZDoiZFEz
K2NLNUUiLGJsb2NrOid7InN0YXRlbWVudHMiOltbMTEsImRpdiIsW11dLFsxNSwiY2xhc3MiLCJ2
aWV3Il0sWzEzXSxbMCwiXFxuICAiXSxbMTEsImlucHV0IixbXV0sWzE1LCJ0eXBlIiwiY2hlY2ti
b3giXSxbMTUsImNsYXNzIiwidG9nZ2xlIl0sWzE2LCJjaGVja2VkIixbMjgsWyJ0b2RvIiwiY29t
cGxldGVkIl1dLG51bGxdLFsxNiwib25jaGFuZ2UiLFszMyxbImFjdGlvbiJdLFtbMjgsW251bGxd
XSwidG9nZ2xlQ29tcGxldGVkIl0sbnVsbF0sbnVsbF0sWzEzXSxbMTRdLFswLCJcXG4gICJdLFsx
MSwibGFiZWwiLFtdXSxbMTYsIm9uZGJsY2xpY2siLFszMyxbImFjdGlvbiJdLFtbMjgsW251bGxd
XSwic3RhcnRFZGl0aW5nIl0sbnVsbF0sbnVsbF0sWzEzXSxbMSxbMjgsWyJ0b2RvIiwidGl0bGUi
XV0sZmFsc2VdLFsxNF0sWzAsIlxcbiAgIl0sWzExLCJidXR0b24iLFtdXSxbMTYsIm9uY2xpY2si
LFszMyxbImFjdGlvbiJdLFtbMjgsW251bGxdXSwicmVtb3ZlVG9kbyJdLG51bGxdLG51bGxdLFsx
NSwiY2xhc3MiLCJkZXN0cm95Il0sWzEzXSxbMTRdLFswLCJcXG4iXSxbMTRdLFswLCJcXG4iXSxb
MTEsImlucHV0IixbXV0sWzE1LCJ0eXBlIiwidGV4dCJdLFsxNSwiY2xhc3MiLCJlZGl0Il0sWzE2
LCJ2YWx1ZSIsWzI4LFsidG9kbyIsInRpdGxlIl1dLG51bGxdLFsxNiwib25ibHVyIixbMzMsWyJh
Y3Rpb24iXSxbWzI4LFtudWxsXV0sImRvbmVFZGl0aW5nIl0sW1sidmFsdWUiXSxbInRhcmdldC52
YWx1ZSJdXV0sbnVsbF0sWzE2LCJvbmtleWRvd24iLFszMyxbImFjdGlvbiJdLFtbMjgsW251bGxd
XSwiaGFuZGxlS2V5ZG93biJdLG51bGxdLG51bGxdLFsxNSwiYXV0b2ZvY3VzIiwiIl0sWzEzXSxb
MTRdXSwibG9jYWxzIjpbXSwibmFtZWQiOltdLCJ5aWVsZHMiOltdLCJoYXNQYXJ0aWFscyI6ZmFs
c2V9JyxtZXRhOnttb2R1bGVOYW1lOiJ0b2RvbXZjL3RlbXBsYXRlcy9jb21wb25lbnRzL3RvZG8t
aXRlbS5oYnMifX0pfSksZGVmaW5lKCJ0b2RvbXZjL3RlbXBsYXRlcy9jb21wb25lbnRzL3RvZG8t
bGlzdCIsWyJleHBvcnRzIl0sZnVuY3Rpb24oZSl7ZS5kZWZhdWx0PUVtYmVyLkhUTUxCYXJzLnRl
bXBsYXRlKHtpZDoiWEdtV1dENjMiLGJsb2NrOid7InN0YXRlbWVudHMiOltbNixbImlmIl0sW1sy
OCxbInRvZG9zIiwibGVuZ3RoIl1dXSxudWxsLHsic3RhdGVtZW50cyI6W1s2LFsiaWYiXSxbWzI4
LFsiY2FuVG9nZ2xlIl1dXSxudWxsLHsic3RhdGVtZW50cyI6W1swLCIgICAgIl0sWzExLCJpbnB1
dCIsW11dLFsxNSwidHlwZSIsImNoZWNrYm94Il0sWzE1LCJpZCIsInRvZ2dsZS1hbGwiXSxbMTYs
ImNoZWNrZWQiLFsyNixbImFsbENvbXBsZXRlZCJdXSxudWxsXSxbMTYsIm9uY2hhbmdlIixbMzMs
WyJhY3Rpb24iXSxbWzI4LFtudWxsXV0sInRvZ2dsZUFsbCJdLG51bGxdLG51bGxdLFsxM10sWzE0
XSxbMCwiXFxuIl1dLCJsb2NhbHMiOltdfSxudWxsXSxbMCwiICAiXSxbMTEsInVsIixbXV0sWzE1
LCJpZCIsInRvZG8tbGlzdCJdLFsxNSwiY2xhc3MiLCJ0b2RvLWxpc3QiXSxbMTNdLFswLCJcXG4i
XSxbNixbImVhY2giXSxbWzI4LFsidG9kb3MiXV1dLG51bGwseyJzdGF0ZW1lbnRzIjpbWzAsIiAg
ICAgICJdLFsxLFszMyxbInRvZG8taXRlbSJdLG51bGwsW1sidG9kbyIsIm9uU3RhcnRFZGl0Iiwi
b25FbmRFZGl0Il0sW1syOCxbInRvZG8iXV0sWzMzLFsiYWN0aW9uIl0sW1syOCxbbnVsbF1dLCJk
aXNhYmxlVG9nZ2xlIl0sbnVsbF0sWzMzLFsiYWN0aW9uIl0sW1syOCxbbnVsbF1dLCJlbmFibGVU
b2dnbGUiXSxudWxsXV1dXSxmYWxzZV0sWzAsIlxcbiJdXSwibG9jYWxzIjpbInRvZG8iXX0sbnVs
bF0sWzAsIiAgIl0sWzE0XSxbMCwiXFxuIl1dLCJsb2NhbHMiOltdfSxudWxsXV0sImxvY2FscyI6
W10sIm5hbWVkIjpbXSwieWllbGRzIjpbXSwiaGFzUGFydGlhbHMiOmZhbHNlfScsbWV0YTp7bW9k
dWxlTmFtZToidG9kb212Yy90ZW1wbGF0ZXMvY29tcG9uZW50cy90b2RvLWxpc3QuaGJzIn19KX0p
LGRlZmluZSgidG9kb212Yy90ZW1wbGF0ZXMvaW5kZXgiLFsiZXhwb3J0cyJdLGZ1bmN0aW9uKGUp
e2UuZGVmYXVsdD1FbWJlci5IVE1MQmFycy50ZW1wbGF0ZSh7aWQ6ImhCYWROSXBvIixibG9jazon
eyJzdGF0ZW1lbnRzIjpbWzYsWyJpZiJdLFtbMjgsWyJtb2RlbCIsImxlbmd0aCJdXV0sbnVsbCx7
InN0YXRlbWVudHMiOltbMCwiICAiXSxbMSxbMzMsWyJ0b2RvLWxpc3QiXSxudWxsLFtbInRvZG9z
Il0sW1syOCxbIm1vZGVsIl1dXV1dLGZhbHNlXSxbMCwiXFxuIl1dLCJsb2NhbHMiOltdfSxudWxs
XV0sImxvY2FscyI6W10sIm5hbWVkIjpbXSwieWllbGRzIjpbXSwiaGFzUGFydGlhbHMiOmZhbHNl
fScsbWV0YTp7bW9kdWxlTmFtZToidG9kb212Yy90ZW1wbGF0ZXMvaW5kZXguaGJzIn19KX0pLGRl
ZmluZSgidG9kb212Yy9jb25maWcvZW52aXJvbm1lbnQiLFsiZW1iZXIiXSxmdW5jdGlvbihlKXt0
cnl7dmFyIHQ9InRvZG9tdmMvY29uZmlnL2Vudmlyb25tZW50IixvPWRvY3VtZW50LnF1ZXJ5U2Vs
ZWN0b3IoJ21ldGFbbmFtZT0iJyt0KyciXScpLmdldEF0dHJpYnV0ZSgiY29udGVudCIpLG49SlNP
Ti5wYXJzZSh1bmVzY2FwZShvKSksbD17ZGVmYXVsdDpufQotcmV0dXJuIE9iamVjdC5kZWZpbmVQ
cm9wZXJ0eShsLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxsfWNhdGNoKGUpe3Rocm93IG5ldyBF
cnJvcignQ291bGQgbm90IHJlYWQgY29uZmlnIGZyb20gbWV0YSB0YWcgd2l0aCBuYW1lICInK3Qr
JyIuJyl9fSkscnVubmluZ1Rlc3RzfHxyZXF1aXJlKCJ0b2RvbXZjL2FwcCIpLmRlZmF1bHQuY3Jl
YXRlKHtuYW1lOiJ0b2RvbXZjIix2ZXJzaW9uOiIwLjAuMCsxNjRkMjdlMiJ9KQpkaWZmIC0tZ2l0
IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRl
Y3R1cmUtZXhhbXBsZXMvZW1iZXJqcy9zb3VyY2UvZGlzdC9pbmRleC5odG1sIGIvUGVyZm9ybWFu
Y2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBs
ZXMvZW1iZXJqcy9zb3VyY2UvZGlzdC9pbmRleC5odG1sCmluZGV4IGU4ZDU5YzFmZmIzMWFhN2M3
OGQ5YWRhN2E3ZDBkMWQ0NjI0ZWY1ZmUuLmMzNTI3YWQ0ZWY2NmIxOGU1YzhiOWQ2MTUzZmU5OGI0
YmUyYWY4ZmEgMTAwNjQ0Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3Vy
Y2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvc291cmNlL2Rpc3QvaW5k
ZXguaHRtbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2Rv
bXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL3NvdXJjZS9kaXN0L2luZGV4Lmh0bWwK
QEAgLTcsMTUgKzcsMTQgQEAKICAgICA8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0i
Ij4KICAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRo
LCBpbml0aWFsLXNjYWxlPTEiPgogICAgIAotPG1ldGEgbmFtZT0idG9kb212Yy9jb25maWcvZW52
aXJvbm1lbnQiIGNvbnRlbnQ9IiU3QiUyMm1vZHVsZVByZWZpeCUyMiUzQSUyMnRvZG9tdmMlMjIl
MkMlMjJlbnZpcm9ubWVudCUyMiUzQSUyMnByb2R1Y3Rpb24lMjIlMkMlMjJiYXNlVVJMJTIyJTNB
bnVsbCUyQyUyMmxvY2F0aW9uVHlwZSUyMiUzQSUyMmhhc2glMjIlMkMlMjJFbWJlckVOViUyMiUz
QSU3QiUyMkZFQVRVUkVTJTIyJTNBJTdCJTdEJTJDJTIyRVhURU5EX1BST1RPVFlQRVMlMjIlM0El
N0IlMjJEYXRlJTIyJTNBZmFsc2UlN0QlN0QlMkMlMjJBUFAlMjIlM0ElN0IlMjJuYW1lJTIyJTNB
JTIydG9kb212YyUyMiUyQyUyMnZlcnNpb24lMjIlM0ElMjIwLjAuMCsxNjRkMjdlMiUyMiU3RCUy
QyUyMmV4cG9ydEFwcGxpY2F0aW9uR2xvYmFsJTIyJTNBZmFsc2UlN0QiIC8+Cis8bWV0YSBuYW1l
PSJ0b2RvbXZjL2NvbmZpZy9lbnZpcm9ubWVudCIgY29udGVudD0iJTdCJTIybW9kdWxlUHJlZml4
JTIyJTNBJTIydG9kb212YyUyMiUyQyUyMmVudmlyb25tZW50JTIyJTNBJTIycHJvZHVjdGlvbiUy
MiUyQyUyMmJhc2VVUkwlMjIlM0FudWxsJTJDJTIybG9jYXRpb25UeXBlJTIyJTNBJTIyaGFzaCUy
MiUyQyUyMkVtYmVyRU5WJTIyJTNBJTdCJTIyRkVBVFVSRVMlMjIlM0ElN0IlN0QlMkMlMjJFWFRF
TkRfUFJPVE9UWVBFUyUyMiUzQSU3QiUyMkRhdGUlMjIlM0FmYWxzZSU3RCU3RCUyQyUyMkFQUCUy
MiUzQSU3QiUyMm5hbWUlMjIlM0ElMjJ0b2RvbXZjJTIyJTJDJTIydmVyc2lvbiUyMiUzQSUyMjAu
MC4wK2EyY2ExNjUwJTIyJTdEJTJDJTIyZXhwb3J0QXBwbGljYXRpb25HbG9iYWwlMjIlM0FmYWxz
ZSU3RCIgLz4KICAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImFzc2V0cy92ZW5kb3It
N2I1Yzk4NTIwOTEwYWZhNThkNzRlMDVlYzg2Y2Q4NzMuY3NzIiBpbnRlZ3JpdHk9InNoYTI1Ni1i
c2FnR0hkdWhheTlRUExVRnBkZGNaRnE3S21yMlNjTTNWS25XaGRYOG9NPSBzaGE1MTItZU5zR04y
YUxlY1dQdm9xTlZIOG9YSzhvL0lKN3JPNXRpMHpnUzhsRjhMaXdtS1VIZEVJdUZkdXdjREwxVkxB
dDJyKzNZamdEem9TTllLNmM1N3BKenc9PSIgPgotICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIg
aHJlZj0iYXNzZXRzL3RvZG9tdmMtZDQxZDhjZDk4ZjAwYjIwNGU5ODAwOTk4ZWNmODQyN2UuY3Nz
IiBpbnRlZ3JpdHk9InNoYTI1Ni00N0RFUXBqOEhCU2ErL1RJbVcrNUpDZXVRZVJrbTVOTXBKV1pH
M2hTdUZVPSBzaGE1MTItejRQaE5YN3Z1TDN4VkNoUTFtMkFCOVlnNUFVTFZ4WGNnL1NwSWROczZj
NUgwTkU4WFlYeXNQK0RHTktIZnV3dlk3a3h2VWRCZW9HbE9ESjYrU2ZhUGc9PSIgPgogICAgIAog
ICA8L2hlYWQ+CiAgIDxib2R5PgogICAgIAogICAgIDxzY3JpcHQgc3JjPSJhc3NldHMvdmVuZG9y
LTgyMDkxOTU2N2ViN2JkNGQ5ZmFjMzU4YTkwYTVhYWM0LmpzIiBpbnRlZ3JpdHk9InNoYTI1Ni1C
WkhCYmYxVTIxK2tnUFltb0lLN2dMa3FIdTg4djVjd0VWRmZ3VVBYb2pzPSBzaGE1MTItMllXckFi
UjQ1cDhmazMveTRRaGJvay9LVWZMRS92NnlNU1VxSVduY1RtV3FmSmJ5SmowK0FpVGtKTDAzazBv
UFVNWmJGWXlReDlTdUw2WG9YcDRzZ2c9PSIgPjwvc2NyaXB0PgotICAgIDxzY3JpcHQgc3JjPSJh
c3NldHMvdG9kb212Yy03NjAxZmZjYTYxNTBlZDYzM2YwZjMzM2ZlNzZiZmFmMi5qcyIgaW50ZWdy
aXR5PSJzaGEyNTYtSjlTQlBTVlBpVGxEekJyQWV2RXFSdk56M0UrK3U3ak5Fclo3OUVEZ1IzZz0g
c2hhNTEyLThRdG5vV202YVhkS1dPSXNudXFRd2FVNTc1VGtPbWFnVUpTNjZiSXFxWnp3TThhVWR1
TTZESGxyYlRzb3BaOU01b2s5TkxxaEtzYWZFWEhXUVAwY1hnPT0iID48L3NjcmlwdD4KKyAgICA8
c2NyaXB0IHNyYz0iYXNzZXRzL3RvZG9tdmMtMWEwOGI3MTg5NWIxZTMyNDAwMTYyM2VlMGFmMmI5
MjcuanMiIGludGVncml0eT0ic2hhMjU2LWNWR1hBbzh5blVBTk5OMUN3QUNPTSttWEVVYWdqYTky
bE9aL2dFblNSU009IHNoYTUxMi1uZUNmWG9INHQzYTd2L2FDR3ZNMmNyejlOOTRMd09KMDBkUys4
WGdpWXBtbFJyNUY5STN6bkZiSkJ0MTA2alZnL1RhR2RtelcyRUdKcmNvc21nSkI4dz09IiA+PC9z
Y3JpcHQ+CiAgICAgCiAgIDwvYm9keT4KIDwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>318976</attachid>
            <date>2017-08-24 01:51:26 -0700</date>
            <delta_ts>2017-08-25 15:00:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-175926-20170824105122.patch</filename>
            <type>text/plain</type>
            <size>4147118</size>
            <attacher name="Mathias Bynens">mathias</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIxMTMwCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCmluZGV4IGUxMmUyMmM3OGU4
MWMwYWY4NDgzNWU1MmM2ZjgyMmYwNzU0ZjM5ZTQuLmUzYWE0NThiNTkzMWFjYTY1NmE2NzE3ZWU0
NjM5MzllZDkyZTZmYjAgMTAwNjQ0Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCisr
KyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTctMDgt
MjQgIE1hdGhpYXMgQnluZW5zICA8bWF0aGlhc0BxaXdpLmJlPgorCisgICAgICAgIFNwZWVkb21l
dGVyOiBSZXN0cnVjdHVyZSBFbWJlciBleGFtcGxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU5MjYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIHJlbW92ZXMgYW4gdW51c2VkIHN0eWxl
c2hlZXQgZnJvbSB0aGUgb3V0cHV0LCBhbmQgZ2V0cyByaWQgb2YgdGhlIHVubmVlZGVkIGludGVy
bWVkaWF0ZSBgc291cmNlYCBmb2xkZXIuCisKKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJj
ZXMvdGVzdHMuanM6IFVwZGF0ZSBwYXRoIHRvIEVtYmVyIGJlbmNobWFyay4KKyAgICAgICAgKiBT
cGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJq
cy9zb3VyY2UvKjogTW92ZWQgdG8gYC4uL2AuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3Vy
Y2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvYXBwL2luZGV4Lmh0bWw6
IFJlbW92ZWQgc3R5bGVzaGVldCByZWZlcmVuY2UuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVz
b3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvYXBwL3N0eWxlcy8u
Z2l0a2VlcDogQWRkZWQuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMv
YXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvZGlzdC8qOiBSZWdlbmVyYXRlZCBwZXIgYnVp
bGQgaW5zdHJ1Y3Rpb25zLgorCiAyMDE3LTA4LTIzICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJr
aXQub3JnPgogCiAgICAgICAgIFNwZWVkb21ldGVyOiBBZGQgbWlzc2luZyBzdHlsZXNoZWV0IHRv
IEFuZ3VsYXIgZXhhbXBsZQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRl
ci9yZXNvdXJjZXMvdGVzdHMuanMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291
cmNlcy90ZXN0cy5qcwppbmRleCBkZDlhNmZhZGZlMGIzZTMzYmM5NDgzZDFjNDI5MjE4ZmEyYTZi
ZjlmLi4wMTc1NmI0M2VmZDdhYTlkNzY3MjZmOWRkMTk0ZTllMDIwZjk0NDAxIDEwMDY0NAotLS0g
YS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90ZXN0cy5qcworKysgYi9Q
ZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90ZXN0cy5qcwpAQCAtMTY2LDcg
KzE2Niw3IEBAIFN1aXRlcy5wdXNoKHsKIAogU3VpdGVzLnB1c2goewogICAgIG5hbWU6ICdFbWJl
ckpTLVRvZG9NVkMnLAotICAgIHVybDogJ3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2Vt
YmVyanMvaW5kZXguaHRtbCcsCisgICAgdXJsOiAndG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBs
ZXMvZW1iZXJqcy9kaXN0L2luZGV4Lmh0bWwnLAogICAgIHByZXBhcmU6IGZ1bmN0aW9uIChydW5u
ZXIsIGNvbnRlbnRXaW5kb3csIGNvbnRlbnREb2N1bWVudCkgewogICAgICAgICByZXR1cm4gcnVu
bmVyLndhaXRGb3JFbGVtZW50KCcjbmV3LXRvZG8nKS50aGVuKGZ1bmN0aW9uIChlbGVtZW50KSB7
CiAgICAgICAgICAgICBlbGVtZW50LmZvY3VzKCk7CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRl
c3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9l
bWJlcmpzLy5ib3dlcnJjIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMv
dG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy8uYm93ZXJyYwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li45NTllMTY5NmU3YjJjOTcwMDA1YzM1ZWM4YTBmOTRhZWE1ZGYzNmFjCi0tLSAvZGV2L251bGwK
KysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNo
aXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy8uYm93ZXJyYwpAQCAtMCwwICsxLDQgQEAKK3sKKyAg
ImRpcmVjdG9yeSI6ICJib3dlcl9jb21wb25lbnRzIiwKKyAgImFuYWx5dGljcyI6IGZhbHNlCit9
CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2Rv
bXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzLy5lZGl0b3Jjb25maWcgYi9QZXJmb3Jt
YW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFt
cGxlcy9lbWJlcmpzLy5lZGl0b3Jjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDdjNTQzODQwM2NhODc1ZjE3
MGRiMmFhMDdkMWJmYTM2ODk0MDZlMwotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVz
dHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2Vt
YmVyanMvLmVkaXRvcmNvbmZpZwpAQCAtMCwwICsxLDM0IEBACisjIEVkaXRvckNvbmZpZyBoZWxw
cyBkZXZlbG9wZXJzIGRlZmluZSBhbmQgbWFpbnRhaW4gY29uc2lzdGVudAorIyBjb2Rpbmcgc3R5
bGVzIGJldHdlZW4gZGlmZmVyZW50IGVkaXRvcnMgYW5kIElERXMKKyMgZWRpdG9yY29uZmlnLm9y
ZworCityb290ID0gdHJ1ZQorCisKK1sqXQorZW5kX29mX2xpbmUgPSBsZgorY2hhcnNldCA9IHV0
Zi04Cit0cmltX3RyYWlsaW5nX3doaXRlc3BhY2UgPSB0cnVlCitpbnNlcnRfZmluYWxfbmV3bGlu
ZSA9IHRydWUKK2luZGVudF9zdHlsZSA9IHNwYWNlCitpbmRlbnRfc2l6ZSA9IDIKKworWyouanNd
CitpbmRlbnRfc3R5bGUgPSBzcGFjZQoraW5kZW50X3NpemUgPSAyCisKK1sqLmhic10KK2luc2Vy
dF9maW5hbF9uZXdsaW5lID0gZmFsc2UKK2luZGVudF9zdHlsZSA9IHNwYWNlCitpbmRlbnRfc2l6
ZSA9IDIKKworWyouY3NzXQoraW5kZW50X3N0eWxlID0gc3BhY2UKK2luZGVudF9zaXplID0gMgor
CitbKi5odG1sXQoraW5kZW50X3N0eWxlID0gc3BhY2UKK2luZGVudF9zaXplID0gMgorCitbKi57
ZGlmZixtZH1dCit0cmltX3RyYWlsaW5nX3doaXRlc3BhY2UgPSBmYWxzZQpkaWZmIC0tZ2l0IGEv
UGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1
cmUtZXhhbXBsZXMvZW1iZXJqcy8uZW1iZXItY2xpIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9t
ZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy8uZW1i
ZXItY2xpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmVlNjRjZmVkMmE4OTA1ZGMyMzUwNmFmMTA2MGVjODBjZjg4NzU4
MmQKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291
cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzLy5lbWJlci1jbGkKQEAg
LTAsMCArMSw5IEBACit7CisgIC8qKgorICAgIEVtYmVyIENMSSBzZW5kcyBhbmFseXRpY3MgaW5m
b3JtYXRpb24gYnkgZGVmYXVsdC4gVGhlIGRhdGEgaXMgY29tcGxldGVseQorICAgIGFub255bW91
cywgYnV0IHRoZXJlIGFyZSB0aW1lcyB3aGVuIHlvdSBtaWdodCB3YW50IHRvIGRpc2FibGUgdGhp
cyBiZWhhdmlvci4KKworICAgIFNldHRpbmcgYGRpc2FibGVBbmFseXRpY3NgIHRvIHRydWUgd2ls
bCBwcmV2ZW50IGFueSBkYXRhIGZyb20gYmVpbmcgc2VudC4KKyAgKi8KKyAgImRpc2FibGVBbmFs
eXRpY3MiOiBmYWxzZQorfQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRl
ci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy8uZ2l0aWdu
b3JlIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNo
aXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc2Y2ExZTU1
YTVlMGQ3NGRhMzhiNzllNTA2MGZhODM5NzllNWQ5NmUKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJm
b3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1l
eGFtcGxlcy9lbWJlcmpzLy5naXRpZ25vcmUKQEAgLTAsMCArMSwxOCBAQAorIyBTZWUgaHR0cDov
L2hlbHAuZ2l0aHViLmNvbS9pZ25vcmUtZmlsZXMvIGZvciBtb3JlIGFib3V0IGlnbm9yaW5nIGZp
bGVzLgorCisjIGNvbXBpbGVkIG91dHB1dAorIyAvZGlzdAorL2Rpc3QvYXNzZXRzLy5naXRrZWVw
CisvdG1wCisKKyMgZGVwZW5kZW5jaWVzCisvbm9kZV9tb2R1bGVzCisvYm93ZXJfY29tcG9uZW50
cworCisjIG1pc2MKKy8uc2Fzcy1jYWNoZQorL2Nvbm5lY3QubG9jaworL2NvdmVyYWdlLyoKKy9s
aWJwZWVyY29ubmVjdGlvbi5sb2cKK25wbS1kZWJ1Zy5sb2cKK3Rlc3RlbS5sb2cKZGlmZiAtLWdp
dCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0
ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvLmpzaGludHJjIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVl
ZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy8u
anNoaW50cmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMDgwOTZlZmZhYWIzNzQ5OTRhZGNiMzU3OGU5ODg2NzVhNGJl
ZmE4MgotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVz
b3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvLmpzaGludHJjCkBA
IC0wLDAgKzEsMzIgQEAKK3sKKyAgInByZWRlZiI6IFsKKyAgICAiZG9jdW1lbnQiLAorICAgICJ3
aW5kb3ciLAorICAgICItUHJvbWlzZSIKKyAgXSwKKyAgImJyb3dzZXIiOiB0cnVlLAorICAiYm9z
cyI6IHRydWUsCisgICJjdXJseSI6IHRydWUsCisgICJkZWJ1ZyI6IGZhbHNlLAorICAiZGV2ZWwi
OiB0cnVlLAorICAiZXFlcWVxIjogdHJ1ZSwKKyAgImV2aWwiOiB0cnVlLAorICAiZm9yaW4iOiBm
YWxzZSwKKyAgImltbWVkIjogZmFsc2UsCisgICJsYXhicmVhayI6IGZhbHNlLAorICAibmV3Y2Fw
IjogdHJ1ZSwKKyAgIm5vYXJnIjogdHJ1ZSwKKyAgIm5vZW1wdHkiOiBmYWxzZSwKKyAgIm5vbmV3
IjogZmFsc2UsCisgICJub21lbiI6IGZhbHNlLAorICAib25ldmFyIjogZmFsc2UsCisgICJwbHVz
cGx1cyI6IGZhbHNlLAorICAicmVnZXhwIjogZmFsc2UsCisgICJ1bmRlZiI6IHRydWUsCisgICJz
dWIiOiB0cnVlLAorICAic3RyaWN0IjogZmFsc2UsCisgICJ3aGl0ZSI6IGZhbHNlLAorICAiZXFu
dWxsIjogdHJ1ZSwKKyAgImVzbmV4dCI6IHRydWUsCisgICJ1bnVzZWQiOiB0cnVlCit9CmRpZmYg
LS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2Fy
Y2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL1JFQURNRS5tZCBiL1BlcmZvcm1hbmNlVGVzdHMv
U3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVy
anMvUkVBRE1FLm1kCmluZGV4IDEzMjRiMjY5NjU3NDUzZTY2NDkzNTY1NGZhZWZiYjM5OWE0ZWYw
MjQuLmI4NjM0ODg4MmE4MzAwYWY2ZjkyYWZlNDNiZTJlNDc4YzBkZDJhMmIgMTAwNjQ0Ci0tLSBh
L1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0
dXJlLWV4YW1wbGVzL2VtYmVyanMvUkVBRE1FLm1kCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3Bl
ZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMv
UkVBRE1FLm1kCkBAIC0xLDMgKzEsOCBAQAogIyBTcGVlZG9tZXRlciAyLjA6IEVtYmVyLmpzIFRv
ZG9NVkMgZXhhbXBsZQogCi1TZWUgYHNvdXJjZS9SRUFETUUubWRgLgorIyMgVGVzdCBsb2NhbGx5
CisKKzEuIGBucG0gaW5zdGFsbCAmJiBib3dlciBpbnN0YWxsYAorMi4gYG5wbSBydW4gYnVpbGRg
CiszLiBSdW4gYSBsb2NhbCBzZXJ2ZXIgZnJvbSB0aGUgYGRpc3RgIGRpcmVjdG9yeS4gKFlvdSBj
b3VsZCB1c2UgW2BucG0gaSAtZyBodHRwLXNlcnZlcmBdKGh0dHBzOi8vZ2l0aHViLmNvbS9pbmRl
eHplcm8vaHR0cC1zZXJ2ZXIpLikKKzQuIE9wZW4gdGhlIFVSTCBwb2ludGluZyB0byB0aGUgbG9j
YWwgc2VydmVyIGluIHlvdXIgd2ViIGJyb3dzZXIgb2YgY2hvaWNlLgpkaWZmIC0tZ2l0IGEvUGVy
Zm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUt
ZXhhbXBsZXMvZW1iZXJqcy9hcHAvYXBwLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRl
ci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy9hcHAvYXBw
LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmYyNjBjNGM3MDZkMGFlMzc1Y2ZmYzY5NjlkZmU0MzRiNTlkMjk5YjUK
LS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNl
cy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL2FwcC9hcHAuanMKQEAgLTAs
MCArMSwxOCBAQAoraW1wb3J0IEVtYmVyIGZyb20gJ2VtYmVyJzsKK2ltcG9ydCBSZXNvbHZlciBm
cm9tICcuL3Jlc29sdmVyJzsKK2ltcG9ydCBsb2FkSW5pdGlhbGl6ZXJzIGZyb20gJ2VtYmVyLWxv
YWQtaW5pdGlhbGl6ZXJzJzsKK2ltcG9ydCBjb25maWcgZnJvbSAnLi9jb25maWcvZW52aXJvbm1l
bnQnOworCitsZXQgQXBwOworCitFbWJlci5NT0RFTF9GQUNUT1JZX0lOSkVDVElPTlMgPSB0cnVl
OworCitBcHAgPSBFbWJlci5BcHBsaWNhdGlvbi5leHRlbmQoeworICAgIG1vZHVsZVByZWZpeDog
Y29uZmlnLm1vZHVsZVByZWZpeCwKKyAgICBwb2RNb2R1bGVQcmVmaXg6IGNvbmZpZy5wb2RNb2R1
bGVQcmVmaXgsCisgICAgUmVzb2x2ZXIKK30pOworCitsb2FkSW5pdGlhbGl6ZXJzKEFwcCwgY29u
ZmlnLm1vZHVsZVByZWZpeCk7CisKK2V4cG9ydCBkZWZhdWx0IEFwcDsKZGlmZiAtLWdpdCBhL1Bl
cmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJl
LWV4YW1wbGVzL2VtYmVyanMvYXBwL2NvbXBvbmVudHMvdG9kby1pdGVtLmpzIGIvUGVyZm9ybWFu
Y2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBs
ZXMvZW1iZXJqcy9hcHAvY29tcG9uZW50cy90b2RvLWl0ZW0uanMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGRlN2Zi
ZjExNjViMjYxNDU0MWE1NmEzOTBkMWMzMzhjNDk4ZTA5MwotLS0gL2Rldi9udWxsCisrKyBiL1Bl
cmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJl
LWV4YW1wbGVzL2VtYmVyanMvYXBwL2NvbXBvbmVudHMvdG9kby1pdGVtLmpzCkBAIC0wLDAgKzEs
NDkgQEAKK2ltcG9ydCBFbWJlciBmcm9tICdlbWJlcic7CisKK2V4cG9ydCBkZWZhdWx0IEVtYmVy
LkNvbXBvbmVudC5leHRlbmQoeworICAgIHJlcG86IEVtYmVyLmluamVjdC5zZXJ2aWNlKCksCisg
ICAgdGFnTmFtZTogJ2xpJywKKyAgICBlZGl0aW5nOiBmYWxzZSwKKyAgICBjbGFzc05hbWVCaW5k
aW5nczogWyd0b2RvLmNvbXBsZXRlZCcsICdlZGl0aW5nJ10sCisKKyAgICBhY3Rpb25zOiB7Cisg
ICAgICAgIHN0YXJ0RWRpdGluZygpIHsKKyAgICAgICAgICAgIHRoaXMuZ2V0KCdvblN0YXJ0RWRp
dCcpKCk7CisgICAgICAgICAgICB0aGlzLnNldCgnZWRpdGluZycsIHRydWUpOworICAgICAgICAg
ICAgRW1iZXIucnVuLnNjaGVkdWxlT25jZSgnYWZ0ZXJSZW5kZXInLCB0aGlzLCAnZm9jdXNJbnB1
dCcpOworICAgICAgICB9LAorCisgICAgICAgIGRvbmVFZGl0aW5nKHRvZG9UaXRsZSkgeworICAg
ICAgICAgICAgaWYgKCF0aGlzLmdldCgnZWRpdGluZycpKSB7IHJldHVybjsgfQorICAgICAgICAg
ICAgaWYgKEVtYmVyLmlzQmxhbmsodG9kb1RpdGxlKSkgeworICAgICAgICAgICAgICAgIHRoaXMu
c2VuZCgncmVtb3ZlVG9kbycpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICB0aGlzLnNldCgndG9kby50aXRsZScsIHRvZG9UaXRsZS50cmltKCkpOworICAgICAgICAgICAg
ICAgIHRoaXMuc2V0KCdlZGl0aW5nJywgZmFsc2UpOworICAgICAgICAgICAgICAgIHRoaXMuZ2V0
KCdvbkVuZEVkaXQnKSgpOworICAgICAgICAgICAgfQorICAgICAgICB9LAorCisgICAgICAgIGhh
bmRsZUtleWRvd24oZSkgeworICAgICAgICAgICAgaWYgKGUua2V5Q29kZSA9PT0gMTMpIHsKKyAg
ICAgICAgICAgICAgICBlLnRhcmdldC5ibHVyKCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGUu
a2V5Q29kZSA9PT0gMjcpIHsKKyAgICAgICAgICAgICAgICB0aGlzLnNldCgnZWRpdGluZycsIGZh
bHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKworICAgICAgICB0b2dnbGVDb21wbGV0
ZWQoZSkgeworICAgICAgICAgICAgbGV0IHRvZG8gPSB0aGlzLmdldCgndG9kbycpOworICAgICAg
ICAgICAgRW1iZXIuc2V0KHRvZG8sICdjb21wbGV0ZWQnLCBlLnRhcmdldC5jaGVja2VkKTsKKyAg
ICAgICAgICAgIHRoaXMuZ2V0KCdyZXBvJykucGVyc2lzdCgpOworICAgICAgICB9LAorCisgICAg
ICAgIHJlbW92ZVRvZG8oKSB7CisgICAgICAgICAgICB0aGlzLmdldCgncmVwbycpLmRlbGV0ZSh0
aGlzLmdldCgndG9kbycpKTsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICBmb2N1c0lucHV0KCkg
eworICAgICAgICB0aGlzLmVsZW1lbnQucXVlcnlTZWxlY3RvcignaW5wdXQuZWRpdCcpLmZvY3Vz
KCk7CisgICAgfQorfSk7CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVy
L3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL2FwcC9jb21w
b25lbnRzL3RvZG8tbGlzdC5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3Vy
Y2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvYXBwL2NvbXBvbmVudHMv
dG9kby1saXN0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ4NGUwZTNhMWZlMjk3ZmY1ZDhhZGIxNDE2MzJjYWU5
NDI2OGQyYTkKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVy
L3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL2FwcC9jb21w
b25lbnRzL3RvZG8tbGlzdC5qcwpAQCAtMCwwICsxLDI3IEBACitpbXBvcnQgRW1iZXIgZnJvbSAn
ZW1iZXInOworCitleHBvcnQgZGVmYXVsdCBFbWJlci5Db21wb25lbnQuZXh0ZW5kKHsKKyAgICBy
ZXBvOiBFbWJlci5pbmplY3Quc2VydmljZSgpLAorICAgIHRhZ05hbWU6ICdzZWN0aW9uJywKKyAg
ICBlbGVtZW50SWQ6ICdtYWluJywKKyAgICBjYW5Ub2dnbGU6IHRydWUsCisgICAgYWxsQ29tcGxl
dGVkOiBFbWJlci5jb21wdXRlZCgndG9kb3MuQGVhY2guY29tcGxldGVkJywgZnVuY3Rpb24gKCkg
eworICAgICAgICByZXR1cm4gdGhpcy5nZXQoJ3RvZG9zJykuaXNFdmVyeSgnY29tcGxldGVkJyk7
CisgICAgfSksCisKKyAgICBhY3Rpb25zOiB7CisgICAgICAgIGVuYWJsZVRvZ2dsZSgpIHsKKyAg
ICAgICAgICAgIHRoaXMuc2V0KCdjYW5Ub2dnbGUnLCB0cnVlKTsKKyAgICAgICAgfSwKKworICAg
ICAgICBkaXNhYmxlVG9nZ2xlKCkgeworICAgICAgICAgICAgdGhpcy5zZXQoJ2NhblRvZ2dsZScs
IGZhbHNlKTsKKyAgICAgICAgfSwKKworICAgICAgICB0b2dnbGVBbGwoKSB7CisgICAgICAgICAg
ICBsZXQgYWxsQ29tcGxldGVkID0gdGhpcy5nZXQoJ2FsbENvbXBsZXRlZCcpOworICAgICAgICAg
ICAgdGhpcy5nZXQoJ3RvZG9zJykuZm9yRWFjaCh0b2RvID0+IEVtYmVyLnNldCh0b2RvLCAnY29t
cGxldGVkJywgIWFsbENvbXBsZXRlZCkpOworICAgICAgICAgICAgdGhpcy5nZXQoJ3JlcG8nKS5w
ZXJzaXN0KCk7CisgICAgICAgIH0KKyAgICB9Cit9KTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNl
VGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVz
L2VtYmVyanMvYXBwL2NvbnRyb2xsZXJzL2FjdGl2ZS5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3Bl
ZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMv
YXBwL2NvbnRyb2xsZXJzL2FjdGl2ZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kZjAzZDQwNzkwMzg4OWExNDEz
NzcxYTMxZGZjMTRiYTQ4OTM1YjI1Ci0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0
cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1i
ZXJqcy9hcHAvY29udHJvbGxlcnMvYWN0aXZlLmpzCkBAIC0wLDAgKzEsNSBAQAoraW1wb3J0IEVt
YmVyIGZyb20gJ2VtYmVyJzsKKworZXhwb3J0IGRlZmF1bHQgRW1iZXIuQ29udHJvbGxlci5leHRl
bmQoeworICAgIHRvZG9zOiBFbWJlci5jb21wdXRlZC5maWx0ZXJCeSgnbW9kZWwnLCAnY29tcGxl
dGVkJywgZmFsc2UpCit9KTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0
ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvYXBwL2Nv
bnRyb2xsZXJzL2FwcGxpY2F0aW9uLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9y
ZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy9hcHAvY29udHJv
bGxlcnMvYXBwbGljYXRpb24uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzgxNGU1ZmE3M2NkOWU4MWM2MzU3ZmQ3
MTFlNWU2ODdjMDliY2FmZgotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3Bl
ZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMv
YXBwL2NvbnRyb2xsZXJzL2FwcGxpY2F0aW9uLmpzCkBAIC0wLDAgKzEsMjAgQEAKK2ltcG9ydCBF
bWJlciBmcm9tICdlbWJlcic7CisKK2V4cG9ydCBkZWZhdWx0IEVtYmVyLkNvbnRyb2xsZXIuZXh0
ZW5kKHsKKyAgICByZXBvOiBFbWJlci5pbmplY3Quc2VydmljZSgpLAorICAgIHJlbWFpbmluZzog
RW1iZXIuY29tcHV0ZWQuZmlsdGVyQnkoJ21vZGVsJywgJ2NvbXBsZXRlZCcsIGZhbHNlKSwKKyAg
ICBjb21wbGV0ZWQ6IEVtYmVyLmNvbXB1dGVkLmZpbHRlckJ5KCdtb2RlbCcsICdjb21wbGV0ZWQn
KSwKKyAgICBhY3Rpb25zOiB7CisgICAgICAgIGNyZWF0ZVRvZG8oZSkgeworICAgICAgICAgICAg
aWYgKGUua2V5Q29kZSA9PT0gMTMgJiYgIUVtYmVyLmlzQmxhbmsoZS50YXJnZXQudmFsdWUpKSB7
CisgICAgICAgICAgICAgICAgdGhpcy5nZXQoJ3JlcG8nKS5hZGQoeyB0aXRsZTogZS50YXJnZXQu
dmFsdWUudHJpbSgpLCBjb21wbGV0ZWQ6IGZhbHNlIH0pOworICAgICAgICAgICAgICAgIGUudGFy
Z2V0LnZhbHVlID0gJyc7CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisKKyAgICAgICAgY2xl
YXJDb21wbGV0ZWQoKSB7CisgICAgICAgICAgICB0aGlzLmdldCgnbW9kZWwnKS5yZW1vdmVPYmpl
Y3RzKHRoaXMuZ2V0KCdjb21wbGV0ZWQnKSk7CisgICAgICAgICAgICB0aGlzLmdldCgncmVwbycp
LnBlcnNpc3QoKTsKKyAgICAgICAgfQorICAgIH0KK30pOwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFu
Y2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBs
ZXMvZW1iZXJqcy9hcHAvY29udHJvbGxlcnMvY29tcGxldGVkLmpzIGIvUGVyZm9ybWFuY2VUZXN0
cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1i
ZXJqcy9hcHAvY29udHJvbGxlcnMvY29tcGxldGVkLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYzNGQwMGFmZWY3
ODA5YTczZDQxOTE1MWI4ZjAyZWM1ZTA1NjdmNWIKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3Jt
YW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFt
cGxlcy9lbWJlcmpzL2FwcC9jb250cm9sbGVycy9jb21wbGV0ZWQuanMKQEAgLTAsMCArMSw1IEBA
CitpbXBvcnQgRW1iZXIgZnJvbSAnZW1iZXInOworCitleHBvcnQgZGVmYXVsdCBFbWJlci5Db250
cm9sbGVyLmV4dGVuZCh7CisgICAgdG9kb3M6IEVtYmVyLmNvbXB1dGVkLmZpbHRlckJ5KCdtb2Rl
bCcsICdjb21wbGV0ZWQnLCB0cnVlKQorfSk7CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJl
cmpzL2FwcC9oZWxwZXJzL2d0LmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNv
dXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy9hcHAvaGVscGVycy9n
dC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5mMzcwNjk1YTJmOTQ1NjU5ZDlmNTg0N2RiMTM3NjRlYWY2NjExMGVi
Ci0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJj
ZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy9hcHAvaGVscGVycy9ndC5q
cwpAQCAtMCwwICsxLDcgQEAKK2ltcG9ydCBFbWJlciBmcm9tICdlbWJlcic7CisKK2V4cG9ydCBm
dW5jdGlvbiBndChbbjEsIG4yXS8qLCBoYXNoKi8pIHsKKyAgICByZXR1cm4gbjEgPiBuMjsKK30K
KworZXhwb3J0IGRlZmF1bHQgRW1iZXIuSGVscGVyLmhlbHBlcihndCk7CmRpZmYgLS1naXQgYS9Q
ZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVy
ZS1leGFtcGxlcy9lbWJlcmpzL2FwcC9oZWxwZXJzL3BsdXJhbGl6ZS5qcyBiL1BlcmZvcm1hbmNl
VGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVz
L2VtYmVyanMvYXBwL2hlbHBlcnMvcGx1cmFsaXplLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIxZjFhMmFjYzhm
ODU2MTc4MGQwYjk1ZGZmNzNjYTk2MzNiNjg5YTUKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3Jt
YW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFt
cGxlcy9lbWJlcmpzL2FwcC9oZWxwZXJzL3BsdXJhbGl6ZS5qcwpAQCAtMCwwICsxLDggQEAKK2lt
cG9ydCBFbWJlciBmcm9tICdlbWJlcic7CitpbXBvcnQgeyBwbHVyYWxpemUgfSBmcm9tICdlbWJl
ci1pbmZsZWN0b3InOworCitleHBvcnQgZnVuY3Rpb24gcGx1cmFsaXplSGVscGVyKFtzaW5ndWxh
ciwgY291bnRdLyosIGhhc2gqLykgeworICAgIHJldHVybiBjb3VudCA9PT0gMSA/IHNpbmd1bGFy
IDogcGx1cmFsaXplKHNpbmd1bGFyKTsKK30KKworZXhwb3J0IGRlZmF1bHQgRW1iZXIuSGVscGVy
LmhlbHBlcihwbHVyYWxpemVIZWxwZXIpOwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9T
cGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJq
cy9hcHAvaW5kZXguaHRtbCBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2Vz
L3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvYXBwL2luZGV4Lmh0bWwKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMmU0YWYwYmI0NzYwMDQ3NWRhODk4NWZmOWUxOTUzMDFkOTBjZGU2YwotLS0gL2Rl
di9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9t
dmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvYXBwL2luZGV4Lmh0bWwKQEAgLTAsMCAr
MSwxOSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKyAgPGhlYWQ+CisgICAgPG1ldGEgY2hh
cnNldD0idXRmLTgiPgorICAgIDxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29u
dGVudD0iSUU9ZWRnZSI+CisgICAgPHRpdGxlPkVtYmVyLmpzIFRvZG9NVkMgZXhhbXBsZTwvdGl0
bGU+CisgICAgPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IiI+CisgICAgPG1ldGEg
bmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2Fs
ZT0xIj4KKyAgICB7e2NvbnRlbnQtZm9yICJoZWFkIn19CisgICAgPGxpbmsgcmVsPSJzdHlsZXNo
ZWV0IiBocmVmPSJ7e3Jvb3RVUkx9fWFzc2V0cy92ZW5kb3IuY3NzIj4KKyAgICB7e2NvbnRlbnQt
Zm9yICJoZWFkLWZvb3RlciJ9fQorICA8L2hlYWQ+CisgIDxib2R5PgorICAgIHt7Y29udGVudC1m
b3IgImJvZHkifX0KKyAgICA8c2NyaXB0IHNyYz0ie3tyb290VVJMfX1hc3NldHMvdmVuZG9yLmpz
Ij48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0ie3tyb290VVJMfX1hc3NldHMvdG9kb212Yy5q
cyI+PC9zY3JpcHQ+CisgICAge3tjb250ZW50LWZvciAiYm9keS1mb290ZXIifX0KKyAgPC9ib2R5
PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNv
dXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy9hcHAvcmVzb2x2ZXIu
anMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hp
dGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL2FwcC9yZXNvbHZlci5qcwpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yZmI1
NjNkNmMwNDg4ZjQxYmVjNDU0ZmUxZmE3YzIyOTk3NWE1OGRmCi0tLSAvZGV2L251bGwKKysrIGIv
UGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1
cmUtZXhhbXBsZXMvZW1iZXJqcy9hcHAvcmVzb2x2ZXIuanMKQEAgLTAsMCArMSwzIEBACitpbXBv
cnQgUmVzb2x2ZXIgZnJvbSAnZW1iZXItcmVzb2x2ZXInOworCitleHBvcnQgZGVmYXVsdCBSZXNv
bHZlcjsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2Vz
L3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvYXBwL3JvdXRlci5qcyBiL1Bl
cmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJl
LWV4YW1wbGVzL2VtYmVyanMvYXBwL3JvdXRlci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jMGIzYmZjNDk2YWUx
YmNmNjc1OGNkOTNhZjZiZTE3NGZlY2JiNDY1Ci0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFu
Y2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBs
ZXMvZW1iZXJqcy9hcHAvcm91dGVyLmpzCkBAIC0wLDAgKzEsMTQgQEAKK2ltcG9ydCBFbWJlciBm
cm9tICdlbWJlcic7CitpbXBvcnQgY29uZmlnIGZyb20gJy4vY29uZmlnL2Vudmlyb25tZW50JzsK
KworY29uc3QgUm91dGVyID0gRW1iZXIuUm91dGVyLmV4dGVuZCh7CisgICAgbG9jYXRpb246IGNv
bmZpZy5sb2NhdGlvblR5cGUsCisgICAgcm9vdFVSTDogY29uZmlnLnJvb3RVUkwKK30pOworCitS
b3V0ZXIubWFwKGZ1bmN0aW9uICgpIHsKKyAgICB0aGlzLnJvdXRlKCdhY3RpdmUnKTsKKyAgICB0
aGlzLnJvdXRlKCdjb21wbGV0ZWQnKTsKK30pOworCitleHBvcnQgZGVmYXVsdCBSb3V0ZXI7CmRp
ZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZj
L2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL2FwcC9yb3V0ZXMvYXBwbGljYXRpb24uanMg
Yi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVj
dHVyZS1leGFtcGxlcy9lbWJlcmpzL2FwcC9yb3V0ZXMvYXBwbGljYXRpb24uanMKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMjk2YTM3NWJhMmE2NTBjYmExMTk2OTc5NTE3ODQ3ZjllZjY3ZjgxMwotLS0gL2Rldi9udWxs
CisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJj
aGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvYXBwL3JvdXRlcy9hcHBsaWNhdGlvbi5qcwpAQCAt
MCwwICsxLDggQEAKK2ltcG9ydCBFbWJlciBmcm9tICdlbWJlcic7CisKK2V4cG9ydCBkZWZhdWx0
IEVtYmVyLlJvdXRlLmV4dGVuZCh7CisgICAgcmVwbzogRW1iZXIuaW5qZWN0LnNlcnZpY2UoKSwK
KyAgICBtb2RlbCgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KCdyZXBvJykuZmluZEFsbCgp
OworICAgIH0KK30pOwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9y
ZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy9hcHAvc2Vydmlj
ZXMvbWVtb3J5LmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9k
b212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy9hcHAvc2VydmljZXMvbWVtb3J5Lmpz
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjc0YzVjZGYxOWZkOWZkYjI2YTkwZjA5YTMwMWQ0M2RiZDM1MjdkNjEKLS0t
IC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90
b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL2FwcC9zZXJ2aWNlcy9tZW1vcnku
anMKQEAgLTAsMCArMSw3OCBAQAorKGZ1bmN0aW9uKHJvb3QpIHsKKyAgdmFyIGxvY2FsU3RvcmFn
ZU1lbW9yeSA9IHt9OworICB2YXIgY2FjaGUgPSB7fTsKKworICAvKioKKyAgICogbnVtYmVyIG9m
IHN0b3JlZCBpdGVtcy4KKyAgICovCisgIGxvY2FsU3RvcmFnZU1lbW9yeS5sZW5ndGggPSAwOwor
CisgIC8qKgorICAgKiByZXR1cm5zIGl0ZW0gZm9yIHBhc3NlZCBrZXksIG9yIG51bGwKKyAgICoK
KyAgICogQHBhcmEge1N0cmluZ30ga2V5CisgICAqICAgICAgIG5hbWUgb2YgaXRlbSB0byBiZSBy
ZXR1cm5lZAorICAgKiBAcmV0dXJucyB7U3RyaW5nfG51bGx9CisgICAqLworICBsb2NhbFN0b3Jh
Z2VNZW1vcnkuZ2V0SXRlbSA9IGZ1bmN0aW9uKGtleSkgeworICAgIHJldHVybiBjYWNoZVtrZXld
IHx8IG51bGw7CisgIH07CisKKyAgLyoqCisgICAqIHNldHMgaXRlbSBmb3Iga2V5IHRvIHBhc3Nl
ZCB2YWx1ZSwgYXMgU3RyaW5nCisgICAqCisgICAqIEBwYXJhIHtTdHJpbmd9IGtleQorICAgKiAg
ICAgICBuYW1lIG9mIGl0ZW0gdG8gYmUgc2V0CisgICAqIEBwYXJhIHtTdHJpbmd9IHZhbHVlCisg
ICAqICAgICAgIHZhbHVlLCB3aWxsIGFsd2F5cyBiZSB0dXJuZWQgaW50byBhIFN0cmluZworICAg
KiBAcmV0dXJucyB7dW5kZWZpbmVkfQorICAgKi8KKyAgbG9jYWxTdG9yYWdlTWVtb3J5LnNldEl0
ZW0gPSBmdW5jdGlvbihrZXksIHZhbHVlKSB7CisgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3Vu
ZGVmaW5lZCcpIHsKKyAgICAgIGxvY2FsU3RvcmFnZU1lbW9yeS5yZW1vdmVJdGVtKGtleSk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgIGlmICghKGNhY2hlLmhhc093blByb3BlcnR5KGtleSkpKSB7Cisg
ICAgICAgIGxvY2FsU3RvcmFnZU1lbW9yeS5sZW5ndGgrKzsKKyAgICAgIH0KKworICAgICAgY2Fj
aGVba2V5XSA9ICcnICsgdmFsdWU7CisgICAgfQorICB9OworCisgIC8qKgorICAgKiByZW1vdmVz
IGl0ZW0gZm9yIHBhc3NlZCBrZXkKKyAgICoKKyAgICogQHBhcmEge1N0cmluZ30ga2V5CisgICAq
ICAgICAgIG5hbWUgb2YgaXRlbSB0byBiZSByZW1vdmVkCisgICAqIEByZXR1cm5zIHt1bmRlZmlu
ZWR9CisgICAqLworICBsb2NhbFN0b3JhZ2VNZW1vcnkucmVtb3ZlSXRlbSA9IGZ1bmN0aW9uKGtl
eSkgeworICAgIGlmIChjYWNoZS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7CisgICAgICBkZWxldGUg
Y2FjaGVba2V5XTsKKyAgICAgIGxvY2FsU3RvcmFnZU1lbW9yeS5sZW5ndGgtLTsKKyAgICB9Cisg
IH07CisKKyAgLyoqCisgICAqIHJldHVybnMgbmFtZSBvZiBrZXkgYXQgcGFzc2VkIGluZGV4Cisg
ICAqCisgICAqIEBwYXJhIHtOdW1iZXJ9IGluZGV4CisgICAqICAgICAgIFBvc2l0aW9uIGZvciBr
ZXkgdG8gYmUgcmV0dXJuZWQgKHN0YXJ0cyBhdCAwKQorICAgKiBAcmV0dXJucyB7U3RyaW5nfG51
bGx9CisgICAqLworICBsb2NhbFN0b3JhZ2VNZW1vcnkua2V5ID0gZnVuY3Rpb24oaW5kZXgpIHsK
KyAgICByZXR1cm4gT2JqZWN0LmtleXMoY2FjaGUpW2luZGV4XSB8fCBudWxsOworICB9OworCisg
IC8qKgorICAgKiByZW1vdmVzIGFsbCBzdG9yZWQgaXRlbXMgYW5kIHNldHMgbGVuZ3RoIHRvIDAK
KyAgICoKKyAgICogQHJldHVybnMge3VuZGVmaW5lZH0KKyAgICovCisgIGxvY2FsU3RvcmFnZU1l
bW9yeS5jbGVhciA9IGZ1bmN0aW9uKCkgeworICAgIGNhY2hlID0ge307CisgICAgbG9jYWxTdG9y
YWdlTWVtb3J5Lmxlbmd0aCA9IDA7CisgIH07CisKKyAgICByb290LmxvY2FsU3RvcmFnZU1lbW9y
eSA9IGxvY2FsU3RvcmFnZU1lbW9yeTsKK30pKHdpbmRvdyk7CmRpZmYgLS1naXQgYS9QZXJmb3Jt
YW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFt
cGxlcy9lbWJlcmpzL2FwcC9zZXJ2aWNlcy9yZXBvLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVl
ZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy9h
cHAvc2VydmljZXMvcmVwby5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jZmZhMzg1OGZkNzdiYmJhNWM0MzVlYTVj
OWM4ODk4YWQxNzczYjhhCi0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVl
ZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy9h
cHAvc2VydmljZXMvcmVwby5qcwpAQCAtMCwwICsxLDI3IEBACitpbXBvcnQgRW1iZXIgZnJvbSAn
ZW1iZXInOworaW1wb3J0IGxvY2FsU3RvcmFnZU1lbW9yeSBmcm9tICcuL21lbW9yeSc7CisKK2V4
cG9ydCBkZWZhdWx0IEVtYmVyLlNlcnZpY2UuZXh0ZW5kKHsKKyAgICBsYXN0SWQ6IDAsCisgICAg
ZGF0YTogbnVsbCwKKyAgICBmaW5kQWxsKCkgeworICAgICAgICByZXR1cm4gdGhpcy5nZXQoJ2Rh
dGEnKSB8fAorICAgICAgICAgICAgdGhpcy5zZXQoJ2RhdGEnLCBKU09OLnBhcnNlKHdpbmRvdy5s
b2NhbFN0b3JhZ2VNZW1vcnkuZ2V0SXRlbSgndG9kb3MnKSB8fCAnW10nKSk7CisgICAgfSwKKwor
ICAgIGFkZChhdHRycykgeworICAgICAgICBsZXQgdG9kbyA9IE9iamVjdC5hc3NpZ24oeyBpZDog
dGhpcy5pbmNyZW1lbnRQcm9wZXJ0eSgnbGFzdElkJykgfSwgYXR0cnMpOworICAgICAgICB0aGlz
LmdldCgnZGF0YScpLnB1c2hPYmplY3QodG9kbyk7CisgICAgICAgIHRoaXMucGVyc2lzdCgpOwor
ICAgICAgICByZXR1cm4gdG9kbzsKKyAgICB9LAorCisgICAgZGVsZXRlKHRvZG8pIHsKKyAgICAg
ICAgdGhpcy5nZXQoJ2RhdGEnKS5yZW1vdmVPYmplY3QodG9kbyk7CisgICAgICAgIHRoaXMucGVy
c2lzdCgpOworICAgIH0sCisKKyAgICBwZXJzaXN0KCkgeworICAgICAgICB3aW5kb3cubG9jYWxT
dG9yYWdlTWVtb3J5LnNldEl0ZW0oJ3RvZG9zJywgSlNPTi5zdHJpbmdpZnkodGhpcy5nZXQoJ2Rh
dGEnKSkpOworICAgIH0KK30pOwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9t
ZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy9hcHAv
c3R5bGVzLy5naXRrZWVwIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMv
dG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy9hcHAvc3R5bGVzLy5naXRrZWVw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmVkZjU4MTkyMTI5MDE4MTQzOGI0NzQ4YzdlNjI3MmI1MzI4NDIzZjEKLS0t
IC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90
b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL2FwcC9zdHlsZXMvLmdpdGtlZXAK
QEAgLTAsMCArMSwyIEBACisjIFRoaXMgZmlsZSBlbnN1cmVzIHRoZSBgYXBwL3N0eWxlc2AgZGly
ZWN0b3J5IGlzIGluY2x1ZGVkIGluIHRoZSByZXBvc2l0b3J5LgorIyBXaXRob3V0IHRoYXQgZGly
ZWN0b3J5IHByZXNlbnQsIHRoZSBFbWJlciBUb2RvTVZDIGV4YW1wbGUgZmFpbHMgdG8gYnVpbGQu
CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2Rv
bXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL2FwcC90ZW1wbGF0ZXMvYWN0aXZlLmhi
cyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0
ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvYXBwL3RlbXBsYXRlcy9hY3RpdmUuaGJzCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmRlMjQ0ZjQ4N2QyMzgzNDQ4YTQyYTU5ZGYwYmY0MjU2NGUyMWY1NzMKLS0tIC9kZXYvbnVs
bAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2Fy
Y2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL2FwcC90ZW1wbGF0ZXMvYWN0aXZlLmhicwpAQCAt
MCwwICsxIEBACit7e3RvZG8tbGlzdCB0b2Rvcz10b2Rvc319ClwgTm8gbmV3bGluZSBhdCBlbmQg
b2YgZmlsZQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJj
ZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy9hcHAvdGVtcGxhdGVzL2Fw
cGxpY2F0aW9uLmhicyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3Rv
ZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvYXBwL3RlbXBsYXRlcy9hcHBsaWNh
dGlvbi5oYnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNTE5YjYyMGNkNjMwMThmNjczZWFhOWE3YjkwOGQ1ODk4YTky
MTU4ZgotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVz
b3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvYXBwL3RlbXBsYXRl
cy9hcHBsaWNhdGlvbi5oYnMKQEAgLTAsMCArMSwyOSBAQAorPHNlY3Rpb24gaWQ9InRvZG9hcHAi
PgorICA8aGVhZGVyIGlkPSJoZWFkZXIiPgorICAgIDxoMT50b2RvczwvaDE+CisgICAgPGlucHV0
IHR5cGU9InRleHQiIGlkPSJuZXctdG9kbyIgb25rZXlkb3duPXt7YWN0aW9uICdjcmVhdGVUb2Rv
J319IHBsYWNlaG9sZGVyPSJXaGF0IG5lZWRzIHRvIGJlIGRvbmU/IiBhdXRvZm9jdXM+CisgIDwv
aGVhZGVyPgorICAgIHt7b3V0bGV0fX0KKyAgICB7eyNpZiAoZ3QgbW9kZWwubGVuZ3RoIDApfX0K
KyAgICAgIDxmb290ZXIgaWQ9ImZvb3RlciI+CisgICAgICAgIDxzcGFuIGlkPSJ0b2RvLWNvdW50
Ij48c3Ryb25nPnt7cmVtYWluaW5nLmxlbmd0aH19PC9zdHJvbmc+IHt7cGx1cmFsaXplICdpdGVt
JyByZW1haW5pbmcubGVuZ3RofX0gbGVmdDwvc3Bhbj4KKyAgICAgICAgPHVsIGlkPSJmaWx0ZXJz
Ij4KKyAgICAgICAgICA8bGk+e3sjbGluay10byAiaW5kZXgiIGFjdGl2ZUNsYXNzPSJzZWxlY3Rl
ZCJ9fUFsbHt7L2xpbmstdG99fTwvbGk+CisgICAgICAgICAgPGxpPnt7I2xpbmstdG8gImFjdGl2
ZSIgYWN0aXZlQ2xhc3M9InNlbGVjdGVkIn19QWN0aXZle3svbGluay10b319PC9saT4KKyAgICAg
ICAgICA8bGk+e3sjbGluay10byAiY29tcGxldGVkIiBhY3RpdmVDbGFzcz0ic2VsZWN0ZWQifX1D
b21wbGV0ZWR7ey9saW5rLXRvfX08L2xpPgorICAgICAgICA8L3VsPgorICAgICAgICB7eyNpZiBj
b21wbGV0ZWQubGVuZ3RofX0KKyAgICAgICAgICA8YnV0dG9uIGlkPSJjbGVhci1jb21wbGV0ZWQi
IG9uY2xpY2s9e3thY3Rpb24gJ2NsZWFyQ29tcGxldGVkJ319PkNsZWFyIGNvbXBsZXRlZDwvYnV0
dG9uPgorICAgICAgICB7ey9pZn19CisgICAgICA8L2Zvb3Rlcj4KKyAgICB7ey9pZn19Cis8L3Nl
Y3Rpb24+Cis8Zm9vdGVyIGlkPSJpbmZvIj4KKyAgPHA+RG91YmxlLWNsaWNrIHRvIGVkaXQgYSB0
b2RvPC9wPgorICA8cD4KKyAgICBDcmVhdGVkIGJ5CisgICAgPGEgaHJlZj0iaHR0cDovL2dpdGh1
Yi5jb20vY2liZXJub3giPk1pZ3VlbCBDYW1iYTwvYT4sCisgICAgPGEgaHJlZj0iaHR0cDovL2dp
dGh1Yi5jb20vYWRkeW9zbWFuaSI+QWRkeSBPc21hbmk8L2E+CisgIDwvcD4KKyAgPHA+UGFydCBv
ZiA8YSBocmVmPSJodHRwOi8vdG9kb212Yy5jb20iPlRvZG9NVkM8L2E+PC9wPgorPC9mb290ZXI+
ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0
cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1i
ZXJqcy9hcHAvdGVtcGxhdGVzL2NvbXBsZXRlZC5oYnMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVk
b21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL2Fw
cC90ZW1wbGF0ZXMvY29tcGxldGVkLmhicwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kZTI0NGY0ODdkMjM4MzQ0OGE0
MmE1OWRmMGJmNDI1NjRlMjFmNTczCi0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0
cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1i
ZXJqcy9hcHAvdGVtcGxhdGVzL2NvbXBsZXRlZC5oYnMKQEAgLTAsMCArMSBAQAore3t0b2RvLWxp
c3QgdG9kb3M9dG9kb3N9fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBh
L1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0
dXJlLWV4YW1wbGVzL2VtYmVyanMvYXBwL3RlbXBsYXRlcy9jb21wb25lbnRzL3RvZG8taXRlbS5o
YnMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hp
dGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL2FwcC90ZW1wbGF0ZXMvY29tcG9uZW50cy90b2RvLWl0
ZW0uaGJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmMwNjk3NWU4NjVlN2I5YTA0Mjc4NWU4YjM4OTc3ZjM0YWFkM2Ri
YzYKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291
cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL2FwcC90ZW1wbGF0ZXMv
Y29tcG9uZW50cy90b2RvLWl0ZW0uaGJzCkBAIC0wLDAgKzEsNiBAQAorPGRpdiBjbGFzcz0idmll
dyI+CisgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgY2xhc3M9InRvZ2dsZSIgY2hlY2tlZD17e3Rv
ZG8uY29tcGxldGVkfX0gb25jaGFuZ2U9e3thY3Rpb24gJ3RvZ2dsZUNvbXBsZXRlZCd9fT4KKyAg
PGxhYmVsIG9uZGJsY2xpY2s9e3thY3Rpb24gJ3N0YXJ0RWRpdGluZyd9fT57e3RvZG8udGl0bGV9
fTwvbGFiZWw+CisgIDxidXR0b24gb25jbGljaz17e2FjdGlvbiAncmVtb3ZlVG9kbyd9fSBjbGFz
cz0iZGVzdHJveSI+PC9idXR0b24+Cis8L2Rpdj4KKzxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0i
ZWRpdCIgdmFsdWU9e3t0b2RvLnRpdGxlfX0gb25ibHVyPXt7YWN0aW9uICdkb25lRWRpdGluZycg
dmFsdWU9J3RhcmdldC52YWx1ZSd9fSBvbmtleWRvd249e3thY3Rpb24gJ2hhbmRsZUtleWRvd24n
fX0gYXV0b2ZvY3VzPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1Bl
cmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJl
LWV4YW1wbGVzL2VtYmVyanMvYXBwL3RlbXBsYXRlcy9jb21wb25lbnRzL3RvZG8tbGlzdC5oYnMg
Yi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVj
dHVyZS1leGFtcGxlcy9lbWJlcmpzL2FwcC90ZW1wbGF0ZXMvY29tcG9uZW50cy90b2RvLWxpc3Qu
aGJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjMwOWQwN2ExZjQxN2NmMWMxODg5MzBjNWNiZmIzM2E3MDUxYzc4NjYK
LS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNl
cy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL2FwcC90ZW1wbGF0ZXMvY29t
cG9uZW50cy90b2RvLWxpc3QuaGJzCkBAIC0wLDAgKzEsMTAgQEAKK3t7I2lmIHRvZG9zLmxlbmd0
aH19CisgIHt7I2lmIGNhblRvZ2dsZX19CisgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0i
dG9nZ2xlLWFsbCIgY2hlY2tlZD17e2FsbENvbXBsZXRlZH19IG9uY2hhbmdlPXt7YWN0aW9uICd0
b2dnbGVBbGwnfX0+CisgIHt7L2lmfX0KKyAgPHVsIGlkPSJ0b2RvLWxpc3QiIGNsYXNzPSJ0b2Rv
LWxpc3QiPgorICAgIHt7I2VhY2ggdG9kb3MgYXMgfHRvZG98fX0KKyAgICAgIHt7dG9kby1pdGVt
IHRvZG89dG9kbyBvblN0YXJ0RWRpdD0oYWN0aW9uICdkaXNhYmxlVG9nZ2xlJykgb25FbmRFZGl0
PShhY3Rpb24gJ2VuYWJsZVRvZ2dsZScpfX0KKyAgICB7ey9lYWNofX0KKyAgPC91bD4KK3t7L2lm
fX0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3Rv
ZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvYXBwL3RlbXBsYXRlcy9pbmRleC5o
YnMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hp
dGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL2FwcC90ZW1wbGF0ZXMvaW5kZXguaGJzCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjdkNTU2NWMzNmFiMzdkZWE5YTFjNDE5ZGRlYTc1M2JmMTk1OGNkNmYKLS0tIC9kZXYvbnVs
bAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2Fy
Y2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL2FwcC90ZW1wbGF0ZXMvaW5kZXguaGJzCkBAIC0w
LDAgKzEsMyBAQAore3sjaWYgbW9kZWwubGVuZ3RofX0KKyAge3t0b2RvLWxpc3QgdG9kb3M9bW9k
ZWx9fQore3svaWZ9fQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9y
ZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy9hc3NldHMvdG9k
b212Yy5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMv
YXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvYXNzZXRzL3RvZG9tdmMuanMKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdkNGRmYjM2YzcxYWQ0NmUwZWQ0YjFkNGE1MmQ3ZmU3ZWI2
MmUwMDQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVy
Zm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUt
ZXhhbXBsZXMvZW1iZXJqcy9hc3NldHMvdG9kb212Yy5qcworKysgL2Rldi9udWxsCkBAIC0xLDEy
NjAgKzAsMCBAQAotInVzZSBzdHJpY3QiOwotCi0vKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovCi0K
LQotCi0vKiBqc2hpbnQgaWdub3JlOmVuZCAqLwotCi1kZWZpbmUoJ3RvZG9tdmMvYXBwJywgWydl
eHBvcnRzJywgJ2VtYmVyJywgJ3RvZG9tdmMvcmVzb2x2ZXInLCAnZW1iZXItbG9hZC1pbml0aWFs
aXplcnMnLCAndG9kb212Yy9jb25maWcvZW52aXJvbm1lbnQnXSwgZnVuY3Rpb24gKGV4cG9ydHMs
IF9lbWJlciwgX3RvZG9tdmNSZXNvbHZlciwgX2VtYmVyTG9hZEluaXRpYWxpemVycywgX3RvZG9t
dmNDb25maWdFbnZpcm9ubWVudCkgewotCi0gICAgdmFyIEFwcCA9IHVuZGVmaW5lZDsKLQotICAg
IF9lbWJlclsnZGVmYXVsdCddLk1PREVMX0ZBQ1RPUllfSU5KRUNUSU9OUyA9IHRydWU7Ci0KLSAg
ICBBcHAgPSBfZW1iZXJbJ2RlZmF1bHQnXS5BcHBsaWNhdGlvbi5leHRlbmQoewotICAgICAgICBt
b2R1bGVQcmVmaXg6IF90b2RvbXZjQ29uZmlnRW52aXJvbm1lbnRbJ2RlZmF1bHQnXS5tb2R1bGVQ
cmVmaXgsCi0gICAgICAgIHBvZE1vZHVsZVByZWZpeDogX3RvZG9tdmNDb25maWdFbnZpcm9ubWVu
dFsnZGVmYXVsdCddLnBvZE1vZHVsZVByZWZpeCwKLSAgICAgICAgUmVzb2x2ZXI6IF90b2RvbXZj
UmVzb2x2ZXJbJ2RlZmF1bHQnXQotICAgIH0pOwotCi0gICAgKDAsIF9lbWJlckxvYWRJbml0aWFs
aXplcnNbJ2RlZmF1bHQnXSkoQXBwLCBfdG9kb212Y0NvbmZpZ0Vudmlyb25tZW50WydkZWZhdWx0
J10ubW9kdWxlUHJlZml4KTsKLQotICAgIGV4cG9ydHNbJ2RlZmF1bHQnXSA9IEFwcDsKLX0pOwot
ZGVmaW5lKCd0b2RvbXZjL2NvbXBvbmVudHMvYXBwLXZlcnNpb24nLCBbJ2V4cG9ydHMnLCAnZW1i
ZXItY2xpLWFwcC12ZXJzaW9uL2NvbXBvbmVudHMvYXBwLXZlcnNpb24nLCAndG9kb212Yy9jb25m
aWcvZW52aXJvbm1lbnQnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlckNsaUFwcFZlcnNpb25D
b21wb25lbnRzQXBwVmVyc2lvbiwgX3RvZG9tdmNDb25maWdFbnZpcm9ubWVudCkgewotCi0gIHZh
ciBuYW1lID0gX3RvZG9tdmNDb25maWdFbnZpcm9ubWVudFsnZGVmYXVsdCddLkFQUC5uYW1lOwot
ICB2YXIgdmVyc2lvbiA9IF90b2RvbXZjQ29uZmlnRW52aXJvbm1lbnRbJ2RlZmF1bHQnXS5BUFAu
dmVyc2lvbjsKLQotICBleHBvcnRzWydkZWZhdWx0J10gPSBfZW1iZXJDbGlBcHBWZXJzaW9uQ29t
cG9uZW50c0FwcFZlcnNpb25bJ2RlZmF1bHQnXS5leHRlbmQoewotICAgIHZlcnNpb246IHZlcnNp
b24sCi0gICAgbmFtZTogbmFtZQotICB9KTsKLX0pOwotZGVmaW5lKCd0b2RvbXZjL2NvbXBvbmVu
dHMvdG9kby1pdGVtJywgWydleHBvcnRzJywgJ2VtYmVyJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBf
ZW1iZXIpIHsKLSAgICBleHBvcnRzWydkZWZhdWx0J10gPSBfZW1iZXJbJ2RlZmF1bHQnXS5Db21w
b25lbnQuZXh0ZW5kKHsKLSAgICAgICAgcmVwbzogX2VtYmVyWydkZWZhdWx0J10uaW5qZWN0LnNl
cnZpY2UoKSwKLSAgICAgICAgdGFnTmFtZTogJ2xpJywKLSAgICAgICAgZWRpdGluZzogZmFsc2Us
Ci0gICAgICAgIGNsYXNzTmFtZUJpbmRpbmdzOiBbJ3RvZG8uY29tcGxldGVkJywgJ2VkaXRpbmcn
XSwKLQotICAgICAgICBhY3Rpb25zOiB7Ci0gICAgICAgICAgICBzdGFydEVkaXRpbmc6IGZ1bmN0
aW9uIHN0YXJ0RWRpdGluZygpIHsKLSAgICAgICAgICAgICAgICB0aGlzLmdldCgnb25TdGFydEVk
aXQnKSgpOwotICAgICAgICAgICAgICAgIHRoaXMuc2V0KCdlZGl0aW5nJywgdHJ1ZSk7Ci0gICAg
ICAgICAgICAgICAgX2VtYmVyWydkZWZhdWx0J10ucnVuLnNjaGVkdWxlT25jZSgnYWZ0ZXJSZW5k
ZXInLCB0aGlzLCAnZm9jdXNJbnB1dCcpOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAg
ZG9uZUVkaXRpbmc6IGZ1bmN0aW9uIGRvbmVFZGl0aW5nKHRvZG9UaXRsZSkgewotICAgICAgICAg
ICAgICAgIGlmICghdGhpcy5nZXQoJ2VkaXRpbmcnKSkgewotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChfZW1iZXJbJ2Rl
ZmF1bHQnXS5pc0JsYW5rKHRvZG9UaXRsZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5z
ZW5kKCdyZW1vdmVUb2RvJyk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICAgICAgdGhpcy5zZXQoJ3RvZG8udGl0bGUnLCB0b2RvVGl0bGUudHJpbSgpKTsKLSAgICAg
ICAgICAgICAgICAgICAgdGhpcy5zZXQoJ2VkaXRpbmcnLCBmYWxzZSk7Ci0gICAgICAgICAgICAg
ICAgICAgIHRoaXMuZ2V0KCdvbkVuZEVkaXQnKSgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0sCi0KLSAgICAgICAgICAgIGhhbmRsZUtleWRvd246IGZ1bmN0aW9uIGhhbmRsZUtl
eWRvd24oZSkgewotICAgICAgICAgICAgICAgIGlmIChlLmtleUNvZGUgPT09IDEzKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGUudGFyZ2V0LmJsdXIoKTsKLSAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKGUua2V5Q29kZSA9PT0gMjcpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXQoJ2Vk
aXRpbmcnLCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSwKLQotICAg
ICAgICAgICAgdG9nZ2xlQ29tcGxldGVkOiBmdW5jdGlvbiB0b2dnbGVDb21wbGV0ZWQoZSkgewot
ICAgICAgICAgICAgICAgIHZhciB0b2RvID0gdGhpcy5nZXQoJ3RvZG8nKTsKLSAgICAgICAgICAg
ICAgICBfZW1iZXJbJ2RlZmF1bHQnXS5zZXQodG9kbywgJ2NvbXBsZXRlZCcsIGUudGFyZ2V0LmNo
ZWNrZWQpOwotICAgICAgICAgICAgICAgIHRoaXMuZ2V0KCdyZXBvJykucGVyc2lzdCgpOwotICAg
ICAgICAgICAgfSwKLQotICAgICAgICAgICAgcmVtb3ZlVG9kbzogZnVuY3Rpb24gcmVtb3ZlVG9k
bygpIHsKLSAgICAgICAgICAgICAgICB0aGlzLmdldCgncmVwbycpWydkZWxldGUnXSh0aGlzLmdl
dCgndG9kbycpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSwKLQotICAgICAgICBmb2N1c0lu
cHV0OiBmdW5jdGlvbiBmb2N1c0lucHV0KCkgewotICAgICAgICAgICAgdGhpcy5lbGVtZW50LnF1
ZXJ5U2VsZWN0b3IoJ2lucHV0LmVkaXQnKS5mb2N1cygpOwotICAgICAgICB9Ci0gICAgfSk7Ci19
KTsKLWRlZmluZSgndG9kb212Yy9jb21wb25lbnRzL3RvZG8tbGlzdCcsIFsnZXhwb3J0cycsICdl
bWJlciddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyKSB7Ci0gICAgZXhwb3J0c1snZGVmYXVs
dCddID0gX2VtYmVyWydkZWZhdWx0J10uQ29tcG9uZW50LmV4dGVuZCh7Ci0gICAgICAgIHJlcG86
IF9lbWJlclsnZGVmYXVsdCddLmluamVjdC5zZXJ2aWNlKCksCi0gICAgICAgIHRhZ05hbWU6ICdz
ZWN0aW9uJywKLSAgICAgICAgZWxlbWVudElkOiAnbWFpbicsCi0gICAgICAgIGNhblRvZ2dsZTog
dHJ1ZSwKLSAgICAgICAgYWxsQ29tcGxldGVkOiBfZW1iZXJbJ2RlZmF1bHQnXS5jb21wdXRlZCgn
dG9kb3MuQGVhY2guY29tcGxldGVkJywgZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgcmV0dXJu
IHRoaXMuZ2V0KCd0b2RvcycpLmlzRXZlcnkoJ2NvbXBsZXRlZCcpOwotICAgICAgICB9KSwKLQot
ICAgICAgICBhY3Rpb25zOiB7Ci0gICAgICAgICAgICBlbmFibGVUb2dnbGU6IGZ1bmN0aW9uIGVu
YWJsZVRvZ2dsZSgpIHsKLSAgICAgICAgICAgICAgICB0aGlzLnNldCgnY2FuVG9nZ2xlJywgdHJ1
ZSk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBkaXNhYmxlVG9nZ2xlOiBmdW5jdGlv
biBkaXNhYmxlVG9nZ2xlKCkgewotICAgICAgICAgICAgICAgIHRoaXMuc2V0KCdjYW5Ub2dnbGUn
LCBmYWxzZSk7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICB0b2dnbGVBbGw6IGZ1bmN0
aW9uIHRvZ2dsZUFsbCgpIHsKLSAgICAgICAgICAgICAgICB2YXIgYWxsQ29tcGxldGVkID0gdGhp
cy5nZXQoJ2FsbENvbXBsZXRlZCcpOwotICAgICAgICAgICAgICAgIHRoaXMuZ2V0KCd0b2Rvcycp
LmZvckVhY2goZnVuY3Rpb24gKHRvZG8pIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9l
bWJlclsnZGVmYXVsdCddLnNldCh0b2RvLCAnY29tcGxldGVkJywgIWFsbENvbXBsZXRlZCk7Ci0g
ICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgdGhpcy5nZXQoJ3JlcG8nKS5wZXJz
aXN0KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9KTsKLX0pOwotZGVmaW5lKCd0
b2RvbXZjL2NvbnRyb2xsZXJzL2FjdGl2ZScsIFsnZXhwb3J0cycsICdlbWJlciddLCBmdW5jdGlv
biAoZXhwb3J0cywgX2VtYmVyKSB7Ci0gICAgZXhwb3J0c1snZGVmYXVsdCddID0gX2VtYmVyWydk
ZWZhdWx0J10uQ29udHJvbGxlci5leHRlbmQoewotICAgICAgICB0b2RvczogX2VtYmVyWydkZWZh
dWx0J10uY29tcHV0ZWQuZmlsdGVyQnkoJ21vZGVsJywgJ2NvbXBsZXRlZCcsIGZhbHNlKQotICAg
IH0pOwotfSk7Ci1kZWZpbmUoJ3RvZG9tdmMvY29udHJvbGxlcnMvYXBwbGljYXRpb24nLCBbJ2V4
cG9ydHMnLCAnZW1iZXInXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlcikgewotICAgIGV4cG9y
dHNbJ2RlZmF1bHQnXSA9IF9lbWJlclsnZGVmYXVsdCddLkNvbnRyb2xsZXIuZXh0ZW5kKHsKLSAg
ICAgICAgcmVwbzogX2VtYmVyWydkZWZhdWx0J10uaW5qZWN0LnNlcnZpY2UoKSwKLSAgICAgICAg
cmVtYWluaW5nOiBfZW1iZXJbJ2RlZmF1bHQnXS5jb21wdXRlZC5maWx0ZXJCeSgnbW9kZWwnLCAn
Y29tcGxldGVkJywgZmFsc2UpLAotICAgICAgICBjb21wbGV0ZWQ6IF9lbWJlclsnZGVmYXVsdCdd
LmNvbXB1dGVkLmZpbHRlckJ5KCdtb2RlbCcsICdjb21wbGV0ZWQnKSwKLSAgICAgICAgYWN0aW9u
czogewotICAgICAgICAgICAgY3JlYXRlVG9kbzogZnVuY3Rpb24gY3JlYXRlVG9kbyhlKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKGUua2V5Q29kZSA9PT0gMTMgJiYgIV9lbWJlclsnZGVmYXVsdCdd
LmlzQmxhbmsoZS50YXJnZXQudmFsdWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0
KCdyZXBvJykuYWRkKHsgdGl0bGU6IGUudGFyZ2V0LnZhbHVlLnRyaW0oKSwgY29tcGxldGVkOiBm
YWxzZSB9KTsKLSAgICAgICAgICAgICAgICAgICAgZS50YXJnZXQudmFsdWUgPSAnJzsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBjbGVhckNvbXBsZXRl
ZDogZnVuY3Rpb24gY2xlYXJDb21wbGV0ZWQoKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5nZXQo
J21vZGVsJykucmVtb3ZlT2JqZWN0cyh0aGlzLmdldCgnY29tcGxldGVkJykpOwotICAgICAgICAg
ICAgICAgIHRoaXMuZ2V0KCdyZXBvJykucGVyc2lzdCgpOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgfSk7Ci19KTsKLWRlZmluZSgndG9kb212Yy9jb250cm9sbGVycy9jb21wbGV0ZWQn
LCBbJ2V4cG9ydHMnLCAnZW1iZXInXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlcikgewotICAg
IGV4cG9ydHNbJ2RlZmF1bHQnXSA9IF9lbWJlclsnZGVmYXVsdCddLkNvbnRyb2xsZXIuZXh0ZW5k
KHsKLSAgICAgICAgdG9kb3M6IF9lbWJlclsnZGVmYXVsdCddLmNvbXB1dGVkLmZpbHRlckJ5KCdt
b2RlbCcsICdjb21wbGV0ZWQnLCB0cnVlKQotICAgIH0pOwotfSk7Ci1kZWZpbmUoJ3RvZG9tdmMv
aGVscGVycy9ndCcsIFsnZXhwb3J0cycsICdlbWJlciddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2Vt
YmVyKSB7Ci0gICAgdmFyIF9zbGljZWRUb0FycmF5ID0gKGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24g
c2xpY2VJdGVyYXRvcihhcnIsIGkpIHsgdmFyIF9hcnIgPSBbXTsgdmFyIF9uID0gdHJ1ZTsgdmFy
IF9kID0gZmFsc2U7IHZhciBfZSA9IHVuZGVmaW5lZDsgdHJ5IHsgZm9yICh2YXIgX2kgPSBhcnJb
U3ltYm9sLml0ZXJhdG9yXSgpLCBfczsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9u
ID0gdHJ1ZSkgeyBfYXJyLnB1c2goX3MudmFsdWUpOyBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0g
aSkgYnJlYWs7IH0gfSBjYXRjaCAoZXJyKSB7IF9kID0gdHJ1ZTsgX2UgPSBlcnI7IH0gZmluYWxs
eSB7IHRyeSB7IGlmICghX24gJiYgX2lbJ3JldHVybiddKSBfaVsncmV0dXJuJ10oKTsgfSBmaW5h
bGx5IHsgaWYgKF9kKSB0aHJvdyBfZTsgfSB9IHJldHVybiBfYXJyOyB9IHJldHVybiBmdW5jdGlv
biAoYXJyLCBpKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHsgcmV0dXJuIGFycjsgfSBlbHNl
IGlmIChTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGFycikpIHsgcmV0dXJuIHNsaWNlSXRlcmF0
b3IoYXJyLCBpKTsgfSBlbHNlIHsgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBhdHRlbXB0
IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZScpOyB9IH07IH0pKCk7Ci0KLSAg
ICBleHBvcnRzLmd0ID0gZ3Q7Ci0KLSAgICBmdW5jdGlvbiBndChfcmVmIC8qLCBoYXNoKi8pIHsK
LSAgICAgICAgdmFyIF9yZWYyID0gX3NsaWNlZFRvQXJyYXkoX3JlZiwgMik7Ci0KLSAgICAgICAg
dmFyIG4xID0gX3JlZjJbMF07Ci0gICAgICAgIHZhciBuMiA9IF9yZWYyWzFdOwotCi0gICAgICAg
IHJldHVybiBuMSA+IG4yOwotICAgIH0KLQotICAgIGV4cG9ydHNbJ2RlZmF1bHQnXSA9IF9lbWJl
clsnZGVmYXVsdCddLkhlbHBlci5oZWxwZXIoZ3QpOwotfSk7Ci1kZWZpbmUoJ3RvZG9tdmMvaGVs
cGVycy9wbHVyYWxpemUnLCBbJ2V4cG9ydHMnLCAnZW1iZXInLCAnZW1iZXItaW5mbGVjdG9yJ10s
IGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXIsIF9lbWJlckluZmxlY3RvcikgewotICAgIHZhciBf
c2xpY2VkVG9BcnJheSA9IChmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIHNsaWNlSXRlcmF0b3IoYXJy
LCBpKSB7IHZhciBfYXJyID0gW107IHZhciBfbiA9IHRydWU7IHZhciBfZCA9IGZhbHNlOyB2YXIg
X2UgPSB1bmRlZmluZWQ7IHRyeSB7IGZvciAodmFyIF9pID0gYXJyW1N5bWJvbC5pdGVyYXRvcl0o
KSwgX3M7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHsgX2Fyci5w
dXNoKF9zLnZhbHVlKTsgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrOyB9IH0gY2F0
Y2ggKGVycikgeyBfZCA9IHRydWU7IF9lID0gZXJyOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIV9u
ICYmIF9pWydyZXR1cm4nXSkgX2lbJ3JldHVybiddKCk7IH0gZmluYWxseSB7IGlmIChfZCkgdGhy
b3cgX2U7IH0gfSByZXR1cm4gX2FycjsgfSByZXR1cm4gZnVuY3Rpb24gKGFyciwgaSkgeyBpZiAo
QXJyYXkuaXNBcnJheShhcnIpKSB7IHJldHVybiBhcnI7IH0gZWxzZSBpZiAoU3ltYm9sLml0ZXJh
dG9yIGluIE9iamVjdChhcnIpKSB7IHJldHVybiBzbGljZUl0ZXJhdG9yKGFyciwgaSk7IH0gZWxz
ZSB7IHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBu
b24taXRlcmFibGUgaW5zdGFuY2UnKTsgfSB9OyB9KSgpOwotCi0gICAgZXhwb3J0cy5wbHVyYWxp
emVIZWxwZXIgPSBwbHVyYWxpemVIZWxwZXI7Ci0KLSAgICBmdW5jdGlvbiBwbHVyYWxpemVIZWxw
ZXIoX3JlZiAvKiwgaGFzaCovKSB7Ci0gICAgICAgIHZhciBfcmVmMiA9IF9zbGljZWRUb0FycmF5
KF9yZWYsIDIpOwotCi0gICAgICAgIHZhciBzaW5ndWxhciA9IF9yZWYyWzBdOwotICAgICAgICB2
YXIgY291bnQgPSBfcmVmMlsxXTsKLQotICAgICAgICByZXR1cm4gY291bnQgPT09IDEgPyBzaW5n
dWxhciA6ICgwLCBfZW1iZXJJbmZsZWN0b3IucGx1cmFsaXplKShzaW5ndWxhcik7Ci0gICAgfQot
Ci0gICAgZXhwb3J0c1snZGVmYXVsdCddID0gX2VtYmVyWydkZWZhdWx0J10uSGVscGVyLmhlbHBl
cihwbHVyYWxpemVIZWxwZXIpOwotfSk7Ci1kZWZpbmUoJ3RvZG9tdmMvaGVscGVycy9zaW5ndWxh
cml6ZScsIFsnZXhwb3J0cycsICdlbWJlci1pbmZsZWN0b3IvbGliL2hlbHBlcnMvc2luZ3VsYXJp
emUnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlckluZmxlY3RvckxpYkhlbHBlcnNTaW5ndWxh
cml6ZSkgewotICBleHBvcnRzWydkZWZhdWx0J10gPSBfZW1iZXJJbmZsZWN0b3JMaWJIZWxwZXJz
U2luZ3VsYXJpemVbJ2RlZmF1bHQnXTsKLX0pOwotZGVmaW5lKCd0b2RvbXZjL2luaXRpYWxpemVy
cy9hcHAtdmVyc2lvbicsIFsnZXhwb3J0cycsICdlbWJlci1jbGktYXBwLXZlcnNpb24vaW5pdGlh
bGl6ZXItZmFjdG9yeScsICd0b2RvbXZjL2NvbmZpZy9lbnZpcm9ubWVudCddLCBmdW5jdGlvbiAo
ZXhwb3J0cywgX2VtYmVyQ2xpQXBwVmVyc2lvbkluaXRpYWxpemVyRmFjdG9yeSwgX3RvZG9tdmND
b25maWdFbnZpcm9ubWVudCkgewotICBleHBvcnRzWydkZWZhdWx0J10gPSB7Ci0gICAgbmFtZTog
J0FwcCBWZXJzaW9uJywKLSAgICBpbml0aWFsaXplOiAoMCwgX2VtYmVyQ2xpQXBwVmVyc2lvbklu
aXRpYWxpemVyRmFjdG9yeVsnZGVmYXVsdCddKShfdG9kb212Y0NvbmZpZ0Vudmlyb25tZW50Wydk
ZWZhdWx0J10uQVBQLm5hbWUsIF90b2RvbXZjQ29uZmlnRW52aXJvbm1lbnRbJ2RlZmF1bHQnXS5B
UFAudmVyc2lvbikKLSAgfTsKLX0pOwotZGVmaW5lKCd0b2RvbXZjL2luaXRpYWxpemVycy9jb250
YWluZXItZGVidWctYWRhcHRlcicsIFsnZXhwb3J0cycsICdlbWJlci1yZXNvbHZlci9jb250YWlu
ZXItZGVidWctYWRhcHRlciddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyUmVzb2x2ZXJDb250
YWluZXJEZWJ1Z0FkYXB0ZXIpIHsKLSAgZXhwb3J0c1snZGVmYXVsdCddID0gewotICAgIG5hbWU6
ICdjb250YWluZXItZGVidWctYWRhcHRlcicsCi0KLSAgICBpbml0aWFsaXplOiBmdW5jdGlvbiBp
bml0aWFsaXplKCkgewotICAgICAgdmFyIGFwcCA9IGFyZ3VtZW50c1sxXSB8fCBhcmd1bWVudHNb
MF07Ci0KLSAgICAgIGFwcC5yZWdpc3RlcignY29udGFpbmVyLWRlYnVnLWFkYXB0ZXI6bWFpbics
IF9lbWJlclJlc29sdmVyQ29udGFpbmVyRGVidWdBZGFwdGVyWydkZWZhdWx0J10pOwotICAgICAg
YXBwLmluamVjdCgnY29udGFpbmVyLWRlYnVnLWFkYXB0ZXI6bWFpbicsICduYW1lc3BhY2UnLCAn
YXBwbGljYXRpb246bWFpbicpOwotICAgIH0KLSAgfTsKLX0pOwotZGVmaW5lKCd0b2RvbXZjL2lu
aXRpYWxpemVycy9leHBvcnQtYXBwbGljYXRpb24tZ2xvYmFsJywgWydleHBvcnRzJywgJ2VtYmVy
JywgJ3RvZG9tdmMvY29uZmlnL2Vudmlyb25tZW50J10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1i
ZXIsIF90b2RvbXZjQ29uZmlnRW52aXJvbm1lbnQpIHsKLSAgZXhwb3J0cy5pbml0aWFsaXplID0g
aW5pdGlhbGl6ZTsKLQotICBmdW5jdGlvbiBpbml0aWFsaXplKCkgewotICAgIHZhciBhcHBsaWNh
dGlvbiA9IGFyZ3VtZW50c1sxXSB8fCBhcmd1bWVudHNbMF07Ci0gICAgaWYgKF90b2RvbXZjQ29u
ZmlnRW52aXJvbm1lbnRbJ2RlZmF1bHQnXS5leHBvcnRBcHBsaWNhdGlvbkdsb2JhbCAhPT0gZmFs
c2UpIHsKLSAgICAgIHZhciB0aGVHbG9iYWw7Ci0gICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0g
J3VuZGVmaW5lZCcpIHsKLSAgICAgICAgdGhlR2xvYmFsID0gd2luZG93OwotICAgICAgfSBlbHNl
IGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykgewotICAgICAgICB0aGVHbG9iYWwg
PSBnbG9iYWw7Ci0gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJykg
ewotICAgICAgICB0aGVHbG9iYWwgPSBzZWxmOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgLy8g
bm8gcmVhc29uYWJsZSBnbG9iYWwsIGp1c3QgYmFpbAotICAgICAgICByZXR1cm47Ci0gICAgICB9
Ci0KLSAgICAgIHZhciB2YWx1ZSA9IF90b2RvbXZjQ29uZmlnRW52aXJvbm1lbnRbJ2RlZmF1bHQn
XS5leHBvcnRBcHBsaWNhdGlvbkdsb2JhbDsKLSAgICAgIHZhciBnbG9iYWxOYW1lOwotCi0gICAg
ICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykgewotICAgICAgICBnbG9iYWxOYW1lID0g
dmFsdWU7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBnbG9iYWxOYW1lID0gX2VtYmVyWydkZWZh
dWx0J10uU3RyaW5nLmNsYXNzaWZ5KF90b2RvbXZjQ29uZmlnRW52aXJvbm1lbnRbJ2RlZmF1bHQn
XS5tb2R1bGVQcmVmaXgpOwotICAgICAgfQotCi0gICAgICBpZiAoIXRoZUdsb2JhbFtnbG9iYWxO
YW1lXSkgewotICAgICAgICB0aGVHbG9iYWxbZ2xvYmFsTmFtZV0gPSBhcHBsaWNhdGlvbjsKLQot
ICAgICAgICBhcHBsaWNhdGlvbi5yZW9wZW4oewotICAgICAgICAgIHdpbGxEZXN0cm95OiBmdW5j
dGlvbiB3aWxsRGVzdHJveSgpIHsKLSAgICAgICAgICAgIHRoaXMuX3N1cGVyLmFwcGx5KHRoaXMs
IGFyZ3VtZW50cyk7Ci0gICAgICAgICAgICBkZWxldGUgdGhlR2xvYmFsW2dsb2JhbE5hbWVdOwot
ICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgZXhwb3J0
c1snZGVmYXVsdCddID0gewotICAgIG5hbWU6ICdleHBvcnQtYXBwbGljYXRpb24tZ2xvYmFsJywK
LQotICAgIGluaXRpYWxpemU6IGluaXRpYWxpemUKLSAgfTsKLX0pOwotZGVmaW5lKCd0b2RvbXZj
L2luc3RhbmNlLWluaXRpYWxpemVycy9nbG9iYWwnLCBbJ2V4cG9ydHMnXSwgZnVuY3Rpb24gKGV4
cG9ydHMpIHsKLSAgZXhwb3J0cy5pbml0aWFsaXplID0gaW5pdGlhbGl6ZTsKLSAgLy8gYXBwL2lu
c3RhbmNlLWluaXRpYWxpemVycy9nbG9iYWwuanMKLQotICBmdW5jdGlvbiBpbml0aWFsaXplKGFw
cGxpY2F0aW9uKSB7Ci0gICAgd2luZG93LkFwcCA9IGFwcGxpY2F0aW9uOyAvLyBvciB3aW5kb3cu
V2hhdGV2ZXIKLSAgfQotCi0gIGV4cG9ydHNbJ2RlZmF1bHQnXSA9IHsKLSAgICBuYW1lOiAnZ2xv
YmFsJywKLSAgICBpbml0aWFsaXplOiBpbml0aWFsaXplCi0gIH07Ci19KTsKLWRlZmluZSgndG9k
b212Yy9yZXNvbHZlcicsIFsnZXhwb3J0cycsICdlbWJlci1yZXNvbHZlciddLCBmdW5jdGlvbiAo
ZXhwb3J0cywgX2VtYmVyUmVzb2x2ZXIpIHsKLSAgZXhwb3J0c1snZGVmYXVsdCddID0gX2VtYmVy
UmVzb2x2ZXJbJ2RlZmF1bHQnXTsKLX0pOwotZGVmaW5lKCd0b2RvbXZjL3JvdXRlcicsIFsnZXhw
b3J0cycsICdlbWJlcicsICd0b2RvbXZjL2NvbmZpZy9lbnZpcm9ubWVudCddLCBmdW5jdGlvbiAo
ZXhwb3J0cywgX2VtYmVyLCBfdG9kb212Y0NvbmZpZ0Vudmlyb25tZW50KSB7Ci0KLSAgICB2YXIg
Um91dGVyID0gX2VtYmVyWydkZWZhdWx0J10uUm91dGVyLmV4dGVuZCh7Ci0gICAgICAgIGxvY2F0
aW9uOiBfdG9kb212Y0NvbmZpZ0Vudmlyb25tZW50WydkZWZhdWx0J10ubG9jYXRpb25UeXBlCi0g
ICAgfSk7Ci0KLSAgICBSb3V0ZXIubWFwKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgdGhpcy5yb3V0
ZSgnYWN0aXZlJyk7Ci0gICAgICAgIHRoaXMucm91dGUoJ2NvbXBsZXRlZCcpOwotICAgIH0pOwot
Ci0gICAgZXhwb3J0c1snZGVmYXVsdCddID0gUm91dGVyOwotfSk7Ci1kZWZpbmUoJ3RvZG9tdmMv
cm91dGVzL2FwcGxpY2F0aW9uJywgWydleHBvcnRzJywgJ2VtYmVyJ10sIGZ1bmN0aW9uIChleHBv
cnRzLCBfZW1iZXIpIHsKLSAgICBleHBvcnRzWydkZWZhdWx0J10gPSBfZW1iZXJbJ2RlZmF1bHQn
XS5Sb3V0ZS5leHRlbmQoewotICAgICAgICByZXBvOiBfZW1iZXJbJ2RlZmF1bHQnXS5pbmplY3Qu
c2VydmljZSgpLAotICAgICAgICBtb2RlbDogZnVuY3Rpb24gbW9kZWwoKSB7Ci0gICAgICAgICAg
ICByZXR1cm4gdGhpcy5nZXQoJ3JlcG8nKS5maW5kQWxsKCk7Ci0gICAgICAgIH0KLSAgICB9KTsK
LX0pOwotZGVmaW5lKCd0b2RvbXZjL3NlcnZpY2VzL2FqYXgnLCBbJ2V4cG9ydHMnLCAnZW1iZXIt
YWpheC9zZXJ2aWNlcy9hamF4J10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJBamF4U2Vydmlj
ZXNBamF4KSB7Ci0gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnZGVmYXVsdCcsIHsK
LSAgICBlbnVtZXJhYmxlOiB0cnVlLAotICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewotICAgICAg
cmV0dXJuIF9lbWJlckFqYXhTZXJ2aWNlc0FqYXhbJ2RlZmF1bHQnXTsKLSAgICB9Ci0gIH0pOwot
fSk7Ci1kZWZpbmUoJ3RvZG9tdmMvc2VydmljZXMvbWVtb3J5JywgWydleHBvcnRzJ10sIGZ1bmN0
aW9uIChleHBvcnRzKSB7Ci0gIChmdW5jdGlvbiAocm9vdCkgewotICAgIHZhciBsb2NhbFN0b3Jh
Z2VNZW1vcnkgPSB7fTsKLSAgICB2YXIgY2FjaGUgPSB7fTsKLQotICAgIC8qKgotICAgICAqIG51
bWJlciBvZiBzdG9yZWQgaXRlbXMuCi0gICAgICovCi0gICAgbG9jYWxTdG9yYWdlTWVtb3J5Lmxl
bmd0aCA9IDA7Ci0KLSAgICAvKioKLSAgICAgKiByZXR1cm5zIGl0ZW0gZm9yIHBhc3NlZCBrZXks
IG9yIG51bGwKLSAgICAgKgotICAgICAqIEBwYXJhIHtTdHJpbmd9IGtleQotICAgICAqICAgICAg
IG5hbWUgb2YgaXRlbSB0byBiZSByZXR1cm5lZAotICAgICAqIEByZXR1cm5zIHtTdHJpbmd8bnVs
bH0KLSAgICAgKi8KLSAgICBsb2NhbFN0b3JhZ2VNZW1vcnkuZ2V0SXRlbSA9IGZ1bmN0aW9uIChr
ZXkpIHsKLSAgICAgIHJldHVybiBjYWNoZVtrZXldIHx8IG51bGw7Ci0gICAgfTsKLQotICAgIC8q
KgotICAgICAqIHNldHMgaXRlbSBmb3Iga2V5IHRvIHBhc3NlZCB2YWx1ZSwgYXMgU3RyaW5nCi0g
ICAgICoKLSAgICAgKiBAcGFyYSB7U3RyaW5nfSBrZXkKLSAgICAgKiAgICAgICBuYW1lIG9mIGl0
ZW0gdG8gYmUgc2V0Ci0gICAgICogQHBhcmEge1N0cmluZ30gdmFsdWUKLSAgICAgKiAgICAgICB2
YWx1ZSwgd2lsbCBhbHdheXMgYmUgdHVybmVkIGludG8gYSBTdHJpbmcKLSAgICAgKiBAcmV0dXJu
cyB7dW5kZWZpbmVkfQotICAgICAqLwotICAgIGxvY2FsU3RvcmFnZU1lbW9yeS5zZXRJdGVtID0g
ZnVuY3Rpb24gKGtleSwgdmFsdWUpIHsKLSAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICd1bmRl
ZmluZWQnKSB7Ci0gICAgICAgIGxvY2FsU3RvcmFnZU1lbW9yeS5yZW1vdmVJdGVtKGtleSk7Ci0g
ICAgICB9IGVsc2UgewotICAgICAgICBpZiAoIWNhY2hlLmhhc093blByb3BlcnR5KGtleSkpIHsK
LSAgICAgICAgICBsb2NhbFN0b3JhZ2VNZW1vcnkubGVuZ3RoKys7Ci0gICAgICAgIH0KLQotICAg
ICAgICBjYWNoZVtrZXldID0gJycgKyB2YWx1ZTsKLSAgICAgIH0KLSAgICB9OwotCi0gICAgLyoq
Ci0gICAgICogcmVtb3ZlcyBpdGVtIGZvciBwYXNzZWQga2V5Ci0gICAgICoKLSAgICAgKiBAcGFy
YSB7U3RyaW5nfSBrZXkKLSAgICAgKiAgICAgICBuYW1lIG9mIGl0ZW0gdG8gYmUgcmVtb3ZlZAot
ICAgICAqIEByZXR1cm5zIHt1bmRlZmluZWR9Ci0gICAgICovCi0gICAgbG9jYWxTdG9yYWdlTWVt
b3J5LnJlbW92ZUl0ZW0gPSBmdW5jdGlvbiAoa2V5KSB7Ci0gICAgICBpZiAoY2FjaGUuaGFzT3du
UHJvcGVydHkoa2V5KSkgewotICAgICAgICBkZWxldGUgY2FjaGVba2V5XTsKLSAgICAgICAgbG9j
YWxTdG9yYWdlTWVtb3J5Lmxlbmd0aC0tOwotICAgICAgfQotICAgIH07Ci0KLSAgICAvKioKLSAg
ICAgKiByZXR1cm5zIG5hbWUgb2Yga2V5IGF0IHBhc3NlZCBpbmRleAotICAgICAqCi0gICAgICog
QHBhcmEge051bWJlcn0gaW5kZXgKLSAgICAgKiAgICAgICBQb3NpdGlvbiBmb3Iga2V5IHRvIGJl
IHJldHVybmVkIChzdGFydHMgYXQgMCkKLSAgICAgKiBAcmV0dXJucyB7U3RyaW5nfG51bGx9Ci0g
ICAgICovCi0gICAgbG9jYWxTdG9yYWdlTWVtb3J5LmtleSA9IGZ1bmN0aW9uIChpbmRleCkgewot
ICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGNhY2hlKVtpbmRleF0gfHwgbnVsbDsKLSAgICB9Owot
Ci0gICAgLyoqCi0gICAgICogcmVtb3ZlcyBhbGwgc3RvcmVkIGl0ZW1zIGFuZCBzZXRzIGxlbmd0
aCB0byAwCi0gICAgICoKLSAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQotICAgICAqLwotICAg
IGxvY2FsU3RvcmFnZU1lbW9yeS5jbGVhciA9IGZ1bmN0aW9uICgpIHsKLSAgICAgIGNhY2hlID0g
e307Ci0gICAgICBsb2NhbFN0b3JhZ2VNZW1vcnkubGVuZ3RoID0gMDsKLSAgICB9OwotCi0gICAg
cm9vdC5sb2NhbFN0b3JhZ2VNZW1vcnkgPSBsb2NhbFN0b3JhZ2VNZW1vcnk7Ci0gIH0pKHdpbmRv
dyk7Ci19KTsKLWRlZmluZSgndG9kb212Yy9zZXJ2aWNlcy9yZXBvJywgWydleHBvcnRzJywgJ2Vt
YmVyJywgJ3RvZG9tdmMvc2VydmljZXMvbWVtb3J5J10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1i
ZXIsIF90b2RvbXZjU2VydmljZXNNZW1vcnkpIHsKLSAgICBleHBvcnRzWydkZWZhdWx0J10gPSBf
ZW1iZXJbJ2RlZmF1bHQnXS5TZXJ2aWNlLmV4dGVuZCh7Ci0gICAgICAgIGxhc3RJZDogMCwKLSAg
ICAgICAgZGF0YTogbnVsbCwKLSAgICAgICAgZmluZEFsbDogZnVuY3Rpb24gZmluZEFsbCgpIHsK
LSAgICAgICAgICAgIHJldHVybiB0aGlzLmdldCgnZGF0YScpIHx8IHRoaXMuc2V0KCdkYXRhJywg
SlNPTi5wYXJzZSh3aW5kb3cubG9jYWxTdG9yYWdlTWVtb3J5LmdldEl0ZW0oJ3RvZG9zJykgfHwg
J1tdJykpOwotICAgICAgICB9LAotCi0gICAgICAgIGFkZDogZnVuY3Rpb24gYWRkKGF0dHJzKSB7
Ci0gICAgICAgICAgICB2YXIgdG9kbyA9IE9iamVjdC5hc3NpZ24oeyBpZDogdGhpcy5pbmNyZW1l
bnRQcm9wZXJ0eSgnbGFzdElkJykgfSwgYXR0cnMpOwotICAgICAgICAgICAgdGhpcy5nZXQoJ2Rh
dGEnKS5wdXNoT2JqZWN0KHRvZG8pOwotICAgICAgICAgICAgdGhpcy5wZXJzaXN0KCk7Ci0gICAg
ICAgICAgICByZXR1cm4gdG9kbzsKLSAgICAgICAgfSwKLQotICAgICAgICAnZGVsZXRlJzogZnVu
Y3Rpb24gX2RlbGV0ZSh0b2RvKSB7Ci0gICAgICAgICAgICB0aGlzLmdldCgnZGF0YScpLnJlbW92
ZU9iamVjdCh0b2RvKTsKLSAgICAgICAgICAgIHRoaXMucGVyc2lzdCgpOwotICAgICAgICB9LAot
Ci0gICAgICAgIHBlcnNpc3Q6IGZ1bmN0aW9uIHBlcnNpc3QoKSB7Ci0gICAgICAgICAgICB3aW5k
b3cubG9jYWxTdG9yYWdlTWVtb3J5LnNldEl0ZW0oJ3RvZG9zJywgSlNPTi5zdHJpbmdpZnkodGhp
cy5nZXQoJ2RhdGEnKSkpOwotICAgICAgICB9Ci0gICAgfSk7Ci19KTsKLWRlZmluZSgidG9kb212
Yy90ZW1wbGF0ZXMvYWN0aXZlIiwgWyJleHBvcnRzIl0sIGZ1bmN0aW9uIChleHBvcnRzKSB7Ci0g
IGV4cG9ydHNbImRlZmF1bHQiXSA9IEVtYmVyLkhUTUxCYXJzLnRlbXBsYXRlKChmdW5jdGlvbiAo
KSB7Ci0gICAgcmV0dXJuIHsKLSAgICAgIG1ldGE6IHsKLSAgICAgICAgImZyYWdtZW50UmVhc29u
IjogewotICAgICAgICAgICJuYW1lIjogIm1pc3Npbmctd3JhcHBlciIsCi0gICAgICAgICAgInBy
b2JsZW1zIjogWyJ3cm9uZy10eXBlIl0KLSAgICAgICAgfSwKLSAgICAgICAgInJldmlzaW9uIjog
IkVtYmVyQDIuNi4yIiwKLSAgICAgICAgImxvYyI6IHsKLSAgICAgICAgICAic291cmNlIjogbnVs
bCwKLSAgICAgICAgICAic3RhcnQiOiB7Ci0gICAgICAgICAgICAibGluZSI6IDEsCi0gICAgICAg
ICAgICAiY29sdW1uIjogMAotICAgICAgICAgIH0sCi0gICAgICAgICAgImVuZCI6IHsKLSAgICAg
ICAgICAgICJsaW5lIjogMSwKLSAgICAgICAgICAgICJjb2x1bW4iOiAyNQotICAgICAgICAgIH0K
LSAgICAgICAgfSwKLSAgICAgICAgIm1vZHVsZU5hbWUiOiAidG9kb212Yy90ZW1wbGF0ZXMvYWN0
aXZlLmhicyIKLSAgICAgIH0sCi0gICAgICBpc0VtcHR5OiBmYWxzZSwKLSAgICAgIGFyaXR5OiAw
LAotICAgICAgY2FjaGVkRnJhZ21lbnQ6IG51bGwsCi0gICAgICBoYXNSZW5kZXJlZDogZmFsc2Us
Ci0gICAgICBidWlsZEZyYWdtZW50OiBmdW5jdGlvbiBidWlsZEZyYWdtZW50KGRvbSkgewotICAg
ICAgICB2YXIgZWwwID0gZG9tLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKLSAgICAgICAgdmFy
IGVsMSA9IGRvbS5jcmVhdGVDb21tZW50KCIiKTsKLSAgICAgICAgZG9tLmFwcGVuZENoaWxkKGVs
MCwgZWwxKTsKLSAgICAgICAgcmV0dXJuIGVsMDsKLSAgICAgIH0sCi0gICAgICBidWlsZFJlbmRl
ck5vZGVzOiBmdW5jdGlvbiBidWlsZFJlbmRlck5vZGVzKGRvbSwgZnJhZ21lbnQsIGNvbnRleHR1
YWxFbGVtZW50KSB7Ci0gICAgICAgIHZhciBtb3JwaHMgPSBuZXcgQXJyYXkoMSk7Ci0gICAgICAg
IG1vcnBoc1swXSA9IGRvbS5jcmVhdGVNb3JwaEF0KGZyYWdtZW50LCAwLCAwLCBjb250ZXh0dWFs
RWxlbWVudCk7Ci0gICAgICAgIGRvbS5pbnNlcnRCb3VuZGFyeShmcmFnbWVudCwgMCk7Ci0gICAg
ICAgIGRvbS5pbnNlcnRCb3VuZGFyeShmcmFnbWVudCwgbnVsbCk7Ci0gICAgICAgIHJldHVybiBt
b3JwaHM7Ci0gICAgICB9LAotICAgICAgc3RhdGVtZW50czogW1siaW5saW5lIiwgInRvZG8tbGlz
dCIsIFtdLCBbInRvZG9zIiwgWyJzdWJleHByIiwgIkBtdXQiLCBbWyJnZXQiLCAidG9kb3MiLCBb
ImxvYyIsIFtudWxsLCBbMSwgMThdLCBbMSwgMjNdXV1dXSwgW10sIFtdXV0sIFsibG9jIiwgW251
bGwsIFsxLCAwXSwgWzEsIDI1XV1dXV0sCi0gICAgICBsb2NhbHM6IFtdLAotICAgICAgdGVtcGxh
dGVzOiBbXQotICAgIH07Ci0gIH0pKCkpOwotfSk7Ci1kZWZpbmUoInRvZG9tdmMvdGVtcGxhdGVz
L2FwcGxpY2F0aW9uIiwgWyJleHBvcnRzIl0sIGZ1bmN0aW9uIChleHBvcnRzKSB7Ci0gIGV4cG9y
dHNbImRlZmF1bHQiXSA9IEVtYmVyLkhUTUxCYXJzLnRlbXBsYXRlKChmdW5jdGlvbiAoKSB7Ci0g
ICAgdmFyIGNoaWxkMCA9IChmdW5jdGlvbiAoKSB7Ci0gICAgICB2YXIgY2hpbGQwID0gKGZ1bmN0
aW9uICgpIHsKLSAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICBtZXRhOiB7Ci0gICAgICAgICAg
ICAiZnJhZ21lbnRSZWFzb24iOiBmYWxzZSwKLSAgICAgICAgICAgICJyZXZpc2lvbiI6ICJFbWJl
ckAyLjYuMiIsCi0gICAgICAgICAgICAibG9jIjogewotICAgICAgICAgICAgICAic291cmNlIjog
bnVsbCwKLSAgICAgICAgICAgICAgInN0YXJ0IjogewotICAgICAgICAgICAgICAgICJsaW5lIjog
MTEsCi0gICAgICAgICAgICAgICAgImNvbHVtbiI6IDE0Ci0gICAgICAgICAgICAgIH0sCi0gICAg
ICAgICAgICAgICJlbmQiOiB7Ci0gICAgICAgICAgICAgICAgImxpbmUiOiAxMSwKLSAgICAgICAg
ICAgICAgICAiY29sdW1uIjogNjAKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSwKLSAg
ICAgICAgICAgICJtb2R1bGVOYW1lIjogInRvZG9tdmMvdGVtcGxhdGVzL2FwcGxpY2F0aW9uLmhi
cyIKLSAgICAgICAgICB9LAotICAgICAgICAgIGlzRW1wdHk6IGZhbHNlLAotICAgICAgICAgIGFy
aXR5OiAwLAotICAgICAgICAgIGNhY2hlZEZyYWdtZW50OiBudWxsLAotICAgICAgICAgIGhhc1Jl
bmRlcmVkOiBmYWxzZSwKLSAgICAgICAgICBidWlsZEZyYWdtZW50OiBmdW5jdGlvbiBidWlsZEZy
YWdtZW50KGRvbSkgewotICAgICAgICAgICAgdmFyIGVsMCA9IGRvbS5jcmVhdGVEb2N1bWVudEZy
YWdtZW50KCk7Ci0gICAgICAgICAgICB2YXIgZWwxID0gZG9tLmNyZWF0ZVRleHROb2RlKCJBbGwi
KTsKLSAgICAgICAgICAgIGRvbS5hcHBlbmRDaGlsZChlbDAsIGVsMSk7Ci0gICAgICAgICAgICBy
ZXR1cm4gZWwwOwotICAgICAgICAgIH0sCi0gICAgICAgICAgYnVpbGRSZW5kZXJOb2RlczogZnVu
Y3Rpb24gYnVpbGRSZW5kZXJOb2RlcygpIHsKLSAgICAgICAgICAgIHJldHVybiBbXTsKLSAgICAg
ICAgICB9LAotICAgICAgICAgIHN0YXRlbWVudHM6IFtdLAotICAgICAgICAgIGxvY2FsczogW10s
Ci0gICAgICAgICAgdGVtcGxhdGVzOiBbXQotICAgICAgICB9OwotICAgICAgfSkoKTsKLSAgICAg
IHZhciBjaGlsZDEgPSAoZnVuY3Rpb24gKCkgewotICAgICAgICByZXR1cm4gewotICAgICAgICAg
IG1ldGE6IHsKLSAgICAgICAgICAgICJmcmFnbWVudFJlYXNvbiI6IGZhbHNlLAotICAgICAgICAg
ICAgInJldmlzaW9uIjogIkVtYmVyQDIuNi4yIiwKLSAgICAgICAgICAgICJsb2MiOiB7Ci0gICAg
ICAgICAgICAgICJzb3VyY2UiOiBudWxsLAotICAgICAgICAgICAgICAic3RhcnQiOiB7Ci0gICAg
ICAgICAgICAgICAgImxpbmUiOiAxMiwKLSAgICAgICAgICAgICAgICAiY29sdW1uIjogMTQKLSAg
ICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgImVuZCI6IHsKLSAgICAgICAgICAgICAgICAi
bGluZSI6IDEyLAotICAgICAgICAgICAgICAgICJjb2x1bW4iOiA2NAotICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9LAotICAgICAgICAgICAgIm1vZHVsZU5hbWUiOiAidG9kb212Yy90ZW1w
bGF0ZXMvYXBwbGljYXRpb24uaGJzIgotICAgICAgICAgIH0sCi0gICAgICAgICAgaXNFbXB0eTog
ZmFsc2UsCi0gICAgICAgICAgYXJpdHk6IDAsCi0gICAgICAgICAgY2FjaGVkRnJhZ21lbnQ6IG51
bGwsCi0gICAgICAgICAgaGFzUmVuZGVyZWQ6IGZhbHNlLAotICAgICAgICAgIGJ1aWxkRnJhZ21l
bnQ6IGZ1bmN0aW9uIGJ1aWxkRnJhZ21lbnQoZG9tKSB7Ci0gICAgICAgICAgICB2YXIgZWwwID0g
ZG9tLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKLSAgICAgICAgICAgIHZhciBlbDEgPSBkb20u
Y3JlYXRlVGV4dE5vZGUoIkFjdGl2ZSIpOwotICAgICAgICAgICAgZG9tLmFwcGVuZENoaWxkKGVs
MCwgZWwxKTsKLSAgICAgICAgICAgIHJldHVybiBlbDA7Ci0gICAgICAgICAgfSwKLSAgICAgICAg
ICBidWlsZFJlbmRlck5vZGVzOiBmdW5jdGlvbiBidWlsZFJlbmRlck5vZGVzKCkgewotICAgICAg
ICAgICAgcmV0dXJuIFtdOwotICAgICAgICAgIH0sCi0gICAgICAgICAgc3RhdGVtZW50czogW10s
Ci0gICAgICAgICAgbG9jYWxzOiBbXSwKLSAgICAgICAgICB0ZW1wbGF0ZXM6IFtdCi0gICAgICAg
IH07Ci0gICAgICB9KSgpOwotICAgICAgdmFyIGNoaWxkMiA9IChmdW5jdGlvbiAoKSB7Ci0gICAg
ICAgIHJldHVybiB7Ci0gICAgICAgICAgbWV0YTogewotICAgICAgICAgICAgImZyYWdtZW50UmVh
c29uIjogZmFsc2UsCi0gICAgICAgICAgICAicmV2aXNpb24iOiAiRW1iZXJAMi42LjIiLAotICAg
ICAgICAgICAgImxvYyI6IHsKLSAgICAgICAgICAgICAgInNvdXJjZSI6IG51bGwsCi0gICAgICAg
ICAgICAgICJzdGFydCI6IHsKLSAgICAgICAgICAgICAgICAibGluZSI6IDEzLAotICAgICAgICAg
ICAgICAgICJjb2x1bW4iOiAxNAotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAiZW5k
IjogewotICAgICAgICAgICAgICAgICJsaW5lIjogMTMsCi0gICAgICAgICAgICAgICAgImNvbHVt
biI6IDcwCi0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAibW9k
dWxlTmFtZSI6ICJ0b2RvbXZjL3RlbXBsYXRlcy9hcHBsaWNhdGlvbi5oYnMiCi0gICAgICAgICAg
fSwKLSAgICAgICAgICBpc0VtcHR5OiBmYWxzZSwKLSAgICAgICAgICBhcml0eTogMCwKLSAgICAg
ICAgICBjYWNoZWRGcmFnbWVudDogbnVsbCwKLSAgICAgICAgICBoYXNSZW5kZXJlZDogZmFsc2Us
Ci0gICAgICAgICAgYnVpbGRGcmFnbWVudDogZnVuY3Rpb24gYnVpbGRGcmFnbWVudChkb20pIHsK
LSAgICAgICAgICAgIHZhciBlbDAgPSBkb20uY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOwotICAg
ICAgICAgICAgdmFyIGVsMSA9IGRvbS5jcmVhdGVUZXh0Tm9kZSgiQ29tcGxldGVkIik7Ci0gICAg
ICAgICAgICBkb20uYXBwZW5kQ2hpbGQoZWwwLCBlbDEpOwotICAgICAgICAgICAgcmV0dXJuIGVs
MDsKLSAgICAgICAgICB9LAotICAgICAgICAgIGJ1aWxkUmVuZGVyTm9kZXM6IGZ1bmN0aW9uIGJ1
aWxkUmVuZGVyTm9kZXMoKSB7Ci0gICAgICAgICAgICByZXR1cm4gW107Ci0gICAgICAgICAgfSwK
LSAgICAgICAgICBzdGF0ZW1lbnRzOiBbXSwKLSAgICAgICAgICBsb2NhbHM6IFtdLAotICAgICAg
ICAgIHRlbXBsYXRlczogW10KLSAgICAgICAgfTsKLSAgICAgIH0pKCk7Ci0gICAgICB2YXIgY2hp
bGQzID0gKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICBtZXRhOiB7
Ci0gICAgICAgICAgICAiZnJhZ21lbnRSZWFzb24iOiBmYWxzZSwKLSAgICAgICAgICAgICJyZXZp
c2lvbiI6ICJFbWJlckAyLjYuMiIsCi0gICAgICAgICAgICAibG9jIjogewotICAgICAgICAgICAg
ICAic291cmNlIjogbnVsbCwKLSAgICAgICAgICAgICAgInN0YXJ0IjogewotICAgICAgICAgICAg
ICAgICJsaW5lIjogMTUsCi0gICAgICAgICAgICAgICAgImNvbHVtbiI6IDgKLSAgICAgICAgICAg
ICAgfSwKLSAgICAgICAgICAgICAgImVuZCI6IHsKLSAgICAgICAgICAgICAgICAibGluZSI6IDE3
LAotICAgICAgICAgICAgICAgICJjb2x1bW4iOiA4Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0sCi0gICAgICAgICAgICAibW9kdWxlTmFtZSI6ICJ0b2RvbXZjL3RlbXBsYXRlcy9hcHBs
aWNhdGlvbi5oYnMiCi0gICAgICAgICAgfSwKLSAgICAgICAgICBpc0VtcHR5OiBmYWxzZSwKLSAg
ICAgICAgICBhcml0eTogMCwKLSAgICAgICAgICBjYWNoZWRGcmFnbWVudDogbnVsbCwKLSAgICAg
ICAgICBoYXNSZW5kZXJlZDogZmFsc2UsCi0gICAgICAgICAgYnVpbGRGcmFnbWVudDogZnVuY3Rp
b24gYnVpbGRGcmFnbWVudChkb20pIHsKLSAgICAgICAgICAgIHZhciBlbDAgPSBkb20uY3JlYXRl
RG9jdW1lbnRGcmFnbWVudCgpOwotICAgICAgICAgICAgdmFyIGVsMSA9IGRvbS5jcmVhdGVUZXh0
Tm9kZSgiICAgICAgICAgICIpOwotICAgICAgICAgICAgZG9tLmFwcGVuZENoaWxkKGVsMCwgZWwx
KTsKLSAgICAgICAgICAgIHZhciBlbDEgPSBkb20uY3JlYXRlRWxlbWVudCgiYnV0dG9uIik7Ci0g
ICAgICAgICAgICBkb20uc2V0QXR0cmlidXRlKGVsMSwgImlkIiwgImNsZWFyLWNvbXBsZXRlZCIp
OwotICAgICAgICAgICAgdmFyIGVsMiA9IGRvbS5jcmVhdGVUZXh0Tm9kZSgiQ2xlYXIgY29tcGxl
dGVkIik7Ci0gICAgICAgICAgICBkb20uYXBwZW5kQ2hpbGQoZWwxLCBlbDIpOwotICAgICAgICAg
ICAgZG9tLmFwcGVuZENoaWxkKGVsMCwgZWwxKTsKLSAgICAgICAgICAgIHZhciBlbDEgPSBkb20u
Y3JlYXRlVGV4dE5vZGUoIlxuIik7Ci0gICAgICAgICAgICBkb20uYXBwZW5kQ2hpbGQoZWwwLCBl
bDEpOwotICAgICAgICAgICAgcmV0dXJuIGVsMDsKLSAgICAgICAgICB9LAotICAgICAgICAgIGJ1
aWxkUmVuZGVyTm9kZXM6IGZ1bmN0aW9uIGJ1aWxkUmVuZGVyTm9kZXMoZG9tLCBmcmFnbWVudCwg
Y29udGV4dHVhbEVsZW1lbnQpIHsKLSAgICAgICAgICAgIHZhciBlbGVtZW50MCA9IGRvbS5jaGls
ZEF0KGZyYWdtZW50LCBbMV0pOwotICAgICAgICAgICAgdmFyIG1vcnBocyA9IG5ldyBBcnJheSgx
KTsKLSAgICAgICAgICAgIG1vcnBoc1swXSA9IGRvbS5jcmVhdGVBdHRyTW9ycGgoZWxlbWVudDAs
ICdvbmNsaWNrJyk7Ci0gICAgICAgICAgICByZXR1cm4gbW9ycGhzOwotICAgICAgICAgIH0sCi0g
ICAgICAgICAgc3RhdGVtZW50czogW1siYXR0cmlidXRlIiwgIm9uY2xpY2siLCBbInN1YmV4cHIi
LCAiYWN0aW9uIiwgWyJjbGVhckNvbXBsZXRlZCJdLCBbXSwgWyJsb2MiLCBbbnVsbCwgWzE2LCA0
N10sIFsxNiwgNzRdXV1dXV0sCi0gICAgICAgICAgbG9jYWxzOiBbXSwKLSAgICAgICAgICB0ZW1w
bGF0ZXM6IFtdCi0gICAgICAgIH07Ci0gICAgICB9KSgpOwotICAgICAgcmV0dXJuIHsKLSAgICAg
ICAgbWV0YTogewotICAgICAgICAgICJmcmFnbWVudFJlYXNvbiI6IGZhbHNlLAotICAgICAgICAg
ICJyZXZpc2lvbiI6ICJFbWJlckAyLjYuMiIsCi0gICAgICAgICAgImxvYyI6IHsKLSAgICAgICAg
ICAgICJzb3VyY2UiOiBudWxsLAotICAgICAgICAgICAgInN0YXJ0IjogewotICAgICAgICAgICAg
ICAibGluZSI6IDcsCi0gICAgICAgICAgICAgICJjb2x1bW4iOiA0Ci0gICAgICAgICAgICB9LAot
ICAgICAgICAgICAgImVuZCI6IHsKLSAgICAgICAgICAgICAgImxpbmUiOiAxOSwKLSAgICAgICAg
ICAgICAgImNvbHVtbiI6IDQKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9LAotICAgICAgICAg
ICJtb2R1bGVOYW1lIjogInRvZG9tdmMvdGVtcGxhdGVzL2FwcGxpY2F0aW9uLmhicyIKLSAgICAg
ICAgfSwKLSAgICAgICAgaXNFbXB0eTogZmFsc2UsCi0gICAgICAgIGFyaXR5OiAwLAotICAgICAg
ICBjYWNoZWRGcmFnbWVudDogbnVsbCwKLSAgICAgICAgaGFzUmVuZGVyZWQ6IGZhbHNlLAotICAg
ICAgICBidWlsZEZyYWdtZW50OiBmdW5jdGlvbiBidWlsZEZyYWdtZW50KGRvbSkgewotICAgICAg
ICAgIHZhciBlbDAgPSBkb20uY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOwotICAgICAgICAgIHZh
ciBlbDEgPSBkb20uY3JlYXRlVGV4dE5vZGUoIiAgICAgICIpOwotICAgICAgICAgIGRvbS5hcHBl
bmRDaGlsZChlbDAsIGVsMSk7Ci0gICAgICAgICAgdmFyIGVsMSA9IGRvbS5jcmVhdGVFbGVtZW50
KCJmb290ZXIiKTsKLSAgICAgICAgICBkb20uc2V0QXR0cmlidXRlKGVsMSwgImlkIiwgImZvb3Rl
ciIpOwotICAgICAgICAgIHZhciBlbDIgPSBkb20uY3JlYXRlVGV4dE5vZGUoIlxuICAgICAgICAi
KTsKLSAgICAgICAgICBkb20uYXBwZW5kQ2hpbGQoZWwxLCBlbDIpOwotICAgICAgICAgIHZhciBl
bDIgPSBkb20uY3JlYXRlRWxlbWVudCgic3BhbiIpOwotICAgICAgICAgIGRvbS5zZXRBdHRyaWJ1
dGUoZWwyLCAiaWQiLCAidG9kby1jb3VudCIpOwotICAgICAgICAgIHZhciBlbDMgPSBkb20uY3Jl
YXRlRWxlbWVudCgic3Ryb25nIik7Ci0gICAgICAgICAgdmFyIGVsNCA9IGRvbS5jcmVhdGVDb21t
ZW50KCIiKTsKLSAgICAgICAgICBkb20uYXBwZW5kQ2hpbGQoZWwzLCBlbDQpOwotICAgICAgICAg
IGRvbS5hcHBlbmRDaGlsZChlbDIsIGVsMyk7Ci0gICAgICAgICAgdmFyIGVsMyA9IGRvbS5jcmVh
dGVUZXh0Tm9kZSgiICIpOwotICAgICAgICAgIGRvbS5hcHBlbmRDaGlsZChlbDIsIGVsMyk7Ci0g
ICAgICAgICAgdmFyIGVsMyA9IGRvbS5jcmVhdGVDb21tZW50KCIiKTsKLSAgICAgICAgICBkb20u
YXBwZW5kQ2hpbGQoZWwyLCBlbDMpOwotICAgICAgICAgIHZhciBlbDMgPSBkb20uY3JlYXRlVGV4
dE5vZGUoIiBsZWZ0Iik7Ci0gICAgICAgICAgZG9tLmFwcGVuZENoaWxkKGVsMiwgZWwzKTsKLSAg
ICAgICAgICBkb20uYXBwZW5kQ2hpbGQoZWwxLCBlbDIpOwotICAgICAgICAgIHZhciBlbDIgPSBk
b20uY3JlYXRlVGV4dE5vZGUoIlxuICAgICAgICAiKTsKLSAgICAgICAgICBkb20uYXBwZW5kQ2hp
bGQoZWwxLCBlbDIpOwotICAgICAgICAgIHZhciBlbDIgPSBkb20uY3JlYXRlRWxlbWVudCgidWwi
KTsKLSAgICAgICAgICBkb20uc2V0QXR0cmlidXRlKGVsMiwgImlkIiwgImZpbHRlcnMiKTsKLSAg
ICAgICAgICB2YXIgZWwzID0gZG9tLmNyZWF0ZVRleHROb2RlKCJcbiAgICAgICAgICAiKTsKLSAg
ICAgICAgICBkb20uYXBwZW5kQ2hpbGQoZWwyLCBlbDMpOwotICAgICAgICAgIHZhciBlbDMgPSBk
b20uY3JlYXRlRWxlbWVudCgibGkiKTsKLSAgICAgICAgICB2YXIgZWw0ID0gZG9tLmNyZWF0ZUNv
bW1lbnQoIiIpOwotICAgICAgICAgIGRvbS5hcHBlbmRDaGlsZChlbDMsIGVsNCk7Ci0gICAgICAg
ICAgZG9tLmFwcGVuZENoaWxkKGVsMiwgZWwzKTsKLSAgICAgICAgICB2YXIgZWwzID0gZG9tLmNy
ZWF0ZVRleHROb2RlKCJcbiAgICAgICAgICAiKTsKLSAgICAgICAgICBkb20uYXBwZW5kQ2hpbGQo
ZWwyLCBlbDMpOwotICAgICAgICAgIHZhciBlbDMgPSBkb20uY3JlYXRlRWxlbWVudCgibGkiKTsK
LSAgICAgICAgICB2YXIgZWw0ID0gZG9tLmNyZWF0ZUNvbW1lbnQoIiIpOwotICAgICAgICAgIGRv
bS5hcHBlbmRDaGlsZChlbDMsIGVsNCk7Ci0gICAgICAgICAgZG9tLmFwcGVuZENoaWxkKGVsMiwg
ZWwzKTsKLSAgICAgICAgICB2YXIgZWwzID0gZG9tLmNyZWF0ZVRleHROb2RlKCJcbiAgICAgICAg
ICAiKTsKLSAgICAgICAgICBkb20uYXBwZW5kQ2hpbGQoZWwyLCBlbDMpOwotICAgICAgICAgIHZh
ciBlbDMgPSBkb20uY3JlYXRlRWxlbWVudCgibGkiKTsKLSAgICAgICAgICB2YXIgZWw0ID0gZG9t
LmNyZWF0ZUNvbW1lbnQoIiIpOwotICAgICAgICAgIGRvbS5hcHBlbmRDaGlsZChlbDMsIGVsNCk7
Ci0gICAgICAgICAgZG9tLmFwcGVuZENoaWxkKGVsMiwgZWwzKTsKLSAgICAgICAgICB2YXIgZWwz
ID0gZG9tLmNyZWF0ZVRleHROb2RlKCJcbiAgICAgICAgIik7Ci0gICAgICAgICAgZG9tLmFwcGVu
ZENoaWxkKGVsMiwgZWwzKTsKLSAgICAgICAgICBkb20uYXBwZW5kQ2hpbGQoZWwxLCBlbDIpOwot
ICAgICAgICAgIHZhciBlbDIgPSBkb20uY3JlYXRlVGV4dE5vZGUoIlxuIik7Ci0gICAgICAgICAg
ZG9tLmFwcGVuZENoaWxkKGVsMSwgZWwyKTsKLSAgICAgICAgICB2YXIgZWwyID0gZG9tLmNyZWF0
ZUNvbW1lbnQoIiIpOwotICAgICAgICAgIGRvbS5hcHBlbmRDaGlsZChlbDEsIGVsMik7Ci0gICAg
ICAgICAgdmFyIGVsMiA9IGRvbS5jcmVhdGVUZXh0Tm9kZSgiICAgICAgIik7Ci0gICAgICAgICAg
ZG9tLmFwcGVuZENoaWxkKGVsMSwgZWwyKTsKLSAgICAgICAgICBkb20uYXBwZW5kQ2hpbGQoZWww
LCBlbDEpOwotICAgICAgICAgIHZhciBlbDEgPSBkb20uY3JlYXRlVGV4dE5vZGUoIlxuIik7Ci0g
ICAgICAgICAgZG9tLmFwcGVuZENoaWxkKGVsMCwgZWwxKTsKLSAgICAgICAgICByZXR1cm4gZWww
OwotICAgICAgICB9LAotICAgICAgICBidWlsZFJlbmRlck5vZGVzOiBmdW5jdGlvbiBidWlsZFJl
bmRlck5vZGVzKGRvbSwgZnJhZ21lbnQsIGNvbnRleHR1YWxFbGVtZW50KSB7Ci0gICAgICAgICAg
dmFyIGVsZW1lbnQxID0gZG9tLmNoaWxkQXQoZnJhZ21lbnQsIFsxXSk7Ci0gICAgICAgICAgdmFy
IGVsZW1lbnQyID0gZG9tLmNoaWxkQXQoZWxlbWVudDEsIFsxXSk7Ci0gICAgICAgICAgdmFyIGVs
ZW1lbnQzID0gZG9tLmNoaWxkQXQoZWxlbWVudDEsIFszXSk7Ci0gICAgICAgICAgdmFyIG1vcnBo
cyA9IG5ldyBBcnJheSg2KTsKLSAgICAgICAgICBtb3JwaHNbMF0gPSBkb20uY3JlYXRlTW9ycGhB
dChkb20uY2hpbGRBdChlbGVtZW50MiwgWzBdKSwgMCwgMCk7Ci0gICAgICAgICAgbW9ycGhzWzFd
ID0gZG9tLmNyZWF0ZU1vcnBoQXQoZWxlbWVudDIsIDIsIDIpOwotICAgICAgICAgIG1vcnBoc1sy
XSA9IGRvbS5jcmVhdGVNb3JwaEF0KGRvbS5jaGlsZEF0KGVsZW1lbnQzLCBbMV0pLCAwLCAwKTsK
LSAgICAgICAgICBtb3JwaHNbM10gPSBkb20uY3JlYXRlTW9ycGhBdChkb20uY2hpbGRBdChlbGVt
ZW50MywgWzNdKSwgMCwgMCk7Ci0gICAgICAgICAgbW9ycGhzWzRdID0gZG9tLmNyZWF0ZU1vcnBo
QXQoZG9tLmNoaWxkQXQoZWxlbWVudDMsIFs1XSksIDAsIDApOwotICAgICAgICAgIG1vcnBoc1s1
XSA9IGRvbS5jcmVhdGVNb3JwaEF0KGVsZW1lbnQxLCA1LCA1KTsKLSAgICAgICAgICByZXR1cm4g
bW9ycGhzOwotICAgICAgICB9LAotICAgICAgICBzdGF0ZW1lbnRzOiBbWyJjb250ZW50IiwgInJl
bWFpbmluZy5sZW5ndGgiLCBbImxvYyIsIFtudWxsLCBbOSwgMzhdLCBbOSwgNThdXV1dLCBbImlu
bGluZSIsICJwbHVyYWxpemUiLCBbIml0ZW0iLCBbImdldCIsICJyZW1haW5pbmcubGVuZ3RoIiwg
WyJsb2MiLCBbbnVsbCwgWzksIDg3XSwgWzksIDEwM11dXV1dLCBbXSwgWyJsb2MiLCBbbnVsbCwg
WzksIDY4XSwgWzksIDEwNV1dXV0sIFsiYmxvY2siLCAibGluay10byIsIFsiaW5kZXgiXSwgWyJh
Y3RpdmVDbGFzcyIsICJzZWxlY3RlZCJdLCAwLCBudWxsLCBbImxvYyIsIFtudWxsLCBbMTEsIDE0
XSwgWzExLCA3Ml1dXV0sIFsiYmxvY2siLCAibGluay10byIsIFsiYWN0aXZlIl0sIFsiYWN0aXZl
Q2xhc3MiLCAic2VsZWN0ZWQiXSwgMSwgbnVsbCwgWyJsb2MiLCBbbnVsbCwgWzEyLCAxNF0sIFsx
MiwgNzZdXV1dLCBbImJsb2NrIiwgImxpbmstdG8iLCBbImNvbXBsZXRlZCJdLCBbImFjdGl2ZUNs
YXNzIiwgInNlbGVjdGVkIl0sIDIsIG51bGwsIFsibG9jIiwgW251bGwsIFsxMywgMTRdLCBbMTMs
IDgyXV1dXSwgWyJibG9jayIsICJpZiIsIFtbImdldCIsICJjb21wbGV0ZWQubGVuZ3RoIiwgWyJs
b2MiLCBbbnVsbCwgWzE1LCAxNF0sIFsxNSwgMzBdXV1dXSwgW10sIDMsIG51bGwsIFsibG9jIiwg
W251bGwsIFsxNSwgOF0sIFsxNywgMTVdXV1dXSwKLSAgICAgICAgbG9jYWxzOiBbXSwKLSAgICAg
ICAgdGVtcGxhdGVzOiBbY2hpbGQwLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzXQotICAgICAgfTsK
LSAgICB9KSgpOwotICAgIHJldHVybiB7Ci0gICAgICBtZXRhOiB7Ci0gICAgICAgICJmcmFnbWVu
dFJlYXNvbiI6IHsKLSAgICAgICAgICAibmFtZSI6ICJtaXNzaW5nLXdyYXBwZXIiLAotICAgICAg
ICAgICJwcm9ibGVtcyI6IFsibXVsdGlwbGUtbm9kZXMiXQotICAgICAgICB9LAotICAgICAgICAi
cmV2aXNpb24iOiAiRW1iZXJAMi42LjIiLAotICAgICAgICAibG9jIjogewotICAgICAgICAgICJz
b3VyY2UiOiBudWxsLAotICAgICAgICAgICJzdGFydCI6IHsKLSAgICAgICAgICAgICJsaW5lIjog
MSwKLSAgICAgICAgICAgICJjb2x1bW4iOiAwCi0gICAgICAgICAgfSwKLSAgICAgICAgICAiZW5k
IjogewotICAgICAgICAgICAgImxpbmUiOiAyOSwKLSAgICAgICAgICAgICJjb2x1bW4iOiA5Ci0g
ICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAibW9kdWxlTmFtZSI6ICJ0b2RvbXZjL3Rl
bXBsYXRlcy9hcHBsaWNhdGlvbi5oYnMiCi0gICAgICB9LAotICAgICAgaXNFbXB0eTogZmFsc2Us
Ci0gICAgICBhcml0eTogMCwKLSAgICAgIGNhY2hlZEZyYWdtZW50OiBudWxsLAotICAgICAgaGFz
UmVuZGVyZWQ6IGZhbHNlLAotICAgICAgYnVpbGRGcmFnbWVudDogZnVuY3Rpb24gYnVpbGRGcmFn
bWVudChkb20pIHsKLSAgICAgICAgdmFyIGVsMCA9IGRvbS5jcmVhdGVEb2N1bWVudEZyYWdtZW50
KCk7Ci0gICAgICAgIHZhciBlbDEgPSBkb20uY3JlYXRlRWxlbWVudCgic2VjdGlvbiIpOwotICAg
ICAgICBkb20uc2V0QXR0cmlidXRlKGVsMSwgImlkIiwgInRvZG9hcHAiKTsKLSAgICAgICAgdmFy
IGVsMiA9IGRvbS5jcmVhdGVUZXh0Tm9kZSgiXG4gICIpOwotICAgICAgICBkb20uYXBwZW5kQ2hp
bGQoZWwxLCBlbDIpOwotICAgICAgICB2YXIgZWwyID0gZG9tLmNyZWF0ZUVsZW1lbnQoImhlYWRl
ciIpOwotICAgICAgICBkb20uc2V0QXR0cmlidXRlKGVsMiwgImlkIiwgImhlYWRlciIpOwotICAg
ICAgICB2YXIgZWwzID0gZG9tLmNyZWF0ZVRleHROb2RlKCJcbiAgICAiKTsKLSAgICAgICAgZG9t
LmFwcGVuZENoaWxkKGVsMiwgZWwzKTsKLSAgICAgICAgdmFyIGVsMyA9IGRvbS5jcmVhdGVFbGVt
ZW50KCJoMSIpOwotICAgICAgICB2YXIgZWw0ID0gZG9tLmNyZWF0ZVRleHROb2RlKCJ0b2RvcyIp
OwotICAgICAgICBkb20uYXBwZW5kQ2hpbGQoZWwzLCBlbDQpOwotICAgICAgICBkb20uYXBwZW5k
Q2hpbGQoZWwyLCBlbDMpOwotICAgICAgICB2YXIgZWwzID0gZG9tLmNyZWF0ZVRleHROb2RlKCJc
biAgICAiKTsKLSAgICAgICAgZG9tLmFwcGVuZENoaWxkKGVsMiwgZWwzKTsKLSAgICAgICAgdmFy
IGVsMyA9IGRvbS5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwotICAgICAgICBkb20uc2V0QXR0cmli
dXRlKGVsMywgInR5cGUiLCAidGV4dCIpOwotICAgICAgICBkb20uc2V0QXR0cmlidXRlKGVsMywg
ImlkIiwgIm5ldy10b2RvIik7Ci0gICAgICAgIGRvbS5zZXRBdHRyaWJ1dGUoZWwzLCAicGxhY2Vo
b2xkZXIiLCAiV2hhdCBuZWVkcyB0byBiZSBkb25lPyIpOwotICAgICAgICBkb20uc2V0QXR0cmli
dXRlKGVsMywgImF1dG9mb2N1cyIsICIiKTsKLSAgICAgICAgZG9tLmFwcGVuZENoaWxkKGVsMiwg
ZWwzKTsKLSAgICAgICAgdmFyIGVsMyA9IGRvbS5jcmVhdGVUZXh0Tm9kZSgiXG4gICIpOwotICAg
ICAgICBkb20uYXBwZW5kQ2hpbGQoZWwyLCBlbDMpOwotICAgICAgICBkb20uYXBwZW5kQ2hpbGQo
ZWwxLCBlbDIpOwotICAgICAgICB2YXIgZWwyID0gZG9tLmNyZWF0ZVRleHROb2RlKCJcbiAgICAi
KTsKLSAgICAgICAgZG9tLmFwcGVuZENoaWxkKGVsMSwgZWwyKTsKLSAgICAgICAgdmFyIGVsMiA9
IGRvbS5jcmVhdGVDb21tZW50KCIiKTsKLSAgICAgICAgZG9tLmFwcGVuZENoaWxkKGVsMSwgZWwy
KTsKLSAgICAgICAgdmFyIGVsMiA9IGRvbS5jcmVhdGVUZXh0Tm9kZSgiXG4iKTsKLSAgICAgICAg
ZG9tLmFwcGVuZENoaWxkKGVsMSwgZWwyKTsKLSAgICAgICAgdmFyIGVsMiA9IGRvbS5jcmVhdGVD
b21tZW50KCIiKTsKLSAgICAgICAgZG9tLmFwcGVuZENoaWxkKGVsMSwgZWwyKTsKLSAgICAgICAg
ZG9tLmFwcGVuZENoaWxkKGVsMCwgZWwxKTsKLSAgICAgICAgdmFyIGVsMSA9IGRvbS5jcmVhdGVU
ZXh0Tm9kZSgiXG4iKTsKLSAgICAgICAgZG9tLmFwcGVuZENoaWxkKGVsMCwgZWwxKTsKLSAgICAg
ICAgdmFyIGVsMSA9IGRvbS5jcmVhdGVFbGVtZW50KCJmb290ZXIiKTsKLSAgICAgICAgZG9tLnNl
dEF0dHJpYnV0ZShlbDEsICJpZCIsICJpbmZvIik7Ci0gICAgICAgIHZhciBlbDIgPSBkb20uY3Jl
YXRlVGV4dE5vZGUoIlxuICAiKTsKLSAgICAgICAgZG9tLmFwcGVuZENoaWxkKGVsMSwgZWwyKTsK
LSAgICAgICAgdmFyIGVsMiA9IGRvbS5jcmVhdGVFbGVtZW50KCJwIik7Ci0gICAgICAgIHZhciBl
bDMgPSBkb20uY3JlYXRlVGV4dE5vZGUoIkRvdWJsZS1jbGljayB0byBlZGl0IGEgdG9kbyIpOwot
ICAgICAgICBkb20uYXBwZW5kQ2hpbGQoZWwyLCBlbDMpOwotICAgICAgICBkb20uYXBwZW5kQ2hp
bGQoZWwxLCBlbDIpOwotICAgICAgICB2YXIgZWwyID0gZG9tLmNyZWF0ZVRleHROb2RlKCJcbiAg
Iik7Ci0gICAgICAgIGRvbS5hcHBlbmRDaGlsZChlbDEsIGVsMik7Ci0gICAgICAgIHZhciBlbDIg
PSBkb20uY3JlYXRlRWxlbWVudCgicCIpOwotICAgICAgICB2YXIgZWwzID0gZG9tLmNyZWF0ZVRl
eHROb2RlKCJcbiAgICBDcmVhdGVkIGJ5XG4gICAgIik7Ci0gICAgICAgIGRvbS5hcHBlbmRDaGls
ZChlbDIsIGVsMyk7Ci0gICAgICAgIHZhciBlbDMgPSBkb20uY3JlYXRlRWxlbWVudCgiYSIpOwot
ICAgICAgICBkb20uc2V0QXR0cmlidXRlKGVsMywgImhyZWYiLCAiaHR0cDovL2dpdGh1Yi5jb20v
Y2liZXJub3giKTsKLSAgICAgICAgdmFyIGVsNCA9IGRvbS5jcmVhdGVUZXh0Tm9kZSgiTWlndWVs
IENhbWJhIik7Ci0gICAgICAgIGRvbS5hcHBlbmRDaGlsZChlbDMsIGVsNCk7Ci0gICAgICAgIGRv
bS5hcHBlbmRDaGlsZChlbDIsIGVsMyk7Ci0gICAgICAgIHZhciBlbDMgPSBkb20uY3JlYXRlVGV4
dE5vZGUoIixcbiAgICAiKTsKLSAgICAgICAgZG9tLmFwcGVuZENoaWxkKGVsMiwgZWwzKTsKLSAg
ICAgICAgdmFyIGVsMyA9IGRvbS5jcmVhdGVFbGVtZW50KCJhIik7Ci0gICAgICAgIGRvbS5zZXRB
dHRyaWJ1dGUoZWwzLCAiaHJlZiIsICJodHRwOi8vZ2l0aHViLmNvbS9hZGR5b3NtYW5pIik7Ci0g
ICAgICAgIHZhciBlbDQgPSBkb20uY3JlYXRlVGV4dE5vZGUoIkFkZHkgT3NtYW5pIik7Ci0gICAg
ICAgIGRvbS5hcHBlbmRDaGlsZChlbDMsIGVsNCk7Ci0gICAgICAgIGRvbS5hcHBlbmRDaGlsZChl
bDIsIGVsMyk7Ci0gICAgICAgIHZhciBlbDMgPSBkb20uY3JlYXRlVGV4dE5vZGUoIlxuICAiKTsK
LSAgICAgICAgZG9tLmFwcGVuZENoaWxkKGVsMiwgZWwzKTsKLSAgICAgICAgZG9tLmFwcGVuZENo
aWxkKGVsMSwgZWwyKTsKLSAgICAgICAgdmFyIGVsMiA9IGRvbS5jcmVhdGVUZXh0Tm9kZSgiXG4g
ICIpOwotICAgICAgICBkb20uYXBwZW5kQ2hpbGQoZWwxLCBlbDIpOwotICAgICAgICB2YXIgZWwy
ID0gZG9tLmNyZWF0ZUVsZW1lbnQoInAiKTsKLSAgICAgICAgdmFyIGVsMyA9IGRvbS5jcmVhdGVU
ZXh0Tm9kZSgiUGFydCBvZiAiKTsKLSAgICAgICAgZG9tLmFwcGVuZENoaWxkKGVsMiwgZWwzKTsK
LSAgICAgICAgdmFyIGVsMyA9IGRvbS5jcmVhdGVFbGVtZW50KCJhIik7Ci0gICAgICAgIGRvbS5z
ZXRBdHRyaWJ1dGUoZWwzLCAiaHJlZiIsICJodHRwOi8vdG9kb212Yy5jb20iKTsKLSAgICAgICAg
dmFyIGVsNCA9IGRvbS5jcmVhdGVUZXh0Tm9kZSgiVG9kb01WQyIpOwotICAgICAgICBkb20uYXBw
ZW5kQ2hpbGQoZWwzLCBlbDQpOwotICAgICAgICBkb20uYXBwZW5kQ2hpbGQoZWwyLCBlbDMpOwot
ICAgICAgICBkb20uYXBwZW5kQ2hpbGQoZWwxLCBlbDIpOwotICAgICAgICB2YXIgZWwyID0gZG9t
LmNyZWF0ZVRleHROb2RlKCJcbiIpOwotICAgICAgICBkb20uYXBwZW5kQ2hpbGQoZWwxLCBlbDIp
OwotICAgICAgICBkb20uYXBwZW5kQ2hpbGQoZWwwLCBlbDEpOwotICAgICAgICByZXR1cm4gZWww
OwotICAgICAgfSwKLSAgICAgIGJ1aWxkUmVuZGVyTm9kZXM6IGZ1bmN0aW9uIGJ1aWxkUmVuZGVy
Tm9kZXMoZG9tLCBmcmFnbWVudCwgY29udGV4dHVhbEVsZW1lbnQpIHsKLSAgICAgICAgdmFyIGVs
ZW1lbnQ0ID0gZG9tLmNoaWxkQXQoZnJhZ21lbnQsIFswXSk7Ci0gICAgICAgIHZhciBlbGVtZW50
NSA9IGRvbS5jaGlsZEF0KGVsZW1lbnQ0LCBbMSwgM10pOwotICAgICAgICB2YXIgbW9ycGhzID0g
bmV3IEFycmF5KDMpOwotICAgICAgICBtb3JwaHNbMF0gPSBkb20uY3JlYXRlQXR0ck1vcnBoKGVs
ZW1lbnQ1LCAnb25rZXlkb3duJyk7Ci0gICAgICAgIG1vcnBoc1sxXSA9IGRvbS5jcmVhdGVNb3Jw
aEF0KGVsZW1lbnQ0LCAzLCAzKTsKLSAgICAgICAgbW9ycGhzWzJdID0gZG9tLmNyZWF0ZU1vcnBo
QXQoZWxlbWVudDQsIDUsIDUpOwotICAgICAgICByZXR1cm4gbW9ycGhzOwotICAgICAgfSwKLSAg
ICAgIHN0YXRlbWVudHM6IFtbImF0dHJpYnV0ZSIsICJvbmtleWRvd24iLCBbInN1YmV4cHIiLCAi
YWN0aW9uIiwgWyJjcmVhdGVUb2RvIl0sIFtdLCBbImxvYyIsIFtudWxsLCBbNCwgNDddLCBbNCwg
NzBdXV1dXSwgWyJjb250ZW50IiwgIm91dGxldCIsIFsibG9jIiwgW251bGwsIFs2LCA0XSwgWzYs
IDE0XV1dXSwgWyJibG9jayIsICJpZiIsIFtbInN1YmV4cHIiLCAiZ3QiLCBbWyJnZXQiLCAibW9k
ZWwubGVuZ3RoIiwgWyJsb2MiLCBbbnVsbCwgWzcsIDE0XSwgWzcsIDI2XV1dXSwgMF0sIFtdLCBb
ImxvYyIsIFtudWxsLCBbNywgMTBdLCBbNywgMjldXV1dXSwgW10sIDAsIG51bGwsIFsibG9jIiwg
W251bGwsIFs3LCA0XSwgWzE5LCAxMV1dXV1dLAotICAgICAgbG9jYWxzOiBbXSwKLSAgICAgIHRl
bXBsYXRlczogW2NoaWxkMF0KLSAgICB9OwotICB9KSgpKTsKLX0pOwotZGVmaW5lKCJ0b2RvbXZj
L3RlbXBsYXRlcy9jb21wbGV0ZWQiLCBbImV4cG9ydHMiXSwgZnVuY3Rpb24gKGV4cG9ydHMpIHsK
LSAgZXhwb3J0c1siZGVmYXVsdCJdID0gRW1iZXIuSFRNTEJhcnMudGVtcGxhdGUoKGZ1bmN0aW9u
ICgpIHsKLSAgICByZXR1cm4gewotICAgICAgbWV0YTogewotICAgICAgICAiZnJhZ21lbnRSZWFz
b24iOiB7Ci0gICAgICAgICAgIm5hbWUiOiAibWlzc2luZy13cmFwcGVyIiwKLSAgICAgICAgICAi
cHJvYmxlbXMiOiBbIndyb25nLXR5cGUiXQotICAgICAgICB9LAotICAgICAgICAicmV2aXNpb24i
OiAiRW1iZXJAMi42LjIiLAotICAgICAgICAibG9jIjogewotICAgICAgICAgICJzb3VyY2UiOiBu
dWxsLAotICAgICAgICAgICJzdGFydCI6IHsKLSAgICAgICAgICAgICJsaW5lIjogMSwKLSAgICAg
ICAgICAgICJjb2x1bW4iOiAwCi0gICAgICAgICAgfSwKLSAgICAgICAgICAiZW5kIjogewotICAg
ICAgICAgICAgImxpbmUiOiAxLAotICAgICAgICAgICAgImNvbHVtbiI6IDI1Ci0gICAgICAgICAg
fQotICAgICAgICB9LAotICAgICAgICAibW9kdWxlTmFtZSI6ICJ0b2RvbXZjL3RlbXBsYXRlcy9j
b21wbGV0ZWQuaGJzIgotICAgICAgfSwKLSAgICAgIGlzRW1wdHk6IGZhbHNlLAotICAgICAgYXJp
dHk6IDAsCi0gICAgICBjYWNoZWRGcmFnbWVudDogbnVsbCwKLSAgICAgIGhhc1JlbmRlcmVkOiBm
YWxzZSwKLSAgICAgIGJ1aWxkRnJhZ21lbnQ6IGZ1bmN0aW9uIGJ1aWxkRnJhZ21lbnQoZG9tKSB7
Ci0gICAgICAgIHZhciBlbDAgPSBkb20uY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOwotICAgICAg
ICB2YXIgZWwxID0gZG9tLmNyZWF0ZUNvbW1lbnQoIiIpOwotICAgICAgICBkb20uYXBwZW5kQ2hp
bGQoZWwwLCBlbDEpOwotICAgICAgICByZXR1cm4gZWwwOwotICAgICAgfSwKLSAgICAgIGJ1aWxk
UmVuZGVyTm9kZXM6IGZ1bmN0aW9uIGJ1aWxkUmVuZGVyTm9kZXMoZG9tLCBmcmFnbWVudCwgY29u
dGV4dHVhbEVsZW1lbnQpIHsKLSAgICAgICAgdmFyIG1vcnBocyA9IG5ldyBBcnJheSgxKTsKLSAg
ICAgICAgbW9ycGhzWzBdID0gZG9tLmNyZWF0ZU1vcnBoQXQoZnJhZ21lbnQsIDAsIDAsIGNvbnRl
eHR1YWxFbGVtZW50KTsKLSAgICAgICAgZG9tLmluc2VydEJvdW5kYXJ5KGZyYWdtZW50LCAwKTsK
LSAgICAgICAgZG9tLmluc2VydEJvdW5kYXJ5KGZyYWdtZW50LCBudWxsKTsKLSAgICAgICAgcmV0
dXJuIG1vcnBoczsKLSAgICAgIH0sCi0gICAgICBzdGF0ZW1lbnRzOiBbWyJpbmxpbmUiLCAidG9k
by1saXN0IiwgW10sIFsidG9kb3MiLCBbInN1YmV4cHIiLCAiQG11dCIsIFtbImdldCIsICJ0b2Rv
cyIsIFsibG9jIiwgW251bGwsIFsxLCAxOF0sIFsxLCAyM11dXV1dLCBbXSwgW11dXSwgWyJsb2Mi
LCBbbnVsbCwgWzEsIDBdLCBbMSwgMjVdXV1dXSwKLSAgICAgIGxvY2FsczogW10sCi0gICAgICB0
ZW1wbGF0ZXM6IFtdCi0gICAgfTsKLSAgfSkoKSk7Ci19KTsKLWRlZmluZSgidG9kb212Yy90ZW1w
bGF0ZXMvY29tcG9uZW50cy90b2RvLWl0ZW0iLCBbImV4cG9ydHMiXSwgZnVuY3Rpb24gKGV4cG9y
dHMpIHsKLSAgZXhwb3J0c1siZGVmYXVsdCJdID0gRW1iZXIuSFRNTEJhcnMudGVtcGxhdGUoKGZ1
bmN0aW9uICgpIHsKLSAgICByZXR1cm4gewotICAgICAgbWV0YTogewotICAgICAgICAiZnJhZ21l
bnRSZWFzb24iOiB7Ci0gICAgICAgICAgIm5hbWUiOiAibWlzc2luZy13cmFwcGVyIiwKLSAgICAg
ICAgICAicHJvYmxlbXMiOiBbIm11bHRpcGxlLW5vZGVzIl0KLSAgICAgICAgfSwKLSAgICAgICAg
InJldmlzaW9uIjogIkVtYmVyQDIuNi4yIiwKLSAgICAgICAgImxvYyI6IHsKLSAgICAgICAgICAi
c291cmNlIjogbnVsbCwKLSAgICAgICAgICAic3RhcnQiOiB7Ci0gICAgICAgICAgICAibGluZSI6
IDEsCi0gICAgICAgICAgICAiY29sdW1uIjogMAotICAgICAgICAgIH0sCi0gICAgICAgICAgImVu
ZCI6IHsKLSAgICAgICAgICAgICJsaW5lIjogNiwKLSAgICAgICAgICAgICJjb2x1bW4iOiAxNTMK
LSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJtb2R1bGVOYW1lIjogInRvZG9tdmMv
dGVtcGxhdGVzL2NvbXBvbmVudHMvdG9kby1pdGVtLmhicyIKLSAgICAgIH0sCi0gICAgICBpc0Vt
cHR5OiBmYWxzZSwKLSAgICAgIGFyaXR5OiAwLAotICAgICAgY2FjaGVkRnJhZ21lbnQ6IG51bGws
Ci0gICAgICBoYXNSZW5kZXJlZDogZmFsc2UsCi0gICAgICBidWlsZEZyYWdtZW50OiBmdW5jdGlv
biBidWlsZEZyYWdtZW50KGRvbSkgewotICAgICAgICB2YXIgZWwwID0gZG9tLmNyZWF0ZURvY3Vt
ZW50RnJhZ21lbnQoKTsKLSAgICAgICAgdmFyIGVsMSA9IGRvbS5jcmVhdGVFbGVtZW50KCJkaXYi
KTsKLSAgICAgICAgZG9tLnNldEF0dHJpYnV0ZShlbDEsICJjbGFzcyIsICJ2aWV3Iik7Ci0gICAg
ICAgIHZhciBlbDIgPSBkb20uY3JlYXRlVGV4dE5vZGUoIlxuICAiKTsKLSAgICAgICAgZG9tLmFw
cGVuZENoaWxkKGVsMSwgZWwyKTsKLSAgICAgICAgdmFyIGVsMiA9IGRvbS5jcmVhdGVFbGVtZW50
KCJpbnB1dCIpOwotICAgICAgICBkb20uc2V0QXR0cmlidXRlKGVsMiwgInR5cGUiLCAiY2hlY2ti
b3giKTsKLSAgICAgICAgZG9tLnNldEF0dHJpYnV0ZShlbDIsICJjbGFzcyIsICJ0b2dnbGUiKTsK
LSAgICAgICAgZG9tLmFwcGVuZENoaWxkKGVsMSwgZWwyKTsKLSAgICAgICAgdmFyIGVsMiA9IGRv
bS5jcmVhdGVUZXh0Tm9kZSgiXG4gICIpOwotICAgICAgICBkb20uYXBwZW5kQ2hpbGQoZWwxLCBl
bDIpOwotICAgICAgICB2YXIgZWwyID0gZG9tLmNyZWF0ZUVsZW1lbnQoImxhYmVsIik7Ci0gICAg
ICAgIHZhciBlbDMgPSBkb20uY3JlYXRlQ29tbWVudCgiIik7Ci0gICAgICAgIGRvbS5hcHBlbmRD
aGlsZChlbDIsIGVsMyk7Ci0gICAgICAgIGRvbS5hcHBlbmRDaGlsZChlbDEsIGVsMik7Ci0gICAg
ICAgIHZhciBlbDIgPSBkb20uY3JlYXRlVGV4dE5vZGUoIlxuICAiKTsKLSAgICAgICAgZG9tLmFw
cGVuZENoaWxkKGVsMSwgZWwyKTsKLSAgICAgICAgdmFyIGVsMiA9IGRvbS5jcmVhdGVFbGVtZW50
KCJidXR0b24iKTsKLSAgICAgICAgZG9tLnNldEF0dHJpYnV0ZShlbDIsICJjbGFzcyIsICJkZXN0
cm95Iik7Ci0gICAgICAgIGRvbS5hcHBlbmRDaGlsZChlbDEsIGVsMik7Ci0gICAgICAgIHZhciBl
bDIgPSBkb20uY3JlYXRlVGV4dE5vZGUoIlxuIik7Ci0gICAgICAgIGRvbS5hcHBlbmRDaGlsZChl
bDEsIGVsMik7Ci0gICAgICAgIGRvbS5hcHBlbmRDaGlsZChlbDAsIGVsMSk7Ci0gICAgICAgIHZh
ciBlbDEgPSBkb20uY3JlYXRlVGV4dE5vZGUoIlxuIik7Ci0gICAgICAgIGRvbS5hcHBlbmRDaGls
ZChlbDAsIGVsMSk7Ci0gICAgICAgIHZhciBlbDEgPSBkb20uY3JlYXRlRWxlbWVudCgiaW5wdXQi
KTsKLSAgICAgICAgZG9tLnNldEF0dHJpYnV0ZShlbDEsICJ0eXBlIiwgInRleHQiKTsKLSAgICAg
ICAgZG9tLnNldEF0dHJpYnV0ZShlbDEsICJjbGFzcyIsICJlZGl0Iik7Ci0gICAgICAgIGRvbS5z
ZXRBdHRyaWJ1dGUoZWwxLCAiYXV0b2ZvY3VzIiwgIiIpOwotICAgICAgICBkb20uYXBwZW5kQ2hp
bGQoZWwwLCBlbDEpOwotICAgICAgICByZXR1cm4gZWwwOwotICAgICAgfSwKLSAgICAgIGJ1aWxk
UmVuZGVyTm9kZXM6IGZ1bmN0aW9uIGJ1aWxkUmVuZGVyTm9kZXMoZG9tLCBmcmFnbWVudCwgY29u
dGV4dHVhbEVsZW1lbnQpIHsKLSAgICAgICAgdmFyIGVsZW1lbnQwID0gZG9tLmNoaWxkQXQoZnJh
Z21lbnQsIFswXSk7Ci0gICAgICAgIHZhciBlbGVtZW50MSA9IGRvbS5jaGlsZEF0KGVsZW1lbnQw
LCBbMV0pOwotICAgICAgICBpZiAodGhpcy5jYWNoZWRGcmFnbWVudCkgewotICAgICAgICAgIGRv
bS5yZXBhaXJDbG9uZWROb2RlKGVsZW1lbnQxLCBbXSwgdHJ1ZSk7Ci0gICAgICAgIH0KLSAgICAg
ICAgdmFyIGVsZW1lbnQyID0gZG9tLmNoaWxkQXQoZWxlbWVudDAsIFszXSk7Ci0gICAgICAgIHZh
ciBlbGVtZW50MyA9IGRvbS5jaGlsZEF0KGVsZW1lbnQwLCBbNV0pOwotICAgICAgICB2YXIgZWxl
bWVudDQgPSBkb20uY2hpbGRBdChmcmFnbWVudCwgWzJdKTsKLSAgICAgICAgdmFyIG1vcnBocyA9
IG5ldyBBcnJheSg4KTsKLSAgICAgICAgbW9ycGhzWzBdID0gZG9tLmNyZWF0ZUF0dHJNb3JwaChl
bGVtZW50MSwgJ2NoZWNrZWQnKTsKLSAgICAgICAgbW9ycGhzWzFdID0gZG9tLmNyZWF0ZUF0dHJN
b3JwaChlbGVtZW50MSwgJ29uY2hhbmdlJyk7Ci0gICAgICAgIG1vcnBoc1syXSA9IGRvbS5jcmVh
dGVBdHRyTW9ycGgoZWxlbWVudDIsICdvbmRibGNsaWNrJyk7Ci0gICAgICAgIG1vcnBoc1szXSA9
IGRvbS5jcmVhdGVNb3JwaEF0KGVsZW1lbnQyLCAwLCAwKTsKLSAgICAgICAgbW9ycGhzWzRdID0g
ZG9tLmNyZWF0ZUF0dHJNb3JwaChlbGVtZW50MywgJ29uY2xpY2snKTsKLSAgICAgICAgbW9ycGhz
WzVdID0gZG9tLmNyZWF0ZUF0dHJNb3JwaChlbGVtZW50NCwgJ3ZhbHVlJyk7Ci0gICAgICAgIG1v
cnBoc1s2XSA9IGRvbS5jcmVhdGVBdHRyTW9ycGgoZWxlbWVudDQsICdvbmJsdXInKTsKLSAgICAg
ICAgbW9ycGhzWzddID0gZG9tLmNyZWF0ZUF0dHJNb3JwaChlbGVtZW50NCwgJ29ua2V5ZG93bicp
OwotICAgICAgICByZXR1cm4gbW9ycGhzOwotICAgICAgfSwKLSAgICAgIHN0YXRlbWVudHM6IFtb
ImF0dHJpYnV0ZSIsICJjaGVja2VkIiwgWyJnZXQiLCAidG9kby5jb21wbGV0ZWQiLCBbImxvYyIs
IFtudWxsLCBbMiwgNTBdLCBbMiwgNjRdXV1dXSwgWyJhdHRyaWJ1dGUiLCAib25jaGFuZ2UiLCBb
InN1YmV4cHIiLCAiYWN0aW9uIiwgWyJ0b2dnbGVDb21wbGV0ZWQiXSwgW10sIFsibG9jIiwgW251
bGwsIFsyLCA3Nl0sIFsyLCAxMDRdXV1dXSwgWyJhdHRyaWJ1dGUiLCAib25kYmxjbGljayIsIFsi
c3ViZXhwciIsICJhY3Rpb24iLCBbInN0YXJ0RWRpdGluZyJdLCBbXSwgWyJsb2MiLCBbbnVsbCwg
WzMsIDIwXSwgWzMsIDQ1XV1dXV0sIFsiY29udGVudCIsICJ0b2RvLnRpdGxlIiwgWyJsb2MiLCBb
bnVsbCwgWzMsIDQ2XSwgWzMsIDYwXV1dXSwgWyJhdHRyaWJ1dGUiLCAib25jbGljayIsIFsic3Vi
ZXhwciIsICJhY3Rpb24iLCBbInJlbW92ZVRvZG8iXSwgW10sIFsibG9jIiwgW251bGwsIFs0LCAx
OF0sIFs0LCA0MV1dXV1dLCBbImF0dHJpYnV0ZSIsICJ2YWx1ZSIsIFsiZ2V0IiwgInRvZG8udGl0
bGUiLCBbImxvYyIsIFtudWxsLCBbNiwgNDBdLCBbNiwgNTBdXV1dXSwgWyJhdHRyaWJ1dGUiLCAi
b25ibHVyIiwgWyJzdWJleHByIiwgImFjdGlvbiIsIFsiZG9uZUVkaXRpbmciXSwgWyJ2YWx1ZSIs
ICJ0YXJnZXQudmFsdWUiXSwgWyJsb2MiLCBbbnVsbCwgWzYsIDYwXSwgWzYsIDEwNV1dXV1dLCBb
ImF0dHJpYnV0ZSIsICJvbmtleWRvd24iLCBbInN1YmV4cHIiLCAiYWN0aW9uIiwgWyJoYW5kbGVL
ZXlkb3duIl0sIFtdLCBbImxvYyIsIFtudWxsLCBbNiwgMTE2XSwgWzYsIDE0Ml1dXV1dXSwKLSAg
ICAgIGxvY2FsczogW10sCi0gICAgICB0ZW1wbGF0ZXM6IFtdCi0gICAgfTsKLSAgfSkoKSk7Ci19
KTsKLWRlZmluZSgidG9kb212Yy90ZW1wbGF0ZXMvY29tcG9uZW50cy90b2RvLWxpc3QiLCBbImV4
cG9ydHMiXSwgZnVuY3Rpb24gKGV4cG9ydHMpIHsKLSAgZXhwb3J0c1siZGVmYXVsdCJdID0gRW1i
ZXIuSFRNTEJhcnMudGVtcGxhdGUoKGZ1bmN0aW9uICgpIHsKLSAgICB2YXIgY2hpbGQwID0gKGZ1
bmN0aW9uICgpIHsKLSAgICAgIHZhciBjaGlsZDAgPSAoZnVuY3Rpb24gKCkgewotICAgICAgICBy
ZXR1cm4gewotICAgICAgICAgIG1ldGE6IHsKLSAgICAgICAgICAgICJmcmFnbWVudFJlYXNvbiI6
IGZhbHNlLAotICAgICAgICAgICAgInJldmlzaW9uIjogIkVtYmVyQDIuNi4yIiwKLSAgICAgICAg
ICAgICJsb2MiOiB7Ci0gICAgICAgICAgICAgICJzb3VyY2UiOiBudWxsLAotICAgICAgICAgICAg
ICAic3RhcnQiOiB7Ci0gICAgICAgICAgICAgICAgImxpbmUiOiAyLAotICAgICAgICAgICAgICAg
ICJjb2x1bW4iOiAyCi0gICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICJlbmQiOiB7Ci0g
ICAgICAgICAgICAgICAgImxpbmUiOiA0LAotICAgICAgICAgICAgICAgICJjb2x1bW4iOiAyCi0g
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAibW9kdWxlTmFtZSI6
ICJ0b2RvbXZjL3RlbXBsYXRlcy9jb21wb25lbnRzL3RvZG8tbGlzdC5oYnMiCi0gICAgICAgICAg
fSwKLSAgICAgICAgICBpc0VtcHR5OiBmYWxzZSwKLSAgICAgICAgICBhcml0eTogMCwKLSAgICAg
ICAgICBjYWNoZWRGcmFnbWVudDogbnVsbCwKLSAgICAgICAgICBoYXNSZW5kZXJlZDogZmFsc2Us
Ci0gICAgICAgICAgYnVpbGRGcmFnbWVudDogZnVuY3Rpb24gYnVpbGRGcmFnbWVudChkb20pIHsK
LSAgICAgICAgICAgIHZhciBlbDAgPSBkb20uY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOwotICAg
ICAgICAgICAgdmFyIGVsMSA9IGRvbS5jcmVhdGVUZXh0Tm9kZSgiICAgICIpOwotICAgICAgICAg
ICAgZG9tLmFwcGVuZENoaWxkKGVsMCwgZWwxKTsKLSAgICAgICAgICAgIHZhciBlbDEgPSBkb20u
Y3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKLSAgICAgICAgICAgIGRvbS5zZXRBdHRyaWJ1dGUoZWwx
LCAidHlwZSIsICJjaGVja2JveCIpOwotICAgICAgICAgICAgZG9tLnNldEF0dHJpYnV0ZShlbDEs
ICJpZCIsICJ0b2dnbGUtYWxsIik7Ci0gICAgICAgICAgICBkb20uYXBwZW5kQ2hpbGQoZWwwLCBl
bDEpOwotICAgICAgICAgICAgdmFyIGVsMSA9IGRvbS5jcmVhdGVUZXh0Tm9kZSgiXG4iKTsKLSAg
ICAgICAgICAgIGRvbS5hcHBlbmRDaGlsZChlbDAsIGVsMSk7Ci0gICAgICAgICAgICByZXR1cm4g
ZWwwOwotICAgICAgICAgIH0sCi0gICAgICAgICAgYnVpbGRSZW5kZXJOb2RlczogZnVuY3Rpb24g
YnVpbGRSZW5kZXJOb2Rlcyhkb20sIGZyYWdtZW50LCBjb250ZXh0dWFsRWxlbWVudCkgewotICAg
ICAgICAgICAgdmFyIGVsZW1lbnQwID0gZG9tLmNoaWxkQXQoZnJhZ21lbnQsIFsxXSk7Ci0gICAg
ICAgICAgICBpZiAodGhpcy5jYWNoZWRGcmFnbWVudCkgewotICAgICAgICAgICAgICBkb20ucmVw
YWlyQ2xvbmVkTm9kZShlbGVtZW50MCwgW10sIHRydWUpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgdmFyIG1vcnBocyA9IG5ldyBBcnJheSgyKTsKLSAgICAgICAgICAgIG1vcnBoc1swXSA9
IGRvbS5jcmVhdGVBdHRyTW9ycGgoZWxlbWVudDAsICdjaGVja2VkJyk7Ci0gICAgICAgICAgICBt
b3JwaHNbMV0gPSBkb20uY3JlYXRlQXR0ck1vcnBoKGVsZW1lbnQwLCAnb25jaGFuZ2UnKTsKLSAg
ICAgICAgICAgIHJldHVybiBtb3JwaHM7Ci0gICAgICAgICAgfSwKLSAgICAgICAgICBzdGF0ZW1l
bnRzOiBbWyJhdHRyaWJ1dGUiLCAiY2hlY2tlZCIsIFsiZ2V0IiwgImFsbENvbXBsZXRlZCIsIFsi
bG9jIiwgW251bGwsIFszLCA1M10sIFszLCA2NV1dXV1dLCBbImF0dHJpYnV0ZSIsICJvbmNoYW5n
ZSIsIFsic3ViZXhwciIsICJhY3Rpb24iLCBbInRvZ2dsZUFsbCJdLCBbXSwgWyJsb2MiLCBbbnVs
bCwgWzMsIDc3XSwgWzMsIDk5XV1dXV1dLAotICAgICAgICAgIGxvY2FsczogW10sCi0gICAgICAg
ICAgdGVtcGxhdGVzOiBbXQotICAgICAgICB9OwotICAgICAgfSkoKTsKLSAgICAgIHZhciBjaGls
ZDEgPSAoZnVuY3Rpb24gKCkgewotICAgICAgICByZXR1cm4gewotICAgICAgICAgIG1ldGE6IHsK
LSAgICAgICAgICAgICJmcmFnbWVudFJlYXNvbiI6IGZhbHNlLAotICAgICAgICAgICAgInJldmlz
aW9uIjogIkVtYmVyQDIuNi4yIiwKLSAgICAgICAgICAgICJsb2MiOiB7Ci0gICAgICAgICAgICAg
ICJzb3VyY2UiOiBudWxsLAotICAgICAgICAgICAgICAic3RhcnQiOiB7Ci0gICAgICAgICAgICAg
ICAgImxpbmUiOiA2LAotICAgICAgICAgICAgICAgICJjb2x1bW4iOiA0Ci0gICAgICAgICAgICAg
IH0sCi0gICAgICAgICAgICAgICJlbmQiOiB7Ci0gICAgICAgICAgICAgICAgImxpbmUiOiA4LAot
ICAgICAgICAgICAgICAgICJjb2x1bW4iOiA0Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0sCi0gICAgICAgICAgICAibW9kdWxlTmFtZSI6ICJ0b2RvbXZjL3RlbXBsYXRlcy9jb21wb25l
bnRzL3RvZG8tbGlzdC5oYnMiCi0gICAgICAgICAgfSwKLSAgICAgICAgICBpc0VtcHR5OiBmYWxz
ZSwKLSAgICAgICAgICBhcml0eTogMSwKLSAgICAgICAgICBjYWNoZWRGcmFnbWVudDogbnVsbCwK
LSAgICAgICAgICBoYXNSZW5kZXJlZDogZmFsc2UsCi0gICAgICAgICAgYnVpbGRGcmFnbWVudDog
ZnVuY3Rpb24gYnVpbGRGcmFnbWVudChkb20pIHsKLSAgICAgICAgICAgIHZhciBlbDAgPSBkb20u
Y3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOwotICAgICAgICAgICAgdmFyIGVsMSA9IGRvbS5jcmVh
dGVUZXh0Tm9kZSgiICAgICAgIik7Ci0gICAgICAgICAgICBkb20uYXBwZW5kQ2hpbGQoZWwwLCBl
bDEpOwotICAgICAgICAgICAgdmFyIGVsMSA9IGRvbS5jcmVhdGVDb21tZW50KCIiKTsKLSAgICAg
ICAgICAgIGRvbS5hcHBlbmRDaGlsZChlbDAsIGVsMSk7Ci0gICAgICAgICAgICB2YXIgZWwxID0g
ZG9tLmNyZWF0ZVRleHROb2RlKCJcbiIpOwotICAgICAgICAgICAgZG9tLmFwcGVuZENoaWxkKGVs
MCwgZWwxKTsKLSAgICAgICAgICAgIHJldHVybiBlbDA7Ci0gICAgICAgICAgfSwKLSAgICAgICAg
ICBidWlsZFJlbmRlck5vZGVzOiBmdW5jdGlvbiBidWlsZFJlbmRlck5vZGVzKGRvbSwgZnJhZ21l
bnQsIGNvbnRleHR1YWxFbGVtZW50KSB7Ci0gICAgICAgICAgICB2YXIgbW9ycGhzID0gbmV3IEFy
cmF5KDEpOwotICAgICAgICAgICAgbW9ycGhzWzBdID0gZG9tLmNyZWF0ZU1vcnBoQXQoZnJhZ21l
bnQsIDEsIDEsIGNvbnRleHR1YWxFbGVtZW50KTsKLSAgICAgICAgICAgIHJldHVybiBtb3JwaHM7
Ci0gICAgICAgICAgfSwKLSAgICAgICAgICBzdGF0ZW1lbnRzOiBbWyJpbmxpbmUiLCAidG9kby1p
dGVtIiwgW10sIFsidG9kbyIsIFsic3ViZXhwciIsICJAbXV0IiwgW1siZ2V0IiwgInRvZG8iLCBb
ImxvYyIsIFtudWxsLCBbNywgMjNdLCBbNywgMjddXV1dXSwgW10sIFtdXSwgIm9uU3RhcnRFZGl0
IiwgWyJzdWJleHByIiwgImFjdGlvbiIsIFsiZGlzYWJsZVRvZ2dsZSJdLCBbXSwgWyJsb2MiLCBb
bnVsbCwgWzcsIDQwXSwgWzcsIDY0XV1dXSwgIm9uRW5kRWRpdCIsIFsic3ViZXhwciIsICJhY3Rp
b24iLCBbImVuYWJsZVRvZ2dsZSJdLCBbXSwgWyJsb2MiLCBbbnVsbCwgWzcsIDc1XSwgWzcsIDk4
XV1dXV0sIFsibG9jIiwgW251bGwsIFs3LCA2XSwgWzcsIDEwMF1dXV1dLAotICAgICAgICAgIGxv
Y2FsczogWyJ0b2RvIl0sCi0gICAgICAgICAgdGVtcGxhdGVzOiBbXQotICAgICAgICB9OwotICAg
ICAgfSkoKTsKLSAgICAgIHJldHVybiB7Ci0gICAgICAgIG1ldGE6IHsKLSAgICAgICAgICAiZnJh
Z21lbnRSZWFzb24iOiB7Ci0gICAgICAgICAgICAibmFtZSI6ICJtaXNzaW5nLXdyYXBwZXIiLAot
ICAgICAgICAgICAgInByb2JsZW1zIjogWyJ3cm9uZy10eXBlIiwgIm11bHRpcGxlLW5vZGVzIl0K
LSAgICAgICAgICB9LAotICAgICAgICAgICJyZXZpc2lvbiI6ICJFbWJlckAyLjYuMiIsCi0gICAg
ICAgICAgImxvYyI6IHsKLSAgICAgICAgICAgICJzb3VyY2UiOiBudWxsLAotICAgICAgICAgICAg
InN0YXJ0IjogewotICAgICAgICAgICAgICAibGluZSI6IDEsCi0gICAgICAgICAgICAgICJjb2x1
bW4iOiAwCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgImVuZCI6IHsKLSAgICAgICAgICAg
ICAgImxpbmUiOiAxMCwKLSAgICAgICAgICAgICAgImNvbHVtbiI6IDAKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICB9LAotICAgICAgICAgICJtb2R1bGVOYW1lIjogInRvZG9tdmMvdGVtcGxhdGVz
L2NvbXBvbmVudHMvdG9kby1saXN0LmhicyIKLSAgICAgICAgfSwKLSAgICAgICAgaXNFbXB0eTog
ZmFsc2UsCi0gICAgICAgIGFyaXR5OiAwLAotICAgICAgICBjYWNoZWRGcmFnbWVudDogbnVsbCwK
LSAgICAgICAgaGFzUmVuZGVyZWQ6IGZhbHNlLAotICAgICAgICBidWlsZEZyYWdtZW50OiBmdW5j
dGlvbiBidWlsZEZyYWdtZW50KGRvbSkgewotICAgICAgICAgIHZhciBlbDAgPSBkb20uY3JlYXRl
RG9jdW1lbnRGcmFnbWVudCgpOwotICAgICAgICAgIHZhciBlbDEgPSBkb20uY3JlYXRlQ29tbWVu
dCgiIik7Ci0gICAgICAgICAgZG9tLmFwcGVuZENoaWxkKGVsMCwgZWwxKTsKLSAgICAgICAgICB2
YXIgZWwxID0gZG9tLmNyZWF0ZVRleHROb2RlKCIgICIpOwotICAgICAgICAgIGRvbS5hcHBlbmRD
aGlsZChlbDAsIGVsMSk7Ci0gICAgICAgICAgdmFyIGVsMSA9IGRvbS5jcmVhdGVFbGVtZW50KCJ1
bCIpOwotICAgICAgICAgIGRvbS5zZXRBdHRyaWJ1dGUoZWwxLCAiaWQiLCAidG9kby1saXN0Iik7
Ci0gICAgICAgICAgZG9tLnNldEF0dHJpYnV0ZShlbDEsICJjbGFzcyIsICJ0b2RvLWxpc3QiKTsK
LSAgICAgICAgICB2YXIgZWwyID0gZG9tLmNyZWF0ZVRleHROb2RlKCJcbiIpOwotICAgICAgICAg
IGRvbS5hcHBlbmRDaGlsZChlbDEsIGVsMik7Ci0gICAgICAgICAgdmFyIGVsMiA9IGRvbS5jcmVh
dGVDb21tZW50KCIiKTsKLSAgICAgICAgICBkb20uYXBwZW5kQ2hpbGQoZWwxLCBlbDIpOwotICAg
ICAgICAgIHZhciBlbDIgPSBkb20uY3JlYXRlVGV4dE5vZGUoIiAgIik7Ci0gICAgICAgICAgZG9t
LmFwcGVuZENoaWxkKGVsMSwgZWwyKTsKLSAgICAgICAgICBkb20uYXBwZW5kQ2hpbGQoZWwwLCBl
bDEpOwotICAgICAgICAgIHZhciBlbDEgPSBkb20uY3JlYXRlVGV4dE5vZGUoIlxuIik7Ci0gICAg
ICAgICAgZG9tLmFwcGVuZENoaWxkKGVsMCwgZWwxKTsKLSAgICAgICAgICByZXR1cm4gZWwwOwot
ICAgICAgICB9LAotICAgICAgICBidWlsZFJlbmRlck5vZGVzOiBmdW5jdGlvbiBidWlsZFJlbmRl
ck5vZGVzKGRvbSwgZnJhZ21lbnQsIGNvbnRleHR1YWxFbGVtZW50KSB7Ci0gICAgICAgICAgdmFy
IG1vcnBocyA9IG5ldyBBcnJheSgyKTsKLSAgICAgICAgICBtb3JwaHNbMF0gPSBkb20uY3JlYXRl
TW9ycGhBdChmcmFnbWVudCwgMCwgMCwgY29udGV4dHVhbEVsZW1lbnQpOwotICAgICAgICAgIG1v
cnBoc1sxXSA9IGRvbS5jcmVhdGVNb3JwaEF0KGRvbS5jaGlsZEF0KGZyYWdtZW50LCBbMl0pLCAx
LCAxKTsKLSAgICAgICAgICBkb20uaW5zZXJ0Qm91bmRhcnkoZnJhZ21lbnQsIDApOwotICAgICAg
ICAgIHJldHVybiBtb3JwaHM7Ci0gICAgICAgIH0sCi0gICAgICAgIHN0YXRlbWVudHM6IFtbImJs
b2NrIiwgImlmIiwgW1siZ2V0IiwgImNhblRvZ2dsZSIsIFsibG9jIiwgW251bGwsIFsyLCA4XSwg
WzIsIDE3XV1dXV0sIFtdLCAwLCBudWxsLCBbImxvYyIsIFtudWxsLCBbMiwgMl0sIFs0LCA5XV1d
XSwgWyJibG9jayIsICJlYWNoIiwgW1siZ2V0IiwgInRvZG9zIiwgWyJsb2MiLCBbbnVsbCwgWzYs
IDEyXSwgWzYsIDE3XV1dXV0sIFtdLCAxLCBudWxsLCBbImxvYyIsIFtudWxsLCBbNiwgNF0sIFs4
LCAxM11dXV1dLAotICAgICAgICBsb2NhbHM6IFtdLAotICAgICAgICB0ZW1wbGF0ZXM6IFtjaGls
ZDAsIGNoaWxkMV0KLSAgICAgIH07Ci0gICAgfSkoKTsKLSAgICByZXR1cm4gewotICAgICAgbWV0
YTogewotICAgICAgICAiZnJhZ21lbnRSZWFzb24iOiB7Ci0gICAgICAgICAgIm5hbWUiOiAibWlz
c2luZy13cmFwcGVyIiwKLSAgICAgICAgICAicHJvYmxlbXMiOiBbIndyb25nLXR5cGUiXQotICAg
ICAgICB9LAotICAgICAgICAicmV2aXNpb24iOiAiRW1iZXJAMi42LjIiLAotICAgICAgICAibG9j
IjogewotICAgICAgICAgICJzb3VyY2UiOiBudWxsLAotICAgICAgICAgICJzdGFydCI6IHsKLSAg
ICAgICAgICAgICJsaW5lIjogMSwKLSAgICAgICAgICAgICJjb2x1bW4iOiAwCi0gICAgICAgICAg
fSwKLSAgICAgICAgICAiZW5kIjogewotICAgICAgICAgICAgImxpbmUiOiAxMSwKLSAgICAgICAg
ICAgICJjb2x1bW4iOiAwCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAibW9kdWxl
TmFtZSI6ICJ0b2RvbXZjL3RlbXBsYXRlcy9jb21wb25lbnRzL3RvZG8tbGlzdC5oYnMiCi0gICAg
ICB9LAotICAgICAgaXNFbXB0eTogZmFsc2UsCi0gICAgICBhcml0eTogMCwKLSAgICAgIGNhY2hl
ZEZyYWdtZW50OiBudWxsLAotICAgICAgaGFzUmVuZGVyZWQ6IGZhbHNlLAotICAgICAgYnVpbGRG
cmFnbWVudDogZnVuY3Rpb24gYnVpbGRGcmFnbWVudChkb20pIHsKLSAgICAgICAgdmFyIGVsMCA9
IGRvbS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7Ci0gICAgICAgIHZhciBlbDEgPSBkb20uY3Jl
YXRlQ29tbWVudCgiIik7Ci0gICAgICAgIGRvbS5hcHBlbmRDaGlsZChlbDAsIGVsMSk7Ci0gICAg
ICAgIHJldHVybiBlbDA7Ci0gICAgICB9LAotICAgICAgYnVpbGRSZW5kZXJOb2RlczogZnVuY3Rp
b24gYnVpbGRSZW5kZXJOb2Rlcyhkb20sIGZyYWdtZW50LCBjb250ZXh0dWFsRWxlbWVudCkgewot
ICAgICAgICB2YXIgbW9ycGhzID0gbmV3IEFycmF5KDEpOwotICAgICAgICBtb3JwaHNbMF0gPSBk
b20uY3JlYXRlTW9ycGhBdChmcmFnbWVudCwgMCwgMCwgY29udGV4dHVhbEVsZW1lbnQpOwotICAg
ICAgICBkb20uaW5zZXJ0Qm91bmRhcnkoZnJhZ21lbnQsIDApOwotICAgICAgICBkb20uaW5zZXJ0
Qm91bmRhcnkoZnJhZ21lbnQsIG51bGwpOwotICAgICAgICByZXR1cm4gbW9ycGhzOwotICAgICAg
fSwKLSAgICAgIHN0YXRlbWVudHM6IFtbImJsb2NrIiwgImlmIiwgW1siZ2V0IiwgInRvZG9zLmxl
bmd0aCIsIFsibG9jIiwgW251bGwsIFsxLCA2XSwgWzEsIDE4XV1dXV0sIFtdLCAwLCBudWxsLCBb
ImxvYyIsIFtudWxsLCBbMSwgMF0sIFsxMCwgN11dXV1dLAotICAgICAgbG9jYWxzOiBbXSwKLSAg
ICAgIHRlbXBsYXRlczogW2NoaWxkMF0KLSAgICB9OwotICB9KSgpKTsKLX0pOwotZGVmaW5lKCJ0
b2RvbXZjL3RlbXBsYXRlcy9pbmRleCIsIFsiZXhwb3J0cyJdLCBmdW5jdGlvbiAoZXhwb3J0cykg
ewotICBleHBvcnRzWyJkZWZhdWx0Il0gPSBFbWJlci5IVE1MQmFycy50ZW1wbGF0ZSgoZnVuY3Rp
b24gKCkgewotICAgIHZhciBjaGlsZDAgPSAoZnVuY3Rpb24gKCkgewotICAgICAgcmV0dXJuIHsK
LSAgICAgICAgbWV0YTogewotICAgICAgICAgICJmcmFnbWVudFJlYXNvbiI6IHsKLSAgICAgICAg
ICAgICJuYW1lIjogIm1pc3Npbmctd3JhcHBlciIsCi0gICAgICAgICAgICAicHJvYmxlbXMiOiBb
Indyb25nLXR5cGUiXQotICAgICAgICAgIH0sCi0gICAgICAgICAgInJldmlzaW9uIjogIkVtYmVy
QDIuNi4yIiwKLSAgICAgICAgICAibG9jIjogewotICAgICAgICAgICAgInNvdXJjZSI6IG51bGws
Ci0gICAgICAgICAgICAic3RhcnQiOiB7Ci0gICAgICAgICAgICAgICJsaW5lIjogMSwKLSAgICAg
ICAgICAgICAgImNvbHVtbiI6IDAKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAiZW5kIjog
ewotICAgICAgICAgICAgICAibGluZSI6IDMsCi0gICAgICAgICAgICAgICJjb2x1bW4iOiAwCi0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgfSwKLSAgICAgICAgICAibW9kdWxlTmFtZSI6ICJ0b2Rv
bXZjL3RlbXBsYXRlcy9pbmRleC5oYnMiCi0gICAgICAgIH0sCi0gICAgICAgIGlzRW1wdHk6IGZh
bHNlLAotICAgICAgICBhcml0eTogMCwKLSAgICAgICAgY2FjaGVkRnJhZ21lbnQ6IG51bGwsCi0g
ICAgICAgIGhhc1JlbmRlcmVkOiBmYWxzZSwKLSAgICAgICAgYnVpbGRGcmFnbWVudDogZnVuY3Rp
b24gYnVpbGRGcmFnbWVudChkb20pIHsKLSAgICAgICAgICB2YXIgZWwwID0gZG9tLmNyZWF0ZURv
Y3VtZW50RnJhZ21lbnQoKTsKLSAgICAgICAgICB2YXIgZWwxID0gZG9tLmNyZWF0ZVRleHROb2Rl
KCIgICIpOwotICAgICAgICAgIGRvbS5hcHBlbmRDaGlsZChlbDAsIGVsMSk7Ci0gICAgICAgICAg
dmFyIGVsMSA9IGRvbS5jcmVhdGVDb21tZW50KCIiKTsKLSAgICAgICAgICBkb20uYXBwZW5kQ2hp
bGQoZWwwLCBlbDEpOwotICAgICAgICAgIHZhciBlbDEgPSBkb20uY3JlYXRlVGV4dE5vZGUoIlxu
Iik7Ci0gICAgICAgICAgZG9tLmFwcGVuZENoaWxkKGVsMCwgZWwxKTsKLSAgICAgICAgICByZXR1
cm4gZWwwOwotICAgICAgICB9LAotICAgICAgICBidWlsZFJlbmRlck5vZGVzOiBmdW5jdGlvbiBi
dWlsZFJlbmRlck5vZGVzKGRvbSwgZnJhZ21lbnQsIGNvbnRleHR1YWxFbGVtZW50KSB7Ci0gICAg
ICAgICAgdmFyIG1vcnBocyA9IG5ldyBBcnJheSgxKTsKLSAgICAgICAgICBtb3JwaHNbMF0gPSBk
b20uY3JlYXRlTW9ycGhBdChmcmFnbWVudCwgMSwgMSwgY29udGV4dHVhbEVsZW1lbnQpOwotICAg
ICAgICAgIHJldHVybiBtb3JwaHM7Ci0gICAgICAgIH0sCi0gICAgICAgIHN0YXRlbWVudHM6IFtb
ImlubGluZSIsICJ0b2RvLWxpc3QiLCBbXSwgWyJ0b2RvcyIsIFsic3ViZXhwciIsICJAbXV0Iiwg
W1siZ2V0IiwgIm1vZGVsIiwgWyJsb2MiLCBbbnVsbCwgWzIsIDIwXSwgWzIsIDI1XV1dXV0sIFtd
LCBbXV1dLCBbImxvYyIsIFtudWxsLCBbMiwgMl0sIFsyLCAyN11dXV1dLAotICAgICAgICBsb2Nh
bHM6IFtdLAotICAgICAgICB0ZW1wbGF0ZXM6IFtdCi0gICAgICB9OwotICAgIH0pKCk7Ci0gICAg
cmV0dXJuIHsKLSAgICAgIG1ldGE6IHsKLSAgICAgICAgImZyYWdtZW50UmVhc29uIjogewotICAg
ICAgICAgICJuYW1lIjogIm1pc3Npbmctd3JhcHBlciIsCi0gICAgICAgICAgInByb2JsZW1zIjog
WyJ3cm9uZy10eXBlIl0KLSAgICAgICAgfSwKLSAgICAgICAgInJldmlzaW9uIjogIkVtYmVyQDIu
Ni4yIiwKLSAgICAgICAgImxvYyI6IHsKLSAgICAgICAgICAic291cmNlIjogbnVsbCwKLSAgICAg
ICAgICAic3RhcnQiOiB7Ci0gICAgICAgICAgICAibGluZSI6IDEsCi0gICAgICAgICAgICAiY29s
dW1uIjogMAotICAgICAgICAgIH0sCi0gICAgICAgICAgImVuZCI6IHsKLSAgICAgICAgICAgICJs
aW5lIjogNCwKLSAgICAgICAgICAgICJjb2x1bW4iOiAwCi0gICAgICAgICAgfQotICAgICAgICB9
LAotICAgICAgICAibW9kdWxlTmFtZSI6ICJ0b2RvbXZjL3RlbXBsYXRlcy9pbmRleC5oYnMiCi0g
ICAgICB9LAotICAgICAgaXNFbXB0eTogZmFsc2UsCi0gICAgICBhcml0eTogMCwKLSAgICAgIGNh
Y2hlZEZyYWdtZW50OiBudWxsLAotICAgICAgaGFzUmVuZGVyZWQ6IGZhbHNlLAotICAgICAgYnVp
bGRGcmFnbWVudDogZnVuY3Rpb24gYnVpbGRGcmFnbWVudChkb20pIHsKLSAgICAgICAgdmFyIGVs
MCA9IGRvbS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7Ci0gICAgICAgIHZhciBlbDEgPSBkb20u
Y3JlYXRlQ29tbWVudCgiIik7Ci0gICAgICAgIGRvbS5hcHBlbmRDaGlsZChlbDAsIGVsMSk7Ci0g
ICAgICAgIHJldHVybiBlbDA7Ci0gICAgICB9LAotICAgICAgYnVpbGRSZW5kZXJOb2RlczogZnVu
Y3Rpb24gYnVpbGRSZW5kZXJOb2Rlcyhkb20sIGZyYWdtZW50LCBjb250ZXh0dWFsRWxlbWVudCkg
ewotICAgICAgICB2YXIgbW9ycGhzID0gbmV3IEFycmF5KDEpOwotICAgICAgICBtb3JwaHNbMF0g
PSBkb20uY3JlYXRlTW9ycGhBdChmcmFnbWVudCwgMCwgMCwgY29udGV4dHVhbEVsZW1lbnQpOwot
ICAgICAgICBkb20uaW5zZXJ0Qm91bmRhcnkoZnJhZ21lbnQsIDApOwotICAgICAgICBkb20uaW5z
ZXJ0Qm91bmRhcnkoZnJhZ21lbnQsIG51bGwpOwotICAgICAgICByZXR1cm4gbW9ycGhzOwotICAg
ICAgfSwKLSAgICAgIHN0YXRlbWVudHM6IFtbImJsb2NrIiwgImlmIiwgW1siZ2V0IiwgIm1vZGVs
Lmxlbmd0aCIsIFsibG9jIiwgW251bGwsIFsxLCA2XSwgWzEsIDE4XV1dXV0sIFtdLCAwLCBudWxs
LCBbImxvYyIsIFtudWxsLCBbMSwgMF0sIFszLCA3XV1dXV0sCi0gICAgICBsb2NhbHM6IFtdLAot
ICAgICAgdGVtcGxhdGVzOiBbY2hpbGQwXQotICAgIH07Ci0gIH0pKCkpOwotfSk7Ci0vKiBqc2hp
bnQgaWdub3JlOnN0YXJ0ICovCi0KLQotCi0vKiBqc2hpbnQgaWdub3JlOmVuZCAqLwotCi0vKiBq
c2hpbnQgaWdub3JlOnN0YXJ0ICovCi0KLWRlZmluZSgndG9kb212Yy9jb25maWcvZW52aXJvbm1l
bnQnLCBbJ2VtYmVyJ10sIGZ1bmN0aW9uKEVtYmVyKSB7Ci0gIHZhciBwcmVmaXggPSAndG9kb212
Yyc7Ci0vKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovCi0KLXRyeSB7Ci0gIHZhciBtZXRhTmFtZSA9
IHByZWZpeCArICcvY29uZmlnL2Vudmlyb25tZW50JzsKLSAgdmFyIHJhd0NvbmZpZyA9IEVtYmVy
WydkZWZhdWx0J10uJCgnbWV0YVtuYW1lPSInICsgbWV0YU5hbWUgKyAnIl0nKS5hdHRyKCdjb250
ZW50Jyk7Ci0gIHZhciBjb25maWcgPSBKU09OLnBhcnNlKHVuZXNjYXBlKHJhd0NvbmZpZykpOwot
Ci0gIHJldHVybiB7ICdkZWZhdWx0JzogY29uZmlnIH07Ci19Ci1jYXRjaChlcnIpIHsKLSAgdGhy
b3cgbmV3IEVycm9yKCdDb3VsZCBub3QgcmVhZCBjb25maWcgZnJvbSBtZXRhIHRhZyB3aXRoIG5h
bWUgIicgKyBtZXRhTmFtZSArICciLicpOwotfQotCi0vKiBqc2hpbnQgaWdub3JlOmVuZCAqLwot
Ci19KTsKLQotLyoganNoaW50IGlnbm9yZTplbmQgKi8KLQotLyoganNoaW50IGlnbm9yZTpzdGFy
dCAqLwotCi1pZiAoIXJ1bm5pbmdUZXN0cykgewotICByZXF1aXJlKCJ0b2RvbXZjL2FwcCIpWyJk
ZWZhdWx0Il0uY3JlYXRlKHsibmFtZSI6InRvZG9tdmMiLCJ2ZXJzaW9uIjoiMC4wLjArIn0pOwot
fQotCi0vKiBqc2hpbnQgaWdub3JlOmVuZCAqLwotLy8jIHNvdXJjZU1hcHBpbmdVUkw9dG9kb212
Yy5tYXAKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2Vz
L3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvYXNzZXRzL3ZlbmRvci5jc3Mg
Yi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVj
dHVyZS1leGFtcGxlcy9lbWJlcmpzL2Fzc2V0cy92ZW5kb3IuY3NzCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA1ZTQ2NDVkYWQyODEyNDM1YTNiMmM0NDk2NDRhNjhlYjEyNjcyMDVkLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNl
VGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVz
L2VtYmVyanMvYXNzZXRzL3ZlbmRvci5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw1MjEgKzAsMCBA
QAotaHIgewotICAgIG1hcmdpbjogMjBweCAwOwotICAgIGJvcmRlcjogMDsKLSAgICBib3JkZXIt
dG9wOiAxcHggZGFzaGVkICNjNWM1YzU7Ci0gICAgYm9yZGVyLWJvdHRvbTogMXB4IGRhc2hlZCAj
ZjdmN2Y3OwotfQotCi0ubGVhcm4gYSB7Ci0gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKLSAgICB0
ZXh0LWRlY29yYXRpb246IG5vbmU7Ci0gICAgY29sb3I6ICNiODNmNDU7Ci19Ci0KLS5sZWFybiBh
OmhvdmVyIHsKLSAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKLSAgICBjb2xvcjogIzc4
N2U3ZTsKLX0KLQotLmxlYXJuIGgzLAotLmxlYXJuIGg0LAotLmxlYXJuIGg1IHsKLSAgICBtYXJn
aW46IDEwcHggMDsKLSAgICBmb250LXdlaWdodDogNTAwOwotICAgIGxpbmUtaGVpZ2h0OiAxLjI7
Ci0gICAgY29sb3I6ICMwMDA7Ci19Ci0KLS5sZWFybiBoMyB7Ci0gICAgZm9udC1zaXplOiAyNHB4
OwotfQotCi0ubGVhcm4gaDQgewotICAgIGZvbnQtc2l6ZTogMThweDsKLX0KLQotLmxlYXJuIGg1
IHsKLSAgICBtYXJnaW4tYm90dG9tOiAwOwotICAgIGZvbnQtc2l6ZTogMTRweDsKLX0KLQotLmxl
YXJuIHVsIHsKLSAgICBwYWRkaW5nOiAwOwotICAgIG1hcmdpbjogMCAwIDMwcHggMjVweDsKLX0K
LQotLmxlYXJuIGxpIHsKLSAgICBsaW5lLWhlaWdodDogMjBweDsKLX0KLQotLmxlYXJuIHAgewot
ICAgIGZvbnQtc2l6ZTogMTVweDsKLSAgICBmb250LXdlaWdodDogMzAwOwotICAgIGxpbmUtaGVp
Z2h0OiAxLjM7Ci0gICAgbWFyZ2luLXRvcDogMDsKLSAgICBtYXJnaW4tYm90dG9tOiAwOwotfQot
Ci0jaXNzdWUtY291bnQgewotICAgIGRpc3BsYXk6IG5vbmU7Ci19Ci0KLS5xdW90ZSB7Ci0gICAg
Ym9yZGVyOiBub25lOwotICAgIG1hcmdpbjogMjBweCAwIDYwcHggMDsKLX0KLQotLnF1b3RlIHAg
ewotICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKLX0KLQotLnF1b3RlIHA6YmVmb3JlIHsKLSAgICBj
b250ZW50OiAn4oCcJzsKLSAgICBmb250LXNpemU6IDUwcHg7Ci0gICAgb3BhY2l0eTogLjE1Owot
ICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICB0b3A6IC0yMHB4OwotICAgIGxlZnQ6IDNweDsK
LX0KLQotLnF1b3RlIHA6YWZ0ZXIgewotICAgIGNvbnRlbnQ6ICfigJ0nOwotICAgIGZvbnQtc2l6
ZTogNTBweDsKLSAgICBvcGFjaXR5OiAuMTU7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAg
IGJvdHRvbTogLTQycHg7Ci0gICAgcmlnaHQ6IDNweDsKLX0KLQotLnF1b3RlIGZvb3RlciB7Ci0g
ICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIGJvdHRvbTogLTQwcHg7Ci0gICAgcmlnaHQ6IDA7
Ci19Ci0KLS5xdW90ZSBmb290ZXIgaW1nIHsKLSAgICBib3JkZXItcmFkaXVzOiAzcHg7Ci19Ci0K
LS5xdW90ZSBmb290ZXIgYSB7Ci0gICAgbWFyZ2luLWxlZnQ6IDVweDsKLSAgICB2ZXJ0aWNhbC1h
bGlnbjogbWlkZGxlOwotfQotCi0uc3BlZWNoLWJ1YmJsZSB7Ci0gICAgcG9zaXRpb246IHJlbGF0
aXZlOwotICAgIHBhZGRpbmc6IDEwcHg7Ci0gICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAu
MDQpOwotICAgIGJvcmRlci1yYWRpdXM6IDVweDsKLX0KLQotLnNwZWVjaC1idWJibGU6YWZ0ZXIg
ewotICAgIGNvbnRlbnQ6ICcnOwotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICB0b3A6IDEw
MCU7Ci0gICAgcmlnaHQ6IDMwcHg7Ci0gICAgYm9yZGVyOiAxM3B4IHNvbGlkIHRyYW5zcGFyZW50
OwotICAgIGJvcmRlci10b3AtY29sb3I6IHJnYmEoMCwgMCwgMCwgLjA0KTsKLX0KLQotLmxlYXJu
LWJhciA+IC5sZWFybiB7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIHdpZHRoOiAyNzJw
eDsKLSAgICB0b3A6IDhweDsKLSAgICBsZWZ0OiAtMzAwcHg7Ci0gICAgcGFkZGluZzogMTBweDsK
LSAgICBib3JkZXItcmFkaXVzOiA1cHg7Ci0gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUs
IDI1NSwgMjU1LCAuNik7Ci0gICAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogbGVmdDsKLSAgICB0cmFu
c2l0aW9uLWR1cmF0aW9uOiA1MDBtczsKLX0KLQotQG1lZGlhIChtaW4td2lkdGg6IDg5OXB4KSB7
Ci0gICAgLmxlYXJuLWJhciB7Ci0gICAgICAgIHdpZHRoOiBhdXRvOwotICAgICAgICBwYWRkaW5n
LWxlZnQ6IDMwMHB4OwotICAgIH0KLQotICAgIC5sZWFybi1iYXIgPiAubGVhcm4gewotICAgICAg
ICBsZWZ0OiA4cHg7Ci0gICAgfQotfQotCi1odG1sLAotYm9keSB7Ci0gICAgbWFyZ2luOiAwOwot
ICAgIHBhZGRpbmc6IDA7Ci19Ci0KLWJ1dHRvbiB7Ci0gICAgbWFyZ2luOiAwOwotICAgIHBhZGRp
bmc6IDA7Ci0gICAgYm9yZGVyOiAwOwotICAgIGJhY2tncm91bmQ6IG5vbmU7Ci0gICAgZm9udC1z
aXplOiAxMDAlOwotICAgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKLSAgICBmb250LWZhbWls
eTogaW5oZXJpdDsKLSAgICBmb250LXdlaWdodDogaW5oZXJpdDsKLSAgICBjb2xvcjogaW5oZXJp
dDsKLSAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7Ci0gICAgYXBwZWFyYW5jZTogbm9uZTsK
LSAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKLSAgICAtbW96LWZvbnQt
c21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKLSAgICBmb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7
Ci19Ci0KLWJvZHkgewotICAgIGZvbnQ6IDE0cHggJ0hlbHZldGljYSBOZXVlJywgSGVsdmV0aWNh
LCBBcmlhbCwgc2Fucy1zZXJpZjsKLSAgICBsaW5lLWhlaWdodDogMS40ZW07Ci0gICAgYmFja2dy
b3VuZDogI2Y1ZjVmNTsKLSAgICBjb2xvcjogIzRkNGQ0ZDsKLSAgICBtaW4td2lkdGg6IDIzMHB4
OwotICAgIG1heC13aWR0aDogNTUwcHg7Ci0gICAgbWFyZ2luOiAwIGF1dG87Ci0gICAgLXdlYmtp
dC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7Ci0gICAgLW1vei1mb250LXNtb290aGluZzog
YW50aWFsaWFzZWQ7Ci0gICAgZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOwotICAgIGZvbnQt
d2VpZ2h0OiAzMDA7Ci19Ci0KLWJ1dHRvbiwKLWlucHV0W3R5cGU9ImNoZWNrYm94Il0gewotICAg
IG91dGxpbmU6IG5vbmU7Ci19Ci0KLS5oaWRkZW4gewotICAgIGRpc3BsYXk6IG5vbmU7Ci19Ci0K
LSN0b2RvYXBwIHsKLSAgICBiYWNrZ3JvdW5kOiAjZmZmOwotICAgIG1hcmdpbjogMTMwcHggMCA0
MHB4IDA7Ci0gICAgcG9zaXRpb246IHJlbGF0aXZlOwotICAgIGJveC1zaGFkb3c6IDAgMnB4IDRw
eCAwIHJnYmEoMCwgMCwgMCwgMC4yKSwKLSAgICAgICAgICAgICAgICAwIDI1cHggNTBweCAwIHJn
YmEoMCwgMCwgMCwgMC4xKTsKLX0KLQotI3RvZG9hcHAgaW5wdXQ6Oi13ZWJraXQtaW5wdXQtcGxh
Y2Vob2xkZXIgewotICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKLSAgICBmb250LXdlaWdodDogMzAw
OwotICAgIGNvbG9yOiAjZTZlNmU2OwotfQotCi0jdG9kb2FwcCBpbnB1dDo6LW1vei1wbGFjZWhv
bGRlciB7Ci0gICAgZm9udC1zdHlsZTogaXRhbGljOwotICAgIGZvbnQtd2VpZ2h0OiAzMDA7Ci0g
ICAgY29sb3I6ICNlNmU2ZTY7Ci19Ci0KLSN0b2RvYXBwIGlucHV0OjppbnB1dC1wbGFjZWhvbGRl
ciB7Ci0gICAgZm9udC1zdHlsZTogaXRhbGljOwotICAgIGZvbnQtd2VpZ2h0OiAzMDA7Ci0gICAg
Y29sb3I6ICNlNmU2ZTY7Ci19Ci0KLSN0b2RvYXBwIGgxIHsKLSAgICBwb3NpdGlvbjogYWJzb2x1
dGU7Ci0gICAgdG9wOiAtMTU1cHg7Ci0gICAgd2lkdGg6IDEwMCU7Ci0gICAgZm9udC1zaXplOiAx
MDBweDsKLSAgICBmb250LXdlaWdodDogMTAwOwotICAgIHRleHQtYWxpZ246IGNlbnRlcjsKLSAg
ICBjb2xvcjogcmdiYSgxNzUsIDQ3LCA0NywgMC4xNSk7Ci0gICAgLXdlYmtpdC10ZXh0LXJlbmRl
cmluZzogb3B0aW1pemVMZWdpYmlsaXR5OwotICAgIC1tb3otdGV4dC1yZW5kZXJpbmc6IG9wdGlt
aXplTGVnaWJpbGl0eTsKLSAgICB0ZXh0LXJlbmRlcmluZzogb3B0aW1pemVMZWdpYmlsaXR5Owot
fQotCi0jbmV3LXRvZG8sCi0uZWRpdCB7Ci0gICAgcG9zaXRpb246IHJlbGF0aXZlOwotICAgIG1h
cmdpbjogMDsKLSAgICB3aWR0aDogMTAwJTsKLSAgICBmb250LXNpemU6IDI0cHg7Ci0gICAgZm9u
dC1mYW1pbHk6IGluaGVyaXQ7Ci0gICAgZm9udC13ZWlnaHQ6IGluaGVyaXQ7Ci0gICAgbGluZS1o
ZWlnaHQ6IDEuNGVtOwotICAgIGJvcmRlcjogMDsKLSAgICBvdXRsaW5lOiBub25lOwotICAgIGNv
bG9yOiBpbmhlcml0OwotICAgIHBhZGRpbmc6IDZweDsKLSAgICBib3JkZXI6IDFweCBzb2xpZCAj
OTk5OwotICAgIGJveC1zaGFkb3c6IGluc2V0IDAgLTFweCA1cHggMCByZ2JhKDAsIDAsIDAsIDAu
Mik7Ci0gICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKLSAgICAtd2Via2l0LWZvbnQtc21vb3Ro
aW5nOiBhbnRpYWxpYXNlZDsKLSAgICAtbW96LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsK
LSAgICBmb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7Ci19Ci0KLSNuZXctdG9kbyB7Ci0gICAg
cGFkZGluZzogMTZweCAxNnB4IDE2cHggNjBweDsKLSAgICBib3JkZXI6IG5vbmU7Ci0gICAgYmFj
a2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjAwMyk7Ci0gICAgYm94LXNoYWRvdzogaW5zZXQgMCAt
MnB4IDFweCByZ2JhKDAsMCwwLDAuMDMpOwotfQotCi0jbWFpbiB7Ci0gICAgcG9zaXRpb246IHJl
bGF0aXZlOwotICAgIHotaW5kZXg6IDI7Ci0gICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNlNmU2
ZTY7Ci19Ci0KLWxhYmVsW2Zvcj0ndG9nZ2xlLWFsbCddIHsKLSAgICBkaXNwbGF5OiBub25lOwot
fQotCi0jdG9nZ2xlLWFsbCB7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIHRvcDogLTU1
cHg7Ci0gICAgbGVmdDogLTEycHg7Ci0gICAgd2lkdGg6IDYwcHg7Ci0gICAgaGVpZ2h0OiAzNHB4
OwotICAgIHRleHQtYWxpZ246IGNlbnRlcjsKLSAgICBib3JkZXI6IG5vbmU7IC8qIE1vYmlsZSBT
YWZhcmkgKi8KLX0KLQotI3RvZ2dsZS1hbGw6YmVmb3JlIHsKLSAgICBjb250ZW50OiAn4p2vJzsK
LSAgICBmb250LXNpemU6IDIycHg7Ci0gICAgY29sb3I6ICNlNmU2ZTY7Ci0gICAgcGFkZGluZzog
MTBweCAyN3B4IDEwcHggMjdweDsKLX0KLQotI3RvZ2dsZS1hbGw6Y2hlY2tlZDpiZWZvcmUgewot
ICAgIGNvbG9yOiAjNzM3MzczOwotfQotCi0jdG9kby1saXN0IHsKLSAgICBtYXJnaW46IDA7Ci0g
ICAgcGFkZGluZzogMDsKLSAgICBsaXN0LXN0eWxlOiBub25lOwotfQotCi0jdG9kby1saXN0IGxp
IHsKLSAgICBwb3NpdGlvbjogcmVsYXRpdmU7Ci0gICAgZm9udC1zaXplOiAyNHB4OwotICAgIGJv
cmRlci1ib3R0b206IDFweCBzb2xpZCAjZWRlZGVkOwotfQotCi0jdG9kby1saXN0IGxpOmxhc3Qt
Y2hpbGQgewotICAgIGJvcmRlci1ib3R0b206IG5vbmU7Ci19Ci0KLSN0b2RvLWxpc3QgbGkuZWRp
dGluZyB7Ci0gICAgYm9yZGVyLWJvdHRvbTogbm9uZTsKLSAgICBwYWRkaW5nOiAwOwotfQotCi0j
dG9kby1saXN0IGxpLmVkaXRpbmcgLmVkaXQgewotICAgIGRpc3BsYXk6IGJsb2NrOwotICAgIHdp
ZHRoOiA1MDZweDsKLSAgICBwYWRkaW5nOiAxM3B4IDE3cHggMTJweCAxN3B4OwotICAgIG1hcmdp
bjogMCAwIDAgNDNweDsKLX0KLQotI3RvZG8tbGlzdCBsaS5lZGl0aW5nIC52aWV3IHsKLSAgICBk
aXNwbGF5OiBub25lOwotfQotCi0jdG9kby1saXN0IGxpIC50b2dnbGUgewotICAgIHRleHQtYWxp
Z246IGNlbnRlcjsKLSAgICB3aWR0aDogNDBweDsKLSAgICAvKiBhdXRvLCBzaW5jZSBub24tV2Vi
S2l0IGJyb3dzZXJzIGRvZXNuJ3Qgc3VwcG9ydCBpbnB1dCBzdHlsaW5nICovCi0gICAgaGVpZ2h0
OiBhdXRvOwotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICB0b3A6IDA7Ci0gICAgYm90dG9t
OiAwOwotICAgIG1hcmdpbjogYXV0byAwOwotICAgIGJvcmRlcjogbm9uZTsgLyogTW9iaWxlIFNh
ZmFyaSAqLwotICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsKLSAgICBhcHBlYXJhbmNlOiBu
b25lOwotfQotCi0jdG9kby1saXN0IGxpIC50b2dnbGU6YWZ0ZXIgewotICAgIGNvbnRlbnQ6IHVy
bCgnZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
MjAwMC9zdmciIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCIgdmlld0JveD0iLTEwIC0xOCAxMDAgMTM1
Ij48Y2lyY2xlIGN4PSI1MCIgY3k9IjUwIiByPSI1MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjZWRl
ZGVkIiBzdHJva2Utd2lkdGg9IjMiLz48L3N2Zz4nKTsKLX0KLQotI3RvZG8tbGlzdCBsaSAudG9n
Z2xlOmNoZWNrZWQ6YWZ0ZXIgewotICAgIGNvbnRlbnQ6IHVybCgnZGF0YTppbWFnZS9zdmcreG1s
O3V0ZjgsPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0MCIg
aGVpZ2h0PSI0MCIgdmlld0JveD0iLTEwIC0xOCAxMDAgMTM1Ij48Y2lyY2xlIGN4PSI1MCIgY3k9
IjUwIiByPSI1MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjYmRkYWQ1IiBzdHJva2Utd2lkdGg9IjMi
Lz48cGF0aCBmaWxsPSIjNWRjMmFmIiBkPSJNNzIgMjVMNDIgNzEgMjcgNTZsLTQgNCAyMCAyMCAz
NC01MnoiLz48L3N2Zz4nKTsKLX0KLQotI3RvZG8tbGlzdCBsaSBsYWJlbCB7Ci0gICAgd2hpdGUt
c3BhY2U6IHByZTsKLSAgICB3b3JkLWJyZWFrOiBicmVhay13b3JkOwotICAgIHBhZGRpbmc6IDE1
cHggNjBweCAxNXB4IDE1cHg7Ci0gICAgbWFyZ2luLWxlZnQ6IDQ1cHg7Ci0gICAgZGlzcGxheTog
YmxvY2s7Ci0gICAgbGluZS1oZWlnaHQ6IDEuMjsKLSAgICB0cmFuc2l0aW9uOiBjb2xvciAwLjRz
OwotfQotCi0jdG9kby1saXN0IGxpLmNvbXBsZXRlZCBsYWJlbCB7Ci0gICAgY29sb3I6ICNkOWQ5
ZDk7Ci0gICAgdGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7Ci19Ci0KLSN0b2RvLWxpc3Qg
bGkgLmRlc3Ryb3kgewotICAgIGRpc3BsYXk6IG5vbmU7Ci0gICAgcG9zaXRpb246IGFic29sdXRl
OwotICAgIHRvcDogMDsKLSAgICByaWdodDogMTBweDsKLSAgICBib3R0b206IDA7Ci0gICAgd2lk
dGg6IDQwcHg7Ci0gICAgaGVpZ2h0OiA0MHB4OwotICAgIG1hcmdpbjogYXV0byAwOwotICAgIGZv
bnQtc2l6ZTogMzBweDsKLSAgICBjb2xvcjogI2NjOWE5YTsKLSAgICBtYXJnaW4tYm90dG9tOiAx
MXB4OwotICAgIHRyYW5zaXRpb246IGNvbG9yIDAuMnMgZWFzZS1vdXQ7Ci19Ci0KLSN0b2RvLWxp
c3QgbGkgLmRlc3Ryb3k6aG92ZXIgewotICAgIGNvbG9yOiAjYWY1YjVlOwotfQotCi0jdG9kby1s
aXN0IGxpIC5kZXN0cm95OmFmdGVyIHsKLSAgICBjb250ZW50OiAnw5cnOwotfQotCi0jdG9kby1s
aXN0IGxpOmhvdmVyIC5kZXN0cm95IHsKLSAgICBkaXNwbGF5OiBibG9jazsKLX0KLQotI3RvZG8t
bGlzdCBsaSAuZWRpdCB7Ci0gICAgZGlzcGxheTogbm9uZTsKLX0KLQotI3RvZG8tbGlzdCBsaS5l
ZGl0aW5nOmxhc3QtY2hpbGQgewotICAgIG1hcmdpbi1ib3R0b206IC0xcHg7Ci19Ci0KLSNmb290
ZXIgewotICAgIGNvbG9yOiAjNzc3OwotICAgIHBhZGRpbmc6IDEwcHggMTVweDsKLSAgICBoZWln
aHQ6IDIwcHg7Ci0gICAgdGV4dC1hbGlnbjogY2VudGVyOwotICAgIGJvcmRlci10b3A6IDFweCBz
b2xpZCAjZTZlNmU2OwotfQotCi0jZm9vdGVyOmJlZm9yZSB7Ci0gICAgY29udGVudDogJyc7Ci0g
ICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIHJpZ2h0OiAwOwotICAgIGJvdHRvbTogMDsKLSAg
ICBsZWZ0OiAwOwotICAgIGhlaWdodDogNTBweDsKLSAgICBvdmVyZmxvdzogaGlkZGVuOwotICAg
IGJveC1zaGFkb3c6IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMiksCi0gICAgICAgICAgICAg
ICAgMCA4cHggMCAtM3B4ICNmNmY2ZjYsCi0gICAgICAgICAgICAgICAgMCA5cHggMXB4IC0zcHgg
cmdiYSgwLCAwLCAwLCAwLjIpLAotICAgICAgICAgICAgICAgIDAgMTZweCAwIC02cHggI2Y2ZjZm
NiwKLSAgICAgICAgICAgICAgICAwIDE3cHggMnB4IC02cHggcmdiYSgwLCAwLCAwLCAwLjIpOwot
fQotCi0jdG9kby1jb3VudCB7Ci0gICAgZmxvYXQ6IGxlZnQ7Ci0gICAgdGV4dC1hbGlnbjogbGVm
dDsKLX0KLQotI3RvZG8tY291bnQgc3Ryb25nIHsKLSAgICBmb250LXdlaWdodDogMzAwOwotfQot
Ci0jZmlsdGVycyB7Ci0gICAgbWFyZ2luOiAwOwotICAgIHBhZGRpbmc6IDA7Ci0gICAgbGlzdC1z
dHlsZTogbm9uZTsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgcmlnaHQ6IDA7Ci0gICAg
bGVmdDogMDsKLX0KLQotI2ZpbHRlcnMgbGkgewotICAgIGRpc3BsYXk6IGlubGluZTsKLX0KLQot
I2ZpbHRlcnMgbGkgYSB7Ci0gICAgY29sb3I6IGluaGVyaXQ7Ci0gICAgbWFyZ2luOiAzcHg7Ci0g
ICAgcGFkZGluZzogM3B4IDdweDsKLSAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Ci0gICAgYm9y
ZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7Ci0gICAgYm9yZGVyLXJhZGl1czogM3B4OwotfQot
Ci0jZmlsdGVycyBsaSBhLnNlbGVjdGVkLAotI2ZpbHRlcnMgbGkgYTpob3ZlciB7Ci0gICAgYm9y
ZGVyLWNvbG9yOiByZ2JhKDE3NSwgNDcsIDQ3LCAwLjEpOwotfQotCi0jZmlsdGVycyBsaSBhLnNl
bGVjdGVkIHsKLSAgICBib3JkZXItY29sb3I6IHJnYmEoMTc1LCA0NywgNDcsIDAuMik7Ci19Ci0K
LSNjbGVhci1jb21wbGV0ZWQsCi1odG1sICNjbGVhci1jb21wbGV0ZWQ6YWN0aXZlIHsKLSAgICBm
bG9hdDogcmlnaHQ7Ci0gICAgcG9zaXRpb246IHJlbGF0aXZlOwotICAgIGxpbmUtaGVpZ2h0OiAy
MHB4OwotICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKLSAgICBjdXJzb3I6IHBvaW50ZXI7Ci0g
ICAgcG9zaXRpb246IHJlbGF0aXZlOwotfQotCi0jY2xlYXItY29tcGxldGVkOmhvdmVyIHsKLSAg
ICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKLX0KLQotI2luZm8gewotICAgIG1hcmdpbjog
NjVweCBhdXRvIDA7Ci0gICAgY29sb3I6ICNiZmJmYmY7Ci0gICAgZm9udC1zaXplOiAxMHB4Owot
ICAgIHRleHQtc2hhZG93OiAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTsKLSAgICB0
ZXh0LWFsaWduOiBjZW50ZXI7Ci19Ci0KLSNpbmZvIHAgewotICAgIGxpbmUtaGVpZ2h0OiAxOwot
fQotCi0jaW5mbyBhIHsKLSAgICBjb2xvcjogaW5oZXJpdDsKLSAgICB0ZXh0LWRlY29yYXRpb246
IG5vbmU7Ci0gICAgZm9udC13ZWlnaHQ6IDQwMDsKLX0KLQotI2luZm8gYTpob3ZlciB7Ci0gICAg
dGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Ci19Ci0KLS8qCi0gICAgSGFjayB0byByZW1vdmUg
YmFja2dyb3VuZCBmcm9tIE1vYmlsZSBTYWZhcmkuCi0gICAgQ2FuJ3QgdXNlIGl0IGdsb2JhbGx5
IHNpbmNlIGl0IGRlc3Ryb3lzIGNoZWNrYm94ZXMgaW4gRmlyZWZveAotKi8KLUBtZWRpYSBzY3Jl
ZW4gYW5kICgtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86MCkgewotICAgICN0b2dnbGUt
YWxsLAotICAgICN0b2RvLWxpc3QgbGkgLnRvZ2dsZSB7Ci0gICAgICAgIGJhY2tncm91bmQ6IG5v
bmU7Ci0gICAgfQotCi0gICAgI3RvZG8tbGlzdCBsaSAudG9nZ2xlIHsKLSAgICAgICAgaGVpZ2h0
OiA0MHB4OwotICAgIH0KLQotICAgICN0b2dnbGUtYWxsIHsKLSAgICAgICAgLXdlYmtpdC10cmFu
c2Zvcm06IHJvdGF0ZSg5MGRlZyk7Ci0gICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTsK
LSAgICAgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOwotICAgICAgICBhcHBlYXJhbmNlOiBu
b25lOwotICAgIH0KLX0KLQotQG1lZGlhIChtYXgtd2lkdGg6IDQzMHB4KSB7Ci0gICAgI2Zvb3Rl
ciB7Ci0gICAgICAgIGhlaWdodDogNTBweDsKLSAgICB9Ci0KLSAgICAjZmlsdGVycyB7Ci0gICAg
ICAgIGJvdHRvbTogMTBweDsKLSAgICB9Ci19Ci0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVz
dHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2Vt
YmVyanMvYXNzZXRzL3ZlbmRvci5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVz
b3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvYXNzZXRzL3ZlbmRv
ci5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTRkNzEwMTRhODE3MWU4OWVlNjAw
MzBmMmMxMWE2MGJhNTY3NzRhMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZj
L2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL2Fzc2V0cy92ZW5kb3IuanMKKysrIC9kZXYv
bnVsbApAQCAtMSw2NjEyMSArMCwwIEBACi0vKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovCi0KLXdp
bmRvdy5FbWJlckVOViA9IHsiRkVBVFVSRVMiOnt9fTsKLXZhciBydW5uaW5nVGVzdHMgPSBmYWxz
ZTsKLQotCi0KLS8qIGpzaGludCBpZ25vcmU6ZW5kICovCi0KLTt2YXIgbG9hZGVyLCBkZWZpbmUs
IHJlcXVpcmVNb2R1bGUsIHJlcXVpcmUsIHJlcXVpcmVqczsKLQotKGZ1bmN0aW9uIChnbG9iYWwp
IHsKLSAgJ3VzZSBzdHJpY3QnOwotCi0gIHZhciBoZWltZGFsbCA9IGdsb2JhbC5oZWltZGFsbDsK
LQotICBmdW5jdGlvbiBkaWN0KCkgewotICAgIHZhciBvYmogPSBPYmplY3QuY3JlYXRlKG51bGwp
OwotICAgIG9ialsnX18nXSA9IHVuZGVmaW5lZDsKLSAgICBkZWxldGUgb2JqWydfXyddOwotICAg
IHJldHVybiBvYmo7Ci0gIH0KLQotICAvLyBTYXZlIG9mZiB0aGUgb3JpZ2luYWwgdmFsdWVzIG9m
IHRoZXNlIGdsb2JhbHMsIHNvIHdlIGNhbiByZXN0b3JlIHRoZW0gaWYgc29tZW9uZSBhc2tzIHVz
IHRvCi0gIHZhciBvbGRHbG9iYWxzID0gewotICAgIGxvYWRlcjogbG9hZGVyLAotICAgIGRlZmlu
ZTogZGVmaW5lLAotICAgIHJlcXVpcmVNb2R1bGU6IHJlcXVpcmVNb2R1bGUsCi0gICAgcmVxdWly
ZTogcmVxdWlyZSwKLSAgICByZXF1aXJlanM6IHJlcXVpcmVqcwotICB9OwotCi0gIHJlcXVpcmVq
cyA9IHJlcXVpcmUgPSByZXF1aXJlTW9kdWxlID0gZnVuY3Rpb24gKG5hbWUpIHsKLSAgICB2YXIg
cGVuZGluZyA9IFtdOwotICAgIHZhciBtb2QgPSBmaW5kTW9kdWxlKG5hbWUsICcocmVxdWlyZSkn
LCBwZW5kaW5nKTsKLQotICAgIGZvciAodmFyIGkgPSBwZW5kaW5nLmxlbmd0aCAtIDE7IGkgPj0g
MDsgaS0tKSB7Ci0gICAgICBwZW5kaW5nW2ldLmV4cG9ydHMoKTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gbW9kLm1vZHVsZS5leHBvcnRzOwotICB9OwotCi0gIGxvYWRlciA9IHsKLSAgICBub0NvbmZs
aWN0OiBmdW5jdGlvbiAoYWxpYXNlcykgewotICAgICAgdmFyIG9sZE5hbWUsIG5ld05hbWU7Ci0K
LSAgICAgIGZvciAob2xkTmFtZSBpbiBhbGlhc2VzKSB7Ci0gICAgICAgIGlmIChhbGlhc2VzLmhh
c093blByb3BlcnR5KG9sZE5hbWUpKSB7Ci0gICAgICAgICAgaWYgKG9sZEdsb2JhbHMuaGFzT3du
UHJvcGVydHkob2xkTmFtZSkpIHsKLSAgICAgICAgICAgIG5ld05hbWUgPSBhbGlhc2VzW29sZE5h
bWVdOwotCi0gICAgICAgICAgICBnbG9iYWxbbmV3TmFtZV0gPSBnbG9iYWxbb2xkTmFtZV07Ci0g
ICAgICAgICAgICBnbG9iYWxbb2xkTmFtZV0gPSBvbGRHbG9iYWxzW29sZE5hbWVdOwotICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfTsKLQotICB2YXIgX2lzQXJyYXk7
Ci0gIGlmICghQXJyYXkuaXNBcnJheSkgewotICAgIF9pc0FycmF5ID0gZnVuY3Rpb24gKHgpIHsK
LSAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeCkgPT09ICdbb2Jq
ZWN0IEFycmF5XSc7Ci0gICAgfTsKLSAgfSBlbHNlIHsKLSAgICBfaXNBcnJheSA9IEFycmF5Lmlz
QXJyYXk7Ci0gIH0KLQotICB2YXIgcmVnaXN0cnkgPSBkaWN0KCk7Ci0gIHZhciBzZWVuID0gZGlj
dCgpOwotCi0gIHZhciB1dWlkID0gMDsKLQotICBmdW5jdGlvbiB1bnN1cHBvcnRlZE1vZHVsZShs
ZW5ndGgpIHsKLSAgICB0aHJvdyBuZXcgRXJyb3IoJ2FuIHVuc3VwcG9ydGVkIG1vZHVsZSB3YXMg
ZGVmaW5lZCwgZXhwZWN0ZWQgYGRlZmluZShuYW1lLCBkZXBzLCBtb2R1bGUpYCBpbnN0ZWFkIGdv
dDogYCcgKyBsZW5ndGggKyAnYCBhcmd1bWVudHMgdG8gZGVmaW5lYCcpOwotICB9Ci0KLSAgdmFy
IGRlZmF1bHREZXBzID0gWydyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJ107Ci0KLSAgZnVu
Y3Rpb24gTW9kdWxlKG5hbWUsIGRlcHMsIGNhbGxiYWNrLCBhbGlhcykgewotICAgIHRoaXMuaWQg
PSB1dWlkKys7Ci0gICAgdGhpcy5uYW1lID0gbmFtZTsKLSAgICB0aGlzLmRlcHMgPSAhZGVwcy5s
ZW5ndGggJiYgY2FsbGJhY2subGVuZ3RoID8gZGVmYXVsdERlcHMgOiBkZXBzOwotICAgIHRoaXMu
bW9kdWxlID0geyBleHBvcnRzOiB7fSB9OwotICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFjazsK
LSAgICB0aGlzLmhhc0V4cG9ydHNBc0RlcCA9IGZhbHNlOwotICAgIHRoaXMuaXNBbGlhcyA9IGFs
aWFzOwotICAgIHRoaXMucmVpZmllZCA9IG5ldyBBcnJheShkZXBzLmxlbmd0aCk7Ci0KLSAgICAv
KgotICAgICAgIEVhY2ggbW9kdWxlIG5vcm1hbGx5IHBhc3NlcyB0aHJvdWdoIHRoZXNlIHN0YXRl
cywgaW4gb3JkZXI6Ci0gICAgICAgICBuZXcgICAgICAgOiBpbml0aWFsIHN0YXRlCi0gICAgICAg
ICBwZW5kaW5nICAgOiB0aGlzIG1vZHVsZSBpcyBzY2hlZHVsZWQgdG8gYmUgZXhlY3V0ZWQKLSAg
ICAgICAgIHJlaWZ5aW5nICA6IHRoaXMgbW9kdWxlJ3MgZGVwZW5kZW5jaWVzIGFyZSBiZWluZyBl
eGVjdXRlZAotICAgICAgICAgcmVpZmllZCAgIDogdGhpcyBtb2R1bGUncyBkZXBlbmRlbmNpZXMg
ZmluaXNoZWQgZXhlY3V0aW5nIHN1Y2Nlc3NmdWxseQotICAgICAgICAgZXJyb3JlZCAgIDogdGhp
cyBtb2R1bGUncyBkZXBlbmRlbmNpZXMgZmFpbGVkIHRvIGV4ZWN1dGUKLSAgICAgICAgIGZpbmFs
aXplZCA6IHRoaXMgbW9kdWxlIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseQotICAgICAqLwotICAgIHRo
aXMuc3RhdGUgPSAnbmV3JzsKLSAgfQotCi0gIE1vZHVsZS5wcm90b3R5cGUubWFrZURlZmF1bHRF
eHBvcnQgPSBmdW5jdGlvbiAoKSB7Ci0gICAgdmFyIGV4cG9ydHMgPSB0aGlzLm1vZHVsZS5leHBv
cnRzOwotICAgIGlmIChleHBvcnRzICE9PSBudWxsICYmICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29i
amVjdCcgfHwgdHlwZW9mIGV4cG9ydHMgPT09ICdmdW5jdGlvbicpICYmIGV4cG9ydHNbJ2RlZmF1
bHQnXSA9PT0gdW5kZWZpbmVkICYmIE9iamVjdC5pc0V4dGVuc2libGUoZXhwb3J0cykpIHsKLSAg
ICAgIGV4cG9ydHNbJ2RlZmF1bHQnXSA9IGV4cG9ydHM7Ci0gICAgfQotICB9OwotCi0gIE1vZHVs
ZS5wcm90b3R5cGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHsKLSAgICAvLyBpZiBmaW5hbGl6ZWQs
IHRoZXJlIGlzIG5vIHdvcmsgdG8gZG8uIElmIHJlaWZ5aW5nLCB0aGVyZSBpcyBhCi0gICAgLy8g
Y2lyY3VsYXIgZGVwZW5kZW5jeSBzbyB3ZSBtdXN0IHJldHVybiBvdXIgKHBhcnRpYWwpIGV4cG9y
dHMuCi0gICAgaWYgKHRoaXMuc3RhdGUgPT09ICdmaW5hbGl6ZWQnIHx8IHRoaXMuc3RhdGUgPT09
ICdyZWlmeWluZycpIHsKLSAgICAgIHJldHVybiB0aGlzLm1vZHVsZS5leHBvcnRzOwotICAgIH0K
LQotICAgIGlmIChsb2FkZXIud3JhcE1vZHVsZXMpIHsKLSAgICAgIHRoaXMuY2FsbGJhY2sgPSBs
b2FkZXIud3JhcE1vZHVsZXModGhpcy5uYW1lLCB0aGlzLmNhbGxiYWNrKTsKLSAgICB9Ci0KLSAg
ICB0aGlzLnJlaWZ5KCk7Ci0KLSAgICB2YXIgcmVzdWx0ID0gdGhpcy5jYWxsYmFjay5hcHBseSh0
aGlzLCB0aGlzLnJlaWZpZWQpOwotICAgIHRoaXMuc3RhdGUgPSAnZmluYWxpemVkJzsKLQotICAg
IGlmICghKHRoaXMuaGFzRXhwb3J0c0FzRGVwICYmIHJlc3VsdCA9PT0gdW5kZWZpbmVkKSkgewot
ICAgICAgdGhpcy5tb2R1bGUuZXhwb3J0cyA9IHJlc3VsdDsKLSAgICB9Ci0gICAgdGhpcy5tYWtl
RGVmYXVsdEV4cG9ydCgpOwotICAgIHJldHVybiB0aGlzLm1vZHVsZS5leHBvcnRzOwotICB9Owot
Ci0gIE1vZHVsZS5wcm90b3R5cGUudW5zZWUgPSBmdW5jdGlvbiAoKSB7Ci0gICAgdGhpcy5zdGF0
ZSA9ICduZXcnOwotICAgIHRoaXMubW9kdWxlID0geyBleHBvcnRzOiB7fSB9OwotICB9OwotCi0g
IE1vZHVsZS5wcm90b3R5cGUucmVpZnkgPSBmdW5jdGlvbiAoKSB7Ci0gICAgaWYgKHRoaXMuc3Rh
dGUgPT09ICdyZWlmaWVkJykgewotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICB0aGlzLnN0YXRl
ID0gJ3JlaWZ5aW5nJzsKLSAgICB0cnkgewotICAgICAgdGhpcy5yZWlmaWVkID0gdGhpcy5fcmVp
ZnkoKTsKLSAgICAgIHRoaXMuc3RhdGUgPSAncmVpZmllZCc7Ci0gICAgfSBmaW5hbGx5IHsKLSAg
ICAgIGlmICh0aGlzLnN0YXRlID09PSAncmVpZnlpbmcnKSB7Ci0gICAgICAgIHRoaXMuc3RhdGUg
PSAnZXJyb3JlZCc7Ci0gICAgICB9Ci0gICAgfQotICB9OwotCi0gIE1vZHVsZS5wcm90b3R5cGUu
X3JlaWZ5ID0gZnVuY3Rpb24gKCkgewotICAgIHZhciByZWlmaWVkID0gdGhpcy5yZWlmaWVkLnNs
aWNlKCk7Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZWlmaWVkLmxlbmd0aDsgaSsrKSB7Ci0g
ICAgICB2YXIgbW9kID0gcmVpZmllZFtpXTsKLSAgICAgIHJlaWZpZWRbaV0gPSBtb2QuZXhwb3J0
cyA/IG1vZC5leHBvcnRzIDogbW9kLm1vZHVsZS5leHBvcnRzKCk7Ci0gICAgfQotICAgIHJldHVy
biByZWlmaWVkOwotICB9OwotCi0gIE1vZHVsZS5wcm90b3R5cGUuZmluZERlcHMgPSBmdW5jdGlv
biAocGVuZGluZykgewotICAgIGlmICh0aGlzLnN0YXRlICE9PSAnbmV3JykgewotICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIHRoaXMuc3RhdGUgPSAncGVuZGluZyc7Ci0KLSAgICB2YXIgZGVw
cyA9IHRoaXMuZGVwczsKLQotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVwcy5sZW5ndGg7IGkr
KykgewotICAgICAgdmFyIGRlcCA9IGRlcHNbaV07Ci0gICAgICB2YXIgZW50cnkgPSB0aGlzLnJl
aWZpZWRbaV0gPSB7IGV4cG9ydHM6IHVuZGVmaW5lZCwgbW9kdWxlOiB1bmRlZmluZWQgfTsKLSAg
ICAgIGlmIChkZXAgPT09ICdleHBvcnRzJykgewotICAgICAgICB0aGlzLmhhc0V4cG9ydHNBc0Rl
cCA9IHRydWU7Ci0gICAgICAgIGVudHJ5LmV4cG9ydHMgPSB0aGlzLm1vZHVsZS5leHBvcnRzOwot
ICAgICAgfSBlbHNlIGlmIChkZXAgPT09ICdyZXF1aXJlJykgewotICAgICAgICBlbnRyeS5leHBv
cnRzID0gdGhpcy5tYWtlUmVxdWlyZSgpOwotICAgICAgfSBlbHNlIGlmIChkZXAgPT09ICdtb2R1
bGUnKSB7Ci0gICAgICAgIGVudHJ5LmV4cG9ydHMgPSB0aGlzLm1vZHVsZTsKLSAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgIGVudHJ5Lm1vZHVsZSA9IGZpbmRNb2R1bGUocmVzb2x2ZShkZXAsIHRoaXMu
bmFtZSksIHRoaXMubmFtZSwgcGVuZGluZyk7Ci0gICAgICB9Ci0gICAgfQotICB9OwotCi0gIE1v
ZHVsZS5wcm90b3R5cGUubWFrZVJlcXVpcmUgPSBmdW5jdGlvbiAoKSB7Ci0gICAgdmFyIG5hbWUg
PSB0aGlzLm5hbWU7Ci0gICAgdmFyIHIgPSBmdW5jdGlvbiAoZGVwKSB7Ci0gICAgICByZXR1cm4g
cmVxdWlyZShyZXNvbHZlKGRlcCwgbmFtZSkpOwotICAgIH07Ci0gICAgclsnZGVmYXVsdCddID0g
cjsKLSAgICByLmhhcyA9IGZ1bmN0aW9uIChkZXApIHsKLSAgICAgIHJldHVybiBoYXMocmVzb2x2
ZShkZXAsIG5hbWUpKTsKLSAgICB9OwotICAgIHJldHVybiByOwotICB9OwotCi0gIGRlZmluZSA9
IGZ1bmN0aW9uIChuYW1lLCBkZXBzLCBjYWxsYmFjaykgewotICAgIHZhciBtb2R1bGUgPSByZWdp
c3RyeVtuYW1lXTsKLQotICAgIC8vIElmIGEgbW9kdWxlIGZvciB0aGlzIG5hbWUgaGFzIGFscmVh
ZHkgYmVlbiBkZWZpbmVkIGFuZCBpcyBpbiBhbnkgc3RhdGUKLSAgICAvLyBvdGhlciB0aGFuIGBu
ZXdgIChtZWFuaW5nIGl0IGhhcyBiZWVuIG9yIGlzIGN1cnJlbnRseSBiZWluZyByZXF1aXJlZCks
Ci0gICAgLy8gdGhlbiB3ZSByZXR1cm4gZWFybHkgdG8gYXZvaWQgcmVkZWZpbml0aW9uLgotICAg
IGlmIChtb2R1bGUgJiYgbW9kdWxlLnN0YXRlICE9PSAnbmV3JykgewotICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikgewotICAgICAgdW5zdXBwb3J0
ZWRNb2R1bGUoYXJndW1lbnRzLmxlbmd0aCk7Ci0gICAgfQotCi0gICAgaWYgKCFfaXNBcnJheShk
ZXBzKSkgewotICAgICAgY2FsbGJhY2sgPSBkZXBzOwotICAgICAgZGVwcyA9IFtdOwotICAgIH0K
LQotICAgIGlmIChjYWxsYmFjayBpbnN0YW5jZW9mIEFsaWFzKSB7Ci0gICAgICByZWdpc3RyeVtu
YW1lXSA9IG5ldyBNb2R1bGUoY2FsbGJhY2submFtZSwgZGVwcywgY2FsbGJhY2ssIHRydWUpOwot
ICAgIH0gZWxzZSB7Ci0gICAgICByZWdpc3RyeVtuYW1lXSA9IG5ldyBNb2R1bGUobmFtZSwgZGVw
cywgY2FsbGJhY2ssIGZhbHNlKTsKLSAgICB9Ci0gIH07Ci0KLSAgLy8gd2UgZG9uJ3Qgc3VwcG9y
dCBhbGwgb2YgQU1ECi0gIC8vIGRlZmluZS5hbWQgPSB7fTsKLQotICBmdW5jdGlvbiBBbGlhcyhw
YXRoKSB7Ci0gICAgdGhpcy5uYW1lID0gcGF0aDsKLSAgfQotCi0gIGRlZmluZS5hbGlhcyA9IGZ1
bmN0aW9uIChwYXRoLCB0YXJnZXQpIHsKLSAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikg
ewotICAgICAgcmV0dXJuIGRlZmluZSh0YXJnZXQsIG5ldyBBbGlhcyhwYXRoKSk7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIG5ldyBBbGlhcyhwYXRoKTsKLSAgfTsKLQotICBmdW5jdGlvbiBtaXNzaW5n
TW9kdWxlKG5hbWUsIHJlZmVycmVyKSB7Ci0gICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3Qg
ZmluZCBtb2R1bGUgYCcgKyBuYW1lICsgJ2AgaW1wb3J0ZWQgZnJvbSBgJyArIHJlZmVycmVyICsg
J2AnKTsKLSAgfQotCi0gIGZ1bmN0aW9uIGZpbmRNb2R1bGUobmFtZSwgcmVmZXJyZXIsIHBlbmRp
bmcpIHsKLSAgICB2YXIgbW9kID0gcmVnaXN0cnlbbmFtZV0gfHwgcmVnaXN0cnlbbmFtZSArICcv
aW5kZXgnXTsKLQotICAgIHdoaWxlIChtb2QgJiYgbW9kLmlzQWxpYXMpIHsKLSAgICAgIG1vZCA9
IHJlZ2lzdHJ5W21vZC5uYW1lXTsKLSAgICB9Ci0KLSAgICBpZiAoIW1vZCkgewotICAgICAgbWlz
c2luZ01vZHVsZShuYW1lLCByZWZlcnJlcik7Ci0gICAgfQotCi0gICAgaWYgKHBlbmRpbmcgJiYg
bW9kLnN0YXRlICE9PSAncGVuZGluZycgJiYgbW9kLnN0YXRlICE9PSAnZmluYWxpemVkJykgewot
ICAgICAgbW9kLmZpbmREZXBzKHBlbmRpbmcpOwotICAgICAgcGVuZGluZy5wdXNoKG1vZCk7Ci0g
ICAgfQotICAgIHJldHVybiBtb2Q7Ci0gIH0KLQotICBmdW5jdGlvbiByZXNvbHZlKGNoaWxkLCBu
YW1lKSB7Ci0gICAgaWYgKGNoaWxkLmNoYXJBdCgwKSAhPT0gJy4nKSB7Ci0gICAgICByZXR1cm4g
Y2hpbGQ7Ci0gICAgfQotCi0gICAgdmFyIHBhcnRzID0gY2hpbGQuc3BsaXQoJy8nKTsKLSAgICB2
YXIgbmFtZVBhcnRzID0gbmFtZS5zcGxpdCgnLycpOwotICAgIHZhciBwYXJlbnRCYXNlID0gbmFt
ZVBhcnRzLnNsaWNlKDAsIC0xKTsKLQotICAgIGZvciAodmFyIGkgPSAwLCBsID0gcGFydHMubGVu
Z3RoOyBpIDwgbDsgaSsrKSB7Ci0gICAgICB2YXIgcGFydCA9IHBhcnRzW2ldOwotCi0gICAgICBp
ZiAocGFydCA9PT0gJy4uJykgewotICAgICAgICBpZiAocGFyZW50QmFzZS5sZW5ndGggPT09IDAp
IHsKLSAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBhY2Nlc3MgcGFyZW50IG1vZHVs
ZSBvZiByb290Jyk7Ci0gICAgICAgIH0KLSAgICAgICAgcGFyZW50QmFzZS5wb3AoKTsKLSAgICAg
IH0gZWxzZSBpZiAocGFydCA9PT0gJy4nKSB7Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAgfSBl
bHNlIHsKLSAgICAgICAgcGFyZW50QmFzZS5wdXNoKHBhcnQpOwotICAgICAgfQotICAgIH0KLQot
ICAgIHJldHVybiBwYXJlbnRCYXNlLmpvaW4oJy8nKTsKLSAgfQotCi0gIGZ1bmN0aW9uIGhhcyhu
YW1lKSB7Ci0gICAgcmV0dXJuICEhKHJlZ2lzdHJ5W25hbWVdIHx8IHJlZ2lzdHJ5W25hbWUgKyAn
L2luZGV4J10pOwotICB9Ci0KLSAgcmVxdWlyZWpzLmVudHJpZXMgPSByZXF1aXJlanMuX2Vha19z
ZWVuID0gcmVnaXN0cnk7Ci0gIHJlcXVpcmVqcy5oYXMgPSBoYXM7Ci0gIHJlcXVpcmVqcy51bnNl
ZSA9IGZ1bmN0aW9uIChtb2R1bGVOYW1lKSB7Ci0gICAgZmluZE1vZHVsZShtb2R1bGVOYW1lLCAn
KHVuc2VlKScsIGZhbHNlKS51bnNlZSgpOwotICB9OwotCi0gIHJlcXVpcmVqcy5jbGVhciA9IGZ1
bmN0aW9uICgpIHsKLSAgICByZXF1aXJlanMuZW50cmllcyA9IHJlcXVpcmVqcy5fZWFrX3NlZW4g
PSByZWdpc3RyeSA9IGRpY3QoKTsKLSAgICBzZWVuID0gZGljdCgpOwotICB9OwotCi0gIC8vIFRo
aXMgY29kZSBwcmltZXMgdGhlIEpTIGVuZ2luZSBmb3IgZ29vZCBwZXJmb3JtYW5jZSBieSB3YXJt
aW5nIHRoZQotICAvLyBKSVQgY29tcGlsZXIgZm9yIHRoZXNlIGZ1bmN0aW9ucy4KLSAgZGVmaW5l
KCdmb28nLCBmdW5jdGlvbiAoKSB7fSk7Ci0gIGRlZmluZSgnZm9vL2JhcicsIFtdLCBmdW5jdGlv
biAoKSB7fSk7Ci0gIGRlZmluZSgnZm9vL2FzZGYnLCBbJ21vZHVsZScsICdleHBvcnRzJywgJ3Jl
cXVpcmUnXSwgZnVuY3Rpb24gKG1vZHVsZSwgZXhwb3J0cywgcmVxdWlyZSkgewotICAgIGlmIChy
ZXF1aXJlLmhhcygnZm9vL2JhcicpKSB7Ci0gICAgICByZXF1aXJlKCdmb28vYmFyJyk7Ci0gICAg
fQotICB9KTsKLSAgZGVmaW5lKCdmb28vYmF6JywgW10sIGRlZmluZS5hbGlhcygnZm9vJykpOwot
ICBkZWZpbmUoJ2Zvby9xdXonLCBkZWZpbmUuYWxpYXMoJ2ZvbycpKTsKLSAgZGVmaW5lLmFsaWFz
KCdmb28nLCAnZm9vL3F1eCcpOwotICBkZWZpbmUoJ2Zvby9iYXInLCBbJ2ZvbycsICcuL3F1eics
ICcuL2JheicsICcuL2FzZGYnLCAnLi9iYXInLCAnLi4vZm9vJ10sIGZ1bmN0aW9uICgpIHt9KTsK
LSAgZGVmaW5lKCdmb28vbWFpbicsIFsnZm9vL2JhciddLCBmdW5jdGlvbiAoKSB7fSk7Ci0KLSAg
cmVxdWlyZSgnZm9vL21haW4nKTsKLSAgcmVxdWlyZS51bnNlZSgnZm9vL2JhcicpOwotCi0gIHJl
cXVpcmVqcy5jbGVhcigpOwotCi0gIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYg
dHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcgJiYgbW9kdWxlLmV4cG9ydHMpIHsKLSAgICBtb2R1
bGUuZXhwb3J0cyA9IHsgcmVxdWlyZTogcmVxdWlyZSwgZGVmaW5lOiBkZWZpbmUgfTsKLSAgfQot
fSkodGhpcyk7Ci07LyohCi0gKiBqUXVlcnkgSmF2YVNjcmlwdCBMaWJyYXJ5IHYyLjIuNAotICog
aHR0cDovL2pxdWVyeS5jb20vCi0gKgotICogSW5jbHVkZXMgU2l6emxlLmpzCi0gKiBodHRwOi8v
c2l6emxlanMuY29tLwotICoKLSAqIENvcHlyaWdodCBqUXVlcnkgRm91bmRhdGlvbiBhbmQgb3Ro
ZXIgY29udHJpYnV0b3JzCi0gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UKLSAqIGh0
dHA6Ly9qcXVlcnkub3JnL2xpY2Vuc2UKLSAqCi0gKiBEYXRlOiAyMDE2LTA1LTIwVDE3OjIzWgot
ICovCi0KLShmdW5jdGlvbiggZ2xvYmFsLCBmYWN0b3J5ICkgewotCi0gICAgaWYgKCB0eXBlb2Yg
bW9kdWxlID09PSAib2JqZWN0IiAmJiB0eXBlb2YgbW9kdWxlLmV4cG9ydHMgPT09ICJvYmplY3Qi
ICkgewotICAgICAgICAvLyBGb3IgQ29tbW9uSlMgYW5kIENvbW1vbkpTLWxpa2UgZW52aXJvbm1l
bnRzIHdoZXJlIGEgcHJvcGVyIGB3aW5kb3dgCi0gICAgICAgIC8vIGlzIHByZXNlbnQsIGV4ZWN1
dGUgdGhlIGZhY3RvcnkgYW5kIGdldCBqUXVlcnkuCi0gICAgICAgIC8vIEZvciBlbnZpcm9ubWVu
dHMgdGhhdCBkbyBub3QgaGF2ZSBhIGB3aW5kb3dgIHdpdGggYSBgZG9jdW1lbnRgCi0gICAgICAg
IC8vIChzdWNoIGFzIE5vZGUuanMpLCBleHBvc2UgYSBmYWN0b3J5IGFzIG1vZHVsZS5leHBvcnRz
LgotICAgICAgICAvLyBUaGlzIGFjY2VudHVhdGVzIHRoZSBuZWVkIGZvciB0aGUgY3JlYXRpb24g
b2YgYSByZWFsIGB3aW5kb3dgLgotICAgICAgICAvLyBlLmcuIHZhciBqUXVlcnkgPSByZXF1aXJl
KCJqcXVlcnkiKSh3aW5kb3cpOwotICAgICAgICAvLyBTZWUgdGlja2V0ICMxNDU0OSBmb3IgbW9y
ZSBpbmZvLgotICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGdsb2JhbC5kb2N1bWVudCA/Ci0gICAg
ICAgICAgICBmYWN0b3J5KCBnbG9iYWwsIHRydWUgKSA6Ci0gICAgICAgICAgICBmdW5jdGlvbigg
dyApIHsKLSAgICAgICAgICAgICAgICBpZiAoICF3LmRvY3VtZW50ICkgewotICAgICAgICAgICAg
ICAgICAgICB0aHJvdyBuZXcgRXJyb3IoICJqUXVlcnkgcmVxdWlyZXMgYSB3aW5kb3cgd2l0aCBh
IGRvY3VtZW50IiApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFjdG9yeSggdyApOwotICAgICAgICAgICAgfTsKLSAgICB9IGVsc2UgewotICAgICAgICBmYWN0
b3J5KCBnbG9iYWwgKTsKLSAgICB9Ci0KLS8vIFBhc3MgdGhpcyBpZiB3aW5kb3cgaXMgbm90IGRl
ZmluZWQgeWV0Ci19KHR5cGVvZiB3aW5kb3cgIT09ICJ1bmRlZmluZWQiID8gd2luZG93IDogdGhp
cywgZnVuY3Rpb24oIHdpbmRvdywgbm9HbG9iYWwgKSB7Ci0KLS8vIFN1cHBvcnQ6IEZpcmVmb3gg
MTgrCi0vLyBDYW4ndCBiZSBpbiBzdHJpY3QgbW9kZSwgc2V2ZXJhbCBsaWJzIGluY2x1ZGluZyBB
U1AuTkVUIHRyYWNlCi0vLyB0aGUgc3RhY2sgdmlhIGFyZ3VtZW50cy5jYWxsZXIuY2FsbGVlIGFu
ZCBGaXJlZm94IGRpZXMgaWYKLS8vIHlvdSB0cnkgdG8gdHJhY2UgdGhyb3VnaCAidXNlIHN0cmlj
dCIgY2FsbCBjaGFpbnMuICgjMTMzMzUpCi0vLyJ1c2Ugc3RyaWN0IjsKLXZhciBhcnIgPSBbXTsK
LQotdmFyIGRvY3VtZW50ID0gd2luZG93LmRvY3VtZW50OwotCi12YXIgc2xpY2UgPSBhcnIuc2xp
Y2U7Ci0KLXZhciBjb25jYXQgPSBhcnIuY29uY2F0OwotCi12YXIgcHVzaCA9IGFyci5wdXNoOwot
Ci12YXIgaW5kZXhPZiA9IGFyci5pbmRleE9mOwotCi12YXIgY2xhc3MydHlwZSA9IHt9OwotCi12
YXIgdG9TdHJpbmcgPSBjbGFzczJ0eXBlLnRvU3RyaW5nOwotCi12YXIgaGFzT3duID0gY2xhc3My
dHlwZS5oYXNPd25Qcm9wZXJ0eTsKLQotdmFyIHN1cHBvcnQgPSB7fTsKLQotCi0KLXZhcgotICAg
IHZlcnNpb24gPSAiMi4yLjQiLAotCi0gICAgLy8gRGVmaW5lIGEgbG9jYWwgY29weSBvZiBqUXVl
cnkKLSAgICBqUXVlcnkgPSBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQgKSB7Ci0KLSAgICAg
ICAgLy8gVGhlIGpRdWVyeSBvYmplY3QgaXMgYWN0dWFsbHkganVzdCB0aGUgaW5pdCBjb25zdHJ1
Y3RvciAnZW5oYW5jZWQnCi0gICAgICAgIC8vIE5lZWQgaW5pdCBpZiBqUXVlcnkgaXMgY2FsbGVk
IChqdXN0IGFsbG93IGVycm9yIHRvIGJlIHRocm93biBpZiBub3QgaW5jbHVkZWQpCi0gICAgICAg
IHJldHVybiBuZXcgalF1ZXJ5LmZuLmluaXQoIHNlbGVjdG9yLCBjb250ZXh0ICk7Ci0gICAgfSwK
LQotICAgIC8vIFN1cHBvcnQ6IEFuZHJvaWQ8NC4xCi0gICAgLy8gTWFrZSBzdXJlIHdlIHRyaW0g
Qk9NIGFuZCBOQlNQCi0gICAgcnRyaW0gPSAvXltcc1x1RkVGRlx4QTBdK3xbXHNcdUZFRkZceEEw
XSskL2csCi0KLSAgICAvLyBNYXRjaGVzIGRhc2hlZCBzdHJpbmcgZm9yIGNhbWVsaXppbmcKLSAg
ICBybXNQcmVmaXggPSAvXi1tcy0vLAotICAgIHJkYXNoQWxwaGEgPSAvLShbXGRhLXpdKS9naSwK
LQotICAgIC8vIFVzZWQgYnkgalF1ZXJ5LmNhbWVsQ2FzZSBhcyBjYWxsYmFjayB0byByZXBsYWNl
KCkKLSAgICBmY2FtZWxDYXNlID0gZnVuY3Rpb24oIGFsbCwgbGV0dGVyICkgewotICAgICAgICBy
ZXR1cm4gbGV0dGVyLnRvVXBwZXJDYXNlKCk7Ci0gICAgfTsKLQotalF1ZXJ5LmZuID0galF1ZXJ5
LnByb3RvdHlwZSA9IHsKLQotICAgIC8vIFRoZSBjdXJyZW50IHZlcnNpb24gb2YgalF1ZXJ5IGJl
aW5nIHVzZWQKLSAgICBqcXVlcnk6IHZlcnNpb24sCi0KLSAgICBjb25zdHJ1Y3RvcjogalF1ZXJ5
LAotCi0gICAgLy8gU3RhcnQgd2l0aCBhbiBlbXB0eSBzZWxlY3RvcgotICAgIHNlbGVjdG9yOiAi
IiwKLQotICAgIC8vIFRoZSBkZWZhdWx0IGxlbmd0aCBvZiBhIGpRdWVyeSBvYmplY3QgaXMgMAot
ICAgIGxlbmd0aDogMCwKLQotICAgIHRvQXJyYXk6IGZ1bmN0aW9uKCkgewotICAgICAgICByZXR1
cm4gc2xpY2UuY2FsbCggdGhpcyApOwotICAgIH0sCi0KLSAgICAvLyBHZXQgdGhlIE50aCBlbGVt
ZW50IGluIHRoZSBtYXRjaGVkIGVsZW1lbnQgc2V0IE9SCi0gICAgLy8gR2V0IHRoZSB3aG9sZSBt
YXRjaGVkIGVsZW1lbnQgc2V0IGFzIGEgY2xlYW4gYXJyYXkKLSAgICBnZXQ6IGZ1bmN0aW9uKCBu
dW0gKSB7Ci0gICAgICAgIHJldHVybiBudW0gIT0gbnVsbCA/Ci0KLSAgICAgICAgICAgIC8vIFJl
dHVybiBqdXN0IHRoZSBvbmUgZWxlbWVudCBmcm9tIHRoZSBzZXQKLSAgICAgICAgICAgICggbnVt
IDwgMCA/IHRoaXNbIG51bSArIHRoaXMubGVuZ3RoIF0gOiB0aGlzWyBudW0gXSApIDoKLQotICAg
ICAgICAgICAgLy8gUmV0dXJuIGFsbCB0aGUgZWxlbWVudHMgaW4gYSBjbGVhbiBhcnJheQotICAg
ICAgICAgICAgc2xpY2UuY2FsbCggdGhpcyApOwotICAgIH0sCi0KLSAgICAvLyBUYWtlIGFuIGFy
cmF5IG9mIGVsZW1lbnRzIGFuZCBwdXNoIGl0IG9udG8gdGhlIHN0YWNrCi0gICAgLy8gKHJldHVy
bmluZyB0aGUgbmV3IG1hdGNoZWQgZWxlbWVudCBzZXQpCi0gICAgcHVzaFN0YWNrOiBmdW5jdGlv
biggZWxlbXMgKSB7Ci0KLSAgICAgICAgLy8gQnVpbGQgYSBuZXcgalF1ZXJ5IG1hdGNoZWQgZWxl
bWVudCBzZXQKLSAgICAgICAgdmFyIHJldCA9IGpRdWVyeS5tZXJnZSggdGhpcy5jb25zdHJ1Y3Rv
cigpLCBlbGVtcyApOwotCi0gICAgICAgIC8vIEFkZCB0aGUgb2xkIG9iamVjdCBvbnRvIHRoZSBz
dGFjayAoYXMgYSByZWZlcmVuY2UpCi0gICAgICAgIHJldC5wcmV2T2JqZWN0ID0gdGhpczsKLSAg
ICAgICAgcmV0LmNvbnRleHQgPSB0aGlzLmNvbnRleHQ7Ci0KLSAgICAgICAgLy8gUmV0dXJuIHRo
ZSBuZXdseS1mb3JtZWQgZWxlbWVudCBzZXQKLSAgICAgICAgcmV0dXJuIHJldDsKLSAgICB9LAot
Ci0gICAgLy8gRXhlY3V0ZSBhIGNhbGxiYWNrIGZvciBldmVyeSBlbGVtZW50IGluIHRoZSBtYXRj
aGVkIHNldC4KLSAgICBlYWNoOiBmdW5jdGlvbiggY2FsbGJhY2sgKSB7Ci0gICAgICAgIHJldHVy
biBqUXVlcnkuZWFjaCggdGhpcywgY2FsbGJhY2sgKTsKLSAgICB9LAotCi0gICAgbWFwOiBmdW5j
dGlvbiggY2FsbGJhY2sgKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLnB1c2hTdGFjayggalF1ZXJ5
Lm1hcCggdGhpcywgZnVuY3Rpb24oIGVsZW0sIGkgKSB7Ci0gICAgICAgICAgICByZXR1cm4gY2Fs
bGJhY2suY2FsbCggZWxlbSwgaSwgZWxlbSApOwotICAgICAgICB9ICkgKTsKLSAgICB9LAotCi0g
ICAgc2xpY2U6IGZ1bmN0aW9uKCkgewotICAgICAgICByZXR1cm4gdGhpcy5wdXNoU3RhY2soIHNs
aWNlLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKSApOwotICAgIH0sCi0KLSAgICBmaXJzdDogZnVu
Y3Rpb24oKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLmVxKCAwICk7Ci0gICAgfSwKLQotICAgIGxh
c3Q6IGZ1bmN0aW9uKCkgewotICAgICAgICByZXR1cm4gdGhpcy5lcSggLTEgKTsKLSAgICB9LAot
Ci0gICAgZXE6IGZ1bmN0aW9uKCBpICkgewotICAgICAgICB2YXIgbGVuID0gdGhpcy5sZW5ndGgs
Ci0gICAgICAgICAgICBqID0gK2kgKyAoIGkgPCAwID8gbGVuIDogMCApOwotICAgICAgICByZXR1
cm4gdGhpcy5wdXNoU3RhY2soIGogPj0gMCAmJiBqIDwgbGVuID8gWyB0aGlzWyBqIF0gXSA6IFtd
ICk7Ci0gICAgfSwKLQotICAgIGVuZDogZnVuY3Rpb24oKSB7Ci0gICAgICAgIHJldHVybiB0aGlz
LnByZXZPYmplY3QgfHwgdGhpcy5jb25zdHJ1Y3RvcigpOwotICAgIH0sCi0KLSAgICAvLyBGb3Ig
aW50ZXJuYWwgdXNlIG9ubHkuCi0gICAgLy8gQmVoYXZlcyBsaWtlIGFuIEFycmF5J3MgbWV0aG9k
LCBub3QgbGlrZSBhIGpRdWVyeSBtZXRob2QuCi0gICAgcHVzaDogcHVzaCwKLSAgICBzb3J0OiBh
cnIuc29ydCwKLSAgICBzcGxpY2U6IGFyci5zcGxpY2UKLX07Ci0KLWpRdWVyeS5leHRlbmQgPSBq
UXVlcnkuZm4uZXh0ZW5kID0gZnVuY3Rpb24oKSB7Ci0gICAgdmFyIG9wdGlvbnMsIG5hbWUsIHNy
YywgY29weSwgY29weUlzQXJyYXksIGNsb25lLAotICAgICAgICB0YXJnZXQgPSBhcmd1bWVudHNb
IDAgXSB8fCB7fSwKLSAgICAgICAgaSA9IDEsCi0gICAgICAgIGxlbmd0aCA9IGFyZ3VtZW50cy5s
ZW5ndGgsCi0gICAgICAgIGRlZXAgPSBmYWxzZTsKLQotICAgIC8vIEhhbmRsZSBhIGRlZXAgY29w
eSBzaXR1YXRpb24KLSAgICBpZiAoIHR5cGVvZiB0YXJnZXQgPT09ICJib29sZWFuIiApIHsKLSAg
ICAgICAgZGVlcCA9IHRhcmdldDsKLQotICAgICAgICAvLyBTa2lwIHRoZSBib29sZWFuIGFuZCB0
aGUgdGFyZ2V0Ci0gICAgICAgIHRhcmdldCA9IGFyZ3VtZW50c1sgaSBdIHx8IHt9OwotICAgICAg
ICBpKys7Ci0gICAgfQotCi0gICAgLy8gSGFuZGxlIGNhc2Ugd2hlbiB0YXJnZXQgaXMgYSBzdHJp
bmcgb3Igc29tZXRoaW5nIChwb3NzaWJsZSBpbiBkZWVwIGNvcHkpCi0gICAgaWYgKCB0eXBlb2Yg
dGFyZ2V0ICE9PSAib2JqZWN0IiAmJiAhalF1ZXJ5LmlzRnVuY3Rpb24oIHRhcmdldCApICkgewot
ICAgICAgICB0YXJnZXQgPSB7fTsKLSAgICB9Ci0KLSAgICAvLyBFeHRlbmQgalF1ZXJ5IGl0c2Vs
ZiBpZiBvbmx5IG9uZSBhcmd1bWVudCBpcyBwYXNzZWQKLSAgICBpZiAoIGkgPT09IGxlbmd0aCAp
IHsKLSAgICAgICAgdGFyZ2V0ID0gdGhpczsKLSAgICAgICAgaS0tOwotICAgIH0KLQotICAgIGZv
ciAoIDsgaSA8IGxlbmd0aDsgaSsrICkgewotCi0gICAgICAgIC8vIE9ubHkgZGVhbCB3aXRoIG5v
bi1udWxsL3VuZGVmaW5lZCB2YWx1ZXMKLSAgICAgICAgaWYgKCAoIG9wdGlvbnMgPSBhcmd1bWVu
dHNbIGkgXSApICE9IG51bGwgKSB7Ci0KLSAgICAgICAgICAgIC8vIEV4dGVuZCB0aGUgYmFzZSBv
YmplY3QKLSAgICAgICAgICAgIGZvciAoIG5hbWUgaW4gb3B0aW9ucyApIHsKLSAgICAgICAgICAg
ICAgICBzcmMgPSB0YXJnZXRbIG5hbWUgXTsKLSAgICAgICAgICAgICAgICBjb3B5ID0gb3B0aW9u
c1sgbmFtZSBdOwotCi0gICAgICAgICAgICAgICAgLy8gUHJldmVudCBuZXZlci1lbmRpbmcgbG9v
cAotICAgICAgICAgICAgICAgIGlmICggdGFyZ2V0ID09PSBjb3B5ICkgewotICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAv
LyBSZWN1cnNlIGlmIHdlJ3JlIG1lcmdpbmcgcGxhaW4gb2JqZWN0cyBvciBhcnJheXMKLSAgICAg
ICAgICAgICAgICBpZiAoIGRlZXAgJiYgY29weSAmJiAoIGpRdWVyeS5pc1BsYWluT2JqZWN0KCBj
b3B5ICkgfHwKLSAgICAgICAgICAgICAgICAgICAgKCBjb3B5SXNBcnJheSA9IGpRdWVyeS5pc0Fy
cmF5KCBjb3B5ICkgKSApICkgewotCi0gICAgICAgICAgICAgICAgICAgIGlmICggY29weUlzQXJy
YXkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb3B5SXNBcnJheSA9IGZhbHNlOwotICAg
ICAgICAgICAgICAgICAgICAgICAgY2xvbmUgPSBzcmMgJiYgalF1ZXJ5LmlzQXJyYXkoIHNyYyAp
ID8gc3JjIDogW107Ci0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGNsb25lID0gc3JjICYmIGpRdWVyeS5pc1BsYWluT2JqZWN0KCBzcmMgKSA/
IHNyYyA6IHt9OwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAg
Ly8gTmV2ZXIgbW92ZSBvcmlnaW5hbCBvYmplY3RzLCBjbG9uZSB0aGVtCi0gICAgICAgICAgICAg
ICAgICAgIHRhcmdldFsgbmFtZSBdID0galF1ZXJ5LmV4dGVuZCggZGVlcCwgY2xvbmUsIGNvcHkg
KTsKLQotICAgICAgICAgICAgICAgIC8vIERvbid0IGJyaW5nIGluIHVuZGVmaW5lZCB2YWx1ZXMK
LSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBjb3B5ICE9PSB1bmRlZmluZWQgKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHRhcmdldFsgbmFtZSBdID0gY29weTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gdGhlIG1v
ZGlmaWVkIG9iamVjdAotICAgIHJldHVybiB0YXJnZXQ7Ci19OwotCi1qUXVlcnkuZXh0ZW5kKCB7
Ci0KLSAgICAvLyBVbmlxdWUgZm9yIGVhY2ggY29weSBvZiBqUXVlcnkgb24gdGhlIHBhZ2UKLSAg
ICBleHBhbmRvOiAialF1ZXJ5IiArICggdmVyc2lvbiArIE1hdGgucmFuZG9tKCkgKS5yZXBsYWNl
KCAvXEQvZywgIiIgKSwKLQotICAgIC8vIEFzc3VtZSBqUXVlcnkgaXMgcmVhZHkgd2l0aG91dCB0
aGUgcmVhZHkgbW9kdWxlCi0gICAgaXNSZWFkeTogdHJ1ZSwKLQotICAgIGVycm9yOiBmdW5jdGlv
biggbXNnICkgewotICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIG1zZyApOwotICAgIH0sCi0KLSAg
ICBub29wOiBmdW5jdGlvbigpIHt9LAotCi0gICAgaXNGdW5jdGlvbjogZnVuY3Rpb24oIG9iaiAp
IHsKLSAgICAgICAgcmV0dXJuIGpRdWVyeS50eXBlKCBvYmogKSA9PT0gImZ1bmN0aW9uIjsKLSAg
ICB9LAotCi0gICAgaXNBcnJheTogQXJyYXkuaXNBcnJheSwKLQotICAgIGlzV2luZG93OiBmdW5j
dGlvbiggb2JqICkgewotICAgICAgICByZXR1cm4gb2JqICE9IG51bGwgJiYgb2JqID09PSBvYmou
d2luZG93OwotICAgIH0sCi0KLSAgICBpc051bWVyaWM6IGZ1bmN0aW9uKCBvYmogKSB7Ci0KLSAg
ICAgICAgLy8gcGFyc2VGbG9hdCBOYU5zIG51bWVyaWMtY2FzdCBmYWxzZSBwb3NpdGl2ZXMgKG51
bGx8dHJ1ZXxmYWxzZXwiIikKLSAgICAgICAgLy8gLi4uYnV0IG1pc2ludGVycHJldHMgbGVhZGlu
Zy1udW1iZXIgc3RyaW5ncywgcGFydGljdWxhcmx5IGhleCBsaXRlcmFscyAoIjB4Li4uIikKLSAg
ICAgICAgLy8gc3VidHJhY3Rpb24gZm9yY2VzIGluZmluaXRpZXMgdG8gTmFOCi0gICAgICAgIC8v
IGFkZGluZyAxIGNvcnJlY3RzIGxvc3Mgb2YgcHJlY2lzaW9uIGZyb20gcGFyc2VGbG9hdCAoIzE1
MTAwKQotICAgICAgICB2YXIgcmVhbFN0cmluZ09iaiA9IG9iaiAmJiBvYmoudG9TdHJpbmcoKTsK
LSAgICAgICAgcmV0dXJuICFqUXVlcnkuaXNBcnJheSggb2JqICkgJiYgKCByZWFsU3RyaW5nT2Jq
IC0gcGFyc2VGbG9hdCggcmVhbFN0cmluZ09iaiApICsgMSApID49IDA7Ci0gICAgfSwKLQotICAg
IGlzUGxhaW5PYmplY3Q6IGZ1bmN0aW9uKCBvYmogKSB7Ci0gICAgICAgIHZhciBrZXk7Ci0KLSAg
ICAgICAgLy8gTm90IHBsYWluIG9iamVjdHM6Ci0gICAgICAgIC8vIC0gQW55IG9iamVjdCBvciB2
YWx1ZSB3aG9zZSBpbnRlcm5hbCBbW0NsYXNzXV0gcHJvcGVydHkgaXMgbm90ICJbb2JqZWN0IE9i
amVjdF0iCi0gICAgICAgIC8vIC0gRE9NIG5vZGVzCi0gICAgICAgIC8vIC0gd2luZG93Ci0gICAg
ICAgIGlmICggalF1ZXJ5LnR5cGUoIG9iaiApICE9PSAib2JqZWN0IiB8fCBvYmoubm9kZVR5cGUg
fHwgalF1ZXJ5LmlzV2luZG93KCBvYmogKSApIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgfQotCi0gICAgICAgIC8vIE5vdCBvd24gY29uc3RydWN0b3IgcHJvcGVydHkgbXVz
dCBiZSBPYmplY3QKLSAgICAgICAgaWYgKCBvYmouY29uc3RydWN0b3IgJiYKLSAgICAgICAgICAg
ICAgICAhaGFzT3duLmNhbGwoIG9iaiwgImNvbnN0cnVjdG9yIiApICYmCi0gICAgICAgICAgICAg
ICAgIWhhc093bi5jYWxsKCBvYmouY29uc3RydWN0b3IucHJvdG90eXBlIHx8IHt9LCAiaXNQcm90
b3R5cGVPZiIgKSApIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0g
ICAgICAgIC8vIE93biBwcm9wZXJ0aWVzIGFyZSBlbnVtZXJhdGVkIGZpcnN0bHksIHNvIHRvIHNw
ZWVkIHVwLAotICAgICAgICAvLyBpZiBsYXN0IG9uZSBpcyBvd24sIHRoZW4gYWxsIHByb3BlcnRp
ZXMgYXJlIG93bgotICAgICAgICBmb3IgKCBrZXkgaW4gb2JqICkge30KLQotICAgICAgICByZXR1
cm4ga2V5ID09PSB1bmRlZmluZWQgfHwgaGFzT3duLmNhbGwoIG9iaiwga2V5ICk7Ci0gICAgfSwK
LQotICAgIGlzRW1wdHlPYmplY3Q6IGZ1bmN0aW9uKCBvYmogKSB7Ci0gICAgICAgIHZhciBuYW1l
OwotICAgICAgICBmb3IgKCBuYW1lIGluIG9iaiApIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9LAotCi0gICAgdHlwZTog
ZnVuY3Rpb24oIG9iaiApIHsKLSAgICAgICAgaWYgKCBvYmogPT0gbnVsbCApIHsKLSAgICAgICAg
ICAgIHJldHVybiBvYmogKyAiIjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFN1cHBvcnQ6IEFu
ZHJvaWQ8NC4wLCBpT1M8NiAoZnVuY3Rpb25pc2ggUmVnRXhwKQotICAgICAgICByZXR1cm4gdHlw
ZW9mIG9iaiA9PT0gIm9iamVjdCIgfHwgdHlwZW9mIG9iaiA9PT0gImZ1bmN0aW9uIiA/Ci0gICAg
ICAgICAgICBjbGFzczJ0eXBlWyB0b1N0cmluZy5jYWxsKCBvYmogKSBdIHx8ICJvYmplY3QiIDoK
LSAgICAgICAgICAgIHR5cGVvZiBvYmo7Ci0gICAgfSwKLQotICAgIC8vIEV2YWx1YXRlcyBhIHNj
cmlwdCBpbiBhIGdsb2JhbCBjb250ZXh0Ci0gICAgZ2xvYmFsRXZhbDogZnVuY3Rpb24oIGNvZGUg
KSB7Ci0gICAgICAgIHZhciBzY3JpcHQsCi0gICAgICAgICAgICBpbmRpcmVjdCA9IGV2YWw7Ci0K
LSAgICAgICAgY29kZSA9IGpRdWVyeS50cmltKCBjb2RlICk7Ci0KLSAgICAgICAgaWYgKCBjb2Rl
ICkgewotCi0gICAgICAgICAgICAvLyBJZiB0aGUgY29kZSBpbmNsdWRlcyBhIHZhbGlkLCBwcm9s
b2d1ZSBwb3NpdGlvbgotICAgICAgICAgICAgLy8gc3RyaWN0IG1vZGUgcHJhZ21hLCBleGVjdXRl
IGNvZGUgYnkgaW5qZWN0aW5nIGEKLSAgICAgICAgICAgIC8vIHNjcmlwdCB0YWcgaW50byB0aGUg
ZG9jdW1lbnQuCi0gICAgICAgICAgICBpZiAoIGNvZGUuaW5kZXhPZiggInVzZSBzdHJpY3QiICkg
PT09IDEgKSB7Ci0gICAgICAgICAgICAgICAgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCggInNjcmlwdCIgKTsKLSAgICAgICAgICAgICAgICBzY3JpcHQudGV4dCA9IGNvZGU7Ci0gICAg
ICAgICAgICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCggc2NyaXB0ICkucGFyZW50Tm9k
ZS5yZW1vdmVDaGlsZCggc2NyaXB0ICk7Ci0gICAgICAgICAgICB9IGVsc2UgewotCi0gICAgICAg
ICAgICAgICAgLy8gT3RoZXJ3aXNlLCBhdm9pZCB0aGUgRE9NIG5vZGUgY3JlYXRpb24sIGluc2Vy
dGlvbgotICAgICAgICAgICAgICAgIC8vIGFuZCByZW1vdmFsIGJ5IHVzaW5nIGFuIGluZGlyZWN0
IGdsb2JhbCBldmFsCi0KLSAgICAgICAgICAgICAgICBpbmRpcmVjdCggY29kZSApOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgfSwKLQotICAgIC8vIENvbnZlcnQgZGFzaGVkIHRvIGNh
bWVsQ2FzZTsgdXNlZCBieSB0aGUgY3NzIGFuZCBkYXRhIG1vZHVsZXMKLSAgICAvLyBTdXBwb3J0
OiBJRTktMTErCi0gICAgLy8gTWljcm9zb2Z0IGZvcmdvdCB0byBodW1wIHRoZWlyIHZlbmRvciBw
cmVmaXggKCM5NTcyKQotICAgIGNhbWVsQ2FzZTogZnVuY3Rpb24oIHN0cmluZyApIHsKLSAgICAg
ICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKCBybXNQcmVmaXgsICJtcy0iICkucmVwbGFjZSggcmRh
c2hBbHBoYSwgZmNhbWVsQ2FzZSApOwotICAgIH0sCi0KLSAgICBub2RlTmFtZTogZnVuY3Rpb24o
IGVsZW0sIG5hbWUgKSB7Ci0gICAgICAgIHJldHVybiBlbGVtLm5vZGVOYW1lICYmIGVsZW0ubm9k
ZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbmFtZS50b0xvd2VyQ2FzZSgpOwotICAgIH0sCi0KLSAg
ICBlYWNoOiBmdW5jdGlvbiggb2JqLCBjYWxsYmFjayApIHsKLSAgICAgICAgdmFyIGxlbmd0aCwg
aSA9IDA7Ci0KLSAgICAgICAgaWYgKCBpc0FycmF5TGlrZSggb2JqICkgKSB7Ci0gICAgICAgICAg
ICBsZW5ndGggPSBvYmoubGVuZ3RoOwotICAgICAgICAgICAgZm9yICggOyBpIDwgbGVuZ3RoOyBp
KysgKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCBjYWxsYmFjay5jYWxsKCBvYmpbIGkgXSwgaSwg
b2JqWyBpIF0gKSA9PT0gZmFsc2UgKSB7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIGZvciAoIGkgaW4gb2JqICkgewotICAgICAgICAgICAgICAgIGlmICggY2FsbGJhY2suY2Fs
bCggb2JqWyBpIF0sIGksIG9ialsgaSBdICkgPT09IGZhbHNlICkgewotICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LQotICAgICAgICByZXR1cm4gb2JqOwotICAgIH0sCi0KLSAgICAvLyBTdXBwb3J0OiBBbmRyb2lk
PDQuMQotICAgIHRyaW06IGZ1bmN0aW9uKCB0ZXh0ICkgewotICAgICAgICByZXR1cm4gdGV4dCA9
PSBudWxsID8KLSAgICAgICAgICAgICIiIDoKLSAgICAgICAgICAgICggdGV4dCArICIiICkucmVw
bGFjZSggcnRyaW0sICIiICk7Ci0gICAgfSwKLQotICAgIC8vIHJlc3VsdHMgaXMgZm9yIGludGVy
bmFsIHVzYWdlIG9ubHkKLSAgICBtYWtlQXJyYXk6IGZ1bmN0aW9uKCBhcnIsIHJlc3VsdHMgKSB7
Ci0gICAgICAgIHZhciByZXQgPSByZXN1bHRzIHx8IFtdOwotCi0gICAgICAgIGlmICggYXJyICE9
IG51bGwgKSB7Ci0gICAgICAgICAgICBpZiAoIGlzQXJyYXlMaWtlKCBPYmplY3QoIGFyciApICkg
KSB7Ci0gICAgICAgICAgICAgICAgalF1ZXJ5Lm1lcmdlKCByZXQsCi0gICAgICAgICAgICAgICAg
ICAgIHR5cGVvZiBhcnIgPT09ICJzdHJpbmciID8KLSAgICAgICAgICAgICAgICAgICAgWyBhcnIg
XSA6IGFycgotICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgIHB1c2guY2FsbCggcmV0LCBhcnIgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotCi0gICAgICAgIHJldHVybiByZXQ7Ci0gICAgfSwKLQotICAgIGluQXJyYXk6IGZ1bmN0aW9u
KCBlbGVtLCBhcnIsIGkgKSB7Ci0gICAgICAgIHJldHVybiBhcnIgPT0gbnVsbCA/IC0xIDogaW5k
ZXhPZi5jYWxsKCBhcnIsIGVsZW0sIGkgKTsKLSAgICB9LAotCi0gICAgbWVyZ2U6IGZ1bmN0aW9u
KCBmaXJzdCwgc2Vjb25kICkgewotICAgICAgICB2YXIgbGVuID0gK3NlY29uZC5sZW5ndGgsCi0g
ICAgICAgICAgICBqID0gMCwKLSAgICAgICAgICAgIGkgPSBmaXJzdC5sZW5ndGg7Ci0KLSAgICAg
ICAgZm9yICggOyBqIDwgbGVuOyBqKysgKSB7Ci0gICAgICAgICAgICBmaXJzdFsgaSsrIF0gPSBz
ZWNvbmRbIGogXTsKLSAgICAgICAgfQotCi0gICAgICAgIGZpcnN0Lmxlbmd0aCA9IGk7Ci0KLSAg
ICAgICAgcmV0dXJuIGZpcnN0OwotICAgIH0sCi0KLSAgICBncmVwOiBmdW5jdGlvbiggZWxlbXMs
IGNhbGxiYWNrLCBpbnZlcnQgKSB7Ci0gICAgICAgIHZhciBjYWxsYmFja0ludmVyc2UsCi0gICAg
ICAgICAgICBtYXRjaGVzID0gW10sCi0gICAgICAgICAgICBpID0gMCwKLSAgICAgICAgICAgIGxl
bmd0aCA9IGVsZW1zLmxlbmd0aCwKLSAgICAgICAgICAgIGNhbGxiYWNrRXhwZWN0ID0gIWludmVy
dDsKLQotICAgICAgICAvLyBHbyB0aHJvdWdoIHRoZSBhcnJheSwgb25seSBzYXZpbmcgdGhlIGl0
ZW1zCi0gICAgICAgIC8vIHRoYXQgcGFzcyB0aGUgdmFsaWRhdG9yIGZ1bmN0aW9uCi0gICAgICAg
IGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkgewotICAgICAgICAgICAgY2FsbGJhY2tJbnZlcnNl
ID0gIWNhbGxiYWNrKCBlbGVtc1sgaSBdLCBpICk7Ci0gICAgICAgICAgICBpZiAoIGNhbGxiYWNr
SW52ZXJzZSAhPT0gY2FsbGJhY2tFeHBlY3QgKSB7Ci0gICAgICAgICAgICAgICAgbWF0Y2hlcy5w
dXNoKCBlbGVtc1sgaSBdICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBy
ZXR1cm4gbWF0Y2hlczsKLSAgICB9LAotCi0gICAgLy8gYXJnIGlzIGZvciBpbnRlcm5hbCB1c2Fn
ZSBvbmx5Ci0gICAgbWFwOiBmdW5jdGlvbiggZWxlbXMsIGNhbGxiYWNrLCBhcmcgKSB7Ci0gICAg
ICAgIHZhciBsZW5ndGgsIHZhbHVlLAotICAgICAgICAgICAgaSA9IDAsCi0gICAgICAgICAgICBy
ZXQgPSBbXTsKLQotICAgICAgICAvLyBHbyB0aHJvdWdoIHRoZSBhcnJheSwgdHJhbnNsYXRpbmcg
ZWFjaCBvZiB0aGUgaXRlbXMgdG8gdGhlaXIgbmV3IHZhbHVlcwotICAgICAgICBpZiAoIGlzQXJy
YXlMaWtlKCBlbGVtcyApICkgewotICAgICAgICAgICAgbGVuZ3RoID0gZWxlbXMubGVuZ3RoOwot
ICAgICAgICAgICAgZm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7Ci0gICAgICAgICAgICAgICAg
dmFsdWUgPSBjYWxsYmFjayggZWxlbXNbIGkgXSwgaSwgYXJnICk7Ci0KLSAgICAgICAgICAgICAg
ICBpZiAoIHZhbHVlICE9IG51bGwgKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldC5wdXNoKCB2
YWx1ZSApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAvLyBH
byB0aHJvdWdoIGV2ZXJ5IGtleSBvbiB0aGUgb2JqZWN0LAotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgZm9yICggaSBpbiBlbGVtcyApIHsKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IGNh
bGxiYWNrKCBlbGVtc1sgaSBdLCBpLCBhcmcgKTsKLQotICAgICAgICAgICAgICAgIGlmICggdmFs
dWUgIT0gbnVsbCApIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0LnB1c2goIHZhbHVlICk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8g
RmxhdHRlbiBhbnkgbmVzdGVkIGFycmF5cwotICAgICAgICByZXR1cm4gY29uY2F0LmFwcGx5KCBb
XSwgcmV0ICk7Ci0gICAgfSwKLQotICAgIC8vIEEgZ2xvYmFsIEdVSUQgY291bnRlciBmb3Igb2Jq
ZWN0cwotICAgIGd1aWQ6IDEsCi0KLSAgICAvLyBCaW5kIGEgZnVuY3Rpb24gdG8gYSBjb250ZXh0
LCBvcHRpb25hbGx5IHBhcnRpYWxseSBhcHBseWluZyBhbnkKLSAgICAvLyBhcmd1bWVudHMuCi0g
ICAgcHJveHk6IGZ1bmN0aW9uKCBmbiwgY29udGV4dCApIHsKLSAgICAgICAgdmFyIHRtcCwgYXJn
cywgcHJveHk7Ci0KLSAgICAgICAgaWYgKCB0eXBlb2YgY29udGV4dCA9PT0gInN0cmluZyIgKSB7
Ci0gICAgICAgICAgICB0bXAgPSBmblsgY29udGV4dCBdOwotICAgICAgICAgICAgY29udGV4dCA9
IGZuOwotICAgICAgICAgICAgZm4gPSB0bXA7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBRdWlj
ayBjaGVjayB0byBkZXRlcm1pbmUgaWYgdGFyZ2V0IGlzIGNhbGxhYmxlLCBpbiB0aGUgc3BlYwot
ICAgICAgICAvLyB0aGlzIHRocm93cyBhIFR5cGVFcnJvciwgYnV0IHdlIHdpbGwganVzdCByZXR1
cm4gdW5kZWZpbmVkLgotICAgICAgICBpZiAoICFqUXVlcnkuaXNGdW5jdGlvbiggZm4gKSApIHsK
LSAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBT
aW11bGF0ZWQgYmluZAotICAgICAgICBhcmdzID0gc2xpY2UuY2FsbCggYXJndW1lbnRzLCAyICk7
Ci0gICAgICAgIHByb3h5ID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICByZXR1cm4gZm4uYXBw
bHkoIGNvbnRleHQgfHwgdGhpcywgYXJncy5jb25jYXQoIHNsaWNlLmNhbGwoIGFyZ3VtZW50cyAp
ICkgKTsKLSAgICAgICAgfTsKLQotICAgICAgICAvLyBTZXQgdGhlIGd1aWQgb2YgdW5pcXVlIGhh
bmRsZXIgdG8gdGhlIHNhbWUgb2Ygb3JpZ2luYWwgaGFuZGxlciwgc28gaXQgY2FuIGJlIHJlbW92
ZWQKLSAgICAgICAgcHJveHkuZ3VpZCA9IGZuLmd1aWQgPSBmbi5ndWlkIHx8IGpRdWVyeS5ndWlk
Kys7Ci0KLSAgICAgICAgcmV0dXJuIHByb3h5OwotICAgIH0sCi0KLSAgICBub3c6IERhdGUubm93
LAotCi0gICAgLy8galF1ZXJ5LnN1cHBvcnQgaXMgbm90IHVzZWQgaW4gQ29yZSBidXQgb3RoZXIg
cHJvamVjdHMgYXR0YWNoIHRoZWlyCi0gICAgLy8gcHJvcGVydGllcyB0byBpdCBzbyBpdCBuZWVk
cyB0byBleGlzdC4KLSAgICBzdXBwb3J0OiBzdXBwb3J0Ci19ICk7Ci0KLS8vIEpTSGludCB3b3Vs
ZCBlcnJvciBvbiB0aGlzIGNvZGUgZHVlIHRvIHRoZSBTeW1ib2wgbm90IGJlaW5nIGRlZmluZWQg
aW4gRVM1LgotLy8gRGVmaW5pbmcgdGhpcyBnbG9iYWwgaW4gLmpzaGludHJjIHdvdWxkIGNyZWF0
ZSBhIGRhbmdlciBvZiB1c2luZyB0aGUgZ2xvYmFsCi0vLyB1bmd1YXJkZWQgaW4gYW5vdGhlciBw
bGFjZSwgaXQgc2VlbXMgc2FmZXIgdG8ganVzdCBkaXNhYmxlIEpTSGludCBmb3IgdGhlc2UKLS8v
IHRocmVlIGxpbmVzLgotLyoganNoaW50IGlnbm9yZTogc3RhcnQgKi8KLWlmICggdHlwZW9mIFN5
bWJvbCA9PT0gImZ1bmN0aW9uIiApIHsKLSAgICBqUXVlcnkuZm5bIFN5bWJvbC5pdGVyYXRvciBd
ID0gYXJyWyBTeW1ib2wuaXRlcmF0b3IgXTsKLX0KLS8qIGpzaGludCBpZ25vcmU6IGVuZCAqLwot
Ci0vLyBQb3B1bGF0ZSB0aGUgY2xhc3MydHlwZSBtYXAKLWpRdWVyeS5lYWNoKCAiQm9vbGVhbiBO
dW1iZXIgU3RyaW5nIEZ1bmN0aW9uIEFycmF5IERhdGUgUmVnRXhwIE9iamVjdCBFcnJvciBTeW1i
b2wiLnNwbGl0KCAiICIgKSwKLWZ1bmN0aW9uKCBpLCBuYW1lICkgewotICAgIGNsYXNzMnR5cGVb
ICJbb2JqZWN0ICIgKyBuYW1lICsgIl0iIF0gPSBuYW1lLnRvTG93ZXJDYXNlKCk7Ci19ICk7Ci0K
LWZ1bmN0aW9uIGlzQXJyYXlMaWtlKCBvYmogKSB7Ci0KLSAgICAvLyBTdXBwb3J0OiBpT1MgOC4y
IChub3QgcmVwcm9kdWNpYmxlIGluIHNpbXVsYXRvcikKLSAgICAvLyBgaW5gIGNoZWNrIHVzZWQg
dG8gcHJldmVudCBKSVQgZXJyb3IgKGdoLTIxNDUpCi0gICAgLy8gaGFzT3duIGlzbid0IHVzZWQg
aGVyZSBkdWUgdG8gZmFsc2UgbmVnYXRpdmVzCi0gICAgLy8gcmVnYXJkaW5nIE5vZGVsaXN0IGxl
bmd0aCBpbiBJRQotICAgIHZhciBsZW5ndGggPSAhIW9iaiAmJiAibGVuZ3RoIiBpbiBvYmogJiYg
b2JqLmxlbmd0aCwKLSAgICAgICAgdHlwZSA9IGpRdWVyeS50eXBlKCBvYmogKTsKLQotICAgIGlm
ICggdHlwZSA9PT0gImZ1bmN0aW9uIiB8fCBqUXVlcnkuaXNXaW5kb3coIG9iaiApICkgewotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHR5cGUgPT09ICJhcnJheSIg
fHwgbGVuZ3RoID09PSAwIHx8Ci0gICAgICAgIHR5cGVvZiBsZW5ndGggPT09ICJudW1iZXIiICYm
IGxlbmd0aCA+IDAgJiYgKCBsZW5ndGggLSAxICkgaW4gb2JqOwotfQotdmFyIFNpenpsZSA9Ci0v
KiEKLSAqIFNpenpsZSBDU1MgU2VsZWN0b3IgRW5naW5lIHYyLjIuMQotICogaHR0cDovL3Npenps
ZWpzLmNvbS8KLSAqCi0gKiBDb3B5cmlnaHQgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNv
bnRyaWJ1dG9ycwotICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlCi0gKiBodHRwOi8v
anF1ZXJ5Lm9yZy9saWNlbnNlCi0gKgotICogRGF0ZTogMjAxNS0xMC0xNwotICovCi0oZnVuY3Rp
b24oIHdpbmRvdyApIHsKLQotdmFyIGksCi0gICAgc3VwcG9ydCwKLSAgICBFeHByLAotICAgIGdl
dFRleHQsCi0gICAgaXNYTUwsCi0gICAgdG9rZW5pemUsCi0gICAgY29tcGlsZSwKLSAgICBzZWxl
Y3QsCi0gICAgb3V0ZXJtb3N0Q29udGV4dCwKLSAgICBzb3J0SW5wdXQsCi0gICAgaGFzRHVwbGlj
YXRlLAotCi0gICAgLy8gTG9jYWwgZG9jdW1lbnQgdmFycwotICAgIHNldERvY3VtZW50LAotICAg
IGRvY3VtZW50LAotICAgIGRvY0VsZW0sCi0gICAgZG9jdW1lbnRJc0hUTUwsCi0gICAgcmJ1Z2d5
UVNBLAotICAgIHJidWdneU1hdGNoZXMsCi0gICAgbWF0Y2hlcywKLSAgICBjb250YWlucywKLQot
ICAgIC8vIEluc3RhbmNlLXNwZWNpZmljIGRhdGEKLSAgICBleHBhbmRvID0gInNpenpsZSIgKyAx
ICogbmV3IERhdGUoKSwKLSAgICBwcmVmZXJyZWREb2MgPSB3aW5kb3cuZG9jdW1lbnQsCi0gICAg
ZGlycnVucyA9IDAsCi0gICAgZG9uZSA9IDAsCi0gICAgY2xhc3NDYWNoZSA9IGNyZWF0ZUNhY2hl
KCksCi0gICAgdG9rZW5DYWNoZSA9IGNyZWF0ZUNhY2hlKCksCi0gICAgY29tcGlsZXJDYWNoZSA9
IGNyZWF0ZUNhY2hlKCksCi0gICAgc29ydE9yZGVyID0gZnVuY3Rpb24oIGEsIGIgKSB7Ci0gICAg
ICAgIGlmICggYSA9PT0gYiApIHsKLSAgICAgICAgICAgIGhhc0R1cGxpY2F0ZSA9IHRydWU7Ci0g
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfSwKLQotICAgIC8vIEdlbmVyYWwtcHVy
cG9zZSBjb25zdGFudHMKLSAgICBNQVhfTkVHQVRJVkUgPSAxIDw8IDMxLAotCi0gICAgLy8gSW5z
dGFuY2UgbWV0aG9kcwotICAgIGhhc093biA9ICh7fSkuaGFzT3duUHJvcGVydHksCi0gICAgYXJy
ID0gW10sCi0gICAgcG9wID0gYXJyLnBvcCwKLSAgICBwdXNoX25hdGl2ZSA9IGFyci5wdXNoLAot
ICAgIHB1c2ggPSBhcnIucHVzaCwKLSAgICBzbGljZSA9IGFyci5zbGljZSwKLSAgICAvLyBVc2Ug
YSBzdHJpcHBlZC1kb3duIGluZGV4T2YgYXMgaXQncyBmYXN0ZXIgdGhhbiBuYXRpdmUKLSAgICAv
LyBodHRwOi8vanNwZXJmLmNvbS90aG9yLWluZGV4b2YtdnMtZm9yLzUKLSAgICBpbmRleE9mID0g
ZnVuY3Rpb24oIGxpc3QsIGVsZW0gKSB7Ci0gICAgICAgIHZhciBpID0gMCwKLSAgICAgICAgICAg
IGxlbiA9IGxpc3QubGVuZ3RoOwotICAgICAgICBmb3IgKCA7IGkgPCBsZW47IGkrKyApIHsKLSAg
ICAgICAgICAgIGlmICggbGlzdFtpXSA9PT0gZWxlbSApIHsKLSAgICAgICAgICAgICAgICByZXR1
cm4gaTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gLTE7Ci0gICAg
fSwKLQotICAgIGJvb2xlYW5zID0gImNoZWNrZWR8c2VsZWN0ZWR8YXN5bmN8YXV0b2ZvY3VzfGF1
dG9wbGF5fGNvbnRyb2xzfGRlZmVyfGRpc2FibGVkfGhpZGRlbnxpc21hcHxsb29wfG11bHRpcGxl
fG9wZW58cmVhZG9ubHl8cmVxdWlyZWR8c2NvcGVkIiwKLQotICAgIC8vIFJlZ3VsYXIgZXhwcmVz
c2lvbnMKLQotICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtc2VsZWN0b3JzLyN3aGl0
ZXNwYWNlCi0gICAgd2hpdGVzcGFjZSA9ICJbXFx4MjBcXHRcXHJcXG5cXGZdIiwKLQotICAgIC8v
IGh0dHA6Ly93d3cudzMub3JnL1RSL0NTUzIxL3N5bmRhdGEuaHRtbCN2YWx1ZS1kZWYtaWRlbnRp
ZmllcgotICAgIGlkZW50aWZpZXIgPSAiKD86XFxcXC58W1xcdy1dfFteXFx4MDAtXFx4YTBdKSsi
LAotCi0gICAgLy8gQXR0cmlidXRlIHNlbGVjdG9yczogaHR0cDovL3d3dy53My5vcmcvVFIvc2Vs
ZWN0b3JzLyNhdHRyaWJ1dGUtc2VsZWN0b3JzCi0gICAgYXR0cmlidXRlcyA9ICJcXFsiICsgd2hp
dGVzcGFjZSArICIqKCIgKyBpZGVudGlmaWVyICsgIikoPzoiICsgd2hpdGVzcGFjZSArCi0gICAg
ICAgIC8vIE9wZXJhdG9yIChjYXB0dXJlIDIpCi0gICAgICAgICIqKFsqXiR8IX5dPz0pIiArIHdo
aXRlc3BhY2UgKwotICAgICAgICAvLyAiQXR0cmlidXRlIHZhbHVlcyBtdXN0IGJlIENTUyBpZGVu
dGlmaWVycyBbY2FwdHVyZSA1XSBvciBzdHJpbmdzIFtjYXB0dXJlIDMgb3IgY2FwdHVyZSA0XSIK
LSAgICAgICAgIiooPzonKCg/OlxcXFwufFteXFxcXCddKSopJ3xcIigoPzpcXFxcLnxbXlxcXFxc
Il0pKilcInwoIiArIGlkZW50aWZpZXIgKyAiKSl8KSIgKyB3aGl0ZXNwYWNlICsKLSAgICAgICAg
IipcXF0iLAotCi0gICAgcHNldWRvcyA9ICI6KCIgKyBpZGVudGlmaWVyICsgIikoPzpcXCgoIiAr
Ci0gICAgICAgIC8vIFRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIHNlbGVjdG9ycyBuZWVkaW5nIHRv
a2VuaXplIGluIHRoZSBwcmVGaWx0ZXIsIHByZWZlciBhcmd1bWVudHM6Ci0gICAgICAgIC8vIDEu
IHF1b3RlZCAoY2FwdHVyZSAzOyBjYXB0dXJlIDQgb3IgY2FwdHVyZSA1KQotICAgICAgICAiKCco
KD86XFxcXC58W15cXFxcJ10pKiknfFwiKCg/OlxcXFwufFteXFxcXFwiXSkqKVwiKXwiICsKLSAg
ICAgICAgLy8gMi4gc2ltcGxlIChjYXB0dXJlIDYpCi0gICAgICAgICIoKD86XFxcXC58W15cXFxc
KClbXFxdXXwiICsgYXR0cmlidXRlcyArICIpKil8IiArCi0gICAgICAgIC8vIDMuIGFueXRoaW5n
IGVsc2UgKGNhcHR1cmUgMikKLSAgICAgICAgIi4qIiArCi0gICAgICAgICIpXFwpfCkiLAotCi0g
ICAgLy8gTGVhZGluZyBhbmQgbm9uLWVzY2FwZWQgdHJhaWxpbmcgd2hpdGVzcGFjZSwgY2FwdHVy
aW5nIHNvbWUgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVycyBwcmVjZWRpbmcgdGhlIGxhdHRlcgot
ICAgIHJ3aGl0ZXNwYWNlID0gbmV3IFJlZ0V4cCggd2hpdGVzcGFjZSArICIrIiwgImciICksCi0g
ICAgcnRyaW0gPSBuZXcgUmVnRXhwKCAiXiIgKyB3aGl0ZXNwYWNlICsgIit8KCg/Ol58W15cXFxc
XSkoPzpcXFxcLikqKSIgKyB3aGl0ZXNwYWNlICsgIiskIiwgImciICksCi0KLSAgICByY29tbWEg
PSBuZXcgUmVnRXhwKCAiXiIgKyB3aGl0ZXNwYWNlICsgIiosIiArIHdoaXRlc3BhY2UgKyAiKiIg
KSwKLSAgICByY29tYmluYXRvcnMgPSBuZXcgUmVnRXhwKCAiXiIgKyB3aGl0ZXNwYWNlICsgIioo
Wz4rfl18IiArIHdoaXRlc3BhY2UgKyAiKSIgKyB3aGl0ZXNwYWNlICsgIioiICksCi0KLSAgICBy
YXR0cmlidXRlUXVvdGVzID0gbmV3IFJlZ0V4cCggIj0iICsgd2hpdGVzcGFjZSArICIqKFteXFxd
J1wiXSo/KSIgKyB3aGl0ZXNwYWNlICsgIipcXF0iLCAiZyIgKSwKLQotICAgIHJwc2V1ZG8gPSBu
ZXcgUmVnRXhwKCBwc2V1ZG9zICksCi0gICAgcmlkZW50aWZpZXIgPSBuZXcgUmVnRXhwKCAiXiIg
KyBpZGVudGlmaWVyICsgIiQiICksCi0KLSAgICBtYXRjaEV4cHIgPSB7Ci0gICAgICAgICJJRCI6
IG5ldyBSZWdFeHAoICJeIygiICsgaWRlbnRpZmllciArICIpIiApLAotICAgICAgICAiQ0xBU1Mi
OiBuZXcgUmVnRXhwKCAiXlxcLigiICsgaWRlbnRpZmllciArICIpIiApLAotICAgICAgICAiVEFH
IjogbmV3IFJlZ0V4cCggIl4oIiArIGlkZW50aWZpZXIgKyAifFsqXSkiICksCi0gICAgICAgICJB
VFRSIjogbmV3IFJlZ0V4cCggIl4iICsgYXR0cmlidXRlcyApLAotICAgICAgICAiUFNFVURPIjog
bmV3IFJlZ0V4cCggIl4iICsgcHNldWRvcyApLAotICAgICAgICAiQ0hJTEQiOiBuZXcgUmVnRXhw
KCAiXjoob25seXxmaXJzdHxsYXN0fG50aHxudGgtbGFzdCktKGNoaWxkfG9mLXR5cGUpKD86XFwo
IiArIHdoaXRlc3BhY2UgKwotICAgICAgICAgICAgIiooZXZlbnxvZGR8KChbKy1dfCkoXFxkKilu
fCkiICsgd2hpdGVzcGFjZSArICIqKD86KFsrLV18KSIgKyB3aGl0ZXNwYWNlICsKLSAgICAgICAg
ICAgICIqKFxcZCspfCkpIiArIHdoaXRlc3BhY2UgKyAiKlxcKXwpIiwgImkiICksCi0gICAgICAg
ICJib29sIjogbmV3IFJlZ0V4cCggIl4oPzoiICsgYm9vbGVhbnMgKyAiKSQiLCAiaSIgKSwKLSAg
ICAgICAgLy8gRm9yIHVzZSBpbiBsaWJyYXJpZXMgaW1wbGVtZW50aW5nIC5pcygpCi0gICAgICAg
IC8vIFdlIHVzZSB0aGlzIGZvciBQT1MgbWF0Y2hpbmcgaW4gYHNlbGVjdGAKLSAgICAgICAgIm5l
ZWRzQ29udGV4dCI6IG5ldyBSZWdFeHAoICJeIiArIHdoaXRlc3BhY2UgKyAiKls+K35dfDooZXZl
bnxvZGR8ZXF8Z3R8bHR8bnRofGZpcnN0fGxhc3QpKD86XFwoIiArCi0gICAgICAgICAgICB3aGl0
ZXNwYWNlICsgIiooKD86LVxcZCk/XFxkKikiICsgd2hpdGVzcGFjZSArICIqXFwpfCkoPz1bXi1d
fCQpIiwgImkiICkKLSAgICB9LAotCi0gICAgcmlucHV0cyA9IC9eKD86aW5wdXR8c2VsZWN0fHRl
eHRhcmVhfGJ1dHRvbikkL2ksCi0gICAgcmhlYWRlciA9IC9eaFxkJC9pLAotCi0gICAgcm5hdGl2
ZSA9IC9eW157XStce1xzKlxbbmF0aXZlIFx3LywKLQotICAgIC8vIEVhc2lseS1wYXJzZWFibGUv
cmV0cmlldmFibGUgSUQgb3IgVEFHIG9yIENMQVNTIHNlbGVjdG9ycwotICAgIHJxdWlja0V4cHIg
PSAvXig/OiMoW1x3LV0rKXwoXHcrKXxcLihbXHctXSspKSQvLAotCi0gICAgcnNpYmxpbmcgPSAv
Wyt+XS8sCi0gICAgcmVzY2FwZSA9IC8nfFxcL2csCi0KLSAgICAvLyBDU1MgZXNjYXBlcyBodHRw
Oi8vd3d3LnczLm9yZy9UUi9DU1MyMS9zeW5kYXRhLmh0bWwjZXNjYXBlZC1jaGFyYWN0ZXJzCi0g
ICAgcnVuZXNjYXBlID0gbmV3IFJlZ0V4cCggIlxcXFwoW1xcZGEtZl17MSw2fSIgKyB3aGl0ZXNw
YWNlICsgIj98KCIgKyB3aGl0ZXNwYWNlICsgIil8LikiLCAiaWciICksCi0gICAgZnVuZXNjYXBl
ID0gZnVuY3Rpb24oIF8sIGVzY2FwZWQsIGVzY2FwZWRXaGl0ZXNwYWNlICkgewotICAgICAgICB2
YXIgaGlnaCA9ICIweCIgKyBlc2NhcGVkIC0gMHgxMDAwMDsKLSAgICAgICAgLy8gTmFOIG1lYW5z
IG5vbi1jb2RlcG9pbnQKLSAgICAgICAgLy8gU3VwcG9ydDogRmlyZWZveDwyNAotICAgICAgICAv
LyBXb3JrYXJvdW5kIGVycm9uZW91cyBudW1lcmljIGludGVycHJldGF0aW9uIG9mICsiMHgiCi0g
ICAgICAgIHJldHVybiBoaWdoICE9PSBoaWdoIHx8IGVzY2FwZWRXaGl0ZXNwYWNlID8KLSAgICAg
ICAgICAgIGVzY2FwZWQgOgotICAgICAgICAgICAgaGlnaCA8IDAgPwotICAgICAgICAgICAgICAg
IC8vIEJNUCBjb2RlcG9pbnQKLSAgICAgICAgICAgICAgICBTdHJpbmcuZnJvbUNoYXJDb2RlKCBo
aWdoICsgMHgxMDAwMCApIDoKLSAgICAgICAgICAgICAgICAvLyBTdXBwbGVtZW50YWwgUGxhbmUg
Y29kZXBvaW50IChzdXJyb2dhdGUgcGFpcikKLSAgICAgICAgICAgICAgICBTdHJpbmcuZnJvbUNo
YXJDb2RlKCBoaWdoID4+IDEwIHwgMHhEODAwLCBoaWdoICYgMHgzRkYgfCAweERDMDAgKTsKLSAg
ICB9LAotCi0gICAgLy8gVXNlZCBmb3IgaWZyYW1lcwotICAgIC8vIFNlZSBzZXREb2N1bWVudCgp
Ci0gICAgLy8gUmVtb3ZpbmcgdGhlIGZ1bmN0aW9uIHdyYXBwZXIgY2F1c2VzIGEgIlBlcm1pc3Np
b24gRGVuaWVkIgotICAgIC8vIGVycm9yIGluIElFCi0gICAgdW5sb2FkSGFuZGxlciA9IGZ1bmN0
aW9uKCkgewotICAgICAgICBzZXREb2N1bWVudCgpOwotICAgIH07Ci0KLS8vIE9wdGltaXplIGZv
ciBwdXNoLmFwcGx5KCBfLCBOb2RlTGlzdCApCi10cnkgewotICAgIHB1c2guYXBwbHkoCi0gICAg
ICAgIChhcnIgPSBzbGljZS5jYWxsKCBwcmVmZXJyZWREb2MuY2hpbGROb2RlcyApKSwKLSAgICAg
ICAgcHJlZmVycmVkRG9jLmNoaWxkTm9kZXMKLSAgICApOwotICAgIC8vIFN1cHBvcnQ6IEFuZHJv
aWQ8NC4wCi0gICAgLy8gRGV0ZWN0IHNpbGVudGx5IGZhaWxpbmcgcHVzaC5hcHBseQotICAgIGFy
clsgcHJlZmVycmVkRG9jLmNoaWxkTm9kZXMubGVuZ3RoIF0ubm9kZVR5cGU7Ci19IGNhdGNoICgg
ZSApIHsKLSAgICBwdXNoID0geyBhcHBseTogYXJyLmxlbmd0aCA/Ci0KLSAgICAgICAgLy8gTGV2
ZXJhZ2Ugc2xpY2UgaWYgcG9zc2libGUKLSAgICAgICAgZnVuY3Rpb24oIHRhcmdldCwgZWxzICkg
ewotICAgICAgICAgICAgcHVzaF9uYXRpdmUuYXBwbHkoIHRhcmdldCwgc2xpY2UuY2FsbChlbHMp
ICk7Ci0gICAgICAgIH0gOgotCi0gICAgICAgIC8vIFN1cHBvcnQ6IElFPDkKLSAgICAgICAgLy8g
T3RoZXJ3aXNlIGFwcGVuZCBkaXJlY3RseQotICAgICAgICBmdW5jdGlvbiggdGFyZ2V0LCBlbHMg
KSB7Ci0gICAgICAgICAgICB2YXIgaiA9IHRhcmdldC5sZW5ndGgsCi0gICAgICAgICAgICAgICAg
aSA9IDA7Ci0gICAgICAgICAgICAvLyBDYW4ndCB0cnVzdCBOb2RlTGlzdC5sZW5ndGgKLSAgICAg
ICAgICAgIHdoaWxlICggKHRhcmdldFtqKytdID0gZWxzW2krK10pICkge30KLSAgICAgICAgICAg
IHRhcmdldC5sZW5ndGggPSBqIC0gMTsKLSAgICAgICAgfQotICAgIH07Ci19Ci0KLWZ1bmN0aW9u
IFNpenpsZSggc2VsZWN0b3IsIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQgKSB7Ci0gICAgdmFyIG0s
IGksIGVsZW0sIG5pZCwgbmlkc2VsZWN0LCBtYXRjaCwgZ3JvdXBzLCBuZXdTZWxlY3RvciwKLSAg
ICAgICAgbmV3Q29udGV4dCA9IGNvbnRleHQgJiYgY29udGV4dC5vd25lckRvY3VtZW50LAotCi0g
ICAgICAgIC8vIG5vZGVUeXBlIGRlZmF1bHRzIHRvIDksIHNpbmNlIGNvbnRleHQgZGVmYXVsdHMg
dG8gZG9jdW1lbnQKLSAgICAgICAgbm9kZVR5cGUgPSBjb250ZXh0ID8gY29udGV4dC5ub2RlVHlw
ZSA6IDk7Ci0KLSAgICByZXN1bHRzID0gcmVzdWx0cyB8fCBbXTsKLQotICAgIC8vIFJldHVybiBl
YXJseSBmcm9tIGNhbGxzIHdpdGggaW52YWxpZCBzZWxlY3RvciBvciBjb250ZXh0Ci0gICAgaWYg
KCB0eXBlb2Ygc2VsZWN0b3IgIT09ICJzdHJpbmciIHx8ICFzZWxlY3RvciB8fAotICAgICAgICBu
b2RlVHlwZSAhPT0gMSAmJiBub2RlVHlwZSAhPT0gOSAmJiBub2RlVHlwZSAhPT0gMTEgKSB7Ci0K
LSAgICAgICAgcmV0dXJuIHJlc3VsdHM7Ci0gICAgfQotCi0gICAgLy8gVHJ5IHRvIHNob3J0Y3V0
IGZpbmQgb3BlcmF0aW9ucyAoYXMgb3Bwb3NlZCB0byBmaWx0ZXJzKSBpbiBIVE1MIGRvY3VtZW50
cwotICAgIGlmICggIXNlZWQgKSB7Ci0KLSAgICAgICAgaWYgKCAoIGNvbnRleHQgPyBjb250ZXh0
Lm93bmVyRG9jdW1lbnQgfHwgY29udGV4dCA6IHByZWZlcnJlZERvYyApICE9PSBkb2N1bWVudCAp
IHsKLSAgICAgICAgICAgIHNldERvY3VtZW50KCBjb250ZXh0ICk7Ci0gICAgICAgIH0KLSAgICAg
ICAgY29udGV4dCA9IGNvbnRleHQgfHwgZG9jdW1lbnQ7Ci0KLSAgICAgICAgaWYgKCBkb2N1bWVu
dElzSFRNTCApIHsKLQotICAgICAgICAgICAgLy8gSWYgdGhlIHNlbGVjdG9yIGlzIHN1ZmZpY2ll
bnRseSBzaW1wbGUsIHRyeSB1c2luZyBhICJnZXQqQnkqIiBET00gbWV0aG9kCi0gICAgICAgICAg
ICAvLyAoZXhjZXB0aW5nIERvY3VtZW50RnJhZ21lbnQgY29udGV4dCwgd2hlcmUgdGhlIG1ldGhv
ZHMgZG9uJ3QgZXhpc3QpCi0gICAgICAgICAgICBpZiAoIG5vZGVUeXBlICE9PSAxMSAmJiAobWF0
Y2ggPSBycXVpY2tFeHByLmV4ZWMoIHNlbGVjdG9yICkpICkgewotCi0gICAgICAgICAgICAgICAg
Ly8gSUQgc2VsZWN0b3IKLSAgICAgICAgICAgICAgICBpZiAoIChtID0gbWF0Y2hbMV0pICkgewot
Ci0gICAgICAgICAgICAgICAgICAgIC8vIERvY3VtZW50IGNvbnRleHQKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKCBub2RlVHlwZSA9PT0gOSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggKGVsZW0gPSBjb250ZXh0LmdldEVsZW1lbnRCeUlkKCBtICkpICkgewotCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gU3VwcG9ydDogSUUsIE9wZXJhLCBXZWJraXQKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBpZGVudGlmeSB2ZXJzaW9ucwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIGdldEVsZW1lbnRCeUlkIGNhbiBtYXRjaCBlbGVtZW50cyBi
eSBuYW1lIGluc3RlYWQgb2YgSUQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGVs
ZW0uaWQgPT09IG0gKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMu
cHVzaCggZWxlbSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVz
dWx0czsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRz
OwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIC8vIEVs
ZW1lbnQgY29udGV4dAotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotCi0gICAgICAgICAg
ICAgICAgICAgICAgICAvLyBTdXBwb3J0OiBJRSwgT3BlcmEsIFdlYmtpdAotICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gVE9ETzogaWRlbnRpZnkgdmVyc2lvbnMKLSAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGdldEVsZW1lbnRCeUlkIGNhbiBtYXRjaCBlbGVtZW50cyBieSBuYW1lIGluc3Rl
YWQgb2YgSUQKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbmV3Q29udGV4dCAmJiAoZWxl
bSA9IG5ld0NvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIG0gKSkgJiYKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb250YWlucyggY29udGV4dCwgZWxlbSApICYmCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZWxlbS5pZCA9PT0gbSApIHsKLQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdHMucHVzaCggZWxlbSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiByZXN1bHRzOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBUeXBlIHNlbGVjdG9yCi0gICAgICAgICAgICAg
ICAgfSBlbHNlIGlmICggbWF0Y2hbMl0gKSB7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2guYXBw
bHkoIHJlc3VsdHMsIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIHNlbGVjdG9yICkgKTsK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7Ci0KLSAgICAgICAgICAgICAgICAv
LyBDbGFzcyBzZWxlY3RvcgotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIChtID0gbWF0Y2hb
M10pICYmIHN1cHBvcnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAmJgotICAgICAgICAgICAgICAg
ICAgICBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgKSB7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgcHVzaC5hcHBseSggcmVzdWx0cywgY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1l
KCBtICkgKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBUYWtlIGFkdmFudGFnZSBv
ZiBxdWVyeVNlbGVjdG9yQWxsCi0gICAgICAgICAgICBpZiAoIHN1cHBvcnQucXNhICYmCi0gICAg
ICAgICAgICAgICAgIWNvbXBpbGVyQ2FjaGVbIHNlbGVjdG9yICsgIiAiIF0gJiYKLSAgICAgICAg
ICAgICAgICAoIXJidWdneVFTQSB8fCAhcmJ1Z2d5UVNBLnRlc3QoIHNlbGVjdG9yICkpICkgewot
Ci0gICAgICAgICAgICAgICAgaWYgKCBub2RlVHlwZSAhPT0gMSApIHsKLSAgICAgICAgICAgICAg
ICAgICAgbmV3Q29udGV4dCA9IGNvbnRleHQ7Ci0gICAgICAgICAgICAgICAgICAgIG5ld1NlbGVj
dG9yID0gc2VsZWN0b3I7Ci0KLSAgICAgICAgICAgICAgICAvLyBxU0EgbG9va3Mgb3V0c2lkZSBF
bGVtZW50IGNvbnRleHQsIHdoaWNoIGlzIG5vdCB3aGF0IHdlIHdhbnQKLSAgICAgICAgICAgICAg
ICAvLyBUaGFua3MgdG8gQW5kcmV3IER1cG9udCBmb3IgdGhpcyB3b3JrYXJvdW5kIHRlY2huaXF1
ZQotICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQ6IElFIDw9OAotICAgICAgICAgICAgICAgIC8v
IEV4Y2x1ZGUgb2JqZWN0IGVsZW1lbnRzCi0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICggY29u
dGV4dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpICE9PSAib2JqZWN0IiApIHsKLQotICAgICAgICAg
ICAgICAgICAgICAvLyBDYXB0dXJlIHRoZSBjb250ZXh0IElELCBzZXR0aW5nIGl0IGZpcnN0IGlm
IG5lY2Vzc2FyeQotICAgICAgICAgICAgICAgICAgICBpZiAoIChuaWQgPSBjb250ZXh0LmdldEF0
dHJpYnV0ZSggImlkIiApKSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5pZCA9IG5pZC5y
ZXBsYWNlKCByZXNjYXBlLCAiXFwkJiIgKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0QXR0cmlidXRlKCAiaWQiLCAobmlk
ID0gZXhwYW5kbykgKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
ICAgIC8vIFByZWZpeCBldmVyeSBzZWxlY3RvciBpbiB0aGUgbGlzdAotICAgICAgICAgICAgICAg
ICAgICBncm91cHMgPSB0b2tlbml6ZSggc2VsZWN0b3IgKTsKLSAgICAgICAgICAgICAgICAgICAg
aSA9IGdyb3Vwcy5sZW5ndGg7Ci0gICAgICAgICAgICAgICAgICAgIG5pZHNlbGVjdCA9IHJpZGVu
dGlmaWVyLnRlc3QoIG5pZCApID8gIiMiICsgbmlkIDogIltpZD0nIiArIG5pZCArICInXSI7Ci0g
ICAgICAgICAgICAgICAgICAgIHdoaWxlICggaS0tICkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgZ3JvdXBzW2ldID0gbmlkc2VsZWN0ICsgIiAiICsgdG9TZWxlY3RvciggZ3JvdXBzW2ldICk7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgbmV3U2VsZWN0b3Ig
PSBncm91cHMuam9pbiggIiwiICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gRXhwYW5kIGNv
bnRleHQgZm9yIHNpYmxpbmcgc2VsZWN0b3JzCi0gICAgICAgICAgICAgICAgICAgIG5ld0NvbnRl
eHQgPSByc2libGluZy50ZXN0KCBzZWxlY3RvciApICYmIHRlc3RDb250ZXh0KCBjb250ZXh0LnBh
cmVudE5vZGUgKSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dDsKLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoIG5ld1NlbGVjdG9yICkgewotICAgICAg
ICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgcHVzaC5hcHBseSgg
cmVzdWx0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdDb250ZXh0LnF1ZXJ5U2Vs
ZWN0b3JBbGwoIG5ld1NlbGVjdG9yICkKLSAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0czsKLSAgICAgICAgICAgICAgICAgICAg
fSBjYXRjaCAoIHFzYUVycm9yICkgewotICAgICAgICAgICAgICAgICAgICB9IGZpbmFsbHkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBuaWQgPT09IGV4cGFuZG8gKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZW1vdmVBdHRyaWJ1dGUoICJpZCIgKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIEFsbCBv
dGhlcnMKLSAgICByZXR1cm4gc2VsZWN0KCBzZWxlY3Rvci5yZXBsYWNlKCBydHJpbSwgIiQxIiAp
LCBjb250ZXh0LCByZXN1bHRzLCBzZWVkICk7Ci19Ci0KLS8qKgotICogQ3JlYXRlIGtleS12YWx1
ZSBjYWNoZXMgb2YgbGltaXRlZCBzaXplCi0gKiBAcmV0dXJucyB7ZnVuY3Rpb24oc3RyaW5nLCBv
YmplY3QpfSBSZXR1cm5zIHRoZSBPYmplY3QgZGF0YSBhZnRlciBzdG9yaW5nIGl0IG9uIGl0c2Vs
ZiB3aXRoCi0gKiAgcHJvcGVydHkgbmFtZSB0aGUgKHNwYWNlLXN1ZmZpeGVkKSBzdHJpbmcgYW5k
IChpZiB0aGUgY2FjaGUgaXMgbGFyZ2VyIHRoYW4gRXhwci5jYWNoZUxlbmd0aCkKLSAqICBkZWxl
dGluZyB0aGUgb2xkZXN0IGVudHJ5Ci0gKi8KLWZ1bmN0aW9uIGNyZWF0ZUNhY2hlKCkgewotICAg
IHZhciBrZXlzID0gW107Ci0KLSAgICBmdW5jdGlvbiBjYWNoZSgga2V5LCB2YWx1ZSApIHsKLSAg
ICAgICAgLy8gVXNlIChrZXkgKyAiICIpIHRvIGF2b2lkIGNvbGxpc2lvbiB3aXRoIG5hdGl2ZSBw
cm90b3R5cGUgcHJvcGVydGllcyAoc2VlIElzc3VlICMxNTcpCi0gICAgICAgIGlmICgga2V5cy5w
dXNoKCBrZXkgKyAiICIgKSA+IEV4cHIuY2FjaGVMZW5ndGggKSB7Ci0gICAgICAgICAgICAvLyBP
bmx5IGtlZXAgdGhlIG1vc3QgcmVjZW50IGVudHJpZXMKLSAgICAgICAgICAgIGRlbGV0ZSBjYWNo
ZVsga2V5cy5zaGlmdCgpIF07Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIChjYWNoZVsga2V5
ICsgIiAiIF0gPSB2YWx1ZSk7Ci0gICAgfQotICAgIHJldHVybiBjYWNoZTsKLX0KLQotLyoqCi0g
KiBNYXJrIGEgZnVuY3Rpb24gZm9yIHNwZWNpYWwgdXNlIGJ5IFNpenpsZQotICogQHBhcmFtIHtG
dW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9uIHRvIG1hcmsKLSAqLwotZnVuY3Rpb24gbWFya0Z1bmN0
aW9uKCBmbiApIHsKLSAgICBmblsgZXhwYW5kbyBdID0gdHJ1ZTsKLSAgICByZXR1cm4gZm47Ci19
Ci0KLS8qKgotICogU3VwcG9ydCB0ZXN0aW5nIHVzaW5nIGFuIGVsZW1lbnQKLSAqIEBwYXJhbSB7
RnVuY3Rpb259IGZuIFBhc3NlZCB0aGUgY3JlYXRlZCBkaXYgYW5kIGV4cGVjdHMgYSBib29sZWFu
IHJlc3VsdAotICovCi1mdW5jdGlvbiBhc3NlcnQoIGZuICkgewotICAgIHZhciBkaXYgPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLQotICAgIHRyeSB7Ci0gICAgICAgIHJldHVybiAh
IWZuKCBkaXYgKTsKLSAgICB9IGNhdGNoIChlKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9IGZpbmFsbHkgewotICAgICAgICAvLyBSZW1vdmUgZnJvbSBpdHMgcGFyZW50IGJ5IGRlZmF1
bHQKLSAgICAgICAgaWYgKCBkaXYucGFyZW50Tm9kZSApIHsKLSAgICAgICAgICAgIGRpdi5wYXJl
bnROb2RlLnJlbW92ZUNoaWxkKCBkaXYgKTsKLSAgICAgICAgfQotICAgICAgICAvLyByZWxlYXNl
IG1lbW9yeSBpbiBJRQotICAgICAgICBkaXYgPSBudWxsOwotICAgIH0KLX0KLQotLyoqCi0gKiBB
ZGRzIHRoZSBzYW1lIGhhbmRsZXIgZm9yIGFsbCBvZiB0aGUgc3BlY2lmaWVkIGF0dHJzCi0gKiBA
cGFyYW0ge1N0cmluZ30gYXR0cnMgUGlwZS1zZXBhcmF0ZWQgbGlzdCBvZiBhdHRyaWJ1dGVzCi0g
KiBAcGFyYW0ge0Z1bmN0aW9ufSBoYW5kbGVyIFRoZSBtZXRob2QgdGhhdCB3aWxsIGJlIGFwcGxp
ZWQKLSAqLwotZnVuY3Rpb24gYWRkSGFuZGxlKCBhdHRycywgaGFuZGxlciApIHsKLSAgICB2YXIg
YXJyID0gYXR0cnMuc3BsaXQoInwiKSwKLSAgICAgICAgaSA9IGFyci5sZW5ndGg7Ci0KLSAgICB3
aGlsZSAoIGktLSApIHsKLSAgICAgICAgRXhwci5hdHRySGFuZGxlWyBhcnJbaV0gXSA9IGhhbmRs
ZXI7Ci0gICAgfQotfQotCi0vKioKLSAqIENoZWNrcyBkb2N1bWVudCBvcmRlciBvZiB0d28gc2li
bGluZ3MKLSAqIEBwYXJhbSB7RWxlbWVudH0gYQotICogQHBhcmFtIHtFbGVtZW50fSBiCi0gKiBA
cmV0dXJucyB7TnVtYmVyfSBSZXR1cm5zIGxlc3MgdGhhbiAwIGlmIGEgcHJlY2VkZXMgYiwgZ3Jl
YXRlciB0aGFuIDAgaWYgYSBmb2xsb3dzIGIKLSAqLwotZnVuY3Rpb24gc2libGluZ0NoZWNrKCBh
LCBiICkgewotICAgIHZhciBjdXIgPSBiICYmIGEsCi0gICAgICAgIGRpZmYgPSBjdXIgJiYgYS5u
b2RlVHlwZSA9PT0gMSAmJiBiLm5vZGVUeXBlID09PSAxICYmCi0gICAgICAgICAgICAoIH5iLnNv
dXJjZUluZGV4IHx8IE1BWF9ORUdBVElWRSApIC0KLSAgICAgICAgICAgICggfmEuc291cmNlSW5k
ZXggfHwgTUFYX05FR0FUSVZFICk7Ci0KLSAgICAvLyBVc2UgSUUgc291cmNlSW5kZXggaWYgYXZh
aWxhYmxlIG9uIGJvdGggbm9kZXMKLSAgICBpZiAoIGRpZmYgKSB7Ci0gICAgICAgIHJldHVybiBk
aWZmOwotICAgIH0KLQotICAgIC8vIENoZWNrIGlmIGIgZm9sbG93cyBhCi0gICAgaWYgKCBjdXIg
KSB7Ci0gICAgICAgIHdoaWxlICggKGN1ciA9IGN1ci5uZXh0U2libGluZykgKSB7Ci0gICAgICAg
ICAgICBpZiAoIGN1ciA9PT0gYiApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gYSA/IDEgOiAtMTsKLX0K
LQotLyoqCi0gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIGlucHV0
IHR5cGVzCi0gKiBAcGFyYW0ge1N0cmluZ30gdHlwZQotICovCi1mdW5jdGlvbiBjcmVhdGVJbnB1
dFBzZXVkbyggdHlwZSApIHsKLSAgICByZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgICAg
IHZhciBuYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOwotICAgICAgICByZXR1cm4g
bmFtZSA9PT0gImlucHV0IiAmJiBlbGVtLnR5cGUgPT09IHR5cGU7Ci0gICAgfTsKLX0KLQotLyoq
Ci0gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIGJ1dHRvbnMKLSAq
IEBwYXJhbSB7U3RyaW5nfSB0eXBlCi0gKi8KLWZ1bmN0aW9uIGNyZWF0ZUJ1dHRvblBzZXVkbygg
dHlwZSApIHsKLSAgICByZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgICAgIHZhciBuYW1l
ID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOwotICAgICAgICByZXR1cm4gKG5hbWUgPT09
ICJpbnB1dCIgfHwgbmFtZSA9PT0gImJ1dHRvbiIpICYmIGVsZW0udHlwZSA9PT0gdHlwZTsKLSAg
ICB9OwotfQotCi0vKioKLSAqIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4gcHNldWRvcyBm
b3IgcG9zaXRpb25hbHMKLSAqIEBwYXJhbSB7RnVuY3Rpb259IGZuCi0gKi8KLWZ1bmN0aW9uIGNy
ZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZuICkgewotICAgIHJldHVybiBtYXJrRnVuY3Rpb24oZnVu
Y3Rpb24oIGFyZ3VtZW50ICkgewotICAgICAgICBhcmd1bWVudCA9ICthcmd1bWVudDsKLSAgICAg
ICAgcmV0dXJuIG1hcmtGdW5jdGlvbihmdW5jdGlvbiggc2VlZCwgbWF0Y2hlcyApIHsKLSAgICAg
ICAgICAgIHZhciBqLAotICAgICAgICAgICAgICAgIG1hdGNoSW5kZXhlcyA9IGZuKCBbXSwgc2Vl
ZC5sZW5ndGgsIGFyZ3VtZW50ICksCi0gICAgICAgICAgICAgICAgaSA9IG1hdGNoSW5kZXhlcy5s
ZW5ndGg7Ci0KLSAgICAgICAgICAgIC8vIE1hdGNoIGVsZW1lbnRzIGZvdW5kIGF0IHRoZSBzcGVj
aWZpZWQgaW5kZXhlcwotICAgICAgICAgICAgd2hpbGUgKCBpLS0gKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKCBzZWVkWyAoaiA9IG1hdGNoSW5kZXhlc1tpXSkgXSApIHsKLSAgICAgICAgICAgICAg
ICAgICAgc2VlZFtqXSA9ICEobWF0Y2hlc1tqXSA9IHNlZWRbal0pOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgfSk7Ci19Ci0KLS8qKgotICogQ2hl
Y2tzIGEgbm9kZSBmb3IgdmFsaWRpdHkgYXMgYSBTaXp6bGUgY29udGV4dAotICogQHBhcmFtIHtF
bGVtZW50fE9iamVjdD19IGNvbnRleHQKLSAqIEByZXR1cm5zIHtFbGVtZW50fE9iamVjdHxCb29s
ZWFufSBUaGUgaW5wdXQgbm9kZSBpZiBhY2NlcHRhYmxlLCBvdGhlcndpc2UgYSBmYWxzeSB2YWx1
ZQotICovCi1mdW5jdGlvbiB0ZXN0Q29udGV4dCggY29udGV4dCApIHsKLSAgICByZXR1cm4gY29u
dGV4dCAmJiB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gInVuZGVmaW5l
ZCIgJiYgY29udGV4dDsKLX0KLQotLy8gRXhwb3NlIHN1cHBvcnQgdmFycyBmb3IgY29udmVuaWVu
Y2UKLXN1cHBvcnQgPSBTaXp6bGUuc3VwcG9ydCA9IHt9OwotCi0vKioKLSAqIERldGVjdHMgWE1M
IG5vZGVzCi0gKiBAcGFyYW0ge0VsZW1lbnR8T2JqZWN0fSBlbGVtIEFuIGVsZW1lbnQgb3IgYSBk
b2N1bWVudAotICogQHJldHVybnMge0Jvb2xlYW59IFRydWUgaWZmIGVsZW0gaXMgYSBub24tSFRN
TCBYTUwgbm9kZQotICovCi1pc1hNTCA9IFNpenpsZS5pc1hNTCA9IGZ1bmN0aW9uKCBlbGVtICkg
ewotICAgIC8vIGRvY3VtZW50RWxlbWVudCBpcyB2ZXJpZmllZCBmb3IgY2FzZXMgd2hlcmUgaXQg
ZG9lc24ndCB5ZXQgZXhpc3QKLSAgICAvLyAoc3VjaCBhcyBsb2FkaW5nIGlmcmFtZXMgaW4gSUUg
LSAjNDgzMykKLSAgICB2YXIgZG9jdW1lbnRFbGVtZW50ID0gZWxlbSAmJiAoZWxlbS5vd25lckRv
Y3VtZW50IHx8IGVsZW0pLmRvY3VtZW50RWxlbWVudDsKLSAgICByZXR1cm4gZG9jdW1lbnRFbGVt
ZW50ID8gZG9jdW1lbnRFbGVtZW50Lm5vZGVOYW1lICE9PSAiSFRNTCIgOiBmYWxzZTsKLX07Ci0K
LS8qKgotICogU2V0cyBkb2N1bWVudC1yZWxhdGVkIHZhcmlhYmxlcyBvbmNlIGJhc2VkIG9uIHRo
ZSBjdXJyZW50IGRvY3VtZW50Ci0gKiBAcGFyYW0ge0VsZW1lbnR8T2JqZWN0fSBbZG9jXSBBbiBl
bGVtZW50IG9yIGRvY3VtZW50IG9iamVjdCB0byB1c2UgdG8gc2V0IHRoZSBkb2N1bWVudAotICog
QHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY3VycmVudCBkb2N1bWVudAotICovCi1zZXRE
b2N1bWVudCA9IFNpenpsZS5zZXREb2N1bWVudCA9IGZ1bmN0aW9uKCBub2RlICkgewotICAgIHZh
ciBoYXNDb21wYXJlLCBwYXJlbnQsCi0gICAgICAgIGRvYyA9IG5vZGUgPyBub2RlLm93bmVyRG9j
dW1lbnQgfHwgbm9kZSA6IHByZWZlcnJlZERvYzsKLQotICAgIC8vIFJldHVybiBlYXJseSBpZiBk
b2MgaXMgaW52YWxpZCBvciBhbHJlYWR5IHNlbGVjdGVkCi0gICAgaWYgKCBkb2MgPT09IGRvY3Vt
ZW50IHx8IGRvYy5ub2RlVHlwZSAhPT0gOSB8fCAhZG9jLmRvY3VtZW50RWxlbWVudCApIHsKLSAg
ICAgICAgcmV0dXJuIGRvY3VtZW50OwotICAgIH0KLQotICAgIC8vIFVwZGF0ZSBnbG9iYWwgdmFy
aWFibGVzCi0gICAgZG9jdW1lbnQgPSBkb2M7Ci0gICAgZG9jRWxlbSA9IGRvY3VtZW50LmRvY3Vt
ZW50RWxlbWVudDsKLSAgICBkb2N1bWVudElzSFRNTCA9ICFpc1hNTCggZG9jdW1lbnQgKTsKLQot
ICAgIC8vIFN1cHBvcnQ6IElFIDktMTEsIEVkZ2UKLSAgICAvLyBBY2Nlc3NpbmcgaWZyYW1lIGRv
Y3VtZW50cyBhZnRlciB1bmxvYWQgdGhyb3dzICJwZXJtaXNzaW9uIGRlbmllZCIgZXJyb3JzIChq
UXVlcnkgIzEzOTM2KQotICAgIGlmICggKHBhcmVudCA9IGRvY3VtZW50LmRlZmF1bHRWaWV3KSAm
JiBwYXJlbnQudG9wICE9PSBwYXJlbnQgKSB7Ci0gICAgICAgIC8vIFN1cHBvcnQ6IElFIDExCi0g
ICAgICAgIGlmICggcGFyZW50LmFkZEV2ZW50TGlzdGVuZXIgKSB7Ci0gICAgICAgICAgICBwYXJl
bnQuYWRkRXZlbnRMaXN0ZW5lciggInVubG9hZCIsIHVubG9hZEhhbmRsZXIsIGZhbHNlICk7Ci0K
LSAgICAgICAgLy8gU3VwcG9ydDogSUUgOSAtIDEwIG9ubHkKLSAgICAgICAgfSBlbHNlIGlmICgg
cGFyZW50LmF0dGFjaEV2ZW50ICkgewotICAgICAgICAgICAgcGFyZW50LmF0dGFjaEV2ZW50KCAi
b251bmxvYWQiLCB1bmxvYWRIYW5kbGVyICk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiBB
dHRyaWJ1dGVzCi0gICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0gICAgLy8gU3VwcG9ydDogSUU8OAot
ICAgIC8vIFZlcmlmeSB0aGF0IGdldEF0dHJpYnV0ZSByZWFsbHkgcmV0dXJucyBhdHRyaWJ1dGVz
IGFuZCBub3QgcHJvcGVydGllcwotICAgIC8vIChleGNlcHRpbmcgSUU4IGJvb2xlYW5zKQotICAg
IHN1cHBvcnQuYXR0cmlidXRlcyA9IGFzc2VydChmdW5jdGlvbiggZGl2ICkgewotICAgICAgICBk
aXYuY2xhc3NOYW1lID0gImkiOwotICAgICAgICByZXR1cm4gIWRpdi5nZXRBdHRyaWJ1dGUoImNs
YXNzTmFtZSIpOwotICAgIH0pOwotCi0gICAgLyogZ2V0RWxlbWVudChzKUJ5KgotICAgIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0gKi8KLQotICAgIC8vIENoZWNrIGlmIGdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikg
cmV0dXJucyBvbmx5IGVsZW1lbnRzCi0gICAgc3VwcG9ydC5nZXRFbGVtZW50c0J5VGFnTmFtZSA9
IGFzc2VydChmdW5jdGlvbiggZGl2ICkgewotICAgICAgICBkaXYuYXBwZW5kQ2hpbGQoIGRvY3Vt
ZW50LmNyZWF0ZUNvbW1lbnQoIiIpICk7Ci0gICAgICAgIHJldHVybiAhZGl2LmdldEVsZW1lbnRz
QnlUYWdOYW1lKCIqIikubGVuZ3RoOwotICAgIH0pOwotCi0gICAgLy8gU3VwcG9ydDogSUU8OQot
ICAgIHN1cHBvcnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSA9IHJuYXRpdmUudGVzdCggZG9jdW1l
bnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSApOwotCi0gICAgLy8gU3VwcG9ydDogSUU8MTAKLSAg
ICAvLyBDaGVjayBpZiBnZXRFbGVtZW50QnlJZCByZXR1cm5zIGVsZW1lbnRzIGJ5IG5hbWUKLSAg
ICAvLyBUaGUgYnJva2VuIGdldEVsZW1lbnRCeUlkIG1ldGhvZHMgZG9uJ3QgcGljayB1cCBwcm9n
cmFtYXRpY2FsbHktc2V0IG5hbWVzLAotICAgIC8vIHNvIHVzZSBhIHJvdW5kYWJvdXQgZ2V0RWxl
bWVudHNCeU5hbWUgdGVzdAotICAgIHN1cHBvcnQuZ2V0QnlJZCA9IGFzc2VydChmdW5jdGlvbigg
ZGl2ICkgewotICAgICAgICBkb2NFbGVtLmFwcGVuZENoaWxkKCBkaXYgKS5pZCA9IGV4cGFuZG87
Ci0gICAgICAgIHJldHVybiAhZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUgfHwgIWRvY3VtZW50
LmdldEVsZW1lbnRzQnlOYW1lKCBleHBhbmRvICkubGVuZ3RoOwotICAgIH0pOwotCi0gICAgLy8g
SUQgZmluZCBhbmQgZmlsdGVyCi0gICAgaWYgKCBzdXBwb3J0LmdldEJ5SWQgKSB7Ci0gICAgICAg
IEV4cHIuZmluZFsiSUQiXSA9IGZ1bmN0aW9uKCBpZCwgY29udGV4dCApIHsKLSAgICAgICAgICAg
IGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQgIT09ICJ1bmRlZmluZWQiICYmIGRv
Y3VtZW50SXNIVE1MICkgewotICAgICAgICAgICAgICAgIHZhciBtID0gY29udGV4dC5nZXRFbGVt
ZW50QnlJZCggaWQgKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbSA/IFsgbSBdIDogW107Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0gICAgICAgIEV4cHIuZmlsdGVyWyJJRCJdID0gZnVu
Y3Rpb24oIGlkICkgewotICAgICAgICAgICAgdmFyIGF0dHJJZCA9IGlkLnJlcGxhY2UoIHJ1bmVz
Y2FwZSwgZnVuZXNjYXBlICk7Ci0gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCJpZCIpID09PSBhdHRy
SWQ7Ci0gICAgICAgICAgICB9OwotICAgICAgICB9OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8v
IFN1cHBvcnQ6IElFNi83Ci0gICAgICAgIC8vIGdldEVsZW1lbnRCeUlkIGlzIG5vdCByZWxpYWJs
ZSBhcyBhIGZpbmQgc2hvcnRjdXQKLSAgICAgICAgZGVsZXRlIEV4cHIuZmluZFsiSUQiXTsKLQot
ICAgICAgICBFeHByLmZpbHRlclsiSUQiXSA9ICBmdW5jdGlvbiggaWQgKSB7Ci0gICAgICAgICAg
ICB2YXIgYXR0cklkID0gaWQucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTsKLSAgICAg
ICAgICAgIHJldHVybiBmdW5jdGlvbiggZWxlbSApIHsKLSAgICAgICAgICAgICAgICB2YXIgbm9k
ZSA9IHR5cGVvZiBlbGVtLmdldEF0dHJpYnV0ZU5vZGUgIT09ICJ1bmRlZmluZWQiICYmCi0gICAg
ICAgICAgICAgICAgICAgIGVsZW0uZ2V0QXR0cmlidXRlTm9kZSgiaWQiKTsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gbm9kZSAmJiBub2RlLnZhbHVlID09PSBhdHRySWQ7Ci0gICAgICAgICAgICB9
OwotICAgICAgICB9OwotICAgIH0KLQotICAgIC8vIFRhZwotICAgIEV4cHIuZmluZFsiVEFHIl0g
PSBzdXBwb3J0LmdldEVsZW1lbnRzQnlUYWdOYW1lID8KLSAgICAgICAgZnVuY3Rpb24oIHRhZywg
Y29udGV4dCApIHsKLSAgICAgICAgICAgIGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNC
eVRhZ05hbWUgIT09ICJ1bmRlZmluZWQiICkgewotICAgICAgICAgICAgICAgIHJldHVybiBjb250
ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCB0YWcgKTsKLQotICAgICAgICAgICAgLy8gRG9jdW1l
bnRGcmFnbWVudCBub2RlcyBkb24ndCBoYXZlIGdFQlROCi0gICAgICAgICAgICB9IGVsc2UgaWYg
KCBzdXBwb3J0LnFzYSApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5xdWVyeVNl
bGVjdG9yQWxsKCB0YWcgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSA6Ci0KLSAgICAgICAg
ZnVuY3Rpb24oIHRhZywgY29udGV4dCApIHsKLSAgICAgICAgICAgIHZhciBlbGVtLAotICAgICAg
ICAgICAgICAgIHRtcCA9IFtdLAotICAgICAgICAgICAgICAgIGkgPSAwLAotICAgICAgICAgICAg
ICAgIC8vIEJ5IGhhcHB5IGNvaW5jaWRlbmNlLCBhIChicm9rZW4pIGdFQlROIGFwcGVhcnMgb24g
RG9jdW1lbnRGcmFnbWVudCBub2RlcyB0b28KLSAgICAgICAgICAgICAgICByZXN1bHRzID0gY29u
dGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggdGFnICk7Ci0KLSAgICAgICAgICAgIC8vIEZpbHRl
ciBvdXQgcG9zc2libGUgY29tbWVudHMKLSAgICAgICAgICAgIGlmICggdGFnID09PSAiKiIgKSB7
Ci0gICAgICAgICAgICAgICAgd2hpbGUgKCAoZWxlbSA9IHJlc3VsdHNbaSsrXSkgKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHRtcC5wdXNoKCBlbGVtICk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gdG1wOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7Ci0gICAgICAgIH07Ci0KLSAgICAvLyBD
bGFzcwotICAgIEV4cHIuZmluZFsiQ0xBU1MiXSA9IHN1cHBvcnQuZ2V0RWxlbWVudHNCeUNsYXNz
TmFtZSAmJiBmdW5jdGlvbiggY2xhc3NOYW1lLCBjb250ZXh0ICkgewotICAgICAgICBpZiAoIHR5
cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgIT09ICJ1bmRlZmluZWQiICYmIGRv
Y3VtZW50SXNIVE1MICkgewotICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZ2V0RWxlbWVudHNC
eUNsYXNzTmFtZSggY2xhc3NOYW1lICk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgLyogUVNB
L21hdGNoZXNTZWxlY3RvcgotICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotICAgIC8vIFFTQSBhbmQg
bWF0Y2hlc1NlbGVjdG9yIHN1cHBvcnQKLQotICAgIC8vIG1hdGNoZXNTZWxlY3Rvcig6YWN0aXZl
KSByZXBvcnRzIGZhbHNlIHdoZW4gdHJ1ZSAoSUU5L09wZXJhIDExLjUpCi0gICAgcmJ1Z2d5TWF0
Y2hlcyA9IFtdOwotCi0gICAgLy8gcVNhKDpmb2N1cykgcmVwb3J0cyBmYWxzZSB3aGVuIHRydWUg
KENocm9tZSAyMSkKLSAgICAvLyBXZSBhbGxvdyB0aGlzIGJlY2F1c2Ugb2YgYSBidWcgaW4gSUU4
LzkgdGhhdCB0aHJvd3MgYW4gZXJyb3IKLSAgICAvLyB3aGVuZXZlciBgZG9jdW1lbnQuYWN0aXZl
RWxlbWVudGAgaXMgYWNjZXNzZWQgb24gYW4gaWZyYW1lCi0gICAgLy8gU28sIHdlIGFsbG93IDpm
b2N1cyB0byBwYXNzIHRocm91Z2ggUVNBIGFsbCB0aGUgdGltZSB0byBhdm9pZCB0aGUgSUUgZXJy
b3IKLSAgICAvLyBTZWUgaHR0cDovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQvMTMzNzgKLSAgICBy
YnVnZ3lRU0EgPSBbXTsKLQotICAgIGlmICggKHN1cHBvcnQucXNhID0gcm5hdGl2ZS50ZXN0KCBk
b2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsICkpICkgewotICAgICAgICAvLyBCdWlsZCBRU0EgcmVn
ZXgKLSAgICAgICAgLy8gUmVnZXggc3RyYXRlZ3kgYWRvcHRlZCBmcm9tIERpZWdvIFBlcmluaQot
ICAgICAgICBhc3NlcnQoZnVuY3Rpb24oIGRpdiApIHsKLSAgICAgICAgICAgIC8vIFNlbGVjdCBp
cyBzZXQgdG8gZW1wdHkgc3RyaW5nIG9uIHB1cnBvc2UKLSAgICAgICAgICAgIC8vIFRoaXMgaXMg
dG8gdGVzdCBJRSdzIHRyZWF0bWVudCBvZiBub3QgZXhwbGljaXRseQotICAgICAgICAgICAgLy8g
c2V0dGluZyBhIGJvb2xlYW4gY29udGVudCBhdHRyaWJ1dGUsCi0gICAgICAgICAgICAvLyBzaW5j
ZSBpdHMgcHJlc2VuY2Ugc2hvdWxkIGJlIGVub3VnaAotICAgICAgICAgICAgLy8gaHR0cDovL2J1
Z3MuanF1ZXJ5LmNvbS90aWNrZXQvMTIzNTkKLSAgICAgICAgICAgIGRvY0VsZW0uYXBwZW5kQ2hp
bGQoIGRpdiApLmlubmVySFRNTCA9ICI8YSBpZD0nIiArIGV4cGFuZG8gKyAiJz48L2E+IiArCi0g
ICAgICAgICAgICAgICAgIjxzZWxlY3QgaWQ9JyIgKyBleHBhbmRvICsgIi1cclxcJyBtc2FsbG93
Y2FwdHVyZT0nJz4iICsKLSAgICAgICAgICAgICAgICAiPG9wdGlvbiBzZWxlY3RlZD0nJz48L29w
dGlvbj48L3NlbGVjdD4iOwotCi0gICAgICAgICAgICAvLyBTdXBwb3J0OiBJRTgsIE9wZXJhIDEx
LTEyLjE2Ci0gICAgICAgICAgICAvLyBOb3RoaW5nIHNob3VsZCBiZSBzZWxlY3RlZCB3aGVuIGVt
cHR5IHN0cmluZ3MgZm9sbG93IF49IG9yICQ9IG9yICo9Ci0gICAgICAgICAgICAvLyBUaGUgdGVz
dCBhdHRyaWJ1dGUgbXVzdCBiZSB1bmtub3duIGluIE9wZXJhIGJ1dCAic2FmZSIgZm9yIFdpblJU
Ci0gICAgICAgICAgICAvLyBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkv
aWUvaGg0NjUzODguYXNweCNhdHRyaWJ1dGVfc2VjdGlvbgotICAgICAgICAgICAgaWYgKCBkaXYu
cXVlcnlTZWxlY3RvckFsbCgiW21zYWxsb3djYXB0dXJlXj0nJ10iKS5sZW5ndGggKSB7Ci0gICAg
ICAgICAgICAgICAgcmJ1Z2d5UVNBLnB1c2goICJbKl4kXT0iICsgd2hpdGVzcGFjZSArICIqKD86
Jyd8XCJcIikiICk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFN1cHBvcnQ6IElF
OAotICAgICAgICAgICAgLy8gQm9vbGVhbiBhdHRyaWJ1dGVzIGFuZCAidmFsdWUiIGFyZSBub3Qg
dHJlYXRlZCBjb3JyZWN0bHkKLSAgICAgICAgICAgIGlmICggIWRpdi5xdWVyeVNlbGVjdG9yQWxs
KCJbc2VsZWN0ZWRdIikubGVuZ3RoICkgewotICAgICAgICAgICAgICAgIHJidWdneVFTQS5wdXNo
KCAiXFxbIiArIHdoaXRlc3BhY2UgKyAiKig/OnZhbHVlfCIgKyBib29sZWFucyArICIpIiApOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBTdXBwb3J0OiBDaHJvbWU8MjksIEFuZHJv
aWQ8NC40LCBTYWZhcmk8Ny4wKywgaU9TPDcuMCssIFBoYW50b21KUzwxLjkuOCsKLSAgICAgICAg
ICAgIGlmICggIWRpdi5xdWVyeVNlbGVjdG9yQWxsKCAiW2lkfj0iICsgZXhwYW5kbyArICItXSIg
KS5sZW5ndGggKSB7Ci0gICAgICAgICAgICAgICAgcmJ1Z2d5UVNBLnB1c2goIn49Iik7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFdlYmtpdC9PcGVyYSAtIDpjaGVja2VkIHNob3Vs
ZCByZXR1cm4gc2VsZWN0ZWQgb3B0aW9uIGVsZW1lbnRzCi0gICAgICAgICAgICAvLyBodHRwOi8v
d3d3LnczLm9yZy9UUi8yMDExL1JFQy1jc3MzLXNlbGVjdG9ycy0yMDExMDkyOS8jY2hlY2tlZAot
ICAgICAgICAgICAgLy8gSUU4IHRocm93cyBlcnJvciBoZXJlIGFuZCB3aWxsIG5vdCBzZWUgbGF0
ZXIgdGVzdHMKLSAgICAgICAgICAgIGlmICggIWRpdi5xdWVyeVNlbGVjdG9yQWxsKCI6Y2hlY2tl
ZCIpLmxlbmd0aCApIHsKLSAgICAgICAgICAgICAgICByYnVnZ3lRU0EucHVzaCgiOmNoZWNrZWQi
KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gU3VwcG9ydDogU2FmYXJpIDgrLCBp
T1MgOCsKLSAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMzY4NTEKLSAgICAgICAgICAgIC8vIEluLXBhZ2UgYHNlbGVjdG9yI2lkIHNpYmluZy1j
b21iaW5hdG9yIHNlbGVjdG9yYCBmYWlscwotICAgICAgICAgICAgaWYgKCAhZGl2LnF1ZXJ5U2Vs
ZWN0b3JBbGwoICJhIyIgKyBleHBhbmRvICsgIisqIiApLmxlbmd0aCApIHsKLSAgICAgICAgICAg
ICAgICByYnVnZ3lRU0EucHVzaCgiLiMuK1srfl0iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fSk7Ci0KLSAgICAgICAgYXNzZXJ0KGZ1bmN0aW9uKCBkaXYgKSB7Ci0gICAgICAgICAgICAvLyBT
dXBwb3J0OiBXaW5kb3dzIDggTmF0aXZlIEFwcHMKLSAgICAgICAgICAgIC8vIFRoZSB0eXBlIGFu
ZCBuYW1lIGF0dHJpYnV0ZXMgYXJlIHJlc3RyaWN0ZWQgZHVyaW5nIC5pbm5lckhUTUwgYXNzaWdu
bWVudAotICAgICAgICAgICAgdmFyIGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5w
dXQiKTsKLSAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSggInR5cGUiLCAiaGlkZGVuIiAp
OwotICAgICAgICAgICAgZGl2LmFwcGVuZENoaWxkKCBpbnB1dCApLnNldEF0dHJpYnV0ZSggIm5h
bWUiLCAiRCIgKTsKLQotICAgICAgICAgICAgLy8gU3VwcG9ydDogSUU4Ci0gICAgICAgICAgICAv
LyBFbmZvcmNlIGNhc2Utc2Vuc2l0aXZpdHkgb2YgbmFtZSBhdHRyaWJ1dGUKLSAgICAgICAgICAg
IGlmICggZGl2LnF1ZXJ5U2VsZWN0b3JBbGwoIltuYW1lPWRdIikubGVuZ3RoICkgewotICAgICAg
ICAgICAgICAgIHJidWdneVFTQS5wdXNoKCAibmFtZSIgKyB3aGl0ZXNwYWNlICsgIipbKl4kfCF+
XT89IiApOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBGRiAzLjUgLSA6ZW5hYmxl
ZC86ZGlzYWJsZWQgYW5kIGhpZGRlbiBlbGVtZW50cyAoaGlkZGVuIGVsZW1lbnRzIGFyZSBzdGls
bCBlbmFibGVkKQotICAgICAgICAgICAgLy8gSUU4IHRocm93cyBlcnJvciBoZXJlIGFuZCB3aWxs
IG5vdCBzZWUgbGF0ZXIgdGVzdHMKLSAgICAgICAgICAgIGlmICggIWRpdi5xdWVyeVNlbGVjdG9y
QWxsKCI6ZW5hYmxlZCIpLmxlbmd0aCApIHsKLSAgICAgICAgICAgICAgICByYnVnZ3lRU0EucHVz
aCggIjplbmFibGVkIiwgIjpkaXNhYmxlZCIgKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgLy8gT3BlcmEgMTAtMTEgZG9lcyBub3QgdGhyb3cgb24gcG9zdC1jb21tYSBpbnZhbGlkIHBz
ZXVkb3MKLSAgICAgICAgICAgIGRpdi5xdWVyeVNlbGVjdG9yQWxsKCIqLDp4Iik7Ci0gICAgICAg
ICAgICByYnVnZ3lRU0EucHVzaCgiLC4qOiIpOwotICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICBp
ZiAoIChzdXBwb3J0Lm1hdGNoZXNTZWxlY3RvciA9IHJuYXRpdmUudGVzdCggKG1hdGNoZXMgPSBk
b2NFbGVtLm1hdGNoZXMgfHwKLSAgICAgICAgZG9jRWxlbS53ZWJraXRNYXRjaGVzU2VsZWN0b3Ig
fHwKLSAgICAgICAgZG9jRWxlbS5tb3pNYXRjaGVzU2VsZWN0b3IgfHwKLSAgICAgICAgZG9jRWxl
bS5vTWF0Y2hlc1NlbGVjdG9yIHx8Ci0gICAgICAgIGRvY0VsZW0ubXNNYXRjaGVzU2VsZWN0b3Ip
ICkpICkgewotCi0gICAgICAgIGFzc2VydChmdW5jdGlvbiggZGl2ICkgewotICAgICAgICAgICAg
Ly8gQ2hlY2sgdG8gc2VlIGlmIGl0J3MgcG9zc2libGUgdG8gZG8gbWF0Y2hlc1NlbGVjdG9yCi0g
ICAgICAgICAgICAvLyBvbiBhIGRpc2Nvbm5lY3RlZCBub2RlIChJRSA5KQotICAgICAgICAgICAg
c3VwcG9ydC5kaXNjb25uZWN0ZWRNYXRjaCA9IG1hdGNoZXMuY2FsbCggZGl2LCAiZGl2IiApOwot
Ci0gICAgICAgICAgICAvLyBUaGlzIHNob3VsZCBmYWlsIHdpdGggYW4gZXhjZXB0aW9uCi0gICAg
ICAgICAgICAvLyBHZWNrbyBkb2VzIG5vdCBlcnJvciwgcmV0dXJucyBmYWxzZSBpbnN0ZWFkCi0g
ICAgICAgICAgICBtYXRjaGVzLmNhbGwoIGRpdiwgIltzIT0nJ106eCIgKTsKLSAgICAgICAgICAg
IHJidWdneU1hdGNoZXMucHVzaCggIiE9IiwgcHNldWRvcyApOwotICAgICAgICB9KTsKLSAgICB9
Ci0KLSAgICByYnVnZ3lRU0EgPSByYnVnZ3lRU0EubGVuZ3RoICYmIG5ldyBSZWdFeHAoIHJidWdn
eVFTQS5qb2luKCJ8IikgKTsKLSAgICByYnVnZ3lNYXRjaGVzID0gcmJ1Z2d5TWF0Y2hlcy5sZW5n
dGggJiYgbmV3IFJlZ0V4cCggcmJ1Z2d5TWF0Y2hlcy5qb2luKCJ8IikgKTsKLQotICAgIC8qIENv
bnRhaW5zCi0gICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotICAgIGhhc0NvbXBhcmUgPSBybmF0aXZlLnRl
c3QoIGRvY0VsZW0uY29tcGFyZURvY3VtZW50UG9zaXRpb24gKTsKLQotICAgIC8vIEVsZW1lbnQg
Y29udGFpbnMgYW5vdGhlcgotICAgIC8vIFB1cnBvc2VmdWxseSBzZWxmLWV4Y2x1c2l2ZQotICAg
IC8vIEFzIGluLCBhbiBlbGVtZW50IGRvZXMgbm90IGNvbnRhaW4gaXRzZWxmCi0gICAgY29udGFp
bnMgPSBoYXNDb21wYXJlIHx8IHJuYXRpdmUudGVzdCggZG9jRWxlbS5jb250YWlucyApID8KLSAg
ICAgICAgZnVuY3Rpb24oIGEsIGIgKSB7Ci0gICAgICAgICAgICB2YXIgYWRvd24gPSBhLm5vZGVU
eXBlID09PSA5ID8gYS5kb2N1bWVudEVsZW1lbnQgOiBhLAotICAgICAgICAgICAgICAgIGJ1cCA9
IGIgJiYgYi5wYXJlbnROb2RlOwotICAgICAgICAgICAgcmV0dXJuIGEgPT09IGJ1cCB8fCAhISgg
YnVwICYmIGJ1cC5ub2RlVHlwZSA9PT0gMSAmJiAoCi0gICAgICAgICAgICAgICAgYWRvd24uY29u
dGFpbnMgPwotICAgICAgICAgICAgICAgICAgICBhZG93bi5jb250YWlucyggYnVwICkgOgotICAg
ICAgICAgICAgICAgICAgICBhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uICYmIGEuY29tcGFyZURv
Y3VtZW50UG9zaXRpb24oIGJ1cCApICYgMTYKLSAgICAgICAgICAgICkpOwotICAgICAgICB9IDoK
LSAgICAgICAgZnVuY3Rpb24oIGEsIGIgKSB7Ci0gICAgICAgICAgICBpZiAoIGIgKSB7Ci0gICAg
ICAgICAgICAgICAgd2hpbGUgKCAoYiA9IGIucGFyZW50Tm9kZSkgKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmICggYiA9PT0gYSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9OwotCi0gICAgLyogU29y
dGluZwotICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotICAgIC8vIERvY3VtZW50IG9yZGVyIHNvcnRp
bmcKLSAgICBzb3J0T3JkZXIgPSBoYXNDb21wYXJlID8KLSAgICBmdW5jdGlvbiggYSwgYiApIHsK
LQotICAgICAgICAvLyBGbGFnIGZvciBkdXBsaWNhdGUgcmVtb3ZhbAotICAgICAgICBpZiAoIGEg
PT09IGIgKSB7Ci0gICAgICAgICAgICBoYXNEdXBsaWNhdGUgPSB0cnVlOwotICAgICAgICAgICAg
cmV0dXJuIDA7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBTb3J0IG9uIG1ldGhvZCBleGlzdGVu
Y2UgaWYgb25seSBvbmUgaW5wdXQgaGFzIGNvbXBhcmVEb2N1bWVudFBvc2l0aW9uCi0gICAgICAg
IHZhciBjb21wYXJlID0gIWEuY29tcGFyZURvY3VtZW50UG9zaXRpb24gLSAhYi5jb21wYXJlRG9j
dW1lbnRQb3NpdGlvbjsKLSAgICAgICAgaWYgKCBjb21wYXJlICkgewotICAgICAgICAgICAgcmV0
dXJuIGNvbXBhcmU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBDYWxjdWxhdGUgcG9zaXRpb24g
aWYgYm90aCBpbnB1dHMgYmVsb25nIHRvIHRoZSBzYW1lIGRvY3VtZW50Ci0gICAgICAgIGNvbXBh
cmUgPSAoIGEub3duZXJEb2N1bWVudCB8fCBhICkgPT09ICggYi5vd25lckRvY3VtZW50IHx8IGIg
KSA/Ci0gICAgICAgICAgICBhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBiICkgOgotCi0gICAg
ICAgICAgICAvLyBPdGhlcndpc2Ugd2Uga25vdyB0aGV5IGFyZSBkaXNjb25uZWN0ZWQKLSAgICAg
ICAgICAgIDE7Ci0KLSAgICAgICAgLy8gRGlzY29ubmVjdGVkIG5vZGVzCi0gICAgICAgIGlmICgg
Y29tcGFyZSAmIDEgfHwKLSAgICAgICAgICAgICghc3VwcG9ydC5zb3J0RGV0YWNoZWQgJiYgYi5j
b21wYXJlRG9jdW1lbnRQb3NpdGlvbiggYSApID09PSBjb21wYXJlKSApIHsKLQotICAgICAgICAg
ICAgLy8gQ2hvb3NlIHRoZSBmaXJzdCBlbGVtZW50IHRoYXQgaXMgcmVsYXRlZCB0byBvdXIgcHJl
ZmVycmVkIGRvY3VtZW50Ci0gICAgICAgICAgICBpZiAoIGEgPT09IGRvY3VtZW50IHx8IGEub3du
ZXJEb2N1bWVudCA9PT0gcHJlZmVycmVkRG9jICYmIGNvbnRhaW5zKHByZWZlcnJlZERvYywgYSkg
KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgaWYgKCBiID09PSBkb2N1bWVudCB8fCBiLm93bmVyRG9jdW1lbnQgPT09IHByZWZlcnJlZERv
YyAmJiBjb250YWlucyhwcmVmZXJyZWREb2MsIGIpICkgewotICAgICAgICAgICAgICAgIHJldHVy
biAxOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBNYWludGFpbiBvcmlnaW5hbCBv
cmRlcgotICAgICAgICAgICAgcmV0dXJuIHNvcnRJbnB1dCA/Ci0gICAgICAgICAgICAgICAgKCBp
bmRleE9mKCBzb3J0SW5wdXQsIGEgKSAtIGluZGV4T2YoIHNvcnRJbnB1dCwgYiApICkgOgotICAg
ICAgICAgICAgICAgIDA7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gY29tcGFyZSAmIDQg
PyAtMSA6IDE7Ci0gICAgfSA6Ci0gICAgZnVuY3Rpb24oIGEsIGIgKSB7Ci0gICAgICAgIC8vIEV4
aXQgZWFybHkgaWYgdGhlIG5vZGVzIGFyZSBpZGVudGljYWwKLSAgICAgICAgaWYgKCBhID09PSBi
ICkgewotICAgICAgICAgICAgaGFzRHVwbGljYXRlID0gdHJ1ZTsKLSAgICAgICAgICAgIHJldHVy
biAwOwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIGN1ciwKLSAgICAgICAgICAgIGkgPSAwLAot
ICAgICAgICAgICAgYXVwID0gYS5wYXJlbnROb2RlLAotICAgICAgICAgICAgYnVwID0gYi5wYXJl
bnROb2RlLAotICAgICAgICAgICAgYXAgPSBbIGEgXSwKLSAgICAgICAgICAgIGJwID0gWyBiIF07
Ci0KLSAgICAgICAgLy8gUGFyZW50bGVzcyBub2RlcyBhcmUgZWl0aGVyIGRvY3VtZW50cyBvciBk
aXNjb25uZWN0ZWQKLSAgICAgICAgaWYgKCAhYXVwIHx8ICFidXAgKSB7Ci0gICAgICAgICAgICBy
ZXR1cm4gYSA9PT0gZG9jdW1lbnQgPyAtMSA6Ci0gICAgICAgICAgICAgICAgYiA9PT0gZG9jdW1l
bnQgPyAxIDoKLSAgICAgICAgICAgICAgICBhdXAgPyAtMSA6Ci0gICAgICAgICAgICAgICAgYnVw
ID8gMSA6Ci0gICAgICAgICAgICAgICAgc29ydElucHV0ID8KLSAgICAgICAgICAgICAgICAoIGlu
ZGV4T2YoIHNvcnRJbnB1dCwgYSApIC0gaW5kZXhPZiggc29ydElucHV0LCBiICkgKSA6Ci0gICAg
ICAgICAgICAgICAgMDsKLQotICAgICAgICAvLyBJZiB0aGUgbm9kZXMgYXJlIHNpYmxpbmdzLCB3
ZSBjYW4gZG8gYSBxdWljayBjaGVjawotICAgICAgICB9IGVsc2UgaWYgKCBhdXAgPT09IGJ1cCAp
IHsKLSAgICAgICAgICAgIHJldHVybiBzaWJsaW5nQ2hlY2soIGEsIGIgKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIC8vIE90aGVyd2lzZSB3ZSBuZWVkIGZ1bGwgbGlzdHMgb2YgdGhlaXIgYW5jZXN0
b3JzIGZvciBjb21wYXJpc29uCi0gICAgICAgIGN1ciA9IGE7Ci0gICAgICAgIHdoaWxlICggKGN1
ciA9IGN1ci5wYXJlbnROb2RlKSApIHsKLSAgICAgICAgICAgIGFwLnVuc2hpZnQoIGN1ciApOwot
ICAgICAgICB9Ci0gICAgICAgIGN1ciA9IGI7Ci0gICAgICAgIHdoaWxlICggKGN1ciA9IGN1ci5w
YXJlbnROb2RlKSApIHsKLSAgICAgICAgICAgIGJwLnVuc2hpZnQoIGN1ciApOwotICAgICAgICB9
Ci0KLSAgICAgICAgLy8gV2FsayBkb3duIHRoZSB0cmVlIGxvb2tpbmcgZm9yIGEgZGlzY3JlcGFu
Y3kKLSAgICAgICAgd2hpbGUgKCBhcFtpXSA9PT0gYnBbaV0gKSB7Ci0gICAgICAgICAgICBpKys7
Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gaSA/Ci0gICAgICAgICAgICAvLyBEbyBhIHNp
YmxpbmcgY2hlY2sgaWYgdGhlIG5vZGVzIGhhdmUgYSBjb21tb24gYW5jZXN0b3IKLSAgICAgICAg
ICAgIHNpYmxpbmdDaGVjayggYXBbaV0sIGJwW2ldICkgOgotCi0gICAgICAgICAgICAvLyBPdGhl
cndpc2Ugbm9kZXMgaW4gb3VyIGRvY3VtZW50IHNvcnQgZmlyc3QKLSAgICAgICAgICAgIGFwW2ld
ID09PSBwcmVmZXJyZWREb2MgPyAtMSA6Ci0gICAgICAgICAgICBicFtpXSA9PT0gcHJlZmVycmVk
RG9jID8gMSA6Ci0gICAgICAgICAgICAwOwotICAgIH07Ci0KLSAgICByZXR1cm4gZG9jdW1lbnQ7
Ci19OwotCi1TaXp6bGUubWF0Y2hlcyA9IGZ1bmN0aW9uKCBleHByLCBlbGVtZW50cyApIHsKLSAg
ICByZXR1cm4gU2l6emxlKCBleHByLCBudWxsLCBudWxsLCBlbGVtZW50cyApOwotfTsKLQotU2l6
emxlLm1hdGNoZXNTZWxlY3RvciA9IGZ1bmN0aW9uKCBlbGVtLCBleHByICkgewotICAgIC8vIFNl
dCBkb2N1bWVudCB2YXJzIGlmIG5lZWRlZAotICAgIGlmICggKCBlbGVtLm93bmVyRG9jdW1lbnQg
fHwgZWxlbSApICE9PSBkb2N1bWVudCApIHsKLSAgICAgICAgc2V0RG9jdW1lbnQoIGVsZW0gKTsK
LSAgICB9Ci0KLSAgICAvLyBNYWtlIHN1cmUgdGhhdCBhdHRyaWJ1dGUgc2VsZWN0b3JzIGFyZSBx
dW90ZWQKLSAgICBleHByID0gZXhwci5yZXBsYWNlKCByYXR0cmlidXRlUXVvdGVzLCAiPSckMSdd
IiApOwotCi0gICAgaWYgKCBzdXBwb3J0Lm1hdGNoZXNTZWxlY3RvciAmJiBkb2N1bWVudElzSFRN
TCAmJgotICAgICAgICAhY29tcGlsZXJDYWNoZVsgZXhwciArICIgIiBdICYmCi0gICAgICAgICgg
IXJidWdneU1hdGNoZXMgfHwgIXJidWdneU1hdGNoZXMudGVzdCggZXhwciApICkgJiYKLSAgICAg
ICAgKCAhcmJ1Z2d5UVNBICAgICB8fCAhcmJ1Z2d5UVNBLnRlc3QoIGV4cHIgKSApICkgewotCi0g
ICAgICAgIHRyeSB7Ci0gICAgICAgICAgICB2YXIgcmV0ID0gbWF0Y2hlcy5jYWxsKCBlbGVtLCBl
eHByICk7Ci0KLSAgICAgICAgICAgIC8vIElFIDkncyBtYXRjaGVzU2VsZWN0b3IgcmV0dXJucyBm
YWxzZSBvbiBkaXNjb25uZWN0ZWQgbm9kZXMKLSAgICAgICAgICAgIGlmICggcmV0IHx8IHN1cHBv
cnQuZGlzY29ubmVjdGVkTWF0Y2ggfHwKLSAgICAgICAgICAgICAgICAgICAgLy8gQXMgd2VsbCwg
ZGlzY29ubmVjdGVkIG5vZGVzIGFyZSBzYWlkIHRvIGJlIGluIGEgZG9jdW1lbnQKLSAgICAgICAg
ICAgICAgICAgICAgLy8gZnJhZ21lbnQgaW4gSUUgOQotICAgICAgICAgICAgICAgICAgICBlbGVt
LmRvY3VtZW50ICYmIGVsZW0uZG9jdW1lbnQubm9kZVR5cGUgIT09IDExICkgewotICAgICAgICAg
ICAgICAgIHJldHVybiByZXQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gY2F0Y2ggKGUpIHt9
Ci0gICAgfQotCi0gICAgcmV0dXJuIFNpenpsZSggZXhwciwgZG9jdW1lbnQsIG51bGwsIFsgZWxl
bSBdICkubGVuZ3RoID4gMDsKLX07Ci0KLVNpenpsZS5jb250YWlucyA9IGZ1bmN0aW9uKCBjb250
ZXh0LCBlbGVtICkgewotICAgIC8vIFNldCBkb2N1bWVudCB2YXJzIGlmIG5lZWRlZAotICAgIGlm
ICggKCBjb250ZXh0Lm93bmVyRG9jdW1lbnQgfHwgY29udGV4dCApICE9PSBkb2N1bWVudCApIHsK
LSAgICAgICAgc2V0RG9jdW1lbnQoIGNvbnRleHQgKTsKLSAgICB9Ci0gICAgcmV0dXJuIGNvbnRh
aW5zKCBjb250ZXh0LCBlbGVtICk7Ci19OwotCi1TaXp6bGUuYXR0ciA9IGZ1bmN0aW9uKCBlbGVt
LCBuYW1lICkgewotICAgIC8vIFNldCBkb2N1bWVudCB2YXJzIGlmIG5lZWRlZAotICAgIGlmICgg
KCBlbGVtLm93bmVyRG9jdW1lbnQgfHwgZWxlbSApICE9PSBkb2N1bWVudCApIHsKLSAgICAgICAg
c2V0RG9jdW1lbnQoIGVsZW0gKTsKLSAgICB9Ci0KLSAgICB2YXIgZm4gPSBFeHByLmF0dHJIYW5k
bGVbIG5hbWUudG9Mb3dlckNhc2UoKSBdLAotICAgICAgICAvLyBEb24ndCBnZXQgZm9vbGVkIGJ5
IE9iamVjdC5wcm90b3R5cGUgcHJvcGVydGllcyAoalF1ZXJ5ICMxMzgwNykKLSAgICAgICAgdmFs
ID0gZm4gJiYgaGFzT3duLmNhbGwoIEV4cHIuYXR0ckhhbmRsZSwgbmFtZS50b0xvd2VyQ2FzZSgp
ICkgPwotICAgICAgICAgICAgZm4oIGVsZW0sIG5hbWUsICFkb2N1bWVudElzSFRNTCApIDoKLSAg
ICAgICAgICAgIHVuZGVmaW5lZDsKLQotICAgIHJldHVybiB2YWwgIT09IHVuZGVmaW5lZCA/Ci0g
ICAgICAgIHZhbCA6Ci0gICAgICAgIHN1cHBvcnQuYXR0cmlidXRlcyB8fCAhZG9jdW1lbnRJc0hU
TUwgPwotICAgICAgICAgICAgZWxlbS5nZXRBdHRyaWJ1dGUoIG5hbWUgKSA6Ci0gICAgICAgICAg
ICAodmFsID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKG5hbWUpKSAmJiB2YWwuc3BlY2lmaWVkID8K
LSAgICAgICAgICAgICAgICB2YWwudmFsdWUgOgotICAgICAgICAgICAgICAgIG51bGw7Ci19Owot
Ci1TaXp6bGUuZXJyb3IgPSBmdW5jdGlvbiggbXNnICkgewotICAgIHRocm93IG5ldyBFcnJvcigg
IlN5bnRheCBlcnJvciwgdW5yZWNvZ25pemVkIGV4cHJlc3Npb246ICIgKyBtc2cgKTsKLX07Ci0K
LS8qKgotICogRG9jdW1lbnQgc29ydGluZyBhbmQgcmVtb3ZpbmcgZHVwbGljYXRlcwotICogQHBh
cmFtIHtBcnJheUxpa2V9IHJlc3VsdHMKLSAqLwotU2l6emxlLnVuaXF1ZVNvcnQgPSBmdW5jdGlv
biggcmVzdWx0cyApIHsKLSAgICB2YXIgZWxlbSwKLSAgICAgICAgZHVwbGljYXRlcyA9IFtdLAot
ICAgICAgICBqID0gMCwKLSAgICAgICAgaSA9IDA7Ci0KLSAgICAvLyBVbmxlc3Mgd2UgKmtub3cq
IHdlIGNhbiBkZXRlY3QgZHVwbGljYXRlcywgYXNzdW1lIHRoZWlyIHByZXNlbmNlCi0gICAgaGFz
RHVwbGljYXRlID0gIXN1cHBvcnQuZGV0ZWN0RHVwbGljYXRlczsKLSAgICBzb3J0SW5wdXQgPSAh
c3VwcG9ydC5zb3J0U3RhYmxlICYmIHJlc3VsdHMuc2xpY2UoIDAgKTsKLSAgICByZXN1bHRzLnNv
cnQoIHNvcnRPcmRlciApOwotCi0gICAgaWYgKCBoYXNEdXBsaWNhdGUgKSB7Ci0gICAgICAgIHdo
aWxlICggKGVsZW0gPSByZXN1bHRzW2krK10pICkgewotICAgICAgICAgICAgaWYgKCBlbGVtID09
PSByZXN1bHRzWyBpIF0gKSB7Ci0gICAgICAgICAgICAgICAgaiA9IGR1cGxpY2F0ZXMucHVzaCgg
aSApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHdoaWxlICggai0tICkgewot
ICAgICAgICAgICAgcmVzdWx0cy5zcGxpY2UoIGR1cGxpY2F0ZXNbIGogXSwgMSApOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgLy8gQ2xlYXIgaW5wdXQgYWZ0ZXIgc29ydGluZyB0byByZWxlYXNl
IG9iamVjdHMKLSAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2pxdWVyeS9zaXp6bGUvcHVs
bC8yMjUKLSAgICBzb3J0SW5wdXQgPSBudWxsOwotCi0gICAgcmV0dXJuIHJlc3VsdHM7Ci19Owot
Ci0vKioKLSAqIFV0aWxpdHkgZnVuY3Rpb24gZm9yIHJldHJpZXZpbmcgdGhlIHRleHQgdmFsdWUg
b2YgYW4gYXJyYXkgb2YgRE9NIG5vZGVzCi0gKiBAcGFyYW0ge0FycmF5fEVsZW1lbnR9IGVsZW0K
LSAqLwotZ2V0VGV4dCA9IFNpenpsZS5nZXRUZXh0ID0gZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAg
dmFyIG5vZGUsCi0gICAgICAgIHJldCA9ICIiLAotICAgICAgICBpID0gMCwKLSAgICAgICAgbm9k
ZVR5cGUgPSBlbGVtLm5vZGVUeXBlOwotCi0gICAgaWYgKCAhbm9kZVR5cGUgKSB7Ci0gICAgICAg
IC8vIElmIG5vIG5vZGVUeXBlLCB0aGlzIGlzIGV4cGVjdGVkIHRvIGJlIGFuIGFycmF5Ci0gICAg
ICAgIHdoaWxlICggKG5vZGUgPSBlbGVtW2krK10pICkgewotICAgICAgICAgICAgLy8gRG8gbm90
IHRyYXZlcnNlIGNvbW1lbnQgbm9kZXMKLSAgICAgICAgICAgIHJldCArPSBnZXRUZXh0KCBub2Rl
ICk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKCBub2RlVHlwZSA9PT0gMSB8fCBub2RlVHlw
ZSA9PT0gOSB8fCBub2RlVHlwZSA9PT0gMTEgKSB7Ci0gICAgICAgIC8vIFVzZSB0ZXh0Q29udGVu
dCBmb3IgZWxlbWVudHMKLSAgICAgICAgLy8gaW5uZXJUZXh0IHVzYWdlIHJlbW92ZWQgZm9yIGNv
bnNpc3RlbmN5IG9mIG5ldyBsaW5lcyAoalF1ZXJ5ICMxMTE1MykKLSAgICAgICAgaWYgKCB0eXBl
b2YgZWxlbS50ZXh0Q29udGVudCA9PT0gInN0cmluZyIgKSB7Ci0gICAgICAgICAgICByZXR1cm4g
ZWxlbS50ZXh0Q29udGVudDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIFRyYXZl
cnNlIGl0cyBjaGlsZHJlbgotICAgICAgICAgICAgZm9yICggZWxlbSA9IGVsZW0uZmlyc3RDaGls
ZDsgZWxlbTsgZWxlbSA9IGVsZW0ubmV4dFNpYmxpbmcgKSB7Ci0gICAgICAgICAgICAgICAgcmV0
ICs9IGdldFRleHQoIGVsZW0gKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0gZWxz
ZSBpZiAoIG5vZGVUeXBlID09PSAzIHx8IG5vZGVUeXBlID09PSA0ICkgewotICAgICAgICByZXR1
cm4gZWxlbS5ub2RlVmFsdWU7Ci0gICAgfQotICAgIC8vIERvIG5vdCBpbmNsdWRlIGNvbW1lbnQg
b3IgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbiBub2RlcwotCi0gICAgcmV0dXJuIHJldDsKLX07Ci0K
LUV4cHIgPSBTaXp6bGUuc2VsZWN0b3JzID0gewotCi0gICAgLy8gQ2FuIGJlIGFkanVzdGVkIGJ5
IHRoZSB1c2VyCi0gICAgY2FjaGVMZW5ndGg6IDUwLAotCi0gICAgY3JlYXRlUHNldWRvOiBtYXJr
RnVuY3Rpb24sCi0KLSAgICBtYXRjaDogbWF0Y2hFeHByLAotCi0gICAgYXR0ckhhbmRsZToge30s
Ci0KLSAgICBmaW5kOiB7fSwKLQotICAgIHJlbGF0aXZlOiB7Ci0gICAgICAgICI+IjogeyBkaXI6
ICJwYXJlbnROb2RlIiwgZmlyc3Q6IHRydWUgfSwKLSAgICAgICAgIiAiOiB7IGRpcjogInBhcmVu
dE5vZGUiIH0sCi0gICAgICAgICIrIjogeyBkaXI6ICJwcmV2aW91c1NpYmxpbmciLCBmaXJzdDog
dHJ1ZSB9LAotICAgICAgICAifiI6IHsgZGlyOiAicHJldmlvdXNTaWJsaW5nIiB9Ci0gICAgfSwK
LQotICAgIHByZUZpbHRlcjogewotICAgICAgICAiQVRUUiI6IGZ1bmN0aW9uKCBtYXRjaCApIHsK
LSAgICAgICAgICAgIG1hdGNoWzFdID0gbWF0Y2hbMV0ucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5l
c2NhcGUgKTsKLQotICAgICAgICAgICAgLy8gTW92ZSB0aGUgZ2l2ZW4gdmFsdWUgdG8gbWF0Y2hb
M10gd2hldGhlciBxdW90ZWQgb3IgdW5xdW90ZWQKLSAgICAgICAgICAgIG1hdGNoWzNdID0gKCBt
YXRjaFszXSB8fCBtYXRjaFs0XSB8fCBtYXRjaFs1XSB8fCAiIiApLnJlcGxhY2UoIHJ1bmVzY2Fw
ZSwgZnVuZXNjYXBlICk7Ci0KLSAgICAgICAgICAgIGlmICggbWF0Y2hbMl0gPT09ICJ+PSIgKSB7
Ci0gICAgICAgICAgICAgICAgbWF0Y2hbM10gPSAiICIgKyBtYXRjaFszXSArICIgIjsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIG1hdGNoLnNsaWNlKCAwLCA0ICk7Ci0gICAg
ICAgIH0sCi0KLSAgICAgICAgIkNISUxEIjogZnVuY3Rpb24oIG1hdGNoICkgewotICAgICAgICAg
ICAgLyogbWF0Y2hlcyBmcm9tIG1hdGNoRXhwclsiQ0hJTEQiXQotICAgICAgICAgICAgICAgIDEg
dHlwZSAob25seXxudGh8Li4uKQotICAgICAgICAgICAgICAgIDIgd2hhdCAoY2hpbGR8b2YtdHlw
ZSkKLSAgICAgICAgICAgICAgICAzIGFyZ3VtZW50IChldmVufG9kZHxcZCp8XGQqbihbKy1dXGQr
KT98Li4uKQotICAgICAgICAgICAgICAgIDQgeG4tY29tcG9uZW50IG9mIHhuK3kgYXJndW1lbnQg
KFsrLV0/XGQqbnwpCi0gICAgICAgICAgICAgICAgNSBzaWduIG9mIHhuLWNvbXBvbmVudAotICAg
ICAgICAgICAgICAgIDYgeCBvZiB4bi1jb21wb25lbnQKLSAgICAgICAgICAgICAgICA3IHNpZ24g
b2YgeS1jb21wb25lbnQKLSAgICAgICAgICAgICAgICA4IHkgb2YgeS1jb21wb25lbnQKLSAgICAg
ICAgICAgICovCi0gICAgICAgICAgICBtYXRjaFsxXSA9IG1hdGNoWzFdLnRvTG93ZXJDYXNlKCk7
Ci0KLSAgICAgICAgICAgIGlmICggbWF0Y2hbMV0uc2xpY2UoIDAsIDMgKSA9PT0gIm50aCIgKSB7
Ci0gICAgICAgICAgICAgICAgLy8gbnRoLSogcmVxdWlyZXMgYXJndW1lbnQKLSAgICAgICAgICAg
ICAgICBpZiAoICFtYXRjaFszXSApIHsKLSAgICAgICAgICAgICAgICAgICAgU2l6emxlLmVycm9y
KCBtYXRjaFswXSApOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIG51
bWVyaWMgeCBhbmQgeSBwYXJhbWV0ZXJzIGZvciBFeHByLmZpbHRlci5DSElMRAotICAgICAgICAg
ICAgICAgIC8vIHJlbWVtYmVyIHRoYXQgZmFsc2UvdHJ1ZSBjYXN0IHJlc3BlY3RpdmVseSB0byAw
LzEKLSAgICAgICAgICAgICAgICBtYXRjaFs0XSA9ICsoIG1hdGNoWzRdID8gbWF0Y2hbNV0gKyAo
bWF0Y2hbNl0gfHwgMSkgOiAyICogKCBtYXRjaFszXSA9PT0gImV2ZW4iIHx8IG1hdGNoWzNdID09
PSAib2RkIiApICk7Ci0gICAgICAgICAgICAgICAgbWF0Y2hbNV0gPSArKCAoIG1hdGNoWzddICsg
bWF0Y2hbOF0gKSB8fCBtYXRjaFszXSA9PT0gIm9kZCIgKTsKLQotICAgICAgICAgICAgLy8gb3Ro
ZXIgdHlwZXMgcHJvaGliaXQgYXJndW1lbnRzCi0gICAgICAgICAgICB9IGVsc2UgaWYgKCBtYXRj
aFszXSApIHsKLSAgICAgICAgICAgICAgICBTaXp6bGUuZXJyb3IoIG1hdGNoWzBdICk7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBtYXRjaDsKLSAgICAgICAgfSwKLQotICAg
ICAgICAiUFNFVURPIjogZnVuY3Rpb24oIG1hdGNoICkgewotICAgICAgICAgICAgdmFyIGV4Y2Vz
cywKLSAgICAgICAgICAgICAgICB1bnF1b3RlZCA9ICFtYXRjaFs2XSAmJiBtYXRjaFsyXTsKLQot
ICAgICAgICAgICAgaWYgKCBtYXRjaEV4cHJbIkNISUxEIl0udGVzdCggbWF0Y2hbMF0gKSApIHsK
LSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgLy8gQWNjZXB0IHF1b3RlZCBhcmd1bWVudHMgYXMtaXMKLSAgICAgICAgICAgIGlmICggbWF0
Y2hbM10gKSB7Ci0gICAgICAgICAgICAgICAgbWF0Y2hbMl0gPSBtYXRjaFs0XSB8fCBtYXRjaFs1
XSB8fCAiIjsKLQotICAgICAgICAgICAgLy8gU3RyaXAgZXhjZXNzIGNoYXJhY3RlcnMgZnJvbSB1
bnF1b3RlZCBhcmd1bWVudHMKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoIHVucXVvdGVkICYmIHJw
c2V1ZG8udGVzdCggdW5xdW90ZWQgKSAmJgotICAgICAgICAgICAgICAgIC8vIEdldCBleGNlc3Mg
ZnJvbSB0b2tlbml6ZSAocmVjdXJzaXZlbHkpCi0gICAgICAgICAgICAgICAgKGV4Y2VzcyA9IHRv
a2VuaXplKCB1bnF1b3RlZCwgdHJ1ZSApKSAmJgotICAgICAgICAgICAgICAgIC8vIGFkdmFuY2Ug
dG8gdGhlIG5leHQgY2xvc2luZyBwYXJlbnRoZXNpcwotICAgICAgICAgICAgICAgIChleGNlc3Mg
PSB1bnF1b3RlZC5pbmRleE9mKCAiKSIsIHVucXVvdGVkLmxlbmd0aCAtIGV4Y2VzcyApIC0gdW5x
dW90ZWQubGVuZ3RoKSApIHsKLQotICAgICAgICAgICAgICAgIC8vIGV4Y2VzcyBpcyBhIG5lZ2F0
aXZlIGluZGV4Ci0gICAgICAgICAgICAgICAgbWF0Y2hbMF0gPSBtYXRjaFswXS5zbGljZSggMCwg
ZXhjZXNzICk7Ci0gICAgICAgICAgICAgICAgbWF0Y2hbMl0gPSB1bnF1b3RlZC5zbGljZSggMCwg
ZXhjZXNzICk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFJldHVybiBvbmx5IGNh
cHR1cmVzIG5lZWRlZCBieSB0aGUgcHNldWRvIGZpbHRlciBtZXRob2QgKHR5cGUgYW5kIGFyZ3Vt
ZW50KQotICAgICAgICAgICAgcmV0dXJuIG1hdGNoLnNsaWNlKCAwLCAzICk7Ci0gICAgICAgIH0K
LSAgICB9LAotCi0gICAgZmlsdGVyOiB7Ci0KLSAgICAgICAgIlRBRyI6IGZ1bmN0aW9uKCBub2Rl
TmFtZVNlbGVjdG9yICkgewotICAgICAgICAgICAgdmFyIG5vZGVOYW1lID0gbm9kZU5hbWVTZWxl
Y3Rvci5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApLnRvTG93ZXJDYXNlKCk7Ci0gICAg
ICAgICAgICByZXR1cm4gbm9kZU5hbWVTZWxlY3RvciA9PT0gIioiID8KLSAgICAgICAgICAgICAg
ICBmdW5jdGlvbigpIHsgcmV0dXJuIHRydWU7IH0gOgotICAgICAgICAgICAgICAgIGZ1bmN0aW9u
KCBlbGVtICkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbS5ub2RlTmFtZSAmJiBl
bGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5vZGVOYW1lOwotICAgICAgICAgICAgICAg
IH07Ci0gICAgICAgIH0sCi0KLSAgICAgICAgIkNMQVNTIjogZnVuY3Rpb24oIGNsYXNzTmFtZSAp
IHsKLSAgICAgICAgICAgIHZhciBwYXR0ZXJuID0gY2xhc3NDYWNoZVsgY2xhc3NOYW1lICsgIiAi
IF07Ci0KLSAgICAgICAgICAgIHJldHVybiBwYXR0ZXJuIHx8Ci0gICAgICAgICAgICAgICAgKHBh
dHRlcm4gPSBuZXcgUmVnRXhwKCAiKF58IiArIHdoaXRlc3BhY2UgKyAiKSIgKyBjbGFzc05hbWUg
KyAiKCIgKyB3aGl0ZXNwYWNlICsgInwkKSIgKSkgJiYKLSAgICAgICAgICAgICAgICBjbGFzc0Nh
Y2hlKCBjbGFzc05hbWUsIGZ1bmN0aW9uKCBlbGVtICkgewotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gcGF0dGVybi50ZXN0KCB0eXBlb2YgZWxlbS5jbGFzc05hbWUgPT09ICJzdHJpbmciICYm
IGVsZW0uY2xhc3NOYW1lIHx8IHR5cGVvZiBlbGVtLmdldEF0dHJpYnV0ZSAhPT0gInVuZGVmaW5l
ZCIgJiYgZWxlbS5nZXRBdHRyaWJ1dGUoImNsYXNzIikgfHwgIiIgKTsKLSAgICAgICAgICAgICAg
ICB9KTsKLSAgICAgICAgfSwKLQotICAgICAgICAiQVRUUiI6IGZ1bmN0aW9uKCBuYW1lLCBvcGVy
YXRvciwgY2hlY2sgKSB7Ci0gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7Ci0g
ICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IFNpenpsZS5hdHRyKCBlbGVtLCBuYW1lICk7Ci0K
LSAgICAgICAgICAgICAgICBpZiAoIHJlc3VsdCA9PSBudWxsICkgewotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gb3BlcmF0b3IgPT09ICIhPSI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGlmICggIW9wZXJhdG9yICkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXN1bHQgKz0gIiI7
Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0b3IgPT09ICI9IiA/IHJlc3VsdCA9PT0g
Y2hlY2sgOgotICAgICAgICAgICAgICAgICAgICBvcGVyYXRvciA9PT0gIiE9IiA/IHJlc3VsdCAh
PT0gY2hlY2sgOgotICAgICAgICAgICAgICAgICAgICBvcGVyYXRvciA9PT0gIl49IiA/IGNoZWNr
ICYmIHJlc3VsdC5pbmRleE9mKCBjaGVjayApID09PSAwIDoKLSAgICAgICAgICAgICAgICAgICAg
b3BlcmF0b3IgPT09ICIqPSIgPyBjaGVjayAmJiByZXN1bHQuaW5kZXhPZiggY2hlY2sgKSA+IC0x
IDoKLSAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IgPT09ICIkPSIgPyBjaGVjayAmJiByZXN1
bHQuc2xpY2UoIC1jaGVjay5sZW5ndGggKSA9PT0gY2hlY2sgOgotICAgICAgICAgICAgICAgICAg
ICBvcGVyYXRvciA9PT0gIn49IiA/ICggIiAiICsgcmVzdWx0LnJlcGxhY2UoIHJ3aGl0ZXNwYWNl
LCAiICIgKSArICIgIiApLmluZGV4T2YoIGNoZWNrICkgPiAtMSA6Ci0gICAgICAgICAgICAgICAg
ICAgIG9wZXJhdG9yID09PSAifD0iID8gcmVzdWx0ID09PSBjaGVjayB8fCByZXN1bHQuc2xpY2Uo
IDAsIGNoZWNrLmxlbmd0aCArIDEgKSA9PT0gY2hlY2sgKyAiLSIgOgotICAgICAgICAgICAgICAg
ICAgICBmYWxzZTsKLSAgICAgICAgICAgIH07Ci0gICAgICAgIH0sCi0KLSAgICAgICAgIkNISUxE
IjogZnVuY3Rpb24oIHR5cGUsIHdoYXQsIGFyZ3VtZW50LCBmaXJzdCwgbGFzdCApIHsKLSAgICAg
ICAgICAgIHZhciBzaW1wbGUgPSB0eXBlLnNsaWNlKCAwLCAzICkgIT09ICJudGgiLAotICAgICAg
ICAgICAgICAgIGZvcndhcmQgPSB0eXBlLnNsaWNlKCAtNCApICE9PSAibGFzdCIsCi0gICAgICAg
ICAgICAgICAgb2ZUeXBlID0gd2hhdCA9PT0gIm9mLXR5cGUiOwotCi0gICAgICAgICAgICByZXR1
cm4gZmlyc3QgPT09IDEgJiYgbGFzdCA9PT0gMCA/Ci0KLSAgICAgICAgICAgICAgICAvLyBTaG9y
dGN1dCBmb3IgOm50aC0qKG4pCi0gICAgICAgICAgICAgICAgZnVuY3Rpb24oIGVsZW0gKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiAhIWVsZW0ucGFyZW50Tm9kZTsKLSAgICAgICAgICAg
ICAgICB9IDoKLQotICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwg
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBjYWNoZSwgdW5pcXVlQ2FjaGUsIG91dGVyQ2Fj
aGUsIG5vZGUsIG5vZGVJbmRleCwgc3RhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICBkaXIg
PSBzaW1wbGUgIT09IGZvcndhcmQgPyAibmV4dFNpYmxpbmciIDogInByZXZpb3VzU2libGluZyIs
Ci0gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGUsCi0gICAg
ICAgICAgICAgICAgICAgICAgICBuYW1lID0gb2ZUeXBlICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dl
ckNhc2UoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHVzZUNhY2hlID0gIXhtbCAmJiAhb2ZU
eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgZGlmZiA9IGZhbHNlOwotCi0gICAgICAgICAg
ICAgICAgICAgIGlmICggcGFyZW50ICkgewotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyA6
KGZpcnN0fGxhc3R8b25seSktKGNoaWxkfG9mLXR5cGUpCi0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIHNpbXBsZSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIGRp
ciApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSA9IGVsZW07Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICggKG5vZGUgPSBub2RlWyBkaXIgXSkg
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG9mVHlwZSA/Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5ub2RlTmFtZS50b0xv
d2VyQ2FzZSgpID09PSBuYW1lIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBub2RlLm5vZGVUeXBlID09PSAxICkgewotCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIFJldmVyc2UgZGlyZWN0aW9uIGZvciA6b25seS0qIChp
ZiB3ZSBoYXZlbid0IHlldCBkb25lIHNvKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdGFydCA9IGRpciA9IHR5cGUgPT09ICJvbmx5IiAmJiAhc3RhcnQgJiYgIm5leHRTaWJsaW5n
IjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIHN0YXJ0ID0gWyBmb3J3YXJkID8gcGFyZW50LmZpcnN0Q2hpbGQgOiBw
YXJlbnQubGFzdENoaWxkIF07Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vbi14bWwg
Om50aC1jaGlsZCguLi4pIHN0b3JlcyBjYWNoZSBkYXRhIG9uIGBwYXJlbnRgCi0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIGZvcndhcmQgJiYgdXNlQ2FjaGUgKSB7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBTZWVrIGBlbGVtYCBmcm9tIGEgcHJldmlvdXNseS1jYWNoZWQg
aW5kZXgKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIC4uLmluIGEgZ3ppcC1mcmll
bmRseSB3YXkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlID0gcGFyZW50OwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG91dGVyQ2FjaGUgPSBub2RlWyBleHBhbmRvIF0gfHwg
KG5vZGVbIGV4cGFuZG8gXSA9IHt9KTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFN1cHBvcnQ6IElFIDw5IG9ubHkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWZl
bmQgYWdhaW5zdCBjbG9uZWQgYXR0cm9wZXJ0aWVzIChqUXVlcnkgZ2gtMTcwOSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1bmlxdWVDYWNoZSA9IG91dGVyQ2FjaGVbIG5vZGUudW5pcXVl
SUQgXSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3V0ZXJDYWNoZVsgbm9k
ZS51bmlxdWVJRCBdID0ge30pOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGUg
PSB1bmlxdWVDYWNoZVsgdHlwZSBdIHx8IFtdOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5vZGVJbmRleCA9IGNhY2hlWyAwIF0gPT09IGRpcnJ1bnMgJiYgY2FjaGVbIDEgXTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkaWZmID0gbm9kZUluZGV4ICYmIGNhY2hlWyAyIF07Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSA9IG5vZGVJbmRleCAmJiBwYXJlbnQuY2hp
bGROb2Rlc1sgbm9kZUluZGV4IF07Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGls
ZSAoIChub2RlID0gKytub2RlSW5kZXggJiYgbm9kZSAmJiBub2RlWyBkaXIgXSB8fAotCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZhbGxiYWNrIHRvIHNlZWtpbmcgYGVsZW1g
IGZyb20gdGhlIHN0YXJ0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkaWZmID0g
bm9kZUluZGV4ID0gMCkgfHwgc3RhcnQucG9wKCkpICkgewotCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIFdoZW4gZm91bmQsIGNhY2hlIGluZGV4ZXMgb24gYHBhcmVudGAgYW5k
IGJyZWFrCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbm9kZS5ub2RlVHlw
ZSA9PT0gMSAmJiArK2RpZmYgJiYgbm9kZSA9PT0gZWxlbSApIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVuaXF1ZUNhY2hlWyB0eXBlIF0gPSBbIGRpcnJ1bnMsIG5vZGVJ
bmRleCwgZGlmZiBdOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gVXNlIHByZXZpb3VzbHktY2FjaGVkIGVsZW1lbnQgaW5kZXgg
aWYgYXZhaWxhYmxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB1c2VDYWNoZSAp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gLi4uaW4gYSBnemlwLWZyaWVu
ZGx5IHdheQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlID0gZWxlbTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0ZXJDYWNoZSA9IG5vZGVbIGV4cGFuZG8g
XSB8fCAobm9kZVsgZXhwYW5kbyBdID0ge30pOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIFN1cHBvcnQ6IElFIDw5IG9ubHkKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gRGVmZW5kIGFnYWluc3QgY2xvbmVkIGF0dHJvcGVydGllcyAoalF1ZXJ5IGdoLTE3
MDkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXF1ZUNhY2hlID0gb3V0ZXJD
YWNoZVsgbm9kZS51bmlxdWVJRCBdIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAob3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdID0ge30pOwotCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNhY2hlID0gdW5pcXVlQ2FjaGVbIHR5cGUgXSB8fCBbXTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4ID0gY2FjaGVbIDAgXSA9PT0g
ZGlycnVucyAmJiBjYWNoZVsgMSBdOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
aWZmID0gbm9kZUluZGV4OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIHhtbCA6bnRoLWNoaWxkKC4uLikKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBvciA6bnRoLWxhc3QtY2hpbGQoLi4uKSBvciA6bnRoKC1sYXN0
KT8tb2YtdHlwZSguLi4pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBkaWZmID09
PSBmYWxzZSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVXNlIHRoZSBz
YW1lIGxvb3AgYXMgYWJvdmUgdG8gc2VlayBgZWxlbWAgZnJvbSB0aGUgc3RhcnQKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCAobm9kZSA9ICsrbm9kZUluZGV4ICYmIG5v
ZGUgJiYgbm9kZVsgZGlyIF0gfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IChkaWZmID0gbm9kZUluZGV4ID0gMCkgfHwgc3RhcnQucG9wKCkpICkgewotCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICggb2ZUeXBlID8KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09
IG5hbWUgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUubm9k
ZVR5cGUgPT09IDEgKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICsrZGlmZiApIHsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IENhY2hlIHRoZSBpbmRleCBvZiBlYWNoIGVuY291bnRlcmVkIGVsZW1lbnQKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHVzZUNhY2hlICkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRlckNhY2hlID0gbm9kZVsgZXhw
YW5kbyBdIHx8IChub2RlWyBleHBhbmRvIF0gPSB7fSk7Ci0KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3VwcG9ydDogSUUgPDkgb25seQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWZlbmQgYWdhaW5zdCBjbG9u
ZWQgYXR0cm9wZXJ0aWVzIChqUXVlcnkgZ2gtMTcwOSkKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdW5pcXVlQ2FjaGUgPSBvdXRlckNhY2hlWyBub2RlLnVuaXF1
ZUlEIF0gfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IChvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gPSB7fSk7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pcXVlQ2FjaGVbIHR5cGUgXSA9IFsgZGlycnVu
cywgZGlmZiBdOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbm9kZSA9PT0gZWxl
bSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBJbmNvcnBvcmF0ZSB0aGUgb2Zmc2V0
LCB0aGVuIGNoZWNrIGFnYWluc3QgY3ljbGUgc2l6ZQotICAgICAgICAgICAgICAgICAgICAgICAg
ZGlmZiAtPSBsYXN0OwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRpZmYgPT09IGZp
cnN0IHx8ICggZGlmZiAlIGZpcnN0ID09PSAwICYmIGRpZmYgLyBmaXJzdCA+PSAwICk7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9OwotICAgICAgICB9LAotCi0gICAg
ICAgICJQU0VVRE8iOiBmdW5jdGlvbiggcHNldWRvLCBhcmd1bWVudCApIHsKLSAgICAgICAgICAg
IC8vIHBzZXVkby1jbGFzcyBuYW1lcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZQotICAgICAgICAgICAg
Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNwc2V1ZG8tY2xhc3NlcwotICAgICAg
ICAgICAgLy8gUHJpb3JpdGl6ZSBieSBjYXNlIHNlbnNpdGl2aXR5IGluIGNhc2UgY3VzdG9tIHBz
ZXVkb3MgYXJlIGFkZGVkIHdpdGggdXBwZXJjYXNlIGxldHRlcnMKLSAgICAgICAgICAgIC8vIFJl
bWVtYmVyIHRoYXQgc2V0RmlsdGVycyBpbmhlcml0cyBmcm9tIHBzZXVkb3MKLSAgICAgICAgICAg
IHZhciBhcmdzLAotICAgICAgICAgICAgICAgIGZuID0gRXhwci5wc2V1ZG9zWyBwc2V1ZG8gXSB8
fCBFeHByLnNldEZpbHRlcnNbIHBzZXVkby50b0xvd2VyQ2FzZSgpIF0gfHwKLSAgICAgICAgICAg
ICAgICAgICAgU2l6emxlLmVycm9yKCAidW5zdXBwb3J0ZWQgcHNldWRvOiAiICsgcHNldWRvICk7
Ci0KLSAgICAgICAgICAgIC8vIFRoZSB1c2VyIG1heSB1c2UgY3JlYXRlUHNldWRvIHRvIGluZGlj
YXRlIHRoYXQKLSAgICAgICAgICAgIC8vIGFyZ3VtZW50cyBhcmUgbmVlZGVkIHRvIGNyZWF0ZSB0
aGUgZmlsdGVyIGZ1bmN0aW9uCi0gICAgICAgICAgICAvLyBqdXN0IGFzIFNpenpsZSBkb2VzCi0g
ICAgICAgICAgICBpZiAoIGZuWyBleHBhbmRvIF0gKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGZuKCBhcmd1bWVudCApOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBCdXQgbWFp
bnRhaW4gc3VwcG9ydCBmb3Igb2xkIHNpZ25hdHVyZXMKLSAgICAgICAgICAgIGlmICggZm4ubGVu
Z3RoID4gMSApIHsKLSAgICAgICAgICAgICAgICBhcmdzID0gWyBwc2V1ZG8sIHBzZXVkbywgIiIs
IGFyZ3VtZW50IF07Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEV4cHIuc2V0RmlsdGVycy5oYXNP
d25Qcm9wZXJ0eSggcHNldWRvLnRvTG93ZXJDYXNlKCkgKSA/Ci0gICAgICAgICAgICAgICAgICAg
IG1hcmtGdW5jdGlvbihmdW5jdGlvbiggc2VlZCwgbWF0Y2hlcyApIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHZhciBpZHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlZCA9
IGZuKCBzZWVkLCBhcmd1bWVudCApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBt
YXRjaGVkLmxlbmd0aDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICggaS0tICkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkeCA9IGluZGV4T2YoIHNlZWQsIG1hdGNoZWRb
aV0gKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWVkWyBpZHggXSA9ICEoIG1hdGNo
ZXNbIGlkeCBdID0gbWF0Y2hlZFtpXSApOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICB9KSA6Ci0gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCBlbGVt
ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZuKCBlbGVtLCAwLCBhcmdzICk7
Ci0gICAgICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJl
dHVybiBmbjsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICBwc2V1ZG9zOiB7Ci0gICAgICAgIC8v
IFBvdGVudGlhbGx5IGNvbXBsZXggcHNldWRvcwotICAgICAgICAibm90IjogbWFya0Z1bmN0aW9u
KGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKLSAgICAgICAgICAgIC8vIFRyaW0gdGhlIHNlbGVjdG9y
IHBhc3NlZCB0byBjb21waWxlCi0gICAgICAgICAgICAvLyB0byBhdm9pZCB0cmVhdGluZyBsZWFk
aW5nIGFuZCB0cmFpbGluZwotICAgICAgICAgICAgLy8gc3BhY2VzIGFzIGNvbWJpbmF0b3JzCi0g
ICAgICAgICAgICB2YXIgaW5wdXQgPSBbXSwKLSAgICAgICAgICAgICAgICByZXN1bHRzID0gW10s
Ci0gICAgICAgICAgICAgICAgbWF0Y2hlciA9IGNvbXBpbGUoIHNlbGVjdG9yLnJlcGxhY2UoIHJ0
cmltLCAiJDEiICkgKTsKLQotICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXJbIGV4cGFuZG8gXSA/
Ci0gICAgICAgICAgICAgICAgbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWVkLCBtYXRjaGVzLCBj
b250ZXh0LCB4bWwgKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBlbGVtLAotICAgICAgICAg
ICAgICAgICAgICAgICAgdW5tYXRjaGVkID0gbWF0Y2hlciggc2VlZCwgbnVsbCwgeG1sLCBbXSAp
LAotICAgICAgICAgICAgICAgICAgICAgICAgaSA9IHNlZWQubGVuZ3RoOwotCi0gICAgICAgICAg
ICAgICAgICAgIC8vIE1hdGNoIGVsZW1lbnRzIHVubWF0Y2hlZCBieSBgbWF0Y2hlcmAKLSAgICAg
ICAgICAgICAgICAgICAgd2hpbGUgKCBpLS0gKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIChlbGVtID0gdW5tYXRjaGVkW2ldKSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzZWVkW2ldID0gIShtYXRjaGVzW2ldID0gZWxlbSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9KSA6Ci0gICAgICAg
ICAgICAgICAgZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHsKLSAgICAgICAgICAgICAg
ICAgICAgaW5wdXRbMF0gPSBlbGVtOwotICAgICAgICAgICAgICAgICAgICBtYXRjaGVyKCBpbnB1
dCwgbnVsbCwgeG1sLCByZXN1bHRzICk7Ci0gICAgICAgICAgICAgICAgICAgIC8vIERvbid0IGtl
ZXAgdGhlIGVsZW1lbnQgKGlzc3VlICMyOTkpCi0gICAgICAgICAgICAgICAgICAgIGlucHV0WzBd
ID0gbnVsbDsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFyZXN1bHRzLnBvcCgpOwotICAg
ICAgICAgICAgICAgIH07Ci0gICAgICAgIH0pLAotCi0gICAgICAgICJoYXMiOiBtYXJrRnVuY3Rp
b24oZnVuY3Rpb24oIHNlbGVjdG9yICkgewotICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCBl
bGVtICkgewotICAgICAgICAgICAgICAgIHJldHVybiBTaXp6bGUoIHNlbGVjdG9yLCBlbGVtICku
bGVuZ3RoID4gMDsKLSAgICAgICAgICAgIH07Ci0gICAgICAgIH0pLAotCi0gICAgICAgICJjb250
YWlucyI6IG1hcmtGdW5jdGlvbihmdW5jdGlvbiggdGV4dCApIHsKLSAgICAgICAgICAgIHRleHQg
PSB0ZXh0LnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7Ci0gICAgICAgICAgICByZXR1
cm4gZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICggZWxlbS50ZXh0
Q29udGVudCB8fCBlbGVtLmlubmVyVGV4dCB8fCBnZXRUZXh0KCBlbGVtICkgKS5pbmRleE9mKCB0
ZXh0ICkgPiAtMTsKLSAgICAgICAgICAgIH07Ci0gICAgICAgIH0pLAotCi0gICAgICAgIC8vICJX
aGV0aGVyIGFuIGVsZW1lbnQgaXMgcmVwcmVzZW50ZWQgYnkgYSA6bGFuZygpIHNlbGVjdG9yCi0g
ICAgICAgIC8vIGlzIGJhc2VkIHNvbGVseSBvbiB0aGUgZWxlbWVudCdzIGxhbmd1YWdlIHZhbHVl
Ci0gICAgICAgIC8vIGJlaW5nIGVxdWFsIHRvIHRoZSBpZGVudGlmaWVyIEMsCi0gICAgICAgIC8v
IG9yIGJlZ2lubmluZyB3aXRoIHRoZSBpZGVudGlmaWVyIEMgaW1tZWRpYXRlbHkgZm9sbG93ZWQg
YnkgIi0iLgotICAgICAgICAvLyBUaGUgbWF0Y2hpbmcgb2YgQyBhZ2FpbnN0IHRoZSBlbGVtZW50
J3MgbGFuZ3VhZ2UgdmFsdWUgaXMgcGVyZm9ybWVkIGNhc2UtaW5zZW5zaXRpdmVseS4KLSAgICAg
ICAgLy8gVGhlIGlkZW50aWZpZXIgQyBkb2VzIG5vdCBoYXZlIHRvIGJlIGEgdmFsaWQgbGFuZ3Vh
Z2UgbmFtZS4iCi0gICAgICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jbGFu
Zy1wc2V1ZG8KLSAgICAgICAgImxhbmciOiBtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCBsYW5nICkg
ewotICAgICAgICAgICAgLy8gbGFuZyB2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgaWRlbnRpZmllcgot
ICAgICAgICAgICAgaWYgKCAhcmlkZW50aWZpZXIudGVzdChsYW5nIHx8ICIiKSApIHsKLSAgICAg
ICAgICAgICAgICBTaXp6bGUuZXJyb3IoICJ1bnN1cHBvcnRlZCBsYW5nOiAiICsgbGFuZyApOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgbGFuZyA9IGxhbmcucmVwbGFjZSggcnVuZXNjYXBl
LCBmdW5lc2NhcGUgKS50b0xvd2VyQ2FzZSgpOwotICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9u
KCBlbGVtICkgewotICAgICAgICAgICAgICAgIHZhciBlbGVtTGFuZzsKLSAgICAgICAgICAgICAg
ICBkbyB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICggKGVsZW1MYW5nID0gZG9jdW1lbnRJc0hU
TUwgPwotICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5sYW5nIDoKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGVsZW0uZ2V0QXR0cmlidXRlKCJ4bWw6bGFuZyIpIHx8IGVsZW0uZ2V0QXR0cmli
dXRlKCJsYW5nIikpICkgewotCi0gICAgICAgICAgICAgICAgICAgICAgICBlbGVtTGFuZyA9IGVs
ZW1MYW5nLnRvTG93ZXJDYXNlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxl
bUxhbmcgPT09IGxhbmcgfHwgZWxlbUxhbmcuaW5kZXhPZiggbGFuZyArICItIiApID09PSAwOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSB3aGlsZSAoIChlbGVtID0g
ZWxlbS5wYXJlbnROb2RlKSAmJiBlbGVtLm5vZGVUeXBlID09PSAxICk7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfTsKLSAgICAgICAgfSksCi0KLSAgICAgICAg
Ly8gTWlzY2VsbGFuZW91cwotICAgICAgICAidGFyZ2V0IjogZnVuY3Rpb24oIGVsZW0gKSB7Ci0g
ICAgICAgICAgICB2YXIgaGFzaCA9IHdpbmRvdy5sb2NhdGlvbiAmJiB3aW5kb3cubG9jYXRpb24u
aGFzaDsKLSAgICAgICAgICAgIHJldHVybiBoYXNoICYmIGhhc2guc2xpY2UoIDEgKSA9PT0gZWxl
bS5pZDsKLSAgICAgICAgfSwKLQotICAgICAgICAicm9vdCI6IGZ1bmN0aW9uKCBlbGVtICkgewot
ICAgICAgICAgICAgcmV0dXJuIGVsZW0gPT09IGRvY0VsZW07Ci0gICAgICAgIH0sCi0KLSAgICAg
ICAgImZvY3VzIjogZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgICAgICAgICByZXR1cm4gZWxlbSA9
PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAmJiAoIWRvY3VtZW50Lmhhc0ZvY3VzIHx8IGRvY3Vt
ZW50Lmhhc0ZvY3VzKCkpICYmICEhKGVsZW0udHlwZSB8fCBlbGVtLmhyZWYgfHwgfmVsZW0udGFi
SW5kZXgpOwotICAgICAgICB9LAotCi0gICAgICAgIC8vIEJvb2xlYW4gcHJvcGVydGllcwotICAg
ICAgICAiZW5hYmxlZCI6IGZ1bmN0aW9uKCBlbGVtICkgewotICAgICAgICAgICAgcmV0dXJuIGVs
ZW0uZGlzYWJsZWQgPT09IGZhbHNlOwotICAgICAgICB9LAotCi0gICAgICAgICJkaXNhYmxlZCI6
IGZ1bmN0aW9uKCBlbGVtICkgewotICAgICAgICAgICAgcmV0dXJuIGVsZW0uZGlzYWJsZWQgPT09
IHRydWU7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgImNoZWNrZWQiOiBmdW5jdGlvbiggZWxlbSAp
IHsKLSAgICAgICAgICAgIC8vIEluIENTUzMsIDpjaGVja2VkIHNob3VsZCByZXR1cm4gYm90aCBj
aGVja2VkIGFuZCBzZWxlY3RlZCBlbGVtZW50cwotICAgICAgICAgICAgLy8gaHR0cDovL3d3dy53
My5vcmcvVFIvMjAxMS9SRUMtY3NzMy1zZWxlY3RvcnMtMjAxMTA5MjkvI2NoZWNrZWQKLSAgICAg
ICAgICAgIHZhciBub2RlTmFtZSA9IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTsKLSAgICAg
ICAgICAgIHJldHVybiAobm9kZU5hbWUgPT09ICJpbnB1dCIgJiYgISFlbGVtLmNoZWNrZWQpIHx8
IChub2RlTmFtZSA9PT0gIm9wdGlvbiIgJiYgISFlbGVtLnNlbGVjdGVkKTsKLSAgICAgICAgfSwK
LQotICAgICAgICAic2VsZWN0ZWQiOiBmdW5jdGlvbiggZWxlbSApIHsKLSAgICAgICAgICAgIC8v
IEFjY2Vzc2luZyB0aGlzIHByb3BlcnR5IG1ha2VzIHNlbGVjdGVkLWJ5LWRlZmF1bHQKLSAgICAg
ICAgICAgIC8vIG9wdGlvbnMgaW4gU2FmYXJpIHdvcmsgcHJvcGVybHkKLSAgICAgICAgICAgIGlm
ICggZWxlbS5wYXJlbnROb2RlICkgewotICAgICAgICAgICAgICAgIGVsZW0ucGFyZW50Tm9kZS5z
ZWxlY3RlZEluZGV4OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gZWxlbS5z
ZWxlY3RlZCA9PT0gdHJ1ZTsKLSAgICAgICAgfSwKLQotICAgICAgICAvLyBDb250ZW50cwotICAg
ICAgICAiZW1wdHkiOiBmdW5jdGlvbiggZWxlbSApIHsKLSAgICAgICAgICAgIC8vIGh0dHA6Ly93
d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jZW1wdHktcHNldWRvCi0gICAgICAgICAgICAvLyA6ZW1w
dHkgaXMgbmVnYXRlZCBieSBlbGVtZW50ICgxKSBvciBjb250ZW50IG5vZGVzICh0ZXh0OiAzOyBj
ZGF0YTogNDsgZW50aXR5IHJlZjogNSksCi0gICAgICAgICAgICAvLyAgIGJ1dCBub3QgYnkgb3Ro
ZXJzIChjb21tZW50OiA4OyBwcm9jZXNzaW5nIGluc3RydWN0aW9uOiA3OyBldGMuKQotICAgICAg
ICAgICAgLy8gbm9kZVR5cGUgPCA2IHdvcmtzIGJlY2F1c2UgYXR0cmlidXRlcyAoMikgZG8gbm90
IGFwcGVhciBhcyBjaGlsZHJlbgotICAgICAgICAgICAgZm9yICggZWxlbSA9IGVsZW0uZmlyc3RD
aGlsZDsgZWxlbTsgZWxlbSA9IGVsZW0ubmV4dFNpYmxpbmcgKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKCBlbGVtLm5vZGVUeXBlIDwgNiApIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICB9LAotCi0gICAgICAgICJwYXJlbnQiOiBmdW5jdGlvbiggZWxlbSAp
IHsKLSAgICAgICAgICAgIHJldHVybiAhRXhwci5wc2V1ZG9zWyJlbXB0eSJdKCBlbGVtICk7Ci0g
ICAgICAgIH0sCi0KLSAgICAgICAgLy8gRWxlbWVudC9pbnB1dCB0eXBlcwotICAgICAgICAiaGVh
ZGVyIjogZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgICAgICAgICByZXR1cm4gcmhlYWRlci50ZXN0
KCBlbGVtLm5vZGVOYW1lICk7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgImlucHV0IjogZnVuY3Rp
b24oIGVsZW0gKSB7Ci0gICAgICAgICAgICByZXR1cm4gcmlucHV0cy50ZXN0KCBlbGVtLm5vZGVO
YW1lICk7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgImJ1dHRvbiI6IGZ1bmN0aW9uKCBlbGVtICkg
ewotICAgICAgICAgICAgdmFyIG5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7Ci0g
ICAgICAgICAgICByZXR1cm4gbmFtZSA9PT0gImlucHV0IiAmJiBlbGVtLnR5cGUgPT09ICJidXR0
b24iIHx8IG5hbWUgPT09ICJidXR0b24iOwotICAgICAgICB9LAotCi0gICAgICAgICJ0ZXh0Ijog
ZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgICAgICAgICB2YXIgYXR0cjsKLSAgICAgICAgICAgIHJl
dHVybiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICJpbnB1dCIgJiYKLSAgICAgICAg
ICAgICAgICBlbGVtLnR5cGUgPT09ICJ0ZXh0IiAmJgotCi0gICAgICAgICAgICAgICAgLy8gU3Vw
cG9ydDogSUU8OAotICAgICAgICAgICAgICAgIC8vIE5ldyBIVE1MNSBhdHRyaWJ1dGUgdmFsdWVz
IChlLmcuLCAic2VhcmNoIikgYXBwZWFyIHdpdGggZWxlbS50eXBlID09PSAidGV4dCIKLSAgICAg
ICAgICAgICAgICAoIChhdHRyID0gZWxlbS5nZXRBdHRyaWJ1dGUoInR5cGUiKSkgPT0gbnVsbCB8
fCBhdHRyLnRvTG93ZXJDYXNlKCkgPT09ICJ0ZXh0IiApOwotICAgICAgICB9LAotCi0gICAgICAg
IC8vIFBvc2l0aW9uLWluLWNvbGxlY3Rpb24KLSAgICAgICAgImZpcnN0IjogY3JlYXRlUG9zaXRp
b25hbFBzZXVkbyhmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIHJldHVybiBbIDAgXTsKLSAgICAg
ICAgfSksCi0KLSAgICAgICAgImxhc3QiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9u
KCBtYXRjaEluZGV4ZXMsIGxlbmd0aCApIHsKLSAgICAgICAgICAgIHJldHVybiBbIGxlbmd0aCAt
IDEgXTsKLSAgICAgICAgfSksCi0KLSAgICAgICAgImVxIjogY3JlYXRlUG9zaXRpb25hbFBzZXVk
byhmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGgsIGFyZ3VtZW50ICkgewotICAgICAgICAg
ICAgcmV0dXJuIFsgYXJndW1lbnQgPCAwID8gYXJndW1lbnQgKyBsZW5ndGggOiBhcmd1bWVudCBd
OwotICAgICAgICB9KSwKLQotICAgICAgICAiZXZlbiI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8o
ZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoICkgewotICAgICAgICAgICAgdmFyIGkgPSAw
OwotICAgICAgICAgICAgZm9yICggOyBpIDwgbGVuZ3RoOyBpICs9IDIgKSB7Ci0gICAgICAgICAg
ICAgICAgbWF0Y2hJbmRleGVzLnB1c2goIGkgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IHJldHVybiBtYXRjaEluZGV4ZXM7Ci0gICAgICAgIH0pLAotCi0gICAgICAgICJvZGQiOiBjcmVh
dGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCApIHsKLSAg
ICAgICAgICAgIHZhciBpID0gMTsKLSAgICAgICAgICAgIGZvciAoIDsgaSA8IGxlbmd0aDsgaSAr
PSAyICkgewotICAgICAgICAgICAgICAgIG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gbWF0Y2hJbmRleGVzOwotICAgICAgICB9KSwKLQot
ICAgICAgICAibHQiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4
ZXMsIGxlbmd0aCwgYXJndW1lbnQgKSB7Ci0gICAgICAgICAgICB2YXIgaSA9IGFyZ3VtZW50IDwg
MCA/IGFyZ3VtZW50ICsgbGVuZ3RoIDogYXJndW1lbnQ7Ci0gICAgICAgICAgICBmb3IgKCA7IC0t
aSA+PSAwOyApIHsKLSAgICAgICAgICAgICAgICBtYXRjaEluZGV4ZXMucHVzaCggaSApOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIG1hdGNoSW5kZXhlczsKLSAgICAgICAgfSks
Ci0KLSAgICAgICAgImd0IjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJ
bmRleGVzLCBsZW5ndGgsIGFyZ3VtZW50ICkgewotICAgICAgICAgICAgdmFyIGkgPSBhcmd1bWVu
dCA8IDAgPyBhcmd1bWVudCArIGxlbmd0aCA6IGFyZ3VtZW50OwotICAgICAgICAgICAgZm9yICgg
OyArK2kgPCBsZW5ndGg7ICkgewotICAgICAgICAgICAgICAgIG1hdGNoSW5kZXhlcy5wdXNoKCBp
ICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gbWF0Y2hJbmRleGVzOwotICAg
ICAgICB9KQotICAgIH0KLX07Ci0KLUV4cHIucHNldWRvc1sibnRoIl0gPSBFeHByLnBzZXVkb3Nb
ImVxIl07Ci0KLS8vIEFkZCBidXR0b24vaW5wdXQgdHlwZSBwc2V1ZG9zCi1mb3IgKCBpIGluIHsg
cmFkaW86IHRydWUsIGNoZWNrYm94OiB0cnVlLCBmaWxlOiB0cnVlLCBwYXNzd29yZDogdHJ1ZSwg
aW1hZ2U6IHRydWUgfSApIHsKLSAgICBFeHByLnBzZXVkb3NbIGkgXSA9IGNyZWF0ZUlucHV0UHNl
dWRvKCBpICk7Ci19Ci1mb3IgKCBpIGluIHsgc3VibWl0OiB0cnVlLCByZXNldDogdHJ1ZSB9ICkg
ewotICAgIEV4cHIucHNldWRvc1sgaSBdID0gY3JlYXRlQnV0dG9uUHNldWRvKCBpICk7Ci19Ci0K
LS8vIEVhc3kgQVBJIGZvciBjcmVhdGluZyBuZXcgc2V0RmlsdGVycwotZnVuY3Rpb24gc2V0Rmls
dGVycygpIHt9Ci1zZXRGaWx0ZXJzLnByb3RvdHlwZSA9IEV4cHIuZmlsdGVycyA9IEV4cHIucHNl
dWRvczsKLUV4cHIuc2V0RmlsdGVycyA9IG5ldyBzZXRGaWx0ZXJzKCk7Ci0KLXRva2VuaXplID0g
U2l6emxlLnRva2VuaXplID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBwYXJzZU9ubHkgKSB7Ci0gICAg
dmFyIG1hdGNoZWQsIG1hdGNoLCB0b2tlbnMsIHR5cGUsCi0gICAgICAgIHNvRmFyLCBncm91cHMs
IHByZUZpbHRlcnMsCi0gICAgICAgIGNhY2hlZCA9IHRva2VuQ2FjaGVbIHNlbGVjdG9yICsgIiAi
IF07Ci0KLSAgICBpZiAoIGNhY2hlZCApIHsKLSAgICAgICAgcmV0dXJuIHBhcnNlT25seSA/IDAg
OiBjYWNoZWQuc2xpY2UoIDAgKTsKLSAgICB9Ci0KLSAgICBzb0ZhciA9IHNlbGVjdG9yOwotICAg
IGdyb3VwcyA9IFtdOwotICAgIHByZUZpbHRlcnMgPSBFeHByLnByZUZpbHRlcjsKLQotICAgIHdo
aWxlICggc29GYXIgKSB7Ci0KLSAgICAgICAgLy8gQ29tbWEgYW5kIGZpcnN0IHJ1bgotICAgICAg
ICBpZiAoICFtYXRjaGVkIHx8IChtYXRjaCA9IHJjb21tYS5leGVjKCBzb0ZhciApKSApIHsKLSAg
ICAgICAgICAgIGlmICggbWF0Y2ggKSB7Ci0gICAgICAgICAgICAgICAgLy8gRG9uJ3QgY29uc3Vt
ZSB0cmFpbGluZyBjb21tYXMgYXMgdmFsaWQKLSAgICAgICAgICAgICAgICBzb0ZhciA9IHNvRmFy
LnNsaWNlKCBtYXRjaFswXS5sZW5ndGggKSB8fCBzb0ZhcjsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGdyb3Vwcy5wdXNoKCAodG9rZW5zID0gW10pICk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBtYXRjaGVkID0gZmFsc2U7Ci0KLSAgICAgICAgLy8gQ29tYmluYXRvcnMKLSAgICAgICAgaWYg
KCAobWF0Y2ggPSByY29tYmluYXRvcnMuZXhlYyggc29GYXIgKSkgKSB7Ci0gICAgICAgICAgICBt
YXRjaGVkID0gbWF0Y2guc2hpZnQoKTsKLSAgICAgICAgICAgIHRva2Vucy5wdXNoKHsKLSAgICAg
ICAgICAgICAgICB2YWx1ZTogbWF0Y2hlZCwKLSAgICAgICAgICAgICAgICAvLyBDYXN0IGRlc2Nl
bmRhbnQgY29tYmluYXRvcnMgdG8gc3BhY2UKLSAgICAgICAgICAgICAgICB0eXBlOiBtYXRjaFsw
XS5yZXBsYWNlKCBydHJpbSwgIiAiICkKLSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgc29G
YXIgPSBzb0Zhci5zbGljZSggbWF0Y2hlZC5sZW5ndGggKTsKLSAgICAgICAgfQotCi0gICAgICAg
IC8vIEZpbHRlcnMKLSAgICAgICAgZm9yICggdHlwZSBpbiBFeHByLmZpbHRlciApIHsKLSAgICAg
ICAgICAgIGlmICggKG1hdGNoID0gbWF0Y2hFeHByWyB0eXBlIF0uZXhlYyggc29GYXIgKSkgJiYg
KCFwcmVGaWx0ZXJzWyB0eXBlIF0gfHwKLSAgICAgICAgICAgICAgICAobWF0Y2ggPSBwcmVGaWx0
ZXJzWyB0eXBlIF0oIG1hdGNoICkpKSApIHsKLSAgICAgICAgICAgICAgICBtYXRjaGVkID0gbWF0
Y2guc2hpZnQoKTsKLSAgICAgICAgICAgICAgICB0b2tlbnMucHVzaCh7Ci0gICAgICAgICAgICAg
ICAgICAgIHZhbHVlOiBtYXRjaGVkLAotICAgICAgICAgICAgICAgICAgICB0eXBlOiB0eXBlLAot
ICAgICAgICAgICAgICAgICAgICBtYXRjaGVzOiBtYXRjaAotICAgICAgICAgICAgICAgIH0pOwot
ICAgICAgICAgICAgICAgIHNvRmFyID0gc29GYXIuc2xpY2UoIG1hdGNoZWQubGVuZ3RoICk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoICFtYXRjaGVkICkgewotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gdGhlIGxl
bmd0aCBvZiB0aGUgaW52YWxpZCBleGNlc3MKLSAgICAvLyBpZiB3ZSdyZSBqdXN0IHBhcnNpbmcK
LSAgICAvLyBPdGhlcndpc2UsIHRocm93IGFuIGVycm9yIG9yIHJldHVybiB0b2tlbnMKLSAgICBy
ZXR1cm4gcGFyc2VPbmx5ID8KLSAgICAgICAgc29GYXIubGVuZ3RoIDoKLSAgICAgICAgc29GYXIg
PwotICAgICAgICAgICAgU2l6emxlLmVycm9yKCBzZWxlY3RvciApIDoKLSAgICAgICAgICAgIC8v
IENhY2hlIHRoZSB0b2tlbnMKLSAgICAgICAgICAgIHRva2VuQ2FjaGUoIHNlbGVjdG9yLCBncm91
cHMgKS5zbGljZSggMCApOwotfTsKLQotZnVuY3Rpb24gdG9TZWxlY3RvciggdG9rZW5zICkgewot
ICAgIHZhciBpID0gMCwKLSAgICAgICAgbGVuID0gdG9rZW5zLmxlbmd0aCwKLSAgICAgICAgc2Vs
ZWN0b3IgPSAiIjsKLSAgICBmb3IgKCA7IGkgPCBsZW47IGkrKyApIHsKLSAgICAgICAgc2VsZWN0
b3IgKz0gdG9rZW5zW2ldLnZhbHVlOwotICAgIH0KLSAgICByZXR1cm4gc2VsZWN0b3I7Ci19Ci0K
LWZ1bmN0aW9uIGFkZENvbWJpbmF0b3IoIG1hdGNoZXIsIGNvbWJpbmF0b3IsIGJhc2UgKSB7Ci0g
ICAgdmFyIGRpciA9IGNvbWJpbmF0b3IuZGlyLAotICAgICAgICBjaGVja05vbkVsZW1lbnRzID0g
YmFzZSAmJiBkaXIgPT09ICJwYXJlbnROb2RlIiwKLSAgICAgICAgZG9uZU5hbWUgPSBkb25lKys7
Ci0KLSAgICByZXR1cm4gY29tYmluYXRvci5maXJzdCA/Ci0gICAgICAgIC8vIENoZWNrIGFnYWlu
c3QgY2xvc2VzdCBhbmNlc3Rvci9wcmVjZWRpbmcgZWxlbWVudAotICAgICAgICBmdW5jdGlvbigg
ZWxlbSwgY29udGV4dCwgeG1sICkgewotICAgICAgICAgICAgd2hpbGUgKCAoZWxlbSA9IGVsZW1b
IGRpciBdKSApIHsKLSAgICAgICAgICAgICAgICBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgfHwg
Y2hlY2tOb25FbGVtZW50cyApIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXIo
IGVsZW0sIGNvbnRleHQsIHhtbCApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LSAgICAgICAgfSA6Ci0KLSAgICAgICAgLy8gQ2hlY2sgYWdhaW5zdCBhbGwgYW5jZXN0b3IvcHJl
Y2VkaW5nIGVsZW1lbnRzCi0gICAgICAgIGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7
Ci0gICAgICAgICAgICB2YXIgb2xkQ2FjaGUsIHVuaXF1ZUNhY2hlLCBvdXRlckNhY2hlLAotICAg
ICAgICAgICAgICAgIG5ld0NhY2hlID0gWyBkaXJydW5zLCBkb25lTmFtZSBdOwotCi0gICAgICAg
ICAgICAvLyBXZSBjYW4ndCBzZXQgYXJiaXRyYXJ5IGRhdGEgb24gWE1MIG5vZGVzLCBzbyB0aGV5
IGRvbid0IGJlbmVmaXQgZnJvbSBjb21iaW5hdG9yIGNhY2hpbmcKLSAgICAgICAgICAgIGlmICgg
eG1sICkgewotICAgICAgICAgICAgICAgIHdoaWxlICggKGVsZW0gPSBlbGVtWyBkaXIgXSkgKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBjaGVja05v
bkVsZW1lbnRzICkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBtYXRjaGVyKCBlbGVt
LCBjb250ZXh0LCB4bWwgKSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
d2hpbGUgKCAoZWxlbSA9IGVsZW1bIGRpciBdKSApIHsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KCBlbGVtLm5vZGVUeXBlID09PSAxIHx8IGNoZWNrTm9uRWxlbWVudHMgKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBvdXRlckNhY2hlID0gZWxlbVsgZXhwYW5kbyBdIHx8IChlbGVtWyBleHBh
bmRvIF0gPSB7fSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQ6IElFIDw5
IG9ubHkKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIERlZmVuZCBhZ2FpbnN0IGNsb25lZCBh
dHRyb3BlcnRpZXMgKGpRdWVyeSBnaC0xNzA5KQotICAgICAgICAgICAgICAgICAgICAgICAgdW5p
cXVlQ2FjaGUgPSBvdXRlckNhY2hlWyBlbGVtLnVuaXF1ZUlEIF0gfHwgKG91dGVyQ2FjaGVbIGVs
ZW0udW5pcXVlSUQgXSA9IHt9KTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAob2xk
Q2FjaGUgPSB1bmlxdWVDYWNoZVsgZGlyIF0pICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgb2xkQ2FjaGVbIDAgXSA9PT0gZGlycnVucyAmJiBvbGRDYWNoZVsgMSBdID09PSBkb25lTmFt
ZSApIHsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFzc2lnbiB0byBuZXdDYWNo
ZSBzbyByZXN1bHRzIGJhY2stcHJvcGFnYXRlIHRvIHByZXZpb3VzIGVsZW1lbnRzCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChuZXdDYWNoZVsgMiBdID0gb2xkQ2FjaGVbIDIg
XSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFJldXNlIG5ld2NhY2hlIHNvIHJlc3VsdHMgYmFjay1wcm9wYWdhdGUgdG8g
cHJldmlvdXMgZWxlbWVudHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmlxdWVDYWNo
ZVsgZGlyIF0gPSBuZXdDYWNoZTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEEg
bWF0Y2ggbWVhbnMgd2UncmUgZG9uZTsgYSBmYWlsIG1lYW5zIHdlIGhhdmUgdG8ga2VlcCBjaGVj
a2luZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggKG5ld0NhY2hlWyAyIF0gPSBt
YXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKSkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLX0KLQotZnVuY3Rpb24gZWxlbWVu
dE1hdGNoZXIoIG1hdGNoZXJzICkgewotICAgIHJldHVybiBtYXRjaGVycy5sZW5ndGggPiAxID8K
LSAgICAgICAgZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHsKLSAgICAgICAgICAgIHZh
ciBpID0gbWF0Y2hlcnMubGVuZ3RoOwotICAgICAgICAgICAgd2hpbGUgKCBpLS0gKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKCAhbWF0Y2hlcnNbaV0oIGVsZW0sIGNvbnRleHQsIHhtbCApICkgewot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0gOgotICAgICAg
ICBtYXRjaGVyc1swXTsKLX0KLQotZnVuY3Rpb24gbXVsdGlwbGVDb250ZXh0cyggc2VsZWN0b3Is
IGNvbnRleHRzLCByZXN1bHRzICkgewotICAgIHZhciBpID0gMCwKLSAgICAgICAgbGVuID0gY29u
dGV4dHMubGVuZ3RoOwotICAgIGZvciAoIDsgaSA8IGxlbjsgaSsrICkgewotICAgICAgICBTaXp6
bGUoIHNlbGVjdG9yLCBjb250ZXh0c1tpXSwgcmVzdWx0cyApOwotICAgIH0KLSAgICByZXR1cm4g
cmVzdWx0czsKLX0KLQotZnVuY3Rpb24gY29uZGVuc2UoIHVubWF0Y2hlZCwgbWFwLCBmaWx0ZXIs
IGNvbnRleHQsIHhtbCApIHsKLSAgICB2YXIgZWxlbSwKLSAgICAgICAgbmV3VW5tYXRjaGVkID0g
W10sCi0gICAgICAgIGkgPSAwLAotICAgICAgICBsZW4gPSB1bm1hdGNoZWQubGVuZ3RoLAotICAg
ICAgICBtYXBwZWQgPSBtYXAgIT0gbnVsbDsKLQotICAgIGZvciAoIDsgaSA8IGxlbjsgaSsrICkg
ewotICAgICAgICBpZiAoIChlbGVtID0gdW5tYXRjaGVkW2ldKSApIHsKLSAgICAgICAgICAgIGlm
ICggIWZpbHRlciB8fCBmaWx0ZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApICkgewotICAgICAgICAg
ICAgICAgIG5ld1VubWF0Y2hlZC5wdXNoKCBlbGVtICk7Ci0gICAgICAgICAgICAgICAgaWYgKCBt
YXBwZWQgKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1hcC5wdXNoKCBpICk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG5l
d1VubWF0Y2hlZDsKLX0KLQotZnVuY3Rpb24gc2V0TWF0Y2hlciggcHJlRmlsdGVyLCBzZWxlY3Rv
ciwgbWF0Y2hlciwgcG9zdEZpbHRlciwgcG9zdEZpbmRlciwgcG9zdFNlbGVjdG9yICkgewotICAg
IGlmICggcG9zdEZpbHRlciAmJiAhcG9zdEZpbHRlclsgZXhwYW5kbyBdICkgewotICAgICAgICBw
b3N0RmlsdGVyID0gc2V0TWF0Y2hlciggcG9zdEZpbHRlciApOwotICAgIH0KLSAgICBpZiAoIHBv
c3RGaW5kZXIgJiYgIXBvc3RGaW5kZXJbIGV4cGFuZG8gXSApIHsKLSAgICAgICAgcG9zdEZpbmRl
ciA9IHNldE1hdGNoZXIoIHBvc3RGaW5kZXIsIHBvc3RTZWxlY3RvciApOwotICAgIH0KLSAgICBy
ZXR1cm4gbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWVkLCByZXN1bHRzLCBjb250ZXh0LCB4bWwg
KSB7Ci0gICAgICAgIHZhciB0ZW1wLCBpLCBlbGVtLAotICAgICAgICAgICAgcHJlTWFwID0gW10s
Ci0gICAgICAgICAgICBwb3N0TWFwID0gW10sCi0gICAgICAgICAgICBwcmVleGlzdGluZyA9IHJl
c3VsdHMubGVuZ3RoLAotCi0gICAgICAgICAgICAvLyBHZXQgaW5pdGlhbCBlbGVtZW50cyBmcm9t
IHNlZWQgb3IgY29udGV4dAotICAgICAgICAgICAgZWxlbXMgPSBzZWVkIHx8IG11bHRpcGxlQ29u
dGV4dHMoIHNlbGVjdG9yIHx8ICIqIiwgY29udGV4dC5ub2RlVHlwZSA/IFsgY29udGV4dCBdIDog
Y29udGV4dCwgW10gKSwKLQotICAgICAgICAgICAgLy8gUHJlZmlsdGVyIHRvIGdldCBtYXRjaGVy
IGlucHV0LCBwcmVzZXJ2aW5nIGEgbWFwIGZvciBzZWVkLXJlc3VsdHMgc3luY2hyb25pemF0aW9u
Ci0gICAgICAgICAgICBtYXRjaGVySW4gPSBwcmVGaWx0ZXIgJiYgKCBzZWVkIHx8ICFzZWxlY3Rv
ciApID8KLSAgICAgICAgICAgICAgICBjb25kZW5zZSggZWxlbXMsIHByZU1hcCwgcHJlRmlsdGVy
LCBjb250ZXh0LCB4bWwgKSA6Ci0gICAgICAgICAgICAgICAgZWxlbXMsCi0KLSAgICAgICAgICAg
IG1hdGNoZXJPdXQgPSBtYXRjaGVyID8KLSAgICAgICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGEg
cG9zdEZpbmRlciwgb3IgZmlsdGVyZWQgc2VlZCwgb3Igbm9uLXNlZWQgcG9zdEZpbHRlciBvciBw
cmVleGlzdGluZyByZXN1bHRzLAotICAgICAgICAgICAgICAgIHBvc3RGaW5kZXIgfHwgKCBzZWVk
ID8gcHJlRmlsdGVyIDogcHJlZXhpc3RpbmcgfHwgcG9zdEZpbHRlciApID8KLQotICAgICAgICAg
ICAgICAgICAgICAvLyAuLi5pbnRlcm1lZGlhdGUgcHJvY2Vzc2luZyBpcyBuZWNlc3NhcnkKLSAg
ICAgICAgICAgICAgICAgICAgW10gOgotCi0gICAgICAgICAgICAgICAgICAgIC8vIC4uLm90aGVy
d2lzZSB1c2UgcmVzdWx0cyBkaXJlY3RseQotICAgICAgICAgICAgICAgICAgICByZXN1bHRzIDoK
LSAgICAgICAgICAgICAgICBtYXRjaGVySW47Ci0KLSAgICAgICAgLy8gRmluZCBwcmltYXJ5IG1h
dGNoZXMKLSAgICAgICAgaWYgKCBtYXRjaGVyICkgewotICAgICAgICAgICAgbWF0Y2hlciggbWF0
Y2hlckluLCBtYXRjaGVyT3V0LCBjb250ZXh0LCB4bWwgKTsKLSAgICAgICAgfQotCi0gICAgICAg
IC8vIEFwcGx5IHBvc3RGaWx0ZXIKLSAgICAgICAgaWYgKCBwb3N0RmlsdGVyICkgewotICAgICAg
ICAgICAgdGVtcCA9IGNvbmRlbnNlKCBtYXRjaGVyT3V0LCBwb3N0TWFwICk7Ci0gICAgICAgICAg
ICBwb3N0RmlsdGVyKCB0ZW1wLCBbXSwgY29udGV4dCwgeG1sICk7Ci0KLSAgICAgICAgICAgIC8v
IFVuLW1hdGNoIGZhaWxpbmcgZWxlbWVudHMgYnkgbW92aW5nIHRoZW0gYmFjayB0byBtYXRjaGVy
SW4KLSAgICAgICAgICAgIGkgPSB0ZW1wLmxlbmd0aDsKLSAgICAgICAgICAgIHdoaWxlICggaS0t
ICkgewotICAgICAgICAgICAgICAgIGlmICggKGVsZW0gPSB0ZW1wW2ldKSApIHsKLSAgICAgICAg
ICAgICAgICAgICAgbWF0Y2hlck91dFsgcG9zdE1hcFtpXSBdID0gIShtYXRjaGVySW5bIHBvc3RN
YXBbaV0gXSA9IGVsZW0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotCi0gICAgICAgIGlmICggc2VlZCApIHsKLSAgICAgICAgICAgIGlmICggcG9zdEZpbmRl
ciB8fCBwcmVGaWx0ZXIgKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCBwb3N0RmluZGVyICkgewot
ICAgICAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIGZpbmFsIG1hdGNoZXJPdXQgYnkgY29uZGVu
c2luZyB0aGlzIGludGVybWVkaWF0ZSBpbnRvIHBvc3RGaW5kZXIgY29udGV4dHMKLSAgICAgICAg
ICAgICAgICAgICAgdGVtcCA9IFtdOwotICAgICAgICAgICAgICAgICAgICBpID0gbWF0Y2hlck91
dC5sZW5ndGg7Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlICggaS0tICkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCAoZWxlbSA9IG1hdGNoZXJPdXRbaV0pICkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIFJlc3RvcmUgbWF0Y2hlckluIHNpbmNlIGVsZW0gaXMgbm90
IHlldCBhIGZpbmFsIG1hdGNoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcC5wdXNo
KCAobWF0Y2hlckluW2ldID0gZWxlbSkgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBwb3N0RmluZGVyKCBudWxs
LCAobWF0Y2hlck91dCA9IFtdKSwgdGVtcCwgeG1sICk7Ci0gICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgLy8gTW92ZSBtYXRjaGVkIGVsZW1lbnRzIGZyb20gc2VlZCB0byByZXN1
bHRzIHRvIGtlZXAgdGhlbSBzeW5jaHJvbml6ZWQKLSAgICAgICAgICAgICAgICBpID0gbWF0Y2hl
ck91dC5sZW5ndGg7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKCBpLS0gKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmICggKGVsZW0gPSBtYXRjaGVyT3V0W2ldKSAmJgotICAgICAgICAgICAgICAg
ICAgICAgICAgKHRlbXAgPSBwb3N0RmluZGVyID8gaW5kZXhPZiggc2VlZCwgZWxlbSApIDogcHJl
TWFwW2ldKSA+IC0xICkgewotCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWVkW3RlbXBdID0g
IShyZXN1bHRzW3RlbXBdID0gZWxlbSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgLy8gQWRkIGVsZW1lbnRzIHRvIHJl
c3VsdHMsIHRocm91Z2ggcG9zdEZpbmRlciBpZiBkZWZpbmVkCi0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBtYXRjaGVyT3V0ID0gY29uZGVuc2UoCi0gICAgICAgICAgICAgICAgbWF0Y2hl
ck91dCA9PT0gcmVzdWx0cyA/Ci0gICAgICAgICAgICAgICAgICAgIG1hdGNoZXJPdXQuc3BsaWNl
KCBwcmVleGlzdGluZywgbWF0Y2hlck91dC5sZW5ndGggKSA6Ci0gICAgICAgICAgICAgICAgICAg
IG1hdGNoZXJPdXQKLSAgICAgICAgICAgICk7Ci0gICAgICAgICAgICBpZiAoIHBvc3RGaW5kZXIg
KSB7Ci0gICAgICAgICAgICAgICAgcG9zdEZpbmRlciggbnVsbCwgcmVzdWx0cywgbWF0Y2hlck91
dCwgeG1sICk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHB1c2guYXBw
bHkoIHJlc3VsdHMsIG1hdGNoZXJPdXQgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0pOwotfQotCi1mdW5jdGlvbiBtYXRjaGVyRnJvbVRva2VucyggdG9rZW5zICkgewotICAgIHZh
ciBjaGVja0NvbnRleHQsIG1hdGNoZXIsIGosCi0gICAgICAgIGxlbiA9IHRva2Vucy5sZW5ndGgs
Ci0gICAgICAgIGxlYWRpbmdSZWxhdGl2ZSA9IEV4cHIucmVsYXRpdmVbIHRva2Vuc1swXS50eXBl
IF0sCi0gICAgICAgIGltcGxpY2l0UmVsYXRpdmUgPSBsZWFkaW5nUmVsYXRpdmUgfHwgRXhwci5y
ZWxhdGl2ZVsiICJdLAotICAgICAgICBpID0gbGVhZGluZ1JlbGF0aXZlID8gMSA6IDAsCi0KLSAg
ICAgICAgLy8gVGhlIGZvdW5kYXRpb25hbCBtYXRjaGVyIGVuc3VyZXMgdGhhdCBlbGVtZW50cyBh
cmUgcmVhY2hhYmxlIGZyb20gdG9wLWxldmVsIGNvbnRleHQocykKLSAgICAgICAgbWF0Y2hDb250
ZXh0ID0gYWRkQ29tYmluYXRvciggZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgICAgICAgICByZXR1
cm4gZWxlbSA9PT0gY2hlY2tDb250ZXh0OwotICAgICAgICB9LCBpbXBsaWNpdFJlbGF0aXZlLCB0
cnVlICksCi0gICAgICAgIG1hdGNoQW55Q29udGV4dCA9IGFkZENvbWJpbmF0b3IoIGZ1bmN0aW9u
KCBlbGVtICkgewotICAgICAgICAgICAgcmV0dXJuIGluZGV4T2YoIGNoZWNrQ29udGV4dCwgZWxl
bSApID4gLTE7Ci0gICAgICAgIH0sIGltcGxpY2l0UmVsYXRpdmUsIHRydWUgKSwKLSAgICAgICAg
bWF0Y2hlcnMgPSBbIGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7Ci0gICAgICAgICAg
ICB2YXIgcmV0ID0gKCAhbGVhZGluZ1JlbGF0aXZlICYmICggeG1sIHx8IGNvbnRleHQgIT09IG91
dGVybW9zdENvbnRleHQgKSApIHx8ICgKLSAgICAgICAgICAgICAgICAoY2hlY2tDb250ZXh0ID0g
Y29udGV4dCkubm9kZVR5cGUgPwotICAgICAgICAgICAgICAgICAgICBtYXRjaENvbnRleHQoIGVs
ZW0sIGNvbnRleHQsIHhtbCApIDoKLSAgICAgICAgICAgICAgICAgICAgbWF0Y2hBbnlDb250ZXh0
KCBlbGVtLCBjb250ZXh0LCB4bWwgKSApOwotICAgICAgICAgICAgLy8gQXZvaWQgaGFuZ2luZyBv
bnRvIGVsZW1lbnQgKGlzc3VlICMyOTkpCi0gICAgICAgICAgICBjaGVja0NvbnRleHQgPSBudWxs
OwotICAgICAgICAgICAgcmV0dXJuIHJldDsKLSAgICAgICAgfSBdOwotCi0gICAgZm9yICggOyBp
IDwgbGVuOyBpKysgKSB7Ci0gICAgICAgIGlmICggKG1hdGNoZXIgPSBFeHByLnJlbGF0aXZlWyB0
b2tlbnNbaV0udHlwZSBdKSApIHsKLSAgICAgICAgICAgIG1hdGNoZXJzID0gWyBhZGRDb21iaW5h
dG9yKGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApLCBtYXRjaGVyKSBdOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgbWF0Y2hlciA9IEV4cHIuZmlsdGVyWyB0b2tlbnNbaV0udHlwZSBd
LmFwcGx5KCBudWxsLCB0b2tlbnNbaV0ubWF0Y2hlcyApOwotCi0gICAgICAgICAgICAvLyBSZXR1
cm4gc3BlY2lhbCB1cG9uIHNlZWluZyBhIHBvc2l0aW9uYWwgbWF0Y2hlcgotICAgICAgICAgICAg
aWYgKCBtYXRjaGVyWyBleHBhbmRvIF0gKSB7Ci0gICAgICAgICAgICAgICAgLy8gRmluZCB0aGUg
bmV4dCByZWxhdGl2ZSBvcGVyYXRvciAoaWYgYW55KSBmb3IgcHJvcGVyIGhhbmRsaW5nCi0gICAg
ICAgICAgICAgICAgaiA9ICsraTsKLSAgICAgICAgICAgICAgICBmb3IgKCA7IGogPCBsZW47IGor
KyApIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCBFeHByLnJlbGF0aXZlWyB0b2tlbnNbal0u
dHlwZSBdICkgewotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHNldE1h
dGNoZXIoCi0gICAgICAgICAgICAgICAgICAgIGkgPiAxICYmIGVsZW1lbnRNYXRjaGVyKCBtYXRj
aGVycyApLAotICAgICAgICAgICAgICAgICAgICBpID4gMSAmJiB0b1NlbGVjdG9yKAotICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHByZWNlZGluZyB0b2tlbiB3YXMgYSBkZXNjZW5k
YW50IGNvbWJpbmF0b3IsIGluc2VydCBhbiBpbXBsaWNpdCBhbnktZWxlbWVudCBgKmAKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHRva2Vucy5zbGljZSggMCwgaSAtIDEgKS5jb25jYXQoeyB2YWx1
ZTogdG9rZW5zWyBpIC0gMiBdLnR5cGUgPT09ICIgIiA/ICIqIiA6ICIiIH0pCi0gICAgICAgICAg
ICAgICAgICAgICkucmVwbGFjZSggcnRyaW0sICIkMSIgKSwKLSAgICAgICAgICAgICAgICAgICAg
bWF0Y2hlciwKLSAgICAgICAgICAgICAgICAgICAgaSA8IGogJiYgbWF0Y2hlckZyb21Ub2tlbnMo
IHRva2Vucy5zbGljZSggaSwgaiApICksCi0gICAgICAgICAgICAgICAgICAgIGogPCBsZW4gJiYg
bWF0Y2hlckZyb21Ub2tlbnMoICh0b2tlbnMgPSB0b2tlbnMuc2xpY2UoIGogKSkgKSwKLSAgICAg
ICAgICAgICAgICAgICAgaiA8IGxlbiAmJiB0b1NlbGVjdG9yKCB0b2tlbnMgKQotICAgICAgICAg
ICAgICAgICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtYXRjaGVycy5wdXNoKCBtYXRj
aGVyICk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gZWxlbWVudE1hdGNoZXIoIG1h
dGNoZXJzICk7Ci19Ci0KLWZ1bmN0aW9uIG1hdGNoZXJGcm9tR3JvdXBNYXRjaGVycyggZWxlbWVu
dE1hdGNoZXJzLCBzZXRNYXRjaGVycyApIHsKLSAgICB2YXIgYnlTZXQgPSBzZXRNYXRjaGVycy5s
ZW5ndGggPiAwLAotICAgICAgICBieUVsZW1lbnQgPSBlbGVtZW50TWF0Y2hlcnMubGVuZ3RoID4g
MCwKLSAgICAgICAgc3VwZXJNYXRjaGVyID0gZnVuY3Rpb24oIHNlZWQsIGNvbnRleHQsIHhtbCwg
cmVzdWx0cywgb3V0ZXJtb3N0ICkgewotICAgICAgICAgICAgdmFyIGVsZW0sIGosIG1hdGNoZXIs
Ci0gICAgICAgICAgICAgICAgbWF0Y2hlZENvdW50ID0gMCwKLSAgICAgICAgICAgICAgICBpID0g
IjAiLAotICAgICAgICAgICAgICAgIHVubWF0Y2hlZCA9IHNlZWQgJiYgW10sCi0gICAgICAgICAg
ICAgICAgc2V0TWF0Y2hlZCA9IFtdLAotICAgICAgICAgICAgICAgIGNvbnRleHRCYWNrdXAgPSBv
dXRlcm1vc3RDb250ZXh0LAotICAgICAgICAgICAgICAgIC8vIFdlIG11c3QgYWx3YXlzIGhhdmUg
ZWl0aGVyIHNlZWQgZWxlbWVudHMgb3Igb3V0ZXJtb3N0IGNvbnRleHQKLSAgICAgICAgICAgICAg
ICBlbGVtcyA9IHNlZWQgfHwgYnlFbGVtZW50ICYmIEV4cHIuZmluZFsiVEFHIl0oICIqIiwgb3V0
ZXJtb3N0ICksCi0gICAgICAgICAgICAgICAgLy8gVXNlIGludGVnZXIgZGlycnVucyBpZmYgdGhp
cyBpcyB0aGUgb3V0ZXJtb3N0IG1hdGNoZXIKLSAgICAgICAgICAgICAgICBkaXJydW5zVW5pcXVl
ID0gKGRpcnJ1bnMgKz0gY29udGV4dEJhY2t1cCA9PSBudWxsID8gMSA6IE1hdGgucmFuZG9tKCkg
fHwgMC4xKSwKLSAgICAgICAgICAgICAgICBsZW4gPSBlbGVtcy5sZW5ndGg7Ci0KLSAgICAgICAg
ICAgIGlmICggb3V0ZXJtb3N0ICkgewotICAgICAgICAgICAgICAgIG91dGVybW9zdENvbnRleHQg
PSBjb250ZXh0ID09PSBkb2N1bWVudCB8fCBjb250ZXh0IHx8IG91dGVybW9zdDsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgLy8gQWRkIGVsZW1lbnRzIHBhc3NpbmcgZWxlbWVudE1hdGNo
ZXJzIGRpcmVjdGx5IHRvIHJlc3VsdHMKLSAgICAgICAgICAgIC8vIFN1cHBvcnQ6IElFPDksIFNh
ZmFyaQotICAgICAgICAgICAgLy8gVG9sZXJhdGUgTm9kZUxpc3QgcHJvcGVydGllcyAoSUU6ICJs
ZW5ndGgiOyBTYWZhcmk6IDxudW1iZXI+KSBtYXRjaGluZyBlbGVtZW50cyBieSBpZAotICAgICAg
ICAgICAgZm9yICggOyBpICE9PSBsZW4gJiYgKGVsZW0gPSBlbGVtc1tpXSkgIT0gbnVsbDsgaSsr
ICkgewotICAgICAgICAgICAgICAgIGlmICggYnlFbGVtZW50ICYmIGVsZW0gKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGogPSAwOwotICAgICAgICAgICAgICAgICAgICBpZiAoICFjb250ZXh0ICYm
IGVsZW0ub3duZXJEb2N1bWVudCAhPT0gZG9jdW1lbnQgKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBzZXREb2N1bWVudCggZWxlbSApOwotICAgICAgICAgICAgICAgICAgICAgICAgeG1sID0g
IWRvY3VtZW50SXNIVE1MOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIHdoaWxlICggKG1hdGNoZXIgPSBlbGVtZW50TWF0Y2hlcnNbaisrXSkgKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIG1hdGNoZXIoIGVsZW0sIGNvbnRleHQgfHwgZG9jdW1lbnQs
IHhtbCkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKCBlbGVt
ICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYg
KCBvdXRlcm1vc3QgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkaXJydW5zID0gZGlycnVu
c1VuaXF1ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgIC8vIFRyYWNrIHVubWF0Y2hlZCBlbGVtZW50cyBmb3Igc2V0IGZpbHRlcnMK
LSAgICAgICAgICAgICAgICBpZiAoIGJ5U2V0ICkgewotICAgICAgICAgICAgICAgICAgICAvLyBU
aGV5IHdpbGwgaGF2ZSBnb25lIHRocm91Z2ggYWxsIHBvc3NpYmxlIG1hdGNoZXJzCi0gICAgICAg
ICAgICAgICAgICAgIGlmICggKGVsZW0gPSAhbWF0Y2hlciAmJiBlbGVtKSApIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIG1hdGNoZWRDb3VudC0tOwotICAgICAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICAgICAgLy8gTGVuZ3RoZW4gdGhlIGFycmF5IGZvciBldmVyeSBlbGVt
ZW50LCBtYXRjaGVkIG9yIG5vdAotICAgICAgICAgICAgICAgICAgICBpZiAoIHNlZWQgKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB1bm1hdGNoZWQucHVzaCggZWxlbSApOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAvLyBgaWAgaXMgbm93IHRoZSBjb3VudCBvZiBlbGVtZW50cyB2aXNpdGVkIGFib3ZlLCBh
bmQgYWRkaW5nIGl0IHRvIGBtYXRjaGVkQ291bnRgCi0gICAgICAgICAgICAvLyBtYWtlcyB0aGUg
bGF0dGVyIG5vbm5lZ2F0aXZlLgotICAgICAgICAgICAgbWF0Y2hlZENvdW50ICs9IGk7Ci0KLSAg
ICAgICAgICAgIC8vIEFwcGx5IHNldCBmaWx0ZXJzIHRvIHVubWF0Y2hlZCBlbGVtZW50cwotICAg
ICAgICAgICAgLy8gTk9URTogVGhpcyBjYW4gYmUgc2tpcHBlZCBpZiB0aGVyZSBhcmUgbm8gdW5t
YXRjaGVkIGVsZW1lbnRzIChpLmUuLCBgbWF0Y2hlZENvdW50YAotICAgICAgICAgICAgLy8gZXF1
YWxzIGBpYCksIHVubGVzcyB3ZSBkaWRuJ3QgdmlzaXQgX2FueV8gZWxlbWVudHMgaW4gdGhlIGFi
b3ZlIGxvb3AgYmVjYXVzZSB3ZSBoYXZlCi0gICAgICAgICAgICAvLyBubyBlbGVtZW50IG1hdGNo
ZXJzIGFuZCBubyBzZWVkLgotICAgICAgICAgICAgLy8gSW5jcmVtZW50aW5nIGFuIGluaXRpYWxs
eS1zdHJpbmcgIjAiIGBpYCBhbGxvd3MgYGlgIHRvIHJlbWFpbiBhIHN0cmluZyBvbmx5IGluIHRo
YXQKLSAgICAgICAgICAgIC8vIGNhc2UsIHdoaWNoIHdpbGwgcmVzdWx0IGluIGEgIjAwIiBgbWF0
Y2hlZENvdW50YCB0aGF0IGRpZmZlcnMgZnJvbSBgaWAgYnV0IGlzIGFsc28KLSAgICAgICAgICAg
IC8vIG51bWVyaWNhbGx5IHplcm8uCi0gICAgICAgICAgICBpZiAoIGJ5U2V0ICYmIGkgIT09IG1h
dGNoZWRDb3VudCApIHsKLSAgICAgICAgICAgICAgICBqID0gMDsKLSAgICAgICAgICAgICAgICB3
aGlsZSAoIChtYXRjaGVyID0gc2V0TWF0Y2hlcnNbaisrXSkgKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIG1hdGNoZXIoIHVubWF0Y2hlZCwgc2V0TWF0Y2hlZCwgY29udGV4dCwgeG1sICk7Ci0gICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKCBzZWVkICkgewotICAgICAgICAg
ICAgICAgICAgICAvLyBSZWludGVncmF0ZSBlbGVtZW50IG1hdGNoZXMgdG8gZWxpbWluYXRlIHRo
ZSBuZWVkIGZvciBzb3J0aW5nCi0gICAgICAgICAgICAgICAgICAgIGlmICggbWF0Y2hlZENvdW50
ID4gMCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICggaS0tICkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggISh1bm1hdGNoZWRbaV0gfHwgc2V0TWF0Y2hlZFtp
XSkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldE1hdGNoZWRbaV0gPSBw
b3AuY2FsbCggcmVzdWx0cyApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgICAgIC8vIERpc2NhcmQgaW5kZXggcGxhY2Vob2xkZXIgdmFsdWVzIHRvIGdldCBvbmx5
IGFjdHVhbCBtYXRjaGVzCi0gICAgICAgICAgICAgICAgICAgIHNldE1hdGNoZWQgPSBjb25kZW5z
ZSggc2V0TWF0Y2hlZCApOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8v
IEFkZCBtYXRjaGVzIHRvIHJlc3VsdHMKLSAgICAgICAgICAgICAgICBwdXNoLmFwcGx5KCByZXN1
bHRzLCBzZXRNYXRjaGVkICk7Ci0KLSAgICAgICAgICAgICAgICAvLyBTZWVkbGVzcyBzZXQgbWF0
Y2hlcyBzdWNjZWVkaW5nIG11bHRpcGxlIHN1Y2Nlc3NmdWwgbWF0Y2hlcnMgc3RpcHVsYXRlIHNv
cnRpbmcKLSAgICAgICAgICAgICAgICBpZiAoIG91dGVybW9zdCAmJiAhc2VlZCAmJiBzZXRNYXRj
aGVkLmxlbmd0aCA+IDAgJiYKLSAgICAgICAgICAgICAgICAgICAgKCBtYXRjaGVkQ291bnQgKyBz
ZXRNYXRjaGVycy5sZW5ndGggKSA+IDEgKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgU2l6emxl
LnVuaXF1ZVNvcnQoIHJlc3VsdHMgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIC8vIE92ZXJyaWRlIG1hbmlwdWxhdGlvbiBvZiBnbG9iYWxzIGJ5IG5l
c3RlZCBtYXRjaGVycwotICAgICAgICAgICAgaWYgKCBvdXRlcm1vc3QgKSB7Ci0gICAgICAgICAg
ICAgICAgZGlycnVucyA9IGRpcnJ1bnNVbmlxdWU7Ci0gICAgICAgICAgICAgICAgb3V0ZXJtb3N0
Q29udGV4dCA9IGNvbnRleHRCYWNrdXA7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJl
dHVybiB1bm1hdGNoZWQ7Ci0gICAgICAgIH07Ci0KLSAgICByZXR1cm4gYnlTZXQgPwotICAgICAg
ICBtYXJrRnVuY3Rpb24oIHN1cGVyTWF0Y2hlciApIDoKLSAgICAgICAgc3VwZXJNYXRjaGVyOwot
fQotCi1jb21waWxlID0gU2l6emxlLmNvbXBpbGUgPSBmdW5jdGlvbiggc2VsZWN0b3IsIG1hdGNo
IC8qIEludGVybmFsIFVzZSBPbmx5ICovICkgewotICAgIHZhciBpLAotICAgICAgICBzZXRNYXRj
aGVycyA9IFtdLAotICAgICAgICBlbGVtZW50TWF0Y2hlcnMgPSBbXSwKLSAgICAgICAgY2FjaGVk
ID0gY29tcGlsZXJDYWNoZVsgc2VsZWN0b3IgKyAiICIgXTsKLQotICAgIGlmICggIWNhY2hlZCAp
IHsKLSAgICAgICAgLy8gR2VuZXJhdGUgYSBmdW5jdGlvbiBvZiByZWN1cnNpdmUgZnVuY3Rpb25z
IHRoYXQgY2FuIGJlIHVzZWQgdG8gY2hlY2sgZWFjaCBlbGVtZW50Ci0gICAgICAgIGlmICggIW1h
dGNoICkgewotICAgICAgICAgICAgbWF0Y2ggPSB0b2tlbml6ZSggc2VsZWN0b3IgKTsKLSAgICAg
ICAgfQotICAgICAgICBpID0gbWF0Y2gubGVuZ3RoOwotICAgICAgICB3aGlsZSAoIGktLSApIHsK
LSAgICAgICAgICAgIGNhY2hlZCA9IG1hdGNoZXJGcm9tVG9rZW5zKCBtYXRjaFtpXSApOwotICAg
ICAgICAgICAgaWYgKCBjYWNoZWRbIGV4cGFuZG8gXSApIHsKLSAgICAgICAgICAgICAgICBzZXRN
YXRjaGVycy5wdXNoKCBjYWNoZWQgKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgZWxlbWVudE1hdGNoZXJzLnB1c2goIGNhY2hlZCApOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0KLSAgICAgICAgLy8gQ2FjaGUgdGhlIGNvbXBpbGVkIGZ1bmN0aW9uCi0gICAgICAg
IGNhY2hlZCA9IGNvbXBpbGVyQ2FjaGUoIHNlbGVjdG9yLCBtYXRjaGVyRnJvbUdyb3VwTWF0Y2hl
cnMoIGVsZW1lbnRNYXRjaGVycywgc2V0TWF0Y2hlcnMgKSApOwotCi0gICAgICAgIC8vIFNhdmUg
c2VsZWN0b3IgYW5kIHRva2VuaXphdGlvbgotICAgICAgICBjYWNoZWQuc2VsZWN0b3IgPSBzZWxl
Y3RvcjsKLSAgICB9Ci0gICAgcmV0dXJuIGNhY2hlZDsKLX07Ci0KLS8qKgotICogQSBsb3ctbGV2
ZWwgc2VsZWN0aW9uIGZ1bmN0aW9uIHRoYXQgd29ya3Mgd2l0aCBTaXp6bGUncyBjb21waWxlZAot
ICogIHNlbGVjdG9yIGZ1bmN0aW9ucwotICogQHBhcmFtIHtTdHJpbmd8RnVuY3Rpb259IHNlbGVj
dG9yIEEgc2VsZWN0b3Igb3IgYSBwcmUtY29tcGlsZWQKLSAqICBzZWxlY3RvciBmdW5jdGlvbiBi
dWlsdCB3aXRoIFNpenpsZS5jb21waWxlCi0gKiBAcGFyYW0ge0VsZW1lbnR9IGNvbnRleHQKLSAq
IEBwYXJhbSB7QXJyYXl9IFtyZXN1bHRzXQotICogQHBhcmFtIHtBcnJheX0gW3NlZWRdIEEgc2V0
IG9mIGVsZW1lbnRzIHRvIG1hdGNoIGFnYWluc3QKLSAqLwotc2VsZWN0ID0gU2l6emxlLnNlbGVj
dCA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCwgcmVzdWx0cywgc2VlZCApIHsKLSAgICB2
YXIgaSwgdG9rZW5zLCB0b2tlbiwgdHlwZSwgZmluZCwKLSAgICAgICAgY29tcGlsZWQgPSB0eXBl
b2Ygc2VsZWN0b3IgPT09ICJmdW5jdGlvbiIgJiYgc2VsZWN0b3IsCi0gICAgICAgIG1hdGNoID0g
IXNlZWQgJiYgdG9rZW5pemUoIChzZWxlY3RvciA9IGNvbXBpbGVkLnNlbGVjdG9yIHx8IHNlbGVj
dG9yKSApOwotCi0gICAgcmVzdWx0cyA9IHJlc3VsdHMgfHwgW107Ci0KLSAgICAvLyBUcnkgdG8g
bWluaW1pemUgb3BlcmF0aW9ucyBpZiB0aGVyZSBpcyBvbmx5IG9uZSBzZWxlY3RvciBpbiB0aGUg
bGlzdCBhbmQgbm8gc2VlZAotICAgIC8vICh0aGUgbGF0dGVyIG9mIHdoaWNoIGd1YXJhbnRlZXMg
dXMgY29udGV4dCkKLSAgICBpZiAoIG1hdGNoLmxlbmd0aCA9PT0gMSApIHsKLQotICAgICAgICAv
LyBSZWR1Y2UgY29udGV4dCBpZiB0aGUgbGVhZGluZyBjb21wb3VuZCBzZWxlY3RvciBpcyBhbiBJ
RAotICAgICAgICB0b2tlbnMgPSBtYXRjaFswXSA9IG1hdGNoWzBdLnNsaWNlKCAwICk7Ci0gICAg
ICAgIGlmICggdG9rZW5zLmxlbmd0aCA+IDIgJiYgKHRva2VuID0gdG9rZW5zWzBdKS50eXBlID09
PSAiSUQiICYmCi0gICAgICAgICAgICAgICAgc3VwcG9ydC5nZXRCeUlkICYmIGNvbnRleHQubm9k
ZVR5cGUgPT09IDkgJiYgZG9jdW1lbnRJc0hUTUwgJiYKLSAgICAgICAgICAgICAgICBFeHByLnJl
bGF0aXZlWyB0b2tlbnNbMV0udHlwZSBdICkgewotCi0gICAgICAgICAgICBjb250ZXh0ID0gKCBF
eHByLmZpbmRbIklEIl0oIHRva2VuLm1hdGNoZXNbMF0ucmVwbGFjZShydW5lc2NhcGUsIGZ1bmVz
Y2FwZSksIGNvbnRleHQgKSB8fCBbXSApWzBdOwotICAgICAgICAgICAgaWYgKCAhY29udGV4dCAp
IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0czsKLQotICAgICAgICAgICAgLy8gUHJl
Y29tcGlsZWQgbWF0Y2hlcnMgd2lsbCBzdGlsbCB2ZXJpZnkgYW5jZXN0cnksIHNvIHN0ZXAgdXAg
YSBsZXZlbAotICAgICAgICAgICAgfSBlbHNlIGlmICggY29tcGlsZWQgKSB7Ci0gICAgICAgICAg
ICAgICAgY29udGV4dCA9IGNvbnRleHQucGFyZW50Tm9kZTsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgc2VsZWN0b3IgPSBzZWxlY3Rvci5zbGljZSggdG9rZW5zLnNoaWZ0KCkudmFsdWUu
bGVuZ3RoICk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBGZXRjaCBhIHNlZWQgc2V0IGZvciBy
aWdodC10by1sZWZ0IG1hdGNoaW5nCi0gICAgICAgIGkgPSBtYXRjaEV4cHJbIm5lZWRzQ29udGV4
dCJdLnRlc3QoIHNlbGVjdG9yICkgPyAwIDogdG9rZW5zLmxlbmd0aDsKLSAgICAgICAgd2hpbGUg
KCBpLS0gKSB7Ci0gICAgICAgICAgICB0b2tlbiA9IHRva2Vuc1tpXTsKLQotICAgICAgICAgICAg
Ly8gQWJvcnQgaWYgd2UgaGl0IGEgY29tYmluYXRvcgotICAgICAgICAgICAgaWYgKCBFeHByLnJl
bGF0aXZlWyAodHlwZSA9IHRva2VuLnR5cGUpIF0gKSB7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIChmaW5kID0gRXhwci5maW5kWyB0eXBl
IF0pICkgewotICAgICAgICAgICAgICAgIC8vIFNlYXJjaCwgZXhwYW5kaW5nIGNvbnRleHQgZm9y
IGxlYWRpbmcgc2libGluZyBjb21iaW5hdG9ycwotICAgICAgICAgICAgICAgIGlmICggKHNlZWQg
PSBmaW5kKAotICAgICAgICAgICAgICAgICAgICB0b2tlbi5tYXRjaGVzWzBdLnJlcGxhY2UoIHJ1
bmVzY2FwZSwgZnVuZXNjYXBlICksCi0gICAgICAgICAgICAgICAgICAgIHJzaWJsaW5nLnRlc3Qo
IHRva2Vuc1swXS50eXBlICkgJiYgdGVzdENvbnRleHQoIGNvbnRleHQucGFyZW50Tm9kZSApIHx8
IGNvbnRleHQKLSAgICAgICAgICAgICAgICApKSApIHsKLQotICAgICAgICAgICAgICAgICAgICAv
LyBJZiBzZWVkIGlzIGVtcHR5IG9yIG5vIHRva2VucyByZW1haW4sIHdlIGNhbiByZXR1cm4gZWFy
bHkKLSAgICAgICAgICAgICAgICAgICAgdG9rZW5zLnNwbGljZSggaSwgMSApOwotICAgICAgICAg
ICAgICAgICAgICBzZWxlY3RvciA9IHNlZWQubGVuZ3RoICYmIHRvU2VsZWN0b3IoIHRva2VucyAp
OwotICAgICAgICAgICAgICAgICAgICBpZiAoICFzZWxlY3RvciApIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHB1c2guYXBwbHkoIHJlc3VsdHMsIHNlZWQgKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiByZXN1bHRzOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgLy8gQ29tcGlsZSBhbmQgZXhlY3V0ZSBhIGZpbHRlcmluZyBm
dW5jdGlvbiBpZiBvbmUgaXMgbm90IHByb3ZpZGVkCi0gICAgLy8gUHJvdmlkZSBgbWF0Y2hgIHRv
IGF2b2lkIHJldG9rZW5pemF0aW9uIGlmIHdlIG1vZGlmaWVkIHRoZSBzZWxlY3RvciBhYm92ZQot
ICAgICggY29tcGlsZWQgfHwgY29tcGlsZSggc2VsZWN0b3IsIG1hdGNoICkgKSgKLSAgICAgICAg
c2VlZCwKLSAgICAgICAgY29udGV4dCwKLSAgICAgICAgIWRvY3VtZW50SXNIVE1MLAotICAgICAg
ICByZXN1bHRzLAotICAgICAgICAhY29udGV4dCB8fCByc2libGluZy50ZXN0KCBzZWxlY3RvciAp
ICYmIHRlc3RDb250ZXh0KCBjb250ZXh0LnBhcmVudE5vZGUgKSB8fCBjb250ZXh0Ci0gICAgKTsK
LSAgICByZXR1cm4gcmVzdWx0czsKLX07Ci0KLS8vIE9uZS10aW1lIGFzc2lnbm1lbnRzCi0KLS8v
IFNvcnQgc3RhYmlsaXR5Ci1zdXBwb3J0LnNvcnRTdGFibGUgPSBleHBhbmRvLnNwbGl0KCIiKS5z
b3J0KCBzb3J0T3JkZXIgKS5qb2luKCIiKSA9PT0gZXhwYW5kbzsKLQotLy8gU3VwcG9ydDogQ2hy
b21lIDE0LTM1KwotLy8gQWx3YXlzIGFzc3VtZSBkdXBsaWNhdGVzIGlmIHRoZXkgYXJlbid0IHBh
c3NlZCB0byB0aGUgY29tcGFyaXNvbiBmdW5jdGlvbgotc3VwcG9ydC5kZXRlY3REdXBsaWNhdGVz
ID0gISFoYXNEdXBsaWNhdGU7Ci0KLS8vIEluaXRpYWxpemUgYWdhaW5zdCB0aGUgZGVmYXVsdCBk
b2N1bWVudAotc2V0RG9jdW1lbnQoKTsKLQotLy8gU3VwcG9ydDogV2Via2l0PDUzNy4zMiAtIFNh
ZmFyaSA2LjAuMy9DaHJvbWUgMjUgKGZpeGVkIGluIENocm9tZSAyNykKLS8vIERldGFjaGVkIG5v
ZGVzIGNvbmZvdW5kaW5nbHkgZm9sbG93ICplYWNoIG90aGVyKgotc3VwcG9ydC5zb3J0RGV0YWNo
ZWQgPSBhc3NlcnQoZnVuY3Rpb24oIGRpdjEgKSB7Ci0gICAgLy8gU2hvdWxkIHJldHVybiAxLCBi
dXQgcmV0dXJucyA0IChmb2xsb3dpbmcpCi0gICAgcmV0dXJuIGRpdjEuY29tcGFyZURvY3VtZW50
UG9zaXRpb24oIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpICkgJiAxOwotfSk7Ci0KLS8v
IFN1cHBvcnQ6IElFPDgKLS8vIFByZXZlbnQgYXR0cmlidXRlL3Byb3BlcnR5ICJpbnRlcnBvbGF0
aW9uIgotLy8gaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L21zNTM2NDI5
JTI4VlMuODUlMjkuYXNweAotaWYgKCAhYXNzZXJ0KGZ1bmN0aW9uKCBkaXYgKSB7Ci0gICAgZGl2
LmlubmVySFRNTCA9ICI8YSBocmVmPScjJz48L2E+IjsKLSAgICByZXR1cm4gZGl2LmZpcnN0Q2hp
bGQuZ2V0QXR0cmlidXRlKCJocmVmIikgPT09ICIjIiA7Ci19KSApIHsKLSAgICBhZGRIYW5kbGUo
ICJ0eXBlfGhyZWZ8aGVpZ2h0fHdpZHRoIiwgZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGlzWE1MICkg
ewotICAgICAgICBpZiAoICFpc1hNTCApIHsKLSAgICAgICAgICAgIHJldHVybiBlbGVtLmdldEF0
dHJpYnV0ZSggbmFtZSwgbmFtZS50b0xvd2VyQ2FzZSgpID09PSAidHlwZSIgPyAxIDogMiApOwot
ICAgICAgICB9Ci0gICAgfSk7Ci19Ci0KLS8vIFN1cHBvcnQ6IElFPDkKLS8vIFVzZSBkZWZhdWx0
VmFsdWUgaW4gcGxhY2Ugb2YgZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpCi1pZiAoICFzdXBwb3J0LmF0
dHJpYnV0ZXMgfHwgIWFzc2VydChmdW5jdGlvbiggZGl2ICkgewotICAgIGRpdi5pbm5lckhUTUwg
PSAiPGlucHV0Lz4iOwotICAgIGRpdi5maXJzdENoaWxkLnNldEF0dHJpYnV0ZSggInZhbHVlIiwg
IiIgKTsKLSAgICByZXR1cm4gZGl2LmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCAidmFsdWUiICkg
PT09ICIiOwotfSkgKSB7Ci0gICAgYWRkSGFuZGxlKCAidmFsdWUiLCBmdW5jdGlvbiggZWxlbSwg
bmFtZSwgaXNYTUwgKSB7Ci0gICAgICAgIGlmICggIWlzWE1MICYmIGVsZW0ubm9kZU5hbWUudG9M
b3dlckNhc2UoKSA9PT0gImlucHV0IiApIHsKLSAgICAgICAgICAgIHJldHVybiBlbGVtLmRlZmF1
bHRWYWx1ZTsKLSAgICAgICAgfQotICAgIH0pOwotfQotCi0vLyBTdXBwb3J0OiBJRTw5Ci0vLyBV
c2UgZ2V0QXR0cmlidXRlTm9kZSB0byBmZXRjaCBib29sZWFucyB3aGVuIGdldEF0dHJpYnV0ZSBs
aWVzCi1pZiAoICFhc3NlcnQoZnVuY3Rpb24oIGRpdiApIHsKLSAgICByZXR1cm4gZGl2LmdldEF0
dHJpYnV0ZSgiZGlzYWJsZWQiKSA9PSBudWxsOwotfSkgKSB7Ci0gICAgYWRkSGFuZGxlKCBib29s
ZWFucywgZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGlzWE1MICkgewotICAgICAgICB2YXIgdmFsOwot
ICAgICAgICBpZiAoICFpc1hNTCApIHsKLSAgICAgICAgICAgIHJldHVybiBlbGVtWyBuYW1lIF0g
PT09IHRydWUgPyBuYW1lLnRvTG93ZXJDYXNlKCkgOgotICAgICAgICAgICAgICAgICAgICAodmFs
ID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCBuYW1lICkpICYmIHZhbC5zcGVjaWZpZWQgPwotICAg
ICAgICAgICAgICAgICAgICB2YWwudmFsdWUgOgotICAgICAgICAgICAgICAgIG51bGw7Ci0gICAg
ICAgIH0KLSAgICB9KTsKLX0KLQotcmV0dXJuIFNpenpsZTsKLQotfSkoIHdpbmRvdyApOwotCi0K
LQotalF1ZXJ5LmZpbmQgPSBTaXp6bGU7Ci1qUXVlcnkuZXhwciA9IFNpenpsZS5zZWxlY3RvcnM7
Ci1qUXVlcnkuZXhwclsgIjoiIF0gPSBqUXVlcnkuZXhwci5wc2V1ZG9zOwotalF1ZXJ5LnVuaXF1
ZVNvcnQgPSBqUXVlcnkudW5pcXVlID0gU2l6emxlLnVuaXF1ZVNvcnQ7Ci1qUXVlcnkudGV4dCA9
IFNpenpsZS5nZXRUZXh0OwotalF1ZXJ5LmlzWE1MRG9jID0gU2l6emxlLmlzWE1MOwotalF1ZXJ5
LmNvbnRhaW5zID0gU2l6emxlLmNvbnRhaW5zOwotCi0KLQotdmFyIGRpciA9IGZ1bmN0aW9uKCBl
bGVtLCBkaXIsIHVudGlsICkgewotICAgIHZhciBtYXRjaGVkID0gW10sCi0gICAgICAgIHRydW5j
YXRlID0gdW50aWwgIT09IHVuZGVmaW5lZDsKLQotICAgIHdoaWxlICggKCBlbGVtID0gZWxlbVsg
ZGlyIF0gKSAmJiBlbGVtLm5vZGVUeXBlICE9PSA5ICkgewotICAgICAgICBpZiAoIGVsZW0ubm9k
ZVR5cGUgPT09IDEgKSB7Ci0gICAgICAgICAgICBpZiAoIHRydW5jYXRlICYmIGpRdWVyeSggZWxl
bSApLmlzKCB1bnRpbCApICkgewotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgbWF0Y2hlZC5wdXNoKCBlbGVtICk7Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgcmV0dXJuIG1hdGNoZWQ7Ci19OwotCi0KLXZhciBzaWJsaW5ncyA9IGZ1bmN0aW9uKCBuLCBl
bGVtICkgewotICAgIHZhciBtYXRjaGVkID0gW107Ci0KLSAgICBmb3IgKCA7IG47IG4gPSBuLm5l
eHRTaWJsaW5nICkgewotICAgICAgICBpZiAoIG4ubm9kZVR5cGUgPT09IDEgJiYgbiAhPT0gZWxl
bSApIHsKLSAgICAgICAgICAgIG1hdGNoZWQucHVzaCggbiApOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgcmV0dXJuIG1hdGNoZWQ7Ci19OwotCi0KLXZhciBybmVlZHNDb250ZXh0ID0galF1ZXJ5
LmV4cHIubWF0Y2gubmVlZHNDb250ZXh0OwotCi12YXIgcnNpbmdsZVRhZyA9ICggL148KFtcdy1d
KylccypcLz8+KD86PFwvXDE+fCkkLyApOwotCi0KLQotdmFyIHJpc1NpbXBsZSA9IC9eLlteOiNc
W1wuLF0qJC87Ci0KLS8vIEltcGxlbWVudCB0aGUgaWRlbnRpY2FsIGZ1bmN0aW9uYWxpdHkgZm9y
IGZpbHRlciBhbmQgbm90Ci1mdW5jdGlvbiB3aW5ub3coIGVsZW1lbnRzLCBxdWFsaWZpZXIsIG5v
dCApIHsKLSAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBxdWFsaWZpZXIgKSApIHsKLSAgICAg
ICAgcmV0dXJuIGpRdWVyeS5ncmVwKCBlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0sIGkgKSB7Ci0g
ICAgICAgICAgICAvKiBqc2hpbnQgLVcwMTggKi8KLSAgICAgICAgICAgIHJldHVybiAhIXF1YWxp
Zmllci5jYWxsKCBlbGVtLCBpLCBlbGVtICkgIT09IG5vdDsKLSAgICAgICAgfSApOwotCi0gICAg
fQotCi0gICAgaWYgKCBxdWFsaWZpZXIubm9kZVR5cGUgKSB7Ci0gICAgICAgIHJldHVybiBqUXVl
cnkuZ3JlcCggZWxlbWVudHMsIGZ1bmN0aW9uKCBlbGVtICkgewotICAgICAgICAgICAgcmV0dXJu
ICggZWxlbSA9PT0gcXVhbGlmaWVyICkgIT09IG5vdDsKLSAgICAgICAgfSApOwotCi0gICAgfQot
Ci0gICAgaWYgKCB0eXBlb2YgcXVhbGlmaWVyID09PSAic3RyaW5nIiApIHsKLSAgICAgICAgaWYg
KCByaXNTaW1wbGUudGVzdCggcXVhbGlmaWVyICkgKSB7Ci0gICAgICAgICAgICByZXR1cm4galF1
ZXJ5LmZpbHRlciggcXVhbGlmaWVyLCBlbGVtZW50cywgbm90ICk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBxdWFsaWZpZXIgPSBqUXVlcnkuZmlsdGVyKCBxdWFsaWZpZXIsIGVsZW1lbnRzICk7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIGpRdWVyeS5ncmVwKCBlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0g
KSB7Ci0gICAgICAgIHJldHVybiAoIGluZGV4T2YuY2FsbCggcXVhbGlmaWVyLCBlbGVtICkgPiAt
MSApICE9PSBub3Q7Ci0gICAgfSApOwotfQotCi1qUXVlcnkuZmlsdGVyID0gZnVuY3Rpb24oIGV4
cHIsIGVsZW1zLCBub3QgKSB7Ci0gICAgdmFyIGVsZW0gPSBlbGVtc1sgMCBdOwotCi0gICAgaWYg
KCBub3QgKSB7Ci0gICAgICAgIGV4cHIgPSAiOm5vdCgiICsgZXhwciArICIpIjsKLSAgICB9Ci0K
LSAgICByZXR1cm4gZWxlbXMubGVuZ3RoID09PSAxICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgPwot
ICAgICAgICBqUXVlcnkuZmluZC5tYXRjaGVzU2VsZWN0b3IoIGVsZW0sIGV4cHIgKSA/IFsgZWxl
bSBdIDogW10gOgotICAgICAgICBqUXVlcnkuZmluZC5tYXRjaGVzKCBleHByLCBqUXVlcnkuZ3Jl
cCggZWxlbXMsIGZ1bmN0aW9uKCBlbGVtICkgewotICAgICAgICAgICAgcmV0dXJuIGVsZW0ubm9k
ZVR5cGUgPT09IDE7Ci0gICAgICAgIH0gKSApOwotfTsKLQotalF1ZXJ5LmZuLmV4dGVuZCggewot
ICAgIGZpbmQ6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKLSAgICAgICAgdmFyIGksCi0gICAgICAg
ICAgICBsZW4gPSB0aGlzLmxlbmd0aCwKLSAgICAgICAgICAgIHJldCA9IFtdLAotICAgICAgICAg
ICAgc2VsZiA9IHRoaXM7Ci0KLSAgICAgICAgaWYgKCB0eXBlb2Ygc2VsZWN0b3IgIT09ICJzdHJp
bmciICkgewotICAgICAgICAgICAgcmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqUXVlcnkoIHNlbGVj
dG9yICkuZmlsdGVyKCBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICBmb3IgKCBpID0gMDsg
aSA8IGxlbjsgaSsrICkgewotICAgICAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5jb250YWlu
cyggc2VsZlsgaSBdLCB0aGlzICkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0gKSApOwotICAgICAgICB9Ci0KLSAgICAgICAgZm9yICggaSA9IDA7IGkgPCBsZW47IGkr
KyApIHsKLSAgICAgICAgICAgIGpRdWVyeS5maW5kKCBzZWxlY3Rvciwgc2VsZlsgaSBdLCByZXQg
KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIE5lZWRlZCBiZWNhdXNlICQoIHNlbGVjdG9yLCBj
b250ZXh0ICkgYmVjb21lcyAkKCBjb250ZXh0ICkuZmluZCggc2VsZWN0b3IgKQotICAgICAgICBy
ZXQgPSB0aGlzLnB1c2hTdGFjayggbGVuID4gMSA/IGpRdWVyeS51bmlxdWUoIHJldCApIDogcmV0
ICk7Ci0gICAgICAgIHJldC5zZWxlY3RvciA9IHRoaXMuc2VsZWN0b3IgPyB0aGlzLnNlbGVjdG9y
ICsgIiAiICsgc2VsZWN0b3IgOiBzZWxlY3RvcjsKLSAgICAgICAgcmV0dXJuIHJldDsKLSAgICB9
LAotICAgIGZpbHRlcjogZnVuY3Rpb24oIHNlbGVjdG9yICkgewotICAgICAgICByZXR1cm4gdGhp
cy5wdXNoU3RhY2soIHdpbm5vdyggdGhpcywgc2VsZWN0b3IgfHwgW10sIGZhbHNlICkgKTsKLSAg
ICB9LAotICAgIG5vdDogZnVuY3Rpb24oIHNlbGVjdG9yICkgewotICAgICAgICByZXR1cm4gdGhp
cy5wdXNoU3RhY2soIHdpbm5vdyggdGhpcywgc2VsZWN0b3IgfHwgW10sIHRydWUgKSApOwotICAg
IH0sCi0gICAgaXM6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKLSAgICAgICAgcmV0dXJuICEhd2lu
bm93KAotICAgICAgICAgICAgdGhpcywKLQotICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyBhIHBv
c2l0aW9uYWwvcmVsYXRpdmUgc2VsZWN0b3IsIGNoZWNrIG1lbWJlcnNoaXAgaW4gdGhlIHJldHVy
bmVkIHNldAotICAgICAgICAgICAgLy8gc28gJCgicDpmaXJzdCIpLmlzKCJwOmxhc3QiKSB3b24n
dCByZXR1cm4gdHJ1ZSBmb3IgYSBkb2Mgd2l0aCB0d28gInAiLgotICAgICAgICAgICAgdHlwZW9m
IHNlbGVjdG9yID09PSAic3RyaW5nIiAmJiBybmVlZHNDb250ZXh0LnRlc3QoIHNlbGVjdG9yICkg
PwotICAgICAgICAgICAgICAgIGpRdWVyeSggc2VsZWN0b3IgKSA6Ci0gICAgICAgICAgICAgICAg
c2VsZWN0b3IgfHwgW10sCi0gICAgICAgICAgICBmYWxzZQotICAgICAgICApLmxlbmd0aDsKLSAg
ICB9Ci19ICk7Ci0KLQotLy8gSW5pdGlhbGl6ZSBhIGpRdWVyeSBvYmplY3QKLQotCi0vLyBBIGNl
bnRyYWwgcmVmZXJlbmNlIHRvIHRoZSByb290IGpRdWVyeShkb2N1bWVudCkKLXZhciByb290alF1
ZXJ5LAotCi0gICAgLy8gQSBzaW1wbGUgd2F5IHRvIGNoZWNrIGZvciBIVE1MIHN0cmluZ3MKLSAg
ICAvLyBQcmlvcml0aXplICNpZCBvdmVyIDx0YWc+IHRvIGF2b2lkIFhTUyB2aWEgbG9jYXRpb24u
aGFzaCAoIzk1MjEpCi0gICAgLy8gU3RyaWN0IEhUTUwgcmVjb2duaXRpb24gKCMxMTI5MDogbXVz
dCBzdGFydCB3aXRoIDwpCi0gICAgcnF1aWNrRXhwciA9IC9eKD86XHMqKDxbXHdcV10rPilbXj5d
KnwjKFtcdy1dKikpJC8sCi0KLSAgICBpbml0ID0galF1ZXJ5LmZuLmluaXQgPSBmdW5jdGlvbigg
c2VsZWN0b3IsIGNvbnRleHQsIHJvb3QgKSB7Ci0gICAgICAgIHZhciBtYXRjaCwgZWxlbTsKLQot
ICAgICAgICAvLyBIQU5ETEU6ICQoIiIpLCAkKG51bGwpLCAkKHVuZGVmaW5lZCksICQoZmFsc2Up
Ci0gICAgICAgIGlmICggIXNlbGVjdG9yICkgewotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0g
ICAgICAgIH0KLQotICAgICAgICAvLyBNZXRob2QgaW5pdCgpIGFjY2VwdHMgYW4gYWx0ZXJuYXRl
IHJvb3RqUXVlcnkKLSAgICAgICAgLy8gc28gbWlncmF0ZSBjYW4gc3VwcG9ydCBqUXVlcnkuc3Vi
IChnaC0yMTAxKQotICAgICAgICByb290ID0gcm9vdCB8fCByb290alF1ZXJ5OwotCi0gICAgICAg
IC8vIEhhbmRsZSBIVE1MIHN0cmluZ3MKLSAgICAgICAgaWYgKCB0eXBlb2Ygc2VsZWN0b3IgPT09
ICJzdHJpbmciICkgewotICAgICAgICAgICAgaWYgKCBzZWxlY3RvclsgMCBdID09PSAiPCIgJiYK
LSAgICAgICAgICAgICAgICBzZWxlY3Rvclsgc2VsZWN0b3IubGVuZ3RoIC0gMSBdID09PSAiPiIg
JiYKLSAgICAgICAgICAgICAgICBzZWxlY3Rvci5sZW5ndGggPj0gMyApIHsKLQotICAgICAgICAg
ICAgICAgIC8vIEFzc3VtZSB0aGF0IHN0cmluZ3MgdGhhdCBzdGFydCBhbmQgZW5kIHdpdGggPD4g
YXJlIEhUTUwgYW5kIHNraXAgdGhlIHJlZ2V4IGNoZWNrCi0gICAgICAgICAgICAgICAgbWF0Y2gg
PSBbIG51bGwsIHNlbGVjdG9yLCBudWxsIF07Ci0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgbWF0Y2ggPSBycXVpY2tFeHByLmV4ZWMoIHNlbGVjdG9yICk7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIC8vIE1hdGNoIGh0bWwgb3IgbWFrZSBzdXJlIG5vIGNvbnRl
eHQgaXMgc3BlY2lmaWVkIGZvciAjaWQKLSAgICAgICAgICAgIGlmICggbWF0Y2ggJiYgKCBtYXRj
aFsgMSBdIHx8ICFjb250ZXh0ICkgKSB7Ci0KLSAgICAgICAgICAgICAgICAvLyBIQU5ETEU6ICQo
aHRtbCkgLT4gJChhcnJheSkKLSAgICAgICAgICAgICAgICBpZiAoIG1hdGNoWyAxIF0gKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGNvbnRleHQgPSBjb250ZXh0IGluc3RhbmNlb2YgalF1ZXJ5ID8g
Y29udGV4dFsgMCBdIDogY29udGV4dDsKLQotICAgICAgICAgICAgICAgICAgICAvLyBPcHRpb24g
dG8gcnVuIHNjcmlwdHMgaXMgdHJ1ZSBmb3IgYmFjay1jb21wYXQKLSAgICAgICAgICAgICAgICAg
ICAgLy8gSW50ZW50aW9uYWxseSBsZXQgdGhlIGVycm9yIGJlIHRocm93biBpZiBwYXJzZUhUTUwg
aXMgbm90IHByZXNlbnQKLSAgICAgICAgICAgICAgICAgICAgalF1ZXJ5Lm1lcmdlKCB0aGlzLCBq
UXVlcnkucGFyc2VIVE1MKAotICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hbIDEgXSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQgJiYgY29udGV4dC5ub2RlVHlwZSA/IGNvbnRl
eHQub3duZXJEb2N1bWVudCB8fCBjb250ZXh0IDogZG9jdW1lbnQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICB0cnVlCi0gICAgICAgICAgICAgICAgICAgICkgKTsKLQotICAgICAgICAgICAgICAg
ICAgICAvLyBIQU5ETEU6ICQoaHRtbCwgcHJvcHMpCi0gICAgICAgICAgICAgICAgICAgIGlmICgg
cnNpbmdsZVRhZy50ZXN0KCBtYXRjaFsgMSBdICkgJiYgalF1ZXJ5LmlzUGxhaW5PYmplY3QoIGNv
bnRleHQgKSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIG1hdGNoIGluIGNvbnRl
eHQgKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQcm9wZXJ0aWVzIG9mIGNv
bnRleHQgYXJlIGNhbGxlZCBhcyBtZXRob2RzIGlmIHBvc3NpYmxlCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggdGhpc1sgbWF0Y2ggXSApICkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzWyBtYXRjaCBdKCBjb250ZXh0WyBt
YXRjaCBdICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAuLi5hbmQgb3RoZXJ3
aXNlIHNldCBhcyBhdHRyaWJ1dGVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hdHRyKCBtYXRjaCwgY29u
dGV4dFsgbWF0Y2ggXSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0aGlzOwotCi0gICAgICAgICAgICAgICAgLy8gSEFORExFOiAkKCNpZCkK
LSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBlbGVtID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoIG1hdGNoWyAyIF0gKTsKLQotICAgICAgICAgICAgICAgICAg
ICAvLyBTdXBwb3J0OiBCbGFja2JlcnJ5IDQuNgotICAgICAgICAgICAgICAgICAgICAvLyBnRUJJ
RCByZXR1cm5zIG5vZGVzIG5vIGxvbmdlciBpbiB0aGUgZG9jdW1lbnQgKCM2OTYzKQotICAgICAg
ICAgICAgICAgICAgICBpZiAoIGVsZW0gJiYgZWxlbS5wYXJlbnROb2RlICkgewotCi0gICAgICAg
ICAgICAgICAgICAgICAgICAvLyBJbmplY3QgdGhlIGVsZW1lbnQgZGlyZWN0bHkgaW50byB0aGUg
alF1ZXJ5IG9iamVjdAotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sZW5ndGggPSAxOwot
ICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1sgMCBdID0gZWxlbTsKLSAgICAgICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dCA9IGRvY3VtZW50Owot
ICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdG9yID0gc2VsZWN0b3I7Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
Ly8gSEFORExFOiAkKGV4cHIsICQoLi4uKSkKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoICFjb250
ZXh0IHx8IGNvbnRleHQuanF1ZXJ5ICkgewotICAgICAgICAgICAgICAgIHJldHVybiAoIGNvbnRl
eHQgfHwgcm9vdCApLmZpbmQoIHNlbGVjdG9yICk7Ci0KLSAgICAgICAgICAgIC8vIEhBTkRMRTog
JChleHByLCBjb250ZXh0KQotICAgICAgICAgICAgLy8gKHdoaWNoIGlzIGp1c3QgZXF1aXZhbGVu
dCB0bzogJChjb250ZXh0KS5maW5kKGV4cHIpCi0gICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yKCBjb250ZXh0ICkuZmluZCggc2VsZWN0
b3IgKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAvLyBIQU5ETEU6ICQoRE9NRWxlbWVudCkK
LSAgICAgICAgfSBlbHNlIGlmICggc2VsZWN0b3Iubm9kZVR5cGUgKSB7Ci0gICAgICAgICAgICB0
aGlzLmNvbnRleHQgPSB0aGlzWyAwIF0gPSBzZWxlY3RvcjsKLSAgICAgICAgICAgIHRoaXMubGVu
Z3RoID0gMTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotCi0gICAgICAgIC8vIEhBTkRMRTog
JChmdW5jdGlvbikKLSAgICAgICAgLy8gU2hvcnRjdXQgZm9yIGRvY3VtZW50IHJlYWR5Ci0gICAg
ICAgIH0gZWxzZSBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBzZWxlY3RvciApICkgewotICAgICAg
ICAgICAgcmV0dXJuIHJvb3QucmVhZHkgIT09IHVuZGVmaW5lZCA/Ci0gICAgICAgICAgICAgICAg
cm9vdC5yZWFkeSggc2VsZWN0b3IgKSA6Ci0KLSAgICAgICAgICAgICAgICAvLyBFeGVjdXRlIGlt
bWVkaWF0ZWx5IGlmIHJlYWR5IGlzIG5vdCBwcmVzZW50Ci0gICAgICAgICAgICAgICAgc2VsZWN0
b3IoIGpRdWVyeSApOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCBzZWxlY3Rvci5zZWxlY3Rv
ciAhPT0gdW5kZWZpbmVkICkgewotICAgICAgICAgICAgdGhpcy5zZWxlY3RvciA9IHNlbGVjdG9y
LnNlbGVjdG9yOwotICAgICAgICAgICAgdGhpcy5jb250ZXh0ID0gc2VsZWN0b3IuY29udGV4dDsK
LSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBqUXVlcnkubWFrZUFycmF5KCBzZWxlY3Rvciwg
dGhpcyApOwotICAgIH07Ci0KLS8vIEdpdmUgdGhlIGluaXQgZnVuY3Rpb24gdGhlIGpRdWVyeSBw
cm90b3R5cGUgZm9yIGxhdGVyIGluc3RhbnRpYXRpb24KLWluaXQucHJvdG90eXBlID0galF1ZXJ5
LmZuOwotCi0vLyBJbml0aWFsaXplIGNlbnRyYWwgcmVmZXJlbmNlCi1yb290alF1ZXJ5ID0galF1
ZXJ5KCBkb2N1bWVudCApOwotCi0KLXZhciBycGFyZW50c3ByZXYgPSAvXig/OnBhcmVudHN8cHJl
dig/OlVudGlsfEFsbCkpLywKLQotICAgIC8vIE1ldGhvZHMgZ3VhcmFudGVlZCB0byBwcm9kdWNl
IGEgdW5pcXVlIHNldCB3aGVuIHN0YXJ0aW5nIGZyb20gYSB1bmlxdWUgc2V0Ci0gICAgZ3VhcmFu
dGVlZFVuaXF1ZSA9IHsKLSAgICAgICAgY2hpbGRyZW46IHRydWUsCi0gICAgICAgIGNvbnRlbnRz
OiB0cnVlLAotICAgICAgICBuZXh0OiB0cnVlLAotICAgICAgICBwcmV2OiB0cnVlCi0gICAgfTsK
LQotalF1ZXJ5LmZuLmV4dGVuZCggewotICAgIGhhczogZnVuY3Rpb24oIHRhcmdldCApIHsKLSAg
ICAgICAgdmFyIHRhcmdldHMgPSBqUXVlcnkoIHRhcmdldCwgdGhpcyApLAotICAgICAgICAgICAg
bCA9IHRhcmdldHMubGVuZ3RoOwotCi0gICAgICAgIHJldHVybiB0aGlzLmZpbHRlciggZnVuY3Rp
b24oKSB7Ci0gICAgICAgICAgICB2YXIgaSA9IDA7Ci0gICAgICAgICAgICBmb3IgKCA7IGkgPCBs
OyBpKysgKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuY29udGFpbnMoIHRoaXMsIHRh
cmdldHNbIGkgXSApICkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gKTsKLSAgICB9LAotCi0gICAg
Y2xvc2VzdDogZnVuY3Rpb24oIHNlbGVjdG9ycywgY29udGV4dCApIHsKLSAgICAgICAgdmFyIGN1
ciwKLSAgICAgICAgICAgIGkgPSAwLAotICAgICAgICAgICAgbCA9IHRoaXMubGVuZ3RoLAotICAg
ICAgICAgICAgbWF0Y2hlZCA9IFtdLAotICAgICAgICAgICAgcG9zID0gcm5lZWRzQ29udGV4dC50
ZXN0KCBzZWxlY3RvcnMgKSB8fCB0eXBlb2Ygc2VsZWN0b3JzICE9PSAic3RyaW5nIiA/Ci0gICAg
ICAgICAgICAgICAgalF1ZXJ5KCBzZWxlY3RvcnMsIGNvbnRleHQgfHwgdGhpcy5jb250ZXh0ICkg
OgotICAgICAgICAgICAgICAgIDA7Ci0KLSAgICAgICAgZm9yICggOyBpIDwgbDsgaSsrICkgewot
ICAgICAgICAgICAgZm9yICggY3VyID0gdGhpc1sgaSBdOyBjdXIgJiYgY3VyICE9PSBjb250ZXh0
OyBjdXIgPSBjdXIucGFyZW50Tm9kZSApIHsKLQotICAgICAgICAgICAgICAgIC8vIEFsd2F5cyBz
a2lwIGRvY3VtZW50IGZyYWdtZW50cwotICAgICAgICAgICAgICAgIGlmICggY3VyLm5vZGVUeXBl
IDwgMTEgJiYgKCBwb3MgPwotICAgICAgICAgICAgICAgICAgICBwb3MuaW5kZXgoIGN1ciApID4g
LTEgOgotCi0gICAgICAgICAgICAgICAgICAgIC8vIERvbid0IHBhc3Mgbm9uLWVsZW1lbnRzIHRv
IFNpenpsZQotICAgICAgICAgICAgICAgICAgICBjdXIubm9kZVR5cGUgPT09IDEgJiYKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGpRdWVyeS5maW5kLm1hdGNoZXNTZWxlY3RvciggY3VyLCBzZWxl
Y3RvcnMgKSApICkgewotCi0gICAgICAgICAgICAgICAgICAgIG1hdGNoZWQucHVzaCggY3VyICk7
Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiB0aGlzLnB1c2hTdGFjayggbWF0Y2hl
ZC5sZW5ndGggPiAxID8galF1ZXJ5LnVuaXF1ZVNvcnQoIG1hdGNoZWQgKSA6IG1hdGNoZWQgKTsK
LSAgICB9LAotCi0gICAgLy8gRGV0ZXJtaW5lIHRoZSBwb3NpdGlvbiBvZiBhbiBlbGVtZW50IHdp
dGhpbiB0aGUgc2V0Ci0gICAgaW5kZXg6IGZ1bmN0aW9uKCBlbGVtICkgewotCi0gICAgICAgIC8v
IE5vIGFyZ3VtZW50LCByZXR1cm4gaW5kZXggaW4gcGFyZW50Ci0gICAgICAgIGlmICggIWVsZW0g
KSB7Ci0gICAgICAgICAgICByZXR1cm4gKCB0aGlzWyAwIF0gJiYgdGhpc1sgMCBdLnBhcmVudE5v
ZGUgKSA/IHRoaXMuZmlyc3QoKS5wcmV2QWxsKCkubGVuZ3RoIDogLTE7Ci0gICAgICAgIH0KLQot
ICAgICAgICAvLyBJbmRleCBpbiBzZWxlY3RvcgotICAgICAgICBpZiAoIHR5cGVvZiBlbGVtID09
PSAic3RyaW5nIiApIHsKLSAgICAgICAgICAgIHJldHVybiBpbmRleE9mLmNhbGwoIGpRdWVyeSgg
ZWxlbSApLCB0aGlzWyAwIF0gKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIExvY2F0ZSB0aGUg
cG9zaXRpb24gb2YgdGhlIGRlc2lyZWQgZWxlbWVudAotICAgICAgICByZXR1cm4gaW5kZXhPZi5j
YWxsKCB0aGlzLAotCi0gICAgICAgICAgICAvLyBJZiBpdCByZWNlaXZlcyBhIGpRdWVyeSBvYmpl
Y3QsIHRoZSBmaXJzdCBlbGVtZW50IGlzIHVzZWQKLSAgICAgICAgICAgIGVsZW0uanF1ZXJ5ID8g
ZWxlbVsgMCBdIDogZWxlbQotICAgICAgICApOwotICAgIH0sCi0KLSAgICBhZGQ6IGZ1bmN0aW9u
KCBzZWxlY3RvciwgY29udGV4dCApIHsKLSAgICAgICAgcmV0dXJuIHRoaXMucHVzaFN0YWNrKAot
ICAgICAgICAgICAgalF1ZXJ5LnVuaXF1ZVNvcnQoCi0gICAgICAgICAgICAgICAgalF1ZXJ5Lm1l
cmdlKCB0aGlzLmdldCgpLCBqUXVlcnkoIHNlbGVjdG9yLCBjb250ZXh0ICkgKQotICAgICAgICAg
ICAgKQotICAgICAgICApOwotICAgIH0sCi0KLSAgICBhZGRCYWNrOiBmdW5jdGlvbiggc2VsZWN0
b3IgKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLmFkZCggc2VsZWN0b3IgPT0gbnVsbCA/Ci0gICAg
ICAgICAgICB0aGlzLnByZXZPYmplY3QgOiB0aGlzLnByZXZPYmplY3QuZmlsdGVyKCBzZWxlY3Rv
ciApCi0gICAgICAgICk7Ci0gICAgfQotfSApOwotCi1mdW5jdGlvbiBzaWJsaW5nKCBjdXIsIGRp
ciApIHsKLSAgICB3aGlsZSAoICggY3VyID0gY3VyWyBkaXIgXSApICYmIGN1ci5ub2RlVHlwZSAh
PT0gMSApIHt9Ci0gICAgcmV0dXJuIGN1cjsKLX0KLQotalF1ZXJ5LmVhY2goIHsKLSAgICBwYXJl
bnQ6IGZ1bmN0aW9uKCBlbGVtICkgewotICAgICAgICB2YXIgcGFyZW50ID0gZWxlbS5wYXJlbnRO
b2RlOwotICAgICAgICByZXR1cm4gcGFyZW50ICYmIHBhcmVudC5ub2RlVHlwZSAhPT0gMTEgPyBw
YXJlbnQgOiBudWxsOwotICAgIH0sCi0gICAgcGFyZW50czogZnVuY3Rpb24oIGVsZW0gKSB7Ci0g
ICAgICAgIHJldHVybiBkaXIoIGVsZW0sICJwYXJlbnROb2RlIiApOwotICAgIH0sCi0gICAgcGFy
ZW50c1VudGlsOiBmdW5jdGlvbiggZWxlbSwgaSwgdW50aWwgKSB7Ci0gICAgICAgIHJldHVybiBk
aXIoIGVsZW0sICJwYXJlbnROb2RlIiwgdW50aWwgKTsKLSAgICB9LAotICAgIG5leHQ6IGZ1bmN0
aW9uKCBlbGVtICkgewotICAgICAgICByZXR1cm4gc2libGluZyggZWxlbSwgIm5leHRTaWJsaW5n
IiApOwotICAgIH0sCi0gICAgcHJldjogZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgICAgIHJldHVy
biBzaWJsaW5nKCBlbGVtLCAicHJldmlvdXNTaWJsaW5nIiApOwotICAgIH0sCi0gICAgbmV4dEFs
bDogZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgICAgIHJldHVybiBkaXIoIGVsZW0sICJuZXh0U2li
bGluZyIgKTsKLSAgICB9LAotICAgIHByZXZBbGw6IGZ1bmN0aW9uKCBlbGVtICkgewotICAgICAg
ICByZXR1cm4gZGlyKCBlbGVtLCAicHJldmlvdXNTaWJsaW5nIiApOwotICAgIH0sCi0gICAgbmV4
dFVudGlsOiBmdW5jdGlvbiggZWxlbSwgaSwgdW50aWwgKSB7Ci0gICAgICAgIHJldHVybiBkaXIo
IGVsZW0sICJuZXh0U2libGluZyIsIHVudGlsICk7Ci0gICAgfSwKLSAgICBwcmV2VW50aWw6IGZ1
bmN0aW9uKCBlbGVtLCBpLCB1bnRpbCApIHsKLSAgICAgICAgcmV0dXJuIGRpciggZWxlbSwgInBy
ZXZpb3VzU2libGluZyIsIHVudGlsICk7Ci0gICAgfSwKLSAgICBzaWJsaW5nczogZnVuY3Rpb24o
IGVsZW0gKSB7Ci0gICAgICAgIHJldHVybiBzaWJsaW5ncyggKCBlbGVtLnBhcmVudE5vZGUgfHwg
e30gKS5maXJzdENoaWxkLCBlbGVtICk7Ci0gICAgfSwKLSAgICBjaGlsZHJlbjogZnVuY3Rpb24o
IGVsZW0gKSB7Ci0gICAgICAgIHJldHVybiBzaWJsaW5ncyggZWxlbS5maXJzdENoaWxkICk7Ci0g
ICAgfSwKLSAgICBjb250ZW50czogZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgICAgIHJldHVybiBl
bGVtLmNvbnRlbnREb2N1bWVudCB8fCBqUXVlcnkubWVyZ2UoIFtdLCBlbGVtLmNoaWxkTm9kZXMg
KTsKLSAgICB9Ci19LCBmdW5jdGlvbiggbmFtZSwgZm4gKSB7Ci0gICAgalF1ZXJ5LmZuWyBuYW1l
IF0gPSBmdW5jdGlvbiggdW50aWwsIHNlbGVjdG9yICkgewotICAgICAgICB2YXIgbWF0Y2hlZCA9
IGpRdWVyeS5tYXAoIHRoaXMsIGZuLCB1bnRpbCApOwotCi0gICAgICAgIGlmICggbmFtZS5zbGlj
ZSggLTUgKSAhPT0gIlVudGlsIiApIHsKLSAgICAgICAgICAgIHNlbGVjdG9yID0gdW50aWw7Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAoIHNlbGVjdG9yICYmIHR5cGVvZiBzZWxlY3RvciA9PT0g
InN0cmluZyIgKSB7Ci0gICAgICAgICAgICBtYXRjaGVkID0galF1ZXJ5LmZpbHRlciggc2VsZWN0
b3IsIG1hdGNoZWQgKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICggdGhpcy5sZW5ndGggPiAx
ICkgewotCi0gICAgICAgICAgICAvLyBSZW1vdmUgZHVwbGljYXRlcwotICAgICAgICAgICAgaWYg
KCAhZ3VhcmFudGVlZFVuaXF1ZVsgbmFtZSBdICkgewotICAgICAgICAgICAgICAgIGpRdWVyeS51
bmlxdWVTb3J0KCBtYXRjaGVkICk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFJl
dmVyc2Ugb3JkZXIgZm9yIHBhcmVudHMqIGFuZCBwcmV2LWRlcml2YXRpdmVzCi0gICAgICAgICAg
ICBpZiAoIHJwYXJlbnRzcHJldi50ZXN0KCBuYW1lICkgKSB7Ci0gICAgICAgICAgICAgICAgbWF0
Y2hlZC5yZXZlcnNlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1
cm4gdGhpcy5wdXNoU3RhY2soIG1hdGNoZWQgKTsKLSAgICB9OwotfSApOwotdmFyIHJub3R3aGl0
ZSA9ICggL1xTKy9nICk7Ci0KLQotCi0vLyBDb252ZXJ0IFN0cmluZy1mb3JtYXR0ZWQgb3B0aW9u
cyBpbnRvIE9iamVjdC1mb3JtYXR0ZWQgb25lcwotZnVuY3Rpb24gY3JlYXRlT3B0aW9ucyggb3B0
aW9ucyApIHsKLSAgICB2YXIgb2JqZWN0ID0ge307Ci0gICAgalF1ZXJ5LmVhY2goIG9wdGlvbnMu
bWF0Y2goIHJub3R3aGl0ZSApIHx8IFtdLCBmdW5jdGlvbiggXywgZmxhZyApIHsKLSAgICAgICAg
b2JqZWN0WyBmbGFnIF0gPSB0cnVlOwotICAgIH0gKTsKLSAgICByZXR1cm4gb2JqZWN0OwotfQot
Ci0vKgotICogQ3JlYXRlIGEgY2FsbGJhY2sgbGlzdCB1c2luZyB0aGUgZm9sbG93aW5nIHBhcmFt
ZXRlcnM6Ci0gKgotICogIG9wdGlvbnM6IGFuIG9wdGlvbmFsIGxpc3Qgb2Ygc3BhY2Utc2VwYXJh
dGVkIG9wdGlvbnMgdGhhdCB3aWxsIGNoYW5nZSBob3cKLSAqICAgICAgICAgIHRoZSBjYWxsYmFj
ayBsaXN0IGJlaGF2ZXMgb3IgYSBtb3JlIHRyYWRpdGlvbmFsIG9wdGlvbiBvYmplY3QKLSAqCi0g
KiBCeSBkZWZhdWx0IGEgY2FsbGJhY2sgbGlzdCB3aWxsIGFjdCBsaWtlIGFuIGV2ZW50IGNhbGxi
YWNrIGxpc3QgYW5kIGNhbiBiZQotICogImZpcmVkIiBtdWx0aXBsZSB0aW1lcy4KLSAqCi0gKiBQ
b3NzaWJsZSBvcHRpb25zOgotICoKLSAqICBvbmNlOiAgICAgICAgICAgd2lsbCBlbnN1cmUgdGhl
IGNhbGxiYWNrIGxpc3QgY2FuIG9ubHkgYmUgZmlyZWQgb25jZSAobGlrZSBhIERlZmVycmVkKQot
ICoKLSAqICBtZW1vcnk6ICAgICAgICAgd2lsbCBrZWVwIHRyYWNrIG9mIHByZXZpb3VzIHZhbHVl
cyBhbmQgd2lsbCBjYWxsIGFueSBjYWxsYmFjayBhZGRlZAotICogICAgICAgICAgICAgICAgICBh
ZnRlciB0aGUgbGlzdCBoYXMgYmVlbiBmaXJlZCByaWdodCBhd2F5IHdpdGggdGhlIGxhdGVzdCAi
bWVtb3JpemVkIgotICogICAgICAgICAgICAgICAgICB2YWx1ZXMgKGxpa2UgYSBEZWZlcnJlZCkK
LSAqCi0gKiAgdW5pcXVlOiAgICAgICAgIHdpbGwgZW5zdXJlIGEgY2FsbGJhY2sgY2FuIG9ubHkg
YmUgYWRkZWQgb25jZSAobm8gZHVwbGljYXRlIGluIHRoZSBsaXN0KQotICoKLSAqICBzdG9wT25G
YWxzZTogICAgaW50ZXJydXB0IGNhbGxpbmdzIHdoZW4gYSBjYWxsYmFjayByZXR1cm5zIGZhbHNl
Ci0gKgotICovCi1qUXVlcnkuQ2FsbGJhY2tzID0gZnVuY3Rpb24oIG9wdGlvbnMgKSB7Ci0KLSAg
ICAvLyBDb252ZXJ0IG9wdGlvbnMgZnJvbSBTdHJpbmctZm9ybWF0dGVkIHRvIE9iamVjdC1mb3Jt
YXR0ZWQgaWYgbmVlZGVkCi0gICAgLy8gKHdlIGNoZWNrIGluIGNhY2hlIGZpcnN0KQotICAgIG9w
dGlvbnMgPSB0eXBlb2Ygb3B0aW9ucyA9PT0gInN0cmluZyIgPwotICAgICAgICBjcmVhdGVPcHRp
b25zKCBvcHRpb25zICkgOgotICAgICAgICBqUXVlcnkuZXh0ZW5kKCB7fSwgb3B0aW9ucyApOwot
Ci0gICAgdmFyIC8vIEZsYWcgdG8ga25vdyBpZiBsaXN0IGlzIGN1cnJlbnRseSBmaXJpbmcKLSAg
ICAgICAgZmlyaW5nLAotCi0gICAgICAgIC8vIExhc3QgZmlyZSB2YWx1ZSBmb3Igbm9uLWZvcmdl
dHRhYmxlIGxpc3RzCi0gICAgICAgIG1lbW9yeSwKLQotICAgICAgICAvLyBGbGFnIHRvIGtub3cg
aWYgbGlzdCB3YXMgYWxyZWFkeSBmaXJlZAotICAgICAgICBmaXJlZCwKLQotICAgICAgICAvLyBG
bGFnIHRvIHByZXZlbnQgZmlyaW5nCi0gICAgICAgIGxvY2tlZCwKLQotICAgICAgICAvLyBBY3R1
YWwgY2FsbGJhY2sgbGlzdAotICAgICAgICBsaXN0ID0gW10sCi0KLSAgICAgICAgLy8gUXVldWUg
b2YgZXhlY3V0aW9uIGRhdGEgZm9yIHJlcGVhdGFibGUgbGlzdHMKLSAgICAgICAgcXVldWUgPSBb
XSwKLQotICAgICAgICAvLyBJbmRleCBvZiBjdXJyZW50bHkgZmlyaW5nIGNhbGxiYWNrIChtb2Rp
ZmllZCBieSBhZGQvcmVtb3ZlIGFzIG5lZWRlZCkKLSAgICAgICAgZmlyaW5nSW5kZXggPSAtMSwK
LQotICAgICAgICAvLyBGaXJlIGNhbGxiYWNrcwotICAgICAgICBmaXJlID0gZnVuY3Rpb24oKSB7
Ci0KLSAgICAgICAgICAgIC8vIEVuZm9yY2Ugc2luZ2xlLWZpcmluZwotICAgICAgICAgICAgbG9j
a2VkID0gb3B0aW9ucy5vbmNlOwotCi0gICAgICAgICAgICAvLyBFeGVjdXRlIGNhbGxiYWNrcyBm
b3IgYWxsIHBlbmRpbmcgZXhlY3V0aW9ucywKLSAgICAgICAgICAgIC8vIHJlc3BlY3RpbmcgZmly
aW5nSW5kZXggb3ZlcnJpZGVzIGFuZCBydW50aW1lIGNoYW5nZXMKLSAgICAgICAgICAgIGZpcmVk
ID0gZmlyaW5nID0gdHJ1ZTsKLSAgICAgICAgICAgIGZvciAoIDsgcXVldWUubGVuZ3RoOyBmaXJp
bmdJbmRleCA9IC0xICkgewotICAgICAgICAgICAgICAgIG1lbW9yeSA9IHF1ZXVlLnNoaWZ0KCk7
Ci0gICAgICAgICAgICAgICAgd2hpbGUgKCArK2ZpcmluZ0luZGV4IDwgbGlzdC5sZW5ndGggKSB7
Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gUnVuIGNhbGxiYWNrIGFuZCBjaGVjayBmb3IgZWFy
bHkgdGVybWluYXRpb24KLSAgICAgICAgICAgICAgICAgICAgaWYgKCBsaXN0WyBmaXJpbmdJbmRl
eCBdLmFwcGx5KCBtZW1vcnlbIDAgXSwgbWVtb3J5WyAxIF0gKSA9PT0gZmFsc2UgJiYKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuc3RvcE9uRmFsc2UgKSB7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIEp1bXAgdG8gZW5kIGFuZCBmb3JnZXQgdGhlIGRhdGEgc28gLmFkZCBk
b2Vzbid0IHJlLWZpcmUKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpcmluZ0luZGV4ID0gbGlz
dC5sZW5ndGg7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnkgPSBmYWxzZTsKLSAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgLy8gRm9yZ2V0IHRoZSBkYXRhIGlmIHdlJ3JlIGRvbmUgd2l0aCBpdAotICAgICAg
ICAgICAgaWYgKCAhb3B0aW9ucy5tZW1vcnkgKSB7Ci0gICAgICAgICAgICAgICAgbWVtb3J5ID0g
ZmFsc2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZpcmluZyA9IGZhbHNlOwotCi0g
ICAgICAgICAgICAvLyBDbGVhbiB1cCBpZiB3ZSdyZSBkb25lIGZpcmluZyBmb3IgZ29vZAotICAg
ICAgICAgICAgaWYgKCBsb2NrZWQgKSB7Ci0KLSAgICAgICAgICAgICAgICAvLyBLZWVwIGFuIGVt
cHR5IGxpc3QgaWYgd2UgaGF2ZSBkYXRhIGZvciBmdXR1cmUgYWRkIGNhbGxzCi0gICAgICAgICAg
ICAgICAgaWYgKCBtZW1vcnkgKSB7Ci0gICAgICAgICAgICAgICAgICAgIGxpc3QgPSBbXTsKLQot
ICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgdGhpcyBvYmplY3QgaXMgc3BlbnQKLSAgICAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBsaXN0ID0gIiI7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9LAotCi0gICAgICAgIC8vIEFj
dHVhbCBDYWxsYmFja3Mgb2JqZWN0Ci0gICAgICAgIHNlbGYgPSB7Ci0KLSAgICAgICAgICAgIC8v
IEFkZCBhIGNhbGxiYWNrIG9yIGEgY29sbGVjdGlvbiBvZiBjYWxsYmFja3MgdG8gdGhlIGxpc3QK
LSAgICAgICAgICAgIGFkZDogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCBsaXN0
ICkgewotCi0gICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIGhhdmUgbWVtb3J5IGZyb20gYSBw
YXN0IHJ1biwgd2Ugc2hvdWxkIGZpcmUgYWZ0ZXIgYWRkaW5nCi0gICAgICAgICAgICAgICAgICAg
IGlmICggbWVtb3J5ICYmICFmaXJpbmcgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmaXJp
bmdJbmRleCA9IGxpc3QubGVuZ3RoIC0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXVl
LnB1c2goIG1lbW9yeSApOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICAgICAgKCBmdW5jdGlvbiBhZGQoIGFyZ3MgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBq
UXVlcnkuZWFjaCggYXJncywgZnVuY3Rpb24oIF8sIGFyZyApIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBhcmcgKSApIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCAhb3B0aW9ucy51bmlxdWUgfHwgIXNlbGYuaGFzKCBh
cmcgKSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QucHVzaCgg
YXJnICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBhcmcgJiYgYXJnLmxlbmd0aCAmJiBqUXVlcnkudHlw
ZSggYXJnICkgIT09ICJzdHJpbmciICkgewotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIEluc3BlY3QgcmVjdXJzaXZlbHkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYWRkKCBhcmcgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB9ICk7Ci0gICAgICAgICAgICAgICAgICAgIH0gKSggYXJndW1lbnRzICk7
Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCBtZW1vcnkgJiYgIWZpcmluZyApIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGZpcmUoKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgICAgIH0s
Ci0KLSAgICAgICAgICAgIC8vIFJlbW92ZSBhIGNhbGxiYWNrIGZyb20gdGhlIGxpc3QKLSAgICAg
ICAgICAgIHJlbW92ZTogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgalF1ZXJ5LmVhY2go
IGFyZ3VtZW50cywgZnVuY3Rpb24oIF8sIGFyZyApIHsKLSAgICAgICAgICAgICAgICAgICAgdmFy
IGluZGV4OwotICAgICAgICAgICAgICAgICAgICB3aGlsZSAoICggaW5kZXggPSBqUXVlcnkuaW5B
cnJheSggYXJnLCBsaXN0LCBpbmRleCApICkgPiAtMSApIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGxpc3Quc3BsaWNlKCBpbmRleCwgMSApOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAv
LyBIYW5kbGUgZmlyaW5nIGluZGV4ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaW5k
ZXggPD0gZmlyaW5nSW5kZXggKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyaW5n
SW5kZXgtLTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIH0gKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAg
ICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIC8vIENoZWNrIGlmIGEgZ2l2ZW4gY2FsbGJhY2sg
aXMgaW4gdGhlIGxpc3QuCi0gICAgICAgICAgICAvLyBJZiBubyBhcmd1bWVudCBpcyBnaXZlbiwg
cmV0dXJuIHdoZXRoZXIgb3Igbm90IGxpc3QgaGFzIGNhbGxiYWNrcyBhdHRhY2hlZC4KLSAgICAg
ICAgICAgIGhhczogZnVuY3Rpb24oIGZuICkgewotICAgICAgICAgICAgICAgIHJldHVybiBmbiA/
Ci0gICAgICAgICAgICAgICAgICAgIGpRdWVyeS5pbkFycmF5KCBmbiwgbGlzdCApID4gLTEgOgot
ICAgICAgICAgICAgICAgICAgICBsaXN0Lmxlbmd0aCA+IDA7Ci0gICAgICAgICAgICB9LAotCi0g
ICAgICAgICAgICAvLyBSZW1vdmUgYWxsIGNhbGxiYWNrcyBmcm9tIHRoZSBsaXN0Ci0gICAgICAg
ICAgICBlbXB0eTogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCBsaXN0ICkgewot
ICAgICAgICAgICAgICAgICAgICBsaXN0ID0gW107Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLy8g
RGlzYWJsZSAuZmlyZSBhbmQgLmFkZAotICAgICAgICAgICAgLy8gQWJvcnQgYW55IGN1cnJlbnQv
cGVuZGluZyBleGVjdXRpb25zCi0gICAgICAgICAgICAvLyBDbGVhciBhbGwgY2FsbGJhY2tzIGFu
ZCB2YWx1ZXMKLSAgICAgICAgICAgIGRpc2FibGU6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAg
ICAgIGxvY2tlZCA9IHF1ZXVlID0gW107Ci0gICAgICAgICAgICAgICAgbGlzdCA9IG1lbW9yeSA9
ICIiOwotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICAgICAgfSwKLSAgICAg
ICAgICAgIGRpc2FibGVkOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gIWxp
c3Q7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvLyBEaXNhYmxlIC5maXJlCi0gICAg
ICAgICAgICAvLyBBbHNvIGRpc2FibGUgLmFkZCB1bmxlc3Mgd2UgaGF2ZSBtZW1vcnkgKHNpbmNl
IGl0IHdvdWxkIGhhdmUgbm8gZWZmZWN0KQotICAgICAgICAgICAgLy8gQWJvcnQgYW55IHBlbmRp
bmcgZXhlY3V0aW9ucwotICAgICAgICAgICAgbG9jazogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAg
ICAgICAgbG9ja2VkID0gcXVldWUgPSBbXTsKLSAgICAgICAgICAgICAgICBpZiAoICFtZW1vcnkg
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGxpc3QgPSBtZW1vcnkgPSAiIjsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgICAgICB9LAotICAg
ICAgICAgICAgbG9ja2VkOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gISFs
b2NrZWQ7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAvLyBDYWxsIGFsbCBjYWxsYmFj
a3Mgd2l0aCB0aGUgZ2l2ZW4gY29udGV4dCBhbmQgYXJndW1lbnRzCi0gICAgICAgICAgICBmaXJl
V2l0aDogZnVuY3Rpb24oIGNvbnRleHQsIGFyZ3MgKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCAh
bG9ja2VkICkgewotICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJncyB8fCBbXTsKLSAgICAg
ICAgICAgICAgICAgICAgYXJncyA9IFsgY29udGV4dCwgYXJncy5zbGljZSA/IGFyZ3Muc2xpY2Uo
KSA6IGFyZ3MgXTsKLSAgICAgICAgICAgICAgICAgICAgcXVldWUucHVzaCggYXJncyApOwotICAg
ICAgICAgICAgICAgICAgICBpZiAoICFmaXJpbmcgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBmaXJlKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAv
LyBDYWxsIGFsbCB0aGUgY2FsbGJhY2tzIHdpdGggdGhlIGdpdmVuIGFyZ3VtZW50cwotICAgICAg
ICAgICAgZmlyZTogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgc2VsZi5maXJlV2l0aCgg
dGhpcywgYXJndW1lbnRzICk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAg
ICAgICB9LAotCi0gICAgICAgICAgICAvLyBUbyBrbm93IGlmIHRoZSBjYWxsYmFja3MgaGF2ZSBh
bHJlYWR5IGJlZW4gY2FsbGVkIGF0IGxlYXN0IG9uY2UKLSAgICAgICAgICAgIGZpcmVkOiBmdW5j
dGlvbigpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gISFmaXJlZDsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfTsKLQotICAgIHJldHVybiBzZWxmOwotfTsKLQotCi1qUXVlcnkuZXh0ZW5kKCB7
Ci0KLSAgICBEZWZlcnJlZDogZnVuY3Rpb24oIGZ1bmMgKSB7Ci0gICAgICAgIHZhciB0dXBsZXMg
PSBbCi0KLSAgICAgICAgICAgICAgICAvLyBhY3Rpb24sIGFkZCBsaXN0ZW5lciwgbGlzdGVuZXIg
bGlzdCwgZmluYWwgc3RhdGUKLSAgICAgICAgICAgICAgICBbICJyZXNvbHZlIiwgImRvbmUiLCBq
UXVlcnkuQ2FsbGJhY2tzKCAib25jZSBtZW1vcnkiICksICJyZXNvbHZlZCIgXSwKLSAgICAgICAg
ICAgICAgICBbICJyZWplY3QiLCAiZmFpbCIsIGpRdWVyeS5DYWxsYmFja3MoICJvbmNlIG1lbW9y
eSIgKSwgInJlamVjdGVkIiBdLAotICAgICAgICAgICAgICAgIFsgIm5vdGlmeSIsICJwcm9ncmVz
cyIsIGpRdWVyeS5DYWxsYmFja3MoICJtZW1vcnkiICkgXQotICAgICAgICAgICAgXSwKLSAgICAg
ICAgICAgIHN0YXRlID0gInBlbmRpbmciLAotICAgICAgICAgICAgcHJvbWlzZSA9IHsKLSAgICAg
ICAgICAgICAgICBzdGF0ZTogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBzdGF0ZTsKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIGFsd2F5czogZnVu
Y3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLmRvbmUoIGFyZ3VtZW50cyAp
LmZhaWwoIGFyZ3VtZW50cyApOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAg
ICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHRoZW46IGZ1bmN0aW9uKCAvKiBmbkRv
bmUsIGZuRmFpbCwgZm5Qcm9ncmVzcyAqLyApIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGZu
cyA9IGFyZ3VtZW50czsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5EZWZlcnJl
ZCggZnVuY3Rpb24oIG5ld0RlZmVyICkgewotICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5
LmVhY2goIHR1cGxlcywgZnVuY3Rpb24oIGksIHR1cGxlICkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZhciBmbiA9IGpRdWVyeS5pc0Z1bmN0aW9uKCBmbnNbIGkgXSApICYmIGZuc1sg
aSBdOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGVmZXJyZWRbIGRvbmUgfCBm
YWlsIHwgcHJvZ3Jlc3MgXSBmb3IgZm9yd2FyZGluZyBhY3Rpb25zIHRvIG5ld0RlZmVyCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWRbIHR1cGxlWyAxIF0gXSggZnVuY3Rpb24o
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXR1cm5lZCA9IGZuICYm
IGZuLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCByZXR1cm5lZCAmJiBqUXVlcnkuaXNGdW5jdGlvbiggcmV0dXJuZWQucHJvbWlz
ZSApICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuZWQucHJv
bWlzZSgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnByb2dyZXNz
KCBuZXdEZWZlci5ub3RpZnkgKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC5kb25lKCBuZXdEZWZlci5yZXNvbHZlICkKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAuZmFpbCggbmV3RGVmZXIucmVqZWN0ICk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBuZXdEZWZlclsgdHVwbGVbIDAgXSArICJXaXRoIiBdKAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRoaXMgPT09IHByb21pc2UgPyBuZXdEZWZlci5wcm9taXNl
KCkgOiB0aGlzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZuID8g
WyByZXR1cm5lZCBdIDogYXJndW1lbnRzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfSApOwotICAgICAgICAgICAgICAgICAgICAgICAgfSApOwotICAgICAg
ICAgICAgICAgICAgICAgICAgZm5zID0gbnVsbDsKLSAgICAgICAgICAgICAgICAgICAgfSApLnBy
b21pc2UoKTsKLSAgICAgICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAgICAgLy8gR2V0IGEg
cHJvbWlzZSBmb3IgdGhpcyBkZWZlcnJlZAotICAgICAgICAgICAgICAgIC8vIElmIG9iaiBpcyBw
cm92aWRlZCwgdGhlIHByb21pc2UgYXNwZWN0IGlzIGFkZGVkIHRvIHRoZSBvYmplY3QKLSAgICAg
ICAgICAgICAgICBwcm9taXNlOiBmdW5jdGlvbiggb2JqICkgewotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gb2JqICE9IG51bGwgPyBqUXVlcnkuZXh0ZW5kKCBvYmosIHByb21pc2UgKSA6IHBy
b21pc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIGRl
ZmVycmVkID0ge307Ci0KLSAgICAgICAgLy8gS2VlcCBwaXBlIGZvciBiYWNrLWNvbXBhdAotICAg
ICAgICBwcm9taXNlLnBpcGUgPSBwcm9taXNlLnRoZW47Ci0KLSAgICAgICAgLy8gQWRkIGxpc3Qt
c3BlY2lmaWMgbWV0aG9kcwotICAgICAgICBqUXVlcnkuZWFjaCggdHVwbGVzLCBmdW5jdGlvbigg
aSwgdHVwbGUgKSB7Ci0gICAgICAgICAgICB2YXIgbGlzdCA9IHR1cGxlWyAyIF0sCi0gICAgICAg
ICAgICAgICAgc3RhdGVTdHJpbmcgPSB0dXBsZVsgMyBdOwotCi0gICAgICAgICAgICAvLyBwcm9t
aXNlWyBkb25lIHwgZmFpbCB8IHByb2dyZXNzIF0gPSBsaXN0LmFkZAotICAgICAgICAgICAgcHJv
bWlzZVsgdHVwbGVbIDEgXSBdID0gbGlzdC5hZGQ7Ci0KLSAgICAgICAgICAgIC8vIEhhbmRsZSBz
dGF0ZQotICAgICAgICAgICAgaWYgKCBzdGF0ZVN0cmluZyApIHsKLSAgICAgICAgICAgICAgICBs
aXN0LmFkZCggZnVuY3Rpb24oKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gc3RhdGUgPSBb
IHJlc29sdmVkIHwgcmVqZWN0ZWQgXQotICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IHN0YXRl
U3RyaW5nOwotCi0gICAgICAgICAgICAgICAgLy8gWyByZWplY3RfbGlzdCB8IHJlc29sdmVfbGlz
dCBdLmRpc2FibGU7IHByb2dyZXNzX2xpc3QubG9jawotICAgICAgICAgICAgICAgIH0sIHR1cGxl
c1sgaSBeIDEgXVsgMiBdLmRpc2FibGUsIHR1cGxlc1sgMiBdWyAyIF0ubG9jayApOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAvLyBkZWZlcnJlZFsgcmVzb2x2ZSB8IHJlamVjdCB8IG5v
dGlmeSBdCi0gICAgICAgICAgICBkZWZlcnJlZFsgdHVwbGVbIDAgXSBdID0gZnVuY3Rpb24oKSB7
Ci0gICAgICAgICAgICAgICAgZGVmZXJyZWRbIHR1cGxlWyAwIF0gKyAiV2l0aCIgXSggdGhpcyA9
PT0gZGVmZXJyZWQgPyBwcm9taXNlIDogdGhpcywgYXJndW1lbnRzICk7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgICAgICB9OwotICAgICAgICAgICAgZGVmZXJyZWRbIHR1
cGxlWyAwIF0gKyAiV2l0aCIgXSA9IGxpc3QuZmlyZVdpdGg7Ci0gICAgICAgIH0gKTsKLQotICAg
ICAgICAvLyBNYWtlIHRoZSBkZWZlcnJlZCBhIHByb21pc2UKLSAgICAgICAgcHJvbWlzZS5wcm9t
aXNlKCBkZWZlcnJlZCApOwotCi0gICAgICAgIC8vIENhbGwgZ2l2ZW4gZnVuYyBpZiBhbnkKLSAg
ICAgICAgaWYgKCBmdW5jICkgewotICAgICAgICAgICAgZnVuYy5jYWxsKCBkZWZlcnJlZCwgZGVm
ZXJyZWQgKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEFsbCBkb25lIQotICAgICAgICByZXR1
cm4gZGVmZXJyZWQ7Ci0gICAgfSwKLQotICAgIC8vIERlZmVycmVkIGhlbHBlcgotICAgIHdoZW46
IGZ1bmN0aW9uKCBzdWJvcmRpbmF0ZSAvKiAsIC4uLiwgc3Vib3JkaW5hdGVOICovICkgewotICAg
ICAgICB2YXIgaSA9IDAsCi0gICAgICAgICAgICByZXNvbHZlVmFsdWVzID0gc2xpY2UuY2FsbCgg
YXJndW1lbnRzICksCi0gICAgICAgICAgICBsZW5ndGggPSByZXNvbHZlVmFsdWVzLmxlbmd0aCwK
LQotICAgICAgICAgICAgLy8gdGhlIGNvdW50IG9mIHVuY29tcGxldGVkIHN1Ym9yZGluYXRlcwot
ICAgICAgICAgICAgcmVtYWluaW5nID0gbGVuZ3RoICE9PSAxIHx8Ci0gICAgICAgICAgICAgICAg
KCBzdWJvcmRpbmF0ZSAmJiBqUXVlcnkuaXNGdW5jdGlvbiggc3Vib3JkaW5hdGUucHJvbWlzZSAp
ICkgPyBsZW5ndGggOiAwLAotCi0gICAgICAgICAgICAvLyB0aGUgbWFzdGVyIERlZmVycmVkLgot
ICAgICAgICAgICAgLy8gSWYgcmVzb2x2ZVZhbHVlcyBjb25zaXN0IG9mIG9ubHkgYSBzaW5nbGUg
RGVmZXJyZWQsIGp1c3QgdXNlIHRoYXQuCi0gICAgICAgICAgICBkZWZlcnJlZCA9IHJlbWFpbmlu
ZyA9PT0gMSA/IHN1Ym9yZGluYXRlIDogalF1ZXJ5LkRlZmVycmVkKCksCi0KLSAgICAgICAgICAg
IC8vIFVwZGF0ZSBmdW5jdGlvbiBmb3IgYm90aCByZXNvbHZlIGFuZCBwcm9ncmVzcyB2YWx1ZXMK
LSAgICAgICAgICAgIHVwZGF0ZUZ1bmMgPSBmdW5jdGlvbiggaSwgY29udGV4dHMsIHZhbHVlcyAp
IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oIHZhbHVlICkgewotICAgICAgICAg
ICAgICAgICAgICBjb250ZXh0c1sgaSBdID0gdGhpczsKLSAgICAgICAgICAgICAgICAgICAgdmFs
dWVzWyBpIF0gPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IHNsaWNlLmNhbGwoIGFyZ3VtZW50cyAp
IDogdmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgIGlmICggdmFsdWVzID09PSBwcm9ncmVzc1Zh
bHVlcyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm5vdGlmeVdpdGgoIGNv
bnRleHRzLCB2YWx1ZXMgKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggISggLS1y
ZW1haW5pbmcgKSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLnJlc29sdmVX
aXRoKCBjb250ZXh0cywgdmFsdWVzICk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB9OwotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgcHJvZ3Jlc3NWYWx1ZXMs
IHByb2dyZXNzQ29udGV4dHMsIHJlc29sdmVDb250ZXh0czsKLQotICAgICAgICAvLyBBZGQgbGlz
dGVuZXJzIHRvIERlZmVycmVkIHN1Ym9yZGluYXRlczsgdHJlYXQgb3RoZXJzIGFzIHJlc29sdmVk
Ci0gICAgICAgIGlmICggbGVuZ3RoID4gMSApIHsKLSAgICAgICAgICAgIHByb2dyZXNzVmFsdWVz
ID0gbmV3IEFycmF5KCBsZW5ndGggKTsKLSAgICAgICAgICAgIHByb2dyZXNzQ29udGV4dHMgPSBu
ZXcgQXJyYXkoIGxlbmd0aCApOwotICAgICAgICAgICAgcmVzb2x2ZUNvbnRleHRzID0gbmV3IEFy
cmF5KCBsZW5ndGggKTsKLSAgICAgICAgICAgIGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkgewot
ICAgICAgICAgICAgICAgIGlmICggcmVzb2x2ZVZhbHVlc1sgaSBdICYmIGpRdWVyeS5pc0Z1bmN0
aW9uKCByZXNvbHZlVmFsdWVzWyBpIF0ucHJvbWlzZSApICkgewotICAgICAgICAgICAgICAgICAg
ICByZXNvbHZlVmFsdWVzWyBpIF0ucHJvbWlzZSgpCi0gICAgICAgICAgICAgICAgICAgICAgICAu
cHJvZ3Jlc3MoIHVwZGF0ZUZ1bmMoIGksIHByb2dyZXNzQ29udGV4dHMsIHByb2dyZXNzVmFsdWVz
ICkgKQotICAgICAgICAgICAgICAgICAgICAgICAgLmRvbmUoIHVwZGF0ZUZ1bmMoIGksIHJlc29s
dmVDb250ZXh0cywgcmVzb2x2ZVZhbHVlcyApICkKLSAgICAgICAgICAgICAgICAgICAgICAgIC5m
YWlsKCBkZWZlcnJlZC5yZWplY3QgKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICAtLXJlbWFpbmluZzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBJZiB3ZSdyZSBub3Qgd2FpdGluZyBvbiBhbnl0
aGluZywgcmVzb2x2ZSB0aGUgbWFzdGVyCi0gICAgICAgIGlmICggIXJlbWFpbmluZyApIHsKLSAg
ICAgICAgICAgIGRlZmVycmVkLnJlc29sdmVXaXRoKCByZXNvbHZlQ29udGV4dHMsIHJlc29sdmVW
YWx1ZXMgKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBkZWZlcnJlZC5wcm9taXNlKCk7
Ci0gICAgfQotfSApOwotCi0KLS8vIFRoZSBkZWZlcnJlZCB1c2VkIG9uIERPTSByZWFkeQotdmFy
IHJlYWR5TGlzdDsKLQotalF1ZXJ5LmZuLnJlYWR5ID0gZnVuY3Rpb24oIGZuICkgewotCi0gICAg
Ly8gQWRkIHRoZSBjYWxsYmFjawotICAgIGpRdWVyeS5yZWFkeS5wcm9taXNlKCkuZG9uZSggZm4g
KTsKLQotICAgIHJldHVybiB0aGlzOwotfTsKLQotalF1ZXJ5LmV4dGVuZCggewotCi0gICAgLy8g
SXMgdGhlIERPTSByZWFkeSB0byBiZSB1c2VkPyBTZXQgdG8gdHJ1ZSBvbmNlIGl0IG9jY3Vycy4K
LSAgICBpc1JlYWR5OiBmYWxzZSwKLQotICAgIC8vIEEgY291bnRlciB0byB0cmFjayBob3cgbWFu
eSBpdGVtcyB0byB3YWl0IGZvciBiZWZvcmUKLSAgICAvLyB0aGUgcmVhZHkgZXZlbnQgZmlyZXMu
IFNlZSAjNjc4MQotICAgIHJlYWR5V2FpdDogMSwKLQotICAgIC8vIEhvbGQgKG9yIHJlbGVhc2Up
IHRoZSByZWFkeSBldmVudAotICAgIGhvbGRSZWFkeTogZnVuY3Rpb24oIGhvbGQgKSB7Ci0gICAg
ICAgIGlmICggaG9sZCApIHsKLSAgICAgICAgICAgIGpRdWVyeS5yZWFkeVdhaXQrKzsKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGpRdWVyeS5yZWFkeSggdHJ1ZSApOwotICAgICAgICB9
Ci0gICAgfSwKLQotICAgIC8vIEhhbmRsZSB3aGVuIHRoZSBET00gaXMgcmVhZHkKLSAgICByZWFk
eTogZnVuY3Rpb24oIHdhaXQgKSB7Ci0KLSAgICAgICAgLy8gQWJvcnQgaWYgdGhlcmUgYXJlIHBl
bmRpbmcgaG9sZHMgb3Igd2UncmUgYWxyZWFkeSByZWFkeQotICAgICAgICBpZiAoIHdhaXQgPT09
IHRydWUgPyAtLWpRdWVyeS5yZWFkeVdhaXQgOiBqUXVlcnkuaXNSZWFkeSApIHsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFJlbWVtYmVyIHRoYXQgdGhlIERP
TSBpcyByZWFkeQotICAgICAgICBqUXVlcnkuaXNSZWFkeSA9IHRydWU7Ci0KLSAgICAgICAgLy8g
SWYgYSBub3JtYWwgRE9NIFJlYWR5IGV2ZW50IGZpcmVkLCBkZWNyZW1lbnQsIGFuZCB3YWl0IGlm
IG5lZWQgYmUKLSAgICAgICAgaWYgKCB3YWl0ICE9PSB0cnVlICYmIC0talF1ZXJ5LnJlYWR5V2Fp
dCA+IDAgKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBJ
ZiB0aGVyZSBhcmUgZnVuY3Rpb25zIGJvdW5kLCB0byBleGVjdXRlCi0gICAgICAgIHJlYWR5TGlz
dC5yZXNvbHZlV2l0aCggZG9jdW1lbnQsIFsgalF1ZXJ5IF0gKTsKLQotICAgICAgICAvLyBUcmln
Z2VyIGFueSBib3VuZCByZWFkeSBldmVudHMKLSAgICAgICAgaWYgKCBqUXVlcnkuZm4udHJpZ2dl
ckhhbmRsZXIgKSB7Ci0gICAgICAgICAgICBqUXVlcnkoIGRvY3VtZW50ICkudHJpZ2dlckhhbmRs
ZXIoICJyZWFkeSIgKTsKLSAgICAgICAgICAgIGpRdWVyeSggZG9jdW1lbnQgKS5vZmYoICJyZWFk
eSIgKTsKLSAgICAgICAgfQotICAgIH0KLX0gKTsKLQotLyoqCi0gKiBUaGUgcmVhZHkgZXZlbnQg
aGFuZGxlciBhbmQgc2VsZiBjbGVhbnVwIG1ldGhvZAotICovCi1mdW5jdGlvbiBjb21wbGV0ZWQo
KSB7Ci0gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciggIkRPTUNvbnRlbnRMb2FkZWQi
LCBjb21wbGV0ZWQgKTsKLSAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lciggImxvYWQiLCBj
b21wbGV0ZWQgKTsKLSAgICBqUXVlcnkucmVhZHkoKTsKLX0KLQotalF1ZXJ5LnJlYWR5LnByb21p
c2UgPSBmdW5jdGlvbiggb2JqICkgewotICAgIGlmICggIXJlYWR5TGlzdCApIHsKLQotICAgICAg
ICByZWFkeUxpc3QgPSBqUXVlcnkuRGVmZXJyZWQoKTsKLQotICAgICAgICAvLyBDYXRjaCBjYXNl
cyB3aGVyZSAkKGRvY3VtZW50KS5yZWFkeSgpIGlzIGNhbGxlZAotICAgICAgICAvLyBhZnRlciB0
aGUgYnJvd3NlciBldmVudCBoYXMgYWxyZWFkeSBvY2N1cnJlZC4KLSAgICAgICAgLy8gU3VwcG9y
dDogSUU5LTEwIG9ubHkKLSAgICAgICAgLy8gT2xkZXIgSUUgc29tZXRpbWVzIHNpZ25hbHMgImlu
dGVyYWN0aXZlIiB0b28gc29vbgotICAgICAgICBpZiAoIGRvY3VtZW50LnJlYWR5U3RhdGUgPT09
ICJjb21wbGV0ZSIgfHwKLSAgICAgICAgICAgICggZG9jdW1lbnQucmVhZHlTdGF0ZSAhPT0gImxv
YWRpbmciICYmICFkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGwgKSApIHsKLQotICAg
ICAgICAgICAgLy8gSGFuZGxlIGl0IGFzeW5jaHJvbm91c2x5IHRvIGFsbG93IHNjcmlwdHMgdGhl
IG9wcG9ydHVuaXR5IHRvIGRlbGF5IHJlYWR5Ci0gICAgICAgICAgICB3aW5kb3cuc2V0VGltZW91
dCggalF1ZXJ5LnJlYWR5ICk7Ci0KLSAgICAgICAgfSBlbHNlIHsKLQotICAgICAgICAgICAgLy8g
VXNlIHRoZSBoYW5keSBldmVudCBjYWxsYmFjawotICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZl
bnRMaXN0ZW5lciggIkRPTUNvbnRlbnRMb2FkZWQiLCBjb21wbGV0ZWQgKTsKLQotICAgICAgICAg
ICAgLy8gQSBmYWxsYmFjayB0byB3aW5kb3cub25sb2FkLCB0aGF0IHdpbGwgYWx3YXlzIHdvcmsK
LSAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCAibG9hZCIsIGNvbXBsZXRlZCAp
OwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZWFkeUxpc3QucHJvbWlzZSggb2JqICk7
Ci19OwotCi0vLyBLaWNrIG9mZiB0aGUgRE9NIHJlYWR5IGNoZWNrIGV2ZW4gaWYgdGhlIHVzZXIg
ZG9lcyBub3QKLWpRdWVyeS5yZWFkeS5wcm9taXNlKCk7Ci0KLQotCi0KLS8vIE11bHRpZnVuY3Rp
b25hbCBtZXRob2QgdG8gZ2V0IGFuZCBzZXQgdmFsdWVzIG9mIGEgY29sbGVjdGlvbgotLy8gVGhl
IHZhbHVlL3MgY2FuIG9wdGlvbmFsbHkgYmUgZXhlY3V0ZWQgaWYgaXQncyBhIGZ1bmN0aW9uCi12
YXIgYWNjZXNzID0gZnVuY3Rpb24oIGVsZW1zLCBmbiwga2V5LCB2YWx1ZSwgY2hhaW5hYmxlLCBl
bXB0eUdldCwgcmF3ICkgewotICAgIHZhciBpID0gMCwKLSAgICAgICAgbGVuID0gZWxlbXMubGVu
Z3RoLAotICAgICAgICBidWxrID0ga2V5ID09IG51bGw7Ci0KLSAgICAvLyBTZXRzIG1hbnkgdmFs
dWVzCi0gICAgaWYgKCBqUXVlcnkudHlwZSgga2V5ICkgPT09ICJvYmplY3QiICkgewotICAgICAg
ICBjaGFpbmFibGUgPSB0cnVlOwotICAgICAgICBmb3IgKCBpIGluIGtleSApIHsKLSAgICAgICAg
ICAgIGFjY2VzcyggZWxlbXMsIGZuLCBpLCBrZXlbIGkgXSwgdHJ1ZSwgZW1wdHlHZXQsIHJhdyAp
OwotICAgICAgICB9Ci0KLSAgICAvLyBTZXRzIG9uZSB2YWx1ZQotICAgIH0gZWxzZSBpZiAoIHZh
bHVlICE9PSB1bmRlZmluZWQgKSB7Ci0gICAgICAgIGNoYWluYWJsZSA9IHRydWU7Ci0KLSAgICAg
ICAgaWYgKCAhalF1ZXJ5LmlzRnVuY3Rpb24oIHZhbHVlICkgKSB7Ci0gICAgICAgICAgICByYXcg
PSB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCBidWxrICkgewotCi0gICAgICAgICAg
ICAvLyBCdWxrIG9wZXJhdGlvbnMgcnVuIGFnYWluc3QgdGhlIGVudGlyZSBzZXQKLSAgICAgICAg
ICAgIGlmICggcmF3ICkgewotICAgICAgICAgICAgICAgIGZuLmNhbGwoIGVsZW1zLCB2YWx1ZSAp
OwotICAgICAgICAgICAgICAgIGZuID0gbnVsbDsKLQotICAgICAgICAgICAgLy8gLi4uZXhjZXB0
IHdoZW4gZXhlY3V0aW5nIGZ1bmN0aW9uIHZhbHVlcwotICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICBidWxrID0gZm47Ci0gICAgICAgICAgICAgICAgZm4gPSBmdW5jdGlvbigg
ZWxlbSwga2V5LCB2YWx1ZSApIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJ1bGsuY2Fs
bCggalF1ZXJ5KCBlbGVtICksIHZhbHVlICk7Ci0gICAgICAgICAgICAgICAgfTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmICggZm4gKSB7Ci0gICAgICAgICAgICBmb3Ig
KCA7IGkgPCBsZW47IGkrKyApIHsKLSAgICAgICAgICAgICAgICBmbigKLSAgICAgICAgICAgICAg
ICAgICAgZWxlbXNbIGkgXSwga2V5LCByYXcgPwotICAgICAgICAgICAgICAgICAgICB2YWx1ZSA6
Ci0gICAgICAgICAgICAgICAgICAgIHZhbHVlLmNhbGwoIGVsZW1zWyBpIF0sIGksIGZuKCBlbGVt
c1sgaSBdLCBrZXkgKSApCi0gICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0KLQotICAgIHJldHVybiBjaGFpbmFibGUgPwotICAgICAgICBlbGVtcyA6Ci0K
LSAgICAgICAgLy8gR2V0cwotICAgICAgICBidWxrID8KLSAgICAgICAgICAgIGZuLmNhbGwoIGVs
ZW1zICkgOgotICAgICAgICAgICAgbGVuID8gZm4oIGVsZW1zWyAwIF0sIGtleSApIDogZW1wdHlH
ZXQ7Ci19OwotdmFyIGFjY2VwdERhdGEgPSBmdW5jdGlvbiggb3duZXIgKSB7Ci0KLSAgICAvLyBB
Y2NlcHRzIG9ubHk6Ci0gICAgLy8gIC0gTm9kZQotICAgIC8vICAgIC0gTm9kZS5FTEVNRU5UX05P
REUKLSAgICAvLyAgICAtIE5vZGUuRE9DVU1FTlRfTk9ERQotICAgIC8vICAtIE9iamVjdAotICAg
IC8vICAgIC0gQW55Ci0gICAgLyoganNoaW50IC1XMDE4ICovCi0gICAgcmV0dXJuIG93bmVyLm5v
ZGVUeXBlID09PSAxIHx8IG93bmVyLm5vZGVUeXBlID09PSA5IHx8ICEoICtvd25lci5ub2RlVHlw
ZSApOwotfTsKLQotCi0KLQotZnVuY3Rpb24gRGF0YSgpIHsKLSAgICB0aGlzLmV4cGFuZG8gPSBq
UXVlcnkuZXhwYW5kbyArIERhdGEudWlkKys7Ci19Ci0KLURhdGEudWlkID0gMTsKLQotRGF0YS5w
cm90b3R5cGUgPSB7Ci0KLSAgICByZWdpc3RlcjogZnVuY3Rpb24oIG93bmVyLCBpbml0aWFsICkg
ewotICAgICAgICB2YXIgdmFsdWUgPSBpbml0aWFsIHx8IHt9OwotCi0gICAgICAgIC8vIElmIGl0
IGlzIGEgbm9kZSB1bmxpa2VseSB0byBiZSBzdHJpbmdpZnktZWQgb3IgbG9vcGVkIG92ZXIKLSAg
ICAgICAgLy8gdXNlIHBsYWluIGFzc2lnbm1lbnQKLSAgICAgICAgaWYgKCBvd25lci5ub2RlVHlw
ZSApIHsKLSAgICAgICAgICAgIG93bmVyWyB0aGlzLmV4cGFuZG8gXSA9IHZhbHVlOwotCi0gICAg
ICAgIC8vIE90aGVyd2lzZSBzZWN1cmUgaXQgaW4gYSBub24tZW51bWVyYWJsZSwgbm9uLXdyaXRh
YmxlIHByb3BlcnR5Ci0gICAgICAgIC8vIGNvbmZpZ3VyYWJpbGl0eSBtdXN0IGJlIHRydWUgdG8g
YWxsb3cgdGhlIHByb3BlcnR5IHRvIGJlCi0gICAgICAgIC8vIGRlbGV0ZWQgd2l0aCB0aGUgZGVs
ZXRlIG9wZXJhdG9yCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBPYmplY3QuZGVmaW5l
UHJvcGVydHkoIG93bmVyLCB0aGlzLmV4cGFuZG8sIHsKLSAgICAgICAgICAgICAgICB2YWx1ZTog
dmFsdWUsCi0gICAgICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCi0gICAgICAgICAgICAgICAg
Y29uZmlndXJhYmxlOiB0cnVlCi0gICAgICAgICAgICB9ICk7Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIG93bmVyWyB0aGlzLmV4cGFuZG8gXTsKLSAgICB9LAotICAgIGNhY2hlOiBmdW5jdGlv
biggb3duZXIgKSB7Ci0KLSAgICAgICAgLy8gV2UgY2FuIGFjY2VwdCBkYXRhIGZvciBub24tZWxl
bWVudCBub2RlcyBpbiBtb2Rlcm4gYnJvd3NlcnMsCi0gICAgICAgIC8vIGJ1dCB3ZSBzaG91bGQg
bm90LCBzZWUgIzgzMzUuCi0gICAgICAgIC8vIEFsd2F5cyByZXR1cm4gYW4gZW1wdHkgb2JqZWN0
LgotICAgICAgICBpZiAoICFhY2NlcHREYXRhKCBvd25lciApICkgewotICAgICAgICAgICAgcmV0
dXJuIHt9OwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIG93bmVyIG9iamVj
dCBhbHJlYWR5IGhhcyBhIGNhY2hlCi0gICAgICAgIHZhciB2YWx1ZSA9IG93bmVyWyB0aGlzLmV4
cGFuZG8gXTsKLQotICAgICAgICAvLyBJZiBub3QsIGNyZWF0ZSBvbmUKLSAgICAgICAgaWYgKCAh
dmFsdWUgKSB7Ci0gICAgICAgICAgICB2YWx1ZSA9IHt9OwotCi0gICAgICAgICAgICAvLyBXZSBj
YW4gYWNjZXB0IGRhdGEgZm9yIG5vbi1lbGVtZW50IG5vZGVzIGluIG1vZGVybiBicm93c2VycywK
LSAgICAgICAgICAgIC8vIGJ1dCB3ZSBzaG91bGQgbm90LCBzZWUgIzgzMzUuCi0gICAgICAgICAg
ICAvLyBBbHdheXMgcmV0dXJuIGFuIGVtcHR5IG9iamVjdC4KLSAgICAgICAgICAgIGlmICggYWNj
ZXB0RGF0YSggb3duZXIgKSApIHsKLQotICAgICAgICAgICAgICAgIC8vIElmIGl0IGlzIGEgbm9k
ZSB1bmxpa2VseSB0byBiZSBzdHJpbmdpZnktZWQgb3IgbG9vcGVkIG92ZXIKLSAgICAgICAgICAg
ICAgICAvLyB1c2UgcGxhaW4gYXNzaWdubWVudAotICAgICAgICAgICAgICAgIGlmICggb3duZXIu
bm9kZVR5cGUgKSB7Ci0gICAgICAgICAgICAgICAgICAgIG93bmVyWyB0aGlzLmV4cGFuZG8gXSA9
IHZhbHVlOwotCi0gICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIHNlY3VyZSBpdCBpbiBhIG5v
bi1lbnVtZXJhYmxlIHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgLy8gY29uZmlndXJhYmxlIG11
c3QgYmUgdHJ1ZSB0byBhbGxvdyB0aGUgcHJvcGVydHkgdG8gYmUKLSAgICAgICAgICAgICAgICAv
LyBkZWxldGVkIHdoZW4gZGF0YSBpcyByZW1vdmVkCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KCBvd25lciwgdGhpcy5l
eHBhbmRvLCB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsCi0gICAgICAg
ICAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUKLSAgICAgICAgICAgICAgICAgICAg
fSApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAg
ICAgIHJldHVybiB2YWx1ZTsKLSAgICB9LAotICAgIHNldDogZnVuY3Rpb24oIG93bmVyLCBkYXRh
LCB2YWx1ZSApIHsKLSAgICAgICAgdmFyIHByb3AsCi0gICAgICAgICAgICBjYWNoZSA9IHRoaXMu
Y2FjaGUoIG93bmVyICk7Ci0KLSAgICAgICAgLy8gSGFuZGxlOiBbIG93bmVyLCBrZXksIHZhbHVl
IF0gYXJncwotICAgICAgICBpZiAoIHR5cGVvZiBkYXRhID09PSAic3RyaW5nIiApIHsKLSAgICAg
ICAgICAgIGNhY2hlWyBkYXRhIF0gPSB2YWx1ZTsKLQotICAgICAgICAvLyBIYW5kbGU6IFsgb3du
ZXIsIHsgcHJvcGVydGllcyB9IF0gYXJncwotICAgICAgICB9IGVsc2UgewotCi0gICAgICAgICAg
ICAvLyBDb3B5IHRoZSBwcm9wZXJ0aWVzIG9uZS1ieS1vbmUgdG8gdGhlIGNhY2hlIG9iamVjdAot
ICAgICAgICAgICAgZm9yICggcHJvcCBpbiBkYXRhICkgewotICAgICAgICAgICAgICAgIGNhY2hl
WyBwcm9wIF0gPSBkYXRhWyBwcm9wIF07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuIGNhY2hlOwotICAgIH0sCi0gICAgZ2V0OiBmdW5jdGlvbiggb3duZXIsIGtleSAp
IHsKLSAgICAgICAgcmV0dXJuIGtleSA9PT0gdW5kZWZpbmVkID8KLSAgICAgICAgICAgIHRoaXMu
Y2FjaGUoIG93bmVyICkgOgotICAgICAgICAgICAgb3duZXJbIHRoaXMuZXhwYW5kbyBdICYmIG93
bmVyWyB0aGlzLmV4cGFuZG8gXVsga2V5IF07Ci0gICAgfSwKLSAgICBhY2Nlc3M6IGZ1bmN0aW9u
KCBvd25lciwga2V5LCB2YWx1ZSApIHsKLSAgICAgICAgdmFyIHN0b3JlZDsKLQotICAgICAgICAv
LyBJbiBjYXNlcyB3aGVyZSBlaXRoZXI6Ci0gICAgICAgIC8vCi0gICAgICAgIC8vICAgMS4gTm8g
a2V5IHdhcyBzcGVjaWZpZWQKLSAgICAgICAgLy8gICAyLiBBIHN0cmluZyBrZXkgd2FzIHNwZWNp
ZmllZCwgYnV0IG5vIHZhbHVlIHByb3ZpZGVkCi0gICAgICAgIC8vCi0gICAgICAgIC8vIFRha2Ug
dGhlICJyZWFkIiBwYXRoIGFuZCBhbGxvdyB0aGUgZ2V0IG1ldGhvZCB0byBkZXRlcm1pbmUKLSAg
ICAgICAgLy8gd2hpY2ggdmFsdWUgdG8gcmV0dXJuLCByZXNwZWN0aXZlbHkgZWl0aGVyOgotICAg
ICAgICAvLwotICAgICAgICAvLyAgIDEuIFRoZSBlbnRpcmUgY2FjaGUgb2JqZWN0Ci0gICAgICAg
IC8vICAgMi4gVGhlIGRhdGEgc3RvcmVkIGF0IHRoZSBrZXkKLSAgICAgICAgLy8KLSAgICAgICAg
aWYgKCBrZXkgPT09IHVuZGVmaW5lZCB8fAotICAgICAgICAgICAgICAgICggKCBrZXkgJiYgdHlw
ZW9mIGtleSA9PT0gInN0cmluZyIgKSAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkICkgKSB7Ci0KLSAg
ICAgICAgICAgIHN0b3JlZCA9IHRoaXMuZ2V0KCBvd25lciwga2V5ICk7Ci0KLSAgICAgICAgICAg
IHJldHVybiBzdG9yZWQgIT09IHVuZGVmaW5lZCA/Ci0gICAgICAgICAgICAgICAgc3RvcmVkIDog
dGhpcy5nZXQoIG93bmVyLCBqUXVlcnkuY2FtZWxDYXNlKCBrZXkgKSApOwotICAgICAgICB9Ci0K
LSAgICAgICAgLy8gV2hlbiB0aGUga2V5IGlzIG5vdCBhIHN0cmluZywgb3IgYm90aCBhIGtleSBh
bmQgdmFsdWUKLSAgICAgICAgLy8gYXJlIHNwZWNpZmllZCwgc2V0IG9yIGV4dGVuZCAoZXhpc3Rp
bmcgb2JqZWN0cykgd2l0aCBlaXRoZXI6Ci0gICAgICAgIC8vCi0gICAgICAgIC8vICAgMS4gQW4g
b2JqZWN0IG9mIHByb3BlcnRpZXMKLSAgICAgICAgLy8gICAyLiBBIGtleSBhbmQgdmFsdWUKLSAg
ICAgICAgLy8KLSAgICAgICAgdGhpcy5zZXQoIG93bmVyLCBrZXksIHZhbHVlICk7Ci0KLSAgICAg
ICAgLy8gU2luY2UgdGhlICJzZXQiIHBhdGggY2FuIGhhdmUgdHdvIHBvc3NpYmxlIGVudHJ5IHBv
aW50cwotICAgICAgICAvLyByZXR1cm4gdGhlIGV4cGVjdGVkIGRhdGEgYmFzZWQgb24gd2hpY2gg
cGF0aCB3YXMgdGFrZW5bKl0KLSAgICAgICAgcmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWQgPyB2
YWx1ZSA6IGtleTsKLSAgICB9LAotICAgIHJlbW92ZTogZnVuY3Rpb24oIG93bmVyLCBrZXkgKSB7
Ci0gICAgICAgIHZhciBpLCBuYW1lLCBjYW1lbCwKLSAgICAgICAgICAgIGNhY2hlID0gb3duZXJb
IHRoaXMuZXhwYW5kbyBdOwotCi0gICAgICAgIGlmICggY2FjaGUgPT09IHVuZGVmaW5lZCApIHsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICgga2V5ID09PSB1
bmRlZmluZWQgKSB7Ci0gICAgICAgICAgICB0aGlzLnJlZ2lzdGVyKCBvd25lciApOwotCi0gICAg
ICAgIH0gZWxzZSB7Ci0KLSAgICAgICAgICAgIC8vIFN1cHBvcnQgYXJyYXkgb3Igc3BhY2Ugc2Vw
YXJhdGVkIHN0cmluZyBvZiBrZXlzCi0gICAgICAgICAgICBpZiAoIGpRdWVyeS5pc0FycmF5KCBr
ZXkgKSApIHsKLQotICAgICAgICAgICAgICAgIC8vIElmICJuYW1lIiBpcyBhbiBhcnJheSBvZiBr
ZXlzLi4uCi0gICAgICAgICAgICAgICAgLy8gV2hlbiBkYXRhIGlzIGluaXRpYWxseSBjcmVhdGVk
LCB2aWEgKCJrZXkiLCAidmFsIikgc2lnbmF0dXJlLAotICAgICAgICAgICAgICAgIC8vIGtleXMg
d2lsbCBiZSBjb252ZXJ0ZWQgdG8gY2FtZWxDYXNlLgotICAgICAgICAgICAgICAgIC8vIFNpbmNl
IHRoZXJlIGlzIG5vIHdheSB0byB0ZWxsIF9ob3dfIGEga2V5IHdhcyBhZGRlZCwgcmVtb3ZlCi0g
ICAgICAgICAgICAgICAgLy8gYm90aCBwbGFpbiBrZXkgYW5kIGNhbWVsQ2FzZSBrZXkuICMxMjc4
NgotICAgICAgICAgICAgICAgIC8vIFRoaXMgd2lsbCBvbmx5IHBlbmFsaXplIHRoZSBhcnJheSBh
cmd1bWVudCBwYXRoLgotICAgICAgICAgICAgICAgIG5hbWUgPSBrZXkuY29uY2F0KCBrZXkubWFw
KCBqUXVlcnkuY2FtZWxDYXNlICkgKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgY2FtZWwgPSBqUXVlcnkuY2FtZWxDYXNlKCBrZXkgKTsKLQotICAgICAgICAgICAgICAg
IC8vIFRyeSB0aGUgc3RyaW5nIGFzIGEga2V5IGJlZm9yZSBhbnkgbWFuaXB1bGF0aW9uCi0gICAg
ICAgICAgICAgICAgaWYgKCBrZXkgaW4gY2FjaGUgKSB7Ci0gICAgICAgICAgICAgICAgICAgIG5h
bWUgPSBbIGtleSwgY2FtZWwgXTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotCi0gICAgICAg
ICAgICAgICAgICAgIC8vIElmIGEga2V5IHdpdGggdGhlIHNwYWNlcyBleGlzdHMsIHVzZSBpdC4K
LSAgICAgICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCBjcmVhdGUgYW4gYXJyYXkgYnkgbWF0
Y2hpbmcgbm9uLXdoaXRlc3BhY2UKLSAgICAgICAgICAgICAgICAgICAgbmFtZSA9IGNhbWVsOwot
ICAgICAgICAgICAgICAgICAgICBuYW1lID0gbmFtZSBpbiBjYWNoZSA/Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBbIG5hbWUgXSA6ICggbmFtZS5tYXRjaCggcm5vdHdoaXRlICkgfHwgW10gKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGkgPSBuYW1l
Lmxlbmd0aDsKLQotICAgICAgICAgICAgd2hpbGUgKCBpLS0gKSB7Ci0gICAgICAgICAgICAgICAg
ZGVsZXRlIGNhY2hlWyBuYW1lWyBpIF0gXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0g
ICAgICAgIC8vIFJlbW92ZSB0aGUgZXhwYW5kbyBpZiB0aGVyZSdzIG5vIG1vcmUgZGF0YQotICAg
ICAgICBpZiAoIGtleSA9PT0gdW5kZWZpbmVkIHx8IGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBjYWNo
ZSApICkgewotCi0gICAgICAgICAgICAvLyBTdXBwb3J0OiBDaHJvbWUgPD0gMzUtNDUrCi0gICAg
ICAgICAgICAvLyBXZWJraXQgJiBCbGluayBwZXJmb3JtYW5jZSBzdWZmZXJzIHdoZW4gZGVsZXRp
bmcgcHJvcGVydGllcwotICAgICAgICAgICAgLy8gZnJvbSBET00gbm9kZXMsIHNvIHNldCB0byB1
bmRlZmluZWQgaW5zdGVhZAotICAgICAgICAgICAgLy8gaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20v
cC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTM3ODYwNwotICAgICAgICAgICAgaWYgKCBvd25l
ci5ub2RlVHlwZSApIHsKLSAgICAgICAgICAgICAgICBvd25lclsgdGhpcy5leHBhbmRvIF0gPSB1
bmRlZmluZWQ7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGRlbGV0ZSBv
d25lclsgdGhpcy5leHBhbmRvIF07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9LAot
ICAgIGhhc0RhdGE6IGZ1bmN0aW9uKCBvd25lciApIHsKLSAgICAgICAgdmFyIGNhY2hlID0gb3du
ZXJbIHRoaXMuZXhwYW5kbyBdOwotICAgICAgICByZXR1cm4gY2FjaGUgIT09IHVuZGVmaW5lZCAm
JiAhalF1ZXJ5LmlzRW1wdHlPYmplY3QoIGNhY2hlICk7Ci0gICAgfQotfTsKLXZhciBkYXRhUHJp
diA9IG5ldyBEYXRhKCk7Ci0KLXZhciBkYXRhVXNlciA9IG5ldyBEYXRhKCk7Ci0KLQotCi0vLyAg
SW1wbGVtZW50YXRpb24gU3VtbWFyeQotLy8KLS8vICAxLiBFbmZvcmNlIEFQSSBzdXJmYWNlIGFu
ZCBzZW1hbnRpYyBjb21wYXRpYmlsaXR5IHdpdGggMS45LnggYnJhbmNoCi0vLyAgMi4gSW1wcm92
ZSB0aGUgbW9kdWxlJ3MgbWFpbnRhaW5hYmlsaXR5IGJ5IHJlZHVjaW5nIHRoZSBzdG9yYWdlCi0v
LyAgICAgIHBhdGhzIHRvIGEgc2luZ2xlIG1lY2hhbmlzbS4KLS8vICAzLiBVc2UgdGhlIHNhbWUg
c2luZ2xlIG1lY2hhbmlzbSB0byBzdXBwb3J0ICJwcml2YXRlIiBhbmQgInVzZXIiIGRhdGEuCi0v
LyAgNC4gX05ldmVyXyBleHBvc2UgInByaXZhdGUiIGRhdGEgdG8gdXNlciBjb2RlIChUT0RPOiBE
cm9wIF9kYXRhLCBfcmVtb3ZlRGF0YSkKLS8vICA1LiBBdm9pZCBleHBvc2luZyBpbXBsZW1lbnRh
dGlvbiBkZXRhaWxzIG9uIHVzZXIgb2JqZWN0cyAoZWcuIGV4cGFuZG8gcHJvcGVydGllcykKLS8v
ICA2LiBQcm92aWRlIGEgY2xlYXIgcGF0aCBmb3IgaW1wbGVtZW50YXRpb24gdXBncmFkZSB0byBX
ZWFrTWFwIGluIDIwMTQKLQotdmFyIHJicmFjZSA9IC9eKD86XHtbXHdcV10qXH18XFtbXHdcV10q
XF0pJC8sCi0gICAgcm11bHRpRGFzaCA9IC9bQS1aXS9nOwotCi1mdW5jdGlvbiBkYXRhQXR0cigg
ZWxlbSwga2V5LCBkYXRhICkgewotICAgIHZhciBuYW1lOwotCi0gICAgLy8gSWYgbm90aGluZyB3
YXMgZm91bmQgaW50ZXJuYWxseSwgdHJ5IHRvIGZldGNoIGFueQotICAgIC8vIGRhdGEgZnJvbSB0
aGUgSFRNTDUgZGF0YS0qIGF0dHJpYnV0ZQotICAgIGlmICggZGF0YSA9PT0gdW5kZWZpbmVkICYm
IGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7Ci0gICAgICAgIG5hbWUgPSAiZGF0YS0iICsga2V5LnJl
cGxhY2UoIHJtdWx0aURhc2gsICItJCYiICkudG9Mb3dlckNhc2UoKTsKLSAgICAgICAgZGF0YSA9
IGVsZW0uZ2V0QXR0cmlidXRlKCBuYW1lICk7Ci0KLSAgICAgICAgaWYgKCB0eXBlb2YgZGF0YSA9
PT0gInN0cmluZyIgKSB7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIGRhdGEg
PSBkYXRhID09PSAidHJ1ZSIgPyB0cnVlIDoKLSAgICAgICAgICAgICAgICAgICAgZGF0YSA9PT0g
ImZhbHNlIiA/IGZhbHNlIDoKLSAgICAgICAgICAgICAgICAgICAgZGF0YSA9PT0gIm51bGwiID8g
bnVsbCA6Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gT25seSBjb252ZXJ0IHRvIGEgbnVtYmVy
IGlmIGl0IGRvZXNuJ3QgY2hhbmdlIHRoZSBzdHJpbmcKLSAgICAgICAgICAgICAgICAgICAgK2Rh
dGEgKyAiIiA9PT0gZGF0YSA/ICtkYXRhIDoKLSAgICAgICAgICAgICAgICAgICAgcmJyYWNlLnRl
c3QoIGRhdGEgKSA/IGpRdWVyeS5wYXJzZUpTT04oIGRhdGEgKSA6Ci0gICAgICAgICAgICAgICAg
ICAgIGRhdGE7Ci0gICAgICAgICAgICB9IGNhdGNoICggZSApIHt9Ci0KLSAgICAgICAgICAgIC8v
IE1ha2Ugc3VyZSB3ZSBzZXQgdGhlIGRhdGEgc28gaXQgaXNuJ3QgY2hhbmdlZCBsYXRlcgotICAg
ICAgICAgICAgZGF0YVVzZXIuc2V0KCBlbGVtLCBrZXksIGRhdGEgKTsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIGRhdGEgPSB1bmRlZmluZWQ7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
cmV0dXJuIGRhdGE7Ci19Ci0KLWpRdWVyeS5leHRlbmQoIHsKLSAgICBoYXNEYXRhOiBmdW5jdGlv
biggZWxlbSApIHsKLSAgICAgICAgcmV0dXJuIGRhdGFVc2VyLmhhc0RhdGEoIGVsZW0gKSB8fCBk
YXRhUHJpdi5oYXNEYXRhKCBlbGVtICk7Ci0gICAgfSwKLQotICAgIGRhdGE6IGZ1bmN0aW9uKCBl
bGVtLCBuYW1lLCBkYXRhICkgewotICAgICAgICByZXR1cm4gZGF0YVVzZXIuYWNjZXNzKCBlbGVt
LCBuYW1lLCBkYXRhICk7Ci0gICAgfSwKLQotICAgIHJlbW92ZURhdGE6IGZ1bmN0aW9uKCBlbGVt
LCBuYW1lICkgewotICAgICAgICBkYXRhVXNlci5yZW1vdmUoIGVsZW0sIG5hbWUgKTsKLSAgICB9
LAotCi0gICAgLy8gVE9ETzogTm93IHRoYXQgYWxsIGNhbGxzIHRvIF9kYXRhIGFuZCBfcmVtb3Zl
RGF0YSBoYXZlIGJlZW4gcmVwbGFjZWQKLSAgICAvLyB3aXRoIGRpcmVjdCBjYWxscyB0byBkYXRh
UHJpdiBtZXRob2RzLCB0aGVzZSBjYW4gYmUgZGVwcmVjYXRlZC4KLSAgICBfZGF0YTogZnVuY3Rp
b24oIGVsZW0sIG5hbWUsIGRhdGEgKSB7Ci0gICAgICAgIHJldHVybiBkYXRhUHJpdi5hY2Nlc3Mo
IGVsZW0sIG5hbWUsIGRhdGEgKTsKLSAgICB9LAotCi0gICAgX3JlbW92ZURhdGE6IGZ1bmN0aW9u
KCBlbGVtLCBuYW1lICkgewotICAgICAgICBkYXRhUHJpdi5yZW1vdmUoIGVsZW0sIG5hbWUgKTsK
LSAgICB9Ci19ICk7Ci0KLWpRdWVyeS5mbi5leHRlbmQoIHsKLSAgICBkYXRhOiBmdW5jdGlvbigg
a2V5LCB2YWx1ZSApIHsKLSAgICAgICAgdmFyIGksIG5hbWUsIGRhdGEsCi0gICAgICAgICAgICBl
bGVtID0gdGhpc1sgMCBdLAotICAgICAgICAgICAgYXR0cnMgPSBlbGVtICYmIGVsZW0uYXR0cmli
dXRlczsKLQotICAgICAgICAvLyBHZXRzIGFsbCB2YWx1ZXMKLSAgICAgICAgaWYgKCBrZXkgPT09
IHVuZGVmaW5lZCApIHsKLSAgICAgICAgICAgIGlmICggdGhpcy5sZW5ndGggKSB7Ci0gICAgICAg
ICAgICAgICAgZGF0YSA9IGRhdGFVc2VyLmdldCggZWxlbSApOwotCi0gICAgICAgICAgICAgICAg
aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICYmICFkYXRhUHJpdi5nZXQoIGVsZW0sICJoYXNEYXRh
QXR0cnMiICkgKSB7Ci0gICAgICAgICAgICAgICAgICAgIGkgPSBhdHRycy5sZW5ndGg7Ci0gICAg
ICAgICAgICAgICAgICAgIHdoaWxlICggaS0tICkgewotCi0gICAgICAgICAgICAgICAgICAgICAg
ICAvLyBTdXBwb3J0OiBJRTExKwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGF0dHJz
IGVsZW1lbnRzIGNhbiBiZSBudWxsICgjMTQ4OTQpCi0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIGF0dHJzWyBpIF0gKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IGF0
dHJzWyBpIF0ubmFtZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG5hbWUuaW5k
ZXhPZiggImRhdGEtIiApID09PSAwICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuYW1lID0galF1ZXJ5LmNhbWVsQ2FzZSggbmFtZS5zbGljZSggNSApICk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRhdGFBdHRyKCBlbGVtLCBuYW1lLCBkYXRhWyBuYW1lIF0g
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZGF0YVByaXYu
c2V0KCBlbGVtLCAiaGFzRGF0YUF0dHJzIiwgdHJ1ZSApOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIGRhdGE7Ci0gICAgICAgIH0KLQotICAg
ICAgICAvLyBTZXRzIG11bHRpcGxlIHZhbHVlcwotICAgICAgICBpZiAoIHR5cGVvZiBrZXkgPT09
ICJvYmplY3QiICkgewotICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7
Ci0gICAgICAgICAgICAgICAgZGF0YVVzZXIuc2V0KCB0aGlzLCBrZXkgKTsKLSAgICAgICAgICAg
IH0gKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9u
KCB2YWx1ZSApIHsKLSAgICAgICAgICAgIHZhciBkYXRhLCBjYW1lbEtleTsKLQotICAgICAgICAg
ICAgLy8gVGhlIGNhbGxpbmcgalF1ZXJ5IG9iamVjdCAoZWxlbWVudCBtYXRjaGVzKSBpcyBub3Qg
ZW1wdHkKLSAgICAgICAgICAgIC8vIChhbmQgdGhlcmVmb3JlIGhhcyBhbiBlbGVtZW50IGFwcGVh
cnMgYXQgdGhpc1sgMCBdKSBhbmQgdGhlCi0gICAgICAgICAgICAvLyBgdmFsdWVgIHBhcmFtZXRl
ciB3YXMgbm90IHVuZGVmaW5lZC4gQW4gZW1wdHkgalF1ZXJ5IG9iamVjdAotICAgICAgICAgICAg
Ly8gd2lsbCByZXN1bHQgaW4gYHVuZGVmaW5lZGAgZm9yIGVsZW0gPSB0aGlzWyAwIF0gd2hpY2gg
d2lsbAotICAgICAgICAgICAgLy8gdGhyb3cgYW4gZXhjZXB0aW9uIGlmIGFuIGF0dGVtcHQgdG8g
cmVhZCBhIGRhdGEgY2FjaGUgaXMgbWFkZS4KLSAgICAgICAgICAgIGlmICggZWxlbSAmJiB2YWx1
ZSA9PT0gdW5kZWZpbmVkICkgewotCi0gICAgICAgICAgICAgICAgLy8gQXR0ZW1wdCB0byBnZXQg
ZGF0YSBmcm9tIHRoZSBjYWNoZQotICAgICAgICAgICAgICAgIC8vIHdpdGggdGhlIGtleSBhcy1p
cwotICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhVXNlci5nZXQoIGVsZW0sIGtleSApIHx8Ci0K
LSAgICAgICAgICAgICAgICAgICAgLy8gVHJ5IHRvIGZpbmQgZGFzaGVkIGtleSBpZiBpdCBleGlz
dHMgKGdoLTI3NzkpCi0gICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgZm9yIDIuMi54IG9u
bHkKLSAgICAgICAgICAgICAgICAgICAgZGF0YVVzZXIuZ2V0KCBlbGVtLCBrZXkucmVwbGFjZSgg
cm11bHRpRGFzaCwgIi0kJiIgKS50b0xvd2VyQ2FzZSgpICk7Ci0KLSAgICAgICAgICAgICAgICBp
ZiAoIGRhdGEgIT09IHVuZGVmaW5lZCApIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRh
dGE7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgY2FtZWxLZXkgPSBqUXVl
cnkuY2FtZWxDYXNlKCBrZXkgKTsKLQotICAgICAgICAgICAgICAgIC8vIEF0dGVtcHQgdG8gZ2V0
IGRhdGEgZnJvbSB0aGUgY2FjaGUKLSAgICAgICAgICAgICAgICAvLyB3aXRoIHRoZSBrZXkgY2Ft
ZWxpemVkCi0gICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFVc2VyLmdldCggZWxlbSwgY2FtZWxL
ZXkgKTsKLSAgICAgICAgICAgICAgICBpZiAoIGRhdGEgIT09IHVuZGVmaW5lZCApIHsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgLy8gQXR0ZW1wdCB0byAiZGlzY292ZXIiIHRoZSBkYXRhIGluCi0gICAgICAgICAg
ICAgICAgLy8gSFRNTDUgY3VzdG9tIGRhdGEtKiBhdHRycwotICAgICAgICAgICAgICAgIGRhdGEg
PSBkYXRhQXR0ciggZWxlbSwgY2FtZWxLZXksIHVuZGVmaW5lZCApOwotICAgICAgICAgICAgICAg
IGlmICggZGF0YSAhPT0gdW5kZWZpbmVkICkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZGF0YTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBXZSB0cmllZCBy
ZWFsbHkgaGFyZCwgYnV0IHRoZSBkYXRhIGRvZXNuJ3QgZXhpc3QuCi0gICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBTZXQgdGhlIGRhdGEuLi4K
LSAgICAgICAgICAgIGNhbWVsS2V5ID0galF1ZXJ5LmNhbWVsQ2FzZSgga2V5ICk7Ci0gICAgICAg
ICAgICB0aGlzLmVhY2goIGZ1bmN0aW9uKCkgewotCi0gICAgICAgICAgICAgICAgLy8gRmlyc3Qs
IGF0dGVtcHQgdG8gc3RvcmUgYSBjb3B5IG9yIHJlZmVyZW5jZSBvZiBhbnkKLSAgICAgICAgICAg
ICAgICAvLyBkYXRhIHRoYXQgbWlnaHQndmUgYmVlbiBzdG9yZSB3aXRoIGEgY2FtZWxDYXNlZCBr
ZXkuCi0gICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBkYXRhVXNlci5nZXQoIHRoaXMsIGNhbWVs
S2V5ICk7Ci0KLSAgICAgICAgICAgICAgICAvLyBGb3IgSFRNTDUgZGF0YS0qIGF0dHJpYnV0ZSBp
bnRlcm9wLCB3ZSBoYXZlIHRvCi0gICAgICAgICAgICAgICAgLy8gc3RvcmUgcHJvcGVydHkgbmFt
ZXMgd2l0aCBkYXNoZXMgaW4gYSBjYW1lbENhc2UgZm9ybS4KLSAgICAgICAgICAgICAgICAvLyBU
aGlzIG1pZ2h0IG5vdCBhcHBseSB0byBhbGwgcHJvcGVydGllcy4uLioKLSAgICAgICAgICAgICAg
ICBkYXRhVXNlci5zZXQoIHRoaXMsIGNhbWVsS2V5LCB2YWx1ZSApOwotCi0gICAgICAgICAgICAg
ICAgLy8gKi4uLiBJbiB0aGUgY2FzZSBvZiBwcm9wZXJ0aWVzIHRoYXQgbWlnaHQgX2FjdHVhbGx5
XwotICAgICAgICAgICAgICAgIC8vIGhhdmUgZGFzaGVzLCB3ZSBuZWVkIHRvIGFsc28gc3RvcmUg
YSBjb3B5IG9mIHRoYXQKLSAgICAgICAgICAgICAgICAvLyB1bmNoYW5nZWQgcHJvcGVydHkuCi0g
ICAgICAgICAgICAgICAgaWYgKCBrZXkuaW5kZXhPZiggIi0iICkgPiAtMSAmJiBkYXRhICE9PSB1
bmRlZmluZWQgKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRhdGFVc2VyLnNldCggdGhpcywga2V5
LCB2YWx1ZSApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gKTsKLSAgICAgICAg
fSwgbnVsbCwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxLCBudWxsLCB0cnVlICk7Ci0gICAg
fSwKLQotICAgIHJlbW92ZURhdGE6IGZ1bmN0aW9uKCBrZXkgKSB7Ci0gICAgICAgIHJldHVybiB0
aGlzLmVhY2goIGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgZGF0YVVzZXIucmVtb3ZlKCB0aGlz
LCBrZXkgKTsKLSAgICAgICAgfSApOwotICAgIH0KLX0gKTsKLQotCi1qUXVlcnkuZXh0ZW5kKCB7
Ci0gICAgcXVldWU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCBkYXRhICkgewotICAgICAgICB2YXIg
cXVldWU7Ci0KLSAgICAgICAgaWYgKCBlbGVtICkgewotICAgICAgICAgICAgdHlwZSA9ICggdHlw
ZSB8fCAiZngiICkgKyAicXVldWUiOwotICAgICAgICAgICAgcXVldWUgPSBkYXRhUHJpdi5nZXQo
IGVsZW0sIHR5cGUgKTsKLQotICAgICAgICAgICAgLy8gU3BlZWQgdXAgZGVxdWV1ZSBieSBnZXR0
aW5nIG91dCBxdWlja2x5IGlmIHRoaXMgaXMganVzdCBhIGxvb2t1cAotICAgICAgICAgICAgaWYg
KCBkYXRhICkgewotICAgICAgICAgICAgICAgIGlmICggIXF1ZXVlIHx8IGpRdWVyeS5pc0FycmF5
KCBkYXRhICkgKSB7Ci0gICAgICAgICAgICAgICAgICAgIHF1ZXVlID0gZGF0YVByaXYuYWNjZXNz
KCBlbGVtLCB0eXBlLCBqUXVlcnkubWFrZUFycmF5KCBkYXRhICkgKTsKLSAgICAgICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBxdWV1ZS5wdXNoKCBkYXRhICk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHF1ZXVlIHx8
IFtdOwotICAgICAgICB9Ci0gICAgfSwKLQotICAgIGRlcXVldWU6IGZ1bmN0aW9uKCBlbGVtLCB0
eXBlICkgewotICAgICAgICB0eXBlID0gdHlwZSB8fCAiZngiOwotCi0gICAgICAgIHZhciBxdWV1
ZSA9IGpRdWVyeS5xdWV1ZSggZWxlbSwgdHlwZSApLAotICAgICAgICAgICAgc3RhcnRMZW5ndGgg
PSBxdWV1ZS5sZW5ndGgsCi0gICAgICAgICAgICBmbiA9IHF1ZXVlLnNoaWZ0KCksCi0gICAgICAg
ICAgICBob29rcyA9IGpRdWVyeS5fcXVldWVIb29rcyggZWxlbSwgdHlwZSApLAotICAgICAgICAg
ICAgbmV4dCA9IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIGpRdWVyeS5kZXF1ZXVlKCBl
bGVtLCB0eXBlICk7Ci0gICAgICAgICAgICB9OwotCi0gICAgICAgIC8vIElmIHRoZSBmeCBxdWV1
ZSBpcyBkZXF1ZXVlZCwgYWx3YXlzIHJlbW92ZSB0aGUgcHJvZ3Jlc3Mgc2VudGluZWwKLSAgICAg
ICAgaWYgKCBmbiA9PT0gImlucHJvZ3Jlc3MiICkgewotICAgICAgICAgICAgZm4gPSBxdWV1ZS5z
aGlmdCgpOwotICAgICAgICAgICAgc3RhcnRMZW5ndGgtLTsKLSAgICAgICAgfQotCi0gICAgICAg
IGlmICggZm4gKSB7Ci0KLSAgICAgICAgICAgIC8vIEFkZCBhIHByb2dyZXNzIHNlbnRpbmVsIHRv
IHByZXZlbnQgdGhlIGZ4IHF1ZXVlIGZyb20gYmVpbmcKLSAgICAgICAgICAgIC8vIGF1dG9tYXRp
Y2FsbHkgZGVxdWV1ZWQKLSAgICAgICAgICAgIGlmICggdHlwZSA9PT0gImZ4IiApIHsKLSAgICAg
ICAgICAgICAgICBxdWV1ZS51bnNoaWZ0KCAiaW5wcm9ncmVzcyIgKTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgLy8gQ2xlYXIgdXAgdGhlIGxhc3QgcXVldWUgc3RvcCBmdW5jdGlvbgot
ICAgICAgICAgICAgZGVsZXRlIGhvb2tzLnN0b3A7Ci0gICAgICAgICAgICBmbi5jYWxsKCBlbGVt
LCBuZXh0LCBob29rcyApOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCAhc3RhcnRMZW5ndGgg
JiYgaG9va3MgKSB7Ci0gICAgICAgICAgICBob29rcy5lbXB0eS5maXJlKCk7Ci0gICAgICAgIH0K
LSAgICB9LAotCi0gICAgLy8gTm90IHB1YmxpYyAtIGdlbmVyYXRlIGEgcXVldWVIb29rcyBvYmpl
Y3QsIG9yIHJldHVybiB0aGUgY3VycmVudCBvbmUKLSAgICBfcXVldWVIb29rczogZnVuY3Rpb24o
IGVsZW0sIHR5cGUgKSB7Ci0gICAgICAgIHZhciBrZXkgPSB0eXBlICsgInF1ZXVlSG9va3MiOwot
ICAgICAgICByZXR1cm4gZGF0YVByaXYuZ2V0KCBlbGVtLCBrZXkgKSB8fCBkYXRhUHJpdi5hY2Nl
c3MoIGVsZW0sIGtleSwgewotICAgICAgICAgICAgZW1wdHk6IGpRdWVyeS5DYWxsYmFja3MoICJv
bmNlIG1lbW9yeSIgKS5hZGQoIGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIGRhdGFQcml2
LnJlbW92ZSggZWxlbSwgWyB0eXBlICsgInF1ZXVlIiwga2V5IF0gKTsKLSAgICAgICAgICAgIH0g
KQotICAgICAgICB9ICk7Ci0gICAgfQotfSApOwotCi1qUXVlcnkuZm4uZXh0ZW5kKCB7Ci0gICAg
cXVldWU6IGZ1bmN0aW9uKCB0eXBlLCBkYXRhICkgewotICAgICAgICB2YXIgc2V0dGVyID0gMjsK
LQotICAgICAgICBpZiAoIHR5cGVvZiB0eXBlICE9PSAic3RyaW5nIiApIHsKLSAgICAgICAgICAg
IGRhdGEgPSB0eXBlOwotICAgICAgICAgICAgdHlwZSA9ICJmeCI7Ci0gICAgICAgICAgICBzZXR0
ZXItLTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICggYXJndW1lbnRzLmxlbmd0aCA8IHNldHRl
ciApIHsKLSAgICAgICAgICAgIHJldHVybiBqUXVlcnkucXVldWUoIHRoaXNbIDAgXSwgdHlwZSAp
OwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGRhdGEgPT09IHVuZGVmaW5lZCA/Ci0gICAg
ICAgICAgICB0aGlzIDoKLSAgICAgICAgICAgIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7Ci0gICAg
ICAgICAgICAgICAgdmFyIHF1ZXVlID0galF1ZXJ5LnF1ZXVlKCB0aGlzLCB0eXBlLCBkYXRhICk7
Ci0KLSAgICAgICAgICAgICAgICAvLyBFbnN1cmUgYSBob29rcyBmb3IgdGhpcyBxdWV1ZQotICAg
ICAgICAgICAgICAgIGpRdWVyeS5fcXVldWVIb29rcyggdGhpcywgdHlwZSApOwotCi0gICAgICAg
ICAgICAgICAgaWYgKCB0eXBlID09PSAiZngiICYmIHF1ZXVlWyAwIF0gIT09ICJpbnByb2dyZXNz
IiApIHsKLSAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmRlcXVldWUoIHRoaXMsIHR5cGUgKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9ICk7Ci0gICAgfSwKLSAgICBkZXF1ZXVl
OiBmdW5jdGlvbiggdHlwZSApIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24o
KSB7Ci0gICAgICAgICAgICBqUXVlcnkuZGVxdWV1ZSggdGhpcywgdHlwZSApOwotICAgICAgICB9
ICk7Ci0gICAgfSwKLSAgICBjbGVhclF1ZXVlOiBmdW5jdGlvbiggdHlwZSApIHsKLSAgICAgICAg
cmV0dXJuIHRoaXMucXVldWUoIHR5cGUgfHwgImZ4IiwgW10gKTsKLSAgICB9LAotCi0gICAgLy8g
R2V0IGEgcHJvbWlzZSByZXNvbHZlZCB3aGVuIHF1ZXVlcyBvZiBhIGNlcnRhaW4gdHlwZQotICAg
IC8vIGFyZSBlbXB0aWVkIChmeCBpcyB0aGUgdHlwZSBieSBkZWZhdWx0KQotICAgIHByb21pc2U6
IGZ1bmN0aW9uKCB0eXBlLCBvYmogKSB7Ci0gICAgICAgIHZhciB0bXAsCi0gICAgICAgICAgICBj
b3VudCA9IDEsCi0gICAgICAgICAgICBkZWZlciA9IGpRdWVyeS5EZWZlcnJlZCgpLAotICAgICAg
ICAgICAgZWxlbWVudHMgPSB0aGlzLAotICAgICAgICAgICAgaSA9IHRoaXMubGVuZ3RoLAotICAg
ICAgICAgICAgcmVzb2x2ZSA9IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIGlmICggISgg
LS1jb3VudCApICkgewotICAgICAgICAgICAgICAgICAgICBkZWZlci5yZXNvbHZlV2l0aCggZWxl
bWVudHMsIFsgZWxlbWVudHMgXSApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH07
Ci0KLSAgICAgICAgaWYgKCB0eXBlb2YgdHlwZSAhPT0gInN0cmluZyIgKSB7Ci0gICAgICAgICAg
ICBvYmogPSB0eXBlOwotICAgICAgICAgICAgdHlwZSA9IHVuZGVmaW5lZDsKLSAgICAgICAgfQot
ICAgICAgICB0eXBlID0gdHlwZSB8fCAiZngiOwotCi0gICAgICAgIHdoaWxlICggaS0tICkgewot
ICAgICAgICAgICAgdG1wID0gZGF0YVByaXYuZ2V0KCBlbGVtZW50c1sgaSBdLCB0eXBlICsgInF1
ZXVlSG9va3MiICk7Ci0gICAgICAgICAgICBpZiAoIHRtcCAmJiB0bXAuZW1wdHkgKSB7Ci0gICAg
ICAgICAgICAgICAgY291bnQrKzsKLSAgICAgICAgICAgICAgICB0bXAuZW1wdHkuYWRkKCByZXNv
bHZlICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmVzb2x2ZSgpOwotICAg
ICAgICByZXR1cm4gZGVmZXIucHJvbWlzZSggb2JqICk7Ci0gICAgfQotfSApOwotdmFyIHBudW0g
PSAoIC9bKy1dPyg/OlxkKlwufClcZCsoPzpbZUVdWystXT9cZCt8KS8gKS5zb3VyY2U7Ci0KLXZh
ciByY3NzTnVtID0gbmV3IFJlZ0V4cCggIl4oPzooWystXSk9fCkoIiArIHBudW0gKyAiKShbYS16
JV0qKSQiLCAiaSIgKTsKLQotCi12YXIgY3NzRXhwYW5kID0gWyAiVG9wIiwgIlJpZ2h0IiwgIkJv
dHRvbSIsICJMZWZ0IiBdOwotCi12YXIgaXNIaWRkZW4gPSBmdW5jdGlvbiggZWxlbSwgZWwgKSB7
Ci0KLSAgICAgICAgLy8gaXNIaWRkZW4gbWlnaHQgYmUgY2FsbGVkIGZyb20galF1ZXJ5I2ZpbHRl
ciBmdW5jdGlvbjsKLSAgICAgICAgLy8gaW4gdGhhdCBjYXNlLCBlbGVtZW50IHdpbGwgYmUgc2Vj
b25kIGFyZ3VtZW50Ci0gICAgICAgIGVsZW0gPSBlbCB8fCBlbGVtOwotICAgICAgICByZXR1cm4g
alF1ZXJ5LmNzcyggZWxlbSwgImRpc3BsYXkiICkgPT09ICJub25lIiB8fAotICAgICAgICAgICAg
IWpRdWVyeS5jb250YWlucyggZWxlbS5vd25lckRvY3VtZW50LCBlbGVtICk7Ci0gICAgfTsKLQot
Ci0KLWZ1bmN0aW9uIGFkanVzdENTUyggZWxlbSwgcHJvcCwgdmFsdWVQYXJ0cywgdHdlZW4gKSB7
Ci0gICAgdmFyIGFkanVzdGVkLAotICAgICAgICBzY2FsZSA9IDEsCi0gICAgICAgIG1heEl0ZXJh
dGlvbnMgPSAyMCwKLSAgICAgICAgY3VycmVudFZhbHVlID0gdHdlZW4gPwotICAgICAgICAgICAg
ZnVuY3Rpb24oKSB7IHJldHVybiB0d2Vlbi5jdXIoKTsgfSA6Ci0gICAgICAgICAgICBmdW5jdGlv
bigpIHsgcmV0dXJuIGpRdWVyeS5jc3MoIGVsZW0sIHByb3AsICIiICk7IH0sCi0gICAgICAgIGlu
aXRpYWwgPSBjdXJyZW50VmFsdWUoKSwKLSAgICAgICAgdW5pdCA9IHZhbHVlUGFydHMgJiYgdmFs
dWVQYXJ0c1sgMyBdIHx8ICggalF1ZXJ5LmNzc051bWJlclsgcHJvcCBdID8gIiIgOiAicHgiICks
Ci0KLSAgICAgICAgLy8gU3RhcnRpbmcgdmFsdWUgY29tcHV0YXRpb24gaXMgcmVxdWlyZWQgZm9y
IHBvdGVudGlhbCB1bml0IG1pc21hdGNoZXMKLSAgICAgICAgaW5pdGlhbEluVW5pdCA9ICggalF1
ZXJ5LmNzc051bWJlclsgcHJvcCBdIHx8IHVuaXQgIT09ICJweCIgJiYgK2luaXRpYWwgKSAmJgot
ICAgICAgICAgICAgcmNzc051bS5leGVjKCBqUXVlcnkuY3NzKCBlbGVtLCBwcm9wICkgKTsKLQot
ICAgIGlmICggaW5pdGlhbEluVW5pdCAmJiBpbml0aWFsSW5Vbml0WyAzIF0gIT09IHVuaXQgKSB7
Ci0KLSAgICAgICAgLy8gVHJ1c3QgdW5pdHMgcmVwb3J0ZWQgYnkgalF1ZXJ5LmNzcwotICAgICAg
ICB1bml0ID0gdW5pdCB8fCBpbml0aWFsSW5Vbml0WyAzIF07Ci0KLSAgICAgICAgLy8gTWFrZSBz
dXJlIHdlIHVwZGF0ZSB0aGUgdHdlZW4gcHJvcGVydGllcyBsYXRlciBvbgotICAgICAgICB2YWx1
ZVBhcnRzID0gdmFsdWVQYXJ0cyB8fCBbXTsKLQotICAgICAgICAvLyBJdGVyYXRpdmVseSBhcHBy
b3hpbWF0ZSBmcm9tIGEgbm9uemVybyBzdGFydGluZyBwb2ludAotICAgICAgICBpbml0aWFsSW5V
bml0ID0gK2luaXRpYWwgfHwgMTsKLQotICAgICAgICBkbyB7Ci0KLSAgICAgICAgICAgIC8vIElm
IHByZXZpb3VzIGl0ZXJhdGlvbiB6ZXJvZWQgb3V0LCBkb3VibGUgdW50aWwgd2UgZ2V0ICpzb21l
dGhpbmcqLgotICAgICAgICAgICAgLy8gVXNlIHN0cmluZyBmb3IgZG91Ymxpbmcgc28gd2UgZG9u
J3QgYWNjaWRlbnRhbGx5IHNlZSBzY2FsZSBhcyB1bmNoYW5nZWQgYmVsb3cKLSAgICAgICAgICAg
IHNjYWxlID0gc2NhbGUgfHwgIi41IjsKLQotICAgICAgICAgICAgLy8gQWRqdXN0IGFuZCBhcHBs
eQotICAgICAgICAgICAgaW5pdGlhbEluVW5pdCA9IGluaXRpYWxJblVuaXQgLyBzY2FsZTsKLSAg
ICAgICAgICAgIGpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCwgaW5pdGlhbEluVW5pdCArIHVuaXQg
KTsKLQotICAgICAgICAvLyBVcGRhdGUgc2NhbGUsIHRvbGVyYXRpbmcgemVybyBvciBOYU4gZnJv
bSB0d2Vlbi5jdXIoKQotICAgICAgICAvLyBCcmVhayB0aGUgbG9vcCBpZiBzY2FsZSBpcyB1bmNo
YW5nZWQgb3IgcGVyZmVjdCwgb3IgaWYgd2UndmUganVzdCBoYWQgZW5vdWdoLgotICAgICAgICB9
IHdoaWxlICgKLSAgICAgICAgICAgIHNjYWxlICE9PSAoIHNjYWxlID0gY3VycmVudFZhbHVlKCkg
LyBpbml0aWFsICkgJiYgc2NhbGUgIT09IDEgJiYgLS1tYXhJdGVyYXRpb25zCi0gICAgICAgICk7
Ci0gICAgfQotCi0gICAgaWYgKCB2YWx1ZVBhcnRzICkgewotICAgICAgICBpbml0aWFsSW5Vbml0
ID0gK2luaXRpYWxJblVuaXQgfHwgK2luaXRpYWwgfHwgMDsKLQotICAgICAgICAvLyBBcHBseSBy
ZWxhdGl2ZSBvZmZzZXQgKCs9Ly09KSBpZiBzcGVjaWZpZWQKLSAgICAgICAgYWRqdXN0ZWQgPSB2
YWx1ZVBhcnRzWyAxIF0gPwotICAgICAgICAgICAgaW5pdGlhbEluVW5pdCArICggdmFsdWVQYXJ0
c1sgMSBdICsgMSApICogdmFsdWVQYXJ0c1sgMiBdIDoKLSAgICAgICAgICAgICt2YWx1ZVBhcnRz
WyAyIF07Ci0gICAgICAgIGlmICggdHdlZW4gKSB7Ci0gICAgICAgICAgICB0d2Vlbi51bml0ID0g
dW5pdDsKLSAgICAgICAgICAgIHR3ZWVuLnN0YXJ0ID0gaW5pdGlhbEluVW5pdDsKLSAgICAgICAg
ICAgIHR3ZWVuLmVuZCA9IGFkanVzdGVkOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBh
ZGp1c3RlZDsKLX0KLXZhciByY2hlY2thYmxlVHlwZSA9ICggL14oPzpjaGVja2JveHxyYWRpbykk
L2kgKTsKLQotdmFyIHJ0YWdOYW1lID0gKCAvPChbXHc6LV0rKS8gKTsKLQotdmFyIHJzY3JpcHRU
eXBlID0gKCAvXiR8XC8oPzpqYXZhfGVjbWEpc2NyaXB0L2kgKTsKLQotCi0KLS8vIFdlIGhhdmUg
dG8gY2xvc2UgdGhlc2UgdGFncyB0byBzdXBwb3J0IFhIVE1MICgjMTMyMDApCi12YXIgd3JhcE1h
cCA9IHsKLQotICAgIC8vIFN1cHBvcnQ6IElFOQotICAgIG9wdGlvbjogWyAxLCAiPHNlbGVjdCBt
dWx0aXBsZT0nbXVsdGlwbGUnPiIsICI8L3NlbGVjdD4iIF0sCi0KLSAgICAvLyBYSFRNTCBwYXJz
ZXJzIGRvIG5vdCBtYWdpY2FsbHkgaW5zZXJ0IGVsZW1lbnRzIGluIHRoZQotICAgIC8vIHNhbWUg
d2F5IHRoYXQgdGFnIHNvdXAgcGFyc2VycyBkby4gU28gd2UgY2Fubm90IHNob3J0ZW4KLSAgICAv
LyB0aGlzIGJ5IG9taXR0aW5nIDx0Ym9keT4gb3Igb3RoZXIgcmVxdWlyZWQgZWxlbWVudHMuCi0g
ICAgdGhlYWQ6IFsgMSwgIjx0YWJsZT4iLCAiPC90YWJsZT4iIF0sCi0gICAgY29sOiBbIDIsICI8
dGFibGU+PGNvbGdyb3VwPiIsICI8L2NvbGdyb3VwPjwvdGFibGU+IiBdLAotICAgIHRyOiBbIDIs
ICI8dGFibGU+PHRib2R5PiIsICI8L3Rib2R5PjwvdGFibGU+IiBdLAotICAgIHRkOiBbIDMsICI8
dGFibGU+PHRib2R5Pjx0cj4iLCAiPC90cj48L3Rib2R5PjwvdGFibGU+IiBdLAotCi0gICAgX2Rl
ZmF1bHQ6IFsgMCwgIiIsICIiIF0KLX07Ci0KLS8vIFN1cHBvcnQ6IElFOQotd3JhcE1hcC5vcHRn
cm91cCA9IHdyYXBNYXAub3B0aW9uOwotCi13cmFwTWFwLnRib2R5ID0gd3JhcE1hcC50Zm9vdCA9
IHdyYXBNYXAuY29sZ3JvdXAgPSB3cmFwTWFwLmNhcHRpb24gPSB3cmFwTWFwLnRoZWFkOwotd3Jh
cE1hcC50aCA9IHdyYXBNYXAudGQ7Ci0KLQotZnVuY3Rpb24gZ2V0QWxsKCBjb250ZXh0LCB0YWcg
KSB7Ci0KLSAgICAvLyBTdXBwb3J0OiBJRTktMTErCi0gICAgLy8gVXNlIHR5cGVvZiB0byBhdm9p
ZCB6ZXJvLWFyZ3VtZW50IG1ldGhvZCBpbnZvY2F0aW9uIG9uIGhvc3Qgb2JqZWN0cyAoIzE1MTUx
KQotICAgIHZhciByZXQgPSB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0g
InVuZGVmaW5lZCIgPwotICAgICAgICAgICAgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSgg
dGFnIHx8ICIqIiApIDoKLSAgICAgICAgICAgIHR5cGVvZiBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JB
bGwgIT09ICJ1bmRlZmluZWQiID8KLSAgICAgICAgICAgICAgICBjb250ZXh0LnF1ZXJ5U2VsZWN0
b3JBbGwoIHRhZyB8fCAiKiIgKSA6Ci0gICAgICAgICAgICBbXTsKLQotICAgIHJldHVybiB0YWcg
PT09IHVuZGVmaW5lZCB8fCB0YWcgJiYgalF1ZXJ5Lm5vZGVOYW1lKCBjb250ZXh0LCB0YWcgKSA/
Ci0gICAgICAgIGpRdWVyeS5tZXJnZSggWyBjb250ZXh0IF0sIHJldCApIDoKLSAgICAgICAgcmV0
OwotfQotCi0KLS8vIE1hcmsgc2NyaXB0cyBhcyBoYXZpbmcgYWxyZWFkeSBiZWVuIGV2YWx1YXRl
ZAotZnVuY3Rpb24gc2V0R2xvYmFsRXZhbCggZWxlbXMsIHJlZkVsZW1lbnRzICkgewotICAgIHZh
ciBpID0gMCwKLSAgICAgICAgbCA9IGVsZW1zLmxlbmd0aDsKLQotICAgIGZvciAoIDsgaSA8IGw7
IGkrKyApIHsKLSAgICAgICAgZGF0YVByaXYuc2V0KAotICAgICAgICAgICAgZWxlbXNbIGkgXSwK
LSAgICAgICAgICAgICJnbG9iYWxFdmFsIiwKLSAgICAgICAgICAgICFyZWZFbGVtZW50cyB8fCBk
YXRhUHJpdi5nZXQoIHJlZkVsZW1lbnRzWyBpIF0sICJnbG9iYWxFdmFsIiApCi0gICAgICAgICk7
Ci0gICAgfQotfQotCi0KLXZhciByaHRtbCA9IC88fCYjP1x3KzsvOwotCi1mdW5jdGlvbiBidWls
ZEZyYWdtZW50KCBlbGVtcywgY29udGV4dCwgc2NyaXB0cywgc2VsZWN0aW9uLCBpZ25vcmVkICkg
ewotICAgIHZhciBlbGVtLCB0bXAsIHRhZywgd3JhcCwgY29udGFpbnMsIGosCi0gICAgICAgIGZy
YWdtZW50ID0gY29udGV4dC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksCi0gICAgICAgIG5vZGVz
ID0gW10sCi0gICAgICAgIGkgPSAwLAotICAgICAgICBsID0gZWxlbXMubGVuZ3RoOwotCi0gICAg
Zm9yICggOyBpIDwgbDsgaSsrICkgewotICAgICAgICBlbGVtID0gZWxlbXNbIGkgXTsKLQotICAg
ICAgICBpZiAoIGVsZW0gfHwgZWxlbSA9PT0gMCApIHsKLQotICAgICAgICAgICAgLy8gQWRkIG5v
ZGVzIGRpcmVjdGx5Ci0gICAgICAgICAgICBpZiAoIGpRdWVyeS50eXBlKCBlbGVtICkgPT09ICJv
YmplY3QiICkgewotCi0gICAgICAgICAgICAgICAgLy8gU3VwcG9ydDogQW5kcm9pZDw0LjEsIFBo
YW50b21KUzwyCi0gICAgICAgICAgICAgICAgLy8gcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRo
cm93cyBvbiBhbmNpZW50IFdlYktpdAotICAgICAgICAgICAgICAgIGpRdWVyeS5tZXJnZSggbm9k
ZXMsIGVsZW0ubm9kZVR5cGUgPyBbIGVsZW0gXSA6IGVsZW0gKTsKLQotICAgICAgICAgICAgLy8g
Q29udmVydCBub24taHRtbCBpbnRvIGEgdGV4dCBub2RlCi0gICAgICAgICAgICB9IGVsc2UgaWYg
KCAhcmh0bWwudGVzdCggZWxlbSApICkgewotICAgICAgICAgICAgICAgIG5vZGVzLnB1c2goIGNv
bnRleHQuY3JlYXRlVGV4dE5vZGUoIGVsZW0gKSApOwotCi0gICAgICAgICAgICAvLyBDb252ZXJ0
IGh0bWwgaW50byBET00gbm9kZXMKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgdG1wID0gdG1wIHx8IGZyYWdtZW50LmFwcGVuZENoaWxkKCBjb250ZXh0LmNyZWF0ZUVsZW1l
bnQoICJkaXYiICkgKTsKLQotICAgICAgICAgICAgICAgIC8vIERlc2VyaWFsaXplIGEgc3RhbmRh
cmQgcmVwcmVzZW50YXRpb24KLSAgICAgICAgICAgICAgICB0YWcgPSAoIHJ0YWdOYW1lLmV4ZWMo
IGVsZW0gKSB8fCBbICIiLCAiIiBdIClbIDEgXS50b0xvd2VyQ2FzZSgpOwotICAgICAgICAgICAg
ICAgIHdyYXAgPSB3cmFwTWFwWyB0YWcgXSB8fCB3cmFwTWFwLl9kZWZhdWx0OwotICAgICAgICAg
ICAgICAgIHRtcC5pbm5lckhUTUwgPSB3cmFwWyAxIF0gKyBqUXVlcnkuaHRtbFByZWZpbHRlcigg
ZWxlbSApICsgd3JhcFsgMiBdOwotCi0gICAgICAgICAgICAgICAgLy8gRGVzY2VuZCB0aHJvdWdo
IHdyYXBwZXJzIHRvIHRoZSByaWdodCBjb250ZW50Ci0gICAgICAgICAgICAgICAgaiA9IHdyYXBb
IDAgXTsKLSAgICAgICAgICAgICAgICB3aGlsZSAoIGotLSApIHsKLSAgICAgICAgICAgICAgICAg
ICAgdG1wID0gdG1wLmxhc3RDaGlsZDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICAvLyBTdXBwb3J0OiBBbmRyb2lkPDQuMSwgUGhhbnRvbUpTPDIKLSAgICAgICAgICAgICAg
ICAvLyBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzIG9uIGFuY2llbnQgV2ViS2l0Ci0g
ICAgICAgICAgICAgICAgalF1ZXJ5Lm1lcmdlKCBub2RlcywgdG1wLmNoaWxkTm9kZXMgKTsKLQot
ICAgICAgICAgICAgICAgIC8vIFJlbWVtYmVyIHRoZSB0b3AtbGV2ZWwgY29udGFpbmVyCi0gICAg
ICAgICAgICAgICAgdG1wID0gZnJhZ21lbnQuZmlyc3RDaGlsZDsKLQotICAgICAgICAgICAgICAg
IC8vIEVuc3VyZSB0aGUgY3JlYXRlZCBub2RlcyBhcmUgb3JwaGFuZWQgKCMxMjM5MikKLSAgICAg
ICAgICAgICAgICB0bXAudGV4dENvbnRlbnQgPSAiIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH0KLQotICAgIC8vIFJlbW92ZSB3cmFwcGVyIGZyb20gZnJhZ21lbnQKLSAgICBmcmFn
bWVudC50ZXh0Q29udGVudCA9ICIiOwotCi0gICAgaSA9IDA7Ci0gICAgd2hpbGUgKCAoIGVsZW0g
PSBub2Rlc1sgaSsrIF0gKSApIHsKLQotICAgICAgICAvLyBTa2lwIGVsZW1lbnRzIGFscmVhZHkg
aW4gdGhlIGNvbnRleHQgY29sbGVjdGlvbiAodHJhYy00MDg3KQotICAgICAgICBpZiAoIHNlbGVj
dGlvbiAmJiBqUXVlcnkuaW5BcnJheSggZWxlbSwgc2VsZWN0aW9uICkgPiAtMSApIHsKLSAgICAg
ICAgICAgIGlmICggaWdub3JlZCApIHsKLSAgICAgICAgICAgICAgICBpZ25vcmVkLnB1c2goIGVs
ZW0gKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0K
LSAgICAgICAgY29udGFpbnMgPSBqUXVlcnkuY29udGFpbnMoIGVsZW0ub3duZXJEb2N1bWVudCwg
ZWxlbSApOwotCi0gICAgICAgIC8vIEFwcGVuZCB0byBmcmFnbWVudAotICAgICAgICB0bXAgPSBn
ZXRBbGwoIGZyYWdtZW50LmFwcGVuZENoaWxkKCBlbGVtICksICJzY3JpcHQiICk7Ci0KLSAgICAg
ICAgLy8gUHJlc2VydmUgc2NyaXB0IGV2YWx1YXRpb24gaGlzdG9yeQotICAgICAgICBpZiAoIGNv
bnRhaW5zICkgewotICAgICAgICAgICAgc2V0R2xvYmFsRXZhbCggdG1wICk7Ci0gICAgICAgIH0K
LQotICAgICAgICAvLyBDYXB0dXJlIGV4ZWN1dGFibGVzCi0gICAgICAgIGlmICggc2NyaXB0cyAp
IHsKLSAgICAgICAgICAgIGogPSAwOwotICAgICAgICAgICAgd2hpbGUgKCAoIGVsZW0gPSB0bXBb
IGorKyBdICkgKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCByc2NyaXB0VHlwZS50ZXN0KCBlbGVt
LnR5cGUgfHwgIiIgKSApIHsKLSAgICAgICAgICAgICAgICAgICAgc2NyaXB0cy5wdXNoKCBlbGVt
ICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgcmV0dXJuIGZyYWdtZW50OwotfQotCi0KLSggZnVuY3Rpb24oKSB7Ci0gICAgdmFyIGZy
YWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLAotICAgICAgICBkaXYg
PSBmcmFnbWVudC5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggImRpdiIgKSAp
LAotICAgICAgICBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJpbnB1dCIgKTsKLQot
ICAgIC8vIFN1cHBvcnQ6IEFuZHJvaWQgNC4wLTQuMywgU2FmYXJpPD01LjEKLSAgICAvLyBDaGVj
ayBzdGF0ZSBsb3N0IGlmIHRoZSBuYW1lIGlzIHNldCAoIzExMjE3KQotICAgIC8vIFN1cHBvcnQ6
IFdpbmRvd3MgV2ViIEFwcHMgKFdXQSkKLSAgICAvLyBgbmFtZWAgYW5kIGB0eXBlYCBtdXN0IHVz
ZSAuc2V0QXR0cmlidXRlIGZvciBXV0EgKCMxNDkwMSkKLSAgICBpbnB1dC5zZXRBdHRyaWJ1dGUo
ICJ0eXBlIiwgInJhZGlvIiApOwotICAgIGlucHV0LnNldEF0dHJpYnV0ZSggImNoZWNrZWQiLCAi
Y2hlY2tlZCIgKTsKLSAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoICJuYW1lIiwgInQiICk7Ci0KLSAg
ICBkaXYuYXBwZW5kQ2hpbGQoIGlucHV0ICk7Ci0KLSAgICAvLyBTdXBwb3J0OiBTYWZhcmk8PTUu
MSwgQW5kcm9pZDw0LjIKLSAgICAvLyBPbGRlciBXZWJLaXQgZG9lc24ndCBjbG9uZSBjaGVja2Vk
IHN0YXRlIGNvcnJlY3RseSBpbiBmcmFnbWVudHMKLSAgICBzdXBwb3J0LmNoZWNrQ2xvbmUgPSBk
aXYuY2xvbmVOb2RlKCB0cnVlICkuY2xvbmVOb2RlKCB0cnVlICkubGFzdENoaWxkLmNoZWNrZWQ7
Ci0KLSAgICAvLyBTdXBwb3J0OiBJRTw9MTErCi0gICAgLy8gTWFrZSBzdXJlIHRleHRhcmVhIChh
bmQgY2hlY2tib3gpIGRlZmF1bHRWYWx1ZSBpcyBwcm9wZXJseSBjbG9uZWQKLSAgICBkaXYuaW5u
ZXJIVE1MID0gIjx0ZXh0YXJlYT54PC90ZXh0YXJlYT4iOwotICAgIHN1cHBvcnQubm9DbG9uZUNo
ZWNrZWQgPSAhIWRpdi5jbG9uZU5vZGUoIHRydWUgKS5sYXN0Q2hpbGQuZGVmYXVsdFZhbHVlOwot
fSApKCk7Ci0KLQotdmFyCi0gICAgcmtleUV2ZW50ID0gL15rZXkvLAotICAgIHJtb3VzZUV2ZW50
ID0gL14oPzptb3VzZXxwb2ludGVyfGNvbnRleHRtZW51fGRyYWd8ZHJvcCl8Y2xpY2svLAotICAg
IHJ0eXBlbmFtZXNwYWNlID0gL14oW14uXSopKD86XC4oLispfCkvOwotCi1mdW5jdGlvbiByZXR1
cm5UcnVlKCkgewotICAgIHJldHVybiB0cnVlOwotfQotCi1mdW5jdGlvbiByZXR1cm5GYWxzZSgp
IHsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLS8vIFN1cHBvcnQ6IElFOQotLy8gU2VlICMxMzM5
MyBmb3IgbW9yZSBpbmZvCi1mdW5jdGlvbiBzYWZlQWN0aXZlRWxlbWVudCgpIHsKLSAgICB0cnkg
ewotICAgICAgICByZXR1cm4gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDsKLSAgICB9IGNhdGNoICgg
ZXJyICkgeyB9Ci19Ci0KLWZ1bmN0aW9uIG9uKCBlbGVtLCB0eXBlcywgc2VsZWN0b3IsIGRhdGEs
IGZuLCBvbmUgKSB7Ci0gICAgdmFyIG9yaWdGbiwgdHlwZTsKLQotICAgIC8vIFR5cGVzIGNhbiBi
ZSBhIG1hcCBvZiB0eXBlcy9oYW5kbGVycwotICAgIGlmICggdHlwZW9mIHR5cGVzID09PSAib2Jq
ZWN0IiApIHsKLQotICAgICAgICAvLyAoIHR5cGVzLU9iamVjdCwgc2VsZWN0b3IsIGRhdGEgKQot
ICAgICAgICBpZiAoIHR5cGVvZiBzZWxlY3RvciAhPT0gInN0cmluZyIgKSB7Ci0KLSAgICAgICAg
ICAgIC8vICggdHlwZXMtT2JqZWN0LCBkYXRhICkKLSAgICAgICAgICAgIGRhdGEgPSBkYXRhIHx8
IHNlbGVjdG9yOwotICAgICAgICAgICAgc2VsZWN0b3IgPSB1bmRlZmluZWQ7Ci0gICAgICAgIH0K
LSAgICAgICAgZm9yICggdHlwZSBpbiB0eXBlcyApIHsKLSAgICAgICAgICAgIG9uKCBlbGVtLCB0
eXBlLCBzZWxlY3RvciwgZGF0YSwgdHlwZXNbIHR5cGUgXSwgb25lICk7Ci0gICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIGVsZW07Ci0gICAgfQotCi0gICAgaWYgKCBkYXRhID09IG51bGwgJiYgZm4g
PT0gbnVsbCApIHsKLQotICAgICAgICAvLyAoIHR5cGVzLCBmbiApCi0gICAgICAgIGZuID0gc2Vs
ZWN0b3I7Ci0gICAgICAgIGRhdGEgPSBzZWxlY3RvciA9IHVuZGVmaW5lZDsKLSAgICB9IGVsc2Ug
aWYgKCBmbiA9PSBudWxsICkgewotICAgICAgICBpZiAoIHR5cGVvZiBzZWxlY3RvciA9PT0gInN0
cmluZyIgKSB7Ci0KLSAgICAgICAgICAgIC8vICggdHlwZXMsIHNlbGVjdG9yLCBmbiApCi0gICAg
ICAgICAgICBmbiA9IGRhdGE7Ci0gICAgICAgICAgICBkYXRhID0gdW5kZWZpbmVkOwotICAgICAg
ICB9IGVsc2UgewotCi0gICAgICAgICAgICAvLyAoIHR5cGVzLCBkYXRhLCBmbiApCi0gICAgICAg
ICAgICBmbiA9IGRhdGE7Ci0gICAgICAgICAgICBkYXRhID0gc2VsZWN0b3I7Ci0gICAgICAgICAg
ICBzZWxlY3RvciA9IHVuZGVmaW5lZDsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoIGZuID09
PSBmYWxzZSApIHsKLSAgICAgICAgZm4gPSByZXR1cm5GYWxzZTsKLSAgICB9IGVsc2UgaWYgKCAh
Zm4gKSB7Ci0gICAgICAgIHJldHVybiBlbGVtOwotICAgIH0KLQotICAgIGlmICggb25lID09PSAx
ICkgewotICAgICAgICBvcmlnRm4gPSBmbjsKLSAgICAgICAgZm4gPSBmdW5jdGlvbiggZXZlbnQg
KSB7Ci0KLSAgICAgICAgICAgIC8vIENhbiB1c2UgYW4gZW1wdHkgc2V0LCBzaW5jZSBldmVudCBj
b250YWlucyB0aGUgaW5mbwotICAgICAgICAgICAgalF1ZXJ5KCkub2ZmKCBldmVudCApOwotICAg
ICAgICAgICAgcmV0dXJuIG9yaWdGbi5hcHBseSggdGhpcywgYXJndW1lbnRzICk7Ci0gICAgICAg
IH07Ci0KLSAgICAgICAgLy8gVXNlIHNhbWUgZ3VpZCBzbyBjYWxsZXIgY2FuIHJlbW92ZSB1c2lu
ZyBvcmlnRm4KLSAgICAgICAgZm4uZ3VpZCA9IG9yaWdGbi5ndWlkIHx8ICggb3JpZ0ZuLmd1aWQg
PSBqUXVlcnkuZ3VpZCsrICk7Ci0gICAgfQotICAgIHJldHVybiBlbGVtLmVhY2goIGZ1bmN0aW9u
KCkgewotICAgICAgICBqUXVlcnkuZXZlbnQuYWRkKCB0aGlzLCB0eXBlcywgZm4sIGRhdGEsIHNl
bGVjdG9yICk7Ci0gICAgfSApOwotfQotCi0vKgotICogSGVscGVyIGZ1bmN0aW9ucyBmb3IgbWFu
YWdpbmcgZXZlbnRzIC0tIG5vdCBwYXJ0IG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLgotICogUHJv
cHMgdG8gRGVhbiBFZHdhcmRzJyBhZGRFdmVudCBsaWJyYXJ5IGZvciBtYW55IG9mIHRoZSBpZGVh
cy4KLSAqLwotalF1ZXJ5LmV2ZW50ID0gewotCi0gICAgZ2xvYmFsOiB7fSwKLQotICAgIGFkZDog
ZnVuY3Rpb24oIGVsZW0sIHR5cGVzLCBoYW5kbGVyLCBkYXRhLCBzZWxlY3RvciApIHsKLQotICAg
ICAgICB2YXIgaGFuZGxlT2JqSW4sIGV2ZW50SGFuZGxlLCB0bXAsCi0gICAgICAgICAgICBldmVu
dHMsIHQsIGhhbmRsZU9iaiwKLSAgICAgICAgICAgIHNwZWNpYWwsIGhhbmRsZXJzLCB0eXBlLCBu
YW1lc3BhY2VzLCBvcmlnVHlwZSwKLSAgICAgICAgICAgIGVsZW1EYXRhID0gZGF0YVByaXYuZ2V0
KCBlbGVtICk7Ci0KLSAgICAgICAgLy8gRG9uJ3QgYXR0YWNoIGV2ZW50cyB0byBub0RhdGEgb3Ig
dGV4dC9jb21tZW50IG5vZGVzIChidXQgYWxsb3cgcGxhaW4gb2JqZWN0cykKLSAgICAgICAgaWYg
KCAhZWxlbURhdGEgKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAg
ICAvLyBDYWxsZXIgY2FuIHBhc3MgaW4gYW4gb2JqZWN0IG9mIGN1c3RvbSBkYXRhIGluIGxpZXUg
b2YgdGhlIGhhbmRsZXIKLSAgICAgICAgaWYgKCBoYW5kbGVyLmhhbmRsZXIgKSB7Ci0gICAgICAg
ICAgICBoYW5kbGVPYmpJbiA9IGhhbmRsZXI7Ci0gICAgICAgICAgICBoYW5kbGVyID0gaGFuZGxl
T2JqSW4uaGFuZGxlcjsKLSAgICAgICAgICAgIHNlbGVjdG9yID0gaGFuZGxlT2JqSW4uc2VsZWN0
b3I7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgaGFuZGxlciBo
YXMgYSB1bmlxdWUgSUQsIHVzZWQgdG8gZmluZC9yZW1vdmUgaXQgbGF0ZXIKLSAgICAgICAgaWYg
KCAhaGFuZGxlci5ndWlkICkgewotICAgICAgICAgICAgaGFuZGxlci5ndWlkID0galF1ZXJ5Lmd1
aWQrKzsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEluaXQgdGhlIGVsZW1lbnQncyBldmVudCBz
dHJ1Y3R1cmUgYW5kIG1haW4gaGFuZGxlciwgaWYgdGhpcyBpcyB0aGUgZmlyc3QKLSAgICAgICAg
aWYgKCAhKCBldmVudHMgPSBlbGVtRGF0YS5ldmVudHMgKSApIHsKLSAgICAgICAgICAgIGV2ZW50
cyA9IGVsZW1EYXRhLmV2ZW50cyA9IHt9OwotICAgICAgICB9Ci0gICAgICAgIGlmICggISggZXZl
bnRIYW5kbGUgPSBlbGVtRGF0YS5oYW5kbGUgKSApIHsKLSAgICAgICAgICAgIGV2ZW50SGFuZGxl
ID0gZWxlbURhdGEuaGFuZGxlID0gZnVuY3Rpb24oIGUgKSB7Ci0KLSAgICAgICAgICAgICAgICAv
LyBEaXNjYXJkIHRoZSBzZWNvbmQgZXZlbnQgb2YgYSBqUXVlcnkuZXZlbnQudHJpZ2dlcigpIGFu
ZAotICAgICAgICAgICAgICAgIC8vIHdoZW4gYW4gZXZlbnQgaXMgY2FsbGVkIGFmdGVyIGEgcGFn
ZSBoYXMgdW5sb2FkZWQKLSAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIGpRdWVyeSAhPT0g
InVuZGVmaW5lZCIgJiYgalF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCAhPT0gZS50eXBlID8KLSAgICAg
ICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LmRpc3BhdGNoLmFwcGx5KCBlbGVtLCBhcmd1bWVu
dHMgKSA6IHVuZGVmaW5lZDsKLSAgICAgICAgICAgIH07Ci0gICAgICAgIH0KLQotICAgICAgICAv
LyBIYW5kbGUgbXVsdGlwbGUgZXZlbnRzIHNlcGFyYXRlZCBieSBhIHNwYWNlCi0gICAgICAgIHR5
cGVzID0gKCB0eXBlcyB8fCAiIiApLm1hdGNoKCBybm90d2hpdGUgKSB8fCBbICIiIF07Ci0gICAg
ICAgIHQgPSB0eXBlcy5sZW5ndGg7Ci0gICAgICAgIHdoaWxlICggdC0tICkgewotICAgICAgICAg
ICAgdG1wID0gcnR5cGVuYW1lc3BhY2UuZXhlYyggdHlwZXNbIHQgXSApIHx8IFtdOwotICAgICAg
ICAgICAgdHlwZSA9IG9yaWdUeXBlID0gdG1wWyAxIF07Ci0gICAgICAgICAgICBuYW1lc3BhY2Vz
ID0gKCB0bXBbIDIgXSB8fCAiIiApLnNwbGl0KCAiLiIgKS5zb3J0KCk7Ci0KLSAgICAgICAgICAg
IC8vIFRoZXJlICptdXN0KiBiZSBhIHR5cGUsIG5vIGF0dGFjaGluZyBuYW1lc3BhY2Utb25seSBo
YW5kbGVycwotICAgICAgICAgICAgaWYgKCAhdHlwZSApIHsKLSAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gSWYgZXZlbnQgY2hhbmdlcyBp
dHMgdHlwZSwgdXNlIHRoZSBzcGVjaWFsIGV2ZW50IGhhbmRsZXJzIGZvciB0aGUgY2hhbmdlZCB0
eXBlCi0gICAgICAgICAgICBzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8
fCB7fTsKLQotICAgICAgICAgICAgLy8gSWYgc2VsZWN0b3IgZGVmaW5lZCwgZGV0ZXJtaW5lIHNw
ZWNpYWwgZXZlbnQgYXBpIHR5cGUsIG90aGVyd2lzZSBnaXZlbiB0eXBlCi0gICAgICAgICAgICB0
eXBlID0gKCBzZWxlY3RvciA/IHNwZWNpYWwuZGVsZWdhdGVUeXBlIDogc3BlY2lhbC5iaW5kVHlw
ZSApIHx8IHR5cGU7Ci0KLSAgICAgICAgICAgIC8vIFVwZGF0ZSBzcGVjaWFsIGJhc2VkIG9uIG5l
d2x5IHJlc2V0IHR5cGUKLSAgICAgICAgICAgIHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lh
bFsgdHlwZSBdIHx8IHt9OwotCi0gICAgICAgICAgICAvLyBoYW5kbGVPYmogaXMgcGFzc2VkIHRv
IGFsbCBldmVudCBoYW5kbGVycwotICAgICAgICAgICAgaGFuZGxlT2JqID0galF1ZXJ5LmV4dGVu
ZCggewotICAgICAgICAgICAgICAgIHR5cGU6IHR5cGUsCi0gICAgICAgICAgICAgICAgb3JpZ1R5
cGU6IG9yaWdUeXBlLAotICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEsCi0gICAgICAgICAgICAg
ICAgaGFuZGxlcjogaGFuZGxlciwKLSAgICAgICAgICAgICAgICBndWlkOiBoYW5kbGVyLmd1aWQs
Ci0gICAgICAgICAgICAgICAgc2VsZWN0b3I6IHNlbGVjdG9yLAotICAgICAgICAgICAgICAgIG5l
ZWRzQ29udGV4dDogc2VsZWN0b3IgJiYgalF1ZXJ5LmV4cHIubWF0Y2gubmVlZHNDb250ZXh0LnRl
c3QoIHNlbGVjdG9yICksCi0gICAgICAgICAgICAgICAgbmFtZXNwYWNlOiBuYW1lc3BhY2VzLmpv
aW4oICIuIiApCi0gICAgICAgICAgICB9LCBoYW5kbGVPYmpJbiApOwotCi0gICAgICAgICAgICAv
LyBJbml0IHRoZSBldmVudCBoYW5kbGVyIHF1ZXVlIGlmIHdlJ3JlIHRoZSBmaXJzdAotICAgICAg
ICAgICAgaWYgKCAhKCBoYW5kbGVycyA9IGV2ZW50c1sgdHlwZSBdICkgKSB7Ci0gICAgICAgICAg
ICAgICAgaGFuZGxlcnMgPSBldmVudHNbIHR5cGUgXSA9IFtdOwotICAgICAgICAgICAgICAgIGhh
bmRsZXJzLmRlbGVnYXRlQ291bnQgPSAwOwotCi0gICAgICAgICAgICAgICAgLy8gT25seSB1c2Ug
YWRkRXZlbnRMaXN0ZW5lciBpZiB0aGUgc3BlY2lhbCBldmVudHMgaGFuZGxlciByZXR1cm5zIGZh
bHNlCi0gICAgICAgICAgICAgICAgaWYgKCAhc3BlY2lhbC5zZXR1cCB8fAotICAgICAgICAgICAg
ICAgICAgICBzcGVjaWFsLnNldHVwLmNhbGwoIGVsZW0sIGRhdGEsIG5hbWVzcGFjZXMsIGV2ZW50
SGFuZGxlICkgPT09IGZhbHNlICkgewotCi0gICAgICAgICAgICAgICAgICAgIGlmICggZWxlbS5h
ZGRFdmVudExpc3RlbmVyICkgewotICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5hZGRFdmVu
dExpc3RlbmVyKCB0eXBlLCBldmVudEhhbmRsZSApOwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIHNwZWNp
YWwuYWRkICkgewotICAgICAgICAgICAgICAgIHNwZWNpYWwuYWRkLmNhbGwoIGVsZW0sIGhhbmRs
ZU9iaiApOwotCi0gICAgICAgICAgICAgICAgaWYgKCAhaGFuZGxlT2JqLmhhbmRsZXIuZ3VpZCAp
IHsKLSAgICAgICAgICAgICAgICAgICAgaGFuZGxlT2JqLmhhbmRsZXIuZ3VpZCA9IGhhbmRsZXIu
Z3VpZDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8v
IEFkZCB0byB0aGUgZWxlbWVudCdzIGhhbmRsZXIgbGlzdCwgZGVsZWdhdGVzIGluIGZyb250Ci0g
ICAgICAgICAgICBpZiAoIHNlbGVjdG9yICkgewotICAgICAgICAgICAgICAgIGhhbmRsZXJzLnNw
bGljZSggaGFuZGxlcnMuZGVsZWdhdGVDb3VudCsrLCAwLCBoYW5kbGVPYmogKTsKLSAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaGFuZGxlcnMucHVzaCggaGFuZGxlT2JqICk7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIEtlZXAgdHJhY2sgb2Ygd2hpY2ggZXZl
bnRzIGhhdmUgZXZlciBiZWVuIHVzZWQsIGZvciBldmVudCBvcHRpbWl6YXRpb24KLSAgICAgICAg
ICAgIGpRdWVyeS5ldmVudC5nbG9iYWxbIHR5cGUgXSA9IHRydWU7Ci0gICAgICAgIH0KLQotICAg
IH0sCi0KLSAgICAvLyBEZXRhY2ggYW4gZXZlbnQgb3Igc2V0IG9mIGV2ZW50cyBmcm9tIGFuIGVs
ZW1lbnQKLSAgICByZW1vdmU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlcywgaGFuZGxlciwgc2VsZWN0
b3IsIG1hcHBlZFR5cGVzICkgewotCi0gICAgICAgIHZhciBqLCBvcmlnQ291bnQsIHRtcCwKLSAg
ICAgICAgICAgIGV2ZW50cywgdCwgaGFuZGxlT2JqLAotICAgICAgICAgICAgc3BlY2lhbCwgaGFu
ZGxlcnMsIHR5cGUsIG5hbWVzcGFjZXMsIG9yaWdUeXBlLAotICAgICAgICAgICAgZWxlbURhdGEg
PSBkYXRhUHJpdi5oYXNEYXRhKCBlbGVtICkgJiYgZGF0YVByaXYuZ2V0KCBlbGVtICk7Ci0KLSAg
ICAgICAgaWYgKCAhZWxlbURhdGEgfHwgISggZXZlbnRzID0gZWxlbURhdGEuZXZlbnRzICkgKSB7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBPbmNlIGZvciBl
YWNoIHR5cGUubmFtZXNwYWNlIGluIHR5cGVzOyB0eXBlIG1heSBiZSBvbWl0dGVkCi0gICAgICAg
IHR5cGVzID0gKCB0eXBlcyB8fCAiIiApLm1hdGNoKCBybm90d2hpdGUgKSB8fCBbICIiIF07Ci0g
ICAgICAgIHQgPSB0eXBlcy5sZW5ndGg7Ci0gICAgICAgIHdoaWxlICggdC0tICkgewotICAgICAg
ICAgICAgdG1wID0gcnR5cGVuYW1lc3BhY2UuZXhlYyggdHlwZXNbIHQgXSApIHx8IFtdOwotICAg
ICAgICAgICAgdHlwZSA9IG9yaWdUeXBlID0gdG1wWyAxIF07Ci0gICAgICAgICAgICBuYW1lc3Bh
Y2VzID0gKCB0bXBbIDIgXSB8fCAiIiApLnNwbGl0KCAiLiIgKS5zb3J0KCk7Ci0KLSAgICAgICAg
ICAgIC8vIFVuYmluZCBhbGwgZXZlbnRzIChvbiB0aGlzIG5hbWVzcGFjZSwgaWYgcHJvdmlkZWQp
IGZvciB0aGUgZWxlbWVudAotICAgICAgICAgICAgaWYgKCAhdHlwZSApIHsKLSAgICAgICAgICAg
ICAgICBmb3IgKCB0eXBlIGluIGV2ZW50cyApIHsKLSAgICAgICAgICAgICAgICAgICAgalF1ZXJ5
LmV2ZW50LnJlbW92ZSggZWxlbSwgdHlwZSArIHR5cGVzWyB0IF0sIGhhbmRsZXIsIHNlbGVjdG9y
LCB0cnVlICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNp
YWxbIHR5cGUgXSB8fCB7fTsKLSAgICAgICAgICAgIHR5cGUgPSAoIHNlbGVjdG9yID8gc3BlY2lh
bC5kZWxlZ2F0ZVR5cGUgOiBzcGVjaWFsLmJpbmRUeXBlICkgfHwgdHlwZTsKLSAgICAgICAgICAg
IGhhbmRsZXJzID0gZXZlbnRzWyB0eXBlIF0gfHwgW107Ci0gICAgICAgICAgICB0bXAgPSB0bXBb
IDIgXSAmJgotICAgICAgICAgICAgICAgIG5ldyBSZWdFeHAoICIoXnxcXC4pIiArIG5hbWVzcGFj
ZXMuam9pbiggIlxcLig/Oi4qXFwufCkiICkgKyAiKFxcLnwkKSIgKTsKLQotICAgICAgICAgICAg
Ly8gUmVtb3ZlIG1hdGNoaW5nIGV2ZW50cwotICAgICAgICAgICAgb3JpZ0NvdW50ID0gaiA9IGhh
bmRsZXJzLmxlbmd0aDsKLSAgICAgICAgICAgIHdoaWxlICggai0tICkgewotICAgICAgICAgICAg
ICAgIGhhbmRsZU9iaiA9IGhhbmRsZXJzWyBqIF07Ci0KLSAgICAgICAgICAgICAgICBpZiAoICgg
bWFwcGVkVHlwZXMgfHwgb3JpZ1R5cGUgPT09IGhhbmRsZU9iai5vcmlnVHlwZSApICYmCi0gICAg
ICAgICAgICAgICAgICAgICggIWhhbmRsZXIgfHwgaGFuZGxlci5ndWlkID09PSBoYW5kbGVPYmou
Z3VpZCApICYmCi0gICAgICAgICAgICAgICAgICAgICggIXRtcCB8fCB0bXAudGVzdCggaGFuZGxl
T2JqLm5hbWVzcGFjZSApICkgJiYKLSAgICAgICAgICAgICAgICAgICAgKCAhc2VsZWN0b3IgfHwg
c2VsZWN0b3IgPT09IGhhbmRsZU9iai5zZWxlY3RvciB8fAotICAgICAgICAgICAgICAgICAgICAg
ICAgc2VsZWN0b3IgPT09ICIqKiIgJiYgaGFuZGxlT2JqLnNlbGVjdG9yICkgKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGhhbmRsZXJzLnNwbGljZSggaiwgMSApOwotCi0gICAgICAgICAgICAgICAg
ICAgIGlmICggaGFuZGxlT2JqLnNlbGVjdG9yICkgewotICAgICAgICAgICAgICAgICAgICAgICAg
aGFuZGxlcnMuZGVsZWdhdGVDb3VudC0tOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgIGlmICggc3BlY2lhbC5yZW1vdmUgKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBzcGVjaWFsLnJlbW92ZS5jYWxsKCBlbGVtLCBoYW5kbGVPYmogKTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgLy8gUmVtb3ZlIGdlbmVyaWMgZXZlbnQgaGFuZGxlciBpZiB3ZSByZW1vdmVkIHNvbWV0aGlu
ZyBhbmQgbm8gbW9yZSBoYW5kbGVycyBleGlzdAotICAgICAgICAgICAgLy8gKGF2b2lkcyBwb3Rl
bnRpYWwgZm9yIGVuZGxlc3MgcmVjdXJzaW9uIGR1cmluZyByZW1vdmFsIG9mIHNwZWNpYWwgZXZl
bnQgaGFuZGxlcnMpCi0gICAgICAgICAgICBpZiAoIG9yaWdDb3VudCAmJiAhaGFuZGxlcnMubGVu
Z3RoICkgewotICAgICAgICAgICAgICAgIGlmICggIXNwZWNpYWwudGVhcmRvd24gfHwKLSAgICAg
ICAgICAgICAgICAgICAgc3BlY2lhbC50ZWFyZG93bi5jYWxsKCBlbGVtLCBuYW1lc3BhY2VzLCBl
bGVtRGF0YS5oYW5kbGUgKSA9PT0gZmFsc2UgKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgalF1
ZXJ5LnJlbW92ZUV2ZW50KCBlbGVtLCB0eXBlLCBlbGVtRGF0YS5oYW5kbGUgKTsKLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBkZWxldGUgZXZlbnRzWyB0eXBlIF07Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBSZW1vdmUgZGF0YSBhbmQgdGhlIGV4
cGFuZG8gaWYgaXQncyBubyBsb25nZXIgdXNlZAotICAgICAgICBpZiAoIGpRdWVyeS5pc0VtcHR5
T2JqZWN0KCBldmVudHMgKSApIHsKLSAgICAgICAgICAgIGRhdGFQcml2LnJlbW92ZSggZWxlbSwg
ImhhbmRsZSBldmVudHMiICk7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgZGlzcGF0Y2g6IGZ1
bmN0aW9uKCBldmVudCApIHsKLQotICAgICAgICAvLyBNYWtlIGEgd3JpdGFibGUgalF1ZXJ5LkV2
ZW50IGZyb20gdGhlIG5hdGl2ZSBldmVudCBvYmplY3QKLSAgICAgICAgZXZlbnQgPSBqUXVlcnku
ZXZlbnQuZml4KCBldmVudCApOwotCi0gICAgICAgIHZhciBpLCBqLCByZXQsIG1hdGNoZWQsIGhh
bmRsZU9iaiwKLSAgICAgICAgICAgIGhhbmRsZXJRdWV1ZSA9IFtdLAotICAgICAgICAgICAgYXJn
cyA9IHNsaWNlLmNhbGwoIGFyZ3VtZW50cyApLAotICAgICAgICAgICAgaGFuZGxlcnMgPSAoIGRh
dGFQcml2LmdldCggdGhpcywgImV2ZW50cyIgKSB8fCB7fSApWyBldmVudC50eXBlIF0gfHwgW10s
Ci0gICAgICAgICAgICBzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIGV2ZW50LnR5cGUg
XSB8fCB7fTsKLQotICAgICAgICAvLyBVc2UgdGhlIGZpeC1lZCBqUXVlcnkuRXZlbnQgcmF0aGVy
IHRoYW4gdGhlIChyZWFkLW9ubHkpIG5hdGl2ZSBldmVudAotICAgICAgICBhcmdzWyAwIF0gPSBl
dmVudDsKLSAgICAgICAgZXZlbnQuZGVsZWdhdGVUYXJnZXQgPSB0aGlzOwotCi0gICAgICAgIC8v
IENhbGwgdGhlIHByZURpc3BhdGNoIGhvb2sgZm9yIHRoZSBtYXBwZWQgdHlwZSwgYW5kIGxldCBp
dCBiYWlsIGlmIGRlc2lyZWQKLSAgICAgICAgaWYgKCBzcGVjaWFsLnByZURpc3BhdGNoICYmIHNw
ZWNpYWwucHJlRGlzcGF0Y2guY2FsbCggdGhpcywgZXZlbnQgKSA9PT0gZmFsc2UgKSB7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBEZXRlcm1pbmUgaGFuZGxl
cnMKLSAgICAgICAgaGFuZGxlclF1ZXVlID0galF1ZXJ5LmV2ZW50LmhhbmRsZXJzLmNhbGwoIHRo
aXMsIGV2ZW50LCBoYW5kbGVycyApOwotCi0gICAgICAgIC8vIFJ1biBkZWxlZ2F0ZXMgZmlyc3Q7
IHRoZXkgbWF5IHdhbnQgdG8gc3RvcCBwcm9wYWdhdGlvbiBiZW5lYXRoIHVzCi0gICAgICAgIGkg
PSAwOwotICAgICAgICB3aGlsZSAoICggbWF0Y2hlZCA9IGhhbmRsZXJRdWV1ZVsgaSsrIF0gKSAm
JiAhZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSApIHsKLSAgICAgICAgICAgIGV2ZW50LmN1
cnJlbnRUYXJnZXQgPSBtYXRjaGVkLmVsZW07Ci0KLSAgICAgICAgICAgIGogPSAwOwotICAgICAg
ICAgICAgd2hpbGUgKCAoIGhhbmRsZU9iaiA9IG1hdGNoZWQuaGFuZGxlcnNbIGorKyBdICkgJiYK
LSAgICAgICAgICAgICAgICAhZXZlbnQuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKSAp
IHsKLQotICAgICAgICAgICAgICAgIC8vIFRyaWdnZXJlZCBldmVudCBtdXN0IGVpdGhlciAxKSBo
YXZlIG5vIG5hbWVzcGFjZSwgb3IgMikgaGF2ZSBuYW1lc3BhY2UocykKLSAgICAgICAgICAgICAg
ICAvLyBhIHN1YnNldCBvciBlcXVhbCB0byB0aG9zZSBpbiB0aGUgYm91bmQgZXZlbnQgKGJvdGgg
Y2FuIGhhdmUgbm8gbmFtZXNwYWNlKS4KLSAgICAgICAgICAgICAgICBpZiAoICFldmVudC5ybmFt
ZXNwYWNlIHx8IGV2ZW50LnJuYW1lc3BhY2UudGVzdCggaGFuZGxlT2JqLm5hbWVzcGFjZSApICkg
ewotCi0gICAgICAgICAgICAgICAgICAgIGV2ZW50LmhhbmRsZU9iaiA9IGhhbmRsZU9iajsKLSAg
ICAgICAgICAgICAgICAgICAgZXZlbnQuZGF0YSA9IGhhbmRsZU9iai5kYXRhOwotCi0gICAgICAg
ICAgICAgICAgICAgIHJldCA9ICggKCBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgaGFuZGxlT2JqLm9y
aWdUeXBlIF0gfHwge30gKS5oYW5kbGUgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRs
ZU9iai5oYW5kbGVyICkuYXBwbHkoIG1hdGNoZWQuZWxlbSwgYXJncyApOwotCi0gICAgICAgICAg
ICAgICAgICAgIGlmICggcmV0ICE9PSB1bmRlZmluZWQgKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoICggZXZlbnQucmVzdWx0ID0gcmV0ICkgPT09IGZhbHNlICkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBDYWxsIHRoZSBwb3N0RGlzcGF0Y2gg
aG9vayBmb3IgdGhlIG1hcHBlZCB0eXBlCi0gICAgICAgIGlmICggc3BlY2lhbC5wb3N0RGlzcGF0
Y2ggKSB7Ci0gICAgICAgICAgICBzcGVjaWFsLnBvc3REaXNwYXRjaC5jYWxsKCB0aGlzLCBldmVu
dCApOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGV2ZW50LnJlc3VsdDsKLSAgICB9LAot
Ci0gICAgaGFuZGxlcnM6IGZ1bmN0aW9uKCBldmVudCwgaGFuZGxlcnMgKSB7Ci0gICAgICAgIHZh
ciBpLCBtYXRjaGVzLCBzZWwsIGhhbmRsZU9iaiwKLSAgICAgICAgICAgIGhhbmRsZXJRdWV1ZSA9
IFtdLAotICAgICAgICAgICAgZGVsZWdhdGVDb3VudCA9IGhhbmRsZXJzLmRlbGVnYXRlQ291bnQs
Ci0gICAgICAgICAgICBjdXIgPSBldmVudC50YXJnZXQ7Ci0KLSAgICAgICAgLy8gU3VwcG9ydCAo
YXQgbGVhc3QpOiBDaHJvbWUsIElFOQotICAgICAgICAvLyBGaW5kIGRlbGVnYXRlIGhhbmRsZXJz
Ci0gICAgICAgIC8vIEJsYWNrLWhvbGUgU1ZHIDx1c2U+IGluc3RhbmNlIHRyZWVzICgjMTMxODAp
Ci0gICAgICAgIC8vCi0gICAgICAgIC8vIFN1cHBvcnQ6IEZpcmVmb3g8PTQyKwotICAgICAgICAv
LyBBdm9pZCBub24tbGVmdC1jbGljayBpbiBGRiBidXQgZG9uJ3QgYmxvY2sgSUUgcmFkaW8gZXZl
bnRzICgjMzg2MSwgZ2gtMjM0MykKLSAgICAgICAgaWYgKCBkZWxlZ2F0ZUNvdW50ICYmIGN1ci5u
b2RlVHlwZSAmJgotICAgICAgICAgICAgKCBldmVudC50eXBlICE9PSAiY2xpY2siIHx8IGlzTmFO
KCBldmVudC5idXR0b24gKSB8fCBldmVudC5idXR0b24gPCAxICkgKSB7Ci0KLSAgICAgICAgICAg
IGZvciAoIDsgY3VyICE9PSB0aGlzOyBjdXIgPSBjdXIucGFyZW50Tm9kZSB8fCB0aGlzICkgewot
Ci0gICAgICAgICAgICAgICAgLy8gRG9uJ3QgY2hlY2sgbm9uLWVsZW1lbnRzICgjMTMyMDgpCi0g
ICAgICAgICAgICAgICAgLy8gRG9uJ3QgcHJvY2VzcyBjbGlja3Mgb24gZGlzYWJsZWQgZWxlbWVu
dHMgKCM2OTExLCAjODE2NSwgIzExMzgyLCAjMTE3NjQpCi0gICAgICAgICAgICAgICAgaWYgKCBj
dXIubm9kZVR5cGUgPT09IDEgJiYgKCBjdXIuZGlzYWJsZWQgIT09IHRydWUgfHwgZXZlbnQudHlw
ZSAhPT0gImNsaWNrIiApICkgewotICAgICAgICAgICAgICAgICAgICBtYXRjaGVzID0gW107Ci0g
ICAgICAgICAgICAgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgZGVsZWdhdGVDb3VudDsgaSsrICkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlT2JqID0gaGFuZGxlcnNbIGkgXTsKLQot
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3QgY29uZmxpY3Qgd2l0aCBPYmplY3QucHJv
dG90eXBlIHByb3BlcnRpZXMgKCMxMzIwMykKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbCA9
IGhhbmRsZU9iai5zZWxlY3RvciArICIgIjsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCBtYXRjaGVzWyBzZWwgXSA9PT0gdW5kZWZpbmVkICkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1hdGNoZXNbIHNlbCBdID0gaGFuZGxlT2JqLm5lZWRzQ29udGV4dCA/Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSggc2VsLCB0aGlzICkuaW5kZXgoIGN1ciAp
ID4gLTEgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZmluZCggc2Vs
LCB0aGlzLCBudWxsLCBbIGN1ciBdICkubGVuZ3RoOwotICAgICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBtYXRjaGVzWyBzZWwgXSApIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVzLnB1c2goIGhhbmRsZU9iaiApOwotICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgIGlmICggbWF0Y2hlcy5sZW5ndGggKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBo
YW5kbGVyUXVldWUucHVzaCggeyBlbGVtOiBjdXIsIGhhbmRsZXJzOiBtYXRjaGVzIH0gKTsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotCi0gICAgICAgIC8vIEFkZCB0aGUgcmVtYWluaW5nIChkaXJlY3RseS1ib3VuZCkg
aGFuZGxlcnMKLSAgICAgICAgaWYgKCBkZWxlZ2F0ZUNvdW50IDwgaGFuZGxlcnMubGVuZ3RoICkg
ewotICAgICAgICAgICAgaGFuZGxlclF1ZXVlLnB1c2goIHsgZWxlbTogdGhpcywgaGFuZGxlcnM6
IGhhbmRsZXJzLnNsaWNlKCBkZWxlZ2F0ZUNvdW50ICkgfSApOwotICAgICAgICB9Ci0KLSAgICAg
ICAgcmV0dXJuIGhhbmRsZXJRdWV1ZTsKLSAgICB9LAotCi0gICAgLy8gSW5jbHVkZXMgc29tZSBl
dmVudCBwcm9wcyBzaGFyZWQgYnkgS2V5RXZlbnQgYW5kIE1vdXNlRXZlbnQKLSAgICBwcm9wczog
KCAiYWx0S2V5IGJ1YmJsZXMgY2FuY2VsYWJsZSBjdHJsS2V5IGN1cnJlbnRUYXJnZXQgZGV0YWls
IGV2ZW50UGhhc2UgIiArCi0gICAgICAgICJtZXRhS2V5IHJlbGF0ZWRUYXJnZXQgc2hpZnRLZXkg
dGFyZ2V0IHRpbWVTdGFtcCB2aWV3IHdoaWNoIiApLnNwbGl0KCAiICIgKSwKLQotICAgIGZpeEhv
b2tzOiB7fSwKLQotICAgIGtleUhvb2tzOiB7Ci0gICAgICAgIHByb3BzOiAiY2hhciBjaGFyQ29k
ZSBrZXkga2V5Q29kZSIuc3BsaXQoICIgIiApLAotICAgICAgICBmaWx0ZXI6IGZ1bmN0aW9uKCBl
dmVudCwgb3JpZ2luYWwgKSB7Ci0KLSAgICAgICAgICAgIC8vIEFkZCB3aGljaCBmb3Iga2V5IGV2
ZW50cwotICAgICAgICAgICAgaWYgKCBldmVudC53aGljaCA9PSBudWxsICkgewotICAgICAgICAg
ICAgICAgIGV2ZW50LndoaWNoID0gb3JpZ2luYWwuY2hhckNvZGUgIT0gbnVsbCA/IG9yaWdpbmFs
LmNoYXJDb2RlIDogb3JpZ2luYWwua2V5Q29kZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgcmV0dXJuIGV2ZW50OwotICAgICAgICB9Ci0gICAgfSwKLQotICAgIG1vdXNlSG9va3M6IHsK
LSAgICAgICAgcHJvcHM6ICggImJ1dHRvbiBidXR0b25zIGNsaWVudFggY2xpZW50WSBvZmZzZXRY
IG9mZnNldFkgcGFnZVggcGFnZVkgIiArCi0gICAgICAgICAgICAic2NyZWVuWCBzY3JlZW5ZIHRv
RWxlbWVudCIgKS5zcGxpdCggIiAiICksCi0gICAgICAgIGZpbHRlcjogZnVuY3Rpb24oIGV2ZW50
LCBvcmlnaW5hbCApIHsKLSAgICAgICAgICAgIHZhciBldmVudERvYywgZG9jLCBib2R5LAotICAg
ICAgICAgICAgICAgIGJ1dHRvbiA9IG9yaWdpbmFsLmJ1dHRvbjsKLQotICAgICAgICAgICAgLy8g
Q2FsY3VsYXRlIHBhZ2VYL1kgaWYgbWlzc2luZyBhbmQgY2xpZW50WC9ZIGF2YWlsYWJsZQotICAg
ICAgICAgICAgaWYgKCBldmVudC5wYWdlWCA9PSBudWxsICYmIG9yaWdpbmFsLmNsaWVudFggIT0g
bnVsbCApIHsKLSAgICAgICAgICAgICAgICBldmVudERvYyA9IGV2ZW50LnRhcmdldC5vd25lckRv
Y3VtZW50IHx8IGRvY3VtZW50OwotICAgICAgICAgICAgICAgIGRvYyA9IGV2ZW50RG9jLmRvY3Vt
ZW50RWxlbWVudDsKLSAgICAgICAgICAgICAgICBib2R5ID0gZXZlbnREb2MuYm9keTsKLQotICAg
ICAgICAgICAgICAgIGV2ZW50LnBhZ2VYID0gb3JpZ2luYWwuY2xpZW50WCArCi0gICAgICAgICAg
ICAgICAgICAgICggZG9jICYmIGRvYy5zY3JvbGxMZWZ0IHx8IGJvZHkgJiYgYm9keS5zY3JvbGxM
ZWZ0IHx8IDAgKSAtCi0gICAgICAgICAgICAgICAgICAgICggZG9jICYmIGRvYy5jbGllbnRMZWZ0
IHx8IGJvZHkgJiYgYm9keS5jbGllbnRMZWZ0IHx8IDAgKTsKLSAgICAgICAgICAgICAgICBldmVu
dC5wYWdlWSA9IG9yaWdpbmFsLmNsaWVudFkgKwotICAgICAgICAgICAgICAgICAgICAoIGRvYyAm
JiBkb2Muc2Nyb2xsVG9wICB8fCBib2R5ICYmIGJvZHkuc2Nyb2xsVG9wICB8fCAwICkgLQotICAg
ICAgICAgICAgICAgICAgICAoIGRvYyAmJiBkb2MuY2xpZW50VG9wICB8fCBib2R5ICYmIGJvZHku
Y2xpZW50VG9wICB8fCAwICk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIEFkZCB3
aGljaCBmb3IgY2xpY2s6IDEgPT09IGxlZnQ7IDIgPT09IG1pZGRsZTsgMyA9PT0gcmlnaHQKLSAg
ICAgICAgICAgIC8vIE5vdGU6IGJ1dHRvbiBpcyBub3Qgbm9ybWFsaXplZCwgc28gZG9uJ3QgdXNl
IGl0Ci0gICAgICAgICAgICBpZiAoICFldmVudC53aGljaCAmJiBidXR0b24gIT09IHVuZGVmaW5l
ZCApIHsKLSAgICAgICAgICAgICAgICBldmVudC53aGljaCA9ICggYnV0dG9uICYgMSA/IDEgOiAo
IGJ1dHRvbiAmIDIgPyAzIDogKCBidXR0b24gJiA0ID8gMiA6IDAgKSApICk7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBldmVudDsKLSAgICAgICAgfQotICAgIH0sCi0KLSAg
ICBmaXg6IGZ1bmN0aW9uKCBldmVudCApIHsKLSAgICAgICAgaWYgKCBldmVudFsgalF1ZXJ5LmV4
cGFuZG8gXSApIHsKLSAgICAgICAgICAgIHJldHVybiBldmVudDsKLSAgICAgICAgfQotCi0gICAg
ICAgIC8vIENyZWF0ZSBhIHdyaXRhYmxlIGNvcHkgb2YgdGhlIGV2ZW50IG9iamVjdCBhbmQgbm9y
bWFsaXplIHNvbWUgcHJvcGVydGllcwotICAgICAgICB2YXIgaSwgcHJvcCwgY29weSwKLSAgICAg
ICAgICAgIHR5cGUgPSBldmVudC50eXBlLAotICAgICAgICAgICAgb3JpZ2luYWxFdmVudCA9IGV2
ZW50LAotICAgICAgICAgICAgZml4SG9vayA9IHRoaXMuZml4SG9va3NbIHR5cGUgXTsKLQotICAg
ICAgICBpZiAoICFmaXhIb29rICkgewotICAgICAgICAgICAgdGhpcy5maXhIb29rc1sgdHlwZSBd
ID0gZml4SG9vayA9Ci0gICAgICAgICAgICAgICAgcm1vdXNlRXZlbnQudGVzdCggdHlwZSApID8g
dGhpcy5tb3VzZUhvb2tzIDoKLSAgICAgICAgICAgICAgICBya2V5RXZlbnQudGVzdCggdHlwZSAp
ID8gdGhpcy5rZXlIb29rcyA6Ci0gICAgICAgICAgICAgICAge307Ci0gICAgICAgIH0KLSAgICAg
ICAgY29weSA9IGZpeEhvb2sucHJvcHMgPyB0aGlzLnByb3BzLmNvbmNhdCggZml4SG9vay5wcm9w
cyApIDogdGhpcy5wcm9wczsKLQotICAgICAgICBldmVudCA9IG5ldyBqUXVlcnkuRXZlbnQoIG9y
aWdpbmFsRXZlbnQgKTsKLQotICAgICAgICBpID0gY29weS5sZW5ndGg7Ci0gICAgICAgIHdoaWxl
ICggaS0tICkgewotICAgICAgICAgICAgcHJvcCA9IGNvcHlbIGkgXTsKLSAgICAgICAgICAgIGV2
ZW50WyBwcm9wIF0gPSBvcmlnaW5hbEV2ZW50WyBwcm9wIF07Ci0gICAgICAgIH0KLQotICAgICAg
ICAvLyBTdXBwb3J0OiBDb3Jkb3ZhIDIuNSAoV2ViS2l0KSAoIzEzMjU1KQotICAgICAgICAvLyBB
bGwgZXZlbnRzIHNob3VsZCBoYXZlIGEgdGFyZ2V0OyBDb3Jkb3ZhIGRldmljZXJlYWR5IGRvZXNu
J3QKLSAgICAgICAgaWYgKCAhZXZlbnQudGFyZ2V0ICkgewotICAgICAgICAgICAgZXZlbnQudGFy
Z2V0ID0gZG9jdW1lbnQ7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBTdXBwb3J0OiBTYWZhcmkg
Ni4wKywgQ2hyb21lPDI4Ci0gICAgICAgIC8vIFRhcmdldCBzaG91bGQgbm90IGJlIGEgdGV4dCBu
b2RlICgjNTA0LCAjMTMxNDMpCi0gICAgICAgIGlmICggZXZlbnQudGFyZ2V0Lm5vZGVUeXBlID09
PSAzICkgewotICAgICAgICAgICAgZXZlbnQudGFyZ2V0ID0gZXZlbnQudGFyZ2V0LnBhcmVudE5v
ZGU7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZml4SG9vay5maWx0ZXIgPyBmaXhIb29r
LmZpbHRlciggZXZlbnQsIG9yaWdpbmFsRXZlbnQgKSA6IGV2ZW50OwotICAgIH0sCi0KLSAgICBz
cGVjaWFsOiB7Ci0gICAgICAgIGxvYWQ6IHsKLQotICAgICAgICAgICAgLy8gUHJldmVudCB0cmln
Z2VyZWQgaW1hZ2UubG9hZCBldmVudHMgZnJvbSBidWJibGluZyB0byB3aW5kb3cubG9hZAotICAg
ICAgICAgICAgbm9CdWJibGU6IHRydWUKLSAgICAgICAgfSwKLSAgICAgICAgZm9jdXM6IHsKLQot
ICAgICAgICAgICAgLy8gRmlyZSBuYXRpdmUgZXZlbnQgaWYgcG9zc2libGUgc28gYmx1ci9mb2N1
cyBzZXF1ZW5jZSBpcyBjb3JyZWN0Ci0gICAgICAgICAgICB0cmlnZ2VyOiBmdW5jdGlvbigpIHsK
LSAgICAgICAgICAgICAgICBpZiAoIHRoaXMgIT09IHNhZmVBY3RpdmVFbGVtZW50KCkgJiYgdGhp
cy5mb2N1cyApIHsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5mb2N1cygpOwotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fSwKLSAgICAgICAgICAgIGRlbGVnYXRlVHlwZTogImZvY3VzaW4iCi0gICAgICAgIH0sCi0gICAg
ICAgIGJsdXI6IHsKLSAgICAgICAgICAgIHRyaWdnZXI6IGZ1bmN0aW9uKCkgewotICAgICAgICAg
ICAgICAgIGlmICggdGhpcyA9PT0gc2FmZUFjdGl2ZUVsZW1lbnQoKSAmJiB0aGlzLmJsdXIgKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuYmx1cigpOwotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSwKLSAgICAgICAg
ICAgIGRlbGVnYXRlVHlwZTogImZvY3Vzb3V0IgotICAgICAgICB9LAotICAgICAgICBjbGljazog
ewotCi0gICAgICAgICAgICAvLyBGb3IgY2hlY2tib3gsIGZpcmUgbmF0aXZlIGV2ZW50IHNvIGNo
ZWNrZWQgc3RhdGUgd2lsbCBiZSByaWdodAotICAgICAgICAgICAgdHJpZ2dlcjogZnVuY3Rpb24o
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCB0aGlzLnR5cGUgPT09ICJjaGVja2JveCIgJiYgdGhp
cy5jbGljayAmJiBqUXVlcnkubm9kZU5hbWUoIHRoaXMsICJpbnB1dCIgKSApIHsKLSAgICAgICAg
ICAgICAgICAgICAgdGhpcy5jbGljaygpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgLy8g
Rm9yIGNyb3NzLWJyb3dzZXIgY29uc2lzdGVuY3ksIGRvbid0IGZpcmUgbmF0aXZlIC5jbGljaygp
IG9uIGxpbmtzCi0gICAgICAgICAgICBfZGVmYXVsdDogZnVuY3Rpb24oIGV2ZW50ICkgewotICAg
ICAgICAgICAgICAgIHJldHVybiBqUXVlcnkubm9kZU5hbWUoIGV2ZW50LnRhcmdldCwgImEiICk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0sCi0KLSAgICAgICAgYmVmb3JldW5sb2FkOiB7Ci0g
ICAgICAgICAgICBwb3N0RGlzcGF0Y2g6IGZ1bmN0aW9uKCBldmVudCApIHsKLQotICAgICAgICAg
ICAgICAgIC8vIFN1cHBvcnQ6IEZpcmVmb3ggMjArCi0gICAgICAgICAgICAgICAgLy8gRmlyZWZv
eCBkb2Vzbid0IGFsZXJ0IGlmIHRoZSByZXR1cm5WYWx1ZSBmaWVsZCBpcyBub3Qgc2V0LgotICAg
ICAgICAgICAgICAgIGlmICggZXZlbnQucmVzdWx0ICE9PSB1bmRlZmluZWQgJiYgZXZlbnQub3Jp
Z2luYWxFdmVudCApIHsKLSAgICAgICAgICAgICAgICAgICAgZXZlbnQub3JpZ2luYWxFdmVudC5y
ZXR1cm5WYWx1ZSA9IGV2ZW50LnJlc3VsdDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICB9Ci19OwotCi1qUXVlcnkucmVtb3ZlRXZlbnQgPSBmdW5jdGlv
biggZWxlbSwgdHlwZSwgaGFuZGxlICkgewotCi0gICAgLy8gVGhpcyAiaWYiIGlzIG5lZWRlZCBm
b3IgcGxhaW4gb2JqZWN0cwotICAgIGlmICggZWxlbS5yZW1vdmVFdmVudExpc3RlbmVyICkgewot
ICAgICAgICBlbGVtLnJlbW92ZUV2ZW50TGlzdGVuZXIoIHR5cGUsIGhhbmRsZSApOwotICAgIH0K
LX07Ci0KLWpRdWVyeS5FdmVudCA9IGZ1bmN0aW9uKCBzcmMsIHByb3BzICkgewotCi0gICAgLy8g
QWxsb3cgaW5zdGFudGlhdGlvbiB3aXRob3V0IHRoZSAnbmV3JyBrZXl3b3JkCi0gICAgaWYgKCAh
KCB0aGlzIGluc3RhbmNlb2YgalF1ZXJ5LkV2ZW50ICkgKSB7Ci0gICAgICAgIHJldHVybiBuZXcg
alF1ZXJ5LkV2ZW50KCBzcmMsIHByb3BzICk7Ci0gICAgfQotCi0gICAgLy8gRXZlbnQgb2JqZWN0
Ci0gICAgaWYgKCBzcmMgJiYgc3JjLnR5cGUgKSB7Ci0gICAgICAgIHRoaXMub3JpZ2luYWxFdmVu
dCA9IHNyYzsKLSAgICAgICAgdGhpcy50eXBlID0gc3JjLnR5cGU7Ci0KLSAgICAgICAgLy8gRXZl
bnRzIGJ1YmJsaW5nIHVwIHRoZSBkb2N1bWVudCBtYXkgaGF2ZSBiZWVuIG1hcmtlZCBhcyBwcmV2
ZW50ZWQKLSAgICAgICAgLy8gYnkgYSBoYW5kbGVyIGxvd2VyIGRvd24gdGhlIHRyZWU7IHJlZmxl
Y3QgdGhlIGNvcnJlY3QgdmFsdWUuCi0gICAgICAgIHRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0g
c3JjLmRlZmF1bHRQcmV2ZW50ZWQgfHwKLSAgICAgICAgICAgICAgICBzcmMuZGVmYXVsdFByZXZl
bnRlZCA9PT0gdW5kZWZpbmVkICYmCi0KLSAgICAgICAgICAgICAgICAvLyBTdXBwb3J0OiBBbmRy
b2lkPDQuMAotICAgICAgICAgICAgICAgIHNyYy5yZXR1cm5WYWx1ZSA9PT0gZmFsc2UgPwotICAg
ICAgICAgICAgcmV0dXJuVHJ1ZSA6Ci0gICAgICAgICAgICByZXR1cm5GYWxzZTsKLQotICAgIC8v
IEV2ZW50IHR5cGUKLSAgICB9IGVsc2UgewotICAgICAgICB0aGlzLnR5cGUgPSBzcmM7Ci0gICAg
fQotCi0gICAgLy8gUHV0IGV4cGxpY2l0bHkgcHJvdmlkZWQgcHJvcGVydGllcyBvbnRvIHRoZSBl
dmVudCBvYmplY3QKLSAgICBpZiAoIHByb3BzICkgewotICAgICAgICBqUXVlcnkuZXh0ZW5kKCB0
aGlzLCBwcm9wcyApOwotICAgIH0KLQotICAgIC8vIENyZWF0ZSBhIHRpbWVzdGFtcCBpZiBpbmNv
bWluZyBldmVudCBkb2Vzbid0IGhhdmUgb25lCi0gICAgdGhpcy50aW1lU3RhbXAgPSBzcmMgJiYg
c3JjLnRpbWVTdGFtcCB8fCBqUXVlcnkubm93KCk7Ci0KLSAgICAvLyBNYXJrIGl0IGFzIGZpeGVk
Ci0gICAgdGhpc1sgalF1ZXJ5LmV4cGFuZG8gXSA9IHRydWU7Ci19OwotCi0vLyBqUXVlcnkuRXZl
bnQgaXMgYmFzZWQgb24gRE9NMyBFdmVudHMgYXMgc3BlY2lmaWVkIGJ5IHRoZSBFQ01BU2NyaXB0
IExhbmd1YWdlIEJpbmRpbmcKLS8vIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvV0QtRE9NLUxl
dmVsLTMtRXZlbnRzLTIwMDMwMzMxL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbAotalF1ZXJ5LkV2
ZW50LnByb3RvdHlwZSA9IHsKLSAgICBjb25zdHJ1Y3RvcjogalF1ZXJ5LkV2ZW50LAotICAgIGlz
RGVmYXVsdFByZXZlbnRlZDogcmV0dXJuRmFsc2UsCi0gICAgaXNQcm9wYWdhdGlvblN0b3BwZWQ6
IHJldHVybkZhbHNlLAotICAgIGlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOiByZXR1cm5G
YWxzZSwKLSAgICBpc1NpbXVsYXRlZDogZmFsc2UsCi0KLSAgICBwcmV2ZW50RGVmYXVsdDogZnVu
Y3Rpb24oKSB7Ci0gICAgICAgIHZhciBlID0gdGhpcy5vcmlnaW5hbEV2ZW50OwotCi0gICAgICAg
IHRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gcmV0dXJuVHJ1ZTsKLQotICAgICAgICBpZiAoIGUg
JiYgIXRoaXMuaXNTaW11bGF0ZWQgKSB7Ci0gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7
Ci0gICAgICAgIH0KLSAgICB9LAotICAgIHN0b3BQcm9wYWdhdGlvbjogZnVuY3Rpb24oKSB7Ci0g
ICAgICAgIHZhciBlID0gdGhpcy5vcmlnaW5hbEV2ZW50OwotCi0gICAgICAgIHRoaXMuaXNQcm9w
YWdhdGlvblN0b3BwZWQgPSByZXR1cm5UcnVlOwotCi0gICAgICAgIGlmICggZSAmJiAhdGhpcy5p
c1NpbXVsYXRlZCApIHsKLSAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7Ci0gICAgICAg
IH0KLSAgICB9LAotICAgIHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjogZnVuY3Rpb24oKSB7Ci0g
ICAgICAgIHZhciBlID0gdGhpcy5vcmlnaW5hbEV2ZW50OwotCi0gICAgICAgIHRoaXMuaXNJbW1l
ZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQgPSByZXR1cm5UcnVlOwotCi0gICAgICAgIGlmICggZSAm
JiAhdGhpcy5pc1NpbXVsYXRlZCApIHsKLSAgICAgICAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3Bh
Z2F0aW9uKCk7Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlzLnN0b3BQcm9wYWdhdGlvbigpOwot
ICAgIH0KLX07Ci0KLS8vIENyZWF0ZSBtb3VzZWVudGVyL2xlYXZlIGV2ZW50cyB1c2luZyBtb3Vz
ZW92ZXIvb3V0IGFuZCBldmVudC10aW1lIGNoZWNrcwotLy8gc28gdGhhdCBldmVudCBkZWxlZ2F0
aW9uIHdvcmtzIGluIGpRdWVyeS4KLS8vIERvIHRoZSBzYW1lIGZvciBwb2ludGVyZW50ZXIvcG9p
bnRlcmxlYXZlIGFuZCBwb2ludGVyb3Zlci9wb2ludGVyb3V0Ci0vLwotLy8gU3VwcG9ydDogU2Fm
YXJpIDcgb25seQotLy8gU2FmYXJpIHNlbmRzIG1vdXNlZW50ZXIgdG9vIG9mdGVuOyBzZWU6Ci0v
LyBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NDcw
MjU4Ci0vLyBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBidWcgKGl0IGV4aXN0ZWQgaW4gb2xk
ZXIgQ2hyb21lIHZlcnNpb25zIGFzIHdlbGwpLgotalF1ZXJ5LmVhY2goIHsKLSAgICBtb3VzZWVu
dGVyOiAibW91c2VvdmVyIiwKLSAgICBtb3VzZWxlYXZlOiAibW91c2VvdXQiLAotICAgIHBvaW50
ZXJlbnRlcjogInBvaW50ZXJvdmVyIiwKLSAgICBwb2ludGVybGVhdmU6ICJwb2ludGVyb3V0Igot
fSwgZnVuY3Rpb24oIG9yaWcsIGZpeCApIHsKLSAgICBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgb3Jp
ZyBdID0gewotICAgICAgICBkZWxlZ2F0ZVR5cGU6IGZpeCwKLSAgICAgICAgYmluZFR5cGU6IGZp
eCwKLQotICAgICAgICBoYW5kbGU6IGZ1bmN0aW9uKCBldmVudCApIHsKLSAgICAgICAgICAgIHZh
ciByZXQsCi0gICAgICAgICAgICAgICAgdGFyZ2V0ID0gdGhpcywKLSAgICAgICAgICAgICAgICBy
ZWxhdGVkID0gZXZlbnQucmVsYXRlZFRhcmdldCwKLSAgICAgICAgICAgICAgICBoYW5kbGVPYmog
PSBldmVudC5oYW5kbGVPYmo7Ci0KLSAgICAgICAgICAgIC8vIEZvciBtb3VzZWVudGVyL2xlYXZl
IGNhbGwgdGhlIGhhbmRsZXIgaWYgcmVsYXRlZCBpcyBvdXRzaWRlIHRoZSB0YXJnZXQuCi0gICAg
ICAgICAgICAvLyBOQjogTm8gcmVsYXRlZFRhcmdldCBpZiB0aGUgbW91c2UgbGVmdC9lbnRlcmVk
IHRoZSBicm93c2VyIHdpbmRvdwotICAgICAgICAgICAgaWYgKCAhcmVsYXRlZCB8fCAoIHJlbGF0
ZWQgIT09IHRhcmdldCAmJiAhalF1ZXJ5LmNvbnRhaW5zKCB0YXJnZXQsIHJlbGF0ZWQgKSApICkg
ewotICAgICAgICAgICAgICAgIGV2ZW50LnR5cGUgPSBoYW5kbGVPYmoub3JpZ1R5cGU7Ci0gICAg
ICAgICAgICAgICAgcmV0ID0gaGFuZGxlT2JqLmhhbmRsZXIuYXBwbHkoIHRoaXMsIGFyZ3VtZW50
cyApOwotICAgICAgICAgICAgICAgIGV2ZW50LnR5cGUgPSBmaXg7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICByZXR1cm4gcmV0OwotICAgICAgICB9Ci0gICAgfTsKLX0gKTsKLQotalF1ZXJ5
LmZuLmV4dGVuZCggewotICAgIG9uOiBmdW5jdGlvbiggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBm
biApIHsKLSAgICAgICAgcmV0dXJuIG9uKCB0aGlzLCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZu
ICk7Ci0gICAgfSwKLSAgICBvbmU6IGZ1bmN0aW9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZu
ICkgewotICAgICAgICByZXR1cm4gb24oIHRoaXMsIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4s
IDEgKTsKLSAgICB9LAotICAgIG9mZjogZnVuY3Rpb24oIHR5cGVzLCBzZWxlY3RvciwgZm4gKSB7
Ci0gICAgICAgIHZhciBoYW5kbGVPYmosIHR5cGU7Ci0gICAgICAgIGlmICggdHlwZXMgJiYgdHlw
ZXMucHJldmVudERlZmF1bHQgJiYgdHlwZXMuaGFuZGxlT2JqICkgewotCi0gICAgICAgICAgICAv
LyAoIGV2ZW50ICkgIGRpc3BhdGNoZWQgalF1ZXJ5LkV2ZW50Ci0gICAgICAgICAgICBoYW5kbGVP
YmogPSB0eXBlcy5oYW5kbGVPYmo7Ci0gICAgICAgICAgICBqUXVlcnkoIHR5cGVzLmRlbGVnYXRl
VGFyZ2V0ICkub2ZmKAotICAgICAgICAgICAgICAgIGhhbmRsZU9iai5uYW1lc3BhY2UgPwotICAg
ICAgICAgICAgICAgICAgICBoYW5kbGVPYmoub3JpZ1R5cGUgKyAiLiIgKyBoYW5kbGVPYmoubmFt
ZXNwYWNlIDoKLSAgICAgICAgICAgICAgICAgICAgaGFuZGxlT2JqLm9yaWdUeXBlLAotICAgICAg
ICAgICAgICAgIGhhbmRsZU9iai5zZWxlY3RvciwKLSAgICAgICAgICAgICAgICBoYW5kbGVPYmou
aGFuZGxlcgotICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAg
ICB9Ci0gICAgICAgIGlmICggdHlwZW9mIHR5cGVzID09PSAib2JqZWN0IiApIHsKLQotICAgICAg
ICAgICAgLy8gKCB0eXBlcy1vYmplY3QgWywgc2VsZWN0b3JdICkKLSAgICAgICAgICAgIGZvciAo
IHR5cGUgaW4gdHlwZXMgKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5vZmYoIHR5cGUsIHNlbGVj
dG9yLCB0eXBlc1sgdHlwZSBdICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4g
dGhpczsKLSAgICAgICAgfQotICAgICAgICBpZiAoIHNlbGVjdG9yID09PSBmYWxzZSB8fCB0eXBl
b2Ygc2VsZWN0b3IgPT09ICJmdW5jdGlvbiIgKSB7Ci0KLSAgICAgICAgICAgIC8vICggdHlwZXMg
WywgZm5dICkKLSAgICAgICAgICAgIGZuID0gc2VsZWN0b3I7Ci0gICAgICAgICAgICBzZWxlY3Rv
ciA9IHVuZGVmaW5lZDsKLSAgICAgICAgfQotICAgICAgICBpZiAoIGZuID09PSBmYWxzZSApIHsK
LSAgICAgICAgICAgIGZuID0gcmV0dXJuRmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJu
IHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICBqUXVlcnkuZXZlbnQucmVtb3Zl
KCB0aGlzLCB0eXBlcywgZm4sIHNlbGVjdG9yICk7Ci0gICAgICAgIH0gKTsKLSAgICB9Ci19ICk7
Ci0KLQotdmFyCi0gICAgcnhodG1sVGFnID0gLzwoPyFhcmVhfGJyfGNvbHxlbWJlZHxocnxpbWd8
aW5wdXR8bGlua3xtZXRhfHBhcmFtKSgoW1x3Oi1dKylbXj5dKilcLz4vZ2ksCi0KLSAgICAvLyBT
dXBwb3J0OiBJRSAxMC0xMSwgRWRnZSAxMDI0MCsKLSAgICAvLyBJbiBJRS9FZGdlIHVzaW5nIHJl
Z2V4IGdyb3VwcyBoZXJlIGNhdXNlcyBzZXZlcmUgc2xvd2Rvd25zLgotICAgIC8vIFNlZSBodHRw
czovL2Nvbm5lY3QubWljcm9zb2Z0LmNvbS9JRS9mZWVkYmFjay9kZXRhaWxzLzE3MzY1MTIvCi0g
ICAgcm5vSW5uZXJodG1sID0gLzxzY3JpcHR8PHN0eWxlfDxsaW5rL2ksCi0KLSAgICAvLyBjaGVj
a2VkPSJjaGVja2VkIiBvciBjaGVja2VkCi0gICAgcmNoZWNrZWQgPSAvY2hlY2tlZFxzKig/Olte
PV18PVxzKi5jaGVja2VkLikvaSwKLSAgICByc2NyaXB0VHlwZU1hc2tlZCA9IC9edHJ1ZVwvKC4q
KS8sCi0gICAgcmNsZWFuU2NyaXB0ID0gL15ccyo8ISg/OlxbQ0RBVEFcW3wtLSl8KD86XF1cXXwt
LSk+XHMqJC9nOwotCi0vLyBNYW5pcHVsYXRpbmcgdGFibGVzIHJlcXVpcmVzIGEgdGJvZHkKLWZ1
bmN0aW9uIG1hbmlwdWxhdGlvblRhcmdldCggZWxlbSwgY29udGVudCApIHsKLSAgICByZXR1cm4g
alF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCAidGFibGUiICkgJiYKLSAgICAgICAgalF1ZXJ5Lm5vZGVO
YW1lKCBjb250ZW50Lm5vZGVUeXBlICE9PSAxMSA/IGNvbnRlbnQgOiBjb250ZW50LmZpcnN0Q2hp
bGQsICJ0ciIgKSA/Ci0KLSAgICAgICAgZWxlbS5nZXRFbGVtZW50c0J5VGFnTmFtZSggInRib2R5
IiApWyAwIF0gfHwKLSAgICAgICAgICAgIGVsZW0uYXBwZW5kQ2hpbGQoIGVsZW0ub3duZXJEb2N1
bWVudC5jcmVhdGVFbGVtZW50KCAidGJvZHkiICkgKSA6Ci0gICAgICAgIGVsZW07Ci19Ci0KLS8v
IFJlcGxhY2UvcmVzdG9yZSB0aGUgdHlwZSBhdHRyaWJ1dGUgb2Ygc2NyaXB0IGVsZW1lbnRzIGZv
ciBzYWZlIERPTSBtYW5pcHVsYXRpb24KLWZ1bmN0aW9uIGRpc2FibGVTY3JpcHQoIGVsZW0gKSB7
Ci0gICAgZWxlbS50eXBlID0gKCBlbGVtLmdldEF0dHJpYnV0ZSggInR5cGUiICkgIT09IG51bGwg
KSArICIvIiArIGVsZW0udHlwZTsKLSAgICByZXR1cm4gZWxlbTsKLX0KLWZ1bmN0aW9uIHJlc3Rv
cmVTY3JpcHQoIGVsZW0gKSB7Ci0gICAgdmFyIG1hdGNoID0gcnNjcmlwdFR5cGVNYXNrZWQuZXhl
YyggZWxlbS50eXBlICk7Ci0KLSAgICBpZiAoIG1hdGNoICkgewotICAgICAgICBlbGVtLnR5cGUg
PSBtYXRjaFsgMSBdOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGVsZW0ucmVtb3ZlQXR0cmlidXRl
KCAidHlwZSIgKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZWxlbTsKLX0KLQotZnVuY3Rpb24gY2xv
bmVDb3B5RXZlbnQoIHNyYywgZGVzdCApIHsKLSAgICB2YXIgaSwgbCwgdHlwZSwgcGRhdGFPbGQs
IHBkYXRhQ3VyLCB1ZGF0YU9sZCwgdWRhdGFDdXIsIGV2ZW50czsKLQotICAgIGlmICggZGVzdC5u
b2RlVHlwZSAhPT0gMSApIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIDEuIENv
cHkgcHJpdmF0ZSBkYXRhOiBldmVudHMsIGhhbmRsZXJzLCBldGMuCi0gICAgaWYgKCBkYXRhUHJp
di5oYXNEYXRhKCBzcmMgKSApIHsKLSAgICAgICAgcGRhdGFPbGQgPSBkYXRhUHJpdi5hY2Nlc3Mo
IHNyYyApOwotICAgICAgICBwZGF0YUN1ciA9IGRhdGFQcml2LnNldCggZGVzdCwgcGRhdGFPbGQg
KTsKLSAgICAgICAgZXZlbnRzID0gcGRhdGFPbGQuZXZlbnRzOwotCi0gICAgICAgIGlmICggZXZl
bnRzICkgewotICAgICAgICAgICAgZGVsZXRlIHBkYXRhQ3VyLmhhbmRsZTsKLSAgICAgICAgICAg
IHBkYXRhQ3VyLmV2ZW50cyA9IHt9OwotCi0gICAgICAgICAgICBmb3IgKCB0eXBlIGluIGV2ZW50
cyApIHsKLSAgICAgICAgICAgICAgICBmb3IgKCBpID0gMCwgbCA9IGV2ZW50c1sgdHlwZSBdLmxl
bmd0aDsgaSA8IGw7IGkrKyApIHsKLSAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LmFk
ZCggZGVzdCwgdHlwZSwgZXZlbnRzWyB0eXBlIF1bIGkgXSApOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIDIuIENvcHkgdXNlciBk
YXRhCi0gICAgaWYgKCBkYXRhVXNlci5oYXNEYXRhKCBzcmMgKSApIHsKLSAgICAgICAgdWRhdGFP
bGQgPSBkYXRhVXNlci5hY2Nlc3MoIHNyYyApOwotICAgICAgICB1ZGF0YUN1ciA9IGpRdWVyeS5l
eHRlbmQoIHt9LCB1ZGF0YU9sZCApOwotCi0gICAgICAgIGRhdGFVc2VyLnNldCggZGVzdCwgdWRh
dGFDdXIgKTsKLSAgICB9Ci19Ci0KLS8vIEZpeCBJRSBidWdzLCBzZWUgc3VwcG9ydCB0ZXN0cwot
ZnVuY3Rpb24gZml4SW5wdXQoIHNyYywgZGVzdCApIHsKLSAgICB2YXIgbm9kZU5hbWUgPSBkZXN0
Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7Ci0KLSAgICAvLyBGYWlscyB0byBwZXJzaXN0IHRoZSBj
aGVja2VkIHN0YXRlIG9mIGEgY2xvbmVkIGNoZWNrYm94IG9yIHJhZGlvIGJ1dHRvbi4KLSAgICBp
ZiAoIG5vZGVOYW1lID09PSAiaW5wdXQiICYmIHJjaGVja2FibGVUeXBlLnRlc3QoIHNyYy50eXBl
ICkgKSB7Ci0gICAgICAgIGRlc3QuY2hlY2tlZCA9IHNyYy5jaGVja2VkOwotCi0gICAgLy8gRmFp
bHMgdG8gcmV0dXJuIHRoZSBzZWxlY3RlZCBvcHRpb24gdG8gdGhlIGRlZmF1bHQgc2VsZWN0ZWQg
c3RhdGUgd2hlbiBjbG9uaW5nIG9wdGlvbnMKLSAgICB9IGVsc2UgaWYgKCBub2RlTmFtZSA9PT0g
ImlucHV0IiB8fCBub2RlTmFtZSA9PT0gInRleHRhcmVhIiApIHsKLSAgICAgICAgZGVzdC5kZWZh
dWx0VmFsdWUgPSBzcmMuZGVmYXVsdFZhbHVlOwotICAgIH0KLX0KLQotZnVuY3Rpb24gZG9tTWFu
aXAoIGNvbGxlY3Rpb24sIGFyZ3MsIGNhbGxiYWNrLCBpZ25vcmVkICkgewotCi0gICAgLy8gRmxh
dHRlbiBhbnkgbmVzdGVkIGFycmF5cwotICAgIGFyZ3MgPSBjb25jYXQuYXBwbHkoIFtdLCBhcmdz
ICk7Ci0KLSAgICB2YXIgZnJhZ21lbnQsIGZpcnN0LCBzY3JpcHRzLCBoYXNTY3JpcHRzLCBub2Rl
LCBkb2MsCi0gICAgICAgIGkgPSAwLAotICAgICAgICBsID0gY29sbGVjdGlvbi5sZW5ndGgsCi0g
ICAgICAgIGlOb0Nsb25lID0gbCAtIDEsCi0gICAgICAgIHZhbHVlID0gYXJnc1sgMCBdLAotICAg
ICAgICBpc0Z1bmN0aW9uID0galF1ZXJ5LmlzRnVuY3Rpb24oIHZhbHVlICk7Ci0KLSAgICAvLyBX
ZSBjYW4ndCBjbG9uZU5vZGUgZnJhZ21lbnRzIHRoYXQgY29udGFpbiBjaGVja2VkLCBpbiBXZWJL
aXQKLSAgICBpZiAoIGlzRnVuY3Rpb24gfHwKLSAgICAgICAgICAgICggbCA+IDEgJiYgdHlwZW9m
IHZhbHVlID09PSAic3RyaW5nIiAmJgotICAgICAgICAgICAgICAgICFzdXBwb3J0LmNoZWNrQ2xv
bmUgJiYgcmNoZWNrZWQudGVzdCggdmFsdWUgKSApICkgewotICAgICAgICByZXR1cm4gY29sbGVj
dGlvbi5lYWNoKCBmdW5jdGlvbiggaW5kZXggKSB7Ci0gICAgICAgICAgICB2YXIgc2VsZiA9IGNv
bGxlY3Rpb24uZXEoIGluZGV4ICk7Ci0gICAgICAgICAgICBpZiAoIGlzRnVuY3Rpb24gKSB7Ci0g
ICAgICAgICAgICAgICAgYXJnc1sgMCBdID0gdmFsdWUuY2FsbCggdGhpcywgaW5kZXgsIHNlbGYu
aHRtbCgpICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkb21NYW5pcCggc2VsZiwgYXJn
cywgY2FsbGJhY2ssIGlnbm9yZWQgKTsKLSAgICAgICAgfSApOwotICAgIH0KLQotICAgIGlmICgg
bCApIHsKLSAgICAgICAgZnJhZ21lbnQgPSBidWlsZEZyYWdtZW50KCBhcmdzLCBjb2xsZWN0aW9u
WyAwIF0ub3duZXJEb2N1bWVudCwgZmFsc2UsIGNvbGxlY3Rpb24sIGlnbm9yZWQgKTsKLSAgICAg
ICAgZmlyc3QgPSBmcmFnbWVudC5maXJzdENoaWxkOwotCi0gICAgICAgIGlmICggZnJhZ21lbnQu
Y2hpbGROb2Rlcy5sZW5ndGggPT09IDEgKSB7Ci0gICAgICAgICAgICBmcmFnbWVudCA9IGZpcnN0
OwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gUmVxdWlyZSBlaXRoZXIgbmV3IGNvbnRlbnQgb3Ig
YW4gaW50ZXJlc3QgaW4gaWdub3JlZCBlbGVtZW50cyB0byBpbnZva2UgdGhlIGNhbGxiYWNrCi0g
ICAgICAgIGlmICggZmlyc3QgfHwgaWdub3JlZCApIHsKLSAgICAgICAgICAgIHNjcmlwdHMgPSBq
UXVlcnkubWFwKCBnZXRBbGwoIGZyYWdtZW50LCAic2NyaXB0IiApLCBkaXNhYmxlU2NyaXB0ICk7
Ci0gICAgICAgICAgICBoYXNTY3JpcHRzID0gc2NyaXB0cy5sZW5ndGg7Ci0KLSAgICAgICAgICAg
IC8vIFVzZSB0aGUgb3JpZ2luYWwgZnJhZ21lbnQgZm9yIHRoZSBsYXN0IGl0ZW0KLSAgICAgICAg
ICAgIC8vIGluc3RlYWQgb2YgdGhlIGZpcnN0IGJlY2F1c2UgaXQgY2FuIGVuZCB1cAotICAgICAg
ICAgICAgLy8gYmVpbmcgZW1wdGllZCBpbmNvcnJlY3RseSBpbiBjZXJ0YWluIHNpdHVhdGlvbnMg
KCM4MDcwKS4KLSAgICAgICAgICAgIGZvciAoIDsgaSA8IGw7IGkrKyApIHsKLSAgICAgICAgICAg
ICAgICBub2RlID0gZnJhZ21lbnQ7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIGkgIT09IGlOb0Ns
b25lICkgewotICAgICAgICAgICAgICAgICAgICBub2RlID0galF1ZXJ5LmNsb25lKCBub2RlLCB0
cnVlLCB0cnVlICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gS2VlcCByZWZlcmVuY2VzIHRv
IGNsb25lZCBzY3JpcHRzIGZvciBsYXRlciByZXN0b3JhdGlvbgotICAgICAgICAgICAgICAgICAg
ICBpZiAoIGhhc1NjcmlwdHMgKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN1cHBv
cnQ6IEFuZHJvaWQ8NC4xLCBQaGFudG9tSlM8MgotICAgICAgICAgICAgICAgICAgICAgICAgLy8g
cHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdAotICAgICAg
ICAgICAgICAgICAgICAgICAgalF1ZXJ5Lm1lcmdlKCBzY3JpcHRzLCBnZXRBbGwoIG5vZGUsICJz
Y3JpcHQiICkgKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwoIGNvbGxlY3Rpb25bIGkgXSwgbm9kZSwgaSAp
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIGhhc1NjcmlwdHMgKSB7Ci0gICAg
ICAgICAgICAgICAgZG9jID0gc2NyaXB0c1sgc2NyaXB0cy5sZW5ndGggLSAxIF0ub3duZXJEb2N1
bWVudDsKLQotICAgICAgICAgICAgICAgIC8vIFJlZW5hYmxlIHNjcmlwdHMKLSAgICAgICAgICAg
ICAgICBqUXVlcnkubWFwKCBzY3JpcHRzLCByZXN0b3JlU2NyaXB0ICk7Ci0KLSAgICAgICAgICAg
ICAgICAvLyBFdmFsdWF0ZSBleGVjdXRhYmxlIHNjcmlwdHMgb24gZmlyc3QgZG9jdW1lbnQgaW5z
ZXJ0aW9uCi0gICAgICAgICAgICAgICAgZm9yICggaSA9IDA7IGkgPCBoYXNTY3JpcHRzOyBpKysg
KSB7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUgPSBzY3JpcHRzWyBpIF07Ci0gICAgICAgICAg
ICAgICAgICAgIGlmICggcnNjcmlwdFR5cGUudGVzdCggbm9kZS50eXBlIHx8ICIiICkgJiYKLSAg
ICAgICAgICAgICAgICAgICAgICAgICFkYXRhUHJpdi5hY2Nlc3MoIG5vZGUsICJnbG9iYWxFdmFs
IiApICYmCi0gICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuY29udGFpbnMoIGRvYywgbm9k
ZSApICkgewotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG5vZGUuc3JjICkgewotCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT3B0aW9uYWwgQUpBWCBkZXBlbmRlbmN5LCBi
dXQgd29uJ3QgcnVuIHNjcmlwdHMgaWYgbm90IHByZXNlbnQKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIGpRdWVyeS5fZXZhbFVybCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgalF1ZXJ5Ll9ldmFsVXJsKCBub2RlLnNyYyApOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgalF1ZXJ5Lmdsb2JhbEV2YWwoIG5vZGUudGV4dENvbnRlbnQucmVw
bGFjZSggcmNsZWFuU2NyaXB0LCAiIiApICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gY29sbGVjdGlvbjsKLX0KLQotZnVuY3Rpb24g
cmVtb3ZlKCBlbGVtLCBzZWxlY3Rvciwga2VlcERhdGEgKSB7Ci0gICAgdmFyIG5vZGUsCi0gICAg
ICAgIG5vZGVzID0gc2VsZWN0b3IgPyBqUXVlcnkuZmlsdGVyKCBzZWxlY3RvciwgZWxlbSApIDog
ZWxlbSwKLSAgICAgICAgaSA9IDA7Ci0KLSAgICBmb3IgKCA7ICggbm9kZSA9IG5vZGVzWyBpIF0g
KSAhPSBudWxsOyBpKysgKSB7Ci0gICAgICAgIGlmICggIWtlZXBEYXRhICYmIG5vZGUubm9kZVR5
cGUgPT09IDEgKSB7Ci0gICAgICAgICAgICBqUXVlcnkuY2xlYW5EYXRhKCBnZXRBbGwoIG5vZGUg
KSApOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCBub2RlLnBhcmVudE5vZGUgKSB7Ci0gICAg
ICAgICAgICBpZiAoIGtlZXBEYXRhICYmIGpRdWVyeS5jb250YWlucyggbm9kZS5vd25lckRvY3Vt
ZW50LCBub2RlICkgKSB7Ci0gICAgICAgICAgICAgICAgc2V0R2xvYmFsRXZhbCggZ2V0QWxsKCBu
b2RlLCAic2NyaXB0IiApICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBub2RlLnBhcmVu
dE5vZGUucmVtb3ZlQ2hpbGQoIG5vZGUgKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVy
biBlbGVtOwotfQotCi1qUXVlcnkuZXh0ZW5kKCB7Ci0gICAgaHRtbFByZWZpbHRlcjogZnVuY3Rp
b24oIGh0bWwgKSB7Ci0gICAgICAgIHJldHVybiBodG1sLnJlcGxhY2UoIHJ4aHRtbFRhZywgIjwk
MT48LyQyPiIgKTsKLSAgICB9LAotCi0gICAgY2xvbmU6IGZ1bmN0aW9uKCBlbGVtLCBkYXRhQW5k
RXZlbnRzLCBkZWVwRGF0YUFuZEV2ZW50cyApIHsKLSAgICAgICAgdmFyIGksIGwsIHNyY0VsZW1l
bnRzLCBkZXN0RWxlbWVudHMsCi0gICAgICAgICAgICBjbG9uZSA9IGVsZW0uY2xvbmVOb2RlKCB0
cnVlICksCi0gICAgICAgICAgICBpblBhZ2UgPSBqUXVlcnkuY29udGFpbnMoIGVsZW0ub3duZXJE
b2N1bWVudCwgZWxlbSApOwotCi0gICAgICAgIC8vIEZpeCBJRSBjbG9uaW5nIGlzc3VlcwotICAg
ICAgICBpZiAoICFzdXBwb3J0Lm5vQ2xvbmVDaGVja2VkICYmICggZWxlbS5ub2RlVHlwZSA9PT0g
MSB8fCBlbGVtLm5vZGVUeXBlID09PSAxMSApICYmCi0gICAgICAgICAgICAgICAgIWpRdWVyeS5p
c1hNTERvYyggZWxlbSApICkgewotCi0gICAgICAgICAgICAvLyBXZSBlc2NoZXcgU2l6emxlIGhl
cmUgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnM6IGh0dHA6Ly9qc3BlcmYuY29tL2dldGFsbC12cy1z
aXp6bGUvMgotICAgICAgICAgICAgZGVzdEVsZW1lbnRzID0gZ2V0QWxsKCBjbG9uZSApOwotICAg
ICAgICAgICAgc3JjRWxlbWVudHMgPSBnZXRBbGwoIGVsZW0gKTsKLQotICAgICAgICAgICAgZm9y
ICggaSA9IDAsIGwgPSBzcmNFbGVtZW50cy5sZW5ndGg7IGkgPCBsOyBpKysgKSB7Ci0gICAgICAg
ICAgICAgICAgZml4SW5wdXQoIHNyY0VsZW1lbnRzWyBpIF0sIGRlc3RFbGVtZW50c1sgaSBdICk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBDb3B5IHRoZSBldmVudHMg
ZnJvbSB0aGUgb3JpZ2luYWwgdG8gdGhlIGNsb25lCi0gICAgICAgIGlmICggZGF0YUFuZEV2ZW50
cyApIHsKLSAgICAgICAgICAgIGlmICggZGVlcERhdGFBbmRFdmVudHMgKSB7Ci0gICAgICAgICAg
ICAgICAgc3JjRWxlbWVudHMgPSBzcmNFbGVtZW50cyB8fCBnZXRBbGwoIGVsZW0gKTsKLSAgICAg
ICAgICAgICAgICBkZXN0RWxlbWVudHMgPSBkZXN0RWxlbWVudHMgfHwgZ2V0QWxsKCBjbG9uZSAp
OwotCi0gICAgICAgICAgICAgICAgZm9yICggaSA9IDAsIGwgPSBzcmNFbGVtZW50cy5sZW5ndGg7
IGkgPCBsOyBpKysgKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNsb25lQ29weUV2ZW50KCBzcmNF
bGVtZW50c1sgaSBdLCBkZXN0RWxlbWVudHNbIGkgXSApOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgY2xvbmVDb3B5RXZlbnQoIGVsZW0s
IGNsb25lICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBQcmVzZXJ2
ZSBzY3JpcHQgZXZhbHVhdGlvbiBoaXN0b3J5Ci0gICAgICAgIGRlc3RFbGVtZW50cyA9IGdldEFs
bCggY2xvbmUsICJzY3JpcHQiICk7Ci0gICAgICAgIGlmICggZGVzdEVsZW1lbnRzLmxlbmd0aCA+
IDAgKSB7Ci0gICAgICAgICAgICBzZXRHbG9iYWxFdmFsKCBkZXN0RWxlbWVudHMsICFpblBhZ2Ug
JiYgZ2V0QWxsKCBlbGVtLCAic2NyaXB0IiApICk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBS
ZXR1cm4gdGhlIGNsb25lZCBzZXQKLSAgICAgICAgcmV0dXJuIGNsb25lOwotICAgIH0sCi0KLSAg
ICBjbGVhbkRhdGE6IGZ1bmN0aW9uKCBlbGVtcyApIHsKLSAgICAgICAgdmFyIGRhdGEsIGVsZW0s
IHR5cGUsCi0gICAgICAgICAgICBzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWwsCi0gICAg
ICAgICAgICBpID0gMDsKLQotICAgICAgICBmb3IgKCA7ICggZWxlbSA9IGVsZW1zWyBpIF0gKSAh
PT0gdW5kZWZpbmVkOyBpKysgKSB7Ci0gICAgICAgICAgICBpZiAoIGFjY2VwdERhdGEoIGVsZW0g
KSApIHsKLSAgICAgICAgICAgICAgICBpZiAoICggZGF0YSA9IGVsZW1bIGRhdGFQcml2LmV4cGFu
ZG8gXSApICkgewotICAgICAgICAgICAgICAgICAgICBpZiAoIGRhdGEuZXZlbnRzICkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgZm9yICggdHlwZSBpbiBkYXRhLmV2ZW50cyApIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHNwZWNpYWxbIHR5cGUgXSApIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnJlbW92ZSggZWxlbSwgdHlwZSAp
OwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIHNob3J0Y3V0IHRv
IGF2b2lkIGpRdWVyeS5ldmVudC5yZW1vdmUncyBvdmVyaGVhZAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVy
eS5yZW1vdmVFdmVudCggZWxlbSwgdHlwZSwgZGF0YS5oYW5kbGUgKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAvLyBTdXBwb3J0OiBDaHJvbWUgPD0gMzUt
NDUrCi0gICAgICAgICAgICAgICAgICAgIC8vIEFzc2lnbiB1bmRlZmluZWQgaW5zdGVhZCBvZiB1
c2luZyBkZWxldGUsIHNlZSBEYXRhI3JlbW92ZQotICAgICAgICAgICAgICAgICAgICBlbGVtWyBk
YXRhUHJpdi5leHBhbmRvIF0gPSB1bmRlZmluZWQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGlmICggZWxlbVsgZGF0YVVzZXIuZXhwYW5kbyBdICkgewotCi0gICAgICAgICAg
ICAgICAgICAgIC8vIFN1cHBvcnQ6IENocm9tZSA8PSAzNS00NSsKLSAgICAgICAgICAgICAgICAg
ICAgLy8gQXNzaWduIHVuZGVmaW5lZCBpbnN0ZWFkIG9mIHVzaW5nIGRlbGV0ZSwgc2VlIERhdGEj
cmVtb3ZlCi0gICAgICAgICAgICAgICAgICAgIGVsZW1bIGRhdGFVc2VyLmV4cGFuZG8gXSA9IHVu
ZGVmaW5lZDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICB9Ci19ICk7Ci0KLWpRdWVyeS5mbi5leHRlbmQoIHsKLQotICAgIC8vIEtlZXAgZG9tTWFuaXAg
ZXhwb3NlZCB1bnRpbCAzLjAgKGdoLTIyMjUpCi0gICAgZG9tTWFuaXA6IGRvbU1hbmlwLAotCi0g
ICAgZGV0YWNoOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7Ci0gICAgICAgIHJldHVybiByZW1vdmUo
IHRoaXMsIHNlbGVjdG9yLCB0cnVlICk7Ci0gICAgfSwKLQotICAgIHJlbW92ZTogZnVuY3Rpb24o
IHNlbGVjdG9yICkgewotICAgICAgICByZXR1cm4gcmVtb3ZlKCB0aGlzLCBzZWxlY3RvciApOwot
ICAgIH0sCi0KLSAgICB0ZXh0OiBmdW5jdGlvbiggdmFsdWUgKSB7Ci0gICAgICAgIHJldHVybiBh
Y2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCB2YWx1ZSApIHsKLSAgICAgICAgICAgIHJldHVybiB2YWx1
ZSA9PT0gdW5kZWZpbmVkID8KLSAgICAgICAgICAgICAgICBqUXVlcnkudGV4dCggdGhpcyApIDoK
LSAgICAgICAgICAgICAgICB0aGlzLmVtcHR5KCkuZWFjaCggZnVuY3Rpb24oKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmICggdGhpcy5ub2RlVHlwZSA9PT0gMSB8fCB0aGlzLm5vZGVUeXBlID09
PSAxMSB8fCB0aGlzLm5vZGVUeXBlID09PSA5ICkgewotICAgICAgICAgICAgICAgICAgICAgICAg
dGhpcy50ZXh0Q29udGVudCA9IHZhbHVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgfSApOwotICAgICAgICB9LCBudWxsLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCAp
OwotICAgIH0sCi0KLSAgICBhcHBlbmQ6IGZ1bmN0aW9uKCkgewotICAgICAgICByZXR1cm4gZG9t
TWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgICAgICAgICBp
ZiAoIHRoaXMubm9kZVR5cGUgPT09IDEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gMTEgfHwgdGhpcy5u
b2RlVHlwZSA9PT0gOSApIHsKLSAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0ID0gbWFuaXB1bGF0
aW9uVGFyZ2V0KCB0aGlzLCBlbGVtICk7Ci0gICAgICAgICAgICAgICAgdGFyZ2V0LmFwcGVuZENo
aWxkKCBlbGVtICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gKTsKLSAgICB9LAotCi0gICAg
cHJlcGVuZDogZnVuY3Rpb24oKSB7Ci0gICAgICAgIHJldHVybiBkb21NYW5pcCggdGhpcywgYXJn
dW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHsKLSAgICAgICAgICAgIGlmICggdGhpcy5ub2RlVHlw
ZSA9PT0gMSB8fCB0aGlzLm5vZGVUeXBlID09PSAxMSB8fCB0aGlzLm5vZGVUeXBlID09PSA5ICkg
ewotICAgICAgICAgICAgICAgIHZhciB0YXJnZXQgPSBtYW5pcHVsYXRpb25UYXJnZXQoIHRoaXMs
IGVsZW0gKTsKLSAgICAgICAgICAgICAgICB0YXJnZXQuaW5zZXJ0QmVmb3JlKCBlbGVtLCB0YXJn
ZXQuZmlyc3RDaGlsZCApOwotICAgICAgICAgICAgfQotICAgICAgICB9ICk7Ci0gICAgfSwKLQot
ICAgIGJlZm9yZTogZnVuY3Rpb24oKSB7Ci0gICAgICAgIHJldHVybiBkb21NYW5pcCggdGhpcywg
YXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHsKLSAgICAgICAgICAgIGlmICggdGhpcy5wYXJl
bnROb2RlICkgewotICAgICAgICAgICAgICAgIHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUo
IGVsZW0sIHRoaXMgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSApOwotICAgIH0sCi0KLSAg
ICBhZnRlcjogZnVuY3Rpb24oKSB7Ci0gICAgICAgIHJldHVybiBkb21NYW5pcCggdGhpcywgYXJn
dW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHsKLSAgICAgICAgICAgIGlmICggdGhpcy5wYXJlbnRO
b2RlICkgewotICAgICAgICAgICAgICAgIHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoIGVs
ZW0sIHRoaXMubmV4dFNpYmxpbmcgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSApOwotICAg
IH0sCi0KLSAgICBlbXB0eTogZnVuY3Rpb24oKSB7Ci0gICAgICAgIHZhciBlbGVtLAotICAgICAg
ICAgICAgaSA9IDA7Ci0KLSAgICAgICAgZm9yICggOyAoIGVsZW0gPSB0aGlzWyBpIF0gKSAhPSBu
dWxsOyBpKysgKSB7Ci0gICAgICAgICAgICBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7Ci0K
LSAgICAgICAgICAgICAgICAvLyBQcmV2ZW50IG1lbW9yeSBsZWFrcwotICAgICAgICAgICAgICAg
IGpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggZWxlbSwgZmFsc2UgKSApOwotCi0gICAgICAgICAg
ICAgICAgLy8gUmVtb3ZlIGFueSByZW1haW5pbmcgbm9kZXMKLSAgICAgICAgICAgICAgICBlbGVt
LnRleHRDb250ZW50ID0gIiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBy
ZXR1cm4gdGhpczsKLSAgICB9LAotCi0gICAgY2xvbmU6IGZ1bmN0aW9uKCBkYXRhQW5kRXZlbnRz
LCBkZWVwRGF0YUFuZEV2ZW50cyApIHsKLSAgICAgICAgZGF0YUFuZEV2ZW50cyA9IGRhdGFBbmRF
dmVudHMgPT0gbnVsbCA/IGZhbHNlIDogZGF0YUFuZEV2ZW50czsKLSAgICAgICAgZGVlcERhdGFB
bmRFdmVudHMgPSBkZWVwRGF0YUFuZEV2ZW50cyA9PSBudWxsID8gZGF0YUFuZEV2ZW50cyA6IGRl
ZXBEYXRhQW5kRXZlbnRzOwotCi0gICAgICAgIHJldHVybiB0aGlzLm1hcCggZnVuY3Rpb24oKSB7
Ci0gICAgICAgICAgICByZXR1cm4galF1ZXJ5LmNsb25lKCB0aGlzLCBkYXRhQW5kRXZlbnRzLCBk
ZWVwRGF0YUFuZEV2ZW50cyApOwotICAgICAgICB9ICk7Ci0gICAgfSwKLQotICAgIGh0bWw6IGZ1
bmN0aW9uKCB2YWx1ZSApIHsKLSAgICAgICAgcmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24o
IHZhbHVlICkgewotICAgICAgICAgICAgdmFyIGVsZW0gPSB0aGlzWyAwIF0gfHwge30sCi0gICAg
ICAgICAgICAgICAgaSA9IDAsCi0gICAgICAgICAgICAgICAgbCA9IHRoaXMubGVuZ3RoOwotCi0g
ICAgICAgICAgICBpZiAoIHZhbHVlID09PSB1bmRlZmluZWQgJiYgZWxlbS5ub2RlVHlwZSA9PT0g
MSApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZWxlbS5pbm5lckhUTUw7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIC8vIFNlZSBpZiB3ZSBjYW4gdGFrZSBhIHNob3J0Y3V0IGFuZCBq
dXN0IHVzZSBpbm5lckhUTUwKLSAgICAgICAgICAgIGlmICggdHlwZW9mIHZhbHVlID09PSAic3Ry
aW5nIiAmJiAhcm5vSW5uZXJodG1sLnRlc3QoIHZhbHVlICkgJiYKLSAgICAgICAgICAgICAgICAh
d3JhcE1hcFsgKCBydGFnTmFtZS5leGVjKCB2YWx1ZSApIHx8IFsgIiIsICIiIF0gKVsgMSBdLnRv
TG93ZXJDYXNlKCkgXSApIHsKLQotICAgICAgICAgICAgICAgIHZhbHVlID0galF1ZXJ5Lmh0bWxQ
cmVmaWx0ZXIoIHZhbHVlICk7Ci0KLSAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAg
ICAgICAgICBmb3IgKCA7IGkgPCBsOyBpKysgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBl
bGVtID0gdGhpc1sgaSBdIHx8IHt9OwotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBSZW1v
dmUgZWxlbWVudCBub2RlcyBhbmQgcHJldmVudCBtZW1vcnkgbGVha3MKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBqUXVlcnkuY2xlYW5EYXRhKCBnZXRBbGwoIGVsZW0sIGZhbHNlICkgKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLmlubmVySFRNTCA9IHZhbHVlOwotICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICAgICAgZWxlbSA9IDA7Ci0KLSAgICAgICAgICAgICAgICAvLyBJZiB1c2luZyBpbm5lckhU
TUwgdGhyb3dzIGFuIGV4Y2VwdGlvbiwgdXNlIHRoZSBmYWxsYmFjayBtZXRob2QKLSAgICAgICAg
ICAgICAgICB9IGNhdGNoICggZSApIHt9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlm
ICggZWxlbSApIHsKLSAgICAgICAgICAgICAgICB0aGlzLmVtcHR5KCkuYXBwZW5kKCB2YWx1ZSAp
OwotICAgICAgICAgICAgfQotICAgICAgICB9LCBudWxsLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0
aCApOwotICAgIH0sCi0KLSAgICByZXBsYWNlV2l0aDogZnVuY3Rpb24oKSB7Ci0gICAgICAgIHZh
ciBpZ25vcmVkID0gW107Ci0KLSAgICAgICAgLy8gTWFrZSB0aGUgY2hhbmdlcywgcmVwbGFjaW5n
IGVhY2ggbm9uLWlnbm9yZWQgY29udGV4dCBlbGVtZW50IHdpdGggdGhlIG5ldyBjb250ZW50Ci0g
ICAgICAgIHJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSAp
IHsKLSAgICAgICAgICAgIHZhciBwYXJlbnQgPSB0aGlzLnBhcmVudE5vZGU7Ci0KLSAgICAgICAg
ICAgIGlmICggalF1ZXJ5LmluQXJyYXkoIHRoaXMsIGlnbm9yZWQgKSA8IDAgKSB7Ci0gICAgICAg
ICAgICAgICAgalF1ZXJ5LmNsZWFuRGF0YSggZ2V0QWxsKCB0aGlzICkgKTsKLSAgICAgICAgICAg
ICAgICBpZiAoIHBhcmVudCApIHsKLSAgICAgICAgICAgICAgICAgICAgcGFyZW50LnJlcGxhY2VD
aGlsZCggZWxlbSwgdGhpcyApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAvLyBGb3JjZSBjYWxsYmFjayBpbnZvY2F0aW9uCi0gICAgICAgIH0sIGlnbm9yZWQg
KTsKLSAgICB9Ci19ICk7Ci0KLWpRdWVyeS5lYWNoKCB7Ci0gICAgYXBwZW5kVG86ICJhcHBlbmQi
LAotICAgIHByZXBlbmRUbzogInByZXBlbmQiLAotICAgIGluc2VydEJlZm9yZTogImJlZm9yZSIs
Ci0gICAgaW5zZXJ0QWZ0ZXI6ICJhZnRlciIsCi0gICAgcmVwbGFjZUFsbDogInJlcGxhY2VXaXRo
IgotfSwgZnVuY3Rpb24oIG5hbWUsIG9yaWdpbmFsICkgewotICAgIGpRdWVyeS5mblsgbmFtZSBd
ID0gZnVuY3Rpb24oIHNlbGVjdG9yICkgewotICAgICAgICB2YXIgZWxlbXMsCi0gICAgICAgICAg
ICByZXQgPSBbXSwKLSAgICAgICAgICAgIGluc2VydCA9IGpRdWVyeSggc2VsZWN0b3IgKSwKLSAg
ICAgICAgICAgIGxhc3QgPSBpbnNlcnQubGVuZ3RoIC0gMSwKLSAgICAgICAgICAgIGkgPSAwOwot
Ci0gICAgICAgIGZvciAoIDsgaSA8PSBsYXN0OyBpKysgKSB7Ci0gICAgICAgICAgICBlbGVtcyA9
IGkgPT09IGxhc3QgPyB0aGlzIDogdGhpcy5jbG9uZSggdHJ1ZSApOwotICAgICAgICAgICAgalF1
ZXJ5KCBpbnNlcnRbIGkgXSApWyBvcmlnaW5hbCBdKCBlbGVtcyApOwotCi0gICAgICAgICAgICAv
LyBTdXBwb3J0OiBRdFdlYktpdAotICAgICAgICAgICAgLy8gLmdldCgpIGJlY2F1c2UgcHVzaC5h
cHBseShfLCBhcnJheWxpa2UpIHRocm93cwotICAgICAgICAgICAgcHVzaC5hcHBseSggcmV0LCBl
bGVtcy5nZXQoKSApOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHRoaXMucHVzaFN0YWNr
KCByZXQgKTsKLSAgICB9OwotfSApOwotCi0KLXZhciBpZnJhbWUsCi0gICAgZWxlbWRpc3BsYXkg
PSB7Ci0KLSAgICAgICAgLy8gU3VwcG9ydDogRmlyZWZveAotICAgICAgICAvLyBXZSBoYXZlIHRv
IHByZS1kZWZpbmUgdGhlc2UgdmFsdWVzIGZvciBGRiAoIzEwMjI3KQotICAgICAgICBIVE1MOiAi
YmxvY2siLAotICAgICAgICBCT0RZOiAiYmxvY2siCi0gICAgfTsKLQotLyoqCi0gKiBSZXRyaWV2
ZSB0aGUgYWN0dWFsIGRpc3BsYXkgb2YgYSBlbGVtZW50Ci0gKiBAcGFyYW0ge1N0cmluZ30gbmFt
ZSBub2RlTmFtZSBvZiB0aGUgZWxlbWVudAotICogQHBhcmFtIHtPYmplY3R9IGRvYyBEb2N1bWVu
dCBvYmplY3QKLSAqLwotCi0vLyBDYWxsZWQgb25seSBmcm9tIHdpdGhpbiBkZWZhdWx0RGlzcGxh
eQotZnVuY3Rpb24gYWN0dWFsRGlzcGxheSggbmFtZSwgZG9jICkgewotICAgIHZhciBlbGVtID0g
alF1ZXJ5KCBkb2MuY3JlYXRlRWxlbWVudCggbmFtZSApICkuYXBwZW5kVG8oIGRvYy5ib2R5ICks
Ci0KLSAgICAgICAgZGlzcGxheSA9IGpRdWVyeS5jc3MoIGVsZW1bIDAgXSwgImRpc3BsYXkiICk7
Ci0KLSAgICAvLyBXZSBkb24ndCBoYXZlIGFueSBkYXRhIHN0b3JlZCBvbiB0aGUgZWxlbWVudCwK
LSAgICAvLyBzbyB1c2UgImRldGFjaCIgbWV0aG9kIGFzIGZhc3Qgd2F5IHRvIGdldCByaWQgb2Yg
dGhlIGVsZW1lbnQKLSAgICBlbGVtLmRldGFjaCgpOwotCi0gICAgcmV0dXJuIGRpc3BsYXk7Ci19
Ci0KLS8qKgotICogVHJ5IHRvIGRldGVybWluZSB0aGUgZGVmYXVsdCBkaXNwbGF5IHZhbHVlIG9m
IGFuIGVsZW1lbnQKLSAqIEBwYXJhbSB7U3RyaW5nfSBub2RlTmFtZQotICovCi1mdW5jdGlvbiBk
ZWZhdWx0RGlzcGxheSggbm9kZU5hbWUgKSB7Ci0gICAgdmFyIGRvYyA9IGRvY3VtZW50LAotICAg
ICAgICBkaXNwbGF5ID0gZWxlbWRpc3BsYXlbIG5vZGVOYW1lIF07Ci0KLSAgICBpZiAoICFkaXNw
bGF5ICkgewotICAgICAgICBkaXNwbGF5ID0gYWN0dWFsRGlzcGxheSggbm9kZU5hbWUsIGRvYyAp
OwotCi0gICAgICAgIC8vIElmIHRoZSBzaW1wbGUgd2F5IGZhaWxzLCByZWFkIGZyb20gaW5zaWRl
IGFuIGlmcmFtZQotICAgICAgICBpZiAoIGRpc3BsYXkgPT09ICJub25lIiB8fCAhZGlzcGxheSAp
IHsKLQotICAgICAgICAgICAgLy8gVXNlIHRoZSBhbHJlYWR5LWNyZWF0ZWQgaWZyYW1lIGlmIHBv
c3NpYmxlCi0gICAgICAgICAgICBpZnJhbWUgPSAoIGlmcmFtZSB8fCBqUXVlcnkoICI8aWZyYW1l
IGZyYW1lYm9yZGVyPScwJyB3aWR0aD0nMCcgaGVpZ2h0PScwJy8+IiApICkKLSAgICAgICAgICAg
ICAgICAuYXBwZW5kVG8oIGRvYy5kb2N1bWVudEVsZW1lbnQgKTsKLQotICAgICAgICAgICAgLy8g
QWx3YXlzIHdyaXRlIGEgbmV3IEhUTUwgc2tlbGV0b24gc28gV2Via2l0IGFuZCBGaXJlZm94IGRv
bid0IGNob2tlIG9uIHJldXNlCi0gICAgICAgICAgICBkb2MgPSBpZnJhbWVbIDAgXS5jb250ZW50
RG9jdW1lbnQ7Ci0KLSAgICAgICAgICAgIC8vIFN1cHBvcnQ6IElFCi0gICAgICAgICAgICBkb2Mu
d3JpdGUoKTsKLSAgICAgICAgICAgIGRvYy5jbG9zZSgpOwotCi0gICAgICAgICAgICBkaXNwbGF5
ID0gYWN0dWFsRGlzcGxheSggbm9kZU5hbWUsIGRvYyApOwotICAgICAgICAgICAgaWZyYW1lLmRl
dGFjaCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gU3RvcmUgdGhlIGNvcnJlY3QgZGVmYXVs
dCBkaXNwbGF5Ci0gICAgICAgIGVsZW1kaXNwbGF5WyBub2RlTmFtZSBdID0gZGlzcGxheTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gZGlzcGxheTsKLX0KLXZhciBybWFyZ2luID0gKCAvXm1hcmdpbi8g
KTsKLQotdmFyIHJudW1ub25weCA9IG5ldyBSZWdFeHAoICJeKCIgKyBwbnVtICsgIikoPyFweClb
YS16JV0rJCIsICJpIiApOwotCi12YXIgZ2V0U3R5bGVzID0gZnVuY3Rpb24oIGVsZW0gKSB7Ci0K
LSAgICAgICAgLy8gU3VwcG9ydDogSUU8PTExKywgRmlyZWZveDw9MzArICgjMTUwOTgsICMxNDE1
MCkKLSAgICAgICAgLy8gSUUgdGhyb3dzIG9uIGVsZW1lbnRzIGNyZWF0ZWQgaW4gcG9wdXBzCi0g
ICAgICAgIC8vIEZGIG1lYW53aGlsZSB0aHJvd3Mgb24gZnJhbWUgZWxlbWVudHMgdGhyb3VnaCAi
ZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSIKLSAgICAgICAgdmFyIHZpZXcgPSBlbGVtLm93
bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc7Ci0KLSAgICAgICAgaWYgKCAhdmlldyB8fCAhdmlldy5v
cGVuZXIgKSB7Ci0gICAgICAgICAgICB2aWV3ID0gd2luZG93OwotICAgICAgICB9Ci0KLSAgICAg
ICAgcmV0dXJuIHZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSggZWxlbSApOwotICAgIH07Ci0KLXZhciBz
d2FwID0gZnVuY3Rpb24oIGVsZW0sIG9wdGlvbnMsIGNhbGxiYWNrLCBhcmdzICkgewotICAgIHZh
ciByZXQsIG5hbWUsCi0gICAgICAgIG9sZCA9IHt9OwotCi0gICAgLy8gUmVtZW1iZXIgdGhlIG9s
ZCB2YWx1ZXMsIGFuZCBpbnNlcnQgdGhlIG5ldyBvbmVzCi0gICAgZm9yICggbmFtZSBpbiBvcHRp
b25zICkgewotICAgICAgICBvbGRbIG5hbWUgXSA9IGVsZW0uc3R5bGVbIG5hbWUgXTsKLSAgICAg
ICAgZWxlbS5zdHlsZVsgbmFtZSBdID0gb3B0aW9uc1sgbmFtZSBdOwotICAgIH0KLQotICAgIHJl
dCA9IGNhbGxiYWNrLmFwcGx5KCBlbGVtLCBhcmdzIHx8IFtdICk7Ci0KLSAgICAvLyBSZXZlcnQg
dGhlIG9sZCB2YWx1ZXMKLSAgICBmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7Ci0gICAgICAgIGVs
ZW0uc3R5bGVbIG5hbWUgXSA9IG9sZFsgbmFtZSBdOwotICAgIH0KLQotICAgIHJldHVybiByZXQ7
Ci19OwotCi0KLXZhciBkb2N1bWVudEVsZW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7
Ci0KLQotCi0oIGZ1bmN0aW9uKCkgewotICAgIHZhciBwaXhlbFBvc2l0aW9uVmFsLCBib3hTaXpp
bmdSZWxpYWJsZVZhbCwgcGl4ZWxNYXJnaW5SaWdodFZhbCwgcmVsaWFibGVNYXJnaW5MZWZ0VmFs
LAotICAgICAgICBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAiZGl2IiApLAot
ICAgICAgICBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAiZGl2IiApOwotCi0gICAgLy8g
RmluaXNoIGVhcmx5IGluIGxpbWl0ZWQgKG5vbi1icm93c2VyKSBlbnZpcm9ubWVudHMKLSAgICBp
ZiAoICFkaXYuc3R5bGUgKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBTdXBw
b3J0OiBJRTktMTErCi0gICAgLy8gU3R5bGUgb2YgY2xvbmVkIGVsZW1lbnQgYWZmZWN0cyBzb3Vy
Y2UgZWxlbWVudCBjbG9uZWQgKCM4OTA4KQotICAgIGRpdi5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCA9
ICJjb250ZW50LWJveCI7Ci0gICAgZGl2LmNsb25lTm9kZSggdHJ1ZSApLnN0eWxlLmJhY2tncm91
bmRDbGlwID0gIiI7Ci0gICAgc3VwcG9ydC5jbGVhckNsb25lU3R5bGUgPSBkaXYuc3R5bGUuYmFj
a2dyb3VuZENsaXAgPT09ICJjb250ZW50LWJveCI7Ci0KLSAgICBjb250YWluZXIuc3R5bGUuY3Nz
VGV4dCA9ICJib3JkZXI6MDt3aWR0aDo4cHg7aGVpZ2h0OjA7dG9wOjA7bGVmdDotOTk5OXB4OyIg
KwotICAgICAgICAicGFkZGluZzowO21hcmdpbi10b3A6MXB4O3Bvc2l0aW9uOmFic29sdXRlIjsK
LSAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoIGRpdiApOwotCi0gICAgLy8gRXhlY3V0aW5nIGJv
dGggcGl4ZWxQb3NpdGlvbiAmIGJveFNpemluZ1JlbGlhYmxlIHRlc3RzIHJlcXVpcmUgb25seSBv
bmUgbGF5b3V0Ci0gICAgLy8gc28gdGhleSdyZSBleGVjdXRlZCBhdCB0aGUgc2FtZSB0aW1lIHRv
IHNhdmUgdGhlIHNlY29uZCBjb21wdXRhdGlvbi4KLSAgICBmdW5jdGlvbiBjb21wdXRlU3R5bGVU
ZXN0cygpIHsKLSAgICAgICAgZGl2LnN0eWxlLmNzc1RleHQgPQotCi0gICAgICAgICAgICAvLyBT
dXBwb3J0OiBGaXJlZm94PDI5LCBBbmRyb2lkIDIuMwotICAgICAgICAgICAgLy8gVmVuZG9yLXBy
ZWZpeCBib3gtc2l6aW5nCi0gICAgICAgICAgICAiLXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1i
b3g7LW1vei1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94OyIgKwot
ICAgICAgICAgICAgInBvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6YmxvY2s7IiArCi0gICAgICAg
ICAgICAibWFyZ2luOmF1dG87Ym9yZGVyOjFweDtwYWRkaW5nOjFweDsiICsKLSAgICAgICAgICAg
ICJ0b3A6MSU7d2lkdGg6NTAlIjsKLSAgICAgICAgZGl2LmlubmVySFRNTCA9ICIiOwotICAgICAg
ICBkb2N1bWVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoIGNvbnRhaW5lciApOwotCi0gICAgICAgIHZh
ciBkaXZTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKCBkaXYgKTsKLSAgICAgICAgcGl4
ZWxQb3NpdGlvblZhbCA9IGRpdlN0eWxlLnRvcCAhPT0gIjElIjsKLSAgICAgICAgcmVsaWFibGVN
YXJnaW5MZWZ0VmFsID0gZGl2U3R5bGUubWFyZ2luTGVmdCA9PT0gIjJweCI7Ci0gICAgICAgIGJv
eFNpemluZ1JlbGlhYmxlVmFsID0gZGl2U3R5bGUud2lkdGggPT09ICI0cHgiOwotCi0gICAgICAg
IC8vIFN1cHBvcnQ6IEFuZHJvaWQgNC4wIC0gNC4zIG9ubHkKLSAgICAgICAgLy8gU29tZSBzdHls
ZXMgY29tZSBiYWNrIHdpdGggcGVyY2VudGFnZSB2YWx1ZXMsIGV2ZW4gdGhvdWdoIHRoZXkgc2hv
dWxkbid0Ci0gICAgICAgIGRpdi5zdHlsZS5tYXJnaW5SaWdodCA9ICI1MCUiOwotICAgICAgICBw
aXhlbE1hcmdpblJpZ2h0VmFsID0gZGl2U3R5bGUubWFyZ2luUmlnaHQgPT09ICI0cHgiOwotCi0g
ICAgICAgIGRvY3VtZW50RWxlbWVudC5yZW1vdmVDaGlsZCggY29udGFpbmVyICk7Ci0gICAgfQot
Ci0gICAgalF1ZXJ5LmV4dGVuZCggc3VwcG9ydCwgewotICAgICAgICBwaXhlbFBvc2l0aW9uOiBm
dW5jdGlvbigpIHsKLQotICAgICAgICAgICAgLy8gVGhpcyB0ZXN0IGlzIGV4ZWN1dGVkIG9ubHkg
b25jZSBidXQgd2Ugc3RpbGwgZG8gbWVtb2l6aW5nCi0gICAgICAgICAgICAvLyBzaW5jZSB3ZSBj
YW4gdXNlIHRoZSBib3hTaXppbmdSZWxpYWJsZSBwcmUtY29tcHV0aW5nLgotICAgICAgICAgICAg
Ly8gTm8gbmVlZCB0byBjaGVjayBpZiB0aGUgdGVzdCB3YXMgYWxyZWFkeSBwZXJmb3JtZWQsIHRo
b3VnaC4KLSAgICAgICAgICAgIGNvbXB1dGVTdHlsZVRlc3RzKCk7Ci0gICAgICAgICAgICByZXR1
cm4gcGl4ZWxQb3NpdGlvblZhbDsKLSAgICAgICAgfSwKLSAgICAgICAgYm94U2l6aW5nUmVsaWFi
bGU6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgaWYgKCBib3hTaXppbmdSZWxpYWJsZVZhbCA9
PSBudWxsICkgewotICAgICAgICAgICAgICAgIGNvbXB1dGVTdHlsZVRlc3RzKCk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gYm94U2l6aW5nUmVsaWFibGVWYWw7Ci0gICAgICAg
IH0sCi0gICAgICAgIHBpeGVsTWFyZ2luUmlnaHQ6IGZ1bmN0aW9uKCkgewotCi0gICAgICAgICAg
ICAvLyBTdXBwb3J0OiBBbmRyb2lkIDQuMC00LjMKLSAgICAgICAgICAgIC8vIFdlJ3JlIGNoZWNr
aW5nIGZvciBib3hTaXppbmdSZWxpYWJsZVZhbCBoZXJlIGluc3RlYWQgb2YgcGl4ZWxNYXJnaW5S
aWdodFZhbAotICAgICAgICAgICAgLy8gc2luY2UgdGhhdCBjb21wcmVzc2VzIGJldHRlciBhbmQg
dGhleSdyZSBjb21wdXRlZCB0b2dldGhlciBhbnl3YXkuCi0gICAgICAgICAgICBpZiAoIGJveFNp
emluZ1JlbGlhYmxlVmFsID09IG51bGwgKSB7Ci0gICAgICAgICAgICAgICAgY29tcHV0ZVN0eWxl
VGVzdHMoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBwaXhlbE1hcmdpblJp
Z2h0VmFsOwotICAgICAgICB9LAotICAgICAgICByZWxpYWJsZU1hcmdpbkxlZnQ6IGZ1bmN0aW9u
KCkgewotCi0gICAgICAgICAgICAvLyBTdXBwb3J0OiBJRSA8PTggb25seSwgQW5kcm9pZCA0LjAg
LSA0LjMgb25seSwgRmlyZWZveCA8PTMgLSAzNwotICAgICAgICAgICAgaWYgKCBib3hTaXppbmdS
ZWxpYWJsZVZhbCA9PSBudWxsICkgewotICAgICAgICAgICAgICAgIGNvbXB1dGVTdHlsZVRlc3Rz
KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gcmVsaWFibGVNYXJnaW5MZWZ0
VmFsOwotICAgICAgICB9LAotICAgICAgICByZWxpYWJsZU1hcmdpblJpZ2h0OiBmdW5jdGlvbigp
IHsKLQotICAgICAgICAgICAgLy8gU3VwcG9ydDogQW5kcm9pZCAyLjMKLSAgICAgICAgICAgIC8v
IENoZWNrIGlmIGRpdiB3aXRoIGV4cGxpY2l0IHdpZHRoIGFuZCBubyBtYXJnaW4tcmlnaHQgaW5j
b3JyZWN0bHkKLSAgICAgICAgICAgIC8vIGdldHMgY29tcHV0ZWQgbWFyZ2luLXJpZ2h0IGJhc2Vk
IG9uIHdpZHRoIG9mIGNvbnRhaW5lci4gKCMzMzMzKQotICAgICAgICAgICAgLy8gV2ViS2l0IEJ1
ZyAxMzM0MyAtIGdldENvbXB1dGVkU3R5bGUgcmV0dXJucyB3cm9uZyB2YWx1ZSBmb3IgbWFyZ2lu
LXJpZ2h0Ci0gICAgICAgICAgICAvLyBUaGlzIHN1cHBvcnQgZnVuY3Rpb24gaXMgb25seSBleGVj
dXRlZCBvbmNlIHNvIG5vIG1lbW9pemluZyBpcyBuZWVkZWQuCi0gICAgICAgICAgICB2YXIgcmV0
LAotICAgICAgICAgICAgICAgIG1hcmdpbkRpdiA9IGRpdi5hcHBlbmRDaGlsZCggZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCggImRpdiIgKSApOwotCi0gICAgICAgICAgICAvLyBSZXNldCBDU1M6IGJv
eC1zaXppbmc7IGRpc3BsYXk7IG1hcmdpbjsgYm9yZGVyOyBwYWRkaW5nCi0gICAgICAgICAgICBt
YXJnaW5EaXYuc3R5bGUuY3NzVGV4dCA9IGRpdi5zdHlsZS5jc3NUZXh0ID0KLQotICAgICAgICAg
ICAgICAgIC8vIFN1cHBvcnQ6IEFuZHJvaWQgMi4zCi0gICAgICAgICAgICAgICAgLy8gVmVuZG9y
LXByZWZpeCBib3gtc2l6aW5nCi0gICAgICAgICAgICAgICAgIi13ZWJraXQtYm94LXNpemluZzpj
b250ZW50LWJveDtib3gtc2l6aW5nOmNvbnRlbnQtYm94OyIgKwotICAgICAgICAgICAgICAgICJk
aXNwbGF5OmJsb2NrO21hcmdpbjowO2JvcmRlcjowO3BhZGRpbmc6MCI7Ci0gICAgICAgICAgICBt
YXJnaW5EaXYuc3R5bGUubWFyZ2luUmlnaHQgPSBtYXJnaW5EaXYuc3R5bGUud2lkdGggPSAiMCI7
Ci0gICAgICAgICAgICBkaXYuc3R5bGUud2lkdGggPSAiMXB4IjsKLSAgICAgICAgICAgIGRvY3Vt
ZW50RWxlbWVudC5hcHBlbmRDaGlsZCggY29udGFpbmVyICk7Ci0KLSAgICAgICAgICAgIHJldCA9
ICFwYXJzZUZsb2F0KCB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSggbWFyZ2luRGl2ICkubWFyZ2lu
UmlnaHQgKTsKLQotICAgICAgICAgICAgZG9jdW1lbnRFbGVtZW50LnJlbW92ZUNoaWxkKCBjb250
YWluZXIgKTsKLSAgICAgICAgICAgIGRpdi5yZW1vdmVDaGlsZCggbWFyZ2luRGl2ICk7Ci0KLSAg
ICAgICAgICAgIHJldHVybiByZXQ7Ci0gICAgICAgIH0KLSAgICB9ICk7Ci19ICkoKTsKLQotCi1m
dW5jdGlvbiBjdXJDU1MoIGVsZW0sIG5hbWUsIGNvbXB1dGVkICkgewotICAgIHZhciB3aWR0aCwg
bWluV2lkdGgsIG1heFdpZHRoLCByZXQsCi0gICAgICAgIHN0eWxlID0gZWxlbS5zdHlsZTsKLQot
ICAgIGNvbXB1dGVkID0gY29tcHV0ZWQgfHwgZ2V0U3R5bGVzKCBlbGVtICk7Ci0gICAgcmV0ID0g
Y29tcHV0ZWQgPyBjb21wdXRlZC5nZXRQcm9wZXJ0eVZhbHVlKCBuYW1lICkgfHwgY29tcHV0ZWRb
IG5hbWUgXSA6IHVuZGVmaW5lZDsKLQotICAgIC8vIFN1cHBvcnQ6IE9wZXJhIDEyLjF4IG9ubHkK
LSAgICAvLyBGYWxsIGJhY2sgdG8gc3R5bGUgZXZlbiB3aXRob3V0IGNvbXB1dGVkCi0gICAgLy8g
Y29tcHV0ZWQgaXMgdW5kZWZpbmVkIGZvciBlbGVtcyBvbiBkb2N1bWVudCBmcmFnbWVudHMKLSAg
ICBpZiAoICggcmV0ID09PSAiIiB8fCByZXQgPT09IHVuZGVmaW5lZCApICYmICFqUXVlcnkuY29u
dGFpbnMoIGVsZW0ub3duZXJEb2N1bWVudCwgZWxlbSApICkgewotICAgICAgICByZXQgPSBqUXVl
cnkuc3R5bGUoIGVsZW0sIG5hbWUgKTsKLSAgICB9Ci0KLSAgICAvLyBTdXBwb3J0OiBJRTkKLSAg
ICAvLyBnZXRQcm9wZXJ0eVZhbHVlIGlzIG9ubHkgbmVlZGVkIGZvciAuY3NzKCdmaWx0ZXInKSAo
IzEyNTM3KQotICAgIGlmICggY29tcHV0ZWQgKSB7Ci0KLSAgICAgICAgLy8gQSB0cmlidXRlIHRv
IHRoZSAiYXdlc29tZSBoYWNrIGJ5IERlYW4gRWR3YXJkcyIKLSAgICAgICAgLy8gQW5kcm9pZCBC
cm93c2VyIHJldHVybnMgcGVyY2VudGFnZSBmb3Igc29tZSB2YWx1ZXMsCi0gICAgICAgIC8vIGJ1
dCB3aWR0aCBzZWVtcyB0byBiZSByZWxpYWJseSBwaXhlbHMuCi0gICAgICAgIC8vIFRoaXMgaXMg
YWdhaW5zdCB0aGUgQ1NTT00gZHJhZnQgc3BlYzoKLSAgICAgICAgLy8gaHR0cDovL2Rldi53My5v
cmcvY3Nzd2cvY3Nzb20vI3Jlc29sdmVkLXZhbHVlcwotICAgICAgICBpZiAoICFzdXBwb3J0LnBp
eGVsTWFyZ2luUmlnaHQoKSAmJiBybnVtbm9ucHgudGVzdCggcmV0ICkgJiYgcm1hcmdpbi50ZXN0
KCBuYW1lICkgKSB7Ci0KLSAgICAgICAgICAgIC8vIFJlbWVtYmVyIHRoZSBvcmlnaW5hbCB2YWx1
ZXMKLSAgICAgICAgICAgIHdpZHRoID0gc3R5bGUud2lkdGg7Ci0gICAgICAgICAgICBtaW5XaWR0
aCA9IHN0eWxlLm1pbldpZHRoOwotICAgICAgICAgICAgbWF4V2lkdGggPSBzdHlsZS5tYXhXaWR0
aDsKLQotICAgICAgICAgICAgLy8gUHV0IGluIHRoZSBuZXcgdmFsdWVzIHRvIGdldCBhIGNvbXB1
dGVkIHZhbHVlIG91dAotICAgICAgICAgICAgc3R5bGUubWluV2lkdGggPSBzdHlsZS5tYXhXaWR0
aCA9IHN0eWxlLndpZHRoID0gcmV0OwotICAgICAgICAgICAgcmV0ID0gY29tcHV0ZWQud2lkdGg7
Ci0KLSAgICAgICAgICAgIC8vIFJldmVydCB0aGUgY2hhbmdlZCB2YWx1ZXMKLSAgICAgICAgICAg
IHN0eWxlLndpZHRoID0gd2lkdGg7Ci0gICAgICAgICAgICBzdHlsZS5taW5XaWR0aCA9IG1pbldp
ZHRoOwotICAgICAgICAgICAgc3R5bGUubWF4V2lkdGggPSBtYXhXaWR0aDsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIHJldHVybiByZXQgIT09IHVuZGVmaW5lZCA/Ci0KLSAgICAgICAgLy8gU3Vw
cG9ydDogSUU5LTExKwotICAgICAgICAvLyBJRSByZXR1cm5zIHpJbmRleCB2YWx1ZSBhcyBhbiBp
bnRlZ2VyLgotICAgICAgICByZXQgKyAiIiA6Ci0gICAgICAgIHJldDsKLX0KLQotCi1mdW5jdGlv
biBhZGRHZXRIb29rSWYoIGNvbmRpdGlvbkZuLCBob29rRm4gKSB7Ci0KLSAgICAvLyBEZWZpbmUg
dGhlIGhvb2ssIHdlJ2xsIGNoZWNrIG9uIHRoZSBmaXJzdCBydW4gaWYgaXQncyByZWFsbHkgbmVl
ZGVkLgotICAgIHJldHVybiB7Ci0gICAgICAgIGdldDogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAg
ICBpZiAoIGNvbmRpdGlvbkZuKCkgKSB7Ci0KLSAgICAgICAgICAgICAgICAvLyBIb29rIG5vdCBu
ZWVkZWQgKG9yIGl0J3Mgbm90IHBvc3NpYmxlIHRvIHVzZSBpdCBkdWUKLSAgICAgICAgICAgICAg
ICAvLyB0byBtaXNzaW5nIGRlcGVuZGVuY3kpLCByZW1vdmUgaXQuCi0gICAgICAgICAgICAgICAg
ZGVsZXRlIHRoaXMuZ2V0OwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgLy8gSG9vayBuZWVkZWQ7IHJlZGVmaW5lIGl0IHNvIHRoYXQgdGhlIHN1
cHBvcnQgdGVzdCBpcyBub3QgZXhlY3V0ZWQgYWdhaW4uCi0gICAgICAgICAgICByZXR1cm4gKCB0
aGlzLmdldCA9IGhvb2tGbiApLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTsKLSAgICAgICAgfQot
ICAgIH07Ci19Ci0KLQotdmFyCi0KLSAgICAvLyBTd2FwcGFibGUgaWYgZGlzcGxheSBpcyBub25l
IG9yIHN0YXJ0cyB3aXRoIHRhYmxlCi0gICAgLy8gZXhjZXB0ICJ0YWJsZSIsICJ0YWJsZS1jZWxs
Iiwgb3IgInRhYmxlLWNhcHRpb24iCi0gICAgLy8gU2VlIGhlcmUgZm9yIGRpc3BsYXkgdmFsdWVz
OiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0NTUy9kaXNwbGF5Ci0g
ICAgcmRpc3BsYXlzd2FwID0gL14obm9uZXx0YWJsZSg/IS1jW2VhXSkuKykvLAotCi0gICAgY3Nz
U2hvdyA9IHsgcG9zaXRpb246ICJhYnNvbHV0ZSIsIHZpc2liaWxpdHk6ICJoaWRkZW4iLCBkaXNw
bGF5OiAiYmxvY2siIH0sCi0gICAgY3NzTm9ybWFsVHJhbnNmb3JtID0gewotICAgICAgICBsZXR0
ZXJTcGFjaW5nOiAiMCIsCi0gICAgICAgIGZvbnRXZWlnaHQ6ICI0MDAiCi0gICAgfSwKLQotICAg
IGNzc1ByZWZpeGVzID0gWyAiV2Via2l0IiwgIk8iLCAiTW96IiwgIm1zIiBdLAotICAgIGVtcHR5
U3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAiZGl2IiApLnN0eWxlOwotCi0vLyBSZXR1
cm4gYSBjc3MgcHJvcGVydHkgbWFwcGVkIHRvIGEgcG90ZW50aWFsbHkgdmVuZG9yIHByZWZpeGVk
IHByb3BlcnR5Ci1mdW5jdGlvbiB2ZW5kb3JQcm9wTmFtZSggbmFtZSApIHsKLQotICAgIC8vIFNo
b3J0Y3V0IGZvciBuYW1lcyB0aGF0IGFyZSBub3QgdmVuZG9yIHByZWZpeGVkCi0gICAgaWYgKCBu
YW1lIGluIGVtcHR5U3R5bGUgKSB7Ci0gICAgICAgIHJldHVybiBuYW1lOwotICAgIH0KLQotICAg
IC8vIENoZWNrIGZvciB2ZW5kb3IgcHJlZml4ZWQgbmFtZXMKLSAgICB2YXIgY2FwTmFtZSA9IG5h
bWVbIDAgXS50b1VwcGVyQ2FzZSgpICsgbmFtZS5zbGljZSggMSApLAotICAgICAgICBpID0gY3Nz
UHJlZml4ZXMubGVuZ3RoOwotCi0gICAgd2hpbGUgKCBpLS0gKSB7Ci0gICAgICAgIG5hbWUgPSBj
c3NQcmVmaXhlc1sgaSBdICsgY2FwTmFtZTsKLSAgICAgICAgaWYgKCBuYW1lIGluIGVtcHR5U3R5
bGUgKSB7Ci0gICAgICAgICAgICByZXR1cm4gbmFtZTsKLSAgICAgICAgfQotICAgIH0KLX0KLQot
ZnVuY3Rpb24gc2V0UG9zaXRpdmVOdW1iZXIoIGVsZW0sIHZhbHVlLCBzdWJ0cmFjdCApIHsKLQot
ICAgIC8vIEFueSByZWxhdGl2ZSAoKy8tKSB2YWx1ZXMgaGF2ZSBhbHJlYWR5IGJlZW4KLSAgICAv
LyBub3JtYWxpemVkIGF0IHRoaXMgcG9pbnQKLSAgICB2YXIgbWF0Y2hlcyA9IHJjc3NOdW0uZXhl
YyggdmFsdWUgKTsKLSAgICByZXR1cm4gbWF0Y2hlcyA/Ci0KLSAgICAgICAgLy8gR3VhcmQgYWdh
aW5zdCB1bmRlZmluZWQgInN1YnRyYWN0IiwgZS5nLiwgd2hlbiB1c2VkIGFzIGluIGNzc0hvb2tz
Ci0gICAgICAgIE1hdGgubWF4KCAwLCBtYXRjaGVzWyAyIF0gLSAoIHN1YnRyYWN0IHx8IDAgKSAp
ICsgKCBtYXRjaGVzWyAzIF0gfHwgInB4IiApIDoKLSAgICAgICAgdmFsdWU7Ci19Ci0KLWZ1bmN0
aW9uIGF1Z21lbnRXaWR0aE9ySGVpZ2h0KCBlbGVtLCBuYW1lLCBleHRyYSwgaXNCb3JkZXJCb3gs
IHN0eWxlcyApIHsKLSAgICB2YXIgaSA9IGV4dHJhID09PSAoIGlzQm9yZGVyQm94ID8gImJvcmRl
ciIgOiAiY29udGVudCIgKSA/Ci0KLSAgICAgICAgLy8gSWYgd2UgYWxyZWFkeSBoYXZlIHRoZSBy
aWdodCBtZWFzdXJlbWVudCwgYXZvaWQgYXVnbWVudGF0aW9uCi0gICAgICAgIDQgOgotCi0gICAg
ICAgIC8vIE90aGVyd2lzZSBpbml0aWFsaXplIGZvciBob3Jpem9udGFsIG9yIHZlcnRpY2FsIHBy
b3BlcnRpZXMKLSAgICAgICAgbmFtZSA9PT0gIndpZHRoIiA/IDEgOiAwLAotCi0gICAgICAgIHZh
bCA9IDA7Ci0KLSAgICBmb3IgKCA7IGkgPCA0OyBpICs9IDIgKSB7Ci0KLSAgICAgICAgLy8gQm90
aCBib3ggbW9kZWxzIGV4Y2x1ZGUgbWFyZ2luLCBzbyBhZGQgaXQgaWYgd2Ugd2FudCBpdAotICAg
ICAgICBpZiAoIGV4dHJhID09PSAibWFyZ2luIiApIHsKLSAgICAgICAgICAgIHZhbCArPSBqUXVl
cnkuY3NzKCBlbGVtLCBleHRyYSArIGNzc0V4cGFuZFsgaSBdLCB0cnVlLCBzdHlsZXMgKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmICggaXNCb3JkZXJCb3ggKSB7Ci0KLSAgICAgICAgICAgIC8v
IGJvcmRlci1ib3ggaW5jbHVkZXMgcGFkZGluZywgc28gcmVtb3ZlIGl0IGlmIHdlIHdhbnQgY29u
dGVudAotICAgICAgICAgICAgaWYgKCBleHRyYSA9PT0gImNvbnRlbnQiICkgewotICAgICAgICAg
ICAgICAgIHZhbCAtPSBqUXVlcnkuY3NzKCBlbGVtLCAicGFkZGluZyIgKyBjc3NFeHBhbmRbIGkg
XSwgdHJ1ZSwgc3R5bGVzICk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIEF0IHRo
aXMgcG9pbnQsIGV4dHJhIGlzbid0IGJvcmRlciBub3IgbWFyZ2luLCBzbyByZW1vdmUgYm9yZGVy
Ci0gICAgICAgICAgICBpZiAoIGV4dHJhICE9PSAibWFyZ2luIiApIHsKLSAgICAgICAgICAgICAg
ICB2YWwgLT0galF1ZXJ5LmNzcyggZWxlbSwgImJvcmRlciIgKyBjc3NFeHBhbmRbIGkgXSArICJX
aWR0aCIsIHRydWUsIHN0eWxlcyApOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2Ugewot
Ci0gICAgICAgICAgICAvLyBBdCB0aGlzIHBvaW50LCBleHRyYSBpc24ndCBjb250ZW50LCBzbyBh
ZGQgcGFkZGluZwotICAgICAgICAgICAgdmFsICs9IGpRdWVyeS5jc3MoIGVsZW0sICJwYWRkaW5n
IiArIGNzc0V4cGFuZFsgaSBdLCB0cnVlLCBzdHlsZXMgKTsKLQotICAgICAgICAgICAgLy8gQXQg
dGhpcyBwb2ludCwgZXh0cmEgaXNuJ3QgY29udGVudCBub3IgcGFkZGluZywgc28gYWRkIGJvcmRl
cgotICAgICAgICAgICAgaWYgKCBleHRyYSAhPT0gInBhZGRpbmciICkgewotICAgICAgICAgICAg
ICAgIHZhbCArPSBqUXVlcnkuY3NzKCBlbGVtLCAiYm9yZGVyIiArIGNzc0V4cGFuZFsgaSBdICsg
IldpZHRoIiwgdHJ1ZSwgc3R5bGVzICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICByZXR1cm4gdmFsOwotfQotCi1mdW5jdGlvbiBnZXRXaWR0aE9ySGVpZ2h0KCBlbGVt
LCBuYW1lLCBleHRyYSApIHsKLQotICAgIC8vIFN0YXJ0IHdpdGggb2Zmc2V0IHByb3BlcnR5LCB3
aGljaCBpcyBlcXVpdmFsZW50IHRvIHRoZSBib3JkZXItYm94IHZhbHVlCi0gICAgdmFyIHZhbHVl
SXNCb3JkZXJCb3ggPSB0cnVlLAotICAgICAgICB2YWwgPSBuYW1lID09PSAid2lkdGgiID8gZWxl
bS5vZmZzZXRXaWR0aCA6IGVsZW0ub2Zmc2V0SGVpZ2h0LAotICAgICAgICBzdHlsZXMgPSBnZXRT
dHlsZXMoIGVsZW0gKSwKLSAgICAgICAgaXNCb3JkZXJCb3ggPSBqUXVlcnkuY3NzKCBlbGVtLCAi
Ym94U2l6aW5nIiwgZmFsc2UsIHN0eWxlcyApID09PSAiYm9yZGVyLWJveCI7Ci0KLSAgICAvLyBT
b21lIG5vbi1odG1sIGVsZW1lbnRzIHJldHVybiB1bmRlZmluZWQgZm9yIG9mZnNldFdpZHRoLCBz
byBjaGVjayBmb3IgbnVsbC91bmRlZmluZWQKLSAgICAvLyBzdmcgLSBodHRwczovL2J1Z3ppbGxh
Lm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD02NDkyODUKLSAgICAvLyBNYXRoTUwgLSBodHRw
czovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD00OTE2NjgKLSAgICBpZiAo
IHZhbCA8PSAwIHx8IHZhbCA9PSBudWxsICkgewotCi0gICAgICAgIC8vIEZhbGwgYmFjayB0byBj
b21wdXRlZCB0aGVuIHVuY29tcHV0ZWQgY3NzIGlmIG5lY2Vzc2FyeQotICAgICAgICB2YWwgPSBj
dXJDU1MoIGVsZW0sIG5hbWUsIHN0eWxlcyApOwotICAgICAgICBpZiAoIHZhbCA8IDAgfHwgdmFs
ID09IG51bGwgKSB7Ci0gICAgICAgICAgICB2YWwgPSBlbGVtLnN0eWxlWyBuYW1lIF07Ci0gICAg
ICAgIH0KLQotICAgICAgICAvLyBDb21wdXRlZCB1bml0IGlzIG5vdCBwaXhlbHMuIFN0b3AgaGVy
ZSBhbmQgcmV0dXJuLgotICAgICAgICBpZiAoIHJudW1ub25weC50ZXN0KCB2YWwgKSApIHsKLSAg
ICAgICAgICAgIHJldHVybiB2YWw7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBDaGVjayBmb3Ig
c3R5bGUgaW4gY2FzZSBhIGJyb3dzZXIgd2hpY2ggcmV0dXJucyB1bnJlbGlhYmxlIHZhbHVlcwot
ICAgICAgICAvLyBmb3IgZ2V0Q29tcHV0ZWRTdHlsZSBzaWxlbnRseSBmYWxscyBiYWNrIHRvIHRo
ZSByZWxpYWJsZSBlbGVtLnN0eWxlCi0gICAgICAgIHZhbHVlSXNCb3JkZXJCb3ggPSBpc0JvcmRl
ckJveCAmJgotICAgICAgICAgICAgKCBzdXBwb3J0LmJveFNpemluZ1JlbGlhYmxlKCkgfHwgdmFs
ID09PSBlbGVtLnN0eWxlWyBuYW1lIF0gKTsKLQotICAgICAgICAvLyBOb3JtYWxpemUgIiIsIGF1
dG8sIGFuZCBwcmVwYXJlIGZvciBleHRyYQotICAgICAgICB2YWwgPSBwYXJzZUZsb2F0KCB2YWwg
KSB8fCAwOwotICAgIH0KLQotICAgIC8vIFVzZSB0aGUgYWN0aXZlIGJveC1zaXppbmcgbW9kZWwg
dG8gYWRkL3N1YnRyYWN0IGlycmVsZXZhbnQgc3R5bGVzCi0gICAgcmV0dXJuICggdmFsICsKLSAg
ICAgICAgYXVnbWVudFdpZHRoT3JIZWlnaHQoCi0gICAgICAgICAgICBlbGVtLAotICAgICAgICAg
ICAgbmFtZSwKLSAgICAgICAgICAgIGV4dHJhIHx8ICggaXNCb3JkZXJCb3ggPyAiYm9yZGVyIiA6
ICJjb250ZW50IiApLAotICAgICAgICAgICAgdmFsdWVJc0JvcmRlckJveCwKLSAgICAgICAgICAg
IHN0eWxlcwotICAgICAgICApCi0gICAgKSArICJweCI7Ci19Ci0KLWZ1bmN0aW9uIHNob3dIaWRl
KCBlbGVtZW50cywgc2hvdyApIHsKLSAgICB2YXIgZGlzcGxheSwgZWxlbSwgaGlkZGVuLAotICAg
ICAgICB2YWx1ZXMgPSBbXSwKLSAgICAgICAgaW5kZXggPSAwLAotICAgICAgICBsZW5ndGggPSBl
bGVtZW50cy5sZW5ndGg7Ci0KLSAgICBmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkg
ewotICAgICAgICBlbGVtID0gZWxlbWVudHNbIGluZGV4IF07Ci0gICAgICAgIGlmICggIWVsZW0u
c3R5bGUgKSB7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHZh
bHVlc1sgaW5kZXggXSA9IGRhdGFQcml2LmdldCggZWxlbSwgIm9sZGRpc3BsYXkiICk7Ci0gICAg
ICAgIGRpc3BsYXkgPSBlbGVtLnN0eWxlLmRpc3BsYXk7Ci0gICAgICAgIGlmICggc2hvdyApIHsK
LQotICAgICAgICAgICAgLy8gUmVzZXQgdGhlIGlubGluZSBkaXNwbGF5IG9mIHRoaXMgZWxlbWVu
dCB0byBsZWFybiBpZiBpdCBpcwotICAgICAgICAgICAgLy8gYmVpbmcgaGlkZGVuIGJ5IGNhc2Nh
ZGVkIHJ1bGVzIG9yIG5vdAotICAgICAgICAgICAgaWYgKCAhdmFsdWVzWyBpbmRleCBdICYmIGRp
c3BsYXkgPT09ICJub25lIiApIHsKLSAgICAgICAgICAgICAgICBlbGVtLnN0eWxlLmRpc3BsYXkg
PSAiIjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gU2V0IGVsZW1lbnRzIHdoaWNo
IGhhdmUgYmVlbiBvdmVycmlkZGVuIHdpdGggZGlzcGxheTogbm9uZQotICAgICAgICAgICAgLy8g
aW4gYSBzdHlsZXNoZWV0IHRvIHdoYXRldmVyIHRoZSBkZWZhdWx0IGJyb3dzZXIgc3R5bGUgaXMK
LSAgICAgICAgICAgIC8vIGZvciBzdWNoIGFuIGVsZW1lbnQKLSAgICAgICAgICAgIGlmICggZWxl
bS5zdHlsZS5kaXNwbGF5ID09PSAiIiAmJiBpc0hpZGRlbiggZWxlbSApICkgewotICAgICAgICAg
ICAgICAgIHZhbHVlc1sgaW5kZXggXSA9IGRhdGFQcml2LmFjY2VzcygKLSAgICAgICAgICAgICAg
ICAgICAgZWxlbSwKLSAgICAgICAgICAgICAgICAgICAgIm9sZGRpc3BsYXkiLAotICAgICAgICAg
ICAgICAgICAgICBkZWZhdWx0RGlzcGxheSggZWxlbS5ub2RlTmFtZSApCi0gICAgICAgICAgICAg
ICAgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGhpZGRl
biA9IGlzSGlkZGVuKCBlbGVtICk7Ci0KLSAgICAgICAgICAgIGlmICggZGlzcGxheSAhPT0gIm5v
bmUiIHx8ICFoaWRkZW4gKSB7Ci0gICAgICAgICAgICAgICAgZGF0YVByaXYuc2V0KAotICAgICAg
ICAgICAgICAgICAgICBlbGVtLAotICAgICAgICAgICAgICAgICAgICAib2xkZGlzcGxheSIsCi0g
ICAgICAgICAgICAgICAgICAgIGhpZGRlbiA/IGRpc3BsYXkgOiBqUXVlcnkuY3NzKCBlbGVtLCAi
ZGlzcGxheSIgKQotICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICAvLyBTZXQgdGhlIGRpc3BsYXkgb2YgbW9zdCBvZiB0aGUgZWxlbWVudHMg
aW4gYSBzZWNvbmQgbG9vcAotICAgIC8vIHRvIGF2b2lkIHRoZSBjb25zdGFudCByZWZsb3cKLSAg
ICBmb3IgKCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkgewotICAgICAgICBl
bGVtID0gZWxlbWVudHNbIGluZGV4IF07Ci0gICAgICAgIGlmICggIWVsZW0uc3R5bGUgKSB7Ci0g
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoICFzaG93IHx8IGVs
ZW0uc3R5bGUuZGlzcGxheSA9PT0gIm5vbmUiIHx8IGVsZW0uc3R5bGUuZGlzcGxheSA9PT0gIiIg
KSB7Ci0gICAgICAgICAgICBlbGVtLnN0eWxlLmRpc3BsYXkgPSBzaG93ID8gdmFsdWVzWyBpbmRl
eCBdIHx8ICIiIDogIm5vbmUiOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGVsZW1l
bnRzOwotfQotCi1qUXVlcnkuZXh0ZW5kKCB7Ci0KLSAgICAvLyBBZGQgaW4gc3R5bGUgcHJvcGVy
dHkgaG9va3MgZm9yIG92ZXJyaWRpbmcgdGhlIGRlZmF1bHQKLSAgICAvLyBiZWhhdmlvciBvZiBn
ZXR0aW5nIGFuZCBzZXR0aW5nIGEgc3R5bGUgcHJvcGVydHkKLSAgICBjc3NIb29rczogewotICAg
ICAgICBvcGFjaXR5OiB7Ci0gICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRl
ZCApIHsKLSAgICAgICAgICAgICAgICBpZiAoIGNvbXB1dGVkICkgewotCi0gICAgICAgICAgICAg
ICAgICAgIC8vIFdlIHNob3VsZCBhbHdheXMgZ2V0IGEgbnVtYmVyIGJhY2sgZnJvbSBvcGFjaXR5
Ci0gICAgICAgICAgICAgICAgICAgIHZhciByZXQgPSBjdXJDU1MoIGVsZW0sICJvcGFjaXR5IiAp
OwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0ID09PSAiIiA/ICIxIiA6IHJldDsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAg
Ly8gRG9uJ3QgYXV0b21hdGljYWxseSBhZGQgInB4IiB0byB0aGVzZSBwb3NzaWJseS11bml0bGVz
cyBwcm9wZXJ0aWVzCi0gICAgY3NzTnVtYmVyOiB7Ci0gICAgICAgICJhbmltYXRpb25JdGVyYXRp
b25Db3VudCI6IHRydWUsCi0gICAgICAgICJjb2x1bW5Db3VudCI6IHRydWUsCi0gICAgICAgICJm
aWxsT3BhY2l0eSI6IHRydWUsCi0gICAgICAgICJmbGV4R3JvdyI6IHRydWUsCi0gICAgICAgICJm
bGV4U2hyaW5rIjogdHJ1ZSwKLSAgICAgICAgImZvbnRXZWlnaHQiOiB0cnVlLAotICAgICAgICAi
bGluZUhlaWdodCI6IHRydWUsCi0gICAgICAgICJvcGFjaXR5IjogdHJ1ZSwKLSAgICAgICAgIm9y
ZGVyIjogdHJ1ZSwKLSAgICAgICAgIm9ycGhhbnMiOiB0cnVlLAotICAgICAgICAid2lkb3dzIjog
dHJ1ZSwKLSAgICAgICAgInpJbmRleCI6IHRydWUsCi0gICAgICAgICJ6b29tIjogdHJ1ZQotICAg
IH0sCi0KLSAgICAvLyBBZGQgaW4gcHJvcGVydGllcyB3aG9zZSBuYW1lcyB5b3Ugd2lzaCB0byBm
aXggYmVmb3JlCi0gICAgLy8gc2V0dGluZyBvciBnZXR0aW5nIHRoZSB2YWx1ZQotICAgIGNzc1By
b3BzOiB7Ci0gICAgICAgICJmbG9hdCI6ICJjc3NGbG9hdCIKLSAgICB9LAotCi0gICAgLy8gR2V0
IGFuZCBzZXQgdGhlIHN0eWxlIHByb3BlcnR5IG9uIGEgRE9NIE5vZGUKLSAgICBzdHlsZTogZnVu
Y3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlLCBleHRyYSApIHsKLQotICAgICAgICAvLyBEb24ndCBz
ZXQgc3R5bGVzIG9uIHRleHQgYW5kIGNvbW1lbnQgbm9kZXMKLSAgICAgICAgaWYgKCAhZWxlbSB8
fCBlbGVtLm5vZGVUeXBlID09PSAzIHx8IGVsZW0ubm9kZVR5cGUgPT09IDggfHwgIWVsZW0uc3R5
bGUgKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBNYWtl
IHN1cmUgdGhhdCB3ZSdyZSB3b3JraW5nIHdpdGggdGhlIHJpZ2h0IG5hbWUKLSAgICAgICAgdmFy
IHJldCwgdHlwZSwgaG9va3MsCi0gICAgICAgICAgICBvcmlnTmFtZSA9IGpRdWVyeS5jYW1lbENh
c2UoIG5hbWUgKSwKLSAgICAgICAgICAgIHN0eWxlID0gZWxlbS5zdHlsZTsKLQotICAgICAgICBu
YW1lID0galF1ZXJ5LmNzc1Byb3BzWyBvcmlnTmFtZSBdIHx8Ci0gICAgICAgICAgICAoIGpRdWVy
eS5jc3NQcm9wc1sgb3JpZ05hbWUgXSA9IHZlbmRvclByb3BOYW1lKCBvcmlnTmFtZSApIHx8IG9y
aWdOYW1lICk7Ci0KLSAgICAgICAgLy8gR2V0cyBob29rIGZvciB0aGUgcHJlZml4ZWQgdmVyc2lv
biwgdGhlbiB1bnByZWZpeGVkIHZlcnNpb24KLSAgICAgICAgaG9va3MgPSBqUXVlcnkuY3NzSG9v
a3NbIG5hbWUgXSB8fCBqUXVlcnkuY3NzSG9va3NbIG9yaWdOYW1lIF07Ci0KLSAgICAgICAgLy8g
Q2hlY2sgaWYgd2UncmUgc2V0dGluZyBhIHZhbHVlCi0gICAgICAgIGlmICggdmFsdWUgIT09IHVu
ZGVmaW5lZCApIHsKLSAgICAgICAgICAgIHR5cGUgPSB0eXBlb2YgdmFsdWU7Ci0KLSAgICAgICAg
ICAgIC8vIENvbnZlcnQgIis9IiBvciAiLT0iIHRvIHJlbGF0aXZlIG51bWJlcnMgKCM3MzQ1KQot
ICAgICAgICAgICAgaWYgKCB0eXBlID09PSAic3RyaW5nIiAmJiAoIHJldCA9IHJjc3NOdW0uZXhl
YyggdmFsdWUgKSApICYmIHJldFsgMSBdICkgewotICAgICAgICAgICAgICAgIHZhbHVlID0gYWRq
dXN0Q1NTKCBlbGVtLCBuYW1lLCByZXQgKTsKLQotICAgICAgICAgICAgICAgIC8vIEZpeGVzIGJ1
ZyAjOTIzNwotICAgICAgICAgICAgICAgIHR5cGUgPSAibnVtYmVyIjsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgbnVsbCBhbmQgTmFOIHZhbHVlcyBhcmVu
J3Qgc2V0ICgjNzExNikKLSAgICAgICAgICAgIGlmICggdmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSAh
PT0gdmFsdWUgKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAvLyBJZiBhIG51bWJlciB3YXMgcGFzc2VkIGluLCBhZGQgdGhlIHVuaXQgKGV4
Y2VwdCBmb3IgY2VydGFpbiBDU1MgcHJvcGVydGllcykKLSAgICAgICAgICAgIGlmICggdHlwZSA9
PT0gIm51bWJlciIgKSB7Ci0gICAgICAgICAgICAgICAgdmFsdWUgKz0gcmV0ICYmIHJldFsgMyBd
IHx8ICggalF1ZXJ5LmNzc051bWJlclsgb3JpZ05hbWUgXSA/ICIiIDogInB4IiApOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAvLyBTdXBwb3J0OiBJRTktMTErCi0gICAgICAgICAgICAv
LyBiYWNrZ3JvdW5kLSogcHJvcHMgYWZmZWN0IG9yaWdpbmFsIGNsb25lJ3MgdmFsdWVzCi0gICAg
ICAgICAgICBpZiAoICFzdXBwb3J0LmNsZWFyQ2xvbmVTdHlsZSAmJiB2YWx1ZSA9PT0gIiIgJiYg
bmFtZS5pbmRleE9mKCAiYmFja2dyb3VuZCIgKSA9PT0gMCApIHsKLSAgICAgICAgICAgICAgICBz
dHlsZVsgbmFtZSBdID0gImluaGVyaXQiOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAv
LyBJZiBhIGhvb2sgd2FzIHByb3ZpZGVkLCB1c2UgdGhhdCB2YWx1ZSwgb3RoZXJ3aXNlIGp1c3Qg
c2V0IHRoZSBzcGVjaWZpZWQgdmFsdWUKLSAgICAgICAgICAgIGlmICggIWhvb2tzIHx8ICEoICJz
ZXQiIGluIGhvb2tzICkgfHwKLSAgICAgICAgICAgICAgICAoIHZhbHVlID0gaG9va3Muc2V0KCBl
bGVtLCB2YWx1ZSwgZXh0cmEgKSApICE9PSB1bmRlZmluZWQgKSB7Ci0KLSAgICAgICAgICAgICAg
ICBzdHlsZVsgbmFtZSBdID0gdmFsdWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgfSBlbHNl
IHsKLQotICAgICAgICAgICAgLy8gSWYgYSBob29rIHdhcyBwcm92aWRlZCBnZXQgdGhlIG5vbi1j
b21wdXRlZCB2YWx1ZSBmcm9tIHRoZXJlCi0gICAgICAgICAgICBpZiAoIGhvb2tzICYmICJnZXQi
IGluIGhvb2tzICYmCi0gICAgICAgICAgICAgICAgKCByZXQgPSBob29rcy5nZXQoIGVsZW0sIGZh
bHNlLCBleHRyYSApICkgIT09IHVuZGVmaW5lZCApIHsKLQotICAgICAgICAgICAgICAgIHJldHVy
biByZXQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIE90aGVyd2lzZSBqdXN0IGdl
dCB0aGUgdmFsdWUgZnJvbSB0aGUgc3R5bGUgb2JqZWN0Ci0gICAgICAgICAgICByZXR1cm4gc3R5
bGVbIG5hbWUgXTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICBjc3M6IGZ1bmN0aW9uKCBlbGVt
LCBuYW1lLCBleHRyYSwgc3R5bGVzICkgewotICAgICAgICB2YXIgdmFsLCBudW0sIGhvb2tzLAot
ICAgICAgICAgICAgb3JpZ05hbWUgPSBqUXVlcnkuY2FtZWxDYXNlKCBuYW1lICk7Ci0KLSAgICAg
ICAgLy8gTWFrZSBzdXJlIHRoYXQgd2UncmUgd29ya2luZyB3aXRoIHRoZSByaWdodCBuYW1lCi0g
ICAgICAgIG5hbWUgPSBqUXVlcnkuY3NzUHJvcHNbIG9yaWdOYW1lIF0gfHwKLSAgICAgICAgICAg
ICggalF1ZXJ5LmNzc1Byb3BzWyBvcmlnTmFtZSBdID0gdmVuZG9yUHJvcE5hbWUoIG9yaWdOYW1l
ICkgfHwgb3JpZ05hbWUgKTsKLQotICAgICAgICAvLyBUcnkgcHJlZml4ZWQgbmFtZSBmb2xsb3dl
ZCBieSB0aGUgdW5wcmVmaXhlZCBuYW1lCi0gICAgICAgIGhvb2tzID0galF1ZXJ5LmNzc0hvb2tz
WyBuYW1lIF0gfHwgalF1ZXJ5LmNzc0hvb2tzWyBvcmlnTmFtZSBdOwotCi0gICAgICAgIC8vIElm
IGEgaG9vayB3YXMgcHJvdmlkZWQgZ2V0IHRoZSBjb21wdXRlZCB2YWx1ZSBmcm9tIHRoZXJlCi0g
ICAgICAgIGlmICggaG9va3MgJiYgImdldCIgaW4gaG9va3MgKSB7Ci0gICAgICAgICAgICB2YWwg
PSBob29rcy5nZXQoIGVsZW0sIHRydWUsIGV4dHJhICk7Ci0gICAgICAgIH0KLQotICAgICAgICAv
LyBPdGhlcndpc2UsIGlmIGEgd2F5IHRvIGdldCB0aGUgY29tcHV0ZWQgdmFsdWUgZXhpc3RzLCB1
c2UgdGhhdAotICAgICAgICBpZiAoIHZhbCA9PT0gdW5kZWZpbmVkICkgewotICAgICAgICAgICAg
dmFsID0gY3VyQ1NTKCBlbGVtLCBuYW1lLCBzdHlsZXMgKTsKLSAgICAgICAgfQotCi0gICAgICAg
IC8vIENvbnZlcnQgIm5vcm1hbCIgdG8gY29tcHV0ZWQgdmFsdWUKLSAgICAgICAgaWYgKCB2YWwg
PT09ICJub3JtYWwiICYmIG5hbWUgaW4gY3NzTm9ybWFsVHJhbnNmb3JtICkgewotICAgICAgICAg
ICAgdmFsID0gY3NzTm9ybWFsVHJhbnNmb3JtWyBuYW1lIF07Ci0gICAgICAgIH0KLQotICAgICAg
ICAvLyBNYWtlIG51bWVyaWMgaWYgZm9yY2VkIG9yIGEgcXVhbGlmaWVyIHdhcyBwcm92aWRlZCBh
bmQgdmFsIGxvb2tzIG51bWVyaWMKLSAgICAgICAgaWYgKCBleHRyYSA9PT0gIiIgfHwgZXh0cmEg
KSB7Ci0gICAgICAgICAgICBudW0gPSBwYXJzZUZsb2F0KCB2YWwgKTsKLSAgICAgICAgICAgIHJl
dHVybiBleHRyYSA9PT0gdHJ1ZSB8fCBpc0Zpbml0ZSggbnVtICkgPyBudW0gfHwgMCA6IHZhbDsK
LSAgICAgICAgfQotICAgICAgICByZXR1cm4gdmFsOwotICAgIH0KLX0gKTsKLQotalF1ZXJ5LmVh
Y2goIFsgImhlaWdodCIsICJ3aWR0aCIgXSwgZnVuY3Rpb24oIGksIG5hbWUgKSB7Ci0gICAgalF1
ZXJ5LmNzc0hvb2tzWyBuYW1lIF0gPSB7Ci0gICAgICAgIGdldDogZnVuY3Rpb24oIGVsZW0sIGNv
bXB1dGVkLCBleHRyYSApIHsKLSAgICAgICAgICAgIGlmICggY29tcHV0ZWQgKSB7Ci0KLSAgICAg
ICAgICAgICAgICAvLyBDZXJ0YWluIGVsZW1lbnRzIGNhbiBoYXZlIGRpbWVuc2lvbiBpbmZvIGlm
IHdlIGludmlzaWJseSBzaG93IHRoZW0KLSAgICAgICAgICAgICAgICAvLyBidXQgaXQgbXVzdCBo
YXZlIGEgY3VycmVudCBkaXNwbGF5IHN0eWxlIHRoYXQgd291bGQgYmVuZWZpdAotICAgICAgICAg
ICAgICAgIHJldHVybiByZGlzcGxheXN3YXAudGVzdCggalF1ZXJ5LmNzcyggZWxlbSwgImRpc3Bs
YXkiICkgKSAmJgotICAgICAgICAgICAgICAgICAgICBlbGVtLm9mZnNldFdpZHRoID09PSAwID8K
LSAgICAgICAgICAgICAgICAgICAgICAgIHN3YXAoIGVsZW0sIGNzc1Nob3csIGZ1bmN0aW9uKCkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXRXaWR0aE9ySGVpZ2h0KCBl
bGVtLCBuYW1lLCBleHRyYSApOwotICAgICAgICAgICAgICAgICAgICAgICAgfSApIDoKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGdldFdpZHRoT3JIZWlnaHQoIGVsZW0sIG5hbWUsIGV4dHJhICk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0sCi0KLSAgICAgICAgc2V0OiBmdW5jdGlvbiggZWxl
bSwgdmFsdWUsIGV4dHJhICkgewotICAgICAgICAgICAgdmFyIG1hdGNoZXMsCi0gICAgICAgICAg
ICAgICAgc3R5bGVzID0gZXh0cmEgJiYgZ2V0U3R5bGVzKCBlbGVtICksCi0gICAgICAgICAgICAg
ICAgc3VidHJhY3QgPSBleHRyYSAmJiBhdWdtZW50V2lkdGhPckhlaWdodCgKLSAgICAgICAgICAg
ICAgICAgICAgZWxlbSwKLSAgICAgICAgICAgICAgICAgICAgbmFtZSwKLSAgICAgICAgICAgICAg
ICAgICAgZXh0cmEsCi0gICAgICAgICAgICAgICAgICAgIGpRdWVyeS5jc3MoIGVsZW0sICJib3hT
aXppbmciLCBmYWxzZSwgc3R5bGVzICkgPT09ICJib3JkZXItYm94IiwKLSAgICAgICAgICAgICAg
ICAgICAgc3R5bGVzCi0gICAgICAgICAgICAgICAgKTsKLQotICAgICAgICAgICAgLy8gQ29udmVy
dCB0byBwaXhlbHMgaWYgdmFsdWUgYWRqdXN0bWVudCBpcyBuZWVkZWQKLSAgICAgICAgICAgIGlm
ICggc3VidHJhY3QgJiYgKCBtYXRjaGVzID0gcmNzc051bS5leGVjKCB2YWx1ZSApICkgJiYKLSAg
ICAgICAgICAgICAgICAoIG1hdGNoZXNbIDMgXSB8fCAicHgiICkgIT09ICJweCIgKSB7Ci0KLSAg
ICAgICAgICAgICAgICBlbGVtLnN0eWxlWyBuYW1lIF0gPSB2YWx1ZTsKLSAgICAgICAgICAgICAg
ICB2YWx1ZSA9IGpRdWVyeS5jc3MoIGVsZW0sIG5hbWUgKTsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgcmV0dXJuIHNldFBvc2l0aXZlTnVtYmVyKCBlbGVtLCB2YWx1ZSwgc3VidHJhY3Qg
KTsKLSAgICAgICAgfQotICAgIH07Ci19ICk7Ci0KLWpRdWVyeS5jc3NIb29rcy5tYXJnaW5MZWZ0
ID0gYWRkR2V0SG9va0lmKCBzdXBwb3J0LnJlbGlhYmxlTWFyZ2luTGVmdCwKLSAgICBmdW5jdGlv
biggZWxlbSwgY29tcHV0ZWQgKSB7Ci0gICAgICAgIGlmICggY29tcHV0ZWQgKSB7Ci0gICAgICAg
ICAgICByZXR1cm4gKCBwYXJzZUZsb2F0KCBjdXJDU1MoIGVsZW0sICJtYXJnaW5MZWZ0IiApICkg
fHwKLSAgICAgICAgICAgICAgICBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgLQot
ICAgICAgICAgICAgICAgICAgICBzd2FwKCBlbGVtLCB7IG1hcmdpbkxlZnQ6IDAgfSwgZnVuY3Rp
b24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbS5nZXRCb3VuZGluZ0Ns
aWVudFJlY3QoKS5sZWZ0OwotICAgICAgICAgICAgICAgICAgICB9ICkKLSAgICAgICAgICAgICAg
ICApICsgInB4IjsKLSAgICAgICAgfQotICAgIH0KLSk7Ci0KLS8vIFN1cHBvcnQ6IEFuZHJvaWQg
Mi4zCi1qUXVlcnkuY3NzSG9va3MubWFyZ2luUmlnaHQgPSBhZGRHZXRIb29rSWYoIHN1cHBvcnQu
cmVsaWFibGVNYXJnaW5SaWdodCwKLSAgICBmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7Ci0g
ICAgICAgIGlmICggY29tcHV0ZWQgKSB7Ci0gICAgICAgICAgICByZXR1cm4gc3dhcCggZWxlbSwg
eyAiZGlzcGxheSI6ICJpbmxpbmUtYmxvY2siIH0sCi0gICAgICAgICAgICAgICAgY3VyQ1NTLCBb
IGVsZW0sICJtYXJnaW5SaWdodCIgXSApOwotICAgICAgICB9Ci0gICAgfQotKTsKLQotLy8gVGhl
c2UgaG9va3MgYXJlIHVzZWQgYnkgYW5pbWF0ZSB0byBleHBhbmQgcHJvcGVydGllcwotalF1ZXJ5
LmVhY2goIHsKLSAgICBtYXJnaW46ICIiLAotICAgIHBhZGRpbmc6ICIiLAotICAgIGJvcmRlcjog
IldpZHRoIgotfSwgZnVuY3Rpb24oIHByZWZpeCwgc3VmZml4ICkgewotICAgIGpRdWVyeS5jc3NI
b29rc1sgcHJlZml4ICsgc3VmZml4IF0gPSB7Ci0gICAgICAgIGV4cGFuZDogZnVuY3Rpb24oIHZh
bHVlICkgewotICAgICAgICAgICAgdmFyIGkgPSAwLAotICAgICAgICAgICAgICAgIGV4cGFuZGVk
ID0ge30sCi0KLSAgICAgICAgICAgICAgICAvLyBBc3N1bWVzIGEgc2luZ2xlIG51bWJlciBpZiBu
b3QgYSBzdHJpbmcKLSAgICAgICAgICAgICAgICBwYXJ0cyA9IHR5cGVvZiB2YWx1ZSA9PT0gInN0
cmluZyIgPyB2YWx1ZS5zcGxpdCggIiAiICkgOiBbIHZhbHVlIF07Ci0KLSAgICAgICAgICAgIGZv
ciAoIDsgaSA8IDQ7IGkrKyApIHsKLSAgICAgICAgICAgICAgICBleHBhbmRlZFsgcHJlZml4ICsg
Y3NzRXhwYW5kWyBpIF0gKyBzdWZmaXggXSA9Ci0gICAgICAgICAgICAgICAgICAgIHBhcnRzWyBp
IF0gfHwgcGFydHNbIGkgLSAyIF0gfHwgcGFydHNbIDAgXTsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgcmV0dXJuIGV4cGFuZGVkOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIGlmICgg
IXJtYXJnaW4udGVzdCggcHJlZml4ICkgKSB7Ci0gICAgICAgIGpRdWVyeS5jc3NIb29rc1sgcHJl
Zml4ICsgc3VmZml4IF0uc2V0ID0gc2V0UG9zaXRpdmVOdW1iZXI7Ci0gICAgfQotfSApOwotCi1q
UXVlcnkuZm4uZXh0ZW5kKCB7Ci0gICAgY3NzOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7Ci0g
ICAgICAgIHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSAp
IHsKLSAgICAgICAgICAgIHZhciBzdHlsZXMsIGxlbiwKLSAgICAgICAgICAgICAgICBtYXAgPSB7
fSwKLSAgICAgICAgICAgICAgICBpID0gMDsKLQotICAgICAgICAgICAgaWYgKCBqUXVlcnkuaXNB
cnJheSggbmFtZSApICkgewotICAgICAgICAgICAgICAgIHN0eWxlcyA9IGdldFN0eWxlcyggZWxl
bSApOwotICAgICAgICAgICAgICAgIGxlbiA9IG5hbWUubGVuZ3RoOwotCi0gICAgICAgICAgICAg
ICAgZm9yICggOyBpIDwgbGVuOyBpKysgKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1hcFsgbmFt
ZVsgaSBdIF0gPSBqUXVlcnkuY3NzKCBlbGVtLCBuYW1lWyBpIF0sIGZhbHNlLCBzdHlsZXMgKTsK
LSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gbWFwOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCA/Ci0gICAg
ICAgICAgICAgICAgalF1ZXJ5LnN0eWxlKCBlbGVtLCBuYW1lLCB2YWx1ZSApIDoKLSAgICAgICAg
ICAgICAgICBqUXVlcnkuY3NzKCBlbGVtLCBuYW1lICk7Ci0gICAgICAgIH0sIG5hbWUsIHZhbHVl
LCBhcmd1bWVudHMubGVuZ3RoID4gMSApOwotICAgIH0sCi0gICAgc2hvdzogZnVuY3Rpb24oKSB7
Ci0gICAgICAgIHJldHVybiBzaG93SGlkZSggdGhpcywgdHJ1ZSApOwotICAgIH0sCi0gICAgaGlk
ZTogZnVuY3Rpb24oKSB7Ci0gICAgICAgIHJldHVybiBzaG93SGlkZSggdGhpcyApOwotICAgIH0s
Ci0gICAgdG9nZ2xlOiBmdW5jdGlvbiggc3RhdGUgKSB7Ci0gICAgICAgIGlmICggdHlwZW9mIHN0
YXRlID09PSAiYm9vbGVhbiIgKSB7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGUgPyB0aGlzLnNo
b3coKSA6IHRoaXMuaGlkZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHRoaXMuZWFj
aCggZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICBpZiAoIGlzSGlkZGVuKCB0aGlzICkgKSB7Ci0g
ICAgICAgICAgICAgICAgalF1ZXJ5KCB0aGlzICkuc2hvdygpOwotICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICBqUXVlcnkoIHRoaXMgKS5oaWRlKCk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0gKTsKLSAgICB9Ci19ICk7Ci0KLQotZnVuY3Rpb24gVHdlZW4oIGVsZW0sIG9w
dGlvbnMsIHByb3AsIGVuZCwgZWFzaW5nICkgewotICAgIHJldHVybiBuZXcgVHdlZW4ucHJvdG90
eXBlLmluaXQoIGVsZW0sIG9wdGlvbnMsIHByb3AsIGVuZCwgZWFzaW5nICk7Ci19Ci1qUXVlcnku
VHdlZW4gPSBUd2VlbjsKLQotVHdlZW4ucHJvdG90eXBlID0gewotICAgIGNvbnN0cnVjdG9yOiBU
d2VlbiwKLSAgICBpbml0OiBmdW5jdGlvbiggZWxlbSwgb3B0aW9ucywgcHJvcCwgZW5kLCBlYXNp
bmcsIHVuaXQgKSB7Ci0gICAgICAgIHRoaXMuZWxlbSA9IGVsZW07Ci0gICAgICAgIHRoaXMucHJv
cCA9IHByb3A7Ci0gICAgICAgIHRoaXMuZWFzaW5nID0gZWFzaW5nIHx8IGpRdWVyeS5lYXNpbmcu
X2RlZmF1bHQ7Ci0gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7Ci0gICAgICAgIHRoaXMu
c3RhcnQgPSB0aGlzLm5vdyA9IHRoaXMuY3VyKCk7Ci0gICAgICAgIHRoaXMuZW5kID0gZW5kOwot
ICAgICAgICB0aGlzLnVuaXQgPSB1bml0IHx8ICggalF1ZXJ5LmNzc051bWJlclsgcHJvcCBdID8g
IiIgOiAicHgiICk7Ci0gICAgfSwKLSAgICBjdXI6IGZ1bmN0aW9uKCkgewotICAgICAgICB2YXIg
aG9va3MgPSBUd2Vlbi5wcm9wSG9va3NbIHRoaXMucHJvcCBdOwotCi0gICAgICAgIHJldHVybiBo
b29rcyAmJiBob29rcy5nZXQgPwotICAgICAgICAgICAgaG9va3MuZ2V0KCB0aGlzICkgOgotICAg
ICAgICAgICAgVHdlZW4ucHJvcEhvb2tzLl9kZWZhdWx0LmdldCggdGhpcyApOwotICAgIH0sCi0g
ICAgcnVuOiBmdW5jdGlvbiggcGVyY2VudCApIHsKLSAgICAgICAgdmFyIGVhc2VkLAotICAgICAg
ICAgICAgaG9va3MgPSBUd2Vlbi5wcm9wSG9va3NbIHRoaXMucHJvcCBdOwotCi0gICAgICAgIGlm
ICggdGhpcy5vcHRpb25zLmR1cmF0aW9uICkgewotICAgICAgICAgICAgdGhpcy5wb3MgPSBlYXNl
ZCA9IGpRdWVyeS5lYXNpbmdbIHRoaXMuZWFzaW5nIF0oCi0gICAgICAgICAgICAgICAgcGVyY2Vu
dCwgdGhpcy5vcHRpb25zLmR1cmF0aW9uICogcGVyY2VudCwgMCwgMSwgdGhpcy5vcHRpb25zLmR1
cmF0aW9uCi0gICAgICAgICAgICApOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdGhp
cy5wb3MgPSBlYXNlZCA9IHBlcmNlbnQ7Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy5ub3cgPSAo
IHRoaXMuZW5kIC0gdGhpcy5zdGFydCApICogZWFzZWQgKyB0aGlzLnN0YXJ0OwotCi0gICAgICAg
IGlmICggdGhpcy5vcHRpb25zLnN0ZXAgKSB7Ci0gICAgICAgICAgICB0aGlzLm9wdGlvbnMuc3Rl
cC5jYWxsKCB0aGlzLmVsZW0sIHRoaXMubm93LCB0aGlzICk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAoIGhvb2tzICYmIGhvb2tzLnNldCApIHsKLSAgICAgICAgICAgIGhvb2tzLnNldCggdGhp
cyApOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgVHdlZW4ucHJvcEhvb2tzLl9kZWZh
dWx0LnNldCggdGhpcyApOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0aGlzOwotICAgIH0K
LX07Ci0KLVR3ZWVuLnByb3RvdHlwZS5pbml0LnByb3RvdHlwZSA9IFR3ZWVuLnByb3RvdHlwZTsK
LQotVHdlZW4ucHJvcEhvb2tzID0gewotICAgIF9kZWZhdWx0OiB7Ci0gICAgICAgIGdldDogZnVu
Y3Rpb24oIHR3ZWVuICkgewotICAgICAgICAgICAgdmFyIHJlc3VsdDsKLQotICAgICAgICAgICAg
Ly8gVXNlIGEgcHJvcGVydHkgb24gdGhlIGVsZW1lbnQgZGlyZWN0bHkgd2hlbiBpdCBpcyBub3Qg
YSBET00gZWxlbWVudCwKLSAgICAgICAgICAgIC8vIG9yIHdoZW4gdGhlcmUgaXMgbm8gbWF0Y2hp
bmcgc3R5bGUgcHJvcGVydHkgdGhhdCBleGlzdHMuCi0gICAgICAgICAgICBpZiAoIHR3ZWVuLmVs
ZW0ubm9kZVR5cGUgIT09IDEgfHwKLSAgICAgICAgICAgICAgICB0d2Vlbi5lbGVtWyB0d2Vlbi5w
cm9wIF0gIT0gbnVsbCAmJiB0d2Vlbi5lbGVtLnN0eWxlWyB0d2Vlbi5wcm9wIF0gPT0gbnVsbCAp
IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBQYXNzaW5nIGFuIGVtcHR5IHN0cmluZyBhcyBh
IDNyZCBwYXJhbWV0ZXIgdG8gLmNzcyB3aWxsIGF1dG9tYXRpY2FsbHkKLSAgICAgICAgICAgIC8v
IGF0dGVtcHQgYSBwYXJzZUZsb2F0IGFuZCBmYWxsYmFjayB0byBhIHN0cmluZyBpZiB0aGUgcGFy
c2UgZmFpbHMuCi0gICAgICAgICAgICAvLyBTaW1wbGUgdmFsdWVzIHN1Y2ggYXMgIjEwcHgiIGFy
ZSBwYXJzZWQgdG8gRmxvYXQ7Ci0gICAgICAgICAgICAvLyBjb21wbGV4IHZhbHVlcyBzdWNoIGFz
ICJyb3RhdGUoMXJhZCkiIGFyZSByZXR1cm5lZCBhcy1pcy4KLSAgICAgICAgICAgIHJlc3VsdCA9
IGpRdWVyeS5jc3MoIHR3ZWVuLmVsZW0sIHR3ZWVuLnByb3AsICIiICk7Ci0KLSAgICAgICAgICAg
IC8vIEVtcHR5IHN0cmluZ3MsIG51bGwsIHVuZGVmaW5lZCBhbmQgImF1dG8iIGFyZSBjb252ZXJ0
ZWQgdG8gMC4KLSAgICAgICAgICAgIHJldHVybiAhcmVzdWx0IHx8IHJlc3VsdCA9PT0gImF1dG8i
ID8gMCA6IHJlc3VsdDsKLSAgICAgICAgfSwKLSAgICAgICAgc2V0OiBmdW5jdGlvbiggdHdlZW4g
KSB7Ci0KLSAgICAgICAgICAgIC8vIFVzZSBzdGVwIGhvb2sgZm9yIGJhY2sgY29tcGF0LgotICAg
ICAgICAgICAgLy8gVXNlIGNzc0hvb2sgaWYgaXRzIHRoZXJlLgotICAgICAgICAgICAgLy8gVXNl
IC5zdHlsZSBpZiBhdmFpbGFibGUgYW5kIHVzZSBwbGFpbiBwcm9wZXJ0aWVzIHdoZXJlIGF2YWls
YWJsZS4KLSAgICAgICAgICAgIGlmICggalF1ZXJ5LmZ4LnN0ZXBbIHR3ZWVuLnByb3AgXSApIHsK
LSAgICAgICAgICAgICAgICBqUXVlcnkuZnguc3RlcFsgdHdlZW4ucHJvcCBdKCB0d2VlbiApOwot
ICAgICAgICAgICAgfSBlbHNlIGlmICggdHdlZW4uZWxlbS5ub2RlVHlwZSA9PT0gMSAmJgotICAg
ICAgICAgICAgICAgICggdHdlZW4uZWxlbS5zdHlsZVsgalF1ZXJ5LmNzc1Byb3BzWyB0d2Vlbi5w
cm9wIF0gXSAhPSBudWxsIHx8Ci0gICAgICAgICAgICAgICAgICAgIGpRdWVyeS5jc3NIb29rc1sg
dHdlZW4ucHJvcCBdICkgKSB7Ci0gICAgICAgICAgICAgICAgalF1ZXJ5LnN0eWxlKCB0d2Vlbi5l
bGVtLCB0d2Vlbi5wcm9wLCB0d2Vlbi5ub3cgKyB0d2Vlbi51bml0ICk7Ci0gICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgIHR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXSA9IHR3ZWVu
Lm5vdzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX07Ci0KLS8vIFN1cHBvcnQ6
IElFOQotLy8gUGFuaWMgYmFzZWQgYXBwcm9hY2ggdG8gc2V0dGluZyB0aGluZ3Mgb24gZGlzY29u
bmVjdGVkIG5vZGVzCi1Ud2Vlbi5wcm9wSG9va3Muc2Nyb2xsVG9wID0gVHdlZW4ucHJvcEhvb2tz
LnNjcm9sbExlZnQgPSB7Ci0gICAgc2V0OiBmdW5jdGlvbiggdHdlZW4gKSB7Ci0gICAgICAgIGlm
ICggdHdlZW4uZWxlbS5ub2RlVHlwZSAmJiB0d2Vlbi5lbGVtLnBhcmVudE5vZGUgKSB7Ci0gICAg
ICAgICAgICB0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF0gPSB0d2Vlbi5ub3c7Ci0gICAgICAgIH0K
LSAgICB9Ci19OwotCi1qUXVlcnkuZWFzaW5nID0gewotICAgIGxpbmVhcjogZnVuY3Rpb24oIHAg
KSB7Ci0gICAgICAgIHJldHVybiBwOwotICAgIH0sCi0gICAgc3dpbmc6IGZ1bmN0aW9uKCBwICkg
ewotICAgICAgICByZXR1cm4gMC41IC0gTWF0aC5jb3MoIHAgKiBNYXRoLlBJICkgLyAyOwotICAg
IH0sCi0gICAgX2RlZmF1bHQ6ICJzd2luZyIKLX07Ci0KLWpRdWVyeS5meCA9IFR3ZWVuLnByb3Rv
dHlwZS5pbml0OwotCi0vLyBCYWNrIENvbXBhdCA8MS44IGV4dGVuc2lvbiBwb2ludAotalF1ZXJ5
LmZ4LnN0ZXAgPSB7fTsKLQotCi0KLQotdmFyCi0gICAgZnhOb3csIHRpbWVySWQsCi0gICAgcmZ4
dHlwZXMgPSAvXig/OnRvZ2dsZXxzaG93fGhpZGUpJC8sCi0gICAgcnJ1biA9IC9xdWV1ZUhvb2tz
JC87Ci0KLS8vIEFuaW1hdGlvbnMgY3JlYXRlZCBzeW5jaHJvbm91c2x5IHdpbGwgcnVuIHN5bmNo
cm9ub3VzbHkKLWZ1bmN0aW9uIGNyZWF0ZUZ4Tm93KCkgewotICAgIHdpbmRvdy5zZXRUaW1lb3V0
KCBmdW5jdGlvbigpIHsKLSAgICAgICAgZnhOb3cgPSB1bmRlZmluZWQ7Ci0gICAgfSApOwotICAg
IHJldHVybiAoIGZ4Tm93ID0galF1ZXJ5Lm5vdygpICk7Ci19Ci0KLS8vIEdlbmVyYXRlIHBhcmFt
ZXRlcnMgdG8gY3JlYXRlIGEgc3RhbmRhcmQgYW5pbWF0aW9uCi1mdW5jdGlvbiBnZW5GeCggdHlw
ZSwgaW5jbHVkZVdpZHRoICkgewotICAgIHZhciB3aGljaCwKLSAgICAgICAgaSA9IDAsCi0gICAg
ICAgIGF0dHJzID0geyBoZWlnaHQ6IHR5cGUgfTsKLQotICAgIC8vIElmIHdlIGluY2x1ZGUgd2lk
dGgsIHN0ZXAgdmFsdWUgaXMgMSB0byBkbyBhbGwgY3NzRXhwYW5kIHZhbHVlcywKLSAgICAvLyBv
dGhlcndpc2Ugc3RlcCB2YWx1ZSBpcyAyIHRvIHNraXAgb3ZlciBMZWZ0IGFuZCBSaWdodAotICAg
IGluY2x1ZGVXaWR0aCA9IGluY2x1ZGVXaWR0aCA/IDEgOiAwOwotICAgIGZvciAoIDsgaSA8IDQg
OyBpICs9IDIgLSBpbmNsdWRlV2lkdGggKSB7Ci0gICAgICAgIHdoaWNoID0gY3NzRXhwYW5kWyBp
IF07Ci0gICAgICAgIGF0dHJzWyAibWFyZ2luIiArIHdoaWNoIF0gPSBhdHRyc1sgInBhZGRpbmci
ICsgd2hpY2ggXSA9IHR5cGU7Ci0gICAgfQotCi0gICAgaWYgKCBpbmNsdWRlV2lkdGggKSB7Ci0g
ICAgICAgIGF0dHJzLm9wYWNpdHkgPSBhdHRycy53aWR0aCA9IHR5cGU7Ci0gICAgfQotCi0gICAg
cmV0dXJuIGF0dHJzOwotfQotCi1mdW5jdGlvbiBjcmVhdGVUd2VlbiggdmFsdWUsIHByb3AsIGFu
aW1hdGlvbiApIHsKLSAgICB2YXIgdHdlZW4sCi0gICAgICAgIGNvbGxlY3Rpb24gPSAoIEFuaW1h
dGlvbi50d2VlbmVyc1sgcHJvcCBdIHx8IFtdICkuY29uY2F0KCBBbmltYXRpb24udHdlZW5lcnNb
ICIqIiBdICksCi0gICAgICAgIGluZGV4ID0gMCwKLSAgICAgICAgbGVuZ3RoID0gY29sbGVjdGlv
bi5sZW5ndGg7Ci0gICAgZm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHsKLSAgICAg
ICAgaWYgKCAoIHR3ZWVuID0gY29sbGVjdGlvblsgaW5kZXggXS5jYWxsKCBhbmltYXRpb24sIHBy
b3AsIHZhbHVlICkgKSApIHsKLQotICAgICAgICAgICAgLy8gV2UncmUgZG9uZSB3aXRoIHRoaXMg
cHJvcGVydHkKLSAgICAgICAgICAgIHJldHVybiB0d2VlbjsKLSAgICAgICAgfQotICAgIH0KLX0K
LQotZnVuY3Rpb24gZGVmYXVsdFByZWZpbHRlciggZWxlbSwgcHJvcHMsIG9wdHMgKSB7Ci0gICAg
LyoganNoaW50IHZhbGlkdGhpczogdHJ1ZSAqLwotICAgIHZhciBwcm9wLCB2YWx1ZSwgdG9nZ2xl
LCB0d2VlbiwgaG9va3MsIG9sZGZpcmUsIGRpc3BsYXksIGNoZWNrRGlzcGxheSwKLSAgICAgICAg
YW5pbSA9IHRoaXMsCi0gICAgICAgIG9yaWcgPSB7fSwKLSAgICAgICAgc3R5bGUgPSBlbGVtLnN0
eWxlLAotICAgICAgICBoaWRkZW4gPSBlbGVtLm5vZGVUeXBlICYmIGlzSGlkZGVuKCBlbGVtICks
Ci0gICAgICAgIGRhdGFTaG93ID0gZGF0YVByaXYuZ2V0KCBlbGVtLCAiZnhzaG93IiApOwotCi0g
ICAgLy8gSGFuZGxlIHF1ZXVlOiBmYWxzZSBwcm9taXNlcwotICAgIGlmICggIW9wdHMucXVldWUg
KSB7Ci0gICAgICAgIGhvb2tzID0galF1ZXJ5Ll9xdWV1ZUhvb2tzKCBlbGVtLCAiZngiICk7Ci0g
ICAgICAgIGlmICggaG9va3MudW5xdWV1ZWQgPT0gbnVsbCApIHsKLSAgICAgICAgICAgIGhvb2tz
LnVucXVldWVkID0gMDsKLSAgICAgICAgICAgIG9sZGZpcmUgPSBob29rcy5lbXB0eS5maXJlOwot
ICAgICAgICAgICAgaG9va3MuZW1wdHkuZmlyZSA9IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAg
ICAgIGlmICggIWhvb2tzLnVucXVldWVkICkgewotICAgICAgICAgICAgICAgICAgICBvbGRmaXJl
KCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfTsKLSAgICAgICAgfQotICAgICAg
ICBob29rcy51bnF1ZXVlZCsrOwotCi0gICAgICAgIGFuaW0uYWx3YXlzKCBmdW5jdGlvbigpIHsK
LQotICAgICAgICAgICAgLy8gRW5zdXJlIHRoZSBjb21wbGV0ZSBoYW5kbGVyIGlzIGNhbGxlZCBi
ZWZvcmUgdGhpcyBjb21wbGV0ZXMKLSAgICAgICAgICAgIGFuaW0uYWx3YXlzKCBmdW5jdGlvbigp
IHsKLSAgICAgICAgICAgICAgICBob29rcy51bnF1ZXVlZC0tOwotICAgICAgICAgICAgICAgIGlm
ICggIWpRdWVyeS5xdWV1ZSggZWxlbSwgImZ4IiApLmxlbmd0aCApIHsKLSAgICAgICAgICAgICAg
ICAgICAgaG9va3MuZW1wdHkuZmlyZSgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0gKTsKLSAgICAgICAgfSApOwotICAgIH0KLQotICAgIC8vIEhlaWdodC93aWR0aCBvdmVyZmxv
dyBwYXNzCi0gICAgaWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICYmICggImhlaWdodCIgaW4gcHJv
cHMgfHwgIndpZHRoIiBpbiBwcm9wcyApICkgewotCi0gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0
IG5vdGhpbmcgc25lYWtzIG91dAotICAgICAgICAvLyBSZWNvcmQgYWxsIDMgb3ZlcmZsb3cgYXR0
cmlidXRlcyBiZWNhdXNlIElFOS0xMCBkbyBub3QKLSAgICAgICAgLy8gY2hhbmdlIHRoZSBvdmVy
ZmxvdyBhdHRyaWJ1dGUgd2hlbiBvdmVyZmxvd1ggYW5kCi0gICAgICAgIC8vIG92ZXJmbG93WSBh
cmUgc2V0IHRvIHRoZSBzYW1lIHZhbHVlCi0gICAgICAgIG9wdHMub3ZlcmZsb3cgPSBbIHN0eWxl
Lm92ZXJmbG93LCBzdHlsZS5vdmVyZmxvd1gsIHN0eWxlLm92ZXJmbG93WSBdOwotCi0gICAgICAg
IC8vIFNldCBkaXNwbGF5IHByb3BlcnR5IHRvIGlubGluZS1ibG9jayBmb3IgaGVpZ2h0L3dpZHRo
Ci0gICAgICAgIC8vIGFuaW1hdGlvbnMgb24gaW5saW5lIGVsZW1lbnRzIHRoYXQgYXJlIGhhdmlu
ZyB3aWR0aC9oZWlnaHQgYW5pbWF0ZWQKLSAgICAgICAgZGlzcGxheSA9IGpRdWVyeS5jc3MoIGVs
ZW0sICJkaXNwbGF5IiApOwotCi0gICAgICAgIC8vIFRlc3QgZGVmYXVsdCBkaXNwbGF5IGlmIGRp
c3BsYXkgaXMgY3VycmVudGx5ICJub25lIgotICAgICAgICBjaGVja0Rpc3BsYXkgPSBkaXNwbGF5
ID09PSAibm9uZSIgPwotICAgICAgICAgICAgZGF0YVByaXYuZ2V0KCBlbGVtLCAib2xkZGlzcGxh
eSIgKSB8fCBkZWZhdWx0RGlzcGxheSggZWxlbS5ub2RlTmFtZSApIDogZGlzcGxheTsKLQotICAg
ICAgICBpZiAoIGNoZWNrRGlzcGxheSA9PT0gImlubGluZSIgJiYgalF1ZXJ5LmNzcyggZWxlbSwg
ImZsb2F0IiApID09PSAibm9uZSIgKSB7Ci0gICAgICAgICAgICBzdHlsZS5kaXNwbGF5ID0gImlu
bGluZS1ibG9jayI7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIG9wdHMub3ZlcmZsb3cg
KSB7Ci0gICAgICAgIHN0eWxlLm92ZXJmbG93ID0gImhpZGRlbiI7Ci0gICAgICAgIGFuaW0uYWx3
YXlzKCBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIHN0eWxlLm92ZXJmbG93ID0gb3B0cy5vdmVy
Zmxvd1sgMCBdOwotICAgICAgICAgICAgc3R5bGUub3ZlcmZsb3dYID0gb3B0cy5vdmVyZmxvd1sg
MSBdOwotICAgICAgICAgICAgc3R5bGUub3ZlcmZsb3dZID0gb3B0cy5vdmVyZmxvd1sgMiBdOwot
ICAgICAgICB9ICk7Ci0gICAgfQotCi0gICAgLy8gc2hvdy9oaWRlIHBhc3MKLSAgICBmb3IgKCBw
cm9wIGluIHByb3BzICkgewotICAgICAgICB2YWx1ZSA9IHByb3BzWyBwcm9wIF07Ci0gICAgICAg
IGlmICggcmZ4dHlwZXMuZXhlYyggdmFsdWUgKSApIHsKLSAgICAgICAgICAgIGRlbGV0ZSBwcm9w
c1sgcHJvcCBdOwotICAgICAgICAgICAgdG9nZ2xlID0gdG9nZ2xlIHx8IHZhbHVlID09PSAidG9n
Z2xlIjsKLSAgICAgICAgICAgIGlmICggdmFsdWUgPT09ICggaGlkZGVuID8gImhpZGUiIDogInNo
b3ciICkgKSB7Ci0KLSAgICAgICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBkYXRhU2hvdyBsZWZ0
IG92ZXIgZnJvbSBhIHN0b3BwZWQgaGlkZSBvciBzaG93Ci0gICAgICAgICAgICAgICAgLy8gYW5k
IHdlIGFyZSBnb2luZyB0byBwcm9jZWVkIHdpdGggc2hvdywgd2Ugc2hvdWxkIHByZXRlbmQgdG8g
YmUgaGlkZGVuCi0gICAgICAgICAgICAgICAgaWYgKCB2YWx1ZSA9PT0gInNob3ciICYmIGRhdGFT
aG93ICYmIGRhdGFTaG93WyBwcm9wIF0gIT09IHVuZGVmaW5lZCApIHsKLSAgICAgICAgICAgICAg
ICAgICAgaGlkZGVuID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBvcmlnWyBwcm9wIF0gPSBkYXRhU2hvdyAmJiBkYXRhU2hvd1sgcHJvcCBdIHx8
IGpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCApOwotCi0gICAgICAgIC8vIEFueSBub24tZnggdmFs
dWUgc3RvcHMgdXMgZnJvbSByZXN0b3JpbmcgdGhlIG9yaWdpbmFsIGRpc3BsYXkgdmFsdWUKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGRpc3BsYXkgPSB1bmRlZmluZWQ7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBpZiAoICFqUXVlcnkuaXNFbXB0eU9iamVjdCggb3JpZyApICkgewot
ICAgICAgICBpZiAoIGRhdGFTaG93ICkgewotICAgICAgICAgICAgaWYgKCAiaGlkZGVuIiBpbiBk
YXRhU2hvdyApIHsKLSAgICAgICAgICAgICAgICBoaWRkZW4gPSBkYXRhU2hvdy5oaWRkZW47Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBkYXRhU2hvdyA9IGRh
dGFQcml2LmFjY2VzcyggZWxlbSwgImZ4c2hvdyIsIHt9ICk7Ci0gICAgICAgIH0KLQotICAgICAg
ICAvLyBTdG9yZSBzdGF0ZSBpZiBpdHMgdG9nZ2xlIC0gZW5hYmxlcyAuc3RvcCgpLnRvZ2dsZSgp
IHRvICJyZXZlcnNlIgotICAgICAgICBpZiAoIHRvZ2dsZSApIHsKLSAgICAgICAgICAgIGRhdGFT
aG93LmhpZGRlbiA9ICFoaWRkZW47Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCBoaWRkZW4gKSB7
Ci0gICAgICAgICAgICBqUXVlcnkoIGVsZW0gKS5zaG93KCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBhbmltLmRvbmUoIGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIGpRdWVy
eSggZWxlbSApLmhpZGUoKTsKLSAgICAgICAgICAgIH0gKTsKLSAgICAgICAgfQotICAgICAgICBh
bmltLmRvbmUoIGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgdmFyIHByb3A7Ci0KLSAgICAgICAg
ICAgIGRhdGFQcml2LnJlbW92ZSggZWxlbSwgImZ4c2hvdyIgKTsKLSAgICAgICAgICAgIGZvciAo
IHByb3AgaW4gb3JpZyApIHsKLSAgICAgICAgICAgICAgICBqUXVlcnkuc3R5bGUoIGVsZW0sIHBy
b3AsIG9yaWdbIHByb3AgXSApOwotICAgICAgICAgICAgfQotICAgICAgICB9ICk7Ci0gICAgICAg
IGZvciAoIHByb3AgaW4gb3JpZyApIHsKLSAgICAgICAgICAgIHR3ZWVuID0gY3JlYXRlVHdlZW4o
IGhpZGRlbiA/IGRhdGFTaG93WyBwcm9wIF0gOiAwLCBwcm9wLCBhbmltICk7Ci0KLSAgICAgICAg
ICAgIGlmICggISggcHJvcCBpbiBkYXRhU2hvdyApICkgewotICAgICAgICAgICAgICAgIGRhdGFT
aG93WyBwcm9wIF0gPSB0d2Vlbi5zdGFydDsKLSAgICAgICAgICAgICAgICBpZiAoIGhpZGRlbiAp
IHsKLSAgICAgICAgICAgICAgICAgICAgdHdlZW4uZW5kID0gdHdlZW4uc3RhcnQ7Ci0gICAgICAg
ICAgICAgICAgICAgIHR3ZWVuLnN0YXJ0ID0gcHJvcCA9PT0gIndpZHRoIiB8fCBwcm9wID09PSAi
aGVpZ2h0IiA/IDEgOiAwOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotCi0gICAgLy8gSWYgdGhpcyBpcyBhIG5vb3AgbGlrZSAuaGlkZSgpLmhpZGUoKSwgcmVz
dG9yZSBhbiBvdmVyd3JpdHRlbiBkaXNwbGF5IHZhbHVlCi0gICAgfSBlbHNlIGlmICggKCBkaXNw
bGF5ID09PSAibm9uZSIgPyBkZWZhdWx0RGlzcGxheSggZWxlbS5ub2RlTmFtZSApIDogZGlzcGxh
eSApID09PSAiaW5saW5lIiApIHsKLSAgICAgICAgc3R5bGUuZGlzcGxheSA9IGRpc3BsYXk7Ci0g
ICAgfQotfQotCi1mdW5jdGlvbiBwcm9wRmlsdGVyKCBwcm9wcywgc3BlY2lhbEVhc2luZyApIHsK
LSAgICB2YXIgaW5kZXgsIG5hbWUsIGVhc2luZywgdmFsdWUsIGhvb2tzOwotCi0gICAgLy8gY2Ft
ZWxDYXNlLCBzcGVjaWFsRWFzaW5nIGFuZCBleHBhbmQgY3NzSG9vayBwYXNzCi0gICAgZm9yICgg
aW5kZXggaW4gcHJvcHMgKSB7Ci0gICAgICAgIG5hbWUgPSBqUXVlcnkuY2FtZWxDYXNlKCBpbmRl
eCApOwotICAgICAgICBlYXNpbmcgPSBzcGVjaWFsRWFzaW5nWyBuYW1lIF07Ci0gICAgICAgIHZh
bHVlID0gcHJvcHNbIGluZGV4IF07Ci0gICAgICAgIGlmICggalF1ZXJ5LmlzQXJyYXkoIHZhbHVl
ICkgKSB7Ci0gICAgICAgICAgICBlYXNpbmcgPSB2YWx1ZVsgMSBdOwotICAgICAgICAgICAgdmFs
dWUgPSBwcm9wc1sgaW5kZXggXSA9IHZhbHVlWyAwIF07Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAoIGluZGV4ICE9PSBuYW1lICkgewotICAgICAgICAgICAgcHJvcHNbIG5hbWUgXSA9IHZhbHVl
OwotICAgICAgICAgICAgZGVsZXRlIHByb3BzWyBpbmRleCBdOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXTsKLSAgICAgICAgaWYgKCBob29rcyAm
JiAiZXhwYW5kIiBpbiBob29rcyApIHsKLSAgICAgICAgICAgIHZhbHVlID0gaG9va3MuZXhwYW5k
KCB2YWx1ZSApOwotICAgICAgICAgICAgZGVsZXRlIHByb3BzWyBuYW1lIF07Ci0KLSAgICAgICAg
ICAgIC8vIE5vdCBxdWl0ZSAkLmV4dGVuZCwgdGhpcyB3b24ndCBvdmVyd3JpdGUgZXhpc3Rpbmcg
a2V5cy4KLSAgICAgICAgICAgIC8vIFJldXNpbmcgJ2luZGV4JyBiZWNhdXNlIHdlIGhhdmUgdGhl
IGNvcnJlY3QgIm5hbWUiCi0gICAgICAgICAgICBmb3IgKCBpbmRleCBpbiB2YWx1ZSApIHsKLSAg
ICAgICAgICAgICAgICBpZiAoICEoIGluZGV4IGluIHByb3BzICkgKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHByb3BzWyBpbmRleCBdID0gdmFsdWVbIGluZGV4IF07Ci0gICAgICAgICAgICAgICAg
ICAgIHNwZWNpYWxFYXNpbmdbIGluZGV4IF0gPSBlYXNpbmc7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3BlY2lhbEVhc2lu
Z1sgbmFtZSBdID0gZWFzaW5nOwotICAgICAgICB9Ci0gICAgfQotfQotCi1mdW5jdGlvbiBBbmlt
YXRpb24oIGVsZW0sIHByb3BlcnRpZXMsIG9wdGlvbnMgKSB7Ci0gICAgdmFyIHJlc3VsdCwKLSAg
ICAgICAgc3RvcHBlZCwKLSAgICAgICAgaW5kZXggPSAwLAotICAgICAgICBsZW5ndGggPSBBbmlt
YXRpb24ucHJlZmlsdGVycy5sZW5ndGgsCi0gICAgICAgIGRlZmVycmVkID0galF1ZXJ5LkRlZmVy
cmVkKCkuYWx3YXlzKCBmdW5jdGlvbigpIHsKLQotICAgICAgICAgICAgLy8gRG9uJ3QgbWF0Y2gg
ZWxlbSBpbiB0aGUgOmFuaW1hdGVkIHNlbGVjdG9yCi0gICAgICAgICAgICBkZWxldGUgdGljay5l
bGVtOwotICAgICAgICB9ICksCi0gICAgICAgIHRpY2sgPSBmdW5jdGlvbigpIHsKLSAgICAgICAg
ICAgIGlmICggc3RvcHBlZCApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB2YXIgY3VycmVudFRpbWUgPSBmeE5vdyB8fCBjcmVhdGVG
eE5vdygpLAotICAgICAgICAgICAgICAgIHJlbWFpbmluZyA9IE1hdGgubWF4KCAwLCBhbmltYXRp
b24uc3RhcnRUaW1lICsgYW5pbWF0aW9uLmR1cmF0aW9uIC0gY3VycmVudFRpbWUgKSwKLQotICAg
ICAgICAgICAgICAgIC8vIFN1cHBvcnQ6IEFuZHJvaWQgMi4zCi0gICAgICAgICAgICAgICAgLy8g
QXJjaGFpYyBjcmFzaCBidWcgd29uJ3QgYWxsb3cgdXMgdG8gdXNlIGAxIC0gKCAwLjUgfHwgMCAp
YCAoIzEyNDk3KQotICAgICAgICAgICAgICAgIHRlbXAgPSByZW1haW5pbmcgLyBhbmltYXRpb24u
ZHVyYXRpb24gfHwgMCwKLSAgICAgICAgICAgICAgICBwZXJjZW50ID0gMSAtIHRlbXAsCi0gICAg
ICAgICAgICAgICAgaW5kZXggPSAwLAotICAgICAgICAgICAgICAgIGxlbmd0aCA9IGFuaW1hdGlv
bi50d2VlbnMubGVuZ3RoOwotCi0gICAgICAgICAgICBmb3IgKCA7IGluZGV4IDwgbGVuZ3RoIDsg
aW5kZXgrKyApIHsKLSAgICAgICAgICAgICAgICBhbmltYXRpb24udHdlZW5zWyBpbmRleCBdLnJ1
biggcGVyY2VudCApOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBkZWZlcnJlZC5ub3Rp
ZnlXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgcGVyY2VudCwgcmVtYWluaW5nIF0gKTsKLQotICAg
ICAgICAgICAgaWYgKCBwZXJjZW50IDwgMSAmJiBsZW5ndGggKSB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIHJlbWFpbmluZzsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uIF0gKTsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgIGFu
aW1hdGlvbiA9IGRlZmVycmVkLnByb21pc2UoIHsKLSAgICAgICAgICAgIGVsZW06IGVsZW0sCi0g
ICAgICAgICAgICBwcm9wczogalF1ZXJ5LmV4dGVuZCgge30sIHByb3BlcnRpZXMgKSwKLSAgICAg
ICAgICAgIG9wdHM6IGpRdWVyeS5leHRlbmQoIHRydWUsIHsKLSAgICAgICAgICAgICAgICBzcGVj
aWFsRWFzaW5nOiB7fSwKLSAgICAgICAgICAgICAgICBlYXNpbmc6IGpRdWVyeS5lYXNpbmcuX2Rl
ZmF1bHQKLSAgICAgICAgICAgIH0sIG9wdGlvbnMgKSwKLSAgICAgICAgICAgIG9yaWdpbmFsUHJv
cGVydGllczogcHJvcGVydGllcywKLSAgICAgICAgICAgIG9yaWdpbmFsT3B0aW9uczogb3B0aW9u
cywKLSAgICAgICAgICAgIHN0YXJ0VGltZTogZnhOb3cgfHwgY3JlYXRlRnhOb3coKSwKLSAgICAg
ICAgICAgIGR1cmF0aW9uOiBvcHRpb25zLmR1cmF0aW9uLAotICAgICAgICAgICAgdHdlZW5zOiBb
XSwKLSAgICAgICAgICAgIGNyZWF0ZVR3ZWVuOiBmdW5jdGlvbiggcHJvcCwgZW5kICkgewotICAg
ICAgICAgICAgICAgIHZhciB0d2VlbiA9IGpRdWVyeS5Ud2VlbiggZWxlbSwgYW5pbWF0aW9uLm9w
dHMsIHByb3AsIGVuZCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbi5vcHRzLnNw
ZWNpYWxFYXNpbmdbIHByb3AgXSB8fCBhbmltYXRpb24ub3B0cy5lYXNpbmcgKTsKLSAgICAgICAg
ICAgICAgICBhbmltYXRpb24udHdlZW5zLnB1c2goIHR3ZWVuICk7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIHR3ZWVuOwotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIHN0b3A6IGZ1bmN0aW9u
KCBnb3RvRW5kICkgewotICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IDAsCi0KLSAgICAgICAg
ICAgICAgICAgICAgLy8gSWYgd2UgYXJlIGdvaW5nIHRvIHRoZSBlbmQsIHdlIHdhbnQgdG8gcnVu
IGFsbCB0aGUgdHdlZW5zCi0gICAgICAgICAgICAgICAgICAgIC8vIG90aGVyd2lzZSB3ZSBza2lw
IHRoaXMgcGFydAotICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSBnb3RvRW5kID8gYW5pbWF0
aW9uLnR3ZWVucy5sZW5ndGggOiAwOwotICAgICAgICAgICAgICAgIGlmICggc3RvcHBlZCApIHsK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIHN0b3BwZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGZvciAoIDsgaW5k
ZXggPCBsZW5ndGggOyBpbmRleCsrICkgewotICAgICAgICAgICAgICAgICAgICBhbmltYXRpb24u
dHdlZW5zWyBpbmRleCBdLnJ1biggMSApOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgIC8vIFJlc29sdmUgd2hlbiB3ZSBwbGF5ZWQgdGhlIGxhc3QgZnJhbWU7IG90aGVyd2lz
ZSwgcmVqZWN0Ci0gICAgICAgICAgICAgICAgaWYgKCBnb3RvRW5kICkgewotICAgICAgICAgICAg
ICAgICAgICBkZWZlcnJlZC5ub3RpZnlXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgMSwgMCBdICk7
Ci0gICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLnJlc29sdmVXaXRoKCBlbGVtLCBbIGFuaW1h
dGlvbiwgZ290b0VuZCBdICk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICAgICAgZGVmZXJyZWQucmVqZWN0V2l0aCggZWxlbSwgWyBhbmltYXRpb24sIGdvdG9FbmQg
XSApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfSApLAotICAgICAgICBwcm9wcyA9IGFuaW1hdGlvbi5wcm9w
czsKLQotICAgIHByb3BGaWx0ZXIoIHByb3BzLCBhbmltYXRpb24ub3B0cy5zcGVjaWFsRWFzaW5n
ICk7Ci0KLSAgICBmb3IgKCA7IGluZGV4IDwgbGVuZ3RoIDsgaW5kZXgrKyApIHsKLSAgICAgICAg
cmVzdWx0ID0gQW5pbWF0aW9uLnByZWZpbHRlcnNbIGluZGV4IF0uY2FsbCggYW5pbWF0aW9uLCBl
bGVtLCBwcm9wcywgYW5pbWF0aW9uLm9wdHMgKTsKLSAgICAgICAgaWYgKCByZXN1bHQgKSB7Ci0g
ICAgICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCByZXN1bHQuc3RvcCApICkgewotICAg
ICAgICAgICAgICAgIGpRdWVyeS5fcXVldWVIb29rcyggYW5pbWF0aW9uLmVsZW0sIGFuaW1hdGlv
bi5vcHRzLnF1ZXVlICkuc3RvcCA9Ci0gICAgICAgICAgICAgICAgICAgIGpRdWVyeS5wcm94eSgg
cmVzdWx0LnN0b3AsIHJlc3VsdCApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGpRdWVyeS5tYXAoIHByb3BzLCBjcmVh
dGVUd2VlbiwgYW5pbWF0aW9uICk7Ci0KLSAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBhbmlt
YXRpb24ub3B0cy5zdGFydCApICkgewotICAgICAgICBhbmltYXRpb24ub3B0cy5zdGFydC5jYWxs
KCBlbGVtLCBhbmltYXRpb24gKTsKLSAgICB9Ci0KLSAgICBqUXVlcnkuZngudGltZXIoCi0gICAg
ICAgIGpRdWVyeS5leHRlbmQoIHRpY2ssIHsKLSAgICAgICAgICAgIGVsZW06IGVsZW0sCi0gICAg
ICAgICAgICBhbmltOiBhbmltYXRpb24sCi0gICAgICAgICAgICBxdWV1ZTogYW5pbWF0aW9uLm9w
dHMucXVldWUKLSAgICAgICAgfSApCi0gICAgKTsKLQotICAgIC8vIGF0dGFjaCBjYWxsYmFja3Mg
ZnJvbSBvcHRpb25zCi0gICAgcmV0dXJuIGFuaW1hdGlvbi5wcm9ncmVzcyggYW5pbWF0aW9uLm9w
dHMucHJvZ3Jlc3MgKQotICAgICAgICAuZG9uZSggYW5pbWF0aW9uLm9wdHMuZG9uZSwgYW5pbWF0
aW9uLm9wdHMuY29tcGxldGUgKQotICAgICAgICAuZmFpbCggYW5pbWF0aW9uLm9wdHMuZmFpbCAp
Ci0gICAgICAgIC5hbHdheXMoIGFuaW1hdGlvbi5vcHRzLmFsd2F5cyApOwotfQotCi1qUXVlcnku
QW5pbWF0aW9uID0galF1ZXJ5LmV4dGVuZCggQW5pbWF0aW9uLCB7Ci0gICAgdHdlZW5lcnM6IHsK
LSAgICAgICAgIioiOiBbIGZ1bmN0aW9uKCBwcm9wLCB2YWx1ZSApIHsKLSAgICAgICAgICAgIHZh
ciB0d2VlbiA9IHRoaXMuY3JlYXRlVHdlZW4oIHByb3AsIHZhbHVlICk7Ci0gICAgICAgICAgICBh
ZGp1c3RDU1MoIHR3ZWVuLmVsZW0sIHByb3AsIHJjc3NOdW0uZXhlYyggdmFsdWUgKSwgdHdlZW4g
KTsKLSAgICAgICAgICAgIHJldHVybiB0d2VlbjsKLSAgICAgICAgfSBdCi0gICAgfSwKLQotICAg
IHR3ZWVuZXI6IGZ1bmN0aW9uKCBwcm9wcywgY2FsbGJhY2sgKSB7Ci0gICAgICAgIGlmICggalF1
ZXJ5LmlzRnVuY3Rpb24oIHByb3BzICkgKSB7Ci0gICAgICAgICAgICBjYWxsYmFjayA9IHByb3Bz
OwotICAgICAgICAgICAgcHJvcHMgPSBbICIqIiBdOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgcHJvcHMgPSBwcm9wcy5tYXRjaCggcm5vdHdoaXRlICk7Ci0gICAgICAgIH0KLQotICAg
ICAgICB2YXIgcHJvcCwKLSAgICAgICAgICAgIGluZGV4ID0gMCwKLSAgICAgICAgICAgIGxlbmd0
aCA9IHByb3BzLmxlbmd0aDsKLQotICAgICAgICBmb3IgKCA7IGluZGV4IDwgbGVuZ3RoIDsgaW5k
ZXgrKyApIHsKLSAgICAgICAgICAgIHByb3AgPSBwcm9wc1sgaW5kZXggXTsKLSAgICAgICAgICAg
IEFuaW1hdGlvbi50d2VlbmVyc1sgcHJvcCBdID0gQW5pbWF0aW9uLnR3ZWVuZXJzWyBwcm9wIF0g
fHwgW107Ci0gICAgICAgICAgICBBbmltYXRpb24udHdlZW5lcnNbIHByb3AgXS51bnNoaWZ0KCBj
YWxsYmFjayApOwotICAgICAgICB9Ci0gICAgfSwKLQotICAgIHByZWZpbHRlcnM6IFsgZGVmYXVs
dFByZWZpbHRlciBdLAotCi0gICAgcHJlZmlsdGVyOiBmdW5jdGlvbiggY2FsbGJhY2ssIHByZXBl
bmQgKSB7Ci0gICAgICAgIGlmICggcHJlcGVuZCApIHsKLSAgICAgICAgICAgIEFuaW1hdGlvbi5w
cmVmaWx0ZXJzLnVuc2hpZnQoIGNhbGxiYWNrICk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBBbmltYXRpb24ucHJlZmlsdGVycy5wdXNoKCBjYWxsYmFjayApOwotICAgICAgICB9Ci0g
ICAgfQotfSApOwotCi1qUXVlcnkuc3BlZWQgPSBmdW5jdGlvbiggc3BlZWQsIGVhc2luZywgZm4g
KSB7Ci0gICAgdmFyIG9wdCA9IHNwZWVkICYmIHR5cGVvZiBzcGVlZCA9PT0gIm9iamVjdCIgPyBq
UXVlcnkuZXh0ZW5kKCB7fSwgc3BlZWQgKSA6IHsKLSAgICAgICAgY29tcGxldGU6IGZuIHx8ICFm
biAmJiBlYXNpbmcgfHwKLSAgICAgICAgICAgIGpRdWVyeS5pc0Z1bmN0aW9uKCBzcGVlZCApICYm
IHNwZWVkLAotICAgICAgICBkdXJhdGlvbjogc3BlZWQsCi0gICAgICAgIGVhc2luZzogZm4gJiYg
ZWFzaW5nIHx8IGVhc2luZyAmJiAhalF1ZXJ5LmlzRnVuY3Rpb24oIGVhc2luZyApICYmIGVhc2lu
ZwotICAgIH07Ci0KLSAgICBvcHQuZHVyYXRpb24gPSBqUXVlcnkuZngub2ZmID8gMCA6IHR5cGVv
ZiBvcHQuZHVyYXRpb24gPT09ICJudW1iZXIiID8KLSAgICAgICAgb3B0LmR1cmF0aW9uIDogb3B0
LmR1cmF0aW9uIGluIGpRdWVyeS5meC5zcGVlZHMgPwotICAgICAgICAgICAgalF1ZXJ5LmZ4LnNw
ZWVkc1sgb3B0LmR1cmF0aW9uIF0gOiBqUXVlcnkuZnguc3BlZWRzLl9kZWZhdWx0OwotCi0gICAg
Ly8gTm9ybWFsaXplIG9wdC5xdWV1ZSAtIHRydWUvdW5kZWZpbmVkL251bGwgLT4gImZ4IgotICAg
IGlmICggb3B0LnF1ZXVlID09IG51bGwgfHwgb3B0LnF1ZXVlID09PSB0cnVlICkgewotICAgICAg
ICBvcHQucXVldWUgPSAiZngiOwotICAgIH0KLQotICAgIC8vIFF1ZXVlaW5nCi0gICAgb3B0Lm9s
ZCA9IG9wdC5jb21wbGV0ZTsKLQotICAgIG9wdC5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkgewotICAg
ICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBvcHQub2xkICkgKSB7Ci0gICAgICAgICAgICBv
cHQub2xkLmNhbGwoIHRoaXMgKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICggb3B0LnF1ZXVl
ICkgewotICAgICAgICAgICAgalF1ZXJ5LmRlcXVldWUoIHRoaXMsIG9wdC5xdWV1ZSApOwotICAg
ICAgICB9Ci0gICAgfTsKLQotICAgIHJldHVybiBvcHQ7Ci19OwotCi1qUXVlcnkuZm4uZXh0ZW5k
KCB7Ci0gICAgZmFkZVRvOiBmdW5jdGlvbiggc3BlZWQsIHRvLCBlYXNpbmcsIGNhbGxiYWNrICkg
ewotCi0gICAgICAgIC8vIFNob3cgYW55IGhpZGRlbiBlbGVtZW50cyBhZnRlciBzZXR0aW5nIG9w
YWNpdHkgdG8gMAotICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXIoIGlzSGlkZGVuICkuY3NzKCAi
b3BhY2l0eSIsIDAgKS5zaG93KCkKLQotICAgICAgICAgICAgLy8gQW5pbWF0ZSB0byB0aGUgdmFs
dWUgc3BlY2lmaWVkCi0gICAgICAgICAgICAuZW5kKCkuYW5pbWF0ZSggeyBvcGFjaXR5OiB0byB9
LCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApOwotICAgIH0sCi0gICAgYW5pbWF0ZTogZnVuY3Rp
b24oIHByb3AsIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICkgewotICAgICAgICB2YXIgZW1wdHkg
PSBqUXVlcnkuaXNFbXB0eU9iamVjdCggcHJvcCApLAotICAgICAgICAgICAgb3B0YWxsID0galF1
ZXJ5LnNwZWVkKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApLAotICAgICAgICAgICAgZG9Bbmlt
YXRpb24gPSBmdW5jdGlvbigpIHsKLQotICAgICAgICAgICAgICAgIC8vIE9wZXJhdGUgb24gYSBj
b3B5IG9mIHByb3Agc28gcGVyLXByb3BlcnR5IGVhc2luZyB3b24ndCBiZSBsb3N0Ci0gICAgICAg
ICAgICAgICAgdmFyIGFuaW0gPSBBbmltYXRpb24oIHRoaXMsIGpRdWVyeS5leHRlbmQoIHt9LCBw
cm9wICksIG9wdGFsbCApOwotCi0gICAgICAgICAgICAgICAgLy8gRW1wdHkgYW5pbWF0aW9ucywg
b3IgZmluaXNoaW5nIHJlc29sdmVzIGltbWVkaWF0ZWx5Ci0gICAgICAgICAgICAgICAgaWYgKCBl
bXB0eSB8fCBkYXRhUHJpdi5nZXQoIHRoaXMsICJmaW5pc2giICkgKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGFuaW0uc3RvcCggdHJ1ZSApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH07Ci0gICAgICAgICAgICBkb0FuaW1hdGlvbi5maW5pc2ggPSBkb0FuaW1hdGlvbjsKLQotICAg
ICAgICByZXR1cm4gZW1wdHkgfHwgb3B0YWxsLnF1ZXVlID09PSBmYWxzZSA/Ci0gICAgICAgICAg
ICB0aGlzLmVhY2goIGRvQW5pbWF0aW9uICkgOgotICAgICAgICAgICAgdGhpcy5xdWV1ZSggb3B0
YWxsLnF1ZXVlLCBkb0FuaW1hdGlvbiApOwotICAgIH0sCi0gICAgc3RvcDogZnVuY3Rpb24oIHR5
cGUsIGNsZWFyUXVldWUsIGdvdG9FbmQgKSB7Ci0gICAgICAgIHZhciBzdG9wUXVldWUgPSBmdW5j
dGlvbiggaG9va3MgKSB7Ci0gICAgICAgICAgICB2YXIgc3RvcCA9IGhvb2tzLnN0b3A7Ci0gICAg
ICAgICAgICBkZWxldGUgaG9va3Muc3RvcDsKLSAgICAgICAgICAgIHN0b3AoIGdvdG9FbmQgKTsK
LSAgICAgICAgfTsKLQotICAgICAgICBpZiAoIHR5cGVvZiB0eXBlICE9PSAic3RyaW5nIiApIHsK
LSAgICAgICAgICAgIGdvdG9FbmQgPSBjbGVhclF1ZXVlOwotICAgICAgICAgICAgY2xlYXJRdWV1
ZSA9IHR5cGU7Ci0gICAgICAgICAgICB0eXBlID0gdW5kZWZpbmVkOwotICAgICAgICB9Ci0gICAg
ICAgIGlmICggY2xlYXJRdWV1ZSAmJiB0eXBlICE9PSBmYWxzZSApIHsKLSAgICAgICAgICAgIHRo
aXMucXVldWUoIHR5cGUgfHwgImZ4IiwgW10gKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVy
biB0aGlzLmVhY2goIGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgdmFyIGRlcXVldWUgPSB0cnVl
LAotICAgICAgICAgICAgICAgIGluZGV4ID0gdHlwZSAhPSBudWxsICYmIHR5cGUgKyAicXVldWVI
b29rcyIsCi0gICAgICAgICAgICAgICAgdGltZXJzID0galF1ZXJ5LnRpbWVycywKLSAgICAgICAg
ICAgICAgICBkYXRhID0gZGF0YVByaXYuZ2V0KCB0aGlzICk7Ci0KLSAgICAgICAgICAgIGlmICgg
aW5kZXggKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCBkYXRhWyBpbmRleCBdICYmIGRhdGFbIGlu
ZGV4IF0uc3RvcCApIHsKLSAgICAgICAgICAgICAgICAgICAgc3RvcFF1ZXVlKCBkYXRhWyBpbmRl
eCBdICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICBmb3IgKCBpbmRleCBpbiBkYXRhICkgewotICAgICAgICAgICAgICAgICAgICBpZiAo
IGRhdGFbIGluZGV4IF0gJiYgZGF0YVsgaW5kZXggXS5zdG9wICYmIHJydW4udGVzdCggaW5kZXgg
KSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0b3BRdWV1ZSggZGF0YVsgaW5kZXggXSAp
OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBmb3IgKCBpbmRleCA9IHRpbWVycy5sZW5ndGg7IGluZGV4LS07ICkg
ewotICAgICAgICAgICAgICAgIGlmICggdGltZXJzWyBpbmRleCBdLmVsZW0gPT09IHRoaXMgJiYK
LSAgICAgICAgICAgICAgICAgICAgKCB0eXBlID09IG51bGwgfHwgdGltZXJzWyBpbmRleCBdLnF1
ZXVlID09PSB0eXBlICkgKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgdGltZXJzWyBpbmRleCBd
LmFuaW0uc3RvcCggZ290b0VuZCApOwotICAgICAgICAgICAgICAgICAgICBkZXF1ZXVlID0gZmFs
c2U7Ci0gICAgICAgICAgICAgICAgICAgIHRpbWVycy5zcGxpY2UoIGluZGV4LCAxICk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBTdGFydCB0aGUg
bmV4dCBpbiB0aGUgcXVldWUgaWYgdGhlIGxhc3Qgc3RlcCB3YXNuJ3QgZm9yY2VkLgotICAgICAg
ICAgICAgLy8gVGltZXJzIGN1cnJlbnRseSB3aWxsIGNhbGwgdGhlaXIgY29tcGxldGUgY2FsbGJh
Y2tzLCB3aGljaAotICAgICAgICAgICAgLy8gd2lsbCBkZXF1ZXVlIGJ1dCBvbmx5IGlmIHRoZXkg
d2VyZSBnb3RvRW5kLgotICAgICAgICAgICAgaWYgKCBkZXF1ZXVlIHx8ICFnb3RvRW5kICkgewot
ICAgICAgICAgICAgICAgIGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0eXBlICk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0gKTsKLSAgICB9LAotICAgIGZpbmlzaDogZnVuY3Rpb24oIHR5cGUgKSB7
Ci0gICAgICAgIGlmICggdHlwZSAhPT0gZmFsc2UgKSB7Ci0gICAgICAgICAgICB0eXBlID0gdHlw
ZSB8fCAiZngiOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9u
KCkgewotICAgICAgICAgICAgdmFyIGluZGV4LAotICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRh
UHJpdi5nZXQoIHRoaXMgKSwKLSAgICAgICAgICAgICAgICBxdWV1ZSA9IGRhdGFbIHR5cGUgKyAi
cXVldWUiIF0sCi0gICAgICAgICAgICAgICAgaG9va3MgPSBkYXRhWyB0eXBlICsgInF1ZXVlSG9v
a3MiIF0sCi0gICAgICAgICAgICAgICAgdGltZXJzID0galF1ZXJ5LnRpbWVycywKLSAgICAgICAg
ICAgICAgICBsZW5ndGggPSBxdWV1ZSA/IHF1ZXVlLmxlbmd0aCA6IDA7Ci0KLSAgICAgICAgICAg
IC8vIEVuYWJsZSBmaW5pc2hpbmcgZmxhZyBvbiBwcml2YXRlIGRhdGEKLSAgICAgICAgICAgIGRh
dGEuZmluaXNoID0gdHJ1ZTsKLQotICAgICAgICAgICAgLy8gRW1wdHkgdGhlIHF1ZXVlIGZpcnN0
Ci0gICAgICAgICAgICBqUXVlcnkucXVldWUoIHRoaXMsIHR5cGUsIFtdICk7Ci0KLSAgICAgICAg
ICAgIGlmICggaG9va3MgJiYgaG9va3Muc3RvcCApIHsKLSAgICAgICAgICAgICAgICBob29rcy5z
dG9wLmNhbGwoIHRoaXMsIHRydWUgKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8g
TG9vayBmb3IgYW55IGFjdGl2ZSBhbmltYXRpb25zLCBhbmQgZmluaXNoIHRoZW0KLSAgICAgICAg
ICAgIGZvciAoIGluZGV4ID0gdGltZXJzLmxlbmd0aDsgaW5kZXgtLTsgKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKCB0aW1lcnNbIGluZGV4IF0uZWxlbSA9PT0gdGhpcyAmJiB0aW1lcnNbIGluZGV4
IF0ucXVldWUgPT09IHR5cGUgKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRpbWVyc1sgaW5kZXgg
XS5hbmltLnN0b3AoIHRydWUgKTsKLSAgICAgICAgICAgICAgICAgICAgdGltZXJzLnNwbGljZSgg
aW5kZXgsIDEgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIC8vIExvb2sgZm9yIGFueSBhbmltYXRpb25zIGluIHRoZSBvbGQgcXVldWUgYW5kIGZpbmlz
aCB0aGVtCi0gICAgICAgICAgICBmb3IgKCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRl
eCsrICkgewotICAgICAgICAgICAgICAgIGlmICggcXVldWVbIGluZGV4IF0gJiYgcXVldWVbIGlu
ZGV4IF0uZmluaXNoICkgewotICAgICAgICAgICAgICAgICAgICBxdWV1ZVsgaW5kZXggXS5maW5p
c2guY2FsbCggdGhpcyApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgLy8gVHVybiBvZmYgZmluaXNoaW5nIGZsYWcKLSAgICAgICAgICAgIGRlbGV0ZSBk
YXRhLmZpbmlzaDsKLSAgICAgICAgfSApOwotICAgIH0KLX0gKTsKLQotalF1ZXJ5LmVhY2goIFsg
InRvZ2dsZSIsICJzaG93IiwgImhpZGUiIF0sIGZ1bmN0aW9uKCBpLCBuYW1lICkgewotICAgIHZh
ciBjc3NGbiA9IGpRdWVyeS5mblsgbmFtZSBdOwotICAgIGpRdWVyeS5mblsgbmFtZSBdID0gZnVu
Y3Rpb24oIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICkgewotICAgICAgICByZXR1cm4gc3BlZWQg
PT0gbnVsbCB8fCB0eXBlb2Ygc3BlZWQgPT09ICJib29sZWFuIiA/Ci0gICAgICAgICAgICBjc3NG
bi5hcHBseSggdGhpcywgYXJndW1lbnRzICkgOgotICAgICAgICAgICAgdGhpcy5hbmltYXRlKCBn
ZW5GeCggbmFtZSwgdHJ1ZSApLCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApOwotICAgIH07Ci19
ICk7Ci0KLS8vIEdlbmVyYXRlIHNob3J0Y3V0cyBmb3IgY3VzdG9tIGFuaW1hdGlvbnMKLWpRdWVy
eS5lYWNoKCB7Ci0gICAgc2xpZGVEb3duOiBnZW5GeCggInNob3ciICksCi0gICAgc2xpZGVVcDog
Z2VuRngoICJoaWRlIiApLAotICAgIHNsaWRlVG9nZ2xlOiBnZW5GeCggInRvZ2dsZSIgKSwKLSAg
ICBmYWRlSW46IHsgb3BhY2l0eTogInNob3ciIH0sCi0gICAgZmFkZU91dDogeyBvcGFjaXR5OiAi
aGlkZSIgfSwKLSAgICBmYWRlVG9nZ2xlOiB7IG9wYWNpdHk6ICJ0b2dnbGUiIH0KLX0sIGZ1bmN0
aW9uKCBuYW1lLCBwcm9wcyApIHsKLSAgICBqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBz
cGVlZCwgZWFzaW5nLCBjYWxsYmFjayApIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuYW5pbWF0ZSgg
cHJvcHMsIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICk7Ci0gICAgfTsKLX0gKTsKLQotalF1ZXJ5
LnRpbWVycyA9IFtdOwotalF1ZXJ5LmZ4LnRpY2sgPSBmdW5jdGlvbigpIHsKLSAgICB2YXIgdGlt
ZXIsCi0gICAgICAgIGkgPSAwLAotICAgICAgICB0aW1lcnMgPSBqUXVlcnkudGltZXJzOwotCi0g
ICAgZnhOb3cgPSBqUXVlcnkubm93KCk7Ci0KLSAgICBmb3IgKCA7IGkgPCB0aW1lcnMubGVuZ3Ro
OyBpKysgKSB7Ci0gICAgICAgIHRpbWVyID0gdGltZXJzWyBpIF07Ci0KLSAgICAgICAgLy8gQ2hl
Y2tzIHRoZSB0aW1lciBoYXMgbm90IGFscmVhZHkgYmVlbiByZW1vdmVkCi0gICAgICAgIGlmICgg
IXRpbWVyKCkgJiYgdGltZXJzWyBpIF0gPT09IHRpbWVyICkgewotICAgICAgICAgICAgdGltZXJz
LnNwbGljZSggaS0tLCAxICk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoICF0aW1lcnMu
bGVuZ3RoICkgewotICAgICAgICBqUXVlcnkuZnguc3RvcCgpOwotICAgIH0KLSAgICBmeE5vdyA9
IHVuZGVmaW5lZDsKLX07Ci0KLWpRdWVyeS5meC50aW1lciA9IGZ1bmN0aW9uKCB0aW1lciApIHsK
LSAgICBqUXVlcnkudGltZXJzLnB1c2goIHRpbWVyICk7Ci0gICAgaWYgKCB0aW1lcigpICkgewot
ICAgICAgICBqUXVlcnkuZnguc3RhcnQoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBqUXVlcnku
dGltZXJzLnBvcCgpOwotICAgIH0KLX07Ci0KLWpRdWVyeS5meC5pbnRlcnZhbCA9IDEzOwotalF1
ZXJ5LmZ4LnN0YXJ0ID0gZnVuY3Rpb24oKSB7Ci0gICAgaWYgKCAhdGltZXJJZCApIHsKLSAgICAg
ICAgdGltZXJJZCA9IHdpbmRvdy5zZXRJbnRlcnZhbCggalF1ZXJ5LmZ4LnRpY2ssIGpRdWVyeS5m
eC5pbnRlcnZhbCApOwotICAgIH0KLX07Ci0KLWpRdWVyeS5meC5zdG9wID0gZnVuY3Rpb24oKSB7
Ci0gICAgd2luZG93LmNsZWFySW50ZXJ2YWwoIHRpbWVySWQgKTsKLQotICAgIHRpbWVySWQgPSBu
dWxsOwotfTsKLQotalF1ZXJ5LmZ4LnNwZWVkcyA9IHsKLSAgICBzbG93OiA2MDAsCi0gICAgZmFz
dDogMjAwLAotCi0gICAgLy8gRGVmYXVsdCBzcGVlZAotICAgIF9kZWZhdWx0OiA0MDAKLX07Ci0K
LQotLy8gQmFzZWQgb2ZmIG9mIHRoZSBwbHVnaW4gYnkgQ2xpbnQgSGVsZmVycywgd2l0aCBwZXJt
aXNzaW9uLgotLy8gaHR0cDovL3dlYi5hcmNoaXZlLm9yZy93ZWIvMjAxMDAzMjQwMTQ3NDcvaHR0
cDovL2JsaW5kc2lnbmFscy5jb20vaW5kZXgucGhwLzIwMDkvMDcvanF1ZXJ5LWRlbGF5LwotalF1
ZXJ5LmZuLmRlbGF5ID0gZnVuY3Rpb24oIHRpbWUsIHR5cGUgKSB7Ci0gICAgdGltZSA9IGpRdWVy
eS5meCA/IGpRdWVyeS5meC5zcGVlZHNbIHRpbWUgXSB8fCB0aW1lIDogdGltZTsKLSAgICB0eXBl
ID0gdHlwZSB8fCAiZngiOwotCi0gICAgcmV0dXJuIHRoaXMucXVldWUoIHR5cGUsIGZ1bmN0aW9u
KCBuZXh0LCBob29rcyApIHsKLSAgICAgICAgdmFyIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91
dCggbmV4dCwgdGltZSApOwotICAgICAgICBob29rcy5zdG9wID0gZnVuY3Rpb24oKSB7Ci0gICAg
ICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KCB0aW1lb3V0ICk7Ci0gICAgICAgIH07Ci0gICAg
fSApOwotfTsKLQotCi0oIGZ1bmN0aW9uKCkgewotICAgIHZhciBpbnB1dCA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoICJpbnB1dCIgKSwKLSAgICAgICAgc2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCggInNlbGVjdCIgKSwKLSAgICAgICAgb3B0ID0gc2VsZWN0LmFwcGVuZENoaWxkKCBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCAib3B0aW9uIiApICk7Ci0KLSAgICBpbnB1dC50eXBlID0g
ImNoZWNrYm94IjsKLQotICAgIC8vIFN1cHBvcnQ6IGlPUzw9NS4xLCBBbmRyb2lkPD00LjIrCi0g
ICAgLy8gRGVmYXVsdCB2YWx1ZSBmb3IgYSBjaGVja2JveCBzaG91bGQgYmUgIm9uIgotICAgIHN1
cHBvcnQuY2hlY2tPbiA9IGlucHV0LnZhbHVlICE9PSAiIjsKLQotICAgIC8vIFN1cHBvcnQ6IElF
PD0xMSsKLSAgICAvLyBNdXN0IGFjY2VzcyBzZWxlY3RlZEluZGV4IHRvIG1ha2UgZGVmYXVsdCBv
cHRpb25zIHNlbGVjdAotICAgIHN1cHBvcnQub3B0U2VsZWN0ZWQgPSBvcHQuc2VsZWN0ZWQ7Ci0K
LSAgICAvLyBTdXBwb3J0OiBBbmRyb2lkPD0yLjMKLSAgICAvLyBPcHRpb25zIGluc2lkZSBkaXNh
YmxlZCBzZWxlY3RzIGFyZSBpbmNvcnJlY3RseSBtYXJrZWQgYXMgZGlzYWJsZWQKLSAgICBzZWxl
Y3QuZGlzYWJsZWQgPSB0cnVlOwotICAgIHN1cHBvcnQub3B0RGlzYWJsZWQgPSAhb3B0LmRpc2Fi
bGVkOwotCi0gICAgLy8gU3VwcG9ydDogSUU8PTExKwotICAgIC8vIEFuIGlucHV0IGxvc2VzIGl0
cyB2YWx1ZSBhZnRlciBiZWNvbWluZyBhIHJhZGlvCi0gICAgaW5wdXQgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCAiaW5wdXQiICk7Ci0gICAgaW5wdXQudmFsdWUgPSAidCI7Ci0gICAgaW5wdXQu
dHlwZSA9ICJyYWRpbyI7Ci0gICAgc3VwcG9ydC5yYWRpb1ZhbHVlID0gaW5wdXQudmFsdWUgPT09
ICJ0IjsKLX0gKSgpOwotCi0KLXZhciBib29sSG9vaywKLSAgICBhdHRySGFuZGxlID0galF1ZXJ5
LmV4cHIuYXR0ckhhbmRsZTsKLQotalF1ZXJ5LmZuLmV4dGVuZCggewotICAgIGF0dHI6IGZ1bmN0
aW9uKCBuYW1lLCB2YWx1ZSApIHsKLSAgICAgICAgcmV0dXJuIGFjY2VzcyggdGhpcywgalF1ZXJ5
LmF0dHIsIG5hbWUsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSApOwotICAgIH0sCi0KLSAg
ICByZW1vdmVBdHRyOiBmdW5jdGlvbiggbmFtZSApIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuZWFj
aCggZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICBqUXVlcnkucmVtb3ZlQXR0ciggdGhpcywgbmFt
ZSApOwotICAgICAgICB9ICk7Ci0gICAgfQotfSApOwotCi1qUXVlcnkuZXh0ZW5kKCB7Ci0gICAg
YXR0cjogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlICkgewotICAgICAgICB2YXIgcmV0LCBo
b29rcywKLSAgICAgICAgICAgIG5UeXBlID0gZWxlbS5ub2RlVHlwZTsKLQotICAgICAgICAvLyBE
b24ndCBnZXQvc2V0IGF0dHJpYnV0ZXMgb24gdGV4dCwgY29tbWVudCBhbmQgYXR0cmlidXRlIG5v
ZGVzCi0gICAgICAgIGlmICggblR5cGUgPT09IDMgfHwgblR5cGUgPT09IDggfHwgblR5cGUgPT09
IDIgKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBGYWxs
YmFjayB0byBwcm9wIHdoZW4gYXR0cmlidXRlcyBhcmUgbm90IHN1cHBvcnRlZAotICAgICAgICBp
ZiAoIHR5cGVvZiBlbGVtLmdldEF0dHJpYnV0ZSA9PT0gInVuZGVmaW5lZCIgKSB7Ci0gICAgICAg
ICAgICByZXR1cm4galF1ZXJ5LnByb3AoIGVsZW0sIG5hbWUsIHZhbHVlICk7Ci0gICAgICAgIH0K
LQotICAgICAgICAvLyBBbGwgYXR0cmlidXRlcyBhcmUgbG93ZXJjYXNlCi0gICAgICAgIC8vIEdy
YWIgbmVjZXNzYXJ5IGhvb2sgaWYgb25lIGlzIGRlZmluZWQKLSAgICAgICAgaWYgKCBuVHlwZSAh
PT0gMSB8fCAhalF1ZXJ5LmlzWE1MRG9jKCBlbGVtICkgKSB7Ci0gICAgICAgICAgICBuYW1lID0g
bmFtZS50b0xvd2VyQ2FzZSgpOwotICAgICAgICAgICAgaG9va3MgPSBqUXVlcnkuYXR0ckhvb2tz
WyBuYW1lIF0gfHwKLSAgICAgICAgICAgICAgICAoIGpRdWVyeS5leHByLm1hdGNoLmJvb2wudGVz
dCggbmFtZSApID8gYm9vbEhvb2sgOiB1bmRlZmluZWQgKTsKLSAgICAgICAgfQotCi0gICAgICAg
IGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHsKLSAgICAgICAgICAgIGlmICggdmFsdWUgPT09
IG51bGwgKSB7Ci0gICAgICAgICAgICAgICAgalF1ZXJ5LnJlbW92ZUF0dHIoIGVsZW0sIG5hbWUg
KTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IGlmICggaG9va3MgJiYgInNldCIgaW4gaG9va3MgJiYKLSAgICAgICAgICAgICAgICAoIHJldCA9
IGhvb2tzLnNldCggZWxlbSwgdmFsdWUsIG5hbWUgKSApICE9PSB1bmRlZmluZWQgKSB7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIHJldDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZWxl
bS5zZXRBdHRyaWJ1dGUoIG5hbWUsIHZhbHVlICsgIiIgKTsKLSAgICAgICAgICAgIHJldHVybiB2
YWx1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICggaG9va3MgJiYgImdldCIgaW4gaG9va3Mg
JiYgKCByZXQgPSBob29rcy5nZXQoIGVsZW0sIG5hbWUgKSApICE9PSBudWxsICkgewotICAgICAg
ICAgICAgcmV0dXJuIHJldDsKLSAgICAgICAgfQotCi0gICAgICAgIHJldCA9IGpRdWVyeS5maW5k
LmF0dHIoIGVsZW0sIG5hbWUgKTsKLQotICAgICAgICAvLyBOb24tZXhpc3RlbnQgYXR0cmlidXRl
cyByZXR1cm4gbnVsbCwgd2Ugbm9ybWFsaXplIHRvIHVuZGVmaW5lZAotICAgICAgICByZXR1cm4g
cmV0ID09IG51bGwgPyB1bmRlZmluZWQgOiByZXQ7Ci0gICAgfSwKLQotICAgIGF0dHJIb29rczog
ewotICAgICAgICB0eXBlOiB7Ci0gICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1
ZSApIHsKLSAgICAgICAgICAgICAgICBpZiAoICFzdXBwb3J0LnJhZGlvVmFsdWUgJiYgdmFsdWUg
PT09ICJyYWRpbyIgJiYKLSAgICAgICAgICAgICAgICAgICAgalF1ZXJ5Lm5vZGVOYW1lKCBlbGVt
LCAiaW5wdXQiICkgKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciB2YWwgPSBlbGVtLnZhbHVl
OwotICAgICAgICAgICAgICAgICAgICBlbGVtLnNldEF0dHJpYnV0ZSggInR5cGUiLCB2YWx1ZSAp
OwotICAgICAgICAgICAgICAgICAgICBpZiAoIHZhbCApIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGVsZW0udmFsdWUgPSB2YWw7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgIH0sCi0KLSAgICByZW1vdmVBdHRyOiBmdW5jdGlvbiggZWxlbSwgdmFs
dWUgKSB7Ci0gICAgICAgIHZhciBuYW1lLCBwcm9wTmFtZSwKLSAgICAgICAgICAgIGkgPSAwLAot
ICAgICAgICAgICAgYXR0ck5hbWVzID0gdmFsdWUgJiYgdmFsdWUubWF0Y2goIHJub3R3aGl0ZSAp
OwotCi0gICAgICAgIGlmICggYXR0ck5hbWVzICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7Ci0g
ICAgICAgICAgICB3aGlsZSAoICggbmFtZSA9IGF0dHJOYW1lc1sgaSsrIF0gKSApIHsKLSAgICAg
ICAgICAgICAgICBwcm9wTmFtZSA9IGpRdWVyeS5wcm9wRml4WyBuYW1lIF0gfHwgbmFtZTsKLQot
ICAgICAgICAgICAgICAgIC8vIEJvb2xlYW4gYXR0cmlidXRlcyBnZXQgc3BlY2lhbCB0cmVhdG1l
bnQgKCMxMDg3MCkKLSAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5leHByLm1hdGNoLmJvb2wu
dGVzdCggbmFtZSApICkgewotCi0gICAgICAgICAgICAgICAgICAgIC8vIFNldCBjb3JyZXNwb25k
aW5nIHByb3BlcnR5IHRvIGZhbHNlCi0gICAgICAgICAgICAgICAgICAgIGVsZW1bIHByb3BOYW1l
IF0gPSBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBlbGVtLnJl
bW92ZUF0dHJpYnV0ZSggbmFtZSApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQot
fSApOwotCi0vLyBIb29rcyBmb3IgYm9vbGVhbiBhdHRyaWJ1dGVzCi1ib29sSG9vayA9IHsKLSAg
ICBzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSwgbmFtZSApIHsKLSAgICAgICAgaWYgKCB2YWx1
ZSA9PT0gZmFsc2UgKSB7Ci0KLSAgICAgICAgICAgIC8vIFJlbW92ZSBib29sZWFuIGF0dHJpYnV0
ZXMgd2hlbiBzZXQgdG8gZmFsc2UKLSAgICAgICAgICAgIGpRdWVyeS5yZW1vdmVBdHRyKCBlbGVt
LCBuYW1lICk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBlbGVtLnNldEF0dHJpYnV0
ZSggbmFtZSwgbmFtZSApOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBuYW1lOwotICAgIH0K
LX07Ci1qUXVlcnkuZWFjaCggalF1ZXJ5LmV4cHIubWF0Y2guYm9vbC5zb3VyY2UubWF0Y2goIC9c
dysvZyApLCBmdW5jdGlvbiggaSwgbmFtZSApIHsKLSAgICB2YXIgZ2V0dGVyID0gYXR0ckhhbmRs
ZVsgbmFtZSBdIHx8IGpRdWVyeS5maW5kLmF0dHI7Ci0KLSAgICBhdHRySGFuZGxlWyBuYW1lIF0g
PSBmdW5jdGlvbiggZWxlbSwgbmFtZSwgaXNYTUwgKSB7Ci0gICAgICAgIHZhciByZXQsIGhhbmRs
ZTsKLSAgICAgICAgaWYgKCAhaXNYTUwgKSB7Ci0KLSAgICAgICAgICAgIC8vIEF2b2lkIGFuIGlu
ZmluaXRlIGxvb3AgYnkgdGVtcG9yYXJpbHkgcmVtb3ZpbmcgdGhpcyBmdW5jdGlvbiBmcm9tIHRo
ZSBnZXR0ZXIKLSAgICAgICAgICAgIGhhbmRsZSA9IGF0dHJIYW5kbGVbIG5hbWUgXTsKLSAgICAg
ICAgICAgIGF0dHJIYW5kbGVbIG5hbWUgXSA9IHJldDsKLSAgICAgICAgICAgIHJldCA9IGdldHRl
ciggZWxlbSwgbmFtZSwgaXNYTUwgKSAhPSBudWxsID8KLSAgICAgICAgICAgICAgICBuYW1lLnRv
TG93ZXJDYXNlKCkgOgotICAgICAgICAgICAgICAgIG51bGw7Ci0gICAgICAgICAgICBhdHRySGFu
ZGxlWyBuYW1lIF0gPSBoYW5kbGU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJldDsKLSAg
ICB9OwotfSApOwotCi0KLQotCi12YXIgcmZvY3VzYWJsZSA9IC9eKD86aW5wdXR8c2VsZWN0fHRl
eHRhcmVhfGJ1dHRvbikkL2ksCi0gICAgcmNsaWNrYWJsZSA9IC9eKD86YXxhcmVhKSQvaTsKLQot
alF1ZXJ5LmZuLmV4dGVuZCggewotICAgIHByb3A6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHsK
LSAgICAgICAgcmV0dXJuIGFjY2VzcyggdGhpcywgalF1ZXJ5LnByb3AsIG5hbWUsIHZhbHVlLCBh
cmd1bWVudHMubGVuZ3RoID4gMSApOwotICAgIH0sCi0KLSAgICByZW1vdmVQcm9wOiBmdW5jdGlv
biggbmFtZSApIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7Ci0gICAg
ICAgICAgICBkZWxldGUgdGhpc1sgalF1ZXJ5LnByb3BGaXhbIG5hbWUgXSB8fCBuYW1lIF07Ci0g
ICAgICAgIH0gKTsKLSAgICB9Ci19ICk7Ci0KLWpRdWVyeS5leHRlbmQoIHsKLSAgICBwcm9wOiBm
dW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUgKSB7Ci0gICAgICAgIHZhciByZXQsIGhvb2tzLAot
ICAgICAgICAgICAgblR5cGUgPSBlbGVtLm5vZGVUeXBlOwotCi0gICAgICAgIC8vIERvbid0IGdl
dC9zZXQgcHJvcGVydGllcyBvbiB0ZXh0LCBjb21tZW50IGFuZCBhdHRyaWJ1dGUgbm9kZXMKLSAg
ICAgICAgaWYgKCBuVHlwZSA9PT0gMyB8fCBuVHlwZSA9PT0gOCB8fCBuVHlwZSA9PT0gMiApIHsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICggblR5cGUgIT09
IDEgfHwgIWpRdWVyeS5pc1hNTERvYyggZWxlbSApICkgewotCi0gICAgICAgICAgICAvLyBGaXgg
bmFtZSBhbmQgYXR0YWNoIGhvb2tzCi0gICAgICAgICAgICBuYW1lID0galF1ZXJ5LnByb3BGaXhb
IG5hbWUgXSB8fCBuYW1lOwotICAgICAgICAgICAgaG9va3MgPSBqUXVlcnkucHJvcEhvb2tzWyBu
YW1lIF07Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7
Ci0gICAgICAgICAgICBpZiAoIGhvb2tzICYmICJzZXQiIGluIGhvb2tzICYmCi0gICAgICAgICAg
ICAgICAgKCByZXQgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBuYW1lICkgKSAhPT0gdW5kZWZp
bmVkICkgewotICAgICAgICAgICAgICAgIHJldHVybiByZXQ7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIHJldHVybiAoIGVsZW1bIG5hbWUgXSA9IHZhbHVlICk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBpZiAoIGhvb2tzICYmICJnZXQiIGluIGhvb2tzICYmICggcmV0ID0gaG9va3MuZ2V0
KCBlbGVtLCBuYW1lICkgKSAhPT0gbnVsbCApIHsKLSAgICAgICAgICAgIHJldHVybiByZXQ7Ci0g
ICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZWxlbVsgbmFtZSBdOwotICAgIH0sCi0KLSAgICBw
cm9wSG9va3M6IHsKLSAgICAgICAgdGFiSW5kZXg6IHsKLSAgICAgICAgICAgIGdldDogZnVuY3Rp
b24oIGVsZW0gKSB7Ci0KLSAgICAgICAgICAgICAgICAvLyBlbGVtLnRhYkluZGV4IGRvZXNuJ3Qg
YWx3YXlzIHJldHVybiB0aGUKLSAgICAgICAgICAgICAgICAvLyBjb3JyZWN0IHZhbHVlIHdoZW4g
aXQgaGFzbid0IGJlZW4gZXhwbGljaXRseSBzZXQKLSAgICAgICAgICAgICAgICAvLyBodHRwOi8v
Zmx1aWRwcm9qZWN0Lm9yZy9ibG9nLzIwMDgvMDEvMDkvZ2V0dGluZy1zZXR0aW5nLWFuZC1yZW1v
dmluZy10YWJpbmRleC12YWx1ZXMtd2l0aC1qYXZhc2NyaXB0LwotICAgICAgICAgICAgICAgIC8v
IFVzZSBwcm9wZXIgYXR0cmlidXRlIHJldHJpZXZhbCgjMTIwNzIpCi0gICAgICAgICAgICAgICAg
dmFyIHRhYmluZGV4ID0galF1ZXJ5LmZpbmQuYXR0ciggZWxlbSwgInRhYmluZGV4IiApOwotCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIHRhYmluZGV4ID8KLSAgICAgICAgICAgICAgICAgICAgcGFy
c2VJbnQoIHRhYmluZGV4LCAxMCApIDoKLSAgICAgICAgICAgICAgICAgICAgcmZvY3VzYWJsZS50
ZXN0KCBlbGVtLm5vZGVOYW1lICkgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgIHJjbGlja2Fi
bGUudGVzdCggZWxlbS5ub2RlTmFtZSApICYmIGVsZW0uaHJlZiA/Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMCA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLTE7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgcHJvcEZpeDogewotICAgICAgICAiZm9y
IjogImh0bWxGb3IiLAotICAgICAgICAiY2xhc3MiOiAiY2xhc3NOYW1lIgotICAgIH0KLX0gKTsK
LQotLy8gU3VwcG9ydDogSUUgPD0xMSBvbmx5Ci0vLyBBY2Nlc3NpbmcgdGhlIHNlbGVjdGVkSW5k
ZXggcHJvcGVydHkKLS8vIGZvcmNlcyB0aGUgYnJvd3NlciB0byByZXNwZWN0IHNldHRpbmcgc2Vs
ZWN0ZWQKLS8vIG9uIHRoZSBvcHRpb24KLS8vIFRoZSBnZXR0ZXIgZW5zdXJlcyBhIGRlZmF1bHQg
b3B0aW9uIGlzIHNlbGVjdGVkCi0vLyB3aGVuIGluIGFuIG9wdGdyb3VwCi1pZiAoICFzdXBwb3J0
Lm9wdFNlbGVjdGVkICkgewotICAgIGpRdWVyeS5wcm9wSG9va3Muc2VsZWN0ZWQgPSB7Ci0gICAg
ICAgIGdldDogZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgICAgICAgICB2YXIgcGFyZW50ID0gZWxl
bS5wYXJlbnROb2RlOwotICAgICAgICAgICAgaWYgKCBwYXJlbnQgJiYgcGFyZW50LnBhcmVudE5v
ZGUgKSB7Ci0gICAgICAgICAgICAgICAgcGFyZW50LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9LAotICAg
ICAgICBzZXQ6IGZ1bmN0aW9uKCBlbGVtICkgewotICAgICAgICAgICAgdmFyIHBhcmVudCA9IGVs
ZW0ucGFyZW50Tm9kZTsKLSAgICAgICAgICAgIGlmICggcGFyZW50ICkgewotICAgICAgICAgICAg
ICAgIHBhcmVudC5zZWxlY3RlZEluZGV4OwotCi0gICAgICAgICAgICAgICAgaWYgKCBwYXJlbnQu
cGFyZW50Tm9kZSApIHsKLSAgICAgICAgICAgICAgICAgICAgcGFyZW50LnBhcmVudE5vZGUuc2Vs
ZWN0ZWRJbmRleDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICB9OwotfQotCi1qUXVlcnkuZWFjaCggWwotICAgICJ0YWJJbmRleCIsCi0gICAgInJlYWRP
bmx5IiwKLSAgICAibWF4TGVuZ3RoIiwKLSAgICAiY2VsbFNwYWNpbmciLAotICAgICJjZWxsUGFk
ZGluZyIsCi0gICAgInJvd1NwYW4iLAotICAgICJjb2xTcGFuIiwKLSAgICAidXNlTWFwIiwKLSAg
ICAiZnJhbWVCb3JkZXIiLAotICAgICJjb250ZW50RWRpdGFibGUiCi1dLCBmdW5jdGlvbigpIHsK
LSAgICBqUXVlcnkucHJvcEZpeFsgdGhpcy50b0xvd2VyQ2FzZSgpIF0gPSB0aGlzOwotfSApOwot
Ci0KLQotCi12YXIgcmNsYXNzID0gL1tcdFxyXG5cZl0vZzsKLQotZnVuY3Rpb24gZ2V0Q2xhc3Mo
IGVsZW0gKSB7Ci0gICAgcmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlICYmIGVsZW0uZ2V0QXR0cmli
dXRlKCAiY2xhc3MiICkgfHwgIiI7Ci19Ci0KLWpRdWVyeS5mbi5leHRlbmQoIHsKLSAgICBhZGRD
bGFzczogZnVuY3Rpb24oIHZhbHVlICkgewotICAgICAgICB2YXIgY2xhc3NlcywgZWxlbSwgY3Vy
LCBjdXJWYWx1ZSwgY2xhenosIGosIGZpbmFsVmFsdWUsCi0gICAgICAgICAgICBpID0gMDsKLQot
ICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSApICkgewotICAgICAgICAgICAg
cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGogKSB7Ci0gICAgICAgICAgICAgICAgalF1ZXJ5
KCB0aGlzICkuYWRkQ2xhc3MoIHZhbHVlLmNhbGwoIHRoaXMsIGosIGdldENsYXNzKCB0aGlzICkg
KSApOwotICAgICAgICAgICAgfSApOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCB0eXBlb2Yg
dmFsdWUgPT09ICJzdHJpbmciICYmIHZhbHVlICkgewotICAgICAgICAgICAgY2xhc3NlcyA9IHZh
bHVlLm1hdGNoKCBybm90d2hpdGUgKSB8fCBbXTsKLQotICAgICAgICAgICAgd2hpbGUgKCAoIGVs
ZW0gPSB0aGlzWyBpKysgXSApICkgewotICAgICAgICAgICAgICAgIGN1clZhbHVlID0gZ2V0Q2xh
c3MoIGVsZW0gKTsKLSAgICAgICAgICAgICAgICBjdXIgPSBlbGVtLm5vZGVUeXBlID09PSAxICYm
Ci0gICAgICAgICAgICAgICAgICAgICggIiAiICsgY3VyVmFsdWUgKyAiICIgKS5yZXBsYWNlKCBy
Y2xhc3MsICIgIiApOwotCi0gICAgICAgICAgICAgICAgaWYgKCBjdXIgKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGogPSAwOwotICAgICAgICAgICAgICAgICAgICB3aGlsZSAoICggY2xhenogPSBj
bGFzc2VzWyBqKysgXSApICkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBjdXIuaW5k
ZXhPZiggIiAiICsgY2xhenogKyAiICIgKSA8IDAgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY3VyICs9IGNsYXp6ICsgIiAiOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gT25seSBhc3NpZ24g
aWYgZGlmZmVyZW50IHRvIGF2b2lkIHVubmVlZGVkIHJlbmRlcmluZy4KLSAgICAgICAgICAgICAg
ICAgICAgZmluYWxWYWx1ZSA9IGpRdWVyeS50cmltKCBjdXIgKTsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKCBjdXJWYWx1ZSAhPT0gZmluYWxWYWx1ZSApIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGVsZW0uc2V0QXR0cmlidXRlKCAiY2xhc3MiLCBmaW5hbFZhbHVlICk7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LQotICAgICAgICByZXR1cm4gdGhpczsKLSAgICB9LAotCi0gICAgcmVtb3ZlQ2xhc3M6IGZ1bmN0
aW9uKCB2YWx1ZSApIHsKLSAgICAgICAgdmFyIGNsYXNzZXMsIGVsZW0sIGN1ciwgY3VyVmFsdWUs
IGNsYXp6LCBqLCBmaW5hbFZhbHVlLAotICAgICAgICAgICAgaSA9IDA7Ci0KLSAgICAgICAgaWYg
KCBqUXVlcnkuaXNGdW5jdGlvbiggdmFsdWUgKSApIHsKLSAgICAgICAgICAgIHJldHVybiB0aGlz
LmVhY2goIGZ1bmN0aW9uKCBqICkgewotICAgICAgICAgICAgICAgIGpRdWVyeSggdGhpcyApLnJl
bW92ZUNsYXNzKCB2YWx1ZS5jYWxsKCB0aGlzLCBqLCBnZXRDbGFzcyggdGhpcyApICkgKTsKLSAg
ICAgICAgICAgIH0gKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICggIWFyZ3VtZW50cy5sZW5n
dGggKSB7Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5hdHRyKCAiY2xhc3MiLCAiIiApOwotICAg
ICAgICB9Ci0KLSAgICAgICAgaWYgKCB0eXBlb2YgdmFsdWUgPT09ICJzdHJpbmciICYmIHZhbHVl
ICkgewotICAgICAgICAgICAgY2xhc3NlcyA9IHZhbHVlLm1hdGNoKCBybm90d2hpdGUgKSB8fCBb
XTsKLQotICAgICAgICAgICAgd2hpbGUgKCAoIGVsZW0gPSB0aGlzWyBpKysgXSApICkgewotICAg
ICAgICAgICAgICAgIGN1clZhbHVlID0gZ2V0Q2xhc3MoIGVsZW0gKTsKLQotICAgICAgICAgICAg
ICAgIC8vIFRoaXMgZXhwcmVzc2lvbiBpcyBoZXJlIGZvciBiZXR0ZXIgY29tcHJlc3NpYmlsaXR5
IChzZWUgYWRkQ2xhc3MpCi0gICAgICAgICAgICAgICAgY3VyID0gZWxlbS5ub2RlVHlwZSA9PT0g
MSAmJgotICAgICAgICAgICAgICAgICAgICAoICIgIiArIGN1clZhbHVlICsgIiAiICkucmVwbGFj
ZSggcmNsYXNzLCAiICIgKTsKLQotICAgICAgICAgICAgICAgIGlmICggY3VyICkgewotICAgICAg
ICAgICAgICAgICAgICBqID0gMDsKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCAoIGNsYXp6
ID0gY2xhc3Nlc1sgaisrIF0gKSApIHsKLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVt
b3ZlICphbGwqIGluc3RhbmNlcwotICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCBjdXIu
aW5kZXhPZiggIiAiICsgY2xhenogKyAiICIgKSA+IC0xICkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGN1ciA9IGN1ci5yZXBsYWNlKCAiICIgKyBjbGF6eiArICIgIiwgIiAiICk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgICAgICAvLyBPbmx5IGFzc2lnbiBpZiBkaWZmZXJlbnQgdG8gYXZvaWQgdW5uZWVk
ZWQgcmVuZGVyaW5nLgotICAgICAgICAgICAgICAgICAgICBmaW5hbFZhbHVlID0galF1ZXJ5LnRy
aW0oIGN1ciApOwotICAgICAgICAgICAgICAgICAgICBpZiAoIGN1clZhbHVlICE9PSBmaW5hbFZh
bHVlICkgewotICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5zZXRBdHRyaWJ1dGUoICJjbGFz
cyIsIGZpbmFsVmFsdWUgKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiB0aGlzOwotICAg
IH0sCi0KLSAgICB0b2dnbGVDbGFzczogZnVuY3Rpb24oIHZhbHVlLCBzdGF0ZVZhbCApIHsKLSAg
ICAgICAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7Ci0KLSAgICAgICAgaWYgKCB0eXBlb2Ygc3Rh
dGVWYWwgPT09ICJib29sZWFuIiAmJiB0eXBlID09PSAic3RyaW5nIiApIHsKLSAgICAgICAgICAg
IHJldHVybiBzdGF0ZVZhbCA/IHRoaXMuYWRkQ2xhc3MoIHZhbHVlICkgOiB0aGlzLnJlbW92ZUNs
YXNzKCB2YWx1ZSApOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlv
biggdmFsdWUgKSApIHsKLSAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBp
ICkgewotICAgICAgICAgICAgICAgIGpRdWVyeSggdGhpcyApLnRvZ2dsZUNsYXNzKAotICAgICAg
ICAgICAgICAgICAgICB2YWx1ZS5jYWxsKCB0aGlzLCBpLCBnZXRDbGFzcyggdGhpcyApLCBzdGF0
ZVZhbCApLAotICAgICAgICAgICAgICAgICAgICBzdGF0ZVZhbAotICAgICAgICAgICAgICAgICk7
Ci0gICAgICAgICAgICB9ICk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gdGhpcy5lYWNo
KCBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIHZhciBjbGFzc05hbWUsIGksIHNlbGYsIGNsYXNz
TmFtZXM7Ci0KLSAgICAgICAgICAgIGlmICggdHlwZSA9PT0gInN0cmluZyIgKSB7Ci0KLSAgICAg
ICAgICAgICAgICAvLyBUb2dnbGUgaW5kaXZpZHVhbCBjbGFzcyBuYW1lcwotICAgICAgICAgICAg
ICAgIGkgPSAwOwotICAgICAgICAgICAgICAgIHNlbGYgPSBqUXVlcnkoIHRoaXMgKTsKLSAgICAg
ICAgICAgICAgICBjbGFzc05hbWVzID0gdmFsdWUubWF0Y2goIHJub3R3aGl0ZSApIHx8IFtdOwot
Ci0gICAgICAgICAgICAgICAgd2hpbGUgKCAoIGNsYXNzTmFtZSA9IGNsYXNzTmFtZXNbIGkrKyBd
ICkgKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgZWFjaCBjbGFzc05hbWUgZ2l2
ZW4sIHNwYWNlIHNlcGFyYXRlZCBsaXN0Ci0gICAgICAgICAgICAgICAgICAgIGlmICggc2VsZi5o
YXNDbGFzcyggY2xhc3NOYW1lICkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJl
bW92ZUNsYXNzKCBjbGFzc05hbWUgKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYWRkQ2xhc3MoIGNsYXNzTmFtZSApOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBUb2dn
bGUgd2hvbGUgY2xhc3MgbmFtZQotICAgICAgICAgICAgfSBlbHNlIGlmICggdmFsdWUgPT09IHVu
ZGVmaW5lZCB8fCB0eXBlID09PSAiYm9vbGVhbiIgKSB7Ci0gICAgICAgICAgICAgICAgY2xhc3NO
YW1lID0gZ2V0Q2xhc3MoIHRoaXMgKTsKLSAgICAgICAgICAgICAgICBpZiAoIGNsYXNzTmFtZSAp
IHsKLQotICAgICAgICAgICAgICAgICAgICAvLyBTdG9yZSBjbGFzc05hbWUgaWYgc2V0Ci0gICAg
ICAgICAgICAgICAgICAgIGRhdGFQcml2LnNldCggdGhpcywgIl9fY2xhc3NOYW1lX18iLCBjbGFz
c05hbWUgKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBJZiB0aGUg
ZWxlbWVudCBoYXMgYSBjbGFzcyBuYW1lIG9yIGlmIHdlJ3JlIHBhc3NlZCBgZmFsc2VgLAotICAg
ICAgICAgICAgICAgIC8vIHRoZW4gcmVtb3ZlIHRoZSB3aG9sZSBjbGFzc25hbWUgKGlmIHRoZXJl
IHdhcyBvbmUsIHRoZSBhYm92ZSBzYXZlZCBpdCkuCi0gICAgICAgICAgICAgICAgLy8gT3RoZXJ3
aXNlIGJyaW5nIGJhY2sgd2hhdGV2ZXIgd2FzIHByZXZpb3VzbHkgc2F2ZWQgKGlmIGFueXRoaW5n
KSwKLSAgICAgICAgICAgICAgICAvLyBmYWxsaW5nIGJhY2sgdG8gdGhlIGVtcHR5IHN0cmluZyBp
ZiBub3RoaW5nIHdhcyBzdG9yZWQuCi0gICAgICAgICAgICAgICAgaWYgKCB0aGlzLnNldEF0dHJp
YnV0ZSApIHsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoICJjbGFzcyIs
Ci0gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWUgfHwgdmFsdWUgPT09IGZhbHNlID8K
LSAgICAgICAgICAgICAgICAgICAgICAgICIiIDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGRh
dGFQcml2LmdldCggdGhpcywgIl9fY2xhc3NOYW1lX18iICkgfHwgIiIKLSAgICAgICAgICAgICAg
ICAgICAgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gKTsK
LSAgICB9LAotCi0gICAgaGFzQ2xhc3M6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKLSAgICAgICAg
dmFyIGNsYXNzTmFtZSwgZWxlbSwKLSAgICAgICAgICAgIGkgPSAwOwotCi0gICAgICAgIGNsYXNz
TmFtZSA9ICIgIiArIHNlbGVjdG9yICsgIiAiOwotICAgICAgICB3aGlsZSAoICggZWxlbSA9IHRo
aXNbIGkrKyBdICkgKSB7Ci0gICAgICAgICAgICBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgJiYK
LSAgICAgICAgICAgICAgICAoICIgIiArIGdldENsYXNzKCBlbGVtICkgKyAiICIgKS5yZXBsYWNl
KCByY2xhc3MsICIgIiApCi0gICAgICAgICAgICAgICAgICAgIC5pbmRleE9mKCBjbGFzc05hbWUg
KSA+IC0xCi0gICAgICAgICAgICApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19
ICk7Ci0KLQotCi0KLXZhciBycmV0dXJuID0gL1xyL2csCi0gICAgcnNwYWNlcyA9IC9bXHgyMFx0
XHJcblxmXSsvZzsKLQotalF1ZXJ5LmZuLmV4dGVuZCggewotICAgIHZhbDogZnVuY3Rpb24oIHZh
bHVlICkgewotICAgICAgICB2YXIgaG9va3MsIHJldCwgaXNGdW5jdGlvbiwKLSAgICAgICAgICAg
IGVsZW0gPSB0aGlzWyAwIF07Ci0KLSAgICAgICAgaWYgKCAhYXJndW1lbnRzLmxlbmd0aCApIHsK
LSAgICAgICAgICAgIGlmICggZWxlbSApIHsKLSAgICAgICAgICAgICAgICBob29rcyA9IGpRdWVy
eS52YWxIb29rc1sgZWxlbS50eXBlIF0gfHwKLSAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LnZh
bEhvb2tzWyBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgXTsKLQotICAgICAgICAgICAgICAg
IGlmICggaG9va3MgJiYKLSAgICAgICAgICAgICAgICAgICAgImdldCIgaW4gaG9va3MgJiYKLSAg
ICAgICAgICAgICAgICAgICAgKCByZXQgPSBob29rcy5nZXQoIGVsZW0sICJ2YWx1ZSIgKSApICE9
PSB1bmRlZmluZWQKLSAgICAgICAgICAgICAgICApIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHJldDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXQgPSBlbGVt
LnZhbHVlOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiByZXQgPT09ICJzdHJpbmci
ID8KLQotICAgICAgICAgICAgICAgICAgICAvLyBIYW5kbGUgbW9zdCBjb21tb24gc3RyaW5nIGNh
c2VzCi0gICAgICAgICAgICAgICAgICAgIHJldC5yZXBsYWNlKCBycmV0dXJuLCAiIiApIDoKLQot
ICAgICAgICAgICAgICAgICAgICAvLyBIYW5kbGUgY2FzZXMgd2hlcmUgdmFsdWUgaXMgbnVsbC91
bmRlZiBvciBudW1iZXIKLSAgICAgICAgICAgICAgICAgICAgcmV0ID09IG51bGwgPyAiIiA6IHJl
dDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAg
ICAgICAgaXNGdW5jdGlvbiA9IGpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSApOwotCi0gICAgICAg
IHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkgewotICAgICAgICAgICAgdmFyIHZhbDsK
LQotICAgICAgICAgICAgaWYgKCB0aGlzLm5vZGVUeXBlICE9PSAxICkgewotICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCBpc0Z1bmN0aW9u
ICkgewotICAgICAgICAgICAgICAgIHZhbCA9IHZhbHVlLmNhbGwoIHRoaXMsIGksIGpRdWVyeSgg
dGhpcyApLnZhbCgpICk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHZh
bCA9IHZhbHVlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBUcmVhdCBudWxsL3Vu
ZGVmaW5lZCBhcyAiIjsgY29udmVydCBudW1iZXJzIHRvIHN0cmluZwotICAgICAgICAgICAgaWYg
KCB2YWwgPT0gbnVsbCApIHsKLSAgICAgICAgICAgICAgICB2YWwgPSAiIjsKLQotICAgICAgICAg
ICAgfSBlbHNlIGlmICggdHlwZW9mIHZhbCA9PT0gIm51bWJlciIgKSB7Ci0gICAgICAgICAgICAg
ICAgdmFsICs9ICIiOwotCi0gICAgICAgICAgICB9IGVsc2UgaWYgKCBqUXVlcnkuaXNBcnJheSgg
dmFsICkgKSB7Ci0gICAgICAgICAgICAgICAgdmFsID0galF1ZXJ5Lm1hcCggdmFsLCBmdW5jdGlv
biggdmFsdWUgKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSA9PSBudWxsID8g
IiIgOiB2YWx1ZSArICIiOwotICAgICAgICAgICAgICAgIH0gKTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgaG9va3MgPSBqUXVlcnkudmFsSG9va3NbIHRoaXMudHlwZSBdIHx8IGpRdWVy
eS52YWxIb29rc1sgdGhpcy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIF07Ci0KLSAgICAgICAgICAg
IC8vIElmIHNldCByZXR1cm5zIHVuZGVmaW5lZCwgZmFsbCBiYWNrIHRvIG5vcm1hbCBzZXR0aW5n
Ci0gICAgICAgICAgICBpZiAoICFob29rcyB8fCAhKCAic2V0IiBpbiBob29rcyApIHx8IGhvb2tz
LnNldCggdGhpcywgdmFsLCAidmFsdWUiICkgPT09IHVuZGVmaW5lZCApIHsKLSAgICAgICAgICAg
ICAgICB0aGlzLnZhbHVlID0gdmFsOwotICAgICAgICAgICAgfQotICAgICAgICB9ICk7Ci0gICAg
fQotfSApOwotCi1qUXVlcnkuZXh0ZW5kKCB7Ci0gICAgdmFsSG9va3M6IHsKLSAgICAgICAgb3B0
aW9uOiB7Ci0gICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVtICkgewotCi0gICAgICAgICAg
ICAgICAgdmFyIHZhbCA9IGpRdWVyeS5maW5kLmF0dHIoIGVsZW0sICJ2YWx1ZSIgKTsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gdmFsICE9IG51bGwgPwotICAgICAgICAgICAgICAgICAgICB2YWwg
OgotCi0gICAgICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQ6IElFMTAtMTErCi0gICAgICAgICAg
ICAgICAgICAgIC8vIG9wdGlvbi50ZXh0IHRocm93cyBleGNlcHRpb25zICgjMTQ2ODYsICMxNDg1
OCkKLSAgICAgICAgICAgICAgICAgICAgLy8gU3RyaXAgYW5kIGNvbGxhcHNlIHdoaXRlc3BhY2UK
LSAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy8jc3Ry
aXAtYW5kLWNvbGxhcHNlLXdoaXRlc3BhY2UKLSAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LnRy
aW0oIGpRdWVyeS50ZXh0KCBlbGVtICkgKS5yZXBsYWNlKCByc3BhY2VzLCAiICIgKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgc2VsZWN0OiB7Ci0gICAgICAgICAgICBnZXQ6
IGZ1bmN0aW9uKCBlbGVtICkgewotICAgICAgICAgICAgICAgIHZhciB2YWx1ZSwgb3B0aW9uLAot
ICAgICAgICAgICAgICAgICAgICBvcHRpb25zID0gZWxlbS5vcHRpb25zLAotICAgICAgICAgICAg
ICAgICAgICBpbmRleCA9IGVsZW0uc2VsZWN0ZWRJbmRleCwKLSAgICAgICAgICAgICAgICAgICAg
b25lID0gZWxlbS50eXBlID09PSAic2VsZWN0LW9uZSIgfHwgaW5kZXggPCAwLAotICAgICAgICAg
ICAgICAgICAgICB2YWx1ZXMgPSBvbmUgPyBudWxsIDogW10sCi0gICAgICAgICAgICAgICAgICAg
IG1heCA9IG9uZSA/IGluZGV4ICsgMSA6IG9wdGlvbnMubGVuZ3RoLAotICAgICAgICAgICAgICAg
ICAgICBpID0gaW5kZXggPCAwID8KLSAgICAgICAgICAgICAgICAgICAgICAgIG1heCA6Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBvbmUgPyBpbmRleCA6IDA7Ci0KLSAgICAgICAgICAgICAgICAv
LyBMb29wIHRocm91Z2ggYWxsIHRoZSBzZWxlY3RlZCBvcHRpb25zCi0gICAgICAgICAgICAgICAg
Zm9yICggOyBpIDwgbWF4OyBpKysgKSB7Ci0gICAgICAgICAgICAgICAgICAgIG9wdGlvbiA9IG9w
dGlvbnNbIGkgXTsKLQotICAgICAgICAgICAgICAgICAgICAvLyBJRTgtOSBkb2Vzbid0IHVwZGF0
ZSBzZWxlY3RlZCBhZnRlciBmb3JtIHJlc2V0ICgjMjU1MSkKLSAgICAgICAgICAgICAgICAgICAg
aWYgKCAoIG9wdGlvbi5zZWxlY3RlZCB8fCBpID09PSBpbmRleCApICYmCi0KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBEb24ndCByZXR1cm4gb3B0aW9ucyB0aGF0IGFyZSBkaXNhYmxl
ZCBvciBpbiBhIGRpc2FibGVkIG9wdGdyb3VwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
KCBzdXBwb3J0Lm9wdERpc2FibGVkID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IW9wdGlvbi5kaXNhYmxlZCA6IG9wdGlvbi5nZXRBdHRyaWJ1dGUoICJkaXNhYmxlZCIgKSA9PT0g
bnVsbCApICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAhb3B0aW9uLnBhcmVudE5v
ZGUuZGlzYWJsZWQgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWpRdWVyeS5u
b2RlTmFtZSggb3B0aW9uLnBhcmVudE5vZGUsICJvcHRncm91cCIgKSApICkgewotCi0gICAgICAg
ICAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIHNwZWNpZmljIHZhbHVlIGZvciB0aGUgb3B0aW9u
Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGpRdWVyeSggb3B0aW9uICkudmFsKCk7
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgYW4gYXJyYXkgZm9y
IG9uZSBzZWxlY3RzCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG9uZSApIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIE11bHRpLVNlbGVjdHMgcmV0dXJu
IGFuIGFycmF5Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMucHVzaCggdmFsdWUgKTsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIHJldHVybiB2YWx1ZXM7Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBzZXQ6IGZ1
bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHsKLSAgICAgICAgICAgICAgICB2YXIgb3B0aW9uU2V0LCBv
cHRpb24sCi0gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgPSBlbGVtLm9wdGlvbnMsCi0gICAg
ICAgICAgICAgICAgICAgIHZhbHVlcyA9IGpRdWVyeS5tYWtlQXJyYXkoIHZhbHVlICksCi0gICAg
ICAgICAgICAgICAgICAgIGkgPSBvcHRpb25zLmxlbmd0aDsKLQotICAgICAgICAgICAgICAgIHdo
aWxlICggaS0tICkgewotICAgICAgICAgICAgICAgICAgICBvcHRpb24gPSBvcHRpb25zWyBpIF07
Ci0gICAgICAgICAgICAgICAgICAgIGlmICggb3B0aW9uLnNlbGVjdGVkID0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIGpRdWVyeS5pbkFycmF5KCBqUXVlcnkudmFsSG9va3Mub3B0aW9uLmdldCgg
b3B0aW9uICksIHZhbHVlcyApID4gLTEKLSAgICAgICAgICAgICAgICAgICAgKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBvcHRpb25TZXQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gRm9yY2UgYnJvd3NlcnMg
dG8gYmVoYXZlIGNvbnNpc3RlbnRseSB3aGVuIG5vbi1tYXRjaGluZyB2YWx1ZSBpcyBzZXQKLSAg
ICAgICAgICAgICAgICBpZiAoICFvcHRpb25TZXQgKSB7Ci0gICAgICAgICAgICAgICAgICAgIGVs
ZW0uc2VsZWN0ZWRJbmRleCA9IC0xOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICByZXR1cm4gdmFsdWVzOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfSApOwot
Ci0vLyBSYWRpb3MgYW5kIGNoZWNrYm94ZXMgZ2V0dGVyL3NldHRlcgotalF1ZXJ5LmVhY2goIFsg
InJhZGlvIiwgImNoZWNrYm94IiBdLCBmdW5jdGlvbigpIHsKLSAgICBqUXVlcnkudmFsSG9va3Nb
IHRoaXMgXSA9IHsKLSAgICAgICAgc2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7Ci0gICAg
ICAgICAgICBpZiAoIGpRdWVyeS5pc0FycmF5KCB2YWx1ZSApICkgewotICAgICAgICAgICAgICAg
IHJldHVybiAoIGVsZW0uY2hlY2tlZCA9IGpRdWVyeS5pbkFycmF5KCBqUXVlcnkoIGVsZW0gKS52
YWwoKSwgdmFsdWUgKSA+IC0xICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Owot
ICAgIGlmICggIXN1cHBvcnQuY2hlY2tPbiApIHsKLSAgICAgICAgalF1ZXJ5LnZhbEhvb2tzWyB0
aGlzIF0uZ2V0ID0gZnVuY3Rpb24oIGVsZW0gKSB7Ci0gICAgICAgICAgICByZXR1cm4gZWxlbS5n
ZXRBdHRyaWJ1dGUoICJ2YWx1ZSIgKSA9PT0gbnVsbCA/ICJvbiIgOiBlbGVtLnZhbHVlOwotICAg
ICAgICB9OwotICAgIH0KLX0gKTsKLQotCi0KLQotLy8gUmV0dXJuIGpRdWVyeSBmb3IgYXR0cmli
dXRlcy1vbmx5IGluY2x1c2lvbgotCi0KLXZhciByZm9jdXNNb3JwaCA9IC9eKD86Zm9jdXNpbmZv
Y3VzfGZvY3Vzb3V0Ymx1cikkLzsKLQotalF1ZXJ5LmV4dGVuZCggalF1ZXJ5LmV2ZW50LCB7Ci0K
LSAgICB0cmlnZ2VyOiBmdW5jdGlvbiggZXZlbnQsIGRhdGEsIGVsZW0sIG9ubHlIYW5kbGVycyAp
IHsKLQotICAgICAgICB2YXIgaSwgY3VyLCB0bXAsIGJ1YmJsZVR5cGUsIG9udHlwZSwgaGFuZGxl
LCBzcGVjaWFsLAotICAgICAgICAgICAgZXZlbnRQYXRoID0gWyBlbGVtIHx8IGRvY3VtZW50IF0s
Ci0gICAgICAgICAgICB0eXBlID0gaGFzT3duLmNhbGwoIGV2ZW50LCAidHlwZSIgKSA/IGV2ZW50
LnR5cGUgOiBldmVudCwKLSAgICAgICAgICAgIG5hbWVzcGFjZXMgPSBoYXNPd24uY2FsbCggZXZl
bnQsICJuYW1lc3BhY2UiICkgPyBldmVudC5uYW1lc3BhY2Uuc3BsaXQoICIuIiApIDogW107Ci0K
LSAgICAgICAgY3VyID0gdG1wID0gZWxlbSA9IGVsZW0gfHwgZG9jdW1lbnQ7Ci0KLSAgICAgICAg
Ly8gRG9uJ3QgZG8gZXZlbnRzIG9uIHRleHQgYW5kIGNvbW1lbnQgbm9kZXMKLSAgICAgICAgaWYg
KCBlbGVtLm5vZGVUeXBlID09PSAzIHx8IGVsZW0ubm9kZVR5cGUgPT09IDggKSB7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBmb2N1cy9ibHVyIG1vcnBocyB0
byBmb2N1c2luL291dDsgZW5zdXJlIHdlJ3JlIG5vdCBmaXJpbmcgdGhlbSByaWdodCBub3cKLSAg
ICAgICAgaWYgKCByZm9jdXNNb3JwaC50ZXN0KCB0eXBlICsgalF1ZXJ5LmV2ZW50LnRyaWdnZXJl
ZCApICkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCB0
eXBlLmluZGV4T2YoICIuIiApID4gLTEgKSB7Ci0KLSAgICAgICAgICAgIC8vIE5hbWVzcGFjZWQg
dHJpZ2dlcjsgY3JlYXRlIGEgcmVnZXhwIHRvIG1hdGNoIGV2ZW50IHR5cGUgaW4gaGFuZGxlKCkK
LSAgICAgICAgICAgIG5hbWVzcGFjZXMgPSB0eXBlLnNwbGl0KCAiLiIgKTsKLSAgICAgICAgICAg
IHR5cGUgPSBuYW1lc3BhY2VzLnNoaWZ0KCk7Ci0gICAgICAgICAgICBuYW1lc3BhY2VzLnNvcnQo
KTsKLSAgICAgICAgfQotICAgICAgICBvbnR5cGUgPSB0eXBlLmluZGV4T2YoICI6IiApIDwgMCAm
JiAib24iICsgdHlwZTsKLQotICAgICAgICAvLyBDYWxsZXIgY2FuIHBhc3MgaW4gYSBqUXVlcnku
RXZlbnQgb2JqZWN0LCBPYmplY3QsIG9yIGp1c3QgYW4gZXZlbnQgdHlwZSBzdHJpbmcKLSAgICAg
ICAgZXZlbnQgPSBldmVudFsgalF1ZXJ5LmV4cGFuZG8gXSA/Ci0gICAgICAgICAgICBldmVudCA6
Ci0gICAgICAgICAgICBuZXcgalF1ZXJ5LkV2ZW50KCB0eXBlLCB0eXBlb2YgZXZlbnQgPT09ICJv
YmplY3QiICYmIGV2ZW50ICk7Ci0KLSAgICAgICAgLy8gVHJpZ2dlciBiaXRtYXNrOiAmIDEgZm9y
IG5hdGl2ZSBoYW5kbGVyczsgJiAyIGZvciBqUXVlcnkgKGFsd2F5cyB0cnVlKQotICAgICAgICBl
dmVudC5pc1RyaWdnZXIgPSBvbmx5SGFuZGxlcnMgPyAyIDogMzsKLSAgICAgICAgZXZlbnQubmFt
ZXNwYWNlID0gbmFtZXNwYWNlcy5qb2luKCAiLiIgKTsKLSAgICAgICAgZXZlbnQucm5hbWVzcGFj
ZSA9IGV2ZW50Lm5hbWVzcGFjZSA/Ci0gICAgICAgICAgICBuZXcgUmVnRXhwKCAiKF58XFwuKSIg
KyBuYW1lc3BhY2VzLmpvaW4oICJcXC4oPzouKlxcLnwpIiApICsgIihcXC58JCkiICkgOgotICAg
ICAgICAgICAgbnVsbDsKLQotICAgICAgICAvLyBDbGVhbiB1cCB0aGUgZXZlbnQgaW4gY2FzZSBp
dCBpcyBiZWluZyByZXVzZWQKLSAgICAgICAgZXZlbnQucmVzdWx0ID0gdW5kZWZpbmVkOwotICAg
ICAgICBpZiAoICFldmVudC50YXJnZXQgKSB7Ci0gICAgICAgICAgICBldmVudC50YXJnZXQgPSBl
bGVtOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQ2xvbmUgYW55IGluY29taW5nIGRhdGEgYW5k
IHByZXBlbmQgdGhlIGV2ZW50LCBjcmVhdGluZyB0aGUgaGFuZGxlciBhcmcgbGlzdAotICAgICAg
ICBkYXRhID0gZGF0YSA9PSBudWxsID8KLSAgICAgICAgICAgIFsgZXZlbnQgXSA6Ci0gICAgICAg
ICAgICBqUXVlcnkubWFrZUFycmF5KCBkYXRhLCBbIGV2ZW50IF0gKTsKLQotICAgICAgICAvLyBB
bGxvdyBzcGVjaWFsIGV2ZW50cyB0byBkcmF3IG91dHNpZGUgdGhlIGxpbmVzCi0gICAgICAgIHNw
ZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9OwotICAgICAgICBpZiAo
ICFvbmx5SGFuZGxlcnMgJiYgc3BlY2lhbC50cmlnZ2VyICYmIHNwZWNpYWwudHJpZ2dlci5hcHBs
eSggZWxlbSwgZGF0YSApID09PSBmYWxzZSApIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotCi0gICAgICAgIC8vIERldGVybWluZSBldmVudCBwcm9wYWdhdGlvbiBwYXRoIGluIGFk
dmFuY2UsIHBlciBXM0MgZXZlbnRzIHNwZWMgKCM5OTUxKQotICAgICAgICAvLyBCdWJibGUgdXAg
dG8gZG9jdW1lbnQsIHRoZW4gdG8gd2luZG93OyB3YXRjaCBmb3IgYSBnbG9iYWwgb3duZXJEb2N1
bWVudCB2YXIgKCM5NzI0KQotICAgICAgICBpZiAoICFvbmx5SGFuZGxlcnMgJiYgIXNwZWNpYWwu
bm9CdWJibGUgJiYgIWpRdWVyeS5pc1dpbmRvdyggZWxlbSApICkgewotCi0gICAgICAgICAgICBi
dWJibGVUeXBlID0gc3BlY2lhbC5kZWxlZ2F0ZVR5cGUgfHwgdHlwZTsKLSAgICAgICAgICAgIGlm
ICggIXJmb2N1c01vcnBoLnRlc3QoIGJ1YmJsZVR5cGUgKyB0eXBlICkgKSB7Ci0gICAgICAgICAg
ICAgICAgY3VyID0gY3VyLnBhcmVudE5vZGU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBm
b3IgKCA7IGN1cjsgY3VyID0gY3VyLnBhcmVudE5vZGUgKSB7Ci0gICAgICAgICAgICAgICAgZXZl
bnRQYXRoLnB1c2goIGN1ciApOwotICAgICAgICAgICAgICAgIHRtcCA9IGN1cjsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgLy8gT25seSBhZGQgd2luZG93IGlmIHdlIGdvdCB0byBkb2N1
bWVudCAoZS5nLiwgbm90IHBsYWluIG9iaiBvciBkZXRhY2hlZCBET00pCi0gICAgICAgICAgICBp
ZiAoIHRtcCA9PT0gKCBlbGVtLm93bmVyRG9jdW1lbnQgfHwgZG9jdW1lbnQgKSApIHsKLSAgICAg
ICAgICAgICAgICBldmVudFBhdGgucHVzaCggdG1wLmRlZmF1bHRWaWV3IHx8IHRtcC5wYXJlbnRX
aW5kb3cgfHwgd2luZG93ICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAv
LyBGaXJlIGhhbmRsZXJzIG9uIHRoZSBldmVudCBwYXRoCi0gICAgICAgIGkgPSAwOwotICAgICAg
ICB3aGlsZSAoICggY3VyID0gZXZlbnRQYXRoWyBpKysgXSApICYmICFldmVudC5pc1Byb3BhZ2F0
aW9uU3RvcHBlZCgpICkgewotCi0gICAgICAgICAgICBldmVudC50eXBlID0gaSA+IDEgPwotICAg
ICAgICAgICAgICAgIGJ1YmJsZVR5cGUgOgotICAgICAgICAgICAgICAgIHNwZWNpYWwuYmluZFR5
cGUgfHwgdHlwZTsKLQotICAgICAgICAgICAgLy8galF1ZXJ5IGhhbmRsZXIKLSAgICAgICAgICAg
IGhhbmRsZSA9ICggZGF0YVByaXYuZ2V0KCBjdXIsICJldmVudHMiICkgfHwge30gKVsgZXZlbnQu
dHlwZSBdICYmCi0gICAgICAgICAgICAgICAgZGF0YVByaXYuZ2V0KCBjdXIsICJoYW5kbGUiICk7
Ci0gICAgICAgICAgICBpZiAoIGhhbmRsZSApIHsKLSAgICAgICAgICAgICAgICBoYW5kbGUuYXBw
bHkoIGN1ciwgZGF0YSApOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBOYXRpdmUg
aGFuZGxlcgotICAgICAgICAgICAgaGFuZGxlID0gb250eXBlICYmIGN1clsgb250eXBlIF07Ci0g
ICAgICAgICAgICBpZiAoIGhhbmRsZSAmJiBoYW5kbGUuYXBwbHkgJiYgYWNjZXB0RGF0YSggY3Vy
ICkgKSB7Ci0gICAgICAgICAgICAgICAgZXZlbnQucmVzdWx0ID0gaGFuZGxlLmFwcGx5KCBjdXIs
IGRhdGEgKTsKLSAgICAgICAgICAgICAgICBpZiAoIGV2ZW50LnJlc3VsdCA9PT0gZmFsc2UgKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGV2ZW50LnR5cGUgPSB0
eXBlOwotCi0gICAgICAgIC8vIElmIG5vYm9keSBwcmV2ZW50ZWQgdGhlIGRlZmF1bHQgYWN0aW9u
LCBkbyBpdCBub3cKLSAgICAgICAgaWYgKCAhb25seUhhbmRsZXJzICYmICFldmVudC5pc0RlZmF1
bHRQcmV2ZW50ZWQoKSApIHsKLQotICAgICAgICAgICAgaWYgKCAoICFzcGVjaWFsLl9kZWZhdWx0
IHx8Ci0gICAgICAgICAgICAgICAgc3BlY2lhbC5fZGVmYXVsdC5hcHBseSggZXZlbnRQYXRoLnBv
cCgpLCBkYXRhICkgPT09IGZhbHNlICkgJiYKLSAgICAgICAgICAgICAgICBhY2NlcHREYXRhKCBl
bGVtICkgKSB7Ci0KLSAgICAgICAgICAgICAgICAvLyBDYWxsIGEgbmF0aXZlIERPTSBtZXRob2Qg
b24gdGhlIHRhcmdldCB3aXRoIHRoZSBzYW1lIG5hbWUgbmFtZSBhcyB0aGUgZXZlbnQuCi0gICAg
ICAgICAgICAgICAgLy8gRG9uJ3QgZG8gZGVmYXVsdCBhY3Rpb25zIG9uIHdpbmRvdywgdGhhdCdz
IHdoZXJlIGdsb2JhbCB2YXJpYWJsZXMgYmUgKCM2MTcwKQotICAgICAgICAgICAgICAgIGlmICgg
b250eXBlICYmIGpRdWVyeS5pc0Z1bmN0aW9uKCBlbGVtWyB0eXBlIF0gKSAmJiAhalF1ZXJ5Lmlz
V2luZG93KCBlbGVtICkgKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3QgcmUtdHJp
Z2dlciBhbiBvbkZPTyBldmVudCB3aGVuIHdlIGNhbGwgaXRzIEZPTygpIG1ldGhvZAotICAgICAg
ICAgICAgICAgICAgICB0bXAgPSBlbGVtWyBvbnR5cGUgXTsKLQotICAgICAgICAgICAgICAgICAg
ICBpZiAoIHRtcCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1bIG9udHlwZSBdID0g
bnVsbDsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIC8vIFBy
ZXZlbnQgcmUtdHJpZ2dlcmluZyBvZiB0aGUgc2FtZSBldmVudCwgc2luY2Ugd2UgYWxyZWFkeSBi
dWJibGVkIGl0IGFib3ZlCi0gICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVudC50cmlnZ2Vy
ZWQgPSB0eXBlOwotICAgICAgICAgICAgICAgICAgICBlbGVtWyB0eXBlIF0oKTsKLSAgICAgICAg
ICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCA9IHVuZGVmaW5lZDsKLQotICAgICAg
ICAgICAgICAgICAgICBpZiAoIHRtcCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1b
IG9udHlwZSBdID0gdG1wOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGV2ZW50LnJlc3Vs
dDsKLSAgICB9LAotCi0gICAgLy8gUGlnZ3liYWNrIG9uIGEgZG9ub3IgZXZlbnQgdG8gc2ltdWxh
dGUgYSBkaWZmZXJlbnQgb25lCi0gICAgLy8gVXNlZCBvbmx5IGZvciBgZm9jdXMoaW4gfCBvdXQp
YCBldmVudHMKLSAgICBzaW11bGF0ZTogZnVuY3Rpb24oIHR5cGUsIGVsZW0sIGV2ZW50ICkgewot
ICAgICAgICB2YXIgZSA9IGpRdWVyeS5leHRlbmQoCi0gICAgICAgICAgICBuZXcgalF1ZXJ5LkV2
ZW50KCksCi0gICAgICAgICAgICBldmVudCwKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICB0eXBlOiB0eXBlLAotICAgICAgICAgICAgICAgIGlzU2ltdWxhdGVkOiB0cnVlCi0gICAgICAg
ICAgICB9Ci0gICAgICAgICk7Ci0KLSAgICAgICAgalF1ZXJ5LmV2ZW50LnRyaWdnZXIoIGUsIG51
bGwsIGVsZW0gKTsKLSAgICB9Ci0KLX0gKTsKLQotalF1ZXJ5LmZuLmV4dGVuZCggewotCi0gICAg
dHJpZ2dlcjogZnVuY3Rpb24oIHR5cGUsIGRhdGEgKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLmVh
Y2goIGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnRyaWdnZXIoIHR5cGUs
IGRhdGEsIHRoaXMgKTsKLSAgICAgICAgfSApOwotICAgIH0sCi0gICAgdHJpZ2dlckhhbmRsZXI6
IGZ1bmN0aW9uKCB0eXBlLCBkYXRhICkgewotICAgICAgICB2YXIgZWxlbSA9IHRoaXNbIDAgXTsK
LSAgICAgICAgaWYgKCBlbGVtICkgewotICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5ldmVudC50
cmlnZ2VyKCB0eXBlLCBkYXRhLCBlbGVtLCB0cnVlICk7Ci0gICAgICAgIH0KLSAgICB9Ci19ICk7
Ci0KLQotalF1ZXJ5LmVhY2goICggImJsdXIgZm9jdXMgZm9jdXNpbiBmb2N1c291dCBsb2FkIHJl
c2l6ZSBzY3JvbGwgdW5sb2FkIGNsaWNrIGRibGNsaWNrICIgKwotICAgICJtb3VzZWRvd24gbW91
c2V1cCBtb3VzZW1vdmUgbW91c2VvdmVyIG1vdXNlb3V0IG1vdXNlZW50ZXIgbW91c2VsZWF2ZSAi
ICsKLSAgICAiY2hhbmdlIHNlbGVjdCBzdWJtaXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBlcnJv
ciBjb250ZXh0bWVudSIgKS5zcGxpdCggIiAiICksCi0gICAgZnVuY3Rpb24oIGksIG5hbWUgKSB7
Ci0KLSAgICAvLyBIYW5kbGUgZXZlbnQgYmluZGluZwotICAgIGpRdWVyeS5mblsgbmFtZSBdID0g
ZnVuY3Rpb24oIGRhdGEsIGZuICkgewotICAgICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA+
IDAgPwotICAgICAgICAgICAgdGhpcy5vbiggbmFtZSwgbnVsbCwgZGF0YSwgZm4gKSA6Ci0gICAg
ICAgICAgICB0aGlzLnRyaWdnZXIoIG5hbWUgKTsKLSAgICB9OwotfSApOwotCi1qUXVlcnkuZm4u
ZXh0ZW5kKCB7Ci0gICAgaG92ZXI6IGZ1bmN0aW9uKCBmbk92ZXIsIGZuT3V0ICkgewotICAgICAg
ICByZXR1cm4gdGhpcy5tb3VzZWVudGVyKCBmbk92ZXIgKS5tb3VzZWxlYXZlKCBmbk91dCB8fCBm
bk92ZXIgKTsKLSAgICB9Ci19ICk7Ci0KLQotCi0KLXN1cHBvcnQuZm9jdXNpbiA9ICJvbmZvY3Vz
aW4iIGluIHdpbmRvdzsKLQotCi0vLyBTdXBwb3J0OiBGaXJlZm94Ci0vLyBGaXJlZm94IGRvZXNu
J3QgaGF2ZSBmb2N1cyhpbiB8IG91dCkgZXZlbnRzCi0vLyBSZWxhdGVkIHRpY2tldCAtIGh0dHBz
Oi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTY4Nzc4NwotLy8KLS8vIFN1
cHBvcnQ6IENocm9tZSwgU2FmYXJpCi0vLyBmb2N1cyhpbiB8IG91dCkgZXZlbnRzIGZpcmUgYWZ0
ZXIgZm9jdXMgJiBibHVyIGV2ZW50cywKLS8vIHdoaWNoIGlzIHNwZWMgdmlvbGF0aW9uIC0gaHR0
cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzLyNldmVudHMtZm9jdXNldmVudC1l
dmVudC1vcmRlcgotLy8gUmVsYXRlZCB0aWNrZXQgLSBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9w
L2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NDQ5ODU3Ci1pZiAoICFzdXBwb3J0LmZvY3VzaW4g
KSB7Ci0gICAgalF1ZXJ5LmVhY2goIHsgZm9jdXM6ICJmb2N1c2luIiwgYmx1cjogImZvY3Vzb3V0
IiB9LCBmdW5jdGlvbiggb3JpZywgZml4ICkgewotCi0gICAgICAgIC8vIEF0dGFjaCBhIHNpbmds
ZSBjYXB0dXJpbmcgaGFuZGxlciBvbiB0aGUgZG9jdW1lbnQgd2hpbGUgc29tZW9uZSB3YW50cyBm
b2N1c2luL2ZvY3Vzb3V0Ci0gICAgICAgIHZhciBoYW5kbGVyID0gZnVuY3Rpb24oIGV2ZW50ICkg
ewotICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnNpbXVsYXRlKCBmaXgsIGV2ZW50LnRhcmdldCwg
alF1ZXJ5LmV2ZW50LmZpeCggZXZlbnQgKSApOwotICAgICAgICB9OwotCi0gICAgICAgIGpRdWVy
eS5ldmVudC5zcGVjaWFsWyBmaXggXSA9IHsKLSAgICAgICAgICAgIHNldHVwOiBmdW5jdGlvbigp
IHsKLSAgICAgICAgICAgICAgICB2YXIgZG9jID0gdGhpcy5vd25lckRvY3VtZW50IHx8IHRoaXMs
Ci0gICAgICAgICAgICAgICAgICAgIGF0dGFjaGVzID0gZGF0YVByaXYuYWNjZXNzKCBkb2MsIGZp
eCApOwotCi0gICAgICAgICAgICAgICAgaWYgKCAhYXR0YWNoZXMgKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGRvYy5hZGRFdmVudExpc3RlbmVyKCBvcmlnLCBoYW5kbGVyLCB0cnVlICk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGRhdGFQcml2LmFjY2VzcyggZG9jLCBmaXgs
ICggYXR0YWNoZXMgfHwgMCApICsgMSApOwotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIHRl
YXJkb3duOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICB2YXIgZG9jID0gdGhpcy5vd25l
ckRvY3VtZW50IHx8IHRoaXMsCi0gICAgICAgICAgICAgICAgICAgIGF0dGFjaGVzID0gZGF0YVBy
aXYuYWNjZXNzKCBkb2MsIGZpeCApIC0gMTsKLQotICAgICAgICAgICAgICAgIGlmICggIWF0dGFj
aGVzICkgewotICAgICAgICAgICAgICAgICAgICBkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lciggb3Jp
ZywgaGFuZGxlciwgdHJ1ZSApOwotICAgICAgICAgICAgICAgICAgICBkYXRhUHJpdi5yZW1vdmUo
IGRvYywgZml4ICk7Ci0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICBkYXRhUHJpdi5hY2Nlc3MoIGRvYywgZml4LCBhdHRhY2hlcyApOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLSAgICB9ICk7Ci19Ci12YXIgbG9jYXRp
b24gPSB3aW5kb3cubG9jYXRpb247Ci0KLXZhciBub25jZSA9IGpRdWVyeS5ub3coKTsKLQotdmFy
IHJxdWVyeSA9ICggL1w/LyApOwotCi0KLQotLy8gU3VwcG9ydDogQW5kcm9pZCAyLjMKLS8vIFdv
cmthcm91bmQgZmFpbHVyZSB0byBzdHJpbmctY2FzdCBudWxsIGlucHV0Ci1qUXVlcnkucGFyc2VK
U09OID0gZnVuY3Rpb24oIGRhdGEgKSB7Ci0gICAgcmV0dXJuIEpTT04ucGFyc2UoIGRhdGEgKyAi
IiApOwotfTsKLQotCi0vLyBDcm9zcy1icm93c2VyIHhtbCBwYXJzaW5nCi1qUXVlcnkucGFyc2VY
TUwgPSBmdW5jdGlvbiggZGF0YSApIHsKLSAgICB2YXIgeG1sOwotICAgIGlmICggIWRhdGEgfHwg
dHlwZW9mIGRhdGEgIT09ICJzdHJpbmciICkgewotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9
Ci0KLSAgICAvLyBTdXBwb3J0OiBJRTkKLSAgICB0cnkgewotICAgICAgICB4bWwgPSAoIG5ldyB3
aW5kb3cuRE9NUGFyc2VyKCkgKS5wYXJzZUZyb21TdHJpbmcoIGRhdGEsICJ0ZXh0L3htbCIgKTsK
LSAgICB9IGNhdGNoICggZSApIHsKLSAgICAgICAgeG1sID0gdW5kZWZpbmVkOwotICAgIH0KLQot
ICAgIGlmICggIXhtbCB8fCB4bWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoICJwYXJzZXJlcnJvciIg
KS5sZW5ndGggKSB7Ci0gICAgICAgIGpRdWVyeS5lcnJvciggIkludmFsaWQgWE1MOiAiICsgZGF0
YSApOwotICAgIH0KLSAgICByZXR1cm4geG1sOwotfTsKLQotCi12YXIKLSAgICByaGFzaCA9IC8j
LiokLywKLSAgICBydHMgPSAvKFs/Jl0pXz1bXiZdKi8sCi0gICAgcmhlYWRlcnMgPSAvXiguKj8p
OlsgXHRdKihbXlxyXG5dKikkL21nLAotCi0gICAgLy8gIzc2NTMsICM4MTI1LCAjODE1MjogbG9j
YWwgcHJvdG9jb2wgZGV0ZWN0aW9uCi0gICAgcmxvY2FsUHJvdG9jb2wgPSAvXig/OmFib3V0fGFw
cHxhcHAtc3RvcmFnZXwuKy1leHRlbnNpb258ZmlsZXxyZXN8d2lkZ2V0KTokLywKLSAgICBybm9D
b250ZW50ID0gL14oPzpHRVR8SEVBRCkkLywKLSAgICBycHJvdG9jb2wgPSAvXlwvXC8vLAotCi0g
ICAgLyogUHJlZmlsdGVycwotICAgICAqIDEpIFRoZXkgYXJlIHVzZWZ1bCB0byBpbnRyb2R1Y2Ug
Y3VzdG9tIGRhdGFUeXBlcyAoc2VlIGFqYXgvanNvbnAuanMgZm9yIGFuIGV4YW1wbGUpCi0gICAg
ICogMikgVGhlc2UgYXJlIGNhbGxlZDoKLSAgICAgKiAgICAtIEJFRk9SRSBhc2tpbmcgZm9yIGEg
dHJhbnNwb3J0Ci0gICAgICogICAgLSBBRlRFUiBwYXJhbSBzZXJpYWxpemF0aW9uIChzLmRhdGEg
aXMgYSBzdHJpbmcgaWYgcy5wcm9jZXNzRGF0YSBpcyB0cnVlKQotICAgICAqIDMpIGtleSBpcyB0
aGUgZGF0YVR5cGUKLSAgICAgKiA0KSB0aGUgY2F0Y2hhbGwgc3ltYm9sICIqIiBjYW4gYmUgdXNl
ZAotICAgICAqIDUpIGV4ZWN1dGlvbiB3aWxsIHN0YXJ0IHdpdGggdHJhbnNwb3J0IGRhdGFUeXBl
IGFuZCBUSEVOIGNvbnRpbnVlIGRvd24gdG8gIioiIGlmIG5lZWRlZAotICAgICAqLwotICAgIHBy
ZWZpbHRlcnMgPSB7fSwKLQotICAgIC8qIFRyYW5zcG9ydHMgYmluZGluZ3MKLSAgICAgKiAxKSBr
ZXkgaXMgdGhlIGRhdGFUeXBlCi0gICAgICogMikgdGhlIGNhdGNoYWxsIHN5bWJvbCAiKiIgY2Fu
IGJlIHVzZWQKLSAgICAgKiAzKSBzZWxlY3Rpb24gd2lsbCBzdGFydCB3aXRoIHRyYW5zcG9ydCBk
YXRhVHlwZSBhbmQgVEhFTiBnbyB0byAiKiIgaWYgbmVlZGVkCi0gICAgICovCi0gICAgdHJhbnNw
b3J0cyA9IHt9LAotCi0gICAgLy8gQXZvaWQgY29tbWVudC1wcm9sb2cgY2hhciBzZXF1ZW5jZSAo
IzEwMDk4KTsgbXVzdCBhcHBlYXNlIGxpbnQgYW5kIGV2YWRlIGNvbXByZXNzaW9uCi0gICAgYWxs
VHlwZXMgPSAiKi8iLmNvbmNhdCggIioiICksCi0KLSAgICAvLyBBbmNob3IgdGFnIGZvciBwYXJz
aW5nIHRoZSBkb2N1bWVudCBvcmlnaW4KLSAgICBvcmlnaW5BbmNob3IgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCAiYSIgKTsKLSAgICBvcmlnaW5BbmNob3IuaHJlZiA9IGxvY2F0aW9uLmhyZWY7
Ci0KLS8vIEJhc2UgImNvbnN0cnVjdG9yIiBmb3IgalF1ZXJ5LmFqYXhQcmVmaWx0ZXIgYW5kIGpR
dWVyeS5hamF4VHJhbnNwb3J0Ci1mdW5jdGlvbiBhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMo
IHN0cnVjdHVyZSApIHsKLQotICAgIC8vIGRhdGFUeXBlRXhwcmVzc2lvbiBpcyBvcHRpb25hbCBh
bmQgZGVmYXVsdHMgdG8gIioiCi0gICAgcmV0dXJuIGZ1bmN0aW9uKCBkYXRhVHlwZUV4cHJlc3Np
b24sIGZ1bmMgKSB7Ci0KLSAgICAgICAgaWYgKCB0eXBlb2YgZGF0YVR5cGVFeHByZXNzaW9uICE9
PSAic3RyaW5nIiApIHsKLSAgICAgICAgICAgIGZ1bmMgPSBkYXRhVHlwZUV4cHJlc3Npb247Ci0g
ICAgICAgICAgICBkYXRhVHlwZUV4cHJlc3Npb24gPSAiKiI7Ci0gICAgICAgIH0KLQotICAgICAg
ICB2YXIgZGF0YVR5cGUsCi0gICAgICAgICAgICBpID0gMCwKLSAgICAgICAgICAgIGRhdGFUeXBl
cyA9IGRhdGFUeXBlRXhwcmVzc2lvbi50b0xvd2VyQ2FzZSgpLm1hdGNoKCBybm90d2hpdGUgKSB8
fCBbXTsKLQotICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBmdW5jICkgKSB7Ci0KLSAg
ICAgICAgICAgIC8vIEZvciBlYWNoIGRhdGFUeXBlIGluIHRoZSBkYXRhVHlwZUV4cHJlc3Npb24K
LSAgICAgICAgICAgIHdoaWxlICggKCBkYXRhVHlwZSA9IGRhdGFUeXBlc1sgaSsrIF0gKSApIHsK
LQotICAgICAgICAgICAgICAgIC8vIFByZXBlbmQgaWYgcmVxdWVzdGVkCi0gICAgICAgICAgICAg
ICAgaWYgKCBkYXRhVHlwZVsgMCBdID09PSAiKyIgKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRh
dGFUeXBlID0gZGF0YVR5cGUuc2xpY2UoIDEgKSB8fCAiKiI7Ci0gICAgICAgICAgICAgICAgICAg
ICggc3RydWN0dXJlWyBkYXRhVHlwZSBdID0gc3RydWN0dXJlWyBkYXRhVHlwZSBdIHx8IFtdICku
dW5zaGlmdCggZnVuYyApOwotCi0gICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIGFwcGVuZAot
ICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICggc3RydWN0dXJl
WyBkYXRhVHlwZSBdID0gc3RydWN0dXJlWyBkYXRhVHlwZSBdIHx8IFtdICkucHVzaCggZnVuYyAp
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH07Ci19
Ci0KLS8vIEJhc2UgaW5zcGVjdGlvbiBmdW5jdGlvbiBmb3IgcHJlZmlsdGVycyBhbmQgdHJhbnNw
b3J0cwotZnVuY3Rpb24gaW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHN0cnVjdHVyZSwg
b3B0aW9ucywgb3JpZ2luYWxPcHRpb25zLCBqcVhIUiApIHsKLQotICAgIHZhciBpbnNwZWN0ZWQg
PSB7fSwKLSAgICAgICAgc2Vla2luZ1RyYW5zcG9ydCA9ICggc3RydWN0dXJlID09PSB0cmFuc3Bv
cnRzICk7Ci0KLSAgICBmdW5jdGlvbiBpbnNwZWN0KCBkYXRhVHlwZSApIHsKLSAgICAgICAgdmFy
IHNlbGVjdGVkOwotICAgICAgICBpbnNwZWN0ZWRbIGRhdGFUeXBlIF0gPSB0cnVlOwotICAgICAg
ICBqUXVlcnkuZWFjaCggc3RydWN0dXJlWyBkYXRhVHlwZSBdIHx8IFtdLCBmdW5jdGlvbiggXywg
cHJlZmlsdGVyT3JGYWN0b3J5ICkgewotICAgICAgICAgICAgdmFyIGRhdGFUeXBlT3JUcmFuc3Bv
cnQgPSBwcmVmaWx0ZXJPckZhY3RvcnkoIG9wdGlvbnMsIG9yaWdpbmFsT3B0aW9ucywganFYSFIg
KTsKLSAgICAgICAgICAgIGlmICggdHlwZW9mIGRhdGFUeXBlT3JUcmFuc3BvcnQgPT09ICJzdHJp
bmciICYmCi0gICAgICAgICAgICAgICAgIXNlZWtpbmdUcmFuc3BvcnQgJiYgIWluc3BlY3RlZFsg
ZGF0YVR5cGVPclRyYW5zcG9ydCBdICkgewotCi0gICAgICAgICAgICAgICAgb3B0aW9ucy5kYXRh
VHlwZXMudW5zaGlmdCggZGF0YVR5cGVPclRyYW5zcG9ydCApOwotICAgICAgICAgICAgICAgIGlu
c3BlY3QoIGRhdGFUeXBlT3JUcmFuc3BvcnQgKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKCBzZWVraW5nVHJhbnNwb3J0ICkgewotICAgICAg
ICAgICAgICAgIHJldHVybiAhKCBzZWxlY3RlZCA9IGRhdGFUeXBlT3JUcmFuc3BvcnQgKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfSApOwotICAgICAgICByZXR1cm4gc2VsZWN0ZWQ7Ci0gICAg
fQotCi0gICAgcmV0dXJuIGluc3BlY3QoIG9wdGlvbnMuZGF0YVR5cGVzWyAwIF0gKSB8fCAhaW5z
cGVjdGVkWyAiKiIgXSAmJiBpbnNwZWN0KCAiKiIgKTsKLX0KLQotLy8gQSBzcGVjaWFsIGV4dGVu
ZCBmb3IgYWpheCBvcHRpb25zCi0vLyB0aGF0IHRha2VzICJmbGF0IiBvcHRpb25zIChub3QgdG8g
YmUgZGVlcCBleHRlbmRlZCkKLS8vIEZpeGVzICM5ODg3Ci1mdW5jdGlvbiBhamF4RXh0ZW5kKCB0
YXJnZXQsIHNyYyApIHsKLSAgICB2YXIga2V5LCBkZWVwLAotICAgICAgICBmbGF0T3B0aW9ucyA9
IGpRdWVyeS5hamF4U2V0dGluZ3MuZmxhdE9wdGlvbnMgfHwge307Ci0KLSAgICBmb3IgKCBrZXkg
aW4gc3JjICkgewotICAgICAgICBpZiAoIHNyY1sga2V5IF0gIT09IHVuZGVmaW5lZCApIHsKLSAg
ICAgICAgICAgICggZmxhdE9wdGlvbnNbIGtleSBdID8gdGFyZ2V0IDogKCBkZWVwIHx8ICggZGVl
cCA9IHt9ICkgKSApWyBrZXkgXSA9IHNyY1sga2V5IF07Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
aWYgKCBkZWVwICkgewotICAgICAgICBqUXVlcnkuZXh0ZW5kKCB0cnVlLCB0YXJnZXQsIGRlZXAg
KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdGFyZ2V0OwotfQotCi0vKiBIYW5kbGVzIHJlc3BvbnNl
cyB0byBhbiBhamF4IHJlcXVlc3Q6Ci0gKiAtIGZpbmRzIHRoZSByaWdodCBkYXRhVHlwZSAobWVk
aWF0ZXMgYmV0d2VlbiBjb250ZW50LXR5cGUgYW5kIGV4cGVjdGVkIGRhdGFUeXBlKQotICogLSBy
ZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIHJlc3BvbnNlCi0gKi8KLWZ1bmN0aW9uIGFqYXhIYW5k
bGVSZXNwb25zZXMoIHMsIGpxWEhSLCByZXNwb25zZXMgKSB7Ci0KLSAgICB2YXIgY3QsIHR5cGUs
IGZpbmFsRGF0YVR5cGUsIGZpcnN0RGF0YVR5cGUsCi0gICAgICAgIGNvbnRlbnRzID0gcy5jb250
ZW50cywKLSAgICAgICAgZGF0YVR5cGVzID0gcy5kYXRhVHlwZXM7Ci0KLSAgICAvLyBSZW1vdmUg
YXV0byBkYXRhVHlwZSBhbmQgZ2V0IGNvbnRlbnQtdHlwZSBpbiB0aGUgcHJvY2VzcwotICAgIHdo
aWxlICggZGF0YVR5cGVzWyAwIF0gPT09ICIqIiApIHsKLSAgICAgICAgZGF0YVR5cGVzLnNoaWZ0
KCk7Ci0gICAgICAgIGlmICggY3QgPT09IHVuZGVmaW5lZCApIHsKLSAgICAgICAgICAgIGN0ID0g
cy5taW1lVHlwZSB8fCBqcVhIUi5nZXRSZXNwb25zZUhlYWRlciggIkNvbnRlbnQtVHlwZSIgKTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIENoZWNrIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBh
IGtub3duIGNvbnRlbnQtdHlwZQotICAgIGlmICggY3QgKSB7Ci0gICAgICAgIGZvciAoIHR5cGUg
aW4gY29udGVudHMgKSB7Ci0gICAgICAgICAgICBpZiAoIGNvbnRlbnRzWyB0eXBlIF0gJiYgY29u
dGVudHNbIHR5cGUgXS50ZXN0KCBjdCApICkgewotICAgICAgICAgICAgICAgIGRhdGFUeXBlcy51
bnNoaWZ0KCB0eXBlICk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBDaGVjayB0byBzZWUgaWYgd2UgaGF2ZSBhIHJlc3Bv
bnNlIGZvciB0aGUgZXhwZWN0ZWQgZGF0YVR5cGUKLSAgICBpZiAoIGRhdGFUeXBlc1sgMCBdIGlu
IHJlc3BvbnNlcyApIHsKLSAgICAgICAgZmluYWxEYXRhVHlwZSA9IGRhdGFUeXBlc1sgMCBdOwot
ICAgIH0gZWxzZSB7Ci0KLSAgICAgICAgLy8gVHJ5IGNvbnZlcnRpYmxlIGRhdGFUeXBlcwotICAg
ICAgICBmb3IgKCB0eXBlIGluIHJlc3BvbnNlcyApIHsKLSAgICAgICAgICAgIGlmICggIWRhdGFU
eXBlc1sgMCBdIHx8IHMuY29udmVydGVyc1sgdHlwZSArICIgIiArIGRhdGFUeXBlc1sgMCBdIF0g
KSB7Ci0gICAgICAgICAgICAgICAgZmluYWxEYXRhVHlwZSA9IHR5cGU7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoICFmaXJzdERhdGFUeXBl
ICkgewotICAgICAgICAgICAgICAgIGZpcnN0RGF0YVR5cGUgPSB0eXBlOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gT3IganVzdCB1c2UgZmlyc3Qgb25lCi0gICAgICAg
IGZpbmFsRGF0YVR5cGUgPSBmaW5hbERhdGFUeXBlIHx8IGZpcnN0RGF0YVR5cGU7Ci0gICAgfQot
Ci0gICAgLy8gSWYgd2UgZm91bmQgYSBkYXRhVHlwZQotICAgIC8vIFdlIGFkZCB0aGUgZGF0YVR5
cGUgdG8gdGhlIGxpc3QgaWYgbmVlZGVkCi0gICAgLy8gYW5kIHJldHVybiB0aGUgY29ycmVzcG9u
ZGluZyByZXNwb25zZQotICAgIGlmICggZmluYWxEYXRhVHlwZSApIHsKLSAgICAgICAgaWYgKCBm
aW5hbERhdGFUeXBlICE9PSBkYXRhVHlwZXNbIDAgXSApIHsKLSAgICAgICAgICAgIGRhdGFUeXBl
cy51bnNoaWZ0KCBmaW5hbERhdGFUeXBlICk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJl
c3BvbnNlc1sgZmluYWxEYXRhVHlwZSBdOwotICAgIH0KLX0KLQotLyogQ2hhaW4gY29udmVyc2lv
bnMgZ2l2ZW4gdGhlIHJlcXVlc3QgYW5kIHRoZSBvcmlnaW5hbCByZXNwb25zZQotICogQWxzbyBz
ZXRzIHRoZSByZXNwb25zZVhYWCBmaWVsZHMgb24gdGhlIGpxWEhSIGluc3RhbmNlCi0gKi8KLWZ1
bmN0aW9uIGFqYXhDb252ZXJ0KCBzLCByZXNwb25zZSwganFYSFIsIGlzU3VjY2VzcyApIHsKLSAg
ICB2YXIgY29udjIsIGN1cnJlbnQsIGNvbnYsIHRtcCwgcHJldiwKLSAgICAgICAgY29udmVydGVy
cyA9IHt9LAotCi0gICAgICAgIC8vIFdvcmsgd2l0aCBhIGNvcHkgb2YgZGF0YVR5cGVzIGluIGNh
c2Ugd2UgbmVlZCB0byBtb2RpZnkgaXQgZm9yIGNvbnZlcnNpb24KLSAgICAgICAgZGF0YVR5cGVz
ID0gcy5kYXRhVHlwZXMuc2xpY2UoKTsKLQotICAgIC8vIENyZWF0ZSBjb252ZXJ0ZXJzIG1hcCB3
aXRoIGxvd2VyY2FzZWQga2V5cwotICAgIGlmICggZGF0YVR5cGVzWyAxIF0gKSB7Ci0gICAgICAg
IGZvciAoIGNvbnYgaW4gcy5jb252ZXJ0ZXJzICkgewotICAgICAgICAgICAgY29udmVydGVyc1sg
Y29udi50b0xvd2VyQ2FzZSgpIF0gPSBzLmNvbnZlcnRlcnNbIGNvbnYgXTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIGN1cnJlbnQgPSBkYXRhVHlwZXMuc2hpZnQoKTsKLQotICAgIC8vIENvbnZl
cnQgdG8gZWFjaCBzZXF1ZW50aWFsIGRhdGFUeXBlCi0gICAgd2hpbGUgKCBjdXJyZW50ICkgewot
Ci0gICAgICAgIGlmICggcy5yZXNwb25zZUZpZWxkc1sgY3VycmVudCBdICkgewotICAgICAgICAg
ICAganFYSFJbIHMucmVzcG9uc2VGaWVsZHNbIGN1cnJlbnQgXSBdID0gcmVzcG9uc2U7Ci0gICAg
ICAgIH0KLQotICAgICAgICAvLyBBcHBseSB0aGUgZGF0YUZpbHRlciBpZiBwcm92aWRlZAotICAg
ICAgICBpZiAoICFwcmV2ICYmIGlzU3VjY2VzcyAmJiBzLmRhdGFGaWx0ZXIgKSB7Ci0gICAgICAg
ICAgICByZXNwb25zZSA9IHMuZGF0YUZpbHRlciggcmVzcG9uc2UsIHMuZGF0YVR5cGUgKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIHByZXYgPSBjdXJyZW50OwotICAgICAgICBjdXJyZW50ID0gZGF0
YVR5cGVzLnNoaWZ0KCk7Ci0KLSAgICAgICAgaWYgKCBjdXJyZW50ICkgewotCi0gICAgICAgIC8v
IFRoZXJlJ3Mgb25seSB3b3JrIHRvIGRvIGlmIGN1cnJlbnQgZGF0YVR5cGUgaXMgbm9uLWF1dG8K
LSAgICAgICAgICAgIGlmICggY3VycmVudCA9PT0gIioiICkgewotCi0gICAgICAgICAgICAgICAg
Y3VycmVudCA9IHByZXY7Ci0KLSAgICAgICAgICAgIC8vIENvbnZlcnQgcmVzcG9uc2UgaWYgcHJl
diBkYXRhVHlwZSBpcyBub24tYXV0byBhbmQgZGlmZmVycyBmcm9tIGN1cnJlbnQKLSAgICAgICAg
ICAgIH0gZWxzZSBpZiAoIHByZXYgIT09ICIqIiAmJiBwcmV2ICE9PSBjdXJyZW50ICkgewotCi0g
ICAgICAgICAgICAgICAgLy8gU2VlayBhIGRpcmVjdCBjb252ZXJ0ZXIKLSAgICAgICAgICAgICAg
ICBjb252ID0gY29udmVydGVyc1sgcHJldiArICIgIiArIGN1cnJlbnQgXSB8fCBjb252ZXJ0ZXJz
WyAiKiAiICsgY3VycmVudCBdOwotCi0gICAgICAgICAgICAgICAgLy8gSWYgbm9uZSBmb3VuZCwg
c2VlayBhIHBhaXIKLSAgICAgICAgICAgICAgICBpZiAoICFjb252ICkgewotICAgICAgICAgICAg
ICAgICAgICBmb3IgKCBjb252MiBpbiBjb252ZXJ0ZXJzICkgewotCi0gICAgICAgICAgICAgICAg
ICAgICAgICAvLyBJZiBjb252MiBvdXRwdXRzIGN1cnJlbnQKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHRtcCA9IGNvbnYyLnNwbGl0KCAiICIgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggdG1wWyAxIF0gPT09IGN1cnJlbnQgKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBJZiBwcmV2IGNhbiBiZSBjb252ZXJ0ZWQgdG8gYWNjZXB0ZWQgaW5wdXQKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb252ID0gY29udmVydGVyc1sgcHJldiArICIgIiArIHRtcFsg
MCBdIF0gfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udmVydGVyc1sgIiog
IiArIHRtcFsgMCBdIF07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBjb252ICkg
ewotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbmRlbnNlIGVxdWl2YWxl
bmNlIGNvbnZlcnRlcnMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBjb252
ID09PSB0cnVlICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udiA9
IGNvbnZlcnRlcnNbIGNvbnYyIF07Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gT3RoZXJ3aXNlLCBpbnNlcnQgdGhlIGludGVybWVkaWF0ZSBkYXRhVHlwZQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBjb252ZXJ0ZXJzWyBjb252MiBdICE9
PSB0cnVlICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudCA9
IHRtcFsgMCBdOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGVz
LnVuc2hpZnQoIHRtcFsgMSBdICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gQXBwbHkgY29u
dmVydGVyIChpZiBub3QgYW4gZXF1aXZhbGVuY2UpCi0gICAgICAgICAgICAgICAgaWYgKCBjb252
ICE9PSB0cnVlICkgewotCi0gICAgICAgICAgICAgICAgICAgIC8vIFVubGVzcyBlcnJvcnMgYXJl
IGFsbG93ZWQgdG8gYnViYmxlLCBjYXRjaCBhbmQgcmV0dXJuIHRoZW0KLSAgICAgICAgICAgICAg
ICAgICAgaWYgKCBjb252ICYmIHMudGhyb3dzICkgewotICAgICAgICAgICAgICAgICAgICAgICAg
cmVzcG9uc2UgPSBjb252KCByZXNwb25zZSApOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXNwb25zZSA9IGNvbnYoIHJlc3BvbnNlICk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB9IGNhdGNoICggZSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZTogInBhcnNlcmVycm9yIiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGNvbnYgPyBlIDogIk5vIGNvbnZl
cnNpb24gZnJvbSAiICsgcHJldiArICIgdG8gIiArIGN1cnJlbnQKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
fQotCi0gICAgcmV0dXJuIHsgc3RhdGU6ICJzdWNjZXNzIiwgZGF0YTogcmVzcG9uc2UgfTsKLX0K
LQotalF1ZXJ5LmV4dGVuZCggewotCi0gICAgLy8gQ291bnRlciBmb3IgaG9sZGluZyB0aGUgbnVt
YmVyIG9mIGFjdGl2ZSBxdWVyaWVzCi0gICAgYWN0aXZlOiAwLAotCi0gICAgLy8gTGFzdC1Nb2Rp
ZmllZCBoZWFkZXIgY2FjaGUgZm9yIG5leHQgcmVxdWVzdAotICAgIGxhc3RNb2RpZmllZDoge30s
Ci0gICAgZXRhZzoge30sCi0KLSAgICBhamF4U2V0dGluZ3M6IHsKLSAgICAgICAgdXJsOiBsb2Nh
dGlvbi5ocmVmLAotICAgICAgICB0eXBlOiAiR0VUIiwKLSAgICAgICAgaXNMb2NhbDogcmxvY2Fs
UHJvdG9jb2wudGVzdCggbG9jYXRpb24ucHJvdG9jb2wgKSwKLSAgICAgICAgZ2xvYmFsOiB0cnVl
LAotICAgICAgICBwcm9jZXNzRGF0YTogdHJ1ZSwKLSAgICAgICAgYXN5bmM6IHRydWUsCi0gICAg
ICAgIGNvbnRlbnRUeXBlOiAiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFy
c2V0PVVURi04IiwKLSAgICAgICAgLyoKLSAgICAgICAgdGltZW91dDogMCwKLSAgICAgICAgZGF0
YTogbnVsbCwKLSAgICAgICAgZGF0YVR5cGU6IG51bGwsCi0gICAgICAgIHVzZXJuYW1lOiBudWxs
LAotICAgICAgICBwYXNzd29yZDogbnVsbCwKLSAgICAgICAgY2FjaGU6IG51bGwsCi0gICAgICAg
IHRocm93czogZmFsc2UsCi0gICAgICAgIHRyYWRpdGlvbmFsOiBmYWxzZSwKLSAgICAgICAgaGVh
ZGVyczoge30sCi0gICAgICAgICovCi0KLSAgICAgICAgYWNjZXB0czogewotICAgICAgICAgICAg
IioiOiBhbGxUeXBlcywKLSAgICAgICAgICAgIHRleHQ6ICJ0ZXh0L3BsYWluIiwKLSAgICAgICAg
ICAgIGh0bWw6ICJ0ZXh0L2h0bWwiLAotICAgICAgICAgICAgeG1sOiAiYXBwbGljYXRpb24veG1s
LCB0ZXh0L3htbCIsCi0gICAgICAgICAgICBqc29uOiAiYXBwbGljYXRpb24vanNvbiwgdGV4dC9q
YXZhc2NyaXB0IgotICAgICAgICB9LAotCi0gICAgICAgIGNvbnRlbnRzOiB7Ci0gICAgICAgICAg
ICB4bWw6IC9cYnhtbFxiLywKLSAgICAgICAgICAgIGh0bWw6IC9cYmh0bWwvLAotICAgICAgICAg
ICAganNvbjogL1xianNvblxiLwotICAgICAgICB9LAotCi0gICAgICAgIHJlc3BvbnNlRmllbGRz
OiB7Ci0gICAgICAgICAgICB4bWw6ICJyZXNwb25zZVhNTCIsCi0gICAgICAgICAgICB0ZXh0OiAi
cmVzcG9uc2VUZXh0IiwKLSAgICAgICAgICAgIGpzb246ICJyZXNwb25zZUpTT04iCi0gICAgICAg
IH0sCi0KLSAgICAgICAgLy8gRGF0YSBjb252ZXJ0ZXJzCi0gICAgICAgIC8vIEtleXMgc2VwYXJh
dGUgc291cmNlIChvciBjYXRjaGFsbCAiKiIpIGFuZCBkZXN0aW5hdGlvbiB0eXBlcyB3aXRoIGEg
c2luZ2xlIHNwYWNlCi0gICAgICAgIGNvbnZlcnRlcnM6IHsKLQotICAgICAgICAgICAgLy8gQ29u
dmVydCBhbnl0aGluZyB0byB0ZXh0Ci0gICAgICAgICAgICAiKiB0ZXh0IjogU3RyaW5nLAotCi0g
ICAgICAgICAgICAvLyBUZXh0IHRvIGh0bWwgKHRydWUgPSBubyB0cmFuc2Zvcm1hdGlvbikKLSAg
ICAgICAgICAgICJ0ZXh0IGh0bWwiOiB0cnVlLAotCi0gICAgICAgICAgICAvLyBFdmFsdWF0ZSB0
ZXh0IGFzIGEganNvbiBleHByZXNzaW9uCi0gICAgICAgICAgICAidGV4dCBqc29uIjogalF1ZXJ5
LnBhcnNlSlNPTiwKLQotICAgICAgICAgICAgLy8gUGFyc2UgdGV4dCBhcyB4bWwKLSAgICAgICAg
ICAgICJ0ZXh0IHhtbCI6IGpRdWVyeS5wYXJzZVhNTAotICAgICAgICB9LAotCi0gICAgICAgIC8v
IEZvciBvcHRpb25zIHRoYXQgc2hvdWxkbid0IGJlIGRlZXAgZXh0ZW5kZWQ6Ci0gICAgICAgIC8v
IHlvdSBjYW4gYWRkIHlvdXIgb3duIGN1c3RvbSBvcHRpb25zIGhlcmUgaWYKLSAgICAgICAgLy8g
YW5kIHdoZW4geW91IGNyZWF0ZSBvbmUgdGhhdCBzaG91bGRuJ3QgYmUKLSAgICAgICAgLy8gZGVl
cCBleHRlbmRlZCAoc2VlIGFqYXhFeHRlbmQpCi0gICAgICAgIGZsYXRPcHRpb25zOiB7Ci0gICAg
ICAgICAgICB1cmw6IHRydWUsCi0gICAgICAgICAgICBjb250ZXh0OiB0cnVlCi0gICAgICAgIH0K
LSAgICB9LAotCi0gICAgLy8gQ3JlYXRlcyBhIGZ1bGwgZmxlZGdlZCBzZXR0aW5ncyBvYmplY3Qg
aW50byB0YXJnZXQKLSAgICAvLyB3aXRoIGJvdGggYWpheFNldHRpbmdzIGFuZCBzZXR0aW5ncyBm
aWVsZHMuCi0gICAgLy8gSWYgdGFyZ2V0IGlzIG9taXR0ZWQsIHdyaXRlcyBpbnRvIGFqYXhTZXR0
aW5ncy4KLSAgICBhamF4U2V0dXA6IGZ1bmN0aW9uKCB0YXJnZXQsIHNldHRpbmdzICkgewotICAg
ICAgICByZXR1cm4gc2V0dGluZ3MgPwotCi0gICAgICAgICAgICAvLyBCdWlsZGluZyBhIHNldHRp
bmdzIG9iamVjdAotICAgICAgICAgICAgYWpheEV4dGVuZCggYWpheEV4dGVuZCggdGFyZ2V0LCBq
UXVlcnkuYWpheFNldHRpbmdzICksIHNldHRpbmdzICkgOgotCi0gICAgICAgICAgICAvLyBFeHRl
bmRpbmcgYWpheFNldHRpbmdzCi0gICAgICAgICAgICBhamF4RXh0ZW5kKCBqUXVlcnkuYWpheFNl
dHRpbmdzLCB0YXJnZXQgKTsKLSAgICB9LAotCi0gICAgYWpheFByZWZpbHRlcjogYWRkVG9QcmVm
aWx0ZXJzT3JUcmFuc3BvcnRzKCBwcmVmaWx0ZXJzICksCi0gICAgYWpheFRyYW5zcG9ydDogYWRk
VG9QcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCB0cmFuc3BvcnRzICksCi0KLSAgICAvLyBNYWluIG1l
dGhvZAotICAgIGFqYXg6IGZ1bmN0aW9uKCB1cmwsIG9wdGlvbnMgKSB7Ci0KLSAgICAgICAgLy8g
SWYgdXJsIGlzIGFuIG9iamVjdCwgc2ltdWxhdGUgcHJlLTEuNSBzaWduYXR1cmUKLSAgICAgICAg
aWYgKCB0eXBlb2YgdXJsID09PSAib2JqZWN0IiApIHsKLSAgICAgICAgICAgIG9wdGlvbnMgPSB1
cmw7Ci0gICAgICAgICAgICB1cmwgPSB1bmRlZmluZWQ7Ci0gICAgICAgIH0KLQotICAgICAgICAv
LyBGb3JjZSBvcHRpb25zIHRvIGJlIGFuIG9iamVjdAotICAgICAgICBvcHRpb25zID0gb3B0aW9u
cyB8fCB7fTsKLQotICAgICAgICB2YXIgdHJhbnNwb3J0LAotCi0gICAgICAgICAgICAvLyBVUkwg
d2l0aG91dCBhbnRpLWNhY2hlIHBhcmFtCi0gICAgICAgICAgICBjYWNoZVVSTCwKLQotICAgICAg
ICAgICAgLy8gUmVzcG9uc2UgaGVhZGVycwotICAgICAgICAgICAgcmVzcG9uc2VIZWFkZXJzU3Ry
aW5nLAotICAgICAgICAgICAgcmVzcG9uc2VIZWFkZXJzLAotCi0gICAgICAgICAgICAvLyB0aW1l
b3V0IGhhbmRsZQotICAgICAgICAgICAgdGltZW91dFRpbWVyLAotCi0gICAgICAgICAgICAvLyBV
cmwgY2xlYW51cCB2YXIKLSAgICAgICAgICAgIHVybEFuY2hvciwKLQotICAgICAgICAgICAgLy8g
VG8ga25vdyBpZiBnbG9iYWwgZXZlbnRzIGFyZSB0byBiZSBkaXNwYXRjaGVkCi0gICAgICAgICAg
ICBmaXJlR2xvYmFscywKLQotICAgICAgICAgICAgLy8gTG9vcCB2YXJpYWJsZQotICAgICAgICAg
ICAgaSwKLQotICAgICAgICAgICAgLy8gQ3JlYXRlIHRoZSBmaW5hbCBvcHRpb25zIG9iamVjdAot
ICAgICAgICAgICAgcyA9IGpRdWVyeS5hamF4U2V0dXAoIHt9LCBvcHRpb25zICksCi0KLSAgICAg
ICAgICAgIC8vIENhbGxiYWNrcyBjb250ZXh0Ci0gICAgICAgICAgICBjYWxsYmFja0NvbnRleHQg
PSBzLmNvbnRleHQgfHwgcywKLQotICAgICAgICAgICAgLy8gQ29udGV4dCBmb3IgZ2xvYmFsIGV2
ZW50cyBpcyBjYWxsYmFja0NvbnRleHQgaWYgaXQgaXMgYSBET00gbm9kZSBvciBqUXVlcnkgY29s
bGVjdGlvbgotICAgICAgICAgICAgZ2xvYmFsRXZlbnRDb250ZXh0ID0gcy5jb250ZXh0ICYmCi0g
ICAgICAgICAgICAgICAgKCBjYWxsYmFja0NvbnRleHQubm9kZVR5cGUgfHwgY2FsbGJhY2tDb250
ZXh0LmpxdWVyeSApID8KLSAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KCBjYWxsYmFja0NvbnRl
eHQgKSA6Ci0gICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVudCwKLQotICAgICAgICAgICAg
Ly8gRGVmZXJyZWRzCi0gICAgICAgICAgICBkZWZlcnJlZCA9IGpRdWVyeS5EZWZlcnJlZCgpLAot
ICAgICAgICAgICAgY29tcGxldGVEZWZlcnJlZCA9IGpRdWVyeS5DYWxsYmFja3MoICJvbmNlIG1l
bW9yeSIgKSwKLQotICAgICAgICAgICAgLy8gU3RhdHVzLWRlcGVuZGVudCBjYWxsYmFja3MKLSAg
ICAgICAgICAgIHN0YXR1c0NvZGUgPSBzLnN0YXR1c0NvZGUgfHwge30sCi0KLSAgICAgICAgICAg
IC8vIEhlYWRlcnMgKHRoZXkgYXJlIHNlbnQgYWxsIGF0IG9uY2UpCi0gICAgICAgICAgICByZXF1
ZXN0SGVhZGVycyA9IHt9LAotICAgICAgICAgICAgcmVxdWVzdEhlYWRlcnNOYW1lcyA9IHt9LAot
Ci0gICAgICAgICAgICAvLyBUaGUganFYSFIgc3RhdGUKLSAgICAgICAgICAgIHN0YXRlID0gMCwK
LQotICAgICAgICAgICAgLy8gRGVmYXVsdCBhYm9ydCBtZXNzYWdlCi0gICAgICAgICAgICBzdHJB
Ym9ydCA9ICJjYW5jZWxlZCIsCi0KLSAgICAgICAgICAgIC8vIEZha2UgeGhyCi0gICAgICAgICAg
ICBqcVhIUiA9IHsKLSAgICAgICAgICAgICAgICByZWFkeVN0YXRlOiAwLAotCi0gICAgICAgICAg
ICAgICAgLy8gQnVpbGRzIGhlYWRlcnMgaGFzaHRhYmxlIGlmIG5lZWRlZAotICAgICAgICAgICAg
ICAgIGdldFJlc3BvbnNlSGVhZGVyOiBmdW5jdGlvbigga2V5ICkgewotICAgICAgICAgICAgICAg
ICAgICB2YXIgbWF0Y2g7Ci0gICAgICAgICAgICAgICAgICAgIGlmICggc3RhdGUgPT09IDIgKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFyZXNwb25zZUhlYWRlcnMgKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VIZWFkZXJzID0ge307Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgd2hpbGUgKCAoIG1hdGNoID0gcmhlYWRlcnMuZXhlYyggcmVzcG9u
c2VIZWFkZXJzU3RyaW5nICkgKSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmVzcG9uc2VIZWFkZXJzWyBtYXRjaFsgMSBdLnRvTG93ZXJDYXNlKCkgXSA9IG1hdGNoWyAyIF07
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2ggPSByZXNwb25zZUhlYWRlcnNbIGtleS50
b0xvd2VyQ2FzZSgpIF07Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIG1hdGNoID09IG51bGwgPyBudWxsIDogbWF0Y2g7Ci0gICAgICAgICAgICAgICAg
fSwKLQotICAgICAgICAgICAgICAgIC8vIFJhdyBzdHJpbmcKLSAgICAgICAgICAgICAgICBnZXRB
bGxSZXNwb25zZUhlYWRlcnM6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gc3RhdGUgPT09IDIgPyByZXNwb25zZUhlYWRlcnNTdHJpbmcgOiBudWxsOwotICAgICAgICAg
ICAgICAgIH0sCi0KLSAgICAgICAgICAgICAgICAvLyBDYWNoZXMgdGhlIGhlYWRlcgotICAgICAg
ICAgICAgICAgIHNldFJlcXVlc3RIZWFkZXI6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHsKLSAg
ICAgICAgICAgICAgICAgICAgdmFyIGxuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpOwotICAgICAg
ICAgICAgICAgICAgICBpZiAoICFzdGF0ZSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5h
bWUgPSByZXF1ZXN0SGVhZGVyc05hbWVzWyBsbmFtZSBdID0gcmVxdWVzdEhlYWRlcnNOYW1lc1sg
bG5hbWUgXSB8fCBuYW1lOwotICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEhlYWRlcnNb
IG5hbWUgXSA9IHZhbHVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0aGlzOwotICAgICAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgICAgICAv
LyBPdmVycmlkZXMgcmVzcG9uc2UgY29udGVudC10eXBlIGhlYWRlcgotICAgICAgICAgICAgICAg
IG92ZXJyaWRlTWltZVR5cGU6IGZ1bmN0aW9uKCB0eXBlICkgewotICAgICAgICAgICAgICAgICAg
ICBpZiAoICFzdGF0ZSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHMubWltZVR5cGUgPSB0
eXBlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0
aGlzOwotICAgICAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgICAgICAvLyBTdGF0dXMtZGVw
ZW5kZW50IGNhbGxiYWNrcwotICAgICAgICAgICAgICAgIHN0YXR1c0NvZGU6IGZ1bmN0aW9uKCBt
YXAgKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBjb2RlOwotICAgICAgICAgICAgICAgICAg
ICBpZiAoIG1hcCApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggc3RhdGUgPCAyICkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIGNvZGUgaW4gbWFwICkgewotCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIExhenktYWRkIHRoZSBuZXcgY2FsbGJh
Y2sgaW4gYSB3YXkgdGhhdCBwcmVzZXJ2ZXMgb2xkIG9uZXMKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RhdHVzQ29kZVsgY29kZSBdID0gWyBzdGF0dXNDb2RlWyBjb2RlIF0sIG1h
cFsgY29kZSBdIF07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEV4
ZWN1dGUgdGhlIGFwcHJvcHJpYXRlIGNhbGxiYWNrcwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGpxWEhSLmFsd2F5cyggbWFwWyBqcVhIUi5zdGF0dXMgXSApOwotICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzOwotICAgICAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgICAgICAvLyBDYW5j
ZWwgdGhlIHJlcXVlc3QKLSAgICAgICAgICAgICAgICBhYm9ydDogZnVuY3Rpb24oIHN0YXR1c1Rl
eHQgKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBmaW5hbFRleHQgPSBzdGF0dXNUZXh0IHx8
IHN0ckFib3J0OwotICAgICAgICAgICAgICAgICAgICBpZiAoIHRyYW5zcG9ydCApIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHRyYW5zcG9ydC5hYm9ydCggZmluYWxUZXh0ICk7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZG9uZSggMCwgZmluYWxUZXh0ICk7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH07Ci0KLSAgICAgICAgLy8gQXR0YWNoIGRlZmVycmVkcwotICAgICAgICBkZWZl
cnJlZC5wcm9taXNlKCBqcVhIUiApLmNvbXBsZXRlID0gY29tcGxldGVEZWZlcnJlZC5hZGQ7Ci0g
ICAgICAgIGpxWEhSLnN1Y2Nlc3MgPSBqcVhIUi5kb25lOwotICAgICAgICBqcVhIUi5lcnJvciA9
IGpxWEhSLmZhaWw7Ci0KLSAgICAgICAgLy8gUmVtb3ZlIGhhc2ggY2hhcmFjdGVyICgjNzUzMTog
YW5kIHN0cmluZyBwcm9tb3Rpb24pCi0gICAgICAgIC8vIEFkZCBwcm90b2NvbCBpZiBub3QgcHJv
dmlkZWQgKHByZWZpbHRlcnMgbWlnaHQgZXhwZWN0IGl0KQotICAgICAgICAvLyBIYW5kbGUgZmFs
c3kgdXJsIGluIHRoZSBzZXR0aW5ncyBvYmplY3QgKCMxMDA5MzogY29uc2lzdGVuY3kgd2l0aCBv
bGQgc2lnbmF0dXJlKQotICAgICAgICAvLyBXZSBhbHNvIHVzZSB0aGUgdXJsIHBhcmFtZXRlciBp
ZiBhdmFpbGFibGUKLSAgICAgICAgcy51cmwgPSAoICggdXJsIHx8IHMudXJsIHx8IGxvY2F0aW9u
LmhyZWYgKSArICIiICkucmVwbGFjZSggcmhhc2gsICIiICkKLSAgICAgICAgICAgIC5yZXBsYWNl
KCBycHJvdG9jb2wsIGxvY2F0aW9uLnByb3RvY29sICsgIi8vIiApOwotCi0gICAgICAgIC8vIEFs
aWFzIG1ldGhvZCBvcHRpb24gdG8gdHlwZSBhcyBwZXIgdGlja2V0ICMxMjAwNAotICAgICAgICBz
LnR5cGUgPSBvcHRpb25zLm1ldGhvZCB8fCBvcHRpb25zLnR5cGUgfHwgcy5tZXRob2QgfHwgcy50
eXBlOwotCi0gICAgICAgIC8vIEV4dHJhY3QgZGF0YVR5cGVzIGxpc3QKLSAgICAgICAgcy5kYXRh
VHlwZXMgPSBqUXVlcnkudHJpbSggcy5kYXRhVHlwZSB8fCAiKiIgKS50b0xvd2VyQ2FzZSgpLm1h
dGNoKCBybm90d2hpdGUgKSB8fCBbICIiIF07Ci0KLSAgICAgICAgLy8gQSBjcm9zcy1kb21haW4g
cmVxdWVzdCBpcyBpbiBvcmRlciB3aGVuIHRoZSBvcmlnaW4gZG9lc24ndCBtYXRjaCB0aGUgY3Vy
cmVudCBvcmlnaW4uCi0gICAgICAgIGlmICggcy5jcm9zc0RvbWFpbiA9PSBudWxsICkgewotICAg
ICAgICAgICAgdXJsQW5jaG9yID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggImEiICk7Ci0KLSAg
ICAgICAgICAgIC8vIFN1cHBvcnQ6IElFOC0xMSsKLSAgICAgICAgICAgIC8vIElFIHRocm93cyBl
eGNlcHRpb24gaWYgdXJsIGlzIG1hbGZvcm1lZCwgZS5nLiBodHRwOi8vZXhhbXBsZS5jb206ODB4
LwotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICB1cmxBbmNob3IuaHJlZiA9IHMu
dXJsOwotCi0gICAgICAgICAgICAgICAgLy8gU3VwcG9ydDogSUU4LTExKwotICAgICAgICAgICAg
ICAgIC8vIEFuY2hvcidzIGhvc3QgcHJvcGVydHkgaXNuJ3QgY29ycmVjdGx5IHNldCB3aGVuIHMu
dXJsIGlzIHJlbGF0aXZlCi0gICAgICAgICAgICAgICAgdXJsQW5jaG9yLmhyZWYgPSB1cmxBbmNo
b3IuaHJlZjsKLSAgICAgICAgICAgICAgICBzLmNyb3NzRG9tYWluID0gb3JpZ2luQW5jaG9yLnBy
b3RvY29sICsgIi8vIiArIG9yaWdpbkFuY2hvci5ob3N0ICE9PQotICAgICAgICAgICAgICAgICAg
ICB1cmxBbmNob3IucHJvdG9jb2wgKyAiLy8iICsgdXJsQW5jaG9yLmhvc3Q7Ci0gICAgICAgICAg
ICB9IGNhdGNoICggZSApIHsKLQotICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIGFuIGVy
cm9yIHBhcnNpbmcgdGhlIFVSTCwgYXNzdW1lIGl0IGlzIGNyb3NzRG9tYWluLAotICAgICAgICAg
ICAgICAgIC8vIGl0IGNhbiBiZSByZWplY3RlZCBieSB0aGUgdHJhbnNwb3J0IGlmIGl0IGlzIGlu
dmFsaWQKLSAgICAgICAgICAgICAgICBzLmNyb3NzRG9tYWluID0gdHJ1ZTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIENvbnZlcnQgZGF0YSBpZiBub3QgYWxyZWFkeSBh
IHN0cmluZwotICAgICAgICBpZiAoIHMuZGF0YSAmJiBzLnByb2Nlc3NEYXRhICYmIHR5cGVvZiBz
LmRhdGEgIT09ICJzdHJpbmciICkgewotICAgICAgICAgICAgcy5kYXRhID0galF1ZXJ5LnBhcmFt
KCBzLmRhdGEsIHMudHJhZGl0aW9uYWwgKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEFwcGx5
IHByZWZpbHRlcnMKLSAgICAgICAgaW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHByZWZp
bHRlcnMsIHMsIG9wdGlvbnMsIGpxWEhSICk7Ci0KLSAgICAgICAgLy8gSWYgcmVxdWVzdCB3YXMg
YWJvcnRlZCBpbnNpZGUgYSBwcmVmaWx0ZXIsIHN0b3AgdGhlcmUKLSAgICAgICAgaWYgKCBzdGF0
ZSA9PT0gMiApIHsKLSAgICAgICAgICAgIHJldHVybiBqcVhIUjsKLSAgICAgICAgfQotCi0gICAg
ICAgIC8vIFdlIGNhbiBmaXJlIGdsb2JhbCBldmVudHMgYXMgb2Ygbm93IGlmIGFza2VkIHRvCi0g
ICAgICAgIC8vIERvbid0IGZpcmUgZXZlbnRzIGlmIGpRdWVyeS5ldmVudCBpcyB1bmRlZmluZWQg
aW4gYW4gQU1ELXVzYWdlIHNjZW5hcmlvICgjMTUxMTgpCi0gICAgICAgIGZpcmVHbG9iYWxzID0g
alF1ZXJ5LmV2ZW50ICYmIHMuZ2xvYmFsOwotCi0gICAgICAgIC8vIFdhdGNoIGZvciBhIG5ldyBz
ZXQgb2YgcmVxdWVzdHMKLSAgICAgICAgaWYgKCBmaXJlR2xvYmFscyAmJiBqUXVlcnkuYWN0aXZl
KysgPT09IDAgKSB7Ci0gICAgICAgICAgICBqUXVlcnkuZXZlbnQudHJpZ2dlciggImFqYXhTdGFy
dCIgKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFVwcGVyY2FzZSB0aGUgdHlwZQotICAgICAg
ICBzLnR5cGUgPSBzLnR5cGUudG9VcHBlckNhc2UoKTsKLQotICAgICAgICAvLyBEZXRlcm1pbmUg
aWYgcmVxdWVzdCBoYXMgY29udGVudAotICAgICAgICBzLmhhc0NvbnRlbnQgPSAhcm5vQ29udGVu
dC50ZXN0KCBzLnR5cGUgKTsKLQotICAgICAgICAvLyBTYXZlIHRoZSBVUkwgaW4gY2FzZSB3ZSdy
ZSB0b3lpbmcgd2l0aCB0aGUgSWYtTW9kaWZpZWQtU2luY2UKLSAgICAgICAgLy8gYW5kL29yIElm
LU5vbmUtTWF0Y2ggaGVhZGVyIGxhdGVyIG9uCi0gICAgICAgIGNhY2hlVVJMID0gcy51cmw7Ci0K
LSAgICAgICAgLy8gTW9yZSBvcHRpb25zIGhhbmRsaW5nIGZvciByZXF1ZXN0cyB3aXRoIG5vIGNv
bnRlbnQKLSAgICAgICAgaWYgKCAhcy5oYXNDb250ZW50ICkgewotCi0gICAgICAgICAgICAvLyBJ
ZiBkYXRhIGlzIGF2YWlsYWJsZSwgYXBwZW5kIGRhdGEgdG8gdXJsCi0gICAgICAgICAgICBpZiAo
IHMuZGF0YSApIHsKLSAgICAgICAgICAgICAgICBjYWNoZVVSTCA9ICggcy51cmwgKz0gKCBycXVl
cnkudGVzdCggY2FjaGVVUkwgKSA/ICImIiA6ICI/IiApICsgcy5kYXRhICk7Ci0KLSAgICAgICAg
ICAgICAgICAvLyAjOTY4MjogcmVtb3ZlIGRhdGEgc28gdGhhdCBpdCdzIG5vdCB1c2VkIGluIGFu
IGV2ZW50dWFsIHJldHJ5Ci0gICAgICAgICAgICAgICAgZGVsZXRlIHMuZGF0YTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgLy8gQWRkIGFudGktY2FjaGUgaW4gdXJsIGlmIG5lZWRlZAot
ICAgICAgICAgICAgaWYgKCBzLmNhY2hlID09PSBmYWxzZSApIHsKLSAgICAgICAgICAgICAgICBz
LnVybCA9IHJ0cy50ZXN0KCBjYWNoZVVSTCApID8KLQotICAgICAgICAgICAgICAgICAgICAvLyBJ
ZiB0aGVyZSBpcyBhbHJlYWR5IGEgJ18nIHBhcmFtZXRlciwgc2V0IGl0cyB2YWx1ZQotICAgICAg
ICAgICAgICAgICAgICBjYWNoZVVSTC5yZXBsYWNlKCBydHMsICIkMV89IiArIG5vbmNlKysgKSA6
Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIGFkZCBvbmUgdG8gdGhlIGVuZAot
ICAgICAgICAgICAgICAgICAgICBjYWNoZVVSTCArICggcnF1ZXJ5LnRlc3QoIGNhY2hlVVJMICkg
PyAiJiIgOiAiPyIgKSArICJfPSIgKyBub25jZSsrOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0KLSAgICAgICAgLy8gU2V0IHRoZSBJZi1Nb2RpZmllZC1TaW5jZSBhbmQvb3IgSWYtTm9uZS1N
YXRjaCBoZWFkZXIsIGlmIGluIGlmTW9kaWZpZWQgbW9kZS4KLSAgICAgICAgaWYgKCBzLmlmTW9k
aWZpZWQgKSB7Ci0gICAgICAgICAgICBpZiAoIGpRdWVyeS5sYXN0TW9kaWZpZWRbIGNhY2hlVVJM
IF0gKSB7Ci0gICAgICAgICAgICAgICAganFYSFIuc2V0UmVxdWVzdEhlYWRlciggIklmLU1vZGlm
aWVkLVNpbmNlIiwgalF1ZXJ5Lmxhc3RNb2RpZmllZFsgY2FjaGVVUkwgXSApOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgaWYgKCBqUXVlcnkuZXRhZ1sgY2FjaGVVUkwgXSApIHsKLSAgICAg
ICAgICAgICAgICBqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCAiSWYtTm9uZS1NYXRjaCIsIGpRdWVy
eS5ldGFnWyBjYWNoZVVSTCBdICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAg
ICAvLyBTZXQgdGhlIGNvcnJlY3QgaGVhZGVyLCBpZiBkYXRhIGlzIGJlaW5nIHNlbnQKLSAgICAg
ICAgaWYgKCBzLmRhdGEgJiYgcy5oYXNDb250ZW50ICYmIHMuY29udGVudFR5cGUgIT09IGZhbHNl
IHx8IG9wdGlvbnMuY29udGVudFR5cGUgKSB7Ci0gICAgICAgICAgICBqcVhIUi5zZXRSZXF1ZXN0
SGVhZGVyKCAiQ29udGVudC1UeXBlIiwgcy5jb250ZW50VHlwZSApOwotICAgICAgICB9Ci0KLSAg
ICAgICAgLy8gU2V0IHRoZSBBY2NlcHRzIGhlYWRlciBmb3IgdGhlIHNlcnZlciwgZGVwZW5kaW5n
IG9uIHRoZSBkYXRhVHlwZQotICAgICAgICBqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKAotICAgICAg
ICAgICAgIkFjY2VwdCIsCi0gICAgICAgICAgICBzLmRhdGFUeXBlc1sgMCBdICYmIHMuYWNjZXB0
c1sgcy5kYXRhVHlwZXNbIDAgXSBdID8KLSAgICAgICAgICAgICAgICBzLmFjY2VwdHNbIHMuZGF0
YVR5cGVzWyAwIF0gXSArCi0gICAgICAgICAgICAgICAgICAgICggcy5kYXRhVHlwZXNbIDAgXSAh
PT0gIioiID8gIiwgIiArIGFsbFR5cGVzICsgIjsgcT0wLjAxIiA6ICIiICkgOgotICAgICAgICAg
ICAgICAgIHMuYWNjZXB0c1sgIioiIF0KLSAgICAgICAgKTsKLQotICAgICAgICAvLyBDaGVjayBm
b3IgaGVhZGVycyBvcHRpb24KLSAgICAgICAgZm9yICggaSBpbiBzLmhlYWRlcnMgKSB7Ci0gICAg
ICAgICAgICBqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCBpLCBzLmhlYWRlcnNbIGkgXSApOwotICAg
ICAgICB9Ci0KLSAgICAgICAgLy8gQWxsb3cgY3VzdG9tIGhlYWRlcnMvbWltZXR5cGVzIGFuZCBl
YXJseSBhYm9ydAotICAgICAgICBpZiAoIHMuYmVmb3JlU2VuZCAmJgotICAgICAgICAgICAgKCBz
LmJlZm9yZVNlbmQuY2FsbCggY2FsbGJhY2tDb250ZXh0LCBqcVhIUiwgcyApID09PSBmYWxzZSB8
fCBzdGF0ZSA9PT0gMiApICkgewotCi0gICAgICAgICAgICAvLyBBYm9ydCBpZiBub3QgZG9uZSBh
bHJlYWR5IGFuZCByZXR1cm4KLSAgICAgICAgICAgIHJldHVybiBqcVhIUi5hYm9ydCgpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgLy8gQWJvcnRpbmcgaXMgbm8gbG9uZ2VyIGEgY2FuY2VsbGF0aW9u
Ci0gICAgICAgIHN0ckFib3J0ID0gImFib3J0IjsKLQotICAgICAgICAvLyBJbnN0YWxsIGNhbGxi
YWNrcyBvbiBkZWZlcnJlZHMKLSAgICAgICAgZm9yICggaSBpbiB7IHN1Y2Nlc3M6IDEsIGVycm9y
OiAxLCBjb21wbGV0ZTogMSB9ICkgewotICAgICAgICAgICAganFYSFJbIGkgXSggc1sgaSBdICk7
Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBHZXQgdHJhbnNwb3J0Ci0gICAgICAgIHRyYW5zcG9y
dCA9IGluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCB0cmFuc3BvcnRzLCBzLCBvcHRpb25z
LCBqcVhIUiApOwotCi0gICAgICAgIC8vIElmIG5vIHRyYW5zcG9ydCwgd2UgYXV0by1hYm9ydAot
ICAgICAgICBpZiAoICF0cmFuc3BvcnQgKSB7Ci0gICAgICAgICAgICBkb25lKCAtMSwgIk5vIFRy
YW5zcG9ydCIgKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGpxWEhSLnJlYWR5U3Rh
dGUgPSAxOwotCi0gICAgICAgICAgICAvLyBTZW5kIGdsb2JhbCBldmVudAotICAgICAgICAgICAg
aWYgKCBmaXJlR2xvYmFscyApIHsKLSAgICAgICAgICAgICAgICBnbG9iYWxFdmVudENvbnRleHQu
dHJpZ2dlciggImFqYXhTZW5kIiwgWyBqcVhIUiwgcyBdICk7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIC8vIElmIHJlcXVlc3Qgd2FzIGFib3J0ZWQgaW5zaWRlIGFqYXhTZW5kLCBzdG9w
IHRoZXJlCi0gICAgICAgICAgICBpZiAoIHN0YXRlID09PSAyICkgewotICAgICAgICAgICAgICAg
IHJldHVybiBqcVhIUjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gVGltZW91dAot
ICAgICAgICAgICAgaWYgKCBzLmFzeW5jICYmIHMudGltZW91dCA+IDAgKSB7Ci0gICAgICAgICAg
ICAgICAgdGltZW91dFRpbWVyID0gd2luZG93LnNldFRpbWVvdXQoIGZ1bmN0aW9uKCkgewotICAg
ICAgICAgICAgICAgICAgICBqcVhIUi5hYm9ydCggInRpbWVvdXQiICk7Ci0gICAgICAgICAgICAg
ICAgfSwgcy50aW1lb3V0ICk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHRyeSB7Ci0g
ICAgICAgICAgICAgICAgc3RhdGUgPSAxOwotICAgICAgICAgICAgICAgIHRyYW5zcG9ydC5zZW5k
KCByZXF1ZXN0SGVhZGVycywgZG9uZSApOwotICAgICAgICAgICAgfSBjYXRjaCAoIGUgKSB7Ci0K
LSAgICAgICAgICAgICAgICAvLyBQcm9wYWdhdGUgZXhjZXB0aW9uIGFzIGVycm9yIGlmIG5vdCBk
b25lCi0gICAgICAgICAgICAgICAgaWYgKCBzdGF0ZSA8IDIgKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGRvbmUoIC0xLCBlICk7Ci0KLSAgICAgICAgICAgICAgICAvLyBTaW1wbHkgcmV0aHJvdyBv
dGhlcndpc2UKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICB0
aHJvdyBlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0g
ICAgICAgIC8vIENhbGxiYWNrIGZvciB3aGVuIGV2ZXJ5dGhpbmcgaXMgZG9uZQotICAgICAgICBm
dW5jdGlvbiBkb25lKCBzdGF0dXMsIG5hdGl2ZVN0YXR1c1RleHQsIHJlc3BvbnNlcywgaGVhZGVy
cyApIHsKLSAgICAgICAgICAgIHZhciBpc1N1Y2Nlc3MsIHN1Y2Nlc3MsIGVycm9yLCByZXNwb25z
ZSwgbW9kaWZpZWQsCi0gICAgICAgICAgICAgICAgc3RhdHVzVGV4dCA9IG5hdGl2ZVN0YXR1c1Rl
eHQ7Ci0KLSAgICAgICAgICAgIC8vIENhbGxlZCBvbmNlCi0gICAgICAgICAgICBpZiAoIHN0YXRl
ID09PSAyICkgewotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgLy8gU3RhdGUgaXMgImRvbmUiIG5vdwotICAgICAgICAgICAgc3RhdGUgPSAyOwot
Ci0gICAgICAgICAgICAvLyBDbGVhciB0aW1lb3V0IGlmIGl0IGV4aXN0cwotICAgICAgICAgICAg
aWYgKCB0aW1lb3V0VGltZXIgKSB7Ci0gICAgICAgICAgICAgICAgd2luZG93LmNsZWFyVGltZW91
dCggdGltZW91dFRpbWVyICk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIERlcmVm
ZXJlbmNlIHRyYW5zcG9ydCBmb3IgZWFybHkgZ2FyYmFnZSBjb2xsZWN0aW9uCi0gICAgICAgICAg
ICAvLyAobm8gbWF0dGVyIGhvdyBsb25nIHRoZSBqcVhIUiBvYmplY3Qgd2lsbCBiZSB1c2VkKQot
ICAgICAgICAgICAgdHJhbnNwb3J0ID0gdW5kZWZpbmVkOwotCi0gICAgICAgICAgICAvLyBDYWNo
ZSByZXNwb25zZSBoZWFkZXJzCi0gICAgICAgICAgICByZXNwb25zZUhlYWRlcnNTdHJpbmcgPSBo
ZWFkZXJzIHx8ICIiOwotCi0gICAgICAgICAgICAvLyBTZXQgcmVhZHlTdGF0ZQotICAgICAgICAg
ICAganFYSFIucmVhZHlTdGF0ZSA9IHN0YXR1cyA+IDAgPyA0IDogMDsKLQotICAgICAgICAgICAg
Ly8gRGV0ZXJtaW5lIGlmIHN1Y2Nlc3NmdWwKLSAgICAgICAgICAgIGlzU3VjY2VzcyA9IHN0YXR1
cyA+PSAyMDAgJiYgc3RhdHVzIDwgMzAwIHx8IHN0YXR1cyA9PT0gMzA0OwotCi0gICAgICAgICAg
ICAvLyBHZXQgcmVzcG9uc2UgZGF0YQotICAgICAgICAgICAgaWYgKCByZXNwb25zZXMgKSB7Ci0g
ICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBhamF4SGFuZGxlUmVzcG9uc2VzKCBzLCBqcVhIUiwg
cmVzcG9uc2VzICk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIENvbnZlcnQgbm8g
bWF0dGVyIHdoYXQgKHRoYXQgd2F5IHJlc3BvbnNlWFhYIGZpZWxkcyBhcmUgYWx3YXlzIHNldCkK
LSAgICAgICAgICAgIHJlc3BvbnNlID0gYWpheENvbnZlcnQoIHMsIHJlc3BvbnNlLCBqcVhIUiwg
aXNTdWNjZXNzICk7Ci0KLSAgICAgICAgICAgIC8vIElmIHN1Y2Nlc3NmdWwsIGhhbmRsZSB0eXBl
IGNoYWluaW5nCi0gICAgICAgICAgICBpZiAoIGlzU3VjY2VzcyApIHsKLQotICAgICAgICAgICAg
ICAgIC8vIFNldCB0aGUgSWYtTW9kaWZpZWQtU2luY2UgYW5kL29yIElmLU5vbmUtTWF0Y2ggaGVh
ZGVyLCBpZiBpbiBpZk1vZGlmaWVkIG1vZGUuCi0gICAgICAgICAgICAgICAgaWYgKCBzLmlmTW9k
aWZpZWQgKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1vZGlmaWVkID0ganFYSFIuZ2V0UmVzcG9u
c2VIZWFkZXIoICJMYXN0LU1vZGlmaWVkIiApOwotICAgICAgICAgICAgICAgICAgICBpZiAoIG1v
ZGlmaWVkICkgewotICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5Lmxhc3RNb2RpZmllZFsg
Y2FjaGVVUkwgXSA9IG1vZGlmaWVkOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgIG1vZGlmaWVkID0ganFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIoICJldGFnIiApOwot
ICAgICAgICAgICAgICAgICAgICBpZiAoIG1vZGlmaWVkICkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgalF1ZXJ5LmV0YWdbIGNhY2hlVVJMIF0gPSBtb2RpZmllZDsKLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIGlmIG5vIGNv
bnRlbnQKLSAgICAgICAgICAgICAgICBpZiAoIHN0YXR1cyA9PT0gMjA0IHx8IHMudHlwZSA9PT0g
IkhFQUQiICkgewotICAgICAgICAgICAgICAgICAgICBzdGF0dXNUZXh0ID0gIm5vY29udGVudCI7
Ci0KLSAgICAgICAgICAgICAgICAvLyBpZiBub3QgbW9kaWZpZWQKLSAgICAgICAgICAgICAgICB9
IGVsc2UgaWYgKCBzdGF0dXMgPT09IDMwNCApIHsKLSAgICAgICAgICAgICAgICAgICAgc3RhdHVz
VGV4dCA9ICJub3Rtb2RpZmllZCI7Ci0KLSAgICAgICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGRh
dGEsIGxldCdzIGNvbnZlcnQgaXQKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgICAgICBzdGF0dXNUZXh0ID0gcmVzcG9uc2Uuc3RhdGU7Ci0gICAgICAgICAgICAgICAg
ICAgIHN1Y2Nlc3MgPSByZXNwb25zZS5kYXRhOwotICAgICAgICAgICAgICAgICAgICBlcnJvciA9
IHJlc3BvbnNlLmVycm9yOwotICAgICAgICAgICAgICAgICAgICBpc1N1Y2Nlc3MgPSAhZXJyb3I7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLQotICAgICAgICAgICAg
ICAgIC8vIEV4dHJhY3QgZXJyb3IgZnJvbSBzdGF0dXNUZXh0IGFuZCBub3JtYWxpemUgZm9yIG5v
bi1hYm9ydHMKLSAgICAgICAgICAgICAgICBlcnJvciA9IHN0YXR1c1RleHQ7Ci0gICAgICAgICAg
ICAgICAgaWYgKCBzdGF0dXMgfHwgIXN0YXR1c1RleHQgKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHN0YXR1c1RleHQgPSAiZXJyb3IiOwotICAgICAgICAgICAgICAgICAgICBpZiAoIHN0YXR1cyA8
IDAgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSAwOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAvLyBTZXQgZGF0YSBmb3IgdGhlIGZha2UgeGhyIG9iamVjdAotICAgICAgICAgICAganFYSFIu
c3RhdHVzID0gc3RhdHVzOwotICAgICAgICAgICAganFYSFIuc3RhdHVzVGV4dCA9ICggbmF0aXZl
U3RhdHVzVGV4dCB8fCBzdGF0dXNUZXh0ICkgKyAiIjsKLQotICAgICAgICAgICAgLy8gU3VjY2Vz
cy9FcnJvcgotICAgICAgICAgICAgaWYgKCBpc1N1Y2Nlc3MgKSB7Ci0gICAgICAgICAgICAgICAg
ZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGNhbGxiYWNrQ29udGV4dCwgWyBzdWNjZXNzLCBzdGF0dXNU
ZXh0LCBqcVhIUiBdICk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGRl
ZmVycmVkLnJlamVjdFdpdGgoIGNhbGxiYWNrQ29udGV4dCwgWyBqcVhIUiwgc3RhdHVzVGV4dCwg
ZXJyb3IgXSApOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBTdGF0dXMtZGVwZW5k
ZW50IGNhbGxiYWNrcwotICAgICAgICAgICAganFYSFIuc3RhdHVzQ29kZSggc3RhdHVzQ29kZSAp
OwotICAgICAgICAgICAgc3RhdHVzQ29kZSA9IHVuZGVmaW5lZDsKLQotICAgICAgICAgICAgaWYg
KCBmaXJlR2xvYmFscyApIHsKLSAgICAgICAgICAgICAgICBnbG9iYWxFdmVudENvbnRleHQudHJp
Z2dlciggaXNTdWNjZXNzID8gImFqYXhTdWNjZXNzIiA6ICJhamF4RXJyb3IiLAotICAgICAgICAg
ICAgICAgICAgICBbIGpxWEhSLCBzLCBpc1N1Y2Nlc3MgPyBzdWNjZXNzIDogZXJyb3IgXSApOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBDb21wbGV0ZQotICAgICAgICAgICAgY29t
cGxldGVEZWZlcnJlZC5maXJlV2l0aCggY2FsbGJhY2tDb250ZXh0LCBbIGpxWEhSLCBzdGF0dXNU
ZXh0IF0gKTsKLQotICAgICAgICAgICAgaWYgKCBmaXJlR2xvYmFscyApIHsKLSAgICAgICAgICAg
ICAgICBnbG9iYWxFdmVudENvbnRleHQudHJpZ2dlciggImFqYXhDb21wbGV0ZSIsIFsganFYSFIs
IHMgXSApOwotCi0gICAgICAgICAgICAgICAgLy8gSGFuZGxlIHRoZSBnbG9iYWwgQUpBWCBjb3Vu
dGVyCi0gICAgICAgICAgICAgICAgaWYgKCAhKCAtLWpRdWVyeS5hY3RpdmUgKSApIHsKLSAgICAg
ICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnRyaWdnZXIoICJhamF4U3RvcCIgKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4g
anFYSFI7Ci0gICAgfSwKLQotICAgIGdldEpTT046IGZ1bmN0aW9uKCB1cmwsIGRhdGEsIGNhbGxi
YWNrICkgewotICAgICAgICByZXR1cm4galF1ZXJ5LmdldCggdXJsLCBkYXRhLCBjYWxsYmFjaywg
Impzb24iICk7Ci0gICAgfSwKLQotICAgIGdldFNjcmlwdDogZnVuY3Rpb24oIHVybCwgY2FsbGJh
Y2sgKSB7Ci0gICAgICAgIHJldHVybiBqUXVlcnkuZ2V0KCB1cmwsIHVuZGVmaW5lZCwgY2FsbGJh
Y2ssICJzY3JpcHQiICk7Ci0gICAgfQotfSApOwotCi1qUXVlcnkuZWFjaCggWyAiZ2V0IiwgInBv
c3QiIF0sIGZ1bmN0aW9uKCBpLCBtZXRob2QgKSB7Ci0gICAgalF1ZXJ5WyBtZXRob2QgXSA9IGZ1
bmN0aW9uKCB1cmwsIGRhdGEsIGNhbGxiYWNrLCB0eXBlICkgewotCi0gICAgICAgIC8vIFNoaWZ0
IGFyZ3VtZW50cyBpZiBkYXRhIGFyZ3VtZW50IHdhcyBvbWl0dGVkCi0gICAgICAgIGlmICggalF1
ZXJ5LmlzRnVuY3Rpb24oIGRhdGEgKSApIHsKLSAgICAgICAgICAgIHR5cGUgPSB0eXBlIHx8IGNh
bGxiYWNrOwotICAgICAgICAgICAgY2FsbGJhY2sgPSBkYXRhOwotICAgICAgICAgICAgZGF0YSA9
IHVuZGVmaW5lZDsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFRoZSB1cmwgY2FuIGJlIGFuIG9w
dGlvbnMgb2JqZWN0ICh3aGljaCB0aGVuIG11c3QgaGF2ZSAudXJsKQotICAgICAgICByZXR1cm4g
alF1ZXJ5LmFqYXgoIGpRdWVyeS5leHRlbmQoIHsKLSAgICAgICAgICAgIHVybDogdXJsLAotICAg
ICAgICAgICAgdHlwZTogbWV0aG9kLAotICAgICAgICAgICAgZGF0YVR5cGU6IHR5cGUsCi0gICAg
ICAgICAgICBkYXRhOiBkYXRhLAotICAgICAgICAgICAgc3VjY2VzczogY2FsbGJhY2sKLSAgICAg
ICAgfSwgalF1ZXJ5LmlzUGxhaW5PYmplY3QoIHVybCApICYmIHVybCApICk7Ci0gICAgfTsKLX0g
KTsKLQotCi1qUXVlcnkuX2V2YWxVcmwgPSBmdW5jdGlvbiggdXJsICkgewotICAgIHJldHVybiBq
UXVlcnkuYWpheCggewotICAgICAgICB1cmw6IHVybCwKLQotICAgICAgICAvLyBNYWtlIHRoaXMg
ZXhwbGljaXQsIHNpbmNlIHVzZXIgY2FuIG92ZXJyaWRlIHRoaXMgdGhyb3VnaCBhamF4U2V0dXAg
KCMxMTI2NCkKLSAgICAgICAgdHlwZTogIkdFVCIsCi0gICAgICAgIGRhdGFUeXBlOiAic2NyaXB0
IiwKLSAgICAgICAgYXN5bmM6IGZhbHNlLAotICAgICAgICBnbG9iYWw6IGZhbHNlLAotICAgICAg
ICAidGhyb3dzIjogdHJ1ZQotICAgIH0gKTsKLX07Ci0KLQotalF1ZXJ5LmZuLmV4dGVuZCggewot
ICAgIHdyYXBBbGw6IGZ1bmN0aW9uKCBodG1sICkgewotICAgICAgICB2YXIgd3JhcDsKLQotICAg
ICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBodG1sICkgKSB7Ci0gICAgICAgICAgICByZXR1
cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHsKLSAgICAgICAgICAgICAgICBqUXVlcnkoIHRo
aXMgKS53cmFwQWxsKCBodG1sLmNhbGwoIHRoaXMsIGkgKSApOwotICAgICAgICAgICAgfSApOwot
ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCB0aGlzWyAwIF0gKSB7Ci0KLSAgICAgICAgICAgIC8v
IFRoZSBlbGVtZW50cyB0byB3cmFwIHRoZSB0YXJnZXQgYXJvdW5kCi0gICAgICAgICAgICB3cmFw
ID0galF1ZXJ5KCBodG1sLCB0aGlzWyAwIF0ub3duZXJEb2N1bWVudCApLmVxKCAwICkuY2xvbmUo
IHRydWUgKTsKLQotICAgICAgICAgICAgaWYgKCB0aGlzWyAwIF0ucGFyZW50Tm9kZSApIHsKLSAg
ICAgICAgICAgICAgICB3cmFwLmluc2VydEJlZm9yZSggdGhpc1sgMCBdICk7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIHdyYXAubWFwKCBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAg
ICB2YXIgZWxlbSA9IHRoaXM7Ci0KLSAgICAgICAgICAgICAgICB3aGlsZSAoIGVsZW0uZmlyc3RF
bGVtZW50Q2hpbGQgKSB7Ci0gICAgICAgICAgICAgICAgICAgIGVsZW0gPSBlbGVtLmZpcnN0RWxl
bWVudENoaWxkOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVybiBl
bGVtOwotICAgICAgICAgICAgfSApLmFwcGVuZCggdGhpcyApOwotICAgICAgICB9Ci0KLSAgICAg
ICAgcmV0dXJuIHRoaXM7Ci0gICAgfSwKLQotICAgIHdyYXBJbm5lcjogZnVuY3Rpb24oIGh0bWwg
KSB7Ci0gICAgICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIGh0bWwgKSApIHsKLSAgICAgICAg
ICAgIHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkgewotICAgICAgICAgICAgICAgIGpR
dWVyeSggdGhpcyApLndyYXBJbm5lciggaHRtbC5jYWxsKCB0aGlzLCBpICkgKTsKLSAgICAgICAg
ICAgIH0gKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9u
KCkgewotICAgICAgICAgICAgdmFyIHNlbGYgPSBqUXVlcnkoIHRoaXMgKSwKLSAgICAgICAgICAg
ICAgICBjb250ZW50cyA9IHNlbGYuY29udGVudHMoKTsKLQotICAgICAgICAgICAgaWYgKCBjb250
ZW50cy5sZW5ndGggKSB7Ci0gICAgICAgICAgICAgICAgY29udGVudHMud3JhcEFsbCggaHRtbCAp
OwotCi0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHNlbGYuYXBwZW5kKCBo
dG1sICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gKTsKLSAgICB9LAotCi0gICAgd3JhcDog
ZnVuY3Rpb24oIGh0bWwgKSB7Ci0gICAgICAgIHZhciBpc0Z1bmN0aW9uID0galF1ZXJ5LmlzRnVu
Y3Rpb24oIGh0bWwgKTsKLQotICAgICAgICByZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaSAp
IHsKLSAgICAgICAgICAgIGpRdWVyeSggdGhpcyApLndyYXBBbGwoIGlzRnVuY3Rpb24gPyBodG1s
LmNhbGwoIHRoaXMsIGkgKSA6IGh0bWwgKTsKLSAgICAgICAgfSApOwotICAgIH0sCi0KLSAgICB1
bndyYXA6IGZ1bmN0aW9uKCkgewotICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQoKS5lYWNoKCBm
dW5jdGlvbigpIHsKLSAgICAgICAgICAgIGlmICggIWpRdWVyeS5ub2RlTmFtZSggdGhpcywgImJv
ZHkiICkgKSB7Ci0gICAgICAgICAgICAgICAgalF1ZXJ5KCB0aGlzICkucmVwbGFjZVdpdGgoIHRo
aXMuY2hpbGROb2RlcyApOwotICAgICAgICAgICAgfQotICAgICAgICB9ICkuZW5kKCk7Ci0gICAg
fQotfSApOwotCi0KLWpRdWVyeS5leHByLmZpbHRlcnMuaGlkZGVuID0gZnVuY3Rpb24oIGVsZW0g
KSB7Ci0gICAgcmV0dXJuICFqUXVlcnkuZXhwci5maWx0ZXJzLnZpc2libGUoIGVsZW0gKTsKLX07
Ci1qUXVlcnkuZXhwci5maWx0ZXJzLnZpc2libGUgPSBmdW5jdGlvbiggZWxlbSApIHsKLQotICAg
IC8vIFN1cHBvcnQ6IE9wZXJhIDw9IDEyLjEyCi0gICAgLy8gT3BlcmEgcmVwb3J0cyBvZmZzZXRX
aWR0aHMgYW5kIG9mZnNldEhlaWdodHMgbGVzcyB0aGFuIHplcm8gb24gc29tZSBlbGVtZW50cwot
ICAgIC8vIFVzZSBPUiBpbnN0ZWFkIG9mIEFORCBhcyB0aGUgZWxlbWVudCBpcyBub3QgdmlzaWJs
ZSBpZiBlaXRoZXIgaXMgdHJ1ZQotICAgIC8vIFNlZSB0aWNrZXRzICMxMDQwNiBhbmQgIzEzMTMy
Ci0gICAgcmV0dXJuIGVsZW0ub2Zmc2V0V2lkdGggPiAwIHx8IGVsZW0ub2Zmc2V0SGVpZ2h0ID4g
MCB8fCBlbGVtLmdldENsaWVudFJlY3RzKCkubGVuZ3RoID4gMDsKLX07Ci0KLQotCi0KLXZhciBy
MjAgPSAvJTIwL2csCi0gICAgcmJyYWNrZXQgPSAvXFtcXSQvLAotICAgIHJDUkxGID0gL1xyP1xu
L2csCi0gICAgcnN1Ym1pdHRlclR5cGVzID0gL14oPzpzdWJtaXR8YnV0dG9ufGltYWdlfHJlc2V0
fGZpbGUpJC9pLAotICAgIHJzdWJtaXR0YWJsZSA9IC9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVh
fGtleWdlbikvaTsKLQotZnVuY3Rpb24gYnVpbGRQYXJhbXMoIHByZWZpeCwgb2JqLCB0cmFkaXRp
b25hbCwgYWRkICkgewotICAgIHZhciBuYW1lOwotCi0gICAgaWYgKCBqUXVlcnkuaXNBcnJheSgg
b2JqICkgKSB7Ci0KLSAgICAgICAgLy8gU2VyaWFsaXplIGFycmF5IGl0ZW0uCi0gICAgICAgIGpR
dWVyeS5lYWNoKCBvYmosIGZ1bmN0aW9uKCBpLCB2ICkgewotICAgICAgICAgICAgaWYgKCB0cmFk
aXRpb25hbCB8fCByYnJhY2tldC50ZXN0KCBwcmVmaXggKSApIHsKLQotICAgICAgICAgICAgICAg
IC8vIFRyZWF0IGVhY2ggYXJyYXkgaXRlbSBhcyBhIHNjYWxhci4KLSAgICAgICAgICAgICAgICBh
ZGQoIHByZWZpeCwgdiApOwotCi0gICAgICAgICAgICB9IGVsc2UgewotCi0gICAgICAgICAgICAg
ICAgLy8gSXRlbSBpcyBub24tc2NhbGFyIChhcnJheSBvciBvYmplY3QpLCBlbmNvZGUgaXRzIG51
bWVyaWMgaW5kZXguCi0gICAgICAgICAgICAgICAgYnVpbGRQYXJhbXMoCi0gICAgICAgICAgICAg
ICAgICAgIHByZWZpeCArICJbIiArICggdHlwZW9mIHYgPT09ICJvYmplY3QiICYmIHYgIT0gbnVs
bCA/IGkgOiAiIiApICsgIl0iLAotICAgICAgICAgICAgICAgICAgICB2LAotICAgICAgICAgICAg
ICAgICAgICB0cmFkaXRpb25hbCwKLSAgICAgICAgICAgICAgICAgICAgYWRkCi0gICAgICAgICAg
ICAgICAgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSApOwotCi0gICAgfSBlbHNlIGlmICgg
IXRyYWRpdGlvbmFsICYmIGpRdWVyeS50eXBlKCBvYmogKSA9PT0gIm9iamVjdCIgKSB7Ci0KLSAg
ICAgICAgLy8gU2VyaWFsaXplIG9iamVjdCBpdGVtLgotICAgICAgICBmb3IgKCBuYW1lIGluIG9i
aiApIHsKLSAgICAgICAgICAgIGJ1aWxkUGFyYW1zKCBwcmVmaXggKyAiWyIgKyBuYW1lICsgIl0i
LCBvYmpbIG5hbWUgXSwgdHJhZGl0aW9uYWwsIGFkZCApOwotICAgICAgICB9Ci0KLSAgICB9IGVs
c2UgewotCi0gICAgICAgIC8vIFNlcmlhbGl6ZSBzY2FsYXIgaXRlbS4KLSAgICAgICAgYWRkKCBw
cmVmaXgsIG9iaiApOwotICAgIH0KLX0KLQotLy8gU2VyaWFsaXplIGFuIGFycmF5IG9mIGZvcm0g
ZWxlbWVudHMgb3IgYSBzZXQgb2YKLS8vIGtleS92YWx1ZXMgaW50byBhIHF1ZXJ5IHN0cmluZwot
alF1ZXJ5LnBhcmFtID0gZnVuY3Rpb24oIGEsIHRyYWRpdGlvbmFsICkgewotICAgIHZhciBwcmVm
aXgsCi0gICAgICAgIHMgPSBbXSwKLSAgICAgICAgYWRkID0gZnVuY3Rpb24oIGtleSwgdmFsdWUg
KSB7Ci0KLSAgICAgICAgICAgIC8vIElmIHZhbHVlIGlzIGEgZnVuY3Rpb24sIGludm9rZSBpdCBh
bmQgcmV0dXJuIGl0cyB2YWx1ZQotICAgICAgICAgICAgdmFsdWUgPSBqUXVlcnkuaXNGdW5jdGlv
biggdmFsdWUgKSA/IHZhbHVlKCkgOiAoIHZhbHVlID09IG51bGwgPyAiIiA6IHZhbHVlICk7Ci0g
ICAgICAgICAgICBzWyBzLmxlbmd0aCBdID0gZW5jb2RlVVJJQ29tcG9uZW50KCBrZXkgKSArICI9
IiArIGVuY29kZVVSSUNvbXBvbmVudCggdmFsdWUgKTsKLSAgICAgICAgfTsKLQotICAgIC8vIFNl
dCB0cmFkaXRpb25hbCB0byB0cnVlIGZvciBqUXVlcnkgPD0gMS4zLjIgYmVoYXZpb3IuCi0gICAg
aWYgKCB0cmFkaXRpb25hbCA9PT0gdW5kZWZpbmVkICkgewotICAgICAgICB0cmFkaXRpb25hbCA9
IGpRdWVyeS5hamF4U2V0dGluZ3MgJiYgalF1ZXJ5LmFqYXhTZXR0aW5ncy50cmFkaXRpb25hbDsK
LSAgICB9Ci0KLSAgICAvLyBJZiBhbiBhcnJheSB3YXMgcGFzc2VkIGluLCBhc3N1bWUgdGhhdCBp
dCBpcyBhbiBhcnJheSBvZiBmb3JtIGVsZW1lbnRzLgotICAgIGlmICggalF1ZXJ5LmlzQXJyYXko
IGEgKSB8fCAoIGEuanF1ZXJ5ICYmICFqUXVlcnkuaXNQbGFpbk9iamVjdCggYSApICkgKSB7Ci0K
LSAgICAgICAgLy8gU2VyaWFsaXplIHRoZSBmb3JtIGVsZW1lbnRzCi0gICAgICAgIGpRdWVyeS5l
YWNoKCBhLCBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIGFkZCggdGhpcy5uYW1lLCB0aGlzLnZh
bHVlICk7Ci0gICAgICAgIH0gKTsKLQotICAgIH0gZWxzZSB7Ci0KLSAgICAgICAgLy8gSWYgdHJh
ZGl0aW9uYWwsIGVuY29kZSB0aGUgIm9sZCIgd2F5ICh0aGUgd2F5IDEuMy4yIG9yIG9sZGVyCi0g
ICAgICAgIC8vIGRpZCBpdCksIG90aGVyd2lzZSBlbmNvZGUgcGFyYW1zIHJlY3Vyc2l2ZWx5Lgot
ICAgICAgICBmb3IgKCBwcmVmaXggaW4gYSApIHsKLSAgICAgICAgICAgIGJ1aWxkUGFyYW1zKCBw
cmVmaXgsIGFbIHByZWZpeCBdLCB0cmFkaXRpb25hbCwgYWRkICk7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICAvLyBSZXR1cm4gdGhlIHJlc3VsdGluZyBzZXJpYWxpemF0aW9uCi0gICAgcmV0dXJu
IHMuam9pbiggIiYiICkucmVwbGFjZSggcjIwLCAiKyIgKTsKLX07Ci0KLWpRdWVyeS5mbi5leHRl
bmQoIHsKLSAgICBzZXJpYWxpemU6IGZ1bmN0aW9uKCkgewotICAgICAgICByZXR1cm4galF1ZXJ5
LnBhcmFtKCB0aGlzLnNlcmlhbGl6ZUFycmF5KCkgKTsKLSAgICB9LAotICAgIHNlcmlhbGl6ZUFy
cmF5OiBmdW5jdGlvbigpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMubWFwKCBmdW5jdGlvbigpIHsK
LQotICAgICAgICAgICAgLy8gQ2FuIGFkZCBwcm9wSG9vayBmb3IgImVsZW1lbnRzIiB0byBmaWx0
ZXIgb3IgYWRkIGZvcm0gZWxlbWVudHMKLSAgICAgICAgICAgIHZhciBlbGVtZW50cyA9IGpRdWVy
eS5wcm9wKCB0aGlzLCAiZWxlbWVudHMiICk7Ci0gICAgICAgICAgICByZXR1cm4gZWxlbWVudHMg
PyBqUXVlcnkubWFrZUFycmF5KCBlbGVtZW50cyApIDogdGhpczsKLSAgICAgICAgfSApCi0gICAg
ICAgIC5maWx0ZXIoIGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgdmFyIHR5cGUgPSB0aGlzLnR5
cGU7Ci0KLSAgICAgICAgICAgIC8vIFVzZSAuaXMoICI6ZGlzYWJsZWQiICkgc28gdGhhdCBmaWVs
ZHNldFtkaXNhYmxlZF0gd29ya3MKLSAgICAgICAgICAgIHJldHVybiB0aGlzLm5hbWUgJiYgIWpR
dWVyeSggdGhpcyApLmlzKCAiOmRpc2FibGVkIiApICYmCi0gICAgICAgICAgICAgICAgcnN1Ym1p
dHRhYmxlLnRlc3QoIHRoaXMubm9kZU5hbWUgKSAmJiAhcnN1Ym1pdHRlclR5cGVzLnRlc3QoIHR5
cGUgKSAmJgotICAgICAgICAgICAgICAgICggdGhpcy5jaGVja2VkIHx8ICFyY2hlY2thYmxlVHlw
ZS50ZXN0KCB0eXBlICkgKTsKLSAgICAgICAgfSApCi0gICAgICAgIC5tYXAoIGZ1bmN0aW9uKCBp
LCBlbGVtICkgewotICAgICAgICAgICAgdmFyIHZhbCA9IGpRdWVyeSggdGhpcyApLnZhbCgpOwot
Ci0gICAgICAgICAgICByZXR1cm4gdmFsID09IG51bGwgPwotICAgICAgICAgICAgICAgIG51bGwg
OgotICAgICAgICAgICAgICAgIGpRdWVyeS5pc0FycmF5KCB2YWwgKSA/Ci0gICAgICAgICAgICAg
ICAgICAgIGpRdWVyeS5tYXAoIHZhbCwgZnVuY3Rpb24oIHZhbCApIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB7IG5hbWU6IGVsZW0ubmFtZSwgdmFsdWU6IHZhbC5yZXBsYWNlKCBy
Q1JMRiwgIlxyXG4iICkgfTsKLSAgICAgICAgICAgICAgICAgICAgfSApIDoKLSAgICAgICAgICAg
ICAgICAgICAgeyBuYW1lOiBlbGVtLm5hbWUsIHZhbHVlOiB2YWwucmVwbGFjZSggckNSTEYsICJc
clxuIiApIH07Ci0gICAgICAgIH0gKS5nZXQoKTsKLSAgICB9Ci19ICk7Ci0KLQotalF1ZXJ5LmFq
YXhTZXR0aW5ncy54aHIgPSBmdW5jdGlvbigpIHsKLSAgICB0cnkgewotICAgICAgICByZXR1cm4g
bmV3IHdpbmRvdy5YTUxIdHRwUmVxdWVzdCgpOwotICAgIH0gY2F0Y2ggKCBlICkge30KLX07Ci0K
LXZhciB4aHJTdWNjZXNzU3RhdHVzID0gewotCi0gICAgICAgIC8vIEZpbGUgcHJvdG9jb2wgYWx3
YXlzIHlpZWxkcyBzdGF0dXMgY29kZSAwLCBhc3N1bWUgMjAwCi0gICAgICAgIDA6IDIwMCwKLQot
ICAgICAgICAvLyBTdXBwb3J0OiBJRTkKLSAgICAgICAgLy8gIzE0NTA6IHNvbWV0aW1lcyBJRSBy
ZXR1cm5zIDEyMjMgd2hlbiBpdCBzaG91bGQgYmUgMjA0Ci0gICAgICAgIDEyMjM6IDIwNAotICAg
IH0sCi0gICAgeGhyU3VwcG9ydGVkID0galF1ZXJ5LmFqYXhTZXR0aW5ncy54aHIoKTsKLQotc3Vw
cG9ydC5jb3JzID0gISF4aHJTdXBwb3J0ZWQgJiYgKCAid2l0aENyZWRlbnRpYWxzIiBpbiB4aHJT
dXBwb3J0ZWQgKTsKLXN1cHBvcnQuYWpheCA9IHhoclN1cHBvcnRlZCA9ICEheGhyU3VwcG9ydGVk
OwotCi1qUXVlcnkuYWpheFRyYW5zcG9ydCggZnVuY3Rpb24oIG9wdGlvbnMgKSB7Ci0gICAgdmFy
IGNhbGxiYWNrLCBlcnJvckNhbGxiYWNrOwotCi0gICAgLy8gQ3Jvc3MgZG9tYWluIG9ubHkgYWxs
b3dlZCBpZiBzdXBwb3J0ZWQgdGhyb3VnaCBYTUxIdHRwUmVxdWVzdAotICAgIGlmICggc3VwcG9y
dC5jb3JzIHx8IHhoclN1cHBvcnRlZCAmJiAhb3B0aW9ucy5jcm9zc0RvbWFpbiApIHsKLSAgICAg
ICAgcmV0dXJuIHsKLSAgICAgICAgICAgIHNlbmQ6IGZ1bmN0aW9uKCBoZWFkZXJzLCBjb21wbGV0
ZSApIHsKLSAgICAgICAgICAgICAgICB2YXIgaSwKLSAgICAgICAgICAgICAgICAgICAgeGhyID0g
b3B0aW9ucy54aHIoKTsKLQotICAgICAgICAgICAgICAgIHhoci5vcGVuKAotICAgICAgICAgICAg
ICAgICAgICBvcHRpb25zLnR5cGUsCi0gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMudXJsLAot
ICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmFzeW5jLAotICAgICAgICAgICAgICAgICAgICBv
cHRpb25zLnVzZXJuYW1lLAotICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnBhc3N3b3JkCi0g
ICAgICAgICAgICAgICAgKTsKLQotICAgICAgICAgICAgICAgIC8vIEFwcGx5IGN1c3RvbSBmaWVs
ZHMgaWYgcHJvdmlkZWQKLSAgICAgICAgICAgICAgICBpZiAoIG9wdGlvbnMueGhyRmllbGRzICkg
ewotICAgICAgICAgICAgICAgICAgICBmb3IgKCBpIGluIG9wdGlvbnMueGhyRmllbGRzICkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgeGhyWyBpIF0gPSBvcHRpb25zLnhockZpZWxkc1sgaSBd
OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgLy8gT3ZlcnJpZGUgbWltZSB0eXBlIGlmIG5lZWRlZAotICAgICAgICAgICAgICAgIGlm
ICggb3B0aW9ucy5taW1lVHlwZSAmJiB4aHIub3ZlcnJpZGVNaW1lVHlwZSApIHsKLSAgICAgICAg
ICAgICAgICAgICAgeGhyLm92ZXJyaWRlTWltZVR5cGUoIG9wdGlvbnMubWltZVR5cGUgKTsKLSAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBYLVJlcXVlc3RlZC1XaXRoIGhl
YWRlcgotICAgICAgICAgICAgICAgIC8vIEZvciBjcm9zcy1kb21haW4gcmVxdWVzdHMsIHNlZWlu
ZyBhcyBjb25kaXRpb25zIGZvciBhIHByZWZsaWdodCBhcmUKLSAgICAgICAgICAgICAgICAvLyBh
a2luIHRvIGEgamlnc2F3IHB1enpsZSwgd2Ugc2ltcGx5IG5ldmVyIHNldCBpdCB0byBiZSBzdXJl
LgotICAgICAgICAgICAgICAgIC8vIChpdCBjYW4gYWx3YXlzIGJlIHNldCBvbiBhIHBlci1yZXF1
ZXN0IGJhc2lzIG9yIGV2ZW4gdXNpbmcgYWpheFNldHVwKQotICAgICAgICAgICAgICAgIC8vIEZv
ciBzYW1lLWRvbWFpbiByZXF1ZXN0cywgd29uJ3QgY2hhbmdlIGhlYWRlciBpZiBhbHJlYWR5IHBy
b3ZpZGVkLgotICAgICAgICAgICAgICAgIGlmICggIW9wdGlvbnMuY3Jvc3NEb21haW4gJiYgIWhl
YWRlcnNbICJYLVJlcXVlc3RlZC1XaXRoIiBdICkgewotICAgICAgICAgICAgICAgICAgICBoZWFk
ZXJzWyAiWC1SZXF1ZXN0ZWQtV2l0aCIgXSA9ICJYTUxIdHRwUmVxdWVzdCI7Ci0gICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gU2V0IGhlYWRlcnMKLSAgICAgICAgICAgICAg
ICBmb3IgKCBpIGluIGhlYWRlcnMgKSB7Ci0gICAgICAgICAgICAgICAgICAgIHhoci5zZXRSZXF1
ZXN0SGVhZGVyKCBpLCBoZWFkZXJzWyBpIF0gKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICAvLyBDYWxsYmFjawotICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZnVuY3Rp
b24oIHR5cGUgKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggY2FsbGJhY2sgKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2FsbGJhY2sgPSBlcnJvckNhbGxiYWNrID0geGhyLm9ubG9hZCA9Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhoci5vbmVycm9yID0geGhyLm9uYWJvcnQgPSB4
aHIub25yZWFkeXN0YXRlY2hhbmdlID0gbnVsbDsKLQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggdHlwZSA9PT0gImFib3J0IiApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgeGhyLmFib3J0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlm
ICggdHlwZSA9PT0gImVycm9yIiApIHsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBTdXBwb3J0OiBJRTkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT24g
YSBtYW51YWwgbmF0aXZlIGFib3J0LCBJRTkgdGhyb3dzCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGVycm9ycyBvbiBhbnkgcHJvcGVydHkgYWNjZXNzIHRoYXQgaXMgbm90IHJl
YWR5U3RhdGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0eXBlb2YgeGhy
LnN0YXR1cyAhPT0gIm51bWJlciIgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb21wbGV0ZSggMCwgImVycm9yIiApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxl
dGUoCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGaWxlOiBw
cm90b2NvbCBhbHdheXMgeWllbGRzIHN0YXR1cyAwOyBzZWUgIzg2MDUsICMxNDIwNwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhoci5zdGF0dXMsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGhyLnN0YXR1c1RleHQKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHhoclN1Y2Nlc3NTdGF0dXNbIHhoci5zdGF0dXMgXSB8fCB4aHIuc3RhdHVzLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGhyLnN0YXR1c1RleHQsCi0KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQ6IElFOSBvbmx5Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJRTkgaGFzIG5vIFhIUjIgYnV0
IHRocm93cyBvbiBiaW5hcnkgKHRyYWMtMTE0MjYpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBGb3IgWEhSMiBub24tdGV4dCwgbGV0IHRoZSBjYWxsZXIgaGFuZGxlIGl0
IChnaC0yNDk4KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCB4aHIucmVz
cG9uc2VUeXBlIHx8ICJ0ZXh0IiApICE9PSAidGV4dCIgIHx8Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0eXBlb2YgeGhyLnJlc3BvbnNlVGV4dCAhPT0gInN0cmluZyIgPwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgYmluYXJ5OiB4aHIucmVz
cG9uc2UgfSA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyB0ZXh0
OiB4aHIucmVzcG9uc2VUZXh0IH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB4aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICAgICAgfTsKLQot
ICAgICAgICAgICAgICAgIC8vIExpc3RlbiB0byBldmVudHMKLSAgICAgICAgICAgICAgICB4aHIu
b25sb2FkID0gY2FsbGJhY2soKTsKLSAgICAgICAgICAgICAgICBlcnJvckNhbGxiYWNrID0geGhy
Lm9uZXJyb3IgPSBjYWxsYmFjayggImVycm9yIiApOwotCi0gICAgICAgICAgICAgICAgLy8gU3Vw
cG9ydDogSUU5Ci0gICAgICAgICAgICAgICAgLy8gVXNlIG9ucmVhZHlzdGF0ZWNoYW5nZSB0byBy
ZXBsYWNlIG9uYWJvcnQKLSAgICAgICAgICAgICAgICAvLyB0byBoYW5kbGUgdW5jYXVnaHQgYWJv
cnRzCi0gICAgICAgICAgICAgICAgaWYgKCB4aHIub25hYm9ydCAhPT0gdW5kZWZpbmVkICkgewot
ICAgICAgICAgICAgICAgICAgICB4aHIub25hYm9ydCA9IGVycm9yQ2FsbGJhY2s7Ci0gICAgICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNo
YW5nZSA9IGZ1bmN0aW9uKCkgewotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBy
ZWFkeVN0YXRlIGJlZm9yZSB0aW1lb3V0IGFzIGl0IGNoYW5nZXMKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggeGhyLnJlYWR5U3RhdGUgPT09IDQgKSB7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBBbGxvdyBvbmVycm9yIHRvIGJlIGNhbGxlZCBmaXJzdCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBidXQgdGhhdCB3aWxsIG5vdCBoYW5kbGUgYSBuYXRpdmUg
YWJvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBbHNvLCBzYXZlIGVycm9yQ2Fs
bGJhY2sgdG8gYSB2YXJpYWJsZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFzIHho
ci5vbmVycm9yIGNhbm5vdCBiZSBhY2Nlc3NlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHdpbmRvdy5zZXRUaW1lb3V0KCBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCBjYWxsYmFjayApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGVycm9yQ2FsbGJhY2soKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICAvLyBDcmVhdGUgdGhlIGFib3J0IGNhbGxiYWNrCi0gICAgICAgICAgICAgICAg
Y2FsbGJhY2sgPSBjYWxsYmFjayggImFib3J0IiApOwotCi0gICAgICAgICAgICAgICAgdHJ5IHsK
LQotICAgICAgICAgICAgICAgICAgICAvLyBEbyBzZW5kIHRoZSByZXF1ZXN0ICh0aGlzIG1heSBy
YWlzZSBhbiBleGNlcHRpb24pCi0gICAgICAgICAgICAgICAgICAgIHhoci5zZW5kKCBvcHRpb25z
Lmhhc0NvbnRlbnQgJiYgb3B0aW9ucy5kYXRhIHx8IG51bGwgKTsKLSAgICAgICAgICAgICAgICB9
IGNhdGNoICggZSApIHsKLQotICAgICAgICAgICAgICAgICAgICAvLyAjMTQ2ODM6IE9ubHkgcmV0
aHJvdyBpZiB0aGlzIGhhc24ndCBiZWVuIG5vdGlmaWVkIGFzIGFuIGVycm9yIHlldAotICAgICAg
ICAgICAgICAgICAgICBpZiAoIGNhbGxiYWNrICkgewotICAgICAgICAgICAgICAgICAgICAgICAg
dGhyb3cgZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0sCi0KLSAgICAgICAgICAgIGFib3J0OiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAg
ICAgICBpZiAoIGNhbGxiYWNrICkgewotICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLSAgICB9Ci19ICk7
Ci0KLQotCi0KLS8vIEluc3RhbGwgc2NyaXB0IGRhdGFUeXBlCi1qUXVlcnkuYWpheFNldHVwKCB7
Ci0gICAgYWNjZXB0czogewotICAgICAgICBzY3JpcHQ6ICJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxp
Y2F0aW9uL2phdmFzY3JpcHQsICIgKwotICAgICAgICAgICAgImFwcGxpY2F0aW9uL2VjbWFzY3Jp
cHQsIGFwcGxpY2F0aW9uL3gtZWNtYXNjcmlwdCIKLSAgICB9LAotICAgIGNvbnRlbnRzOiB7Ci0g
ICAgICAgIHNjcmlwdDogL1xiKD86amF2YXxlY21hKXNjcmlwdFxiLwotICAgIH0sCi0gICAgY29u
dmVydGVyczogewotICAgICAgICAidGV4dCBzY3JpcHQiOiBmdW5jdGlvbiggdGV4dCApIHsKLSAg
ICAgICAgICAgIGpRdWVyeS5nbG9iYWxFdmFsKCB0ZXh0ICk7Ci0gICAgICAgICAgICByZXR1cm4g
dGV4dDsKLSAgICAgICAgfQotICAgIH0KLX0gKTsKLQotLy8gSGFuZGxlIGNhY2hlJ3Mgc3BlY2lh
bCBjYXNlIGFuZCBjcm9zc0RvbWFpbgotalF1ZXJ5LmFqYXhQcmVmaWx0ZXIoICJzY3JpcHQiLCBm
dW5jdGlvbiggcyApIHsKLSAgICBpZiAoIHMuY2FjaGUgPT09IHVuZGVmaW5lZCApIHsKLSAgICAg
ICAgcy5jYWNoZSA9IGZhbHNlOwotICAgIH0KLSAgICBpZiAoIHMuY3Jvc3NEb21haW4gKSB7Ci0g
ICAgICAgIHMudHlwZSA9ICJHRVQiOwotICAgIH0KLX0gKTsKLQotLy8gQmluZCBzY3JpcHQgdGFn
IGhhY2sgdHJhbnNwb3J0Ci1qUXVlcnkuYWpheFRyYW5zcG9ydCggInNjcmlwdCIsIGZ1bmN0aW9u
KCBzICkgewotCi0gICAgLy8gVGhpcyB0cmFuc3BvcnQgb25seSBkZWFscyB3aXRoIGNyb3NzIGRv
bWFpbiByZXF1ZXN0cwotICAgIGlmICggcy5jcm9zc0RvbWFpbiApIHsKLSAgICAgICAgdmFyIHNj
cmlwdCwgY2FsbGJhY2s7Ci0gICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICBzZW5kOiBmdW5j
dGlvbiggXywgY29tcGxldGUgKSB7Ci0gICAgICAgICAgICAgICAgc2NyaXB0ID0galF1ZXJ5KCAi
PHNjcmlwdD4iICkucHJvcCggewotICAgICAgICAgICAgICAgICAgICBjaGFyc2V0OiBzLnNjcmlw
dENoYXJzZXQsCi0gICAgICAgICAgICAgICAgICAgIHNyYzogcy51cmwKLSAgICAgICAgICAgICAg
ICB9ICkub24oCi0gICAgICAgICAgICAgICAgICAgICJsb2FkIGVycm9yIiwKLSAgICAgICAgICAg
ICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiggZXZ0ICkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgc2NyaXB0LnJlbW92ZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sg
PSBudWxsOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBldnQgKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29tcGxldGUoIGV2dC50eXBlID09PSAiZXJyb3IiID8gNDA0IDog
MjAwLCBldnQudHlwZSApOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgKTsKLQotICAgICAgICAgICAgICAgIC8vIFVzZSBu
YXRpdmUgRE9NIG1hbmlwdWxhdGlvbiB0byBhdm9pZCBvdXIgZG9tTWFuaXAgQUpBWCB0cmlja2Vy
eQotICAgICAgICAgICAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoIHNjcmlwdFsgMCBd
ICk7Ci0gICAgICAgICAgICB9LAotICAgICAgICAgICAgYWJvcnQ6IGZ1bmN0aW9uKCkgewotICAg
ICAgICAgICAgICAgIGlmICggY2FsbGJhY2sgKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhbGxi
YWNrKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9OwotICAg
IH0KLX0gKTsKLQotCi0KLQotdmFyIG9sZENhbGxiYWNrcyA9IFtdLAotICAgIHJqc29ucCA9IC8o
PSlcPyg/PSZ8JCl8XD9cPy87Ci0KLS8vIERlZmF1bHQganNvbnAgc2V0dGluZ3MKLWpRdWVyeS5h
amF4U2V0dXAoIHsKLSAgICBqc29ucDogImNhbGxiYWNrIiwKLSAgICBqc29ucENhbGxiYWNrOiBm
dW5jdGlvbigpIHsKLSAgICAgICAgdmFyIGNhbGxiYWNrID0gb2xkQ2FsbGJhY2tzLnBvcCgpIHx8
ICggalF1ZXJ5LmV4cGFuZG8gKyAiXyIgKyAoIG5vbmNlKysgKSApOwotICAgICAgICB0aGlzWyBj
YWxsYmFjayBdID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIGNhbGxiYWNrOwotICAgIH0KLX0gKTsK
LQotLy8gRGV0ZWN0LCBub3JtYWxpemUgb3B0aW9ucyBhbmQgaW5zdGFsbCBjYWxsYmFja3MgZm9y
IGpzb25wIHJlcXVlc3RzCi1qUXVlcnkuYWpheFByZWZpbHRlciggImpzb24ganNvbnAiLCBmdW5j
dGlvbiggcywgb3JpZ2luYWxTZXR0aW5ncywganFYSFIgKSB7Ci0KLSAgICB2YXIgY2FsbGJhY2tO
YW1lLCBvdmVyd3JpdHRlbiwgcmVzcG9uc2VDb250YWluZXIsCi0gICAgICAgIGpzb25Qcm9wID0g
cy5qc29ucCAhPT0gZmFsc2UgJiYgKCByanNvbnAudGVzdCggcy51cmwgKSA/Ci0gICAgICAgICAg
ICAidXJsIiA6Ci0gICAgICAgICAgICB0eXBlb2Ygcy5kYXRhID09PSAic3RyaW5nIiAmJgotICAg
ICAgICAgICAgICAgICggcy5jb250ZW50VHlwZSB8fCAiIiApCi0gICAgICAgICAgICAgICAgICAg
IC5pbmRleE9mKCAiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiApID09PSAwICYm
Ci0gICAgICAgICAgICAgICAgcmpzb25wLnRlc3QoIHMuZGF0YSApICYmICJkYXRhIgotICAgICAg
ICApOwotCi0gICAgLy8gSGFuZGxlIGlmZiB0aGUgZXhwZWN0ZWQgZGF0YSB0eXBlIGlzICJqc29u
cCIgb3Igd2UgaGF2ZSBhIHBhcmFtZXRlciB0byBzZXQKLSAgICBpZiAoIGpzb25Qcm9wIHx8IHMu
ZGF0YVR5cGVzWyAwIF0gPT09ICJqc29ucCIgKSB7Ci0KLSAgICAgICAgLy8gR2V0IGNhbGxiYWNr
IG5hbWUsIHJlbWVtYmVyaW5nIHByZWV4aXN0aW5nIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBpdAot
ICAgICAgICBjYWxsYmFja05hbWUgPSBzLmpzb25wQ2FsbGJhY2sgPSBqUXVlcnkuaXNGdW5jdGlv
biggcy5qc29ucENhbGxiYWNrICkgPwotICAgICAgICAgICAgcy5qc29ucENhbGxiYWNrKCkgOgot
ICAgICAgICAgICAgcy5qc29ucENhbGxiYWNrOwotCi0gICAgICAgIC8vIEluc2VydCBjYWxsYmFj
ayBpbnRvIHVybCBvciBmb3JtIGRhdGEKLSAgICAgICAgaWYgKCBqc29uUHJvcCApIHsKLSAgICAg
ICAgICAgIHNbIGpzb25Qcm9wIF0gPSBzWyBqc29uUHJvcCBdLnJlcGxhY2UoIHJqc29ucCwgIiQx
IiArIGNhbGxiYWNrTmFtZSApOwotICAgICAgICB9IGVsc2UgaWYgKCBzLmpzb25wICE9PSBmYWxz
ZSApIHsKLSAgICAgICAgICAgIHMudXJsICs9ICggcnF1ZXJ5LnRlc3QoIHMudXJsICkgPyAiJiIg
OiAiPyIgKSArIHMuanNvbnAgKyAiPSIgKyBjYWxsYmFja05hbWU7Ci0gICAgICAgIH0KLQotICAg
ICAgICAvLyBVc2UgZGF0YSBjb252ZXJ0ZXIgdG8gcmV0cmlldmUganNvbiBhZnRlciBzY3JpcHQg
ZXhlY3V0aW9uCi0gICAgICAgIHMuY29udmVydGVyc1sgInNjcmlwdCBqc29uIiBdID0gZnVuY3Rp
b24oKSB7Ci0gICAgICAgICAgICBpZiAoICFyZXNwb25zZUNvbnRhaW5lciApIHsKLSAgICAgICAg
ICAgICAgICBqUXVlcnkuZXJyb3IoIGNhbGxiYWNrTmFtZSArICIgd2FzIG5vdCBjYWxsZWQiICk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2VDb250YWluZXJbIDAg
XTsKLSAgICAgICAgfTsKLQotICAgICAgICAvLyBGb3JjZSBqc29uIGRhdGFUeXBlCi0gICAgICAg
IHMuZGF0YVR5cGVzWyAwIF0gPSAianNvbiI7Ci0KLSAgICAgICAgLy8gSW5zdGFsbCBjYWxsYmFj
awotICAgICAgICBvdmVyd3JpdHRlbiA9IHdpbmRvd1sgY2FsbGJhY2tOYW1lIF07Ci0gICAgICAg
IHdpbmRvd1sgY2FsbGJhY2tOYW1lIF0gPSBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIHJlc3Bv
bnNlQ29udGFpbmVyID0gYXJndW1lbnRzOwotICAgICAgICB9OwotCi0gICAgICAgIC8vIENsZWFu
LXVwIGZ1bmN0aW9uIChmaXJlcyBhZnRlciBjb252ZXJ0ZXJzKQotICAgICAgICBqcVhIUi5hbHdh
eXMoIGZ1bmN0aW9uKCkgewotCi0gICAgICAgICAgICAvLyBJZiBwcmV2aW91cyB2YWx1ZSBkaWRu
J3QgZXhpc3QgLSByZW1vdmUgaXQKLSAgICAgICAgICAgIGlmICggb3ZlcndyaXR0ZW4gPT09IHVu
ZGVmaW5lZCApIHsKLSAgICAgICAgICAgICAgICBqUXVlcnkoIHdpbmRvdyApLnJlbW92ZVByb3Ao
IGNhbGxiYWNrTmFtZSApOwotCi0gICAgICAgICAgICAvLyBPdGhlcndpc2UgcmVzdG9yZSBwcmVl
eGlzdGluZyB2YWx1ZQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB3aW5k
b3dbIGNhbGxiYWNrTmFtZSBdID0gb3ZlcndyaXR0ZW47Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIC8vIFNhdmUgYmFjayBhcyBmcmVlCi0gICAgICAgICAgICBpZiAoIHNbIGNhbGxiYWNr
TmFtZSBdICkgewotCi0gICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgcmUtdXNpbmcg
dGhlIG9wdGlvbnMgZG9lc24ndCBzY3JldyB0aGluZ3MgYXJvdW5kCi0gICAgICAgICAgICAgICAg
cy5qc29ucENhbGxiYWNrID0gb3JpZ2luYWxTZXR0aW5ncy5qc29ucENhbGxiYWNrOwotCi0gICAg
ICAgICAgICAgICAgLy8gU2F2ZSB0aGUgY2FsbGJhY2sgbmFtZSBmb3IgZnV0dXJlIHVzZQotICAg
ICAgICAgICAgICAgIG9sZENhbGxiYWNrcy5wdXNoKCBjYWxsYmFja05hbWUgKTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgLy8gQ2FsbCBpZiBpdCB3YXMgYSBmdW5jdGlvbiBhbmQgd2Ug
aGF2ZSBhIHJlc3BvbnNlCi0gICAgICAgICAgICBpZiAoIHJlc3BvbnNlQ29udGFpbmVyICYmIGpR
dWVyeS5pc0Z1bmN0aW9uKCBvdmVyd3JpdHRlbiApICkgewotICAgICAgICAgICAgICAgIG92ZXJ3
cml0dGVuKCByZXNwb25zZUNvbnRhaW5lclsgMCBdICk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIHJlc3BvbnNlQ29udGFpbmVyID0gb3ZlcndyaXR0ZW4gPSB1bmRlZmluZWQ7Ci0gICAg
ICAgIH0gKTsKLQotICAgICAgICAvLyBEZWxlZ2F0ZSB0byBzY3JpcHQKLSAgICAgICAgcmV0dXJu
ICJzY3JpcHQiOwotICAgIH0KLX0gKTsKLQotCi0KLQotLy8gQXJndW1lbnQgImRhdGEiIHNob3Vs
ZCBiZSBzdHJpbmcgb2YgaHRtbAotLy8gY29udGV4dCAob3B0aW9uYWwpOiBJZiBzcGVjaWZpZWQs
IHRoZSBmcmFnbWVudCB3aWxsIGJlIGNyZWF0ZWQgaW4gdGhpcyBjb250ZXh0LAotLy8gZGVmYXVs
dHMgdG8gZG9jdW1lbnQKLS8vIGtlZXBTY3JpcHRzIChvcHRpb25hbCk6IElmIHRydWUsIHdpbGwg
aW5jbHVkZSBzY3JpcHRzIHBhc3NlZCBpbiB0aGUgaHRtbCBzdHJpbmcKLWpRdWVyeS5wYXJzZUhU
TUwgPSBmdW5jdGlvbiggZGF0YSwgY29udGV4dCwga2VlcFNjcmlwdHMgKSB7Ci0gICAgaWYgKCAh
ZGF0YSB8fCB0eXBlb2YgZGF0YSAhPT0gInN0cmluZyIgKSB7Ci0gICAgICAgIHJldHVybiBudWxs
OwotICAgIH0KLSAgICBpZiAoIHR5cGVvZiBjb250ZXh0ID09PSAiYm9vbGVhbiIgKSB7Ci0gICAg
ICAgIGtlZXBTY3JpcHRzID0gY29udGV4dDsKLSAgICAgICAgY29udGV4dCA9IGZhbHNlOwotICAg
IH0KLSAgICBjb250ZXh0ID0gY29udGV4dCB8fCBkb2N1bWVudDsKLQotICAgIHZhciBwYXJzZWQg
PSByc2luZ2xlVGFnLmV4ZWMoIGRhdGEgKSwKLSAgICAgICAgc2NyaXB0cyA9ICFrZWVwU2NyaXB0
cyAmJiBbXTsKLQotICAgIC8vIFNpbmdsZSB0YWcKLSAgICBpZiAoIHBhcnNlZCApIHsKLSAgICAg
ICAgcmV0dXJuIFsgY29udGV4dC5jcmVhdGVFbGVtZW50KCBwYXJzZWRbIDEgXSApIF07Ci0gICAg
fQotCi0gICAgcGFyc2VkID0gYnVpbGRGcmFnbWVudCggWyBkYXRhIF0sIGNvbnRleHQsIHNjcmlw
dHMgKTsKLQotICAgIGlmICggc2NyaXB0cyAmJiBzY3JpcHRzLmxlbmd0aCApIHsKLSAgICAgICAg
alF1ZXJ5KCBzY3JpcHRzICkucmVtb3ZlKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGpRdWVyeS5t
ZXJnZSggW10sIHBhcnNlZC5jaGlsZE5vZGVzICk7Ci19OwotCi0KLS8vIEtlZXAgYSBjb3B5IG9m
IHRoZSBvbGQgbG9hZCBtZXRob2QKLXZhciBfbG9hZCA9IGpRdWVyeS5mbi5sb2FkOwotCi0vKioK
LSAqIExvYWQgYSB1cmwgaW50byBhIHBhZ2UKLSAqLwotalF1ZXJ5LmZuLmxvYWQgPSBmdW5jdGlv
biggdXJsLCBwYXJhbXMsIGNhbGxiYWNrICkgewotICAgIGlmICggdHlwZW9mIHVybCAhPT0gInN0
cmluZyIgJiYgX2xvYWQgKSB7Ci0gICAgICAgIHJldHVybiBfbG9hZC5hcHBseSggdGhpcywgYXJn
dW1lbnRzICk7Ci0gICAgfQotCi0gICAgdmFyIHNlbGVjdG9yLCB0eXBlLCByZXNwb25zZSwKLSAg
ICAgICAgc2VsZiA9IHRoaXMsCi0gICAgICAgIG9mZiA9IHVybC5pbmRleE9mKCAiICIgKTsKLQot
ICAgIGlmICggb2ZmID4gLTEgKSB7Ci0gICAgICAgIHNlbGVjdG9yID0galF1ZXJ5LnRyaW0oIHVy
bC5zbGljZSggb2ZmICkgKTsKLSAgICAgICAgdXJsID0gdXJsLnNsaWNlKCAwLCBvZmYgKTsKLSAg
ICB9Ci0KLSAgICAvLyBJZiBpdCdzIGEgZnVuY3Rpb24KLSAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0
aW9uKCBwYXJhbXMgKSApIHsKLQotICAgICAgICAvLyBXZSBhc3N1bWUgdGhhdCBpdCdzIHRoZSBj
YWxsYmFjawotICAgICAgICBjYWxsYmFjayA9IHBhcmFtczsKLSAgICAgICAgcGFyYW1zID0gdW5k
ZWZpbmVkOwotCi0gICAgLy8gT3RoZXJ3aXNlLCBidWlsZCBhIHBhcmFtIHN0cmluZwotICAgIH0g
ZWxzZSBpZiAoIHBhcmFtcyAmJiB0eXBlb2YgcGFyYW1zID09PSAib2JqZWN0IiApIHsKLSAgICAg
ICAgdHlwZSA9ICJQT1NUIjsKLSAgICB9Ci0KLSAgICAvLyBJZiB3ZSBoYXZlIGVsZW1lbnRzIHRv
IG1vZGlmeSwgbWFrZSB0aGUgcmVxdWVzdAotICAgIGlmICggc2VsZi5sZW5ndGggPiAwICkgewot
ICAgICAgICBqUXVlcnkuYWpheCggewotICAgICAgICAgICAgdXJsOiB1cmwsCi0KLSAgICAgICAg
ICAgIC8vIElmICJ0eXBlIiB2YXJpYWJsZSBpcyB1bmRlZmluZWQsIHRoZW4gIkdFVCIgbWV0aG9k
IHdpbGwgYmUgdXNlZC4KLSAgICAgICAgICAgIC8vIE1ha2UgdmFsdWUgb2YgdGhpcyBmaWVsZCBl
eHBsaWNpdCBzaW5jZQotICAgICAgICAgICAgLy8gdXNlciBjYW4gb3ZlcnJpZGUgaXQgdGhyb3Vn
aCBhamF4U2V0dXAgbWV0aG9kCi0gICAgICAgICAgICB0eXBlOiB0eXBlIHx8ICJHRVQiLAotICAg
ICAgICAgICAgZGF0YVR5cGU6ICJodG1sIiwKLSAgICAgICAgICAgIGRhdGE6IHBhcmFtcwotICAg
ICAgICB9ICkuZG9uZSggZnVuY3Rpb24oIHJlc3BvbnNlVGV4dCApIHsKLQotICAgICAgICAgICAg
Ly8gU2F2ZSByZXNwb25zZSBmb3IgdXNlIGluIGNvbXBsZXRlIGNhbGxiYWNrCi0gICAgICAgICAg
ICByZXNwb25zZSA9IGFyZ3VtZW50czsKLQotICAgICAgICAgICAgc2VsZi5odG1sKCBzZWxlY3Rv
ciA/Ci0KLSAgICAgICAgICAgICAgICAvLyBJZiBhIHNlbGVjdG9yIHdhcyBzcGVjaWZpZWQsIGxv
Y2F0ZSB0aGUgcmlnaHQgZWxlbWVudHMgaW4gYSBkdW1teSBkaXYKLSAgICAgICAgICAgICAgICAv
LyBFeGNsdWRlIHNjcmlwdHMgdG8gYXZvaWQgSUUgJ1Blcm1pc3Npb24gRGVuaWVkJyBlcnJvcnMK
LSAgICAgICAgICAgICAgICBqUXVlcnkoICI8ZGl2PiIgKS5hcHBlbmQoIGpRdWVyeS5wYXJzZUhU
TUwoIHJlc3BvbnNlVGV4dCApICkuZmluZCggc2VsZWN0b3IgKSA6Ci0KLSAgICAgICAgICAgICAg
ICAvLyBPdGhlcndpc2UgdXNlIHRoZSBmdWxsIHJlc3VsdAotICAgICAgICAgICAgICAgIHJlc3Bv
bnNlVGV4dCApOwotCi0gICAgICAgIC8vIElmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLCB0aGlzIGZ1
bmN0aW9uIGdldHMgImRhdGEiLCAic3RhdHVzIiwgImpxWEhSIgotICAgICAgICAvLyBidXQgdGhl
eSBhcmUgaWdub3JlZCBiZWNhdXNlIHJlc3BvbnNlIHdhcyBzZXQgYWJvdmUuCi0gICAgICAgIC8v
IElmIGl0IGZhaWxzLCB0aGlzIGZ1bmN0aW9uIGdldHMgImpxWEhSIiwgInN0YXR1cyIsICJlcnJv
ciIKLSAgICAgICAgfSApLmFsd2F5cyggY2FsbGJhY2sgJiYgZnVuY3Rpb24oIGpxWEhSLCBzdGF0
dXMgKSB7Ci0gICAgICAgICAgICBzZWxmLmVhY2goIGZ1bmN0aW9uKCkgewotICAgICAgICAgICAg
ICAgIGNhbGxiYWNrLmFwcGx5KCB0aGlzLCByZXNwb25zZSB8fCBbIGpxWEhSLnJlc3BvbnNlVGV4
dCwgc3RhdHVzLCBqcVhIUiBdICk7Ci0gICAgICAgICAgICB9ICk7Ci0gICAgICAgIH0gKTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gdGhpczsKLX07Ci0KLQotCi0KLS8vIEF0dGFjaCBhIGJ1bmNoIG9m
IGZ1bmN0aW9ucyBmb3IgaGFuZGxpbmcgY29tbW9uIEFKQVggZXZlbnRzCi1qUXVlcnkuZWFjaCgg
WwotICAgICJhamF4U3RhcnQiLAotICAgICJhamF4U3RvcCIsCi0gICAgImFqYXhDb21wbGV0ZSIs
Ci0gICAgImFqYXhFcnJvciIsCi0gICAgImFqYXhTdWNjZXNzIiwKLSAgICAiYWpheFNlbmQiCi1d
LCBmdW5jdGlvbiggaSwgdHlwZSApIHsKLSAgICBqUXVlcnkuZm5bIHR5cGUgXSA9IGZ1bmN0aW9u
KCBmbiApIHsKLSAgICAgICAgcmV0dXJuIHRoaXMub24oIHR5cGUsIGZuICk7Ci0gICAgfTsKLX0g
KTsKLQotCi0KLQotalF1ZXJ5LmV4cHIuZmlsdGVycy5hbmltYXRlZCA9IGZ1bmN0aW9uKCBlbGVt
ICkgewotICAgIHJldHVybiBqUXVlcnkuZ3JlcCggalF1ZXJ5LnRpbWVycywgZnVuY3Rpb24oIGZu
ICkgewotICAgICAgICByZXR1cm4gZWxlbSA9PT0gZm4uZWxlbTsKLSAgICB9ICkubGVuZ3RoOwot
fTsKLQotCi0KLQotLyoqCi0gKiBHZXRzIGEgd2luZG93IGZyb20gYW4gZWxlbWVudAotICovCi1m
dW5jdGlvbiBnZXRXaW5kb3coIGVsZW0gKSB7Ci0gICAgcmV0dXJuIGpRdWVyeS5pc1dpbmRvdygg
ZWxlbSApID8gZWxlbSA6IGVsZW0ubm9kZVR5cGUgPT09IDkgJiYgZWxlbS5kZWZhdWx0VmlldzsK
LX0KLQotalF1ZXJ5Lm9mZnNldCA9IHsKLSAgICBzZXRPZmZzZXQ6IGZ1bmN0aW9uKCBlbGVtLCBv
cHRpb25zLCBpICkgewotICAgICAgICB2YXIgY3VyUG9zaXRpb24sIGN1ckxlZnQsIGN1ckNTU1Rv
cCwgY3VyVG9wLCBjdXJPZmZzZXQsIGN1ckNTU0xlZnQsIGNhbGN1bGF0ZVBvc2l0aW9uLAotICAg
ICAgICAgICAgcG9zaXRpb24gPSBqUXVlcnkuY3NzKCBlbGVtLCAicG9zaXRpb24iICksCi0gICAg
ICAgICAgICBjdXJFbGVtID0galF1ZXJ5KCBlbGVtICksCi0gICAgICAgICAgICBwcm9wcyA9IHt9
OwotCi0gICAgICAgIC8vIFNldCBwb3NpdGlvbiBmaXJzdCwgaW4tY2FzZSB0b3AvbGVmdCBhcmUg
c2V0IGV2ZW4gb24gc3RhdGljIGVsZW0KLSAgICAgICAgaWYgKCBwb3NpdGlvbiA9PT0gInN0YXRp
YyIgKSB7Ci0gICAgICAgICAgICBlbGVtLnN0eWxlLnBvc2l0aW9uID0gInJlbGF0aXZlIjsKLSAg
ICAgICAgfQotCi0gICAgICAgIGN1ck9mZnNldCA9IGN1ckVsZW0ub2Zmc2V0KCk7Ci0gICAgICAg
IGN1ckNTU1RvcCA9IGpRdWVyeS5jc3MoIGVsZW0sICJ0b3AiICk7Ci0gICAgICAgIGN1ckNTU0xl
ZnQgPSBqUXVlcnkuY3NzKCBlbGVtLCAibGVmdCIgKTsKLSAgICAgICAgY2FsY3VsYXRlUG9zaXRp
b24gPSAoIHBvc2l0aW9uID09PSAiYWJzb2x1dGUiIHx8IHBvc2l0aW9uID09PSAiZml4ZWQiICkg
JiYKLSAgICAgICAgICAgICggY3VyQ1NTVG9wICsgY3VyQ1NTTGVmdCApLmluZGV4T2YoICJhdXRv
IiApID4gLTE7Ci0KLSAgICAgICAgLy8gTmVlZCB0byBiZSBhYmxlIHRvIGNhbGN1bGF0ZSBwb3Np
dGlvbiBpZiBlaXRoZXIKLSAgICAgICAgLy8gdG9wIG9yIGxlZnQgaXMgYXV0byBhbmQgcG9zaXRp
b24gaXMgZWl0aGVyIGFic29sdXRlIG9yIGZpeGVkCi0gICAgICAgIGlmICggY2FsY3VsYXRlUG9z
aXRpb24gKSB7Ci0gICAgICAgICAgICBjdXJQb3NpdGlvbiA9IGN1ckVsZW0ucG9zaXRpb24oKTsK
LSAgICAgICAgICAgIGN1clRvcCA9IGN1clBvc2l0aW9uLnRvcDsKLSAgICAgICAgICAgIGN1ckxl
ZnQgPSBjdXJQb3NpdGlvbi5sZWZ0OwotCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBj
dXJUb3AgPSBwYXJzZUZsb2F0KCBjdXJDU1NUb3AgKSB8fCAwOwotICAgICAgICAgICAgY3VyTGVm
dCA9IHBhcnNlRmxvYXQoIGN1ckNTU0xlZnQgKSB8fCAwOwotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggb3B0aW9ucyApICkgewotCi0gICAgICAgICAgICAvLyBV
c2UgalF1ZXJ5LmV4dGVuZCBoZXJlIHRvIGFsbG93IG1vZGlmaWNhdGlvbiBvZiBjb29yZGluYXRl
cyBhcmd1bWVudCAoZ2gtMTg0OCkKLSAgICAgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zLmNhbGwo
IGVsZW0sIGksIGpRdWVyeS5leHRlbmQoIHt9LCBjdXJPZmZzZXQgKSApOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKCBvcHRpb25zLnRvcCAhPSBudWxsICkgewotICAgICAgICAgICAgcHJvcHMu
dG9wID0gKCBvcHRpb25zLnRvcCAtIGN1ck9mZnNldC50b3AgKSArIGN1clRvcDsKLSAgICAgICAg
fQotICAgICAgICBpZiAoIG9wdGlvbnMubGVmdCAhPSBudWxsICkgewotICAgICAgICAgICAgcHJv
cHMubGVmdCA9ICggb3B0aW9ucy5sZWZ0IC0gY3VyT2Zmc2V0LmxlZnQgKSArIGN1ckxlZnQ7Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAoICJ1c2luZyIgaW4gb3B0aW9ucyApIHsKLSAgICAgICAg
ICAgIG9wdGlvbnMudXNpbmcuY2FsbCggZWxlbSwgcHJvcHMgKTsKLQotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgY3VyRWxlbS5jc3MoIHByb3BzICk7Ci0gICAgICAgIH0KLSAgICB9Ci19
OwotCi1qUXVlcnkuZm4uZXh0ZW5kKCB7Ci0gICAgb2Zmc2V0OiBmdW5jdGlvbiggb3B0aW9ucyAp
IHsKLSAgICAgICAgaWYgKCBhcmd1bWVudHMubGVuZ3RoICkgewotICAgICAgICAgICAgcmV0dXJu
IG9wdGlvbnMgPT09IHVuZGVmaW5lZCA/Ci0gICAgICAgICAgICAgICAgdGhpcyA6Ci0gICAgICAg
ICAgICAgICAgdGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHsKLSAgICAgICAgICAgICAgICAgICAg
alF1ZXJ5Lm9mZnNldC5zZXRPZmZzZXQoIHRoaXMsIG9wdGlvbnMsIGkgKTsKLSAgICAgICAgICAg
ICAgICB9ICk7Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgZG9jRWxlbSwgd2luLAotICAgICAg
ICAgICAgZWxlbSA9IHRoaXNbIDAgXSwKLSAgICAgICAgICAgIGJveCA9IHsgdG9wOiAwLCBsZWZ0
OiAwIH0sCi0gICAgICAgICAgICBkb2MgPSBlbGVtICYmIGVsZW0ub3duZXJEb2N1bWVudDsKLQot
ICAgICAgICBpZiAoICFkb2MgKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQot
ICAgICAgICBkb2NFbGVtID0gZG9jLmRvY3VtZW50RWxlbWVudDsKLQotICAgICAgICAvLyBNYWtl
IHN1cmUgaXQncyBub3QgYSBkaXNjb25uZWN0ZWQgRE9NIG5vZGUKLSAgICAgICAgaWYgKCAhalF1
ZXJ5LmNvbnRhaW5zKCBkb2NFbGVtLCBlbGVtICkgKSB7Ci0gICAgICAgICAgICByZXR1cm4gYm94
OwotICAgICAgICB9Ci0KLSAgICAgICAgYm94ID0gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3Qo
KTsKLSAgICAgICAgd2luID0gZ2V0V2luZG93KCBkb2MgKTsKLSAgICAgICAgcmV0dXJuIHsKLSAg
ICAgICAgICAgIHRvcDogYm94LnRvcCArIHdpbi5wYWdlWU9mZnNldCAtIGRvY0VsZW0uY2xpZW50
VG9wLAotICAgICAgICAgICAgbGVmdDogYm94LmxlZnQgKyB3aW4ucGFnZVhPZmZzZXQgLSBkb2NF
bGVtLmNsaWVudExlZnQKLSAgICAgICAgfTsKLSAgICB9LAotCi0gICAgcG9zaXRpb246IGZ1bmN0
aW9uKCkgewotICAgICAgICBpZiAoICF0aGlzWyAwIF0gKSB7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgb2Zmc2V0UGFyZW50LCBvZmZzZXQsCi0gICAgICAg
ICAgICBlbGVtID0gdGhpc1sgMCBdLAotICAgICAgICAgICAgcGFyZW50T2Zmc2V0ID0geyB0b3A6
IDAsIGxlZnQ6IDAgfTsKLQotICAgICAgICAvLyBGaXhlZCBlbGVtZW50cyBhcmUgb2Zmc2V0IGZy
b20gd2luZG93IChwYXJlbnRPZmZzZXQgPSB7dG9wOjAsIGxlZnQ6IDB9LAotICAgICAgICAvLyBi
ZWNhdXNlIGl0IGlzIGl0cyBvbmx5IG9mZnNldCBwYXJlbnQKLSAgICAgICAgaWYgKCBqUXVlcnku
Y3NzKCBlbGVtLCAicG9zaXRpb24iICkgPT09ICJmaXhlZCIgKSB7Ci0KLSAgICAgICAgICAgIC8v
IEFzc3VtZSBnZXRCb3VuZGluZ0NsaWVudFJlY3QgaXMgdGhlcmUgd2hlbiBjb21wdXRlZCBwb3Np
dGlvbiBpcyBmaXhlZAotICAgICAgICAgICAgb2Zmc2V0ID0gZWxlbS5nZXRCb3VuZGluZ0NsaWVu
dFJlY3QoKTsKLQotICAgICAgICB9IGVsc2UgewotCi0gICAgICAgICAgICAvLyBHZXQgKnJlYWwq
IG9mZnNldFBhcmVudAotICAgICAgICAgICAgb2Zmc2V0UGFyZW50ID0gdGhpcy5vZmZzZXRQYXJl
bnQoKTsKLQotICAgICAgICAgICAgLy8gR2V0IGNvcnJlY3Qgb2Zmc2V0cwotICAgICAgICAgICAg
b2Zmc2V0ID0gdGhpcy5vZmZzZXQoKTsKLSAgICAgICAgICAgIGlmICggIWpRdWVyeS5ub2RlTmFt
ZSggb2Zmc2V0UGFyZW50WyAwIF0sICJodG1sIiApICkgewotICAgICAgICAgICAgICAgIHBhcmVu
dE9mZnNldCA9IG9mZnNldFBhcmVudC5vZmZzZXQoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgLy8gQWRkIG9mZnNldFBhcmVudCBib3JkZXJzCi0gICAgICAgICAgICBwYXJlbnRPZmZz
ZXQudG9wICs9IGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudFsgMCBdLCAiYm9yZGVyVG9wV2lkdGgi
LCB0cnVlICk7Ci0gICAgICAgICAgICBwYXJlbnRPZmZzZXQubGVmdCArPSBqUXVlcnkuY3NzKCBv
ZmZzZXRQYXJlbnRbIDAgXSwgImJvcmRlckxlZnRXaWR0aCIsIHRydWUgKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIC8vIFN1YnRyYWN0IHBhcmVudCBvZmZzZXRzIGFuZCBlbGVtZW50IG1hcmdpbnMK
LSAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgIHRvcDogb2Zmc2V0LnRvcCAtIHBhcmVudE9m
ZnNldC50b3AgLSBqUXVlcnkuY3NzKCBlbGVtLCAibWFyZ2luVG9wIiwgdHJ1ZSApLAotICAgICAg
ICAgICAgbGVmdDogb2Zmc2V0LmxlZnQgLSBwYXJlbnRPZmZzZXQubGVmdCAtIGpRdWVyeS5jc3Mo
IGVsZW0sICJtYXJnaW5MZWZ0IiwgdHJ1ZSApCi0gICAgICAgIH07Ci0gICAgfSwKLQotICAgIC8v
IFRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIGRvY3VtZW50RWxlbWVudCBpbiB0aGUgZm9sbG93aW5n
IGNhc2VzOgotICAgIC8vIDEpIEZvciB0aGUgZWxlbWVudCBpbnNpZGUgdGhlIGlmcmFtZSB3aXRo
b3V0IG9mZnNldFBhcmVudCwgdGhpcyBtZXRob2Qgd2lsbCByZXR1cm4KLSAgICAvLyAgICBkb2N1
bWVudEVsZW1lbnQgb2YgdGhlIHBhcmVudCB3aW5kb3cKLSAgICAvLyAyKSBGb3IgdGhlIGhpZGRl
biBvciBkZXRhY2hlZCBlbGVtZW50Ci0gICAgLy8gMykgRm9yIGJvZHkgb3IgaHRtbCBlbGVtZW50
LCBpLmUuIGluIGNhc2Ugb2YgdGhlIGh0bWwgbm9kZSAtIGl0IHdpbGwgcmV0dXJuIGl0c2VsZgot
ICAgIC8vCi0gICAgLy8gYnV0IHRob3NlIGV4Y2VwdGlvbnMgd2VyZSBuZXZlciBwcmVzZW50ZWQg
YXMgYSByZWFsIGxpZmUgdXNlLWNhc2VzCi0gICAgLy8gYW5kIG1pZ2h0IGJlIGNvbnNpZGVyZWQg
YXMgbW9yZSBwcmVmZXJhYmxlIHJlc3VsdHMuCi0gICAgLy8KLSAgICAvLyBUaGlzIGxvZ2ljLCBo
b3dldmVyLCBpcyBub3QgZ3VhcmFudGVlZCBhbmQgY2FuIGNoYW5nZSBhdCBhbnkgcG9pbnQgaW4g
dGhlIGZ1dHVyZQotICAgIG9mZnNldFBhcmVudDogZnVuY3Rpb24oKSB7Ci0gICAgICAgIHJldHVy
biB0aGlzLm1hcCggZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICB2YXIgb2Zmc2V0UGFyZW50ID0g
dGhpcy5vZmZzZXRQYXJlbnQ7Ci0KLSAgICAgICAgICAgIHdoaWxlICggb2Zmc2V0UGFyZW50ICYm
IGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudCwgInBvc2l0aW9uIiApID09PSAic3RhdGljIiApIHsK
LSAgICAgICAgICAgICAgICBvZmZzZXRQYXJlbnQgPSBvZmZzZXRQYXJlbnQub2Zmc2V0UGFyZW50
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gb2Zmc2V0UGFyZW50IHx8IGRv
Y3VtZW50RWxlbWVudDsKLSAgICAgICAgfSApOwotICAgIH0KLX0gKTsKLQotLy8gQ3JlYXRlIHNj
cm9sbExlZnQgYW5kIHNjcm9sbFRvcCBtZXRob2RzCi1qUXVlcnkuZWFjaCggeyBzY3JvbGxMZWZ0
OiAicGFnZVhPZmZzZXQiLCBzY3JvbGxUb3A6ICJwYWdlWU9mZnNldCIgfSwgZnVuY3Rpb24oIG1l
dGhvZCwgcHJvcCApIHsKLSAgICB2YXIgdG9wID0gInBhZ2VZT2Zmc2V0IiA9PT0gcHJvcDsKLQot
ICAgIGpRdWVyeS5mblsgbWV0aG9kIF0gPSBmdW5jdGlvbiggdmFsICkgewotICAgICAgICByZXR1
cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgbWV0aG9kLCB2YWwgKSB7Ci0gICAgICAg
ICAgICB2YXIgd2luID0gZ2V0V2luZG93KCBlbGVtICk7Ci0KLSAgICAgICAgICAgIGlmICggdmFs
ID09PSB1bmRlZmluZWQgKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHdpbiA/IHdpblsgcHJv
cCBdIDogZWxlbVsgbWV0aG9kIF07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICgg
d2luICkgewotICAgICAgICAgICAgICAgIHdpbi5zY3JvbGxUbygKLSAgICAgICAgICAgICAgICAg
ICAgIXRvcCA/IHZhbCA6IHdpbi5wYWdlWE9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgdG9w
ID8gdmFsIDogd2luLnBhZ2VZT2Zmc2V0Ci0gICAgICAgICAgICAgICAgKTsKLQotICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBlbGVtWyBtZXRob2QgXSA9IHZhbDsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfSwgbWV0aG9kLCB2YWwsIGFyZ3VtZW50cy5sZW5ndGggKTsKLSAg
ICB9OwotfSApOwotCi0vLyBTdXBwb3J0OiBTYWZhcmk8Ny04KywgQ2hyb21lPDM3LTQ0KwotLy8g
QWRkIHRoZSB0b3AvbGVmdCBjc3NIb29rcyB1c2luZyBqUXVlcnkuZm4ucG9zaXRpb24KLS8vIFdl
YmtpdCBidWc6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yOTA4NAot
Ly8gQmxpbmsgYnVnOiBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9k
ZXRhaWw/aWQ9MjI5MjgwCi0vLyBnZXRDb21wdXRlZFN0eWxlIHJldHVybnMgcGVyY2VudCB3aGVu
IHNwZWNpZmllZCBmb3IgdG9wL2xlZnQvYm90dG9tL3JpZ2h0OwotLy8gcmF0aGVyIHRoYW4gbWFr
ZSB0aGUgY3NzIG1vZHVsZSBkZXBlbmQgb24gdGhlIG9mZnNldCBtb2R1bGUsIGp1c3QgY2hlY2sg
Zm9yIGl0IGhlcmUKLWpRdWVyeS5lYWNoKCBbICJ0b3AiLCAibGVmdCIgXSwgZnVuY3Rpb24oIGks
IHByb3AgKSB7Ci0gICAgalF1ZXJ5LmNzc0hvb2tzWyBwcm9wIF0gPSBhZGRHZXRIb29rSWYoIHN1
cHBvcnQucGl4ZWxQb3NpdGlvbiwKLSAgICAgICAgZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkICkg
ewotICAgICAgICAgICAgaWYgKCBjb21wdXRlZCApIHsKLSAgICAgICAgICAgICAgICBjb21wdXRl
ZCA9IGN1ckNTUyggZWxlbSwgcHJvcCApOwotCi0gICAgICAgICAgICAgICAgLy8gSWYgY3VyQ1NT
IHJldHVybnMgcGVyY2VudGFnZSwgZmFsbGJhY2sgdG8gb2Zmc2V0Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIHJudW1ub25weC50ZXN0KCBjb21wdXRlZCApID8KLSAgICAgICAgICAgICAgICAgICAg
alF1ZXJ5KCBlbGVtICkucG9zaXRpb24oKVsgcHJvcCBdICsgInB4IiA6Ci0gICAgICAgICAgICAg
ICAgICAgIGNvbXB1dGVkOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgKTsKLX0gKTsK
LQotCi0vLyBDcmVhdGUgaW5uZXJIZWlnaHQsIGlubmVyV2lkdGgsIGhlaWdodCwgd2lkdGgsIG91
dGVySGVpZ2h0IGFuZCBvdXRlcldpZHRoIG1ldGhvZHMKLWpRdWVyeS5lYWNoKCB7IEhlaWdodDog
ImhlaWdodCIsIFdpZHRoOiAid2lkdGgiIH0sIGZ1bmN0aW9uKCBuYW1lLCB0eXBlICkgewotICAg
IGpRdWVyeS5lYWNoKCB7IHBhZGRpbmc6ICJpbm5lciIgKyBuYW1lLCBjb250ZW50OiB0eXBlLCAi
IjogIm91dGVyIiArIG5hbWUgfSwKLSAgICAgICAgZnVuY3Rpb24oIGRlZmF1bHRFeHRyYSwgZnVu
Y05hbWUgKSB7Ci0KLSAgICAgICAgLy8gTWFyZ2luIGlzIG9ubHkgZm9yIG91dGVySGVpZ2h0LCBv
dXRlcldpZHRoCi0gICAgICAgIGpRdWVyeS5mblsgZnVuY05hbWUgXSA9IGZ1bmN0aW9uKCBtYXJn
aW4sIHZhbHVlICkgewotICAgICAgICAgICAgdmFyIGNoYWluYWJsZSA9IGFyZ3VtZW50cy5sZW5n
dGggJiYgKCBkZWZhdWx0RXh0cmEgfHwgdHlwZW9mIG1hcmdpbiAhPT0gImJvb2xlYW4iICksCi0g
ICAgICAgICAgICAgICAgZXh0cmEgPSBkZWZhdWx0RXh0cmEgfHwgKCBtYXJnaW4gPT09IHRydWUg
fHwgdmFsdWUgPT09IHRydWUgPyAibWFyZ2luIiA6ICJib3JkZXIiICk7Ci0KLSAgICAgICAgICAg
IHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCB2YWx1ZSApIHsKLSAg
ICAgICAgICAgICAgICB2YXIgZG9jOwotCi0gICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuaXNX
aW5kb3coIGVsZW0gKSApIHsKLQotICAgICAgICAgICAgICAgICAgICAvLyBBcyBvZiA1LzgvMjAx
MiB0aGlzIHdpbGwgeWllbGQgaW5jb3JyZWN0IHJlc3VsdHMgZm9yIE1vYmlsZSBTYWZhcmksIGJ1
dCB0aGVyZQotICAgICAgICAgICAgICAgICAgICAvLyBpc24ndCBhIHdob2xlIGxvdCB3ZSBjYW4g
ZG8uIFNlZSBwdWxsIHJlcXVlc3QgYXQgdGhpcyBVUkwgZm9yIGRpc2N1c3Npb246Ci0gICAgICAg
ICAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvanF1ZXJ5L3B1bGwvNzY0
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLmRvY3VtZW50LmRvY3VtZW50RWxlbWVu
dFsgImNsaWVudCIgKyBuYW1lIF07Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgLy8gR2V0IGRvY3VtZW50IHdpZHRoIG9yIGhlaWdodAotICAgICAgICAgICAgICAgIGlmICgg
ZWxlbS5ub2RlVHlwZSA9PT0gOSApIHsKLSAgICAgICAgICAgICAgICAgICAgZG9jID0gZWxlbS5k
b2N1bWVudEVsZW1lbnQ7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gRWl0aGVyIHNjcm9sbFtX
aWR0aC9IZWlnaHRdIG9yIG9mZnNldFtXaWR0aC9IZWlnaHRdIG9yIGNsaWVudFtXaWR0aC9IZWln
aHRdLAotICAgICAgICAgICAgICAgICAgICAvLyB3aGljaGV2ZXIgaXMgZ3JlYXRlc3QKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIE1hdGgubWF4KAotICAgICAgICAgICAgICAgICAgICAgICAg
ZWxlbS5ib2R5WyAic2Nyb2xsIiArIG5hbWUgXSwgZG9jWyAic2Nyb2xsIiArIG5hbWUgXSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGVsZW0uYm9keVsgIm9mZnNldCIgKyBuYW1lIF0sIGRvY1sg
Im9mZnNldCIgKyBuYW1lIF0sCi0gICAgICAgICAgICAgICAgICAgICAgICBkb2NbICJjbGllbnQi
ICsgbmFtZSBdCi0gICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPwotCi0gICAgICAgICAg
ICAgICAgICAgIC8vIEdldCB3aWR0aCBvciBoZWlnaHQgb24gdGhlIGVsZW1lbnQsIHJlcXVlc3Rp
bmcgYnV0IG5vdCBmb3JjaW5nIHBhcnNlRmxvYXQKLSAgICAgICAgICAgICAgICAgICAgalF1ZXJ5
LmNzcyggZWxlbSwgdHlwZSwgZXh0cmEgKSA6Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gU2V0
IHdpZHRoIG9yIGhlaWdodCBvbiB0aGUgZWxlbWVudAotICAgICAgICAgICAgICAgICAgICBqUXVl
cnkuc3R5bGUoIGVsZW0sIHR5cGUsIHZhbHVlLCBleHRyYSApOwotICAgICAgICAgICAgfSwgdHlw
ZSwgY2hhaW5hYmxlID8gbWFyZ2luIDogdW5kZWZpbmVkLCBjaGFpbmFibGUsIG51bGwgKTsKLSAg
ICAgICAgfTsKLSAgICB9ICk7Ci19ICk7Ci0KLQotalF1ZXJ5LmZuLmV4dGVuZCggewotCi0gICAg
YmluZDogZnVuY3Rpb24oIHR5cGVzLCBkYXRhLCBmbiApIHsKLSAgICAgICAgcmV0dXJuIHRoaXMu
b24oIHR5cGVzLCBudWxsLCBkYXRhLCBmbiApOwotICAgIH0sCi0gICAgdW5iaW5kOiBmdW5jdGlv
biggdHlwZXMsIGZuICkgewotICAgICAgICByZXR1cm4gdGhpcy5vZmYoIHR5cGVzLCBudWxsLCBm
biApOwotICAgIH0sCi0KLSAgICBkZWxlZ2F0ZTogZnVuY3Rpb24oIHNlbGVjdG9yLCB0eXBlcywg
ZGF0YSwgZm4gKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLm9uKCB0eXBlcywgc2VsZWN0b3IsIGRh
dGEsIGZuICk7Ci0gICAgfSwKLSAgICB1bmRlbGVnYXRlOiBmdW5jdGlvbiggc2VsZWN0b3IsIHR5
cGVzLCBmbiApIHsKLQotICAgICAgICAvLyAoIG5hbWVzcGFjZSApIG9yICggc2VsZWN0b3IsIHR5
cGVzIFssIGZuXSApCi0gICAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID09PSAxID8KLSAg
ICAgICAgICAgIHRoaXMub2ZmKCBzZWxlY3RvciwgIioqIiApIDoKLSAgICAgICAgICAgIHRoaXMu
b2ZmKCB0eXBlcywgc2VsZWN0b3IgfHwgIioqIiwgZm4gKTsKLSAgICB9LAotICAgIHNpemU6IGZ1
bmN0aW9uKCkgewotICAgICAgICByZXR1cm4gdGhpcy5sZW5ndGg7Ci0gICAgfQotfSApOwotCi1q
UXVlcnkuZm4uYW5kU2VsZiA9IGpRdWVyeS5mbi5hZGRCYWNrOwotCi0KLQotCi0vLyBSZWdpc3Rl
ciBhcyBhIG5hbWVkIEFNRCBtb2R1bGUsIHNpbmNlIGpRdWVyeSBjYW4gYmUgY29uY2F0ZW5hdGVk
IHdpdGggb3RoZXIKLS8vIGZpbGVzIHRoYXQgbWF5IHVzZSBkZWZpbmUsIGJ1dCBub3QgdmlhIGEg
cHJvcGVyIGNvbmNhdGVuYXRpb24gc2NyaXB0IHRoYXQKLS8vIHVuZGVyc3RhbmRzIGFub255bW91
cyBBTUQgbW9kdWxlcy4gQSBuYW1lZCBBTUQgaXMgc2FmZXN0IGFuZCBtb3N0IHJvYnVzdAotLy8g
d2F5IHRvIHJlZ2lzdGVyLiBMb3dlcmNhc2UganF1ZXJ5IGlzIHVzZWQgYmVjYXVzZSBBTUQgbW9k
dWxlIG5hbWVzIGFyZQotLy8gZGVyaXZlZCBmcm9tIGZpbGUgbmFtZXMsIGFuZCBqUXVlcnkgaXMg
bm9ybWFsbHkgZGVsaXZlcmVkIGluIGEgbG93ZXJjYXNlCi0vLyBmaWxlIG5hbWUuIERvIHRoaXMg
YWZ0ZXIgY3JlYXRpbmcgdGhlIGdsb2JhbCBzbyB0aGF0IGlmIGFuIEFNRCBtb2R1bGUgd2FudHMK
LS8vIHRvIGNhbGwgbm9Db25mbGljdCB0byBoaWRlIHRoaXMgdmVyc2lvbiBvZiBqUXVlcnksIGl0
IHdpbGwgd29yay4KLQotLy8gTm90ZSB0aGF0IGZvciBtYXhpbXVtIHBvcnRhYmlsaXR5LCBsaWJy
YXJpZXMgdGhhdCBhcmUgbm90IGpRdWVyeSBzaG91bGQKLS8vIGRlY2xhcmUgdGhlbXNlbHZlcyBh
cyBhbm9ueW1vdXMgbW9kdWxlcywgYW5kIGF2b2lkIHNldHRpbmcgYSBnbG9iYWwgaWYgYW4KLS8v
IEFNRCBsb2FkZXIgaXMgcHJlc2VudC4galF1ZXJ5IGlzIGEgc3BlY2lhbCBjYXNlLiBGb3IgbW9y
ZSBpbmZvcm1hdGlvbiwgc2VlCi0vLyBodHRwczovL2dpdGh1Yi5jb20vanJidXJrZS9yZXF1aXJl
anMvd2lraS9VcGRhdGluZy1leGlzdGluZy1saWJyYXJpZXMjd2lraS1hbm9uCi0KLWlmICggdHlw
ZW9mIGRlZmluZSA9PT0gImZ1bmN0aW9uIiAmJiBkZWZpbmUuYW1kICkgewotICAgIGRlZmluZSgg
ImpxdWVyeSIsIFtdLCBmdW5jdGlvbigpIHsKLSAgICAgICAgcmV0dXJuIGpRdWVyeTsKLSAgICB9
ICk7Ci19Ci0KLQotCi12YXIKLQotICAgIC8vIE1hcCBvdmVyIGpRdWVyeSBpbiBjYXNlIG9mIG92
ZXJ3cml0ZQotICAgIF9qUXVlcnkgPSB3aW5kb3cualF1ZXJ5LAotCi0gICAgLy8gTWFwIG92ZXIg
dGhlICQgaW4gY2FzZSBvZiBvdmVyd3JpdGUKLSAgICBfJCA9IHdpbmRvdy4kOwotCi1qUXVlcnku
bm9Db25mbGljdCA9IGZ1bmN0aW9uKCBkZWVwICkgewotICAgIGlmICggd2luZG93LiQgPT09IGpR
dWVyeSApIHsKLSAgICAgICAgd2luZG93LiQgPSBfJDsKLSAgICB9Ci0KLSAgICBpZiAoIGRlZXAg
JiYgd2luZG93LmpRdWVyeSA9PT0galF1ZXJ5ICkgewotICAgICAgICB3aW5kb3cualF1ZXJ5ID0g
X2pRdWVyeTsKLSAgICB9Ci0KLSAgICByZXR1cm4galF1ZXJ5OwotfTsKLQotLy8gRXhwb3NlIGpR
dWVyeSBhbmQgJCBpZGVudGlmaWVycywgZXZlbiBpbiBBTUQKLS8vICgjNzEwMiNjb21tZW50OjEw
LCBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L2pxdWVyeS9wdWxsLzU1NykKLS8vIGFuZCBDb21t
b25KUyBmb3IgYnJvd3NlciBlbXVsYXRvcnMgKCMxMzU2NikKLWlmICggIW5vR2xvYmFsICkgewot
ICAgIHdpbmRvdy5qUXVlcnkgPSB3aW5kb3cuJCA9IGpRdWVyeTsKLX0KLQotcmV0dXJuIGpRdWVy
eTsKLX0pKTsKLQotOzsoZnVuY3Rpb24oKSB7Ci0vKiEKLSAqIEBvdmVydmlldyAgRW1iZXIgLSBK
YXZhU2NyaXB0IEFwcGxpY2F0aW9uIEZyYW1ld29yawotICogQGNvcHlyaWdodCBDb3B5cmlnaHQg
MjAxMS0yMDE2IFRpbGRlIEluYy4gYW5kIGNvbnRyaWJ1dG9ycwotICogICAgICAgICAgICBQb3J0
aW9ucyBDb3B5cmlnaHQgMjAwNi0yMDExIFN0cm9iZSBJbmMuCi0gKiAgICAgICAgICAgIFBvcnRp
b25zIENvcHlyaWdodCAyMDA4LTIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQGxpY2Vuc2UgICBMaWNlbnNlZCB1bmRlciBNSVQgbGljZW5zZQotICogICAgICAgICAgICBT
ZWUgaHR0cHM6Ly9yYXcuZ2l0aHViLmNvbS9lbWJlcmpzL2VtYmVyLmpzL21hc3Rlci9MSUNFTlNF
Ci0gKiBAdmVyc2lvbiAgIDIuNi4yCi0gKi8KLQotdmFyIGVuaWZlZCwgcmVxdWlyZU1vZHVsZSwg
cmVxdWlyZSwgRW1iZXI7Ci12YXIgbWFpbkNvbnRleHQgPSB0aGlzOwotCi0oZnVuY3Rpb24oKSB7
Ci0gIHZhciBpc05vZGUgPSB0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyAmJgotICAgIHR5
cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiB7fS50b1N0cmluZy5jYWxsKHByb2Nlc3Mp
ID09PSAnW29iamVjdCBwcm9jZXNzXSc7Ci0KLSAgaWYgKCFpc05vZGUpIHsKLSAgICBFbWJlciA9
IHRoaXMuRW1iZXIgPSB0aGlzLkVtYmVyIHx8IHt9OwotICB9Ci0KLSAgaWYgKHR5cGVvZiBFbWJl
ciA9PT0gJ3VuZGVmaW5lZCcpIHsgRW1iZXIgPSB7fTsgfQotCi0gIGlmICh0eXBlb2YgRW1iZXIu
X19sb2FkZXIgPT09ICd1bmRlZmluZWQnKSB7Ci0gICAgdmFyIHJlZ2lzdHJ5ID0ge307Ci0gICAg
dmFyIHNlZW4gPSB7fTsKLQotICAgIGVuaWZlZCA9IGZ1bmN0aW9uKG5hbWUsIGRlcHMsIGNhbGxi
YWNrKSB7Ci0gICAgICB2YXIgdmFsdWUgPSB7IH07Ci0KLSAgICAgIGlmICghY2FsbGJhY2spIHsK
LSAgICAgICAgdmFsdWUuZGVwcyA9IFtdOwotICAgICAgICB2YWx1ZS5jYWxsYmFjayA9IGRlcHM7
Ci0gICAgICB9IGVsc2UgewotICAgICAgICB2YWx1ZS5kZXBzID0gZGVwczsKLSAgICAgICAgdmFs
dWUuY2FsbGJhY2sgPSBjYWxsYmFjazsKLSAgICAgIH0KLQotICAgICAgcmVnaXN0cnlbbmFtZV0g
PSB2YWx1ZTsKLSAgICB9OwotCi0gICAgcmVxdWlyZSA9IHJlcXVpcmVNb2R1bGUgPSBmdW5jdGlv
bihuYW1lKSB7Ci0gICAgICByZXR1cm4gaW50ZXJuYWxSZXF1aXJlKG5hbWUsIG51bGwpOwotICAg
IH07Ci0KLSAgICAvLyBzZXR1cCBgcmVxdWlyZWAgbW9kdWxlCi0gICAgcmVxdWlyZVsnZGVmYXVs
dCddID0gcmVxdWlyZTsKLQotICAgIHJlcXVpcmUuaGFzID0gZnVuY3Rpb24gcmVnaXN0cnlIYXMo
bW9kdWxlTmFtZSkgewotICAgICAgcmV0dXJuICEhcmVnaXN0cnlbbW9kdWxlTmFtZV0gfHwgISFy
ZWdpc3RyeVttb2R1bGVOYW1lICsgJy9pbmRleCddOwotICAgIH07Ci0KLSAgICBmdW5jdGlvbiBt
aXNzaW5nTW9kdWxlKG5hbWUsIHJlZmVycmVyTmFtZSkgewotICAgICAgaWYgKHJlZmVycmVyTmFt
ZSkgewotICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBmaW5kIG1vZHVsZSAnICsg
bmFtZSArICcgcmVxdWlyZWQgYnk6ICcgKyByZWZlcnJlck5hbWUpOwotICAgICAgfSBlbHNlIHsK
LSAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgZmluZCBtb2R1bGUgJyArIG5hbWUp
OwotICAgICAgfQotICAgIH0KLQotICAgIGZ1bmN0aW9uIGludGVybmFsUmVxdWlyZShfbmFtZSwg
cmVmZXJyZXJOYW1lKSB7Ci0gICAgICB2YXIgbmFtZSA9IF9uYW1lOwotICAgICAgdmFyIG1vZCA9
IHJlZ2lzdHJ5W25hbWVdOwotCi0gICAgICBpZiAoIW1vZCkgewotICAgICAgICBuYW1lID0gbmFt
ZSArICcvaW5kZXgnOwotICAgICAgICBtb2QgPSByZWdpc3RyeVtuYW1lXTsKLSAgICAgIH0KLQot
ICAgICAgdmFyIGV4cG9ydHMgPSBzZWVuW25hbWVdOwotCi0gICAgICBpZiAoZXhwb3J0cyAhPT0g
dW5kZWZpbmVkKSB7Ci0gICAgICAgIHJldHVybiBleHBvcnRzOwotICAgICAgfQotCi0gICAgICBl
eHBvcnRzID0gc2VlbltuYW1lXSA9IHt9OwotCi0gICAgICBpZiAoIW1vZCkgewotICAgICAgICBt
aXNzaW5nTW9kdWxlKF9uYW1lLCByZWZlcnJlck5hbWUpOwotICAgICAgfQotCi0gICAgICB2YXIg
ZGVwcyA9IG1vZC5kZXBzOwotICAgICAgdmFyIGNhbGxiYWNrID0gbW9kLmNhbGxiYWNrOwotICAg
ICAgdmFyIGxlbmd0aCA9IGRlcHMubGVuZ3RoOwotICAgICAgdmFyIHJlaWZpZWQgPSBuZXcgQXJy
YXkobGVuZ3RoKTsKLQotICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewot
ICAgICAgICBpZiAoZGVwc1tpXSA9PT0gJ2V4cG9ydHMnKSB7Ci0gICAgICAgICAgcmVpZmllZFtp
XSA9IGV4cG9ydHM7Ci0gICAgICAgIH0gZWxzZSBpZiAoZGVwc1tpXSA9PT0gJ3JlcXVpcmUnKSB7
Ci0gICAgICAgICAgcmVpZmllZFtpXSA9IHJlcXVpcmU7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgcmVpZmllZFtpXSA9IGludGVybmFsUmVxdWlyZShkZXBzW2ldLCBuYW1lKTsKLSAgICAg
ICAgfQotICAgICAgfQotCi0gICAgICBjYWxsYmFjay5hcHBseSh0aGlzLCByZWlmaWVkKTsKLQot
ICAgICAgcmV0dXJuIGV4cG9ydHM7Ci0gICAgfQotCi0gICAgcmVxdWlyZU1vZHVsZS5fZWFrX3Nl
ZW4gPSByZWdpc3RyeTsKLQotICAgIEVtYmVyLl9fbG9hZGVyID0gewotICAgICAgZGVmaW5lOiBl
bmlmZWQsCi0gICAgICByZXF1aXJlOiByZXF1aXJlLAotICAgICAgcmVnaXN0cnk6IHJlZ2lzdHJ5
Ci0gICAgfTsKLSAgfSBlbHNlIHsKLSAgICBlbmlmZWQgPSBFbWJlci5fX2xvYWRlci5kZWZpbmU7
Ci0gICAgcmVxdWlyZSA9IHJlcXVpcmVNb2R1bGUgPSBFbWJlci5fX2xvYWRlci5yZXF1aXJlOwot
ICB9Ci19KSgpOwotCi1lbmlmZWQoJ2JhY2tidXJuZXInLCBbJ2V4cG9ydHMnLCAnYmFja2J1cm5l
ci91dGlscycsICdiYWNrYnVybmVyL3BsYXRmb3JtJywgJ2JhY2tidXJuZXIvYmluYXJ5LXNlYXJj
aCcsICdiYWNrYnVybmVyL2RlZmVycmVkLWFjdGlvbi1xdWV1ZXMnXSwgZnVuY3Rpb24gKGV4cG9y
dHMsIF9iYWNrYnVybmVyVXRpbHMsIF9iYWNrYnVybmVyUGxhdGZvcm0sIF9iYWNrYnVybmVyQmlu
YXJ5U2VhcmNoLCBfYmFja2J1cm5lckRlZmVycmVkQWN0aW9uUXVldWVzKSB7Ci0gICd1c2Ugc3Ry
aWN0JzsKLQotICBleHBvcnRzLmRlZmF1bHQgPSBCYWNrYnVybmVyOwotCi0gIGZ1bmN0aW9uIEJh
Y2tidXJuZXIocXVldWVOYW1lcywgb3B0aW9ucykgewotICAgIHRoaXMucXVldWVOYW1lcyA9IHF1
ZXVlTmFtZXM7Ci0gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKLSAgICBpZiAoIXRo
aXMub3B0aW9ucy5kZWZhdWx0UXVldWUpIHsKLSAgICAgIHRoaXMub3B0aW9ucy5kZWZhdWx0UXVl
dWUgPSBxdWV1ZU5hbWVzWzBdOwotICAgIH0KLSAgICB0aGlzLmluc3RhbmNlU3RhY2sgPSBbXTsK
LSAgICB0aGlzLl9kZWJvdW5jZWVzID0gW107Ci0gICAgdGhpcy5fdGhyb3R0bGVycyA9IFtdOwot
ICAgIHRoaXMuX2V2ZW50Q2FsbGJhY2tzID0gewotICAgICAgZW5kOiBbXSwKLSAgICAgIGJlZ2lu
OiBbXQotICAgIH07Ci0KLSAgICB2YXIgX3RoaXMgPSB0aGlzOwotICAgIHRoaXMuX2JvdW5kQ2xl
YXJJdGVtcyA9IGZ1bmN0aW9uICgpIHsKLSAgICAgIGNsZWFySXRlbXMoKTsKLSAgICB9OwotCi0g
ICAgdGhpcy5fdGltZXJUaW1lb3V0SWQgPSB1bmRlZmluZWQ7Ci0gICAgdGhpcy5fdGltZXJzID0g
W107Ci0KLSAgICB0aGlzLl9wbGF0Zm9ybSA9IHRoaXMub3B0aW9ucy5fcGxhdGZvcm0gfHwgX2Jh
Y2tidXJuZXJQbGF0Zm9ybS5kZWZhdWx0OwotCi0gICAgdGhpcy5fYm91bmRSdW5FeHBpcmVkVGlt
ZXJzID0gZnVuY3Rpb24gKCkgewotICAgICAgX3RoaXMuX3J1bkV4cGlyZWRUaW1lcnMoKTsKLSAg
ICB9OwotICB9Ci0KLSAgQmFja2J1cm5lci5wcm90b3R5cGUgPSB7Ci0gICAgYmVnaW46IGZ1bmN0
aW9uICgpIHsKLSAgICAgIHZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zOwotICAgICAgdmFyIG9u
QmVnaW4gPSBvcHRpb25zICYmIG9wdGlvbnMub25CZWdpbjsKLSAgICAgIHZhciBwcmV2aW91c0lu
c3RhbmNlID0gdGhpcy5jdXJyZW50SW5zdGFuY2U7Ci0KLSAgICAgIGlmIChwcmV2aW91c0luc3Rh
bmNlKSB7Ci0gICAgICAgIHRoaXMuaW5zdGFuY2VTdGFjay5wdXNoKHByZXZpb3VzSW5zdGFuY2Up
OwotICAgICAgfQotCi0gICAgICB0aGlzLmN1cnJlbnRJbnN0YW5jZSA9IG5ldyBfYmFja2J1cm5l
ckRlZmVycmVkQWN0aW9uUXVldWVzLmRlZmF1bHQodGhpcy5xdWV1ZU5hbWVzLCBvcHRpb25zKTsK
LSAgICAgIHRoaXMuX3RyaWdnZXIoJ2JlZ2luJywgdGhpcy5jdXJyZW50SW5zdGFuY2UsIHByZXZp
b3VzSW5zdGFuY2UpOwotICAgICAgaWYgKG9uQmVnaW4pIHsKLSAgICAgICAgb25CZWdpbih0aGlz
LmN1cnJlbnRJbnN0YW5jZSwgcHJldmlvdXNJbnN0YW5jZSk7Ci0gICAgICB9Ci0gICAgfSwKLQot
ICAgIGVuZDogZnVuY3Rpb24gKCkgewotICAgICAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7
Ci0gICAgICB2YXIgb25FbmQgPSBvcHRpb25zICYmIG9wdGlvbnMub25FbmQ7Ci0gICAgICB2YXIg
Y3VycmVudEluc3RhbmNlID0gdGhpcy5jdXJyZW50SW5zdGFuY2U7Ci0gICAgICB2YXIgbmV4dElu
c3RhbmNlID0gbnVsbDsKLQotICAgICAgLy8gUHJldmVudCBkb3VibGUtZmluYWxseSBidWcgaW4g
U2FmYXJpIDYuMC4yIGFuZCBpT1MgNgotICAgICAgLy8gVGhpcyBidWcgYXBwZWFycyB0byBiZSBy
ZXNvbHZlZCBpbiBTYWZhcmkgNi4wLjUgYW5kIGlPUyA3Ci0gICAgICB2YXIgZmluYWxseUFscmVh
ZHlDYWxsZWQgPSBmYWxzZTsKLSAgICAgIHRyeSB7Ci0gICAgICAgIGN1cnJlbnRJbnN0YW5jZS5m
bHVzaCgpOwotICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgaWYgKCFmaW5hbGx5QWxyZWFkeUNh
bGxlZCkgewotICAgICAgICAgIGZpbmFsbHlBbHJlYWR5Q2FsbGVkID0gdHJ1ZTsKLQotICAgICAg
ICAgIHRoaXMuY3VycmVudEluc3RhbmNlID0gbnVsbDsKLQotICAgICAgICAgIGlmICh0aGlzLmlu
c3RhbmNlU3RhY2subGVuZ3RoKSB7Ci0gICAgICAgICAgICBuZXh0SW5zdGFuY2UgPSB0aGlzLmlu
c3RhbmNlU3RhY2sucG9wKCk7Ci0gICAgICAgICAgICB0aGlzLmN1cnJlbnRJbnN0YW5jZSA9IG5l
eHRJbnN0YW5jZTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgdGhpcy5fdHJpZ2dlcignZW5kJywg
Y3VycmVudEluc3RhbmNlLCBuZXh0SW5zdGFuY2UpOwotICAgICAgICAgIGlmIChvbkVuZCkgewot
ICAgICAgICAgICAgb25FbmQoY3VycmVudEluc3RhbmNlLCBuZXh0SW5zdGFuY2UpOwotICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0KLSAgICAvKioKLSAgICAgVHJpZ2dl
ciBhbiBldmVudC4gU3VwcG9ydHMgdXAgdG8gdHdvIGFyZ3VtZW50cy4gRGVzaWduZWQgYXJvdW5k
Ci0gICAgIHRyaWdnZXJpbmcgdHJhbnNpdGlvbiBldmVudHMgZnJvbSBvbmUgcnVuIGxvb3AgaW5z
dGFuY2UgdG8gdGhlCi0gICAgIG5leHQsIHdoaWNoIHJlcXVpcmVzIGFuIGFyZ3VtZW50IGZvciB0
aGUgZmlyc3QgaW5zdGFuY2UgYW5kIHRoZW4KLSAgICAgYW4gYXJndW1lbnQgZm9yIHRoZSBuZXh0
IGluc3RhbmNlLgotICAgICAgQHByaXZhdGUKLSAgICAgQG1ldGhvZCBfdHJpZ2dlcgotICAgICBA
cGFyYW0ge1N0cmluZ30gZXZlbnROYW1lCi0gICAgIEBwYXJhbSB7YW55fSBhcmcxCi0gICAgIEBw
YXJhbSB7YW55fSBhcmcyCi0gICAgICovCi0gICAgX3RyaWdnZXI6IGZ1bmN0aW9uIChldmVudE5h
bWUsIGFyZzEsIGFyZzIpIHsKLSAgICAgIHZhciBjYWxsYmFja3MgPSB0aGlzLl9ldmVudENhbGxi
YWNrc1tldmVudE5hbWVdOwotICAgICAgaWYgKGNhbGxiYWNrcykgewotICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IGNhbGxiYWNrcy5sZW5ndGg7IGkrKykgewotICAgICAgICAgIGNhbGxiYWNr
c1tpXShhcmcxLCBhcmcyKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0KLSAgICBvbjog
ZnVuY3Rpb24gKGV2ZW50TmFtZSwgY2FsbGJhY2spIHsKLSAgICAgIGlmICh0eXBlb2YgY2FsbGJh
Y2sgIT09ICdmdW5jdGlvbicpIHsKLSAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2FsbGJh
Y2sgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7Ci0gICAgICB9Ci0gICAgICB2YXIgY2FsbGJhY2tzID0g
dGhpcy5fZXZlbnRDYWxsYmFja3NbZXZlbnROYW1lXTsKLSAgICAgIGlmIChjYWxsYmFja3MpIHsK
LSAgICAgICAgY2FsbGJhY2tzLnB1c2goY2FsbGJhY2spOwotICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IG9uKCkgZXZlbnQgIicgKyBldmVudE5hbWUg
KyAnIiBiZWNhdXNlIGl0IGRvZXMgbm90IGV4aXN0Jyk7Ci0gICAgICB9Ci0gICAgfSwKLQotICAg
IG9mZjogZnVuY3Rpb24gKGV2ZW50TmFtZSwgY2FsbGJhY2spIHsKLSAgICAgIGlmIChldmVudE5h
bWUpIHsKLSAgICAgICAgdmFyIGNhbGxiYWNrcyA9IHRoaXMuX2V2ZW50Q2FsbGJhY2tzW2V2ZW50
TmFtZV07Ci0gICAgICAgIHZhciBjYWxsYmFja0ZvdW5kID0gZmFsc2U7Ci0gICAgICAgIGlmICgh
Y2FsbGJhY2tzKSByZXR1cm47Ci0gICAgICAgIGlmIChjYWxsYmFjaykgewotICAgICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgY2FsbGJhY2tzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICBp
ZiAoY2FsbGJhY2tzW2ldID09PSBjYWxsYmFjaykgewotICAgICAgICAgICAgICBjYWxsYmFja0Zv
dW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgY2FsbGJhY2tzLnNwbGljZShpLCAxKTsKLSAgICAg
ICAgICAgICAgaS0tOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
ICAgICBpZiAoIWNhbGxiYWNrRm91bmQpIHsKLSAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9y
KCdDYW5ub3Qgb2ZmKCkgY2FsbGJhY2sgdGhhdCBkb2VzIG5vdCBleGlzdCcpOwotICAgICAgICB9
Ci0gICAgICB9IGVsc2UgewotICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3Qgb2Zm
KCkgZXZlbnQgIicgKyBldmVudE5hbWUgKyAnIiBiZWNhdXNlIGl0IGRvZXMgbm90IGV4aXN0Jyk7
Ci0gICAgICB9Ci0gICAgfSwKLQotICAgIHJ1bjogZnVuY3Rpb24gKCkgLyogdGFyZ2V0LCBtZXRo
b2QsIGFyZ3MgKi97Ci0gICAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDsKLSAgICAg
IHZhciBtZXRob2QsIHRhcmdldCwgYXJnczsKLQotICAgICAgaWYgKGxlbmd0aCA9PT0gMSkgewot
ICAgICAgICBtZXRob2QgPSBhcmd1bWVudHNbMF07Ci0gICAgICAgIHRhcmdldCA9IG51bGw7Ci0g
ICAgICB9IGVsc2UgewotICAgICAgICB0YXJnZXQgPSBhcmd1bWVudHNbMF07Ci0gICAgICAgIG1l
dGhvZCA9IGFyZ3VtZW50c1sxXTsKLSAgICAgIH0KLQotICAgICAgaWYgKF9iYWNrYnVybmVyVXRp
bHMuaXNTdHJpbmcobWV0aG9kKSkgewotICAgICAgICBtZXRob2QgPSB0YXJnZXRbbWV0aG9kXTsK
LSAgICAgIH0KLQotICAgICAgaWYgKGxlbmd0aCA+IDIpIHsKLSAgICAgICAgYXJncyA9IG5ldyBB
cnJheShsZW5ndGggLSAyKTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBsZW5ndGggLSAy
OyBpIDwgbDsgaSsrKSB7Ci0gICAgICAgICAgYXJnc1tpXSA9IGFyZ3VtZW50c1tpICsgMl07Ci0g
ICAgICAgIH0KLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGFyZ3MgPSBbXTsKLSAgICAgIH0KLQot
ICAgICAgdmFyIG9uRXJyb3IgPSBnZXRPbkVycm9yKHRoaXMub3B0aW9ucyk7Ci0KLSAgICAgIHRo
aXMuYmVnaW4oKTsKLQotICAgICAgLy8gZ3VhcmQgYWdhaW5zdCBTYWZhcmkgNidzIGRvdWJsZS1m
aW5hbGx5IGJ1ZwotICAgICAgdmFyIGRpZEZpbmFsbHkgPSBmYWxzZTsKLQotICAgICAgaWYgKG9u
RXJyb3IpIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICByZXR1cm4gbWV0aG9kLmFwcGx5KHRh
cmdldCwgYXJncyk7Ci0gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7Ci0gICAgICAgICAgb25FcnJv
cihlcnJvcik7Ci0gICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgaWYgKCFkaWRGaW5hbGx5
KSB7Ci0gICAgICAgICAgICBkaWRGaW5hbGx5ID0gdHJ1ZTsKLSAgICAgICAgICAgIHRoaXMuZW5k
KCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9IGVsc2UgewotICAgICAgICB0cnkg
ewotICAgICAgICAgIHJldHVybiBtZXRob2QuYXBwbHkodGFyZ2V0LCBhcmdzKTsKLSAgICAgICAg
fSBmaW5hbGx5IHsKLSAgICAgICAgICBpZiAoIWRpZEZpbmFsbHkpIHsKLSAgICAgICAgICAgIGRp
ZEZpbmFsbHkgPSB0cnVlOwotICAgICAgICAgICAgdGhpcy5lbmQoKTsKLSAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotCi0gICAgLyoKLSAgICAgIEpvaW4gdGhlIHBhc3Nl
ZCBtZXRob2Qgd2l0aCBhbiBleGlzdGluZyBxdWV1ZSBhbmQgZXhlY3V0ZSBpbW1lZGlhdGVseSwK
LSAgICAgIGlmIHRoZXJlIGlzbid0IG9uZSB1c2UgYEJhY2tidXJuZXIjcnVuYC4KLSAgICAgICBU
aGUgam9pbiBtZXRob2QgaXMgbGlrZSB0aGUgcnVuIG1ldGhvZCBleGNlcHQgdGhhdCBpdCB3aWxs
IHNjaGVkdWxlIGludG8KLSAgICAgIGFuIGV4aXN0aW5nIHF1ZXVlIGlmIG9uZSBhbHJlYWR5IGV4
aXN0cy4gSW4gZWl0aGVyIGNhc2UsIHRoZSBqb2luIG1ldGhvZCB3aWxsCi0gICAgICBpbW1lZGlh
dGVseSBleGVjdXRlIHRoZSBwYXNzZWQgaW4gZnVuY3Rpb24gYW5kIHJldHVybiBpdHMgcmVzdWx0
LgotICAgICAgIEBtZXRob2Qgam9pbgotICAgICAgQHBhcmFtIHtPYmplY3R9IHRhcmdldAotICAg
ICAgQHBhcmFtIHtGdW5jdGlvbn0gbWV0aG9kIFRoZSBtZXRob2QgdG8gYmUgZXhlY3V0ZWQKLSAg
ICAgIEBwYXJhbSB7YW55fSBhcmdzIFRoZSBtZXRob2QgYXJndW1lbnRzCi0gICAgICBAcmV0dXJu
IG1ldGhvZCByZXN1bHQKLSAgICAqLwotICAgIGpvaW46IGZ1bmN0aW9uICgpIC8qIHRhcmdldCwg
bWV0aG9kLCBhcmdzICovewotICAgICAgaWYgKCF0aGlzLmN1cnJlbnRJbnN0YW5jZSkgewotICAg
ICAgICByZXR1cm4gdGhpcy5ydW4uYXBwbHkodGhpcywgYXJndW1lbnRzKTsKLSAgICAgIH0KLQot
ICAgICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7Ci0gICAgICB2YXIgbWV0aG9kLCB0
YXJnZXQ7Ci0KLSAgICAgIGlmIChsZW5ndGggPT09IDEpIHsKLSAgICAgICAgbWV0aG9kID0gYXJn
dW1lbnRzWzBdOwotICAgICAgICB0YXJnZXQgPSBudWxsOwotICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgdGFyZ2V0ID0gYXJndW1lbnRzWzBdOwotICAgICAgICBtZXRob2QgPSBhcmd1bWVudHNbMV07
Ci0gICAgICB9Ci0KLSAgICAgIGlmIChfYmFja2J1cm5lclV0aWxzLmlzU3RyaW5nKG1ldGhvZCkp
IHsKLSAgICAgICAgbWV0aG9kID0gdGFyZ2V0W21ldGhvZF07Ci0gICAgICB9Ci0KLSAgICAgIGlm
IChsZW5ndGggPT09IDEpIHsKLSAgICAgICAgcmV0dXJuIG1ldGhvZCgpOwotICAgICAgfSBlbHNl
IGlmIChsZW5ndGggPT09IDIpIHsKLSAgICAgICAgcmV0dXJuIG1ldGhvZC5jYWxsKHRhcmdldCk7
Ci0gICAgICB9IGVsc2UgewotICAgICAgICB2YXIgYXJncyA9IG5ldyBBcnJheShsZW5ndGggLSAy
KTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBsZW5ndGggLSAyOyBpIDwgbDsgaSsrKSB7
Ci0gICAgICAgICAgYXJnc1tpXSA9IGFyZ3VtZW50c1tpICsgMl07Ci0gICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuIG1ldGhvZC5hcHBseSh0YXJnZXQsIGFyZ3MpOwotICAgICAgfQotICAgIH0sCi0K
LSAgICAvKgotICAgICAgRGVmZXIgdGhlIHBhc3NlZCBmdW5jdGlvbiB0byBydW4gaW5zaWRlIHRo
ZSBzcGVjaWZpZWQgcXVldWUuCi0gICAgICAgQG1ldGhvZCBkZWZlcgotICAgICAgQHBhcmFtIHtT
dHJpbmd9IHF1ZXVlTmFtZQotICAgICAgQHBhcmFtIHtPYmplY3R9IHRhcmdldAotICAgICAgQHBh
cmFtIHtGdW5jdGlvbnxTdHJpbmd9IG1ldGhvZCBUaGUgbWV0aG9kIG9yIG1ldGhvZCBuYW1lIHRv
IGJlIGV4ZWN1dGVkCi0gICAgICBAcGFyYW0ge2FueX0gYXJncyBUaGUgbWV0aG9kIGFyZ3VtZW50
cwotICAgICAgQHJldHVybiBtZXRob2QgcmVzdWx0Ci0gICAgKi8KLSAgICBkZWZlcjogZnVuY3Rp
b24gKHF1ZXVlTmFtZSAvKiAsIHRhcmdldCwgbWV0aG9kLCBhcmdzICovKSB7Ci0gICAgICB2YXIg
bGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDsKLSAgICAgIHZhciBtZXRob2QsIHRhcmdldCwgYXJn
czsKLQotICAgICAgaWYgKGxlbmd0aCA9PT0gMikgewotICAgICAgICBtZXRob2QgPSBhcmd1bWVu
dHNbMV07Ci0gICAgICAgIHRhcmdldCA9IG51bGw7Ci0gICAgICB9IGVsc2UgewotICAgICAgICB0
YXJnZXQgPSBhcmd1bWVudHNbMV07Ci0gICAgICAgIG1ldGhvZCA9IGFyZ3VtZW50c1syXTsKLSAg
ICAgIH0KLQotICAgICAgaWYgKF9iYWNrYnVybmVyVXRpbHMuaXNTdHJpbmcobWV0aG9kKSkgewot
ICAgICAgICBtZXRob2QgPSB0YXJnZXRbbWV0aG9kXTsKLSAgICAgIH0KLQotICAgICAgdmFyIHN0
YWNrID0gdGhpcy5ERUJVRyA/IG5ldyBFcnJvcigpIDogdW5kZWZpbmVkOwotCi0gICAgICBpZiAo
bGVuZ3RoID4gMykgewotICAgICAgICBhcmdzID0gbmV3IEFycmF5KGxlbmd0aCAtIDMpOwotICAg
ICAgICBmb3IgKHZhciBpID0gMzsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgYXJnc1tp
IC0gM10gPSBhcmd1bWVudHNbaV07Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSB7Ci0gICAgICAg
IGFyZ3MgPSB1bmRlZmluZWQ7Ci0gICAgICB9Ci0KLSAgICAgIGlmICghdGhpcy5jdXJyZW50SW5z
dGFuY2UpIHsKLSAgICAgICAgY3JlYXRlQXV0b3J1bih0aGlzKTsKLSAgICAgIH0KLSAgICAgIHJl
dHVybiB0aGlzLmN1cnJlbnRJbnN0YW5jZS5zY2hlZHVsZShxdWV1ZU5hbWUsIHRhcmdldCwgbWV0
aG9kLCBhcmdzLCBmYWxzZSwgc3RhY2spOwotICAgIH0sCi0KLSAgICBkZWZlck9uY2U6IGZ1bmN0
aW9uIChxdWV1ZU5hbWUgLyogLCB0YXJnZXQsIG1ldGhvZCwgYXJncyAqLykgewotICAgICAgdmFy
IGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7Ci0gICAgICB2YXIgbWV0aG9kLCB0YXJnZXQsIGFy
Z3M7Ci0KLSAgICAgIGlmIChsZW5ndGggPT09IDIpIHsKLSAgICAgICAgbWV0aG9kID0gYXJndW1l
bnRzWzFdOwotICAgICAgICB0YXJnZXQgPSBudWxsOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAg
dGFyZ2V0ID0gYXJndW1lbnRzWzFdOwotICAgICAgICBtZXRob2QgPSBhcmd1bWVudHNbMl07Ci0g
ICAgICB9Ci0KLSAgICAgIGlmIChfYmFja2J1cm5lclV0aWxzLmlzU3RyaW5nKG1ldGhvZCkpIHsK
LSAgICAgICAgbWV0aG9kID0gdGFyZ2V0W21ldGhvZF07Ci0gICAgICB9Ci0KLSAgICAgIHZhciBz
dGFjayA9IHRoaXMuREVCVUcgPyBuZXcgRXJyb3IoKSA6IHVuZGVmaW5lZDsKLQotICAgICAgaWYg
KGxlbmd0aCA+IDMpIHsKLSAgICAgICAgYXJncyA9IG5ldyBBcnJheShsZW5ndGggLSAzKTsKLSAg
ICAgICAgZm9yICh2YXIgaSA9IDM7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgIGFyZ3Nb
aSAtIDNdID0gYXJndW1lbnRzW2ldOwotICAgICAgICB9Ci0gICAgICB9IGVsc2UgewotICAgICAg
ICBhcmdzID0gdW5kZWZpbmVkOwotICAgICAgfQotCi0gICAgICBpZiAoIXRoaXMuY3VycmVudElu
c3RhbmNlKSB7Ci0gICAgICAgIGNyZWF0ZUF1dG9ydW4odGhpcyk7Ci0gICAgICB9Ci0gICAgICBy
ZXR1cm4gdGhpcy5jdXJyZW50SW5zdGFuY2Uuc2NoZWR1bGUocXVldWVOYW1lLCB0YXJnZXQsIG1l
dGhvZCwgYXJncywgdHJ1ZSwgc3RhY2spOwotICAgIH0sCi0KLSAgICBzZXRUaW1lb3V0OiBmdW5j
dGlvbiAoKSB7Ci0gICAgICB2YXIgbCA9IGFyZ3VtZW50cy5sZW5ndGg7Ci0gICAgICB2YXIgYXJn
cyA9IG5ldyBBcnJheShsKTsKLQotICAgICAgZm9yICh2YXIgeCA9IDA7IHggPCBsOyB4KyspIHsK
LSAgICAgICAgYXJnc1t4XSA9IGFyZ3VtZW50c1t4XTsKLSAgICAgIH0KLQotICAgICAgdmFyIGxl
bmd0aCA9IGFyZ3MubGVuZ3RoLAotICAgICAgICAgIG1ldGhvZCwKLSAgICAgICAgICB3YWl0LAot
ICAgICAgICAgIHRhcmdldCwKLSAgICAgICAgICBtZXRob2RPclRhcmdldCwKLSAgICAgICAgICBt
ZXRob2RPcldhaXQsCi0gICAgICAgICAgbWV0aG9kT3JBcmdzOwotCi0gICAgICBpZiAobGVuZ3Ro
ID09PSAwKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0gZWxzZSBpZiAobGVuZ3RoID09PSAx
KSB7Ci0gICAgICAgIG1ldGhvZCA9IGFyZ3Muc2hpZnQoKTsKLSAgICAgICAgd2FpdCA9IDA7Ci0g
ICAgICB9IGVsc2UgaWYgKGxlbmd0aCA9PT0gMikgewotICAgICAgICBtZXRob2RPclRhcmdldCA9
IGFyZ3NbMF07Ci0gICAgICAgIG1ldGhvZE9yV2FpdCA9IGFyZ3NbMV07Ci0KLSAgICAgICAgaWYg
KF9iYWNrYnVybmVyVXRpbHMuaXNGdW5jdGlvbihtZXRob2RPcldhaXQpIHx8IF9iYWNrYnVybmVy
VXRpbHMuaXNGdW5jdGlvbihtZXRob2RPclRhcmdldFttZXRob2RPcldhaXRdKSkgewotICAgICAg
ICAgIHRhcmdldCA9IGFyZ3Muc2hpZnQoKTsKLSAgICAgICAgICBtZXRob2QgPSBhcmdzLnNoaWZ0
KCk7Ci0gICAgICAgICAgd2FpdCA9IDA7Ci0gICAgICAgIH0gZWxzZSBpZiAoX2JhY2tidXJuZXJV
dGlscy5pc0NvZXJjYWJsZU51bWJlcihtZXRob2RPcldhaXQpKSB7Ci0gICAgICAgICAgbWV0aG9k
ID0gYXJncy5zaGlmdCgpOwotICAgICAgICAgIHdhaXQgPSBhcmdzLnNoaWZ0KCk7Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgbWV0aG9kID0gYXJncy5zaGlmdCgpOwotICAgICAgICAgIHdh
aXQgPSAwOwotICAgICAgICB9Ci0gICAgICB9IGVsc2UgewotICAgICAgICB2YXIgbGFzdCA9IGFy
Z3NbYXJncy5sZW5ndGggLSAxXTsKLQotICAgICAgICBpZiAoX2JhY2tidXJuZXJVdGlscy5pc0Nv
ZXJjYWJsZU51bWJlcihsYXN0KSkgewotICAgICAgICAgIHdhaXQgPSBhcmdzLnBvcCgpOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgIHdhaXQgPSAwOwotICAgICAgICB9Ci0KLSAgICAgICAg
bWV0aG9kT3JUYXJnZXQgPSBhcmdzWzBdOwotICAgICAgICBtZXRob2RPckFyZ3MgPSBhcmdzWzFd
OwotCi0gICAgICAgIGlmIChfYmFja2J1cm5lclV0aWxzLmlzRnVuY3Rpb24obWV0aG9kT3JBcmdz
KSB8fCBfYmFja2J1cm5lclV0aWxzLmlzU3RyaW5nKG1ldGhvZE9yQXJncykgJiYgbWV0aG9kT3JU
YXJnZXQgIT09IG51bGwgJiYgbWV0aG9kT3JBcmdzIGluIG1ldGhvZE9yVGFyZ2V0KSB7Ci0gICAg
ICAgICAgdGFyZ2V0ID0gYXJncy5zaGlmdCgpOwotICAgICAgICAgIG1ldGhvZCA9IGFyZ3Muc2hp
ZnQoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBtZXRob2QgPSBhcmdzLnNoaWZ0KCk7
Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgdmFyIGV4ZWN1dGVBdCA9IERhdGUubm93KCkg
KyBwYXJzZUludCh3YWl0ICE9PSB3YWl0ID8gMCA6IHdhaXQsIDEwKTsKLQotICAgICAgaWYgKF9i
YWNrYnVybmVyVXRpbHMuaXNTdHJpbmcobWV0aG9kKSkgewotICAgICAgICBtZXRob2QgPSB0YXJn
ZXRbbWV0aG9kXTsKLSAgICAgIH0KLQotICAgICAgdmFyIG9uRXJyb3IgPSBnZXRPbkVycm9yKHRo
aXMub3B0aW9ucyk7Ci0KLSAgICAgIGZ1bmN0aW9uIGZuKCkgewotICAgICAgICBpZiAob25FcnJv
cikgewotICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBtZXRob2QuYXBwbHkodGFyZ2V0LCBh
cmdzKTsKLSAgICAgICAgICB9IGNhdGNoIChlKSB7Ci0gICAgICAgICAgICBvbkVycm9yKGUpOwot
ICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBtZXRob2QuYXBwbHkodGFy
Z2V0LCBhcmdzKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICByZXR1cm4gdGhpcy5fc2V0
VGltZW91dChmbiwgZXhlY3V0ZUF0KTsKLSAgICB9LAotCi0gICAgX3NldFRpbWVvdXQ6IGZ1bmN0
aW9uIChmbiwgZXhlY3V0ZUF0KSB7Ci0gICAgICBpZiAodGhpcy5fdGltZXJzLmxlbmd0aCA9PT0g
MCkgewotICAgICAgICB0aGlzLl90aW1lcnMucHVzaChleGVjdXRlQXQsIGZuKTsKLSAgICAgICAg
dGhpcy5faW5zdGFsbFRpbWVyVGltZW91dCgpOwotICAgICAgICByZXR1cm4gZm47Ci0gICAgICB9
Ci0KLSAgICAgIC8vIGZpbmQgcG9zaXRpb24gdG8gaW5zZXJ0Ci0gICAgICB2YXIgaSA9IF9iYWNr
YnVybmVyQmluYXJ5U2VhcmNoLmRlZmF1bHQoZXhlY3V0ZUF0LCB0aGlzLl90aW1lcnMpOwotCi0g
ICAgICB0aGlzLl90aW1lcnMuc3BsaWNlKGksIDAsIGV4ZWN1dGVBdCwgZm4pOwotCi0gICAgICAv
LyB3ZSBzaG91bGQgYmUgdGhlIG5ldyBlYXJsaWVzdCB0aW1lciBpZiBpID09IDAKLSAgICAgIGlm
IChpID09PSAwKSB7Ci0gICAgICAgIHRoaXMuX3JlaW5zdGFsbFRpbWVyVGltZW91dCgpOwotICAg
ICAgfQotCi0gICAgICByZXR1cm4gZm47Ci0gICAgfSwKLQotICAgIHRocm90dGxlOiBmdW5jdGlv
biAodGFyZ2V0LCBtZXRob2QgLyogLCBhcmdzLCB3YWl0LCBbaW1tZWRpYXRlXSAqLykgewotICAg
ICAgdmFyIGJhY2tidXJuZXIgPSB0aGlzOwotICAgICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJn
dW1lbnRzLmxlbmd0aCk7Ci0gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5n
dGg7IGkrKykgewotICAgICAgICBhcmdzW2ldID0gYXJndW1lbnRzW2ldOwotICAgICAgfQotICAg
ICAgdmFyIGltbWVkaWF0ZSA9IGFyZ3MucG9wKCk7Ci0gICAgICB2YXIgd2FpdCwgdGhyb3R0bGVy
LCBpbmRleCwgdGltZXI7Ci0KLSAgICAgIGlmIChfYmFja2J1cm5lclV0aWxzLmlzTnVtYmVyKGlt
bWVkaWF0ZSkgfHwgX2JhY2tidXJuZXJVdGlscy5pc1N0cmluZyhpbW1lZGlhdGUpKSB7Ci0gICAg
ICAgIHdhaXQgPSBpbW1lZGlhdGU7Ci0gICAgICAgIGltbWVkaWF0ZSA9IHRydWU7Ci0gICAgICB9
IGVsc2UgewotICAgICAgICB3YWl0ID0gYXJncy5wb3AoKTsKLSAgICAgIH0KLQotICAgICAgd2Fp
dCA9IHBhcnNlSW50KHdhaXQsIDEwKTsKLQotICAgICAgaW5kZXggPSBmaW5kVGhyb3R0bGVyKHRh
cmdldCwgbWV0aG9kLCB0aGlzLl90aHJvdHRsZXJzKTsKLSAgICAgIGlmIChpbmRleCA+IC0xKSB7
Ci0gICAgICAgIHJldHVybiB0aGlzLl90aHJvdHRsZXJzW2luZGV4XTsKLSAgICAgIH0gLy8gdGhy
b3R0bGVkCi0KLSAgICAgIHRpbWVyID0gdGhpcy5fcGxhdGZvcm0uc2V0VGltZW91dChmdW5jdGlv
biAoKSB7Ci0gICAgICAgIGlmICghaW1tZWRpYXRlKSB7Ci0gICAgICAgICAgYmFja2J1cm5lci5y
dW4uYXBwbHkoYmFja2J1cm5lciwgYXJncyk7Ci0gICAgICAgIH0KLSAgICAgICAgdmFyIGluZGV4
ID0gZmluZFRocm90dGxlcih0YXJnZXQsIG1ldGhvZCwgYmFja2J1cm5lci5fdGhyb3R0bGVycyk7
Ci0gICAgICAgIGlmIChpbmRleCA+IC0xKSB7Ci0gICAgICAgICAgYmFja2J1cm5lci5fdGhyb3R0
bGVycy5zcGxpY2UoaW5kZXgsIDEpOwotICAgICAgICB9Ci0gICAgICB9LCB3YWl0KTsKLQotICAg
ICAgaWYgKGltbWVkaWF0ZSkgewotICAgICAgICB0aGlzLnJ1bi5hcHBseSh0aGlzLCBhcmdzKTsK
LSAgICAgIH0KLQotICAgICAgdGhyb3R0bGVyID0gW3RhcmdldCwgbWV0aG9kLCB0aW1lcl07Ci0K
LSAgICAgIHRoaXMuX3Rocm90dGxlcnMucHVzaCh0aHJvdHRsZXIpOwotCi0gICAgICByZXR1cm4g
dGhyb3R0bGVyOwotICAgIH0sCi0KLSAgICBkZWJvdW5jZTogZnVuY3Rpb24gKHRhcmdldCwgbWV0
aG9kIC8qICwgYXJncywgd2FpdCwgW2ltbWVkaWF0ZV0gKi8pIHsKLSAgICAgIHZhciBiYWNrYnVy
bmVyID0gdGhpczsKLSAgICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgp
OwotICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsKLSAg
ICAgICAgYXJnc1tpXSA9IGFyZ3VtZW50c1tpXTsKLSAgICAgIH0KLQotICAgICAgdmFyIGltbWVk
aWF0ZSA9IGFyZ3MucG9wKCk7Ci0gICAgICB2YXIgd2FpdCwgaW5kZXgsIGRlYm91bmNlZSwgdGlt
ZXI7Ci0KLSAgICAgIGlmIChfYmFja2J1cm5lclV0aWxzLmlzTnVtYmVyKGltbWVkaWF0ZSkgfHwg
X2JhY2tidXJuZXJVdGlscy5pc1N0cmluZyhpbW1lZGlhdGUpKSB7Ci0gICAgICAgIHdhaXQgPSBp
bW1lZGlhdGU7Ci0gICAgICAgIGltbWVkaWF0ZSA9IGZhbHNlOwotICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgd2FpdCA9IGFyZ3MucG9wKCk7Ci0gICAgICB9Ci0KLSAgICAgIHdhaXQgPSBwYXJzZUlu
dCh3YWl0LCAxMCk7Ci0gICAgICAvLyBSZW1vdmUgZGVib3VuY2VlCi0gICAgICBpbmRleCA9IGZp
bmREZWJvdW5jZWUodGFyZ2V0LCBtZXRob2QsIHRoaXMuX2RlYm91bmNlZXMpOwotCi0gICAgICBp
ZiAoaW5kZXggPiAtMSkgewotICAgICAgICBkZWJvdW5jZWUgPSB0aGlzLl9kZWJvdW5jZWVzW2lu
ZGV4XTsKLSAgICAgICAgdGhpcy5fZGVib3VuY2Vlcy5zcGxpY2UoaW5kZXgsIDEpOwotICAgICAg
ICB0aGlzLl9wbGF0Zm9ybS5jbGVhclRpbWVvdXQoZGVib3VuY2VlWzJdKTsKLSAgICAgIH0KLQot
ICAgICAgdGltZXIgPSB0aGlzLl9wbGF0Zm9ybS5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKLSAg
ICAgICAgaWYgKCFpbW1lZGlhdGUpIHsKLSAgICAgICAgICBiYWNrYnVybmVyLnJ1bi5hcHBseShi
YWNrYnVybmVyLCBhcmdzKTsKLSAgICAgICAgfQotICAgICAgICB2YXIgaW5kZXggPSBmaW5kRGVi
b3VuY2VlKHRhcmdldCwgbWV0aG9kLCBiYWNrYnVybmVyLl9kZWJvdW5jZWVzKTsKLSAgICAgICAg
aWYgKGluZGV4ID4gLTEpIHsKLSAgICAgICAgICBiYWNrYnVybmVyLl9kZWJvdW5jZWVzLnNwbGlj
ZShpbmRleCwgMSk7Ci0gICAgICAgIH0KLSAgICAgIH0sIHdhaXQpOwotCi0gICAgICBpZiAoaW1t
ZWRpYXRlICYmIGluZGV4ID09PSAtMSkgewotICAgICAgICBiYWNrYnVybmVyLnJ1bi5hcHBseShi
YWNrYnVybmVyLCBhcmdzKTsKLSAgICAgIH0KLQotICAgICAgZGVib3VuY2VlID0gW3RhcmdldCwg
bWV0aG9kLCB0aW1lcl07Ci0KLSAgICAgIGJhY2tidXJuZXIuX2RlYm91bmNlZXMucHVzaChkZWJv
dW5jZWUpOwotCi0gICAgICByZXR1cm4gZGVib3VuY2VlOwotICAgIH0sCi0KLSAgICBjYW5jZWxU
aW1lcnM6IGZ1bmN0aW9uICgpIHsKLSAgICAgIF9iYWNrYnVybmVyVXRpbHMuZWFjaCh0aGlzLl90
aHJvdHRsZXJzLCB0aGlzLl9ib3VuZENsZWFySXRlbXMpOwotICAgICAgdGhpcy5fdGhyb3R0bGVy
cyA9IFtdOwotCi0gICAgICBfYmFja2J1cm5lclV0aWxzLmVhY2godGhpcy5fZGVib3VuY2Vlcywg
dGhpcy5fYm91bmRDbGVhckl0ZW1zKTsKLSAgICAgIHRoaXMuX2RlYm91bmNlZXMgPSBbXTsKLQot
ICAgICAgdGhpcy5fY2xlYXJUaW1lclRpbWVvdXQoKTsKLSAgICAgIHRoaXMuX3RpbWVycyA9IFtd
OwotCi0gICAgICBpZiAodGhpcy5fYXV0b3J1bikgewotICAgICAgICB0aGlzLl9wbGF0Zm9ybS5j
bGVhclRpbWVvdXQodGhpcy5fYXV0b3J1bik7Ci0gICAgICAgIHRoaXMuX2F1dG9ydW4gPSBudWxs
OwotICAgICAgfQotICAgIH0sCi0KLSAgICBoYXNUaW1lcnM6IGZ1bmN0aW9uICgpIHsKLSAgICAg
IHJldHVybiAhIXRoaXMuX3RpbWVycy5sZW5ndGggfHwgISF0aGlzLl9kZWJvdW5jZWVzLmxlbmd0
aCB8fCAhIXRoaXMuX3Rocm90dGxlcnMubGVuZ3RoIHx8IHRoaXMuX2F1dG9ydW47Ci0gICAgfSwK
LQotICAgIGNhbmNlbDogZnVuY3Rpb24gKHRpbWVyKSB7Ci0gICAgICB2YXIgdGltZXJUeXBlID0g
dHlwZW9mIHRpbWVyOwotCi0gICAgICBpZiAodGltZXIgJiYgdGltZXJUeXBlID09PSAnb2JqZWN0
JyAmJiB0aW1lci5xdWV1ZSAmJiB0aW1lci5tZXRob2QpIHsKLSAgICAgICAgLy8gd2UncmUgY2Fu
Y2VsbGluZyBhIGRlZmVyT25jZQotICAgICAgICByZXR1cm4gdGltZXIucXVldWUuY2FuY2VsKHRp
bWVyKTsKLSAgICAgIH0gZWxzZSBpZiAodGltZXJUeXBlID09PSAnZnVuY3Rpb24nKSB7Ci0gICAg
ICAgIC8vIHdlJ3JlIGNhbmNlbGxpbmcgYSBzZXRUaW1lb3V0Ci0gICAgICAgIGZvciAodmFyIGkg
PSAwLCBsID0gdGhpcy5fdGltZXJzLmxlbmd0aDsgaSA8IGw7IGkgKz0gMikgewotICAgICAgICAg
IGlmICh0aGlzLl90aW1lcnNbaSArIDFdID09PSB0aW1lcikgewotICAgICAgICAgICAgdGhpcy5f
dGltZXJzLnNwbGljZShpLCAyKTsgLy8gcmVtb3ZlIHRoZSB0d28gZWxlbWVudHMKLSAgICAgICAg
ICAgIGlmIChpID09PSAwKSB7Ci0gICAgICAgICAgICAgIHRoaXMuX3JlaW5zdGFsbFRpbWVyVGlt
ZW91dCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgICB9IGVsc2UgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJp
bmcuY2FsbCh0aW1lcikgPT09ICdbb2JqZWN0IEFycmF5XScpIHsKLSAgICAgICAgLy8gd2UncmUg
Y2FuY2VsbGluZyBhIHRocm90dGxlIG9yIGRlYm91bmNlCi0gICAgICAgIHJldHVybiB0aGlzLl9j
YW5jZWxJdGVtKGZpbmRUaHJvdHRsZXIsIHRoaXMuX3Rocm90dGxlcnMsIHRpbWVyKSB8fCB0aGlz
Ll9jYW5jZWxJdGVtKGZpbmREZWJvdW5jZWUsIHRoaXMuX2RlYm91bmNlZXMsIHRpbWVyKTsKLSAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVybjsgLy8gdGltZXIgd2FzIG51bGwgb3Igbm90IGEg
dGltZXIKLSAgICAgIH0KLSAgICB9LAotCi0gICAgX2NhbmNlbEl0ZW06IGZ1bmN0aW9uIChmaW5k
TWV0aG9kLCBhcnJheSwgdGltZXIpIHsKLSAgICAgIHZhciBpdGVtLCBpbmRleDsKLQotICAgICAg
aWYgKHRpbWVyLmxlbmd0aCA8IDMpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQot
Ci0gICAgICBpbmRleCA9IGZpbmRNZXRob2QodGltZXJbMF0sIHRpbWVyWzFdLCBhcnJheSk7Ci0K
LSAgICAgIGlmIChpbmRleCA+IC0xKSB7Ci0KLSAgICAgICAgaXRlbSA9IGFycmF5W2luZGV4XTsK
LQotICAgICAgICBpZiAoaXRlbVsyXSA9PT0gdGltZXJbMl0pIHsKLSAgICAgICAgICBhcnJheS5z
cGxpY2UoaW5kZXgsIDEpOwotICAgICAgICAgIHRoaXMuX3BsYXRmb3JtLmNsZWFyVGltZW91dCh0
aW1lclsyXSk7Ci0gICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgIH0KLQot
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0sCi0KLSAgICBfcnVuRXhwaXJlZFRpbWVyczogZnVu
Y3Rpb24gKCkgewotICAgICAgdGhpcy5fdGltZXJUaW1lb3V0SWQgPSB1bmRlZmluZWQ7Ci0gICAg
ICB0aGlzLnJ1bih0aGlzLCB0aGlzLl9zY2hlZHVsZUV4cGlyZWRUaW1lcnMpOwotICAgIH0sCi0K
LSAgICBfc2NoZWR1bGVFeHBpcmVkVGltZXJzOiBmdW5jdGlvbiAoKSB7Ci0gICAgICB2YXIgbiA9
IERhdGUubm93KCk7Ci0gICAgICB2YXIgdGltZXJzID0gdGhpcy5fdGltZXJzOwotICAgICAgdmFy
IGkgPSAwOwotICAgICAgdmFyIGwgPSB0aW1lcnMubGVuZ3RoOwotICAgICAgZm9yICg7IGkgPCBs
OyBpICs9IDIpIHsKLSAgICAgICAgdmFyIGV4ZWN1dGVBdCA9IHRpbWVyc1tpXTsKLSAgICAgICAg
dmFyIGZuID0gdGltZXJzW2kgKyAxXTsKLSAgICAgICAgaWYgKGV4ZWN1dGVBdCA8PSBuKSB7Ci0g
ICAgICAgICAgdGhpcy5zY2hlZHVsZSh0aGlzLm9wdGlvbnMuZGVmYXVsdFF1ZXVlLCBudWxsLCBm
bik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
IH0KLSAgICAgIHRpbWVycy5zcGxpY2UoMCwgaSk7Ci0gICAgICB0aGlzLl9pbnN0YWxsVGltZXJU
aW1lb3V0KCk7Ci0gICAgfSwKLQotICAgIF9yZWluc3RhbGxUaW1lclRpbWVvdXQ6IGZ1bmN0aW9u
ICgpIHsKLSAgICAgIHRoaXMuX2NsZWFyVGltZXJUaW1lb3V0KCk7Ci0gICAgICB0aGlzLl9pbnN0
YWxsVGltZXJUaW1lb3V0KCk7Ci0gICAgfSwKLQotICAgIF9jbGVhclRpbWVyVGltZW91dDogZnVu
Y3Rpb24gKCkgewotICAgICAgaWYgKCF0aGlzLl90aW1lclRpbWVvdXRJZCkgewotICAgICAgICBy
ZXR1cm47Ci0gICAgICB9Ci0gICAgICB0aGlzLl9wbGF0Zm9ybS5jbGVhclRpbWVvdXQodGhpcy5f
dGltZXJUaW1lb3V0SWQpOwotICAgICAgdGhpcy5fdGltZXJUaW1lb3V0SWQgPSB1bmRlZmluZWQ7
Ci0gICAgfSwKLQotICAgIF9pbnN0YWxsVGltZXJUaW1lb3V0OiBmdW5jdGlvbiAoKSB7Ci0gICAg
ICBpZiAoIXRoaXMuX3RpbWVycy5sZW5ndGgpIHsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQot
ICAgICAgdmFyIG1pbkV4cGlyZXNBdCA9IHRoaXMuX3RpbWVyc1swXTsKLSAgICAgIHZhciBuID0g
RGF0ZS5ub3coKTsKLSAgICAgIHZhciB3YWl0ID0gTWF0aC5tYXgoMCwgbWluRXhwaXJlc0F0IC0g
bik7Ci0gICAgICB0aGlzLl90aW1lclRpbWVvdXRJZCA9IHRoaXMuX3BsYXRmb3JtLnNldFRpbWVv
dXQodGhpcy5fYm91bmRSdW5FeHBpcmVkVGltZXJzLCB3YWl0KTsKLSAgICB9Ci0gIH07Ci0KLSAg
QmFja2J1cm5lci5wcm90b3R5cGUuc2NoZWR1bGUgPSBCYWNrYnVybmVyLnByb3RvdHlwZS5kZWZl
cjsKLSAgQmFja2J1cm5lci5wcm90b3R5cGUuc2NoZWR1bGVPbmNlID0gQmFja2J1cm5lci5wcm90
b3R5cGUuZGVmZXJPbmNlOwotICBCYWNrYnVybmVyLnByb3RvdHlwZS5sYXRlciA9IEJhY2tidXJu
ZXIucHJvdG90eXBlLnNldFRpbWVvdXQ7Ci0KLSAgZnVuY3Rpb24gZ2V0T25FcnJvcihvcHRpb25z
KSB7Ci0gICAgcmV0dXJuIG9wdGlvbnMub25FcnJvciB8fCBvcHRpb25zLm9uRXJyb3JUYXJnZXQg
JiYgb3B0aW9ucy5vbkVycm9yVGFyZ2V0W29wdGlvbnMub25FcnJvck1ldGhvZF07Ci0gIH0KLQot
ICBmdW5jdGlvbiBjcmVhdGVBdXRvcnVuKGJhY2tidXJuZXIpIHsKLSAgICBiYWNrYnVybmVyLmJl
Z2luKCk7Ci0gICAgYmFja2J1cm5lci5fYXV0b3J1biA9IGJhY2tidXJuZXIuX3BsYXRmb3JtLnNl
dFRpbWVvdXQoZnVuY3Rpb24gKCkgewotICAgICAgYmFja2J1cm5lci5fYXV0b3J1biA9IG51bGw7
Ci0gICAgICBiYWNrYnVybmVyLmVuZCgpOwotICAgIH0pOwotICB9Ci0KLSAgZnVuY3Rpb24gZmlu
ZERlYm91bmNlZSh0YXJnZXQsIG1ldGhvZCwgZGVib3VuY2VlcykgewotICAgIHJldHVybiBmaW5k
SXRlbSh0YXJnZXQsIG1ldGhvZCwgZGVib3VuY2Vlcyk7Ci0gIH0KLQotICBmdW5jdGlvbiBmaW5k
VGhyb3R0bGVyKHRhcmdldCwgbWV0aG9kLCB0aHJvdHRsZXJzKSB7Ci0gICAgcmV0dXJuIGZpbmRJ
dGVtKHRhcmdldCwgbWV0aG9kLCB0aHJvdHRsZXJzKTsKLSAgfQotCi0gIGZ1bmN0aW9uIGZpbmRJ
dGVtKHRhcmdldCwgbWV0aG9kLCBjb2xsZWN0aW9uKSB7Ci0gICAgdmFyIGl0ZW07Ci0gICAgdmFy
IGluZGV4ID0gLTE7Ci0KLSAgICBmb3IgKHZhciBpID0gMCwgbCA9IGNvbGxlY3Rpb24ubGVuZ3Ro
OyBpIDwgbDsgaSsrKSB7Ci0gICAgICBpdGVtID0gY29sbGVjdGlvbltpXTsKLSAgICAgIGlmIChp
dGVtWzBdID09PSB0YXJnZXQgJiYgaXRlbVsxXSA9PT0gbWV0aG9kKSB7Ci0gICAgICAgIGluZGV4
ID0gaTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGluZGV4
OwotICB9Ci0KLSAgZnVuY3Rpb24gY2xlYXJJdGVtcyhpdGVtKSB7Ci0gICAgdGhpcy5fcGxhdGZv
cm0uY2xlYXJUaW1lb3V0KGl0ZW1bMl0pOwotICB9Ci19KTsKLWVuaWZlZCgiYmFja2J1cm5lci9i
aW5hcnktc2VhcmNoIiwgWyJleHBvcnRzIl0sIGZ1bmN0aW9uIChleHBvcnRzKSB7Ci0gICJ1c2Ug
c3RyaWN0IjsKLQotICBleHBvcnRzLmRlZmF1bHQgPSBiaW5hcnlTZWFyY2g7Ci0KLSAgZnVuY3Rp
b24gYmluYXJ5U2VhcmNoKHRpbWUsIHRpbWVycykgewotICAgIHZhciBzdGFydCA9IDA7Ci0gICAg
dmFyIGVuZCA9IHRpbWVycy5sZW5ndGggLSAyOwotICAgIHZhciBtaWRkbGUsIGw7Ci0KLSAgICB3
aGlsZSAoc3RhcnQgPCBlbmQpIHsKLSAgICAgIC8vIHNpbmNlIHRpbWVycyBpcyBhbiBhcnJheSBv
ZiBwYWlycyAnbCcgd2lsbCBhbHdheXMKLSAgICAgIC8vIGJlIGFuIGludGVnZXIKLSAgICAgIGwg
PSAoZW5kIC0gc3RhcnQpIC8gMjsKLQotICAgICAgLy8gY29tcGVuc2F0ZSBmb3IgdGhlIGluZGV4
IGluIGNhc2UgZXZlbiBudW1iZXIKLSAgICAgIC8vIG9mIHBhaXJzIGluc2lkZSB0aW1lcnMKLSAg
ICAgIG1pZGRsZSA9IHN0YXJ0ICsgbCAtIGwgJSAyOwotCi0gICAgICBpZiAodGltZSA+PSB0aW1l
cnNbbWlkZGxlXSkgewotICAgICAgICBzdGFydCA9IG1pZGRsZSArIDI7Ci0gICAgICB9IGVsc2Ug
ewotICAgICAgICBlbmQgPSBtaWRkbGU7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRp
bWUgPj0gdGltZXJzW3N0YXJ0XSA/IHN0YXJ0ICsgMiA6IHN0YXJ0OwotICB9Ci19KTsKLWVuaWZl
ZCgnYmFja2J1cm5lci9kZWZlcnJlZC1hY3Rpb24tcXVldWVzJywgWydleHBvcnRzJywgJ2JhY2ti
dXJuZXIvdXRpbHMnLCAnYmFja2J1cm5lci9xdWV1ZSddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2Jh
Y2tidXJuZXJVdGlscywgX2JhY2tidXJuZXJRdWV1ZSkgewotICAndXNlIHN0cmljdCc7Ci0KLSAg
ZXhwb3J0cy5kZWZhdWx0ID0gRGVmZXJyZWRBY3Rpb25RdWV1ZXM7Ci0KLSAgZnVuY3Rpb24gRGVm
ZXJyZWRBY3Rpb25RdWV1ZXMocXVldWVOYW1lcywgb3B0aW9ucykgewotICAgIHZhciBxdWV1ZXMg
PSB0aGlzLnF1ZXVlcyA9IHt9OwotICAgIHRoaXMucXVldWVOYW1lcyA9IHF1ZXVlTmFtZXMgPSBx
dWV1ZU5hbWVzIHx8IFtdOwotCi0gICAgdGhpcy5vcHRpb25zID0gb3B0aW9uczsKLQotICAgIF9i
YWNrYnVybmVyVXRpbHMuZWFjaChxdWV1ZU5hbWVzLCBmdW5jdGlvbiAocXVldWVOYW1lKSB7Ci0g
ICAgICBxdWV1ZXNbcXVldWVOYW1lXSA9IG5ldyBfYmFja2J1cm5lclF1ZXVlLmRlZmF1bHQocXVl
dWVOYW1lLCBvcHRpb25zW3F1ZXVlTmFtZV0sIG9wdGlvbnMpOwotICAgIH0pOwotICB9Ci0KLSAg
ZnVuY3Rpb24gbm9TdWNoUXVldWUobmFtZSkgewotICAgIHRocm93IG5ldyBFcnJvcignWW91IGF0
dGVtcHRlZCB0byBzY2hlZHVsZSBhbiBhY3Rpb24gaW4gYSBxdWV1ZSAoJyArIG5hbWUgKyAnKSB0
aGF0IGRvZXNuXCd0IGV4aXN0Jyk7Ci0gIH0KLQotICBmdW5jdGlvbiBub1N1Y2hNZXRob2QobmFt
ZSkgewotICAgIHRocm93IG5ldyBFcnJvcignWW91IGF0dGVtcHRlZCB0byBzY2hlZHVsZSBhbiBh
Y3Rpb24gaW4gYSBxdWV1ZSAoJyArIG5hbWUgKyAnKSBmb3IgYSBtZXRob2QgdGhhdCBkb2Vzblwn
dCBleGlzdCcpOwotICB9Ci0KLSAgRGVmZXJyZWRBY3Rpb25RdWV1ZXMucHJvdG90eXBlID0gewot
ICAgIHNjaGVkdWxlOiBmdW5jdGlvbiAobmFtZSwgdGFyZ2V0LCBtZXRob2QsIGFyZ3MsIG9uY2VG
bGFnLCBzdGFjaykgewotICAgICAgdmFyIHF1ZXVlcyA9IHRoaXMucXVldWVzOwotICAgICAgdmFy
IHF1ZXVlID0gcXVldWVzW25hbWVdOwotCi0gICAgICBpZiAoIXF1ZXVlKSB7Ci0gICAgICAgIG5v
U3VjaFF1ZXVlKG5hbWUpOwotICAgICAgfQotCi0gICAgICBpZiAoIW1ldGhvZCkgewotICAgICAg
ICBub1N1Y2hNZXRob2QobmFtZSk7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChvbmNlRmxhZykgewot
ICAgICAgICByZXR1cm4gcXVldWUucHVzaFVuaXF1ZSh0YXJnZXQsIG1ldGhvZCwgYXJncywgc3Rh
Y2spOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJuIHF1ZXVlLnB1c2godGFyZ2V0LCBt
ZXRob2QsIGFyZ3MsIHN0YWNrKTsKLSAgICAgIH0KLSAgICB9LAotCi0gICAgZmx1c2g6IGZ1bmN0
aW9uICgpIHsKLSAgICAgIHZhciBxdWV1ZXMgPSB0aGlzLnF1ZXVlczsKLSAgICAgIHZhciBxdWV1
ZU5hbWVzID0gdGhpcy5xdWV1ZU5hbWVzOwotICAgICAgdmFyIHF1ZXVlTmFtZSwgcXVldWU7Ci0g
ICAgICB2YXIgcXVldWVOYW1lSW5kZXggPSAwOwotICAgICAgdmFyIG51bWJlck9mUXVldWVzID0g
cXVldWVOYW1lcy5sZW5ndGg7Ci0KLSAgICAgIHdoaWxlIChxdWV1ZU5hbWVJbmRleCA8IG51bWJl
ck9mUXVldWVzKSB7Ci0gICAgICAgIHF1ZXVlTmFtZSA9IHF1ZXVlTmFtZXNbcXVldWVOYW1lSW5k
ZXhdOwotICAgICAgICBxdWV1ZSA9IHF1ZXVlc1txdWV1ZU5hbWVdOwotCi0gICAgICAgIHZhciBu
dW1iZXJPZlF1ZXVlSXRlbXMgPSBxdWV1ZS5fcXVldWUubGVuZ3RoOwotCi0gICAgICAgIGlmIChu
dW1iZXJPZlF1ZXVlSXRlbXMgPT09IDApIHsKLSAgICAgICAgICBxdWV1ZU5hbWVJbmRleCsrOwot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgIHF1ZXVlLmZsdXNoKGZhbHNlIC8qIGFzeW5jICov
KTsKLSAgICAgICAgICBxdWV1ZU5hbWVJbmRleCA9IDA7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAg
ICB9Ci0gIH07Ci19KTsKLWVuaWZlZCgnYmFja2J1cm5lci9wbGF0Zm9ybScsIFsnZXhwb3J0cydd
LCBmdW5jdGlvbiAoZXhwb3J0cykgewotICAndXNlIHN0cmljdCc7Ci0KLSAgdmFyIEdsb2JhbENv
bnRleHQ7Ci0KLSAgLyogZ2xvYmFsIHNlbGYgKi8KLSAgaWYgKHR5cGVvZiBzZWxmID09PSAnb2Jq
ZWN0JykgewotICAgIEdsb2JhbENvbnRleHQgPSBzZWxmOwotCi0gICAgLyogZ2xvYmFsIGdsb2Jh
bCAqLwotICB9IGVsc2UgaWYgKHR5cGVvZiBnbG9iYWwgPT09ICdvYmplY3QnKSB7Ci0gICAgICBH
bG9iYWxDb250ZXh0ID0gZ2xvYmFsOwotCi0gICAgICAvKiBnbG9iYWwgd2luZG93ICovCi0gICAg
fSBlbHNlIGlmICh0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0JykgewotICAgICAgICBHbG9iYWxD
b250ZXh0ID0gd2luZG93OwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgdGhyb3cgbmV3IEVycm9y
KCdubyBnbG9iYWw6IGBzZWxmYCwgYGdsb2JhbGAgbm9yIGB3aW5kb3dgIHdhcyBmb3VuZCcpOwot
ICAgICAgfQotCi0gIGV4cG9ydHMuZGVmYXVsdCA9IEdsb2JhbENvbnRleHQ7Ci19KTsKLWVuaWZl
ZCgnYmFja2J1cm5lci9xdWV1ZScsIFsnZXhwb3J0cycsICdiYWNrYnVybmVyL3V0aWxzJ10sIGZ1
bmN0aW9uIChleHBvcnRzLCBfYmFja2J1cm5lclV0aWxzKSB7Ci0gICd1c2Ugc3RyaWN0JzsKLQot
ICBleHBvcnRzLmRlZmF1bHQgPSBRdWV1ZTsKLQotICBmdW5jdGlvbiBRdWV1ZShuYW1lLCBvcHRp
b25zLCBnbG9iYWxPcHRpb25zKSB7Ci0gICAgdGhpcy5uYW1lID0gbmFtZTsKLSAgICB0aGlzLmds
b2JhbE9wdGlvbnMgPSBnbG9iYWxPcHRpb25zIHx8IHt9OwotICAgIHRoaXMub3B0aW9ucyA9IG9w
dGlvbnM7Ci0gICAgdGhpcy5fcXVldWUgPSBbXTsKLSAgICB0aGlzLnRhcmdldFF1ZXVlcyA9IHt9
OwotICAgIHRoaXMuX3F1ZXVlQmVpbmdGbHVzaGVkID0gdW5kZWZpbmVkOwotICB9Ci0KLSAgUXVl
dWUucHJvdG90eXBlID0gewotICAgIHB1c2g6IGZ1bmN0aW9uICh0YXJnZXQsIG1ldGhvZCwgYXJn
cywgc3RhY2spIHsKLSAgICAgIHZhciBxdWV1ZSA9IHRoaXMuX3F1ZXVlOwotICAgICAgcXVldWUu
cHVzaCh0YXJnZXQsIG1ldGhvZCwgYXJncywgc3RhY2spOwotCi0gICAgICByZXR1cm4gewotICAg
ICAgICBxdWV1ZTogdGhpcywKLSAgICAgICAgdGFyZ2V0OiB0YXJnZXQsCi0gICAgICAgIG1ldGhv
ZDogbWV0aG9kCi0gICAgICB9OwotICAgIH0sCi0KLSAgICBwdXNoVW5pcXVlV2l0aG91dEd1aWQ6
IGZ1bmN0aW9uICh0YXJnZXQsIG1ldGhvZCwgYXJncywgc3RhY2spIHsKLSAgICAgIHZhciBxdWV1
ZSA9IHRoaXMuX3F1ZXVlOwotCi0gICAgICBmb3IgKHZhciBpID0gMCwgbCA9IHF1ZXVlLmxlbmd0
aDsgaSA8IGw7IGkgKz0gNCkgewotICAgICAgICB2YXIgY3VycmVudFRhcmdldCA9IHF1ZXVlW2ld
OwotICAgICAgICB2YXIgY3VycmVudE1ldGhvZCA9IHF1ZXVlW2kgKyAxXTsKLQotICAgICAgICBp
ZiAoY3VycmVudFRhcmdldCA9PT0gdGFyZ2V0ICYmIGN1cnJlbnRNZXRob2QgPT09IG1ldGhvZCkg
ewotICAgICAgICAgIHF1ZXVlW2kgKyAyXSA9IGFyZ3M7IC8vIHJlcGxhY2UgYXJncwotICAgICAg
ICAgIHF1ZXVlW2kgKyAzXSA9IHN0YWNrOyAvLyByZXBsYWNlIHN0YWNrCi0gICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIHF1ZXVlLnB1c2godGFyZ2V0LCBtZXRo
b2QsIGFyZ3MsIHN0YWNrKTsKLSAgICB9LAotCi0gICAgdGFyZ2V0UXVldWU6IGZ1bmN0aW9uICh0
YXJnZXRRdWV1ZSwgdGFyZ2V0LCBtZXRob2QsIGFyZ3MsIHN0YWNrKSB7Ci0gICAgICB2YXIgcXVl
dWUgPSB0aGlzLl9xdWV1ZTsKLQotICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSB0YXJnZXRRdWV1
ZS5sZW5ndGg7IGkgPCBsOyBpICs9IDIpIHsKLSAgICAgICAgdmFyIGN1cnJlbnRNZXRob2QgPSB0
YXJnZXRRdWV1ZVtpXTsKLSAgICAgICAgdmFyIGN1cnJlbnRJbmRleCA9IHRhcmdldFF1ZXVlW2kg
KyAxXTsKLQotICAgICAgICBpZiAoY3VycmVudE1ldGhvZCA9PT0gbWV0aG9kKSB7Ci0gICAgICAg
ICAgcXVldWVbY3VycmVudEluZGV4ICsgMl0gPSBhcmdzOyAvLyByZXBsYWNlIGFyZ3MKLSAgICAg
ICAgICBxdWV1ZVtjdXJyZW50SW5kZXggKyAzXSA9IHN0YWNrOyAvLyByZXBsYWNlIHN0YWNrCi0g
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIHRhcmdldFF1ZXVl
LnB1c2gobWV0aG9kLCBxdWV1ZS5wdXNoKHRhcmdldCwgbWV0aG9kLCBhcmdzLCBzdGFjaykgLSA0
KTsKLSAgICB9LAotCi0gICAgcHVzaFVuaXF1ZVdpdGhHdWlkOiBmdW5jdGlvbiAoZ3VpZCwgdGFy
Z2V0LCBtZXRob2QsIGFyZ3MsIHN0YWNrKSB7Ci0gICAgICB2YXIgaGFzTG9jYWxRdWV1ZSA9IHRo
aXMudGFyZ2V0UXVldWVzW2d1aWRdOwotCi0gICAgICBpZiAoaGFzTG9jYWxRdWV1ZSkgewotICAg
ICAgICB0aGlzLnRhcmdldFF1ZXVlKGhhc0xvY2FsUXVldWUsIHRhcmdldCwgbWV0aG9kLCBhcmdz
LCBzdGFjayk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICB0aGlzLnRhcmdldFF1ZXVlc1tndWlk
XSA9IFttZXRob2QsIHRoaXMuX3F1ZXVlLnB1c2godGFyZ2V0LCBtZXRob2QsIGFyZ3MsIHN0YWNr
KSAtIDRdOwotICAgICAgfQotCi0gICAgICByZXR1cm4gewotICAgICAgICBxdWV1ZTogdGhpcywK
LSAgICAgICAgdGFyZ2V0OiB0YXJnZXQsCi0gICAgICAgIG1ldGhvZDogbWV0aG9kCi0gICAgICB9
OwotICAgIH0sCi0KLSAgICBwdXNoVW5pcXVlOiBmdW5jdGlvbiAodGFyZ2V0LCBtZXRob2QsIGFy
Z3MsIHN0YWNrKSB7Ci0gICAgICB2YXIgS0VZID0gdGhpcy5nbG9iYWxPcHRpb25zLkdVSURfS0VZ
OwotCi0gICAgICBpZiAodGFyZ2V0ICYmIEtFWSkgewotICAgICAgICB2YXIgZ3VpZCA9IHRhcmdl
dFtLRVldOwotICAgICAgICBpZiAoZ3VpZCkgewotICAgICAgICAgIHJldHVybiB0aGlzLnB1c2hV
bmlxdWVXaXRoR3VpZChndWlkLCB0YXJnZXQsIG1ldGhvZCwgYXJncywgc3RhY2spOwotICAgICAg
ICB9Ci0gICAgICB9Ci0KLSAgICAgIHRoaXMucHVzaFVuaXF1ZVdpdGhvdXRHdWlkKHRhcmdldCwg
bWV0aG9kLCBhcmdzLCBzdGFjayk7Ci0KLSAgICAgIHJldHVybiB7Ci0gICAgICAgIHF1ZXVlOiB0
aGlzLAotICAgICAgICB0YXJnZXQ6IHRhcmdldCwKLSAgICAgICAgbWV0aG9kOiBtZXRob2QKLSAg
ICAgIH07Ci0gICAgfSwKLQotICAgIGludm9rZTogZnVuY3Rpb24gKHRhcmdldCwgbWV0aG9kLCBh
cmdzLCBfLCBfZXJyb3JSZWNvcmRlZEZvclN0YWNrKSB7Ci0gICAgICBpZiAoYXJncyAmJiBhcmdz
Lmxlbmd0aCA+IDApIHsKLSAgICAgICAgbWV0aG9kLmFwcGx5KHRhcmdldCwgYXJncyk7Ci0gICAg
ICB9IGVsc2UgewotICAgICAgICBtZXRob2QuY2FsbCh0YXJnZXQpOwotICAgICAgfQotICAgIH0s
Ci0KLSAgICBpbnZva2VXaXRoT25FcnJvcjogZnVuY3Rpb24gKHRhcmdldCwgbWV0aG9kLCBhcmdz
LCBvbkVycm9yLCBlcnJvclJlY29yZGVkRm9yU3RhY2spIHsKLSAgICAgIHRyeSB7Ci0gICAgICAg
IGlmIChhcmdzICYmIGFyZ3MubGVuZ3RoID4gMCkgewotICAgICAgICAgIG1ldGhvZC5hcHBseSh0
YXJnZXQsIGFyZ3MpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIG1ldGhvZC5jYWxsKHRh
cmdldCk7Ci0gICAgICAgIH0KLSAgICAgIH0gY2F0Y2ggKGVycm9yKSB7Ci0gICAgICAgIG9uRXJy
b3IoZXJyb3IsIGVycm9yUmVjb3JkZWRGb3JTdGFjayk7Ci0gICAgICB9Ci0gICAgfSwKLQotICAg
IGZsdXNoOiBmdW5jdGlvbiAoc3luYykgewotICAgICAgdmFyIHF1ZXVlID0gdGhpcy5fcXVldWU7
Ci0gICAgICB2YXIgbGVuZ3RoID0gcXVldWUubGVuZ3RoOwotCi0gICAgICBpZiAobGVuZ3RoID09
PSAwKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLQotICAgICAgdmFyIGdsb2JhbE9wdGlv
bnMgPSB0aGlzLmdsb2JhbE9wdGlvbnM7Ci0gICAgICB2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9u
czsKLSAgICAgIHZhciBiZWZvcmUgPSBvcHRpb25zICYmIG9wdGlvbnMuYmVmb3JlOwotICAgICAg
dmFyIGFmdGVyID0gb3B0aW9ucyAmJiBvcHRpb25zLmFmdGVyOwotICAgICAgdmFyIG9uRXJyb3Ig
PSBnbG9iYWxPcHRpb25zLm9uRXJyb3IgfHwgZ2xvYmFsT3B0aW9ucy5vbkVycm9yVGFyZ2V0ICYm
IGdsb2JhbE9wdGlvbnMub25FcnJvclRhcmdldFtnbG9iYWxPcHRpb25zLm9uRXJyb3JNZXRob2Rd
OwotICAgICAgdmFyIHRhcmdldCwgbWV0aG9kLCBhcmdzLCBlcnJvclJlY29yZGVkRm9yU3RhY2s7
Ci0gICAgICB2YXIgaW52b2tlID0gb25FcnJvciA/IHRoaXMuaW52b2tlV2l0aE9uRXJyb3IgOiB0
aGlzLmludm9rZTsKLQotICAgICAgdGhpcy50YXJnZXRRdWV1ZXMgPSBPYmplY3QuY3JlYXRlKG51
bGwpOwotICAgICAgdmFyIHF1ZXVlSXRlbXMgPSB0aGlzLl9xdWV1ZUJlaW5nRmx1c2hlZCA9IHRo
aXMuX3F1ZXVlLnNsaWNlKCk7Ci0gICAgICB0aGlzLl9xdWV1ZSA9IFtdOwotCi0gICAgICBpZiAo
YmVmb3JlKSB7Ci0gICAgICAgIGJlZm9yZSgpOwotICAgICAgfQotCi0gICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IGxlbmd0aDsgaSArPSA0KSB7Ci0gICAgICAgIHRhcmdldCA9IHF1ZXVlSXRlbXNb
aV07Ci0gICAgICAgIG1ldGhvZCA9IHF1ZXVlSXRlbXNbaSArIDFdOwotICAgICAgICBhcmdzID0g
cXVldWVJdGVtc1tpICsgMl07Ci0gICAgICAgIGVycm9yUmVjb3JkZWRGb3JTdGFjayA9IHF1ZXVl
SXRlbXNbaSArIDNdOyAvLyBEZWJ1Z2dpbmcgYXNzaXN0YW5jZQotCi0gICAgICAgIGlmIChfYmFj
a2J1cm5lclV0aWxzLmlzU3RyaW5nKG1ldGhvZCkpIHsKLSAgICAgICAgICBtZXRob2QgPSB0YXJn
ZXRbbWV0aG9kXTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIG1ldGhvZCBjb3VsZCBoYXZlIGJl
ZW4gbnVsbGlmaWVkIC8gY2FuY2VsZWQgZHVyaW5nIGZsdXNoCi0gICAgICAgIGlmIChtZXRob2Qp
IHsKLSAgICAgICAgICAvLwotICAgICAgICAgIC8vICAgICoqIEF0dGVudGlvbiBpbnRyZXBpZCBk
ZXZlbG9wZXIgKioKLSAgICAgICAgICAvLwotICAgICAgICAgIC8vICAgIFRvIGZpbmQgb3V0IHRo
ZSBzdGFjayBvZiB0aGlzIHRhc2sgd2hlbiBpdCB3YXMgc2NoZWR1bGVkIG9udG8KLSAgICAgICAg
ICAvLyAgICB0aGUgcnVuIGxvb3AsIGFkZCB0aGUgZm9sbG93aW5nIHRvIHlvdXIgYXBwLmpzOgot
ICAgICAgICAgIC8vCi0gICAgICAgICAgLy8gICAgRW1iZXIucnVuLmJhY2tidXJuZXIuREVCVUcg
PSB0cnVlOyAvLyBOT1RFOiBUaGlzIHNsb3dzIHlvdXIgYXBwLCBkb24ndCBsZWF2ZSBpdCBvbiBp
biBwcm9kdWN0aW9uLgotICAgICAgICAgIC8vCi0gICAgICAgICAgLy8gICAgT25jZSB0aGF0IGlz
IGluIHBsYWNlLCB3aGVuIHlvdSBhcmUgYXQgYSBicmVha3BvaW50IGFuZCBuYXZpZ2F0ZQotICAg
ICAgICAgIC8vICAgIGhlcmUgaW4gdGhlIHN0YWNrIGV4cGxvcmVyLCB5b3UgY2FuIGxvb2sgYXQg
YGVycm9yUmVjb3JkZWRGb3JTdGFjay5zdGFja2AsCi0gICAgICAgICAgLy8gICAgd2hpY2ggd2ls
bCBiZSB0aGUgY2FwdHVyZWQgc3RhY2sgd2hlbiB0aGlzIGpvYiB3YXMgc2NoZWR1bGVkLgotICAg
ICAgICAgIC8vCi0gICAgICAgICAgaW52b2tlKHRhcmdldCwgbWV0aG9kLCBhcmdzLCBvbkVycm9y
LCBlcnJvclJlY29yZGVkRm9yU3RhY2spOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGlm
IChhZnRlcikgewotICAgICAgICBhZnRlcigpOwotICAgICAgfQotCi0gICAgICB0aGlzLl9xdWV1
ZUJlaW5nRmx1c2hlZCA9IHVuZGVmaW5lZDsKLQotICAgICAgaWYgKHN5bmMgIT09IGZhbHNlICYm
IHRoaXMuX3F1ZXVlLmxlbmd0aCA+IDApIHsKLSAgICAgICAgLy8gY2hlY2sgaWYgbmV3IGl0ZW1z
IGhhdmUgYmVlbiBhZGRlZAotICAgICAgICB0aGlzLmZsdXNoKHRydWUpOwotICAgICAgfQotICAg
IH0sCi0KLSAgICBjYW5jZWw6IGZ1bmN0aW9uIChhY3Rpb25Ub0NhbmNlbCkgewotICAgICAgdmFy
IHF1ZXVlID0gdGhpcy5fcXVldWUsCi0gICAgICAgICAgY3VycmVudFRhcmdldCwKLSAgICAgICAg
ICBjdXJyZW50TWV0aG9kLAotICAgICAgICAgIGksCi0gICAgICAgICAgbDsKLSAgICAgIHZhciB0
YXJnZXQgPSBhY3Rpb25Ub0NhbmNlbC50YXJnZXQ7Ci0gICAgICB2YXIgbWV0aG9kID0gYWN0aW9u
VG9DYW5jZWwubWV0aG9kOwotICAgICAgdmFyIEdVSURfS0VZID0gdGhpcy5nbG9iYWxPcHRpb25z
LkdVSURfS0VZOwotCi0gICAgICBpZiAoR1VJRF9LRVkgJiYgdGhpcy50YXJnZXRRdWV1ZXMgJiYg
dGFyZ2V0KSB7Ci0gICAgICAgIHZhciB0YXJnZXRRdWV1ZSA9IHRoaXMudGFyZ2V0UXVldWVzW3Rh
cmdldFtHVUlEX0tFWV1dOwotCi0gICAgICAgIGlmICh0YXJnZXRRdWV1ZSkgewotICAgICAgICAg
IGZvciAoaSA9IDAsIGwgPSB0YXJnZXRRdWV1ZS5sZW5ndGg7IGkgPCBsOyBpKyspIHsKLSAgICAg
ICAgICAgIGlmICh0YXJnZXRRdWV1ZVtpXSA9PT0gbWV0aG9kKSB7Ci0gICAgICAgICAgICAgIHRh
cmdldFF1ZXVlLnNwbGljZShpLCAxKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICAgIH0KLQotICAgICAgZm9yIChpID0gMCwgbCA9IHF1ZXVlLmxlbmd0aDsgaSA8
IGw7IGkgKz0gNCkgewotICAgICAgICBjdXJyZW50VGFyZ2V0ID0gcXVldWVbaV07Ci0gICAgICAg
IGN1cnJlbnRNZXRob2QgPSBxdWV1ZVtpICsgMV07Ci0KLSAgICAgICAgaWYgKGN1cnJlbnRUYXJn
ZXQgPT09IHRhcmdldCAmJiBjdXJyZW50TWV0aG9kID09PSBtZXRob2QpIHsKLSAgICAgICAgICBx
dWV1ZS5zcGxpY2UoaSwgNCk7Ci0gICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAg
ICAgIH0KLQotICAgICAgLy8gaWYgbm90IGZvdW5kIGluIGN1cnJlbnQgcXVldWUKLSAgICAgIC8v
IGNvdWxkIGJlIGluIHRoZSBxdWV1ZSB0aGF0IGlzIGJlaW5nIGZsdXNoZWQKLSAgICAgIHF1ZXVl
ID0gdGhpcy5fcXVldWVCZWluZ0ZsdXNoZWQ7Ci0KLSAgICAgIGlmICghcXVldWUpIHsKLSAgICAg
ICAgcmV0dXJuOwotICAgICAgfQotCi0gICAgICBmb3IgKGkgPSAwLCBsID0gcXVldWUubGVuZ3Ro
OyBpIDwgbDsgaSArPSA0KSB7Ci0gICAgICAgIGN1cnJlbnRUYXJnZXQgPSBxdWV1ZVtpXTsKLSAg
ICAgICAgY3VycmVudE1ldGhvZCA9IHF1ZXVlW2kgKyAxXTsKLQotICAgICAgICBpZiAoY3VycmVu
dFRhcmdldCA9PT0gdGFyZ2V0ICYmIGN1cnJlbnRNZXRob2QgPT09IG1ldGhvZCkgewotICAgICAg
ICAgIC8vIGRvbid0IG1lc3Mgd2l0aCBhcnJheSBkdXJpbmcgZmx1c2gKLSAgICAgICAgICAvLyBq
dXN0IG51bGxpZnkgdGhlIG1ldGhvZAotICAgICAgICAgIHF1ZXVlW2kgKyAxXSA9IG51bGw7Ci0g
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH07Ci19
KTsKLWVuaWZlZCgnYmFja2J1cm5lci91dGlscycsIFsnZXhwb3J0cyddLCBmdW5jdGlvbiAoZXhw
b3J0cykgewotICAndXNlIHN0cmljdCc7Ci0KLSAgZXhwb3J0cy5lYWNoID0gZWFjaDsKLSAgZXhw
b3J0cy5pc1N0cmluZyA9IGlzU3RyaW5nOwotICBleHBvcnRzLmlzRnVuY3Rpb24gPSBpc0Z1bmN0
aW9uOwotICBleHBvcnRzLmlzTnVtYmVyID0gaXNOdW1iZXI7Ci0gIGV4cG9ydHMuaXNDb2VyY2Fi
bGVOdW1iZXIgPSBpc0NvZXJjYWJsZU51bWJlcjsKLSAgdmFyIE5VTUJFUiA9IC9cZCsvOwotCi0g
IGZ1bmN0aW9uIGVhY2goY29sbGVjdGlvbiwgY2FsbGJhY2spIHsKLSAgICBmb3IgKHZhciBpID0g
MDsgaSA8IGNvbGxlY3Rpb24ubGVuZ3RoOyBpKyspIHsKLSAgICAgIGNhbGxiYWNrKGNvbGxlY3Rp
b25baV0pOwotICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIGlzU3RyaW5nKHN1c3BlY3QpIHsKLSAg
ICByZXR1cm4gdHlwZW9mIHN1c3BlY3QgPT09ICdzdHJpbmcnOwotICB9Ci0KLSAgZnVuY3Rpb24g
aXNGdW5jdGlvbihzdXNwZWN0KSB7Ci0gICAgcmV0dXJuIHR5cGVvZiBzdXNwZWN0ID09PSAnZnVu
Y3Rpb24nOwotICB9Ci0KLSAgZnVuY3Rpb24gaXNOdW1iZXIoc3VzcGVjdCkgewotICAgIHJldHVy
biB0eXBlb2Ygc3VzcGVjdCA9PT0gJ251bWJlcic7Ci0gIH0KLQotICBmdW5jdGlvbiBpc0NvZXJj
YWJsZU51bWJlcihudW1iZXIpIHsKLSAgICByZXR1cm4gaXNOdW1iZXIobnVtYmVyKSB8fCBOVU1C
RVIudGVzdChudW1iZXIpOwotICB9Ci19KTsKLWVuaWZlZCgnY29udGFpbmVyL2NvbnRhaW5lcics
IFsnZXhwb3J0cycsICdlbWJlci1tZXRhbC9jb3JlJywgJ2VtYmVyLW1ldGFsL2RlYnVnJywgJ2Vt
YmVyLW1ldGFsL2RpY3Rpb25hcnknLCAnZW1iZXItbWV0YWwvZmVhdHVyZXMnLCAnY29udGFpbmVy
L293bmVyJywgJ2VtYmVyLXJ1bnRpbWUvbWl4aW5zL2NvbnRhaW5lcl9wcm94eScsICdlbWJlci1t
ZXRhbC9zeW1ib2wnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1ldGFsQ29yZSwgX2VtYmVy
TWV0YWxEZWJ1ZywgX2VtYmVyTWV0YWxEaWN0aW9uYXJ5LCBfZW1iZXJNZXRhbEZlYXR1cmVzLCBf
Y29udGFpbmVyT3duZXIsIF9lbWJlclJ1bnRpbWVNaXhpbnNDb250YWluZXJfcHJveHksIF9lbWJl
ck1ldGFsU3ltYm9sKSB7Ci0gICd1c2Ugc3RyaWN0JzsKLQotICB2YXIgQ09OVEFJTkVSX09WRVJS
SURFID0gX2VtYmVyTWV0YWxTeW1ib2wuZGVmYXVsdCgnQ09OVEFJTkVSX09WRVJSSURFJyk7Ci0K
LSAgLyoqCi0gICBBIGNvbnRhaW5lciB1c2VkIHRvIGluc3RhbnRpYXRlIGFuZCBjYWNoZSBvYmpl
Y3RzLgotICAKLSAgIEV2ZXJ5IGBDb250YWluZXJgIG11c3QgYmUgYXNzb2NpYXRlZCB3aXRoIGEg
YFJlZ2lzdHJ5YCwgd2hpY2ggaXMgcmVmZXJlbmNlZAotICAgdG8gZGV0ZXJtaW5lIHRoZSBmYWN0
b3J5IGFuZCBvcHRpb25zIHRoYXQgc2hvdWxkIGJlIHVzZWQgdG8gaW5zdGFudGlhdGUKLSAgIG9i
amVjdHMuCi0gIAotICAgVGhlIHB1YmxpYyBBUEkgZm9yIGBDb250YWluZXJgIGlzIHN0aWxsIGlu
IGZsdXggYW5kIHNob3VsZCBub3QgYmUgY29uc2lkZXJlZAotICAgc3RhYmxlLgotICAKLSAgIEBw
cml2YXRlCi0gICBAY2xhc3MgQ29udGFpbmVyCi0gICAqLwotICBmdW5jdGlvbiBDb250YWluZXIo
cmVnaXN0cnksIG9wdGlvbnMpIHsKLSAgICB0aGlzLnJlZ2lzdHJ5ID0gcmVnaXN0cnk7Ci0gICAg
dGhpcy5vd25lciA9IG9wdGlvbnMgJiYgb3B0aW9ucy5vd25lciA/IG9wdGlvbnMub3duZXIgOiBu
dWxsOwotICAgIHRoaXMuY2FjaGUgPSBfZW1iZXJNZXRhbERpY3Rpb25hcnkuZGVmYXVsdChvcHRp
b25zICYmIG9wdGlvbnMuY2FjaGUgPyBvcHRpb25zLmNhY2hlIDogbnVsbCk7Ci0gICAgdGhpcy5m
YWN0b3J5Q2FjaGUgPSBfZW1iZXJNZXRhbERpY3Rpb25hcnkuZGVmYXVsdChvcHRpb25zICYmIG9w
dGlvbnMuZmFjdG9yeUNhY2hlID8gb3B0aW9ucy5mYWN0b3J5Q2FjaGUgOiBudWxsKTsKLSAgICB0
aGlzLnZhbGlkYXRpb25DYWNoZSA9IF9lbWJlck1ldGFsRGljdGlvbmFyeS5kZWZhdWx0KG9wdGlv
bnMgJiYgb3B0aW9ucy52YWxpZGF0aW9uQ2FjaGUgPyBvcHRpb25zLnZhbGlkYXRpb25DYWNoZSA6
IG51bGwpOwotICAgIHRoaXMuX2Zha2VDb250YWluZXJUb0luamVjdCA9IF9lbWJlclJ1bnRpbWVN
aXhpbnNDb250YWluZXJfcHJveHkuYnVpbGRGYWtlQ29udGFpbmVyV2l0aERlcHJlY2F0aW9ucyh0
aGlzKTsKLSAgICB0aGlzW0NPTlRBSU5FUl9PVkVSUklERV0gPSB1bmRlZmluZWQ7Ci0gIH0KLQot
ICBDb250YWluZXIucHJvdG90eXBlID0gewotICAgIC8qKgotICAgICBAcHJpdmF0ZQotICAgICBA
cHJvcGVydHkgb3duZXIKLSAgICAgQHR5cGUgT2JqZWN0Ci0gICAgICovCi0gICAgb3duZXI6IG51
bGwsCi0KLSAgICAvKioKLSAgICAgQHByaXZhdGUKLSAgICAgQHByb3BlcnR5IHJlZ2lzdHJ5Ci0g
ICAgIEB0eXBlIFJlZ2lzdHJ5Ci0gICAgIEBzaW5jZSAxLjExLjAKLSAgICAgKi8KLSAgICByZWdp
c3RyeTogbnVsbCwKLQotICAgIC8qKgotICAgICBAcHJpdmF0ZQotICAgICBAcHJvcGVydHkgY2Fj
aGUKLSAgICAgQHR5cGUgSW5oZXJpdGluZ0RpY3QKLSAgICAgKi8KLSAgICBjYWNoZTogbnVsbCwK
LQotICAgIC8qKgotICAgICBAcHJpdmF0ZQotICAgICBAcHJvcGVydHkgZmFjdG9yeUNhY2hlCi0g
ICAgIEB0eXBlIEluaGVyaXRpbmdEaWN0Ci0gICAgICovCi0gICAgZmFjdG9yeUNhY2hlOiBudWxs
LAotCi0gICAgLyoqCi0gICAgIEBwcml2YXRlCi0gICAgIEBwcm9wZXJ0eSB2YWxpZGF0aW9uQ2Fj
aGUKLSAgICAgQHR5cGUgSW5oZXJpdGluZ0RpY3QKLSAgICAgKi8KLSAgICB2YWxpZGF0aW9uQ2Fj
aGU6IG51bGwsCi0KLSAgICAvKioKLSAgICAgR2l2ZW4gYSBmdWxsTmFtZSByZXR1cm4gYSBjb3Jy
ZXNwb25kaW5nIGluc3RhbmNlLgotICAgICAgVGhlIGRlZmF1bHQgYmVoYXZpb3VyIGlzIGZvciBs
b29rdXAgdG8gcmV0dXJuIGEgc2luZ2xldG9uIGluc3RhbmNlLgotICAgICBUaGUgc2luZ2xldG9u
IGlzIHNjb3BlZCB0byB0aGUgY29udGFpbmVyLCBhbGxvd2luZyBtdWx0aXBsZSBjb250YWluZXJz
Ci0gICAgIHRvIGFsbCBoYXZlIHRoZWlyIG93biBsb2NhbGx5IHNjb3BlZCBzaW5nbGV0b25zLgot
ICAgICAgYGBgamF2YXNjcmlwdAotICAgICB2YXIgcmVnaXN0cnkgPSBuZXcgUmVnaXN0cnkoKTsK
LSAgICAgdmFyIGNvbnRhaW5lciA9IHJlZ2lzdHJ5LmNvbnRhaW5lcigpOwotICAgICAgcmVnaXN0
cnkucmVnaXN0ZXIoJ2FwaTp0d2l0dGVyJywgVHdpdHRlcik7Ci0gICAgICB2YXIgdHdpdHRlciA9
IGNvbnRhaW5lci5sb29rdXAoJ2FwaTp0d2l0dGVyJyk7Ci0gICAgICB0d2l0dGVyIGluc3RhbmNl
b2YgVHdpdHRlcjsgLy8gPT4gdHJ1ZQotICAgICAgLy8gYnkgZGVmYXVsdCB0aGUgY29udGFpbmVy
IHdpbGwgcmV0dXJuIHNpbmdsZXRvbnMKLSAgICAgdmFyIHR3aXR0ZXIyID0gY29udGFpbmVyLmxv
b2t1cCgnYXBpOnR3aXR0ZXInKTsKLSAgICAgdHdpdHRlcjIgaW5zdGFuY2VvZiBUd2l0dGVyOyAv
LyA9PiB0cnVlCi0gICAgICB0d2l0dGVyID09PSB0d2l0dGVyMjsgLy89PiB0cnVlCi0gICAgIGBg
YAotICAgICAgSWYgc2luZ2xldG9ucyBhcmUgbm90IHdhbnRlZCwgYW4gb3B0aW9uYWwgZmxhZyBj
YW4gYmUgcHJvdmlkZWQgYXQgbG9va3VwLgotICAgICAgYGBgamF2YXNjcmlwdAotICAgICB2YXIg
cmVnaXN0cnkgPSBuZXcgUmVnaXN0cnkoKTsKLSAgICAgdmFyIGNvbnRhaW5lciA9IHJlZ2lzdHJ5
LmNvbnRhaW5lcigpOwotICAgICAgcmVnaXN0cnkucmVnaXN0ZXIoJ2FwaTp0d2l0dGVyJywgVHdp
dHRlcik7Ci0gICAgICB2YXIgdHdpdHRlciA9IGNvbnRhaW5lci5sb29rdXAoJ2FwaTp0d2l0dGVy
JywgeyBzaW5nbGV0b246IGZhbHNlIH0pOwotICAgICB2YXIgdHdpdHRlcjIgPSBjb250YWluZXIu
bG9va3VwKCdhcGk6dHdpdHRlcicsIHsgc2luZ2xldG9uOiBmYWxzZSB9KTsKLSAgICAgIHR3aXR0
ZXIgPT09IHR3aXR0ZXIyOyAvLz0+IGZhbHNlCi0gICAgIGBgYAotICAgICAgQHByaXZhdGUKLSAg
ICAgQG1ldGhvZCBsb29rdXAKLSAgICAgQHBhcmFtIHtTdHJpbmd9IGZ1bGxOYW1lCi0gICAgIEBw
YXJhbSB7T2JqZWN0fSBbb3B0aW9uc10KLSAgICAgQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLnNv
dXJjZV0gVGhlIGZ1bGxuYW1lIG9mIHRoZSByZXF1ZXN0IHNvdXJjZSAodXNlZCBmb3IgbG9jYWwg
bG9va3VwKQotICAgICBAcmV0dXJuIHthbnl9Ci0gICAgICovCi0gICAgbG9va3VwOiBmdW5jdGlv
biAoZnVsbE5hbWUsIG9wdGlvbnMpIHsKLSAgICAgIF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0KCdm
dWxsTmFtZSBtdXN0IGJlIGEgcHJvcGVyIGZ1bGwgbmFtZScsIHRoaXMucmVnaXN0cnkudmFsaWRh
dGVGdWxsTmFtZShmdWxsTmFtZSkpOwotICAgICAgcmV0dXJuIGxvb2t1cCh0aGlzLCB0aGlzLnJl
Z2lzdHJ5Lm5vcm1hbGl6ZShmdWxsTmFtZSksIG9wdGlvbnMpOwotICAgIH0sCi0KLSAgICAvKioK
LSAgICAgR2l2ZW4gYSBmdWxsTmFtZSwgcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nIGZhY3Rvcnku
Ci0gICAgICBAcHJpdmF0ZQotICAgICBAbWV0aG9kIGxvb2t1cEZhY3RvcnkKLSAgICAgQHBhcmFt
IHtTdHJpbmd9IGZ1bGxOYW1lCi0gICAgIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10KLSAgICAg
QHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLnNvdXJjZV0gVGhlIGZ1bGxuYW1lIG9mIHRoZSByZXF1
ZXN0IHNvdXJjZSAodXNlZCBmb3IgbG9jYWwgbG9va3VwKQotICAgICBAcmV0dXJuIHthbnl9Ci0g
ICAgICovCi0gICAgbG9va3VwRmFjdG9yeTogZnVuY3Rpb24gKGZ1bGxOYW1lLCBvcHRpb25zKSB7
Ci0gICAgICBfZW1iZXJNZXRhbERlYnVnLmFzc2VydCgnZnVsbE5hbWUgbXVzdCBiZSBhIHByb3Bl
ciBmdWxsIG5hbWUnLCB0aGlzLnJlZ2lzdHJ5LnZhbGlkYXRlRnVsbE5hbWUoZnVsbE5hbWUpKTsK
LSAgICAgIHJldHVybiBmYWN0b3J5Rm9yKHRoaXMsIHRoaXMucmVnaXN0cnkubm9ybWFsaXplKGZ1
bGxOYW1lKSwgb3B0aW9ucyk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICBBIGRlcHRoIGZpcnN0
IHRyYXZlcnNhbCwgZGVzdHJveWluZyB0aGUgY29udGFpbmVyLCBpdHMgZGVzY2VuZGFudCBjb250
YWluZXJzIGFuZCBhbGwKLSAgICAgdGhlaXIgbWFuYWdlZCBvYmplY3RzLgotICAgICAgQHByaXZh
dGUKLSAgICAgQG1ldGhvZCBkZXN0cm95Ci0gICAgICovCi0gICAgZGVzdHJveTogZnVuY3Rpb24g
KCkgewotICAgICAgZWFjaERlc3Ryb3lhYmxlKHRoaXMsIGZ1bmN0aW9uIChpdGVtKSB7Ci0gICAg
ICAgIGlmIChpdGVtLmRlc3Ryb3kpIHsKLSAgICAgICAgICBpdGVtLmRlc3Ryb3koKTsKLSAgICAg
ICAgfQotICAgICAgfSk7Ci0KLSAgICAgIHRoaXMuaXNEZXN0cm95ZWQgPSB0cnVlOwotICAgIH0s
Ci0KLSAgICAvKioKLSAgICAgQ2xlYXIgZWl0aGVyIHRoZSBlbnRpcmUgY2FjaGUgb3IganVzdCB0
aGUgY2FjaGUgZm9yIGEgcGFydGljdWxhciBrZXkuCi0gICAgICBAcHJpdmF0ZQotICAgICBAbWV0
aG9kIHJlc2V0Ci0gICAgIEBwYXJhbSB7U3RyaW5nfSBmdWxsTmFtZSBvcHRpb25hbCBrZXkgdG8g
cmVzZXQ7IGlmIG1pc3NpbmcsIHJlc2V0cyBldmVyeXRoaW5nCi0gICAgICovCi0gICAgcmVzZXQ6
IGZ1bmN0aW9uIChmdWxsTmFtZSkgewotICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAwKSB7
Ci0gICAgICAgIHJlc2V0TWVtYmVyKHRoaXMsIHRoaXMucmVnaXN0cnkubm9ybWFsaXplKGZ1bGxO
YW1lKSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICByZXNldENhY2hlKHRoaXMpOwotICAgICAg
fQotICAgIH0sCi0KLSAgICAvKioKLSAgICAgUmV0dXJucyBhbiBvYmplY3QgdGhhdCBjYW4gYmUg
dXNlZCB0byBwcm92aWRlIGFuIG93bmVyIHRvIGEKLSAgICAgbWFudWFsbHkgY3JlYXRlZCBpbnN0
YW5jZS4KLSAgICAgIEBwcml2YXRlCi0gICAgIEBtZXRob2Qgb3duZXJJbmplY3Rpb24KLSAgICAg
QHJldHVybnMgeyBPYmplY3QgfQotICAgICovCi0gICAgb3duZXJJbmplY3Rpb246IGZ1bmN0aW9u
ICgpIHsKLSAgICAgIHZhciBfcmVmOwotCi0gICAgICByZXR1cm4gX3JlZiA9IHt9LCBfcmVmW19j
b250YWluZXJPd25lci5PV05FUl0gPSB0aGlzLm93bmVyLCBfcmVmOwotICAgIH0KLSAgfTsKLQot
ICBmdW5jdGlvbiBpc1NpbmdsZXRvbihjb250YWluZXIsIGZ1bGxOYW1lKSB7Ci0gICAgcmV0dXJu
IGNvbnRhaW5lci5yZWdpc3RyeS5nZXRPcHRpb24oZnVsbE5hbWUsICdzaW5nbGV0b24nKSAhPT0g
ZmFsc2U7Ci0gIH0KLQotICBmdW5jdGlvbiBsb29rdXAoY29udGFpbmVyLCBmdWxsTmFtZSkgewot
ICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA8PSAyIHx8IGFyZ3VtZW50c1syXSA9
PT0gdW5kZWZpbmVkID8ge30gOiBhcmd1bWVudHNbMl07Ci0KLSAgICBpZiAob3B0aW9ucy5zb3Vy
Y2UpIHsKLSAgICAgIGZ1bGxOYW1lID0gY29udGFpbmVyLnJlZ2lzdHJ5LmV4cGFuZExvY2FsTG9v
a3VwKGZ1bGxOYW1lLCBvcHRpb25zKTsKLQotICAgICAgLy8gaWYgZXhwYW5kTG9jYWxMb29rdXAg
cmV0dXJucyBmYWxzZXksIHdlIGRvIG5vdCBzdXBwb3J0IGxvY2FsIGxvb2t1cAotICAgICAgaWYg
KCFmdWxsTmFtZSkgewotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYg
KGNvbnRhaW5lci5jYWNoZVtmdWxsTmFtZV0gIT09IHVuZGVmaW5lZCAmJiBvcHRpb25zLnNpbmds
ZXRvbiAhPT0gZmFsc2UpIHsKLSAgICAgIHJldHVybiBjb250YWluZXIuY2FjaGVbZnVsbE5hbWVd
OwotICAgIH0KLQotICAgIHZhciB2YWx1ZSA9IGluc3RhbnRpYXRlKGNvbnRhaW5lciwgZnVsbE5h
bWUpOwotCi0gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHsKLSAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBpZiAoaXNTaW5nbGV0b24oY29udGFpbmVyLCBmdWxsTmFtZSkgJiYgb3B0aW9u
cy5zaW5nbGV0b24gIT09IGZhbHNlKSB7Ci0gICAgICBjb250YWluZXIuY2FjaGVbZnVsbE5hbWVd
ID0gdmFsdWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIHZhbHVlOwotICB9Ci0KLSAgZnVuY3Rpb24g
bWFya0luamVjdGlvbnNBc0R5bmFtaWMoaW5qZWN0aW9ucykgewotICAgIGluamVjdGlvbnMuX2R5
bmFtaWMgPSB0cnVlOwotICB9Ci0KLSAgZnVuY3Rpb24gYXJlSW5qZWN0aW9uc0R5bmFtaWMoaW5q
ZWN0aW9ucykgewotICAgIHJldHVybiAhIWluamVjdGlvbnMuX2R5bmFtaWM7Ci0gIH0KLQotICBm
dW5jdGlvbiBidWlsZEluamVjdGlvbnMoKSAvKiBjb250YWluZXIsIC4uLmluamVjdGlvbnMgKi97
Ci0gICAgdmFyIGhhc2ggPSB7fTsKLQotICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkgewot
ICAgICAgdmFyIGNvbnRhaW5lciA9IGFyZ3VtZW50c1swXTsKLSAgICAgIHZhciBpbmplY3Rpb25z
ID0gW107Ci0gICAgICB2YXIgaW5qZWN0aW9uOwotCi0gICAgICBmb3IgKHZhciBpID0gMSwgbCA9
IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKLSAgICAgICAgaWYgKGFyZ3VtZW50c1tp
XSkgewotICAgICAgICAgIGluamVjdGlvbnMgPSBpbmplY3Rpb25zLmNvbmNhdChhcmd1bWVudHNb
aV0pOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGNvbnRhaW5lci5yZWdpc3RyeS52YWxp
ZGF0ZUluamVjdGlvbnMoaW5qZWN0aW9ucyk7Ci0KLSAgICAgIGZvciAoaSA9IDAsIGwgPSBpbmpl
Y3Rpb25zLmxlbmd0aDsgaSA8IGw7IGkrKykgewotICAgICAgICBpbmplY3Rpb24gPSBpbmplY3Rp
b25zW2ldOwotICAgICAgICBoYXNoW2luamVjdGlvbi5wcm9wZXJ0eV0gPSBsb29rdXAoY29udGFp
bmVyLCBpbmplY3Rpb24uZnVsbE5hbWUpOwotICAgICAgICBpZiAoIWlzU2luZ2xldG9uKGNvbnRh
aW5lciwgaW5qZWN0aW9uLmZ1bGxOYW1lKSkgewotICAgICAgICAgIG1hcmtJbmplY3Rpb25zQXNE
eW5hbWljKGhhc2gpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGhh
c2g7Ci0gIH0KLQotICBmdW5jdGlvbiBmYWN0b3J5Rm9yKGNvbnRhaW5lciwgZnVsbE5hbWUpIHsK
LSAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMiB8fCBhcmd1bWVudHNbMl0g
PT09IHVuZGVmaW5lZCA/IHt9IDogYXJndW1lbnRzWzJdOwotCi0gICAgdmFyIHJlZ2lzdHJ5ID0g
Y29udGFpbmVyLnJlZ2lzdHJ5OwotCi0gICAgaWYgKG9wdGlvbnMuc291cmNlKSB7Ci0gICAgICBm
dWxsTmFtZSA9IHJlZ2lzdHJ5LmV4cGFuZExvY2FsTG9va3VwKGZ1bGxOYW1lLCBvcHRpb25zKTsK
LQotICAgICAgLy8gaWYgZXhwYW5kTG9jYWxMb29rdXAgcmV0dXJucyBmYWxzZXksIHdlIGRvIG5v
dCBzdXBwb3J0IGxvY2FsIGxvb2t1cAotICAgICAgaWYgKCFmdWxsTmFtZSkgewotICAgICAgICBy
ZXR1cm47Ci0gICAgICB9Ci0gICAgfQotCi0gICAgdmFyIGNhY2hlID0gY29udGFpbmVyLmZhY3Rv
cnlDYWNoZTsKLSAgICBpZiAoY2FjaGVbZnVsbE5hbWVdKSB7Ci0gICAgICByZXR1cm4gY2FjaGVb
ZnVsbE5hbWVdOwotICAgIH0KLSAgICB2YXIgZmFjdG9yeSA9IHJlZ2lzdHJ5LnJlc29sdmUoZnVs
bE5hbWUpOwotICAgIGlmIChmYWN0b3J5ID09PSB1bmRlZmluZWQpIHsKLSAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICB2YXIgdHlwZSA9IGZ1bGxOYW1lLnNwbGl0KCc6JylbMF07Ci0gICAgaWYg
KCFmYWN0b3J5IHx8IHR5cGVvZiBmYWN0b3J5LmV4dGVuZCAhPT0gJ2Z1bmN0aW9uJyB8fCAhX2Vt
YmVyTWV0YWxDb3JlLmRlZmF1bHQuTU9ERUxfRkFDVE9SWV9JTkpFQ1RJT05TICYmIHR5cGUgPT09
ICdtb2RlbCcpIHsKLSAgICAgIGlmIChmYWN0b3J5ICYmIHR5cGVvZiBmYWN0b3J5Ll9vbkxvb2t1
cCA9PT0gJ2Z1bmN0aW9uJykgewotICAgICAgICBmYWN0b3J5Ll9vbkxvb2t1cChmdWxsTmFtZSk7
Ci0gICAgICB9Ci0KLSAgICAgIC8vIFRPRE86IHRoaW5rIGFib3V0IGEgJ3NhZmUnIG1lcmdlIHN0
eWxlIGV4dGVuc2lvbgotICAgICAgLy8gZm9yIG5vdyBqdXN0IGZhbGxiYWNrIHRvIGNyZWF0ZSB0
aW1lIGluamVjdGlvbgotICAgICAgY2FjaGVbZnVsbE5hbWVdID0gZmFjdG9yeTsKLSAgICAgIHJl
dHVybiBmYWN0b3J5OwotICAgIH0gZWxzZSB7Ci0gICAgICB2YXIgaW5qZWN0aW9ucyA9IGluamVj
dGlvbnNGb3IoY29udGFpbmVyLCBmdWxsTmFtZSk7Ci0gICAgICB2YXIgZmFjdG9yeUluamVjdGlv
bnMgPSBmYWN0b3J5SW5qZWN0aW9uc0Zvcihjb250YWluZXIsIGZ1bGxOYW1lKTsKLSAgICAgIHZh
ciBjYWNoZWFibGUgPSAhYXJlSW5qZWN0aW9uc0R5bmFtaWMoaW5qZWN0aW9ucykgJiYgIWFyZUlu
amVjdGlvbnNEeW5hbWljKGZhY3RvcnlJbmplY3Rpb25zKTsKLQotICAgICAgZmFjdG9yeUluamVj
dGlvbnMuX3RvU3RyaW5nID0gcmVnaXN0cnkubWFrZVRvU3RyaW5nKGZhY3RvcnksIGZ1bGxOYW1l
KTsKLQotICAgICAgdmFyIGluamVjdGVkRmFjdG9yeSA9IGZhY3RvcnkuZXh0ZW5kKGluamVjdGlv
bnMpOwotCi0gICAgICAvLyBUT0RPIC0gcmVtb3ZlIGFsbCBgY29udGFpbmVyYCBpbmplY3Rpb25z
IHdoZW4gRW1iZXIgcmVhY2hlcyB2My4wLjAKLSAgICAgIGluamVjdERlcHJlY2F0ZWRDb250YWlu
ZXIoaW5qZWN0ZWRGYWN0b3J5LnByb3RvdHlwZSwgY29udGFpbmVyKTsKLSAgICAgIGluamVjdGVk
RmFjdG9yeS5yZW9wZW5DbGFzcyhmYWN0b3J5SW5qZWN0aW9ucyk7Ci0KLSAgICAgIGlmIChmYWN0
b3J5ICYmIHR5cGVvZiBmYWN0b3J5Ll9vbkxvb2t1cCA9PT0gJ2Z1bmN0aW9uJykgewotICAgICAg
ICBmYWN0b3J5Ll9vbkxvb2t1cChmdWxsTmFtZSk7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChjYWNo
ZWFibGUpIHsKLSAgICAgICAgY2FjaGVbZnVsbE5hbWVdID0gaW5qZWN0ZWRGYWN0b3J5OwotICAg
ICAgfQotCi0gICAgICByZXR1cm4gaW5qZWN0ZWRGYWN0b3J5OwotICAgIH0KLSAgfQotCi0gIGZ1
bmN0aW9uIGluamVjdGlvbnNGb3IoY29udGFpbmVyLCBmdWxsTmFtZSkgewotICAgIHZhciByZWdp
c3RyeSA9IGNvbnRhaW5lci5yZWdpc3RyeTsKLSAgICB2YXIgc3BsaXROYW1lID0gZnVsbE5hbWUu
c3BsaXQoJzonKTsKLSAgICB2YXIgdHlwZSA9IHNwbGl0TmFtZVswXTsKLQotICAgIHZhciBpbmpl
Y3Rpb25zID0gYnVpbGRJbmplY3Rpb25zKGNvbnRhaW5lciwgcmVnaXN0cnkuZ2V0VHlwZUluamVj
dGlvbnModHlwZSksIHJlZ2lzdHJ5LmdldEluamVjdGlvbnMoZnVsbE5hbWUpKTsKLSAgICBpbmpl
Y3Rpb25zLl9kZWJ1Z0NvbnRhaW5lcktleSA9IGZ1bGxOYW1lOwotCi0gICAgX2NvbnRhaW5lck93
bmVyLnNldE93bmVyKGluamVjdGlvbnMsIGNvbnRhaW5lci5vd25lcik7Ci0KLSAgICByZXR1cm4g
aW5qZWN0aW9uczsKLSAgfQotCi0gIGZ1bmN0aW9uIGZhY3RvcnlJbmplY3Rpb25zRm9yKGNvbnRh
aW5lciwgZnVsbE5hbWUpIHsKLSAgICB2YXIgcmVnaXN0cnkgPSBjb250YWluZXIucmVnaXN0cnk7
Ci0gICAgdmFyIHNwbGl0TmFtZSA9IGZ1bGxOYW1lLnNwbGl0KCc6Jyk7Ci0gICAgdmFyIHR5cGUg
PSBzcGxpdE5hbWVbMF07Ci0KLSAgICB2YXIgZmFjdG9yeUluamVjdGlvbnMgPSBidWlsZEluamVj
dGlvbnMoY29udGFpbmVyLCByZWdpc3RyeS5nZXRGYWN0b3J5VHlwZUluamVjdGlvbnModHlwZSks
IHJlZ2lzdHJ5LmdldEZhY3RvcnlJbmplY3Rpb25zKGZ1bGxOYW1lKSk7Ci0gICAgZmFjdG9yeUlu
amVjdGlvbnMuX2RlYnVnQ29udGFpbmVyS2V5ID0gZnVsbE5hbWU7Ci0KLSAgICByZXR1cm4gZmFj
dG9yeUluamVjdGlvbnM7Ci0gIH0KLQotICBmdW5jdGlvbiBpbnN0YW50aWF0ZShjb250YWluZXIs
IGZ1bGxOYW1lKSB7Ci0gICAgdmFyIGZhY3RvcnkgPSBmYWN0b3J5Rm9yKGNvbnRhaW5lciwgZnVs
bE5hbWUpOwotICAgIHZhciBsYXp5SW5qZWN0aW9ucywgdmFsaWRhdGlvbkNhY2hlOwotCi0gICAg
aWYgKGNvbnRhaW5lci5yZWdpc3RyeS5nZXRPcHRpb24oZnVsbE5hbWUsICdpbnN0YW50aWF0ZScp
ID09PSBmYWxzZSkgewotICAgICAgcmV0dXJuIGZhY3Rvcnk7Ci0gICAgfQotCi0gICAgaWYgKGZh
Y3RvcnkpIHsKLSAgICAgIGlmICh0eXBlb2YgZmFjdG9yeS5jcmVhdGUgIT09ICdmdW5jdGlvbicp
IHsKLSAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gY3JlYXRlIGFuIGluc3RhbmNl
IG9mIFwnJyArIGZ1bGxOYW1lICsgJ1wnLiAnICsgJ01vc3QgbGlrZWx5IGFuIGltcHJvcGVybHkg
ZGVmaW5lZCBjbGFzcyBvciBhbiBpbnZhbGlkIG1vZHVsZSBleHBvcnQuJyk7Ci0gICAgICB9Ci0K
LSAgICAgIHZhbGlkYXRpb25DYWNoZSA9IGNvbnRhaW5lci52YWxpZGF0aW9uQ2FjaGU7Ci0KLSAg
ICAgIF9lbWJlck1ldGFsRGVidWcucnVuSW5EZWJ1ZyhmdW5jdGlvbiAoKSB7Ci0gICAgICAgIC8v
IEVuc3VyZSB0aGF0IGFsbCBsYXp5IGluamVjdGlvbnMgYXJlIHZhbGlkIGF0IGluc3RhbnRpYXRp
b24gdGltZQotICAgICAgICBpZiAoIXZhbGlkYXRpb25DYWNoZVtmdWxsTmFtZV0gJiYgdHlwZW9m
IGZhY3RvcnkuX2xhenlJbmplY3Rpb25zID09PSAnZnVuY3Rpb24nKSB7Ci0gICAgICAgICAgbGF6
eUluamVjdGlvbnMgPSBmYWN0b3J5Ll9sYXp5SW5qZWN0aW9ucygpOwotICAgICAgICAgIGxhenlJ
bmplY3Rpb25zID0gY29udGFpbmVyLnJlZ2lzdHJ5Lm5vcm1hbGl6ZUluamVjdGlvbnNIYXNoKGxh
enlJbmplY3Rpb25zKTsKLQotICAgICAgICAgIGNvbnRhaW5lci5yZWdpc3RyeS52YWxpZGF0ZUlu
amVjdGlvbnMobGF6eUluamVjdGlvbnMpOwotICAgICAgICB9Ci0gICAgICB9KTsKLQotICAgICAg
dmFsaWRhdGlvbkNhY2hlW2Z1bGxOYW1lXSA9IHRydWU7Ci0KLSAgICAgIHZhciBvYmogPSB1bmRl
ZmluZWQ7Ci0KLSAgICAgIGlmICh0eXBlb2YgZmFjdG9yeS5leHRlbmQgPT09ICdmdW5jdGlvbicp
IHsKLSAgICAgICAgLy8gYXNzdW1lIHRoZSBmYWN0b3J5IHdhcyBleHRlbmRhYmxlIGFuZCBpcyBh
bHJlYWR5IGluamVjdGVkCi0gICAgICAgIG9iaiA9IGZhY3RvcnkuY3JlYXRlKCk7Ci0gICAgICB9
IGVsc2UgewotICAgICAgICAvLyBhc3N1bWUgdGhlIGZhY3Rvcnkgd2FzIGV4dGVuZGFibGUKLSAg
ICAgICAgLy8gdG8gY3JlYXRlIHRpbWUgaW5qZWN0aW9ucwotICAgICAgICAvLyBUT0RPOiBzdXBw
b3J0IG5ldydpbmcgZm9yIGluc3RhbnRpYXRpb24gYW5kIG1lcmdlIGluamVjdGlvbnMgZm9yIHB1
cmUgSlMgRnVuY3Rpb25zCi0gICAgICAgIHZhciBpbmplY3Rpb25zID0gaW5qZWN0aW9uc0Zvcihj
b250YWluZXIsIGZ1bGxOYW1lKTsKLQotICAgICAgICAvLyBFbnN1cmUgdGhhdCBhIGNvbnRhaW5l
ciBpcyBhdmFpbGFibGUgdG8gYW4gb2JqZWN0IGR1cmluZyBpbnN0YW50aWF0aW9uLgotICAgICAg
ICAvLyBUT0RPIC0gcmVtb3ZlIHdoZW4gRW1iZXIgcmVhY2hlcyB2My4wLjAKLSAgICAgICAgLy8g
VGhpcyAiZmFrZSIgY29udGFpbmVyIHdpbGwgYmUgcmVwbGFjZWQgYWZ0ZXIgaW5zdGFudGlhdGlv
biB3aXRoIGEKLSAgICAgICAgLy8gcHJvcGVydHkgdGhhdCByYWlzZXMgZGVwcmVjYXRpb25zIGV2
ZXJ5IHRpbWUgaXQgaXMgYWNjZXNzZWQuCi0gICAgICAgIGluamVjdGlvbnMuY29udGFpbmVyID0g
Y29udGFpbmVyLl9mYWtlQ29udGFpbmVyVG9JbmplY3Q7Ci0gICAgICAgIG9iaiA9IGZhY3Rvcnku
Y3JlYXRlKGluamVjdGlvbnMpOwotCi0gICAgICAgIC8vIFRPRE8gLSByZW1vdmUgd2hlbiBFbWJl
ciByZWFjaGVzIHYzLjAuMAotICAgICAgICBpZiAoIU9iamVjdC5pc0Zyb3plbihvYmopICYmICdj
b250YWluZXInIGluIG9iaikgewotICAgICAgICAgIGluamVjdERlcHJlY2F0ZWRDb250YWluZXIo
b2JqLCBjb250YWluZXIpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIHJldHVybiBvYmo7
Ci0gICAgfQotICB9Ci0KLSAgLy8gVE9ETyAtIHJlbW92ZSB3aGVuIEVtYmVyIHJlYWNoZXMgdjMu
MC4wCi0gIGZ1bmN0aW9uIGluamVjdERlcHJlY2F0ZWRDb250YWluZXIob2JqZWN0LCBjb250YWlu
ZXIpIHsKLSAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCAnY29udGFpbmVyJywgewot
ICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAotICAgICAgZW51bWVyYWJsZTogZmFsc2UsCi0gICAg
ICBnZXQ6IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgX2VtYmVyTWV0YWxEZWJ1Zy5kZXByZWNhdGUo
J1VzaW5nIHRoZSBpbmplY3RlZCBgY29udGFpbmVyYCBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNl
IHRoZSBgZ2V0T3duZXJgIGhlbHBlciBpbnN0ZWFkIHRvIGFjY2VzcyB0aGUgb3duZXIgb2YgdGhp
cyBvYmplY3QuJywgZmFsc2UsIHsgaWQ6ICdlbWJlci1hcHBsaWNhdGlvbi5pbmplY3RlZC1jb250
YWluZXInLCB1bnRpbDogJzMuMC4wJywgdXJsOiAnaHR0cDovL2VtYmVyanMuY29tL2RlcHJlY2F0
aW9ucy92Mi54I3RvY19pbmplY3RlZC1jb250YWluZXItYWNjZXNzJyB9KTsKLSAgICAgICAgcmV0
dXJuIHRoaXNbQ09OVEFJTkVSX09WRVJSSURFXSB8fCBjb250YWluZXI7Ci0gICAgICB9LAotCi0g
ICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkgewotICAgICAgICBfZW1iZXJNZXRhbERlYnVnLmRl
cHJlY2F0ZSgnUHJvdmlkaW5nIHRoZSBgY29udGFpbmVyYCBwcm9wZXJ0eSB0byAnICsgdGhpcyAr
ICcgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSBgRW1iZXIuc2V0T3duZXJgIG9yIGBvd25lci5v
d25lckluamVjdGlvbigpYCBpbnN0ZWFkIHRvIHByb3ZpZGUgYW4gb3duZXIgdG8gdGhlIGluc3Rh
bmNlIGJlaW5nIGNyZWF0ZWQuJywgZmFsc2UsIHsgaWQ6ICdlbWJlci1hcHBsaWNhdGlvbi5pbmpl
Y3RlZC1jb250YWluZXInLCB1bnRpbDogJzMuMC4wJywgdXJsOiAnaHR0cDovL2VtYmVyanMuY29t
L2RlcHJlY2F0aW9ucy92Mi54I3RvY19pbmplY3RlZC1jb250YWluZXItYWNjZXNzJyB9KTsKLQot
ICAgICAgICB0aGlzW0NPTlRBSU5FUl9PVkVSUklERV0gPSB2YWx1ZTsKLQotICAgICAgICByZXR1
cm4gdmFsdWU7Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICBmdW5jdGlvbiBlYWNoRGVzdHJv
eWFibGUoY29udGFpbmVyLCBjYWxsYmFjaykgewotICAgIHZhciBjYWNoZSA9IGNvbnRhaW5lci5j
YWNoZTsKLSAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGNhY2hlKTsKLSAgICB2YXIga2V5LCB2
YWx1ZTsKLQotICAgIGZvciAodmFyIGkgPSAwLCBsID0ga2V5cy5sZW5ndGg7IGkgPCBsOyBpKysp
IHsKLSAgICAgIGtleSA9IGtleXNbaV07Ci0gICAgICB2YWx1ZSA9IGNhY2hlW2tleV07Ci0KLSAg
ICAgIGlmIChjb250YWluZXIucmVnaXN0cnkuZ2V0T3B0aW9uKGtleSwgJ2luc3RhbnRpYXRlJykg
IT09IGZhbHNlKSB7Ci0gICAgICAgIGNhbGxiYWNrKHZhbHVlKTsKLSAgICAgIH0KLSAgICB9Ci0g
IH0KLQotICBmdW5jdGlvbiByZXNldENhY2hlKGNvbnRhaW5lcikgewotICAgIGVhY2hEZXN0cm95
YWJsZShjb250YWluZXIsIGZ1bmN0aW9uICh2YWx1ZSkgewotICAgICAgaWYgKHZhbHVlLmRlc3Ry
b3kpIHsKLSAgICAgICAgdmFsdWUuZGVzdHJveSgpOwotICAgICAgfQotICAgIH0pOwotCi0gICAg
Y29udGFpbmVyLmNhY2hlLmRpY3QgPSBfZW1iZXJNZXRhbERpY3Rpb25hcnkuZGVmYXVsdChudWxs
KTsKLSAgfQotCi0gIGZ1bmN0aW9uIHJlc2V0TWVtYmVyKGNvbnRhaW5lciwgZnVsbE5hbWUpIHsK
LSAgICB2YXIgbWVtYmVyID0gY29udGFpbmVyLmNhY2hlW2Z1bGxOYW1lXTsKLQotICAgIGRlbGV0
ZSBjb250YWluZXIuZmFjdG9yeUNhY2hlW2Z1bGxOYW1lXTsKLQotICAgIGlmIChtZW1iZXIpIHsK
LSAgICAgIGRlbGV0ZSBjb250YWluZXIuY2FjaGVbZnVsbE5hbWVdOwotCi0gICAgICBpZiAobWVt
YmVyLmRlc3Ryb3kpIHsKLSAgICAgICAgbWVtYmVyLmRlc3Ryb3koKTsKLSAgICAgIH0KLSAgICB9
Ci0gIH0KLQotICBleHBvcnRzLmRlZmF1bHQgPSBDb250YWluZXI7Ci19KTsKLWVuaWZlZCgnY29u
dGFpbmVyL2luZGV4JywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFsL2NvcmUnLCAnY29udGFpbmVy
L3JlZ2lzdHJ5JywgJ2NvbnRhaW5lci9jb250YWluZXInLCAnY29udGFpbmVyL293bmVyJ10sIGZ1
bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbENvcmUsIF9jb250YWluZXJSZWdpc3RyeSwgX2Nv
bnRhaW5lckNvbnRhaW5lciwgX2NvbnRhaW5lck93bmVyKSB7Ci0gICd1c2Ugc3RyaWN0JzsKLQot
ICAvKgotICBQdWJsaWMgQVBJIGZvciB0aGUgY29udGFpbmVyIGlzIHN0aWxsIGluIGZsdXguCi0g
IFRoZSBwdWJsaWMgQVBJLCBzcGVjaWZpZWQgb24gdGhlIGFwcGxpY2F0aW9uIG5hbWVzcGFjZSBz
aG91bGQgYmUgY29uc2lkZXJlZCB0aGUgc3RhYmxlIEFQSS4KLSAgLy8gQG1vZHVsZSBjb250YWlu
ZXIKLSAgICBAcHJpdmF0ZQotICAqLwotCi0gIC8qCi0gICBGbGFnIHRvIGVuYWJsZS9kaXNhYmxl
IG1vZGVsIGZhY3RvcnkgaW5qZWN0aW9ucyAoZGlzYWJsZWQgYnkgZGVmYXVsdCkuCi0gICBJZiBt
b2RlbCBmYWN0b3J5IGluamVjdGlvbnMgYXJlIGVuYWJsZWQsIG1vZGVscyBzaG91bGQgbm90IGJl
Ci0gICBhY2Nlc3NlZCBnbG9iYWxseSAob25seSB0aHJvdWdoIGBjb250YWluZXIubG9va3VwRmFj
dG9yeSgnbW9kZWw6bW9kZWxOYW1lJykpYCk7Ci0gICovCi0gIF9lbWJlck1ldGFsQ29yZS5kZWZh
dWx0Lk1PREVMX0ZBQ1RPUllfSU5KRUNUSU9OUyA9IGZhbHNlOwotCi0gIGlmIChfZW1iZXJNZXRh
bENvcmUuZGVmYXVsdC5FTlYgJiYgdHlwZW9mIF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0LkVOVi5N
T0RFTF9GQUNUT1JZX0lOSkVDVElPTlMgIT09ICd1bmRlZmluZWQnKSB7Ci0gICAgX2VtYmVyTWV0
YWxDb3JlLmRlZmF1bHQuTU9ERUxfRkFDVE9SWV9JTkpFQ1RJT05TID0gISFfZW1iZXJNZXRhbENv
cmUuZGVmYXVsdC5FTlYuTU9ERUxfRkFDVE9SWV9JTkpFQ1RJT05TOwotICB9Ci0KLSAgZXhwb3J0
cy5SZWdpc3RyeSA9IF9jb250YWluZXJSZWdpc3RyeS5kZWZhdWx0OwotICBleHBvcnRzLkNvbnRh
aW5lciA9IF9jb250YWluZXJDb250YWluZXIuZGVmYXVsdDsKLSAgZXhwb3J0cy5nZXRPd25lciA9
IF9jb250YWluZXJPd25lci5nZXRPd25lcjsKLSAgZXhwb3J0cy5zZXRPd25lciA9IF9jb250YWlu
ZXJPd25lci5zZXRPd25lcjsKLX0pOwotZW5pZmVkKCdjb250YWluZXIvb3duZXInLCBbJ2V4cG9y
dHMnLCAnZW1iZXItbWV0YWwvc3ltYm9sJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRh
bFN5bWJvbCkgewotICAvKioKLSAgQG1vZHVsZSBlbWJlcgotICBAc3VibW9kdWxlIGVtYmVyLXJ1
bnRpbWUKLSAgKi8KLQotICAndXNlIHN0cmljdCc7Ci0KLSAgZXhwb3J0cy5nZXRPd25lciA9IGdl
dE93bmVyOwotICBleHBvcnRzLnNldE93bmVyID0gc2V0T3duZXI7Ci0gIHZhciBPV05FUiA9IF9l
bWJlck1ldGFsU3ltYm9sLmRlZmF1bHQoJ09XTkVSJyk7Ci0KLSAgZXhwb3J0cy5PV05FUiA9IE9X
TkVSOwotICAvKioKLSAgICBGcmFtZXdvcmsgb2JqZWN0cyBpbiBhbiBFbWJlciBhcHBsaWNhdGlv
biAoY29tcG9uZW50cywgc2VydmljZXMsIHJvdXRlcywgZXRjLikKLSAgICBhcmUgY3JlYXRlZCB2
aWEgYSBmYWN0b3J5IGFuZCBkZXBlbmRlbmN5IGluamVjdGlvbiBzeXN0ZW0uIEVhY2ggb2YgdGhl
c2UKLSAgICBvYmplY3RzIGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiBhbiAib3duZXIiLCB3aGlj
aCBoYW5kbGVkIGl0cwotICAgIGluc3RhbnRpYXRpb24gYW5kIG1hbmFnZXMgaXRzIGxpZmV0aW1l
LgotICAKLSAgICBgZ2V0T3duZXJgIGZldGNoZXMgdGhlIG93bmVyIG9iamVjdCByZXNwb25zaWJs
ZSBmb3IgYW4gaW5zdGFuY2UuIFRoaXMgY2FuCi0gICAgYmUgdXNlZCB0byBsb29rdXAgb3IgcmVz
b2x2ZSBvdGhlciBjbGFzcyBpbnN0YW5jZXMsIG9yIHJlZ2lzdGVyIG5ldyBmYWN0b3JpZXMKLSAg
ICBpbnRvIHRoZSBvd25lci4KLSAgCi0gICAgRm9yIGV4YW1wbGUsIHRoaXMgY29tcG9uZW50IGR5
bmFtaWNhbGx5IGxvb2tzIHVwIGEgc2VydmljZSBiYXNlZCBvbiB0aGUKLSAgICBgYXVkaW9UeXBl
YCBwYXNzZWQgYXMgYW4gYXR0cmlidXRlOgotICAKLSAgICBgYGAKLSAgICAvLyBhcHAvY29tcG9u
ZW50cy9wbGF5LWF1ZGlvLmpzCi0gICAgaW1wb3J0IEVtYmVyIGZyb20gJ2VtYmVyJzsKLSAgCi0g
ICAgLy8gVXNhZ2U6Ci0gICAgLy8KLSAgICAvLyAgIHt7cGxheS1hdWRpbyBhdWRpb1R5cGU9bW9k
ZWwuYXVkaW9UeXBlIGF1ZGlvRmlsZT1tb2RlbC5maWxlfX0KLSAgICAvLwotICAgIGV4cG9ydCBk
ZWZhdWx0IEVtYmVyLkNvbXBvbmVudC5leHRlbmQoewotICAgICAgYXVkaW9TZXJ2aWNlOiBFbWJl
ci5jb21wdXRlZCgnYXVkaW9UeXBlJywgZnVuY3Rpb24oKSB7Ci0gICAgICAgIGxldCBvd25lciA9
IEVtYmVyLmdldE93bmVyKHRoaXMpOwotICAgICAgICByZXR1cm4gb3duZXIubG9va3VwKGBzZXJ2
aWNlOiR7dGhpcy5nZXQoJ2F1ZGlvVHlwZScpfWApOwotICAgICAgfSksCi0gICAgICBjbGljaygp
IHsKLSAgICAgICAgbGV0IHBsYXllciA9IHRoaXMuZ2V0KCdhdWRpb1NlcnZpY2UnKTsKLSAgICAg
ICAgcGxheWVyLnBsYXkodGhpcy5nZXQoJ2F1ZGlvRmlsZScpKTsKLSAgICAgIH0KLSAgICB9KTsK
LSAgICBgYGAKLSAgCi0gICAgQG1ldGhvZCBnZXRPd25lcgotICAgIEBwYXJhbSB7T2JqZWN0fSBv
YmplY3QgQW4gb2JqZWN0IHdpdGggYW4gb3duZXIuCi0gICAgQHJldHVybiB7T2JqZWN0fSBBbiBv
d25lciBvYmplY3QuCi0gICAgQGZvciBFbWJlcgotICAgIEBwdWJsaWMKLSAgKi8KLQotICBmdW5j
dGlvbiBnZXRPd25lcihvYmplY3QpIHsKLSAgICByZXR1cm4gb2JqZWN0W09XTkVSXTsKLSAgfQot
Ci0gIC8qKgotICAgIGBzZXRPd25lcmAgZm9yY2VzIGEgbmV3IG93bmVyIG9uIGEgZ2l2ZW4gb2Jq
ZWN0IGluc3RhbmNlLiBUaGlzIGlzIHByaW1hcmlseQotICAgIHVzZWZ1bCBpbiBzb21lIHRlc3Rp
bmcgY2FzZXMuCi0gIAotICAgIEBtZXRob2Qgc2V0T3duZXIKLSAgICBAcGFyYW0ge09iamVjdH0g
b2JqZWN0IEFuIG9iamVjdCB3aXRoIGFuIG93bmVyLgotICAgIEByZXR1cm4ge09iamVjdH0gQW4g
b3duZXIgb2JqZWN0LgotICAgIEBmb3IgRW1iZXIKLSAgICBAcHVibGljCi0gICovCi0KLSAgZnVu
Y3Rpb24gc2V0T3duZXIob2JqZWN0LCBvd25lcikgewotICAgIG9iamVjdFtPV05FUl0gPSBvd25l
cjsKLSAgfQotfSk7Ci1lbmlmZWQoJ2NvbnRhaW5lci9yZWdpc3RyeScsIFsnZXhwb3J0cycsICdl
bWJlci1tZXRhbC9mZWF0dXJlcycsICdlbWJlci1tZXRhbC9kZWJ1ZycsICdlbWJlci1tZXRhbC9k
aWN0aW9uYXJ5JywgJ2VtYmVyLW1ldGFsL2VtcHR5X29iamVjdCcsICdlbWJlci1tZXRhbC9hc3Np
Z24nLCAnY29udGFpbmVyL2NvbnRhaW5lcicsICdlbWJlci1tZXRhbC91dGlscyddLCBmdW5jdGlv
biAoZXhwb3J0cywgX2VtYmVyTWV0YWxGZWF0dXJlcywgX2VtYmVyTWV0YWxEZWJ1ZywgX2VtYmVy
TWV0YWxEaWN0aW9uYXJ5LCBfZW1iZXJNZXRhbEVtcHR5X29iamVjdCwgX2VtYmVyTWV0YWxBc3Np
Z24sIF9jb250YWluZXJDb250YWluZXIsIF9lbWJlck1ldGFsVXRpbHMpIHsKLSAgJ3VzZSBzdHJp
Y3QnOwotCi0gIGV4cG9ydHMucHJpdmF0aXplID0gcHJpdmF0aXplOwotCi0gIHZhciBWQUxJRF9G
VUxMX05BTUVfUkVHRVhQID0gL15bXjpdKzpbXjpdKyQvOwotCi0gIC8qKgotICAgQSByZWdpc3Ry
eSB1c2VkIHRvIHN0b3JlIGZhY3RvcnkgYW5kIG9wdGlvbiBpbmZvcm1hdGlvbiBrZXllZAotICAg
YnkgdHlwZS4KLSAgCi0gICBBIGBSZWdpc3RyeWAgc3RvcmVzIHRoZSBmYWN0b3J5IGFuZCBvcHRp
b24gaW5mb3JtYXRpb24gbmVlZGVkIGJ5IGEKLSAgIGBDb250YWluZXJgIHRvIGluc3RhbnRpYXRl
IGFuZCBjYWNoZSBvYmplY3RzLgotICAKLSAgIFRoZSBBUEkgZm9yIGBSZWdpc3RyeWAgaXMgc3Rp
bGwgaW4gZmx1eCBhbmQgc2hvdWxkIG5vdCBiZSBjb25zaWRlcmVkIHN0YWJsZS4KLSAgCi0gICBA
cHJpdmF0ZQotICAgQGNsYXNzIFJlZ2lzdHJ5Ci0gICBAc2luY2UgMS4xMS4wCi0gICovCi0gIGZ1
bmN0aW9uIFJlZ2lzdHJ5KG9wdGlvbnMpIHsKLSAgICB0aGlzLmZhbGxiYWNrID0gb3B0aW9ucyAm
JiBvcHRpb25zLmZhbGxiYWNrID8gb3B0aW9ucy5mYWxsYmFjayA6IG51bGw7Ci0KLSAgICBpZiAo
b3B0aW9ucyAmJiBvcHRpb25zLnJlc29sdmVyKSB7Ci0gICAgICB0aGlzLnJlc29sdmVyID0gb3B0
aW9ucy5yZXNvbHZlcjsKLQotICAgICAgaWYgKHR5cGVvZiB0aGlzLnJlc29sdmVyID09PSAnZnVu
Y3Rpb24nKSB7Ci0gICAgICAgIGRlcHJlY2F0ZVJlc29sdmVyRnVuY3Rpb24odGhpcyk7Ci0gICAg
ICB9Ci0gICAgfQotCi0gICAgdGhpcy5yZWdpc3RyYXRpb25zID0gX2VtYmVyTWV0YWxEaWN0aW9u
YXJ5LmRlZmF1bHQob3B0aW9ucyAmJiBvcHRpb25zLnJlZ2lzdHJhdGlvbnMgPyBvcHRpb25zLnJl
Z2lzdHJhdGlvbnMgOiBudWxsKTsKLQotICAgIHRoaXMuX3R5cGVJbmplY3Rpb25zID0gX2VtYmVy
TWV0YWxEaWN0aW9uYXJ5LmRlZmF1bHQobnVsbCk7Ci0gICAgdGhpcy5faW5qZWN0aW9ucyA9IF9l
bWJlck1ldGFsRGljdGlvbmFyeS5kZWZhdWx0KG51bGwpOwotICAgIHRoaXMuX2ZhY3RvcnlUeXBl
SW5qZWN0aW9ucyA9IF9lbWJlck1ldGFsRGljdGlvbmFyeS5kZWZhdWx0KG51bGwpOwotICAgIHRo
aXMuX2ZhY3RvcnlJbmplY3Rpb25zID0gX2VtYmVyTWV0YWxEaWN0aW9uYXJ5LmRlZmF1bHQobnVs
bCk7Ci0KLSAgICB0aGlzLl9sb2NhbExvb2t1cENhY2hlID0gbmV3IF9lbWJlck1ldGFsRW1wdHlf
b2JqZWN0LmRlZmF1bHQoKTsKLSAgICB0aGlzLl9ub3JtYWxpemVDYWNoZSA9IF9lbWJlck1ldGFs
RGljdGlvbmFyeS5kZWZhdWx0KG51bGwpOwotICAgIHRoaXMuX3Jlc29sdmVDYWNoZSA9IF9lbWJl
ck1ldGFsRGljdGlvbmFyeS5kZWZhdWx0KG51bGwpOwotICAgIHRoaXMuX2ZhaWxDYWNoZSA9IF9l
bWJlck1ldGFsRGljdGlvbmFyeS5kZWZhdWx0KG51bGwpOwotCi0gICAgdGhpcy5fb3B0aW9ucyA9
IF9lbWJlck1ldGFsRGljdGlvbmFyeS5kZWZhdWx0KG51bGwpOwotICAgIHRoaXMuX3R5cGVPcHRp
b25zID0gX2VtYmVyTWV0YWxEaWN0aW9uYXJ5LmRlZmF1bHQobnVsbCk7Ci0gIH0KLQotICBSZWdp
c3RyeS5wcm90b3R5cGUgPSB7Ci0gICAgLyoqCi0gICAgIEEgYmFja3VwIHJlZ2lzdHJ5IGZvciBy
ZXNvbHZpbmcgcmVnaXN0cmF0aW9ucyB3aGVuIG5vIG1hdGNoZXMgY2FuIGJlIGZvdW5kLgotICAg
ICAgQHByaXZhdGUKLSAgICAgQHByb3BlcnR5IGZhbGxiYWNrCi0gICAgIEB0eXBlIFJlZ2lzdHJ5
Ci0gICAgICovCi0gICAgZmFsbGJhY2s6IG51bGwsCi0KLSAgICAvKioKLSAgICAgQW4gb2JqZWN0
IHRoYXQgaGFzIGEgYHJlc29sdmVgIG1ldGhvZCB0aGF0IHJlc29sdmVzIGEgbmFtZS4KLSAgICAg
IEBwcml2YXRlCi0gICAgIEBwcm9wZXJ0eSByZXNvbHZlcgotICAgICBAdHlwZSBSZXNvbHZlcgot
ICAgICAqLwotICAgIHJlc29sdmVyOiBudWxsLAotCi0gICAgLyoqCi0gICAgIEBwcml2YXRlCi0g
ICAgIEBwcm9wZXJ0eSByZWdpc3RyYXRpb25zCi0gICAgIEB0eXBlIEluaGVyaXRpbmdEaWN0Ci0g
ICAgICovCi0gICAgcmVnaXN0cmF0aW9uczogbnVsbCwKLQotICAgIC8qKgotICAgICBAcHJpdmF0
ZQotICAgICAgQHByb3BlcnR5IF90eXBlSW5qZWN0aW9ucwotICAgICBAdHlwZSBJbmhlcml0aW5n
RGljdAotICAgICAqLwotICAgIF90eXBlSW5qZWN0aW9uczogbnVsbCwKLQotICAgIC8qKgotICAg
ICBAcHJpdmF0ZQotICAgICAgQHByb3BlcnR5IF9pbmplY3Rpb25zCi0gICAgIEB0eXBlIEluaGVy
aXRpbmdEaWN0Ci0gICAgICovCi0gICAgX2luamVjdGlvbnM6IG51bGwsCi0KLSAgICAvKioKLSAg
ICAgQHByaXZhdGUKLSAgICAgIEBwcm9wZXJ0eSBfZmFjdG9yeVR5cGVJbmplY3Rpb25zCi0gICAg
IEB0eXBlIEluaGVyaXRpbmdEaWN0Ci0gICAgICovCi0gICAgX2ZhY3RvcnlUeXBlSW5qZWN0aW9u
czogbnVsbCwKLQotICAgIC8qKgotICAgICBAcHJpdmF0ZQotICAgICAgQHByb3BlcnR5IF9mYWN0
b3J5SW5qZWN0aW9ucwotICAgICBAdHlwZSBJbmhlcml0aW5nRGljdAotICAgICAqLwotICAgIF9m
YWN0b3J5SW5qZWN0aW9uczogbnVsbCwKLQotICAgIC8qKgotICAgICBAcHJpdmF0ZQotICAgICAg
QHByb3BlcnR5IF9ub3JtYWxpemVDYWNoZQotICAgICBAdHlwZSBJbmhlcml0aW5nRGljdAotICAg
ICAqLwotICAgIF9ub3JtYWxpemVDYWNoZTogbnVsbCwKLQotICAgIC8qKgotICAgICBAcHJpdmF0
ZQotICAgICAgQHByb3BlcnR5IF9yZXNvbHZlQ2FjaGUKLSAgICAgQHR5cGUgSW5oZXJpdGluZ0Rp
Y3QKLSAgICAgKi8KLSAgICBfcmVzb2x2ZUNhY2hlOiBudWxsLAotCi0gICAgLyoqCi0gICAgIEBw
cml2YXRlCi0gICAgICBAcHJvcGVydHkgX29wdGlvbnMKLSAgICAgQHR5cGUgSW5oZXJpdGluZ0Rp
Y3QKLSAgICAgKi8KLSAgICBfb3B0aW9uczogbnVsbCwKLQotICAgIC8qKgotICAgICBAcHJpdmF0
ZQotICAgICAgQHByb3BlcnR5IF90eXBlT3B0aW9ucwotICAgICBAdHlwZSBJbmhlcml0aW5nRGlj
dAotICAgICAqLwotICAgIF90eXBlT3B0aW9uczogbnVsbCwKLQotICAgIC8qKgotICAgICBDcmVh
dGVzIGEgY29udGFpbmVyIGJhc2VkIG9uIHRoaXMgcmVnaXN0cnkuCi0gICAgICBAcHJpdmF0ZQot
ICAgICBAbWV0aG9kIGNvbnRhaW5lcgotICAgICBAcGFyYW0ge09iamVjdH0gb3B0aW9ucwotICAg
ICBAcmV0dXJuIHtDb250YWluZXJ9IGNyZWF0ZWQgY29udGFpbmVyCi0gICAgICovCi0gICAgY29u
dGFpbmVyOiBmdW5jdGlvbiAob3B0aW9ucykgewotICAgICAgcmV0dXJuIG5ldyBfY29udGFpbmVy
Q29udGFpbmVyLmRlZmF1bHQodGhpcywgb3B0aW9ucyk7Ci0gICAgfSwKLQotICAgIC8qKgotICAg
ICBSZWdpc3RlcnMgYSBmYWN0b3J5IGZvciBsYXRlciBpbmplY3Rpb24uCi0gICAgICBFeGFtcGxl
OgotICAgICAgYGBgamF2YXNjcmlwdAotICAgICB2YXIgcmVnaXN0cnkgPSBuZXcgUmVnaXN0cnko
KTsKLSAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyKCdtb2RlbDp1c2VyJywgUGVyc29uLCB7c2luZ2xl
dG9uOiBmYWxzZSB9KTsKLSAgICAgcmVnaXN0cnkucmVnaXN0ZXIoJ2ZydWl0OmZhdm9yaXRlJywg
T3JhbmdlKTsKLSAgICAgcmVnaXN0cnkucmVnaXN0ZXIoJ2NvbW11bmljYXRpb246bWFpbicsIEVt
YWlsLCB7c2luZ2xldG9uOiBmYWxzZX0pOwotICAgICBgYGAKLSAgICAgIEBwcml2YXRlCi0gICAg
IEBtZXRob2QgcmVnaXN0ZXIKLSAgICAgQHBhcmFtIHtTdHJpbmd9IGZ1bGxOYW1lCi0gICAgIEBw
YXJhbSB7RnVuY3Rpb259IGZhY3RvcnkKLSAgICAgQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMKLSAg
ICAgKi8KLSAgICByZWdpc3RlcjogZnVuY3Rpb24gKGZ1bGxOYW1lLCBmYWN0b3J5KSB7Ci0gICAg
ICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMiB8fCBhcmd1bWVudHNbMl0gPT09
IHVuZGVmaW5lZCA/IHt9IDogYXJndW1lbnRzWzJdOwotCi0gICAgICBfZW1iZXJNZXRhbERlYnVn
LmFzc2VydCgnZnVsbE5hbWUgbXVzdCBiZSBhIHByb3BlciBmdWxsIG5hbWUnLCB0aGlzLnZhbGlk
YXRlRnVsbE5hbWUoZnVsbE5hbWUpKTsKLQotICAgICAgaWYgKGZhY3RvcnkgPT09IHVuZGVmaW5l
ZCkgewotICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBdHRlbXB0aW5nIHRvIHJlZ2lzdGVy
IGFuIHVua25vd24gZmFjdG9yeTogYCcgKyBmdWxsTmFtZSArICdgJyk7Ci0gICAgICB9Ci0KLSAg
ICAgIHZhciBub3JtYWxpemVkTmFtZSA9IHRoaXMubm9ybWFsaXplKGZ1bGxOYW1lKTsKLQotICAg
ICAgaWYgKHRoaXMuX3Jlc29sdmVDYWNoZVtub3JtYWxpemVkTmFtZV0pIHsKLSAgICAgICAgdGhy
b3cgbmV3IEVycm9yKCdDYW5ub3QgcmUtcmVnaXN0ZXI6IGAnICsgZnVsbE5hbWUgKyAnYCwgYXMg
aXQgaGFzIGFscmVhZHkgYmVlbiByZXNvbHZlZC4nKTsKLSAgICAgIH0KLQotICAgICAgZGVsZXRl
IHRoaXMuX2ZhaWxDYWNoZVtub3JtYWxpemVkTmFtZV07Ci0gICAgICB0aGlzLnJlZ2lzdHJhdGlv
bnNbbm9ybWFsaXplZE5hbWVdID0gZmFjdG9yeTsKLSAgICAgIHRoaXMuX29wdGlvbnNbbm9ybWFs
aXplZE5hbWVdID0gb3B0aW9uczsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgIFVucmVnaXN0ZXIg
YSBmdWxsTmFtZQotICAgICAgYGBgamF2YXNjcmlwdAotICAgICB2YXIgcmVnaXN0cnkgPSBuZXcg
UmVnaXN0cnkoKTsKLSAgICAgcmVnaXN0cnkucmVnaXN0ZXIoJ21vZGVsOnVzZXInLCBVc2VyKTsK
LSAgICAgIHJlZ2lzdHJ5LnJlc29sdmUoJ21vZGVsOnVzZXInKS5jcmVhdGUoKSBpbnN0YW5jZW9m
IFVzZXIgLy89PiB0cnVlCi0gICAgICByZWdpc3RyeS51bnJlZ2lzdGVyKCdtb2RlbDp1c2VyJykK
LSAgICAgcmVnaXN0cnkucmVzb2x2ZSgnbW9kZWw6dXNlcicpID09PSB1bmRlZmluZWQgLy89PiB0
cnVlCi0gICAgIGBgYAotICAgICAgQHByaXZhdGUKLSAgICAgQG1ldGhvZCB1bnJlZ2lzdGVyCi0g
ICAgIEBwYXJhbSB7U3RyaW5nfSBmdWxsTmFtZQotICAgICAqLwotICAgIHVucmVnaXN0ZXI6IGZ1
bmN0aW9uIChmdWxsTmFtZSkgewotICAgICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ2Z1bGxO
YW1lIG11c3QgYmUgYSBwcm9wZXIgZnVsbCBuYW1lJywgdGhpcy52YWxpZGF0ZUZ1bGxOYW1lKGZ1
bGxOYW1lKSk7Ci0KLSAgICAgIHZhciBub3JtYWxpemVkTmFtZSA9IHRoaXMubm9ybWFsaXplKGZ1
bGxOYW1lKTsKLQotICAgICAgdGhpcy5fbG9jYWxMb29rdXBDYWNoZSA9IG5ldyBfZW1iZXJNZXRh
bEVtcHR5X29iamVjdC5kZWZhdWx0KCk7Ci0KLSAgICAgIGRlbGV0ZSB0aGlzLnJlZ2lzdHJhdGlv
bnNbbm9ybWFsaXplZE5hbWVdOwotICAgICAgZGVsZXRlIHRoaXMuX3Jlc29sdmVDYWNoZVtub3Jt
YWxpemVkTmFtZV07Ci0gICAgICBkZWxldGUgdGhpcy5fZmFpbENhY2hlW25vcm1hbGl6ZWROYW1l
XTsKLSAgICAgIGRlbGV0ZSB0aGlzLl9vcHRpb25zW25vcm1hbGl6ZWROYW1lXTsKLSAgICB9LAot
Ci0gICAgLyoqCi0gICAgIEdpdmVuIGEgZnVsbE5hbWUgcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5n
IGZhY3RvcnkuCi0gICAgICBCeSBkZWZhdWx0IGByZXNvbHZlYCB3aWxsIHJldHJpZXZlIHRoZSBm
YWN0b3J5IGZyb20KLSAgICAgdGhlIHJlZ2lzdHJ5LgotICAgICAgYGBgamF2YXNjcmlwdAotICAg
ICB2YXIgcmVnaXN0cnkgPSBuZXcgUmVnaXN0cnkoKTsKLSAgICAgcmVnaXN0cnkucmVnaXN0ZXIo
J2FwaTp0d2l0dGVyJywgVHdpdHRlcik7Ci0gICAgICByZWdpc3RyeS5yZXNvbHZlKCdhcGk6dHdp
dHRlcicpIC8vID0+IFR3aXR0ZXIKLSAgICAgYGBgCi0gICAgICBPcHRpb25hbGx5IHRoZSByZWdp
c3RyeSBjYW4gYmUgcHJvdmlkZWQgd2l0aCBhIGN1c3RvbSByZXNvbHZlci4KLSAgICAgSWYgcHJv
dmlkZWQsIGByZXNvbHZlYCB3aWxsIGZpcnN0IHByb3ZpZGUgdGhlIGN1c3RvbSByZXNvbHZlcgot
ICAgICB0aGUgb3Bwb3J0dW5pdHkgdG8gcmVzb2x2ZSB0aGUgZnVsbE5hbWUsIG90aGVyd2lzZSBp
dCB3aWxsIGZhbGxiYWNrCi0gICAgIHRvIHRoZSByZWdpc3RyeS4KLSAgICAgIGBgYGphdmFzY3Jp
cHQKLSAgICAgdmFyIHJlZ2lzdHJ5ID0gbmV3IFJlZ2lzdHJ5KCk7Ci0gICAgIHJlZ2lzdHJ5LnJl
c29sdmVyID0gZnVuY3Rpb24oZnVsbE5hbWUpIHsKLSAgICAgICAgLy8gbG9va3VwIHZpYSB0aGUg
bW9kdWxlIHN5c3RlbSBvZiBjaG9pY2UKLSAgICAgIH07Ci0gICAgICAvLyB0aGUgdHdpdHRlciBm
YWN0b3J5IGlzIGFkZGVkIHRvIHRoZSBtb2R1bGUgc3lzdGVtCi0gICAgIHJlZ2lzdHJ5LnJlc29s
dmUoJ2FwaTp0d2l0dGVyJykgLy8gPT4gVHdpdHRlcgotICAgICBgYGAKLSAgICAgIEBwcml2YXRl
Ci0gICAgIEBtZXRob2QgcmVzb2x2ZQotICAgICBAcGFyYW0ge1N0cmluZ30gZnVsbE5hbWUKLSAg
ICAgQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXQotICAgICBAcGFyYW0ge1N0cmluZ30gW29wdGlv
bnMuc291cmNlXSB0aGUgZnVsbG5hbWUgb2YgdGhlIHJlcXVlc3Qgc291cmNlICh1c2VkIGZvciBs
b2NhbCBsb29rdXBzKQotICAgICBAcmV0dXJuIHtGdW5jdGlvbn0gZnVsbE5hbWUncyBmYWN0b3J5
Ci0gICAgICovCi0gICAgcmVzb2x2ZTogZnVuY3Rpb24gKGZ1bGxOYW1lLCBvcHRpb25zKSB7Ci0g
ICAgICBfZW1iZXJNZXRhbERlYnVnLmFzc2VydCgnZnVsbE5hbWUgbXVzdCBiZSBhIHByb3BlciBm
dWxsIG5hbWUnLCB0aGlzLnZhbGlkYXRlRnVsbE5hbWUoZnVsbE5hbWUpKTsKLSAgICAgIHZhciBm
YWN0b3J5ID0gcmVzb2x2ZSh0aGlzLCB0aGlzLm5vcm1hbGl6ZShmdWxsTmFtZSksIG9wdGlvbnMp
OwotICAgICAgaWYgKGZhY3RvcnkgPT09IHVuZGVmaW5lZCAmJiB0aGlzLmZhbGxiYWNrKSB7Ci0g
ICAgICAgIHZhciBfZmFsbGJhY2s7Ci0KLSAgICAgICAgZmFjdG9yeSA9IChfZmFsbGJhY2sgPSB0
aGlzLmZhbGxiYWNrKS5yZXNvbHZlLmFwcGx5KF9mYWxsYmFjaywgYXJndW1lbnRzKTsKLSAgICAg
IH0KLSAgICAgIHJldHVybiBmYWN0b3J5OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgQSBob29r
IHRoYXQgY2FuIGJlIHVzZWQgdG8gZGVzY3JpYmUgaG93IHRoZSByZXNvbHZlciB3aWxsCi0gICAg
IGF0dGVtcHQgdG8gZmluZCB0aGUgZmFjdG9yeS4KLSAgICAgIEZvciBleGFtcGxlLCB0aGUgZGVm
YXVsdCBFbWJlciBgLmRlc2NyaWJlYCByZXR1cm5zIHRoZSBmdWxsCi0gICAgIGNsYXNzIG5hbWUg
KGluY2x1ZGluZyBuYW1lc3BhY2UpIHdoZXJlIEVtYmVyJ3MgcmVzb2x2ZXIgZXhwZWN0cwotICAg
ICB0byBmaW5kIHRoZSBgZnVsbE5hbWVgLgotICAgICAgQHByaXZhdGUKLSAgICAgQG1ldGhvZCBk
ZXNjcmliZQotICAgICBAcGFyYW0ge1N0cmluZ30gZnVsbE5hbWUKLSAgICAgQHJldHVybiB7c3Ry
aW5nfSBkZXNjcmliZWQgZnVsbE5hbWUKLSAgICAgKi8KLSAgICBkZXNjcmliZTogZnVuY3Rpb24g
KGZ1bGxOYW1lKSB7Ci0gICAgICBpZiAodGhpcy5yZXNvbHZlciAmJiB0aGlzLnJlc29sdmVyLmxv
b2t1cERlc2NyaXB0aW9uKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLnJlc29sdmVyLmxvb2t1cERl
c2NyaXB0aW9uKGZ1bGxOYW1lKTsKLSAgICAgIH0gZWxzZSBpZiAodGhpcy5mYWxsYmFjaykgewot
ICAgICAgICByZXR1cm4gdGhpcy5mYWxsYmFjay5kZXNjcmliZShmdWxsTmFtZSk7Ci0gICAgICB9
IGVsc2UgewotICAgICAgICByZXR1cm4gZnVsbE5hbWU7Ci0gICAgICB9Ci0gICAgfSwKLQotICAg
IC8qKgotICAgICBBIGhvb2sgdG8gZW5hYmxlIGN1c3RvbSBmdWxsTmFtZSBub3JtYWxpemF0aW9u
IGJlaGF2aW91cgotICAgICAgQHByaXZhdGUKLSAgICAgQG1ldGhvZCBub3JtYWxpemVGdWxsTmFt
ZQotICAgICBAcGFyYW0ge1N0cmluZ30gZnVsbE5hbWUKLSAgICAgQHJldHVybiB7c3RyaW5nfSBu
b3JtYWxpemVkIGZ1bGxOYW1lCi0gICAgICovCi0gICAgbm9ybWFsaXplRnVsbE5hbWU6IGZ1bmN0
aW9uIChmdWxsTmFtZSkgewotICAgICAgaWYgKHRoaXMucmVzb2x2ZXIgJiYgdGhpcy5yZXNvbHZl
ci5ub3JtYWxpemUpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMucmVzb2x2ZXIubm9ybWFsaXplKGZ1
bGxOYW1lKTsKLSAgICAgIH0gZWxzZSBpZiAodGhpcy5mYWxsYmFjaykgewotICAgICAgICByZXR1
cm4gdGhpcy5mYWxsYmFjay5ub3JtYWxpemVGdWxsTmFtZShmdWxsTmFtZSk7Ci0gICAgICB9IGVs
c2UgewotICAgICAgICByZXR1cm4gZnVsbE5hbWU7Ci0gICAgICB9Ci0gICAgfSwKLQotICAgIC8q
KgotICAgICBOb3JtYWxpemUgYSBmdWxsTmFtZSBiYXNlZCBvbiB0aGUgYXBwbGljYXRpb24ncyBj
b252ZW50aW9ucwotICAgICAgQHByaXZhdGUKLSAgICAgQG1ldGhvZCBub3JtYWxpemUKLSAgICAg
QHBhcmFtIHtTdHJpbmd9IGZ1bGxOYW1lCi0gICAgIEByZXR1cm4ge3N0cmluZ30gbm9ybWFsaXpl
ZCBmdWxsTmFtZQotICAgICAqLwotICAgIG5vcm1hbGl6ZTogZnVuY3Rpb24gKGZ1bGxOYW1lKSB7
Ci0gICAgICByZXR1cm4gdGhpcy5fbm9ybWFsaXplQ2FjaGVbZnVsbE5hbWVdIHx8ICh0aGlzLl9u
b3JtYWxpemVDYWNoZVtmdWxsTmFtZV0gPSB0aGlzLm5vcm1hbGl6ZUZ1bGxOYW1lKGZ1bGxOYW1l
KSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICBAbWV0aG9kIG1ha2VUb1N0cmluZwotICAgICAg
QHByaXZhdGUKLSAgICAgQHBhcmFtIHthbnl9IGZhY3RvcnkKLSAgICAgQHBhcmFtIHtzdHJpbmd9
IGZ1bGxOYW1lCi0gICAgIEByZXR1cm4ge2Z1bmN0aW9ufSB0b1N0cmluZyBmdW5jdGlvbgotICAg
ICAqLwotICAgIG1ha2VUb1N0cmluZzogZnVuY3Rpb24gKGZhY3RvcnksIGZ1bGxOYW1lKSB7Ci0g
ICAgICBpZiAodGhpcy5yZXNvbHZlciAmJiB0aGlzLnJlc29sdmVyLm1ha2VUb1N0cmluZykgewot
ICAgICAgICByZXR1cm4gdGhpcy5yZXNvbHZlci5tYWtlVG9TdHJpbmcoZmFjdG9yeSwgZnVsbE5h
bWUpOwotICAgICAgfSBlbHNlIGlmICh0aGlzLmZhbGxiYWNrKSB7Ci0gICAgICAgIHJldHVybiB0
aGlzLmZhbGxiYWNrLm1ha2VUb1N0cmluZyhmYWN0b3J5LCBmdWxsTmFtZSk7Ci0gICAgICB9IGVs
c2UgewotICAgICAgICByZXR1cm4gZmFjdG9yeS50b1N0cmluZygpOwotICAgICAgfQotICAgIH0s
Ci0KLSAgICAvKioKLSAgICAgR2l2ZW4gYSBmdWxsTmFtZSBjaGVjayBpZiB0aGUgY29udGFpbmVy
IGlzIGF3YXJlIG9mIGl0cyBmYWN0b3J5Ci0gICAgIG9yIHNpbmdsZXRvbiBpbnN0YW5jZS4KLSAg
ICAgIEBwcml2YXRlCi0gICAgIEBtZXRob2QgaGFzCi0gICAgIEBwYXJhbSB7U3RyaW5nfSBmdWxs
TmFtZQotICAgICBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdCi0gICAgIEBwYXJhbSB7U3RyaW5n
fSBbb3B0aW9ucy5zb3VyY2VdIHRoZSBmdWxsbmFtZSBvZiB0aGUgcmVxdWVzdCBzb3VyY2UgKHVz
ZWQgZm9yIGxvY2FsIGxvb2t1cHMpCi0gICAgIEByZXR1cm4ge0Jvb2xlYW59Ci0gICAgICovCi0g
ICAgaGFzOiBmdW5jdGlvbiAoZnVsbE5hbWUsIG9wdGlvbnMpIHsKLSAgICAgIGlmICghdGhpcy5p
c1ZhbGlkRnVsbE5hbWUoZnVsbE5hbWUpKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
IH0KLQotICAgICAgdmFyIHNvdXJjZSA9IHVuZGVmaW5lZDsKLQotICAgICAgc291cmNlID0gb3B0
aW9ucyAmJiBvcHRpb25zLnNvdXJjZSAmJiB0aGlzLm5vcm1hbGl6ZShvcHRpb25zLnNvdXJjZSk7
Ci0KLSAgICAgIHJldHVybiBoYXModGhpcywgdGhpcy5ub3JtYWxpemUoZnVsbE5hbWUpLCBzb3Vy
Y2UpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgQWxsb3cgcmVnaXN0ZXJpbmcgb3B0aW9ucyBm
b3IgYWxsIGZhY3RvcmllcyBvZiBhIHR5cGUuCi0gICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgIHZh
ciByZWdpc3RyeSA9IG5ldyBSZWdpc3RyeSgpOwotICAgICB2YXIgY29udGFpbmVyID0gcmVnaXN0
cnkuY29udGFpbmVyKCk7Ci0gICAgICAvLyBpZiBhbGwgb2YgdHlwZSBgY29ubmVjdGlvbmAgbXVz
dCBub3QgYmUgc2luZ2xldG9ucwotICAgICByZWdpc3RyeS5vcHRpb25zRm9yVHlwZSgnY29ubmVj
dGlvbicsIHsgc2luZ2xldG9uOiBmYWxzZSB9KTsKLSAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyKCdj
b25uZWN0aW9uOnR3aXR0ZXInLCBUd2l0dGVyQ29ubmVjdGlvbik7Ci0gICAgIHJlZ2lzdHJ5LnJl
Z2lzdGVyKCdjb25uZWN0aW9uOmZhY2Vib29rJywgRmFjZWJvb2tDb25uZWN0aW9uKTsKLSAgICAg
IHZhciB0d2l0dGVyID0gY29udGFpbmVyLmxvb2t1cCgnY29ubmVjdGlvbjp0d2l0dGVyJyk7Ci0g
ICAgIHZhciB0d2l0dGVyMiA9IGNvbnRhaW5lci5sb29rdXAoJ2Nvbm5lY3Rpb246dHdpdHRlcicp
OwotICAgICAgdHdpdHRlciA9PT0gdHdpdHRlcjI7IC8vID0+IGZhbHNlCi0gICAgICB2YXIgZmFj
ZWJvb2sgPSBjb250YWluZXIubG9va3VwKCdjb25uZWN0aW9uOmZhY2Vib29rJyk7Ci0gICAgIHZh
ciBmYWNlYm9vazIgPSBjb250YWluZXIubG9va3VwKCdjb25uZWN0aW9uOmZhY2Vib29rJyk7Ci0g
ICAgICBmYWNlYm9vayA9PT0gZmFjZWJvb2syOyAvLyA9PiBmYWxzZQotICAgICBgYGAKLSAgICAg
IEBwcml2YXRlCi0gICAgIEBtZXRob2Qgb3B0aW9uc0ZvclR5cGUKLSAgICAgQHBhcmFtIHtTdHJp
bmd9IHR5cGUKLSAgICAgQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMKLSAgICAgKi8KLSAgICBvcHRp
b25zRm9yVHlwZTogZnVuY3Rpb24gKHR5cGUsIG9wdGlvbnMpIHsKLSAgICAgIHRoaXMuX3R5cGVP
cHRpb25zW3R5cGVdID0gb3B0aW9uczsKLSAgICB9LAotCi0gICAgZ2V0T3B0aW9uc0ZvclR5cGU6
IGZ1bmN0aW9uICh0eXBlKSB7Ci0gICAgICB2YXIgb3B0aW9uc0ZvclR5cGUgPSB0aGlzLl90eXBl
T3B0aW9uc1t0eXBlXTsKLSAgICAgIGlmIChvcHRpb25zRm9yVHlwZSA9PT0gdW5kZWZpbmVkICYm
IHRoaXMuZmFsbGJhY2spIHsKLSAgICAgICAgb3B0aW9uc0ZvclR5cGUgPSB0aGlzLmZhbGxiYWNr
LmdldE9wdGlvbnNGb3JUeXBlKHR5cGUpOwotICAgICAgfQotICAgICAgcmV0dXJuIG9wdGlvbnNG
b3JUeXBlOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgQHByaXZhdGUKLSAgICAgQG1ldGhvZCBv
cHRpb25zCi0gICAgIEBwYXJhbSB7U3RyaW5nfSBmdWxsTmFtZQotICAgICBAcGFyYW0ge09iamVj
dH0gb3B0aW9ucwotICAgICAqLwotICAgIG9wdGlvbnM6IGZ1bmN0aW9uIChmdWxsTmFtZSkgewot
ICAgICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoIDw9IDEgfHwgYXJndW1lbnRzWzFd
ID09PSB1bmRlZmluZWQgPyB7fSA6IGFyZ3VtZW50c1sxXTsKLQotICAgICAgdmFyIG5vcm1hbGl6
ZWROYW1lID0gdGhpcy5ub3JtYWxpemUoZnVsbE5hbWUpOwotICAgICAgdGhpcy5fb3B0aW9uc1tu
b3JtYWxpemVkTmFtZV0gPSBvcHRpb25zOwotICAgIH0sCi0KLSAgICBnZXRPcHRpb25zOiBmdW5j
dGlvbiAoZnVsbE5hbWUpIHsKLSAgICAgIHZhciBub3JtYWxpemVkTmFtZSA9IHRoaXMubm9ybWFs
aXplKGZ1bGxOYW1lKTsKLSAgICAgIHZhciBvcHRpb25zID0gdGhpcy5fb3B0aW9uc1tub3JtYWxp
emVkTmFtZV07Ci0gICAgICBpZiAob3B0aW9ucyA9PT0gdW5kZWZpbmVkICYmIHRoaXMuZmFsbGJh
Y2spIHsKLSAgICAgICAgb3B0aW9ucyA9IHRoaXMuZmFsbGJhY2suZ2V0T3B0aW9ucyhmdWxsTmFt
ZSk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gb3B0aW9uczsKLSAgICB9LAotCi0gICAgZ2V0T3B0
aW9uOiBmdW5jdGlvbiAoZnVsbE5hbWUsIG9wdGlvbk5hbWUpIHsKLSAgICAgIHZhciBvcHRpb25z
ID0gdGhpcy5fb3B0aW9uc1tmdWxsTmFtZV07Ci0KLSAgICAgIGlmIChvcHRpb25zICYmIG9wdGlv
bnNbb3B0aW9uTmFtZV0gIT09IHVuZGVmaW5lZCkgewotICAgICAgICByZXR1cm4gb3B0aW9uc1tv
cHRpb25OYW1lXTsKLSAgICAgIH0KLQotICAgICAgdmFyIHR5cGUgPSBmdWxsTmFtZS5zcGxpdCgn
OicpWzBdOwotICAgICAgb3B0aW9ucyA9IHRoaXMuX3R5cGVPcHRpb25zW3R5cGVdOwotCi0gICAg
ICBpZiAob3B0aW9ucyAmJiBvcHRpb25zW29wdGlvbk5hbWVdICE9PSB1bmRlZmluZWQpIHsKLSAg
ICAgICAgcmV0dXJuIG9wdGlvbnNbb3B0aW9uTmFtZV07Ci0gICAgICB9IGVsc2UgaWYgKHRoaXMu
ZmFsbGJhY2spIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuZmFsbGJhY2suZ2V0T3B0aW9uKGZ1bGxO
YW1lLCBvcHRpb25OYW1lKTsKLSAgICAgIH0KLSAgICB9LAotCi0gICAgLyoqCi0gICAgIFVzZWQg
b25seSB2aWEgYGluamVjdGlvbmAuCi0gICAgICBQcm92aWRlcyBhIHNwZWNpYWxpemVkIGZvcm0g
b2YgaW5qZWN0aW9uLCBzcGVjaWZpY2FsbHkgZW5hYmxpbmcKLSAgICAgYWxsIG9iamVjdHMgb2Yg
b25lIHR5cGUgdG8gYmUgaW5qZWN0ZWQgd2l0aCBhIHJlZmVyZW5jZSB0byBhbm90aGVyCi0gICAg
IG9iamVjdC4KLSAgICAgIEZvciBleGFtcGxlLCBwcm92aWRlZCBlYWNoIG9iamVjdCBvZiB0eXBl
IGBjb250cm9sbGVyYCBuZWVkZWQgYSBgcm91dGVyYC4KLSAgICAgb25lIHdvdWxkIGRvIHRoZSBm
b2xsb3dpbmc6Ci0gICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgIHZhciByZWdpc3RyeSA9IG5ldyBS
ZWdpc3RyeSgpOwotICAgICB2YXIgY29udGFpbmVyID0gcmVnaXN0cnkuY29udGFpbmVyKCk7Ci0g
ICAgICByZWdpc3RyeS5yZWdpc3Rlcigncm91dGVyOm1haW4nLCBSb3V0ZXIpOwotICAgICByZWdp
c3RyeS5yZWdpc3RlcignY29udHJvbGxlcjp1c2VyJywgVXNlckNvbnRyb2xsZXIpOwotICAgICBy
ZWdpc3RyeS5yZWdpc3RlcignY29udHJvbGxlcjpwb3N0JywgUG9zdENvbnRyb2xsZXIpOwotICAg
ICAgcmVnaXN0cnkudHlwZUluamVjdGlvbignY29udHJvbGxlcicsICdyb3V0ZXInLCAncm91dGVy
Om1haW4nKTsKLSAgICAgIHZhciB1c2VyID0gY29udGFpbmVyLmxvb2t1cCgnY29udHJvbGxlcjp1
c2VyJyk7Ci0gICAgIHZhciBwb3N0ID0gY29udGFpbmVyLmxvb2t1cCgnY29udHJvbGxlcjpwb3N0
Jyk7Ci0gICAgICB1c2VyLnJvdXRlciBpbnN0YW5jZW9mIFJvdXRlcjsgLy89PiB0cnVlCi0gICAg
IHBvc3Qucm91dGVyIGluc3RhbmNlb2YgUm91dGVyOyAvLz0+IHRydWUKLSAgICAgIC8vIGJvdGgg
Y29udHJvbGxlcnMgc2hhcmUgdGhlIHNhbWUgcm91dGVyCi0gICAgIHVzZXIucm91dGVyID09PSBw
b3N0LnJvdXRlcjsgLy89PiB0cnVlCi0gICAgIGBgYAotICAgICAgQHByaXZhdGUKLSAgICAgQG1l
dGhvZCB0eXBlSW5qZWN0aW9uCi0gICAgIEBwYXJhbSB7U3RyaW5nfSB0eXBlCi0gICAgIEBwYXJh
bSB7U3RyaW5nfSBwcm9wZXJ0eQotICAgICBAcGFyYW0ge1N0cmluZ30gZnVsbE5hbWUKLSAgICAg
Ki8KLSAgICB0eXBlSW5qZWN0aW9uOiBmdW5jdGlvbiAodHlwZSwgcHJvcGVydHksIGZ1bGxOYW1l
KSB7Ci0gICAgICBfZW1iZXJNZXRhbERlYnVnLmFzc2VydCgnZnVsbE5hbWUgbXVzdCBiZSBhIHBy
b3BlciBmdWxsIG5hbWUnLCB0aGlzLnZhbGlkYXRlRnVsbE5hbWUoZnVsbE5hbWUpKTsKLQotICAg
ICAgdmFyIGZ1bGxOYW1lVHlwZSA9IGZ1bGxOYW1lLnNwbGl0KCc6JylbMF07Ci0gICAgICBpZiAo
ZnVsbE5hbWVUeXBlID09PSB0eXBlKSB7Ci0gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90
IGluamVjdCBhIGAnICsgZnVsbE5hbWUgKyAnYCBvbiBvdGhlciAnICsgdHlwZSArICcocykuJyk7
Ci0gICAgICB9Ci0KLSAgICAgIHZhciBpbmplY3Rpb25zID0gdGhpcy5fdHlwZUluamVjdGlvbnNb
dHlwZV0gfHwgKHRoaXMuX3R5cGVJbmplY3Rpb25zW3R5cGVdID0gW10pOwotCi0gICAgICBpbmpl
Y3Rpb25zLnB1c2goewotICAgICAgICBwcm9wZXJ0eTogcHJvcGVydHksCi0gICAgICAgIGZ1bGxO
YW1lOiBmdWxsTmFtZQotICAgICAgfSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICBEZWZpbmVz
IGluamVjdGlvbiBydWxlcy4KLSAgICAgIFRoZXNlIHJ1bGVzIGFyZSB1c2VkIHRvIGluamVjdCBk
ZXBlbmRlbmNpZXMgb250byBvYmplY3RzIHdoZW4gdGhleQotICAgICBhcmUgaW5zdGFudGlhdGVk
LgotICAgICAgVHdvIGZvcm1zIG9mIGluamVjdGlvbnMgYXJlIHBvc3NpYmxlOgotICAgICAgKiBJ
bmplY3Rpbmcgb25lIGZ1bGxOYW1lIG9uIGFub3RoZXIgZnVsbE5hbWUKLSAgICAgKiBJbmplY3Rp
bmcgb25lIGZ1bGxOYW1lIG9uIGEgdHlwZQotICAgICAgRXhhbXBsZToKLSAgICAgIGBgYGphdmFz
Y3JpcHQKLSAgICAgdmFyIHJlZ2lzdHJ5ID0gbmV3IFJlZ2lzdHJ5KCk7Ci0gICAgIHZhciBjb250
YWluZXIgPSByZWdpc3RyeS5jb250YWluZXIoKTsKLSAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyKCdz
b3VyY2U6bWFpbicsIFNvdXJjZSk7Ci0gICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyKCdtb2RlbDp1c2Vy
JywgVXNlcik7Ci0gICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyKCdtb2RlbDpwb3N0JywgUG9zdCk7Ci0g
ICAgICAvLyBpbmplY3Rpbmcgb25lIGZ1bGxOYW1lIG9uIGFub3RoZXIgZnVsbE5hbWUKLSAgICAg
Ly8gZWcuIGVhY2ggdXNlciBtb2RlbCBnZXRzIGEgcG9zdCBtb2RlbAotICAgICByZWdpc3RyeS5p
bmplY3Rpb24oJ21vZGVsOnVzZXInLCAncG9zdCcsICdtb2RlbDpwb3N0Jyk7Ci0gICAgICAvLyBp
bmplY3Rpbmcgb25lIGZ1bGxOYW1lIG9uIGFub3RoZXIgdHlwZQotICAgICByZWdpc3RyeS5pbmpl
Y3Rpb24oJ21vZGVsJywgJ3NvdXJjZScsICdzb3VyY2U6bWFpbicpOwotICAgICAgdmFyIHVzZXIg
PSBjb250YWluZXIubG9va3VwKCdtb2RlbDp1c2VyJyk7Ci0gICAgIHZhciBwb3N0ID0gY29udGFp
bmVyLmxvb2t1cCgnbW9kZWw6cG9zdCcpOwotICAgICAgdXNlci5zb3VyY2UgaW5zdGFuY2VvZiBT
b3VyY2U7IC8vPT4gdHJ1ZQotICAgICBwb3N0LnNvdXJjZSBpbnN0YW5jZW9mIFNvdXJjZTsgLy89
PiB0cnVlCi0gICAgICB1c2VyLnBvc3QgaW5zdGFuY2VvZiBQb3N0OyAvLz0+IHRydWUKLSAgICAg
IC8vIGFuZCBib3RoIG1vZGVscyBzaGFyZSB0aGUgc2FtZSBzb3VyY2UKLSAgICAgdXNlci5zb3Vy
Y2UgPT09IHBvc3Quc291cmNlOyAvLz0+IHRydWUKLSAgICAgYGBgCi0gICAgICBAcHJpdmF0ZQot
ICAgICBAbWV0aG9kIGluamVjdGlvbgotICAgICBAcGFyYW0ge1N0cmluZ30gZmFjdG9yeU5hbWUK
LSAgICAgQHBhcmFtIHtTdHJpbmd9IHByb3BlcnR5Ci0gICAgIEBwYXJhbSB7U3RyaW5nfSBpbmpl
Y3Rpb25OYW1lCi0gICAgICovCi0gICAgaW5qZWN0aW9uOiBmdW5jdGlvbiAoZnVsbE5hbWUsIHBy
b3BlcnR5LCBpbmplY3Rpb25OYW1lKSB7Ci0gICAgICB0aGlzLnZhbGlkYXRlRnVsbE5hbWUoaW5q
ZWN0aW9uTmFtZSk7Ci0gICAgICB2YXIgbm9ybWFsaXplZEluamVjdGlvbk5hbWUgPSB0aGlzLm5v
cm1hbGl6ZShpbmplY3Rpb25OYW1lKTsKLQotICAgICAgaWYgKGZ1bGxOYW1lLmluZGV4T2YoJzon
KSA9PT0gLTEpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMudHlwZUluamVjdGlvbihmdWxsTmFtZSwg
cHJvcGVydHksIG5vcm1hbGl6ZWRJbmplY3Rpb25OYW1lKTsKLSAgICAgIH0KLQotICAgICAgX2Vt
YmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ2Z1bGxOYW1lIG11c3QgYmUgYSBwcm9wZXIgZnVsbCBuYW1l
JywgdGhpcy52YWxpZGF0ZUZ1bGxOYW1lKGZ1bGxOYW1lKSk7Ci0gICAgICB2YXIgbm9ybWFsaXpl
ZE5hbWUgPSB0aGlzLm5vcm1hbGl6ZShmdWxsTmFtZSk7Ci0KLSAgICAgIHZhciBpbmplY3Rpb25z
ID0gdGhpcy5faW5qZWN0aW9uc1tub3JtYWxpemVkTmFtZV0gfHwgKHRoaXMuX2luamVjdGlvbnNb
bm9ybWFsaXplZE5hbWVdID0gW10pOwotCi0gICAgICBpbmplY3Rpb25zLnB1c2goewotICAgICAg
ICBwcm9wZXJ0eTogcHJvcGVydHksCi0gICAgICAgIGZ1bGxOYW1lOiBub3JtYWxpemVkSW5qZWN0
aW9uTmFtZQotICAgICAgfSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICBVc2VkIG9ubHkgdmlh
IGBmYWN0b3J5SW5qZWN0aW9uYC4KLSAgICAgIFByb3ZpZGVzIGEgc3BlY2lhbGl6ZWQgZm9ybSBv
ZiBpbmplY3Rpb24sIHNwZWNpZmljYWxseSBlbmFibGluZwotICAgICBhbGwgZmFjdG9yeSBvZiBv
bmUgdHlwZSB0byBiZSBpbmplY3RlZCB3aXRoIGEgcmVmZXJlbmNlIHRvIGFub3RoZXIKLSAgICAg
b2JqZWN0LgotICAgICAgRm9yIGV4YW1wbGUsIHByb3ZpZGVkIGVhY2ggZmFjdG9yeSBvZiB0eXBl
IGBtb2RlbGAgbmVlZGVkIGEgYHN0b3JlYC4KLSAgICAgb25lIHdvdWxkIGRvIHRoZSBmb2xsb3dp
bmc6Ci0gICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgIHZhciByZWdpc3RyeSA9IG5ldyBSZWdpc3Ry
eSgpOwotICAgICAgcmVnaXN0cnkucmVnaXN0ZXIoJ3N0b3JlOm1haW4nLCBTb21lU3RvcmUpOwot
ICAgICAgcmVnaXN0cnkuZmFjdG9yeVR5cGVJbmplY3Rpb24oJ21vZGVsJywgJ3N0b3JlJywgJ3N0
b3JlOm1haW4nKTsKLSAgICAgIHZhciBzdG9yZSA9IHJlZ2lzdHJ5Lmxvb2t1cCgnc3RvcmU6bWFp
bicpOwotICAgICB2YXIgVXNlckZhY3RvcnkgPSByZWdpc3RyeS5sb29rdXBGYWN0b3J5KCdtb2Rl
bDp1c2VyJyk7Ci0gICAgICBVc2VyRmFjdG9yeS5zdG9yZSBpbnN0YW5jZW9mIFNvbWVTdG9yZTsg
Ly89PiB0cnVlCi0gICAgIGBgYAotICAgICAgQHByaXZhdGUKLSAgICAgQG1ldGhvZCBmYWN0b3J5
VHlwZUluamVjdGlvbgotICAgICBAcGFyYW0ge1N0cmluZ30gdHlwZQotICAgICBAcGFyYW0ge1N0
cmluZ30gcHJvcGVydHkKLSAgICAgQHBhcmFtIHtTdHJpbmd9IGZ1bGxOYW1lCi0gICAgICovCi0g
ICAgZmFjdG9yeVR5cGVJbmplY3Rpb246IGZ1bmN0aW9uICh0eXBlLCBwcm9wZXJ0eSwgZnVsbE5h
bWUpIHsKLSAgICAgIHZhciBpbmplY3Rpb25zID0gdGhpcy5fZmFjdG9yeVR5cGVJbmplY3Rpb25z
W3R5cGVdIHx8ICh0aGlzLl9mYWN0b3J5VHlwZUluamVjdGlvbnNbdHlwZV0gPSBbXSk7Ci0KLSAg
ICAgIGluamVjdGlvbnMucHVzaCh7Ci0gICAgICAgIHByb3BlcnR5OiBwcm9wZXJ0eSwKLSAgICAg
ICAgZnVsbE5hbWU6IHRoaXMubm9ybWFsaXplKGZ1bGxOYW1lKQotICAgICAgfSk7Ci0gICAgfSwK
LQotICAgIC8qKgotICAgICBEZWZpbmVzIGZhY3RvcnkgaW5qZWN0aW9uIHJ1bGVzLgotICAgICAg
U2ltaWxhciB0byByZWd1bGFyIGluamVjdGlvbiBydWxlcywgYnV0IGFyZSBydW4gYWdhaW5zdCBm
YWN0b3JpZXMsIHZpYQotICAgICBgUmVnaXN0cnkjbG9va3VwRmFjdG9yeWAuCi0gICAgICBUaGVz
ZSBydWxlcyBhcmUgdXNlZCB0byBpbmplY3Qgb2JqZWN0cyBvbnRvIGZhY3RvcmllcyB3aGVuIHRo
ZXkKLSAgICAgYXJlIGxvb2tlZCB1cC4KLSAgICAgIFR3byBmb3JtcyBvZiBpbmplY3Rpb25zIGFy
ZSBwb3NzaWJsZToKLSAgICAgICogSW5qZWN0aW5nIG9uZSBmdWxsTmFtZSBvbiBhbm90aGVyIGZ1
bGxOYW1lCi0gICAgICogSW5qZWN0aW5nIG9uZSBmdWxsTmFtZSBvbiBhIHR5cGUKLSAgICAgIEV4
YW1wbGU6Ci0gICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgIHZhciByZWdpc3RyeSA9IG5ldyBSZWdp
c3RyeSgpOwotICAgICB2YXIgY29udGFpbmVyID0gcmVnaXN0cnkuY29udGFpbmVyKCk7Ci0gICAg
ICByZWdpc3RyeS5yZWdpc3Rlcignc3RvcmU6bWFpbicsIFN0b3JlKTsKLSAgICAgcmVnaXN0cnku
cmVnaXN0ZXIoJ3N0b3JlOnNlY29uZGFyeScsIE90aGVyU3RvcmUpOwotICAgICByZWdpc3RyeS5y
ZWdpc3RlcignbW9kZWw6dXNlcicsIFVzZXIpOwotICAgICByZWdpc3RyeS5yZWdpc3RlcignbW9k
ZWw6cG9zdCcsIFBvc3QpOwotICAgICAgLy8gaW5qZWN0aW5nIG9uZSBmdWxsTmFtZSBvbiBhbm90
aGVyIHR5cGUKLSAgICAgcmVnaXN0cnkuZmFjdG9yeUluamVjdGlvbignbW9kZWwnLCAnc3RvcmUn
LCAnc3RvcmU6bWFpbicpOwotICAgICAgLy8gaW5qZWN0aW5nIG9uZSBmdWxsTmFtZSBvbiBhbm90
aGVyIGZ1bGxOYW1lCi0gICAgIHJlZ2lzdHJ5LmZhY3RvcnlJbmplY3Rpb24oJ21vZGVsOnBvc3Qn
LCAnc2Vjb25kYXJ5U3RvcmUnLCAnc3RvcmU6c2Vjb25kYXJ5Jyk7Ci0gICAgICB2YXIgVXNlckZh
Y3RvcnkgPSBjb250YWluZXIubG9va3VwRmFjdG9yeSgnbW9kZWw6dXNlcicpOwotICAgICB2YXIg
UG9zdEZhY3RvcnkgPSBjb250YWluZXIubG9va3VwRmFjdG9yeSgnbW9kZWw6cG9zdCcpOwotICAg
ICB2YXIgc3RvcmUgPSBjb250YWluZXIubG9va3VwKCdzdG9yZTptYWluJyk7Ci0gICAgICBVc2Vy
RmFjdG9yeS5zdG9yZSBpbnN0YW5jZW9mIFN0b3JlOyAvLz0+IHRydWUKLSAgICAgVXNlckZhY3Rv
cnkuc2Vjb25kYXJ5U3RvcmUgaW5zdGFuY2VvZiBPdGhlclN0b3JlOyAvLz0+IGZhbHNlCi0gICAg
ICBQb3N0RmFjdG9yeS5zdG9yZSBpbnN0YW5jZW9mIFN0b3JlOyAvLz0+IHRydWUKLSAgICAgUG9z
dEZhY3Rvcnkuc2Vjb25kYXJ5U3RvcmUgaW5zdGFuY2VvZiBPdGhlclN0b3JlOyAvLz0+IHRydWUK
LSAgICAgIC8vIGFuZCBib3RoIG1vZGVscyBzaGFyZSB0aGUgc2FtZSBzb3VyY2UgaW5zdGFuY2UK
LSAgICAgVXNlckZhY3Rvcnkuc3RvcmUgPT09IFBvc3RGYWN0b3J5LnN0b3JlOyAvLz0+IHRydWUK
LSAgICAgYGBgCi0gICAgICBAcHJpdmF0ZQotICAgICBAbWV0aG9kIGZhY3RvcnlJbmplY3Rpb24K
LSAgICAgQHBhcmFtIHtTdHJpbmd9IGZhY3RvcnlOYW1lCi0gICAgIEBwYXJhbSB7U3RyaW5nfSBw
cm9wZXJ0eQotICAgICBAcGFyYW0ge1N0cmluZ30gaW5qZWN0aW9uTmFtZQotICAgICAqLwotICAg
IGZhY3RvcnlJbmplY3Rpb246IGZ1bmN0aW9uIChmdWxsTmFtZSwgcHJvcGVydHksIGluamVjdGlv
bk5hbWUpIHsKLSAgICAgIHZhciBub3JtYWxpemVkTmFtZSA9IHRoaXMubm9ybWFsaXplKGZ1bGxO
YW1lKTsKLSAgICAgIHZhciBub3JtYWxpemVkSW5qZWN0aW9uTmFtZSA9IHRoaXMubm9ybWFsaXpl
KGluamVjdGlvbk5hbWUpOwotCi0gICAgICB0aGlzLnZhbGlkYXRlRnVsbE5hbWUoaW5qZWN0aW9u
TmFtZSk7Ci0KLSAgICAgIGlmIChmdWxsTmFtZS5pbmRleE9mKCc6JykgPT09IC0xKSB7Ci0gICAg
ICAgIHJldHVybiB0aGlzLmZhY3RvcnlUeXBlSW5qZWN0aW9uKG5vcm1hbGl6ZWROYW1lLCBwcm9w
ZXJ0eSwgbm9ybWFsaXplZEluamVjdGlvbk5hbWUpOwotICAgICAgfQotCi0gICAgICB2YXIgaW5q
ZWN0aW9ucyA9IHRoaXMuX2ZhY3RvcnlJbmplY3Rpb25zW25vcm1hbGl6ZWROYW1lXSB8fCAodGhp
cy5fZmFjdG9yeUluamVjdGlvbnNbbm9ybWFsaXplZE5hbWVdID0gW10pOwotCi0gICAgICBpbmpl
Y3Rpb25zLnB1c2goewotICAgICAgICBwcm9wZXJ0eTogcHJvcGVydHksCi0gICAgICAgIGZ1bGxO
YW1lOiBub3JtYWxpemVkSW5qZWN0aW9uTmFtZQotICAgICAgfSk7Ci0gICAgfSwKLQotICAgIC8q
KgotICAgICBAcHJpdmF0ZQotICAgICBAbWV0aG9kIGtub3duRm9yVHlwZQotICAgICBAcGFyYW0g
e1N0cmluZ30gdHlwZSB0aGUgdHlwZSB0byBpdGVyYXRlIG92ZXIKLSAgICAqLwotICAgIGtub3du
Rm9yVHlwZTogZnVuY3Rpb24gKHR5cGUpIHsKLSAgICAgIHZhciBmYWxsYmFja0tub3duID0gdW5k
ZWZpbmVkLAotICAgICAgICAgIHJlc29sdmVyS25vd24gPSB1bmRlZmluZWQ7Ci0KLSAgICAgIHZh
ciBsb2NhbEtub3duID0gX2VtYmVyTWV0YWxEaWN0aW9uYXJ5LmRlZmF1bHQobnVsbCk7Ci0gICAg
ICB2YXIgcmVnaXN0ZXJlZE5hbWVzID0gT2JqZWN0LmtleXModGhpcy5yZWdpc3RyYXRpb25zKTsK
LSAgICAgIGZvciAodmFyIGluZGV4ID0gMCwgX2xlbmd0aCA9IHJlZ2lzdGVyZWROYW1lcy5sZW5n
dGg7IGluZGV4IDwgX2xlbmd0aDsgaW5kZXgrKykgewotICAgICAgICB2YXIgZnVsbE5hbWUgPSBy
ZWdpc3RlcmVkTmFtZXNbaW5kZXhdOwotICAgICAgICB2YXIgaXRlbVR5cGUgPSBmdWxsTmFtZS5z
cGxpdCgnOicpWzBdOwotCi0gICAgICAgIGlmIChpdGVtVHlwZSA9PT0gdHlwZSkgewotICAgICAg
ICAgIGxvY2FsS25vd25bZnVsbE5hbWVdID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgfQotCi0g
ICAgICBpZiAodGhpcy5mYWxsYmFjaykgewotICAgICAgICBmYWxsYmFja0tub3duID0gdGhpcy5m
YWxsYmFjay5rbm93bkZvclR5cGUodHlwZSk7Ci0gICAgICB9Ci0KLSAgICAgIGlmICh0aGlzLnJl
c29sdmVyICYmIHRoaXMucmVzb2x2ZXIua25vd25Gb3JUeXBlKSB7Ci0gICAgICAgIHJlc29sdmVy
S25vd24gPSB0aGlzLnJlc29sdmVyLmtub3duRm9yVHlwZSh0eXBlKTsKLSAgICAgIH0KLQotICAg
ICAgcmV0dXJuIF9lbWJlck1ldGFsQXNzaWduLmRlZmF1bHQoe30sIGZhbGxiYWNrS25vd24sIGxv
Y2FsS25vd24sIHJlc29sdmVyS25vd24pOwotICAgIH0sCi0KLSAgICB2YWxpZGF0ZUZ1bGxOYW1l
OiBmdW5jdGlvbiAoZnVsbE5hbWUpIHsKLSAgICAgIGlmICghdGhpcy5pc1ZhbGlkRnVsbE5hbWUo
ZnVsbE5hbWUpKSB7Ci0gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgRnVsbG5h
bWUsIGV4cGVjdGVkOiBgdHlwZTpuYW1lYCBnb3Q6ICcgKyBmdWxsTmFtZSk7Ci0gICAgICB9Ci0K
LSAgICAgIHJldHVybiB0cnVlOwotICAgIH0sCi0KLSAgICBpc1ZhbGlkRnVsbE5hbWU6IGZ1bmN0
aW9uIChmdWxsTmFtZSkgewotICAgICAgcmV0dXJuICEhVkFMSURfRlVMTF9OQU1FX1JFR0VYUC50
ZXN0KGZ1bGxOYW1lKTsKLSAgICB9LAotCi0gICAgdmFsaWRhdGVJbmplY3Rpb25zOiBmdW5jdGlv
biAoaW5qZWN0aW9ucykgewotICAgICAgaWYgKCFpbmplY3Rpb25zKSB7Ci0gICAgICAgIHJldHVy
bjsKLSAgICAgIH0KLQotICAgICAgdmFyIGZ1bGxOYW1lOwotCi0gICAgICBmb3IgKHZhciBpID0g
MCwgbGVuZ3RoID0gaW5qZWN0aW9ucy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAg
ICBmdWxsTmFtZSA9IGluamVjdGlvbnNbaV0uZnVsbE5hbWU7Ci0KLSAgICAgICAgaWYgKCF0aGlz
LmhhcyhmdWxsTmFtZSkpIHsKLSAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0F0dGVtcHRpbmcg
dG8gaW5qZWN0IGFuIHVua25vd24gaW5qZWN0aW9uOiBgJyArIGZ1bGxOYW1lICsgJ2AnKTsKLSAg
ICAgICAgfQotICAgICAgfQotICAgIH0sCi0KLSAgICBub3JtYWxpemVJbmplY3Rpb25zSGFzaDog
ZnVuY3Rpb24gKGhhc2gpIHsKLSAgICAgIHZhciBpbmplY3Rpb25zID0gW107Ci0KLSAgICAgIGZv
ciAodmFyIGtleSBpbiBoYXNoKSB7Ci0gICAgICAgIGlmIChoYXNoLmhhc093blByb3BlcnR5KGtl
eSkpIHsKLSAgICAgICAgICBfZW1iZXJNZXRhbERlYnVnLmFzc2VydCgnRXhwZWN0ZWQgYSBwcm9w
ZXIgZnVsbCBuYW1lLCBnaXZlbiBcJycgKyBoYXNoW2tleV0gKyAnXCcnLCB0aGlzLnZhbGlkYXRl
RnVsbE5hbWUoaGFzaFtrZXldKSk7Ci0KLSAgICAgICAgICBpbmplY3Rpb25zLnB1c2goewotICAg
ICAgICAgICAgcHJvcGVydHk6IGtleSwKLSAgICAgICAgICAgIGZ1bGxOYW1lOiBoYXNoW2tleV0K
LSAgICAgICAgICB9KTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICByZXR1cm4gaW5qZWN0
aW9uczsKLSAgICB9LAotCi0gICAgZ2V0SW5qZWN0aW9uczogZnVuY3Rpb24gKGZ1bGxOYW1lKSB7
Ci0gICAgICB2YXIgaW5qZWN0aW9ucyA9IHRoaXMuX2luamVjdGlvbnNbZnVsbE5hbWVdIHx8IFtd
OwotICAgICAgaWYgKHRoaXMuZmFsbGJhY2spIHsKLSAgICAgICAgaW5qZWN0aW9ucyA9IGluamVj
dGlvbnMuY29uY2F0KHRoaXMuZmFsbGJhY2suZ2V0SW5qZWN0aW9ucyhmdWxsTmFtZSkpOwotICAg
ICAgfQotICAgICAgcmV0dXJuIGluamVjdGlvbnM7Ci0gICAgfSwKLQotICAgIGdldFR5cGVJbmpl
Y3Rpb25zOiBmdW5jdGlvbiAodHlwZSkgewotICAgICAgdmFyIGluamVjdGlvbnMgPSB0aGlzLl90
eXBlSW5qZWN0aW9uc1t0eXBlXSB8fCBbXTsKLSAgICAgIGlmICh0aGlzLmZhbGxiYWNrKSB7Ci0g
ICAgICAgIGluamVjdGlvbnMgPSBpbmplY3Rpb25zLmNvbmNhdCh0aGlzLmZhbGxiYWNrLmdldFR5
cGVJbmplY3Rpb25zKHR5cGUpKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBpbmplY3Rpb25zOwot
ICAgIH0sCi0KLSAgICBnZXRGYWN0b3J5SW5qZWN0aW9uczogZnVuY3Rpb24gKGZ1bGxOYW1lKSB7
Ci0gICAgICB2YXIgaW5qZWN0aW9ucyA9IHRoaXMuX2ZhY3RvcnlJbmplY3Rpb25zW2Z1bGxOYW1l
XSB8fCBbXTsKLSAgICAgIGlmICh0aGlzLmZhbGxiYWNrKSB7Ci0gICAgICAgIGluamVjdGlvbnMg
PSBpbmplY3Rpb25zLmNvbmNhdCh0aGlzLmZhbGxiYWNrLmdldEZhY3RvcnlJbmplY3Rpb25zKGZ1
bGxOYW1lKSk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gaW5qZWN0aW9uczsKLSAgICB9LAotCi0g
ICAgZ2V0RmFjdG9yeVR5cGVJbmplY3Rpb25zOiBmdW5jdGlvbiAodHlwZSkgewotICAgICAgdmFy
IGluamVjdGlvbnMgPSB0aGlzLl9mYWN0b3J5VHlwZUluamVjdGlvbnNbdHlwZV0gfHwgW107Ci0g
ICAgICBpZiAodGhpcy5mYWxsYmFjaykgewotICAgICAgICBpbmplY3Rpb25zID0gaW5qZWN0aW9u
cy5jb25jYXQodGhpcy5mYWxsYmFjay5nZXRGYWN0b3J5VHlwZUluamVjdGlvbnModHlwZSkpOwot
ICAgICAgfQotICAgICAgcmV0dXJuIGluamVjdGlvbnM7Ci0gICAgfQotICB9OwotCi0gIGZ1bmN0
aW9uIGRlcHJlY2F0ZVJlc29sdmVyRnVuY3Rpb24ocmVnaXN0cnkpIHsKLSAgICBfZW1iZXJNZXRh
bERlYnVnLmRlcHJlY2F0ZSgnUGFzc2luZyBhIGByZXNvbHZlcmAgZnVuY3Rpb24gaW50byBhIFJl
Z2lzdHJ5IGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSBwYXNzIGluIGEgUmVzb2x2ZXIgb2JqZWN0IHdp
dGggYSBgcmVzb2x2ZWAgbWV0aG9kLicsIGZhbHNlLCB7IGlkOiAnZW1iZXItYXBwbGljYXRpb24u
cmVnaXN0cnktcmVzb2x2ZXItYXMtZnVuY3Rpb24nLCB1bnRpbDogJzMuMC4wJywgdXJsOiAnaHR0
cDovL2VtYmVyanMuY29tL2RlcHJlY2F0aW9ucy92Mi54I3RvY19yZWdpc3RyeS1yZXNvbHZlci1h
cy1mdW5jdGlvbicgfSk7Ci0gICAgcmVnaXN0cnkucmVzb2x2ZXIgPSB7Ci0gICAgICByZXNvbHZl
OiByZWdpc3RyeS5yZXNvbHZlcgotICAgIH07Ci0gIH0KLQotICAvKioKLSAgICBHaXZlbiBhIGZ1
bGxOYW1lIGFuZCBhIHNvdXJjZSBmdWxsTmFtZSByZXR1cm5zIHRoZSBmdWxseSByZXNvbHZlZAot
ICAgIGZ1bGxOYW1lLiBVc2VkIHRvIGFsbG93IGZvciBsb2NhbCBsb29rdXAuCi0gICAgIGBgYGph
dmFzY3JpcHQKLSAgICB2YXIgcmVnaXN0cnkgPSBuZXcgUmVnaXN0cnkoKTsKLSAgICAgLy8gdGhl
IHR3aXR0ZXIgZmFjdG9yeSBpcyBhZGRlZCB0byB0aGUgbW9kdWxlIHN5c3RlbQotICAgIHJlZ2lz
dHJ5LmV4cGFuZExvY2FsTG9va3VwKCdjb21wb25lbnQ6cG9zdC10aXRsZScsIHsgc291cmNlOiAn
dGVtcGxhdGU6cG9zdCcgfSkgLy8gPT4gY29tcG9uZW50OnBvc3QvcG9zdC10aXRsZQotICAgIGBg
YAotICAgICBAcHJpdmF0ZQotICAgIEBtZXRob2QgZXhwYW5kTG9jYWxMb29rdXAKLSAgICBAcGFy
YW0ge1N0cmluZ30gZnVsbE5hbWUKLSAgICBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdCi0gICAg
QHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLnNvdXJjZV0gdGhlIGZ1bGxuYW1lIG9mIHRoZSByZXF1
ZXN0IHNvdXJjZSAodXNlZCBmb3IgbG9jYWwgbG9va3VwcykKLSAgICBAcmV0dXJuIHtTdHJpbmd9
IGZ1bGxOYW1lCi0gICovCi0gIFJlZ2lzdHJ5LnByb3RvdHlwZS5leHBhbmRMb2NhbExvb2t1cCA9
IGZ1bmN0aW9uIFJlZ2lzdHJ5X2V4cGFuZExvY2FsTG9va3VwKGZ1bGxOYW1lLCBvcHRpb25zKSB7
Ci0gICAgaWYgKHRoaXMucmVzb2x2ZXIgJiYgdGhpcy5yZXNvbHZlci5leHBhbmRMb2NhbExvb2t1
cCkgewotICAgICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ2Z1bGxOYW1lIG11c3QgYmUgYSBw
cm9wZXIgZnVsbCBuYW1lJywgdGhpcy52YWxpZGF0ZUZ1bGxOYW1lKGZ1bGxOYW1lKSk7Ci0gICAg
ICBfZW1iZXJNZXRhbERlYnVnLmFzc2VydCgnb3B0aW9ucy5zb3VyY2UgbXVzdCBiZSBwcm92aWRl
ZCB0byBleHBhbmRMb2NhbExvb2t1cCcsIG9wdGlvbnMgJiYgb3B0aW9ucy5zb3VyY2UpOwotICAg
ICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ29wdGlvbnMuc291cmNlIG11c3QgYmUgYSBwcm9w
ZXIgZnVsbCBuYW1lJywgdGhpcy52YWxpZGF0ZUZ1bGxOYW1lKG9wdGlvbnMuc291cmNlKSk7Ci0K
LSAgICAgIHZhciBub3JtYWxpemVkRnVsbE5hbWUgPSB0aGlzLm5vcm1hbGl6ZShmdWxsTmFtZSk7
Ci0gICAgICB2YXIgbm9ybWFsaXplZFNvdXJjZSA9IHRoaXMubm9ybWFsaXplKG9wdGlvbnMuc291
cmNlKTsKLQotICAgICAgcmV0dXJuIGV4cGFuZExvY2FsTG9va3VwKHRoaXMsIG5vcm1hbGl6ZWRG
dWxsTmFtZSwgbm9ybWFsaXplZFNvdXJjZSk7Ci0gICAgfSBlbHNlIGlmICh0aGlzLmZhbGxiYWNr
KSB7Ci0gICAgICByZXR1cm4gdGhpcy5mYWxsYmFjay5leHBhbmRMb2NhbExvb2t1cChmdWxsTmFt
ZSwgb3B0aW9ucyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAg
fTsKLQotICBmdW5jdGlvbiBleHBhbmRMb2NhbExvb2t1cChyZWdpc3RyeSwgbm9ybWFsaXplZE5h
bWUsIG5vcm1hbGl6ZWRTb3VyY2UpIHsKLSAgICB2YXIgY2FjaGUgPSByZWdpc3RyeS5fbG9jYWxM
b29rdXBDYWNoZTsKLSAgICB2YXIgbm9ybWFsaXplZE5hbWVDYWNoZSA9IGNhY2hlW25vcm1hbGl6
ZWROYW1lXTsKLQotICAgIGlmICghbm9ybWFsaXplZE5hbWVDYWNoZSkgewotICAgICAgbm9ybWFs
aXplZE5hbWVDYWNoZSA9IGNhY2hlW25vcm1hbGl6ZWROYW1lXSA9IG5ldyBfZW1iZXJNZXRhbEVt
cHR5X29iamVjdC5kZWZhdWx0KCk7Ci0gICAgfQotCi0gICAgdmFyIGNhY2hlZCA9IG5vcm1hbGl6
ZWROYW1lQ2FjaGVbbm9ybWFsaXplZFNvdXJjZV07Ci0KLSAgICBpZiAoY2FjaGVkICE9PSB1bmRl
ZmluZWQpIHsKLSAgICAgIHJldHVybiBjYWNoZWQ7Ci0gICAgfQotCi0gICAgdmFyIGV4cGFuZGVk
ID0gcmVnaXN0cnkucmVzb2x2ZXIuZXhwYW5kTG9jYWxMb29rdXAobm9ybWFsaXplZE5hbWUsIG5v
cm1hbGl6ZWRTb3VyY2UpOwotCi0gICAgcmV0dXJuIG5vcm1hbGl6ZWROYW1lQ2FjaGVbbm9ybWFs
aXplZFNvdXJjZV0gPSBleHBhbmRlZDsKLSAgfQotCi0gIGZ1bmN0aW9uIHJlc29sdmUocmVnaXN0
cnksIG5vcm1hbGl6ZWROYW1lLCBvcHRpb25zKSB7Ci0gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9u
cy5zb3VyY2UpIHsKLSAgICAgIC8vIHdoZW4gYHNvdXJjZWAgaXMgcHJvdmlkZWQgZXhwYW5kIG5v
cm1hbGl6ZWROYW1lCi0gICAgICAvLyBhbmQgc291cmNlIGludG8gdGhlIGZ1bGwgbm9ybWFsaXpl
ZE5hbWUKLSAgICAgIG5vcm1hbGl6ZWROYW1lID0gcmVnaXN0cnkuZXhwYW5kTG9jYWxMb29rdXAo
bm9ybWFsaXplZE5hbWUsIG9wdGlvbnMpOwotCi0gICAgICAvLyBpZiBleHBhbmRMb2NhbExvb2t1
cCByZXR1cm5zIGZhbHNleSwgd2UgZG8gbm90IHN1cHBvcnQgbG9jYWwgbG9va3VwCi0gICAgICBp
ZiAoIW5vcm1hbGl6ZWROYW1lKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICB9Ci0K
LSAgICB2YXIgY2FjaGVkID0gcmVnaXN0cnkuX3Jlc29sdmVDYWNoZVtub3JtYWxpemVkTmFtZV07
Ci0gICAgaWYgKGNhY2hlZCAhPT0gdW5kZWZpbmVkKSB7Ci0gICAgICByZXR1cm4gY2FjaGVkOwot
ICAgIH0KLSAgICBpZiAocmVnaXN0cnkuX2ZhaWxDYWNoZVtub3JtYWxpemVkTmFtZV0pIHsKLSAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICB2YXIgcmVzb2x2ZWQgPSB1bmRlZmluZWQ7Ci0KLSAg
ICBpZiAocmVnaXN0cnkucmVzb2x2ZXIpIHsKLSAgICAgIHJlc29sdmVkID0gcmVnaXN0cnkucmVz
b2x2ZXIucmVzb2x2ZShub3JtYWxpemVkTmFtZSk7Ci0gICAgfQotCi0gICAgaWYgKHJlc29sdmVk
ID09PSB1bmRlZmluZWQpIHsKLSAgICAgIHJlc29sdmVkID0gcmVnaXN0cnkucmVnaXN0cmF0aW9u
c1tub3JtYWxpemVkTmFtZV07Ci0gICAgfQotCi0gICAgaWYgKHJlc29sdmVkID09PSB1bmRlZmlu
ZWQpIHsKLSAgICAgIHJlZ2lzdHJ5Ll9mYWlsQ2FjaGVbbm9ybWFsaXplZE5hbWVdID0gdHJ1ZTsK
LSAgICB9IGVsc2UgewotICAgICAgcmVnaXN0cnkuX3Jlc29sdmVDYWNoZVtub3JtYWxpemVkTmFt
ZV0gPSByZXNvbHZlZDsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzb2x2ZWQ7Ci0gIH0KLQotICBm
dW5jdGlvbiBoYXMocmVnaXN0cnksIGZ1bGxOYW1lLCBzb3VyY2UpIHsKLSAgICByZXR1cm4gcmVn
aXN0cnkucmVzb2x2ZShmdWxsTmFtZSwgeyBzb3VyY2U6IHNvdXJjZSB9KSAhPT0gdW5kZWZpbmVk
OwotICB9Ci0KLSAgdmFyIHByaXZhdGVOYW1lcyA9IF9lbWJlck1ldGFsRGljdGlvbmFyeS5kZWZh
dWx0KG51bGwpOwotICB2YXIgcHJpdmF0ZVN1ZmZpeCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20o
KSAqIG5ldyBEYXRlKCkpICsgJyc7Ci0KLSAgZnVuY3Rpb24gcHJpdmF0aXplKF9yZWYpIHsKLSAg
ICB2YXIgZnVsbE5hbWUgPSBfcmVmWzBdOwotCi0gICAgdmFyIG5hbWUgPSBwcml2YXRlTmFtZXNb
ZnVsbE5hbWVdOwotICAgIGlmIChuYW1lKSB7Ci0gICAgICByZXR1cm4gbmFtZTsKLSAgICB9Ci0K
LSAgICB2YXIgX2Z1bGxOYW1lJHNwbGl0ID0gZnVsbE5hbWUuc3BsaXQoJzonKTsKLQotICAgIHZh
ciB0eXBlID0gX2Z1bGxOYW1lJHNwbGl0WzBdOwotICAgIHZhciByYXdOYW1lID0gX2Z1bGxOYW1l
JHNwbGl0WzFdOwotCi0gICAgcmV0dXJuIHByaXZhdGVOYW1lc1tmdWxsTmFtZV0gPSBfZW1iZXJN
ZXRhbFV0aWxzLmludGVybih0eXBlICsgJzonICsgcmF3TmFtZSArICctJyArIHByaXZhdGVTdWZm
aXgpOwotICB9Ci0KLSAgZXhwb3J0cy5kZWZhdWx0ID0gUmVnaXN0cnk7Ci19KTsKLWVuaWZlZCgn
ZGFnLW1hcCcsIFsnZXhwb3J0cycsICd2ZXJ0ZXgnLCAndmlzaXQnXSwgZnVuY3Rpb24gKGV4cG9y
dHMsIF92ZXJ0ZXgsIF92aXNpdCkgewotICAndXNlIHN0cmljdCc7Ci0KLSAgZXhwb3J0cy5kZWZh
dWx0ID0gREFHOwotCi0gIC8qKgotICAgKiBEQUcgc3RhbmRzIGZvciBEaXJlY3RlZCBhY3ljbGlj
IGdyYXBoLgotICAgKgotICAgKiBJdCBpcyB1c2VkIHRvIGJ1aWxkIGEgZ3JhcGggb2YgZGVwZW5k
ZW5jaWVzIGNoZWNraW5nIHRoYXQgdGhlcmUgaXNuJ3QgY2lyY3VsYXIKLSAgICogZGVwZW5kZW5j
aWVzLiBwLmUgUmVnaXN0ZXJpbmcgaW5pdGlhbGl6ZXJzIHdpdGggYSBjZXJ0YWluIHByZWNlZGVu
Y2Ugb3JkZXIuCi0gICAqCi0gICAqIEBjbGFzcyBEQUcKLSAgICogQGNvbnN0cnVjdG9yCi0gICAq
LwotCi0gIGZ1bmN0aW9uIERBRygpIHsKLSAgICB0aGlzLm5hbWVzID0gW107Ci0gICAgdGhpcy52
ZXJ0aWNlcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7Ci0gIH0KLQotICAvKioKLSAgICogQWRkcyBh
IHZlcnRleCBlbnRyeSB0byB0aGUgZ3JhcGggdW5sZXNzIGl0IGlzIGFscmVhZHkgYWRkZWQuCi0g
ICAqCi0gICAqIEBwcml2YXRlCi0gICAqIEBtZXRob2QgYWRkCi0gICAqIEBwYXJhbSB7U3RyaW5n
fSBuYW1lIFRoZSBuYW1lIG9mIHRoZSB2ZXJ0ZXggdG8gYWRkCi0gICAqLwotICBEQUcucHJvdG90
eXBlLmFkZCA9IGZ1bmN0aW9uIChuYW1lKSB7Ci0gICAgaWYgKCFuYW1lKSB7Ci0gICAgICB0aHJv
dyBuZXcgRXJyb3IoIkNhbid0IGFkZCBWZXJ0ZXggd2l0aG91dCBuYW1lIik7Ci0gICAgfQotICAg
IGlmICh0aGlzLnZlcnRpY2VzW25hbWVdICE9PSB1bmRlZmluZWQpIHsKLSAgICAgIHJldHVybiB0
aGlzLnZlcnRpY2VzW25hbWVdOwotICAgIH0KLSAgICB2YXIgdmVydGV4ID0gbmV3IF92ZXJ0ZXgu
ZGVmYXVsdChuYW1lKTsKLSAgICB0aGlzLnZlcnRpY2VzW25hbWVdID0gdmVydGV4OwotICAgIHRo
aXMubmFtZXMucHVzaChuYW1lKTsKLSAgICByZXR1cm4gdmVydGV4OwotICB9OwotCi0gIC8qKgot
ICAgKiBBZGRzIGEgdmVydGV4IHRvIHRoZSBncmFwaCBhbmQgc2V0cyBpdHMgdmFsdWUuCi0gICAq
Ci0gICAqIEBwcml2YXRlCi0gICAqIEBtZXRob2QgbWFwCi0gICAqIEBwYXJhbSB7U3RyaW5nfSBu
YW1lIFRoZSBuYW1lIG9mIHRoZSB2ZXJ0ZXguCi0gICAqIEBwYXJhbSAgICAgICAgIHZhbHVlIFRo
ZSB2YWx1ZSB0byBwdXQgaW4gdGhlIHZlcnRleC4KLSAgICovCi0gIERBRy5wcm90b3R5cGUubWFw
ID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7Ci0gICAgdGhpcy5hZGQobmFtZSkudmFsdWUgPSB2
YWx1ZTsKLSAgfTsKLQotICAvKioKLSAgICogQ29ubmVjdHMgdGhlIHZlcnRpY2VzIHdpdGggdGhl
IGdpdmVuIG5hbWVzLCBhZGRpbmcgdGhlbSB0byB0aGUgZ3JhcGggaWYKLSAgICogbmVjZXNzYXJ5
LCBvbmx5IGlmIHRoaXMgZG9lcyBub3QgcHJvZHVjZSBpcyBhbnkgY2lyY3VsYXIgZGVwZW5kZW5j
eS4KLSAgICoKLSAgICogQHByaXZhdGUKLSAgICogQG1ldGhvZCBhZGRFZGdlCi0gICAqIEBwYXJh
bSB7U3RyaW5nfSBmcm9tTmFtZSBUaGUgbmFtZSB0aGUgdmVydGV4IHdoZXJlIHRoZSBlZGdlIHN0
YXJ0cy4KLSAgICogQHBhcmFtIHtTdHJpbmd9IHRvTmFtZSBUaGUgbmFtZSB0aGUgdmVydGV4IHdo
ZXJlIHRoZSBlZGdlIGVuZHMuCi0gICAqLwotICBEQUcucHJvdG90eXBlLmFkZEVkZ2UgPSBmdW5j
dGlvbiAoZnJvbU5hbWUsIHRvTmFtZSkgewotICAgIGlmICghZnJvbU5hbWUgfHwgIXRvTmFtZSB8
fCBmcm9tTmFtZSA9PT0gdG9OYW1lKSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHZhciBm
cm9tID0gdGhpcy5hZGQoZnJvbU5hbWUpOwotICAgIHZhciB0byA9IHRoaXMuYWRkKHRvTmFtZSk7
Ci0gICAgaWYgKHRvLmluY29taW5nLmhhc093blByb3BlcnR5KGZyb21OYW1lKSkgewotICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICBmdW5jdGlvbiBjaGVja0N5Y2xlKHZlcnRleCwgcGF0aCkgewot
ICAgICAgaWYgKHZlcnRleC5uYW1lID09PSB0b05hbWUpIHsKLSAgICAgICAgdGhyb3cgbmV3IEVy
cm9yKCJjeWNsZSBkZXRlY3RlZDogIiArIHRvTmFtZSArICIgPC0gIiArIHBhdGguam9pbigiIDwt
ICIpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgX3Zpc2l0LmRlZmF1bHQoZnJvbSwgY2hlY2tDeWNs
ZSk7Ci0gICAgZnJvbS5oYXNPdXRnb2luZyA9IHRydWU7Ci0gICAgdG8uaW5jb21pbmdbZnJvbU5h
bWVdID0gZnJvbTsKLSAgICB0by5pbmNvbWluZ05hbWVzLnB1c2goZnJvbU5hbWUpOwotICB9Owot
Ci0gIC8qKgotICAgKiBWaXNpdHMgYWxsIHRoZSB2ZXJ0ZXggb2YgdGhlIGdyYXBoIGNhbGxpbmcg
dGhlIGdpdmVuIGZ1bmN0aW9uIHdpdGggZWFjaCBvbmUsCi0gICAqIGVuc3VyaW5nIHRoYXQgdGhl
IHZlcnRpY2VzIGFyZSB2aXNpdGVkIHJlc3BlY3RpbmcgdGhlaXIgcHJlY2VkZW5jZS4KLSAgICoK
LSAgICogQG1ldGhvZCAgdG9wc29ydAotICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgZnVu
Y3Rpb24gdG8gYmUgaW52b2tlZCBvbiBlYWNoIHZlcnRleC4KLSAgICovCi0gIERBRy5wcm90b3R5
cGUudG9wc29ydCA9IGZ1bmN0aW9uIChmbikgewotICAgIHZhciB2aXNpdGVkID0ge307Ci0gICAg
dmFyIHZlcnRpY2VzID0gdGhpcy52ZXJ0aWNlczsKLSAgICB2YXIgbmFtZXMgPSB0aGlzLm5hbWVz
OwotICAgIHZhciBsZW4gPSBuYW1lcy5sZW5ndGg7Ci0gICAgdmFyIGksIHZlcnRleDsKLQotICAg
IGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewotICAgICAgdmVydGV4ID0gdmVydGljZXNbbmFt
ZXNbaV1dOwotICAgICAgaWYgKCF2ZXJ0ZXguaGFzT3V0Z29pbmcpIHsKLSAgICAgICAgX3Zpc2l0
LmRlZmF1bHQodmVydGV4LCBmbiwgdmlzaXRlZCk7Ci0gICAgICB9Ci0gICAgfQotICB9OwotCi0g
IC8qKgotICAgKiBBZGRzIGEgdmVydGV4IHdpdGggdGhlIGdpdmVuIG5hbWUgYW5kIHZhbHVlIHRv
IHRoZSBncmFwaCBhbmQgam9pbnMgaXQgd2l0aCB0aGUKLSAgICogdmVydGljZXMgcmVmZXJlbmNl
ZCBpbiBfYmVmb3JlXyBhbmQgX2FmdGVyXy4gSWYgdGhlcmUgaXNuJ3QgdmVydGljZXMgd2l0aCB0
aG9zZQotICAgKiBuYW1lcywgdGhleSBhcmUgYWRkZWQgdG9vLgotICAgKgotICAgKiBJZiBlaXRo
ZXIgX2JlZm9yZV8gb3IgX2FmdGVyXyBhcmUgZmFsc3kvZW1wdHksIHRoZSBhZGRlZCB2ZXJ0ZXgg
d2lsbCBub3QgaGF2ZQotICAgKiBhbiBpbmNvbWluZy9vdXRnb2luZyBlZGdlLgotICAgKgotICAg
KiBAbWV0aG9kIGFkZEVkZ2VzCi0gICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIFRoZSBuYW1lIG9m
IHRoZSB2ZXJ0ZXggdG8gYmUgYWRkZWQuCi0gICAqIEBwYXJhbSAgICAgICAgIHZhbHVlIFRoZSB2
YWx1ZSBvZiB0aGF0IHZlcnRleC4KLSAgICogQHBhcmFtICAgICAgICBiZWZvcmUgQW4gc3RyaW5n
IG9yIGFycmF5IG9mIHN0cmluZ3Mgd2l0aCB0aGUgbmFtZXMgb2YgdGhlIHZlcnRpY2VzIGJlZm9y
ZQotICAgKiAgICAgICAgICAgICAgICAgICAgICB3aGljaCB0aGlzIHZlcnRleCBtdXN0IGJlIHZp
c2l0ZWQuCi0gICAqIEBwYXJhbSAgICAgICAgIGFmdGVyIEFuIHN0cmluZyBvciBhcnJheSBvZiBz
dHJpbmdzIHdpdGggdGhlIG5hbWVzIG9mIHRoZSB2ZXJ0ZXggYWZ0ZXIKLSAgICogICAgICAgICAg
ICAgICAgICAgICAgd2hpY2ggdGhpcyB2ZXJ0ZXggbXVzdCBiZSB2aXNpdGVkLgotICAgKgotICAg
Ki8KLSAgREFHLnByb3RvdHlwZS5hZGRFZGdlcyA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSwgYmVm
b3JlLCBhZnRlcikgewotICAgIHZhciBpOwotICAgIHRoaXMubWFwKG5hbWUsIHZhbHVlKTsKLSAg
ICBpZiAoYmVmb3JlKSB7Ci0gICAgICBpZiAodHlwZW9mIGJlZm9yZSA9PT0gJ3N0cmluZycpIHsK
LSAgICAgICAgdGhpcy5hZGRFZGdlKG5hbWUsIGJlZm9yZSk7Ci0gICAgICB9IGVsc2UgewotICAg
ICAgICBmb3IgKGkgPSAwOyBpIDwgYmVmb3JlLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgdGhp
cy5hZGRFZGdlKG5hbWUsIGJlZm9yZVtpXSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0g
ICAgaWYgKGFmdGVyKSB7Ci0gICAgICBpZiAodHlwZW9mIGFmdGVyID09PSAnc3RyaW5nJykgewot
ICAgICAgICB0aGlzLmFkZEVkZ2UoYWZ0ZXIsIG5hbWUpOwotICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgZm9yIChpID0gMDsgaSA8IGFmdGVyLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgdGhpcy5h
ZGRFZGdlKGFmdGVyW2ldLCBuYW1lKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfTsK
LX0pOwotZW5pZmVkKCdkYWctbWFwLnVtZCcsIFsnZXhwb3J0cycsICdkYWctbWFwL3BsYXRmb3Jt
JywgJ2RhZy1tYXAnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9kYWdNYXBQbGF0Zm9ybSwgX2RhZ01h
cCkgewotICAndXNlIHN0cmljdCc7Ci0KLSAgLyogZ2xvYmFsIGRlZmluZTp0cnVlIG1vZHVsZTp0
cnVlIHdpbmRvdzogdHJ1ZSAqLwotICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAm
JiBkZWZpbmUuYW1kKSB7Ci0gICAgZGVmaW5lKGZ1bmN0aW9uICgpIHsKLSAgICAgIHJldHVybiBf
ZGFnTWFwLmRlZmF1bHQ7Ci0gICAgfSk7Ci0gIH0gZWxzZSBpZiAodHlwZW9mIG1vZHVsZSAhPT0g
J3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHsKLSAgICBtb2R1bGUuZXhwb3J0cyA9IF9k
YWdNYXAuZGVmYXVsdDsKLSAgfSBlbHNlIGlmICh0eXBlb2YgX2RhZ01hcFBsYXRmb3JtLmRlZmF1
bHQgIT09ICd1bmRlZmluZWQnKSB7Ci0gICAgX2RhZ01hcFBsYXRmb3JtLmRlZmF1bHRbJ0RBRydd
ID0gX2RhZ01hcC5kZWZhdWx0OwotICB9Ci19KTsKLWVuaWZlZCgnZGFnLW1hcC9wbGF0Zm9ybScs
IFsnZXhwb3J0cyddLCBmdW5jdGlvbiAoZXhwb3J0cykgewotICAndXNlIHN0cmljdCc7Ci0KLSAg
dmFyIHBsYXRmb3JtOwotCi0gIC8qIGdsb2JhbCBzZWxmICovCi0gIGlmICh0eXBlb2Ygc2VsZiA9
PT0gJ29iamVjdCcpIHsKLSAgICBwbGF0Zm9ybSA9IHNlbGY7Ci0KLSAgICAvKiBnbG9iYWwgZ2xv
YmFsICovCi0gIH0gZWxzZSBpZiAodHlwZW9mIGdsb2JhbCA9PT0gJ29iamVjdCcpIHsKLSAgICAg
IHBsYXRmb3JtID0gZ2xvYmFsOwotICAgIH0gZWxzZSB7Ci0gICAgICB0aHJvdyBuZXcgRXJyb3Io
J25vIGdsb2JhbDogYHNlbGZgIG9yIGBnbG9iYWxgIGZvdW5kJyk7Ci0gICAgfQotCi0gIGV4cG9y
dHMuZGVmYXVsdCA9IHBsYXRmb3JtOwotfSk7Ci1lbmlmZWQoImRvbS1oZWxwZXIiLCBbImV4cG9y
dHMiLCAiaHRtbGJhcnMtcnVudGltZS9tb3JwaCIsICJtb3JwaC1hdHRyIiwgImRvbS1oZWxwZXIv
YnVpbGQtaHRtbC1kb20iLCAiZG9tLWhlbHBlci9jbGFzc2VzIiwgImRvbS1oZWxwZXIvcHJvcCJd
LCBmdW5jdGlvbiAoZXhwb3J0cywgX2h0bWxiYXJzUnVudGltZU1vcnBoLCBfbW9ycGhBdHRyLCBf
ZG9tSGVscGVyQnVpbGRIdG1sRG9tLCBfZG9tSGVscGVyQ2xhc3NlcywgX2RvbUhlbHBlclByb3Ap
IHsKLSAgLypnbG9iYWxzIG1vZHVsZSwgVVJMKi8KLQotICAidXNlIHN0cmljdCI7Ci0KLSAgdmFy
IGRvYyA9IHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcgPyBmYWxzZSA6IGRvY3VtZW50
OwotCi0gIHZhciBkZWxldGVzQmxhbmtUZXh0Tm9kZXMgPSBkb2MgJiYgKGZ1bmN0aW9uIChkb2N1
bWVudCkgewotICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7
Ci0gICAgZWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnJykpOwot
ICAgIHZhciBjbG9uZWRFbGVtZW50ID0gZWxlbWVudC5jbG9uZU5vZGUodHJ1ZSk7Ci0gICAgcmV0
dXJuIGNsb25lZEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGggPT09IDA7Ci0gIH0pKGRvYyk7Ci0K
LSAgdmFyIGlnbm9yZXNDaGVja2VkQXR0cmlidXRlID0gZG9jICYmIChmdW5jdGlvbiAoZG9jdW1l
bnQpIHsKLSAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7
Ci0gICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2NoZWNrZWQnLCAnY2hlY2tlZCcpOwotICAgIHZh
ciBjbG9uZWRFbGVtZW50ID0gZWxlbWVudC5jbG9uZU5vZGUoZmFsc2UpOwotICAgIHJldHVybiAh
Y2xvbmVkRWxlbWVudC5jaGVja2VkOwotICB9KShkb2MpOwotCi0gIHZhciBjYW5SZW1vdmVTdmdW
aWV3Qm94QXR0cmlidXRlID0gZG9jICYmIChkb2MuY3JlYXRlRWxlbWVudE5TID8gKGZ1bmN0aW9u
IChkb2N1bWVudCkgewotICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5T
KF9kb21IZWxwZXJCdWlsZEh0bWxEb20uc3ZnTmFtZXNwYWNlLCAnc3ZnJyk7Ci0gICAgZWxlbWVu
dC5zZXRBdHRyaWJ1dGUoJ3ZpZXdCb3gnLCAnMCAwIDEwMCAxMDAnKTsKLSAgICBlbGVtZW50LnJl
bW92ZUF0dHJpYnV0ZSgndmlld0JveCcpOwotICAgIHJldHVybiAhZWxlbWVudC5nZXRBdHRyaWJ1
dGUoJ3ZpZXdCb3gnKTsKLSAgfSkoZG9jKSA6IHRydWUpOwotCi0gIHZhciBjYW5DbG9uZSA9IGRv
YyAmJiAoZnVuY3Rpb24gKGRvY3VtZW50KSB7Ci0gICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCdkaXYnKTsKLSAgICBlbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNy
ZWF0ZVRleHROb2RlKCcgJykpOwotICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3Jl
YXRlVGV4dE5vZGUoJyAnKSk7Ci0gICAgdmFyIGNsb25lZEVsZW1lbnQgPSBlbGVtZW50LmNsb25l
Tm9kZSh0cnVlKTsKLSAgICByZXR1cm4gY2xvbmVkRWxlbWVudC5jaGlsZE5vZGVzWzBdLm5vZGVW
YWx1ZSA9PT0gJyAnOwotICB9KShkb2MpOwotCi0gIC8vIFRoaXMgaXMgbm90IHRoZSBuYW1lc3Bh
Y2Ugb2YgdGhlIGVsZW1lbnQsIGJ1dCBvZgotICAvLyB0aGUgZWxlbWVudHMgaW5zaWRlIHRoYXQg
ZWxlbWVudHMuCi0gIGZ1bmN0aW9uIGludGVyaW9yTmFtZXNwYWNlKGVsZW1lbnQpIHsKLSAgICBp
ZiAoZWxlbWVudCAmJiBlbGVtZW50Lm5hbWVzcGFjZVVSSSA9PT0gX2RvbUhlbHBlckJ1aWxkSHRt
bERvbS5zdmdOYW1lc3BhY2UgJiYgIV9kb21IZWxwZXJCdWlsZEh0bWxEb20uc3ZnSFRNTEludGVn
cmF0aW9uUG9pbnRzW2VsZW1lbnQudGFnTmFtZV0pIHsKLSAgICAgIHJldHVybiBfZG9tSGVscGVy
QnVpbGRIdG1sRG9tLnN2Z05hbWVzcGFjZTsKLSAgICB9IGVsc2UgewotICAgICAgcmV0dXJuIG51
bGw7Ci0gICAgfQotICB9Ci0KLSAgLy8gVGhlIEhUTUwgc3BlYyBhbGxvd3MgZm9yICJvbWl0dGVk
IHN0YXJ0IHRhZ3MiLiBUaGVzZSB0YWdzIGFyZSBvcHRpb25hbAotICAvLyB3aGVuIHRoZWlyIGlu
dGVuZGVkIGNoaWxkIGlzIHRoZSBmaXJzdCB0aGluZyBpbiB0aGUgcGFyZW50IHRhZy4gRm9yCi0g
IC8vIGV4YW1wbGUsIHRoaXMgaXMgYSB0Ym9keSBzdGFydCB0YWc6Ci0gIC8vCi0gIC8vIDx0YWJs
ZT4KLSAgLy8gICA8dGJvZHk+Ci0gIC8vICAgICA8dHI+Ci0gIC8vCi0gIC8vIFRoZSB0Ym9keSBt
YXkgYmUgb21pdHRlZCwgYW5kIHRoZSBicm93c2VyIHdpbGwgYWNjZXB0IGFuZCByZW5kZXI6Ci0g
IC8vCi0gIC8vIDx0YWJsZT4KLSAgLy8gICA8dHI+Ci0gIC8vCi0gIC8vIEhvd2V2ZXIsIHRoZSBv
bWl0dGVkIHN0YXJ0IHRhZyB3aWxsIHN0aWxsIGJlIGFkZGVkIHRvIHRoZSBET00uIEhlcmUKLSAg
Ly8gd2UgdGVzdCB0aGUgc3RyaW5nIGFuZCBjb250ZXh0IHRvIHNlZSBpZiB0aGUgYnJvd3NlciBp
cyBhYm91dCB0bwotICAvLyBwZXJmb3JtIHRoaXMgY2xlYW51cC4KLSAgLy8KLSAgLy8gaHR0cDov
L3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2Uvc3lu
dGF4Lmh0bWwjb3B0aW9uYWwtdGFncwotICAvLyBkZXNjcmliZXMgd2hpY2ggdGFncyBhcmUgb21p
dHRhYmxlLiBUaGUgc3BlYyBmb3IgdGJvZHkgYW5kIGNvbGdyb3VwCi0gIC8vIGV4cGxhaW5zIHRo
aXMgYmVoYXZpb3I6Ci0gIC8vCi0gIC8vIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWIt
YXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL3RhYmxlcy5odG1sI3RoZS10Ym9keS1lbGVtZW50
Ci0gIC8vIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsv
bXVsdGlwYWdlL3RhYmxlcy5odG1sI3RoZS1jb2xncm91cC1lbGVtZW50Ci0gIC8vCi0KLSAgdmFy
IG9taXR0ZWRTdGFydFRhZ0NoaWxkVGVzdCA9IC88KFtcdzpdKykvOwotICBmdW5jdGlvbiBkZXRl
Y3RPbWl0dGVkU3RhcnRUYWcoc3RyaW5nLCBjb250ZXh0dWFsRWxlbWVudCkgewotICAgIC8vIE9t
aXR0ZWQgc3RhcnQgdGFncyBhcmUgb25seSBpbnNpZGUgdGFibGUgdGFncy4KLSAgICBpZiAoY29u
dGV4dHVhbEVsZW1lbnQudGFnTmFtZSA9PT0gJ1RBQkxFJykgewotICAgICAgdmFyIG9taXR0ZWRT
dGFydFRhZ0NoaWxkTWF0Y2ggPSBvbWl0dGVkU3RhcnRUYWdDaGlsZFRlc3QuZXhlYyhzdHJpbmcp
OwotICAgICAgaWYgKG9taXR0ZWRTdGFydFRhZ0NoaWxkTWF0Y2gpIHsKLSAgICAgICAgdmFyIG9t
aXR0ZWRTdGFydFRhZ0NoaWxkID0gb21pdHRlZFN0YXJ0VGFnQ2hpbGRNYXRjaFsxXTsKLSAgICAg
ICAgLy8gSXQgaXMgYWxyZWFkeSBhc3NlcnRlZCB0aGF0IHRoZSBjb250ZXh0dWFsIGVsZW1lbnQg
aXMgYSB0YWJsZQotICAgICAgICAvLyBhbmQgbm90IHRoZSBwcm9wZXIgc3RhcnQgdGFnLiBKdXN0
IHNlZSBpZiBhIHRhZyB3YXMgb21pdHRlZC4KLSAgICAgICAgcmV0dXJuIG9taXR0ZWRTdGFydFRh
Z0NoaWxkID09PSAndHInIHx8IG9taXR0ZWRTdGFydFRhZ0NoaWxkID09PSAnY29sJzsKLSAgICAg
IH0KLSAgICB9Ci0gIH0KLQotICBmdW5jdGlvbiBidWlsZFNWR0RPTShodG1sLCBkb20pIHsKLSAg
ICB2YXIgZGl2ID0gZG9tLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwotICAgIGRpdi5p
bm5lckhUTUwgPSAnPHN2Zz4nICsgaHRtbCArICc8L3N2Zz4nOwotICAgIHJldHVybiBkaXYuZmly
c3RDaGlsZC5jaGlsZE5vZGVzOwotICB9Ci0KLSAgdmFyIGd1aWQgPSAxOwotCi0gIGZ1bmN0aW9u
IEVsZW1lbnRNb3JwaChlbGVtZW50LCBkb20sIG5hbWVzcGFjZSkgewotICAgIHRoaXMuZWxlbWVu
dCA9IGVsZW1lbnQ7Ci0gICAgdGhpcy5kb20gPSBkb207Ci0gICAgdGhpcy5uYW1lc3BhY2UgPSBu
YW1lc3BhY2U7Ci0gICAgdGhpcy5ndWlkID0gImVsZW1lbnQiICsgZ3VpZCsrOwotCi0gICAgdGhp
cy5fc3RhdGUgPSB1bmRlZmluZWQ7Ci0gICAgdGhpcy5pc0RpcnR5ID0gdHJ1ZTsKLSAgfQotCi0g
IEVsZW1lbnRNb3JwaC5wcm90b3R5cGUuZ2V0U3RhdGUgPSBmdW5jdGlvbiAoKSB7Ci0gICAgaWYg
KCF0aGlzLl9zdGF0ZSkgewotICAgICAgdGhpcy5fc3RhdGUgPSB7fTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gdGhpcy5fc3RhdGU7Ci0gIH07Ci0KLSAgRWxlbWVudE1vcnBoLnByb3RvdHlwZS5zZXRT
dGF0ZSA9IGZ1bmN0aW9uIChuZXdTdGF0ZSkgewotICAgIC8qanNoaW50IC1XMDkzICovCi0KLSAg
ICByZXR1cm4gdGhpcy5fc3RhdGUgPSBuZXdTdGF0ZTsKLSAgfTsKLQotICAvLyByZW5kZXJBbmRD
bGVhbnVwIGNhbGxzIGBjbGVhcmAgb24gYWxsIGl0ZW1zIGluIHRoZSBtb3JwaCBtYXAKLSAgLy8g
anVzdCBiZWZvcmUgY2FsbGluZyBgZGVzdHJveWAgb24gdGhlIG1vcnBoLgotICAvLwotICAvLyBB
cyBhIGZ1dHVyZSByZWZhY3RvciB0aGlzIGNvdWxkIGJlIGNoYW5nZWQgdG8gc2V0IHRoZSBwcm9w
ZXJ0eQotICAvLyBiYWNrIHRvIGl0cyBvcmlnaW5hbC9kZWZhdWx0IHZhbHVlLgotICBFbGVtZW50
TW9ycGgucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKCkge307Ci0KLSAgRWxlbWVudE1vcnBo
LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkgewotICAgIHRoaXMuZWxlbWVudCA9IG51
bGw7Ci0gICAgdGhpcy5kb20gPSBudWxsOwotICB9OwotCi0gIC8qCi0gICAqIEEgY2xhc3Mgd3Jh
cHBpbmcgRE9NIGZ1bmN0aW9ucyB0byBhZGRyZXNzIGVudmlyb25tZW50IGNvbXBhdGliaWxpdHks
Ci0gICAqIG5hbWVzcGFjZXMsIGNvbnRleHR1YWwgZWxlbWVudHMgZm9yIG1vcnBoIHVuLWVzY2Fw
ZWQgY29udGVudAotICAgKiBpbnNlcnRpb24uCi0gICAqCi0gICAqIFdoZW4gZW50ZXJpbmcgYSB0
ZW1wbGF0ZSwgYSBET01IZWxwZXIgc2hvdWxkIGJlIHBhc3NlZDoKLSAgICoKLSAgICogICB0ZW1w
bGF0ZShjb250ZXh0LCB7IGhvb2tzOiBob29rcywgZG9tOiBuZXcgRE9NSGVscGVyKCkgfSk7Ci0g
ICAqCi0gICAqIFRPRE86IHN1cHBvcnQgZm9yZWlnbk9iamVjdCBhcyBhIHBhc3NlZCBjb250ZXh0
dWFsIGVsZW1lbnQuIEl0IGhhcwotICAgKiBhIG5hbWVzcGFjZSAoc3ZnKSB0aGF0IGRvZXMgbm90
IG1hdGNoIGl0cyBpbnRlcm5hbCBuYW1lc3BhY2UKLSAgICogKHhodG1sKS4KLSAgICoKLSAgICog
QGNsYXNzIERPTUhlbHBlcgotICAgKiBAY29uc3RydWN0b3IKLSAgICogQHBhcmFtIHtIVE1MRG9j
dW1lbnR9IF9kb2N1bWVudCBUaGUgZG9jdW1lbnQgRE9NIG1ldGhvZHMgYXJlIHByb3hpZWQgdG8K
LSAgICovCi0gIGZ1bmN0aW9uIERPTUhlbHBlcihfZG9jdW1lbnQpIHsKLSAgICB0aGlzLmRvY3Vt
ZW50ID0gX2RvY3VtZW50IHx8IGRvY3VtZW50OwotICAgIGlmICghdGhpcy5kb2N1bWVudCkgewot
ICAgICAgdGhyb3cgbmV3IEVycm9yKCJBIGRvY3VtZW50IG9iamVjdCBtdXN0IGJlIHBhc3NlZCB0
byB0aGUgRE9NSGVscGVyLCBvciBhdmFpbGFibGUgb24gdGhlIGdsb2JhbCBzY29wZSIpOwotICAg
IH0KLSAgICB0aGlzLmNhbkNsb25lID0gY2FuQ2xvbmU7Ci0gICAgdGhpcy5uYW1lc3BhY2UgPSBu
dWxsOwotCi0gICAgaW5zdGFsbEVudmlyb25tZW50U3BlY2lmaWNNZXRob2RzKHRoaXMpOwotICB9
Ci0KLSAgdmFyIHByb3RvdHlwZSA9IERPTUhlbHBlci5wcm90b3R5cGU7Ci0gIHByb3RvdHlwZS5j
b25zdHJ1Y3RvciA9IERPTUhlbHBlcjsKLQotICBwcm90b3R5cGUuZ2V0RWxlbWVudEJ5SWQgPSBm
dW5jdGlvbiAoaWQsIHJvb3ROb2RlKSB7Ci0gICAgcm9vdE5vZGUgPSByb290Tm9kZSB8fCB0aGlz
LmRvY3VtZW50OwotICAgIHJldHVybiByb290Tm9kZS5nZXRFbGVtZW50QnlJZChpZCk7Ci0gIH07
Ci0KLSAgcHJvdG90eXBlLmluc2VydEJlZm9yZSA9IGZ1bmN0aW9uIChlbGVtZW50LCBjaGlsZEVs
ZW1lbnQsIHJlZmVyZW5jZUNoaWxkKSB7Ci0gICAgcmV0dXJuIGVsZW1lbnQuaW5zZXJ0QmVmb3Jl
KGNoaWxkRWxlbWVudCwgcmVmZXJlbmNlQ2hpbGQpOwotICB9OwotCi0gIHByb3RvdHlwZS5hcHBl
bmRDaGlsZCA9IGZ1bmN0aW9uIChlbGVtZW50LCBjaGlsZEVsZW1lbnQpIHsKLSAgICByZXR1cm4g
ZWxlbWVudC5hcHBlbmRDaGlsZChjaGlsZEVsZW1lbnQpOwotICB9OwotCi0gIHZhciBpdGVtQXQ7
Ci0KLSAgLy8gSXQgYXBwZWFycyB0aGF0IHNvbWV0aW1lcywgaW4geWV0IHRvIGJlIGl0ZW50aWZp
ZWQgc2NlbmFyaW9zIFBoYW50b21KUyAyLjAKLSAgLy8gY3Jhc2hlcyBvbiBjaGlsZE5vZGVzLml0
ZW0oaW5kZXgpLCBidXQgd29ya3MgYXMgZXhwZWN0ZWQgd2l0aCBjaGlsZE5vZGVzW2luZGV4XTsK
LSAgLy8KLSAgLy8gQWx0aG91Z2ggaXQgd291bGQgYmUgbmljZSB0byBtb3ZlIHRvIGNoaWxkTm9k
ZXNbaW5kZXhdIGluIGFsbCBzY2VuYXJpb3MsCi0gIC8vIHRoaXMgd291bGQgcmVxdWlyZSBTaW1w
bGVET00gdG8gbWFpbnRhaW4gdGhlIGNoaWxkTm9kZXMgYXJyYXkuIFRoaXMgd291bGQgYmUKLSAg
Ly8gcXVpdGUgY29zdGx5LCBpbiBib3RoIGRldiB0aW1lIGFuZCBydW50aW1lLgotICAvLwotICAv
LyBTbyBpbnN0ZWFkLCB3ZSBjaG9vc2UgdGhlIGJlc3QgcG9zc2libGUgbWV0aG9kIGFuZCBjYWxs
IGl0IGEgZGF5LgotICAvLwotICAvKmdsb2JhbCBuYXZpZ2F0b3IgKi8KLSAgaWYgKHR5cGVvZiBu
YXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZign
UGhhbnRvbUpTJykpIHsKLSAgICBpdGVtQXQgPSBmdW5jdGlvbiAobm9kZXMsIGluZGV4KSB7Ci0g
ICAgICByZXR1cm4gbm9kZXNbaW5kZXhdOwotICAgIH07Ci0gIH0gZWxzZSB7Ci0gICAgaXRlbUF0
ID0gZnVuY3Rpb24gKG5vZGVzLCBpbmRleCkgewotICAgICAgcmV0dXJuIG5vZGVzLml0ZW0oaW5k
ZXgpOwotICAgIH07Ci0gIH0KLQotICBwcm90b3R5cGUuY2hpbGRBdCA9IGZ1bmN0aW9uIChlbGVt
ZW50LCBpbmRpY2VzKSB7Ci0gICAgdmFyIGNoaWxkID0gZWxlbWVudDsKLQotICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgaW5kaWNlcy5sZW5ndGg7IGkrKykgewotICAgICAgY2hpbGQgPSBpdGVtQXQo
Y2hpbGQuY2hpbGROb2RlcywgaW5kaWNlc1tpXSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGNoaWxk
OwotICB9OwotCi0gIC8vIE5vdGUgdG8gYSBGZWxsb3cgSW1wbGVtZW50b3I6Ci0gIC8vIEFoaCwg
YWNjZXNzaW5nIGEgY2hpbGQgbm9kZSBhdCBhbiBpbmRleC4gU2VlbXMgbGlrZSBpdCBzaG91bGQg
YmUgc28gc2ltcGxlLAotICAvLyBkb2Vzbid0IGl0PyBVbmZvcnR1bmF0ZWx5LCB0aGlzIHBhcnRp
Y3VsYXIgbWV0aG9kIGhhcyBjYXVzZWQgdXMgYSBzdXJwcmlzaW5nCi0gIC8vIGFtb3VudCBvZiBw
YWluLiBBcyB5b3UnbGwgbm90ZSBiZWxvdywgdGhpcyBtZXRob2QgaGFzIGJlZW4gbW9kaWZpZWQg
dG8gd2FsawotICAvLyB0aGUgbGlua2VkIGxpc3Qgb2YgY2hpbGQgbm9kZXMgcmF0aGVyIHRoYW4g
YWNjZXNzIHRoZSBjaGlsZCBieSBpbmRleAotICAvLyBkaXJlY3RseSwgZXZlbiB0aG91Z2ggdGhl
cmUgYXJlIHR3byAoMikgQVBJcyBpbiB0aGUgRE9NIHRoYXQgZG8gdGhpcyBmb3IgdXMuCi0gIC8v
IElmIHlvdSdyZSB0aGlua2luZyB0byB5b3Vyc2VsZiwgIldoYXQgYW4gb3ZlcnNpZ2h0ISBXaGF0
IGFuIG9wcG9ydHVuaXR5IHRvCi0gIC8vIG9wdGltaXplIHRoaXMgY29kZSEiIHRoZW4gdG8geW91
IEkgc2F5OiBzdG9wISBGb3IgSSBoYXZlIGEgdGFsZSB0byB0ZWxsLgotICAvLwotICAvLyBGaXJz
dCwgdGhpcyBjb2RlIG11c3QgYmUgY29tcGF0aWJsZSB3aXRoIHNpbXBsZS1kb20gZm9yIHJlbmRl
cmluZyBvbiB0aGUKLSAgLy8gc2VydmVyIHdoZXJlIHRoZXJlIGlzIG5vIHJlYWwgRE9NLiBQcmV2
aW91c2x5LCB3ZSBhY2Nlc3NlZCBhIGNoaWxkIG5vZGUKLSAgLy8gZGlyZWN0bHkgdmlhIGBlbGVt
ZW50LmNoaWxkTm9kZXNbaW5kZXhdYC4gV2hpbGUgd2UgKmNvdWxkKiBpbiB0aGVvcnkgZG8gYQot
ICAvLyBmdWxsLWZpZGVsaXR5IHNpbXVsYXRpb24gb2YgYSBsaXZlIGBjaGlsZE5vZGVzYCBhcnJh
eSwgdGhpcyBpcyBzbG93LAotICAvLyBjb21wbGljYXRlZCBhbmQgZXJyb3ItcHJvbmUuCi0gIC8v
Ci0gIC8vICJObyBwcm9ibGVtLCIgd2UgdGhvdWdodCwgIndlJ2xsIGp1c3QgdXNlIHRoZSBzaW1p
bGFyCi0gIC8vIGBjaGlsZE5vZGVzLml0ZW0oaW5kZXgpYCBBUEkuIiBUaGVuLCB3ZSBjb3VsZCBq
dXN0IGltcGxlbWVudCBvdXIgb3duIGBpdGVtYAotICAvLyBtZXRob2QgaW4gc2ltcGxlLWRvbSBh
bmQgd2FsayB0aGUgY2hpbGQgbm9kZSBsaW5rZWQgbGlzdCB0aGVyZSwgYWxsb3dpbmcKLSAgLy8g
dXMgdG8gcmV0YWluIHRoZSBwZXJmb3JtYW5jZSBhZHZhbnRhZ2VzIG9mIHRoZSAoc3VyZWx5IG9w
dGltaXplZCkgYGl0ZW0oKWAKLSAgLy8gQVBJIGluIHRoZSBicm93c2VyLgotICAvLwotICAvLyBV
bmZvcnR1bmF0ZWx5LCBhbiBlbnRlcnByaXNpbmcgc291bCBuYW1lZCBTYW15IEFsemFocmFuaSBk
aXNjb3ZlcmVkIHRoYXQgaW4KLSAgLy8gSUU4LCBhY2Nlc3NpbmcgYW4gaXRlbSBvdXQtb2YtYm91
bmRzIHZpYSBgaXRlbSgpYCBjYXVzZXMgYW4gZXhjZXB0aW9uIHdoZXJlCi0gIC8vIG90aGVyIGJy
b3dzZXJzIHJldHVybiBudWxsLiBUaGlzIG5lY2Vzc2l0YXRlZCBhLi4uIGNoZWNrIG9mCi0gIC8v
IGBjaGlsZE5vZGVzLmxlbmd0aGAsIGJyaW5naW5nIHVzIGJhY2sgYXJvdW5kIHRvIGhhdmluZyB0
byBzdXBwb3J0IGEKLSAgLy8gZnVsbC1maWRlbGl0eSBgY2hpbGROb2Rlc2AgYXJyYXkhCi0gIC8v
Ci0gIC8vIFdvcnN0IG9mIGFsbCwgS3JpcyBTZWxkZW4gaW52ZXN0aWdhdGVkIGhvdyBicm93c2Vy
cyBhcmUgYWN0dWFseSBpbXBsZW1lbnRlZAotICAvLyBhbmQgZGlzY292ZXJlZCB0aGF0IHRoZXkn
cmUgYWxsIGxpbmtlZCBsaXN0cyB1bmRlciB0aGUgaG9vZCBhbnl3YXkuIEFjY2Vzc2luZwotICAv
LyBgY2hpbGROb2Rlc2AgcmVxdWlyZXMgdGhlbSB0byBhbGxvY2F0ZSBhIG5ldyBsaXZlIGNvbGxl
Y3Rpb24gYmFja2VkIGJ5IHRoYXQKLSAgLy8gbGlua2VkIGxpc3QsIHdoaWNoIGlzIGl0c2VsZiBh
IHJhdGhlciBleHBlbnNpdmUgb3BlcmF0aW9uLiBPdXIgYXNzdW1lZAotICAvLyBvcHRpbWl6YXRp
b24gaGFkIGJhY2tmaXJlZCEgVGhhdCBpcyB0aGUgZGFuZ2VyIG9mIG1hZ2ljYWwgdGhpbmtpbmcg
YWJvdXQKLSAgLy8gdGhlIHBlcmZvcm1hbmNlIG9mIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbnMuCi0g
IC8vCi0gIC8vIEFuZCB0aGlzLCBteSBmcmllbmRzLCBpcyB3aHkgdGhlIGZvbGxvd2luZyBpbXBs
ZW1lbnRhdGlvbiBqdXN0IHdhbGtzIHRoZQotICAvLyBsaW5rZWQgbGlzdCwgYXMgc3VycHJpc2Vk
IGFzIHRoYXQgbWF5IG1ha2UgeW91LiBQbGVhc2UgZW5zdXJlIHlvdSB1bmRlcnN0YW5kCi0gIC8v
IHRoZSBhYm92ZSBiZWZvcmUgY2hhbmdpbmcgdGhpcyBhbmQgc3VibWl0dGluZyBhIFBSLgotICAv
LwotICAvLyBUb20gRGFsZSwgSmFudWFyeSAxOHRoLCAyMDE1LCBQb3J0bGFuZCBPUgotICBwcm90
b3R5cGUuY2hpbGRBdEluZGV4ID0gZnVuY3Rpb24gKGVsZW1lbnQsIGluZGV4KSB7Ci0gICAgdmFy
IG5vZGUgPSBlbGVtZW50LmZpcnN0Q2hpbGQ7Ci0KLSAgICBmb3IgKHZhciBpZHggPSAwOyBub2Rl
ICYmIGlkeCA8IGluZGV4OyBpZHgrKykgewotICAgICAgbm9kZSA9IG5vZGUubmV4dFNpYmxpbmc7
Ci0gICAgfQotCi0gICAgcmV0dXJuIG5vZGU7Ci0gIH07Ci0KLSAgcHJvdG90eXBlLmFwcGVuZFRl
eHQgPSBmdW5jdGlvbiAoZWxlbWVudCwgdGV4dCkgewotICAgIHJldHVybiBlbGVtZW50LmFwcGVu
ZENoaWxkKHRoaXMuZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGV4dCkpOwotICB9OwotCi0gIHBy
b3RvdHlwZS5zZXRBdHRyaWJ1dGUgPSBmdW5jdGlvbiAoZWxlbWVudCwgbmFtZSwgdmFsdWUpIHsK
LSAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShuYW1lLCBTdHJpbmcodmFsdWUpKTsKLSAgfTsKLQot
ICBwcm90b3R5cGUuZ2V0QXR0cmlidXRlID0gZnVuY3Rpb24gKGVsZW1lbnQsIG5hbWUpIHsKLSAg
ICByZXR1cm4gZWxlbWVudC5nZXRBdHRyaWJ1dGUobmFtZSk7Ci0gIH07Ci0KLSAgcHJvdG90eXBl
LnNldEF0dHJpYnV0ZU5TID0gZnVuY3Rpb24gKGVsZW1lbnQsIG5hbWVzcGFjZSwgbmFtZSwgdmFs
dWUpIHsKLSAgICBlbGVtZW50LnNldEF0dHJpYnV0ZU5TKG5hbWVzcGFjZSwgbmFtZSwgU3RyaW5n
KHZhbHVlKSk7Ci0gIH07Ci0KLSAgcHJvdG90eXBlLmdldEF0dHJpYnV0ZU5TID0gZnVuY3Rpb24g
KGVsZW1lbnQsIG5hbWVzcGFjZSwgbmFtZSkgewotICAgIHJldHVybiBlbGVtZW50LmdldEF0dHJp
YnV0ZU5TKG5hbWVzcGFjZSwgbmFtZSk7Ci0gIH07Ci0KLSAgaWYgKGNhblJlbW92ZVN2Z1ZpZXdC
b3hBdHRyaWJ1dGUpIHsKLSAgICBwcm90b3R5cGUucmVtb3ZlQXR0cmlidXRlID0gZnVuY3Rpb24g
KGVsZW1lbnQsIG5hbWUpIHsKLSAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKG5hbWUpOwot
ICAgIH07Ci0gIH0gZWxzZSB7Ci0gICAgcHJvdG90eXBlLnJlbW92ZUF0dHJpYnV0ZSA9IGZ1bmN0
aW9uIChlbGVtZW50LCBuYW1lKSB7Ci0gICAgICBpZiAoZWxlbWVudC50YWdOYW1lID09PSAnc3Zn
JyAmJiBuYW1lID09PSAndmlld0JveCcpIHsKLSAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUo
bmFtZSwgbnVsbCk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBlbGVtZW50LnJlbW92ZUF0dHJp
YnV0ZShuYW1lKTsKLSAgICAgIH0KLSAgICB9OwotICB9Ci0KLSAgcHJvdG90eXBlLnNldFByb3Bl
cnR5U3RyaWN0ID0gZnVuY3Rpb24gKGVsZW1lbnQsIG5hbWUsIHZhbHVlKSB7Ci0gICAgaWYgKHZh
bHVlID09PSB1bmRlZmluZWQpIHsKLSAgICAgIHZhbHVlID0gbnVsbDsKLSAgICB9Ci0KLSAgICBp
ZiAodmFsdWUgPT09IG51bGwgJiYgKG5hbWUgPT09ICd2YWx1ZScgfHwgbmFtZSA9PT0gJ3R5cGUn
IHx8IG5hbWUgPT09ICdzcmMnKSkgewotICAgICAgdmFsdWUgPSAnJzsKLSAgICB9Ci0KLSAgICBl
bGVtZW50W25hbWVdID0gdmFsdWU7Ci0gIH07Ci0KLSAgcHJvdG90eXBlLmdldFByb3BlcnR5U3Ry
aWN0ID0gZnVuY3Rpb24gKGVsZW1lbnQsIG5hbWUpIHsKLSAgICByZXR1cm4gZWxlbWVudFtuYW1l
XTsKLSAgfTsKLQotICBwcm90b3R5cGUuc2V0UHJvcGVydHkgPSBmdW5jdGlvbiAoZWxlbWVudCwg
bmFtZSwgdmFsdWUsIG5hbWVzcGFjZSkgewotICAgIGlmIChlbGVtZW50Lm5hbWVzcGFjZVVSSSA9
PT0gX2RvbUhlbHBlckJ1aWxkSHRtbERvbS5zdmdOYW1lc3BhY2UpIHsKLSAgICAgIGlmIChfZG9t
SGVscGVyUHJvcC5pc0F0dHJSZW1vdmFsVmFsdWUodmFsdWUpKSB7Ci0gICAgICAgIGVsZW1lbnQu
cmVtb3ZlQXR0cmlidXRlKG5hbWUpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKG5hbWVz
cGFjZSkgewotICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlTlMobmFtZXNwYWNlLCBuYW1l
LCB2YWx1ZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1
dGUobmFtZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAg
IHZhciBfbm9ybWFsaXplUHJvcGVydHkgPSBfZG9tSGVscGVyUHJvcC5ub3JtYWxpemVQcm9wZXJ0
eShlbGVtZW50LCBuYW1lKTsKLQotICAgICAgdmFyIG5vcm1hbGl6ZWQgPSBfbm9ybWFsaXplUHJv
cGVydHkubm9ybWFsaXplZDsKLSAgICAgIHZhciB0eXBlID0gX25vcm1hbGl6ZVByb3BlcnR5LnR5
cGU7Ci0KLSAgICAgIGlmICh0eXBlID09PSAncHJvcCcpIHsKLSAgICAgICAgZWxlbWVudFtub3Jt
YWxpemVkXSA9IHZhbHVlOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKF9kb21IZWxwZXJQ
cm9wLmlzQXR0clJlbW92YWxWYWx1ZSh2YWx1ZSkpIHsKLSAgICAgICAgICBlbGVtZW50LnJlbW92
ZUF0dHJpYnV0ZShuYW1lKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBpZiAobmFtZXNw
YWNlICYmIGVsZW1lbnQuc2V0QXR0cmlidXRlTlMpIHsKLSAgICAgICAgICAgIGVsZW1lbnQuc2V0
QXR0cmlidXRlTlMobmFtZXNwYWNlLCBuYW1lLCB2YWx1ZSk7Ci0gICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTsKLSAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH07Ci0KLSAgaWYgKGRvYyAmJiBkb2Mu
Y3JlYXRlRWxlbWVudE5TKSB7Ci0gICAgLy8gT25seSBvcHQgaW50byBuYW1lc3BhY2UgZGV0ZWN0
aW9uIGlmIGEgY29udGV4dHVhbEVsZW1lbnQKLSAgICAvLyBpcyBwYXNzZWQuCi0gICAgcHJvdG90
eXBlLmNyZWF0ZUVsZW1lbnQgPSBmdW5jdGlvbiAodGFnTmFtZSwgY29udGV4dHVhbEVsZW1lbnQp
IHsKLSAgICAgIHZhciBuYW1lc3BhY2UgPSB0aGlzLm5hbWVzcGFjZTsKLSAgICAgIGlmIChjb250
ZXh0dWFsRWxlbWVudCkgewotICAgICAgICBpZiAodGFnTmFtZSA9PT0gJ3N2ZycpIHsKLSAgICAg
ICAgICBuYW1lc3BhY2UgPSBfZG9tSGVscGVyQnVpbGRIdG1sRG9tLnN2Z05hbWVzcGFjZTsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBuYW1lc3BhY2UgPSBpbnRlcmlvck5hbWVzcGFjZShj
b250ZXh0dWFsRWxlbWVudCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGlmIChuYW1lc3Bh
Y2UpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG5hbWVz
cGFjZSwgdGFnTmFtZSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICByZXR1cm4gdGhpcy5kb2N1
bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpOwotICAgICAgfQotICAgIH07Ci0gICAgcHJvdG90
eXBlLnNldEF0dHJpYnV0ZU5TID0gZnVuY3Rpb24gKGVsZW1lbnQsIG5hbWVzcGFjZSwgbmFtZSwg
dmFsdWUpIHsKLSAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlTlMobmFtZXNwYWNlLCBuYW1lLCBT
dHJpbmcodmFsdWUpKTsKLSAgICB9OwotICB9IGVsc2UgewotICAgIHByb3RvdHlwZS5jcmVhdGVF
bGVtZW50ID0gZnVuY3Rpb24gKHRhZ05hbWUpIHsKLSAgICAgIHJldHVybiB0aGlzLmRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7Ci0gICAgfTsKLSAgICBwcm90b3R5cGUuc2V0QXR0cmli
dXRlTlMgPSBmdW5jdGlvbiAoZWxlbWVudCwgbmFtZXNwYWNlLCBuYW1lLCB2YWx1ZSkgewotICAg
ICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUobmFtZSwgU3RyaW5nKHZhbHVlKSk7Ci0gICAgfTsKLSAg
fQotCi0gIHByb3RvdHlwZS5hZGRDbGFzc2VzID0gX2RvbUhlbHBlckNsYXNzZXMuYWRkQ2xhc3Nl
czsKLSAgcHJvdG90eXBlLnJlbW92ZUNsYXNzZXMgPSBfZG9tSGVscGVyQ2xhc3Nlcy5yZW1vdmVD
bGFzc2VzOwotCi0gIHByb3RvdHlwZS5zZXROYW1lc3BhY2UgPSBmdW5jdGlvbiAobnMpIHsKLSAg
ICB0aGlzLm5hbWVzcGFjZSA9IG5zOwotICB9OwotCi0gIHByb3RvdHlwZS5kZXRlY3ROYW1lc3Bh
Y2UgPSBmdW5jdGlvbiAoZWxlbWVudCkgewotICAgIHRoaXMubmFtZXNwYWNlID0gaW50ZXJpb3JO
YW1lc3BhY2UoZWxlbWVudCk7Ci0gIH07Ci0KLSAgcHJvdG90eXBlLmNyZWF0ZURvY3VtZW50RnJh
Z21lbnQgPSBmdW5jdGlvbiAoKSB7Ci0gICAgcmV0dXJuIHRoaXMuZG9jdW1lbnQuY3JlYXRlRG9j
dW1lbnRGcmFnbWVudCgpOwotICB9OwotCi0gIHByb3RvdHlwZS5jcmVhdGVUZXh0Tm9kZSA9IGZ1
bmN0aW9uICh0ZXh0KSB7Ci0gICAgcmV0dXJuIHRoaXMuZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUo
dGV4dCk7Ci0gIH07Ci0KLSAgcHJvdG90eXBlLmNyZWF0ZUNvbW1lbnQgPSBmdW5jdGlvbiAodGV4
dCkgewotICAgIHJldHVybiB0aGlzLmRvY3VtZW50LmNyZWF0ZUNvbW1lbnQodGV4dCk7Ci0gIH07
Ci0KLSAgcHJvdG90eXBlLnJlcGFpckNsb25lZE5vZGUgPSBmdW5jdGlvbiAoZWxlbWVudCwgYmxh
bmtDaGlsZFRleHROb2RlcywgaXNDaGVja2VkKSB7Ci0gICAgaWYgKGRlbGV0ZXNCbGFua1RleHRO
b2RlcyAmJiBibGFua0NoaWxkVGV4dE5vZGVzLmxlbmd0aCA+IDApIHsKLSAgICAgIGZvciAodmFy
IGkgPSAwLCBsZW4gPSBibGFua0NoaWxkVGV4dE5vZGVzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7
Ci0gICAgICAgIHZhciB0ZXh0Tm9kZSA9IHRoaXMuZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJycp
LAotICAgICAgICAgICAgb2Zmc2V0ID0gYmxhbmtDaGlsZFRleHROb2Rlc1tpXSwKLSAgICAgICAg
ICAgIGJlZm9yZSA9IHRoaXMuY2hpbGRBdEluZGV4KGVsZW1lbnQsIG9mZnNldCk7Ci0gICAgICAg
IGlmIChiZWZvcmUpIHsKLSAgICAgICAgICBlbGVtZW50Lmluc2VydEJlZm9yZSh0ZXh0Tm9kZSwg
YmVmb3JlKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxk
KHRleHROb2RlKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBpZiAoaWdub3Jlc0No
ZWNrZWRBdHRyaWJ1dGUgJiYgaXNDaGVja2VkKSB7Ci0gICAgICBlbGVtZW50LnNldEF0dHJpYnV0
ZSgnY2hlY2tlZCcsICdjaGVja2VkJyk7Ci0gICAgfQotICB9OwotCi0gIHByb3RvdHlwZS5jbG9u
ZU5vZGUgPSBmdW5jdGlvbiAoZWxlbWVudCwgZGVlcCkgewotICAgIHZhciBjbG9uZSA9IGVsZW1l
bnQuY2xvbmVOb2RlKCEhZGVlcCk7Ci0gICAgcmV0dXJuIGNsb25lOwotICB9OwotCi0gIHByb3Rv
dHlwZS5BdHRyTW9ycGhDbGFzcyA9IF9tb3JwaEF0dHIuZGVmYXVsdDsKLQotICBwcm90b3R5cGUu
Y3JlYXRlQXR0ck1vcnBoID0gZnVuY3Rpb24gKGVsZW1lbnQsIGF0dHJOYW1lLCBuYW1lc3BhY2Up
IHsKLSAgICByZXR1cm4gdGhpcy5BdHRyTW9ycGhDbGFzcy5jcmVhdGUoZWxlbWVudCwgYXR0ck5h
bWUsIHRoaXMsIG5hbWVzcGFjZSk7Ci0gIH07Ci0KLSAgcHJvdG90eXBlLkVsZW1lbnRNb3JwaENs
YXNzID0gRWxlbWVudE1vcnBoOwotCi0gIHByb3RvdHlwZS5jcmVhdGVFbGVtZW50TW9ycGggPSBm
dW5jdGlvbiAoZWxlbWVudCwgbmFtZXNwYWNlKSB7Ci0gICAgcmV0dXJuIG5ldyB0aGlzLkVsZW1l
bnRNb3JwaENsYXNzKGVsZW1lbnQsIHRoaXMsIG5hbWVzcGFjZSk7Ci0gIH07Ci0KLSAgcHJvdG90
eXBlLmNyZWF0ZVVuc2FmZUF0dHJNb3JwaCA9IGZ1bmN0aW9uIChlbGVtZW50LCBhdHRyTmFtZSwg
bmFtZXNwYWNlKSB7Ci0gICAgdmFyIG1vcnBoID0gdGhpcy5jcmVhdGVBdHRyTW9ycGgoZWxlbWVu
dCwgYXR0ck5hbWUsIG5hbWVzcGFjZSk7Ci0gICAgbW9ycGguZXNjYXBlZCA9IGZhbHNlOwotICAg
IHJldHVybiBtb3JwaDsKLSAgfTsKLQotICBwcm90b3R5cGUuTW9ycGhDbGFzcyA9IF9odG1sYmFy
c1J1bnRpbWVNb3JwaC5kZWZhdWx0OwotCi0gIHByb3RvdHlwZS5jcmVhdGVNb3JwaCA9IGZ1bmN0
aW9uIChwYXJlbnQsIHN0YXJ0LCBlbmQsIGNvbnRleHR1YWxFbGVtZW50KSB7Ci0gICAgaWYgKGNv
bnRleHR1YWxFbGVtZW50ICYmIGNvbnRleHR1YWxFbGVtZW50Lm5vZGVUeXBlID09PSAxMSkgewot
ICAgICAgdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgcGFzcyBhIGZyYWdtZW50IGFzIHRoZSBjb250
ZXh0dWFsIGVsZW1lbnQgdG8gY3JlYXRlTW9ycGgiKTsKLSAgICB9Ci0KLSAgICBpZiAoIWNvbnRl
eHR1YWxFbGVtZW50ICYmIHBhcmVudCAmJiBwYXJlbnQubm9kZVR5cGUgPT09IDEpIHsKLSAgICAg
IGNvbnRleHR1YWxFbGVtZW50ID0gcGFyZW50OwotICAgIH0KLSAgICB2YXIgbW9ycGggPSBuZXcg
dGhpcy5Nb3JwaENsYXNzKHRoaXMsIGNvbnRleHR1YWxFbGVtZW50KTsKLSAgICBtb3JwaC5maXJz
dE5vZGUgPSBzdGFydDsKLSAgICBtb3JwaC5sYXN0Tm9kZSA9IGVuZDsKLSAgICByZXR1cm4gbW9y
cGg7Ci0gIH07Ci0KLSAgcHJvdG90eXBlLmNyZWF0ZUZyYWdtZW50TW9ycGggPSBmdW5jdGlvbiAo
Y29udGV4dHVhbEVsZW1lbnQpIHsKLSAgICBpZiAoY29udGV4dHVhbEVsZW1lbnQgJiYgY29udGV4
dHVhbEVsZW1lbnQubm9kZVR5cGUgPT09IDExKSB7Ci0gICAgICB0aHJvdyBuZXcgRXJyb3IoIkNh
bm5vdCBwYXNzIGEgZnJhZ21lbnQgYXMgdGhlIGNvbnRleHR1YWwgZWxlbWVudCB0byBjcmVhdGVN
b3JwaCIpOwotICAgIH0KLQotICAgIHZhciBmcmFnbWVudCA9IHRoaXMuY3JlYXRlRG9jdW1lbnRG
cmFnbWVudCgpOwotICAgIHJldHVybiBfaHRtbGJhcnNSdW50aW1lTW9ycGguZGVmYXVsdC5jcmVh
dGUodGhpcywgY29udGV4dHVhbEVsZW1lbnQsIGZyYWdtZW50KTsKLSAgfTsKLQotICBwcm90b3R5
cGUucmVwbGFjZUNvbnRlbnRXaXRoTW9ycGggPSBmdW5jdGlvbiAoZWxlbWVudCkgewotICAgIHZh
ciBmaXJzdENoaWxkID0gZWxlbWVudC5maXJzdENoaWxkOwotCi0gICAgaWYgKCFmaXJzdENoaWxk
KSB7Ci0gICAgICB2YXIgY29tbWVudCA9IHRoaXMuY3JlYXRlQ29tbWVudCgnJyk7Ci0gICAgICB0
aGlzLmFwcGVuZENoaWxkKGVsZW1lbnQsIGNvbW1lbnQpOwotICAgICAgcmV0dXJuIF9odG1sYmFy
c1J1bnRpbWVNb3JwaC5kZWZhdWx0LmNyZWF0ZSh0aGlzLCBlbGVtZW50LCBjb21tZW50KTsKLSAg
ICB9IGVsc2UgewotICAgICAgdmFyIG1vcnBoID0gX2h0bWxiYXJzUnVudGltZU1vcnBoLmRlZmF1
bHQuYXR0YWNoKHRoaXMsIGVsZW1lbnQsIGZpcnN0Q2hpbGQsIGVsZW1lbnQubGFzdENoaWxkKTsK
LSAgICAgIG1vcnBoLmNsZWFyKCk7Ci0gICAgICByZXR1cm4gbW9ycGg7Ci0gICAgfQotICB9Owot
Ci0gIHByb3RvdHlwZS5jcmVhdGVVbnNhZmVNb3JwaCA9IGZ1bmN0aW9uIChwYXJlbnQsIHN0YXJ0
LCBlbmQsIGNvbnRleHR1YWxFbGVtZW50KSB7Ci0gICAgdmFyIG1vcnBoID0gdGhpcy5jcmVhdGVN
b3JwaChwYXJlbnQsIHN0YXJ0LCBlbmQsIGNvbnRleHR1YWxFbGVtZW50KTsKLSAgICBtb3JwaC5w
YXJzZVRleHRBc0hUTUwgPSB0cnVlOwotICAgIHJldHVybiBtb3JwaDsKLSAgfTsKLQotICAvLyBU
aGlzIGhlbHBlciBpcyBqdXN0IHRvIGtlZXAgdGhlIHRlbXBsYXRlcyBnb29kIGxvb2tpbmcsCi0g
IC8vIHBhc3NpbmcgaW50ZWdlcnMgaW5zdGVhZCBvZiBlbGVtZW50IHJlZmVyZW5jZXMuCi0gIHBy
b3RvdHlwZS5jcmVhdGVNb3JwaEF0ID0gZnVuY3Rpb24gKHBhcmVudCwgc3RhcnRJbmRleCwgZW5k
SW5kZXgsIGNvbnRleHR1YWxFbGVtZW50KSB7Ci0gICAgdmFyIHNpbmdsZSA9IHN0YXJ0SW5kZXgg
PT09IGVuZEluZGV4OwotICAgIHZhciBzdGFydCA9IHRoaXMuY2hpbGRBdEluZGV4KHBhcmVudCwg
c3RhcnRJbmRleCk7Ci0gICAgdmFyIGVuZCA9IHNpbmdsZSA/IHN0YXJ0IDogdGhpcy5jaGlsZEF0
SW5kZXgocGFyZW50LCBlbmRJbmRleCk7Ci0gICAgcmV0dXJuIHRoaXMuY3JlYXRlTW9ycGgocGFy
ZW50LCBzdGFydCwgZW5kLCBjb250ZXh0dWFsRWxlbWVudCk7Ci0gIH07Ci0KLSAgcHJvdG90eXBl
LmNyZWF0ZVVuc2FmZU1vcnBoQXQgPSBmdW5jdGlvbiAocGFyZW50LCBzdGFydEluZGV4LCBlbmRJ
bmRleCwgY29udGV4dHVhbEVsZW1lbnQpIHsKLSAgICB2YXIgbW9ycGggPSB0aGlzLmNyZWF0ZU1v
cnBoQXQocGFyZW50LCBzdGFydEluZGV4LCBlbmRJbmRleCwgY29udGV4dHVhbEVsZW1lbnQpOwot
ICAgIG1vcnBoLnBhcnNlVGV4dEFzSFRNTCA9IHRydWU7Ci0gICAgcmV0dXJuIG1vcnBoOwotICB9
OwotCi0gIHByb3RvdHlwZS5pbnNlcnRNb3JwaEJlZm9yZSA9IGZ1bmN0aW9uIChlbGVtZW50LCBy
ZWZlcmVuY2VDaGlsZCwgY29udGV4dHVhbEVsZW1lbnQpIHsKLSAgICB2YXIgaW5zZXJ0aW9uID0g
dGhpcy5kb2N1bWVudC5jcmVhdGVDb21tZW50KCcnKTsKLSAgICBlbGVtZW50Lmluc2VydEJlZm9y
ZShpbnNlcnRpb24sIHJlZmVyZW5jZUNoaWxkKTsKLSAgICByZXR1cm4gdGhpcy5jcmVhdGVNb3Jw
aChlbGVtZW50LCBpbnNlcnRpb24sIGluc2VydGlvbiwgY29udGV4dHVhbEVsZW1lbnQpOwotICB9
OwotCi0gIHByb3RvdHlwZS5hcHBlbmRNb3JwaCA9IGZ1bmN0aW9uIChlbGVtZW50LCBjb250ZXh0
dWFsRWxlbWVudCkgewotICAgIHZhciBpbnNlcnRpb24gPSB0aGlzLmRvY3VtZW50LmNyZWF0ZUNv
bW1lbnQoJycpOwotICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoaW5zZXJ0aW9uKTsKLSAgICByZXR1
cm4gdGhpcy5jcmVhdGVNb3JwaChlbGVtZW50LCBpbnNlcnRpb24sIGluc2VydGlvbiwgY29udGV4
dHVhbEVsZW1lbnQpOwotICB9OwotCi0gIHByb3RvdHlwZS5pbnNlcnRCb3VuZGFyeSA9IGZ1bmN0
aW9uIChmcmFnbWVudCwgaW5kZXgpIHsKLSAgICAvLyB0aGlzIHdpbGwgYWx3YXlzIGJlIG51bGwg
b3IgZmlyc3RDaGlsZAotICAgIHZhciBjaGlsZCA9IGluZGV4ID09PSBudWxsID8gbnVsbCA6IHRo
aXMuY2hpbGRBdEluZGV4KGZyYWdtZW50LCBpbmRleCk7Ci0gICAgdGhpcy5pbnNlcnRCZWZvcmUo
ZnJhZ21lbnQsIHRoaXMuY3JlYXRlVGV4dE5vZGUoJycpLCBjaGlsZCk7Ci0gIH07Ci0KLSAgcHJv
dG90eXBlLnNldE1vcnBoSFRNTCA9IGZ1bmN0aW9uIChtb3JwaCwgaHRtbCkgewotICAgIG1vcnBo
LnNldEhUTUwoaHRtbCk7Ci0gIH07Ci0KLSAgcHJvdG90eXBlLnBhcnNlSFRNTCA9IGZ1bmN0aW9u
IChodG1sLCBjb250ZXh0dWFsRWxlbWVudCkgewotICAgIHZhciBjaGlsZE5vZGVzOwotCi0gICAg
aWYgKGludGVyaW9yTmFtZXNwYWNlKGNvbnRleHR1YWxFbGVtZW50KSA9PT0gX2RvbUhlbHBlckJ1
aWxkSHRtbERvbS5zdmdOYW1lc3BhY2UpIHsKLSAgICAgIGNoaWxkTm9kZXMgPSBidWlsZFNWR0RP
TShodG1sLCB0aGlzKTsKLSAgICB9IGVsc2UgewotICAgICAgdmFyIG5vZGVzID0gX2RvbUhlbHBl
ckJ1aWxkSHRtbERvbS5idWlsZEhUTUxET00oaHRtbCwgY29udGV4dHVhbEVsZW1lbnQsIHRoaXMp
OwotICAgICAgaWYgKGRldGVjdE9taXR0ZWRTdGFydFRhZyhodG1sLCBjb250ZXh0dWFsRWxlbWVu
dCkpIHsKLSAgICAgICAgdmFyIG5vZGUgPSBub2Rlc1swXTsKLSAgICAgICAgd2hpbGUgKG5vZGUg
JiYgbm9kZS5ub2RlVHlwZSAhPT0gMSkgewotICAgICAgICAgIG5vZGUgPSBub2RlLm5leHRTaWJs
aW5nOwotICAgICAgICB9Ci0gICAgICAgIGNoaWxkTm9kZXMgPSBub2RlLmNoaWxkTm9kZXM7Ci0g
ICAgICB9IGVsc2UgewotICAgICAgICBjaGlsZE5vZGVzID0gbm9kZXM7Ci0gICAgICB9Ci0gICAg
fQotCi0gICAgLy8gQ29weSBub2RlIGxpc3QgdG8gYSBmcmFnbWVudC4KLSAgICB2YXIgZnJhZ21l
bnQgPSB0aGlzLmRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKLQotICAgIGlmIChj
aGlsZE5vZGVzICYmIGNoaWxkTm9kZXMubGVuZ3RoID4gMCkgewotICAgICAgdmFyIGN1cnJlbnRO
b2RlID0gY2hpbGROb2Rlc1swXTsKLQotICAgICAgLy8gV2UgcHJlcGVuZCBhbiA8b3B0aW9uPiB0
byA8c2VsZWN0PiBib3hlcyB0byBhYnNvcmIgYW55IGJyb3dzZXIgYnVncwotICAgICAgLy8gcmVs
YXRlZCB0byBhdXRvLXNlbGVjdCBiZWhhdmlvci4gU2tpcCBwYXN0IGl0LgotICAgICAgaWYgKGNv
bnRleHR1YWxFbGVtZW50LnRhZ05hbWUgPT09ICdTRUxFQ1QnKSB7Ci0gICAgICAgIGN1cnJlbnRO
b2RlID0gY3VycmVudE5vZGUubmV4dFNpYmxpbmc7Ci0gICAgICB9Ci0KLSAgICAgIHdoaWxlIChj
dXJyZW50Tm9kZSkgewotICAgICAgICB2YXIgdGVtcE5vZGUgPSBjdXJyZW50Tm9kZTsKLSAgICAg
ICAgY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS5uZXh0U2libGluZzsKLQotICAgICAgICBmcmFn
bWVudC5hcHBlbmRDaGlsZCh0ZW1wTm9kZSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJu
IGZyYWdtZW50OwotICB9OwotCi0gIHZhciBub2RlVVJMOwotICB2YXIgcGFyc2luZ05vZGU7Ci0K
LSAgZnVuY3Rpb24gaW5zdGFsbEVudmlyb25tZW50U3BlY2lmaWNNZXRob2RzKGRvbUhlbHBlcikg
ewotICAgIHZhciBwcm90b2NvbCA9IGJyb3dzZXJQcm90b2NvbEZvclVSTC5jYWxsKGRvbUhlbHBl
ciwgJ2Zvb2JhcjpiYXonKTsKLQotICAgIC8vIFRlc3QgdG8gc2VlIGlmIG91ciBET00gaW1wbGVt
ZW50YXRpb24gcGFyc2VzCi0gICAgLy8gYW5kIG5vcm1hbGl6ZXMgVVJMcy4KLSAgICBpZiAocHJv
dG9jb2wgPT09ICdmb29iYXI6JykgewotICAgICAgLy8gU3dhcCBpbiB0aGUgbWV0aG9kIHRoYXQg
ZG9lc24ndCBkbyB0aGlzIHRlc3Qgbm93IHRoYXQKLSAgICAgIC8vIHdlIGtub3cgaXQgd29ya3Mu
Ci0gICAgICBkb21IZWxwZXIucHJvdG9jb2xGb3JVUkwgPSBicm93c2VyUHJvdG9jb2xGb3JVUkw7
Ci0gICAgfSBlbHNlIGlmICh0eXBlb2YgVVJMID09PSAnb2JqZWN0JykgewotICAgICAgLy8gVVJM
IGdsb2JhbGx5IHByb3ZpZGVkLCBsaWtlbHkgZnJvbSBGYXN0Qm9vdCdzIHNhbmRib3gKLSAgICAg
IG5vZGVVUkwgPSBVUkw7Ci0gICAgICBkb21IZWxwZXIucHJvdG9jb2xGb3JVUkwgPSBub2RlUHJv
dG9jb2xGb3JVUkw7Ci0gICAgfSBlbHNlIGlmICh0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0JyAm
JiB0eXBlb2YgbW9kdWxlLnJlcXVpcmUgPT09ICdmdW5jdGlvbicpIHsKLSAgICAgIC8vIE90aGVy
d2lzZSwgd2UgbmVlZCB0byBmYWxsIGJhY2sgdG8gb3VyIG93biBVUkwgcGFyc2luZy4KLSAgICAg
IC8vIEdsb2JhbCBgcmVxdWlyZWAgaXMgc2hhZG93ZWQgYnkgRW1iZXIncyBsb2FkZXIgc28gd2Ug
aGF2ZSB0byB1c2UgdGhlIGZ1bGx5Ci0gICAgICAvLyBxdWFsaWZpZWQgYG1vZHVsZS5yZXF1aXJl
YC4KLSAgICAgIG5vZGVVUkwgPSBtb2R1bGUucmVxdWlyZSgndXJsJyk7Ci0gICAgICBkb21IZWxw
ZXIucHJvdG9jb2xGb3JVUkwgPSBub2RlUHJvdG9jb2xGb3JVUkw7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgIHRocm93IG5ldyBFcnJvcigiRE9NIEhlbHBlciBjb3VsZCBub3QgZmluZCB2YWxpZCBVUkwg
cGFyc2luZyBtZWNoYW5pc20iKTsKLSAgICB9Ci0KLSAgICAvLyBBIFNpbXBsZURPTS1zcGVjaWZp
YyBleHRlbnNpb24gdGhhdCBhbGxvd3MgdXMgdG8gcGxhY2UgSFRNTCBkaXJlY3RseQotICAgIC8v
IGludG8gdGhlIERPTSB0cmVlLCBmb3Igd2hlbiB0aGUgb3V0cHV0IHRhcmdldCBpcyBhbHdheXMg
c2VyaWFsaXplZCBIVE1MLgotICAgIGlmIChkb21IZWxwZXIuZG9jdW1lbnQuY3JlYXRlUmF3SFRN
TFNlY3Rpb24pIHsKLSAgICAgIGRvbUhlbHBlci5zZXRNb3JwaEhUTUwgPSBub2RlU2V0TW9ycGhI
VE1MOwotICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIG5vZGVTZXRNb3JwaEhUTUwobW9ycGgsIGh0
bWwpIHsKLSAgICB2YXIgc2VjdGlvbiA9IHRoaXMuZG9jdW1lbnQuY3JlYXRlUmF3SFRNTFNlY3Rp
b24oaHRtbCk7Ci0gICAgbW9ycGguc2V0Tm9kZShzZWN0aW9uKTsKLSAgfQotCi0gIGZ1bmN0aW9u
IGJyb3dzZXJQcm90b2NvbEZvclVSTCh1cmwpIHsKLSAgICBpZiAoIXBhcnNpbmdOb2RlKSB7Ci0g
ICAgICBwYXJzaW5nTm9kZSA9IHRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpOwotICAg
IH0KLQotICAgIHBhcnNpbmdOb2RlLmhyZWYgPSB1cmw7Ci0gICAgcmV0dXJuIHBhcnNpbmdOb2Rl
LnByb3RvY29sOwotICB9Ci0KLSAgZnVuY3Rpb24gbm9kZVByb3RvY29sRm9yVVJMKHVybCkgewot
ICAgIHZhciBwcm90b2NvbCA9IG5vZGVVUkwucGFyc2UodXJsKS5wcm90b2NvbDsKLSAgICByZXR1
cm4gcHJvdG9jb2wgPT09IG51bGwgPyAnOicgOiBwcm90b2NvbDsKLSAgfQotCi0gIGV4cG9ydHMu
ZGVmYXVsdCA9IERPTUhlbHBlcjsKLX0pOwotZW5pZmVkKCdkb20taGVscGVyL2J1aWxkLWh0bWwt
ZG9tJywgWydleHBvcnRzJ10sIGZ1bmN0aW9uIChleHBvcnRzKSB7Ci0gIC8qIGdsb2JhbCBYTUxT
ZXJpYWxpemVyOmZhbHNlICovCi0gICd1c2Ugc3RyaWN0JzsKLQotICB2YXIgc3ZnSFRNTEludGVn
cmF0aW9uUG9pbnRzID0geyBmb3JlaWduT2JqZWN0OiAxLCBkZXNjOiAxLCB0aXRsZTogMSB9Owot
ICBleHBvcnRzLnN2Z0hUTUxJbnRlZ3JhdGlvblBvaW50cyA9IHN2Z0hUTUxJbnRlZ3JhdGlvblBv
aW50czsKLSAgdmFyIHN2Z05hbWVzcGFjZSA9ICdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zyc7
Ci0KLSAgZXhwb3J0cy5zdmdOYW1lc3BhY2UgPSBzdmdOYW1lc3BhY2U7Ci0gIHZhciBkb2MgPSB0
eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnID8gZmFsc2UgOiBkb2N1bWVudDsKLQotICAv
LyBTYWZhcmkgZG9lcyBub3QgbGlrZSB1c2luZyBpbm5lckhUTUwgb24gU1ZHIEhUTUwgaW50ZWdy
YXRpb24KLSAgLy8gcG9pbnRzIChkZXNjL3RpdGxlL2ZvcmVpZ25PYmplY3QpLgotICB2YXIgbmVl
ZHNJbnRlZ3JhdGlvblBvaW50Rml4ID0gZG9jICYmIChmdW5jdGlvbiAoZG9jdW1lbnQpIHsKLSAg
ICBpZiAoZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TID09PSB1bmRlZmluZWQpIHsKLSAgICAgIHJl
dHVybjsKLSAgICB9Ci0gICAgLy8gSW4gRkYgdGl0bGUgd2lsbCBub3QgYWNjZXB0IGlubmVySFRN
TC4KLSAgICB2YXIgdGVzdEVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHN2Z05hbWVzcGFj
ZSwgJ3RpdGxlJyk7Ci0gICAgdGVzdEVsLmlubmVySFRNTCA9ICI8ZGl2PjwvZGl2PiI7Ci0gICAg
cmV0dXJuIHRlc3RFbC5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMCB8fCB0ZXN0RWwuY2hpbGROb2Rl
c1swXS5ub2RlVHlwZSAhPT0gMTsKLSAgfSkoZG9jKTsKLQotICAvLyBJbnRlcm5ldCBFeHBsb3Jl
ciBwcmlvciB0byA5IGRvZXMgbm90IGFsbG93IHNldHRpbmcgaW5uZXJIVE1MIGlmIHRoZSBmaXJz
dCBlbGVtZW50Ci0gIC8vIGlzIGEgInplcm8tc2NvcGUiIGVsZW1lbnQuIFRoaXMgcHJvYmxlbSBj
YW4gYmUgd29ya2VkIGFyb3VuZCBieSBtYWtpbmcKLSAgLy8gdGhlIGZpcnN0IG5vZGUgYW4gaW52
aXNpYmxlIHRleHQgbm9kZS4gV2UsIGxpa2UgTW9kZXJuaXpyLCB1c2UgJnNoeTsKLSAgdmFyIG5l
ZWRzU2h5ID0gZG9jICYmIChmdW5jdGlvbiAoZG9jdW1lbnQpIHsKLSAgICB2YXIgdGVzdEVsID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7Ci0gICAgdGVzdEVsLmlubmVySFRNTCA9ICI8
ZGl2PjwvZGl2PiI7Ci0gICAgdGVzdEVsLmZpcnN0Q2hpbGQuaW5uZXJIVE1MID0gIjxzY3JpcHQ+
PFwvc2NyaXB0PiI7Ci0gICAgcmV0dXJuIHRlc3RFbC5maXJzdENoaWxkLmlubmVySFRNTCA9PT0g
Jyc7Ci0gIH0pKGRvYyk7Ci0KLSAgLy8gSUUgOCAoYW5kIGxpa2VseSBlYXJsaWVyKSBsaWtlcyB0
byBtb3ZlIHdoaXRlc3BhY2UgcHJlY2VlZGluZwotICAvLyBhIHNjcmlwdCB0YWcgdG8gYXBwZWFy
IGFmdGVyIGl0LiBUaGlzIG1lYW5zIHRoYXQgd2UgY2FuCi0gIC8vIGFjY2lkZW50YWxseSByZW1v
dmUgd2hpdGVzcGFjZSB3aGVuIHVwZGF0aW5nIGEgbW9ycGguCi0gIHZhciBtb3Zlc1doaXRlc3Bh
Y2UgPSBkb2MgJiYgKGZ1bmN0aW9uIChkb2N1bWVudCkgewotICAgIHZhciB0ZXN0RWwgPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKLSAgICB0ZXN0RWwuaW5uZXJIVE1MID0gIlRlc3Q6
IDxzY3JpcHQgdHlwZT0ndGV4dC94LXBsYWNlaG9sZGVyJz48XC9zY3JpcHQ+VmFsdWUiOwotICAg
IHJldHVybiB0ZXN0RWwuY2hpbGROb2Rlc1swXS5ub2RlVmFsdWUgPT09ICdUZXN0OicgJiYgdGVz
dEVsLmNoaWxkTm9kZXNbMl0ubm9kZVZhbHVlID09PSAnIFZhbHVlJzsKLSAgfSkoZG9jKTsKLQot
ICB2YXIgdGFnTmFtZXNSZXF1aXJpbmdJbm5lckhUTUxGaXggPSBkb2MgJiYgKGZ1bmN0aW9uIChk
b2N1bWVudCkgewotICAgIHZhciB0YWdOYW1lc1JlcXVpcmluZ0lubmVySFRNTEZpeDsKLSAgICAv
LyBJRSA5IGFuZCBlYXJsaWVyIGRvbid0IGFsbG93IHVzIHRvIHNldCBpbm5lckhUTUwgb24gY29s
LCBjb2xncm91cCwgZnJhbWVzZXQsCi0gICAgLy8gaHRtbCwgc3R5bGUsIHRhYmxlLCB0Ym9keSwg
dGZvb3QsIHRoZWFkLCB0aXRsZSwgdHIuIERldGVjdCB0aGlzIGFuZCBhZGQKLSAgICAvLyB0aGVt
IHRvIGFuIGluaXRpYWwgbGlzdCBvZiBjb3JyZWN0ZWQgdGFncy4KLSAgICAvLwotICAgIC8vIEhl
cmUgd2UgYXJlIG9ubHkgZGVhbGluZyB3aXRoIHRoZSBvbmVzIHdoaWNoIGNhbiBoYXZlIGNoaWxk
IG5vZGVzLgotICAgIC8vCi0gICAgdmFyIHRhYmxlTmVlZHNJbm5lckhUTUxGaXg7Ci0gICAgdmFy
IHRhYmxlSW5uZXJIVE1MVGVzdEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0YWJs
ZScpOwotICAgIHRyeSB7Ci0gICAgICB0YWJsZUlubmVySFRNTFRlc3RFbGVtZW50LmlubmVySFRN
TCA9ICc8dGJvZHk+PC90Ym9keT4nOwotICAgIH0gY2F0Y2ggKGUpIHt9IGZpbmFsbHkgewotICAg
ICAgdGFibGVOZWVkc0lubmVySFRNTEZpeCA9IHRhYmxlSW5uZXJIVE1MVGVzdEVsZW1lbnQuY2hp
bGROb2Rlcy5sZW5ndGggPT09IDA7Ci0gICAgfQotICAgIGlmICh0YWJsZU5lZWRzSW5uZXJIVE1M
Rml4KSB7Ci0gICAgICB0YWdOYW1lc1JlcXVpcmluZ0lubmVySFRNTEZpeCA9IHsKLSAgICAgICAg
Y29sZ3JvdXA6IFsndGFibGUnXSwKLSAgICAgICAgdGFibGU6IFtdLAotICAgICAgICB0Ym9keTog
Wyd0YWJsZSddLAotICAgICAgICB0Zm9vdDogWyd0YWJsZSddLAotICAgICAgICB0aGVhZDogWyd0
YWJsZSddLAotICAgICAgICB0cjogWyd0YWJsZScsICd0Ym9keSddCi0gICAgICB9OwotICAgIH0K
LQotICAgIC8vIElFIDggZG9lc24ndCBhbGxvdyBzZXR0aW5nIGlubmVySFRNTCBvbiBhIHNlbGVj
dCB0YWcuIERldGVjdCB0aGlzIGFuZAotICAgIC8vIGFkZCBpdCB0byB0aGUgbGlzdCBvZiBjb3Jy
ZWN0ZWQgdGFncy4KLSAgICAvLwotICAgIHZhciBzZWxlY3RJbm5lckhUTUxUZXN0RWxlbWVudCA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NlbGVjdCcpOwotICAgIHNlbGVjdElubmVySFRNTFRl
c3RFbGVtZW50LmlubmVySFRNTCA9ICc8b3B0aW9uPjwvb3B0aW9uPic7Ci0gICAgaWYgKCFzZWxl
Y3RJbm5lckhUTUxUZXN0RWxlbWVudC5jaGlsZE5vZGVzWzBdKSB7Ci0gICAgICB0YWdOYW1lc1Jl
cXVpcmluZ0lubmVySFRNTEZpeCA9IHRhZ05hbWVzUmVxdWlyaW5nSW5uZXJIVE1MRml4IHx8IHt9
OwotICAgICAgdGFnTmFtZXNSZXF1aXJpbmdJbm5lckhUTUxGaXguc2VsZWN0ID0gW107Ci0gICAg
fQotICAgIHJldHVybiB0YWdOYW1lc1JlcXVpcmluZ0lubmVySFRNTEZpeDsKLSAgfSkoZG9jKTsK
LQotICBmdW5jdGlvbiBzY3JpcHRTYWZlSW5uZXJIVE1MKGVsZW1lbnQsIGh0bWwpIHsKLSAgICAv
LyB3aXRob3V0IGEgbGVhZGluZyB0ZXh0IG5vZGUsIElFIHdpbGwgZHJvcCBhIGxlYWRpbmcgc2Ny
aXB0IHRhZy4KLSAgICBodG1sID0gJyZzaHk7JyArIGh0bWw7Ci0KLSAgICBlbGVtZW50LmlubmVy
SFRNTCA9IGh0bWw7Ci0KLSAgICB2YXIgbm9kZXMgPSBlbGVtZW50LmNoaWxkTm9kZXM7Ci0KLSAg
ICAvLyBMb29rIGZvciAmc2h5OyB0byByZW1vdmUgaXQuCi0gICAgdmFyIHNoeUVsZW1lbnQgPSBu
b2Rlc1swXTsKLSAgICB3aGlsZSAoc2h5RWxlbWVudC5ub2RlVHlwZSA9PT0gMSAmJiAhc2h5RWxl
bWVudC5ub2RlTmFtZSkgewotICAgICAgc2h5RWxlbWVudCA9IHNoeUVsZW1lbnQuZmlyc3RDaGls
ZDsKLSAgICB9Ci0gICAgLy8gQXQgdGhpcyBwb2ludCBpdCdzIHRoZSBhY3R1YWwgdW5pY29kZSBj
aGFyYWN0ZXIuCi0gICAgaWYgKHNoeUVsZW1lbnQubm9kZVR5cGUgPT09IDMgJiYgc2h5RWxlbWVu
dC5ub2RlVmFsdWUuY2hhckF0KDApID09PSAiXHUwMEFEIikgewotICAgICAgdmFyIG5ld1ZhbHVl
ID0gc2h5RWxlbWVudC5ub2RlVmFsdWUuc2xpY2UoMSk7Ci0gICAgICBpZiAobmV3VmFsdWUubGVu
Z3RoKSB7Ci0gICAgICAgIHNoeUVsZW1lbnQubm9kZVZhbHVlID0gc2h5RWxlbWVudC5ub2RlVmFs
dWUuc2xpY2UoMSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBzaHlFbGVtZW50LnBhcmVudE5v
ZGUucmVtb3ZlQ2hpbGQoc2h5RWxlbWVudCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJu
IG5vZGVzOwotICB9Ci0KLSAgZnVuY3Rpb24gYnVpbGRET01XaXRoRml4KGh0bWwsIGNvbnRleHR1
YWxFbGVtZW50KSB7Ci0gICAgdmFyIHRhZ05hbWUgPSBjb250ZXh0dWFsRWxlbWVudC50YWdOYW1l
OwotCi0gICAgLy8gRmlyZWZveCB2ZXJzaW9ucyA8IDExIGRvIG5vdCBoYXZlIHN1cHBvcnQgZm9y
IGVsZW1lbnQub3V0ZXJIVE1MLgotICAgIHZhciBvdXRlckhUTUwgPSBjb250ZXh0dWFsRWxlbWVu
dC5vdXRlckhUTUwgfHwgbmV3IFhNTFNlcmlhbGl6ZXIoKS5zZXJpYWxpemVUb1N0cmluZyhjb250
ZXh0dWFsRWxlbWVudCk7Ci0gICAgaWYgKCFvdXRlckhUTUwpIHsKLSAgICAgIHRocm93ICJDYW4n
dCBzZXQgaW5uZXJIVE1MIG9uICIgKyB0YWdOYW1lICsgIiBpbiB0aGlzIGJyb3dzZXIiOwotICAg
IH0KLQotICAgIGh0bWwgPSBmaXhTZWxlY3QoaHRtbCwgY29udGV4dHVhbEVsZW1lbnQpOwotCi0g
ICAgdmFyIHdyYXBwaW5nVGFncyA9IHRhZ05hbWVzUmVxdWlyaW5nSW5uZXJIVE1MRml4W3RhZ05h
bWUudG9Mb3dlckNhc2UoKV07Ci0KLSAgICB2YXIgc3RhcnRUYWcgPSBvdXRlckhUTUwubWF0Y2go
bmV3IFJlZ0V4cCgiPCIgKyB0YWdOYW1lICsgIihbXj5dKik+IiwgJ2knKSlbMF07Ci0gICAgdmFy
IGVuZFRhZyA9ICc8LycgKyB0YWdOYW1lICsgJz4nOwotCi0gICAgdmFyIHdyYXBwZWRIVE1MID0g
W3N0YXJ0VGFnLCBodG1sLCBlbmRUYWddOwotCi0gICAgdmFyIGkgPSB3cmFwcGluZ1RhZ3MubGVu
Z3RoOwotICAgIHZhciB3cmFwcGVkRGVwdGggPSAxICsgaTsKLSAgICB3aGlsZSAoaS0tKSB7Ci0g
ICAgICB3cmFwcGVkSFRNTC51bnNoaWZ0KCc8JyArIHdyYXBwaW5nVGFnc1tpXSArICc+Jyk7Ci0g
ICAgICB3cmFwcGVkSFRNTC5wdXNoKCc8LycgKyB3cmFwcGluZ1RhZ3NbaV0gKyAnPicpOwotICAg
IH0KLQotICAgIHZhciB3cmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7Ci0g
ICAgc2NyaXB0U2FmZUlubmVySFRNTCh3cmFwcGVyLCB3cmFwcGVkSFRNTC5qb2luKCcnKSk7Ci0g
ICAgdmFyIGVsZW1lbnQgPSB3cmFwcGVyOwotICAgIHdoaWxlICh3cmFwcGVkRGVwdGgtLSkgewot
ICAgICAgZWxlbWVudCA9IGVsZW1lbnQuZmlyc3RDaGlsZDsKLSAgICAgIHdoaWxlIChlbGVtZW50
ICYmIGVsZW1lbnQubm9kZVR5cGUgIT09IDEpIHsKLSAgICAgICAgZWxlbWVudCA9IGVsZW1lbnQu
bmV4dFNpYmxpbmc7Ci0gICAgICB9Ci0gICAgfQotICAgIHdoaWxlIChlbGVtZW50ICYmIGVsZW1l
bnQudGFnTmFtZSAhPT0gdGFnTmFtZSkgewotICAgICAgZWxlbWVudCA9IGVsZW1lbnQubmV4dFNp
Ymxpbmc7Ci0gICAgfQotICAgIHJldHVybiBlbGVtZW50ID8gZWxlbWVudC5jaGlsZE5vZGVzIDog
W107Ci0gIH0KLQotICB2YXIgYnVpbGRET007Ci0gIGlmIChuZWVkc1NoeSkgewotICAgIGJ1aWxk
RE9NID0gZnVuY3Rpb24gYnVpbGRET00oaHRtbCwgY29udGV4dHVhbEVsZW1lbnQsIGRvbSkgewot
ICAgICAgaHRtbCA9IGZpeFNlbGVjdChodG1sLCBjb250ZXh0dWFsRWxlbWVudCk7Ci0KLSAgICAg
IGNvbnRleHR1YWxFbGVtZW50ID0gZG9tLmNsb25lTm9kZShjb250ZXh0dWFsRWxlbWVudCwgZmFs
c2UpOwotICAgICAgc2NyaXB0U2FmZUlubmVySFRNTChjb250ZXh0dWFsRWxlbWVudCwgaHRtbCk7
Ci0gICAgICByZXR1cm4gY29udGV4dHVhbEVsZW1lbnQuY2hpbGROb2RlczsKLSAgICB9OwotICB9
IGVsc2UgewotICAgIGJ1aWxkRE9NID0gZnVuY3Rpb24gYnVpbGRET00oaHRtbCwgY29udGV4dHVh
bEVsZW1lbnQsIGRvbSkgewotICAgICAgaHRtbCA9IGZpeFNlbGVjdChodG1sLCBjb250ZXh0dWFs
RWxlbWVudCk7Ci0KLSAgICAgIGNvbnRleHR1YWxFbGVtZW50ID0gZG9tLmNsb25lTm9kZShjb250
ZXh0dWFsRWxlbWVudCwgZmFsc2UpOwotICAgICAgY29udGV4dHVhbEVsZW1lbnQuaW5uZXJIVE1M
ID0gaHRtbDsKLSAgICAgIHJldHVybiBjb250ZXh0dWFsRWxlbWVudC5jaGlsZE5vZGVzOwotICAg
IH07Ci0gIH0KLQotICBmdW5jdGlvbiBmaXhTZWxlY3QoaHRtbCwgY29udGV4dHVhbEVsZW1lbnQp
IHsKLSAgICBpZiAoY29udGV4dHVhbEVsZW1lbnQudGFnTmFtZSA9PT0gJ1NFTEVDVCcpIHsKLSAg
ICAgIGh0bWwgPSAiPG9wdGlvbj48L29wdGlvbj4iICsgaHRtbDsKLSAgICB9Ci0KLSAgICByZXR1
cm4gaHRtbDsKLSAgfQotCi0gIHZhciBidWlsZElFU2FmZURPTTsKLSAgaWYgKHRhZ05hbWVzUmVx
dWlyaW5nSW5uZXJIVE1MRml4IHx8IG1vdmVzV2hpdGVzcGFjZSkgewotICAgIGJ1aWxkSUVTYWZl
RE9NID0gZnVuY3Rpb24gYnVpbGRJRVNhZmVET00oaHRtbCwgY29udGV4dHVhbEVsZW1lbnQsIGRv
bSkgewotICAgICAgLy8gTWFrZSBhIGxpc3Qgb2YgdGhlIGxlYWRpbmcgdGV4dCBvbiBzY3JpcHQg
bm9kZXMuIEluY2x1ZGUKLSAgICAgIC8vIHNjcmlwdCB0YWdzIHdpdGhvdXQgYW55IHdoaXRlc3Bh
Y2UgZm9yIGVhc2llciBwcm9jZXNzaW5nIGxhdGVyLgotICAgICAgdmFyIHNwYWNlc0JlZm9yZSA9
IFtdOwotICAgICAgdmFyIHNwYWNlc0FmdGVyID0gW107Ci0gICAgICBpZiAodHlwZW9mIGh0bWwg
PT09ICdzdHJpbmcnKSB7Ci0gICAgICAgIGh0bWwgPSBodG1sLnJlcGxhY2UoLyhccyopKDxzY3Jp
cHQpL2csIGZ1bmN0aW9uIChtYXRjaCwgc3BhY2VzLCB0YWcpIHsKLSAgICAgICAgICBzcGFjZXNC
ZWZvcmUucHVzaChzcGFjZXMpOwotICAgICAgICAgIHJldHVybiB0YWc7Ci0gICAgICAgIH0pOwot
Ci0gICAgICAgIGh0bWwgPSBodG1sLnJlcGxhY2UoLyg8XC9zY3JpcHQ+KShccyopL2csIGZ1bmN0
aW9uIChtYXRjaCwgdGFnLCBzcGFjZXMpIHsKLSAgICAgICAgICBzcGFjZXNBZnRlci5wdXNoKHNw
YWNlcyk7Ci0gICAgICAgICAgcmV0dXJuIHRhZzsKLSAgICAgICAgfSk7Ci0gICAgICB9Ci0KLSAg
ICAgIC8vIEZldGNoIG5vZGVzCi0gICAgICB2YXIgbm9kZXM7Ci0gICAgICBpZiAodGFnTmFtZXNS
ZXF1aXJpbmdJbm5lckhUTUxGaXhbY29udGV4dHVhbEVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2Fz
ZSgpXSkgewotICAgICAgICAvLyBidWlsZERPTVdpdGhGaXggdXNlcyBzdHJpbmcgd3JhcHBlcnMg
Zm9yIHByb2JsZW1hdGljIGlubmVySFRNTC4KLSAgICAgICAgbm9kZXMgPSBidWlsZERPTVdpdGhG
aXgoaHRtbCwgY29udGV4dHVhbEVsZW1lbnQpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgbm9k
ZXMgPSBidWlsZERPTShodG1sLCBjb250ZXh0dWFsRWxlbWVudCwgZG9tKTsKLSAgICAgIH0KLQot
ICAgICAgLy8gQnVpbGQgYSBsaXN0IG9mIHNjcmlwdCB0YWdzLCB0aGUgbm9kZXMgdGhlbXNlbHZl
cyB3aWxsIGJlCi0gICAgICAvLyBtdXRhdGVkIGFzIHdlIGFkZCB0ZXN0IG5vZGVzLgotICAgICAg
dmFyIGksIGosIG5vZGUsIG5vZGVTY3JpcHROb2RlczsKLSAgICAgIHZhciBzY3JpcHROb2RlcyA9
IFtdOwotICAgICAgZm9yIChpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAg
IG5vZGUgPSBub2Rlc1tpXTsKLSAgICAgICAgaWYgKG5vZGUubm9kZVR5cGUgIT09IDEpIHsKLSAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAobm9kZS50YWdOYW1lID09
PSAnU0NSSVBUJykgewotICAgICAgICAgIHNjcmlwdE5vZGVzLnB1c2gobm9kZSk7Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgbm9kZVNjcmlwdE5vZGVzID0gbm9kZS5nZXRFbGVtZW50c0J5
VGFnTmFtZSgnc2NyaXB0Jyk7Ci0gICAgICAgICAgZm9yIChqID0gMDsgaiA8IG5vZGVTY3JpcHRO
b2Rlcy5sZW5ndGg7IGorKykgewotICAgICAgICAgICAgc2NyaXB0Tm9kZXMucHVzaChub2RlU2Ny
aXB0Tm9kZXNbal0pOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICAv
LyBXYWxrIHRoZSBzY3JpcHQgdGFncyBhbmQgcHV0IGJhY2sgdGhlaXIgbGVhZGluZyB0ZXh0IG5v
ZGVzLgotICAgICAgdmFyIHNjcmlwdE5vZGUsIHRleHROb2RlLCBzcGFjZUJlZm9yZSwgc3BhY2VB
ZnRlcjsKLSAgICAgIGZvciAoaSA9IDA7IGkgPCBzY3JpcHROb2Rlcy5sZW5ndGg7IGkrKykgewot
ICAgICAgICBzY3JpcHROb2RlID0gc2NyaXB0Tm9kZXNbaV07Ci0gICAgICAgIHNwYWNlQmVmb3Jl
ID0gc3BhY2VzQmVmb3JlW2ldOwotICAgICAgICBpZiAoc3BhY2VCZWZvcmUgJiYgc3BhY2VCZWZv
cmUubGVuZ3RoID4gMCkgewotICAgICAgICAgIHRleHROb2RlID0gZG9tLmRvY3VtZW50LmNyZWF0
ZVRleHROb2RlKHNwYWNlQmVmb3JlKTsKLSAgICAgICAgICBzY3JpcHROb2RlLnBhcmVudE5vZGUu
aW5zZXJ0QmVmb3JlKHRleHROb2RlLCBzY3JpcHROb2RlKTsKLSAgICAgICAgfQotCi0gICAgICAg
IHNwYWNlQWZ0ZXIgPSBzcGFjZXNBZnRlcltpXTsKLSAgICAgICAgaWYgKHNwYWNlQWZ0ZXIgJiYg
c3BhY2VBZnRlci5sZW5ndGggPiAwKSB7Ci0gICAgICAgICAgdGV4dE5vZGUgPSBkb20uZG9jdW1l
bnQuY3JlYXRlVGV4dE5vZGUoc3BhY2VBZnRlcik7Ci0gICAgICAgICAgc2NyaXB0Tm9kZS5wYXJl
bnROb2RlLmluc2VydEJlZm9yZSh0ZXh0Tm9kZSwgc2NyaXB0Tm9kZS5uZXh0U2libGluZyk7Ci0g
ICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgcmV0dXJuIG5vZGVzOwotICAgIH07Ci0gIH0gZWxz
ZSB7Ci0gICAgYnVpbGRJRVNhZmVET00gPSBidWlsZERPTTsKLSAgfQotCi0gIHZhciBidWlsZEhU
TUxET007Ci0gIGlmIChuZWVkc0ludGVncmF0aW9uUG9pbnRGaXgpIHsKLSAgICBleHBvcnRzLmJ1
aWxkSFRNTERPTSA9IGJ1aWxkSFRNTERPTSA9IGZ1bmN0aW9uIGJ1aWxkSFRNTERPTShodG1sLCBj
b250ZXh0dWFsRWxlbWVudCwgZG9tKSB7Ci0gICAgICBpZiAoc3ZnSFRNTEludGVncmF0aW9uUG9p
bnRzW2NvbnRleHR1YWxFbGVtZW50LnRhZ05hbWVdKSB7Ci0gICAgICAgIHJldHVybiBidWlsZElF
U2FmZURPTShodG1sLCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSwgZG9tKTsKLSAgICAg
IH0gZWxzZSB7Ci0gICAgICAgIHJldHVybiBidWlsZElFU2FmZURPTShodG1sLCBjb250ZXh0dWFs
RWxlbWVudCwgZG9tKTsKLSAgICAgIH0KLSAgICB9OwotICB9IGVsc2UgewotICAgIGV4cG9ydHMu
YnVpbGRIVE1MRE9NID0gYnVpbGRIVE1MRE9NID0gYnVpbGRJRVNhZmVET007Ci0gIH0KLQotICBl
eHBvcnRzLmJ1aWxkSFRNTERPTSA9IGJ1aWxkSFRNTERPTTsKLX0pOwotZW5pZmVkKCdkb20taGVs
cGVyL2NsYXNzZXMnLCBbJ2V4cG9ydHMnXSwgZnVuY3Rpb24gKGV4cG9ydHMpIHsKLSAgJ3VzZSBz
dHJpY3QnOwotCi0gIHZhciBkb2MgPSB0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnID8g
ZmFsc2UgOiBkb2N1bWVudDsKLQotICAvLyBQaGFudG9tSlMgaGFzIGEgYnJva2VuIGNsYXNzTGlz
dC4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hcml5YS9waGFudG9tanMvaXNzdWVzLzEyNzgyCi0g
IHZhciBjYW5DbGFzc0xpc3QgPSBkb2MgJiYgKGZ1bmN0aW9uICgpIHsKLSAgICB2YXIgZCA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwotICAgIGlmICghZC5jbGFzc0xpc3QpIHsKLSAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgZC5jbGFzc0xpc3QuYWRkKCdib28nKTsKLSAg
ICBkLmNsYXNzTGlzdC5hZGQoJ2JvbycsICdiYXonKTsKLSAgICByZXR1cm4gZC5jbGFzc05hbWUg
PT09ICdib28gYmF6JzsKLSAgfSkoKTsKLQotICBmdW5jdGlvbiBidWlsZENsYXNzTGlzdChlbGVt
ZW50KSB7Ci0gICAgdmFyIGNsYXNzU3RyaW5nID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2NsYXNz
JykgfHwgJyc7Ci0gICAgcmV0dXJuIGNsYXNzU3RyaW5nICE9PSAnJyAmJiBjbGFzc1N0cmluZyAh
PT0gJyAnID8gY2xhc3NTdHJpbmcuc3BsaXQoJyAnKSA6IFtdOwotICB9Ci0KLSAgZnVuY3Rpb24g
aW50ZXJzZWN0KGNvbnRhaW5pbmdBcnJheSwgdmFsdWVzQXJyYXkpIHsKLSAgICB2YXIgY29udGFp
bmluZ0luZGV4ID0gMDsKLSAgICB2YXIgY29udGFpbmluZ0xlbmd0aCA9IGNvbnRhaW5pbmdBcnJh
eS5sZW5ndGg7Ci0gICAgdmFyIHZhbHVlc0luZGV4ID0gMDsKLSAgICB2YXIgdmFsdWVzTGVuZ3Ro
ID0gdmFsdWVzQXJyYXkubGVuZ3RoOwotCi0gICAgdmFyIGludGVyc2VjdGlvbiA9IG5ldyBBcnJh
eSh2YWx1ZXNMZW5ndGgpOwotCi0gICAgLy8gVE9ETzogcmV3cml0ZSB0aGlzIGxvb3AgaW4gYW4g
b3B0aW1hbCBtYW5uZXIKLSAgICBmb3IgKDsgY29udGFpbmluZ0luZGV4IDwgY29udGFpbmluZ0xl
bmd0aDsgY29udGFpbmluZ0luZGV4KyspIHsKLSAgICAgIHZhbHVlc0luZGV4ID0gMDsKLSAgICAg
IGZvciAoOyB2YWx1ZXNJbmRleCA8IHZhbHVlc0xlbmd0aDsgdmFsdWVzSW5kZXgrKykgewotICAg
ICAgICBpZiAodmFsdWVzQXJyYXlbdmFsdWVzSW5kZXhdID09PSBjb250YWluaW5nQXJyYXlbY29u
dGFpbmluZ0luZGV4XSkgewotICAgICAgICAgIGludGVyc2VjdGlvblt2YWx1ZXNJbmRleF0gPSBj
b250YWluaW5nSW5kZXg7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAg
ICB9Ci0KLSAgICByZXR1cm4gaW50ZXJzZWN0aW9uOwotICB9Ci0KLSAgZnVuY3Rpb24gYWRkQ2xh
c3Nlc1ZpYUF0dHJpYnV0ZShlbGVtZW50LCBjbGFzc05hbWVzKSB7Ci0gICAgdmFyIGV4aXN0aW5n
Q2xhc3NlcyA9IGJ1aWxkQ2xhc3NMaXN0KGVsZW1lbnQpOwotCi0gICAgdmFyIGluZGV4ZXMgPSBp
bnRlcnNlY3QoZXhpc3RpbmdDbGFzc2VzLCBjbGFzc05hbWVzKTsKLSAgICB2YXIgZGlkQ2hhbmdl
ID0gZmFsc2U7Ci0KLSAgICBmb3IgKHZhciBpID0gMCwgbCA9IGNsYXNzTmFtZXMubGVuZ3RoOyBp
IDwgbDsgaSsrKSB7Ci0gICAgICBpZiAoaW5kZXhlc1tpXSA9PT0gdW5kZWZpbmVkKSB7Ci0gICAg
ICAgIGRpZENoYW5nZSA9IHRydWU7Ci0gICAgICAgIGV4aXN0aW5nQ2xhc3Nlcy5wdXNoKGNsYXNz
TmFtZXNbaV0pOwotICAgICAgfQotICAgIH0KLQotICAgIGlmIChkaWRDaGFuZ2UpIHsKLSAgICAg
IGVsZW1lbnQuc2V0QXR0cmlidXRlKCdjbGFzcycsIGV4aXN0aW5nQ2xhc3Nlcy5sZW5ndGggPiAw
ID8gZXhpc3RpbmdDbGFzc2VzLmpvaW4oJyAnKSA6ICcnKTsKLSAgICB9Ci0gIH0KLQotICBmdW5j
dGlvbiByZW1vdmVDbGFzc2VzVmlhQXR0cmlidXRlKGVsZW1lbnQsIGNsYXNzTmFtZXMpIHsKLSAg
ICB2YXIgZXhpc3RpbmdDbGFzc2VzID0gYnVpbGRDbGFzc0xpc3QoZWxlbWVudCk7Ci0KLSAgICB2
YXIgaW5kZXhlcyA9IGludGVyc2VjdChjbGFzc05hbWVzLCBleGlzdGluZ0NsYXNzZXMpOwotICAg
IHZhciBkaWRDaGFuZ2UgPSBmYWxzZTsKLSAgICB2YXIgbmV3Q2xhc3NlcyA9IFtdOwotCi0gICAg
Zm9yICh2YXIgaSA9IDAsIGwgPSBleGlzdGluZ0NsYXNzZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7
Ci0gICAgICBpZiAoaW5kZXhlc1tpXSA9PT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgIG5ld0NsYXNz
ZXMucHVzaChleGlzdGluZ0NsYXNzZXNbaV0pOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgZGlk
Q2hhbmdlID0gdHJ1ZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoZGlkQ2hhbmdlKSB7Ci0g
ICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnY2xhc3MnLCBuZXdDbGFzc2VzLmxlbmd0aCA+IDAg
PyBuZXdDbGFzc2VzLmpvaW4oJyAnKSA6ICcnKTsKLSAgICB9Ci0gIH0KLQotICB2YXIgYWRkQ2xh
c3NlcywgcmVtb3ZlQ2xhc3NlczsKLSAgaWYgKGNhbkNsYXNzTGlzdCkgewotICAgIGV4cG9ydHMu
YWRkQ2xhc3NlcyA9IGFkZENsYXNzZXMgPSBmdW5jdGlvbiBhZGRDbGFzc2VzKGVsZW1lbnQsIGNs
YXNzTmFtZXMpIHsKLSAgICAgIGlmIChlbGVtZW50LmNsYXNzTGlzdCkgewotICAgICAgICBpZiAo
Y2xhc3NOYW1lcy5sZW5ndGggPT09IDEpIHsKLSAgICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5h
ZGQoY2xhc3NOYW1lc1swXSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoY2xhc3NOYW1lcy5sZW5ndGgg
PT09IDIpIHsKLSAgICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lc1swXSwg
Y2xhc3NOYW1lc1sxXSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZWxlbWVudC5jbGFz
c0xpc3QuYWRkLmFwcGx5KGVsZW1lbnQuY2xhc3NMaXN0LCBjbGFzc05hbWVzKTsKLSAgICAgICAg
fQotICAgICAgfSBlbHNlIHsKLSAgICAgICAgYWRkQ2xhc3Nlc1ZpYUF0dHJpYnV0ZShlbGVtZW50
LCBjbGFzc05hbWVzKTsKLSAgICAgIH0KLSAgICB9OwotICAgIGV4cG9ydHMucmVtb3ZlQ2xhc3Nl
cyA9IHJlbW92ZUNsYXNzZXMgPSBmdW5jdGlvbiByZW1vdmVDbGFzc2VzKGVsZW1lbnQsIGNsYXNz
TmFtZXMpIHsKLSAgICAgIGlmIChlbGVtZW50LmNsYXNzTGlzdCkgewotICAgICAgICBpZiAoY2xh
c3NOYW1lcy5sZW5ndGggPT09IDEpIHsKLSAgICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5yZW1v
dmUoY2xhc3NOYW1lc1swXSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoY2xhc3NOYW1lcy5sZW5ndGgg
PT09IDIpIHsKLSAgICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoY2xhc3NOYW1lc1sw
XSwgY2xhc3NOYW1lc1sxXSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZWxlbWVudC5j
bGFzc0xpc3QucmVtb3ZlLmFwcGx5KGVsZW1lbnQuY2xhc3NMaXN0LCBjbGFzc05hbWVzKTsKLSAg
ICAgICAgfQotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcmVtb3ZlQ2xhc3Nlc1ZpYUF0dHJpYnV0
ZShlbGVtZW50LCBjbGFzc05hbWVzKTsKLSAgICAgIH0KLSAgICB9OwotICB9IGVsc2UgewotICAg
IGV4cG9ydHMuYWRkQ2xhc3NlcyA9IGFkZENsYXNzZXMgPSBhZGRDbGFzc2VzVmlhQXR0cmlidXRl
OwotICAgIGV4cG9ydHMucmVtb3ZlQ2xhc3NlcyA9IHJlbW92ZUNsYXNzZXMgPSByZW1vdmVDbGFz
c2VzVmlhQXR0cmlidXRlOwotICB9Ci0KLSAgZXhwb3J0cy5hZGRDbGFzc2VzID0gYWRkQ2xhc3Nl
czsKLSAgZXhwb3J0cy5yZW1vdmVDbGFzc2VzID0gcmVtb3ZlQ2xhc3NlczsKLX0pOwotZW5pZmVk
KCdkb20taGVscGVyL3Byb3AnLCBbJ2V4cG9ydHMnXSwgZnVuY3Rpb24gKGV4cG9ydHMpIHsKLSAg
J3VzZSBzdHJpY3QnOwotCi0gIGV4cG9ydHMuaXNBdHRyUmVtb3ZhbFZhbHVlID0gaXNBdHRyUmVt
b3ZhbFZhbHVlOwotICBleHBvcnRzLm5vcm1hbGl6ZVByb3BlcnR5ID0gbm9ybWFsaXplUHJvcGVy
dHk7Ci0KLSAgZnVuY3Rpb24gaXNBdHRyUmVtb3ZhbFZhbHVlKHZhbHVlKSB7Ci0gICAgcmV0dXJu
IHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQ7Ci0gIH0KLQotICAvKgotICAg
KgotICAgKiBAbWV0aG9kIG5vcm1hbGl6ZVByb3BlcnR5Ci0gICAqIEBwYXJhbSBlbGVtZW50IHtI
VE1MRWxlbWVudH0KLSAgICogQHBhcmFtIHNsb3ROYW1lIHtTdHJpbmd9Ci0gICAqIEByZXR1cm5z
IHtPYmplY3R9IHsgbmFtZSwgdHlwZSB9Ci0gICAqLwotCi0gIGZ1bmN0aW9uIG5vcm1hbGl6ZVBy
b3BlcnR5KGVsZW1lbnQsIHNsb3ROYW1lKSB7Ci0gICAgdmFyIHR5cGUsIG5vcm1hbGl6ZWQ7Ci0K
LSAgICBpZiAoc2xvdE5hbWUgaW4gZWxlbWVudCkgewotICAgICAgbm9ybWFsaXplZCA9IHNsb3RO
YW1lOwotICAgICAgdHlwZSA9ICdwcm9wJzsKLSAgICB9IGVsc2UgewotICAgICAgdmFyIGxvd2Vy
ID0gc2xvdE5hbWUudG9Mb3dlckNhc2UoKTsKLSAgICAgIGlmIChsb3dlciBpbiBlbGVtZW50KSB7
Ci0gICAgICAgIHR5cGUgPSAncHJvcCc7Ci0gICAgICAgIG5vcm1hbGl6ZWQgPSBsb3dlcjsKLSAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgIHR5cGUgPSAnYXR0cic7Ci0gICAgICAgIG5vcm1hbGl6ZWQg
PSBzbG90TmFtZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAodHlwZSA9PT0gJ3Byb3AnICYm
IChub3JtYWxpemVkLnRvTG93ZXJDYXNlKCkgPT09ICdzdHlsZScgfHwgcHJlZmVyQXR0cihlbGVt
ZW50LnRhZ05hbWUsIG5vcm1hbGl6ZWQpKSkgewotICAgICAgdHlwZSA9ICdhdHRyJzsKLSAgICB9
Ci0KLSAgICByZXR1cm4geyBub3JtYWxpemVkOiBub3JtYWxpemVkLCB0eXBlOiB0eXBlIH07Ci0g
IH0KLQotICAvLyBwcm9wZXJ0aWVzIHRoYXQgTVVTVCBiZSBzZXQgYXMgYXR0cmlidXRlcywgZHVl
IHRvOgotICAvLyAqIGJyb3dzZXIgYnVnCi0gIC8vICogc3RyYW5nZSBzcGVjIG91dGxpZXIKLSAg
dmFyIEFUVFJfT1ZFUlJJREVTID0gewotCi0gICAgLy8gcGhhbnRvbWpzIDwgMi4wIGxldHMgeW91
IHNldCBpdCBhcyBhIHByb3AgYnV0IHdvbid0IHJlZmxlY3QgaXQKLSAgICAvLyBiYWNrIHRvIHRo
ZSBhdHRyaWJ1dGUuIGJ1dHRvbi5nZXRBdHRyaWJ1dGUoJ3R5cGUnKSA9PT0gbnVsbAotICAgIEJV
VFRPTjogeyB0eXBlOiB0cnVlLCBmb3JtOiB0cnVlIH0sCi0KLSAgICBJTlBVVDogewotICAgICAg
Ly8gVE9ETzogcmVtb3ZlIHdoZW4gSUU4IGlzIGRyb3BlZAotICAgICAgLy8gU29tZSB2ZXJzaW9u
cyBvZiBJRSAoSUU4KSB0aHJvdyBhbiBleGNlcHRpb24gd2hlbiBzZXR0aW5nCi0gICAgICAvLyBg
aW5wdXQubGlzdCA9ICdzb21lc3RyaW5nJ2A6Ci0gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20v
ZW1iZXJqcy9lbWJlci5qcy9pc3N1ZXMvMTA5MDgKLSAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNv
bS9lbWJlcmpzL2VtYmVyLmpzL2lzc3Vlcy8xMTM2NAotICAgICAgbGlzdDogdHJ1ZSwKLSAgICAg
IC8vIFNvbWUgdmVyc2lvbiBvZiBJRSAobGlrZSBJRTkpIGFjdHVhbGx5IHRocm93IGFuIGV4Y2Vw
dGlvbgotICAgICAgLy8gaWYgeW91IHNldCBpbnB1dC50eXBlID0gJ3NvbWV0aGluZy11bmtub3du
JwotICAgICAgdHlwZTogdHJ1ZSwKLSAgICAgIGZvcm06IHRydWUsCi0gICAgICAvLyBDaHJvbWUg
NDYuMC4yNDY0LjA6ICdhdXRvY29ycmVjdCcgaW4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5w
dXQnKSA9PT0gZmFsc2UKLSAgICAgIC8vIFNhZmFyaSA4LjAuNzogJ2F1dG9jb3JyZWN0JyBpbiBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpID09PSBmYWxzZQotICAgICAgLy8gTW9iaWxl
IFNhZmFyaSAoaU9TIDguNCBzaW11bGF0b3IpOiAnYXV0b2NvcnJlY3QnIGluIGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoJ2lucHV0JykgPT09IHRydWUKLSAgICAgIGF1dG9jb3JyZWN0OiB0cnVlCi0g
ICAgfSwKLQotICAgIC8vIGVsZW1lbnQuZm9ybSBpcyBhY3R1YWxseSBhIGxlZ2l0aW1hdGUgcmVh
ZE9ubHkgcHJvcGVydHksIHRoYXQgaXMgdG8gYmUKLSAgICAvLyBtdXRhdGVkLCBidXQgbXVzdCBi
ZSBtdXRhdGVkIGJ5IHNldEF0dHJpYnV0ZS4uLgotICAgIFNFTEVDVDogeyBmb3JtOiB0cnVlIH0s
Ci0gICAgT1BUSU9OOiB7IGZvcm06IHRydWUgfSwKLSAgICBURVhUQVJFQTogeyBmb3JtOiB0cnVl
IH0sCi0gICAgTEFCRUw6IHsgZm9ybTogdHJ1ZSB9LAotICAgIEZJRUxEU0VUOiB7IGZvcm06IHRy
dWUgfSwKLSAgICBMRUdFTkQ6IHsgZm9ybTogdHJ1ZSB9LAotICAgIE9CSkVDVDogeyBmb3JtOiB0
cnVlIH0KLSAgfTsKLQotICBmdW5jdGlvbiBwcmVmZXJBdHRyKHRhZ05hbWUsIHByb3BOYW1lKSB7
Ci0gICAgdmFyIHRhZyA9IEFUVFJfT1ZFUlJJREVTW3RhZ05hbWUudG9VcHBlckNhc2UoKV07Ci0g
ICAgcmV0dXJuIHRhZyAmJiB0YWdbcHJvcE5hbWUudG9Mb3dlckNhc2UoKV0gfHwgZmFsc2U7Ci0g
IH0KLX0pOwotZW5pZmVkKCdlbWJlci1hcHBsaWNhdGlvbi9pbmRleCcsIFsnZXhwb3J0cycsICdl
bWJlci1tZXRhbC9jb3JlJywgJ2VtYmVyLW1ldGFsL2ZlYXR1cmVzJywgJ2VtYmVyLXJ1bnRpbWUv
c3lzdGVtL2xhenlfbG9hZCcsICdlbWJlci1hcHBsaWNhdGlvbi9zeXN0ZW0vcmVzb2x2ZXInLCAn
ZW1iZXItYXBwbGljYXRpb24vc3lzdGVtL2FwcGxpY2F0aW9uJywgJ2VtYmVyLWFwcGxpY2F0aW9u
L3N5c3RlbS9hcHBsaWNhdGlvbi1pbnN0YW5jZScsICdlbWJlci1hcHBsaWNhdGlvbi9zeXN0ZW0v
ZW5naW5lJywgJ2VtYmVyLWFwcGxpY2F0aW9uL3N5c3RlbS9lbmdpbmUtaW5zdGFuY2UnXSwgZnVu
Y3Rpb24gKGV4cG9ydHMsIF9lbWJlck1ldGFsQ29yZSwgX2VtYmVyTWV0YWxGZWF0dXJlcywgX2Vt
YmVyUnVudGltZVN5c3RlbUxhenlfbG9hZCwgX2VtYmVyQXBwbGljYXRpb25TeXN0ZW1SZXNvbHZl
ciwgX2VtYmVyQXBwbGljYXRpb25TeXN0ZW1BcHBsaWNhdGlvbiwgX2VtYmVyQXBwbGljYXRpb25T
eXN0ZW1BcHBsaWNhdGlvbkluc3RhbmNlLCBfZW1iZXJBcHBsaWNhdGlvblN5c3RlbUVuZ2luZSwg
X2VtYmVyQXBwbGljYXRpb25TeXN0ZW1FbmdpbmVJbnN0YW5jZSkgewotICAndXNlIHN0cmljdCc7
Ci0KLSAgX2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQuQXBwbGljYXRpb24gPSBfZW1iZXJBcHBsaWNh
dGlvblN5c3RlbUFwcGxpY2F0aW9uLmRlZmF1bHQ7Ci0gIF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0
LlJlc29sdmVyID0gX2VtYmVyQXBwbGljYXRpb25TeXN0ZW1SZXNvbHZlci5SZXNvbHZlcjsKLSAg
X2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQuRGVmYXVsdFJlc29sdmVyID0gX2VtYmVyQXBwbGljYXRp
b25TeXN0ZW1SZXNvbHZlci5kZWZhdWx0OwotCi0gIF9lbWJlclJ1bnRpbWVTeXN0ZW1MYXp5X2xv
YWQucnVuTG9hZEhvb2tzKCdFbWJlci5BcHBsaWNhdGlvbicsIF9lbWJlckFwcGxpY2F0aW9uU3lz
dGVtQXBwbGljYXRpb24uZGVmYXVsdCk7Ci19KTsKLQotLyoqCi1AbW9kdWxlIGVtYmVyCi1Ac3Vi
bW9kdWxlIGVtYmVyLWFwcGxpY2F0aW9uCi0qLwotCi0vLyBFeHBvc2UgYEVuZ2luZUluc3RhbmNl
YCBhbmQgYEFwcGxpY2F0aW9uSW5zdGFuY2VgIGZvciBlYXN5IG92ZXJyaWRpbmcuCi0vLyBSZWFu
YWx5emUgd2hldGhlciB0byBjb250aW51ZSBleHBvc2luZyB0aGVzZSBhZnRlciBmZWF0dXJlIGZs
YWcgaXMgcmVtb3ZlZC4KLWVuaWZlZCgnZW1iZXItYXBwbGljYXRpb24vc3lzdGVtL2FwcGxpY2F0
aW9uLWluc3RhbmNlJywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFsL2RlYnVnJywgJ2VtYmVyLW1l
dGFsL3Byb3BlcnR5X2dldCcsICdlbWJlci1tZXRhbC9wcm9wZXJ0eV9zZXQnLCAnZW1iZXItbWV0
YWwvc3ltYm9sJywgJ2VtYmVyLW1ldGFsL3J1bl9sb29wJywgJ2VtYmVyLW1ldGFsL2NvbXB1dGVk
JywgJ2VtYmVyLXJ1bnRpbWUvbWl4aW5zL3JlZ2lzdHJ5X3Byb3h5JywgJ2VtYmVyLW1ldGFsL2Fz
c2lnbicsICdlbWJlci1tZXRhbC9lbnZpcm9ubWVudCcsICdlbWJlci1ydW50aW1lL2V4dC9yc3Zw
JywgJ2VtYmVyLXZpZXdzL3N5c3RlbS9qcXVlcnknLCAnZW1iZXItYXBwbGljYXRpb24vc3lzdGVt
L2VuZ2luZS1pbnN0YW5jZSddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0YWxEZWJ1Zywg
X2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQsIF9lbWJlck1ldGFsUHJvcGVydHlfc2V0LCBfZW1iZXJN
ZXRhbFN5bWJvbCwgX2VtYmVyTWV0YWxSdW5fbG9vcCwgX2VtYmVyTWV0YWxDb21wdXRlZCwgX2Vt
YmVyUnVudGltZU1peGluc1JlZ2lzdHJ5X3Byb3h5LCBfZW1iZXJNZXRhbEFzc2lnbiwgX2VtYmVy
TWV0YWxFbnZpcm9ubWVudCwgX2VtYmVyUnVudGltZUV4dFJzdnAsIF9lbWJlclZpZXdzU3lzdGVt
SnF1ZXJ5LCBfZW1iZXJBcHBsaWNhdGlvblN5c3RlbUVuZ2luZUluc3RhbmNlKSB7Ci0gIC8qKgot
ICBAbW9kdWxlIGVtYmVyCi0gIEBzdWJtb2R1bGUgZW1iZXItYXBwbGljYXRpb24KLSAgKi8KLQot
ICAndXNlIHN0cmljdCc7Ci0KLSAgdmFyIElOVEVSTkFMX0JPT1RfT1BUSU9OUyA9IF9lbWJlck1l
dGFsU3ltYm9sLmRlZmF1bHQoJ0lOVEVSTkFMX0JPT1RfT1BUSU9OUycpOwotCi0gIGV4cG9ydHMu
SU5URVJOQUxfQk9PVF9PUFRJT05TID0gSU5URVJOQUxfQk9PVF9PUFRJT05TOwotICB2YXIgQm9v
dE9wdGlvbnMgPSB1bmRlZmluZWQ7Ci0KLSAgLyoqCi0gICAgVGhlIGBBcHBsaWNhdGlvbkluc3Rh
bmNlYCBlbmNhcHN1bGF0ZXMgYWxsIG9mIHRoZSBzdGF0ZWZ1bCBhc3BlY3RzIG9mIGEKLSAgICBy
dW5uaW5nIGBBcHBsaWNhdGlvbmAuCi0gIAotICAgIEF0IGEgaGlnaC1sZXZlbCwgd2UgYnJlYWsg
YXBwbGljYXRpb24gYm9vdCBpbnRvIHR3byBkaXN0aW5jdCBwaGFzZXM6Ci0gIAotICAgICogRGVm
aW5pdGlvbiB0aW1lLCB3aGVyZSBhbGwgb2YgdGhlIGNsYXNzZXMsIHRlbXBsYXRlcywgYW5kIG90
aGVyCi0gICAgICBkZXBlbmRlbmNpZXMgYXJlIGxvYWRlZCAodHlwaWNhbGx5IGluIHRoZSBicm93
c2VyKS4KLSAgICAqIFJ1biB0aW1lLCB3aGVyZSB3ZSBiZWdpbiBleGVjdXRpbmcgdGhlIGFwcGxp
Y2F0aW9uIG9uY2UgZXZlcnl0aGluZwotICAgICAgaGFzIGxvYWRlZC4KLSAgCi0gICAgRGVmaW5p
dGlvbiB0aW1lIGNhbiBiZSBleHBlbnNpdmUgYW5kIG9ubHkgbmVlZHMgdG8gaGFwcGVuIG9uY2Ug
c2luY2UgaXQgaXMKLSAgICBhbiBpZGVtcG90ZW50IG9wZXJhdGlvbi4gRm9yIGV4YW1wbGUsIGJl
dHdlZW4gdGVzdCBydW5zIGFuZCBGYXN0Qm9vdAotICAgIHJlcXVlc3RzLCB0aGUgYXBwbGljYXRp
b24gc3RheXMgdGhlIHNhbWUuIEl0IGlzIG9ubHkgdGhlIHN0YXRlIHRoYXQgd2Ugd2FudAotICAg
IHRvIHJlc2V0LgotICAKLSAgICBUaGF0IHN0YXRlIGlzIHdoYXQgdGhlIGBBcHBsaWNhdGlvbklu
c3RhbmNlYCBtYW5hZ2VzOiBpdCBpcyByZXNwb25zaWJsZSBmb3IKLSAgICBjcmVhdGluZyB0aGUg
Y29udGFpbmVyIHRoYXQgY29udGFpbnMgYWxsIGFwcGxpY2F0aW9uIHN0YXRlLCBhbmQgZGlzcG9z
aW5nIG9mCi0gICAgaXQgb25jZSB0aGUgcGFydGljdWxhciB0ZXN0IHJ1biBvciBGYXN0Qm9vdCBy
ZXF1ZXN0IGhhcyBmaW5pc2hlZC4KLSAgCi0gICAgQHB1YmxpYwotICAgIEBjbGFzcyBFbWJlci5B
cHBsaWNhdGlvbkluc3RhbmNlCi0gICAgQGV4dGVuZHMgRW1iZXIuRW5naW5lSW5zdGFuY2UKLSAg
Ki8KLQotICB2YXIgQXBwbGljYXRpb25JbnN0YW5jZSA9IF9lbWJlckFwcGxpY2F0aW9uU3lzdGVt
RW5naW5lSW5zdGFuY2UuZGVmYXVsdC5leHRlbmQoewotICAgIC8qKgotICAgICAgVGhlIGBBcHBs
aWNhdGlvbmAgZm9yIHdoaWNoIHRoaXMgaXMgYW4gaW5zdGFuY2UuCi0gICAgICAgQHByb3BlcnR5
IHtFbWJlci5BcHBsaWNhdGlvbn0gYXBwbGljYXRpb24KLSAgICAgIEBwcml2YXRlCi0gICAgKi8K
LSAgICBhcHBsaWNhdGlvbjogbnVsbCwKLQotICAgIC8qKgotICAgICAgVGhlIERPTSBldmVudHMg
Zm9yIHdoaWNoIHRoZSBldmVudCBkaXNwYXRjaGVyIHNob3VsZCBsaXN0ZW4uCi0gICAgICAgQnkg
ZGVmYXVsdCwgdGhlIGFwcGxpY2F0aW9uJ3MgYEVtYmVyLkV2ZW50RGlzcGF0Y2hlcmAgbGlzdGVu
cwotICAgICAgZm9yIGEgc2V0IG9mIHN0YW5kYXJkIERPTSBldmVudHMsIHN1Y2ggYXMgYG1vdXNl
ZG93bmAgYW5kCi0gICAgICBga2V5dXBgLCBhbmQgZGVsZWdhdGVzIHRoZW0gdG8geW91ciBhcHBs
aWNhdGlvbidzIGBFbWJlci5WaWV3YAotICAgICAgaW5zdGFuY2VzLgotICAgICAgIEBwcml2YXRl
Ci0gICAgICBAcHJvcGVydHkge09iamVjdH0gY3VzdG9tRXZlbnRzCi0gICAgKi8KLSAgICBjdXN0
b21FdmVudHM6IG51bGwsCi0KLSAgICAvKioKLSAgICAgIFRoZSByb290IERPTSBlbGVtZW50IG9m
IHRoZSBBcHBsaWNhdGlvbiBhcyBhbiBlbGVtZW50IG9yIGEKLSAgICAgIFtqUXVlcnktY29tcGF0
aWJsZSBzZWxlY3RvcgotICAgICAgc3RyaW5nXShodHRwOi8vYXBpLmpxdWVyeS5jb20vY2F0ZWdv
cnkvc2VsZWN0b3JzLykuCi0gICAgICAgQHByaXZhdGUKLSAgICAgIEBwcm9wZXJ0eSB7U3RyaW5n
fERPTUVsZW1lbnR9IHJvb3RFbGVtZW50Ci0gICAgKi8KLSAgICByb290RWxlbWVudDogbnVsbCwK
LQotICAgIGluaXQ6IGZ1bmN0aW9uICgpIHsKLSAgICAgIHRoaXMuX3N1cGVyLmFwcGx5KHRoaXMs
IGFyZ3VtZW50cyk7Ci0KLSAgICAgIC8vIFJlZ2lzdGVyIHRoaXMgaW5zdGFuY2UgaW4gdGhlIHBl
ci1pbnN0YW5jZSByZWdpc3RyeS4KLSAgICAgIC8vCi0gICAgICAvLyBXaHkgZG8gd2UgbmVlZCB0
byByZWdpc3RlciB0aGUgaW5zdGFuY2UgaW4gdGhlIGZpcnN0IHBsYWNlPwotICAgICAgLy8gQmVj
YXVzZSB3ZSBuZWVkIGEgZ29vZCB3YXkgZm9yIHRoZSByb290IHJvdXRlIChhLmsuYSBBcHBsaWNh
dGlvblJvdXRlKQotICAgICAgLy8gdG8gbm90aWZ5IHVzIHdoZW4gaXQgaGFzIGNyZWF0ZWQgdGhl
IHJvb3QtbW9zdCB2aWV3LiBUaGF0IHZpZXcgaXMgdGhlbgotICAgICAgLy8gYXBwZW5kZWQgdG8g
dGhlIHJvb3RFbGVtZW50LCBpbiB0aGUgY2FzZSBvZiBhcHBzLCB0byB0aGUgZml4dHVyZSBoYXJu
ZXNzCi0gICAgICAvLyBpbiB0ZXN0cywgb3IgcmVuZGVyZWQgdG8gYSBzdHJpbmcgaW4gdGhlIGNh
c2Ugb2YgRmFzdEJvb3QuCi0gICAgICB0aGlzLnJlZ2lzdGVyKCctYXBwbGljYXRpb24taW5zdGFu
Y2U6bWFpbicsIHRoaXMsIHsgaW5zdGFudGlhdGU6IGZhbHNlIH0pOwotCi0gICAgICB0aGlzLl9i
b290ZWQgPSBmYWxzZTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICBJbml0aWFsaXplIHRoZSBg
RW1iZXIuQXBwbGljYXRpb25JbnN0YW5jZWAgYW5kIHJldHVybiBhIHByb21pc2UgdGhhdCByZXNv
bHZlcwotICAgICAgd2l0aCB0aGUgaW5zdGFuY2UgaXRzZWxmIHdoZW4gdGhlIGJvb3QgcHJvY2Vz
cyBpcyBjb21wbGV0ZS4KLSAgICAgICBUaGUgcHJpbWFyeSB0YXNrIGhlcmUgaXMgdG8gcnVuIGFu
eSByZWdpc3RlcmVkIGluc3RhbmNlIGluaXRpYWxpemVycy4KLSAgICAgICBTZWUgdGhlIGRvY3Vt
ZW50YXRpb24gb24gYEJvb3RPcHRpb25zYCBmb3IgdGhlIG9wdGlvbnMgaXQgdGFrZXMuCi0gICAg
ICAgQHByaXZhdGUKLSAgICAgIEBtZXRob2QgYm9vdAotICAgICAgQHBhcmFtIG9wdGlvbnMKLSAg
ICAgIEByZXR1cm4ge1Byb21pc2U8RW1iZXIuQXBwbGljYXRpb25JbnN0YW5jZSxFcnJvcj59Ci0g
ICAgKi8KLSAgICBib290OiBmdW5jdGlvbiAoKSB7Ci0gICAgICB2YXIgX3RoaXMgPSB0aGlzOwot
Ci0gICAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMCB8fCBhcmd1bWVudHNb
MF0gPT09IHVuZGVmaW5lZCA/IHt9IDogYXJndW1lbnRzWzBdOwotCi0gICAgICBpZiAodGhpcy5f
Ym9vdFByb21pc2UpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2Jvb3RQcm9taXNlOwotICAgICAg
fQotCi0gICAgICB0aGlzLl9ib290UHJvbWlzZSA9IG5ldyBfZW1iZXJSdW50aW1lRXh0UnN2cC5k
ZWZhdWx0LlByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHsKLSAgICAgICAgcmV0dXJuIHJlc29s
dmUoX3RoaXMuX2Jvb3RTeW5jKG9wdGlvbnMpKTsKLSAgICAgIH0pOwotCi0gICAgICByZXR1cm4g
dGhpcy5fYm9vdFByb21pc2U7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAgVW5mb3J0dW5hdGVs
eSwgYSBsb3Qgb2YgZXhpc3RpbmcgY29kZSBhc3N1bWVzIGJvb3RpbmcgYW4gaW5zdGFuY2UgaXMK
LSAgICAgIHN5bmNocm9ub3VzIOKAkyBzcGVjaWZpY2FsbHksIGEgbG90IG9mIHRlc3RzIGFzc3Vt
ZXMgdGhlIGxhc3QgY2FsbCB0bwotICAgICAgYGFwcC5hZHZhbmNlUmVhZGluZXNzKClgIG9yIGBh
cHAucmVzZXQoKWAgd2lsbCByZXN1bHQgaW4gYSBuZXcgaW5zdGFuY2UKLSAgICAgIGJlaW5nIGZ1
bGx5LWJvb3RlZCB3aGVuIHRoZSBjdXJyZW50IHJ1bmxvb3AgY29tcGxldGVzLgotICAgICAgIFdl
IHdvdWxkIGxpa2UgbmV3IGNvZGUgKGxpa2UgdGhlIGB2aXNpdGAgQVBJKSB0byBzdG9wIG1ha2lu
ZyB0aGlzIGFzc3VtcHRpb24sCi0gICAgICBzbyB3ZSBjcmVhdGVkIHRoZSBhc3luY2hyb25vdXMg
dmVyc2lvbiBhYm92ZSB0aGF0IHJldHVybnMgYSBwcm9taXNlLiBCdXQgdW50aWwKLSAgICAgIHdl
IGhhdmUgbWlncmF0ZWQgYWxsIHRoZSBjb2RlLCB3ZSB3b3VsZCBoYXZlIHRvIGV4cG9zZSB0aGlz
IG1ldGhvZCBmb3IgdXNlCi0gICAgICAqaW50ZXJuYWxseSogaW4gcGxhY2VzIHdoZXJlIHdlIG5l
ZWQgdG8gYm9vdCBhbiBpbnN0YW5jZSBzeW5jaHJvbm91c2x5LgotICAgICAgIEBwcml2YXRlCi0g
ICAgKi8KLSAgICBfYm9vdFN5bmM6IGZ1bmN0aW9uIChvcHRpb25zKSB7Ci0gICAgICBpZiAodGhp
cy5fYm9vdGVkKSB7Ci0gICAgICAgIHJldHVybiB0aGlzOwotICAgICAgfQotCi0gICAgICBvcHRp
b25zID0gbmV3IEJvb3RPcHRpb25zKG9wdGlvbnMpOwotCi0gICAgICB2YXIgcmVnaXN0cnkgPSB0
aGlzLl9fcmVnaXN0cnlfXzsKLQotICAgICAgcmVnaXN0cnkucmVnaXN0ZXIoJy1lbnZpcm9ubWVu
dDptYWluJywgb3B0aW9ucy50b0Vudmlyb25tZW50KCksIHsgaW5zdGFudGlhdGU6IGZhbHNlIH0p
OwotICAgICAgcmVnaXN0cnkuaW5qZWN0aW9uKCd2aWV3JywgJ19lbnZpcm9ubWVudCcsICctZW52
aXJvbm1lbnQ6bWFpbicpOwotICAgICAgcmVnaXN0cnkuaW5qZWN0aW9uKCdyb3V0ZScsICdfZW52
aXJvbm1lbnQnLCAnLWVudmlyb25tZW50Om1haW4nKTsKLQotICAgICAgcmVnaXN0cnkucmVnaXN0
ZXIoJ3NlcnZpY2U6LWRvY3VtZW50Jywgb3B0aW9ucy5kb2N1bWVudCwgeyBpbnN0YW50aWF0ZTog
ZmFsc2UgfSk7Ci0KLSAgICAgIGlmIChvcHRpb25zLmlzSW50ZXJhY3RpdmUpIHsKLSAgICAgICAg
cmVnaXN0cnkuaW5qZWN0aW9uKCd2aWV3JywgJ3JlbmRlcmVyJywgJ3JlbmRlcmVyOi1kb20nKTsK
LSAgICAgICAgcmVnaXN0cnkuaW5qZWN0aW9uKCdjb21wb25lbnQnLCAncmVuZGVyZXInLCAncmVu
ZGVyZXI6LWRvbScpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcmVnaXN0cnkuaW5qZWN0aW9u
KCd2aWV3JywgJ3JlbmRlcmVyJywgJ3JlbmRlcmVyOi1pbmVydCcpOwotICAgICAgICByZWdpc3Ry
eS5pbmplY3Rpb24oJ2NvbXBvbmVudCcsICdyZW5kZXJlcicsICdyZW5kZXJlcjotaW5lcnQnKTsK
LSAgICAgIH0KLQotICAgICAgaWYgKG9wdGlvbnMucm9vdEVsZW1lbnQpIHsKLSAgICAgICAgdGhp
cy5yb290RWxlbWVudCA9IG9wdGlvbnMucm9vdEVsZW1lbnQ7Ci0gICAgICB9IGVsc2UgewotICAg
ICAgICB0aGlzLnJvb3RFbGVtZW50ID0gdGhpcy5hcHBsaWNhdGlvbi5yb290RWxlbWVudDsKLSAg
ICAgIH0KLQotICAgICAgaWYgKG9wdGlvbnMubG9jYXRpb24pIHsKLSAgICAgICAgdmFyIHJvdXRl
ciA9IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0aGlzLCAncm91dGVyJyk7Ci0gICAgICAg
IF9lbWJlck1ldGFsUHJvcGVydHlfc2V0LnNldChyb3V0ZXIsICdsb2NhdGlvbicsIG9wdGlvbnMu
bG9jYXRpb24pOwotICAgICAgfQotCi0gICAgICB0aGlzLmFwcGxpY2F0aW9uLnJ1bkluc3RhbmNl
SW5pdGlhbGl6ZXJzKHRoaXMpOwotCi0gICAgICBpZiAob3B0aW9ucy5pc0ludGVyYWN0aXZlKSB7
Ci0gICAgICAgIHRoaXMuc2V0dXBFdmVudERpc3BhdGNoZXIoKTsKLSAgICAgIH0KLQotICAgICAg
dGhpcy5fYm9vdGVkID0gdHJ1ZTsKLQotICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgfSwKLQotICAg
IHJvdXRlcjogX2VtYmVyTWV0YWxDb21wdXRlZC5jb21wdXRlZChmdW5jdGlvbiAoKSB7Ci0gICAg
ICByZXR1cm4gdGhpcy5sb29rdXAoJ3JvdXRlcjptYWluJyk7Ci0gICAgfSkucmVhZE9ubHkoKSwK
LQotICAgIC8qKgotICAgICAgVGhpcyBob29rIGlzIGNhbGxlZCBieSB0aGUgcm9vdC1tb3N0IFJv
dXRlIChhLmsuYS4gdGhlIEFwcGxpY2F0aW9uUm91dGUpCi0gICAgICB3aGVuIGl0IGhhcyBmaW5p
c2hlZCBjcmVhdGluZyB0aGUgcm9vdCBWaWV3LiBCeSBkZWZhdWx0LCB3ZSBzaW1wbHkgdGFrZSB0
aGUKLSAgICAgIHZpZXcgYW5kIGFwcGVuZCBpdCB0byB0aGUgYHJvb3RFbGVtZW50YCBzcGVjaWZp
ZWQgb24gdGhlIEFwcGxpY2F0aW9uLgotICAgICAgIEluIGNhc2VzIGxpa2UgRmFzdEJvb3QgYW5k
IHRlc3RpbmcsIHdlIGNhbiBvdmVycmlkZSB0aGlzIGhvb2sgYW5kIGltcGxlbWVudAotICAgICAg
Y3VzdG9tIGJlaGF2aW9yLCBzdWNoIGFzIHNlcmlhbGl6aW5nIHRvIGEgc3RyaW5nIGFuZCBzZW5k
aW5nIG92ZXIgYW4gSFRUUAotICAgICAgc29ja2V0IHJhdGhlciB0aGFuIGFwcGVuZGluZyB0byBE
T00uCi0gICAgICAgQHBhcmFtIHZpZXcge0VtYmVyLlZpZXd9IHRoZSByb290LW1vc3Qgdmlldwot
ICAgICAgQHByaXZhdGUKLSAgICAqLwotICAgIGRpZENyZWF0ZVJvb3RWaWV3OiBmdW5jdGlvbiAo
dmlldykgewotICAgICAgdmlldy5hcHBlbmRUbyh0aGlzLnJvb3RFbGVtZW50KTsKLSAgICB9LAot
Ci0gICAgLyoqCi0gICAgICBUZWxscyB0aGUgcm91dGVyIHRvIHN0YXJ0IHJvdXRpbmcuIFRoZSBy
b3V0ZXIgd2lsbCBhc2sgdGhlIGxvY2F0aW9uIGZvciB0aGUKLSAgICAgIGN1cnJlbnQgVVJMIG9m
IHRoZSBwYWdlIHRvIGRldGVybWluZSB0aGUgaW5pdGlhbCBVUkwgdG8gc3RhcnQgcm91dGluZyB0
by4KLSAgICAgIFRvIHN0YXJ0IHRoZSBhcHAgYXQgYSBzcGVjaWZpYyBVUkwsIGNhbGwgYGhhbmRs
ZVVSTGAgaW5zdGVhZC4KLSAgICAgICBAcHJpdmF0ZQotICAgICovCi0gICAgc3RhcnRSb3V0aW5n
OiBmdW5jdGlvbiAoKSB7Ci0gICAgICB2YXIgcm91dGVyID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9n
ZXQuZ2V0KHRoaXMsICdyb3V0ZXInKTsKLSAgICAgIHJvdXRlci5zdGFydFJvdXRpbmcoKTsKLSAg
ICAgIHRoaXMuX2RpZFNldHVwUm91dGVyID0gdHJ1ZTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAg
ICBAcHJpdmF0ZQotICAgICAgIFNldHMgdXAgdGhlIHJvdXRlciwgaW5pdGlhbGl6aW5nIHRoZSBj
aGlsZCByb3V0ZXIgYW5kIGNvbmZpZ3VyaW5nIHRoZQotICAgICAgbG9jYXRpb24gYmVmb3JlIHJv
dXRpbmcgYmVnaW5zLgotICAgICAgIEJlY2F1c2Ugc2V0dXAgc2hvdWxkIG9ubHkgb2NjdXIgb25j
ZSwgbXVsdGlwbGUgY2FsbHMgdG8gYHNldHVwUm91dGVyYAotICAgICAgYmV5b25kIHRoZSBmaXJz
dCBjYWxsIGhhdmUgbm8gZWZmZWN0LgotICAgICovCi0gICAgc2V0dXBSb3V0ZXI6IGZ1bmN0aW9u
ICgpIHsKLSAgICAgIGlmICh0aGlzLl9kaWRTZXR1cFJvdXRlcikgewotICAgICAgICByZXR1cm47
Ci0gICAgICB9Ci0gICAgICB0aGlzLl9kaWRTZXR1cFJvdXRlciA9IHRydWU7Ci0KLSAgICAgIHZh
ciByb3V0ZXIgPSBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywgJ3JvdXRlcicpOwot
ICAgICAgcm91dGVyLnNldHVwUm91dGVyKCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAgRGly
ZWN0cyB0aGUgcm91dGVyIHRvIHJvdXRlIHRvIGEgcGFydGljdWxhciBVUkwuIFRoaXMgaXMgdXNl
ZnVsIGluIHRlc3RzLAotICAgICAgZm9yIGV4YW1wbGUsIHRvIHRlbGwgdGhlIGFwcCB0byBzdGFy
dCBhdCBhIHBhcnRpY3VsYXIgVVJMLgotICAgICAgIEBwYXJhbSB1cmwge1N0cmluZ30gdGhlIFVS
TCB0aGUgcm91dGVyIHNob3VsZCByb3V0ZSB0bwotICAgICAgQHByaXZhdGUKLSAgICAqLwotICAg
IGhhbmRsZVVSTDogZnVuY3Rpb24gKHVybCkgewotICAgICAgdmFyIHJvdXRlciA9IF9lbWJlck1l
dGFsUHJvcGVydHlfZ2V0LmdldCh0aGlzLCAncm91dGVyJyk7Ci0KLSAgICAgIHRoaXMuc2V0dXBS
b3V0ZXIoKTsKLSAgICAgIHJldHVybiByb3V0ZXIuaGFuZGxlVVJMKHVybCk7Ci0gICAgfSwKLQot
ICAgIC8qKgotICAgICAgQHByaXZhdGUKLSAgICAqLwotICAgIHNldHVwRXZlbnREaXNwYXRjaGVy
OiBmdW5jdGlvbiAoKSB7Ci0gICAgICB2YXIgZGlzcGF0Y2hlciA9IHRoaXMubG9va3VwKCdldmVu
dF9kaXNwYXRjaGVyOm1haW4nKTsKLSAgICAgIHZhciBhcHBsaWNhdGlvbkN1c3RvbUV2ZW50cyA9
IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0aGlzLmFwcGxpY2F0aW9uLCAnY3VzdG9tRXZl
bnRzJyk7Ci0gICAgICB2YXIgaW5zdGFuY2VDdXN0b21FdmVudHMgPSBfZW1iZXJNZXRhbFByb3Bl
cnR5X2dldC5nZXQodGhpcywgJ2N1c3RvbUV2ZW50cycpOwotCi0gICAgICB2YXIgY3VzdG9tRXZl
bnRzID0gX2VtYmVyTWV0YWxBc3NpZ24uZGVmYXVsdCh7fSwgYXBwbGljYXRpb25DdXN0b21FdmVu
dHMsIGluc3RhbmNlQ3VzdG9tRXZlbnRzKTsKLSAgICAgIGRpc3BhdGNoZXIuc2V0dXAoY3VzdG9t
RXZlbnRzLCB0aGlzLnJvb3RFbGVtZW50KTsKLQotICAgICAgcmV0dXJuIGRpc3BhdGNoZXI7Ci0g
ICAgfSwKLQotICAgIC8qKgotICAgICAgUmV0dXJucyB0aGUgY3VycmVudCBVUkwgb2YgdGhlIGFw
cCBpbnN0YW5jZS4gVGhpcyBpcyB1c2VmdWwgd2hlbiB5b3VyCi0gICAgICBhcHAgZG9lcyBub3Qg
dXBkYXRlIHRoZSBicm93c2VycyBVUkwgYmFyIChpLmUuIGl0IHVzZXMgdGhlIGAnbm9uZSdgCi0g
ICAgICBsb2NhdGlvbiBhZGFwdGVyKS4KLSAgICAgICBAcHVibGljCi0gICAgICBAcmV0dXJuIHtT
dHJpbmd9IHRoZSBjdXJyZW50IFVSTAotICAgICovCi0gICAgZ2V0VVJMOiBmdW5jdGlvbiAoKSB7
Ci0gICAgICB2YXIgcm91dGVyID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsICdy
b3V0ZXInKTsKLSAgICAgIHJldHVybiBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQocm91dGVy
LCAndXJsJyk7Ci0gICAgfSwKLQotICAgIC8vIGBpbnN0YW5jZS52aXNpdCh1cmwpYCBzaG91bGQg
ZXZlbnR1YWxseSByZXBsYWNlIGBpbnN0YW5jZS5oYW5kbGVVUkwoKWA7Ci0gICAgLy8gdGhlIHRl
c3QgaGVscGVycyBjYW4gcHJvYmFibHkgYmUgc3dpdGNoZWQgdG8gdXNlIHRoaXMgaW1wbGVtZW50
YXRpb24gdG9vCi0KLSAgICAvKioKLSAgICAgIE5hdmlnYXRlIHRoZSBpbnN0YW5jZSB0byBhIHBh
cnRpY3VsYXIgVVJMLiBUaGlzIGlzIHVzZWZ1bCBpbiB0ZXN0cywgZm9yCi0gICAgICBleGFtcGxl
LCBvciB0byB0ZWxsIHRoZSBhcHAgdG8gc3RhcnQgYXQgYSBwYXJ0aWN1bGFyIFVSTC4gVGhpcyBt
ZXRob2QKLSAgICAgIHJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgYXBw
IGluc3RhbmNlIHdoZW4gdGhlIHRyYW5zaXRpb24KLSAgICAgIGlzIGNvbXBsZXRlLCBvciByZWpl
Y3RzIGlmIHRoZSB0cmFuc2lvbiB3YXMgYWJvcnRlZCBkdWUgdG8gYW4gZXJyb3IuCi0gICAgICAg
QHB1YmxpYwotICAgICAgQHBhcmFtIHVybCB7U3RyaW5nfSB0aGUgZGVzdGluYXRpb24gVVJMCi0g
ICAgICBAcmV0dXJuIHtQcm9taXNlfQotICAgICovCi0gICAgdmlzaXQ6IGZ1bmN0aW9uICh1cmwp
IHsKLSAgICAgIHZhciBfdGhpczIgPSB0aGlzOwotCi0gICAgICB0aGlzLnNldHVwUm91dGVyKCk7
Ci0KLSAgICAgIHZhciByb3V0ZXIgPSBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywg
J3JvdXRlcicpOwotCi0gICAgICB2YXIgaGFuZGxlUmVzb2x2ZSA9IGZ1bmN0aW9uICgpIHsKLSAg
ICAgICAgLy8gUmVzb2x2ZSBvbmx5IGFmdGVyIHJlbmRlcmluZyBpcyBjb21wbGV0ZQotICAgICAg
ICByZXR1cm4gbmV3IF9lbWJlclJ1bnRpbWVFeHRSc3ZwLmRlZmF1bHQuUHJvbWlzZShmdW5jdGlv
biAocmVzb2x2ZSkgewotICAgICAgICAgIC8vIFRPRE86IHdoeSBpcyB0aGlzIG5lY2Vzc2FyeT8g
U2hvdWxkbid0ICdhY3Rpb25zJyBxdWV1ZSBiZSBlbm91Z2g/Ci0gICAgICAgICAgLy8gQWxzbywg
YXJlbid0IHByb2ltc2VzIHN1cHBvc2VkIHRvIGJlIGFzeW5jIGFueXdheT8KLSAgICAgICAgICBf
ZW1iZXJNZXRhbFJ1bl9sb29wLmRlZmF1bHQubmV4dChudWxsLCByZXNvbHZlLCBfdGhpczIpOwot
ICAgICAgICB9KTsKLSAgICAgIH07Ci0KLSAgICAgIHZhciBoYW5kbGVSZWplY3QgPSBmdW5jdGlv
biAoZXJyb3IpIHsKLSAgICAgICAgaWYgKGVycm9yLmVycm9yKSB7Ci0gICAgICAgICAgdGhyb3cg
ZXJyb3IuZXJyb3I7Ci0gICAgICAgIH0gZWxzZSBpZiAoZXJyb3IubmFtZSA9PT0gJ1RyYW5zaXRp
b25BYm9ydGVkJyAmJiByb3V0ZXIucm91dGVyLmFjdGl2ZVRyYW5zaXRpb24pIHsKLSAgICAgICAg
ICByZXR1cm4gcm91dGVyLnJvdXRlci5hY3RpdmVUcmFuc2l0aW9uLnRoZW4oaGFuZGxlUmVzb2x2
ZSwgaGFuZGxlUmVqZWN0KTsKLSAgICAgICAgfSBlbHNlIGlmIChlcnJvci5uYW1lID09PSAnVHJh
bnNpdGlvbkFib3J0ZWQnKSB7Ci0gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yLm1lc3Nh
Z2UpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIHRocm93IGVycm9yOwotICAgICAgICB9
Ci0gICAgICB9OwotCi0gICAgICB2YXIgbG9jYXRpb24gPSBfZW1iZXJNZXRhbFByb3BlcnR5X2dl
dC5nZXQocm91dGVyLCAnbG9jYXRpb24nKTsKLQotICAgICAgLy8gS2VlcHMgdGhlIGxvY2F0aW9u
IGFkYXB0ZXIncyBpbnRlcm5hbCBVUkwgaW4tc3luYwotICAgICAgbG9jYXRpb24uc2V0VVJMKHVy
bCk7Ci0KLSAgICAgIC8vIGdldFVSTCByZXR1cm5zIHRoZSBzZXQgdXJsIHdpdGggdGhlIHJvb3RV
Ukwgc3RyaXBwZWQgb2ZmCi0gICAgICByZXR1cm4gcm91dGVyLmhhbmRsZVVSTChsb2NhdGlvbi5n
ZXRVUkwoKSkudGhlbihoYW5kbGVSZXNvbHZlLCBoYW5kbGVSZWplY3QpOwotICAgIH0KLSAgfSk7
Ci0KLSAgLyoqCi0gICAgQSBsaXN0IG9mIGJvb3QtdGltZSBjb25maWd1cmF0aW9uIG9wdGlvbnMg
Zm9yIGN1c3RvbWl6aW5nIHRoZSBiZWhhdmlvciBvZgotICAgIGFuIGBFbWJlci5BcHBsaWNhdGlv
bkluc3RhbmNlYC4KLSAgCi0gICAgVGhpcyBpcyBhbiBpbnRlcmZhY2UgY2xhc3MgdGhhdCBleGlz
dHMgcHVyZWx5IHRvIGRvY3VtZW50IHRoZSBhdmFpbGFibGUKLSAgICBvcHRpb25zOyB5b3UgZG8g
bm90IG5lZWQgdG8gY29uc3RydWN0IGl0IG1hbnVhbGx5LiBTaW1wbHkgcGFzcyBhIHJlZ3VsYXIK
LSAgICBKYXZhU2NyaXB0IG9iamVjdCBjb250YWluaW5nIHRoZSBkZXNpcmVkIG9wdGlvbnMgaW50
byBtZXRob2RzIHRoYXQgcmVxdWlyZQotICAgIG9uZSBvZiB0aGVzZSBvcHRpb25zIG9iamVjdDoK
LSAgCi0gICAgYGBgamF2YXNjcmlwdAotICAgIE15QXBwLnZpc2l0KCIvIiwgeyBsb2NhdGlvbjog
Im5vbmUiLCByb290RWxlbWVudDogIiNjb250YWluZXIiIH0pOwotICAgIGBgYAotICAKLSAgICBO
b3QgYWxsIGNvbWJpbmF0aW9ucyBvZiB0aGUgc3VwcG9ydGVkIG9wdGlvbnMgYXJlIHZhbGlkLiBT
ZWUgdGhlIGRvY3VtZW50YXRpb24KLSAgICBvbiBgRW1iZXIuQXBwbGljYXRpb24jdmlzaXRgIGZv
ciB0aGUgc3VwcG9ydGVkIGNvbmZpZ3VyYXRpb25zLgotICAKLSAgICBJbnRlcm5hbCwgZXhwZXJp
bWVudGFsIG9yIG90aGVyd2lzZSB1bnN0YWJsZSBmbGFncyBhcmUgbWFya2VkIGFzIHByaXZhdGUu
Ci0gIAotICAgIEBjbGFzcyBCb290T3B0aW9ucwotICAgIEBuYW1lc3BhY2UgRW1iZXIuQXBwbGlj
YXRpb25JbnN0YW5jZQotICAgIEBwdWJsaWMKLSAgKi8KLSAgQm9vdE9wdGlvbnMgPSBmdW5jdGlv
biBCb290T3B0aW9ucygpIHsKLSAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPD0g
MCB8fCBhcmd1bWVudHNbMF0gPT09IHVuZGVmaW5lZCA/IHt9IDogYXJndW1lbnRzWzBdOwotCi0g
ICAgLyoqCi0gICAgICBQcm92aWRlIGEgc3BlY2lmaWMgaW5zdGFuY2Ugb2YgalF1ZXJ5LiBUaGlz
IGlzIHVzZWZ1bCBpbiBjb25qdW5jdGlvbiB3aXRoCi0gICAgICB0aGUgYGRvY3VtZW50YCBvcHRp
b24sIGFzIGl0IGFsbG93cyB5b3UgdG8gdXNlIGEgY29weSBvZiBgalF1ZXJ5YCB0aGF0IGlzCi0g
ICAgICBhcHByb3ByaWF0ZWx5IGJvdW5kIHRvIHRoZSBmb3JlaWduIGBkb2N1bWVudGAgKGUuZy4g
YSBqc2RvbSkuCi0gICAgICAgVGhpcyBpcyBoaWdobHkgZXhwZXJpbWVudGFsIGFuZCBzdXBwb3J0
IHZlcnkgaW5jb21wbGV0ZSBhdCB0aGUgbW9tZW50LgotICAgICAgIEBwcm9wZXJ0eSBqUXVlcnkK
LSAgICAgIEB0eXBlIE9iamVjdAotICAgICAgQGRlZmF1bHQgYXV0by1kZXRlY3RlZAotICAgICAg
QHByaXZhdGUKLSAgICAqLwotICAgIHRoaXMualF1ZXJ5ID0gX2VtYmVyVmlld3NTeXN0ZW1KcXVl
cnkuZGVmYXVsdDsgLy8gVGhpcyBkZWZhdWx0IGlzIG92ZXJyaWRhYmxlIGJlbG93Ci0KLSAgICAv
KioKLSAgICAgIEludGVyYWN0aXZlIG1vZGU6IHdoZXRoZXIgd2UgbmVlZCB0byBzZXQgdXAgZXZl
bnQgZGVsZWdhdGlvbiBhbmQgaW52b2tlCi0gICAgICBsaWZlY3ljbGUgY2FsbGJhY2tzIG9uIENv
bXBvbmVudHMuCi0gICAgICAgQHByb3BlcnR5IGlzSW50ZXJhY3RpdmUKLSAgICAgIEB0eXBlIGJv
b2xlYW4KLSAgICAgIEBkZWZhdWx0IGF1dG8tZGV0ZWN0ZWQKLSAgICAgIEBwcml2YXRlCi0gICAg
Ki8KLSAgICB0aGlzLmlzSW50ZXJhY3RpdmUgPSBfZW1iZXJNZXRhbEVudmlyb25tZW50LmRlZmF1
bHQuaGFzRE9NOyAvLyBUaGlzIGRlZmF1bHQgaXMgb3ZlcnJpZGFibGUgYmVsb3cKLQotICAgIC8q
KgotICAgICAgUnVuIGluIGEgZnVsbCBicm93c2VyIGVudmlyb25tZW50LgotICAgICAgIFdoZW4g
dGhpcyBmbGFnIGlzIHNldCB0byBgZmFsc2VgLCBpdCB3aWxsIGRpc2FibGUgbW9zdCBicm93c2Vy
LXNwZWNpZmljCi0gICAgICBhbmQgaW50ZXJhY3RpdmUgZmVhdHVyZXMuIFNwZWNpZmljYWxseToK
LSAgICAgICAqIEl0IGRvZXMgbm90IHVzZSBgalF1ZXJ5YCB0byBhcHBlbmQgdGhlIHJvb3Qgdmll
dzsgdGhlIGByb290RWxlbWVudGAKLSAgICAgICAgKGVpdGhlciBzcGVjaWZpZWQgYXMgYSBzdWJz
ZXF1ZW50IG9wdGlvbiBvciBvbiB0aGUgYXBwbGljYXRpb24gaXRzZWxmKQotICAgICAgICBtdXN0
IGFscmVhZHkgYmUgYW4gYEVsZW1lbnRgIGluIHRoZSBnaXZlbiBgZG9jdW1lbnRgIChhcyBvcHBv
c2VkIHRvIGEKLSAgICAgICAgc3RyaW5nIHNlbGVjdG9yKS4KLSAgICAgICAqIEl0IGRvZXMgbm90
IHNldCB1cCBhbiBgRXZlbnREaXNwYXRjaGVyYC4KLSAgICAgICAqIEl0IGRvZXMgbm90IHJ1biBh
bnkgYENvbXBvbmVudGAgbGlmZWN5Y2xlIGhvb2tzIChzdWNoIGFzIGBkaWRJbnNlcnRFbGVtZW50
YCkuCi0gICAgICAgKiBJdCBzZXRzIHRoZSBgbG9jYXRpb25gIG9wdGlvbiB0byBgIm5vbmUiYC4g
KElmIHlvdSB3b3VsZCBsaWtlIHRvIHVzZQotICAgICAgICB0aGUgbG9jYXRpb24gYWRhcHRlciBz
cGVjaWZpZWQgaW4gdGhlIGFwcCdzIHJvdXRlciBpbnN0ZWFkLCB5b3UgY2FuIGFsc28KLSAgICAg
ICAgc3BlY2lmeSBgeyBsb2NhdGlvbjogbnVsbCB9YCB0byBzcGVjaWZpY2FsbHkgb3B0LW91dC4p
Ci0gICAgICAgQHByb3BlcnR5IGlzQnJvd3NlcgotICAgICAgQHR5cGUgYm9vbGVhbgotICAgICAg
QGRlZmF1bHQgYXV0by1kZXRlY3RlZAotICAgICAgQHB1YmxpYwotICAgICovCi0gICAgaWYgKG9w
dGlvbnMuaXNCcm93c2VyICE9PSB1bmRlZmluZWQpIHsKLSAgICAgIHRoaXMuaXNCcm93c2VyID0g
ISFvcHRpb25zLmlzQnJvd3NlcjsKLSAgICB9IGVsc2UgewotICAgICAgdGhpcy5pc0Jyb3dzZXIg
PSBfZW1iZXJNZXRhbEVudmlyb25tZW50LmRlZmF1bHQuaGFzRE9NOwotICAgIH0KLQotICAgIGlm
ICghdGhpcy5pc0Jyb3dzZXIpIHsKLSAgICAgIHRoaXMualF1ZXJ5ID0gbnVsbDsKLSAgICAgIHRo
aXMuaXNJbnRlcmFjdGl2ZSA9IGZhbHNlOwotICAgICAgdGhpcy5sb2NhdGlvbiA9ICdub25lJzsK
LSAgICB9Ci0KLSAgICAvKioKLSAgICAgIERpc2FibGUgcmVuZGVyaW5nIGNvbXBsZXRlbHkuCi0g
ICAgICAgV2hlbiB0aGlzIGZsYWcgaXMgc2V0IHRvIGB0cnVlYCwgaXQgd2lsbCBkaXNhYmxlIHRo
ZSBlbnRpcmUgcmVuZGVyaW5nCi0gICAgICBwaXBlbGluZS4gRXNzZW50aWFsbHksIHRoaXMgcHV0
cyB0aGUgYXBwIGludG8gInJvdXRpbmctb25seSIgbW9kZS4gTm8KLSAgICAgIHRlbXBsYXRlcyB3
aWxsIGJlIHJlbmRlcmVkLCBhbmQgbm8gQ29tcG9uZW50cyB3aWxsIGJlIGNyZWF0ZWQuCi0gICAg
ICAgQHByb3BlcnR5IHNob3VsZFJlbmRlcgotICAgICAgQHR5cGUgYm9vbGVhbgotICAgICAgQGRl
ZmF1bHQgdHJ1ZQotICAgICAgQHB1YmxpYwotICAgICovCi0gICAgaWYgKG9wdGlvbnMuc2hvdWxk
UmVuZGVyICE9PSB1bmRlZmluZWQpIHsKLSAgICAgIHRoaXMuc2hvdWxkUmVuZGVyID0gISFvcHRp
b25zLnNob3VsZFJlbmRlcjsKLSAgICB9IGVsc2UgewotICAgICAgdGhpcy5zaG91bGRSZW5kZXIg
PSB0cnVlOwotICAgIH0KLQotICAgIGlmICghdGhpcy5zaG91bGRSZW5kZXIpIHsKLSAgICAgIHRo
aXMualF1ZXJ5ID0gbnVsbDsKLSAgICAgIHRoaXMuaXNJbnRlcmFjdGl2ZSA9IGZhbHNlOwotICAg
IH0KLQotICAgIC8qKgotICAgICAgSWYgcHJlc2VudCwgcmVuZGVyIGludG8gdGhlIGdpdmVuIGBE
b2N1bWVudGAgb2JqZWN0IGluc3RlYWQgb2YgdGhlCi0gICAgICBnbG9iYWwgYHdpbmRvdy5kb2N1
bWVudGAgb2JqZWN0LgotICAgICAgIEluIHByYWN0aWNlLCB0aGlzIGlzIG9ubHkgdXNlZnVsIGlu
IG5vbi1icm93c2VyIGVudmlyb25tZW50IG9yIGluCi0gICAgICBub24taW50ZXJhY3RpdmUgbW9k
ZSwgYmVjYXVzZSBFbWJlcidzIGBqUXVlcnlgIGRlcGVuZGVuY3kgaXMKLSAgICAgIGltcGxpY2l0
bHkgYm91bmQgdG8gdGhlIGN1cnJlbnQgZG9jdW1lbnQsIGNhdXNpbmcgZXZlbnQgZGVsZWdhdGlv
bgotICAgICAgdG8gbm90IHdvcmsgcHJvcGVybHkgd2hlbiB0aGUgYXBwIGlzIHJlbmRlcmVkIGlu
dG8gYSBmb3JlaWduCi0gICAgICBkb2N1bWVudCBvYmplY3QgKHN1Y2ggYXMgYW4gaWZyYW1lJ3Mg
YGNvbnRlbnREb2N1bWVudGApLgotICAgICAgIEluIG5vbi1icm93c2VyIG1vZGUsIHRoaXMgY291
bGQgYmUgYSAiYERvY3VtZW50YC1saWtlIiBvYmplY3QgYXMKLSAgICAgIEVtYmVyIG9ubHkgaW50
ZXJhY3Qgd2l0aCBhIHNtYWxsIHN1YnNldCBvZiB0aGUgRE9NIEFQSSBpbiBub24tCi0gICAgICBp
bnRlcmFjdGl2ZSBtb2RlLiBXaGlsZSB0aGUgZXhhY3QgcmVxdWlyZW1lbnRzIGhhdmUgbm90IHll
dCBiZWVuCi0gICAgICBmb3JtYWxpemVkLCB0aGUgYFNpbXBsZURPTWAgbGlicmFyeSdzIGltcGxl
bWVudGF0aW9uIGlzIGtub3duIHRvCi0gICAgICB3b3JrLgotICAgICAgIEBwcm9wZXJ0eSBkb2N1
bWVudAotICAgICAgQHR5cGUgRG9jdW1lbnQKLSAgICAgIEBkZWZhdWx0IHRoZSBnbG9iYWwgYGRv
Y3VtZW50YCBvYmplY3QKLSAgICAgIEBwdWJsaWMKLSAgICAqLwotICAgIGlmIChvcHRpb25zLmRv
Y3VtZW50KSB7Ci0gICAgICB0aGlzLmRvY3VtZW50ID0gb3B0aW9ucy5kb2N1bWVudDsKLSAgICB9
IGVsc2UgewotICAgICAgdGhpcy5kb2N1bWVudCA9IHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVm
aW5lZCcgPyBkb2N1bWVudCA6IG51bGw7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICBJZiBwcmVz
ZW50LCBvdmVycmlkZXMgdGhlIGFwcGxpY2F0aW9uJ3MgYHJvb3RFbGVtZW50YCBwcm9wZXJ0eSBv
bgotICAgICAgdGhlIGluc3RhbmNlLiBUaGlzIGlzIHVzZWZ1bCBmb3IgdGVzdGluZyBlbnZpcm9u
bWVudCwgd2hlcmUgeW91Ci0gICAgICBtaWdodCB3YW50IHRvIGFwcGVuZCB0aGUgcm9vdCB2aWV3
IHRvIGEgZml4dHVyZSBhcmVhLgotICAgICAgIEluIG5vbi1icm93c2VyIG1vZGUsIGJlY2F1c2Ug
RW1iZXIgZG9lcyBub3QgaGF2ZSBhY2Nlc3MgdG8galF1ZXJ5LAotICAgICAgdGhpcyBvcHRpb25z
IG11c3QgYmUgc3BlY2lmaWVkIGFzIGEgRE9NIGBFbGVtZW50YCBvYmplY3QgaW5zdGVhZCBvZgot
ICAgICAgYSBzZWxlY3RvciBzdHJpbmcuCi0gICAgICAgU2VlIHRoZSBkb2N1bWVudGF0aW9uIG9u
IGBFbWJlci5BcHBsaWNhdGlvbnNgJ3MgYHJvb3RFbGVtZW50YCBmb3IKLSAgICAgIGRldGFpbHMu
Ci0gICAgICAgQHByb3BlcnR5IHJvb3RFbGVtZW50Ci0gICAgICBAdHlwZSBTdHJpbmd8RWxlbWVu
dAotICAgICAgQGRlZmF1bHQgbnVsbAotICAgICAgQHB1YmxpYwotICAgICAqLwotICAgIGlmIChv
cHRpb25zLnJvb3RFbGVtZW50KSB7Ci0gICAgICB0aGlzLnJvb3RFbGVtZW50ID0gb3B0aW9ucy5y
b290RWxlbWVudDsKLSAgICB9Ci0KLSAgICAvLyBTZXQgdGhlc2Ugb3B0aW9ucyBsYXN0IHRvIGdp
dmUgdGhlIHVzZXIgYSBjaGFuY2UgdG8gb3ZlcnJpZGUgdGhlCi0gICAgLy8gZGVmYXVsdHMgZnJv
bSB0aGUgImNvbWJvIiBvcHRpb25zIGxpa2UgYGlzQnJvd3NlcmAgKGFsdGhvdWdoIGluCi0gICAg
Ly8gcHJhY3RpY2UsIHRoZSByZXN1bHRpbmcgY29tYmluYXRpb24gaXMgcHJvYmFibHkgaW52YWxp
ZCkKLQotICAgIC8qKgotICAgICAgSWYgcHJlc2VudCwgb3ZlcnJpZGVzIHRoZSByb3V0ZXIncyBg
bG9jYXRpb25gIHByb3BlcnR5IHdpdGggdGhpcwotICAgICAgdmFsdWUuIFRoaXMgaXMgdXNlZnVs
IGZvciBlbnZpcm9ubWVudHMgd2hlcmUgdHJ5aW5nIHRvIG1vZGlmeSB0aGUKLSAgICAgIFVSTCB3
b3VsZCBiZSBpbmFwcHJvcHJpYXRlLgotICAgICAgIEBwcm9wZXJ0eSBsb2NhdGlvbgotICAgICAg
QHR5cGUgc3RyaW5nCi0gICAgICBAZGVmYXVsdCBudWxsCi0gICAgICBAcHVibGljCi0gICAgKi8K
LSAgICBpZiAob3B0aW9ucy5sb2NhdGlvbiAhPT0gdW5kZWZpbmVkKSB7Ci0gICAgICB0aGlzLmxv
Y2F0aW9uID0gb3B0aW9ucy5sb2NhdGlvbjsKLSAgICB9Ci0KLSAgICBpZiAob3B0aW9ucy5qUXVl
cnkgIT09IHVuZGVmaW5lZCkgewotICAgICAgdGhpcy5qUXVlcnkgPSBvcHRpb25zLmpRdWVyeTsK
LSAgICB9Ci0KLSAgICBpZiAob3B0aW9ucy5pc0ludGVyYWN0aXZlICE9PSB1bmRlZmluZWQpIHsK
LSAgICAgIHRoaXMuaXNJbnRlcmFjdGl2ZSA9ICEhb3B0aW9ucy5pc0ludGVyYWN0aXZlOwotICAg
IH0KLSAgfTsKLQotICBCb290T3B0aW9ucy5wcm90b3R5cGUudG9FbnZpcm9ubWVudCA9IGZ1bmN0
aW9uICgpIHsKLSAgICB2YXIgZW52ID0gX2VtYmVyTWV0YWxBc3NpZ24uZGVmYXVsdCh7fSwgX2Vt
YmVyTWV0YWxFbnZpcm9ubWVudC5kZWZhdWx0KTsKLSAgICAvLyBGb3IgY29tcGF0aWJpbGl0eSB3
aXRoIGV4aXN0aW5nIGNvZGUKLSAgICBlbnYuaGFzRE9NID0gdGhpcy5pc0Jyb3dzZXI7Ci0gICAg
ZW52Lm9wdGlvbnMgPSB0aGlzOwotICAgIHJldHVybiBlbnY7Ci0gIH07Ci0KLSAgT2JqZWN0LmRl
ZmluZVByb3BlcnR5KEFwcGxpY2F0aW9uSW5zdGFuY2UucHJvdG90eXBlLCAnY29udGFpbmVyJywg
ewotICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKLSAgICBlbnVtZXJhYmxlOiBmYWxzZSwKLSAgICBn
ZXQ6IGZ1bmN0aW9uICgpIHsKLSAgICAgIHZhciBpbnN0YW5jZSA9IHRoaXM7Ci0gICAgICByZXR1
cm4gewotICAgICAgICBsb29rdXA6IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICBfZW1iZXJNZXRh
bERlYnVnLmRlcHJlY2F0ZSgnVXNpbmcgYEFwcGxpY2F0aW9uSW5zdGFuY2UuY29udGFpbmVyLmxv
b2t1cGAgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSBgQXBwbGljYXRpb25JbnN0YW5jZS5sb29r
dXBgIGluc3RlYWQuJywgZmFsc2UsIHsKLSAgICAgICAgICAgIGlkOiAnZW1iZXItYXBwbGljYXRp
b24uYXBwLWluc3RhbmNlLWNvbnRhaW5lcicsCi0gICAgICAgICAgICB1bnRpbDogJzMuMC4wJywK
LSAgICAgICAgICAgIHVybDogJ2h0dHA6Ly9lbWJlcmpzLmNvbS9kZXByZWNhdGlvbnMvdjIueC8j
dG9jX2VtYmVyLWFwcGxpY2F0aW9uaW5zdGFuY2UtY29udGFpbmVyJwotICAgICAgICAgIH0pOwot
ICAgICAgICAgIHJldHVybiBpbnN0YW5jZS5sb29rdXAuYXBwbHkoaW5zdGFuY2UsIGFyZ3VtZW50
cyk7Ci0gICAgICAgIH0KLSAgICAgIH07Ci0gICAgfQotICB9KTsKLQotICBPYmplY3QuZGVmaW5l
UHJvcGVydHkoQXBwbGljYXRpb25JbnN0YW5jZS5wcm90b3R5cGUsICdyZWdpc3RyeScsIHsKLSAg
ICBjb25maWd1cmFibGU6IHRydWUsCi0gICAgZW51bWVyYWJsZTogZmFsc2UsCi0gICAgZ2V0OiBm
dW5jdGlvbiAoKSB7Ci0gICAgICByZXR1cm4gX2VtYmVyUnVudGltZU1peGluc1JlZ2lzdHJ5X3By
b3h5LmJ1aWxkRmFrZVJlZ2lzdHJ5V2l0aERlcHJlY2F0aW9ucyh0aGlzLCAnQXBwbGljYXRpb25J
bnN0YW5jZScpOwotICAgIH0KLSAgfSk7Ci0KLSAgZXhwb3J0cy5kZWZhdWx0ID0gQXBwbGljYXRp
b25JbnN0YW5jZTsKLX0pOwotZW5pZmVkKCdlbWJlci1hcHBsaWNhdGlvbi9zeXN0ZW0vYXBwbGlj
YXRpb24nLCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwnLCAnZW1iZXItbWV0YWwvZGVidWcnLCAn
ZW1iZXItbWV0YWwvcHJvcGVydHlfZ2V0JywgJ2VtYmVyLXJ1bnRpbWUvc3lzdGVtL2xhenlfbG9h
ZCcsICdlbWJlci1tZXRhbC9ydW5fbG9vcCcsICdlbWJlci1ydW50aW1lL2NvbnRyb2xsZXJzL2Nv
bnRyb2xsZXInLCAnZW1iZXItaHRtbGJhcnMvc3lzdGVtL2RvbS1oZWxwZXInLCAnZW1iZXItbWV0
YWwtdmlld3MnLCAnZW1iZXItaHRtbGJhcnMvdGVtcGxhdGVzL3RvcC1sZXZlbC12aWV3JywgJ2Vt
YmVyLXJvdXRpbmctdmlld3Mvdmlld3Mvb3V0bGV0JywgJ2VtYmVyLXZpZXdzL3ZpZXdzL3ZpZXcn
LCAnZW1iZXItdmlld3Mvc3lzdGVtL2V2ZW50X2Rpc3BhdGNoZXInLCAnZW1iZXItdmlld3Mvc3lz
dGVtL2pxdWVyeScsICdlbWJlci1yb3V0aW5nL3N5c3RlbS9yb3V0ZScsICdlbWJlci1yb3V0aW5n
L3N5c3RlbS9yb3V0ZXInLCAnZW1iZXItcm91dGluZy9sb2NhdGlvbi9oYXNoX2xvY2F0aW9uJywg
J2VtYmVyLXJvdXRpbmcvbG9jYXRpb24vaGlzdG9yeV9sb2NhdGlvbicsICdlbWJlci1yb3V0aW5n
L2xvY2F0aW9uL2F1dG9fbG9jYXRpb24nLCAnZW1iZXItcm91dGluZy9sb2NhdGlvbi9ub25lX2xv
Y2F0aW9uJywgJ2VtYmVyLXJvdXRpbmcvc3lzdGVtL2NhY2hlJywgJ2VtYmVyLWFwcGxpY2F0aW9u
L3N5c3RlbS9hcHBsaWNhdGlvbi1pbnN0YW5jZScsICdlbWJlci12aWV3cy92aWV3cy90ZXh0X2Zp
ZWxkJywgJ2VtYmVyLXZpZXdzL3ZpZXdzL3RleHRfYXJlYScsICdlbWJlci12aWV3cy92aWV3cy9j
aGVja2JveCcsICdlbWJlci1yb3V0aW5nLXZpZXdzL2NvbXBvbmVudHMvbGluay10bycsICdlbWJl
ci1yb3V0aW5nL3NlcnZpY2VzL3JvdXRpbmcnLCAnZW1iZXItZXh0ZW5zaW9uLXN1cHBvcnQvY29u
dGFpbmVyX2RlYnVnX2FkYXB0ZXInLCAnZW1iZXItcnVudGltZS9taXhpbnMvcmVnaXN0cnlfcHJv
eHknLCAnY29udGFpbmVyL3JlZ2lzdHJ5JywgJ2VtYmVyLW1ldGFsL2Vudmlyb25tZW50JywgJ2Vt
YmVyLXJ1bnRpbWUvZXh0L3JzdnAnLCAnZW1iZXItYXBwbGljYXRpb24vc3lzdGVtL2VuZ2luZScs
ICdyZXF1aXJlJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbCwgX2VtYmVyTWV0YWxE
ZWJ1ZywgX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQsIF9lbWJlclJ1bnRpbWVTeXN0ZW1MYXp5X2xv
YWQsIF9lbWJlck1ldGFsUnVuX2xvb3AsIF9lbWJlclJ1bnRpbWVDb250cm9sbGVyc0NvbnRyb2xs
ZXIsIF9lbWJlckh0bWxiYXJzU3lzdGVtRG9tSGVscGVyLCBfZW1iZXJNZXRhbFZpZXdzLCBfZW1i
ZXJIdG1sYmFyc1RlbXBsYXRlc1RvcExldmVsVmlldywgX2VtYmVyUm91dGluZ1ZpZXdzVmlld3NP
dXRsZXQsIF9lbWJlclZpZXdzVmlld3NWaWV3LCBfZW1iZXJWaWV3c1N5c3RlbUV2ZW50X2Rpc3Bh
dGNoZXIsIF9lbWJlclZpZXdzU3lzdGVtSnF1ZXJ5LCBfZW1iZXJSb3V0aW5nU3lzdGVtUm91dGUs
IF9lbWJlclJvdXRpbmdTeXN0ZW1Sb3V0ZXIsIF9lbWJlclJvdXRpbmdMb2NhdGlvbkhhc2hfbG9j
YXRpb24sIF9lbWJlclJvdXRpbmdMb2NhdGlvbkhpc3RvcnlfbG9jYXRpb24sIF9lbWJlclJvdXRp
bmdMb2NhdGlvbkF1dG9fbG9jYXRpb24sIF9lbWJlclJvdXRpbmdMb2NhdGlvbk5vbmVfbG9jYXRp
b24sIF9lbWJlclJvdXRpbmdTeXN0ZW1DYWNoZSwgX2VtYmVyQXBwbGljYXRpb25TeXN0ZW1BcHBs
aWNhdGlvbkluc3RhbmNlLCBfZW1iZXJWaWV3c1ZpZXdzVGV4dF9maWVsZCwgX2VtYmVyVmlld3NW
aWV3c1RleHRfYXJlYSwgX2VtYmVyVmlld3NWaWV3c0NoZWNrYm94LCBfZW1iZXJSb3V0aW5nVmll
d3NDb21wb25lbnRzTGlua1RvLCBfZW1iZXJSb3V0aW5nU2VydmljZXNSb3V0aW5nLCBfZW1iZXJF
eHRlbnNpb25TdXBwb3J0Q29udGFpbmVyX2RlYnVnX2FkYXB0ZXIsIF9lbWJlclJ1bnRpbWVNaXhp
bnNSZWdpc3RyeV9wcm94eSwgX2NvbnRhaW5lclJlZ2lzdHJ5LCBfZW1iZXJNZXRhbEVudmlyb25t
ZW50LCBfZW1iZXJSdW50aW1lRXh0UnN2cCwgX2VtYmVyQXBwbGljYXRpb25TeXN0ZW1FbmdpbmUs
IF9yZXF1aXJlMikgewotICAvKioKLSAgQG1vZHVsZSBlbWJlcgotICBAc3VibW9kdWxlIGVtYmVy
LWFwcGxpY2F0aW9uCi0gICovCi0gICd1c2Ugc3RyaWN0JzsKLQotICBleHBvcnRzLl9yZXNldExl
Z2FjeUFkZG9uV2FybmluZ3MgPSBfcmVzZXRMZWdhY3lBZGRvbldhcm5pbmdzOwotCi0gIHZhciBf
dGVtcGxhdGVPYmplY3QgPSBfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsTG9vc2UoWyctYnVja2V0LWNh
Y2hlOm1haW4nXSwgWyctYnVja2V0LWNhY2hlOm1haW4nXSksCi0gICAgICBfdGVtcGxhdGVPYmpl
Y3QyID0gX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbExvb3NlKFsndGVtcGxhdGU6Y29tcG9uZW50cy8t
ZGVmYXVsdCddLCBbJ3RlbXBsYXRlOmNvbXBvbmVudHMvLWRlZmF1bHQnXSk7Ci0KLSAgZnVuY3Rp
b24gX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbExvb3NlKHN0cmluZ3MsIHJhdykgeyBzdHJpbmdzLnJh
dyA9IHJhdzsgcmV0dXJuIHN0cmluZ3M7IH0KLQotICB2YXIgbGlicmFyaWVzUmVnaXN0ZXJlZCA9
IGZhbHNlOwotCi0gIHZhciB3YXJuZWRBYm91dExlZ2FjeVZpZXdBZGRvbiA9IGZhbHNlOwotICB2
YXIgd2FybmVkQWJvdXRMZWdhY3lDb250cm9sbGVyQWRkb24gPSBmYWxzZTsKLQotICAvLyBGb3Ig
dGVzdGluZwotCi0gIGZ1bmN0aW9uIF9yZXNldExlZ2FjeUFkZG9uV2FybmluZ3MoKSB7Ci0gICAg
d2FybmVkQWJvdXRMZWdhY3lWaWV3QWRkb24gPSBmYWxzZTsKLSAgICB3YXJuZWRBYm91dExlZ2Fj
eUNvbnRyb2xsZXJBZGRvbiA9IGZhbHNlOwotICB9Ci0KLSAgLyoqCi0gICAgQW4gaW5zdGFuY2Ug
b2YgYEVtYmVyLkFwcGxpY2F0aW9uYCBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIGV2ZXJ5IEVt
YmVyCi0gICAgYXBwbGljYXRpb24uIEl0IGhlbHBzIHRvIGluc3RhbnRpYXRlLCBpbml0aWFsaXpl
IGFuZCBjb29yZGluYXRlIHRoZSBtYW55Ci0gICAgb2JqZWN0cyB0aGF0IG1ha2UgdXAgeW91ciBh
cHAuCi0gIAotICAgIEVhY2ggRW1iZXIgYXBwIGhhcyBvbmUgYW5kIG9ubHkgb25lIGBFbWJlci5B
cHBsaWNhdGlvbmAgb2JqZWN0LiBJbiBmYWN0LCB0aGUKLSAgICB2ZXJ5IGZpcnN0IHRoaW5nIHlv
dSBzaG91bGQgZG8gaW4geW91ciBhcHBsaWNhdGlvbiBpcyBjcmVhdGUgdGhlIGluc3RhbmNlOgot
ICAKLSAgICBgYGBqYXZhc2NyaXB0Ci0gICAgd2luZG93LkFwcCA9IEVtYmVyLkFwcGxpY2F0aW9u
LmNyZWF0ZSgpOwotICAgIGBgYAotICAKLSAgICBUeXBpY2FsbHksIHRoZSBhcHBsaWNhdGlvbiBv
YmplY3QgaXMgdGhlIG9ubHkgZ2xvYmFsIHZhcmlhYmxlLiBBbGwgb3RoZXIKLSAgICBjbGFzc2Vz
IGluIHlvdXIgYXBwIHNob3VsZCBiZSBwcm9wZXJ0aWVzIG9uIHRoZSBgRW1iZXIuQXBwbGljYXRp
b25gIGluc3RhbmNlLAotICAgIHdoaWNoIGhpZ2hsaWdodHMgaXRzIGZpcnN0IHJvbGU6IGEgZ2xv
YmFsIG5hbWVzcGFjZS4KLSAgCi0gICAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkZWZpbmUgYSB2aWV3
IGNsYXNzLCBpdCBtaWdodCBsb29rIGxpa2UgdGhpczoKLSAgCi0gICAgYGBgamF2YXNjcmlwdAot
ICAgIEFwcC5NeVZpZXcgPSBFbWJlci5WaWV3LmV4dGVuZCgpOwotICAgIGBgYAotICAKLSAgICBC
eSBkZWZhdWx0LCBjYWxsaW5nIGBFbWJlci5BcHBsaWNhdGlvbi5jcmVhdGUoKWAgd2lsbCBhdXRv
bWF0aWNhbGx5IGluaXRpYWxpemUKLSAgICB5b3VyIGFwcGxpY2F0aW9uIGJ5IGNhbGxpbmcgdGhl
IGBFbWJlci5BcHBsaWNhdGlvbi5pbml0aWFsaXplKClgIG1ldGhvZC4gSWYKLSAgICB5b3UgbmVl
ZCB0byBkZWxheSBpbml0aWFsaXphdGlvbiwgeW91IGNhbiBjYWxsIHlvdXIgYXBwJ3MgYGRlZmVy
UmVhZGluZXNzKClgCi0gICAgbWV0aG9kLiBXaGVuIHlvdSBhcmUgcmVhZHkgZm9yIHlvdXIgYXBw
IHRvIGJlIGluaXRpYWxpemVkLCBjYWxsIGl0cwotICAgIGBhZHZhbmNlUmVhZGluZXNzKClgIG1l
dGhvZC4KLSAgCi0gICAgWW91IGNhbiBkZWZpbmUgYSBgcmVhZHlgIG1ldGhvZCBvbiB0aGUgYEVt
YmVyLkFwcGxpY2F0aW9uYCBpbnN0YW5jZSwgd2hpY2gKLSAgICB3aWxsIGJlIHJ1biBieSBFbWJl
ciB3aGVuIHRoZSBhcHBsaWNhdGlvbiBpcyBpbml0aWFsaXplZC4KLSAgCi0gICAgQmVjYXVzZSBg
RW1iZXIuQXBwbGljYXRpb25gIGluaGVyaXRzIGZyb20gYEVtYmVyLk5hbWVzcGFjZWAsIGFueSBj
bGFzc2VzCi0gICAgeW91IGNyZWF0ZSB3aWxsIGhhdmUgdXNlZnVsIHN0cmluZyByZXByZXNlbnRh
dGlvbnMgd2hlbiBjYWxsaW5nIGB0b1N0cmluZygpYC4KLSAgICBTZWUgdGhlIGBFbWJlci5OYW1l
c3BhY2VgIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0gIAotICAgIFdoaWxl
IHlvdSBjYW4gdGhpbmsgb2YgeW91ciBgRW1iZXIuQXBwbGljYXRpb25gIGFzIGEgY29udGFpbmVy
IHRoYXQgaG9sZHMgdGhlCi0gICAgb3RoZXIgY2xhc3NlcyBpbiB5b3VyIGFwcGxpY2F0aW9uLCB0
aGVyZSBhcmUgc2V2ZXJhbCBvdGhlciByZXNwb25zaWJpbGl0aWVzCi0gICAgZ29pbmcgb24gdW5k
ZXItdGhlLWhvb2QgdGhhdCB5b3UgbWF5IHdhbnQgdG8gdW5kZXJzdGFuZC4KLSAgCi0gICAgIyMj
IEV2ZW50IERlbGVnYXRpb24KLSAgCi0gICAgRW1iZXIgdXNlcyBhIHRlY2huaXF1ZSBjYWxsZWQg
X2V2ZW50IGRlbGVnYXRpb25fLiBUaGlzIGFsbG93cyB0aGUgZnJhbWV3b3JrCi0gICAgdG8gc2V0
IHVwIGEgZ2xvYmFsLCBzaGFyZWQgZXZlbnQgbGlzdGVuZXIgaW5zdGVhZCBvZiByZXF1aXJpbmcg
ZWFjaCB2aWV3IHRvCi0gICAgZG8gaXQgbWFudWFsbHkuIEZvciBleGFtcGxlLCBpbnN0ZWFkIG9m
IGVhY2ggdmlldyByZWdpc3RlcmluZyBpdHMgb3duCi0gICAgYG1vdXNlZG93bmAgbGlzdGVuZXIg
b24gaXRzIGFzc29jaWF0ZWQgZWxlbWVudCwgRW1iZXIgc2V0cyB1cCBhIGBtb3VzZWRvd25gCi0g
ICAgbGlzdGVuZXIgb24gdGhlIGBib2R5YC4KLSAgCi0gICAgSWYgYSBgbW91c2Vkb3duYCBldmVu
dCBvY2N1cnMsIEVtYmVyIHdpbGwgbG9vayBhdCB0aGUgdGFyZ2V0IG9mIHRoZSBldmVudCBhbmQK
LSAgICBzdGFydCB3YWxraW5nIHVwIHRoZSBET00gbm9kZSB0cmVlLCBmaW5kaW5nIGNvcnJlc3Bv
bmRpbmcgdmlld3MgYW5kIGludm9raW5nCi0gICAgdGhlaXIgYG1vdXNlRG93bmAgbWV0aG9kIGFz
IGl0IGdvZXMuCi0gIAotICAgIGBFbWJlci5BcHBsaWNhdGlvbmAgaGFzIGEgbnVtYmVyIG9mIGRl
ZmF1bHQgZXZlbnRzIHRoYXQgaXQgbGlzdGVucyBmb3IsIGFzCi0gICAgd2VsbCBhcyBhIG1hcHBp
bmcgZnJvbSBsb3dlcmNhc2UgZXZlbnRzIHRvIGNhbWVsLWNhc2VkIHZpZXcgbWV0aG9kIG5hbWVz
LiBGb3IKLSAgICBleGFtcGxlLCB0aGUgYGtleXByZXNzYCBldmVudCBjYXVzZXMgdGhlIGBrZXlQ
cmVzc2AgbWV0aG9kIG9uIHRoZSB2aWV3IHRvIGJlCi0gICAgY2FsbGVkLCB0aGUgYGRibGNsaWNr
YCBldmVudCBjYXVzZXMgYGRvdWJsZUNsaWNrYCB0byBiZSBjYWxsZWQsIGFuZCBzbyBvbi4KLSAg
Ci0gICAgSWYgdGhlcmUgaXMgYSBidWJibGluZyBicm93c2VyIGV2ZW50IHRoYXQgRW1iZXIgZG9l
cyBub3QgbGlzdGVuIGZvciBieQotICAgIGRlZmF1bHQsIHlvdSBjYW4gc3BlY2lmeSBjdXN0b20g
ZXZlbnRzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIHZpZXcgbWV0aG9kCi0gICAgbmFtZXMgYnkg
c2V0dGluZyB0aGUgYXBwbGljYXRpb24ncyBgY3VzdG9tRXZlbnRzYCBwcm9wZXJ0eToKLSAgCi0g
ICAgYGBgamF2YXNjcmlwdAotICAgIHZhciBBcHAgPSBFbWJlci5BcHBsaWNhdGlvbi5jcmVhdGUo
ewotICAgICAgY3VzdG9tRXZlbnRzOiB7Ci0gICAgICAgIC8vIGFkZCBzdXBwb3J0IGZvciB0aGUg
cGFzdGUgZXZlbnQKLSAgICAgICAgcGFzdGU6ICdwYXN0ZScKLSAgICAgIH0KLSAgICB9KTsKLSAg
ICBgYGAKLSAgCi0gICAgVG8gcHJldmVudCBFbWJlciBmcm9tIHNldHRpbmcgdXAgYSBsaXN0ZW5l
ciBmb3IgYSBkZWZhdWx0IGV2ZW50LAotICAgIHNwZWNpZnkgdGhlIGV2ZW50IG5hbWUgd2l0aCBh
IGBudWxsYCB2YWx1ZSBpbiB0aGUgYGN1c3RvbUV2ZW50c2AKLSAgICBwcm9wZXJ0eToKLSAgCi0g
ICAgYGBgamF2YXNjcmlwdAotICAgIHZhciBBcHAgPSBFbWJlci5BcHBsaWNhdGlvbi5jcmVhdGUo
ewotICAgICAgY3VzdG9tRXZlbnRzOiB7Ci0gICAgICAgIC8vIHByZXZlbnQgbGlzdGVuZXJzIGZv
ciBtb3VzZWVudGVyL21vdXNlbGVhdmUgZXZlbnRzCi0gICAgICAgIG1vdXNlZW50ZXI6IG51bGws
Ci0gICAgICAgIG1vdXNlbGVhdmU6IG51bGwKLSAgICAgIH0KLSAgICB9KTsKLSAgICBgYGAKLSAg
Ci0gICAgQnkgZGVmYXVsdCwgdGhlIGFwcGxpY2F0aW9uIHNldHMgdXAgdGhlc2UgZXZlbnQgbGlz
dGVuZXJzIG9uIHRoZSBkb2N1bWVudAotICAgIGJvZHkuIEhvd2V2ZXIsIGluIGNhc2VzIHdoZXJl
IHlvdSBhcmUgZW1iZWRkaW5nIGFuIEVtYmVyIGFwcGxpY2F0aW9uIGluc2lkZQotICAgIGFuIGV4
aXN0aW5nIHBhZ2UsIHlvdSBtYXkgd2FudCBpdCB0byBzZXQgdXAgdGhlIGxpc3RlbmVycyBvbiBh
biBlbGVtZW50Ci0gICAgaW5zaWRlIHRoZSBib2R5LgotICAKLSAgICBGb3IgZXhhbXBsZSwgaWYg
b25seSBldmVudHMgaW5zaWRlIGEgRE9NIGVsZW1lbnQgd2l0aCB0aGUgSUQgb2YgYGVtYmVyLWFw
cGAKLSAgICBzaG91bGQgYmUgZGVsZWdhdGVkLCBzZXQgeW91ciBhcHBsaWNhdGlvbidzIGByb290
RWxlbWVudGAgcHJvcGVydHk6Ci0gIAotICAgIGBgYGphdmFzY3JpcHQKLSAgICB2YXIgQXBwID0g
RW1iZXIuQXBwbGljYXRpb24uY3JlYXRlKHsKLSAgICAgIHJvb3RFbGVtZW50OiAnI2VtYmVyLWFw
cCcKLSAgICB9KTsKLSAgICBgYGAKLSAgCi0gICAgVGhlIGByb290RWxlbWVudGAgY2FuIGJlIGVp
dGhlciBhIERPTSBlbGVtZW50IG9yIGEgalF1ZXJ5LWNvbXBhdGlibGUgc2VsZWN0b3IKLSAgICBz
dHJpbmcuIE5vdGUgdGhhdCAqdmlld3MgYXBwZW5kZWQgdG8gdGhlIERPTSBvdXRzaWRlIHRoZSBy
b290IGVsZW1lbnQgd2lsbAotICAgIG5vdCByZWNlaXZlIGV2ZW50cy4qIElmIHlvdSBzcGVjaWZ5
IGEgY3VzdG9tIHJvb3QgZWxlbWVudCwgbWFrZSBzdXJlIHlvdSBvbmx5Ci0gICAgYXBwZW5kIHZp
ZXdzIGluc2lkZSBpdCEKLSAgCi0gICAgVG8gbGVhcm4gbW9yZSBhYm91dCB0aGUgZXZlbnRzIEVt
YmVyIGNvbXBvbmVudHMgdXNlLCBzZWUKLSAgICBbY29tcG9uZW50cy9oYW5kbGluZy1ldmVudHNd
KGh0dHBzOi8vZ3VpZGVzLmVtYmVyanMuY29tL3YyLjYuMC9jb21wb25lbnRzL2hhbmRsaW5nLWV2
ZW50cy8jdG9jX2V2ZW50LW5hbWVzKS4KLSAgCi0gICAgIyMjIEluaXRpYWxpemVycwotICAKLSAg
ICBMaWJyYXJpZXMgb24gdG9wIG9mIEVtYmVyIGNhbiBhZGQgaW5pdGlhbGl6ZXJzLCBsaWtlIHNv
OgotICAKLSAgICBgYGBqYXZhc2NyaXB0Ci0gICAgRW1iZXIuQXBwbGljYXRpb24uaW5pdGlhbGl6
ZXIoewotICAgICAgbmFtZTogJ2FwaS1hZGFwdGVyJywKLSAgCi0gICAgICBpbml0aWFsaXplOiBm
dW5jdGlvbihhcHBsaWNhdGlvbikgewotICAgICAgICBhcHBsaWNhdGlvbi5yZWdpc3RlcignYXBp
LWFkYXB0ZXI6bWFpbicsIEFwaUFkYXB0ZXIpOwotICAgICAgfQotICAgIH0pOwotICAgIGBgYAot
ICAKLSAgICBJbml0aWFsaXplcnMgcHJvdmlkZSBhbiBvcHBvcnR1bml0eSB0byBhY2Nlc3MgdGhl
IGludGVybmFsIHJlZ2lzdHJ5LCB3aGljaAotICAgIG9yZ2FuaXplcyB0aGUgZGlmZmVyZW50IGNv
bXBvbmVudHMgb2YgYW4gRW1iZXIgYXBwbGljYXRpb24uIEFkZGl0aW9uYWxseQotICAgIHRoZXkg
cHJvdmlkZSBhIGNoYW5jZSB0byBhY2Nlc3MgdGhlIGluc3RhbnRpYXRlZCBhcHBsaWNhdGlvbi4g
QmV5b25kCi0gICAgYmVpbmcgdXNlZCBmb3IgbGlicmFyaWVzLCBpbml0aWFsaXplcnMgYXJlIGFs
c28gYSBncmVhdCB3YXkgdG8gb3JnYW5pemUKLSAgICBkZXBlbmRlbmN5IGluamVjdGlvbiBvciBz
ZXR1cCBpbiB5b3VyIG93biBhcHBsaWNhdGlvbi4KLSAgCi0gICAgIyMjIFJvdXRpbmcKLSAgCi0g
ICAgSW4gYWRkaXRpb24gdG8gY3JlYXRpbmcgeW91ciBhcHBsaWNhdGlvbidzIHJvdXRlciwgYEVt
YmVyLkFwcGxpY2F0aW9uYCBpcwotICAgIGFsc28gcmVzcG9uc2libGUgZm9yIHRlbGxpbmcgdGhl
IHJvdXRlciB3aGVuIHRvIHN0YXJ0IHJvdXRpbmcuIFRyYW5zaXRpb25zCi0gICAgYmV0d2VlbiBy
b3V0ZXMgY2FuIGJlIGxvZ2dlZCB3aXRoIHRoZSBgTE9HX1RSQU5TSVRJT05TYCBmbGFnLCBhbmQg
bW9yZQotICAgIGRldGFpbGVkIGludHJhLXRyYW5zaXRpb24gbG9nZ2luZyBjYW4gYmUgbG9nZ2Vk
IHdpdGgKLSAgICB0aGUgYExPR19UUkFOU0lUSU9OU19JTlRFUk5BTGAgZmxhZzoKLSAgCi0gICAg
YGBgamF2YXNjcmlwdAotICAgIHZhciBBcHAgPSBFbWJlci5BcHBsaWNhdGlvbi5jcmVhdGUoewot
ICAgICAgTE9HX1RSQU5TSVRJT05TOiB0cnVlLCAvLyBiYXNpYyBsb2dnaW5nIG9mIHN1Y2Nlc3Nm
dWwgdHJhbnNpdGlvbnMKLSAgICAgIExPR19UUkFOU0lUSU9OU19JTlRFUk5BTDogdHJ1ZSAvLyBk
ZXRhaWxlZCBsb2dnaW5nIG9mIGFsbCByb3V0aW5nIHN0ZXBzCi0gICAgfSk7Ci0gICAgYGBgCi0g
IAotICAgIEJ5IGRlZmF1bHQsIHRoZSByb3V0ZXIgd2lsbCBiZWdpbiB0cnlpbmcgdG8gdHJhbnNs
YXRlIHRoZSBjdXJyZW50IFVSTCBpbnRvCi0gICAgYXBwbGljYXRpb24gc3RhdGUgb25jZSB0aGUg
YnJvd3NlciBlbWl0cyB0aGUgYERPTUNvbnRlbnRSZWFkeWAgZXZlbnQuIElmIHlvdQotICAgIG5l
ZWQgdG8gZGVmZXIgcm91dGluZywgeW91IGNhbiBjYWxsIHRoZSBhcHBsaWNhdGlvbidzIGBkZWZl
clJlYWRpbmVzcygpYAotICAgIG1ldGhvZC4gT25jZSByb3V0aW5nIGNhbiBiZWdpbiwgY2FsbCB0
aGUgYGFkdmFuY2VSZWFkaW5lc3MoKWAgbWV0aG9kLgotICAKLSAgICBJZiB0aGVyZSBpcyBhbnkg
c2V0dXAgcmVxdWlyZWQgYmVmb3JlIHJvdXRpbmcgYmVnaW5zLCB5b3UgY2FuIGltcGxlbWVudCBh
Ci0gICAgYHJlYWR5KClgIG1ldGhvZCBvbiB5b3VyIGFwcCB0aGF0IHdpbGwgYmUgaW52b2tlZCBp
bW1lZGlhdGVseSBiZWZvcmUgcm91dGluZwotICAgIGJlZ2lucy4KLSAgCi0gICAgQGNsYXNzIEFw
cGxpY2F0aW9uCi0gICAgQG5hbWVzcGFjZSBFbWJlcgotICAgIEBleHRlbmRzIEVtYmVyLkVuZ2lu
ZQotICAgIEB1c2VzIFJlZ2lzdHJ5UHJveHlNaXhpbgotICAgIEBwdWJsaWMKLSAgKi8KLQotICB2
YXIgQXBwbGljYXRpb24gPSBfZW1iZXJBcHBsaWNhdGlvblN5c3RlbUVuZ2luZS5kZWZhdWx0LmV4
dGVuZCh7Ci0gICAgX3N1cHByZXNzRGVmZXJyZWREZXByZWNhdGlvbjogdHJ1ZSwKLQotICAgIC8q
KgotICAgICAgVGhlIHJvb3QgRE9NIGVsZW1lbnQgb2YgdGhlIEFwcGxpY2F0aW9uLiBUaGlzIGNh
biBiZSBzcGVjaWZpZWQgYXMgYW4KLSAgICAgIGVsZW1lbnQgb3IgYQotICAgICAgW2pRdWVyeS1j
b21wYXRpYmxlIHNlbGVjdG9yIHN0cmluZ10oaHR0cDovL2FwaS5qcXVlcnkuY29tL2NhdGVnb3J5
L3NlbGVjdG9ycy8pLgotICAgICAgIFRoaXMgaXMgdGhlIGVsZW1lbnQgdGhhdCB3aWxsIGJlIHBh
c3NlZCB0byB0aGUgQXBwbGljYXRpb24ncywKLSAgICAgIGBldmVudERpc3BhdGNoZXJgLCB3aGlj
aCBzZXRzIHVwIHRoZSBsaXN0ZW5lcnMgZm9yIGV2ZW50IGRlbGVnYXRpb24uIEV2ZXJ5Ci0gICAg
ICB2aWV3IGluIHlvdXIgYXBwbGljYXRpb24gc2hvdWxkIGJlIGEgY2hpbGQgb2YgdGhlIGVsZW1l
bnQgeW91IHNwZWNpZnkgaGVyZS4KLSAgICAgICBAcHJvcGVydHkgcm9vdEVsZW1lbnQKLSAgICAg
IEB0eXBlIERPTUVsZW1lbnQKLSAgICAgIEBkZWZhdWx0ICdib2R5JwotICAgICAgQHB1YmxpYwot
ICAgICovCi0gICAgcm9vdEVsZW1lbnQ6ICdib2R5JywKLQotICAgIC8qKgotICAgICAgVGhlIGBF
bWJlci5FdmVudERpc3BhdGNoZXJgIHJlc3BvbnNpYmxlIGZvciBkZWxlZ2F0aW5nIGV2ZW50cyB0
byB0aGlzCi0gICAgICBhcHBsaWNhdGlvbidzIHZpZXdzLgotICAgICAgIFRoZSBldmVudCBkaXNw
YXRjaGVyIGlzIGNyZWF0ZWQgYnkgdGhlIGFwcGxpY2F0aW9uIGF0IGluaXRpYWxpemF0aW9uIHRp
bWUKLSAgICAgIGFuZCBzZXRzIHVwIGV2ZW50IGxpc3RlbmVycyBvbiB0aGUgRE9NIGVsZW1lbnQg
ZGVzY3JpYmVkIGJ5IHRoZQotICAgICAgYXBwbGljYXRpb24ncyBgcm9vdEVsZW1lbnRgIHByb3Bl
cnR5LgotICAgICAgIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgYEVtYmVyLkV2ZW50RGlzcGF0
Y2hlcmAgZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0gICAgICAgQHByb3BlcnR5IGV2ZW50RGlzcGF0
Y2hlcgotICAgICAgQHR5cGUgRW1iZXIuRXZlbnREaXNwYXRjaGVyCi0gICAgICBAZGVmYXVsdCBu
dWxsCi0gICAgICBAcHVibGljCi0gICAgKi8KLSAgICBldmVudERpc3BhdGNoZXI6IG51bGwsCi0K
LSAgICAvKioKLSAgICAgIFRoZSBET00gZXZlbnRzIGZvciB3aGljaCB0aGUgZXZlbnQgZGlzcGF0
Y2hlciBzaG91bGQgbGlzdGVuLgotICAgICAgIEJ5IGRlZmF1bHQsIHRoZSBhcHBsaWNhdGlvbidz
IGBFbWJlci5FdmVudERpc3BhdGNoZXJgIGxpc3RlbnMKLSAgICAgIGZvciBhIHNldCBvZiBzdGFu
ZGFyZCBET00gZXZlbnRzLCBzdWNoIGFzIGBtb3VzZWRvd25gIGFuZAotICAgICAgYGtleXVwYCwg
YW5kIGRlbGVnYXRlcyB0aGVtIHRvIHlvdXIgYXBwbGljYXRpb24ncyBgRW1iZXIuVmlld2AKLSAg
ICAgIGluc3RhbmNlcy4KLSAgICAgICBJZiB5b3Ugd291bGQgbGlrZSBhZGRpdGlvbmFsIGJ1YmJs
aW5nIGV2ZW50cyB0byBiZSBkZWxlZ2F0ZWQgdG8geW91cgotICAgICAgdmlld3MsIHNldCB5b3Vy
IGBFbWJlci5BcHBsaWNhdGlvbmAncyBgY3VzdG9tRXZlbnRzYCBwcm9wZXJ0eQotICAgICAgdG8g
YSBoYXNoIGNvbnRhaW5pbmcgdGhlIERPTSBldmVudCBuYW1lIGFzIHRoZSBrZXkgYW5kIHRoZQot
ICAgICAgY29ycmVzcG9uZGluZyB2aWV3IG1ldGhvZCBuYW1lIGFzIHRoZSB2YWx1ZS4gU2V0dGlu
ZyBhbiBldmVudCB0bwotICAgICAgYSB2YWx1ZSBvZiBgbnVsbGAgd2lsbCBwcmV2ZW50IGEgZGVm
YXVsdCBldmVudCBsaXN0ZW5lciBmcm9tIGJlaW5nCi0gICAgICBhZGRlZCBmb3IgdGhhdCBldmVu
dC4KLSAgICAgICBUbyBhZGQgbmV3IGV2ZW50cyB0byBiZSBsaXN0ZW5lZCB0bzoKLSAgICAgICBg
YGBqYXZhc2NyaXB0Ci0gICAgICB2YXIgQXBwID0gRW1iZXIuQXBwbGljYXRpb24uY3JlYXRlKHsK
LSAgICAgICAgY3VzdG9tRXZlbnRzOiB7Ci0gICAgICAgICAgLy8gYWRkIHN1cHBvcnQgZm9yIHRo
ZSBwYXN0ZSBldmVudAotICAgICAgICAgIHBhc3RlOiAncGFzdGUnCi0gICAgICAgIH0KLSAgICAg
IH0pOwotICAgICAgYGBgCi0gICAgICAgVG8gcHJldmVudCBkZWZhdWx0IGV2ZW50cyBmcm9tIGJl
aW5nIGxpc3RlbmVkIHRvOgotICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgIHZhciBBcHAgPSBF
bWJlci5BcHBsaWNhdGlvbi5jcmVhdGUoewotICAgICAgICBjdXN0b21FdmVudHM6IHsKLSAgICAg
ICAgICAvLyByZW1vdmUgc3VwcG9ydCBmb3IgbW91c2VlbnRlciAvIG1vdXNlbGVhdmUgZXZlbnRz
Ci0gICAgICAgICAgbW91c2VlbnRlcjogbnVsbCwKLSAgICAgICAgICBtb3VzZWxlYXZlOiBudWxs
Ci0gICAgICAgIH0KLSAgICAgIH0pOwotICAgICAgYGBgCi0gICAgICBAcHJvcGVydHkgY3VzdG9t
RXZlbnRzCi0gICAgICBAdHlwZSBPYmplY3QKLSAgICAgIEBkZWZhdWx0IG51bGwKLSAgICAgIEBw
dWJsaWMKLSAgICAqLwotICAgIGN1c3RvbUV2ZW50czogbnVsbCwKLQotICAgIC8qKgotICAgICAg
V2hldGhlciB0aGUgYXBwbGljYXRpb24gc2hvdWxkIGF1dG9tYXRpY2FsbHkgc3RhcnQgcm91dGlu
ZyBhbmQgcmVuZGVyCi0gICAgICB0ZW1wbGF0ZXMgdG8gdGhlIGByb290RWxlbWVudGAgb24gRE9N
IHJlYWR5LiBXaGlsZSBkZWZhdWx0IGJ5IHRydWUsCi0gICAgICBvdGhlciBlbnZpcm9ubWVudHMg
c3VjaCBhcyBGYXN0Qm9vdCBvciBhIHRlc3RpbmcgaGFybmVzcyBjYW4gc2V0IHRoaXMKLSAgICAg
IHByb3BlcnR5IHRvIGBmYWxzZWAgYW5kIGNvbnRyb2wgdGhlIHByZWNpc2UgdGltaW5nIGFuZCBi
ZWhhdmlvciBvZiB0aGUgYm9vdAotICAgICAgcHJvY2Vzcy4KLSAgICAgICBAcHJvcGVydHkgYXV0
b2Jvb3QKLSAgICAgIEB0eXBlIEJvb2xlYW4KLSAgICAgIEBkZWZhdWx0IHRydWUKLSAgICAgIEBw
cml2YXRlCi0gICAgKi8KLSAgICBhdXRvYm9vdDogdHJ1ZSwKLQotICAgIC8qKgotICAgICAgV2hl
dGhlciB0aGUgYXBwbGljYXRpb24gc2hvdWxkIGJlIGNvbmZpZ3VyZWQgZm9yIHRoZSBsZWdhY3kg
Imdsb2JhbHMgbW9kZSIuCi0gICAgICBVbmRlciB0aGlzIG1vZGUsIHRoZSBBcHBsaWNhdGlvbiBv
YmplY3Qgc2VydmVzIGFzIGEgZ2xvYmFsIG5hbWVzcGFjZSBmb3IgYWxsCi0gICAgICBjbGFzc2Vz
LgotICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgIHZhciBBcHAgPSBFbWJlci5BcHBsaWNhdGlv
bi5jcmVhdGUoewotICAgICAgICAuLi4KLSAgICAgIH0pOwotICAgICAgIEFwcC5Sb3V0ZXIucmVv
cGVuKHsKLSAgICAgICAgbG9jYXRpb246ICdub25lJwotICAgICAgfSk7Ci0gICAgICAgQXBwLlJv
dXRlci5tYXAoewotICAgICAgICAuLi4KLSAgICAgIH0pOwotICAgICAgIEFwcC5NeUNvbXBvbmVu
dCA9IEVtYmVyLkNvbXBvbmVudC5leHRlbmQoewotICAgICAgICAuLi4KLSAgICAgIH0pOwotICAg
ICAgYGBgCi0gICAgICAgVGhpcyBmbGFnIGFsc28gZXhwb3NlcyBvdGhlciBpbnRlcm5hbCBBUElz
IHRoYXQgYXNzdW1lcyB0aGUgZXhpc3RlbmNlIG9mCi0gICAgICBhIHNwZWNpYWwgImRlZmF1bHQg
aW5zdGFuY2UiLCBsaWtlIGBBcHAuX19jb250YWluZXJfXy5sb29rdXAoLi4uKWAuCi0gICAgICAg
VGhpcyBvcHRpb24gaXMgY3VycmVudGx5IG5vdCBjb25maWd1cmFibGUsIGl0cyB2YWx1ZSBpcyBk
ZXJpdmVkIGZyb20KLSAgICAgIHRoZSBgYXV0b2Jvb3RgIGZsYWcg4oCTIGRpc2FibGluZyBgYXV0
b2Jvb3RgIGFsc28gaW1wbGllcyBvcHRpbmctb3V0IG9mCi0gICAgICBnbG9iYWxzIG1vZGUgc3Vw
cG9ydCwgYWx0aG91Z2ggdGhleSBhcmUgdWx0aW1hdGVseSBvcnRob2dvbmFsIGNvbmNlcm5zLgot
ICAgICAgIFNvbWUgb2YgdGhlIGdsb2JhbCBtb2RlcyBmZWF0dXJlcyBhcmUgYWxyZWFkeSBkZXBy
ZWNhdGVkIGluIDEueC4gVGhlCi0gICAgICBleGlzdGVuY2Ugb2YgdGhpcyBmbGFnIGlzIHRvIHVu
dGFuZ2xlIHRoZSBnbG9iYWxzIG1vZGUgY29kZSBwYXRocyBmcm9tCi0gICAgICB0aGUgYXV0b2Jv
b3QgY29kZSBwYXRocywgc28gdGhhdCB0aGVzZSBsZWdhY3kgZmVhdHVyZXMgY2FuIGJlIHJldmll
d2VkCi0gICAgICBmb3IgZGVwcmVjYXRpb24vcmVtb3ZhbCBzZXBhcmF0ZWx5LgotICAgICAgIEZv
cmNpbmcgdGhlIChhdXRvYm9vdD10cnVlLCBfZ2xvYmFsc01vZGU9ZmFsc2UpIGhlcmUgYW5kIHJ1
bm5pbmcgdGhlIHRlc3RzCi0gICAgICB3b3VsZCByZXZlYWwgYWxsIHRoZSBwbGFjZXMgd2hlcmUg
d2UgYXJlIHN0aWxsIHJlbHlpbmcgb24gdGhlc2UgbGVnYWN5Ci0gICAgICBiZWhhdmlvciBpbnRl
cm5hbGx5IChtb3N0bHkganVzdCB0ZXN0cykuCi0gICAgICAgQHByb3BlcnR5IF9nbG9iYWxzTW9k
ZQotICAgICAgQHR5cGUgQm9vbGVhbgotICAgICAgQGRlZmF1bHQgdHJ1ZQotICAgICAgQHByaXZh
dGUKLSAgICAqLwotICAgIF9nbG9iYWxzTW9kZTogdHJ1ZSwKLQotICAgIGluaXQ6IGZ1bmN0aW9u
IChvcHRpb25zKSB7Ci0gICAgICB0aGlzLl9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwot
Ci0gICAgICBpZiAoIXRoaXMuJCkgewotICAgICAgICB0aGlzLiQgPSBfZW1iZXJWaWV3c1N5c3Rl
bUpxdWVyeS5kZWZhdWx0OwotICAgICAgfQotCi0gICAgICByZWdpc3RlckxpYnJhcmllcygpOwot
ICAgICAgbG9nTGlicmFyeVZlcnNpb25zKCk7Ci0KLSAgICAgIC8vIFN0YXJ0IG9mZiB0aGUgbnVt
YmVyIG9mIGRlZmVycmFscyBhdCAxLiBUaGlzIHdpbGwgYmUgZGVjcmVtZW50ZWQgYnkKLSAgICAg
IC8vIHRoZSBBcHBsaWNhdGlvbidzIG93biBgYm9vdGAgbWV0aG9kLgotICAgICAgdGhpcy5fcmVh
ZGluZXNzRGVmZXJyYWxzID0gMTsKLSAgICAgIHRoaXMuX2Jvb3RlZCA9IGZhbHNlOwotCi0gICAg
ICB0aGlzLmF1dG9ib290ID0gdGhpcy5fZ2xvYmFsc01vZGUgPSAhIXRoaXMuYXV0b2Jvb3Q7Ci0K
LSAgICAgIGlmICh0aGlzLl9nbG9iYWxzTW9kZSkgewotICAgICAgICB0aGlzLl9wcmVwYXJlRm9y
R2xvYmFsc01vZGUoKTsKLSAgICAgIH0KLQotICAgICAgaWYgKHRoaXMuYXV0b2Jvb3QpIHsKLSAg
ICAgICAgdGhpcy53YWl0Rm9yRE9NUmVhZHkoKTsKLSAgICAgIH0KLSAgICB9LAotCi0gICAgLyoq
Ci0gICAgICBDcmVhdGUgYW4gQXBwbGljYXRpb25JbnN0YW5jZSBmb3IgdGhpcyBhcHBsaWNhdGlv
bi4KLSAgICAgICBAcHJpdmF0ZQotICAgICAgQG1ldGhvZCBidWlsZEluc3RhbmNlCi0gICAgICBA
cmV0dXJuIHtFbWJlci5BcHBsaWNhdGlvbkluc3RhbmNlfSB0aGUgYXBwbGljYXRpb24gaW5zdGFu
Y2UKLSAgICAqLwotICAgIGJ1aWxkSW5zdGFuY2U6IGZ1bmN0aW9uICgpIHsKLSAgICAgIHZhciBv
cHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA8PSAwIHx8IGFyZ3VtZW50c1swXSA9PT0gdW5kZWZp
bmVkID8ge30gOiBhcmd1bWVudHNbMF07Ci0KLSAgICAgIG9wdGlvbnMuYmFzZSA9IHRoaXM7Ci0g
ICAgICBvcHRpb25zLmFwcGxpY2F0aW9uID0gdGhpczsKLSAgICAgIHJldHVybiBfZW1iZXJBcHBs
aWNhdGlvblN5c3RlbUFwcGxpY2F0aW9uSW5zdGFuY2UuZGVmYXVsdC5jcmVhdGUob3B0aW9ucyk7
Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAgRW5hYmxlIHRoZSBsZWdhY3kgZ2xvYmFscyBtb2Rl
IGJ5IGFsbG93aW5nIHRoaXMgYXBwbGljYXRpb24gdG8gYWN0Ci0gICAgICBhcyBhIGdsb2JhbCBu
YW1lc3BhY2UuIFNlZSB0aGUgZG9jcyBvbiB0aGUgYF9nbG9iYWxzTW9kZWAgcHJvcGVydHkKLSAg
ICAgIGZvciBkZXRhaWxzLgotICAgICAgIE1vc3Qgb2YgdGhlc2UgZmVhdHVyZXMgYXJlIGFscmVh
ZHkgZGVwcmVjYXRlZCBpbiAxLngsIHNvIHdlIGNhbgotICAgICAgc3RvcCB1c2luZyB0aGVtIGlu
dGVybmFsbHkgYW5kIHRyeSB0byByZW1vdmUgdGhlbS4KLSAgICAgICBAcHJpdmF0ZQotICAgICAg
QG1ldGhvZCBfcHJlcGFyZUZvckdsb2JhbHNNb2RlCi0gICAgKi8KLSAgICBfcHJlcGFyZUZvckds
b2JhbHNNb2RlOiBmdW5jdGlvbiAoKSB7Ci0gICAgICAvLyBDcmVhdGUgc3ViY2xhc3Mgb2YgRW1i
ZXIuUm91dGVyIGZvciB0aGlzIEFwcGxpY2F0aW9uIGluc3RhbmNlLgotICAgICAgLy8gVGhpcyBp
cyB0byBlbnN1cmUgdGhhdCBzb21lb25lIHJlb3BlbmluZyBgQXBwLlJvdXRlcmAgZG9lcyBub3QK
LSAgICAgIC8vIHRhbXBlciB3aXRoIHRoZSBkZWZhdWx0IGBFbWJlci5Sb3V0ZXJgLgotICAgICAg
dGhpcy5Sb3V0ZXIgPSAodGhpcy5Sb3V0ZXIgfHwgX2VtYmVyUm91dGluZ1N5c3RlbVJvdXRlci5k
ZWZhdWx0KS5leHRlbmQoKTsKLQotICAgICAgdGhpcy5fYnVpbGREZXByZWNhdGVkSW5zdGFuY2Uo
KTsKLSAgICB9LAotCi0gICAgLyoKLSAgICAgIEJ1aWxkIHRoZSBkZXByZWNhdGVkIGluc3RhbmNl
IGZvciBsZWdhY3kgZ2xvYmFscyBtb2RlIHN1cHBvcnQuCi0gICAgICBDYWxsZWQgd2hlbiBjcmVh
dGluZyBhbmQgcmVzZXR0aW5nIHRoZSBhcHBsaWNhdGlvbi4KLSAgICAgICBUaGlzIGlzIG9ydGhv
Z29uYWwgdG8gYXV0b2Jvb3Q6IHRoZSBkZXByZWNhdGVkIGluc3RhbmNlIG5lZWRzIHRvCi0gICAg
ICBiZSBjcmVhdGVkIGF0IEFwcGxpY2F0aW9uIGNvbnN0cnVjdGlvbiAobm90IGJvb3QpIHRpbWUg
dG8gZXhwb3NlCi0gICAgICBBcHAuX19jb250YWluZXJfXyBhbmQgdGhlIGdsb2JhbCBFbWJlci5W
aWV3LnZpZXdzIHJlZ2lzdHJ5LiBJZgotICAgICAgYXV0b2Jvb3Qgc2VlcyB0aGF0IHRoaXMgaW5z
dGFuY2UgZXhpc3RzLCBpdCB3aWxsIGNvbnRpbnVlIGJvb3RpbmcKLSAgICAgIGl0IHRvIGF2b2lk
IGRvaW5nIHVubmNlc3Nhcnkgd29yayAoYXMgb3Bwb3NlZCB0byBidWlsZGluZyBhIG5ldwotICAg
ICAgaW5zdGFuY2UgYXQgYm9vdCB0aW1lKSwgYnV0IHRoZXkgYXJlIG90aGVyd2lzZSB1bnJlbGF0
ZWQuCi0gICAgICAgQHByaXZhdGUKLSAgICAgIEBtZXRob2QgX2J1aWxkRGVwcmVjYXRlZEluc3Rh
bmNlCi0gICAgKi8KLSAgICBfYnVpbGREZXByZWNhdGVkSW5zdGFuY2U6IGZ1bmN0aW9uICgpIHsK
LSAgICAgIC8vIEJ1aWxkIGEgZGVmYXVsdCBpbnN0YW5jZQotICAgICAgdmFyIGluc3RhbmNlID0g
dGhpcy5idWlsZEluc3RhbmNlKCk7Ci0KLSAgICAgIC8vIExlZ2FjeSBzdXBwb3J0IGZvciBBcHAu
X19jb250YWluZXJfXyBhbmQgb3RoZXIgZ2xvYmFsIG1ldGhvZHMKLSAgICAgIC8vIG9uIEFwcCB0
aGF0IHJlbHkgb24gYSBzaW5nbGUsIGRlZmF1bHQgaW5zdGFuY2UuCi0gICAgICB0aGlzLl9fZGVw
cmVjYXRlZEluc3RhbmNlX18gPSBpbnN0YW5jZTsKLSAgICAgIHRoaXMuX19jb250YWluZXJfXyA9
IGluc3RhbmNlLl9fY29udGFpbmVyX187Ci0KLSAgICAgIC8vIEZvciB0aGUgZGVmYXVsdCBpbnN0
YW5jZSBvbmx5LCBzZXQgdGhlIHZpZXcgcmVnaXN0cnkgdG8gdGhlIGdsb2JhbAotICAgICAgLy8g
RW1iZXIuVmlldy52aWV3cyBoYXNoIGZvciBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eS4KLSAgICAg
IF9lbWJlclZpZXdzVmlld3NWaWV3LmRlZmF1bHQudmlld3MgPSBpbnN0YW5jZS5sb29rdXAoJy12
aWV3LXJlZ2lzdHJ5Om1haW4nKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICBBdXRvbWF0aWNh
bGx5IGtpY2stb2ZmIHRoZSBib290IHByb2Nlc3MgZm9yIHRoZSBhcHBsaWNhdGlvbiBvbmNlIHRo
ZQotICAgICAgRE9NIGhhcyBiZWNvbWUgcmVhZHkuCi0gICAgICAgVGhlIGluaXRpYWxpemF0aW9u
IGl0c2VsZiBpcyBzY2hlZHVsZWQgb24gdGhlIGFjdGlvbnMgcXVldWUgd2hpY2gKLSAgICAgIGVu
c3VyZXMgdGhhdCBjb2RlLWxvYWRpbmcgZmluaXNoZXMgYmVmb3JlIGJvb3RpbmcuCi0gICAgICAg
SWYgeW91IGFyZSBhc3luY2hyb25vdXNseSBsb2FkaW5nIGNvZGUsIHlvdSBzaG91bGQgY2FsbCBg
ZGVmZXJSZWFkaW5lc3MoKWAKLSAgICAgIHRvIGRlZmVyIGJvb3RpbmcsIGFuZCB0aGVuIGNhbGwg
YGFkdmFuY2VSZWFkaW5lc3MoKWAgb25jZSBhbGwgb2YgeW91ciBjb2RlCi0gICAgICBoYXMgZmlu
aXNoZWQgbG9hZGluZy4KLSAgICAgICBAcHJpdmF0ZQotICAgICAgQG1ldGhvZCB3YWl0Rm9yRE9N
UmVhZHkKLSAgICAqLwotICAgIHdhaXRGb3JET01SZWFkeTogZnVuY3Rpb24gKCkgewotICAgICAg
aWYgKCF0aGlzLiQgfHwgdGhpcy4kLmlzUmVhZHkpIHsKLSAgICAgICAgX2VtYmVyTWV0YWxSdW5f
bG9vcC5kZWZhdWx0LnNjaGVkdWxlKCdhY3Rpb25zJywgdGhpcywgJ2RvbVJlYWR5Jyk7Ci0gICAg
ICB9IGVsc2UgewotICAgICAgICB0aGlzLiQoKS5yZWFkeShfZW1iZXJNZXRhbFJ1bl9sb29wLmRl
ZmF1bHQuYmluZCh0aGlzLCAnZG9tUmVhZHknKSk7Ci0gICAgICB9Ci0gICAgfSwKLQotICAgIC8q
KgotICAgICAgVGhpcyBpcyB0aGUgYXV0b2Jvb3QgZmxvdzoKLSAgICAgICAxLiBCb290IHRoZSBh
cHAgYnkgY2FsbGluZyBgdGhpcy5ib290KClgCi0gICAgICAyLiBDcmVhdGUgYW4gaW5zdGFuY2Ug
KG9yIHVzZSB0aGUgYF9fZGVwcmVjYXRlZEluc3RhbmNlX19gIGluIGdsb2JhbHMgbW9kZSkKLSAg
ICAgIDMuIEJvb3QgdGhlIGluc3RhbmNlIGJ5IGNhbGxpbmcgYGluc3RhbmNlLmJvb3QoKWAKLSAg
ICAgIDQuIEludm9rZSB0aGUgYEFwcC5yZWFkeSgpYCBjYWxsYmFjawotICAgICAgNS4gS2ljay1v
ZmYgcm91dGluZyBvbiB0aGUgaW5zdGFuY2UKLSAgICAgICBJZGVhbGx5LCB0aGlzIGlzIGFsbCB3
ZSB3b3VsZCBuZWVkIHRvIGRvOgotICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgIF9hdXRvQm9v
dCgpIHsKLSAgICAgICAgdGhpcy5ib290KCkudGhlbigoKSA9PiB7Ci0gICAgICAgICAgbGV0IGlu
c3RhbmNlID0gKHRoaXMuX2dsb2JhbHNNb2RlKSA/IHRoaXMuX19kZXByZWNhdGVkSW5zdGFuY2Vf
XyA6IHRoaXMuYnVpbGRJbnN0YW5jZSgpOwotICAgICAgICAgIHJldHVybiBpbnN0YW5jZS5ib290
KCk7Ci0gICAgICAgIH0pLnRoZW4oKGluc3RhbmNlKSA9PiB7Ci0gICAgICAgICAgQXBwLnJlYWR5
KCk7Ci0gICAgICAgICAgaW5zdGFuY2Uuc3RhcnRSb3V0aW5nKCk7Ci0gICAgICAgIH0pOwotICAg
ICAgfQotICAgICAgYGBgCi0gICAgICAgVW5mb3J0dW5hdGVseSwgd2UgY2Fubm90IGFjdHVhbGx5
IHdyaXRlIHRoaXMgYmVjYXVzZSB3ZSBuZWVkIHRvIHBhcnRpY2lwYXRlCi0gICAgICBpbiB0aGUg
InN5bmNocm9ub3VzIiBib290IHByb2Nlc3MuIFdoaWxlIHRoZSBjb2RlIGFib3ZlIHdvdWxkIHdv
cmsgZmluZSBvbgotICAgICAgdGhlIGluaXRpYWwgYm9vdCAoaS5lLiBET00gcmVhZHkpLCB3aGVu
IGBBcHAucmVzZXQoKWAgaXMgY2FsbGVkLCB3ZSBuZWVkIHRvCi0gICAgICBib290IGEgbmV3IGlu
c3RhbmNlIHN5bmNocm9ub3VzbHkgKHNlZSB0aGUgZG9jdW1lbnRhdGlvbiBvbiBgX2Jvb3RTeW5j
KClgCi0gICAgICBmb3IgZGV0YWlscykuCi0gICAgICAgQmVjYXVzZSBvZiB0aGlzIHJlc3RyaWN0
aW9uLCB0aGUgYWN0dWFsIGxvZ2ljIG9mIHRoaXMgbWV0aG9kIGlzIGxvY2F0ZWQKLSAgICAgIGlu
c2lkZSBgZGlkQmVjb21lUmVhZHkoKWAuCi0gICAgICAgQHByaXZhdGUKLSAgICAgIEBtZXRob2Qg
ZG9tUmVhZHkKLSAgICAqLwotICAgIGRvbVJlYWR5OiBmdW5jdGlvbiAoKSB7Ci0gICAgICBpZiAo
dGhpcy5pc0Rlc3Ryb3llZCkgewotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0KLSAgICAgIHRo
aXMuX2Jvb3RTeW5jKCk7Ci0KLSAgICAgIC8vIENvbnRpbnVlcyB0byBgZGlkQmVjb21lUmVhZHlg
Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAgVXNlIHRoaXMgdG8gZGVmZXIgcmVhZGluZXNzIHVu
dGlsIHNvbWUgY29uZGl0aW9uIGlzIHRydWUuCi0gICAgICAgRXhhbXBsZToKLSAgICAgICBgYGBq
YXZhc2NyaXB0Ci0gICAgICB2YXIgQXBwID0gRW1iZXIuQXBwbGljYXRpb24uY3JlYXRlKCk7Ci0g
ICAgICAgQXBwLmRlZmVyUmVhZGluZXNzKCk7Ci0gICAgICAgLy8gRW1iZXIuJCBpcyBhIHJlZmVy
ZW5jZSB0byB0aGUgalF1ZXJ5IG9iamVjdC9mdW5jdGlvbgotICAgICAgRW1iZXIuJC5nZXRKU09O
KCcvYXV0aC10b2tlbicsIGZ1bmN0aW9uKHRva2VuKSB7Ci0gICAgICAgIEFwcC50b2tlbiA9IHRv
a2VuOwotICAgICAgICBBcHAuYWR2YW5jZVJlYWRpbmVzcygpOwotICAgICAgfSk7Ci0gICAgICBg
YGAKLSAgICAgICBUaGlzIGFsbG93cyB5b3UgdG8gcGVyZm9ybSBhc3luY2hyb25vdXMgc2V0dXAg
bG9naWMgYW5kIGRlZmVyCi0gICAgICBib290aW5nIHlvdXIgYXBwbGljYXRpb24gdW50aWwgdGhl
IHNldHVwIGhhcyBmaW5pc2hlZC4KLSAgICAgICBIb3dldmVyLCBpZiB0aGUgc2V0dXAgcmVxdWly
ZXMgYSBsb2FkaW5nIFVJLCBpdCBtaWdodCBiZSBiZXR0ZXIKLSAgICAgIHRvIHVzZSB0aGUgcm91
dGVyIGZvciB0aGlzIHB1cnBvc2UuCi0gICAgICAgQG1ldGhvZCBkZWZlclJlYWRpbmVzcwotICAg
ICAgQHB1YmxpYwotICAgICovCi0gICAgZGVmZXJSZWFkaW5lc3M6IGZ1bmN0aW9uICgpIHsKLSAg
ICAgIF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0KCdZb3UgbXVzdCBjYWxsIGRlZmVyUmVhZGluZXNz
IG9uIGFuIGluc3RhbmNlIG9mIEVtYmVyLkFwcGxpY2F0aW9uJywgdGhpcyBpbnN0YW5jZW9mIEFw
cGxpY2F0aW9uKTsKLSAgICAgIF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0KCdZb3UgY2Fubm90IGRl
ZmVyIHJlYWRpbmVzcyBzaW5jZSB0aGUgYHJlYWR5KClgIGhvb2sgaGFzIGFscmVhZHkgYmVlbiBj
YWxsZWQuJywgdGhpcy5fcmVhZGluZXNzRGVmZXJyYWxzID4gMCk7Ci0gICAgICB0aGlzLl9yZWFk
aW5lc3NEZWZlcnJhbHMrKzsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICBDYWxsIGBhZHZhbmNl
UmVhZGluZXNzYCBhZnRlciBhbnkgYXN5bmNocm9ub3VzIHNldHVwIGxvZ2ljIGhhcyBjb21wbGV0
ZWQuCi0gICAgICBFYWNoIGNhbGwgdG8gYGRlZmVyUmVhZGluZXNzYCBtdXN0IGJlIG1hdGNoZWQg
YnkgYSBjYWxsIHRvIGBhZHZhbmNlUmVhZGluZXNzYAotICAgICAgb3IgdGhlIGFwcGxpY2F0aW9u
IHdpbGwgbmV2ZXIgYmVjb21lIHJlYWR5IGFuZCByb3V0aW5nIHdpbGwgbm90IGJlZ2luLgotICAg
ICAgIEBtZXRob2QgYWR2YW5jZVJlYWRpbmVzcwotICAgICAgQHNlZSB7RW1iZXIuQXBwbGljYXRp
b24jZGVmZXJSZWFkaW5lc3N9Ci0gICAgICBAcHVibGljCi0gICAgKi8KLSAgICBhZHZhbmNlUmVh
ZGluZXNzOiBmdW5jdGlvbiAoKSB7Ci0gICAgICBfZW1iZXJNZXRhbERlYnVnLmFzc2VydCgnWW91
IG11c3QgY2FsbCBhZHZhbmNlUmVhZGluZXNzIG9uIGFuIGluc3RhbmNlIG9mIEVtYmVyLkFwcGxp
Y2F0aW9uJywgdGhpcyBpbnN0YW5jZW9mIEFwcGxpY2F0aW9uKTsKLSAgICAgIHRoaXMuX3JlYWRp
bmVzc0RlZmVycmFscy0tOwotCi0gICAgICBpZiAodGhpcy5fcmVhZGluZXNzRGVmZXJyYWxzID09
PSAwKSB7Ci0gICAgICAgIF9lbWJlck1ldGFsUnVuX2xvb3AuZGVmYXVsdC5vbmNlKHRoaXMsIHRo
aXMuZGlkQmVjb21lUmVhZHkpOwotICAgICAgfQotICAgIH0sCi0KLSAgICAvKioKLSAgICAgIElu
aXRpYWxpemUgdGhlIGFwcGxpY2F0aW9uIGFuZCByZXR1cm4gYSBwcm9taXNlIHRoYXQgcmVzb2x2
ZXMgd2l0aCB0aGUgYEVtYmVyLkFwcGxpY2F0aW9uYAotICAgICAgb2JqZWN0IHdoZW4gdGhlIGJv
b3QgcHJvY2VzcyBpcyBjb21wbGV0ZS4KLSAgICAgICBSdW4gYW55IGFwcGxpY2F0aW9uIGluaXRp
YWxpemVycyBhbmQgcnVuIHRoZSBhcHBsaWNhdGlvbiBsb2FkIGhvb2suIFRoZXNlIGhvb2tzIG1h
eQotICAgICAgY2hvb3NlIHRvIGRlZmVyIHJlYWRpbmVzcy4gRm9yIGV4YW1wbGUsIGFuIGF1dGhl
bnRpY2F0aW9uIGhvb2sgbWlnaHQgd2FudCB0byBkZWZlcgotICAgICAgcmVhZGluZXNzIHVudGls
IHRoZSBhdXRoIHRva2VuIGhhcyBiZWVuIHJldHJpZXZlZC4KLSAgICAgICBCeSBkZWZhdWx0LCB0
aGlzIG1ldGhvZCBpcyBjYWxsZWQgYXV0b21hdGljYWxseSBvbiAiRE9NIHJlYWR5IjsgaG93ZXZl
ciwgaWYgYXV0b2Jvb3QKLSAgICAgIGlzIGRpc2FibGVkLCB0aGlzIGlzIGF1dG9tYXRpY2FsbHkg
Y2FsbGVkIHdoZW4gdGhlIGZpcnN0IGFwcGxpY2F0aW9uIGluc3RhbmNlIGlzCi0gICAgICBjcmVh
dGVkIHZpYSBgdmlzaXRgLgotICAgICAgIEBwcml2YXRlCi0gICAgICBAbWV0aG9kIGJvb3QKLSAg
ICAgIEByZXR1cm4ge1Byb21pc2U8RW1iZXIuQXBwbGljYXRpb24sRXJyb3I+fQotICAgICovCi0g
ICAgYm9vdDogZnVuY3Rpb24gKCkgewotICAgICAgaWYgKHRoaXMuX2Jvb3RQcm9taXNlKSB7Ci0g
ICAgICAgIHJldHVybiB0aGlzLl9ib290UHJvbWlzZTsKLSAgICAgIH0KLQotICAgICAgdHJ5IHsK
LSAgICAgICAgdGhpcy5fYm9vdFN5bmMoKTsKLSAgICAgIH0gY2F0Y2ggKF8pIHsKLSAgICAgICAg
Ly8gSWdub3JlIHRoIGVycm9yOiBpbiB0aGUgYXN5bmNocm9ub3VzIGJvb3QgcGF0aCwgdGhlIGVy
cm9yIGlzIGFscmVhZHkgcmVmbGVjdGVkCi0gICAgICAgIC8vIGluIHRoZSBwcm9taXNlIHJlamVj
dGlvbgotICAgICAgfQotCi0gICAgICByZXR1cm4gdGhpcy5fYm9vdFByb21pc2U7Ci0gICAgfSwK
LQotICAgIC8qKgotICAgICAgVW5mb3J0dW5hdGVseSwgYSBsb3Qgb2YgZXhpc3RpbmcgY29kZSBh
c3N1bWVzIHRoZSBib290aW5nIHByb2Nlc3MgaXMKLSAgICAgICJzeW5jaHJvbm91cyIuIFNwZWNp
ZmljYWxseSwgYSBsb3Qgb2YgdGVzdHMgYXNzdW1lcyB0aGUgbGFzdCBjYWxsIHRvCi0gICAgICBg
YXBwLmFkdmFuY2VSZWFkaW5lc3MoKWAgb3IgYGFwcC5yZXNldCgpYCB3aWxsIHJlc3VsdCBpbiB0
aGUgYXBwIGJlaW5nCi0gICAgICBmdWxseS1ib290ZWQgd2hlbiB0aGUgY3VycmVudCBydW5sb29w
IGNvbXBsZXRlcy4KLSAgICAgICBXZSB3b3VsZCBsaWtlIG5ldyBjb2RlIChsaWtlIHRoZSBgdmlz
aXRgIEFQSSkgdG8gc3RvcCBtYWtpbmcgdGhpcyBhc3N1bXB0aW9uLAotICAgICAgc28gd2UgY3Jl
YXRlZCB0aGUgYXN5bmNocm9ub3VzIHZlcnNpb24gYWJvdmUgdGhhdCByZXR1cm5zIGEgcHJvbWlz
ZS4gQnV0IHVudGlsCi0gICAgICB3ZSBoYXZlIG1pZ3JhdGVkIGFsbCB0aGUgY29kZSwgd2Ugd291
bGQgaGF2ZSB0byBleHBvc2UgdGhpcyBtZXRob2QgZm9yIHVzZQotICAgICAgKmludGVybmFsbHkq
IGluIHBsYWNlcyB3aGVyZSB3ZSBuZWVkIHRvIGJvb3QgYW4gYXBwICJzeW5jaHJvbm91c2x5Ii4K
LSAgICAgICBAcHJpdmF0ZQotICAgICovCi0gICAgX2Jvb3RTeW5jOiBmdW5jdGlvbiAoKSB7Ci0g
ICAgICBpZiAodGhpcy5fYm9vdGVkKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLQotICAg
ICAgaWYgKF9lbWJlck1ldGFsLmRlZmF1bHQuRU5WLl9FTkFCTEVfTEVHQUNZX1ZJRVdfU1VQUE9S
VCAmJiAhd2FybmVkQWJvdXRMZWdhY3lWaWV3QWRkb24pIHsKLSAgICAgICAgX2VtYmVyTWV0YWxE
ZWJ1Zy5kZXByZWNhdGUoJ1N1cHBvcnQgZm9yIHRoZSBgZW1iZXItbGVnYWN5LXZpZXdzYCBhZGRv
biB3aWxsIGVuZCBzb29uLCBwbGVhc2UgcmVtb3ZlIGl0IGZyb20geW91ciBhcHBsaWNhdGlvbi4n
LCBmYWxzZSwgeyBpZDogJ2VtYmVyLWxlZ2FjeS12aWV3cycsIHVudGlsOiAnMi42LjAnLCB1cmw6
ICdodHRwOi8vZW1iZXJqcy5jb20vZGVwcmVjYXRpb25zL3YxLngvI3RvY19lbWJlci12aWV3JyB9
KTsKLQotICAgICAgICB3YXJuZWRBYm91dExlZ2FjeVZpZXdBZGRvbiA9IHRydWU7Ci0gICAgICB9
Ci0KLSAgICAgIGlmIChfZW1iZXJNZXRhbC5kZWZhdWx0LkVOVi5fRU5BQkxFX0xFR0FDWV9DT05U
Uk9MTEVSX1NVUFBPUlQgJiYgIXdhcm5lZEFib3V0TGVnYWN5Q29udHJvbGxlckFkZG9uKSB7Ci0g
ICAgICAgIF9lbWJlck1ldGFsRGVidWcud2FybignU3VwcG9ydCBmb3IgdGhlIGBlbWJlci1sZWdh
Y3ktY29udHJvbGxlcnNgIGhhcyBiZWVuIHJlbW92ZWQsIHBsZWFzZSByZW1vdmUgaXQgZnJvbSB5
b3VyIGFwcGxpY2F0aW9uLicsIGZhbHNlLCB7IGlkOiAnZW1iZXItbGVnYWN5LWNvbnRyb2xsZXJz
JywgdXJsOiAnaHR0cDovL2VtYmVyanMuY29tL2RlcHJlY2F0aW9ucy92MS54LyN0b2Nfb2JqZWN0
Y29udHJvbGxlcicgfSk7Ci0KLSAgICAgICAgd2FybmVkQWJvdXRMZWdhY3lDb250cm9sbGVyQWRk
b24gPSB0cnVlOwotICAgICAgfQotCi0gICAgICAvLyBFdmVuIHRob3VnaCB0aGlzIHJldHVybnMg
c3luY2hyb25vdXNseSwgd2Ugc3RpbGwgbmVlZCB0byBtYWtlIHN1cmUgdGhlCi0gICAgICAvLyBi
b290IHByb21pc2UgZXhpc3RzIGZvciBib29rLWtlZXBpbmcgcHVycG9zZXM6IGlmIGFueXRoaW5n
IHdlbnQgd3JvbmcgaW4KLSAgICAgIC8vIHRoZSBib290IHByb2Nlc3MsIHdlIG5lZWQgdG8gc3Rv
cmUgdGhlIGVycm9yIGFzIGEgcmVqZWN0aW9uIG9uIHRoZSBib290Ci0gICAgICAvLyBwcm9taXNl
IHNvIHRoYXQgYSBmdXR1cmUgY2FsbGVyIG9mIGBib290KClgIGNhbiB0ZWxsIHdoYXQgZmFpbGVk
LgotICAgICAgdmFyIGRlZmVyID0gdGhpcy5fYm9vdFJlc29sdmVyID0gbmV3IF9lbWJlclJ1bnRp
bWVFeHRSc3ZwLmRlZmF1bHQuZGVmZXIoKTsKLSAgICAgIHRoaXMuX2Jvb3RQcm9taXNlID0gZGVm
ZXIucHJvbWlzZTsKLQotICAgICAgdHJ5IHsKLSAgICAgICAgdGhpcy5ydW5Jbml0aWFsaXplcnMo
KTsKLSAgICAgICAgX2VtYmVyUnVudGltZVN5c3RlbUxhenlfbG9hZC5ydW5Mb2FkSG9va3MoJ2Fw
cGxpY2F0aW9uJywgdGhpcyk7Ci0gICAgICAgIHRoaXMuYWR2YW5jZVJlYWRpbmVzcygpOwotICAg
ICAgICAvLyBDb250aW51ZXMgdG8gYGRpZEJlY29tZVJlYWR5YAotICAgICAgfSBjYXRjaCAoZXJy
b3IpIHsKLSAgICAgICAgLy8gRm9yIHRoZSBhc3luY2hyb25vdXMgYm9vdCBwYXRoCi0gICAgICAg
IGRlZmVyLnJlamVjdChlcnJvcik7Ci0KLSAgICAgICAgLy8gRm9yIHRoZSBzeW5jaHJvbm91cyBi
b290IHBhdGgKLSAgICAgICAgdGhyb3cgZXJyb3I7Ci0gICAgICB9Ci0gICAgfSwKLQotICAgIC8q
KgotICAgICAgUmVzZXQgdGhlIGFwcGxpY2F0aW9uLiBUaGlzIGlzIHR5cGljYWxseSB1c2VkIG9u
bHkgaW4gdGVzdHMuIEl0IGNsZWFucyB1cAotICAgICAgdGhlIGFwcGxpY2F0aW9uIGluIHRoZSBm
b2xsb3dpbmcgb3JkZXI6Ci0gICAgICAgMS4gRGVhY3RpdmF0ZSBleGlzdGluZyByb3V0ZXMKLSAg
ICAgIDIuIERlc3Ryb3kgYWxsIG9iamVjdHMgaW4gdGhlIGNvbnRhaW5lcgotICAgICAgMy4gQ3Jl
YXRlIGEgbmV3IGFwcGxpY2F0aW9uIGNvbnRhaW5lcgotICAgICAgNC4gUmUtcm91dGUgdG8gdGhl
IGV4aXN0aW5nIHVybAotICAgICAgIFR5cGljYWwgRXhhbXBsZToKLSAgICAgICBgYGBqYXZhc2Ny
aXB0Ci0gICAgICB2YXIgQXBwOwotICAgICAgIHJ1bihmdW5jdGlvbigpIHsKLSAgICAgICAgQXBw
ID0gRW1iZXIuQXBwbGljYXRpb24uY3JlYXRlKCk7Ci0gICAgICB9KTsKLSAgICAgICBtb2R1bGUo
J2FjY2VwdGFuY2UgdGVzdCcsIHsKLSAgICAgICAgc2V0dXA6IGZ1bmN0aW9uKCkgewotICAgICAg
ICAgIEFwcC5yZXNldCgpOwotICAgICAgICB9Ci0gICAgICB9KTsKLSAgICAgICB0ZXN0KCdmaXJz
dCB0ZXN0JywgZnVuY3Rpb24oKSB7Ci0gICAgICAgIC8vIEFwcCBpcyBmcmVzaGx5IHJlc2V0Ci0g
ICAgICB9KTsKLSAgICAgICB0ZXN0KCdzZWNvbmQgdGVzdCcsIGZ1bmN0aW9uKCkgewotICAgICAg
ICAvLyBBcHAgaXMgYWdhaW4gZnJlc2hseSByZXNldAotICAgICAgfSk7Ci0gICAgICBgYGAKLSAg
ICAgICBBZHZhbmNlZCBFeGFtcGxlOgotICAgICAgIE9jY2FzaW9uYWxseSB5b3UgbWF5IHdhbnQg
dG8gcHJldmVudCB0aGUgYXBwIGZyb20gaW5pdGlhbGl6aW5nIGR1cmluZwotICAgICAgc2V0dXAu
IFRoaXMgY291bGQgZW5hYmxlIGV4dHJhIGNvbmZpZ3VyYXRpb24sIG9yIGVuYWJsZSBhc3NlcnRp
bmcgcHJpb3IKLSAgICAgIHRvIHRoZSBhcHAgYmVjb21pbmcgcmVhZHkuCi0gICAgICAgYGBgamF2
YXNjcmlwdAotICAgICAgdmFyIEFwcDsKLSAgICAgICBydW4oZnVuY3Rpb24oKSB7Ci0gICAgICAg
IEFwcCA9IEVtYmVyLkFwcGxpY2F0aW9uLmNyZWF0ZSgpOwotICAgICAgfSk7Ci0gICAgICAgbW9k
dWxlKCdhY2NlcHRhbmNlIHRlc3QnLCB7Ci0gICAgICAgIHNldHVwOiBmdW5jdGlvbigpIHsKLSAg
ICAgICAgICBydW4oZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICBBcHAucmVzZXQoKTsKLSAgICAg
ICAgICAgIEFwcC5kZWZlclJlYWRpbmVzcygpOwotICAgICAgICAgIH0pOwotICAgICAgICB9Ci0g
ICAgICB9KTsKLSAgICAgICB0ZXN0KCdmaXJzdCB0ZXN0JywgZnVuY3Rpb24oKSB7Ci0gICAgICAg
IG9rKHRydWUsICdzb21ldGhpbmcgYmVmb3JlIGFwcCBpcyBpbml0aWFsaXplZCcpOwotICAgICAg
ICAgcnVuKGZ1bmN0aW9uKCkgewotICAgICAgICAgIEFwcC5hZHZhbmNlUmVhZGluZXNzKCk7Ci0g
ICAgICAgIH0pOwotICAgICAgICAgb2sodHJ1ZSwgJ3NvbWV0aGluZyBhZnRlciBhcHAgaXMgaW5p
dGlhbGl6ZWQnKTsKLSAgICAgIH0pOwotICAgICAgYGBgCi0gICAgICAgQG1ldGhvZCByZXNldAot
ICAgICAgQHB1YmxpYwotICAgICovCi0gICAgcmVzZXQ6IGZ1bmN0aW9uICgpIHsKLSAgICAgIF9l
bWJlck1ldGFsRGVidWcuYXNzZXJ0KCdDYWxsaW5nIHJlc2V0KCkgb24gaW5zdGFuY2VzIG9mIGBF
bWJlci5BcHBsaWNhdGlvbmAgaXMgbm90XG4gICAgICAgICAgICBzdXBwb3J0ZWQgd2hlbiBnbG9i
YWxzIG1vZGUgaXMgZGlzYWJsZWQ7IGNhbGwgYHZpc2l0KClgIHRvXG4gICAgICAgICAgICBjcmVh
dGUgbmV3IGBFbWJlci5BcHBsaWNhdGlvbkluc3RhbmNlYHMgYW5kIGRpc3Bvc2UgdGhlbVxuICAg
ICAgICAgICAgdmlhIHRoZWlyIGBkZXN0cm95KClgIG1ldGhvZCBpbnN0ZWFkLicsIHRoaXMuX2ds
b2JhbHNNb2RlICYmIHRoaXMuYXV0b2Jvb3QpOwotCi0gICAgICB2YXIgaW5zdGFuY2UgPSB0aGlz
Ll9fZGVwcmVjYXRlZEluc3RhbmNlX187Ci0KLSAgICAgIHRoaXMuX3JlYWRpbmVzc0RlZmVycmFs
cyA9IDE7Ci0gICAgICB0aGlzLl9ib290UHJvbWlzZSA9IG51bGw7Ci0gICAgICB0aGlzLl9ib290
UmVzb2x2ZXIgPSBudWxsOwotICAgICAgdGhpcy5fYm9vdGVkID0gZmFsc2U7Ci0KLSAgICAgIGZ1
bmN0aW9uIGhhbmRsZVJlc2V0KCkgewotICAgICAgICBfZW1iZXJNZXRhbFJ1bl9sb29wLmRlZmF1
bHQoaW5zdGFuY2UsICdkZXN0cm95Jyk7Ci0gICAgICAgIHRoaXMuX2J1aWxkRGVwcmVjYXRlZElu
c3RhbmNlKCk7Ci0gICAgICAgIF9lbWJlck1ldGFsUnVuX2xvb3AuZGVmYXVsdC5zY2hlZHVsZSgn
YWN0aW9ucycsIHRoaXMsICdfYm9vdFN5bmMnKTsKLSAgICAgIH0KLQotICAgICAgX2VtYmVyTWV0
YWxSdW5fbG9vcC5kZWZhdWx0LmpvaW4odGhpcywgaGFuZGxlUmVzZXQpOwotICAgIH0sCi0KLSAg
ICAvKioKLSAgICAgIEBwcml2YXRlCi0gICAgICBAbWV0aG9kIGRpZEJlY29tZVJlYWR5Ci0gICAg
Ki8KLSAgICBkaWRCZWNvbWVSZWFkeTogZnVuY3Rpb24gKCkgewotICAgICAgdHJ5IHsKLSAgICAg
ICAgLy8gVE9ETzogSXMgdGhpcyBzdGlsbCBuZWVkZWQgZm9yIF9nbG9iYWxzTW9kZSA9IGZhbHNl
PwotICAgICAgICBpZiAoIV9lbWJlck1ldGFsLmRlZmF1bHQudGVzdGluZykgewotICAgICAgICAg
IC8vIEVhZ2VybHkgbmFtZSBhbGwgY2xhc3NlcyB0aGF0IGFyZSBhbHJlYWR5IGxvYWRlZAotICAg
ICAgICAgIF9lbWJlck1ldGFsLmRlZmF1bHQuTmFtZXNwYWNlLnByb2Nlc3NBbGwoKTsKLSAgICAg
ICAgICBfZW1iZXJNZXRhbC5kZWZhdWx0LkJPT1RFRCA9IHRydWU7Ci0gICAgICAgIH0KLQotICAg
ICAgICAvLyBTZWUgZG9jdW1lbnRhdGlvbiBvbiBgX2F1dG9ib290KClgIGZvciBkZXRhaWxzCi0g
ICAgICAgIGlmICh0aGlzLmF1dG9ib290KSB7Ci0gICAgICAgICAgdmFyIGluc3RhbmNlID0gdW5k
ZWZpbmVkOwotCi0gICAgICAgICAgaWYgKHRoaXMuX2dsb2JhbHNNb2RlKSB7Ci0gICAgICAgICAg
ICAvLyBJZiB3ZSBhbHJlYWR5IGhhdmUgdGhlIF9fZGVwcmVjYXRlZEluc3RhbmNlX18gbHlpbmcg
YXJvdW5kLCBib290IGl0IHRvCi0gICAgICAgICAgICAvLyBhdm9pZCB1bm5lY2Vzc2FyeSB3b3Jr
Ci0gICAgICAgICAgICBpbnN0YW5jZSA9IHRoaXMuX19kZXByZWNhdGVkSW5zdGFuY2VfXzsKLSAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCBidWlsZCBhbiBpbnN0
YW5jZSBhbmQgYm9vdCBpdC4gVGhpcyBpcyBjdXJyZW50bHkgdW5yZWFjaGFibGUsCi0gICAgICAg
ICAgICAvLyBiZWNhdXNlIHdlIGZvcmNlZCBfZ2xvYmFsc01vZGUgdG8gPT09IGF1dG9ib290OyBi
dXQgaGF2aW5nIHRoaXMgYnJhbmNoCi0gICAgICAgICAgICAvLyBhbGxvd3MgdXMgdG8gbG9jYWxs
eSB0b2dnbGUgdGhhdCBmbGFnIGZvciB3ZWVkaW5nIG91dCBsZWdhY3kgZ2xvYmFscyBtb2RlCi0g
ICAgICAgICAgICAvLyBkZXBlbmRlbmNpZXMgaW5kZXBlbmRlbnRseQotICAgICAgICAgICAgaW5z
dGFuY2UgPSB0aGlzLmJ1aWxkSW5zdGFuY2UoKTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBp
bnN0YW5jZS5fYm9vdFN5bmMoKTsKLQotICAgICAgICAgIC8vIFRPRE86IEFwcC5yZWFkeSgpIGlz
IG5vdCBjYWxsZWQgd2hlbiBhdXRvYm9vdCBpcyBkaXNhYmxlZCwgaXMgdGhpcyBjb3JyZWN0Pwot
ICAgICAgICAgIHRoaXMucmVhZHkoKTsKLQotICAgICAgICAgIGluc3RhbmNlLnN0YXJ0Um91dGlu
ZygpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gRm9yIHRoZSBhc3luY2hyb25vdXMgYm9vdCBw
YXRoCi0gICAgICAgIHRoaXMuX2Jvb3RSZXNvbHZlci5yZXNvbHZlKHRoaXMpOwotCi0gICAgICAg
IC8vIEZvciB0aGUgc3luY2hyb25vdXMgYm9vdCBwYXRoCi0gICAgICAgIHRoaXMuX2Jvb3RlZCA9
IHRydWU7Ci0gICAgICB9IGNhdGNoIChlcnJvcikgewotICAgICAgICAvLyBGb3IgdGhlIGFzeW5j
aHJvbm91cyBib290IHBhdGgKLSAgICAgICAgdGhpcy5fYm9vdFJlc29sdmVyLnJlamVjdChlcnJv
cik7Ci0KLSAgICAgICAgLy8gRm9yIHRoZSBzeW5jaHJvbm91cyBib290IHBhdGgKLSAgICAgICAg
dGhyb3cgZXJyb3I7Ci0gICAgICB9Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAgQ2FsbGVkIHdo
ZW4gdGhlIEFwcGxpY2F0aW9uIGhhcyBiZWNvbWUgcmVhZHksIGltbWVkaWF0ZWx5IGJlZm9yZSBy
b3V0aW5nCi0gICAgICBiZWdpbnMuIFRoZSBjYWxsIHdpbGwgYmUgZGVsYXllZCB1bnRpbCB0aGUg
RE9NIGhhcyBiZWNvbWUgcmVhZHkuCi0gICAgICAgQGV2ZW50IHJlYWR5Ci0gICAgICBAcHVibGlj
Ci0gICAgKi8KLSAgICByZWFkeTogZnVuY3Rpb24gKCkgewotICAgICAgcmV0dXJuIHRoaXM7Ci0g
ICAgfSwKLQotICAgIC8vIFRoaXMgbWV0aG9kIG11c3QgYmUgbW92ZWQgdG8gdGhlIGFwcGxpY2F0
aW9uIGluc3RhbmNlIG9iamVjdAotICAgIHdpbGxEZXN0cm95OiBmdW5jdGlvbiAoKSB7Ci0gICAg
ICB0aGlzLl9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwotICAgICAgX2VtYmVyTWV0YWwu
ZGVmYXVsdC5CT09URUQgPSBmYWxzZTsKLSAgICAgIHRoaXMuX2Jvb3RlZCA9IGZhbHNlOwotICAg
ICAgdGhpcy5fYm9vdFByb21pc2UgPSBudWxsOwotICAgICAgdGhpcy5fYm9vdFJlc29sdmVyID0g
bnVsbDsKLQotICAgICAgaWYgKF9lbWJlclJ1bnRpbWVTeXN0ZW1MYXp5X2xvYWQuX2xvYWRlZC5h
cHBsaWNhdGlvbiA9PT0gdGhpcykgewotICAgICAgICBfZW1iZXJSdW50aW1lU3lzdGVtTGF6eV9s
b2FkLl9sb2FkZWQuYXBwbGljYXRpb24gPSB1bmRlZmluZWQ7Ci0gICAgICB9Ci0KLSAgICAgIGlm
ICh0aGlzLl9nbG9iYWxzTW9kZSAmJiB0aGlzLl9fZGVwcmVjYXRlZEluc3RhbmNlX18pIHsKLSAg
ICAgICAgdGhpcy5fX2RlcHJlY2F0ZWRJbnN0YW5jZV9fLmRlc3Ryb3koKTsKLSAgICAgIH0KLSAg
ICB9LAotCi0gICAgLyoqCi0gICAgICBCb290IGEgbmV3IGluc3RhbmNlIG9mIGBFbWJlci5BcHBs
aWNhdGlvbkluc3RhbmNlYCBmb3IgdGhlIGN1cnJlbnQKLSAgICAgIGFwcGxpY2F0aW9uIGFuZCBu
YXZpZ2F0ZSBpdCB0byB0aGUgZ2l2ZW4gYHVybGAuIFJldHVybnMgYSBgUHJvbWlzZWAgdGhhdAot
ICAgICAgcmVzb2x2ZXMgd2l0aCB0aGUgaW5zdGFuY2Ugd2hlbiB0aGUgaW5pdGlhbCByb3V0aW5n
IGFuZCByZW5kZXJpbmcgaXMKLSAgICAgIGNvbXBsZXRlLCBvciByZWplY3RzIHdpdGggYW55IGVy
cm9yIHRoYXQgb2NjdXJlZCBkdXJpbmcgdGhlIGJvb3QgcHJvY2Vzcy4KLSAgICAgICBXaGVuIGBh
dXRvYm9vdGAgaXMgZGlzYWJsZWQsIGNhbGxpbmcgYHZpc2l0YCB3b3VsZCBmaXJzdCBjYXVzZSB0
aGUKLSAgICAgIGFwcGxpY2F0aW9uIHRvIGJvb3QsIHdoaWNoIHJ1bnMgdGhlIGFwcGxpY2F0aW9u
IGluaXRpYWxpemVycy4KLSAgICAgICBUaGlzIG1ldGhvZCBhbHNvIHRha2VzIGEgaGFzaCBvZiBi
b290LXRpbWUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvcgotICAgICAgY3VzdG9taXppbmcgdGhl
IGluc3RhbmNlJ3MgYmVoYXZpb3IuIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBvbgotICAgICAgYEVt
YmVyLkFwcGxpY2F0aW9uSW5zdGFuY2UuQm9vdE9wdGlvbnNgIGZvciBkZXRhaWxzLgotICAgICAg
IGBFbWJlci5BcHBsaWNhdGlvbkluc3RhbmNlLkJvb3RPcHRpb25zYCBpcyBhbiBpbnRlcmZhY2Ug
Y2xhc3MgdGhhdCBleGlzdHMKLSAgICAgIHB1cmVseSB0byBkb2N1bWVudCB0aGUgYXZhaWxhYmxl
IG9wdGlvbnM7IHlvdSBkbyBub3QgbmVlZCB0byBjb25zdHJ1Y3QgaXQKLSAgICAgIG1hbnVhbGx5
LiBTaW1wbHkgcGFzcyBhIHJlZ3VsYXIgSmF2YVNjcmlwdCBvYmplY3QgY29udGFpbmluZyBvZiB0
aGUKLSAgICAgIGRlc2lyZWQgb3B0aW9uczoKLSAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICBN
eUFwcC52aXNpdCgiLyIsIHsgbG9jYXRpb246ICJub25lIiwgcm9vdEVsZW1lbnQ6ICIjY29udGFp
bmVyIiB9KTsKLSAgICAgIGBgYAotICAgICAgICMjIyBTdXBwb3J0ZWQgU2NlbmFyaW9zCi0gICAg
ICAgV2hpbGUgdGhlIGBCb290T3B0aW9uc2AgY2xhc3MgZXhwb3NlcyBhIGxhcmdlIG51bWJlciBv
ZiBrbm9icywgbm90IGFsbAotICAgICAgY29tYmluYXRpb25zIG9mIHRoZW0gYXJlIHZhbGlkOyBj
ZXJ0YWluIGluY29tcGF0aWJsZSBjb21iaW5hdGlvbnMgbWlnaHQKLSAgICAgIHJlc3VsdCBpbiB1
bmV4cGVjdGVkIGJlaGF2aW9yLgotICAgICAgIEZvciBleGFtcGxlLCBib290aW5nIHRoZSBpbnN0
YW5jZSBpbiB0aGUgZnVsbCBicm93c2VyIGVudmlyb25tZW50Ci0gICAgICB3aGlsZSBzcGVjaWZ5
aW5nIGEgZm9yaWVnbiBgZG9jdW1lbnRgIG9iamVjdCAoZS5nLiBgeyBpc0Jyb3dzZXI6IHRydWUs
Ci0gICAgICBkb2N1bWVudDogaWZyYW1lLmNvbnRlbnREb2N1bWVudCB9YCkgZG9lcyBub3Qgd29y
ayBjb3JyZWN0bHkgdG9kYXksCi0gICAgICBsYXJnZWx5IGR1ZSB0byBFbWJlcidzIGpRdWVyeSBk
ZXBlbmRlbmN5LgotICAgICAgIEN1cnJlbnRseSwgdGhlcmUgYXJlIHRocmVlIG9mZmljaWFsbHkg
c3VwcG9ydGVkIHNjZW5hcmlvcy9jb25maWd1cmF0aW9ucy4KLSAgICAgIFVzYWdlcyBvdXRzaWRl
IG9mIHRoZXNlIHNjZW5hcmlvcyBhcmUgbm90IGd1YXJhbnRlZWQgdG8gd29yaywgYnV0IHBsZWFz
ZQotICAgICAgZmVlbCBmcmVlIHRvIGZpbGUgYnVnIHJlcG9ydHMgZG9jdW1lbnRpbmcgeW91ciBl
eHBlcmllbmNlIGFuZCBhbnkgaXNzdWVzCi0gICAgICB5b3UgZW5jb3VudGVyZWQgdG8gaGVscCBl
eHBhbmQgc3VwcG9ydC4KLSAgICAgICAjIyMjIEJyb3dzZXIgQXBwbGljYXRpb25zIChNYW51YWwg
Qm9vdCkKLSAgICAgICBUaGUgc2V0dXAgaXMgbGFyZ2VseSBzaW1pbGFyIHRvIGhvdyBFbWJlciB3
b3JrcyBvdXQtb2YtdGhlLWJveC4gTm9ybWFsbHksCi0gICAgICBFbWJlciB3aWxsIGJvb3QgYSBk
ZWZhdWx0IGluc3RhbmNlIGZvciB5b3VyIEFwcGxpY2F0aW9uIG9uICJET00gcmVhZHkiLgotICAg
ICAgSG93ZXZlciwgeW91IGNhbiBjdXN0b21pemUgdGhpcyBiZWhhdmlvciBieSBkaXNhYmxpbmcg
YGF1dG9ib290YC4KLSAgICAgICBGb3IgZXhhbXBsZSwgdGhpcyBhbGxvd3MgeW91IHRvIHJlbmRl
ciBhIG1pbml0dXJlIGRlbW8gb2YgeW91ciBhcHBsaWNhdGlvbgotICAgICAgaW50byBhIHNwZWNp
ZmljIGFyZWEgb24geW91ciBtYXJrZXRpbmcgd2Vic2l0ZToKLSAgICAgICBgYGBqYXZhc2NyaXB0
Ci0gICAgICBpbXBvcnQgTXlBcHAgZnJvbSAnbXktYXBwJzsKLSAgICAgICAkKGZ1bmN0aW9uKCkg
ewotICAgICAgICBsZXQgQXBwID0gTXlBcHAuY3JlYXRlKHsgYXV0b2Jvb3Q6IGZhbHNlIH0pOwot
ICAgICAgICAgbGV0IG9wdGlvbnMgPSB7Ci0gICAgICAgICAgLy8gT3ZlcnJpZGUgdGhlIHJvdXRl
cidzIGxvY2F0aW9uIGFkYXB0ZXIgdG8gcHJldmVudCBpdCBmcm9tIHVwZGF0aW5nCi0gICAgICAg
ICAgLy8gdGhlIFVSTCBpbiB0aGUgYWRkcmVzcyBiYXIKLSAgICAgICAgICBsb2NhdGlvbjogJ25v
bmUnLAotICAgICAgICAgICAvLyBPdmVycmlkZSB0aGUgZGVmYXVsdCBgcm9vdEVsZW1lbnRgIG9u
IHRoZSBhcHAgdG8gcmVuZGVyIGludG8gYQotICAgICAgICAgIC8vIHNwZWNpZmljIGBkaXZgIG9u
IHRoZSBwYWdlCi0gICAgICAgICAgcm9vdEVsZW1lbnQ6ICcjZGVtbycKLSAgICAgICAgfTsKLSAg
ICAgICAgIC8vIFN0YXJ0IHRoZSBhcHAgYXQgdGhlIHNwZWNpYWwgZGVtbyBVUkwKLSAgICAgICAg
QXBwLnZpc2l0KCcvZGVtbycsIG9wdGlvbnMpOwotICAgICAgfSk7Ci0gICAgICBgYGBgCi0gICAg
ICAgT3IgcGVyaGFwcyB5b3UgbWlnaHQgd2FudCB0byBib290IHR3byBpbnN0YW5jZXMgb2YgeW91
ciBhcHAgb24gdGhlIHNhbWUKLSAgICAgIHBhZ2UgZm9yIGEgc3BsaXQtc2NyZWVuIG11bHRpcGxh
eWVyIGV4cGVyaWVuY2U6Ci0gICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgaW1wb3J0IE15QXBw
IGZyb20gJ215LWFwcCc7Ci0gICAgICAgJChmdW5jdGlvbigpIHsKLSAgICAgICAgbGV0IEFwcCA9
IE15QXBwLmNyZWF0ZSh7IGF1dG9ib290OiBmYWxzZSB9KTsKLSAgICAgICAgIGxldCBzZXNzaW9u
SWQgPSBNeUFwcC5nZW5lcmF0ZVNlc3Npb25JRCgpOwotICAgICAgICAgbGV0IHBsYXllcjEgPSBB
cHAudmlzaXQoYC9tYXRjaGVzL2pvaW4/bmFtZT1QbGF5ZXIrMSZzZXNzaW9uPSR7c2Vzc2lvbklk
fWAsIHsgcm9vdEVsZW1lbnQ6ICcjbGVmdCcsIGxvY2F0aW9uOiAnbm9uZScgfSk7Ci0gICAgICAg
IGxldCBwbGF5ZXIyID0gQXBwLnZpc2l0KGAvbWF0Y2hlcy9qb2luP25hbWU9UGxheWVyKzImc2Vz
c2lvbj0ke3Nlc3Npb25JZH1gLCB7IHJvb3RFbGVtZW50OiAnI3JpZ2h0JywgbG9jYXRpb246ICdu
b25lJyB9KTsKLSAgICAgICAgIFByb21pc2UuYWxsKFtwbGF5ZXIxLCBwbGF5ZXIyXSkudGhlbigo
KSA9PiB7Ci0gICAgICAgICAgLy8gQm90aCBhcHBzIGhhdmUgY29tcGxldGVkIHRoZSBpbml0aWFs
IHJlbmRlcgotICAgICAgICAgICQoJyNsb2FkaW5nJykuZmFkZU91dCgpOwotICAgICAgICB9KTsK
LSAgICAgIH0pOwotICAgICAgYGBgCi0gICAgICAgRG8gbm90ZSB0aGF0IGVhY2ggYXBwIGluc3Rh
bmNlIG1haW50YWlucyB0aGVpciBvd24gcmVnaXN0cnkvY29udGFpbmVyLCBzbwotICAgICAgdGhl
eSB3aWxsIHJ1biBpbiBjb21wbGV0ZSBpc29sYXRpb24gYnkgZGVmYXVsdC4KLSAgICAgICAjIyMj
IFNlcnZlci1TaWRlIFJlbmRlcmluZyAoYWxzbyBrbm93biBhcyBGYXN0Qm9vdCkKLSAgICAgICBU
aGlzIHNldHVwIGFsbG93cyB5b3UgdG8gcnVuIHlvdXIgRW1iZXIgYXBwIGluIGEgc2VydmVyIGVu
dmlyb25tZW50IHVzaW5nCi0gICAgICBOb2RlLmpzIGFuZCByZW5kZXIgaXRzIGNvbnRlbnQgaW50
byBzdGF0aWMgSFRNTCBmb3IgU0VPIHB1cnBvc2VzLgotICAgICAgIGBgYGphdmFzY3JpcHQKLSAg
ICAgIGNvbnN0IEhUTUxTZXJpYWxpemVyID0gbmV3IFNpbXBsZURPTS5IVE1MU2VyaWFsaXplcihT
aW1wbGVET00udm9pZE1hcCk7Ci0gICAgICAgZnVuY3Rpb24gcmVuZGVyVVJMKHVybCkgewotICAg
ICAgICBsZXQgZG9tID0gbmV3IFNpbXBsZURPTS5Eb2N1bWVudCgpOwotICAgICAgICBsZXQgcm9v
dEVsZW1lbnQgPSBkb20uYm9keTsKLSAgICAgICAgbGV0IG9wdGlvbnMgPSB7IGlzQnJvd3Nlcjog
ZmFsc2UsIGRvY3VtZW50OiBkb20sIHJvb3RFbGVtZW50OiByb290RWxlbWVudCB9OwotICAgICAg
ICAgcmV0dXJuIE15QXBwLnZpc2l0KG9wdGlvbnMpLnRoZW4oaW5zdGFuY2UgPT4gewotICAgICAg
ICAgIHRyeSB7Ci0gICAgICAgICAgICByZXR1cm4gSFRNTFNlcmlhbGl6ZXIuc2VyaWFsaXplKHJv
b3RFbGVtZW50LmZpcnN0Q2hpbGQpOwotICAgICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAg
ICBpbnN0YW5jZS5kZXN0cm95KCk7Ci0gICAgICAgICAgfQotICAgICAgICB9KTsKLSAgICAgIH0K
LSAgICAgIGBgYAotICAgICAgIEluIHRoaXMgc2NlbmFyaW8sIGJlY2F1c2UgRW1iZXIgZG9lcyBu
b3QgaGF2ZSBhY2Nlc3MgdG8gYSBnbG9iYWwgYGRvY3VtZW50YAotICAgICAgb2JqZWN0IGluIHRo
ZSBOb2RlLmpzIGVudmlyb25tZW50LCB5b3UgbXVzdCBwcm92aWRlIG9uZSBleHBsaWNpdGx5LiBJ
biBwcmFjdGljZSwKLSAgICAgIGluIHRoZSBub24tYnJvd3NlciBlbnZpcm9ubWVudCwgdGhlIHN0
YW5kLWluIGBkb2N1bWVudGAgb2JqZWN0IG9ubHkgbmVlZCB0bwotICAgICAgaW1wbGVtZW50IGEg
bGltaXRlZCBzdWJzZXQgb2YgdGhlIGZ1bGwgRE9NIEFQSS4gVGhlIGBTaW1wbGVET01gIGxpYnJh
cnkgaXMga25vd24KLSAgICAgIHRvIHdvcmsuCi0gICAgICAgU2luY2UgdGhlcmUgaXMgbm8gYWNj
ZXNzIHRvIGpRdWVyeSBpbiB0aGUgbm9uLWJyb3dzZXIgZW52aXJvbm1lbnQsIHlvdSBtdXN0IGFs
c28KLSAgICAgIHNwZWNpZnkgYSBET00gYEVsZW1lbnRgIG9iamVjdCBpbiB0aGUgc2FtZSBgZG9j
dW1lbnRgIGZvciB0aGUgYHJvb3RFbGVtZW50YCBvcHRpb24KLSAgICAgIChhcyBvcHBvc2VkIHRv
IGEgc2VsZWN0b3Igc3RyaW5nIGxpa2UgYCJib2R5ImApLgotICAgICAgIFNlZSB0aGUgZG9jdW1l
bnRhdGlvbiBvbiB0aGUgYGlzQnJvd3NlcmAsIGBkb2N1bWVudGAgYW5kIGByb290RWxlbWVudGAg
cHJvcGVydGllcwotICAgICAgb24gYEVtYmVyLkFwcGxpY2F0aW9uSW5zdGFuY2UuQm9vdE9wdGlv
bnNgIGZvciBkZXRhaWxzLgotICAgICAgICMjIyMgU2VydmVyLVNpZGUgUmVzb3VyY2UgRGlzY292
ZXJ5Ci0gICAgICAgVGhpcyBzZXR1cCBhbGxvd3MgeW91IHRvIHJ1biB0aGUgcm91dGluZyBsYXll
ciBvZiB5b3VyIEVtYmVyIGFwcCBpbiBhIHNlcnZlcgotICAgICAgZW52aXJvbm1lbnQgdXNpbmcg
Tm9kZS5qcyBhbmQgY29tcGxldGVseSBkaXNhYmxlIHJlbmRlcmluZy4gVGhpcyBhbGxvd3MgeW91
Ci0gICAgICB0byBzaW11bGF0ZSBhbmQgZGlzY292ZXIgdGhlIHJlc291cmNlcyAoaS5lLiBBSkFY
IHJlcXVlc3RzKSBuZWVkZWQgdG8gZnVmaWxsCi0gICAgICBhIGdpdmVuIHJlcXVlc3QgYW5kIGVh
Z2VybHkgInB1c2giIHRoZXNlIHJlc291cmNlcyB0byB0aGUgY2xpZW50LgotICAgICAgIGBgYGFw
cC9pbml0aWFsaXplcnMvbmV0d29yay1zZXJ2aWNlLmpzCi0gICAgICBpbXBvcnQgQnJvd3Nlck5l
dHdvcmtTZXJ2aWNlIGZyb20gJ2FwcC9zZXJ2aWNlcy9uZXR3b3JrL2Jyb3dzZXInOwotICAgICAg
aW1wb3J0IE5vZGVOZXR3b3JrU2VydmljZSBmcm9tICdhcHAvc2VydmljZXMvbmV0d29yay9ub2Rl
JzsKLSAgICAgICAvLyBJbmplY3QgYSAoaHlwb3RoZXRpY2FsKSBzZXJ2aWNlIGZvciBhYnN0cmFj
dGluZyBhbGwgQUpBWCBjYWxscyBhbmQgdXNlCi0gICAgICAvLyB0aGUgYXBwcm9waWF0ZSBpbXBs
ZW1lbnRhaW9uIG9uIHRoZSBjbGllbnQvc2VydmVyLiBUaGlzIGFsc28gYWxsb3dzIHRoZQotICAg
ICAgLy8gc2VydmVyIHRvIGxvZyBhbGwgdGhlIEFKQVggY2FsbHMgbWFkZSBkdXJpbmcgYSBwYXJ0
aWN1bGFyIHJlcXVlc3QgYW5kIHVzZQotICAgICAgLy8gdGhhdCBmb3IgcmVzb3VyY2UtZGlzY292
ZXJ5IHB1cnBvc2UuCi0gICAgICAgZXhwb3J0IGZ1bmN0aW9uIGluaXRpYWxpemUoYXBwbGljYXRp
b24pIHsKLSAgICAgICAgaWYgKHdpbmRvdykgeyAvLyBicm93c2VyCi0gICAgICAgICAgYXBwbGlj
YXRpb24ucmVnaXN0ZXIoJ3NlcnZpY2U6bmV0d29yaycsIEJyb3dzZXJOZXR3b3JrU2VydmljZSk7
Ci0gICAgICAgIH0gZWxzZSB7IC8vIG5vZGUKLSAgICAgICAgICBhcHBsaWNhdGlvbi5yZWdpc3Rl
cignc2VydmljZTpuZXR3b3JrJywgTm9kZU5ldHdvcmtTZXJ2aWNlKTsKLSAgICAgICAgfQotICAg
ICAgICAgYXBwbGljYXRpb24uaW5qZWN0KCdyb3V0ZScsICduZXR3b3JrJywgJ3NlcnZpY2U6bmV0
d29yaycpOwotICAgICAgfTsKLSAgICAgICBleHBvcnQgZGVmYXVsdCB7Ci0gICAgICAgIG5hbWU6
ICduZXR3b3JrLXNlcnZpY2UnLAotICAgICAgICBpbml0aWFsaXplOiBpbml0aWFsaXplCi0gICAg
ICB9OwotICAgICAgYGBgCi0gICAgICAgYGBgYXBwL3JvdXRlcy9wb3N0LmpzCi0gICAgICBpbXBv
cnQgRW1iZXIgZnJvbSAnZW1iZXInOwotICAgICAgIC8vIEFuIGV4YW1wbGUgb2YgaG93IHRoZSAo
aHlwb3RoZXRpY2FsKSBzZXJ2aWNlIGlzIHVzZWQgaW4gcm91dGVzLgotICAgICAgIGV4cG9ydCBk
ZWZhdWx0IEVtYmVyLlJvdXRlLmV4dGVuZCh7Ci0gICAgICAgIG1vZGVsKHBhcmFtcykgewotICAg
ICAgICAgIHJldHVybiB0aGlzLm5ldHdvcmsuZmV0Y2goYC9hcGkvcG9zdHMvJHtwYXJhbXMucG9z
dF9pZH0uanNvbmApOwotICAgICAgICB9LAotICAgICAgICAgYWZ0ZXJNb2RlbChwb3N0KSB7Ci0g
ICAgICAgICAgaWYgKHBvc3QuaXNFeHRlcm5hbENvbnRlbnQpIHsKLSAgICAgICAgICAgIHJldHVy
biB0aGlzLm5ldHdvcmsuZmV0Y2goYC9hcGkvZXh0ZXJuYWwvP3VybD0ke3Bvc3QuZXh0ZXJuYWxV
Ukx9YCk7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJldHVybiBwb3N0OwotICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfSk7Ci0gICAgICBgYGAKLSAgICAgICBgYGBqYXZh
c2NyaXB0Ci0gICAgICAvLyBGaW5hbGx5LCBwdXQgYWxsIHRoZSBwaWVjZXMgdG9nZXRoZXIKLSAg
ICAgICBmdW5jdGlvbiBkaXNjb3ZlclJlc291cmNlc0Zvcih1cmwpIHsKLSAgICAgICAgcmV0dXJu
IE15QXBwLnZpc2l0KHVybCwgeyBpc0Jyb3dzZXI6IGZhbHNlLCBzaG91bGRSZW5kZXI6IGZhbHNl
IH0pLnRoZW4oaW5zdGFuY2UgPT4gewotICAgICAgICAgIGxldCBuZXR3b3JrU2VydmljZSA9IGlu
c3RhbmNlLmxvb2t1cCgnc2VydmljZTpuZXR3b3JrJyk7Ci0gICAgICAgICAgcmV0dXJuIG5ldHdv
cmtTZXJ2aWNlLnJlcXVlc3RzOyAvLyA9PiB7ICIvYXBpL3Bvc3RzLzEyMy5qc29uIjogIi4uLiIg
fQotICAgICAgICB9KTsKLSAgICAgIH0KLSAgICAgIGBgYAotICAgICAgIEBwdWJsaWMKLSAgICAg
IEBtZXRob2QgdmlzaXQKLSAgICAgIEBwYXJhbSB1cmwge1N0cmluZ30gVGhlIGluaXRpYWwgVVJM
IHRvIG5hdmlnYXRlIHRvCi0gICAgICBAcGFyYW0gb3B0aW9ucyB7RW1iZXIuQXBwbGljYXRpb25J
bnN0YW5jZS5Cb290T3B0aW9uc30KLSAgICAgIEByZXR1cm4ge1Byb21pc2U8RW1iZXIuQXBwbGlj
YXRpb25JbnN0YW5jZSwgRXJyb3I+fQotICAgICovCi0gICAgdmlzaXQ6IGZ1bmN0aW9uICh1cmws
IG9wdGlvbnMpIHsKLSAgICAgIHZhciBfdGhpcyA9IHRoaXM7Ci0KLSAgICAgIHJldHVybiB0aGlz
LmJvb3QoKS50aGVuKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgcmV0dXJuIF90aGlzLmJ1aWxkSW5z
dGFuY2UoKS5ib290KG9wdGlvbnMpLnRoZW4oZnVuY3Rpb24gKGluc3RhbmNlKSB7Ci0gICAgICAg
ICAgcmV0dXJuIGluc3RhbmNlLnZpc2l0KHVybCk7Ci0gICAgICAgIH0pOwotICAgICAgfSk7Ci0g
ICAgfQotICB9KTsKLQotICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQXBwbGljYXRpb24ucHJvdG90
eXBlLCAncmVnaXN0cnknLCB7Ci0gICAgY29uZmlndXJhYmxlOiB0cnVlLAotICAgIGVudW1lcmFi
bGU6IGZhbHNlLAotICAgIGdldDogZnVuY3Rpb24gKCkgewotICAgICAgcmV0dXJuIF9lbWJlclJ1
bnRpbWVNaXhpbnNSZWdpc3RyeV9wcm94eS5idWlsZEZha2VSZWdpc3RyeVdpdGhEZXByZWNhdGlv
bnModGhpcywgJ0FwcGxpY2F0aW9uJyk7Ci0gICAgfQotICB9KTsKLQotICBBcHBsaWNhdGlvbi5y
ZW9wZW5DbGFzcyh7Ci0gICAgLyoqCi0gICAgICBUaGlzIGNyZWF0ZXMgYSByZWdpc3RyeSB3aXRo
IHRoZSBkZWZhdWx0IEVtYmVyIG5hbWluZyBjb252ZW50aW9ucy4KLSAgICAgICBJdCBhbHNvIGNv
bmZpZ3VyZXMgdGhlIHJlZ2lzdHJ5OgotICAgICAgICogcmVnaXN0ZXJlZCB2aWV3cyBhcmUgY3Jl
YXRlZCBldmVyeSB0aW1lIHRoZXkgYXJlIGxvb2tlZCB1cCAodGhleSBhcmUKLSAgICAgICAgbm90
IHNpbmdsZXRvbnMpCi0gICAgICAqIHJlZ2lzdGVyZWQgdGVtcGxhdGVzIGFyZSBub3QgZmFjdG9y
aWVzOyB0aGUgcmVnaXN0ZXJlZCB2YWx1ZSBpcwotICAgICAgICByZXR1cm5lZCBkaXJlY3RseS4K
LSAgICAgICogdGhlIHJvdXRlciByZWNlaXZlcyB0aGUgYXBwbGljYXRpb24gYXMgaXRzIGBuYW1l
c3BhY2VgIHByb3BlcnR5Ci0gICAgICAqIGFsbCBjb250cm9sbGVycyByZWNlaXZlIHRoZSByb3V0
ZXIgYXMgdGhlaXIgYHRhcmdldGAgYW5kIGBjb250cm9sbGVyc2AKLSAgICAgICAgcHJvcGVydGll
cwotICAgICAgKiBhbGwgY29udHJvbGxlcnMgcmVjZWl2ZSB0aGUgYXBwbGljYXRpb24gYXMgdGhl
aXIgYG5hbWVzcGFjZWAgcHJvcGVydHkKLSAgICAgICogdGhlIGFwcGxpY2F0aW9uIHZpZXcgcmVj
ZWl2ZXMgdGhlIGFwcGxpY2F0aW9uIGNvbnRyb2xsZXIgYXMgaXRzCi0gICAgICAgIGBjb250cm9s
bGVyYCBwcm9wZXJ0eQotICAgICAgKiB0aGUgYXBwbGljYXRpb24gdmlldyByZWNlaXZlcyB0aGUg
YXBwbGljYXRpb24gdGVtcGxhdGUgYXMgaXRzCi0gICAgICAgIGBkZWZhdWx0VGVtcGxhdGVgIHBy
b3BlcnR5Ci0gICAgICAgQHByaXZhdGUKLSAgICAgIEBtZXRob2QgYnVpbGRSZWdpc3RyeQotICAg
ICAgQHN0YXRpYwotICAgICAgQHBhcmFtIHtFbWJlci5BcHBsaWNhdGlvbn0gbmFtZXNwYWNlIHRo
ZSBhcHBsaWNhdGlvbiBmb3Igd2hpY2ggdG8KLSAgICAgICAgYnVpbGQgdGhlIHJlZ2lzdHJ5Ci0g
ICAgICBAcmV0dXJuIHtFbWJlci5SZWdpc3RyeX0gdGhlIGJ1aWx0IHJlZ2lzdHJ5Ci0gICAgICBA
cHVibGljCi0gICAgKi8KLSAgICBidWlsZFJlZ2lzdHJ5OiBmdW5jdGlvbiAoYXBwbGljYXRpb24p
IHsKLSAgICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA8PSAxIHx8IGFyZ3VtZW50
c1sxXSA9PT0gdW5kZWZpbmVkID8ge30gOiBhcmd1bWVudHNbMV07Ci0KLSAgICAgIHZhciByZWdp
c3RyeSA9IHRoaXMuX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7Ci0gICAgICByZWdpc3Ry
eS5yZWdpc3RlcignYXBwbGljYXRpb246bWFpbicsIGFwcGxpY2F0aW9uLCB7IGluc3RhbnRpYXRl
OiBmYWxzZSB9KTsKLQotICAgICAgaWYgKG9wdGlvbnNbX2VtYmVyQXBwbGljYXRpb25TeXN0ZW1F
bmdpbmUuR0xJTU1FUl0pIHsKLSAgICAgICAgZ2xpbW1lclNldHVwUmVnaXN0cnkocmVnaXN0cnkp
OwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgaHRtbGJhcnNTZXR1cFJlZ2lzdHJ5KHJlZ2lzdHJ5
KTsKLSAgICAgIH0KLQotICAgICAgcmV0dXJuIHJlZ2lzdHJ5OwotICAgIH0KLSAgfSk7Ci0KLSAg
ZnVuY3Rpb24gY29tbW9uU2V0dXBSZWdpc3RyeShyZWdpc3RyeSkgewotICAgIHJlZ2lzdHJ5Lm9w
dGlvbnNGb3JUeXBlKCdjb21wb25lbnQnLCB7IHNpbmdsZXRvbjogZmFsc2UgfSk7Ci0gICAgcmVn
aXN0cnkub3B0aW9uc0ZvclR5cGUoJ3ZpZXcnLCB7IHNpbmdsZXRvbjogZmFsc2UgfSk7Ci0gICAg
cmVnaXN0cnkuaW5qZWN0aW9uKCdyZW5kZXJlcicsICdkb20nLCAnc2VydmljZTotZG9tLWhlbHBl
cicpOwotCi0gICAgcmVnaXN0cnkucmVnaXN0ZXIoJ2NvbnRyb2xsZXI6YmFzaWMnLCBfZW1iZXJS
dW50aW1lQ29udHJvbGxlcnNDb250cm9sbGVyLmRlZmF1bHQsIHsgaW5zdGFudGlhdGU6IGZhbHNl
IH0pOwotCi0gICAgcmVnaXN0cnkuaW5qZWN0aW9uKCdzZXJ2aWNlOi1kb20taGVscGVyJywgJ2Rv
Y3VtZW50JywgJ3NlcnZpY2U6LWRvY3VtZW50Jyk7Ci0KLSAgICByZWdpc3RyeS5yZWdpc3Rlcign
LXZpZXctcmVnaXN0cnk6bWFpbicsIHsgY3JlYXRlOiBmdW5jdGlvbiAoKSB7Ci0gICAgICAgIHJl
dHVybiB7fTsKLSAgICAgIH0gfSk7Ci0KLSAgICByZWdpc3RyeS5pbmplY3Rpb24oJ3ZpZXcnLCAn
X3ZpZXdSZWdpc3RyeScsICctdmlldy1yZWdpc3RyeTptYWluJyk7Ci0KLSAgICByZWdpc3RyeS5p
bmplY3Rpb24oJ3JvdXRlJywgJ190b3BMZXZlbFZpZXdUZW1wbGF0ZScsICd0ZW1wbGF0ZTotb3V0
bGV0Jyk7Ci0KLSAgICByZWdpc3RyeS5yZWdpc3Rlcigncm91dGU6YmFzaWMnLCBfZW1iZXJSb3V0
aW5nU3lzdGVtUm91dGUuZGVmYXVsdCk7Ci0gICAgcmVnaXN0cnkucmVnaXN0ZXIoJ2V2ZW50X2Rp
c3BhdGNoZXI6bWFpbicsIF9lbWJlclZpZXdzU3lzdGVtRXZlbnRfZGlzcGF0Y2hlci5kZWZhdWx0
KTsKLQotICAgIHJlZ2lzdHJ5LmluamVjdGlvbigncm91dGVyOm1haW4nLCAnbmFtZXNwYWNlJywg
J2FwcGxpY2F0aW9uOm1haW4nKTsKLSAgICByZWdpc3RyeS5pbmplY3Rpb24oJ3ZpZXc6LW91dGxl
dCcsICduYW1lc3BhY2UnLCAnYXBwbGljYXRpb246bWFpbicpOwotCi0gICAgcmVnaXN0cnkucmVn
aXN0ZXIoJ2xvY2F0aW9uOmF1dG8nLCBfZW1iZXJSb3V0aW5nTG9jYXRpb25BdXRvX2xvY2F0aW9u
LmRlZmF1bHQpOwotICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyKCdsb2NhdGlvbjpoYXNoJywgX2VtYmVy
Um91dGluZ0xvY2F0aW9uSGFzaF9sb2NhdGlvbi5kZWZhdWx0KTsKLSAgICByZWdpc3RyeS5yZWdp
c3RlcignbG9jYXRpb246aGlzdG9yeScsIF9lbWJlclJvdXRpbmdMb2NhdGlvbkhpc3RvcnlfbG9j
YXRpb24uZGVmYXVsdCk7Ci0gICAgcmVnaXN0cnkucmVnaXN0ZXIoJ2xvY2F0aW9uOm5vbmUnLCBf
ZW1iZXJSb3V0aW5nTG9jYXRpb25Ob25lX2xvY2F0aW9uLmRlZmF1bHQpOwotCi0gICAgcmVnaXN0
cnkuaW5qZWN0aW9uKCdjb250cm9sbGVyJywgJ3RhcmdldCcsICdyb3V0ZXI6bWFpbicpOwotICAg
IHJlZ2lzdHJ5LmluamVjdGlvbignY29udHJvbGxlcicsICduYW1lc3BhY2UnLCAnYXBwbGljYXRp
b246bWFpbicpOwotCi0gICAgcmVnaXN0cnkucmVnaXN0ZXIoX2NvbnRhaW5lclJlZ2lzdHJ5LnBy
aXZhdGl6ZShfdGVtcGxhdGVPYmplY3QpLCBfZW1iZXJSb3V0aW5nU3lzdGVtQ2FjaGUuZGVmYXVs
dCk7Ci0gICAgcmVnaXN0cnkuaW5qZWN0aW9uKCdyb3V0ZXInLCAnX2J1Y2tldENhY2hlJywgX2Nv
bnRhaW5lclJlZ2lzdHJ5LnByaXZhdGl6ZShfdGVtcGxhdGVPYmplY3QpKTsKLSAgICByZWdpc3Ry
eS5pbmplY3Rpb24oJ3JvdXRlJywgJ19idWNrZXRDYWNoZScsIF9jb250YWluZXJSZWdpc3RyeS5w
cml2YXRpemUoX3RlbXBsYXRlT2JqZWN0KSk7Ci0gICAgcmVnaXN0cnkuaW5qZWN0aW9uKCdjb250
cm9sbGVyJywgJ19idWNrZXRDYWNoZScsIF9jb250YWluZXJSZWdpc3RyeS5wcml2YXRpemUoX3Rl
bXBsYXRlT2JqZWN0KSk7Ci0KLSAgICByZWdpc3RyeS5pbmplY3Rpb24oJ3JvdXRlJywgJ3JvdXRl
cicsICdyb3V0ZXI6bWFpbicpOwotCi0gICAgcmVnaXN0cnkucmVnaXN0ZXIoJ2NvbXBvbmVudDot
dGV4dC1maWVsZCcsIF9lbWJlclZpZXdzVmlld3NUZXh0X2ZpZWxkLmRlZmF1bHQpOwotICAgIHJl
Z2lzdHJ5LnJlZ2lzdGVyKCdjb21wb25lbnQ6LXRleHQtYXJlYScsIF9lbWJlclZpZXdzVmlld3NU
ZXh0X2FyZWEuZGVmYXVsdCk7Ci0gICAgcmVnaXN0cnkucmVnaXN0ZXIoJ2NvbXBvbmVudDotY2hl
Y2tib3gnLCBfZW1iZXJWaWV3c1ZpZXdzQ2hlY2tib3guZGVmYXVsdCk7Ci0gICAgcmVnaXN0cnku
cmVnaXN0ZXIoJ2NvbXBvbmVudDpsaW5rLXRvJywgX2VtYmVyUm91dGluZ1ZpZXdzQ29tcG9uZW50
c0xpbmtUby5kZWZhdWx0KTsKLQotICAgIC8vIFJlZ2lzdGVyIHRoZSByb3V0aW5nIHNlcnZpY2Uu
Li4KLSAgICByZWdpc3RyeS5yZWdpc3Rlcignc2VydmljZTotcm91dGluZycsIF9lbWJlclJvdXRp
bmdTZXJ2aWNlc1JvdXRpbmcuZGVmYXVsdCk7Ci0gICAgLy8gVGhlbiBpbmplY3QgdGhlIGFwcCBy
b3V0ZXIgaW50byBpdAotICAgIHJlZ2lzdHJ5LmluamVjdGlvbignc2VydmljZTotcm91dGluZycs
ICdyb3V0ZXInLCAncm91dGVyOm1haW4nKTsKLQotICAgIC8vIERFQlVHR0lORwotICAgIHJlZ2lz
dHJ5LnJlZ2lzdGVyKCdyZXNvbHZlci1mb3ItZGVidWdnaW5nOm1haW4nLCByZWdpc3RyeS5yZXNv
bHZlciwgeyBpbnN0YW50aWF0ZTogZmFsc2UgfSk7Ci0gICAgcmVnaXN0cnkuaW5qZWN0aW9uKCdj
b250YWluZXItZGVidWctYWRhcHRlcjptYWluJywgJ3Jlc29sdmVyJywgJ3Jlc29sdmVyLWZvci1k
ZWJ1Z2dpbmc6bWFpbicpOwotICAgIHJlZ2lzdHJ5LmluamVjdGlvbignZGF0YS1hZGFwdGVyOm1h
aW4nLCAnY29udGFpbmVyRGVidWdBZGFwdGVyJywgJ2NvbnRhaW5lci1kZWJ1Zy1hZGFwdGVyOm1h
aW4nKTsKLSAgICAvLyBDdXN0b20gcmVzb2x2ZXIgYXV0aG9ycyBtYXkgd2FudCB0byByZWdpc3Rl
ciB0aGVpciBvd24gQ29udGFpbmVyRGVidWdBZGFwdGVyIHdpdGggdGhpcyBrZXkKLQotICAgIHJl
Z2lzdHJ5LnJlZ2lzdGVyKCdjb250YWluZXItZGVidWctYWRhcHRlcjptYWluJywgX2VtYmVyRXh0
ZW5zaW9uU3VwcG9ydENvbnRhaW5lcl9kZWJ1Z19hZGFwdGVyLmRlZmF1bHQpOwotICB9Ci0KLSAg
ZnVuY3Rpb24gZ2xpbW1lclNldHVwUmVnaXN0cnkocmVnaXN0cnkpIHsKLSAgICBjb21tb25TZXR1
cFJlZ2lzdHJ5KHJlZ2lzdHJ5KTsKLQotICAgIHZhciBFbnZpcm9ubWVudCA9IF9yZXF1aXJlMi5k
ZWZhdWx0KCdlbWJlci1nbGltbWVyL2Vudmlyb25tZW50JykuZGVmYXVsdDsKLSAgICByZWdpc3Ry
eS5yZWdpc3Rlcignc2VydmljZTotZ2xpbW1lci1lbnZpcm9ubWVudCcsIEVudmlyb25tZW50KTsK
LSAgICByZWdpc3RyeS5pbmplY3Rpb24oJ3NlcnZpY2U6LWdsaW1tZXItZW52aXJvbm1lbnQnLCAn
ZG9tJywgJ3NlcnZpY2U6LWRvbS1oZWxwZXInKTsKLSAgICByZWdpc3RyeS5pbmplY3Rpb24oJ3Jl
bmRlcmVyJywgJ2VudicsICdzZXJ2aWNlOi1nbGltbWVyLWVudmlyb25tZW50Jyk7Ci0KLSAgICB2
YXIgT3V0bGV0VmlldyA9IF9yZXF1aXJlMi5kZWZhdWx0KCdlbWJlci1nbGltbWVyL2VtYmVyLXJv
dXRpbmctdmlldycpLk91dGxldFZpZXc7Ci0gICAgcmVnaXN0cnkucmVnaXN0ZXIoJ3ZpZXc6LW91
dGxldCcsIE91dGxldFZpZXcpOwotCi0gICAgdmFyIF9yZXF1aXJlID0gX3JlcXVpcmUyLmRlZmF1
bHQoJ2VtYmVyLWdsaW1tZXIvZW1iZXItbWV0YWwtdmlld3MnKTsKLQotICAgIHZhciBJbnRlcmFj
dGl2ZVJlbmRlcmVyID0gX3JlcXVpcmUuSW50ZXJhY3RpdmVSZW5kZXJlcjsKLSAgICB2YXIgSW5l
cnRSZW5kZXJlciA9IF9yZXF1aXJlLkluZXJ0UmVuZGVyZXI7Ci0KLSAgICByZWdpc3RyeS5yZWdp
c3RlcigncmVuZGVyZXI6LWRvbScsIEludGVyYWN0aXZlUmVuZGVyZXIpOwotICAgIHJlZ2lzdHJ5
LnJlZ2lzdGVyKCdyZW5kZXJlcjotaW5lcnQnLCBJbmVydFJlbmRlcmVyKTsKLQotICAgIHZhciBE
T01IZWxwZXIgPSBfcmVxdWlyZTIuZGVmYXVsdCgnZW1iZXItZ2xpbW1lci9kb20nKS5kZWZhdWx0
OwotCi0gICAgcmVnaXN0cnkucmVnaXN0ZXIoJ3NlcnZpY2U6LWRvbS1oZWxwZXInLCB7Ci0gICAg
ICBjcmVhdGU6IGZ1bmN0aW9uIChfcmVmKSB7Ci0gICAgICAgIHZhciBkb2N1bWVudCA9IF9yZWYu
ZG9jdW1lbnQ7Ci0gICAgICAgIHJldHVybiBuZXcgRE9NSGVscGVyKGRvY3VtZW50KTsKLSAgICAg
IH0KLSAgICB9KTsKLQotICAgIHZhciBnbGltbWVyT3V0bGV0VGVtcGxhdGUgPSBfcmVxdWlyZTIu
ZGVmYXVsdCgnZW1iZXItZ2xpbW1lci90ZW1wbGF0ZXMvb3V0bGV0JykuZGVmYXVsdDsKLSAgICB2
YXIgZ2xpbW1lckNvbXBvbmVudFRlbXBsYXRlID0gX3JlcXVpcmUyLmRlZmF1bHQoJ2VtYmVyLWds
aW1tZXIvdGVtcGxhdGVzL2NvbXBvbmVudCcpLmRlZmF1bHQ7Ci0gICAgcmVnaXN0cnkucmVnaXN0
ZXIoX2NvbnRhaW5lclJlZ2lzdHJ5LnByaXZhdGl6ZShfdGVtcGxhdGVPYmplY3QyKSwgZ2xpbW1l
ckNvbXBvbmVudFRlbXBsYXRlKTsKLSAgICByZWdpc3RyeS5yZWdpc3RlcigndGVtcGxhdGU6LW91
dGxldCcsIGdsaW1tZXJPdXRsZXRUZW1wbGF0ZSk7Ci0gICAgcmVnaXN0cnkuaW5qZWN0aW9uKCd2
aWV3Oi1vdXRsZXQnLCAndGVtcGxhdGUnLCAndGVtcGxhdGU6LW91dGxldCcpOwotICAgIHJlZ2lz
dHJ5LmluamVjdGlvbigndGVtcGxhdGUnLCAnZW52JywgJ3NlcnZpY2U6LWdsaW1tZXItZW52aXJv
bm1lbnQnKTsKLQotICAgIHJlZ2lzdHJ5Lm9wdGlvbnNGb3JUeXBlKCdoZWxwZXInLCB7IGluc3Rh
bnRpYXRlOiBmYWxzZSB9KTsKLSAgfQotCi0gIGZ1bmN0aW9uIGh0bWxiYXJzU2V0dXBSZWdpc3Ry
eShyZWdpc3RyeSkgewotICAgIGNvbW1vblNldHVwUmVnaXN0cnkocmVnaXN0cnkpOwotCi0gICAg
cmVnaXN0cnkub3B0aW9uc0ZvclR5cGUoJ3RlbXBsYXRlJywgeyBpbnN0YW50aWF0ZTogZmFsc2Ug
fSk7Ci0gICAgcmVnaXN0cnkucmVnaXN0ZXIoJ3ZpZXc6LW91dGxldCcsIF9lbWJlclJvdXRpbmdW
aWV3c1ZpZXdzT3V0bGV0Lk91dGxldFZpZXcpOwotCi0gICAgdmFyIEludGVyYWN0aXZlUmVuZGVy
ZXIgPSBfZW1iZXJNZXRhbFZpZXdzLkludGVyYWN0aXZlUmVuZGVyZXI7Ci0gICAgdmFyIEluZXJ0
UmVuZGVyZXIgPSBfZW1iZXJNZXRhbFZpZXdzLkluZXJ0UmVuZGVyZXI7Ci0KLSAgICByZWdpc3Ry
eS5yZWdpc3RlcigncmVuZGVyZXI6LWRvbScsIEludGVyYWN0aXZlUmVuZGVyZXIpOwotICAgIHJl
Z2lzdHJ5LnJlZ2lzdGVyKCdyZW5kZXJlcjotaW5lcnQnLCBJbmVydFJlbmRlcmVyKTsKLQotICAg
IHJlZ2lzdHJ5LnJlZ2lzdGVyKCdzZXJ2aWNlOi1kb20taGVscGVyJywgewotICAgICAgY3JlYXRl
OiBmdW5jdGlvbiAoX3JlZjIpIHsKLSAgICAgICAgdmFyIGRvY3VtZW50ID0gX3JlZjIuZG9jdW1l
bnQ7Ci0gICAgICAgIHJldHVybiBuZXcgX2VtYmVySHRtbGJhcnNTeXN0ZW1Eb21IZWxwZXIuZGVm
YXVsdChkb2N1bWVudCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0KLSAgICByZWdpc3RyeS5yZWdpc3Rl
cigndGVtcGxhdGU6LW91dGxldCcsIF9lbWJlckh0bWxiYXJzVGVtcGxhdGVzVG9wTGV2ZWxWaWV3
LmRlZmF1bHQpOwotICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyKCd2aWV3OnRvcGxldmVsJywgX2VtYmVy
Vmlld3NWaWV3c1ZpZXcuZGVmYXVsdC5leHRlbmQoKSk7Ci0gIH0KLQotICBmdW5jdGlvbiByZWdp
c3RlckxpYnJhcmllcygpIHsKLSAgICBpZiAoIWxpYnJhcmllc1JlZ2lzdGVyZWQpIHsKLSAgICAg
IGxpYnJhcmllc1JlZ2lzdGVyZWQgPSB0cnVlOwotCi0gICAgICBpZiAoX2VtYmVyTWV0YWxFbnZp
cm9ubWVudC5kZWZhdWx0Lmhhc0RPTSkgewotICAgICAgICBfZW1iZXJNZXRhbC5kZWZhdWx0Lmxp
YnJhcmllcy5yZWdpc3RlckNvcmVMaWJyYXJ5KCdqUXVlcnknLCBfZW1iZXJWaWV3c1N5c3RlbUpx
dWVyeS5kZWZhdWx0KCkuanF1ZXJ5KTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBmdW5jdGlv
biBsb2dMaWJyYXJ5VmVyc2lvbnMoKSB7Ci0gICAgaWYgKF9lbWJlck1ldGFsLmRlZmF1bHQuTE9H
X1ZFUlNJT04pIHsKLSAgICAgIC8vIHdlIG9ubHkgbmVlZCB0byBzZWUgdGhpcyBvbmNlIHBlciBB
cHBsaWNhdGlvbiNpbml0Ci0gICAgICBfZW1iZXJNZXRhbC5kZWZhdWx0LkxPR19WRVJTSU9OID0g
ZmFsc2U7Ci0gICAgICB2YXIgbGlicyA9IF9lbWJlck1ldGFsLmRlZmF1bHQubGlicmFyaWVzLl9y
ZWdpc3RyeTsKLQotICAgICAgdmFyIG5hbWVMZW5ndGhzID0gbGlicy5tYXAoZnVuY3Rpb24gKGl0
ZW0pIHsKLSAgICAgICAgcmV0dXJuIF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldChpdGVtLCAn
bmFtZS5sZW5ndGgnKTsKLSAgICAgIH0pOwotCi0gICAgICB2YXIgbWF4TmFtZUxlbmd0aCA9IE1h
dGgubWF4LmFwcGx5KHRoaXMsIG5hbWVMZW5ndGhzKTsKLQotICAgICAgX2VtYmVyTWV0YWxEZWJ1
Zy5kZWJ1ZygnLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLScpOwotICAgICAgZm9yICh2
YXIgaSA9IDAsIGwgPSBsaWJzLmxlbmd0aDsgaSA8IGw7IGkrKykgewotICAgICAgICB2YXIgbGli
ID0gbGlic1tpXTsKLSAgICAgICAgdmFyIHNwYWNlcyA9IG5ldyBBcnJheShtYXhOYW1lTGVuZ3Ro
IC0gbGliLm5hbWUubGVuZ3RoICsgMSkuam9pbignICcpOwotICAgICAgICBfZW1iZXJNZXRhbERl
YnVnLmRlYnVnKFtsaWIubmFtZSwgc3BhY2VzLCAnIDogJywgbGliLnZlcnNpb25dLmpvaW4oJycp
KTsKLSAgICAgIH0KLSAgICAgIF9lbWJlck1ldGFsRGVidWcuZGVidWcoJy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0nKTsKLSAgICB9Ci0gIH0KLQotICBleHBvcnRzLmRlZmF1bHQgPSBB
cHBsaWNhdGlvbjsKLX0pOwotLy8gRW1iZXIubGlicmFyaWVzLCBMT0dfVkVSU0lPTiwgTmFtZXNw
YWNlLCBCT09URUQKLWVuaWZlZCgnZW1iZXItYXBwbGljYXRpb24vc3lzdGVtL2VuZ2luZS1pbnN0
YW5jZScsIFsnZXhwb3J0cycsICdlbWJlci1ydW50aW1lL3N5c3RlbS9vYmplY3QnLCAnY29udGFp
bmVyL3JlZ2lzdHJ5JywgJ2VtYmVyLXJ1bnRpbWUvbWl4aW5zL2NvbnRhaW5lcl9wcm94eScsICdl
bWJlci1ydW50aW1lL21peGlucy9yZWdpc3RyeV9wcm94eScsICdlbWJlci1tZXRhbC9ydW5fbG9v
cCddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyUnVudGltZVN5c3RlbU9iamVjdCwgX2NvbnRh
aW5lclJlZ2lzdHJ5LCBfZW1iZXJSdW50aW1lTWl4aW5zQ29udGFpbmVyX3Byb3h5LCBfZW1iZXJS
dW50aW1lTWl4aW5zUmVnaXN0cnlfcHJveHksIF9lbWJlck1ldGFsUnVuX2xvb3ApIHsKLSAgLyoq
Ci0gIEBtb2R1bGUgZW1iZXIKLSAgQHN1Ym1vZHVsZSBlbWJlci1hcHBsaWNhdGlvbgotICAqLwot
Ci0gICd1c2Ugc3RyaWN0JzsKLQotICAvKioKLSAgICBUaGUgYEVuZ2luZUluc3RhbmNlYCBlbmNh
cHN1bGF0ZXMgYWxsIG9mIHRoZSBzdGF0ZWZ1bCBhc3BlY3RzIG9mIGEKLSAgICBydW5uaW5nIGBF
bmdpbmVgLgotICAKLSAgICBAcHVibGljCi0gICAgQGNsYXNzIEVtYmVyLkVuZ2luZUluc3RhbmNl
Ci0gICAgQGV4dGVuZHMgRW1iZXIuT2JqZWN0Ci0gICAgQHVzZXMgUmVnaXN0cnlQcm94eU1peGlu
Ci0gICAgQHVzZXMgQ29udGFpbmVyUHJveHlNaXhpbgotICAgIEBjYXRlZ29yeSBlbWJlci1hcHBs
aWNhdGlvbi1lbmdpbmVzCi0gICovCi0KLSAgdmFyIEVuZ2luZUluc3RhbmNlID0gX2VtYmVyUnVu
dGltZVN5c3RlbU9iamVjdC5kZWZhdWx0LmV4dGVuZChfZW1iZXJSdW50aW1lTWl4aW5zUmVnaXN0
cnlfcHJveHkuZGVmYXVsdCwgX2VtYmVyUnVudGltZU1peGluc0NvbnRhaW5lcl9wcm94eS5kZWZh
dWx0LCB7Ci0gICAgLyoqCi0gICAgICBUaGUgYmFzZSBgRW5naW5lYCBmb3Igd2hpY2ggdGhpcyBp
cyBhbiBpbnN0YW5jZS4KLSAgICAgICBAcHJvcGVydHkge0VtYmVyLkVuZ2luZX0gZW5naW5lCi0g
ICAgICBAcHJpdmF0ZQotICAgICovCi0gICAgYmFzZTogbnVsbCwKLQotICAgIGluaXQ6IGZ1bmN0
aW9uICgpIHsKLSAgICAgIHRoaXMuX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7Ci0KLSAg
ICAgIHZhciBiYXNlID0gdGhpcy5iYXNlOwotCi0gICAgICBpZiAoIWJhc2UpIHsKLSAgICAgICAg
YmFzZSA9IHRoaXMuYXBwbGljYXRpb247Ci0gICAgICAgIHRoaXMuYmFzZSA9IGJhc2U7Ci0gICAg
ICB9Ci0KLSAgICAgIC8vIENyZWF0ZSBhIHBlci1pbnN0YW5jZSByZWdpc3RyeSB0aGF0IHdpbGwg
dXNlIHRoZSBhcHBsaWNhdGlvbidzIHJlZ2lzdHJ5Ci0gICAgICAvLyBhcyBhIGZhbGxiYWNrIGZv
ciByZXNvbHZpbmcgcmVnaXN0cmF0aW9ucy4KLSAgICAgIHZhciByZWdpc3RyeSA9IHRoaXMuX19y
ZWdpc3RyeV9fID0gbmV3IF9jb250YWluZXJSZWdpc3RyeS5kZWZhdWx0KHsKLSAgICAgICAgZmFs
bGJhY2s6IGJhc2UuX19yZWdpc3RyeV9fCi0gICAgICB9KTsKLQotICAgICAgLy8gQ3JlYXRlIGEg
cGVyLWluc3RhbmNlIGNvbnRhaW5lciBmcm9tIHRoZSBpbnN0YW5jZSdzIHJlZ2lzdHJ5Ci0gICAg
ICB0aGlzLl9fY29udGFpbmVyX18gPSByZWdpc3RyeS5jb250YWluZXIoeyBvd25lcjogdGhpcyB9
KTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgIFVucmVnaXN0ZXIgYSBmYWN0b3J5LgotICAgICAg
T3ZlcnJpZGVzIGBSZWdpc3RyeVByb3h5I3VucmVnaXN0ZXJgIGluIG9yZGVyIHRvIGNsZWFyIGFu
eSBjYWNoZWQgaW5zdGFuY2VzCi0gICAgIG9mIHRoZSB1bnJlZ2lzdGVyZWQgZmFjdG9yeS4KLSAg
ICAgIEBwdWJsaWMKLSAgICAgQG1ldGhvZCB1bnJlZ2lzdGVyCi0gICAgIEBwYXJhbSB7U3RyaW5n
fSBmdWxsTmFtZQotICAgICAqLwotICAgIHVucmVnaXN0ZXI6IGZ1bmN0aW9uIChmdWxsTmFtZSkg
ewotICAgICAgdGhpcy5fX2NvbnRhaW5lcl9fLnJlc2V0KGZ1bGxOYW1lKTsKLSAgICAgIHRoaXMu
X3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAg
QHByaXZhdGUKLSAgICAqLwotICAgIHdpbGxEZXN0cm95OiBmdW5jdGlvbiAoKSB7Ci0gICAgICB0
aGlzLl9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwotICAgICAgX2VtYmVyTWV0YWxSdW5f
bG9vcC5kZWZhdWx0KHRoaXMuX19jb250YWluZXJfXywgJ2Rlc3Ryb3knKTsKLSAgICB9Ci0gIH0p
OwotCi0gIGV4cG9ydHMuZGVmYXVsdCA9IEVuZ2luZUluc3RhbmNlOwotfSk7Ci1lbmlmZWQoJ2Vt
YmVyLWFwcGxpY2F0aW9uL3N5c3RlbS9lbmdpbmUnLCBbJ2V4cG9ydHMnLCAnZW1iZXItcnVudGlt
ZS9zeXN0ZW0vbmFtZXNwYWNlJywgJ2NvbnRhaW5lci9yZWdpc3RyeScsICdlbWJlci1ydW50aW1l
L21peGlucy9yZWdpc3RyeV9wcm94eScsICdkYWctbWFwJywgJ2VtYmVyLW1ldGFsL3Byb3BlcnR5
X2dldCcsICdlbWJlci1tZXRhbC9wcm9wZXJ0eV9zZXQnLCAnZW1iZXItbWV0YWwvZGVidWcnLCAn
ZW1iZXItbWV0YWwvdXRpbHMnLCAnZW1iZXItbWV0YWwvZW1wdHlfb2JqZWN0JywgJ2VtYmVyLWFw
cGxpY2F0aW9uL3N5c3RlbS9yZXNvbHZlcicsICdlbWJlci1hcHBsaWNhdGlvbi9zeXN0ZW0vZW5n
aW5lLWluc3RhbmNlJywgJ2VtYmVyLW1ldGFsL2ZlYXR1cmVzJywgJ2VtYmVyLW1ldGFsL3N5bWJv
bCddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyUnVudGltZVN5c3RlbU5hbWVzcGFjZSwgX2Nv
bnRhaW5lclJlZ2lzdHJ5LCBfZW1iZXJSdW50aW1lTWl4aW5zUmVnaXN0cnlfcHJveHksIF9kYWdN
YXAsIF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LCBfZW1iZXJNZXRhbFByb3BlcnR5X3NldCwgX2Vt
YmVyTWV0YWxEZWJ1ZywgX2VtYmVyTWV0YWxVdGlscywgX2VtYmVyTWV0YWxFbXB0eV9vYmplY3Qs
IF9lbWJlckFwcGxpY2F0aW9uU3lzdGVtUmVzb2x2ZXIsIF9lbWJlckFwcGxpY2F0aW9uU3lzdGVt
RW5naW5lSW5zdGFuY2UsIF9lbWJlck1ldGFsRmVhdHVyZXMsIF9lbWJlck1ldGFsU3ltYm9sKSB7
Ci0gIC8qKgotICBAbW9kdWxlIGVtYmVyCi0gIEBzdWJtb2R1bGUgZW1iZXItYXBwbGljYXRpb24K
LSAgKi8KLSAgJ3VzZSBzdHJpY3QnOwotCi0gIHZhciBHTElNTUVSID0gX2VtYmVyTWV0YWxTeW1i
b2wuZGVmYXVsdCgnR0xJTU1FUicpOwotCi0gIGV4cG9ydHMuR0xJTU1FUiA9IEdMSU1NRVI7Ci0g
IGZ1bmN0aW9uIHByb3BzKG9iaikgewotICAgIHZhciBwcm9wZXJ0aWVzID0gW107Ci0KLSAgICBm
b3IgKHZhciBrZXkgaW4gb2JqKSB7Ci0gICAgICBwcm9wZXJ0aWVzLnB1c2goa2V5KTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gcHJvcGVydGllczsKLSAgfQotCi0gIC8qKgotICAgIFRoZSBgRW5naW5l
YCBjbGFzcyBjb250YWlucyBjb3JlIGZ1bmN0aW9uYWxpdHkgZm9yIGJvdGggYXBwbGljYXRpb25z
IGFuZAotICAgIGVuZ2luZXMuCi0gIAotICAgIEVhY2ggZW5naW5lIG1hbmFnZXMgYSByZWdpc3Ry
eSB0aGF0J3MgdXNlZCBmb3IgZGVwZW5kZW5jeSBpbmplY3Rpb24gYW5kCi0gICAgZXhwb3NlZCB0
aHJvdWdoIGBSZWdpc3RyeVByb3h5YC4KLSAgCi0gICAgRW5naW5lcyBhbHNvIG1hbmFnZSBpbml0
aWFsaXplcnMgYW5kIGluc3RhbmNlIGluaXRpYWxpemVycy4KLSAgCi0gICAgRW5naW5lcyBjYW4g
c3Bhd24gYEVuZ2luZUluc3RhbmNlYCBpbnN0YW5jZXMgdmlhIGBidWlsZEluc3RhbmNlKClgLgot
ICAKLSAgICBAY2xhc3MgRW5naW5lCi0gICAgQG5hbWVzcGFjZSBFbWJlcgotICAgIEBleHRlbmRz
IEVtYmVyLk5hbWVzcGFjZQotICAgIEB1c2VzIFJlZ2lzdHJ5UHJveHkKLSAgICBAY2F0ZWdvcnkg
ZW1iZXItYXBwbGljYXRpb24tZW5naW5lcwotICAgIEBwdWJsaWMKLSAgKi8KLSAgdmFyIEVuZ2lu
ZSA9IF9lbWJlclJ1bnRpbWVTeXN0ZW1OYW1lc3BhY2UuZGVmYXVsdC5leHRlbmQoX2VtYmVyUnVu
dGltZU1peGluc1JlZ2lzdHJ5X3Byb3h5LmRlZmF1bHQsIHsKLSAgICBpbml0OiBmdW5jdGlvbiAo
KSB7Ci0gICAgICB0aGlzLl9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwotCi0gICAgICBp
ZiAodGhpc1tHTElNTUVSXSA9PT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgIHRoaXNbR0xJTU1FUl0g
PSBfZW1iZXJNZXRhbEZlYXR1cmVzLmRlZmF1bHQoJ2VtYmVyLWdsaW1tZXInKTsKLSAgICAgIH0K
LQotICAgICAgdGhpcy5idWlsZFJlZ2lzdHJ5KCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAg
Q3JlYXRlIGFuIEVuZ2luZUluc3RhbmNlIGZvciB0aGlzIGFwcGxpY2F0aW9uLgotICAgICAgIEBw
cml2YXRlCi0gICAgICBAbWV0aG9kIGJ1aWxkSW5zdGFuY2UKLSAgICAgIEByZXR1cm4ge0VtYmVy
LkVuZ2luZUluc3RhbmNlfSB0aGUgYXBwbGljYXRpb24gaW5zdGFuY2UKLSAgICAqLwotICAgIGJ1
aWxkSW5zdGFuY2U6IGZ1bmN0aW9uICgpIHsKLSAgICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRz
Lmxlbmd0aCA8PSAwIHx8IGFyZ3VtZW50c1swXSA9PT0gdW5kZWZpbmVkID8ge30gOiBhcmd1bWVu
dHNbMF07Ci0KLSAgICAgIG9wdGlvbnMuYmFzZSA9IHRoaXM7Ci0gICAgICByZXR1cm4gX2VtYmVy
QXBwbGljYXRpb25TeXN0ZW1FbmdpbmVJbnN0YW5jZS5kZWZhdWx0LmNyZWF0ZShvcHRpb25zKTsK
LSAgICB9LAotCi0gICAgLyoqCi0gICAgICBCdWlsZCBhbmQgY29uZmlndXJlIHRoZSByZWdpc3Ry
eSBmb3IgdGhlIGN1cnJlbnQgYXBwbGljYXRpb24uCi0gICAgICAgQHByaXZhdGUKLSAgICAgIEBt
ZXRob2QgYnVpbGRSZWdpc3RyeQotICAgICAgQHJldHVybiB7RW1iZXIuUmVnaXN0cnl9IHRoZSBj
b25maWd1cmVkIHJlZ2lzdHJ5Ci0gICAgKi8KLSAgICBidWlsZFJlZ2lzdHJ5OiBmdW5jdGlvbiAo
KSB7Ci0gICAgICB2YXIgX2NvbnN0cnVjdG9yJGJ1aWxkUmVnaXN0cnk7Ci0KLSAgICAgIHZhciBy
ZWdpc3RyeSA9IHRoaXMuX19yZWdpc3RyeV9fID0gdGhpcy5jb25zdHJ1Y3Rvci5idWlsZFJlZ2lz
dHJ5KHRoaXMsIChfY29uc3RydWN0b3IkYnVpbGRSZWdpc3RyeSA9IHt9LCBfY29uc3RydWN0b3Ik
YnVpbGRSZWdpc3RyeVtHTElNTUVSXSA9IHRoaXNbR0xJTU1FUl0sIF9jb25zdHJ1Y3RvciRidWls
ZFJlZ2lzdHJ5KSk7Ci0KLSAgICAgIHJldHVybiByZWdpc3RyeTsKLSAgICB9LAotCi0gICAgLyoq
Ci0gICAgICBAcHJpdmF0ZQotICAgICAgQG1ldGhvZCBpbml0aWFsaXplcgotICAgICovCi0gICAg
aW5pdGlhbGl6ZXI6IGZ1bmN0aW9uIChvcHRpb25zKSB7Ci0gICAgICB0aGlzLmNvbnN0cnVjdG9y
LmluaXRpYWxpemVyKG9wdGlvbnMpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgIEBwcml2YXRl
Ci0gICAgICBAbWV0aG9kIGluc3RhbmNlSW5pdGlhbGl6ZXIKLSAgICAqLwotICAgIGluc3RhbmNl
SW5pdGlhbGl6ZXI6IGZ1bmN0aW9uIChvcHRpb25zKSB7Ci0gICAgICB0aGlzLmNvbnN0cnVjdG9y
Lmluc3RhbmNlSW5pdGlhbGl6ZXIob3B0aW9ucyk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAg
QHByaXZhdGUKLSAgICAgIEBtZXRob2QgcnVuSW5pdGlhbGl6ZXJzCi0gICAgKi8KLSAgICBydW5J
bml0aWFsaXplcnM6IGZ1bmN0aW9uICgpIHsKLSAgICAgIHZhciBfdGhpcyA9IHRoaXM7Ci0KLSAg
ICAgIHRoaXMuX3J1bkluaXRpYWxpemVyKCdpbml0aWFsaXplcnMnLCBmdW5jdGlvbiAobmFtZSwg
aW5pdGlhbGl6ZXIpIHsKLSAgICAgICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ05vIGFwcGxp
Y2F0aW9uIGluaXRpYWxpemVyIG5hbWVkIFwnJyArIG5hbWUgKyAnXCcnLCAhIWluaXRpYWxpemVy
KTsKLSAgICAgICAgaWYgKGluaXRpYWxpemVyLmluaXRpYWxpemUubGVuZ3RoID09PSAyKSB7Ci0g
ICAgICAgICAgX2VtYmVyTWV0YWxEZWJ1Zy5kZXByZWNhdGUoJ1RoZSBgaW5pdGlhbGl6ZWAgbWV0
aG9kIGZvciBBcHBsaWNhdGlvbiBpbml0aWFsaXplciBcJycgKyBuYW1lICsgJ1wnIHNob3VsZCB0
YWtlIG9ubHkgb25lIGFyZ3VtZW50IC0gYEFwcGAsIGFuIGluc3RhbmNlIG9mIGFuIGBBcHBsaWNh
dGlvbmAuJywgZmFsc2UsIHsKLSAgICAgICAgICAgIGlkOiAnZW1iZXItYXBwbGljYXRpb24uYXBw
LWluaXRpYWxpemVyLWluaXRpYWxpemUtYXJndW1lbnRzJywKLSAgICAgICAgICAgIHVudGlsOiAn
My4wLjAnLAotICAgICAgICAgICAgdXJsOiAnaHR0cDovL2VtYmVyanMuY29tL2RlcHJlY2F0aW9u
cy92Mi54LyN0b2NfaW5pdGlhbGl6ZXItYXJpdHknCi0gICAgICAgICAgfSk7Ci0KLSAgICAgICAg
ICBpbml0aWFsaXplci5pbml0aWFsaXplKF90aGlzLl9fcmVnaXN0cnlfXywgX3RoaXMpOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgIGluaXRpYWxpemVyLmluaXRpYWxpemUoX3RoaXMpOwot
ICAgICAgICB9Ci0gICAgICB9KTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICBAcHJpdmF0ZQot
ICAgICAgQHNpbmNlIDEuMTIuMAotICAgICAgQG1ldGhvZCBydW5JbnN0YW5jZUluaXRpYWxpemVy
cwotICAgICovCi0gICAgcnVuSW5zdGFuY2VJbml0aWFsaXplcnM6IGZ1bmN0aW9uIChpbnN0YW5j
ZSkgewotICAgICAgdGhpcy5fcnVuSW5pdGlhbGl6ZXIoJ2luc3RhbmNlSW5pdGlhbGl6ZXJzJywg
ZnVuY3Rpb24gKG5hbWUsIGluaXRpYWxpemVyKSB7Ci0gICAgICAgIF9lbWJlck1ldGFsRGVidWcu
YXNzZXJ0KCdObyBpbnN0YW5jZSBpbml0aWFsaXplciBuYW1lZCBcJycgKyBuYW1lICsgJ1wnJywg
ISFpbml0aWFsaXplcik7Ci0gICAgICAgIGluaXRpYWxpemVyLmluaXRpYWxpemUoaW5zdGFuY2Up
OwotICAgICAgfSk7Ci0gICAgfSwKLQotICAgIF9ydW5Jbml0aWFsaXplcjogZnVuY3Rpb24gKGJ1
Y2tldE5hbWUsIGNiKSB7Ci0gICAgICB2YXIgaW5pdGlhbGl6ZXJzQnlOYW1lID0gX2VtYmVyTWV0
YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMuY29uc3RydWN0b3IsIGJ1Y2tldE5hbWUpOwotICAgICAg
dmFyIGluaXRpYWxpemVycyA9IHByb3BzKGluaXRpYWxpemVyc0J5TmFtZSk7Ci0gICAgICB2YXIg
Z3JhcGggPSBuZXcgX2RhZ01hcC5kZWZhdWx0KCk7Ci0gICAgICB2YXIgaW5pdGlhbGl6ZXI7Ci0K
LSAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaSsrKSB7Ci0g
ICAgICAgIGluaXRpYWxpemVyID0gaW5pdGlhbGl6ZXJzQnlOYW1lW2luaXRpYWxpemVyc1tpXV07
Ci0gICAgICAgIGdyYXBoLmFkZEVkZ2VzKGluaXRpYWxpemVyLm5hbWUsIGluaXRpYWxpemVyLCBp
bml0aWFsaXplci5iZWZvcmUsIGluaXRpYWxpemVyLmFmdGVyKTsKLSAgICAgIH0KLQotICAgICAg
Z3JhcGgudG9wc29ydChmdW5jdGlvbiAodmVydGV4KSB7Ci0gICAgICAgIGNiKHZlcnRleC5uYW1l
LCB2ZXJ0ZXgudmFsdWUpOwotICAgICAgfSk7Ci0gICAgfQotICB9KTsKLQotICBFbmdpbmUucmVv
cGVuQ2xhc3MoewotICAgIGluaXRpYWxpemVyczogbmV3IF9lbWJlck1ldGFsRW1wdHlfb2JqZWN0
LmRlZmF1bHQoKSwKLSAgICBpbnN0YW5jZUluaXRpYWxpemVyczogbmV3IF9lbWJlck1ldGFsRW1w
dHlfb2JqZWN0LmRlZmF1bHQoKSwKLQotICAgIC8qKgotICAgICAgVGhlIGdvYWwgb2YgaW5pdGlh
bGl6ZXJzIHNob3VsZCBiZSB0byByZWdpc3RlciBkZXBlbmRlbmNpZXMgYW5kIGluamVjdGlvbnMu
Ci0gICAgICBUaGlzIHBoYXNlIHJ1bnMgb25jZS4gQmVjYXVzZSB0aGVzZSBpbml0aWFsaXplcnMg
bWF5IGxvYWQgY29kZSwgdGhleSBhcmUKLSAgICAgIGFsbG93ZWQgdG8gZGVmZXIgYXBwbGljYXRp
b24gcmVhZGluZXNzIGFuZCBhZHZhbmNlIGl0LiBJZiB5b3UgbmVlZCB0byBhY2Nlc3MKLSAgICAg
IHRoZSBjb250YWluZXIgb3Igc3RvcmUgeW91IHNob3VsZCB1c2UgYW4gSW5zdGFuY2VJbml0aWFs
aXplciB0aGF0IHdpbGwgYmUgcnVuCi0gICAgICBhZnRlciBhbGwgaW5pdGlhbGl6ZXJzIGFuZCB0
aGVyZWZvcmUgYWZ0ZXIgYWxsIGNvZGUgaXMgbG9hZGVkIGFuZCB0aGUgYXBwIGlzCi0gICAgICBy
ZWFkeS4KLSAgICAgICBJbml0aWFsaXplciByZWNlaXZlcyBhbiBvYmplY3Qgd2hpY2ggaGFzIHRo
ZSBmb2xsb3dpbmcgYXR0cmlidXRlczoKLSAgICAgIGBuYW1lYCwgYGJlZm9yZWAsIGBhZnRlcmAs
IGBpbml0aWFsaXplYC4gVGhlIG9ubHkgcmVxdWlyZWQgYXR0cmlidXRlIGlzCi0gICAgICBgaW5p
dGlhbGl6ZWAsIGFsbCBvdGhlcnMgYXJlIG9wdGlvbmFsLgotICAgICAgICogYG5hbWVgIGFsbG93
cyB5b3UgdG8gc3BlY2lmeSB1bmRlciB3aGljaCBuYW1lIHRoZSBpbml0aWFsaXplciBpcyByZWdp
c3RlcmVkLgotICAgICAgVGhpcyBtdXN0IGJlIGEgdW5pcXVlIG5hbWUsIGFzIHRyeWluZyB0byBy
ZWdpc3RlciB0d28gaW5pdGlhbGl6ZXJzIHdpdGggdGhlCi0gICAgICBzYW1lIG5hbWUgd2lsbCBy
ZXN1bHQgaW4gYW4gZXJyb3IuCi0gICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgRW1iZXIuQXBw
bGljYXRpb24uaW5pdGlhbGl6ZXIoewotICAgICAgICBuYW1lOiAnbmFtZWRJbml0aWFsaXplcics
Ci0gICAgICAgICBpbml0aWFsaXplOiBmdW5jdGlvbihhcHBsaWNhdGlvbikgewotICAgICAgICAg
IEVtYmVyLmRlYnVnKCdSdW5uaW5nIG5hbWVkSW5pdGlhbGl6ZXIhJyk7Ci0gICAgICAgIH0KLSAg
ICAgIH0pOwotICAgICAgYGBgCi0gICAgICAgKiBgYmVmb3JlYCBhbmQgYGFmdGVyYCBhcmUgdXNl
ZCB0byBlbnN1cmUgdGhhdCB0aGlzIGluaXRpYWxpemVyIGlzIHJhbiBwcmlvcgotICAgICAgb3Ig
YWZ0ZXIgdGhlIG9uZSBpZGVudGlmaWVkIGJ5IHRoZSB2YWx1ZS4gVGhpcyB2YWx1ZSBjYW4gYmUg
YSBzaW5nbGUgc3RyaW5nCi0gICAgICBvciBhbiBhcnJheSBvZiBzdHJpbmdzLCByZWZlcmVuY2lu
ZyB0aGUgYG5hbWVgIG9mIG90aGVyIGluaXRpYWxpemVycy4KLSAgICAgICBBbiBleGFtcGxlIG9m
IG9yZGVyaW5nIGluaXRpYWxpemVycywgd2UgY3JlYXRlIGFuIGluaXRpYWxpemVyIG5hbWVkIGBm
aXJzdGA6Ci0gICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgRW1iZXIuQXBwbGljYXRpb24uaW5p
dGlhbGl6ZXIoewotICAgICAgICBuYW1lOiAnZmlyc3QnLAotICAgICAgICAgaW5pdGlhbGl6ZTog
ZnVuY3Rpb24oYXBwbGljYXRpb24pIHsKLSAgICAgICAgICBFbWJlci5kZWJ1ZygnRmlyc3QgaW5p
dGlhbGl6ZXIhJyk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotICAgICAgIC8vIERFQlVHOiBGaXJz
dCBpbml0aWFsaXplciEKLSAgICAgIGBgYAotICAgICAgIFdlIGFkZCBhbm90aGVyIGluaXRpYWxp
emVyIG5hbWVkIGBzZWNvbmRgLCBzcGVjaWZ5aW5nIHRoYXQgaXQgc2hvdWxkIHJ1bgotICAgICAg
YWZ0ZXIgdGhlIGluaXRpYWxpemVyIG5hbWVkIGBmaXJzdGA6Ci0gICAgICAgYGBgamF2YXNjcmlw
dAotICAgICAgRW1iZXIuQXBwbGljYXRpb24uaW5pdGlhbGl6ZXIoewotICAgICAgICBuYW1lOiAn
c2Vjb25kJywKLSAgICAgICAgYWZ0ZXI6ICdmaXJzdCcsCi0gICAgICAgICBpbml0aWFsaXplOiBm
dW5jdGlvbihhcHBsaWNhdGlvbikgewotICAgICAgICAgIEVtYmVyLmRlYnVnKCdTZWNvbmQgaW5p
dGlhbGl6ZXIhJyk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotICAgICAgIC8vIERFQlVHOiBGaXJz
dCBpbml0aWFsaXplciEKLSAgICAgIC8vIERFQlVHOiBTZWNvbmQgaW5pdGlhbGl6ZXIhCi0gICAg
ICBgYGAKLSAgICAgICBBZnRlcndhcmRzIHdlIGFkZCBhIGZ1cnRoZXIgaW5pdGlhbGl6ZXIgbmFt
ZWQgYHByZWAsIHRoaXMgdGltZSBzcGVjaWZ5aW5nCi0gICAgICB0aGF0IGl0IHNob3VsZCBydW4g
YmVmb3JlIHRoZSBpbml0aWFsaXplciBuYW1lZCBgZmlyc3RgOgotICAgICAgIGBgYGphdmFzY3Jp
cHQKLSAgICAgIEVtYmVyLkFwcGxpY2F0aW9uLmluaXRpYWxpemVyKHsKLSAgICAgICAgbmFtZTog
J3ByZScsCi0gICAgICAgIGJlZm9yZTogJ2ZpcnN0JywKLSAgICAgICAgIGluaXRpYWxpemU6IGZ1
bmN0aW9uKGFwcGxpY2F0aW9uKSB7Ci0gICAgICAgICAgRW1iZXIuZGVidWcoJ1ByZSBpbml0aWFs
aXplciEnKTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0gICAgICAgLy8gREVCVUc6IFByZSBpbml0
aWFsaXplciEKLSAgICAgIC8vIERFQlVHOiBGaXJzdCBpbml0aWFsaXplciEKLSAgICAgIC8vIERF
QlVHOiBTZWNvbmQgaW5pdGlhbGl6ZXIhCi0gICAgICBgYGAKLSAgICAgICBGaW5hbGx5IHdlIGFk
ZCBhbiBpbml0aWFsaXplciBuYW1lZCBgcG9zdGAsIHNwZWNpZnlpbmcgaXQgc2hvdWxkIHJ1biBh
ZnRlcgotICAgICAgYm90aCB0aGUgYGZpcnN0YCBhbmQgdGhlIGBzZWNvbmRgIGluaXRpYWxpemVy
czoKLSAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICBFbWJlci5BcHBsaWNhdGlvbi5pbml0aWFs
aXplcih7Ci0gICAgICAgIG5hbWU6ICdwb3N0JywKLSAgICAgICAgYWZ0ZXI6IFsnZmlyc3QnLCAn
c2Vjb25kJ10sCi0gICAgICAgICBpbml0aWFsaXplOiBmdW5jdGlvbihhcHBsaWNhdGlvbikgewot
ICAgICAgICAgIEVtYmVyLmRlYnVnKCdQb3N0IGluaXRpYWxpemVyIScpOwotICAgICAgICB9Ci0g
ICAgICB9KTsKLSAgICAgICAvLyBERUJVRzogUHJlIGluaXRpYWxpemVyIQotICAgICAgLy8gREVC
VUc6IEZpcnN0IGluaXRpYWxpemVyIQotICAgICAgLy8gREVCVUc6IFNlY29uZCBpbml0aWFsaXpl
ciEKLSAgICAgIC8vIERFQlVHOiBQb3N0IGluaXRpYWxpemVyIQotICAgICAgYGBgCi0gICAgICAg
KiBgaW5pdGlhbGl6ZWAgaXMgYSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IHJlY2VpdmVzIG9uZSBh
cmd1bWVudCwKLSAgICAgICAgYGFwcGxpY2F0aW9uYCwgb24gd2hpY2ggeW91IGNhbiBvcGVyYXRl
LgotICAgICAgIEV4YW1wbGUgb2YgdXNpbmcgYGFwcGxpY2F0aW9uYCB0byByZWdpc3RlciBhbiBh
ZGFwdGVyOgotICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgIEVtYmVyLkFwcGxpY2F0aW9uLmlu
aXRpYWxpemVyKHsKLSAgICAgICAgbmFtZTogJ2FwaS1hZGFwdGVyJywKLSAgICAgICAgIGluaXRp
YWxpemU6IGZ1bmN0aW9uKGFwcGxpY2F0aW9uKSB7Ci0gICAgICAgICAgYXBwbGljYXRpb24ucmVn
aXN0ZXIoJ2FwaS1hZGFwdGVyOm1haW4nLCBBcGlBZGFwdGVyKTsKLSAgICAgICAgfQotICAgICAg
fSk7Ci0gICAgICBgYGAKLSAgICAgICBAbWV0aG9kIGluaXRpYWxpemVyCi0gICAgICBAcGFyYW0g
aW5pdGlhbGl6ZXIge09iamVjdH0KLSAgICAgIEBwdWJsaWMKLSAgICAqLwotCi0gICAgaW5pdGlh
bGl6ZXI6IGJ1aWxkSW5pdGlhbGl6ZXJNZXRob2QoJ2luaXRpYWxpemVycycsICdpbml0aWFsaXpl
cicpLAotCi0gICAgLyoqCi0gICAgICBJbnN0YW5jZSBpbml0aWFsaXplcnMgcnVuIGFmdGVyIGFs
bCBpbml0aWFsaXplcnMgaGF2ZSBydW4uIEJlY2F1c2UKLSAgICAgIGluc3RhbmNlIGluaXRpYWxp
emVycyBydW4gYWZ0ZXIgdGhlIGFwcCBpcyBmdWxseSBzZXQgdXAuIFdlIGhhdmUgYWNjZXNzCi0g
ICAgICB0byB0aGUgc3RvcmUsIGNvbnRhaW5lciwgYW5kIG90aGVyIGl0ZW1zLiBIb3dldmVyLCB0
aGVzZSBpbml0aWFsaXplcnMgcnVuCi0gICAgICBhZnRlciBjb2RlIGhhcyBsb2FkZWQgYW5kIGFy
ZSBub3QgYWxsb3dlZCB0byBkZWZlciByZWFkaW5lc3MuCi0gICAgICAgSW5zdGFuY2UgaW5pdGlh
bGl6ZXIgcmVjZWl2ZXMgYW4gb2JqZWN0IHdoaWNoIGhhcyB0aGUgZm9sbG93aW5nIGF0dHJpYnV0
ZXM6Ci0gICAgICBgbmFtZWAsIGBiZWZvcmVgLCBgYWZ0ZXJgLCBgaW5pdGlhbGl6ZWAuIFRoZSBv
bmx5IHJlcXVpcmVkIGF0dHJpYnV0ZSBpcwotICAgICAgYGluaXRpYWxpemVgLCBhbGwgb3RoZXJz
IGFyZSBvcHRpb25hbC4KLSAgICAgICAqIGBuYW1lYCBhbGxvd3MgeW91IHRvIHNwZWNpZnkgdW5k
ZXIgd2hpY2ggbmFtZSB0aGUgaW5zdGFuY2VJbml0aWFsaXplciBpcwotICAgICAgcmVnaXN0ZXJl
ZC4gVGhpcyBtdXN0IGJlIGEgdW5pcXVlIG5hbWUsIGFzIHRyeWluZyB0byByZWdpc3RlciB0d28K
LSAgICAgIGluc3RhbmNlSW5pdGlhbGl6ZXIgd2l0aCB0aGUgc2FtZSBuYW1lIHdpbGwgcmVzdWx0
IGluIGFuIGVycm9yLgotICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgIEVtYmVyLkFwcGxpY2F0
aW9uLmluc3RhbmNlSW5pdGlhbGl6ZXIoewotICAgICAgICBuYW1lOiAnbmFtZWRpbnN0YW5jZUlu
aXRpYWxpemVyJywKLSAgICAgICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uKGFwcGxpY2F0aW9uKSB7
Ci0gICAgICAgICAgRW1iZXIuZGVidWcoJ1J1bm5pbmcgbmFtZWRJbml0aWFsaXplciEnKTsKLSAg
ICAgICAgfQotICAgICAgfSk7Ci0gICAgICBgYGAKLSAgICAgICAqIGBiZWZvcmVgIGFuZCBgYWZ0
ZXJgIGFyZSB1c2VkIHRvIGVuc3VyZSB0aGF0IHRoaXMgaW5pdGlhbGl6ZXIgaXMgcmFuIHByaW9y
Ci0gICAgICBvciBhZnRlciB0aGUgb25lIGlkZW50aWZpZWQgYnkgdGhlIHZhbHVlLiBUaGlzIHZh
bHVlIGNhbiBiZSBhIHNpbmdsZSBzdHJpbmcKLSAgICAgIG9yIGFuIGFycmF5IG9mIHN0cmluZ3Ms
IHJlZmVyZW5jaW5nIHRoZSBgbmFtZWAgb2Ygb3RoZXIgaW5pdGlhbGl6ZXJzLgotICAgICAgICog
U2VlIEVtYmVyLkFwcGxpY2F0aW9uLmluaXRpYWxpemVyIGZvciBkaXNjdXNzaW9uIG9uIHRoZSB1
c2FnZSBvZiBiZWZvcmUKLSAgICAgIGFuZCBhZnRlci4KLSAgICAgICBFeGFtcGxlIGluc3RhbmNl
SW5pdGlhbGl6ZXIgdG8gcHJlbG9hZCBkYXRhIGludG8gdGhlIHN0b3JlLgotICAgICAgIGBgYGph
dmFzY3JpcHQKLSAgICAgIEVtYmVyLkFwcGxpY2F0aW9uLmluaXRpYWxpemVyKHsKLSAgICAgICAg
bmFtZTogJ3ByZWxvYWQtZGF0YScsCi0gICAgICAgICBpbml0aWFsaXplOiBmdW5jdGlvbihhcHBs
aWNhdGlvbikgewotICAgICAgICAgIHZhciB1c2VyQ29uZmlnLCB1c2VyQ29uZmlnRW5jb2RlZCwg
c3RvcmU7Ci0gICAgICAgICAgLy8gV2UgaGF2ZSBhIEhUTUwgZXNjYXBlZCBKU09OIHJlcHJlc2Vu
dGF0aW9uIG9mIHRoZSB1c2VyJ3MgYmFzaWMKLSAgICAgICAgICAvLyBjb25maWd1cmF0aW9uIGdl
bmVyYXRlZCBzZXJ2ZXIgc2lkZSBhbmQgc3RvcmVkIGluIHRoZSBET00gb2YgdGhlIG1haW4KLSAg
ICAgICAgICAvLyBpbmRleC5odG1sIGZpbGUuIFRoaXMgYWxsb3dzIHRoZSBhcHAgdG8gaGF2ZSBh
Y2Nlc3MgdG8gYSBzZXQgb2YgZGF0YQotICAgICAgICAgIC8vIHdpdGhvdXQgbWFraW5nIGFueSBh
ZGRpdGlvbmFsIHJlbW90ZSBjYWxscy4gR29vZCBmb3IgYmFzaWMgZGF0YSB0aGF0IGlzCi0gICAg
ICAgICAgLy8gbmVlZGVkIGZvciBpbW1lZGlhdGUgcmVuZGVyaW5nIG9mIHRoZSBwYWdlLiBLZWVw
IGluIG1pbmQsIHRoaXMgZGF0YSwKLSAgICAgICAgICAvLyBsaWtlIGFsbCBsb2NhbCBtb2RlbHMg
YW5kIGRhdGEgY2FuIGJlIG1hbmlwdWxhdGVkIGJ5IHRoZSB1c2VyLCBzbyBpdAotICAgICAgICAg
IC8vIHNob3VsZCBub3QgYmUgcmVsaWVkIHVwb24gZm9yIHNlY3VyaXR5IG9yIGF1dGhvcml6YXRp
b24uCi0gICAgICAgICAgLy8KLSAgICAgICAgICAvLyBHcmFiIHRoZSBlbmNvZGVkIGRhdGEgZnJv
bSB0aGUgbWV0YSB0YWcKLSAgICAgICAgICB1c2VyQ29uZmlnRW5jb2RlZCA9IEVtYmVyLiQoJ2hl
YWQgbWV0YVtuYW1lPWFwcC11c2VyLWNvbmZpZ10nKS5hdHRyKCdjb250ZW50Jyk7Ci0gICAgICAg
ICAgLy8gVW5lc2NhcGUgdGhlIHRleHQsIHRoZW4gcGFyc2UgdGhlIHJlc3VsdGluZyBKU09OIGlu
dG8gYSByZWFsIG9iamVjdAotICAgICAgICAgIHVzZXJDb25maWcgPSBKU09OLnBhcnNlKHVuZXNj
YXBlKHVzZXJDb25maWdFbmNvZGVkKSk7Ci0gICAgICAgICAgLy8gTG9va3VwIHRoZSBzdG9yZQot
ICAgICAgICAgIHN0b3JlID0gYXBwbGljYXRpb24ubG9va3VwKCdzZXJ2aWNlOnN0b3JlJyk7Ci0g
ICAgICAgICAgLy8gUHVzaCB0aGUgZW5jb2RlZCBKU09OIGludG8gdGhlIHN0b3JlCi0gICAgICAg
ICAgc3RvcmUucHVzaFBheWxvYWQodXNlckNvbmZpZyk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwot
ICAgICAgYGBgCi0gICAgICAgQG1ldGhvZCBpbnN0YW5jZUluaXRpYWxpemVyCi0gICAgICBAcGFy
YW0gaW5zdGFuY2VJbml0aWFsaXplcgotICAgICAgQHB1YmxpYwotICAgICovCi0gICAgaW5zdGFu
Y2VJbml0aWFsaXplcjogYnVpbGRJbml0aWFsaXplck1ldGhvZCgnaW5zdGFuY2VJbml0aWFsaXpl
cnMnLCAnaW5zdGFuY2UgaW5pdGlhbGl6ZXInKSwKLQotICAgIC8qKgotICAgICAgVGhpcyBjcmVh
dGVzIGEgcmVnaXN0cnkgd2l0aCB0aGUgZGVmYXVsdCBFbWJlciBuYW1pbmcgY29udmVudGlvbnMu
Ci0gICAgICAgSXQgYWxzbyBjb25maWd1cmVzIHRoZSByZWdpc3RyeToKLSAgICAgICAqIHJlZ2lz
dGVyZWQgdmlld3MgYXJlIGNyZWF0ZWQgZXZlcnkgdGltZSB0aGV5IGFyZSBsb29rZWQgdXAgKHRo
ZXkgYXJlCi0gICAgICAgIG5vdCBzaW5nbGV0b25zKQotICAgICAgKiByZWdpc3RlcmVkIHRlbXBs
YXRlcyBhcmUgbm90IGZhY3RvcmllczsgdGhlIHJlZ2lzdGVyZWQgdmFsdWUgaXMKLSAgICAgICAg
cmV0dXJuZWQgZGlyZWN0bHkuCi0gICAgICAqIHRoZSByb3V0ZXIgcmVjZWl2ZXMgdGhlIGFwcGxp
Y2F0aW9uIGFzIGl0cyBgbmFtZXNwYWNlYCBwcm9wZXJ0eQotICAgICAgKiBhbGwgY29udHJvbGxl
cnMgcmVjZWl2ZSB0aGUgcm91dGVyIGFzIHRoZWlyIGB0YXJnZXRgIGFuZCBgY29udHJvbGxlcnNg
Ci0gICAgICAgIHByb3BlcnRpZXMKLSAgICAgICogYWxsIGNvbnRyb2xsZXJzIHJlY2VpdmUgdGhl
IGFwcGxpY2F0aW9uIGFzIHRoZWlyIGBuYW1lc3BhY2VgIHByb3BlcnR5Ci0gICAgICAqIHRoZSBh
cHBsaWNhdGlvbiB2aWV3IHJlY2VpdmVzIHRoZSBhcHBsaWNhdGlvbiBjb250cm9sbGVyIGFzIGl0
cwotICAgICAgICBgY29udHJvbGxlcmAgcHJvcGVydHkKLSAgICAgICogdGhlIGFwcGxpY2F0aW9u
IHZpZXcgcmVjZWl2ZXMgdGhlIGFwcGxpY2F0aW9uIHRlbXBsYXRlIGFzIGl0cwotICAgICAgICBg
ZGVmYXVsdFRlbXBsYXRlYCBwcm9wZXJ0eQotICAgICAgIEBwcml2YXRlCi0gICAgICBAbWV0aG9k
IGJ1aWxkUmVnaXN0cnkKLSAgICAgIEBzdGF0aWMKLSAgICAgIEBwYXJhbSB7RW1iZXIuQXBwbGlj
YXRpb259IG5hbWVzcGFjZSB0aGUgYXBwbGljYXRpb24gZm9yIHdoaWNoIHRvCi0gICAgICAgIGJ1
aWxkIHRoZSByZWdpc3RyeQotICAgICAgQHJldHVybiB7RW1iZXIuUmVnaXN0cnl9IHRoZSBidWls
dCByZWdpc3RyeQotICAgICAgQHB1YmxpYwotICAgICovCi0gICAgYnVpbGRSZWdpc3RyeTogZnVu
Y3Rpb24gKG5hbWVzcGFjZSkgewotICAgICAgdmFyIHJlZ2lzdHJ5ID0gbmV3IF9jb250YWluZXJS
ZWdpc3RyeS5kZWZhdWx0KHsKLSAgICAgICAgcmVzb2x2ZXI6IHJlc29sdmVyRm9yKG5hbWVzcGFj
ZSkKLSAgICAgIH0pOwotCi0gICAgICByZWdpc3RyeS5zZXQgPSBfZW1iZXJNZXRhbFByb3BlcnR5
X3NldC5zZXQ7Ci0KLSAgICAgIHJldHVybiByZWdpc3RyeTsKLSAgICB9LAotCi0gICAgLyoqCi0g
ICAgICBTZXQgdGhpcyB0byBwcm92aWRlIGFuIGFsdGVybmF0ZSBjbGFzcyB0byBgRW1iZXIuRGVm
YXVsdFJlc29sdmVyYAotICAgICAgICBAZGVwcmVjYXRlZCBVc2UgJ1Jlc29sdmVyJyBpbnN0ZWFk
Ci0gICAgICBAcHJvcGVydHkgcmVzb2x2ZXIKLSAgICAgIEBwdWJsaWMKLSAgICAqLwotICAgIHJl
c29sdmVyOiBudWxsLAotCi0gICAgLyoqCi0gICAgICBTZXQgdGhpcyB0byBwcm92aWRlIGFuIGFs
dGVybmF0ZSBjbGFzcyB0byBgRW1iZXIuRGVmYXVsdFJlc29sdmVyYAotICAgICAgIEBwcm9wZXJ0
eSByZXNvbHZlcgotICAgICAgQHB1YmxpYwotICAgICovCi0gICAgUmVzb2x2ZXI6IG51bGwKLSAg
fSk7Ci0KLSAgLyoqCi0gICAgVGhpcyBmdW5jdGlvbiBkZWZpbmVzIHRoZSBkZWZhdWx0IGxvb2t1
cCBydWxlcyBmb3IgY29udGFpbmVyIGxvb2t1cHM6Ci0gIAotICAgICogdGVtcGxhdGVzIGFyZSBs
b29rZWQgdXAgb24gYEVtYmVyLlRFTVBMQVRFU2AKLSAgICAqIG90aGVyIG5hbWVzIGFyZSBsb29r
ZWQgdXAgb24gdGhlIGFwcGxpY2F0aW9uIGFmdGVyIGNsYXNzaWZ5aW5nIHRoZSBuYW1lLgotICAg
ICAgRm9yIGV4YW1wbGUsIGBjb250cm9sbGVyOnBvc3RgIGxvb2tzIHVwIGBBcHAuUG9zdENvbnRy
b2xsZXJgIGJ5IGRlZmF1bHQuCi0gICAgKiBpZiB0aGUgZGVmYXVsdCBsb29rdXAgZmFpbHMsIGxv
b2sgZm9yIHJlZ2lzdGVyZWQgY2xhc3NlcyBvbiB0aGUgY29udGFpbmVyCi0gIAotICAgIFRoaXMg
YWxsb3dzIHRoZSBhcHBsaWNhdGlvbiB0byByZWdpc3RlciBkZWZhdWx0IGluamVjdGlvbnMgaW4g
dGhlIGNvbnRhaW5lcgotICAgIHRoYXQgY291bGQgYmUgb3ZlcnJpZGRlbiBieSB0aGUgbm9ybWFs
IG5hbWluZyBjb252ZW50aW9uLgotICAKLSAgICBAcHJpdmF0ZQotICAgIEBtZXRob2QgcmVzb2x2
ZXJGb3IKLSAgICBAcGFyYW0ge0VtYmVyLk5hbWVzcGFjZX0gbmFtZXNwYWNlIHRoZSBuYW1lc3Bh
Y2UgdG8gbG9vayBmb3IgY2xhc3NlcwotICAgIEByZXR1cm4geyp9IHRoZSByZXNvbHZlZCB2YWx1
ZSBmb3IgYSBnaXZlbiBsb29rdXAKLSAgKi8KLSAgZnVuY3Rpb24gcmVzb2x2ZXJGb3IobmFtZXNw
YWNlKSB7Ci0gICAgdmFyIFJlc29sdmVyQ2xhc3MgPSBuYW1lc3BhY2UuZ2V0KCdSZXNvbHZlcicp
IHx8IF9lbWJlckFwcGxpY2F0aW9uU3lzdGVtUmVzb2x2ZXIuZGVmYXVsdDsKLQotICAgIHJldHVy
biBSZXNvbHZlckNsYXNzLmNyZWF0ZSh7Ci0gICAgICBuYW1lc3BhY2U6IG5hbWVzcGFjZQotICAg
IH0pOwotICB9Ci0KLSAgZnVuY3Rpb24gYnVpbGRJbml0aWFsaXplck1ldGhvZChidWNrZXROYW1l
LCBodW1hbk5hbWUpIHsKLSAgICByZXR1cm4gZnVuY3Rpb24gKGluaXRpYWxpemVyKSB7Ci0gICAg
ICAvLyBJZiB0aGlzIGlzIHRoZSBmaXJzdCBpbml0aWFsaXplciBiZWluZyBhZGRlZCB0byBhIHN1
YmNsYXNzLCB3ZSBhcmUgZ29pbmcgdG8gcmVvcGVuIHRoZSBjbGFzcwotICAgICAgLy8gdG8gbWFr
ZSBzdXJlIHdlIGhhdmUgYSBuZXcgYGluaXRpYWxpemVyc2Agb2JqZWN0LCB3aGljaCBleHRlbmRz
IGZyb20gdGhlIHBhcmVudCBjbGFzcycgdXNpbmcKLSAgICAgIC8vIHByb3RvdHlwYWwgaW5oZXJp
dGFuY2UuIFdpdGhvdXQgdGhpcywgYXR0ZW1wdGluZyB0byBhZGQgaW5pdGlhbGl6ZXJzIHRvIHRo
ZSBzdWJjbGFzcyB3b3VsZAotICAgICAgLy8gcG9sbHV0ZSB0aGUgcGFyZW50IGNsYXNzIGFzIHdl
bGwgYXMgb3RoZXIgc3ViY2xhc3Nlcy4KLSAgICAgIGlmICh0aGlzLnN1cGVyY2xhc3NbYnVja2V0
TmFtZV0gIT09IHVuZGVmaW5lZCAmJiB0aGlzLnN1cGVyY2xhc3NbYnVja2V0TmFtZV0gPT09IHRo
aXNbYnVja2V0TmFtZV0pIHsKLSAgICAgICAgdmFyIGF0dHJzID0ge307Ci0gICAgICAgIGF0dHJz
W2J1Y2tldE5hbWVdID0gT2JqZWN0LmNyZWF0ZSh0aGlzW2J1Y2tldE5hbWVdKTsKLSAgICAgICAg
dGhpcy5yZW9wZW5DbGFzcyhhdHRycyk7Ci0gICAgICB9Ci0KLSAgICAgIF9lbWJlck1ldGFsRGVi
dWcuYXNzZXJ0KCdUaGUgJyArIGh1bWFuTmFtZSArICcgXCcnICsgaW5pdGlhbGl6ZXIubmFtZSAr
ICdcJyBoYXMgYWxyZWFkeSBiZWVuIHJlZ2lzdGVyZWQnLCAhdGhpc1tidWNrZXROYW1lXVtpbml0
aWFsaXplci5uYW1lXSk7Ci0gICAgICBfZW1iZXJNZXRhbERlYnVnLmFzc2VydCgnQW4gJyArIGh1
bWFuTmFtZSArICcgY2Fubm90IGJlIHJlZ2lzdGVyZWQgd2l0aG91dCBhbiBpbml0aWFsaXplIGZ1
bmN0aW9uJywgX2VtYmVyTWV0YWxVdGlscy5jYW5JbnZva2UoaW5pdGlhbGl6ZXIsICdpbml0aWFs
aXplJykpOwotICAgICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ0FuICcgKyBodW1hbk5hbWUg
KyAnIGNhbm5vdCBiZSByZWdpc3RlcmVkIHdpdGhvdXQgYSBuYW1lIHByb3BlcnR5JywgaW5pdGlh
bGl6ZXIubmFtZSAhPT0gdW5kZWZpbmVkKTsKLQotICAgICAgdGhpc1tidWNrZXROYW1lXVtpbml0
aWFsaXplci5uYW1lXSA9IGluaXRpYWxpemVyOwotICAgIH07Ci0gIH0KLQotICBleHBvcnRzLmRl
ZmF1bHQgPSBFbmdpbmU7Ci19KTsKLWVuaWZlZCgnZW1iZXItYXBwbGljYXRpb24vc3lzdGVtL3Jl
c29sdmVyJywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFsL2RlYnVnJywgJ2VtYmVyLW1ldGFsL3By
b3BlcnR5X2dldCcsICdlbWJlci1ydW50aW1lL3N5c3RlbS9zdHJpbmcnLCAnZW1iZXItcnVudGlt
ZS9zeXN0ZW0vb2JqZWN0JywgJ2VtYmVyLXJ1bnRpbWUvc3lzdGVtL25hbWVzcGFjZScsICdlbWJl
ci1odG1sYmFycy9oZWxwZXJzJywgJ2VtYmVyLWFwcGxpY2F0aW9uL3V0aWxzL3ZhbGlkYXRlLXR5
cGUnLCAnZW1iZXItbWV0YWwvZGljdGlvbmFyeScsICdlbWJlci1odG1sYmFycy90ZW1wbGF0ZV9y
ZWdpc3RyeSddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0YWxEZWJ1ZywgX2VtYmVyTWV0
YWxQcm9wZXJ0eV9nZXQsIF9lbWJlclJ1bnRpbWVTeXN0ZW1TdHJpbmcsIF9lbWJlclJ1bnRpbWVT
eXN0ZW1PYmplY3QsIF9lbWJlclJ1bnRpbWVTeXN0ZW1OYW1lc3BhY2UsIF9lbWJlckh0bWxiYXJz
SGVscGVycywgX2VtYmVyQXBwbGljYXRpb25VdGlsc1ZhbGlkYXRlVHlwZSwgX2VtYmVyTWV0YWxE
aWN0aW9uYXJ5LCBfZW1iZXJIdG1sYmFyc1RlbXBsYXRlX3JlZ2lzdHJ5KSB7Ci0gIC8qKgotICBA
bW9kdWxlIGVtYmVyCi0gIEBzdWJtb2R1bGUgZW1iZXItYXBwbGljYXRpb24KLSAgKi8KLQotICAn
dXNlIHN0cmljdCc7Ci0KLSAgdmFyIFJlc29sdmVyID0gX2VtYmVyUnVudGltZVN5c3RlbU9iamVj
dC5kZWZhdWx0LmV4dGVuZCh7Ci0gICAgLyoKLSAgICAgIFRoaXMgd2lsbCBiZSBzZXQgdG8gdGhl
IEFwcGxpY2F0aW9uIGluc3RhbmNlIHdoZW4gaXQgaXMKLSAgICAgIGNyZWF0ZWQuCi0gICAgICAg
QHByb3BlcnR5IG5hbWVzcGFjZQotICAgICovCi0gICAgbmFtZXNwYWNlOiBudWxsLAotICAgIG5v
cm1hbGl6ZTogbnVsbCwgLy8gcmVxdWlyZWQKLSAgICByZXNvbHZlOiBudWxsLCAvLyByZXF1aXJl
ZAotICAgIHBhcnNlTmFtZTogbnVsbCwgLy8gcmVxdWlyZWQKLSAgICBsb29rdXBEZXNjcmlwdGlv
bjogbnVsbCwgLy8gcmVxdWlyZWQKLSAgICBtYWtlVG9TdHJpbmc6IG51bGwsIC8vIHJlcXVpcmVk
Ci0gICAgcmVzb2x2ZU90aGVyOiBudWxsLCAvLyByZXF1aXJlZAotICAgIF9sb2dMb29rdXA6IG51
bGwgLy8gcmVxdWlyZWQKLSAgfSk7Ci0KLSAgZXhwb3J0cy5SZXNvbHZlciA9IFJlc29sdmVyOwot
ICAvKioKLSAgICBUaGUgRGVmYXVsdFJlc29sdmVyIGRlZmluZXMgdGhlIGRlZmF1bHQgbG9va3Vw
IHJ1bGVzIHRvIHJlc29sdmUKLSAgICBjb250YWluZXIgbG9va3VwcyBiZWZvcmUgY29uc3VsdGlu
ZyB0aGUgY29udGFpbmVyIGZvciByZWdpc3RlcmVkCi0gICAgaXRlbXM6Ci0gIAotICAgICogdGVt
cGxhdGVzIGFyZSBsb29rZWQgdXAgb24gYEVtYmVyLlRFTVBMQVRFU2AKLSAgICAqIG90aGVyIG5h
bWVzIGFyZSBsb29rZWQgdXAgb24gdGhlIGFwcGxpY2F0aW9uIGFmdGVyIGNvbnZlcnRpbmcKLSAg
ICAgIHRoZSBuYW1lLiBGb3IgZXhhbXBsZSwgYGNvbnRyb2xsZXI6cG9zdGAgbG9va3MgdXAKLSAg
ICAgIGBBcHAuUG9zdENvbnRyb2xsZXJgIGJ5IGRlZmF1bHQuCi0gICAgKiB0aGVyZSBhcmUgc29t
ZSBudWFuY2VzIChzZWUgZXhhbXBsZXMgYmVsb3cpCi0gIAotICAgICMjIyBIb3cgUmVzb2x2aW5n
IFdvcmtzCi0gIAotICAgIFRoZSBjb250YWluZXIgY2FsbHMgdGhpcyBvYmplY3QncyBgcmVzb2x2
ZWAgbWV0aG9kIHdpdGggdGhlCi0gICAgYGZ1bGxOYW1lYCBhcmd1bWVudC4KLSAgCi0gICAgSXQg
Zmlyc3QgcGFyc2VzIHRoZSBmdWxsTmFtZSBpbnRvIGFuIG9iamVjdCB1c2luZyBgcGFyc2VOYW1l
YC4KLSAgCi0gICAgVGhlbiBpdCBjaGVja3MgZm9yIHRoZSBwcmVzZW5jZSBvZiBhIHR5cGUtc3Bl
Y2lmaWMgaW5zdGFuY2UKLSAgICBtZXRob2Qgb2YgdGhlIGZvcm0gYHJlc29sdmVbVHlwZV1gIGFu
ZCBjYWxscyBpdCBpZiBpdCBleGlzdHMuCi0gICAgRm9yIGV4YW1wbGUgaWYgaXQgd2FzIHJlc29s
dmluZyAndGVtcGxhdGU6cG9zdCcsIGl0IHdvdWxkIGNhbGwKLSAgICB0aGUgYHJlc29sdmVUZW1w
bGF0ZWAgbWV0aG9kLgotICAKLSAgICBJdHMgbGFzdCByZXNvcnQgaXMgdG8gY2FsbCB0aGUgYHJl
c29sdmVPdGhlcmAgbWV0aG9kLgotICAKLSAgICBUaGUgbWV0aG9kcyBvZiB0aGlzIG9iamVjdCBh
cmUgZGVzaWduZWQgdG8gYmUgZWFzeSB0byBvdmVycmlkZQotICAgIGluIGEgc3ViY2xhc3MuIEZv
ciBleGFtcGxlLCB5b3UgY291bGQgZW5oYW5jZSBob3cgYSB0ZW1wbGF0ZQotICAgIGlzIHJlc29s
dmVkIGxpa2Ugc286Ci0gIAotICAgIGBgYGphdmFzY3JpcHQKLSAgICBBcHAgPSBFbWJlci5BcHBs
aWNhdGlvbi5jcmVhdGUoewotICAgICAgUmVzb2x2ZXI6IEVtYmVyLkRlZmF1bHRSZXNvbHZlci5l
eHRlbmQoewotICAgICAgICByZXNvbHZlVGVtcGxhdGU6IGZ1bmN0aW9uKHBhcnNlZE5hbWUpIHsK
LSAgICAgICAgICB2YXIgcmVzb2x2ZWRUZW1wbGF0ZSA9IHRoaXMuX3N1cGVyKHBhcnNlZE5hbWUp
OwotICAgICAgICAgIGlmIChyZXNvbHZlZFRlbXBsYXRlKSB7IHJldHVybiByZXNvbHZlZFRlbXBs
YXRlOyB9Ci0gICAgICAgICAgcmV0dXJuIEVtYmVyLlRFTVBMQVRFU1snbm90X2ZvdW5kJ107Ci0g
ICAgICAgIH0KLSAgICAgIH0pCi0gICAgfSk7Ci0gICAgYGBgCi0gIAotICAgIFNvbWUgZXhhbXBs
ZXMgb2YgaG93IG5hbWVzIGFyZSByZXNvbHZlZDoKLSAgCi0gICAgYGBgCi0gICAgJ3RlbXBsYXRl
OnBvc3QnICAgICAgICAgICAvLz0+IEVtYmVyLlRFTVBMQVRFU1sncG9zdCddCi0gICAgJ3RlbXBs
YXRlOnBvc3RzL2J5bGluZScgICAvLz0+IEVtYmVyLlRFTVBMQVRFU1sncG9zdHMvYnlsaW5lJ10K
LSAgICAndGVtcGxhdGU6cG9zdHMuYnlsaW5lJyAgIC8vPT4gRW1iZXIuVEVNUExBVEVTWydwb3N0
cy9ieWxpbmUnXQotICAgICd0ZW1wbGF0ZTpibG9nUG9zdCcgICAgICAgLy89PiBFbWJlci5URU1Q
TEFURVNbJ2Jsb2dQb3N0J10KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgT1IK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgRW1iZXIuVEVNUExBVEVTWydibG9n
X3Bvc3QnXQotICAgICdjb250cm9sbGVyOnBvc3QnICAgICAgICAgLy89PiBBcHAuUG9zdENvbnRy
b2xsZXIKLSAgICAnY29udHJvbGxlcjpwb3N0cy5pbmRleCcgIC8vPT4gQXBwLlBvc3RzSW5kZXhD
b250cm9sbGVyCi0gICAgJ2NvbnRyb2xsZXI6YmxvZy9wb3N0JyAgICAvLz0+IEJsb2cuUG9zdENv
bnRyb2xsZXIKLSAgICAnY29udHJvbGxlcjpiYXNpYycgICAgICAgIC8vPT4gRW1iZXIuQ29udHJv
bGxlcgotICAgICdyb3V0ZTpwb3N0JyAgICAgICAgICAgICAgLy89PiBBcHAuUG9zdFJvdXRlCi0g
ICAgJ3JvdXRlOnBvc3RzLmluZGV4JyAgICAgICAvLz0+IEFwcC5Qb3N0c0luZGV4Um91dGUKLSAg
ICAncm91dGU6YmxvZy9wb3N0JyAgICAgICAgIC8vPT4gQmxvZy5Qb3N0Um91dGUKLSAgICAncm91
dGU6YmFzaWMnICAgICAgICAgICAgIC8vPT4gRW1iZXIuUm91dGUKLSAgICAndmlldzpwb3N0JyAg
ICAgICAgICAgICAgIC8vPT4gQXBwLlBvc3RWaWV3Ci0gICAgJ3ZpZXc6cG9zdHMuaW5kZXgnICAg
ICAgICAvLz0+IEFwcC5Qb3N0c0luZGV4VmlldwotICAgICd2aWV3OmJsb2cvcG9zdCcgICAgICAg
ICAgLy89PiBCbG9nLlBvc3RWaWV3Ci0gICAgJ3ZpZXc6YmFzaWMnICAgICAgICAgICAgICAvLz0+
IEVtYmVyLlZpZXcKLSAgICAnZm9vOnBvc3QnICAgICAgICAgICAgICAgIC8vPT4gQXBwLlBvc3RG
b28KLSAgICAnbW9kZWw6cG9zdCcgICAgICAgICAgICAgIC8vPT4gQXBwLlBvc3QKLSAgICBgYGAK
LSAgCi0gICAgQGNsYXNzIERlZmF1bHRSZXNvbHZlcgotICAgIEBuYW1lc3BhY2UgRW1iZXIKLSAg
ICBAZXh0ZW5kcyBFbWJlci5PYmplY3QKLSAgICBAcHVibGljCi0gICovCi0KLSAgZXhwb3J0cy5k
ZWZhdWx0ID0gX2VtYmVyUnVudGltZVN5c3RlbU9iamVjdC5kZWZhdWx0LmV4dGVuZCh7Ci0gICAg
LyoqCi0gICAgICBUaGlzIHdpbGwgYmUgc2V0IHRvIHRoZSBBcHBsaWNhdGlvbiBpbnN0YW5jZSB3
aGVuIGl0IGlzCi0gICAgICBjcmVhdGVkLgotICAgICAgIEBwcm9wZXJ0eSBuYW1lc3BhY2UKLSAg
ICAgIEBwdWJsaWMKLSAgICAqLwotICAgIG5hbWVzcGFjZTogbnVsbCwKLQotICAgIGluaXQ6IGZ1
bmN0aW9uICgpIHsKLSAgICAgIHRoaXMuX3BhcnNlTmFtZUNhY2hlID0gX2VtYmVyTWV0YWxEaWN0
aW9uYXJ5LmRlZmF1bHQobnVsbCk7Ci0gICAgfSwKLSAgICBub3JtYWxpemU6IGZ1bmN0aW9uIChm
dWxsTmFtZSkgewotICAgICAgdmFyIF9mdWxsTmFtZSRzcGxpdCA9IGZ1bGxOYW1lLnNwbGl0KCc6
JywgMik7Ci0KLSAgICAgIHZhciB0eXBlID0gX2Z1bGxOYW1lJHNwbGl0WzBdOwotICAgICAgdmFy
IG5hbWUgPSBfZnVsbE5hbWUkc3BsaXRbMV07Ci0KLSAgICAgIF9lbWJlck1ldGFsRGVidWcuYXNz
ZXJ0KCdUcmllZCB0byBub3JtYWxpemUgYSBjb250YWluZXIgbmFtZSB3aXRob3V0IGEgY29sb24g
KDopIGluIGl0LiAnICsgJ1lvdSBwcm9iYWJseSB0cmllZCB0byBsb29rdXAgYSBuYW1lIHRoYXQg
ZGlkIG5vdCBjb250YWluIGEgdHlwZSwgJyArICdhIGNvbG9uLCBhbmQgYSBuYW1lLiBBIHByb3Bl
ciBsb29rdXAgbmFtZSB3b3VsZCBiZSBgdmlldzpwb3N0YC4nLCBmdWxsTmFtZS5zcGxpdCgnOicp
Lmxlbmd0aCA9PT0gMik7Ci0KLSAgICAgIGlmICh0eXBlICE9PSAndGVtcGxhdGUnKSB7Ci0gICAg
ICAgIHZhciByZXN1bHQgPSBuYW1lOwotCi0gICAgICAgIGlmIChyZXN1bHQuaW5kZXhPZignLicp
ID4gLTEpIHsKLSAgICAgICAgICByZXN1bHQgPSByZXN1bHQucmVwbGFjZSgvXC4oLikvZywgZnVu
Y3Rpb24gKG0pIHsKLSAgICAgICAgICAgIHJldHVybiBtLmNoYXJBdCgxKS50b1VwcGVyQ2FzZSgp
OwotICAgICAgICAgIH0pOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG5hbWUuaW5kZXhPZign
XycpID4gLTEpIHsKLSAgICAgICAgICByZXN1bHQgPSByZXN1bHQucmVwbGFjZSgvXyguKS9nLCBm
dW5jdGlvbiAobSkgewotICAgICAgICAgICAgcmV0dXJuIG0uY2hhckF0KDEpLnRvVXBwZXJDYXNl
KCk7Ci0gICAgICAgICAgfSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobmFtZS5pbmRleE9m
KCctJykgPiAtMSkgewotICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKC8tKC4pL2cs
IGZ1bmN0aW9uIChtKSB7Ci0gICAgICAgICAgICByZXR1cm4gbS5jaGFyQXQoMSkudG9VcHBlckNh
c2UoKTsKLSAgICAgICAgICB9KTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiB0eXBlICsg
JzonICsgcmVzdWx0OwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJuIGZ1bGxOYW1lOwot
ICAgICAgfQotICAgIH0sCi0KLSAgICAvKioKLSAgICAgIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB2
aWEgdGhlIGNvbnRhaW5lcidzIHJlc29sdmVyIG1ldGhvZC4KLSAgICAgIEl0IHBhcnNlcyB0aGUg
cHJvdmlkZWQgYGZ1bGxOYW1lYCBhbmQgdGhlbiBsb29rcyB1cCBhbmQKLSAgICAgIHJldHVybnMg
dGhlIGFwcHJvcHJpYXRlIHRlbXBsYXRlIG9yIGNsYXNzLgotICAgICAgIEBtZXRob2QgcmVzb2x2
ZQotICAgICAgQHBhcmFtIHtTdHJpbmd9IGZ1bGxOYW1lIHRoZSBsb29rdXAgc3RyaW5nCi0gICAg
ICBAcmV0dXJuIHtPYmplY3R9IHRoZSByZXNvbHZlZCBmYWN0b3J5Ci0gICAgICBAcHVibGljCi0g
ICAgKi8KLSAgICByZXNvbHZlOiBmdW5jdGlvbiAoZnVsbE5hbWUpIHsKLSAgICAgIHZhciBwYXJz
ZWROYW1lID0gdGhpcy5wYXJzZU5hbWUoZnVsbE5hbWUpOwotICAgICAgdmFyIHJlc29sdmVNZXRo
b2ROYW1lID0gcGFyc2VkTmFtZS5yZXNvbHZlTWV0aG9kTmFtZTsKLSAgICAgIHZhciByZXNvbHZl
ZDsKLQotICAgICAgaWYgKHRoaXNbcmVzb2x2ZU1ldGhvZE5hbWVdKSB7Ci0gICAgICAgIHJlc29s
dmVkID0gdGhpc1tyZXNvbHZlTWV0aG9kTmFtZV0ocGFyc2VkTmFtZSk7Ci0gICAgICB9Ci0KLSAg
ICAgIHJlc29sdmVkID0gcmVzb2x2ZWQgfHwgdGhpcy5yZXNvbHZlT3RoZXIocGFyc2VkTmFtZSk7
Ci0KLSAgICAgIGlmIChwYXJzZWROYW1lLnJvb3QgJiYgcGFyc2VkTmFtZS5yb290LkxPR19SRVNP
TFZFUikgewotICAgICAgICB0aGlzLl9sb2dMb29rdXAocmVzb2x2ZWQsIHBhcnNlZE5hbWUpOwot
ICAgICAgfQotCi0gICAgICBpZiAocmVzb2x2ZWQpIHsKLSAgICAgICAgX2VtYmVyQXBwbGljYXRp
b25VdGlsc1ZhbGlkYXRlVHlwZS5kZWZhdWx0KHJlc29sdmVkLCBwYXJzZWROYW1lKTsKLSAgICAg
IH0KLQotICAgICAgcmV0dXJuIHJlc29sdmVkOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgIENv
bnZlcnQgdGhlIHN0cmluZyBuYW1lIG9mIHRoZSBmb3JtICd0eXBlOm5hbWUnIHRvCi0gICAgICBh
IEphdmFzY3JpcHQgb2JqZWN0IHdpdGggdGhlIHBhcnNlZCBhc3BlY3RzIG9mIHRoZSBuYW1lCi0g
ICAgICBicm9rZW4gb3V0LgotICAgICAgIEBwcm90ZWN0ZWQKLSAgICAgIEBwYXJhbSB7U3RyaW5n
fSBmdWxsTmFtZSB0aGUgbG9va3VwIHN0cmluZwotICAgICAgQG1ldGhvZCBwYXJzZU5hbWUKLSAg
ICAgIEBwdWJsaWMKLSAgICAqLwotCi0gICAgcGFyc2VOYW1lOiBmdW5jdGlvbiAoZnVsbE5hbWUp
IHsKLSAgICAgIHJldHVybiB0aGlzLl9wYXJzZU5hbWVDYWNoZVtmdWxsTmFtZV0gfHwgKHRoaXMu
X3BhcnNlTmFtZUNhY2hlW2Z1bGxOYW1lXSA9IHRoaXMuX3BhcnNlTmFtZShmdWxsTmFtZSkpOwot
ICAgIH0sCi0KLSAgICBfcGFyc2VOYW1lOiBmdW5jdGlvbiAoZnVsbE5hbWUpIHsKLSAgICAgIHZh
ciBfZnVsbE5hbWUkc3BsaXQyID0gZnVsbE5hbWUuc3BsaXQoJzonKTsKLQotICAgICAgdmFyIHR5
cGUgPSBfZnVsbE5hbWUkc3BsaXQyWzBdOwotICAgICAgdmFyIGZ1bGxOYW1lV2l0aG91dFR5cGUg
PSBfZnVsbE5hbWUkc3BsaXQyWzFdOwotCi0gICAgICB2YXIgbmFtZSA9IGZ1bGxOYW1lV2l0aG91
dFR5cGU7Ci0gICAgICB2YXIgbmFtZXNwYWNlID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0
KHRoaXMsICduYW1lc3BhY2UnKTsKLSAgICAgIHZhciByb290ID0gbmFtZXNwYWNlOwotICAgICAg
dmFyIGxhc3RTbGFzaEluZGV4ID0gbmFtZS5sYXN0SW5kZXhPZignLycpOwotICAgICAgdmFyIGRp
cm5hbWUgPSBsYXN0U2xhc2hJbmRleCAhPT0gLTEgPyBuYW1lLnNsaWNlKDAsIGxhc3RTbGFzaElu
ZGV4KSA6IG51bGw7Ci0KLSAgICAgIGlmICh0eXBlICE9PSAndGVtcGxhdGUnICYmIGxhc3RTbGFz
aEluZGV4ICE9PSAtMSkgewotICAgICAgICB2YXIgcGFydHMgPSBuYW1lLnNwbGl0KCcvJyk7Ci0g
ICAgICAgIG5hbWUgPSBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXTsKLSAgICAgICAgdmFyIG5hbWVz
cGFjZU5hbWUgPSBfZW1iZXJSdW50aW1lU3lzdGVtU3RyaW5nLmNhcGl0YWxpemUocGFydHMuc2xp
Y2UoMCwgLTEpLmpvaW4oJy4nKSk7Ci0gICAgICAgIHJvb3QgPSBfZW1iZXJSdW50aW1lU3lzdGVt
TmFtZXNwYWNlLmRlZmF1bHQuYnlOYW1lKG5hbWVzcGFjZU5hbWUpOwotCi0gICAgICAgIF9lbWJl
ck1ldGFsRGVidWcuYXNzZXJ0KCdZb3UgYXJlIGxvb2tpbmcgZm9yIGEgJyArIG5hbWUgKyAnICcg
KyB0eXBlICsgJyBpbiB0aGUgJyArIG5hbWVzcGFjZU5hbWUgKyAnIG5hbWVzcGFjZSwgYnV0IHRo
ZSBuYW1lc3BhY2UgY291bGQgbm90IGJlIGZvdW5kJywgcm9vdCk7Ci0gICAgICB9Ci0KLSAgICAg
IHZhciByZXNvbHZlTWV0aG9kTmFtZSA9IGZ1bGxOYW1lV2l0aG91dFR5cGUgPT09ICdtYWluJyA/
ICdNYWluJyA6IF9lbWJlclJ1bnRpbWVTeXN0ZW1TdHJpbmcuY2xhc3NpZnkodHlwZSk7Ci0KLSAg
ICAgIGlmICghKG5hbWUgJiYgdHlwZSkpIHsKLSAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcign
SW52YWxpZCBmdWxsTmFtZTogYCcgKyBmdWxsTmFtZSArICdgLCBtdXN0IGJlIG9mIHRoZSBmb3Jt
IGB0eXBlOm5hbWVgICcpOwotICAgICAgfQotCi0gICAgICByZXR1cm4gewotICAgICAgICBmdWxs
TmFtZTogZnVsbE5hbWUsCi0gICAgICAgIHR5cGU6IHR5cGUsCi0gICAgICAgIGZ1bGxOYW1lV2l0
aG91dFR5cGU6IGZ1bGxOYW1lV2l0aG91dFR5cGUsCi0gICAgICAgIGRpcm5hbWU6IGRpcm5hbWUs
Ci0gICAgICAgIG5hbWU6IG5hbWUsCi0gICAgICAgIHJvb3Q6IHJvb3QsCi0gICAgICAgIHJlc29s
dmVNZXRob2ROYW1lOiAncmVzb2x2ZScgKyByZXNvbHZlTWV0aG9kTmFtZQotICAgICAgfTsKLSAg
ICB9LAotCi0gICAgLyoqCi0gICAgICBSZXR1cm5zIGEgaHVtYW4tcmVhZGFibGUgZGVzY3JpcHRp
b24gZm9yIGEgZnVsbE5hbWUuIFVzZWQgYnkgdGhlCi0gICAgICBBcHBsaWNhdGlvbiBuYW1lc3Bh
Y2UgaW4gYXNzZXJ0aW9ucyB0byBkZXNjcmliZSB0aGUKLSAgICAgIHByZWNpc2UgbmFtZSBvZiB0
aGUgY2xhc3MgdGhhdCBFbWJlciBpcyBsb29raW5nIGZvciwgcmF0aGVyIHRoYW4KLSAgICAgIGNv
bnRhaW5lciBrZXlzLgotICAgICAgIEBwcm90ZWN0ZWQKLSAgICAgIEBwYXJhbSB7U3RyaW5nfSBm
dWxsTmFtZSB0aGUgbG9va3VwIHN0cmluZwotICAgICAgQG1ldGhvZCBsb29rdXBEZXNjcmlwdGlv
bgotICAgICAgQHB1YmxpYwotICAgICovCi0gICAgbG9va3VwRGVzY3JpcHRpb246IGZ1bmN0aW9u
IChmdWxsTmFtZSkgewotICAgICAgdmFyIHBhcnNlZE5hbWUgPSB0aGlzLnBhcnNlTmFtZShmdWxs
TmFtZSk7Ci0gICAgICB2YXIgZGVzY3JpcHRpb247Ci0KLSAgICAgIGlmIChwYXJzZWROYW1lLnR5
cGUgPT09ICd0ZW1wbGF0ZScpIHsKLSAgICAgICAgcmV0dXJuICd0ZW1wbGF0ZSBhdCAnICsgcGFy
c2VkTmFtZS5mdWxsTmFtZVdpdGhvdXRUeXBlLnJlcGxhY2UoL1wuL2csICcvJyk7Ci0gICAgICB9
Ci0KLSAgICAgIGRlc2NyaXB0aW9uID0gcGFyc2VkTmFtZS5yb290ICsgJy4nICsgX2VtYmVyUnVu
dGltZVN5c3RlbVN0cmluZy5jbGFzc2lmeShwYXJzZWROYW1lLm5hbWUpLnJlcGxhY2UoL1wuL2cs
ICcnKTsKLQotICAgICAgaWYgKHBhcnNlZE5hbWUudHlwZSAhPT0gJ21vZGVsJykgewotICAgICAg
ICBkZXNjcmlwdGlvbiArPSBfZW1iZXJSdW50aW1lU3lzdGVtU3RyaW5nLmNsYXNzaWZ5KHBhcnNl
ZE5hbWUudHlwZSk7Ci0gICAgICB9Ci0KLSAgICAgIHJldHVybiBkZXNjcmlwdGlvbjsKLSAgICB9
LAotCi0gICAgbWFrZVRvU3RyaW5nOiBmdW5jdGlvbiAoZmFjdG9yeSwgZnVsbE5hbWUpIHsKLSAg
ICAgIHJldHVybiBmYWN0b3J5LnRvU3RyaW5nKCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAg
R2l2ZW4gYSBwYXJzZU5hbWUgb2JqZWN0IChvdXRwdXQgZnJvbSBgcGFyc2VOYW1lYCksIGFwcGx5
Ci0gICAgICB0aGUgY29udmVudGlvbnMgZXhwZWN0ZWQgYnkgYEVtYmVyLlJvdXRlcmAKLSAgICAg
ICBAcHJvdGVjdGVkCi0gICAgICBAcGFyYW0ge09iamVjdH0gcGFyc2VkTmFtZSBhIHBhcnNlTmFt
ZSBvYmplY3Qgd2l0aCB0aGUgcGFyc2VkCi0gICAgICAgIGZ1bGxOYW1lIGxvb2t1cCBzdHJpbmcK
LSAgICAgIEBtZXRob2QgdXNlUm91dGVyTmFtaW5nCi0gICAgICBAcHVibGljCi0gICAgKi8KLSAg
ICB1c2VSb3V0ZXJOYW1pbmc6IGZ1bmN0aW9uIChwYXJzZWROYW1lKSB7Ci0gICAgICBwYXJzZWRO
YW1lLm5hbWUgPSBwYXJzZWROYW1lLm5hbWUucmVwbGFjZSgvXC4vZywgJ18nKTsKLSAgICAgIGlm
IChwYXJzZWROYW1lLm5hbWUgPT09ICdiYXNpYycpIHsKLSAgICAgICAgcGFyc2VkTmFtZS5uYW1l
ID0gJyc7Ci0gICAgICB9Ci0gICAgfSwKLSAgICAvKioKLSAgICAgIExvb2sgdXAgdGhlIHRlbXBs
YXRlIGluIEVtYmVyLlRFTVBMQVRFUwotICAgICAgIEBwcm90ZWN0ZWQKLSAgICAgIEBwYXJhbSB7
T2JqZWN0fSBwYXJzZWROYW1lIGEgcGFyc2VOYW1lIG9iamVjdCB3aXRoIHRoZSBwYXJzZWQKLSAg
ICAgICAgZnVsbE5hbWUgbG9va3VwIHN0cmluZwotICAgICAgQG1ldGhvZCByZXNvbHZlVGVtcGxh
dGUKLSAgICAgIEBwdWJsaWMKLSAgICAqLwotICAgIHJlc29sdmVUZW1wbGF0ZTogZnVuY3Rpb24g
KHBhcnNlZE5hbWUpIHsKLSAgICAgIHZhciB0ZW1wbGF0ZU5hbWUgPSBwYXJzZWROYW1lLmZ1bGxO
YW1lV2l0aG91dFR5cGUucmVwbGFjZSgvXC4vZywgJy8nKTsKLQotICAgICAgcmV0dXJuIF9lbWJl
ckh0bWxiYXJzVGVtcGxhdGVfcmVnaXN0cnkuZ2V0KHRlbXBsYXRlTmFtZSkgfHwgX2VtYmVySHRt
bGJhcnNUZW1wbGF0ZV9yZWdpc3RyeS5nZXQoX2VtYmVyUnVudGltZVN5c3RlbVN0cmluZy5kZWNh
bWVsaXplKHRlbXBsYXRlTmFtZSkpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgIExvb2t1cCB0
aGUgdmlldyB1c2luZyBgcmVzb2x2ZU90aGVyYAotICAgICAgIEBwcm90ZWN0ZWQKLSAgICAgIEBw
YXJhbSB7T2JqZWN0fSBwYXJzZWROYW1lIGEgcGFyc2VOYW1lIG9iamVjdCB3aXRoIHRoZSBwYXJz
ZWQKLSAgICAgICAgZnVsbE5hbWUgbG9va3VwIHN0cmluZwotICAgICAgQG1ldGhvZCByZXNvbHZl
VmlldwotICAgICAgQHB1YmxpYwotICAgICovCi0gICAgcmVzb2x2ZVZpZXc6IGZ1bmN0aW9uIChw
YXJzZWROYW1lKSB7Ci0gICAgICB0aGlzLnVzZVJvdXRlck5hbWluZyhwYXJzZWROYW1lKTsKLSAg
ICAgIHJldHVybiB0aGlzLnJlc29sdmVPdGhlcihwYXJzZWROYW1lKTsKLSAgICB9LAotCi0gICAg
LyoqCi0gICAgICBMb29rdXAgdGhlIGNvbnRyb2xsZXIgdXNpbmcgYHJlc29sdmVPdGhlcmAKLSAg
ICAgICBAcHJvdGVjdGVkCi0gICAgICBAcGFyYW0ge09iamVjdH0gcGFyc2VkTmFtZSBhIHBhcnNl
TmFtZSBvYmplY3Qgd2l0aCB0aGUgcGFyc2VkCi0gICAgICAgIGZ1bGxOYW1lIGxvb2t1cCBzdHJp
bmcKLSAgICAgIEBtZXRob2QgcmVzb2x2ZUNvbnRyb2xsZXIKLSAgICAgIEBwdWJsaWMKLSAgICAq
LwotICAgIHJlc29sdmVDb250cm9sbGVyOiBmdW5jdGlvbiAocGFyc2VkTmFtZSkgewotICAgICAg
dGhpcy51c2VSb3V0ZXJOYW1pbmcocGFyc2VkTmFtZSk7Ci0gICAgICByZXR1cm4gdGhpcy5yZXNv
bHZlT3RoZXIocGFyc2VkTmFtZSk7Ci0gICAgfSwKLSAgICAvKioKLSAgICAgIExvb2t1cCB0aGUg
cm91dGUgdXNpbmcgYHJlc29sdmVPdGhlcmAKLSAgICAgICBAcHJvdGVjdGVkCi0gICAgICBAcGFy
YW0ge09iamVjdH0gcGFyc2VkTmFtZSBhIHBhcnNlTmFtZSBvYmplY3Qgd2l0aCB0aGUgcGFyc2Vk
Ci0gICAgICAgIGZ1bGxOYW1lIGxvb2t1cCBzdHJpbmcKLSAgICAgIEBtZXRob2QgcmVzb2x2ZVJv
dXRlCi0gICAgICBAcHVibGljCi0gICAgKi8KLSAgICByZXNvbHZlUm91dGU6IGZ1bmN0aW9uIChw
YXJzZWROYW1lKSB7Ci0gICAgICB0aGlzLnVzZVJvdXRlck5hbWluZyhwYXJzZWROYW1lKTsKLSAg
ICAgIHJldHVybiB0aGlzLnJlc29sdmVPdGhlcihwYXJzZWROYW1lKTsKLSAgICB9LAotCi0gICAg
LyoqCi0gICAgICBMb29rdXAgdGhlIG1vZGVsIG9uIHRoZSBBcHBsaWNhdGlvbiBuYW1lc3BhY2UK
LSAgICAgICBAcHJvdGVjdGVkCi0gICAgICBAcGFyYW0ge09iamVjdH0gcGFyc2VkTmFtZSBhIHBh
cnNlTmFtZSBvYmplY3Qgd2l0aCB0aGUgcGFyc2VkCi0gICAgICAgIGZ1bGxOYW1lIGxvb2t1cCBz
dHJpbmcKLSAgICAgIEBtZXRob2QgcmVzb2x2ZU1vZGVsCi0gICAgICBAcHVibGljCi0gICAgKi8K
LSAgICByZXNvbHZlTW9kZWw6IGZ1bmN0aW9uIChwYXJzZWROYW1lKSB7Ci0gICAgICB2YXIgY2xh
c3NOYW1lID0gX2VtYmVyUnVudGltZVN5c3RlbVN0cmluZy5jbGFzc2lmeShwYXJzZWROYW1lLm5h
bWUpOwotICAgICAgdmFyIGZhY3RvcnkgPSBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQocGFy
c2VkTmFtZS5yb290LCBjbGFzc05hbWUpOwotCi0gICAgICBpZiAoZmFjdG9yeSkgewotICAgICAg
ICByZXR1cm4gZmFjdG9yeTsKLSAgICAgIH0KLSAgICB9LAotICAgIC8qKgotICAgICAgTG9vayB1
cCB0aGUgc3BlY2lmaWVkIG9iamVjdCAoZnJvbSBwYXJzZWROYW1lKSBvbiB0aGUgYXBwcm9wcmlh
dGUKLSAgICAgIG5hbWVzcGFjZSAodXN1YWxseSBvbiB0aGUgQXBwbGljYXRpb24pCi0gICAgICAg
QHByb3RlY3RlZAotICAgICAgQHBhcmFtIHtPYmplY3R9IHBhcnNlZE5hbWUgYSBwYXJzZU5hbWUg
b2JqZWN0IHdpdGggdGhlIHBhcnNlZAotICAgICAgICBmdWxsTmFtZSBsb29rdXAgc3RyaW5nCi0g
ICAgICBAbWV0aG9kIHJlc29sdmVIZWxwZXIKLSAgICAgIEBwdWJsaWMKLSAgICAqLwotICAgIHJl
c29sdmVIZWxwZXI6IGZ1bmN0aW9uIChwYXJzZWROYW1lKSB7Ci0gICAgICByZXR1cm4gdGhpcy5y
ZXNvbHZlT3RoZXIocGFyc2VkTmFtZSkgfHwgX2VtYmVySHRtbGJhcnNIZWxwZXJzLmRlZmF1bHRb
cGFyc2VkTmFtZS5mdWxsTmFtZVdpdGhvdXRUeXBlXTsKLSAgICB9LAotICAgIC8qKgotICAgICAg
TG9vayB1cCB0aGUgc3BlY2lmaWVkIG9iamVjdCAoZnJvbSBwYXJzZWROYW1lKSBvbiB0aGUgYXBw
cm9wcmlhdGUKLSAgICAgIG5hbWVzcGFjZSAodXN1YWxseSBvbiB0aGUgQXBwbGljYXRpb24pCi0g
ICAgICAgQHByb3RlY3RlZAotICAgICAgQHBhcmFtIHtPYmplY3R9IHBhcnNlZE5hbWUgYSBwYXJz
ZU5hbWUgb2JqZWN0IHdpdGggdGhlIHBhcnNlZAotICAgICAgICBmdWxsTmFtZSBsb29rdXAgc3Ry
aW5nCi0gICAgICBAbWV0aG9kIHJlc29sdmVPdGhlcgotICAgICAgQHB1YmxpYwotICAgICovCi0g
ICAgcmVzb2x2ZU90aGVyOiBmdW5jdGlvbiAocGFyc2VkTmFtZSkgewotICAgICAgdmFyIGNsYXNz
TmFtZSA9IF9lbWJlclJ1bnRpbWVTeXN0ZW1TdHJpbmcuY2xhc3NpZnkocGFyc2VkTmFtZS5uYW1l
KSArIF9lbWJlclJ1bnRpbWVTeXN0ZW1TdHJpbmcuY2xhc3NpZnkocGFyc2VkTmFtZS50eXBlKTsK
LSAgICAgIHZhciBmYWN0b3J5ID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHBhcnNlZE5h
bWUucm9vdCwgY2xhc3NOYW1lKTsKLSAgICAgIGlmIChmYWN0b3J5KSB7Ci0gICAgICAgIHJldHVy
biBmYWN0b3J5OwotICAgICAgfQotICAgIH0sCi0KLSAgICByZXNvbHZlTWFpbjogZnVuY3Rpb24g
KHBhcnNlZE5hbWUpIHsKLSAgICAgIHZhciBjbGFzc05hbWUgPSBfZW1iZXJSdW50aW1lU3lzdGVt
U3RyaW5nLmNsYXNzaWZ5KHBhcnNlZE5hbWUudHlwZSk7Ci0gICAgICByZXR1cm4gX2VtYmVyTWV0
YWxQcm9wZXJ0eV9nZXQuZ2V0KHBhcnNlZE5hbWUucm9vdCwgY2xhc3NOYW1lKTsKLSAgICB9LAot
Ci0gICAgLyoqCi0gICAgIEBtZXRob2QgX2xvZ0xvb2t1cAotICAgICBAcGFyYW0ge0Jvb2xlYW59
IGZvdW5kCi0gICAgIEBwYXJhbSB7T2JqZWN0fSBwYXJzZWROYW1lCi0gICAgIEBwcml2YXRlCi0g
ICAgKi8KLSAgICBfbG9nTG9va3VwOiBmdW5jdGlvbiAoZm91bmQsIHBhcnNlZE5hbWUpIHsKLSAg
ICAgIHZhciBzeW1ib2wsIHBhZGRpbmc7Ci0KLSAgICAgIGlmIChmb3VuZCkgewotICAgICAgICBz
eW1ib2wgPSAnW+Kck10nOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgc3ltYm9sID0gJ1sgXSc7
Ci0gICAgICB9Ci0KLSAgICAgIGlmIChwYXJzZWROYW1lLmZ1bGxOYW1lLmxlbmd0aCA+IDYwKSB7
Ci0gICAgICAgIHBhZGRpbmcgPSAnLic7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBwYWRkaW5n
ID0gbmV3IEFycmF5KDYwIC0gcGFyc2VkTmFtZS5mdWxsTmFtZS5sZW5ndGgpLmpvaW4oJy4nKTsK
LSAgICAgIH0KLQotICAgICAgX2VtYmVyTWV0YWxEZWJ1Zy5pbmZvKHN5bWJvbCwgcGFyc2VkTmFt
ZS5mdWxsTmFtZSwgcGFkZGluZywgdGhpcy5sb29rdXBEZXNjcmlwdGlvbihwYXJzZWROYW1lLmZ1
bGxOYW1lKSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICBVc2VkIHRvIGl0ZXJhdGUgYWxsIGl0
ZW1zIG9mIGEgZ2l2ZW4gdHlwZS4KLSAgICAgIEBtZXRob2Qga25vd25Gb3JUeXBlCi0gICAgIEBw
YXJhbSB7U3RyaW5nfSB0eXBlIHRoZSB0eXBlIHRvIHNlYXJjaCBmb3IKLSAgICAgQHByaXZhdGUK
LSAgICAgKi8KLSAgICBrbm93bkZvclR5cGU6IGZ1bmN0aW9uICh0eXBlKSB7Ci0gICAgICB2YXIg
bmFtZXNwYWNlID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsICduYW1lc3BhY2Un
KTsKLSAgICAgIHZhciBzdWZmaXggPSBfZW1iZXJSdW50aW1lU3lzdGVtU3RyaW5nLmNsYXNzaWZ5
KHR5cGUpOwotICAgICAgdmFyIHR5cGVSZWdleHAgPSBuZXcgUmVnRXhwKHN1ZmZpeCArICckJyk7
Ci0KLSAgICAgIHZhciBrbm93biA9IF9lbWJlck1ldGFsRGljdGlvbmFyeS5kZWZhdWx0KG51bGwp
OwotICAgICAgdmFyIGtub3duS2V5cyA9IE9iamVjdC5rZXlzKG5hbWVzcGFjZSk7Ci0gICAgICBm
b3IgKHZhciBpbmRleCA9IDAsIF9sZW5ndGggPSBrbm93bktleXMubGVuZ3RoOyBpbmRleCA8IF9s
ZW5ndGg7IGluZGV4KyspIHsKLSAgICAgICAgdmFyIF9uYW1lID0ga25vd25LZXlzW2luZGV4XTsK
LQotICAgICAgICBpZiAodHlwZVJlZ2V4cC50ZXN0KF9uYW1lKSkgewotICAgICAgICAgIHZhciBj
b250YWluZXJOYW1lID0gdGhpcy50cmFuc2xhdGVUb0NvbnRhaW5lckZ1bGxuYW1lKHR5cGUsIF9u
YW1lKTsKLQotICAgICAgICAgIGtub3duW2NvbnRhaW5lck5hbWVdID0gdHJ1ZTsKLSAgICAgICAg
fQotICAgICAgfQotCi0gICAgICByZXR1cm4ga25vd247Ci0gICAgfSwKLQotICAgIC8qKgotICAg
ICBDb252ZXJ0cyBwcm92aWRlZCBuYW1lIGZyb20gdGhlIGJhY2tpbmcgbmFtZXNwYWNlIGludG8g
YSBjb250YWluZXIgbG9va3VwIG5hbWUuCi0gICAgICBFeGFtcGxlczoKLSAgICAgIEFwcC5Gb29C
YXJIZWxwZXIgLT4gaGVscGVyOmZvby1iYXIKLSAgICAgQXBwLlRIZWxwZXIgLT4gaGVscGVyOnQK
LSAgICAgIEBtZXRob2QgdHJhbnNsYXRlVG9Db250YWluZXJGdWxsbmFtZQotICAgICBAcGFyYW0g
e1N0cmluZ30gdHlwZQotICAgICBAcGFyYW0ge1N0cmluZ30gbmFtZQotICAgICBAcHJpdmF0ZQot
ICAgICAqLwotCi0gICAgdHJhbnNsYXRlVG9Db250YWluZXJGdWxsbmFtZTogZnVuY3Rpb24gKHR5
cGUsIG5hbWUpIHsKLSAgICAgIHZhciBzdWZmaXggPSBfZW1iZXJSdW50aW1lU3lzdGVtU3RyaW5n
LmNsYXNzaWZ5KHR5cGUpOwotICAgICAgdmFyIG5hbWVQcmVmaXggPSBuYW1lLnNsaWNlKDAsIHN1
ZmZpeC5sZW5ndGggKiAtMSk7Ci0gICAgICB2YXIgZGFzaGVyaXplZE5hbWUgPSBfZW1iZXJSdW50
aW1lU3lzdGVtU3RyaW5nLmRhc2hlcml6ZShuYW1lUHJlZml4KTsKLQotICAgICAgcmV0dXJuIHR5
cGUgKyAnOicgKyBkYXNoZXJpemVkTmFtZTsKLSAgICB9Ci0gIH0pOwotfSk7Ci1lbmlmZWQoJ2Vt
YmVyLWFwcGxpY2F0aW9uL3V0aWxzL3ZhbGlkYXRlLXR5cGUnLCBbJ2V4cG9ydHMnLCAnZW1iZXIt
bWV0YWwvZGVidWcnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1ldGFsRGVidWcpIHsKLSAg
LyoqCi0gIEBtb2R1bGUgZW1iZXIKLSAgQHN1Ym1vZHVsZSBlbWJlci1hcHBsaWNhdGlvbgotICAq
LwotCi0gICd1c2Ugc3RyaWN0JzsKLQotICBleHBvcnRzLmRlZmF1bHQgPSB2YWxpZGF0ZVR5cGU7
Ci0KLSAgdmFyIFZBTElEQVRFRF9UWVBFUyA9IHsKLSAgICByb3V0ZTogWydhc3NlcnQnLCAnaXNS
b3V0ZUZhY3RvcnknLCAnRW1iZXIuUm91dGUnXSwKLSAgICBjb21wb25lbnQ6IFsnZGVwcmVjYXRl
JywgJ2lzQ29tcG9uZW50RmFjdG9yeScsICdFbWJlci5Db21wb25lbnQnXSwKLSAgICB2aWV3OiBb
J2RlcHJlY2F0ZScsICdpc1ZpZXdGYWN0b3J5JywgJ0VtYmVyLlZpZXcnXSwKLSAgICBzZXJ2aWNl
OiBbJ2RlcHJlY2F0ZScsICdpc1NlcnZpY2VGYWN0b3J5JywgJ0VtYmVyLlNlcnZpY2UnXQotICB9
OwotCi0gIGZ1bmN0aW9uIHZhbGlkYXRlVHlwZShyZXNvbHZlZFR5cGUsIHBhcnNlZE5hbWUpIHsK
LSAgICB2YXIgdmFsaWRhdGlvbkF0dHJpYnV0ZXMgPSBWQUxJREFURURfVFlQRVNbcGFyc2VkTmFt
ZS50eXBlXTsKLQotICAgIGlmICghdmFsaWRhdGlvbkF0dHJpYnV0ZXMpIHsKLSAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICB2YXIgYWN0aW9uID0gdmFsaWRhdGlvbkF0dHJpYnV0ZXNbMF07Ci0g
ICAgdmFyIGZhY3RvcnlGbGFnID0gdmFsaWRhdGlvbkF0dHJpYnV0ZXNbMV07Ci0gICAgdmFyIGV4
cGVjdGVkVHlwZSA9IHZhbGlkYXRpb25BdHRyaWJ1dGVzWzJdOwotCi0gICAgaWYgKGFjdGlvbiA9
PT0gJ2RlcHJlY2F0ZScpIHsKLSAgICAgIF9lbWJlck1ldGFsRGVidWcuZGVwcmVjYXRlKCdJbiBF
bWJlciAyLjAgJyArIHBhcnNlZE5hbWUudHlwZSArICcgZmFjdG9yaWVzIG11c3QgaGF2ZSBhbiBg
JyArIGZhY3RvcnlGbGFnICsgJ2AgJyArICgncHJvcGVydHkgc2V0IHRvIHRydWUuIFlvdSByZWdp
c3RlcmVkICcgKyByZXNvbHZlZFR5cGUgKyAnIGFzIGEgJyArIHBhcnNlZE5hbWUudHlwZSArICcg
JykgKyAoJ2ZhY3RvcnkuIEVpdGhlciBhZGQgdGhlIGAnICsgZmFjdG9yeUZsYWcgKyAnYCBwcm9w
ZXJ0eSB0byB0aGlzIGZhY3Rvcnkgb3IgJykgKyAoJ2V4dGVuZCBmcm9tICcgKyBleHBlY3RlZFR5
cGUgKyAnLicpLCAhIXJlc29sdmVkVHlwZVtmYWN0b3J5RmxhZ10sIHsgaWQ6ICdlbWJlci1hcHBs
aWNhdGlvbi52YWxpZGF0ZS10eXBlJywgdW50aWw6ICczLjAuMCcgfSk7Ci0gICAgfSBlbHNlIHsK
LSAgICAgIF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0KCdFeHBlY3RlZCAnICsgcGFyc2VkTmFtZS5m
dWxsTmFtZSArICcgdG8gcmVzb2x2ZSB0byBhbiAnICsgZXhwZWN0ZWRUeXBlICsgJyBidXQgJyAr
ICgnaW5zdGVhZCBpdCB3YXMgJyArIHJlc29sdmVkVHlwZSArICcuJyksICEhcmVzb2x2ZWRUeXBl
W2ZhY3RvcnlGbGFnXSk7Ci0gICAgfQotICB9Ci19KTsKLWVuaWZlZCgnZW1iZXItZGVidWcvZGVw
cmVjYXRlJywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFsL2NvcmUnLCAnZW1iZXItbWV0YWwvZXJy
b3InLCAnZW1iZXItbWV0YWwvbG9nZ2VyJywgJ2VtYmVyLWRlYnVnL2hhbmRsZXJzJ10sIGZ1bmN0
aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbENvcmUsIF9lbWJlck1ldGFsRXJyb3IsIF9lbWJlck1l
dGFsTG9nZ2VyLCBfZW1iZXJEZWJ1Z0hhbmRsZXJzKSB7Ci0gIC8qZ2xvYmFsIF9fZmFpbF9fKi8K
LQotICAndXNlIHN0cmljdCc7Ci0KLSAgdmFyIF9zbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGlj
ZTsKLSAgZXhwb3J0cy5yZWdpc3RlckhhbmRsZXIgPSByZWdpc3RlckhhbmRsZXI7Ci0gIGV4cG9y
dHMuZGVmYXVsdCA9IGRlcHJlY2F0ZTsKLQotICBmdW5jdGlvbiByZWdpc3RlckhhbmRsZXIoaGFu
ZGxlcikgewotICAgIF9lbWJlckRlYnVnSGFuZGxlcnMucmVnaXN0ZXJIYW5kbGVyKCdkZXByZWNh
dGUnLCBoYW5kbGVyKTsKLSAgfQotCi0gIGZ1bmN0aW9uIGZvcm1hdE1lc3NhZ2UoX21lc3NhZ2Us
IG9wdGlvbnMpIHsKLSAgICB2YXIgbWVzc2FnZSA9IF9tZXNzYWdlOwotCi0gICAgaWYgKG9wdGlv
bnMgJiYgb3B0aW9ucy5pZCkgewotICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UgKyAoJyBbZGVwcmVj
YXRpb24gaWQ6ICcgKyBvcHRpb25zLmlkICsgJ10nKTsKLSAgICB9Ci0KLSAgICBpZiAob3B0aW9u
cyAmJiBvcHRpb25zLnVybCkgewotICAgICAgbWVzc2FnZSArPSAnIFNlZSAnICsgb3B0aW9ucy51
cmwgKyAnIGZvciBtb3JlIGRldGFpbHMuJzsKLSAgICB9Ci0KLSAgICByZXR1cm4gbWVzc2FnZTsK
LSAgfQotCi0gIHJlZ2lzdGVySGFuZGxlcihmdW5jdGlvbiBsb2dEZXByZWNhdGlvblRvQ29uc29s
ZShtZXNzYWdlLCBvcHRpb25zKSB7Ci0gICAgdmFyIHVwZGF0ZWRNZXNzYWdlID0gZm9ybWF0TWVz
c2FnZShtZXNzYWdlLCBvcHRpb25zKTsKLQotICAgIF9lbWJlck1ldGFsTG9nZ2VyLmRlZmF1bHQu
d2FybignREVQUkVDQVRJT046ICcgKyB1cGRhdGVkTWVzc2FnZSk7Ci0gIH0pOwotCi0gIHZhciBj
YXB0dXJlRXJyb3JGb3JTdGFjayA9IHVuZGVmaW5lZDsKLQotICBpZiAobmV3IEVycm9yKCkuc3Rh
Y2spIHsKLSAgICBjYXB0dXJlRXJyb3JGb3JTdGFjayA9IGZ1bmN0aW9uICgpIHsKLSAgICAgIHJl
dHVybiBuZXcgRXJyb3IoKTsKLSAgICB9OwotICB9IGVsc2UgewotICAgIGNhcHR1cmVFcnJvckZv
clN0YWNrID0gZnVuY3Rpb24gKCkgewotICAgICAgdHJ5IHsKLSAgICAgICAgX19mYWlsX18uZmFp
bCgpOwotICAgICAgfSBjYXRjaCAoZSkgewotICAgICAgICByZXR1cm4gZTsKLSAgICAgIH0KLSAg
ICB9OwotICB9Ci0KLSAgcmVnaXN0ZXJIYW5kbGVyKGZ1bmN0aW9uIGxvZ0RlcHJlY2F0aW9uU3Rh
Y2tUcmFjZShtZXNzYWdlLCBvcHRpb25zLCBuZXh0KSB7Ci0gICAgaWYgKF9lbWJlck1ldGFsQ29y
ZS5kZWZhdWx0LkxPR19TVEFDS1RSQUNFX09OX0RFUFJFQ0FUSU9OKSB7Ci0gICAgICB2YXIgc3Rh
Y2tTdHIgPSAnJzsKLSAgICAgIHZhciBlcnJvciA9IGNhcHR1cmVFcnJvckZvclN0YWNrKCk7Ci0g
ICAgICB2YXIgc3RhY2sgPSB1bmRlZmluZWQ7Ci0KLSAgICAgIGlmIChlcnJvci5zdGFjaykgewot
ICAgICAgICBpZiAoZXJyb3JbJ2FyZ3VtZW50cyddKSB7Ci0gICAgICAgICAgLy8gQ2hyb21lCi0g
ICAgICAgICAgc3RhY2sgPSBlcnJvci5zdGFjay5yZXBsYWNlKC9eXHMrYXRccysvZ20sICcnKS5y
ZXBsYWNlKC9eKFteXChdKz8pKFtcbiRdKS9nbSwgJ3thbm9ueW1vdXN9KCQxKSQyJykucmVwbGFj
ZSgvXk9iamVjdC48YW5vbnltb3VzPlxzKlwoKFteXCldKylcKS9nbSwgJ3thbm9ueW1vdXN9KCQx
KScpLnNwbGl0KCdcbicpOwotICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgLy8gRmlyZWZveAotICAgICAgICAgIHN0YWNrID0gZXJyb3Iuc3RhY2su
cmVwbGFjZSgvKD86XG5AOjApP1xzKyQvbSwgJycpLnJlcGxhY2UoL15cKC9nbSwgJ3thbm9ueW1v
dXN9KCcpLnNwbGl0KCdcbicpOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RhY2tTdHIgPSAnXG4g
ICAgJyArIHN0YWNrLnNsaWNlKDIpLmpvaW4oJ1xuICAgICcpOwotICAgICAgfQotCi0gICAgICB2
YXIgdXBkYXRlZE1lc3NhZ2UgPSBmb3JtYXRNZXNzYWdlKG1lc3NhZ2UsIG9wdGlvbnMpOwotCi0g
ICAgICBfZW1iZXJNZXRhbExvZ2dlci5kZWZhdWx0Lndhcm4oJ0RFUFJFQ0FUSU9OOiAnICsgdXBk
YXRlZE1lc3NhZ2UgKyBzdGFja1N0cik7Ci0gICAgfSBlbHNlIHsKLSAgICAgIG5leHQuYXBwbHko
dW5kZWZpbmVkLCBhcmd1bWVudHMpOwotICAgIH0KLSAgfSk7Ci0KLSAgcmVnaXN0ZXJIYW5kbGVy
KGZ1bmN0aW9uIHJhaXNlT25EZXByZWNhdGlvbihtZXNzYWdlLCBvcHRpb25zLCBuZXh0KSB7Ci0g
ICAgaWYgKF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0LkVOVi5SQUlTRV9PTl9ERVBSRUNBVElPTikg
ewotICAgICAgdmFyIHVwZGF0ZWRNZXNzYWdlID0gZm9ybWF0TWVzc2FnZShtZXNzYWdlKTsKLQot
ICAgICAgdGhyb3cgbmV3IF9lbWJlck1ldGFsRXJyb3IuZGVmYXVsdCh1cGRhdGVkTWVzc2FnZSk7
Ci0gICAgfSBlbHNlIHsKLSAgICAgIG5leHQuYXBwbHkodW5kZWZpbmVkLCBhcmd1bWVudHMpOwot
ICAgIH0KLSAgfSk7Ci0KLSAgdmFyIG1pc3NpbmdPcHRpb25zRGVwcmVjYXRpb24gPSAnV2hlbiBj
YWxsaW5nIGBFbWJlci5kZXByZWNhdGVgIHlvdSAnICsgJ211c3QgcHJvdmlkZSBhbiBgb3B0aW9u
c2AgaGFzaCBhcyB0aGUgdGhpcmQgcGFyYW1ldGVyLiAgJyArICdgb3B0aW9uc2Agc2hvdWxkIGlu
Y2x1ZGUgYGlkYCBhbmQgYHVudGlsYCBwcm9wZXJ0aWVzLic7Ci0gIGV4cG9ydHMubWlzc2luZ09w
dGlvbnNEZXByZWNhdGlvbiA9IG1pc3NpbmdPcHRpb25zRGVwcmVjYXRpb247Ci0gIHZhciBtaXNz
aW5nT3B0aW9uc0lkRGVwcmVjYXRpb24gPSAnV2hlbiBjYWxsaW5nIGBFbWJlci5kZXByZWNhdGVg
IHlvdSBtdXN0IHByb3ZpZGUgYGlkYCBpbiBvcHRpb25zLic7Ci0gIGV4cG9ydHMubWlzc2luZ09w
dGlvbnNJZERlcHJlY2F0aW9uID0gbWlzc2luZ09wdGlvbnNJZERlcHJlY2F0aW9uOwotICB2YXIg
bWlzc2luZ09wdGlvbnNVbnRpbERlcHJlY2F0aW9uID0gJ1doZW4gY2FsbGluZyBgRW1iZXIuZGVw
cmVjYXRlYCB5b3UgbXVzdCBwcm92aWRlIGB1bnRpbGAgaW4gb3B0aW9ucy4nOwotCi0gIGV4cG9y
dHMubWlzc2luZ09wdGlvbnNVbnRpbERlcHJlY2F0aW9uID0gbWlzc2luZ09wdGlvbnNVbnRpbERl
cHJlY2F0aW9uOwotICAvKioKLSAgQG1vZHVsZSBlbWJlcgotICBAc3VibW9kdWxlIGVtYmVyLWRl
YnVnCi0gICovCi0KLSAgLyoqCi0gICAgRGlzcGxheSBhIGRlcHJlY2F0aW9uIHdhcm5pbmcgd2l0
aCB0aGUgcHJvdmlkZWQgbWVzc2FnZSBhbmQgYSBzdGFjayB0cmFjZQotICAgIChDaHJvbWUgYW5k
IEZpcmVmb3ggb25seSkuCi0gIAotICAgICogSW4gYSBwcm9kdWN0aW9uIGJ1aWxkLCB0aGlzIG1l
dGhvZCBpcyBkZWZpbmVkIGFzIGFuIGVtcHR5IGZ1bmN0aW9uIChOT1ApLgotICAgIFVzZXMgb2Yg
dGhpcyBtZXRob2QgaW4gRW1iZXIgaXRzZWxmIGFyZSBzdHJpcHBlZCBmcm9tIHRoZSBlbWJlci5w
cm9kLmpzIGJ1aWxkLgotICAKLSAgICBAbWV0aG9kIGRlcHJlY2F0ZQotICAgIEBwYXJhbSB7U3Ry
aW5nfSBtZXNzYWdlIEEgZGVzY3JpcHRpb24gb2YgdGhlIGRlcHJlY2F0aW9uLgotICAgIEBwYXJh
bSB7Qm9vbGVhbn0gdGVzdCBBIGJvb2xlYW4uIElmIGZhbHN5LCB0aGUgZGVwcmVjYXRpb24KLSAg
ICAgIHdpbGwgYmUgZGlzcGxheWVkLgotICAgIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIEFuIG9i
amVjdCB0aGF0IGNhbiBiZSB1c2VkIHRvIHBhc3MKLSAgICAgIGluIGEgYHVybGAgdG8gdGhlIHRy
YW5zaXRpb24gZ3VpZGUgb24gdGhlIGVtYmVyanMuY29tIHdlYnNpdGUsIGFuZCBhIHVuaXF1ZQot
ICAgICAgYGlkYCBmb3IgdGhpcyBkZXByZWNhdGlvbi4gVGhlIGBpZGAgY2FuIGJlIHVzZWQgYnkg
RW1iZXIgZGVidWdnaW5nIHRvb2xzCi0gICAgICB0byBjaGFuZ2UgdGhlIGJlaGF2aW9yIChyYWlz
ZSwgbG9nIG9yIHNpbGVuY2UpIGZvciB0aGF0IHNwZWNpZmljIGRlcHJlY2F0aW9uLgotICAgICAg
VGhlIGBpZGAgc2hvdWxkIGJlIG5hbWVzcGFjZWQgYnkgZG90cywgZS5nLiAidmlldy5oZWxwZXIu
c2VsZWN0Ii4KLSAgICBAZm9yIEVtYmVyCi0gICAgQHB1YmxpYwotICAqLwotCi0gIGZ1bmN0aW9u
IGRlcHJlY2F0ZShtZXNzYWdlLCB0ZXN0LCBvcHRpb25zKSB7Ci0gICAgaWYgKCFvcHRpb25zIHx8
ICFvcHRpb25zLmlkICYmICFvcHRpb25zLnVudGlsKSB7Ci0gICAgICBkZXByZWNhdGUobWlzc2lu
Z09wdGlvbnNEZXByZWNhdGlvbiwgZmFsc2UsIHsKLSAgICAgICAgaWQ6ICdlbWJlci1kZWJ1Zy5k
ZXByZWNhdGUtb3B0aW9ucy1taXNzaW5nJywKLSAgICAgICAgdW50aWw6ICczLjAuMCcsCi0gICAg
ICAgIHVybDogJ2h0dHA6Ly9lbWJlcmpzLmNvbS9kZXByZWNhdGlvbnMvdjIueC8jdG9jX2VtYmVy
LWRlYnVnLWZ1bmN0aW9uLW9wdGlvbnMnCi0gICAgICB9KTsKLSAgICB9Ci0KLSAgICBpZiAob3B0
aW9ucyAmJiAhb3B0aW9ucy5pZCkgewotICAgICAgZGVwcmVjYXRlKG1pc3NpbmdPcHRpb25zSWRE
ZXByZWNhdGlvbiwgZmFsc2UsIHsKLSAgICAgICAgaWQ6ICdlbWJlci1kZWJ1Zy5kZXByZWNhdGUt
aWQtbWlzc2luZycsCi0gICAgICAgIHVudGlsOiAnMy4wLjAnLAotICAgICAgICB1cmw6ICdodHRw
Oi8vZW1iZXJqcy5jb20vZGVwcmVjYXRpb25zL3YyLngvI3RvY19lbWJlci1kZWJ1Zy1mdW5jdGlv
bi1vcHRpb25zJwotICAgICAgfSk7Ci0gICAgfQotCi0gICAgaWYgKG9wdGlvbnMgJiYgIW9wdGlv
bnMudW50aWwpIHsKLSAgICAgIGRlcHJlY2F0ZShtaXNzaW5nT3B0aW9uc1VudGlsRGVwcmVjYXRp
b24sIG9wdGlvbnMgJiYgb3B0aW9ucy51bnRpbCwgewotICAgICAgICBpZDogJ2VtYmVyLWRlYnVn
LmRlcHJlY2F0ZS11bnRpbC1taXNzaW5nJywKLSAgICAgICAgdW50aWw6ICczLjAuMCcsCi0gICAg
ICAgIHVybDogJ2h0dHA6Ly9lbWJlcmpzLmNvbS9kZXByZWNhdGlvbnMvdjIueC8jdG9jX2VtYmVy
LWRlYnVnLWZ1bmN0aW9uLW9wdGlvbnMnCi0gICAgICB9KTsKLSAgICB9Ci0KLSAgICBfZW1iZXJE
ZWJ1Z0hhbmRsZXJzLmludm9rZS5hcHBseSh1bmRlZmluZWQsIFsnZGVwcmVjYXRlJ10uY29uY2F0
KF9zbGljZS5jYWxsKGFyZ3VtZW50cykpKTsKLSAgfQotfSk7Ci1lbmlmZWQoImVtYmVyLWRlYnVn
L2hhbmRsZXJzIiwgWyJleHBvcnRzIl0sIGZ1bmN0aW9uIChleHBvcnRzKSB7Ci0gICJ1c2Ugc3Ry
aWN0IjsKLQotICBleHBvcnRzLnJlZ2lzdGVySGFuZGxlciA9IHJlZ2lzdGVySGFuZGxlcjsKLSAg
ZXhwb3J0cy5pbnZva2UgPSBpbnZva2U7Ci0gIHZhciBIQU5ETEVSUyA9IHt9OwotCi0gIGV4cG9y
dHMuSEFORExFUlMgPSBIQU5ETEVSUzsKLQotICBmdW5jdGlvbiByZWdpc3RlckhhbmRsZXIodHlw
ZSwgY2FsbGJhY2spIHsKLSAgICB2YXIgbmV4dEhhbmRsZXIgPSBIQU5ETEVSU1t0eXBlXSB8fCBm
dW5jdGlvbiAoKSB7fTsKLQotICAgIEhBTkRMRVJTW3R5cGVdID0gZnVuY3Rpb24gKG1lc3NhZ2Us
IG9wdGlvbnMpIHsKLSAgICAgIGNhbGxiYWNrKG1lc3NhZ2UsIG9wdGlvbnMsIG5leHRIYW5kbGVy
KTsKLSAgICB9OwotICB9Ci0KLSAgZnVuY3Rpb24gaW52b2tlKHR5cGUsIG1lc3NhZ2UsIHRlc3Qs
IG9wdGlvbnMpIHsKLSAgICBpZiAodGVzdCkgewotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IHZhciBoYW5kbGVyRm9yVHlwZSA9IEhBTkRMRVJTW3R5cGVdOwotCi0gICAgaWYgKCFoYW5kbGVy
Rm9yVHlwZSkgewotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChoYW5kbGVyRm9yVHlw
ZSkgewotICAgICAgaGFuZGxlckZvclR5cGUobWVzc2FnZSwgb3B0aW9ucyk7Ci0gICAgfQotICB9
Ci19KTsKLWVuaWZlZCgnZW1iZXItZGVidWcvaW5kZXgnLCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0
YWwvY29yZScsICdlbWJlci1tZXRhbC9kZWJ1ZycsICdlbWJlci1tZXRhbC9mZWF0dXJlcycsICdl
bWJlci1tZXRhbC9lcnJvcicsICdlbWJlci1tZXRhbC9sb2dnZXInLCAnZW1iZXItbWV0YWwvZW52
aXJvbm1lbnQnLCAnZW1iZXItZGVidWcvZGVwcmVjYXRlJywgJ2VtYmVyLWRlYnVnL3dhcm4nXSwg
ZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1ldGFsQ29yZSwgX2VtYmVyTWV0YWxEZWJ1ZywgX2Vt
YmVyTWV0YWxGZWF0dXJlcywgX2VtYmVyTWV0YWxFcnJvciwgX2VtYmVyTWV0YWxMb2dnZXIsIF9l
bWJlck1ldGFsRW52aXJvbm1lbnQsIF9lbWJlckRlYnVnRGVwcmVjYXRlLCBfZW1iZXJEZWJ1Z1dh
cm4pIHsKLSAgJ3VzZSBzdHJpY3QnOwotCi0gIGV4cG9ydHMuX3dhcm5JZlVzaW5nU3RyaXBwZWRG
ZWF0dXJlRmxhZ3MgPSBfd2FybklmVXNpbmdTdHJpcHBlZEZlYXR1cmVGbGFnczsKLQotICAvKioK
LSAgQG1vZHVsZSBlbWJlcgotICBAc3VibW9kdWxlIGVtYmVyLWRlYnVnCi0gICovCi0KLSAgLyoq
Ci0gIEBjbGFzcyBFbWJlcgotICBAcHVibGljCi0gICovCi0KLSAgLyoqCi0gICAgRGVmaW5lIGFu
IGFzc2VydGlvbiB0aGF0IHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIHRoZSBjb25kaXRpb24g
aXMgbm90IG1ldC4KLSAgCi0gICAgKiBJbiBhIHByb2R1Y3Rpb24gYnVpbGQsIHRoaXMgbWV0aG9k
IGlzIGRlZmluZWQgYXMgYW4gZW1wdHkgZnVuY3Rpb24gKE5PUCkuCi0gICAgVXNlcyBvZiB0aGlz
IG1ldGhvZCBpbiBFbWJlciBpdHNlbGYgYXJlIHN0cmlwcGVkIGZyb20gdGhlIGVtYmVyLnByb2Qu
anMgYnVpbGQuCi0gIAotICAgIGBgYGphdmFzY3JpcHQKLSAgICAvLyBUZXN0IGZvciB0cnV0aGlu
ZXNzCi0gICAgRW1iZXIuYXNzZXJ0KCdNdXN0IHBhc3MgYSB2YWxpZCBvYmplY3QnLCBvYmopOwot
ICAKLSAgICAvLyBGYWlsIHVuY29uZGl0aW9uYWxseQotICAgIEVtYmVyLmFzc2VydCgnVGhpcyBj
b2RlIHBhdGggc2hvdWxkIG5ldmVyIGJlIHJ1bicpOwotICAgIGBgYAotICAKLSAgICBAbWV0aG9k
IGFzc2VydAotICAgIEBwYXJhbSB7U3RyaW5nfSBkZXNjIEEgZGVzY3JpcHRpb24gb2YgdGhlIGFz
c2VydGlvbi4gVGhpcyB3aWxsIGJlY29tZQotICAgICAgdGhlIHRleHQgb2YgdGhlIEVycm9yIHRo
cm93biBpZiB0aGUgYXNzZXJ0aW9uIGZhaWxzLgotICAgIEBwYXJhbSB7Qm9vbGVhbn0gdGVzdCBN
dXN0IGJlIHRydXRoeSBmb3IgdGhlIGFzc2VydGlvbiB0byBwYXNzLiBJZgotICAgICAgZmFsc3ks
IGFuIGV4Y2VwdGlvbiB3aWxsIGJlIHRocm93bi4KLSAgICBAcHVibGljCi0gICovCi0gIF9lbWJl
ck1ldGFsRGVidWcuc2V0RGVidWdGdW5jdGlvbignYXNzZXJ0JywgZnVuY3Rpb24gYXNzZXJ0KGRl
c2MsIHRlc3QpIHsKLSAgICBpZiAoIXRlc3QpIHsKLSAgICAgIHRocm93IG5ldyBfZW1iZXJNZXRh
bEVycm9yLmRlZmF1bHQoJ0Fzc2VydGlvbiBGYWlsZWQ6ICcgKyBkZXNjKTsKLSAgICB9Ci0gIH0p
OwotCi0gIC8qKgotICAgIERpc3BsYXkgYSBkZWJ1ZyBub3RpY2UuCi0gIAotICAgICogSW4gYSBw
cm9kdWN0aW9uIGJ1aWxkLCB0aGlzIG1ldGhvZCBpcyBkZWZpbmVkIGFzIGFuIGVtcHR5IGZ1bmN0
aW9uIChOT1ApLgotICAgIFVzZXMgb2YgdGhpcyBtZXRob2QgaW4gRW1iZXIgaXRzZWxmIGFyZSBz
dHJpcHBlZCBmcm9tIHRoZSBlbWJlci5wcm9kLmpzIGJ1aWxkLgotICAKLSAgICBgYGBqYXZhc2Ny
aXB0Ci0gICAgRW1iZXIuZGVidWcoJ0lcJ20gYSBkZWJ1ZyBub3RpY2UhJyk7Ci0gICAgYGBgCi0g
IAotICAgIEBtZXRob2QgZGVidWcKLSAgICBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZSBBIGRlYnVn
IG1lc3NhZ2UgdG8gZGlzcGxheS4KLSAgICBAcHVibGljCi0gICovCi0gIF9lbWJlck1ldGFsRGVi
dWcuc2V0RGVidWdGdW5jdGlvbignZGVidWcnLCBmdW5jdGlvbiBkZWJ1ZyhtZXNzYWdlKSB7Ci0g
ICAgX2VtYmVyTWV0YWxMb2dnZXIuZGVmYXVsdC5kZWJ1ZygnREVCVUc6ICcgKyBtZXNzYWdlKTsK
LSAgfSk7Ci0KLSAgLyoqCi0gICAgRGlzcGxheSBhbiBpbmZvIG5vdGljZS4KLSAgCi0gICAgKiBJ
biBhIHByb2R1Y3Rpb24gYnVpbGQsIHRoaXMgbWV0aG9kIGlzIGRlZmluZWQgYXMgYW4gZW1wdHkg
ZnVuY3Rpb24gKE5PUCkuCi0gICAgVXNlcyBvZiB0aGlzIG1ldGhvZCBpbiBFbWJlciBpdHNlbGYg
YXJlIHN0cmlwcGVkIGZyb20gdGhlIGVtYmVyLnByb2QuanMgYnVpbGQuCi0gIAotICAgIEBtZXRo
b2QgaW5mbwotICAgIEBwcml2YXRlCi0gICovCi0gIF9lbWJlck1ldGFsRGVidWcuc2V0RGVidWdG
dW5jdGlvbignaW5mbycsIGZ1bmN0aW9uIGluZm8oKSB7Ci0gICAgX2VtYmVyTWV0YWxMb2dnZXIu
ZGVmYXVsdC5pbmZvLmFwcGx5KHVuZGVmaW5lZCwgYXJndW1lbnRzKTsKLSAgfSk7Ci0KLSAgLyoq
Ci0gICAgQWxpYXMgYW4gb2xkLCBkZXByZWNhdGVkIG1ldGhvZCB3aXRoIGl0cyBuZXcgY291bnRl
cnBhcnQuCi0gIAotICAgIERpc3BsYXkgYSBkZXByZWNhdGlvbiB3YXJuaW5nIHdpdGggdGhlIHBy
b3ZpZGVkIG1lc3NhZ2UgYW5kIGEgc3RhY2sgdHJhY2UKLSAgICAoQ2hyb21lIGFuZCBGaXJlZm94
IG9ubHkpIHdoZW4gdGhlIGFzc2lnbmVkIG1ldGhvZCBpcyBjYWxsZWQuCi0gIAotICAgICogSW4g
YSBwcm9kdWN0aW9uIGJ1aWxkLCB0aGlzIG1ldGhvZCBpcyBkZWZpbmVkIGFzIGFuIGVtcHR5IGZ1
bmN0aW9uIChOT1ApLgotICAKLSAgICBgYGBqYXZhc2NyaXB0Ci0gICAgRW1iZXIub2xkTWV0aG9k
ID0gRW1iZXIuZGVwcmVjYXRlRnVuYygnUGxlYXNlIHVzZSB0aGUgbmV3LCB1cGRhdGVkIG1ldGhv
ZCcsIEVtYmVyLm5ld01ldGhvZCk7Ci0gICAgYGBgCi0gIAotICAgIEBtZXRob2QgZGVwcmVjYXRl
RnVuYwotICAgIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlIEEgZGVzY3JpcHRpb24gb2YgdGhlIGRl
cHJlY2F0aW9uLgotICAgIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gVGhlIG9wdGlvbnMgb2Jq
ZWN0IGZvciBFbWJlci5kZXByZWNhdGUuCi0gICAgQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUg
bmV3IGZ1bmN0aW9uIGNhbGxlZCB0byByZXBsYWNlIGl0cyBkZXByZWNhdGVkIGNvdW50ZXJwYXJ0
LgotICAgIEByZXR1cm4ge0Z1bmN0aW9ufSBBIG5ldyBmdW5jdGlvbiB0aGF0IHdyYXBzIHRoZSBv
cmlnaW5hbCBmdW5jdGlvbiB3aXRoIGEgZGVwcmVjYXRpb24gd2FybmluZwotICAgIEBwcml2YXRl
Ci0gICovCi0gIF9lbWJlck1ldGFsRGVidWcuc2V0RGVidWdGdW5jdGlvbignZGVwcmVjYXRlRnVu
YycsIGZ1bmN0aW9uIGRlcHJlY2F0ZUZ1bmMoKSB7Ci0gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3Vt
ZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBf
a2V5KyspIHsKLSAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07Ci0gICAgfQotCi0g
ICAgaWYgKGFyZ3MubGVuZ3RoID09PSAzKSB7Ci0gICAgICB2YXIgX3JldCA9IChmdW5jdGlvbiAo
KSB7Ci0gICAgICAgIHZhciBtZXNzYWdlID0gYXJnc1swXTsKLSAgICAgICAgdmFyIG9wdGlvbnMg
PSBhcmdzWzFdOwotICAgICAgICB2YXIgZnVuYyA9IGFyZ3NbMl07Ci0KLSAgICAgICAgcmV0dXJu
IHsKLSAgICAgICAgICB2OiBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICBfZW1iZXJNZXRhbERl
YnVnLmRlcHJlY2F0ZShtZXNzYWdlLCBmYWxzZSwgb3B0aW9ucyk7Ci0gICAgICAgICAgICByZXR1
cm4gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwotICAgICAgICAgIH0KLSAgICAgICAgfTsK
LSAgICAgIH0pKCk7Ci0KLSAgICAgIGlmICh0eXBlb2YgX3JldCA9PT0gJ29iamVjdCcpIHJldHVy
biBfcmV0LnY7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHZhciBfcmV0MiA9IChmdW5jdGlvbiAoKSB7
Ci0gICAgICAgIHZhciBtZXNzYWdlID0gYXJnc1swXTsKLSAgICAgICAgdmFyIGZ1bmMgPSBhcmdz
WzFdOwotCi0gICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgdjogZnVuY3Rpb24gKCkgewotICAg
ICAgICAgICAgX2VtYmVyTWV0YWxEZWJ1Zy5kZXByZWNhdGUobWVzc2FnZSk7Ci0gICAgICAgICAg
ICByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwotICAgICAgICAgIH0KLSAgICAg
ICAgfTsKLSAgICAgIH0pKCk7Ci0KLSAgICAgIGlmICh0eXBlb2YgX3JldDIgPT09ICdvYmplY3Qn
KSByZXR1cm4gX3JldDIudjsKLSAgICB9Ci0gIH0pOwotCi0gIC8qKgotICAgIFJ1biBhIGZ1bmN0
aW9uIG1lYW50IGZvciBkZWJ1Z2dpbmcuCi0gIAotICAgICogSW4gYSBwcm9kdWN0aW9uIGJ1aWxk
LCB0aGlzIG1ldGhvZCBpcyBkZWZpbmVkIGFzIGFuIGVtcHR5IGZ1bmN0aW9uIChOT1ApLgotICAg
IFVzZXMgb2YgdGhpcyBtZXRob2QgaW4gRW1iZXIgaXRzZWxmIGFyZSBzdHJpcHBlZCBmcm9tIHRo
ZSBlbWJlci5wcm9kLmpzIGJ1aWxkLgotICAKLSAgICBgYGBqYXZhc2NyaXB0Ci0gICAgRW1iZXIu
cnVuSW5EZWJ1ZygoKSA9PiB7Ci0gICAgICBFbWJlci5Db21wb25lbnQucmVvcGVuKHsKLSAgICAg
ICAgZGlkSW5zZXJ0RWxlbWVudCgpIHsKLSAgICAgICAgICBjb25zb2xlLmxvZygiSSdtIGhhcHB5
Iik7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotICAgIH0pOwotICAgIGBgYAotICAKLSAgICBAbWV0
aG9kIHJ1bkluRGVidWcKLSAgICBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0
byBiZSBleGVjdXRlZC4KLSAgICBAc2luY2UgMS41LjAKLSAgICBAcHVibGljCi0gICovCi0gIF9l
bWJlck1ldGFsRGVidWcuc2V0RGVidWdGdW5jdGlvbigncnVuSW5EZWJ1ZycsIGZ1bmN0aW9uIHJ1
bkluRGVidWcoZnVuYykgewotICAgIGZ1bmMoKTsKLSAgfSk7Ci0KLSAgX2VtYmVyTWV0YWxEZWJ1
Zy5zZXREZWJ1Z0Z1bmN0aW9uKCdkZWJ1Z1NlYWwnLCBmdW5jdGlvbiBkZWJ1Z1NlYWwob2JqKSB7
Ci0gICAgT2JqZWN0LnNlYWwob2JqKTsKLSAgfSk7Ci0KLSAgX2VtYmVyTWV0YWxEZWJ1Zy5zZXRE
ZWJ1Z0Z1bmN0aW9uKCdkZXByZWNhdGUnLCBfZW1iZXJEZWJ1Z0RlcHJlY2F0ZS5kZWZhdWx0KTsK
LQotICBfZW1iZXJNZXRhbERlYnVnLnNldERlYnVnRnVuY3Rpb24oJ3dhcm4nLCBfZW1iZXJEZWJ1
Z1dhcm4uZGVmYXVsdCk7Ci0KLSAgLyoqCi0gICAgV2lsbCBjYWxsIGBFbWJlci53YXJuKClgIGlm
IEVOQUJMRV9PUFRJT05BTF9GRUFUVVJFUyBvcgotICAgIGFueSBzcGVjaWZpYyBGRUFUVVJFUyBm
bGFnIGlzIHRydXRoeS4KLSAgCi0gICAgVGhpcyBtZXRob2QgaXMgY2FsbGVkIGF1dG9tYXRpY2Fs
bHkgaW4gZGVidWcgY2FuYXJ5IGJ1aWxkcy4KLSAgCi0gICAgQHByaXZhdGUKLSAgICBAbWV0aG9k
IF93YXJuSWZVc2luZ1N0cmlwcGVkRmVhdHVyZUZsYWdzCi0gICAgQHJldHVybiB7dm9pZH0KLSAg
Ki8KLQotICBmdW5jdGlvbiBfd2FybklmVXNpbmdTdHJpcHBlZEZlYXR1cmVGbGFncyhGRUFUVVJF
Uywga25vd25GZWF0dXJlcywgZmVhdHVyZXNXZXJlU3RyaXBwZWQpIHsKLSAgICBpZiAoZmVhdHVy
ZXNXZXJlU3RyaXBwZWQpIHsKLSAgICAgIF9lbWJlck1ldGFsRGVidWcud2FybignRW1iZXIuRU5W
LkVOQUJMRV9PUFRJT05BTF9GRUFUVVJFUyBpcyBvbmx5IGF2YWlsYWJsZSBpbiBjYW5hcnkgYnVp
bGRzLicsICFfZW1iZXJNZXRhbENvcmUuZGVmYXVsdC5FTlYuRU5BQkxFX09QVElPTkFMX0ZFQVRV
UkVTLCB7IGlkOiAnZW1iZXItZGVidWcuZmVhdHVyZS1mbGFnLXdpdGgtZmVhdHVyZXMtc3RyaXBw
ZWQnIH0pOwotCi0gICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKEZFQVRVUkVTIHx8IHt9KTsK
LSAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykgewotICAgICAgICB2
YXIga2V5ID0ga2V5c1tpXTsKLSAgICAgICAgaWYgKGtleSA9PT0gJ2lzRW5hYmxlZCcgfHwgIShr
ZXkgaW4ga25vd25GZWF0dXJlcykpIHsKLSAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQot
Ci0gICAgICAgIF9lbWJlck1ldGFsRGVidWcud2FybignRkVBVFVSRVsiJyArIGtleSArICciXSBp
cyBzZXQgYXMgZW5hYmxlZCwgYnV0IEZFQVRVUkUgZmxhZ3MgYXJlIG9ubHkgYXZhaWxhYmxlIGlu
IGNhbmFyeSBidWlsZHMuJywgIUZFQVRVUkVTW2tleV0sIHsgaWQ6ICdlbWJlci1kZWJ1Zy5mZWF0
dXJlLWZsYWctd2l0aC1mZWF0dXJlcy1zdHJpcHBlZCcgfSk7Ci0gICAgICB9Ci0gICAgfQotICB9
Ci0KLSAgaWYgKCFfZW1iZXJNZXRhbENvcmUuZGVmYXVsdC50ZXN0aW5nKSB7Ci0gICAgLy8gQ29t
cGxhaW4gaWYgdGhleSdyZSB1c2luZyBGRUFUVVJFIGZsYWdzIGluIGJ1aWxkcyBvdGhlciB0aGFu
IGNhbmFyeQotICAgIF9lbWJlck1ldGFsRmVhdHVyZXMuRkVBVFVSRVNbJ2ZlYXR1cmVzLXN0cmlw
cGVkLXRlc3QnXSA9IHRydWU7Ci0gICAgdmFyIGZlYXR1cmVzV2VyZVN0cmlwcGVkID0gdHJ1ZTsK
LQotICAgIGRlbGV0ZSBfZW1iZXJNZXRhbEZlYXR1cmVzLkZFQVRVUkVTWydmZWF0dXJlcy1zdHJp
cHBlZC10ZXN0J107Ci0gICAgX3dhcm5JZlVzaW5nU3RyaXBwZWRGZWF0dXJlRmxhZ3MoX2VtYmVy
TWV0YWxDb3JlLmRlZmF1bHQuRU5WLkZFQVRVUkVTLCBfZW1iZXJNZXRhbEZlYXR1cmVzLktOT1dO
X0ZFQVRVUkVTLCBmZWF0dXJlc1dlcmVTdHJpcHBlZCk7Ci0KLSAgICAvLyBJbmZvcm0gdGhlIGRl
dmVsb3BlciBhYm91dCB0aGUgRW1iZXIgSW5zcGVjdG9yIGlmIG5vdCBpbnN0YWxsZWQuCi0gICAg
dmFyIGlzRmlyZWZveCA9IF9lbWJlck1ldGFsRW52aXJvbm1lbnQuZGVmYXVsdC5pc0ZpcmVmb3g7
Ci0gICAgdmFyIGlzQ2hyb21lID0gX2VtYmVyTWV0YWxFbnZpcm9ubWVudC5kZWZhdWx0LmlzQ2hy
b21lOwotCi0gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIChpc0ZpcmVm
b3ggfHwgaXNDaHJvbWUpICYmIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKSB7Ci0gICAgICB3aW5k
b3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZ1bmN0aW9uICgpIHsKLSAgICAgICAgaWYgKGRv
Y3VtZW50LmRvY3VtZW50RWxlbWVudCAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZGF0YXNl
dCAmJiAhZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmRhdGFzZXQuZW1iZXJFeHRlbnNpb24pIHsK
LSAgICAgICAgICB2YXIgZG93bmxvYWRVUkw7Ci0KLSAgICAgICAgICBpZiAoaXNDaHJvbWUpIHsK
LSAgICAgICAgICAgIGRvd25sb2FkVVJMID0gJ2h0dHBzOi8vY2hyb21lLmdvb2dsZS5jb20vd2Vi
c3RvcmUvZGV0YWlsL2VtYmVyLWluc3BlY3Rvci9ibWRibG5jZWdrZW5rYWNpZWloZmhwamZwcG9j
b25oaSc7Ci0gICAgICAgICAgfSBlbHNlIGlmIChpc0ZpcmVmb3gpIHsKLSAgICAgICAgICAgIGRv
d25sb2FkVVJMID0gJ2h0dHBzOi8vYWRkb25zLm1vemlsbGEub3JnL2VuLVVTL2ZpcmVmb3gvYWRk
b24vZW1iZXItaW5zcGVjdG9yLyc7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgX2VtYmVyTWV0
YWxEZWJ1Zy5kZWJ1ZygnRm9yIG1vcmUgYWR2YW5jZWQgZGVidWdnaW5nLCBpbnN0YWxsIHRoZSBF
bWJlciBJbnNwZWN0b3IgZnJvbSAnICsgZG93bmxvYWRVUkwpOwotICAgICAgICB9Ci0gICAgICB9
LCBmYWxzZSk7Ci0gICAgfQotICB9Ci0gIC8qKgotICAgIEBwdWJsaWMKLSAgICBAY2xhc3MgRW1i
ZXIuRGVidWcKLSAgKi8KLSAgX2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQuRGVidWcgPSB7fTsKLQot
ICAvKioKLSAgICBBbGxvd3MgZm9yIHJ1bnRpbWUgcmVnaXN0cmF0aW9uIG9mIGhhbmRsZXIgZnVu
Y3Rpb25zIHRoYXQgb3ZlcnJpZGUgdGhlIGRlZmF1bHQgZGVwcmVjYXRpb24gYmVoYXZpb3IuCi0g
ICAgRGVwcmVjYXRpb25zIGFyZSBpbnZva2VkIGJ5IGNhbGxzIHRvIFtFbWJlci5kZXByZWNhdGVd
KGh0dHA6Ly9lbWJlcmpzLmNvbS9hcGkvY2xhc3Nlcy9FbWJlci5odG1sI21ldGhvZF9kZXByZWNh
dGUpLgotICAgIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBkZW1vbnN0cmF0ZXMgaXRzIHVzYWdlIGJ5
IHJlZ2lzdGVyaW5nIGEgaGFuZGxlciB0aGF0IHRocm93cyBhbiBlcnJvciBpZiB0aGUKLSAgICBt
ZXNzYWdlIGNvbnRhaW5zIHRoZSB3b3JkICJzaG91bGQiLCBvdGhlcndpc2UgZGVmZXJzIHRvIHRo
ZSBkZWZhdWx0IGhhbmRsZXIuCi0gIAotICAgIGBgYGphdmFzY3JpcHQKLSAgICBFbWJlci5EZWJ1
Zy5yZWdpc3RlckRlcHJlY2F0aW9uSGFuZGxlcigobWVzc2FnZSwgb3B0aW9ucywgbmV4dCkgPT4g
ewotICAgICAgaWYgKG1lc3NhZ2UuaW5kZXhPZignc2hvdWxkJykgIT09IC0xKSB7Ci0gICAgICAg
IHRocm93IG5ldyBFcnJvcihgRGVwcmVjYXRpb24gbWVzc2FnZSB3aXRoIHNob3VsZDogJHttZXNz
YWdlfWApOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgLy8gZGVmZXIgdG8gd2hhdGV2ZXIgaGFu
ZGxlciB3YXMgcmVnaXN0ZXJlZCBiZWZvcmUgdGhpcyBvbmUKLSAgICAgICAgbmV4dChtZXNzYWdl
LCBvcHRpb25zKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgYGBgCi0gIAotICAgIFRoZSBoYW5kbGVy
IGZ1bmN0aW9uIHRha2VzIHRoZSBmb2xsb3dpbmcgYXJndW1lbnRzOgotICAKLSAgICA8dWw+Ci0g
ICAgICA8bGk+IDxjb2RlPm1lc3NhZ2U8L2NvZGU+IC0gVGhlIG1lc3NhZ2UgcmVjZWl2ZWQgZnJv
bSB0aGUgZGVwcmVjYXRpb24gY2FsbC48L2xpPgotICAgICAgPGxpPiA8Y29kZT5vcHRpb25zPC9j
b2RlPiAtIEFuIG9iamVjdCBwYXNzZWQgaW4gd2l0aCB0aGUgZGVwcmVjYXRpb24gY2FsbCBjb250
YWluaW5nIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gaW5jbHVkaW5nOjwvbGk+Ci0gICAgICAgIDx1
bD4KLSAgICAgICAgICA8bGk+IDxjb2RlPmlkPC9jb2RlPiAtIEFuIGlkIG9mIHRoZSBkZXByZWNh
dGlvbiBpbiB0aGUgZm9ybSBvZiA8Y29kZT5wYWNrYWdlLW5hbWUuc3BlY2lmaWMtZGVwcmVjYXRp
b248L2NvZGU+LjwvbGk+Ci0gICAgICAgICAgPGxpPiA8Y29kZT51bnRpbDwvY29kZT4gLSBUaGUg
RW1iZXIgdmVyc2lvbiBudW1iZXIgdGhlIGZlYXR1cmUgYW5kIGRlcHJlY2F0aW9uIHdpbGwgYmUg
cmVtb3ZlZCBpbi48L2xpPgotICAgICAgICA8L3VsPgotICAgICAgPGxpPiA8Y29kZT5uZXh0PC9j
b2RlPiAtIEEgZnVuY3Rpb24gdGhhdCBjYWxscyBpbnRvIHRoZSBwcmV2aW91c2x5IHJlZ2lzdGVy
ZWQgaGFuZGxlci48L2xpPgotICAgIDwvdWw+Ci0gIAotICAgIEBwdWJsaWMKLSAgICBAc3RhdGlj
Ci0gICAgQG1ldGhvZCByZWdpc3RlckRlcHJlY2F0aW9uSGFuZGxlcgotICAgIEBwYXJhbSBoYW5k
bGVyIHtGdW5jdGlvbn0gQSBmdW5jdGlvbiB0byBoYW5kbGUgZGVwcmVjYXRpb24gY2FsbHMuCi0g
ICAgQHNpbmNlIDIuMS4wCi0gICovCi0gIF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0LkRlYnVnLnJl
Z2lzdGVyRGVwcmVjYXRpb25IYW5kbGVyID0gX2VtYmVyRGVidWdEZXByZWNhdGUucmVnaXN0ZXJI
YW5kbGVyOwotICAvKioKLSAgICBBbGxvd3MgZm9yIHJ1bnRpbWUgcmVnaXN0cmF0aW9uIG9mIGhh
bmRsZXIgZnVuY3Rpb25zIHRoYXQgb3ZlcnJpZGUgdGhlIGRlZmF1bHQgd2FybmluZyBiZWhhdmlv
ci4KLSAgICBXYXJuaW5ncyBhcmUgaW52b2tlZCBieSBjYWxscyBtYWRlIHRvIFtFbWJlci53YXJu
XShodHRwOi8vZW1iZXJqcy5jb20vYXBpL2NsYXNzZXMvRW1iZXIuaHRtbCNtZXRob2Rfd2Fybiku
Ci0gICAgVGhlIGZvbGxvd2luZyBleGFtcGxlIGRlbW9uc3RyYXRlcyBpdHMgdXNhZ2UgYnkgcmVn
aXN0ZXJpbmcgYSBoYW5kbGVyIHRoYXQgZG9lcyBub3RoaW5nIG92ZXJyaWRpbmcgRW1iZXIncwot
ICAgIGRlZmF1bHQgd2FybmluZyBiZWhhdmlvci4KLSAgCi0gICAgYGBgamF2YXNjcmlwdAotICAg
IC8vIG5leHQgaXMgbm90IGNhbGxlZCwgc28gbm8gd2FybmluZ3MgZ2V0IHRoZSBkZWZhdWx0IGJl
aGF2aW9yCi0gICAgRW1iZXIuRGVidWcucmVnaXN0ZXJXYXJuSGFuZGxlcigoKSA9PiB7fSk7Ci0g
ICAgYGBgCi0gIAotICAgIFRoZSBoYW5kbGVyIGZ1bmN0aW9uIHRha2VzIHRoZSBmb2xsb3dpbmcg
YXJndW1lbnRzOgotICAKLSAgICA8dWw+Ci0gICAgICA8bGk+IDxjb2RlPm1lc3NhZ2U8L2NvZGU+
IC0gVGhlIG1lc3NhZ2UgcmVjZWl2ZWQgZnJvbSB0aGUgd2FybiBjYWxsLiA8L2xpPgotICAgICAg
PGxpPiA8Y29kZT5vcHRpb25zPC9jb2RlPiAtIEFuIG9iamVjdCBwYXNzZWQgaW4gd2l0aCB0aGUg
d2FybiBjYWxsIGNvbnRhaW5pbmcgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBpbmNsdWRpbmc6PC9s
aT4KLSAgICAgICAgPHVsPgotICAgICAgICAgIDxsaT4gPGNvZGU+aWQ8L2NvZGU+IC0gQW4gaWQg
b2YgdGhlIHdhcm5pbmcgaW4gdGhlIGZvcm0gb2YgPGNvZGU+cGFja2FnZS1uYW1lLnNwZWNpZmlj
LXdhcm5pbmc8L2NvZGU+LjwvbGk+Ci0gICAgICAgIDwvdWw+Ci0gICAgICA8bGk+IDxjb2RlPm5l
eHQ8L2NvZGU+IC0gQSBmdW5jdGlvbiB0aGF0IGNhbGxzIGludG8gdGhlIHByZXZpb3VzbHkgcmVn
aXN0ZXJlZCBoYW5kbGVyLjwvbGk+Ci0gICAgPC91bD4KLSAgCi0gICAgQHB1YmxpYwotICAgIEBz
dGF0aWMKLSAgICBAbWV0aG9kIHJlZ2lzdGVyV2FybkhhbmRsZXIKLSAgICBAcGFyYW0gaGFuZGxl
ciB7RnVuY3Rpb259IEEgZnVuY3Rpb24gdG8gaGFuZGxlIHdhcm5pbmdzLgotICAgIEBzaW5jZSAy
LjEuMAotICAqLwotICBfZW1iZXJNZXRhbENvcmUuZGVmYXVsdC5EZWJ1Zy5yZWdpc3Rlcldhcm5I
YW5kbGVyID0gX2VtYmVyRGVidWdXYXJuLnJlZ2lzdGVySGFuZGxlcjsKLQotICAvKgotICAgIFdl
IGFyZSB0cmFuc2l0aW9uaW5nIGF3YXkgZnJvbSBgZW1iZXIuanNgIHRvIGBlbWJlci5kZWJ1Zy5q
c2AgdG8gbWFrZQotICAgIGl0IG11Y2ggY2xlYXJlciB0aGF0IGl0IGlzIG9ubHkgZm9yIGxvY2Fs
IGRldmVsb3BtZW50IHB1cnBvc2VzLgotICAKLSAgICBUaGlzIGZsYWcgdmFsdWUgaXMgY2hhbmdl
ZCBieSB0aGUgdG9vbGluZyAoYnkgYSBzaW1wbGUgc3RyaW5nIHJlcGxhY2VtZW50KQotICAgIHNv
IHRoYXQgaWYgYGVtYmVyLmpzYCAod2hpY2ggbXVzdCBiZSBvdXRwdXQgZm9yIGJhY2t3YXJkcyBj
b21wYXQgcmVhc29ucykgaXMKLSAgICB1c2VkIGEgbmljZSBoZWxwZnVsIHdhcm5pbmcgbWVzc2Fn
ZSB3aWxsIGJlIHByaW50ZWQgb3V0LgotICAqLwotICB2YXIgcnVubmluZ05vbkVtYmVyRGVidWdK
UyA9IGZhbHNlOwotICBleHBvcnRzLnJ1bm5pbmdOb25FbWJlckRlYnVnSlMgPSBydW5uaW5nTm9u
RW1iZXJEZWJ1Z0pTOwotICBpZiAocnVubmluZ05vbkVtYmVyRGVidWdKUykgewotICAgIF9lbWJl
ck1ldGFsRGVidWcud2FybignUGxlYXNlIHVzZSBgZW1iZXIuZGVidWcuanNgIGluc3RlYWQgb2Yg
YGVtYmVyLmpzYCBmb3IgZGV2ZWxvcG1lbnQgYW5kIGRlYnVnZ2luZy4nKTsKLSAgfQotfSk7Ci1l
bmlmZWQoJ2VtYmVyLWRlYnVnL3dhcm4nLCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwvbG9nZ2Vy
JywgJ2VtYmVyLW1ldGFsL2RlYnVnJywgJ2VtYmVyLWRlYnVnL2hhbmRsZXJzJ10sIGZ1bmN0aW9u
IChleHBvcnRzLCBfZW1iZXJNZXRhbExvZ2dlciwgX2VtYmVyTWV0YWxEZWJ1ZywgX2VtYmVyRGVi
dWdIYW5kbGVycykgewotICAndXNlIHN0cmljdCc7Ci0KLSAgdmFyIF9zbGljZSA9IEFycmF5LnBy
b3RvdHlwZS5zbGljZTsKLSAgZXhwb3J0cy5yZWdpc3RlckhhbmRsZXIgPSByZWdpc3RlckhhbmRs
ZXI7Ci0gIGV4cG9ydHMuZGVmYXVsdCA9IHdhcm47Ci0KLSAgZnVuY3Rpb24gcmVnaXN0ZXJIYW5k
bGVyKGhhbmRsZXIpIHsKLSAgICBfZW1iZXJEZWJ1Z0hhbmRsZXJzLnJlZ2lzdGVySGFuZGxlcign
d2FybicsIGhhbmRsZXIpOwotICB9Ci0KLSAgcmVnaXN0ZXJIYW5kbGVyKGZ1bmN0aW9uIGxvZ1dh
cm5pbmcobWVzc2FnZSwgb3B0aW9ucykgewotICAgIF9lbWJlck1ldGFsTG9nZ2VyLmRlZmF1bHQu
d2FybignV0FSTklORzogJyArIG1lc3NhZ2UpOwotICAgIGlmICgndHJhY2UnIGluIF9lbWJlck1l
dGFsTG9nZ2VyLmRlZmF1bHQpIHsKLSAgICAgIF9lbWJlck1ldGFsTG9nZ2VyLmRlZmF1bHQudHJh
Y2UoKTsKLSAgICB9Ci0gIH0pOwotCi0gIHZhciBtaXNzaW5nT3B0aW9uc0RlcHJlY2F0aW9uID0g
J1doZW4gY2FsbGluZyBgRW1iZXIud2FybmAgeW91ICcgKyAnbXVzdCBwcm92aWRlIGFuIGBvcHRp
b25zYCBoYXNoIGFzIHRoZSB0aGlyZCBwYXJhbWV0ZXIuICAnICsgJ2BvcHRpb25zYCBzaG91bGQg
aW5jbHVkZSBhbiBgaWRgIHByb3BlcnR5Lic7Ci0gIGV4cG9ydHMubWlzc2luZ09wdGlvbnNEZXBy
ZWNhdGlvbiA9IG1pc3NpbmdPcHRpb25zRGVwcmVjYXRpb247Ci0gIHZhciBtaXNzaW5nT3B0aW9u
c0lkRGVwcmVjYXRpb24gPSAnV2hlbiBjYWxsaW5nIGBFbWJlci53YXJuYCB5b3UgbXVzdCBwcm92
aWRlIGBpZGAgaW4gb3B0aW9ucy4nOwotCi0gIGV4cG9ydHMubWlzc2luZ09wdGlvbnNJZERlcHJl
Y2F0aW9uID0gbWlzc2luZ09wdGlvbnNJZERlcHJlY2F0aW9uOwotICAvKioKLSAgQG1vZHVsZSBl
bWJlcgotICBAc3VibW9kdWxlIGVtYmVyLWRlYnVnCi0gICovCi0KLSAgLyoqCi0gICAgRGlzcGxh
eSBhIHdhcm5pbmcgd2l0aCB0aGUgcHJvdmlkZWQgbWVzc2FnZS4KLSAgCi0gICAgKiBJbiBhIHBy
b2R1Y3Rpb24gYnVpbGQsIHRoaXMgbWV0aG9kIGlzIGRlZmluZWQgYXMgYW4gZW1wdHkgZnVuY3Rp
b24gKE5PUCkuCi0gICAgVXNlcyBvZiB0aGlzIG1ldGhvZCBpbiBFbWJlciBpdHNlbGYgYXJlIHN0
cmlwcGVkIGZyb20gdGhlIGVtYmVyLnByb2QuanMgYnVpbGQuCi0gIAotICAgIEBtZXRob2Qgd2Fy
bgotICAgIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlIEEgd2FybmluZyB0byBkaXNwbGF5LgotICAg
IEBwYXJhbSB7Qm9vbGVhbn0gdGVzdCBBbiBvcHRpb25hbCBib29sZWFuLiBJZiBmYWxzeSwgdGhl
IHdhcm5pbmcKLSAgICAgIHdpbGwgYmUgZGlzcGxheWVkLgotICAgIEBwYXJhbSB7T2JqZWN0fSBv
cHRpb25zIEFuIG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIHRvIHBhc3MgYSB1bmlxdWUKLSAgICAg
IGBpZGAgZm9yIHRoaXMgd2FybmluZy4gIFRoZSBgaWRgIGNhbiBiZSB1c2VkIGJ5IEVtYmVyIGRl
YnVnZ2luZyB0b29scwotICAgICAgdG8gY2hhbmdlIHRoZSBiZWhhdmlvciAocmFpc2UsIGxvZywg
b3Igc2lsZW5jZSkgZm9yIHRoYXQgc3BlY2lmaWMgd2FybmluZy4KLSAgICAgIFRoZSBgaWRgIHNo
b3VsZCBiZSBuYW1lc3BhY2VkIGJ5IGRvdHMsIGUuZy4gImVtYmVyLWRlYnVnLmZlYXR1cmUtZmxh
Zy13aXRoLWZlYXR1cmVzLXN0cmlwcGVkIgotICAgIEBmb3IgRW1iZXIKLSAgICBAcHVibGljCi0g
ICovCi0KLSAgZnVuY3Rpb24gd2FybihtZXNzYWdlLCB0ZXN0LCBvcHRpb25zKSB7Ci0gICAgaWYg
KCFvcHRpb25zKSB7Ci0gICAgICBfZW1iZXJNZXRhbERlYnVnLmRlcHJlY2F0ZShtaXNzaW5nT3B0
aW9uc0RlcHJlY2F0aW9uLCBmYWxzZSwgewotICAgICAgICBpZDogJ2VtYmVyLWRlYnVnLndhcm4t
b3B0aW9ucy1taXNzaW5nJywKLSAgICAgICAgdW50aWw6ICczLjAuMCcsCi0gICAgICAgIHVybDog
J2h0dHA6Ly9lbWJlcmpzLmNvbS9kZXByZWNhdGlvbnMvdjIueC8jdG9jX2VtYmVyLWRlYnVnLWZ1
bmN0aW9uLW9wdGlvbnMnCi0gICAgICB9KTsKLSAgICB9Ci0KLSAgICBpZiAob3B0aW9ucyAmJiAh
b3B0aW9ucy5pZCkgewotICAgICAgX2VtYmVyTWV0YWxEZWJ1Zy5kZXByZWNhdGUobWlzc2luZ09w
dGlvbnNJZERlcHJlY2F0aW9uLCBmYWxzZSwgewotICAgICAgICBpZDogJ2VtYmVyLWRlYnVnLndh
cm4taWQtbWlzc2luZycsCi0gICAgICAgIHVudGlsOiAnMy4wLjAnLAotICAgICAgICB1cmw6ICdo
dHRwOi8vZW1iZXJqcy5jb20vZGVwcmVjYXRpb25zL3YyLngvI3RvY19lbWJlci1kZWJ1Zy1mdW5j
dGlvbi1vcHRpb25zJwotICAgICAgfSk7Ci0gICAgfQotCi0gICAgX2VtYmVyRGVidWdIYW5kbGVy
cy5pbnZva2UuYXBwbHkodW5kZWZpbmVkLCBbJ3dhcm4nXS5jb25jYXQoX3NsaWNlLmNhbGwoYXJn
dW1lbnRzKSkpOwotICB9Ci19KTsKLWVuaWZlZCgnZW1iZXItZXh0ZW5zaW9uLXN1cHBvcnQvY29u
dGFpbmVyX2RlYnVnX2FkYXB0ZXInLCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwvY29yZScsICdl
bWJlci1ydW50aW1lL3N5c3RlbS9uYXRpdmVfYXJyYXknLCAnZW1iZXItcnVudGltZS91dGlscycs
ICdlbWJlci1ydW50aW1lL3N5c3RlbS9zdHJpbmcnLCAnZW1iZXItcnVudGltZS9zeXN0ZW0vbmFt
ZXNwYWNlJywgJ2VtYmVyLXJ1bnRpbWUvc3lzdGVtL29iamVjdCddLCBmdW5jdGlvbiAoZXhwb3J0
cywgX2VtYmVyTWV0YWxDb3JlLCBfZW1iZXJSdW50aW1lU3lzdGVtTmF0aXZlX2FycmF5LCBfZW1i
ZXJSdW50aW1lVXRpbHMsIF9lbWJlclJ1bnRpbWVTeXN0ZW1TdHJpbmcsIF9lbWJlclJ1bnRpbWVT
eXN0ZW1OYW1lc3BhY2UsIF9lbWJlclJ1bnRpbWVTeXN0ZW1PYmplY3QpIHsKLSAgJ3VzZSBzdHJp
Y3QnOwotCi0gIC8qKgotICBAbW9kdWxlIGVtYmVyCi0gIEBzdWJtb2R1bGUgZW1iZXItZXh0ZW5z
aW9uLXN1cHBvcnQKLSAgKi8KLQotICAvKioKLSAgICBUaGUgYENvbnRhaW5lckRlYnVnQWRhcHRl
cmAgaGVscHMgdGhlIGNvbnRhaW5lciBhbmQgcmVzb2x2ZXIgaW50ZXJmYWNlCi0gICAgd2l0aCB0
b29scyB0aGF0IGRlYnVnIEVtYmVyIHN1Y2ggYXMgdGhlCi0gICAgW0VtYmVyIEV4dGVuc2lvbl0o
aHR0cHM6Ly9naXRodWIuY29tL3RpbGRlaW8vZW1iZXItZXh0ZW5zaW9uKQotICAgIGZvciBDaHJv
bWUgYW5kIEZpcmVmb3guCi0gIAotICAgIFRoaXMgY2xhc3MgY2FuIGJlIGV4dGVuZGVkIGJ5IGEg
Y3VzdG9tIHJlc29sdmVyIGltcGxlbWVudGVyCi0gICAgdG8gb3ZlcnJpZGUgc29tZSBvZiB0aGUg
bWV0aG9kcyB3aXRoIGxpYnJhcnktc3BlY2lmaWMgY29kZS4KLSAgCi0gICAgVGhlIG1ldGhvZHMg
bGlrZWx5IHRvIGJlIG92ZXJyaWRkZW4gYXJlOgotICAKLSAgICAqIGBjYW5DYXRhbG9nRW50cmll
c0J5VHlwZWAKLSAgICAqIGBjYXRhbG9nRW50cmllc0J5VHlwZWAKLSAgCi0gICAgVGhlIGFkYXB0
ZXIgd2lsbCBuZWVkIHRvIGJlIHJlZ2lzdGVyZWQKLSAgICBpbiB0aGUgYXBwbGljYXRpb24ncyBj
b250YWluZXIgYXMgYGNvbnRhaW5lci1kZWJ1Zy1hZGFwdGVyOm1haW5gLgotICAKLSAgICBFeGFt
cGxlOgotICAKLSAgICBgYGBqYXZhc2NyaXB0Ci0gICAgQXBwbGljYXRpb24uaW5pdGlhbGl6ZXIo
ewotICAgICAgbmFtZTogImNvbnRhaW5lckRlYnVnQWRhcHRlciIsCi0gIAotICAgICAgaW5pdGlh
bGl6ZTogZnVuY3Rpb24oYXBwbGljYXRpb24pIHsKLSAgICAgICAgYXBwbGljYXRpb24ucmVnaXN0
ZXIoJ2NvbnRhaW5lci1kZWJ1Zy1hZGFwdGVyOm1haW4nLCByZXF1aXJlKCdhcHAvY29udGFpbmVy
LWRlYnVnLWFkYXB0ZXInKSk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gICAgYGBgCi0gIAotICAgIEBj
bGFzcyBDb250YWluZXJEZWJ1Z0FkYXB0ZXIKLSAgICBAbmFtZXNwYWNlIEVtYmVyCi0gICAgQGV4
dGVuZHMgRW1iZXIuT2JqZWN0Ci0gICAgQHNpbmNlIDEuNS4wCi0gICAgQHB1YmxpYwotICAqLwot
ICBleHBvcnRzLmRlZmF1bHQgPSBfZW1iZXJSdW50aW1lU3lzdGVtT2JqZWN0LmRlZmF1bHQuZXh0
ZW5kKHsKLSAgICAvKioKLSAgICAgIFRoZSByZXNvbHZlciBpbnN0YW5jZSBvZiB0aGUgYXBwbGlj
YXRpb24KLSAgICAgIGJlaW5nIGRlYnVnZ2VkLiBUaGlzIHByb3BlcnR5IHdpbGwgYmUgaW5qZWN0
ZWQKLSAgICAgIG9uIGNyZWF0aW9uLgotICAgICAgIEBwcm9wZXJ0eSByZXNvbHZlcgotICAgICAg
QGRlZmF1bHQgbnVsbAotICAgICAgQHB1YmxpYwotICAgICovCi0gICAgcmVzb2x2ZXI6IG51bGws
Ci0KLSAgICAvKioKLSAgICAgIFJldHVybnMgdHJ1ZSBpZiBpdCBpcyBwb3NzaWJsZSB0byBjYXRh
bG9nIGEgbGlzdCBvZiBhdmFpbGFibGUKLSAgICAgIGNsYXNzZXMgaW4gdGhlIHJlc29sdmVyIGZv
ciBhIGdpdmVuIHR5cGUuCi0gICAgICAgQG1ldGhvZCBjYW5DYXRhbG9nRW50cmllc0J5VHlwZQot
ICAgICAgQHBhcmFtIHtTdHJpbmd9IHR5cGUgVGhlIHR5cGUuIGUuZy4gIm1vZGVsIiwgImNvbnRy
b2xsZXIiLCAicm91dGUiLgotICAgICAgQHJldHVybiB7Ym9vbGVhbn0gd2hldGhlciBhIGxpc3Qg
aXMgYXZhaWxhYmxlIGZvciB0aGlzIHR5cGUuCi0gICAgICBAcHVibGljCi0gICAgKi8KLSAgICBj
YW5DYXRhbG9nRW50cmllc0J5VHlwZTogZnVuY3Rpb24gKHR5cGUpIHsKLSAgICAgIGlmICh0eXBl
ID09PSAnbW9kZWwnIHx8IHR5cGUgPT09ICd0ZW1wbGF0ZScpIHsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgfQotCi0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9LAotCi0gICAgLyoqCi0g
ICAgICBSZXR1cm5zIHRoZSBhdmFpbGFibGUgY2xhc3NlcyBhIGdpdmVuIHR5cGUuCi0gICAgICAg
QG1ldGhvZCBjYXRhbG9nRW50cmllc0J5VHlwZQotICAgICAgQHBhcmFtIHtTdHJpbmd9IHR5cGUg
VGhlIHR5cGUuIGUuZy4gIm1vZGVsIiwgImNvbnRyb2xsZXIiLCAicm91dGUiLgotICAgICAgQHJl
dHVybiB7QXJyYXl9IEFuIGFycmF5IG9mIHN0cmluZ3MuCi0gICAgICBAcHVibGljCi0gICAgKi8K
LSAgICBjYXRhbG9nRW50cmllc0J5VHlwZTogZnVuY3Rpb24gKHR5cGUpIHsKLSAgICAgIHZhciBu
YW1lc3BhY2VzID0gX2VtYmVyUnVudGltZVN5c3RlbU5hdGl2ZV9hcnJheS5BKF9lbWJlclJ1bnRp
bWVTeXN0ZW1OYW1lc3BhY2UuZGVmYXVsdC5OQU1FU1BBQ0VTKTsKLSAgICAgIHZhciB0eXBlcyA9
IF9lbWJlclJ1bnRpbWVTeXN0ZW1OYXRpdmVfYXJyYXkuQSgpOwotICAgICAgdmFyIHR5cGVTdWZm
aXhSZWdleCA9IG5ldyBSZWdFeHAoX2VtYmVyUnVudGltZVN5c3RlbVN0cmluZy5jbGFzc2lmeSh0
eXBlKSArICckJyk7Ci0KLSAgICAgIG5hbWVzcGFjZXMuZm9yRWFjaChmdW5jdGlvbiAobmFtZXNw
YWNlKSB7Ci0gICAgICAgIGlmIChuYW1lc3BhY2UgIT09IF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0
KSB7Ci0gICAgICAgICAgZm9yICh2YXIga2V5IGluIG5hbWVzcGFjZSkgewotICAgICAgICAgICAg
aWYgKCFuYW1lc3BhY2UuaGFzT3duUHJvcGVydHkoa2V5KSkgewotICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh0eXBlU3VmZml4UmVnZXgudGVz
dChrZXkpKSB7Ci0gICAgICAgICAgICAgIHZhciBrbGFzcyA9IG5hbWVzcGFjZVtrZXldOwotICAg
ICAgICAgICAgICBpZiAoX2VtYmVyUnVudGltZVV0aWxzLnR5cGVPZihrbGFzcykgPT09ICdjbGFz
cycpIHsKLSAgICAgICAgICAgICAgICB0eXBlcy5wdXNoKF9lbWJlclJ1bnRpbWVTeXN0ZW1TdHJp
bmcuZGFzaGVyaXplKGtleS5yZXBsYWNlKHR5cGVTdWZmaXhSZWdleCwgJycpKSk7Ci0gICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0p
OwotICAgICAgcmV0dXJuIHR5cGVzOwotICAgIH0KLSAgfSk7Ci19KTsKLWVuaWZlZCgnZW1iZXIt
ZXh0ZW5zaW9uLXN1cHBvcnQvZGF0YV9hZGFwdGVyJywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFs
L3Byb3BlcnR5X2dldCcsICdlbWJlci1tZXRhbC9ydW5fbG9vcCcsICdlbWJlci1ydW50aW1lL3N5
c3RlbS9zdHJpbmcnLCAnZW1iZXItcnVudGltZS9zeXN0ZW0vbmFtZXNwYWNlJywgJ2VtYmVyLXJ1
bnRpbWUvc3lzdGVtL29iamVjdCcsICdlbWJlci1ydW50aW1lL3N5c3RlbS9uYXRpdmVfYXJyYXkn
LCAnZW1iZXItYXBwbGljYXRpb24vc3lzdGVtL2FwcGxpY2F0aW9uJywgJ2NvbnRhaW5lci9vd25l
cicsICdlbWJlci1ydW50aW1lL21peGlucy9hcnJheSddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2Vt
YmVyTWV0YWxQcm9wZXJ0eV9nZXQsIF9lbWJlck1ldGFsUnVuX2xvb3AsIF9lbWJlclJ1bnRpbWVT
eXN0ZW1TdHJpbmcsIF9lbWJlclJ1bnRpbWVTeXN0ZW1OYW1lc3BhY2UsIF9lbWJlclJ1bnRpbWVT
eXN0ZW1PYmplY3QsIF9lbWJlclJ1bnRpbWVTeXN0ZW1OYXRpdmVfYXJyYXksIF9lbWJlckFwcGxp
Y2F0aW9uU3lzdGVtQXBwbGljYXRpb24sIF9jb250YWluZXJPd25lciwgX2VtYmVyUnVudGltZU1p
eGluc0FycmF5KSB7Ci0gICd1c2Ugc3RyaWN0JzsKLQotICAvKioKLSAgQG1vZHVsZSBlbWJlcgot
ICBAc3VibW9kdWxlIGVtYmVyLWV4dGVuc2lvbi1zdXBwb3J0Ci0gICovCi0KLSAgLyoqCi0gICAg
VGhlIGBEYXRhQWRhcHRlcmAgaGVscHMgYSBkYXRhIHBlcnNpc3RlbmNlIGxpYnJhcnkKLSAgICBp
bnRlcmZhY2Ugd2l0aCB0b29scyB0aGF0IGRlYnVnIEVtYmVyIHN1Y2gKLSAgICBhcyB0aGUgW0Vt
YmVyIEV4dGVuc2lvbl0oaHR0cHM6Ly9naXRodWIuY29tL3RpbGRlaW8vZW1iZXItZXh0ZW5zaW9u
KQotICAgIGZvciBDaHJvbWUgYW5kIEZpcmVmb3guCi0gIAotICAgIFRoaXMgY2xhc3Mgd2lsbCBi
ZSBleHRlbmRlZCBieSBhIHBlcnNpc3RlbmNlIGxpYnJhcnkKLSAgICB3aGljaCB3aWxsIG92ZXJy
aWRlIHNvbWUgb2YgdGhlIG1ldGhvZHMgd2l0aAotICAgIGxpYnJhcnktc3BlY2lmaWMgY29kZS4K
LSAgCi0gICAgVGhlIG1ldGhvZHMgbGlrZWx5IHRvIGJlIG92ZXJyaWRkZW4gYXJlOgotICAKLSAg
ICAqIGBnZXRGaWx0ZXJzYAotICAgICogYGRldGVjdGAKLSAgICAqIGBjb2x1bW5zRm9yVHlwZWAK
LSAgICAqIGBnZXRSZWNvcmRzYAotICAgICogYGdldFJlY29yZENvbHVtblZhbHVlc2AKLSAgICAq
IGBnZXRSZWNvcmRLZXl3b3Jkc2AKLSAgICAqIGBnZXRSZWNvcmRGaWx0ZXJWYWx1ZXNgCi0gICAg
KiBgZ2V0UmVjb3JkQ29sb3JgCi0gICAgKiBgb2JzZXJ2ZVJlY29yZGAKLSAgCi0gICAgVGhlIGFk
YXB0ZXIgd2lsbCBuZWVkIHRvIGJlIHJlZ2lzdGVyZWQKLSAgICBpbiB0aGUgYXBwbGljYXRpb24n
cyBjb250YWluZXIgYXMgYGRhdGFBZGFwdGVyOm1haW5gLgotICAKLSAgICBFeGFtcGxlOgotICAK
LSAgICBgYGBqYXZhc2NyaXB0Ci0gICAgQXBwbGljYXRpb24uaW5pdGlhbGl6ZXIoewotICAgICAg
bmFtZTogImRhdGEtYWRhcHRlciIsCi0gIAotICAgICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oYXBw
bGljYXRpb24pIHsKLSAgICAgICAgYXBwbGljYXRpb24ucmVnaXN0ZXIoJ2RhdGEtYWRhcHRlcjpt
YWluJywgRFMuRGF0YUFkYXB0ZXIpOwotICAgICAgfQotICAgIH0pOwotICAgIGBgYAotICAKLSAg
ICBAY2xhc3MgRGF0YUFkYXB0ZXIKLSAgICBAbmFtZXNwYWNlIEVtYmVyCi0gICAgQGV4dGVuZHMg
RW1iZXJPYmplY3QKLSAgICBAcHVibGljCi0gICovCi0gIGV4cG9ydHMuZGVmYXVsdCA9IF9lbWJl
clJ1bnRpbWVTeXN0ZW1PYmplY3QuZGVmYXVsdC5leHRlbmQoewotICAgIGluaXQ6IGZ1bmN0aW9u
ICgpIHsKLSAgICAgIHRoaXMuX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7Ci0gICAgICB0
aGlzLnJlbGVhc2VNZXRob2RzID0gX2VtYmVyUnVudGltZVN5c3RlbU5hdGl2ZV9hcnJheS5BKCk7
Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAgVGhlIGNvbnRhaW5lci1kZWJ1Zy1hZGFwdGVyIHdo
aWNoIGlzIHVzZWQKLSAgICAgIHRvIGxpc3QgYWxsIG1vZGVscy4KLSAgICAgICBAcHJvcGVydHkg
Y29udGFpbmVyRGVidWdBZGFwdGVyCi0gICAgICBAZGVmYXVsdCB1bmRlZmluZWQKLSAgICAgIEBz
aW5jZSAxLjUuMAotICAgICAgQHB1YmxpYwotICAgICoqLwotICAgIGNvbnRhaW5lckRlYnVnQWRh
cHRlcjogdW5kZWZpbmVkLAotCi0gICAgLyoqCi0gICAgICBUaGUgbnVtYmVyIG9mIGF0dHJpYnV0
ZXMgdG8gc2VuZAotICAgICAgYXMgY29sdW1ucy4gKEVub3VnaCB0byBtYWtlIHRoZSByZWNvcmQK
LSAgICAgIGlkZW50aWZpYWJsZSkuCi0gICAgICAgQHByaXZhdGUKLSAgICAgIEBwcm9wZXJ0eSBh
dHRyaWJ1dGVMaW1pdAotICAgICAgQGRlZmF1bHQgMwotICAgICAgQHNpbmNlIDEuMy4wCi0gICAg
Ki8KLSAgICBhdHRyaWJ1dGVMaW1pdDogMywKLQotICAgIC8qKgotICAgICAgIEVtYmVyIERhdGEg
PiB2MS4wLjAtYmV0YS4xOAotICAgICAgIHJlcXVpcmVzIHN0cmluZyBtb2RlbCBuYW1lcyB0byBi
ZSBwYXNzZWQKLSAgICAgICBhcm91bmQgaW5zdGVhZCBvZiB0aGUgYWN0dWFsIGZhY3Rvcmllcy4K
LSAgICAgICAgVGhpcyBpcyBhIHN0YW1wIGZvciB0aGUgRW1iZXIgSW5zcGVjdG9yCi0gICAgICAg
dG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIHRoZSB2ZXJzaW9ucwotICAgICAgIHRvIGJlIGFibGUg
dG8gc3VwcG9ydCBvbGRlciB2ZXJzaW9ucyB0b28uCi0gICAgICAgIEBwdWJsaWMKLSAgICAgICBA
cHJvcGVydHkgYWNjZXB0c01vZGVsTmFtZQotICAgICAqLwotICAgIGFjY2VwdHNNb2RlbE5hbWU6
IHRydWUsCi0KLSAgICAvKioKLSAgICAgIFN0b3JlcyBhbGwgbWV0aG9kcyB0aGF0IGNsZWFyIG9i
c2VydmVycy4KLSAgICAgIFRoZXNlIG1ldGhvZHMgd2lsbCBiZSBjYWxsZWQgb24gZGVzdHJ1Y3Rp
b24uCi0gICAgICAgQHByaXZhdGUKLSAgICAgIEBwcm9wZXJ0eSByZWxlYXNlTWV0aG9kcwotICAg
ICAgQHNpbmNlIDEuMy4wCi0gICAgKi8KLSAgICByZWxlYXNlTWV0aG9kczogX2VtYmVyUnVudGlt
ZVN5c3RlbU5hdGl2ZV9hcnJheS5BKCksCi0KLSAgICAvKioKLSAgICAgIFNwZWNpZmllcyBob3cg
cmVjb3JkcyBjYW4gYmUgZmlsdGVyZWQuCi0gICAgICBSZWNvcmRzIHJldHVybmVkIHdpbGwgbmVl
ZCB0byBoYXZlIGEgYGZpbHRlclZhbHVlc2AKLSAgICAgIHByb3BlcnR5IHdpdGggYSBrZXkgZm9y
IGV2ZXJ5IG5hbWUgaW4gdGhlIHJldHVybmVkIGFycmF5LgotICAgICAgIEBwdWJsaWMKLSAgICAg
IEBtZXRob2QgZ2V0RmlsdGVycwotICAgICAgQHJldHVybiB7QXJyYXl9IExpc3Qgb2Ygb2JqZWN0
cyBkZWZpbmluZyBmaWx0ZXJzLgotICAgICAgIFRoZSBvYmplY3Qgc2hvdWxkIGhhdmUgYSBgbmFt
ZWAgYW5kIGBkZXNjYCBwcm9wZXJ0eS4KLSAgICAqLwotICAgIGdldEZpbHRlcnM6IGZ1bmN0aW9u
ICgpIHsKLSAgICAgIHJldHVybiBfZW1iZXJSdW50aW1lU3lzdGVtTmF0aXZlX2FycmF5LkEoKTsK
LSAgICB9LAotCi0gICAgLyoqCi0gICAgICBGZXRjaCB0aGUgbW9kZWwgdHlwZXMgYW5kIG9ic2Vy
dmUgdGhlbSBmb3IgY2hhbmdlcy4KLSAgICAgICBAcHVibGljCi0gICAgICBAbWV0aG9kIHdhdGNo
TW9kZWxUeXBlcwotICAgICAgIEBwYXJhbSB7RnVuY3Rpb259IHR5cGVzQWRkZWQgQ2FsbGJhY2sg
dG8gY2FsbCB0byBhZGQgdHlwZXMuCi0gICAgICBUYWtlcyBhbiBhcnJheSBvZiBvYmplY3RzIGNv
bnRhaW5pbmcgd3JhcHBlZCB0eXBlcyAocmV0dXJuZWQgZnJvbSBgd3JhcE1vZGVsVHlwZWApLgot
ICAgICAgIEBwYXJhbSB7RnVuY3Rpb259IHR5cGVzVXBkYXRlZCBDYWxsYmFjayB0byBjYWxsIHdo
ZW4gYSB0eXBlIGhhcyBjaGFuZ2VkLgotICAgICAgVGFrZXMgYW4gYXJyYXkgb2Ygb2JqZWN0cyBj
b250YWluaW5nIHdyYXBwZWQgdHlwZXMuCi0gICAgICAgQHJldHVybiB7RnVuY3Rpb259IE1ldGhv
ZCB0byBjYWxsIHRvIHJlbW92ZSBhbGwgb2JzZXJ2ZXJzCi0gICAgKi8KLSAgICB3YXRjaE1vZGVs
VHlwZXM6IGZ1bmN0aW9uICh0eXBlc0FkZGVkLCB0eXBlc1VwZGF0ZWQpIHsKLSAgICAgIHZhciBf
dGhpcyA9IHRoaXM7Ci0KLSAgICAgIHZhciBtb2RlbFR5cGVzID0gdGhpcy5nZXRNb2RlbFR5cGVz
KCk7Ci0gICAgICB2YXIgcmVsZWFzZU1ldGhvZHMgPSBfZW1iZXJSdW50aW1lU3lzdGVtTmF0aXZl
X2FycmF5LkEoKTsKLSAgICAgIHZhciB0eXBlc1RvU2VuZDsKLQotICAgICAgdHlwZXNUb1NlbmQg
PSBtb2RlbFR5cGVzLm1hcChmdW5jdGlvbiAodHlwZSkgewotICAgICAgICB2YXIga2xhc3MgPSB0
eXBlLmtsYXNzOwotICAgICAgICB2YXIgd3JhcHBlZCA9IF90aGlzLndyYXBNb2RlbFR5cGUoa2xh
c3MsIHR5cGUubmFtZSk7Ci0gICAgICAgIHJlbGVhc2VNZXRob2RzLnB1c2goX3RoaXMub2JzZXJ2
ZU1vZGVsVHlwZSh0eXBlLm5hbWUsIHR5cGVzVXBkYXRlZCkpOwotICAgICAgICByZXR1cm4gd3Jh
cHBlZDsKLSAgICAgIH0pOwotCi0gICAgICB0eXBlc0FkZGVkKHR5cGVzVG9TZW5kKTsKLQotICAg
ICAgdmFyIHJlbGVhc2UgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgIHJlbGVhc2VNZXRob2RzLmZv
ckVhY2goZnVuY3Rpb24gKGZuKSB7Ci0gICAgICAgICAgcmV0dXJuIGZuKCk7Ci0gICAgICAgIH0p
OwotICAgICAgICBfdGhpcy5yZWxlYXNlTWV0aG9kcy5yZW1vdmVPYmplY3QocmVsZWFzZSk7Ci0g
ICAgICB9OwotICAgICAgdGhpcy5yZWxlYXNlTWV0aG9kcy5wdXNoT2JqZWN0KHJlbGVhc2UpOwot
ICAgICAgcmV0dXJuIHJlbGVhc2U7Ci0gICAgfSwKLQotICAgIF9uYW1lVG9DbGFzczogZnVuY3Rp
b24gKHR5cGUpIHsKLSAgICAgIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycpIHsKLSAgICAg
ICAgdHlwZSA9IF9jb250YWluZXJPd25lci5nZXRPd25lcih0aGlzKS5fbG9va3VwRmFjdG9yeSgn
bW9kZWw6JyArIHR5cGUpOwotICAgICAgfQotICAgICAgcmV0dXJuIHR5cGU7Ci0gICAgfSwKLQot
ICAgIC8qKgotICAgICAgRmV0Y2ggdGhlIHJlY29yZHMgb2YgYSBnaXZlbiB0eXBlIGFuZCBvYnNl
cnZlIHRoZW0gZm9yIGNoYW5nZXMuCi0gICAgICAgQHB1YmxpYwotICAgICAgQG1ldGhvZCB3YXRj
aFJlY29yZHMKLSAgICAgICBAcGFyYW0ge1N0cmluZ30gbW9kZWxOYW1lIFRoZSBtb2RlbCBuYW1l
LgotICAgICAgIEBwYXJhbSB7RnVuY3Rpb259IHJlY29yZHNBZGRlZCBDYWxsYmFjayB0byBjYWxs
IHRvIGFkZCByZWNvcmRzLgotICAgICAgVGFrZXMgYW4gYXJyYXkgb2Ygb2JqZWN0cyBjb250YWlu
aW5nIHdyYXBwZWQgcmVjb3Jkcy4KLSAgICAgIFRoZSBvYmplY3Qgc2hvdWxkIGhhdmUgdGhlIGZv
bGxvd2luZyBwcm9wZXJ0aWVzOgotICAgICAgICBjb2x1bW5WYWx1ZXM6IHtPYmplY3R9IFRoZSBr
ZXkgYW5kIHZhbHVlIG9mIGEgdGFibGUgY2VsbC4KLSAgICAgICAgb2JqZWN0OiB7T2JqZWN0fSBU
aGUgYWN0dWFsIHJlY29yZCBvYmplY3QuCi0gICAgICAgQHBhcmFtIHtGdW5jdGlvbn0gcmVjb3Jk
c1VwZGF0ZWQgQ2FsbGJhY2sgdG8gY2FsbCB3aGVuIGEgcmVjb3JkIGhhcyBjaGFuZ2VkLgotICAg
ICAgVGFrZXMgYW4gYXJyYXkgb2Ygb2JqZWN0cyBjb250YWluaW5nIHdyYXBwZWQgcmVjb3Jkcy4K
LSAgICAgICBAcGFyYW0ge0Z1bmN0aW9ufSByZWNvcmRzUmVtb3ZlZCBDYWxsYmFjayB0byBjYWxs
IHdoZW4gYSByZWNvcmQgaGFzIHJlbW92ZWQuCi0gICAgICBUYWtlcyB0aGUgZm9sbG93aW5nIHBh
cmFtZXRlcnM6Ci0gICAgICAgIGluZGV4OiBUaGUgYXJyYXkgaW5kZXggd2hlcmUgdGhlIHJlY29y
ZHMgd2VyZSByZW1vdmVkLgotICAgICAgICBjb3VudDogVGhlIG51bWJlciBvZiByZWNvcmRzIHJl
bW92ZWQuCi0gICAgICAgQHJldHVybiB7RnVuY3Rpb259IE1ldGhvZCB0byBjYWxsIHRvIHJlbW92
ZSBhbGwgb2JzZXJ2ZXJzLgotICAgICovCi0gICAgd2F0Y2hSZWNvcmRzOiBmdW5jdGlvbiAobW9k
ZWxOYW1lLCByZWNvcmRzQWRkZWQsIHJlY29yZHNVcGRhdGVkLCByZWNvcmRzUmVtb3ZlZCkgewot
ICAgICAgdmFyIF90aGlzMiA9IHRoaXM7Ci0KLSAgICAgIHZhciByZWxlYXNlTWV0aG9kcyA9IF9l
bWJlclJ1bnRpbWVTeXN0ZW1OYXRpdmVfYXJyYXkuQSgpOwotICAgICAgdmFyIGtsYXNzID0gdGhp
cy5fbmFtZVRvQ2xhc3MobW9kZWxOYW1lKTsKLSAgICAgIHZhciByZWNvcmRzID0gdGhpcy5nZXRS
ZWNvcmRzKGtsYXNzLCBtb2RlbE5hbWUpOwotICAgICAgdmFyIHJlbGVhc2U7Ci0KLSAgICAgIHZh
ciByZWNvcmRVcGRhdGVkID0gZnVuY3Rpb24gKHVwZGF0ZWRSZWNvcmQpIHsKLSAgICAgICAgcmVj
b3Jkc1VwZGF0ZWQoW3VwZGF0ZWRSZWNvcmRdKTsKLSAgICAgIH07Ci0KLSAgICAgIHZhciByZWNv
cmRzVG9TZW5kID0gcmVjb3Jkcy5tYXAoZnVuY3Rpb24gKHJlY29yZCkgewotICAgICAgICByZWxl
YXNlTWV0aG9kcy5wdXNoKF90aGlzMi5vYnNlcnZlUmVjb3JkKHJlY29yZCwgcmVjb3JkVXBkYXRl
ZCkpOwotICAgICAgICByZXR1cm4gX3RoaXMyLndyYXBSZWNvcmQocmVjb3JkKTsKLSAgICAgIH0p
OwotCi0gICAgICB2YXIgY29udGVudERpZENoYW5nZSA9IGZ1bmN0aW9uIChhcnJheSwgaWR4LCBy
ZW1vdmVkQ291bnQsIGFkZGVkQ291bnQpIHsKLSAgICAgICAgZm9yICh2YXIgaSA9IGlkeDsgaSA8
IGlkeCArIGFkZGVkQ291bnQ7IGkrKykgewotICAgICAgICAgIHZhciByZWNvcmQgPSBfZW1iZXJS
dW50aW1lTWl4aW5zQXJyYXkub2JqZWN0QXQoYXJyYXksIGkpOwotICAgICAgICAgIHZhciB3cmFw
cGVkID0gX3RoaXMyLndyYXBSZWNvcmQocmVjb3JkKTsKLSAgICAgICAgICByZWxlYXNlTWV0aG9k
cy5wdXNoKF90aGlzMi5vYnNlcnZlUmVjb3JkKHJlY29yZCwgcmVjb3JkVXBkYXRlZCkpOwotICAg
ICAgICAgIHJlY29yZHNBZGRlZChbd3JhcHBlZF0pOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KHJlbW92ZWRDb3VudCkgewotICAgICAgICAgIHJlY29yZHNSZW1vdmVkKGlkeCwgcmVtb3ZlZENv
dW50KTsKLSAgICAgICAgfQotICAgICAgfTsKLQotICAgICAgdmFyIG9ic2VydmVyID0geyBkaWRD
aGFuZ2U6IGNvbnRlbnREaWRDaGFuZ2UsIHdpbGxDaGFuZ2U6IGZ1bmN0aW9uICgpIHsKLSAgICAg
ICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfSB9OwotICAgICAgX2VtYmVyUnVudGltZU1peGlu
c0FycmF5LmFkZEFycmF5T2JzZXJ2ZXIocmVjb3JkcywgdGhpcywgb2JzZXJ2ZXIpOwotCi0gICAg
ICByZWxlYXNlID0gZnVuY3Rpb24gKCkgewotICAgICAgICByZWxlYXNlTWV0aG9kcy5mb3JFYWNo
KGZ1bmN0aW9uIChmbikgewotICAgICAgICAgIGZuKCk7Ci0gICAgICAgIH0pOwotICAgICAgICBf
ZW1iZXJSdW50aW1lTWl4aW5zQXJyYXkucmVtb3ZlQXJyYXlPYnNlcnZlcihyZWNvcmRzLCBfdGhp
czIsIG9ic2VydmVyKTsKLSAgICAgICAgX3RoaXMyLnJlbGVhc2VNZXRob2RzLnJlbW92ZU9iamVj
dChyZWxlYXNlKTsKLSAgICAgIH07Ci0KLSAgICAgIHJlY29yZHNBZGRlZChyZWNvcmRzVG9TZW5k
KTsKLQotICAgICAgdGhpcy5yZWxlYXNlTWV0aG9kcy5wdXNoT2JqZWN0KHJlbGVhc2UpOwotICAg
ICAgcmV0dXJuIHJlbGVhc2U7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAgQ2xlYXIgYWxsIG9i
c2VydmVycyBiZWZvcmUgZGVzdHJ1Y3Rpb24KLSAgICAgIEBwcml2YXRlCi0gICAgICBAbWV0aG9k
IHdpbGxEZXN0cm95Ci0gICAgKi8KLSAgICB3aWxsRGVzdHJveTogZnVuY3Rpb24gKCkgewotICAg
ICAgdGhpcy5fc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKLSAgICAgIHRoaXMucmVsZWFz
ZU1ldGhvZHMuZm9yRWFjaChmdW5jdGlvbiAoZm4pIHsKLSAgICAgICAgZm4oKTsKLSAgICAgIH0p
OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgIERldGVjdCB3aGV0aGVyIGEgY2xhc3MgaXMgYSBt
b2RlbC4KLSAgICAgICBUZXN0IHRoYXQgYWdhaW5zdCB0aGUgbW9kZWwgY2xhc3MKLSAgICAgIG9m
IHlvdXIgcGVyc2lzdGVuY2UgbGlicmFyeS4KLSAgICAgICBAcHJpdmF0ZQotICAgICAgQG1ldGhv
ZCBkZXRlY3QKLSAgICAgIEBwYXJhbSB7Q2xhc3N9IGtsYXNzIFRoZSBjbGFzcyB0byB0ZXN0Lgot
ICAgICAgQHJldHVybiBib29sZWFuIFdoZXRoZXIgdGhlIGNsYXNzIGlzIGEgbW9kZWwgY2xhc3Mg
b3Igbm90LgotICAgICovCi0gICAgZGV0ZWN0OiBmdW5jdGlvbiAoa2xhc3MpIHsKLSAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICBHZXQgdGhlIGNvbHVtbnMgZm9y
IGEgZ2l2ZW4gbW9kZWwgdHlwZS4KLSAgICAgICBAcHJpdmF0ZQotICAgICAgQG1ldGhvZCBjb2x1
bW5zRm9yVHlwZQotICAgICAgQHBhcmFtIHtDbGFzc30gdHlwZSBUaGUgbW9kZWwgdHlwZS4KLSAg
ICAgIEByZXR1cm4ge0FycmF5fSBBbiBhcnJheSBvZiBjb2x1bW5zIG9mIHRoZSBmb2xsb3dpbmcg
Zm9ybWF0OgotICAgICAgIG5hbWU6IHtTdHJpbmd9IFRoZSBuYW1lIG9mIHRoZSBjb2x1bW4uCi0g
ICAgICAgZGVzYzoge1N0cmluZ30gSHVtYW5pemVkIGRlc2NyaXB0aW9uICh3aGF0IHdvdWxkIHNo
b3cgaW4gYSB0YWJsZSBjb2x1bW4gbmFtZSkuCi0gICAgKi8KLSAgICBjb2x1bW5zRm9yVHlwZTog
ZnVuY3Rpb24gKHR5cGUpIHsKLSAgICAgIHJldHVybiBfZW1iZXJSdW50aW1lU3lzdGVtTmF0aXZl
X2FycmF5LkEoKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICBBZGRzIG9ic2VydmVycyB0byBh
IG1vZGVsIHR5cGUgY2xhc3MuCi0gICAgICAgQHByaXZhdGUKLSAgICAgIEBtZXRob2Qgb2JzZXJ2
ZU1vZGVsVHlwZQotICAgICAgQHBhcmFtIHtTdHJpbmd9IG1vZGVsTmFtZSBUaGUgbW9kZWwgdHlw
ZSBuYW1lLgotICAgICAgQHBhcmFtIHtGdW5jdGlvbn0gdHlwZXNVcGRhdGVkIENhbGxlZCB3aGVu
IGEgdHlwZSBpcyBtb2RpZmllZC4KLSAgICAgIEByZXR1cm4ge0Z1bmN0aW9ufSBUaGUgZnVuY3Rp
b24gdG8gY2FsbCB0byByZW1vdmUgb2JzZXJ2ZXJzLgotICAgICovCi0KLSAgICBvYnNlcnZlTW9k
ZWxUeXBlOiBmdW5jdGlvbiAobW9kZWxOYW1lLCB0eXBlc1VwZGF0ZWQpIHsKLSAgICAgIHZhciBf
dGhpczMgPSB0aGlzOwotCi0gICAgICB2YXIga2xhc3MgPSB0aGlzLl9uYW1lVG9DbGFzcyhtb2Rl
bE5hbWUpOwotICAgICAgdmFyIHJlY29yZHMgPSB0aGlzLmdldFJlY29yZHMoa2xhc3MsIG1vZGVs
TmFtZSk7Ci0KLSAgICAgIHZhciBvbkNoYW5nZSA9IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgdHlw
ZXNVcGRhdGVkKFtfdGhpczMud3JhcE1vZGVsVHlwZShrbGFzcywgbW9kZWxOYW1lKV0pOwotICAg
ICAgfTsKLSAgICAgIHZhciBvYnNlcnZlciA9IHsKLSAgICAgICAgZGlkQ2hhbmdlOiBmdW5jdGlv
biAoKSB7Ci0gICAgICAgICAgX2VtYmVyTWV0YWxSdW5fbG9vcC5kZWZhdWx0LnNjaGVkdWxlT25j
ZSgnYWN0aW9ucycsIHRoaXMsIG9uQ2hhbmdlKTsKLSAgICAgICAgfSwKLSAgICAgICAgd2lsbENo
YW5nZTogZnVuY3Rpb24gKCkgewotICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9Ci0g
ICAgICB9OwotCi0gICAgICBfZW1iZXJSdW50aW1lTWl4aW5zQXJyYXkuYWRkQXJyYXlPYnNlcnZl
cihyZWNvcmRzLCB0aGlzLCBvYnNlcnZlcik7Ci0KLSAgICAgIHZhciByZWxlYXNlID0gZnVuY3Rp
b24gKCkgewotICAgICAgICBfZW1iZXJSdW50aW1lTWl4aW5zQXJyYXkucmVtb3ZlQXJyYXlPYnNl
cnZlcihyZWNvcmRzLCBfdGhpczMsIG9ic2VydmVyKTsKLSAgICAgIH07Ci0KLSAgICAgIHJldHVy
biByZWxlYXNlOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgIFdyYXBzIGEgZ2l2ZW4gbW9kZWwg
dHlwZSBhbmQgb2JzZXJ2ZXMgY2hhbmdlcyB0byBpdC4KLSAgICAgICBAcHJpdmF0ZQotICAgICAg
QG1ldGhvZCB3cmFwTW9kZWxUeXBlCi0gICAgICBAcGFyYW0ge0NsYXNzfSBrbGFzcyBBIG1vZGVs
IGNsYXNzLgotICAgICAgQHBhcmFtIHtTdHJpbmd9IG1vZGVsTmFtZSBOYW1lIG9mIHRoZSBjbGFz
cy4KLSAgICAgIEByZXR1cm4ge09iamVjdH0gQ29udGFpbnMgdGhlIHdyYXBwZWQgdHlwZSBhbmQg
dGhlIGZ1bmN0aW9uIHRvIHJlbW92ZSBvYnNlcnZlcnMKLSAgICAgIEZvcm1hdDoKLSAgICAgICAg
dHlwZToge09iamVjdH0gVGhlIHdyYXBwZWQgdHlwZS4KLSAgICAgICAgICBUaGUgd3JhcHBlZCB0
eXBlIGhhcyB0aGUgZm9sbG93aW5nIGZvcm1hdDoKLSAgICAgICAgICAgIG5hbWU6IHtTdHJpbmd9
IFRoZSBuYW1lIG9mIHRoZSB0eXBlLgotICAgICAgICAgICAgY291bnQ6IHtJbnRlZ2VyfSBUaGUg
bnVtYmVyIG9mIHJlY29yZHMgYXZhaWxhYmxlLgotICAgICAgICAgICAgY29sdW1uczoge0NvbHVt
bnN9IEFuIGFycmF5IG9mIGNvbHVtbnMgdG8gZGVzY3JpYmUgdGhlIHJlY29yZC4KLSAgICAgICAg
ICAgIG9iamVjdDoge0NsYXNzfSBUaGUgYWN0dWFsIE1vZGVsIHR5cGUgY2xhc3MuCi0gICAgICAg
IHJlbGVhc2U6IHtGdW5jdGlvbn0gVGhlIGZ1bmN0aW9uIHRvIHJlbW92ZSBvYnNlcnZlcnMuCi0g
ICAgKi8KLSAgICB3cmFwTW9kZWxUeXBlOiBmdW5jdGlvbiAoa2xhc3MsIG5hbWUpIHsKLSAgICAg
IHZhciByZWNvcmRzID0gdGhpcy5nZXRSZWNvcmRzKGtsYXNzLCBuYW1lKTsKLSAgICAgIHZhciB0
eXBlVG9TZW5kOwotCi0gICAgICB0eXBlVG9TZW5kID0gewotICAgICAgICBuYW1lOiBuYW1lLAot
ICAgICAgICBjb3VudDogX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHJlY29yZHMsICdsZW5n
dGgnKSwKLSAgICAgICAgY29sdW1uczogdGhpcy5jb2x1bW5zRm9yVHlwZShrbGFzcyksCi0gICAg
ICAgIG9iamVjdDoga2xhc3MKLSAgICAgIH07Ci0KLSAgICAgIHJldHVybiB0eXBlVG9TZW5kOwot
ICAgIH0sCi0KLSAgICAvKioKLSAgICAgIEZldGNoZXMgYWxsIG1vZGVscyBkZWZpbmVkIGluIHRo
ZSBhcHBsaWNhdGlvbi4KLSAgICAgICBAcHJpdmF0ZQotICAgICAgQG1ldGhvZCBnZXRNb2RlbFR5
cGVzCi0gICAgICBAcmV0dXJuIHtBcnJheX0gQXJyYXkgb2YgbW9kZWwgdHlwZXMuCi0gICAgKi8K
LSAgICBnZXRNb2RlbFR5cGVzOiBmdW5jdGlvbiAoKSB7Ci0gICAgICB2YXIgX3RoaXM0ID0gdGhp
czsKLQotICAgICAgdmFyIGNvbnRhaW5lckRlYnVnQWRhcHRlciA9IHRoaXMuZ2V0KCdjb250YWlu
ZXJEZWJ1Z0FkYXB0ZXInKTsKLSAgICAgIHZhciB0eXBlczsKLQotICAgICAgaWYgKGNvbnRhaW5l
ckRlYnVnQWRhcHRlci5jYW5DYXRhbG9nRW50cmllc0J5VHlwZSgnbW9kZWwnKSkgewotICAgICAg
ICB0eXBlcyA9IGNvbnRhaW5lckRlYnVnQWRhcHRlci5jYXRhbG9nRW50cmllc0J5VHlwZSgnbW9k
ZWwnKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHR5cGVzID0gdGhpcy5fZ2V0T2JqZWN0c09u
TmFtZXNwYWNlcygpOwotICAgICAgfQotCi0gICAgICAvLyBOZXcgYWRhcHRlcnMgcmV0dXJuIHN0
cmluZ3MgaW5zdGVhZCBvZiBjbGFzc2VzLgotICAgICAgdHlwZXMgPSBfZW1iZXJSdW50aW1lU3lz
dGVtTmF0aXZlX2FycmF5LkEodHlwZXMpLm1hcChmdW5jdGlvbiAobmFtZSkgewotICAgICAgICBy
ZXR1cm4gewotICAgICAgICAgIGtsYXNzOiBfdGhpczQuX25hbWVUb0NsYXNzKG5hbWUpLAotICAg
ICAgICAgIG5hbWU6IG5hbWUKLSAgICAgICAgfTsKLSAgICAgIH0pOwotICAgICAgdHlwZXMgPSBf
ZW1iZXJSdW50aW1lU3lzdGVtTmF0aXZlX2FycmF5LkEodHlwZXMpLmZpbHRlcihmdW5jdGlvbiAo
dHlwZSkgewotICAgICAgICByZXR1cm4gX3RoaXM0LmRldGVjdCh0eXBlLmtsYXNzKTsKLSAgICAg
IH0pOwotCi0gICAgICByZXR1cm4gX2VtYmVyUnVudGltZVN5c3RlbU5hdGl2ZV9hcnJheS5BKHR5
cGVzKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICBMb29wcyBvdmVyIGFsbCBuYW1lc3BhY2Vz
IGFuZCBhbGwgb2JqZWN0cwotICAgICAgYXR0YWNoZWQgdG8gdGhlbS4KLSAgICAgICBAcHJpdmF0
ZQotICAgICAgQG1ldGhvZCBfZ2V0T2JqZWN0c09uTmFtZXNwYWNlcwotICAgICAgQHJldHVybiB7
QXJyYXl9IEFycmF5IG9mIG1vZGVsIHR5cGUgc3RyaW5ncy4KLSAgICAqLwotICAgIF9nZXRPYmpl
Y3RzT25OYW1lc3BhY2VzOiBmdW5jdGlvbiAoKSB7Ci0gICAgICB2YXIgX3RoaXM1ID0gdGhpczsK
LQotICAgICAgdmFyIG5hbWVzcGFjZXMgPSBfZW1iZXJSdW50aW1lU3lzdGVtTmF0aXZlX2FycmF5
LkEoX2VtYmVyUnVudGltZVN5c3RlbU5hbWVzcGFjZS5kZWZhdWx0Lk5BTUVTUEFDRVMpOwotICAg
ICAgdmFyIHR5cGVzID0gX2VtYmVyUnVudGltZVN5c3RlbU5hdGl2ZV9hcnJheS5BKCk7Ci0KLSAg
ICAgIG5hbWVzcGFjZXMuZm9yRWFjaChmdW5jdGlvbiAobmFtZXNwYWNlKSB7Ci0gICAgICAgIGZv
ciAodmFyIGtleSBpbiBuYW1lc3BhY2UpIHsKLSAgICAgICAgICBpZiAoIW5hbWVzcGFjZS5oYXNP
d25Qcm9wZXJ0eShrZXkpKSB7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICB9Ci0g
ICAgICAgICAgLy8gRXZlbiB0aG91Z2ggd2Ugd2lsbCBmaWx0ZXIgYWdhaW4gaW4gYGdldE1vZGVs
VHlwZXNgLAotICAgICAgICAgIC8vIHdlIHNob3VsZCBub3QgY2FsbCBgbG9va3VwRmFjdG9yeWAg
b24gbm9uLW1vZGVscwotICAgICAgICAgIC8vIChlc3BlY2lhbGx5IHdoZW4gYEVtYmVyLk1PREVM
X0ZBQ1RPUllfSU5KRUNUSU9OU2AgaXMgYHRydWVgKQotICAgICAgICAgIGlmICghX3RoaXM1LmRl
dGVjdChuYW1lc3BhY2Vba2V5XSkpIHsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
IH0KLSAgICAgICAgICB2YXIgbmFtZSA9IF9lbWJlclJ1bnRpbWVTeXN0ZW1TdHJpbmcuZGFzaGVy
aXplKGtleSk7Ci0gICAgICAgICAgaWYgKCEobmFtZXNwYWNlIGluc3RhbmNlb2YgX2VtYmVyQXBw
bGljYXRpb25TeXN0ZW1BcHBsaWNhdGlvbi5kZWZhdWx0KSAmJiBuYW1lc3BhY2UudG9TdHJpbmco
KSkgewotICAgICAgICAgICAgbmFtZSA9IG5hbWVzcGFjZSArICcvJyArIG5hbWU7Ci0gICAgICAg
ICAgfQotICAgICAgICAgIHR5cGVzLnB1c2gobmFtZSk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwot
ICAgICAgcmV0dXJuIHR5cGVzOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgIEZldGNoZXMgYWxs
IGxvYWRlZCByZWNvcmRzIGZvciBhIGdpdmVuIHR5cGUuCi0gICAgICAgQHByaXZhdGUKLSAgICAg
IEBtZXRob2QgZ2V0UmVjb3JkcwotICAgICAgQHJldHVybiB7QXJyYXl9IEFuIGFycmF5IG9mIHJl
Y29yZHMuCi0gICAgICAgVGhpcyBhcnJheSB3aWxsIGJlIG9ic2VydmVkIGZvciBjaGFuZ2VzLAot
ICAgICAgIHNvIGl0IHNob3VsZCB1cGRhdGUgd2hlbiBuZXcgcmVjb3JkcyBhcmUgYWRkZWQvcmVt
b3ZlZC4KLSAgICAqLwotICAgIGdldFJlY29yZHM6IGZ1bmN0aW9uICh0eXBlKSB7Ci0gICAgICBy
ZXR1cm4gX2VtYmVyUnVudGltZVN5c3RlbU5hdGl2ZV9hcnJheS5BKCk7Ci0gICAgfSwKLQotICAg
IC8qKgotICAgICAgV3JhcHMgYSByZWNvcmQgYW5kIG9ic2VydmVycyBjaGFuZ2VzIHRvIGl0Lgot
ICAgICAgIEBwcml2YXRlCi0gICAgICBAbWV0aG9kIHdyYXBSZWNvcmQKLSAgICAgIEBwYXJhbSB7
T2JqZWN0fSByZWNvcmQgVGhlIHJlY29yZCBpbnN0YW5jZS4KLSAgICAgIEByZXR1cm4ge09iamVj
dH0gVGhlIHdyYXBwZWQgcmVjb3JkLiBGb3JtYXQ6Ci0gICAgICBjb2x1bW5WYWx1ZXM6IHtBcnJh
eX0KLSAgICAgIHNlYXJjaEtleXdvcmRzOiB7QXJyYXl9Ci0gICAgKi8KLSAgICB3cmFwUmVjb3Jk
OiBmdW5jdGlvbiAocmVjb3JkKSB7Ci0gICAgICB2YXIgcmVjb3JkVG9TZW5kID0geyBvYmplY3Q6
IHJlY29yZCB9OwotCi0gICAgICByZWNvcmRUb1NlbmQuY29sdW1uVmFsdWVzID0gdGhpcy5nZXRS
ZWNvcmRDb2x1bW5WYWx1ZXMocmVjb3JkKTsKLSAgICAgIHJlY29yZFRvU2VuZC5zZWFyY2hLZXl3
b3JkcyA9IHRoaXMuZ2V0UmVjb3JkS2V5d29yZHMocmVjb3JkKTsKLSAgICAgIHJlY29yZFRvU2Vu
ZC5maWx0ZXJWYWx1ZXMgPSB0aGlzLmdldFJlY29yZEZpbHRlclZhbHVlcyhyZWNvcmQpOwotICAg
ICAgcmVjb3JkVG9TZW5kLmNvbG9yID0gdGhpcy5nZXRSZWNvcmRDb2xvcihyZWNvcmQpOwotCi0g
ICAgICByZXR1cm4gcmVjb3JkVG9TZW5kOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgIEdldHMg
dGhlIHZhbHVlcyBmb3IgZWFjaCBjb2x1bW4uCi0gICAgICAgQHByaXZhdGUKLSAgICAgIEBtZXRo
b2QgZ2V0UmVjb3JkQ29sdW1uVmFsdWVzCi0gICAgICBAcmV0dXJuIHtPYmplY3R9IEtleXMgc2hv
dWxkIG1hdGNoIGNvbHVtbiBuYW1lcyBkZWZpbmVkCi0gICAgICBieSB0aGUgbW9kZWwgdHlwZS4K
LSAgICAqLwotICAgIGdldFJlY29yZENvbHVtblZhbHVlczogZnVuY3Rpb24gKHJlY29yZCkgewot
ICAgICAgcmV0dXJuIHt9OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgIFJldHVybnMga2V5d29y
ZHMgdG8gbWF0Y2ggd2hlbiBzZWFyY2hpbmcgcmVjb3Jkcy4KLSAgICAgICBAcHJpdmF0ZQotICAg
ICAgQG1ldGhvZCBnZXRSZWNvcmRLZXl3b3JkcwotICAgICAgQHJldHVybiB7QXJyYXl9IFJlbGV2
YW50IGtleXdvcmRzIGZvciBzZWFyY2guCi0gICAgKi8KLSAgICBnZXRSZWNvcmRLZXl3b3Jkczog
ZnVuY3Rpb24gKHJlY29yZCkgewotICAgICAgcmV0dXJuIF9lbWJlclJ1bnRpbWVTeXN0ZW1OYXRp
dmVfYXJyYXkuQSgpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgIFJldHVybnMgdGhlIHZhbHVl
cyBvZiBmaWx0ZXJzIGRlZmluZWQgYnkgYGdldEZpbHRlcnNgLgotICAgICAgIEBwcml2YXRlCi0g
ICAgICBAbWV0aG9kIGdldFJlY29yZEZpbHRlclZhbHVlcwotICAgICAgQHBhcmFtIHtPYmplY3R9
IHJlY29yZCBUaGUgcmVjb3JkIGluc3RhbmNlLgotICAgICAgQHJldHVybiB7T2JqZWN0fSBUaGUg
ZmlsdGVyIHZhbHVlcy4KLSAgICAqLwotICAgIGdldFJlY29yZEZpbHRlclZhbHVlczogZnVuY3Rp
b24gKHJlY29yZCkgewotICAgICAgcmV0dXJuIHt9OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAg
IEVhY2ggcmVjb3JkIGNhbiBoYXZlIGEgY29sb3IgdGhhdCByZXByZXNlbnRzIGl0cyBzdGF0ZS4K
LSAgICAgICBAcHJpdmF0ZQotICAgICAgQG1ldGhvZCBnZXRSZWNvcmRDb2xvcgotICAgICAgQHBh
cmFtIHtPYmplY3R9IHJlY29yZCBUaGUgcmVjb3JkIGluc3RhbmNlCi0gICAgICBAcmV0dXJuIHtT
dHJpbmd9IFRoZSByZWNvcmRzIGNvbG9yLgotICAgICAgICBQb3NzaWJsZSBvcHRpb25zOiBibGFj
aywgcmVkLCBibHVlLCBncmVlbi4KLSAgICAqLwotICAgIGdldFJlY29yZENvbG9yOiBmdW5jdGlv
biAocmVjb3JkKSB7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAg
ICBPYnNlcnZlcyBhbGwgcmVsZXZhbnQgcHJvcGVydGllcyBhbmQgcmUtc2VuZHMgdGhlIHdyYXBw
ZWQgcmVjb3JkCi0gICAgICB3aGVuIGEgY2hhbmdlIG9jY3Vycy4KLSAgICAgICBAcHJpdmF0ZQot
ICAgICAgQG1ldGhvZCBvYnNlcnZlclJlY29yZAotICAgICAgQHBhcmFtIHtPYmplY3R9IHJlY29y
ZCBUaGUgcmVjb3JkIGluc3RhbmNlLgotICAgICAgQHBhcmFtIHtGdW5jdGlvbn0gcmVjb3JkVXBk
YXRlZCBUaGUgY2FsbGJhY2sgdG8gY2FsbCB3aGVuIGEgcmVjb3JkIGlzIHVwZGF0ZWQuCi0gICAg
ICBAcmV0dXJuIHtGdW5jdGlvbn0gVGhlIGZ1bmN0aW9uIHRvIGNhbGwgdG8gcmVtb3ZlIGFsbCBv
YnNlcnZlcnMuCi0gICAgKi8KLSAgICBvYnNlcnZlUmVjb3JkOiBmdW5jdGlvbiAocmVjb3JkLCBy
ZWNvcmRVcGRhdGVkKSB7Ci0gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge307Ci0gICAgfQotICB9
KTsKLX0pOwotZW5pZmVkKCdlbWJlci1leHRlbnNpb24tc3VwcG9ydC9pbmRleCcsIFsnZXhwb3J0
cycsICdlbWJlci1tZXRhbC9jb3JlJywgJ2VtYmVyLWV4dGVuc2lvbi1zdXBwb3J0L2RhdGFfYWRh
cHRlcicsICdlbWJlci1leHRlbnNpb24tc3VwcG9ydC9jb250YWluZXJfZGVidWdfYWRhcHRlcidd
LCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0YWxDb3JlLCBfZW1iZXJFeHRlbnNpb25TdXBw
b3J0RGF0YV9hZGFwdGVyLCBfZW1iZXJFeHRlbnNpb25TdXBwb3J0Q29udGFpbmVyX2RlYnVnX2Fk
YXB0ZXIpIHsKLSAgLyoqCi0gIEBtb2R1bGUgZW1iZXIKLSAgQHN1Ym1vZHVsZSBlbWJlci1leHRl
bnNpb24tc3VwcG9ydAotICAqLwotCi0gICd1c2Ugc3RyaWN0JzsKLQotICBfZW1iZXJNZXRhbENv
cmUuZGVmYXVsdC5EYXRhQWRhcHRlciA9IF9lbWJlckV4dGVuc2lvblN1cHBvcnREYXRhX2FkYXB0
ZXIuZGVmYXVsdDsKLSAgX2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQuQ29udGFpbmVyRGVidWdBZGFw
dGVyID0gX2VtYmVyRXh0ZW5zaW9uU3VwcG9ydENvbnRhaW5lcl9kZWJ1Z19hZGFwdGVyLmRlZmF1
bHQ7Ci19KTsKLWVuaWZlZCgnZW1iZXItaHRtbGJhcnMvY29tcGF0JywgWydleHBvcnRzJywgJ2Vt
YmVyLW1ldGFsL2NvcmUnLCAnZW1iZXItaHRtbGJhcnMvdXRpbHMvc3RyaW5nJ10sIGZ1bmN0aW9u
IChleHBvcnRzLCBfZW1iZXJNZXRhbENvcmUsIF9lbWJlckh0bWxiYXJzVXRpbHNTdHJpbmcpIHsK
LSAgJ3VzZSBzdHJpY3QnOwotCi0gIHZhciBFbWJlckhhbmRsZWJhcnMgPSBfZW1iZXJNZXRhbENv
cmUuZGVmYXVsdC5IYW5kbGViYXJzID0gX2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQuSGFuZGxlYmFy
cyB8fCB7fTsKLQotICBFbWJlckhhbmRsZWJhcnMuU2FmZVN0cmluZyA9IF9lbWJlckh0bWxiYXJz
VXRpbHNTdHJpbmcuU2FmZVN0cmluZzsKLSAgRW1iZXJIYW5kbGViYXJzLlV0aWxzID0gewotICAg
IGVzY2FwZUV4cHJlc3Npb246IF9lbWJlckh0bWxiYXJzVXRpbHNTdHJpbmcuZXNjYXBlRXhwcmVz
c2lvbgotICB9OwotCi0gIGV4cG9ydHMuZGVmYXVsdCA9IEVtYmVySGFuZGxlYmFyczsKLX0pOwot
Ly8gZm9yIEhhbmRsZWJhcnMgZXhwb3J0Ci1lbmlmZWQoJ2VtYmVyLWh0bWxiYXJzL2VudicsIFsn
ZXhwb3J0cycsICdlbWJlci1tZXRhbCcsICdlbWJlci1tZXRhbC9lbnZpcm9ubWVudCcsICdodG1s
YmFycy1ydW50aW1lJywgJ2VtYmVyLW1ldGFsL2Fzc2lnbicsICdlbWJlci1odG1sYmFycy9ob29r
cy9zdWJleHByJywgJ2VtYmVyLWh0bWxiYXJzL2hvb2tzL2NvbmNhdCcsICdlbWJlci1odG1sYmFy
cy9ob29rcy9saW5rLXJlbmRlci1ub2RlJywgJ2VtYmVyLWh0bWxiYXJzL2hvb2tzL2NyZWF0ZS1m
cmVzaC1zY29wZScsICdlbWJlci1odG1sYmFycy9ob29rcy9iaW5kLXNoYWRvdy1zY29wZScsICdl
bWJlci1odG1sYmFycy9ob29rcy9iaW5kLXNlbGYnLCAnZW1iZXItaHRtbGJhcnMvaG9va3MvYmlu
ZC1zY29wZScsICdlbWJlci1odG1sYmFycy9ob29rcy9iaW5kLWxvY2FsJywgJ2VtYmVyLWh0bWxi
YXJzL2hvb2tzL2JpbmQtYmxvY2snLCAnZW1iZXItaHRtbGJhcnMvaG9va3MvdXBkYXRlLXNlbGYn
LCAnZW1iZXItaHRtbGJhcnMvaG9va3MvZ2V0LXJvb3QnLCAnZW1iZXItaHRtbGJhcnMvaG9va3Mv
Z2V0LWNoaWxkJywgJ2VtYmVyLWh0bWxiYXJzL2hvb2tzL2dldC1ibG9jaycsICdlbWJlci1odG1s
YmFycy9ob29rcy9nZXQtdmFsdWUnLCAnZW1iZXItaHRtbGJhcnMvaG9va3MvZ2V0LWNlbGwtb3It
dmFsdWUnLCAnZW1iZXItaHRtbGJhcnMvaG9va3MvY2xlYW51cC1yZW5kZXItbm9kZScsICdlbWJl
ci1odG1sYmFycy9ob29rcy9kZXN0cm95LXJlbmRlci1ub2RlJywgJ2VtYmVyLWh0bWxiYXJzL2hv
b2tzL2RpZC1yZW5kZXItbm9kZScsICdlbWJlci1odG1sYmFycy9ob29rcy93aWxsLWNsZWFudXAt
dHJlZScsICdlbWJlci1odG1sYmFycy9ob29rcy9kaWQtY2xlYW51cC10cmVlJywgJ2VtYmVyLWh0
bWxiYXJzL2hvb2tzL2NsYXNzaWZ5JywgJ2VtYmVyLWh0bWxiYXJzL2hvb2tzL2NvbXBvbmVudCcs
ICdlbWJlci1odG1sYmFycy9ob29rcy9sb29rdXAtaGVscGVyJywgJ2VtYmVyLWh0bWxiYXJzL2hv
b2tzL2hhcy1oZWxwZXInLCAnZW1iZXItaHRtbGJhcnMvaG9va3MvaW52b2tlLWhlbHBlcicsICdl
bWJlci1odG1sYmFycy9ob29rcy9lbGVtZW50JywgJ2VtYmVyLWh0bWxiYXJzL2hlbHBlcnMnLCAn
ZW1iZXItaHRtbGJhcnMva2V5d29yZHMnLCAnZW1iZXItaHRtbGJhcnMvc3lzdGVtL2RvbS1oZWxw
ZXInLCAnZW1iZXItaHRtbGJhcnMva2V5d29yZHMvZGVidWdnZXInLCAnZW1iZXItaHRtbGJhcnMv
a2V5d29yZHMvd2l0aCcsICdlbWJlci1odG1sYmFycy9rZXl3b3Jkcy9vdXRsZXQnLCAnZW1iZXIt
aHRtbGJhcnMva2V5d29yZHMvdW5ib3VuZCcsICdlbWJlci1odG1sYmFycy9rZXl3b3Jkcy92aWV3
JywgJ2VtYmVyLWh0bWxiYXJzL2tleXdvcmRzL2NvbXBvbmVudCcsICdlbWJlci1odG1sYmFycy9r
ZXl3b3Jkcy9lbGVtZW50LWNvbXBvbmVudCcsICdlbWJlci1odG1sYmFycy9rZXl3b3Jkcy9wYXJ0
aWFsJywgJ2VtYmVyLWh0bWxiYXJzL2tleXdvcmRzL2lucHV0JywgJ2VtYmVyLWh0bWxiYXJzL2tl
eXdvcmRzL3RleHRhcmVhJywgJ2VtYmVyLWh0bWxiYXJzL2tleXdvcmRzL3lpZWxkJywgJ2VtYmVy
LWh0bWxiYXJzL2tleXdvcmRzL211dCcsICdlbWJlci1odG1sYmFycy9rZXl3b3Jkcy9yZWFkb25s
eScsICdlbWJlci1odG1sYmFycy9rZXl3b3Jkcy9nZXQnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9l
bWJlck1ldGFsLCBfZW1iZXJNZXRhbEVudmlyb25tZW50LCBfaHRtbGJhcnNSdW50aW1lLCBfZW1i
ZXJNZXRhbEFzc2lnbiwgX2VtYmVySHRtbGJhcnNIb29rc1N1YmV4cHIsIF9lbWJlckh0bWxiYXJz
SG9va3NDb25jYXQsIF9lbWJlckh0bWxiYXJzSG9va3NMaW5rUmVuZGVyTm9kZSwgX2VtYmVySHRt
bGJhcnNIb29rc0NyZWF0ZUZyZXNoU2NvcGUsIF9lbWJlckh0bWxiYXJzSG9va3NCaW5kU2hhZG93
U2NvcGUsIF9lbWJlckh0bWxiYXJzSG9va3NCaW5kU2VsZiwgX2VtYmVySHRtbGJhcnNIb29rc0Jp
bmRTY29wZSwgX2VtYmVySHRtbGJhcnNIb29rc0JpbmRMb2NhbCwgX2VtYmVySHRtbGJhcnNIb29r
c0JpbmRCbG9jaywgX2VtYmVySHRtbGJhcnNIb29rc1VwZGF0ZVNlbGYsIF9lbWJlckh0bWxiYXJz
SG9va3NHZXRSb290LCBfZW1iZXJIdG1sYmFyc0hvb2tzR2V0Q2hpbGQsIF9lbWJlckh0bWxiYXJz
SG9va3NHZXRCbG9jaywgX2VtYmVySHRtbGJhcnNIb29rc0dldFZhbHVlLCBfZW1iZXJIdG1sYmFy
c0hvb2tzR2V0Q2VsbE9yVmFsdWUsIF9lbWJlckh0bWxiYXJzSG9va3NDbGVhbnVwUmVuZGVyTm9k
ZSwgX2VtYmVySHRtbGJhcnNIb29rc0Rlc3Ryb3lSZW5kZXJOb2RlLCBfZW1iZXJIdG1sYmFyc0hv
b2tzRGlkUmVuZGVyTm9kZSwgX2VtYmVySHRtbGJhcnNIb29rc1dpbGxDbGVhbnVwVHJlZSwgX2Vt
YmVySHRtbGJhcnNIb29rc0RpZENsZWFudXBUcmVlLCBfZW1iZXJIdG1sYmFyc0hvb2tzQ2xhc3Np
ZnksIF9lbWJlckh0bWxiYXJzSG9va3NDb21wb25lbnQsIF9lbWJlckh0bWxiYXJzSG9va3NMb29r
dXBIZWxwZXIsIF9lbWJlckh0bWxiYXJzSG9va3NIYXNIZWxwZXIsIF9lbWJlckh0bWxiYXJzSG9v
a3NJbnZva2VIZWxwZXIsIF9lbWJlckh0bWxiYXJzSG9va3NFbGVtZW50LCBfZW1iZXJIdG1sYmFy
c0hlbHBlcnMsIF9lbWJlckh0bWxiYXJzS2V5d29yZHMsIF9lbWJlckh0bWxiYXJzU3lzdGVtRG9t
SGVscGVyLCBfZW1iZXJIdG1sYmFyc0tleXdvcmRzRGVidWdnZXIsIF9lbWJlckh0bWxiYXJzS2V5
d29yZHNXaXRoLCBfZW1iZXJIdG1sYmFyc0tleXdvcmRzT3V0bGV0LCBfZW1iZXJIdG1sYmFyc0tl
eXdvcmRzVW5ib3VuZCwgX2VtYmVySHRtbGJhcnNLZXl3b3Jkc1ZpZXcsIF9lbWJlckh0bWxiYXJz
S2V5d29yZHNDb21wb25lbnQsIF9lbWJlckh0bWxiYXJzS2V5d29yZHNFbGVtZW50Q29tcG9uZW50
LCBfZW1iZXJIdG1sYmFyc0tleXdvcmRzUGFydGlhbCwgX2VtYmVySHRtbGJhcnNLZXl3b3Jkc0lu
cHV0LCBfZW1iZXJIdG1sYmFyc0tleXdvcmRzVGV4dGFyZWEsIF9lbWJlckh0bWxiYXJzS2V5d29y
ZHNZaWVsZCwgX2VtYmVySHRtbGJhcnNLZXl3b3Jkc011dCwgX2VtYmVySHRtbGJhcnNLZXl3b3Jk
c1JlYWRvbmx5LCBfZW1iZXJIdG1sYmFyc0tleXdvcmRzR2V0KSB7Ci0gICd1c2Ugc3RyaWN0JzsK
LQotICB2YXIgZW1iZXJIb29rcyA9IF9lbWJlck1ldGFsQXNzaWduLmRlZmF1bHQoe30sIF9odG1s
YmFyc1J1bnRpbWUuaG9va3MpOwotICBlbWJlckhvb2tzLmtleXdvcmRzID0gX2VtYmVySHRtbGJh
cnNLZXl3b3Jkcy5kZWZhdWx0OwotCi0gIF9lbWJlck1ldGFsQXNzaWduLmRlZmF1bHQoZW1iZXJI
b29rcywgewotICAgIGxpbmtSZW5kZXJOb2RlOiBfZW1iZXJIdG1sYmFyc0hvb2tzTGlua1JlbmRl
ck5vZGUuZGVmYXVsdCwKLSAgICBjcmVhdGVGcmVzaFNjb3BlOiBfZW1iZXJIdG1sYmFyc0hvb2tz
Q3JlYXRlRnJlc2hTY29wZS5kZWZhdWx0LAotICAgIGNyZWF0ZUNoaWxkU2NvcGU6IF9lbWJlckh0
bWxiYXJzSG9va3NDcmVhdGVGcmVzaFNjb3BlLmNyZWF0ZUNoaWxkU2NvcGUsCi0gICAgYmluZFNo
YWRvd1Njb3BlOiBfZW1iZXJIdG1sYmFyc0hvb2tzQmluZFNoYWRvd1Njb3BlLmRlZmF1bHQsCi0g
ICAgYmluZFNlbGY6IF9lbWJlckh0bWxiYXJzSG9va3NCaW5kU2VsZi5kZWZhdWx0LAotICAgIGJp
bmRTY29wZTogX2VtYmVySHRtbGJhcnNIb29rc0JpbmRTY29wZS5kZWZhdWx0LAotICAgIGJpbmRM
b2NhbDogX2VtYmVySHRtbGJhcnNIb29rc0JpbmRMb2NhbC5kZWZhdWx0LAotICAgIGJpbmRCbG9j
azogX2VtYmVySHRtbGJhcnNIb29rc0JpbmRCbG9jay5kZWZhdWx0LAotICAgIHVwZGF0ZVNlbGY6
IF9lbWJlckh0bWxiYXJzSG9va3NVcGRhdGVTZWxmLmRlZmF1bHQsCi0gICAgZ2V0QmxvY2s6IF9l
bWJlckh0bWxiYXJzSG9va3NHZXRCbG9jay5kZWZhdWx0LAotICAgIGdldFJvb3Q6IF9lbWJlckh0
bWxiYXJzSG9va3NHZXRSb290LmRlZmF1bHQsCi0gICAgZ2V0Q2hpbGQ6IF9lbWJlckh0bWxiYXJz
SG9va3NHZXRDaGlsZC5kZWZhdWx0LAotICAgIGdldFZhbHVlOiBfZW1iZXJIdG1sYmFyc0hvb2tz
R2V0VmFsdWUuZGVmYXVsdCwKLSAgICBnZXRDZWxsT3JWYWx1ZTogX2VtYmVySHRtbGJhcnNIb29r
c0dldENlbGxPclZhbHVlLmRlZmF1bHQsCi0gICAgc3ViZXhwcjogX2VtYmVySHRtbGJhcnNIb29r
c1N1YmV4cHIuZGVmYXVsdCwKLSAgICBjb25jYXQ6IF9lbWJlckh0bWxiYXJzSG9va3NDb25jYXQu
ZGVmYXVsdCwKLSAgICBjbGVhbnVwUmVuZGVyTm9kZTogX2VtYmVySHRtbGJhcnNIb29rc0NsZWFu
dXBSZW5kZXJOb2RlLmRlZmF1bHQsCi0gICAgZGVzdHJveVJlbmRlck5vZGU6IF9lbWJlckh0bWxi
YXJzSG9va3NEZXN0cm95UmVuZGVyTm9kZS5kZWZhdWx0LAotICAgIHdpbGxDbGVhbnVwVHJlZTog
X2VtYmVySHRtbGJhcnNIb29rc1dpbGxDbGVhbnVwVHJlZS5kZWZhdWx0LAotICAgIGRpZENsZWFu
dXBUcmVlOiBfZW1iZXJIdG1sYmFyc0hvb2tzRGlkQ2xlYW51cFRyZWUuZGVmYXVsdCwKLSAgICBk
aWRSZW5kZXJOb2RlOiBfZW1iZXJIdG1sYmFyc0hvb2tzRGlkUmVuZGVyTm9kZS5kZWZhdWx0LAot
ICAgIGNsYXNzaWZ5OiBfZW1iZXJIdG1sYmFyc0hvb2tzQ2xhc3NpZnkuZGVmYXVsdCwKLSAgICBj
b21wb25lbnQ6IF9lbWJlckh0bWxiYXJzSG9va3NDb21wb25lbnQuZGVmYXVsdCwKLSAgICBsb29r
dXBIZWxwZXI6IF9lbWJlckh0bWxiYXJzSG9va3NMb29rdXBIZWxwZXIuZGVmYXVsdCwKLSAgICBo
YXNIZWxwZXI6IF9lbWJlckh0bWxiYXJzSG9va3NIYXNIZWxwZXIuZGVmYXVsdCwKLSAgICBpbnZv
a2VIZWxwZXI6IF9lbWJlckh0bWxiYXJzSG9va3NJbnZva2VIZWxwZXIuZGVmYXVsdCwKLSAgICBl
bGVtZW50OiBfZW1iZXJIdG1sYmFyc0hvb2tzRWxlbWVudC5kZWZhdWx0Ci0gIH0pOwotCi0gIF9l
bWJlckh0bWxiYXJzS2V5d29yZHMucmVnaXN0ZXJLZXl3b3JkKCdkZWJ1Z2dlcicsIF9lbWJlckh0
bWxiYXJzS2V5d29yZHNEZWJ1Z2dlci5kZWZhdWx0KTsKLSAgX2VtYmVySHRtbGJhcnNLZXl3b3Jk
cy5yZWdpc3RlcktleXdvcmQoJ3dpdGgnLCBfZW1iZXJIdG1sYmFyc0tleXdvcmRzV2l0aC5kZWZh
dWx0KTsKLSAgX2VtYmVySHRtbGJhcnNLZXl3b3Jkcy5yZWdpc3RlcktleXdvcmQoJ291dGxldCcs
IF9lbWJlckh0bWxiYXJzS2V5d29yZHNPdXRsZXQuZGVmYXVsdCk7Ci0gIF9lbWJlckh0bWxiYXJz
S2V5d29yZHMucmVnaXN0ZXJLZXl3b3JkKCd1bmJvdW5kJywgX2VtYmVySHRtbGJhcnNLZXl3b3Jk
c1VuYm91bmQuZGVmYXVsdCk7Ci0gIF9lbWJlckh0bWxiYXJzS2V5d29yZHMucmVnaXN0ZXJLZXl3
b3JkKCdjb21wb25lbnQnLCBfZW1iZXJIdG1sYmFyc0tleXdvcmRzQ29tcG9uZW50LmRlZmF1bHQp
OwotICBfZW1iZXJIdG1sYmFyc0tleXdvcmRzLnJlZ2lzdGVyS2V5d29yZCgnQGVsZW1lbnRfY29t
cG9uZW50JywgX2VtYmVySHRtbGJhcnNLZXl3b3Jkc0VsZW1lbnRDb21wb25lbnQuZGVmYXVsdCk7
Ci0gIF9lbWJlckh0bWxiYXJzS2V5d29yZHMucmVnaXN0ZXJLZXl3b3JkKCdwYXJ0aWFsJywgX2Vt
YmVySHRtbGJhcnNLZXl3b3Jkc1BhcnRpYWwuZGVmYXVsdCk7Ci0gIF9lbWJlckh0bWxiYXJzS2V5
d29yZHMucmVnaXN0ZXJLZXl3b3JkKCdpbnB1dCcsIF9lbWJlckh0bWxiYXJzS2V5d29yZHNJbnB1
dC5kZWZhdWx0KTsKLSAgX2VtYmVySHRtbGJhcnNLZXl3b3Jkcy5yZWdpc3RlcktleXdvcmQoJ3Rl
eHRhcmVhJywgX2VtYmVySHRtbGJhcnNLZXl3b3Jkc1RleHRhcmVhLmRlZmF1bHQpOwotICBfZW1i
ZXJIdG1sYmFyc0tleXdvcmRzLnJlZ2lzdGVyS2V5d29yZCgneWllbGQnLCBfZW1iZXJIdG1sYmFy
c0tleXdvcmRzWWllbGQuZGVmYXVsdCk7Ci0gIF9lbWJlckh0bWxiYXJzS2V5d29yZHMucmVnaXN0
ZXJLZXl3b3JkKCdtdXQnLCBfZW1iZXJIdG1sYmFyc0tleXdvcmRzTXV0LmRlZmF1bHQpOwotICBf
ZW1iZXJIdG1sYmFyc0tleXdvcmRzLnJlZ2lzdGVyS2V5d29yZCgnQG11dCcsIF9lbWJlckh0bWxi
YXJzS2V5d29yZHNNdXQucHJpdmF0ZU11dCk7Ci0gIF9lbWJlckh0bWxiYXJzS2V5d29yZHMucmVn
aXN0ZXJLZXl3b3JkKCdyZWFkb25seScsIF9lbWJlckh0bWxiYXJzS2V5d29yZHNSZWFkb25seS5k
ZWZhdWx0KTsKLSAgX2VtYmVySHRtbGJhcnNLZXl3b3Jkcy5yZWdpc3RlcktleXdvcmQoJ2dldCcs
IF9lbWJlckh0bWxiYXJzS2V5d29yZHNHZXQuZGVmYXVsdCk7Ci0KLSAgaWYgKF9lbWJlck1ldGFs
LmRlZmF1bHQuRU5WLl9FTkFCTEVfTEVHQUNZX1ZJRVdfU1VQUE9SVCkgewotICAgIF9lbWJlckh0
bWxiYXJzS2V5d29yZHMucmVnaXN0ZXJLZXl3b3JkKCd2aWV3JywgX2VtYmVySHRtbGJhcnNLZXl3
b3Jkc1ZpZXcuZGVmYXVsdCk7Ci0gIH0KLQotICBleHBvcnRzLmRlZmF1bHQgPSB7Ci0gICAgaG9v
a3M6IGVtYmVySG9va3MsCi0gICAgaGVscGVyczogX2VtYmVySHRtbGJhcnNIZWxwZXJzLmRlZmF1
bHQsCi0gICAgdXNlRnJhZ21lbnRDYWNoZTogdHJ1ZQotICB9OwotCi0gIHZhciBkb21IZWxwZXIg
PSBfZW1iZXJNZXRhbEVudmlyb25tZW50LmRlZmF1bHQuaGFzRE9NID8gbmV3IF9lbWJlckh0bWxi
YXJzU3lzdGVtRG9tSGVscGVyLmRlZmF1bHQoKSA6IG51bGw7Ci0KLSAgZXhwb3J0cy5kb21IZWxw
ZXIgPSBkb21IZWxwZXI7Ci19KTsKLWVuaWZlZCgnZW1iZXItaHRtbGJhcnMvZ2xpbW1lci1jb21w
b25lbnQnLCBbJ2V4cG9ydHMnLCAnZW1iZXItdmlld3Mvdmlld3MvY29yZV92aWV3JywgJ2VtYmVy
LXZpZXdzL21peGlucy92aWV3X2NoaWxkX3ZpZXdzX3N1cHBvcnQnLCAnZW1iZXItdmlld3MvbWl4
aW5zL3ZpZXdfc3RhdGVfc3VwcG9ydCcsICdlbWJlci12aWV3cy9taXhpbnMvdGVtcGxhdGVfcmVu
ZGVyaW5nX3N1cHBvcnQnLCAnZW1iZXItdmlld3MvbWl4aW5zL2NsYXNzX25hbWVzX3N1cHBvcnQn
LCAnZW1iZXItdmlld3MvbWl4aW5zL2luc3RydW1lbnRhdGlvbl9zdXBwb3J0JywgJ2VtYmVyLXZp
ZXdzL21peGlucy9hcmlhX3JvbGVfc3VwcG9ydCcsICdlbWJlci12aWV3cy9taXhpbnMvdmlld19z
dXBwb3J0JywgJ2VtYmVyLXZpZXdzL3ZpZXdzL3ZpZXcnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9l
bWJlclZpZXdzVmlld3NDb3JlX3ZpZXcsIF9lbWJlclZpZXdzTWl4aW5zVmlld19jaGlsZF92aWV3
c19zdXBwb3J0LCBfZW1iZXJWaWV3c01peGluc1ZpZXdfc3RhdGVfc3VwcG9ydCwgX2VtYmVyVmll
d3NNaXhpbnNUZW1wbGF0ZV9yZW5kZXJpbmdfc3VwcG9ydCwgX2VtYmVyVmlld3NNaXhpbnNDbGFz
c19uYW1lc19zdXBwb3J0LCBfZW1iZXJWaWV3c01peGluc0luc3RydW1lbnRhdGlvbl9zdXBwb3J0
LCBfZW1iZXJWaWV3c01peGluc0FyaWFfcm9sZV9zdXBwb3J0LCBfZW1iZXJWaWV3c01peGluc1Zp
ZXdfc3VwcG9ydCwgX2VtYmVyVmlld3NWaWV3c1ZpZXcpIHsKLSAgJ3VzZSBzdHJpY3QnOwotCi0g
IGV4cG9ydHMuZGVmYXVsdCA9IF9lbWJlclZpZXdzVmlld3NDb3JlX3ZpZXcuZGVmYXVsdC5leHRl
bmQoX2VtYmVyVmlld3NNaXhpbnNWaWV3X2NoaWxkX3ZpZXdzX3N1cHBvcnQuZGVmYXVsdCwgX2Vt
YmVyVmlld3NNaXhpbnNWaWV3X3N0YXRlX3N1cHBvcnQuZGVmYXVsdCwgX2VtYmVyVmlld3NNaXhp
bnNUZW1wbGF0ZV9yZW5kZXJpbmdfc3VwcG9ydC5kZWZhdWx0LCBfZW1iZXJWaWV3c01peGluc0Ns
YXNzX25hbWVzX3N1cHBvcnQuZGVmYXVsdCwgX2VtYmVyVmlld3NNaXhpbnNJbnN0cnVtZW50YXRp
b25fc3VwcG9ydC5kZWZhdWx0LCBfZW1iZXJWaWV3c01peGluc0FyaWFfcm9sZV9zdXBwb3J0LmRl
ZmF1bHQsIF9lbWJlclZpZXdzTWl4aW5zVmlld19zdXBwb3J0LmRlZmF1bHQsIHsKLSAgICBpc0Nv
bXBvbmVudDogdHJ1ZSwKLSAgICBpc0dsaW1tZXJDb21wb25lbnQ6IHRydWUsCi0KLSAgICBpbml0
OiBmdW5jdGlvbiAoKSB7Ci0gICAgICB0aGlzLl9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMp
OwotICAgICAgdGhpcy5fdmlld1JlZ2lzdHJ5ID0gdGhpcy5fdmlld1JlZ2lzdHJ5IHx8IF9lbWJl
clZpZXdzVmlld3NWaWV3LmRlZmF1bHQudmlld3M7Ci0gICAgfQotICB9KTsKLX0pOwotZW5pZmVk
KCdlbWJlci1odG1sYmFycy9oZWxwZXInLCBbJ2V4cG9ydHMnLCAnZW1iZXItcnVudGltZS9zeXN0
ZW0vb2JqZWN0J10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJSdW50aW1lU3lzdGVtT2JqZWN0
KSB7Ci0gIC8qKgotICBAbW9kdWxlIGVtYmVyCi0gIEBzdWJtb2R1bGUgZW1iZXItdGVtcGxhdGVz
Ci0gICovCi0KLSAgJ3VzZSBzdHJpY3QnOwotCi0gIGV4cG9ydHMuaGVscGVyID0gaGVscGVyOwot
Ci0gIC8qKgotICAgIEVtYmVyIEhlbHBlcnMgYXJlIGZ1bmN0aW9ucyB0aGF0IGNhbiBjb21wdXRl
IHZhbHVlcywgYW5kIGFyZSB1c2VkIGluIHRlbXBsYXRlcy4KLSAgICBGb3IgZXhhbXBsZSwgdGhp
cyBjb2RlIGNhbGxzIGEgaGVscGVyIG5hbWVkIGBmb3JtYXQtY3VycmVuY3lgOgotICAKLSAgICBg
YGBoYW5kbGViYXJzCi0gICAgPGRpdj57e2Zvcm1hdC1jdXJyZW5jeSBjZW50cyBjdXJyZW5jeT0i
JCJ9fTwvZGl2PgotICAgIGBgYAotICAKLSAgICBBZGRpdGlvbmFsbHksIGEgaGVscGVyIGNhbiBi
ZSBjYWxsZWQgYXMgYSBuZXN0ZWQgaGVscGVyIChzb21ldGltZXMgY2FsbGVkIGEKLSAgICBzdWJl
eHByZXNzaW9uKS4gSW4gdGhpcyBleGFtcGxlLCB0aGUgY29tcHV0ZWQgdmFsdWUgb2YgYSBoZWxw
ZXIgaXMgcGFzc2VkCi0gICAgdG8gYSBjb21wb25lbnQgbmFtZWQgYHNob3ctbW9uZXlgOgotICAK
LSAgICBgYGBoYW5kbGViYXJzCi0gICAge3tzaG93LW1vbmV5IGFtb3VudD0oZm9ybWF0LWN1cnJl
bmN5IGNlbnRzIGN1cnJlbmN5PSIkIil9fQotICAgIGBgYAotICAKLSAgICBIZWxwZXJzIGRlZmlu
ZWQgdXNpbmcgYSBjbGFzcyBtdXN0IHByb3ZpZGUgYSBgY29tcHV0ZWAgZnVuY3Rpb24uIEZvciBl
eGFtcGxlOgotICAKLSAgICBgYGBqcwotICAgIGV4cG9ydCBkZWZhdWx0IEVtYmVyLkhlbHBlci5l
eHRlbmQoewotICAgICAgY29tcHV0ZShwYXJhbXMsIGhhc2gpIHsKLSAgICAgICAgbGV0IGNlbnRz
ID0gcGFyYW1zWzBdOwotICAgICAgICBsZXQgY3VycmVuY3kgPSBoYXNoLmN1cnJlbmN5OwotICAg
ICAgICByZXR1cm4gYCR7Y3VycmVuY3l9JHtjZW50cyAqIDAuMDF9YDsKLSAgICAgIH0KLSAgICB9
KTsKLSAgICBgYGAKLSAgCi0gICAgRWFjaCB0aW1lIHRoZSBpbnB1dCB0byBhIGhlbHBlciBjaGFu
Z2VzLCB0aGUgYGNvbXB1dGVgIGZ1bmN0aW9uIHdpbGwgYmUKLSAgICBjYWxsZWQgYWdhaW4uCi0g
IAotICAgIEFzIGluc3RhbmNlcywgdGhlc2UgaGVscGVycyBhbHNvIGhhdmUgYWNjZXNzIHRvIHRo
ZSBjb250YWluZXIgYW5kIHdpbGwgYWNjZXB0Ci0gICAgaW5qZWN0ZWQgZGVwZW5kZW5jaWVzLgot
ICAKLSAgICBBZGRpdGlvbmFsbHksIGNsYXNzIGhlbHBlcnMgY2FuIGNhbGwgYHJlY29tcHV0ZWAg
dG8gZm9yY2UgYSBuZXcgY29tcHV0YXRpb24uCi0gIAotICAgIEBjbGFzcyBFbWJlci5IZWxwZXIK
LSAgICBAcHVibGljCi0gICAgQHNpbmNlIDEuMTMuMAotICAqLwotICB2YXIgSGVscGVyID0gX2Vt
YmVyUnVudGltZVN5c3RlbU9iamVjdC5kZWZhdWx0LmV4dGVuZCh7Ci0gICAgaXNIZWxwZXJJbnN0
YW5jZTogdHJ1ZSwKLQotICAgIC8qKgotICAgICAgT24gYSBjbGFzcy1iYXNlZCBoZWxwZXIsIGl0
IG1heSBiZSB1c2VmdWwgdG8gZm9yY2UgYSByZWNvbXB1dGF0aW9uIG9mIHRoYXQKLSAgICAgIGhl
bHBlcnMgdmFsdWUuIFRoaXMgaXMgYWtpbiB0byBgcmVyZW5kZXJgIG9uIGEgY29tcG9uZW50Lgot
ICAgICAgIEZvciBleGFtcGxlLCB0aGlzIGNvbXBvbmVudCB3aWxsIHJlcmVuZGVyIHdoZW4gdGhl
IGBjdXJyZW50VXNlcmAgb24gYQotICAgICAgc2Vzc2lvbiBzZXJ2aWNlIGNoYW5nZXM6Ci0gICAg
ICAgYGBganMKLSAgICAgIC8vIGFwcC9oZWxwZXJzL2N1cnJlbnQtdXNlci1lbWFpbC5qcwotICAg
ICAgZXhwb3J0IGRlZmF1bHQgRW1iZXIuSGVscGVyLmV4dGVuZCh7Ci0gICAgICAgIHNlc3Npb246
IEVtYmVyLmluamVjdC5zZXJ2aWNlKCksCi0gICAgICAgIG9uTmV3VXNlcjogRW1iZXIub2JzZXJ2
ZXIoJ3Nlc3Npb24uY3VycmVudFVzZXInLCBmdW5jdGlvbigpIHsKLSAgICAgICAgICB0aGlzLnJl
Y29tcHV0ZSgpOwotICAgICAgICB9KSwKLSAgICAgICAgY29tcHV0ZSgpIHsKLSAgICAgICAgICBy
ZXR1cm4gdGhpcy5nZXQoJ3Nlc3Npb24uY3VycmVudFVzZXIuZW1haWwnKTsKLSAgICAgICAgfQot
ICAgICAgfSk7Ci0gICAgICBgYGAKLSAgICAgICBAbWV0aG9kIHJlY29tcHV0ZQotICAgICAgQHB1
YmxpYwotICAgICAgQHNpbmNlIDEuMTMuMAotICAgICovCi0gICAgcmVjb21wdXRlOiBmdW5jdGlv
biAoKSB7Ci0gICAgICB0aGlzLl9zdHJlYW0ubm90aWZ5KCk7Ci0gICAgfQotCi0gICAgLyoqCi0g
ICAgICBPdmVycmlkZSB0aGlzIGZ1bmN0aW9uIHdoZW4gd3JpdGluZyBhIGNsYXNzLWJhc2VkIGhl
bHBlci4KLSAgICAgICBAbWV0aG9kIGNvbXB1dGUKLSAgICAgIEBwYXJhbSB7QXJyYXl9IHBhcmFt
cyBUaGUgcG9zaXRpb25hbCBhcmd1bWVudHMgdG8gdGhlIGhlbHBlcgotICAgICAgQHBhcmFtIHtP
YmplY3R9IGhhc2ggVGhlIG5hbWVkIGFyZ3VtZW50cyB0byB0aGUgaGVscGVyCi0gICAgICBAcHVi
bGljCi0gICAgICBAc2luY2UgMS4xMy4wCi0gICAgKi8KLSAgfSk7Ci0KLSAgSGVscGVyLnJlb3Bl
bkNsYXNzKHsKLSAgICBpc0hlbHBlckZhY3Rvcnk6IHRydWUKLSAgfSk7Ci0KLSAgLyoqCi0gICAg
SW4gbWFueSBjYXNlcywgdGhlIGNlcmVtb255IG9mIGEgZnVsbCBgRW1iZXIuSGVscGVyYCBjbGFz
cyBpcyBub3QgcmVxdWlyZWQuCi0gICAgVGhlIGBoZWxwZXJgIG1ldGhvZCBjcmVhdGUgcHVyZS1m
dW5jdGlvbiBoZWxwZXJzIHdpdGhvdXQgaW5zdGFuY2VzLiBGb3IKLSAgICBleGFtcGxlOgotICAK
LSAgICBgYGBqcwotICAgIC8vIGFwcC9oZWxwZXJzL2Zvcm1hdC1jdXJyZW5jeS5qcwotICAgIGV4
cG9ydCBkZWZhdWx0IEVtYmVyLkhlbHBlci5oZWxwZXIoZnVuY3Rpb24ocGFyYW1zLCBoYXNoKSB7
Ci0gICAgICBsZXQgY2VudHMgPSBwYXJhbXNbMF07Ci0gICAgICBsZXQgY3VycmVuY3kgPSBoYXNo
LmN1cnJlbmN5OwotICAgICAgcmV0dXJuIGAke2N1cnJlbmN5fSR7Y2VudHMgKiAwLjAxfWA7Ci0g
ICAgfSk7Ci0gICAgYGBgCi0gIAotICAgIEBzdGF0aWMKLSAgICBAcGFyYW0ge0Z1bmN0aW9ufSBo
ZWxwZXIgVGhlIGhlbHBlciBmdW5jdGlvbgotICAgIEBtZXRob2QgaGVscGVyCi0gICAgQHB1Ymxp
YwotICAgIEBzaW5jZSAxLjEzLjAKLSAgKi8KLQotICBmdW5jdGlvbiBoZWxwZXIoaGVscGVyRm4p
IHsKLSAgICByZXR1cm4gewotICAgICAgaXNIZWxwZXJJbnN0YW5jZTogdHJ1ZSwKLSAgICAgIGNv
bXB1dGU6IGhlbHBlckZuCi0gICAgfTsKLSAgfQotCi0gIGV4cG9ydHMuZGVmYXVsdCA9IEhlbHBl
cjsKLX0pOwotZW5pZmVkKCdlbWJlci1odG1sYmFycy9oZWxwZXJzJywgWydleHBvcnRzJywgJ2Vt
YmVyLW1ldGFsL2VtcHR5X29iamVjdCddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0YWxF
bXB0eV9vYmplY3QpIHsKLSAgLyoqCi0gIEBtb2R1bGUgZW1iZXIKLSAgQHN1Ym1vZHVsZSBlbWJl
ci1odG1sYmFycwotICAqLwotCi0gIC8qKgotICAgQHByaXZhdGUKLSAgIEBwcm9wZXJ0eSBoZWxw
ZXJzCi0gICovCi0gICd1c2Ugc3RyaWN0JzsKLQotICBleHBvcnRzLnJlZ2lzdGVySGVscGVyID0g
cmVnaXN0ZXJIZWxwZXI7Ci0KLSAgdmFyIGhlbHBlcnMgPSBuZXcgX2VtYmVyTWV0YWxFbXB0eV9v
YmplY3QuZGVmYXVsdCgpOwotCi0gIC8qKgotICBAbW9kdWxlIGVtYmVyCi0gIEBzdWJtb2R1bGUg
ZW1iZXItaHRtbGJhcnMKLSAgKi8KLQotICAvKioKLSAgICBAcHJpdmF0ZQotICAgIEBtZXRob2Qg
X3JlZ2lzdGVySGVscGVyCi0gICAgQGZvciBFbWJlci5IVE1MQmFycwotICAgIEBwYXJhbSB7U3Ry
aW5nfSBuYW1lCi0gICAgQHBhcmFtIHtPYmplY3R8RnVuY3Rpb259IGhlbHBlckZ1bmMgVGhlIGhl
bHBlciBmdW5jdGlvbiB0byBhZGQuCi0gICovCi0KLSAgZnVuY3Rpb24gcmVnaXN0ZXJIZWxwZXIo
bmFtZSwgaGVscGVyRnVuYykgewotICAgIGhlbHBlcnNbbmFtZV0gPSBoZWxwZXJGdW5jOwotICB9
Ci0KLSAgZXhwb3J0cy5kZWZhdWx0ID0gaGVscGVyczsKLX0pOwotZW5pZmVkKCdlbWJlci1odG1s
YmFycy9oZWxwZXJzLy1odG1sLXNhZmUnLCBbJ2V4cG9ydHMnLCAnaHRtbGJhcnMtdXRpbC9zYWZl
LXN0cmluZyddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2h0bWxiYXJzVXRpbFNhZmVTdHJpbmcpIHsK
LSAgJ3VzZSBzdHJpY3QnOwotCi0gIGV4cG9ydHMuZGVmYXVsdCA9IGh0bWxTYWZlSGVscGVyOwot
Ci0gIC8qKgotICAgVGhpcyBwcml2YXRlIGhlbHBlciBpcyB1c2VkIGludGVybmFsbHkgdG8gaGFu
ZGxlIGBpc1Zpc2libGU6IGZhbHNlYCBmb3IKLSAgIEVtYmVyLlZpZXcgYW5kIEVtYmVyLkNvbXBv
bmVudC4KLSAgCi0gICBAcHJpdmF0ZQotICAgKi8KLQotICBmdW5jdGlvbiBodG1sU2FmZUhlbHBl
cihfcmVmKSB7Ci0gICAgdmFyIHZhbHVlID0gX3JlZlswXTsKLQotICAgIHJldHVybiBuZXcgX2h0
bWxiYXJzVXRpbFNhZmVTdHJpbmcuZGVmYXVsdCh2YWx1ZSk7Ci0gIH0KLX0pOwotZW5pZmVkKCdl
bWJlci1odG1sYmFycy9oZWxwZXJzLy1qb2luLWNsYXNzZXMnLCBbJ2V4cG9ydHMnXSwgZnVuY3Rp
b24gKGV4cG9ydHMpIHsKLSAgLyoKLSAgICBUaGlzIHByaXZhdGUgaGVscGVyIGlzIHVzZWQgdG8g
am9pbiBhbmQgY29tcGFjdCBhIGxpc3Qgb2YgY2xhc3MgbmFtZXMuCi0gIAotICAgIEBwcml2YXRl
Ci0gICovCi0KLSAgJ3VzZSBzdHJpY3QnOwotCi0gIGV4cG9ydHMuZGVmYXVsdCA9IGpvaW5DbGFz
c2VzOwotCi0gIGZ1bmN0aW9uIGpvaW5DbGFzc2VzKGNsYXNzTmFtZXMpIHsKLSAgICB2YXIgcmVz
dWx0ID0gW107Ci0KLSAgICBmb3IgKHZhciBpID0gMCwgbCA9IGNsYXNzTmFtZXMubGVuZ3RoOyBp
IDwgbDsgaSsrKSB7Ci0gICAgICB2YXIgY2xhc3NOYW1lID0gY2xhc3NOYW1lc1tpXTsKLQotICAg
ICAgaWYgKGNsYXNzTmFtZSkgewotICAgICAgICByZXN1bHQucHVzaChjbGFzc05hbWUpOwotICAg
ICAgfQotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQuam9pbignICcpOwotICB9Ci19KTsKLWVu
aWZlZCgnZW1iZXItaHRtbGJhcnMvaGVscGVycy8tbm9ybWFsaXplLWNsYXNzJywgWydleHBvcnRz
JywgJ2VtYmVyLXJ1bnRpbWUvc3lzdGVtL3N0cmluZycsICdlbWJlci1tZXRhbC9wYXRoX2NhY2hl
J10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJSdW50aW1lU3lzdGVtU3RyaW5nLCBfZW1iZXJN
ZXRhbFBhdGhfY2FjaGUpIHsKLSAgJ3VzZSBzdHJpY3QnOwotCi0gIGV4cG9ydHMuZGVmYXVsdCA9
IG5vcm1hbGl6ZUNsYXNzOwotCi0gIC8qCi0gICAgVGhpcyBwcml2YXRlIGhlbHBlciBpcyB1c2Vk
IGJ5IENvbXBvbmVudE5vZGUgdG8gY29udmVydCB0aGUgY2xhc3NOYW1lQmluZGluZ3MKLSAgICBt
aWNyb3N5bnRheCBpbnRvIGEgY2xhc3MgbmFtZS4KLSAgCi0gICAgV2hlbiBhIGNvbXBvbmVudCBv
ciB2aWV3IGlzIGNyZWF0ZWQsIHdlIG5vcm1hbGl6ZSBjbGFzcyBuYW1lIGJpbmRpbmdzIGludG8g
YQotICAgIHNlcmllcyBvZiBhdHRyaWJ1dGUgbm9kZXMgdGhhdCB1c2UgdGhpcyBoZWxwZXIuCi0g
IAotICAgIEBwcml2YXRlCi0gICovCi0KLSAgZnVuY3Rpb24gbm9ybWFsaXplQ2xhc3MocGFyYW1z
LCBoYXNoKSB7Ci0gICAgdmFyIHByb3BOYW1lID0gcGFyYW1zWzBdOwotICAgIHZhciB2YWx1ZSA9
IHBhcmFtc1sxXTsKLSAgICB2YXIgYWN0aXZlQ2xhc3MgPSBoYXNoLmFjdGl2ZUNsYXNzOwotICAg
IHZhciBpbmFjdGl2ZUNsYXNzID0gaGFzaC5pbmFjdGl2ZUNsYXNzOwotCi0gICAgLy8gV2hlbiB1
c2luZyB0aGUgY29sb24gc3ludGF4LCBldmFsdWF0ZSB0aGUgdHJ1dGhpbmVzcyBvciBmYWxzaW5l
c3MKLSAgICAvLyBvZiB0aGUgdmFsdWUgdG8gZGV0ZXJtaW5lIHdoaWNoIGNsYXNzTmFtZSB0byBy
ZXR1cm4uCi0gICAgaWYgKGFjdGl2ZUNsYXNzIHx8IGluYWN0aXZlQ2xhc3MpIHsKLSAgICAgIGlm
ICghIXZhbHVlKSB7Ci0gICAgICAgIHJldHVybiBhY3RpdmVDbGFzczsKLSAgICAgIH0gZWxzZSB7
Ci0gICAgICAgIHJldHVybiBpbmFjdGl2ZUNsYXNzOwotICAgICAgfQotCi0gICAgICAvLyBJZiB2
YWx1ZSBpcyBhIEJvb2xlYW4gYW5kIHRydWUsIHJldHVybiB0aGUgZGFzaGVyaXplZCBwcm9wZXJ0
eQotICAgICAgLy8gbmFtZS4KLSAgICB9IGVsc2UgaWYgKHZhbHVlID09PSB0cnVlKSB7Ci0gICAg
ICAgIC8vIE9ubHkgYXBwbHkgdG8gbGFzdCBzZWdtZW50IGluIHRoZSBwYXRoLgotICAgICAgICBp
ZiAocHJvcE5hbWUgJiYgX2VtYmVyTWV0YWxQYXRoX2NhY2hlLmlzUGF0aChwcm9wTmFtZSkpIHsK
LSAgICAgICAgICB2YXIgc2VnbWVudHMgPSBwcm9wTmFtZS5zcGxpdCgnLicpOwotICAgICAgICAg
IHByb3BOYW1lID0gc2VnbWVudHNbc2VnbWVudHMubGVuZ3RoIC0gMV07Ci0gICAgICAgIH0KLQot
ICAgICAgICByZXR1cm4gX2VtYmVyUnVudGltZVN5c3RlbVN0cmluZy5kYXNoZXJpemUocHJvcE5h
bWUpOwotCi0gICAgICAgIC8vIElmIHRoZSB2YWx1ZSBpcyBub3QgZmFsc2UsIHVuZGVmaW5lZCwg
b3IgbnVsbCwgcmV0dXJuIHRoZSBjdXJyZW50Ci0gICAgICAgIC8vIHZhbHVlIG9mIHRoZSBwcm9w
ZXJ0eS4KLSAgICAgIH0gZWxzZSBpZiAodmFsdWUgIT09IGZhbHNlICYmIHZhbHVlICE9IG51bGwp
IHsKLSAgICAgICAgICByZXR1cm4gdmFsdWU7Ci0KLSAgICAgICAgICAvLyBOb3RoaW5nIHRvIGRp
c3BsYXkuIFJldHVybiBudWxsIHNvIHRoYXQgdGhlIG9sZCBjbGFzcyBpcyByZW1vdmVkCi0gICAg
ICAgICAgLy8gYnV0IG5vIG5ldyBjbGFzcyBpcyBhZGRlZC4KLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgIH0KLSAgfQotfSk7Ci1lbmlmZWQoJ2Vt
YmVyLWh0bWxiYXJzL2hlbHBlcnMvY29uY2F0JywgWydleHBvcnRzJ10sIGZ1bmN0aW9uIChleHBv
cnRzKSB7Ci0gIC8qKgotICBAbW9kdWxlIGVtYmVyCi0gIEBzdWJtb2R1bGUgZW1iZXItdGVtcGxh
dGVzCi0gICovCi0KLSAgLyoqCi0gICAgQ29uY2F0ZW5hdGVzIGlucHV0IHBhcmFtcyB0b2dldGhl
ci4KLSAgICBFeGFtcGxlOgotICAgIGBgYGhhbmRsZWJhcnMKLSAgICB7e3NvbWUtY29tcG9uZW50
IG5hbWU9KGNvbmNhdCBmaXJzdE5hbWUgIiAiIGxhc3ROYW1lKX19Ci0gICAge3shIHdvdWxkIHBh
c3MgbmFtZT0iPGZpcnN0IG5hbWUgdmFsdWU+IDxsYXN0IG5hbWUgdmFsdWU+IiB0byB0aGUgY29t
cG9uZW50fX0KLSAgICBgYGAKLSAgICBAcHVibGljCi0gICAgQG1ldGhvZCBjb25jYXQKLSAgICBA
Zm9yIEVtYmVyLlRlbXBsYXRlcy5oZWxwZXJzCi0gICAgQHNpbmNlIDEuMTMuMAotICAqLwotICAn
dXNlIHN0cmljdCc7Ci0KLSAgZXhwb3J0cy5kZWZhdWx0ID0gY29uY2F0OwotCi0gIGZ1bmN0aW9u
IGNvbmNhdChwYXJhbXMpIHsKLSAgICByZXR1cm4gcGFyYW1zLmpvaW4oJycpOwotICB9Ci19KTsK
LWVuaWZlZCgnZW1iZXItaHRtbGJhcnMvaGVscGVycy9lYWNoLWluJywgWydleHBvcnRzJywgJ2Vt
YmVyLXZpZXdzL3N0cmVhbXMvc2hvdWxkX2Rpc3BsYXknXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9l
bWJlclZpZXdzU3RyZWFtc1Nob3VsZF9kaXNwbGF5KSB7Ci0gIC8qKgotICBAbW9kdWxlIGVtYmVy
Ci0gIEBzdWJtb2R1bGUgZW1iZXItdGVtcGxhdGVzCi0gICovCi0KLSAgJ3VzZSBzdHJpY3QnOwot
Ci0gIC8qKgotICAgIFRoZSBge3tlYWNoLWlufX1gIGhlbHBlciBsb29wcyBvdmVyIHByb3BlcnRp
ZXMgb24gYW4gb2JqZWN0LiBJdCBpcyB1bmJvdW5kLAotICAgIGluIHRoYXQgbmV3IChvciByZW1v
dmVkKSBwcm9wZXJ0aWVzIGFkZGVkIHRvIHRoZSB0YXJnZXQgb2JqZWN0IHdpbGwgbm90IGJlCi0g
ICAgcmVuZGVyZWQuCi0gIAotICAgIEZvciBleGFtcGxlLCBnaXZlbiBhIGB1c2VyYCBvYmplY3Qg
dGhhdCBsb29rcyBsaWtlOgotICAKLSAgICBgYGBqYXZhc2NyaXB0Ci0gICAgewotICAgICAgIm5h
bWUiOiAiU2hlbGx5IFNhaWxzIiwKLSAgICAgICJhZ2UiOiA0MgotICAgIH0KLSAgICBgYGAKLSAg
Ci0gICAgVGhpcyB0ZW1wbGF0ZSB3b3VsZCBkaXNwbGF5IGFsbCBwcm9wZXJ0aWVzIG9uIHRoZSBg
dXNlcmAKLSAgICBvYmplY3QgaW4gYSBsaXN0OgotICAKLSAgICBgYGBoYW5kbGViYXJzCi0gICAg
PHVsPgotICAgIHt7I2VhY2gtaW4gdXNlciBhcyB8a2V5IHZhbHVlfH19Ci0gICAgICA8bGk+e3tr
ZXl9fToge3t2YWx1ZX19PC9saT4KLSAgICB7ey9lYWNoLWlufX0KLSAgICA8L3VsPgotICAgIGBg
YAotICAKLSAgICBPdXRwdXR0aW5nIHRoZWlyIG5hbWUgYW5kIGFnZS4KLSAgCi0gICAgQG1ldGhv
ZCBlYWNoLWluCi0gICAgQGZvciBFbWJlci5UZW1wbGF0ZXMuaGVscGVycwotICAgIEBwdWJsaWMK
LSAgICBAc2luY2UgMi4xLjAKLSAgKi8KLSAgdmFyIGVhY2hJbkhlbHBlciA9IGZ1bmN0aW9uIChf
cmVmLCBoYXNoLCBibG9ja3MpIHsKLSAgICB2YXIgb2JqZWN0ID0gX3JlZlswXTsKLQotICAgIHZh
ciBvYmpLZXlzLCBwcm9wLCBpOwotICAgIG9iaktleXMgPSBvYmplY3QgPyBPYmplY3Qua2V5cyhv
YmplY3QpIDogW107Ci0gICAgaWYgKF9lbWJlclZpZXdzU3RyZWFtc1Nob3VsZF9kaXNwbGF5LmRl
ZmF1bHQob2JqS2V5cykpIHsKLSAgICAgIGZvciAoaSA9IDA7IGkgPCBvYmpLZXlzLmxlbmd0aDsg
aSsrKSB7Ci0gICAgICAgIHByb3AgPSBvYmpLZXlzW2ldOwotICAgICAgICBibG9ja3MudGVtcGxh
dGUueWllbGRJdGVtKHByb3AsIFtwcm9wLCBvYmplY3RbcHJvcF1dKTsKLSAgICAgIH0KLSAgICB9
IGVsc2UgaWYgKGJsb2Nrcy5pbnZlcnNlLnlpZWxkKSB7Ci0gICAgICBibG9ja3MuaW52ZXJzZS55
aWVsZCgpOwotICAgIH0KLSAgfTsKLQotICBleHBvcnRzLmRlZmF1bHQgPSBlYWNoSW5IZWxwZXI7
Ci19KTsKLWVuaWZlZCgnZW1iZXItaHRtbGJhcnMvaGVscGVycy9lYWNoJywgWydleHBvcnRzJywg
J2VtYmVyLXZpZXdzL3N0cmVhbXMvc2hvdWxkX2Rpc3BsYXknLCAnZW1iZXItaHRtbGJhcnMvdXRp
bHMvZGVjb2RlLWVhY2gta2V5J10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJWaWV3c1N0cmVh
bXNTaG91bGRfZGlzcGxheSwgX2VtYmVySHRtbGJhcnNVdGlsc0RlY29kZUVhY2hLZXkpIHsKLSAg
LyoqCi0gIEBtb2R1bGUgZW1iZXIKLSAgQHN1Ym1vZHVsZSBlbWJlci10ZW1wbGF0ZXMKLSAgKi8K
LQotICAndXNlIHN0cmljdCc7Ci0KLSAgZXhwb3J0cy5kZWZhdWx0ID0gZWFjaEhlbHBlcjsKLQot
ICAvKioKLSAgICBUaGUgYHt7I2VhY2h9fWAgaGVscGVyIGxvb3BzIG92ZXIgZWxlbWVudHMgaW4g
YSBjb2xsZWN0aW9uLiBJdCBpcyBhbiBleHRlbnNpb24KLSAgICBvZiB0aGUgYmFzZSBIYW5kbGVi
YXJzIGB7eyNlYWNofX1gIGhlbHBlci4KLSAgCi0gICAgVGhlIGRlZmF1bHQgYmVoYXZpb3Igb2Yg
YHt7I2VhY2h9fWAgaXMgdG8geWllbGQgaXRzIGlubmVyIGJsb2NrIG9uY2UgZm9yIGV2ZXJ5Ci0g
ICAgaXRlbSBpbiBhbiBhcnJheSBwYXNzaW5nIHRoZSBpdGVtIGFzIHRoZSBmaXJzdCBibG9jayBw
YXJhbWV0ZXIuCi0gIAotICAgIGBgYGphdmFzY3JpcHQKLSAgICB2YXIgZGV2ZWxvcGVycyA9IFt7
bmFtZTogJ1llaHVkYSd9LHtuYW1lOiAnVG9tJ30sIHtuYW1lOiAnUGF1bCd9XTsKLSAgICBgYGAK
LSAgCi0gICAgYGBgaGFuZGxlYmFycwotICAgIHt7I2VhY2ggZGV2ZWxvcGVycyBrZXk9Im5hbWUi
IGFzIHxwZXJzb258fX0KLSAgICAgIHt7cGVyc29uLm5hbWV9fQotICAgICAge3shIGB0aGlzYCBp
cyB3aGF0ZXZlciBpdCB3YXMgb3V0c2lkZSB0aGUgI2VhY2ggfX0KLSAgICB7ey9lYWNofX0KLSAg
ICBgYGAKLSAgCi0gICAgVGhlIHNhbWUgcnVsZXMgYXBwbHkgdG8gYXJyYXlzIG9mIHByaW1pdGl2
ZXMuCi0gIAotICAgIGBgYGphdmFzY3JpcHQKLSAgICB2YXIgZGV2ZWxvcGVyTmFtZXMgPSBbJ1ll
aHVkYScsICdUb20nLCAnUGF1bCddCi0gICAgYGBgCi0gIAotICAgIGBgYGhhbmRsZWJhcnMKLSAg
ICB7eyNlYWNoIGRldmVsb3Blck5hbWVzIGtleT0iQGluZGV4IiBhcyB8bmFtZXx9fQotICAgICAg
e3tuYW1lfX0KLSAgICB7ey9lYWNofX0KLSAgICBgYGAKLSAgCi0gICAgRHVyaW5nIGl0ZXJhdGlv
biwgdGhlIGluZGV4IG9mIGVhY2ggaXRlbSBpbiB0aGUgYXJyYXkgaXMgcHJvdmlkZWQgYXMgYSBz
ZWNvbmQgYmxvY2sgcGFyYW1ldGVyLgotICAKLSAgICBgYGBoYW5kbGViYXJzCi0gICAgPHVsPgot
ICAgICAge3sjZWFjaCBwZW9wbGUgYXMgfHBlcnNvbiBpbmRleHx9fQotICAgICAgICA8bGk+SGVs
bG8sIHt7cGVyc29uLm5hbWV9fSEgWW91J3JlIG51bWJlciB7e2luZGV4fX0gaW4gbGluZTwvbGk+
Ci0gICAgICB7ey9lYWNofX0KLSAgICA8L3VsPgotICAgIGBgYAotICAKLSAgICAjIyMgU3BlY2lm
eWluZyBLZXlzCi0gIAotICAgIFRoZSBga2V5YCBvcHRpb24gaXMgdXNlZCB0byB0ZWxsIEVtYmVy
IGhvdyB0byBkZXRlcm1pbmUgaWYgdGhlIGFycmF5IGJlaW5nCi0gICAgaXRlcmF0ZWQgb3ZlciB3
aXRoIGB7eyNlYWNofX1gIGhhcyBjaGFuZ2VkIGJldHdlZW4gcmVuZGVycy4gQnkgaGVscGluZyBF
bWJlcgotICAgIGRldGVjdCB0aGF0IHNvbWUgZWxlbWVudHMgaW4gdGhlIGFycmF5IGFyZSB0aGUg
c2FtZSwgRE9NIGVsZW1lbnRzIGNhbiBiZQotICAgIHJlLXVzZWQsIHNpZ25pZmljYW50bHkgaW1w
cm92aW5nIHJlbmRlcmluZyBzcGVlZC4KLSAgCi0gICAgRm9yIGV4YW1wbGUsIGhlcmUncyB0aGUg
YHt7I2VhY2h9fWAgaGVscGVyIHdpdGggaXRzIGBrZXlgIHNldCB0byBgaWRgOgotICAKLSAgICBg
YGBoYW5kbGViYXJzCi0gICAge3sjZWFjaCBtb2RlbCBrZXk9ImlkIiBhcyB8aXRlbXx9fQotICAg
IHt7L2VhY2h9fQotICAgIGBgYAotICAKLSAgICBXaGVuIHRoaXMgYHt7I2VhY2h9fWAgcmUtcmVu
ZGVycywgRW1iZXIgd2lsbCBtYXRjaCB1cCB0aGUgcHJldmlvdXNseSByZW5kZXJlZAotICAgIGl0
ZW1zIChhbmQgcmVvcmRlciB0aGUgZ2VuZXJhdGVkIERPTSBlbGVtZW50cykgYmFzZWQgb24gZWFj
aCBpdGVtJ3MgYGlkYAotICAgIHByb3BlcnR5LgotICAKLSAgICBCeSBkZWZhdWx0IHRoZSBpdGVt
J3Mgb3duIHJlZmVyZW5jZSBpcyB1c2VkLgotICAKLSAgICAjIyMge3tlbHNlfX0gY29uZGl0aW9u
Ci0gIAotICAgIGB7eyNlYWNofX1gIGNhbiBoYXZlIGEgbWF0Y2hpbmcgYHt7ZWxzZX19YC4gVGhl
IGNvbnRlbnRzIG9mIHRoaXMgYmxvY2sgd2lsbCByZW5kZXIKLSAgICBpZiB0aGUgY29sbGVjdGlv
biBpcyBlbXB0eS4KLSAgCi0gICAgYGBgaGFuZGxlYmFycwotICAgIHt7I2VhY2ggZGV2ZWxvcGVy
cyBhcyB8cGVyc29ufH19Ci0gICAgICB7e3BlcnNvbi5uYW1lfX0KLSAgICB7e2Vsc2V9fQotICAg
ICAgPHA+U29ycnksIG5vYm9keSBpcyBhdmFpbGFibGUgZm9yIHRoaXMgdGFzay48L3A+Ci0gICAg
e3svZWFjaH19Ci0gICAgYGBgCi0gIAotICAgIEBtZXRob2QgZWFjaAotICAgIEBmb3IgRW1iZXIu
VGVtcGxhdGVzLmhlbHBlcnMKLSAgICBAcHVibGljCi0gICovCi0KLSAgZnVuY3Rpb24gZWFjaEhl
bHBlcihwYXJhbXMsIGhhc2gsIGJsb2NrcykgewotICAgIHZhciBsaXN0ID0gcGFyYW1zWzBdOwot
ICAgIHZhciBrZXlQYXRoID0gaGFzaC5rZXk7Ci0KLSAgICBpZiAoX2VtYmVyVmlld3NTdHJlYW1z
U2hvdWxkX2Rpc3BsYXkuZGVmYXVsdChsaXN0KSkgewotICAgICAgZm9yRWFjaChsaXN0LCBmdW5j
dGlvbiAoaXRlbSwgaSkgewotICAgICAgICB2YXIga2V5ID0gX2VtYmVySHRtbGJhcnNVdGlsc0Rl
Y29kZUVhY2hLZXkuZGVmYXVsdChpdGVtLCBrZXlQYXRoLCBpKTsKLQotICAgICAgICBibG9ja3Mu
dGVtcGxhdGUueWllbGRJdGVtKGtleSwgW2l0ZW0sIGldKTsKLSAgICAgIH0pOwotICAgIH0gZWxz
ZSBpZiAoYmxvY2tzLmludmVyc2UueWllbGQpIHsKLSAgICAgIGJsb2Nrcy5pbnZlcnNlLnlpZWxk
KCk7Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gZm9yRWFjaChpdGVyYWJsZSwgY2IpIHsKLSAg
ICByZXR1cm4gaXRlcmFibGUuZm9yRWFjaCA/IGl0ZXJhYmxlLmZvckVhY2goY2IpIDogQXJyYXku
cHJvdG90eXBlLmZvckVhY2guY2FsbChpdGVyYWJsZSwgY2IpOwotICB9Ci19KTsKLWVuaWZlZCgi
ZW1iZXItaHRtbGJhcnMvaGVscGVycy9oYXNoIiwgWyJleHBvcnRzIl0sIGZ1bmN0aW9uIChleHBv
cnRzKSB7Ci0gICAvKioKLSAgIEBtb2R1bGUgZW1iZXIKLSAgIEBzdWJtb2R1bGUgZW1iZXItdGVt
cGxhdGVzCi0gICAqLwotCi0gICAvKioKLSAgICAgIFVzZSB0aGUgYHt7aGFzaH19YCBoZWxwZXIg
dG8gY3JlYXRlIGEgaGFzaCB0byBwYXNzIGFzIGFuIG9wdGlvbiB0byB5b3VyCi0gICAgICBjb21w
b25lbnRzLiBUaGlzIGlzIHNwZWNpYWxseSB1c2VmdWwgZm9yIGNvbnRleHR1YWwgY29tcG9uZW50
cyB3aGVyZSB5b3UgY2FuCi0gICAgICBqdXN0IHlpZWxkIGEgaGFzaDoKLSAgICAgIGBgYGhhbmRs
ZWJhcnMKLSAgICAgIHt7eWllbGQgKGhhc2gKLSAgICAgICAgIG5hbWU9J1NhcmFoJwotICAgICAg
ICAgdGl0bGU9b2ZmaWNlCi0gICAgICApfX0KLSAgICAgIGBgYAotICAgICAgV291bGQgcmVzdWx0
IGluIGFuIG9iamVjdCBzdWNoIGFzOgotICAgICAgYGBganMKLSAgICAgIHsgbmFtZTogJ1NhcmFo
JywgdGl0bGU6IHRoaXMuZ2V0KCdvZmZpY2UnKSB9Ci0gICAgICBgYGAKLSAgICAgIFdoZXJlIHRo
ZSBgdGl0bGVgIGlzIGJvdW5kIHRvIHVwZGF0ZXMgb2YgdGhlIGBvZmZpY2VgIHByb3BlcnR5Lgot
ICAgICAgQG1ldGhvZCBoYXNoCi0gICAgICBAZm9yIEVtYmVyLlRlbXBsYXRlcy5oZWxwZXJzCi0g
ICAgICBAcGFyYW0ge09iamVjdH0gb3B0aW9ucwotICAgICAgQHJldHVybiB7T2JqZWN0fSBIYXNo
Ci0gICAgICBAcHVibGljCi0gICAgKi8KLQotICAgInVzZSBzdHJpY3QiOwotCi0gICBleHBvcnRz
LmRlZmF1bHQgPSBoYXNoSGVscGVyOwotCi0gICBmdW5jdGlvbiBoYXNoSGVscGVyKHBhcmFtcywg
aGFzaCwgb3B0aW9ucykgewotICAgICAgcmV0dXJuIGhhc2g7Ci0gICB9Ci19KTsKLWVuaWZlZCgn
ZW1iZXItaHRtbGJhcnMvaGVscGVycy9pZl91bmxlc3MnLCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0
YWwvZGVidWcnLCAnZW1iZXItdmlld3Mvc3RyZWFtcy9zaG91bGRfZGlzcGxheSddLCBmdW5jdGlv
biAoZXhwb3J0cywgX2VtYmVyTWV0YWxEZWJ1ZywgX2VtYmVyVmlld3NTdHJlYW1zU2hvdWxkX2Rp
c3BsYXkpIHsKLSAgLyoqCi0gIEBtb2R1bGUgZW1iZXIKLSAgQHN1Ym1vZHVsZSBlbWJlci10ZW1w
bGF0ZXMKLSAgKi8KLQotICAndXNlIHN0cmljdCc7Ci0KLSAgLyoqCi0gICAgVXNlIHRoZSBgaWZg
IGJsb2NrIGhlbHBlciB0byBjb25kaXRpb25hbGx5IHJlbmRlciBhIGJsb2NrIGRlcGVuZGluZyBv
biBhCi0gICAgcHJvcGVydHkuIElmIHRoZSBwcm9wZXJ0eSBpcyAiZmFsc2V5IiwgZm9yIGV4YW1w
bGU6IGBmYWxzZWAsIGB1bmRlZmluZWRgLAotICAgYG51bGxgLCBgIiJgLCBgMGAsIGBOYU5gIG9y
IGFuIGVtcHR5IGFycmF5LCB0aGUgYmxvY2sgd2lsbCBub3QgYmUgcmVuZGVyZWQuCi0gIAotICAg
YGBgaGFuZGxlYmFycwotICAgIHt7ISB3aWxsIG5vdCByZW5kZXIgaWYgZm9vIGlzIGZhbHNleX19
Ci0gICAge3sjaWYgZm9vfX0KLSAgICAgIFdlbGNvbWUgdG8gdGhlIHt7Zm9vLmJhcn19Ci0gICAg
e3svaWZ9fQotICAgIGBgYAotICAKLSAgICBZb3UgY2FuIGFsc28gc3BlY2lmeSBhIHRlbXBsYXRl
IHRvIHNob3cgaWYgdGhlIHByb3BlcnR5IGlzIGZhbHNleSBieSB1c2luZwotICAgIHRoZSBgZWxz
ZWAgaGVscGVyLgotICAKLSAgICBgYGBoYW5kbGViYXJzCi0gICAge3shIGlzIGl0IHJhaW5pbmcg
b3V0c2lkZT99fQotICAgIHt7I2lmIGlzUmFpbmluZ319Ci0gICAgICBZZXMsIGdyYWIgYW4gdW1i
cmVsbGEhCi0gICAge3tlbHNlfX0KLSAgICAgIE5vLCBpdCdzIGxvdmVseSBvdXRzaWRlIQotICAg
IHt7L2lmfX0KLSAgICBgYGAKLSAgCi0gICAgWW91IGFyZSBhbHNvIGFibGUgdG8gY29tYmluZSBg
ZWxzZWAgYW5kIGBpZmAgaGVscGVycyB0byBjcmVhdGUgbW9yZSBjb21wbGV4Ci0gICAgY29uZGl0
aW9uYWwgbG9naWMuCi0gIAotICAgIGBgYGhhbmRsZWJhcnMKLSAgICB7eyNpZiBpc01vcm5pbmd9
fQotICAgICAgR29vZCBtb3JuaW5nCi0gICAge3tlbHNlIGlmIGlzQWZ0ZXJub29ufX0KLSAgICAg
IEdvb2QgYWZ0ZXJub29uCi0gICAge3tlbHNlfX0KLSAgICAgIEdvb2QgbmlnaHQKLSAgICB7ey9p
Zn19Ci0gICAgYGBgCi0gIAotICAgIFlvdSBjYW4gdXNlIGBpZmAgaW5saW5lIHRvIGNvbmRpdGlv
bmFsbHkgcmVuZGVyIGEgc2luZ2xlIHByb3BlcnR5IG9yIHN0cmluZy4KLSAgICBUaGlzIGhlbHBl
ciBhY3RzIGxpa2UgYSB0ZXJuYXJ5IG9wZXJhdG9yLiBJZiB0aGUgZmlyc3QgcHJvcGVydHkgaXMg
dHJ1dGh5LAotICAgIHRoZSBzZWNvbmQgYXJndW1lbnQgd2lsbCBiZSBkaXNwbGF5ZWQsIGlmIG5v
dCwgdGhlIHRoaXJkIGFyZ3VtZW50IHdpbGwgYmUKLSAgICBkaXNwbGF5ZWQKLSAgCi0gICAgYGBg
aGFuZGxlYmFycwotICAgIHt7aWYgdXNlTG9uZ0dyZWV0aW5nICJIZWxsbyIgIkhpIn19IERhdmUK
LSAgICBgYGAKLSAgCi0gICAgRmluYWxseSwgeW91IGNhbiB1c2UgdGhlIGBpZmAgaGVscGVyIGlu
c2lkZSBhbm90aGVyIGhlbHBlciBhcyBhIHN1YmV4cHJlc3Npb24uCi0gIAotICAgIGBgYGhhbmRs
ZWJhcnMKLSAgICB7e3NvbWUtY29tcG9uZW50IGhlaWdodD0oaWYgaXNCaWcgIjEwMCIgIjEwIil9
fQotICAgIGBgYAotICAKLSAgICBAbWV0aG9kIGlmCi0gICAgQGZvciBFbWJlci5UZW1wbGF0ZXMu
aGVscGVycwotICAgIEBwdWJsaWMKLSAgKi8KLSAgZnVuY3Rpb24gaWZIZWxwZXIocGFyYW1zLCBo
YXNoLCBvcHRpb25zKSB7Ci0gICAgcmV0dXJuIGlmVW5sZXNzKHBhcmFtcywgaGFzaCwgb3B0aW9u
cywgX2VtYmVyVmlld3NTdHJlYW1zU2hvdWxkX2Rpc3BsYXkuZGVmYXVsdChwYXJhbXNbMF0pKTsK
LSAgfQotCi0gIC8qKgotICAgIFRoZSBgdW5sZXNzYCBoZWxwZXIgaXMgdGhlIGludmVyc2Ugb2Yg
dGhlIGBpZmAgaGVscGVyLiBJdHMgYmxvY2sgd2lsbCBiZQotICAgIHJlbmRlcmVkIGlmIHRoZSBl
eHByZXNzaW9uIGNvbnRhaW5zIGEgZmFsc2V5IHZhbHVlLiAgQWxsIGZvcm1zIG9mIHRoZSBgaWZg
Ci0gICAgaGVscGVyIGNhbiBhbHNvIGJlIHVzZWQgd2l0aCBgdW5sZXNzYC4KLSAgCi0gICAgQG1l
dGhvZCB1bmxlc3MKLSAgICBAZm9yIEVtYmVyLlRlbXBsYXRlcy5oZWxwZXJzCi0gICAgQHB1Ymxp
YwotICAqLwotICBmdW5jdGlvbiB1bmxlc3NIZWxwZXIocGFyYW1zLCBoYXNoLCBvcHRpb25zKSB7
Ci0gICAgcmV0dXJuIGlmVW5sZXNzKHBhcmFtcywgaGFzaCwgb3B0aW9ucywgIV9lbWJlclZpZXdz
U3RyZWFtc1Nob3VsZF9kaXNwbGF5LmRlZmF1bHQocGFyYW1zWzBdKSk7Ci0gIH0KLQotICBmdW5j
dGlvbiBpZlVubGVzcyhwYXJhbXMsIGhhc2gsIG9wdGlvbnMsIHRydXRoeSkgewotICAgIF9lbWJl
ck1ldGFsRGVidWcuYXNzZXJ0KCdUaGUgYmxvY2sgZm9ybSBvZiB0aGUgYGlmYCBhbmQgYHVubGVz
c2AgaGVscGVycyBleHBlY3QgZXhhY3RseSBvbmUgJyArICdhcmd1bWVudCwgZS5nLiBge3sjaWYg
bmV3TWVzc2FnZXN9fSBZb3UgaGF2ZSBuZXcgbWVzc2FnZXMuIHt7L2lmfX0uYCcsICFvcHRpb25z
LnRlbXBsYXRlLnlpZWxkIHx8IHBhcmFtcy5sZW5ndGggPT09IDEpOwotCi0gICAgX2VtYmVyTWV0
YWxEZWJ1Zy5hc3NlcnQoJ1RoZSBpbmxpbmUgZm9ybSBvZiB0aGUgYGlmYCBhbmQgYHVubGVzc2Ag
aGVscGVycyBleHBlY3QgdHdvIG9yICcgKyAndGhyZWUgYXJndW1lbnRzLCBlLmcuIGB7e2lmIHRy
aWFsRXhwaXJlZCBcJ0V4cGlyZWRcJyBleHBpcnlEYXRlfX1gICcgKyAnb3IgYHt7dW5sZXNzIGlz
Rmlyc3RMb2dpbiBcJ1dlbGNvbWUgYmFjayFcJ319YC4nLCAhIW9wdGlvbnMudGVtcGxhdGUueWll
bGQgfHwgcGFyYW1zLmxlbmd0aCA9PT0gMiB8fCBwYXJhbXMubGVuZ3RoID09PSAzKTsKLQotICAg
IGlmICh0cnV0aHkpIHsKLSAgICAgIGlmIChvcHRpb25zLnRlbXBsYXRlLnlpZWxkKSB7Ci0gICAg
ICAgIG9wdGlvbnMudGVtcGxhdGUueWllbGQoKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHJl
dHVybiBwYXJhbXNbMV07Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIGlmIChvcHRpb25z
LmludmVyc2UueWllbGQpIHsKLSAgICAgICAgb3B0aW9ucy5pbnZlcnNlLnlpZWxkKCk7Ci0gICAg
ICB9IGVsc2UgewotICAgICAgICByZXR1cm4gcGFyYW1zWzJdOwotICAgICAgfQotICAgIH0KLSAg
fQotCi0gIGV4cG9ydHMuaWZIZWxwZXIgPSBpZkhlbHBlcjsKLSAgZXhwb3J0cy51bmxlc3NIZWxw
ZXIgPSB1bmxlc3NIZWxwZXI7Ci19KTsKLWVuaWZlZCgnZW1iZXItaHRtbGJhcnMvaGVscGVycy9s
b2MnLCBbJ2V4cG9ydHMnLCAnZW1iZXItaHRtbGJhcnMvaGVscGVyJywgJ2VtYmVyLXJ1bnRpbWUv
c3lzdGVtL3N0cmluZyddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVySHRtbGJhcnNIZWxwZXIs
IF9lbWJlclJ1bnRpbWVTeXN0ZW1TdHJpbmcpIHsKLSAgJ3VzZSBzdHJpY3QnOwotCi0gIC8qKgot
ICBAbW9kdWxlIGVtYmVyCi0gIEBzdWJtb2R1bGUgZW1iZXItdGVtcGxhdGVzCi0gICovCi0KLSAg
LyoqCi0gICAgQ2FsbHMgW0VtYmVyLlN0cmluZy5sb2NdKC9hcGkvY2xhc3Nlcy9FbWJlci5TdHJp
bmcuaHRtbCNtZXRob2RfbG9jKSB3aXRoIHRoZQotICAgIHByb3ZpZGVkIHN0cmluZy4gVGhpcyBp
cyBhIGNvbnZlbmllbnQgd2F5IHRvIGxvY2FsaXplIHRleHQgd2l0aGluIGEgdGVtcGxhdGUuCi0g
ICAgRm9yIGV4YW1wbGU6Ci0gIAotICAgIGBgYGphdmFzY3JpcHQKLSAgICBFbWJlci5TVFJJTkdT
ID0gewotICAgICAgJ193ZWxjb21lXyc6ICdCb25qb3VyJwotICAgIH07Ci0gICAgYGBgCi0gIAot
ICAgIGBgYGhhbmRsZWJhcnMKLSAgICA8ZGl2IGNsYXNzPSdtZXNzYWdlJz4KLSAgICAgIHt7bG9j
ICdfd2VsY29tZV8nfX0KLSAgICA8L2Rpdj4KLSAgICBgYGAKLSAgCi0gICAgYGBgaHRtbAotICAg
IDxkaXYgY2xhc3M9J21lc3NhZ2UnPgotICAgICAgQm9uam91cgotICAgIDwvZGl2PgotICAgIGBg
YAotICAKLSAgICBTZWUgW0VtYmVyLlN0cmluZy5sb2NdKC9hcGkvY2xhc3Nlcy9FbWJlci5TdHJp
bmcuaHRtbCNtZXRob2RfbG9jKSBmb3IgaG93IHRvCi0gICAgc2V0IHVwIGxvY2FsaXplZCBzdHJp
bmcgcmVmZXJlbmNlcy4KLSAgCi0gICAgQG1ldGhvZCBsb2MKLSAgICBAZm9yIEVtYmVyLlRlbXBs
YXRlcy5oZWxwZXJzCi0gICAgQHBhcmFtIHtTdHJpbmd9IHN0ciBUaGUgc3RyaW5nIHRvIGZvcm1h
dC4KLSAgICBAc2VlIHtFbWJlci5TdHJpbmcjbG9jfQotICAgIEBwdWJsaWMKLSAgKi8KLSAgZnVu
Y3Rpb24gbG9jSGVscGVyKHBhcmFtcykgewotICAgIHJldHVybiBfZW1iZXJSdW50aW1lU3lzdGVt
U3RyaW5nLmxvYy5hcHBseShudWxsLCBwYXJhbXMpOwotICB9Ci0KLSAgZXhwb3J0cy5kZWZhdWx0
ID0gX2VtYmVySHRtbGJhcnNIZWxwZXIuaGVscGVyKGxvY0hlbHBlcik7Ci19KTsKLWVuaWZlZCgn
ZW1iZXItaHRtbGJhcnMvaGVscGVycy9sb2cnLCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwvbG9n
Z2VyJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbExvZ2dlcikgewotICAvKioKLSAg
QG1vZHVsZSBlbWJlcgotICBAc3VibW9kdWxlIGVtYmVyLXRlbXBsYXRlcwotICAqLwotCi0gICd1
c2Ugc3RyaWN0JzsKLQotICBleHBvcnRzLmRlZmF1bHQgPSBsb2dIZWxwZXI7Ci0KLSAgLyoqCi0g
ICAgYGxvZ2AgYWxsb3dzIHlvdSB0byBvdXRwdXQgdGhlIHZhbHVlIG9mIHZhcmlhYmxlcyBpbiB0
aGUgY3VycmVudCByZW5kZXJpbmcKLSAgICBjb250ZXh0LiBgbG9nYCBhbHNvIGFjY2VwdHMgcHJp
bWl0aXZlIHR5cGVzIHN1Y2ggYXMgc3RyaW5ncyBvciBudW1iZXJzLgotICAKLSAgICBgYGBoYW5k
bGViYXJzCi0gICAge3tsb2cgIm15VmFyaWFibGU6IiBteVZhcmlhYmxlIH19Ci0gICAgYGBgCi0g
IAotICAgIEBtZXRob2QgbG9nCi0gICAgQGZvciBFbWJlci5UZW1wbGF0ZXMuaGVscGVycwotICAg
IEBwYXJhbSB7Kn0gdmFsdWVzCi0gICAgQHB1YmxpYwotICAqLwotCi0gIGZ1bmN0aW9uIGxvZ0hl
bHBlcih2YWx1ZXMpIHsKLSAgICBfZW1iZXJNZXRhbExvZ2dlci5kZWZhdWx0LmxvZy5hcHBseShu
dWxsLCB2YWx1ZXMpOwotICB9Ci19KTsKLWVuaWZlZCgnZW1iZXItaHRtbGJhcnMvaGVscGVycy93
aXRoJywgWydleHBvcnRzJywgJ2VtYmVyLXZpZXdzL3N0cmVhbXMvc2hvdWxkX2Rpc3BsYXknXSwg
ZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlclZpZXdzU3RyZWFtc1Nob3VsZF9kaXNwbGF5KSB7Ci0g
IC8qKgotICBAbW9kdWxlIGVtYmVyCi0gIEBzdWJtb2R1bGUgZW1iZXItdGVtcGxhdGVzCi0gICov
Ci0KLSAgJ3VzZSBzdHJpY3QnOwotCi0gIGV4cG9ydHMuZGVmYXVsdCA9IHdpdGhIZWxwZXI7Ci0K
LSAgLyoqCi0gICAgVXNlIHRoZSBge3t3aXRofX1gIGhlbHBlciB3aGVuIHlvdSB3YW50IHRvIGFs
aWFzIGEgcHJvcGVydHkgdG8gYSBuZXcgbmFtZS4gVGhpcyBpcyBoZWxwZnVsCi0gICAgZm9yIHNl
bWFudGljIGNsYXJpdHkgYXMgaXQgYWxsb3dzIHlvdSB0byByZXRhaW4gZGVmYXVsdCBzY29wZSBv
ciB0byByZWZlcmVuY2UgYSBwcm9wZXJ0eSBmcm9tIGFub3RoZXIKLSAgICBge3t3aXRofX1gIGJs
b2NrLgotICAKLSAgICBJZiB0aGUgYWxpYXNlZCBwcm9wZXJ0eSBpcyAiZmFsc2V5IiwgZm9yIGV4
YW1wbGU6IGBmYWxzZWAsIGB1bmRlZmluZWRgIGBudWxsYCwgYCIiYCwgYDBgLCBOYU4gb3IKLSAg
ICBhbiBlbXB0eSBhcnJheSwgdGhlIGJsb2NrIHdpbGwgbm90IGJlIHJlbmRlcmVkLgotICAKLSAg
ICBgYGBoYW5kbGViYXJzCi0gICAge3shIFdpbGwgb25seSByZW5kZXIgaWYgdXNlci5wb3N0cyBj
b250YWlucyBpdGVtc319Ci0gICAge3sjd2l0aCB1c2VyLnBvc3RzIGFzIHxibG9nUG9zdHN8fX0K
LSAgICAgIDxkaXYgY2xhc3M9Im5vdGljZSI+Ci0gICAgICAgIFRoZXJlIGFyZSB7e2Jsb2dQb3N0
cy5sZW5ndGh9fSBibG9nIHBvc3RzIHdyaXR0ZW4gYnkge3t1c2VyLm5hbWV9fS4KLSAgICAgIDwv
ZGl2PgotICAgICAge3sjZWFjaCBibG9nUG9zdHMgYXMgfHBvc3R8fX0KLSAgICAgICAgPGxpPnt7
cG9zdC50aXRsZX19PC9saT4KLSAgICAgIHt7L2VhY2h9fQotICAgIHt7L3dpdGh9fQotICAgIGBg
YAotICAKLSAgICBXaXRob3V0IHRoZSBgYXNgIG9wZXJhdG9yLCBpdCB3b3VsZCBiZSBpbXBvc3Np
YmxlIHRvIHJlZmVyZW5jZSBgdXNlci5uYW1lYCBpbiB0aGUgZXhhbXBsZSBhYm92ZS4KLSAgCi0g
ICAgTk9URTogVGhlIGFsaWFzIHNob3VsZCBub3QgcmV1c2UgYSBuYW1lIGZyb20gdGhlIGJvdW5k
IHByb3BlcnR5IHBhdGguCi0gICAgRm9yIGV4YW1wbGU6IGB7eyN3aXRoIGZvby5iYXIgYXMgfGZv
b3x9fWAgaXMgbm90IHN1cHBvcnRlZCBiZWNhdXNlIGl0IGF0dGVtcHRzIHRvIGFsaWFzIHVzaW5n
Ci0gICAgdGhlIGZpcnN0IHBhcnQgb2YgdGhlIHByb3BlcnR5IHBhdGgsIGBmb29gLiBJbnN0ZWFk
LCB1c2UgYHt7I3dpdGggZm9vLmJhciBhcyB8YmF6fH19YC4KLSAgCi0gICAgQG1ldGhvZCB3aXRo
Ci0gICAgQGZvciBFbWJlci5UZW1wbGF0ZXMuaGVscGVycwotICAgIEBwYXJhbSB7T2JqZWN0fSBv
cHRpb25zCi0gICAgQHJldHVybiB7U3RyaW5nfSBIVE1MIHN0cmluZwotICAgIEBwdWJsaWMKLSAg
Ki8KLQotICBmdW5jdGlvbiB3aXRoSGVscGVyKHBhcmFtcywgaGFzaCwgb3B0aW9ucykgewotICAg
IGlmIChfZW1iZXJWaWV3c1N0cmVhbXNTaG91bGRfZGlzcGxheS5kZWZhdWx0KHBhcmFtc1swXSkp
IHsKLSAgICAgIG9wdGlvbnMudGVtcGxhdGUueWllbGQoW3BhcmFtc1swXV0pOwotICAgIH0gZWxz
ZSBpZiAob3B0aW9ucy5pbnZlcnNlICYmIG9wdGlvbnMuaW52ZXJzZS55aWVsZCkgewotICAgICAg
b3B0aW9ucy5pbnZlcnNlLnlpZWxkKFtdKTsKLSAgICB9Ci0gIH0KLX0pOwotZW5pZmVkKCdlbWJl
ci1odG1sYmFycy9ob29rcy9iaW5kLWJsb2NrJywgWydleHBvcnRzJ10sIGZ1bmN0aW9uIChleHBv
cnRzKSB7Ci0gICd1c2Ugc3RyaWN0JzsKLQotICBleHBvcnRzLmRlZmF1bHQgPSBiaW5kQmxvY2s7
Ci0KLSAgZnVuY3Rpb24gYmluZEJsb2NrKGVudiwgc2NvcGUsIGJsb2NrKSB7Ci0gICAgdmFyIG5h
bWUgPSBhcmd1bWVudHMubGVuZ3RoIDw9IDMgfHwgYXJndW1lbnRzWzNdID09PSB1bmRlZmluZWQg
PyAnZGVmYXVsdCcgOiBhcmd1bWVudHNbM107Ci0KLSAgICBzY29wZS5iaW5kQmxvY2sobmFtZSwg
YmxvY2spOwotICB9Ci19KTsKLWVuaWZlZCgnZW1iZXItaHRtbGJhcnMvaG9va3MvYmluZC1sb2Nh
bCcsIFsnZXhwb3J0cycsICdlbWJlci1tZXRhbC9zdHJlYW1zL3N0cmVhbScsICdlbWJlci1tZXRh
bC9zdHJlYW1zL3Byb3h5LXN0cmVhbSddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0YWxT
dHJlYW1zU3RyZWFtLCBfZW1iZXJNZXRhbFN0cmVhbXNQcm94eVN0cmVhbSkgewotICAvKioKLSAg
QG1vZHVsZSBlbWJlcgotICBAc3VibW9kdWxlIGVtYmVyLWh0bWxiYXJzCi0gICovCi0KLSAgJ3Vz
ZSBzdHJpY3QnOwotCi0gIGV4cG9ydHMuZGVmYXVsdCA9IGJpbmRMb2NhbDsKLQotICBmdW5jdGlv
biBiaW5kTG9jYWwoZW52LCBzY29wZSwga2V5LCB2YWx1ZSkgewotICAgIC8vIFRPRE86IFdoYXQg
aXMgdGhlIGNhdXNlIG9mIHRoZXNlIGNhc2VzPwotICAgIGlmIChzY29wZS5oYXNPd25Mb2NhbChr
ZXkpKSB7Ci0gICAgICB2YXIgZXhpc3RpbmcgPSBzY29wZS5nZXRMb2NhbChrZXkpOwotICAgICAg
aWYgKGV4aXN0aW5nICE9PSB2YWx1ZSkgewotICAgICAgICBleGlzdGluZy5zZXRTb3VyY2UodmFs
dWUpOwotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICB2YXIgbmV3VmFsdWUgPSBfZW1iZXJN
ZXRhbFN0cmVhbXNTdHJlYW0ud3JhcCh2YWx1ZSwgX2VtYmVyTWV0YWxTdHJlYW1zUHJveHlTdHJl
YW0uZGVmYXVsdCwga2V5KTsKLSAgICAgIHNjb3BlLmJpbmRMb2NhbChrZXksIG5ld1ZhbHVlKTsK
LSAgICB9Ci0gIH0KLX0pOwotZW5pZmVkKCJlbWJlci1odG1sYmFycy9ob29rcy9iaW5kLXNjb3Bl
IiwgWyJleHBvcnRzIl0sIGZ1bmN0aW9uIChleHBvcnRzKSB7Ci0gICJ1c2Ugc3RyaWN0IjsKLQot
ICBleHBvcnRzLmRlZmF1bHQgPSBiaW5kU2NvcGU7Ci0KLSAgZnVuY3Rpb24gYmluZFNjb3BlKGVu
diwgc2NvcGUpIHt9Ci19KTsKLWVuaWZlZCgnZW1iZXItaHRtbGJhcnMvaG9va3MvYmluZC1zZWxm
JywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFsJywgJ2VtYmVyLW1ldGFsL3N0cmVhbXMvcHJveHkt
c3RyZWFtJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbCwgX2VtYmVyTWV0YWxTdHJl
YW1zUHJveHlTdHJlYW0pIHsKLSAgLyoqCi0gIEBtb2R1bGUgZW1iZXIKLSAgQHN1Ym1vZHVsZSBl
bWJlci1odG1sYmFycwotICAqLwotCi0gICd1c2Ugc3RyaWN0JzsKLQotICBleHBvcnRzLmRlZmF1
bHQgPSBiaW5kU2VsZjsKLQotICBmdW5jdGlvbiBiaW5kU2VsZihlbnYsIHNjb3BlLCBzZWxmKSB7
Ci0gICAgaWYgKHNlbGYgJiYgc2VsZi5pc1ZpZXcpIHsKLSAgICAgIGlmICghIV9lbWJlck1ldGFs
LmRlZmF1bHQuRU5WLl9FTkFCTEVfTEVHQUNZX1ZJRVdfU1VQUE9SVCkgewotICAgICAgICBzY29w
ZS5iaW5kTG9jYWwoJ3ZpZXcnLCBuZXdTdHJlYW0oc2VsZiwgJ3ZpZXcnKSk7Ci0gICAgICB9Ci0K
LSAgICAgIHZhciBfc2VsZlN0cmVhbSA9IG5ld1N0cmVhbShzZWxmLCAnJyk7Ci0KLSAgICAgIGlm
IChzZWxmLmlzR2xpbW1lckNvbXBvbmVudCkgewotICAgICAgICBzY29wZS5iaW5kU2VsZihfc2Vs
ZlN0cmVhbSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBzY29wZS5iaW5kU2VsZihuZXdTdHJl
YW0oX3NlbGZTdHJlYW0uZ2V0S2V5KCdjb250ZXh0JyksICcnKSk7Ci0gICAgICB9Ci0KLSAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICB2YXIgc2VsZlN0cmVhbSA9IG5ld1N0cmVhbShzZWxmLCAn
Jyk7Ci0gICAgc2NvcGUuYmluZFNlbGYoc2VsZlN0cmVhbSk7Ci0gIH0KLQotICBmdW5jdGlvbiBu
ZXdTdHJlYW0obmV3VmFsdWUsIGtleSkgewotICAgIHJldHVybiBuZXcgX2VtYmVyTWV0YWxTdHJl
YW1zUHJveHlTdHJlYW0uZGVmYXVsdChuZXdWYWx1ZSwga2V5KTsKLSAgfQotfSk7Ci1lbmlmZWQo
J2VtYmVyLWh0bWxiYXJzL2hvb2tzL2JpbmQtc2hhZG93LXNjb3BlJywgWydleHBvcnRzJywgJ2Vt
YmVyLW1ldGFsL3N0cmVhbXMvcHJveHktc3RyZWFtJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1i
ZXJNZXRhbFN0cmVhbXNQcm94eVN0cmVhbSkgewotICAvKioKLSAgQG1vZHVsZSBlbWJlcgotICBA
c3VibW9kdWxlIGVtYmVyLWh0bWxiYXJzCi0gICovCi0KLSAgJ3VzZSBzdHJpY3QnOwotCi0gIGV4
cG9ydHMuZGVmYXVsdCA9IGJpbmRTaGFkb3dTY29wZTsKLQotICBmdW5jdGlvbiBiaW5kU2hhZG93
U2NvcGUoZW52LCBwYXJlbnRTY29wZSwgc2hhZG93U2NvcGUsIG9wdGlvbnMpIHsKLSAgICBpZiAo
IW9wdGlvbnMpIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICB2YXIgdmlldyA9IG9wdGlv
bnMudmlldzsKLSAgICBpZiAodmlldyAmJiAhdmlldy5pc0NvbXBvbmVudCkgewotICAgICAgc2hh
ZG93U2NvcGUuYmluZExvY2FsKCd2aWV3JywgbmV3U3RyZWFtKHZpZXcsICd2aWV3JykpOwotCi0g
ICAgICBpZiAodmlldy5pc1ZpZXcpIHsKLSAgICAgICAgc2hhZG93U2NvcGUuYmluZFNlbGYobmV3
U3RyZWFtKHNoYWRvd1Njb3BlLmdldExvY2FsKCd2aWV3JykuZ2V0S2V5KCdjb250ZXh0JyksICcn
KSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgc2hhZG93U2NvcGUuYmluZFZpZXcodmlldyk7Ci0K
LSAgICBpZiAodmlldyAmJiBvcHRpb25zLmF0dHJzKSB7Ci0gICAgICBzaGFkb3dTY29wZS5iaW5k
Q29tcG9uZW50KHZpZXcpOwotICAgIH0KLQotICAgIGlmICgnYXR0cnMnIGluIG9wdGlvbnMpIHsK
LSAgICAgIHNoYWRvd1Njb3BlLmJpbmRBdHRycyhvcHRpb25zLmF0dHJzKTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gc2hhZG93U2NvcGU7Ci0gIH0KLQotICBmdW5jdGlvbiBuZXdTdHJlYW0obmV3VmFs
dWUsIGtleSkgewotICAgIHJldHVybiBuZXcgX2VtYmVyTWV0YWxTdHJlYW1zUHJveHlTdHJlYW0u
ZGVmYXVsdChuZXdWYWx1ZSwga2V5KTsKLSAgfQotfSk7Ci1lbmlmZWQoJ2VtYmVyLWh0bWxiYXJz
L2hvb2tzL2NsYXNzaWZ5JywgWydleHBvcnRzJywgJ2VtYmVyLWh0bWxiYXJzL3V0aWxzL2lzLWNv
bXBvbmVudCddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVySHRtbGJhcnNVdGlsc0lzQ29tcG9u
ZW50KSB7Ci0gIC8qKgotICBAbW9kdWxlIGVtYmVyCi0gIEBzdWJtb2R1bGUgZW1iZXItaHRtbGJh
cnMKLSAgKi8KLQotICAndXNlIHN0cmljdCc7Ci0KLSAgZXhwb3J0cy5kZWZhdWx0ID0gY2xhc3Np
Znk7Ci0KLSAgZnVuY3Rpb24gY2xhc3NpZnkoZW52LCBzY29wZSwgcGF0aCkgewotICAgIGlmIChf
ZW1iZXJIdG1sYmFyc1V0aWxzSXNDb21wb25lbnQuZGVmYXVsdChlbnYsIHNjb3BlLCBwYXRoKSkg
ewotICAgICAgcmV0dXJuICdjb21wb25lbnQnOwotICAgIH0KLQotICAgIHJldHVybiBudWxsOwot
ICB9Ci19KTsKLWVuaWZlZCgiZW1iZXItaHRtbGJhcnMvaG9va3MvY2xlYW51cC1yZW5kZXItbm9k
ZSIsIFsiZXhwb3J0cyJdLCBmdW5jdGlvbiAoZXhwb3J0cykgewotICAvKioKLSAgQG1vZHVsZSBl
bWJlcgotICBAc3VibW9kdWxlIGVtYmVyLWh0bWxiYXJzCi0gICovCi0KLSAgInVzZSBzdHJpY3Qi
OwotCi0gIGV4cG9ydHMuZGVmYXVsdCA9IGNsZWFudXBSZW5kZXJOb2RlOwotCi0gIGZ1bmN0aW9u
IGNsZWFudXBSZW5kZXJOb2RlKHJlbmRlck5vZGUpIHsKLSAgICBpZiAocmVuZGVyTm9kZS5jbGVh
bnVwKSB7Ci0gICAgICByZW5kZXJOb2RlLmNsZWFudXAoKTsKLSAgICB9Ci0gIH0KLX0pOwotZW5p
ZmVkKCdlbWJlci1odG1sYmFycy9ob29rcy9jb21wb25lbnQnLCBbJ2V4cG9ydHMnLCAnZW1iZXIt
bWV0YWwvZmVhdHVyZXMnLCAnZW1iZXItbWV0YWwvZGVidWcnLCAnZW1iZXItaHRtbGJhcnMvbm9k
ZS1tYW5hZ2Vycy9jb21wb25lbnQtbm9kZS1tYW5hZ2VyJywgJ2VtYmVyLXZpZXdzL3N5c3RlbS9i
dWlsZC1jb21wb25lbnQtdGVtcGxhdGUnLCAnZW1iZXItaHRtbGJhcnMvdXRpbHMvbG9va3VwLWNv
bXBvbmVudCcsICdlbWJlci1tZXRhbC9hc3NpZ24nLCAnZW1iZXItbWV0YWwvZW1wdHlfb2JqZWN0
JywgJ2VtYmVyLW1ldGFsL2NhY2hlJywgJ2VtYmVyLWh0bWxiYXJzL3N5c3RlbS9sb29rdXAtaGVs
cGVyJywgJ2VtYmVyLWh0bWxiYXJzL3V0aWxzL2V4dHJhY3QtcG9zaXRpb25hbC1wYXJhbXMnLCAn
ZW1iZXItaHRtbGJhcnMva2V5d29yZHMvY2xvc3VyZS1jb21wb25lbnQnXSwgZnVuY3Rpb24gKGV4
cG9ydHMsIF9lbWJlck1ldGFsRmVhdHVyZXMsIF9lbWJlck1ldGFsRGVidWcsIF9lbWJlckh0bWxi
YXJzTm9kZU1hbmFnZXJzQ29tcG9uZW50Tm9kZU1hbmFnZXIsIF9lbWJlclZpZXdzU3lzdGVtQnVp
bGRDb21wb25lbnRUZW1wbGF0ZSwgX2VtYmVySHRtbGJhcnNVdGlsc0xvb2t1cENvbXBvbmVudCwg
X2VtYmVyTWV0YWxBc3NpZ24sIF9lbWJlck1ldGFsRW1wdHlfb2JqZWN0LCBfZW1iZXJNZXRhbENh
Y2hlLCBfZW1iZXJIdG1sYmFyc1N5c3RlbUxvb2t1cEhlbHBlciwgX2VtYmVySHRtbGJhcnNVdGls
c0V4dHJhY3RQb3NpdGlvbmFsUGFyYW1zLCBfZW1iZXJIdG1sYmFyc0tleXdvcmRzQ2xvc3VyZUNv
bXBvbmVudCkgewotICAndXNlIHN0cmljdCc7Ci0KLSAgZXhwb3J0cy5kZWZhdWx0ID0gY29tcG9u
ZW50SG9vazsKLQotICB2YXIgSVNfQU5HTEVfQ0FDSEUgPSBuZXcgX2VtYmVyTWV0YWxDYWNoZS5k
ZWZhdWx0KDEwMDAsIGZ1bmN0aW9uIChrZXkpIHsKLSAgICByZXR1cm4ga2V5Lm1hdGNoKC9eKEA/
KTwoLiopPiQvKTsKLSAgfSk7Ci0KLSAgZnVuY3Rpb24gY29tcG9uZW50SG9vayhyZW5kZXJOb2Rl
LCBlbnYsIHNjb3BlLCBfdGFnTmFtZSwgcGFyYW1zLCBhdHRycywgdGVtcGxhdGVzLCB2aXNpdG9y
KSB7Ci0gICAgdmFyIHN0YXRlID0gcmVuZGVyTm9kZS5nZXRTdGF0ZSgpOwotCi0gICAgdmFyIHRh
Z05hbWUgPSBfdGFnTmFtZTsKLSAgICBpZiAoX2VtYmVySHRtbGJhcnNTeXN0ZW1Mb29rdXBIZWxw
ZXIuQ09OVEFJTlNfRE9UX0NBQ0hFLmdldCh0YWdOYW1lKSkgewotICAgICAgdmFyIHN0cmVhbSA9
IGVudi5ob29rcy5nZXQoZW52LCBzY29wZSwgdGFnTmFtZSk7Ci0gICAgICB2YXIgY29tcG9uZW50
Q2VsbCA9IHN0cmVhbS52YWx1ZSgpOwotICAgICAgaWYgKF9lbWJlckh0bWxiYXJzS2V5d29yZHND
bG9zdXJlQ29tcG9uZW50LmlzQ29tcG9uZW50Q2VsbChjb21wb25lbnRDZWxsKSkgewotICAgICAg
ICB0YWdOYW1lID0gY29tcG9uZW50Q2VsbFtfZW1iZXJIdG1sYmFyc0tleXdvcmRzQ2xvc3VyZUNv
bXBvbmVudC5DT01QT05FTlRfUEFUSF07Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogUHJvY2Vz
c2luZyBwb3NpdGlvbmFsIHBhcmFtcyBiZWZvcmUgbWVyZ2luZyBpbnRvIGEgaGFzaCBtdXN0IGJl
IGRvbmUKLSAgICAgICAgICogaGVyZSB0byBhdm9pZCBwcm9ibGVtcyB3aXRoIHJlc3QgcG9zaXRp
b25hbCBwYXJhbWV0ZXJzIHJlbmRlcmVkIHVzaW5nCi0gICAgICAgICAqIHRoZSBkb3Qgbm90YXRp
b24uCi0gICAgICAgICAqCi0gICAgICAgICAqIENsb3N1cmUgY29tcG9uZW50cyAoZm9yIHRoZSBj
b250ZXh0dWFsIGNvbXBvbmVudCBmZWF0dXJlKSBkbyBub3QKLSAgICAgICAgICogYWN0dWFsbHkg
a2VlcCB0aGUgcG9zaXRpb25hbCBwYXJhbXMsIGJ1dCBwcm9jZXNzIHRoZW0gYXQgZWFjaCBsZXZl
bC4KLSAgICAgICAgICogVGhlcmVmb3JlLCB3aGVuIHJlbmRlcmluZyBhIGNsb3N1cmUgY29tcG9u
ZW50IHdpdGggdGhlIGNvbXBvbmVudAotICAgICAgICAgKiBoZWxwZXIgd2UgcHJvY2VzcyB0aGUg
cGFyYW1ldGVycyBhbmQgYXR0cmlidXRlcyBhbmQgdGhlbiBtZXJnZSB0aG9zZQotICAgICAgICAg
KiBvbiB0b3Agb2YgdGhlIGNsb3N1cmUgY29tcG9uZW50IGF0dHJpYnV0ZXMuCi0gICAgICAgICAq
Ci0gICAgICAgICAqLwotICAgICAgICB2YXIgbmV3QXR0cnMgPSBfZW1iZXJNZXRhbEFzc2lnbi5k
ZWZhdWx0KG5ldyBfZW1iZXJNZXRhbEVtcHR5X29iamVjdC5kZWZhdWx0KCksIGF0dHJzKTsKLSAg
ICAgICAgX2VtYmVySHRtbGJhcnNLZXl3b3Jkc0Nsb3N1cmVDb21wb25lbnQucHJvY2Vzc1Bvc2l0
aW9uYWxQYXJhbXNGcm9tQ2VsbChjb21wb25lbnRDZWxsLCBwYXJhbXMsIG5ld0F0dHJzKTsKLSAg
ICAgICAgcGFyYW1zID0gW107Ci0gICAgICAgIGF0dHJzID0gX2VtYmVySHRtbGJhcnNLZXl3b3Jk
c0Nsb3N1cmVDb21wb25lbnQubWVyZ2VJbk5ld0hhc2goY29tcG9uZW50Q2VsbFtfZW1iZXJIdG1s
YmFyc0tleXdvcmRzQ2xvc3VyZUNvbXBvbmVudC5DT01QT05FTlRfSEFTSF0sIG5ld0F0dHJzKTsK
LSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBEZXRlcm1pbmUgaWYgdGhpcyBpcyBhbiBpbml0aWFs
IHJlbmRlciBvciBhIHJlLXJlbmRlci4KLSAgICBpZiAoc3RhdGUubWFuYWdlcikgewotICAgICAg
dmFyIHNtID0gc3RhdGUubWFuYWdlcjsKLSAgICAgIHZhciB0ZW1wbGF0ZU1ldGEgPSBudWxsOwot
ICAgICAgaWYgKHNtLmJsb2NrKSB7Ci0gICAgICAgIHRlbXBsYXRlTWV0YSA9IHNtLmJsb2NrLnRl
bXBsYXRlLm1ldGE7Ci0gICAgICB9IGVsc2UgaWYgKHNtLnNjb3BlICYmIHNtLnNjb3BlLl92aWV3
KSB7Ci0gICAgICAgIHRlbXBsYXRlTWV0YSA9IHNtLnNjb3BlLl92aWV3LnRlbXBsYXRlLm1ldGE7
Ci0gICAgICB9Ci0gICAgICBlbnYubWV0YS5tb2R1bGVOYW1lID0gdGVtcGxhdGVNZXRhICYmIHRl
bXBsYXRlTWV0YS5tb2R1bGVOYW1lIHx8IGVudi5tZXRhICYmIGVudi5tZXRhLm1vZHVsZU5hbWU7
Ci0gICAgICBfZW1iZXJIdG1sYmFyc1V0aWxzRXh0cmFjdFBvc2l0aW9uYWxQYXJhbXMuZGVmYXVs
dChyZW5kZXJOb2RlLCBzbS5jb21wb25lbnQuY29uc3RydWN0b3IsIHBhcmFtcywgYXR0cnMsIGZh
bHNlKTsKLSAgICAgIHN0YXRlLm1hbmFnZXIucmVyZW5kZXIoZW52LCBhdHRycywgdmlzaXRvcik7
Ci0gICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgdmFyIGlzQW5nbGVCcmFja2V0ID0gZmFsc2U7
Ci0gICAgdmFyIGlzVG9wTGV2ZWwgPSBmYWxzZTsKLSAgICB2YXIgaXNEYXNoZXJpemVkID0gZmFs
c2U7Ci0KLSAgICB2YXIgYW5nbGVzID0gSVNfQU5HTEVfQ0FDSEUuZ2V0KHRhZ05hbWUpOwotCi0g
ICAgaWYgKGFuZ2xlcykgewotICAgICAgdGFnTmFtZSA9IGFuZ2xlc1syXTsKLSAgICAgIGlzQW5n
bGVCcmFja2V0ID0gdHJ1ZTsKLSAgICAgIGlzVG9wTGV2ZWwgPSAhIWFuZ2xlc1sxXTsKLSAgICB9
Ci0KLSAgICBpZiAoX2VtYmVySHRtbGJhcnNTeXN0ZW1Mb29rdXBIZWxwZXIuQ09OVEFJTlNfREFT
SF9DQUNIRS5nZXQodGFnTmFtZSkpIHsKLSAgICAgIGlzRGFzaGVyaXplZCA9IHRydWU7Ci0gICAg
fQotCi0gICAgdmFyIHBhcmVudFZpZXcgPSBlbnYudmlldzsKLQotICAgIC8vIHwgVG9wLWxldmVs
ICAgIHwgSW52b2NhdGlvbjogPGZvby1iYXI+ICAgIHwgSW52b2NhdGlvbjoge3tmb28tYmFyfX0g
IHwKLSAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgLy8gfCA8ZGl2PiAgICAgICAgfCA8ZGl2PiBp
cyBjb21wb25lbnQgZWwgICAgfCBubyBzcGVjaWFsIHNlbWFudGljcyAoYSkgfAotICAgIC8vIHwg
PGZvby1iYXI+ICAgIHwgPGZvby1iYXI+IGlzIGlkZW50aXR5IGVsIHwgRVdURiAgICAgICAgICAg
ICAgICAgICAgIHwKLSAgICAvLyB8IDxiYXItYmF6PiAgICB8IHJlY3Vyc2l2ZSBpbnZvY2F0aW9u
ICAgICB8IG5vIHNwZWNpYWwgc2VtYW50aWNzICAgICB8Ci0gICAgLy8gfCB7e2FueXRoaW5nfX0g
fCBFV1RGICAgICAgICAgICAgICAgICAgICAgfCBubyBzcGVjaWFsIHNlbWFudGljcyAgICAgfAot
ICAgIC8vCi0gICAgLy8gKGEpIG5lZWRzIHRvIGJlIGltcGxlbWVudGVkIHNwZWNpYWxseSwgYmVj
YXVzZSB0aGUgdXN1YWwgc2VtYW50aWNzIG9mCi0gICAgLy8gICAgIDxkaXY+IGFyZSBkZWZpbmVk
IGJ5IHRoZSBjb21waWxlZCB0ZW1wbGF0ZSwgYW5kIHdlIG5lZWQgdG8gZW11bGF0ZQotICAgIC8v
ICAgICB0aG9zZSBzZW1hbnRpY3MuCi0KLSAgICB2YXIgY3VycmVudENvbXBvbmVudCA9IGVudi52
aWV3OwotICAgIHZhciBpc0ludm9rZWRXaXRoQW5nbGVzID0gY3VycmVudENvbXBvbmVudCAmJiBj
dXJyZW50Q29tcG9uZW50Ll9pc0FuZ2xlQnJhY2tldDsKLSAgICB2YXIgaXNJbnZva2VkV2l0aEN1
cmxpZXMgPSBjdXJyZW50Q29tcG9uZW50ICYmICFjdXJyZW50Q29tcG9uZW50Ll9pc0FuZ2xlQnJh
Y2tldDsKLQotICAgIC8vIDxkaXY+IGF0IHRoZSB0b3AgbGV2ZWwgb2YgYSA8Zm9vLWJhcj4gaW52
b2NhdGlvbi4KLSAgICB2YXIgaXNDb21wb25lbnRIVE1MRWxlbWVudCA9IGlzQW5nbGVCcmFja2V0
ICYmICFpc0Rhc2hlcml6ZWQgJiYgaXNJbnZva2VkV2l0aEFuZ2xlczsKLQotICAgIC8vIDxmb28t
YmFyPiBhdCB0aGUgdG9wIGxldmVsIG9mIGEgPGZvby1iYXI+IGludm9jYXRpb24uCi0gICAgdmFy
IGlzQ29tcG9uZW50SWRlbnRpdHlFbGVtZW50ID0gaXNBbmdsZUJyYWNrZXQgJiYgaXNUb3BMZXZl
bCAmJiB0YWdOYW1lID09PSBlbnYudmlldy50YWdOYW1lOwotCi0gICAgLy8gPGRpdj4gYXQgdGhl
IHRvcCBsZXZlbCBvZiBhIHt7Zm9vLWJhcn19IGludm9jYXRpb24uCi0gICAgdmFyIGlzTm9ybWFs
SFRNTEVsZW1lbnQgPSBpc0FuZ2xlQnJhY2tldCAmJiAhaXNEYXNoZXJpemVkICYmIGlzSW52b2tl
ZFdpdGhDdXJsaWVzOwotCi0gICAgdmFyIGNvbXBvbmVudCA9IHVuZGVmaW5lZCwKLSAgICAgICAg
bGF5b3V0ID0gdW5kZWZpbmVkOwotICAgIGlmIChpc0Rhc2hlcml6ZWQgfHwgIWlzQW5nbGVCcmFj
a2V0KSB7Ci0gICAgICB2YXIgb3B0aW9ucyA9IHt9OwotCi0gICAgICB2YXIgbW9kdWxlTmFtZSA9
IGVudi5tZXRhICYmIGVudi5tZXRhLm1vZHVsZU5hbWU7Ci0KLSAgICAgIGlmIChtb2R1bGVOYW1l
KSB7Ci0gICAgICAgIG9wdGlvbnMuc291cmNlID0gJ3RlbXBsYXRlOicgKyBtb2R1bGVOYW1lOwot
ICAgICAgfQotCi0gICAgICB2YXIgcmVzdWx0ID0gX2VtYmVySHRtbGJhcnNVdGlsc0xvb2t1cENv
bXBvbmVudC5kZWZhdWx0KGVudi5vd25lciwgdGFnTmFtZSwgb3B0aW9ucyk7Ci0KLSAgICAgIGNv
bXBvbmVudCA9IHJlc3VsdC5jb21wb25lbnQ7Ci0gICAgICBsYXlvdXQgPSByZXN1bHQubGF5b3V0
OwotCi0gICAgICBpZiAoaXNBbmdsZUJyYWNrZXQgJiYgaXNEYXNoZXJpemVkICYmICFjb21wb25l
bnQgJiYgIWxheW91dCkgewotICAgICAgICBpc0NvbXBvbmVudEhUTUxFbGVtZW50ID0gdHJ1ZTsK
LSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0KCdIVE1MQmFy
cyBlcnJvcjogQ291bGQgbm90IGZpbmQgY29tcG9uZW50IG5hbWVkICInICsgdGFnTmFtZSArICci
IChubyBjb21wb25lbnQgb3IgdGVtcGxhdGUgd2l0aCB0aGF0IG5hbWUgd2FzIGZvdW5kKScsICEh
KGNvbXBvbmVudCB8fCBsYXlvdXQpKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoaXNDb21w
b25lbnRJZGVudGl0eUVsZW1lbnQgfHwgaXNDb21wb25lbnRIVE1MRWxlbWVudCkgewotICAgICAg
Ly8gSW5zaWRlIHRoZSBsYXlvdXQgZm9yIDxmb28tYmFyPiBpbnZva2VkIHdpdGggYW5nbGVzLCB0
aGlzIGlzIHRoZSB0b3AtbGV2ZWwgZWxlbWVudAotICAgICAgLy8gZm9yIHRoZSBjb21wb25lbnQu
IEl0IGNhbiBlaXRoZXIgYmUgYDxmb28tYmFyPmAgKHRoZSAiaWRlbnRpdHkgZWxlbWVudCIpIG9y
IGFueQotICAgICAgLy8gbm9ybWFsIEhUTUwgZWxlbWVudCAobm9uLWRhc2hlcml6ZWQpLgotICAg
ICAgdmFyIHRlbXBsYXRlT3B0aW9ucyA9IHsKLSAgICAgICAgY29tcG9uZW50OiBjdXJyZW50Q29t
cG9uZW50LAotICAgICAgICB0YWdOYW1lOiB0YWdOYW1lLAotICAgICAgICBpc0FuZ2xlQnJhY2tl
dDogdHJ1ZSwKLSAgICAgICAgaXNDb21wb25lbnRFbGVtZW50OiB0cnVlLAotICAgICAgICBvdXRl
ckF0dHJzOiBzY29wZS5nZXRBdHRycygpLAotICAgICAgICBwYXJlbnRTY29wZTogc2NvcGUKLSAg
ICAgIH07Ci0KLSAgICAgIHZhciBjb250ZW50T3B0aW9ucyA9IHsgdGVtcGxhdGVzOiB0ZW1wbGF0
ZXMsIHNjb3BlOiBzY29wZSB9OwotCi0gICAgICB2YXIgX2J1aWxkQ29tcG9uZW50VGVtcGxhdGUg
PSBfZW1iZXJWaWV3c1N5c3RlbUJ1aWxkQ29tcG9uZW50VGVtcGxhdGUuZGVmYXVsdCh0ZW1wbGF0
ZU9wdGlvbnMsIGF0dHJzLCBjb250ZW50T3B0aW9ucyk7Ci0KLSAgICAgIHZhciBibG9jayA9IF9i
dWlsZENvbXBvbmVudFRlbXBsYXRlLmJsb2NrOwotCi0gICAgICBibG9jay5pbnZva2UoZW52LCBb
XSwgdW5kZWZpbmVkLCByZW5kZXJOb2RlLCBzY29wZSwgdmlzaXRvcik7Ci0gICAgfSBlbHNlIGlm
IChpc05vcm1hbEhUTUxFbGVtZW50KSB7Ci0gICAgICB2YXIgYmxvY2sgPSBfZW1iZXJWaWV3c1N5
c3RlbUJ1aWxkQ29tcG9uZW50VGVtcGxhdGUuYnVpbGRIVE1MVGVtcGxhdGUodGFnTmFtZSwgYXR0
cnMsIHsgdGVtcGxhdGVzOiB0ZW1wbGF0ZXMsIHNjb3BlOiBzY29wZSB9KTsKLSAgICAgIGJsb2Nr
Lmludm9rZShlbnYsIFtdLCB1bmRlZmluZWQsIHJlbmRlck5vZGUsIHNjb3BlLCB2aXNpdG9yKTsK
LSAgICB9IGVsc2UgewotICAgICAgLy8gSW52b2tpbmcgYSBjb21wb25lbnQgZnJvbSB0aGUgb3V0
c2lkZSAoZWl0aGVyIHZpYSA8Zm9vLWJhcj4gYW5nbGUgYnJhY2tldHMKLSAgICAgIC8vIG9yIHt7
Zm9vLWJhcn19IGxlZ2FjeSBjdXJsaWVzKS4KLQotICAgICAgdmFyIG1hbmFnZXIgPSBfZW1iZXJI
dG1sYmFyc05vZGVNYW5hZ2Vyc0NvbXBvbmVudE5vZGVNYW5hZ2VyLmRlZmF1bHQuY3JlYXRlKHJl
bmRlck5vZGUsIGVudiwgewotICAgICAgICB0YWdOYW1lOiB0YWdOYW1lLAotICAgICAgICBwYXJh
bXM6IHBhcmFtcywKLSAgICAgICAgYXR0cnM6IGF0dHJzLAotICAgICAgICBwYXJlbnRWaWV3OiBw
YXJlbnRWaWV3LAotICAgICAgICB0ZW1wbGF0ZXM6IHRlbXBsYXRlcywKLSAgICAgICAgaXNBbmds
ZUJyYWNrZXQ6IGlzQW5nbGVCcmFja2V0LAotICAgICAgICBpc1RvcExldmVsOiBpc1RvcExldmVs
LAotICAgICAgICBjb21wb25lbnQ6IGNvbXBvbmVudCwKLSAgICAgICAgbGF5b3V0OiBsYXlvdXQs
Ci0gICAgICAgIHBhcmVudFNjb3BlOiBzY29wZQotICAgICAgfSk7Ci0KLSAgICAgIHN0YXRlLm1h
bmFnZXIgPSBtYW5hZ2VyOwotICAgICAgbWFuYWdlci5yZW5kZXIoZW52LCB2aXNpdG9yKTsKLSAg
ICB9Ci0gIH0KLX0pOwotZW5pZmVkKCdlbWJlci1odG1sYmFycy9ob29rcy9jb25jYXQnLCBbJ2V4
cG9ydHMnLCAnZW1iZXItbWV0YWwvc3RyZWFtcy91dGlscyddLCBmdW5jdGlvbiAoZXhwb3J0cywg
X2VtYmVyTWV0YWxTdHJlYW1zVXRpbHMpIHsKLSAgLyoqCi0gIEBtb2R1bGUgZW1iZXIKLSAgQHN1
Ym1vZHVsZSBlbWJlci1odG1sYmFycwotICAqLwotCi0gICd1c2Ugc3RyaWN0JzsKLQotICBleHBv
cnRzLmRlZmF1bHQgPSBjb25jYXQ7Ci0KLSAgZnVuY3Rpb24gY29uY2F0KGVudiwgcGFydHMpIHsK
LSAgICByZXR1cm4gX2VtYmVyTWV0YWxTdHJlYW1zVXRpbHMuY29uY2F0KHBhcnRzLCAnJyk7Ci0g
IH0KLX0pOwotZW5pZmVkKCdlbWJlci1odG1sYmFycy9ob29rcy9jcmVhdGUtZnJlc2gtc2NvcGUn
LCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwvc3RyZWFtcy9wcm94eS1zdHJlYW0nLCAnZW1iZXIt
bWV0YWwvZW1wdHlfb2JqZWN0J10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbFN0cmVh
bXNQcm94eVN0cmVhbSwgX2VtYmVyTWV0YWxFbXB0eV9vYmplY3QpIHsKLSAgJ3VzZSBzdHJpY3Qn
OwotCi0gIGV4cG9ydHMuZGVmYXVsdCA9IGNyZWF0ZUZyZXNoU2NvcGU7Ci0gIGV4cG9ydHMuY3Jl
YXRlQ2hpbGRTY29wZSA9IGNyZWF0ZUNoaWxkU2NvcGU7Ci0KLSAgLyoKLSAgICBFbWJlcidzIGlt
cGxlbWVudGF0aW9uIG9mIEhUTUxCYXJzIGNyZWF0ZXMgYW4gZW5yaWNoZWQgc2NvcGUuCi0gIAot
ICAgICogc2VsZjogc2FtZSBhcyBIVE1MQmFycywgdGhpcyBmaWVsZCByZXByZXNlbnRzIHRoZSBk
eW5hbWljIGxvb2t1cAotICAgICAgb2Ygcm9vdCBrZXlzIHRoYXQgYXJlIG5vdCBzcGVjaWFsIGtl
eXdvcmRzIG9yIGJsb2NrIGFyZ3VtZW50cy4KLSAgICAqIGJsb2Nrczogc2FtZSBhcyBIVE1MQmFy
cywgYSBidW5kbGUgb2YgbmFtZWQgYmxvY2tzIHRoZSBsYXlvdXQKLSAgICAgIGNhbiB5aWVsZCB0
by4KLSAgICAqIGNvbXBvbmVudDogaW5kaWNhdGVzIHRoYXQgdGhlIHNjb3BlIGlzIHRoZSBsYXlv
dXQgb2YgYSBjb21wb25lbnQsCi0gICAgICB3aGljaCBpcyB1c2VkIHRvIHRyaWdnZXIgbGlmZWN5
Y2xlIGhvb2tzIGZvciB0aGUgY29tcG9uZW50IHdoZW4KLSAgICAgIG9uZSBvZiB0aGUgc3RyZWFt
cyBpbiBpdHMgbGF5b3V0IGZpcmVzLgotICAgICogYXR0cnM6IGEgbWFwIG9mIGtleS12YWx1ZSBh
dHRyaWJ1dGVzIHNlbnQgaW4gYnkgdGhlIGludm9rZXIgb2YKLSAgICAgIGEgdGVtcGxhdGUsIGFu
ZCBhdmFpbGFibGUgaW4gdGhlIGNvbXBvbmVudCdzIGxheW91dC4KLSAgICAqIGxvY2FsczogYSBt
YXAgb2YgbG9jYWxzLCBwcm9kdWNlZCBieSBibG9jayBwYXJhbXMgKGBhcyB8YSBifGApCi0gICAg
KiBsb2NhbFByZXNlbnQ6IGEgbWFwIG9mIGF2YWlsYWJsZSBsb2NhbHMgdG8gYXZvaWQgZXhwZW5z
aXZlCi0gICAgICBgaGFzT3duUHJvcGVydHlgIGNoZWNrcy4KLSAgCi0gICAgVGhlIGBzZWxmYCBm
aWVsZCBoYXMgdHdvIHNwZWNpYWwgbWVhbmluZ3M6Ci0gIAotICAgICogSWYgYHNlbGZgIGlzIGEg
dmlldyAoYGlzVmlld2ApLCB0aGUgYWN0dWFsIEhUTUxCYXJzIGBzZWxmYCBiZWNvbWVzCi0gICAg
ICB0aGUgdmlldydzIGBjb250ZXh0YC4gVGhpcyBpcyBsZWdhY3kgc2VtYW50aWNzOyBjb21wb25l
bnRzIGFsd2F5cwotICAgICAgdXNlIHRoZSBjb21wb25lbnQgaXRzZWxmIGFzIHRoZSBgdGhpc2Au
Ci0gICAgKiBJZiBgc2VsZmAgaXMgYSB2aWV3LCB0d28gc3BlY2lhbCBsb2NhbHMgYXJlIGNyZWF0
ZWQ6IGB2aWV3YCBhbmQKLSAgICAgIGBjb250cm9sbGVyYC4gVGhlc2UgbG9jYWxzIGFyZSBsZWdh
Y3kgc2VtYW50aWNzLgotICAKLSAgICAqKklNUE9SVEFOVCoqOiBUaGVyZSBhcmUgdHdvIHBsYWNl
cyBpbiBFbWJlciB3aGVyZSB0aGUgYW1iaWVudAotICAgIGNvbnRyb2xsZXIgaXMgbG9va2VkIHVw
LiBCb3RoIG9mIHRob3NlIHBsYWNlcyB1c2UgdGhlIHByZXNlbmNlCi0gICAgb2YgYHNjb3BlLmxv
Y2Fscy52aWV3YCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBjb250cm9sbGVyIGxvb2t1cAotICAgIHNo
b3VsZCBiZSBkeW5hbWljIG9mZiBvZiB0aGUgYW1iaWVudCB2aWV3LiBJZiBgc2NvcGUubG9jYWxz
LnZpZXdgCi0gICAgZG9lcyBub3QgZXhpc3QsIHRoZSBjb2RlIGFzc3VtZXMgdGhhdCBpdCBpcyBp
bnNpZGUgb2YgYSB0b3AtbGV2ZWwKLSAgICB0ZW1wbGF0ZSAod2l0aG91dCBhIHZpZXcpIGFuZCB1
c2VzIHRoZSBgc2VsZmAgaXRzZWxmIGFzIHRoZQotICAgIGNvbnRyb2xsZXIuIFRoaXMgbWVhbnMg
dGhhdCBpZiB5b3UgcmVtb3ZlIGBzY29wZS5sb2NhbHMudmlld2AKLSAgICAocGVyaGFwcyBiZWNh
dXNlIHdlIGFyZSBmaW5hbGx5IHJlYWR5IHRvIHNoZWQgdGhlIHZpZXcga2V5d29yZCksCi0gICAg
dGhlcmUgbWF5IGJlIHVuZXhwZWN0ZWQgY29uc2VxdWVuY2VzIG9uIGNvbnRyb2xsZXIgc2VtYW50
aWNzLgotICAgIElmIHRoaXMgaGFwcGVucyB0byB5b3UsIEkgaG9wZSB5b3UgZmluZCB0aGlzIGNv
bW1lbnQuIC0gWUsgJiBURAotICAKLSAgICBJbiBwcmFjdGljZSwgdGhpcyBtZWFucyB0aGF0IHdp
dGggdGhlIGV4Y2VwdGlvbnMgb2YgdG9wLWxldmVsCi0gICAgdmlldy1sZXNzIHRlbXBsYXRlcyBh
bmQgdGhlIGxlZ2FjeSBgY29udHJvbGxlcj1mb29gIHNlbWFudGljcywKLSAgICB0aGUgY29udHJv
bGxlciBoaWVyYXJjaHkgaXMgbWFuYWdlZCBkeW5hbWljYWxseSBieSBsb29raW5nIGF0Ci0gICAg
dGhlIGN1cnJlbnQgdmlldydzIGBjb250cm9sbGVyYC4KLSAgKi8KLQotICBmdW5jdGlvbiBTY29w
ZShwYXJlbnQpIHsKLSAgICB0aGlzLl9zZWxmID0gdW5kZWZpbmVkOwotICAgIHRoaXMuX2Jsb2Nr
cyA9IHVuZGVmaW5lZDsKLSAgICB0aGlzLl9jb21wb25lbnQgPSB1bmRlZmluZWQ7Ci0gICAgdGhp
cy5fdmlldyA9IHVuZGVmaW5lZDsKLSAgICB0aGlzLl9hdHRycyA9IHVuZGVmaW5lZDsKLSAgICB0
aGlzLl9sb2NhbHMgPSB1bmRlZmluZWQ7Ci0gICAgdGhpcy5fbG9jYWxQcmVzZW50ID0gdW5kZWZp
bmVkOwotICAgIHRoaXMub3ZlcnJpZGVDb250cm9sbGVyID0gdW5kZWZpbmVkOwotICAgIHRoaXMu
cGFyZW50ID0gcGFyZW50OwotICB9Ci0KLSAgdmFyIHByb3RvID0gU2NvcGUucHJvdG90eXBlOwot
Ci0gIHByb3RvLmdldFNlbGYgPSBmdW5jdGlvbiAoKSB7Ci0gICAgcmV0dXJuIHRoaXMuX3NlbGYg
fHwgdGhpcy5wYXJlbnQuZ2V0U2VsZigpOwotICB9OwotCi0gIHByb3RvLmJpbmRTZWxmID0gZnVu
Y3Rpb24gKHNlbGYpIHsKLSAgICB0aGlzLl9zZWxmID0gc2VsZjsKLSAgfTsKLQotICBwcm90by51
cGRhdGVTZWxmID0gZnVuY3Rpb24gKHNlbGYsIGtleSkgewotICAgIHZhciBleGlzdGluZyA9IHRo
aXMuX3NlbGY7Ci0KLSAgICBpZiAoZXhpc3RpbmcpIHsKLSAgICAgIGV4aXN0aW5nLnNldFNvdXJj
ZShzZWxmKTsKLSAgICB9IGVsc2UgewotICAgICAgdGhpcy5fc2VsZiA9IG5ldyBfZW1iZXJNZXRh
bFN0cmVhbXNQcm94eVN0cmVhbS5kZWZhdWx0KHNlbGYsIGtleSk7Ci0gICAgfQotICB9OwotCi0g
IHByb3RvLmdldEJsb2NrID0gZnVuY3Rpb24gKG5hbWUpIHsKLSAgICBpZiAoIXRoaXMuX2Jsb2Nr
cykgewotICAgICAgcmV0dXJuIHRoaXMucGFyZW50LmdldEJsb2NrKG5hbWUpOwotICAgIH0KLSAg
ICByZXR1cm4gdGhpcy5fYmxvY2tzW25hbWVdIHx8IHRoaXMucGFyZW50LmdldEJsb2NrKG5hbWUp
OwotICB9OwotCi0gIHByb3RvLmhhc0Jsb2NrID0gZnVuY3Rpb24gKG5hbWUpIHsKLSAgICBpZiAo
IXRoaXMuX2Jsb2NrcykgewotICAgICAgcmV0dXJuIHRoaXMucGFyZW50Lmhhc0Jsb2NrKG5hbWUp
OwotICAgIH0KLSAgICByZXR1cm4gISEodGhpcy5fYmxvY2tzW25hbWVdIHx8IHRoaXMucGFyZW50
Lmhhc0Jsb2NrKG5hbWUpKTsKLSAgfTsKLQotICBwcm90by5iaW5kQmxvY2sgPSBmdW5jdGlvbiAo
bmFtZSwgYmxvY2spIHsKLSAgICBpZiAoIXRoaXMuX2Jsb2NrcykgewotICAgICAgdGhpcy5fYmxv
Y2tzID0gbmV3IF9lbWJlck1ldGFsRW1wdHlfb2JqZWN0LmRlZmF1bHQoKTsKLSAgICB9Ci0gICAg
dGhpcy5fYmxvY2tzW25hbWVdID0gYmxvY2s7Ci0gIH07Ci0KLSAgcHJvdG8uZ2V0Q29tcG9uZW50
ID0gZnVuY3Rpb24gKCkgewotICAgIHJldHVybiB0aGlzLl9jb21wb25lbnQgfHwgdGhpcy5wYXJl
bnQuZ2V0Q29tcG9uZW50KCk7Ci0gIH07Ci0KLSAgcHJvdG8uYmluZENvbXBvbmVudCA9IGZ1bmN0
aW9uIChjb21wb25lbnQpIHsKLSAgICB0aGlzLl9jb21wb25lbnQgPSBjb21wb25lbnQ7Ci0gIH07
Ci0KLSAgcHJvdG8uZ2V0VmlldyA9IGZ1bmN0aW9uICgpIHsKLSAgICByZXR1cm4gdGhpcy5fdmll
dyB8fCB0aGlzLnBhcmVudC5nZXRWaWV3KCk7Ci0gIH07Ci0KLSAgcHJvdG8uYmluZFZpZXcgPSBm
dW5jdGlvbiAodmlldykgewotICAgIHRoaXMuX3ZpZXcgPSB2aWV3OwotICB9OwotCi0gIHByb3Rv
LmdldEF0dHJzID0gZnVuY3Rpb24gKCkgewotICAgIHJldHVybiB0aGlzLl9hdHRycyB8fCB0aGlz
LnBhcmVudC5nZXRBdHRycygpOwotICB9OwotCi0gIHByb3RvLmJpbmRBdHRycyA9IGZ1bmN0aW9u
IChhdHRycykgewotICAgIHRoaXMuX2F0dHJzID0gYXR0cnM7Ci0gIH07Ci0KLSAgcHJvdG8uaGFz
TG9jYWwgPSBmdW5jdGlvbiAobmFtZSkgewotICAgIGlmICghdGhpcy5fbG9jYWxQcmVzZW50KSB7
Ci0gICAgICByZXR1cm4gdGhpcy5wYXJlbnQuaGFzTG9jYWwobmFtZSk7Ci0gICAgfQotICAgIHJl
dHVybiB0aGlzLl9sb2NhbFByZXNlbnRbbmFtZV0gfHwgdGhpcy5wYXJlbnQuaGFzTG9jYWwobmFt
ZSk7Ci0gIH07Ci0KLSAgcHJvdG8uaGFzT3duTG9jYWwgPSBmdW5jdGlvbiAobmFtZSkgewotICAg
IHJldHVybiB0aGlzLl9sb2NhbFByZXNlbnQgJiYgdGhpcy5fbG9jYWxQcmVzZW50W25hbWVdOwot
ICB9OwotCi0gIHByb3RvLmdldExvY2FsID0gZnVuY3Rpb24gKG5hbWUpIHsKLSAgICBpZiAoIXRo
aXMuX2xvY2FsUHJlc2VudCkgewotICAgICAgcmV0dXJuIHRoaXMucGFyZW50LmdldExvY2FsKG5h
bWUpOwotICAgIH0KLSAgICByZXR1cm4gdGhpcy5fbG9jYWxQcmVzZW50W25hbWVdID8gdGhpcy5f
bG9jYWxzW25hbWVdIDogdGhpcy5wYXJlbnQuZ2V0TG9jYWwobmFtZSk7Ci0gIH07Ci0KLSAgcHJv
dG8uYmluZExvY2FsID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7Ci0gICAgaWYgKCF0aGlzLl9s
b2NhbFByZXNlbnQpIHsKLSAgICAgIHRoaXMuX2xvY2FsUHJlc2VudCA9IG5ldyBfZW1iZXJNZXRh
bEVtcHR5X29iamVjdC5kZWZhdWx0KCk7Ci0gICAgICB0aGlzLl9sb2NhbHMgPSBuZXcgX2VtYmVy
TWV0YWxFbXB0eV9vYmplY3QuZGVmYXVsdCgpOwotICAgIH0KLQotICAgIHRoaXMuX2xvY2FsUHJl
c2VudFtuYW1lXSA9IHRydWU7Ci0gICAgdGhpcy5fbG9jYWxzW25hbWVdID0gdmFsdWU7Ci0gIH07
Ci0KLSAgdmFyIEVNUFRZID0gewotICAgIF9zZWxmOiB1bmRlZmluZWQsCi0gICAgX2Jsb2Nrczog
dW5kZWZpbmVkLAotICAgIF9jb21wb25lbnQ6IHVuZGVmaW5lZCwKLSAgICBfdmlldzogdW5kZWZp
bmVkLAotICAgIF9hdHRyczogdW5kZWZpbmVkLAotICAgIF9sb2NhbHM6IHVuZGVmaW5lZCwKLSAg
ICBfbG9jYWxQcmVzZW50OiB1bmRlZmluZWQsCi0gICAgb3ZlcnJpZGVDb250cm9sbGVyOiB1bmRl
ZmluZWQsCi0KLSAgICBnZXRTZWxmOiBmdW5jdGlvbiAoKSB7Ci0gICAgICByZXR1cm4gbnVsbDsK
LSAgICB9LAotICAgIGJpbmRTZWxmOiBmdW5jdGlvbiAoc2VsZikgewotICAgICAgcmV0dXJuIG51
bGw7Ci0gICAgfSwKLSAgICB1cGRhdGVTZWxmOiBmdW5jdGlvbiAoc2VsZiwga2V5KSB7Ci0gICAg
ICByZXR1cm4gbnVsbDsKLSAgICB9LAotICAgIGdldEJsb2NrOiBmdW5jdGlvbiAobmFtZSkgewot
ICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfSwKLSAgICBiaW5kQmxvY2s6IGZ1bmN0aW9uIChuYW1l
LCBibG9jaykgewotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfSwKLSAgICBoYXNCbG9jazogZnVu
Y3Rpb24gKG5hbWUpIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9LAotICAgIGdldENvbXBv
bmVudDogZnVuY3Rpb24gKCkgewotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfSwKLSAgICBiaW5k
Q29tcG9uZW50OiBmdW5jdGlvbiAoKSB7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9LAotICAg
IGdldFZpZXc6IGZ1bmN0aW9uICgpIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0sCi0gICAg
YmluZFZpZXc6IGZ1bmN0aW9uICh2aWV3KSB7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9LAot
ICAgIGdldEF0dHJzOiBmdW5jdGlvbiAoKSB7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9LAot
ICAgIGJpbmRBdHRyczogZnVuY3Rpb24gKGF0dHJzKSB7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAg
ICB9LAotICAgIGhhc0xvY2FsOiBmdW5jdGlvbiAobmFtZSkgewotICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0sCi0gICAgaGFzT3duTG9jYWw6IGZ1bmN0aW9uIChuYW1lKSB7Ci0gICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfSwKLSAgICBnZXRMb2NhbDogZnVuY3Rpb24gKG5hbWUpIHsKLSAgICAg
IHJldHVybiBudWxsOwotICAgIH0sCi0gICAgYmluZExvY2FsOiBmdW5jdGlvbiAobmFtZSwgdmFs
dWUpIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgfTsKLQotICBmdW5jdGlvbiBjcmVh
dGVGcmVzaFNjb3BlKCkgewotICAgIHJldHVybiBuZXcgU2NvcGUoRU1QVFkpOwotICB9Ci0KLSAg
ZnVuY3Rpb24gY3JlYXRlQ2hpbGRTY29wZShwYXJlbnQpIHsKLSAgICByZXR1cm4gbmV3IFNjb3Bl
KHBhcmVudCk7Ci0gIH0KLX0pOwotZW5pZmVkKCJlbWJlci1odG1sYmFycy9ob29rcy9kZXN0cm95
LXJlbmRlci1ub2RlIiwgWyJleHBvcnRzIl0sIGZ1bmN0aW9uIChleHBvcnRzKSB7Ci0gIC8qKgot
ICBAbW9kdWxlIGVtYmVyCi0gIEBzdWJtb2R1bGUgZW1iZXItaHRtbGJhcnMKLSAgKi8KLQotICAi
dXNlIHN0cmljdCI7Ci0KLSAgZXhwb3J0cy5kZWZhdWx0ID0gZGVzdHJveVJlbmRlck5vZGU7Ci0K
LSAgZnVuY3Rpb24gZGVzdHJveVJlbmRlck5vZGUocmVuZGVyTm9kZSkgewotICAgIGlmIChyZW5k
ZXJOb2RlLmVtYmVyVmlldykgewotICAgICAgcmVuZGVyTm9kZS5lbWJlclZpZXcuZGVzdHJveSgp
OwotICAgIH0KLQotICAgIHZhciBzdHJlYW1VbnN1YnNjcmliZXJzID0gcmVuZGVyTm9kZS5zdHJl
YW1VbnN1YnNjcmliZXJzOwotICAgIGlmIChzdHJlYW1VbnN1YnNjcmliZXJzKSB7Ci0gICAgICBm
b3IgKHZhciBpID0gMCwgbCA9IHN0cmVhbVVuc3Vic2NyaWJlcnMubGVuZ3RoOyBpIDwgbDsgaSsr
KSB7Ci0gICAgICAgIHN0cmVhbVVuc3Vic2NyaWJlcnNbaV0oKTsKLSAgICAgIH0KLSAgICB9Ci0g
IH0KLX0pOwotZW5pZmVkKCJlbWJlci1odG1sYmFycy9ob29rcy9kaWQtY2xlYW51cC10cmVlIiwg
WyJleHBvcnRzIl0sIGZ1bmN0aW9uIChleHBvcnRzKSB7Ci0gICJ1c2Ugc3RyaWN0IjsKLQotICBl
eHBvcnRzLmRlZmF1bHQgPSBkaWRDbGVhbnVwVHJlZTsKLQotICBmdW5jdGlvbiBkaWRDbGVhbnVw
VHJlZShlbnYpIHsKLSAgICAvLyBPbmNlIHdlIGhhdmUgZmluc2loZWQgY2xlYW5pbmcgdXAgdGhl
IHJlbmRlciBub2RlIGFuZCBzdWItbm9kZXMsIHJlc2V0Ci0gICAgLy8gc3RhdGUgdHJhY2tpbmcg
d2hpY2ggdmlldyB0aG9zZSByZW5kZXIgbm9kZXMgYmVsb25nZWQgdG8uCi0gICAgZW52LnZpZXcu
b3duZXJWaWV3Ll9kZXN0cm95aW5nU3VidHJlZUZvclZpZXcgPSBudWxsOwotICB9Ci19KTsKLWVu
aWZlZCgiZW1iZXItaHRtbGJhcnMvaG9va3MvZGlkLXJlbmRlci1ub2RlIiwgWyJleHBvcnRzIl0s
IGZ1bmN0aW9uIChleHBvcnRzKSB7Ci0gICJ1c2Ugc3RyaWN0IjsKLQotICBleHBvcnRzLmRlZmF1
bHQgPSBkaWRSZW5kZXJOb2RlOwotCi0gIGZ1bmN0aW9uIGRpZFJlbmRlck5vZGUobW9ycGgsIGVu
dikgewotICAgIGVudi5yZW5kZXJlZE5vZGVzLmFkZChtb3JwaCk7Ci0gIH0KLX0pOwotZW5pZmVk
KCdlbWJlci1odG1sYmFycy9ob29rcy9lbGVtZW50JywgWydleHBvcnRzJywgJ2VtYmVyLWh0bWxi
YXJzL3N5c3RlbS9sb29rdXAtaGVscGVyJywgJ2h0bWxiYXJzLXJ1bnRpbWUvaG9va3MnLCAnZW1i
ZXItaHRtbGJhcnMvc3lzdGVtL2ludm9rZS1oZWxwZXInXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9l
bWJlckh0bWxiYXJzU3lzdGVtTG9va3VwSGVscGVyLCBfaHRtbGJhcnNSdW50aW1lSG9va3MsIF9l
bWJlckh0bWxiYXJzU3lzdGVtSW52b2tlSGVscGVyKSB7Ci0gIC8qKgotICBAbW9kdWxlIGVtYmVy
Ci0gIEBzdWJtb2R1bGUgZW1iZXItaHRtbGJhcnMKLSAgKi8KLQotICAndXNlIHN0cmljdCc7Ci0K
LSAgZXhwb3J0cy5kZWZhdWx0ID0gZW1iZXJFbGVtZW50OwotCi0gIGZ1bmN0aW9uIGVtYmVyRWxl
bWVudChtb3JwaCwgZW52LCBzY29wZSwgcGF0aCwgcGFyYW1zLCBoYXNoLCB2aXNpdG9yKSB7Ci0g
ICAgaWYgKF9odG1sYmFyc1J1bnRpbWVIb29rcy5oYW5kbGVSZWRpcmVjdChtb3JwaCwgZW52LCBz
Y29wZSwgcGF0aCwgcGFyYW1zLCBoYXNoLCBudWxsLCBudWxsLCB2aXNpdG9yKSkgewotICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIHZhciByZXN1bHQ7Ci0gICAgdmFyIGhlbHBlciA9IF9lbWJl
ckh0bWxiYXJzU3lzdGVtTG9va3VwSGVscGVyLmZpbmRIZWxwZXIocGF0aCwgc2NvcGUuZ2V0U2Vs
ZigpLCBlbnYpOwotICAgIGlmIChoZWxwZXIpIHsKLSAgICAgIHZhciBoZWxwZXJTdHJlYW0gPSBf
ZW1iZXJIdG1sYmFyc1N5c3RlbUludm9rZUhlbHBlci5idWlsZEhlbHBlclN0cmVhbShoZWxwZXIs
IHBhcmFtcywgaGFzaCwgeyBlbGVtZW50OiBtb3JwaC5lbGVtZW50IH0sIGVudiwgc2NvcGUsIHBh
dGgpOwotICAgICAgcmVzdWx0ID0gaGVscGVyU3RyZWFtLnZhbHVlKCk7Ci0gICAgfSBlbHNlIHsK
LSAgICAgIHJlc3VsdCA9IGVudi5ob29rcy5nZXQoZW52LCBzY29wZSwgcGF0aCk7Ci0gICAgfQot
Ci0gICAgZW52Lmhvb2tzLmdldFZhbHVlKHJlc3VsdCk7Ci0gIH0KLX0pOwotZW5pZmVkKCJlbWJl
ci1odG1sYmFycy9ob29rcy9nZXQtYmxvY2siLCBbImV4cG9ydHMiXSwgZnVuY3Rpb24gKGV4cG9y
dHMpIHsKLSAgInVzZSBzdHJpY3QiOwotCi0gIGV4cG9ydHMuZGVmYXVsdCA9IGdldEJsb2NrOwot
Ci0gIGZ1bmN0aW9uIGdldEJsb2NrKHNjb3BlLCBrZXkpIHsKLSAgICByZXR1cm4gc2NvcGUuZ2V0
QmxvY2soa2V5KTsKLSAgfQotfSk7Ci1lbmlmZWQoJ2VtYmVyLWh0bWxiYXJzL2hvb2tzL2dldC1j
ZWxsLW9yLXZhbHVlJywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFsL3N0cmVhbXMvdXRpbHMnLCAn
ZW1iZXItaHRtbGJhcnMva2V5d29yZHMvbXV0J10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJN
ZXRhbFN0cmVhbXNVdGlscywgX2VtYmVySHRtbGJhcnNLZXl3b3Jkc011dCkgewotICAndXNlIHN0
cmljdCc7Ci0KLSAgZXhwb3J0cy5kZWZhdWx0ID0gZ2V0Q2VsbE9yVmFsdWU7Ci0KLSAgZnVuY3Rp
b24gZ2V0Q2VsbE9yVmFsdWUocmVmKSB7Ci0gICAgaWYgKHJlZiAmJiByZWZbX2VtYmVySHRtbGJh
cnNLZXl3b3Jkc011dC5NVVRBQkxFX1JFRkVSRU5DRV0pIHsKLSAgICAgIC8vIFJlaWZ5IHRoZSBt
dXRhYmxlIHJlZmVyZW5jZSBpbnRvIGEgbXV0YWJsZSBjZWxsLgotICAgICAgcmV0dXJuIHJlZi5j
ZWxsKCk7Ci0gICAgfQotCi0gICAgLy8gR2V0IHRoZSB2YWx1ZSBvdXQgb2YgdGhlIHJlZmVyZW5j
ZS4KLSAgICByZXR1cm4gX2VtYmVyTWV0YWxTdHJlYW1zVXRpbHMucmVhZChyZWYpOwotICB9Ci19
KTsKLWVuaWZlZCgnZW1iZXItaHRtbGJhcnMvaG9va3MvZ2V0LWNoaWxkJywgWydleHBvcnRzJywg
J2VtYmVyLW1ldGFsL3N0cmVhbXMvdXRpbHMnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1l
dGFsU3RyZWFtc1V0aWxzKSB7Ci0gIC8qKgotICBAbW9kdWxlIGVtYmVyCi0gIEBzdWJtb2R1bGUg
ZW1iZXItaHRtbGJhcnMKLSAgKi8KLQotICAndXNlIHN0cmljdCc7Ci0KLSAgZXhwb3J0cy5kZWZh
dWx0ID0gZ2V0Q2hpbGQ7Ci0KLSAgZnVuY3Rpb24gZ2V0Q2hpbGQocGFyZW50LCBrZXkpIHsKLSAg
ICBpZiAoX2VtYmVyTWV0YWxTdHJlYW1zVXRpbHMuaXNTdHJlYW0ocGFyZW50KSkgewotICAgICAg
cmV0dXJuIHBhcmVudC5nZXRLZXkoa2V5KTsKLSAgICB9Ci0KLSAgICAvLyBUaGlzIHNob3VsZCBv
bmx5IGhhcHBlbiB3aGVuIHdlIGFyZSBsb29raW5nIGF0IGFuIGBhdHRyc2AgaGFzaC4KLSAgICAv
LyBUaGF0IG1pZ2h0IGNoYW5nZSBpZiBpdCBpcyBwb3NzaWJsZSB0byBwYXNzIG9iamVjdCBsaXRl
cmFscwotICAgIC8vIHRocm91Z2ggdGhlIHRlbXBsYXRpbmcgc3lzdGVtLgotICAgIHJldHVybiBw
YXJlbnRba2V5XTsKLSAgfQotfSk7Ci1lbmlmZWQoJ2VtYmVyLWh0bWxiYXJzL2hvb2tzL2dldC1y
b290JywgWydleHBvcnRzJ10sIGZ1bmN0aW9uIChleHBvcnRzKSB7Ci0gIC8qKgotICBAbW9kdWxl
IGVtYmVyCi0gIEBzdWJtb2R1bGUgZW1iZXItaHRtbGJhcnMKLSAgKi8KLQotICAndXNlIHN0cmlj
dCc7Ci0KLSAgZXhwb3J0cy5kZWZhdWx0ID0gZ2V0Um9vdDsKLQotICBmdW5jdGlvbiBnZXRSb290
KHNjb3BlLCBrZXkpIHsKLSAgICBpZiAoa2V5ID09PSAndGhpcycpIHsKLSAgICAgIHJldHVybiBb
c2NvcGUuZ2V0U2VsZigpXTsKLSAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ2hhc0Jsb2NrJykgewot
ICAgICAgcmV0dXJuIFshIXNjb3BlLmhhc0Jsb2NrKCdkZWZhdWx0JyldOwotICAgIH0gZWxzZSBp
ZiAoa2V5ID09PSAnaGFzQmxvY2tQYXJhbXMnKSB7Ci0gICAgICB2YXIgYmxvY2sgPSBzY29wZS5n
ZXRCbG9jaygnZGVmYXVsdCcpOwotICAgICAgcmV0dXJuIFshIWJsb2NrICYmIGJsb2NrLmFyaXR5
XTsKLSAgICB9IGVsc2UgaWYgKHNjb3BlLmhhc0xvY2FsKGtleSkpIHsKLSAgICAgIHJldHVybiBb
c2NvcGUuZ2V0TG9jYWwoa2V5KV07Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJldHVybiBbZ2V0S2V5
KHNjb3BlLCBrZXkpXTsKLSAgICB9Ci0gIH0KLQotICBmdW5jdGlvbiBnZXRLZXkoc2NvcGUsIGtl
eSkgewotICAgIGlmIChrZXkgPT09ICdhdHRycycpIHsKLSAgICAgIHZhciBfYXR0cnMgPSBzY29w
ZS5nZXRBdHRycygpOwotICAgICAgaWYgKF9hdHRycykgewotICAgICAgICByZXR1cm4gX2F0dHJz
OwotICAgICAgfQotICAgIH0KLQotICAgIHZhciBzZWxmID0gc2NvcGUuZ2V0U2VsZigpIHx8IHNj
b3BlLmdldExvY2FsKCd2aWV3Jyk7Ci0KLSAgICBpZiAoc2VsZikgewotICAgICAgcmV0dXJuIHNl
bGYuZ2V0S2V5KGtleSk7Ci0gICAgfQotCi0gICAgdmFyIGF0dHJzID0gc2NvcGUuZ2V0QXR0cnMo
KTsKLSAgICBpZiAoYXR0cnMgJiYga2V5IGluIGF0dHJzKSB7Ci0gICAgICAvLyBUT0RPOiBhdHRy
cwotICAgICAgLy8gZGVwcmVjYXRlKCJZb3UgYWNjZXNzZWQgdGhlIGAiICsga2V5ICsgImAgYXR0
cmlidXRlIGRpcmVjdGx5LiBQbGVhc2UgdXNlIGBhdHRycy4iICsga2V5ICsgImAgaW5zdGVhZC4i
KTsKLSAgICAgIHJldHVybiBhdHRyc1trZXldOwotICAgIH0KLSAgfQotfSk7Ci1lbmlmZWQoJ2Vt
YmVyLWh0bWxiYXJzL2hvb2tzL2dldC12YWx1ZScsIFsnZXhwb3J0cycsICdlbWJlci1tZXRhbC9z
dHJlYW1zL3V0aWxzJywgJ2VtYmVyLXZpZXdzL2NvbXBhdC9hdHRycy1wcm94eSddLCBmdW5jdGlv
biAoZXhwb3J0cywgX2VtYmVyTWV0YWxTdHJlYW1zVXRpbHMsIF9lbWJlclZpZXdzQ29tcGF0QXR0
cnNQcm94eSkgewotICAvKioKLSAgQG1vZHVsZSBlbWJlcgotICBAc3VibW9kdWxlIGVtYmVyLWh0
bWxiYXJzCi0gICovCi0KLSAgJ3VzZSBzdHJpY3QnOwotCi0gIGV4cG9ydHMuZGVmYXVsdCA9IGdl
dFZhbHVlOwotCi0gIGZ1bmN0aW9uIGdldFZhbHVlKHJlZikgewotICAgIHZhciB2YWx1ZSA9IF9l
bWJlck1ldGFsU3RyZWFtc1V0aWxzLnJlYWQocmVmKTsKLQotICAgIGlmICh2YWx1ZSAmJiB2YWx1
ZVtfZW1iZXJWaWV3c0NvbXBhdEF0dHJzUHJveHkuTVVUQUJMRV9DRUxMXSkgewotICAgICAgcmV0
dXJuIHZhbHVlLnZhbHVlOwotICAgIH0KLQotICAgIHJldHVybiB2YWx1ZTsKLSAgfQotfSk7Ci1l
bmlmZWQoJ2VtYmVyLWh0bWxiYXJzL2hvb2tzL2hhcy1oZWxwZXInLCBbJ2V4cG9ydHMnLCAnZW1i
ZXItaHRtbGJhcnMvc3lzdGVtL2xvb2t1cC1oZWxwZXInXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9l
bWJlckh0bWxiYXJzU3lzdGVtTG9va3VwSGVscGVyKSB7Ci0gICd1c2Ugc3RyaWN0JzsKLQotICBl
eHBvcnRzLmRlZmF1bHQgPSBoYXNIZWxwZXJIb29rOwotCi0gIGZ1bmN0aW9uIGhhc0hlbHBlckhv
b2soZW52LCBzY29wZSwgaGVscGVyTmFtZSkgewotICAgIGlmIChlbnYuaGVscGVyc1toZWxwZXJO
YW1lXSkgewotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgdmFyIG93bmVyID0gZW52
Lm93bmVyOwotICAgIGlmIChfZW1iZXJIdG1sYmFyc1N5c3RlbUxvb2t1cEhlbHBlci52YWxpZGF0
ZUxhenlIZWxwZXJOYW1lKGhlbHBlck5hbWUsIG93bmVyLCBlbnYuaG9va3Mua2V5d29yZHMpKSB7
Ci0gICAgICB2YXIgcmVnaXN0cmF0aW9uTmFtZSA9ICdoZWxwZXI6JyArIGhlbHBlck5hbWU7Ci0g
ICAgICBpZiAob3duZXIuaGFzUmVnaXN0cmF0aW9uKHJlZ2lzdHJhdGlvbk5hbWUpKSB7Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgfQotCi0gICAgICB2YXIgb3B0aW9ucyA9IHt9OwotICAg
ICAgdmFyIG1vZHVsZU5hbWUgPSBlbnYubWV0YSAmJiBlbnYubWV0YS5tb2R1bGVOYW1lOwotICAg
ICAgaWYgKG1vZHVsZU5hbWUpIHsKLSAgICAgICAgb3B0aW9ucy5zb3VyY2UgPSAndGVtcGxhdGU6
JyArIG1vZHVsZU5hbWU7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChvd25lci5oYXNSZWdpc3RyYXRp
b24ocmVnaXN0cmF0aW9uTmFtZSwgb3B0aW9ucykpIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci19KTsKLWVuaWZlZCgnZW1i
ZXItaHRtbGJhcnMvaG9va3MvaW52b2tlLWhlbHBlcicsIFsnZXhwb3J0cycsICdlbWJlci1odG1s
YmFycy9zeXN0ZW0vaW52b2tlLWhlbHBlcicsICdlbWJlci1odG1sYmFycy91dGlscy9zdWJzY3Jp
YmUnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlckh0bWxiYXJzU3lzdGVtSW52b2tlSGVscGVy
LCBfZW1iZXJIdG1sYmFyc1V0aWxzU3Vic2NyaWJlKSB7Ci0gICd1c2Ugc3RyaWN0JzsKLQotICBl
eHBvcnRzLmRlZmF1bHQgPSBpbnZva2VIZWxwZXI7Ci0KLSAgZnVuY3Rpb24gaW52b2tlSGVscGVy
KG1vcnBoLCBlbnYsIHNjb3BlLCB2aXNpdG9yLCBwYXJhbXMsIGhhc2gsIGhlbHBlciwgdGVtcGxh
dGVzLCBjb250ZXh0KSB7Ci0gICAgdmFyIGhlbHBlclN0cmVhbSA9IF9lbWJlckh0bWxiYXJzU3lz
dGVtSW52b2tlSGVscGVyLmJ1aWxkSGVscGVyU3RyZWFtKGhlbHBlciwgcGFyYW1zLCBoYXNoLCB0
ZW1wbGF0ZXMsIGVudiwgc2NvcGUpOwotCi0gICAgLy8gRW1iZXIuSGVscGVyIGhlbHBlcnMgYXJl
IHB1cmUgdmFsdWVzLCB0aHVzIGxpbmthYmxlLgotICAgIGlmIChoZWxwZXJTdHJlYW0ubGlua2Fi
bGUpIHsKLSAgICAgIGlmIChtb3JwaCkgewotICAgICAgICAvLyBXaGVuIHByb2Nlc3NpbmcgYW4g
aW5saW5lIGV4cHJlc3Npb24sIHRoZSBwYXJhbXMgYW5kIGhhc2ggaGF2ZSBhbHJlYWR5Ci0gICAg
ICAgIC8vIGJlZW4gbGlua2VkLiBUaHVzLCBIVE1MQmFycyB3aWxsIG5vdCBsaW5rIHRoZSByZXR1
cm5lZCBoZWxwZXJTdHJlYW0uCi0gICAgICAgIC8vIFdlIHN1YnNjcmliZSB0aGUgbW9ycGggdG8g
dGhlIGhlbHBlclN0cmVhbSBoZXJlLCBhbmQgYWxzbyBzdWJzY3JpYmUKLSAgICAgICAgLy8gdGhl
IGhlbHBlclN0cmVhbSB0byBhbnkgcGFyYW1zLgotICAgICAgICB2YXIgYWRkZWREZXBlbmRlbmN5
ID0gZmFsc2U7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gcGFyYW1zLmxlbmd0aDsgaSA8
IGw7IGkrKykgewotICAgICAgICAgIGFkZGVkRGVwZW5kZW5jeSA9IHRydWU7Ci0gICAgICAgICAg
aGVscGVyU3RyZWFtLmFkZERlcGVuZGVuY3kocGFyYW1zW2ldKTsKLSAgICAgICAgfQotICAgICAg
ICBmb3IgKHZhciBrZXkgaW4gaGFzaCkgewotICAgICAgICAgIGFkZGVkRGVwZW5kZW5jeSA9IHRy
dWU7Ci0gICAgICAgICAgaGVscGVyU3RyZWFtLmFkZERlcGVuZGVuY3koaGFzaFtrZXldKTsKLSAg
ICAgICAgfQotICAgICAgICBpZiAoYWRkZWREZXBlbmRlbmN5KSB7Ci0gICAgICAgICAgX2VtYmVy
SHRtbGJhcnNVdGlsc1N1YnNjcmliZS5kZWZhdWx0KG1vcnBoLCBlbnYsIHNjb3BlLCBoZWxwZXJT
dHJlYW0pOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIHJldHVybiB7IGxpbms6IHRydWUs
IHZhbHVlOiBoZWxwZXJTdHJlYW0gfTsKLSAgICB9Ci0KLSAgICAvLyBCdWlsdC1pbiBoZWxwZXJz
IGFyZSBub3QgbGlua2FibGUuIFRoZXkgbXVzdCBydW4gb24gZXZlcnkgcmVyZW5kZXIuCi0gICAg
cmV0dXJuIHsgdmFsdWU6IGhlbHBlclN0cmVhbS52YWx1ZSgpIH07Ci0gIH0KLX0pOwotZW5pZmVk
KCdlbWJlci1odG1sYmFycy9ob29rcy9saW5rLXJlbmRlci1ub2RlJywgWydleHBvcnRzJywgJ2Vt
YmVyLWh0bWxiYXJzL3V0aWxzL3N1YnNjcmliZScsICdlbWJlci1ydW50aW1lL3V0aWxzJywgJ2Vt
YmVyLW1ldGFsL3N0cmVhbXMvdXRpbHMnLCAnZW1iZXItaHRtbGJhcnMvc3lzdGVtL2xvb2t1cC1o
ZWxwZXInLCAnZW1iZXItaHRtbGJhcnMva2V5d29yZHMvY2xvc3VyZS1jb21wb25lbnQnXSwgZnVu
Y3Rpb24gKGV4cG9ydHMsIF9lbWJlckh0bWxiYXJzVXRpbHNTdWJzY3JpYmUsIF9lbWJlclJ1bnRp
bWVVdGlscywgX2VtYmVyTWV0YWxTdHJlYW1zVXRpbHMsIF9lbWJlckh0bWxiYXJzU3lzdGVtTG9v
a3VwSGVscGVyLCBfZW1iZXJIdG1sYmFyc0tleXdvcmRzQ2xvc3VyZUNvbXBvbmVudCkgewotICAv
KioKLSAgQG1vZHVsZSBlbWJlcgotICBAc3VibW9kdWxlIGVtYmVyLWh0bWxiYXJzCi0gICovCi0K
LSAgJ3VzZSBzdHJpY3QnOwotCi0gIGV4cG9ydHMuZGVmYXVsdCA9IGxpbmtSZW5kZXJOb2RlOwot
ICBleHBvcnRzLmxpbmtQYXJhbXNGb3IgPSBsaW5rUGFyYW1zRm9yOwotCi0gIGZ1bmN0aW9uIGxp
bmtSZW5kZXJOb2RlKHJlbmRlck5vZGUsIGVudiwgc2NvcGUsIHBhdGgsIHBhcmFtcywgaGFzaCkg
ewotICAgIGlmIChyZW5kZXJOb2RlLnN0cmVhbVVuc3Vic2NyaWJlcnMpIHsKLSAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLQotICAgIHZhciBrZXl3b3JkID0gZW52Lmhvb2tzLmtleXdvcmRzW3Bh
dGhdOwotICAgIGlmIChrZXl3b3JkICYmIGtleXdvcmQubGluaykgewotICAgICAga2V5d29yZC5s
aW5rKHJlbmRlck5vZGUuZ2V0U3RhdGUoKSwgcGFyYW1zLCBoYXNoKTsKLSAgICB9IGVsc2UgaWYg
KHBhdGggPT09ICd1bmJvdW5kJykgewotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSBlbHNlIHsK
LSAgICAgIGxpbmtQYXJhbXNGb3IocGF0aCwgcGFyYW1zKTsKLSAgICB9Ci0KLSAgICAvLyBJZiB0
aGVyZSBpcyBhIGRvdCBpbiB0aGUgcGF0aCwgd2UgbmVlZCB0byBzdWJzY3JpYmUgdG8gdGhlIGFy
Z3VtZW50cyBpbiB0aGUKLSAgICAvLyBjbG9zdXJlIGNvbXBvbmVudCBhcyB3ZWxsLgotCi0gICAg
aWYgKF9lbWJlckh0bWxiYXJzU3lzdGVtTG9va3VwSGVscGVyLkNPTlRBSU5TX0RPVF9DQUNIRS5n
ZXQocGF0aCkpIHsKLSAgICAgIHZhciBzdHJlYW0gPSBlbnYuaG9va3MuZ2V0KGVudiwgc2NvcGUs
IHBhdGgpOwotICAgICAgdmFyIGNvbXBvbmVudENlbGwgPSBzdHJlYW0udmFsdWUoKTsKLQotICAg
ICAgaWYgKF9lbWJlckh0bWxiYXJzS2V5d29yZHNDbG9zdXJlQ29tcG9uZW50LmlzQ29tcG9uZW50
Q2VsbChjb21wb25lbnRDZWxsKSkgewotICAgICAgICB2YXIgY2xvc3VyZUF0dHJzID0gX2VtYmVy
SHRtbGJhcnNLZXl3b3Jkc0Nsb3N1cmVDb21wb25lbnQubWVyZ2VJbk5ld0hhc2goY29tcG9uZW50
Q2VsbFtfZW1iZXJIdG1sYmFyc0tleXdvcmRzQ2xvc3VyZUNvbXBvbmVudC5DT01QT05FTlRfSEFT
SF0sIGhhc2gpOwotCi0gICAgICAgIGZvciAodmFyIGtleSBpbiBjbG9zdXJlQXR0cnMpIHsKLSAg
ICAgICAgICBfZW1iZXJIdG1sYmFyc1V0aWxzU3Vic2NyaWJlLmRlZmF1bHQocmVuZGVyTm9kZSwg
ZW52LCBzY29wZSwgY2xvc3VyZUF0dHJzW2tleV0pOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAg
fQotCi0gICAgaWYgKHBhcmFtcyAmJiBwYXJhbXMubGVuZ3RoKSB7Ci0gICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IHBhcmFtcy5sZW5ndGg7IGkrKykgewotICAgICAgICBfZW1iZXJIdG1sYmFyc1V0
aWxzU3Vic2NyaWJlLmRlZmF1bHQocmVuZGVyTm9kZSwgZW52LCBzY29wZSwgcGFyYW1zW2ldKTsK
LSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoaGFzaCkgewotICAgICAgZm9yICh2YXIga2V5IGlu
IGhhc2gpIHsKLSAgICAgICAgX2VtYmVySHRtbGJhcnNVdGlsc1N1YnNjcmliZS5kZWZhdWx0KHJl
bmRlck5vZGUsIGVudiwgc2NvcGUsIGhhc2hba2V5XSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAg
Ly8gVGhlIHBhcmFtcyBhbmQgaGFzaCBjYW4gYmUgcmV1c2VkLiBUaGV5IGRvbid0IG5lZWQgdG8g
YmUKLSAgICAvLyByZWNvbXB1dGVkIG9uIHN1YnNlcXVlbnQgcmUtcmVuZGVycyBiZWNhdXNlIHRo
ZXkgYXJlCi0gICAgLy8gc3RyZWFtcy4KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIGZ1bmN0
aW9uIGxpbmtQYXJhbXNGb3IocGF0aCwgcGFyYW1zKSB7Ci0gICAgc3dpdGNoIChwYXRoKSB7Ci0g
ICAgICBjYXNlICd1bmxlc3MnOgotICAgICAgY2FzZSAnaWYnOgotICAgICAgICBwYXJhbXNbMF0g
PSBzaG91bGREaXNwbGF5KHBhcmFtc1swXSwgdG9Cb29sKTticmVhazsKLSAgICAgIGNhc2UgJ2Vh
Y2gnOgotICAgICAgICBwYXJhbXNbMF0gPSBlYWNoUGFyYW0ocGFyYW1zWzBdKTticmVhazsKLSAg
ICAgIGNhc2UgJ3dpdGgnOgotICAgICAgICBwYXJhbXNbMF0gPSBzaG91bGREaXNwbGF5KHBhcmFt
c1swXSwgaWRlbnRpdHkpO2JyZWFrOwotICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIGVhY2hQYXJh
bShsaXN0KSB7Ci0gICAgdmFyIGxpc3RDaGFuZ2UgPSBnZXRLZXkobGlzdCwgJ1tdJyk7Ci0KLSAg
ICB2YXIgc3RyZWFtID0gX2VtYmVyTWV0YWxTdHJlYW1zVXRpbHMuY2hhaW4obGlzdCwgZnVuY3Rp
b24gKCkgewotICAgICAgX2VtYmVyTWV0YWxTdHJlYW1zVXRpbHMucmVhZChsaXN0Q2hhbmdlKTsK
LSAgICAgIHJldHVybiBfZW1iZXJNZXRhbFN0cmVhbXNVdGlscy5yZWFkKGxpc3QpOwotICAgIH0s
ICdlYWNoJyk7Ci0KLSAgICBzdHJlYW0uYWRkRGVwZW5kZW5jeShsaXN0Q2hhbmdlKTsKLSAgICBy
ZXR1cm4gc3RyZWFtOwotICB9Ci0KLSAgZnVuY3Rpb24gc2hvdWxkRGlzcGxheShwcmVkaWNhdGUs
IGNvZXJjZXIpIHsKLSAgICB2YXIgbGVuZ3RoID0gZ2V0S2V5KHByZWRpY2F0ZSwgJ2xlbmd0aCcp
OwotICAgIHZhciBpc1RydXRoeSA9IGdldEtleShwcmVkaWNhdGUsICdpc1RydXRoeScpOwotCi0g
ICAgdmFyIHN0cmVhbSA9IF9lbWJlck1ldGFsU3RyZWFtc1V0aWxzLmNoYWluKHByZWRpY2F0ZSwg
ZnVuY3Rpb24gKCkgewotICAgICAgdmFyIHByZWRpY2F0ZVZhbCA9IF9lbWJlck1ldGFsU3RyZWFt
c1V0aWxzLnJlYWQocHJlZGljYXRlKTsKLSAgICAgIHZhciBsZW5ndGhWYWwgPSBfZW1iZXJNZXRh
bFN0cmVhbXNVdGlscy5yZWFkKGxlbmd0aCk7Ci0gICAgICB2YXIgaXNUcnV0aHlWYWwgPSBfZW1i
ZXJNZXRhbFN0cmVhbXNVdGlscy5yZWFkKGlzVHJ1dGh5KTsKLQotICAgICAgaWYgKF9lbWJlclJ1
bnRpbWVVdGlscy5pc0FycmF5KHByZWRpY2F0ZVZhbCkpIHsKLSAgICAgICAgcmV0dXJuIGxlbmd0
aFZhbCA+IDAgPyBjb2VyY2VyKHByZWRpY2F0ZVZhbCkgOiBmYWxzZTsKLSAgICAgIH0KLQotICAg
ICAgaWYgKHR5cGVvZiBpc1RydXRoeVZhbCA9PT0gJ2Jvb2xlYW4nKSB7Ci0gICAgICAgIHJldHVy
biBpc1RydXRoeVZhbCA/IGNvZXJjZXIocHJlZGljYXRlVmFsKSA6IGZhbHNlOwotICAgICAgfQot
Ci0gICAgICByZXR1cm4gY29lcmNlcihwcmVkaWNhdGVWYWwpOwotICAgIH0sICdTaG91bGREaXNw
bGF5Jyk7Ci0KLSAgICBfZW1iZXJNZXRhbFN0cmVhbXNVdGlscy5hZGREZXBlbmRlbmN5KHN0cmVh
bSwgbGVuZ3RoKTsKLSAgICBfZW1iZXJNZXRhbFN0cmVhbXNVdGlscy5hZGREZXBlbmRlbmN5KHN0
cmVhbSwgaXNUcnV0aHkpOwotCi0gICAgcmV0dXJuIHN0cmVhbTsKLSAgfQotCi0gIGZ1bmN0aW9u
IHRvQm9vbCh2YWx1ZSkgewotICAgIHJldHVybiAhIXZhbHVlOwotICB9Ci0KLSAgZnVuY3Rpb24g
aWRlbnRpdHkodmFsdWUpIHsKLSAgICByZXR1cm4gdmFsdWU7Ci0gIH0KLQotICBmdW5jdGlvbiBn
ZXRLZXkob2JqLCBrZXkpIHsKLSAgICBpZiAoX2VtYmVyTWV0YWxTdHJlYW1zVXRpbHMuaXNTdHJl
YW0ob2JqKSkgewotICAgICAgcmV0dXJuIG9iai5nZXRLZXkoa2V5KTsKLSAgICB9IGVsc2Ugewot
ICAgICAgcmV0dXJuIG9iaiAmJiBvYmpba2V5XTsKLSAgICB9Ci0gIH0KLX0pOwotZW5pZmVkKCdl
bWJlci1odG1sYmFycy9ob29rcy9sb29rdXAtaGVscGVyJywgWydleHBvcnRzJywgJ2VtYmVyLWh0
bWxiYXJzL3N5c3RlbS9sb29rdXAtaGVscGVyJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJI
dG1sYmFyc1N5c3RlbUxvb2t1cEhlbHBlcikgewotICAndXNlIHN0cmljdCc7Ci0KLSAgZXhwb3J0
cy5kZWZhdWx0ID0gbG9va3VwSGVscGVySG9vazsKLQotICBmdW5jdGlvbiBsb29rdXBIZWxwZXJI
b29rKGVudiwgc2NvcGUsIGhlbHBlck5hbWUpIHsKLSAgICByZXR1cm4gX2VtYmVySHRtbGJhcnNT
eXN0ZW1Mb29rdXBIZWxwZXIuZGVmYXVsdChoZWxwZXJOYW1lLCBzY29wZS5nZXRTZWxmKCksIGVu
dik7Ci0gIH0KLX0pOwotZW5pZmVkKCdlbWJlci1odG1sYmFycy9ob29rcy9zdWJleHByJywgWydl
eHBvcnRzJywgJ2VtYmVyLWh0bWxiYXJzL3N5c3RlbS9sb29rdXAtaGVscGVyJywgJ2VtYmVyLWh0
bWxiYXJzL3N5c3RlbS9pbnZva2UtaGVscGVyJywgJ2VtYmVyLW1ldGFsL3N0cmVhbXMvdXRpbHMn
LCAnZW1iZXItaHRtbGJhcnMvaG9va3MvbGluay1yZW5kZXItbm9kZSddLCBmdW5jdGlvbiAoZXhw
b3J0cywgX2VtYmVySHRtbGJhcnNTeXN0ZW1Mb29rdXBIZWxwZXIsIF9lbWJlckh0bWxiYXJzU3lz
dGVtSW52b2tlSGVscGVyLCBfZW1iZXJNZXRhbFN0cmVhbXNVdGlscywgX2VtYmVySHRtbGJhcnNI
b29rc0xpbmtSZW5kZXJOb2RlKSB7Ci0gIC8qKgotICBAbW9kdWxlIGVtYmVyCi0gIEBzdWJtb2R1
bGUgZW1iZXItaHRtbGJhcnMKLSAgKi8KLQotICAndXNlIHN0cmljdCc7Ci0KLSAgZXhwb3J0cy5k
ZWZhdWx0ID0gc3ViZXhwcjsKLSAgZXhwb3J0cy5sYWJlbEZvclN1YmV4cHIgPSBsYWJlbEZvclN1
YmV4cHI7Ci0KLSAgZnVuY3Rpb24gc3ViZXhwcihlbnYsIHNjb3BlLCBoZWxwZXJOYW1lLCBwYXJh
bXMsIGhhc2gpIHsKLSAgICAvLyBUT0RPOiBLZXl3b3JkcyBhbmQgaGVscGVyIGludm9jYXRpb24g
c2hvdWxkIGJlIGludGVncmF0ZWQgaW50bwotICAgIC8vIHRoZSBzdWJleHByIGhvb2sgdXBzdHJl
YW0gaW4gSFRNTEJhcnMuCi0gICAgdmFyIGtleXdvcmQgPSBlbnYuaG9va3Mua2V5d29yZHNbaGVs
cGVyTmFtZV07Ci0gICAgaWYgKGtleXdvcmQpIHsKLSAgICAgIHJldHVybiBrZXl3b3JkKG51bGws
IGVudiwgc2NvcGUsIHBhcmFtcywgaGFzaCwgbnVsbCwgbnVsbCk7Ci0gICAgfQotCi0gICAgX2Vt
YmVySHRtbGJhcnNIb29rc0xpbmtSZW5kZXJOb2RlLmxpbmtQYXJhbXNGb3IoaGVscGVyTmFtZSwg
cGFyYW1zKTsKLQotICAgIHZhciBsYWJlbCA9IGxhYmVsRm9yU3ViZXhwcihwYXJhbXMsIGhhc2gs
IGhlbHBlck5hbWUpOwotICAgIHZhciBoZWxwZXIgPSBfZW1iZXJIdG1sYmFyc1N5c3RlbUxvb2t1
cEhlbHBlci5kZWZhdWx0KGhlbHBlck5hbWUsIHNjb3BlLmdldFNlbGYoKSwgZW52KTsKLQotICAg
IHZhciBoZWxwZXJTdHJlYW0gPSBfZW1iZXJIdG1sYmFyc1N5c3RlbUludm9rZUhlbHBlci5idWls
ZEhlbHBlclN0cmVhbShoZWxwZXIsIHBhcmFtcywgaGFzaCwgbnVsbCwgZW52LCBzY29wZSwgbGFi
ZWwpOwotCi0gICAgZm9yICh2YXIgaSA9IDAsIGwgPSBwYXJhbXMubGVuZ3RoOyBpIDwgbDsgaSsr
KSB7Ci0gICAgICBoZWxwZXJTdHJlYW0uYWRkRGVwZW5kZW5jeShwYXJhbXNbaV0pOwotICAgIH0K
LQotICAgIGZvciAodmFyIGtleSBpbiBoYXNoKSB7Ci0gICAgICBoZWxwZXJTdHJlYW0uYWRkRGVw
ZW5kZW5jeShoYXNoW2tleV0pOwotICAgIH0KLQotICAgIHJldHVybiBoZWxwZXJTdHJlYW07Ci0g
IH0KLQotICBmdW5jdGlvbiBsYWJlbEZvclN1YmV4cHIocGFyYW1zLCBoYXNoLCBoZWxwZXJOYW1l
KSB7Ci0gICAgdmFyIHBhcmFtc0xhYmVscyA9IGxhYmVsc0ZvclBhcmFtcyhwYXJhbXMpOwotICAg
IHZhciBoYXNoTGFiZWxzID0gbGFiZWxzRm9ySGFzaChoYXNoKTsKLSAgICB2YXIgbGFiZWwgPSAn
KCcgKyBoZWxwZXJOYW1lOwotCi0gICAgaWYgKHBhcmFtc0xhYmVscykgewotICAgICAgbGFiZWwg
Kz0gJyAnICsgcGFyYW1zTGFiZWxzOwotICAgIH0KLSAgICBpZiAoaGFzaExhYmVscykgewotICAg
ICAgbGFiZWwgKz0gJyAnICsgaGFzaExhYmVsczsKLSAgICB9Ci0KLSAgICByZXR1cm4gbGFiZWwg
KyAnKSc7Ci0gIH0KLQotICBmdW5jdGlvbiBsYWJlbHNGb3JQYXJhbXMocGFyYW1zKSB7Ci0gICAg
cmV0dXJuIF9lbWJlck1ldGFsU3RyZWFtc1V0aWxzLmxhYmVsc0ZvcihwYXJhbXMpLmpvaW4oJyAn
KTsKLSAgfQotCi0gIGZ1bmN0aW9uIGxhYmVsc0Zvckhhc2goaGFzaCkgewotICAgIHZhciBvdXQg
PSBbXTsKLQotICAgIGZvciAodmFyIHByb3AgaW4gaGFzaCkgewotICAgICAgb3V0LnB1c2gocHJv
cCArICc9JyArIF9lbWJlck1ldGFsU3RyZWFtc1V0aWxzLmxhYmVsRm9yKGhhc2hbcHJvcF0pKTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gb3V0LmpvaW4oJyAnKTsKLSAgfQotfSk7Ci1lbmlmZWQoJ2Vt
YmVyLWh0bWxiYXJzL2hvb2tzL3VwZGF0ZS1zZWxmJywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFs
L2RlYnVnJywgJ2VtYmVyLW1ldGFsL3Byb3BlcnR5X2dldCddLCBmdW5jdGlvbiAoZXhwb3J0cywg
X2VtYmVyTWV0YWxEZWJ1ZywgX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQpIHsKLSAgLyoqCi0gIEBt
b2R1bGUgZW1iZXIKLSAgQHN1Ym1vZHVsZSBlbWJlci1odG1sYmFycwotICAqLwotCi0gICd1c2Ug
c3RyaWN0JzsKLQotICBleHBvcnRzLmRlZmF1bHQgPSB1cGRhdGVTZWxmOwotCi0gIGZ1bmN0aW9u
IHVwZGF0ZVNlbGYoZW52LCBzY29wZSwgX3NlbGYpIHsKLSAgICB2YXIgc2VsZiA9IF9zZWxmOwot
Ci0gICAgaWYgKHNlbGYgJiYgc2VsZi5oYXNCb3VuZENvbnRyb2xsZXIpIHsKLSAgICAgIHZhciBf
c2VsZjIgPSBzZWxmOwotICAgICAgdmFyIGNvbnRyb2xsZXIgPSBfc2VsZjIuY29udHJvbGxlcjsK
LQotICAgICAgc2VsZiA9IHNlbGYuc2VsZjsKLQotICAgICAgc2NvcGUudXBkYXRlTG9jYWwoJ2Nv
bnRyb2xsZXInLCBjb250cm9sbGVyIHx8IHNlbGYpOwotICAgIH0KLQotICAgIF9lbWJlck1ldGFs
RGVidWcuYXNzZXJ0KCdCVUc6IHNjb3BlLmF0dHJzIGFuZCBzZWxmLmlzVmlldyBzaG91bGQgbm90
IGJvdGggYmUgdHJ1ZScsICEoc2NvcGUuYXR0cnMgJiYgc2VsZi5pc1ZpZXcpKTsKLQotICAgIGlm
IChzZWxmICYmIHNlbGYuaXNWaWV3KSB7Ci0gICAgICBzY29wZS51cGRhdGVMb2NhbCgndmlldycs
IHNlbGYpOwotICAgICAgc2NvcGUudXBkYXRlU2VsZihfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5n
ZXQoc2VsZiwgJ2NvbnRleHQnKSwgJycpOwotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHNj
b3BlLnVwZGF0ZVNlbGYoc2VsZik7Ci0gIH0KLX0pOwotZW5pZmVkKCJlbWJlci1odG1sYmFycy9o
b29rcy93aWxsLWNsZWFudXAtdHJlZSIsIFsiZXhwb3J0cyJdLCBmdW5jdGlvbiAoZXhwb3J0cykg
ewotICAidXNlIHN0cmljdCI7Ci0KLSAgZXhwb3J0cy5kZWZhdWx0ID0gd2lsbENsZWFudXBUcmVl
OwotCi0gIGZ1bmN0aW9uIHdpbGxDbGVhbnVwVHJlZShlbnYpIHsKLSAgICB2YXIgdmlldyA9IGVu
di52aWV3OwotCi0gICAgLy8gV2hlbiB3ZSBnbyB0byBjbGVhbiB1cCB0aGUgcmVuZGVyIG5vZGUg
YW5kIGFsbCBvZiBpdHMgY2hpbGRyZW4sIHdlIG1heQotICAgIC8vIGVuY291bnRlciB2aWV3cy9j
b21wb25lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aG9zZSBub2RlcyBhbG9uZyB0aGUgd2F5LiBJbgot
ICAgIC8vIHRob3NlIGNhc2VzLCB3ZSBuZWVkIHRvIHNldmVyIHRoZSBsaW5rIGJldHdlZW4gdGhl
Ci0gICAgLy8gZXhpc3RpbmcgdmlldyBoaWVyYXJjaHkgYW5kIHRob3NlIHZpZXdzLgotICAgIC8v
Ci0gICAgLy8gSG93ZXZlciwgd2UgZG8gKm5vdCogbmVlZCB0byByZW1vdmUgdGhlIGNoaWxkIHZp
ZXdzIG9mIGNoaWxkIHZpZXdzLCBzaW5jZQotICAgIC8vIHNldmVyaW5nIHRoZSBjb25uZWN0aW9u
IHRvIHRoZWlyIHBhcmVudCBlZmZlY3RpdmVseSBzZXZlcnMgdGhlbSBmcm9tIHRoZQotICAgIC8v
IHZpZXcgZ3JhcGguCi0gICAgLy8KLSAgICAvLyBGb3IgZXhhbXBsZSwgaW1hZ2luZSB0aGUgZm9s
bG93aW5nIHZpZXcgZ3JhcGg6Ci0gICAgLy8KLSAgICAvLyAgICBBCi0gICAgLy8gICAvIFwKLSAg
ICAvLyAgQiAgQwotICAgIC8vICAgIC8gXAotICAgIC8vICAgRCAgRQotICAgIC8vCi0gICAgLy8g
SWYgd2UgYXJlIGNsZWFuaW5nIHVwIHRoZSBub2RlIGZvciB2aWV3IEMsIHdlIG5lZWQgdG8gcmVt
b3ZlIHRoYXQgdmlldwotICAgIC8vIGZyb20gQSdzIGNoaWxkIHZpZXdzLiBIb3dldmVyLCB3ZSBk
byBub3QgbmVlZCB0byByZW1vdmUgRCBhbmQgRSBmcm9tIEMncwotICAgIC8vIGNoaWxkIHZpZXdz
LCBzaW5jZSByZW1vdmluZyBDIHRyYW5zaXRpdmVseSByZW1vdmVzIEQgYW5kIEUgYXMgd2VsbC4K
LSAgICAvLwotICAgIC8vIFRvIGFjY29tcGxpc2ggdGhpcywgd2UgdHJhY2sgdGhlIG5lYXJlc3Qg
dmlldyB0byB0aGlzIHJlbmRlciBub2RlIG9uIHRoZQotICAgIC8vIG93bmVyIHZpZXcsIHRoZSBy
b290LW1vc3QgdmlldyBpbiB0aGUgZ3JhcGggKEEgaW4gdGhlIGV4YW1wbGUgYWJvdmUpLiBJZgot
ICAgIC8vIHdlIGRldGVjdCBhIHZpZXcgdGhhdCBpcyBhIGRpcmVjdCBjaGlsZCBvZiB0aGF0IHZp
ZXcsIHdlIHJlbW92ZSBpdCBmcm9tCi0gICAgLy8gdGhlIGBjaGlsZFZpZXdzYCBhcnJheS4gT3Ro
ZXIgcGFyZW50L2NoaWxkIHZpZXcgcmVsYXRpb25zaGlwcyBhcmUKLSAgICAvLyB1bnRvdWNoZWQu
ICBUaGlzIHZpZXcgaXMgdGhlbiBjbGVhcmVkIG9uY2UgY2xlYW51cCBpcyBjb21wbGV0ZSBpbgot
ICAgIC8vIGBkaWRDbGVhbnVwVHJlZWAuCi0gICAgdmlldy5vd25lclZpZXcuX2Rlc3Ryb3lpbmdT
dWJ0cmVlRm9yVmlldyA9IHZpZXc7Ci0gIH0KLX0pOwotZW5pZmVkKCdlbWJlci1odG1sYmFycy9p
bmRleCcsIFsnZXhwb3J0cycsICdlbWJlci1tZXRhbC9jb3JlJywgJ2VtYmVyLXRlbXBsYXRlLWNv
bXBpbGVyJywgJ2VtYmVyLWh0bWxiYXJzL3N5c3RlbS9tYWtlX2JvdW5kX2hlbHBlcicsICdlbWJl
ci1odG1sYmFycy9oZWxwZXJzJywgJ2VtYmVyLWh0bWxiYXJzL2hlbHBlcnMvaWZfdW5sZXNzJywg
J2VtYmVyLWh0bWxiYXJzL2hlbHBlcnMvd2l0aCcsICdlbWJlci1odG1sYmFycy9oZWxwZXJzL2xv
YycsICdlbWJlci1odG1sYmFycy9oZWxwZXJzL2xvZycsICdlbWJlci1odG1sYmFycy9oZWxwZXJz
L2VhY2gnLCAnZW1iZXItaHRtbGJhcnMvaGVscGVycy9lYWNoLWluJywgJ2VtYmVyLWh0bWxiYXJz
L2hlbHBlcnMvLW5vcm1hbGl6ZS1jbGFzcycsICdlbWJlci1odG1sYmFycy9oZWxwZXJzL2NvbmNh
dCcsICdlbWJlci1odG1sYmFycy9oZWxwZXJzLy1qb2luLWNsYXNzZXMnLCAnZW1iZXItaHRtbGJh
cnMvaGVscGVycy8taHRtbC1zYWZlJywgJ2VtYmVyLWh0bWxiYXJzL2hlbHBlcnMvaGFzaCcsICdl
bWJlci1odG1sYmFycy9zeXN0ZW0vZG9tLWhlbHBlcicsICdlbWJlci1odG1sYmFycy9oZWxwZXIn
LCAnZW1iZXItaHRtbGJhcnMvdGVtcGxhdGVfcmVnaXN0cnknLCAnZW1iZXItaHRtbGJhcnMvc3lz
dGVtL2Jvb3RzdHJhcCcsICdlbWJlci1odG1sYmFycy9jb21wYXQnXSwgZnVuY3Rpb24gKGV4cG9y
dHMsIF9lbWJlck1ldGFsQ29yZSwgX2VtYmVyVGVtcGxhdGVDb21waWxlciwgX2VtYmVySHRtbGJh
cnNTeXN0ZW1NYWtlX2JvdW5kX2hlbHBlciwgX2VtYmVySHRtbGJhcnNIZWxwZXJzLCBfZW1iZXJI
dG1sYmFyc0hlbHBlcnNJZl91bmxlc3MsIF9lbWJlckh0bWxiYXJzSGVscGVyc1dpdGgsIF9lbWJl
ckh0bWxiYXJzSGVscGVyc0xvYywgX2VtYmVySHRtbGJhcnNIZWxwZXJzTG9nLCBfZW1iZXJIdG1s
YmFyc0hlbHBlcnNFYWNoLCBfZW1iZXJIdG1sYmFyc0hlbHBlcnNFYWNoSW4sIF9lbWJlckh0bWxi
YXJzSGVscGVyc05vcm1hbGl6ZUNsYXNzLCBfZW1iZXJIdG1sYmFyc0hlbHBlcnNDb25jYXQsIF9l
bWJlckh0bWxiYXJzSGVscGVyc0pvaW5DbGFzc2VzLCBfZW1iZXJIdG1sYmFyc0hlbHBlcnNIdG1s
U2FmZSwgX2VtYmVySHRtbGJhcnNIZWxwZXJzSGFzaCwgX2VtYmVySHRtbGJhcnNTeXN0ZW1Eb21I
ZWxwZXIsIF9lbWJlckh0bWxiYXJzSGVscGVyLCBfZW1iZXJIdG1sYmFyc1RlbXBsYXRlX3JlZ2lz
dHJ5LCBfZW1iZXJIdG1sYmFyc1N5c3RlbUJvb3RzdHJhcCwgX2VtYmVySHRtbGJhcnNDb21wYXQp
IHsKLSAgLyoqCi0gICAgRW1iZXIgdGVtcGxhdGVzIGFyZSBleGVjdXRlZCBieSBbSFRNTEJhcnNd
KGh0dHBzOi8vZ2l0aHViLmNvbS90aWxkZWlvL2h0bWxiYXJzKSwKLSAgICBhbiBIVE1MLWZyaWVu
ZGx5IHZlcnNpb24gb2YgW0hhbmRsZWJhcnNdKGh0dHA6Ly9oYW5kbGViYXJzanMuY29tLykuIEFu
eSB2YWxpZCBIYW5kbGViYXJzIHN5bnRheCBpcyB2YWxpZCBpbiBhbiBFbWJlciB0ZW1wbGF0ZS4K
LSAgCi0gICAgIyMjIFNob3dpbmcgYSBwcm9wZXJ0eQotICAKLSAgICBUZW1wbGF0ZXMgbWFuYWdl
IHRoZSBmbG93IG9mIGFuIGFwcGxpY2F0aW9uJ3MgVUksIGFuZCBkaXNwbGF5IHN0YXRlICh0aHJv
dWdoCi0gICAgdGhlIERPTSkgdG8gYSB1c2VyLiBGb3IgZXhhbXBsZSwgZ2l2ZW4gYSBjb21wb25l
bnQgd2l0aCB0aGUgcHJvcGVydHkgIm5hbWUiLAotICAgIHRoYXQgY29tcG9uZW50J3MgdGVtcGxh
dGUgY2FuIHVzZSB0aGUgbmFtZSBpbiBzZXZlcmFsIHdheXM6Ci0gIAotICAgIGBgYGphdmFzY3Jp
cHQKLSAgICAvLyBhcHAvY29tcG9uZW50cy9wZXJzb24uanMKLSAgICBleHBvcnQgZGVmYXVsdCBF
bWJlci5Db21wb25lbnQuZXh0ZW5kKHsKLSAgICAgIG5hbWU6ICdKaWxsJwotICAgIH0pOwotICAg
IGBgYAotICAKLSAgICBgYGBoYW5kbGViYXJzCi0gICAge3shIGFwcC9jb21wb25lbnRzL3BlcnNv
bi5oYnMgfX0KLSAgICB7e25hbWV9fQotICAgIDxkaXY+e3tuYW1lfX08L2Rpdj4KLSAgICA8c3Bh
biBkYXRhLW5hbWU9e3tuYW1lfX0+PC9zcGFuPgotICAgIGBgYAotICAKLSAgICBBbnkgdGltZSB0
aGUgIm5hbWUiIHByb3BlcnR5IG9uIHRoZSBjb21wb25lbnQgY2hhbmdlcywgdGhlIERPTSB3aWxs
IGJlCi0gICAgdXBkYXRlZC4KLSAgCi0gICAgUHJvcGVydGllcyBjYW4gYmUgY2hhaW5lZCBhcyB3
ZWxsOgotICAKLSAgICBgYGBoYW5kbGViYXJzCi0gICAge3thVXNlck1vZGVsLm5hbWV9fQotICAg
IDxkaXY+e3tsaXN0T2ZVc2Vycy5maXJzdE9iamVjdC5uYW1lfX08L2Rpdj4KLSAgICBgYGAKLSAg
Ci0gICAgIyMjIFVzaW5nIEVtYmVyIGhlbHBlcnMKLSAgCi0gICAgV2hlbiBjb250ZW50IGlzIHBh
c3NlZCBpbiBtdXN0YWNoZXMgYHt7fX1gLCBFbWJlciB3aWxsIGZpcnN0IHRyeSB0byBmaW5kIGEg
aGVscGVyCi0gICAgb3IgY29tcG9uZW50IHdpdGggdGhhdCBuYW1lLiBGb3IgZXhhbXBsZSwgdGhl
IGBpZmAgaGVscGVyOgotICAKLSAgICBgYGBoYW5kbGViYXJzCi0gICAge3tpZiBuYW1lICJJIGhh
dmUgYSBuYW1lIiAiSSBoYXZlIG5vIG5hbWUifX0KLSAgICA8c3BhbiBkYXRhLWhhcy1uYW1lPXt7
aWYgbmFtZSB0cnVlfX0+PC9zcGFuPgotICAgIGBgYAotICAKLSAgICBUaGUgcmV0dXJuZWQgdmFs
dWUgaXMgcGxhY2VkIHdoZXJlIHRoZSBge3t9fWAgaXMgY2FsbGVkLiBUaGUgYWJvdmUgc3R5bGUg
aXMKLSAgICBjYWxsZWQgImlubGluZSIuIEEgc2Vjb25kIHN0eWxlIG9mIGhlbHBlciB1c2FnZSBp
cyBjYWxsZWQgImJsb2NrIi4gRm9yIGV4YW1wbGU6Ci0gIAotICAgIGBgYGhhbmRsZWJhcnMKLSAg
ICB7eyNpZiBuYW1lfX0KLSAgICAgIEkgaGF2ZSBhIG5hbWUKLSAgICB7e2Vsc2V9fQotICAgICAg
SSBoYXZlIG5vIG5hbWUKLSAgICB7ey9pZn19Ci0gICAgYGBgCi0gIAotICAgIFRoZSBibG9jayBm
b3JtIG9mIGhlbHBlcnMgYWxsb3dzIHlvdSB0byBjb250cm9sIGhvdyB0aGUgVUkgaXMgY3JlYXRl
ZCBiYXNlZAotICAgIG9uIHRoZSB2YWx1ZXMgb2YgcHJvcGVydGllcy4KLSAgCi0gICAgQSB0aGly
ZCBmb3JtIG9mIGhlbHBlciBpcyBjYWxsZWQgIm5lc3RlZCIuIEZvciBleGFtcGxlIGhlcmUgdGhl
IGNvbmNhdAotICAgIGhlbHBlciB3aWxsIGFkZCAiIERvZSIgdG8gYSBkaXNwbGF5ZWQgbmFtZSBp
ZiB0aGUgcGVyc29uIGhhcyBubyBsYXN0IG5hbWU6Ci0gIAotICAgIGBgYGhhbmRsZWJhcnMKLSAg
ICA8c3BhbiBkYXRhLW5hbWU9e3tjb25jYXQgZmlyc3ROYW1lICgKLSAgICAgaWYgbGFzdE5hbWUg
KGNvbmNhdCAiICIgbGFzdE5hbWUpICJEb2UiCi0gICAgKX19Pjwvc3Bhbj4KLSAgICBgYGAKLSAg
Ci0gICAgRW1iZXIncyBidWlsdC1pbiBoZWxwZXJzIGFyZSBkZXNjcmliZWQgdW5kZXIgdGhlIFtF
bWJlci5UZW1wbGF0ZXMuaGVscGVyc10oL2FwaS9jbGFzc2VzL0VtYmVyLlRlbXBsYXRlcy5oZWxw
ZXJzLmh0bWwpCi0gICAgbmFtZXNwYWNlLiBEb2N1bWVudGF0aW9uIG9uIGNyZWF0aW5nIGN1c3Rv
bSBoZWxwZXJzIGNhbiBiZSBmb3VuZCB1bmRlcgotICAgIFtFbWJlci5IZWxwZXJdKC9hcGkvY2xh
c3Nlcy9FbWJlci5IZWxwZXIuaHRtbCkuCi0gIAotICAgICMjIyBJbnZva2luZyBhIENvbXBvbmVu
dAotICAKLSAgICBFbWJlciBjb21wb25lbnRzIHJlcHJlc2VudCBzdGF0ZSB0byB0aGUgVUkgb2Yg
YW4gYXBwbGljYXRpb24uIEZ1cnRoZXIKLSAgICByZWFkaW5nIG9uIGNvbXBvbmVudHMgY2FuIGJl
IGZvdW5kIHVuZGVyIFtFbWJlci5Db21wb25lbnRdKC9hcGkvY2xhc3Nlcy9FbWJlci5Db21wb25l
bnQuaHRtbCkuCi0gIAotICAgIEBtb2R1bGUgZW1iZXIKLSAgICBAc3VibW9kdWxlIGVtYmVyLXRl
bXBsYXRlcwotICAgIEBtYWluIGVtYmVyLXRlbXBsYXRlcwotICAgIEBwdWJsaWMKLSAgKi8KLQot
ICAvKioKLSAgCi0gICAgW0hUTUxCYXJzXShodHRwczovL2dpdGh1Yi5jb20vdGlsZGVpby9odG1s
YmFycykgaXMgYSBbSGFuZGxlYmFyc10oaHR0cDovL2hhbmRsZWJhcnNqcy5jb20vKQotICAgIGNv
bXBhdGlibGUgdGVtcGxhdGluZyBlbmdpbmUgdXNlZCBieSBFbWJlci5qcy4gVGhlIGNsYXNzZXMg
YW5kIG5hbWVzcGFjZXMKLSAgICBjb3ZlcmVkIGJ5IHRoaXMgZG9jdW1lbnRhdGlvbiBhdHRlbXB0
IHRvIGZvY3VzIG9uIEFQSXMgZm9yIGludGVyYWN0aW5nCi0gICAgd2l0aCBIVE1MQmFycyBpdHNl
bGYuIEZvciBtb3JlIGdlbmVyYWwgZ3VpZGFuY2Ugb24gRW1iZXIuanMgdGVtcGxhdGVzIGFuZAot
ICAgIGhlbHBlcnMsIHBsZWFzZSBzZWUgdGhlIFtlbWJlci10ZW1wbGF0ZXNdKC9hcGkvbW9kdWxl
cy9lbWJlci10ZW1wbGF0ZXMuaHRtbCkKLSAgICBwYWNrYWdlLgotICAKLSAgICBAbW9kdWxlIGVt
YmVyCi0gICAgQHN1Ym1vZHVsZSBlbWJlci1odG1sYmFycwotICAgIEBtYWluIGVtYmVyLWh0bWxi
YXJzCi0gICAgQHB1YmxpYwotICAqLwotICAndXNlIHN0cmljdCc7Ci0KLSAgX2VtYmVySHRtbGJh
cnNIZWxwZXJzLnJlZ2lzdGVySGVscGVyKCdpZicsIF9lbWJlckh0bWxiYXJzSGVscGVyc0lmX3Vu
bGVzcy5pZkhlbHBlcik7Ci0gIF9lbWJlckh0bWxiYXJzSGVscGVycy5yZWdpc3RlckhlbHBlcign
dW5sZXNzJywgX2VtYmVySHRtbGJhcnNIZWxwZXJzSWZfdW5sZXNzLnVubGVzc0hlbHBlcik7Ci0g
IF9lbWJlckh0bWxiYXJzSGVscGVycy5yZWdpc3RlckhlbHBlcignd2l0aCcsIF9lbWJlckh0bWxi
YXJzSGVscGVyc1dpdGguZGVmYXVsdCk7Ci0gIF9lbWJlckh0bWxiYXJzSGVscGVycy5yZWdpc3Rl
ckhlbHBlcignbG9jJywgX2VtYmVySHRtbGJhcnNIZWxwZXJzTG9jLmRlZmF1bHQpOwotICBfZW1i
ZXJIdG1sYmFyc0hlbHBlcnMucmVnaXN0ZXJIZWxwZXIoJ2xvZycsIF9lbWJlckh0bWxiYXJzSGVs
cGVyc0xvZy5kZWZhdWx0KTsKLSAgX2VtYmVySHRtbGJhcnNIZWxwZXJzLnJlZ2lzdGVySGVscGVy
KCdlYWNoJywgX2VtYmVySHRtbGJhcnNIZWxwZXJzRWFjaC5kZWZhdWx0KTsKLSAgX2VtYmVySHRt
bGJhcnNIZWxwZXJzLnJlZ2lzdGVySGVscGVyKCdlYWNoLWluJywgX2VtYmVySHRtbGJhcnNIZWxw
ZXJzRWFjaEluLmRlZmF1bHQpOwotICBfZW1iZXJIdG1sYmFyc0hlbHBlcnMucmVnaXN0ZXJIZWxw
ZXIoJy1ub3JtYWxpemUtY2xhc3MnLCBfZW1iZXJIdG1sYmFyc0hlbHBlcnNOb3JtYWxpemVDbGFz
cy5kZWZhdWx0KTsKLSAgX2VtYmVySHRtbGJhcnNIZWxwZXJzLnJlZ2lzdGVySGVscGVyKCdjb25j
YXQnLCBfZW1iZXJIdG1sYmFyc0hlbHBlcnNDb25jYXQuZGVmYXVsdCk7Ci0gIF9lbWJlckh0bWxi
YXJzSGVscGVycy5yZWdpc3RlckhlbHBlcignLWpvaW4tY2xhc3NlcycsIF9lbWJlckh0bWxiYXJz
SGVscGVyc0pvaW5DbGFzc2VzLmRlZmF1bHQpOwotICBfZW1iZXJIdG1sYmFyc0hlbHBlcnMucmVn
aXN0ZXJIZWxwZXIoJy1odG1sLXNhZmUnLCBfZW1iZXJIdG1sYmFyc0hlbHBlcnNIdG1sU2FmZS5k
ZWZhdWx0KTsKLSAgX2VtYmVySHRtbGJhcnNIZWxwZXJzLnJlZ2lzdGVySGVscGVyKCdoYXNoJywg
X2VtYmVySHRtbGJhcnNIZWxwZXJzSGFzaC5kZWZhdWx0KTsKLQotICBfZW1iZXJNZXRhbENvcmUu
ZGVmYXVsdC5IVE1MQmFycyA9IHsKLSAgICB0ZW1wbGF0ZTogX2VtYmVyVGVtcGxhdGVDb21waWxl
ci50ZW1wbGF0ZSwKLSAgICBjb21waWxlOiBfZW1iZXJUZW1wbGF0ZUNvbXBpbGVyLmNvbXBpbGUs
Ci0gICAgcHJlY29tcGlsZTogX2VtYmVyVGVtcGxhdGVDb21waWxlci5wcmVjb21waWxlLAotICAg
IG1ha2VCb3VuZEhlbHBlcjogX2VtYmVySHRtbGJhcnNTeXN0ZW1NYWtlX2JvdW5kX2hlbHBlci5k
ZWZhdWx0LAotICAgIHJlZ2lzdGVyUGx1Z2luOiBfZW1iZXJUZW1wbGF0ZUNvbXBpbGVyLnJlZ2lz
dGVyUGx1Z2luLAotICAgIERPTUhlbHBlcjogX2VtYmVySHRtbGJhcnNTeXN0ZW1Eb21IZWxwZXIu
ZGVmYXVsdAotICB9OwotCi0gIF9lbWJlckh0bWxiYXJzSGVscGVyLmRlZmF1bHQuaGVscGVyID0g
X2VtYmVySHRtbGJhcnNIZWxwZXIuaGVscGVyOwotICBfZW1iZXJNZXRhbENvcmUuZGVmYXVsdC5I
ZWxwZXIgPSBfZW1iZXJIdG1sYmFyc0hlbHBlci5kZWZhdWx0OwotCi0gIC8qKgotICAgIEdsb2Jh
bCBoYXNoIG9mIHNoYXJlZCB0ZW1wbGF0ZXMuIFRoaXMgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIHBv
cHVsYXRlZAotICAgIGJ5IHRoZSBidWlsZCB0b29scyBzbyB0aGF0IHlvdSBjYW4gc3RvcmUgeW91
ciBIYW5kbGViYXJzIHRlbXBsYXRlcyBpbgotICAgIHNlcGFyYXRlIGZpbGVzIHRoYXQgZ2V0IGxv
YWRlZCBpbnRvIEphdmFTY3JpcHQgYXQgYnVpbGR0aW1lLgotICAKLSAgICBAcHJvcGVydHkgVEVN
UExBVEVTCi0gICAgQGZvciBFbWJlcgotICAgIEB0eXBlIE9iamVjdAotICAgIEBwcml2YXRlCi0g
ICovCi0gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfZW1iZXJNZXRhbENvcmUuZGVmYXVsdCwgJ1RF
TVBMQVRFUycsIHsKLSAgICBjb25maWd1cmFibGU6IGZhbHNlLAotICAgIGdldDogX2VtYmVySHRt
bGJhcnNUZW1wbGF0ZV9yZWdpc3RyeS5nZXRUZW1wbGF0ZXMsCi0gICAgc2V0OiBfZW1iZXJIdG1s
YmFyc1RlbXBsYXRlX3JlZ2lzdHJ5LnNldFRlbXBsYXRlcwotICB9KTsKLX0pOwotCi0vLyBJbXBv
cnRpbmcgYWRkcyB0ZW1wbGF0ZSBib290c3RyYXBwaW5nCi0vLyBpbml0aWFsaXplciB0byBlbmFi
bGUgZW1iZWRkZWQgdGVtcGxhdGVzLgotCi0vLyBJbXBvcnRpbmcgZW1iZXItaHRtbGJhcnMvY29t
cGF0IHVwZGF0ZXMgdGhlCi0vLyBFbWJlci5IYW5kbGViYXJzIGdsb2JhbCBpZiBodG1sYmFycyBp
cyBlbmFibGVkLgotZW5pZmVkKCdlbWJlci1odG1sYmFycy9rZXl3b3JkcycsIFsnZXhwb3J0cycs
ICdodG1sYmFycy1ydW50aW1lJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfaHRtbGJhcnNSdW50aW1l
KSB7Ci0gIC8qKgotICBAbW9kdWxlIGVtYmVyCi0gIEBzdWJtb2R1bGUgZW1iZXItaHRtbGJhcnMK
LSAgKi8KLQotICAndXNlIHN0cmljdCc7Ci0KLSAgZXhwb3J0cy5yZWdpc3RlcktleXdvcmQgPSBy
ZWdpc3RlcktleXdvcmQ7Ci0KLSAgLyoqCi0gICBAcHJpdmF0ZQotICAgQHByb3BlcnR5IGhlbHBl
cnMKLSAgKi8KLSAgdmFyIGtleXdvcmRzID0gT2JqZWN0LmNyZWF0ZShfaHRtbGJhcnNSdW50aW1l
Lmhvb2tzLmtleXdvcmRzKTsKLQotICAvKioKLSAgQG1vZHVsZSBlbWJlcgotICBAc3VibW9kdWxl
IGVtYmVyLWh0bWxiYXJzCi0gICovCi0KLSAgLyoqCi0gICAgQHByaXZhdGUKLSAgICBAbWV0aG9k
IF9yZWdpc3RlckhlbHBlcgotICAgIEBmb3IgRW1iZXIuSFRNTEJhcnMKLSAgICBAcGFyYW0ge1N0
cmluZ30gbmFtZQotICAgIEBwYXJhbSB7T2JqZWN0fEZ1bmN0aW9ufSBrZXl3b3JkIFRoZSBrZXl3
b3JkIHRvIGFkZC4KLSAgKi8KLQotICBmdW5jdGlvbiByZWdpc3RlcktleXdvcmQobmFtZSwga2V5
d29yZCkgewotICAgIGtleXdvcmRzW25hbWVdID0ga2V5d29yZDsKLSAgfQotCi0gIGV4cG9ydHMu
ZGVmYXVsdCA9IGtleXdvcmRzOwotfSk7Ci1lbmlmZWQoJ2VtYmVyLWh0bWxiYXJzL2tleXdvcmRz
L2Nsb3N1cmUtY29tcG9uZW50JywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFsL2RlYnVnJywgJ2Vt
YmVyLW1ldGFsL2lzX25vbmUnLCAnZW1iZXItbWV0YWwvc3ltYm9sJywgJ2VtYmVyLW1ldGFsL3N0
cmVhbXMvc3RyZWFtJywgJ2VtYmVyLW1ldGFsL2VtcHR5X29iamVjdCcsICdlbWJlci1tZXRhbC9z
dHJlYW1zL3V0aWxzJywgJ2VtYmVyLWh0bWxiYXJzL2hvb2tzL3N1YmV4cHInLCAnZW1iZXItbWV0
YWwvYXNzaWduJywgJ2VtYmVyLWh0bWxiYXJzL3V0aWxzL2V4dHJhY3QtcG9zaXRpb25hbC1wYXJh
bXMnLCAnZW1iZXItaHRtbGJhcnMvdXRpbHMvbG9va3VwLWNvbXBvbmVudCddLCBmdW5jdGlvbiAo
ZXhwb3J0cywgX2VtYmVyTWV0YWxEZWJ1ZywgX2VtYmVyTWV0YWxJc19ub25lLCBfZW1iZXJNZXRh
bFN5bWJvbCwgX2VtYmVyTWV0YWxTdHJlYW1zU3RyZWFtLCBfZW1iZXJNZXRhbEVtcHR5X29iamVj
dCwgX2VtYmVyTWV0YWxTdHJlYW1zVXRpbHMsIF9lbWJlckh0bWxiYXJzSG9va3NTdWJleHByLCBf
ZW1iZXJNZXRhbEFzc2lnbiwgX2VtYmVySHRtbGJhcnNVdGlsc0V4dHJhY3RQb3NpdGlvbmFsUGFy
YW1zLCBfZW1iZXJIdG1sYmFyc1V0aWxzTG9va3VwQ29tcG9uZW50KSB7Ci0gIC8qKgotICBAbW9k
dWxlIGVtYmVyCi0gIEBzdWJtb2R1bGUgZW1iZXItdGVtcGxhdGVzCi0gICovCi0KLSAgJ3VzZSBz
dHJpY3QnOwotCi0gIGV4cG9ydHMuZGVmYXVsdCA9IGNsb3N1cmVDb21wb25lbnQ7Ci0gIGV4cG9y
dHMuaXNDb21wb25lbnRDZWxsID0gaXNDb21wb25lbnRDZWxsOwotICBleHBvcnRzLnByb2Nlc3NQ
b3NpdGlvbmFsUGFyYW1zRnJvbUNlbGwgPSBwcm9jZXNzUG9zaXRpb25hbFBhcmFtc0Zyb21DZWxs
OwotICBleHBvcnRzLm1lcmdlSW5OZXdIYXNoID0gbWVyZ2VJbk5ld0hhc2g7Ci0gIHZhciBDT01Q
T05FTlRfUkVGRVJFTkNFID0gX2VtYmVyTWV0YWxTeW1ib2wuZGVmYXVsdCgnQ09NUE9ORU5UX1JF
RkVSRU5DRScpOwotICBleHBvcnRzLkNPTVBPTkVOVF9SRUZFUkVOQ0UgPSBDT01QT05FTlRfUkVG
RVJFTkNFOwotICB2YXIgQ09NUE9ORU5UX0NFTEwgPSBfZW1iZXJNZXRhbFN5bWJvbC5kZWZhdWx0
KCdDT01QT05FTlRfQ0VMTCcpOwotICBleHBvcnRzLkNPTVBPTkVOVF9DRUxMID0gQ09NUE9ORU5U
X0NFTEw7Ci0gIHZhciBDT01QT05FTlRfUEFUSCA9IF9lbWJlck1ldGFsU3ltYm9sLmRlZmF1bHQo
J0NPTVBPTkVOVF9QQVRIJyk7Ci0gIGV4cG9ydHMuQ09NUE9ORU5UX1BBVEggPSBDT01QT05FTlRf
UEFUSDsKLSAgdmFyIENPTVBPTkVOVF9QT1NJVElPTkFMX1BBUkFNUyA9IF9lbWJlck1ldGFsU3lt
Ym9sLmRlZmF1bHQoJ0NPTVBPTkVOVF9QT1NJVElPTkFMX1BBUkFNUycpOwotICBleHBvcnRzLkNP
TVBPTkVOVF9QT1NJVElPTkFMX1BBUkFNUyA9IENPTVBPTkVOVF9QT1NJVElPTkFMX1BBUkFNUzsK
LSAgdmFyIENPTVBPTkVOVF9IQVNIID0gX2VtYmVyTWV0YWxTeW1ib2wuZGVmYXVsdCgnQ09NUE9O
RU5UX0hBU0gnKTsKLQotICBleHBvcnRzLkNPTVBPTkVOVF9IQVNIID0gQ09NUE9ORU5UX0hBU0g7
Ci0gIHZhciBDbG9zdXJlQ29tcG9uZW50U3RyZWFtID0gX2VtYmVyTWV0YWxTdHJlYW1zU3RyZWFt
LmRlZmF1bHQuZXh0ZW5kKHsKLSAgICBpbml0OiBmdW5jdGlvbiAoZW52LCBwYXRoLCBwYXJhbXMs
IGhhc2gpIHsKLSAgICAgIHRoaXMuX2VudiA9IGVudjsKLSAgICAgIHRoaXMuX3BhdGggPSBwYXRo
OwotICAgICAgdGhpcy5fcGFyYW1zID0gcGFyYW1zOwotICAgICAgdGhpcy5faGFzaCA9IGhhc2g7
Ci0gICAgICB0aGlzLmxhYmVsID0gX2VtYmVySHRtbGJhcnNIb29rc1N1YmV4cHIubGFiZWxGb3JT
dWJleHByKFtwYXRoXS5jb25jYXQocGFyYW1zKSwgaGFzaCwgJ2NvbXBvbmVudCcpOwotICAgICAg
dGhpc1tDT01QT05FTlRfUkVGRVJFTkNFXSA9IHRydWU7Ci0gICAgfSwKLSAgICBjb21wdXRlOiBm
dW5jdGlvbiAoKSB7Ci0gICAgICByZXR1cm4gY3JlYXRlQ2xvc3VyZUNvbXBvbmVudENlbGwodGhp
cy5fZW52LCB0aGlzLl9wYXRoLCB0aGlzLl9wYXJhbXMsIHRoaXMuX2hhc2gsIHRoaXMubGFiZWwp
OwotICAgIH0KLSAgfSk7Ci0KLSAgZnVuY3Rpb24gY2xvc3VyZUNvbXBvbmVudChlbnYsIF9yZWYz
LCBoYXNoKSB7Ci0gICAgdmFyIHBhdGggPSBfcmVmM1swXTsKLQotICAgIHZhciBwYXJhbXMgPSBf
cmVmMy5zbGljZSgxKTsKLQotICAgIHZhciBzID0gbmV3IENsb3N1cmVDb21wb25lbnRTdHJlYW0o
ZW52LCBwYXRoLCBwYXJhbXMsIGhhc2gpOwotCi0gICAgcy5hZGREZXBlbmRlbmN5KHBhdGgpOwot
Ci0gICAgLy8gRklYTUU6IElmIHRoZSBzdHJlYW0gaW52YWxpZGF0ZXMgb24gZXZlcnkgcGFyYW1z
IG9yIGhhc2ggY2hhbmdlLCB0aGVuCi0gICAgLy8gdGhlIHt7Y29tcG9uZW50IGhlbHBlciB3aWxs
IGJlIGZvcmNlZCB0byByZS1yZW5kZXIgdGhlIHdob2xlIGNvbXBvbmVudAotICAgIC8vIGVhY2gg
dGltZS4gSW5zdGVhZCwgdGhlc2UgZGVwZW5kZW5jaWVzIHNob3VsZCBub3QgYmUgcmVxdWlyZWQg
YW5kIHRoZQotICAgIC8vIGVsZW1lbnQgY29tcG9uZW50IGtleXdvcmQgc2hvdWxkIGFkZCB0aGUg
cGFyYW1zIGFuZCBoYXNoIGFzIGRlcGVuZGVuY2llcy4KLSAgICBwYXJhbXMuZm9yRWFjaChmdW5j
dGlvbiAoaXRlbSkgewotICAgICAgcmV0dXJuIHMuYWRkRGVwZW5kZW5jeShpdGVtKTsKLSAgICB9
KTsKLSAgICBPYmplY3Qua2V5cyhoYXNoKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsKLSAgICAg
IHJldHVybiBzLmFkZERlcGVuZGVuY3koaGFzaFtrZXldKTsKLSAgICB9KTsKLQotICAgIHJldHVy
biBzOwotICB9Ci0KLSAgZnVuY3Rpb24gY3JlYXRlQ2xvc3VyZUNvbXBvbmVudENlbGwoZW52LCBv
cmlnaW5hbENvbXBvbmVudFBhdGgsIHBhcmFtcywgaGFzaCwgbGFiZWwpIHsKLSAgICB2YXIgY29t
cG9uZW50UGF0aCA9IF9lbWJlck1ldGFsU3RyZWFtc1V0aWxzLnJlYWQob3JpZ2luYWxDb21wb25l
bnRQYXRoKTsKLQotICAgIF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0KCdDb21wb25lbnQgcGF0aCBj
YW5ub3QgYmUgbnVsbCBpbiAnICsgbGFiZWwsICFfZW1iZXJNZXRhbElzX25vbmUuZGVmYXVsdChj
b21wb25lbnRQYXRoKSk7Ci0KLSAgICB2YXIgbmV3SGFzaCA9IF9lbWJlck1ldGFsQXNzaWduLmRl
ZmF1bHQobmV3IF9lbWJlck1ldGFsRW1wdHlfb2JqZWN0LmRlZmF1bHQoKSwgaGFzaCk7Ci0KLSAg
ICBpZiAoaXNDb21wb25lbnRDZWxsKGNvbXBvbmVudFBhdGgpKSB7Ci0gICAgICByZXR1cm4gY3Jl
YXRlTmVzdGVkQ2xvc3VyZUNvbXBvbmVudENlbGwoY29tcG9uZW50UGF0aCwgcGFyYW1zLCBuZXdI
YXNoKTsKLSAgICB9IGVsc2UgewotICAgICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ1RoZSBj
b21wb25lbnQgaGVscGVyIGNhbm5vdCBiZSB1c2VkIHdpdGhvdXQgYSB2YWxpZCBjb21wb25lbnQg
bmFtZS4gWW91IHVzZWQgIicgKyBjb21wb25lbnRQYXRoICsgJyIgdmlhICcgKyBsYWJlbCwgaXNW
YWxpZENvbXBvbmVudFBhdGgoZW52LCBjb21wb25lbnRQYXRoKSk7Ci0gICAgICByZXR1cm4gY3Jl
YXRlTmV3Q2xvc3VyZUNvbXBvbmVudENlbGwoZW52LCBjb21wb25lbnRQYXRoLCBwYXJhbXMsIG5l
d0hhc2gpOwotICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIGlzVmFsaWRDb21wb25lbnRQYXRoKGVu
diwgcGF0aCkgewotICAgIHZhciByZXN1bHQgPSBfZW1iZXJIdG1sYmFyc1V0aWxzTG9va3VwQ29t
cG9uZW50LmRlZmF1bHQoZW52Lm93bmVyLCBwYXRoKTsKLQotICAgIHJldHVybiAhIShyZXN1bHQu
Y29tcG9uZW50IHx8IHJlc3VsdC5sYXlvdXQpOwotICB9Ci0KLSAgZnVuY3Rpb24gaXNDb21wb25l
bnRDZWxsKGNvbXBvbmVudCkgewotICAgIHJldHVybiBjb21wb25lbnQgJiYgY29tcG9uZW50W0NP
TVBPTkVOVF9DRUxMXTsKLSAgfQotCi0gIGZ1bmN0aW9uIGNyZWF0ZU5lc3RlZENsb3N1cmVDb21w
b25lbnRDZWxsKGNvbXBvbmVudENlbGwsIHBhcmFtcywgaGFzaCkgewotICAgIHZhciBfcmVmOwot
Ci0gICAgLy8gVGhpcyBuZWVkcyB0byBiZSBkb25lIGluIGVhY2ggbmVzdGluZyBsZXZlbCB0byBh
dm9pZCByYWlzaW5nIGFzc2VydGlvbnMuCi0gICAgcHJvY2Vzc1Bvc2l0aW9uYWxQYXJhbXNGcm9t
Q2VsbChjb21wb25lbnRDZWxsLCBwYXJhbXMsIGhhc2gpOwotCi0gICAgcmV0dXJuIF9yZWYgPSB7
fSwgX3JlZltDT01QT05FTlRfUEFUSF0gPSBjb21wb25lbnRDZWxsW0NPTVBPTkVOVF9QQVRIXSwg
X3JlZltDT01QT05FTlRfSEFTSF0gPSBtZXJnZUluTmV3SGFzaChjb21wb25lbnRDZWxsW0NPTVBP
TkVOVF9IQVNIXSwgaGFzaCksIF9yZWZbQ09NUE9ORU5UX1BPU0lUSU9OQUxfUEFSQU1TXSA9IGNv
bXBvbmVudENlbGxbQ09NUE9ORU5UX1BPU0lUSU9OQUxfUEFSQU1TXSwgX3JlZltDT01QT05FTlRf
Q0VMTF0gPSB0cnVlLCBfcmVmOwotICB9Ci0KLSAgZnVuY3Rpb24gcHJvY2Vzc1Bvc2l0aW9uYWxQ
YXJhbXNGcm9tQ2VsbChjb21wb25lbnRDZWxsLCBwYXJhbXMsIGhhc2gpIHsKLSAgICB2YXIgcG9z
aXRpb25hbFBhcmFtcyA9IGNvbXBvbmVudENlbGxbQ09NUE9ORU5UX1BPU0lUSU9OQUxfUEFSQU1T
XTsKLQotICAgIF9lbWJlckh0bWxiYXJzVXRpbHNFeHRyYWN0UG9zaXRpb25hbFBhcmFtcy5wcm9j
ZXNzUG9zaXRpb25hbFBhcmFtcyhudWxsLCBwb3NpdGlvbmFsUGFyYW1zLCBwYXJhbXMsIGhhc2gp
OwotICB9Ci0KLSAgZnVuY3Rpb24gY3JlYXRlTmV3Q2xvc3VyZUNvbXBvbmVudENlbGwoZW52LCBj
b21wb25lbnRQYXRoLCBwYXJhbXMsIGhhc2gpIHsKLSAgICB2YXIgX3JlZjI7Ci0KLSAgICB2YXIg
cG9zaXRpb25hbFBhcmFtcyA9IGdldFBvc2l0aW9uYWxQYXJhbXMoZW52Lm93bmVyLCBjb21wb25l
bnRQYXRoKTsKLQotICAgIC8vIFRoaXMgbmVlZHMgdG8gYmUgZG9uZSBpbiBlYWNoIG5lc3Rpbmcg
bGV2ZWwgdG8gYXZvaWQgcmFpc2luZyBhc3NlcnRpb25zLgotICAgIF9lbWJlckh0bWxiYXJzVXRp
bHNFeHRyYWN0UG9zaXRpb25hbFBhcmFtcy5wcm9jZXNzUG9zaXRpb25hbFBhcmFtcyhudWxsLCBw
b3NpdGlvbmFsUGFyYW1zLCBwYXJhbXMsIGhhc2gpOwotCi0gICAgcmV0dXJuIF9yZWYyID0ge30s
IF9yZWYyW0NPTVBPTkVOVF9QQVRIXSA9IGNvbXBvbmVudFBhdGgsIF9yZWYyW0NPTVBPTkVOVF9I
QVNIXSA9IGhhc2gsIF9yZWYyW0NPTVBPTkVOVF9QT1NJVElPTkFMX1BBUkFNU10gPSBwb3NpdGlv
bmFsUGFyYW1zLCBfcmVmMltDT01QT05FTlRfQ0VMTF0gPSB0cnVlLCBfcmVmMjsKLSAgfQotCi0g
IC8qCi0gICBSZXR1cm5zIHRoZSBwb3NpdGlvbmFsIHBhcmFtZXRlcnMgZm9yIGNvbXBvbmVudCBg
Y29tcG9uZW50UGF0aGAuCi0gICBJZiBpdCBoYXMgbm8gcG9zaXRpb25hbCBwYXJhbWV0ZXJzLCBp
dCByZXR1cm5zIHRoZSBlbXB0eSBhcnJheS4KLSAgICovCi0gIGZ1bmN0aW9uIGdldFBvc2l0aW9u
YWxQYXJhbXMoY29udGFpbmVyLCBjb21wb25lbnRQYXRoKSB7Ci0gICAgaWYgKCFjb21wb25lbnRQ
YXRoKSB7Ci0gICAgICByZXR1cm4gW107Ci0gICAgfQotICAgIHZhciByZXN1bHQgPSBfZW1iZXJI
dG1sYmFyc1V0aWxzTG9va3VwQ29tcG9uZW50LmRlZmF1bHQoY29udGFpbmVyLCBjb21wb25lbnRQ
YXRoKTsKLSAgICB2YXIgY29tcG9uZW50ID0gcmVzdWx0LmNvbXBvbmVudDsKLQotICAgIGlmIChj
b21wb25lbnQgJiYgY29tcG9uZW50LnBvc2l0aW9uYWxQYXJhbXMpIHsKLSAgICAgIHJldHVybiBj
b21wb25lbnQucG9zaXRpb25hbFBhcmFtczsKLSAgICB9IGVsc2UgewotICAgICAgcmV0dXJuIFtd
OwotICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIG1lcmdlSW5OZXdIYXNoKG9yaWdpbmFsLCB1cGRh
dGVzKSB7Ci0gICAgcmV0dXJuIF9lbWJlck1ldGFsQXNzaWduLmRlZmF1bHQoe30sIG9yaWdpbmFs
LCB1cGRhdGVzKTsKLSAgfQotfSk7Ci1lbmlmZWQoJ2VtYmVyLWh0bWxiYXJzL2tleXdvcmRzL2Nv
bXBvbmVudCcsIFsnZXhwb3J0cycsICdodG1sYmFycy1ydW50aW1lL2hvb2tzJywgJ2VtYmVyLWh0
bWxiYXJzL2tleXdvcmRzL2Nsb3N1cmUtY29tcG9uZW50JywgJ2VtYmVyLW1ldGFsL2VtcHR5X29i
amVjdCcsICdlbWJlci1tZXRhbC9hc3NpZ24nXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9odG1sYmFy
c1J1bnRpbWVIb29rcywgX2VtYmVySHRtbGJhcnNLZXl3b3Jkc0Nsb3N1cmVDb21wb25lbnQsIF9l
bWJlck1ldGFsRW1wdHlfb2JqZWN0LCBfZW1iZXJNZXRhbEFzc2lnbikgewotICAvKioKLSAgICBA
bW9kdWxlIGVtYmVyCi0gICAgQHN1Ym1vZHVsZSBlbWJlci10ZW1wbGF0ZXMKLSAgICBAcHVibGlj
Ci0gICovCi0gICd1c2Ugc3RyaWN0JzsKLQotICAvKioKLSAgICBUaGUgYHt7Y29tcG9uZW50fX1g
IGhlbHBlciBsZXRzIHlvdSBhZGQgaW5zdGFuY2VzIG9mIGBFbWJlci5Db21wb25lbnRgIHRvIGEK
LSAgICB0ZW1wbGF0ZS4gU2VlIFtFbWJlci5Db21wb25lbnRdKC9hcGkvY2xhc3Nlcy9FbWJlci5D
b21wb25lbnQuaHRtbCkgZm9yCi0gICAgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvbiBob3cgYSBg
Q29tcG9uZW50YCBmdW5jdGlvbnMuCi0gICAgYHt7Y29tcG9uZW50fX1gJ3MgcHJpbWFyeSB1c2Ug
aXMgZm9yIGNhc2VzIHdoZXJlIHlvdSB3YW50IHRvIGR5bmFtaWNhbGx5Ci0gICAgY2hhbmdlIHdo
aWNoIHR5cGUgb2YgY29tcG9uZW50IGlzIHJlbmRlcmVkIGFzIHRoZSBzdGF0ZSBvZiB5b3VyIGFw
cGxpY2F0aW9uCi0gICAgY2hhbmdlcy4gVGhlIHByb3ZpZGVkIGJsb2NrIHdpbGwgYmUgYXBwbGll
ZCBhcyB0aGUgdGVtcGxhdGUgZm9yIHRoZSBjb21wb25lbnQuCi0gICAgR2l2ZW4gYW4gZW1wdHkg
YDxib2R5PmAgdGhlIGZvbGxvd2luZyB0ZW1wbGF0ZToKLSAgCi0gICAgYGBgaGFuZGxlYmFycwot
ICAgIHt7ISBhcHBsaWNhdGlvbi5oYnMgfX0KLSAgICB7e2NvbXBvbmVudCBpbmZvZ3JhcGhpY0Nv
bXBvbmVudE5hbWV9fQotICAgIGBgYAotICAKLSAgICBBbmQgdGhlIGZvbGxvd2luZyBhcHBsaWNh
dGlvbiBjb2RlOgotICAKLSAgICBgYGBqYXZhc2NyaXB0Ci0gICAgZXhwb3J0IGRlZmF1bHQgRW1i
ZXIuQ29udHJvbGxlci5leHRlbmQoewotICAgICAgaW5mb2dyYXBoaWNDb21wb25lbnROYW1lOiBj
b21wdXRlZCgnaXNNYXJrZXRPcGVuJywgewotICAgICAgICBnZXQoKSB7Ci0gICAgICAgICAgaWYg
KHRoaXMuZ2V0KCdpc01hcmtldE9wZW4nKSkgewotICAgICAgICAgICAgcmV0dXJuICdsaXZlLXVw
ZGF0aW5nLWNoYXJ0JzsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmV0dXJuICdt
YXJrZXQtY2xvc2Utc3VtbWFyeSc7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9KQot
ICAgIH0pOwotICAgIGBgYAotICAKLSAgICBUaGUgYGxpdmUtdXBkYXRpbmctY2hhcnRgIGNvbXBv
bmVudCB3aWxsIGJlIGFwcGVuZGVkIHdoZW4gYGlzTWFya2V0T3BlbmAgaXMKLSAgICBgdHJ1ZWAs
IGFuZCB0aGUgYG1hcmtldC1jbG9zZS1zdW1tYXJ5YCBjb21wb25lbnQgd2lsbCBiZSBhcHBlbmRl
ZCB3aGVuCi0gICAgYGlzTWFya2V0T3BlbmAgaXMgYGZhbHNlYC4gSWYgdGhlIHZhbHVlIGNoYW5n
ZXMgd2hpbGUgdGhlIGFwcCBpcyBydW5uaW5nLAotICAgIHRoZSBjb21wb25lbnQgd2lsbCBiZSBh
dXRvbWF0aWNhbGx5IHN3YXBwZWQgb3V0IGFjY29yZGluZ2x5LgotICAgIE5vdGU6IFlvdSBzaG91
bGQgbm90IHVzZSB0aGlzIGhlbHBlciB3aGVuIHlvdSBhcmUgY29uc2lzdGVudGx5IHJlbmRlcmlu
ZyB0aGUgc2FtZQotICAgIGNvbXBvbmVudC4gSW4gdGhhdCBjYXNlLCB1c2Ugc3RhbmRhcmQgY29t
cG9uZW50IHN5bnRheCwgZm9yIGV4YW1wbGU6Ci0gIAotICAgIGBgYGhhbmRsZWJhcnMKLSAgICB7
eyEgYXBwbGljYXRpb24uaGJzIH19Ci0gICAge3tsaXZlLXVwZGF0aW5nLWNoYXJ0fX0KLSAgICBg
YGAKLSAgCi0gICAgIyMgTmVzdGVkIFVzYWdlCi0gIAotICAgIFRoZSBgY29tcG9uZW50YCBoZWxw
ZXIgY2FuIGJlIHVzZWQgdG8gcGFja2FnZSBhIGNvbXBvbmVudCBwYXRoIHdpdGggaW5pdGlhbCBh
dHRycy4KLSAgICBUaGUgaW5jbHVkZWQgYXR0cnMgY2FuIHRoZW4gYmUgbWVyZ2VkIGR1cmluZyB0
aGUgZmluYWwgaW52b2NhdGlvbi4KLSAgCi0gICAgRm9yIGV4YW1wbGUsIGdpdmVuIGEgYHBlcnNv
bi1mb3JtYCBjb21wb25lbnQgd2l0aCB0aGUgZm9sbG93aW5nIHRlbXBsYXRlOgotICAKLSAgICBg
YGBoYW5kbGViYXJzCi0gICAge3t5aWVsZCAoaGFzaAotICAgICAgICBuYW1lSW5wdXQ9KGNvbXBv
bmVudCAibXktaW5wdXQtY29tcG9uZW50IiB2YWx1ZT1tb2RlbC5uYW1lIHBsYWNlaG9sZGVyPSJG
aXJzdCBOYW1lIikpfX0KLSAgICBgYGAKLSAgCi0gICAgVGhlIGZvbGxvd2luZyBzbmlwcGV0Ogot
ICAKLSAgICBgYGAKLSAgICB7eyNwZXJzb24tZm9ybSBhcyB8Zm9ybXx9fQotICAgICAge3tjb21w
b25lbnQgZm9ybS5uYW1lSW5wdXQgcGxhY2Vob2xkZXI9IlVzZXJuYW1lIn19Ci0gICAge3svcGVy
c29uLWZvcm19fQotICAgIGBgYAotICAKLSAgICB3b3VsZCBvdXRwdXQgYW4gaW5wdXQgd2hvc2Ug
dmFsdWUgaXMgYWxyZWFkeSBib3VuZCB0byBgbW9kZWwubmFtZWAgYW5kIGBwbGFjZWhvbGRlcmAK
LSAgICBpcyAiVXNlcm5hbWUiLgotICAKLSAgICBAbWV0aG9kIGNvbXBvbmVudAotICAgIEBzaW5j
ZSAxLjExLjAKLSAgICBAZm9yIEVtYmVyLlRlbXBsYXRlcy5oZWxwZXJzCi0gICAgQHB1YmxpYwot
ICAqLwotCi0gIGV4cG9ydHMuZGVmYXVsdCA9IGZ1bmN0aW9uIChtb3JwaCwgZW52LCBzY29wZSwg
cGFyYW1zLCBoYXNoLCB0ZW1wbGF0ZSwgaW52ZXJzZSwgdmlzaXRvcikgewotICAgIGlmICghbW9y
cGgpIHsKLSAgICAgIHJldHVybiBfZW1iZXJIdG1sYmFyc0tleXdvcmRzQ2xvc3VyZUNvbXBvbmVu
dC5kZWZhdWx0KGVudiwgcGFyYW1zLCBoYXNoKTsKLSAgICB9Ci0KLSAgICB2YXIgbmV3SGFzaCA9
IF9lbWJlck1ldGFsQXNzaWduLmRlZmF1bHQobmV3IF9lbWJlck1ldGFsRW1wdHlfb2JqZWN0LmRl
ZmF1bHQoKSwgaGFzaCk7Ci0KLSAgICBfaHRtbGJhcnNSdW50aW1lSG9va3Mua2V5d29yZCgnQGVs
ZW1lbnRfY29tcG9uZW50JywgbW9ycGgsIGVudiwgc2NvcGUsIHBhcmFtcywgbmV3SGFzaCwgdGVt
cGxhdGUsIGludmVyc2UsIHZpc2l0b3IpOwotICAgIHJldHVybiB0cnVlOwotICB9OwotfSk7Ci1l
bmlmZWQoJ2VtYmVyLWh0bWxiYXJzL2tleXdvcmRzL2RlYnVnZ2VyJywgWydleHBvcnRzJywgJ2Vt
YmVyLW1ldGFsL2RlYnVnJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbERlYnVnKSB7
Ci0gIC8qanNoaW50IGRlYnVnOnRydWUqLwotCi0gIC8qKgotICBAbW9kdWxlIGVtYmVyCi0gIEBz
dWJtb2R1bGUgZW1iZXItaHRtbGJhcnMKLSAgKi8KLQotICAndXNlIHN0cmljdCc7Ci0KLSAgZXhw
b3J0cy5kZWZhdWx0ID0gZGVidWdnZXJLZXl3b3JkOwotCi0gIC8qKgotICAgIEV4ZWN1dGUgdGhl
IGBkZWJ1Z2dlcmAgc3RhdGVtZW50IGluIHRoZSBjdXJyZW50IHRlbXBsYXRlJ3MgY29udGV4dC4K
LSAgCi0gICAgYGBgaGFuZGxlYmFycwotICAgIHt7ZGVidWdnZXJ9fQotICAgIGBgYAotICAKLSAg
ICBXaGVuIHVzaW5nIHRoZSBkZWJ1Z2dlciBoZWxwZXIgeW91IHdpbGwgaGF2ZSBhY2Nlc3MgdG8g
YSBgZ2V0YCBmdW5jdGlvbi4gVGhpcwotICAgIGZ1bmN0aW9uIHJldHJpZXZlcyB2YWx1ZXMgYXZh
aWxhYmxlIGluIHRoZSBjb250ZXh0IG9mIHRoZSB0ZW1wbGF0ZS4KLSAgICBGb3IgZXhhbXBsZSwg
aWYgeW91J3JlIHdvbmRlcmluZyB3aHkgYSB2YWx1ZSBge3tmb299fWAgaXNuJ3QgcmVuZGVyaW5n
IGFzCi0gICAgZXhwZWN0ZWQgd2l0aGluIGEgdGVtcGxhdGUsIHlvdSBjb3VsZCBwbGFjZSBhIGB7
e2RlYnVnZ2VyfX1gIHN0YXRlbWVudCBhbmQsCi0gICAgd2hlbiB0aGUgYGRlYnVnZ2VyO2AgYnJl
YWtwb2ludCBpcyBoaXQsIHlvdSBjYW4gYXR0ZW1wdCB0byByZXRyaWV2ZSB0aGlzIHZhbHVlOgot
ICAKLSAgICBgYGAKLSAgICA+IGdldCgnZm9vJykKLSAgICBgYGAKLSAgCi0gICAgYGdldGAgaXMg
YWxzbyBhd2FyZSBvZiBrZXl3b3Jkcy4gU28gaW4gdGhpcyBzaXR1YXRpb24KLSAgCi0gICAgYGBg
aGFuZGxlYmFycwotICAgIHt7I2VhY2ggaXRlbXMgYXMgfGl0ZW18fX0KLSAgICAgIHt7ZGVidWdn
ZXJ9fQotICAgIHt7L2VhY2h9fQotICAgIGBgYAotICAKLSAgICBZb3UnbGwgYmUgYWJsZSB0byBn
ZXQgdmFsdWVzIGZyb20gdGhlIGN1cnJlbnQgaXRlbToKLSAgCi0gICAgYGBgCi0gICAgPiBnZXQo
J2l0ZW0ubmFtZScpCi0gICAgYGBgCi0gIAotICAgIFlvdSBjYW4gYWxzbyBhY2Nlc3MgdGhlIGNv
bnRleHQgb2YgdGhlIHZpZXcgdG8gbWFrZSBzdXJlIGl0IGlzIHRoZSBvYmplY3QgdGhhdAotICAg
IHlvdSBleHBlY3Q6Ci0gIAotICAgIGBgYAotICAgID4gY29udGV4dAotICAgIGBgYAotICAKLSAg
ICBAbWV0aG9kIGRlYnVnZ2VyCi0gICAgQGZvciBFbWJlci5UZW1wbGF0ZXMuaGVscGVycwotICAg
IEBwdWJsaWMKLSAgKi8KLQotICBmdW5jdGlvbiBkZWJ1Z2dlcktleXdvcmQobW9ycGgsIGVudiwg
c2NvcGUpIHsKLSAgICAvKiBqc2hpbnQgdW51c2VkOiBmYWxzZSwgZGVidWc6IHRydWUgKi8KLQot
ICAgIHZhciB2aWV3ID0gZW52Lmhvb2tzLmdldFZhbHVlKHNjb3BlLmdldExvY2FsKCd2aWV3Jykp
OwotICAgIHZhciBjb250ZXh0ID0gZW52Lmhvb2tzLmdldFZhbHVlKHNjb3BlLmdldFNlbGYoKSk7
Ci0KLSAgICBmdW5jdGlvbiBnZXQocGF0aCkgewotICAgICAgcmV0dXJuIGVudi5ob29rcy5nZXRW
YWx1ZShlbnYuaG9va3MuZ2V0KGVudiwgc2NvcGUsIHBhdGgpKTsKLSAgICB9Ci0KLSAgICBfZW1i
ZXJNZXRhbERlYnVnLmluZm8oJ1VzZSBgdmlld2AsIGBjb250ZXh0YCwgYW5kIGBnZXQoPHBhdGg+
KWAgdG8gZGVidWcgdGhpcyB0ZW1wbGF0ZS4nKTsKLQotICAgIGRlYnVnZ2VyOwotCi0gICAgcmV0
dXJuIHRydWU7Ci0gIH0KLX0pOwotZW5pZmVkKCdlbWJlci1odG1sYmFycy9rZXl3b3Jkcy9lbGVt
ZW50LWNvbXBvbmVudCcsIFsnZXhwb3J0cycsICdlbWJlci1tZXRhbC9hc3NpZ24nLCAnZW1iZXIt
aHRtbGJhcnMva2V5d29yZHMvY2xvc3VyZS1jb21wb25lbnQnLCAnZW1iZXItaHRtbGJhcnMvdXRp
bHMvbG9va3VwLWNvbXBvbmVudCcsICdlbWJlci1odG1sYmFycy91dGlscy9leHRyYWN0LXBvc2l0
aW9uYWwtcGFyYW1zJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbEFzc2lnbiwgX2Vt
YmVySHRtbGJhcnNLZXl3b3Jkc0Nsb3N1cmVDb21wb25lbnQsIF9lbWJlckh0bWxiYXJzVXRpbHNM
b29rdXBDb21wb25lbnQsIF9lbWJlckh0bWxiYXJzVXRpbHNFeHRyYWN0UG9zaXRpb25hbFBhcmFt
cykgewotICAndXNlIHN0cmljdCc7Ci0KLSAgZXhwb3J0cy5kZWZhdWx0ID0gewotICAgIHNldHVw
U3RhdGU6IGZ1bmN0aW9uIChsYXN0U3RhdGUsIGVudiwgc2NvcGUsIHBhcmFtcywgaGFzaCkgewot
ICAgICAgdmFyIGNvbXBvbmVudFBhdGggPSBnZXRDb21wb25lbnRQYXRoKHBhcmFtc1swXSwgZW52
KTsKLSAgICAgIHJldHVybiBfZW1iZXJNZXRhbEFzc2lnbi5kZWZhdWx0KHt9LCBsYXN0U3RhdGUs
IHsKLSAgICAgICAgY29tcG9uZW50UGF0aDogY29tcG9uZW50UGF0aCwKLSAgICAgICAgaXNDb21w
b25lbnRIZWxwZXI6IHRydWUKLSAgICAgIH0pOwotICAgIH0sCi0KLSAgICByZW5kZXI6IGZ1bmN0
aW9uIChtb3JwaCkgewotICAgICAgdmFyIHN0YXRlID0gbW9ycGguZ2V0U3RhdGUoKTsKLQotICAg
ICAgaWYgKHN0YXRlLm1hbmFnZXIpIHsKLSAgICAgICAgc3RhdGUubWFuYWdlci5kZXN0cm95KCk7
Ci0gICAgICB9Ci0KLSAgICAgIC8vIEZvcmNlIHRoZSBjb21wb25lbnQgaG9vayB0byB0cmVhdCB0
aGlzIGFzIGEgZmlyc3QtdGltZSByZW5kZXIsCi0gICAgICAvLyBiZWNhdXNlIG5vcm1hbCBjb21w
b25lbnRzIChgPGZvby1iYXI+YCkgY2Fubm90IGNoYW5nZSBhdCBydW50aW1lLAotICAgICAgLy8g
YnV0IHRoZSBge3tjb21wb25lbnR9fWAgaGVscGVyIGNhbi4KLSAgICAgIHN0YXRlLm1hbmFnZXIg
PSBudWxsOwotCi0gICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgcmVzdCA9
IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBf
a2V5KyspIHsKLSAgICAgICAgcmVzdFtfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07Ci0gICAg
ICB9Ci0KLSAgICAgIHJlbmRlci5hcHBseSh1bmRlZmluZWQsIFttb3JwaF0uY29uY2F0KHJlc3Qp
KTsKLSAgICB9LAotCi0gICAgcmVyZW5kZXI6IHJlbmRlcgotICB9OwotCi0gIGZ1bmN0aW9uIGdl
dENvbXBvbmVudFBhdGgocGFyYW0sIGVudikgewotICAgIHZhciBwYXRoID0gZW52Lmhvb2tzLmdl
dFZhbHVlKHBhcmFtKTsKLSAgICBpZiAoX2VtYmVySHRtbGJhcnNLZXl3b3Jkc0Nsb3N1cmVDb21w
b25lbnQuaXNDb21wb25lbnRDZWxsKHBhdGgpKSB7Ci0gICAgICBwYXRoID0gcGF0aFtfZW1iZXJI
dG1sYmFyc0tleXdvcmRzQ2xvc3VyZUNvbXBvbmVudC5DT01QT05FTlRfUEFUSF07Ci0gICAgfQot
ICAgIHJldHVybiBwYXRoOwotICB9Ci0KLSAgZnVuY3Rpb24gcmVuZGVyKG1vcnBoLCBlbnYsIHNj
b3BlLCBfcmVmLCBoYXNoLCB0ZW1wbGF0ZSwgaW52ZXJzZSwgdmlzaXRvcikgewotICAgIHZhciBw
YXRoID0gX3JlZlswXTsKLQotICAgIHZhciBwYXJhbXMgPSBfcmVmLnNsaWNlKDEpOwotCi0gICAg
dmFyIGlzUmVyZW5kZXIgPSBhcmd1bWVudHMubGVuZ3RoIDw9IDggfHwgYXJndW1lbnRzWzhdID09
PSB1bmRlZmluZWQgPyBmYWxzZSA6IGFyZ3VtZW50c1s4XTsKLQotICAgIHZhciBfbW9ycGgkZ2V0
U3RhdGUgPSBtb3JwaC5nZXRTdGF0ZSgpOwotCi0gICAgdmFyIGNvbXBvbmVudFBhdGggPSBfbW9y
cGgkZ2V0U3RhdGUuY29tcG9uZW50UGF0aDsKLQotICAgIC8vIElmIHRoZSB2YWx1ZSBwYXNzZWQg
dG8gdGhlIHt7Y29tcG9uZW50fX0gaGVscGVyIGlzIHVuZGVmaW5lZCBvciBudWxsLAotICAgIC8v
IGRvbid0IGNyZWF0ZSBhIG5ldyBDb21wb25lbnROb2RlLgotICAgIGlmIChjb21wb25lbnRQYXRo
ID09PSB1bmRlZmluZWQgfHwgY29tcG9uZW50UGF0aCA9PT0gbnVsbCkgewotICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIHBhdGggPSBlbnYuaG9va3MuZ2V0VmFsdWUocGF0aCk7Ci0KLSAgICBp
ZiAoaXNSZXJlbmRlcikgewotICAgICAgdmFyIHJlc3VsdCA9IF9lbWJlckh0bWxiYXJzVXRpbHNM
b29rdXBDb21wb25lbnQuZGVmYXVsdChlbnYub3duZXIsIGNvbXBvbmVudFBhdGgpOwotICAgICAg
dmFyIGNvbXBvbmVudCA9IHJlc3VsdC5jb21wb25lbnQ7Ci0KLSAgICAgIF9lbWJlckh0bWxiYXJz
VXRpbHNFeHRyYWN0UG9zaXRpb25hbFBhcmFtcy5kZWZhdWx0KG51bGwsIGNvbXBvbmVudCwgcGFy
YW1zLCBoYXNoKTsKLSAgICB9Ci0KLSAgICBpZiAoX2VtYmVySHRtbGJhcnNLZXl3b3Jkc0Nsb3N1
cmVDb21wb25lbnQuaXNDb21wb25lbnRDZWxsKHBhdGgpKSB7Ci0gICAgICB2YXIgY2xvc3VyZUNv
bXBvbmVudCA9IGVudi5ob29rcy5nZXRWYWx1ZShwYXRoKTsKLQotICAgICAgLy8gVGhpcyBuZWVk
cyB0byBiZSBkb25lIGluIGVhY2ggbmVzdGluZyBsZXZlbCB0byBhdm9pZCByYWlzaW5nIGFzc2Vy
dGlvbnMKLSAgICAgIF9lbWJlckh0bWxiYXJzS2V5d29yZHNDbG9zdXJlQ29tcG9uZW50LnByb2Nl
c3NQb3NpdGlvbmFsUGFyYW1zRnJvbUNlbGwoY2xvc3VyZUNvbXBvbmVudCwgcGFyYW1zLCBoYXNo
KTsKLSAgICAgIHBhcmFtcyA9IFtdOwotICAgICAgaGFzaCA9IF9lbWJlckh0bWxiYXJzS2V5d29y
ZHNDbG9zdXJlQ29tcG9uZW50Lm1lcmdlSW5OZXdIYXNoKGNsb3N1cmVDb21wb25lbnRbX2VtYmVy
SHRtbGJhcnNLZXl3b3Jkc0Nsb3N1cmVDb21wb25lbnQuQ09NUE9ORU5UX0hBU0hdLCBoYXNoKTsK
LSAgICB9Ci0KLSAgICB2YXIgdGVtcGxhdGVzID0geyBkZWZhdWx0OiB0ZW1wbGF0ZSwgaW52ZXJz
ZTogaW52ZXJzZSB9OwotICAgIGVudi5ob29rcy5jb21wb25lbnQobW9ycGgsIGVudiwgc2NvcGUs
IGNvbXBvbmVudFBhdGgsIHBhcmFtcywgaGFzaCwgdGVtcGxhdGVzLCB2aXNpdG9yKTsKLSAgfQot
fSk7Ci1lbmlmZWQoJ2VtYmVyLWh0bWxiYXJzL2tleXdvcmRzL2dldCcsIFsnZXhwb3J0cycsICdl
bWJlci1tZXRhbC9kZWJ1ZycsICdlbWJlci1tZXRhbC9zdHJlYW1zL3N0cmVhbScsICdlbWJlci1t
ZXRhbC9zdHJlYW1zL3V0aWxzJywgJ2VtYmVyLWh0bWxiYXJzL3V0aWxzL3N1YnNjcmliZScsICdl
bWJlci1tZXRhbC9wcm9wZXJ0eV9nZXQnLCAnZW1iZXItbWV0YWwvcHJvcGVydHlfc2V0JywgJ2Vt
YmVyLW1ldGFsL29ic2VydmVyJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbERlYnVn
LCBfZW1iZXJNZXRhbFN0cmVhbXNTdHJlYW0sIF9lbWJlck1ldGFsU3RyZWFtc1V0aWxzLCBfZW1i
ZXJIdG1sYmFyc1V0aWxzU3Vic2NyaWJlLCBfZW1iZXJNZXRhbFByb3BlcnR5X2dldCwgX2VtYmVy
TWV0YWxQcm9wZXJ0eV9zZXQsIF9lbWJlck1ldGFsT2JzZXJ2ZXIpIHsKLSAgLyoqCi0gIEBtb2R1
bGUgZW1iZXIKLSAgQHN1Ym1vZHVsZSBlbWJlci10ZW1wbGF0ZXMKLSAgKi8KLQotICAndXNlIHN0
cmljdCc7Ci0KLSAgZnVuY3Rpb24gbGFiZWxGb3Ioc291cmNlLCBrZXkpIHsKLSAgICB2YXIgc291
cmNlTGFiZWwgPSBzb3VyY2UubGFiZWwgPyBzb3VyY2UubGFiZWwgOiAnJzsKLSAgICB2YXIga2V5
TGFiZWwgPSBrZXkubGFiZWwgPyBrZXkubGFiZWwgOiAnJzsKLSAgICByZXR1cm4gJyhnZXQgJyAr
IHNvdXJjZUxhYmVsICsgJyAnICsga2V5TGFiZWwgKyAnKSc7Ci0gIH0KLQotICB2YXIgRHluYW1p
Y0tleVN0cmVhbSA9IF9lbWJlck1ldGFsU3RyZWFtc1N0cmVhbS5kZWZhdWx0LmV4dGVuZCh7Ci0g
ICAgaW5pdDogZnVuY3Rpb24gKHNvdXJjZSwga2V5U291cmNlKSB7Ci0gICAgICAvLyBVc2VkIHRv
IGdldCB0aGUgb3JpZ2luYWwgcGF0aCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLgotICAgICAgdmFy
IGxhYmVsID0gbGFiZWxGb3Ioc291cmNlLCBrZXlTb3VyY2UpOwotCi0gICAgICB0aGlzLmxhYmVs
ID0gbGFiZWw7Ci0gICAgICB0aGlzLnBhdGggPSBsYWJlbDsKLSAgICAgIHRoaXMuc291cmNlRGVw
ID0gdGhpcy5hZGRNdXRhYmxlRGVwZW5kZW5jeShzb3VyY2UpOwotICAgICAgdGhpcy5rZXlEZXAg
PSB0aGlzLmFkZE11dGFibGVEZXBlbmRlbmN5KGtleVNvdXJjZSk7Ci0gICAgICB0aGlzLm9ic2Vy
dmVkT2JqZWN0ID0gbnVsbDsKLSAgICAgIHRoaXMub2JzZXJ2ZWRLZXkgPSBudWxsOwotICAgIH0s
Ci0KLSAgICBrZXk6IGZ1bmN0aW9uICgpIHsKLSAgICAgIHZhciBrZXkgPSB0aGlzLmtleURlcC5n
ZXRWYWx1ZSgpOwotICAgICAgaWYgKHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnKSB7Ci0gICAgICAg
IHJldHVybiBrZXk7Ci0gICAgICB9Ci0gICAgfSwKLQotICAgIGNvbXB1dGU6IGZ1bmN0aW9uICgp
IHsKLSAgICAgIHZhciBvYmplY3QgPSB0aGlzLnNvdXJjZURlcC5nZXRWYWx1ZSgpOwotICAgICAg
dmFyIGtleSA9IHRoaXMua2V5KCk7Ci0gICAgICBpZiAob2JqZWN0ICYmIGtleSkgewotICAgICAg
ICByZXR1cm4gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KG9iamVjdCwga2V5KTsKLSAgICAg
IH0KLSAgICB9LAotCi0gICAgc2V0VmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSkgewotICAgICAgdmFy
IG9iamVjdCA9IHRoaXMuc291cmNlRGVwLmdldFZhbHVlKCk7Ci0gICAgICB2YXIga2V5ID0gdGhp
cy5rZXkoKTsKLSAgICAgIGlmIChvYmplY3QpIHsKLSAgICAgICAgX2VtYmVyTWV0YWxQcm9wZXJ0
eV9zZXQuc2V0KG9iamVjdCwga2V5LCB2YWx1ZSk7Ci0gICAgICB9Ci0gICAgfSwKLQotICAgIF9z
dXBlciRyZXZhbGlkYXRlOiBfZW1iZXJNZXRhbFN0cmVhbXNTdHJlYW0uZGVmYXVsdC5wcm90b3R5
cGUucmV2YWxpZGF0ZSwKLQotICAgIHJldmFsaWRhdGU6IGZ1bmN0aW9uICh2YWx1ZSkgewotICAg
ICAgdGhpcy5fc3VwZXIkcmV2YWxpZGF0ZSh2YWx1ZSk7Ci0KLSAgICAgIHZhciBvYmplY3QgPSB0
aGlzLnNvdXJjZURlcC5nZXRWYWx1ZSgpOwotICAgICAgdmFyIGtleSA9IHRoaXMua2V5KCk7Ci0g
ICAgICBpZiAob2JqZWN0ICE9PSB0aGlzLm9ic2VydmVkT2JqZWN0IHx8IGtleSAhPT0gdGhpcy5v
YnNlcnZlZEtleSkgewotICAgICAgICB0aGlzLl9jbGVhck9ic2VydmVkT2JqZWN0KCk7Ci0KLSAg
ICAgICAgaWYgKG9iamVjdCAmJiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBrZXkpIHsK
LSAgICAgICAgICBfZW1iZXJNZXRhbE9ic2VydmVyLmFkZE9ic2VydmVyKG9iamVjdCwga2V5LCB0
aGlzLCB0aGlzLm5vdGlmeSk7Ci0gICAgICAgICAgdGhpcy5vYnNlcnZlZE9iamVjdCA9IG9iamVj
dDsKLSAgICAgICAgICB0aGlzLm9ic2VydmVkS2V5ID0ga2V5OwotICAgICAgICB9Ci0gICAgICB9
Ci0gICAgfSwKLQotICAgIF9jbGVhck9ic2VydmVkT2JqZWN0OiBmdW5jdGlvbiAoKSB7Ci0gICAg
ICBpZiAodGhpcy5vYnNlcnZlZE9iamVjdCkgewotICAgICAgICBfZW1iZXJNZXRhbE9ic2VydmVy
LnJlbW92ZU9ic2VydmVyKHRoaXMub2JzZXJ2ZWRPYmplY3QsIHRoaXMub2JzZXJ2ZWRLZXksIHRo
aXMsIHRoaXMubm90aWZ5KTsKLSAgICAgICAgdGhpcy5vYnNlcnZlZE9iamVjdCA9IG51bGw7Ci0g
ICAgICAgIHRoaXMub2JzZXJ2ZWRLZXkgPSBudWxsOwotICAgICAgfQotICAgIH0KLSAgfSk7Ci0K
LSAgdmFyIGJ1aWxkU3RyZWFtID0gZnVuY3Rpb24gYnVpbGRTdHJlYW0ocGFyYW1zKSB7Ci0gICAg
dmFyIG9ialJlZiA9IHBhcmFtc1swXTsKLSAgICB2YXIgcGF0aFJlZiA9IHBhcmFtc1sxXTsKLQot
ICAgIF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0KCdUaGUgZmlyc3QgYXJndW1lbnQgdG8ge3tnZXR9
fSBtdXN0IGJlIGEgc3RyZWFtJywgX2VtYmVyTWV0YWxTdHJlYW1zVXRpbHMuaXNTdHJlYW0ob2Jq
UmVmKSk7Ci0gICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ3t7Z2V0fX0gcmVxdWlyZXMgYXQg
bGVhc3QgdHdvIGFyZ3VtZW50cycsIHBhcmFtcy5sZW5ndGggPiAxKTsKLQotICAgIHZhciBzdHJl
YW0gPSBidWlsZER5bmFtaWNLZXlTdHJlYW0ob2JqUmVmLCBwYXRoUmVmKTsKLQotICAgIHJldHVy
biBzdHJlYW07Ci0gIH07Ci0KLSAgZnVuY3Rpb24gYnVpbGREeW5hbWljS2V5U3RyZWFtKHNvdXJj
ZSwga2V5U291cmNlKSB7Ci0gICAgaWYgKCFfZW1iZXJNZXRhbFN0cmVhbXNVdGlscy5pc1N0cmVh
bShrZXlTb3VyY2UpKSB7Ci0gICAgICByZXR1cm4gc291cmNlLmdldChrZXlTb3VyY2UpOwotICAg
IH0gZWxzZSB7Ci0gICAgICByZXR1cm4gbmV3IER5bmFtaWNLZXlTdHJlYW0oc291cmNlLCBrZXlT
b3VyY2UpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgIER5bmFtaWNhbGx5IGxvb2sgdXAgYSBw
cm9wZXJ0eSBvbiBhbiBvYmplY3QuIFRoZSBzZWNvbmQgYXJndW1lbnQgdG8gYHt7Z2V0fX1gCi0g
ICAgc2hvdWxkIGhhdmUgYSBzdHJpbmcgdmFsdWUsIGFsdGhvdWdoIGl0IGNhbiBiZSBib3VuZC4K
LSAgCi0gICAgRm9yIGV4YW1wbGUsIHRoZXNlIHR3byB1c2FnZXMgYXJlIGVxdWl2aWxlbnQ6Ci0g
IAotICAgIGBgYGhhbmRsZWJhcnMKLSAgICB7e3BlcnNvbi5oZWlnaHR9fQotICAgIHt7Z2V0IHBl
cnNvbiAiaGVpZ2h0In19Ci0gICAgYGBgCi0gIAotICAgIElmIHRoZXJlIHdlcmUgc2V2ZXJhbCBm
YWN0cyBhYm91dCBhIHBlcnNvbiwgdGhlIGB7e2dldH19YCBoZWxwZXIgY2FuIGR5bmFtaWNhbGx5
Ci0gICAgcGljayBvbmU6Ci0gIAotICAgIGBgYGhhbmRsZWJhcnMKLSAgICB7e2dldCBwZXJzb24g
ZmFjdE5hbWV9fQotICAgIGBgYAotICAKLSAgICBGb3IgYSBtb3JlIGNvbXBsZXggZXhhbXBsZSwg
dGhpcyB0ZW1wbGF0ZSB3b3VsZCBhbGxvdyB0aGUgdXNlciB0byBzd2l0Y2gKLSAgICBiZXR3ZWVu
IHNob3dpbmcgdGhlIHVzZXIncyBoZWlnaHQgYW5kIHdlaWdodCB3aXRoIGEgY2xpY2s6Ci0gIAot
ICAgIGBgYGhhbmRsZWJhcnMKLSAgICB7e2dldCBwZXJzb24gZmFjdE5hbWV9fQotICAgIDxidXR0
b24ge3thY3Rpb24gKG11dCBmYWN0TmFtZSkgImhlaWdodCJ9fT5TaG93IGhlaWdodDwvYnV0dG9u
PgotICAgIDxidXR0b24ge3thY3Rpb24gKG11dCBmYWN0TmFtZSkgIndlaWdodCJ9fT5TaG93IHdl
aWdodDwvYnV0dG9uPgotICAgIGBgYAotICAKLSAgICBUaGUgYHt7Z2V0fX1gIGhlbHBlciBjYW4g
YWxzbyByZXNwZWN0IG11dGFibGUgdmFsdWVzIGl0c2VsZi4gRm9yIGV4YW1wbGU6Ci0gIAotICAg
IGBgYGhhbmRsZWJhcnMKLSAgICB7e2lucHV0IHZhbHVlPShtdXQgKGdldCBwZXJzb24gZmFjdE5h
bWUpKSB0eXBlPSJ0ZXh0In19Ci0gICAgPGJ1dHRvbiB7e2FjdGlvbiAobXV0IGZhY3ROYW1lKSAi
aGVpZ2h0In19PlNob3cgaGVpZ2h0PC9idXR0b24+Ci0gICAgPGJ1dHRvbiB7e2FjdGlvbiAobXV0
IGZhY3ROYW1lKSAid2VpZ2h0In19PlNob3cgd2VpZ2h0PC9idXR0b24+Ci0gICAgYGBgCi0gIAot
ICAgIFdvdWxkIGFsbG93IHRoZSB1c2VyIHRvIHN3YXAgd2hhdCBmYWN0IGlzIGJlaW5nIGRpc3Bs
YXllZCwgYW5kIGFsc28gZWRpdAotICAgIHRoYXQgZmFjdCB2aWEgYSB0d28td2F5IG11dGFibGUg
YmluZGluZy4KLSAgCi0gICAgQHB1YmxpYwotICAgIEBtZXRob2QgZ2V0Ci0gICAgQGZvciBFbWJl
ci5UZW1wbGF0ZXMuaGVscGVycwotICAgIEBzaW5jZSAyLjEuMAotICAqLwotICBmdW5jdGlvbiBn
ZXRLZXl3b3JkKG1vcnBoLCBlbnYsIHNjb3BlLCBwYXJhbXMsIGhhc2gsIHRlbXBsYXRlLCBpbnZl
cnNlLCB2aXNpdG9yKSB7Ci0gICAgaWYgKG1vcnBoID09PSBudWxsKSB7Ci0gICAgICByZXR1cm4g
YnVpbGRTdHJlYW0ocGFyYW1zKTsKLSAgICB9IGVsc2UgewotICAgICAgdmFyIHN0cmVhbSA9IHVu
ZGVmaW5lZDsKLSAgICAgIGlmIChtb3JwaC5saW5rZWRSZXN1bHQpIHsKLSAgICAgICAgc3RyZWFt
ID0gbW9ycGgubGlua2VkUmVzdWx0OwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgc3RyZWFtID0g
YnVpbGRTdHJlYW0ocGFyYW1zKTsKLQotICAgICAgICBfZW1iZXJIdG1sYmFyc1V0aWxzU3Vic2Ny
aWJlLmRlZmF1bHQobW9ycGgsIGVudiwgc2NvcGUsIHN0cmVhbSk7Ci0gICAgICAgIGVudi5ob29r
cy5saW5rUmVuZGVyTm9kZShtb3JwaCwgZW52LCBzY29wZSwgbnVsbCwgcGFyYW1zLCBoYXNoKTsK
LQotICAgICAgICBtb3JwaC5saW5rZWRSZXN1bHQgPSBzdHJlYW07Ci0gICAgICB9Ci0gICAgICBl
bnYuaG9va3MucmFuZ2UobW9ycGgsIGVudiwgc2NvcGUsIG51bGwsIHN0cmVhbSwgdmlzaXRvcik7
Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBleHBvcnRzLmRlZmF1bHQgPSBn
ZXRLZXl3b3JkOwotfSk7Ci1lbmlmZWQoJ2VtYmVyLWh0bWxiYXJzL2tleXdvcmRzL2lucHV0Jywg
WydleHBvcnRzJywgJ2VtYmVyLW1ldGFsL2RlYnVnJywgJ2VtYmVyLW1ldGFsL2Fzc2lnbiddLCBm
dW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0YWxEZWJ1ZywgX2VtYmVyTWV0YWxBc3NpZ24pIHsK
LSAgLyoqCi0gIEBtb2R1bGUgZW1iZXIKLSAgQHN1Ym1vZHVsZSBlbWJlci10ZW1wbGF0ZXMKLSAg
Ki8KLSAgJ3VzZSBzdHJpY3QnOwotCi0gIC8qKgotICAgIFRoZSBge3tpbnB1dH19YCBoZWxwZXIg
bGV0cyB5b3UgY3JlYXRlIGFuIEhUTUwgYDxpbnB1dCAvPmAgY29tcG9uZW50LgotICAgIEl0IGNh
dXNlcyBhbiBgRW1iZXIuVGV4dEZpZWxkYCBjb21wb25lbnQgdG8gYmUgcmVuZGVyZWQuICBGb3Ig
bW9yZSBpbmZvLAotICAgIHNlZSB0aGUgW0VtYmVyLlRleHRGaWVsZF0oL2FwaS9jbGFzc2VzL0Vt
YmVyLlRleHRGaWVsZC5odG1sKSBkb2NzIGFuZAotICAgIHRoZSBbdGVtcGxhdGVzIGd1aWRlXSho
dHRwOi8vZW1iZXJqcy5jb20vZ3VpZGVzL3RlbXBsYXRlcy9pbnB1dC1oZWxwZXJzLykuCi0gIAot
ICAgIGBgYGhhbmRsZWJhcnMKLSAgICB7e2lucHV0IHZhbHVlPSI5ODcifX0KLSAgICBgYGAKLSAg
Ci0gICAgcmVuZGVycyBhczoKLSAgCi0gICAgYGBgSFRNTAotICAgIDxpbnB1dCB0eXBlPSJ0ZXh0
IiB2YWx1ZT0iOTg3IiAvPgotICAgIGBgYAotICAKLSAgICAjIyMgVGV4dCBmaWVsZAotICAKLSAg
ICBJZiBubyBgdHlwZWAgb3B0aW9uIGlzIHNwZWNpZmllZCwgYSBkZWZhdWx0IG9mIHR5cGUgJ3Rl
eHQnIGlzIHVzZWQuCi0gIAotICAgIE1hbnkgb2YgdGhlIHN0YW5kYXJkIEhUTUwgYXR0cmlidXRl
cyBtYXkgYmUgcGFzc2VkIHRvIHRoaXMgaGVscGVyLgotICAKLSAgICA8dGFibGU+Ci0gICAgICA8
dHI+PHRkPmByZWFkb25seWA8L3RkPjx0ZD5gcmVxdWlyZWRgPC90ZD48dGQ+YGF1dG9mb2N1c2A8
L3RkPjwvdHI+Ci0gICAgICA8dHI+PHRkPmB2YWx1ZWA8L3RkPjx0ZD5gcGxhY2Vob2xkZXJgPC90
ZD48dGQ+YGRpc2FibGVkYDwvdGQ+PC90cj4KLSAgICAgIDx0cj48dGQ+YHNpemVgPC90ZD48dGQ+
YHRhYmluZGV4YDwvdGQ+PHRkPmBtYXhsZW5ndGhgPC90ZD48L3RyPgotICAgICAgPHRyPjx0ZD5g
bmFtZWA8L3RkPjx0ZD5gbWluYDwvdGQ+PHRkPmBtYXhgPC90ZD48L3RyPgotICAgICAgPHRyPjx0
ZD5gcGF0dGVybmA8L3RkPjx0ZD5gYWNjZXB0YDwvdGQ+PHRkPmBhdXRvY29tcGxldGVgPC90ZD48
L3RyPgotICAgICAgPHRyPjx0ZD5gYXV0b3NhdmVgPC90ZD48dGQ+YGZvcm1hY3Rpb25gPC90ZD48
dGQ+YGZvcm1lbmN0eXBlYDwvdGQ+PC90cj4KLSAgICAgIDx0cj48dGQ+YGZvcm1tZXRob2RgPC90
ZD48dGQ+YGZvcm1ub3ZhbGlkYXRlYDwvdGQ+PHRkPmBmb3JtdGFyZ2V0YDwvdGQ+PC90cj4KLSAg
ICAgIDx0cj48dGQ+YGhlaWdodGA8L3RkPjx0ZD5gaW5wdXRtb2RlYDwvdGQ+PHRkPmBtdWx0aXBs
ZWA8L3RkPjwvdHI+Ci0gICAgICA8dHI+PHRkPmBzdGVwYDwvdGQ+PHRkPmB3aWR0aGA8L3RkPjx0
ZD5gZm9ybWA8L3RkPjwvdHI+Ci0gICAgICA8dHI+PHRkPmBzZWxlY3Rpb25EaXJlY3Rpb25gPC90
ZD48dGQ+YHNwZWxsY2hlY2tgPC90ZD48dGQ+Jm5ic3A7PC90ZD48L3RyPgotICAgIDwvdGFibGU+
Ci0gIAotICAKLSAgICBXaGVuIHNldCB0byBhIHF1b3RlZCBzdHJpbmcsIHRoZXNlIHZhbHVlcyB3
aWxsIGJlIGRpcmVjdGx5IGFwcGxpZWQgdG8gdGhlIEhUTUwKLSAgICBlbGVtZW50LiBXaGVuIGxl
ZnQgdW5xdW90ZWQsIHRoZXNlIHZhbHVlcyB3aWxsIGJlIGJvdW5kIHRvIGEgcHJvcGVydHkgb24g
dGhlCi0gICAgdGVtcGxhdGUncyBjdXJyZW50IHJlbmRlcmluZyBjb250ZXh0IChtb3N0IHR5cGlj
YWxseSBhIGNvbnRyb2xsZXIgaW5zdGFuY2UpLgotICAKLSAgCi0gICAgQSB2ZXJ5IGNvbW1vbiB1
c2Ugb2YgdGhpcyBoZWxwZXIgaXMgdG8gYmluZCB0aGUgYHZhbHVlYCBvZiBhbiBpbnB1dCB0byBh
biBPYmplY3QncyBhdHRyaWJ1dGU6Ci0gIAotICAgIGBgYGhhbmRsZWJhcnMKLSAgICBTZWFyY2g6
Ci0gICAge3tpbnB1dCB2YWx1ZT1zZWFyY2hXb3JkfX0KLSAgICBgYGAKLSAgCi0gICAgSW4gdGhp
cyBleGFtcGxlLCB0aGUgaW5pdGFsIHZhbHVlIGluIHRoZSBgPGlucHV0IC8+YCB3aWxsIGJlIHNl
dCB0byB0aGUgdmFsdWUgb2YgYHNlYXJjaFdvcmRgLgotICAgIElmIHRoZSB1c2VyIGNoYW5nZXMg
dGhlIHRleHQsIHRoZSB2YWx1ZSBvZiBgc2VhcmNoV29yZGAgd2lsbCBhbHNvIGJlIHVwZGF0ZWQu
Ci0gIAotICAgICMjIyBBY3Rpb25zCi0gICAgVGhlIGhlbHBlciBjYW4gc2VuZCBtdWx0aXBsZSBh
Y3Rpb25zIGJhc2VkIG9uIHVzZXIgZXZlbnRzLgotICAgIFRoZSBhY3Rpb24gcHJvcGVydHkgZGVm
aW5lcyB0aGUgYWN0aW9uIHdoaWNoIGlzIHNlbnQgd2hlbgotICAgIHRoZSB1c2VyIHByZXNzZXMg
dGhlIHJldHVybiBrZXkuCi0gIAotICAgIGBgYGhhbmRsZWJhcnMKLSAgICB7e2lucHV0IGFjdGlv
bj0ic3VibWl0In19Ci0gICAgYGBgCi0gIAotICAgIFRoZSBoZWxwZXIgYWxsb3dzIHNvbWUgdXNl
ciBldmVudHMgdG8gc2VuZCBhY3Rpb25zLgotICAKLSAgICAqIGBlbnRlcmAKLSAgICAqIGBpbnNl
cnQtbmV3bGluZWAKLSAgICAqIGBlc2NhcGUtcHJlc3NgCi0gICAgKiBgZm9jdXMtaW5gCi0gICAg
KiBgZm9jdXMtb3V0YAotICAgICogYGtleS1wcmVzc2AKLSAgICAqIGBrZXktdXBgCi0gIAotICAK
LSAgICBGb3IgZXhhbXBsZSwgaWYgeW91IGRlc2lyZSBhbiBhY3Rpb24gdG8gYmUgc2VudCB3aGVu
IHRoZSBpbnB1dCBpcyBibHVycmVkLAotICAgIHlvdSBvbmx5IG5lZWQgdG8gc2V0dXAgdGhlIGFj
dGlvbiBuYW1lIHRvIHRoZSBldmVudCBuYW1lIHByb3BlcnR5LgotICAKLSAgICBgYGBoYW5kbGVi
YXJzCi0gICAge3tpbnB1dCBmb2N1cy1vdXQ9ImFsZXJ0TWVzc2FnZSJ9fQotICAgIGBgYAotICAK
LSAgICBTZWUgbW9yZSBhYm91dCBbVGV4dCBTdXBwb3J0IEFjdGlvbnNdKC9hcGkvY2xhc3Nlcy9F
bWJlci5UZXh0RmllbGQuaHRtbCkKLSAgCi0gIAotICAgICMjIyBFeHRlbmRpbmcgYEVtYmVyLlRl
eHRGaWVsZGAKLSAgCi0gICAgSW50ZXJuYWxseSwgYHt7aW5wdXQgdHlwZT0idGV4dCJ9fWAgY3Jl
YXRlcyBhbiBpbnN0YW5jZSBvZiBgRW1iZXIuVGV4dEZpZWxkYCwgcGFzc2luZwotICAgIGFyZ3Vt
ZW50cyBmcm9tIHRoZSBoZWxwZXIgdG8gYEVtYmVyLlRleHRGaWVsZGAncyBgY3JlYXRlYCBtZXRo
b2QuIFlvdSBjYW4gZXh0ZW5kIHRoZQotICAgIGNhcGFiaWxpdGllcyBvZiB0ZXh0IGlucHV0cyBp
biB5b3VyIGFwcGxpY2F0aW9ucyBieSByZW9wZW5pbmcgdGhpcyBjbGFzcy4gRm9yIGV4YW1wbGUs
Ci0gICAgaWYgeW91IGFyZSBidWlsZGluZyBhIEJvb3RzdHJhcCBwcm9qZWN0IHdoZXJlIGBkYXRh
LSpgIGF0dHJpYnV0ZXMgYXJlIHVzZWQsIHlvdQotICAgIGNhbiBhZGQgb25lIHRvIHRoZSBgVGV4
dEZpZWxkYCdzIGBhdHRyaWJ1dGVCaW5kaW5nc2AgcHJvcGVydHk6Ci0gIAotICAKLSAgICBgYGBq
YXZhc2NyaXB0Ci0gICAgRW1iZXIuVGV4dEZpZWxkLnJlb3Blbih7Ci0gICAgICBhdHRyaWJ1dGVC
aW5kaW5nczogWydkYXRhLWVycm9yJ10KLSAgICB9KTsKLSAgICBgYGAKLSAgCi0gICAgS2VlcCBp
biBtaW5kIHdoZW4gd3JpdGluZyBgRW1iZXIuVGV4dEZpZWxkYCBzdWJjbGFzc2VzIHRoYXQgYEVt
YmVyLlRleHRGaWVsZGAKLSAgICBpdHNlbGYgZXh0ZW5kcyBgRW1iZXIuQ29tcG9uZW50YC4gRXhw
ZWN0IGlzb2xhdGVkIGNvbXBvbmVudCBzZW1hbnRpY3MsIG5vdAotICAgIGxlZ2FjeSAxLnggdmll
dyBzZW1hbnRpY3MgKGxpa2UgYGNvbnRyb2xsZXJgIGJlaW5nIHByZXNlbnQpLgotICAKLSAgICBT
ZWUgbW9yZSBhYm91dCBbRW1iZXIgY29tcG9uZW50c10oL2FwaS9jbGFzc2VzL0VtYmVyLkNvbXBv
bmVudC5odG1sKQotICAKLSAgCi0gICAgIyMjIENoZWNrYm94Ci0gIAotICAgIENoZWNrYm94ZXMg
YXJlIHNwZWNpYWwgZm9ybXMgb2YgdGhlIGB7e2lucHV0fX1gIGhlbHBlci4gIFRvIGNyZWF0ZSBh
IGA8Y2hlY2tib3ggLz5gOgotICAKLSAgICBgYGBoYW5kbGViYXJzCi0gICAgRW1iZXJpemUgRXZl
cnl0aGluZzoKLSAgICB7e2lucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJpc0VtYmVyaXplZCIg
Y2hlY2tlZD1pc0VtYmVyaXplZH19Ci0gICAgYGBgCi0gIAotICAgIFRoaXMgd2lsbCBiaW5kIGNo
ZWNrZWQgc3RhdGUgb2YgdGhpcyBjaGVja2JveCB0byB0aGUgdmFsdWUgb2YgYGlzRW1iZXJpemVk
YCAgLS0gaWYgZWl0aGVyIG9uZSBjaGFuZ2VzLAotICAgIGl0IHdpbGwgYmUgcmVmbGVjdGVkIGlu
IHRoZSBvdGhlci4KLSAgCi0gIAotICAgIFRoZSBmb2xsb3dpbmcgSFRNTCBhdHRyaWJ1dGVzIGNh
biBiZSBzZXQgdmlhIHRoZSBoZWxwZXI6Ci0gIAotICAgICogYGNoZWNrZWRgCi0gICAgKiBgZGlz
YWJsZWRgCi0gICAgKiBgdGFiaW5kZXhgCi0gICAgKiBgaW5kZXRlcm1pbmF0ZWAKLSAgICAqIGBu
YW1lYAotICAgICogYGF1dG9mb2N1c2AKLSAgICAqIGBmb3JtYAotICAKLSAgCi0gICAgIyMjIEV4
dGVuZGluZyBgRW1iZXIuQ2hlY2tib3hgCi0gIAotICAgIEludGVybmFsbHksIGB7e2lucHV0IHR5
cGU9ImNoZWNrYm94In19YCBjcmVhdGVzIGFuIGluc3RhbmNlIG9mIGBFbWJlci5DaGVja2JveGAs
IHBhc3NpbmcKLSAgICBhcmd1bWVudHMgZnJvbSB0aGUgaGVscGVyIHRvIGBFbWJlci5DaGVja2Jv
eGAncyBgY3JlYXRlYCBtZXRob2QuIFlvdSBjYW4gZXh0ZW5kIHRoZQotICAgIGNhcGFibGlsdGll
cyBvZiBjaGVja2JveCBpbnB1dHMgaW4geW91ciBhcHBsaWNhdGlvbnMgYnkgcmVvcGVuaW5nIHRo
aXMgY2xhc3MuIEZvciBleGFtcGxlLAotICAgIGlmIHlvdSB3YW50ZWQgdG8gYWRkIGEgY3NzIGNs
YXNzIHRvIGFsbCBjaGVja2JveGVzIGluIHlvdXIgYXBwbGljYXRpb246Ci0gIAotICAgIGBgYGph
dmFzY3JpcHQKLSAgICBFbWJlci5DaGVja2JveC5yZW9wZW4oewotICAgICAgY2xhc3NOYW1lczog
WydteS1hcHAtY2hlY2tib3gnXQotICAgIH0pOwotICAgIGBgYAotICAKLSAgCi0gICAgQG1ldGhv
ZCBpbnB1dAotICAgIEBmb3IgRW1iZXIuVGVtcGxhdGVzLmhlbHBlcnMKLSAgICBAcGFyYW0ge0hh
c2h9IG9wdGlvbnMKLSAgICBAcHVibGljCi0gICovCi0gIGV4cG9ydHMuZGVmYXVsdCA9IHsKLSAg
ICBzZXR1cFN0YXRlOiBmdW5jdGlvbiAobGFzdFN0YXRlLCBlbnYsIHNjb3BlLCBwYXJhbXMsIGhh
c2gpIHsKLSAgICAgIHZhciB0eXBlID0gZW52Lmhvb2tzLmdldFZhbHVlKGhhc2gudHlwZSk7Ci0g
ICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGNvbXBvbmVudE5hbWVNYXBbdHlwZV0gfHwgZGVmYXVs
dENvbXBvbmVudE5hbWU7Ci0KLSAgICAgIF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0KCd7e2lucHV0
IHR5cGU9XCdjaGVja2JveFwnfX0gZG9lcyBub3Qgc3VwcG9ydCBzZXR0aW5nIGB2YWx1ZT1zb21l
Qm9vbGVhblZhbHVlYDsgJyArICd5b3UgbXVzdCB1c2UgYGNoZWNrZWQ9c29tZUJvb2xlYW5WYWx1
ZWAgaW5zdGVhZC4nLCAhKHR5cGUgPT09ICdjaGVja2JveCcgJiYgaGFzaC5oYXNPd25Qcm9wZXJ0
eSgndmFsdWUnKSkpOwotCi0gICAgICByZXR1cm4gX2VtYmVyTWV0YWxBc3NpZ24uZGVmYXVsdCh7
fSwgbGFzdFN0YXRlLCB7IGNvbXBvbmVudE5hbWU6IGNvbXBvbmVudE5hbWUgfSk7Ci0gICAgfSwK
LQotICAgIHJlbmRlcjogZnVuY3Rpb24gKG1vcnBoLCBlbnYsIHNjb3BlLCBwYXJhbXMsIGhhc2gs
IHRlbXBsYXRlLCBpbnZlcnNlLCB2aXNpdG9yKSB7Ci0gICAgICBlbnYuaG9va3MuY29tcG9uZW50
KG1vcnBoLCBlbnYsIHNjb3BlLCBtb3JwaC5nZXRTdGF0ZSgpLmNvbXBvbmVudE5hbWUsIHBhcmFt
cywgaGFzaCwgeyBkZWZhdWx0OiB0ZW1wbGF0ZSwgaW52ZXJzZTogaW52ZXJzZSB9LCB2aXNpdG9y
KTsKLSAgICB9LAotCi0gICAgcmVyZW5kZXI6IGZ1bmN0aW9uICgpIHsKLSAgICAgIHRoaXMucmVu
ZGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7Ci0gICAgfQotICB9OwotCi0gIHZhciBkZWZhdWx0
Q29tcG9uZW50TmFtZSA9ICctdGV4dC1maWVsZCc7Ci0KLSAgdmFyIGNvbXBvbmVudE5hbWVNYXAg
PSB7Ci0gICAgJ2NoZWNrYm94JzogJy1jaGVja2JveCcKLSAgfTsKLX0pOwotZW5pZmVkKCdlbWJl
ci1odG1sYmFycy9rZXl3b3Jkcy9tdXQnLCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwvZGVidWcn
LCAnZW1iZXItbWV0YWwvc3ltYm9sJywgJ2VtYmVyLW1ldGFsL3N0cmVhbXMvcHJveHktc3RyZWFt
JywgJ2VtYmVyLW1ldGFsL3N0cmVhbXMvc3RyZWFtJywgJ2VtYmVyLW1ldGFsL3N0cmVhbXMvdXRp
bHMnLCAnZW1iZXItdmlld3MvY29tcGF0L2F0dHJzLXByb3h5JywgJ2VtYmVyLXJvdXRpbmctaHRt
bGJhcnMva2V5d29yZHMvY2xvc3VyZS1hY3Rpb24nXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJl
ck1ldGFsRGVidWcsIF9lbWJlck1ldGFsU3ltYm9sLCBfZW1iZXJNZXRhbFN0cmVhbXNQcm94eVN0
cmVhbSwgX2VtYmVyTWV0YWxTdHJlYW1zU3RyZWFtLCBfZW1iZXJNZXRhbFN0cmVhbXNVdGlscywg
X2VtYmVyVmlld3NDb21wYXRBdHRyc1Byb3h5LCBfZW1iZXJSb3V0aW5nSHRtbGJhcnNLZXl3b3Jk
c0Nsb3N1cmVBY3Rpb24pIHsKLSAgLyoqCi0gIEBtb2R1bGUgZW1iZXIKLSAgQHN1Ym1vZHVsZSBl
bWJlci10ZW1wbGF0ZXMKLSAgKi8KLQotICAndXNlIHN0cmljdCc7Ci0KLSAgdmFyIF9Qcm94eVN0
cmVhbSRleHRlbmQ7Ci0KLSAgZXhwb3J0cy5kZWZhdWx0ID0gbXV0OwotICBleHBvcnRzLnByaXZh
dGVNdXQgPSBwcml2YXRlTXV0OwotICB2YXIgTVVUQUJMRV9SRUZFUkVOQ0UgPSBfZW1iZXJNZXRh
bFN5bWJvbC5kZWZhdWx0KCdNVVRBQkxFX1JFRkVSRU5DRScpOwotCi0gIGV4cG9ydHMuTVVUQUJM
RV9SRUZFUkVOQ0UgPSBNVVRBQkxFX1JFRkVSRU5DRTsKLSAgdmFyIE11dFN0cmVhbSA9IF9lbWJl
ck1ldGFsU3RyZWFtc1Byb3h5U3RyZWFtLmRlZmF1bHQuZXh0ZW5kKChfUHJveHlTdHJlYW0kZXh0
ZW5kID0gewotICAgIGluaXQ6IGZ1bmN0aW9uIChzdHJlYW0pIHsKLSAgICAgIHRoaXMubGFiZWwg
PSAnKG11dCAnICsgc3RyZWFtLmxhYmVsICsgJyknOwotICAgICAgdGhpcy5wYXRoID0gc3RyZWFt
LnBhdGg7Ci0gICAgICB0aGlzLnNvdXJjZURlcCA9IHRoaXMuYWRkTXV0YWJsZURlcGVuZGVuY3ko
c3RyZWFtKTsKLSAgICAgIHRoaXNbTVVUQUJMRV9SRUZFUkVOQ0VdID0gdHJ1ZTsKLSAgICB9LAot
Ci0gICAgY2VsbDogZnVuY3Rpb24gKCkgewotICAgICAgdmFyIHNvdXJjZSA9IHRoaXM7Ci0gICAg
ICB2YXIgdmFsdWUgPSBzb3VyY2UudmFsdWUoKTsKLQotICAgICAgaWYgKHZhbHVlICYmIHZhbHVl
W19lbWJlclJvdXRpbmdIdG1sYmFyc0tleXdvcmRzQ2xvc3VyZUFjdGlvbi5BQ1RJT05dKSB7Ci0g
ICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICAgIH0KLQotICAgICAgdmFyIHZhbCA9IHsKLSAgICAg
ICAgdmFsdWU6IHZhbHVlLAotICAgICAgICB1cGRhdGU6IGZ1bmN0aW9uICh2YWwpIHsKLSAgICAg
ICAgICBzb3VyY2Uuc2V0VmFsdWUodmFsKTsKLSAgICAgICAgfQotICAgICAgfTsKLQotICAgICAg
dmFsW19lbWJlclZpZXdzQ29tcGF0QXR0cnNQcm94eS5NVVRBQkxFX0NFTExdID0gdHJ1ZTsKLSAg
ICAgIHJldHVybiB2YWw7Ci0gICAgfQotICB9LCBfUHJveHlTdHJlYW0kZXh0ZW5kW19lbWJlclJv
dXRpbmdIdG1sYmFyc0tleXdvcmRzQ2xvc3VyZUFjdGlvbi5JTlZPS0VdID0gZnVuY3Rpb24gKHZh
bCkgewotICAgIHRoaXMuc2V0VmFsdWUodmFsKTsKLSAgfSwgX1Byb3h5U3RyZWFtJGV4dGVuZCkp
OwotCi0gIC8qKgotICAgIFRoZSBgbXV0YCBoZWxwZXIgbGV0cyB5b3UgX19jbGVhcmx5IHNwZWNp
ZnlfXyB0aGF0IGEgY2hpbGQgYENvbXBvbmVudGAgY2FuIHVwZGF0ZSB0aGUKLSAgICAobXV0YWJs
ZSkgdmFsdWUgcGFzc2VkIHRvIGl0LCB3aGljaCB3aWxsIF9fY2hhbmdlIHRoZSB2YWx1ZSBvZiB0
aGUgcGFyZW50IGNvbXBvbmVudF9fLgotICAKLSAgICBUaGlzIGlzIHZlcnkgaGVscGZ1bCBmb3Ig
cGFzc2luZyBtdXRhYmxlIHZhbHVlcyB0byBhIGBDb21wb25lbnRgIG9mIGFueSBzaXplLCBidXQK
LSAgICBjcml0aWNhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBsb2dpYyBvZiBhIGxhcmdlL2NvbXBs
ZXggYENvbXBvbmVudGAuCi0gIAotICAgIFRvIHNwZWNpZnkgdGhhdCBhIHBhcmFtZXRlciBpcyBt
dXRhYmxlLCB3aGVuIGludm9raW5nIHRoZSBjaGlsZCBgQ29tcG9uZW50YDoKLSAgCi0gICAgYGBg
aGFuZGxlYmFycwotICAgIHt7bXktY2hpbGQgY2hpbGRDbGlja0NvdW50PShtdXQgdG90YWxDbGlj
a3MpfX0KLSAgICBgYGAKLSAgCi0gICAgVGhlIGNoaWxkIGBDb21wb25lbnRgIGNhbiB0aGVuIG1v
ZGlmeSB0aGUgcGFyZW50J3MgdmFsdWUgYXMgbmVlZGVkOgotICAKLSAgICBgYGBqYXZhc2NyaXB0
Ci0gICAgLy8gbXktY2hpbGQuanMKLSAgICBleHBvcnQgZGVmYXVsdCBDb21wb25lbnQuZXh0ZW5k
KHsKLSAgICAgIGNsaWNrKCkgewotICAgICAgICB0aGlzLmdldCgnY2hpbGRDbGlja0NvdW50Jyku
dXBkYXRlKHRoaXMuZ2V0KCdjaGlsZENsaWNrQ291bnQnKS52YWx1ZSArIDEpOwotICAgICAgfQot
ICAgIH0pOwotICAgIGBgYAotICAKLSAgICBBZGRpdGlvbmFsbHksIHRoZSBgbXV0YCBoZWxwZXIg
Y2FuIGJlIGNvbWJpbmVkIHdpdGggdGhlIGBhY3Rpb25gIGhlbHBlciB0bwotICAgIG11dGF0ZSBh
IHZhbHVlLiBGb3IgZXhhbXBsZToKLSAgCi0gICAgYGBgaGFuZGxlYmFycwotICAgIHt7bXktY2hp
bGQgY2hpbGRDbGlja0NvdW50PXRvdGFsQ2xpY2tzIGNsaWNrLWNvdW50LWNoYW5nZT0oYWN0aW9u
IChtdXQgdG90YWxDbGlja3MpKX19Ci0gICAgYGBgCi0gIAotICAgIFRoZSBjaGlsZCBgQ29tcG9u
ZW50YCB3b3VsZCBpbnZva2UgdGhlIGFjdGlvbiB3aXRoIHRoZSBuZXcgY2xpY2sgdmFsdWU6Ci0g
IAotICAgIGBgYGphdmFzY3JpcHQKLSAgICAvLyBteS1jaGlsZC5qcwotICAgIGV4cG9ydCBkZWZh
dWx0IENvbXBvbmVudC5leHRlbmQoewotICAgICAgY2xpY2soKSB7Ci0gICAgICAgIHRoaXMuZ2V0
KCdjbGlja0NvdW50Q2hhbmdlJykodGhpcy5nZXQoJ2NoaWxkQ2xpY2tDb3VudCcpICsgMSk7Ci0g
ICAgICB9Ci0gICAgfSk7Ci0gICAgYGBgCi0gIAotICAgIFRoZSBgbXV0YCBoZWxwZXIgY2hhbmdl
cyB0aGUgYHRvdGFsQ2xpY2tzYCB2YWx1ZSB0byB3aGF0IHdhcyBwcm92aWRlZCBhcyB0aGUgYWN0
aW9uIGFyZ3VtZW50LgotICAKLSAgICBTZWUgYSBbMi4wIGJsb2cgcG9zdF0oaHR0cDovL2VtYmVy
anMuY29tL2Jsb2cvMjAxNS8wNS8xMC9ydW4tdXAtdG8tdHdvLW9oLmh0bWwjdG9jX3RoZS1jb2Rl
LW11dC1jb2RlLWhlbHBlcikgZm9yCi0gICAgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvbiB1c2lu
ZyBge3ttdXR9fWAuCi0gIAotICAgIEBwdWJsaWMKLSAgICBAbWV0aG9kIG11dAotICAgIEBwYXJh
bSB7T2JqZWN0fSBbYXR0cl0gdGhlICJ0d28td2F5IiBhdHRyaWJ1dGUgdGhhdCBjYW4gYmUgbW9k
aWZpZWQuCi0gICAgQGZvciBFbWJlci5UZW1wbGF0ZXMuaGVscGVycwotICAgIEBwdWJsaWMKLSAg
Ki8KLQotICBmdW5jdGlvbiBtdXQobW9ycGgsIGVudiwgc2NvcGUsIG9yaWdpbmFsUGFyYW1zLCBo
YXNoLCB0ZW1wbGF0ZSwgaW52ZXJzZSkgewotICAgIC8vIElmIGBtb3JwaGAgaXMgYG51bGxgIHRo
ZSBrZXl3b3JkIGlzIGJlaW5nIGludm9rZWQgYXMgYSBzdWJleHByZXNzaW9uLgotICAgIGlmICht
b3JwaCA9PT0gbnVsbCkgewotICAgICAgdmFyIHZhbHVlU3RyZWFtID0gb3JpZ2luYWxQYXJhbXNb
MF07Ci0gICAgICByZXR1cm4gbXV0UGFyYW0oZW52Lmhvb2tzLmdldFZhbHVlLCB2YWx1ZVN0cmVh
bSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBmdW5jdGlvbiBwcml2YXRl
TXV0KG1vcnBoLCBlbnYsIHNjb3BlLCBvcmlnaW5hbFBhcmFtcywgaGFzaCwgdGVtcGxhdGUsIGlu
dmVyc2UpIHsKLSAgICAvLyBJZiBgbW9ycGhgIGlzIGBudWxsYCB0aGUga2V5d29yZCBpcyBiZWlu
ZyBpbnZva2VkIGFzIGEgc3ViZXhwcmVzc2lvbi4KLSAgICBpZiAobW9ycGggPT09IG51bGwpIHsK
LSAgICAgIHZhciB2YWx1ZVN0cmVhbSA9IG9yaWdpbmFsUGFyYW1zWzBdOwotICAgICAgcmV0dXJu
IG11dFBhcmFtKGVudi5ob29rcy5nZXRWYWx1ZSwgdmFsdWVTdHJlYW0sIHRydWUpOwotICAgIH0K
LQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgdmFyIExpdGVyYWxTdHJlYW0gPSBfZW1iZXJN
ZXRhbFN0cmVhbXNTdHJlYW0uZGVmYXVsdC5leHRlbmQoewotICAgIGluaXQ6IGZ1bmN0aW9uIChs
aXRlcmFsKSB7Ci0gICAgICB0aGlzLmxpdGVyYWwgPSBsaXRlcmFsOwotICAgICAgdGhpcy5sYWJl
bCA9ICcobGl0ZXJhbCAnICsgbGl0ZXJhbCArICcpJzsKLSAgICB9LAotCi0gICAgY29tcHV0ZTog
ZnVuY3Rpb24gKCkgewotICAgICAgcmV0dXJuIHRoaXMubGl0ZXJhbDsKLSAgICB9LAotCi0gICAg
c2V0VmFsdWU6IGZ1bmN0aW9uICh2YWwpIHsKLSAgICAgIHRoaXMubGl0ZXJhbCA9IHZhbDsKLSAg
ICAgIHRoaXMubm90aWZ5KCk7Ci0gICAgfQotICB9KTsKLQotICBmdW5jdGlvbiBtdXRQYXJhbShy
ZWFkLCBzdHJlYW0sIGludGVybmFsKSB7Ci0gICAgaWYgKGludGVybmFsKSB7Ci0gICAgICBpZiAo
IV9lbWJlck1ldGFsU3RyZWFtc1V0aWxzLmlzU3RyZWFtKHN0cmVhbSkpIHsKLSAgICAgICAgdmFy
IGxpdGVyYWwgPSBzdHJlYW07Ci0gICAgICAgIHN0cmVhbSA9IG5ldyBMaXRlcmFsU3RyZWFtKGxp
dGVyYWwpOwotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICBfZW1iZXJNZXRhbERlYnVnLmFz
c2VydCgnWW91IGNhbiBvbmx5IHBhc3MgYSBwYXRoIHRvIG11dCcsIF9lbWJlck1ldGFsU3RyZWFt
c1V0aWxzLmlzU3RyZWFtKHN0cmVhbSkpOwotICAgIH0KLQotICAgIGlmIChzdHJlYW1bTVVUQUJM
RV9SRUZFUkVOQ0VdKSB7Ci0gICAgICByZXR1cm4gc3RyZWFtOwotICAgIH0KLQotICAgIHJldHVy
biBuZXcgTXV0U3RyZWFtKHN0cmVhbSk7Ci0gIH0KLX0pOwotZW5pZmVkKCdlbWJlci1odG1sYmFy
cy9rZXl3b3Jkcy9vdXRsZXQnLCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwvZGVidWcnLCAnZW1i
ZXItbWV0YWwvcHJvcGVydHlfZ2V0JywgJ2VtYmVyLWh0bWxiYXJzL25vZGUtbWFuYWdlcnMvdmll
dy1ub2RlLW1hbmFnZXInLCAnZW1iZXItaHRtbGJhcnMvdGVtcGxhdGVzL3RvcC1sZXZlbC12aWV3
JywgJ2VtYmVyLW1ldGFsL2ZlYXR1cmVzJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRh
bERlYnVnLCBfZW1iZXJNZXRhbFByb3BlcnR5X2dldCwgX2VtYmVySHRtbGJhcnNOb2RlTWFuYWdl
cnNWaWV3Tm9kZU1hbmFnZXIsIF9lbWJlckh0bWxiYXJzVGVtcGxhdGVzVG9wTGV2ZWxWaWV3LCBf
ZW1iZXJNZXRhbEZlYXR1cmVzKSB7Ci0gIC8qKgotICBAbW9kdWxlIGVtYmVyCi0gIEBzdWJtb2R1
bGUgZW1iZXItdGVtcGxhdGVzCi0gICovCi0KLSAgJ3VzZSBzdHJpY3QnOwotCi0gIF9lbWJlckh0
bWxiYXJzVGVtcGxhdGVzVG9wTGV2ZWxWaWV3LmRlZmF1bHQubWV0YS5yZXZpc2lvbiA9ICdFbWJl
ckAyLjYuMic7Ci0KLSAgLyoqCi0gICAgVGhlIGB7e291dGxldH19YCBoZWxwZXIgbGV0cyB5b3Ug
c3BlY2lmeSB3aGVyZSBhIGNoaWxkIHJvdXRlIHdpbGwgcmVuZGVyIGluCi0gICAgeW91ciB0ZW1w
bGF0ZS4gQW4gaW1wb3J0YW50IHVzZSBvZiB0aGUgYHt7b3V0bGV0fX1gIGhlbHBlciBpcyBpbiB5
b3VyCi0gICAgYXBwbGljYXRpb24ncyBgYXBwbGljYXRpb24uaGJzYCBmaWxlOgotICAKLSAgICBg
YGBoYW5kbGViYXJzCi0gICAge3shIGFwcC90ZW1wbGF0ZXMvYXBwbGljYXRpb24uaGJzIH19Ci0g
IAotICAgIDwhLS0gaGVhZGVyIGNvbnRlbnQgZ29lcyBoZXJlLCBhbmQgd2lsbCBhbHdheXMgZGlz
cGxheSAtLT4KLSAgICB7e215LWhlYWRlcn19Ci0gIAotICAgIDxkaXYgY2xhc3M9Im15LWR5bmFt
aWMtY29udGVudCI+Ci0gICAgICA8IS0tIHRoaXMgY29udGVudCB3aWxsIGNoYW5nZSBiYXNlZCBv
biB0aGUgY3VycmVudCByb3V0ZSwgd2hpY2ggZGVwZW5kcyBvbiB0aGUgY3VycmVudCBVUkwgLS0+
Ci0gICAgICB7e291dGxldH19Ci0gICAgPC9kaXY+Ci0gIAotICAgIDwhLS0gZm9vdGVyIGNvbnRl
bnQgZ29lcyBoZXJlLCBhbmQgd2lsbCBhbHdheXMgZGlzcGxheSAtLT4KLSAgICB7e215LWZvb3Rl
cn19Ci0gICAgYGBgCi0gIAotICAgIFNlZSBbdGVtcGxhdGVzIGd1aWRlXShodHRwOi8vZW1iZXJq
cy5jb20vZ3VpZGVzL3RlbXBsYXRlcy90aGUtYXBwbGljYXRpb24tdGVtcGxhdGUvKSBmb3IKLSAg
ICBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIHVzaW5nIGB7e291dGxldH19YCBpbiBgYXBwbGlj
YXRpb24uaGJzYC4KLSAgCi0gICAgWW91IG1heSBhbHNvIHNwZWNpZnkgYSBuYW1lIGZvciB0aGUg
YHt7b3V0bGV0fX1gLCB3aGljaCBpcyB1c2VmdWwgd2hlbiB1c2luZyBtb3JlIHRoYW4gb25lCi0g
ICAgYHt7b3V0bGV0fX1gIGluIGEgdGVtcGxhdGU6Ci0gIAotICAgIGBgYGhhbmRsZWJhcnMKLSAg
ICB7e291dGxldCAibWVudSJ9fQotICAgIHt7b3V0bGV0ICJzaWRlYmFyIn19Ci0gICAge3tvdXRs
ZXQgIm1haW4ifX0KLSAgICBgYGAKLSAgCi0gICAgWW91ciByb3V0ZXMgY2FuIHRoZW4gcmVuZGVy
IGludG8gYSBzcGVjaWZpYyBvbmUgb2YgdGhlc2UgYG91dGxldGBzIGJ5IHNwZWNpZnlpbmcgdGhl
IGBvdXRsZXRgCi0gICAgYXR0cmlidXRlIGluIHlvdXIgYHJlbmRlclRlbXBsYXRlYCBmdW5jdGlv
bjoKLSAgCi0gICAgYGBgamF2YXNjcmlwdAotICAgIC8vIGFwcC9yb3V0ZXMvbWVudS5qcwotICAK
LSAgICBleHBvcnQgZGVmYXVsdCBFbWJlci5Sb3V0ZS5leHRlbmQoewotICAgICAgcmVuZGVyVGVt
cGxhdGUoKSB7Ci0gICAgICAgIHRoaXMucmVuZGVyKHsgb3V0bGV0OiAnbWVudScgfSk7Ci0gICAg
ICB9Ci0gICAgfSk7Ci0gICAgYGBgCi0gIAotICAgIFNlZSB0aGUgW3JvdXRpbmcgZ3VpZGVdKGh0
dHA6Ly9lbWJlcmpzLmNvbS9ndWlkZXMvcm91dGluZy9yZW5kZXJpbmctYS10ZW1wbGF0ZS8pIGZv
ciBtb3JlCi0gICAgaW5mb3JtYXRpb24gb24gaG93IHlvdXIgYHJvdXRlYCBpbnRlcmFjdHMgd2l0
aCB0aGUgYHt7b3V0bGV0fX1gIGhlbHBlci4KLSAgCi0gICAgTm90ZTogWW91ciBjb250ZW50IF9f
d2lsbCBub3QgcmVuZGVyX18gaWYgdGhlcmUgaXNuJ3QgYW4gYHt7b3V0bGV0fX1gIGZvciBpdC4K
LSAgCi0gICAgQHB1YmxpYwotICAgIEBtZXRob2Qgb3V0bGV0Ci0gICAgQHBhcmFtIHtTdHJpbmd9
IFtuYW1lXQotICAgIEBmb3IgRW1iZXIuVGVtcGxhdGVzLmhlbHBlcnMKLSAgICBAcHVibGljCi0g
ICovCi0gIGV4cG9ydHMuZGVmYXVsdCA9IHsKLSAgICB3aWxsUmVuZGVyOiBmdW5jdGlvbiAocmVu
ZGVyTm9kZSwgZW52KSB7Ci0gICAgICBlbnYudmlldy5vd25lclZpZXcuX291dGxldHMucHVzaChy
ZW5kZXJOb2RlKTsKLSAgICB9LAotCi0gICAgc2V0dXBTdGF0ZTogZnVuY3Rpb24gKHN0YXRlLCBl
bnYsIHNjb3BlLCBwYXJhbXMsIGhhc2gpIHsKLSAgICAgIHZhciBvdXRsZXRTdGF0ZSA9IGVudi5v
dXRsZXRTdGF0ZTsKLSAgICAgIHZhciByZWFkID0gZW52Lmhvb2tzLmdldFZhbHVlOwotICAgICAg
dmFyIG91dGxldE5hbWUgPSByZWFkKHBhcmFtc1swXSkgfHwgJ21haW4nOwotICAgICAgdmFyIHNl
bGVjdGVkT3V0bGV0U3RhdGUgPSBvdXRsZXRTdGF0ZVtvdXRsZXROYW1lXTsKLQotICAgICAgcmV0
dXJuIHsKLSAgICAgICAgb3V0bGV0U3RhdGU6IHNlbGVjdGVkT3V0bGV0U3RhdGUsCi0gICAgICAg
IGhhc1BhcmVudE91dGxldDogZW52Lmhhc1BhcmVudE91dGxldCwKLSAgICAgICAgbWFuYWdlcjog
c3RhdGUubWFuYWdlcgotICAgICAgfTsKLSAgICB9LAotCi0gICAgY2hpbGRFbnY6IGZ1bmN0aW9u
IChzdGF0ZSwgZW52KSB7Ci0gICAgICB2YXIgb3V0bGV0U3RhdGUgPSBzdGF0ZS5vdXRsZXRTdGF0
ZTsKLSAgICAgIHZhciB0b1JlbmRlciA9IG91dGxldFN0YXRlICYmIG91dGxldFN0YXRlLnJlbmRl
cjsKLSAgICAgIHZhciBtZXRhID0gdG9SZW5kZXIgJiYgdG9SZW5kZXIudGVtcGxhdGUgJiYgdG9S
ZW5kZXIudGVtcGxhdGUubWV0YTsKLQotICAgICAgcmV0dXJuIGVudi5jaGlsZFdpdGhPdXRsZXRT
dGF0ZShvdXRsZXRTdGF0ZSAmJiBvdXRsZXRTdGF0ZS5vdXRsZXRzLCB0cnVlLCBtZXRhKTsKLSAg
ICB9LAotCi0gICAgaXNTdGFibGU6IGZ1bmN0aW9uIChsYXN0U3RhdGUsIG5leHRTdGF0ZSkgewot
ICAgICAgcmV0dXJuIGlzU3RhYmxlKGxhc3RTdGF0ZS5vdXRsZXRTdGF0ZSwgbmV4dFN0YXRlLm91
dGxldFN0YXRlKTsKLSAgICB9LAotCi0gICAgaXNFbXB0eTogZnVuY3Rpb24gKHN0YXRlKSB7Ci0g
ICAgICByZXR1cm4gaXNFbXB0eShzdGF0ZS5vdXRsZXRTdGF0ZSk7Ci0gICAgfSwKLQotICAgIHJl
bmRlcjogZnVuY3Rpb24gKHJlbmRlck5vZGUsIGVudiwgc2NvcGUsIHBhcmFtcywgaGFzaCwgdGVt
cGxhdGUsIGludmVyc2UsIHZpc2l0b3IpIHsKLSAgICAgIHZhciBzdGF0ZSA9IHJlbmRlck5vZGUu
Z2V0U3RhdGUoKTsKLSAgICAgIHZhciBwYXJlbnRWaWV3ID0gZW52LnZpZXc7Ci0gICAgICB2YXIg
b3V0bGV0U3RhdGUgPSBzdGF0ZS5vdXRsZXRTdGF0ZTsKLSAgICAgIHZhciB0b1JlbmRlciA9IG91
dGxldFN0YXRlLnJlbmRlcjsKLSAgICAgIHZhciBuYW1lc3BhY2UgPSBlbnYub3duZXIubG9va3Vw
KCdhcHBsaWNhdGlvbjptYWluJyk7Ci0gICAgICB2YXIgTE9HX1ZJRVdfTE9PS1VQUyA9IF9lbWJl
ck1ldGFsUHJvcGVydHlfZ2V0LmdldChuYW1lc3BhY2UsICdMT0dfVklFV19MT09LVVBTJyk7Ci0K
LSAgICAgIHZhciBWaWV3Q2xhc3MgPSBvdXRsZXRTdGF0ZS5yZW5kZXIuVmlld0NsYXNzOwotCi0g
ICAgICBpZiAoIXN0YXRlLmhhc1BhcmVudE91dGxldCAmJiAhVmlld0NsYXNzKSB7Ci0gICAgICAg
IFZpZXdDbGFzcyA9IGVudi5vd25lci5fbG9va3VwRmFjdG9yeSgndmlldzp0b3BsZXZlbCcpOwot
ICAgICAgfQotCi0gICAgICB2YXIgQ29tcG9uZW50OwotCi0gICAgICB2YXIgb3B0aW9uczsKLSAg
ICAgIHZhciBhdHRycyA9IHt9OwotICAgICAgaWYgKENvbXBvbmVudCkgewotICAgICAgICBvcHRp
b25zID0gewotICAgICAgICAgIGNvbXBvbmVudDogQ29tcG9uZW50Ci0gICAgICAgIH07Ci0gICAg
ICAgIGF0dHJzID0gdG9SZW5kZXIuYXR0cnM7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBvcHRp
b25zID0gewotICAgICAgICAgIGNvbXBvbmVudDogVmlld0NsYXNzLAotICAgICAgICAgIHNlbGY6
IHRvUmVuZGVyLmNvbnRyb2xsZXIsCi0gICAgICAgICAgY3JlYXRlT3B0aW9uczogewotICAgICAg
ICAgICAgY29udHJvbGxlcjogdG9SZW5kZXIuY29udHJvbGxlcgotICAgICAgICAgIH0KLSAgICAg
ICAgfTsKLQotICAgICAgICB0ZW1wbGF0ZSA9IHRlbXBsYXRlIHx8IHRvUmVuZGVyLnRlbXBsYXRl
ICYmIHRvUmVuZGVyLnRlbXBsYXRlLnJhdzsKLQotICAgICAgICBpZiAoTE9HX1ZJRVdfTE9PS1VQ
UyAmJiBWaWV3Q2xhc3MpIHsKLSAgICAgICAgICBfZW1iZXJNZXRhbERlYnVnLmluZm8oJ1JlbmRl
cmluZyAnICsgdG9SZW5kZXIubmFtZSArICcgd2l0aCAnICsgVmlld0NsYXNzLCB7IGZ1bGxOYW1l
OiAndmlldzonICsgdG9SZW5kZXIubmFtZSB9KTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAg
ICBpZiAoc3RhdGUubWFuYWdlcikgewotICAgICAgICBzdGF0ZS5tYW5hZ2VyLmRlc3Ryb3koKTsK
LSAgICAgICAgc3RhdGUubWFuYWdlciA9IG51bGw7Ci0gICAgICB9Ci0KLSAgICAgIHZhciBub2Rl
TWFuYWdlciA9IF9lbWJlckh0bWxiYXJzTm9kZU1hbmFnZXJzVmlld05vZGVNYW5hZ2VyLmRlZmF1
bHQuY3JlYXRlKHJlbmRlck5vZGUsIGVudiwgYXR0cnMsIG9wdGlvbnMsIHBhcmVudFZpZXcsIG51
bGwsIG51bGwsIHRlbXBsYXRlKTsKLSAgICAgIHN0YXRlLm1hbmFnZXIgPSBub2RlTWFuYWdlcjsK
LQotICAgICAgbm9kZU1hbmFnZXIucmVuZGVyKGVudiwgaGFzaCwgdmlzaXRvcik7Ci0gICAgfQot
ICB9OwotCi0gIGZ1bmN0aW9uIGlzRW1wdHkob3V0bGV0U3RhdGUpIHsKLSAgICByZXR1cm4gIW91
dGxldFN0YXRlIHx8ICFvdXRsZXRTdGF0ZS5yZW5kZXIuVmlld0NsYXNzICYmICFvdXRsZXRTdGF0
ZS5yZW5kZXIudGVtcGxhdGU7Ci0gIH0KLQotICBmdW5jdGlvbiBpc1N0YWJsZShhLCBiKSB7Ci0g
ICAgaWYgKCFhICYmICFiKSB7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKCFh
IHx8ICFiKSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGEgPSBhLnJlbmRlcjsK
LSAgICBiID0gYi5yZW5kZXI7Ci0gICAgZm9yICh2YXIga2V5IGluIGEpIHsKLSAgICAgIGlmIChh
Lmhhc093blByb3BlcnR5KGtleSkpIHsKLSAgICAgICAgLy8gTmFtZSBpcyBvbmx5IGhlcmUgZm9y
IGxvZ2dpbmcgJiBkZWJ1Z2dpbmcuIElmIHR3byBkaWZmZXJlbnQKLSAgICAgICAgLy8gbmFtZXMg
cmVzdWx0IGluIG90aGVyd2lzZSBpZGVudGljYWwgc3RhdGVzLCB0aGV5J3JlIHN0aWxsCi0gICAg
ICAgIC8vIGlkZW50aWNhbC4KLSAgICAgICAgaWYgKGFba2V5XSAhPT0gYltrZXldICYmIGtleSAh
PT0gJ25hbWUnKSB7Ci0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICB9
Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotICB9Ci19KTsKLWVuaWZlZCgnZW1iZXItaHRtbGJh
cnMva2V5d29yZHMvcGFydGlhbCcsIFsnZXhwb3J0cycsICdlbWJlci12aWV3cy9zeXN0ZW0vbG9v
a3VwX3BhcnRpYWwnLCAnaHRtbGJhcnMtcnVudGltZSddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2Vt
YmVyVmlld3NTeXN0ZW1Mb29rdXBfcGFydGlhbCwgX2h0bWxiYXJzUnVudGltZSkgewotICAvKioK
LSAgQG1vZHVsZSBlbWJlcgotICBAc3VibW9kdWxlIGVtYmVyLXRlbXBsYXRlcwotICAqLwotCi0g
ICd1c2Ugc3RyaWN0JzsKLQotICAvKioKLSAgICBUaGUgYHBhcnRpYWxgIGhlbHBlciByZW5kZXJz
IGFub3RoZXIgdGVtcGxhdGUgd2l0aG91dAotICAgIGNoYW5naW5nIHRoZSB0ZW1wbGF0ZSBjb250
ZXh0OgotICAKLSAgICBgYGBoYW5kbGViYXJzCi0gICAge3tmb299fQotICAgIHt7cGFydGlhbCAi
bmF2In19Ci0gICAgYGBgCi0gIAotICAgIFRoZSBhYm92ZSBleGFtcGxlIHRlbXBsYXRlIHdpbGwg
cmVuZGVyIGEgdGVtcGxhdGUgbmFtZWQKLSAgICAiX25hdiIsIHdoaWNoIGhhcyB0aGUgc2FtZSBj
b250ZXh0IGFzIHRoZSBwYXJlbnQgdGVtcGxhdGUKLSAgICBpdCdzIHJlbmRlcmVkIGludG8sIHNv
IGlmIHRoZSAiX25hdiIgdGVtcGxhdGUgYWxzbyByZWZlcmVuY2VkCi0gICAgYHt7Zm9vfX1gLCBp
dCB3b3VsZCBwcmludCB0aGUgc2FtZSB0aGluZyBhcyB0aGUgYHt7Zm9vfX1gCi0gICAgaW4gdGhl
IGFib3ZlIGV4YW1wbGUuCi0gIAotICAgIElmIGEgIl9uYXYiIHRlbXBsYXRlIGlzbid0IGZvdW5k
LCB0aGUgYHBhcnRpYWxgIGhlbHBlciB3aWxsCi0gICAgZmFsbCBiYWNrIHRvIGEgdGVtcGxhdGUg
bmFtZWQgIm5hdiIuCi0gIAotICAgICMjIyBCb3VuZCB0ZW1wbGF0ZSBuYW1lcwotICAKLSAgICBU
aGUgcGFyYW1ldGVyIHN1cHBsaWVkIHRvIGBwYXJ0aWFsYCBjYW4gYWxzbyBiZSBhIHBhdGgKLSAg
ICB0byBhIHByb3BlcnR5IGNvbnRhaW5pbmcgYSB0ZW1wbGF0ZSBuYW1lLCBlLmcuOgotICAKLSAg
ICBgYGBoYW5kbGViYXJzCi0gICAge3twYXJ0aWFsIHNvbWVUZW1wbGF0ZU5hbWV9fQotICAgIGBg
YAotICAKLSAgICBUaGUgYWJvdmUgZXhhbXBsZSB3aWxsIGxvb2sgdXAgdGhlIHZhbHVlIG9mIGBz
b21lVGVtcGxhdGVOYW1lYAotICAgIG9uIHRoZSB0ZW1wbGF0ZSBjb250ZXh0IChlLmcuIGEgY29u
dHJvbGxlcikgYW5kIHVzZSB0aGF0Ci0gICAgdmFsdWUgYXMgdGhlIG5hbWUgb2YgdGhlIHRlbXBs
YXRlIHRvIHJlbmRlci4gSWYgdGhlIHJlc29sdmVkCi0gICAgdmFsdWUgaXMgZmFsc3ksIG5vdGhp
bmcgd2lsbCBiZSByZW5kZXJlZC4gSWYgYHNvbWVUZW1wbGF0ZU5hbWVgCi0gICAgY2hhbmdlcywg
dGhlIHBhcnRpYWwgd2lsbCBiZSByZS1yZW5kZXJlZCB1c2luZyB0aGUgbmV3IHRlbXBsYXRlCi0g
ICAgbmFtZS4KLSAgCi0gIAotICAgIEBtZXRob2QgcGFydGlhbAotICAgIEBmb3IgRW1iZXIuVGVt
cGxhdGVzLmhlbHBlcnMKLSAgICBAcGFyYW0ge1N0cmluZ30gcGFydGlhbE5hbWUgVGhlIG5hbWUg
b2YgdGhlIHRlbXBsYXRlIHRvIHJlbmRlciBtaW51cyB0aGUgbGVhZGluZyB1bmRlcnNjb3JlLgot
ICAgIEBwdWJsaWMKLSAgKi8KLQotICBleHBvcnRzLmRlZmF1bHQgPSB7Ci0gICAgc2V0dXBTdGF0
ZTogZnVuY3Rpb24gKHN0YXRlLCBlbnYsIHNjb3BlLCBwYXJhbXMsIGhhc2gpIHsKLSAgICAgIHJl
dHVybiB7IHBhcnRpYWxOYW1lOiBlbnYuaG9va3MuZ2V0VmFsdWUocGFyYW1zWzBdKSB9OwotICAg
IH0sCi0KLSAgICByZW5kZXI6IGZ1bmN0aW9uIChyZW5kZXJOb2RlLCBlbnYsIHNjb3BlLCBwYXJh
bXMsIGhhc2gsIHRlbXBsYXRlLCBpbnZlcnNlLCB2aXNpdG9yKSB7Ci0gICAgICB2YXIgc3RhdGUg
PSByZW5kZXJOb2RlLmdldFN0YXRlKCk7Ci0gICAgICBpZiAoIXN0YXRlLnBhcnRpYWxOYW1lKSB7
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgICAgdmFyIGZvdW5kID0gX2VtYmVy
Vmlld3NTeXN0ZW1Mb29rdXBfcGFydGlhbC5kZWZhdWx0KGVudiwgc3RhdGUucGFydGlhbE5hbWUp
OwotICAgICAgaWYgKCFmb3VuZCkgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLQot
ICAgICAgX2h0bWxiYXJzUnVudGltZS5pbnRlcm5hbC5ob3N0QmxvY2socmVuZGVyTm9kZSwgZW52
LCBzY29wZSwgZm91bmQucmF3LCBudWxsLCBudWxsLCB2aXNpdG9yLCBmdW5jdGlvbiAob3B0aW9u
cykgewotICAgICAgICBvcHRpb25zLnRlbXBsYXRlcy50ZW1wbGF0ZS55aWVsZCgpOwotICAgICAg
fSk7Ci0gICAgfQotICB9OwotfSk7Ci1lbmlmZWQoJ2VtYmVyLWh0bWxiYXJzL2tleXdvcmRzL3Jl
YWRvbmx5JywgWydleHBvcnRzJywgJ2VtYmVyLWh0bWxiYXJzL2tleXdvcmRzL211dCddLCBmdW5j
dGlvbiAoZXhwb3J0cywgX2VtYmVySHRtbGJhcnNLZXl3b3Jkc011dCkgewotICAvKioKLSAgQG1v
ZHVsZSBlbWJlcgotICBAc3VibW9kdWxlIGVtYmVyLXRlbXBsYXRlcwotICAqLwotCi0gICd1c2Ug
c3RyaWN0JzsKLQotICBleHBvcnRzLmRlZmF1bHQgPSByZWFkb25seTsKLQotICBmdW5jdGlvbiBy
ZWFkb25seShtb3JwaCwgZW52LCBzY29wZSwgb3JpZ2luYWxQYXJhbXMsIGhhc2gsIHRlbXBsYXRl
LCBpbnZlcnNlKSB7Ci0gICAgLy8gSWYgYG1vcnBoYCBpcyBgbnVsbGAgdGhlIGtleXdvcmQgaXMg
YmVpbmcgaW52b2tlZCBhcyBhIHN1YmV4cHJlc3Npb24uCi0gICAgaWYgKG1vcnBoID09PSBudWxs
KSB7Ci0gICAgICB2YXIgc3RyZWFtID0gb3JpZ2luYWxQYXJhbXNbMF07Ci0gICAgICBpZiAoc3Ry
ZWFtICYmIHN0cmVhbVtfZW1iZXJIdG1sYmFyc0tleXdvcmRzTXV0Lk1VVEFCTEVfUkVGRVJFTkNF
XSkgewotICAgICAgICByZXR1cm4gc3RyZWFtLnNvdXJjZURlcC5kZXBlbmRlZTsKLSAgICAgIH0K
LSAgICAgIHJldHVybiBzdHJlYW07Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLX0p
OwotZW5pZmVkKCdlbWJlci1odG1sYmFycy9rZXl3b3Jkcy90ZXh0YXJlYScsIFsnZXhwb3J0cydd
LCBmdW5jdGlvbiAoZXhwb3J0cykgewotICAvKioKLSAgQG1vZHVsZSBlbWJlcgotICBAc3VibW9k
dWxlIGVtYmVyLXRlbXBsYXRlcwotICAqLwotCi0gIC8qKgotICAgIGB7e3RleHRhcmVhfX1gIGlu
c2VydHMgYSBuZXcgaW5zdGFuY2Ugb2YgYDx0ZXh0YXJlYT5gIHRhZyBpbnRvIHRoZSB0ZW1wbGF0
ZS4KLSAgICBUaGUgYXR0cmlidXRlcyBvZiBge3t0ZXh0YXJlYX19YCBtYXRjaCB0aG9zZSBvZiB0
aGUgbmF0aXZlIEhUTUwgdGFncyBhcwotICAgIGNsb3NlbHkgYXMgcG9zc2libGUuCi0gIAotICAg
IFRoZSBmb2xsb3dpbmcgSFRNTCBhdHRyaWJ1dGVzIGNhbiBiZSBzZXQ6Ci0gIAotICAgICAgKiBg
dmFsdWVgCi0gICAgICAqIGBuYW1lYAotICAgICAgKiBgcm93c2AKLSAgICAgICogYGNvbHNgCi0g
ICAgICAqIGBwbGFjZWhvbGRlcmAKLSAgICAgICogYGRpc2FibGVkYAotICAgICAgKiBgbWF4bGVu
Z3RoYAotICAgICAgKiBgdGFiaW5kZXhgCi0gICAgICAqIGBzZWxlY3Rpb25FbmRgCi0gICAgICAq
IGBzZWxlY3Rpb25TdGFydGAKLSAgICAgICogYHNlbGVjdGlvbkRpcmVjdGlvbmAKLSAgICAgICog
YHdyYXBgCi0gICAgICAqIGByZWFkb25seWAKLSAgICAgICogYGF1dG9mb2N1c2AKLSAgICAgICog
YGZvcm1gCi0gICAgICAqIGBzcGVsbGNoZWNrYAotICAgICAgKiBgcmVxdWlyZWRgCi0gIAotICAg
IFdoZW4gc2V0IHRvIGEgcXVvdGVkIHN0cmluZywgdGhlc2UgdmFsdWUgd2lsbCBiZSBkaXJlY3Rs
eSBhcHBsaWVkIHRvIHRoZSBIVE1MCi0gICAgZWxlbWVudC4gV2hlbiBsZWZ0IHVucXVvdGVkLCB0
aGVzZSB2YWx1ZXMgd2lsbCBiZSBib3VuZCB0byBhIHByb3BlcnR5IG9uIHRoZQotICAgIHRlbXBs
YXRlJ3MgY3VycmVudCByZW5kZXJpbmcgY29udGV4dCAobW9zdCB0eXBpY2FsbHkgYSBjb250cm9s
bGVyIGluc3RhbmNlKS4KLSAgCi0gICAgVW5ib3VuZDoKLSAgCi0gICAgYGBgaGFuZGxlYmFycwot
ICAgIHt7dGV4dGFyZWEgdmFsdWU9IkxvdHMgb2Ygc3RhdGljIHRleHQgdGhhdCBJU04nVCBib3Vu
ZCJ9fQotICAgIGBgYAotICAKLSAgICBXb3VsZCByZXN1bHQgaW4gdGhlIGZvbGxvd2luZyBIVE1M
OgotICAKLSAgICBgYGBodG1sCi0gICAgPHRleHRhcmVhIGNsYXNzPSJlbWJlci10ZXh0LWFyZWEi
PgotICAgICAgTG90cyBvZiBzdGF0aWMgdGV4dCB0aGF0IElTTidUIGJvdW5kCi0gICAgPC90ZXh0
YXJlYT4KLSAgICBgYGAKLSAgCi0gICAgQm91bmQ6Ci0gIAotICAgIEluIHRoZSBmb2xsb3dpbmcg
ZXhhbXBsZSwgdGhlIGB3cml0dGVuV29yZHNgIHByb3BlcnR5IG9uIGBBcHAuQXBwbGljYXRpb25D
b250cm9sbGVyYAotICAgIHdpbGwgYmUgdXBkYXRlZCBsaXZlIGFzIHRoZSB1c2VyIHR5cGVzICdM
b3RzIG9mIHRleHQgdGhhdCBJUyBib3VuZCcgaW50bwotICAgIHRoZSB0ZXh0IGFyZWEgb2YgdGhl
aXIgYnJvd3NlcidzIHdpbmRvdy4KLSAgCi0gICAgYGBgamF2YXNjcmlwdAotICAgIEFwcC5BcHBs
aWNhdGlvbkNvbnRyb2xsZXIgPSBFbWJlci5Db250cm9sbGVyLmV4dGVuZCh7Ci0gICAgICB3cml0
dGVuV29yZHM6ICJMb3RzIG9mIHRleHQgdGhhdCBJUyBib3VuZCIKLSAgICB9KTsKLSAgICBgYGAK
LSAgCi0gICAgYGBgaGFuZGxlYmFycwotICAgIHt7dGV4dGFyZWEgdmFsdWU9d3JpdHRlbldvcmRz
fX0KLSAgICBgYGAKLSAgCi0gICAgIFdvdWxkIHJlc3VsdCBpbiB0aGUgZm9sbG93aW5nIEhUTUw6
Ci0gIAotICAgIGBgYGh0bWwKLSAgICA8dGV4dGFyZWEgY2xhc3M9ImVtYmVyLXRleHQtYXJlYSI+
Ci0gICAgICBMb3RzIG9mIHRleHQgdGhhdCBJUyBib3VuZAotICAgIDwvdGV4dGFyZWE+Ci0gICAg
YGBgCi0gIAotICAgIElmIHlvdSB3YW50ZWQgYSBvbmUgd2F5IGJpbmRpbmcgYmV0d2VlbiB0aGUg
dGV4dCBhcmVhIGFuZCBhIGRpdiB0YWcKLSAgICBzb21ld2hlcmUgZWxzZSBvbiB5b3VyIHNjcmVl
biwgeW91IGNvdWxkIHVzZSBgRW1iZXIuY29tcHV0ZWQub25lV2F5YDoKLSAgCi0gICAgYGBgamF2
YXNjcmlwdAotICAgIEFwcC5BcHBsaWNhdGlvbkNvbnRyb2xsZXIgPSBFbWJlci5Db250cm9sbGVy
LmV4dGVuZCh7Ci0gICAgICB3cml0dGVuV29yZHM6ICJMb3RzIG9mIHRleHQgdGhhdCBJUyBib3Vu
ZCIsCi0gICAgICBvdXRwdXRXcml0dGVuV29yZHM6IEVtYmVyLmNvbXB1dGVkLm9uZVdheSgid3Jp
dHRlbldvcmRzIikKLSAgICB9KTsKLSAgICBgYGAKLSAgCi0gICAgYGBgaGFuZGxlYmFycwotICAg
IHt7dGV4dGFyZWEgdmFsdWU9d3JpdHRlbldvcmRzfX0KLSAgCi0gICAgPGRpdj4KLSAgICAgIHt7
b3V0cHV0V3JpdHRlbldvcmRzfX0KLSAgICA8L2Rpdj4KLSAgICBgYGAKLSAgCi0gICAgV291bGQg
cmVzdWx0IGluIHRoZSBmb2xsb3dpbmcgSFRNTDoKLSAgCi0gICAgYGBgaHRtbAotICAgIDx0ZXh0
YXJlYSBjbGFzcz0iZW1iZXItdGV4dC1hcmVhIj4KLSAgICAgIExvdHMgb2YgdGV4dCB0aGF0IElT
IGJvdW5kCi0gICAgPC90ZXh0YXJlYT4KLSAgCi0gICAgPC0tIHRoZSBmb2xsb3dpbmcgZGl2IHdp
bGwgYmUgdXBkYXRlZCBpbiByZWFsIHRpbWUgYXMgeW91IHR5cGUgLS0+Ci0gIAotICAgIDxkaXY+
Ci0gICAgICBMb3RzIG9mIHRleHQgdGhhdCBJUyBib3VuZAotICAgIDwvZGl2PgotICAgIGBgYAot
ICAKLSAgICBGaW5hbGx5LCB0aGlzIGV4YW1wbGUgcmVhbGx5IHNob3dzIHRoZSBwb3dlciBhbmQg
ZWFzZSBvZiBFbWJlciB3aGVuIHR3bwotICAgIHByb3BlcnRpZXMgYXJlIGJvdW5kIHRvIGVhY2hv
dGhlciB2aWEgYEVtYmVyLmNvbXB1dGVkLmFsaWFzYC4gVHlwZSBpbnRvCi0gICAgZWl0aGVyIHRl
eHQgYXJlYSBib3ggYW5kIHRoZXknbGwgYm90aCBzdGF5IGluIHN5bmMuIE5vdGUgdGhhdAotICAg
IGBFbWJlci5jb21wdXRlZC5hbGlhc2AgY29zdHMgbW9yZSBpbiB0ZXJtcyBvZiBwZXJmb3JtYW5j
ZSwgc28gb25seSB1c2UgaXQgd2hlbgotICAgIHlvdXIgcmVhbGx5IGJpbmRpbmcgaW4gYm90aCBk
aXJlY3Rpb25zOgotICAKLSAgICBgYGBqYXZhc2NyaXB0Ci0gICAgQXBwLkFwcGxpY2F0aW9uQ29u
dHJvbGxlciA9IEVtYmVyLkNvbnRyb2xsZXIuZXh0ZW5kKHsKLSAgICAgIHdyaXR0ZW5Xb3Jkczog
IkxvdHMgb2YgdGV4dCB0aGF0IElTIGJvdW5kIiwKLSAgICAgIHR3b1dheVdyaXR0ZW5Xb3Jkczog
RW1iZXIuY29tcHV0ZWQuYWxpYXMoIndyaXR0ZW5Xb3JkcyIpCi0gICAgfSk7Ci0gICAgYGBgCi0g
IAotICAgIGBgYGhhbmRsZWJhcnMKLSAgICB7e3RleHRhcmVhIHZhbHVlPXdyaXR0ZW5Xb3Jkc319
Ci0gICAge3t0ZXh0YXJlYSB2YWx1ZT10d29XYXlXcml0dGVuV29yZHN9fQotICAgIGBgYAotICAK
LSAgICBgYGBodG1sCi0gICAgPHRleHRhcmVhIGlkPSJlbWJlcjEiIGNsYXNzPSJlbWJlci10ZXh0
LWFyZWEiPgotICAgICAgTG90cyBvZiB0ZXh0IHRoYXQgSVMgYm91bmQKLSAgICA8L3RleHRhcmVh
PgotICAKLSAgICA8LS0gYm90aCB1cGRhdGVkIGluIHJlYWwgdGltZSAtLT4KLSAgCi0gICAgPHRl
eHRhcmVhIGlkPSJlbWJlcjIiIGNsYXNzPSJlbWJlci10ZXh0LWFyZWEiPgotICAgICAgTG90cyBv
ZiB0ZXh0IHRoYXQgSVMgYm91bmQKLSAgICA8L3RleHRhcmVhPgotICAgIGBgYAotICAKLSAgICAj
IyMgQWN0aW9ucwotICAKLSAgICBUaGUgaGVscGVyIGNhbiBzZW5kIG11bHRpcGxlIGFjdGlvbnMg
YmFzZWQgb24gdXNlciBldmVudHMuCi0gIAotICAgIFRoZSBhY3Rpb24gcHJvcGVydHkgZGVmaW5l
cyB0aGUgYWN0aW9uIHdoaWNoIGlzIHNlbmQgd2hlbgotICAgIHRoZSB1c2VyIHByZXNzZXMgdGhl
IHJldHVybiBrZXkuCi0gIAotICAgIGBgYGhhbmRsZWJhcnMKLSAgICB7e2lucHV0IGFjdGlvbj0i
c3VibWl0In19Ci0gICAgYGBgCi0gIAotICAgIFRoZSBoZWxwZXIgYWxsb3dzIHNvbWUgdXNlciBl
dmVudHMgdG8gc2VuZCBhY3Rpb25zLgotICAKLSAgKiBgZW50ZXJgCi0gICogYGluc2VydC1uZXds
aW5lYAotICAqIGBlc2NhcGUtcHJlc3NgCi0gICogYGZvY3VzLWluYAotICAqIGBmb2N1cy1vdXRg
Ci0gICogYGtleS1wcmVzc2AKLSAgCi0gICAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkZXNpcmUgYW4g
YWN0aW9uIHRvIGJlIHNlbnQgd2hlbiB0aGUgaW5wdXQgaXMgYmx1cnJlZCwKLSAgICB5b3Ugb25s
eSBuZWVkIHRvIHNldHVwIHRoZSBhY3Rpb24gbmFtZSB0byB0aGUgZXZlbnQgbmFtZSBwcm9wZXJ0
eS4KLSAgCi0gICAgYGBgaGFuZGxlYmFycwotICAgIHt7dGV4dGFyZWEgZm9jdXMtaW49ImFsZXJ0
TWVzc2FnZSJ9fQotICAgIGBgYAotICAKLSAgICBTZWUgbW9yZSBhYm91dCBbVGV4dCBTdXBwb3J0
IEFjdGlvbnNdKC9hcGkvY2xhc3Nlcy9FbWJlci5UZXh0QXJlYS5odG1sKQotICAKLSAgICAjIyMg
RXh0ZW5zaW9uCi0gIAotICAgIEludGVybmFsbHksIGB7e3RleHRhcmVhfX1gIGNyZWF0ZXMgYW4g
aW5zdGFuY2Ugb2YgYEVtYmVyLlRleHRBcmVhYCwgcGFzc2luZwotICAgIGFyZ3VtZW50cyBmcm9t
IHRoZSBoZWxwZXIgdG8gYEVtYmVyLlRleHRBcmVhYCdzIGBjcmVhdGVgIG1ldGhvZC4gWW91IGNh
bgotICAgIGV4dGVuZCB0aGUgY2FwYWJpbGl0aWVzIG9mIHRleHQgYXJlYXMgaW4geW91ciBhcHBs
aWNhdGlvbiBieSByZW9wZW5pbmcgdGhpcwotICAgIGNsYXNzLiBGb3IgZXhhbXBsZSwgaWYgeW91
IGFyZSBidWlsZGluZyBhIEJvb3RzdHJhcCBwcm9qZWN0IHdoZXJlIGBkYXRhLSpgCi0gICAgYXR0
cmlidXRlcyBhcmUgdXNlZCwgeW91IGNhbiBnbG9iYWxseSBhZGQgc3VwcG9ydCBmb3IgYSBgZGF0
YS0qYCBhdHRyaWJ1dGUKLSAgICBvbiBhbGwgYHt7dGV4dGFyZWF9fWBzJyBpbiB5b3VyIGFwcCBi
eSByZW9wZW5pbmcgYEVtYmVyLlRleHRBcmVhYCBvcgotICAgIGBFbWJlci5UZXh0U3VwcG9ydGAg
YW5kIGFkZGluZyBpdCB0byB0aGUgYGF0dHJpYnV0ZUJpbmRpbmdzYCBjb25jYXRlbmF0ZWQKLSAg
ICBwcm9wZXJ0eToKLSAgCi0gICAgYGBgamF2YXNjcmlwdAotICAgIEVtYmVyLlRleHRBcmVhLnJl
b3Blbih7Ci0gICAgICBhdHRyaWJ1dGVCaW5kaW5nczogWydkYXRhLWVycm9yJ10KLSAgICB9KTsK
LSAgICBgYGAKLSAgCi0gICAgS2VlcCBpbiBtaW5kIHdoZW4gd3JpdGluZyBgRW1iZXIuVGV4dEFy
ZWFgIHN1YmNsYXNzZXMgdGhhdCBgRW1iZXIuVGV4dEFyZWFgCi0gICAgaXRzZWxmIGV4dGVuZHMg
YEVtYmVyLkNvbXBvbmVudGAuIEV4cGVjdCBpc29sYXRlZCBjb21wb25lbnQgc2VtYW50aWNzLCBu
b3QKLSAgICBsZWdhY3kgMS54IHZpZXcgc2VtYW50aWNzIChsaWtlIGBjb250cm9sbGVyYCBiZWlu
ZyBwcmVzZW50KS4KLSAgCi0gICAgU2VlIG1vcmUgYWJvdXQgW0VtYmVyIGNvbXBvbmVudHNdKC9h
cGkvY2xhc3Nlcy9FbWJlci5Db21wb25lbnQuaHRtbCkKLSAgCi0gICAgQG1ldGhvZCB0ZXh0YXJl
YQotICAgIEBmb3IgRW1iZXIuVGVtcGxhdGVzLmhlbHBlcnMKLSAgICBAcGFyYW0ge0hhc2h9IG9w
dGlvbnMKLSAgICBAcHVibGljCi0gICovCi0gICd1c2Ugc3RyaWN0JzsKLQotICBleHBvcnRzLmRl
ZmF1bHQgPSB0ZXh0YXJlYTsKLQotICBmdW5jdGlvbiB0ZXh0YXJlYShtb3JwaCwgZW52LCBzY29w
ZSwgb3JpZ2luYWxQYXJhbXMsIGhhc2gsIHRlbXBsYXRlLCBpbnZlcnNlLCB2aXNpdG9yKSB7Ci0g
ICAgZW52Lmhvb2tzLmNvbXBvbmVudChtb3JwaCwgZW52LCBzY29wZSwgJy10ZXh0LWFyZWEnLCBv
cmlnaW5hbFBhcmFtcywgaGFzaCwgeyBkZWZhdWx0OiB0ZW1wbGF0ZSwgaW52ZXJzZTogaW52ZXJz
ZSB9LCB2aXNpdG9yKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotfSk7Ci1lbmlmZWQoJ2VtYmVy
LWh0bWxiYXJzL2tleXdvcmRzL3VuYm91bmQnLCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwvZGVi
dWcnLCAnZW1iZXItbWV0YWwvc3RyZWFtcy9zdHJlYW0nLCAnZW1iZXItbWV0YWwvc3RyZWFtcy91
dGlscyddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0YWxEZWJ1ZywgX2VtYmVyTWV0YWxT
dHJlYW1zU3RyZWFtLCBfZW1iZXJNZXRhbFN0cmVhbXNVdGlscykgewotICAvKioKLSAgQG1vZHVs
ZSBlbWJlcgotICBAc3VibW9kdWxlIGVtYmVyLXRlbXBsYXRlcwotICAqLwotCi0gICd1c2Ugc3Ry
aWN0JzsKLQotICBleHBvcnRzLmRlZmF1bHQgPSB1bmJvdW5kOwotCi0gIC8qKgotICAgIFRoZSBg
e3t1bmJvdW5kfX1gIGhlbHBlciBkaXNjb25uZWN0cyB0aGUgb25lLXdheSBiaW5kaW5nIG9mIGEg
cHJvcGVydHksCi0gICAgZXNzZW50aWFsbHkgZnJlZXppbmcgaXRzIHZhbHVlIGF0IHRoZSBtb21l
bnQgb2YgcmVuZGVyaW5nLiBGb3IgZXhhbXBsZSwKLSAgICBpbiB0aGlzIGV4YW1wbGUgdGhlIGRp
c3BsYXkgb2YgdGhlIHZhcmlhYmxlIGBuYW1lYCB3aWxsIG5vdCBjaGFuZ2UgZXZlbgotICAgIGlm
IGl0IGlzIHNldCB3aXRoIGEgbmV3IHZhbHVlOgotICAKLSAgICBgYGBoYW5kbGViYXJzCi0gICAg
e3t1bmJvdW5kIG5hbWV9fQotICAgIGBgYAotICAKLSAgICBMaWtlIGFueSBoZWxwZXIsIHRoZSBg
dW5ib3VuZGAgaGVscGVyIGNhbiBhY2NlcHQgYSBuZXN0ZWQgaGVscGVyIGV4cHJlc3Npb24uCi0g
ICAgVGhpcyBhbGxvd3MgZm9yIGN1c3RvbSBoZWxwZXJzIHRvIGJlIHJlbmRlcmVkIHVuYm91bmQ6
Ci0gIAotICAgIGBgYGhhbmRsZWJhcnMKLSAgICB7e3VuYm91bmQgKHNvbWUtY3VzdG9tLWhlbHBl
cil9fQotICAgIHt7dW5ib3VuZCAoY2FwaXRhbGl6ZSBuYW1lKX19Ci0gICAge3shIFlvdSBjYW4g
dXNlIGFueSBoZWxwZXIsIGluY2x1ZGluZyB1bmJvdW5kLCBpbiBhIG5lc3RlZCBleHByZXNzaW9u
IH19Ci0gICAge3tjYXBpdGFsaXplICh1bmJvdW5kIG5hbWUpfX0KLSAgICBgYGAKLSAgCi0gICAg
VGhlIGB1bmJvdW5kYCBoZWxwZXIgb25seSBhY2NlcHRzIGEgc2luZ2xlIGFyZ3VtZW50LCBhbmQg
aXQgcmV0dXJuIGFuCi0gICAgdW5ib3VuZCB2YWx1ZS4KLSAgCi0gICAgQG1ldGhvZCB1bmJvdW5k
Ci0gICAgQGZvciBFbWJlci5UZW1wbGF0ZXMuaGVscGVycwotICAgIEBwdWJsaWMKLSAgKi8KLQot
ICB2YXIgVm9sYXRpbGVTdHJlYW0gPSBfZW1iZXJNZXRhbFN0cmVhbXNTdHJlYW0uZGVmYXVsdC5l
eHRlbmQoewotICAgIGluaXQ6IGZ1bmN0aW9uIChzb3VyY2UpIHsKLSAgICAgIHRoaXMubGFiZWwg
PSAnKHZvbGF0aWxlICcgKyBzb3VyY2UubGFiZWwgKyAnKSc7Ci0gICAgICB0aGlzLnNvdXJjZSA9
IHNvdXJjZTsKLSAgICAgIHRoaXMuYWRkRGVwZW5kZW5jeShzb3VyY2UpOwotICAgIH0sCi0KLSAg
ICB2YWx1ZTogZnVuY3Rpb24gKCkgewotICAgICAgcmV0dXJuIF9lbWJlck1ldGFsU3RyZWFtc1V0
aWxzLnJlYWQodGhpcy5zb3VyY2UpOwotICAgIH0sCi0KLSAgICBub3RpZnk6IGZ1bmN0aW9uICgp
IHt9Ci0gIH0pOwotCi0gIGZ1bmN0aW9uIHVuYm91bmQobW9ycGgsIGVudiwgc2NvcGUsIHBhcmFt
cywgaGFzaCwgdGVtcGxhdGUsIGludmVyc2UsIHZpc2l0b3IpIHsKLSAgICBfZW1iZXJNZXRhbERl
YnVnLmFzc2VydCgndW5ib3VuZCBoZWxwZXIgY2Fubm90IGJlIGNhbGxlZCB3aXRoIG11bHRpcGxl
IHBhcmFtcyBvciBoYXNoIHBhcmFtcycsIHBhcmFtcy5sZW5ndGggPT09IDEgJiYgT2JqZWN0Lmtl
eXMoaGFzaCkubGVuZ3RoID09PSAwKTsKLSAgICBfZW1iZXJNZXRhbERlYnVnLmFzc2VydCgndW5i
b3VuZCBoZWxwZXIgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGJsb2NrJywgIXRlbXBsYXRlKTsKLQot
ICAgIGlmIChtb3JwaCA9PT0gbnVsbCkgewotICAgICAgcmV0dXJuIG5ldyBWb2xhdGlsZVN0cmVh
bShwYXJhbXNbMF0pOwotICAgIH0KLQotICAgIHZhciBzdHJlYW0gPSB1bmRlZmluZWQ7Ci0gICAg
aWYgKG1vcnBoLmxpbmtlZFJlc3VsdCkgewotICAgICAgc3RyZWFtID0gbW9ycGgubGlua2VkUmVz
dWx0OwotICAgIH0gZWxzZSB7Ci0gICAgICBzdHJlYW0gPSBuZXcgVm9sYXRpbGVTdHJlYW0ocGFy
YW1zWzBdKTsKLSAgICAgIG1vcnBoLmxpbmtlZFJlc3VsdCA9IHN0cmVhbTsKLSAgICB9Ci0gICAg
ZW52Lmhvb2tzLnJhbmdlKG1vcnBoLCBlbnYsIHNjb3BlLCBudWxsLCBzdHJlYW0sIHZpc2l0b3Ip
OwotICAgIHJldHVybiB0cnVlOwotICB9Ci19KTsKLWVuaWZlZCgnZW1iZXItaHRtbGJhcnMva2V5
d29yZHMvdmlldycsIFsnZXhwb3J0cycsICdlbWJlci12aWV3cy9zdHJlYW1zL3V0aWxzJywgJ2Vt
YmVyLXZpZXdzL3ZpZXdzL3ZpZXcnLCAnZW1iZXItaHRtbGJhcnMvbm9kZS1tYW5hZ2Vycy92aWV3
LW5vZGUtbWFuYWdlciddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyVmlld3NTdHJlYW1zVXRp
bHMsIF9lbWJlclZpZXdzVmlld3NWaWV3LCBfZW1iZXJIdG1sYmFyc05vZGVNYW5hZ2Vyc1ZpZXdO
b2RlTWFuYWdlcikgewotICAvKioKLSAgQG1vZHVsZSBlbWJlcgotICBAc3VibW9kdWxlIGVtYmVy
LXRlbXBsYXRlcwotICAqLwotCi0gICd1c2Ugc3RyaWN0JzsKLQotICAvKioKLSAgICBge3t2aWV3
fX1gIGluc2VydHMgYSBuZXcgaW5zdGFuY2Ugb2YgYW4gYEVtYmVyLlZpZXdgIGludG8gYSB0ZW1w
bGF0ZSBwYXNzaW5nIGl0cwotICAgIG9wdGlvbnMgdG8gdGhlIGBFbWJlci5WaWV3YCdzIGBjcmVh
dGVgIG1ldGhvZCBhbmQgdXNpbmcgdGhlIHN1cHBsaWVkIGJsb2NrIGFzCi0gICAgdGhlIHZpZXcn
cyBvd24gdGVtcGxhdGUuCi0gIAotICAgIEFuIGVtcHR5IGA8Ym9keT5gIGFuZCB0aGUgZm9sbG93
aW5nIHRlbXBsYXRlOgotICAKLSAgICBgYGBoYW5kbGViYXJzCi0gICAgQSBzcGFuOgotICAgIHt7
I3ZpZXcgdGFnTmFtZT0ic3BhbiJ9fQotICAgICAgaGVsbG8uCi0gICAge3svdmlld319Ci0gICAg
YGBgCi0gIAotICAgIFdpbGwgcmVzdWx0IGluIEhUTUwgc3RydWN0dXJlOgotICAKLSAgICBgYGBo
dG1sCi0gICAgPGJvZHk+Ci0gICAgICA8IS0tIE5vdGU6IHRoZSBoYW5kbGViYXJzIHRlbXBsYXRl
IHNjcmlwdAotICAgICAgICAgICBhbHNvIHJlc3VsdHMgaW4gYSByZW5kZXJlZCBFbWJlci5WaWV3
Ci0gICAgICAgICAgIHdoaWNoIGlzIHRoZSBvdXRlciA8ZGl2PiBoZXJlIC0tPgotICAKLSAgICAg
IDxkaXYgY2xhc3M9ImVtYmVyLXZpZXciPgotICAgICAgICBBIHNwYW46Ci0gICAgICAgIDxzcGFu
IGlkPSJlbWJlcjEiIGNsYXNzPSJlbWJlci12aWV3Ij4KLSAgICAgICAgICBIZWxsby4KLSAgICAg
ICAgPC9zcGFuPgotICAgICAgPC9kaXY+Ci0gICAgPC9ib2R5PgotICAgIGBgYAotICAKLSAgICAj
IyMgYHBhcmVudFZpZXdgIHNldHRpbmcKLSAgCi0gICAgVGhlIGBwYXJlbnRWaWV3YCBwcm9wZXJ0
eSBvZiB0aGUgbmV3IGBFbWJlci5WaWV3YCBpbnN0YW5jZSBjcmVhdGVkIHRocm91Z2gKLSAgICBg
e3t2aWV3fX1gIHdpbGwgYmUgc2V0IHRvIHRoZSBgRW1iZXIuVmlld2AgaW5zdGFuY2Ugb2YgdGhl
IHRlbXBsYXRlIHdoZXJlCi0gICAgYHt7dmlld319YCB3YXMgY2FsbGVkLgotICAKLSAgICBgYGBq
YXZhc2NyaXB0Ci0gICAgYVZpZXcgPSBFbWJlci5WaWV3LmNyZWF0ZSh7Ci0gICAgICB0ZW1wbGF0
ZTogRW1iZXIuSGFuZGxlYmFycy5jb21waWxlKCJ7eyN2aWV3fX0gbXkgcGFyZW50OiB7e3BhcmVu
dFZpZXcuZWxlbWVudElkfX0ge3svdmlld319IikKLSAgICB9KTsKLSAgCi0gICAgYVZpZXcuYXBw
ZW5kVG8oJ2JvZHknKTsKLSAgICBgYGAKLSAgCi0gICAgV2lsbCByZXN1bHQgaW4gSFRNTCBzdHJ1
Y3R1cmU6Ci0gIAotICAgIGBgYGh0bWwKLSAgICA8ZGl2IGlkPSJlbWJlcjEiIGNsYXNzPSJlbWJl
ci12aWV3Ij4KLSAgICAgIDxkaXYgaWQ9ImVtYmVyMiIgY2xhc3M9ImVtYmVyLXZpZXciPgotICAg
ICAgICBteSBwYXJlbnQ6IGVtYmVyMQotICAgICAgPC9kaXY+Ci0gICAgPC9kaXY+Ci0gICAgYGBg
Ci0gIAotICAgICMjIyBTZXR0aW5nIENTUyBpZCBhbmQgY2xhc3MgYXR0cmlidXRlcwotICAKLSAg
ICBUaGUgSFRNTCBgaWRgIGF0dHJpYnV0ZSBjYW4gYmUgc2V0IG9uIHRoZSBge3t2aWV3fX1gJ3Mg
cmVzdWx0aW5nIGVsZW1lbnQgd2l0aAotICAgIHRoZSBgaWRgIG9wdGlvbi4gVGhpcyBvcHRpb24g
d2lsbCBfbm90XyBiZSBwYXNzZWQgdG8gYEVtYmVyLlZpZXcuY3JlYXRlYC4KLSAgCi0gICAgYGBg
aGFuZGxlYmFycwotICAgIHt7I3ZpZXcgdGFnTmFtZT0ic3BhbiIgaWQ9ImEtY3VzdG9tLWlkIn19
Ci0gICAgICBoZWxsby4KLSAgICB7ey92aWV3fX0KLSAgICBgYGAKLSAgCi0gICAgUmVzdWx0cyBp
biB0aGUgZm9sbG93aW5nIEhUTUwgc3RydWN0dXJlOgotICAKLSAgICBgYGBodG1sCi0gICAgPGRp
diBjbGFzcz0iZW1iZXItdmlldyI+Ci0gICAgICA8c3BhbiBpZD0iYS1jdXN0b20taWQiIGNsYXNz
PSJlbWJlci12aWV3Ij4KLSAgICAgICAgaGVsbG8uCi0gICAgICA8L3NwYW4+Ci0gICAgPC9kaXY+
Ci0gICAgYGBgCi0gIAotICAgIFRoZSBIVE1MIGBjbGFzc2AgYXR0cmlidXRlIGNhbiBiZSBzZXQg
b24gdGhlIGB7e3ZpZXd9fWAncyByZXN1bHRpbmcgZWxlbWVudAotICAgIHdpdGggdGhlIGBjbGFz
c2Agb3IgYGNsYXNzTmFtZUJpbmRpbmdzYCBvcHRpb25zLiBUaGUgYGNsYXNzYCBvcHRpb24gd2ls
bAotICAgIGRpcmVjdGx5IHNldCB0aGUgQ1NTIGBjbGFzc2AgYXR0cmlidXRlIGFuZCB3aWxsIG5v
dCBiZSBwYXNzZWQgdG8KLSAgICBgRW1iZXIuVmlldy5jcmVhdGVgLiBgY2xhc3NOYW1lQmluZGlu
Z3NgIHdpbGwgYmUgcGFzc2VkIHRvIGBjcmVhdGVgIGFuZCB1c2UKLSAgICBgRW1iZXIuVmlld2An
cyBjbGFzcyBuYW1lIGJpbmRpbmcgZnVuY3Rpb25hbGl0eToKLSAgCi0gICAgYGBgaGFuZGxlYmFy
cwotICAgIHt7I3ZpZXcgdGFnTmFtZT0ic3BhbiIgY2xhc3M9ImEtY3VzdG9tLWNsYXNzIn19Ci0g
ICAgICBoZWxsby4KLSAgICB7ey92aWV3fX0KLSAgICBgYGAKLSAgCi0gICAgUmVzdWx0cyBpbiB0
aGUgZm9sbG93aW5nIEhUTUwgc3RydWN0dXJlOgotICAKLSAgICBgYGBodG1sCi0gICAgPGRpdiBj
bGFzcz0iZW1iZXItdmlldyI+Ci0gICAgICA8c3BhbiBpZD0iZW1iZXIyIiBjbGFzcz0iZW1iZXIt
dmlldyBhLWN1c3RvbS1jbGFzcyI+Ci0gICAgICAgIGhlbGxvLgotICAgICAgPC9zcGFuPgotICAg
IDwvZGl2PgotICAgIGBgYAotICAKLSAgICAjIyMgU3VwcGx5aW5nIGEgZGlmZmVyZW50IHZpZXcg
Y2xhc3MKLSAgCi0gICAgYHt7dmlld319YCBjYW4gdGFrZSBhbiBvcHRpb25hbCBmaXJzdCBhcmd1
bWVudCBiZWZvcmUgaXRzIHN1cHBsaWVkIG9wdGlvbnMgdG8KLSAgICBzcGVjaWZ5IGEgcGF0aCB0
byBhIGN1c3RvbSB2aWV3IGNsYXNzLgotICAKLSAgICBgYGBoYW5kbGViYXJzCi0gICAge3sjdmll
dyAiY3VzdG9tIn19e3shIHdpbGwgbG9vayB1cCBBcHAuQ3VzdG9tVmlldyB9fQotICAgICAgaGVs
bG8uCi0gICAge3svdmlld319Ci0gICAgYGBgCi0gIAotICAgIFRoZSBmaXJzdCBhcmd1bWVudCBj
YW4gYWxzbyBiZSBhIHJlbGF0aXZlIHBhdGggYWNjZXNzaWJsZSBmcm9tIHRoZSBjdXJyZW50Ci0g
ICAgY29udGV4dC4KLSAgCi0gICAgYGBgamF2YXNjcmlwdAotICAgIE15QXBwID0gRW1iZXIuQXBw
bGljYXRpb24uY3JlYXRlKHt9KTsKLSAgICBNeUFwcC5PdXRlclZpZXcgPSBFbWJlci5WaWV3LmV4
dGVuZCh7Ci0gICAgICBpbm5lclZpZXdDbGFzczogRW1iZXIuVmlldy5leHRlbmQoewotICAgICAg
ICBjbGFzc05hbWVzOiBbJ2EtY3VzdG9tLXZpZXctY2xhc3MtYXMtcHJvcGVydHknXQotICAgICAg
fSksCi0gICAgICB0ZW1wbGF0ZTogRW1iZXIuSGFuZGxlYmFycy5jb21waWxlKCd7eyN2aWV3IHZp
ZXcuaW5uZXJWaWV3Q2xhc3N9fSBoaSB7ey92aWV3fX0nKQotICAgIH0pOwotICAKLSAgICBNeUFw
cC5PdXRlclZpZXcuY3JlYXRlKCkuYXBwZW5kVG8oJ2JvZHknKTsKLSAgICBgYGAKLSAgCi0gICAg
V2lsbCByZXN1bHQgaW4gdGhlIGZvbGxvd2luZyBIVE1MOgotICAKLSAgICBgYGBodG1sCi0gICAg
PGRpdiBpZD0iZW1iZXIxIiBjbGFzcz0iZW1iZXItdmlldyI+Ci0gICAgICA8ZGl2IGlkPSJlbWJl
cjIiIGNsYXNzPSJlbWJlci12aWV3IGEtY3VzdG9tLXZpZXctY2xhc3MtYXMtcHJvcGVydHkiPgot
ICAgICAgICBoaQotICAgICAgPC9kaXY+Ci0gICAgPC9kaXY+Ci0gICAgYGBgCi0gIAotICAgICMj
IyBCbG9ja2xlc3MgdXNlCi0gIAotICAgIElmIHlvdSBzdXBwbHkgYSBjdXN0b20gYEVtYmVyLlZp
ZXdgIHN1YmNsYXNzIHRoYXQgc3BlY2lmaWVzIGl0cyBvd24gdGVtcGxhdGUKLSAgICBvciBwcm92
aWRlIGEgYHRlbXBsYXRlTmFtZWAgb3B0aW9uIHRvIGB7e3ZpZXd9fWAgaXQgY2FuIGJlIHVzZWQg
d2l0aG91dAotICAgIHN1cHBseWluZyBhIGJsb2NrLiBBdHRlbXB0cyB0byB1c2UgYm90aCBhIGB0
ZW1wbGF0ZU5hbWVgIG9wdGlvbiBhbmQgc3VwcGx5IGEKLSAgICBibG9jayB3aWxsIHRocm93IGFu
IGVycm9yLgotICAKLSAgICBgYGBqYXZhc2NyaXB0Ci0gICAgdmFyIEFwcCA9IEVtYmVyLkFwcGxp
Y2F0aW9uLmNyZWF0ZSgpOwotICAgIEFwcC5XaXRoVGVtcGxhdGVEZWZpbmVkVmlldyA9IEVtYmVy
LlZpZXcuZXh0ZW5kKHsKLSAgICAgIHRlbXBsYXRlTmFtZTogJ2RlZmluZWQtdGVtcGxhdGUnCi0g
ICAgfSk7Ci0gICAgYGBgCi0gIAotICAgIGBgYGhhbmRsZWJhcnMKLSAgICB7eyEgYXBwbGljYXRp
b24uaGJzIH19Ci0gICAge3t2aWV3ICd3aXRoLXRlbXBsYXRlLWRlZmluZWQnfX0KLSAgICBgYGAK
LSAgCi0gICAgYGBgaGFuZGxlYmFycwotICAgIHt7ISBkZWZpbmVkLXRlbXBsYXRlLmhicyB9fQot
ICAgIFNvbWUgY29udGVudCBmb3IgdGhlIGRlZmluZWQgdGVtcGxhdGUgdmlldy4KLSAgICBgYGAK
LSAgCi0gICAgIyMjIGB2aWV3TmFtZWAgcHJvcGVydHkKLSAgCi0gICAgWW91IGNhbiBzdXBwbHkg
YSBgdmlld05hbWVgIG9wdGlvbiB0byBge3t2aWV3fX1gLiBUaGUgYEVtYmVyLlZpZXdgIGluc3Rh
bmNlCi0gICAgd2lsbCBiZSByZWZlcmVuY2VkIGFzIGEgcHJvcGVydHkgb2YgaXRzIHBhcmVudCB2
aWV3IGJ5IHRoaXMgbmFtZS4KLSAgCi0gICAgYGBgamF2YXNjcmlwdAotICAgIGFWaWV3ID0gRW1i
ZXIuVmlldy5jcmVhdGUoewotICAgICAgdGVtcGxhdGU6IEVtYmVyLkhhbmRsZWJhcnMuY29tcGls
ZSgne3sjdmlldyB2aWV3TmFtZT0iYUNoaWxkQnlOYW1lIn19IGhpIHt7L3ZpZXd9fScpCi0gICAg
fSk7Ci0gIAotICAgIGFWaWV3LmFwcGVuZFRvKCdib2R5Jyk7Ci0gICAgYVZpZXcuZ2V0KCdhQ2hp
bGRCeU5hbWUnKSAvLyB0aGUgaW5zdGFuY2Ugb2YgRW1iZXIuVmlldyBjcmVhdGVkIGJ5IHt7dmll
d319IGhlbHBlcgotICAgIGBgYAotICAKLSAgICBAbWV0aG9kIHZpZXcKLSAgICBAZm9yIEVtYmVy
LlRlbXBsYXRlcy5oZWxwZXJzCi0gICAgQHB1YmxpYwotICAgIEBkZXByZWNhdGVkCi0gICovCi0K
LSAgZXhwb3J0cy5kZWZhdWx0ID0gewotICAgIHNldHVwU3RhdGU6IGZ1bmN0aW9uIChzdGF0ZSwg
ZW52LCBzY29wZSwgcGFyYW1zLCBoYXNoKSB7Ci0gICAgICB2YXIgcmVhZCA9IGVudi5ob29rcy5n
ZXRWYWx1ZTsKLSAgICAgIHZhciB0YXJnZXRPYmplY3QgPSByZWFkKHNjb3BlLmdldFNlbGYoKSk7
Ci0gICAgICB2YXIgdmlld0NsYXNzT3JJbnN0YW5jZSA9IHN0YXRlLnZpZXdDbGFzc09ySW5zdGFu
Y2U7Ci0gICAgICBpZiAoIXZpZXdDbGFzc09ySW5zdGFuY2UpIHsKLSAgICAgICAgdmlld0NsYXNz
T3JJbnN0YW5jZSA9IGdldFZpZXcocmVhZChwYXJhbXNbMF0pLCBlbnYub3duZXIpOwotICAgICAg
fQotCi0gICAgICAvLyBpZiBwYXJlbnRWaWV3IGV4aXN0cywgdXNlIGl0cyBjb250cm9sbGVyICh0
aGUgZGVmYXVsdAotICAgICAgLy8gYmVoYXZpb3IpLCBvdGhlcndpc2UgdXNlIGBzY29wZS5zZWxm
YCBhcyB0aGUgY29udHJvbGxlcgotICAgICAgdmFyIGNvbnRyb2xsZXIgPSBzY29wZS5oYXNMb2Nh
bCgndmlldycpID8gbnVsbCA6IHJlYWQoc2NvcGUuZ2V0U2VsZigpKTsKLQotICAgICAgcmV0dXJu
IHsKLSAgICAgICAgbWFuYWdlcjogc3RhdGUubWFuYWdlciwKLSAgICAgICAgcGFyZW50Vmlldzog
ZW52LnZpZXcsCi0gICAgICAgIGNvbnRyb2xsZXI6IGNvbnRyb2xsZXIsCi0gICAgICAgIHRhcmdl
dE9iamVjdDogdGFyZ2V0T2JqZWN0LAotICAgICAgICB2aWV3Q2xhc3NPckluc3RhbmNlOiB2aWV3
Q2xhc3NPckluc3RhbmNlCi0gICAgICB9OwotICAgIH0sCi0KLSAgICByZXJlbmRlcjogZnVuY3Rp
b24gKG1vcnBoLCBlbnYsIHNjb3BlLCBwYXJhbXMsIGhhc2gsIHRlbXBsYXRlLCBpbnZlcnNlLCB2
aXNpdG9yKSB7Ci0gICAgICAvLyBJZiB0aGUgaGFzaCBpcyBlbXB0eSwgdGhlIGNvbXBvbmVudCBj
YW5ub3QgaGF2ZSBleHRyYWN0ZWQgYSBwYXJ0Ci0gICAgICAvLyBvZiBhIG11dGFibGUgcGFyYW0g
YW5kIHVzZWQgaXQgaW4gaXRzIGxheW91dCwgYmVjYXVzZSB0aGVyZSBhcmUKLSAgICAgIC8vIG5v
IHBhcmFtcyBhdCBhbGwuCi0gICAgICBpZiAoT2JqZWN0LmtleXMoaGFzaCkubGVuZ3RoKSB7Ci0g
ICAgICAgIHJldHVybiBtb3JwaC5nZXRTdGF0ZSgpLm1hbmFnZXIucmVyZW5kZXIoZW52LCBoYXNo
LCB2aXNpdG9yLCB0cnVlKTsKLSAgICAgIH0KLSAgICB9LAotCi0gICAgcmVuZGVyOiBmdW5jdGlv
biAobm9kZSwgZW52LCBzY29wZSwgcGFyYW1zLCBoYXNoLCB0ZW1wbGF0ZSwgaW52ZXJzZSwgdmlz
aXRvcikgewotICAgICAgaWYgKGhhc2gudGFnKSB7Ci0gICAgICAgIGhhc2ggPSBzd2FwS2V5KGhh
c2gsICd0YWcnLCAndGFnTmFtZScpOwotICAgICAgfQotCi0gICAgICBpZiAoaGFzaC5jbGFzc05h
bWVCaW5kaW5ncykgewotICAgICAgICBoYXNoLmNsYXNzTmFtZUJpbmRpbmdzID0gaGFzaC5jbGFz
c05hbWVCaW5kaW5ncy5zcGxpdCgnICcpOwotICAgICAgfQotCi0gICAgICB2YXIgc3RhdGUgPSBu
b2RlLmdldFN0YXRlKCk7Ci0gICAgICB2YXIgcGFyZW50VmlldyA9IHN0YXRlLnBhcmVudFZpZXc7
Ci0KLSAgICAgIHZhciBvcHRpb25zID0gewotICAgICAgICBjb21wb25lbnQ6IHN0YXRlLnZpZXdD
bGFzc09ySW5zdGFuY2UsCi0gICAgICAgIGxheW91dDogbnVsbAotICAgICAgfTsKLQotICAgICAg
b3B0aW9ucy5jcmVhdGVPcHRpb25zID0ge307Ci0gICAgICBpZiAoc3RhdGUuY29udHJvbGxlcikg
ewotICAgICAgICAvLyBVc2UgYF9jb250cm9sbGVyYCB0byBhdm9pZCBzdG9tcGluZyBvbiBhIENQ
Ci0gICAgICAgIC8vIHRoYXQgZXhpc3RzIGluIHRoZSB0YXJnZXQgdmlldy9jb21wb25lbnQKLSAg
ICAgICAgb3B0aW9ucy5jcmVhdGVPcHRpb25zLl9jb250cm9sbGVyID0gc3RhdGUuY29udHJvbGxl
cjsKLSAgICAgIH0KLQotICAgICAgaWYgKHN0YXRlLnRhcmdldE9iamVjdCkgewotICAgICAgICAv
LyBVc2UgYF90YXJnZXRPYmplY3RgIHRvIGF2b2lkIHN0b21waW5nIG9uIGEgQ1AKLSAgICAgICAg
Ly8gdGhhdCBleGlzdHMgaW4gdGhlIHRhcmdldCB2aWV3L2NvbXBvbmVudAotICAgICAgICBvcHRp
b25zLmNyZWF0ZU9wdGlvbnMuX3RhcmdldE9iamVjdCA9IHN0YXRlLnRhcmdldE9iamVjdDsKLSAg
ICAgIH0KLQotICAgICAgaWYgKHN0YXRlLm1hbmFnZXIpIHsKLSAgICAgICAgc3RhdGUubWFuYWdl
ci5kZXN0cm95KCk7Ci0gICAgICAgIHN0YXRlLm1hbmFnZXIgPSBudWxsOwotICAgICAgfQotCi0g
ICAgICB2YXIgbm9kZU1hbmFnZXIgPSBfZW1iZXJIdG1sYmFyc05vZGVNYW5hZ2Vyc1ZpZXdOb2Rl
TWFuYWdlci5kZWZhdWx0LmNyZWF0ZShub2RlLCBlbnYsIGhhc2gsIG9wdGlvbnMsIHBhcmVudFZp
ZXcsIG51bGwsIHNjb3BlLCB0ZW1wbGF0ZSk7Ci0gICAgICBzdGF0ZS5tYW5hZ2VyID0gbm9kZU1h
bmFnZXI7Ci0KLSAgICAgIG5vZGVNYW5hZ2VyLnJlbmRlcihlbnYsIGhhc2gsIHZpc2l0b3IpOwot
ICAgIH0KLSAgfTsKLQotICBmdW5jdGlvbiBnZXRWaWV3KHZpZXdQYXRoLCBvd25lcikgewotICAg
IHZhciB2aWV3Q2xhc3NPckluc3RhbmNlOwotCi0gICAgaWYgKCF2aWV3UGF0aCkgewotICAgICAg
aWYgKG93bmVyKSB7Ci0gICAgICAgIHZpZXdDbGFzc09ySW5zdGFuY2UgPSBvd25lci5fbG9va3Vw
RmFjdG9yeSgndmlldzp0b3BsZXZlbCcpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgdmlld0Ns
YXNzT3JJbnN0YW5jZSA9IF9lbWJlclZpZXdzVmlld3NWaWV3LmRlZmF1bHQ7Ci0gICAgICB9Ci0g
ICAgfSBlbHNlIHsKLSAgICAgIHZpZXdDbGFzc09ySW5zdGFuY2UgPSBfZW1iZXJWaWV3c1N0cmVh
bXNVdGlscy5yZWFkVmlld0ZhY3Rvcnkodmlld1BhdGgsIG93bmVyKTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gdmlld0NsYXNzT3JJbnN0YW5jZTsKLSAgfQotCi0gIGZ1bmN0aW9uIHN3YXBLZXkoaGFz
aCwgb3JpZ2luYWwsIHVwZGF0ZSkgewotICAgIHZhciBuZXdIYXNoID0ge307Ci0KLSAgICBmb3Ig
KHZhciBwcm9wIGluIGhhc2gpIHsKLSAgICAgIGlmIChwcm9wID09PSBvcmlnaW5hbCkgewotICAg
ICAgICBuZXdIYXNoW3VwZGF0ZV0gPSBoYXNoW3Byb3BdOwotICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgbmV3SGFzaFtwcm9wXSA9IGhhc2hbcHJvcF07Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0
dXJuIG5ld0hhc2g7Ci0gIH0KLX0pOwotZW5pZmVkKCdlbWJlci1odG1sYmFycy9rZXl3b3Jkcy93
aXRoJywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFsL2RlYnVnJywgJ2h0bWxiYXJzLXJ1bnRpbWUn
XSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1ldGFsRGVidWcsIF9odG1sYmFyc1J1bnRpbWUp
IHsKLSAgLyoqCi0gIEBtb2R1bGUgZW1iZXIKLSAgQHN1Ym1vZHVsZSBlbWJlci10ZW1wbGF0ZXMK
LSAgKi8KLQotICAndXNlIHN0cmljdCc7Ci0KLSAgZXhwb3J0cy5kZWZhdWx0ID0gewotICAgIGlz
U3RhYmxlOiBmdW5jdGlvbiAoKSB7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9LAotCi0gICAg
aXNFbXB0eTogZnVuY3Rpb24gKHN0YXRlKSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfSwK
LQotICAgIHJlbmRlcjogZnVuY3Rpb24gKG1vcnBoLCBlbnYsIHNjb3BlLCBwYXJhbXMsIGhhc2gs
IHRlbXBsYXRlLCBpbnZlcnNlLCB2aXNpdG9yKSB7Ci0gICAgICBfZW1iZXJNZXRhbERlYnVnLmFz
c2VydCgne3sjd2l0aCBmb299fSBtdXN0IGJlIGNhbGxlZCB3aXRoIGEgc2luZ2xlIGFyZ3VtZW50
IG9yIHRoZSB1c2UgdGhlICcgKyAne3sjd2l0aCBmb28gYXMgfGJhcnx9fSBzeW50YXgnLCBwYXJh
bXMubGVuZ3RoID09PSAxKTsKLQotICAgICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ1RoZSB7
eyN3aXRofX0gaGVscGVyIG11c3QgYmUgY2FsbGVkIHdpdGggYSBibG9jaycsICEhdGVtcGxhdGUp
OwotCi0gICAgICBfaHRtbGJhcnNSdW50aW1lLmludGVybmFsLmNvbnRpbnVlQmxvY2sobW9ycGgs
IGVudiwgc2NvcGUsICd3aXRoJywgcGFyYW1zLCBoYXNoLCB0ZW1wbGF0ZSwgaW52ZXJzZSwgdmlz
aXRvcik7Ci0gICAgfSwKLQotICAgIHJlcmVuZGVyOiBmdW5jdGlvbiAobW9ycGgsIGVudiwgc2Nv
cGUsIHBhcmFtcywgaGFzaCwgdGVtcGxhdGUsIGludmVyc2UsIHZpc2l0b3IpIHsKLSAgICAgIF9o
dG1sYmFyc1J1bnRpbWUuaW50ZXJuYWwuY29udGludWVCbG9jayhtb3JwaCwgZW52LCBzY29wZSwg
J3dpdGgnLCBwYXJhbXMsIGhhc2gsIHRlbXBsYXRlLCBpbnZlcnNlLCB2aXNpdG9yKTsKLSAgICB9
Ci0gIH07Ci19KTsKLWVuaWZlZCgnZW1iZXItaHRtbGJhcnMva2V5d29yZHMveWllbGQnLCBbJ2V4
cG9ydHMnXSwgZnVuY3Rpb24gKGV4cG9ydHMpIHsKLSAgJ3VzZSBzdHJpY3QnOwotCi0gIGV4cG9y
dHMuZGVmYXVsdCA9IHlpZWxkS2V5d29yZDsKLQotICBmdW5jdGlvbiB5aWVsZEtleXdvcmQobW9y
cGgsIGVudiwgc2NvcGUsIHBhcmFtcywgaGFzaCwgdGVtcGxhdGUsIGludmVyc2UsIHZpc2l0b3Ip
IHsKLSAgICB2YXIgdG8gPSBlbnYuaG9va3MuZ2V0VmFsdWUoaGFzaC50bykgfHwgJ2RlZmF1bHQn
OwotICAgIHZhciBibG9jayA9IHNjb3BlLmdldEJsb2NrKHRvKTsKLQotICAgIGlmIChibG9jaykg
ewotICAgICAgYmxvY2suaW52b2tlKGVudiwgcGFyYW1zLCBoYXNoLnNlbGYsIG1vcnBoLCBzY29w
ZSwgdmlzaXRvcik7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLX0pOwotZW5pZmVk
KCdlbWJlci1odG1sYmFycy9tb3JwaHMvYXR0ci1tb3JwaCcsIFsnZXhwb3J0cycsICdlbWJlci1t
ZXRhbC9kZWJ1ZycsICdkb20taGVscGVyJywgJ2VtYmVyLW1ldGFsL2lzX25vbmUnXSwgZnVuY3Rp
b24gKGV4cG9ydHMsIF9lbWJlck1ldGFsRGVidWcsIF9kb21IZWxwZXIsIF9lbWJlck1ldGFsSXNf
bm9uZSkgewotICAndXNlIHN0cmljdCc7Ci0KLSAgdmFyIEhUTUxCYXJzQXR0ck1vcnBoID0gX2Rv
bUhlbHBlci5kZWZhdWx0LnByb3RvdHlwZS5BdHRyTW9ycGhDbGFzczsKLQotICB2YXIgc3R5bGVX
YXJuaW5nID0gJycgKyAnQmluZGluZyBzdHlsZSBhdHRyaWJ1dGVzIG1heSBpbnRyb2R1Y2UgY3Jv
c3Mtc2l0ZSBzY3JpcHRpbmcgdnVsbmVyYWJpbGl0aWVzOyAnICsgJ3BsZWFzZSBlbnN1cmUgdGhh
dCB2YWx1ZXMgYmVpbmcgYm91bmQgYXJlIHByb3Blcmx5IGVzY2FwZWQuIEZvciBtb3JlIGluZm9y
bWF0aW9uLCAnICsgJ2luY2x1ZGluZyBob3cgdG8gZGlzYWJsZSB0aGlzIHdhcm5pbmcsIHNlZSAn
ICsgJ2h0dHA6Ly9lbWJlcmpzLmNvbS9kZXByZWNhdGlvbnMvdjEueC8jdG9jX2JpbmRpbmctc3R5
bGUtYXR0cmlidXRlcy4nOwotCi0gIGV4cG9ydHMuc3R5bGVXYXJuaW5nID0gc3R5bGVXYXJuaW5n
OwotICB2YXIgcHJvdG8gPSBIVE1MQmFyc0F0dHJNb3JwaC5wcm90b3R5cGU7Ci0KLSAgcHJvdG8u
ZGlkSW5pdCA9IGZ1bmN0aW9uICgpIHsKLSAgICB0aGlzLnN0cmVhbVVuc3Vic2NyaWJlcnMgPSBu
dWxsOwotCi0gICAgX2VtYmVyTWV0YWxEZWJ1Zy5kZWJ1Z1NlYWwodGhpcyk7Ci0gIH07Ci0KLSAg
ZnVuY3Rpb24gZGVwcmVjYXRlRXNjYXBlZFN0eWxlKG1vcnBoLCB2YWx1ZSkgewotICAgIF9lbWJl
ck1ldGFsRGVidWcud2FybihzdHlsZVdhcm5pbmcsIChmdW5jdGlvbiAobmFtZSwgdmFsdWUsIGVz
Y2FwZWQpIHsKLSAgICAgIC8vIFNhZmVTdHJpbmcKLSAgICAgIGlmIChfZW1iZXJNZXRhbElzX25v
bmUuZGVmYXVsdCh2YWx1ZSkgfHwgdmFsdWUgJiYgdmFsdWUudG9IVE1MKSB7Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgfQotCi0gICAgICBpZiAobmFtZSAhPT0gJ3N0eWxlJykgewotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLQotICAgICAgcmV0dXJuICFlc2NhcGVkOwotICAg
IH0pKG1vcnBoLmF0dHJOYW1lLCB2YWx1ZSwgbW9ycGguZXNjYXBlZCksIHsgaWQ6ICdlbWJlci1o
dG1sYmFycy5zdHlsZS14c3Mtd2FybmluZycgfSk7Ci0gIH0KLQotICBwcm90by53aWxsU2V0Q29u
dGVudCA9IGZ1bmN0aW9uICh2YWx1ZSkgewotICAgIGRlcHJlY2F0ZUVzY2FwZWRTdHlsZSh0aGlz
LCB2YWx1ZSk7Ci0gIH07Ci0KLSAgZXhwb3J0cy5kZWZhdWx0ID0gSFRNTEJhcnNBdHRyTW9ycGg7
Ci19KTsKLWVuaWZlZCgnZW1iZXItaHRtbGJhcnMvbW9ycGhzL21vcnBoJywgWydleHBvcnRzJywg
J2RvbS1oZWxwZXInLCAnZW1iZXItbWV0YWwvZGVidWcnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9k
b21IZWxwZXIsIF9lbWJlck1ldGFsRGVidWcpIHsKLSAgJ3VzZSBzdHJpY3QnOwotCi0gIHZhciBI
VE1MQmFyc01vcnBoID0gX2RvbUhlbHBlci5kZWZhdWx0LnByb3RvdHlwZS5Nb3JwaENsYXNzOwot
ICB2YXIgZ3VpZCA9IDE7Ci0KLSAgZnVuY3Rpb24gRW1iZXJNb3JwaChET01IZWxwZXIsIGNvbnRl
eHR1YWxFbGVtZW50KSB7Ci0gICAgdGhpcy5IVE1MQmFyc01vcnBoJGNvbnN0cnVjdG9yKERPTUhl
bHBlciwgY29udGV4dHVhbEVsZW1lbnQpOwotCi0gICAgdGhpcy5lbWJlclZpZXcgPSBudWxsOwot
ICAgIHRoaXMuZW1iZXJUb0Rlc3Ryb3kgPSBudWxsOwotICAgIHRoaXMuc3RyZWFtVW5zdWJzY3Jp
YmVycyA9IG51bGw7Ci0gICAgdGhpcy5ndWlkID0gZ3VpZCsrOwotCi0gICAgLy8gQSBjb21wb25l
bnQgY2FuIGJlY29tZSBkaXJ0eSBlaXRoZXIgYmVjYXVzZSBvbmUgb2YgaXRzCi0gICAgLy8gYXR0
cmlidXRlcyBjaGFuZ2VkLCBvciBiZWNhdXNlIGl0IHdhcyByZS1yZW5kZXJlZC4gSWYgYW55IHBh
cnQKLSAgICAvLyBvZiB0aGUgY29tcG9uZW50J3MgdGVtcGxhdGUgY2hhbmdlcyB0aHJvdWdoIG9i
c2VydmF0aW9uLCBpdCBoYXMKLSAgICAvLyByZS1yZW5kZXJlZCBmcm9tIHRoZSBwZXJwc2VjdGl2
ZSBvZiB0aGUgcHJvZ3JhbW1pbmcgbW9kZWwuIFRoaXMKLSAgICAvLyBmbGFnIGlzIHNldCB0byB0
cnVlIHdoZW5ldmVyIGEgY29tcG9uZW50IGJlY29tZXMgZGlydHkgYmVjYXVzZQotICAgIC8vIG9u
ZSBvZiBpdHMgYXR0cmlidXRlcyBjaGFuZ2VkLCB3aGljaCBhbHNvIHRyaWdnZXJzIHRoZSBhdHRy
aWJ1dGUKLSAgICAvLyB1cGRhdGUgZmxhZyAoZGlkVXBkYXRlQXR0cnMpLgotICAgIHRoaXMuc2hv
dWxkUmVjZWl2ZUF0dHJzID0gZmFsc2U7Ci0KLSAgICBfZW1iZXJNZXRhbERlYnVnLmRlYnVnU2Vh
bCh0aGlzKTsKLSAgfQotCi0gIHZhciBwcm90byA9IEVtYmVyTW9ycGgucHJvdG90eXBlID0gT2Jq
ZWN0LmNyZWF0ZShIVE1MQmFyc01vcnBoLnByb3RvdHlwZSk7Ci0gIHByb3RvLkhUTUxCYXJzTW9y
cGgkY29uc3RydWN0b3IgPSBIVE1MQmFyc01vcnBoOwotICBwcm90by5IVE1MQmFyc01vcnBoJGNs
ZWFyID0gSFRNTEJhcnNNb3JwaC5wcm90b3R5cGUuY2xlYXI7Ci0KLSAgcHJvdG8uYWRkRGVzdHJ1
Y3Rpb24gPSBmdW5jdGlvbiAodG9EZXN0cm95KSB7Ci0gICAgdGhpcy5lbWJlclRvRGVzdHJveSA9
IHRoaXMuZW1iZXJUb0Rlc3Ryb3kgfHwgW107Ci0gICAgdGhpcy5lbWJlclRvRGVzdHJveS5wdXNo
KHRvRGVzdHJveSk7Ci0gIH07Ci0KLSAgcHJvdG8uY2xlYW51cCA9IGZ1bmN0aW9uICgpIHsKLSAg
ICB2YXIgdmlldyA9IHRoaXMuZW1iZXJWaWV3OwotCi0gICAgaWYgKHZpZXcpIHsKLSAgICAgIHZh
ciBwYXJlbnRWaWV3ID0gdmlldy5wYXJlbnRWaWV3OwotCi0gICAgICBpZiAocGFyZW50VmlldyAm
JiB2aWV3Lm93bmVyVmlldy5fZGVzdHJveWluZ1N1YnRyZWVGb3JWaWV3ID09PSBwYXJlbnRWaWV3
KSB7Ci0gICAgICAgIHBhcmVudFZpZXcucmVtb3ZlQ2hpbGQodmlldyk7Ci0gICAgICB9Ci0gICAg
fQotCi0gICAgdmFyIHRvRGVzdHJveSA9IHRoaXMuZW1iZXJUb0Rlc3Ryb3k7Ci0KLSAgICBpZiAo
dG9EZXN0cm95KSB7Ci0gICAgICBmb3IgKHZhciBpID0gMCwgbCA9IHRvRGVzdHJveS5sZW5ndGg7
IGkgPCBsOyBpKyspIHsKLSAgICAgICAgdG9EZXN0cm95W2ldLmRlc3Ryb3koKTsKLSAgICAgIH0K
LQotICAgICAgdGhpcy5lbWJlclRvRGVzdHJveSA9IG51bGw7Ci0gICAgfQotICB9OwotCi0gIHBy
b3RvLmRpZFJlbmRlciA9IGZ1bmN0aW9uIChlbnYsIHNjb3BlKSB7Ci0gICAgZW52LnJlbmRlcmVk
Tm9kZXMuYWRkKHRoaXMpOwotICB9OwotCi0gIGV4cG9ydHMuZGVmYXVsdCA9IEVtYmVyTW9ycGg7
Ci19KTsKLWVuaWZlZCgnZW1iZXItaHRtbGJhcnMvbm9kZS1tYW5hZ2Vycy9jb21wb25lbnQtbm9k
ZS1tYW5hZ2VyJywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFsL2RlYnVnJywgJ2VtYmVyLXZpZXdz
L3N5c3RlbS9idWlsZC1jb21wb25lbnQtdGVtcGxhdGUnLCAnZW1iZXItaHRtbGJhcnMvaG9va3Mv
Z2V0LWNlbGwtb3ItdmFsdWUnLCAnZW1iZXItbWV0YWwvcHJvcGVydHlfZ2V0JywgJ2VtYmVyLW1l
dGFsL3Byb3BlcnR5X3NldCcsICdlbWJlci12aWV3cy9jb21wYXQvYXR0cnMtcHJveHknLCAnZW1i
ZXItaHRtbGJhcnMvc3lzdGVtL2luc3RydW1lbnRhdGlvbi1zdXBwb3J0JywgJ2VtYmVyLXZpZXdz
L2NvbXBvbmVudHMvY29tcG9uZW50JywgJ2VtYmVyLWh0bWxiYXJzL2dsaW1tZXItY29tcG9uZW50
JywgJ2VtYmVyLWh0bWxiYXJzL3V0aWxzL2V4dHJhY3QtcG9zaXRpb25hbC1wYXJhbXMnLCAnZW1i
ZXItbWV0YWwvc3ltYm9sJywgJ2NvbnRhaW5lci9vd25lcicsICdlbWJlci1odG1sYmFycy9ob29r
cy9nZXQtdmFsdWUnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1ldGFsRGVidWcsIF9lbWJl
clZpZXdzU3lzdGVtQnVpbGRDb21wb25lbnRUZW1wbGF0ZSwgX2VtYmVySHRtbGJhcnNIb29rc0dl
dENlbGxPclZhbHVlLCBfZW1iZXJNZXRhbFByb3BlcnR5X2dldCwgX2VtYmVyTWV0YWxQcm9wZXJ0
eV9zZXQsIF9lbWJlclZpZXdzQ29tcGF0QXR0cnNQcm94eSwgX2VtYmVySHRtbGJhcnNTeXN0ZW1J
bnN0cnVtZW50YXRpb25TdXBwb3J0LCBfZW1iZXJWaWV3c0NvbXBvbmVudHNDb21wb25lbnQsIF9l
bWJlckh0bWxiYXJzR2xpbW1lckNvbXBvbmVudCwgX2VtYmVySHRtbGJhcnNVdGlsc0V4dHJhY3RQ
b3NpdGlvbmFsUGFyYW1zLCBfZW1iZXJNZXRhbFN5bWJvbCwgX2NvbnRhaW5lck93bmVyLCBfZW1i
ZXJIdG1sYmFyc0hvb2tzR2V0VmFsdWUpIHsKLSAgJ3VzZSBzdHJpY3QnOwotCi0gIGV4cG9ydHMu
Y3JlYXRlQ29tcG9uZW50ID0gY3JlYXRlQ29tcG9uZW50OwotICBleHBvcnRzLnRha2VMZWdhY3lT
bmFwc2hvdCA9IHRha2VMZWdhY3lTbmFwc2hvdDsKLQotICAvLyBUaGVzZSBzeW1ib2xzIHdpbGwg
YmUgdXNlZCB0byBsaW1pdCBsaW5rLXRvJ3MgcHVibGljIEFQSSBzdXJmYWNlIGFyZWEuCi0gIHZh
ciBIQVNfQkxPQ0sgPSBfZW1iZXJNZXRhbFN5bWJvbC5kZWZhdWx0KCdIQVNfQkxPQ0snKTsKLQot
ICBleHBvcnRzLkhBU19CTE9DSyA9IEhBU19CTE9DSzsKLSAgLy8gSW4gdGhlb3J5IHRoaXMgc2hv
dWxkIGNvbWUgdGhyb3VnaCB0aGUgZW52LCBidXQgaXQgc2hvdWxkCi0gIC8vIGJlIHNhZmUgdG8g
aW1wb3J0IHRoaXMgdW50aWwgd2UgbWFrZSB0aGUgaG9vayBzeXN0ZW0gcHVibGljCi0gIC8vIGFu
ZCBpdCBnZXRzIGFjdGl2ZWx5IHVzZWQgaW4gYWRkb25zIG9yIG90aGVyIGRvd25zdHJlYW0KLSAg
Ly8gbGlicmFyaWVzLgotCi0gIGZ1bmN0aW9uIENvbXBvbmVudE5vZGVNYW5hZ2VyKGNvbXBvbmVu
dCwgaXNBbmdsZUJyYWNrZXQsIHNjb3BlLCByZW5kZXJOb2RlLCBhdHRycywgYmxvY2ssIGV4cGVj
dEVsZW1lbnQpIHsKLSAgICB0aGlzLmNvbXBvbmVudCA9IGNvbXBvbmVudDsKLSAgICB0aGlzLmlz
QW5nbGVCcmFja2V0ID0gaXNBbmdsZUJyYWNrZXQ7Ci0gICAgdGhpcy5zY29wZSA9IHNjb3BlOwot
ICAgIHRoaXMucmVuZGVyTm9kZSA9IHJlbmRlck5vZGU7Ci0gICAgdGhpcy5hdHRycyA9IGF0dHJz
OwotICAgIHRoaXMuYmxvY2sgPSBibG9jazsKLSAgICB0aGlzLmV4cGVjdEVsZW1lbnQgPSBleHBl
Y3RFbGVtZW50OwotICB9Ci0KLSAgZXhwb3J0cy5kZWZhdWx0ID0gQ29tcG9uZW50Tm9kZU1hbmFn
ZXI7Ci0KLSAgQ29tcG9uZW50Tm9kZU1hbmFnZXIuY3JlYXRlID0gZnVuY3Rpb24gQ29tcG9uZW50
Tm9kZU1hbmFnZXJfY3JlYXRlKHJlbmRlck5vZGUsIGVudiwgb3B0aW9ucykgewotICAgIHZhciBf
Y3JlYXRlT3B0aW9uczsKLQotICAgIHZhciB0YWdOYW1lID0gb3B0aW9ucy50YWdOYW1lOwotICAg
IHZhciBwYXJhbXMgPSBvcHRpb25zLnBhcmFtczsKLSAgICB2YXIgX29wdGlvbnMkYXR0cnMgPSBv
cHRpb25zLmF0dHJzOwotICAgIHZhciBhdHRycyA9IF9vcHRpb25zJGF0dHJzID09PSB1bmRlZmlu
ZWQgPyB7fSA6IF9vcHRpb25zJGF0dHJzOwotICAgIHZhciBwYXJlbnRWaWV3ID0gb3B0aW9ucy5w
YXJlbnRWaWV3OwotICAgIHZhciBwYXJlbnRTY29wZSA9IG9wdGlvbnMucGFyZW50U2NvcGU7Ci0g
ICAgdmFyIGlzQW5nbGVCcmFja2V0ID0gb3B0aW9ucy5pc0FuZ2xlQnJhY2tldDsKLSAgICB2YXIg
Y29tcG9uZW50ID0gb3B0aW9ucy5jb21wb25lbnQ7Ci0gICAgdmFyIGxheW91dCA9IG9wdGlvbnMu
bGF5b3V0OwotICAgIHZhciB0ZW1wbGF0ZXMgPSBvcHRpb25zLnRlbXBsYXRlczsKLQotICAgIGNv
bXBvbmVudCA9IGNvbXBvbmVudCB8fCAoaXNBbmdsZUJyYWNrZXQgPyBfZW1iZXJIdG1sYmFyc0ds
aW1tZXJDb21wb25lbnQuZGVmYXVsdCA6IF9lbWJlclZpZXdzQ29tcG9uZW50c0NvbXBvbmVudC5k
ZWZhdWx0KTsKLQotICAgIHZhciBjcmVhdGVPcHRpb25zID0gKF9jcmVhdGVPcHRpb25zID0gewot
ICAgICAgcGFyZW50VmlldzogcGFyZW50VmlldwotICAgIH0sIF9jcmVhdGVPcHRpb25zW0hBU19C
TE9DS10gPSAhIXRlbXBsYXRlcy5kZWZhdWx0LCBfY3JlYXRlT3B0aW9ucyk7Ci0KLSAgICBjb25m
aWd1cmVUYWdOYW1lKGF0dHJzLCB0YWdOYW1lLCBjb21wb25lbnQsIGlzQW5nbGVCcmFja2V0LCBj
cmVhdGVPcHRpb25zKTsKLQotICAgIC8vIE1hcCBwYXNzZWQgYXR0cmlidXRlcyAoZS5nLiA8bXkt
Y29tcG9uZW50IGlkPSJmb28iPikgdG8gY29tcG9uZW50Ci0gICAgLy8gcHJvcGVydGllcyAoeyBp
ZDogImZvbyIgfSkuCi0gICAgY29uZmlndXJlQ3JlYXRlT3B0aW9ucyhhdHRycywgY3JlYXRlT3B0
aW9ucyk7Ci0KLSAgICAvLyBJZiB0aGVyZSBpcyBhIGNvbnRyb2xsZXIgb24gdGhlIHNjb3BlLCBw
bHVjayBpdCBvZmYgYW5kIHNhdmUgaXQgb24gdGhlCi0gICAgLy8gY29tcG9uZW50LiBUaGlzIGFs
bG93cyB0aGUgY29tcG9uZW50IHRvIHRhcmdldCBhY3Rpb25zIHNlbnQgdmlhCi0gICAgLy8gYHNl
bmRBY3Rpb25gIGNvcnJlY3RseS4KLSAgICBpZiAocGFyZW50U2NvcGUuaGFzTG9jYWwoJ2NvbnRy
b2xsZXInKSkgewotICAgICAgY3JlYXRlT3B0aW9ucy5fY29udHJvbGxlciA9IF9lbWJlckh0bWxi
YXJzSG9va3NHZXRWYWx1ZS5kZWZhdWx0KHBhcmVudFNjb3BlLmdldExvY2FsKCdjb250cm9sbGVy
JykpOwotICAgIH0gZWxzZSB7Ci0gICAgICBjcmVhdGVPcHRpb25zLl90YXJnZXRPYmplY3QgPSBf
ZW1iZXJIdG1sYmFyc0hvb2tzR2V0VmFsdWUuZGVmYXVsdChwYXJlbnRTY29wZS5nZXRTZWxmKCkp
OwotICAgIH0KLQotICAgIF9lbWJlckh0bWxiYXJzVXRpbHNFeHRyYWN0UG9zaXRpb25hbFBhcmFt
cy5kZWZhdWx0KHJlbmRlck5vZGUsIGNvbXBvbmVudCwgcGFyYW1zLCBhdHRycyk7Ci0KLSAgICAv
LyBJbnN0YW50aWF0ZSB0aGUgY29tcG9uZW50Ci0gICAgY29tcG9uZW50ID0gY3JlYXRlQ29tcG9u
ZW50KGNvbXBvbmVudCwgaXNBbmdsZUJyYWNrZXQsIGNyZWF0ZU9wdGlvbnMsIHJlbmRlck5vZGUs
IGVudiwgYXR0cnMpOwotCi0gICAgLy8gSWYgdGhlIGNvbXBvbmVudCBzcGVjaWZpZXMgaXRzIGxh
eW91dCB2aWEgdGhlIGBsYXlvdXRgIHByb3BlcnR5Ci0gICAgLy8gaW5zdGVhZCBvZiB1c2luZyB0
aGUgdGVtcGxhdGUgbG9va2VkIHVwIGluIHRoZSBjb250YWluZXIsIGdldCBpdAotICAgIC8vIG5v
dyB0aGF0IHdlIGhhdmUgdGhlIGNvbXBvbmVudCBpbnN0YW5jZS4KLSAgICBpZiAoIWxheW91dCkg
ewotICAgICAgbGF5b3V0ID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KGNvbXBvbmVudCwg
J2xheW91dCcpOwotICAgIH0KLQotICAgIF9lbWJlck1ldGFsRGVidWcucnVuSW5EZWJ1ZyhmdW5j
dGlvbiAoKSB7Ci0gICAgICBpZiAoaXNBbmdsZUJyYWNrZXQpIHsKLSAgICAgICAgX2VtYmVyTWV0
YWxEZWJ1Zy5hc3NlcnQoJ1lvdSBjYW5ub3QgaW52b2tlIHRoZSBcJycgKyB0YWdOYW1lICsgJ1wn
IGNvbXBvbmVudCB3aXRoIGFuZ2xlIGJyYWNrZXRzLCBiZWNhdXNlIGl0XCdzIGEgc3ViY2xhc3Mg
b2YgQ29tcG9uZW50LiBQbGVhc2UgdXBncmFkZSB0byBHbGltbWVyQ29tcG9uZW50LiBBbHRlcm5h
dGl2ZWx5LCB5b3UgY2FuIGludm9rZSBhcyBcJ3t7JyArIHRhZ05hbWUgKyAnfX1cJy4nLCBjb21w
b25lbnQuaXNHbGltbWVyQ29tcG9uZW50KTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIF9lbWJl
ck1ldGFsRGVidWcuYXNzZXJ0KCdZb3UgY2Fubm90IGludm9rZSB0aGUgXCcnICsgdGFnTmFtZSAr
ICdcJyBjb21wb25lbnQgd2l0aCBjdXJseSBicmFjZXMsIGJlY2F1c2UgaXRcJ3MgYSBzdWJjbGFz
cyBvZiBHbGltbWVyQ29tcG9uZW50LiBQbGVhc2UgaW52b2tlIGl0IGFzIFwnPCcgKyB0YWdOYW1l
ICsgJz5cJyBpbnN0ZWFkLicsICFjb21wb25lbnQuaXNHbGltbWVyQ29tcG9uZW50KTsKLSAgICAg
IH0KLQotICAgICAgaWYgKCFsYXlvdXQpIHsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotCi0g
ICAgICB2YXIgZnJhZ21lbnRSZWFzb24gPSBsYXlvdXQubWV0YS5mcmFnbWVudFJlYXNvbjsKLSAg
ICAgIGlmIChpc0FuZ2xlQnJhY2tldCAmJiBmcmFnbWVudFJlYXNvbikgewotICAgICAgICBzd2l0
Y2ggKGZyYWdtZW50UmVhc29uLm5hbWUpIHsKLSAgICAgICAgICBjYXNlICdtaXNzaW5nLXdyYXBw
ZXInOgotICAgICAgICAgICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ1RoZSA8JyArIHRhZ05h
bWUgKyAnPiB0ZW1wbGF0ZSBtdXN0IGhhdmUgYSBzaW5nbGUgdG9wLWxldmVsIGVsZW1lbnQgYmVj
YXVzZSBpdCBpcyBhIEdsaW1tZXJDb21wb25lbnQuJyk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICBjYXNlICdtb2RpZmllcnMnOgotICAgICAgICAgICAgdmFyIG1vZGlmaWVycyA9IGZy
YWdtZW50UmVhc29uLm1vZGlmaWVycy5tYXAoZnVuY3Rpb24gKG0pIHsKLSAgICAgICAgICAgICAg
cmV0dXJuICd7eycgKyBtICsgJyAuLi59fSc7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgICAg
IF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0KCdZb3UgY2Fubm90IHVzZSAnICsgbW9kaWZpZXJzLmpv
aW4oJywgJykgKyAnIGluIHRoZSB0b3AtbGV2ZWwgZWxlbWVudCBvZiB0aGUgPCcgKyB0YWdOYW1l
ICsgJz4gdGVtcGxhdGUgYmVjYXVzZSBpdCBpcyBhIEdsaW1tZXJDb21wb25lbnQuJyk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlICd0cmlwbGUtY3VybGllcyc6Ci0gICAgICAg
ICAgICBfZW1iZXJNZXRhbERlYnVnLmFzc2VydCgnWW91IGNhbm5vdCB1c2UgdHJpcGxlIGN1cmxp
ZXMgKGUuZy4gc3R5bGU9e3t7IC4uLiB9fX0pIGluIHRoZSB0b3AtbGV2ZWwgZWxlbWVudCBvZiB0
aGUgPCcgKyB0YWdOYW1lICsgJz4gdGVtcGxhdGUgYmVjYXVzZSBpdCBpcyBhIEdsaW1tZXJDb21w
b25lbnQuJyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0p
OwotCi0gICAgdmFyIHJlc3VsdHMgPSBfZW1iZXJWaWV3c1N5c3RlbUJ1aWxkQ29tcG9uZW50VGVt
cGxhdGUuZGVmYXVsdCh7IGxheW91dDogbGF5b3V0LCBjb21wb25lbnQ6IGNvbXBvbmVudCwgaXNB
bmdsZUJyYWNrZXQ6IGlzQW5nbGVCcmFja2V0IH0sIGF0dHJzLCB7IHRlbXBsYXRlczogdGVtcGxh
dGVzLCBzY29wZTogcGFyZW50U2NvcGUgfSk7Ci0KLSAgICByZXR1cm4gbmV3IENvbXBvbmVudE5v
ZGVNYW5hZ2VyKGNvbXBvbmVudCwgaXNBbmdsZUJyYWNrZXQsIHBhcmVudFNjb3BlLCByZW5kZXJO
b2RlLCBhdHRycywgcmVzdWx0cy5ibG9jaywgcmVzdWx0cy5jcmVhdGVkRWxlbWVudCk7Ci0gIH07
Ci0KLSAgZnVuY3Rpb24gY29uZmlndXJlVGFnTmFtZShhdHRycywgdGFnTmFtZSwgY29tcG9uZW50
LCBpc0FuZ2xlQnJhY2tldCwgY3JlYXRlT3B0aW9ucykgewotICAgIGlmIChpc0FuZ2xlQnJhY2tl
dCkgewotICAgICAgY3JlYXRlT3B0aW9ucy50YWdOYW1lID0gdGFnTmFtZTsKLSAgICB9IGVsc2Ug
aWYgKGF0dHJzLnRhZ05hbWUpIHsKLSAgICAgIGNyZWF0ZU9wdGlvbnMudGFnTmFtZSA9IF9lbWJl
ckh0bWxiYXJzSG9va3NHZXRWYWx1ZS5kZWZhdWx0KGF0dHJzLnRhZ05hbWUpOwotICAgIH0KLSAg
fQotCi0gIGZ1bmN0aW9uIGNvbmZpZ3VyZUNyZWF0ZU9wdGlvbnMoYXR0cnMsIGNyZWF0ZU9wdGlv
bnMpIHsKLSAgICAvLyBTb21lIGF0dHJzIGFyZSBzcGVjaWFsIGFuZCBuZWVkIHRvIGJlIHNldCBh
cyBwcm9wZXJ0aWVzIG9uIHRoZSBjb21wb25lbnQKLSAgICAvLyBpbnN0YW5jZS4gTWFrZSBzdXJl
IHdlIHVzZSBnZXRWYWx1ZSgpIHRvIGdldCB0aGVtIGZyb20gYGF0dHJzYCBzaW5jZQotICAgIC8v
IHRoZXkgYXJlIHN0aWxsIHN0cmVhbXMuCi0gICAgaWYgKGF0dHJzLmlkKSB7Ci0gICAgICBjcmVh
dGVPcHRpb25zLmVsZW1lbnRJZCA9IF9lbWJlckh0bWxiYXJzSG9va3NHZXRWYWx1ZS5kZWZhdWx0
KGF0dHJzLmlkKTsKLSAgICB9Ci0gICAgaWYgKGF0dHJzLl9kZWZhdWx0VGFnTmFtZSkgewotICAg
ICAgY3JlYXRlT3B0aW9ucy5fZGVmYXVsdFRhZ05hbWUgPSBfZW1iZXJIdG1sYmFyc0hvb2tzR2V0
VmFsdWUuZGVmYXVsdChhdHRycy5fZGVmYXVsdFRhZ05hbWUpOwotICAgIH0KLSAgICBpZiAoYXR0
cnMudmlld05hbWUpIHsKLSAgICAgIGNyZWF0ZU9wdGlvbnMudmlld05hbWUgPSBfZW1iZXJIdG1s
YmFyc0hvb2tzR2V0VmFsdWUuZGVmYXVsdChhdHRycy52aWV3TmFtZSk7Ci0gICAgfQotICB9Ci0K
LSAgQ29tcG9uZW50Tm9kZU1hbmFnZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIENvbXBv
bmVudE5vZGVNYW5hZ2VyX3JlbmRlcihfZW52LCB2aXNpdG9yKSB7Ci0gICAgdmFyIGNvbXBvbmVu
dCA9IHRoaXMuY29tcG9uZW50OwotCi0gICAgcmV0dXJuIF9lbWJlckh0bWxiYXJzU3lzdGVtSW5z
dHJ1bWVudGF0aW9uU3VwcG9ydC5pbnN0cnVtZW50KGNvbXBvbmVudCwgZnVuY3Rpb24gQ29tcG9u
ZW50Tm9kZU1hbmFnZXJfcmVuZGVyX2luc3RydW1lbnQoKSB7Ci0gICAgICB2YXIgbWV0YSA9IHRo
aXMuYmxvY2sgJiYgdGhpcy5ibG9jay50ZW1wbGF0ZS5tZXRhOwotICAgICAgdmFyIGVudiA9IF9l
bnYuY2hpbGRXaXRoVmlldyhjb21wb25lbnQsIG1ldGEpOwotCi0gICAgICBlbnYucmVuZGVyZXIu
Y29tcG9uZW50V2lsbFJlbmRlcihjb21wb25lbnQpOwotICAgICAgZW52LnJlbmRlcmVkVmlld3Mu
cHVzaChjb21wb25lbnQuZWxlbWVudElkKTsKLQotICAgICAgaWYgKHRoaXMuYmxvY2spIHsKLSAg
ICAgICAgdGhpcy5ibG9jay5pbnZva2UoZW52LCBbXSwgdW5kZWZpbmVkLCB0aGlzLnJlbmRlck5v
ZGUsIHRoaXMuc2NvcGUsIHZpc2l0b3IpOwotICAgICAgfQotCi0gICAgICB2YXIgZWxlbWVudCA9
IHVuZGVmaW5lZDsKLSAgICAgIGlmICh0aGlzLmV4cGVjdEVsZW1lbnQgfHwgY29tcG9uZW50Lmlz
R2xpbW1lckNvbXBvbmVudCkgewotICAgICAgICAvLyBUaGlzIGNvZGUgYXNzdW1lcyB0aGF0IEds
aW1tZXIgY29tcG9uZW50cyBhcmUgbmV2ZXIgZnJhZ21lbnRzLiBXaGVuCi0gICAgICAgIC8vIEds
aW1tZXIgY29tcG9uZW50cyBnYWluIGZyYWdtZW50IHBvd2Vycywgd2Ugd2lsbCBuZWVkIHRvIGNv
bW11bmljYXRlCi0gICAgICAgIC8vIHdoZXRoZXIgdGhlIGxheW91dCBwcm9kdWNlZCBhIHNpbmds
ZSB0b3AtbGV2ZWwgbm9kZSBvciBmcmFnbWVudAotICAgICAgICAvLyBzb21laG93IChlaXRoZXIg
dmlhIHN0YXRpYyBpbmZvcm1hdGlvbiBvbiB0aGUgdGVtcGxhdGUvY29tcG9uZW50LCBvcgotICAg
ICAgICAvLyBkeW5hbWljYWxseSBhcyB0aGUgbGF5b3V0IGlzIGJlaW5nIHJlbmRlcmVkKS4KLSAg
ICAgICAgZWxlbWVudCA9IHRoaXMucmVuZGVyTm9kZS5maXJzdE5vZGU7Ci0KLSAgICAgICAgLy8g
R2xpbW1lciBjb21wb25lbnRzIG1heSBoYXZlIHdoaXRlc3BhY2Ugb3IgYm91bmRhcnkgbm9kZXMg
YXJvdW5kIHRoZQotICAgICAgICAvLyB0b3AtbGV2ZWwgZWxlbWVudC4KLSAgICAgICAgaWYgKGVs
ZW1lbnQgJiYgZWxlbWVudC5ub2RlVHlwZSAhPT0gMSkgewotICAgICAgICAgIGVsZW1lbnQgPSBu
ZXh0RWxlbWVudFNpYmxpbmcoZWxlbWVudCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAg
Ly8gSW4gZW52aXJvbm1lbnRzIGxpa2UgRmFzdEJvb3QsIGRpc2FibGUgYW55IGhvb2tzIHRoYXQg
d291bGQgY2F1c2UgdGhlIGNvbXBvbmVudAotICAgICAgLy8gdG8gYWNjZXNzIHRoZSBET00gZGly
ZWN0bHkuCi0gICAgICBpZiAoZW52LmRlc3RpbmVkRm9yRE9NKSB7Ci0gICAgICAgIGVudi5yZW5k
ZXJlci5kaWRDcmVhdGVFbGVtZW50KGNvbXBvbmVudCwgZWxlbWVudCk7Ci0gICAgICAgIGVudi5y
ZW5kZXJlci53aWxsSW5zZXJ0RWxlbWVudChjb21wb25lbnQsIGVsZW1lbnQpOwotCi0gICAgICAg
IGVudi5saWZlY3ljbGVIb29rcy5wdXNoKHsgdHlwZTogJ2RpZEluc2VydEVsZW1lbnQnLCB2aWV3
OiBjb21wb25lbnQgfSk7Ci0gICAgICB9Ci0gICAgfSwgdGhpcyk7Ci0gIH07Ci0KLSAgZnVuY3Rp
b24gbmV4dEVsZW1lbnRTaWJsaW5nKG5vZGUpIHsKLSAgICB2YXIgY3VycmVudCA9IG5vZGU7Ci0K
LSAgICB3aGlsZSAoY3VycmVudCkgewotICAgICAgaWYgKGN1cnJlbnQubm9kZVR5cGUgPT09IDEp
IHsKLSAgICAgICAgcmV0dXJuIGN1cnJlbnQ7Ci0gICAgICB9Ci0gICAgICBjdXJyZW50ID0gbm9k
ZS5uZXh0U2libGluZzsKLSAgICB9Ci0gIH0KLQotICBDb21wb25lbnROb2RlTWFuYWdlci5wcm90
b3R5cGUucmVyZW5kZXIgPSBmdW5jdGlvbiBDb21wb25lbnROb2RlTWFuYWdlcl9yZXJlbmRlcihf
ZW52LCBhdHRycywgdmlzaXRvcikgewotICAgIHZhciBjb21wb25lbnQgPSB0aGlzLmNvbXBvbmVu
dDsKLQotICAgIHJldHVybiBfZW1iZXJIdG1sYmFyc1N5c3RlbUluc3RydW1lbnRhdGlvblN1cHBv
cnQuaW5zdHJ1bWVudChjb21wb25lbnQsIGZ1bmN0aW9uIENvbXBvbmVudE5vZGVNYW5hZ2VyX3Jl
cmVuZGVyX2luc3RydW1lbnQoKSB7Ci0gICAgICB2YXIgZW52ID0gX2Vudi5jaGlsZFdpdGhWaWV3
KGNvbXBvbmVudCk7Ci0KLSAgICAgIHZhciBzbmFwc2hvdCA9IHRha2VTbmFwc2hvdChhdHRycyk7
Ci0KLSAgICAgIGlmIChjb21wb25lbnQuX3JlbmRlck5vZGUuc2hvdWxkUmVjZWl2ZUF0dHJzKSB7
Ci0gICAgICAgIGlmIChjb21wb25lbnQuX3Byb3BhZ2F0ZUF0dHJzVG9UaGlzKSB7Ci0gICAgICAg
ICAgY29tcG9uZW50Ll9wcm9wYWdhdGVBdHRyc1RvVGhpcyh0YWtlTGVnYWN5U25hcHNob3QoYXR0
cnMpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGVudi5yZW5kZXJlci5jb21wb25lbnRVcGRhdGVB
dHRycyhjb21wb25lbnQsIHNuYXBzaG90KTsKLSAgICAgICAgY29tcG9uZW50Ll9yZW5kZXJOb2Rl
LnNob3VsZFJlY2VpdmVBdHRycyA9IGZhbHNlOwotICAgICAgfQotCi0gICAgICAvLyBOb3RpZnkg
Y29tcG9uZW50IHRoYXQgaXQgaGFzIGJlY29tZSBkaXJ0eSBhbmQgaXMgYWJvdXQgdG8gY2hhbmdl
LgotICAgICAgZW52LnJlbmRlcmVyLmNvbXBvbmVudFdpbGxVcGRhdGUoY29tcG9uZW50LCBzbmFw
c2hvdCk7Ci0gICAgICBlbnYucmVuZGVyZXIuY29tcG9uZW50V2lsbFJlbmRlcihjb21wb25lbnQp
OwotCi0gICAgICBlbnYucmVuZGVyZWRWaWV3cy5wdXNoKGNvbXBvbmVudC5lbGVtZW50SWQpOwot
Ci0gICAgICBpZiAodGhpcy5ibG9jaykgewotICAgICAgICB0aGlzLmJsb2NrLmludm9rZShlbnYs
IFtdLCB1bmRlZmluZWQsIHRoaXMucmVuZGVyTm9kZSwgdGhpcy5zY29wZSwgdmlzaXRvcik7Ci0g
ICAgICB9Ci0KLSAgICAgIGVudi5saWZlY3ljbGVIb29rcy5wdXNoKHsgdHlwZTogJ2RpZFVwZGF0
ZScsIHZpZXc6IGNvbXBvbmVudCB9KTsKLQotICAgICAgcmV0dXJuIGVudjsKLSAgICB9LCB0aGlz
KTsKLSAgfTsKLQotICBDb21wb25lbnROb2RlTWFuYWdlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1
bmN0aW9uIENvbXBvbmVudE5vZGVNYW5hZ2VyX2Rlc3Ryb3koKSB7Ci0gICAgdmFyIGNvbXBvbmVu
dCA9IHRoaXMuY29tcG9uZW50OwotCi0gICAgLy8gQ2xlYXIgY29tcG9uZW50J3MgcmVuZGVyIG5v
ZGUuIE5vcm1hbGx5IHRoaXMgZ2V0cyBjbGVhcmVkCi0gICAgLy8gZHVyaW5nIHZpZXcgZGVzdHJ1
Y3Rpb24sIGJ1dCBpbiB0aGlzIGNhc2Ugd2UncmUgcmUtYXNzaWduaW5nIHRoZQotICAgIC8vIG5v
ZGUgdG8gYSBkaWZmZXJlbnQgdmlldyBhbmQgaXQgd2lsbCBnZXQgY2xlYW5lZCB1cCBhdXRvbWF0
aWNhbGx5LgotICAgIGNvbXBvbmVudC5fcmVuZGVyTm9kZSA9IG51bGw7Ci0gICAgY29tcG9uZW50
LmRlc3Ryb3koKTsKLSAgfTsKLQotICBmdW5jdGlvbiBjcmVhdGVDb21wb25lbnQoX2NvbXBvbmVu
dCwgaXNBbmdsZUJyYWNrZXQsIHByb3BzLCByZW5kZXJOb2RlLCBlbnYpIHsKLSAgICB2YXIgYXR0
cnMgPSBhcmd1bWVudHMubGVuZ3RoIDw9IDUgfHwgYXJndW1lbnRzWzVdID09PSB1bmRlZmluZWQg
PyB7fSA6IGFyZ3VtZW50c1s1XTsKLQotICAgIGlmICghaXNBbmdsZUJyYWNrZXQpIHsKLSAgICAg
IF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0KCdjb250cm9sbGVyPSBpcyBubyBsb25nZXIgc3VwcG9y
dGVkJywgISgnY29udHJvbGxlcicgaW4gYXR0cnMpKTsKLQotICAgICAgc25hcHNob3RBbmRVcGRh
dGVUYXJnZXQoYXR0cnMsIHByb3BzKTsKLSAgICB9IGVsc2UgewotICAgICAgcHJvcHMuYXR0cnMg
PSB0YWtlU25hcHNob3QoYXR0cnMpOwotCi0gICAgICBwcm9wcy5faXNBbmdsZUJyYWNrZXQgPSB0
cnVlOwotICAgIH0KLQotICAgIF9jb250YWluZXJPd25lci5zZXRPd25lcihwcm9wcywgZW52Lm93
bmVyKTsKLSAgICBwcm9wcy5yZW5kZXJlciA9IHByb3BzLnBhcmVudFZpZXcgPyBwcm9wcy5wYXJl
bnRWaWV3LnJlbmRlcmVyIDogZW52Lm93bmVyLmxvb2t1cCgncmVuZGVyZXI6LWRvbScpOwotICAg
IHByb3BzLl92aWV3UmVnaXN0cnkgPSBwcm9wcy5wYXJlbnRWaWV3ID8gcHJvcHMucGFyZW50Vmll
dy5fdmlld1JlZ2lzdHJ5IDogZW52Lm93bmVyLmxvb2t1cCgnLXZpZXctcmVnaXN0cnk6bWFpbicp
OwotCi0gICAgdmFyIGNvbXBvbmVudCA9IF9jb21wb25lbnQuY3JlYXRlKHByb3BzKTsKLQotICAg
IGlmIChwcm9wcy5wYXJlbnRWaWV3KSB7Ci0gICAgICBwcm9wcy5wYXJlbnRWaWV3LmFwcGVuZENo
aWxkKGNvbXBvbmVudCk7Ci0KLSAgICAgIGlmIChwcm9wcy52aWV3TmFtZSkgewotICAgICAgICBf
ZW1iZXJNZXRhbFByb3BlcnR5X3NldC5zZXQocHJvcHMucGFyZW50VmlldywgcHJvcHMudmlld05h
bWUsIGNvbXBvbmVudCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgY29tcG9uZW50Ll9yZW5kZXJO
b2RlID0gcmVuZGVyTm9kZTsKLSAgICByZW5kZXJOb2RlLmVtYmVyVmlldyA9IGNvbXBvbmVudDsK
LSAgICByZW5kZXJOb2RlLmJ1aWxkQ2hpbGRFbnYgPSBidWlsZENoaWxkRW52OwotICAgIHJldHVy
biBjb21wb25lbnQ7Ci0gIH0KLQotICBmdW5jdGlvbiB0YWtlU25hcHNob3QoYXR0cnMpIHsKLSAg
ICB2YXIgaGFzaCA9IHt9OwotCi0gICAgZm9yICh2YXIgcHJvcCBpbiBhdHRycykgewotICAgICAg
aGFzaFtwcm9wXSA9IF9lbWJlckh0bWxiYXJzSG9va3NHZXRDZWxsT3JWYWx1ZS5kZWZhdWx0KGF0
dHJzW3Byb3BdKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gaGFzaDsKLSAgfQotCi0gIGZ1bmN0aW9u
IHRha2VMZWdhY3lTbmFwc2hvdChhdHRycykgewotICAgIHZhciBoYXNoID0ge307Ci0KLSAgICBm
b3IgKHZhciBwcm9wIGluIGF0dHJzKSB7Ci0gICAgICBoYXNoW3Byb3BdID0gX2VtYmVySHRtbGJh
cnNIb29rc0dldFZhbHVlLmRlZmF1bHQoYXR0cnNbcHJvcF0pOwotICAgIH0KLQotICAgIHJldHVy
biBoYXNoOwotICB9Ci0KLSAgZnVuY3Rpb24gc25hcHNob3RBbmRVcGRhdGVUYXJnZXQocmF3QXR0
cnMsIHRhcmdldCkgewotICAgIHZhciBhdHRycyA9IHt9OwotCi0gICAgZm9yICh2YXIgcHJvcCBp
biByYXdBdHRycykgewotICAgICAgdmFyIHZhbHVlID0gX2VtYmVySHRtbGJhcnNIb29rc0dldENl
bGxPclZhbHVlLmRlZmF1bHQocmF3QXR0cnNbcHJvcF0pOwotICAgICAgYXR0cnNbcHJvcF0gPSB2
YWx1ZTsKLQotICAgICAgLy8gd2hlbiBgYXR0cnNgIGlzIGFuIGFjdHVhbCB2YWx1ZSBiZWluZyBz
ZXQgaW4gdGhlCi0gICAgICAvLyBhdHRycyBoYXNoIChge3tmb28tYmFyIGF0dHJzPSJibGFoIn19
YCkgd2UgY2Fubm90Ci0gICAgICAvLyBzZXQgYCJibGFoImAgdG8gdGhlIHJvb3Qgb2YgdGhlIHRh
cmdldCBiZWNhdXNlCi0gICAgICAvLyB0aGF0IHdvdWxkIHJlcGxhY2UgYWxsIGF0dHJzIHdpdGgg
YGF0dHJzLmF0dHJzYAotICAgICAgaWYgKHByb3AgPT09ICdhdHRycycpIHsKLSAgICAgICAgX2Vt
YmVyTWV0YWxEZWJ1Zy53YXJuKCdJbnZva2luZyBhIGNvbXBvbmVudCB3aXRoIGEgaGFzaCBhdHRy
aWJ1dGUgbmFtZWQgYGF0dHJzYCBpcyBub3Qgc3VwcG9ydGVkLiBQbGVhc2UgcmVmYWN0b3IgdXNh
Z2Ugb2YgJyArIHRhcmdldCArICcgdG8gYXZvaWQgcGFzc2luZyBgYXR0cnNgIGFzIGEgaGFzaCBw
YXJhbWV0ZXIuJywgZmFsc2UsIHsgaWQ6ICdlbWJlci1odG1sYmFycy5jb21wb25lbnQtdW5zdXBw
b3J0ZWQtYXR0cnMnIH0pOwotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLQotICAgICAgaWYg
KHZhbHVlICYmIHZhbHVlW19lbWJlclZpZXdzQ29tcGF0QXR0cnNQcm94eS5NVVRBQkxFX0NFTExd
KSB7Ci0gICAgICAgIHZhbHVlID0gdmFsdWUudmFsdWU7Ci0gICAgICB9Ci0KLSAgICAgIHRhcmdl
dFtwcm9wXSA9IHZhbHVlOwotICAgIH0KLQotICAgIHJldHVybiB0YXJnZXQuYXR0cnMgPSBhdHRy
czsKLSAgfQotCi0gIGZ1bmN0aW9uIGJ1aWxkQ2hpbGRFbnYoc3RhdGUsIGVudikgewotICAgIHJl
dHVybiBlbnYuY2hpbGRXaXRoVmlldyh0aGlzLmVtYmVyVmlldyk7Ci0gIH0KLX0pOwotZW5pZmVk
KCdlbWJlci1odG1sYmFycy9ub2RlLW1hbmFnZXJzL3ZpZXctbm9kZS1tYW5hZ2VyJywgWydleHBv
cnRzJywgJ2VtYmVyLW1ldGFsL2Fzc2lnbicsICdlbWJlci1tZXRhbC9kZWJ1ZycsICdlbWJlci12
aWV3cy9zeXN0ZW0vYnVpbGQtY29tcG9uZW50LXRlbXBsYXRlJywgJ2VtYmVyLW1ldGFsL3Byb3Bl
cnR5X2dldCcsICdlbWJlci1tZXRhbC9wcm9wZXJ0eV9zZXQnLCAnZW1iZXItbWV0YWwvc2V0X3By
b3BlcnRpZXMnLCAnZW1iZXItdmlld3Mvdmlld3MvdmlldycsICdlbWJlci12aWV3cy9jb21wYXQv
YXR0cnMtcHJveHknLCAnZW1iZXItaHRtbGJhcnMvaG9va3MvZ2V0LWNlbGwtb3ItdmFsdWUnLCAn
ZW1iZXItaHRtbGJhcnMvc3lzdGVtL2luc3RydW1lbnRhdGlvbi1zdXBwb3J0JywgJ2VtYmVyLWh0
bWxiYXJzL25vZGUtbWFuYWdlcnMvY29tcG9uZW50LW5vZGUtbWFuYWdlcicsICdjb250YWluZXIv
b3duZXInLCAnZW1iZXItaHRtbGJhcnMvaG9va3MvZ2V0LXZhbHVlJ10sIGZ1bmN0aW9uIChleHBv
cnRzLCBfZW1iZXJNZXRhbEFzc2lnbiwgX2VtYmVyTWV0YWxEZWJ1ZywgX2VtYmVyVmlld3NTeXN0
ZW1CdWlsZENvbXBvbmVudFRlbXBsYXRlLCBfZW1iZXJNZXRhbFByb3BlcnR5X2dldCwgX2VtYmVy
TWV0YWxQcm9wZXJ0eV9zZXQsIF9lbWJlck1ldGFsU2V0X3Byb3BlcnRpZXMsIF9lbWJlclZpZXdz
Vmlld3NWaWV3LCBfZW1iZXJWaWV3c0NvbXBhdEF0dHJzUHJveHksIF9lbWJlckh0bWxiYXJzSG9v
a3NHZXRDZWxsT3JWYWx1ZSwgX2VtYmVySHRtbGJhcnNTeXN0ZW1JbnN0cnVtZW50YXRpb25TdXBw
b3J0LCBfZW1iZXJIdG1sYmFyc05vZGVNYW5hZ2Vyc0NvbXBvbmVudE5vZGVNYW5hZ2VyLCBfY29u
dGFpbmVyT3duZXIsIF9lbWJlckh0bWxiYXJzSG9va3NHZXRWYWx1ZSkgewotICAndXNlIHN0cmlj
dCc7Ci0KLSAgZXhwb3J0cy5jcmVhdGVPclVwZGF0ZUNvbXBvbmVudCA9IGNyZWF0ZU9yVXBkYXRl
Q29tcG9uZW50OwotCi0gIGZ1bmN0aW9uIFZpZXdOb2RlTWFuYWdlcihjb21wb25lbnQsIHNjb3Bl
LCByZW5kZXJOb2RlLCBibG9jaywgZXhwZWN0RWxlbWVudCkgewotICAgIHRoaXMuY29tcG9uZW50
ID0gY29tcG9uZW50OwotICAgIHRoaXMuc2NvcGUgPSBzY29wZTsKLSAgICB0aGlzLnJlbmRlck5v
ZGUgPSByZW5kZXJOb2RlOwotICAgIHRoaXMuYmxvY2sgPSBibG9jazsKLSAgICB0aGlzLmV4cGVj
dEVsZW1lbnQgPSBleHBlY3RFbGVtZW50OwotICB9Ci0KLSAgZXhwb3J0cy5kZWZhdWx0ID0gVmll
d05vZGVNYW5hZ2VyOwotCi0gIFZpZXdOb2RlTWFuYWdlci5jcmVhdGUgPSBmdW5jdGlvbiBWaWV3
Tm9kZU1hbmFnZXJfY3JlYXRlKHJlbmRlck5vZGUsIGVudiwgYXR0cnMsIGZvdW5kLCBwYXJlbnRW
aWV3LCBwYXRoLCBjb250ZW50U2NvcGUsIGNvbnRlbnRUZW1wbGF0ZSkgewotICAgIF9lbWJlck1l
dGFsRGVidWcuYXNzZXJ0KCdIVE1MQmFycyBlcnJvcjogQ291bGQgbm90IGZpbmQgY29tcG9uZW50
IG5hbWVkICInICsgcGF0aCArICciIChubyBjb21wb25lbnQgb3IgdGVtcGxhdGUgd2l0aCB0aGF0
IG5hbWUgd2FzIGZvdW5kKScsICEhKGZ1bmN0aW9uICgpIHsKLSAgICAgIGlmIChwYXRoKSB7Ci0g
ICAgICAgIHJldHVybiBmb3VuZC5jb21wb25lbnQgfHwgZm91bmQubGF5b3V0OwotICAgICAgfSBl
bHNlIHsKLSAgICAgICAgcmV0dXJuIGZvdW5kLmNvbXBvbmVudCB8fCBmb3VuZC5sYXlvdXQgfHwg
Y29udGVudFRlbXBsYXRlOwotICAgICAgfQotICAgIH0pKCkpOwotCi0gICAgdmFyIGNvbXBvbmVu
dDsKLSAgICB2YXIgY29tcG9uZW50SW5mbyA9IHsgbGF5b3V0OiBmb3VuZC5sYXlvdXQgfTsKLQot
ICAgIGlmIChmb3VuZC5jb21wb25lbnQpIHsKLSAgICAgIHZhciBvcHRpb25zID0geyBwYXJlbnRW
aWV3OiBwYXJlbnRWaWV3IH07Ci0KLSAgICAgIGlmIChhdHRycyAmJiBhdHRycy5pZCkgewotICAg
ICAgICBvcHRpb25zLmVsZW1lbnRJZCA9IF9lbWJlckh0bWxiYXJzSG9va3NHZXRWYWx1ZS5kZWZh
dWx0KGF0dHJzLmlkKTsKLSAgICAgIH0KLSAgICAgIGlmIChhdHRycyAmJiBhdHRycy50YWdOYW1l
KSB7Ci0gICAgICAgIG9wdGlvbnMudGFnTmFtZSA9IF9lbWJlckh0bWxiYXJzSG9va3NHZXRWYWx1
ZS5kZWZhdWx0KGF0dHJzLnRhZ05hbWUpOwotICAgICAgfQotICAgICAgaWYgKGF0dHJzICYmIGF0
dHJzLl9kZWZhdWx0VGFnTmFtZSkgewotICAgICAgICBvcHRpb25zLl9kZWZhdWx0VGFnTmFtZSA9
IF9lbWJlckh0bWxiYXJzSG9va3NHZXRWYWx1ZS5kZWZhdWx0KGF0dHJzLl9kZWZhdWx0VGFnTmFt
ZSk7Ci0gICAgICB9Ci0gICAgICBpZiAoYXR0cnMgJiYgYXR0cnMudmlld05hbWUpIHsKLSAgICAg
ICAgb3B0aW9ucy52aWV3TmFtZSA9IF9lbWJlckh0bWxiYXJzSG9va3NHZXRWYWx1ZS5kZWZhdWx0
KGF0dHJzLnZpZXdOYW1lKTsKLSAgICAgIH0KLQotICAgICAgaWYgKGZvdW5kLmNvbXBvbmVudC5j
cmVhdGUgJiYgY29udGVudFNjb3BlKSB7Ci0gICAgICAgIHZhciBfc2VsZiA9IGNvbnRlbnRTY29w
ZS5nZXRTZWxmKCk7Ci0gICAgICAgIGlmIChfc2VsZikgewotICAgICAgICAgIG9wdGlvbnMuX2Nv
bnRleHQgPSBfZW1iZXJIdG1sYmFyc0hvb2tzR2V0VmFsdWUuZGVmYXVsdChjb250ZW50U2NvcGUu
Z2V0U2VsZigpKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBpZiAoZm91bmQuc2VsZikg
ewotICAgICAgICBvcHRpb25zLl9jb250ZXh0ID0gX2VtYmVySHRtbGJhcnNIb29rc0dldFZhbHVl
LmRlZmF1bHQoZm91bmQuc2VsZik7Ci0gICAgICB9Ci0KLSAgICAgIGNvbXBvbmVudCA9IGNvbXBv
bmVudEluZm8uY29tcG9uZW50ID0gY3JlYXRlT3JVcGRhdGVDb21wb25lbnQoZm91bmQuY29tcG9u
ZW50LCBvcHRpb25zLCBmb3VuZC5jcmVhdGVPcHRpb25zLCByZW5kZXJOb2RlLCBlbnYsIGF0dHJz
KTsKLQotICAgICAgdmFyIGxheW91dCA9IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldChjb21w
b25lbnQsICdsYXlvdXQnKTsKLSAgICAgIGlmIChsYXlvdXQpIHsKLSAgICAgICAgY29tcG9uZW50
SW5mby5sYXlvdXQgPSBsYXlvdXQ7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBjb21wb25lbnRJ
bmZvLmxheW91dCA9IGdldFRlbXBsYXRlKGNvbXBvbmVudCkgfHwgY29tcG9uZW50SW5mby5sYXlv
dXQ7Ci0gICAgICB9Ci0KLSAgICAgIHJlbmRlck5vZGUuZW1iZXJWaWV3ID0gY29tcG9uZW50Owot
ICAgIH0KLQotICAgIF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0KCdCVUc6IFZpZXdOb2RlTWFuYWdl
ci5jcmVhdGUgY2FuIHRha2UgYSBzY29wZSBvciBhIHNlbGYsIGJ1dCBub3QgYm90aCcsICEoY29u
dGVudFNjb3BlICYmIGZvdW5kLnNlbGYpKTsKLQotICAgIHZhciByZXN1bHRzID0gX2VtYmVyVmll
d3NTeXN0ZW1CdWlsZENvbXBvbmVudFRlbXBsYXRlLmRlZmF1bHQoY29tcG9uZW50SW5mbywgYXR0
cnMsIHsKLSAgICAgIHRlbXBsYXRlczogeyBkZWZhdWx0OiBjb250ZW50VGVtcGxhdGUgfSwKLSAg
ICAgIHNjb3BlOiBjb250ZW50U2NvcGUsCi0gICAgICBzZWxmOiBmb3VuZC5zZWxmCi0gICAgfSk7
Ci0KLSAgICByZXR1cm4gbmV3IFZpZXdOb2RlTWFuYWdlcihjb21wb25lbnQsIGNvbnRlbnRTY29w
ZSwgcmVuZGVyTm9kZSwgcmVzdWx0cy5ibG9jaywgcmVzdWx0cy5jcmVhdGVkRWxlbWVudCk7Ci0g
IH07Ci0KLSAgVmlld05vZGVNYW5hZ2VyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiBWaWV3
Tm9kZU1hbmFnZXJfcmVuZGVyKGVudiwgYXR0cnMsIHZpc2l0b3IpIHsKLSAgICB2YXIgY29tcG9u
ZW50ID0gdGhpcy5jb21wb25lbnQ7Ci0KLSAgICByZXR1cm4gX2VtYmVySHRtbGJhcnNTeXN0ZW1J
bnN0cnVtZW50YXRpb25TdXBwb3J0Lmluc3RydW1lbnQoY29tcG9uZW50LCBmdW5jdGlvbiBWaWV3
Tm9kZU1hbmFnZXJfcmVuZGVyX2luc3RydW1lbnQoKSB7Ci0gICAgICB2YXIgbmV3RW52ID0gZW52
OwotICAgICAgaWYgKGNvbXBvbmVudCkgewotICAgICAgICBuZXdFbnYgPSBlbnYuY2hpbGRXaXRo
Vmlldyhjb21wb25lbnQpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgdmFyIG1ldGEgPSB0aGlz
LmJsb2NrICYmIHRoaXMuYmxvY2sudGVtcGxhdGUubWV0YTsKLQotICAgICAgICBuZXdFbnYgPSBl
bnYuY2hpbGRXaXRoTWV0YShtZXRhKTsKLSAgICAgIH0KLQotICAgICAgaWYgKGNvbXBvbmVudCkg
ewotICAgICAgICBlbnYucmVuZGVyZXIud2lsbFJlbmRlcihjb21wb25lbnQpOwotICAgICAgICBl
bnYucmVuZGVyZWRWaWV3cy5wdXNoKGNvbXBvbmVudC5lbGVtZW50SWQpOwotICAgICAgfQotCi0g
ICAgICBpZiAodGhpcy5ibG9jaykgewotICAgICAgICB0aGlzLmJsb2NrLmludm9rZShuZXdFbnYs
IFtdLCB1bmRlZmluZWQsIHRoaXMucmVuZGVyTm9kZSwgdGhpcy5zY29wZSwgdmlzaXRvcik7Ci0g
ICAgICB9Ci0KLSAgICAgIGlmIChjb21wb25lbnQpIHsKLSAgICAgICAgdmFyIGVsZW1lbnQgPSB0
aGlzLmV4cGVjdEVsZW1lbnQgJiYgdGhpcy5yZW5kZXJOb2RlLmZpcnN0Tm9kZTsKLQotICAgICAg
ICAvLyBJbiBlbnZpcm9ubWVudHMgbGlrZSBGYXN0Qm9vdCwgZGlzYWJsZSBhbnkgaG9va3MgdGhh
dCB3b3VsZCBjYXVzZSB0aGUgY29tcG9uZW50Ci0gICAgICAgIC8vIHRvIGFjY2VzcyB0aGUgRE9N
IGRpcmVjdGx5LgotICAgICAgICBpZiAoZW52LmRlc3RpbmVkRm9yRE9NKSB7Ci0gICAgICAgICAg
ZW52LnJlbmRlcmVyLmRpZENyZWF0ZUVsZW1lbnQoY29tcG9uZW50LCBlbGVtZW50KTsKLSAgICAg
ICAgICBlbnYucmVuZGVyZXIud2lsbEluc2VydEVsZW1lbnQoY29tcG9uZW50LCBlbGVtZW50KTsK
LSAgICAgICAgICBlbnYubGlmZWN5Y2xlSG9va3MucHVzaCh7IHR5cGU6ICdkaWRJbnNlcnRFbGVt
ZW50JywgdmlldzogY29tcG9uZW50IH0pOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwgdGhp
cyk7Ci0gIH07Ci0KLSAgVmlld05vZGVNYW5hZ2VyLnByb3RvdHlwZS5yZXJlbmRlciA9IGZ1bmN0
aW9uIFZpZXdOb2RlTWFuYWdlcl9yZXJlbmRlcihlbnYsIGF0dHJzLCB2aXNpdG9yKSB7Ci0gICAg
dmFyIGNvbXBvbmVudCA9IHRoaXMuY29tcG9uZW50OwotCi0gICAgcmV0dXJuIF9lbWJlckh0bWxi
YXJzU3lzdGVtSW5zdHJ1bWVudGF0aW9uU3VwcG9ydC5pbnN0cnVtZW50KGNvbXBvbmVudCwgZnVu
Y3Rpb24gVmlld05vZGVNYW5hZ2VyX3JlcmVuZGVyX2luc3RydW1lbnQoKSB7Ci0gICAgICB2YXIg
bmV3RW52ID0gZW52OwotICAgICAgaWYgKGNvbXBvbmVudCkgewotICAgICAgICBuZXdFbnYgPSBl
bnYuY2hpbGRXaXRoVmlldyhjb21wb25lbnQpOwotCi0gICAgICAgIHZhciBzbmFwc2hvdCA9IHRh
a2VTbmFwc2hvdChhdHRycyk7Ci0KLSAgICAgICAgLy8gTm90aWZ5IGNvbXBvbmVudCB0aGF0IGl0
IGhhcyBiZWNvbWUgZGlydHkgYW5kIGlzIGFib3V0IHRvIGNoYW5nZS4KLSAgICAgICAgZW52LnJl
bmRlcmVyLndpbGxVcGRhdGUoY29tcG9uZW50LCBzbmFwc2hvdCk7Ci0KLSAgICAgICAgaWYgKGNv
bXBvbmVudC5fcmVuZGVyTm9kZS5zaG91bGRSZWNlaXZlQXR0cnMpIHsKLSAgICAgICAgICBpZiAo
Y29tcG9uZW50Ll9wcm9wYWdhdGVBdHRyc1RvVGhpcykgewotICAgICAgICAgICAgY29tcG9uZW50
Ll9wcm9wYWdhdGVBdHRyc1RvVGhpcyhfZW1iZXJIdG1sYmFyc05vZGVNYW5hZ2Vyc0NvbXBvbmVu
dE5vZGVNYW5hZ2VyLnRha2VMZWdhY3lTbmFwc2hvdChhdHRycykpOwotICAgICAgICAgIH0KLQot
ICAgICAgICAgIGVudi5yZW5kZXJlci5jb21wb25lbnRVcGRhdGVBdHRycyhjb21wb25lbnQsIHNu
YXBzaG90KTsKLSAgICAgICAgICBjb21wb25lbnQuX3JlbmRlck5vZGUuc2hvdWxkUmVjZWl2ZUF0
dHJzID0gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBlbnYucmVuZGVyZXIud2lsbFJlbmRl
cihjb21wb25lbnQpOwotCi0gICAgICAgIGVudi5yZW5kZXJlZFZpZXdzLnB1c2goY29tcG9uZW50
LmVsZW1lbnRJZCk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICB2YXIgbWV0YSA9IHRoaXMuYmxv
Y2sgJiYgdGhpcy5ibG9jay50ZW1wbGF0ZS5tZXRhOwotCi0gICAgICAgIG5ld0VudiA9IGVudi5j
aGlsZFdpdGhNZXRhKG1ldGEpOwotICAgICAgfQotCi0gICAgICBpZiAodGhpcy5ibG9jaykgewot
ICAgICAgICB0aGlzLmJsb2NrLmludm9rZShuZXdFbnYsIFtdLCB1bmRlZmluZWQsIHRoaXMucmVu
ZGVyTm9kZSwgdGhpcy5zY29wZSwgdmlzaXRvcik7Ci0gICAgICB9Ci0KLSAgICAgIHJldHVybiBu
ZXdFbnY7Ci0gICAgfSwgdGhpcyk7Ci0gIH07Ci0KLSAgVmlld05vZGVNYW5hZ2VyLnByb3RvdHlw
ZS5kZXN0cm95ID0gZnVuY3Rpb24gVmlld05vZGVNYW5hZ2VyX2Rlc3Ryb3koKSB7Ci0gICAgaWYg
KHRoaXMuY29tcG9uZW50KSB7Ci0gICAgICB0aGlzLmNvbXBvbmVudC5kZXN0cm95KCk7Ci0gICAg
ICB0aGlzLmNvbXBvbmVudCA9IG51bGw7Ci0gICAgfQotICB9OwotCi0gIGZ1bmN0aW9uIGdldFRl
bXBsYXRlKGNvbXBvbmVudE9yVmlldykgewotICAgIGlmICghY29tcG9uZW50T3JWaWV3LmlzQ29t
cG9uZW50KSB7Ci0gICAgICByZXR1cm4gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KGNvbXBv
bmVudE9yVmlldywgJ3RlbXBsYXRlJyk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG51bGw7Ci0gIH0K
LQotICBmdW5jdGlvbiBjcmVhdGVPclVwZGF0ZUNvbXBvbmVudChjb21wb25lbnQsIG9wdGlvbnMs
IGNyZWF0ZU9wdGlvbnMsIHJlbmRlck5vZGUsIGVudikgewotICAgIHZhciBhdHRycyA9IGFyZ3Vt
ZW50cy5sZW5ndGggPD0gNSB8fCBhcmd1bWVudHNbNV0gPT09IHVuZGVmaW5lZCA/IHt9IDogYXJn
dW1lbnRzWzVdOwotCi0gICAgdmFyIHNuYXBzaG90ID0gdGFrZVNuYXBzaG90KGF0dHJzKTsKLSAg
ICB2YXIgcHJvcHMgPSBfZW1iZXJNZXRhbEFzc2lnbi5kZWZhdWx0KHt9LCBvcHRpb25zKTsKLSAg
ICB2YXIgZGVmYXVsdENvbnRyb2xsZXIgPSBfZW1iZXJWaWV3c1ZpZXdzVmlldy5kZWZhdWx0LnBy
b3RvKCkuY29udHJvbGxlcjsKLSAgICB2YXIgaGFzU3VwcGxpZWRDb250cm9sbGVyID0gJ2NvbnRy
b2xsZXInIGluIGF0dHJzIHx8ICdjb250cm9sbGVyJyBpbiBwcm9wczsKLQotICAgIGlmICghcHJv
cHMub3duZXJWaWV3ICYmIG9wdGlvbnMucGFyZW50VmlldykgewotICAgICAgcHJvcHMub3duZXJW
aWV3ID0gb3B0aW9ucy5wYXJlbnRWaWV3Lm93bmVyVmlldzsKLSAgICB9Ci0KLSAgICBwcm9wcy5h
dHRycyA9IHNuYXBzaG90OwotICAgIGlmIChjb21wb25lbnQuY3JlYXRlKSB7Ci0gICAgICB2YXIg
cHJvdG8gPSBjb21wb25lbnQucHJvdG8oKTsKLQotICAgICAgaWYgKGNyZWF0ZU9wdGlvbnMpIHsK
LSAgICAgICAgX2VtYmVyTWV0YWxBc3NpZ24uZGVmYXVsdChwcm9wcywgY3JlYXRlT3B0aW9ucyk7
Ci0gICAgICB9Ci0KLSAgICAgIG1lcmdlQmluZGluZ3MocHJvcHMsIHNuYXBzaG90KTsKLQotICAg
ICAgdmFyIG93bmVyID0gZW52Lm93bmVyOwotCi0gICAgICBfY29udGFpbmVyT3duZXIuc2V0T3du
ZXIocHJvcHMsIG93bmVyKTsKLSAgICAgIHByb3BzLnJlbmRlcmVyID0gb3B0aW9ucy5wYXJlbnRW
aWV3ID8gb3B0aW9ucy5wYXJlbnRWaWV3LnJlbmRlcmVyIDogb3duZXIgJiYgb3duZXIubG9va3Vw
KCdyZW5kZXJlcjotZG9tJyk7Ci0gICAgICBwcm9wcy5fdmlld1JlZ2lzdHJ5ID0gb3B0aW9ucy5w
YXJlbnRWaWV3ID8gb3B0aW9ucy5wYXJlbnRWaWV3Ll92aWV3UmVnaXN0cnkgOiBvd25lciAmJiBv
d25lci5sb29rdXAoJy12aWV3LXJlZ2lzdHJ5Om1haW4nKTsKLQotICAgICAgaWYgKHByb3RvLmNv
bnRyb2xsZXIgIT09IGRlZmF1bHRDb250cm9sbGVyIHx8IGhhc1N1cHBsaWVkQ29udHJvbGxlcikg
ewotICAgICAgICBkZWxldGUgcHJvcHMuX2NvbnRleHQ7Ci0gICAgICB9Ci0KLSAgICAgIGNvbXBv
bmVudCA9IGNvbXBvbmVudC5jcmVhdGUocHJvcHMpOwotICAgIH0gZWxzZSB7Ci0gICAgICBlbnYu
cmVuZGVyZXIuY29tcG9uZW50VXBkYXRlQXR0cnMoY29tcG9uZW50LCBzbmFwc2hvdCk7Ci0gICAg
ICBfZW1iZXJNZXRhbFNldF9wcm9wZXJ0aWVzLmRlZmF1bHQoY29tcG9uZW50LCBwcm9wcyk7Ci0K
LSAgICAgIGlmIChjb21wb25lbnQuX3Byb3BhZ2F0ZUF0dHJzVG9UaGlzKSB7Ci0gICAgICAgIGNv
bXBvbmVudC5fcHJvcGFnYXRlQXR0cnNUb1RoaXMoX2VtYmVySHRtbGJhcnNOb2RlTWFuYWdlcnND
b21wb25lbnROb2RlTWFuYWdlci50YWtlTGVnYWN5U25hcHNob3QoYXR0cnMpKTsKLSAgICAgIH0K
LSAgICB9Ci0KLSAgICBpZiAob3B0aW9ucy5wYXJlbnRWaWV3KSB7Ci0gICAgICBvcHRpb25zLnBh
cmVudFZpZXcuYXBwZW5kQ2hpbGQoY29tcG9uZW50KTsKLQotICAgICAgaWYgKG9wdGlvbnMudmll
d05hbWUpIHsKLSAgICAgICAgX2VtYmVyTWV0YWxQcm9wZXJ0eV9zZXQuc2V0KG9wdGlvbnMucGFy
ZW50Vmlldywgb3B0aW9ucy52aWV3TmFtZSwgY29tcG9uZW50KTsKLSAgICAgIH0KLSAgICB9Ci0K
LSAgICBjb21wb25lbnQuX3JlbmRlck5vZGUgPSByZW5kZXJOb2RlOwotCi0gICAgcmVuZGVyTm9k
ZS5lbWJlclZpZXcgPSBjb21wb25lbnQ7Ci0gICAgcmV0dXJuIGNvbXBvbmVudDsKLSAgfQotCi0g
IGZ1bmN0aW9uIHRha2VTbmFwc2hvdChhdHRycykgewotICAgIHZhciBoYXNoID0ge307Ci0KLSAg
ICBmb3IgKHZhciBwcm9wIGluIGF0dHJzKSB7Ci0gICAgICBoYXNoW3Byb3BdID0gX2VtYmVySHRt
bGJhcnNIb29rc0dldENlbGxPclZhbHVlLmRlZmF1bHQoYXR0cnNbcHJvcF0pOwotICAgIH0KLQot
ICAgIHJldHVybiBoYXNoOwotICB9Ci0KLSAgZnVuY3Rpb24gbWVyZ2VCaW5kaW5ncyh0YXJnZXQs
IGF0dHJzKSB7Ci0gICAgZm9yICh2YXIgcHJvcCBpbiBhdHRycykgewotICAgICAgaWYgKCFhdHRy
cy5oYXNPd25Qcm9wZXJ0eShwcm9wKSkgewotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLSAg
ICAgIC8vIHdoZW4gYGF0dHJzYCBpcyBhbiBhY3R1YWwgdmFsdWUgYmVpbmcgc2V0IGluIHRoZQot
ICAgICAgLy8gYXR0cnMgaGFzaCAoYHt7Zm9vLWJhciBhdHRycz0iYmxhaCJ9fWApIHdlIGNhbm5v
dAotICAgICAgLy8gc2V0IGAiYmxhaCJgIHRvIHRoZSByb290IG9mIHRoZSB0YXJnZXQgYmVjYXVz
ZQotICAgICAgLy8gdGhhdCB3b3VsZCByZXBsYWNlIGFsbCBhdHRycyB3aXRoIGBhdHRycy5hdHRy
c2AKLSAgICAgIGlmIChwcm9wID09PSAnYXR0cnMnKSB7Ci0gICAgICAgIF9lbWJlck1ldGFsRGVi
dWcud2FybignSW52b2tpbmcgYSBjb21wb25lbnQgd2l0aCBhIGhhc2ggYXR0cmlidXRlIG5hbWVk
IGBhdHRyc2AgaXMgbm90IHN1cHBvcnRlZC4gUGxlYXNlIHJlZmFjdG9yIHVzYWdlIG9mICcgKyB0
YXJnZXQgKyAnIHRvIGF2b2lkIHBhc3NpbmcgYGF0dHJzYCBhcyBhIGhhc2ggcGFyYW1ldGVyLics
IGZhbHNlLCB7IGlkOiAnZW1iZXItaHRtbGJhcnMudmlldy11bnN1cHBvcnRlZC1hdHRycycgfSk7
Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAgfQotICAgICAgdmFyIHZhbHVlID0gYXR0cnNbcHJv
cF07Ci0KLSAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZVtfZW1iZXJWaWV3c0NvbXBhdEF0dHJzUHJv
eHkuTVVUQUJMRV9DRUxMXSkgewotICAgICAgICB0YXJnZXRbcHJvcF0gPSB2YWx1ZS52YWx1ZTsK
LSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHRhcmdldFtwcm9wXSA9IHZhbHVlOwotICAgICAgfQot
ICAgIH0KLQotICAgIHJldHVybiB0YXJnZXQ7Ci0gIH0KLX0pOwotCi0vLyBJbiB0aGVvcnkgdGhp
cyBzaG91bGQgY29tZSB0aHJvdWdoIHRoZSBlbnYsIGJ1dCBpdCBzaG91bGQKLS8vIGJlIHNhZmUg
dG8gaW1wb3J0IHRoaXMgdW50aWwgd2UgbWFrZSB0aGUgaG9vayBzeXN0ZW0gcHVibGljCi0vLyBh
bmQgaXQgZ2V0cyBhY3RpdmVseSB1c2VkIGluIGFkZG9ucyBvciBvdGhlciBkb3duc3RyZWFtCi0v
LyBsaWJyYXJpZXMuCi1lbmlmZWQoJ2VtYmVyLWh0bWxiYXJzL3N0cmVhbXMvYnVpbHQtaW4taGVs
cGVyJywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFsL3N0cmVhbXMvc3RyZWFtJywgJ2VtYmVyLWh0
bWxiYXJzL3N0cmVhbXMvdXRpbHMnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1ldGFsU3Ry
ZWFtc1N0cmVhbSwgX2VtYmVySHRtbGJhcnNTdHJlYW1zVXRpbHMpIHsKLSAgJ3VzZSBzdHJpY3Qn
OwotCi0gIHZhciBCdWlsdEluSGVscGVyU3RyZWFtID0gX2VtYmVyTWV0YWxTdHJlYW1zU3RyZWFt
LmRlZmF1bHQuZXh0ZW5kKHsKLSAgICBpbml0OiBmdW5jdGlvbiAoaGVscGVyLCBwYXJhbXMsIGhh
c2gsIHRlbXBsYXRlcywgZW52LCBzY29wZSwgbGFiZWwpIHsKLSAgICAgIHRoaXMuaGVscGVyID0g
aGVscGVyOwotICAgICAgdGhpcy5wYXJhbXMgPSBwYXJhbXM7Ci0gICAgICB0aGlzLnRlbXBsYXRl
cyA9IHRlbXBsYXRlczsKLSAgICAgIHRoaXMuZW52ID0gZW52OwotICAgICAgdGhpcy5zY29wZSA9
IHNjb3BlOwotICAgICAgdGhpcy5oYXNoID0gaGFzaDsKLSAgICAgIHRoaXMubGFiZWwgPSBsYWJl
bDsKLSAgICB9LAotCi0gICAgY29tcHV0ZTogZnVuY3Rpb24gKCkgewotICAgICAgcmV0dXJuIHRo
aXMuaGVscGVyKF9lbWJlckh0bWxiYXJzU3RyZWFtc1V0aWxzLmdldEFycmF5VmFsdWVzKHRoaXMu
cGFyYW1zKSwgX2VtYmVySHRtbGJhcnNTdHJlYW1zVXRpbHMuZ2V0SGFzaFZhbHVlcyh0aGlzLmhh
c2gpLCB0aGlzLnRlbXBsYXRlcywgdGhpcy5lbnYsIHRoaXMuc2NvcGUpOwotICAgIH0KLSAgfSk7
Ci0KLSAgZXhwb3J0cy5kZWZhdWx0ID0gQnVpbHRJbkhlbHBlclN0cmVhbTsKLX0pOwotZW5pZmVk
KCdlbWJlci1odG1sYmFycy9zdHJlYW1zL2hlbHBlci1mYWN0b3J5JywgWydleHBvcnRzJywgJ2Vt
YmVyLW1ldGFsL3N0cmVhbXMvc3RyZWFtJywgJ2VtYmVyLWh0bWxiYXJzL3N0cmVhbXMvdXRpbHMn
XSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1ldGFsU3RyZWFtc1N0cmVhbSwgX2VtYmVySHRt
bGJhcnNTdHJlYW1zVXRpbHMpIHsKLSAgJ3VzZSBzdHJpY3QnOwotCi0gIHZhciBIZWxwZXJGYWN0
b3J5U3RyZWFtID0gX2VtYmVyTWV0YWxTdHJlYW1zU3RyZWFtLmRlZmF1bHQuZXh0ZW5kKHsKLSAg
ICBpbml0OiBmdW5jdGlvbiAoaGVscGVyRmFjdG9yeSwgcGFyYW1zLCBoYXNoLCBsYWJlbCkgewot
ICAgICAgdGhpcy5oZWxwZXJGYWN0b3J5ID0gaGVscGVyRmFjdG9yeTsKLSAgICAgIHRoaXMucGFy
YW1zID0gcGFyYW1zOwotICAgICAgdGhpcy5oYXNoID0gaGFzaDsKLSAgICAgIHRoaXMubGlua2Fi
bGUgPSB0cnVlOwotICAgICAgdGhpcy5oZWxwZXIgPSBudWxsOwotICAgICAgdGhpcy5sYWJlbCA9
IGxhYmVsOwotICAgIH0sCi0KLSAgICBjb21wdXRlOiBmdW5jdGlvbiAoKSB7Ci0gICAgICBpZiAo
IXRoaXMuaGVscGVyKSB7Ci0gICAgICAgIHRoaXMuaGVscGVyID0gdGhpcy5oZWxwZXJGYWN0b3J5
LmNyZWF0ZSh7IF9zdHJlYW06IHRoaXMgfSk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gdGhpcy5o
ZWxwZXIuY29tcHV0ZShfZW1iZXJIdG1sYmFyc1N0cmVhbXNVdGlscy5nZXRBcnJheVZhbHVlcyh0
aGlzLnBhcmFtcyksIF9lbWJlckh0bWxiYXJzU3RyZWFtc1V0aWxzLmdldEhhc2hWYWx1ZXModGhp
cy5oYXNoKSk7Ci0gICAgfSwKLQotICAgIGRlYWN0aXZhdGU6IGZ1bmN0aW9uICgpIHsKLSAgICAg
IHRoaXMuc3VwZXIkZGVhY3RpdmF0ZSgpOwotICAgICAgaWYgKHRoaXMuaGVscGVyKSB7Ci0gICAg
ICAgIHRoaXMuaGVscGVyLmRlc3Ryb3koKTsKLSAgICAgICAgdGhpcy5oZWxwZXIgPSBudWxsOwot
ICAgICAgfQotICAgIH0sCi0gICAgc3VwZXIkZGVhY3RpdmF0ZTogX2VtYmVyTWV0YWxTdHJlYW1z
U3RyZWFtLmRlZmF1bHQucHJvdG90eXBlLmRlYWN0aXZhdGUKLSAgfSk7Ci0KLSAgZXhwb3J0cy5k
ZWZhdWx0ID0gSGVscGVyRmFjdG9yeVN0cmVhbTsKLX0pOwotZW5pZmVkKCdlbWJlci1odG1sYmFy
cy9zdHJlYW1zL2hlbHBlci1pbnN0YW5jZScsIFsnZXhwb3J0cycsICdlbWJlci1tZXRhbC9zdHJl
YW1zL3N0cmVhbScsICdlbWJlci1odG1sYmFycy9zdHJlYW1zL3V0aWxzJ10sIGZ1bmN0aW9uIChl
eHBvcnRzLCBfZW1iZXJNZXRhbFN0cmVhbXNTdHJlYW0sIF9lbWJlckh0bWxiYXJzU3RyZWFtc1V0
aWxzKSB7Ci0gICd1c2Ugc3RyaWN0JzsKLQotICB2YXIgSGVscGVySW5zdGFuY2VTdHJlYW0gPSBf
ZW1iZXJNZXRhbFN0cmVhbXNTdHJlYW0uZGVmYXVsdC5leHRlbmQoewotICAgIGluaXQ6IGZ1bmN0
aW9uIChoZWxwZXIsIHBhcmFtcywgaGFzaCwgbGFiZWwpIHsKLSAgICAgIHRoaXMuaGVscGVyID0g
aGVscGVyOwotICAgICAgdGhpcy5wYXJhbXMgPSBwYXJhbXM7Ci0gICAgICB0aGlzLmhhc2ggPSBo
YXNoOwotICAgICAgdGhpcy5saW5rYWJsZSA9IHRydWU7Ci0gICAgICB0aGlzLmxhYmVsID0gbGFi
ZWw7Ci0gICAgfSwKLQotICAgIGNvbXB1dGU6IGZ1bmN0aW9uICgpIHsKLSAgICAgIHJldHVybiB0
aGlzLmhlbHBlci5jb21wdXRlKF9lbWJlckh0bWxiYXJzU3RyZWFtc1V0aWxzLmdldEFycmF5VmFs
dWVzKHRoaXMucGFyYW1zKSwgX2VtYmVySHRtbGJhcnNTdHJlYW1zVXRpbHMuZ2V0SGFzaFZhbHVl
cyh0aGlzLmhhc2gpKTsKLSAgICB9Ci0gIH0pOwotCi0gIGV4cG9ydHMuZGVmYXVsdCA9IEhlbHBl
ckluc3RhbmNlU3RyZWFtOwotfSk7Ci1lbmlmZWQoJ2VtYmVyLWh0bWxiYXJzL3N0cmVhbXMvdXRp
bHMnLCBbJ2V4cG9ydHMnLCAnZW1iZXItaHRtbGJhcnMvaG9va3MvZ2V0LXZhbHVlJ10sIGZ1bmN0
aW9uIChleHBvcnRzLCBfZW1iZXJIdG1sYmFyc0hvb2tzR2V0VmFsdWUpIHsKLSAgJ3VzZSBzdHJp
Y3QnOwotCi0gIGV4cG9ydHMuZ2V0QXJyYXlWYWx1ZXMgPSBnZXRBcnJheVZhbHVlczsKLSAgZXhw
b3J0cy5nZXRIYXNoVmFsdWVzID0gZ2V0SGFzaFZhbHVlczsKLQotICAvLyBXZSBkb24ndCB3YW50
IHRvIGxlYWsgbXV0YWJsZSBjZWxscyBpbnRvIGhlbHBlcnMsIHdoaWNoCi0gIC8vIGFyZSBwdXJl
IGZ1bmN0aW9ucyB0aGF0IGNhbiBvbmx5IHdvcmsgd2l0aCB2YWx1ZXMuCi0KLSAgZnVuY3Rpb24g
Z2V0QXJyYXlWYWx1ZXMocGFyYW1zKSB7Ci0gICAgdmFyIGwgPSBwYXJhbXMubGVuZ3RoOwotICAg
IHZhciBvdXQgPSBuZXcgQXJyYXkobCk7Ci0KLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IGw7IGkr
KykgewotICAgICAgb3V0W2ldID0gX2VtYmVySHRtbGJhcnNIb29rc0dldFZhbHVlLmRlZmF1bHQo
cGFyYW1zW2ldKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gb3V0OwotICB9Ci0KLSAgZnVuY3Rpb24g
Z2V0SGFzaFZhbHVlcyhoYXNoKSB7Ci0gICAgdmFyIG91dCA9IHt9OwotCi0gICAgZm9yICh2YXIg
cHJvcCBpbiBoYXNoKSB7Ci0gICAgICBvdXRbcHJvcF0gPSBfZW1iZXJIdG1sYmFyc0hvb2tzR2V0
VmFsdWUuZGVmYXVsdChoYXNoW3Byb3BdKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gb3V0OwotICB9
Ci19KTsKLWVuaWZlZCgnZW1iZXItaHRtbGJhcnMvc3lzdGVtL2FwcGVuZC10ZW1wbGF0ZWQtdmll
dycsIFsnZXhwb3J0cycsICdlbWJlci1tZXRhbC9kZWJ1ZycsICdlbWJlci1tZXRhbC9wcm9wZXJ0
eV9nZXQnLCAnZW1iZXItdmlld3Mvdmlld3MvdmlldyddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2Vt
YmVyTWV0YWxEZWJ1ZywgX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQsIF9lbWJlclZpZXdzVmlld3NW
aWV3KSB7Ci0gIC8qKgotICBAbW9kdWxlIGVtYmVyCi0gIEBzdWJtb2R1bGUgZW1iZXItaHRtbGJh
cnMKLSAgKi8KLQotICAndXNlIHN0cmljdCc7Ci0KLSAgZXhwb3J0cy5kZWZhdWx0ID0gYXBwZW5k
VGVtcGxhdGVkVmlldzsKLQotICBmdW5jdGlvbiBhcHBlbmRUZW1wbGF0ZWRWaWV3KHBhcmVudFZp
ZXcsIG1vcnBoLCB2aWV3Q2xhc3NPckluc3RhbmNlLCBwcm9wcykgewotICAgIHZhciB2aWV3UHJv
dG87Ci0gICAgaWYgKF9lbWJlclZpZXdzVmlld3NWaWV3LmRlZmF1bHQuZGV0ZWN0SW5zdGFuY2Uo
dmlld0NsYXNzT3JJbnN0YW5jZSkpIHsKLSAgICAgIHZpZXdQcm90byA9IHZpZXdDbGFzc09ySW5z
dGFuY2U7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHZpZXdQcm90byA9IHZpZXdDbGFzc09ySW5zdGFu
Y2UucHJvdG8oKTsKLSAgICB9Ci0KLSAgICBfZW1iZXJNZXRhbERlYnVnLmFzc2VydCgnWW91IGNh
bm5vdCBwcm92aWRlIGEgdGVtcGxhdGUgYmxvY2sgaWYgeW91IGFsc28gc3BlY2lmaWVkIGEgdGVt
cGxhdGVOYW1lJywgIXByb3BzLnRlbXBsYXRlIHx8ICFfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5n
ZXQocHJvcHMsICd0ZW1wbGF0ZU5hbWUnKSAmJiAhX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0
KHZpZXdQcm90bywgJ3RlbXBsYXRlTmFtZScpKTsKLQotICAgIC8vIFdlIG9ubHkgd2FudCB0byBv
dmVycmlkZSB0aGUgYF9jb250ZXh0YCBjb21wdXRlZCBwcm9wZXJ0eSBpZiB0aGVyZSBpcwotICAg
IC8vIG5vIHNwZWNpZmllZCBjb250cm9sbGVyLiBTZWUgVmlldyNfY29udGV4dCBmb3IgbW9yZSBp
bmZvcm1hdGlvbi4KLSAgICB2YXIgbm9Db250cm9sbGVySW5Qcm90byA9ICF2aWV3UHJvdG8uY29u
dHJvbGxlcjsKLSAgICBpZiAodmlld1Byb3RvLmNvbnRyb2xsZXIgJiYgdmlld1Byb3RvLmNvbnRy
b2xsZXIuaXNEZXNjcmlwdG9yKSB7Ci0gICAgICBub0NvbnRyb2xsZXJJblByb3RvID0gdHJ1ZTsK
LSAgICB9Ci0gICAgaWYgKG5vQ29udHJvbGxlckluUHJvdG8gJiYgIXZpZXdQcm90by5jb250cm9s
bGVyQmluZGluZyAmJiAhcHJvcHMuY29udHJvbGxlciAmJiAhcHJvcHMuY29udHJvbGxlckJpbmRp
bmcpIHsKLSAgICAgIHByb3BzLl9jb250ZXh0ID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0
KHBhcmVudFZpZXcsICdjb250ZXh0Jyk7IC8vIFRPRE86IGlzIHRoaXMgcmlnaHQ/IQotICAgIH0K
LQotICAgIHByb3BzLl9tb3JwaCA9IG1vcnBoOwotCi0gICAgcmV0dXJuIHBhcmVudFZpZXcuYXBw
ZW5kQ2hpbGQodmlld0NsYXNzT3JJbnN0YW5jZSwgcHJvcHMpOwotICB9Ci19KTsKLWVuaWZlZCgn
ZW1iZXItaHRtbGJhcnMvc3lzdGVtL2Jvb3RzdHJhcCcsIFsnZXhwb3J0cycsICdlbWJlci12aWV3
cy9jb21wb25lbnRfbG9va3VwJywgJ2VtYmVyLXZpZXdzL3N5c3RlbS9qcXVlcnknLCAnZW1iZXIt
bWV0YWwvZXJyb3InLCAnZW1iZXItcnVudGltZS9zeXN0ZW0vbGF6eV9sb2FkJywgJ2VtYmVyLXRl
bXBsYXRlLWNvbXBpbGVyL3N5c3RlbS9jb21waWxlJywgJ2VtYmVyLW1ldGFsL2Vudmlyb25tZW50
JywgJ2VtYmVyLWh0bWxiYXJzL3RlbXBsYXRlX3JlZ2lzdHJ5J10sIGZ1bmN0aW9uIChleHBvcnRz
LCBfZW1iZXJWaWV3c0NvbXBvbmVudF9sb29rdXAsIF9lbWJlclZpZXdzU3lzdGVtSnF1ZXJ5LCBf
ZW1iZXJNZXRhbEVycm9yLCBfZW1iZXJSdW50aW1lU3lzdGVtTGF6eV9sb2FkLCBfZW1iZXJUZW1w
bGF0ZUNvbXBpbGVyU3lzdGVtQ29tcGlsZSwgX2VtYmVyTWV0YWxFbnZpcm9ubWVudCwgX2VtYmVy
SHRtbGJhcnNUZW1wbGF0ZV9yZWdpc3RyeSkgewotICAvKmdsb2JhbHMgSGFuZGxlYmFycyAqLwot
Ci0gIC8qKgotICBAbW9kdWxlIGVtYmVyCi0gIEBzdWJtb2R1bGUgZW1iZXItaHRtbGJhcnMKLSAg
Ki8KLQotICAndXNlIHN0cmljdCc7Ci0KLSAgLyoqCi0gIEBtb2R1bGUgZW1iZXIKLSAgQHN1Ym1v
ZHVsZSBlbWJlci1odG1sYmFycwotICAqLwotCi0gIC8qKgotICAgIEZpbmQgdGVtcGxhdGVzIHN0
b3JlZCBpbiB0aGUgaGVhZCB0YWcgYXMgc2NyaXB0IHRhZ3MgYW5kIG1ha2UgdGhlbSBhdmFpbGFi
bGUKLSAgICB0byBgRW1iZXIuQ29yZVZpZXdgIGluIHRoZSBnbG9iYWwgYEVtYmVyLlRFTVBMQVRF
U2Agb2JqZWN0LiBUaGlzIHdpbGwgYmUgcnVuCi0gICAgYXMgYSBqUXVlcnkgRE9NLXJlYWR5IGNh
bGxiYWNrLgotICAKLSAgICBTY3JpcHQgdGFncyB3aXRoIGB0ZXh0L3gtaGFuZGxlYmFyc2Agd2ls
bCBiZSBjb21waWxlZAotICAgIHdpdGggRW1iZXIncyB0ZW1wbGF0ZSBjb21waWxlciBhbmQgYXJl
IHN1aXRhYmxlIGZvciB1c2UgYXMgYSB2aWV3J3MgdGVtcGxhdGUuCi0gICAgVGhvc2Ugd2l0aCB0
eXBlIGB0ZXh0L3gtcmF3LWhhbmRsZWJhcnNgIHdpbGwgYmUgY29tcGlsZWQgd2l0aCByZWd1bGFy
Ci0gICAgSGFuZGxlYmFycyBhbmQgYXJlIHN1aXRhYmxlIGZvciB1c2UgaW4gdmlld3MnIGNvbXB1
dGVkIHByb3BlcnRpZXMuCi0gIAotICAgIEBwcml2YXRlCi0gICAgQG1ldGhvZCBib290c3RyYXAK
LSAgICBAZm9yIEVtYmVyLkhUTUxCYXJzCi0gICAgQHN0YXRpYwotICAgIEBwYXJhbSBjdHgKLSAg
Ki8KLSAgZnVuY3Rpb24gYm9vdHN0cmFwKGN0eCkgewotICAgIHZhciBzZWxlY3RvcnMgPSAnc2Ny
aXB0W3R5cGU9InRleHQveC1oYW5kbGViYXJzIl0sIHNjcmlwdFt0eXBlPSJ0ZXh0L3gtcmF3LWhh
bmRsZWJhcnMiXSc7Ci0KLSAgICBfZW1iZXJWaWV3c1N5c3RlbUpxdWVyeS5kZWZhdWx0KHNlbGVj
dG9ycywgY3R4KS5lYWNoKGZ1bmN0aW9uICgpIHsKLSAgICAgIC8vIEdldCBhIHJlZmVyZW5jZSB0
byB0aGUgc2NyaXB0IHRhZy4KLSAgICAgIHZhciBzY3JpcHQgPSBfZW1iZXJWaWV3c1N5c3RlbUpx
dWVyeS5kZWZhdWx0KHRoaXMpOwotCi0gICAgICAvLyBHZXQgdGhlIG5hbWUgb2YgdGhlIHNjcmlw
dCwgdXNlZCBieSBFbWJlci5WaWV3J3MgdGVtcGxhdGVOYW1lIHByb3BlcnR5LgotICAgICAgLy8g
Rmlyc3QgbG9vayBmb3IgZGF0YS10ZW1wbGF0ZS1uYW1lIGF0dHJpYnV0ZSwgdGhlbiBmYWxsIGJh
Y2sgdG8gaXRzCi0gICAgICAvLyBpZCBpZiBubyBuYW1lIGlzIGZvdW5kLgotICAgICAgdmFyIHRl
bXBsYXRlTmFtZSA9IHNjcmlwdC5hdHRyKCdkYXRhLXRlbXBsYXRlLW5hbWUnKSB8fCBzY3JpcHQu
YXR0cignaWQnKSB8fCAnYXBwbGljYXRpb24nOwotICAgICAgdmFyIHRlbXBsYXRlLCBjb21waWxl
OwotCi0gICAgICBpZiAoc2NyaXB0LmF0dHIoJ3R5cGUnKSA9PT0gJ3RleHQveC1yYXctaGFuZGxl
YmFycycpIHsKLSAgICAgICAgY29tcGlsZSA9IF9lbWJlclZpZXdzU3lzdGVtSnF1ZXJ5LmRlZmF1
bHQucHJveHkoSGFuZGxlYmFycy5jb21waWxlLCBIYW5kbGViYXJzKTsKLSAgICAgICAgdGVtcGxh
dGUgPSBjb21waWxlKHNjcmlwdC5odG1sKCkpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgdGVt
cGxhdGUgPSBfZW1iZXJUZW1wbGF0ZUNvbXBpbGVyU3lzdGVtQ29tcGlsZS5kZWZhdWx0KHNjcmlw
dC5odG1sKCksIHsKLSAgICAgICAgICBtb2R1bGVOYW1lOiB0ZW1wbGF0ZU5hbWUKLSAgICAgICAg
fSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIENoZWNrIGlmIHRlbXBsYXRlIG9mIHNhbWUgbmFtZSBh
bHJlYWR5IGV4aXN0cy4KLSAgICAgIGlmIChfZW1iZXJIdG1sYmFyc1RlbXBsYXRlX3JlZ2lzdHJ5
Lmhhcyh0ZW1wbGF0ZU5hbWUpKSB7Ci0gICAgICAgIHRocm93IG5ldyBfZW1iZXJNZXRhbEVycm9y
LmRlZmF1bHQoJ1RlbXBsYXRlIG5hbWVkICInICsgdGVtcGxhdGVOYW1lICsgJyIgYWxyZWFkeSBl
eGlzdHMuJyk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIEZvciB0ZW1wbGF0ZXMgd2hpY2ggaGF2ZSBh
IG5hbWUsIHdlIHNhdmUgdGhlbSBhbmQgdGhlbiByZW1vdmUgdGhlbSBmcm9tIHRoZSBET00uCi0g
ICAgICBfZW1iZXJIdG1sYmFyc1RlbXBsYXRlX3JlZ2lzdHJ5LnNldCh0ZW1wbGF0ZU5hbWUsIHRl
bXBsYXRlKTsKLQotICAgICAgLy8gUmVtb3ZlIHNjcmlwdCB0YWcgZnJvbSBET00uCi0gICAgICBz
Y3JpcHQucmVtb3ZlKCk7Ci0gICAgfSk7Ci0gIH0KLQotICBmdW5jdGlvbiBfYm9vdHN0cmFwKCkg
ewotICAgIGJvb3RzdHJhcChfZW1iZXJWaWV3c1N5c3RlbUpxdWVyeS5kZWZhdWx0KGRvY3VtZW50
KSk7Ci0gIH0KLQotICBmdW5jdGlvbiByZWdpc3RlckNvbXBvbmVudExvb2t1cChhcHApIHsKLSAg
ICBhcHAucmVnaXN0ZXIoJ2NvbXBvbmVudC1sb29rdXA6bWFpbicsIF9lbWJlclZpZXdzQ29tcG9u
ZW50X2xvb2t1cC5kZWZhdWx0KTsKLSAgfQotCi0gIC8qCi0gICAgV2UgdGllIHRoaXMgdG8gYXBw
bGljYXRpb24ubG9hZCB0byBlbnN1cmUgdGhhdCB3ZSd2ZSBhdCBsZWFzdAotICAgIGF0dGVtcHRl
ZCB0byBib290c3RyYXAgYXQgdGhlIHBvaW50IHRoYXQgdGhlIGFwcGxpY2F0aW9uIGlzIGxvYWRl
ZC4KLSAgCi0gICAgV2UgYWxzbyB0aWUgdGhpcyB0byBkb2N1bWVudCByZWFkeSBzaW5jZSB3ZSdy
ZSBndWFyYW50ZWVkIHRoYXQgYWxsCi0gICAgdGhlIGlubGluZSB0ZW1wbGF0ZXMgYXJlIHByZXNl
bnQgYXQgdGhpcyBwb2ludC4KLSAgCi0gICAgVGhlcmUncyBubyBoYXJtIHRvIHJ1bm5pbmcgdGhp
cyB0d2ljZSwgc2luY2Ugd2UgcmVtb3ZlIHRoZSB0ZW1wbGF0ZXMKLSAgICBmcm9tIHRoZSBET00g
YWZ0ZXIgcHJvY2Vzc2luZy4KLSAgKi8KLQotICBfZW1iZXJSdW50aW1lU3lzdGVtTGF6eV9sb2Fk
Lm9uTG9hZCgnRW1iZXIuQXBwbGljYXRpb24nLCBmdW5jdGlvbiAoQXBwbGljYXRpb24pIHsKLSAg
ICBBcHBsaWNhdGlvbi5pbml0aWFsaXplcih7Ci0gICAgICBuYW1lOiAnZG9tVGVtcGxhdGVzJywK
LSAgICAgIGluaXRpYWxpemU6IF9lbWJlck1ldGFsRW52aXJvbm1lbnQuZGVmYXVsdC5oYXNET00g
PyBfYm9vdHN0cmFwIDogZnVuY3Rpb24gKCkge30KLSAgICB9KTsKLQotICAgIEFwcGxpY2F0aW9u
Lmluc3RhbmNlSW5pdGlhbGl6ZXIoewotICAgICAgbmFtZTogJ3JlZ2lzdGVyQ29tcG9uZW50TG9v
a3VwJywKLSAgICAgIGluaXRpYWxpemU6IHJlZ2lzdGVyQ29tcG9uZW50TG9va3VwCi0gICAgfSk7
Ci0gIH0pOwotCi0gIGV4cG9ydHMuZGVmYXVsdCA9IGJvb3RzdHJhcDsKLX0pOwotZW5pZmVkKCdl
bWJlci1odG1sYmFycy9zeXN0ZW0vZG9tLWhlbHBlcicsIFsnZXhwb3J0cycsICdkb20taGVscGVy
JywgJ2VtYmVyLWh0bWxiYXJzL21vcnBocy9tb3JwaCcsICdlbWJlci1odG1sYmFycy9tb3JwaHMv
YXR0ci1tb3JwaCddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2RvbUhlbHBlciwgX2VtYmVySHRtbGJh
cnNNb3JwaHNNb3JwaCwgX2VtYmVySHRtbGJhcnNNb3JwaHNBdHRyTW9ycGgpIHsKLSAgJ3VzZSBz
dHJpY3QnOwotCi0gIGZ1bmN0aW9uIEVtYmVyRE9NSGVscGVyKF9kb2N1bWVudCkgewotICAgIF9k
b21IZWxwZXIuZGVmYXVsdC5jYWxsKHRoaXMsIF9kb2N1bWVudCk7Ci0gIH0KLQotICB2YXIgcHJv
dG8gPSBFbWJlckRPTUhlbHBlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKF9kb21IZWxwZXIu
ZGVmYXVsdC5wcm90b3R5cGUpOwotICBwcm90by5Nb3JwaENsYXNzID0gX2VtYmVySHRtbGJhcnNN
b3JwaHNNb3JwaC5kZWZhdWx0OwotICBwcm90by5BdHRyTW9ycGhDbGFzcyA9IF9lbWJlckh0bWxi
YXJzTW9ycGhzQXR0ck1vcnBoLmRlZmF1bHQ7Ci0KLSAgZXhwb3J0cy5kZWZhdWx0ID0gRW1iZXJE
T01IZWxwZXI7Ci19KTsKLWVuaWZlZCgnZW1iZXItaHRtbGJhcnMvc3lzdGVtL2luc3RydW1lbnRh
dGlvbi1zdXBwb3J0JywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFsL2luc3RydW1lbnRhdGlvbidd
LCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0YWxJbnN0cnVtZW50YXRpb24pIHsKLSAgJ3Vz
ZSBzdHJpY3QnOwotCi0gIGV4cG9ydHMuaW5zdHJ1bWVudCA9IGluc3RydW1lbnQ7Ci0KLSAgLyoq
Ci0gICAgUHJvdmlkZXMgaW5zdHJ1bWVudGF0aW9uIGZvciBub2RlIG1hbmFnZXJzLgotICAKLSAg
ICBXcmFwIHlvdXIgbm9kZSBtYW5hZ2VyJ3MgcmVuZGVyIGFuZCByZS1yZW5kZXIgbWV0aG9kcwot
ICAgIHdpdGggdGhpcyBmdW5jdGlvbi4KLSAgCi0gICAgQHBhcmFtIHtPYmplY3R9IGNvbXBvbmVu
dCBDb21wb25lbnQgb3IgVmlldyBpbnN0YW5jZSAob3B0aW9uYWwpLgotICAgIEBwYXJhbSB7RnVu
Y3Rpb259IGNhbGxiYWNrIFRoZSBmdW5jdGlvbiB0byBpbnN0cnVtZW50LgotICAgIEBwYXJhbSB7
T2JqZWN0fSBjb250ZXh0IFRoZSBjb250ZXh0IHRvIGNhbGwgdGhlIGZ1bmN0aW9uIHdpdGguCi0g
ICAgQHJldHVybiB7T2JqZWN0fSBSZXR1cm4gdmFsdWUgZnJvbSB0aGUgaW52b2tlZCBjYWxsYmFj
ay4KLSAgICBAcHJpdmF0ZQotICAqLwotCi0gIGZ1bmN0aW9uIGluc3RydW1lbnQoY29tcG9uZW50
LCBjYWxsYmFjaywgY29udGV4dCkgewotICAgIHZhciBpbnN0cnVtZW50TmFtZSwgdmFsLCBkZXRh
aWxzLCBlbmQ7Ci0gICAgLy8gT25seSBpbnN0cnVtZW50IGlmIHRoZXJlJ3MgYXQgbGVhc3Qgb25l
IHN1YnNjcmliZXIuCi0gICAgaWYgKF9lbWJlck1ldGFsSW5zdHJ1bWVudGF0aW9uLnN1YnNjcmli
ZXJzLmxlbmd0aCkgewotICAgICAgaWYgKGNvbXBvbmVudCkgewotICAgICAgICBpbnN0cnVtZW50
TmFtZSA9IGNvbXBvbmVudC5pbnN0cnVtZW50TmFtZTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAg
IGluc3RydW1lbnROYW1lID0gJ25vZGUnOwotICAgICAgfQotICAgICAgZGV0YWlscyA9IHt9Owot
ICAgICAgaWYgKGNvbXBvbmVudCkgewotICAgICAgICBjb21wb25lbnQuaW5zdHJ1bWVudERldGFp
bHMoZGV0YWlscyk7Ci0gICAgICB9Ci0gICAgICBlbmQgPSBfZW1iZXJNZXRhbEluc3RydW1lbnRh
dGlvbi5faW5zdHJ1bWVudFN0YXJ0KCdyZW5kZXIuJyArIGluc3RydW1lbnROYW1lLCBmdW5jdGlv
biB2aWV3SW5zdHJ1bWVudERldGFpbHMoKSB7Ci0gICAgICAgIHJldHVybiBkZXRhaWxzOwotICAg
ICAgfSk7Ci0gICAgICB2YWwgPSBjYWxsYmFjay5jYWxsKGNvbnRleHQpOwotICAgICAgaWYgKGVu
ZCkgewotICAgICAgICBlbmQoKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiB2YWw7Ci0gICAgfSBl
bHNlIHsKLSAgICAgIHJldHVybiBjYWxsYmFjay5jYWxsKGNvbnRleHQpOwotICAgIH0KLSAgfQot
fSk7Ci1lbmlmZWQoJ2VtYmVyLWh0bWxiYXJzL3N5c3RlbS9pbnZva2UtaGVscGVyJywgWydleHBv
cnRzJywgJ2VtYmVyLW1ldGFsL2RlYnVnJywgJ2VtYmVyLWh0bWxiYXJzL3N0cmVhbXMvaGVscGVy
LWluc3RhbmNlJywgJ2VtYmVyLWh0bWxiYXJzL3N0cmVhbXMvaGVscGVyLWZhY3RvcnknLCAnZW1i
ZXItaHRtbGJhcnMvc3RyZWFtcy9idWlsdC1pbi1oZWxwZXInXSwgZnVuY3Rpb24gKGV4cG9ydHMs
IF9lbWJlck1ldGFsRGVidWcsIF9lbWJlckh0bWxiYXJzU3RyZWFtc0hlbHBlckluc3RhbmNlLCBf
ZW1iZXJIdG1sYmFyc1N0cmVhbXNIZWxwZXJGYWN0b3J5LCBfZW1iZXJIdG1sYmFyc1N0cmVhbXNC
dWlsdEluSGVscGVyKSB7Ci0gICd1c2Ugc3RyaWN0JzsKLQotICBleHBvcnRzLmJ1aWxkSGVscGVy
U3RyZWFtID0gYnVpbGRIZWxwZXJTdHJlYW07Ci0KLSAgZnVuY3Rpb24gYnVpbGRIZWxwZXJTdHJl
YW0oaGVscGVyLCBwYXJhbXMsIGhhc2gsIHRlbXBsYXRlcywgZW52LCBzY29wZSwgbGFiZWwpIHsK
LSAgICB2YXIgaXNBbnlLaW5kT2ZIZWxwZXIgPSBoZWxwZXIuaXNIZWxwZXJJbnN0YW5jZSB8fCBo
ZWxwZXIuaXNIZWxwZXJGYWN0b3J5OwotICAgIF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0KCdIZWxw
ZXJzIG1heSBub3QgYmUgdXNlZCBpbiB0aGUgYmxvY2sgZm9ybSwgZm9yIGV4YW1wbGUge3sjbXkt
aGVscGVyfX17ey9teS1oZWxwZXJ9fS4gUGxlYXNlIHVzZSBhIGNvbXBvbmVudCwgb3IgYWx0ZXJu
YXRpdmVseSB1c2UgdGhlIGhlbHBlciBpbiBjb21iaW5hdGlvbiB3aXRoIGEgYnVpbHQtaW4gRW1i
ZXIgaGVscGVyLCBmb3IgZXhhbXBsZSB7eyNpZiAobXktaGVscGVyKX19e3svaWZ9fS4nLCAhKGlz
QW55S2luZE9mSGVscGVyICYmIHRlbXBsYXRlcyAmJiB0ZW1wbGF0ZXMudGVtcGxhdGUgJiYgdGVt
cGxhdGVzLnRlbXBsYXRlLm1ldGEpKTsKLSAgICBfZW1iZXJNZXRhbERlYnVnLmFzc2VydCgnSGVs
cGVycyBtYXkgbm90IGJlIHVzZWQgaW4gdGhlIGVsZW1lbnQgZm9ybSwgZm9yIGV4YW1wbGUgPGRp
diB7e215LWhlbHBlcn19Pi4nLCAhKGlzQW55S2luZE9mSGVscGVyICYmIHRlbXBsYXRlcyAmJiB0
ZW1wbGF0ZXMuZWxlbWVudCkpOwotICAgIGlmIChoZWxwZXIuaXNIZWxwZXJGYWN0b3J5KSB7Ci0g
ICAgICByZXR1cm4gbmV3IF9lbWJlckh0bWxiYXJzU3RyZWFtc0hlbHBlckZhY3RvcnkuZGVmYXVs
dChoZWxwZXIsIHBhcmFtcywgaGFzaCwgbGFiZWwpOwotICAgIH0gZWxzZSBpZiAoaGVscGVyLmlz
SGVscGVySW5zdGFuY2UpIHsKLSAgICAgIHJldHVybiBuZXcgX2VtYmVySHRtbGJhcnNTdHJlYW1z
SGVscGVySW5zdGFuY2UuZGVmYXVsdChoZWxwZXIsIHBhcmFtcywgaGFzaCwgbGFiZWwpOwotICAg
IH0gZWxzZSB7Ci0gICAgICB0ZW1wbGF0ZXMgPSB0ZW1wbGF0ZXMgfHwgeyB0ZW1wbGF0ZToge30s
IGludmVyc2U6IHt9IH07Ci0gICAgICByZXR1cm4gbmV3IF9lbWJlckh0bWxiYXJzU3RyZWFtc0J1
aWx0SW5IZWxwZXIuZGVmYXVsdChoZWxwZXIsIHBhcmFtcywgaGFzaCwgdGVtcGxhdGVzLCBlbnYs
IHNjb3BlLCBsYWJlbCk7Ci0gICAgfQotICB9Ci19KTsKLWVuaWZlZCgnZW1iZXItaHRtbGJhcnMv
c3lzdGVtL2xvb2t1cC1oZWxwZXInLCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwvZGVidWcnLCAn
ZW1iZXItbWV0YWwvY2FjaGUnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1ldGFsRGVidWcs
IF9lbWJlck1ldGFsQ2FjaGUpIHsKLSAgLyoqCi0gIEBtb2R1bGUgZW1iZXIKLSAgQHN1Ym1vZHVs
ZSBlbWJlci1odG1sYmFycwotICAqLwotCi0gICd1c2Ugc3RyaWN0JzsKLQotICBleHBvcnRzLnZh
bGlkYXRlTGF6eUhlbHBlck5hbWUgPSB2YWxpZGF0ZUxhenlIZWxwZXJOYW1lOwotICBleHBvcnRz
LmZpbmRIZWxwZXIgPSBmaW5kSGVscGVyOwotICBleHBvcnRzLmRlZmF1bHQgPSBsb29rdXBIZWxw
ZXI7Ci0gIHZhciBDT05UQUlOU19EQVNIX0NBQ0hFID0gbmV3IF9lbWJlck1ldGFsQ2FjaGUuZGVm
YXVsdCgxMDAwLCBmdW5jdGlvbiAoa2V5KSB7Ci0gICAgcmV0dXJuIGtleS5pbmRleE9mKCctJykg
IT09IC0xOwotICB9KTsKLQotICBleHBvcnRzLkNPTlRBSU5TX0RBU0hfQ0FDSEUgPSBDT05UQUlO
U19EQVNIX0NBQ0hFOwotICB2YXIgQ09OVEFJTlNfRE9UX0NBQ0hFID0gbmV3IF9lbWJlck1ldGFs
Q2FjaGUuZGVmYXVsdCgxMDAwLCBmdW5jdGlvbiAoa2V5KSB7Ci0gICAgcmV0dXJuIGtleS5pbmRl
eE9mKCcuJykgIT09IC0xOwotICB9KTsKLQotICBleHBvcnRzLkNPTlRBSU5TX0RPVF9DQUNIRSA9
IENPTlRBSU5TX0RPVF9DQUNIRTsKLQotICBmdW5jdGlvbiB2YWxpZGF0ZUxhenlIZWxwZXJOYW1l
KGhlbHBlck5hbWUsIGNvbnRhaW5lciwga2V5d29yZHMpIHsKLSAgICByZXR1cm4gY29udGFpbmVy
ICYmICEoaGVscGVyTmFtZSBpbiBrZXl3b3Jkcyk7Ci0gIH0KLQotICAvKioKLSAgICBVc2VkIHRv
IGxvb2t1cC9yZXNvbHZlIGhhbmRsZWJhcnMgaGVscGVycy4gVGhlIGxvb2t1cCBvcmRlciBpczoK
LSAgCi0gICAgKiBMb29rIGZvciBhIHJlZ2lzdGVyZWQgaGVscGVyCi0gICAgKiBJZiBhIGRhc2gg
ZXhpc3RzIGluIHRoZSBuYW1lOgotICAgICAgKiBMb29rIGZvciBhIGhlbHBlciByZWdpc3RlZCBp
biB0aGUgY29udGFpbmVyLgotICAgICAgKiBVc2UgRW1iZXIuQ29tcG9uZW50TG9va3VwIHRvIGZp
bmQgYW4gRW1iZXIuQ29tcG9uZW50IHRoYXQgcmVzb2x2ZXMKLSAgICAgICAgdG8gdGhlIGdpdmVu
IG5hbWUuCi0gIAotICAgIEBwcml2YXRlCi0gICAgQG1ldGhvZCByZXNvbHZlSGVscGVyCi0gICAg
QHBhcmFtIHtTdHJpbmd9IG5hbWUgVGhlIG5hbWUgb2YgdGhlIGhlbHBlciB0byBsb29rdXAuCi0g
ICAgQHJldHVybiB7SGVscGVyfQotICAqLwotICBmdW5jdGlvbiBfZmluZEhlbHBlcihuYW1lLCB2
aWV3LCBlbnYsIG9wdGlvbnMpIHsKLSAgICB2YXIgaGVscGVyID0gZW52LmhlbHBlcnNbbmFtZV07
Ci0KLSAgICBpZiAoIWhlbHBlcikgewotICAgICAgdmFyIG93bmVyID0gZW52Lm93bmVyOwotICAg
ICAgaWYgKHZhbGlkYXRlTGF6eUhlbHBlck5hbWUobmFtZSwgb3duZXIsIGVudi5ob29rcy5rZXl3
b3JkcykpIHsKLSAgICAgICAgdmFyIGhlbHBlck5hbWUgPSAnaGVscGVyOicgKyBuYW1lOwotICAg
ICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2VtYmVyanMvZW1iZXIuanMvaXNzdWVzLzEz
MDcxCi0gICAgICAgIC8vIFNlZSBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVz
L2RldGFpbD9pZD00ODM5Ci0gICAgICAgIHZhciByZWdpc3RlcmVkID0gb3duZXIuaGFzUmVnaXN0
cmF0aW9uKGhlbHBlck5hbWUsIG9wdGlvbnMpOwotICAgICAgICBpZiAocmVnaXN0ZXJlZCkgewot
ICAgICAgICAgIGhlbHBlciA9IG93bmVyLl9sb29rdXBGYWN0b3J5KGhlbHBlck5hbWUsIG9wdGlv
bnMpOwotICAgICAgICAgIF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0KCdFeHBlY3RlZCB0byBmaW5k
IGFuIEVtYmVyLkhlbHBlciB3aXRoIHRoZSBuYW1lICcgKyBoZWxwZXJOYW1lICsgJywgYnV0IGZv
dW5kIGFuIG9iamVjdCBvZiB0eXBlICcgKyB0eXBlb2YgaGVscGVyICsgJyBpbnN0ZWFkLicsIGhl
bHBlci5pc0hlbHBlckZhY3RvcnkgfHwgaGVscGVyLmlzSGVscGVySW5zdGFuY2UpOwotICAgICAg
ICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGhlbHBlcjsKLSAgfQotCi0gIGZ1bmN0
aW9uIGZpbmRIZWxwZXIobmFtZSwgdmlldywgZW52KSB7Ci0gICAgdmFyIG9wdGlvbnMgPSB7fTsK
LSAgICB2YXIgbW9kdWxlTmFtZSA9IGVudi5tZXRhICYmIGVudi5tZXRhLm1vZHVsZU5hbWU7Ci0g
ICAgaWYgKG1vZHVsZU5hbWUpIHsKLSAgICAgIG9wdGlvbnMuc291cmNlID0gJ3RlbXBsYXRlOicg
KyBtb2R1bGVOYW1lOwotICAgIH0KLQotICAgIHZhciBsb2NhbEhlbHBlciA9IF9maW5kSGVscGVy
KG5hbWUsIHZpZXcsIGVudiwgb3B0aW9ucyk7Ci0KLSAgICAvLyBMb2NhbCBtYXRjaCBmb3VuZCwg
dXNlIGl0LgotICAgIGlmIChsb2NhbEhlbHBlcikgewotICAgICAgcmV0dXJuIGxvY2FsSGVscGVy
OwotICAgIH0KLQotICAgIC8vIEZhbGwgYmFjayB0byBnbG9iYWwuCi0gICAgcmV0dXJuIF9maW5k
SGVscGVyKG5hbWUsIHZpZXcsIGVudik7Ci0gIH0KLQotICBmdW5jdGlvbiBsb29rdXBIZWxwZXIo
bmFtZSwgdmlldywgZW52KSB7Ci0gICAgdmFyIGhlbHBlciA9IGZpbmRIZWxwZXIobmFtZSwgdmll
dywgZW52KTsKLQotICAgIF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0KCdBIGhlbHBlciBuYW1lZCBc
JycgKyBuYW1lICsgJ1wnIGNvdWxkIG5vdCBiZSBmb3VuZCcsICEhaGVscGVyKTsKLQotICAgIHJl
dHVybiBoZWxwZXI7Ci0gIH0KLX0pOwotZW5pZmVkKCdlbWJlci1odG1sYmFycy9zeXN0ZW0vbWFr
ZV9ib3VuZF9oZWxwZXInLCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwvZGVidWcnLCAnZW1iZXIt
aHRtbGJhcnMvaGVscGVyJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbERlYnVnLCBf
ZW1iZXJIdG1sYmFyc0hlbHBlcikgewotICAvKioKLSAgQG1vZHVsZSBlbWJlcgotICBAc3VibW9k
dWxlIGVtYmVyLWh0bWxiYXJzCi0gICovCi0gICd1c2Ugc3RyaWN0JzsKLQotICBleHBvcnRzLmRl
ZmF1bHQgPSBtYWtlQm91bmRIZWxwZXI7Ci0KLSAgLyoqCi0gICAgQ3JlYXRlIGEgYm91bmQgaGVs
cGVyLiBBY2NlcHRzIGEgZnVuY3Rpb24gdGhhdCByZWNlaXZlcyB0aGUgb3JkZXJlZCBhbmQgaGFz
aCBwYXJhbWV0ZXJzCi0gICAgZnJvbSB0aGUgdGVtcGxhdGUuIElmIGEgYm91bmQgcHJvcGVydHkg
d2FzIHByb3ZpZGVkIGluIHRoZSB0ZW1wbGF0ZSwgaXQgd2lsbCBiZSByZXNvbHZlZCB0byBpdHMK
LSAgICB2YWx1ZSBhbmQgYW55IGNoYW5nZXMgdG8gdGhlIGJvdW5kIHByb3BlcnR5IGNhdXNlIHRo
ZSBoZWxwZXIgZnVuY3Rpb24gdG8gYmUgcmUtcnVuIHdpdGggdGhlIHVwZGF0ZWQKLSAgICB2YWx1
ZXMuCi0gIAotICAgICogYHBhcmFtc2AgLSBBbiBhcnJheSBvZiByZXNvbHZlZCBvcmRlcmVkIHBh
cmFtZXRlcnMuCi0gICAgKiBgaGFzaGAgLSBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgaGFzaCBw
YXJhbWV0ZXJzLgotICAKLSAgICBGb3IgZXhhbXBsZToKLSAgCi0gICAgKiBXaXRoIGFuIHVucXVv
dGVkIG9yZGVyZWQgcGFyYW1ldGVyOgotICAKLSAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgIHt7
eC1jYXBpdGFsaXplIGZvb319Ci0gICAgICBgYGAKLSAgCi0gICAgICBBc3N1bWluZyBgZm9vYCB3
YXMgc2V0IHRvIGAiYmFyImAsIHRoZSBib3VuZCBoZWxwZXIgd291bGQgcmVjZWl2ZSBgWyJiYXIi
XWAgYXMgaXRzIGZpcnN0IGFyZ3VtZW50LCBhbmQKLSAgICAgIGFuIGVtcHR5IGhhc2ggYXMgaXRz
IHNlY29uZC4KLSAgCi0gICAgKiBXaXRoIGEgcXVvdGVkIG9yZGVyZWQgcGFyYW1ldGVyOgotICAK
LSAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgIHt7eC1jYXBpdGFsaXplICJmb28ifX0KLSAgICAg
IGBgYAotICAKLSAgICAgIFRoZSBib3VuZCBoZWxwZXIgd291bGQgcmVjZWl2ZSBgWyJmb28iXWAg
YXMgaXRzIGZpcnN0IGFyZ3VtZW50LCBhbmQgYW4gZW1wdHkgaGFzaCBhcyBpdHMgc2Vjb25kLgot
ICAKLSAgICAqIFdpdGggYW4gdW5xdW90ZWQgaGFzaCBwYXJhbWV0ZXI6Ci0gIAotICAgICAgYGBg
amF2YXNjcmlwdAotICAgICAge3t4LXJlcGVhdCAiZm9vIiBjb3VudD1yZXBlYXRDb3VudH19Ci0g
ICAgICBgYGAKLSAgCi0gICAgICBBc3N1bWluZyB0aGF0IGByZXBlYXRDb3VudGAgcmVzb2x2ZWQg
dG8gMiwgdGhlIGJvdW5kIGhlbHBlciB3b3VsZCByZWNlaXZlIGBbImZvbyJdYCBhcyBpdHMgZmly
c3QgYXJndW1lbnQsCi0gICAgICBhbmQgeyBjb3VudDogMiB9IGFzIGl0cyBzZWNvbmQuCi0gIAot
ICAgIEBwcml2YXRlCi0gICAgQG1ldGhvZCBtYWtlQm91bmRIZWxwZXIKLSAgICBAZm9yIEVtYmVy
LkhUTUxCYXJzCi0gICAgQHBhcmFtIHtGdW5jdGlvbn0gZm4KLSAgICBAc2luY2UgMS4xMC4wCi0g
ICovCi0KLSAgZnVuY3Rpb24gbWFrZUJvdW5kSGVscGVyKGZuKSB7Ci0gICAgX2VtYmVyTWV0YWxE
ZWJ1Zy5kZXByZWNhdGUoJ1VzaW5nIGBFbWJlci5IVE1MQmFycy5tYWtlQm91bmRIZWxwZXJgIGlz
IGRlcHJlY2F0ZWQuIFBsZWFzZSByZWZhY3RvciB0byB1c2UgYEVtYmVyLkhlbHBlcmAgb3IgYEVt
YmVyLkhlbHBlci5oZWxwZXJgLicsIGZhbHNlLCB7IGlkOiAnZW1iZXItaHRtbGJhcnMubWFrZS1i
b3VuZC1oZWxwZXInLCB1bnRpbDogJzMuMC4wJyB9KTsKLSAgICByZXR1cm4gX2VtYmVySHRtbGJh
cnNIZWxwZXIuaGVscGVyKGZuKTsKLSAgfQotfSk7Ci1lbmlmZWQoJ2VtYmVyLWh0bWxiYXJzL3N5
c3RlbS9yZW5kZXItZW52JywgWydleHBvcnRzJywgJ2VtYmVyLWh0bWxiYXJzL2VudicsICdlbWJl
ci1tZXRhbC12aWV3cycsICdjb250YWluZXIvb3duZXInXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9l
bWJlckh0bWxiYXJzRW52LCBfZW1iZXJNZXRhbFZpZXdzLCBfY29udGFpbmVyT3duZXIpIHsKLSAg
J3VzZSBzdHJpY3QnOwotCi0gIGV4cG9ydHMuZGVmYXVsdCA9IFJlbmRlckVudjsKLQotICBmdW5j
dGlvbiBSZW5kZXJFbnYob3B0aW9ucykgewotICAgIHRoaXMubGlmZWN5Y2xlSG9va3MgPSBvcHRp
b25zLmxpZmVjeWNsZUhvb2tzIHx8IFtdOwotICAgIHRoaXMucmVuZGVyZWRWaWV3cyA9IG9wdGlv
bnMucmVuZGVyZWRWaWV3cyB8fCBbXTsKLSAgICB0aGlzLnJlbmRlcmVkTm9kZXMgPSBvcHRpb25z
LnJlbmRlcmVkTm9kZXMgfHwgbmV3IF9lbWJlck1ldGFsVmlld3MuTW9ycGhTZXQoKTsKLSAgICB0
aGlzLmhhc1BhcmVudE91dGxldCA9IG9wdGlvbnMuaGFzUGFyZW50T3V0bGV0IHx8IGZhbHNlOwot
Ci0gICAgdGhpcy52aWV3ID0gb3B0aW9ucy52aWV3OwotICAgIHRoaXMub3V0bGV0U3RhdGUgPSBv
cHRpb25zLm91dGxldFN0YXRlOwotICAgIHRoaXMub3duZXIgPSBvcHRpb25zLm93bmVyOwotICAg
IHRoaXMucmVuZGVyZXIgPSBvcHRpb25zLnJlbmRlcmVyOwotICAgIHRoaXMuZG9tID0gb3B0aW9u
cy5kb207Ci0gICAgdGhpcy5tZXRhID0gb3B0aW9ucy5tZXRhOwotCi0gICAgdGhpcy5ob29rcyA9
IF9lbWJlckh0bWxiYXJzRW52LmRlZmF1bHQuaG9va3M7Ci0gICAgdGhpcy5oZWxwZXJzID0gX2Vt
YmVySHRtbGJhcnNFbnYuZGVmYXVsdC5oZWxwZXJzOwotICAgIHRoaXMudXNlRnJhZ21lbnRDYWNo
ZSA9IF9lbWJlckh0bWxiYXJzRW52LmRlZmF1bHQudXNlRnJhZ21lbnRDYWNoZTsKLSAgICB0aGlz
LmRlc3RpbmVkRm9yRE9NID0gdGhpcy5yZW5kZXJlci5fZGVzdGluZWRGb3JET007Ci0gIH0KLQot
ICBSZW5kZXJFbnYuYnVpbGQgPSBmdW5jdGlvbiAodmlldywgbWV0YSkgewotICAgIHJldHVybiBu
ZXcgUmVuZGVyRW52KHsKLSAgICAgIHZpZXc6IHZpZXcsCi0gICAgICBvdXRsZXRTdGF0ZTogdmll
dy5vdXRsZXRTdGF0ZSwKLSAgICAgIG93bmVyOiBfY29udGFpbmVyT3duZXIuZ2V0T3duZXIodmll
dyksCi0gICAgICByZW5kZXJlcjogdmlldy5yZW5kZXJlciwKLSAgICAgIGRvbTogdmlldy5yZW5k
ZXJlci5fZG9tLAotICAgICAgbWV0YTogbWV0YQotICAgIH0pOwotICB9OwotCi0gIFJlbmRlckVu
di5wcm90b3R5cGUuY2hpbGRXaXRoTWV0YSA9IGZ1bmN0aW9uIChtZXRhKSB7Ci0gICAgcmV0dXJu
IG5ldyBSZW5kZXJFbnYoewotICAgICAgdmlldzogdGhpcy52aWV3LAotICAgICAgb3V0bGV0U3Rh
dGU6IHRoaXMub3V0bGV0U3RhdGUsCi0gICAgICBvd25lcjogdGhpcy5vd25lciwKLSAgICAgIHJl
bmRlcmVyOiB0aGlzLnJlbmRlcmVyLAotICAgICAgZG9tOiB0aGlzLmRvbSwKLSAgICAgIGxpZmVj
eWNsZUhvb2tzOiB0aGlzLmxpZmVjeWNsZUhvb2tzLAotICAgICAgcmVuZGVyZWRWaWV3czogdGhp
cy5yZW5kZXJlZFZpZXdzLAotICAgICAgcmVuZGVyZWROb2RlczogdGhpcy5yZW5kZXJlZE5vZGVz
LAotICAgICAgaGFzUGFyZW50T3V0bGV0OiB0aGlzLmhhc1BhcmVudE91dGxldCwKLSAgICAgIG1l
dGE6IG1ldGEKLSAgICB9KTsKLSAgfTsKLQotICBSZW5kZXJFbnYucHJvdG90eXBlLmNoaWxkV2l0
aFZpZXcgPSBmdW5jdGlvbiAodmlldykgewotICAgIHZhciBtZXRhID0gYXJndW1lbnRzLmxlbmd0
aCA8PSAxIHx8IGFyZ3VtZW50c1sxXSA9PT0gdW5kZWZpbmVkID8gdGhpcy5tZXRhIDogYXJndW1l
bnRzWzFdOwotCi0gICAgcmV0dXJuIG5ldyBSZW5kZXJFbnYoewotICAgICAgdmlldzogdmlldywK
LSAgICAgIG91dGxldFN0YXRlOiB0aGlzLm91dGxldFN0YXRlLAotICAgICAgb3duZXI6IHRoaXMu
b3duZXIsCi0gICAgICByZW5kZXJlcjogdGhpcy5yZW5kZXJlciwKLSAgICAgIGRvbTogdGhpcy5k
b20sCi0gICAgICBsaWZlY3ljbGVIb29rczogdGhpcy5saWZlY3ljbGVIb29rcywKLSAgICAgIHJl
bmRlcmVkVmlld3M6IHRoaXMucmVuZGVyZWRWaWV3cywKLSAgICAgIHJlbmRlcmVkTm9kZXM6IHRo
aXMucmVuZGVyZWROb2RlcywKLSAgICAgIGhhc1BhcmVudE91dGxldDogdGhpcy5oYXNQYXJlbnRP
dXRsZXQsCi0gICAgICBtZXRhOiBtZXRhCi0gICAgfSk7Ci0gIH07Ci0KLSAgUmVuZGVyRW52LnBy
b3RvdHlwZS5jaGlsZFdpdGhPdXRsZXRTdGF0ZSA9IGZ1bmN0aW9uIChvdXRsZXRTdGF0ZSkgewot
ICAgIHZhciBoYXNQYXJlbnRPdXRsZXQgPSBhcmd1bWVudHMubGVuZ3RoIDw9IDEgfHwgYXJndW1l
bnRzWzFdID09PSB1bmRlZmluZWQgPyB0aGlzLmhhc1BhcmVudE91dGxldCA6IGFyZ3VtZW50c1sx
XTsKLSAgICB2YXIgbWV0YSA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMiB8fCBhcmd1bWVudHNbMl0g
PT09IHVuZGVmaW5lZCA/IHRoaXMubWV0YSA6IGFyZ3VtZW50c1syXTsKLQotICAgIHJldHVybiBu
ZXcgUmVuZGVyRW52KHsKLSAgICAgIHZpZXc6IHRoaXMudmlldywKLSAgICAgIG91dGxldFN0YXRl
OiBvdXRsZXRTdGF0ZSwKLSAgICAgIG93bmVyOiB0aGlzLm93bmVyLAotICAgICAgcmVuZGVyZXI6
IHRoaXMucmVuZGVyZXIsCi0gICAgICBkb206IHRoaXMuZG9tLAotICAgICAgbGlmZWN5Y2xlSG9v
a3M6IHRoaXMubGlmZWN5Y2xlSG9va3MsCi0gICAgICByZW5kZXJlZFZpZXdzOiB0aGlzLnJlbmRl
cmVkVmlld3MsCi0gICAgICByZW5kZXJlZE5vZGVzOiB0aGlzLnJlbmRlcmVkTm9kZXMsCi0gICAg
ICBoYXNQYXJlbnRPdXRsZXQ6IGhhc1BhcmVudE91dGxldCwKLSAgICAgIG1ldGE6IG1ldGEKLSAg
ICB9KTsKLSAgfTsKLX0pOwotZW5pZmVkKCdlbWJlci1odG1sYmFycy9zeXN0ZW0vcmVuZGVyLXZp
ZXcnLCBbJ2V4cG9ydHMnLCAnZW1iZXItaHRtbGJhcnMvbm9kZS1tYW5hZ2Vycy92aWV3LW5vZGUt
bWFuYWdlcicsICdlbWJlci1odG1sYmFycy9zeXN0ZW0vcmVuZGVyLWVudiddLCBmdW5jdGlvbiAo
ZXhwb3J0cywgX2VtYmVySHRtbGJhcnNOb2RlTWFuYWdlcnNWaWV3Tm9kZU1hbmFnZXIsIF9lbWJl
ckh0bWxiYXJzU3lzdGVtUmVuZGVyRW52KSB7Ci0gICd1c2Ugc3RyaWN0JzsKLQotICBleHBvcnRz
LnJlbmRlckhUTUxCYXJzQmxvY2sgPSByZW5kZXJIVE1MQmFyc0Jsb2NrOwotCi0gIC8vIFRoaXMg
ZnVuY3Rpb24gb25seSBnZXRzIGNhbGxlZCBvbmNlIHBlciByZW5kZXIgb2YgYSAicm9vdCB2aWV3
IiAoYGFwcGVuZFRvYCkuIE90aGVyd2lzZSwKLSAgLy8gSFRNTEJhcnMgcHJvcGFnYXRlcyB0aGUg
ZXhpc3RpbmcgZW52IGFuZCByZW5kZXJzIHRlbXBsYXRlcyBmb3IgYSBnaXZlbiByZW5kZXIgbm9k
ZS4KLQotICBmdW5jdGlvbiByZW5kZXJIVE1MQmFyc0Jsb2NrKHZpZXcsIGJsb2NrLCByZW5kZXJO
b2RlKSB7Ci0gICAgdmFyIG1ldGEgPSBibG9jayAmJiBibG9jay50ZW1wbGF0ZSAmJiBibG9jay50
ZW1wbGF0ZS5tZXRhOwotICAgIHZhciBlbnYgPSBfZW1iZXJIdG1sYmFyc1N5c3RlbVJlbmRlckVu
di5kZWZhdWx0LmJ1aWxkKHZpZXcsIG1ldGEpOwotCi0gICAgdmlldy5lbnYgPSBlbnY7Ci0gICAg
X2VtYmVySHRtbGJhcnNOb2RlTWFuYWdlcnNWaWV3Tm9kZU1hbmFnZXIuY3JlYXRlT3JVcGRhdGVD
b21wb25lbnQodmlldywge30sIG51bGwsIHJlbmRlck5vZGUsIGVudik7Ci0gICAgdmFyIG5vZGVN
YW5hZ2VyID0gbmV3IF9lbWJlckh0bWxiYXJzTm9kZU1hbmFnZXJzVmlld05vZGVNYW5hZ2VyLmRl
ZmF1bHQodmlldywgbnVsbCwgcmVuZGVyTm9kZSwgYmxvY2ssIHZpZXcudGFnTmFtZSAhPT0gJycp
OwotCi0gICAgbm9kZU1hbmFnZXIucmVuZGVyKGVudiwge30pOwotICB9Ci19KTsKLWVuaWZlZCgi
ZW1iZXItaHRtbGJhcnMvdGVtcGxhdGVfcmVnaXN0cnkiLCBbImV4cG9ydHMiXSwgZnVuY3Rpb24g
KGV4cG9ydHMpIHsKLSAgLy8gU1RBVEUgd2l0aGluIGEgbW9kdWxlIGlzIGZyb3duZWQgYXBvbiwg
dGhpcyBleGlzdHMKLSAgLy8gdG8gc3VwcG9ydCBFbWJlci5URU1QTEFURVMgYnV0IHNoaWVsZCBl
bWJlciBpbnRlcm5hbHMgZnJvbSB0aGlzIGxlZ2FjeQotICAvLyBnbG9iYWwgQVBJLgotICAidXNl
IHN0cmljdCI7Ci0KLSAgZXhwb3J0cy5zZXRUZW1wbGF0ZXMgPSBzZXRUZW1wbGF0ZXM7Ci0gIGV4
cG9ydHMuZ2V0VGVtcGxhdGVzID0gZ2V0VGVtcGxhdGVzOwotICBleHBvcnRzLmdldCA9IGdldDsK
LSAgZXhwb3J0cy5oYXMgPSBoYXM7Ci0gIGV4cG9ydHMuc2V0ID0gc2V0OwotICB2YXIgVEVNUExB
VEVTID0ge307Ci0KLSAgZnVuY3Rpb24gc2V0VGVtcGxhdGVzKHRlbXBsYXRlcykgewotICAgIFRF
TVBMQVRFUyA9IHRlbXBsYXRlczsKLSAgfQotCi0gIGZ1bmN0aW9uIGdldFRlbXBsYXRlcygpIHsK
LSAgICByZXR1cm4gVEVNUExBVEVTOwotICB9Ci0KLSAgZnVuY3Rpb24gZ2V0KG5hbWUpIHsKLSAg
ICBpZiAoVEVNUExBVEVTLmhhc093blByb3BlcnR5KG5hbWUpKSB7Ci0gICAgICByZXR1cm4gVEVN
UExBVEVTW25hbWVdOwotICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIGhhcyhuYW1lKSB7Ci0gICAg
cmV0dXJuIFRFTVBMQVRFUy5oYXNPd25Qcm9wZXJ0eShuYW1lKTsKLSAgfQotCi0gIGZ1bmN0aW9u
IHNldChuYW1lLCB0ZW1wbGF0ZSkgewotICAgIHJldHVybiBURU1QTEFURVNbbmFtZV0gPSB0ZW1w
bGF0ZTsKLSAgfQotfSk7Ci1lbmlmZWQoImVtYmVyLWh0bWxiYXJzL3RlbXBsYXRlcy9jb21wb25l
bnQiLCBbImV4cG9ydHMiLCAiZW1iZXItdGVtcGxhdGUtY29tcGlsZXIvc3lzdGVtL3RlbXBsYXRl
Il0sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJUZW1wbGF0ZUNvbXBpbGVyU3lzdGVtVGVtcGxh
dGUpIHsKLSAgInVzZSBzdHJpY3QiOwotCi0gIGV4cG9ydHMuZGVmYXVsdCA9IF9lbWJlclRlbXBs
YXRlQ29tcGlsZXJTeXN0ZW1UZW1wbGF0ZS5kZWZhdWx0KChmdW5jdGlvbiAoKSB7Ci0gICAgcmV0
dXJuIHsKLSAgICAgIG1ldGE6IHt9LAotICAgICAgaXNFbXB0eTogZmFsc2UsCi0gICAgICBhcml0
eTogMCwKLSAgICAgIGNhY2hlZEZyYWdtZW50OiBudWxsLAotICAgICAgaGFzUmVuZGVyZWQ6IGZh
bHNlLAotICAgICAgYnVpbGRGcmFnbWVudDogZnVuY3Rpb24gYnVpbGRGcmFnbWVudChkb20pIHsK
LSAgICAgICAgdmFyIGVsMCA9IGRvbS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7Ci0gICAgICAg
IHZhciBlbDEgPSBkb20uY3JlYXRlQ29tbWVudCgiIik7Ci0gICAgICAgIGRvbS5hcHBlbmRDaGls
ZChlbDAsIGVsMSk7Ci0gICAgICAgIHJldHVybiBlbDA7Ci0gICAgICB9LAotICAgICAgYnVpbGRS
ZW5kZXJOb2RlczogZnVuY3Rpb24gYnVpbGRSZW5kZXJOb2Rlcyhkb20sIGZyYWdtZW50LCBjb250
ZXh0dWFsRWxlbWVudCkgewotICAgICAgICB2YXIgbW9ycGhzID0gbmV3IEFycmF5KDEpOwotICAg
ICAgICBtb3JwaHNbMF0gPSBkb20uY3JlYXRlTW9ycGhBdChmcmFnbWVudCwgMCwgMCwgY29udGV4
dHVhbEVsZW1lbnQpOwotICAgICAgICBkb20uaW5zZXJ0Qm91bmRhcnkoZnJhZ21lbnQsIDApOwot
ICAgICAgICBkb20uaW5zZXJ0Qm91bmRhcnkoZnJhZ21lbnQsIG51bGwpOwotICAgICAgICByZXR1
cm4gbW9ycGhzOwotICAgICAgfSwKLSAgICAgIHN0YXRlbWVudHM6IFtbImNvbnRlbnQiLCAieWll
bGQiLCBbImxvYyIsIFtudWxsLCBbMSwgMF0sIFsxLCA5XV1dXV0sCi0gICAgICBsb2NhbHM6IFtd
LAotICAgICAgdGVtcGxhdGVzOiBbXQotICAgIH07Ci0gIH0pKCkpOwotfSk7Ci1lbmlmZWQoImVt
YmVyLWh0bWxiYXJzL3RlbXBsYXRlcy9lbXB0eSIsIFsiZXhwb3J0cyIsICJlbWJlci10ZW1wbGF0
ZS1jb21waWxlci9zeXN0ZW0vdGVtcGxhdGUiXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlclRl
bXBsYXRlQ29tcGlsZXJTeXN0ZW1UZW1wbGF0ZSkgewotICAidXNlIHN0cmljdCI7Ci0KLSAgZXhw
b3J0cy5kZWZhdWx0ID0gX2VtYmVyVGVtcGxhdGVDb21waWxlclN5c3RlbVRlbXBsYXRlLmRlZmF1
bHQoKGZ1bmN0aW9uICgpIHsKLSAgICByZXR1cm4gewotICAgICAgbWV0YToge30sCi0gICAgICBp
c0VtcHR5OiB0cnVlLAotICAgICAgYXJpdHk6IDAsCi0gICAgICBjYWNoZWRGcmFnbWVudDogbnVs
bCwKLSAgICAgIGhhc1JlbmRlcmVkOiBmYWxzZSwKLSAgICAgIGJ1aWxkRnJhZ21lbnQ6IGZ1bmN0
aW9uIGJ1aWxkRnJhZ21lbnQoZG9tKSB7Ci0gICAgICAgIHZhciBlbDAgPSBkb20uY3JlYXRlRG9j
dW1lbnRGcmFnbWVudCgpOwotICAgICAgICByZXR1cm4gZWwwOwotICAgICAgfSwKLSAgICAgIGJ1
aWxkUmVuZGVyTm9kZXM6IGZ1bmN0aW9uIGJ1aWxkUmVuZGVyTm9kZXMoKSB7Ci0gICAgICAgIHJl
dHVybiBbXTsKLSAgICAgIH0sCi0gICAgICBzdGF0ZW1lbnRzOiBbXSwKLSAgICAgIGxvY2Fsczog
W10sCi0gICAgICB0ZW1wbGF0ZXM6IFtdCi0gICAgfTsKLSAgfSkoKSk7Ci19KTsKLWVuaWZlZCgi
ZW1iZXItaHRtbGJhcnMvdGVtcGxhdGVzL2xpbmstdG8iLCBbImV4cG9ydHMiLCAiZW1iZXItdGVt
cGxhdGUtY29tcGlsZXIvc3lzdGVtL3RlbXBsYXRlIl0sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1i
ZXJUZW1wbGF0ZUNvbXBpbGVyU3lzdGVtVGVtcGxhdGUpIHsKLSAgInVzZSBzdHJpY3QiOwotCi0g
IGV4cG9ydHMuZGVmYXVsdCA9IF9lbWJlclRlbXBsYXRlQ29tcGlsZXJTeXN0ZW1UZW1wbGF0ZS5k
ZWZhdWx0KChmdW5jdGlvbiAoKSB7Ci0gICAgdmFyIGNoaWxkMCA9IChmdW5jdGlvbiAoKSB7Ci0g
ICAgICByZXR1cm4gewotICAgICAgICBtZXRhOiB7fSwKLSAgICAgICAgaXNFbXB0eTogZmFsc2Us
Ci0gICAgICAgIGFyaXR5OiAwLAotICAgICAgICBjYWNoZWRGcmFnbWVudDogbnVsbCwKLSAgICAg
ICAgaGFzUmVuZGVyZWQ6IGZhbHNlLAotICAgICAgICBidWlsZEZyYWdtZW50OiBmdW5jdGlvbiBi
dWlsZEZyYWdtZW50KGRvbSkgewotICAgICAgICAgIHZhciBlbDAgPSBkb20uY3JlYXRlRG9jdW1l
bnRGcmFnbWVudCgpOwotICAgICAgICAgIHZhciBlbDEgPSBkb20uY3JlYXRlQ29tbWVudCgiIik7
Ci0gICAgICAgICAgZG9tLmFwcGVuZENoaWxkKGVsMCwgZWwxKTsKLSAgICAgICAgICByZXR1cm4g
ZWwwOwotICAgICAgICB9LAotICAgICAgICBidWlsZFJlbmRlck5vZGVzOiBmdW5jdGlvbiBidWls
ZFJlbmRlck5vZGVzKGRvbSwgZnJhZ21lbnQsIGNvbnRleHR1YWxFbGVtZW50KSB7Ci0gICAgICAg
ICAgdmFyIG1vcnBocyA9IG5ldyBBcnJheSgxKTsKLSAgICAgICAgICBtb3JwaHNbMF0gPSBkb20u
Y3JlYXRlTW9ycGhBdChmcmFnbWVudCwgMCwgMCwgY29udGV4dHVhbEVsZW1lbnQpOwotICAgICAg
ICAgIGRvbS5pbnNlcnRCb3VuZGFyeShmcmFnbWVudCwgMCk7Ci0gICAgICAgICAgZG9tLmluc2Vy
dEJvdW5kYXJ5KGZyYWdtZW50LCBudWxsKTsKLSAgICAgICAgICByZXR1cm4gbW9ycGhzOwotICAg
ICAgICB9LAotICAgICAgICBzdGF0ZW1lbnRzOiBbWyJjb250ZW50IiwgImxpbmtUaXRsZSIsIFsi
bG9jIiwgW251bGwsIFsxLCAxN10sIFsxLCAzMF1dXV1dLAotICAgICAgICBsb2NhbHM6IFtdLAot
ICAgICAgICB0ZW1wbGF0ZXM6IFtdCi0gICAgICB9OwotICAgIH0pKCk7Ci0gICAgdmFyIGNoaWxk
MSA9IChmdW5jdGlvbiAoKSB7Ci0gICAgICByZXR1cm4gewotICAgICAgICBtZXRhOiB7fSwKLSAg
ICAgICAgaXNFbXB0eTogZmFsc2UsCi0gICAgICAgIGFyaXR5OiAwLAotICAgICAgICBjYWNoZWRG
cmFnbWVudDogbnVsbCwKLSAgICAgICAgaGFzUmVuZGVyZWQ6IGZhbHNlLAotICAgICAgICBidWls
ZEZyYWdtZW50OiBmdW5jdGlvbiBidWlsZEZyYWdtZW50KGRvbSkgewotICAgICAgICAgIHZhciBl
bDAgPSBkb20uY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOwotICAgICAgICAgIHZhciBlbDEgPSBk
b20uY3JlYXRlQ29tbWVudCgiIik7Ci0gICAgICAgICAgZG9tLmFwcGVuZENoaWxkKGVsMCwgZWwx
KTsKLSAgICAgICAgICByZXR1cm4gZWwwOwotICAgICAgICB9LAotICAgICAgICBidWlsZFJlbmRl
ck5vZGVzOiBmdW5jdGlvbiBidWlsZFJlbmRlck5vZGVzKGRvbSwgZnJhZ21lbnQsIGNvbnRleHR1
YWxFbGVtZW50KSB7Ci0gICAgICAgICAgdmFyIG1vcnBocyA9IG5ldyBBcnJheSgxKTsKLSAgICAg
ICAgICBtb3JwaHNbMF0gPSBkb20uY3JlYXRlTW9ycGhBdChmcmFnbWVudCwgMCwgMCwgY29udGV4
dHVhbEVsZW1lbnQpOwotICAgICAgICAgIGRvbS5pbnNlcnRCb3VuZGFyeShmcmFnbWVudCwgMCk7
Ci0gICAgICAgICAgZG9tLmluc2VydEJvdW5kYXJ5KGZyYWdtZW50LCBudWxsKTsKLSAgICAgICAg
ICByZXR1cm4gbW9ycGhzOwotICAgICAgICB9LAotICAgICAgICBzdGF0ZW1lbnRzOiBbWyJjb250
ZW50IiwgInlpZWxkIiwgWyJsb2MiLCBbbnVsbCwgWzEsIDM4XSwgWzEsIDQ3XV1dXV0sCi0gICAg
ICAgIGxvY2FsczogW10sCi0gICAgICAgIHRlbXBsYXRlczogW10KLSAgICAgIH07Ci0gICAgfSko
KTsKLSAgICByZXR1cm4gewotICAgICAgbWV0YToge30sCi0gICAgICBpc0VtcHR5OiBmYWxzZSwK
LSAgICAgIGFyaXR5OiAwLAotICAgICAgY2FjaGVkRnJhZ21lbnQ6IG51bGwsCi0gICAgICBoYXNS
ZW5kZXJlZDogZmFsc2UsCi0gICAgICBidWlsZEZyYWdtZW50OiBmdW5jdGlvbiBidWlsZEZyYWdt
ZW50KGRvbSkgewotICAgICAgICB2YXIgZWwwID0gZG9tLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQo
KTsKLSAgICAgICAgdmFyIGVsMSA9IGRvbS5jcmVhdGVDb21tZW50KCIiKTsKLSAgICAgICAgZG9t
LmFwcGVuZENoaWxkKGVsMCwgZWwxKTsKLSAgICAgICAgcmV0dXJuIGVsMDsKLSAgICAgIH0sCi0g
ICAgICBidWlsZFJlbmRlck5vZGVzOiBmdW5jdGlvbiBidWlsZFJlbmRlck5vZGVzKGRvbSwgZnJh
Z21lbnQsIGNvbnRleHR1YWxFbGVtZW50KSB7Ci0gICAgICAgIHZhciBtb3JwaHMgPSBuZXcgQXJy
YXkoMSk7Ci0gICAgICAgIG1vcnBoc1swXSA9IGRvbS5jcmVhdGVNb3JwaEF0KGZyYWdtZW50LCAw
LCAwLCBjb250ZXh0dWFsRWxlbWVudCk7Ci0gICAgICAgIGRvbS5pbnNlcnRCb3VuZGFyeShmcmFn
bWVudCwgMCk7Ci0gICAgICAgIGRvbS5pbnNlcnRCb3VuZGFyeShmcmFnbWVudCwgbnVsbCk7Ci0g
ICAgICAgIHJldHVybiBtb3JwaHM7Ci0gICAgICB9LAotICAgICAgc3RhdGVtZW50czogW1siYmxv
Y2siLCAiaWYiLCBbWyJnZXQiLCAibGlua1RpdGxlIiwgWyJsb2MiLCBbbnVsbCwgWzEsIDZdLCBb
MSwgMTVdXV1dXSwgW10sIDAsIDEsIFsibG9jIiwgW251bGwsIFsxLCAwXSwgWzEsIDU0XV1dXV0s
Ci0gICAgICBsb2NhbHM6IFtdLAotICAgICAgdGVtcGxhdGVzOiBbY2hpbGQwLCBjaGlsZDFdCi0g
ICAgfTsKLSAgfSkoKSk7Ci19KTsKLWVuaWZlZCgiZW1iZXItaHRtbGJhcnMvdGVtcGxhdGVzL3Rv
cC1sZXZlbC12aWV3IiwgWyJleHBvcnRzIiwgImVtYmVyLXRlbXBsYXRlLWNvbXBpbGVyL3N5c3Rl
bS90ZW1wbGF0ZSJdLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyVGVtcGxhdGVDb21waWxlclN5
c3RlbVRlbXBsYXRlKSB7Ci0gICJ1c2Ugc3RyaWN0IjsKLQotICBleHBvcnRzLmRlZmF1bHQgPSBf
ZW1iZXJUZW1wbGF0ZUNvbXBpbGVyU3lzdGVtVGVtcGxhdGUuZGVmYXVsdCgoZnVuY3Rpb24gKCkg
ewotICAgIHJldHVybiB7Ci0gICAgICBtZXRhOiB7fSwKLSAgICAgIGlzRW1wdHk6IGZhbHNlLAot
ICAgICAgYXJpdHk6IDAsCi0gICAgICBjYWNoZWRGcmFnbWVudDogbnVsbCwKLSAgICAgIGhhc1Jl
bmRlcmVkOiBmYWxzZSwKLSAgICAgIGJ1aWxkRnJhZ21lbnQ6IGZ1bmN0aW9uIGJ1aWxkRnJhZ21l
bnQoZG9tKSB7Ci0gICAgICAgIHZhciBlbDAgPSBkb20uY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgp
OwotICAgICAgICB2YXIgZWwxID0gZG9tLmNyZWF0ZUNvbW1lbnQoIiIpOwotICAgICAgICBkb20u
YXBwZW5kQ2hpbGQoZWwwLCBlbDEpOwotICAgICAgICByZXR1cm4gZWwwOwotICAgICAgfSwKLSAg
ICAgIGJ1aWxkUmVuZGVyTm9kZXM6IGZ1bmN0aW9uIGJ1aWxkUmVuZGVyTm9kZXMoZG9tLCBmcmFn
bWVudCwgY29udGV4dHVhbEVsZW1lbnQpIHsKLSAgICAgICAgdmFyIG1vcnBocyA9IG5ldyBBcnJh
eSgxKTsKLSAgICAgICAgbW9ycGhzWzBdID0gZG9tLmNyZWF0ZU1vcnBoQXQoZnJhZ21lbnQsIDAs
IDAsIGNvbnRleHR1YWxFbGVtZW50KTsKLSAgICAgICAgZG9tLmluc2VydEJvdW5kYXJ5KGZyYWdt
ZW50LCAwKTsKLSAgICAgICAgZG9tLmluc2VydEJvdW5kYXJ5KGZyYWdtZW50LCBudWxsKTsKLSAg
ICAgICAgcmV0dXJuIG1vcnBoczsKLSAgICAgIH0sCi0gICAgICBzdGF0ZW1lbnRzOiBbWyJjb250
ZW50IiwgIm91dGxldCIsIFsibG9jIiwgW251bGwsIFsxLCAwXSwgWzEsIDEwXV1dXV0sCi0gICAg
ICBsb2NhbHM6IFtdLAotICAgICAgdGVtcGxhdGVzOiBbXQotICAgIH07Ci0gIH0pKCkpOwotfSk7
Ci1lbmlmZWQoJ2VtYmVyLWh0bWxiYXJzL3V0aWxzL2RlY29kZS1lYWNoLWtleScsIFsnZXhwb3J0
cycsICdlbWJlci1tZXRhbC9wcm9wZXJ0eV9nZXQnLCAnZW1iZXItbWV0YWwvdXRpbHMnXSwgZnVu
Y3Rpb24gKGV4cG9ydHMsIF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LCBfZW1iZXJNZXRhbFV0aWxz
KSB7Ci0gICd1c2Ugc3RyaWN0JzsKLQotICBleHBvcnRzLmRlZmF1bHQgPSBkZWNvZGVFYWNoS2V5
OwotCi0gIGZ1bmN0aW9uIGlkZW50aXR5KGl0ZW0pIHsKLSAgICB2YXIga2V5ID0gdW5kZWZpbmVk
OwotICAgIHZhciB0eXBlID0gdHlwZW9mIGl0ZW07Ci0KLSAgICBpZiAodHlwZSA9PT0gJ3N0cmlu
ZycgfHwgdHlwZSA9PT0gJ251bWJlcicpIHsKLSAgICAgIGtleSA9IGl0ZW07Ci0gICAgfSBlbHNl
IHsKLSAgICAgIGtleSA9IF9lbWJlck1ldGFsVXRpbHMuZ3VpZEZvcihpdGVtKTsKLSAgICB9Ci0K
LSAgICByZXR1cm4ga2V5OwotICB9Ci0KLSAgZnVuY3Rpb24gZGVjb2RlRWFjaEtleShpdGVtLCBr
ZXlQYXRoLCBpbmRleCkgewotICAgIHZhciBrZXk7Ci0KLSAgICBzd2l0Y2ggKGtleVBhdGgpIHsK
LSAgICAgIGNhc2UgJ0BpbmRleCc6Ci0gICAgICAgIGtleSA9IGluZGV4OwotICAgICAgICBicmVh
azsKLSAgICAgIGNhc2UgJ0BpZGVudGl0eSc6Ci0gICAgICAgIGtleSA9IGlkZW50aXR5KGl0ZW0p
OwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGlmIChrZXlQYXRoKSB7
Ci0gICAgICAgICAga2V5ID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KGl0ZW0sIGtleVBh
dGgpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGtleSA9IGlkZW50aXR5KGl0ZW0pOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHR5cGVvZiBrZXkgPT09ICdudW1iZXInKSB7Ci0g
ICAgICBrZXkgPSBTdHJpbmcoa2V5KTsKLSAgICB9Ci0KLSAgICByZXR1cm4ga2V5OwotICB9Ci19
KTsKLWVuaWZlZCgnZW1iZXItaHRtbGJhcnMvdXRpbHMvZXh0cmFjdC1wb3NpdGlvbmFsLXBhcmFt
cycsIFsnZXhwb3J0cycsICdlbWJlci1tZXRhbC9kZWJ1ZycsICdlbWJlci1tZXRhbC9zdHJlYW1z
L3N0cmVhbScsICdlbWJlci1tZXRhbC9zdHJlYW1zL3V0aWxzJ10sIGZ1bmN0aW9uIChleHBvcnRz
LCBfZW1iZXJNZXRhbERlYnVnLCBfZW1iZXJNZXRhbFN0cmVhbXNTdHJlYW0sIF9lbWJlck1ldGFs
U3RyZWFtc1V0aWxzKSB7Ci0gICd1c2Ugc3RyaWN0JzsKLQotICBleHBvcnRzLmRlZmF1bHQgPSBl
eHRyYWN0UG9zaXRpb25hbFBhcmFtczsKLSAgZXhwb3J0cy5wcm9jZXNzUG9zaXRpb25hbFBhcmFt
cyA9IHByb2Nlc3NQb3NpdGlvbmFsUGFyYW1zOwotCi0gIGZ1bmN0aW9uIGV4dHJhY3RQb3NpdGlv
bmFsUGFyYW1zKHJlbmRlck5vZGUsIGNvbXBvbmVudCwgcGFyYW1zLCBhdHRycykgewotICAgIHZh
ciByYWlzZUFzc2VydGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoIDw9IDQgfHwgYXJndW1lbnRzWzRd
ID09PSB1bmRlZmluZWQgPyB0cnVlIDogYXJndW1lbnRzWzRdOwotCi0gICAgdmFyIHBvc2l0aW9u
YWxQYXJhbXMgPSBjb21wb25lbnQucG9zaXRpb25hbFBhcmFtczsKLQotICAgIGlmIChwb3NpdGlv
bmFsUGFyYW1zKSB7Ci0gICAgICBwcm9jZXNzUG9zaXRpb25hbFBhcmFtcyhyZW5kZXJOb2RlLCBw
b3NpdGlvbmFsUGFyYW1zLCBwYXJhbXMsIGF0dHJzLCByYWlzZUFzc2VydGlvbnMpOwotICAgIH0K
LSAgfQotCi0gIGZ1bmN0aW9uIHByb2Nlc3NQb3NpdGlvbmFsUGFyYW1zKHJlbmRlck5vZGUsIHBv
c2l0aW9uYWxQYXJhbXMsIHBhcmFtcywgYXR0cnMpIHsKLSAgICB2YXIgcmFpc2VBc3NlcnRpb25z
ID0gYXJndW1lbnRzLmxlbmd0aCA8PSA0IHx8IGFyZ3VtZW50c1s0XSA9PT0gdW5kZWZpbmVkID8g
dHJ1ZSA6IGFyZ3VtZW50c1s0XTsKLQotICAgIHZhciBpc1Jlc3QgPSB0eXBlb2YgcG9zaXRpb25h
bFBhcmFtcyA9PT0gJ3N0cmluZyc7Ci0KLSAgICBpZiAoaXNSZXN0KSB7Ci0gICAgICBwcm9jZXNz
UmVzdFBvc2l0aW9uYWxQYXJhbWV0ZXJzKHJlbmRlck5vZGUsIHBvc2l0aW9uYWxQYXJhbXMsIHBh
cmFtcywgYXR0cnMsIHJhaXNlQXNzZXJ0aW9ucyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHByb2Nl
c3NOYW1lZFBvc2l0aW9uYWxQYXJhbWV0ZXJzKHJlbmRlck5vZGUsIHBvc2l0aW9uYWxQYXJhbXMs
IHBhcmFtcywgYXR0cnMsIHJhaXNlQXNzZXJ0aW9ucyk7Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rp
b24gcHJvY2Vzc05hbWVkUG9zaXRpb25hbFBhcmFtZXRlcnMocmVuZGVyTm9kZSwgcG9zaXRpb25h
bFBhcmFtcywgcGFyYW1zLCBhdHRycywgcmFpc2VBc3NlcnRpb25zKSB7Ci0gICAgdmFyIGxpbWl0
ID0gTWF0aC5taW4ocGFyYW1zLmxlbmd0aCwgcG9zaXRpb25hbFBhcmFtcy5sZW5ndGgpOwotCi0g
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW1pdDsgaSsrKSB7Ci0gICAgICB2YXIgcGFyYW0gPSBw
YXJhbXNbaV07Ci0KLSAgICAgIF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0KCdZb3UgY2Fubm90IHNw
ZWNpZnkgYm90aCBhIHBvc2l0aW9uYWwgcGFyYW0gKGF0IHBvc2l0aW9uICcgKyBpICsgJykgYW5k
IHRoZSBoYXNoIGFyZ3VtZW50IGAnICsgcG9zaXRpb25hbFBhcmFtc1tpXSArICdgLicsICEocG9z
aXRpb25hbFBhcmFtc1tpXSBpbiBhdHRycyAmJiByYWlzZUFzc2VydGlvbnMpKTsKLQotICAgICAg
YXR0cnNbcG9zaXRpb25hbFBhcmFtc1tpXV0gPSBwYXJhbTsKLSAgICB9Ci0gIH0KLQotICBmdW5j
dGlvbiBwcm9jZXNzUmVzdFBvc2l0aW9uYWxQYXJhbWV0ZXJzKHJlbmRlck5vZGUsIHBvc2l0aW9u
YWxQYXJhbXNOYW1lLCBwYXJhbXMsIGF0dHJzLCByYWlzZUFzc2VydGlvbnMpIHsKLSAgICB2YXIg
bmFtZUluQXR0cnMgPSAocG9zaXRpb25hbFBhcmFtc05hbWUgaW4gYXR0cnMpOwotCi0gICAgLy8g
d2hlbiBubyBwYXJhbXMgYXJlIHVzZWQsIGRvIG5vdCBvdmVycmlkZSB0aGUgc3BlY2lmaWVkIGBh
dHRycy5zdHJpbmdQYXJhbU5hbWVgIHZhbHVlCi0gICAgaWYgKHBhcmFtcy5sZW5ndGggPT09IDAg
JiYgbmFtZUluQXR0cnMpIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBJZiB0aGVy
ZSBpcyBhbHJlYWR5IGFuIGF0dHJpYnV0ZSBmb3IgdGhhdCB2YXJpYWJsZSwgZG8gbm90aGluZwot
ICAgIF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0KCdZb3UgY2Fubm90IHNwZWNpZnkgcG9zaXRpb25h
bCBwYXJhbWV0ZXJzIGFuZCB0aGUgaGFzaCBhcmd1bWVudCBgJyArIHBvc2l0aW9uYWxQYXJhbXNO
YW1lICsgJ2AuJywgIShuYW1lSW5BdHRycyAmJiByYWlzZUFzc2VydGlvbnMpKTsKLQotICAgIHZh
ciBwYXJhbXNTdHJlYW0gPSBuZXcgX2VtYmVyTWV0YWxTdHJlYW1zU3RyZWFtLlN0cmVhbShmdW5j
dGlvbiAoKSB7Ci0gICAgICByZXR1cm4gX2VtYmVyTWV0YWxTdHJlYW1zVXRpbHMucmVhZEFycmF5
KHBhcmFtcy5zbGljZSgwKSk7Ci0gICAgfSwgJ3BhcmFtcycpOwotCi0gICAgYXR0cnNbcG9zaXRp
b25hbFBhcmFtc05hbWVdID0gcGFyYW1zU3RyZWFtOwotCi0gICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBwYXJhbXMubGVuZ3RoOyBpKyspIHsKLSAgICAgIHZhciBwYXJhbSA9IHBhcmFtc1tpXTsKLSAg
ICAgIHBhcmFtc1N0cmVhbS5hZGREZXBlbmRlbmN5KHBhcmFtKTsKLSAgICB9Ci0gIH0KLX0pOwot
ZW5pZmVkKCdlbWJlci1odG1sYmFycy91dGlscy9pcy1jb21wb25lbnQnLCBbJ2V4cG9ydHMnLCAn
ZW1iZXItbWV0YWwvZmVhdHVyZXMnLCAnZW1iZXItaHRtbGJhcnMvc3lzdGVtL2xvb2t1cC1oZWxw
ZXInLCAnZW1iZXItaHRtbGJhcnMva2V5d29yZHMvY2xvc3VyZS1jb21wb25lbnQnLCAnZW1iZXIt
bWV0YWwvc3RyZWFtcy91dGlscyddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0YWxGZWF0
dXJlcywgX2VtYmVySHRtbGJhcnNTeXN0ZW1Mb29rdXBIZWxwZXIsIF9lbWJlckh0bWxiYXJzS2V5
d29yZHNDbG9zdXJlQ29tcG9uZW50LCBfZW1iZXJNZXRhbFN0cmVhbXNVdGlscykgewotICAvKioK
LSAgQG1vZHVsZSBlbWJlcgotICBAc3VibW9kdWxlIGVtYmVyLWh0bWxiYXJzCi0gICovCi0KLSAg
J3VzZSBzdHJpY3QnOwotCi0gIGV4cG9ydHMuZGVmYXVsdCA9IGlzQ29tcG9uZW50OwotCi0gIGZ1
bmN0aW9uIGhhc0NvbXBvbmVudE9yVGVtcGxhdGUob3duZXIsIHBhdGgsIG9wdGlvbnMpIHsKLSAg
ICByZXR1cm4gb3duZXIuaGFzUmVnaXN0cmF0aW9uKCdjb21wb25lbnQ6JyArIHBhdGgsIG9wdGlv
bnMpIHx8IG93bmVyLmhhc1JlZ2lzdHJhdGlvbigndGVtcGxhdGU6Y29tcG9uZW50cy8nICsgcGF0
aCwgb3B0aW9ucyk7Ci0gIH0KLQotICAvKgotICAgR2l2ZW4gYSBwYXRoIG5hbWUsIHJldHVybnMg
d2hldGhlciBvciBub3QgYSBjb21wb25lbnQgd2l0aCB0aGF0Ci0gICBuYW1lIHdhcyBmb3VuZCBp
biB0aGUgY29udGFpbmVyLgotICAqLwotCi0gIGZ1bmN0aW9uIGlzQ29tcG9uZW50KGVudiwgc2Nv
cGUsIHBhdGgpIHsKLSAgICB2YXIgb3duZXIgPSBlbnYub3duZXI7Ci0gICAgaWYgKCFvd25lcikg
ewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAodHlwZW9mIHBhdGggPT09ICdz
dHJpbmcnKSB7Ci0gICAgICBpZiAoX2VtYmVySHRtbGJhcnNTeXN0ZW1Mb29rdXBIZWxwZXIuQ09O
VEFJTlNfRE9UX0NBQ0hFLmdldChwYXRoKSkgewotICAgICAgICB2YXIgc3RyZWFtID0gZW52Lmhv
b2tzLmdldChlbnYsIHNjb3BlLCBwYXRoKTsKLSAgICAgICAgaWYgKF9lbWJlck1ldGFsU3RyZWFt
c1V0aWxzLmlzU3RyZWFtKHN0cmVhbSkpIHsKLSAgICAgICAgICB2YXIgY2VsbCA9IHN0cmVhbS52
YWx1ZSgpOwotICAgICAgICAgIGlmIChfZW1iZXJIdG1sYmFyc0tleXdvcmRzQ2xvc3VyZUNvbXBv
bmVudC5pc0NvbXBvbmVudENlbGwoY2VsbCkpIHsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgaWYgKCFfZW1iZXJIdG1sYmFy
c1N5c3RlbUxvb2t1cEhlbHBlci5DT05UQUlOU19EQVNIX0NBQ0hFLmdldChwYXRoKSkgewotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChoYXNDb21wb25lbnRPclRl
bXBsYXRlKG93bmVyLCBwYXRoKSkgewotICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gZ2xvYmFsIGNv
bXBvbmVudCBmb3VuZAotICAgICAgfSBlbHNlIHsKLSAgICAgICAgICB2YXIgbW9kdWxlTmFtZSA9
IGVudi5tZXRhICYmIGVudi5tZXRhLm1vZHVsZU5hbWU7Ci0KLSAgICAgICAgICBpZiAoIW1vZHVs
ZU5hbWUpIHsKLSAgICAgICAgICAgIC8vIFdpdGhvdXQgYSBzb3VyY2UgbW9kdWxlTmFtZSwgd2Ug
Y2FuIG5vdCBwZXJmb3JtIGxvY2FsIGxvb2t1cHMuCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgdmFyIG9wdGlvbnMgPSB7IHNvdXJjZTogJ3RlbXBs
YXRlOicgKyBtb2R1bGVOYW1lIH07Ci0KLSAgICAgICAgICByZXR1cm4gaGFzQ29tcG9uZW50T3JU
ZW1wbGF0ZShvd25lciwgcGF0aCwgb3B0aW9ucyk7Ci0gICAgICAgIH0KLSAgICB9Ci0gIH0KLX0p
OwotZW5pZmVkKCdlbWJlci1odG1sYmFycy91dGlscy9sb29rdXAtY29tcG9uZW50JywgWydleHBv
cnRzJywgJ2VtYmVyLW1ldGFsL2ZlYXR1cmVzJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJN
ZXRhbEZlYXR1cmVzKSB7Ci0gICd1c2Ugc3RyaWN0JzsKLQotICBleHBvcnRzLmRlZmF1bHQgPSBs
b29rdXBDb21wb25lbnQ7Ci0KLSAgZnVuY3Rpb24gbG9va3VwQ29tcG9uZW50UGFpcihjb21wb25l
bnRMb29rdXAsIG93bmVyLCBuYW1lLCBvcHRpb25zKSB7Ci0gICAgcmV0dXJuIHsKLSAgICAgIGNv
bXBvbmVudDogY29tcG9uZW50TG9va3VwLmNvbXBvbmVudEZvcihuYW1lLCBvd25lciwgb3B0aW9u
cyksCi0gICAgICBsYXlvdXQ6IGNvbXBvbmVudExvb2t1cC5sYXlvdXRGb3IobmFtZSwgb3duZXIs
IG9wdGlvbnMpCi0gICAgfTsKLSAgfQotCi0gIGZ1bmN0aW9uIGxvb2t1cENvbXBvbmVudChvd25l
ciwgbmFtZSwgb3B0aW9ucykgewotICAgIHZhciBjb21wb25lbnRMb29rdXAgPSBvd25lci5sb29r
dXAoJ2NvbXBvbmVudC1sb29rdXA6bWFpbicpOwotCi0gICAgdmFyIHNvdXJjZSA9IG9wdGlvbnMg
JiYgb3B0aW9ucy5zb3VyY2U7Ci0KLSAgICBpZiAoc291cmNlKSB7Ci0gICAgICB2YXIgbG9jYWxS
ZXN1bHQgPSBsb29rdXBDb21wb25lbnRQYWlyKGNvbXBvbmVudExvb2t1cCwgb3duZXIsIG5hbWUs
IG9wdGlvbnMpOwotCi0gICAgICBpZiAobG9jYWxSZXN1bHQuY29tcG9uZW50IHx8IGxvY2FsUmVz
dWx0LmxheW91dCkgewotICAgICAgICByZXR1cm4gbG9jYWxSZXN1bHQ7Ci0gICAgICB9Ci0gICAg
fQotCi0gICAgcmV0dXJuIGxvb2t1cENvbXBvbmVudFBhaXIoY29tcG9uZW50TG9va3VwLCBvd25l
ciwgbmFtZSk7Ci0gIH0KLX0pOwotZW5pZmVkKCdlbWJlci1odG1sYmFycy91dGlscy9uZXctc3Ry
ZWFtJywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFsL3N0cmVhbXMvcHJveHktc3RyZWFtJywgJ2Vt
YmVyLWh0bWxiYXJzL3V0aWxzL3N1YnNjcmliZSddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVy
TWV0YWxTdHJlYW1zUHJveHlTdHJlYW0sIF9lbWJlckh0bWxiYXJzVXRpbHNTdWJzY3JpYmUpIHsK
LSAgJ3VzZSBzdHJpY3QnOwotCi0gIGV4cG9ydHMuZGVmYXVsdCA9IG5ld1N0cmVhbTsKLQotICBm
dW5jdGlvbiBuZXdTdHJlYW0oc2NvcGUsIGtleSwgbmV3VmFsdWUsIHJlbmRlck5vZGUsIGlzU2Vs
ZikgewotICAgIHZhciBzdHJlYW0gPSBuZXcgX2VtYmVyTWV0YWxTdHJlYW1zUHJveHlTdHJlYW0u
ZGVmYXVsdChuZXdWYWx1ZSwgaXNTZWxmID8gJycgOiBrZXkpOwotICAgIGlmIChyZW5kZXJOb2Rl
KSB7Ci0gICAgICBfZW1iZXJIdG1sYmFyc1V0aWxzU3Vic2NyaWJlLmRlZmF1bHQocmVuZGVyTm9k
ZSwgc2NvcGUsIHN0cmVhbSk7Ci0gICAgfQotICAgIHNjb3BlW2tleV0gPSBzdHJlYW07Ci0gIH0K
LX0pOwotZW5pZmVkKCJlbWJlci1odG1sYmFycy91dGlscy9ub3JtYWxpemUtc2VsZiIsIFsiZXhw
b3J0cyJdLCBmdW5jdGlvbiAoZXhwb3J0cykgewotICAidXNlIHN0cmljdCI7Ci0KLSAgZXhwb3J0
cy5kZWZhdWx0ID0gbm9ybWFsaXplU2VsZjsKLQotICBmdW5jdGlvbiBub3JtYWxpemVTZWxmKHNl
bGYpIHsKLSAgICBpZiAoc2VsZiA9PT0gdW5kZWZpbmVkKSB7Ci0gICAgICByZXR1cm4gbnVsbDsK
LSAgICB9IGVsc2UgewotICAgICAgcmV0dXJuIHNlbGY7Ci0gICAgfQotICB9Ci19KTsKLWVuaWZl
ZCgnZW1iZXItaHRtbGJhcnMvdXRpbHMvc3RyaW5nJywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFs
L2NvcmUnLCAnZW1iZXItcnVudGltZS9zeXN0ZW0vc3RyaW5nJywgJ2h0bWxiYXJzLXV0aWwnXSwg
ZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1ldGFsQ29yZSwgX2VtYmVyUnVudGltZVN5c3RlbVN0
cmluZywgX2h0bWxiYXJzVXRpbCkgewotICAvKioKLSAgQG1vZHVsZSBlbWJlcgotICBAc3VibW9k
dWxlIGVtYmVyLWh0bWxiYXJzCi0gICovCi0KLSAgJ3VzZSBzdHJpY3QnOwotCi0gIC8qKgotICAg
IE1hcmsgYSBzdHJpbmcgYXMgc2FmZSBmb3IgdW5lc2NhcGVkIG91dHB1dCB3aXRoIEVtYmVyIHRl
bXBsYXRlcy4gSWYgeW91Ci0gICAgcmV0dXJuIEhUTUwgZnJvbSBhIGhlbHBlciwgdXNlIHRoaXMg
ZnVuY3Rpb24gdG8KLSAgICBlbnN1cmUgRW1iZXIncyByZW5kZXJpbmcgbGF5ZXIgZG9lcyBub3Qg
ZXNjYXBlIHRoZSBIVE1MLgotICAKLSAgICBgYGBqYXZhc2NyaXB0Ci0gICAgRW1iZXIuU3RyaW5n
Lmh0bWxTYWZlKCc8ZGl2PnNvbWVTdHJpbmc8L2Rpdj4nKQotICAgIGBgYAotICAKLSAgICBAbWV0
aG9kIGh0bWxTYWZlCi0gICAgQGZvciBFbWJlci5TdHJpbmcKLSAgICBAc3RhdGljCi0gICAgQHJl
dHVybiB7SGFuZGxlYmFycy5TYWZlU3RyaW5nfSBBIHN0cmluZyB0aGF0IHdpbGwgbm90IGJlIEhU
TUwgZXNjYXBlZCBieSBIYW5kbGViYXJzLgotICAgIEBwdWJsaWMKLSAgKi8KLSAgZnVuY3Rpb24g
aHRtbFNhZmUoc3RyKSB7Ci0gICAgaWYgKHN0ciA9PT0gbnVsbCB8fCBzdHIgPT09IHVuZGVmaW5l
ZCkgewotICAgICAgc3RyID0gJyc7Ci0gICAgfSBlbHNlIGlmICh0eXBlb2Ygc3RyICE9PSAnc3Ry
aW5nJykgewotICAgICAgc3RyID0gJycgKyBzdHI7Ci0gICAgfQotICAgIHJldHVybiBuZXcgX2h0
bWxiYXJzVXRpbC5TYWZlU3RyaW5nKHN0cik7Ci0gIH0KLQotICBfZW1iZXJSdW50aW1lU3lzdGVt
U3RyaW5nLmRlZmF1bHQuaHRtbFNhZmUgPSBodG1sU2FmZTsKLSAgaWYgKF9lbWJlck1ldGFsQ29y
ZS5kZWZhdWx0LkVYVEVORF9QUk9UT1RZUEVTID09PSB0cnVlIHx8IF9lbWJlck1ldGFsQ29yZS5k
ZWZhdWx0LkVYVEVORF9QUk9UT1RZUEVTLlN0cmluZykgewotICAgIFN0cmluZy5wcm90b3R5cGUu
aHRtbFNhZmUgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICByZXR1cm4gaHRtbFNhZmUodGhpcyk7Ci0g
ICAgfTsKLSAgfQotCi0gIGV4cG9ydHMuU2FmZVN0cmluZyA9IF9odG1sYmFyc1V0aWwuU2FmZVN0
cmluZzsKLSAgZXhwb3J0cy5odG1sU2FmZSA9IGh0bWxTYWZlOwotICBleHBvcnRzLmVzY2FwZUV4
cHJlc3Npb24gPSBfaHRtbGJhcnNVdGlsLmVzY2FwZUV4cHJlc3Npb247Ci19KTsKLWVuaWZlZCgn
ZW1iZXItaHRtbGJhcnMvdXRpbHMvc3Vic2NyaWJlJywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFs
L3N0cmVhbXMvdXRpbHMnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1ldGFsU3RyZWFtc1V0
aWxzKSB7Ci0gICd1c2Ugc3RyaWN0JzsKLQotICBleHBvcnRzLmRlZmF1bHQgPSBzdWJzY3JpYmU7
Ci0KLSAgZnVuY3Rpb24gc3Vic2NyaWJlKG5vZGUsIGVudiwgc2NvcGUsIHN0cmVhbSkgewotICAg
IGlmICghX2VtYmVyTWV0YWxTdHJlYW1zVXRpbHMuaXNTdHJlYW0oc3RyZWFtKSkgewotICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICB2YXIgY29tcG9uZW50ID0gc2NvcGUuZ2V0Q29tcG9uZW50KCk7
Ci0gICAgdmFyIHVuc3Vic2NyaWJlcnMgPSBub2RlLnN0cmVhbVVuc3Vic2NyaWJlcnMgPSBub2Rl
LnN0cmVhbVVuc3Vic2NyaWJlcnMgfHwgW107Ci0KLSAgICB1bnN1YnNjcmliZXJzLnB1c2goc3Ry
ZWFtLnN1YnNjcmliZShmdW5jdGlvbiAoKSB7Ci0gICAgICBub2RlLmlzRGlydHkgPSB0cnVlOwot
Ci0gICAgICAvLyBXaGVuZXZlciBhIHJlbmRlciBub2RlIGRpcmVjdGx5IGluc2lkZSBhIGNvbXBv
bmVudCBiZWNvbWVzCi0gICAgICAvLyBkaXJ0eSwgd2Ugd2FudCB0byBpbnZva2UgdGhlIHdpbGxS
ZW5kZXJFbGVtZW50IGFuZAotICAgICAgLy8gZGlkUmVuZGVyRWxlbWVudCBsaWZlY3ljbGUgaG9v
a3MuIEZyb20gdGhlIHBlcnNwZWN0aXZlIG9mIHRoZQotICAgICAgLy8gcHJvZ3JhbW1pbmcgbW9k
ZWwsIHdoZW5ldmVyIGFueXRoaW5nIGluIHRoZSBET00gY2hhbmdlcywgYQotICAgICAgLy8gInJl
LXJlbmRlciIgaGFzIG9jY3VyZWQuCi0gICAgICBpZiAoY29tcG9uZW50ICYmIGNvbXBvbmVudC5f
cmVuZGVyTm9kZSkgewotICAgICAgICBjb21wb25lbnQuX3JlbmRlck5vZGUuaXNEaXJ0eSA9IHRy
dWU7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChub2RlLmdldFN0YXRlKCkubWFuYWdlcikgewotICAg
ICAgICBub2RlLnNob3VsZFJlY2VpdmVBdHRycyA9IHRydWU7Ci0gICAgICB9Ci0KLSAgICAgIG5v
ZGUub3duZXJOb2RlLmVtYmVyVmlldy5zY2hlZHVsZVJldmFsaWRhdGUobm9kZSwgX2VtYmVyTWV0
YWxTdHJlYW1zVXRpbHMubGFiZWxGb3Ioc3RyZWFtKSk7Ci0gICAgfSkpOwotICB9Ci19KTsKLWVu
aWZlZCgnZW1iZXItaHRtbGJhcnMvdXRpbHMvdXBkYXRlLXNjb3BlJywgWydleHBvcnRzJywgJ2Vt
YmVyLW1ldGFsL3N0cmVhbXMvcHJveHktc3RyZWFtJywgJ2VtYmVyLWh0bWxiYXJzL3V0aWxzL3N1
YnNjcmliZSddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0YWxTdHJlYW1zUHJveHlTdHJl
YW0sIF9lbWJlckh0bWxiYXJzVXRpbHNTdWJzY3JpYmUpIHsKLSAgJ3VzZSBzdHJpY3QnOwotCi0g
IGV4cG9ydHMuZGVmYXVsdCA9IHVwZGF0ZVNjb3BlOwotCi0gIGZ1bmN0aW9uIHVwZGF0ZVNjb3Bl
KHNjb3BlLCBrZXksIG5ld1ZhbHVlLCByZW5kZXJOb2RlLCBpc1NlbGYpIHsKLSAgICB2YXIgZXhp
c3RpbmcgPSBzY29wZVtrZXldOwotCi0gICAgaWYgKGV4aXN0aW5nKSB7Ci0gICAgICBleGlzdGlu
Zy5zZXRTb3VyY2UobmV3VmFsdWUpOwotICAgIH0gZWxzZSB7Ci0gICAgICB2YXIgc3RyZWFtID0g
bmV3IF9lbWJlck1ldGFsU3RyZWFtc1Byb3h5U3RyZWFtLmRlZmF1bHQobmV3VmFsdWUsIGlzU2Vs
ZiA/IG51bGwgOiBrZXkpOwotICAgICAgaWYgKHJlbmRlck5vZGUpIHsKLSAgICAgICAgX2VtYmVy
SHRtbGJhcnNVdGlsc1N1YnNjcmliZS5kZWZhdWx0KHJlbmRlck5vZGUsIHNjb3BlLCBzdHJlYW0p
OwotICAgICAgfQotICAgICAgc2NvcGVba2V5XSA9IHN0cmVhbTsKLSAgICB9Ci0gIH0KLX0pOwot
ZW5pZmVkKCdlbWJlci1tZXRhbC12aWV3cy9odG1sYmFycy1yZW5kZXJlcicsIFsnZXhwb3J0cycs
ICdlbWJlci1tZXRhbC9ydW5fbG9vcCcsICdlbWJlci1tZXRhbC9wcm9wZXJ0eV9nZXQnLCAnZW1i
ZXItbWV0YWwvcHJvcGVydHlfc2V0JywgJ2VtYmVyLW1ldGFsL2Fzc2lnbicsICdlbWJlci1tZXRh
bC9zZXRfcHJvcGVydGllcycsICdlbWJlci12aWV3cy9zeXN0ZW0vYnVpbGQtY29tcG9uZW50LXRl
bXBsYXRlJywgJ2VtYmVyLW1ldGFsL2Vudmlyb25tZW50JywgJ2h0bWxiYXJzLXJ1bnRpbWUnXSwg
ZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1ldGFsUnVuX2xvb3AsIF9lbWJlck1ldGFsUHJvcGVy
dHlfZ2V0LCBfZW1iZXJNZXRhbFByb3BlcnR5X3NldCwgX2VtYmVyTWV0YWxBc3NpZ24sIF9lbWJl
ck1ldGFsU2V0X3Byb3BlcnRpZXMsIF9lbWJlclZpZXdzU3lzdGVtQnVpbGRDb21wb25lbnRUZW1w
bGF0ZSwgX2VtYmVyTWV0YWxFbnZpcm9ubWVudCwgX2h0bWxiYXJzUnVudGltZSkgewotICAndXNl
IHN0cmljdCc7Ci0KLSAgZXhwb3J0cy5SZW5kZXJlciA9IFJlbmRlcmVyOwotICBleHBvcnRzLk1v
cnBoU2V0ID0gTW9ycGhTZXQ7Ci0KLSAgZnVuY3Rpb24gUmVuZGVyZXIoZG9tSGVscGVyKSB7Ci0g
ICAgdmFyIF9yZWYgPSBhcmd1bWVudHMubGVuZ3RoIDw9IDEgfHwgYXJndW1lbnRzWzFdID09PSB1
bmRlZmluZWQgPyB7fSA6IGFyZ3VtZW50c1sxXTsKLQotICAgIHZhciBkZXN0aW5lZEZvckRPTSA9
IF9yZWYuZGVzdGluZWRGb3JET007Ci0KLSAgICB0aGlzLl9kb20gPSBkb21IZWxwZXI7Ci0KLSAg
ICAvLyBUaGlzIGZsYWcgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIHJlc3VsdGluZyByZW5kZXJlZCBl
bGVtZW50IHdpbGwgYmUKLSAgICAvLyBpbnNlcnRlZCBpbnRvIHRoZSBET00uIFRoaXMgc2hvdWxk
IGJlIHNldCB0byBgZmFsc2VgIGlmIHRoZSByZW5kZXJlZAotICAgIC8vIGVsZW1lbnQgaXMgZ29p
bmcgdG8gYmUgc2VyaWFsaXplZCB0byBIVE1MIHdpdGhvdXQgYmVpbmcgaW5zZXJ0ZWQgaW50bwot
ICAgIC8vIHRoZSBET00gKGUuZy4sIGluIEZhc3RCb290IG1vZGUpLiBCeSBkZWZhdWx0LCB0aGlz
IGZsYWcgaXMgdGhlIHNhbWUKLSAgICAvLyBhcyB3aGV0aGVyIHdlIGFyZSBydW5uaW5nIGluIGFu
IGVudmlyb25tZW50IHdpdGggRE9NLCBidXQgbWF5IGJlCi0gICAgLy8gb3ZlcnJpZGRlbi4KLSAg
ICB0aGlzLl9kZXN0aW5lZEZvckRPTSA9IGRlc3RpbmVkRm9yRE9NID09PSB1bmRlZmluZWQgPyBf
ZW1iZXJNZXRhbEVudmlyb25tZW50LmRlZmF1bHQuaGFzRE9NIDogZGVzdGluZWRGb3JET007Ci0g
IH0KLQotICBSZW5kZXJlci5wcm90b3R5cGUucHJlcmVuZGVyVG9wTGV2ZWxWaWV3ID0gZnVuY3Rp
b24gUmVuZGVyZXJfcHJlcmVuZGVyVG9wTGV2ZWxWaWV3KHZpZXcsIHJlbmRlck5vZGUpIHsKLSAg
ICBpZiAodmlldy5fc3RhdGUgPT09ICdpbkRPTScpIHsKLSAgICAgIHRocm93IG5ldyBFcnJvcign
WW91IGNhbm5vdCBpbnNlcnQgYSBWaWV3IHRoYXQgaGFzIGFscmVhZHkgYmVlbiByZW5kZXJlZCcp
OwotICAgIH0KLSAgICB2aWV3Lm93bmVyVmlldyA9IHJlbmRlck5vZGUuZW1iZXJWaWV3ID0gdmll
dzsKLSAgICB2aWV3Ll9yZW5kZXJOb2RlID0gcmVuZGVyTm9kZTsKLQotICAgIHZhciBsYXlvdXQg
PSBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodmlldywgJ2xheW91dCcpOwotICAgIHZhciB0
ZW1wbGF0ZSA9IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh2aWV3LCAndGVtcGxhdGUnKTsK
LQotICAgIHZhciBjb21wb25lbnRJbmZvID0geyBjb21wb25lbnQ6IHZpZXcsIGxheW91dDogbGF5
b3V0IH07Ci0KLSAgICB2YXIgYmxvY2sgPSBfZW1iZXJWaWV3c1N5c3RlbUJ1aWxkQ29tcG9uZW50
VGVtcGxhdGUuZGVmYXVsdChjb21wb25lbnRJbmZvLCB7fSwgewotICAgICAgc2VsZjogdmlldywK
LSAgICAgIHRlbXBsYXRlczogdGVtcGxhdGUgPyB7IGRlZmF1bHQ6IHRlbXBsYXRlLnJhdyB9IDog
dW5kZWZpbmVkCi0gICAgfSkuYmxvY2s7Ci0KLSAgICB2aWV3LnJlbmRlckJsb2NrKGJsb2NrLCBy
ZW5kZXJOb2RlKTsKLSAgICB2aWV3Lmxhc3RSZXN1bHQgPSByZW5kZXJOb2RlLmxhc3RSZXN1bHQ7
Ci0gICAgdGhpcy5jbGVhclJlbmRlcmVkVmlld3Modmlldy5lbnYpOwotICB9OwotCi0gIFJlbmRl
cmVyLnByb3RvdHlwZS5yZW5kZXJUb3BMZXZlbFZpZXcgPSBmdW5jdGlvbiBSZW5kZXJlcl9yZW5k
ZXJUb3BMZXZlbFZpZXcodmlldywgcmVuZGVyTm9kZSkgewotICAgIC8vIENoZWNrIHRvIHNlZSBp
ZiBpbnNlcnRpb24gaGFzIGJlZW4gY2FuY2VsZWQuCi0gICAgaWYgKHZpZXcuX3dpbGxJbnNlcnQp
IHsKLSAgICAgIHZpZXcuX3dpbGxJbnNlcnQgPSBmYWxzZTsKLSAgICAgIHRoaXMucHJlcmVuZGVy
VG9wTGV2ZWxWaWV3KHZpZXcsIHJlbmRlck5vZGUpOwotICAgICAgdGhpcy5kaXNwYXRjaExpZmVj
eWNsZUhvb2tzKHZpZXcuZW52KTsKLSAgICB9Ci0gIH07Ci0KLSAgUmVuZGVyZXIucHJvdG90eXBl
LnJldmFsaWRhdGVUb3BMZXZlbFZpZXcgPSBmdW5jdGlvbiBSZW5kZXJlcl9yZXZhbGlkYXRlVG9w
TGV2ZWxWaWV3KHZpZXcpIHsKLSAgICAvLyBUaGlzIGd1YXJkIHByZXZlbnRzIHJldmFsaWRhdGlv
biBvbiBhbiBhbHJlYWR5LWRlc3Ryb3llZCB2aWV3LgotICAgIGlmICh2aWV3Ll9yZW5kZXJOb2Rl
Lmxhc3RSZXN1bHQpIHsKLSAgICAgIHZpZXcuX3JlbmRlck5vZGUubGFzdFJlc3VsdC5yZXZhbGlk
YXRlKHZpZXcuZW52KTsKLSAgICAgIC8vIHN1cHBvcnRzIGNyZWF0ZUVsZW1lbnQsIHdoaWNoIG9w
ZXJhdGVzIHdpdGhvdXQgbW92aW5nIHRoZSB2aWV3IGludG8KLSAgICAgIC8vIHRoZSBpbkRPTSBz
dGF0ZS4KLSAgICAgIGlmICh2aWV3Ll9zdGF0ZSA9PT0gJ2luRE9NJykgewotICAgICAgICB0aGlz
LmRpc3BhdGNoTGlmZWN5Y2xlSG9va3Modmlldy5lbnYpOwotICAgICAgfQotICAgICAgdGhpcy5j
bGVhclJlbmRlcmVkVmlld3Modmlldy5lbnYpOwotICAgIH0KLSAgfTsKLQotICBSZW5kZXJlci5w
cm90b3R5cGUuZGlzcGF0Y2hMaWZlY3ljbGVIb29rcyA9IGZ1bmN0aW9uIFJlbmRlcmVyX2Rpc3Bh
dGNoTGlmZWN5Y2xlSG9va3MoZW52KSB7Ci0gICAgdmFyIG93bmVyVmlldyA9IGVudi52aWV3Owot
Ci0gICAgdmFyIGxpZmVjeWNsZUhvb2tzID0gZW52LmxpZmVjeWNsZUhvb2tzOwotICAgIHZhciBp
LCBob29rOwotCi0gICAgZm9yIChpID0gMDsgaSA8IGxpZmVjeWNsZUhvb2tzLmxlbmd0aDsgaSsr
KSB7Ci0gICAgICBob29rID0gbGlmZWN5Y2xlSG9va3NbaV07Ci0gICAgICBvd25lclZpZXcuX2Rp
c3BhdGNoaW5nID0gaG9vay50eXBlOwotCi0gICAgICBzd2l0Y2ggKGhvb2sudHlwZSkgewotICAg
ICAgICBjYXNlICdkaWRJbnNlcnRFbGVtZW50JzoKLSAgICAgICAgICB0aGlzLmRpZEluc2VydEVs
ZW1lbnQoaG9vay52aWV3KTticmVhazsKLSAgICAgICAgY2FzZSAnZGlkVXBkYXRlJzoKLSAgICAg
ICAgICB0aGlzLmRpZFVwZGF0ZShob29rLnZpZXcpO2JyZWFrOwotICAgICAgfQotCi0gICAgICB0
aGlzLmRpZFJlbmRlcihob29rLnZpZXcpOwotICAgIH0KLQotICAgIG93bmVyVmlldy5fZGlzcGF0
Y2hpbmcgPSBudWxsOwotICAgIGVudi5saWZlY3ljbGVIb29rcy5sZW5ndGggPSAwOwotICB9Owot
Ci0gIFJlbmRlcmVyLnByb3RvdHlwZS5lbnN1cmVWaWV3Tm90UmVuZGVyaW5nID0gZnVuY3Rpb24g
UmVuZGVyZXJfZW5zdXJlVmlld05vdFJlbmRlcmluZyh2aWV3KSB7Ci0gICAgdmFyIGVudiA9IHZp
ZXcub3duZXJWaWV3LmVudjsKLSAgICBpZiAoZW52ICYmIGVudi5yZW5kZXJlZFZpZXdzLmluZGV4
T2Yodmlldy5lbGVtZW50SWQpICE9PSAtMSkgewotICAgICAgdGhyb3cgbmV3IEVycm9yKCdTb21l
dGhpbmcgeW91IGRpZCBjYXVzZWQgYSB2aWV3IHRvIHJlLXJlbmRlciBhZnRlciBpdCByZW5kZXJl
ZCBidXQgYmVmb3JlIGl0IHdhcyBpbnNlcnRlZCBpbnRvIHRoZSBET00uJyk7Ci0gICAgfQotICB9
OwotCi0gIGZ1bmN0aW9uIE1vcnBoU2V0KCkgewotICAgIHRoaXMubW9ycGhzID0gW107Ci0gIH0K
LQotICBNb3JwaFNldC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKG1vcnBoKSB7Ci0gICAgdGhp
cy5tb3JwaHMucHVzaChtb3JwaCk7Ci0gICAgbW9ycGguc2VlbiA9IHRydWU7Ci0gIH07Ci0KLSAg
TW9ycGhTZXQucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uIChtb3JwaCkgewotICAgIHJldHVybiBt
b3JwaC5zZWVuOwotICB9OwotCi0gIE1vcnBoU2V0LnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9u
ICgpIHsKLSAgICB2YXIgbW9ycGhzID0gdGhpcy5tb3JwaHM7Ci0gICAgZm9yICh2YXIgaSA9IDAs
IGwgPSBtb3JwaHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7Ci0gICAgICBtb3JwaHNbaV0uc2VlbiA9
IGZhbHNlOwotICAgIH0KLQotICAgIHRoaXMubW9ycGhzID0gW107Ci0gIH07Ci0KLSAgUmVuZGVy
ZXIucHJvdG90eXBlLmNsZWFyUmVuZGVyZWRWaWV3cyA9IGZ1bmN0aW9uIFJlbmRlcmVyX2NsZWFy
UmVuZGVyZWRWaWV3cyhlbnYpIHsKLSAgICBlbnYucmVuZGVyZWROb2Rlcy5jbGVhcigpOwotICAg
IGVudi5yZW5kZXJlZFZpZXdzLmxlbmd0aCA9IDA7Ci0gIH07Ci0KLSAgLy8gVGhpcyBlbnRyeSBw
b2ludCBpcyBjYWxsZWQgZnJvbSB0b3AtbGV2ZWwgYHZpZXcuYXBwZW5kVG9gLgotICBSZW5kZXJl
ci5wcm90b3R5cGUuYXBwZW5kVG8gPSBmdW5jdGlvbiBSZW5kZXJlcl9hcHBlbmRUbyh2aWV3LCB0
YXJnZXQpIHsKLSAgICB2YXIgbW9ycGggPSB0aGlzLl9kb20uYXBwZW5kTW9ycGgodGFyZ2V0KTsK
LSAgICBtb3JwaC5vd25lck5vZGUgPSBtb3JwaDsKLSAgICB2aWV3Ll93aWxsSW5zZXJ0ID0gdHJ1
ZTsKLSAgICBfZW1iZXJNZXRhbFJ1bl9sb29wLmRlZmF1bHQuc2NoZWR1bGUoJ3JlbmRlcicsIHRo
aXMsIHRoaXMucmVuZGVyVG9wTGV2ZWxWaWV3LCB2aWV3LCBtb3JwaCk7Ci0gIH07Ci0KLSAgUmVu
ZGVyZXIucHJvdG90eXBlLnJlcGxhY2VJbiA9IGZ1bmN0aW9uIFJlbmRlcmVyX3JlcGxhY2VJbih2
aWV3LCB0YXJnZXQpIHsKLSAgICB2YXIgbW9ycGggPSB0aGlzLl9kb20ucmVwbGFjZUNvbnRlbnRX
aXRoTW9ycGgodGFyZ2V0KTsKLSAgICBtb3JwaC5vd25lck5vZGUgPSBtb3JwaDsKLSAgICB2aWV3
Ll93aWxsSW5zZXJ0ID0gdHJ1ZTsKLSAgICBfZW1iZXJNZXRhbFJ1bl9sb29wLmRlZmF1bHQuc2No
ZWR1bGVPbmNlKCdyZW5kZXInLCB0aGlzLCB0aGlzLnJlbmRlclRvcExldmVsVmlldywgdmlldywg
bW9ycGgpOwotICB9OwotCi0gIFJlbmRlcmVyLnByb3RvdHlwZS5jcmVhdGVFbGVtZW50ID0gZnVu
Y3Rpb24gUmVuZGVyZXJfY3JlYXRlRWxlbWVudCh2aWV3KSB7Ci0gICAgdmFyIG1vcnBoID0gdGhp
cy5fZG9tLmNyZWF0ZUZyYWdtZW50TW9ycGgoKTsKLSAgICBtb3JwaC5vd25lck5vZGUgPSBtb3Jw
aDsKLSAgICB0aGlzLnByZXJlbmRlclRvcExldmVsVmlldyh2aWV3LCBtb3JwaCk7Ci0gIH07Ci0K
LSAgUmVuZGVyZXIucHJvdG90eXBlLmRpZENyZWF0ZUVsZW1lbnQgPSBmdW5jdGlvbiAodmlldywg
ZWxlbWVudCkgewotICAgIGlmIChlbGVtZW50KSB7Ci0gICAgICB2aWV3LmVsZW1lbnQgPSBlbGVt
ZW50OwotICAgIH0KLQotICAgIGlmICh2aWV3Ll90cmFuc2l0aW9uVG8pIHsKLSAgICAgIHZpZXcu
X3RyYW5zaXRpb25UbygnaGFzRWxlbWVudCcpOwotICAgIH0KLSAgfTsgLy8gaGFzRWxlbWVudAot
Ci0gIFJlbmRlcmVyLnByb3RvdHlwZS53aWxsSW5zZXJ0RWxlbWVudCA9IGZ1bmN0aW9uICh2aWV3
KSB7Ci0gICAgaWYgKHZpZXcudHJpZ2dlcikgewotICAgICAgdmlldy50cmlnZ2VyKCd3aWxsSW5z
ZXJ0RWxlbWVudCcpOwotICAgIH0KLSAgfTsgLy8gV2lsbCBwbGFjZSBpbnRvIERPTS4KLQotICBS
ZW5kZXJlci5wcm90b3R5cGUuc2V0QXR0cnMgPSBmdW5jdGlvbiAodmlldywgYXR0cnMpIHsKLSAg
ICBfZW1iZXJNZXRhbFByb3BlcnR5X3NldC5zZXQodmlldywgJ2F0dHJzJywgYXR0cnMpOwotICB9
OyAvLyBTZXQgYXR0cnMgdGhlIGZpcnN0IHRpbWUuCi0KLSAgUmVuZGVyZXIucHJvdG90eXBlLmNv
bXBvbmVudEluaXRBdHRycyA9IGZ1bmN0aW9uIChjb21wb25lbnQsIGF0dHJzKSB7Ci0gICAgY29t
cG9uZW50LnRyaWdnZXIoJ2RpZEluaXRBdHRycycsIHsgYXR0cnM6IGF0dHJzIH0pOwotICAgIGNv
bXBvbmVudC50cmlnZ2VyKCdkaWRSZWNlaXZlQXR0cnMnLCB7IG5ld0F0dHJzOiBhdHRycyB9KTsK
LSAgfTsgLy8gU2V0IGF0dHJzIHRoZSBmaXJzdCB0aW1lLgotCi0gIFJlbmRlcmVyLnByb3RvdHlw
ZS5kaWRJbnNlcnRFbGVtZW50ID0gZnVuY3Rpb24gKHZpZXcpIHsKLSAgICBpZiAodmlldy5fdHJh
bnNpdGlvblRvKSB7Ci0gICAgICB2aWV3Ll90cmFuc2l0aW9uVG8oJ2luRE9NJyk7Ci0gICAgfQot
Ci0gICAgaWYgKHZpZXcudHJpZ2dlcikgewotICAgICAgdmlldy50cmlnZ2VyKCdkaWRJbnNlcnRF
bGVtZW50Jyk7Ci0gICAgfQotICB9OyAvLyBpbkRPTSAvLyBQbGFjZWQgaW50byBET00uCi0KLSAg
UmVuZGVyZXIucHJvdG90eXBlLmRpZFVwZGF0ZSA9IGZ1bmN0aW9uICh2aWV3KSB7Ci0gICAgaWYg
KHZpZXcudHJpZ2dlcikgewotICAgICAgdmlldy50cmlnZ2VyKCdkaWRVcGRhdGUnKTsKLSAgICB9
Ci0gIH07Ci0KLSAgUmVuZGVyZXIucHJvdG90eXBlLmRpZFJlbmRlciA9IGZ1bmN0aW9uICh2aWV3
KSB7Ci0gICAgaWYgKHZpZXcudHJpZ2dlcikgewotICAgICAgdmlldy50cmlnZ2VyKCdkaWRSZW5k
ZXInKTsKLSAgICB9Ci0gIH07Ci0KLSAgUmVuZGVyZXIucHJvdG90eXBlLnVwZGF0ZUF0dHJzID0g
ZnVuY3Rpb24gKHZpZXcsIGF0dHJzKSB7Ci0gICAgdGhpcy5zZXRBdHRycyh2aWV3LCBhdHRycyk7
Ci0gIH07IC8vIFNldHRpbmcgbmV3IGF0dHJzLgotCi0gIFJlbmRlcmVyLnByb3RvdHlwZS5jb21w
b25lbnRVcGRhdGVBdHRycyA9IGZ1bmN0aW9uIChjb21wb25lbnQsIG5ld0F0dHJzKSB7Ci0gICAg
dmFyIG9sZEF0dHJzID0gbnVsbDsKLQotICAgIGlmIChjb21wb25lbnQuYXR0cnMpIHsKLSAgICAg
IG9sZEF0dHJzID0gX2VtYmVyTWV0YWxBc3NpZ24uZGVmYXVsdCh7fSwgY29tcG9uZW50LmF0dHJz
KTsKLSAgICAgIF9lbWJlck1ldGFsU2V0X3Byb3BlcnRpZXMuZGVmYXVsdChjb21wb25lbnQuYXR0
cnMsIG5ld0F0dHJzKTsKLSAgICB9IGVsc2UgewotICAgICAgX2VtYmVyTWV0YWxQcm9wZXJ0eV9z
ZXQuc2V0KGNvbXBvbmVudCwgJ2F0dHJzJywgbmV3QXR0cnMpOwotICAgIH0KLQotICAgIGNvbXBv
bmVudC50cmlnZ2VyKCdkaWRVcGRhdGVBdHRycycsIHsgb2xkQXR0cnM6IG9sZEF0dHJzLCBuZXdB
dHRyczogbmV3QXR0cnMgfSk7Ci0gICAgY29tcG9uZW50LnRyaWdnZXIoJ2RpZFJlY2VpdmVBdHRy
cycsIHsgb2xkQXR0cnM6IG9sZEF0dHJzLCBuZXdBdHRyczogbmV3QXR0cnMgfSk7Ci0gIH07Ci0K
LSAgUmVuZGVyZXIucHJvdG90eXBlLndpbGxVcGRhdGUgPSBmdW5jdGlvbiAodmlldywgYXR0cnMp
IHsKLSAgICBpZiAodmlldy5fd2lsbFVwZGF0ZSkgewotICAgICAgdmlldy5fd2lsbFVwZGF0ZShh
dHRycyk7Ci0gICAgfQotICB9OwotCi0gIFJlbmRlcmVyLnByb3RvdHlwZS5jb21wb25lbnRXaWxs
VXBkYXRlID0gZnVuY3Rpb24gKGNvbXBvbmVudCkgewotICAgIGNvbXBvbmVudC50cmlnZ2VyKCd3
aWxsVXBkYXRlJyk7Ci0gIH07Ci0KLSAgUmVuZGVyZXIucHJvdG90eXBlLndpbGxSZW5kZXIgPSBm
dW5jdGlvbiAodmlldykgewotICAgIGlmICh2aWV3Ll93aWxsUmVuZGVyKSB7Ci0gICAgICB2aWV3
Ll93aWxsUmVuZGVyKCk7Ci0gICAgfQotICB9OwotCi0gIFJlbmRlcmVyLnByb3RvdHlwZS5jb21w
b25lbnRXaWxsUmVuZGVyID0gZnVuY3Rpb24gKGNvbXBvbmVudCkgewotICAgIGNvbXBvbmVudC50
cmlnZ2VyKCd3aWxsUmVuZGVyJyk7Ci0gIH07Ci0KLSAgUmVuZGVyZXIucHJvdG90eXBlLnJlcmVu
ZGVyID0gZnVuY3Rpb24gKHZpZXcpIHsKLSAgICB2YXIgcmVuZGVyTm9kZSA9IHZpZXcuX3JlbmRl
ck5vZGU7Ci0KLSAgICByZW5kZXJOb2RlLmlzRGlydHkgPSB0cnVlOwotICAgIF9odG1sYmFyc1J1
bnRpbWUuaW50ZXJuYWwudmlzaXRDaGlsZHJlbihyZW5kZXJOb2RlLmNoaWxkTm9kZXMsIGZ1bmN0
aW9uIChub2RlKSB7Ci0gICAgICBpZiAobm9kZS5nZXRTdGF0ZSgpLm1hbmFnZXIpIHsKLSAgICAg
ICAgbm9kZS5zaG91bGRSZWNlaXZlQXR0cnMgPSB0cnVlOwotICAgICAgfQotICAgICAgbm9kZS5p
c0RpcnR5ID0gdHJ1ZTsKLSAgICB9KTsKLQotICAgIHJlbmRlck5vZGUub3duZXJOb2RlLmVtYmVy
Vmlldy5zY2hlZHVsZVJldmFsaWRhdGUocmVuZGVyTm9kZSwgdmlldy50b1N0cmluZygpLCAncmVy
ZW5kZXJpbmcnKTsKLSAgfTsKLQotICBSZW5kZXJlci5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rp
b24gKHZpZXcsIHNob3VsZERlc3Ryb3kpIHsKLSAgICB0aGlzLndpbGxEZXN0cm95RWxlbWVudCh2
aWV3KTsKLQotICAgIHZpZXcuX3dpbGxSZW1vdmVFbGVtZW50ID0gdHJ1ZTsKLSAgICBfZW1iZXJN
ZXRhbFJ1bl9sb29wLmRlZmF1bHQuc2NoZWR1bGUoJ3JlbmRlcicsIHRoaXMsIHRoaXMucmVuZGVy
RWxlbWVudFJlbW92YWwsIHZpZXcpOwotICB9OwotCi0gIFJlbmRlcmVyLnByb3RvdHlwZS5yZW5k
ZXJFbGVtZW50UmVtb3ZhbCA9IGZ1bmN0aW9uIFJlbmRlcmVyX3JlbmRlckVsZW1lbnRSZW1vdmFs
KHZpZXcpIHsKLSAgICAvLyBVc2UgdGhlIF93aWxsUmVtb3ZlRWxlbWVudCBmbGFnIHRvIGF2b2lk
IG11bGl0cGxlIHJlbW92YWwgYXR0ZW1wdHMgaW4KLSAgICAvLyBjYXNlIG1hbnkgaGF2ZSBiZWVu
IHNjaGVkdWxlZC4gVGhpcyBzaG91bGQgYmUgbW9yZSBwZXJmb3JtYW50IHRoYW4gdXNpbmcKLSAg
ICAvLyBgc2NoZWR1bGVPbmNlYC4KLSAgICBpZiAodmlldy5fd2lsbFJlbW92ZUVsZW1lbnQpIHsK
LSAgICAgIHZpZXcuX3dpbGxSZW1vdmVFbGVtZW50ID0gZmFsc2U7Ci0KLSAgICAgIGlmICh2aWV3
Ll9yZW5kZXJOb2RlICYmIHZpZXcuZWxlbWVudCAmJiB2aWV3LmVsZW1lbnQucGFyZW50Tm9kZSkg
ewotICAgICAgICB2aWV3Ll9yZW5kZXJOb2RlLmNsZWFyKCk7Ci0gICAgICB9Ci0gICAgICB0aGlz
LmRpZERlc3Ryb3lFbGVtZW50KHZpZXcpOwotICAgIH0KLSAgfTsKLQotICBSZW5kZXJlci5wcm90
b3R5cGUud2lsbFJlbW92ZUVsZW1lbnQgPSBmdW5jdGlvbiAoKSAvKnZpZXcqL3t9OwotCi0gIFJl
bmRlcmVyLnByb3RvdHlwZS53aWxsRGVzdHJveUVsZW1lbnQgPSBmdW5jdGlvbiAodmlldykgewot
ICAgIGlmICh2aWV3Ll93aWxsRGVzdHJveUVsZW1lbnQpIHsKLSAgICAgIHZpZXcuX3dpbGxEZXN0
cm95RWxlbWVudCgpOwotICAgIH0KLSAgICBpZiAodmlldy50cmlnZ2VyKSB7Ci0gICAgICB2aWV3
LnRyaWdnZXIoJ3dpbGxEZXN0cm95RWxlbWVudCcpOwotICAgICAgdmlldy50cmlnZ2VyKCd3aWxs
Q2xlYXJSZW5kZXInKTsKLSAgICB9Ci0KLSAgICBpZiAodmlldy5fdHJhbnNpdGlvblRvKSB7Ci0g
ICAgICB2aWV3Ll90cmFuc2l0aW9uVG8oJ2Rlc3Ryb3lpbmcnKTsKLSAgICB9Ci0gIH07Ci0KLSAg
UmVuZGVyZXIucHJvdG90eXBlLmRpZERlc3Ryb3lFbGVtZW50ID0gZnVuY3Rpb24gKHZpZXcpIHsK
LSAgICB2aWV3LmVsZW1lbnQgPSBudWxsOwotCi0gICAgLy8gVmlld3MgdGhhdCBhcmUgYmVpbmcg
ZGVzdHJveWVkIHNob3VsZCBuZXZlciBnbyBiYWNrIHRvIHRoZSBwcmVSZW5kZXIgc3RhdGUuCi0g
ICAgLy8gSG93ZXZlciBpZiB3ZSdyZSBqdXN0IGRlc3Ryb3lpbmcgYW4gZWxlbWVudCBvbiBhIHZp
ZXcgKGFzIGlzIHRoZSBjYXNlIHdoZW4KLSAgICAvLyB1c2luZyBWaWV3I3JlbW92ZSkgdGhlbiB0
aGUgdmlldyBzaG91bGQgZ28gdG8gYSBwcmVSZW5kZXIgc3RhdGUgc28gdGhhdAotICAgIC8vIGl0
IGNhbiBiZSByZW5kZXJlZCBhZ2FpbiBsYXRlci4KLSAgICBpZiAodmlldy5fc3RhdGUgIT09ICdk
ZXN0cm95aW5nJyAmJiB2aWV3Ll90cmFuc2l0aW9uVG8pIHsKLSAgICAgIHZpZXcuX3RyYW5zaXRp
b25UbygncHJlUmVuZGVyJyk7Ci0gICAgfQotCi0gICAgaWYgKHZpZXcudHJpZ2dlcikgewotICAg
ICAgdmlldy50cmlnZ2VyKCdkaWREZXN0cm95RWxlbWVudCcpOwotICAgIH0KLSAgfTsgLy8gRWxl
bWVudCBkZXN0cm95ZWQgc28gdmlldy5kZXN0cm95IHNob3VsZG4ndCB0cnkgdG8gcmVtb3ZlIGl0
IHJlbW92ZWRGcm9tRE9NCi0KLSAgdmFyIEluZXJ0UmVuZGVyZXIgPSB7Ci0gICAgY3JlYXRlOiBm
dW5jdGlvbiAoX3JlZjIpIHsKLSAgICAgIHZhciBkb20gPSBfcmVmMi5kb207Ci0KLSAgICAgIHJl
dHVybiBuZXcgUmVuZGVyZXIoZG9tLCB7IGRlc3RpbmVkRm9yRE9NOiBmYWxzZSB9KTsKLSAgICB9
Ci0gIH07Ci0KLSAgZXhwb3J0cy5JbmVydFJlbmRlcmVyID0gSW5lcnRSZW5kZXJlcjsKLSAgdmFy
IEludGVyYWN0aXZlUmVuZGVyZXIgPSB7Ci0gICAgY3JlYXRlOiBmdW5jdGlvbiAoX3JlZjMpIHsK
LSAgICAgIHZhciBkb20gPSBfcmVmMy5kb207Ci0KLSAgICAgIHJldHVybiBuZXcgUmVuZGVyZXIo
ZG9tLCB7IGRlc3RpbmVkRm9yRE9NOiB0cnVlIH0pOwotICAgIH0KLSAgfTsKLSAgZXhwb3J0cy5J
bnRlcmFjdGl2ZVJlbmRlcmVyID0gSW50ZXJhY3RpdmVSZW5kZXJlcjsKLX0pOwotZW5pZmVkKCdl
bWJlci1tZXRhbC12aWV3cy9pbmRleCcsIFsnZXhwb3J0cycsICdlbWJlci1tZXRhbC12aWV3cy9o
dG1sYmFycy1yZW5kZXJlciddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0YWxWaWV3c0h0
bWxiYXJzUmVuZGVyZXIpIHsKLSAgJ3VzZSBzdHJpY3QnOwotCi0gIGZ1bmN0aW9uIF9pbnRlcm9w
RXhwb3J0V2lsZGNhcmQob2JqLCBkZWZhdWx0cykgeyB2YXIgbmV3T2JqID0gZGVmYXVsdHMoe30s
IG9iaik7IGRlbGV0ZSBuZXdPYmpbJ2RlZmF1bHQnXTsgcmV0dXJuIG5ld09iajsgfQotCi0gIGZ1
bmN0aW9uIF9kZWZhdWx0cyhvYmosIGRlZmF1bHRzKSB7IHZhciBrZXlzID0gT2JqZWN0LmdldE93
blByb3BlcnR5TmFtZXMoZGVmYXVsdHMpOyBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3Ro
OyBpKyspIHsgdmFyIGtleSA9IGtleXNbaV07IHZhciB2YWx1ZSA9IE9iamVjdC5nZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3IoZGVmYXVsdHMsIGtleSk7IGlmICh2YWx1ZSAmJiB2YWx1ZS5jb25maWd1
cmFibGUgJiYgb2JqW2tleV0gPT09IHVuZGVmaW5lZCkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHko
b2JqLCBrZXksIHZhbHVlKTsgfSB9IHJldHVybiBvYmo7IH0KLQotICBfZGVmYXVsdHMoZXhwb3J0
cywgX2ludGVyb3BFeHBvcnRXaWxkY2FyZChfZW1iZXJNZXRhbFZpZXdzSHRtbGJhcnNSZW5kZXJl
ciwgX2RlZmF1bHRzKSk7Ci19KTsKLWVuaWZlZCgnZW1iZXItbWV0YWwvYWxpYXMnLCBbJ2V4cG9y
dHMnLCAnZW1iZXItbWV0YWwvZGVidWcnLCAnZW1iZXItbWV0YWwvcHJvcGVydHlfZ2V0JywgJ2Vt
YmVyLW1ldGFsL3Byb3BlcnR5X3NldCcsICdlbWJlci1tZXRhbC9lcnJvcicsICdlbWJlci1tZXRh
bC9wcm9wZXJ0aWVzJywgJ2VtYmVyLW1ldGFsL2NvbXB1dGVkJywgJ2VtYmVyLW1ldGFsL3V0aWxz
JywgJ2VtYmVyLW1ldGFsL21ldGEnLCAnZW1iZXItbWV0YWwvZGVwZW5kZW50X2tleXMnXSwgZnVu
Y3Rpb24gKGV4cG9ydHMsIF9lbWJlck1ldGFsRGVidWcsIF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0
LCBfZW1iZXJNZXRhbFByb3BlcnR5X3NldCwgX2VtYmVyTWV0YWxFcnJvciwgX2VtYmVyTWV0YWxQ
cm9wZXJ0aWVzLCBfZW1iZXJNZXRhbENvbXB1dGVkLCBfZW1iZXJNZXRhbFV0aWxzLCBfZW1iZXJN
ZXRhbE1ldGEsIF9lbWJlck1ldGFsRGVwZW5kZW50X2tleXMpIHsKLSAgJ3VzZSBzdHJpY3QnOwot
Ci0gIGV4cG9ydHMuZGVmYXVsdCA9IGFsaWFzOwotICBleHBvcnRzLkFsaWFzZWRQcm9wZXJ0eSA9
IEFsaWFzZWRQcm9wZXJ0eTsKLQotICBmdW5jdGlvbiBhbGlhcyhhbHRLZXkpIHsKLSAgICByZXR1
cm4gbmV3IEFsaWFzZWRQcm9wZXJ0eShhbHRLZXkpOwotICB9Ci0KLSAgZnVuY3Rpb24gQWxpYXNl
ZFByb3BlcnR5KGFsdEtleSkgewotICAgIHRoaXMuaXNEZXNjcmlwdG9yID0gdHJ1ZTsKLSAgICB0
aGlzLmFsdEtleSA9IGFsdEtleTsKLSAgICB0aGlzLl9kZXBlbmRlbnRLZXlzID0gW2FsdEtleV07
Ci0gIH0KLQotICBBbGlhc2VkUHJvcGVydHkucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShfZW1i
ZXJNZXRhbFByb3BlcnRpZXMuRGVzY3JpcHRvci5wcm90b3R5cGUpOwotCi0gIEFsaWFzZWRQcm9w
ZXJ0eS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gQWxpYXNlZFByb3BlcnR5X2dldChvYmosIGtl
eU5hbWUpIHsKLSAgICByZXR1cm4gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KG9iaiwgdGhp
cy5hbHRLZXkpOwotICB9OwotCi0gIEFsaWFzZWRQcm9wZXJ0eS5wcm90b3R5cGUuc2V0ID0gZnVu
Y3Rpb24gQWxpYXNlZFByb3BlcnR5X3NldChvYmosIGtleU5hbWUsIHZhbHVlKSB7Ci0gICAgcmV0
dXJuIF9lbWJlck1ldGFsUHJvcGVydHlfc2V0LnNldChvYmosIHRoaXMuYWx0S2V5LCB2YWx1ZSk7
Ci0gIH07Ci0KLSAgQWxpYXNlZFByb3BlcnR5LnByb3RvdHlwZS53aWxsV2F0Y2ggPSBmdW5jdGlv
biAob2JqLCBrZXlOYW1lKSB7Ci0gICAgX2VtYmVyTWV0YWxEZXBlbmRlbnRfa2V5cy5hZGREZXBl
bmRlbnRLZXlzKHRoaXMsIG9iaiwga2V5TmFtZSwgX2VtYmVyTWV0YWxNZXRhLm1ldGEob2JqKSk7
Ci0gIH07Ci0KLSAgQWxpYXNlZFByb3BlcnR5LnByb3RvdHlwZS5kaWRVbndhdGNoID0gZnVuY3Rp
b24gKG9iaiwga2V5TmFtZSkgewotICAgIF9lbWJlck1ldGFsRGVwZW5kZW50X2tleXMucmVtb3Zl
RGVwZW5kZW50S2V5cyh0aGlzLCBvYmosIGtleU5hbWUsIF9lbWJlck1ldGFsTWV0YS5tZXRhKG9i
aikpOwotICB9OwotCi0gIEFsaWFzZWRQcm9wZXJ0eS5wcm90b3R5cGUuc2V0dXAgPSBmdW5jdGlv
biAob2JqLCBrZXlOYW1lKSB7Ci0gICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ1NldHRpbmcg
YWxpYXMgXCcnICsga2V5TmFtZSArICdcJyBvbiBzZWxmJywgdGhpcy5hbHRLZXkgIT09IGtleU5h
bWUpOwotICAgIHZhciBtID0gX2VtYmVyTWV0YWxNZXRhLm1ldGEob2JqKTsKLSAgICBpZiAobS5w
ZWVrV2F0Y2hpbmcoa2V5TmFtZSkpIHsKLSAgICAgIF9lbWJlck1ldGFsRGVwZW5kZW50X2tleXMu
YWRkRGVwZW5kZW50S2V5cyh0aGlzLCBvYmosIGtleU5hbWUsIG0pOwotICAgIH0KLSAgfTsKLQot
ICBBbGlhc2VkUHJvcGVydHkucHJvdG90eXBlLnRlYXJkb3duID0gZnVuY3Rpb24gKG9iaiwga2V5
TmFtZSkgewotICAgIHZhciBtID0gX2VtYmVyTWV0YWxNZXRhLm1ldGEob2JqKTsKLSAgICBpZiAo
bS5wZWVrV2F0Y2hpbmcoa2V5TmFtZSkpIHsKLSAgICAgIF9lbWJlck1ldGFsRGVwZW5kZW50X2tl
eXMucmVtb3ZlRGVwZW5kZW50S2V5cyh0aGlzLCBvYmosIGtleU5hbWUsIG0pOwotICAgIH0KLSAg
fTsKLQotICBBbGlhc2VkUHJvcGVydHkucHJvdG90eXBlLnJlYWRPbmx5ID0gZnVuY3Rpb24gKCkg
ewotICAgIHRoaXMuc2V0ID0gQWxpYXNlZFByb3BlcnR5X3JlYWRPbmx5U2V0OwotICAgIHJldHVy
biB0aGlzOwotICB9OwotCi0gIGZ1bmN0aW9uIEFsaWFzZWRQcm9wZXJ0eV9yZWFkT25seVNldChv
YmosIGtleU5hbWUsIHZhbHVlKSB7Ci0gICAgdGhyb3cgbmV3IF9lbWJlck1ldGFsRXJyb3IuZGVm
YXVsdCgnQ2Fubm90IHNldCByZWFkLW9ubHkgcHJvcGVydHkgXCcnICsga2V5TmFtZSArICdcJyBv
biBvYmplY3Q6ICcgKyBfZW1iZXJNZXRhbFV0aWxzLmluc3BlY3Qob2JqKSk7Ci0gIH0KLQotICBB
bGlhc2VkUHJvcGVydHkucHJvdG90eXBlLm9uZVdheSA9IGZ1bmN0aW9uICgpIHsKLSAgICB0aGlz
LnNldCA9IEFsaWFzZWRQcm9wZXJ0eV9vbmVXYXlTZXQ7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH07
Ci0KLSAgZnVuY3Rpb24gQWxpYXNlZFByb3BlcnR5X29uZVdheVNldChvYmosIGtleU5hbWUsIHZh
bHVlKSB7Ci0gICAgX2VtYmVyTWV0YWxQcm9wZXJ0aWVzLmRlZmluZVByb3BlcnR5KG9iaiwga2V5
TmFtZSwgbnVsbCk7Ci0gICAgcmV0dXJuIF9lbWJlck1ldGFsUHJvcGVydHlfc2V0LnNldChvYmos
IGtleU5hbWUsIHZhbHVlKTsKLSAgfQotCi0gIC8vIEJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdp
dGggRW1iZXIgRGF0YS4KLSAgQWxpYXNlZFByb3BlcnR5LnByb3RvdHlwZS5fbWV0YSA9IHVuZGVm
aW5lZDsKLSAgQWxpYXNlZFByb3BlcnR5LnByb3RvdHlwZS5tZXRhID0gX2VtYmVyTWV0YWxDb21w
dXRlZC5Db21wdXRlZFByb3BlcnR5LnByb3RvdHlwZS5tZXRhOwotfSk7Ci1lbmlmZWQoImVtYmVy
LW1ldGFsL2Fzc2lnbiIsIFsiZXhwb3J0cyJdLCBmdW5jdGlvbiAoZXhwb3J0cykgewotICAvKioK
LSAgICBDb3B5IHByb3BlcnRpZXMgZnJvbSBhIHNvdXJjZSBvYmplY3QgdG8gYSB0YXJnZXQgb2Jq
ZWN0LgotICAKLSAgICBgYGBqYXZhc2NyaXB0Ci0gICAgdmFyIGEgPSB7Zmlyc3Q6ICdZZWh1ZGEn
fTsKLSAgICB2YXIgYiA9IHtsYXN0OiAnS2F0eid9OwotICAgIHZhciBjID0ge2NvbXBhbnk6ICdU
aWxkZSBJbmMuJ307Ci0gICAgRW1iZXIuYXNzaWduKGEsIGIsIGMpOyAvLyBhID09PSB7Zmlyc3Q6
ICdZZWh1ZGEnLCBsYXN0OiAnS2F0eicsIGNvbXBhbnk6ICdUaWxkZSBJbmMuJ30sIGIgPT09IHts
YXN0OiAnS2F0eid9LCBjID09PSB7Y29tcGFueTogJ1RpbGRlIEluYy4nfQotICAgIGBgYAotICAK
LSAgICBAbWV0aG9kIGFzc2lnbgotICAgIEBmb3IgRW1iZXIKLSAgICBAcGFyYW0ge09iamVjdH0g
b3JpZ2luYWwgVGhlIG9iamVjdCB0byBhc3NpZ24gaW50bwotICAgIEBwYXJhbSB7T2JqZWN0fSAu
Li5hcmdzIFRoZSBvYmplY3RzIHRvIGNvcHkgcHJvcGVydGllcyBmcm9tCi0gICAgQHJldHVybiB7
T2JqZWN0fQotICAgIEBwdWJsaWMKLSAgKi8KLSAgInVzZSBzdHJpY3QiOwotCi0gIGV4cG9ydHMu
ZGVmYXVsdCA9IGFzc2lnbjsKLQotICBmdW5jdGlvbiBhc3NpZ24ob3JpZ2luYWwpIHsKLSAgICBm
b3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4gPiAxID8g
X2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHsKLSAgICAgIGFy
Z3NbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldOwotICAgIH0KLQotICAgIGZvciAodmFyIGkg
PSAwLCBsID0gYXJncy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKLSAgICAgIHZhciBhcmcgPSBhcmdz
W2ldOwotICAgICAgaWYgKCFhcmcpIHsKLSAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0KLSAg
ICAgIHZhciB1cGRhdGVzID0gT2JqZWN0LmtleXMoYXJnKTsKLQotICAgICAgZm9yICh2YXIgX2kg
PSAwLCBfbCA9IHVwZGF0ZXMubGVuZ3RoOyBfaSA8IF9sOyBfaSsrKSB7Ci0gICAgICAgIHZhciBw
cm9wID0gdXBkYXRlc1tfaV07Ci0gICAgICAgIG9yaWdpbmFsW3Byb3BdID0gYXJnW3Byb3BdOwot
ICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBvcmlnaW5hbDsKLSAgfQotfSk7Ci1lbmlmZWQo
J2VtYmVyLW1ldGFsL2JpbmRpbmcnLCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwvY29yZScsICdl
bWJlci1tZXRhbC9sb2dnZXInLCAnZW1iZXItbWV0YWwvcnVuX2xvb3AnLCAnZW1iZXItbWV0YWwv
ZGVidWcnLCAnZW1iZXItbWV0YWwvcHJvcGVydHlfZ2V0JywgJ2VtYmVyLW1ldGFsL3Byb3BlcnR5
X3NldCcsICdlbWJlci1tZXRhbC91dGlscycsICdlbWJlci1tZXRhbC9ldmVudHMnLCAnZW1iZXIt
bWV0YWwvb2JzZXJ2ZXInLCAnZW1iZXItbWV0YWwvcGF0aF9jYWNoZSddLCBmdW5jdGlvbiAoZXhw
b3J0cywgX2VtYmVyTWV0YWxDb3JlLCBfZW1iZXJNZXRhbExvZ2dlciwgX2VtYmVyTWV0YWxSdW5f
bG9vcCwgX2VtYmVyTWV0YWxEZWJ1ZywgX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQsIF9lbWJlck1l
dGFsUHJvcGVydHlfc2V0LCBfZW1iZXJNZXRhbFV0aWxzLCBfZW1iZXJNZXRhbEV2ZW50cywgX2Vt
YmVyTWV0YWxPYnNlcnZlciwgX2VtYmVyTWV0YWxQYXRoX2NhY2hlKSB7Ci0gICd1c2Ugc3RyaWN0
JzsKLQotICBleHBvcnRzLmJpbmQgPSBiaW5kOwotCi0gIC8vIEVTNlRPRE86IHdoZXJlIGlzIEVt
YmVyLmxvb2t1cCBkZWZpbmVkPwotICAvKioKLSAgQG1vZHVsZSBlbWJlcgotICBAc3VibW9kdWxl
IGVtYmVyLW1ldGFsCi0gICovCi0KLSAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgotICAvLyBDT05TVEFOVFMKLSAgLy8KLQotICAv
KioKLSAgICBEZWJ1ZyBwYXJhbWV0ZXIgeW91IGNhbiB0dXJuIG9uLiBUaGlzIHdpbGwgbG9nIGFs
bCBiaW5kaW5ncyB0aGF0IGZpcmUgdG8KLSAgICB0aGUgY29uc29sZS4gVGhpcyBzaG91bGQgYmUg
ZGlzYWJsZWQgaW4gcHJvZHVjdGlvbiBjb2RlLiBOb3RlIHRoYXQgeW91Ci0gICAgY2FuIGFsc28g
ZW5hYmxlIHRoaXMgZnJvbSB0aGUgY29uc29sZSBvciB0ZW1wb3JhcmlseS4KLSAgCi0gICAgQHBy
b3BlcnR5IExPR19CSU5ESU5HUwotICAgIEBmb3IgRW1iZXIKLSAgICBAdHlwZSBCb29sZWFuCi0g
ICAgQGRlZmF1bHQgZmFsc2UKLSAgICBAcHVibGljCi0gICovCi0gIF9lbWJlck1ldGFsQ29yZS5k
ZWZhdWx0LkxPR19CSU5ESU5HUyA9IGZhbHNlIHx8ICEhX2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQu
RU5WLkxPR19CSU5ESU5HUzsKLQotICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0gIC8vIEJJTkRJTkcKLSAgLy8KLQotICBmdW5j
dGlvbiBCaW5kaW5nKHRvUGF0aCwgZnJvbVBhdGgpIHsKLSAgICAvLyBDb25maWd1cmF0aW9uCi0g
ICAgdGhpcy5fZnJvbSA9IGZyb21QYXRoOwotICAgIHRoaXMuX3RvID0gdG9QYXRoOwotICAgIHRo
aXMuX29uZVdheSA9IHVuZGVmaW5lZDsKLQotICAgIC8vIFN0YXRlCi0gICAgdGhpcy5fZGlyZWN0
aW9uID0gdW5kZWZpbmVkOwotICAgIHRoaXMuX3JlYWR5VG9TeW5jID0gdW5kZWZpbmVkOwotICAg
IHRoaXMuX2Zyb21PYmogPSB1bmRlZmluZWQ7Ci0gICAgdGhpcy5fZnJvbVBhdGggPSB1bmRlZmlu
ZWQ7Ci0gICAgdGhpcy5fdG9PYmogPSB1bmRlZmluZWQ7Ci0gIH0KLQotICAvKioKLSAgICBAY2xh
c3MgQmluZGluZwotICAgIEBuYW1lc3BhY2UgRW1iZXIKLSAgICBAcHVibGljCi0gICovCi0KLSAg
QmluZGluZy5wcm90b3R5cGUgPSB7Ci0gICAgLyoqCi0gICAgICBUaGlzIGNvcGllcyB0aGUgQmlu
ZGluZyBzbyBpdCBjYW4gYmUgY29ubmVjdGVkIHRvIGFub3RoZXIgb2JqZWN0LgotICAgICAgIEBt
ZXRob2QgY29weQotICAgICAgQHJldHVybiB7RW1iZXIuQmluZGluZ30gYHRoaXNgCi0gICAgICBA
cHVibGljCi0gICAgKi8KLSAgICBjb3B5OiBmdW5jdGlvbiAoKSB7Ci0gICAgICB2YXIgY29weSA9
IG5ldyBCaW5kaW5nKHRoaXMuX3RvLCB0aGlzLl9mcm9tKTsKLSAgICAgIGlmICh0aGlzLl9vbmVX
YXkpIHsKLSAgICAgICAgY29weS5fb25lV2F5ID0gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIHJldHVy
biBjb3B5OwotICAgIH0sCi0KLSAgICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0gICAgLy8gQ09ORklHCi0gICAgLy8KLQotICAg
IC8qKgotICAgICAgVGhpcyB3aWxsIHNldCBgZnJvbWAgcHJvcGVydHkgcGF0aCB0byB0aGUgc3Bl
Y2lmaWVkIHZhbHVlLiBJdCB3aWxsIG5vdAotICAgICAgYXR0ZW1wdCB0byByZXNvbHZlIHRoaXMg
cHJvcGVydHkgcGF0aCB0byBhbiBhY3R1YWwgb2JqZWN0IHVudGlsIHlvdQotICAgICAgY29ubmVj
dCB0aGUgYmluZGluZy4KLSAgICAgICBUaGUgYmluZGluZyB3aWxsIHNlYXJjaCBmb3IgdGhlIHBy
b3BlcnR5IHBhdGggc3RhcnRpbmcgYXQgdGhlIHJvb3Qgb2JqZWN0Ci0gICAgICB5b3UgcGFzcyB3
aGVuIHlvdSBgY29ubmVjdCgpYCB0aGUgYmluZGluZy4gSXQgZm9sbG93cyB0aGUgc2FtZSBydWxl
cyBhcwotICAgICAgYGdldCgpYCAtIHNlZSB0aGF0IG1ldGhvZCBmb3IgbW9yZSBpbmZvcm1hdGlv
bi4KLSAgICAgICBAbWV0aG9kIGZyb20KLSAgICAgIEBwYXJhbSB7U3RyaW5nfSBwYXRoIFRoZSBw
cm9wZXJ0eSBwYXRoIHRvIGNvbm5lY3QgdG8uCi0gICAgICBAcmV0dXJuIHtFbWJlci5CaW5kaW5n
fSBgdGhpc2AKLSAgICAgIEBwdWJsaWMKLSAgICAqLwotICAgIGZyb206IGZ1bmN0aW9uIChwYXRo
KSB7Ci0gICAgICB0aGlzLl9mcm9tID0gcGF0aDsKLSAgICAgIHJldHVybiB0aGlzOwotICAgIH0s
Ci0KLSAgICAvKioKLSAgICAgIFRoaXMgd2lsbCBzZXQgdGhlIGB0b2AgcHJvcGVydHkgcGF0aCB0
byB0aGUgc3BlY2lmaWVkIHZhbHVlLiBJdCB3aWxsIG5vdAotICAgICAgYXR0ZW1wdCB0byByZXNv
bHZlIHRoaXMgcHJvcGVydHkgcGF0aCB0byBhbiBhY3R1YWwgb2JqZWN0IHVudGlsIHlvdQotICAg
ICAgY29ubmVjdCB0aGUgYmluZGluZy4KLSAgICAgICBUaGUgYmluZGluZyB3aWxsIHNlYXJjaCBm
b3IgdGhlIHByb3BlcnR5IHBhdGggc3RhcnRpbmcgYXQgdGhlIHJvb3Qgb2JqZWN0Ci0gICAgICB5
b3UgcGFzcyB3aGVuIHlvdSBgY29ubmVjdCgpYCB0aGUgYmluZGluZy4gSXQgZm9sbG93cyB0aGUg
c2FtZSBydWxlcyBhcwotICAgICAgYGdldCgpYCAtIHNlZSB0aGF0IG1ldGhvZCBmb3IgbW9yZSBp
bmZvcm1hdGlvbi4KLSAgICAgICBAbWV0aG9kIHRvCi0gICAgICBAcGFyYW0ge1N0cmluZ3xUdXBs
ZX0gcGF0aCBBIHByb3BlcnR5IHBhdGggb3IgdHVwbGUuCi0gICAgICBAcmV0dXJuIHtFbWJlci5C
aW5kaW5nfSBgdGhpc2AKLSAgICAgIEBwdWJsaWMKLSAgICAqLwotICAgIHRvOiBmdW5jdGlvbiAo
cGF0aCkgewotICAgICAgdGhpcy5fdG8gPSBwYXRoOwotICAgICAgcmV0dXJuIHRoaXM7Ci0gICAg
fSwKLQotICAgIC8qKgotICAgICAgQ29uZmlndXJlcyB0aGUgYmluZGluZyBhcyBvbmUgd2F5LiBB
IG9uZS13YXkgYmluZGluZyB3aWxsIHJlbGF5IGNoYW5nZXMKLSAgICAgIG9uIHRoZSBgZnJvbWAg
c2lkZSB0byB0aGUgYHRvYCBzaWRlLCBidXQgbm90IHRoZSBvdGhlciB3YXkgYXJvdW5kLiBUaGlz
Ci0gICAgICBtZWFucyB0aGF0IGlmIHlvdSBjaGFuZ2UgdGhlIGB0b2Agc2lkZSBkaXJlY3RseSwg
dGhlIGBmcm9tYCBzaWRlIG1heSBoYXZlCi0gICAgICBhIGRpZmZlcmVudCB2YWx1ZS4KLSAgICAg
ICBAbWV0aG9kIG9uZVdheQotICAgICAgQHJldHVybiB7RW1iZXIuQmluZGluZ30gYHRoaXNgCi0g
ICAgICBAcHVibGljCi0gICAgKi8KLSAgICBvbmVXYXk6IGZ1bmN0aW9uICgpIHsKLSAgICAgIHRo
aXMuX29uZVdheSA9IHRydWU7Ci0gICAgICByZXR1cm4gdGhpczsKLSAgICB9LAotCi0gICAgLyoq
Ci0gICAgICBAbWV0aG9kIHRvU3RyaW5nCi0gICAgICBAcmV0dXJuIHtTdHJpbmd9IHN0cmluZyBy
ZXByZXNlbnRhdGlvbiBvZiBiaW5kaW5nCi0gICAgICBAcHVibGljCi0gICAgKi8KLSAgICB0b1N0
cmluZzogZnVuY3Rpb24gKCkgewotICAgICAgdmFyIG9uZVdheSA9IHRoaXMuX29uZVdheSA/ICdb
b25lV2F5XScgOiAnJzsKLSAgICAgIHJldHVybiAnRW1iZXIuQmluZGluZzwnICsgX2VtYmVyTWV0
YWxVdGlscy5ndWlkRm9yKHRoaXMpICsgJz4oJyArIHRoaXMuX2Zyb20gKyAnIC0+ICcgKyB0aGlz
Ll90byArICcpJyArIG9uZVdheTsKLSAgICB9LAotCi0gICAgLy8gLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgotICAgIC8vIENPTk5FQ1Qg
QU5EIFNZTkMKLSAgICAvLwotCi0gICAgLyoqCi0gICAgICBBdHRlbXB0cyB0byBjb25uZWN0IHRo
aXMgYmluZGluZyBpbnN0YW5jZSBzbyB0aGF0IGl0IGNhbiByZWNlaXZlIGFuZCByZWxheQotICAg
ICAgY2hhbmdlcy4gVGhpcyBtZXRob2Qgd2lsbCByYWlzZSBhbiBleGNlcHRpb24gaWYgeW91IGhh
dmUgbm90IHNldCB0aGUKLSAgICAgIGZyb20vdG8gcHJvcGVydGllcyB5ZXQuCi0gICAgICAgQG1l
dGhvZCBjb25uZWN0Ci0gICAgICBAcGFyYW0ge09iamVjdH0gb2JqIFRoZSByb290IG9iamVjdCBm
b3IgdGhpcyBiaW5kaW5nLgotICAgICAgQHJldHVybiB7RW1iZXIuQmluZGluZ30gYHRoaXNgCi0g
ICAgICBAcHVibGljCi0gICAgKi8KLSAgICBjb25uZWN0OiBmdW5jdGlvbiAob2JqKSB7Ci0gICAg
ICBfZW1iZXJNZXRhbERlYnVnLmFzc2VydCgnTXVzdCBwYXNzIGEgdmFsaWQgb2JqZWN0IHRvIEVt
YmVyLkJpbmRpbmcuY29ubmVjdCgpJywgISFvYmopOwotCi0gICAgICB2YXIgZnJvbU9iaiA9IHVu
ZGVmaW5lZCwKLSAgICAgICAgICBmcm9tUGF0aCA9IHVuZGVmaW5lZDsKLQotICAgICAgLy8gSWYg
dGhlIGJpbmRpbmcncyAiZnJvbSIgcGF0aCBjb3VsZCBiZSBpbnRlcnByZXRlZCBhcyBhIGdsb2Jh
bCwgdmVyaWZ5Ci0gICAgICAvLyB3aGV0aGVyIHRoZSBwYXRoIHJlZmVycyB0byBhIGdsb2JhbCBv
ciBub3QgYnkgY29uc3VsdGluZyBgRW1iZXIubG9va3VwYC4KLSAgICAgIGlmIChfZW1iZXJNZXRh
bFBhdGhfY2FjaGUuaXNHbG9iYWxQYXRoKHRoaXMuX2Zyb20pKSB7Ci0gICAgICAgIHZhciBfbmFt
ZSA9IF9lbWJlck1ldGFsUGF0aF9jYWNoZS5nZXRGaXJzdEtleSh0aGlzLl9mcm9tKTsKLSAgICAg
ICAgdmFyIHBvc3NpYmxlR2xvYmFsID0gX2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQubG9va3VwW19u
YW1lXTsKLQotICAgICAgICBpZiAocG9zc2libGVHbG9iYWwpIHsKLSAgICAgICAgICBmcm9tT2Jq
ID0gcG9zc2libGVHbG9iYWw7Ci0gICAgICAgICAgZnJvbVBhdGggPSBfZW1iZXJNZXRhbFBhdGhf
Y2FjaGUuZ2V0VGFpbFBhdGgodGhpcy5fZnJvbSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAg
ICAgaWYgKGZyb21PYmogPT09IHVuZGVmaW5lZCkgewotICAgICAgICBmcm9tT2JqID0gb2JqOwot
ICAgICAgICBmcm9tUGF0aCA9IHRoaXMuX2Zyb207Ci0gICAgICB9Ci0KLSAgICAgIF9lbWJlck1l
dGFsUHJvcGVydHlfc2V0LnRyeVNldChvYmosIHRoaXMuX3RvLCBfZW1iZXJNZXRhbFByb3BlcnR5
X2dldC5nZXQoZnJvbU9iaiwgZnJvbVBhdGgpKTsKLQotICAgICAgLy8gQWRkIGFuIG9ic2VydmVy
IG9uIHRoZSBvYmplY3QgdG8gYmUgbm90aWZpZWQgd2hlbiB0aGUgYmluZGluZyBzaG91bGQgYmUg
dXBkYXRlZC4KLSAgICAgIF9lbWJlck1ldGFsT2JzZXJ2ZXIuYWRkT2JzZXJ2ZXIoZnJvbU9iaiwg
ZnJvbVBhdGgsIHRoaXMsICdmcm9tRGlkQ2hhbmdlJyk7Ci0KLSAgICAgIC8vIElmIHRoZSBiaW5k
aW5nIGlzIGEgdHdvLXdheSBiaW5kaW5nLCBhbHNvIHNldCB1cCBhbiBvYnNlcnZlciBvbiB0aGUg
dGFyZ2V0LgotICAgICAgaWYgKCF0aGlzLl9vbmVXYXkpIHsKLSAgICAgICAgX2VtYmVyTWV0YWxP
YnNlcnZlci5hZGRPYnNlcnZlcihvYmosIHRoaXMuX3RvLCB0aGlzLCAndG9EaWRDaGFuZ2UnKTsK
LSAgICAgIH0KLQotICAgICAgX2VtYmVyTWV0YWxFdmVudHMuYWRkTGlzdGVuZXIob2JqLCAnd2ls
bERlc3Ryb3knLCB0aGlzLCAnZGlzY29ubmVjdCcpOwotCi0gICAgICB0aGlzLl9yZWFkeVRvU3lu
YyA9IHRydWU7Ci0gICAgICB0aGlzLl9mcm9tT2JqID0gZnJvbU9iajsKLSAgICAgIHRoaXMuX2Zy
b21QYXRoID0gZnJvbVBhdGg7Ci0gICAgICB0aGlzLl90b09iaiA9IG9iajsKLQotICAgICAgcmV0
dXJuIHRoaXM7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAgRGlzY29ubmVjdHMgdGhlIGJpbmRp
bmcgaW5zdGFuY2UuIENoYW5nZXMgd2lsbCBubyBsb25nZXIgYmUgcmVsYXllZC4gWW91Ci0gICAg
ICB3aWxsIG5vdCB1c3VhbGx5IG5lZWQgdG8gY2FsbCB0aGlzIG1ldGhvZC4KLSAgICAgICBAbWV0
aG9kIGRpc2Nvbm5lY3QKLSAgICAgIEByZXR1cm4ge0VtYmVyLkJpbmRpbmd9IGB0aGlzYAotICAg
ICAgQHB1YmxpYwotICAgICovCi0gICAgZGlzY29ubmVjdDogZnVuY3Rpb24gKCkgewotICAgICAg
X2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ011c3QgcGFzcyBhIHZhbGlkIG9iamVjdCB0byBFbWJl
ci5CaW5kaW5nLmRpc2Nvbm5lY3QoKScsICEhdGhpcy5fdG9PYmopOwotCi0gICAgICAvLyBSZW1v
dmUgYW4gb2JzZXJ2ZXIgb24gdGhlIG9iamVjdCBzbyB3ZSdyZSBubyBsb25nZXIgbm90aWZpZWQg
b2YKLSAgICAgIC8vIGNoYW5nZXMgdGhhdCBzaG91bGQgdXBkYXRlIGJpbmRpbmdzLgotICAgICAg
X2VtYmVyTWV0YWxPYnNlcnZlci5yZW1vdmVPYnNlcnZlcih0aGlzLl9mcm9tT2JqLCB0aGlzLl9m
cm9tUGF0aCwgdGhpcywgJ2Zyb21EaWRDaGFuZ2UnKTsKLQotICAgICAgLy8gSWYgdGhlIGJpbmRp
bmcgaXMgdHdvLXdheSwgcmVtb3ZlIHRoZSBvYnNlcnZlciBmcm9tIHRoZSB0YXJnZXQgYXMgd2Vs
bC4KLSAgICAgIGlmICghdGhpcy5fb25lV2F5KSB7Ci0gICAgICAgIF9lbWJlck1ldGFsT2JzZXJ2
ZXIucmVtb3ZlT2JzZXJ2ZXIodGhpcy5fdG9PYmosIHRoaXMuX3RvLCB0aGlzLCAndG9EaWRDaGFu
Z2UnKTsKLSAgICAgIH0KLQotICAgICAgdGhpcy5fcmVhZHlUb1N5bmMgPSBmYWxzZTsgLy8gRGlz
YWJsZSBzY2hlZHVsZWQgc3luY3MuLi4KLSAgICAgIHJldHVybiB0aGlzOwotICAgIH0sCi0KLSAg
ICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uCi0gICAgLy8gUFJJVkFURQotICAgIC8vCi0KLSAgICAvKiBDYWxsZWQgd2hlbiB0aGUg
ZnJvbSBzaWRlIGNoYW5nZXMuICovCi0gICAgZnJvbURpZENoYW5nZTogZnVuY3Rpb24gKHRhcmdl
dCkgewotICAgICAgdGhpcy5fc2NoZWR1bGVTeW5jKCdmd2QnKTsKLSAgICB9LAotCi0gICAgLyog
Q2FsbGVkIHdoZW4gdGhlIHRvIHNpZGUgY2hhbmdlcy4gKi8KLSAgICB0b0RpZENoYW5nZTogZnVu
Y3Rpb24gKHRhcmdldCkgewotICAgICAgdGhpcy5fc2NoZWR1bGVTeW5jKCdiYWNrJyk7Ci0gICAg
fSwKLQotICAgIF9zY2hlZHVsZVN5bmM6IGZ1bmN0aW9uIChkaXIpIHsKLSAgICAgIHZhciBleGlz
dGluZ0RpciA9IHRoaXMuX2RpcmVjdGlvbjsKLQotICAgICAgLy8gSWYgd2UgaGF2ZW4ndCBzY2hl
ZHVsZWQgdGhlIGJpbmRpbmcgeWV0LCBzY2hlZHVsZSBpdC4KLSAgICAgIGlmIChleGlzdGluZ0Rp
ciA9PT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgIF9lbWJlck1ldGFsUnVuX2xvb3AuZGVmYXVsdC5z
Y2hlZHVsZSgnc3luYycsIHRoaXMsICdfc3luYycpOwotICAgICAgICB0aGlzLl9kaXJlY3Rpb24g
PSBkaXI7Ci0gICAgICB9Ci0KLSAgICAgIC8vIElmIGJvdGggYSAnYmFjaycgYW5kICdmd2QnIHN5
bmMgaGF2ZSBiZWVuIHNjaGVkdWxlZCBvbiB0aGUgc2FtZSBvYmplY3QsCi0gICAgICAvLyBkZWZh
dWx0IHRvIGEgJ2Z3ZCcgc3luYyBzbyB0aGF0IGl0IHJlbWFpbnMgZGV0ZXJtaW5pc3RpYy4KLSAg
ICAgIGlmIChleGlzdGluZ0RpciA9PT0gJ2JhY2snICYmIGRpciA9PT0gJ2Z3ZCcpIHsKLSAgICAg
ICAgdGhpcy5fZGlyZWN0aW9uID0gJ2Z3ZCc7Ci0gICAgICB9Ci0gICAgfSwKLQotICAgIF9zeW5j
OiBmdW5jdGlvbiAoKSB7Ci0gICAgICB2YXIgbG9nID0gX2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQu
TE9HX0JJTkRJTkdTOwotCi0gICAgICB2YXIgdG9PYmogPSB0aGlzLl90b09iajsKLQotICAgICAg
Ly8gRG9uJ3Qgc3luY2hyb25pemUgZGVzdHJveWVkIG9iamVjdHMgb3IgZGlzY29ubmVjdGVkIGJp
bmRpbmdzLgotICAgICAgaWYgKHRvT2JqLmlzRGVzdHJveWVkIHx8ICF0aGlzLl9yZWFkeVRvU3lu
YykgewotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0KLSAgICAgIC8vIEdldCB0aGUgZGlyZWN0
aW9uIG9mIHRoZSBiaW5kaW5nIGZvciB0aGUgb2JqZWN0IHdlIGFyZQotICAgICAgLy8gc3luY2hy
b25pemluZyBmcm9tLgotICAgICAgdmFyIGRpcmVjdGlvbiA9IHRoaXMuX2RpcmVjdGlvbjsKLQot
ICAgICAgdmFyIGZyb21PYmogPSB0aGlzLl9mcm9tT2JqOwotICAgICAgdmFyIGZyb21QYXRoID0g
dGhpcy5fZnJvbVBhdGg7Ci0KLSAgICAgIHRoaXMuX2RpcmVjdGlvbiA9IHVuZGVmaW5lZDsKLQot
ICAgICAgLy8gSWYgd2UncmUgc3luY2hyb25pemluZyBmcm9tIHRoZSByZW1vdGUgb2JqZWN0Li4u
Ci0gICAgICBpZiAoZGlyZWN0aW9uID09PSAnZndkJykgewotICAgICAgICB2YXIgZnJvbVZhbHVl
ID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KGZyb21PYmosIGZyb21QYXRoKTsKLSAgICAg
ICAgaWYgKGxvZykgewotICAgICAgICAgIF9lbWJlck1ldGFsTG9nZ2VyLmRlZmF1bHQubG9nKCcg
JywgdGhpcy50b1N0cmluZygpLCAnLT4nLCBmcm9tVmFsdWUsIGZyb21PYmopOwotICAgICAgICB9
Ci0gICAgICAgIGlmICh0aGlzLl9vbmVXYXkpIHsKLSAgICAgICAgICBfZW1iZXJNZXRhbFByb3Bl
cnR5X3NldC50cnlTZXQodG9PYmosIHRoaXMuX3RvLCBmcm9tVmFsdWUpOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgIF9lbWJlck1ldGFsT2JzZXJ2ZXIuX3N1c3BlbmRPYnNlcnZlcih0b09i
aiwgdGhpcy5fdG8sIHRoaXMsICd0b0RpZENoYW5nZScsIGZ1bmN0aW9uICgpIHsKLSAgICAgICAg
ICAgIF9lbWJlck1ldGFsUHJvcGVydHlfc2V0LnRyeVNldCh0b09iaiwgdGhpcy5fdG8sIGZyb21W
YWx1ZSk7Ci0gICAgICAgICAgfSk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gSWYgd2UncmUgc3lu
Y2hyb25pemluZyAqdG8qIHRoZSByZW1vdGUgb2JqZWN0LgotICAgICAgfSBlbHNlIGlmIChkaXJl
Y3Rpb24gPT09ICdiYWNrJykgewotICAgICAgICAgIHZhciB0b1ZhbHVlID0gX2VtYmVyTWV0YWxQ
cm9wZXJ0eV9nZXQuZ2V0KHRvT2JqLCB0aGlzLl90byk7Ci0gICAgICAgICAgaWYgKGxvZykgewot
ICAgICAgICAgICAgX2VtYmVyTWV0YWxMb2dnZXIuZGVmYXVsdC5sb2coJyAnLCB0aGlzLnRvU3Ry
aW5nKCksICc8LScsIHRvVmFsdWUsIHRvT2JqKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgX2Vt
YmVyTWV0YWxPYnNlcnZlci5fc3VzcGVuZE9ic2VydmVyKGZyb21PYmosIGZyb21QYXRoLCB0aGlz
LCAnZnJvbURpZENoYW5nZScsIGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIF9lbWJlck1ldGFs
UHJvcGVydHlfc2V0LnRyeVNldChmcm9tT2JqLCBmcm9tUGF0aCwgdG9WYWx1ZSk7Ci0gICAgICAg
ICAgfSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgfTsKLQotICBmdW5jdGlvbiBtaXhpblByb3Bl
cnRpZXModG8sIGZyb20pIHsKLSAgICBmb3IgKHZhciBrZXkgaW4gZnJvbSkgewotICAgICAgaWYg
KGZyb20uaGFzT3duUHJvcGVydHkoa2V5KSkgewotICAgICAgICB0b1trZXldID0gZnJvbVtrZXld
OwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIG1peGluUHJvcGVydGllcyhCaW5kaW5nLCB7Ci0K
LSAgICAvKgotICAgICAgU2VlIGBFbWJlci5CaW5kaW5nLmZyb21gLgotICAgICAgIEBtZXRob2Qg
ZnJvbQotICAgICAgQHN0YXRpYwotICAgICovCi0gICAgZnJvbTogZnVuY3Rpb24gKGZyb20pIHsK
LSAgICAgIHZhciBDID0gdGhpczsKLSAgICAgIHJldHVybiBuZXcgQyh1bmRlZmluZWQsIGZyb20p
OwotICAgIH0sCi0KLSAgICAvKgotICAgICAgU2VlIGBFbWJlci5CaW5kaW5nLnRvYC4KLSAgICAg
ICBAbWV0aG9kIHRvCi0gICAgICBAc3RhdGljCi0gICAgKi8KLSAgICB0bzogZnVuY3Rpb24gKHRv
KSB7Ci0gICAgICB2YXIgQyA9IHRoaXM7Ci0gICAgICByZXR1cm4gbmV3IEModG8sIHVuZGVmaW5l
ZCk7Ci0gICAgfQotICB9KTsKLSAgLyoqCi0gICAgQW4gYEVtYmVyLkJpbmRpbmdgIGNvbm5lY3Rz
IHRoZSBwcm9wZXJ0aWVzIG9mIHR3byBvYmplY3RzIHNvIHRoYXQgd2hlbmV2ZXIKLSAgICB0aGUg
dmFsdWUgb2Ygb25lIHByb3BlcnR5IGNoYW5nZXMsIHRoZSBvdGhlciBwcm9wZXJ0eSB3aWxsIGJl
IGNoYW5nZWQgYWxzby4KLSAgCi0gICAgIyMgQXV0b21hdGljIENyZWF0aW9uIG9mIEJpbmRpbmdz
IHdpdGggYC9eKkJpbmRpbmcvYC1uYW1lZCBQcm9wZXJ0aWVzLgotICAKLSAgICBZb3UgZG8gbm90
IHVzdWFsbHkgY3JlYXRlIEJpbmRpbmcgb2JqZWN0cyBkaXJlY3RseSBidXQgaW5zdGVhZCBkZXNj
cmliZQotICAgIGJpbmRpbmdzIGluIHlvdXIgY2xhc3Mgb3Igb2JqZWN0IGRlZmluaXRpb24gdXNp
bmcgYXV0b21hdGljIGJpbmRpbmcKLSAgICBkZXRlY3Rpb24uCi0gIAotICAgIFByb3BlcnRpZXMg
ZW5kaW5nIGluIGEgYEJpbmRpbmdgIHN1ZmZpeCB3aWxsIGJlIGNvbnZlcnRlZCB0byBgRW1iZXIu
QmluZGluZ2AKLSAgICBpbnN0YW5jZXMuIFRoZSB2YWx1ZSBvZiB0aGlzIHByb3BlcnR5IHNob3Vs
ZCBiZSBhIHN0cmluZyByZXByZXNlbnRpbmcgYSBwYXRoCi0gICAgdG8gYW5vdGhlciBvYmplY3Qg
b3IgYSBjdXN0b20gYmluZGluZyBpbnN0YW5jZSBjcmVhdGVkIHVzaW5nIEJpbmRpbmcgaGVscGVy
cwotICAgIChzZWUgIk9uZSBXYXkgQmluZGluZ3MiKToKLSAgCi0gICAgYGBgCi0gICAgdmFsdWVC
aW5kaW5nOiAiTXlBcHAuc29tZUNvbnRyb2xsZXIudGl0bGUiCi0gICAgYGBgCi0gIAotICAgIFRo
aXMgd2lsbCBjcmVhdGUgYSBiaW5kaW5nIGZyb20gYE15QXBwLnNvbWVDb250cm9sbGVyLnRpdGxl
YCB0byB0aGUgYHZhbHVlYAotICAgIHByb3BlcnR5IG9mIHlvdXIgb2JqZWN0IGluc3RhbmNlIGF1
dG9tYXRpY2FsbHkuIE5vdyB0aGUgdHdvIHZhbHVlcyB3aWxsIGJlCi0gICAga2VwdCBpbiBzeW5j
LgotICAKLSAgICAjIyBPbmUgV2F5IEJpbmRpbmdzCi0gIAotICAgIE9uZSBlc3BlY2lhbGx5IHVz
ZWZ1bCBiaW5kaW5nIGN1c3RvbWl6YXRpb24geW91IGNhbiB1c2UgaXMgdGhlIGBvbmVXYXkoKWAK
LSAgICBoZWxwZXIuIFRoaXMgaGVscGVyIHRlbGxzIEVtYmVyIHRoYXQgeW91IGFyZSBvbmx5IGlu
dGVyZXN0ZWQgaW4KLSAgICByZWNlaXZpbmcgY2hhbmdlcyBvbiB0aGUgb2JqZWN0IHlvdSBhcmUg
YmluZGluZyBmcm9tLiBGb3IgZXhhbXBsZSwgaWYgeW91Ci0gICAgYXJlIGJpbmRpbmcgdG8gYSBw
cmVmZXJlbmNlIGFuZCB5b3Ugd2FudCB0byBiZSBub3RpZmllZCBpZiB0aGUgcHJlZmVyZW5jZQot
ICAgIGhhcyBjaGFuZ2VkLCBidXQgeW91ciBvYmplY3Qgd2lsbCBub3QgYmUgY2hhbmdpbmcgdGhl
IHByZWZlcmVuY2UgaXRzZWxmLCB5b3UKLSAgICBjb3VsZCBkbzoKLSAgCi0gICAgYGBgCi0gICAg
YmlnVGl0bGVzQmluZGluZzogRW1iZXIuQmluZGluZy5vbmVXYXkoIk15QXBwLnByZWZlcmVuY2Vz
Q29udHJvbGxlci5iaWdUaXRsZXMiKQotICAgIGBgYAotICAKLSAgICBUaGlzIHdheSBpZiB0aGUg
dmFsdWUgb2YgYE15QXBwLnByZWZlcmVuY2VzQ29udHJvbGxlci5iaWdUaXRsZXNgIGNoYW5nZXMg
dGhlCi0gICAgYGJpZ1RpdGxlc2AgcHJvcGVydHkgb2YgeW91ciBvYmplY3Qgd2lsbCBjaGFuZ2Ug
YWxzby4gSG93ZXZlciwgaWYgeW91Ci0gICAgY2hhbmdlIHRoZSB2YWx1ZSBvZiB5b3VyIGBiaWdU
aXRsZXNgIHByb3BlcnR5LCBpdCB3aWxsIG5vdCB1cGRhdGUgdGhlCi0gICAgYHByZWZlcmVuY2Vz
Q29udHJvbGxlcmAuCi0gIAotICAgIE9uZSB3YXkgYmluZGluZ3MgYXJlIGFsbW9zdCB0d2ljZSBh
cyBmYXN0IHRvIHNldHVwIGFuZCB0d2ljZSBhcyBmYXN0IHRvCi0gICAgZXhlY3V0ZSBiZWNhdXNl
IHRoZSBiaW5kaW5nIG9ubHkgaGFzIHRvIHdvcnJ5IGFib3V0IGNoYW5nZXMgdG8gb25lIHNpZGUu
Ci0gIAotICAgIFlvdSBzaG91bGQgY29uc2lkZXIgdXNpbmcgb25lIHdheSBiaW5kaW5ncyBhbnl0
aW1lIHlvdSBoYXZlIGFuIG9iamVjdCB0aGF0Ci0gICAgbWF5IGJlIGNyZWF0ZWQgZnJlcXVlbnRs
eSBhbmQgeW91IGRvIG5vdCBpbnRlbmQgdG8gY2hhbmdlIGEgcHJvcGVydHk7IG9ubHkKLSAgICB0
byBtb25pdG9yIGl0IGZvciBjaGFuZ2VzIChzdWNoIGFzIGluIHRoZSBleGFtcGxlIGFib3ZlKS4K
LSAgCi0gICAgIyMgQWRkaW5nIEJpbmRpbmdzIE1hbnVhbGx5Ci0gIAotICAgIEFsbCBvZiB0aGUg
ZXhhbXBsZXMgYWJvdmUgc2hvdyB5b3UgaG93IHRvIGNvbmZpZ3VyZSBhIGN1c3RvbSBiaW5kaW5n
LCBidXQgdGhlCi0gICAgcmVzdWx0IG9mIHRoZXNlIGN1c3RvbWl6YXRpb25zIHdpbGwgYmUgYSBi
aW5kaW5nIHRlbXBsYXRlLCBub3QgYSBmdWxseSBhY3RpdmUKLSAgICBCaW5kaW5nIGluc3RhbmNl
LiBUaGUgYmluZGluZyB3aWxsIGFjdHVhbGx5IGJlY29tZSBhY3RpdmUgb25seSB3aGVuIHlvdQot
ICAgIGluc3RhbnRpYXRlIHRoZSBvYmplY3QgdGhlIGJpbmRpbmcgYmVsb25ncyB0by4gSXQgaXMg
dXNlZnVsLCBob3dldmVyLCB0bwotICAgIHVuZGVyc3RhbmQgd2hhdCBhY3R1YWxseSBoYXBwZW5z
IHdoZW4gdGhlIGJpbmRpbmcgaXMgYWN0aXZhdGVkLgotICAKLSAgICBGb3IgYSBiaW5kaW5nIHRv
IGZ1bmN0aW9uIGl0IG11c3QgaGF2ZSBhdCBsZWFzdCBhIGBmcm9tYCBwcm9wZXJ0eSBhbmQgYSBg
dG9gCi0gICAgcHJvcGVydHkuIFRoZSBgZnJvbWAgcHJvcGVydHkgcGF0aCBwb2ludHMgdG8gdGhl
IG9iamVjdC9rZXkgdGhhdCB5b3Ugd2FudCB0bwotICAgIGJpbmQgZnJvbSB3aGlsZSB0aGUgYHRv
YCBwYXRoIHBvaW50cyB0byB0aGUgb2JqZWN0L2tleSB5b3Ugd2FudCB0byBiaW5kIHRvLgotICAK
LSAgICBXaGVuIHlvdSBkZWZpbmUgYSBjdXN0b20gYmluZGluZywgeW91IGFyZSB1c3VhbGx5IGRl
c2NyaWJpbmcgdGhlIHByb3BlcnR5Ci0gICAgeW91IHdhbnQgdG8gYmluZCBmcm9tIChzdWNoIGFz
IGBNeUFwcC5zb21lQ29udHJvbGxlci52YWx1ZWAgaW4gdGhlIGV4YW1wbGVzCi0gICAgYWJvdmUp
LiBXaGVuIHlvdXIgb2JqZWN0IGlzIGNyZWF0ZWQsIGl0IHdpbGwgYXV0b21hdGljYWxseSBhc3Np
Z24gdGhlIHZhbHVlCi0gICAgeW91IHdhbnQgdG8gYmluZCBgdG9gIGJhc2VkIG9uIHRoZSBuYW1l
IG9mIHlvdXIgYmluZGluZyBrZXkuIEluIHRoZQotICAgIGV4YW1wbGVzIGFib3ZlLCBkdXJpbmcg
aW5pdCwgRW1iZXIgb2JqZWN0cyB3aWxsIGVmZmVjdGl2ZWx5IGNhbGwKLSAgICBzb21ldGhpbmcg
bGlrZSB0aGlzIG9uIHlvdXIgYmluZGluZzoKLSAgCi0gICAgYGBgamF2YXNjcmlwdAotICAgIGJp
bmRpbmcgPSBFbWJlci5CaW5kaW5nLmZyb20oInZhbHVlQmluZGluZyIpLnRvKCJ2YWx1ZSIpOwot
ICAgIGBgYAotICAKLSAgICBUaGlzIGNyZWF0ZXMgYSBuZXcgYmluZGluZyBpbnN0YW5jZSBiYXNl
ZCBvbiB0aGUgdGVtcGxhdGUgeW91IHByb3ZpZGUsIGFuZAotICAgIHNldHMgdGhlIHRvIHBhdGgg
dG8gdGhlIGB2YWx1ZWAgcHJvcGVydHkgb2YgdGhlIG5ldyBvYmplY3QuIE5vdyB0aGF0IHRoZQot
ICAgIGJpbmRpbmcgaXMgZnVsbHkgY29uZmlndXJlZCB3aXRoIGEgYGZyb21gIGFuZCBhIGB0b2As
IGl0IHNpbXBseSBuZWVkcyB0byBiZQotICAgIGNvbm5lY3RlZCB0byBiZWNvbWUgYWN0aXZlLiBU
aGlzIGlzIGRvbmUgdGhyb3VnaCB0aGUgYGNvbm5lY3QoKWAgbWV0aG9kOgotICAKLSAgICBgYGBq
YXZhc2NyaXB0Ci0gICAgYmluZGluZy5jb25uZWN0KHRoaXMpOwotICAgIGBgYAotICAKLSAgICBO
b3RlIHRoYXQgd2hlbiB5b3UgY29ubmVjdCBhIGJpbmRpbmcgeW91IHBhc3MgdGhlIG9iamVjdCB5
b3Ugd2FudCBpdCB0byBiZQotICAgIGNvbm5lY3RlZCB0by4gVGhpcyBvYmplY3Qgd2lsbCBiZSB1
c2VkIGFzIHRoZSByb290IGZvciBib3RoIHRoZSBmcm9tIGFuZAotICAgIHRvIHNpZGUgb2YgdGhl
IGJpbmRpbmcgd2hlbiBpbnNwZWN0aW5nIHJlbGF0aXZlIHBhdGhzLiBUaGlzIGFsbG93cyB0aGUK
LSAgICBiaW5kaW5nIHRvIGJlIGF1dG9tYXRpY2FsbHkgaW5oZXJpdGVkIGJ5IHN1YmNsYXNzZWQg
b2JqZWN0cyBhcyB3ZWxsLgotICAKLSAgICBUaGlzIGFsc28gYWxsb3dzIHlvdSB0byBiaW5kIGJl
dHdlZW4gb2JqZWN0cyB1c2luZyB0aGUgcGF0aHMgeW91IGRlY2xhcmUgaW4KLSAgICBgZnJvbWAg
YW5kIGB0b2A6Ci0gIAotICAgIGBgYGphdmFzY3JpcHQKLSAgICAvLyBFeGFtcGxlIDEKLSAgICBi
aW5kaW5nID0gRW1iZXIuQmluZGluZy5mcm9tKCJBcHAuc29tZU9iamVjdC52YWx1ZSIpLnRvKCJ2
YWx1ZSIpOwotICAgIGJpbmRpbmcuY29ubmVjdCh0aGlzKTsKLSAgCi0gICAgLy8gRXhhbXBsZSAy
Ci0gICAgYmluZGluZyA9IEVtYmVyLkJpbmRpbmcuZnJvbSgicGFyZW50Vmlldy52YWx1ZSIpLnRv
KCJBcHAuc29tZU9iamVjdC52YWx1ZSIpOwotICAgIGJpbmRpbmcuY29ubmVjdCh0aGlzKTsKLSAg
ICBgYGAKLSAgCi0gICAgTm93IHRoYXQgdGhlIGJpbmRpbmcgaXMgY29ubmVjdGVkLCBpdCB3aWxs
IG9ic2VydmUgYm90aCB0aGUgZnJvbSBhbmQgdG8gc2lkZQotICAgIGFuZCByZWxheSBjaGFuZ2Vz
LgotICAKLSAgICBJZiB5b3UgZXZlciBuZWVkZWQgdG8gZG8gc28gKHlvdSBhbG1vc3QgbmV2ZXIg
d2lsbCwgYnV0IGl0IGlzIHVzZWZ1bCB0bwotICAgIHVuZGVyc3RhbmQgdGhpcyBhbnl3YXkpLCB5
b3UgY291bGQgbWFudWFsbHkgY3JlYXRlIGFuIGFjdGl2ZSBiaW5kaW5nIGJ5Ci0gICAgdXNpbmcg
dGhlIGBFbWJlci5iaW5kKClgIGhlbHBlciBtZXRob2QuIChUaGlzIGlzIHRoZSBzYW1lIG1ldGhv
ZCB1c2VkIGJ5Ci0gICAgdG8gc2V0dXAgeW91ciBiaW5kaW5ncyBvbiBvYmplY3RzKToKLSAgCi0g
ICAgYGBgamF2YXNjcmlwdAotICAgIEVtYmVyLmJpbmQoTXlBcHAuYW5vdGhlck9iamVjdCwgInZh
bHVlIiwgIk15QXBwLnNvbWVDb250cm9sbGVyLnZhbHVlIik7Ci0gICAgYGBgCi0gIAotICAgIEJv
dGggb2YgdGhlc2UgY29kZSBmcmFnbWVudHMgaGF2ZSB0aGUgc2FtZSBlZmZlY3QgYXMgZG9pbmcg
dGhlIG1vc3QgZnJpZW5kbHkKLSAgICBmb3JtIG9mIGJpbmRpbmcgY3JlYXRpb24gbGlrZSBzbzoK
LSAgCi0gICAgYGBgamF2YXNjcmlwdAotICAgIE15QXBwLmFub3RoZXJPYmplY3QgPSBFbWJlci5P
YmplY3QuY3JlYXRlKHsKLSAgICAgIHZhbHVlQmluZGluZzogIk15QXBwLnNvbWVDb250cm9sbGVy
LnZhbHVlIiwKLSAgCi0gICAgICAvLyBPVEhFUiBDT0RFIEZPUiBUSElTIE9CSkVDVC4uLgotICAg
IH0pOwotICAgIGBgYAotICAKLSAgICBFbWJlcidzIGJ1aWx0IGluIGJpbmRpbmcgY3JlYXRpb24g
bWV0aG9kIG1ha2VzIGl0IGVhc3kgdG8gYXV0b21hdGljYWxseQotICAgIGNyZWF0ZSBiaW5kaW5n
cyBmb3IgeW91LiBZb3Ugc2hvdWxkIGFsd2F5cyB1c2UgdGhlIGhpZ2hlc3QtbGV2ZWwgQVBJcwot
ICAgIGF2YWlsYWJsZSwgZXZlbiBpZiB5b3UgdW5kZXJzdGFuZCBob3cgaXQgd29ya3MgdW5kZXJu
ZWF0aC4KLSAgCi0gICAgQGNsYXNzIEJpbmRpbmcKLSAgICBAbmFtZXNwYWNlIEVtYmVyCi0gICAg
QHNpbmNlIEVtYmVyIDAuOQotICAgIEBwdWJsaWMKLSAgKi8KLSAgLy8gRW1iZXIuQmluZGluZyA9
IEJpbmRpbmc7IEVTNlRPRE86IHdoZXJlIHRvIHB1dCB0aGlzPwotCi0gIC8qKgotICAgIEdsb2Jh
bCBoZWxwZXIgbWV0aG9kIHRvIGNyZWF0ZSBhIG5ldyBiaW5kaW5nLiBKdXN0IHBhc3MgdGhlIHJv
b3Qgb2JqZWN0Ci0gICAgYWxvbmcgd2l0aCBhIGB0b2AgYW5kIGBmcm9tYCBwYXRoIHRvIGNyZWF0
ZSBhbmQgY29ubmVjdCB0aGUgYmluZGluZy4KLSAgCi0gICAgQG1ldGhvZCBiaW5kCi0gICAgQGZv
ciBFbWJlcgotICAgIEBwYXJhbSB7T2JqZWN0fSBvYmogVGhlIHJvb3Qgb2JqZWN0IG9mIHRoZSB0
cmFuc2Zvcm0uCi0gICAgQHBhcmFtIHtTdHJpbmd9IHRvIFRoZSBwYXRoIHRvIHRoZSAndG8nIHNp
ZGUgb2YgdGhlIGJpbmRpbmcuCi0gICAgICBNdXN0IGJlIHJlbGF0aXZlIHRvIG9iai4KLSAgICBA
cGFyYW0ge1N0cmluZ30gZnJvbSBUaGUgcGF0aCB0byB0aGUgJ2Zyb20nIHNpZGUgb2YgdGhlIGJp
bmRpbmcuCi0gICAgICBNdXN0IGJlIHJlbGF0aXZlIHRvIG9iaiBvciBhIGdsb2JhbCBwYXRoLgot
ICAgIEByZXR1cm4ge0VtYmVyLkJpbmRpbmd9IGJpbmRpbmcgaW5zdGFuY2UKLSAgICBAcHVibGlj
Ci0gICovCi0KLSAgZnVuY3Rpb24gYmluZChvYmosIHRvLCBmcm9tKSB7Ci0gICAgcmV0dXJuIG5l
dyBCaW5kaW5nKHRvLCBmcm9tKS5jb25uZWN0KG9iaik7Ci0gIH0KLQotICBleHBvcnRzLkJpbmRp
bmcgPSBCaW5kaW5nOwotfSk7Ci0vLyBFbWJlci5MT0dfQklORElOR1MKLWVuaWZlZCgnZW1iZXIt
bWV0YWwvY2FjaGUnLCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwvZW1wdHlfb2JqZWN0J10sIGZ1
bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbEVtcHR5X29iamVjdCkgewotICAndXNlIHN0cmlj
dCc7Ci0KLSAgZXhwb3J0cy5kZWZhdWx0ID0gQ2FjaGU7Ci0KLSAgZnVuY3Rpb24gQ2FjaGUobGlt
aXQsIGZ1bmMpIHsKLSAgICB0aGlzLnN0b3JlID0gbmV3IF9lbWJlck1ldGFsRW1wdHlfb2JqZWN0
LmRlZmF1bHQoKTsKLSAgICB0aGlzLnNpemUgPSAwOwotICAgIHRoaXMubWlzc2VzID0gMDsKLSAg
ICB0aGlzLmhpdHMgPSAwOwotICAgIHRoaXMubGltaXQgPSBsaW1pdDsKLSAgICB0aGlzLmZ1bmMg
PSBmdW5jOwotICB9Ci0KLSAgdmFyIFVOREVGSU5FRCA9IGZ1bmN0aW9uICgpIHt9OwotCi0gIENh
Y2hlLnByb3RvdHlwZSA9IHsKLSAgICBzZXQ6IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7Ci0gICAg
ICBpZiAodGhpcy5saW1pdCA+IHRoaXMuc2l6ZSkgewotICAgICAgICB0aGlzLnNpemUrKzsKLSAg
ICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHsKLSAgICAgICAgICB0aGlzLnN0b3JlW2tl
eV0gPSBVTkRFRklORUQ7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgdGhpcy5zdG9yZVtr
ZXldID0gdmFsdWU7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgcmV0dXJuIHZhbHVlOwot
ICAgIH0sCi0KLSAgICBnZXQ6IGZ1bmN0aW9uIChrZXkpIHsKLSAgICAgIHZhciB2YWx1ZSA9IHRo
aXMuc3RvcmVba2V5XTsKLQotICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHsKLSAgICAg
ICAgdGhpcy5taXNzZXMrKzsKLSAgICAgICAgdmFsdWUgPSB0aGlzLnNldChrZXksIHRoaXMuZnVu
YyhrZXkpKTsKLSAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IFVOREVGSU5FRCkgewotICAgICAg
ICB0aGlzLmhpdHMrKzsKLSAgICAgICAgdmFsdWUgPSB1bmRlZmluZWQ7Ci0gICAgICB9IGVsc2Ug
ewotICAgICAgICB0aGlzLmhpdHMrKzsKLSAgICAgICAgLy8gbm90aGluZyB0byB0cmFuc2xhdGUK
LSAgICAgIH0KLQotICAgICAgcmV0dXJuIHZhbHVlOwotICAgIH0sCi0KLSAgICBwdXJnZTogZnVu
Y3Rpb24gKCkgewotICAgICAgdGhpcy5zdG9yZSA9IG5ldyBfZW1iZXJNZXRhbEVtcHR5X29iamVj
dC5kZWZhdWx0KCk7Ci0gICAgICB0aGlzLnNpemUgPSAwOwotICAgICAgdGhpcy5oaXRzID0gMDsK
LSAgICAgIHRoaXMubWlzc2VzID0gMDsKLSAgICB9Ci0gIH07Ci19KTsKLWVuaWZlZCgnZW1iZXIt
bWV0YWwvY2hhaW5zJywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFsL3Byb3BlcnR5X2dldCcsICdl
bWJlci1tZXRhbC9tZXRhJywgJ2VtYmVyLW1ldGFsL3dhdGNoX2tleScsICdlbWJlci1tZXRhbC9l
bXB0eV9vYmplY3QnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0
LCBfZW1iZXJNZXRhbE1ldGEsIF9lbWJlck1ldGFsV2F0Y2hfa2V5LCBfZW1iZXJNZXRhbEVtcHR5
X29iamVjdCkgewotICAndXNlIHN0cmljdCc7Ci0KLSAgZXhwb3J0cy5maW5pc2hDaGFpbnMgPSBm
aW5pc2hDaGFpbnM7Ci0KLSAgdmFyIEZJUlNUX0tFWSA9IC9eKFteXC5dKykvOwotCi0gIGZ1bmN0
aW9uIGZpcnN0S2V5KHBhdGgpIHsKLSAgICByZXR1cm4gcGF0aC5tYXRjaChGSVJTVF9LRVkpWzBd
OwotICB9Ci0KLSAgZnVuY3Rpb24gaXNPYmplY3Qob2JqKSB7Ci0gICAgcmV0dXJuIG9iaiAmJiB0
eXBlb2Ygb2JqID09PSAnb2JqZWN0JzsKLSAgfQotCi0gIGZ1bmN0aW9uIGlzVm9sYXRpbGUob2Jq
KSB7Ci0gICAgcmV0dXJuICEoaXNPYmplY3Qob2JqKSAmJiBvYmouaXNEZXNjcmlwdG9yICYmIG9i
ai5fdm9sYXRpbGUgPT09IGZhbHNlKTsKLSAgfQotCi0gIGZ1bmN0aW9uIENoYWluV2F0Y2hlcnMo
KSB7Ci0gICAgLy8gY2hhaW4gbm9kZXMgdGhhdCByZWZlcmVuY2UgYSBrZXkgaW4gdGhpcyBvYmog
Ynkga2V5Ci0gICAgLy8gd2Ugb25seSBjcmVhdGUgQ2hhaW5XYXRjaGVycyB3aGVuIHdlIGFyZSBn
b2luZyB0byBhZGQgdGhlbQotICAgIC8vIHNvIGNyZWF0ZSB0aGlzIHVwZnJvbnQKLSAgICB0aGlz
LmNoYWlucyA9IG5ldyBfZW1iZXJNZXRhbEVtcHR5X29iamVjdC5kZWZhdWx0KCk7Ci0gIH0KLQot
ICBDaGFpbldhdGNoZXJzLnByb3RvdHlwZSA9IHsKLSAgICBhZGQ6IGZ1bmN0aW9uIChrZXksIG5v
ZGUpIHsKLSAgICAgIHZhciBub2RlcyA9IHRoaXMuY2hhaW5zW2tleV07Ci0gICAgICBpZiAobm9k
ZXMgPT09IHVuZGVmaW5lZCkgewotICAgICAgICB0aGlzLmNoYWluc1trZXldID0gW25vZGVdOwot
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgbm9kZXMucHVzaChub2RlKTsKLSAgICAgIH0KLSAgICB9
LAotCi0gICAgcmVtb3ZlOiBmdW5jdGlvbiAoa2V5LCBub2RlKSB7Ci0gICAgICB2YXIgbm9kZXMg
PSB0aGlzLmNoYWluc1trZXldOwotICAgICAgaWYgKG5vZGVzKSB7Ci0gICAgICAgIGZvciAodmFy
IGkgPSAwLCBsID0gbm9kZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7Ci0gICAgICAgICAgaWYgKG5v
ZGVzW2ldID09PSBub2RlKSB7Ci0gICAgICAgICAgICBub2Rlcy5zcGxpY2UoaSwgMSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAot
Ci0gICAgaGFzOiBmdW5jdGlvbiAoa2V5LCBub2RlKSB7Ci0gICAgICB2YXIgbm9kZXMgPSB0aGlz
LmNoYWluc1trZXldOwotICAgICAgaWYgKG5vZGVzKSB7Ci0gICAgICAgIGZvciAodmFyIGkgPSAw
LCBsID0gbm9kZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7Ci0gICAgICAgICAgaWYgKG5vZGVzW2ld
ID09PSBub2RlKSB7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICAgIH0KLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9LAotCi0gICAgcmV2YWxp
ZGF0ZUFsbDogZnVuY3Rpb24gKCkgewotICAgICAgZm9yICh2YXIga2V5IGluIHRoaXMuY2hhaW5z
KSB7Ci0gICAgICAgIHRoaXMubm90aWZ5KGtleSwgdHJ1ZSwgdW5kZWZpbmVkKTsKLSAgICAgIH0K
LSAgICB9LAotCi0gICAgcmV2YWxpZGF0ZTogZnVuY3Rpb24gKGtleSkgewotICAgICAgdGhpcy5u
b3RpZnkoa2V5LCB0cnVlLCB1bmRlZmluZWQpOwotICAgIH0sCi0KLSAgICAvLyBrZXk6IHRoZSBz
dHJpbmcga2V5IHRoYXQgaXMgcGFydCBvZiBhIHBhdGggY2hhbmdlZAotICAgIC8vIHJldmFsaWRh
dGU6IGJvb2xlYW47IHRoZSBjaGFpbnMgdGhhdCBhcmUgd2F0Y2hpbmcgdGhpcyB2YWx1ZSBzaG91
bGQgcmV2YWxpZGF0ZQotICAgIC8vIGNhbGxiYWNrOiBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2Fs
bGVkIHdpdGggdGhlIG9iamVjdCBhbmQgcGF0aCB0aGF0Ci0gICAgLy8gICAgICAgICAgIHdpbGwg
YmUvYXJlIGludmFsaWRhdGVkIGJ5IHRoaXMga2V5IGNoYW5nZSwgZGVwZW5kaW5nIG9uCi0gICAg
Ly8gICAgICAgICAgIHdoZXRoZXIgdGhlIHJldmFsaWRhdGUgZmxhZyBpcyBwYXNzZWQKLSAgICBu
b3RpZnk6IGZ1bmN0aW9uIChrZXksIHJldmFsaWRhdGUsIGNhbGxiYWNrKSB7Ci0gICAgICB2YXIg
bm9kZXMgPSB0aGlzLmNoYWluc1trZXldOwotICAgICAgaWYgKG5vZGVzID09PSB1bmRlZmluZWQg
fHwgbm9kZXMubGVuZ3RoID09PSAwKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLQotICAg
ICAgdmFyIGFmZmVjdGVkID0gdW5kZWZpbmVkOwotCi0gICAgICBpZiAoY2FsbGJhY2spIHsKLSAg
ICAgICAgYWZmZWN0ZWQgPSBbXTsKLSAgICAgIH0KLQotICAgICAgZm9yICh2YXIgaSA9IDAsIGwg
PSBub2Rlcy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKLSAgICAgICAgbm9kZXNbaV0ubm90aWZ5KHJl
dmFsaWRhdGUsIGFmZmVjdGVkKTsKLSAgICAgIH0KLQotICAgICAgaWYgKGNhbGxiYWNrID09PSB1
bmRlZmluZWQpIHsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotCi0gICAgICAvLyB3ZSBnYXRo
ZXIgY2FsbGJhY2tzIHNvIHdlIGRvbid0IG5vdGlmeSB0aGVtIGR1cmluZyByZXZhbGlkYXRpb24K
LSAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gYWZmZWN0ZWQubGVuZ3RoOyBpIDwgbDsgaSArPSAy
KSB7Ci0gICAgICAgIHZhciBvYmogPSBhZmZlY3RlZFtpXTsKLSAgICAgICAgdmFyIHBhdGggPSBh
ZmZlY3RlZFtpICsgMV07Ci0gICAgICAgIGNhbGxiYWNrKG9iaiwgcGF0aCk7Ci0gICAgICB9Ci0g
ICAgfQotICB9OwotCi0gIGZ1bmN0aW9uIG1ha2VDaGFpbldhdGNoZXIoKSB7Ci0gICAgcmV0dXJu
IG5ldyBDaGFpbldhdGNoZXJzKCk7Ci0gIH0KLQotICBmdW5jdGlvbiBhZGRDaGFpbldhdGNoZXIo
b2JqLCBrZXlOYW1lLCBub2RlKSB7Ci0gICAgaWYgKCFpc09iamVjdChvYmopKSB7Ci0gICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgdmFyIG0gPSBfZW1iZXJNZXRhbE1ldGEubWV0YShvYmopOwot
ICAgIG0ud3JpdGFibGVDaGFpbldhdGNoZXJzKG1ha2VDaGFpbldhdGNoZXIpLmFkZChrZXlOYW1l
LCBub2RlKTsKLSAgICBfZW1iZXJNZXRhbFdhdGNoX2tleS53YXRjaEtleShvYmosIGtleU5hbWUs
IG0pOwotICB9Ci0KLSAgZnVuY3Rpb24gcmVtb3ZlQ2hhaW5XYXRjaGVyKG9iaiwga2V5TmFtZSwg
bm9kZSkgewotICAgIGlmICghaXNPYmplY3Qob2JqKSkgewotICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIHZhciBtID0gX2VtYmVyTWV0YWxNZXRhLnBlZWtNZXRhKG9iaik7Ci0KLSAgICBpZiAo
IW0gfHwgIW0ucmVhZGFibGVDaGFpbldhdGNoZXJzKCkpIHsKLSAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICAvLyBtYWtlIG1ldGEgd3JpdGFibGUKLSAgICBtID0gX2VtYmVyTWV0YWxNZXRhLm1l
dGEob2JqKTsKLQotICAgIG0ucmVhZGFibGVDaGFpbldhdGNoZXJzKCkucmVtb3ZlKGtleU5hbWUs
IG5vZGUpOwotCi0gICAgX2VtYmVyTWV0YWxXYXRjaF9rZXkudW53YXRjaEtleShvYmosIGtleU5h
bWUsIG0pOwotICB9Ci0KLSAgLy8gQSBDaGFpbk5vZGUgd2F0Y2hlcyBhIHNpbmdsZSBrZXkgb24g
YW4gb2JqZWN0LiBJZiB5b3UgcHJvdmlkZSBhIHN0YXJ0aW5nCi0gIC8vIHZhbHVlIGZvciB0aGUg
a2V5IHRoZW4gdGhlIG5vZGUgd29uJ3QgYWN0dWFsbHkgd2F0Y2ggaXQuIEZvciBhIHJvb3Qgbm9k
ZQotICAvLyBwYXNzIG51bGwgZm9yIHBhcmVudCBhbmQga2V5IGFuZCBvYmplY3QgZm9yIHZhbHVl
LgotICBmdW5jdGlvbiBDaGFpbk5vZGUocGFyZW50LCBrZXksIHZhbHVlKSB7Ci0gICAgdGhpcy5f
cGFyZW50ID0gcGFyZW50OwotICAgIHRoaXMuX2tleSA9IGtleTsKLQotICAgIC8vIF93YXRjaGlu
ZyBpcyB0cnVlIHdoZW4gY2FsbGluZyBnZXQodGhpcy5fcGFyZW50LCB0aGlzLl9rZXkpIHdpbGwK
LSAgICAvLyByZXR1cm4gdGhlIHZhbHVlIG9mIHRoaXMgbm9kZS4KLSAgICAvLwotICAgIC8vIEl0
IGlzIGZhbHNlIGZvciB0aGUgcm9vdCBvZiBhIGNoYWluIChiZWNhdXNlIHdlIGhhdmUgbm8gcGFy
ZW50KQotICAgIC8vIGFuZCBmb3IgZ2xvYmFsIHBhdGhzIChiZWNhdXNlIHRoZSBwYXJlbnQgbm9k
ZSBpcyB0aGUgb2JqZWN0IHdpdGgKLSAgICAvLyB0aGUgb2JzZXJ2ZXIgb24gaXQpCi0gICAgdGhp
cy5fd2F0Y2hpbmcgPSB2YWx1ZSA9PT0gdW5kZWZpbmVkOwotCi0gICAgdGhpcy5fY2hhaW5zID0g
dW5kZWZpbmVkOwotICAgIHRoaXMuX29iamVjdCA9IHVuZGVmaW5lZDsKLSAgICB0aGlzLmNvdW50
ID0gMDsKLQotICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7Ci0gICAgdGhpcy5fcGF0aHMgPSB7fTsK
LSAgICBpZiAodGhpcy5fd2F0Y2hpbmcpIHsKLSAgICAgIHRoaXMuX29iamVjdCA9IHBhcmVudC52
YWx1ZSgpOwotICAgICAgaWYgKHRoaXMuX29iamVjdCkgewotICAgICAgICBhZGRDaGFpbldhdGNo
ZXIodGhpcy5fb2JqZWN0LCB0aGlzLl9rZXksIHRoaXMpOwotICAgICAgfQotICAgIH0KLSAgfQot
Ci0gIGZ1bmN0aW9uIGxhenlHZXQob2JqLCBrZXkpIHsKLSAgICBpZiAoIW9iaikgewotICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIHZhciBtZXRhID0gX2VtYmVyTWV0YWxNZXRhLnBlZWtNZXRh
KG9iaik7Ci0KLSAgICAvLyBjaGVjayBpZiBvYmplY3QgbWVhbnQgb25seSB0byBiZSBhIHByb3Rv
dHlwZQotICAgIGlmIChtZXRhICYmIG1ldGEucHJvdG8gPT09IG9iaikgewotICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIC8vIFVzZSBgZ2V0YCBpZiB0aGUgcmV0dXJuIHZhbHVlIGlzIGFuIEVh
Y2hQcm94eSBvciBhbiB1bmNhY2hlYWJsZSB2YWx1ZS4KLSAgICBpZiAoaXNWb2xhdGlsZShvYmpb
a2V5XSkpIHsKLSAgICAgIHJldHVybiBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQob2JqLCBr
ZXkpOwotICAgICAgLy8gT3RoZXJ3aXNlIGF0dGVtcHQgdG8gZ2V0IHRoZSBjYWNoZWQgdmFsdWUg
b2YgdGhlIGNvbXB1dGVkIHByb3BlcnR5Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgdmFyIGNhY2hl
ID0gbWV0YS5yZWFkYWJsZUNhY2hlKCk7Ci0gICAgICAgIGlmIChjYWNoZSAmJiBrZXkgaW4gY2Fj
aGUpIHsKLSAgICAgICAgICByZXR1cm4gY2FjaGVba2V5XTsKLSAgICAgICAgfQotICAgICAgfQot
ICB9Ci0KLSAgQ2hhaW5Ob2RlLnByb3RvdHlwZSA9IHsKLSAgICB2YWx1ZTogZnVuY3Rpb24gKCkg
ewotICAgICAgaWYgKHRoaXMuX3ZhbHVlID09PSB1bmRlZmluZWQgJiYgdGhpcy5fd2F0Y2hpbmcp
IHsKLSAgICAgICAgdmFyIG9iaiA9IHRoaXMuX3BhcmVudC52YWx1ZSgpOwotICAgICAgICB0aGlz
Ll92YWx1ZSA9IGxhenlHZXQob2JqLCB0aGlzLl9rZXkpOwotICAgICAgfQotICAgICAgcmV0dXJu
IHRoaXMuX3ZhbHVlOwotICAgIH0sCi0KLSAgICBkZXN0cm95OiBmdW5jdGlvbiAoKSB7Ci0gICAg
ICBpZiAodGhpcy5fd2F0Y2hpbmcpIHsKLSAgICAgICAgdmFyIG9iaiA9IHRoaXMuX29iamVjdDsK
LSAgICAgICAgaWYgKG9iaikgewotICAgICAgICAgIHJlbW92ZUNoYWluV2F0Y2hlcihvYmosIHRo
aXMuX2tleSwgdGhpcyk7Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy5fd2F0Y2hpbmcgPSBmYWxz
ZTsgLy8gc28gZnV0dXJlIGNhbGxzIGRvIG5vdGhpbmcKLSAgICAgIH0KLSAgICB9LAotCi0gICAg
Ly8gY29waWVzIGEgdG9wIGxldmVsIG9iamVjdCBvbmx5Ci0gICAgY29weTogZnVuY3Rpb24gKG9i
aikgewotICAgICAgdmFyIHJldCA9IG5ldyBDaGFpbk5vZGUobnVsbCwgbnVsbCwgb2JqKTsKLSAg
ICAgIHZhciBwYXRocyA9IHRoaXMuX3BhdGhzOwotICAgICAgdmFyIHBhdGg7Ci0KLSAgICAgIGZv
ciAocGF0aCBpbiBwYXRocykgewotICAgICAgICAvLyB0aGlzIGNoZWNrIHdpbGwgYWxzbyBjYXRj
aCBub24tbnVtYmVyIHZhbHMuCi0gICAgICAgIGlmIChwYXRoc1twYXRoXSA8PSAwKSB7Ci0gICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0LmFkZChwYXRoKTsKLSAgICAg
IH0KLSAgICAgIHJldHVybiByZXQ7Ci0gICAgfSwKLQotICAgIC8vIGNhbGxlZCBvbiB0aGUgcm9v
dCBub2RlIG9mIGEgY2hhaW4gdG8gc2V0dXAgd2F0Y2hlcnMgb24gdGhlIHNwZWNpZmllZAotICAg
IC8vIHBhdGguCi0gICAgYWRkOiBmdW5jdGlvbiAocGF0aCkgewotICAgICAgdmFyIHBhdGhzID0g
dGhpcy5fcGF0aHM7Ci0gICAgICBwYXRoc1twYXRoXSA9IChwYXRoc1twYXRoXSB8fCAwKSArIDE7
Ci0KLSAgICAgIHZhciBrZXkgPSBmaXJzdEtleShwYXRoKTsKLSAgICAgIHZhciB0YWlsID0gcGF0
aC5zbGljZShrZXkubGVuZ3RoICsgMSk7Ci0KLSAgICAgIHRoaXMuY2hhaW4oa2V5LCB0YWlsKTsK
LSAgICB9LAotCi0gICAgLy8gY2FsbGVkIG9uIHRoZSByb290IG5vZGUgb2YgYSBjaGFpbiB0byB0
ZWFyZG93biB3YXRjaGVyIG9uIHRoZSBzcGVjaWZpZWQKLSAgICAvLyBwYXRoCi0gICAgcmVtb3Zl
OiBmdW5jdGlvbiAocGF0aCkgewotICAgICAgdmFyIHBhdGhzID0gdGhpcy5fcGF0aHM7Ci0gICAg
ICBpZiAocGF0aHNbcGF0aF0gPiAwKSB7Ci0gICAgICAgIHBhdGhzW3BhdGhdLS07Ci0gICAgICB9
Ci0KLSAgICAgIHZhciBrZXkgPSBmaXJzdEtleShwYXRoKTsKLSAgICAgIHZhciB0YWlsID0gcGF0
aC5zbGljZShrZXkubGVuZ3RoICsgMSk7Ci0KLSAgICAgIHRoaXMudW5jaGFpbihrZXksIHRhaWwp
OwotICAgIH0sCi0KLSAgICBjaGFpbjogZnVuY3Rpb24gKGtleSwgcGF0aCkgewotICAgICAgdmFy
IGNoYWlucyA9IHRoaXMuX2NoYWluczsKLSAgICAgIHZhciBub2RlOwotICAgICAgaWYgKGNoYWlu
cyA9PT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgIGNoYWlucyA9IHRoaXMuX2NoYWlucyA9IG5ldyBf
ZW1iZXJNZXRhbEVtcHR5X29iamVjdC5kZWZhdWx0KCk7Ci0gICAgICB9IGVsc2UgewotICAgICAg
ICBub2RlID0gY2hhaW5zW2tleV07Ci0gICAgICB9Ci0KLSAgICAgIGlmIChub2RlID09PSB1bmRl
ZmluZWQpIHsKLSAgICAgICAgbm9kZSA9IGNoYWluc1trZXldID0gbmV3IENoYWluTm9kZSh0aGlz
LCBrZXksIHVuZGVmaW5lZCk7Ci0gICAgICB9Ci0KLSAgICAgIG5vZGUuY291bnQrKzsgLy8gY291
bnQgY2hhaW5zLi4uCi0KLSAgICAgIC8vIGNoYWluIHJlc3Qgb2YgcGF0aCBpZiB0aGVyZSBpcyBv
bmUKLSAgICAgIGlmIChwYXRoKSB7Ci0gICAgICAgIGtleSA9IGZpcnN0S2V5KHBhdGgpOwotICAg
ICAgICBwYXRoID0gcGF0aC5zbGljZShrZXkubGVuZ3RoICsgMSk7Ci0gICAgICAgIG5vZGUuY2hh
aW4oa2V5LCBwYXRoKTsKLSAgICAgIH0KLSAgICB9LAotCi0gICAgdW5jaGFpbjogZnVuY3Rpb24g
KGtleSwgcGF0aCkgewotICAgICAgdmFyIGNoYWlucyA9IHRoaXMuX2NoYWluczsKLSAgICAgIHZh
ciBub2RlID0gY2hhaW5zW2tleV07Ci0KLSAgICAgIC8vIHVuY2hhaW4gcmVzdCBvZiBwYXRoIGZp
cnN0Li4uCi0gICAgICBpZiAocGF0aCAmJiBwYXRoLmxlbmd0aCA+IDEpIHsKLSAgICAgICAgdmFy
IG5leHRLZXkgPSBmaXJzdEtleShwYXRoKTsKLSAgICAgICAgdmFyIG5leHRQYXRoID0gcGF0aC5z
bGljZShuZXh0S2V5Lmxlbmd0aCArIDEpOwotICAgICAgICBub2RlLnVuY2hhaW4obmV4dEtleSwg
bmV4dFBhdGgpOwotICAgICAgfQotCi0gICAgICAvLyBkZWxldGUgbm9kZSBpZiBuZWVkZWQuCi0g
ICAgICBub2RlLmNvdW50LS07Ci0gICAgICBpZiAobm9kZS5jb3VudCA8PSAwKSB7Ci0gICAgICAg
IGNoYWluc1tub2RlLl9rZXldID0gdW5kZWZpbmVkOwotICAgICAgICBub2RlLmRlc3Ryb3koKTsK
LSAgICAgIH0KLSAgICB9LAotCi0gICAgbm90aWZ5OiBmdW5jdGlvbiAocmV2YWxpZGF0ZSwgYWZm
ZWN0ZWQpIHsKLSAgICAgIGlmIChyZXZhbGlkYXRlICYmIHRoaXMuX3dhdGNoaW5nKSB7Ci0gICAg
ICAgIHZhciBvYmogPSB0aGlzLl9wYXJlbnQudmFsdWUoKTsKLSAgICAgICAgaWYgKG9iaiAhPT0g
dGhpcy5fb2JqZWN0KSB7Ci0gICAgICAgICAgcmVtb3ZlQ2hhaW5XYXRjaGVyKHRoaXMuX29iamVj
dCwgdGhpcy5fa2V5LCB0aGlzKTsKLSAgICAgICAgICB0aGlzLl9vYmplY3QgPSBvYmo7Ci0gICAg
ICAgICAgYWRkQ2hhaW5XYXRjaGVyKG9iaiwgdGhpcy5fa2V5LCB0aGlzKTsKLSAgICAgICAgfQot
ICAgICAgICB0aGlzLl92YWx1ZSA9IHVuZGVmaW5lZDsKLSAgICAgIH0KLQotICAgICAgLy8gdGhl
biBub3RpZnkgY2hhaW5zLi4uCi0gICAgICB2YXIgY2hhaW5zID0gdGhpcy5fY2hhaW5zOwotICAg
ICAgdmFyIG5vZGU7Ci0gICAgICBpZiAoY2hhaW5zKSB7Ci0gICAgICAgIGZvciAodmFyIGtleSBp
biBjaGFpbnMpIHsKLSAgICAgICAgICBub2RlID0gY2hhaW5zW2tleV07Ci0gICAgICAgICAgaWYg
KG5vZGUgIT09IHVuZGVmaW5lZCkgewotICAgICAgICAgICAgbm9kZS5ub3RpZnkocmV2YWxpZGF0
ZSwgYWZmZWN0ZWQpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBp
ZiAoYWZmZWN0ZWQgJiYgdGhpcy5fcGFyZW50KSB7Ci0gICAgICAgIHRoaXMuX3BhcmVudC5wb3B1
bGF0ZUFmZmVjdGVkKHRoaXMuX2tleSwgMSwgYWZmZWN0ZWQpOwotICAgICAgfQotICAgIH0sCi0K
LSAgICBwb3B1bGF0ZUFmZmVjdGVkOiBmdW5jdGlvbiAocGF0aCwgZGVwdGgsIGFmZmVjdGVkKSB7
Ci0gICAgICBpZiAodGhpcy5fa2V5KSB7Ci0gICAgICAgIHBhdGggPSB0aGlzLl9rZXkgKyAnLicg
KyBwYXRoOwotICAgICAgfQotCi0gICAgICBpZiAodGhpcy5fcGFyZW50KSB7Ci0gICAgICAgIHRo
aXMuX3BhcmVudC5wb3B1bGF0ZUFmZmVjdGVkKHBhdGgsIGRlcHRoICsgMSwgYWZmZWN0ZWQpOwot
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKGRlcHRoID4gMSkgewotICAgICAgICAgIGFmZmVj
dGVkLnB1c2godGhpcy52YWx1ZSgpLCBwYXRoKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0K
LSAgfTsKLQotICBmdW5jdGlvbiBmaW5pc2hDaGFpbnMob2JqKSB7Ci0gICAgLy8gV2Ugb25seSBj
cmVhdGUgbWV0YSBpZiB3ZSByZWFsbHkgaGF2ZSB0bwotICAgIHZhciBtID0gX2VtYmVyTWV0YWxN
ZXRhLnBlZWtNZXRhKG9iaik7Ci0gICAgaWYgKG0pIHsKLSAgICAgIG0gPSBfZW1iZXJNZXRhbE1l
dGEubWV0YShvYmopOwotCi0gICAgICAvLyBmaW5pc2ggYW55IGN1cnJlbnQgY2hhaW5zIG5vZGUg
d2F0Y2hlcnMgdGhhdCByZWZlcmVuY2Ugb2JqCi0gICAgICB2YXIgY2hhaW5XYXRjaGVycyA9IG0u
cmVhZGFibGVDaGFpbldhdGNoZXJzKCk7Ci0gICAgICBpZiAoY2hhaW5XYXRjaGVycykgewotICAg
ICAgICBjaGFpbldhdGNoZXJzLnJldmFsaWRhdGVBbGwoKTsKLSAgICAgIH0KLSAgICAgIC8vIGVu
c3VyZSB0aGF0IGlmIHdlIGhhdmUgaW5oZXJpdGVkIGFueSBjaGFpbnMgdGhleSBoYXZlIGJlZW4K
LSAgICAgIC8vIGNvcGllZCBvbnRvIG91ciBvd24gbWV0YS4KLSAgICAgIGlmIChtLnJlYWRhYmxl
Q2hhaW5zKCkpIHsKLSAgICAgICAgbS53cml0YWJsZUNoYWlucygpOwotICAgICAgfQotICAgIH0K
LSAgfQotCi0gIGV4cG9ydHMucmVtb3ZlQ2hhaW5XYXRjaGVyID0gcmVtb3ZlQ2hhaW5XYXRjaGVy
OwotICBleHBvcnRzLkNoYWluTm9kZSA9IENoYWluTm9kZTsKLX0pOwotZW5pZmVkKCdlbWJlci1t
ZXRhbC9jb21wdXRlZCcsIFsnZXhwb3J0cycsICdlbWJlci1tZXRhbC9kZWJ1ZycsICdlbWJlci1t
ZXRhbC9wcm9wZXJ0eV9zZXQnLCAnZW1iZXItbWV0YWwvdXRpbHMnLCAnZW1iZXItbWV0YWwvbWV0
YScsICdlbWJlci1tZXRhbC9leHBhbmRfcHJvcGVydGllcycsICdlbWJlci1tZXRhbC9lcnJvcics
ICdlbWJlci1tZXRhbC9wcm9wZXJ0aWVzJywgJ2VtYmVyLW1ldGFsL3Byb3BlcnR5X2V2ZW50cycs
ICdlbWJlci1tZXRhbC9kZXBlbmRlbnRfa2V5cyddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVy
TWV0YWxEZWJ1ZywgX2VtYmVyTWV0YWxQcm9wZXJ0eV9zZXQsIF9lbWJlck1ldGFsVXRpbHMsIF9l
bWJlck1ldGFsTWV0YSwgX2VtYmVyTWV0YWxFeHBhbmRfcHJvcGVydGllcywgX2VtYmVyTWV0YWxF
cnJvciwgX2VtYmVyTWV0YWxQcm9wZXJ0aWVzLCBfZW1iZXJNZXRhbFByb3BlcnR5X2V2ZW50cywg
X2VtYmVyTWV0YWxEZXBlbmRlbnRfa2V5cykgewotICAndXNlIHN0cmljdCc7Ci0KLSAgZXhwb3J0
cy5kZWZhdWx0ID0gY29tcHV0ZWQ7Ci0KLSAgLyoqCi0gIEBtb2R1bGUgZW1iZXIKLSAgQHN1Ym1v
ZHVsZSBlbWJlci1tZXRhbAotICAqLwotCi0gIGZ1bmN0aW9uIFVOREVGSU5FRCgpIHt9Ci0KLSAg
dmFyIERFRVBfRUFDSF9SRUdFWCA9IC9cLkBlYWNoXC5bXi5dK1wuLzsKLQotICAvKioKLSAgICBB
IGNvbXB1dGVkIHByb3BlcnR5IHRyYW5zZm9ybXMgYW4gb2JqZWN0IGxpdGVyYWwgd2l0aCBvYmpl
Y3QncyBhY2Nlc3NvciBmdW5jdGlvbihzKSBpbnRvIGEgcHJvcGVydHkuCi0gIAotICAgIEJ5IGRl
ZmF1bHQgdGhlIGZ1bmN0aW9uIGJhY2tpbmcgdGhlIGNvbXB1dGVkIHByb3BlcnR5IHdpbGwgb25s
eSBiZSBjYWxsZWQKLSAgICBvbmNlIGFuZCB0aGUgcmVzdWx0IHdpbGwgYmUgY2FjaGVkLiBZb3Ug
Y2FuIHNwZWNpZnkgdmFyaW91cyBwcm9wZXJ0aWVzCi0gICAgdGhhdCB5b3VyIGNvbXB1dGVkIHBy
b3BlcnR5IGRlcGVuZHMgb24uIFRoaXMgd2lsbCBmb3JjZSB0aGUgY2FjaGVkCi0gICAgcmVzdWx0
IHRvIGJlIHJlY29tcHV0ZWQgaWYgdGhlIGRlcGVuZGVuY2llcyBhcmUgbW9kaWZpZWQuCi0gIAot
ICAgIEluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZSB3ZSBkZWNsYXJlIGEgY29tcHV0ZWQgcHJvcGVy
dHkgLSBgZnVsbE5hbWVgIC0gYnkgY2FsbGluZwotICAgIGAuRW1iZXIuY29tcHV0ZWQoKWAgd2l0
aCBwcm9wZXJ0eSBkZXBlbmRlbmNpZXMgKGBmaXJzdE5hbWVgIGFuZCBgbGFzdE5hbWVgKSBhcyBs
ZWFkaW5nIGFyZ3VtZW50cyBhbmQgZ2V0dGVyIGFjY2Vzc29yIGZ1bmN0aW9uLiBUaGUgYGZ1bGxO
YW1lYCBnZXR0ZXIgZnVuY3Rpb24KLSAgICB3aWxsIGJlIGNhbGxlZCBvbmNlIChyZWdhcmRsZXNz
IG9mIGhvdyBtYW55IHRpbWVzIGl0IGlzIGFjY2Vzc2VkKSBhcyBsb25nCi0gICAgYXMgaXRzIGRl
cGVuZGVuY2llcyBoYXZlIG5vdCBjaGFuZ2VkLiBPbmNlIGBmaXJzdE5hbWVgIG9yIGBsYXN0TmFt
ZWAgYXJlIHVwZGF0ZWQKLSAgICBhbnkgZnV0dXJlIGNhbGxzIChvciBhbnl0aGluZyBib3VuZCkg
dG8gYGZ1bGxOYW1lYCB3aWxsIGluY29ycG9yYXRlIHRoZSBuZXcKLSAgICB2YWx1ZXMuCi0gIAot
ICAgIGBgYGphdmFzY3JpcHQKLSAgICBsZXQgUGVyc29uID0gRW1iZXIuT2JqZWN0LmV4dGVuZCh7
Ci0gICAgICAvLyB0aGVzZSB3aWxsIGJlIHN1cHBsaWVkIGJ5IGBjcmVhdGVgCi0gICAgICBmaXJz
dE5hbWU6IG51bGwsCi0gICAgICBsYXN0TmFtZTogbnVsbCwKLSAgCi0gICAgICBmdWxsTmFtZTog
RW1iZXIuY29tcHV0ZWQoJ2ZpcnN0TmFtZScsICdsYXN0TmFtZScsIGZ1bmN0aW9uKCkgewotICAg
ICAgICBsZXQgZmlyc3ROYW1lID0gdGhpcy5nZXQoJ2ZpcnN0TmFtZScpLAotICAgICAgICAgICAg
bGFzdE5hbWUgID0gdGhpcy5nZXQoJ2xhc3ROYW1lJyk7Ci0gIAotICAgICAgICByZXR1cm4gZmly
c3ROYW1lICsgJyAnICsgbGFzdE5hbWU7Ci0gICAgICB9KQotICAgIH0pOwotICAKLSAgICBsZXQg
dG9tID0gUGVyc29uLmNyZWF0ZSh7Ci0gICAgICBmaXJzdE5hbWU6ICdUb20nLAotICAgICAgbGFz
dE5hbWU6ICdEYWxlJwotICAgIH0pOwotICAKLSAgICB0b20uZ2V0KCdmdWxsTmFtZScpIC8vICdU
b20gRGFsZScKLSAgICBgYGAKLSAgCi0gICAgWW91IGNhbiBhbHNvIGRlZmluZSB3aGF0IEVtYmVy
IHNob3VsZCBkbyB3aGVuIHNldHRpbmcgYSBjb21wdXRlZCBwcm9wZXJ0eSBieSBwcm92aWRpbmcg
YWRkaXRpb25hbCBmdW5jdGlvbiAoYHNldGApIGluIGhhc2ggYXJndW1lbnQuCi0gICAgSWYgeW91
IHRyeSB0byBzZXQgYSBjb21wdXRlZCBwcm9wZXJ0eSwgaXQgd2lsbCB0cnkgdG8gaW52b2tlIHNl
dHRlciBhY2Nlc3NvciBmdW5jdGlvbiB3aXRoIHRoZSBrZXkgYW5kCi0gICAgdmFsdWUgeW91IHdh
bnQgdG8gc2V0IGl0IHRvIGFzIGFyZ3VtZW50cy4KLSAgCi0gICAgYGBgamF2YXNjcmlwdAotICAg
IGxldCBQZXJzb24gPSBFbWJlci5PYmplY3QuZXh0ZW5kKHsKLSAgICAgIC8vIHRoZXNlIHdpbGwg
YmUgc3VwcGxpZWQgYnkgYGNyZWF0ZWAKLSAgICAgIGZpcnN0TmFtZTogbnVsbCwKLSAgICAgIGxh
c3ROYW1lOiBudWxsLAotICAKLSAgICAgIGZ1bGxOYW1lOiBFbWJlci5jb21wdXRlZCgnZmlyc3RO
YW1lJywgJ2xhc3ROYW1lJywgewotICAgICAgICBnZXQoa2V5KSB7Ci0gICAgICAgICAgbGV0IGZp
cnN0TmFtZSA9IHRoaXMuZ2V0KCdmaXJzdE5hbWUnKSwKLSAgICAgICAgICAgICAgbGFzdE5hbWUg
ID0gdGhpcy5nZXQoJ2xhc3ROYW1lJyk7Ci0gIAotICAgICAgICAgIHJldHVybiBmaXJzdE5hbWUg
KyAnICcgKyBsYXN0TmFtZTsKLSAgICAgICAgfSwKLSAgICAgICAgc2V0KGtleSwgdmFsdWUpIHsK
LSAgICAgICAgICBsZXQgW2ZpcnN0TmFtZSwgbGFzdE5hbWVdID0gdmFsdWUuc3BsaXQoJyAnKTsK
LSAgCi0gICAgICAgICAgdGhpcy5zZXQoJ2ZpcnN0TmFtZScsIGZpcnN0TmFtZSk7Ci0gICAgICAg
ICAgdGhpcy5zZXQoJ2xhc3ROYW1lJywgbGFzdE5hbWUpOwotICAKLSAgICAgICAgICByZXR1cm4g
dmFsdWU7Ci0gICAgICAgIH0KLSAgICAgIH0pCi0gICAgfSk7Ci0gIAotICAgIGxldCBwZXJzb24g
PSBQZXJzb24uY3JlYXRlKCk7Ci0gIAotICAgIHBlcnNvbi5zZXQoJ2Z1bGxOYW1lJywgJ1BldGVy
IFdhZ2VuZXQnKTsKLSAgICBwZXJzb24uZ2V0KCdmaXJzdE5hbWUnKTsgLy8gJ1BldGVyJwotICAg
IHBlcnNvbi5nZXQoJ2xhc3ROYW1lJyk7ICAvLyAnV2FnZW5ldCcKLSAgICBgYGAKLSAgCi0gICAg
WW91IGNhbiBvdmVyd3JpdGUgY29tcHV0ZWQgcHJvcGVydHkgd2l0aCBub3JtYWwgcHJvcGVydHkg
KG5vIGxvbmdlciBjb21wdXRlZCksIHRoYXQgd29uJ3QgY2hhbmdlIGlmIGRlcGVuZGVuY2llcyBj
aGFuZ2UsIGlmIHlvdSBzZXQgY29tcHV0ZWQgcHJvcGVydHkgYW5kIGl0IHdvbid0IGhhdmUgc2V0
dGVyIGFjY2Vzc29yIGZ1bmN0aW9uIGRlZmluZWQuCi0gIAotICAgIFlvdSBjYW4gYWxzbyBtYXJr
IGNvbXB1dGVkIHByb3BlcnR5IGFzIGAucmVhZE9ubHkoKWAgYW5kIGJsb2NrIGFsbCBhdHRlbXB0
cyB0byBzZXQgaXQuCi0gIAotICAgIGBgYGphdmFzY3JpcHQKLSAgICBsZXQgUGVyc29uID0gRW1i
ZXIuT2JqZWN0LmV4dGVuZCh7Ci0gICAgICAvLyB0aGVzZSB3aWxsIGJlIHN1cHBsaWVkIGJ5IGBj
cmVhdGVgCi0gICAgICBmaXJzdE5hbWU6IG51bGwsCi0gICAgICBsYXN0TmFtZTogbnVsbCwKLSAg
Ci0gICAgICBmdWxsTmFtZTogRW1iZXIuY29tcHV0ZWQoJ2ZpcnN0TmFtZScsICdsYXN0TmFtZScs
IHsKLSAgICAgICAgZ2V0KGtleSkgewotICAgICAgICAgIGxldCBmaXJzdE5hbWUgPSB0aGlzLmdl
dCgnZmlyc3ROYW1lJyk7Ci0gICAgICAgICAgbGV0IGxhc3ROYW1lICA9IHRoaXMuZ2V0KCdsYXN0
TmFtZScpOwotICAKLSAgICAgICAgICByZXR1cm4gZmlyc3ROYW1lICsgJyAnICsgbGFzdE5hbWU7
Ci0gICAgICAgIH0KLSAgICAgIH0pLnJlYWRPbmx5KCkKLSAgICB9KTsKLSAgCi0gICAgbGV0IHBl
cnNvbiA9IFBlcnNvbi5jcmVhdGUoKTsKLSAgICBwZXJzb24uc2V0KCdmdWxsTmFtZScsICdQZXRl
ciBXYWdlbmV0Jyk7IC8vIFVuY2F1Z2h0IEVycm9yOiBDYW5ub3Qgc2V0IHJlYWQtb25seSBwcm9w
ZXJ0eSAiZnVsbE5hbWUiIG9uIG9iamVjdDogPCguLi4pOmVtYmVyWFhYPgotICAgIGBgYAotICAK
LSAgICBBZGRpdGlvbmFsIHJlc291cmNlczoKLSAgICAtIFtOZXcgQ1Agc3ludGF4IFJGQ10oaHR0
cHM6Ly9naXRodWIuY29tL2VtYmVyanMvcmZjcy9ibG9iL21hc3Rlci90ZXh0LzAwMTEtaW1wcm92
ZWQtY3Atc3ludGF4Lm1kKQotICAgIC0gW05ldyBjb21wdXRlZCBzeW50YXggZXhwbGFpbmVkIGlu
ICJFbWJlciAxLjEyIHJlbGVhc2VkIiBdKGh0dHA6Ly9lbWJlcmpzLmNvbS9ibG9nLzIwMTUvMDUv
MTMvZW1iZXItMS0xMi1yZWxlYXNlZC5odG1sI3RvY19uZXctY29tcHV0ZWQtc3ludGF4KQotICAK
LSAgICBAY2xhc3MgQ29tcHV0ZWRQcm9wZXJ0eQotICAgIEBuYW1lc3BhY2UgRW1iZXIKLSAgICBA
cHVibGljCi0gICovCi0gIGZ1bmN0aW9uIENvbXB1dGVkUHJvcGVydHkoY29uZmlnLCBvcHRzKSB7
Ci0gICAgdGhpcy5pc0Rlc2NyaXB0b3IgPSB0cnVlOwotICAgIGlmICh0eXBlb2YgY29uZmlnID09
PSAnZnVuY3Rpb24nKSB7Ci0gICAgICB0aGlzLl9nZXR0ZXIgPSBjb25maWc7Ci0gICAgfSBlbHNl
IHsKLSAgICAgIF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0KCdFbWJlci5jb21wdXRlZCBleHBlY3Rz
IGEgZnVuY3Rpb24gb3IgYW4gb2JqZWN0IGFzIGxhc3QgYXJndW1lbnQuJywgdHlwZW9mIGNvbmZp
ZyA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoY29uZmlnKSk7Ci0gICAgICBfZW1iZXJN
ZXRhbERlYnVnLmFzc2VydCgnQ29uZmlnIG9iamVjdCBwYXNlZCB0byBhIEVtYmVyLmNvbXB1dGVk
IGNhbiBvbmx5IGNvbnRhaW4gYGdldGAgb3IgYHNldGAga2V5cy4nLCAoZnVuY3Rpb24gKCkgewot
ICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGNvbmZpZyk7Ci0gICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykgewotICAgICAgICAgIGlmIChrZXlzW2ldICE9
PSAnZ2V0JyAmJiBrZXlzW2ldICE9PSAnc2V0JykgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0p
KCkpOwotICAgICAgdGhpcy5fZ2V0dGVyID0gY29uZmlnLmdldDsKLSAgICAgIHRoaXMuX3NldHRl
ciA9IGNvbmZpZy5zZXQ7Ci0gICAgfQotICAgIF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0KCdDb21w
dXRlZCBwcm9wZXJ0aWVzIG11c3QgcmVjZWl2ZSBhIGdldHRlciBvciBhIHNldHRlciwgeW91IHBh
c3NlZCBub25lLicsICEhdGhpcy5fZ2V0dGVyIHx8ICEhdGhpcy5fc2V0dGVyKTsKLSAgICB0aGlz
Ll9kZXBlbmRlbnRLZXlzID0gdW5kZWZpbmVkOwotICAgIHRoaXMuX3N1c3BlbmRlZCA9IHVuZGVm
aW5lZDsKLSAgICB0aGlzLl9tZXRhID0gdW5kZWZpbmVkOwotICAgIHRoaXMuX3ZvbGF0aWxlID0g
ZmFsc2U7Ci0gICAgdGhpcy5fZGVwZW5kZW50S2V5cyA9IG9wdHMgJiYgb3B0cy5kZXBlbmRlbnRL
ZXlzOwotICAgIHRoaXMuX3JlYWRPbmx5ID0gZmFsc2U7Ci0gIH0KLQotICBDb21wdXRlZFByb3Bl
cnR5LnByb3RvdHlwZSA9IG5ldyBfZW1iZXJNZXRhbFByb3BlcnRpZXMuRGVzY3JpcHRvcigpOwot
Ci0gIHZhciBDb21wdXRlZFByb3BlcnR5UHJvdG90eXBlID0gQ29tcHV0ZWRQcm9wZXJ0eS5wcm90
b3R5cGU7Ci0KLSAgLyoqCi0gICAgQ2FsbCBvbiBhIGNvbXB1dGVkIHByb3BlcnR5IHRvIHNldCBp
dCBpbnRvIG5vbi1jYWNoZWQgbW9kZS4gV2hlbiBpbiB0aGlzCi0gICAgbW9kZSB0aGUgY29tcHV0
ZWQgcHJvcGVydHkgd2lsbCBub3QgYXV0b21hdGljYWxseSBjYWNoZSB0aGUgcmV0dXJuIHZhbHVl
LgotICAKLSAgICBJdCBhbHNvIGRvZXMgbm90IGF1dG9tYXRpY2FsbHkgZmlyZSBhbnkgY2hhbmdl
IGV2ZW50cy4gWW91IG11c3QgbWFudWFsbHkgbm90aWZ5Ci0gICAgYW55IGNoYW5nZXMgaWYgeW91
IHdhbnQgdG8gb2JzZXJ2ZSB0aGlzIHByb3BlcnR5LgotICAKLSAgICBEZXBlbmRlbmN5IGtleXMg
aGF2ZSBubyBlZmZlY3Qgb24gdm9sYXRpbGUgcHJvcGVydGllcyBhcyB0aGV5IGFyZSBmb3IgY2Fj
aGUKLSAgICBpbnZhbGlkYXRpb24gYW5kIG5vdGlmaWNhdGlvbiB3aGVuIGNhY2hlZCB2YWx1ZSBp
cyBpbnZhbGlkYXRlZC4KLSAgCi0gICAgYGBgamF2YXNjcmlwdAotICAgIGxldCBvdXRzaWRlU2Vy
dmljZSA9IEVtYmVyLk9iamVjdC5leHRlbmQoewotICAgICAgdmFsdWU6IEVtYmVyLmNvbXB1dGVk
KGZ1bmN0aW9uKCkgewotICAgICAgICByZXR1cm4gT3V0c2lkZVNlcnZpY2UuZ2V0VmFsdWUoKTsK
LSAgICAgIH0pLnZvbGF0aWxlKCkKLSAgICB9KS5jcmVhdGUoKTsKLSAgICBgYGAKLSAgCi0gICAg
QG1ldGhvZCB2b2xhdGlsZQotICAgIEByZXR1cm4ge0VtYmVyLkNvbXB1dGVkUHJvcGVydHl9IHRo
aXMKLSAgICBAY2hhaW5hYmxlCi0gICAgQHB1YmxpYwotICAqLwotICBDb21wdXRlZFByb3BlcnR5
UHJvdG90eXBlLnZvbGF0aWxlID0gZnVuY3Rpb24gKCkgewotICAgIHRoaXMuX3ZvbGF0aWxlID0g
dHJ1ZTsKLSAgICByZXR1cm4gdGhpczsKLSAgfTsKLQotICAvKioKLSAgICBDYWxsIG9uIGEgY29t
cHV0ZWQgcHJvcGVydHkgdG8gc2V0IGl0IGludG8gcmVhZC1vbmx5IG1vZGUuIFdoZW4gaW4gdGhp
cwotICAgIG1vZGUgdGhlIGNvbXB1dGVkIHByb3BlcnR5IHdpbGwgdGhyb3cgYW4gZXJyb3Igd2hl
biBzZXQuCi0gIAotICAgIGBgYGphdmFzY3JpcHQKLSAgICBsZXQgUGVyc29uID0gRW1iZXIuT2Jq
ZWN0LmV4dGVuZCh7Ci0gICAgICBndWlkOiBFbWJlci5jb21wdXRlZChmdW5jdGlvbigpIHsKLSAg
ICAgICAgcmV0dXJuICdndWlkLWd1aWQtZ3VpZCc7Ci0gICAgICB9KS5yZWFkT25seSgpCi0gICAg
fSk7Ci0gIAotICAgIGxldCBwZXJzb24gPSBQZXJzb24uY3JlYXRlKCk7Ci0gIAotICAgIHBlcnNv
bi5zZXQoJ2d1aWQnLCAnbmV3LWd1aWQnKTsgLy8gd2lsbCB0aHJvdyBhbiBleGNlcHRpb24KLSAg
ICBgYGAKLSAgCi0gICAgQG1ldGhvZCByZWFkT25seQotICAgIEByZXR1cm4ge0VtYmVyLkNvbXB1
dGVkUHJvcGVydHl9IHRoaXMKLSAgICBAY2hhaW5hYmxlCi0gICAgQHB1YmxpYwotICAqLwotICBD
b21wdXRlZFByb3BlcnR5UHJvdG90eXBlLnJlYWRPbmx5ID0gZnVuY3Rpb24gKCkgewotICAgIHRo
aXMuX3JlYWRPbmx5ID0gdHJ1ZTsKLSAgICBfZW1iZXJNZXRhbERlYnVnLmFzc2VydCgnQ29tcHV0
ZWQgcHJvcGVydGllcyB0aGF0IGRlZmluZSBhIHNldHRlciB1c2luZyB0aGUgbmV3IHN5bnRheCBj
YW5ub3QgYmUgcmVhZC1vbmx5JywgISh0aGlzLl9yZWFkT25seSAmJiB0aGlzLl9zZXR0ZXIgJiYg
dGhpcy5fc2V0dGVyICE9PSB0aGlzLl9nZXR0ZXIpKTsKLSAgICByZXR1cm4gdGhpczsKLSAgfTsK
LQotICAvKioKLSAgICBTZXRzIHRoZSBkZXBlbmRlbnQga2V5cyBvbiB0aGlzIGNvbXB1dGVkIHBy
b3BlcnR5LiBQYXNzIGFueSBudW1iZXIgb2YKLSAgICBhcmd1bWVudHMgY29udGFpbmluZyBrZXkg
cGF0aHMgdGhhdCB0aGlzIGNvbXB1dGVkIHByb3BlcnR5IGRlcGVuZHMgb24uCi0gIAotICAgIGBg
YGphdmFzY3JpcHQKLSAgICBsZXQgUHJlc2lkZW50ID0gRW1iZXIuT2JqZWN0LmV4dGVuZCh7Ci0g
ICAgICBmdWxsTmFtZTogRW1iZXIuY29tcHV0ZWQoZnVuY3Rpb24oKSB7Ci0gICAgICAgIHJldHVy
biB0aGlzLmdldCgnZmlyc3ROYW1lJykgKyAnICcgKyB0aGlzLmdldCgnbGFzdE5hbWUnKTsKLSAg
Ci0gICAgICAgIC8vIFRlbGwgRW1iZXIgdGhhdCB0aGlzIGNvbXB1dGVkIHByb3BlcnR5IGRlcGVu
ZHMgb24gZmlyc3ROYW1lCi0gICAgICAgIC8vIGFuZCBsYXN0TmFtZQotICAgICAgfSkucHJvcGVy
dHkoJ2ZpcnN0TmFtZScsICdsYXN0TmFtZScpCi0gICAgfSk7Ci0gIAotICAgIGxldCBwcmVzaWRl
bnQgPSBQcmVzaWRlbnQuY3JlYXRlKHsKLSAgICAgIGZpcnN0TmFtZTogJ0JhcmFjaycsCi0gICAg
ICBsYXN0TmFtZTogJ09iYW1hJwotICAgIH0pOwotICAKLSAgICBwcmVzaWRlbnQuZ2V0KCdmdWxs
TmFtZScpOyAvLyAnQmFyYWNrIE9iYW1hJwotICAgIGBgYAotICAKLSAgICBAbWV0aG9kIHByb3Bl
cnR5Ci0gICAgQHBhcmFtIHtTdHJpbmd9IHBhdGgqIHplcm8gb3IgbW9yZSBwcm9wZXJ0eSBwYXRo
cwotICAgIEByZXR1cm4ge0VtYmVyLkNvbXB1dGVkUHJvcGVydHl9IHRoaXMKLSAgICBAY2hhaW5h
YmxlCi0gICAgQHB1YmxpYwotICAqLwotICBDb21wdXRlZFByb3BlcnR5UHJvdG90eXBlLnByb3Bl
cnR5ID0gZnVuY3Rpb24gKCkgewotICAgIHZhciBhcmdzOwotCi0gICAgdmFyIGFkZEFyZyA9IGZ1
bmN0aW9uIChwcm9wZXJ0eSkgewotICAgICAgX2VtYmVyTWV0YWxEZWJ1Zy53YXJuKCdEZXBlbmRl
bnQga2V5cyBjb250YWluaW5nIEBlYWNoIG9ubHkgd29yayBvbmUgbGV2ZWwgZGVlcC4gJyArICdZ
b3UgY2Fubm90IHVzZSBuZXN0ZWQgZm9ybXMgbGlrZSB0b2Rvcy5AZWFjaC5vd25lci5uYW1lIG9y
IHRvZG9zLkBlYWNoLm93bmVyLkBlYWNoLm5hbWUuICcgKyAnUGxlYXNlIGNyZWF0ZSBhbiBpbnRl
cm1lZGlhcnkgY29tcHV0ZWQgcHJvcGVydHkuJywgREVFUF9FQUNIX1JFR0VYLnRlc3QocHJvcGVy
dHkpID09PSBmYWxzZSwgeyBpZDogJ2VtYmVyLW1ldGFsLmNvbXB1dGVkLWRlZXAtZWFjaCcgfSk7
Ci0gICAgICBhcmdzLnB1c2gocHJvcGVydHkpOwotICAgIH07Ci0KLSAgICBhcmdzID0gW107Ci0g
ICAgZm9yICh2YXIgaSA9IDAsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7Ci0g
ICAgICBfZW1iZXJNZXRhbEV4cGFuZF9wcm9wZXJ0aWVzLmRlZmF1bHQoYXJndW1lbnRzW2ldLCBh
ZGRBcmcpOwotICAgIH0KLQotICAgIHRoaXMuX2RlcGVuZGVudEtleXMgPSBhcmdzOwotICAgIHJl
dHVybiB0aGlzOwotICB9OwotCi0gIC8qKgotICAgIEluIHNvbWUgY2FzZXMsIHlvdSBtYXkgd2Fu
dCB0byBhbm5vdGF0ZSBjb21wdXRlZCBwcm9wZXJ0aWVzIHdpdGggYWRkaXRpb25hbAotICAgIG1l
dGFkYXRhIGFib3V0IGhvdyB0aGV5IGZ1bmN0aW9uIG9yIHdoYXQgdmFsdWVzIHRoZXkgb3BlcmF0
ZSBvbi4gRm9yIGV4YW1wbGUsCi0gICAgY29tcHV0ZWQgcHJvcGVydHkgZnVuY3Rpb25zIG1heSBj
bG9zZSBvdmVyIHZhcmlhYmxlcyB0aGF0IGFyZSB0aGVuIG5vIGxvbmdlcgotICAgIGF2YWlsYWJs
ZSBmb3IgaW50cm9zcGVjdGlvbi4KLSAgCi0gICAgWW91IGNhbiBwYXNzIGEgaGFzaCBvZiB0aGVz
ZSB2YWx1ZXMgdG8gYSBjb21wdXRlZCBwcm9wZXJ0eSBsaWtlIHRoaXM6Ci0gIAotICAgIGBgYAot
ICAgIHBlcnNvbjogRW1iZXIuY29tcHV0ZWQoZnVuY3Rpb24oKSB7Ci0gICAgICBsZXQgcGVyc29u
SWQgPSB0aGlzLmdldCgncGVyc29uSWQnKTsKLSAgICAgIHJldHVybiBBcHAuUGVyc29uLmNyZWF0
ZSh7IGlkOiBwZXJzb25JZCB9KTsKLSAgICB9KS5tZXRhKHsgdHlwZTogQXBwLlBlcnNvbiB9KQot
ICAgIGBgYAotICAKLSAgICBUaGUgaGFzaCB0aGF0IHlvdSBwYXNzIHRvIHRoZSBgbWV0YSgpYCBm
dW5jdGlvbiB3aWxsIGJlIHNhdmVkIG9uIHRoZQotICAgIGNvbXB1dGVkIHByb3BlcnR5IGRlc2Ny
aXB0b3IgdW5kZXIgdGhlIGBfbWV0YWAga2V5LiBFbWJlciBydW50aW1lCi0gICAgZXhwb3NlcyBh
IHB1YmxpYyBBUEkgZm9yIHJldHJpZXZpbmcgdGhlc2UgdmFsdWVzIGZyb20gY2xhc3NlcywKLSAg
ICB2aWEgdGhlIGBtZXRhRm9yUHJvcGVydHkoKWAgZnVuY3Rpb24uCi0gIAotICAgIEBtZXRob2Qg
bWV0YQotICAgIEBwYXJhbSB7T2JqZWN0fSBtZXRhCi0gICAgQGNoYWluYWJsZQotICAgIEBwdWJs
aWMKLSAgKi8KLSAgQ29tcHV0ZWRQcm9wZXJ0eVByb3RvdHlwZS5tZXRhID0gZnVuY3Rpb24gKG1l
dGEpIHsKLSAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkgewotICAgICAgcmV0dXJuIHRo
aXMuX21ldGEgfHwge307Ci0gICAgfSBlbHNlIHsKLSAgICAgIHRoaXMuX21ldGEgPSBtZXRhOwot
ICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgfQotICB9OwotCi0gIC8vIGludmFsaWRhdGUgY2FjaGUg
d2hlbiBDUCBrZXkgY2hhbmdlcwotICBDb21wdXRlZFByb3BlcnR5UHJvdG90eXBlLmRpZENoYW5n
ZSA9IGZ1bmN0aW9uIChvYmosIGtleU5hbWUpIHsKLSAgICAvLyBfc3VzcGVuZGVkIGlzIHNldCB2
aWEgYSBDUC5zZXQgdG8gZW5zdXJlIHdlIGRvbid0IGNsZWFyCi0gICAgLy8gdGhlIGNhY2hlZCB2
YWx1ZSBzZXQgYnkgdGhlIHNldHRlcgotICAgIGlmICh0aGlzLl92b2xhdGlsZSB8fCB0aGlzLl9z
dXNwZW5kZWQgPT09IG9iaikgewotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIGRvbid0
IGNyZWF0ZSBvYmplY3RzIGp1c3QgdG8gaW52YWxpZGF0ZQotICAgIHZhciBtZXRhID0gX2VtYmVy
TWV0YWxNZXRhLnBlZWtNZXRhKG9iaik7Ci0gICAgaWYgKCFtZXRhIHx8IG1ldGEuc291cmNlICE9
PSBvYmopIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICB2YXIgY2FjaGUgPSBtZXRhLnJl
YWRhYmxlQ2FjaGUoKTsKLSAgICBpZiAoY2FjaGUgJiYgY2FjaGVba2V5TmFtZV0gIT09IHVuZGVm
aW5lZCkgewotICAgICAgY2FjaGVba2V5TmFtZV0gPSB1bmRlZmluZWQ7Ci0gICAgICBfZW1iZXJN
ZXRhbERlcGVuZGVudF9rZXlzLnJlbW92ZURlcGVuZGVudEtleXModGhpcywgb2JqLCBrZXlOYW1l
LCBtZXRhKTsKLSAgICB9Ci0gIH07Ci0KLSAgQ29tcHV0ZWRQcm9wZXJ0eVByb3RvdHlwZS5nZXQg
PSBmdW5jdGlvbiAob2JqLCBrZXlOYW1lKSB7Ci0gICAgaWYgKHRoaXMuX3ZvbGF0aWxlKSB7Ci0g
ICAgICByZXR1cm4gdGhpcy5fZ2V0dGVyLmNhbGwob2JqLCBrZXlOYW1lKTsKLSAgICB9Ci0KLSAg
ICB2YXIgbWV0YSA9IF9lbWJlck1ldGFsTWV0YS5tZXRhKG9iaik7Ci0gICAgdmFyIGNhY2hlID0g
bWV0YS53cml0YWJsZUNhY2hlKCk7Ci0KLSAgICB2YXIgcmVzdWx0ID0gY2FjaGVba2V5TmFtZV07
Ci0gICAgaWYgKHJlc3VsdCA9PT0gVU5ERUZJTkVEKSB7Ci0gICAgICByZXR1cm4gdW5kZWZpbmVk
OwotICAgIH0gZWxzZSBpZiAocmVzdWx0ICE9PSB1bmRlZmluZWQpIHsKLSAgICAgIHJldHVybiBy
ZXN1bHQ7Ci0gICAgfQotCi0gICAgdmFyIHJldCA9IHRoaXMuX2dldHRlci5jYWxsKG9iaiwga2V5
TmFtZSk7Ci0gICAgaWYgKHJldCA9PT0gdW5kZWZpbmVkKSB7Ci0gICAgICBjYWNoZVtrZXlOYW1l
XSA9IFVOREVGSU5FRDsKLSAgICB9IGVsc2UgewotICAgICAgY2FjaGVba2V5TmFtZV0gPSByZXQ7
Ci0gICAgfQotCi0gICAgdmFyIGNoYWluV2F0Y2hlcnMgPSBtZXRhLnJlYWRhYmxlQ2hhaW5XYXRj
aGVycygpOwotICAgIGlmIChjaGFpbldhdGNoZXJzKSB7Ci0gICAgICBjaGFpbldhdGNoZXJzLnJl
dmFsaWRhdGUoa2V5TmFtZSk7Ci0gICAgfQotICAgIF9lbWJlck1ldGFsRGVwZW5kZW50X2tleXMu
YWRkRGVwZW5kZW50S2V5cyh0aGlzLCBvYmosIGtleU5hbWUsIG1ldGEpOwotCi0gICAgcmV0dXJu
IHJldDsKLSAgfTsKLQotICBDb21wdXRlZFByb3BlcnR5UHJvdG90eXBlLnNldCA9IGZ1bmN0aW9u
IGNvbXB1dGVkUHJvcGVydHlTZXRFbnRyeShvYmosIGtleU5hbWUsIHZhbHVlKSB7Ci0gICAgaWYg
KHRoaXMuX3JlYWRPbmx5KSB7Ci0gICAgICB0aGlzLl90aHJvd1JlYWRPbmx5RXJyb3Iob2JqLCBr
ZXlOYW1lKTsKLSAgICB9Ci0KLSAgICBpZiAoIXRoaXMuX3NldHRlcikgewotICAgICAgcmV0dXJu
IHRoaXMuY2xvYmJlclNldChvYmosIGtleU5hbWUsIHZhbHVlKTsKLSAgICB9Ci0KLSAgICBpZiAo
dGhpcy5fdm9sYXRpbGUpIHsKLSAgICAgIHJldHVybiB0aGlzLnZvbGF0aWxlU2V0KG9iaiwga2V5
TmFtZSwgdmFsdWUpOwotICAgIH0KLQotICAgIHJldHVybiB0aGlzLnNldFdpdGhTdXNwZW5kKG9i
aiwga2V5TmFtZSwgdmFsdWUpOwotICB9OwotCi0gIENvbXB1dGVkUHJvcGVydHlQcm90b3R5cGUu
X3Rocm93UmVhZE9ubHlFcnJvciA9IGZ1bmN0aW9uIGNvbXB1dGVkUHJvcGVydHlUaHJvd1JlYWRP
bmx5RXJyb3Iob2JqLCBrZXlOYW1lKSB7Ci0gICAgdGhyb3cgbmV3IF9lbWJlck1ldGFsRXJyb3Iu
ZGVmYXVsdCgnQ2Fubm90IHNldCByZWFkLW9ubHkgcHJvcGVydHkgIicgKyBrZXlOYW1lICsgJyIg
b24gb2JqZWN0OiAnICsgX2VtYmVyTWV0YWxVdGlscy5pbnNwZWN0KG9iaikpOwotICB9OwotCi0g
IENvbXB1dGVkUHJvcGVydHlQcm90b3R5cGUuY2xvYmJlclNldCA9IGZ1bmN0aW9uIGNvbXB1dGVk
UHJvcGVydHlDbG9iYmVyU2V0KG9iaiwga2V5TmFtZSwgdmFsdWUpIHsKLSAgICB2YXIgY2FjaGVk
VmFsdWUgPSBjYWNoZUZvcihvYmosIGtleU5hbWUpOwotICAgIF9lbWJlck1ldGFsUHJvcGVydGll
cy5kZWZpbmVQcm9wZXJ0eShvYmosIGtleU5hbWUsIG51bGwsIGNhY2hlZFZhbHVlKTsKLSAgICBf
ZW1iZXJNZXRhbFByb3BlcnR5X3NldC5zZXQob2JqLCBrZXlOYW1lLCB2YWx1ZSk7Ci0gICAgcmV0
dXJuIHZhbHVlOwotICB9OwotCi0gIENvbXB1dGVkUHJvcGVydHlQcm90b3R5cGUudm9sYXRpbGVT
ZXQgPSBmdW5jdGlvbiBjb21wdXRlZFByb3BlcnR5Vm9sYXRpbGVTZXQob2JqLCBrZXlOYW1lLCB2
YWx1ZSkgewotICAgIHJldHVybiB0aGlzLl9zZXR0ZXIuY2FsbChvYmosIGtleU5hbWUsIHZhbHVl
KTsKLSAgfTsKLQotICBDb21wdXRlZFByb3BlcnR5UHJvdG90eXBlLnNldFdpdGhTdXNwZW5kID0g
ZnVuY3Rpb24gY29tcHV0ZWRQcm9wZXJ0eVNldFdpdGhTdXNwZW5kKG9iaiwga2V5TmFtZSwgdmFs
dWUpIHsKLSAgICB2YXIgb2xkU3VzcGVuZGVkID0gdGhpcy5fc3VzcGVuZGVkOwotICAgIHRoaXMu
X3N1c3BlbmRlZCA9IG9iajsKLSAgICB0cnkgewotICAgICAgcmV0dXJuIHRoaXMuX3NldChvYmos
IGtleU5hbWUsIHZhbHVlKTsKLSAgICB9IGZpbmFsbHkgewotICAgICAgdGhpcy5fc3VzcGVuZGVk
ID0gb2xkU3VzcGVuZGVkOwotICAgIH0KLSAgfTsKLQotICBDb21wdXRlZFByb3BlcnR5UHJvdG90
eXBlLl9zZXQgPSBmdW5jdGlvbiBjb21wdXRlZFByb3BlcnR5U2V0KG9iaiwga2V5TmFtZSwgdmFs
dWUpIHsKLSAgICAvLyBjYWNoZSByZXF1aXJlcyBvd24gbWV0YQotICAgIHZhciBtZXRhID0gX2Vt
YmVyTWV0YWxNZXRhLm1ldGEob2JqKTsKLSAgICAvLyBlaXRoZXIgdGhlcmUgaXMgYSB3cml0YWJs
ZSBjYWNoZSBvciB3ZSBuZWVkIG9uZSB0byB1cGRhdGUKLSAgICB2YXIgY2FjaGUgPSBtZXRhLndy
aXRhYmxlQ2FjaGUoKTsKLSAgICB2YXIgaGFkQ2FjaGVkVmFsdWUgPSBmYWxzZTsKLSAgICB2YXIg
Y2FjaGVkVmFsdWUgPSB1bmRlZmluZWQ7Ci0gICAgaWYgKGNhY2hlW2tleU5hbWVdICE9PSB1bmRl
ZmluZWQpIHsKLSAgICAgIGlmIChjYWNoZVtrZXlOYW1lXSAhPT0gVU5ERUZJTkVEKSB7Ci0gICAg
ICAgIGNhY2hlZFZhbHVlID0gY2FjaGVba2V5TmFtZV07Ci0gICAgICB9Ci0gICAgICBoYWRDYWNo
ZWRWYWx1ZSA9IHRydWU7Ci0gICAgfQotCi0gICAgdmFyIHJldCA9IHRoaXMuX3NldHRlci5jYWxs
KG9iaiwga2V5TmFtZSwgdmFsdWUsIGNhY2hlZFZhbHVlKTsKLQotICAgIC8vIGFsbG93cyBzZXR0
ZXIgdG8gcmV0dXJuIHRoZSBzYW1lIHZhbHVlIHRoYXQgaXMgY2FjaGVkIGFscmVhZHkKLSAgICBp
ZiAoaGFkQ2FjaGVkVmFsdWUgJiYgY2FjaGVkVmFsdWUgPT09IHJldCkgewotICAgICAgcmV0dXJu
IHJldDsKLSAgICB9Ci0KLSAgICB2YXIgd2F0Y2hlZCA9IG1ldGEucGVla1dhdGNoaW5nKGtleU5h
bWUpOwotICAgIGlmICh3YXRjaGVkKSB7Ci0gICAgICBfZW1iZXJNZXRhbFByb3BlcnR5X2V2ZW50
cy5wcm9wZXJ0eVdpbGxDaGFuZ2Uob2JqLCBrZXlOYW1lKTsKLSAgICB9Ci0KLSAgICBpZiAoaGFk
Q2FjaGVkVmFsdWUpIHsKLSAgICAgIGNhY2hlW2tleU5hbWVdID0gdW5kZWZpbmVkOwotICAgIH0K
LQotICAgIGlmICghaGFkQ2FjaGVkVmFsdWUpIHsKLSAgICAgIF9lbWJlck1ldGFsRGVwZW5kZW50
X2tleXMuYWRkRGVwZW5kZW50S2V5cyh0aGlzLCBvYmosIGtleU5hbWUsIG1ldGEpOwotICAgIH0K
LQotICAgIGlmIChyZXQgPT09IHVuZGVmaW5lZCkgewotICAgICAgY2FjaGVba2V5TmFtZV0gPSBV
TkRFRklORUQ7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGNhY2hlW2tleU5hbWVdID0gcmV0OwotICAg
IH0KLQotICAgIGlmICh3YXRjaGVkKSB7Ci0gICAgICBfZW1iZXJNZXRhbFByb3BlcnR5X2V2ZW50
cy5wcm9wZXJ0eURpZENoYW5nZShvYmosIGtleU5hbWUpOwotICAgIH0KLQotICAgIHJldHVybiBy
ZXQ7Ci0gIH07Ci0KLSAgLyogY2FsbGVkIGJlZm9yZSBwcm9wZXJ0eSBpcyBvdmVycmlkZGVuICov
Ci0gIENvbXB1dGVkUHJvcGVydHlQcm90b3R5cGUudGVhcmRvd24gPSBmdW5jdGlvbiAob2JqLCBr
ZXlOYW1lKSB7Ci0gICAgaWYgKHRoaXMuX3ZvbGF0aWxlKSB7Ci0gICAgICByZXR1cm47Ci0gICAg
fQotICAgIHZhciBtZXRhID0gX2VtYmVyTWV0YWxNZXRhLm1ldGEob2JqKTsKLSAgICB2YXIgY2Fj
aGUgPSBtZXRhLnJlYWRhYmxlQ2FjaGUoKTsKLSAgICBpZiAoY2FjaGUgJiYgY2FjaGVba2V5TmFt
ZV0gIT09IHVuZGVmaW5lZCkgewotICAgICAgX2VtYmVyTWV0YWxEZXBlbmRlbnRfa2V5cy5yZW1v
dmVEZXBlbmRlbnRLZXlzKHRoaXMsIG9iaiwga2V5TmFtZSwgbWV0YSk7Ci0gICAgICBjYWNoZVtr
ZXlOYW1lXSA9IHVuZGVmaW5lZDsKLSAgICB9Ci0gIH07Ci0KLSAgLyoqCi0gICAgVGhpcyBoZWxw
ZXIgcmV0dXJucyBhIG5ldyBwcm9wZXJ0eSBkZXNjcmlwdG9yIHRoYXQgd3JhcHMgdGhlIHBhc3Nl
ZAotICAgIGNvbXB1dGVkIHByb3BlcnR5IGZ1bmN0aW9uLiBZb3UgY2FuIHVzZSB0aGlzIGhlbHBl
ciB0byBkZWZpbmUgcHJvcGVydGllcwotICAgIHdpdGggbWl4aW5zIG9yIHZpYSBgRW1iZXIuZGVm
aW5lUHJvcGVydHkoKWAuCi0gIAotICAgIElmIHlvdSBwYXNzIGEgZnVuY3Rpb24gYXMgYW4gYXJn
dW1lbnQsIGl0IHdpbGwgYmUgdXNlZCBhcyBhIGdldHRlci4gQSBjb21wdXRlZAotICAgIHByb3Bl
cnR5IGRlZmluZWQgaW4gdGhpcyB3YXkgbWlnaHQgbG9vayBsaWtlIHRoaXM6Ci0gIAotICAgIGBg
YGpzCi0gICAgbGV0IFBlcnNvbiA9IEVtYmVyLk9iamVjdC5leHRlbmQoewotICAgICAgaW5pdCgp
IHsKLSAgICAgICAgdGhpcy5fc3VwZXIoLi4uYXJndW1lbnRzKTsKLSAgCi0gICAgICAgIHRoaXMu
Zmlyc3ROYW1lID0gJ0JldHR5JzsKLSAgICAgICAgdGhpcy5sYXN0TmFtZSA9ICdKb25lcyc7Ci0g
ICAgICB9LAotICAKLSAgICAgIGZ1bGxOYW1lOiBFbWJlci5jb21wdXRlZCgnZmlyc3ROYW1lJywg
J2xhc3ROYW1lJywgZnVuY3Rpb24oKSB7Ci0gICAgICAgIHJldHVybiBgJHt0aGlzLmdldCgnZmly
c3ROYW1lJyl9ICR7dGhpcy5nZXQoJ2xhc3ROYW1lJyl9YDsKLSAgICAgIH0pCi0gICAgfSk7Ci0g
IAotICAgIGxldCBjbGllbnQgPSBQZXJzb24uY3JlYXRlKCk7Ci0gIAotICAgIGNsaWVudC5nZXQo
J2Z1bGxOYW1lJyk7IC8vICdCZXR0eSBKb25lcycKLSAgCi0gICAgY2xpZW50LnNldCgnbGFzdE5h
bWUnLCAnRnVsbGVyJyk7Ci0gICAgY2xpZW50LmdldCgnZnVsbE5hbWUnKTsgLy8gJ0JldHR5IEZ1
bGxlcicKLSAgICBgYGAKLSAgCi0gICAgWW91IGNhbiBwYXNzIGEgaGFzaCB3aXRoIHR3byBmdW5j
dGlvbnMsIGBnZXRgIGFuZCBgc2V0YCwgYXMgYW4KLSAgICBhcmd1bWVudCB0byBwcm92aWRlIGJv
dGggYSBnZXR0ZXIgYW5kIHNldHRlcjoKLSAgCi0gICAgYGBganMKLSAgICBsZXQgUGVyc29uID0g
RW1iZXIuT2JqZWN0LmV4dGVuZCh7Ci0gICAgICBpbml0KCkgewotICAgICAgICB0aGlzLl9zdXBl
ciguLi5hcmd1bWVudHMpOwotICAKLSAgICAgICAgdGhpcy5maXJzdE5hbWUgPSAnQmV0dHknOwot
ICAgICAgICB0aGlzLmxhc3ROYW1lID0gJ0pvbmVzJzsKLSAgICAgIH0sCi0gIAotICAgICAgZnVs
bE5hbWU6IEVtYmVyLmNvbXB1dGVkKCdmaXJzdE5hbWUnLCAnbGFzdE5hbWUnLCB7Ci0gICAgICAg
IGdldChrZXkpIHsKLSAgICAgICAgICByZXR1cm4gYCR7dGhpcy5nZXQoJ2ZpcnN0TmFtZScpfSAk
e3RoaXMuZ2V0KCdsYXN0TmFtZScpfWA7Ci0gICAgICAgIH0sCi0gICAgICAgIHNldChrZXksIHZh
bHVlKSB7Ci0gICAgICAgICAgbGV0IFtmaXJzdE5hbWUsIGxhc3ROYW1lXSA9IHZhbHVlLnNwbGl0
KC9ccysvKTsKLSAgICAgICAgICB0aGlzLnNldFByb3BlcnRpZXMoeyBmaXJzdE5hbWUsIGxhc3RO
YW1lIH0pOwotICAgICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0g
ICAgfSkKLSAgCi0gICAgbGV0IGNsaWVudCA9IFBlcnNvbi5jcmVhdGUoKTsKLSAgICBjbGllbnQu
Z2V0KCdmaXJzdE5hbWUnKTsgLy8gJ0JldHR5JwotICAKLSAgICBjbGllbnQuc2V0KCdmdWxsTmFt
ZScsICdDYXJyb2xsIEZ1bGxlcicpOwotICAgIGNsaWVudC5nZXQoJ2ZpcnN0TmFtZScpOyAvLyAn
Q2Fycm9sbCcKLSAgICBgYGAKLSAgCi0gICAgVGhlIGBzZXRgIGZ1bmN0aW9uIHNob3VsZCBhY2Nl
cHQgdHdvIHBhcmFtZXRlcnMsIGBrZXlgIGFuZCBgdmFsdWVgLiBUaGUgdmFsdWUKLSAgICByZXR1
cm5lZCBmcm9tIGBzZXRgIHdpbGwgYmUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgcHJvcGVydHkuCi0g
IAotICAgIF9Ob3RlOiBUaGlzIGlzIHRoZSBwcmVmZXJyZWQgd2F5IHRvIGRlZmluZSBjb21wdXRl
ZCBwcm9wZXJ0aWVzIHdoZW4gd3JpdGluZyB0aGlyZC1wYXJ0eQotICAgIGxpYnJhcmllcyB0aGF0
IGRlcGVuZCBvbiBvciB1c2UgRW1iZXIsIHNpbmNlIHRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0
IHRoZSB1c2VyCi0gICAgd2lsbCBoYXZlIFtwcm90b3R5cGUgRXh0ZW5zaW9uc10oaHR0cDovL2Vt
YmVyanMuY29tL2d1aWRlcy9jb25maWd1cmluZy1lbWJlci9kaXNhYmxpbmctcHJvdG90eXBlLWV4
dGVuc2lvbnMvKSBlbmFibGVkLl8KLSAgCi0gICAgVGhlIGFsdGVybmF0aXZlIHN5bnRheCwgd2l0
aCBwcm90b3R5cGUgZXh0ZW5zaW9ucywgbWlnaHQgbG9vayBsaWtlOgotICAKLSAgICBgYGBqcwot
ICAgIGZ1bGxOYW1lOiBmdW5jdGlvbigpIHsKLSAgICAgIHJldHVybiB0aGlzLmdldCgnZmlyc3RO
YW1lJykgKyAnICcgKyB0aGlzLmdldCgnbGFzdE5hbWUnKTsKLSAgICB9LnByb3BlcnR5KCdmaXJz
dE5hbWUnLCAnbGFzdE5hbWUnKQotICAgIGBgYAotICAKLSAgICBAY2xhc3MgY29tcHV0ZWQKLSAg
ICBAbmFtZXNwYWNlIEVtYmVyCi0gICAgQGNvbnN0cnVjdG9yCi0gICAgQHN0YXRpYwotICAgIEBw
YXJhbSB7U3RyaW5nfSBbZGVwZW5kZW50S2V5cypdIE9wdGlvbmFsIGRlcGVuZGVudCBrZXlzIHRo
YXQgdHJpZ2dlciB0aGlzIGNvbXB1dGVkIHByb3BlcnR5LgotICAgIEBwYXJhbSB7RnVuY3Rpb259
IGZ1bmMgVGhlIGNvbXB1dGVkIHByb3BlcnR5IGZ1bmN0aW9uLgotICAgIEByZXR1cm4ge0VtYmVy
LkNvbXB1dGVkUHJvcGVydHl9IHByb3BlcnR5IGRlc2NyaXB0b3IgaW5zdGFuY2UKLSAgICBAcHVi
bGljCi0gICovCi0KLSAgZnVuY3Rpb24gY29tcHV0ZWQoZnVuYykgewotICAgIHZhciBhcmdzOwot
Ci0gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7Ci0gICAgICBhcmdzID0gW10uc2xpY2Uu
Y2FsbChhcmd1bWVudHMpOwotICAgICAgZnVuYyA9IGFyZ3MucG9wKCk7Ci0gICAgfQotCi0gICAg
dmFyIGNwID0gbmV3IENvbXB1dGVkUHJvcGVydHkoZnVuYyk7Ci0KLSAgICBpZiAoYXJncykgewot
ICAgICAgY3AucHJvcGVydHkuYXBwbHkoY3AsIGFyZ3MpOwotICAgIH0KLQotICAgIHJldHVybiBj
cDsKLSAgfQotCi0gIC8qKgotICAgIFJldHVybnMgdGhlIGNhY2hlZCB2YWx1ZSBmb3IgYSBwcm9w
ZXJ0eSwgaWYgb25lIGV4aXN0cy4KLSAgICBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yIHBlZWtpbmcg
YXQgdGhlIHZhbHVlIG9mIGEgY29tcHV0ZWQKLSAgICBwcm9wZXJ0eSB0aGF0IGlzIGdlbmVyYXRl
ZCBsYXppbHksIHdpdGhvdXQgYWNjaWRlbnRhbGx5IGNhdXNpbmcKLSAgICBpdCB0byBiZSBjcmVh
dGVkLgotICAKLSAgICBAbWV0aG9kIGNhY2hlRm9yCi0gICAgQGZvciBFbWJlcgotICAgIEBwYXJh
bSB7T2JqZWN0fSBvYmogdGhlIG9iamVjdCB3aG9zZSBwcm9wZXJ0eSB5b3Ugd2FudCB0byBjaGVj
awotICAgIEBwYXJhbSB7U3RyaW5nfSBrZXkgdGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHdob3Nl
IGNhY2hlZCB2YWx1ZSB5b3Ugd2FudAotICAgICAgdG8gcmV0dXJuCi0gICAgQHJldHVybiB7T2Jq
ZWN0fSB0aGUgY2FjaGVkIHZhbHVlCi0gICAgQHB1YmxpYwotICAqLwotICBmdW5jdGlvbiBjYWNo
ZUZvcihvYmosIGtleSkgewotICAgIHZhciBtZXRhID0gX2VtYmVyTWV0YWxNZXRhLnBlZWtNZXRh
KG9iaik7Ci0gICAgdmFyIGNhY2hlID0gbWV0YSAmJiBtZXRhLnNvdXJjZSA9PT0gb2JqICYmIG1l
dGEucmVhZGFibGVDYWNoZSgpOwotICAgIHZhciByZXQgPSBjYWNoZSAmJiBjYWNoZVtrZXldOwot
Ci0gICAgaWYgKHJldCA9PT0gVU5ERUZJTkVEKSB7Ci0gICAgICByZXR1cm4gdW5kZWZpbmVkOwot
ICAgIH0KLSAgICByZXR1cm4gcmV0OwotICB9Ci0KLSAgY2FjaGVGb3Iuc2V0ID0gZnVuY3Rpb24g
KGNhY2hlLCBrZXksIHZhbHVlKSB7Ci0gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHsKLSAg
ICAgIGNhY2hlW2tleV0gPSBVTkRFRklORUQ7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGNhY2hlW2tl
eV0gPSB2YWx1ZTsKLSAgICB9Ci0gIH07Ci0KLSAgY2FjaGVGb3IuZ2V0ID0gZnVuY3Rpb24gKGNh
Y2hlLCBrZXkpIHsKLSAgICB2YXIgcmV0ID0gY2FjaGVba2V5XTsKLSAgICBpZiAocmV0ID09PSBV
TkRFRklORUQpIHsKLSAgICAgIHJldHVybiB1bmRlZmluZWQ7Ci0gICAgfQotICAgIHJldHVybiBy
ZXQ7Ci0gIH07Ci0KLSAgY2FjaGVGb3IucmVtb3ZlID0gZnVuY3Rpb24gKGNhY2hlLCBrZXkpIHsK
LSAgICBjYWNoZVtrZXldID0gdW5kZWZpbmVkOwotICB9OwotCi0gIGV4cG9ydHMuQ29tcHV0ZWRQ
cm9wZXJ0eSA9IENvbXB1dGVkUHJvcGVydHk7Ci0gIGV4cG9ydHMuY29tcHV0ZWQgPSBjb21wdXRl
ZDsKLSAgZXhwb3J0cy5jYWNoZUZvciA9IGNhY2hlRm9yOwotfSk7Ci1lbmlmZWQoJ2VtYmVyLW1l
dGFsL2NvbXB1dGVkX21hY3JvcycsIFsnZXhwb3J0cycsICdlbWJlci1tZXRhbC9kZWJ1ZycsICdl
bWJlci1tZXRhbC9wcm9wZXJ0eV9nZXQnLCAnZW1iZXItbWV0YWwvcHJvcGVydHlfc2V0JywgJ2Vt
YmVyLW1ldGFsL2NvbXB1dGVkJywgJ2VtYmVyLW1ldGFsL2lzX2VtcHR5JywgJ2VtYmVyLW1ldGFs
L2lzX25vbmUnLCAnZW1iZXItbWV0YWwvYWxpYXMnLCAnZW1iZXItbWV0YWwvZXhwYW5kX3Byb3Bl
cnRpZXMnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1ldGFsRGVidWcsIF9lbWJlck1ldGFs
UHJvcGVydHlfZ2V0LCBfZW1iZXJNZXRhbFByb3BlcnR5X3NldCwgX2VtYmVyTWV0YWxDb21wdXRl
ZCwgX2VtYmVyTWV0YWxJc19lbXB0eSwgX2VtYmVyTWV0YWxJc19ub25lLCBfZW1iZXJNZXRhbEFs
aWFzLCBfZW1iZXJNZXRhbEV4cGFuZF9wcm9wZXJ0aWVzKSB7Ci0gICd1c2Ugc3RyaWN0JzsKLQot
ICBleHBvcnRzLmVtcHR5ID0gZW1wdHk7Ci0gIGV4cG9ydHMubm90RW1wdHkgPSBub3RFbXB0eTsK
LSAgZXhwb3J0cy5ub25lID0gbm9uZTsKLSAgZXhwb3J0cy5ub3QgPSBub3Q7Ci0gIGV4cG9ydHMu
Ym9vbCA9IGJvb2w7Ci0gIGV4cG9ydHMubWF0Y2ggPSBtYXRjaDsKLSAgZXhwb3J0cy5lcXVhbCA9
IGVxdWFsOwotICBleHBvcnRzLmd0ID0gZ3Q7Ci0gIGV4cG9ydHMuZ3RlID0gZ3RlOwotICBleHBv
cnRzLmx0ID0gbHQ7Ci0gIGV4cG9ydHMubHRlID0gbHRlOwotICBleHBvcnRzLm9uZVdheSA9IG9u
ZVdheTsKLSAgZXhwb3J0cy5yZWFkT25seSA9IHJlYWRPbmx5OwotICBleHBvcnRzLmRlcHJlY2F0
aW5nQWxpYXMgPSBkZXByZWNhdGluZ0FsaWFzOwotCi0gIC8qKgotICBAbW9kdWxlIGVtYmVyCi0g
IEBzdWJtb2R1bGUgZW1iZXItbWV0YWwKLSAgKi8KLQotICBmdW5jdGlvbiBnZXRQcm9wZXJ0aWVz
KHNlbGYsIHByb3BlcnR5TmFtZXMpIHsKLSAgICB2YXIgcmV0ID0ge307Ci0gICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBwcm9wZXJ0eU5hbWVzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICByZXRbcHJvcGVy
dHlOYW1lc1tpXV0gPSBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQoc2VsZiwgcHJvcGVydHlO
YW1lc1tpXSk7Ci0gICAgfQotICAgIHJldHVybiByZXQ7Ci0gIH0KLQotICBmdW5jdGlvbiBnZW5l
cmF0ZUNvbXB1dGVkV2l0aFByb3BlcnRpZXMobWFjcm8pIHsKLSAgICByZXR1cm4gZnVuY3Rpb24g
KCkgewotICAgICAgdmFyIGV4cGFuZGVkUHJvcGVydGllcyA9IFtdOwotICAgICAgdmFyIGNvbXB1
dGVkRnVuYyA9IF9lbWJlck1ldGFsQ29tcHV0ZWQuY29tcHV0ZWQoZnVuY3Rpb24gKCkgewotICAg
ICAgICByZXR1cm4gbWFjcm8uYXBwbHkodGhpcywgW2dldFByb3BlcnRpZXModGhpcywgZXhwYW5k
ZWRQcm9wZXJ0aWVzKV0pOwotICAgICAgfSk7Ci0KLSAgICAgIGZ1bmN0aW9uIGV4dHJhY3RQcm9w
ZXJ0eShlbnRyeSkgewotICAgICAgICBleHBhbmRlZFByb3BlcnRpZXMucHVzaChlbnRyeSk7Ci0g
ICAgICB9Ci0KLSAgICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBwcm9wZXJ0
aWVzID0gQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7Ci0gICAg
ICAgIHByb3BlcnRpZXNbX2tleV0gPSBhcmd1bWVudHNbX2tleV07Ci0gICAgICB9Ci0KLSAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKykgewotICAgICAgICBf
ZW1iZXJNZXRhbEV4cGFuZF9wcm9wZXJ0aWVzLmRlZmF1bHQocHJvcGVydGllc1tpXSwgZXh0cmFj
dFByb3BlcnR5KTsKLSAgICAgIH0KLQotICAgICAgcmV0dXJuIGNvbXB1dGVkRnVuYy5wcm9wZXJ0
eS5hcHBseShjb21wdXRlZEZ1bmMsIGV4cGFuZGVkUHJvcGVydGllcyk7Ci0gICAgfTsKLSAgfQot
Ci0gIC8qKgotICAgIEEgY29tcHV0ZWQgcHJvcGVydHkgdGhhdCByZXR1cm5zIHRydWUgaWYgdGhl
IHZhbHVlIG9mIHRoZSBkZXBlbmRlbnQKLSAgICBwcm9wZXJ0eSBpcyBudWxsLCBhbiBlbXB0eSBz
dHJpbmcsIGVtcHR5IGFycmF5LCBvciBlbXB0eSBmdW5jdGlvbi4KLSAgCi0gICAgRXhhbXBsZQot
ICAKLSAgICBgYGBqYXZhc2NyaXB0Ci0gICAgdmFyIFRvRG9MaXN0ID0gRW1iZXIuT2JqZWN0LmV4
dGVuZCh7Ci0gICAgICBpc0RvbmU6IEVtYmVyLmNvbXB1dGVkLmVtcHR5KCd0b2RvcycpCi0gICAg
fSk7Ci0gIAotICAgIHZhciB0b2RvTGlzdCA9IFRvRG9MaXN0LmNyZWF0ZSh7Ci0gICAgICB0b2Rv
czogWydVbml0IFRlc3QnLCAnRG9jdW1lbnRhdGlvbicsICdSZWxlYXNlJ10KLSAgICB9KTsKLSAg
Ci0gICAgdG9kb0xpc3QuZ2V0KCdpc0RvbmUnKTsgLy8gZmFsc2UKLSAgICB0b2RvTGlzdC5nZXQo
J3RvZG9zJykuY2xlYXIoKTsKLSAgICB0b2RvTGlzdC5nZXQoJ2lzRG9uZScpOyAvLyB0cnVlCi0g
ICAgYGBgCi0gIAotICAgIEBzaW5jZSAxLjYuMAotICAgIEBtZXRob2QgZW1wdHkKLSAgICBAZm9y
IEVtYmVyLmNvbXB1dGVkCi0gICAgQHBhcmFtIHtTdHJpbmd9IGRlcGVuZGVudEtleQotICAgIEBy
ZXR1cm4ge0VtYmVyLkNvbXB1dGVkUHJvcGVydHl9IGNvbXB1dGVkIHByb3BlcnR5IHdoaWNoIG5l
Z2F0ZQotICAgIHRoZSBvcmlnaW5hbCB2YWx1ZSBmb3IgcHJvcGVydHkKLSAgICBAcHVibGljCi0g
ICovCi0KLSAgZnVuY3Rpb24gZW1wdHkoZGVwZW5kZW50S2V5KSB7Ci0gICAgcmV0dXJuIF9lbWJl
ck1ldGFsQ29tcHV0ZWQuY29tcHV0ZWQoZGVwZW5kZW50S2V5ICsgJy5sZW5ndGgnLCBmdW5jdGlv
biAoKSB7Ci0gICAgICByZXR1cm4gX2VtYmVyTWV0YWxJc19lbXB0eS5kZWZhdWx0KF9lbWJlck1l
dGFsUHJvcGVydHlfZ2V0LmdldCh0aGlzLCBkZXBlbmRlbnRLZXkpKTsKLSAgICB9KTsKLSAgfQot
Ci0gIC8qKgotICAgIEEgY29tcHV0ZWQgcHJvcGVydHkgdGhhdCByZXR1cm5zIHRydWUgaWYgdGhl
IHZhbHVlIG9mIHRoZSBkZXBlbmRlbnQKLSAgICBwcm9wZXJ0eSBpcyBOT1QgbnVsbCwgYW4gZW1w
dHkgc3RyaW5nLCBlbXB0eSBhcnJheSwgb3IgZW1wdHkgZnVuY3Rpb24uCi0gIAotICAgIEV4YW1w
bGUKLSAgCi0gICAgYGBgamF2YXNjcmlwdAotICAgIHZhciBIYW1zdGVyID0gRW1iZXIuT2JqZWN0
LmV4dGVuZCh7Ci0gICAgICBoYXNTdHVmZjogRW1iZXIuY29tcHV0ZWQubm90RW1wdHkoJ2JhY2tw
YWNrJykKLSAgICB9KTsKLSAgCi0gICAgdmFyIGhhbXN0ZXIgPSBIYW1zdGVyLmNyZWF0ZSh7IGJh
Y2twYWNrOiBbJ0Zvb2QnLCAnU2xlZXBpbmcgQmFnJywgJ1RlbnQnXSB9KTsKLSAgCi0gICAgaGFt
c3Rlci5nZXQoJ2hhc1N0dWZmJyk7ICAgICAgICAgLy8gdHJ1ZQotICAgIGhhbXN0ZXIuZ2V0KCdi
YWNrcGFjaycpLmNsZWFyKCk7IC8vIFtdCi0gICAgaGFtc3Rlci5nZXQoJ2hhc1N0dWZmJyk7ICAg
ICAgICAgLy8gZmFsc2UKLSAgICBgYGAKLSAgCi0gICAgQG1ldGhvZCBub3RFbXB0eQotICAgIEBm
b3IgRW1iZXIuY29tcHV0ZWQKLSAgICBAcGFyYW0ge1N0cmluZ30gZGVwZW5kZW50S2V5Ci0gICAg
QHJldHVybiB7RW1iZXIuQ29tcHV0ZWRQcm9wZXJ0eX0gY29tcHV0ZWQgcHJvcGVydHkgd2hpY2gg
cmV0dXJucyB0cnVlIGlmCi0gICAgb3JpZ2luYWwgdmFsdWUgZm9yIHByb3BlcnR5IGlzIG5vdCBl
bXB0eS4KLSAgICBAcHVibGljCi0gICovCi0KLSAgZnVuY3Rpb24gbm90RW1wdHkoZGVwZW5kZW50
S2V5KSB7Ci0gICAgcmV0dXJuIF9lbWJlck1ldGFsQ29tcHV0ZWQuY29tcHV0ZWQoZGVwZW5kZW50
S2V5ICsgJy5sZW5ndGgnLCBmdW5jdGlvbiAoKSB7Ci0gICAgICByZXR1cm4gIV9lbWJlck1ldGFs
SXNfZW1wdHkuZGVmYXVsdChfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywgZGVwZW5k
ZW50S2V5KSk7Ci0gICAgfSk7Ci0gIH0KLQotICAvKioKLSAgICBBIGNvbXB1dGVkIHByb3BlcnR5
IHRoYXQgcmV0dXJucyB0cnVlIGlmIHRoZSB2YWx1ZSBvZiB0aGUgZGVwZW5kZW50Ci0gICAgcHJv
cGVydHkgaXMgbnVsbCBvciB1bmRlZmluZWQuIFRoaXMgYXZvaWRzIGVycm9ycyBmcm9tIEpTTGlu
dCBjb21wbGFpbmluZwotICAgIGFib3V0IHVzZSBvZiA9PSwgd2hpY2ggY2FuIGJlIHRlY2huaWNh
bGx5IGNvbmZ1c2luZy4KLSAgCi0gICAgRXhhbXBsZQotICAKLSAgICBgYGBqYXZhc2NyaXB0Ci0g
ICAgdmFyIEhhbXN0ZXIgPSBFbWJlci5PYmplY3QuZXh0ZW5kKHsKLSAgICAgIGlzSHVuZ3J5OiBF
bWJlci5jb21wdXRlZC5ub25lKCdmb29kJykKLSAgICB9KTsKLSAgCi0gICAgdmFyIGhhbXN0ZXIg
PSBIYW1zdGVyLmNyZWF0ZSgpOwotICAKLSAgICBoYW1zdGVyLmdldCgnaXNIdW5ncnknKTsgLy8g
dHJ1ZQotICAgIGhhbXN0ZXIuc2V0KCdmb29kJywgJ0JhbmFuYScpOwotICAgIGhhbXN0ZXIuZ2V0
KCdpc0h1bmdyeScpOyAvLyBmYWxzZQotICAgIGhhbXN0ZXIuc2V0KCdmb29kJywgbnVsbCk7Ci0g
ICAgaGFtc3Rlci5nZXQoJ2lzSHVuZ3J5Jyk7IC8vIHRydWUKLSAgICBgYGAKLSAgCi0gICAgQG1l
dGhvZCBub25lCi0gICAgQGZvciBFbWJlci5jb21wdXRlZAotICAgIEBwYXJhbSB7U3RyaW5nfSBk
ZXBlbmRlbnRLZXkKLSAgICBAcmV0dXJuIHtFbWJlci5Db21wdXRlZFByb3BlcnR5fSBjb21wdXRl
ZCBwcm9wZXJ0eSB3aGljaAotICAgIHJldHVybnMgdHJ1ZSBpZiBvcmlnaW5hbCB2YWx1ZSBmb3Ig
cHJvcGVydHkgaXMgbnVsbCBvciB1bmRlZmluZWQuCi0gICAgQHB1YmxpYwotICAqLwotCi0gIGZ1
bmN0aW9uIG5vbmUoZGVwZW5kZW50S2V5KSB7Ci0gICAgcmV0dXJuIF9lbWJlck1ldGFsQ29tcHV0
ZWQuY29tcHV0ZWQoZGVwZW5kZW50S2V5LCBmdW5jdGlvbiAoKSB7Ci0gICAgICByZXR1cm4gX2Vt
YmVyTWV0YWxJc19ub25lLmRlZmF1bHQoX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMs
IGRlcGVuZGVudEtleSkpOwotICAgIH0pOwotICB9Ci0KLSAgLyoqCi0gICAgQSBjb21wdXRlZCBw
cm9wZXJ0eSB0aGF0IHJldHVybnMgdGhlIGludmVyc2UgYm9vbGVhbiB2YWx1ZQotICAgIG9mIHRo
ZSBvcmlnaW5hbCB2YWx1ZSBmb3IgdGhlIGRlcGVuZGVudCBwcm9wZXJ0eS4KLSAgCi0gICAgRXhh
bXBsZQotICAKLSAgICBgYGBqYXZhc2NyaXB0Ci0gICAgdmFyIFVzZXIgPSBFbWJlci5PYmplY3Qu
ZXh0ZW5kKHsKLSAgICAgIGlzQW5vbnltb3VzOiBFbWJlci5jb21wdXRlZC5ub3QoJ2xvZ2dlZElu
JykKLSAgICB9KTsKLSAgCi0gICAgdmFyIHVzZXIgPSBVc2VyLmNyZWF0ZSh7bG9nZ2VkSW46IGZh
bHNlfSk7Ci0gIAotICAgIHVzZXIuZ2V0KCdpc0Fub255bW91cycpOyAvLyB0cnVlCi0gICAgdXNl
ci5zZXQoJ2xvZ2dlZEluJywgdHJ1ZSk7Ci0gICAgdXNlci5nZXQoJ2lzQW5vbnltb3VzJyk7IC8v
IGZhbHNlCi0gICAgYGBgCi0gIAotICAgIEBtZXRob2Qgbm90Ci0gICAgQGZvciBFbWJlci5jb21w
dXRlZAotICAgIEBwYXJhbSB7U3RyaW5nfSBkZXBlbmRlbnRLZXkKLSAgICBAcmV0dXJuIHtFbWJl
ci5Db21wdXRlZFByb3BlcnR5fSBjb21wdXRlZCBwcm9wZXJ0eSB3aGljaCByZXR1cm5zCi0gICAg
aW52ZXJzZSBvZiB0aGUgb3JpZ2luYWwgdmFsdWUgZm9yIHByb3BlcnR5Ci0gICAgQHB1YmxpYwot
ICAqLwotCi0gIGZ1bmN0aW9uIG5vdChkZXBlbmRlbnRLZXkpIHsKLSAgICByZXR1cm4gX2VtYmVy
TWV0YWxDb21wdXRlZC5jb21wdXRlZChkZXBlbmRlbnRLZXksIGZ1bmN0aW9uICgpIHsKLSAgICAg
IHJldHVybiAhX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsIGRlcGVuZGVudEtleSk7
Ci0gICAgfSk7Ci0gIH0KLQotICAvKioKLSAgICBBIGNvbXB1dGVkIHByb3BlcnR5IHRoYXQgY29u
dmVydHMgdGhlIHByb3ZpZGVkIGRlcGVuZGVudCBwcm9wZXJ0eQotICAgIGludG8gYSBib29sZWFu
IHZhbHVlLgotICAKLSAgICBgYGBqYXZhc2NyaXB0Ci0gICAgdmFyIEhhbXN0ZXIgPSBFbWJlci5P
YmplY3QuZXh0ZW5kKHsKLSAgICAgIGhhc0JhbmFuYXM6IEVtYmVyLmNvbXB1dGVkLmJvb2woJ251
bUJhbmFuYXMnKQotICAgIH0pOwotICAKLSAgICB2YXIgaGFtc3RlciA9IEhhbXN0ZXIuY3JlYXRl
KCk7Ci0gIAotICAgIGhhbXN0ZXIuZ2V0KCdoYXNCYW5hbmFzJyk7IC8vIGZhbHNlCi0gICAgaGFt
c3Rlci5zZXQoJ251bUJhbmFuYXMnLCAwKTsKLSAgICBoYW1zdGVyLmdldCgnaGFzQmFuYW5hcycp
OyAvLyBmYWxzZQotICAgIGhhbXN0ZXIuc2V0KCdudW1CYW5hbmFzJywgMSk7Ci0gICAgaGFtc3Rl
ci5nZXQoJ2hhc0JhbmFuYXMnKTsgLy8gdHJ1ZQotICAgIGhhbXN0ZXIuc2V0KCdudW1CYW5hbmFz
JywgbnVsbCk7Ci0gICAgaGFtc3Rlci5nZXQoJ2hhc0JhbmFuYXMnKTsgLy8gZmFsc2UKLSAgICBg
YGAKLSAgCi0gICAgQG1ldGhvZCBib29sCi0gICAgQGZvciBFbWJlci5jb21wdXRlZAotICAgIEBw
YXJhbSB7U3RyaW5nfSBkZXBlbmRlbnRLZXkKLSAgICBAcmV0dXJuIHtFbWJlci5Db21wdXRlZFBy
b3BlcnR5fSBjb21wdXRlZCBwcm9wZXJ0eSB3aGljaCBjb252ZXJ0cwotICAgIHRvIGJvb2xlYW4g
dGhlIG9yaWdpbmFsIHZhbHVlIGZvciBwcm9wZXJ0eQotICAgIEBwdWJsaWMKLSAgKi8KLQotICBm
dW5jdGlvbiBib29sKGRlcGVuZGVudEtleSkgewotICAgIHJldHVybiBfZW1iZXJNZXRhbENvbXB1
dGVkLmNvbXB1dGVkKGRlcGVuZGVudEtleSwgZnVuY3Rpb24gKCkgewotICAgICAgcmV0dXJuICEh
X2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsIGRlcGVuZGVudEtleSk7Ci0gICAgfSk7
Ci0gIH0KLQotICAvKioKLSAgICBBIGNvbXB1dGVkIHByb3BlcnR5IHdoaWNoIG1hdGNoZXMgdGhl
IG9yaWdpbmFsIHZhbHVlIGZvciB0aGUKLSAgICBkZXBlbmRlbnQgcHJvcGVydHkgYWdhaW5zdCBh
IGdpdmVuIFJlZ0V4cCwgcmV0dXJuaW5nIGB0cnVlYAotICAgIGlmIHRoZSB2YWx1ZSBtYXRjaGVz
IHRoZSBSZWdFeHAgYW5kIGBmYWxzZWAgaWYgaXQgZG9lcyBub3QuCi0gIAotICAgIEV4YW1wbGUK
LSAgCi0gICAgYGBgamF2YXNjcmlwdAotICAgIHZhciBVc2VyID0gRW1iZXIuT2JqZWN0LmV4dGVu
ZCh7Ci0gICAgICBoYXNWYWxpZEVtYWlsOiBFbWJlci5jb21wdXRlZC5tYXRjaCgnZW1haWwnLCAv
Xi4rQC4rXC4uKyQvKQotICAgIH0pOwotICAKLSAgICB2YXIgdXNlciA9IFVzZXIuY3JlYXRlKHts
b2dnZWRJbjogZmFsc2V9KTsKLSAgCi0gICAgdXNlci5nZXQoJ2hhc1ZhbGlkRW1haWwnKTsgLy8g
ZmFsc2UKLSAgICB1c2VyLnNldCgnZW1haWwnLCAnJyk7Ci0gICAgdXNlci5nZXQoJ2hhc1ZhbGlk
RW1haWwnKTsgLy8gZmFsc2UKLSAgICB1c2VyLnNldCgnZW1haWwnLCAnZW1iZXJfaGFtc3RlckBl
eGFtcGxlLmNvbScpOwotICAgIHVzZXIuZ2V0KCdoYXNWYWxpZEVtYWlsJyk7IC8vIHRydWUKLSAg
ICBgYGAKLSAgCi0gICAgQG1ldGhvZCBtYXRjaAotICAgIEBmb3IgRW1iZXIuY29tcHV0ZWQKLSAg
ICBAcGFyYW0ge1N0cmluZ30gZGVwZW5kZW50S2V5Ci0gICAgQHBhcmFtIHtSZWdFeHB9IHJlZ2V4
cAotICAgIEByZXR1cm4ge0VtYmVyLkNvbXB1dGVkUHJvcGVydHl9IGNvbXB1dGVkIHByb3BlcnR5
IHdoaWNoIG1hdGNoCi0gICAgdGhlIG9yaWdpbmFsIHZhbHVlIGZvciBwcm9wZXJ0eSBhZ2FpbnN0
IGEgZ2l2ZW4gUmVnRXhwCi0gICAgQHB1YmxpYwotICAqLwotCi0gIGZ1bmN0aW9uIG1hdGNoKGRl
cGVuZGVudEtleSwgcmVnZXhwKSB7Ci0gICAgcmV0dXJuIF9lbWJlck1ldGFsQ29tcHV0ZWQuY29t
cHV0ZWQoZGVwZW5kZW50S2V5LCBmdW5jdGlvbiAoKSB7Ci0gICAgICB2YXIgdmFsdWUgPSBfZW1i
ZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywgZGVwZW5kZW50S2V5KTsKLQotICAgICAgcmV0
dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyByZWdleHAudGVzdCh2YWx1ZSkgOiBmYWxz
ZTsKLSAgICB9KTsKLSAgfQotCi0gIC8qKgotICAgIEEgY29tcHV0ZWQgcHJvcGVydHkgdGhhdCBy
ZXR1cm5zIHRydWUgaWYgdGhlIHByb3ZpZGVkIGRlcGVuZGVudCBwcm9wZXJ0eQotICAgIGlzIGVx
dWFsIHRvIHRoZSBnaXZlbiB2YWx1ZS4KLSAgCi0gICAgRXhhbXBsZQotICAKLSAgICBgYGBqYXZh
c2NyaXB0Ci0gICAgdmFyIEhhbXN0ZXIgPSBFbWJlci5PYmplY3QuZXh0ZW5kKHsKLSAgICAgIG5h
cFRpbWU6IEVtYmVyLmNvbXB1dGVkLmVxdWFsKCdzdGF0ZScsICdzbGVlcHknKQotICAgIH0pOwot
ICAKLSAgICB2YXIgaGFtc3RlciA9IEhhbXN0ZXIuY3JlYXRlKCk7Ci0gIAotICAgIGhhbXN0ZXIu
Z2V0KCduYXBUaW1lJyk7IC8vIGZhbHNlCi0gICAgaGFtc3Rlci5zZXQoJ3N0YXRlJywgJ3NsZWVw
eScpOwotICAgIGhhbXN0ZXIuZ2V0KCduYXBUaW1lJyk7IC8vIHRydWUKLSAgICBoYW1zdGVyLnNl
dCgnc3RhdGUnLCAnaHVuZ3J5Jyk7Ci0gICAgaGFtc3Rlci5nZXQoJ25hcFRpbWUnKTsgLy8gZmFs
c2UKLSAgICBgYGAKLSAgCi0gICAgQG1ldGhvZCBlcXVhbAotICAgIEBmb3IgRW1iZXIuY29tcHV0
ZWQKLSAgICBAcGFyYW0ge1N0cmluZ30gZGVwZW5kZW50S2V5Ci0gICAgQHBhcmFtIHtTdHJpbmd8
TnVtYmVyfE9iamVjdH0gdmFsdWUKLSAgICBAcmV0dXJuIHtFbWJlci5Db21wdXRlZFByb3BlcnR5
fSBjb21wdXRlZCBwcm9wZXJ0eSB3aGljaCByZXR1cm5zIHRydWUgaWYKLSAgICB0aGUgb3JpZ2lu
YWwgdmFsdWUgZm9yIHByb3BlcnR5IGlzIGVxdWFsIHRvIHRoZSBnaXZlbiB2YWx1ZS4KLSAgICBA
cHVibGljCi0gICovCi0KLSAgZnVuY3Rpb24gZXF1YWwoZGVwZW5kZW50S2V5LCB2YWx1ZSkgewot
ICAgIHJldHVybiBfZW1iZXJNZXRhbENvbXB1dGVkLmNvbXB1dGVkKGRlcGVuZGVudEtleSwgZnVu
Y3Rpb24gKCkgewotICAgICAgcmV0dXJuIF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0aGlz
LCBkZXBlbmRlbnRLZXkpID09PSB2YWx1ZTsKLSAgICB9KTsKLSAgfQotCi0gIC8qKgotICAgIEEg
Y29tcHV0ZWQgcHJvcGVydHkgdGhhdCByZXR1cm5zIHRydWUgaWYgdGhlIHByb3ZpZGVkIGRlcGVu
ZGVudCBwcm9wZXJ0eQotICAgIGlzIGdyZWF0ZXIgdGhhbiB0aGUgcHJvdmlkZWQgdmFsdWUuCi0g
IAotICAgIEV4YW1wbGUKLSAgCi0gICAgYGBgamF2YXNjcmlwdAotICAgIHZhciBIYW1zdGVyID0g
RW1iZXIuT2JqZWN0LmV4dGVuZCh7Ci0gICAgICBoYXNUb29NYW55QmFuYW5hczogRW1iZXIuY29t
cHV0ZWQuZ3QoJ251bUJhbmFuYXMnLCAxMCkKLSAgICB9KTsKLSAgCi0gICAgdmFyIGhhbXN0ZXIg
PSBIYW1zdGVyLmNyZWF0ZSgpOwotICAKLSAgICBoYW1zdGVyLmdldCgnaGFzVG9vTWFueUJhbmFu
YXMnKTsgLy8gZmFsc2UKLSAgICBoYW1zdGVyLnNldCgnbnVtQmFuYW5hcycsIDMpOwotICAgIGhh
bXN0ZXIuZ2V0KCdoYXNUb29NYW55QmFuYW5hcycpOyAvLyBmYWxzZQotICAgIGhhbXN0ZXIuc2V0
KCdudW1CYW5hbmFzJywgMTEpOwotICAgIGhhbXN0ZXIuZ2V0KCdoYXNUb29NYW55QmFuYW5hcycp
OyAvLyB0cnVlCi0gICAgYGBgCi0gIAotICAgIEBtZXRob2QgZ3QKLSAgICBAZm9yIEVtYmVyLmNv
bXB1dGVkCi0gICAgQHBhcmFtIHtTdHJpbmd9IGRlcGVuZGVudEtleQotICAgIEBwYXJhbSB7TnVt
YmVyfSB2YWx1ZQotICAgIEByZXR1cm4ge0VtYmVyLkNvbXB1dGVkUHJvcGVydHl9IGNvbXB1dGVk
IHByb3BlcnR5IHdoaWNoIHJldHVybnMgdHJ1ZSBpZgotICAgIHRoZSBvcmlnaW5hbCB2YWx1ZSBm
b3IgcHJvcGVydHkgaXMgZ3JlYXRlciB0aGFuIGdpdmVuIHZhbHVlLgotICAgIEBwdWJsaWMKLSAg
Ki8KLQotICBmdW5jdGlvbiBndChkZXBlbmRlbnRLZXksIHZhbHVlKSB7Ci0gICAgcmV0dXJuIF9l
bWJlck1ldGFsQ29tcHV0ZWQuY29tcHV0ZWQoZGVwZW5kZW50S2V5LCBmdW5jdGlvbiAoKSB7Ci0g
ICAgICByZXR1cm4gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsIGRlcGVuZGVudEtl
eSkgPiB2YWx1ZTsKLSAgICB9KTsKLSAgfQotCi0gIC8qKgotICAgIEEgY29tcHV0ZWQgcHJvcGVy
dHkgdGhhdCByZXR1cm5zIHRydWUgaWYgdGhlIHByb3ZpZGVkIGRlcGVuZGVudCBwcm9wZXJ0eQot
ICAgIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgcHJvdmlkZWQgdmFsdWUuCi0gIAot
ICAgIEV4YW1wbGUKLSAgCi0gICAgYGBgamF2YXNjcmlwdAotICAgIHZhciBIYW1zdGVyID0gRW1i
ZXIuT2JqZWN0LmV4dGVuZCh7Ci0gICAgICBoYXNUb29NYW55QmFuYW5hczogRW1iZXIuY29tcHV0
ZWQuZ3RlKCdudW1CYW5hbmFzJywgMTApCi0gICAgfSk7Ci0gIAotICAgIHZhciBoYW1zdGVyID0g
SGFtc3Rlci5jcmVhdGUoKTsKLSAgCi0gICAgaGFtc3Rlci5nZXQoJ2hhc1Rvb01hbnlCYW5hbmFz
Jyk7IC8vIGZhbHNlCi0gICAgaGFtc3Rlci5zZXQoJ251bUJhbmFuYXMnLCAzKTsKLSAgICBoYW1z
dGVyLmdldCgnaGFzVG9vTWFueUJhbmFuYXMnKTsgLy8gZmFsc2UKLSAgICBoYW1zdGVyLnNldCgn
bnVtQmFuYW5hcycsIDEwKTsKLSAgICBoYW1zdGVyLmdldCgnaGFzVG9vTWFueUJhbmFuYXMnKTsg
Ly8gdHJ1ZQotICAgIGBgYAotICAKLSAgICBAbWV0aG9kIGd0ZQotICAgIEBmb3IgRW1iZXIuY29t
cHV0ZWQKLSAgICBAcGFyYW0ge1N0cmluZ30gZGVwZW5kZW50S2V5Ci0gICAgQHBhcmFtIHtOdW1i
ZXJ9IHZhbHVlCi0gICAgQHJldHVybiB7RW1iZXIuQ29tcHV0ZWRQcm9wZXJ0eX0gY29tcHV0ZWQg
cHJvcGVydHkgd2hpY2ggcmV0dXJucyB0cnVlIGlmCi0gICAgdGhlIG9yaWdpbmFsIHZhbHVlIGZv
ciBwcm9wZXJ0eSBpcyBncmVhdGVyIG9yIGVxdWFsIHRoZW4gZ2l2ZW4gdmFsdWUuCi0gICAgQHB1
YmxpYwotICAqLwotCi0gIGZ1bmN0aW9uIGd0ZShkZXBlbmRlbnRLZXksIHZhbHVlKSB7Ci0gICAg
cmV0dXJuIF9lbWJlck1ldGFsQ29tcHV0ZWQuY29tcHV0ZWQoZGVwZW5kZW50S2V5LCBmdW5jdGlv
biAoKSB7Ci0gICAgICByZXR1cm4gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsIGRl
cGVuZGVudEtleSkgPj0gdmFsdWU7Ci0gICAgfSk7Ci0gIH0KLQotICAvKioKLSAgICBBIGNvbXB1
dGVkIHByb3BlcnR5IHRoYXQgcmV0dXJucyB0cnVlIGlmIHRoZSBwcm92aWRlZCBkZXBlbmRlbnQg
cHJvcGVydHkKLSAgICBpcyBsZXNzIHRoYW4gdGhlIHByb3ZpZGVkIHZhbHVlLgotICAKLSAgICBF
eGFtcGxlCi0gIAotICAgIGBgYGphdmFzY3JpcHQKLSAgICB2YXIgSGFtc3RlciA9IEVtYmVyLk9i
amVjdC5leHRlbmQoewotICAgICAgbmVlZHNNb3JlQmFuYW5hczogRW1iZXIuY29tcHV0ZWQubHQo
J251bUJhbmFuYXMnLCAzKQotICAgIH0pOwotICAKLSAgICB2YXIgaGFtc3RlciA9IEhhbXN0ZXIu
Y3JlYXRlKCk7Ci0gIAotICAgIGhhbXN0ZXIuZ2V0KCduZWVkc01vcmVCYW5hbmFzJyk7IC8vIHRy
dWUKLSAgICBoYW1zdGVyLnNldCgnbnVtQmFuYW5hcycsIDMpOwotICAgIGhhbXN0ZXIuZ2V0KCdu
ZWVkc01vcmVCYW5hbmFzJyk7IC8vIGZhbHNlCi0gICAgaGFtc3Rlci5zZXQoJ251bUJhbmFuYXMn
LCAyKTsKLSAgICBoYW1zdGVyLmdldCgnbmVlZHNNb3JlQmFuYW5hcycpOyAvLyB0cnVlCi0gICAg
YGBgCi0gIAotICAgIEBtZXRob2QgbHQKLSAgICBAZm9yIEVtYmVyLmNvbXB1dGVkCi0gICAgQHBh
cmFtIHtTdHJpbmd9IGRlcGVuZGVudEtleQotICAgIEBwYXJhbSB7TnVtYmVyfSB2YWx1ZQotICAg
IEByZXR1cm4ge0VtYmVyLkNvbXB1dGVkUHJvcGVydHl9IGNvbXB1dGVkIHByb3BlcnR5IHdoaWNo
IHJldHVybnMgdHJ1ZSBpZgotICAgIHRoZSBvcmlnaW5hbCB2YWx1ZSBmb3IgcHJvcGVydHkgaXMg
bGVzcyB0aGVuIGdpdmVuIHZhbHVlLgotICAgIEBwdWJsaWMKLSAgKi8KLQotICBmdW5jdGlvbiBs
dChkZXBlbmRlbnRLZXksIHZhbHVlKSB7Ci0gICAgcmV0dXJuIF9lbWJlck1ldGFsQ29tcHV0ZWQu
Y29tcHV0ZWQoZGVwZW5kZW50S2V5LCBmdW5jdGlvbiAoKSB7Ci0gICAgICByZXR1cm4gX2VtYmVy
TWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsIGRlcGVuZGVudEtleSkgPCB2YWx1ZTsKLSAgICB9
KTsKLSAgfQotCi0gIC8qKgotICAgIEEgY29tcHV0ZWQgcHJvcGVydHkgdGhhdCByZXR1cm5zIHRy
dWUgaWYgdGhlIHByb3ZpZGVkIGRlcGVuZGVudCBwcm9wZXJ0eQotICAgIGlzIGxlc3MgdGhhbiBv
ciBlcXVhbCB0byB0aGUgcHJvdmlkZWQgdmFsdWUuCi0gIAotICAgIEV4YW1wbGUKLSAgCi0gICAg
YGBgamF2YXNjcmlwdAotICAgIHZhciBIYW1zdGVyID0gRW1iZXIuT2JqZWN0LmV4dGVuZCh7Ci0g
ICAgICBuZWVkc01vcmVCYW5hbmFzOiBFbWJlci5jb21wdXRlZC5sdGUoJ251bUJhbmFuYXMnLCAz
KQotICAgIH0pOwotICAKLSAgICB2YXIgaGFtc3RlciA9IEhhbXN0ZXIuY3JlYXRlKCk7Ci0gIAot
ICAgIGhhbXN0ZXIuZ2V0KCduZWVkc01vcmVCYW5hbmFzJyk7IC8vIHRydWUKLSAgICBoYW1zdGVy
LnNldCgnbnVtQmFuYW5hcycsIDUpOwotICAgIGhhbXN0ZXIuZ2V0KCduZWVkc01vcmVCYW5hbmFz
Jyk7IC8vIGZhbHNlCi0gICAgaGFtc3Rlci5zZXQoJ251bUJhbmFuYXMnLCAzKTsKLSAgICBoYW1z
dGVyLmdldCgnbmVlZHNNb3JlQmFuYW5hcycpOyAvLyB0cnVlCi0gICAgYGBgCi0gIAotICAgIEBt
ZXRob2QgbHRlCi0gICAgQGZvciBFbWJlci5jb21wdXRlZAotICAgIEBwYXJhbSB7U3RyaW5nfSBk
ZXBlbmRlbnRLZXkKLSAgICBAcGFyYW0ge051bWJlcn0gdmFsdWUKLSAgICBAcmV0dXJuIHtFbWJl
ci5Db21wdXRlZFByb3BlcnR5fSBjb21wdXRlZCBwcm9wZXJ0eSB3aGljaCByZXR1cm5zIHRydWUg
aWYKLSAgICB0aGUgb3JpZ2luYWwgdmFsdWUgZm9yIHByb3BlcnR5IGlzIGxlc3Mgb3IgZXF1YWwg
dGhhbiBnaXZlbiB2YWx1ZS4KLSAgICBAcHVibGljCi0gICovCi0KLSAgZnVuY3Rpb24gbHRlKGRl
cGVuZGVudEtleSwgdmFsdWUpIHsKLSAgICByZXR1cm4gX2VtYmVyTWV0YWxDb21wdXRlZC5jb21w
dXRlZChkZXBlbmRlbnRLZXksIGZ1bmN0aW9uICgpIHsKLSAgICAgIHJldHVybiBfZW1iZXJNZXRh
bFByb3BlcnR5X2dldC5nZXQodGhpcywgZGVwZW5kZW50S2V5KSA8PSB2YWx1ZTsKLSAgICB9KTsK
LSAgfQotCi0gIC8qKgotICAgIEEgY29tcHV0ZWQgcHJvcGVydHkgdGhhdCBwZXJmb3JtcyBhIGxv
Z2ljYWwgYGFuZGAgb24gdGhlCi0gICAgb3JpZ2luYWwgdmFsdWVzIGZvciB0aGUgcHJvdmlkZWQg
ZGVwZW5kZW50IHByb3BlcnRpZXMuCi0gIAotICAgIFlvdSBtYXkgcGFzcyBpbiBtb3JlIHRoYW4g
dHdvIHByb3BlcnRpZXMgYW5kIGV2ZW4gdXNlCi0gICAgcHJvcGVydHkgYnJhY2UgZXhwYW5zaW9u
LiAgVGhlIGNvbXB1dGVkIHByb3BlcnR5IHdpbGwKLSAgICByZXR1cm5zIHRoZSBmaXJzdCBmYWxz
eSB2YWx1ZSBvciBsYXN0IHRydXRoeSB2YWx1ZQotICAgIGp1c3QgbGlrZSBKYXZhU2NyaXB0J3Mg
YHx8YCBvcGVyYXRvci4KLSAgCi0gICAgRXhhbXBsZQotICAKLSAgICBgYGBqYXZhc2NyaXB0Ci0g
ICAgdmFyIEhhbXN0ZXIgPSBFbWJlci5PYmplY3QuZXh0ZW5kKHsKLSAgICAgIHJlYWR5Rm9yQ2Ft
cDogRW1iZXIuY29tcHV0ZWQuYW5kKCdoYXNUZW50JywgJ2hhc0JhY2twYWNrJyksCi0gICAgICBy
ZWFkeUZvckhpa2U6IEVtYmVyLmNvbXB1dGVkLmFuZCgnaGFzV2Fsa2luZ1N0aWNrJywgJ2hhc0Jh
Y2twYWNrJykKLSAgICB9KTsKLSAgCi0gICAgdmFyIHRvbXN0ZXIgPSBIYW1zdGVyLmNyZWF0ZSgp
OwotICAKLSAgICB0b21zdGVyLmdldCgncmVhZHlGb3JDYW1wJyk7IC8vIGZhbHNlCi0gICAgdG9t
c3Rlci5zZXQoJ2hhc1RlbnQnLCB0cnVlKTsKLSAgICB0b21zdGVyLmdldCgncmVhZHlGb3JDYW1w
Jyk7IC8vIGZhbHNlCi0gICAgdG9tc3Rlci5zZXQoJ2hhc0JhY2twYWNrJywgdHJ1ZSk7Ci0gICAg
dG9tc3Rlci5nZXQoJ3JlYWR5Rm9yQ2FtcCcpOyAvLyB0cnVlCi0gICAgdG9tc3Rlci5zZXQoJ2hh
c0JhY2twYWNrJywgJ1llcycpOwotICAgIHRvbXN0ZXIuZ2V0KCdyZWFkeUZvckNhbXAnKTsgLy8g
J1llcycKLSAgICB0b21zdGVyLnNldCgnaGFzV2Fsa2luZ1N0aWNrJywgbnVsbCk7Ci0gICAgdG9t
c3Rlci5nZXQoJ3JlYWR5Rm9ySGlrZScpOyAvLyBudWxsCi0gICAgYGBgCi0gIAotICAgIEBtZXRo
b2QgYW5kCi0gICAgQGZvciBFbWJlci5jb21wdXRlZAotICAgIEBwYXJhbSB7U3RyaW5nfSBkZXBl
bmRlbnRLZXkqCi0gICAgQHJldHVybiB7RW1iZXIuQ29tcHV0ZWRQcm9wZXJ0eX0gY29tcHV0ZWQg
cHJvcGVydHkgd2hpY2ggcGVyZm9ybXMKLSAgICBhIGxvZ2ljYWwgYGFuZGAgb24gdGhlIHZhbHVl
cyBvZiBhbGwgdGhlIG9yaWdpbmFsIHZhbHVlcyBmb3IgcHJvcGVydGllcy4KLSAgICBAcHVibGlj
Ci0gICovCi0gIHZhciBhbmQgPSBnZW5lcmF0ZUNvbXB1dGVkV2l0aFByb3BlcnRpZXMoZnVuY3Rp
b24gKHByb3BlcnRpZXMpIHsKLSAgICB2YXIgdmFsdWU7Ci0gICAgZm9yICh2YXIga2V5IGluIHBy
b3BlcnRpZXMpIHsKLSAgICAgIHZhbHVlID0gcHJvcGVydGllc1trZXldOwotICAgICAgaWYgKHBy
b3BlcnRpZXMuaGFzT3duUHJvcGVydHkoa2V5KSAmJiAhdmFsdWUpIHsKLSAgICAgICAgcmV0dXJu
IHZhbHVlOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdmFsdWU7Ci0gIH0pOwotCi0gIGV4
cG9ydHMuYW5kID0gYW5kOwotICAvKioKLSAgICBBIGNvbXB1dGVkIHByb3BlcnR5IHdoaWNoIHBl
cmZvcm1zIGEgbG9naWNhbCBgb3JgIG9uIHRoZQotICAgIG9yaWdpbmFsIHZhbHVlcyBmb3IgdGhl
IHByb3ZpZGVkIGRlcGVuZGVudCBwcm9wZXJ0aWVzLgotICAKLSAgICBZb3UgbWF5IHBhc3MgaW4g
bW9yZSB0aGFuIHR3byBwcm9wZXJ0aWVzIGFuZCBldmVuIHVzZQotICAgIHByb3BlcnR5IGJyYWNl
IGV4cGFuc2lvbi4gIFRoZSBjb21wdXRlZCBwcm9wZXJ0eSB3aWxsCi0gICAgcmV0dXJucyB0aGUg
Zmlyc3QgdHJ1dGh5IHZhbHVlIG9yIGxhc3QgZmFsc3kgdmFsdWUganVzdAotICAgIGxpa2UgSmF2
YVNjcmlwdCdzIGB8fGAgb3BlcmF0b3IuCi0gIAotICAgIEV4YW1wbGUKLSAgCi0gICAgYGBgamF2
YXNjcmlwdAotICAgIHZhciBIYW1zdGVyID0gRW1iZXIuT2JqZWN0LmV4dGVuZCh7Ci0gICAgICBy
ZWFkeUZvclJhaW46IEVtYmVyLmNvbXB1dGVkLm9yKCdoYXNKYWNrZXQnLCAnaGFzVW1icmVsbGEn
KSwKLSAgICAgIHJlYWR5Rm9yQmVhY2g6IEVtYmVyLmNvbXB1dGVkLm9yKCd7aGFzU3Vuc2NyZWVu
LGhhc1VtYnJlbGxhfScpCi0gICAgfSk7Ci0gIAotICAgIHZhciB0b21zdGVyID0gSGFtc3Rlci5j
cmVhdGUoKTsKLSAgCi0gICAgdG9tc3Rlci5nZXQoJ3JlYWR5Rm9yUmFpbicpOyAvLyB1bmRlZmlu
ZWQKLSAgICB0b21zdGVyLnNldCgnaGFzVW1icmVsbGEnLCB0cnVlKTsKLSAgICB0b21zdGVyLmdl
dCgncmVhZHlGb3JSYWluJyk7IC8vIHRydWUKLSAgICB0b21zdGVyLnNldCgnaGFzSmFja2V0Jywg
J1llcycpOwotICAgIHRvbXN0ZXIuZ2V0KCdyZWFkeUZvclJhaW4nKTsgLy8gJ1llcycKLSAgICB0
b21zdGVyLnNldCgnaGFzU3Vuc2NyZWVuJywgJ0NoZWNrJyk7Ci0gICAgdG9tc3Rlci5nZXQoJ3Jl
YWR5Rm9yQmVhY2gnKTsgLy8gJ0NoZWNrJwotICAgIGBgYAotICAKLSAgICBAbWV0aG9kIG9yCi0g
ICAgQGZvciBFbWJlci5jb21wdXRlZAotICAgIEBwYXJhbSB7U3RyaW5nfSBkZXBlbmRlbnRLZXkq
Ci0gICAgQHJldHVybiB7RW1iZXIuQ29tcHV0ZWRQcm9wZXJ0eX0gY29tcHV0ZWQgcHJvcGVydHkg
d2hpY2ggcGVyZm9ybXMKLSAgICBhIGxvZ2ljYWwgYG9yYCBvbiB0aGUgdmFsdWVzIG9mIGFsbCB0
aGUgb3JpZ2luYWwgdmFsdWVzIGZvciBwcm9wZXJ0aWVzLgotICAgIEBwdWJsaWMKLSAgKi8KLSAg
dmFyIG9yID0gZ2VuZXJhdGVDb21wdXRlZFdpdGhQcm9wZXJ0aWVzKGZ1bmN0aW9uIChwcm9wZXJ0
aWVzKSB7Ci0gICAgdmFyIHZhbHVlOwotICAgIGZvciAodmFyIGtleSBpbiBwcm9wZXJ0aWVzKSB7
Ci0gICAgICB2YWx1ZSA9IHByb3BlcnRpZXNba2V5XTsKLSAgICAgIGlmIChwcm9wZXJ0aWVzLmhh
c093blByb3BlcnR5KGtleSkgJiYgdmFsdWUpIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlOwotICAg
ICAgfQotICAgIH0KLSAgICByZXR1cm4gdmFsdWU7Ci0gIH0pOwotCi0gIGV4cG9ydHMub3IgPSBv
cjsKLSAgLyoqCi0gICAgQ3JlYXRlcyBhIG5ldyBwcm9wZXJ0eSB0aGF0IGlzIGFuIGFsaWFzIGZv
ciBhbm90aGVyIHByb3BlcnR5Ci0gICAgb24gYW4gb2JqZWN0LiBDYWxscyB0byBgZ2V0YCBvciBg
c2V0YCB0aGlzIHByb3BlcnR5IGJlaGF2ZSBhcwotICAgIHRob3VnaCB0aGV5IHdlcmUgY2FsbGVk
IG9uIHRoZSBvcmlnaW5hbCBwcm9wZXJ0eS4KLSAgCi0gICAgYGBgamF2YXNjcmlwdAotICAgIHZh
ciBQZXJzb24gPSBFbWJlci5PYmplY3QuZXh0ZW5kKHsKLSAgICAgIG5hbWU6ICdBbGV4IE1hdGNo
bmVlcicsCi0gICAgICBub21lbjogRW1iZXIuY29tcHV0ZWQuYWxpYXMoJ25hbWUnKQotICAgIH0p
OwotICAKLSAgICB2YXIgYWxleCA9IFBlcnNvbi5jcmVhdGUoKTsKLSAgCi0gICAgYWxleC5nZXQo
J25vbWVuJyk7IC8vICdBbGV4IE1hdGNobmVlcicKLSAgICBhbGV4LmdldCgnbmFtZScpOyAgLy8g
J0FsZXggTWF0Y2huZWVyJwotICAKLSAgICBhbGV4LnNldCgnbm9tZW4nLCAnQG1hY2h0eScpOwot
ICAgIGFsZXguZ2V0KCduYW1lJyk7ICAvLyAnQG1hY2h0eScKLSAgICBgYGAKLSAgCi0gICAgQG1l
dGhvZCBhbGlhcwotICAgIEBmb3IgRW1iZXIuY29tcHV0ZWQKLSAgICBAcGFyYW0ge1N0cmluZ30g
ZGVwZW5kZW50S2V5Ci0gICAgQHJldHVybiB7RW1iZXIuQ29tcHV0ZWRQcm9wZXJ0eX0gY29tcHV0
ZWQgcHJvcGVydHkgd2hpY2ggY3JlYXRlcyBhbgotICAgIGFsaWFzIHRvIHRoZSBvcmlnaW5hbCB2
YWx1ZSBmb3IgcHJvcGVydHkuCi0gICAgQHB1YmxpYwotICAqLwotCi0gIC8qKgotICAgIFdoZXJl
IGBjb21wdXRlZC5hbGlhc2AgYWxpYXNlcyBgZ2V0YCBhbmQgYHNldGAsIGFuZCBhbGxvd3MgZm9y
IGJpZGlyZWN0aW9uYWwKLSAgICBkYXRhIGZsb3csIGBjb21wdXRlZC5vbmVXYXlgIG9ubHkgcHJv
dmlkZXMgYW4gYWxpYXNlZCBgZ2V0YC4gVGhlIGBzZXRgIHdpbGwKLSAgICBub3QgbXV0YXRlIHRo
ZSB1cHN0cmVhbSBwcm9wZXJ0eSwgcmF0aGVyIGNhdXNlcyB0aGUgY3VycmVudCBwcm9wZXJ0eSB0
bwotICAgIGJlY29tZSB0aGUgdmFsdWUgc2V0LiBUaGlzIGNhdXNlcyB0aGUgZG93bnN0cmVhbSBw
cm9wZXJ0eSB0byBwZXJtYW5lbnRseQotICAgIGRpdmVyZ2UgZnJvbSB0aGUgdXBzdHJlYW0gcHJv
cGVydHkuCi0gIAotICAgIEV4YW1wbGUKLSAgCi0gICAgYGBgamF2YXNjcmlwdAotICAgIHZhciBV
c2VyID0gRW1iZXIuT2JqZWN0LmV4dGVuZCh7Ci0gICAgICBmaXJzdE5hbWU6IG51bGwsCi0gICAg
ICBsYXN0TmFtZTogbnVsbCwKLSAgICAgIG5pY2tOYW1lOiBFbWJlci5jb21wdXRlZC5vbmVXYXko
J2ZpcnN0TmFtZScpCi0gICAgfSk7Ci0gIAotICAgIHZhciB0ZWRkeSA9IFVzZXIuY3JlYXRlKHsK
LSAgICAgIGZpcnN0TmFtZTogJ1RlZGR5JywKLSAgICAgIGxhc3ROYW1lOiAgJ1plZW5ueScKLSAg
ICB9KTsKLSAgCi0gICAgdGVkZHkuZ2V0KCduaWNrTmFtZScpOyAgICAgICAgICAgICAgLy8gJ1Rl
ZGR5JwotICAgIHRlZGR5LnNldCgnbmlja05hbWUnLCAnVGVkZHlCZWFyJyk7IC8vICdUZWRkeUJl
YXInCi0gICAgdGVkZHkuZ2V0KCdmaXJzdE5hbWUnKTsgICAgICAgICAgICAgLy8gJ1RlZGR5Jwot
ICAgIGBgYAotICAKLSAgICBAbWV0aG9kIG9uZVdheQotICAgIEBmb3IgRW1iZXIuY29tcHV0ZWQK
LSAgICBAcGFyYW0ge1N0cmluZ30gZGVwZW5kZW50S2V5Ci0gICAgQHJldHVybiB7RW1iZXIuQ29t
cHV0ZWRQcm9wZXJ0eX0gY29tcHV0ZWQgcHJvcGVydHkgd2hpY2ggY3JlYXRlcyBhCi0gICAgb25l
IHdheSBjb21wdXRlZCBwcm9wZXJ0eSB0byB0aGUgb3JpZ2luYWwgdmFsdWUgZm9yIHByb3BlcnR5
LgotICAgIEBwdWJsaWMKLSAgKi8KLQotICBmdW5jdGlvbiBvbmVXYXkoZGVwZW5kZW50S2V5KSB7
Ci0gICAgcmV0dXJuIF9lbWJlck1ldGFsQWxpYXMuZGVmYXVsdChkZXBlbmRlbnRLZXkpLm9uZVdh
eSgpOwotICB9Ci0KLSAgLyoqCi0gICAgVGhpcyBpcyBhIG1vcmUgc2VtYW50aWNhbGx5IG1lYW5p
bmdmdWwgYWxpYXMgb2YgYGNvbXB1dGVkLm9uZVdheWAsCi0gICAgd2hvc2UgbmFtZSBpcyBzb21l
d2hhdCBhbWJpZ3VvdXMgYXMgdG8gd2hpY2ggZGlyZWN0aW9uIHRoZSBkYXRhIGZsb3dzLgotICAK
LSAgICBAbWV0aG9kIHJlYWRzCi0gICAgQGZvciBFbWJlci5jb21wdXRlZAotICAgIEBwYXJhbSB7
U3RyaW5nfSBkZXBlbmRlbnRLZXkKLSAgICBAcmV0dXJuIHtFbWJlci5Db21wdXRlZFByb3BlcnR5
fSBjb21wdXRlZCBwcm9wZXJ0eSB3aGljaCBjcmVhdGVzIGEKLSAgICAgIG9uZSB3YXkgY29tcHV0
ZWQgcHJvcGVydHkgdG8gdGhlIG9yaWdpbmFsIHZhbHVlIGZvciBwcm9wZXJ0eS4KLSAgICBAcHVi
bGljCi0gICAqLwotCi0gIC8qKgotICAgIFdoZXJlIGBjb21wdXRlZC5vbmVXYXlgIHByb3ZpZGVz
IG9uZVdheSBiaW5kaW5ncywgYGNvbXB1dGVkLnJlYWRPbmx5YCBwcm92aWRlcwotICAgIGEgcmVh
ZE9ubHkgb25lIHdheSBiaW5kaW5nLiBWZXJ5IG9mdGVuIHdoZW4gdXNpbmcgYGNvbXB1dGVkLm9u
ZVdheWAgb25lIGRvZXMKLSAgICBub3QgYWxzbyB3YW50IGNoYW5nZXMgdG8gcHJvcGFnYXRlIGJh
Y2sgdXAsIGFzIHRoZXkgd2lsbCByZXBsYWNlIHRoZSB2YWx1ZS4KLSAgCi0gICAgVGhpcyBwcmV2
ZW50cyB0aGUgcmV2ZXJzZSBmbG93LCBhbmQgYWxzbyB0aHJvd3MgYW4gZXhjZXB0aW9uIHdoZW4g
aXQgb2NjdXJzLgotICAKLSAgICBFeGFtcGxlCi0gIAotICAgIGBgYGphdmFzY3JpcHQKLSAgICB2
YXIgVXNlciA9IEVtYmVyLk9iamVjdC5leHRlbmQoewotICAgICAgZmlyc3ROYW1lOiBudWxsLAot
ICAgICAgbGFzdE5hbWU6IG51bGwsCi0gICAgICBuaWNrTmFtZTogRW1iZXIuY29tcHV0ZWQucmVh
ZE9ubHkoJ2ZpcnN0TmFtZScpCi0gICAgfSk7Ci0gIAotICAgIHZhciB0ZWRkeSA9IFVzZXIuY3Jl
YXRlKHsKLSAgICAgIGZpcnN0TmFtZTogJ1RlZGR5JywKLSAgICAgIGxhc3ROYW1lOiAgJ1plZW5u
eScKLSAgICB9KTsKLSAgCi0gICAgdGVkZHkuZ2V0KCduaWNrTmFtZScpOyAgICAgICAgICAgICAg
Ly8gJ1RlZGR5JwotICAgIHRlZGR5LnNldCgnbmlja05hbWUnLCAnVGVkZHlCZWFyJyk7IC8vIHRo
cm93cyBFeGNlcHRpb24KLSAgICAvLyB0aHJvdyBuZXcgRW1iZXIuRXJyb3IoJ0Nhbm5vdCBTZXQ6
IG5pY2tOYW1lIG9uOiA8VXNlcjplbWJlcjI3Mjg4PicgKTtgCi0gICAgdGVkZHkuZ2V0KCdmaXJz
dE5hbWUnKTsgICAgICAgICAgICAgLy8gJ1RlZGR5JwotICAgIGBgYAotICAKLSAgICBAbWV0aG9k
IHJlYWRPbmx5Ci0gICAgQGZvciBFbWJlci5jb21wdXRlZAotICAgIEBwYXJhbSB7U3RyaW5nfSBk
ZXBlbmRlbnRLZXkKLSAgICBAcmV0dXJuIHtFbWJlci5Db21wdXRlZFByb3BlcnR5fSBjb21wdXRl
ZCBwcm9wZXJ0eSB3aGljaCBjcmVhdGVzIGEKLSAgICBvbmUgd2F5IGNvbXB1dGVkIHByb3BlcnR5
IHRvIHRoZSBvcmlnaW5hbCB2YWx1ZSBmb3IgcHJvcGVydHkuCi0gICAgQHNpbmNlIDEuNS4wCi0g
ICAgQHB1YmxpYwotICAqLwotCi0gIGZ1bmN0aW9uIHJlYWRPbmx5KGRlcGVuZGVudEtleSkgewot
ICAgIHJldHVybiBfZW1iZXJNZXRhbEFsaWFzLmRlZmF1bHQoZGVwZW5kZW50S2V5KS5yZWFkT25s
eSgpOwotICB9Ci0KLSAgLyoqCi0gICAgQ3JlYXRlcyBhIG5ldyBwcm9wZXJ0eSB0aGF0IGlzIGFu
IGFsaWFzIGZvciBhbm90aGVyIHByb3BlcnR5Ci0gICAgb24gYW4gb2JqZWN0LiBDYWxscyB0byBg
Z2V0YCBvciBgc2V0YCB0aGlzIHByb3BlcnR5IGJlaGF2ZSBhcwotICAgIHRob3VnaCB0aGV5IHdl
cmUgY2FsbGVkIG9uIHRoZSBvcmlnaW5hbCBwcm9wZXJ0eSwgYnV0IGFsc28KLSAgICBwcmludCBh
IGRlcHJlY2F0aW9uIHdhcm5pbmcuCi0gIAotICAgIEBtZXRob2QgZGVwcmVjYXRpbmdBbGlhcwot
ICAgIEBmb3IgRW1iZXIuY29tcHV0ZWQKLSAgICBAcGFyYW0ge1N0cmluZ30gZGVwZW5kZW50S2V5
Ci0gICAgQHJldHVybiB7RW1iZXIuQ29tcHV0ZWRQcm9wZXJ0eX0gY29tcHV0ZWQgcHJvcGVydHkg
d2hpY2ggY3JlYXRlcyBhbgotICAgIGFsaWFzIHdpdGggYSBkZXByZWNhdGlvbiB0byB0aGUgb3Jp
Z2luYWwgdmFsdWUgZm9yIHByb3BlcnR5LgotICAgIEBzaW5jZSAxLjcuMAotICAgIEBwdWJsaWMK
LSAgKi8KLQotICBmdW5jdGlvbiBkZXByZWNhdGluZ0FsaWFzKGRlcGVuZGVudEtleSwgb3B0aW9u
cykgewotICAgIHJldHVybiBfZW1iZXJNZXRhbENvbXB1dGVkLmNvbXB1dGVkKGRlcGVuZGVudEtl
eSwgewotICAgICAgZ2V0OiBmdW5jdGlvbiAoa2V5KSB7Ci0gICAgICAgIF9lbWJlck1ldGFsRGVi
dWcuZGVwcmVjYXRlKCdVc2FnZSBvZiBgJyArIGtleSArICdgIGlzIGRlcHJlY2F0ZWQsIHVzZSBg
JyArIGRlcGVuZGVudEtleSArICdgIGluc3RlYWQuJywgZmFsc2UsIG9wdGlvbnMpOwotICAgICAg
ICByZXR1cm4gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsIGRlcGVuZGVudEtleSk7
Ci0gICAgICB9LAotICAgICAgc2V0OiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkgewotICAgICAgICBf
ZW1iZXJNZXRhbERlYnVnLmRlcHJlY2F0ZSgnVXNhZ2Ugb2YgYCcgKyBrZXkgKyAnYCBpcyBkZXBy
ZWNhdGVkLCB1c2UgYCcgKyBkZXBlbmRlbnRLZXkgKyAnYCBpbnN0ZWFkLicsIGZhbHNlLCBvcHRp
b25zKTsKLSAgICAgICAgX2VtYmVyTWV0YWxQcm9wZXJ0eV9zZXQuc2V0KHRoaXMsIGRlcGVuZGVu
dEtleSwgdmFsdWUpOwotICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgICB9Ci0gICAgfSk7Ci0g
IH0KLX0pOwotZW5pZmVkKCdlbWJlci1tZXRhbC9jb3JlJywgWydleHBvcnRzJywgJ3JlcXVpcmUn
XSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9yZXF1aXJlKSB7Ci0gIC8qZ2xvYmFscyBFbWJlcjp0cnVl
LEVOVixFbWJlckVOViAqLwotCi0gICd1c2Ugc3RyaWN0JzsKLQotICAvKioKLSAgQG1vZHVsZSBl
bWJlcgotICBAc3VibW9kdWxlIGVtYmVyLW1ldGFsCi0gICovCi0KLSAgLyoqCi0gICAgVGhpcyBu
YW1lc3BhY2UgY29udGFpbnMgYWxsIEVtYmVyIG1ldGhvZHMgYW5kIGZ1bmN0aW9ucy4gRnV0dXJl
IHZlcnNpb25zIG9mCi0gICAgRW1iZXIgbWF5IG92ZXJ3cml0ZSB0aGlzIG5hbWVzcGFjZSBhbmQg
dGhlcmVmb3JlLCB5b3Ugc2hvdWxkIGF2b2lkIGFkZGluZyBhbnkKLSAgICBuZXcgcHJvcGVydGll
cy4KLSAgCi0gICAgQXQgdGhlIGhlYXJ0IG9mIEVtYmVyIGlzIEVtYmVyLVJ1bnRpbWUsIGEgc2V0
IG9mIGNvcmUgZnVuY3Rpb25zIHRoYXQgcHJvdmlkZQotICAgIGNyb3NzLXBsYXRmb3JtIGNvbXBh
dGliaWxpdHkgYW5kIG9iamVjdCBwcm9wZXJ0eSBvYnNlcnZpbmcuICBFbWJlci1SdW50aW1lIGlz
Ci0gICAgc21hbGwgYW5kIHBlcmZvcm1hbmNlLWZvY3VzZWQgc28geW91IGNhbiB1c2UgaXQgYWxv
bmdzaWRlIG90aGVyCi0gICAgY3Jvc3MtcGxhdGZvcm0gbGlicmFyaWVzIHN1Y2ggYXMgalF1ZXJ5
LiBGb3IgbW9yZSBkZXRhaWxzLCBzZWUKLSAgICBbRW1iZXItUnVudGltZV0oaHR0cDovL2VtYmVy
anMuY29tL2FwaS9tb2R1bGVzL2VtYmVyLXJ1bnRpbWUuaHRtbCkuCi0gIAotICAgIEBjbGFzcyBF
bWJlcgotICAgIEBzdGF0aWMKLSAgICBAdmVyc2lvbiAyLjYuMgotICAgIEBwdWJsaWMKLSAgKi8K
LQotICBpZiAoJ3VuZGVmaW5lZCcgPT09IHR5cGVvZiBFbWJlcikgewotICAgIC8vIENyZWF0ZSBj
b3JlIG9iamVjdC4gTWFrZSBpdCBhY3QgbGlrZSBhbiBpbnN0YW5jZSBvZiBFbWJlci5OYW1lc3Bh
Y2Ugc28gdGhhdAotICAgIC8vIG9iamVjdHMgYXNzaWduZWQgdG8gaXQgYXJlIGdpdmVuIGEgc2Fu
ZSBzdHJpbmcgcmVwcmVzZW50YXRpb24uCi0gICAgRW1iZXIgPSB7fTsKLSAgfQotCi0gIC8vIERl
ZmF1bHQgaW1wb3J0cywgZXhwb3J0cyBhbmQgbG9va3VwIHRvIHRoZSBnbG9iYWwgb2JqZWN0Owot
ICB2YXIgZ2xvYmFsID0gbWFpbkNvbnRleHQgfHwge307IC8vIGpzaGludCBpZ25vcmU6bGluZQot
ICBFbWJlci5pbXBvcnRzID0gRW1iZXIuaW1wb3J0cyB8fCBnbG9iYWw7Ci0gIEVtYmVyLmxvb2t1
cCA9IEVtYmVyLmxvb2t1cCB8fCBnbG9iYWw7Ci0gIHZhciBlbUV4cG9ydHMgPSBFbWJlci5leHBv
cnRzID0gRW1iZXIuZXhwb3J0cyB8fCBnbG9iYWw7Ci0KLSAgLy8gYWxpYXNlcyBuZWVkZWQgdG8g
a2VlcCBtaW5pZmllcnMgZnJvbSByZW1vdmluZyB0aGUgZ2xvYmFsIGNvbnRleHQKLSAgZW1FeHBv
cnRzLkVtID0gZW1FeHBvcnRzLkVtYmVyID0gRW1iZXI7Ci0KLSAgLy8gTWFrZSBzdXJlIHRoZXNl
IGFyZSBzZXQgd2hldGhlciBFbWJlciB3YXMgYWxyZWFkeSBkZWZpbmVkIG9yIG5vdAotCi0gIEVt
YmVyLmlzTmFtZXNwYWNlID0gdHJ1ZTsKLQotICBFbWJlci50b1N0cmluZyA9IGZ1bmN0aW9uICgp
IHsKLSAgICByZXR1cm4gJ0VtYmVyJzsKLSAgfTsKLQotICAvLyBUaGUgZGVidWcgZnVuY3Rpb25z
IGFyZSBleHBvcnRlZCB0byBnbG9iYWxzIHdpdGggYHJlcXVpcmVgIHRvCi0gIC8vIHByZXZlbnQg
YmFiZWwtcGx1Z2luLWZpbHRlci1pbXBvcnRzIGZyb20gcmVtb3ZpbmcgdGhlbS4KLSAgdmFyIGRl
YnVnTW9kdWxlID0gX3JlcXVpcmUuZGVmYXVsdCgnZW1iZXItbWV0YWwvZGVidWcnKTsKLSAgRW1i
ZXIuYXNzZXJ0ID0gZGVidWdNb2R1bGUuYXNzZXJ0OwotICBFbWJlci53YXJuID0gZGVidWdNb2R1
bGUud2FybjsKLSAgRW1iZXIuZGVidWcgPSBkZWJ1Z01vZHVsZS5kZWJ1ZzsKLSAgRW1iZXIuZGVw
cmVjYXRlID0gZGVidWdNb2R1bGUuZGVwcmVjYXRlOwotICBFbWJlci5kZXByZWNhdGVGdW5jID0g
ZGVidWdNb2R1bGUuZGVwcmVjYXRlRnVuYzsKLSAgRW1iZXIucnVuSW5EZWJ1ZyA9IGRlYnVnTW9k
dWxlLnJ1bkluRGVidWc7Ci0KLSAgLyoqCi0gICAgVGhlIHNlbWFudGljIHZlcnNpb24uCi0gIAot
ICAgIEBwcm9wZXJ0eSBWRVJTSU9OCi0gICAgQHR5cGUgU3RyaW5nCi0gICAgQGRlZmF1bHQgJzIu
Ni4yJwotICAgIEBzdGF0aWMKLSAgICBAcHVibGljCi0gICovCi0gIEVtYmVyLlZFUlNJT04gPSAn
Mi42LjInOwotCi0gIC8qKgotICAgIFRoZSBoYXNoIG9mIGVudmlyb25tZW50IHZhcmlhYmxlcyB1
c2VkIHRvIGNvbnRyb2wgdmFyaW91cyBjb25maWd1cmF0aW9uCi0gICAgc2V0dGluZ3MuIFRvIHNw
ZWNpZnkgeW91ciBvd24gb3Igb3ZlcnJpZGUgZGVmYXVsdCBzZXR0aW5ncywgYWRkIHRoZQotICAg
IGRlc2lyZWQgcHJvcGVydGllcyB0byBhIGdsb2JhbCBoYXNoIG5hbWVkIGBFbWJlckVOVmAgKG9y
IGBFTlZgIGZvcgotICAgIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggZWFybGllciB2ZXJz
aW9ucyBvZiBFbWJlcikuIFRoZSBgRW1iZXJFTlZgCi0gICAgaGFzaCBtdXN0IGJlIGNyZWF0ZWQg
YmVmb3JlIGxvYWRpbmcgRW1iZXIuCi0gIAotICAgIEBwcm9wZXJ0eSBFTlYKLSAgICBAdHlwZSBP
YmplY3QKLSAgICBAcHVibGljCi0gICovCi0KLSAgaWYgKEVtYmVyLkVOVikgewotICAgIC8vIGRv
IG5vdGhpbmcgaWYgRW1iZXIuRU5WIGlzIGFscmVhZHkgc2V0dXAKLSAgICBFbWJlci5hc3NlcnQo
J0VtYmVyLkVOViBzaG91bGQgYmUgYW4gb2JqZWN0LicsICdvYmplY3QnICE9PSB0eXBlb2YgRW1i
ZXIuRU5WKTsKLSAgfSBlbHNlIGlmICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mIEVtYmVyRU5WKSB7
Ci0gICAgRW1iZXIuRU5WID0gRW1iZXJFTlY7Ci0gIH0gZWxzZSBpZiAoJ3VuZGVmaW5lZCcgIT09
IHR5cGVvZiBFTlYpIHsKLSAgICBFbWJlci5FTlYgPSBFTlY7Ci0gIH0gZWxzZSB7Ci0gICAgRW1i
ZXIuRU5WID0ge307Ci0gIH0KLQotICAvLyBFTkFCTEVfQUxMX0ZFQVRVUkVTIHdhcyBkb2N1bWVu
dGVkLCBidXQgeW91IGNhbid0IGFjdHVhbGx5IGVuYWJsZSBub24gb3B0aW9uYWwgZmVhdHVyZXMu
Ci0gIGlmIChFbWJlci5FTlYuRU5BQkxFX0FMTF9GRUFUVVJFUykgewotICAgIEVtYmVyLkVOVi5F
TkFCTEVfT1BUSU9OQUxfRkVBVFVSRVMgPSBFbWJlci5FTlYuRU5BQkxFX0FMTF9GRUFUVVJFUzsK
LSAgfQotCi0gIEVtYmVyLmNvbmZpZyA9IEVtYmVyLmNvbmZpZyB8fCB7fTsKLQotICAvLyAuLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0g
IC8vIEJPT1RTVFJBUAotICAvLwotCi0gIC8qKgotICAgIERldGVybWluZXMgd2hldGhlciBFbWJl
ciBzaG91bGQgYWRkIHRvIGBBcnJheWAsIGBGdW5jdGlvbmAsIGFuZCBgU3RyaW5nYAotICAgIG5h
dGl2ZSBvYmplY3QgcHJvdG90eXBlcywgYSBmZXcgZXh0cmEgbWV0aG9kcyBpbiBvcmRlciB0byBw
cm92aWRlIGEgbW9yZQotICAgIGZyaWVuZGx5IEFQSS4KLSAgCi0gICAgV2UgZ2VuZXJhbGx5IHJl
Y29tbWVuZCBsZWF2aW5nIHRoaXMgb3B0aW9uIHNldCB0byB0cnVlIGhvd2V2ZXIsIGlmIHlvdSBu
ZWVkCi0gICAgdG8gdHVybiBpdCBvZmYsIHlvdSBjYW4gYWRkIHRoZSBjb25maWd1cmF0aW9uIHBy
b3BlcnR5Ci0gICAgYEVYVEVORF9QUk9UT1RZUEVTYCB0byBgRW1iZXJFTlZgIGFuZCBzZXQgaXQg
dG8gYGZhbHNlYC4KLSAgCi0gICAgTm90ZSwgd2hlbiBkaXNhYmxlZCAodGhlIGRlZmF1bHQgY29u
ZmlndXJhdGlvbiBmb3IgRW1iZXIgQWRkb25zKSwgeW91IHdpbGwKLSAgICBpbnN0ZWFkIGhhdmUg
dG8gYWNjZXNzIGFsbCBtZXRob2RzIGFuZCBmdW5jdGlvbnMgZnJvbSB0aGUgRW1iZXIKLSAgICBu
YW1lc3BhY2UuCi0gIAotICAgIEBwcm9wZXJ0eSBFWFRFTkRfUFJPVE9UWVBFUwotICAgIEB0eXBl
IEJvb2xlYW4KLSAgICBAZGVmYXVsdCB0cnVlCi0gICAgQGZvciBFbWJlcgotICAgIEBwdWJsaWMK
LSAgKi8KLSAgRW1iZXIuRVhURU5EX1BST1RPVFlQRVMgPSBFbWJlci5FTlYuRVhURU5EX1BST1RP
VFlQRVM7Ci0KLSAgaWYgKHR5cGVvZiBFbWJlci5FWFRFTkRfUFJPVE9UWVBFUyA9PT0gJ3VuZGVm
aW5lZCcpIHsKLSAgICBFbWJlci5FWFRFTkRfUFJPVE9UWVBFUyA9IHRydWU7Ci0gIH0KLQotICAv
KioKLSAgICBUaGUgYExPR19TVEFDS1RSQUNFX09OX0RFUFJFQ0FUSU9OYCBwcm9wZXJ0eSwgd2hl
biB0cnVlLCB0ZWxscyBFbWJlciB0byBsb2cKLSAgICBhIGZ1bGwgc3RhY2sgdHJhY2UgZHVyaW5n
IGRlcHJlY2F0aW9uIHdhcm5pbmdzLgotICAKLSAgICBAcHJvcGVydHkgTE9HX1NUQUNLVFJBQ0Vf
T05fREVQUkVDQVRJT04KLSAgICBAdHlwZSBCb29sZWFuCi0gICAgQGRlZmF1bHQgdHJ1ZQotICAg
IEBwdWJsaWMKLSAgKi8KLSAgRW1iZXIuTE9HX1NUQUNLVFJBQ0VfT05fREVQUkVDQVRJT04gPSBF
bWJlci5FTlYuTE9HX1NUQUNLVFJBQ0VfT05fREVQUkVDQVRJT04gIT09IGZhbHNlOwotCi0gIC8q
KgotICAgIFRoZSBgTE9HX1ZFUlNJT05gIHByb3BlcnR5LCB3aGVuIHRydWUsIHRlbGxzIEVtYmVy
IHRvIGxvZyB2ZXJzaW9ucyBvZiBhbGwKLSAgICBkZXBlbmRlbnQgbGlicmFyaWVzIGluIHVzZS4K
LSAgCi0gICAgQHByb3BlcnR5IExPR19WRVJTSU9OCi0gICAgQHR5cGUgQm9vbGVhbgotICAgIEBk
ZWZhdWx0IHRydWUKLSAgICBAcHVibGljCi0gICovCi0gIEVtYmVyLkxPR19WRVJTSU9OID0gRW1i
ZXIuRU5WLkxPR19WRVJTSU9OID09PSBmYWxzZSA/IGZhbHNlIDogdHJ1ZTsKLQotICAvKioKLSAg
ICBBbiBlbXB0eSBmdW5jdGlvbiB1c2VmdWwgZm9yIHNvbWUgb3BlcmF0aW9ucy4gQWx3YXlzIHJl
dHVybnMgYHRoaXNgLgotICAKLSAgICBAbWV0aG9kIEsKLSAgICBAcmV0dXJuIHtPYmplY3R9Ci0g
ICAgQHB1YmxpYwotICAqLwotICBmdW5jdGlvbiBLKCkgewotICAgIHJldHVybiB0aGlzOwotICB9
Ci0gIGV4cG9ydHMuSyA9IEs7Ci0KLSAgRW1iZXIuSyA9IEs7Ci0gIC8vVE9ETzogRVM2IEdMT0JB
TCBUT0RPCi0KLSAgZXhwb3J0cy5kZWZhdWx0ID0gRW1iZXI7Ci19KTsKLWVuaWZlZCgiZW1iZXIt
bWV0YWwvZGVidWciLCBbImV4cG9ydHMiXSwgZnVuY3Rpb24gKGV4cG9ydHMpIHsKLSAgInVzZSBz
dHJpY3QiOwotCi0gIGV4cG9ydHMuZ2V0RGVidWdGdW5jdGlvbiA9IGdldERlYnVnRnVuY3Rpb247
Ci0gIGV4cG9ydHMuc2V0RGVidWdGdW5jdGlvbiA9IHNldERlYnVnRnVuY3Rpb247Ci0gIGV4cG9y
dHMuYXNzZXJ0ID0gYXNzZXJ0OwotICBleHBvcnRzLmluZm8gPSBpbmZvOwotICBleHBvcnRzLndh
cm4gPSB3YXJuOwotICBleHBvcnRzLmRlYnVnID0gZGVidWc7Ci0gIGV4cG9ydHMuZGVwcmVjYXRl
ID0gZGVwcmVjYXRlOwotICBleHBvcnRzLmRlcHJlY2F0ZUZ1bmMgPSBkZXByZWNhdGVGdW5jOwot
ICBleHBvcnRzLnJ1bkluRGVidWcgPSBydW5JbkRlYnVnOwotICBleHBvcnRzLmRlYnVnU2VhbCA9
IGRlYnVnU2VhbDsKLSAgdmFyIGRlYnVnRnVuY3Rpb25zID0gewotICAgIGFzc2VydDogZnVuY3Rp
b24gKCkge30sCi0gICAgaW5mbzogZnVuY3Rpb24gKCkge30sCi0gICAgd2FybjogZnVuY3Rpb24g
KCkge30sCi0gICAgZGVidWc6IGZ1bmN0aW9uICgpIHt9LAotICAgIGRlcHJlY2F0ZTogZnVuY3Rp
b24gKCkge30sCi0gICAgZGVwcmVjYXRlRnVuYzogZnVuY3Rpb24gKCkgewotICAgICAgZm9yICh2
YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShfbGVuKSwgX2tleSA9IDA7
IF9rZXkgPCBfbGVuOyBfa2V5KyspIHsKLSAgICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tf
a2V5XTsKLSAgICAgIH0KLQotICAgICAgcmV0dXJuIGFyZ3NbYXJncy5sZW5ndGggLSAxXTsKLSAg
ICB9LAotICAgIHJ1bkluRGVidWc6IGZ1bmN0aW9uICgpIHt9LAotICAgIGRlYnVnU2VhbDogZnVu
Y3Rpb24gKCkge30KLSAgfTsKLQotICBleHBvcnRzLmRlYnVnRnVuY3Rpb25zID0gZGVidWdGdW5j
dGlvbnM7Ci0KLSAgZnVuY3Rpb24gZ2V0RGVidWdGdW5jdGlvbihuYW1lKSB7Ci0gICAgcmV0dXJu
IGRlYnVnRnVuY3Rpb25zW25hbWVdOwotICB9Ci0KLSAgZnVuY3Rpb24gc2V0RGVidWdGdW5jdGlv
bihuYW1lLCBmbikgewotICAgIGRlYnVnRnVuY3Rpb25zW25hbWVdID0gZm47Ci0gIH0KLQotICBm
dW5jdGlvbiBhc3NlcnQoKSB7Ci0gICAgcmV0dXJuIGRlYnVnRnVuY3Rpb25zLmFzc2VydC5hcHBs
eSh1bmRlZmluZWQsIGFyZ3VtZW50cyk7Ci0gIH0KLQotICBmdW5jdGlvbiBpbmZvKCkgewotICAg
IHJldHVybiBkZWJ1Z0Z1bmN0aW9ucy5pbmZvLmFwcGx5KHVuZGVmaW5lZCwgYXJndW1lbnRzKTsK
LSAgfQotCi0gIGZ1bmN0aW9uIHdhcm4oKSB7Ci0gICAgcmV0dXJuIGRlYnVnRnVuY3Rpb25zLndh
cm4uYXBwbHkodW5kZWZpbmVkLCBhcmd1bWVudHMpOwotICB9Ci0KLSAgZnVuY3Rpb24gZGVidWco
KSB7Ci0gICAgcmV0dXJuIGRlYnVnRnVuY3Rpb25zLmRlYnVnLmFwcGx5KHVuZGVmaW5lZCwgYXJn
dW1lbnRzKTsKLSAgfQotCi0gIGZ1bmN0aW9uIGRlcHJlY2F0ZSgpIHsKLSAgICByZXR1cm4gZGVi
dWdGdW5jdGlvbnMuZGVwcmVjYXRlLmFwcGx5KHVuZGVmaW5lZCwgYXJndW1lbnRzKTsKLSAgfQot
Ci0gIGZ1bmN0aW9uIGRlcHJlY2F0ZUZ1bmMoKSB7Ci0gICAgcmV0dXJuIGRlYnVnRnVuY3Rpb25z
LmRlcHJlY2F0ZUZ1bmMuYXBwbHkodW5kZWZpbmVkLCBhcmd1bWVudHMpOwotICB9Ci0KLSAgZnVu
Y3Rpb24gcnVuSW5EZWJ1ZygpIHsKLSAgICByZXR1cm4gZGVidWdGdW5jdGlvbnMucnVuSW5EZWJ1
Zy5hcHBseSh1bmRlZmluZWQsIGFyZ3VtZW50cyk7Ci0gIH0KLQotICBmdW5jdGlvbiBkZWJ1Z1Nl
YWwoKSB7Ci0gICAgcmV0dXJuIGRlYnVnRnVuY3Rpb25zLmRlYnVnU2VhbC5hcHBseSh1bmRlZmlu
ZWQsIGFyZ3VtZW50cyk7Ci0gIH0KLX0pOwotZW5pZmVkKCdlbWJlci1tZXRhbC9kZXBlbmRlbnRf
a2V5cycsIFsnZXhwb3J0cycsICdlbWJlci1tZXRhbC93YXRjaGluZyddLCBmdW5jdGlvbiAoZXhw
b3J0cywgX2VtYmVyTWV0YWxXYXRjaGluZykgewotICAnbm8gdXNlIHN0cmljdCc7Ci0gIC8vIFJl
bW92ZSAidXNlIHN0cmljdCI7IGZyb20gdHJhbnNwaWxlZCBtb2R1bGUgdW50aWwKLSAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzODAzOCBpcyBmaXhlZAotCi0g
IGV4cG9ydHMuYWRkRGVwZW5kZW50S2V5cyA9IGFkZERlcGVuZGVudEtleXM7Ci0gIGV4cG9ydHMu
cmVtb3ZlRGVwZW5kZW50S2V5cyA9IHJlbW92ZURlcGVuZGVudEtleXM7Ci0KLSAgLyoqCi0gIEBt
b2R1bGUgZW1iZXIKLSAgQHN1Ym1vZHVsZSBlbWJlci1tZXRhbAotICAqLwotCi0gIC8vIC4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLSAg
Ly8gREVQRU5ERU5UIEtFWVMKLSAgLy8KLQotICBmdW5jdGlvbiBhZGREZXBlbmRlbnRLZXlzKGRl
c2MsIG9iaiwga2V5TmFtZSwgbWV0YSkgewotICAgIC8vIHRoZSBkZXNjcmlwdG9yIGhhcyBhIGxp
c3Qgb2YgZGVwZW5kZW50IGtleXMsIHNvCi0gICAgLy8gYWRkIGFsbCBvZiBpdHMgZGVwZW5kZW50
IGtleXMuCi0gICAgdmFyIGlkeCwgbGVuLCBkZXBLZXk7Ci0gICAgdmFyIGRlcEtleXMgPSBkZXNj
Ll9kZXBlbmRlbnRLZXlzOwotICAgIGlmICghZGVwS2V5cykgewotICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIGZvciAoaWR4ID0gMCwgbGVuID0gZGVwS2V5cy5sZW5ndGg7IGlkeCA8IGxlbjsg
aWR4KyspIHsKLSAgICAgIGRlcEtleSA9IGRlcEtleXNbaWR4XTsKLSAgICAgIC8vIEluY3JlbWVu
dCB0aGUgbnVtYmVyIG9mIHRpbWVzIGRlcEtleSBkZXBlbmRzIG9uIGtleU5hbWUuCi0gICAgICBt
ZXRhLndyaXRlRGVwcyhkZXBLZXksIGtleU5hbWUsIChtZXRhLnBlZWtEZXBzKGRlcEtleSwga2V5
TmFtZSkgfHwgMCkgKyAxKTsKLSAgICAgIC8vIFdhdGNoIHRoZSBkZXBLZXkKLSAgICAgIF9lbWJl
ck1ldGFsV2F0Y2hpbmcud2F0Y2gob2JqLCBkZXBLZXksIG1ldGEpOwotICAgIH0KLSAgfQotCi0g
IGZ1bmN0aW9uIHJlbW92ZURlcGVuZGVudEtleXMoZGVzYywgb2JqLCBrZXlOYW1lLCBtZXRhKSB7
Ci0gICAgLy8gdGhlIGRlc2NyaXB0b3IgaGFzIGEgbGlzdCBvZiBkZXBlbmRlbnQga2V5cywgc28K
LSAgICAvLyByZW1vdmUgYWxsIG9mIGl0cyBkZXBlbmRlbnQga2V5cy4KLSAgICB2YXIgZGVwS2V5
cyA9IGRlc2MuX2RlcGVuZGVudEtleXM7Ci0gICAgdmFyIGlkeCwgbGVuLCBkZXBLZXk7Ci0gICAg
aWYgKCFkZXBLZXlzKSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZm9yIChpZHggPSAw
LCBsZW4gPSBkZXBLZXlzLmxlbmd0aDsgaWR4IDwgbGVuOyBpZHgrKykgewotICAgICAgZGVwS2V5
ID0gZGVwS2V5c1tpZHhdOwotICAgICAgLy8gRGVjcmVtZW50IHRoZSBudW1iZXIgb2YgdGltZXMg
ZGVwS2V5IGRlcGVuZHMgb24ga2V5TmFtZS4KLSAgICAgIG1ldGEud3JpdGVEZXBzKGRlcEtleSwg
a2V5TmFtZSwgKG1ldGEucGVla0RlcHMoZGVwS2V5LCBrZXlOYW1lKSB8fCAwKSAtIDEpOwotICAg
ICAgLy8gVW53YXRjaCB0aGUgZGVwS2V5Ci0gICAgICBfZW1iZXJNZXRhbFdhdGNoaW5nLnVud2F0
Y2gob2JqLCBkZXBLZXksIG1ldGEpOwotICAgIH0KLSAgfQotfSk7Ci1lbmlmZWQoJ2VtYmVyLW1l
dGFsL2RlcHJlY2F0ZV9wcm9wZXJ0eScsIFsnZXhwb3J0cycsICdlbWJlci1tZXRhbC9kZWJ1Zycs
ICdlbWJlci1tZXRhbC9wcm9wZXJ0eV9nZXQnLCAnZW1iZXItbWV0YWwvcHJvcGVydHlfc2V0J10s
IGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbERlYnVnLCBfZW1iZXJNZXRhbFByb3BlcnR5
X2dldCwgX2VtYmVyTWV0YWxQcm9wZXJ0eV9zZXQpIHsKLSAgLyoqCi0gIEBtb2R1bGUgZW1iZXIK
LSAgQHN1Ym1vZHVsZSBlbWJlci1tZXRhbAotICAqLwotCi0gICd1c2Ugc3RyaWN0JzsKLQotICBl
eHBvcnRzLmRlcHJlY2F0ZVByb3BlcnR5ID0gZGVwcmVjYXRlUHJvcGVydHk7Ci0KLSAgLyoqCi0g
ICAgVXNlZCBpbnRlcm5hbGx5IHRvIGFsbG93IGNoYW5naW5nIHByb3BlcnRpZXMgaW4gYSBiYWNr
d2FyZHMgY29tcGF0aWJsZSB3YXksIGFuZCBwcmludCBhIGhlbHBmdWwKLSAgICBkZXByZWNhdGlv
biB3YXJuaW5nLgotICAKLSAgICBAbWV0aG9kIGRlcHJlY2F0ZVByb3BlcnR5Ci0gICAgQHBhcmFt
IHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGFkZCB0aGUgZGVwcmVjYXRlZCBwcm9wZXJ0
eSB0by4KLSAgICBAcGFyYW0ge1N0cmluZ30gZGVwcmVjYXRlZEtleSBUaGUgcHJvcGVydHkgdG8g
YWRkIChhbmQgcHJpbnQgZGVwcmVjYXRpb24gd2FybmluZ3MgdXBvbiBhY2Nlc3NpbmcpLgotICAg
IEBwYXJhbSB7U3RyaW5nfSBuZXdLZXkgVGhlIHByb3BlcnR5IHRoYXQgd2lsbCBiZSBhbGlhc2Vk
LgotICAgIEBwcml2YXRlCi0gICAgQHNpbmNlIDEuNy4wCi0gICovCi0KLSAgZnVuY3Rpb24gZGVw
cmVjYXRlUHJvcGVydHkob2JqZWN0LCBkZXByZWNhdGVkS2V5LCBuZXdLZXksIG9wdGlvbnMpIHsK
LSAgICBmdW5jdGlvbiBfZGVwcmVjYXRlKCkgewotICAgICAgX2VtYmVyTWV0YWxEZWJ1Zy5kZXBy
ZWNhdGUoJ1VzYWdlIG9mIGAnICsgZGVwcmVjYXRlZEtleSArICdgIGlzIGRlcHJlY2F0ZWQsIHVz
ZSBgJyArIG5ld0tleSArICdgIGluc3RlYWQuJywgZmFsc2UsIG9wdGlvbnMpOwotICAgIH0KLQot
ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmplY3QsIGRlcHJlY2F0ZWRLZXksIHsKLSAgICAg
IGNvbmZpZ3VyYWJsZTogdHJ1ZSwKLSAgICAgIGVudW1lcmFibGU6IGZhbHNlLAotICAgICAgc2V0
OiBmdW5jdGlvbiAodmFsdWUpIHsKLSAgICAgICAgX2RlcHJlY2F0ZSgpOwotICAgICAgICBfZW1i
ZXJNZXRhbFByb3BlcnR5X3NldC5zZXQodGhpcywgbmV3S2V5LCB2YWx1ZSk7Ci0gICAgICB9LAot
ICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7Ci0gICAgICAgIF9kZXByZWNhdGUoKTsKLSAgICAgICAg
cmV0dXJuIF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0aGlzLCBuZXdLZXkpOwotICAgICAg
fQotICAgIH0pOwotICB9Ci19KTsKLWVuaWZlZCgnZW1iZXItbWV0YWwvZGljdGlvbmFyeScsIFsn
ZXhwb3J0cycsICdlbWJlci1tZXRhbC9lbXB0eV9vYmplY3QnXSwgZnVuY3Rpb24gKGV4cG9ydHMs
IF9lbWJlck1ldGFsRW1wdHlfb2JqZWN0KSB7Ci0gICd1c2Ugc3RyaWN0JzsKLQotICBleHBvcnRz
LmRlZmF1bHQgPSBtYWtlRGljdGlvbmFyeTsKLQotICAvLyB0aGUgZGVsZXRlIGlzIG1lYW50IHRv
IGhpbnQgYXQgcnVudGltZXMgdGhhdCB0aGlzIG9iamVjdCBzaG91bGQgcmVtYWluIGluCi0gIC8v
IGRpY3Rpb25hcnkgbW9kZS4gVGhpcyBpcyBjbGVhcmx5IGEgcnVudGltZSBzcGVjaWZpYyBoYWNr
LCBidXQgY3VycmVudGx5IGl0Ci0gIC8vIGFwcGVhcnMgd29ydGh3aGlsZSBpbiBzb21lIHVzZWNh
c2VzLiBQbGVhc2Ugbm90ZSwgdGhlc2UgZGVsZXRlcyBkbyBpbmNyZWFzZQotICAvLyB0aGUgY29z
dCBvZiBjcmVhdGlvbiBkcmFtYXRpY2FsbHkgb3ZlciBhIHBsYWluIE9iamVjdC5jcmVhdGUuIEFu
ZCBhcyB0aGlzCi0gIC8vIG9ubHkgbWFrZXMgc2Vuc2UgZm9yIGxvbmctbGl2ZWQgZGljdGlvbmFy
aWVzIHRoYXQgYXJlbid0IGluc3RhbnRpYXRlZCBvZnRlbi4KLQotICBmdW5jdGlvbiBtYWtlRGlj
dGlvbmFyeShwYXJlbnQpIHsKLSAgICB2YXIgZGljdDsKLSAgICBpZiAocGFyZW50ID09PSBudWxs
KSB7Ci0gICAgICBkaWN0ID0gbmV3IF9lbWJlck1ldGFsRW1wdHlfb2JqZWN0LmRlZmF1bHQoKTsK
LSAgICB9IGVsc2UgewotICAgICAgZGljdCA9IE9iamVjdC5jcmVhdGUocGFyZW50KTsKLSAgICB9
Ci0gICAgZGljdFsnX2RpY3QnXSA9IG51bGw7Ci0gICAgZGVsZXRlIGRpY3RbJ19kaWN0J107Ci0g
ICAgcmV0dXJuIGRpY3Q7Ci0gIH0KLX0pOwotZW5pZmVkKCJlbWJlci1tZXRhbC9lbXB0eV9vYmpl
Y3QiLCBbImV4cG9ydHMiXSwgZnVuY3Rpb24gKGV4cG9ydHMpIHsKLSAgLy8gVGhpcyBleGlzdHMg
YmVjYXVzZSBgT2JqZWN0LmNyZWF0ZShudWxsKWAgaXMgYWJzdXJkbHkgc2xvdyBjb21wYXJlZAot
ICAvLyB0byBgbmV3IEVtcHR5T2JqZWN0KClgLiBJbiBlaXRoZXIgY2FzZSwgeW91IHdhbnQgYSBu
dWxsIHByb3RvdHlwZQotICAvLyB3aGVuIHlvdSdyZSB0cmVhdGluZyB0aGUgb2JqZWN0IGluc3Rh
bmNlcyBhcyBhcmJpdHJhcnkgZGljdGlvbmFyaWVzCi0gIC8vIGFuZCBkb24ndCB3YW50IHlvdXIg
a2V5cyBjb2xsaWRpbmcgd2l0aCBidWlsZC1pbiBtZXRob2RzIG9uIHRoZQotICAvLyBkZWZhdWx0
IG9iamVjdCBwcm90b3R5cGUuCi0KLSAgInVzZSBzdHJpY3QiOwotCi0gIHZhciBwcm90byA9IE9i
amVjdC5jcmVhdGUobnVsbCwgewotICAgIC8vIHdpdGhvdXQgdGhpcywgd2Ugd2lsbCBhbHdheXMg
c3RpbGwgZW5kIHVwIHdpdGggKG5ldwotICAgIC8vIEVtcHR5T2JqZWN0KCkpLmNvbnN0cnVjdG9y
ID09PSBPYmplY3QKLSAgICBjb25zdHJ1Y3RvcjogewotICAgICAgdmFsdWU6IHVuZGVmaW5lZCwK
LSAgICAgIGVudW1lcmFibGU6IGZhbHNlLAotICAgICAgd3JpdGFibGU6IHRydWUKLSAgICB9Ci0g
IH0pOwotCi0gIGZ1bmN0aW9uIEVtcHR5T2JqZWN0KCkge30KLSAgRW1wdHlPYmplY3QucHJvdG90
eXBlID0gcHJvdG87Ci0gIGV4cG9ydHMuZGVmYXVsdCA9IEVtcHR5T2JqZWN0OwotfSk7Ci1lbmlm
ZWQoJ2VtYmVyLW1ldGFsL2Vudmlyb25tZW50JywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFsL2Nv
cmUnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1ldGFsQ29yZSkgewotICAndXNlIHN0cmlj
dCc7Ci0KLSAgLyoKLSAgICBFbWJlciBjYW4gcnVuIGluIG1hbnkgZGlmZmVyZW50IGVudmlyb25t
ZW50cywgaW5jbHVkaW5nIGVudmlyb25tZW50cyBsaWtlCi0gICAgTm9kZS5qcyB3aGVyZSB0aGUg
RE9NIGlzIHVuYXZhaWxhYmxlLiBUaGlzIG9iamVjdCBzZXJ2ZXMgYXMgYW4gYWJzdHJhY3Rpb24K
LSAgICBvdmVyIHRoZSBicm93c2VyIGZlYXR1cmVzIHRoYXQgRW1iZXIgcmVsaWVzIG9uLCBzbyB0
aGF0IGNvZGUgZG9lcyBub3QKLSAgICBleHBsb2RlIHdoZW4gdHJ5aW5nIHRvIGJvb3QgaW4gYW4g
ZW52aXJvbm1lbnQgdGhhdCBkb2Vzbid0IGhhdmUgdGhlbS4KLSAgCi0gICAgVGhpcyBpcyBhIHBy
aXZhdGUgYWJzdHJhY3Rpb24uIEluIHRoZSBmdXR1cmUsIHdlIGhvcGUgdGhhdCBvdGhlcgotICAg
IGFic3RyYWN0aW9ucyAobGlrZSBgTG9jYXRpb25gLCBgUmVuZGVyZXJgLCBgZG9tLWhlbHBlcmAp
IGNhbiBmdWxseSBhYnN0cmFjdAotICAgIG92ZXIgdGhlIGRpZmZlcmVuY2VzIGluIGVudmlyb25t
ZW50LgotICAqLwotICB2YXIgZW52aXJvbm1lbnQ7Ci0KLSAgLy8gVGhpcyBjb2RlIGF0dGVtcHRz
IHRvIGF1dG9tYXRpY2FsbHkgZGV0ZWN0IGFuIGVudmlyb25tZW50IHdpdGggRE9NCi0gIC8vIGJ5
IHNlYXJjaGluZyBmb3Igd2luZG93IGFuZCBkb2N1bWVudC5jcmVhdGVFbGVtZW50LiBBbiBlbnZp
cm9ubWVudAotICAvLyB3aXRoIERPTSBtYXkgZGlzYWJsZSB0aGUgRE9NIGZ1bmN0aW9uYWxpdHkg
b2YgRW1iZXIgZXhwbGljaXRseSBieQotICAvLyBkZWZpbmluZyBhIGBkaXNhYmxlQnJvd3NlckVu
dmlyb25tZW50YCBFTlYuCi0gIHZhciBoYXNET00gPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZp
bmVkJyAmJiB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50ICE9PSAndW5kZWZpbmVkJyAmJiAhX2VtYmVyTWV0YWxDb3JlLmRlZmF1
bHQuRU5WLmRpc2FibGVCcm93c2VyRW52aXJvbm1lbnQ7Ci0KLSAgaWYgKGhhc0RPTSkgewotICAg
IGVudmlyb25tZW50ID0gewotICAgICAgaGFzRE9NOiB0cnVlLAotICAgICAgaXNDaHJvbWU6ICEh
d2luZG93LmNocm9tZSAmJiAhd2luZG93Lm9wZXJhLAotICAgICAgaXNGaXJlZm94OiB0eXBlb2Yg
SW5zdGFsbFRyaWdnZXIgIT09ICd1bmRlZmluZWQnLAotICAgICAgaXNQaGFudG9tOiAhIXdpbmRv
dy5jYWxsUGhhbnRvbSwKLSAgICAgIGxvY2F0aW9uOiB3aW5kb3cubG9jYXRpb24sCi0gICAgICBo
aXN0b3J5OiB3aW5kb3cuaGlzdG9yeSwKLSAgICAgIHVzZXJBZ2VudDogd2luZG93Lm5hdmlnYXRv
ci51c2VyQWdlbnQsCi0gICAgICBnbG9iYWw6IHdpbmRvdwotICAgIH07Ci0gIH0gZWxzZSB7Ci0g
ICAgZW52aXJvbm1lbnQgPSB7Ci0gICAgICBoYXNET006IGZhbHNlLAotICAgICAgaXNDaHJvbWU6
IGZhbHNlLAotICAgICAgaXNGaXJlZm94OiBmYWxzZSwKLSAgICAgIGlzUGhhbnRvbTogZmFsc2Us
Ci0gICAgICBsb2NhdGlvbjogbnVsbCwKLSAgICAgIGhpc3Rvcnk6IG51bGwsCi0gICAgICB1c2Vy
QWdlbnQ6ICdMeW54ICh0ZXh0bW9kZSknLAotICAgICAgZ2xvYmFsOiBudWxsCi0gICAgfTsKLSAg
fQotCi0gIGV4cG9ydHMuZGVmYXVsdCA9IGVudmlyb25tZW50OwotfSk7Ci1lbmlmZWQoJ2VtYmVy
LW1ldGFsL2Vycm9yJywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFsL2NvcmUnXSwgZnVuY3Rpb24g
KGV4cG9ydHMsIF9lbWJlck1ldGFsQ29yZSkgewotICAndXNlIHN0cmljdCc7Ci0KLSAgZXhwb3J0
cy5kZWZhdWx0ID0gRW1iZXJFcnJvcjsKLQotICB2YXIgZXJyb3JQcm9wcyA9IFsnZGVzY3JpcHRp
b24nLCAnZmlsZU5hbWUnLCAnbGluZU51bWJlcicsICdtZXNzYWdlJywgJ25hbWUnLCAnbnVtYmVy
JywgJ3N0YWNrJ107Ci0KLSAgLyoqCi0gICAgQSBzdWJjbGFzcyBvZiB0aGUgSmF2YVNjcmlwdCBF
cnJvciBvYmplY3QgZm9yIHVzZSBpbiBFbWJlci4KLSAgCi0gICAgQGNsYXNzIEVycm9yCi0gICAg
QG5hbWVzcGFjZSBFbWJlcgotICAgIEBleHRlbmRzIEVycm9yCi0gICAgQGNvbnN0cnVjdG9yCi0g
ICAgQHB1YmxpYwotICAqLwotCi0gIGZ1bmN0aW9uIEVtYmVyRXJyb3IoKSB7Ci0gICAgdmFyIHRt
cCA9IEVycm9yLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7Ci0KLSAgICAvLyBBZGRzIGEgYHN0YWNr
YCBwcm9wZXJ0eSB0byB0aGUgZ2l2ZW4gZXJyb3Igb2JqZWN0IHRoYXQgd2lsbCB5aWVsZCB0aGUK
LSAgICAvLyBzdGFjayB0cmFjZSBhdCB0aGUgdGltZSBjYXB0dXJlU3RhY2tUcmFjZSB3YXMgY2Fs
bGVkLgotICAgIC8vIFdoZW4gY29sbGVjdGluZyB0aGUgc3RhY2sgdHJhY2UgYWxsIGZyYW1lcyBh
Ym92ZSB0aGUgdG9wbW9zdCBjYWxsCi0gICAgLy8gdG8gdGhpcyBmdW5jdGlvbiwgaW5jbHVkaW5n
IHRoYXQgY2FsbCwgd2lsbCBiZSBsZWZ0IG91dCBvZiB0aGUKLSAgICAvLyBzdGFjayB0cmFjZS4K
LSAgICAvLyBUaGlzIGlzIHVzZWZ1bCBiZWNhdXNlIHdlIGNhbiBoaWRlIEVtYmVyIGltcGxlbWVu
dGF0aW9uIGRldGFpbHMKLSAgICAvLyB0aGF0IGFyZSBub3QgdmVyeSBoZWxwZnVsIGZvciB0aGUg
dXNlci4KLSAgICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpIHsKLSAgICAgIEVycm9yLmNh
cHR1cmVTdGFja1RyYWNlKHRoaXMsIF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0LkVycm9yKTsKLSAg
ICB9Ci0gICAgLy8gVW5mb3J0dW5hdGVseSBlcnJvcnMgYXJlIG5vdCBlbnVtZXJhYmxlIGluIENo
cm9tZSAoYXQgbGVhc3QpLCBzbyBgZm9yIHByb3AgaW4gdG1wYCBkb2Vzbid0IHdvcmsuCi0gICAg
Zm9yICh2YXIgaWR4ID0gMDsgaWR4IDwgZXJyb3JQcm9wcy5sZW5ndGg7IGlkeCsrKSB7Ci0gICAg
ICB0aGlzW2Vycm9yUHJvcHNbaWR4XV0gPSB0bXBbZXJyb3JQcm9wc1tpZHhdXTsKLSAgICB9Ci0g
IH0KLQotICBFbWJlckVycm9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90
eXBlKTsKLX0pOwotZW5pZmVkKCdlbWJlci1tZXRhbC9ldmVudHMnLCBbJ2V4cG9ydHMnLCAnZW1i
ZXItbWV0YWwvZGVidWcnLCAnZW1iZXItbWV0YWwvdXRpbHMnLCAnZW1iZXItbWV0YWwvbWV0YScs
ICdlbWJlci1tZXRhbC9tZXRhX2xpc3RlbmVycyddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVy
TWV0YWxEZWJ1ZywgX2VtYmVyTWV0YWxVdGlscywgX2VtYmVyTWV0YWxNZXRhLCBfZW1iZXJNZXRh
bE1ldGFfbGlzdGVuZXJzKSB7Ci0gICdubyB1c2Ugc3RyaWN0JzsKLSAgLy8gUmVtb3ZlICJ1c2Ug
c3RyaWN0IjsgZnJvbSB0cmFuc3BpbGVkIG1vZHVsZSB1bnRpbAotICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM4MDM4IGlzIGZpeGVkCi0KLSAgLyoqCi0gIEBt
b2R1bGUgZW1iZXIKLSAgQHN1Ym1vZHVsZSBlbWJlci1tZXRhbAotICAqLwotICBleHBvcnRzLmFj
Y3VtdWxhdGVMaXN0ZW5lcnMgPSBhY2N1bXVsYXRlTGlzdGVuZXJzOwotICBleHBvcnRzLmFkZExp
c3RlbmVyID0gYWRkTGlzdGVuZXI7Ci0gIGV4cG9ydHMucmVtb3ZlTGlzdGVuZXIgPSByZW1vdmVM
aXN0ZW5lcjsKLSAgZXhwb3J0cy5zdXNwZW5kTGlzdGVuZXIgPSBzdXNwZW5kTGlzdGVuZXI7Ci0g
IGV4cG9ydHMuc3VzcGVuZExpc3RlbmVycyA9IHN1c3BlbmRMaXN0ZW5lcnM7Ci0gIGV4cG9ydHMu
d2F0Y2hlZEV2ZW50cyA9IHdhdGNoZWRFdmVudHM7Ci0gIGV4cG9ydHMuc2VuZEV2ZW50ID0gc2Vu
ZEV2ZW50OwotICBleHBvcnRzLmhhc0xpc3RlbmVycyA9IGhhc0xpc3RlbmVyczsKLSAgZXhwb3J0
cy5saXN0ZW5lcnNGb3IgPSBsaXN0ZW5lcnNGb3I7Ci0gIGV4cG9ydHMub24gPSBvbjsKLQotICAv
KgotICAgIFRoZSBldmVudCBzeXN0ZW0gdXNlcyBhIHNlcmllcyBvZiBuZXN0ZWQgaGFzaGVzIHRv
IHN0b3JlIGxpc3RlbmVycyBvbiBhbgotICAgIG9iamVjdC4gV2hlbiBhIGxpc3RlbmVyIGlzIHJl
Z2lzdGVyZWQsIG9yIHdoZW4gYW4gZXZlbnQgYXJyaXZlcywgdGhlc2UKLSAgICBoYXNoZXMgYXJl
IGNvbnN1bHRlZCB0byBkZXRlcm1pbmUgd2hpY2ggdGFyZ2V0IGFuZCBhY3Rpb24gcGFpciB0byBp
bnZva2UuCi0gIAotICAgIFRoZSBoYXNoZXMgYXJlIHN0b3JlZCBpbiB0aGUgb2JqZWN0J3MgbWV0
YSBoYXNoLCBhbmQgbG9vayBsaWtlIHRoaXM6Ci0gIAotICAgICAgICAvLyBPYmplY3QncyBtZXRh
IGhhc2gKLSAgICAgICAgewotICAgICAgICAgIGxpc3RlbmVyczogeyAgICAgICAvLyB2YXJpYWJs
ZSBuYW1lOiBgbGlzdGVuZXJTZXRgCi0gICAgICAgICAgICAiZm9vOmNoYW5nZWQiOiBbIC8vIHZh
cmlhYmxlIG5hbWU6IGBhY3Rpb25zYAotICAgICAgICAgICAgICB0YXJnZXQsIG1ldGhvZCwgZmxh
Z3MKLSAgICAgICAgICAgIF0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgCi0gICovCi0KLSAg
ZnVuY3Rpb24gaW5kZXhPZihhcnJheSwgdGFyZ2V0LCBtZXRob2QpIHsKLSAgICB2YXIgaW5kZXgg
PSAtMTsKLSAgICAvLyBoYXNoZXMgYXJlIGFkZGVkIHRvIHRoZSBlbmQgb2YgdGhlIGV2ZW50IGFy
cmF5Ci0gICAgLy8gc28gaXQgbWFrZXMgc2Vuc2UgdG8gc3RhcnQgc2VhcmNoaW5nIGF0IHRoZSBl
bmQKLSAgICAvLyBvZiB0aGUgYXJyYXkgYW5kIHNlYXJjaCBpbiByZXZlcnNlCi0gICAgZm9yICh2
YXIgaSA9IGFycmF5Lmxlbmd0aCAtIDM7IGkgPj0gMDsgaSAtPSAzKSB7Ci0gICAgICBpZiAodGFy
Z2V0ID09PSBhcnJheVtpXSAmJiBtZXRob2QgPT09IGFycmF5W2kgKyAxXSkgewotICAgICAgICBp
bmRleCA9IGk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gaW5k
ZXg7Ci0gIH0KLQotICBmdW5jdGlvbiBhY2N1bXVsYXRlTGlzdGVuZXJzKG9iaiwgZXZlbnROYW1l
LCBvdGhlckFjdGlvbnMpIHsKLSAgICB2YXIgbWV0YSA9IF9lbWJlck1ldGFsTWV0YS5wZWVrTWV0
YShvYmopOwotICAgIGlmICghbWV0YSkgewotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICB2YXIg
YWN0aW9ucyA9IG1ldGEubWF0Y2hpbmdMaXN0ZW5lcnMoZXZlbnROYW1lKTsKLSAgICB2YXIgbmV3
QWN0aW9ucyA9IFtdOwotCi0gICAgZm9yICh2YXIgaSA9IGFjdGlvbnMubGVuZ3RoIC0gMzsgaSA+
PSAwOyBpIC09IDMpIHsKLSAgICAgIHZhciB0YXJnZXQgPSBhY3Rpb25zW2ldOwotICAgICAgdmFy
IG1ldGhvZCA9IGFjdGlvbnNbaSArIDFdOwotICAgICAgdmFyIGZsYWdzID0gYWN0aW9uc1tpICsg
Ml07Ci0gICAgICB2YXIgYWN0aW9uSW5kZXggPSBpbmRleE9mKG90aGVyQWN0aW9ucywgdGFyZ2V0
LCBtZXRob2QpOwotCi0gICAgICBpZiAoYWN0aW9uSW5kZXggPT09IC0xKSB7Ci0gICAgICAgIG90
aGVyQWN0aW9ucy5wdXNoKHRhcmdldCwgbWV0aG9kLCBmbGFncyk7Ci0gICAgICAgIG5ld0FjdGlv
bnMucHVzaCh0YXJnZXQsIG1ldGhvZCwgZmxhZ3MpOwotICAgICAgfQotICAgIH0KLQotICAgIHJl
dHVybiBuZXdBY3Rpb25zOwotICB9Ci0KLSAgLyoqCi0gICAgQWRkIGFuIGV2ZW50IGxpc3RlbmVy
Ci0gIAotICAgIEBtZXRob2QgYWRkTGlzdGVuZXIKLSAgICBAZm9yIEVtYmVyCi0gICAgQHBhcmFt
IG9iagotICAgIEBwYXJhbSB7U3RyaW5nfSBldmVudE5hbWUKLSAgICBAcGFyYW0ge09iamVjdHxG
dW5jdGlvbn0gdGFyZ2V0IEEgdGFyZ2V0IG9iamVjdCBvciBhIGZ1bmN0aW9uCi0gICAgQHBhcmFt
IHtGdW5jdGlvbnxTdHJpbmd9IG1ldGhvZCBBIGZ1bmN0aW9uIG9yIHRoZSBuYW1lIG9mIGEgZnVu
Y3Rpb24gdG8gYmUgY2FsbGVkIG9uIGB0YXJnZXRgCi0gICAgQHBhcmFtIHtCb29sZWFufSBvbmNl
IEEgZmxhZyB3aGV0aGVyIGEgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uY2UKLSAg
ICBAcHVibGljCi0gICovCi0KLSAgZnVuY3Rpb24gYWRkTGlzdGVuZXIob2JqLCBldmVudE5hbWUs
IHRhcmdldCwgbWV0aG9kLCBvbmNlKSB7Ci0gICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ1lv
dSBtdXN0IHBhc3MgYXQgbGVhc3QgYW4gb2JqZWN0IGFuZCBldmVudCBuYW1lIHRvIEVtYmVyLmFk
ZExpc3RlbmVyJywgISFvYmogJiYgISFldmVudE5hbWUpOwotCi0gICAgX2VtYmVyTWV0YWxEZWJ1
Zy5kZXByZWNhdGUoJ2RpZEluaXRBdHRycyBjYWxsZWQgaW4gJyArIChvYmogJiYgb2JqLnRvU3Ry
aW5nICYmIG9iai50b1N0cmluZygpKSArICcuJywgZXZlbnROYW1lICE9PSAnZGlkSW5pdEF0dHJz
JywgewotICAgICAgaWQ6ICdlbWJlci12aWV3cy5kaWQtaW5pdC1hdHRycycsCi0gICAgICB1bnRp
bDogJzMuMC4wJywKLSAgICAgIHVybDogJ2h0dHA6Ly9lbWJlcmpzLmNvbS9kZXByZWNhdGlvbnMv
djIueCN0b2NfZW1iZXItY29tcG9uZW50LWRpZGluaXRhdHRycycKLSAgICB9KTsKLQotICAgIGlm
ICghbWV0aG9kICYmICdmdW5jdGlvbicgPT09IHR5cGVvZiB0YXJnZXQpIHsKLSAgICAgIG1ldGhv
ZCA9IHRhcmdldDsKLSAgICAgIHRhcmdldCA9IG51bGw7Ci0gICAgfQotCi0gICAgdmFyIGZsYWdz
ID0gMDsKLSAgICBpZiAob25jZSkgewotICAgICAgZmxhZ3MgfD0gX2VtYmVyTWV0YWxNZXRhX2xp
c3RlbmVycy5PTkNFOwotICAgIH0KLQotICAgIF9lbWJlck1ldGFsTWV0YS5tZXRhKG9iaikuYWRk
VG9MaXN0ZW5lcnMoZXZlbnROYW1lLCB0YXJnZXQsIG1ldGhvZCwgZmxhZ3MpOwotCi0gICAgaWYg
KCdmdW5jdGlvbicgPT09IHR5cGVvZiBvYmouZGlkQWRkTGlzdGVuZXIpIHsKLSAgICAgIG9iai5k
aWRBZGRMaXN0ZW5lcihldmVudE5hbWUsIHRhcmdldCwgbWV0aG9kKTsKLSAgICB9Ci0gIH0KLQot
ICAvKioKLSAgICBSZW1vdmUgYW4gZXZlbnQgbGlzdGVuZXIKLSAgCi0gICAgQXJndW1lbnRzIHNo
b3VsZCBtYXRjaCB0aG9zZSBwYXNzZWQgdG8gYEVtYmVyLmFkZExpc3RlbmVyYC4KLSAgCi0gICAg
QG1ldGhvZCByZW1vdmVMaXN0ZW5lcgotICAgIEBmb3IgRW1iZXIKLSAgICBAcGFyYW0gb2JqCi0g
ICAgQHBhcmFtIHtTdHJpbmd9IGV2ZW50TmFtZQotICAgIEBwYXJhbSB7T2JqZWN0fEZ1bmN0aW9u
fSB0YXJnZXQgQSB0YXJnZXQgb2JqZWN0IG9yIGEgZnVuY3Rpb24KLSAgICBAcGFyYW0ge0Z1bmN0
aW9ufFN0cmluZ30gbWV0aG9kIEEgZnVuY3Rpb24gb3IgdGhlIG5hbWUgb2YgYSBmdW5jdGlvbiB0
byBiZSBjYWxsZWQgb24gYHRhcmdldGAKLSAgICBAcHVibGljCi0gICovCi0KLSAgZnVuY3Rpb24g
cmVtb3ZlTGlzdGVuZXIob2JqLCBldmVudE5hbWUsIHRhcmdldCwgbWV0aG9kKSB7Ci0gICAgX2Vt
YmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ1lvdSBtdXN0IHBhc3MgYXQgbGVhc3QgYW4gb2JqZWN0IGFu
ZCBldmVudCBuYW1lIHRvIEVtYmVyLnJlbW92ZUxpc3RlbmVyJywgISFvYmogJiYgISFldmVudE5h
bWUpOwotCi0gICAgaWYgKCFtZXRob2QgJiYgJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIHRhcmdldCkg
ewotICAgICAgbWV0aG9kID0gdGFyZ2V0OwotICAgICAgdGFyZ2V0ID0gbnVsbDsKLSAgICB9Ci0K
LSAgICBfZW1iZXJNZXRhbE1ldGEubWV0YShvYmopLnJlbW92ZUZyb21MaXN0ZW5lcnMoZXZlbnRO
YW1lLCB0YXJnZXQsIG1ldGhvZCwgZnVuY3Rpb24gKCkgewotICAgICAgaWYgKCdmdW5jdGlvbicg
PT09IHR5cGVvZiBvYmouZGlkUmVtb3ZlTGlzdGVuZXIpIHsKLSAgICAgICAgb2JqLmRpZFJlbW92
ZUxpc3RlbmVyLmFwcGx5KG9iaiwgYXJndW1lbnRzKTsKLSAgICAgIH0KLSAgICB9KTsKLSAgfQot
Ci0gIC8qKgotICAgIFN1c3BlbmQgbGlzdGVuZXIgZHVyaW5nIGNhbGxiYWNrLgotICAKLSAgICBU
aGlzIHNob3VsZCBvbmx5IGJlIHVzZWQgYnkgdGhlIHRhcmdldCBvZiB0aGUgZXZlbnQgbGlzdGVu
ZXIKLSAgICB3aGVuIGl0IGlzIHRha2luZyBhbiBhY3Rpb24gdGhhdCB3b3VsZCBjYXVzZSB0aGUg
ZXZlbnQsIGUuZy4KLSAgICBhbiBvYmplY3QgbWlnaHQgc3VzcGVuZCBpdHMgcHJvcGVydHkgY2hh
bmdlIGxpc3RlbmVyIHdoaWxlIGl0IGlzCi0gICAgc2V0dGluZyB0aGF0IHByb3BlcnR5LgotICAK
LSAgICBAbWV0aG9kIHN1c3BlbmRMaXN0ZW5lcgotICAgIEBmb3IgRW1iZXIKLSAgCi0gICAgQHBy
aXZhdGUKLSAgICBAcGFyYW0gb2JqCi0gICAgQHBhcmFtIHtTdHJpbmd9IGV2ZW50TmFtZQotICAg
IEBwYXJhbSB7T2JqZWN0fEZ1bmN0aW9ufSB0YXJnZXQgQSB0YXJnZXQgb2JqZWN0IG9yIGEgZnVu
Y3Rpb24KLSAgICBAcGFyYW0ge0Z1bmN0aW9ufFN0cmluZ30gbWV0aG9kIEEgZnVuY3Rpb24gb3Ig
dGhlIG5hbWUgb2YgYSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgb24gYHRhcmdldGAKLSAgICBAcGFy
YW0ge0Z1bmN0aW9ufSBjYWxsYmFjawotICAqLwotCi0gIGZ1bmN0aW9uIHN1c3BlbmRMaXN0ZW5l
cihvYmosIGV2ZW50TmFtZSwgdGFyZ2V0LCBtZXRob2QsIGNhbGxiYWNrKSB7Ci0gICAgcmV0dXJu
IHN1c3BlbmRMaXN0ZW5lcnMob2JqLCBbZXZlbnROYW1lXSwgdGFyZ2V0LCBtZXRob2QsIGNhbGxi
YWNrKTsKLSAgfQotCi0gIC8qKgotICAgIFN1c3BlbmRzIG11bHRpcGxlIGxpc3RlbmVycyBkdXJp
bmcgYSBjYWxsYmFjay4KLSAgCi0gICAgQG1ldGhvZCBzdXNwZW5kTGlzdGVuZXJzCi0gICAgQGZv
ciBFbWJlcgotICAKLSAgICBAcHJpdmF0ZQotICAgIEBwYXJhbSBvYmoKLSAgICBAcGFyYW0ge0Fy
cmF5fSBldmVudE5hbWVzIEFycmF5IG9mIGV2ZW50IG5hbWVzCi0gICAgQHBhcmFtIHtPYmplY3R8
RnVuY3Rpb259IHRhcmdldCBBIHRhcmdldCBvYmplY3Qgb3IgYSBmdW5jdGlvbgotICAgIEBwYXJh
bSB7RnVuY3Rpb258U3RyaW5nfSBtZXRob2QgQSBmdW5jdGlvbiBvciB0aGUgbmFtZSBvZiBhIGZ1
bmN0aW9uIHRvIGJlIGNhbGxlZCBvbiBgdGFyZ2V0YAotICAgIEBwYXJhbSB7RnVuY3Rpb259IGNh
bGxiYWNrCi0gICovCi0KLSAgZnVuY3Rpb24gc3VzcGVuZExpc3RlbmVycyhvYmosIGV2ZW50TmFt
ZXMsIHRhcmdldCwgbWV0aG9kLCBjYWxsYmFjaykgewotICAgIGlmICghbWV0aG9kICYmICdmdW5j
dGlvbicgPT09IHR5cGVvZiB0YXJnZXQpIHsKLSAgICAgIG1ldGhvZCA9IHRhcmdldDsKLSAgICAg
IHRhcmdldCA9IG51bGw7Ci0gICAgfQotICAgIHJldHVybiBfZW1iZXJNZXRhbE1ldGEubWV0YShv
YmopLnN1c3BlbmRMaXN0ZW5lcnMoZXZlbnROYW1lcywgdGFyZ2V0LCBtZXRob2QsIGNhbGxiYWNr
KTsKLSAgfQotCi0gIC8qKgotICAgIFJldHVybiBhIGxpc3Qgb2YgY3VycmVudGx5IHdhdGNoZWQg
ZXZlbnRzCi0gIAotICAgIEBwcml2YXRlCi0gICAgQG1ldGhvZCB3YXRjaGVkRXZlbnRzCi0gICAg
QGZvciBFbWJlcgotICAgIEBwYXJhbSBvYmoKLSAgKi8KLQotICBmdW5jdGlvbiB3YXRjaGVkRXZl
bnRzKG9iaikgewotICAgIHJldHVybiBfZW1iZXJNZXRhbE1ldGEubWV0YShvYmopLndhdGNoZWRF
dmVudHMoKTsKLSAgfQotCi0gIC8qKgotICAgIFNlbmQgYW4gZXZlbnQuIFRoZSBleGVjdXRpb24g
b2Ygc3VzcGVuZGVkIGxpc3RlbmVycwotICAgIGlzIHNraXBwZWQsIGFuZCBvbmNlIGxpc3RlbmVy
cyBhcmUgcmVtb3ZlZC4gQSBsaXN0ZW5lciB3aXRob3V0Ci0gICAgYSB0YXJnZXQgaXMgZXhlY3V0
ZWQgb24gdGhlIHBhc3NlZCBvYmplY3QuIElmIGFuIGFycmF5IG9mIGFjdGlvbnMKLSAgICBpcyBu
b3QgcGFzc2VkLCB0aGUgYWN0aW9ucyBzdG9yZWQgb24gdGhlIHBhc3NlZCBvYmplY3QgYXJlIGlu
dm9rZWQuCi0gIAotICAgIEBtZXRob2Qgc2VuZEV2ZW50Ci0gICAgQGZvciBFbWJlcgotICAgIEBw
YXJhbSBvYmoKLSAgICBAcGFyYW0ge1N0cmluZ30gZXZlbnROYW1lCi0gICAgQHBhcmFtIHtBcnJh
eX0gcGFyYW1zIE9wdGlvbmFsIHBhcmFtZXRlcnMgZm9yIGVhY2ggbGlzdGVuZXIuCi0gICAgQHBh
cmFtIHtBcnJheX0gYWN0aW9ucyBPcHRpb25hbCBhcnJheSBvZiBhY3Rpb25zIChsaXN0ZW5lcnMp
LgotICAgIEByZXR1cm4gdHJ1ZQotICAgIEBwdWJsaWMKLSAgKi8KLQotICBmdW5jdGlvbiBzZW5k
RXZlbnQob2JqLCBldmVudE5hbWUsIHBhcmFtcywgYWN0aW9ucykgewotICAgIGlmICghYWN0aW9u
cykgewotICAgICAgdmFyIG1ldGEgPSBfZW1iZXJNZXRhbE1ldGEucGVla01ldGEob2JqKTsKLSAg
ICAgIGFjdGlvbnMgPSBtZXRhICYmIG1ldGEubWF0Y2hpbmdMaXN0ZW5lcnMoZXZlbnROYW1lKTsK
LSAgICB9Ci0KLSAgICBpZiAoIWFjdGlvbnMgfHwgYWN0aW9ucy5sZW5ndGggPT09IDApIHsKLSAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBmb3IgKHZhciBpID0gYWN0aW9ucy5sZW5ndGggLSAz
OyBpID49IDA7IGkgLT0gMykgewotICAgICAgLy8gbG9vcGluZyBpbiByZXZlcnNlIGZvciBvbmNl
IGxpc3RlbmVycwotICAgICAgdmFyIHRhcmdldCA9IGFjdGlvbnNbaV07Ci0gICAgICB2YXIgbWV0
aG9kID0gYWN0aW9uc1tpICsgMV07Ci0gICAgICB2YXIgZmxhZ3MgPSBhY3Rpb25zW2kgKyAyXTsK
LQotICAgICAgaWYgKCFtZXRob2QpIHsKLSAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0gICAg
ICBpZiAoZmxhZ3MgJiBfZW1iZXJNZXRhbE1ldGFfbGlzdGVuZXJzLlNVU1BFTkRFRCkgewotICAg
ICAgICBjb250aW51ZTsKLSAgICAgIH0KLSAgICAgIGlmIChmbGFncyAmIF9lbWJlck1ldGFsTWV0
YV9saXN0ZW5lcnMuT05DRSkgewotICAgICAgICByZW1vdmVMaXN0ZW5lcihvYmosIGV2ZW50TmFt
ZSwgdGFyZ2V0LCBtZXRob2QpOwotICAgICAgfQotICAgICAgaWYgKCF0YXJnZXQpIHsKLSAgICAg
ICAgdGFyZ2V0ID0gb2JqOwotICAgICAgfQotICAgICAgaWYgKCdzdHJpbmcnID09PSB0eXBlb2Yg
bWV0aG9kKSB7Ci0gICAgICAgIGlmIChwYXJhbXMpIHsKLSAgICAgICAgICBfZW1iZXJNZXRhbFV0
aWxzLmFwcGx5U3RyKHRhcmdldCwgbWV0aG9kLCBwYXJhbXMpOwotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgIHRhcmdldFttZXRob2RdKCk7Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgIGlmIChwYXJhbXMpIHsKLSAgICAgICAgICBtZXRob2QuYXBwbHkodGFyZ2V0LCBwYXJh
bXMpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIG1ldGhvZC5jYWxsKHRhcmdldCk7Ci0g
ICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvKioK
LSAgICBAcHJpdmF0ZQotICAgIEBtZXRob2QgaGFzTGlzdGVuZXJzCi0gICAgQGZvciBFbWJlcgot
ICAgIEBwYXJhbSBvYmoKLSAgICBAcGFyYW0ge1N0cmluZ30gZXZlbnROYW1lCi0gICovCi0KLSAg
ZnVuY3Rpb24gaGFzTGlzdGVuZXJzKG9iaiwgZXZlbnROYW1lKSB7Ci0gICAgdmFyIG1ldGEgPSBf
ZW1iZXJNZXRhbE1ldGEucGVla01ldGEob2JqKTsKLSAgICBpZiAoIW1ldGEpIHsKLSAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIG1ldGEubWF0Y2hpbmdMaXN0ZW5lcnMoZXZl
bnROYW1lKS5sZW5ndGggPiAwOwotICB9Ci0KLSAgLyoqCi0gICAgQHByaXZhdGUKLSAgICBAbWV0
aG9kIGxpc3RlbmVyc0ZvcgotICAgIEBmb3IgRW1iZXIKLSAgICBAcGFyYW0gb2JqCi0gICAgQHBh
cmFtIHtTdHJpbmd9IGV2ZW50TmFtZQotICAqLwotCi0gIGZ1bmN0aW9uIGxpc3RlbmVyc0Zvcihv
YmosIGV2ZW50TmFtZSkgewotICAgIHZhciByZXQgPSBbXTsKLSAgICB2YXIgbWV0YSA9IF9lbWJl
ck1ldGFsTWV0YS5wZWVrTWV0YShvYmopOwotICAgIHZhciBhY3Rpb25zID0gbWV0YSAmJiBtZXRh
Lm1hdGNoaW5nTGlzdGVuZXJzKGV2ZW50TmFtZSk7Ci0KLSAgICBpZiAoIWFjdGlvbnMpIHsKLSAg
ICAgIHJldHVybiByZXQ7Ci0gICAgfQotCi0gICAgZm9yICh2YXIgaSA9IDAsIGwgPSBhY3Rpb25z
Lmxlbmd0aDsgaSA8IGw7IGkgKz0gMykgewotICAgICAgdmFyIHRhcmdldCA9IGFjdGlvbnNbaV07
Ci0gICAgICB2YXIgbWV0aG9kID0gYWN0aW9uc1tpICsgMV07Ci0gICAgICByZXQucHVzaChbdGFy
Z2V0LCBtZXRob2RdKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmV0OwotICB9Ci0KLSAgLyoqCi0g
ICAgRGVmaW5lIGEgcHJvcGVydHkgYXMgYSBmdW5jdGlvbiB0aGF0IHNob3VsZCBiZSBleGVjdXRl
ZCB3aGVuCi0gICAgYSBzcGVjaWZpZWQgZXZlbnQgb3IgZXZlbnRzIGFyZSB0cmlnZ2VyZWQuCi0g
IAotICAKLSAgICBgYGAgamF2YXNjcmlwdAotICAgIHZhciBKb2IgPSBFbWJlci5PYmplY3QuZXh0
ZW5kKHsKLSAgICAgIGxvZ0NvbXBsZXRlZDogRW1iZXIub24oJ2NvbXBsZXRlZCcsIGZ1bmN0aW9u
KCkgewotICAgICAgICBjb25zb2xlLmxvZygnSm9iIGNvbXBsZXRlZCEnKTsKLSAgICAgIH0pCi0g
ICAgfSk7Ci0gIAotICAgIHZhciBqb2IgPSBKb2IuY3JlYXRlKCk7Ci0gIAotICAgIEVtYmVyLnNl
bmRFdmVudChqb2IsICdjb21wbGV0ZWQnKTsgLy8gTG9ncyAnSm9iIGNvbXBsZXRlZCEnCi0gICBg
YGAKLSAgCi0gICAgQG1ldGhvZCBvbgotICAgIEBmb3IgRW1iZXIKLSAgICBAcGFyYW0ge1N0cmlu
Z30gZXZlbnROYW1lcyoKLSAgICBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jCi0gICAgQHJldHVybiBm
dW5jCi0gICAgQHB1YmxpYwotICAqLwotCi0gIGZ1bmN0aW9uIG9uKCkgewotICAgIGZvciAodmFy
IF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBf
a2V5IDwgX2xlbjsgX2tleSsrKSB7Ci0gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXld
OwotICAgIH0KLQotICAgIHZhciBmdW5jID0gYXJncy5wb3AoKTsKLSAgICB2YXIgZXZlbnRzID0g
YXJnczsKLSAgICBmdW5jLl9fZW1iZXJfbGlzdGVuc19fID0gZXZlbnRzOwotICAgIHJldHVybiBm
dW5jOwotICB9Ci19KTsKLWVuaWZlZCgnZW1iZXItbWV0YWwvZXhwYW5kX3Byb3BlcnRpZXMnLCBb
J2V4cG9ydHMnLCAnZW1iZXItbWV0YWwvZGVidWcnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJl
ck1ldGFsRGVidWcpIHsKLSAgJ3VzZSBzdHJpY3QnOwotCi0gIGV4cG9ydHMuZGVmYXVsdCA9IGV4
cGFuZFByb3BlcnRpZXM7Ci0KLSAgLyoqCi0gIEBtb2R1bGUgZW1iZXIKLSAgQHN1Ym1vZHVsZSBl
bWJlci1tZXRhbAotICAqLwotCi0gIHZhciBTUExJVF9SRUdFWCA9IC9ce3xcfS87Ci0gIHZhciBF
TkRfV0lUSF9FQUNIX1JFR0VYID0gL1wuQGVhY2gkLzsKLQotICAvKioKLSAgICBFeHBhbmRzIGBw
YXR0ZXJuYCwgaW52b2tpbmcgYGNhbGxiYWNrYCBmb3IgZWFjaCBleHBhbnNpb24uCi0gIAotICAg
IFRoZSBvbmx5IHBhdHRlcm4gc3VwcG9ydGVkIGlzIGJyYWNlLWV4cGFuc2lvbiwgYW55dGhpbmcg
ZWxzZSB3aWxsIGJlIHBhc3NlZAotICAgIG9uY2UgdG8gYGNhbGxiYWNrYCBkaXJlY3RseS4KLSAg
Ci0gICAgRXhhbXBsZQotICAKLSAgICBgYGBqcwotICAgIGZ1bmN0aW9uIGVjaG8oYXJnKXsgY29u
c29sZS5sb2coYXJnKTsgfQotICAKLSAgICBFbWJlci5leHBhbmRQcm9wZXJ0aWVzKCdmb28uYmFy
JywgZWNobyk7ICAgICAgICAgICAgICAvLz0+ICdmb28uYmFyJwotICAgIEVtYmVyLmV4cGFuZFBy
b3BlcnRpZXMoJ3tmb28sYmFyfScsIGVjaG8pOyAgICAgICAgICAgIC8vPT4gJ2ZvbycsICdiYXIn
Ci0gICAgRW1iZXIuZXhwYW5kUHJvcGVydGllcygnZm9vLntiYXIsYmF6fScsIGVjaG8pOyAgICAg
ICAgLy89PiAnZm9vLmJhcicsICdmb28uYmF6JwotICAgIEVtYmVyLmV4cGFuZFByb3BlcnRpZXMo
J3tmb28sYmFyfS5iYXonLCBlY2hvKTsgICAgICAgIC8vPT4gJ2Zvby5iYXonLCAnYmFyLmJheicK
LSAgICBFbWJlci5leHBhbmRQcm9wZXJ0aWVzKCdmb28ue2JhcixiYXp9LltdJywgZWNobykgICAg
ICAvLz0+ICdmb28uYmFyLltdJywgJ2Zvby5iYXouW10nCi0gICAgRW1iZXIuZXhwYW5kUHJvcGVy
dGllcygne2ZvbyxiYXJ9LntzcGFtLGVnZ3N9JywgZWNobykgLy89PiAnZm9vLnNwYW0nLCAnZm9v
LmVnZ3MnLCAnYmFyLnNwYW0nLCAnYmFyLmVnZ3MnCi0gICAgRW1iZXIuZXhwYW5kUHJvcGVydGll
cygne2Zvb30uYmFyLntiYXp9JykgICAgICAgICAgICAgLy89PiAnZm9vLmJhci5iYXonCi0gICAg
YGBgCi0gIAotICAgIEBtZXRob2QgZXhwYW5kUHJvcGVydGllcwotICAgIEBmb3IgRW1iZXIKLSAg
ICBAcHJpdmF0ZQotICAgIEBwYXJhbSB7U3RyaW5nfSBwYXR0ZXJuIFRoZSBwcm9wZXJ0eSBwYXR0
ZXJuIHRvIGV4cGFuZC4KLSAgICBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgY2FsbGJh
Y2sgdG8gaW52b2tlLiAgSXQgaXMgaW52b2tlZCBvbmNlIHBlcgotICAgIGV4cGFuc2lvbiwgYW5k
IGlzIHBhc3NlZCB0aGUgZXhwYW5zaW9uLgotICAqLwotCi0gIGZ1bmN0aW9uIGV4cGFuZFByb3Bl
cnRpZXMocGF0dGVybiwgY2FsbGJhY2spIHsKLSAgICBfZW1iZXJNZXRhbERlYnVnLmFzc2VydCgn
QSBjb21wdXRlZCBwcm9wZXJ0eSBrZXkgbXVzdCBiZSBhIHN0cmluZycsIHR5cGVvZiBwYXR0ZXJu
ID09PSAnc3RyaW5nJyk7Ci0gICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ0JyYWNlIGV4cGFu
ZGVkIHByb3BlcnRpZXMgY2Fubm90IGNvbnRhaW4gc3BhY2VzLCBlLmcuICJ1c2VyLntmaXJzdE5h
bWUsIGxhc3ROYW1lfSIgc2hvdWxkIGJlICJ1c2VyLntmaXJzdE5hbWUsbGFzdE5hbWV9IicsIHBh
dHRlcm4uaW5kZXhPZignICcpID09PSAtMSk7Ci0KLSAgICB2YXIgcGFydHMgPSBwYXR0ZXJuLnNw
bGl0KFNQTElUX1JFR0VYKTsKLSAgICB2YXIgcHJvcGVydGllcyA9IFtwYXJ0c107Ci0KLSAgICBm
b3IgKHZhciBpID0gMDsgaSA8IHBhcnRzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICB2YXIgcGFydCA9
IHBhcnRzW2ldOwotICAgICAgaWYgKHBhcnQuaW5kZXhPZignLCcpID49IDApIHsKLSAgICAgICAg
cHJvcGVydGllcyA9IGR1cGxpY2F0ZUFuZFJlcGxhY2UocHJvcGVydGllcywgcGFydC5zcGxpdCgn
LCcpLCBpKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3Bl
cnRpZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgIGNhbGxiYWNrKHByb3BlcnRpZXNbaV0uam9pbign
JykucmVwbGFjZShFTkRfV0lUSF9FQUNIX1JFR0VYLCAnLltdJykpOwotICAgIH0KLSAgfQotCi0g
IGZ1bmN0aW9uIGR1cGxpY2F0ZUFuZFJlcGxhY2UocHJvcGVydGllcywgY3VycmVudFBhcnRzLCBp
bmRleCkgewotICAgIHZhciBhbGwgPSBbXTsKLQotICAgIHByb3BlcnRpZXMuZm9yRWFjaChmdW5j
dGlvbiAocHJvcGVydHkpIHsKLSAgICAgIGN1cnJlbnRQYXJ0cy5mb3JFYWNoKGZ1bmN0aW9uIChw
YXJ0KSB7Ci0gICAgICAgIHZhciBjdXJyZW50ID0gcHJvcGVydHkuc2xpY2UoMCk7Ci0gICAgICAg
IGN1cnJlbnRbaW5kZXhdID0gcGFydDsKLSAgICAgICAgYWxsLnB1c2goY3VycmVudCk7Ci0gICAg
ICB9KTsKLSAgICB9KTsKLQotICAgIHJldHVybiBhbGw7Ci0gIH0KLX0pOwotZW5pZmVkKCdlbWJl
ci1tZXRhbC9mZWF0dXJlcycsIFsnZXhwb3J0cycsICdlbWJlci1tZXRhbC9jb3JlJywgJ2VtYmVy
LW1ldGFsL2Fzc2lnbiddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0YWxDb3JlLCBfZW1i
ZXJNZXRhbEFzc2lnbikgewotICAndXNlIHN0cmljdCc7Ci0KLSAgZXhwb3J0cy5kZWZhdWx0ID0g
aXNFbmFibGVkOwotCi0gIC8qKgotICAgIFRoZSBoYXNoIG9mIGVuYWJsZWQgQ2FuYXJ5IGZlYXR1
cmVzLiBBZGQgdG8gdGhpcywgYW55IGNhbmFyeSBmZWF0dXJlcwotICAgIGJlZm9yZSBjcmVhdGlu
ZyB5b3VyIGFwcGxpY2F0aW9uLgotICAKLSAgICBBbHRlcm5hdGl2ZWx5IChhbmQgcmVjb21tZW5k
ZWQpLCB5b3UgY2FuIGFsc28gZGVmaW5lIGBFbWJlckVOVi5GRUFUVVJFU2AKLSAgICBpZiB5b3Ug
bmVlZCB0byBlbmFibGUgZmVhdHVyZXMgZmxhZ2dlZCBhdCBydW50aW1lLgotICAKLSAgICBAY2xh
c3MgRkVBVFVSRVMKLSAgICBAbmFtZXNwYWNlIEVtYmVyCi0gICAgQHN0YXRpYwotICAgIEBzaW5j
ZSAxLjEuMAotICAgIEBwdWJsaWMKLSAgKi8KLSAgdmFyIEtOT1dOX0ZFQVRVUkVTID0ge307ZXhw
b3J0cy5LTk9XTl9GRUFUVVJFUyA9IEtOT1dOX0ZFQVRVUkVTOwotICAvLyBqc2hpbnQgaWdub3Jl
OmxpbmUKLSAgdmFyIEZFQVRVUkVTID0gX2VtYmVyTWV0YWxBc3NpZ24uZGVmYXVsdChLTk9XTl9G
RUFUVVJFUywgX2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQuRU5WLkZFQVRVUkVTKTsKLQotICBleHBv
cnRzLkZFQVRVUkVTID0gRkVBVFVSRVM7Ci0gIC8qKgotICAgIERldGVybWluZSB3aGV0aGVyIHRo
ZSBzcGVjaWZpZWQgYGZlYXR1cmVgIGlzIGVuYWJsZWQuIFVzZWQgYnkgRW1iZXIncwotICAgIGJ1
aWxkIHRvb2xzIHRvIGV4Y2x1ZGUgZXhwZXJpbWVudGFsIGZlYXR1cmVzIGZyb20gYmV0YS9zdGFi
bGUgYnVpbGRzLgotICAKLSAgICBZb3UgY2FuIGRlZmluZSB0aGUgZm9sbG93aW5nIGNvbmZpZ3Vy
YXRpb24gb3B0aW9uczoKLSAgCi0gICAgKiBgRW1iZXJFTlYuRU5BQkxFX09QVElPTkFMX0ZFQVRV
UkVTYCAtIGVuYWJsZSBhbnkgZmVhdHVyZXMgdGhhdCBoYXZlIG5vdCBiZWVuIGV4cGxpY2l0bHkK
LSAgICAgIGVuYWJsZWQvZGlzYWJsZWQuCi0gIAotICAgIEBtZXRob2QgaXNFbmFibGVkCi0gICAg
QHBhcmFtIHtTdHJpbmd9IGZlYXR1cmUgVGhlIGZlYXR1cmUgdG8gY2hlY2sKLSAgICBAcmV0dXJu
IHtCb29sZWFufQotICAgIEBmb3IgRW1iZXIuRkVBVFVSRVMKLSAgICBAc2luY2UgMS4xLjAKLSAg
ICBAcHVibGljCi0gICovCi0KLSAgZnVuY3Rpb24gaXNFbmFibGVkKGZlYXR1cmUpIHsKLSAgICB2
YXIgZmVhdHVyZVZhbHVlID0gRkVBVFVSRVNbZmVhdHVyZV07Ci0KLSAgICBpZiAoZmVhdHVyZVZh
bHVlID09PSB0cnVlIHx8IGZlYXR1cmVWYWx1ZSA9PT0gZmFsc2UgfHwgZmVhdHVyZVZhbHVlID09
PSB1bmRlZmluZWQpIHsKLSAgICAgIHJldHVybiBmZWF0dXJlVmFsdWU7Ci0gICAgfSBlbHNlIGlm
IChfZW1iZXJNZXRhbENvcmUuZGVmYXVsdC5FTlYuRU5BQkxFX09QVElPTkFMX0ZFQVRVUkVTKSB7
Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IGVsc2UgewotICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLSAgfQotfSk7Ci1lbmlmZWQoJ2VtYmVyLW1ldGFsL2dldF9wcm9wZXJ0aWVzJywgWydl
eHBvcnRzJywgJ2VtYmVyLW1ldGFsL3Byb3BlcnR5X2dldCddLCBmdW5jdGlvbiAoZXhwb3J0cywg
X2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQpIHsKLSAgJ3VzZSBzdHJpY3QnOwotCi0gIGV4cG9ydHMu
ZGVmYXVsdCA9IGdldFByb3BlcnRpZXM7Ci0KLSAgLyoqCi0gICAgVG8gZ2V0IG11bHRpcGxlIHBy
b3BlcnRpZXMgYXQgb25jZSwgY2FsbCBgRW1iZXIuZ2V0UHJvcGVydGllc2AKLSAgICB3aXRoIGFu
IG9iamVjdCBmb2xsb3dlZCBieSBhIGxpc3Qgb2Ygc3RyaW5ncyBvciBhbiBhcnJheToKLSAgCi0g
ICAgYGBgamF2YXNjcmlwdAotICAgIEVtYmVyLmdldFByb3BlcnRpZXMocmVjb3JkLCAnZmlyc3RO
YW1lJywgJ2xhc3ROYW1lJywgJ3ppcENvZGUnKTsKLSAgICAvLyB7IGZpcnN0TmFtZTogJ0pvaG4n
LCBsYXN0TmFtZTogJ0RvZScsIHppcENvZGU6ICcxMDAxMScgfQotICAgIGBgYAotICAKLSAgICBp
cyBlcXVpdmFsZW50IHRvOgotICAKLSAgICBgYGBqYXZhc2NyaXB0Ci0gICAgRW1iZXIuZ2V0UHJv
cGVydGllcyhyZWNvcmQsIFsnZmlyc3ROYW1lJywgJ2xhc3ROYW1lJywgJ3ppcENvZGUnXSk7Ci0g
ICAgLy8geyBmaXJzdE5hbWU6ICdKb2huJywgbGFzdE5hbWU6ICdEb2UnLCB6aXBDb2RlOiAnMTAw
MTEnIH0KLSAgICBgYGAKLSAgCi0gICAgQG1ldGhvZCBnZXRQcm9wZXJ0aWVzCi0gICAgQGZvciBF
bWJlcgotICAgIEBwYXJhbSB7T2JqZWN0fSBvYmoKLSAgICBAcGFyYW0ge1N0cmluZy4uLnxBcnJh
eX0gbGlzdCBvZiBrZXlzIHRvIGdldAotICAgIEByZXR1cm4ge09iamVjdH0KLSAgICBAcHVibGlj
Ci0gICovCi0KLSAgZnVuY3Rpb24gZ2V0UHJvcGVydGllcyhvYmopIHsKLSAgICB2YXIgcmV0ID0g
e307Ci0gICAgdmFyIHByb3BlcnR5TmFtZXMgPSBhcmd1bWVudHM7Ci0gICAgdmFyIGkgPSAxOwot
Ci0gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIgJiYgQXJyYXkuaXNBcnJheShhcmd1bWVu
dHNbMV0pKSB7Ci0gICAgICBpID0gMDsKLSAgICAgIHByb3BlcnR5TmFtZXMgPSBhcmd1bWVudHNb
MV07Ci0gICAgfQotICAgIGZvciAodmFyIGxlbiA9IHByb3BlcnR5TmFtZXMubGVuZ3RoOyBpIDwg
bGVuOyBpKyspIHsKLSAgICAgIHJldFtwcm9wZXJ0eU5hbWVzW2ldXSA9IF9lbWJlck1ldGFsUHJv
cGVydHlfZ2V0LmdldChvYmosIHByb3BlcnR5TmFtZXNbaV0pOwotICAgIH0KLSAgICByZXR1cm4g
cmV0OwotICB9Ci19KTsKLWVuaWZlZCgnZW1iZXItbWV0YWwvaW5kZXgnLCBbJ2V4cG9ydHMnLCAn
cmVxdWlyZScsICdlbWJlci1tZXRhbC9jb3JlJywgJ2VtYmVyLW1ldGFsL2RlYnVnJywgJ2VtYmVy
LW1ldGFsL2ZlYXR1cmVzJywgJ2VtYmVyLW1ldGFsL2Fzc2lnbicsICdlbWJlci1tZXRhbC9tZXJn
ZScsICdlbWJlci1tZXRhbC9pbnN0cnVtZW50YXRpb24nLCAnZW1iZXItbWV0YWwvdXRpbHMnLCAn
ZW1iZXItbWV0YWwvbWV0YScsICdlbWJlci1tZXRhbC9lcnJvcicsICdlbWJlci1tZXRhbC9jYWNo
ZScsICdlbWJlci1tZXRhbC9sb2dnZXInLCAnZW1iZXItbWV0YWwvcHJvcGVydHlfZ2V0JywgJ2Vt
YmVyLW1ldGFsL2V2ZW50cycsICdlbWJlci1tZXRhbC9vYnNlcnZlcl9zZXQnLCAnZW1iZXItbWV0
YWwvcHJvcGVydHlfZXZlbnRzJywgJ2VtYmVyLW1ldGFsL3Byb3BlcnRpZXMnLCAnZW1iZXItbWV0
YWwvcHJvcGVydHlfc2V0JywgJ2VtYmVyLW1ldGFsL21hcCcsICdlbWJlci1tZXRhbC9nZXRfcHJv
cGVydGllcycsICdlbWJlci1tZXRhbC9zZXRfcHJvcGVydGllcycsICdlbWJlci1tZXRhbC93YXRj
aF9rZXknLCAnZW1iZXItbWV0YWwvY2hhaW5zJywgJ2VtYmVyLW1ldGFsL3dhdGNoX3BhdGgnLCAn
ZW1iZXItbWV0YWwvd2F0Y2hpbmcnLCAnZW1iZXItbWV0YWwvZXhwYW5kX3Byb3BlcnRpZXMnLCAn
ZW1iZXItbWV0YWwvY29tcHV0ZWQnLCAnZW1iZXItbWV0YWwvYWxpYXMnLCAnZW1iZXItbWV0YWwv
Y29tcHV0ZWRfbWFjcm9zJywgJ2VtYmVyLW1ldGFsL29ic2VydmVyJywgJ2VtYmVyLW1ldGFsL21p
eGluJywgJ2VtYmVyLW1ldGFsL2JpbmRpbmcnLCAnZW1iZXItbWV0YWwvcGF0aF9jYWNoZScsICdl
bWJlci1tZXRhbC9ydW5fbG9vcCcsICdlbWJlci1tZXRhbC9saWJyYXJpZXMnLCAnZW1iZXItbWV0
YWwvaXNfbm9uZScsICdlbWJlci1tZXRhbC9pc19lbXB0eScsICdlbWJlci1tZXRhbC9pc19ibGFu
aycsICdlbWJlci1tZXRhbC9pc19wcmVzZW50JywgJ2JhY2tidXJuZXInXSwgZnVuY3Rpb24gKGV4
cG9ydHMsIF9yZXF1aXJlLCBfZW1iZXJNZXRhbENvcmUsIF9lbWJlck1ldGFsRGVidWcsIF9lbWJl
ck1ldGFsRmVhdHVyZXMsIF9lbWJlck1ldGFsQXNzaWduLCBfZW1iZXJNZXRhbE1lcmdlLCBfZW1i
ZXJNZXRhbEluc3RydW1lbnRhdGlvbiwgX2VtYmVyTWV0YWxVdGlscywgX2VtYmVyTWV0YWxNZXRh
LCBfZW1iZXJNZXRhbEVycm9yLCBfZW1iZXJNZXRhbENhY2hlLCBfZW1iZXJNZXRhbExvZ2dlciwg
X2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQsIF9lbWJlck1ldGFsRXZlbnRzLCBfZW1iZXJNZXRhbE9i
c2VydmVyX3NldCwgX2VtYmVyTWV0YWxQcm9wZXJ0eV9ldmVudHMsIF9lbWJlck1ldGFsUHJvcGVy
dGllcywgX2VtYmVyTWV0YWxQcm9wZXJ0eV9zZXQsIF9lbWJlck1ldGFsTWFwLCBfZW1iZXJNZXRh
bEdldF9wcm9wZXJ0aWVzLCBfZW1iZXJNZXRhbFNldF9wcm9wZXJ0aWVzLCBfZW1iZXJNZXRhbFdh
dGNoX2tleSwgX2VtYmVyTWV0YWxDaGFpbnMsIF9lbWJlck1ldGFsV2F0Y2hfcGF0aCwgX2VtYmVy
TWV0YWxXYXRjaGluZywgX2VtYmVyTWV0YWxFeHBhbmRfcHJvcGVydGllcywgX2VtYmVyTWV0YWxD
b21wdXRlZCwgX2VtYmVyTWV0YWxBbGlhcywgX2VtYmVyTWV0YWxDb21wdXRlZF9tYWNyb3MsIF9l
bWJlck1ldGFsT2JzZXJ2ZXIsIF9lbWJlck1ldGFsTWl4aW4sIF9lbWJlck1ldGFsQmluZGluZywg
X2VtYmVyTWV0YWxQYXRoX2NhY2hlLCBfZW1iZXJNZXRhbFJ1bl9sb29wLCBfZW1iZXJNZXRhbExp
YnJhcmllcywgX2VtYmVyTWV0YWxJc19ub25lLCBfZW1iZXJNZXRhbElzX2VtcHR5LCBfZW1iZXJN
ZXRhbElzX2JsYW5rLCBfZW1iZXJNZXRhbElzX3ByZXNlbnQsIF9iYWNrYnVybmVyKSB7Ci0gIC8q
KgotICBAbW9kdWxlIGVtYmVyCi0gIEBzdWJtb2R1bGUgZW1iZXItbWV0YWwKLSAgKi8KLQotICAv
LyBCRUdJTiBJTVBPUlRTCi0gICd1c2Ugc3RyaWN0JzsKLQotICBfZW1iZXJNZXRhbENvbXB1dGVk
LmNvbXB1dGVkLmVtcHR5ID0gX2VtYmVyTWV0YWxDb21wdXRlZF9tYWNyb3MuZW1wdHk7Ci0gIF9l
bWJlck1ldGFsQ29tcHV0ZWQuY29tcHV0ZWQubm90RW1wdHkgPSBfZW1iZXJNZXRhbENvbXB1dGVk
X21hY3Jvcy5ub3RFbXB0eTsKLSAgX2VtYmVyTWV0YWxDb21wdXRlZC5jb21wdXRlZC5ub25lID0g
X2VtYmVyTWV0YWxDb21wdXRlZF9tYWNyb3Mubm9uZTsKLSAgX2VtYmVyTWV0YWxDb21wdXRlZC5j
b21wdXRlZC5ub3QgPSBfZW1iZXJNZXRhbENvbXB1dGVkX21hY3Jvcy5ub3Q7Ci0gIF9lbWJlck1l
dGFsQ29tcHV0ZWQuY29tcHV0ZWQuYm9vbCA9IF9lbWJlck1ldGFsQ29tcHV0ZWRfbWFjcm9zLmJv
b2w7Ci0gIF9lbWJlck1ldGFsQ29tcHV0ZWQuY29tcHV0ZWQubWF0Y2ggPSBfZW1iZXJNZXRhbENv
bXB1dGVkX21hY3Jvcy5tYXRjaDsKLSAgX2VtYmVyTWV0YWxDb21wdXRlZC5jb21wdXRlZC5lcXVh
bCA9IF9lbWJlck1ldGFsQ29tcHV0ZWRfbWFjcm9zLmVxdWFsOwotICBfZW1iZXJNZXRhbENvbXB1
dGVkLmNvbXB1dGVkLmd0ID0gX2VtYmVyTWV0YWxDb21wdXRlZF9tYWNyb3MuZ3Q7Ci0gIF9lbWJl
ck1ldGFsQ29tcHV0ZWQuY29tcHV0ZWQuZ3RlID0gX2VtYmVyTWV0YWxDb21wdXRlZF9tYWNyb3Mu
Z3RlOwotICBfZW1iZXJNZXRhbENvbXB1dGVkLmNvbXB1dGVkLmx0ID0gX2VtYmVyTWV0YWxDb21w
dXRlZF9tYWNyb3MubHQ7Ci0gIF9lbWJlck1ldGFsQ29tcHV0ZWQuY29tcHV0ZWQubHRlID0gX2Vt
YmVyTWV0YWxDb21wdXRlZF9tYWNyb3MubHRlOwotICBfZW1iZXJNZXRhbENvbXB1dGVkLmNvbXB1
dGVkLmFsaWFzID0gX2VtYmVyTWV0YWxBbGlhcy5kZWZhdWx0OwotICBfZW1iZXJNZXRhbENvbXB1
dGVkLmNvbXB1dGVkLm9uZVdheSA9IF9lbWJlck1ldGFsQ29tcHV0ZWRfbWFjcm9zLm9uZVdheTsK
LSAgX2VtYmVyTWV0YWxDb21wdXRlZC5jb21wdXRlZC5yZWFkcyA9IF9lbWJlck1ldGFsQ29tcHV0
ZWRfbWFjcm9zLm9uZVdheTsKLSAgX2VtYmVyTWV0YWxDb21wdXRlZC5jb21wdXRlZC5yZWFkT25s
eSA9IF9lbWJlck1ldGFsQ29tcHV0ZWRfbWFjcm9zLnJlYWRPbmx5OwotICBfZW1iZXJNZXRhbENv
bXB1dGVkLmNvbXB1dGVkLmRlZmF1bHRUbyA9IF9lbWJlck1ldGFsQ29tcHV0ZWRfbWFjcm9zLmRl
ZmF1bHRUbzsKLSAgX2VtYmVyTWV0YWxDb21wdXRlZC5jb21wdXRlZC5kZXByZWNhdGluZ0FsaWFz
ID0gX2VtYmVyTWV0YWxDb21wdXRlZF9tYWNyb3MuZGVwcmVjYXRpbmdBbGlhczsKLSAgX2VtYmVy
TWV0YWxDb21wdXRlZC5jb21wdXRlZC5hbmQgPSBfZW1iZXJNZXRhbENvbXB1dGVkX21hY3Jvcy5h
bmQ7Ci0gIF9lbWJlck1ldGFsQ29tcHV0ZWQuY29tcHV0ZWQub3IgPSBfZW1iZXJNZXRhbENvbXB1
dGVkX21hY3Jvcy5vcjsKLSAgX2VtYmVyTWV0YWxDb21wdXRlZC5jb21wdXRlZC5hbnkgPSBfZW1i
ZXJNZXRhbENvbXB1dGVkX21hY3Jvcy5hbnk7Ci0KLSAgLy8gRU5EIElNUE9SVFMKLQotICAvLyBC
RUdJTiBFWFBPUlRTCi0gIHZhciBFbWJlckluc3RydW1lbnRhdGlvbiA9IF9lbWJlck1ldGFsQ29y
ZS5kZWZhdWx0Lkluc3RydW1lbnRhdGlvbiA9IHt9OwotICBFbWJlckluc3RydW1lbnRhdGlvbi5p
bnN0cnVtZW50ID0gX2VtYmVyTWV0YWxJbnN0cnVtZW50YXRpb24uaW5zdHJ1bWVudDsKLSAgRW1i
ZXJJbnN0cnVtZW50YXRpb24uc3Vic2NyaWJlID0gX2VtYmVyTWV0YWxJbnN0cnVtZW50YXRpb24u
c3Vic2NyaWJlOwotICBFbWJlckluc3RydW1lbnRhdGlvbi51bnN1YnNjcmliZSA9IF9lbWJlck1l
dGFsSW5zdHJ1bWVudGF0aW9uLnVuc3Vic2NyaWJlOwotICBFbWJlckluc3RydW1lbnRhdGlvbi5y
ZXNldCA9IF9lbWJlck1ldGFsSW5zdHJ1bWVudGF0aW9uLnJlc2V0OwotCi0gIF9lbWJlck1ldGFs
Q29yZS5kZWZhdWx0Lmluc3RydW1lbnQgPSBfZW1iZXJNZXRhbEluc3RydW1lbnRhdGlvbi5pbnN0
cnVtZW50OwotICBfZW1iZXJNZXRhbENvcmUuZGVmYXVsdC5zdWJzY3JpYmUgPSBfZW1iZXJNZXRh
bEluc3RydW1lbnRhdGlvbi5zdWJzY3JpYmU7Ci0KLSAgX2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQu
X0NhY2hlID0gX2VtYmVyTWV0YWxDYWNoZS5kZWZhdWx0OwotCi0gIF9lbWJlck1ldGFsQ29yZS5k
ZWZhdWx0LmdlbmVyYXRlR3VpZCA9IF9lbWJlck1ldGFsVXRpbHMuZ2VuZXJhdGVHdWlkOwotICBf
ZW1iZXJNZXRhbENvcmUuZGVmYXVsdC5HVUlEX0tFWSA9IF9lbWJlck1ldGFsVXRpbHMuR1VJRF9L
RVk7Ci0gIF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0LnBsYXRmb3JtID0gewotICAgIGRlZmluZVBy
b3BlcnR5OiB0cnVlLAotICAgIGhhc1Byb3BlcnR5QWNjZXNzb3JzOiB0cnVlCi0gIH07Ci0KLSAg
X2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQuRXJyb3IgPSBfZW1iZXJNZXRhbEVycm9yLmRlZmF1bHQ7
Ci0gIF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0Lmd1aWRGb3IgPSBfZW1iZXJNZXRhbFV0aWxzLmd1
aWRGb3I7Ci0gIF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0Lk1FVEFfREVTQyA9IF9lbWJlck1ldGFs
TWV0YS5NRVRBX0RFU0M7Ci0gIF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0Lm1ldGEgPSBfZW1iZXJN
ZXRhbE1ldGEubWV0YTsKLSAgX2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQuaW5zcGVjdCA9IF9lbWJl
ck1ldGFsVXRpbHMuaW5zcGVjdDsKLQotICBfZW1iZXJNZXRhbENvcmUuZGVmYXVsdC50cnlDYXRj
aEZpbmFsbHkgPSBfZW1iZXJNZXRhbFV0aWxzLmRlcHJlY2F0ZWRUcnlDYXRjaEZpbmFsbHk7Ci0g
IF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0Lm1ha2VBcnJheSA9IF9lbWJlck1ldGFsVXRpbHMubWFr
ZUFycmF5OwotICBfZW1iZXJNZXRhbENvcmUuZGVmYXVsdC5jYW5JbnZva2UgPSBfZW1iZXJNZXRh
bFV0aWxzLmNhbkludm9rZTsKLSAgX2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQudHJ5SW52b2tlID0g
X2VtYmVyTWV0YWxVdGlscy50cnlJbnZva2U7Ci0gIF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0Lndy
YXAgPSBfZW1iZXJNZXRhbFV0aWxzLndyYXA7Ci0gIF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0LmFw
cGx5ID0gX2VtYmVyTWV0YWxVdGlscy5hcHBseTsKLSAgX2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQu
YXBwbHlTdHIgPSBfZW1iZXJNZXRhbFV0aWxzLmFwcGx5U3RyOwotICBfZW1iZXJNZXRhbENvcmUu
ZGVmYXVsdC51dWlkID0gX2VtYmVyTWV0YWxVdGlscy51dWlkOwotCi0gIF9lbWJlck1ldGFsQ29y
ZS5kZWZhdWx0LkxvZ2dlciA9IF9lbWJlck1ldGFsTG9nZ2VyLmRlZmF1bHQ7Ci0KLSAgX2VtYmVy
TWV0YWxDb3JlLmRlZmF1bHQuZ2V0ID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0OwotICBf
ZW1iZXJNZXRhbENvcmUuZGVmYXVsdC5nZXRXaXRoRGVmYXVsdCA9IF9lbWJlck1ldGFsUHJvcGVy
dHlfZ2V0LmdldFdpdGhEZWZhdWx0OwotICBfZW1iZXJNZXRhbENvcmUuZGVmYXVsdC5fZ2V0UGF0
aCA9IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0Ll9nZXRQYXRoOwotCi0gIF9lbWJlck1ldGFsQ29y
ZS5kZWZhdWx0Lm9uID0gX2VtYmVyTWV0YWxFdmVudHMub247Ci0gIF9lbWJlck1ldGFsQ29yZS5k
ZWZhdWx0LmFkZExpc3RlbmVyID0gX2VtYmVyTWV0YWxFdmVudHMuYWRkTGlzdGVuZXI7Ci0gIF9l
bWJlck1ldGFsQ29yZS5kZWZhdWx0LnJlbW92ZUxpc3RlbmVyID0gX2VtYmVyTWV0YWxFdmVudHMu
cmVtb3ZlTGlzdGVuZXI7Ci0gIF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0Ll9zdXNwZW5kTGlzdGVu
ZXIgPSBfZW1iZXJNZXRhbEV2ZW50cy5zdXNwZW5kTGlzdGVuZXI7Ci0gIF9lbWJlck1ldGFsQ29y
ZS5kZWZhdWx0Ll9zdXNwZW5kTGlzdGVuZXJzID0gX2VtYmVyTWV0YWxFdmVudHMuc3VzcGVuZExp
c3RlbmVyczsKLSAgX2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQuc2VuZEV2ZW50ID0gX2VtYmVyTWV0
YWxFdmVudHMuc2VuZEV2ZW50OwotICBfZW1iZXJNZXRhbENvcmUuZGVmYXVsdC5oYXNMaXN0ZW5l
cnMgPSBfZW1iZXJNZXRhbEV2ZW50cy5oYXNMaXN0ZW5lcnM7Ci0gIF9lbWJlck1ldGFsQ29yZS5k
ZWZhdWx0LndhdGNoZWRFdmVudHMgPSBfZW1iZXJNZXRhbEV2ZW50cy53YXRjaGVkRXZlbnRzOwot
ICBfZW1iZXJNZXRhbENvcmUuZGVmYXVsdC5saXN0ZW5lcnNGb3IgPSBfZW1iZXJNZXRhbEV2ZW50
cy5saXN0ZW5lcnNGb3I7Ci0gIF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0LmFjY3VtdWxhdGVMaXN0
ZW5lcnMgPSBfZW1iZXJNZXRhbEV2ZW50cy5hY2N1bXVsYXRlTGlzdGVuZXJzOwotCi0gIF9lbWJl
ck1ldGFsQ29yZS5kZWZhdWx0Ll9PYnNlcnZlclNldCA9IF9lbWJlck1ldGFsT2JzZXJ2ZXJfc2V0
LmRlZmF1bHQ7Ci0KLSAgX2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQucHJvcGVydHlXaWxsQ2hhbmdl
ID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9ldmVudHMucHJvcGVydHlXaWxsQ2hhbmdlOwotICBfZW1i
ZXJNZXRhbENvcmUuZGVmYXVsdC5wcm9wZXJ0eURpZENoYW5nZSA9IF9lbWJlck1ldGFsUHJvcGVy
dHlfZXZlbnRzLnByb3BlcnR5RGlkQ2hhbmdlOwotICBfZW1iZXJNZXRhbENvcmUuZGVmYXVsdC5v
dmVycmlkZUNoYWlucyA9IF9lbWJlck1ldGFsUHJvcGVydHlfZXZlbnRzLm92ZXJyaWRlQ2hhaW5z
OwotICBfZW1iZXJNZXRhbENvcmUuZGVmYXVsdC5iZWdpblByb3BlcnR5Q2hhbmdlcyA9IF9lbWJl
ck1ldGFsUHJvcGVydHlfZXZlbnRzLmJlZ2luUHJvcGVydHlDaGFuZ2VzOwotICBfZW1iZXJNZXRh
bENvcmUuZGVmYXVsdC5lbmRQcm9wZXJ0eUNoYW5nZXMgPSBfZW1iZXJNZXRhbFByb3BlcnR5X2V2
ZW50cy5lbmRQcm9wZXJ0eUNoYW5nZXM7Ci0gIF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0LmNoYW5n
ZVByb3BlcnRpZXMgPSBfZW1iZXJNZXRhbFByb3BlcnR5X2V2ZW50cy5jaGFuZ2VQcm9wZXJ0aWVz
OwotCi0gIF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0LmRlZmluZVByb3BlcnR5ID0gX2VtYmVyTWV0
YWxQcm9wZXJ0aWVzLmRlZmluZVByb3BlcnR5OwotCi0gIF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0
LnNldCA9IF9lbWJlck1ldGFsUHJvcGVydHlfc2V0LnNldDsKLSAgX2VtYmVyTWV0YWxDb3JlLmRl
ZmF1bHQudHJ5U2V0ID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9zZXQudHJ5U2V0OwotCi0gIF9lbWJl
ck1ldGFsQ29yZS5kZWZhdWx0Lk9yZGVyZWRTZXQgPSBfZW1iZXJNZXRhbE1hcC5PcmRlcmVkU2V0
OwotICBfZW1iZXJNZXRhbENvcmUuZGVmYXVsdC5NYXAgPSBfZW1iZXJNZXRhbE1hcC5NYXA7Ci0g
IF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0Lk1hcFdpdGhEZWZhdWx0ID0gX2VtYmVyTWV0YWxNYXAu
TWFwV2l0aERlZmF1bHQ7Ci0KLSAgX2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQuZ2V0UHJvcGVydGll
cyA9IF9lbWJlck1ldGFsR2V0X3Byb3BlcnRpZXMuZGVmYXVsdDsKLSAgX2VtYmVyTWV0YWxDb3Jl
LmRlZmF1bHQuc2V0UHJvcGVydGllcyA9IF9lbWJlck1ldGFsU2V0X3Byb3BlcnRpZXMuZGVmYXVs
dDsKLQotICBfZW1iZXJNZXRhbENvcmUuZGVmYXVsdC53YXRjaEtleSA9IF9lbWJlck1ldGFsV2F0
Y2hfa2V5LndhdGNoS2V5OwotICBfZW1iZXJNZXRhbENvcmUuZGVmYXVsdC51bndhdGNoS2V5ID0g
X2VtYmVyTWV0YWxXYXRjaF9rZXkudW53YXRjaEtleTsKLQotICBfZW1iZXJNZXRhbENvcmUuZGVm
YXVsdC5yZW1vdmVDaGFpbldhdGNoZXIgPSBfZW1iZXJNZXRhbENoYWlucy5yZW1vdmVDaGFpbldh
dGNoZXI7Ci0gIF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0Ll9DaGFpbk5vZGUgPSBfZW1iZXJNZXRh
bENoYWlucy5DaGFpbk5vZGU7Ci0gIF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0LmZpbmlzaENoYWlu
cyA9IF9lbWJlck1ldGFsQ2hhaW5zLmZpbmlzaENoYWluczsKLQotICBfZW1iZXJNZXRhbENvcmUu
ZGVmYXVsdC53YXRjaFBhdGggPSBfZW1iZXJNZXRhbFdhdGNoX3BhdGgud2F0Y2hQYXRoOwotICBf
ZW1iZXJNZXRhbENvcmUuZGVmYXVsdC51bndhdGNoUGF0aCA9IF9lbWJlck1ldGFsV2F0Y2hfcGF0
aC51bndhdGNoUGF0aDsKLQotICBfZW1iZXJNZXRhbENvcmUuZGVmYXVsdC53YXRjaCA9IF9lbWJl
ck1ldGFsV2F0Y2hpbmcud2F0Y2g7Ci0gIF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0LmlzV2F0Y2hp
bmcgPSBfZW1iZXJNZXRhbFdhdGNoaW5nLmlzV2F0Y2hpbmc7Ci0gIF9lbWJlck1ldGFsQ29yZS5k
ZWZhdWx0LnVud2F0Y2ggPSBfZW1iZXJNZXRhbFdhdGNoaW5nLnVud2F0Y2g7Ci0gIF9lbWJlck1l
dGFsQ29yZS5kZWZhdWx0LnJld2F0Y2ggPSBfZW1iZXJNZXRhbFdhdGNoaW5nLnJld2F0Y2g7Ci0g
IF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0LmRlc3Ryb3kgPSBfZW1iZXJNZXRhbFdhdGNoaW5nLmRl
c3Ryb3k7Ci0KLSAgX2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQuZXhwYW5kUHJvcGVydGllcyA9IF9l
bWJlck1ldGFsRXhwYW5kX3Byb3BlcnRpZXMuZGVmYXVsdDsKLQotICBfZW1iZXJNZXRhbENvcmUu
ZGVmYXVsdC5Db21wdXRlZFByb3BlcnR5ID0gX2VtYmVyTWV0YWxDb21wdXRlZC5Db21wdXRlZFBy
b3BlcnR5OwotICBfZW1iZXJNZXRhbENvcmUuZGVmYXVsdC5jb21wdXRlZCA9IF9lbWJlck1ldGFs
Q29tcHV0ZWQuY29tcHV0ZWQ7Ci0gIF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0LmNhY2hlRm9yID0g
X2VtYmVyTWV0YWxDb21wdXRlZC5jYWNoZUZvcjsKLQotICBfZW1iZXJNZXRhbENvcmUuZGVmYXVs
dC5hZGRPYnNlcnZlciA9IF9lbWJlck1ldGFsT2JzZXJ2ZXIuYWRkT2JzZXJ2ZXI7Ci0gIF9lbWJl
ck1ldGFsQ29yZS5kZWZhdWx0Lm9ic2VydmVyc0ZvciA9IF9lbWJlck1ldGFsT2JzZXJ2ZXIub2Jz
ZXJ2ZXJzRm9yOwotICBfZW1iZXJNZXRhbENvcmUuZGVmYXVsdC5yZW1vdmVPYnNlcnZlciA9IF9l
bWJlck1ldGFsT2JzZXJ2ZXIucmVtb3ZlT2JzZXJ2ZXI7Ci0gIF9lbWJlck1ldGFsQ29yZS5kZWZh
dWx0Ll9zdXNwZW5kT2JzZXJ2ZXIgPSBfZW1iZXJNZXRhbE9ic2VydmVyLl9zdXNwZW5kT2JzZXJ2
ZXI7Ci0gIF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0Ll9zdXNwZW5kT2JzZXJ2ZXJzID0gX2VtYmVy
TWV0YWxPYnNlcnZlci5fc3VzcGVuZE9ic2VydmVyczsKLQotICBfZW1iZXJNZXRhbENvcmUuZGVm
YXVsdC5JU19CSU5ESU5HID0gX2VtYmVyTWV0YWxNaXhpbi5JU19CSU5ESU5HOwotICBfZW1iZXJN
ZXRhbENvcmUuZGVmYXVsdC5yZXF1aXJlZCA9IF9lbWJlck1ldGFsTWl4aW4ucmVxdWlyZWQ7Ci0g
IF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0LmFsaWFzTWV0aG9kID0gX2VtYmVyTWV0YWxNaXhpbi5h
bGlhc01ldGhvZDsKLSAgX2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQub2JzZXJ2ZXIgPSBfZW1iZXJN
ZXRhbE1peGluLm9ic2VydmVyOwotICBfZW1iZXJNZXRhbENvcmUuZGVmYXVsdC5pbW1lZGlhdGVP
YnNlcnZlciA9IF9lbWJlck1ldGFsTWl4aW4uX2ltbWVkaWF0ZU9ic2VydmVyOwotICBfZW1iZXJN
ZXRhbENvcmUuZGVmYXVsdC5taXhpbiA9IF9lbWJlck1ldGFsTWl4aW4ubWl4aW47Ci0gIF9lbWJl
ck1ldGFsQ29yZS5kZWZhdWx0Lk1peGluID0gX2VtYmVyTWV0YWxNaXhpbi5NaXhpbjsKLQotICBf
ZW1iZXJNZXRhbENvcmUuZGVmYXVsdC5iaW5kID0gX2VtYmVyTWV0YWxCaW5kaW5nLmJpbmQ7Ci0g
IF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0LkJpbmRpbmcgPSBfZW1iZXJNZXRhbEJpbmRpbmcuQmlu
ZGluZzsKLSAgX2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQuaXNHbG9iYWxQYXRoID0gX2VtYmVyTWV0
YWxQYXRoX2NhY2hlLmlzR2xvYmFsUGF0aDsKLQotICBfZW1iZXJNZXRhbENvcmUuZGVmYXVsdC5y
dW4gPSBfZW1iZXJNZXRhbFJ1bl9sb29wLmRlZmF1bHQ7Ci0KLSAgLyoqCi0gIEBjbGFzcyBCYWNr
YnVybmVyCi0gIEBmb3IgRW1iZXIKLSAgQHByaXZhdGUKLSAgKi8KLSAgX2VtYmVyTWV0YWxDb3Jl
LmRlZmF1bHQuQmFja2J1cm5lciA9IF9iYWNrYnVybmVyLmRlZmF1bHQ7Ci0gIC8vIHRoaXMgaXMg
dGhlIG5ldyBnbyBmb3J3YXJkLCBvbmNlIEVtYmVyIERhdGEgdXBkYXRlcyB0byB1c2luZyBgX0Jh
Y2tidXJuZXJgIHdlCi0gIC8vIGNhbiByZW1vdmUgdGhlIG5vbi11bmRlcnNjb3JlZCB2ZXJzaW9u
LgotICBfZW1iZXJNZXRhbENvcmUuZGVmYXVsdC5fQmFja2J1cm5lciA9IF9iYWNrYnVybmVyLmRl
ZmF1bHQ7Ci0KLSAgX2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQubGlicmFyaWVzID0gbmV3IF9lbWJl
ck1ldGFsTGlicmFyaWVzLmRlZmF1bHQoKTsKLSAgX2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQubGli
cmFyaWVzLnJlZ2lzdGVyQ29yZUxpYnJhcnkoJ0VtYmVyJywgX2VtYmVyTWV0YWxDb3JlLmRlZmF1
bHQuVkVSU0lPTik7Ci0KLSAgX2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQuaXNOb25lID0gX2VtYmVy
TWV0YWxJc19ub25lLmRlZmF1bHQ7Ci0gIF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0LmlzRW1wdHkg
PSBfZW1iZXJNZXRhbElzX2VtcHR5LmRlZmF1bHQ7Ci0gIF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0
LmlzQmxhbmsgPSBfZW1iZXJNZXRhbElzX2JsYW5rLmRlZmF1bHQ7Ci0gIF9lbWJlck1ldGFsQ29y
ZS5kZWZhdWx0LmlzUHJlc2VudCA9IF9lbWJlck1ldGFsSXNfcHJlc2VudC5kZWZhdWx0OwotCi0g
IF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0LmFzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgX2VtYmVy
TWV0YWxBc3NpZ24uZGVmYXVsdDsKLSAgX2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQubWVyZ2UgPSBf
ZW1iZXJNZXRhbE1lcmdlLmRlZmF1bHQ7Ci0KLSAgX2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQuRkVB
VFVSRVMgPSBfZW1iZXJNZXRhbEZlYXR1cmVzLkZFQVRVUkVTOwotICBfZW1iZXJNZXRhbENvcmUu
ZGVmYXVsdC5GRUFUVVJFUy5pc0VuYWJsZWQgPSBfZW1iZXJNZXRhbEZlYXR1cmVzLmRlZmF1bHQ7
Ci0KLSAgLyoqCi0gICAgQSBmdW5jdGlvbiBtYXkgYmUgYXNzaWduZWQgdG8gYEVtYmVyLm9uZXJy
b3JgIHRvIGJlIGNhbGxlZCB3aGVuIEVtYmVyCi0gICAgaW50ZXJuYWxzIGVuY291bnRlciBhbiBl
cnJvci4gVGhpcyBpcyB1c2VmdWwgZm9yIHNwZWNpYWxpemVkIGVycm9yIGhhbmRsaW5nCi0gICAg
YW5kIHJlcG9ydGluZyBjb2RlLgotICAKLSAgICBgYGBqYXZhc2NyaXB0Ci0gICAgRW1iZXIub25l
cnJvciA9IGZ1bmN0aW9uKGVycm9yKSB7Ci0gICAgICBFbS4kLmFqYXgoJy9yZXBvcnQtZXJyb3In
LCAnUE9TVCcsIHsKLSAgICAgICAgc3RhY2s6IGVycm9yLnN0YWNrLAotICAgICAgICBvdGhlcklu
Zm9ybWF0aW9uOiAnd2hhdGV2ZXIgYXBwIHN0YXRlIHlvdSB3YW50IHRvIHByb3ZpZGUnCi0gICAg
ICB9KTsKLSAgICB9OwotICAgIGBgYAotICAKLSAgICBJbnRlcm5hbGx5LCBgRW1iZXIub25lcnJv
cmAgaXMgdXNlZCBhcyBCYWNrYnVybmVyJ3MgZXJyb3IgaGFuZGxlci4KLSAgCi0gICAgQGV2ZW50
IG9uZXJyb3IKLSAgICBAZm9yIEVtYmVyCi0gICAgQHBhcmFtIHtFeGNlcHRpb259IGVycm9yIHRo
ZSBlcnJvciBvYmplY3QKLSAgICBAcHVibGljCi0gICovCi0gIF9lbWJlck1ldGFsQ29yZS5kZWZh
dWx0Lm9uZXJyb3IgPSBudWxsOwotICAvLyBFTkQgRVhQT1JUUwotCi0gIC8vIGRvIHRoaXMgZm9y
IHNpZGUtZWZmZWN0cyBvZiB1cGRhdGluZyBFbWJlci5hc3NlcnQsIHdhcm4sIGV0YyB3aGVuCi0g
IC8vIGVtYmVyLWRlYnVnIGlzIHByZXNlbnQKLSAgLy8gVGhpcyBuZWVkcyB0byBiZSBjYWxsZWQg
YmVmb3JlIGFueSBkZXByZWNhdGVGdW5jCi0gIGlmIChfcmVxdWlyZS5oYXMoJ2VtYmVyLWRlYnVn
JykpIHsKLSAgICBfcmVxdWlyZS5kZWZhdWx0KCdlbWJlci1kZWJ1ZycpOwotICB9IGVsc2Ugewot
ICAgIF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0LkRlYnVnID0ge307Ci0gICAgX2VtYmVyTWV0YWxD
b3JlLmRlZmF1bHQuRGVidWcucmVnaXN0ZXJEZXByZWNhdGlvbkhhbmRsZXIgPSBmdW5jdGlvbiAo
KSB7fTsKLSAgICBfZW1iZXJNZXRhbENvcmUuZGVmYXVsdC5EZWJ1Zy5yZWdpc3Rlcldhcm5IYW5k
bGVyID0gZnVuY3Rpb24gKCkge307Ci0gIH0KLQotICBfZW1iZXJNZXRhbENvcmUuZGVmYXVsdC5j
cmVhdGUgPSBfZW1iZXJNZXRhbERlYnVnLmRlcHJlY2F0ZUZ1bmMoJ0VtYmVyLmNyZWF0ZSBpcyBk
ZXByZWNhdGVkIGluIGZhdm9yIG9mIE9iamVjdC5jcmVhdGUnLCB7IGlkOiAnZW1iZXItbWV0YWwu
ZW1iZXItY3JlYXRlJywgdW50aWw6ICczLjAuMCcgfSwgT2JqZWN0LmNyZWF0ZSk7Ci0gIF9lbWJl
ck1ldGFsQ29yZS5kZWZhdWx0LmtleXMgPSBfZW1iZXJNZXRhbERlYnVnLmRlcHJlY2F0ZUZ1bmMo
J0VtYmVyLmtleXMgaXMgZGVwcmVjYXRlZCBpbiBmYXZvciBvZiBPYmplY3Qua2V5cycsIHsgaWQ6
ICdlbWJlci1tZXRhbC5lbWJlci5rZXlzJywgdW50aWw6ICczLjAuMCcgfSwgT2JqZWN0LmtleXMp
OwotCi0gIGV4cG9ydHMuZGVmYXVsdCA9IF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0OwotfSk7Ci1l
bmlmZWQoJ2VtYmVyLW1ldGFsL2luamVjdGVkX3Byb3BlcnR5JywgWydleHBvcnRzJywgJ2VtYmVy
LW1ldGFsL2RlYnVnJywgJ2VtYmVyLW1ldGFsL2NvbXB1dGVkJywgJ2VtYmVyLW1ldGFsL2FsaWFz
JywgJ2VtYmVyLW1ldGFsL3Byb3BlcnRpZXMnLCAnY29udGFpbmVyL293bmVyJ10sIGZ1bmN0aW9u
IChleHBvcnRzLCBfZW1iZXJNZXRhbERlYnVnLCBfZW1iZXJNZXRhbENvbXB1dGVkLCBfZW1iZXJN
ZXRhbEFsaWFzLCBfZW1iZXJNZXRhbFByb3BlcnRpZXMsIF9jb250YWluZXJPd25lcikgewotICAn
dXNlIHN0cmljdCc7Ci0KLSAgLyoqCi0gICAgUmVhZC1vbmx5IHByb3BlcnR5IHRoYXQgcmV0dXJu
cyB0aGUgcmVzdWx0IG9mIGEgY29udGFpbmVyIGxvb2t1cC4KLSAgCi0gICAgQGNsYXNzIEluamVj
dGVkUHJvcGVydHkKLSAgICBAbmFtZXNwYWNlIEVtYmVyCi0gICAgQGNvbnN0cnVjdG9yCi0gICAg
QHBhcmFtIHtTdHJpbmd9IHR5cGUgVGhlIGNvbnRhaW5lciB0eXBlIHRoZSBwcm9wZXJ0eSB3aWxs
IGxvb2t1cAotICAgIEBwYXJhbSB7U3RyaW5nfSBuYW1lIChvcHRpb25hbCkgVGhlIG5hbWUgdGhl
IHByb3BlcnR5IHdpbGwgbG9va3VwLCBkZWZhdWx0cwotICAgICAgICAgICB0byB0aGUgcHJvcGVy
dHkncyBuYW1lCi0gICAgQHByaXZhdGUKLSAgKi8KLSAgZnVuY3Rpb24gSW5qZWN0ZWRQcm9wZXJ0
eSh0eXBlLCBuYW1lKSB7Ci0gICAgdGhpcy50eXBlID0gdHlwZTsKLSAgICB0aGlzLm5hbWUgPSBu
YW1lOwotCi0gICAgdGhpcy5fc3VwZXIkQ29uc3RydWN0b3IoaW5qZWN0ZWRQcm9wZXJ0eUdldCk7
Ci0gICAgQWxpYXNlZFByb3BlcnR5UHJvdG90eXBlLm9uZVdheS5jYWxsKHRoaXMpOwotICB9Ci0K
LSAgZnVuY3Rpb24gaW5qZWN0ZWRQcm9wZXJ0eUdldChrZXlOYW1lKSB7Ci0gICAgdmFyIGRlc2Mg
PSB0aGlzW2tleU5hbWVdOwotICAgIHZhciBvd25lciA9IF9jb250YWluZXJPd25lci5nZXRPd25l
cih0aGlzKSB8fCB0aGlzLmNvbnRhaW5lcjsgLy8gZmFsbGJhY2sgdG8gYGNvbnRhaW5lcmAgZm9y
IGJhY2t3YXJkcyBjb21wYXQKLQotICAgIF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0KCdJbmplY3Rl
ZFByb3BlcnRpZXMgc2hvdWxkIGJlIGRlZmluZWQgd2l0aCB0aGUgRW1iZXIuaW5qZWN0IGNvbXB1
dGVkIHByb3BlcnR5IG1hY3Jvcy4nLCBkZXNjICYmIGRlc2MuaXNEZXNjcmlwdG9yICYmIGRlc2Mu
dHlwZSk7Ci0gICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ0F0dGVtcHRpbmcgdG8gbG9va3Vw
IGFuIGluamVjdGVkIHByb3BlcnR5IG9uIGFuIG9iamVjdCB3aXRob3V0IGEgY29udGFpbmVyLCBl
bnN1cmUgdGhhdCB0aGUgb2JqZWN0IHdhcyBpbnN0YW50aWF0ZWQgdmlhIGEgY29udGFpbmVyLics
IG93bmVyKTsKLQotICAgIHJldHVybiBvd25lci5sb29rdXAoZGVzYy50eXBlICsgJzonICsgKGRl
c2MubmFtZSB8fCBrZXlOYW1lKSk7Ci0gIH0KLQotICBJbmplY3RlZFByb3BlcnR5LnByb3RvdHlw
ZSA9IE9iamVjdC5jcmVhdGUoX2VtYmVyTWV0YWxQcm9wZXJ0aWVzLkRlc2NyaXB0b3IucHJvdG90
eXBlKTsKLQotICB2YXIgSW5qZWN0ZWRQcm9wZXJ0eVByb3RvdHlwZSA9IEluamVjdGVkUHJvcGVy
dHkucHJvdG90eXBlOwotICB2YXIgQ29tcHV0ZWRQcm9wZXJ0eVByb3RvdHlwZSA9IF9lbWJlck1l
dGFsQ29tcHV0ZWQuQ29tcHV0ZWRQcm9wZXJ0eS5wcm90b3R5cGU7Ci0gIHZhciBBbGlhc2VkUHJv
cGVydHlQcm90b3R5cGUgPSBfZW1iZXJNZXRhbEFsaWFzLkFsaWFzZWRQcm9wZXJ0eS5wcm90b3R5
cGU7Ci0KLSAgSW5qZWN0ZWRQcm9wZXJ0eVByb3RvdHlwZS5fc3VwZXIkQ29uc3RydWN0b3IgPSBf
ZW1iZXJNZXRhbENvbXB1dGVkLkNvbXB1dGVkUHJvcGVydHk7Ci0KLSAgSW5qZWN0ZWRQcm9wZXJ0
eVByb3RvdHlwZS5nZXQgPSBDb21wdXRlZFByb3BlcnR5UHJvdG90eXBlLmdldDsKLSAgSW5qZWN0
ZWRQcm9wZXJ0eVByb3RvdHlwZS5yZWFkT25seSA9IENvbXB1dGVkUHJvcGVydHlQcm90b3R5cGUu
cmVhZE9ubHk7Ci0KLSAgSW5qZWN0ZWRQcm9wZXJ0eVByb3RvdHlwZS50ZWFyZG93biA9IENvbXB1
dGVkUHJvcGVydHlQcm90b3R5cGUudGVhcmRvd247Ci0KLSAgZXhwb3J0cy5kZWZhdWx0ID0gSW5q
ZWN0ZWRQcm9wZXJ0eTsKLX0pOwotZW5pZmVkKCdlbWJlci1tZXRhbC9pbnN0cnVtZW50YXRpb24n
LCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwvY29yZScsICdlbWJlci1tZXRhbC9mZWF0dXJlcydd
LCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0YWxDb3JlLCBfZW1iZXJNZXRhbEZlYXR1cmVz
KSB7Ci0gICd1c2Ugc3RyaWN0JzsKLQotICBleHBvcnRzLmluc3RydW1lbnQgPSBpbnN0cnVtZW50
OwotICBleHBvcnRzLl9pbnN0cnVtZW50U3RhcnQgPSBfaW5zdHJ1bWVudFN0YXJ0OwotICBleHBv
cnRzLnN1YnNjcmliZSA9IHN1YnNjcmliZTsKLSAgZXhwb3J0cy51bnN1YnNjcmliZSA9IHVuc3Vi
c2NyaWJlOwotICBleHBvcnRzLnJlc2V0ID0gcmVzZXQ7Ci0KLSAgLyoqCi0gICAgVGhlIHB1cnBv
c2Ugb2YgdGhlIEVtYmVyIEluc3RydW1lbnRhdGlvbiBtb2R1bGUgaXMKLSAgICB0byBwcm92aWRl
IGVmZmljaWVudCwgZ2VuZXJhbC1wdXJwb3NlIGluc3RydW1lbnRhdGlvbgotICAgIGZvciBFbWJl
ci4KLSAgCi0gICAgU3Vic2NyaWJlIHRvIGEgbGlzdGVuZXIgYnkgdXNpbmcgYEVtYmVyLnN1YnNj
cmliZWA6Ci0gIAotICAgIGBgYGphdmFzY3JpcHQKLSAgICBFbWJlci5zdWJzY3JpYmUoInJlbmRl
ciIsIHsKLSAgICAgIGJlZm9yZTogZnVuY3Rpb24obmFtZSwgdGltZXN0YW1wLCBwYXlsb2FkKSB7
Ci0gIAotICAgICAgfSwKLSAgCi0gICAgICBhZnRlcjogZnVuY3Rpb24obmFtZSwgdGltZXN0YW1w
LCBwYXlsb2FkKSB7Ci0gIAotICAgICAgfQotICAgIH0pOwotICAgIGBgYAotICAKLSAgICBJZiB5
b3UgcmV0dXJuIGEgdmFsdWUgZnJvbSB0aGUgYGJlZm9yZWAgY2FsbGJhY2ssIHRoYXQgc2FtZQot
ICAgIHZhbHVlIHdpbGwgYmUgcGFzc2VkIGFzIGEgZm91cnRoIHBhcmFtZXRlciB0byB0aGUgYGFm
dGVyYAotICAgIGNhbGxiYWNrLgotICAKLSAgICBJbnN0cnVtZW50IGEgYmxvY2sgb2YgY29kZSBi
eSB1c2luZyBgRW1iZXIuaW5zdHJ1bWVudGA6Ci0gIAotICAgIGBgYGphdmFzY3JpcHQKLSAgICBF
bWJlci5pbnN0cnVtZW50KCJyZW5kZXIuaGFuZGxlYmFycyIsIHBheWxvYWQsIGZ1bmN0aW9uKCkg
ewotICAgICAgLy8gcmVuZGVyaW5nIGxvZ2ljCi0gICAgfSwgYmluZGluZyk7Ci0gICAgYGBgCi0g
IAotICAgIEV2ZW50IG5hbWVzIHBhc3NlZCB0byBgRW1iZXIuaW5zdHJ1bWVudGAgYXJlIG5hbWVz
cGFjZWQKLSAgICBieSBwZXJpb2RzLCBmcm9tIG1vcmUgZ2VuZXJhbCB0byBtb3JlIHNwZWNpZmlj
LiBTdWJzY3JpYmVycwotICAgIGNhbiBsaXN0ZW4gZm9yIGV2ZW50cyBieSB3aGF0ZXZlciBsZXZl
bCBvZiBncmFudWxhcml0eSB0aGV5Ci0gICAgYXJlIGludGVyZXN0ZWQgaW4uCi0gIAotICAgIElu
IHRoZSBhYm92ZSBleGFtcGxlLCB0aGUgZXZlbnQgaXMgYHJlbmRlci5oYW5kbGViYXJzYCwKLSAg
ICBhbmQgdGhlIHN1YnNjcmliZXIgbGlzdGVuZWQgZm9yIGFsbCBldmVudHMgYmVnaW5uaW5nIHdp
dGgKLSAgICBgcmVuZGVyYC4gSXQgd291bGQgcmVjZWl2ZSBjYWxsYmFja3MgZm9yIGV2ZW50cyBu
YW1lZAotICAgIGByZW5kZXJgLCBgcmVuZGVyLmhhbmRsZWJhcnNgLCBgcmVuZGVyLmNvbnRhaW5l
cmAsIG9yCi0gICAgZXZlbiBgcmVuZGVyLmhhbmRsZWJhcnMubGF5b3V0YC4KLSAgCi0gICAgQGNs
YXNzIEluc3RydW1lbnRhdGlvbgotICAgIEBuYW1lc3BhY2UgRW1iZXIKLSAgICBAc3RhdGljCi0g
ICAgQHByaXZhdGUKLSAgKi8KLSAgdmFyIHN1YnNjcmliZXJzID0gW107Ci0gIGV4cG9ydHMuc3Vi
c2NyaWJlcnMgPSBzdWJzY3JpYmVyczsKLSAgdmFyIGNhY2hlID0ge307Ci0KLSAgdmFyIHBvcHVs
YXRlTGlzdGVuZXJzID0gZnVuY3Rpb24gKG5hbWUpIHsKLSAgICB2YXIgbGlzdGVuZXJzID0gW107
Ci0gICAgdmFyIHN1YnNjcmliZXI7Ci0KLSAgICBmb3IgKHZhciBpID0gMCwgbCA9IHN1YnNjcmli
ZXJzLmxlbmd0aDsgaSA8IGw7IGkrKykgewotICAgICAgc3Vic2NyaWJlciA9IHN1YnNjcmliZXJz
W2ldOwotICAgICAgaWYgKHN1YnNjcmliZXIucmVnZXgudGVzdChuYW1lKSkgewotICAgICAgICBs
aXN0ZW5lcnMucHVzaChzdWJzY3JpYmVyLm9iamVjdCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAg
Y2FjaGVbbmFtZV0gPSBsaXN0ZW5lcnM7Ci0gICAgcmV0dXJuIGxpc3RlbmVyczsKLSAgfTsKLQot
ICB2YXIgdGltZSA9IChmdW5jdGlvbiAoKSB7Ci0gICAgdmFyIHBlcmYgPSAndW5kZWZpbmVkJyAh
PT0gdHlwZW9mIHdpbmRvdyA/IHdpbmRvdy5wZXJmb3JtYW5jZSB8fCB7fSA6IHt9OwotICAgIHZh
ciBmbiA9IHBlcmYubm93IHx8IHBlcmYubW96Tm93IHx8IHBlcmYud2Via2l0Tm93IHx8IHBlcmYu
bXNOb3cgfHwgcGVyZi5vTm93OwotICAgIC8vIGZuLmJpbmQgd2lsbCBiZSBhdmFpbGFibGUgaW4g
YWxsIHRoZSBicm93c2VycyB0aGF0IHN1cHBvcnQgdGhlIGFkdmFuY2VkIHdpbmRvdy5wZXJmb3Jt
YW5jZS4uLiA7LSkKLSAgICByZXR1cm4gZm4gPyBmbi5iaW5kKHBlcmYpIDogZnVuY3Rpb24gKCkg
ewotICAgICAgcmV0dXJuICtuZXcgRGF0ZSgpOwotICAgIH07Ci0gIH0pKCk7Ci0KLSAgLyoqCi0g
ICAgTm90aWZpZXMgZXZlbnQncyBzdWJzY3JpYmVycywgY2FsbHMgYGJlZm9yZWAgYW5kIGBhZnRl
cmAgaG9va3MuCi0gIAotICAgIEBtZXRob2QgaW5zdHJ1bWVudAotICAgIEBuYW1lc3BhY2UgRW1i
ZXIuSW5zdHJ1bWVudGF0aW9uCi0gIAotICAgIEBwYXJhbSB7U3RyaW5nfSBbbmFtZV0gTmFtZXNw
YWNlZCBldmVudCBuYW1lLgotICAgIEBwYXJhbSB7T2JqZWN0fSBfcGF5bG9hZAotICAgIEBwYXJh
bSB7RnVuY3Rpb259IGNhbGxiYWNrIEZ1bmN0aW9uIHRoYXQgeW91J3JlIGluc3RydW1lbnRpbmcu
Ci0gICAgQHBhcmFtIHtPYmplY3R9IGJpbmRpbmcgQ29udGV4dCB0aGF0IGluc3RydW1lbnQgZnVu
Y3Rpb24gaXMgY2FsbGVkIHdpdGguCi0gICAgQHByaXZhdGUKLSAgKi8KLQotICBmdW5jdGlvbiBp
bnN0cnVtZW50KG5hbWUsIF9wYXlsb2FkLCBjYWxsYmFjaywgYmluZGluZykgewotICAgIGlmIChh
cmd1bWVudHMubGVuZ3RoIDw9IDMgJiYgdHlwZW9mIF9wYXlsb2FkID09PSAnZnVuY3Rpb24nKSB7
Ci0gICAgICBiaW5kaW5nID0gY2FsbGJhY2s7Ci0gICAgICBjYWxsYmFjayA9IF9wYXlsb2FkOwot
ICAgICAgX3BheWxvYWQgPSB1bmRlZmluZWQ7Ci0gICAgfQotICAgIGlmIChzdWJzY3JpYmVycy5s
ZW5ndGggPT09IDApIHsKLSAgICAgIHJldHVybiBjYWxsYmFjay5jYWxsKGJpbmRpbmcpOwotICAg
IH0KLSAgICB2YXIgcGF5bG9hZCA9IF9wYXlsb2FkIHx8IHt9OwotICAgIHZhciBmaW5hbGl6ZXIg
PSBfaW5zdHJ1bWVudFN0YXJ0KG5hbWUsIGZ1bmN0aW9uICgpIHsKLSAgICAgIHJldHVybiBwYXls
b2FkOwotICAgIH0pOwotCi0gICAgaWYgKGZpbmFsaXplcikgewotICAgICAgcmV0dXJuIHdpdGhG
aW5hbGl6ZXIoY2FsbGJhY2ssIGZpbmFsaXplciwgcGF5bG9hZCwgYmluZGluZyk7Ci0gICAgfSBl
bHNlIHsKLSAgICAgIHJldHVybiBjYWxsYmFjay5jYWxsKGJpbmRpbmcpOwotICAgIH0KLSAgfQot
Ci0gIHZhciBmbGFnZ2VkSW5zdHJ1bWVudDsKLQotICBleHBvcnRzLmZsYWdnZWRJbnN0cnVtZW50
ID0gZmxhZ2dlZEluc3RydW1lbnQgPSBmdW5jdGlvbiAobmFtZSwgcGF5bG9hZCwgY2FsbGJhY2sp
IHsKLSAgICByZXR1cm4gY2FsbGJhY2soKTsKLSAgfTsKLSAgZXhwb3J0cy5mbGFnZ2VkSW5zdHJ1
bWVudCA9IGZsYWdnZWRJbnN0cnVtZW50OwotCi0gIGZ1bmN0aW9uIHdpdGhGaW5hbGl6ZXIoY2Fs
bGJhY2ssIGZpbmFsaXplciwgcGF5bG9hZCwgYmluZGluZykgewotICAgIHZhciByZXN1bHQgPSB1
bmRlZmluZWQ7Ci0gICAgdHJ5IHsKLSAgICAgIHJlc3VsdCA9IGNhbGxiYWNrLmNhbGwoYmluZGlu
Zyk7Ci0gICAgfSBjYXRjaCAoZSkgewotICAgICAgcGF5bG9hZC5leGNlcHRpb24gPSBlOwotICAg
ICAgcmVzdWx0ID0gcGF5bG9hZDsKLSAgICB9IGZpbmFsbHkgewotICAgICAgZmluYWxpemVyKCk7
Ci0gICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgfQotCi0gIC8vIHByaXZhdGUgZm9yIG5v
dwotCi0gIGZ1bmN0aW9uIF9pbnN0cnVtZW50U3RhcnQobmFtZSwgX3BheWxvYWQpIHsKLSAgICB2
YXIgbGlzdGVuZXJzID0gY2FjaGVbbmFtZV07Ci0KLSAgICBpZiAoIWxpc3RlbmVycykgewotICAg
ICAgbGlzdGVuZXJzID0gcG9wdWxhdGVMaXN0ZW5lcnMobmFtZSk7Ci0gICAgfQotCi0gICAgaWYg
KGxpc3RlbmVycy5sZW5ndGggPT09IDApIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICB2
YXIgcGF5bG9hZCA9IF9wYXlsb2FkKCk7Ci0KLSAgICB2YXIgU1RSVUNUVVJFRF9QUk9GSUxFID0g
X2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQuU1RSVUNUVVJFRF9QUk9GSUxFOwotICAgIHZhciB0aW1l
TmFtZTsKLSAgICBpZiAoU1RSVUNUVVJFRF9QUk9GSUxFKSB7Ci0gICAgICB0aW1lTmFtZSA9IG5h
bWUgKyAnOiAnICsgcGF5bG9hZC5vYmplY3Q7Ci0gICAgICBjb25zb2xlLnRpbWUodGltZU5hbWUp
OwotICAgIH0KLQotICAgIHZhciBsID0gbGlzdGVuZXJzLmxlbmd0aDsKLSAgICB2YXIgYmVmb3Jl
VmFsdWVzID0gbmV3IEFycmF5KGwpOwotICAgIHZhciBpLCBsaXN0ZW5lcjsKLSAgICB2YXIgdGlt
ZXN0YW1wID0gdGltZSgpOwotICAgIGZvciAoaSA9IDA7IGkgPCBsOyBpKyspIHsKLSAgICAgIGxp
c3RlbmVyID0gbGlzdGVuZXJzW2ldOwotICAgICAgYmVmb3JlVmFsdWVzW2ldID0gbGlzdGVuZXIu
YmVmb3JlKG5hbWUsIHRpbWVzdGFtcCwgcGF5bG9hZCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZ1
bmN0aW9uIF9pbnN0cnVtZW50RW5kKCkgewotICAgICAgdmFyIGksIGwsIGxpc3RlbmVyOwotICAg
ICAgdmFyIHRpbWVzdGFtcCA9IHRpbWUoKTsKLSAgICAgIGZvciAoaSA9IDAsIGwgPSBsaXN0ZW5l
cnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7Ci0gICAgICAgIGxpc3RlbmVyID0gbGlzdGVuZXJzW2ld
OwotICAgICAgICBpZiAodHlwZW9mIGxpc3RlbmVyLmFmdGVyID09PSAnZnVuY3Rpb24nKSB7Ci0g
ICAgICAgICAgbGlzdGVuZXIuYWZ0ZXIobmFtZSwgdGltZXN0YW1wLCBwYXlsb2FkLCBiZWZvcmVW
YWx1ZXNbaV0pOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGlmIChTVFJVQ1RVUkVEX1BS
T0ZJTEUpIHsKLSAgICAgICAgY29uc29sZS50aW1lRW5kKHRpbWVOYW1lKTsKLSAgICAgIH0KLSAg
ICB9OwotICB9Ci0KLSAgLyoqCi0gICAgU3Vic2NyaWJlcyB0byBhIHBhcnRpY3VsYXIgZXZlbnQg
b3IgaW5zdHJ1bWVudGVkIGJsb2NrIG9mIGNvZGUuCi0gIAotICAgIEBtZXRob2Qgc3Vic2NyaWJl
Ci0gICAgQG5hbWVzcGFjZSBFbWJlci5JbnN0cnVtZW50YXRpb24KLSAgCi0gICAgQHBhcmFtIHtT
dHJpbmd9IFtwYXR0ZXJuXSBOYW1lc3BhY2VkIGV2ZW50IG5hbWUuCi0gICAgQHBhcmFtIHtPYmpl
Y3R9IFtvYmplY3RdIEJlZm9yZSBhbmQgQWZ0ZXIgaG9va3MuCi0gIAotICAgIEByZXR1cm4ge1N1
YnNjcmliZXJ9Ci0gICAgQHByaXZhdGUKLSAgKi8KLQotICBmdW5jdGlvbiBzdWJzY3JpYmUocGF0
dGVybiwgb2JqZWN0KSB7Ci0gICAgdmFyIHBhdGhzID0gcGF0dGVybi5zcGxpdCgnLicpOwotICAg
IHZhciBwYXRoOwotICAgIHZhciByZWdleCA9IFtdOwotCi0gICAgZm9yICh2YXIgaSA9IDAsIGwg
PSBwYXRocy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKLSAgICAgIHBhdGggPSBwYXRoc1tpXTsKLSAg
ICAgIGlmIChwYXRoID09PSAnKicpIHsKLSAgICAgICAgcmVnZXgucHVzaCgnW15cXC5dKicpOwot
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgcmVnZXgucHVzaChwYXRoKTsKLSAgICAgIH0KLSAgICB9
Ci0KLSAgICByZWdleCA9IHJlZ2V4LmpvaW4oJ1xcLicpOwotICAgIHJlZ2V4ID0gcmVnZXggKyAn
KFxcLi4qKT8nOwotCi0gICAgdmFyIHN1YnNjcmliZXIgPSB7Ci0gICAgICBwYXR0ZXJuOiBwYXR0
ZXJuLAotICAgICAgcmVnZXg6IG5ldyBSZWdFeHAoJ14nICsgcmVnZXggKyAnJCcpLAotICAgICAg
b2JqZWN0OiBvYmplY3QKLSAgICB9OwotCi0gICAgc3Vic2NyaWJlcnMucHVzaChzdWJzY3JpYmVy
KTsKLSAgICBjYWNoZSA9IHt9OwotCi0gICAgcmV0dXJuIHN1YnNjcmliZXI7Ci0gIH0KLQotICAv
KioKLSAgICBVbnN1YnNjcmliZXMgZnJvbSBhIHBhcnRpY3VsYXIgZXZlbnQgb3IgaW5zdHJ1bWVu
dGVkIGJsb2NrIG9mIGNvZGUuCi0gIAotICAgIEBtZXRob2QgdW5zdWJzY3JpYmUKLSAgICBAbmFt
ZXNwYWNlIEVtYmVyLkluc3RydW1lbnRhdGlvbgotICAKLSAgICBAcGFyYW0ge09iamVjdH0gW3N1
YnNjcmliZXJdCi0gICAgQHByaXZhdGUKLSAgKi8KLQotICBmdW5jdGlvbiB1bnN1YnNjcmliZShz
dWJzY3JpYmVyKSB7Ci0gICAgdmFyIGluZGV4OwotCi0gICAgZm9yICh2YXIgaSA9IDAsIGwgPSBz
dWJzY3JpYmVycy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKLSAgICAgIGlmIChzdWJzY3JpYmVyc1tp
XSA9PT0gc3Vic2NyaWJlcikgewotICAgICAgICBpbmRleCA9IGk7Ci0gICAgICB9Ci0gICAgfQot
Ci0gICAgc3Vic2NyaWJlcnMuc3BsaWNlKGluZGV4LCAxKTsKLSAgICBjYWNoZSA9IHt9OwotICB9
Ci0KLSAgLyoqCi0gICAgUmVzZXRzIGBFbWJlci5JbnN0cnVtZW50YXRpb25gIGJ5IGZsdXNoaW5n
IGxpc3Qgb2Ygc3Vic2NyaWJlcnMuCi0gIAotICAgIEBtZXRob2QgcmVzZXQKLSAgICBAbmFtZXNw
YWNlIEVtYmVyLkluc3RydW1lbnRhdGlvbgotICAgIEBwcml2YXRlCi0gICovCi0KLSAgZnVuY3Rp
b24gcmVzZXQoKSB7Ci0gICAgc3Vic2NyaWJlcnMubGVuZ3RoID0gMDsKLSAgICBjYWNoZSA9IHt9
OwotICB9Ci19KTsKLWVuaWZlZCgnZW1iZXItbWV0YWwvaXNfYmxhbmsnLCBbJ2V4cG9ydHMnLCAn
ZW1iZXItbWV0YWwvaXNfZW1wdHknXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1ldGFsSXNf
ZW1wdHkpIHsKLSAgJ3VzZSBzdHJpY3QnOwotCi0gIGV4cG9ydHMuZGVmYXVsdCA9IGlzQmxhbms7
Ci0KLSAgLyoqCi0gICAgQSB2YWx1ZSBpcyBibGFuayBpZiBpdCBpcyBlbXB0eSBvciBhIHdoaXRl
c3BhY2Ugc3RyaW5nLgotICAKLSAgICBgYGBqYXZhc2NyaXB0Ci0gICAgRW1iZXIuaXNCbGFuaygp
OyAgICAgICAgICAgICAgICAvLyB0cnVlCi0gICAgRW1iZXIuaXNCbGFuayhudWxsKTsgICAgICAg
ICAgICAvLyB0cnVlCi0gICAgRW1iZXIuaXNCbGFuayh1bmRlZmluZWQpOyAgICAgICAvLyB0cnVl
Ci0gICAgRW1iZXIuaXNCbGFuaygnJyk7ICAgICAgICAgICAgICAvLyB0cnVlCi0gICAgRW1iZXIu
aXNCbGFuayhbXSk7ICAgICAgICAgICAgICAvLyB0cnVlCi0gICAgRW1iZXIuaXNCbGFuaygnXG5c
dCcpOyAgICAgICAgICAvLyB0cnVlCi0gICAgRW1iZXIuaXNCbGFuaygnICAnKTsgICAgICAgICAg
ICAvLyB0cnVlCi0gICAgRW1iZXIuaXNCbGFuayh7fSk7ICAgICAgICAgICAgICAvLyBmYWxzZQot
ICAgIEVtYmVyLmlzQmxhbmsoJ1xuXHQgSGVsbG8nKTsgICAgLy8gZmFsc2UKLSAgICBFbWJlci5p
c0JsYW5rKCdIZWxsbyB3b3JsZCcpOyAgIC8vIGZhbHNlCi0gICAgRW1iZXIuaXNCbGFuayhbMSwy
LDNdKTsgICAgICAgICAvLyBmYWxzZQotICAgIGBgYAotICAKLSAgICBAbWV0aG9kIGlzQmxhbmsK
LSAgICBAZm9yIEVtYmVyCi0gICAgQHBhcmFtIHtPYmplY3R9IG9iaiBWYWx1ZSB0byB0ZXN0Ci0g
ICAgQHJldHVybiB7Qm9vbGVhbn0KLSAgICBAc2luY2UgMS41LjAKLSAgICBAcHVibGljCi0gICov
Ci0KLSAgZnVuY3Rpb24gaXNCbGFuayhvYmopIHsKLSAgICByZXR1cm4gX2VtYmVyTWV0YWxJc19l
bXB0eS5kZWZhdWx0KG9iaikgfHwgdHlwZW9mIG9iaiA9PT0gJ3N0cmluZycgJiYgb2JqLm1hdGNo
KC9cUy8pID09PSBudWxsOwotICB9Ci19KTsKLWVuaWZlZCgnZW1iZXItbWV0YWwvaXNfZW1wdHkn
LCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwvcHJvcGVydHlfZ2V0JywgJ2VtYmVyLW1ldGFsL2lz
X25vbmUnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LCBfZW1i
ZXJNZXRhbElzX25vbmUpIHsKLSAgJ3VzZSBzdHJpY3QnOwotCi0gIC8qKgotICAgIFZlcmlmaWVz
IHRoYXQgYSB2YWx1ZSBpcyBgbnVsbGAgb3IgYW4gZW1wdHkgc3RyaW5nLCBlbXB0eSBhcnJheSwK
LSAgICBvciBlbXB0eSBmdW5jdGlvbi4KLSAgCi0gICAgQ29uc3RyYWlucyB0aGUgcnVsZXMgb24g
YEVtYmVyLmlzTm9uZWAgYnkgcmV0dXJuaW5nIHRydWUgZm9yIGVtcHR5Ci0gICAgc3RyaW5nIGFu
ZCBlbXB0eSBhcnJheXMuCi0gIAotICAgIGBgYGphdmFzY3JpcHQKLSAgICBFbWJlci5pc0VtcHR5
KCk7ICAgICAgICAgICAgICAgIC8vIHRydWUKLSAgICBFbWJlci5pc0VtcHR5KG51bGwpOyAgICAg
ICAgICAgIC8vIHRydWUKLSAgICBFbWJlci5pc0VtcHR5KHVuZGVmaW5lZCk7ICAgICAgIC8vIHRy
dWUKLSAgICBFbWJlci5pc0VtcHR5KCcnKTsgICAgICAgICAgICAgIC8vIHRydWUKLSAgICBFbWJl
ci5pc0VtcHR5KFtdKTsgICAgICAgICAgICAgIC8vIHRydWUKLSAgICBFbWJlci5pc0VtcHR5KHt9
KTsgICAgICAgICAgICAgIC8vIGZhbHNlCi0gICAgRW1iZXIuaXNFbXB0eSgnQWRhbSBIYXdraW5z
Jyk7ICAvLyBmYWxzZQotICAgIEVtYmVyLmlzRW1wdHkoWzAsMSwyXSk7ICAgICAgICAgLy8gZmFs
c2UKLSAgICBFbWJlci5pc0VtcHR5KCdcblx0Jyk7ICAgICAgICAgIC8vIGZhbHNlCi0gICAgRW1i
ZXIuaXNFbXB0eSgnICAnKTsgICAgICAgICAgICAvLyBmYWxzZQotICAgIGBgYAotICAKLSAgICBA
bWV0aG9kIGlzRW1wdHkKLSAgICBAZm9yIEVtYmVyCi0gICAgQHBhcmFtIHtPYmplY3R9IG9iaiBW
YWx1ZSB0byB0ZXN0Ci0gICAgQHJldHVybiB7Qm9vbGVhbn0KLSAgICBAcHVibGljCi0gICovCi0g
IGZ1bmN0aW9uIGlzRW1wdHkob2JqKSB7Ci0gICAgdmFyIG5vbmUgPSBfZW1iZXJNZXRhbElzX25v
bmUuZGVmYXVsdChvYmopOwotICAgIGlmIChub25lKSB7Ci0gICAgICByZXR1cm4gbm9uZTsKLSAg
ICB9Ci0KLSAgICBpZiAodHlwZW9mIG9iai5zaXplID09PSAnbnVtYmVyJykgewotICAgICAgcmV0
dXJuICFvYmouc2l6ZTsKLSAgICB9Ci0KLSAgICB2YXIgb2JqZWN0VHlwZSA9IHR5cGVvZiBvYmo7
Ci0KLSAgICBpZiAob2JqZWN0VHlwZSA9PT0gJ29iamVjdCcpIHsKLSAgICAgIHZhciBzaXplID0g
X2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KG9iaiwgJ3NpemUnKTsKLSAgICAgIGlmICh0eXBl
b2Ygc2l6ZSA9PT0gJ251bWJlcicpIHsKLSAgICAgICAgcmV0dXJuICFzaXplOwotICAgICAgfQot
ICAgIH0KLQotICAgIGlmICh0eXBlb2Ygb2JqLmxlbmd0aCA9PT0gJ251bWJlcicgJiYgb2JqZWN0
VHlwZSAhPT0gJ2Z1bmN0aW9uJykgewotICAgICAgcmV0dXJuICFvYmoubGVuZ3RoOwotICAgIH0K
LQotICAgIGlmIChvYmplY3RUeXBlID09PSAnb2JqZWN0JykgewotICAgICAgdmFyIGxlbmd0aCA9
IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldChvYmosICdsZW5ndGgnKTsKLSAgICAgIGlmICh0
eXBlb2YgbGVuZ3RoID09PSAnbnVtYmVyJykgewotICAgICAgICByZXR1cm4gIWxlbmd0aDsKLSAg
ICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBleHBvcnRzLmRlZmF1
bHQgPSBpc0VtcHR5OwotfSk7Ci1lbmlmZWQoImVtYmVyLW1ldGFsL2lzX25vbmUiLCBbImV4cG9y
dHMiXSwgZnVuY3Rpb24gKGV4cG9ydHMpIHsKLSAgLyoqCi0gICAgUmV0dXJucyB0cnVlIGlmIHRo
ZSBwYXNzZWQgdmFsdWUgaXMgbnVsbCBvciB1bmRlZmluZWQuIFRoaXMgYXZvaWRzIGVycm9ycwot
ICAgIGZyb20gSlNMaW50IGNvbXBsYWluaW5nIGFib3V0IHVzZSBvZiA9PSwgd2hpY2ggY2FuIGJl
IHRlY2huaWNhbGx5Ci0gICAgY29uZnVzaW5nLgotICAKLSAgICBgYGBqYXZhc2NyaXB0Ci0gICAg
RW1iZXIuaXNOb25lKCk7ICAgICAgICAgICAgICAvLyB0cnVlCi0gICAgRW1iZXIuaXNOb25lKG51
bGwpOyAgICAgICAgICAvLyB0cnVlCi0gICAgRW1iZXIuaXNOb25lKHVuZGVmaW5lZCk7ICAgICAv
LyB0cnVlCi0gICAgRW1iZXIuaXNOb25lKCcnKTsgICAgICAgICAgICAvLyBmYWxzZQotICAgIEVt
YmVyLmlzTm9uZShbXSk7ICAgICAgICAgICAgLy8gZmFsc2UKLSAgICBFbWJlci5pc05vbmUoZnVu
Y3Rpb24oKSB7fSk7IC8vIGZhbHNlCi0gICAgYGBgCi0gIAotICAgIEBtZXRob2QgaXNOb25lCi0g
ICAgQGZvciBFbWJlcgotICAgIEBwYXJhbSB7T2JqZWN0fSBvYmogVmFsdWUgdG8gdGVzdAotICAg
IEByZXR1cm4ge0Jvb2xlYW59Ci0gICAgQHB1YmxpYwotICAqLwotICAidXNlIHN0cmljdCI7Ci0K
LSAgZXhwb3J0cy5kZWZhdWx0ID0gaXNOb25lOwotCi0gIGZ1bmN0aW9uIGlzTm9uZShvYmopIHsK
LSAgICByZXR1cm4gb2JqID09PSBudWxsIHx8IG9iaiA9PT0gdW5kZWZpbmVkOwotICB9Ci19KTsK
LWVuaWZlZCgnZW1iZXItbWV0YWwvaXNfcHJlc2VudCcsIFsnZXhwb3J0cycsICdlbWJlci1tZXRh
bC9pc19ibGFuayddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0YWxJc19ibGFuaykgewot
ICAndXNlIHN0cmljdCc7Ci0KLSAgZXhwb3J0cy5kZWZhdWx0ID0gaXNQcmVzZW50OwotCi0gIC8q
KgotICAgIEEgdmFsdWUgaXMgcHJlc2VudCBpZiBpdCBub3QgYGlzQmxhbmtgLgotICAKLSAgICBg
YGBqYXZhc2NyaXB0Ci0gICAgRW1iZXIuaXNQcmVzZW50KCk7ICAgICAgICAgICAgICAgIC8vIGZh
bHNlCi0gICAgRW1iZXIuaXNQcmVzZW50KG51bGwpOyAgICAgICAgICAgIC8vIGZhbHNlCi0gICAg
RW1iZXIuaXNQcmVzZW50KHVuZGVmaW5lZCk7ICAgICAgIC8vIGZhbHNlCi0gICAgRW1iZXIuaXNQ
cmVzZW50KCcnKTsgICAgICAgICAgICAgIC8vIGZhbHNlCi0gICAgRW1iZXIuaXNQcmVzZW50KCcg
ICcpOyAgICAgICAgICAgIC8vIGZhbHNlCi0gICAgRW1iZXIuaXNQcmVzZW50KCdcblx0Jyk7ICAg
ICAgICAgIC8vIGZhbHNlCi0gICAgRW1iZXIuaXNQcmVzZW50KFtdKTsgICAgICAgICAgICAgIC8v
IGZhbHNlCi0gICAgRW1iZXIuaXNQcmVzZW50KHsgbGVuZ3RoOiAwIH0pICAgIC8vIGZhbHNlCi0g
ICAgRW1iZXIuaXNQcmVzZW50KGZhbHNlKTsgICAgICAgICAgIC8vIHRydWUKLSAgICBFbWJlci5p
c1ByZXNlbnQodHJ1ZSk7ICAgICAgICAgICAgLy8gdHJ1ZQotICAgIEVtYmVyLmlzUHJlc2VudCgn
c3RyaW5nJyk7ICAgICAgICAvLyB0cnVlCi0gICAgRW1iZXIuaXNQcmVzZW50KDApOyAgICAgICAg
ICAgICAgIC8vIHRydWUKLSAgICBFbWJlci5pc1ByZXNlbnQoZnVuY3Rpb24oKSB7fSkgICAgLy8g
dHJ1ZQotICAgIEVtYmVyLmlzUHJlc2VudCh7fSk7ICAgICAgICAgICAgICAvLyB0cnVlCi0gICAg
RW1iZXIuaXNQcmVzZW50KGZhbHNlKTsgICAgICAgICAgIC8vIHRydWUKLSAgICBFbWJlci5pc1By
ZXNlbnQoJ1xuXHQgSGVsbG8nKTsgICAgLy8gdHJ1ZQotICAgIEVtYmVyLmlzUHJlc2VudChbMSwy
LDNdKTsgICAgICAgICAvLyB0cnVlCi0gICAgYGBgCi0gIAotICAgIEBtZXRob2QgaXNQcmVzZW50
Ci0gICAgQGZvciBFbWJlcgotICAgIEBwYXJhbSB7T2JqZWN0fSBvYmogVmFsdWUgdG8gdGVzdAot
ICAgIEByZXR1cm4ge0Jvb2xlYW59Ci0gICAgQHNpbmNlIDEuOC4wCi0gICAgQHB1YmxpYwotICAq
LwotCi0gIGZ1bmN0aW9uIGlzUHJlc2VudChvYmopIHsKLSAgICByZXR1cm4gIV9lbWJlck1ldGFs
SXNfYmxhbmsuZGVmYXVsdChvYmopOwotICB9Ci19KTsKLWVuaWZlZCgnZW1iZXItbWV0YWwvbGli
cmFyaWVzJywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFsL2RlYnVnJywgJ2VtYmVyLW1ldGFsL2Zl
YXR1cmVzJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbERlYnVnLCBfZW1iZXJNZXRh
bEZlYXR1cmVzKSB7Ci0gICd1c2Ugc3RyaWN0JzsKLQotICAvKioKLSAgICBIZWxwZXIgY2xhc3Mg
dGhhdCBhbGxvd3MgeW91IHRvIHJlZ2lzdGVyIHlvdXIgbGlicmFyeSB3aXRoIEVtYmVyLgotICAK
LSAgICBTaW5nbGV0b24gY3JlYXRlZCBhdCBgRW1iZXIubGlicmFyaWVzYC4KLSAgCi0gICAgQGNs
YXNzIExpYnJhcmllcwotICAgIEBjb25zdHJ1Y3RvcgotICAgIEBwcml2YXRlCi0gICovCi0gIGZ1
bmN0aW9uIExpYnJhcmllcygpIHsKLSAgICB0aGlzLl9yZWdpc3RyeSA9IFtdOwotICAgIHRoaXMu
X2NvcmVMaWJJbmRleCA9IDA7Ci0gIH0KLQotICBMaWJyYXJpZXMucHJvdG90eXBlID0gewotICAg
IGNvbnN0cnVjdG9yOiBMaWJyYXJpZXMsCi0KLSAgICBfZ2V0TGlicmFyeUJ5TmFtZTogZnVuY3Rp
b24gKG5hbWUpIHsKLSAgICAgIHZhciBsaWJzID0gdGhpcy5fcmVnaXN0cnk7Ci0gICAgICB2YXIg
Y291bnQgPSBsaWJzLmxlbmd0aDsKLQotICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudDsg
aSsrKSB7Ci0gICAgICAgIGlmIChsaWJzW2ldLm5hbWUgPT09IG5hbWUpIHsKLSAgICAgICAgICBy
ZXR1cm4gbGlic1tpXTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0KLSAgICByZWdpc3Rl
cjogZnVuY3Rpb24gKG5hbWUsIHZlcnNpb24sIGlzQ29yZUxpYnJhcnkpIHsKLSAgICAgIHZhciBp
bmRleCA9IHRoaXMuX3JlZ2lzdHJ5Lmxlbmd0aDsKLQotICAgICAgaWYgKCF0aGlzLl9nZXRMaWJy
YXJ5QnlOYW1lKG5hbWUpKSB7Ci0gICAgICAgIGlmIChpc0NvcmVMaWJyYXJ5KSB7Ci0gICAgICAg
ICAgaW5kZXggPSB0aGlzLl9jb3JlTGliSW5kZXgrKzsKLSAgICAgICAgfQotICAgICAgICB0aGlz
Ll9yZWdpc3RyeS5zcGxpY2UoaW5kZXgsIDAsIHsgbmFtZTogbmFtZSwgdmVyc2lvbjogdmVyc2lv
biB9KTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIF9lbWJlck1ldGFsRGVidWcud2FybignTGli
cmFyeSAiJyArIG5hbWUgKyAnIiBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQgd2l0aCBFbWJlci4nLCBm
YWxzZSwgeyBpZDogJ2VtYmVyLW1ldGFsLmxpYnJhcmllcy1yZWdpc3RlcicgfSk7Ci0gICAgICB9
Ci0gICAgfSwKLQotICAgIHJlZ2lzdGVyQ29yZUxpYnJhcnk6IGZ1bmN0aW9uIChuYW1lLCB2ZXJz
aW9uKSB7Ci0gICAgICB0aGlzLnJlZ2lzdGVyKG5hbWUsIHZlcnNpb24sIHRydWUpOwotICAgIH0s
Ci0KLSAgICBkZVJlZ2lzdGVyOiBmdW5jdGlvbiAobmFtZSkgewotICAgICAgdmFyIGxpYiA9IHRo
aXMuX2dldExpYnJhcnlCeU5hbWUobmFtZSk7Ci0gICAgICB2YXIgaW5kZXg7Ci0KLSAgICAgIGlm
IChsaWIpIHsKLSAgICAgICAgaW5kZXggPSB0aGlzLl9yZWdpc3RyeS5pbmRleE9mKGxpYik7Ci0g
ICAgICAgIHRoaXMuX3JlZ2lzdHJ5LnNwbGljZShpbmRleCwgMSk7Ci0gICAgICB9Ci0gICAgfQot
ICB9OwotCi0gIGV4cG9ydHMuZGVmYXVsdCA9IExpYnJhcmllczsKLX0pOwotZW5pZmVkKCdlbWJl
ci1tZXRhbC9sb2dnZXInLCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwvY29yZScsICdlbWJlci1t
ZXRhbC9lcnJvciddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0YWxDb3JlLCBfZW1iZXJN
ZXRhbEVycm9yKSB7Ci0gICd1c2Ugc3RyaWN0JzsKLQotICBmdW5jdGlvbiBLKCkgewotICAgIHJl
dHVybiB0aGlzOwotICB9Ci0KLSAgZnVuY3Rpb24gY29uc29sZU1ldGhvZChuYW1lKSB7Ci0gICAg
dmFyIGNvbnNvbGVPYmosIGxvZ1RvQ29uc29sZTsKLSAgICBpZiAoX2VtYmVyTWV0YWxDb3JlLmRl
ZmF1bHQuaW1wb3J0cy5jb25zb2xlKSB7Ci0gICAgICBjb25zb2xlT2JqID0gX2VtYmVyTWV0YWxD
b3JlLmRlZmF1bHQuaW1wb3J0cy5jb25zb2xlOwotICAgIH0gZWxzZSBpZiAodHlwZW9mIGNvbnNv
bGUgIT09ICd1bmRlZmluZWQnKSB7Ci0gICAgICBjb25zb2xlT2JqID0gY29uc29sZTsKLSAgICB9
Ci0KLSAgICB2YXIgbWV0aG9kID0gdHlwZW9mIGNvbnNvbGVPYmogPT09ICdvYmplY3QnID8gY29u
c29sZU9ialtuYW1lXSA6IG51bGw7Ci0KLSAgICBpZiAobWV0aG9kKSB7Ci0gICAgICAvLyBPbGRl
ciBJRSBkb2Vzbid0IHN1cHBvcnQgYmluZCwgYnV0IENocm9tZSBuZWVkcyBpdAotICAgICAgaWYg
KHR5cGVvZiBtZXRob2QuYmluZCA9PT0gJ2Z1bmN0aW9uJykgewotICAgICAgICBsb2dUb0NvbnNv
bGUgPSBtZXRob2QuYmluZChjb25zb2xlT2JqKTsKLSAgICAgICAgbG9nVG9Db25zb2xlLmRpc3Bs
YXlOYW1lID0gJ2NvbnNvbGUuJyArIG5hbWU7Ci0gICAgICAgIHJldHVybiBsb2dUb0NvbnNvbGU7
Ci0gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBtZXRob2QuYXBwbHkgPT09ICdmdW5jdGlvbicpIHsK
LSAgICAgICAgbG9nVG9Db25zb2xlID0gZnVuY3Rpb24gKCkgewotICAgICAgICAgIG1ldGhvZC5h
cHBseShjb25zb2xlT2JqLCBhcmd1bWVudHMpOwotICAgICAgICB9OwotICAgICAgICBsb2dUb0Nv
bnNvbGUuZGlzcGxheU5hbWUgPSAnY29uc29sZS4nICsgbmFtZTsKLSAgICAgICAgcmV0dXJuIGxv
Z1RvQ29uc29sZTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7
Ci0gICAgICAgICAgdmFyIG1lc3NhZ2UgPSBBcnJheS5wcm90b3R5cGUuam9pbi5jYWxsKGFyZ3Vt
ZW50cywgJywgJyk7Ci0gICAgICAgICAgbWV0aG9kKG1lc3NhZ2UpOwotICAgICAgICB9OwotICAg
ICAgfQotICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIGFzc2VydFBvbHlmaWxsKHRlc3QsIG1lc3Nh
Z2UpIHsKLSAgICBpZiAoIXRlc3QpIHsKLSAgICAgIHRyeSB7Ci0gICAgICAgIC8vIGF0dGVtcHQg
dG8gcHJlc2VydmUgdGhlIHN0YWNrCi0gICAgICAgIHRocm93IG5ldyBfZW1iZXJNZXRhbEVycm9y
LmRlZmF1bHQoJ2Fzc2VydGlvbiBmYWlsZWQ6ICcgKyBtZXNzYWdlKTsKLSAgICAgIH0gY2F0Y2gg
KGVycm9yKSB7Ci0gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewotICAgICAgICAgIHRo
cm93IGVycm9yOwotICAgICAgICB9LCAwKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioK
LSAgICBJbnNpZGUgRW1iZXItTWV0YWwsIHNpbXBseSB1c2VzIHRoZSBtZXRob2RzIGZyb20gYGlt
cG9ydHMuY29uc29sZWAuCi0gICAgT3ZlcnJpZGUgdGhpcyB0byBwcm92aWRlIG1vcmUgcm9idXN0
IGxvZ2dpbmcgZnVuY3Rpb25hbGl0eS4KLSAgCi0gICAgQGNsYXNzIExvZ2dlcgotICAgIEBuYW1l
c3BhY2UgRW1iZXIKLSAgICBAcHVibGljCi0gICovCi0gIGV4cG9ydHMuZGVmYXVsdCA9IHsKLSAg
ICAvKioKLSAgICAgTG9ncyB0aGUgYXJndW1lbnRzIHRvIHRoZSBjb25zb2xlLgotICAgICBZb3Ug
Y2FuIHBhc3MgYXMgbWFueSBhcmd1bWVudHMgYXMgeW91IHdhbnQgYW5kIHRoZXkgd2lsbCBiZSBq
b2luZWQgdG9nZXRoZXIgd2l0aCBhIHNwYWNlLgotICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAg
IHZhciBmb28gPSAxOwotICAgICAgRW1iZXIuTG9nZ2VyLmxvZygnbG9nIHZhbHVlIG9mIGZvbzon
LCBmb28pOwotICAgICAgLy8gImxvZyB2YWx1ZSBvZiBmb286IDEiIHdpbGwgYmUgcHJpbnRlZCB0
byB0aGUgY29uc29sZQotICAgICAgYGBgCi0gICAgICBAbWV0aG9kIGxvZwotICAgICBAZm9yIEVt
YmVyLkxvZ2dlcgotICAgICBAcGFyYW0geyp9IGFyZ3VtZW50cwotICAgICBAcHVibGljCi0gICAg
Ki8KLSAgICBsb2c6IGNvbnNvbGVNZXRob2QoJ2xvZycpIHx8IEssCi0KLSAgICAvKioKLSAgICAg
UHJpbnRzIHRoZSBhcmd1bWVudHMgdG8gdGhlIGNvbnNvbGUgd2l0aCBhIHdhcm5pbmcgaWNvbi4K
LSAgICAgWW91IGNhbiBwYXNzIGFzIG1hbnkgYXJndW1lbnRzIGFzIHlvdSB3YW50IGFuZCB0aGV5
IHdpbGwgYmUgam9pbmVkIHRvZ2V0aGVyIHdpdGggYSBzcGFjZS4KLSAgICAgICBgYGBqYXZhc2Ny
aXB0Ci0gICAgICBFbWJlci5Mb2dnZXIud2FybignU29tZXRoaW5nIGhhcHBlbmVkIScpOwotICAg
ICAgLy8gIlNvbWV0aGluZyBoYXBwZW5lZCEiIHdpbGwgYmUgcHJpbnRlZCB0byB0aGUgY29uc29s
ZSB3aXRoIGEgd2FybmluZyBpY29uLgotICAgICAgYGBgCi0gICAgICBAbWV0aG9kIHdhcm4KLSAg
ICAgQGZvciBFbWJlci5Mb2dnZXIKLSAgICAgQHBhcmFtIHsqfSBhcmd1bWVudHMKLSAgICAgQHB1
YmxpYwotICAgICovCi0gICAgd2FybjogY29uc29sZU1ldGhvZCgnd2FybicpIHx8IEssCi0KLSAg
ICAvKioKLSAgICAgUHJpbnRzIHRoZSBhcmd1bWVudHMgdG8gdGhlIGNvbnNvbGUgd2l0aCBhbiBl
cnJvciBpY29uLCByZWQgdGV4dCBhbmQgYSBzdGFjayB0cmFjZS4KLSAgICAgWW91IGNhbiBwYXNz
IGFzIG1hbnkgYXJndW1lbnRzIGFzIHlvdSB3YW50IGFuZCB0aGV5IHdpbGwgYmUgam9pbmVkIHRv
Z2V0aGVyIHdpdGggYSBzcGFjZS4KLSAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICBFbWJlci5M
b2dnZXIuZXJyb3IoJ0RhbmdlciEgRGFuZ2VyIScpOwotICAgICAgLy8gIkRhbmdlciEgRGFuZ2Vy
ISIgd2lsbCBiZSBwcmludGVkIHRvIHRoZSBjb25zb2xlIGluIHJlZCB0ZXh0LgotICAgICAgYGBg
Ci0gICAgICBAbWV0aG9kIGVycm9yCi0gICAgIEBmb3IgRW1iZXIuTG9nZ2VyCi0gICAgIEBwYXJh
bSB7Kn0gYXJndW1lbnRzCi0gICAgIEBwdWJsaWMKLSAgICAqLwotICAgIGVycm9yOiBjb25zb2xl
TWV0aG9kKCdlcnJvcicpIHx8IEssCi0KLSAgICAvKioKLSAgICAgTG9ncyB0aGUgYXJndW1lbnRz
IHRvIHRoZSBjb25zb2xlLgotICAgICBZb3UgY2FuIHBhc3MgYXMgbWFueSBhcmd1bWVudHMgYXMg
eW91IHdhbnQgYW5kIHRoZXkgd2lsbCBiZSBqb2luZWQgdG9nZXRoZXIgd2l0aCBhIHNwYWNlLgot
ICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgIHZhciBmb28gPSAxOwotICAgICAgRW1iZXIuTG9n
Z2VyLmluZm8oJ2xvZyB2YWx1ZSBvZiBmb286JywgZm9vKTsKLSAgICAgIC8vICJsb2cgdmFsdWUg
b2YgZm9vOiAxIiB3aWxsIGJlIHByaW50ZWQgdG8gdGhlIGNvbnNvbGUKLSAgICAgIGBgYAotICAg
ICAgQG1ldGhvZCBpbmZvCi0gICAgIEBmb3IgRW1iZXIuTG9nZ2VyCi0gICAgIEBwYXJhbSB7Kn0g
YXJndW1lbnRzCi0gICAgIEBwdWJsaWMKLSAgICAqLwotICAgIGluZm86IGNvbnNvbGVNZXRob2Qo
J2luZm8nKSB8fCBLLAotCi0gICAgLyoqCi0gICAgIExvZ3MgdGhlIGFyZ3VtZW50cyB0byB0aGUg
Y29uc29sZSBpbiBibHVlIHRleHQuCi0gICAgIFlvdSBjYW4gcGFzcyBhcyBtYW55IGFyZ3VtZW50
cyBhcyB5b3Ugd2FudCBhbmQgdGhleSB3aWxsIGJlIGpvaW5lZCB0b2dldGhlciB3aXRoIGEgc3Bh
Y2UuCi0gICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgdmFyIGZvbyA9IDE7Ci0gICAgICBFbWJl
ci5Mb2dnZXIuZGVidWcoJ2xvZyB2YWx1ZSBvZiBmb286JywgZm9vKTsKLSAgICAgIC8vICJsb2cg
dmFsdWUgb2YgZm9vOiAxIiB3aWxsIGJlIHByaW50ZWQgdG8gdGhlIGNvbnNvbGUKLSAgICAgIGBg
YAotICAgICAgQG1ldGhvZCBkZWJ1ZwotICAgICBAZm9yIEVtYmVyLkxvZ2dlcgotICAgICBAcGFy
YW0geyp9IGFyZ3VtZW50cwotICAgICBAcHVibGljCi0gICAgKi8KLSAgICBkZWJ1ZzogY29uc29s
ZU1ldGhvZCgnZGVidWcnKSB8fCBjb25zb2xlTWV0aG9kKCdpbmZvJykgfHwgSywKLQotICAgIC8q
KgotICAgICBJZiB0aGUgdmFsdWUgcGFzc2VkIGludG8gYEVtYmVyLkxvZ2dlci5hc3NlcnRgIGlz
IG5vdCB0cnV0aHkgaXQgd2lsbCB0aHJvdyBhbiBlcnJvciB3aXRoIGEgc3RhY2sgdHJhY2UuCi0g
ICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgRW1iZXIuTG9nZ2VyLmFzc2VydCh0cnVlKTsgLy8g
dW5kZWZpbmVkCi0gICAgICBFbWJlci5Mb2dnZXIuYXNzZXJ0KHRydWUgPT09IGZhbHNlKTsgLy8g
VGhyb3dzIGFuIEFzc2VydGlvbiBmYWlsZWQgZXJyb3IuCi0gICAgICBFbWJlci5Mb2dnZXIuYXNz
ZXJ0KHRydWUgPT09IGZhbHNlLCAnU29tZXRoaW5nIGludmFsaWQnKTsgLy8gVGhyb3dzIGFuIEFz
c2VydGlvbiBmYWlsZWQgZXJyb3Igd2l0aCBtZXNzYWdlLgotICAgICAgYGBgCi0gICAgICBAbWV0
aG9kIGFzc2VydAotICAgICBAZm9yIEVtYmVyLkxvZ2dlcgotICAgICBAcGFyYW0ge0Jvb2xlYW59
IGJvb2wgVmFsdWUgdG8gdGVzdAotICAgICBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZSBBc3NlcnRp
b24gbWVzc2FnZSBvbiBmYWlsZWQKLSAgICAgQHB1YmxpYwotICAgICovCi0gICAgYXNzZXJ0OiBj
b25zb2xlTWV0aG9kKCdhc3NlcnQnKSB8fCBhc3NlcnRQb2x5ZmlsbAotICB9OwotfSk7Ci0vLyBF
bWJlci5pbXBvcnRzCi1lbmlmZWQoJ2VtYmVyLW1ldGFsL21hcCcsIFsnZXhwb3J0cycsICdlbWJl
ci1tZXRhbC9jb3JlJywgJ2VtYmVyLW1ldGFsL3V0aWxzJywgJ2VtYmVyLW1ldGFsL2VtcHR5X29i
amVjdCddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0YWxDb3JlLCBfZW1iZXJNZXRhbFV0
aWxzLCBfZW1iZXJNZXRhbEVtcHR5X29iamVjdCkgewotICAvKioKLSAgQG1vZHVsZSBlbWJlcgot
ICBAc3VibW9kdWxlIGVtYmVyLW1ldGFsCi0gICovCi0KLSAgLyoKLSAgICBKYXZhU2NyaXB0IChi
ZWZvcmUgRVM2KSBkb2VzIG5vdCBoYXZlIGEgTWFwIGltcGxlbWVudGF0aW9uLiBPYmplY3RzLAot
ICAgIHdoaWNoIGFyZSBvZnRlbiB1c2VkIGFzIGRpY3Rpb25hcmllcywgbWF5IG9ubHkgaGF2ZSBT
dHJpbmdzIGFzIGtleXMuCi0gIAotICAgIEJlY2F1c2UgRW1iZXIgaGFzIGEgd2F5IHRvIGdldCBh
IHVuaXF1ZSBpZGVudGlmaWVyIGZvciBldmVyeSBvYmplY3QKLSAgICB2aWEgYEVtYmVyLmd1aWRG
b3JgLCB3ZSBjYW4gaW1wbGVtZW50IGEgcGVyZm9ybWFudCBNYXAgd2l0aCBhcmJpdHJhcnkKLSAg
ICBrZXlzLiBCZWNhdXNlIGl0IGlzIGNvbW1vbmx5IHVzZWQgaW4gbG93LWxldmVsIGJvb2trZWVw
aW5nLCBNYXAgaXMKLSAgICBpbXBsZW1lbnRlZCBhcyBhIHB1cmUgSmF2YVNjcmlwdCBvYmplY3Qg
Zm9yIHBlcmZvcm1hbmNlLgotICAKLSAgICBUaGlzIGltcGxlbWVudGF0aW9uIGZvbGxvd3MgdGhl
IGN1cnJlbnQgaXRlcmF0aW9uIG9mIHRoZSBFUzYgcHJvcG9zYWwgZm9yCi0gICAgbWFwcyAoaHR0
cDovL3dpa2kuZWNtYXNjcmlwdC5vcmcvZG9rdS5waHA/aWQ9aGFybW9ueTpzaW1wbGVfbWFwc19h
bmRfc2V0cyksCi0gICAgd2l0aCBvbmUgZXhjZXB0aW9uOiAgYXMgd2UgZG8gbm90IGhhdmUgdGhl
IGx1eHVyeSBvZiBpbi1WTSBpdGVyYXRpb24sIHdlIGltcGxlbWVudCBhCi0gICAgZm9yRWFjaCBt
ZXRob2QgZm9yIGl0ZXJhdGlvbi4KLSAgCi0gICAgTWFwIGlzIG1vY2tlZCBvdXQgdG8gbG9vayBs
aWtlIGFuIEVtYmVyIG9iamVjdCwgc28geW91IGNhbiBkbwotICAgIGBFbWJlci5NYXAuY3JlYXRl
KClgIGZvciBzeW1tZXRyeSB3aXRoIG90aGVyIEVtYmVyIGNsYXNzZXMuCi0gICovCi0KLSAgJ3Vz
ZSBzdHJpY3QnOwotCi0gIGZ1bmN0aW9uIG1pc3NpbmdGdW5jdGlvbihmbikgewotICAgIHRocm93
IG5ldyBUeXBlRXJyb3IoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGZuKSArICcgaXMg
bm90IGEgZnVuY3Rpb24nKTsKLSAgfQotCi0gIGZ1bmN0aW9uIG1pc3NpbmdOZXcobmFtZSkgewot
ICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0NvbnN0cnVjdG9yICcgKyBuYW1lICsgJyByZXF1aXJl
cyBcJ25ld1wnJyk7Ci0gIH0KLQotICBmdW5jdGlvbiBjb3B5TnVsbChvYmopIHsKLSAgICB2YXIg
b3V0cHV0ID0gbmV3IF9lbWJlck1ldGFsRW1wdHlfb2JqZWN0LmRlZmF1bHQoKTsKLQotICAgIGZv
ciAodmFyIHByb3AgaW4gb2JqKSB7Ci0gICAgICAvLyBoYXNPd25Qcm9wZXJ5IGlzIG5vdCBuZWVk
ZWQgYmVjYXVzZSBvYmogaXMgbmV3IEVtcHR5T2JqZWN0KCk7Ci0gICAgICBvdXRwdXRbcHJvcF0g
PSBvYmpbcHJvcF07Ci0gICAgfQotCi0gICAgcmV0dXJuIG91dHB1dDsKLSAgfQotCi0gIGZ1bmN0
aW9uIGNvcHlNYXAob3JpZ2luYWwsIG5ld09iamVjdCkgewotICAgIHZhciBrZXlzID0gb3JpZ2lu
YWwuX2tleXMuY29weSgpOwotICAgIHZhciB2YWx1ZXMgPSBjb3B5TnVsbChvcmlnaW5hbC5fdmFs
dWVzKTsKLQotICAgIG5ld09iamVjdC5fa2V5cyA9IGtleXM7Ci0gICAgbmV3T2JqZWN0Ll92YWx1
ZXMgPSB2YWx1ZXM7Ci0gICAgbmV3T2JqZWN0LnNpemUgPSBvcmlnaW5hbC5zaXplOwotCi0gICAg
cmV0dXJuIG5ld09iamVjdDsKLSAgfQotCi0gIC8qKgotICAgIFRoaXMgY2xhc3MgaXMgdXNlZCBp
bnRlcm5hbGx5IGJ5IEVtYmVyIGFuZCBFbWJlciBEYXRhLgotICAgIFBsZWFzZSBkbyBub3QgdXNl
IGl0IGF0IHRoaXMgdGltZS4gV2UgcGxhbiB0byBjbGVhbiBpdCB1cAotICAgIGFuZCBhZGQgbWFu
eSB0ZXN0cyBzb29uLgotICAKLSAgICBAY2xhc3MgT3JkZXJlZFNldAotICAgIEBuYW1lc3BhY2Ug
RW1iZXIKLSAgICBAY29uc3RydWN0b3IKLSAgICBAcHJpdmF0ZQotICAqLwotICBmdW5jdGlvbiBP
cmRlcmVkU2V0KCkgewotICAgIGlmICh0aGlzIGluc3RhbmNlb2YgT3JkZXJlZFNldCkgewotICAg
ICAgdGhpcy5jbGVhcigpOwotICAgICAgdGhpcy5fc2lsZW5jZVJlbW92ZURlcHJlY2F0aW9uID0g
ZmFsc2U7Ci0gICAgfSBlbHNlIHsKLSAgICAgIG1pc3NpbmdOZXcoJ09yZGVyZWRTZXQnKTsKLSAg
ICB9Ci0gIH0KLQotICAvKioKLSAgICBAbWV0aG9kIGNyZWF0ZQotICAgIEBzdGF0aWMKLSAgICBA
cmV0dXJuIHtFbWJlci5PcmRlcmVkU2V0fQotICAgIEBwcml2YXRlCi0gICovCi0gIE9yZGVyZWRT
ZXQuY3JlYXRlID0gZnVuY3Rpb24gKCkgewotICAgIHZhciBDb25zdHJ1Y3RvciA9IHRoaXM7Ci0K
LSAgICByZXR1cm4gbmV3IENvbnN0cnVjdG9yKCk7Ci0gIH07Ci0KLSAgT3JkZXJlZFNldC5wcm90
b3R5cGUgPSB7Ci0gICAgY29uc3RydWN0b3I6IE9yZGVyZWRTZXQsCi0gICAgLyoqCi0gICAgICBA
bWV0aG9kIGNsZWFyCi0gICAgICBAcHJpdmF0ZQotICAgICovCi0gICAgY2xlYXI6IGZ1bmN0aW9u
ICgpIHsKLSAgICAgIHRoaXMucHJlc2VuY2VTZXQgPSBuZXcgX2VtYmVyTWV0YWxFbXB0eV9vYmpl
Y3QuZGVmYXVsdCgpOwotICAgICAgdGhpcy5saXN0ID0gW107Ci0gICAgICB0aGlzLnNpemUgPSAw
OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgIEBtZXRob2QgYWRkCi0gICAgICBAcGFyYW0gb2Jq
Ci0gICAgICBAcGFyYW0gZ3VpZCAob3B0aW9uYWwsIGFuZCBmb3IgaW50ZXJuYWwgdXNlKQotICAg
ICAgQHJldHVybiB7RW1iZXIuT3JkZXJlZFNldH0KLSAgICAgIEBwcml2YXRlCi0gICAgKi8KLSAg
ICBhZGQ6IGZ1bmN0aW9uIChvYmosIF9ndWlkKSB7Ci0gICAgICB2YXIgZ3VpZCA9IF9ndWlkIHx8
IF9lbWJlck1ldGFsVXRpbHMuZ3VpZEZvcihvYmopOwotICAgICAgdmFyIHByZXNlbmNlU2V0ID0g
dGhpcy5wcmVzZW5jZVNldDsKLSAgICAgIHZhciBsaXN0ID0gdGhpcy5saXN0OwotCi0gICAgICBp
ZiAocHJlc2VuY2VTZXRbZ3VpZF0gIT09IHRydWUpIHsKLSAgICAgICAgcHJlc2VuY2VTZXRbZ3Vp
ZF0gPSB0cnVlOwotICAgICAgICB0aGlzLnNpemUgPSBsaXN0LnB1c2gob2JqKTsKLSAgICAgIH0K
LQotICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAgQHNpbmNlIDEu
OC4wCi0gICAgICBAbWV0aG9kIGRlbGV0ZQotICAgICAgQHBhcmFtIG9iagotICAgICAgQHBhcmFt
IF9ndWlkIChvcHRpb25hbCBhbmQgZm9yIGludGVybmFsIHVzZSBvbmx5KQotICAgICAgQHJldHVy
biB7Qm9vbGVhbn0KLSAgICAgIEBwcml2YXRlCi0gICAgKi8KLSAgICBkZWxldGU6IGZ1bmN0aW9u
IChvYmosIF9ndWlkKSB7Ci0gICAgICB2YXIgZ3VpZCA9IF9ndWlkIHx8IF9lbWJlck1ldGFsVXRp
bHMuZ3VpZEZvcihvYmopOwotICAgICAgdmFyIHByZXNlbmNlU2V0ID0gdGhpcy5wcmVzZW5jZVNl
dDsKLSAgICAgIHZhciBsaXN0ID0gdGhpcy5saXN0OwotCi0gICAgICBpZiAocHJlc2VuY2VTZXRb
Z3VpZF0gPT09IHRydWUpIHsKLSAgICAgICAgZGVsZXRlIHByZXNlbmNlU2V0W2d1aWRdOwotICAg
ICAgICB2YXIgaW5kZXggPSBsaXN0LmluZGV4T2Yob2JqKTsKLSAgICAgICAgaWYgKGluZGV4ID4g
LTEpIHsKLSAgICAgICAgICBsaXN0LnNwbGljZShpbmRleCwgMSk7Ci0gICAgICAgIH0KLSAgICAg
ICAgdGhpcy5zaXplID0gbGlzdC5sZW5ndGg7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
fSBlbHNlIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgIH0sCi0KLSAgICAv
KioKLSAgICAgIEBtZXRob2QgaXNFbXB0eQotICAgICAgQHJldHVybiB7Qm9vbGVhbn0KLSAgICAg
IEBwcml2YXRlCi0gICAgKi8KLSAgICBpc0VtcHR5OiBmdW5jdGlvbiAoKSB7Ci0gICAgICByZXR1
cm4gdGhpcy5zaXplID09PSAwOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgIEBtZXRob2QgaGFz
Ci0gICAgICBAcGFyYW0gb2JqCi0gICAgICBAcmV0dXJuIHtCb29sZWFufQotICAgICAgQHByaXZh
dGUKLSAgICAqLwotICAgIGhhczogZnVuY3Rpb24gKG9iaikgewotICAgICAgaWYgKHRoaXMuc2l6
ZSA9PT0gMCkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0KLSAgICAgIHZhciBn
dWlkID0gX2VtYmVyTWV0YWxVdGlscy5ndWlkRm9yKG9iaik7Ci0gICAgICB2YXIgcHJlc2VuY2VT
ZXQgPSB0aGlzLnByZXNlbmNlU2V0OwotCi0gICAgICByZXR1cm4gcHJlc2VuY2VTZXRbZ3VpZF0g
PT09IHRydWU7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAgQG1ldGhvZCBmb3JFYWNoCi0gICAg
ICBAcGFyYW0ge0Z1bmN0aW9ufSBmbgotICAgICAgQHBhcmFtIHNlbGYKLSAgICAgIEBwcml2YXRl
Ci0gICAgKi8KLSAgICBmb3JFYWNoOiBmdW5jdGlvbiAoZm4gLyosIC4uLnRoaXNBcmcqLykgewot
ICAgICAgaWYgKHR5cGVvZiBmbiAhPT0gJ2Z1bmN0aW9uJykgewotICAgICAgICBtaXNzaW5nRnVu
Y3Rpb24oZm4pOwotICAgICAgfQotCi0gICAgICBpZiAodGhpcy5zaXplID09PSAwKSB7Ci0gICAg
ICAgIHJldHVybjsKLSAgICAgIH0KLQotICAgICAgdmFyIGxpc3QgPSB0aGlzLmxpc3Q7Ci0gICAg
ICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDsKLSAgICAgIHZhciBpOwotCi0gICAgICBp
ZiAobGVuZ3RoID09PSAyKSB7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsg
aSsrKSB7Ci0gICAgICAgICAgZm4uY2FsbChhcmd1bWVudHNbMV0sIGxpc3RbaV0pOwotICAgICAg
ICB9Ci0gICAgICB9IGVsc2UgewotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7
IGkrKykgewotICAgICAgICAgIGZuKGxpc3RbaV0pOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAg
fSwKLQotICAgIC8qKgotICAgICAgQG1ldGhvZCB0b0FycmF5Ci0gICAgICBAcmV0dXJuIHtBcnJh
eX0KLSAgICAgIEBwcml2YXRlCi0gICAgKi8KLSAgICB0b0FycmF5OiBmdW5jdGlvbiAoKSB7Ci0g
ICAgICByZXR1cm4gdGhpcy5saXN0LnNsaWNlKCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAg
QG1ldGhvZCBjb3B5Ci0gICAgICBAcmV0dXJuIHtFbWJlci5PcmRlcmVkU2V0fQotICAgICAgQHBy
aXZhdGUKLSAgICAqLwotICAgIGNvcHk6IGZ1bmN0aW9uICgpIHsKLSAgICAgIHZhciBDb25zdHJ1
Y3RvciA9IHRoaXMuY29uc3RydWN0b3I7Ci0gICAgICB2YXIgc2V0ID0gbmV3IENvbnN0cnVjdG9y
KCk7Ci0KLSAgICAgIHNldC5fc2lsZW5jZVJlbW92ZURlcHJlY2F0aW9uID0gdGhpcy5fc2lsZW5j
ZVJlbW92ZURlcHJlY2F0aW9uOwotICAgICAgc2V0LnByZXNlbmNlU2V0ID0gY29weU51bGwodGhp
cy5wcmVzZW5jZVNldCk7Ci0gICAgICBzZXQubGlzdCA9IHRoaXMudG9BcnJheSgpOwotICAgICAg
c2V0LnNpemUgPSB0aGlzLnNpemU7Ci0KLSAgICAgIHJldHVybiBzZXQ7Ci0gICAgfQotICB9Owot
Ci0gIC8qKgotICAgIEEgTWFwIHN0b3JlcyB2YWx1ZXMgaW5kZXhlZCBieSBrZXlzLiBVbmxpa2Ug
SmF2YVNjcmlwdCdzCi0gICAgZGVmYXVsdCBPYmplY3RzLCB0aGUga2V5cyBvZiBhIE1hcCBjYW4g
YmUgYW55IEphdmFTY3JpcHQKLSAgICBvYmplY3QuCi0gIAotICAgIEludGVybmFsbHksIGEgTWFw
IGhhcyB0d28gZGF0YSBzdHJ1Y3R1cmVzOgotICAKLSAgICAxLiBga2V5c2A6IGFuIE9yZGVyZWRT
ZXQgb2YgYWxsIG9mIHRoZSBleGlzdGluZyBrZXlzCi0gICAgMi4gYHZhbHVlc2A6IGEgSmF2YVNj
cmlwdCBPYmplY3QgaW5kZXhlZCBieSB0aGUgYEVtYmVyLmd1aWRGb3Ioa2V5KWAKLSAgCi0gICAg
V2hlbiBhIGtleS92YWx1ZSBwYWlyIGlzIGFkZGVkIGZvciB0aGUgZmlyc3QgdGltZSwgd2UKLSAg
ICBhZGQgdGhlIGtleSB0byB0aGUgYGtleXNgIE9yZGVyZWRTZXQsIGFuZCBjcmVhdGUgb3IKLSAg
ICByZXBsYWNlIGFuIGVudHJ5IGluIGB2YWx1ZXNgLiBXaGVuIGFuIGVudHJ5IGlzIGRlbGV0ZWQs
Ci0gICAgd2UgZGVsZXRlIGl0cyBlbnRyeSBpbiBga2V5c2AgYW5kIGB2YWx1ZXNgLgotICAKLSAg
ICBAY2xhc3MgTWFwCi0gICAgQG5hbWVzcGFjZSBFbWJlcgotICAgIEBwcml2YXRlCi0gICAgQGNv
bnN0cnVjdG9yCi0gICovCi0gIGZ1bmN0aW9uIE1hcCgpIHsKLSAgICBpZiAodGhpcyBpbnN0YW5j
ZW9mIHRoaXMuY29uc3RydWN0b3IpIHsKLSAgICAgIHRoaXMuX2tleXMgPSBPcmRlcmVkU2V0LmNy
ZWF0ZSgpOwotICAgICAgdGhpcy5fa2V5cy5fc2lsZW5jZVJlbW92ZURlcHJlY2F0aW9uID0gdHJ1
ZTsKLSAgICAgIHRoaXMuX3ZhbHVlcyA9IG5ldyBfZW1iZXJNZXRhbEVtcHR5X29iamVjdC5kZWZh
dWx0KCk7Ci0gICAgICB0aGlzLnNpemUgPSAwOwotICAgIH0gZWxzZSB7Ci0gICAgICBtaXNzaW5n
TmV3KCdPcmRlcmVkU2V0Jyk7Ci0gICAgfQotICB9Ci0KLSAgX2VtYmVyTWV0YWxDb3JlLmRlZmF1
bHQuTWFwID0gTWFwOwotCi0gIC8qKgotICAgIEBtZXRob2QgY3JlYXRlCi0gICAgQHN0YXRpYwot
ICAgIEBwcml2YXRlCi0gICovCi0gIE1hcC5jcmVhdGUgPSBmdW5jdGlvbiAoKSB7Ci0gICAgdmFy
IENvbnN0cnVjdG9yID0gdGhpczsKLSAgICByZXR1cm4gbmV3IENvbnN0cnVjdG9yKCk7Ci0gIH07
Ci0KLSAgTWFwLnByb3RvdHlwZSA9IHsKLSAgICBjb25zdHJ1Y3RvcjogTWFwLAotCi0gICAgLyoq
Ci0gICAgICBUaGlzIHByb3BlcnR5IHdpbGwgY2hhbmdlIGFzIHRoZSBudW1iZXIgb2Ygb2JqZWN0
cyBpbiB0aGUgbWFwIGNoYW5nZXMuCi0gICAgICAgQHNpbmNlIDEuOC4wCi0gICAgICBAcHJvcGVy
dHkgc2l6ZQotICAgICAgQHR5cGUgbnVtYmVyCi0gICAgICBAZGVmYXVsdCAwCi0gICAgICBAcHJp
dmF0ZQotICAgICovCi0gICAgc2l6ZTogMCwKLQotICAgIC8qKgotICAgICAgUmV0cmlldmUgdGhl
IHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBhIGdpdmVuIGtleS4KLSAgICAgICBAbWV0aG9kIGdldAot
ICAgICAgQHBhcmFtIHsqfSBrZXkKLSAgICAgIEByZXR1cm4geyp9IHRoZSB2YWx1ZSBhc3NvY2lh
dGVkIHdpdGggdGhlIGtleSwgb3IgYHVuZGVmaW5lZGAKLSAgICAgIEBwcml2YXRlCi0gICAgKi8K
LSAgICBnZXQ6IGZ1bmN0aW9uIChrZXkpIHsKLSAgICAgIGlmICh0aGlzLnNpemUgPT09IDApIHsK
LSAgICAgICAgcmV0dXJuOwotICAgICAgfQotCi0gICAgICB2YXIgdmFsdWVzID0gdGhpcy5fdmFs
dWVzOwotICAgICAgdmFyIGd1aWQgPSBfZW1iZXJNZXRhbFV0aWxzLmd1aWRGb3Ioa2V5KTsKLQot
ICAgICAgcmV0dXJuIHZhbHVlc1tndWlkXTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICBBZGRz
IGEgdmFsdWUgdG8gdGhlIG1hcC4gSWYgYSB2YWx1ZSBmb3IgdGhlIGdpdmVuIGtleSBoYXMgYWxy
ZWFkeSBiZWVuCi0gICAgICBwcm92aWRlZCwgdGhlIG5ldyB2YWx1ZSB3aWxsIHJlcGxhY2UgdGhl
IG9sZCB2YWx1ZS4KLSAgICAgICBAbWV0aG9kIHNldAotICAgICAgQHBhcmFtIHsqfSBrZXkKLSAg
ICAgIEBwYXJhbSB7Kn0gdmFsdWUKLSAgICAgIEByZXR1cm4ge0VtYmVyLk1hcH0KLSAgICAgIEBw
cml2YXRlCi0gICAgKi8KLSAgICBzZXQ6IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7Ci0gICAgICB2
YXIga2V5cyA9IHRoaXMuX2tleXM7Ci0gICAgICB2YXIgdmFsdWVzID0gdGhpcy5fdmFsdWVzOwot
ICAgICAgdmFyIGd1aWQgPSBfZW1iZXJNZXRhbFV0aWxzLmd1aWRGb3Ioa2V5KTsKLQotICAgICAg
Ly8gZW5zdXJlIHdlIGRvbid0IHN0b3JlIC0wCi0gICAgICB2YXIgayA9IGtleSA9PT0gLTAgPyAw
IDoga2V5OwotCi0gICAgICBrZXlzLmFkZChrLCBndWlkKTsKLQotICAgICAgdmFsdWVzW2d1aWRd
ID0gdmFsdWU7Ci0KLSAgICAgIHRoaXMuc2l6ZSA9IGtleXMuc2l6ZTsKLQotICAgICAgcmV0dXJu
IHRoaXM7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAgUmVtb3ZlcyBhIHZhbHVlIGZyb20gdGhl
IG1hcCBmb3IgYW4gYXNzb2NpYXRlZCBrZXkuCi0gICAgICAgQHNpbmNlIDEuOC4wCi0gICAgICBA
bWV0aG9kIGRlbGV0ZQotICAgICAgQHBhcmFtIHsqfSBrZXkKLSAgICAgIEByZXR1cm4ge0Jvb2xl
YW59IHRydWUgaWYgYW4gaXRlbSB3YXMgcmVtb3ZlZCwgZmFsc2Ugb3RoZXJ3aXNlCi0gICAgICBA
cHJpdmF0ZQotICAgICovCi0gICAgZGVsZXRlOiBmdW5jdGlvbiAoa2V5KSB7Ci0gICAgICBpZiAo
dGhpcy5zaXplID09PSAwKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAg
IC8vIGRvbid0IHVzZSBFUzYgImRlbGV0ZSIgYmVjYXVzZSBpdCB3aWxsIGJlIGFubm95aW5nCi0g
ICAgICAvLyB0byB1c2UgaW4gYnJvd3NlcnMgdGhhdCBhcmUgbm90IEVTNiBmcmllbmRseTsKLSAg
ICAgIHZhciBrZXlzID0gdGhpcy5fa2V5czsKLSAgICAgIHZhciB2YWx1ZXMgPSB0aGlzLl92YWx1
ZXM7Ci0gICAgICB2YXIgZ3VpZCA9IF9lbWJlck1ldGFsVXRpbHMuZ3VpZEZvcihrZXkpOwotCi0g
ICAgICBpZiAoa2V5cy5kZWxldGUoa2V5LCBndWlkKSkgewotICAgICAgICBkZWxldGUgdmFsdWVz
W2d1aWRdOwotICAgICAgICB0aGlzLnNpemUgPSBrZXlzLnNpemU7Ci0gICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAg
IH0sCi0KLSAgICAvKioKLSAgICAgIENoZWNrIHdoZXRoZXIgYSBrZXkgaXMgcHJlc2VudC4KLSAg
ICAgICBAbWV0aG9kIGhhcwotICAgICAgQHBhcmFtIHsqfSBrZXkKLSAgICAgIEByZXR1cm4ge0Jv
b2xlYW59IHRydWUgaWYgdGhlIGl0ZW0gd2FzIHByZXNlbnQsIGZhbHNlIG90aGVyd2lzZQotICAg
ICAgQHByaXZhdGUKLSAgICAqLwotICAgIGhhczogZnVuY3Rpb24gKGtleSkgewotICAgICAgcmV0
dXJuIHRoaXMuX2tleXMuaGFzKGtleSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAgSXRlcmF0
ZSBvdmVyIGFsbCB0aGUga2V5cyBhbmQgdmFsdWVzLiBDYWxscyB0aGUgZnVuY3Rpb24gb25jZQot
ICAgICAgZm9yIGVhY2gga2V5LCBwYXNzaW5nIGluIHZhbHVlLCBrZXksIGFuZCB0aGUgbWFwIGJl
aW5nIGl0ZXJhdGVkIG92ZXIsCi0gICAgICBpbiB0aGF0IG9yZGVyLgotICAgICAgIFRoZSBrZXlz
IGFyZSBndWFyYW50ZWVkIHRvIGJlIGl0ZXJhdGVkIG92ZXIgaW4gaW5zZXJ0aW9uIG9yZGVyLgot
ICAgICAgIEBtZXRob2QgZm9yRWFjaAotICAgICAgQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sK
LSAgICAgIEBwYXJhbSB7Kn0gc2VsZiBpZiBwYXNzZWQsIHRoZSBgdGhpc2AgdmFsdWUgaW5zaWRl
IHRoZQotICAgICAgICBjYWxsYmFjay4gQnkgZGVmYXVsdCwgYHRoaXNgIGlzIHRoZSBtYXAuCi0g
ICAgICBAcHJpdmF0ZQotICAgICovCi0gICAgZm9yRWFjaDogZnVuY3Rpb24gKGNhbGxiYWNrIC8q
LCAuLi50aGlzQXJnKi8pIHsKLSAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlv
bicpIHsKLSAgICAgICAgbWlzc2luZ0Z1bmN0aW9uKGNhbGxiYWNrKTsKLSAgICAgIH0KLQotICAg
ICAgaWYgKHRoaXMuc2l6ZSA9PT0gMCkgewotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0KLSAg
ICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoOwotICAgICAgdmFyIG1hcCA9IHRoaXM7
Ci0gICAgICB2YXIgY2IsIHRoaXNBcmc7Ci0KLSAgICAgIGlmIChsZW5ndGggPT09IDIpIHsKLSAg
ICAgICAgdGhpc0FyZyA9IGFyZ3VtZW50c1sxXTsKLSAgICAgICAgY2IgPSBmdW5jdGlvbiAoa2V5
KSB7Ci0gICAgICAgICAgY2FsbGJhY2suY2FsbCh0aGlzQXJnLCBtYXAuZ2V0KGtleSksIGtleSwg
bWFwKTsKLSAgICAgICAgfTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGNiID0gZnVuY3Rpb24g
KGtleSkgewotICAgICAgICAgIGNhbGxiYWNrKG1hcC5nZXQoa2V5KSwga2V5LCBtYXApOwotICAg
ICAgICB9OwotICAgICAgfQotCi0gICAgICB0aGlzLl9rZXlzLmZvckVhY2goY2IpOwotICAgIH0s
Ci0KLSAgICAvKioKLSAgICAgIEBtZXRob2QgY2xlYXIKLSAgICAgIEBwcml2YXRlCi0gICAgKi8K
LSAgICBjbGVhcjogZnVuY3Rpb24gKCkgewotICAgICAgdGhpcy5fa2V5cy5jbGVhcigpOwotICAg
ICAgdGhpcy5fdmFsdWVzID0gbmV3IF9lbWJlck1ldGFsRW1wdHlfb2JqZWN0LmRlZmF1bHQoKTsK
LSAgICAgIHRoaXMuc2l6ZSA9IDA7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAgQG1ldGhvZCBj
b3B5Ci0gICAgICBAcmV0dXJuIHtFbWJlci5NYXB9Ci0gICAgICBAcHJpdmF0ZQotICAgICovCi0g
ICAgY29weTogZnVuY3Rpb24gKCkgewotICAgICAgcmV0dXJuIGNvcHlNYXAodGhpcywgbmV3IE1h
cCgpKTsKLSAgICB9Ci0gIH07Ci0KLSAgLyoqCi0gICAgQGNsYXNzIE1hcFdpdGhEZWZhdWx0Ci0g
ICAgQG5hbWVzcGFjZSBFbWJlcgotICAgIEBleHRlbmRzIEVtYmVyLk1hcAotICAgIEBwcml2YXRl
Ci0gICAgQGNvbnN0cnVjdG9yCi0gICAgQHBhcmFtIFtvcHRpb25zXQotICAgICAgQHBhcmFtIHsq
fSBbb3B0aW9ucy5kZWZhdWx0VmFsdWVdCi0gICovCi0gIGZ1bmN0aW9uIE1hcFdpdGhEZWZhdWx0
KG9wdGlvbnMpIHsKLSAgICB0aGlzLl9zdXBlciRjb25zdHJ1Y3RvcigpOwotICAgIHRoaXMuZGVm
YXVsdFZhbHVlID0gb3B0aW9ucy5kZWZhdWx0VmFsdWU7Ci0gIH0KLQotICAvKioKLSAgICBAbWV0
aG9kIGNyZWF0ZQotICAgIEBzdGF0aWMKLSAgICBAcGFyYW0gW29wdGlvbnNdCi0gICAgICBAcGFy
YW0geyp9IFtvcHRpb25zLmRlZmF1bHRWYWx1ZV0KLSAgICBAcmV0dXJuIHtFbWJlci5NYXBXaXRo
RGVmYXVsdHxFbWJlci5NYXB9IElmIG9wdGlvbnMgYXJlIHBhc3NlZCwgcmV0dXJucwotICAgICAg
YEVtYmVyLk1hcFdpdGhEZWZhdWx0YCBvdGhlcndpc2UgcmV0dXJucyBgRW1iZXIuTWFwYAotICAg
IEBwcml2YXRlCi0gICovCi0gIE1hcFdpdGhEZWZhdWx0LmNyZWF0ZSA9IGZ1bmN0aW9uIChvcHRp
b25zKSB7Ci0gICAgaWYgKG9wdGlvbnMpIHsKLSAgICAgIHJldHVybiBuZXcgTWFwV2l0aERlZmF1
bHQob3B0aW9ucyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJldHVybiBuZXcgTWFwKCk7Ci0gICAg
fQotICB9OwotCi0gIE1hcFdpdGhEZWZhdWx0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoTWFw
LnByb3RvdHlwZSk7Ci0gIE1hcFdpdGhEZWZhdWx0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1h
cFdpdGhEZWZhdWx0OwotICBNYXBXaXRoRGVmYXVsdC5wcm90b3R5cGUuX3N1cGVyJGNvbnN0cnVj
dG9yID0gTWFwOwotICBNYXBXaXRoRGVmYXVsdC5wcm90b3R5cGUuX3N1cGVyJGdldCA9IE1hcC5w
cm90b3R5cGUuZ2V0OwotCi0gIC8qKgotICAgIFJldHJpZXZlIHRoZSB2YWx1ZSBhc3NvY2lhdGVk
IHdpdGggYSBnaXZlbiBrZXkuCi0gIAotICAgIEBtZXRob2QgZ2V0Ci0gICAgQHBhcmFtIHsqfSBr
ZXkKLSAgICBAcmV0dXJuIHsqfSB0aGUgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBrZXksIG9y
IHRoZSBkZWZhdWx0IHZhbHVlCi0gICAgQHByaXZhdGUKLSAgKi8KLSAgTWFwV2l0aERlZmF1bHQu
cHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChrZXkpIHsKLSAgICB2YXIgaGFzVmFsdWUgPSB0aGlz
LmhhcyhrZXkpOwotCi0gICAgaWYgKGhhc1ZhbHVlKSB7Ci0gICAgICByZXR1cm4gdGhpcy5fc3Vw
ZXIkZ2V0KGtleSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHZhciBkZWZhdWx0VmFsdWUgPSB0aGlz
LmRlZmF1bHRWYWx1ZShrZXkpOwotICAgICAgdGhpcy5zZXQoa2V5LCBkZWZhdWx0VmFsdWUpOwot
ICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTsKLSAgICB9Ci0gIH07Ci0KLSAgLyoqCi0gICAgQG1l
dGhvZCBjb3B5Ci0gICAgQHJldHVybiB7RW1iZXIuTWFwV2l0aERlZmF1bHR9Ci0gICAgQHByaXZh
dGUKLSAgKi8KLSAgTWFwV2l0aERlZmF1bHQucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiAoKSB7
Ci0gICAgdmFyIENvbnN0cnVjdG9yID0gdGhpcy5jb25zdHJ1Y3RvcjsKLSAgICByZXR1cm4gY29w
eU1hcCh0aGlzLCBuZXcgQ29uc3RydWN0b3IoewotICAgICAgZGVmYXVsdFZhbHVlOiB0aGlzLmRl
ZmF1bHRWYWx1ZQotICAgIH0pKTsKLSAgfTsKLQotICBleHBvcnRzLmRlZmF1bHQgPSBNYXA7Ci0g
IGV4cG9ydHMuT3JkZXJlZFNldCA9IE9yZGVyZWRTZXQ7Ci0gIGV4cG9ydHMuTWFwID0gTWFwOwot
ICBleHBvcnRzLk1hcFdpdGhEZWZhdWx0ID0gTWFwV2l0aERlZmF1bHQ7Ci19KTsKLWVuaWZlZCgn
ZW1iZXItbWV0YWwvbWVyZ2UnLCBbJ2V4cG9ydHMnXSwgZnVuY3Rpb24gKGV4cG9ydHMpIHsKLSAg
LyoqCi0gICAgTWVyZ2UgdGhlIGNvbnRlbnRzIG9mIHR3byBvYmplY3RzIHRvZ2V0aGVyIGludG8g
dGhlIGZpcnN0IG9iamVjdC4KLSAgCi0gICAgYGBgamF2YXNjcmlwdAotICAgIEVtYmVyLm1lcmdl
KHtmaXJzdDogJ1RvbSd9LCB7bGFzdDogJ0RhbGUnfSk7IC8vIHtmaXJzdDogJ1RvbScsIGxhc3Q6
ICdEYWxlJ30KLSAgICB2YXIgYSA9IHtmaXJzdDogJ1llaHVkYSd9OwotICAgIHZhciBiID0ge2xh
c3Q6ICdLYXR6J307Ci0gICAgRW1iZXIubWVyZ2UoYSwgYik7IC8vIGEgPT0ge2ZpcnN0OiAnWWVo
dWRhJywgbGFzdDogJ0thdHonfSwgYiA9PSB7bGFzdDogJ0thdHonfQotICAgIGBgYAotICAKLSAg
ICBAbWV0aG9kIG1lcmdlCi0gICAgQGZvciBFbWJlcgotICAgIEBwYXJhbSB7T2JqZWN0fSBvcmln
aW5hbCBUaGUgb2JqZWN0IHRvIG1lcmdlIGludG8KLSAgICBAcGFyYW0ge09iamVjdH0gdXBkYXRl
cyBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tCi0gICAgQHJldHVybiB7T2JqZWN0
fQotICAgIEBwdWJsaWMKLSAgKi8KLSAgJ3VzZSBzdHJpY3QnOwotCi0gIGV4cG9ydHMuZGVmYXVs
dCA9IG1lcmdlOwotCi0gIGZ1bmN0aW9uIG1lcmdlKG9yaWdpbmFsLCB1cGRhdGVzKSB7Ci0gICAg
aWYgKCF1cGRhdGVzIHx8IHR5cGVvZiB1cGRhdGVzICE9PSAnb2JqZWN0JykgewotICAgICAgcmV0
dXJuIG9yaWdpbmFsOwotICAgIH0KLQotICAgIHZhciBwcm9wcyA9IE9iamVjdC5rZXlzKHVwZGF0
ZXMpOwotICAgIHZhciBwcm9wOwotICAgIHZhciBsZW5ndGggPSBwcm9wcy5sZW5ndGg7Ci0KLSAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICBwcm9wID0gcHJvcHNb
aV07Ci0gICAgICBvcmlnaW5hbFtwcm9wXSA9IHVwZGF0ZXNbcHJvcF07Ci0gICAgfQotCi0gICAg
cmV0dXJuIG9yaWdpbmFsOwotICB9Ci19KTsKLWVuaWZlZCgnZW1iZXItbWV0YWwvbWV0YScsIFsn
ZXhwb3J0cycsICdlbWJlci1tZXRhbC9tZXRhX2xpc3RlbmVycycsICdlbWJlci1tZXRhbC9lbXB0
eV9vYmplY3QnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1ldGFsTWV0YV9saXN0ZW5lcnMs
IF9lbWJlck1ldGFsRW1wdHlfb2JqZWN0KSB7Ci0gICdubyB1c2Ugc3RyaWN0JzsKLSAgLy8gUmVt
b3ZlICJ1c2Ugc3RyaWN0IjsgZnJvbSB0cmFuc3BpbGVkIG1vZHVsZSB1bnRpbAotICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM4MDM4IGlzIGZpeGVkCi0KLSAg
ZXhwb3J0cy5tZXRhID0gbWV0YTsKLSAgZXhwb3J0cy5wZWVrTWV0YSA9IHBlZWtNZXRhOwotICBl
eHBvcnRzLmRlbGV0ZU1ldGEgPSBkZWxldGVNZXRhOwotCi0gIC8qKgotICBAbW9kdWxlIGVtYmVy
LW1ldGFsCi0gICovCi0KLSAgLyoKLSAgIFRoaXMgZGVjbGFyZXMgc2V2ZXJhbCBtZXRhLXByb2dy
YW1tZWQgbWVtYmVycyBvbiB0aGUgTWV0YSBjbGFzcy4gU3VjaAotICAgbWV0YSEKLSAgCi0gICBJ
biBnZW5lcmFsLCB0aGUgYHJlYWRhYmxlYCB2YXJpYW50cyB3aWxsIGdpdmUgeW91IGFuIG9iamVj
dCAoaWYgaXQKLSAgIGFscmVhZHkgZXhpc3RzKSB0aGF0IHlvdSBjYW4gcmVhZCBidXQgc2hvdWxk
IG5vdCBtb2RpZnkuIFRoZQotICAgYHdyaXRhYmxlYCB2YXJpYW50cyB3aWxsIGdpdmUgeW91IGEg
bXV0YWJsZSBvYmplY3QsIGFuZCB0aGV5IHdpbGwKLSAgIGNyZWF0ZSBpdCBpZiBpdCBkaWRuJ3Qg
YWxyZWFkeSBleGlzdC4KLSAgCi0gICBUaGUgZm9sbG93aW5nIG1ldGhvZHMgd2lsbCBnZXQgZ2Vu
ZXJhdGVkIG1ldGFwcm9ncmFtbWF0aWNhbGx5LCBhbmQKLSAgIEknbSBpbmNsdWRpbmcgdGhlbSBo
ZXJlIGZvciBncmVwcGFiaWxpdHk6Ci0gIAotICAgd3JpdGFibGVDYWNoZSwgcmVhZGFibGVDYWNo
ZSwgd3JpdGVXYXRjaGluZywKLSAgIHBlZWtXYXRjaGluZywgY2xlYXJXYXRjaGluZywgd3JpdGVN
aXhpbnMsCi0gICBwZWVrTWl4aW5zLCBjbGVhck1peGlucywgd3JpdGVCaW5kaW5ncywKLSAgIHBl
ZWtCaW5kaW5ncywgY2xlYXJCaW5kaW5ncywgd3JpdGVWYWx1ZXMsCi0gICBwZWVrVmFsdWVzLCBj
bGVhclZhbHVlcywgd3JpdGVEZXBzLCBmb3JFYWNoSW5EZXBzCi0gICB3cml0YWJsZUNoYWluV2F0
Y2hlcnMsIHJlYWRhYmxlQ2hhaW5XYXRjaGVycywgd3JpdGFibGVDaGFpbnMsCi0gICByZWFkYWJs
ZUNoYWlucywgd3JpdGFibGVUYWcsIHJlYWRhYmxlVGFnCi0gIAotICAqLwotICB2YXIgbWVtYmVy
cyA9IHsKLSAgICBjYWNoZTogb3duTWFwLAotICAgIHdlYWs6IG93bk1hcCwKLSAgICB3YXRjaGlu
ZzogaW5oZXJpdGVkTWFwLAotICAgIG1peGluczogaW5oZXJpdGVkTWFwLAotICAgIGJpbmRpbmdz
OiBpbmhlcml0ZWRNYXAsCi0gICAgdmFsdWVzOiBpbmhlcml0ZWRNYXAsCi0gICAgZGVwczogaW5o
ZXJpdGVkTWFwT2ZNYXBzLAotICAgIGNoYWluV2F0Y2hlcnM6IG93bkN1c3RvbU9iamVjdCwKLSAg
ICBjaGFpbnM6IGluaGVyaXRlZEN1c3RvbU9iamVjdCwKLSAgICB0YWc6IG93bkN1c3RvbU9iamVj
dAotICB9OwotCi0gIHZhciBtZW1iZXJOYW1lcyA9IE9iamVjdC5rZXlzKG1lbWJlcnMpOwotICB2
YXIgTUVUQV9GSUVMRCA9ICdfX2VtYmVyX21ldGFfXyc7Ci0KLSAgZnVuY3Rpb24gTWV0YShvYmos
IHBhcmVudE1ldGEpIHsKLSAgICB0aGlzLl9jYWNoZSA9IHVuZGVmaW5lZDsKLSAgICB0aGlzLl93
ZWFrID0gdW5kZWZpbmVkOwotICAgIHRoaXMuX3dhdGNoaW5nID0gdW5kZWZpbmVkOwotICAgIHRo
aXMuX21peGlucyA9IHVuZGVmaW5lZDsKLSAgICB0aGlzLl9iaW5kaW5ncyA9IHVuZGVmaW5lZDsK
LSAgICB0aGlzLl92YWx1ZXMgPSB1bmRlZmluZWQ7Ci0gICAgdGhpcy5fZGVwcyA9IHVuZGVmaW5l
ZDsKLSAgICB0aGlzLl9jaGFpbldhdGNoZXJzID0gdW5kZWZpbmVkOwotICAgIHRoaXMuX2NoYWlu
cyA9IHVuZGVmaW5lZDsKLSAgICB0aGlzLl90YWcgPSB1bmRlZmluZWQ7Ci0KLSAgICAvLyB1c2Vk
IG9ubHkgaW50ZXJuYWxseQotICAgIHRoaXMuc291cmNlID0gb2JqOwotCi0gICAgLy8gd2hlbiBt
ZXRhKG9iaikucHJvdG8gPT09IG9iaiwgdGhlIG9iamVjdCBpcyBpbnRlbmRlZCB0byBiZSBvbmx5
IGEKLSAgICAvLyBwcm90b3R5cGUgYW5kIGRvZXNuJ3QgbmVlZCB0byBhY3R1YWxseSBiZSBvYnNl
cnZhYmxlIGl0c2VsZgotICAgIHRoaXMucHJvdG8gPSB1bmRlZmluZWQ7Ci0KLSAgICAvLyBUaGUg
bmV4dCBtZXRhIGluIG91ciBpbmhlcml0YW5jZSBjaGFpbi4gV2UgKHdpbGwpIHRyYWNrIHRoaXMK
LSAgICAvLyBleHBsaWNpdGx5IGluc3RlYWQgb2YgdXNpbmcgcHJvdG90eXBpY2FsIGluaGVyaXRh
bmNlIGJlY2F1c2Ugd2UKLSAgICAvLyBoYXZlIGRldGFpbGVkIGtub3dsZWRnZSBvZiBob3cgZWFj
aCBwcm9wZXJ0eSBzaG91bGQgcmVhbGx5IGJlCi0gICAgLy8gaW5oZXJpdGVkLCBhbmQgd2UgY2Fu
IG9wdGltaXplIGl0IG11Y2ggYmV0dGVyIHRoYW4gSlMgcnVudGltZXMuCi0gICAgdGhpcy5wYXJl
bnQgPSBwYXJlbnRNZXRhOwotCi0gICAgdGhpcy5faW5pdGlhbGl6ZUxpc3RlbmVycygpOwotICB9
Ci0KLSAgZm9yICh2YXIgX25hbWUgaW4gX2VtYmVyTWV0YWxNZXRhX2xpc3RlbmVycy5wcm90b01l
dGhvZHMpIHsKLSAgICBNZXRhLnByb3RvdHlwZVtfbmFtZV0gPSBfZW1iZXJNZXRhbE1ldGFfbGlz
dGVuZXJzLnByb3RvTWV0aG9kc1tfbmFtZV07Ci0gIH0KLSAgbWVtYmVyTmFtZXMuZm9yRWFjaChm
dW5jdGlvbiAobmFtZSkgewotICAgIHJldHVybiBtZW1iZXJzW25hbWVdKG5hbWUsIE1ldGEpOwot
ICB9KTsKLQotICAvLyBJbXBsZW1lbnRzIGEgbWVtYmVyIHRoYXQgaXMgYSBsYXppbHkgY3JlYXRl
ZCwgbm9uLWluaGVyaXRhYmxlCi0gIC8vIFBPSk8uCi0gIGZ1bmN0aW9uIG93bk1hcChuYW1lLCBN
ZXRhKSB7Ci0gICAgdmFyIGtleSA9IG1lbWJlclByb3BlcnR5KG5hbWUpOwotICAgIHZhciBjYXBp
dGFsaXplZCA9IGNhcGl0YWxpemUobmFtZSk7Ci0gICAgTWV0YS5wcm90b3R5cGVbJ3dyaXRhYmxl
JyArIGNhcGl0YWxpemVkXSA9IGZ1bmN0aW9uICgpIHsKLSAgICAgIHJldHVybiB0aGlzLl9nZXRP
ckNyZWF0ZU93bk1hcChrZXkpOwotICAgIH07Ci0gICAgTWV0YS5wcm90b3R5cGVbJ3JlYWRhYmxl
JyArIGNhcGl0YWxpemVkXSA9IGZ1bmN0aW9uICgpIHsKLSAgICAgIHJldHVybiB0aGlzW2tleV07
Ci0gICAgfTsKLSAgfQotCi0gIE1ldGEucHJvdG90eXBlLl9nZXRPckNyZWF0ZU93bk1hcCA9IGZ1
bmN0aW9uIChrZXkpIHsKLSAgICB2YXIgcmV0ID0gdGhpc1trZXldOwotICAgIGlmICghcmV0KSB7
Ci0gICAgICByZXQgPSB0aGlzW2tleV0gPSBuZXcgX2VtYmVyTWV0YWxFbXB0eV9vYmplY3QuZGVm
YXVsdCgpOwotICAgIH0KLSAgICByZXR1cm4gcmV0OwotICB9OwotCi0gIC8vIEltcGxlbWVudHMg
YSBtZW1iZXIgdGhhdCBpcyBhIGxhemlseSBjcmVhdGVkIFBPSk8gd2l0aCBpbmhlcml0YWJsZQot
ICAvLyB2YWx1ZXMuCi0gIGZ1bmN0aW9uIGluaGVyaXRlZE1hcChuYW1lLCBNZXRhKSB7Ci0gICAg
dmFyIGtleSA9IG1lbWJlclByb3BlcnR5KG5hbWUpOwotICAgIHZhciBjYXBpdGFsaXplZCA9IGNh
cGl0YWxpemUobmFtZSk7Ci0KLSAgICBNZXRhLnByb3RvdHlwZVsnd3JpdGUnICsgY2FwaXRhbGl6
ZWRdID0gZnVuY3Rpb24gKHN1YmtleSwgdmFsdWUpIHsKLSAgICAgIHZhciBtYXAgPSB0aGlzLl9n
ZXRPckNyZWF0ZU93bk1hcChrZXkpOwotICAgICAgbWFwW3N1YmtleV0gPSB2YWx1ZTsKLSAgICB9
OwotCi0gICAgTWV0YS5wcm90b3R5cGVbJ3BlZWsnICsgY2FwaXRhbGl6ZWRdID0gZnVuY3Rpb24g
KHN1YmtleSkgewotICAgICAgcmV0dXJuIHRoaXMuX2ZpbmRJbmhlcml0ZWQoa2V5LCBzdWJrZXkp
OwotICAgIH07Ci0KLSAgICBNZXRhLnByb3RvdHlwZVsnZm9yRWFjaCcgKyBjYXBpdGFsaXplZF0g
PSBmdW5jdGlvbiAoZm4pIHsKLSAgICAgIHZhciBwb2ludGVyID0gdGhpczsKLSAgICAgIHZhciBz
ZWVuID0gbmV3IF9lbWJlck1ldGFsRW1wdHlfb2JqZWN0LmRlZmF1bHQoKTsKLSAgICAgIHdoaWxl
IChwb2ludGVyICE9PSB1bmRlZmluZWQpIHsKLSAgICAgICAgdmFyIG1hcCA9IHBvaW50ZXJba2V5
XTsKLSAgICAgICAgaWYgKG1hcCkgewotICAgICAgICAgIGZvciAodmFyIF9rZXkgaW4gbWFwKSB7
Ci0gICAgICAgICAgICBpZiAoIXNlZW5bX2tleV0pIHsKLSAgICAgICAgICAgICAgc2Vlbltfa2V5
XSA9IHRydWU7Ci0gICAgICAgICAgICAgIGZuKF9rZXksIG1hcFtfa2V5XSk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHBvaW50ZXIgPSBwb2ludGVyLnBh
cmVudDsKLSAgICAgIH0KLSAgICB9OwotCi0gICAgTWV0YS5wcm90b3R5cGVbJ2NsZWFyJyArIGNh
cGl0YWxpemVkXSA9IGZ1bmN0aW9uICgpIHsKLSAgICAgIHRoaXNba2V5XSA9IHVuZGVmaW5lZDsK
LSAgICB9OwotCi0gICAgTWV0YS5wcm90b3R5cGVbJ2RlbGV0ZUZyb20nICsgY2FwaXRhbGl6ZWRd
ID0gZnVuY3Rpb24gKHN1YmtleSkgewotICAgICAgZGVsZXRlIHRoaXMuX2dldE9yQ3JlYXRlT3du
TWFwKGtleSlbc3Via2V5XTsKLSAgICB9OwotCi0gICAgTWV0YS5wcm90b3R5cGVbJ2hhc0luJyAr
IGNhcGl0YWxpemVkXSA9IGZ1bmN0aW9uIChzdWJrZXkpIHsKLSAgICAgIHJldHVybiB0aGlzLl9m
aW5kSW5oZXJpdGVkKGtleSwgc3Via2V5KSAhPT0gdW5kZWZpbmVkOwotICAgIH07Ci0gIH0KLQot
ICBNZXRhLnByb3RvdHlwZS5fZ2V0SW5oZXJpdGVkID0gZnVuY3Rpb24gKGtleSkgewotICAgIHZh
ciBwb2ludGVyID0gdGhpczsKLSAgICB3aGlsZSAocG9pbnRlciAhPT0gdW5kZWZpbmVkKSB7Ci0g
ICAgICBpZiAocG9pbnRlcltrZXldKSB7Ci0gICAgICAgIHJldHVybiBwb2ludGVyW2tleV07Ci0g
ICAgICB9Ci0gICAgICBwb2ludGVyID0gcG9pbnRlci5wYXJlbnQ7Ci0gICAgfQotICB9OwotCi0g
IE1ldGEucHJvdG90eXBlLl9maW5kSW5oZXJpdGVkID0gZnVuY3Rpb24gKGtleSwgc3Via2V5KSB7
Ci0gICAgdmFyIHBvaW50ZXIgPSB0aGlzOwotICAgIHdoaWxlIChwb2ludGVyICE9PSB1bmRlZmlu
ZWQpIHsKLSAgICAgIHZhciBtYXAgPSBwb2ludGVyW2tleV07Ci0gICAgICBpZiAobWFwKSB7Ci0g
ICAgICAgIHZhciB2YWx1ZSA9IG1hcFtzdWJrZXldOwotICAgICAgICBpZiAodmFsdWUgIT09IHVu
ZGVmaW5lZCkgewotICAgICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICAgICAgfQotICAgICAgfQot
ICAgICAgcG9pbnRlciA9IHBvaW50ZXIucGFyZW50OwotICAgIH0KLSAgfTsKLQotICAvLyBJbXBs
ZW1lbnRzIGEgbWVtYmVyIHRoYXQgcHJvdmlkZXMgYSBsYXppbHkgY3JlYXRlZCBtYXAgb2YgbWFw
cywKLSAgLy8gd2l0aCBpbmhlcml0YW5jZSBhdCBib3RoIGxldmVscy4KLSAgZnVuY3Rpb24gaW5o
ZXJpdGVkTWFwT2ZNYXBzKG5hbWUsIE1ldGEpIHsKLSAgICB2YXIga2V5ID0gbWVtYmVyUHJvcGVy
dHkobmFtZSk7Ci0gICAgdmFyIGNhcGl0YWxpemVkID0gY2FwaXRhbGl6ZShuYW1lKTsKLQotICAg
IE1ldGEucHJvdG90eXBlWyd3cml0ZScgKyBjYXBpdGFsaXplZF0gPSBmdW5jdGlvbiAoc3Via2V5
LCBpdGVta2V5LCB2YWx1ZSkgewotICAgICAgdmFyIG91dGVyTWFwID0gdGhpcy5fZ2V0T3JDcmVh
dGVPd25NYXAoa2V5KTsKLSAgICAgIHZhciBpbm5lck1hcCA9IG91dGVyTWFwW3N1YmtleV07Ci0g
ICAgICBpZiAoIWlubmVyTWFwKSB7Ci0gICAgICAgIGlubmVyTWFwID0gb3V0ZXJNYXBbc3Via2V5
XSA9IG5ldyBfZW1iZXJNZXRhbEVtcHR5X29iamVjdC5kZWZhdWx0KCk7Ci0gICAgICB9Ci0gICAg
ICBpbm5lck1hcFtpdGVta2V5XSA9IHZhbHVlOwotICAgIH07Ci0KLSAgICBNZXRhLnByb3RvdHlw
ZVsncGVlaycgKyBjYXBpdGFsaXplZF0gPSBmdW5jdGlvbiAoc3Via2V5LCBpdGVta2V5KSB7Ci0g
ICAgICB2YXIgcG9pbnRlciA9IHRoaXM7Ci0gICAgICB3aGlsZSAocG9pbnRlciAhPT0gdW5kZWZp
bmVkKSB7Ci0gICAgICAgIHZhciBtYXAgPSBwb2ludGVyW2tleV07Ci0gICAgICAgIGlmIChtYXAp
IHsKLSAgICAgICAgICB2YXIgdmFsdWUgPSBtYXBbc3Via2V5XTsKLSAgICAgICAgICBpZiAodmFs
dWUpIHsKLSAgICAgICAgICAgIGlmICh2YWx1ZVtpdGVta2V5XSAhPT0gdW5kZWZpbmVkKSB7Ci0g
ICAgICAgICAgICAgIHJldHVybiB2YWx1ZVtpdGVta2V5XTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcG9pbnRlciA9IHBvaW50ZXIucGFyZW50OwotICAg
ICAgfQotICAgIH07Ci0KLSAgICBNZXRhLnByb3RvdHlwZVsnaGFzJyArIGNhcGl0YWxpemVkXSA9
IGZ1bmN0aW9uIChzdWJrZXkpIHsKLSAgICAgIHZhciBwb2ludGVyID0gdGhpczsKLSAgICAgIHdo
aWxlIChwb2ludGVyICE9PSB1bmRlZmluZWQpIHsKLSAgICAgICAgaWYgKHBvaW50ZXJba2V5XSAm
JiBwb2ludGVyW2tleV1bc3Via2V5XSkgewotICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICB9Ci0gICAgICAgIHBvaW50ZXIgPSBwb2ludGVyLnBhcmVudDsKLSAgICAgIH0KLSAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9OwotCi0gICAgTWV0YS5wcm90b3R5cGVbJ2ZvckVhY2hJbicgKyBj
YXBpdGFsaXplZF0gPSBmdW5jdGlvbiAoc3Via2V5LCBmbikgewotICAgICAgcmV0dXJuIHRoaXMu
X2ZvckVhY2hJbihrZXksIHN1YmtleSwgZm4pOwotICAgIH07Ci0gIH0KLQotICBNZXRhLnByb3Rv
dHlwZS5fZm9yRWFjaEluID0gZnVuY3Rpb24gKGtleSwgc3Via2V5LCBmbikgewotICAgIHZhciBw
b2ludGVyID0gdGhpczsKLSAgICB2YXIgc2VlbiA9IG5ldyBfZW1iZXJNZXRhbEVtcHR5X29iamVj
dC5kZWZhdWx0KCk7Ci0gICAgdmFyIGNhbGxzID0gW107Ci0gICAgd2hpbGUgKHBvaW50ZXIgIT09
IHVuZGVmaW5lZCkgewotICAgICAgdmFyIG1hcCA9IHBvaW50ZXJba2V5XTsKLSAgICAgIGlmICht
YXApIHsKLSAgICAgICAgdmFyIGlubmVyTWFwID0gbWFwW3N1YmtleV07Ci0gICAgICAgIGlmIChp
bm5lck1hcCkgewotICAgICAgICAgIGZvciAodmFyIGlubmVyS2V5IGluIGlubmVyTWFwKSB7Ci0g
ICAgICAgICAgICBpZiAoIXNlZW5baW5uZXJLZXldKSB7Ci0gICAgICAgICAgICAgIHNlZW5baW5u
ZXJLZXldID0gdHJ1ZTsKLSAgICAgICAgICAgICAgY2FsbHMucHVzaChbaW5uZXJLZXksIGlubmVy
TWFwW2lubmVyS2V5XV0pOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgfQotICAgICAgcG9pbnRlciA9IHBvaW50ZXIucGFyZW50OwotICAgIH0KLSAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IGNhbGxzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICB2YXIgX2NhbGxzJGkg
PSBjYWxsc1tpXTsKLSAgICAgIHZhciBpbm5lcktleSA9IF9jYWxscyRpWzBdOwotICAgICAgdmFy
IHZhbHVlID0gX2NhbGxzJGlbMV07Ci0KLSAgICAgIGZuKGlubmVyS2V5LCB2YWx1ZSk7Ci0gICAg
fQotICB9OwotCi0gIC8vIEltcGxlbWVudHMgYSBtZW1iZXIgdGhhdCBwcm92aWRlcyBhIG5vbi1o
ZXJpdGFibGUsIGxhemlseS1jcmVhdGVkCi0gIC8vIG9iamVjdCB1c2luZyB0aGUgbWV0aG9kIHlv
dSBwcm92aWRlLgotICBmdW5jdGlvbiBvd25DdXN0b21PYmplY3QobmFtZSwgTWV0YSkgewotICAg
IHZhciBrZXkgPSBtZW1iZXJQcm9wZXJ0eShuYW1lKTsKLSAgICB2YXIgY2FwaXRhbGl6ZWQgPSBj
YXBpdGFsaXplKG5hbWUpOwotICAgIE1ldGEucHJvdG90eXBlWyd3cml0YWJsZScgKyBjYXBpdGFs
aXplZF0gPSBmdW5jdGlvbiAoY3JlYXRlKSB7Ci0gICAgICB2YXIgcmV0ID0gdGhpc1trZXldOwot
ICAgICAgaWYgKCFyZXQpIHsKLSAgICAgICAgcmV0ID0gdGhpc1trZXldID0gY3JlYXRlKHRoaXMu
c291cmNlKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiByZXQ7Ci0gICAgfTsKLSAgICBNZXRhLnBy
b3RvdHlwZVsncmVhZGFibGUnICsgY2FwaXRhbGl6ZWRdID0gZnVuY3Rpb24gKCkgewotICAgICAg
cmV0dXJuIHRoaXNba2V5XTsKLSAgICB9OwotICB9Ci0KLSAgLy8gSW1wbGVtZW50cyBhIG1lbWJl
ciB0aGF0IHByb3ZpZGVzIGFuIGluaGVyaXRhYmxlLCBsYXppbHktY3JlYXRlZAotICAvLyBvYmpl
Y3QgdXNpbmcgdGhlIG1ldGhvZCB5b3UgcHJvdmlkZS4gV2Ugd2lsbCBkZXJpdmVkIGNoaWxkcmVu
IGZyb20KLSAgLy8gdGhlaXIgcGFyZW50cyBieSBjYWxsaW5nIHlvdXIgb2JqZWN0J3MgYGNvcHko
KWAgbWV0aG9kLgotICBmdW5jdGlvbiBpbmhlcml0ZWRDdXN0b21PYmplY3QobmFtZSwgTWV0YSkg
ewotICAgIHZhciBrZXkgPSBtZW1iZXJQcm9wZXJ0eShuYW1lKTsKLSAgICB2YXIgY2FwaXRhbGl6
ZWQgPSBjYXBpdGFsaXplKG5hbWUpOwotICAgIE1ldGEucHJvdG90eXBlWyd3cml0YWJsZScgKyBj
YXBpdGFsaXplZF0gPSBmdW5jdGlvbiAoY3JlYXRlKSB7Ci0gICAgICB2YXIgcmV0ID0gdGhpc1tr
ZXldOwotICAgICAgaWYgKCFyZXQpIHsKLSAgICAgICAgaWYgKHRoaXMucGFyZW50KSB7Ci0gICAg
ICAgICAgcmV0ID0gdGhpc1trZXldID0gdGhpcy5wYXJlbnRbJ3dyaXRhYmxlJyArIGNhcGl0YWxp
emVkXShjcmVhdGUpLmNvcHkodGhpcy5zb3VyY2UpOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgIHJldCA9IHRoaXNba2V5XSA9IGNyZWF0ZSh0aGlzLnNvdXJjZSk7Ci0gICAgICAgIH0KLSAg
ICAgIH0KLSAgICAgIHJldHVybiByZXQ7Ci0gICAgfTsKLSAgICBNZXRhLnByb3RvdHlwZVsncmVh
ZGFibGUnICsgY2FwaXRhbGl6ZWRdID0gZnVuY3Rpb24gKCkgewotICAgICAgcmV0dXJuIHRoaXMu
X2dldEluaGVyaXRlZChrZXkpOwotICAgIH07Ci0gIH0KLQotICBmdW5jdGlvbiBtZW1iZXJQcm9w
ZXJ0eShuYW1lKSB7Ci0gICAgcmV0dXJuICdfJyArIG5hbWU7Ci0gIH0KLQotICAvLyB0aGVyZSdz
IGEgbW9yZSBnZW5lcmFsLXB1cnBvc2UgY2FwaXRhbGl6ZSBpbiBlbWJlci1ydW50aW1lLCBidXQg
d2UKLSAgLy8gZG9uJ3Qgd2FudCB0byBtYWtlIGVtYmVyLW1ldGFsIGRlcGVuZCBvbiBlbWJlci1y
dW50aW1lLgotICBmdW5jdGlvbiBjYXBpdGFsaXplKG5hbWUpIHsKLSAgICByZXR1cm4gbmFtZS5y
ZXBsYWNlKC9eXHcvLCBmdW5jdGlvbiAobSkgewotICAgICAgcmV0dXJuIG0udG9VcHBlckNhc2Uo
KTsKLSAgICB9KTsKLSAgfQotCi0gIHZhciBNRVRBX0RFU0MgPSB7Ci0gICAgd3JpdGFibGU6IHRy
dWUsCi0gICAgY29uZmlndXJhYmxlOiB0cnVlLAotICAgIGVudW1lcmFibGU6IGZhbHNlLAotICAg
IHZhbHVlOiBudWxsCi0gIH07Ci0KLSAgZXhwb3J0cy5NRVRBX0RFU0MgPSBNRVRBX0RFU0M7Ci0g
IHZhciBFTUJFUl9NRVRBX1BST1BFUlRZID0gewotICAgIG5hbWU6IE1FVEFfRklFTEQsCi0gICAg
ZGVzY3JpcHRvcjogTUVUQV9ERVNDCi0gIH07Ci0KLSAgLy8gY2hvb3NlIHRoZSBvbmUgYXBwcm9w
cmlhdGUgZm9yIGdpdmVuIHBsYXRmb3JtCi0gIHZhciBzZXRNZXRhID0gZnVuY3Rpb24gKG9iaiwg
bWV0YSkgewotICAgIC8vIGlmIGBudWxsYCBhbHJlYWR5LCBqdXN0IHNldCBpdCB0byB0aGUgbmV3
IHZhbHVlCi0gICAgLy8gb3RoZXJ3aXNlIGRlZmluZSBwcm9wZXJ0eSBmaXJzdAotICAgIGlmIChv
YmpbTUVUQV9GSUVMRF0gIT09IG51bGwpIHsKLSAgICAgIGlmIChvYmouX19kZWZpbmVOb25FbnVt
ZXJhYmxlKSB7Ci0gICAgICAgIG9iai5fX2RlZmluZU5vbkVudW1lcmFibGUoRU1CRVJfTUVUQV9Q
Uk9QRVJUWSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHko
b2JqLCBNRVRBX0ZJRUxELCBNRVRBX0RFU0MpOwotICAgICAgfQotICAgIH0KLQotICAgIG9ialtN
RVRBX0ZJRUxEXSA9IG1ldGE7Ci0gIH07Ci0KLSAgLyoqCi0gICAgUmV0cmlldmVzIHRoZSBtZXRh
IGhhc2ggZm9yIGFuIG9iamVjdC4gSWYgYHdyaXRhYmxlYCBpcyB0cnVlIGVuc3VyZXMgdGhlCi0g
ICAgaGFzaCBpcyB3cml0YWJsZSBmb3IgdGhpcyBvYmplY3QgYXMgd2VsbC4KLSAgCi0gICAgVGhl
IG1ldGEgb2JqZWN0IGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IGNvbXB1dGVkIHByb3BlcnR5
IGRlc2NyaXB0b3JzIGFzCi0gICAgd2VsbCBhcyBhbnkgd2F0Y2hlZCBwcm9wZXJ0aWVzIGFuZCBv
dGhlciBpbmZvcm1hdGlvbi4gWW91IGdlbmVyYWxseSB3aWxsCi0gICAgbm90IGFjY2VzcyB0aGlz
IGluZm9ybWF0aW9uIGRpcmVjdGx5IGJ1dCBpbnN0ZWFkIHdvcmsgd2l0aCBoaWdoZXIgbGV2ZWwK
LSAgICBtZXRob2RzIHRoYXQgbWFuaXB1bGF0ZSB0aGlzIGhhc2ggaW5kaXJlY3RseS4KLSAgCi0g
ICAgQG1ldGhvZCBtZXRhCi0gICAgQGZvciBFbWJlcgotICAgIEBwcml2YXRlCi0gIAotICAgIEBw
YXJhbSB7T2JqZWN0fSBvYmogVGhlIG9iamVjdCB0byByZXRyaWV2ZSBtZXRhIGZvcgotICAgIEBw
YXJhbSB7Qm9vbGVhbn0gW3dyaXRhYmxlPXRydWVdIFBhc3MgYGZhbHNlYCBpZiB5b3UgZG8gbm90
IGludGVuZCB0byBtb2RpZnkKLSAgICAgIHRoZSBtZXRhIGhhc2gsIGFsbG93aW5nIHRoZSBtZXRo
b2QgdG8gYXZvaWQgbWFraW5nIGFuIHVubmVjZXNzYXJ5IGNvcHkuCi0gICAgQHJldHVybiB7T2Jq
ZWN0fSB0aGUgbWV0YSBoYXNoIGZvciBhbiBvYmplY3QKLSAgKi8KLQotICBmdW5jdGlvbiBtZXRh
KG9iaikgewotICAgIHZhciBtYXliZU1ldGEgPSBwZWVrTWV0YShvYmopOwotICAgIHZhciBwYXJl
bnQgPSB1bmRlZmluZWQ7Ci0KLSAgICAvLyByZW1vdmUgdGhpcyBjb2RlLCBpbi1mYXZvciBvZiBl
eHBsaWNpdCBwYXJlbnQKLSAgICBpZiAobWF5YmVNZXRhKSB7Ci0gICAgICBpZiAobWF5YmVNZXRh
LnNvdXJjZSA9PT0gb2JqKSB7Ci0gICAgICAgIHJldHVybiBtYXliZU1ldGE7Ci0gICAgICB9Ci0g
ICAgICBwYXJlbnQgPSBtYXliZU1ldGE7Ci0gICAgfQotCi0gICAgdmFyIG5ld01ldGEgPSBuZXcg
TWV0YShvYmosIHBhcmVudCk7Ci0gICAgc2V0TWV0YShvYmosIG5ld01ldGEpOwotICAgIHJldHVy
biBuZXdNZXRhOwotICB9Ci0KLSAgZnVuY3Rpb24gcGVla01ldGEob2JqKSB7Ci0gICAgcmV0dXJu
IG9ialtNRVRBX0ZJRUxEXTsKLSAgfQotCi0gIGZ1bmN0aW9uIGRlbGV0ZU1ldGEob2JqKSB7Ci0g
ICAgaWYgKHR5cGVvZiBvYmpbTUVUQV9GSUVMRF0gIT09ICdvYmplY3QnKSB7Ci0gICAgICByZXR1
cm47Ci0gICAgfQotICAgIG9ialtNRVRBX0ZJRUxEXSA9IG51bGw7Ci0gIH0KLX0pOwotZW5pZmVk
KCdlbWJlci1tZXRhbC9tZXRhX2xpc3RlbmVycycsIFsnZXhwb3J0cyddLCBmdW5jdGlvbiAoZXhw
b3J0cykgewotICAvKgotICAgV2hlbiB3ZSByZW5kZXIgYSByaWNoIHRlbXBsYXRlIGhpZXJhcmNo
eSwgdGhlIHNldCBvZiBldmVudHMgdGhhdAotICAgKm1pZ2h0KiBoYXBwZW4gdGVuZHMgdG8gYmUg
bXVjaCBsYXJnZXIgdGhhbiB0aGUgc2V0IG9mIGV2ZW50cyB0aGF0Ci0gICBhY3R1YWxseSBoYXBw
ZW4uIFRoaXMgaW1wbGllcyB0aGF0IHdlIHNob3VsZCBtYWtlIGxpc3RlbmVyIGNyZWF0aW9uICYK
LSAgIGRlc3RydWN0aW9uIGNoZWFwLCBldmVuIGF0IHRoZSBjb3N0IG9mIG1ha2luZyBldmVudCBk
aXNwYXRjaCBtb3JlCi0gICBleHBlbnNpdmUuCi0gIAotICAgVGh1cyB3ZSBzdG9yZSBhIG5ldyBs
aXN0ZW5lciB3aXRoIGEgc2luZ2xlIHB1c2ggYW5kIG5vIG5ldwotICAgYWxsb2NhdGlvbnMsIHdp
dGhvdXQgZXZlbiBib3RoZXJpbmcgdG8gZG8gZGVkdXBsaWNhdGlvbiAtLSB3ZSBjYW4KLSAgIHNh
dmUgdGhhdCBmb3IgZGlzcGF0Y2ggdGltZSwgaWYgYW4gZXZlbnQgYWN0dWFsbHkgaGFwcGVucy4K
LSAgICovCi0KLSAgLyogbGlzdGVuZXIgZmxhZ3MgKi8KLSAgJ3VzZSBzdHJpY3QnOwotCi0gIHZh
ciBPTkNFID0gMTsKLSAgZXhwb3J0cy5PTkNFID0gT05DRTsKLSAgdmFyIFNVU1BFTkRFRCA9IDI7
Ci0KLSAgZXhwb3J0cy5TVVNQRU5ERUQgPSBTVVNQRU5ERUQ7Ci0gIHZhciBwcm90b01ldGhvZHMg
PSB7Ci0KLSAgICBhZGRUb0xpc3RlbmVyczogZnVuY3Rpb24gKGV2ZW50TmFtZSwgdGFyZ2V0LCBt
ZXRob2QsIGZsYWdzKSB7Ci0gICAgICBpZiAoIXRoaXMuX2xpc3RlbmVycykgewotICAgICAgICB0
aGlzLl9saXN0ZW5lcnMgPSBbXTsKLSAgICAgIH0KLSAgICAgIHRoaXMuX2xpc3RlbmVycy5wdXNo
KGV2ZW50TmFtZSwgdGFyZ2V0LCBtZXRob2QsIGZsYWdzKTsKLSAgICB9LAotCi0gICAgX2ZpbmFs
aXplTGlzdGVuZXJzOiBmdW5jdGlvbiAoKSB7Ci0gICAgICBpZiAodGhpcy5fbGlzdGVuZXJzRmlu
YWxpemVkKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICAgIGlmICghdGhpcy5fbGlz
dGVuZXJzKSB7Ci0gICAgICAgIHRoaXMuX2xpc3RlbmVycyA9IFtdOwotICAgICAgfQotICAgICAg
dmFyIHBvaW50ZXIgPSB0aGlzLnBhcmVudDsKLSAgICAgIHdoaWxlIChwb2ludGVyKSB7Ci0gICAg
ICAgIHZhciBsaXN0ZW5lcnMgPSBwb2ludGVyLl9saXN0ZW5lcnM7Ci0gICAgICAgIGlmIChsaXN0
ZW5lcnMpIHsKLSAgICAgICAgICB0aGlzLl9saXN0ZW5lcnMgPSB0aGlzLl9saXN0ZW5lcnMuY29u
Y2F0KGxpc3RlbmVycyk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHBvaW50ZXIuX2xpc3RlbmVy
c0ZpbmFsaXplZCkgewotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIHBvaW50
ZXIgPSBwb2ludGVyLnBhcmVudDsKLSAgICAgIH0KLSAgICAgIHRoaXMuX2xpc3RlbmVyc0ZpbmFs
aXplZCA9IHRydWU7Ci0gICAgfSwKLQotICAgIHJlbW92ZUZyb21MaXN0ZW5lcnM6IGZ1bmN0aW9u
IChldmVudE5hbWUsIHRhcmdldCwgbWV0aG9kLCBkaWRSZW1vdmUpIHsKLSAgICAgIHZhciBwb2lu
dGVyID0gdGhpczsKLSAgICAgIHdoaWxlIChwb2ludGVyKSB7Ci0gICAgICAgIHZhciBsaXN0ZW5l
cnMgPSBwb2ludGVyLl9saXN0ZW5lcnM7Ci0gICAgICAgIGlmIChsaXN0ZW5lcnMpIHsKLSAgICAg
ICAgICBmb3IgKHZhciBpbmRleCA9IGxpc3RlbmVycy5sZW5ndGggLSA0OyBpbmRleCA+PSAwOyBp
bmRleCAtPSA0KSB7Ci0gICAgICAgICAgICBpZiAobGlzdGVuZXJzW2luZGV4XSA9PT0gZXZlbnRO
YW1lICYmICghbWV0aG9kIHx8IGxpc3RlbmVyc1tpbmRleCArIDFdID09PSB0YXJnZXQgJiYgbGlz
dGVuZXJzW2luZGV4ICsgMl0gPT09IG1ldGhvZCkpIHsKLSAgICAgICAgICAgICAgaWYgKHBvaW50
ZXIgPT09IHRoaXMpIHsKLSAgICAgICAgICAgICAgICAvLyB3ZSBhcmUgbW9kaWZ5aW5nIG91ciBv
d24gbGlzdCwgc28gd2UgZWRpdCBkaXJlY3RseQotICAgICAgICAgICAgICAgIGlmICh0eXBlb2Yg
ZGlkUmVtb3ZlID09PSAnZnVuY3Rpb24nKSB7Ci0gICAgICAgICAgICAgICAgICBkaWRSZW1vdmUo
ZXZlbnROYW1lLCB0YXJnZXQsIGxpc3RlbmVyc1tpbmRleCArIDJdKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgbGlzdGVuZXJzLnNwbGljZShpbmRleCwgNCk7Ci0gICAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gd2UgYXJlIHRyeWluZyB0byByZW1v
dmUgYW4gaW5oZXJpdGVkIGxpc3RlbmVyLCBzbyB3ZSBkbwotICAgICAgICAgICAgICAgIC8vIGp1
c3QtaW4tdGltZSBjb3B5aW5nIHRvIGRldGFjaCBvdXIgb3duIGxpc3RlbmVycyBmcm9tCi0gICAg
ICAgICAgICAgICAgLy8gb3VyIGluaGVyaXRhbmNlIGNoYWluLgotICAgICAgICAgICAgICAgIHRo
aXMuX2ZpbmFsaXplTGlzdGVuZXJzKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVt
b3ZlRnJvbUxpc3RlbmVycyhldmVudE5hbWUsIHRhcmdldCwgbWV0aG9kKTsKLSAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAo
cG9pbnRlci5fbGlzdGVuZXJzRmluYWxpemVkKSB7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgcG9pbnRlciA9IHBvaW50ZXIucGFyZW50OwotICAgICAgfQotICAgIH0sCi0K
LSAgICBtYXRjaGluZ0xpc3RlbmVyczogZnVuY3Rpb24gKGV2ZW50TmFtZSkgewotICAgICAgdmFy
IHBvaW50ZXIgPSB0aGlzOwotICAgICAgdmFyIHJlc3VsdCA9IFtdOwotICAgICAgd2hpbGUgKHBv
aW50ZXIpIHsKLSAgICAgICAgdmFyIGxpc3RlbmVycyA9IHBvaW50ZXIuX2xpc3RlbmVyczsKLSAg
ICAgICAgaWYgKGxpc3RlbmVycykgewotICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5k
ZXggPCBsaXN0ZW5lcnMubGVuZ3RoIC0gMzsgaW5kZXggKz0gNCkgewotICAgICAgICAgICAgaWYg
KGxpc3RlbmVyc1tpbmRleF0gPT09IGV2ZW50TmFtZSkgewotICAgICAgICAgICAgICBwdXNoVW5p
cXVlTGlzdGVuZXIocmVzdWx0LCBsaXN0ZW5lcnMsIGluZGV4KTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHBvaW50ZXIuX2xpc3RlbmVyc0ZpbmFs
aXplZCkgewotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIHBvaW50ZXIgPSBw
b2ludGVyLnBhcmVudDsKLSAgICAgIH0KLSAgICAgIHZhciBzdXMgPSB0aGlzLl9zdXNwZW5kZWRM
aXN0ZW5lcnM7Ci0gICAgICBpZiAoc3VzKSB7Ci0gICAgICAgIGZvciAodmFyIHN1c0luZGV4ID0g
MDsgc3VzSW5kZXggPCBzdXMubGVuZ3RoIC0gMjsgc3VzSW5kZXggKz0gMykgewotICAgICAgICAg
IGlmIChldmVudE5hbWUgPT09IHN1c1tzdXNJbmRleF0pIHsKLSAgICAgICAgICAgIGZvciAodmFy
IHJlc3VsdEluZGV4ID0gMDsgcmVzdWx0SW5kZXggPCByZXN1bHQubGVuZ3RoIC0gMjsgcmVzdWx0
SW5kZXggKz0gMykgewotICAgICAgICAgICAgICBpZiAocmVzdWx0W3Jlc3VsdEluZGV4XSA9PT0g
c3VzW3N1c0luZGV4ICsgMV0gJiYgcmVzdWx0W3Jlc3VsdEluZGV4ICsgMV0gPT09IHN1c1tzdXNJ
bmRleCArIDJdKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0W3Jlc3VsdEluZGV4ICsgMl0gfD0g
U1VTUEVOREVEOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgICB9Ci0gICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0sCi0KLSAgICBz
dXNwZW5kTGlzdGVuZXJzOiBmdW5jdGlvbiAoZXZlbnROYW1lcywgdGFyZ2V0LCBtZXRob2QsIGNh
bGxiYWNrKSB7Ci0gICAgICB2YXIgc3VzID0gdGhpcy5fc3VzcGVuZGVkTGlzdGVuZXJzOwotICAg
ICAgaWYgKCFzdXMpIHsKLSAgICAgICAgc3VzID0gdGhpcy5fc3VzcGVuZGVkTGlzdGVuZXJzID0g
W107Ci0gICAgICB9Ci0gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV2ZW50TmFtZXMubGVuZ3Ro
OyBpKyspIHsKLSAgICAgICAgc3VzLnB1c2goZXZlbnROYW1lc1tpXSwgdGFyZ2V0LCBtZXRob2Qp
OwotICAgICAgfQotICAgICAgdHJ5IHsKLSAgICAgICAgcmV0dXJuIGNhbGxiYWNrLmNhbGwodGFy
Z2V0KTsKLSAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgIGlmIChzdXMubGVuZ3RoID09PSBldmVu
dE5hbWVzLmxlbmd0aCkgewotICAgICAgICAgIHRoaXMuX3N1c3BlbmRlZExpc3RlbmVycyA9IHVu
ZGVmaW5lZDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBmb3IgKHZhciBpID0gc3VzLmxl
bmd0aCAtIDM7IGkgPj0gMDsgaSAtPSAzKSB7Ci0gICAgICAgICAgICBpZiAoc3VzW2kgKyAxXSA9
PT0gdGFyZ2V0ICYmIHN1c1tpICsgMl0gPT09IG1ldGhvZCAmJiBldmVudE5hbWVzLmluZGV4T2Yo
c3VzW2ldKSAhPT0gLTEpIHsKLSAgICAgICAgICAgICAgc3VzLnNwbGljZShpLCAzKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotCi0gICAg
d2F0Y2hlZEV2ZW50czogZnVuY3Rpb24gKCkgewotICAgICAgdmFyIHBvaW50ZXIgPSB0aGlzOwot
ICAgICAgdmFyIG5hbWVzID0ge307Ci0gICAgICB3aGlsZSAocG9pbnRlcikgewotICAgICAgICB2
YXIgbGlzdGVuZXJzID0gcG9pbnRlci5fbGlzdGVuZXJzOwotICAgICAgICBpZiAobGlzdGVuZXJz
KSB7Ci0gICAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGxpc3RlbmVycy5sZW5n
dGggLSAzOyBpbmRleCArPSA0KSB7Ci0gICAgICAgICAgICBuYW1lc1tsaXN0ZW5lcnNbaW5kZXhd
XSA9IHRydWU7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChwb2ludGVyLl9s
aXN0ZW5lcnNGaW5hbGl6ZWQpIHsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBwb2ludGVyID0gcG9pbnRlci5wYXJlbnQ7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gT2JqZWN0
LmtleXMobmFtZXMpOwotICAgIH0sCi0KLSAgICBfaW5pdGlhbGl6ZUxpc3RlbmVyczogZnVuY3Rp
b24gKCkgewotICAgICAgdGhpcy5fbGlzdGVuZXJzID0gdW5kZWZpbmVkOwotICAgICAgdGhpcy5f
bGlzdGVuZXJzRmluYWxpemVkID0gdW5kZWZpbmVkOwotICAgICAgdGhpcy5fc3VzcGVuZGVkTGlz
dGVuZXJzID0gdW5kZWZpbmVkOwotICAgIH0KLSAgfTsKLQotICBleHBvcnRzLnByb3RvTWV0aG9k
cyA9IHByb3RvTWV0aG9kczsKLSAgZnVuY3Rpb24gcHVzaFVuaXF1ZUxpc3RlbmVyKGRlc3RpbmF0
aW9uLCBzb3VyY2UsIGluZGV4KSB7Ci0gICAgdmFyIHRhcmdldCA9IHNvdXJjZVtpbmRleCArIDFd
OwotICAgIHZhciBtZXRob2QgPSBzb3VyY2VbaW5kZXggKyAyXTsKLSAgICBmb3IgKHZhciBkZXN0
aW5hdGlvbkluZGV4ID0gMDsgZGVzdGluYXRpb25JbmRleCA8IGRlc3RpbmF0aW9uLmxlbmd0aCAt
IDI7IGRlc3RpbmF0aW9uSW5kZXggKz0gMykgewotICAgICAgaWYgKGRlc3RpbmF0aW9uW2Rlc3Rp
bmF0aW9uSW5kZXhdID09PSB0YXJnZXQgJiYgZGVzdGluYXRpb25bZGVzdGluYXRpb25JbmRleCAr
IDFdID09PSBtZXRob2QpIHsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgIH0KLSAgICBk
ZXN0aW5hdGlvbi5wdXNoKHRhcmdldCwgbWV0aG9kLCBzb3VyY2VbaW5kZXggKyAzXSk7Ci0gIH0K
LX0pOwotZW5pZmVkKCdlbWJlci1tZXRhbC9taXhpbicsIFsnZXhwb3J0cycsICdlbWJlci1tZXRh
bC9jb3JlJywgJ2VtYmVyLW1ldGFsL2Vycm9yJywgJ2VtYmVyLW1ldGFsL2RlYnVnJywgJ2VtYmVy
LW1ldGFsL2Fzc2lnbicsICdlbWJlci1tZXRhbC9lbXB0eV9vYmplY3QnLCAnZW1iZXItbWV0YWwv
cHJvcGVydHlfZ2V0JywgJ2VtYmVyLW1ldGFsL3Byb3BlcnR5X3NldCcsICdlbWJlci1tZXRhbC91
dGlscycsICdlbWJlci1tZXRhbC9tZXRhJywgJ2VtYmVyLW1ldGFsL2V4cGFuZF9wcm9wZXJ0aWVz
JywgJ2VtYmVyLW1ldGFsL3Byb3BlcnRpZXMnLCAnZW1iZXItbWV0YWwvY29tcHV0ZWQnLCAnZW1i
ZXItbWV0YWwvYmluZGluZycsICdlbWJlci1tZXRhbC9vYnNlcnZlcicsICdlbWJlci1tZXRhbC9l
dmVudHMnLCAnZW1iZXItbWV0YWwvc3RyZWFtcy91dGlscyddLCBmdW5jdGlvbiAoZXhwb3J0cywg
X2VtYmVyTWV0YWxDb3JlLCBfZW1iZXJNZXRhbEVycm9yLCBfZW1iZXJNZXRhbERlYnVnLCBfZW1i
ZXJNZXRhbEFzc2lnbiwgX2VtYmVyTWV0YWxFbXB0eV9vYmplY3QsIF9lbWJlck1ldGFsUHJvcGVy
dHlfZ2V0LCBfZW1iZXJNZXRhbFByb3BlcnR5X3NldCwgX2VtYmVyTWV0YWxVdGlscywgX2VtYmVy
TWV0YWxNZXRhLCBfZW1iZXJNZXRhbEV4cGFuZF9wcm9wZXJ0aWVzLCBfZW1iZXJNZXRhbFByb3Bl
cnRpZXMsIF9lbWJlck1ldGFsQ29tcHV0ZWQsIF9lbWJlck1ldGFsQmluZGluZywgX2VtYmVyTWV0
YWxPYnNlcnZlciwgX2VtYmVyTWV0YWxFdmVudHMsIF9lbWJlck1ldGFsU3RyZWFtc1V0aWxzKSB7
Ci0gICdubyB1c2Ugc3RyaWN0JzsKLSAgLy8gUmVtb3ZlICJ1c2Ugc3RyaWN0IjsgZnJvbSB0cmFu
c3BpbGVkIG1vZHVsZSB1bnRpbAotICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTM4MDM4IGlzIGZpeGVkCi0KLSAgLyoqCi0gIEBtb2R1bGUgZW1iZXIKLSAgQHN1
Ym1vZHVsZSBlbWJlci1tZXRhbAotICAqLwotICBleHBvcnRzLm1peGluID0gbWl4aW47Ci0gIGV4
cG9ydHMuZGVmYXVsdCA9IE1peGluOwotICBleHBvcnRzLnJlcXVpcmVkID0gcmVxdWlyZWQ7Ci0g
IGV4cG9ydHMuYWxpYXNNZXRob2QgPSBhbGlhc01ldGhvZDsKLSAgZXhwb3J0cy5vYnNlcnZlciA9
IG9ic2VydmVyOwotICBleHBvcnRzLl9pbW1lZGlhdGVPYnNlcnZlciA9IF9pbW1lZGlhdGVPYnNl
cnZlcjsKLSAgZXhwb3J0cy5fYmVmb3JlT2JzZXJ2ZXIgPSBfYmVmb3JlT2JzZXJ2ZXI7Ci0KLSAg
ZnVuY3Rpb24gUk9PVCgpIHt9Ci0gIFJPT1QuX19oYXNTdXBlciA9IGZhbHNlOwotCi0gIHZhciBS
RVFVSVJFRDsKLSAgdmFyIGFfc2xpY2UgPSBbXS5zbGljZTsKLQotICBmdW5jdGlvbiBpc01ldGhv
ZChvYmopIHsKLSAgICByZXR1cm4gJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIG9iaiAmJiBvYmouaXNN
ZXRob2QgIT09IGZhbHNlICYmIG9iaiAhPT0gQm9vbGVhbiAmJiBvYmogIT09IE9iamVjdCAmJiBv
YmogIT09IE51bWJlciAmJiBvYmogIT09IEFycmF5ICYmIG9iaiAhPT0gRGF0ZSAmJiBvYmogIT09
IFN0cmluZzsKLSAgfQotCi0gIHZhciBDT05USU5VRSA9IHt9OwotCi0gIGZ1bmN0aW9uIG1peGlu
UHJvcGVydGllcyhtaXhpbnNNZXRhLCBtaXhpbikgewotICAgIHZhciBndWlkOwotCi0gICAgaWYg
KG1peGluIGluc3RhbmNlb2YgTWl4aW4pIHsKLSAgICAgIGd1aWQgPSBfZW1iZXJNZXRhbFV0aWxz
Lmd1aWRGb3IobWl4aW4pOwotICAgICAgaWYgKG1peGluc01ldGEucGVla01peGlucyhndWlkKSkg
ewotICAgICAgICByZXR1cm4gQ09OVElOVUU7Ci0gICAgICB9Ci0gICAgICBtaXhpbnNNZXRhLndy
aXRlTWl4aW5zKGd1aWQsIG1peGluKTsKLSAgICAgIHJldHVybiBtaXhpbi5wcm9wZXJ0aWVzOwot
ICAgIH0gZWxzZSB7Ci0gICAgICByZXR1cm4gbWl4aW47IC8vIGFwcGx5IGFub255bW91cyBtaXhp
biBwcm9wZXJ0aWVzCi0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gY29uY2F0ZW5hdGVkTWl4aW5Q
cm9wZXJ0aWVzKGNvbmNhdFByb3AsIHByb3BzLCB2YWx1ZXMsIGJhc2UpIHsKLSAgICB2YXIgY29u
Y2F0czsKLQotICAgIC8vIHJlc2V0IGJlZm9yZSBhZGRpbmcgZWFjaCBuZXcgbWl4aW4gdG8gcGlj
a3VwIGNvbmNhdHMgZnJvbSBwcmV2aW91cwotICAgIGNvbmNhdHMgPSB2YWx1ZXNbY29uY2F0UHJv
cF0gfHwgYmFzZVtjb25jYXRQcm9wXTsKLSAgICBpZiAocHJvcHNbY29uY2F0UHJvcF0pIHsKLSAg
ICAgIGNvbmNhdHMgPSBjb25jYXRzID8gY29uY2F0cy5jb25jYXQocHJvcHNbY29uY2F0UHJvcF0p
IDogcHJvcHNbY29uY2F0UHJvcF07Ci0gICAgfQotCi0gICAgcmV0dXJuIGNvbmNhdHM7Ci0gIH0K
LQotICBmdW5jdGlvbiBnaXZlRGVzY3JpcHRvclN1cGVyKG1ldGEsIGtleSwgcHJvcGVydHksIHZh
bHVlcywgZGVzY3MsIGJhc2UpIHsKLSAgICB2YXIgc3VwZXJQcm9wZXJ0eTsKLQotICAgIC8vIENv
bXB1dGVkIHByb3BlcnRpZXMgb3ZlcnJpZGUgbWV0aG9kcywgYW5kIGRvIG5vdCBjYWxsIHN1cGVy
IHRvIHRoZW0KLSAgICBpZiAodmFsdWVzW2tleV0gPT09IHVuZGVmaW5lZCkgewotICAgICAgLy8g
RmluZCB0aGUgb3JpZ2luYWwgZGVzY3JpcHRvciBpbiBhIHBhcmVudCBtaXhpbgotICAgICAgc3Vw
ZXJQcm9wZXJ0eSA9IGRlc2NzW2tleV07Ci0gICAgfQotCi0gICAgLy8gSWYgd2UgZGlkbid0IGZp
bmQgdGhlIG9yaWdpbmFsIGRlc2NyaXB0b3IgaW4gYSBwYXJlbnQgbWl4aW4sIGZpbmQKLSAgICAv
LyBpdCBvbiB0aGUgb3JpZ2luYWwgb2JqZWN0LgotICAgIGlmICghc3VwZXJQcm9wZXJ0eSkgewot
ICAgICAgdmFyIHBvc3NpYmxlRGVzYyA9IGJhc2Vba2V5XTsKLSAgICAgIHZhciBzdXBlckRlc2Mg
PSBwb3NzaWJsZURlc2MgIT09IG51bGwgJiYgdHlwZW9mIHBvc3NpYmxlRGVzYyA9PT0gJ29iamVj
dCcgJiYgcG9zc2libGVEZXNjLmlzRGVzY3JpcHRvciA/IHBvc3NpYmxlRGVzYyA6IHVuZGVmaW5l
ZDsKLQotICAgICAgc3VwZXJQcm9wZXJ0eSA9IHN1cGVyRGVzYzsKLSAgICB9Ci0KLSAgICBpZiAo
c3VwZXJQcm9wZXJ0eSA9PT0gdW5kZWZpbmVkIHx8ICEoc3VwZXJQcm9wZXJ0eSBpbnN0YW5jZW9m
IF9lbWJlck1ldGFsQ29tcHV0ZWQuQ29tcHV0ZWRQcm9wZXJ0eSkpIHsKLSAgICAgIHJldHVybiBw
cm9wZXJ0eTsKLSAgICB9Ci0KLSAgICAvLyBTaW5jZSBtdWx0aXBsZSBtaXhpbnMgbWF5IGluaGVy
aXQgZnJvbSB0aGUgc2FtZSBwYXJlbnQsIHdlIG5lZWQKLSAgICAvLyB0byBjbG9uZSB0aGUgY29t
cHV0ZWQgcHJvcGVydHkgc28gdGhhdCBvdGhlciBtaXhpbnMgZG8gbm90IHJlY2VpdmUKLSAgICAv
LyB0aGUgd3JhcHBlZCB2ZXJzaW9uLgotICAgIHByb3BlcnR5ID0gT2JqZWN0LmNyZWF0ZShwcm9w
ZXJ0eSk7Ci0gICAgcHJvcGVydHkuX2dldHRlciA9IF9lbWJlck1ldGFsVXRpbHMud3JhcChwcm9w
ZXJ0eS5fZ2V0dGVyLCBzdXBlclByb3BlcnR5Ll9nZXR0ZXIpOwotICAgIGlmIChzdXBlclByb3Bl
cnR5Ll9zZXR0ZXIpIHsKLSAgICAgIGlmIChwcm9wZXJ0eS5fc2V0dGVyKSB7Ci0gICAgICAgIHBy
b3BlcnR5Ll9zZXR0ZXIgPSBfZW1iZXJNZXRhbFV0aWxzLndyYXAocHJvcGVydHkuX3NldHRlciwg
c3VwZXJQcm9wZXJ0eS5fc2V0dGVyKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHByb3BlcnR5
Ll9zZXR0ZXIgPSBzdXBlclByb3BlcnR5Ll9zZXR0ZXI7Ci0gICAgICB9Ci0gICAgfQotCi0gICAg
cmV0dXJuIHByb3BlcnR5OwotICB9Ci0KLSAgZnVuY3Rpb24gZ2l2ZU1ldGhvZFN1cGVyKG9iaiwg
a2V5LCBtZXRob2QsIHZhbHVlcywgZGVzY3MpIHsKLSAgICB2YXIgc3VwZXJNZXRob2Q7Ci0KLSAg
ICAvLyBNZXRob2RzIG92ZXJ3cml0ZSBjb21wdXRlZCBwcm9wZXJ0aWVzLCBhbmQgZG8gbm90IGNh
bGwgc3VwZXIgdG8gdGhlbS4KLSAgICBpZiAoZGVzY3Nba2V5XSA9PT0gdW5kZWZpbmVkKSB7Ci0g
ICAgICAvLyBGaW5kIHRoZSBvcmlnaW5hbCBtZXRob2QgaW4gYSBwYXJlbnQgbWl4aW4KLSAgICAg
IHN1cGVyTWV0aG9kID0gdmFsdWVzW2tleV07Ci0gICAgfQotCi0gICAgLy8gSWYgd2UgZGlkbid0
IGZpbmQgdGhlIG9yaWdpbmFsIHZhbHVlIGluIGEgcGFyZW50IG1peGluLCBmaW5kIGl0IGluCi0g
ICAgLy8gdGhlIG9yaWdpbmFsIG9iamVjdAotICAgIHN1cGVyTWV0aG9kID0gc3VwZXJNZXRob2Qg
fHwgb2JqW2tleV07Ci0KLSAgICAvLyBPbmx5IHdyYXAgdGhlIG5ldyBtZXRob2QgaWYgdGhlIG9y
aWdpbmFsIG1ldGhvZCB3YXMgYSBmdW5jdGlvbgotICAgIGlmIChzdXBlck1ldGhvZCA9PT0gdW5k
ZWZpbmVkIHx8ICdmdW5jdGlvbicgIT09IHR5cGVvZiBzdXBlck1ldGhvZCkgewotICAgICAgcmV0
dXJuIG1ldGhvZDsKLSAgICB9Ci0KLSAgICByZXR1cm4gX2VtYmVyTWV0YWxVdGlscy53cmFwKG1l
dGhvZCwgc3VwZXJNZXRob2QpOwotICB9Ci0KLSAgZnVuY3Rpb24gYXBwbHlDb25jYXRlbmF0ZWRQ
cm9wZXJ0aWVzKG9iaiwga2V5LCB2YWx1ZSwgdmFsdWVzKSB7Ci0gICAgdmFyIGJhc2VWYWx1ZSA9
IHZhbHVlc1trZXldIHx8IG9ialtrZXldOwotCi0gICAgaWYgKGJhc2VWYWx1ZSkgewotICAgICAg
aWYgKCdmdW5jdGlvbicgPT09IHR5cGVvZiBiYXNlVmFsdWUuY29uY2F0KSB7Ci0gICAgICAgIGlm
ICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgICAgcmV0
dXJuIGJhc2VWYWx1ZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICByZXR1cm4gYmFzZVZh
bHVlLmNvbmNhdCh2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHJl
dHVybiBfZW1iZXJNZXRhbFV0aWxzLm1ha2VBcnJheShiYXNlVmFsdWUpLmNvbmNhdCh2YWx1ZSk7
Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJldHVybiBfZW1iZXJNZXRhbFV0aWxzLm1h
a2VBcnJheSh2YWx1ZSk7Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gYXBwbHlNZXJnZWRQcm9w
ZXJ0aWVzKG9iaiwga2V5LCB2YWx1ZSwgdmFsdWVzKSB7Ci0gICAgdmFyIGJhc2VWYWx1ZSA9IHZh
bHVlc1trZXldIHx8IG9ialtrZXldOwotCi0gICAgX2VtYmVyTWV0YWxEZWJ1Zy5ydW5JbkRlYnVn
KGZ1bmN0aW9uICgpIHsKLSAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkgewotICAgICAg
ICAvLyB1c2UgY29uZGl0aW9uYWwgdG8gYXZvaWQgc3RyaW5naWZ5aW5nIGV2ZXJ5IHRpbWUKLSAg
ICAgICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ1lvdSBwYXNzZWQgaW4gYCcgKyBKU09OLnN0
cmluZ2lmeSh2YWx1ZSkgKyAnYCBhcyB0aGUgdmFsdWUgZm9yIGAnICsga2V5ICsgJ2AgYnV0IGAn
ICsga2V5ICsgJ2AgY2Fubm90IGJlIGFuIEFycmF5JywgZmFsc2UpOwotICAgICAgfQotICAgIH0p
OwotCi0gICAgaWYgKCFiYXNlVmFsdWUpIHsKLSAgICAgIHJldHVybiB2YWx1ZTsKLSAgICB9Ci0K
LSAgICB2YXIgbmV3QmFzZSA9IF9lbWJlck1ldGFsQXNzaWduLmRlZmF1bHQoe30sIGJhc2VWYWx1
ZSk7Ci0gICAgdmFyIGhhc0Z1bmN0aW9uID0gZmFsc2U7Ci0KLSAgICBmb3IgKHZhciBwcm9wIGlu
IHZhbHVlKSB7Ci0gICAgICBpZiAoIXZhbHVlLmhhc093blByb3BlcnR5KHByb3ApKSB7Ci0gICAg
ICAgIGNvbnRpbnVlOwotICAgICAgfQotCi0gICAgICB2YXIgcHJvcFZhbHVlID0gdmFsdWVbcHJv
cF07Ci0gICAgICBpZiAoaXNNZXRob2QocHJvcFZhbHVlKSkgewotICAgICAgICAvLyBUT0RPOiBz
dXBwb3J0IGZvciBDb21wdXRlZCBQcm9wZXJ0aWVzLCBldGM/Ci0gICAgICAgIGhhc0Z1bmN0aW9u
ID0gdHJ1ZTsKLSAgICAgICAgbmV3QmFzZVtwcm9wXSA9IGdpdmVNZXRob2RTdXBlcihvYmosIHBy
b3AsIHByb3BWYWx1ZSwgYmFzZVZhbHVlLCB7fSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBu
ZXdCYXNlW3Byb3BdID0gcHJvcFZhbHVlOwotICAgICAgfQotICAgIH0KLQotICAgIGlmIChoYXNG
dW5jdGlvbikgewotICAgICAgbmV3QmFzZS5fc3VwZXIgPSBST09UOwotICAgIH0KLQotICAgIHJl
dHVybiBuZXdCYXNlOwotICB9Ci0KLSAgZnVuY3Rpb24gYWRkTm9ybWFsaXplZFByb3BlcnR5KGJh
c2UsIGtleSwgdmFsdWUsIG1ldGEsIGRlc2NzLCB2YWx1ZXMsIGNvbmNhdHMsIG1lcmdpbmdzKSB7
Ci0gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgX2VtYmVyTWV0YWxQcm9wZXJ0aWVzLkRlc2NyaXB0
b3IpIHsKLSAgICAgIGlmICh2YWx1ZSA9PT0gUkVRVUlSRUQgJiYgZGVzY3Nba2V5XSkgewotICAg
ICAgICByZXR1cm4gQ09OVElOVUU7Ci0gICAgICB9Ci0KLSAgICAgIC8vIFdyYXAgZGVzY3JpcHRv
ciBmdW5jdGlvbiB0byBpbXBsZW1lbnQKLSAgICAgIC8vIF9zdXBlcigpIGlmIG5lZWRlZAotICAg
ICAgaWYgKHZhbHVlLl9nZXR0ZXIpIHsKLSAgICAgICAgdmFsdWUgPSBnaXZlRGVzY3JpcHRvclN1
cGVyKG1ldGEsIGtleSwgdmFsdWUsIHZhbHVlcywgZGVzY3MsIGJhc2UpOwotICAgICAgfQotCi0g
ICAgICBkZXNjc1trZXldID0gdmFsdWU7Ci0gICAgICB2YWx1ZXNba2V5XSA9IHVuZGVmaW5lZDsK
LSAgICB9IGVsc2UgewotICAgICAgaWYgKGNvbmNhdHMgJiYgY29uY2F0cy5pbmRleE9mKGtleSkg
Pj0gMCB8fCBrZXkgPT09ICdjb25jYXRlbmF0ZWRQcm9wZXJ0aWVzJyB8fCBrZXkgPT09ICdtZXJn
ZWRQcm9wZXJ0aWVzJykgewotICAgICAgICB2YWx1ZSA9IGFwcGx5Q29uY2F0ZW5hdGVkUHJvcGVy
dGllcyhiYXNlLCBrZXksIHZhbHVlLCB2YWx1ZXMpOwotICAgICAgfSBlbHNlIGlmIChtZXJnaW5n
cyAmJiBtZXJnaW5ncy5pbmRleE9mKGtleSkgPj0gMCkgewotICAgICAgICB2YWx1ZSA9IGFwcGx5
TWVyZ2VkUHJvcGVydGllcyhiYXNlLCBrZXksIHZhbHVlLCB2YWx1ZXMpOwotICAgICAgfSBlbHNl
IGlmIChpc01ldGhvZCh2YWx1ZSkpIHsKLSAgICAgICAgdmFsdWUgPSBnaXZlTWV0aG9kU3VwZXIo
YmFzZSwga2V5LCB2YWx1ZSwgdmFsdWVzLCBkZXNjcyk7Ci0gICAgICB9Ci0KLSAgICAgIGRlc2Nz
W2tleV0gPSB1bmRlZmluZWQ7Ci0gICAgICB2YWx1ZXNba2V5XSA9IHZhbHVlOwotICAgIH0KLSAg
fQotCi0gIGZ1bmN0aW9uIG1lcmdlTWl4aW5zKG1peGlucywgbSwgZGVzY3MsIHZhbHVlcywgYmFz
ZSwga2V5cykgewotICAgIHZhciBjdXJyZW50TWl4aW4sIHByb3BzLCBrZXksIGNvbmNhdHMsIG1l
cmdpbmdzLCBtZXRhOwotCi0gICAgZnVuY3Rpb24gcmVtb3ZlS2V5cyhrZXlOYW1lKSB7Ci0gICAg
ICBkZWxldGUgZGVzY3Nba2V5TmFtZV07Ci0gICAgICBkZWxldGUgdmFsdWVzW2tleU5hbWVdOwot
ICAgIH0KLQotICAgIGZvciAodmFyIGkgPSAwLCBsID0gbWl4aW5zLmxlbmd0aDsgaSA8IGw7IGkr
KykgewotICAgICAgY3VycmVudE1peGluID0gbWl4aW5zW2ldOwotICAgICAgX2VtYmVyTWV0YWxE
ZWJ1Zy5hc3NlcnQoJ0V4cGVjdGVkIGhhc2ggb3IgTWl4aW4gaW5zdGFuY2UsIGdvdCAnICsgT2Jq
ZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGN1cnJlbnRNaXhpbiksIHR5cGVvZiBjdXJyZW50
TWl4aW4gPT09ICdvYmplY3QnICYmIGN1cnJlbnRNaXhpbiAhPT0gbnVsbCAmJiBPYmplY3QucHJv
dG90eXBlLnRvU3RyaW5nLmNhbGwoY3VycmVudE1peGluKSAhPT0gJ1tvYmplY3QgQXJyYXldJyk7
Ci0KLSAgICAgIHByb3BzID0gbWl4aW5Qcm9wZXJ0aWVzKG0sIGN1cnJlbnRNaXhpbik7Ci0gICAg
ICBpZiAocHJvcHMgPT09IENPTlRJTlVFKSB7Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAgfQot
Ci0gICAgICBpZiAocHJvcHMpIHsKLSAgICAgICAgbWV0YSA9IF9lbWJlck1ldGFsTWV0YS5tZXRh
KGJhc2UpOwotICAgICAgICBpZiAoYmFzZS53aWxsTWVyZ2VNaXhpbikgewotICAgICAgICAgIGJh
c2Uud2lsbE1lcmdlTWl4aW4ocHJvcHMpOwotICAgICAgICB9Ci0gICAgICAgIGNvbmNhdHMgPSBj
b25jYXRlbmF0ZWRNaXhpblByb3BlcnRpZXMoJ2NvbmNhdGVuYXRlZFByb3BlcnRpZXMnLCBwcm9w
cywgdmFsdWVzLCBiYXNlKTsKLSAgICAgICAgbWVyZ2luZ3MgPSBjb25jYXRlbmF0ZWRNaXhpblBy
b3BlcnRpZXMoJ21lcmdlZFByb3BlcnRpZXMnLCBwcm9wcywgdmFsdWVzLCBiYXNlKTsKLQotICAg
ICAgICBmb3IgKGtleSBpbiBwcm9wcykgewotICAgICAgICAgIGlmICghcHJvcHMuaGFzT3duUHJv
cGVydHkoa2V5KSkgewotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgfQotICAgICAg
ICAgIGtleXMucHVzaChrZXkpOwotICAgICAgICAgIGFkZE5vcm1hbGl6ZWRQcm9wZXJ0eShiYXNl
LCBrZXksIHByb3BzW2tleV0sIG1ldGEsIGRlc2NzLCB2YWx1ZXMsIGNvbmNhdHMsIG1lcmdpbmdz
KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIG1hbnVhbGx5IGNvcHkgdG9TdHJpbmcoKSBiZWNh
dXNlIHNvbWUgSlMgZW5naW5lcyBkbyBub3QgZW51bWVyYXRlIGl0Ci0gICAgICAgIGlmIChwcm9w
cy5oYXNPd25Qcm9wZXJ0eSgndG9TdHJpbmcnKSkgewotICAgICAgICAgIGJhc2UudG9TdHJpbmcg
PSBwcm9wcy50b1N0cmluZzsKLSAgICAgICAgfQotICAgICAgfSBlbHNlIGlmIChjdXJyZW50TWl4
aW4ubWl4aW5zKSB7Ci0gICAgICAgIG1lcmdlTWl4aW5zKGN1cnJlbnRNaXhpbi5taXhpbnMsIG0s
IGRlc2NzLCB2YWx1ZXMsIGJhc2UsIGtleXMpOwotICAgICAgICBpZiAoY3VycmVudE1peGluLl93
aXRob3V0KSB7Ci0gICAgICAgICAgY3VycmVudE1peGluLl93aXRob3V0LmZvckVhY2gocmVtb3Zl
S2V5cyk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICB2YXIgSVNfQklORElO
RyA9IC9eLitCaW5kaW5nJC87Ci0KLSAgZnVuY3Rpb24gZGV0ZWN0QmluZGluZyhvYmosIGtleSwg
dmFsdWUsIG0pIHsKLSAgICBpZiAoSVNfQklORElORy50ZXN0KGtleSkpIHsKLSAgICAgIG0ud3Jp
dGVCaW5kaW5ncyhrZXksIHZhbHVlKTsKLSAgICB9Ci0gIH0KLQotICBmdW5jdGlvbiBjb25uZWN0
U3RyZWFtQmluZGluZyhvYmosIGtleSwgc3RyZWFtKSB7Ci0gICAgdmFyIG9uTm90aWZ5ID0gZnVu
Y3Rpb24gKHN0cmVhbSkgewotICAgICAgX2VtYmVyTWV0YWxPYnNlcnZlci5fc3VzcGVuZE9ic2Vy
dmVyKG9iaiwga2V5LCBudWxsLCBkaWRDaGFuZ2UsIGZ1bmN0aW9uICgpIHsKLSAgICAgICAgX2Vt
YmVyTWV0YWxQcm9wZXJ0eV9zZXQudHJ5U2V0KG9iaiwga2V5LCBzdHJlYW0udmFsdWUoKSk7Ci0g
ICAgICB9KTsKLSAgICB9OwotCi0gICAgdmFyIGRpZENoYW5nZSA9IGZ1bmN0aW9uICgpIHsKLSAg
ICAgIHN0cmVhbS5zZXRWYWx1ZShfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQob2JqLCBrZXkp
LCBvbk5vdGlmeSk7Ci0gICAgfTsKLQotICAgIC8vIEluaXRpYWxpemUgdmFsdWUKLSAgICBfZW1i
ZXJNZXRhbFByb3BlcnR5X3NldC5zZXQob2JqLCBrZXksIHN0cmVhbS52YWx1ZSgpKTsKLQotICAg
IF9lbWJlck1ldGFsT2JzZXJ2ZXIuYWRkT2JzZXJ2ZXIob2JqLCBrZXksIG51bGwsIGRpZENoYW5n
ZSk7Ci0KLSAgICBzdHJlYW0uc3Vic2NyaWJlKG9uTm90aWZ5KTsKLQotICAgIGlmIChvYmouX3N0
cmVhbUJpbmRpbmdTdWJzY3JpcHRpb25zID09PSB1bmRlZmluZWQpIHsKLSAgICAgIG9iai5fc3Ry
ZWFtQmluZGluZ1N1YnNjcmlwdGlvbnMgPSBuZXcgX2VtYmVyTWV0YWxFbXB0eV9vYmplY3QuZGVm
YXVsdCgpOwotICAgIH0KLQotICAgIG9iai5fc3RyZWFtQmluZGluZ1N1YnNjcmlwdGlvbnNba2V5
XSA9IG9uTm90aWZ5OwotICB9Ci0KLSAgZnVuY3Rpb24gY29ubmVjdEJpbmRpbmdzKG9iaiwgbSkg
ewotICAgIC8vIFRPRE8gTWl4aW4uYXBwbHkoaW5zdGFuY2UpIHNob3VsZCBkaXNjb25uZWN0IGJp
bmRpbmcgaWYgZXhpc3RzCi0gICAgbS5mb3JFYWNoQmluZGluZ3MoZnVuY3Rpb24gKGtleSwgYmlu
ZGluZykgewotICAgICAgaWYgKGJpbmRpbmcpIHsKLSAgICAgICAgdmFyIHRvID0ga2V5LnNsaWNl
KDAsIC03KTsgLy8gc3RyaXAgQmluZGluZyBvZmYgZW5kCi0gICAgICAgIGlmIChfZW1iZXJNZXRh
bFN0cmVhbXNVdGlscy5pc1N0cmVhbShiaW5kaW5nKSkgewotICAgICAgICAgIGNvbm5lY3RTdHJl
YW1CaW5kaW5nKG9iaiwgdG8sIGJpbmRpbmcpOwotICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fSBlbHNlIGlmIChiaW5kaW5nIGluc3RhbmNlb2YgX2VtYmVyTWV0YWxCaW5kaW5nLkJpbmRpbmcp
IHsKLSAgICAgICAgICBiaW5kaW5nID0gYmluZGluZy5jb3B5KCk7IC8vIGNvcHkgcHJvdG90eXBl
cycgaW5zdGFuY2UKLSAgICAgICAgICBiaW5kaW5nLnRvKHRvKTsKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAvLyBiaW5kaW5nIGlzIHN0cmluZyBwYXRoCi0gICAgICAgICAgYmluZGluZyA9
IG5ldyBfZW1iZXJNZXRhbEJpbmRpbmcuQmluZGluZyh0bywgYmluZGluZyk7Ci0gICAgICAgIH0K
LSAgICAgICAgYmluZGluZy5jb25uZWN0KG9iaik7Ci0gICAgICAgIG9ialtrZXldID0gYmluZGlu
ZzsKLSAgICAgIH0KLSAgICB9KTsKLSAgICAvLyBtYXJrIGFzIGFwcGxpZWQKLSAgICBtLmNsZWFy
QmluZGluZ3MoKTsKLSAgfQotCi0gIGZ1bmN0aW9uIGZpbmlzaFBhcnRpYWwob2JqLCBtKSB7Ci0g
ICAgY29ubmVjdEJpbmRpbmdzKG9iaiwgbSB8fCBfZW1iZXJNZXRhbE1ldGEubWV0YShvYmopKTsK
LSAgICByZXR1cm4gb2JqOwotICB9Ci0KLSAgZnVuY3Rpb24gZm9sbG93QWxpYXMob2JqLCBkZXNj
LCBtLCBkZXNjcywgdmFsdWVzKSB7Ci0gICAgdmFyIGFsdEtleSA9IGRlc2MubWV0aG9kTmFtZTsK
LSAgICB2YXIgdmFsdWU7Ci0gICAgdmFyIHBvc3NpYmxlRGVzYzsKLSAgICBpZiAoZGVzY3NbYWx0
S2V5XSB8fCB2YWx1ZXNbYWx0S2V5XSkgewotICAgICAgdmFsdWUgPSB2YWx1ZXNbYWx0S2V5XTsK
LSAgICAgIGRlc2MgPSBkZXNjc1thbHRLZXldOwotICAgIH0gZWxzZSBpZiAoKHBvc3NpYmxlRGVz
YyA9IG9ialthbHRLZXldKSAmJiBwb3NzaWJsZURlc2MgIT09IG51bGwgJiYgdHlwZW9mIHBvc3Np
YmxlRGVzYyA9PT0gJ29iamVjdCcgJiYgcG9zc2libGVEZXNjLmlzRGVzY3JpcHRvcikgewotICAg
ICAgZGVzYyA9IHBvc3NpYmxlRGVzYzsKLSAgICAgIHZhbHVlID0gdW5kZWZpbmVkOwotICAgIH0g
ZWxzZSB7Ci0gICAgICBkZXNjID0gdW5kZWZpbmVkOwotICAgICAgdmFsdWUgPSBvYmpbYWx0S2V5
XTsKLSAgICB9Ci0KLSAgICByZXR1cm4geyBkZXNjOiBkZXNjLCB2YWx1ZTogdmFsdWUgfTsKLSAg
fQotCi0gIGZ1bmN0aW9uIHVwZGF0ZU9ic2VydmVyc0FuZExpc3RlbmVycyhvYmosIGtleSwgb2Jz
ZXJ2ZXJPckxpc3RlbmVyLCBwYXRoc0tleSwgdXBkYXRlTWV0aG9kKSB7Ci0gICAgdmFyIHBhdGhz
ID0gb2JzZXJ2ZXJPckxpc3RlbmVyW3BhdGhzS2V5XTsKLQotICAgIGlmIChwYXRocykgewotICAg
ICAgZm9yICh2YXIgaSA9IDAsIGwgPSBwYXRocy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKLSAgICAg
ICAgdXBkYXRlTWV0aG9kKG9iaiwgcGF0aHNbaV0sIG51bGwsIGtleSk7Ci0gICAgICB9Ci0gICAg
fQotICB9Ci0KLSAgZnVuY3Rpb24gcmVwbGFjZU9ic2VydmVyc0FuZExpc3RlbmVycyhvYmosIGtl
eSwgb2JzZXJ2ZXJPckxpc3RlbmVyKSB7Ci0gICAgdmFyIHByZXYgPSBvYmpba2V5XTsKLQotICAg
IGlmICgnZnVuY3Rpb24nID09PSB0eXBlb2YgcHJldikgewotICAgICAgdXBkYXRlT2JzZXJ2ZXJz
QW5kTGlzdGVuZXJzKG9iaiwga2V5LCBwcmV2LCAnX19lbWJlcl9vYnNlcnZlc0JlZm9yZV9fJywg
X2VtYmVyTWV0YWxPYnNlcnZlci5fcmVtb3ZlQmVmb3JlT2JzZXJ2ZXIpOwotICAgICAgdXBkYXRl
T2JzZXJ2ZXJzQW5kTGlzdGVuZXJzKG9iaiwga2V5LCBwcmV2LCAnX19lbWJlcl9vYnNlcnZlc19f
JywgX2VtYmVyTWV0YWxPYnNlcnZlci5yZW1vdmVPYnNlcnZlcik7Ci0gICAgICB1cGRhdGVPYnNl
cnZlcnNBbmRMaXN0ZW5lcnMob2JqLCBrZXksIHByZXYsICdfX2VtYmVyX2xpc3RlbnNfXycsIF9l
bWJlck1ldGFsRXZlbnRzLnJlbW92ZUxpc3RlbmVyKTsKLSAgICB9Ci0KLSAgICBpZiAoJ2Z1bmN0
aW9uJyA9PT0gdHlwZW9mIG9ic2VydmVyT3JMaXN0ZW5lcikgewotICAgICAgdXBkYXRlT2JzZXJ2
ZXJzQW5kTGlzdGVuZXJzKG9iaiwga2V5LCBvYnNlcnZlck9yTGlzdGVuZXIsICdfX2VtYmVyX29i
c2VydmVzQmVmb3JlX18nLCBfZW1iZXJNZXRhbE9ic2VydmVyLl9hZGRCZWZvcmVPYnNlcnZlcik7
Ci0gICAgICB1cGRhdGVPYnNlcnZlcnNBbmRMaXN0ZW5lcnMob2JqLCBrZXksIG9ic2VydmVyT3JM
aXN0ZW5lciwgJ19fZW1iZXJfb2JzZXJ2ZXNfXycsIF9lbWJlck1ldGFsT2JzZXJ2ZXIuYWRkT2Jz
ZXJ2ZXIpOwotICAgICAgdXBkYXRlT2JzZXJ2ZXJzQW5kTGlzdGVuZXJzKG9iaiwga2V5LCBvYnNl
cnZlck9yTGlzdGVuZXIsICdfX2VtYmVyX2xpc3RlbnNfXycsIF9lbWJlck1ldGFsRXZlbnRzLmFk
ZExpc3RlbmVyKTsKLSAgICB9Ci0gIH0KLQotICBmdW5jdGlvbiBhcHBseU1peGluKG9iaiwgbWl4
aW5zLCBwYXJ0aWFsKSB7Ci0gICAgdmFyIGRlc2NzID0ge307Ci0gICAgdmFyIHZhbHVlcyA9IHt9
OwotICAgIHZhciBtID0gX2VtYmVyTWV0YWxNZXRhLm1ldGEob2JqKTsKLSAgICB2YXIga2V5cyA9
IFtdOwotICAgIHZhciBrZXksIHZhbHVlLCBkZXNjOwotCi0gICAgb2JqLl9zdXBlciA9IFJPT1Q7
Ci0KLSAgICAvLyBHbyB0aHJvdWdoIGFsbCBtaXhpbnMgYW5kIGhhc2hlcyBwYXNzZWQgaW4sIGFu
ZDoKLSAgICAvLwotICAgIC8vICogSGFuZGxlIGNvbmNhdGVuYXRlZCBwcm9wZXJ0aWVzCi0gICAg
Ly8gKiBIYW5kbGUgbWVyZ2VkIHByb3BlcnRpZXMKLSAgICAvLyAqIFNldCB1cCBfc3VwZXIgd3Jh
cHBpbmcgaWYgbmVjZXNzYXJ5Ci0gICAgLy8gKiBTZXQgdXAgY29tcHV0ZWQgcHJvcGVydHkgZGVz
Y3JpcHRvcnMKLSAgICAvLyAqIENvcHlpbmcgYHRvU3RyaW5nYCBpbiBicm9rZW4gYnJvd3NlcnMK
LSAgICBtZXJnZU1peGlucyhtaXhpbnMsIG0sIGRlc2NzLCB2YWx1ZXMsIG9iaiwga2V5cyk7Ci0K
LSAgICBmb3IgKHZhciBpID0gMCwgbCA9IGtleXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7Ci0gICAg
ICBrZXkgPSBrZXlzW2ldOwotICAgICAgaWYgKGtleSA9PT0gJ2NvbnN0cnVjdG9yJyB8fCAhdmFs
dWVzLmhhc093blByb3BlcnR5KGtleSkpIHsKLSAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0K
LSAgICAgIGRlc2MgPSBkZXNjc1trZXldOwotICAgICAgdmFsdWUgPSB2YWx1ZXNba2V5XTsKLQot
ICAgICAgaWYgKGRlc2MgPT09IFJFUVVJUkVEKSB7Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAg
fQotCi0gICAgICB3aGlsZSAoZGVzYyAmJiBkZXNjIGluc3RhbmNlb2YgQWxpYXMpIHsKLSAgICAg
ICAgdmFyIGZvbGxvd2VkID0gZm9sbG93QWxpYXMob2JqLCBkZXNjLCBtLCBkZXNjcywgdmFsdWVz
KTsKLSAgICAgICAgZGVzYyA9IGZvbGxvd2VkLmRlc2M7Ci0gICAgICAgIHZhbHVlID0gZm9sbG93
ZWQudmFsdWU7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChkZXNjID09PSB1bmRlZmluZWQgJiYgdmFs
dWUgPT09IHVuZGVmaW5lZCkgewotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLQotICAgICAg
cmVwbGFjZU9ic2VydmVyc0FuZExpc3RlbmVycyhvYmosIGtleSwgdmFsdWUpOwotICAgICAgZGV0
ZWN0QmluZGluZyhvYmosIGtleSwgdmFsdWUsIG0pOwotICAgICAgX2VtYmVyTWV0YWxQcm9wZXJ0
aWVzLmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCBkZXNjLCB2YWx1ZSwgbSk7Ci0gICAgfQotCi0g
ICAgaWYgKCFwYXJ0aWFsKSB7Ci0gICAgICAvLyBkb24ndCBhcHBseSB0byBwcm90b3R5cGUKLSAg
ICAgIGZpbmlzaFBhcnRpYWwob2JqLCBtKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gb2JqOwotICB9
Ci0KLSAgLyoqCi0gICAgQG1ldGhvZCBtaXhpbgotICAgIEBmb3IgRW1iZXIKLSAgICBAcGFyYW0g
b2JqCi0gICAgQHBhcmFtIG1peGlucyoKLSAgICBAcmV0dXJuIG9iagotICAgIEBwcml2YXRlCi0g
ICovCi0KLSAgZnVuY3Rpb24gbWl4aW4ob2JqKSB7Ci0gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3Vt
ZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkg
PSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7Ci0gICAgICBhcmdzW19rZXkgLSAxXSA9IGFyZ3Vt
ZW50c1tfa2V5XTsKLSAgICB9Ci0KLSAgICBhcHBseU1peGluKG9iaiwgYXJncywgZmFsc2UpOwot
ICAgIHJldHVybiBvYmo7Ci0gIH0KLQotICAvKioKLSAgICBUaGUgYEVtYmVyLk1peGluYCBjbGFz
cyBhbGxvd3MgeW91IHRvIGNyZWF0ZSBtaXhpbnMsIHdob3NlIHByb3BlcnRpZXMgY2FuIGJlCi0g
ICAgYWRkZWQgdG8gb3RoZXIgY2xhc3Nlcy4gRm9yIGluc3RhbmNlLAotICAKLSAgICBgYGBqYXZh
c2NyaXB0Ci0gICAgQXBwLkVkaXRhYmxlID0gRW1iZXIuTWl4aW4uY3JlYXRlKHsKLSAgICAgIGVk
aXQ6IGZ1bmN0aW9uKCkgewotICAgICAgICBjb25zb2xlLmxvZygnc3RhcnRpbmcgdG8gZWRpdCcp
OwotICAgICAgICB0aGlzLnNldCgnaXNFZGl0aW5nJywgdHJ1ZSk7Ci0gICAgICB9LAotICAgICAg
aXNFZGl0aW5nOiBmYWxzZQotICAgIH0pOwotICAKLSAgICAvLyBNaXggbWl4aW5zIGludG8gY2xh
c3NlcyBieSBwYXNzaW5nIHRoZW0gYXMgdGhlIGZpcnN0IGFyZ3VtZW50cyB0bwotICAgIC8vIC5l
eHRlbmQuCi0gICAgQXBwLkNvbW1lbnRWaWV3ID0gRW1iZXIuVmlldy5leHRlbmQoQXBwLkVkaXRh
YmxlLCB7Ci0gICAgICB0ZW1wbGF0ZTogRW1iZXIuSGFuZGxlYmFycy5jb21waWxlKCd7eyNpZiB2
aWV3LmlzRWRpdGluZ319Li4ue3tlbHNlfX0uLi57ey9pZn19JykKLSAgICB9KTsKLSAgCi0gICAg
Y29tbWVudFZpZXcgPSBBcHAuQ29tbWVudFZpZXcuY3JlYXRlKCk7Ci0gICAgY29tbWVudFZpZXcu
ZWRpdCgpOyAvLyBvdXRwdXRzICdzdGFydGluZyB0byBlZGl0JwotICAgIGBgYAotICAKLSAgICBO
b3RlIHRoYXQgTWl4aW5zIGFyZSBjcmVhdGVkIHdpdGggYEVtYmVyLk1peGluLmNyZWF0ZWAsIG5v
dAotICAgIGBFbWJlci5NaXhpbi5leHRlbmRgLgotICAKLSAgICBOb3RlIHRoYXQgbWl4aW5zIGV4
dGVuZCBhIGNvbnN0cnVjdG9yJ3MgcHJvdG90eXBlIHNvIGFycmF5cyBhbmQgb2JqZWN0IGxpdGVy
YWxzCi0gICAgZGVmaW5lZCBhcyBwcm9wZXJ0aWVzIHdpbGwgYmUgc2hhcmVkIGFtb25nc3Qgb2Jq
ZWN0cyB0aGF0IGltcGxlbWVudCB0aGUgbWl4aW4uCi0gICAgSWYgeW91IHdhbnQgdG8gZGVmaW5l
IGEgcHJvcGVydHkgaW4gYSBtaXhpbiB0aGF0IGlzIG5vdCBzaGFyZWQsIHlvdSBjYW4gZGVmaW5l
Ci0gICAgaXQgZWl0aGVyIGFzIGEgY29tcHV0ZWQgcHJvcGVydHkgb3IgaGF2ZSBpdCBiZSBjcmVh
dGVkIG9uIGluaXRpYWxpemF0aW9uIG9mIHRoZSBvYmplY3QuCi0gIAotICAgIGBgYGphdmFzY3Jp
cHQKLSAgICAvL2ZpbHRlcnMgYXJyYXkgd2lsbCBiZSBzaGFyZWQgYW1vbmdzdCBhbnkgb2JqZWN0
IGltcGxlbWVudGluZyBtaXhpbgotICAgIEFwcC5GaWx0ZXJhYmxlID0gRW1iZXIuTWl4aW4uY3Jl
YXRlKHsKLSAgICAgIGZpbHRlcnM6IEVtYmVyLkEoKQotICAgIH0pOwotICAKLSAgICAvL2ZpbHRl
cnMgd2lsbCBiZSBhIHNlcGFyYXRlICBhcnJheSBmb3IgZXZlcnkgb2JqZWN0IGltcGxlbWVudGlu
ZyB0aGUgbWl4aW4KLSAgICBBcHAuRmlsdGVyYWJsZSA9IEVtYmVyLk1peGluLmNyZWF0ZSh7Ci0g
ICAgICBmaWx0ZXJzOiBFbWJlci5jb21wdXRlZChmdW5jdGlvbigpIHtyZXR1cm4gRW1iZXIuQSgp
O30pCi0gICAgfSk7Ci0gIAotICAgIC8vZmlsdGVycyB3aWxsIGJlIGNyZWF0ZWQgYXMgYSBzZXBh
cmF0ZSBhcnJheSBkdXJpbmcgdGhlIG9iamVjdCdzIGluaXRpYWxpemF0aW9uCi0gICAgQXBwLkZp
bHRlcmFibGUgPSBFbWJlci5NaXhpbi5jcmVhdGUoewotICAgICAgaW5pdDogZnVuY3Rpb24oKSB7
Ci0gICAgICAgIHRoaXMuX3N1cGVyKC4uLmFyZ3VtZW50cyk7Ci0gICAgICAgIHRoaXMuc2V0KCJm
aWx0ZXJzIiwgRW1iZXIuQSgpKTsKLSAgICAgIH0KLSAgICB9KTsKLSAgICBgYGAKLSAgCi0gICAg
QGNsYXNzIE1peGluCi0gICAgQG5hbWVzcGFjZSBFbWJlcgotICAgIEBwdWJsaWMKLSAgKi8KLQot
ICBmdW5jdGlvbiBNaXhpbihhcmdzLCBwcm9wZXJ0aWVzKSB7Ci0gICAgdGhpcy5wcm9wZXJ0aWVz
ID0gcHJvcGVydGllczsKLQotICAgIHZhciBsZW5ndGggPSBhcmdzICYmIGFyZ3MubGVuZ3RoOwot
Ci0gICAgaWYgKGxlbmd0aCA+IDApIHsKLSAgICAgIHZhciBtID0gbmV3IEFycmF5KGxlbmd0aCk7
Ci0KLSAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgdmFy
IHggPSBhcmdzW2ldOwotICAgICAgICBpZiAoeCBpbnN0YW5jZW9mIE1peGluKSB7Ci0gICAgICAg
ICAgbVtpXSA9IHg7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgbVtpXSA9IG5ldyBNaXhp
bih1bmRlZmluZWQsIHgpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIHRoaXMubWl4aW5z
ID0gbTsKLSAgICB9IGVsc2UgewotICAgICAgdGhpcy5taXhpbnMgPSB1bmRlZmluZWQ7Ci0gICAg
fQotICAgIHRoaXMub3duZXJDb25zdHJ1Y3RvciA9IHVuZGVmaW5lZDsKLSAgICB0aGlzLl93aXRo
b3V0ID0gdW5kZWZpbmVkOwotICAgIHRoaXNbX2VtYmVyTWV0YWxVdGlscy5HVUlEX0tFWV0gPSBu
dWxsOwotICAgIHRoaXNbX2VtYmVyTWV0YWxVdGlscy5HVUlEX0tFWSArICdfbmFtZSddID0gbnVs
bDsKLSAgICBfZW1iZXJNZXRhbERlYnVnLmRlYnVnU2VhbCh0aGlzKTsKLSAgfQotCi0gIE1peGlu
Ll9hcHBseSA9IGFwcGx5TWl4aW47Ci0KLSAgTWl4aW4uYXBwbHlQYXJ0aWFsID0gZnVuY3Rpb24g
KG9iaikgewotICAgIHZhciBhcmdzID0gYV9zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7Ci0gICAg
cmV0dXJuIGFwcGx5TWl4aW4ob2JqLCBhcmdzLCB0cnVlKTsKLSAgfTsKLQotICBNaXhpbi5maW5p
c2hQYXJ0aWFsID0gZmluaXNoUGFydGlhbDsKLQotICAvLyBFUzZUT0RPOiB0aGlzIHJlbGllcyBv
biBhIGdsb2JhbCBzdGF0ZT8KLSAgX2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQuYW55VW5wcm9jZXNz
ZWRNaXhpbnMgPSBmYWxzZTsKLQotICAvKioKLSAgICBAbWV0aG9kIGNyZWF0ZQotICAgIEBzdGF0
aWMKLSAgICBAcGFyYW0gYXJndW1lbnRzKgotICAgIEBwdWJsaWMKLSAgKi8KLSAgTWl4aW4uY3Jl
YXRlID0gZnVuY3Rpb24gKCkgewotICAgIC8vIEVTNlRPRE86IHRoaXMgcmVsaWVzIG9uIGEgZ2xv
YmFsIHN0YXRlPwotICAgIF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0LmFueVVucHJvY2Vzc2VkTWl4
aW5zID0gdHJ1ZTsKLSAgICB2YXIgTSA9IHRoaXM7Ci0KLSAgICBmb3IgKHZhciBfbGVuMiA9IGFy
Z3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShfbGVuMiksIF9rZXkyID0gMDsgX2tleTIgPCBf
bGVuMjsgX2tleTIrKykgewotICAgICAgYXJnc1tfa2V5Ml0gPSBhcmd1bWVudHNbX2tleTJdOwot
ICAgIH0KLQotICAgIHJldHVybiBuZXcgTShhcmdzLCB1bmRlZmluZWQpOwotICB9OwotCi0gIHZh
ciBNaXhpblByb3RvdHlwZSA9IE1peGluLnByb3RvdHlwZTsKLQotICAvKioKLSAgICBAbWV0aG9k
IHJlb3BlbgotICAgIEBwYXJhbSBhcmd1bWVudHMqCi0gICAgQHByaXZhdGUKLSAgKi8KLSAgTWl4
aW5Qcm90b3R5cGUucmVvcGVuID0gZnVuY3Rpb24gKCkgewotICAgIHZhciBjdXJyZW50TWl4aW47
Ci0KLSAgICBpZiAodGhpcy5wcm9wZXJ0aWVzKSB7Ci0gICAgICBjdXJyZW50TWl4aW4gPSBuZXcg
TWl4aW4odW5kZWZpbmVkLCB0aGlzLnByb3BlcnRpZXMpOwotICAgICAgdGhpcy5wcm9wZXJ0aWVz
ID0gdW5kZWZpbmVkOwotICAgICAgdGhpcy5taXhpbnMgPSBbY3VycmVudE1peGluXTsKLSAgICB9
IGVsc2UgaWYgKCF0aGlzLm1peGlucykgewotICAgICAgdGhpcy5taXhpbnMgPSBbXTsKLSAgICB9
Ci0KLSAgICB2YXIgbGVuID0gYXJndW1lbnRzLmxlbmd0aDsKLSAgICB2YXIgbWl4aW5zID0gdGhp
cy5taXhpbnM7Ci0gICAgdmFyIGlkeDsKLQotICAgIGZvciAoaWR4ID0gMDsgaWR4IDwgbGVuOyBp
ZHgrKykgewotICAgICAgY3VycmVudE1peGluID0gYXJndW1lbnRzW2lkeF07Ci0gICAgICBfZW1i
ZXJNZXRhbERlYnVnLmFzc2VydCgnRXhwZWN0ZWQgaGFzaCBvciBNaXhpbiBpbnN0YW5jZSwgZ290
ICcgKyBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoY3VycmVudE1peGluKSwgdHlwZW9m
IGN1cnJlbnRNaXhpbiA9PT0gJ29iamVjdCcgJiYgY3VycmVudE1peGluICE9PSBudWxsICYmIE9i
amVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChjdXJyZW50TWl4aW4pICE9PSAnW29iamVjdCBB
cnJheV0nKTsKLQotICAgICAgaWYgKGN1cnJlbnRNaXhpbiBpbnN0YW5jZW9mIE1peGluKSB7Ci0g
ICAgICAgIG1peGlucy5wdXNoKGN1cnJlbnRNaXhpbik7Ci0gICAgICB9IGVsc2UgewotICAgICAg
ICBtaXhpbnMucHVzaChuZXcgTWl4aW4odW5kZWZpbmVkLCBjdXJyZW50TWl4aW4pKTsKLSAgICAg
IH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdGhpczsKLSAgfTsKLQotICAvKioKLSAgICBAbWV0aG9k
IGFwcGx5Ci0gICAgQHBhcmFtIG9iagotICAgIEByZXR1cm4gYXBwbGllZCBvYmplY3QKLSAgICBA
cHJpdmF0ZQotICAqLwotICBNaXhpblByb3RvdHlwZS5hcHBseSA9IGZ1bmN0aW9uIChvYmopIHsK
LSAgICByZXR1cm4gYXBwbHlNaXhpbihvYmosIFt0aGlzXSwgZmFsc2UpOwotICB9OwotCi0gIE1p
eGluUHJvdG90eXBlLmFwcGx5UGFydGlhbCA9IGZ1bmN0aW9uIChvYmopIHsKLSAgICByZXR1cm4g
YXBwbHlNaXhpbihvYmosIFt0aGlzXSwgdHJ1ZSk7Ci0gIH07Ci0KLSAgTWl4aW5Qcm90b3R5cGUu
dG9TdHJpbmcgPSBmdW5jdGlvbiBNaXhpbl90b1N0cmluZygpIHsKLSAgICByZXR1cm4gJyh1bmtu
b3duIG1peGluKSc7Ci0gIH07Ci0KLSAgZnVuY3Rpb24gX2RldGVjdChjdXJNaXhpbiwgdGFyZ2V0
TWl4aW4sIHNlZW4pIHsKLSAgICB2YXIgZ3VpZCA9IF9lbWJlck1ldGFsVXRpbHMuZ3VpZEZvcihj
dXJNaXhpbik7Ci0KLSAgICBpZiAoc2VlbltndWlkXSkgewotICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLSAgICBzZWVuW2d1aWRdID0gdHJ1ZTsKLQotICAgIGlmIChjdXJNaXhpbiA9PT0gdGFy
Z2V0TWl4aW4pIHsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICB2YXIgbWl4aW5zID0g
Y3VyTWl4aW4ubWl4aW5zOwotICAgIHZhciBsb2MgPSBtaXhpbnMgPyBtaXhpbnMubGVuZ3RoIDog
MDsKLSAgICB3aGlsZSAoLS1sb2MgPj0gMCkgewotICAgICAgaWYgKF9kZXRlY3QobWl4aW5zW2xv
Y10sIHRhcmdldE1peGluLCBzZWVuKSkgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0K
LSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgLyoqCi0gICAgQG1ldGhvZCBkZXRl
Y3QKLSAgICBAcGFyYW0gb2JqCi0gICAgQHJldHVybiB7Qm9vbGVhbn0KLSAgICBAcHJpdmF0ZQot
ICAqLwotICBNaXhpblByb3RvdHlwZS5kZXRlY3QgPSBmdW5jdGlvbiAob2JqKSB7Ci0gICAgaWYg
KCFvYmopIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKG9iaiBpbnN0YW5j
ZW9mIE1peGluKSB7Ci0gICAgICByZXR1cm4gX2RldGVjdChvYmosIHRoaXMsIHt9KTsKLSAgICB9
Ci0gICAgdmFyIG0gPSBfZW1iZXJNZXRhbE1ldGEucGVla01ldGEob2JqKTsKLSAgICBpZiAoIW0p
IHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuICEhbS5wZWVrTWl4aW5z
KF9lbWJlck1ldGFsVXRpbHMuZ3VpZEZvcih0aGlzKSk7Ci0gIH07Ci0KLSAgTWl4aW5Qcm90b3R5
cGUud2l0aG91dCA9IGZ1bmN0aW9uICgpIHsKLSAgICB2YXIgcmV0ID0gbmV3IE1peGluKFt0aGlz
XSk7Ci0KLSAgICBmb3IgKHZhciBfbGVuMyA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJh
eShfbGVuMyksIF9rZXkzID0gMDsgX2tleTMgPCBfbGVuMzsgX2tleTMrKykgewotICAgICAgYXJn
c1tfa2V5M10gPSBhcmd1bWVudHNbX2tleTNdOwotICAgIH0KLQotICAgIHJldC5fd2l0aG91dCA9
IGFyZ3M7Ci0gICAgcmV0dXJuIHJldDsKLSAgfTsKLQotICBmdW5jdGlvbiBfa2V5cyhyZXQsIG1p
eGluLCBzZWVuKSB7Ci0gICAgaWYgKHNlZW5bX2VtYmVyTWV0YWxVdGlscy5ndWlkRm9yKG1peGlu
KV0pIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc2VlbltfZW1iZXJNZXRhbFV0aWxzLmd1
aWRGb3IobWl4aW4pXSA9IHRydWU7Ci0KLSAgICBpZiAobWl4aW4ucHJvcGVydGllcykgewotICAg
ICAgdmFyIHByb3BzID0gT2JqZWN0LmtleXMobWl4aW4ucHJvcGVydGllcyk7Ci0gICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIHZhciBrZXkgPSBw
cm9wc1tpXTsKLSAgICAgICAgcmV0W2tleV0gPSB0cnVlOwotICAgICAgfQotICAgIH0gZWxzZSBp
ZiAobWl4aW4ubWl4aW5zKSB7Ci0gICAgICBtaXhpbi5taXhpbnMuZm9yRWFjaChmdW5jdGlvbiAo
eCkgewotICAgICAgICByZXR1cm4gX2tleXMocmV0LCB4LCBzZWVuKTsKLSAgICAgIH0pOwotICAg
IH0KLSAgfQotCi0gIE1peGluUHJvdG90eXBlLmtleXMgPSBmdW5jdGlvbiAoKSB7Ci0gICAgdmFy
IGtleXMgPSB7fTsKLSAgICB2YXIgc2VlbiA9IHt9OwotCi0gICAgX2tleXMoa2V5cywgdGhpcywg
c2Vlbik7Ci0gICAgdmFyIHJldCA9IE9iamVjdC5rZXlzKGtleXMpOwotICAgIHJldHVybiByZXQ7
Ci0gIH07Ci0KLSAgX2VtYmVyTWV0YWxEZWJ1Zy5kZWJ1Z1NlYWwoTWl4aW5Qcm90b3R5cGUpOwot
Ci0gIC8vIHJldHVybnMgdGhlIG1peGlucyBjdXJyZW50bHkgYXBwbGllZCB0byB0aGUgc3BlY2lm
aWVkIG9iamVjdAotICAvLyBUT0RPOiBNYWtlIEVtYmVyLm1peGluCi0gIE1peGluLm1peGlucyA9
IGZ1bmN0aW9uIChvYmopIHsKLSAgICB2YXIgbSA9IF9lbWJlck1ldGFsTWV0YS5wZWVrTWV0YShv
YmopOwotICAgIHZhciByZXQgPSBbXTsKLSAgICBpZiAoIW0pIHsKLSAgICAgIHJldHVybiByZXQ7
Ci0gICAgfQotCi0gICAgbS5mb3JFYWNoTWl4aW5zKGZ1bmN0aW9uIChrZXksIGN1cnJlbnRNaXhp
bikgewotICAgICAgLy8gc2tpcCBwcmltaXRpdmUgbWl4aW5zIHNpbmNlIHRoZXNlIGFyZSBhbHdh
eXMgYW5vbnltb3VzCi0gICAgICBpZiAoIWN1cnJlbnRNaXhpbi5wcm9wZXJ0aWVzKSB7Ci0gICAg
ICAgIHJldC5wdXNoKGN1cnJlbnRNaXhpbik7Ci0gICAgICB9Ci0gICAgfSk7Ci0KLSAgICByZXR1
cm4gcmV0OwotICB9OwotCi0gIGV4cG9ydHMuUkVRVUlSRUQgPSBSRVFVSVJFRCA9IG5ldyBfZW1i
ZXJNZXRhbFByb3BlcnRpZXMuRGVzY3JpcHRvcigpOwotICBSRVFVSVJFRC50b1N0cmluZyA9IGZ1
bmN0aW9uICgpIHsKLSAgICByZXR1cm4gJyhSZXF1aXJlZCBQcm9wZXJ0eSknOwotICB9OwotCi0g
IC8qKgotICAgIERlbm90ZXMgYSByZXF1aXJlZCBwcm9wZXJ0eSBmb3IgYSBtaXhpbgotICAKLSAg
ICBAbWV0aG9kIHJlcXVpcmVkCi0gICAgQGZvciBFbWJlcgotICAgIEBwcml2YXRlCi0gICovCi0K
LSAgZnVuY3Rpb24gcmVxdWlyZWQoKSB7Ci0gICAgX2VtYmVyTWV0YWxEZWJ1Zy5kZXByZWNhdGUo
J0VtYmVyLnJlcXVpcmVkIGlzIGRlcHJlY2F0ZWQgYXMgaXRzIGJlaGF2aW9yIGlzIGluY29uc2lz
dGVudCBhbmQgdW5yZWxpYWJsZS4nLCBmYWxzZSwgeyBpZDogJ2VtYmVyLW1ldGFsLnJlcXVpcmVk
JywgdW50aWw6ICczLjAuMCcgfSk7Ci0gICAgcmV0dXJuIFJFUVVJUkVEOwotICB9Ci0KLSAgZnVu
Y3Rpb24gQWxpYXMobWV0aG9kTmFtZSkgewotICAgIHRoaXMuaXNEZXNjcmlwdG9yID0gdHJ1ZTsK
LSAgICB0aGlzLm1ldGhvZE5hbWUgPSBtZXRob2ROYW1lOwotICB9Ci0KLSAgQWxpYXMucHJvdG90
eXBlID0gbmV3IF9lbWJlck1ldGFsUHJvcGVydGllcy5EZXNjcmlwdG9yKCk7Ci0KLSAgLyoqCi0g
ICAgTWFrZXMgYSBtZXRob2QgYXZhaWxhYmxlIHZpYSBhbiBhZGRpdGlvbmFsIG5hbWUuCi0gIAot
ICAgIGBgYGphdmFzY3JpcHQKLSAgICBBcHAuUGVyc29uID0gRW1iZXIuT2JqZWN0LmV4dGVuZCh7
Ci0gICAgICBuYW1lOiBmdW5jdGlvbigpIHsKLSAgICAgICAgcmV0dXJuICdUb21odWRhIEthdHpk
YWxlJzsKLSAgICAgIH0sCi0gICAgICBtb25pa2VyOiBFbWJlci5hbGlhc01ldGhvZCgnbmFtZScp
Ci0gICAgfSk7Ci0gIAotICAgIHZhciBnb29kR3V5ID0gQXBwLlBlcnNvbi5jcmVhdGUoKTsKLSAg
Ci0gICAgZ29vZEd1eS5uYW1lKCk7ICAgIC8vICdUb21odWRhIEthdHpkYWxlJwotICAgIGdvb2RH
dXkubW9uaWtlcigpOyAvLyAnVG9taHVkYSBLYXR6ZGFsZScKLSAgICBgYGAKLSAgCi0gICAgQG1l
dGhvZCBhbGlhc01ldGhvZAotICAgIEBmb3IgRW1iZXIKLSAgICBAcGFyYW0ge1N0cmluZ30gbWV0
aG9kTmFtZSBuYW1lIG9mIHRoZSBtZXRob2QgdG8gYWxpYXMKLSAgICBAcHVibGljCi0gICovCi0K
LSAgZnVuY3Rpb24gYWxpYXNNZXRob2QobWV0aG9kTmFtZSkgewotICAgIHJldHVybiBuZXcgQWxp
YXMobWV0aG9kTmFtZSk7Ci0gIH0KLQotICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0gIC8vIE9CU0VSVkVSIEhFTFBFUgotICAv
LwotCi0gIC8qKgotICAgIFNwZWNpZnkgYSBtZXRob2QgdGhhdCBvYnNlcnZlcyBwcm9wZXJ0eSBj
aGFuZ2VzLgotICAKLSAgICBgYGBqYXZhc2NyaXB0Ci0gICAgRW1iZXIuT2JqZWN0LmV4dGVuZCh7
Ci0gICAgICB2YWx1ZU9ic2VydmVyOiBFbWJlci5vYnNlcnZlcigndmFsdWUnLCBmdW5jdGlvbigp
IHsKLSAgICAgICAgLy8gRXhlY3V0ZXMgd2hlbmV2ZXIgdGhlICJ2YWx1ZSIgcHJvcGVydHkgY2hh
bmdlcwotICAgICAgfSkKLSAgICB9KTsKLSAgICBgYGAKLSAgCi0gICAgQWxzbyBhdmFpbGFibGUg
YXMgYEZ1bmN0aW9uLnByb3RvdHlwZS5vYnNlcnZlc2AgaWYgcHJvdG90eXBlIGV4dGVuc2lvbnMg
YXJlCi0gICAgZW5hYmxlZC4KLSAgCi0gICAgQG1ldGhvZCBvYnNlcnZlcgotICAgIEBmb3IgRW1i
ZXIKLSAgICBAcGFyYW0ge1N0cmluZ30gcHJvcGVydHlOYW1lcyoKLSAgICBAcGFyYW0ge0Z1bmN0
aW9ufSBmdW5jCi0gICAgQHJldHVybiBmdW5jCi0gICAgQHB1YmxpYwotICAqLwotCi0gIGZ1bmN0
aW9uIG9ic2VydmVyKCkgewotICAgIGZvciAodmFyIF9sZW40ID0gYXJndW1lbnRzLmxlbmd0aCwg
YXJncyA9IEFycmF5KF9sZW40KSwgX2tleTQgPSAwOyBfa2V5NCA8IF9sZW40OyBfa2V5NCsrKSB7
Ci0gICAgICBhcmdzW19rZXk0XSA9IGFyZ3VtZW50c1tfa2V5NF07Ci0gICAgfQotCi0gICAgdmFy
IGZ1bmMgPSBhcmdzLnNsaWNlKC0xKVswXTsKLSAgICB2YXIgcGF0aHM7Ci0KLSAgICB2YXIgYWRk
V2F0Y2hlZFByb3BlcnR5ID0gZnVuY3Rpb24gKHBhdGgpIHsKLSAgICAgIHBhdGhzLnB1c2gocGF0
aCk7Ci0gICAgfTsKLSAgICB2YXIgX3BhdGhzID0gYXJncy5zbGljZSgwLCAtMSk7Ci0KLSAgICBp
ZiAodHlwZW9mIGZ1bmMgIT09ICdmdW5jdGlvbicpIHsKLSAgICAgIC8vIHJldmVydCB0byBvbGQs
IHNvZnQtZGVwcmVjYXRlZCBhcmd1bWVudCBvcmRlcmluZwotICAgICAgX2VtYmVyTWV0YWxEZWJ1
Zy5kZXByZWNhdGUoJ1Bhc3NpbmcgdGhlIGRlcGVuZGVudEtleXMgYWZ0ZXIgdGhlIGNhbGxiYWNr
IGZ1bmN0aW9uIGluIEVtYmVyLm9ic2VydmVyIGlzIGRlcHJlY2F0ZWQuIEVuc3VyZSB0aGUgY2Fs
bGJhY2sgZnVuY3Rpb24gaXMgdGhlIGxhc3QgYXJndW1lbnQuJywgZmFsc2UsIHsgaWQ6ICdlbWJl
ci1tZXRhbC5vYnNlcnZlci1hcmd1bWVudC1vcmRlcicsIHVudGlsOiAnMy4wLjAnIH0pOwotCi0g
ICAgICBmdW5jID0gYXJnc1swXTsKLSAgICAgIF9wYXRocyA9IGFyZ3Muc2xpY2UoMSk7Ci0gICAg
fQotCi0gICAgcGF0aHMgPSBbXTsKLQotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgX3BhdGhzLmxl
bmd0aDsgKytpKSB7Ci0gICAgICBfZW1iZXJNZXRhbEV4cGFuZF9wcm9wZXJ0aWVzLmRlZmF1bHQo
X3BhdGhzW2ldLCBhZGRXYXRjaGVkUHJvcGVydHkpOwotICAgIH0KLQotICAgIGlmICh0eXBlb2Yg
ZnVuYyAhPT0gJ2Z1bmN0aW9uJykgewotICAgICAgdGhyb3cgbmV3IF9lbWJlck1ldGFsRXJyb3Iu
ZGVmYXVsdCgnRW1iZXIub2JzZXJ2ZXIgY2FsbGVkIHdpdGhvdXQgYSBmdW5jdGlvbicpOwotICAg
IH0KLQotICAgIGZ1bmMuX19lbWJlcl9vYnNlcnZlc19fID0gcGF0aHM7Ci0gICAgcmV0dXJuIGZ1
bmM7Ci0gIH0KLQotICAvKioKLSAgICBTcGVjaWZ5IGEgbWV0aG9kIHRoYXQgb2JzZXJ2ZXMgcHJv
cGVydHkgY2hhbmdlcy4KLSAgCi0gICAgYGBgamF2YXNjcmlwdAotICAgIEVtYmVyLk9iamVjdC5l
eHRlbmQoewotICAgICAgdmFsdWVPYnNlcnZlcjogRW1iZXIuaW1tZWRpYXRlT2JzZXJ2ZXIoJ3Zh
bHVlJywgZnVuY3Rpb24oKSB7Ci0gICAgICAgIC8vIEV4ZWN1dGVzIHdoZW5ldmVyIHRoZSAidmFs
dWUiIHByb3BlcnR5IGNoYW5nZXMKLSAgICAgIH0pCi0gICAgfSk7Ci0gICAgYGBgCi0gIAotICAg
IEluIHRoZSBmdXR1cmUsIGBFbWJlci5vYnNlcnZlcmAgbWF5IGJlY29tZSBhc3luY2hyb25vdXMu
IEluIHRoaXMgZXZlbnQsCi0gICAgYEVtYmVyLmltbWVkaWF0ZU9ic2VydmVyYCB3aWxsIG1haW50
YWluIHRoZSBzeW5jaHJvbm91cyBiZWhhdmlvci4KLSAgCi0gICAgQWxzbyBhdmFpbGFibGUgYXMg
YEZ1bmN0aW9uLnByb3RvdHlwZS5vYnNlcnZlc0ltbWVkaWF0ZWx5YCBpZiBwcm90b3R5cGUgZXh0
ZW5zaW9ucyBhcmUKLSAgICBlbmFibGVkLgotICAKLSAgICBAbWV0aG9kIF9pbW1lZGlhdGVPYnNl
cnZlcgotICAgIEBmb3IgRW1iZXIKLSAgICBAcGFyYW0ge1N0cmluZ30gcHJvcGVydHlOYW1lcyoK
LSAgICBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jCi0gICAgQGRlcHJlY2F0ZWQgVXNlIGBFbWJlci5v
YnNlcnZlcmAgaW5zdGVhZC4KLSAgICBAcmV0dXJuIGZ1bmMKLSAgICBAcHJpdmF0ZQotICAqLwot
Ci0gIGZ1bmN0aW9uIF9pbW1lZGlhdGVPYnNlcnZlcigpIHsKLSAgICBfZW1iZXJNZXRhbERlYnVn
LmRlcHJlY2F0ZSgnVXNhZ2Ugb2YgYEVtYmVyLmltbWVkaWF0ZU9ic2VydmVyYCBpcyBkZXByZWNh
dGVkLCB1c2UgYEVtYmVyLm9ic2VydmVyYCBpbnN0ZWFkLicsIGZhbHNlLCB7IGlkOiAnZW1iZXIt
bWV0YWwuaW1tZWRpYXRlLW9ic2VydmVyJywgdW50aWw6ICczLjAuMCcgfSk7Ci0KLSAgICBmb3Ig
KHZhciBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKLSAgICAgIHZh
ciBhcmcgPSBhcmd1bWVudHNbaV07Ci0gICAgICBfZW1iZXJNZXRhbERlYnVnLmFzc2VydCgnSW1t
ZWRpYXRlIG9ic2VydmVycyBtdXN0IG9ic2VydmUgaW50ZXJuYWwgcHJvcGVydGllcyBvbmx5LCBu
b3QgcHJvcGVydGllcyBvbiBvdGhlciBvYmplY3RzLicsIHR5cGVvZiBhcmcgIT09ICdzdHJpbmcn
IHx8IGFyZy5pbmRleE9mKCcuJykgPT09IC0xKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gb2JzZXJ2
ZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKLSAgfQotCi0gIC8qKgotICAgIFdoZW4gb2JzZXJ2
ZXJzIGZpcmUsIHRoZXkgYXJlIGNhbGxlZCB3aXRoIHRoZSBhcmd1bWVudHMgYG9iamAsIGBrZXlO
YW1lYC4KLSAgCi0gICAgTm90ZSwgYEBlYWNoLnByb3BlcnR5YCBvYnNlcnZlciBpcyBjYWxsZWQg
cGVyIGVhY2ggYWRkIG9yIHJlcGxhY2Ugb2YgYW4gZWxlbWVudAotICAgIGFuZCBpdCdzIG5vdCBj
YWxsZWQgd2l0aCBhIHNwZWNpZmljIGVudW1lcmF0aW9uIGl0ZW0uCi0gIAotICAgIEEgYF9iZWZv
cmVPYnNlcnZlcmAgZmlyZXMgYmVmb3JlIGEgcHJvcGVydHkgY2hhbmdlcy4KLSAgCi0gICAgQSBg
X2JlZm9yZU9ic2VydmVyYCBpcyBhbiBhbHRlcm5hdGl2ZSBmb3JtIG9mIGAub2JzZXJ2ZXNCZWZv
cmUoKWAuCi0gIAotICAgIGBgYGphdmFzY3JpcHQKLSAgICBBcHAuUGVyc29uVmlldyA9IEVtYmVy
LlZpZXcuZXh0ZW5kKHsKLSAgICAgIGZyaWVuZHM6IFt7IG5hbWU6ICdUb20nIH0sIHsgbmFtZTog
J1N0ZWZhbicgfSwgeyBuYW1lOiAnS3JpcycgfV0sCi0gIAotICAgICAgdmFsdWVEaWRDaGFuZ2U6
IEVtYmVyLm9ic2VydmVyKCdjb250ZW50LnZhbHVlJywgZnVuY3Rpb24ob2JqLCBrZXlOYW1lKSB7
Ci0gICAgICAgICAgLy8gb25seSBydW4gaWYgdXBkYXRpbmcgYSB2YWx1ZSBhbHJlYWR5IGluIHRo
ZSBET00KLSAgICAgICAgICBpZiAodGhpcy5nZXQoJ3N0YXRlJykgPT09ICdpbkRPTScpIHsKLSAg
ICAgICAgICAgIHZhciBjb2xvciA9IG9iai5nZXQoa2V5TmFtZSkgPiB0aGlzLmNoYW5naW5nRnJv
bSA/ICdncmVlbicgOiAncmVkJzsKLSAgICAgICAgICAgIC8vIGxvZ2ljCi0gICAgICAgICAgfQot
ICAgICAgfSksCi0gIAotICAgICAgZnJpZW5kc0RpZENoYW5nZTogRW1iZXIub2JzZXJ2ZXIoJ2Zy
aWVuZHMuQGVhY2gubmFtZScsIGZ1bmN0aW9uKG9iaiwga2V5TmFtZSkgewotICAgICAgICAvLyBz
b21lIGxvZ2ljCi0gICAgICAgIC8vIG9iai5nZXQoa2V5TmFtZSkgcmV0dXJucyBmcmllbmRzIGFy
cmF5Ci0gICAgICB9KQotICAgIH0pOwotICAgIGBgYAotICAKLSAgICBBbHNvIGF2YWlsYWJsZSBh
cyBgRnVuY3Rpb24ucHJvdG90eXBlLm9ic2VydmVzQmVmb3JlYCBpZiBwcm90b3R5cGUgZXh0ZW5z
aW9ucyBhcmUKLSAgICBlbmFibGVkLgotICAKLSAgICBAbWV0aG9kIGJlZm9yZU9ic2VydmVyCi0g
ICAgQGZvciBFbWJlcgotICAgIEBwYXJhbSB7U3RyaW5nfSBwcm9wZXJ0eU5hbWVzKgotICAgIEBw
YXJhbSB7RnVuY3Rpb259IGZ1bmMKLSAgICBAcmV0dXJuIGZ1bmMKLSAgICBAZGVwcmVjYXRlZAot
ICAgIEBwcml2YXRlCi0gICovCi0KLSAgZnVuY3Rpb24gX2JlZm9yZU9ic2VydmVyKCkgewotICAg
IGZvciAodmFyIF9sZW41ID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW41KSwg
X2tleTUgPSAwOyBfa2V5NSA8IF9sZW41OyBfa2V5NSsrKSB7Ci0gICAgICBhcmdzW19rZXk1XSA9
IGFyZ3VtZW50c1tfa2V5NV07Ci0gICAgfQotCi0gICAgdmFyIGZ1bmMgPSBhcmdzLnNsaWNlKC0x
KVswXTsKLSAgICB2YXIgcGF0aHM7Ci0KLSAgICB2YXIgYWRkV2F0Y2hlZFByb3BlcnR5ID0gZnVu
Y3Rpb24gKHBhdGgpIHsKLSAgICAgIHBhdGhzLnB1c2gocGF0aCk7Ci0gICAgfTsKLQotICAgIHZh
ciBfcGF0aHMgPSBhcmdzLnNsaWNlKDAsIC0xKTsKLQotICAgIGlmICh0eXBlb2YgZnVuYyAhPT0g
J2Z1bmN0aW9uJykgewotICAgICAgLy8gcmV2ZXJ0IHRvIG9sZCwgc29mdC1kZXByZWNhdGVkIGFy
Z3VtZW50IG9yZGVyaW5nCi0KLSAgICAgIGZ1bmMgPSBhcmdzWzBdOwotICAgICAgX3BhdGhzID0g
YXJncy5zbGljZSgxKTsKLSAgICB9Ci0KLSAgICBwYXRocyA9IFtdOwotCi0gICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBfcGF0aHMubGVuZ3RoOyArK2kpIHsKLSAgICAgIF9lbWJlck1ldGFsRXhwYW5k
X3Byb3BlcnRpZXMuZGVmYXVsdChfcGF0aHNbaV0sIGFkZFdhdGNoZWRQcm9wZXJ0eSk7Ci0gICAg
fQotCi0gICAgaWYgKHR5cGVvZiBmdW5jICE9PSAnZnVuY3Rpb24nKSB7Ci0gICAgICB0aHJvdyBu
ZXcgX2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQuRXJyb3IoJ0VtYmVyLmJlZm9yZU9ic2VydmVyIGNh
bGxlZCB3aXRob3V0IGEgZnVuY3Rpb24nKTsKLSAgICB9Ci0KLSAgICBmdW5jLl9fZW1iZXJfb2Jz
ZXJ2ZXNCZWZvcmVfXyA9IHBhdGhzOwotICAgIHJldHVybiBmdW5jOwotICB9Ci0KLSAgZXhwb3J0
cy5JU19CSU5ESU5HID0gSVNfQklORElORzsKLSAgZXhwb3J0cy5NaXhpbiA9IE1peGluOwotICBl
eHBvcnRzLnJlcXVpcmVkID0gcmVxdWlyZWQ7Ci0gIGV4cG9ydHMuUkVRVUlSRUQgPSBSRVFVSVJF
RDsKLX0pOwotLy8gd2FybiwgYXNzZXJ0LCB3cmFwLCBldDsKLWVuaWZlZCgnZW1iZXItbWV0YWwv
b2JzZXJ2ZXInLCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwvd2F0Y2hpbmcnLCAnZW1iZXItbWV0
YWwvZXZlbnRzJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbFdhdGNoaW5nLCBfZW1i
ZXJNZXRhbEV2ZW50cykgewotICAndXNlIHN0cmljdCc7Ci0KLSAgZXhwb3J0cy5hZGRPYnNlcnZl
ciA9IGFkZE9ic2VydmVyOwotICBleHBvcnRzLm9ic2VydmVyc0ZvciA9IG9ic2VydmVyc0ZvcjsK
LSAgZXhwb3J0cy5yZW1vdmVPYnNlcnZlciA9IHJlbW92ZU9ic2VydmVyOwotICBleHBvcnRzLl9h
ZGRCZWZvcmVPYnNlcnZlciA9IF9hZGRCZWZvcmVPYnNlcnZlcjsKLSAgZXhwb3J0cy5fc3VzcGVu
ZE9ic2VydmVyID0gX3N1c3BlbmRPYnNlcnZlcjsKLSAgZXhwb3J0cy5fc3VzcGVuZE9ic2VydmVy
cyA9IF9zdXNwZW5kT2JzZXJ2ZXJzOwotICBleHBvcnRzLl9yZW1vdmVCZWZvcmVPYnNlcnZlciA9
IF9yZW1vdmVCZWZvcmVPYnNlcnZlcjsKLQotICAvKioKLSAgQG1vZHVsZSBlbWJlci1tZXRhbAot
ICAqLwotCi0gIHZhciBBRlRFUl9PQlNFUlZFUlMgPSAnOmNoYW5nZSc7Ci0gIHZhciBCRUZPUkVf
T0JTRVJWRVJTID0gJzpiZWZvcmUnOwotCi0gIGZ1bmN0aW9uIGNoYW5nZUV2ZW50KGtleU5hbWUp
IHsKLSAgICByZXR1cm4ga2V5TmFtZSArIEFGVEVSX09CU0VSVkVSUzsKLSAgfQotCi0gIGZ1bmN0
aW9uIGJlZm9yZUV2ZW50KGtleU5hbWUpIHsKLSAgICByZXR1cm4ga2V5TmFtZSArIEJFRk9SRV9P
QlNFUlZFUlM7Ci0gIH0KLQotICAvKioKLSAgICBAbWV0aG9kIGFkZE9ic2VydmVyCi0gICAgQGZv
ciBFbWJlcgotICAgIEBwYXJhbSBvYmoKLSAgICBAcGFyYW0ge1N0cmluZ30gX3BhdGgKLSAgICBA
cGFyYW0ge09iamVjdHxGdW5jdGlvbn0gdGFyZ2V0Ci0gICAgQHBhcmFtIHtGdW5jdGlvbnxTdHJp
bmd9IFttZXRob2RdCi0gICAgQHB1YmxpYwotICAqLwotCi0gIGZ1bmN0aW9uIGFkZE9ic2VydmVy
KG9iaiwgX3BhdGgsIHRhcmdldCwgbWV0aG9kKSB7Ci0gICAgX2VtYmVyTWV0YWxFdmVudHMuYWRk
TGlzdGVuZXIob2JqLCBjaGFuZ2VFdmVudChfcGF0aCksIHRhcmdldCwgbWV0aG9kKTsKLSAgICBf
ZW1iZXJNZXRhbFdhdGNoaW5nLndhdGNoKG9iaiwgX3BhdGgpOwotCi0gICAgcmV0dXJuIHRoaXM7
Ci0gIH0KLQotICBmdW5jdGlvbiBvYnNlcnZlcnNGb3Iob2JqLCBwYXRoKSB7Ci0gICAgcmV0dXJu
IF9lbWJlck1ldGFsRXZlbnRzLmxpc3RlbmVyc0ZvcihvYmosIGNoYW5nZUV2ZW50KHBhdGgpKTsK
LSAgfQotCi0gIC8qKgotICAgIEBtZXRob2QgcmVtb3ZlT2JzZXJ2ZXIKLSAgICBAZm9yIEVtYmVy
Ci0gICAgQHBhcmFtIG9iagotICAgIEBwYXJhbSB7U3RyaW5nfSBwYXRoCi0gICAgQHBhcmFtIHtP
YmplY3R8RnVuY3Rpb259IHRhcmdldAotICAgIEBwYXJhbSB7RnVuY3Rpb258U3RyaW5nfSBbbWV0
aG9kXQotICAgIEBwdWJsaWMKLSAgKi8KLQotICBmdW5jdGlvbiByZW1vdmVPYnNlcnZlcihvYmos
IHBhdGgsIHRhcmdldCwgbWV0aG9kKSB7Ci0gICAgX2VtYmVyTWV0YWxXYXRjaGluZy51bndhdGNo
KG9iaiwgcGF0aCk7Ci0gICAgX2VtYmVyTWV0YWxFdmVudHMucmVtb3ZlTGlzdGVuZXIob2JqLCBj
aGFuZ2VFdmVudChwYXRoKSwgdGFyZ2V0LCBtZXRob2QpOwotCi0gICAgcmV0dXJuIHRoaXM7Ci0g
IH0KLQotICAvKioKLSAgICBAbWV0aG9kIF9hZGRCZWZvcmVPYnNlcnZlcgotICAgIEBmb3IgRW1i
ZXIKLSAgICBAcGFyYW0gb2JqCi0gICAgQHBhcmFtIHtTdHJpbmd9IHBhdGgKLSAgICBAcGFyYW0g
e09iamVjdHxGdW5jdGlvbn0gdGFyZ2V0Ci0gICAgQHBhcmFtIHtGdW5jdGlvbnxTdHJpbmd9IFtt
ZXRob2RdCi0gICAgQGRlcHJlY2F0ZWQKLSAgICBAcHJpdmF0ZQotICAqLwotCi0gIGZ1bmN0aW9u
IF9hZGRCZWZvcmVPYnNlcnZlcihvYmosIHBhdGgsIHRhcmdldCwgbWV0aG9kKSB7Ci0gICAgX2Vt
YmVyTWV0YWxFdmVudHMuYWRkTGlzdGVuZXIob2JqLCBiZWZvcmVFdmVudChwYXRoKSwgdGFyZ2V0
LCBtZXRob2QpOwotICAgIF9lbWJlck1ldGFsV2F0Y2hpbmcud2F0Y2gob2JqLCBwYXRoKTsKLQot
ICAgIHJldHVybiB0aGlzOwotICB9Ci0KLSAgLy8gU3VzcGVuZCBvYnNlcnZlciBkdXJpbmcgY2Fs
bGJhY2suCi0gIC8vCi0gIC8vIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZCBieSB0aGUgdGFyZ2V0
IG9mIHRoZSBvYnNlcnZlcgotICAvLyB3aGlsZSBpdCBpcyBzZXR0aW5nIHRoZSBvYnNlcnZlZCBw
YXRoLgotCi0gIGZ1bmN0aW9uIF9zdXNwZW5kT2JzZXJ2ZXIob2JqLCBwYXRoLCB0YXJnZXQsIG1l
dGhvZCwgY2FsbGJhY2spIHsKLSAgICByZXR1cm4gX2VtYmVyTWV0YWxFdmVudHMuc3VzcGVuZExp
c3RlbmVyKG9iaiwgY2hhbmdlRXZlbnQocGF0aCksIHRhcmdldCwgbWV0aG9kLCBjYWxsYmFjayk7
Ci0gIH0KLQotICBmdW5jdGlvbiBfc3VzcGVuZE9ic2VydmVycyhvYmosIHBhdGhzLCB0YXJnZXQs
IG1ldGhvZCwgY2FsbGJhY2spIHsKLSAgICB2YXIgZXZlbnRzID0gcGF0aHMubWFwKGNoYW5nZUV2
ZW50KTsKLSAgICByZXR1cm4gX2VtYmVyTWV0YWxFdmVudHMuc3VzcGVuZExpc3RlbmVycyhvYmos
IGV2ZW50cywgdGFyZ2V0LCBtZXRob2QsIGNhbGxiYWNrKTsKLSAgfQotCi0gIC8qKgotICAgIEBt
ZXRob2QgcmVtb3ZlQmVmb3JlT2JzZXJ2ZXIKLSAgICBAZm9yIEVtYmVyCi0gICAgQHBhcmFtIG9i
agotICAgIEBwYXJhbSB7U3RyaW5nfSBwYXRoCi0gICAgQHBhcmFtIHtPYmplY3R8RnVuY3Rpb259
IHRhcmdldAotICAgIEBwYXJhbSB7RnVuY3Rpb258U3RyaW5nfSBbbWV0aG9kXQotICAgIEBkZXBy
ZWNhdGVkCi0gICAgQHByaXZhdGUKLSAgKi8KLQotICBmdW5jdGlvbiBfcmVtb3ZlQmVmb3JlT2Jz
ZXJ2ZXIob2JqLCBwYXRoLCB0YXJnZXQsIG1ldGhvZCkgewotICAgIF9lbWJlck1ldGFsV2F0Y2hp
bmcudW53YXRjaChvYmosIHBhdGgpOwotICAgIF9lbWJlck1ldGFsRXZlbnRzLnJlbW92ZUxpc3Rl
bmVyKG9iaiwgYmVmb3JlRXZlbnQocGF0aCksIHRhcmdldCwgbWV0aG9kKTsKLQotICAgIHJldHVy
biB0aGlzOwotICB9Ci19KTsKLWVuaWZlZCgnZW1iZXItbWV0YWwvb2JzZXJ2ZXJfc2V0JywgWydl
eHBvcnRzJywgJ2VtYmVyLW1ldGFsL3V0aWxzJywgJ2VtYmVyLW1ldGFsL2V2ZW50cyddLCBmdW5j
dGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0YWxVdGlscywgX2VtYmVyTWV0YWxFdmVudHMpIHsKLSAg
J3VzZSBzdHJpY3QnOwotCi0gIC8qCi0gICAgdGhpcy5vYnNlcnZlclNldCA9IHsKLSAgICAgIFtz
ZW5kZXJHdWlkXTogeyAvLyB2YXJpYWJsZSBuYW1lOiBga2V5U2V0YAotICAgICAgICBba2V5TmFt
ZV06IGxpc3RJbmRleAotICAgICAgfQotICAgIH0sCi0gICAgdGhpcy5vYnNlcnZlcnMgPSBbCi0g
ICAgICB7Ci0gICAgICAgIHNlbmRlcjogb2JqLAotICAgICAgICBrZXlOYW1lOiBrZXlOYW1lLAot
ICAgICAgICBldmVudE5hbWU6IGV2ZW50TmFtZSwKLSAgICAgICAgbGlzdGVuZXJzOiBbCi0gICAg
ICAgICAgW3RhcmdldCwgbWV0aG9kLCBmbGFnc10KLSAgICAgICAgXQotICAgICAgfSwKLSAgICAg
IC4uLgotICAgIF0KLSAgKi8KLSAgZXhwb3J0cy5kZWZhdWx0ID0gT2JzZXJ2ZXJTZXQ7Ci0KLSAg
ZnVuY3Rpb24gT2JzZXJ2ZXJTZXQoKSB7Ci0gICAgdGhpcy5jbGVhcigpOwotICB9Ci0KLSAgT2Jz
ZXJ2ZXJTZXQucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIChzZW5kZXIsIGtleU5hbWUsIGV2ZW50
TmFtZSkgewotICAgIHZhciBvYnNlcnZlclNldCA9IHRoaXMub2JzZXJ2ZXJTZXQ7Ci0gICAgdmFy
IG9ic2VydmVycyA9IHRoaXMub2JzZXJ2ZXJzOwotICAgIHZhciBzZW5kZXJHdWlkID0gX2VtYmVy
TWV0YWxVdGlscy5ndWlkRm9yKHNlbmRlcik7Ci0gICAgdmFyIGtleVNldCA9IG9ic2VydmVyU2V0
W3NlbmRlckd1aWRdOwotICAgIHZhciBpbmRleDsKLQotICAgIGlmICgha2V5U2V0KSB7Ci0gICAg
ICBvYnNlcnZlclNldFtzZW5kZXJHdWlkXSA9IGtleVNldCA9IHt9OwotICAgIH0KLSAgICBpbmRl
eCA9IGtleVNldFtrZXlOYW1lXTsKLSAgICBpZiAoaW5kZXggPT09IHVuZGVmaW5lZCkgewotICAg
ICAgaW5kZXggPSBvYnNlcnZlcnMucHVzaCh7Ci0gICAgICAgIHNlbmRlcjogc2VuZGVyLAotICAg
ICAgICBrZXlOYW1lOiBrZXlOYW1lLAotICAgICAgICBldmVudE5hbWU6IGV2ZW50TmFtZSwKLSAg
ICAgICAgbGlzdGVuZXJzOiBbXQotICAgICAgfSkgLSAxOwotICAgICAga2V5U2V0W2tleU5hbWVd
ID0gaW5kZXg7Ci0gICAgfQotICAgIHJldHVybiBvYnNlcnZlcnNbaW5kZXhdLmxpc3RlbmVyczsK
LSAgfTsKLQotICBPYnNlcnZlclNldC5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoKSB7Ci0g
ICAgdmFyIG9ic2VydmVycyA9IHRoaXMub2JzZXJ2ZXJzOwotICAgIHZhciBpLCBsZW4sIG9ic2Vy
dmVyLCBzZW5kZXI7Ci0gICAgdGhpcy5jbGVhcigpOwotICAgIGZvciAoaSA9IDAsIGxlbiA9IG9i
c2VydmVycy5sZW5ndGg7IGkgPCBsZW47ICsraSkgewotICAgICAgb2JzZXJ2ZXIgPSBvYnNlcnZl
cnNbaV07Ci0gICAgICBzZW5kZXIgPSBvYnNlcnZlci5zZW5kZXI7Ci0gICAgICBpZiAoc2VuZGVy
LmlzRGVzdHJveWluZyB8fCBzZW5kZXIuaXNEZXN0cm95ZWQpIHsKLSAgICAgICAgY29udGludWU7
Ci0gICAgICB9Ci0gICAgICBfZW1iZXJNZXRhbEV2ZW50cy5zZW5kRXZlbnQoc2VuZGVyLCBvYnNl
cnZlci5ldmVudE5hbWUsIFtzZW5kZXIsIG9ic2VydmVyLmtleU5hbWVdLCBvYnNlcnZlci5saXN0
ZW5lcnMpOwotICAgIH0KLSAgfTsKLQotICBPYnNlcnZlclNldC5wcm90b3R5cGUuY2xlYXIgPSBm
dW5jdGlvbiAoKSB7Ci0gICAgdGhpcy5vYnNlcnZlclNldCA9IHt9OwotICAgIHRoaXMub2JzZXJ2
ZXJzID0gW107Ci0gIH07Ci19KTsKLWVuaWZlZCgnZW1iZXItbWV0YWwvcGF0aF9jYWNoZScsIFsn
ZXhwb3J0cycsICdlbWJlci1tZXRhbC9jYWNoZSddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVy
TWV0YWxDYWNoZSkgewotICAndXNlIHN0cmljdCc7Ci0KLSAgZXhwb3J0cy5pc0dsb2JhbCA9IGlz
R2xvYmFsOwotICBleHBvcnRzLmlzR2xvYmFsUGF0aCA9IGlzR2xvYmFsUGF0aDsKLSAgZXhwb3J0
cy5oYXNUaGlzID0gaGFzVGhpczsKLSAgZXhwb3J0cy5pc1BhdGggPSBpc1BhdGg7Ci0gIGV4cG9y
dHMuZ2V0Rmlyc3RLZXkgPSBnZXRGaXJzdEtleTsKLSAgZXhwb3J0cy5nZXRUYWlsUGF0aCA9IGdl
dFRhaWxQYXRoOwotCi0gIHZhciBJU19HTE9CQUwgPSAvXltBLVokXS87Ci0gIHZhciBJU19HTE9C
QUxfUEFUSCA9IC9eW0EtWiRdLipbXC5dLzsKLSAgdmFyIEhBU19USElTID0gJ3RoaXMuJzsKLQot
ICB2YXIgaXNHbG9iYWxDYWNoZSA9IG5ldyBfZW1iZXJNZXRhbENhY2hlLmRlZmF1bHQoMTAwMCwg
ZnVuY3Rpb24gKGtleSkgewotICAgIHJldHVybiBJU19HTE9CQUwudGVzdChrZXkpOwotICB9KTsK
LQotICB2YXIgaXNHbG9iYWxQYXRoQ2FjaGUgPSBuZXcgX2VtYmVyTWV0YWxDYWNoZS5kZWZhdWx0
KDEwMDAsIGZ1bmN0aW9uIChrZXkpIHsKLSAgICByZXR1cm4gSVNfR0xPQkFMX1BBVEgudGVzdChr
ZXkpOwotICB9KTsKLQotICB2YXIgaGFzVGhpc0NhY2hlID0gbmV3IF9lbWJlck1ldGFsQ2FjaGUu
ZGVmYXVsdCgxMDAwLCBmdW5jdGlvbiAoa2V5KSB7Ci0gICAgcmV0dXJuIGtleS5sYXN0SW5kZXhP
ZihIQVNfVEhJUywgMCkgPT09IDA7Ci0gIH0pOwotCi0gIHZhciBmaXJzdERvdEluZGV4Q2FjaGUg
PSBuZXcgX2VtYmVyTWV0YWxDYWNoZS5kZWZhdWx0KDEwMDAsIGZ1bmN0aW9uIChrZXkpIHsKLSAg
ICByZXR1cm4ga2V5LmluZGV4T2YoJy4nKTsKLSAgfSk7Ci0KLSAgdmFyIGZpcnN0S2V5Q2FjaGUg
PSBuZXcgX2VtYmVyTWV0YWxDYWNoZS5kZWZhdWx0KDEwMDAsIGZ1bmN0aW9uIChwYXRoKSB7Ci0g
ICAgdmFyIGluZGV4ID0gZmlyc3REb3RJbmRleENhY2hlLmdldChwYXRoKTsKLSAgICBpZiAoaW5k
ZXggPT09IC0xKSB7Ci0gICAgICByZXR1cm4gcGF0aDsKLSAgICB9IGVsc2UgewotICAgICAgcmV0
dXJuIHBhdGguc2xpY2UoMCwgaW5kZXgpOwotICAgIH0KLSAgfSk7Ci0KLSAgdmFyIHRhaWxQYXRo
Q2FjaGUgPSBuZXcgX2VtYmVyTWV0YWxDYWNoZS5kZWZhdWx0KDEwMDAsIGZ1bmN0aW9uIChwYXRo
KSB7Ci0gICAgdmFyIGluZGV4ID0gZmlyc3REb3RJbmRleENhY2hlLmdldChwYXRoKTsKLSAgICBp
ZiAoaW5kZXggIT09IC0xKSB7Ci0gICAgICByZXR1cm4gcGF0aC5zbGljZShpbmRleCArIDEpOwot
ICAgIH0KLSAgfSk7Ci0KLSAgdmFyIGNhY2hlcyA9IHsKLSAgICBpc0dsb2JhbENhY2hlOiBpc0ds
b2JhbENhY2hlLAotICAgIGlzR2xvYmFsUGF0aENhY2hlOiBpc0dsb2JhbFBhdGhDYWNoZSwKLSAg
ICBoYXNUaGlzQ2FjaGU6IGhhc1RoaXNDYWNoZSwKLSAgICBmaXJzdERvdEluZGV4Q2FjaGU6IGZp
cnN0RG90SW5kZXhDYWNoZSwKLSAgICBmaXJzdEtleUNhY2hlOiBmaXJzdEtleUNhY2hlLAotICAg
IHRhaWxQYXRoQ2FjaGU6IHRhaWxQYXRoQ2FjaGUKLSAgfTsKLQotICBleHBvcnRzLmNhY2hlcyA9
IGNhY2hlczsKLQotICBmdW5jdGlvbiBpc0dsb2JhbChwYXRoKSB7Ci0gICAgcmV0dXJuIGlzR2xv
YmFsQ2FjaGUuZ2V0KHBhdGgpOwotICB9Ci0KLSAgZnVuY3Rpb24gaXNHbG9iYWxQYXRoKHBhdGgp
IHsKLSAgICByZXR1cm4gaXNHbG9iYWxQYXRoQ2FjaGUuZ2V0KHBhdGgpOwotICB9Ci0KLSAgZnVu
Y3Rpb24gaGFzVGhpcyhwYXRoKSB7Ci0gICAgcmV0dXJuIGhhc1RoaXNDYWNoZS5nZXQocGF0aCk7
Ci0gIH0KLQotICBmdW5jdGlvbiBpc1BhdGgocGF0aCkgewotICAgIHJldHVybiBmaXJzdERvdElu
ZGV4Q2FjaGUuZ2V0KHBhdGgpICE9PSAtMTsKLSAgfQotCi0gIGZ1bmN0aW9uIGdldEZpcnN0S2V5
KHBhdGgpIHsKLSAgICByZXR1cm4gZmlyc3RLZXlDYWNoZS5nZXQocGF0aCk7Ci0gIH0KLQotICBm
dW5jdGlvbiBnZXRUYWlsUGF0aChwYXRoKSB7Ci0gICAgcmV0dXJuIHRhaWxQYXRoQ2FjaGUuZ2V0
KHBhdGgpOwotICB9Ci19KTsKLWVuaWZlZCgnZW1iZXItbWV0YWwvcHJvcGVydGllcycsIFsnZXhw
b3J0cycsICdlbWJlci1tZXRhbC9kZWJ1ZycsICdlbWJlci1tZXRhbC9mZWF0dXJlcycsICdlbWJl
ci1tZXRhbC9tZXRhJywgJ2VtYmVyLW1ldGFsL3Byb3BlcnR5X2V2ZW50cyddLCBmdW5jdGlvbiAo
ZXhwb3J0cywgX2VtYmVyTWV0YWxEZWJ1ZywgX2VtYmVyTWV0YWxGZWF0dXJlcywgX2VtYmVyTWV0
YWxNZXRhLCBfZW1iZXJNZXRhbFByb3BlcnR5X2V2ZW50cykgewotICAvKioKLSAgQG1vZHVsZSBl
bWJlci1tZXRhbAotICAqLwotCi0gICd1c2Ugc3RyaWN0JzsKLQotICBleHBvcnRzLkRlc2NyaXB0
b3IgPSBEZXNjcmlwdG9yOwotICBleHBvcnRzLk1BTkRBVE9SWV9TRVRURVJfRlVOQ1RJT04gPSBN
QU5EQVRPUllfU0VUVEVSX0ZVTkNUSU9OOwotICBleHBvcnRzLkRFRkFVTFRfR0VUVEVSX0ZVTkNU
SU9OID0gREVGQVVMVF9HRVRURVJfRlVOQ1RJT047Ci0gIGV4cG9ydHMuSU5IRVJJVElOR19HRVRU
RVJfRlVOQ1RJT04gPSBJTkhFUklUSU5HX0dFVFRFUl9GVU5DVElPTjsKLSAgZXhwb3J0cy5kZWZp
bmVQcm9wZXJ0eSA9IGRlZmluZVByb3BlcnR5OwotCi0gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLSAgLy8gREVTQ1JJUFRPUgot
ICAvLwotCi0gIC8qKgotICAgIE9iamVjdHMgb2YgdGhpcyB0eXBlIGNhbiBpbXBsZW1lbnQgYW4g
aW50ZXJmYWNlIHRvIHJlc3BvbmQgdG8gcmVxdWVzdHMgdG8KLSAgICBnZXQgYW5kIHNldC4gVGhl
IGRlZmF1bHQgaW1wbGVtZW50YXRpb24gaGFuZGxlcyBzaW1wbGUgcHJvcGVydGllcy4KLSAgCi0g
ICAgQGNsYXNzIERlc2NyaXB0b3IKLSAgICBAcHJpdmF0ZQotICAqLwotCi0gIGZ1bmN0aW9uIERl
c2NyaXB0b3IoKSB7Ci0gICAgdGhpcy5pc0Rlc2NyaXB0b3IgPSB0cnVlOwotICB9Ci0KLSAgdmFy
IFJFREVGSU5FX1NVUFBPUlRFRCA9IChmdW5jdGlvbiAoKSB7Ci0gICAgLy8gaHR0cHM6Ly9naXRo
dWIuY29tL3NwYWxnZXIva2liYW5hL2NvbW1pdC9iN2UzNWU2NzM3ZGY1ODU1ODUzMzI4NTdhNGMz
OTdkYzIwNmU3ZmY5Ci0gICAgdmFyIGEgPSBPYmplY3QuY3JlYXRlKE9iamVjdC5wcm90b3R5cGUs
IHsKLSAgICAgIHByb3A6IHsKLSAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAotICAgICAgICB2
YWx1ZTogMQotICAgICAgfQotICAgIH0pOwotCi0gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGEs
ICdwcm9wJywgewotICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAotICAgICAgdmFsdWU6IDIKLSAg
ICB9KTsKLQotICAgIHJldHVybiBhLnByb3AgPT09IDI7Ci0gIH0pKCk7Ci0gIC8vIC4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLSAgLy8g
REVGSU5JTkcgUFJPUEVSVElFUyBBUEkKLSAgLy8KLQotICBmdW5jdGlvbiBNQU5EQVRPUllfU0VU
VEVSX0ZVTkNUSU9OKG5hbWUpIHsKLSAgICBmdW5jdGlvbiBTRVRURVJfRlVOQ1RJT04odmFsdWUp
IHsKLSAgICAgIF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0KCdZb3UgbXVzdCB1c2UgRW1iZXIuc2V0
KCkgdG8gc2V0IHRoZSBgJyArIG5hbWUgKyAnYCBwcm9wZXJ0eSAob2YgJyArIHRoaXMgKyAnKSB0
byBgJyArIHZhbHVlICsgJ2AuJywgZmFsc2UpOwotICAgIH0KLQotICAgIFNFVFRFUl9GVU5DVElP
Ti5pc01hbmRhdG9yeVNldHRlciA9IHRydWU7Ci0gICAgcmV0dXJuIFNFVFRFUl9GVU5DVElPTjsK
LSAgfQotCi0gIGZ1bmN0aW9uIERFRkFVTFRfR0VUVEVSX0ZVTkNUSU9OKG5hbWUpIHsKLSAgICBy
ZXR1cm4gZnVuY3Rpb24gR0VUVEVSX0ZVTkNUSU9OKCkgewotICAgICAgdmFyIG1ldGEgPSB0aGlz
WydfX2VtYmVyX21ldGFfXyddOwotICAgICAgcmV0dXJuIG1ldGEgJiYgbWV0YS5wZWVrVmFsdWVz
KG5hbWUpOwotICAgIH07Ci0gIH0KLQotICBmdW5jdGlvbiBJTkhFUklUSU5HX0dFVFRFUl9GVU5D
VElPTihuYW1lKSB7Ci0gICAgZnVuY3Rpb24gSUdFVFRFUl9GVU5DVElPTigpIHsKLSAgICAgIHZh
ciBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKTsKLSAgICAgIHJldHVybiBwcm90
byAmJiBwcm90b1tuYW1lXTsKLSAgICB9Ci0KLSAgICBJR0VUVEVSX0ZVTkNUSU9OLmlzSW5oZXJp
dGluZ0dldHRlciA9IHRydWU7Ci0gICAgcmV0dXJuIElHRVRURVJfRlVOQ1RJT047Ci0gIH0KLQot
ICAvKioKLSAgICBOT1RFOiBUaGlzIGlzIGEgbG93LWxldmVsIG1ldGhvZCB1c2VkIGJ5IG90aGVy
IHBhcnRzIG9mIHRoZSBBUEkuIFlvdSBhbG1vc3QKLSAgICBuZXZlciB3YW50IHRvIGNhbGwgdGhp
cyBtZXRob2QgZGlyZWN0bHkuIEluc3RlYWQgeW91IHNob3VsZCB1c2UKLSAgICBgRW1iZXIubWl4
aW4oKWAgdG8gZGVmaW5lIG5ldyBwcm9wZXJ0aWVzLgotICAKLSAgICBEZWZpbmVzIGEgcHJvcGVy
dHkgb24gYW4gb2JqZWN0LiBUaGlzIG1ldGhvZCB3b3JrcyBtdWNoIGxpa2UgdGhlIEVTNQotICAg
IGBPYmplY3QuZGVmaW5lUHJvcGVydHkoKWAgbWV0aG9kIGV4Y2VwdCB0aGF0IGl0IGNhbiBhbHNv
IGFjY2VwdCBjb21wdXRlZAotICAgIHByb3BlcnRpZXMgYW5kIG90aGVyIHNwZWNpYWwgZGVzY3Jp
cHRvcnMuCi0gIAotICAgIE5vcm1hbGx5IHRoaXMgbWV0aG9kIHRha2VzIG9ubHkgdGhyZWUgcGFy
YW1ldGVycy4gSG93ZXZlciBpZiB5b3UgcGFzcyBhbgotICAgIGluc3RhbmNlIG9mIGBEZXNjcmlw
dG9yYCBhcyB0aGUgdGhpcmQgcGFyYW0gdGhlbiB5b3UgY2FuIHBhc3MgYW4KLSAgICBvcHRpb25h
bCB2YWx1ZSBhcyB0aGUgZm91cnRoIHBhcmFtZXRlci4gVGhpcyBpcyBvZnRlbiBtb3JlIGVmZmlj
aWVudCB0aGFuCi0gICAgY3JlYXRpbmcgbmV3IGRlc2NyaXB0b3IgaGFzaGVzIGZvciBlYWNoIHBy
b3BlcnR5LgotICAKLSAgICAjIyBFeGFtcGxlcwotICAKLSAgICBgYGBqYXZhc2NyaXB0Ci0gICAg
Ly8gRVM1IGNvbXBhdGlibGUgbW9kZQotICAgIEVtYmVyLmRlZmluZVByb3BlcnR5KGNvbnRhY3Qs
ICdmaXJzdE5hbWUnLCB7Ci0gICAgICB3cml0YWJsZTogdHJ1ZSwKLSAgICAgIGNvbmZpZ3VyYWJs
ZTogZmFsc2UsCi0gICAgICBlbnVtZXJhYmxlOiB0cnVlLAotICAgICAgdmFsdWU6ICdDaGFybGVz
JwotICAgIH0pOwotICAKLSAgICAvLyBkZWZpbmUgYSBzaW1wbGUgcHJvcGVydHkKLSAgICBFbWJl
ci5kZWZpbmVQcm9wZXJ0eShjb250YWN0LCAnbGFzdE5hbWUnLCB1bmRlZmluZWQsICdKb2xsZXkn
KTsKLSAgCi0gICAgLy8gZGVmaW5lIGEgY29tcHV0ZWQgcHJvcGVydHkKLSAgICBFbWJlci5kZWZp
bmVQcm9wZXJ0eShjb250YWN0LCAnZnVsbE5hbWUnLCBFbWJlci5jb21wdXRlZCgnZmlyc3ROYW1l
JywgJ2xhc3ROYW1lJywgZnVuY3Rpb24oKSB7Ci0gICAgICByZXR1cm4gdGhpcy5maXJzdE5hbWUr
JyAnK3RoaXMubGFzdE5hbWU7Ci0gICAgfSkpOwotICAgIGBgYAotICAKLSAgICBAcHJpdmF0ZQot
ICAgIEBtZXRob2QgZGVmaW5lUHJvcGVydHkKLSAgICBAZm9yIEVtYmVyCi0gICAgQHBhcmFtIHtP
YmplY3R9IG9iaiB0aGUgb2JqZWN0IHRvIGRlZmluZSB0aGlzIHByb3BlcnR5IG9uLiBUaGlzIG1h
eSBiZSBhIHByb3RvdHlwZS4KLSAgICBAcGFyYW0ge1N0cmluZ30ga2V5TmFtZSB0aGUgbmFtZSBv
ZiB0aGUgcHJvcGVydHkKLSAgICBAcGFyYW0ge0Rlc2NyaXB0b3J9IFtkZXNjXSBhbiBpbnN0YW5j
ZSBvZiBgRGVzY3JpcHRvcmAgKHR5cGljYWxseSBhCi0gICAgICBjb21wdXRlZCBwcm9wZXJ0eSkg
b3IgYW4gRVM1IGRlc2NyaXB0b3IuCi0gICAgICBZb3UgbXVzdCBwcm92aWRlIHRoaXMgb3IgYGRh
dGFgIGJ1dCBub3QgYm90aC4KLSAgICBAcGFyYW0geyp9IFtkYXRhXSBzb21ldGhpbmcgb3RoZXIg
dGhhbiBhIGRlc2NyaXB0b3IsIHRoYXQgd2lsbAotICAgICAgYmVjb21lIHRoZSBleHBsaWNpdCB2
YWx1ZSBvZiB0aGlzIHByb3BlcnR5LgotICAqLwotCi0gIGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5
KG9iaiwga2V5TmFtZSwgZGVzYywgZGF0YSwgbWV0YSkgewotICAgIHZhciBwb3NzaWJsZURlc2Ms
IGV4aXN0aW5nRGVzYywgd2F0Y2hpbmcsIHZhbHVlOwotCi0gICAgaWYgKCFtZXRhKSB7Ci0gICAg
ICBtZXRhID0gX2VtYmVyTWV0YWxNZXRhLm1ldGEob2JqKTsKLSAgICB9Ci0gICAgdmFyIHdhdGNo
RW50cnkgPSBtZXRhLnBlZWtXYXRjaGluZyhrZXlOYW1lKTsKLSAgICBwb3NzaWJsZURlc2MgPSBv
Ympba2V5TmFtZV07Ci0gICAgZXhpc3RpbmdEZXNjID0gcG9zc2libGVEZXNjICE9PSBudWxsICYm
IHR5cGVvZiBwb3NzaWJsZURlc2MgPT09ICdvYmplY3QnICYmIHBvc3NpYmxlRGVzYy5pc0Rlc2Ny
aXB0b3IgPyBwb3NzaWJsZURlc2MgOiB1bmRlZmluZWQ7Ci0KLSAgICB3YXRjaGluZyA9IHdhdGNo
RW50cnkgIT09IHVuZGVmaW5lZCAmJiB3YXRjaEVudHJ5ID4gMDsKLQotICAgIGlmIChleGlzdGlu
Z0Rlc2MpIHsKLSAgICAgIGV4aXN0aW5nRGVzYy50ZWFyZG93bihvYmosIGtleU5hbWUpOwotICAg
IH0KLQotICAgIGlmIChkZXNjIGluc3RhbmNlb2YgRGVzY3JpcHRvcikgewotICAgICAgdmFsdWUg
PSBkZXNjOwotCi0gICAgICBpZiAod2F0Y2hpbmcpIHsKLSAgICAgICAgT2JqZWN0LmRlZmluZVBy
b3BlcnR5KG9iaiwga2V5TmFtZSwgewotICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKLSAg
ICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAotICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAotICAg
ICAgICAgIHZhbHVlOiB2YWx1ZQotICAgICAgICB9KTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAg
IG9ialtrZXlOYW1lXSA9IHZhbHVlOwotICAgICAgfQotCi0gICAgICBpZiAoZGVzYy5zZXR1cCkg
ewotICAgICAgICBkZXNjLnNldHVwKG9iaiwga2V5TmFtZSk7Ci0gICAgICB9Ci0gICAgfSBlbHNl
IHsKLSAgICAgIGlmIChkZXNjID09IG51bGwpIHsKLSAgICAgICAgdmFsdWUgPSBkYXRhOwotCi0g
ICAgICAgIGlmICh3YXRjaGluZykgewotICAgICAgICAgIG1ldGEud3JpdGVWYWx1ZXMoa2V5TmFt
ZSwgZGF0YSk7Ci0KLSAgICAgICAgICB2YXIgZGVmYXVsdERlc2NyaXB0b3IgPSB7Ci0gICAgICAg
ICAgICBjb25maWd1cmFibGU6IHRydWUsCi0gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAot
ICAgICAgICAgICAgc2V0OiBNQU5EQVRPUllfU0VUVEVSX0ZVTkNUSU9OKGtleU5hbWUpLAotICAg
ICAgICAgICAgZ2V0OiBERUZBVUxUX0dFVFRFUl9GVU5DVElPTihrZXlOYW1lKQotICAgICAgICAg
IH07Ci0KLSAgICAgICAgICBpZiAoUkVERUZJTkVfU1VQUE9SVEVEKSB7Ci0gICAgICAgICAgICBP
YmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXlOYW1lLCBkZWZhdWx0RGVzY3JpcHRvcik7Ci0g
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGhhbmRsZUJyb2tlblBoYW50b21EZWZpbmVQ
cm9wZXJ0eShvYmosIGtleU5hbWUsIGRlZmF1bHREZXNjcmlwdG9yKTsKLSAgICAgICAgICB9Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgb2JqW2tleU5hbWVdID0gZGF0YTsKLSAgICAgICAg
fQotICAgICAgfSBlbHNlIHsKLSAgICAgICAgdmFsdWUgPSBkZXNjOwotCi0gICAgICAgIC8vIGZh
bGxiYWNrIHRvIEVTNQotICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXlOYW1l
LCBkZXNjKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBpZiBrZXkgaXMgYmVpbmcgd2F0Y2hl
ZCwgb3ZlcnJpZGUgY2hhaW5zIHRoYXQKLSAgICAvLyB3ZXJlIGluaXRpYWxpemVkIHdpdGggdGhl
IHByb3RvdHlwZQotICAgIGlmICh3YXRjaGluZykgewotICAgICAgX2VtYmVyTWV0YWxQcm9wZXJ0
eV9ldmVudHMub3ZlcnJpZGVDaGFpbnMob2JqLCBrZXlOYW1lLCBtZXRhKTsKLSAgICB9Ci0KLSAg
ICAvLyBUaGUgYHZhbHVlYCBwYXNzZWQgdG8gdGhlIGBkaWREZWZpbmVQcm9wZXJ0eWAgaG9vayBp
cwotICAgIC8vIGVpdGhlciB0aGUgZGVzY3JpcHRvciBvciBkYXRhLCB3aGljaGV2ZXIgd2FzIHBh
c3NlZC4KLSAgICBpZiAob2JqLmRpZERlZmluZVByb3BlcnR5KSB7Ci0gICAgICBvYmouZGlkRGVm
aW5lUHJvcGVydHkob2JqLCBrZXlOYW1lLCB2YWx1ZSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRo
aXM7Ci0gIH0KLQotICBmdW5jdGlvbiBoYW5kbGVCcm9rZW5QaGFudG9tRGVmaW5lUHJvcGVydHko
b2JqLCBrZXlOYW1lLCBkZXNjKSB7Ci0gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FyaXlhL3Bo
YW50b21qcy9pc3N1ZXMvMTE4NTYKLSAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXlO
YW1lLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiAnaUNyeScg
fSk7Ci0gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5TmFtZSwgZGVzYyk7Ci0gIH0K
LX0pOwotZW5pZmVkKCdlbWJlci1tZXRhbC9wcm9wZXJ0eV9ldmVudHMnLCBbJ2V4cG9ydHMnLCAn
ZW1iZXItbWV0YWwvdXRpbHMnLCAnZW1iZXItbWV0YWwvbWV0YScsICdlbWJlci1tZXRhbC9ldmVu
dHMnLCAnZW1iZXItbWV0YWwvb2JzZXJ2ZXJfc2V0JywgJ2VtYmVyLW1ldGFsL3N5bWJvbCddLCBm
dW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0YWxVdGlscywgX2VtYmVyTWV0YWxNZXRhLCBfZW1i
ZXJNZXRhbEV2ZW50cywgX2VtYmVyTWV0YWxPYnNlcnZlcl9zZXQsIF9lbWJlck1ldGFsU3ltYm9s
KSB7Ci0gICd1c2Ugc3RyaWN0JzsKLQotICB2YXIgUFJPUEVSVFlfRElEX0NIQU5HRSA9IF9lbWJl
ck1ldGFsU3ltYm9sLmRlZmF1bHQoJ1BST1BFUlRZX0RJRF9DSEFOR0UnKTsKLQotICBleHBvcnRz
LlBST1BFUlRZX0RJRF9DSEFOR0UgPSBQUk9QRVJUWV9ESURfQ0hBTkdFOwotICB2YXIgYmVmb3Jl
T2JzZXJ2ZXJTZXQgPSBuZXcgX2VtYmVyTWV0YWxPYnNlcnZlcl9zZXQuZGVmYXVsdCgpOwotICB2
YXIgb2JzZXJ2ZXJTZXQgPSBuZXcgX2VtYmVyTWV0YWxPYnNlcnZlcl9zZXQuZGVmYXVsdCgpOwot
ICB2YXIgZGVmZXJyZWQgPSAwOwotCi0gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLSAgLy8gUFJPUEVSVFkgQ0hBTkdFUwotICAv
LwotCi0gIC8qKgotICAgIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGp1c3QgYmVmb3JlIGFuIG9i
amVjdCBwcm9wZXJ0eSBpcyBhYm91dCB0byBjaGFuZ2UuCi0gICAgSXQgd2lsbCBub3RpZnkgYW55
IGJlZm9yZSBvYnNlcnZlcnMgYW5kIHByZXBhcmUgY2FjaGVzIGFtb25nIG90aGVyIHRoaW5ncy4K
LSAgCi0gICAgTm9ybWFsbHkgeW91IHdpbGwgbm90IG5lZWQgdG8gY2FsbCB0aGlzIG1ldGhvZCBk
aXJlY3RseSBidXQgaWYgZm9yIHNvbWUKLSAgICByZWFzb24geW91IGNhbid0IGRpcmVjdGx5IHdh
dGNoIGEgcHJvcGVydHkgeW91IGNhbiBpbnZva2UgdGhpcyBtZXRob2QKLSAgICBtYW51YWxseSBh
bG9uZyB3aXRoIGBFbWJlci5wcm9wZXJ0eURpZENoYW5nZSgpYCB3aGljaCB5b3Ugc2hvdWxkIGNh
bGwganVzdAotICAgIGFmdGVyIHRoZSBwcm9wZXJ0eSB2YWx1ZSBjaGFuZ2VzLgotICAKLSAgICBA
bWV0aG9kIHByb3BlcnR5V2lsbENoYW5nZQotICAgIEBmb3IgRW1iZXIKLSAgICBAcGFyYW0ge09i
amVjdH0gb2JqIFRoZSBvYmplY3Qgd2l0aCB0aGUgcHJvcGVydHkgdGhhdCB3aWxsIGNoYW5nZQot
ICAgIEBwYXJhbSB7U3RyaW5nfSBrZXlOYW1lIFRoZSBwcm9wZXJ0eSBrZXkgKG9yIHBhdGgpIHRo
YXQgd2lsbCBjaGFuZ2UuCi0gICAgQHJldHVybiB7dm9pZH0KLSAgICBAcHJpdmF0ZQotICAqLwot
ICBmdW5jdGlvbiBwcm9wZXJ0eVdpbGxDaGFuZ2Uob2JqLCBrZXlOYW1lKSB7Ci0gICAgdmFyIG0g
PSBfZW1iZXJNZXRhbE1ldGEucGVla01ldGEob2JqKTsKLSAgICB2YXIgd2F0Y2hpbmcgPSBtICYm
IG0ucGVla1dhdGNoaW5nKGtleU5hbWUpID4gMCB8fCBrZXlOYW1lID09PSAnbGVuZ3RoJzsKLSAg
ICB2YXIgcHJvdG8gPSBtICYmIG0ucHJvdG87Ci0gICAgdmFyIHBvc3NpYmxlRGVzYyA9IG9ialtr
ZXlOYW1lXTsKLSAgICB2YXIgZGVzYyA9IHBvc3NpYmxlRGVzYyAhPT0gbnVsbCAmJiB0eXBlb2Yg
cG9zc2libGVEZXNjID09PSAnb2JqZWN0JyAmJiBwb3NzaWJsZURlc2MuaXNEZXNjcmlwdG9yID8g
cG9zc2libGVEZXNjIDogdW5kZWZpbmVkOwotCi0gICAgaWYgKCF3YXRjaGluZykgewotICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGlmIChwcm90byA9PT0gb2JqKSB7Ci0gICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgaWYgKGRlc2MgJiYgZGVzYy53aWxsQ2hhbmdlKSB7Ci0gICAgICBkZXNj
LndpbGxDaGFuZ2Uob2JqLCBrZXlOYW1lKTsKLSAgICB9Ci0KLSAgICBkZXBlbmRlbnRLZXlzV2ls
bENoYW5nZShvYmosIGtleU5hbWUsIG0pOwotICAgIGNoYWluc1dpbGxDaGFuZ2Uob2JqLCBrZXlO
YW1lLCBtKTsKLSAgICBub3RpZnlCZWZvcmVPYnNlcnZlcnMob2JqLCBrZXlOYW1lKTsKLSAgfQot
Ci0gIC8qKgotICAgIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGp1c3QgYWZ0ZXIgYW4gb2JqZWN0
IHByb3BlcnR5IGhhcyBjaGFuZ2VkLgotICAgIEl0IHdpbGwgbm90aWZ5IGFueSBvYnNlcnZlcnMg
YW5kIGNsZWFyIGNhY2hlcyBhbW9uZyBvdGhlciB0aGluZ3MuCi0gIAotICAgIE5vcm1hbGx5IHlv
dSB3aWxsIG5vdCBuZWVkIHRvIGNhbGwgdGhpcyBtZXRob2QgZGlyZWN0bHkgYnV0IGlmIGZvciBz
b21lCi0gICAgcmVhc29uIHlvdSBjYW4ndCBkaXJlY3RseSB3YXRjaCBhIHByb3BlcnR5IHlvdSBj
YW4gaW52b2tlIHRoaXMgbWV0aG9kCi0gICAgbWFudWFsbHkgYWxvbmcgd2l0aCBgRW1iZXIucHJv
cGVydHlXaWxsQ2hhbmdlKClgIHdoaWNoIHlvdSBzaG91bGQgY2FsbCBqdXN0Ci0gICAgYmVmb3Jl
IHRoZSBwcm9wZXJ0eSB2YWx1ZSBjaGFuZ2VzLgotICAKLSAgICBAbWV0aG9kIHByb3BlcnR5RGlk
Q2hhbmdlCi0gICAgQGZvciBFbWJlcgotICAgIEBwYXJhbSB7T2JqZWN0fSBvYmogVGhlIG9iamVj
dCB3aXRoIHRoZSBwcm9wZXJ0eSB0aGF0IHdpbGwgY2hhbmdlCi0gICAgQHBhcmFtIHtTdHJpbmd9
IGtleU5hbWUgVGhlIHByb3BlcnR5IGtleSAob3IgcGF0aCkgdGhhdCB3aWxsIGNoYW5nZS4KLSAg
ICBAcmV0dXJuIHt2b2lkfQotICAgIEBwcml2YXRlCi0gICovCi0gIGZ1bmN0aW9uIHByb3BlcnR5
RGlkQ2hhbmdlKG9iaiwga2V5TmFtZSkgewotICAgIHZhciBtID0gX2VtYmVyTWV0YWxNZXRhLnBl
ZWtNZXRhKG9iaik7Ci0gICAgdmFyIHdhdGNoaW5nID0gbSAmJiBtLnBlZWtXYXRjaGluZyhrZXlO
YW1lKSA+IDAgfHwga2V5TmFtZSA9PT0gJ2xlbmd0aCc7Ci0gICAgdmFyIHByb3RvID0gbSAmJiBt
LnByb3RvOwotICAgIHZhciBwb3NzaWJsZURlc2MgPSBvYmpba2V5TmFtZV07Ci0gICAgdmFyIGRl
c2MgPSBwb3NzaWJsZURlc2MgIT09IG51bGwgJiYgdHlwZW9mIHBvc3NpYmxlRGVzYyA9PT0gJ29i
amVjdCcgJiYgcG9zc2libGVEZXNjLmlzRGVzY3JpcHRvciA/IHBvc3NpYmxlRGVzYyA6IHVuZGVm
aW5lZDsKLQotICAgIGlmIChwcm90byA9PT0gb2JqKSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgLy8gc2hvdWxkbid0IHRoaXMgbWVhbiB0aGF0IHdlJ3JlIHdhdGNoaW5nIHRoaXMga2V5
PwotICAgIGlmIChkZXNjICYmIGRlc2MuZGlkQ2hhbmdlKSB7Ci0gICAgICBkZXNjLmRpZENoYW5n
ZShvYmosIGtleU5hbWUpOwotICAgIH0KLQotICAgIGlmIChvYmpbUFJPUEVSVFlfRElEX0NIQU5H
RV0pIHsKLSAgICAgIG9ialtQUk9QRVJUWV9ESURfQ0hBTkdFXShrZXlOYW1lKTsKLSAgICB9Ci0K
LSAgICBpZiAoIXdhdGNoaW5nICYmIGtleU5hbWUgIT09ICdsZW5ndGgnKSB7Ci0gICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgaWYgKG0gJiYgbS5oYXNEZXBzKGtleU5hbWUpKSB7Ci0gICAgICBk
ZXBlbmRlbnRLZXlzRGlkQ2hhbmdlKG9iaiwga2V5TmFtZSwgbSk7Ci0gICAgfQotCi0gICAgY2hh
aW5zRGlkQ2hhbmdlKG9iaiwga2V5TmFtZSwgbSwgZmFsc2UpOwotICAgIG5vdGlmeU9ic2VydmVy
cyhvYmosIGtleU5hbWUpOwotICB9Ci0KLSAgdmFyIFdJTExfU0VFTiwgRElEX1NFRU47Ci0gIC8v
IGNhbGxlZCB3aGVuZXZlciBhIHByb3BlcnR5IGlzIGFib3V0IHRvIGNoYW5nZSB0byBjbGVhciB0
aGUgY2FjaGUgb2YgYW55IGRlcGVuZGVudCBrZXlzIChhbmQgbm90aWZ5IHRob3NlIHByb3BlcnRp
ZXMgb2YgY2hhbmdlcywgZXRjLi4uKQotICBmdW5jdGlvbiBkZXBlbmRlbnRLZXlzV2lsbENoYW5n
ZShvYmosIGRlcEtleSwgbWV0YSkgewotICAgIGlmIChvYmouaXNEZXN0cm95aW5nKSB7Ci0gICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG1ldGEgJiYgbWV0YS5oYXNEZXBzKGRlcEtleSkp
IHsKLSAgICAgIHZhciBzZWVuID0gV0lMTF9TRUVOOwotICAgICAgdmFyIHRvcCA9ICFzZWVuOwot
Ci0gICAgICBpZiAodG9wKSB7Ci0gICAgICAgIHNlZW4gPSBXSUxMX1NFRU4gPSB7fTsKLSAgICAg
IH0KLQotICAgICAgaXRlckRlcHMocHJvcGVydHlXaWxsQ2hhbmdlLCBvYmosIGRlcEtleSwgc2Vl
biwgbWV0YSk7Ci0KLSAgICAgIGlmICh0b3ApIHsKLSAgICAgICAgV0lMTF9TRUVOID0gbnVsbDsK
LSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvLyBjYWxsZWQgd2hlbmV2ZXIgYSBwcm9wZXJ0eSBo
YXMganVzdCBjaGFuZ2VkIHRvIHVwZGF0ZSBkZXBlbmRlbnQga2V5cwotICBmdW5jdGlvbiBkZXBl
bmRlbnRLZXlzRGlkQ2hhbmdlKG9iaiwgZGVwS2V5LCBtZXRhKSB7Ci0gICAgaWYgKG9iai5pc0Rl
c3Ryb3lpbmcpIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAobWV0YSAmJiBtZXRh
Lmhhc0RlcHMoZGVwS2V5KSkgewotICAgICAgdmFyIHNlZW4gPSBESURfU0VFTjsKLSAgICAgIHZh
ciB0b3AgPSAhc2VlbjsKLQotICAgICAgaWYgKHRvcCkgewotICAgICAgICBzZWVuID0gRElEX1NF
RU4gPSB7fTsKLSAgICAgIH0KLQotICAgICAgaXRlckRlcHMocHJvcGVydHlEaWRDaGFuZ2UsIG9i
aiwgZGVwS2V5LCBzZWVuLCBtZXRhKTsKLQotICAgICAgaWYgKHRvcCkgewotICAgICAgICBESURf
U0VFTiA9IG51bGw7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gaXRlckRlcHMo
bWV0aG9kLCBvYmosIGRlcEtleSwgc2VlbiwgbWV0YSkgewotICAgIHZhciBwb3NzaWJsZURlc2Ms
IGRlc2M7Ci0gICAgdmFyIGd1aWQgPSBfZW1iZXJNZXRhbFV0aWxzLmd1aWRGb3Iob2JqKTsKLSAg
ICB2YXIgY3VycmVudCA9IHNlZW5bZ3VpZF07Ci0KLSAgICBpZiAoIWN1cnJlbnQpIHsKLSAgICAg
IGN1cnJlbnQgPSBzZWVuW2d1aWRdID0ge307Ci0gICAgfQotCi0gICAgaWYgKGN1cnJlbnRbZGVw
S2V5XSkgewotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGN1cnJlbnRbZGVwS2V5XSA9IHRy
dWU7Ci0KLSAgICBtZXRhLmZvckVhY2hJbkRlcHMoZGVwS2V5LCBmdW5jdGlvbiAoa2V5LCB2YWx1
ZSkgewotICAgICAgaWYgKCF2YWx1ZSkgewotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0KLSAg
ICAgIHBvc3NpYmxlRGVzYyA9IG9ialtrZXldOwotICAgICAgZGVzYyA9IHBvc3NpYmxlRGVzYyAh
PT0gbnVsbCAmJiB0eXBlb2YgcG9zc2libGVEZXNjID09PSAnb2JqZWN0JyAmJiBwb3NzaWJsZURl
c2MuaXNEZXNjcmlwdG9yID8gcG9zc2libGVEZXNjIDogdW5kZWZpbmVkOwotCi0gICAgICBpZiAo
ZGVzYyAmJiBkZXNjLl9zdXNwZW5kZWQgPT09IG9iaikgewotICAgICAgICByZXR1cm47Ci0gICAg
ICB9Ci0KLSAgICAgIG1ldGhvZChvYmosIGtleSk7Ci0gICAgfSk7Ci0gIH0KLQotICBmdW5jdGlv
biBjaGFpbnNXaWxsQ2hhbmdlKG9iaiwga2V5TmFtZSwgbSkgewotICAgIHZhciBjID0gbS5yZWFk
YWJsZUNoYWluV2F0Y2hlcnMoKTsKLSAgICBpZiAoYykgewotICAgICAgYy5ub3RpZnkoa2V5TmFt
ZSwgZmFsc2UsIHByb3BlcnR5V2lsbENoYW5nZSk7Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24g
Y2hhaW5zRGlkQ2hhbmdlKG9iaiwga2V5TmFtZSwgbSkgewotICAgIHZhciBjID0gbS5yZWFkYWJs
ZUNoYWluV2F0Y2hlcnMoKTsKLSAgICBpZiAoYykgewotICAgICAgYy5ub3RpZnkoa2V5TmFtZSwg
dHJ1ZSwgcHJvcGVydHlEaWRDaGFuZ2UpOwotICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIG92ZXJy
aWRlQ2hhaW5zKG9iaiwga2V5TmFtZSwgbSkgewotICAgIHZhciBjID0gbS5yZWFkYWJsZUNoYWlu
V2F0Y2hlcnMoKTsKLSAgICBpZiAoYykgewotICAgICAgYy5yZXZhbGlkYXRlKGtleU5hbWUpOwot
ICAgIH0KLSAgfQotCi0gIC8qKgotICAgIEBtZXRob2QgYmVnaW5Qcm9wZXJ0eUNoYW5nZXMKLSAg
ICBAY2hhaW5hYmxlCi0gICAgQHByaXZhdGUKLSAgKi8KLSAgZnVuY3Rpb24gYmVnaW5Qcm9wZXJ0
eUNoYW5nZXMoKSB7Ci0gICAgZGVmZXJyZWQrKzsKLSAgfQotCi0gIC8qKgotICAgIEBtZXRob2Qg
ZW5kUHJvcGVydHlDaGFuZ2VzCi0gICAgQHByaXZhdGUKLSAgKi8KLSAgZnVuY3Rpb24gZW5kUHJv
cGVydHlDaGFuZ2VzKCkgewotICAgIGRlZmVycmVkLS07Ci0gICAgaWYgKGRlZmVycmVkIDw9IDAp
IHsKLSAgICAgIGJlZm9yZU9ic2VydmVyU2V0LmNsZWFyKCk7Ci0gICAgICBvYnNlcnZlclNldC5m
bHVzaCgpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgIE1ha2UgYSBzZXJpZXMgb2YgcHJvcGVy
dHkgY2hhbmdlcyB0b2dldGhlciBpbiBhbgotICAgIGV4Y2VwdGlvbi1zYWZlIHdheS4KLSAgCi0g
ICAgYGBgamF2YXNjcmlwdAotICAgIEVtYmVyLmNoYW5nZVByb3BlcnRpZXMoZnVuY3Rpb24oKSB7
Ci0gICAgICBvYmoxLnNldCgnZm9vJywgbWF5Qmxvd1VwV2hlblNldCk7Ci0gICAgICBvYmoyLnNl
dCgnYmFyJywgYmF6KTsKLSAgICB9KTsKLSAgICBgYGAKLSAgCi0gICAgQG1ldGhvZCBjaGFuZ2VQ
cm9wZXJ0aWVzCi0gICAgQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sKLSAgICBAcGFyYW0gW2Jp
bmRpbmddCi0gICAgQHByaXZhdGUKLSAgKi8KLSAgZnVuY3Rpb24gY2hhbmdlUHJvcGVydGllcyhj
YWxsYmFjaywgYmluZGluZykgewotICAgIGJlZ2luUHJvcGVydHlDaGFuZ2VzKCk7Ci0gICAgdHJ5
IHsKLSAgICAgIGNhbGxiYWNrLmNhbGwoYmluZGluZyk7Ci0gICAgfSBmaW5hbGx5IHsKLSAgICAg
IGVuZFByb3BlcnR5Q2hhbmdlcy5jYWxsKGJpbmRpbmcpOwotICAgIH0KLSAgfQotCi0gIGZ1bmN0
aW9uIG5vdGlmeUJlZm9yZU9ic2VydmVycyhvYmosIGtleU5hbWUpIHsKLSAgICBpZiAob2JqLmlz
RGVzdHJveWluZykgewotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHZhciBldmVudE5hbWUg
PSBrZXlOYW1lICsgJzpiZWZvcmUnOwotICAgIHZhciBsaXN0ZW5lcnMsIGFkZGVkOwotICAgIGlm
IChkZWZlcnJlZCkgewotICAgICAgbGlzdGVuZXJzID0gYmVmb3JlT2JzZXJ2ZXJTZXQuYWRkKG9i
aiwga2V5TmFtZSwgZXZlbnROYW1lKTsKLSAgICAgIGFkZGVkID0gX2VtYmVyTWV0YWxFdmVudHMu
YWNjdW11bGF0ZUxpc3RlbmVycyhvYmosIGV2ZW50TmFtZSwgbGlzdGVuZXJzKTsKLSAgICAgIF9l
bWJlck1ldGFsRXZlbnRzLnNlbmRFdmVudChvYmosIGV2ZW50TmFtZSwgW29iaiwga2V5TmFtZV0s
IGFkZGVkKTsKLSAgICB9IGVsc2UgewotICAgICAgX2VtYmVyTWV0YWxFdmVudHMuc2VuZEV2ZW50
KG9iaiwgZXZlbnROYW1lLCBbb2JqLCBrZXlOYW1lXSk7Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rp
b24gbm90aWZ5T2JzZXJ2ZXJzKG9iaiwga2V5TmFtZSkgewotICAgIGlmIChvYmouaXNEZXN0cm95
aW5nKSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgdmFyIGV2ZW50TmFtZSA9IGtleU5h
bWUgKyAnOmNoYW5nZSc7Ci0gICAgdmFyIGxpc3RlbmVyczsKLSAgICBpZiAoZGVmZXJyZWQpIHsK
LSAgICAgIGxpc3RlbmVycyA9IG9ic2VydmVyU2V0LmFkZChvYmosIGtleU5hbWUsIGV2ZW50TmFt
ZSk7Ci0gICAgICBfZW1iZXJNZXRhbEV2ZW50cy5hY2N1bXVsYXRlTGlzdGVuZXJzKG9iaiwgZXZl
bnROYW1lLCBsaXN0ZW5lcnMpOwotICAgIH0gZWxzZSB7Ci0gICAgICBfZW1iZXJNZXRhbEV2ZW50
cy5zZW5kRXZlbnQob2JqLCBldmVudE5hbWUsIFtvYmosIGtleU5hbWVdKTsKLSAgICB9Ci0gIH0K
LQotICBleHBvcnRzLnByb3BlcnR5V2lsbENoYW5nZSA9IHByb3BlcnR5V2lsbENoYW5nZTsKLSAg
ZXhwb3J0cy5wcm9wZXJ0eURpZENoYW5nZSA9IHByb3BlcnR5RGlkQ2hhbmdlOwotICBleHBvcnRz
Lm92ZXJyaWRlQ2hhaW5zID0gb3ZlcnJpZGVDaGFpbnM7Ci0gIGV4cG9ydHMuYmVnaW5Qcm9wZXJ0
eUNoYW5nZXMgPSBiZWdpblByb3BlcnR5Q2hhbmdlczsKLSAgZXhwb3J0cy5lbmRQcm9wZXJ0eUNo
YW5nZXMgPSBlbmRQcm9wZXJ0eUNoYW5nZXM7Ci0gIGV4cG9ydHMuY2hhbmdlUHJvcGVydGllcyA9
IGNoYW5nZVByb3BlcnRpZXM7Ci19KTsKLWVuaWZlZCgnZW1iZXItbWV0YWwvcHJvcGVydHlfZ2V0
JywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFsL2RlYnVnJywgJ2VtYmVyLW1ldGFsL3BhdGhfY2Fj
aGUnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1ldGFsRGVidWcsIF9lbWJlck1ldGFsUGF0
aF9jYWNoZSkgewotICAvKioKLSAgQG1vZHVsZSBlbWJlci1tZXRhbAotICAqLwotCi0gICd1c2Ug
c3RyaWN0JzsKLQotICBleHBvcnRzLmdldCA9IGdldDsKLSAgZXhwb3J0cy5fZ2V0UGF0aCA9IF9n
ZXRQYXRoOwotICBleHBvcnRzLmdldFdpdGhEZWZhdWx0ID0gZ2V0V2l0aERlZmF1bHQ7Ci0KLSAg
dmFyIEFMTE9XQUJMRV9UWVBFUyA9IHsKLSAgICBvYmplY3Q6IHRydWUsCi0gICAgZnVuY3Rpb246
IHRydWUsCi0gICAgc3RyaW5nOiB0cnVlCi0gIH07Ci0KLSAgLy8gLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgotICAvLyBHRVQgQU5EIFNF
VAotICAvLwotICAvLyBJZiB3ZSBhcmUgb24gYSBwbGF0Zm9ybSB0aGF0IHN1cHBvcnRzIGFjY2Vz
c29ycyB3ZSBjYW4gdXNlIHRob3NlLgotICAvLyBPdGhlcndpc2Ugc2ltdWxhdGUgYWNjZXNzb3Jz
IGJ5IGxvb2tpbmcgdXAgdGhlIHByb3BlcnR5IGRpcmVjdGx5IG9uIHRoZQotICAvLyBvYmplY3Qu
Ci0KLSAgLyoqCi0gICAgR2V0cyB0aGUgdmFsdWUgb2YgYSBwcm9wZXJ0eSBvbiBhbiBvYmplY3Qu
IElmIHRoZSBwcm9wZXJ0eSBpcyBjb21wdXRlZCwKLSAgICB0aGUgZnVuY3Rpb24gd2lsbCBiZSBp
bnZva2VkLiBJZiB0aGUgcHJvcGVydHkgaXMgbm90IGRlZmluZWQgYnV0IHRoZQotICAgIG9iamVj
dCBpbXBsZW1lbnRzIHRoZSBgdW5rbm93blByb3BlcnR5YCBtZXRob2QgdGhlbiB0aGF0IHdpbGwg
YmUgaW52b2tlZC4KLSAgCi0gICAgSWYgeW91IHBsYW4gdG8gcnVuIG9uIElFOCBhbmQgb2xkZXIg
YnJvd3NlcnMgdGhlbiB5b3Ugc2hvdWxkIHVzZSB0aGlzCi0gICAgbWV0aG9kIGFueXRpbWUgeW91
IHdhbnQgdG8gcmV0cmlldmUgYSBwcm9wZXJ0eSBvbiBhbiBvYmplY3QgdGhhdCB5b3UgZG9uJ3QK
LSAgICBrbm93IGZvciBzdXJlIGlzIHByaXZhdGUuIChQcm9wZXJ0aWVzIGJlZ2lubmluZyB3aXRo
IGFuIHVuZGVyc2NvcmUgJ18nCi0gICAgYXJlIGNvbnNpZGVyZWQgcHJpdmF0ZS4pCi0gIAotICAg
IE9uIGFsbCBuZXdlciBicm93c2VycywgeW91IG9ubHkgbmVlZCB0byB1c2UgdGhpcyBtZXRob2Qg
dG8gcmV0cmlldmUKLSAgICBwcm9wZXJ0aWVzIGlmIHRoZSBwcm9wZXJ0eSBtaWdodCBub3QgYmUg
ZGVmaW5lZCBvbiB0aGUgb2JqZWN0IGFuZCB5b3Ugd2FudAotICAgIHRvIHJlc3BlY3QgdGhlIGB1
bmtub3duUHJvcGVydHlgIGhhbmRsZXIuIE90aGVyd2lzZSB5b3UgY2FuIGlnbm9yZSB0aGlzCi0g
ICAgbWV0aG9kLgotICAKLSAgICBOb3RlIHRoYXQgaWYgdGhlIG9iamVjdCBpdHNlbGYgaXMgYHVu
ZGVmaW5lZGAsIHRoaXMgbWV0aG9kIHdpbGwgdGhyb3cKLSAgICBhbiBlcnJvci4KLSAgCi0gICAg
QG1ldGhvZCBnZXQKLSAgICBAZm9yIEVtYmVyCi0gICAgQHBhcmFtIHtPYmplY3R9IG9iaiBUaGUg
b2JqZWN0IHRvIHJldHJpZXZlIGZyb20uCi0gICAgQHBhcmFtIHtTdHJpbmd9IGtleU5hbWUgVGhl
IHByb3BlcnR5IGtleSB0byByZXRyaWV2ZQotICAgIEByZXR1cm4ge09iamVjdH0gdGhlIHByb3Bl
cnR5IHZhbHVlIG9yIGBudWxsYC4KLSAgICBAcHVibGljCi0gICovCi0KLSAgZnVuY3Rpb24gZ2V0
KG9iaiwga2V5TmFtZSkgewotICAgIF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0KCdHZXQgbXVzdCBi
ZSBjYWxsZWQgd2l0aCB0d28gYXJndW1lbnRzOyBhbiBvYmplY3QgYW5kIGEgcHJvcGVydHkga2V5
JywgYXJndW1lbnRzLmxlbmd0aCA9PT0gMik7Ci0gICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQo
J0Nhbm5vdCBjYWxsIGdldCB3aXRoIFwnJyArIGtleU5hbWUgKyAnXCcgb24gYW4gdW5kZWZpbmVk
IG9iamVjdC4nLCBvYmogIT09IHVuZGVmaW5lZCAmJiBvYmogIT09IG51bGwpOwotICAgIF9lbWJl
ck1ldGFsRGVidWcuYXNzZXJ0KCdUaGUga2V5IHByb3ZpZGVkIHRvIGdldCBtdXN0IGJlIGEgc3Ry
aW5nLCB5b3UgcGFzc2VkICcgKyBrZXlOYW1lLCB0eXBlb2Yga2V5TmFtZSA9PT0gJ3N0cmluZycp
OwotICAgIF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0KCdcJ3RoaXNcJyBpbiBwYXRocyBpcyBub3Qg
c3VwcG9ydGVkJywgIV9lbWJlck1ldGFsUGF0aF9jYWNoZS5oYXNUaGlzKGtleU5hbWUpKTsKLQot
ICAgIC8vIEhlbHBlcnMgdGhhdCBvcGVyYXRlIHdpdGggJ3RoaXMnIHdpdGhpbiBhbiAjZWFjaAot
ICAgIGlmIChrZXlOYW1lID09PSAnJykgewotICAgICAgcmV0dXJuIG9iajsKLSAgICB9Ci0KLSAg
ICB2YXIgdmFsdWUgPSBvYmpba2V5TmFtZV07Ci0gICAgdmFyIGRlc2MgPSB2YWx1ZSAhPT0gbnVs
bCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlLmlzRGVzY3JpcHRvciA/IHZh
bHVlIDogdW5kZWZpbmVkOwotICAgIHZhciByZXQ7Ci0KLSAgICBpZiAoZGVzYyA9PT0gdW5kZWZp
bmVkICYmIF9lbWJlck1ldGFsUGF0aF9jYWNoZS5pc1BhdGgoa2V5TmFtZSkpIHsKLSAgICAgIHJl
dHVybiBfZ2V0UGF0aChvYmosIGtleU5hbWUpOwotICAgIH0KLQotICAgIGlmIChkZXNjKSB7Ci0g
ICAgICByZXR1cm4gZGVzYy5nZXQob2JqLCBrZXlOYW1lKTsKLSAgICB9IGVsc2UgewotICAgICAg
cmV0ID0gdmFsdWU7Ci0KLSAgICAgIGlmIChyZXQgPT09IHVuZGVmaW5lZCAmJiAnb2JqZWN0JyA9
PT0gdHlwZW9mIG9iaiAmJiAhKGtleU5hbWUgaW4gb2JqKSAmJiAnZnVuY3Rpb24nID09PSB0eXBl
b2Ygb2JqLnVua25vd25Qcm9wZXJ0eSkgewotICAgICAgICByZXR1cm4gb2JqLnVua25vd25Qcm9w
ZXJ0eShrZXlOYW1lKTsKLSAgICAgIH0KLQotICAgICAgcmV0dXJuIHJldDsKLSAgICB9Ci0gIH0K
LQotICBmdW5jdGlvbiBfZ2V0UGF0aChyb290LCBwYXRoKSB7Ci0gICAgdmFyIG9iaiA9IHJvb3Q7
Ci0gICAgdmFyIHBhcnRzID0gcGF0aC5zcGxpdCgnLicpOwotCi0gICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBwYXJ0cy5sZW5ndGg7IGkrKykgewotICAgICAgaWYgKCFpc0dldHRhYmxlKG9iaikpIHsK
LSAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKLSAgICAgIH0KLQotICAgICAgb2JqID0gZ2V0KG9i
aiwgcGFydHNbaV0pOwotCi0gICAgICBpZiAob2JqICYmIG9iai5pc0Rlc3Ryb3llZCkgewotICAg
ICAgICByZXR1cm4gdW5kZWZpbmVkOwotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBvYmo7
Ci0gIH0KLQotICBmdW5jdGlvbiBpc0dldHRhYmxlKG9iaikgewotICAgIGlmIChvYmogPT0gbnVs
bCkgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiBBTExPV0FCTEVf
VFlQRVNbdHlwZW9mIG9ial07Ci0gIH0KLQotICAvKioKLSAgICBSZXRyaWV2ZXMgdGhlIHZhbHVl
IG9mIGEgcHJvcGVydHkgZnJvbSBhbiBPYmplY3QsIG9yIGEgZGVmYXVsdCB2YWx1ZSBpbiB0aGUK
LSAgICBjYXNlIHRoYXQgdGhlIHByb3BlcnR5IHJldHVybnMgYHVuZGVmaW5lZGAuCi0gIAotICAg
IGBgYGphdmFzY3JpcHQKLSAgICBFbWJlci5nZXRXaXRoRGVmYXVsdChwZXJzb24sICdsYXN0TmFt
ZScsICdEb2UnKTsKLSAgICBgYGAKLSAgCi0gICAgQG1ldGhvZCBnZXRXaXRoRGVmYXVsdAotICAg
IEBmb3IgRW1iZXIKLSAgICBAcGFyYW0ge09iamVjdH0gb2JqIFRoZSBvYmplY3QgdG8gcmV0cmll
dmUgZnJvbS4KLSAgICBAcGFyYW0ge1N0cmluZ30ga2V5TmFtZSBUaGUgbmFtZSBvZiB0aGUgcHJv
cGVydHkgdG8gcmV0cmlldmUKLSAgICBAcGFyYW0ge09iamVjdH0gZGVmYXVsdFZhbHVlIFRoZSB2
YWx1ZSB0byByZXR1cm4gaWYgdGhlIHByb3BlcnR5IHZhbHVlIGlzIHVuZGVmaW5lZAotICAgIEBy
ZXR1cm4ge09iamVjdH0gVGhlIHByb3BlcnR5IHZhbHVlIG9yIHRoZSBkZWZhdWx0VmFsdWUuCi0g
ICAgQHB1YmxpYwotICAqLwotCi0gIGZ1bmN0aW9uIGdldFdpdGhEZWZhdWx0KHJvb3QsIGtleSwg
ZGVmYXVsdFZhbHVlKSB7Ci0gICAgdmFyIHZhbHVlID0gZ2V0KHJvb3QsIGtleSk7Ci0KLSAgICBp
ZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgewotICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTsKLSAg
ICB9Ci0gICAgcmV0dXJuIHZhbHVlOwotICB9Ci0KLSAgZXhwb3J0cy5kZWZhdWx0ID0gZ2V0Owot
fSk7Ci1lbmlmZWQoJ2VtYmVyLW1ldGFsL3Byb3BlcnR5X3NldCcsIFsnZXhwb3J0cycsICdlbWJl
ci1tZXRhbC9kZWJ1ZycsICdlbWJlci1tZXRhbC9mZWF0dXJlcycsICdlbWJlci1tZXRhbC9wcm9w
ZXJ0eV9nZXQnLCAnZW1iZXItbWV0YWwvcHJvcGVydHlfZXZlbnRzJywgJ2VtYmVyLW1ldGFsL3By
b3BlcnRpZXMnLCAnZW1iZXItbWV0YWwvZXJyb3InLCAnZW1iZXItbWV0YWwvcGF0aF9jYWNoZScs
ICdlbWJlci1tZXRhbC9tZXRhJywgJ2VtYmVyLW1ldGFsL3V0aWxzJywgJ2VtYmVyLW1ldGFsL3Rh
Z3MnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1ldGFsRGVidWcsIF9lbWJlck1ldGFsRmVh
dHVyZXMsIF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LCBfZW1iZXJNZXRhbFByb3BlcnR5X2V2ZW50
cywgX2VtYmVyTWV0YWxQcm9wZXJ0aWVzLCBfZW1iZXJNZXRhbEVycm9yLCBfZW1iZXJNZXRhbFBh
dGhfY2FjaGUsIF9lbWJlck1ldGFsTWV0YSwgX2VtYmVyTWV0YWxVdGlscywgX2VtYmVyTWV0YWxU
YWdzKSB7Ci0gICd1c2Ugc3RyaWN0JzsKLQotICBleHBvcnRzLnNldCA9IHNldDsKLSAgZXhwb3J0
cy50cnlTZXQgPSB0cnlTZXQ7Ci0KLSAgLyoqCi0gICAgU2V0cyB0aGUgdmFsdWUgb2YgYSBwcm9w
ZXJ0eSBvbiBhbiBvYmplY3QsIHJlc3BlY3RpbmcgY29tcHV0ZWQgcHJvcGVydGllcwotICAgIGFu
ZCBub3RpZnlpbmcgb2JzZXJ2ZXJzIGFuZCBvdGhlciBsaXN0ZW5lcnMgb2YgdGhlIGNoYW5nZS4g
SWYgdGhlCi0gICAgcHJvcGVydHkgaXMgbm90IGRlZmluZWQgYnV0IHRoZSBvYmplY3QgaW1wbGVt
ZW50cyB0aGUgYHNldFVua25vd25Qcm9wZXJ0eWAKLSAgICBtZXRob2QgdGhlbiB0aGF0IHdpbGwg
YmUgaW52b2tlZCBhcyB3ZWxsLgotICAKLSAgICBAbWV0aG9kIHNldAotICAgIEBmb3IgRW1iZXIK
LSAgICBAcGFyYW0ge09iamVjdH0gb2JqIFRoZSBvYmplY3QgdG8gbW9kaWZ5LgotICAgIEBwYXJh
bSB7U3RyaW5nfSBrZXlOYW1lIFRoZSBwcm9wZXJ0eSBrZXkgdG8gc2V0Ci0gICAgQHBhcmFtIHtP
YmplY3R9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQKLSAgICBAcmV0dXJuIHtPYmplY3R9IHRoZSBw
YXNzZWQgdmFsdWUuCi0gICAgQHB1YmxpYwotICAqLwotCi0gIGZ1bmN0aW9uIHNldChvYmosIGtl
eU5hbWUsIHZhbHVlLCB0b2xlcmFudCkgewotICAgIF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0KCdT
ZXQgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aHJlZSBvciBmb3VyIGFyZ3VtZW50czsgYW4gb2JqZWN0
LCBhIHByb3BlcnR5IGtleSwgYSB2YWx1ZSBhbmQgdG9sZXJhbnQgdHJ1ZS9mYWxzZScsIGFyZ3Vt
ZW50cy5sZW5ndGggPT09IDMgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gNCk7Ci0gICAgX2VtYmVy
TWV0YWxEZWJ1Zy5hc3NlcnQoJ0Nhbm5vdCBjYWxsIHNldCB3aXRoIFwnJyArIGtleU5hbWUgKyAn
XCcgb24gYW4gdW5kZWZpbmVkIG9iamVjdC4nLCBvYmogIT09IHVuZGVmaW5lZCAmJiBvYmogIT09
IG51bGwpOwotICAgIF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0KCdUaGUga2V5IHByb3ZpZGVkIHRv
IHNldCBtdXN0IGJlIGEgc3RyaW5nLCB5b3UgcGFzc2VkICcgKyBrZXlOYW1lLCB0eXBlb2Yga2V5
TmFtZSA9PT0gJ3N0cmluZycpOwotICAgIF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0KCdcJ3RoaXNc
JyBpbiBwYXRocyBpcyBub3Qgc3VwcG9ydGVkJywgIV9lbWJlck1ldGFsUGF0aF9jYWNoZS5oYXNU
aGlzKGtleU5hbWUpKTsKLQotICAgIHZhciBtZXRhID0gdW5kZWZpbmVkLAotICAgICAgICBwb3Nz
aWJsZURlc2MgPSB1bmRlZmluZWQsCi0gICAgICAgIGRlc2MgPSB1bmRlZmluZWQ7Ci0KLSAgICBp
ZiAob2JqKSB7Ci0gICAgICBtZXRhID0gX2VtYmVyTWV0YWxNZXRhLnBlZWtNZXRhKG9iaik7Ci0g
ICAgICBwb3NzaWJsZURlc2MgPSBvYmpba2V5TmFtZV07Ci0gICAgICBkZXNjID0gcG9zc2libGVE
ZXNjICE9PSBudWxsICYmIHR5cGVvZiBwb3NzaWJsZURlc2MgPT09ICdvYmplY3QnICYmIHBvc3Np
YmxlRGVzYy5pc0Rlc2NyaXB0b3IgPyBwb3NzaWJsZURlc2MgOiB1bmRlZmluZWQ7Ci0gICAgICBf
ZW1iZXJNZXRhbFRhZ3MubWFya09iamVjdEFzRGlydHkobWV0YSk7Ci0gICAgfQotCi0gICAgdmFy
IGlzVW5rbm93biwgY3VycmVudFZhbHVlOwotICAgIGlmIChkZXNjID09PSB1bmRlZmluZWQgJiYg
X2VtYmVyTWV0YWxQYXRoX2NhY2hlLmlzUGF0aChrZXlOYW1lKSkgewotICAgICAgcmV0dXJuIHNl
dFBhdGgob2JqLCBrZXlOYW1lLCB2YWx1ZSwgdG9sZXJhbnQpOwotICAgIH0KLQotICAgIF9lbWJl
ck1ldGFsRGVidWcuYXNzZXJ0KCdjYWxsaW5nIHNldCBvbiBkZXN0cm95ZWQgb2JqZWN0OiAnICsg
X2VtYmVyTWV0YWxVdGlscy50b1N0cmluZyhvYmopICsgJy4nICsga2V5TmFtZSArICcgPSAnICsg
X2VtYmVyTWV0YWxVdGlscy50b1N0cmluZyh2YWx1ZSksICFvYmouaXNEZXN0cm95ZWQpOwotCi0g
ICAgaWYgKGRlc2MpIHsKLSAgICAgIGRlc2Muc2V0KG9iaiwga2V5TmFtZSwgdmFsdWUpOwotICAg
IH0gZWxzZSB7Ci0gICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb2JqID09
PSAnb2JqZWN0JyAmJiBvYmpba2V5TmFtZV0gPT09IHZhbHVlKSB7Ci0gICAgICAgIHJldHVybiB2
YWx1ZTsKLSAgICAgIH0KLQotICAgICAgaXNVbmtub3duID0gJ29iamVjdCcgPT09IHR5cGVvZiBv
YmogJiYgIShrZXlOYW1lIGluIG9iaik7Ci0KLSAgICAgIC8vIHNldFVua25vd25Qcm9wZXJ0eSBp
cyBjYWxsZWQgaWYgYG9iamAgaXMgYW4gb2JqZWN0LAotICAgICAgLy8gdGhlIHByb3BlcnR5IGRv
ZXMgbm90IGFscmVhZHkgZXhpc3QsIGFuZCB0aGUKLSAgICAgIC8vIGBzZXRVbmtub3duUHJvcGVy
dHlgIG1ldGhvZCBleGlzdHMgb24gdGhlIG9iamVjdAotICAgICAgaWYgKGlzVW5rbm93biAmJiAn
ZnVuY3Rpb24nID09PSB0eXBlb2Ygb2JqLnNldFVua25vd25Qcm9wZXJ0eSkgewotICAgICAgICBv
Ymouc2V0VW5rbm93blByb3BlcnR5KGtleU5hbWUsIHZhbHVlKTsKLSAgICAgIH0gZWxzZSBpZiAo
bWV0YSAmJiBtZXRhLnBlZWtXYXRjaGluZyhrZXlOYW1lKSA+IDApIHsKLSAgICAgICAgaWYgKG1l
dGEucHJvdG8gIT09IG9iaikgewotICAgICAgICAgIGN1cnJlbnRWYWx1ZSA9IG9ialtrZXlOYW1l
XTsKLSAgICAgICAgfQotICAgICAgICAvLyBvbmx5IHRyaWdnZXIgYSBjaGFuZ2UgaWYgdGhlIHZh
bHVlIGhhcyBjaGFuZ2VkCi0gICAgICAgIGlmICh2YWx1ZSAhPT0gY3VycmVudFZhbHVlKSB7Ci0g
ICAgICAgICAgX2VtYmVyTWV0YWxQcm9wZXJ0eV9ldmVudHMucHJvcGVydHlXaWxsQ2hhbmdlKG9i
aiwga2V5TmFtZSk7Ci0KLSAgICAgICAgICBpZiAoY3VycmVudFZhbHVlID09PSB1bmRlZmluZWQg
JiYgIShrZXlOYW1lIGluIG9iaikgfHwgIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1l
cmFibGUuY2FsbChvYmosIGtleU5hbWUpKSB7Ci0gICAgICAgICAgICBfZW1iZXJNZXRhbFByb3Bl
cnRpZXMuZGVmaW5lUHJvcGVydHkob2JqLCBrZXlOYW1lLCBudWxsLCB2YWx1ZSk7IC8vIHNldHVw
IG1hbmRhdG9yeSBzZXR0ZXIKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICB2YXIg
ZGVzY3JpcHRvciA9IF9lbWJlck1ldGFsVXRpbHMubG9va3VwRGVzY3JpcHRvcihvYmosIGtleU5h
bWUpOwotICAgICAgICAgICAgICB2YXIgaXNNYW5kYXRvcnlTZXR0ZXIgPSBkZXNjcmlwdG9yICYm
IGRlc2NyaXB0b3Iuc2V0ICYmIGRlc2NyaXB0b3Iuc2V0LmlzTWFuZGF0b3J5U2V0dGVyOwotICAg
ICAgICAgICAgICBpZiAoaXNNYW5kYXRvcnlTZXR0ZXIpIHsKLSAgICAgICAgICAgICAgICBtZXRh
LndyaXRlVmFsdWVzKGtleU5hbWUsIHZhbHVlKTsKLSAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICBvYmpba2V5TmFtZV0gPSB2YWx1ZTsKLSAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgX2VtYmVyTWV0YWxQcm9wZXJ0eV9ldmVudHMucHJvcGVy
dHlEaWRDaGFuZ2Uob2JqLCBrZXlOYW1lKTsKLSAgICAgICAgfQotICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgb2JqW2tleU5hbWVdID0gdmFsdWU7Ci0gICAgICAgIGlmIChvYmpbX2VtYmVyTWV0YWxQ
cm9wZXJ0eV9ldmVudHMuUFJPUEVSVFlfRElEX0NIQU5HRV0pIHsKLSAgICAgICAgICBvYmpbX2Vt
YmVyTWV0YWxQcm9wZXJ0eV9ldmVudHMuUFJPUEVSVFlfRElEX0NIQU5HRV0oa2V5TmFtZSk7Ci0g
ICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHZhbHVlOwotICB9Ci0KLSAgZnVu
Y3Rpb24gc2V0UGF0aChyb290LCBwYXRoLCB2YWx1ZSwgdG9sZXJhbnQpIHsKLSAgICB2YXIga2V5
TmFtZTsKLQotICAgIC8vIGdldCB0aGUgbGFzdCBwYXJ0IG9mIHRoZSBwYXRoCi0gICAga2V5TmFt
ZSA9IHBhdGguc2xpY2UocGF0aC5sYXN0SW5kZXhPZignLicpICsgMSk7Ci0KLSAgICAvLyBnZXQg
dGhlIGZpcnN0IHBhcnQgb2YgdGhlIHBhcnQKLSAgICBwYXRoID0gcGF0aCA9PT0ga2V5TmFtZSA/
IGtleU5hbWUgOiBwYXRoLnNsaWNlKDAsIHBhdGgubGVuZ3RoIC0gKGtleU5hbWUubGVuZ3RoICsg
MSkpOwotCi0gICAgLy8gdW5sZXNzIHRoZSBwYXRoIGlzIHRoaXMsIGxvb2sgdXAgdGhlIGZpcnN0
IHBhcnQgdG8KLSAgICAvLyBnZXQgdGhlIHJvb3QKLSAgICBpZiAocGF0aCAhPT0gJ3RoaXMnKSB7
Ci0gICAgICByb290ID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuX2dldFBhdGgocm9vdCwgcGF0
aCk7Ci0gICAgfQotCi0gICAgaWYgKCFrZXlOYW1lIHx8IGtleU5hbWUubGVuZ3RoID09PSAwKSB7
Ci0gICAgICB0aHJvdyBuZXcgX2VtYmVyTWV0YWxFcnJvci5kZWZhdWx0KCdQcm9wZXJ0eSBzZXQg
ZmFpbGVkOiBZb3UgcGFzc2VkIGFuIGVtcHR5IHBhdGgnKTsKLSAgICB9Ci0KLSAgICBpZiAoIXJv
b3QpIHsKLSAgICAgIGlmICh0b2xlcmFudCkgewotICAgICAgICByZXR1cm47Ci0gICAgICB9IGVs
c2UgewotICAgICAgICB0aHJvdyBuZXcgX2VtYmVyTWV0YWxFcnJvci5kZWZhdWx0KCdQcm9wZXJ0
eSBzZXQgZmFpbGVkOiBvYmplY3QgaW4gcGF0aCAiJyArIHBhdGggKyAnIiBjb3VsZCBub3QgYmUg
Zm91bmQgb3Igd2FzIGRlc3Ryb3llZC4nKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4g
c2V0KHJvb3QsIGtleU5hbWUsIHZhbHVlKTsKLSAgfQotCi0gIC8qKgotICAgIEVycm9yLXRvbGVy
YW50IGZvcm0gb2YgYEVtYmVyLnNldGAuIFdpbGwgbm90IGJsb3cgdXAgaWYgYW55IHBhcnQgb2Yg
dGhlCi0gICAgY2hhaW4gaXMgYHVuZGVmaW5lZGAsIGBudWxsYCwgb3IgZGVzdHJveWVkLgotICAK
LSAgICBUaGlzIGlzIHByaW1hcmlseSB1c2VkIHdoZW4gc3luY2luZyBiaW5kaW5ncywgd2hpY2gg
bWF5IHRyeSB0byB1cGRhdGUgYWZ0ZXIKLSAgICBhbiBvYmplY3QgaGFzIGJlZW4gZGVzdHJveWVk
LgotICAKLSAgICBAbWV0aG9kIHRyeVNldAotICAgIEBmb3IgRW1iZXIKLSAgICBAcGFyYW0ge09i
amVjdH0gcm9vdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS4KLSAgICBAcGFyYW0ge1N0cmluZ30gcGF0
aCBUaGUgcHJvcGVydHkgcGF0aCB0byBzZXQKLSAgICBAcGFyYW0ge09iamVjdH0gdmFsdWUgVGhl
IHZhbHVlIHRvIHNldAotICAgIEBwdWJsaWMKLSAgKi8KLQotICBmdW5jdGlvbiB0cnlTZXQocm9v
dCwgcGF0aCwgdmFsdWUpIHsKLSAgICByZXR1cm4gc2V0KHJvb3QsIHBhdGgsIHZhbHVlLCB0cnVl
KTsKLSAgfQotfSk7Ci1lbmlmZWQoImVtYmVyLW1ldGFsL3JlcGxhY2UiLCBbImV4cG9ydHMiXSwg
ZnVuY3Rpb24gKGV4cG9ydHMpIHsKLSAgInVzZSBzdHJpY3QiOwotCi0gIGV4cG9ydHMuX3JlcGxh
Y2UgPSBfcmVwbGFjZTsKLSAgZXhwb3J0cy5kZWZhdWx0ID0gcmVwbGFjZTsKLSAgdmFyIHNwbGlj
ZSA9IEFycmF5LnByb3RvdHlwZS5zcGxpY2U7Ci0KLSAgZnVuY3Rpb24gX3JlcGxhY2UoYXJyYXks
IGlkeCwgYW10LCBvYmplY3RzKSB7Ci0gICAgdmFyIGFyZ3MgPSBbXS5jb25jYXQob2JqZWN0cyk7
Ci0gICAgdmFyIHJldCA9IFtdOwotICAgIC8vIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hy
b21pdW0vaXNzdWVzL2RldGFpbD9pZD01NjU4OAotICAgIHZhciBzaXplID0gNjAwMDA7Ci0gICAg
dmFyIHN0YXJ0ID0gaWR4OwotICAgIHZhciBlbmRzID0gYW10OwotICAgIHZhciBjb3VudCwgY2h1
bms7Ci0KLSAgICB3aGlsZSAoYXJncy5sZW5ndGgpIHsKLSAgICAgIGNvdW50ID0gZW5kcyA+IHNp
emUgPyBzaXplIDogZW5kczsKLSAgICAgIGlmIChjb3VudCA8PSAwKSB7Ci0gICAgICAgIGNvdW50
ID0gMDsKLSAgICAgIH0KLQotICAgICAgY2h1bmsgPSBhcmdzLnNwbGljZSgwLCBzaXplKTsKLSAg
ICAgIGNodW5rID0gW3N0YXJ0LCBjb3VudF0uY29uY2F0KGNodW5rKTsKLQotICAgICAgc3RhcnQg
Kz0gc2l6ZTsKLSAgICAgIGVuZHMgLT0gY291bnQ7Ci0KLSAgICAgIHJldCA9IHJldC5jb25jYXQo
c3BsaWNlLmFwcGx5KGFycmF5LCBjaHVuaykpOwotICAgIH0KLSAgICByZXR1cm4gcmV0OwotICB9
Ci0KLSAgLyoqCi0gICAgUmVwbGFjZXMgb2JqZWN0cyBpbiBhbiBhcnJheSB3aXRoIHRoZSBwYXNz
ZWQgb2JqZWN0cy4KLSAgCi0gICAgYGBgamF2YXNjcmlwdAotICAgICAgdmFyIGFycmF5ID0gWzEs
MiwzXTsKLSAgICAgIEVtYmVyLkVudW1lcmFibGVVdGlscy5yZXBsYWNlKGFycmF5LCAxLCAyLCBb
NCwgNV0pOyAvLyBbMSwgNCwgNV0KLSAgCi0gICAgICB2YXIgYXJyYXkgPSBbMSwyLDNdOwotICAg
ICAgRW1iZXIuRW51bWVyYWJsZVV0aWxzLnJlcGxhY2UoYXJyYXksIDEsIDEsIFs0LCA1XSk7IC8v
IFsxLCA0LCA1LCAzXQotICAKLSAgICAgIHZhciBhcnJheSA9IFsxLDIsM107Ci0gICAgICBFbWJl
ci5FbnVtZXJhYmxlVXRpbHMucmVwbGFjZShhcnJheSwgMTAsIDEsIFs0LCA1XSk7IC8vIFsxLCAy
LCAzLCA0LCA1XQotICAgIGBgYAotICAKLSAgICBAbWV0aG9kIHJlcGxhY2UKLSAgICBAZGVwcmVj
YXRlZAotICAgIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0aGUgb2JqZWN0cyBzaG91
bGQgYmUgaW5zZXJ0ZWQgaW50by4KLSAgICBAcGFyYW0ge051bWJlcn0gaWR4IFN0YXJ0aW5nIGlu
ZGV4IGluIHRoZSBhcnJheSB0byByZXBsYWNlLiBJZiAqaWR4KiA+PQotICAgIGxlbmd0aCwgdGhl
biBhcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgYXJyYXkuCi0gICAgQHBhcmFtIHtOdW1iZXJ9IGFt
dCBOdW1iZXIgb2YgZWxlbWVudHMgdGhhdCBzaG91bGQgYmUgcmVtb3ZlZCBmcm9tIHRoZSBhcnJh
eSwKLSAgICBzdGFydGluZyBhdCAqaWR4KgotICAgIEBwYXJhbSB7QXJyYXl9IG9iamVjdHMgQW4g
YXJyYXkgb2YgemVybyBvciBtb3JlIG9iamVjdHMgdGhhdCBzaG91bGQgYmUKLSAgICBpbnNlcnRl
ZCBpbnRvIHRoZSBhcnJheSBhdCAqaWR4KgotICAKLSAgICBAcmV0dXJuIHtBcnJheX0gVGhlIG1v
ZGlmaWVkIGFycmF5LgotICAgIEBwdWJsaWMKLSAgKi8KLQotICBmdW5jdGlvbiByZXBsYWNlKGFy
cmF5LCBpZHgsIGFtdCwgb2JqZWN0cykgewotICAgIGlmIChhcnJheS5yZXBsYWNlKSB7Ci0gICAg
ICByZXR1cm4gYXJyYXkucmVwbGFjZShpZHgsIGFtdCwgb2JqZWN0cyk7Ci0gICAgfSBlbHNlIHsK
LSAgICAgIHJldHVybiBfcmVwbGFjZShhcnJheSwgaWR4LCBhbXQsIG9iamVjdHMpOwotICAgIH0K
LSAgfQotfSk7Ci1lbmlmZWQoJ2VtYmVyLW1ldGFsL3J1bl9sb29wJywgWydleHBvcnRzJywgJ2Vt
YmVyLW1ldGFsL2NvcmUnLCAnZW1iZXItbWV0YWwvZGVidWcnLCAnZW1iZXItbWV0YWwvdXRpbHMn
LCAnZW1iZXItbWV0YWwvcHJvcGVydHlfZXZlbnRzJywgJ2JhY2tidXJuZXInXSwgZnVuY3Rpb24g
KGV4cG9ydHMsIF9lbWJlck1ldGFsQ29yZSwgX2VtYmVyTWV0YWxEZWJ1ZywgX2VtYmVyTWV0YWxV
dGlscywgX2VtYmVyTWV0YWxQcm9wZXJ0eV9ldmVudHMsIF9iYWNrYnVybmVyKSB7Ci0gICd1c2Ug
c3RyaWN0JzsKLQotICBleHBvcnRzLmRlZmF1bHQgPSBydW47Ci0KLSAgZnVuY3Rpb24gb25CZWdp
bihjdXJyZW50KSB7Ci0gICAgcnVuLmN1cnJlbnRSdW5Mb29wID0gY3VycmVudDsKLSAgfQotCi0g
IGZ1bmN0aW9uIG9uRW5kKGN1cnJlbnQsIG5leHQpIHsKLSAgICBydW4uY3VycmVudFJ1bkxvb3Ag
PSBuZXh0OwotICB9Ci0KLSAgLy8gRVM2VE9ETzogc2hvdWxkIEJhY2tidXJuZXIgYmVjb21lIGVz
Nj8KLSAgdmFyIGJhY2tidXJuZXIgPSBuZXcgX2JhY2tidXJuZXIuZGVmYXVsdChbJ3N5bmMnLCAn
YWN0aW9ucycsICdkZXN0cm95J10sIHsKLSAgICBHVUlEX0tFWTogX2VtYmVyTWV0YWxVdGlscy5H
VUlEX0tFWSwKLSAgICBzeW5jOiB7Ci0gICAgICBiZWZvcmU6IF9lbWJlck1ldGFsUHJvcGVydHlf
ZXZlbnRzLmJlZ2luUHJvcGVydHlDaGFuZ2VzLAotICAgICAgYWZ0ZXI6IF9lbWJlck1ldGFsUHJv
cGVydHlfZXZlbnRzLmVuZFByb3BlcnR5Q2hhbmdlcwotICAgIH0sCi0gICAgZGVmYXVsdFF1ZXVl
OiAnYWN0aW9ucycsCi0gICAgb25CZWdpbjogb25CZWdpbiwKLSAgICBvbkVuZDogb25FbmQsCi0g
ICAgb25FcnJvclRhcmdldDogX2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQsCi0gICAgb25FcnJvck1l
dGhvZDogJ29uZXJyb3InCi0gIH0pOwotCi0gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLSAgLy8gcnVuIC0gdGhpcyBpcyBpZGVh
bGx5IHRoZSBvbmx5IHB1YmxpYyBBUEkgdGhlIGRldiBzZWVzCi0gIC8vCi0KLSAgLyoqCi0gICAg
UnVucyB0aGUgcGFzc2VkIHRhcmdldCBhbmQgbWV0aG9kIGluc2lkZSBvZiBhIFJ1bkxvb3AsIGVu
c3VyaW5nIGFueQotICAgIGRlZmVycmVkIGFjdGlvbnMgaW5jbHVkaW5nIGJpbmRpbmdzIGFuZCB2
aWV3cyB1cGRhdGVzIGFyZSBmbHVzaGVkIGF0IHRoZQotICAgIGVuZC4KLSAgCi0gICAgTm9ybWFs
bHkgeW91IHNob3VsZCBub3QgbmVlZCB0byBpbnZva2UgdGhpcyBtZXRob2QgeW91cnNlbGYuIEhv
d2V2ZXIgaWYKLSAgICB5b3UgYXJlIGltcGxlbWVudGluZyByYXcgZXZlbnQgaGFuZGxlcnMgd2hl
biBpbnRlcmZhY2luZyB3aXRoIG90aGVyCi0gICAgbGlicmFyaWVzIG9yIHBsdWdpbnMsIHlvdSBz
aG91bGQgcHJvYmFibHkgd3JhcCBhbGwgb2YgeW91ciBjb2RlIGluc2lkZSB0aGlzCi0gICAgY2Fs
bC4KLSAgCi0gICAgYGBgamF2YXNjcmlwdAotICAgIHJ1bihmdW5jdGlvbigpIHsKLSAgICAgIC8v
IGNvZGUgdG8gYmUgZXhlY3V0ZWQgd2l0aGluIGEgUnVuTG9vcAotICAgIH0pOwotICAgIGBgYAot
ICAKLSAgICBAY2xhc3MgcnVuCi0gICAgQG5hbWVzcGFjZSBFbWJlcgotICAgIEBzdGF0aWMKLSAg
ICBAY29uc3RydWN0b3IKLSAgICBAcGFyYW0ge09iamVjdH0gW3RhcmdldF0gdGFyZ2V0IG9mIG1l
dGhvZCB0byBjYWxsCi0gICAgQHBhcmFtIHtGdW5jdGlvbnxTdHJpbmd9IG1ldGhvZCBNZXRob2Qg
dG8gaW52b2tlLgotICAgICAgTWF5IGJlIGEgZnVuY3Rpb24gb3IgYSBzdHJpbmcuIElmIHlvdSBw
YXNzIGEgc3RyaW5nCi0gICAgICB0aGVuIGl0IHdpbGwgYmUgbG9va2VkIHVwIG9uIHRoZSBwYXNz
ZWQgdGFyZ2V0LgotICAgIEBwYXJhbSB7T2JqZWN0fSBbYXJncypdIEFueSBhZGRpdGlvbmFsIGFy
Z3VtZW50cyB5b3Ugd2lzaCB0byBwYXNzIHRvIHRoZSBtZXRob2QuCi0gICAgQHJldHVybiB7T2Jq
ZWN0fSByZXR1cm4gdmFsdWUgZnJvbSBpbnZva2luZyB0aGUgcGFzc2VkIGZ1bmN0aW9uLgotICAg
IEBwdWJsaWMKLSAgKi8KLQotICBmdW5jdGlvbiBydW4oKSB7Ci0gICAgcmV0dXJuIGJhY2tidXJu
ZXIucnVuLmFwcGx5KGJhY2tidXJuZXIsIGFyZ3VtZW50cyk7Ci0gIH0KLQotICAvKioKLSAgICBJ
ZiBubyBydW4tbG9vcCBpcyBwcmVzZW50LCBpdCBjcmVhdGVzIGEgbmV3IG9uZS4gSWYgYSBydW4g
bG9vcCBpcwotICAgIHByZXNlbnQgaXQgd2lsbCBxdWV1ZSBpdHNlbGYgdG8gcnVuIG9uIHRoZSBl
eGlzdGluZyBydW4tbG9vcHMgYWN0aW9uCi0gICAgcXVldWUuCi0gIAotICAgIFBsZWFzZSBub3Rl
OiBUaGlzIGlzIG5vdCBmb3Igbm9ybWFsIHVzYWdlLCBhbmQgc2hvdWxkIGJlIHVzZWQgc3Bhcmlu
Z2x5LgotICAKLSAgICBJZiBpbnZva2VkIHdoZW4gbm90IHdpdGhpbiBhIHJ1biBsb29wOgotICAK
LSAgICBgYGBqYXZhc2NyaXB0Ci0gICAgcnVuLmpvaW4oZnVuY3Rpb24oKSB7Ci0gICAgICAvLyBj
cmVhdGVzIGEgbmV3IHJ1bi1sb29wCi0gICAgfSk7Ci0gICAgYGBgCi0gIAotICAgIEFsdGVybmF0
aXZlbHksIGlmIGNhbGxlZCB3aXRoaW4gYW4gZXhpc3RpbmcgcnVuIGxvb3A6Ci0gIAotICAgIGBg
YGphdmFzY3JpcHQKLSAgICBydW4oZnVuY3Rpb24oKSB7Ci0gICAgICAvLyBjcmVhdGVzIGEgbmV3
IHJ1bi1sb29wCi0gICAgICBydW4uam9pbihmdW5jdGlvbigpIHsKLSAgICAgICAgLy8gam9pbnMg
d2l0aCB0aGUgZXhpc3RpbmcgcnVuLWxvb3AsIGFuZCBxdWV1ZXMgZm9yIGludm9jYXRpb24gb24K
LSAgICAgICAgLy8gdGhlIGV4aXN0aW5nIHJ1bi1sb29wcyBhY3Rpb24gcXVldWUuCi0gICAgICB9
KTsKLSAgICB9KTsKLSAgICBgYGAKLSAgCi0gICAgQG1ldGhvZCBqb2luCi0gICAgQG5hbWVzcGFj
ZSBFbWJlcgotICAgIEBwYXJhbSB7T2JqZWN0fSBbdGFyZ2V0XSB0YXJnZXQgb2YgbWV0aG9kIHRv
IGNhbGwKLSAgICBAcGFyYW0ge0Z1bmN0aW9ufFN0cmluZ30gbWV0aG9kIE1ldGhvZCB0byBpbnZv
a2UuCi0gICAgICBNYXkgYmUgYSBmdW5jdGlvbiBvciBhIHN0cmluZy4gSWYgeW91IHBhc3MgYSBz
dHJpbmcKLSAgICAgIHRoZW4gaXQgd2lsbCBiZSBsb29rZWQgdXAgb24gdGhlIHBhc3NlZCB0YXJn
ZXQuCi0gICAgQHBhcmFtIHtPYmplY3R9IFthcmdzKl0gQW55IGFkZGl0aW9uYWwgYXJndW1lbnRz
IHlvdSB3aXNoIHRvIHBhc3MgdG8gdGhlIG1ldGhvZC4KLSAgICBAcmV0dXJuIHtPYmplY3R9IFJl
dHVybiB2YWx1ZSBmcm9tIGludm9raW5nIHRoZSBwYXNzZWQgZnVuY3Rpb24uIFBsZWFzZSBub3Rl
LAotICAgIHdoZW4gY2FsbGVkIHdpdGhpbiBhbiBleGlzdGluZyBsb29wLCBubyByZXR1cm4gdmFs
dWUgaXMgcG9zc2libGUuCi0gICAgQHB1YmxpYwotICAqLwotICBydW4uam9pbiA9IGZ1bmN0aW9u
ICgpIHsKLSAgICByZXR1cm4gYmFja2J1cm5lci5qb2luLmFwcGx5KGJhY2tidXJuZXIsIGFyZ3Vt
ZW50cyk7Ci0gIH07Ci0KLSAgLyoqCi0gICAgQWxsb3dzIHlvdSB0byBzcGVjaWZ5IHdoaWNoIGNv
bnRleHQgdG8gY2FsbCB0aGUgc3BlY2lmaWVkIGZ1bmN0aW9uIGluIHdoaWxlCi0gICAgYWRkaW5n
IHRoZSBleGVjdXRpb24gb2YgdGhhdCBmdW5jdGlvbiB0byB0aGUgRW1iZXIgcnVuIGxvb3AuIFRo
aXMgYWJpbGl0eQotICAgIG1ha2VzIHRoaXMgbWV0aG9kIGEgZ3JlYXQgd2F5IHRvIGFzeW5jaHJv
bm91c2x5IGludGVncmF0ZSB0aGlyZC1wYXJ0eSBsaWJyYXJpZXMKLSAgICBpbnRvIHlvdXIgRW1i
ZXIgYXBwbGljYXRpb24uCi0gIAotICAgIGBydW4uYmluZGAgdGFrZXMgdHdvIG1haW4gYXJndW1l
bnRzLCB0aGUgZGVzaXJlZCBjb250ZXh0IGFuZCB0aGUgZnVuY3Rpb24gdG8KLSAgICBpbnZva2Ug
aW4gdGhhdCBjb250ZXh0LiBBbnkgYWRkaXRpb25hbCBhcmd1bWVudHMgd2lsbCBiZSBzdXBwbGll
ZCBhcyBhcmd1bWVudHMKLSAgICB0byB0aGUgZnVuY3Rpb24gdGhhdCBpcyBwYXNzZWQgaW4uCi0g
IAotICAgIExldCdzIHVzZSB0aGUgY3JlYXRpb24gb2YgYSBUaW55TUNFIGNvbXBvbmVudCBhcyBh
biBleGFtcGxlLiBDdXJyZW50bHksCi0gICAgVGlueU1DRSBwcm92aWRlcyBhIHNldHVwIGNvbmZp
Z3VyYXRpb24gb3B0aW9uIHdlIGNhbiB1c2UgdG8gZG8gc29tZSBwcm9jZXNzaW5nCi0gICAgYWZ0
ZXIgdGhlIFRpbnlNQ0UgaW5zdGFuY2UgaXMgaW5pdGlhbGl6ZWQgYnV0IGJlZm9yZSBpdCBpcyBh
Y3R1YWxseSByZW5kZXJlZC4KLSAgICBXZSBjYW4gdXNlIHRoYXQgc2V0dXAgb3B0aW9uIHRvIGRv
IHNvbWUgYWRkaXRpb25hbCBzZXR1cCBmb3Igb3VyIGNvbXBvbmVudC4KLSAgICBUaGUgY29tcG9u
ZW50IGl0c2VsZiBjb3VsZCBsb29rIHNvbWV0aGluZyBsaWtlIHRoZSBmb2xsb3dpbmc6Ci0gIAot
ICAgIGBgYGphdmFzY3JpcHQKLSAgICBBcHAuUmljaFRleHRFZGl0b3JDb21wb25lbnQgPSBFbWJl
ci5Db21wb25lbnQuZXh0ZW5kKHsKLSAgICAgIGluaXRpYWxpemVUaW55TUNFOiBFbWJlci5vbign
ZGlkSW5zZXJ0RWxlbWVudCcsIGZ1bmN0aW9uKCkgewotICAgICAgICB0aW55bWNlLmluaXQoewot
ICAgICAgICAgIHNlbGVjdG9yOiAnIycgKyB0aGlzLiQoKS5wcm9wKCdpZCcpLAotICAgICAgICAg
IHNldHVwOiBFbWJlci5ydW4uYmluZCh0aGlzLCB0aGlzLnNldHVwRWRpdG9yKQotICAgICAgICB9
KTsKLSAgICAgIH0pLAotICAKLSAgICAgIHNldHVwRWRpdG9yOiBmdW5jdGlvbihlZGl0b3IpIHsK
LSAgICAgICAgdGhpcy5zZXQoJ2VkaXRvcicsIGVkaXRvcik7Ci0gIAotICAgICAgICBlZGl0b3Iu
b24oJ2NoYW5nZScsIGZ1bmN0aW9uKCkgewotICAgICAgICAgIGNvbnNvbGUubG9nKCdjb250ZW50
IGNoYW5nZWQhJyk7Ci0gICAgICAgIH0pOwotICAgICAgfQotICAgIH0pOwotICAgIGBgYAotICAK
LSAgICBJbiB0aGlzIGV4YW1wbGUsIHdlIHVzZSBFbWJlci5ydW4uYmluZCB0byBiaW5kIHRoZSBz
ZXR1cEVkaXRvciBtZXRob2QgdG8gdGhlCi0gICAgY29udGV4dCBvZiB0aGUgQXBwLlJpY2hUZXh0
RWRpdG9yQ29tcG9uZW50IGFuZCB0byBoYXZlIHRoZSBpbnZvY2F0aW9uIG9mIHRoYXQKLSAgICBt
ZXRob2QgYmUgc2FmZWx5IGhhbmRsZWQgYW5kIGV4ZWN1dGVkIGJ5IHRoZSBFbWJlciBydW4gbG9v
cC4KLSAgCi0gICAgQG1ldGhvZCBiaW5kCi0gICAgQG5hbWVzcGFjZSBFbWJlcgotICAgIEBwYXJh
bSB7T2JqZWN0fSBbdGFyZ2V0XSB0YXJnZXQgb2YgbWV0aG9kIHRvIGNhbGwKLSAgICBAcGFyYW0g
e0Z1bmN0aW9ufFN0cmluZ30gbWV0aG9kIE1ldGhvZCB0byBpbnZva2UuCi0gICAgICBNYXkgYmUg
YSBmdW5jdGlvbiBvciBhIHN0cmluZy4gSWYgeW91IHBhc3MgYSBzdHJpbmcKLSAgICAgIHRoZW4g
aXQgd2lsbCBiZSBsb29rZWQgdXAgb24gdGhlIHBhc3NlZCB0YXJnZXQuCi0gICAgQHBhcmFtIHtP
YmplY3R9IFthcmdzKl0gQW55IGFkZGl0aW9uYWwgYXJndW1lbnRzIHlvdSB3aXNoIHRvIHBhc3Mg
dG8gdGhlIG1ldGhvZC4KLSAgICBAcmV0dXJuIHtGdW5jdGlvbn0gcmV0dXJucyBhIG5ldyBmdW5j
dGlvbiB0aGF0IHdpbGwgYWx3YXlzIGhhdmUgYSBwYXJ0aWN1bGFyIGNvbnRleHQKLSAgICBAc2lu
Y2UgMS40LjAKLSAgICBAcHVibGljCi0gICovCi0gIHJ1bi5iaW5kID0gZnVuY3Rpb24gKCkgewot
ICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBjdXJyaWVkID0gQXJyYXkoX2xl
biksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7Ci0gICAgICBjdXJyaWVkW19rZXld
ID0gYXJndW1lbnRzW19rZXldOwotICAgIH0KLQotICAgIHJldHVybiBmdW5jdGlvbiAoKSB7Ci0g
ICAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShfbGVu
MiksIF9rZXkyID0gMDsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykgewotICAgICAgICBhcmdzW19r
ZXkyXSA9IGFyZ3VtZW50c1tfa2V5Ml07Ci0gICAgICB9Ci0KLSAgICAgIHJldHVybiBydW4uam9p
bi5hcHBseShydW4sIGN1cnJpZWQuY29uY2F0KGFyZ3MpKTsKLSAgICB9OwotICB9OwotCi0gIHJ1
bi5iYWNrYnVybmVyID0gYmFja2J1cm5lcjsKLSAgcnVuLmN1cnJlbnRSdW5Mb29wID0gbnVsbDsK
LSAgcnVuLnF1ZXVlcyA9IGJhY2tidXJuZXIucXVldWVOYW1lczsKLQotICAvKioKLSAgICBCZWdp
bnMgYSBuZXcgUnVuTG9vcC4gQW55IGRlZmVycmVkIGFjdGlvbnMgaW52b2tlZCBhZnRlciB0aGUg
YmVnaW4gd2lsbAotICAgIGJlIGJ1ZmZlcmVkIHVudGlsIHlvdSBpbnZva2UgYSBtYXRjaGluZyBj
YWxsIHRvIGBydW4uZW5kKClgLiBUaGlzIGlzCi0gICAgYSBsb3dlci1sZXZlbCB3YXkgdG8gdXNl
IGEgUnVuTG9vcCBpbnN0ZWFkIG9mIHVzaW5nIGBydW4oKWAuCi0gIAotICAgIGBgYGphdmFzY3Jp
cHQKLSAgICBydW4uYmVnaW4oKTsKLSAgICAvLyBjb2RlIHRvIGJlIGV4ZWN1dGVkIHdpdGhpbiBh
IFJ1bkxvb3AKLSAgICBydW4uZW5kKCk7Ci0gICAgYGBgCi0gIAotICAgIEBtZXRob2QgYmVnaW4K
LSAgICBAcmV0dXJuIHt2b2lkfQotICAgIEBwdWJsaWMKLSAgKi8KLSAgcnVuLmJlZ2luID0gZnVu
Y3Rpb24gKCkgewotICAgIGJhY2tidXJuZXIuYmVnaW4oKTsKLSAgfTsKLQotICAvKioKLSAgICBF
bmRzIGEgUnVuTG9vcC4gVGhpcyBtdXN0IGJlIGNhbGxlZCBzb21ldGltZSBhZnRlciB5b3UgY2Fs
bAotICAgIGBydW4uYmVnaW4oKWAgdG8gZmx1c2ggYW55IGRlZmVycmVkIGFjdGlvbnMuIFRoaXMg
aXMgYSBsb3dlci1sZXZlbCB3YXkKLSAgICB0byB1c2UgYSBSdW5Mb29wIGluc3RlYWQgb2YgdXNp
bmcgYHJ1bigpYC4KLSAgCi0gICAgYGBgamF2YXNjcmlwdAotICAgIHJ1bi5iZWdpbigpOwotICAg
IC8vIGNvZGUgdG8gYmUgZXhlY3V0ZWQgd2l0aGluIGEgUnVuTG9vcAotICAgIHJ1bi5lbmQoKTsK
LSAgICBgYGAKLSAgCi0gICAgQG1ldGhvZCBlbmQKLSAgICBAcmV0dXJuIHt2b2lkfQotICAgIEBw
dWJsaWMKLSAgKi8KLSAgcnVuLmVuZCA9IGZ1bmN0aW9uICgpIHsKLSAgICBiYWNrYnVybmVyLmVu
ZCgpOwotICB9OwotCi0gIC8qKgotICAgIEFycmF5IG9mIG5hbWVkIHF1ZXVlcy4gVGhpcyBhcnJh
eSBkZXRlcm1pbmVzIHRoZSBvcmRlciBpbiB3aGljaCBxdWV1ZXMKLSAgICBhcmUgZmx1c2hlZCBh
dCB0aGUgZW5kIG9mIHRoZSBSdW5Mb29wLiBZb3UgY2FuIGRlZmluZSB5b3VyIG93biBxdWV1ZXMg
YnkKLSAgICBzaW1wbHkgYWRkaW5nIHRoZSBxdWV1ZSBuYW1lIHRvIHRoaXMgYXJyYXkuIE5vcm1h
bGx5IHlvdSBzaG91bGQgbm90IG5lZWQKLSAgICB0byBpbnNwZWN0IG9yIG1vZGlmeSB0aGlzIHBy
b3BlcnR5LgotICAKLSAgICBAcHJvcGVydHkgcXVldWVzCi0gICAgQHR5cGUgQXJyYXkKLSAgICBA
ZGVmYXVsdCBbJ3N5bmMnLCAnYWN0aW9ucycsICdkZXN0cm95J10KLSAgICBAcHJpdmF0ZQotICAq
LwotCi0gIC8qKgotICAgIEFkZHMgdGhlIHBhc3NlZCB0YXJnZXQvbWV0aG9kIGFuZCBhbnkgb3B0
aW9uYWwgYXJndW1lbnRzIHRvIHRoZSBuYW1lZAotICAgIHF1ZXVlIHRvIGJlIGV4ZWN1dGVkIGF0
IHRoZSBlbmQgb2YgdGhlIFJ1bkxvb3AuIElmIHlvdSBoYXZlIG5vdCBhbHJlYWR5Ci0gICAgc3Rh
cnRlZCBhIFJ1bkxvb3Agd2hlbiBjYWxsaW5nIHRoaXMgbWV0aG9kIG9uZSB3aWxsIGJlIHN0YXJ0
ZWQgZm9yIHlvdQotICAgIGF1dG9tYXRpY2FsbHkuCi0gIAotICAgIEF0IHRoZSBlbmQgb2YgYSBS
dW5Mb29wLCBhbnkgbWV0aG9kcyBzY2hlZHVsZWQgaW4gdGhpcyB3YXkgd2lsbCBiZSBpbnZva2Vk
LgotICAgIE1ldGhvZHMgd2lsbCBiZSBpbnZva2VkIGluIGFuIG9yZGVyIG1hdGNoaW5nIHRoZSBu
YW1lZCBxdWV1ZXMgZGVmaW5lZCBpbgotICAgIHRoZSBgcnVuLnF1ZXVlc2AgcHJvcGVydHkuCi0g
IAotICAgIGBgYGphdmFzY3JpcHQKLSAgICBydW4uc2NoZWR1bGUoJ3N5bmMnLCB0aGlzLCBmdW5j
dGlvbigpIHsKLSAgICAgIC8vIHRoaXMgd2lsbCBiZSBleGVjdXRlZCBpbiB0aGUgZmlyc3QgUnVu
TG9vcCBxdWV1ZSwgd2hlbiBiaW5kaW5ncyBhcmUgc3luY2VkCi0gICAgICBjb25zb2xlLmxvZygn
c2NoZWR1bGVkIG9uIHN5bmMgcXVldWUnKTsKLSAgICB9KTsKLSAgCi0gICAgcnVuLnNjaGVkdWxl
KCdhY3Rpb25zJywgdGhpcywgZnVuY3Rpb24oKSB7Ci0gICAgICAvLyB0aGlzIHdpbGwgYmUgZXhl
Y3V0ZWQgaW4gdGhlICdhY3Rpb25zJyBxdWV1ZSwgYWZ0ZXIgYmluZGluZ3MgaGF2ZSBzeW5jZWQu
Ci0gICAgICBjb25zb2xlLmxvZygnc2NoZWR1bGVkIG9uIGFjdGlvbnMgcXVldWUnKTsKLSAgICB9
KTsKLSAgCi0gICAgLy8gTm90ZSB0aGUgZnVuY3Rpb25zIHdpbGwgYmUgcnVuIGluIG9yZGVyIGJh
c2VkIG9uIHRoZSBydW4gcXVldWVzIG9yZGVyLgotICAgIC8vIE91dHB1dCB3b3VsZCBiZToKLSAg
ICAvLyAgIHNjaGVkdWxlZCBvbiBzeW5jIHF1ZXVlCi0gICAgLy8gICBzY2hlZHVsZWQgb24gYWN0
aW9ucyBxdWV1ZQotICAgIGBgYAotICAKLSAgICBAbWV0aG9kIHNjaGVkdWxlCi0gICAgQHBhcmFt
IHtTdHJpbmd9IHF1ZXVlIFRoZSBuYW1lIG9mIHRoZSBxdWV1ZSB0byBzY2hlZHVsZSBhZ2FpbnN0
LgotICAgICAgRGVmYXVsdCBxdWV1ZXMgYXJlICdzeW5jJyBhbmQgJ2FjdGlvbnMnCi0gICAgQHBh
cmFtIHtPYmplY3R9IFt0YXJnZXRdIHRhcmdldCBvYmplY3QgdG8gdXNlIGFzIHRoZSBjb250ZXh0
IHdoZW4gaW52b2tpbmcgYSBtZXRob2QuCi0gICAgQHBhcmFtIHtTdHJpbmd8RnVuY3Rpb259IG1l
dGhvZCBUaGUgbWV0aG9kIHRvIGludm9rZS4gSWYgeW91IHBhc3MgYSBzdHJpbmcgaXQKLSAgICAg
IHdpbGwgYmUgcmVzb2x2ZWQgb24gdGhlIHRhcmdldCBvYmplY3QgYXQgdGhlIHRpbWUgdGhlIHNj
aGVkdWxlZCBpdGVtIGlzCi0gICAgICBpbnZva2VkIGFsbG93aW5nIHlvdSB0byBjaGFuZ2UgdGhl
IHRhcmdldCBmdW5jdGlvbi4KLSAgICBAcGFyYW0ge09iamVjdH0gW2FyZ3VtZW50cypdIE9wdGlv
bmFsIGFyZ3VtZW50cyB0byBiZSBwYXNzZWQgdG8gdGhlIHF1ZXVlZCBtZXRob2QuCi0gICAgQHJl
dHVybiB7dm9pZH0KLSAgICBAcHVibGljCi0gICovCi0gIHJ1bi5zY2hlZHVsZSA9IGZ1bmN0aW9u
ICgpIC8qIHF1ZXVlLCB0YXJnZXQsIG1ldGhvZCAqL3sKLSAgICBjaGVja0F1dG9SdW4oKTsKLSAg
ICBiYWNrYnVybmVyLnNjaGVkdWxlLmFwcGx5KGJhY2tidXJuZXIsIGFyZ3VtZW50cyk7Ci0gIH07
Ci0KLSAgLy8gVXNlZCBieSBnbG9iYWwgdGVzdCB0ZWFyZG93bgotICBydW4uaGFzU2NoZWR1bGVk
VGltZXJzID0gZnVuY3Rpb24gKCkgewotICAgIHJldHVybiBiYWNrYnVybmVyLmhhc1RpbWVycygp
OwotICB9OwotCi0gIC8vIFVzZWQgYnkgZ2xvYmFsIHRlc3QgdGVhcmRvd24KLSAgcnVuLmNhbmNl
bFRpbWVycyA9IGZ1bmN0aW9uICgpIHsKLSAgICBiYWNrYnVybmVyLmNhbmNlbFRpbWVycygpOwot
ICB9OwotCi0gIC8qKgotICAgIEltbWVkaWF0ZWx5IGZsdXNoZXMgYW55IGV2ZW50cyBzY2hlZHVs
ZWQgaW4gdGhlICdzeW5jJyBxdWV1ZS4gQmluZGluZ3MKLSAgICB1c2UgdGhpcyBxdWV1ZSBzbyB0
aGlzIG1ldGhvZCBpcyBhIHVzZWZ1bCB3YXkgdG8gaW1tZWRpYXRlbHkgZm9yY2UgYWxsCi0gICAg
YmluZGluZ3MgaW4gdGhlIGFwcGxpY2F0aW9uIHRvIHN5bmMuCi0gIAotICAgIFlvdSBzaG91bGQg
Y2FsbCB0aGlzIG1ldGhvZCBhbnl0aW1lIHlvdSBuZWVkIGFueSBjaGFuZ2VkIHN0YXRlIHRvIHBy
b3BhZ2F0ZQotICAgIHRocm91Z2hvdXQgdGhlIGFwcCBpbW1lZGlhdGVseSB3aXRob3V0IHJlcGFp
bnRpbmcgdGhlIFVJICh3aGljaCBoYXBwZW5zCi0gICAgaW4gdGhlIGxhdGVyICdyZW5kZXInIHF1
ZXVlIGFkZGVkIGJ5IHRoZSBgZW1iZXItdmlld3NgIHBhY2thZ2UpLgotICAKLSAgICBgYGBqYXZh
c2NyaXB0Ci0gICAgcnVuLnN5bmMoKTsKLSAgICBgYGAKLSAgCi0gICAgQG1ldGhvZCBzeW5jCi0g
ICAgQHJldHVybiB7dm9pZH0KLSAgICBAcHJpdmF0ZQotICAqLwotICBydW4uc3luYyA9IGZ1bmN0
aW9uICgpIHsKLSAgICBpZiAoYmFja2J1cm5lci5jdXJyZW50SW5zdGFuY2UpIHsKLSAgICAgIGJh
Y2tidXJuZXIuY3VycmVudEluc3RhbmNlLnF1ZXVlcy5zeW5jLmZsdXNoKCk7Ci0gICAgfQotICB9
OwotCi0gIC8qKgotICAgIEludm9rZXMgdGhlIHBhc3NlZCB0YXJnZXQvbWV0aG9kIGFuZCBvcHRp
b25hbCBhcmd1bWVudHMgYWZ0ZXIgYSBzcGVjaWZpZWQKLSAgICBwZXJpb2Qgb2YgdGltZS4gVGhl
IGxhc3QgcGFyYW1ldGVyIG9mIHRoaXMgbWV0aG9kIG11c3QgYWx3YXlzIGJlIGEgbnVtYmVyCi0g
ICAgb2YgbWlsbGlzZWNvbmRzLgotICAKLSAgICBZb3Ugc2hvdWxkIHVzZSB0aGlzIG1ldGhvZCB3
aGVuZXZlciB5b3UgbmVlZCB0byBydW4gc29tZSBhY3Rpb24gYWZ0ZXIgYQotICAgIHBlcmlvZCBv
ZiB0aW1lIGluc3RlYWQgb2YgdXNpbmcgYHNldFRpbWVvdXQoKWAuIFRoaXMgbWV0aG9kIHdpbGwg
ZW5zdXJlIHRoYXQKLSAgICBpdGVtcyB0aGF0IGV4cGlyZSBkdXJpbmcgdGhlIHNhbWUgc2NyaXB0
IGV4ZWN1dGlvbiBjeWNsZSBhbGwgZXhlY3V0ZQotICAgIHRvZ2V0aGVyLCB3aGljaCBpcyBvZnRl
biBtb3JlIGVmZmljaWVudCB0aGFuIHVzaW5nIGEgcmVhbCBzZXRUaW1lb3V0LgotICAKLSAgICBg
YGBqYXZhc2NyaXB0Ci0gICAgcnVuLmxhdGVyKG15Q29udGV4dCwgZnVuY3Rpb24oKSB7Ci0gICAg
ICAvLyBjb2RlIGhlcmUgd2lsbCBleGVjdXRlIHdpdGhpbiBhIFJ1bkxvb3AgaW4gYWJvdXQgNTAw
bXMgd2l0aCB0aGlzID09IG15Q29udGV4dAotICAgIH0sIDUwMCk7Ci0gICAgYGBgCi0gIAotICAg
IEBtZXRob2QgbGF0ZXIKLSAgICBAcGFyYW0ge09iamVjdH0gW3RhcmdldF0gdGFyZ2V0IG9mIG1l
dGhvZCB0byBpbnZva2UKLSAgICBAcGFyYW0ge0Z1bmN0aW9ufFN0cmluZ30gbWV0aG9kIFRoZSBt
ZXRob2QgdG8gaW52b2tlLgotICAgICAgSWYgeW91IHBhc3MgYSBzdHJpbmcgaXQgd2lsbCBiZSBy
ZXNvbHZlZCBvbiB0aGUKLSAgICAgIHRhcmdldCBhdCB0aGUgdGltZSB0aGUgbWV0aG9kIGlzIGlu
dm9rZWQuCi0gICAgQHBhcmFtIHtPYmplY3R9IFthcmdzKl0gT3B0aW9uYWwgYXJndW1lbnRzIHRv
IHBhc3MgdG8gdGhlIHRpbWVvdXQuCi0gICAgQHBhcmFtIHtOdW1iZXJ9IHdhaXQgTnVtYmVyIG9m
IG1pbGxpc2Vjb25kcyB0byB3YWl0LgotICAgIEByZXR1cm4geyp9IFRpbWVyIGluZm9ybWF0aW9u
IGZvciB1c2UgaW4gY2FuY2VsbGluZywgc2VlIGBydW4uY2FuY2VsYC4KLSAgICBAcHVibGljCi0g
ICovCi0gIHJ1bi5sYXRlciA9IGZ1bmN0aW9uICgpIC8qdGFyZ2V0LCBtZXRob2QqL3sKLSAgICBy
ZXR1cm4gYmFja2J1cm5lci5sYXRlci5hcHBseShiYWNrYnVybmVyLCBhcmd1bWVudHMpOwotICB9
OwotCi0gIC8qKgotICAgIFNjaGVkdWxlIGEgZnVuY3Rpb24gdG8gcnVuIG9uZSB0aW1lIGR1cmlu
ZyB0aGUgY3VycmVudCBSdW5Mb29wLiBUaGlzIGlzIGVxdWl2YWxlbnQKLSAgICB0byBjYWxsaW5n
IGBzY2hlZHVsZU9uY2VgIHdpdGggdGhlICJhY3Rpb25zIiBxdWV1ZS4KLSAgCi0gICAgQG1ldGhv
ZCBvbmNlCi0gICAgQHBhcmFtIHtPYmplY3R9IFt0YXJnZXRdIFRoZSB0YXJnZXQgb2YgdGhlIG1l
dGhvZCB0byBpbnZva2UuCi0gICAgQHBhcmFtIHtGdW5jdGlvbnxTdHJpbmd9IG1ldGhvZCBUaGUg
bWV0aG9kIHRvIGludm9rZS4KLSAgICAgIElmIHlvdSBwYXNzIGEgc3RyaW5nIGl0IHdpbGwgYmUg
cmVzb2x2ZWQgb24gdGhlCi0gICAgICB0YXJnZXQgYXQgdGhlIHRpbWUgdGhlIG1ldGhvZCBpcyBp
bnZva2VkLgotICAgIEBwYXJhbSB7T2JqZWN0fSBbYXJncypdIE9wdGlvbmFsIGFyZ3VtZW50cyB0
byBwYXNzIHRvIHRoZSB0aW1lb3V0LgotICAgIEByZXR1cm4ge09iamVjdH0gVGltZXIgaW5mb3Jt
YXRpb24gZm9yIHVzZSBpbiBjYW5jZWxsaW5nLCBzZWUgYHJ1bi5jYW5jZWxgLgotICAgIEBwdWJs
aWMKLSAgKi8KLSAgcnVuLm9uY2UgPSBmdW5jdGlvbiAoKSB7Ci0gICAgY2hlY2tBdXRvUnVuKCk7
Ci0KLSAgICBmb3IgKHZhciBfbGVuMyA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShf
bGVuMyksIF9rZXkzID0gMDsgX2tleTMgPCBfbGVuMzsgX2tleTMrKykgewotICAgICAgYXJnc1tf
a2V5M10gPSBhcmd1bWVudHNbX2tleTNdOwotICAgIH0KLQotICAgIGFyZ3MudW5zaGlmdCgnYWN0
aW9ucycpOwotICAgIHJldHVybiBiYWNrYnVybmVyLnNjaGVkdWxlT25jZS5hcHBseShiYWNrYnVy
bmVyLCBhcmdzKTsKLSAgfTsKLQotICAvKioKLSAgICBTY2hlZHVsZXMgYSBmdW5jdGlvbiB0byBy
dW4gb25lIHRpbWUgaW4gYSBnaXZlbiBxdWV1ZSBvZiB0aGUgY3VycmVudCBSdW5Mb29wLgotICAg
IENhbGxpbmcgdGhpcyBtZXRob2Qgd2l0aCB0aGUgc2FtZSBxdWV1ZS90YXJnZXQvbWV0aG9kIGNv
bWJpbmF0aW9uIHdpbGwgaGF2ZQotICAgIG5vIGVmZmVjdCAocGFzdCB0aGUgaW5pdGlhbCBjYWxs
KS4KLSAgCi0gICAgTm90ZSB0aGF0IGFsdGhvdWdoIHlvdSBjYW4gcGFzcyBvcHRpb25hbCBhcmd1
bWVudHMgdGhlc2Ugd2lsbCBub3QgYmUKLSAgICBjb25zaWRlcmVkIHdoZW4gbG9va2luZyBmb3Ig
ZHVwbGljYXRlcy4gTmV3IGFyZ3VtZW50cyB3aWxsIHJlcGxhY2UgcHJldmlvdXMKLSAgICBjYWxs
cy4KLSAgCi0gICAgYGBgamF2YXNjcmlwdAotICAgIGZ1bmN0aW9uIHNheUhpKCkgewotICAgICAg
Y29uc29sZS5sb2coJ2hpJyk7Ci0gICAgfQotICAKLSAgICBydW4oZnVuY3Rpb24oKSB7Ci0gICAg
ICBydW4uc2NoZWR1bGVPbmNlKCdhZnRlclJlbmRlcicsIG15Q29udGV4dCwgc2F5SGkpOwotICAg
ICAgcnVuLnNjaGVkdWxlT25jZSgnYWZ0ZXJSZW5kZXInLCBteUNvbnRleHQsIHNheUhpKTsKLSAg
ICAgIC8vIHNheUhpIHdpbGwgb25seSBiZSBleGVjdXRlZCBvbmNlLCBpbiB0aGUgYWZ0ZXJSZW5k
ZXIgcXVldWUgb2YgdGhlIFJ1bkxvb3AKLSAgICB9KTsKLSAgICBgYGAKLSAgCi0gICAgQWxzbyBu
b3RlIHRoYXQgcGFzc2luZyBhbiBhbm9ueW1vdXMgZnVuY3Rpb24gdG8gYHJ1bi5zY2hlZHVsZU9u
Y2VgIHdpbGwKLSAgICBub3QgcHJldmVudCBhZGRpdGlvbmFsIGNhbGxzIHdpdGggYW4gaWRlbnRp
Y2FsIGFub255bW91cyBmdW5jdGlvbiBmcm9tCi0gICAgc2NoZWR1bGluZyB0aGUgaXRlbXMgbXVs
dGlwbGUgdGltZXMsIGUuZy46Ci0gIAotICAgIGBgYGphdmFzY3JpcHQKLSAgICBmdW5jdGlvbiBz
Y2hlZHVsZUl0KCkgewotICAgICAgcnVuLnNjaGVkdWxlT25jZSgnYWN0aW9ucycsIG15Q29udGV4
dCwgZnVuY3Rpb24oKSB7Ci0gICAgICAgIGNvbnNvbGUubG9nKCdDbG9zdXJlJyk7Ci0gICAgICB9
KTsKLSAgICB9Ci0gIAotICAgIHNjaGVkdWxlSXQoKTsKLSAgICBzY2hlZHVsZUl0KCk7Ci0gIAot
ICAgIC8vICJDbG9zdXJlIiB3aWxsIHByaW50IHR3aWNlLCBldmVuIHRob3VnaCB3ZSdyZSB1c2lu
ZyBgcnVuLnNjaGVkdWxlT25jZWAsCi0gICAgLy8gYmVjYXVzZSB0aGUgZnVuY3Rpb24gd2UgcGFz
cyB0byBpdCBpcyBhbm9ueW1vdXMgYW5kIHdvbid0IG1hdGNoIHRoZQotICAgIC8vIHByZXZpb3Vz
bHkgc2NoZWR1bGVkIG9wZXJhdGlvbi4KLSAgICBgYGAKLSAgCi0gICAgQXZhaWxhYmxlIHF1ZXVl
cywgYW5kIHRoZWlyIG9yZGVyLCBjYW4gYmUgZm91bmQgYXQgYHJ1bi5xdWV1ZXNgCi0gIAotICAg
IEBtZXRob2Qgc2NoZWR1bGVPbmNlCi0gICAgQHBhcmFtIHtTdHJpbmd9IFtxdWV1ZV0gVGhlIG5h
bWUgb2YgdGhlIHF1ZXVlIHRvIHNjaGVkdWxlIGFnYWluc3QuIERlZmF1bHQgcXVldWVzIGFyZSAn
c3luYycgYW5kICdhY3Rpb25zJy4KLSAgICBAcGFyYW0ge09iamVjdH0gW3RhcmdldF0gVGhlIHRh
cmdldCBvZiB0aGUgbWV0aG9kIHRvIGludm9rZS4KLSAgICBAcGFyYW0ge0Z1bmN0aW9ufFN0cmlu
Z30gbWV0aG9kIFRoZSBtZXRob2QgdG8gaW52b2tlLgotICAgICAgSWYgeW91IHBhc3MgYSBzdHJp
bmcgaXQgd2lsbCBiZSByZXNvbHZlZCBvbiB0aGUKLSAgICAgIHRhcmdldCBhdCB0aGUgdGltZSB0
aGUgbWV0aG9kIGlzIGludm9rZWQuCi0gICAgQHBhcmFtIHtPYmplY3R9IFthcmdzKl0gT3B0aW9u
YWwgYXJndW1lbnRzIHRvIHBhc3MgdG8gdGhlIHRpbWVvdXQuCi0gICAgQHJldHVybiB7T2JqZWN0
fSBUaW1lciBpbmZvcm1hdGlvbiBmb3IgdXNlIGluIGNhbmNlbGxpbmcsIHNlZSBgcnVuLmNhbmNl
bGAuCi0gICAgQHB1YmxpYwotICAqLwotICBydW4uc2NoZWR1bGVPbmNlID0gZnVuY3Rpb24gKCkg
LypxdWV1ZSwgdGFyZ2V0LCBtZXRob2QqL3sKLSAgICBjaGVja0F1dG9SdW4oKTsKLSAgICByZXR1
cm4gYmFja2J1cm5lci5zY2hlZHVsZU9uY2UuYXBwbHkoYmFja2J1cm5lciwgYXJndW1lbnRzKTsK
LSAgfTsKLQotICAvKioKLSAgICBTY2hlZHVsZXMgYW4gaXRlbSB0byBydW4gZnJvbSB3aXRoaW4g
YSBzZXBhcmF0ZSBydW4gbG9vcCwgYWZ0ZXIKLSAgICBjb250cm9sIGhhcyBiZWVuIHJldHVybmVk
IHRvIHRoZSBzeXN0ZW0uIFRoaXMgaXMgZXF1aXZhbGVudCB0byBjYWxsaW5nCi0gICAgYHJ1bi5s
YXRlcmAgd2l0aCBhIHdhaXQgdGltZSBvZiAxbXMuCi0gIAotICAgIGBgYGphdmFzY3JpcHQKLSAg
ICBydW4ubmV4dChteUNvbnRleHQsIGZ1bmN0aW9uKCkgewotICAgICAgLy8gY29kZSB0byBiZSBl
eGVjdXRlZCBpbiB0aGUgbmV4dCBydW4gbG9vcCwKLSAgICAgIC8vIHdoaWNoIHdpbGwgYmUgc2No
ZWR1bGVkIGFmdGVyIHRoZSBjdXJyZW50IG9uZQotICAgIH0pOwotICAgIGBgYAotICAKLSAgICBN
dWx0aXBsZSBvcGVyYXRpb25zIHNjaGVkdWxlZCB3aXRoIGBydW4ubmV4dGAgd2lsbCBjb2FsZXNj
ZQotICAgIGludG8gdGhlIHNhbWUgbGF0ZXIgcnVuIGxvb3AsIGFsb25nIHdpdGggYW55IG90aGVy
IG9wZXJhdGlvbnMKLSAgICBzY2hlZHVsZWQgYnkgYHJ1bi5sYXRlcmAgdGhhdCBleHBpcmUgcmln
aHQgYXJvdW5kIHRoZSBzYW1lCi0gICAgdGltZSB0aGF0IGBydW4ubmV4dGAgb3BlcmF0aW9ucyB3
aWxsIGZpcmUuCi0gIAotICAgIE5vdGUgdGhhdCB0aGVyZSBhcmUgb2Z0ZW4gYWx0ZXJuYXRpdmVz
IHRvIHVzaW5nIGBydW4ubmV4dGAuCi0gICAgRm9yIGluc3RhbmNlLCBpZiB5b3UnZCBsaWtlIHRv
IHNjaGVkdWxlIGFuIG9wZXJhdGlvbiB0byBoYXBwZW4KLSAgICBhZnRlciBhbGwgRE9NIGVsZW1l
bnQgb3BlcmF0aW9ucyBoYXZlIGNvbXBsZXRlZCB3aXRoaW4gdGhlIGN1cnJlbnQKLSAgICBydW4g
bG9vcCwgeW91IGNhbiBtYWtlIHVzZSBvZiB0aGUgYGFmdGVyUmVuZGVyYCBydW4gbG9vcCBxdWV1
ZSAoYWRkZWQKLSAgICBieSB0aGUgYGVtYmVyLXZpZXdzYCBwYWNrYWdlLCBhbG9uZyB3aXRoIHRo
ZSBwcmVjZWRpbmcgYHJlbmRlcmAgcXVldWUKLSAgICB3aGVyZSBhbGwgdGhlIERPTSBlbGVtZW50
IG9wZXJhdGlvbnMgaGFwcGVuKS4KLSAgCi0gICAgRXhhbXBsZToKLSAgCi0gICAgYGBgamF2YXNj
cmlwdAotICAgIGV4cG9ydCBkZWZhdWx0IEVtYmVyLkNvbXBvbmVudC5leHRlbmQoewotICAgICAg
ZGlkSW5zZXJ0RWxlbWVudCgpIHsKLSAgICAgICAgdGhpcy5fc3VwZXIoLi4uYXJndW1lbnRzKTsK
LSAgICAgICAgcnVuLnNjaGVkdWxlT25jZSgnYWZ0ZXJSZW5kZXInLCB0aGlzLCAncHJvY2Vzc0No
aWxkRWxlbWVudHMnKTsKLSAgICAgIH0sCi0gIAotICAgICAgcHJvY2Vzc0NoaWxkRWxlbWVudHMo
KSB7Ci0gICAgICAgIC8vIC4uLiBkbyBzb21ldGhpbmcgd2l0aCBjb21wb25lbnQncyBjaGlsZCBj
b21wb25lbnQKLSAgICAgICAgLy8gZWxlbWVudHMgYWZ0ZXIgdGhleSd2ZSBmaW5pc2hlZCByZW5k
ZXJpbmcsIHdoaWNoCi0gICAgICAgIC8vIGNhbid0IGJlIGRvbmUgd2l0aGluIHRoaXMgY29tcG9u
ZW50J3MKLSAgICAgICAgLy8gYGRpZEluc2VydEVsZW1lbnRgIGhvb2sgYmVjYXVzZSB0aGF0IGdl
dHMgcnVuCi0gICAgICAgIC8vIGJlZm9yZSB0aGUgY2hpbGQgZWxlbWVudHMgaGF2ZSBiZWVuIGFk
ZGVkIHRvIHRoZSBET00uCi0gICAgICB9Ci0gICAgfSk7Ci0gICAgYGBgCi0gIAotICAgIE9uZSBi
ZW5lZml0IG9mIHRoZSBhYm92ZSBhcHByb2FjaCBjb21wYXJlZCB0byB1c2luZyBgcnVuLm5leHRg
IGlzCi0gICAgdGhhdCB5b3Ugd2lsbCBiZSBhYmxlIHRvIHBlcmZvcm0gRE9NL0NTUyBvcGVyYXRp
b25zIGJlZm9yZSB1bnByb2Nlc3NlZAotICAgIGVsZW1lbnRzIGFyZSByZW5kZXJlZCB0byB0aGUg
c2NyZWVuLCB3aGljaCBtYXkgcHJldmVudCBmbGlja2VyaW5nIG9yCi0gICAgb3RoZXIgYXJ0aWZh
Y3RzIGNhdXNlZCBieSBkZWxheWluZyBwcm9jZXNzaW5nIHVudGlsIGFmdGVyIHJlbmRlcmluZy4K
LSAgCi0gICAgVGhlIG90aGVyIG1ham9yIGJlbmVmaXQgdG8gdGhlIGFib3ZlIGFwcHJvYWNoIGlz
IHRoYXQgYHJ1bi5uZXh0YAotICAgIGludHJvZHVjZXMgYW4gZWxlbWVudCBvZiBub24tZGV0ZXJt
aW5pc20sIHdoaWNoIGNhbiBtYWtlIHRoaW5ncyBtdWNoCi0gICAgaGFyZGVyIHRvIHRlc3QsIGR1
ZSB0byBpdHMgcmVsaWFuY2Ugb24gYHNldFRpbWVvdXRgOyBpdCdzIG11Y2ggaGFyZGVyCi0gICAg
dG8gZ3VhcmFudGVlIHRoZSBvcmRlciBvZiBzY2hlZHVsZWQgb3BlcmF0aW9ucyB3aGVuIHRoZXkg
YXJlIHNjaGVkdWxlZAotICAgIG91dHNpZGUgb2YgdGhlIGN1cnJlbnQgcnVuIGxvb3AsIGkuZS4g
d2l0aCBgcnVuLm5leHRgLgotICAKLSAgICBAbWV0aG9kIG5leHQKLSAgICBAcGFyYW0ge09iamVj
dH0gW3RhcmdldF0gdGFyZ2V0IG9mIG1ldGhvZCB0byBpbnZva2UKLSAgICBAcGFyYW0ge0Z1bmN0
aW9ufFN0cmluZ30gbWV0aG9kIFRoZSBtZXRob2QgdG8gaW52b2tlLgotICAgICAgSWYgeW91IHBh
c3MgYSBzdHJpbmcgaXQgd2lsbCBiZSByZXNvbHZlZCBvbiB0aGUKLSAgICAgIHRhcmdldCBhdCB0
aGUgdGltZSB0aGUgbWV0aG9kIGlzIGludm9rZWQuCi0gICAgQHBhcmFtIHtPYmplY3R9IFthcmdz
Kl0gT3B0aW9uYWwgYXJndW1lbnRzIHRvIHBhc3MgdG8gdGhlIHRpbWVvdXQuCi0gICAgQHJldHVy
biB7T2JqZWN0fSBUaW1lciBpbmZvcm1hdGlvbiBmb3IgdXNlIGluIGNhbmNlbGxpbmcsIHNlZSBg
cnVuLmNhbmNlbGAuCi0gICAgQHB1YmxpYwotICAqLwotICBydW4ubmV4dCA9IGZ1bmN0aW9uICgp
IHsKLSAgICBmb3IgKHZhciBfbGVuNCA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShf
bGVuNCksIF9rZXk0ID0gMDsgX2tleTQgPCBfbGVuNDsgX2tleTQrKykgewotICAgICAgYXJnc1tf
a2V5NF0gPSBhcmd1bWVudHNbX2tleTRdOwotICAgIH0KLQotICAgIGFyZ3MucHVzaCgxKTsKLSAg
ICByZXR1cm4gYmFja2J1cm5lci5sYXRlci5hcHBseShiYWNrYnVybmVyLCBhcmdzKTsKLSAgfTsK
LQotICAvKioKLSAgICBDYW5jZWxzIGEgc2NoZWR1bGVkIGl0ZW0uIE11c3QgYmUgYSB2YWx1ZSBy
ZXR1cm5lZCBieSBgcnVuLmxhdGVyKClgLAotICAgIGBydW4ub25jZSgpYCwgYHJ1bi5zY2hlZHVs
ZU9uY2UoKWAsIGBydW4ubmV4dCgpYCwgYHJ1bi5kZWJvdW5jZSgpYCwgb3IKLSAgICBgcnVuLnRo
cm90dGxlKClgLgotICAKLSAgICBgYGBqYXZhc2NyaXB0Ci0gICAgdmFyIHJ1bk5leHQgPSBydW4u
bmV4dChteUNvbnRleHQsIGZ1bmN0aW9uKCkgewotICAgICAgLy8gd2lsbCBub3QgYmUgZXhlY3V0
ZWQKLSAgICB9KTsKLSAgCi0gICAgcnVuLmNhbmNlbChydW5OZXh0KTsKLSAgCi0gICAgdmFyIHJ1
bkxhdGVyID0gcnVuLmxhdGVyKG15Q29udGV4dCwgZnVuY3Rpb24oKSB7Ci0gICAgICAvLyB3aWxs
IG5vdCBiZSBleGVjdXRlZAotICAgIH0sIDUwMCk7Ci0gIAotICAgIHJ1bi5jYW5jZWwocnVuTGF0
ZXIpOwotICAKLSAgICB2YXIgcnVuU2NoZWR1bGVPbmNlID0gcnVuLnNjaGVkdWxlT25jZSgnYWZ0
ZXJSZW5kZXInLCBteUNvbnRleHQsIGZ1bmN0aW9uKCkgewotICAgICAgLy8gd2lsbCBub3QgYmUg
ZXhlY3V0ZWQKLSAgICB9KTsKLSAgCi0gICAgcnVuLmNhbmNlbChydW5TY2hlZHVsZU9uY2UpOwot
ICAKLSAgICB2YXIgcnVuT25jZSA9IHJ1bi5vbmNlKG15Q29udGV4dCwgZnVuY3Rpb24oKSB7Ci0g
ICAgICAvLyB3aWxsIG5vdCBiZSBleGVjdXRlZAotICAgIH0pOwotICAKLSAgICBydW4uY2FuY2Vs
KHJ1bk9uY2UpOwotICAKLSAgICB2YXIgdGhyb3R0bGUgPSBydW4udGhyb3R0bGUobXlDb250ZXh0
LCBmdW5jdGlvbigpIHsKLSAgICAgIC8vIHdpbGwgbm90IGJlIGV4ZWN1dGVkCi0gICAgfSwgMSwg
ZmFsc2UpOwotICAKLSAgICBydW4uY2FuY2VsKHRocm90dGxlKTsKLSAgCi0gICAgdmFyIGRlYm91
bmNlID0gcnVuLmRlYm91bmNlKG15Q29udGV4dCwgZnVuY3Rpb24oKSB7Ci0gICAgICAvLyB3aWxs
IG5vdCBiZSBleGVjdXRlZAotICAgIH0sIDEpOwotICAKLSAgICBydW4uY2FuY2VsKGRlYm91bmNl
KTsKLSAgCi0gICAgdmFyIGRlYm91bmNlSW1tZWRpYXRlID0gcnVuLmRlYm91bmNlKG15Q29udGV4
dCwgZnVuY3Rpb24oKSB7Ci0gICAgICAvLyB3aWxsIGJlIGV4ZWN1dGVkIHNpbmNlIHdlIHBhc3Nl
ZCBpbiB0cnVlIChpbW1lZGlhdGUpCi0gICAgfSwgMTAwLCB0cnVlKTsKLSAgCi0gICAgLy8gdGhl
IDEwMG1zIGRlbGF5IHVudGlsIHRoaXMgbWV0aG9kIGNhbiBiZSBjYWxsZWQgYWdhaW4gd2lsbCBi
ZSBjYW5jZWxsZWQKLSAgICBydW4uY2FuY2VsKGRlYm91bmNlSW1tZWRpYXRlKTsKLSAgICBgYGAK
LSAgCi0gICAgQG1ldGhvZCBjYW5jZWwKLSAgICBAcGFyYW0ge09iamVjdH0gdGltZXIgVGltZXIg
b2JqZWN0IHRvIGNhbmNlbAotICAgIEByZXR1cm4ge0Jvb2xlYW59IHRydWUgaWYgY2FuY2VsbGVk
IG9yIGZhbHNlL3VuZGVmaW5lZCBpZiBpdCB3YXNuJ3QgZm91bmQKLSAgICBAcHVibGljCi0gICov
Ci0gIHJ1bi5jYW5jZWwgPSBmdW5jdGlvbiAodGltZXIpIHsKLSAgICByZXR1cm4gYmFja2J1cm5l
ci5jYW5jZWwodGltZXIpOwotICB9OwotCi0gIC8qKgotICAgIERlbGF5IGNhbGxpbmcgdGhlIHRh
cmdldCBtZXRob2QgdW50aWwgdGhlIGRlYm91bmNlIHBlcmlvZCBoYXMgZWxhcHNlZAotICAgIHdp
dGggbm8gYWRkaXRpb25hbCBkZWJvdW5jZSBjYWxscy4gSWYgYGRlYm91bmNlYCBpcyBjYWxsZWQg
YWdhaW4gYmVmb3JlCi0gICAgdGhlIHNwZWNpZmllZCB0aW1lIGhhcyBlbGFwc2VkLCB0aGUgdGlt
ZXIgaXMgcmVzZXQgYW5kIHRoZSBlbnRpcmUgcGVyaW9kCi0gICAgbXVzdCBwYXNzIGFnYWluIGJl
Zm9yZSB0aGUgdGFyZ2V0IG1ldGhvZCBpcyBjYWxsZWQuCi0gIAotICAgIFRoaXMgbWV0aG9kIHNo
b3VsZCBiZSB1c2VkIHdoZW4gYW4gZXZlbnQgbWF5IGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcwot
ICAgIGJ1dCB0aGUgYWN0aW9uIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbmNlIHdoZW4gdGhlIGV2
ZW50IGlzIGRvbmUgZmlyaW5nLgotICAgIEEgY29tbW9uIGV4YW1wbGUgaXMgZm9yIHNjcm9sbCBl
dmVudHMgd2hlcmUgeW91IG9ubHkgd2FudCB1cGRhdGVzIHRvCi0gICAgaGFwcGVuIG9uY2Ugc2Ny
b2xsaW5nIGhhcyBjZWFzZWQuCi0gIAotICAgIGBgYGphdmFzY3JpcHQKLSAgICBmdW5jdGlvbiB3
aG9SYW4oKSB7Ci0gICAgICBjb25zb2xlLmxvZyh0aGlzLm5hbWUgKyAnIHJhbi4nKTsKLSAgICB9
Ci0gIAotICAgIHZhciBteUNvbnRleHQgPSB7IG5hbWU6ICdkZWJvdW5jZScgfTsKLSAgCi0gICAg
cnVuLmRlYm91bmNlKG15Q29udGV4dCwgd2hvUmFuLCAxNTApOwotICAKLSAgICAvLyBsZXNzIHRo
YW4gMTUwbXMgcGFzc2VzCi0gICAgcnVuLmRlYm91bmNlKG15Q29udGV4dCwgd2hvUmFuLCAxNTAp
OwotICAKLSAgICAvLyAxNTBtcyBwYXNzZXMKLSAgICAvLyB3aG9SYW4gaXMgaW52b2tlZCB3aXRo
IGNvbnRleHQgbXlDb250ZXh0Ci0gICAgLy8gY29uc29sZSBsb2dzICdkZWJvdW5jZSByYW4uJyBv
bmUgdGltZS4KLSAgICBgYGAKLSAgCi0gICAgSW1tZWRpYXRlIGFsbG93cyB5b3UgdG8gcnVuIHRo
ZSBmdW5jdGlvbiBpbW1lZGlhdGVseSwgYnV0IGRlYm91bmNlCi0gICAgb3RoZXIgY2FsbHMgZm9y
IHRoaXMgZnVuY3Rpb24gdW50aWwgdGhlIHdhaXQgdGltZSBoYXMgZWxhcHNlZC4gSWYKLSAgICBg
ZGVib3VuY2VgIGlzIGNhbGxlZCBhZ2FpbiBiZWZvcmUgdGhlIHNwZWNpZmllZCB0aW1lIGhhcyBl
bGFwc2VkLAotICAgIHRoZSB0aW1lciBpcyByZXNldCBhbmQgdGhlIGVudGlyZSBwZXJpb2QgbXVz
dCBwYXNzIGFnYWluIGJlZm9yZQotICAgIHRoZSBtZXRob2QgY2FuIGJlIGNhbGxlZCBhZ2Fpbi4K
LSAgCi0gICAgYGBgamF2YXNjcmlwdAotICAgIGZ1bmN0aW9uIHdob1JhbigpIHsKLSAgICAgIGNv
bnNvbGUubG9nKHRoaXMubmFtZSArICcgcmFuLicpOwotICAgIH0KLSAgCi0gICAgdmFyIG15Q29u
dGV4dCA9IHsgbmFtZTogJ2RlYm91bmNlJyB9OwotICAKLSAgICBydW4uZGVib3VuY2UobXlDb250
ZXh0LCB3aG9SYW4sIDE1MCwgdHJ1ZSk7Ci0gIAotICAgIC8vIGNvbnNvbGUgbG9ncyAnZGVib3Vu
Y2UgcmFuLicgb25lIHRpbWUgaW1tZWRpYXRlbHkuCi0gICAgLy8gMTAwbXMgcGFzc2VzCi0gICAg
cnVuLmRlYm91bmNlKG15Q29udGV4dCwgd2hvUmFuLCAxNTAsIHRydWUpOwotICAKLSAgICAvLyAx
NTBtcyBwYXNzZXMgYW5kIG5vdGhpbmcgZWxzZSBpcyBsb2dnZWQgdG8gdGhlIGNvbnNvbGUgYW5k
Ci0gICAgLy8gdGhlIGRlYm91bmNlZSBpcyBubyBsb25nZXIgYmVpbmcgd2F0Y2hlZAotICAgIHJ1
bi5kZWJvdW5jZShteUNvbnRleHQsIHdob1JhbiwgMTUwLCB0cnVlKTsKLSAgCi0gICAgLy8gY29u
c29sZSBsb2dzICdkZWJvdW5jZSByYW4uJyBvbmUgdGltZSBpbW1lZGlhdGVseS4KLSAgICAvLyAx
NTBtcyBwYXNzZXMgYW5kIG5vdGhpbmcgZWxzZSBpcyBsb2dnZWQgdG8gdGhlIGNvbnNvbGUgYW5k
Ci0gICAgLy8gdGhlIGRlYm91bmNlZSBpcyBubyBsb25nZXIgYmVpbmcgd2F0Y2hlZAotICAKLSAg
ICBgYGAKLSAgCi0gICAgQG1ldGhvZCBkZWJvdW5jZQotICAgIEBwYXJhbSB7T2JqZWN0fSBbdGFy
Z2V0XSB0YXJnZXQgb2YgbWV0aG9kIHRvIGludm9rZQotICAgIEBwYXJhbSB7RnVuY3Rpb258U3Ry
aW5nfSBtZXRob2QgVGhlIG1ldGhvZCB0byBpbnZva2UuCi0gICAgICBNYXkgYmUgYSBmdW5jdGlv
biBvciBhIHN0cmluZy4gSWYgeW91IHBhc3MgYSBzdHJpbmcKLSAgICAgIHRoZW4gaXQgd2lsbCBi
ZSBsb29rZWQgdXAgb24gdGhlIHBhc3NlZCB0YXJnZXQuCi0gICAgQHBhcmFtIHtPYmplY3R9IFth
cmdzKl0gT3B0aW9uYWwgYXJndW1lbnRzIHRvIHBhc3MgdG8gdGhlIHRpbWVvdXQuCi0gICAgQHBh
cmFtIHtOdW1iZXJ9IHdhaXQgTnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0LgotICAgIEBw
YXJhbSB7Qm9vbGVhbn0gaW1tZWRpYXRlIFRyaWdnZXIgdGhlIGZ1bmN0aW9uIG9uIHRoZSBsZWFk
aW5nIGluc3RlYWQKLSAgICAgIG9mIHRoZSB0cmFpbGluZyBlZGdlIG9mIHRoZSB3YWl0IGludGVy
dmFsLiBEZWZhdWx0cyB0byBmYWxzZS4KLSAgICBAcmV0dXJuIHtBcnJheX0gVGltZXIgaW5mb3Jt
YXRpb24gZm9yIHVzZSBpbiBjYW5jZWxsaW5nLCBzZWUgYHJ1bi5jYW5jZWxgLgotICAgIEBwdWJs
aWMKLSAgKi8KLSAgcnVuLmRlYm91bmNlID0gZnVuY3Rpb24gKCkgewotICAgIHJldHVybiBiYWNr
YnVybmVyLmRlYm91bmNlLmFwcGx5KGJhY2tidXJuZXIsIGFyZ3VtZW50cyk7Ci0gIH07Ci0KLSAg
LyoqCi0gICAgRW5zdXJlIHRoYXQgdGhlIHRhcmdldCBtZXRob2QgaXMgbmV2ZXIgY2FsbGVkIG1v
cmUgZnJlcXVlbnRseSB0aGFuCi0gICAgdGhlIHNwZWNpZmllZCBzcGFjaW5nIHBlcmlvZC4gVGhl
IHRhcmdldCBtZXRob2QgaXMgY2FsbGVkIGltbWVkaWF0ZWx5LgotICAKLSAgICBgYGBqYXZhc2Ny
aXB0Ci0gICAgZnVuY3Rpb24gd2hvUmFuKCkgewotICAgICAgY29uc29sZS5sb2codGhpcy5uYW1l
ICsgJyByYW4uJyk7Ci0gICAgfQotICAKLSAgICB2YXIgbXlDb250ZXh0ID0geyBuYW1lOiAndGhy
b3R0bGUnIH07Ci0gIAotICAgIHJ1bi50aHJvdHRsZShteUNvbnRleHQsIHdob1JhbiwgMTUwKTsK
LSAgICAvLyB3aG9SYW4gaXMgaW52b2tlZCB3aXRoIGNvbnRleHQgbXlDb250ZXh0Ci0gICAgLy8g
Y29uc29sZSBsb2dzICd0aHJvdHRsZSByYW4uJwotICAKLSAgICAvLyA1MG1zIHBhc3NlcwotICAg
IHJ1bi50aHJvdHRsZShteUNvbnRleHQsIHdob1JhbiwgMTUwKTsKLSAgCi0gICAgLy8gNTBtcyBw
YXNzZXMKLSAgICBydW4udGhyb3R0bGUobXlDb250ZXh0LCB3aG9SYW4sIDE1MCk7Ci0gIAotICAg
IC8vIDE1MG1zIHBhc3NlcwotICAgIHJ1bi50aHJvdHRsZShteUNvbnRleHQsIHdob1JhbiwgMTUw
KTsKLSAgICAvLyB3aG9SYW4gaXMgaW52b2tlZCB3aXRoIGNvbnRleHQgbXlDb250ZXh0Ci0gICAg
Ly8gY29uc29sZSBsb2dzICd0aHJvdHRsZSByYW4uJwotICAgIGBgYAotICAKLSAgICBAbWV0aG9k
IHRocm90dGxlCi0gICAgQHBhcmFtIHtPYmplY3R9IFt0YXJnZXRdIHRhcmdldCBvZiBtZXRob2Qg
dG8gaW52b2tlCi0gICAgQHBhcmFtIHtGdW5jdGlvbnxTdHJpbmd9IG1ldGhvZCBUaGUgbWV0aG9k
IHRvIGludm9rZS4KLSAgICAgIE1heSBiZSBhIGZ1bmN0aW9uIG9yIGEgc3RyaW5nLiBJZiB5b3Ug
cGFzcyBhIHN0cmluZwotICAgICAgdGhlbiBpdCB3aWxsIGJlIGxvb2tlZCB1cCBvbiB0aGUgcGFz
c2VkIHRhcmdldC4KLSAgICBAcGFyYW0ge09iamVjdH0gW2FyZ3MqXSBPcHRpb25hbCBhcmd1bWVu
dHMgdG8gcGFzcyB0byB0aGUgdGltZW91dC4KLSAgICBAcGFyYW0ge051bWJlcn0gc3BhY2luZyBO
dW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHNwYWNlIG91dCByZXF1ZXN0cy4KLSAgICBAcGFyYW0g
e0Jvb2xlYW59IGltbWVkaWF0ZSBUcmlnZ2VyIHRoZSBmdW5jdGlvbiBvbiB0aGUgbGVhZGluZyBp
bnN0ZWFkCi0gICAgICBvZiB0aGUgdHJhaWxpbmcgZWRnZSBvZiB0aGUgd2FpdCBpbnRlcnZhbC4g
RGVmYXVsdHMgdG8gdHJ1ZS4KLSAgICBAcmV0dXJuIHtBcnJheX0gVGltZXIgaW5mb3JtYXRpb24g
Zm9yIHVzZSBpbiBjYW5jZWxsaW5nLCBzZWUgYHJ1bi5jYW5jZWxgLgotICAgIEBwdWJsaWMKLSAg
Ki8KLSAgcnVuLnRocm90dGxlID0gZnVuY3Rpb24gKCkgewotICAgIHJldHVybiBiYWNrYnVybmVy
LnRocm90dGxlLmFwcGx5KGJhY2tidXJuZXIsIGFyZ3VtZW50cyk7Ci0gIH07Ci0KLSAgLy8gTWFr
ZSBzdXJlIGl0J3Mgbm90IGFuIGF1dG9ydW4gZHVyaW5nIHRlc3RpbmcKLSAgZnVuY3Rpb24gY2hl
Y2tBdXRvUnVuKCkgewotICAgIGlmICghcnVuLmN1cnJlbnRSdW5Mb29wKSB7Ci0gICAgICBfZW1i
ZXJNZXRhbERlYnVnLmFzc2VydCgnWW91IGhhdmUgdHVybmVkIG9uIHRlc3RpbmcgbW9kZSwgd2hp
Y2ggZGlzYWJsZWQgdGhlIHJ1bi1sb29wXCdzIGF1dG9ydW4uICcgKyAnWW91IHdpbGwgbmVlZCB0
byB3cmFwIGFueSBjb2RlIHdpdGggYXN5bmNocm9ub3VzIHNpZGUtZWZmZWN0cyBpbiBhIHJ1bics
ICFfZW1iZXJNZXRhbENvcmUuZGVmYXVsdC50ZXN0aW5nKTsKLSAgICB9Ci0gIH0KLQotICAvKioK
LSAgICBBZGQgYSBuZXcgbmFtZWQgcXVldWUgYWZ0ZXIgdGhlIHNwZWNpZmllZCBxdWV1ZS4KLSAg
Ci0gICAgVGhlIHF1ZXVlIHRvIGFkZCB3aWxsIG9ubHkgYmUgYWRkZWQgb25jZS4KLSAgCi0gICAg
QG1ldGhvZCBfYWRkUXVldWUKLSAgICBAcGFyYW0ge1N0cmluZ30gbmFtZSB0aGUgbmFtZSBvZiB0
aGUgcXVldWUgdG8gYWRkLgotICAgIEBwYXJhbSB7U3RyaW5nfSBhZnRlciB0aGUgbmFtZSBvZiB0
aGUgcXVldWUgdG8gYWRkIGFmdGVyLgotICAgIEBwcml2YXRlCi0gICovCi0gIHJ1bi5fYWRkUXVl
dWUgPSBmdW5jdGlvbiAobmFtZSwgYWZ0ZXIpIHsKLSAgICBpZiAocnVuLnF1ZXVlcy5pbmRleE9m
KG5hbWUpID09PSAtMSkgewotICAgICAgcnVuLnF1ZXVlcy5zcGxpY2UocnVuLnF1ZXVlcy5pbmRl
eE9mKGFmdGVyKSArIDEsIDAsIG5hbWUpOwotICAgIH0KLSAgfTsKLX0pOwotZW5pZmVkKCdlbWJl
ci1tZXRhbC9zZXRfcHJvcGVydGllcycsIFsnZXhwb3J0cycsICdlbWJlci1tZXRhbC9wcm9wZXJ0
eV9ldmVudHMnLCAnZW1iZXItbWV0YWwvcHJvcGVydHlfc2V0J10sIGZ1bmN0aW9uIChleHBvcnRz
LCBfZW1iZXJNZXRhbFByb3BlcnR5X2V2ZW50cywgX2VtYmVyTWV0YWxQcm9wZXJ0eV9zZXQpIHsK
LSAgJ3VzZSBzdHJpY3QnOwotCi0gIGV4cG9ydHMuZGVmYXVsdCA9IHNldFByb3BlcnRpZXM7Ci0K
LSAgLyoqCi0gICAgU2V0IGEgbGlzdCBvZiBwcm9wZXJ0aWVzIG9uIGFuIG9iamVjdC4gVGhlc2Ug
cHJvcGVydGllcyBhcmUgc2V0IGluc2lkZQotICAgIGEgc2luZ2xlIGBiZWdpblByb3BlcnR5Q2hh
bmdlc2AgYW5kIGBlbmRQcm9wZXJ0eUNoYW5nZXNgIGJhdGNoLCBzbwotICAgIG9ic2VydmVycyB3
aWxsIGJlIGJ1ZmZlcmVkLgotICAKLSAgICBgYGBqYXZhc2NyaXB0Ci0gICAgdmFyIGFuT2JqZWN0
ID0gRW1iZXIuT2JqZWN0LmNyZWF0ZSgpOwotICAKLSAgICBhbk9iamVjdC5zZXRQcm9wZXJ0aWVz
KHsKLSAgICAgIGZpcnN0TmFtZTogJ1N0YW5sZXknLAotICAgICAgbGFzdE5hbWU6ICdTdHVhcnQn
LAotICAgICAgYWdlOiAyMQotICAgIH0pOwotICAgIGBgYAotICAKLSAgICBAbWV0aG9kIHNldFBy
b3BlcnRpZXMKLSAgICBAcGFyYW0gb2JqCi0gICAgQHBhcmFtIHtPYmplY3R9IHByb3BlcnRpZXMK
LSAgICBAcmV0dXJuIHByb3BlcnRpZXMKLSAgICBAcHVibGljCi0gICovCi0KLSAgZnVuY3Rpb24g
c2V0UHJvcGVydGllcyhvYmosIHByb3BlcnRpZXMpIHsKLSAgICBpZiAoIXByb3BlcnRpZXMgfHwg
dHlwZW9mIHByb3BlcnRpZXMgIT09ICdvYmplY3QnKSB7Ci0gICAgICByZXR1cm4gcHJvcGVydGll
czsKLSAgICB9Ci0gICAgX2VtYmVyTWV0YWxQcm9wZXJ0eV9ldmVudHMuY2hhbmdlUHJvcGVydGll
cyhmdW5jdGlvbiAoKSB7Ci0gICAgICB2YXIgcHJvcHMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0aWVz
KTsKLSAgICAgIHZhciBwcm9wZXJ0eU5hbWU7Ci0KLSAgICAgIGZvciAodmFyIGkgPSAwLCBsID0g
cHJvcHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7Ci0gICAgICAgIHByb3BlcnR5TmFtZSA9IHByb3Bz
W2ldOwotCi0gICAgICAgIF9lbWJlck1ldGFsUHJvcGVydHlfc2V0LnNldChvYmosIHByb3BlcnR5
TmFtZSwgcHJvcGVydGllc1twcm9wZXJ0eU5hbWVdKTsKLSAgICAgIH0KLSAgICB9KTsKLSAgICBy
ZXR1cm4gcHJvcGVydGllczsKLSAgfQotfSk7Ci1lbmlmZWQoJ2VtYmVyLW1ldGFsL3N0cmVhbXMv
ZGVwZW5kZW5jeScsIFsnZXhwb3J0cycsICdlbWJlci1tZXRhbC9kZWJ1ZycsICdlbWJlci1tZXRh
bC9hc3NpZ24nLCAnZW1iZXItbWV0YWwvc3RyZWFtcy91dGlscyddLCBmdW5jdGlvbiAoZXhwb3J0
cywgX2VtYmVyTWV0YWxEZWJ1ZywgX2VtYmVyTWV0YWxBc3NpZ24sIF9lbWJlck1ldGFsU3RyZWFt
c1V0aWxzKSB7Ci0gICd1c2Ugc3RyaWN0JzsKLQotICAvKioKLSAgICBAbW9kdWxlIGVtYmVyLW1l
dGFsCi0gICovCi0KLSAgLyoqCi0gICAgQHByaXZhdGUKLSAgICBAY2xhc3MgRGVwZW5kZW5jeQot
ICAgIEBuYW1lc3BhY2UgRW1iZXIuc3RyZWFtcwotICAgIEBjb25zdHJ1Y3RvcgotICAqLwotICBm
dW5jdGlvbiBEZXBlbmRlbmN5KGRlcGVuZGVyLCBkZXBlbmRlZSkgewotICAgIF9lbWJlck1ldGFs
RGVidWcuYXNzZXJ0KCdEZXBlbmRlbmN5IGVycm9yOiBEZXBlbmRlciBtdXN0IGJlIGEgc3RyZWFt
JywgX2VtYmVyTWV0YWxTdHJlYW1zVXRpbHMuaXNTdHJlYW0oZGVwZW5kZXIpKTsKLQotICAgIHRo
aXMubmV4dCA9IG51bGw7Ci0gICAgdGhpcy5wcmV2ID0gbnVsbDsKLSAgICB0aGlzLmRlcGVuZGVy
ID0gZGVwZW5kZXI7Ci0gICAgdGhpcy5kZXBlbmRlZSA9IGRlcGVuZGVlOwotICAgIHRoaXMudW5z
dWJzY3JpcHRpb24gPSBudWxsOwotICB9Ci0KLSAgX2VtYmVyTWV0YWxBc3NpZ24uZGVmYXVsdChE
ZXBlbmRlbmN5LnByb3RvdHlwZSwgewotICAgIHN1YnNjcmliZTogZnVuY3Rpb24gKCkgewotICAg
ICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ0RlcGVuZGVuY3kgZXJyb3I6IERlcGVuZGVuY3kg
dHJpZWQgdG8gc3Vic2NyaWJlIHdoaWxlIGFscmVhZHkgc3Vic2NyaWJlZCcsICF0aGlzLnVuc3Vi
c2NyaXB0aW9uKTsKLQotICAgICAgdGhpcy51bnN1YnNjcmlwdGlvbiA9IF9lbWJlck1ldGFsU3Ry
ZWFtc1V0aWxzLnN1YnNjcmliZSh0aGlzLmRlcGVuZGVlLCB0aGlzLmRlcGVuZGVyLm5vdGlmeSwg
dGhpcy5kZXBlbmRlcik7Ci0gICAgfSwKLQotICAgIHVuc3Vic2NyaWJlOiBmdW5jdGlvbiAoKSB7
Ci0gICAgICBpZiAodGhpcy51bnN1YnNjcmlwdGlvbikgewotICAgICAgICB0aGlzLnVuc3Vic2Ny
aXB0aW9uKCk7Ci0gICAgICAgIHRoaXMudW5zdWJzY3JpcHRpb24gPSBudWxsOwotICAgICAgfQot
ICAgIH0sCi0KLSAgICByZXBsYWNlOiBmdW5jdGlvbiAoZGVwZW5kZWUpIHsKLSAgICAgIGlmICh0
aGlzLmRlcGVuZGVlICE9PSBkZXBlbmRlZSkgewotICAgICAgICB0aGlzLmRlcGVuZGVlID0gZGVw
ZW5kZWU7Ci0KLSAgICAgICAgaWYgKHRoaXMudW5zdWJzY3JpcHRpb24pIHsKLSAgICAgICAgICB0
aGlzLnVuc3Vic2NyaWJlKCk7Ci0gICAgICAgICAgdGhpcy5zdWJzY3JpYmUoKTsKLSAgICAgICAg
fQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9LAotCi0gICAgZ2V0VmFsdWU6IGZ1bmN0aW9uICgpIHsKLSAgICAgIHJldHVybiBfZW1iZXJN
ZXRhbFN0cmVhbXNVdGlscy5yZWFkKHRoaXMuZGVwZW5kZWUpOwotICAgIH0sCi0KLSAgICBzZXRW
YWx1ZTogZnVuY3Rpb24gKHZhbHVlKSB7Ci0gICAgICByZXR1cm4gX2VtYmVyTWV0YWxTdHJlYW1z
VXRpbHMuc2V0VmFsdWUodGhpcy5kZXBlbmRlZSwgdmFsdWUpOwotICAgIH0KLQotICAgIC8vIGRl
c3Ryb3koKSB7Ci0gICAgLy8gICB2YXIgbmV4dCA9IHRoaXMubmV4dDsKLSAgICAvLyAgIHZhciBw
cmV2ID0gdGhpcy5wcmV2OwotCi0gICAgLy8gICBpZiAocHJldikgewotICAgIC8vICAgICBwcmV2
Lm5leHQgPSBuZXh0OwotICAgIC8vICAgfSBlbHNlIHsKLSAgICAvLyAgICAgdGhpcy5kZXBlbmRl
ci5kZXBlbmRlbmN5SGVhZCA9IG5leHQ7Ci0gICAgLy8gICB9Ci0KLSAgICAvLyAgIGlmIChuZXh0
KSB7Ci0gICAgLy8gICAgIG5leHQucHJldiA9IHByZXY7Ci0gICAgLy8gICB9IGVsc2UgewotICAg
IC8vICAgICB0aGlzLmRlcGVuZGVyLmRlcGVuZGVuY3lUYWlsID0gcHJldjsKLSAgICAvLyAgIH0K
LQotICAgIC8vICAgdGhpcy51bnN1YnNjcmliZSgpOwotICAgIC8vIH0KLSAgfSk7Ci0KLSAgZXhw
b3J0cy5kZWZhdWx0ID0gRGVwZW5kZW5jeTsKLX0pOwotZW5pZmVkKCdlbWJlci1tZXRhbC9zdHJl
YW1zL2tleS1zdHJlYW0nLCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwvZGVidWcnLCAnZW1iZXIt
bWV0YWwvcHJvcGVydHlfZ2V0JywgJ2VtYmVyLW1ldGFsL3Byb3BlcnR5X3NldCcsICdlbWJlci1t
ZXRhbC9vYnNlcnZlcicsICdlbWJlci1tZXRhbC9zdHJlYW1zL3N0cmVhbScsICdlbWJlci1tZXRh
bC9zdHJlYW1zL3V0aWxzJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbERlYnVnLCBf
ZW1iZXJNZXRhbFByb3BlcnR5X2dldCwgX2VtYmVyTWV0YWxQcm9wZXJ0eV9zZXQsIF9lbWJlck1l
dGFsT2JzZXJ2ZXIsIF9lbWJlck1ldGFsU3RyZWFtc1N0cmVhbSwgX2VtYmVyTWV0YWxTdHJlYW1z
VXRpbHMpIHsKLSAgJ3VzZSBzdHJpY3QnOwotCi0gIGZ1bmN0aW9uIGxhYmVsRm9yKHNvdXJjZSwg
a2V5KSB7Ci0gICAgcmV0dXJuIHNvdXJjZS5sYWJlbCA/IHNvdXJjZS5sYWJlbCArICcuJyArIGtl
eSA6IGtleTsKLSAgfQotCi0gIGV4cG9ydHMuZGVmYXVsdCA9IF9lbWJlck1ldGFsU3RyZWFtc1N0
cmVhbS5kZWZhdWx0LmV4dGVuZCh7Ci0gICAgaW5pdDogZnVuY3Rpb24gKHNvdXJjZSwga2V5KSB7
Ci0gICAgICBfZW1iZXJNZXRhbERlYnVnLmFzc2VydCgnS2V5U3RyZWFtIGVycm9yOiBzb3VyY2Ug
bXVzdCBiZSBhIHN0cmVhbScsIF9lbWJlck1ldGFsU3RyZWFtc1V0aWxzLmlzU3RyZWFtKHNvdXJj
ZSkpOyAvLyBUT0RPOiBUaGlzIGlzbid0IG5lY2Vzc2FyeS4KLSAgICAgIF9lbWJlck1ldGFsRGVi
dWcuYXNzZXJ0KCdLZXlTdHJlYW0gZXJyb3I6IGtleSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmlu
ZycsIHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnICYmIGtleS5sZW5ndGggPiAwKTsKLSAgICAgIF9l
bWJlck1ldGFsRGVidWcuYXNzZXJ0KCdLZXlTdHJlYW0gZXJyb3I6IGtleSBtdXN0IG5vdCBoYXZl
IGEgXCcuXCcnLCBrZXkuaW5kZXhPZignLicpID09PSAtMSk7Ci0KLSAgICAgIHZhciBsYWJlbCA9
IGxhYmVsRm9yKHNvdXJjZSwga2V5KTsKLQotICAgICAgdGhpcy5wYXRoID0gbGFiZWw7Ci0gICAg
ICB0aGlzLm9ic2VydmVkT2JqZWN0ID0gbnVsbDsKLSAgICAgIHRoaXMua2V5ID0ga2V5OwotICAg
ICAgdGhpcy5zb3VyY2VEZXAgPSB0aGlzLmFkZE11dGFibGVEZXBlbmRlbmN5KHNvdXJjZSk7Ci0g
ICAgICB0aGlzLmxhYmVsID0gbGFiZWw7Ci0gICAgfSwKLQotICAgIGNvbXB1dGU6IGZ1bmN0aW9u
ICgpIHsKLSAgICAgIHZhciBvYmplY3QgPSB0aGlzLnNvdXJjZURlcC5nZXRWYWx1ZSgpOwotICAg
ICAgdmFyIHR5cGUgPSB0eXBlb2Ygb2JqZWN0OwotCi0gICAgICBpZiAoIW9iamVjdCB8fCB0eXBl
ID09PSAnYm9vbGVhbicpIHsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotCi0gICAgICBpZiAo
dHlwZSA9PT0gJ29iamVjdCcpIHsKLSAgICAgICAgcmV0dXJuIF9lbWJlck1ldGFsUHJvcGVydHlf
Z2V0LmdldChvYmplY3QsIHRoaXMua2V5KTsKLSAgICAgIH0KLQotICAgICAgcmV0dXJuIG9iamVj
dFt0aGlzLmtleV07Ci0gICAgfSwKLQotICAgIHNldFZhbHVlOiBmdW5jdGlvbiAodmFsdWUpIHsK
LSAgICAgIHZhciBvYmplY3QgPSB0aGlzLnNvdXJjZURlcC5nZXRWYWx1ZSgpOwotICAgICAgaWYg
KG9iamVjdCkgewotICAgICAgICBfZW1iZXJNZXRhbFByb3BlcnR5X3NldC5zZXQob2JqZWN0LCB0
aGlzLmtleSwgdmFsdWUpOwotICAgICAgfQotICAgIH0sCi0KLSAgICBzZXRTb3VyY2U6IGZ1bmN0
aW9uIChzb3VyY2UpIHsKLSAgICAgIHRoaXMuc291cmNlRGVwLnJlcGxhY2Uoc291cmNlKTsKLSAg
ICAgIHRoaXMubm90aWZ5KCk7Ci0gICAgfSwKLQotICAgIF9zdXBlciRyZXZhbGlkYXRlOiBfZW1i
ZXJNZXRhbFN0cmVhbXNTdHJlYW0uZGVmYXVsdC5wcm90b3R5cGUucmV2YWxpZGF0ZSwKLQotICAg
IHJldmFsaWRhdGU6IGZ1bmN0aW9uICh2YWx1ZSkgewotICAgICAgdGhpcy5fc3VwZXIkcmV2YWxp
ZGF0ZSh2YWx1ZSk7Ci0KLSAgICAgIHZhciBvYmplY3QgPSB0aGlzLnNvdXJjZURlcC5nZXRWYWx1
ZSgpOwotICAgICAgaWYgKG9iamVjdCAhPT0gdGhpcy5vYnNlcnZlZE9iamVjdCkgewotICAgICAg
ICB0aGlzLl9jbGVhck9ic2VydmVkT2JqZWN0KCk7Ci0KLSAgICAgICAgaWYgKG9iamVjdCAmJiB0
eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JykgewotICAgICAgICAgIF9lbWJlck1ldGFsT2JzZXJ2
ZXIuYWRkT2JzZXJ2ZXIob2JqZWN0LCB0aGlzLmtleSwgdGhpcywgdGhpcy5ub3RpZnkpOwotICAg
ICAgICAgIHRoaXMub2JzZXJ2ZWRPYmplY3QgPSBvYmplY3Q7Ci0gICAgICAgIH0KLSAgICAgIH0K
LSAgICB9LAotCi0gICAgX3N1cGVyJGRlYWN0aXZhdGU6IF9lbWJlck1ldGFsU3RyZWFtc1N0cmVh
bS5kZWZhdWx0LnByb3RvdHlwZS5kZWFjdGl2YXRlLAotCi0gICAgX2NsZWFyT2JzZXJ2ZWRPYmpl
Y3Q6IGZ1bmN0aW9uICgpIHsKLSAgICAgIGlmICh0aGlzLm9ic2VydmVkT2JqZWN0KSB7Ci0gICAg
ICAgIF9lbWJlck1ldGFsT2JzZXJ2ZXIucmVtb3ZlT2JzZXJ2ZXIodGhpcy5vYnNlcnZlZE9iamVj
dCwgdGhpcy5rZXksIHRoaXMsIHRoaXMubm90aWZ5KTsKLSAgICAgICAgdGhpcy5vYnNlcnZlZE9i
amVjdCA9IG51bGw7Ci0gICAgICB9Ci0gICAgfSwKLQotICAgIGRlYWN0aXZhdGU6IGZ1bmN0aW9u
ICgpIHsKLSAgICAgIHRoaXMuX3N1cGVyJGRlYWN0aXZhdGUoKTsKLSAgICAgIHRoaXMuX2NsZWFy
T2JzZXJ2ZWRPYmplY3QoKTsKLSAgICB9Ci0gIH0pOwotfSk7Ci1lbmlmZWQoJ2VtYmVyLW1ldGFs
L3N0cmVhbXMvcHJveHktc3RyZWFtJywgWydleHBvcnRzJywgJ2VtYmVyLXJ1bnRpbWUvc3lzdGVt
L29iamVjdCcsICdlbWJlci1tZXRhbC9zdHJlYW1zL3N0cmVhbSddLCBmdW5jdGlvbiAoZXhwb3J0
cywgX2VtYmVyUnVudGltZVN5c3RlbU9iamVjdCwgX2VtYmVyTWV0YWxTdHJlYW1zU3RyZWFtKSB7
Ci0gICd1c2Ugc3RyaWN0JzsKLQotICB2YXIgUHJveHlTdHJlYW0gPSBfZW1iZXJNZXRhbFN0cmVh
bXNTdHJlYW0uZGVmYXVsdC5leHRlbmQoewotICAgIGluaXQ6IGZ1bmN0aW9uIChzb3VyY2UsIGxh
YmVsKSB7Ci0gICAgICB0aGlzLmxhYmVsID0gbGFiZWw7Ci0gICAgICB0aGlzLnNvdXJjZURlcCA9
IHRoaXMuYWRkTXV0YWJsZURlcGVuZGVuY3koc291cmNlKTsKLSAgICB9LAotCi0gICAgY29tcHV0
ZTogZnVuY3Rpb24gKCkgewotICAgICAgcmV0dXJuIHRoaXMuc291cmNlRGVwLmdldFZhbHVlKCk7
Ci0gICAgfSwKLQotICAgIHNldFZhbHVlOiBmdW5jdGlvbiAodmFsdWUpIHsKLSAgICAgIHRoaXMu
c291cmNlRGVwLnNldFZhbHVlKHZhbHVlKTsKLSAgICB9LAotCi0gICAgc2V0U291cmNlOiBmdW5j
dGlvbiAoc291cmNlKSB7Ci0gICAgICB2YXIgZGlkQ2hhbmdlID0gdGhpcy5zb3VyY2VEZXAucmVw
bGFjZShzb3VyY2UpOwotICAgICAgaWYgKGRpZENoYW5nZSB8fCAhKHNvdXJjZSBpbnN0YW5jZW9m
IF9lbWJlclJ1bnRpbWVTeXN0ZW1PYmplY3QuZGVmYXVsdCkpIHsKLSAgICAgICAgLy8gSWYgdGhl
IHNvdXJjZSBjaGFuZ2VkLCB3ZSBtdXN0IG5vdGlmeS4gSWYgdGhlIHNvdXJjZSBpcyBub3QKLSAg
ICAgICAgLy8gYW4gRW1iZXIuT2JqZWN0LCB3ZSBtdXN0IGFsc28gbm90aWZ5LCBiZWNhdXNlIGl0
IGNvdWxkIGhhdmUKLSAgICAgICAgLy8gaW50ZXJpb3IgbXV0YWJpbGl0eSB0aGF0IGlzIG90aGVy
d2lzZSBub3QgYmVpbmcgb2JzZXJ2ZWQuCi0gICAgICAgIHRoaXMubm90aWZ5KCk7Ci0gICAgICB9
Ci0gICAgfQotICB9KTsKLQotICBQcm94eVN0cmVhbS5leHRlbmQgPSBfZW1iZXJNZXRhbFN0cmVh
bXNTdHJlYW0uZGVmYXVsdC5leHRlbmQ7Ci0KLSAgZXhwb3J0cy5kZWZhdWx0ID0gUHJveHlTdHJl
YW07Ci19KTsKLWVuaWZlZCgnZW1iZXItbWV0YWwvc3RyZWFtcy9zdHJlYW0nLCBbJ2V4cG9ydHMn
LCAnZW1iZXItbWV0YWwvYXNzaWduJywgJ2VtYmVyLW1ldGFsL2RlYnVnJywgJ2VtYmVyLW1ldGFs
L3BhdGhfY2FjaGUnLCAnZW1iZXItbWV0YWwvb2JzZXJ2ZXInLCAnZW1iZXItbWV0YWwvc3RyZWFt
cy91dGlscycsICdlbWJlci1tZXRhbC9lbXB0eV9vYmplY3QnLCAnZW1iZXItbWV0YWwvc3RyZWFt
cy9zdWJzY3JpYmVyJywgJ2VtYmVyLW1ldGFsL3N0cmVhbXMvZGVwZW5kZW5jeScsICdlbWJlci1t
ZXRhbC91dGlscycsICdyZXF1aXJlJywgJ2VtYmVyLW1ldGFsL3N5bWJvbCddLCBmdW5jdGlvbiAo
ZXhwb3J0cywgX2VtYmVyTWV0YWxBc3NpZ24sIF9lbWJlck1ldGFsRGVidWcsIF9lbWJlck1ldGFs
UGF0aF9jYWNoZSwgX2VtYmVyTWV0YWxPYnNlcnZlciwgX2VtYmVyTWV0YWxTdHJlYW1zVXRpbHMs
IF9lbWJlck1ldGFsRW1wdHlfb2JqZWN0LCBfZW1iZXJNZXRhbFN0cmVhbXNTdWJzY3JpYmVyLCBf
ZW1iZXJNZXRhbFN0cmVhbXNEZXBlbmRlbmN5LCBfZW1iZXJNZXRhbFV0aWxzLCBfcmVxdWlyZSwg
X2VtYmVyTWV0YWxTeW1ib2wpIHsKLSAgJ3VzZSBzdHJpY3QnOwotCi0gIGV4cG9ydHMud3JhcCA9
IHdyYXA7Ci0gIHZhciBJU19TVFJFQU0gPSBfZW1iZXJNZXRhbFN5bWJvbC5kZWZhdWx0KCdJU19T
VFJFQU0nKTsKLQotICBleHBvcnRzLklTX1NUUkVBTSA9IElTX1NUUkVBTTsKLSAgLyoqCi0gICAg
QG1vZHVsZSBlbWJlci1tZXRhbAotICAqLwotCi0gIC8qKgotICAgIEBwcml2YXRlCi0gICAgQGNs
YXNzIFN0cmVhbQotICAgIEBuYW1lc3BhY2UgRW1iZXIuc3RyZWFtCi0gICAgQGNvbnN0cnVjdG9y
Ci0gICovCi0gIGZ1bmN0aW9uIEJhc2ljU3RyZWFtKGxhYmVsKSB7Ci0gICAgdGhpcy5faW5pdChs
YWJlbCk7Ci0gIH0KLQotICB2YXIgS2V5U3RyZWFtOwotICB2YXIgUHJveHlNaXhpbjsKLQotICBC
YXNpY1N0cmVhbS5wcm90b3R5cGUgPSB7Ci0gICAgX2luaXQ6IGZ1bmN0aW9uIChsYWJlbCkgewot
ICAgICAgdGhpc1tJU19TVFJFQU1dID0gdHJ1ZTsKLSAgICAgIHRoaXMubGFiZWwgPSBtYWtlTGFi
ZWwobGFiZWwpOwotICAgICAgdGhpcy5pc0FjdGl2ZSA9IGZhbHNlOwotICAgICAgdGhpcy5pc0Rp
cnR5ID0gdHJ1ZTsKLSAgICAgIHRoaXMuaXNEZXN0cm95ZWQgPSBmYWxzZTsKLSAgICAgIHRoaXMu
Y2FjaGUgPSB1bmRlZmluZWQ7Ci0gICAgICB0aGlzLmNoaWxkcmVuID0gdW5kZWZpbmVkOwotICAg
ICAgdGhpcy5zdWJzY3JpYmVySGVhZCA9IG51bGw7Ci0gICAgICB0aGlzLnN1YnNjcmliZXJUYWls
ID0gbnVsbDsKLSAgICAgIHRoaXMuZGVwZW5kZW5jeUhlYWQgPSBudWxsOwotICAgICAgdGhpcy5k
ZXBlbmRlbmN5VGFpbCA9IG51bGw7Ci0gICAgICB0aGlzLm9ic2VydmVkUHJveHkgPSBudWxsOwot
ICAgICAgdGhpcy5fX2VtYmVyX21ldGFfXyA9IG51bGw7Ci0gICAgICB0aGlzW19lbWJlck1ldGFs
VXRpbHMuR1VJRF9LRVldID0gbnVsbDsKLSAgICB9LAotCi0gICAgX21ha2VDaGlsZFN0cmVhbTog
ZnVuY3Rpb24gKGtleSkgewotICAgICAgS2V5U3RyZWFtID0gS2V5U3RyZWFtIHx8IF9yZXF1aXJl
LmRlZmF1bHQoJ2VtYmVyLW1ldGFsL3N0cmVhbXMva2V5LXN0cmVhbScpLmRlZmF1bHQ7Ci0gICAg
ICByZXR1cm4gbmV3IEtleVN0cmVhbSh0aGlzLCBrZXkpOwotICAgIH0sCi0KLSAgICByZW1vdmVD
aGlsZDogZnVuY3Rpb24gKGtleSkgewotICAgICAgZGVsZXRlIHRoaXMuY2hpbGRyZW5ba2V5XTsK
LSAgICB9LAotCi0gICAgZ2V0S2V5OiBmdW5jdGlvbiAoa2V5KSB7Ci0gICAgICBpZiAodGhpcy5j
aGlsZHJlbiA9PT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgIHRoaXMuY2hpbGRyZW4gPSBuZXcgX2Vt
YmVyTWV0YWxFbXB0eV9vYmplY3QuZGVmYXVsdCgpOwotICAgICAgfQotCi0gICAgICB2YXIga2V5
U3RyZWFtID0gdGhpcy5jaGlsZHJlbltrZXldOwotCi0gICAgICBpZiAoa2V5U3RyZWFtID09PSB1
bmRlZmluZWQpIHsKLSAgICAgICAga2V5U3RyZWFtID0gdGhpcy5fbWFrZUNoaWxkU3RyZWFtKGtl
eSk7Ci0gICAgICAgIHRoaXMuY2hpbGRyZW5ba2V5XSA9IGtleVN0cmVhbTsKLSAgICAgIH0KLQot
ICAgICAgcmV0dXJuIGtleVN0cmVhbTsKLSAgICB9LAotCi0gICAgZ2V0OiBmdW5jdGlvbiAocGF0
aCkgewotICAgICAgdmFyIGZpcnN0S2V5ID0gX2VtYmVyTWV0YWxQYXRoX2NhY2hlLmdldEZpcnN0
S2V5KHBhdGgpOwotICAgICAgdmFyIHRhaWxQYXRoID0gX2VtYmVyTWV0YWxQYXRoX2NhY2hlLmdl
dFRhaWxQYXRoKHBhdGgpOwotCi0gICAgICBpZiAodGhpcy5jaGlsZHJlbiA9PT0gdW5kZWZpbmVk
KSB7Ci0gICAgICAgIHRoaXMuY2hpbGRyZW4gPSBuZXcgX2VtYmVyTWV0YWxFbXB0eV9vYmplY3Qu
ZGVmYXVsdCgpOwotICAgICAgfQotCi0gICAgICB2YXIga2V5U3RyZWFtID0gdGhpcy5jaGlsZHJl
bltmaXJzdEtleV07Ci0KLSAgICAgIGlmIChrZXlTdHJlYW0gPT09IHVuZGVmaW5lZCkgewotICAg
ICAgICBrZXlTdHJlYW0gPSB0aGlzLl9tYWtlQ2hpbGRTdHJlYW0oZmlyc3RLZXksIHBhdGgpOwot
ICAgICAgICB0aGlzLmNoaWxkcmVuW2ZpcnN0S2V5XSA9IGtleVN0cmVhbTsKLSAgICAgIH0KLQot
ICAgICAgaWYgKHRhaWxQYXRoID09PSB1bmRlZmluZWQpIHsKLSAgICAgICAgcmV0dXJuIGtleVN0
cmVhbTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVybiBrZXlTdHJlYW0uZ2V0KHRhaWxQ
YXRoKTsKLSAgICAgIH0KLSAgICB9LAotCi0gICAgdmFsdWU6IGZ1bmN0aW9uICgpIHsKLSAgICAg
IC8vIFRPRE86IEVuc3VyZSB2YWx1ZSBpcyBuZXZlciBjYWxsZWQgb24gYSBkZXN0cm95ZWQgc3Ry
ZWFtCi0gICAgICAvLyBzbyB0aGF0IHdlIGNhbiB1bmNvbW1lbnQgdGhpcyBhc3NlcnRpb24uCi0g
ICAgICAvLwotICAgICAgLy8gYXNzZXJ0KCJTdHJlYW0gZXJyb3I6IHZhbHVlIHdhcyBjYWxsZWQg
YWZ0ZXIgdGhlIHN0cmVhbSB3YXMgZGVzdHJveWVkIiwgIXRoaXMuaXNEZXN0cm95ZWQpOwotCi0g
ICAgICAvLyBUT0RPOiBSZW1vdmUgdGhpcyBibG9jay4gVGhpcyB3aWxsIHJlcXVpcmUgZW5zdXJp
bmcgd2UgYXJlCi0gICAgICAvLyBub3QgdHJlYXRpbmcgc3RyZWFtcyBhcyAidm9sYXRpbGUiIGFu
eXdoZXJlLgotICAgICAgaWYgKCF0aGlzLmlzQWN0aXZlKSB7Ci0gICAgICAgIHRoaXMuaXNEaXJ0
eSA9IHRydWU7Ci0gICAgICB9Ci0KLSAgICAgIHZhciB3aWxsUmV2YWxpZGF0ZSA9IGZhbHNlOwot
Ci0gICAgICBpZiAoIXRoaXMuaXNBY3RpdmUgJiYgdGhpcy5zdWJzY3JpYmVySGVhZCkgewotICAg
ICAgICB0aGlzLmFjdGl2YXRlKCk7Ci0gICAgICAgIHdpbGxSZXZhbGlkYXRlID0gdHJ1ZTsKLSAg
ICAgIH0KLQotICAgICAgaWYgKHRoaXMuaXNEaXJ0eSkgewotICAgICAgICBpZiAodGhpcy5pc0Fj
dGl2ZSkgewotICAgICAgICAgIHdpbGxSZXZhbGlkYXRlID0gdHJ1ZTsKLSAgICAgICAgfQotCi0g
ICAgICAgIHRoaXMuY2FjaGUgPSB0aGlzLmNvbXB1dGUoKTsKLSAgICAgICAgdGhpcy5pc0RpcnR5
ID0gZmFsc2U7Ci0gICAgICB9Ci0KLSAgICAgIGlmICh3aWxsUmV2YWxpZGF0ZSkgewotICAgICAg
ICB0aGlzLnJldmFsaWRhdGUodGhpcy5jYWNoZSk7Ci0gICAgICB9Ci0KLSAgICAgIHJldHVybiB0
aGlzLmNhY2hlOwotICAgIH0sCi0KLSAgICBhZGRNdXRhYmxlRGVwZW5kZW5jeTogZnVuY3Rpb24g
KG9iamVjdCkgewotICAgICAgdmFyIGRlcGVuZGVuY3kgPSBuZXcgX2VtYmVyTWV0YWxTdHJlYW1z
RGVwZW5kZW5jeS5kZWZhdWx0KHRoaXMsIG9iamVjdCk7Ci0KLSAgICAgIGlmICh0aGlzLmlzQWN0
aXZlKSB7Ci0gICAgICAgIGRlcGVuZGVuY3kuc3Vic2NyaWJlKCk7Ci0gICAgICB9Ci0KLSAgICAg
IGlmICh0aGlzLmRlcGVuZGVuY3lIZWFkID09PSBudWxsKSB7Ci0gICAgICAgIHRoaXMuZGVwZW5k
ZW5jeUhlYWQgPSB0aGlzLmRlcGVuZGVuY3lUYWlsID0gZGVwZW5kZW5jeTsKLSAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgIHZhciB0YWlsID0gdGhpcy5kZXBlbmRlbmN5VGFpbDsKLSAgICAgICAgdGFp
bC5uZXh0ID0gZGVwZW5kZW5jeTsKLSAgICAgICAgZGVwZW5kZW5jeS5wcmV2ID0gdGFpbDsKLSAg
ICAgICAgdGhpcy5kZXBlbmRlbmN5VGFpbCA9IGRlcGVuZGVuY3k7Ci0gICAgICB9Ci0KLSAgICAg
IHJldHVybiBkZXBlbmRlbmN5OwotICAgIH0sCi0KLSAgICBhZGREZXBlbmRlbmN5OiBmdW5jdGlv
biAob2JqZWN0KSB7Ci0gICAgICBpZiAoX2VtYmVyTWV0YWxTdHJlYW1zVXRpbHMuaXNTdHJlYW0o
b2JqZWN0KSkgewotICAgICAgICB0aGlzLmFkZE11dGFibGVEZXBlbmRlbmN5KG9iamVjdCk7Ci0g
ICAgICB9Ci0gICAgfSwKLQotICAgIHN1YnNjcmliZURlcGVuZGVuY2llczogZnVuY3Rpb24gKCkg
ewotICAgICAgdmFyIGRlcGVuZGVuY3kgPSB0aGlzLmRlcGVuZGVuY3lIZWFkOwotICAgICAgd2hp
bGUgKGRlcGVuZGVuY3kpIHsKLSAgICAgICAgdmFyIG5leHQgPSBkZXBlbmRlbmN5Lm5leHQ7Ci0g
ICAgICAgIGRlcGVuZGVuY3kuc3Vic2NyaWJlKCk7Ci0gICAgICAgIGRlcGVuZGVuY3kgPSBuZXh0
OwotICAgICAgfQotICAgIH0sCi0KLSAgICB1bnN1YnNjcmliZURlcGVuZGVuY2llczogZnVuY3Rp
b24gKCkgewotICAgICAgdmFyIGRlcGVuZGVuY3kgPSB0aGlzLmRlcGVuZGVuY3lIZWFkOwotICAg
ICAgd2hpbGUgKGRlcGVuZGVuY3kpIHsKLSAgICAgICAgdmFyIG5leHQgPSBkZXBlbmRlbmN5Lm5l
eHQ7Ci0gICAgICAgIGRlcGVuZGVuY3kudW5zdWJzY3JpYmUoKTsKLSAgICAgICAgZGVwZW5kZW5j
eSA9IG5leHQ7Ci0gICAgICB9Ci0gICAgfSwKLQotICAgIG1heWJlRGVhY3RpdmF0ZTogZnVuY3Rp
b24gKCkgewotICAgICAgaWYgKCF0aGlzLnN1YnNjcmliZXJIZWFkICYmIHRoaXMuaXNBY3RpdmUp
IHsKLSAgICAgICAgdGhpcy5pc0FjdGl2ZSA9IGZhbHNlOwotICAgICAgICB0aGlzLnVuc3Vic2Ny
aWJlRGVwZW5kZW5jaWVzKCk7Ci0gICAgICAgIHRoaXMuZGVhY3RpdmF0ZSgpOwotICAgICAgfQot
ICAgIH0sCi0KLSAgICBhY3RpdmF0ZTogZnVuY3Rpb24gKCkgewotICAgICAgdGhpcy5pc0FjdGl2
ZSA9IHRydWU7Ci0gICAgICB0aGlzLnN1YnNjcmliZURlcGVuZGVuY2llcygpOwotICAgIH0sCi0K
LSAgICByZXZhbGlkYXRlOiBmdW5jdGlvbiAodmFsdWUpIHsKLSAgICAgIGlmICh2YWx1ZSAhPT0g
dGhpcy5vYnNlcnZlZFByb3h5KSB7Ci0gICAgICAgIHRoaXMuX2NsZWFyT2JzZXJ2ZWRQcm94eSgp
OwotCi0gICAgICAgIFByb3h5TWl4aW4gPSBQcm94eU1peGluIHx8IF9yZXF1aXJlLmRlZmF1bHQo
J2VtYmVyLXJ1bnRpbWUvbWl4aW5zLy1wcm94eScpLmRlZmF1bHQ7Ci0KLSAgICAgICAgaWYgKFBy
b3h5TWl4aW4uZGV0ZWN0KHZhbHVlKSkgewotICAgICAgICAgIF9lbWJlck1ldGFsT2JzZXJ2ZXIu
YWRkT2JzZXJ2ZXIodmFsdWUsICdjb250ZW50JywgdGhpcywgdGhpcy5ub3RpZnkpOwotICAgICAg
ICAgIHRoaXMub2JzZXJ2ZWRQcm94eSA9IHZhbHVlOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAg
fSwKLQotICAgIF9jbGVhck9ic2VydmVkUHJveHk6IGZ1bmN0aW9uICgpIHsKLSAgICAgIGlmICh0
aGlzLm9ic2VydmVkUHJveHkpIHsKLSAgICAgICAgX2VtYmVyTWV0YWxPYnNlcnZlci5yZW1vdmVP
YnNlcnZlcih0aGlzLm9ic2VydmVkUHJveHksICdjb250ZW50JywgdGhpcywgdGhpcy5ub3RpZnkp
OwotICAgICAgICB0aGlzLm9ic2VydmVkUHJveHkgPSBudWxsOwotICAgICAgfQotICAgIH0sCi0K
LSAgICBkZWFjdGl2YXRlOiBmdW5jdGlvbiAoKSB7Ci0gICAgICB0aGlzLl9jbGVhck9ic2VydmVk
UHJveHkoKTsKLSAgICB9LAotCi0gICAgY29tcHV0ZTogZnVuY3Rpb24gKCkgewotICAgICAgdGhy
b3cgbmV3IEVycm9yKCdTdHJlYW0gZXJyb3I6IGNvbXB1dGUgbm90IGltcGxlbWVudGVkJyk7Ci0g
ICAgfSwKLQotICAgIHNldFZhbHVlOiBmdW5jdGlvbiAoKSB7Ci0gICAgICB0aHJvdyBuZXcgRXJy
b3IoJ1N0cmVhbSBlcnJvcjogc2V0VmFsdWUgbm90IGltcGxlbWVudGVkJyk7Ci0gICAgfSwKLQot
ICAgIG5vdGlmeTogZnVuY3Rpb24gKCkgewotICAgICAgdGhpcy5ub3RpZnlFeGNlcHQoKTsKLSAg
ICB9LAotCi0gICAgbm90aWZ5RXhjZXB0OiBmdW5jdGlvbiAoY2FsbGJhY2tUb1NraXAsIGNvbnRl
eHRUb1NraXApIHsKLSAgICAgIGlmICghdGhpcy5pc0RpcnR5KSB7Ci0gICAgICAgIHRoaXMuaXNE
aXJ0eSA9IHRydWU7Ci0gICAgICAgIHRoaXMubm90aWZ5U3Vic2NyaWJlcnMoY2FsbGJhY2tUb1Nr
aXAsIGNvbnRleHRUb1NraXApOwotICAgICAgfQotICAgIH0sCi0KLSAgICBzdWJzY3JpYmU6IGZ1
bmN0aW9uIChjYWxsYmFjaywgY29udGV4dCkgewotICAgICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3Nl
cnQoJ1lvdSB0cmllZCB0byBzdWJzY3JpYmUgdG8gYSBzdHJlYW0gYnV0IHRoZSBjYWxsYmFjayBw
cm92aWRlZCB3YXMgbm90IGEgZnVuY3Rpb24uJywgdHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rp
b24nKTsKLQotICAgICAgdmFyIHN1YnNjcmliZXIgPSBuZXcgX2VtYmVyTWV0YWxTdHJlYW1zU3Vi
c2NyaWJlci5kZWZhdWx0KGNhbGxiYWNrLCBjb250ZXh0LCB0aGlzKTsKLSAgICAgIGlmICh0aGlz
LnN1YnNjcmliZXJIZWFkID09PSBudWxsKSB7Ci0gICAgICAgIHRoaXMuc3Vic2NyaWJlckhlYWQg
PSB0aGlzLnN1YnNjcmliZXJUYWlsID0gc3Vic2NyaWJlcjsKLSAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgIHZhciB0YWlsID0gdGhpcy5zdWJzY3JpYmVyVGFpbDsKLSAgICAgICAgdGFpbC5uZXh0ID0g
c3Vic2NyaWJlcjsKLSAgICAgICAgc3Vic2NyaWJlci5wcmV2ID0gdGFpbDsKLSAgICAgICAgdGhp
cy5zdWJzY3JpYmVyVGFpbCA9IHN1YnNjcmliZXI7Ci0gICAgICB9Ci0KLSAgICAgIHZhciBzdHJl
YW0gPSB0aGlzOwotICAgICAgcmV0dXJuIGZ1bmN0aW9uIChwcnVuZSkgewotICAgICAgICBzdWJz
Y3JpYmVyLnJlbW92ZUZyb20oc3RyZWFtKTsKLSAgICAgICAgaWYgKHBydW5lKSB7Ci0gICAgICAg
ICAgc3RyZWFtLnBydW5lKCk7Ci0gICAgICAgIH0KLSAgICAgIH07Ci0gICAgfSwKLQotICAgIHBy
dW5lOiBmdW5jdGlvbiAoKSB7Ci0gICAgICBpZiAodGhpcy5zdWJzY3JpYmVySGVhZCA9PT0gbnVs
bCkgewotICAgICAgICB0aGlzLmRlc3Ryb3kodHJ1ZSk7Ci0gICAgICB9Ci0gICAgfSwKLQotICAg
IHVuc3Vic2NyaWJlOiBmdW5jdGlvbiAoY2FsbGJhY2ssIGNvbnRleHQpIHsKLSAgICAgIHZhciBz
dWJzY3JpYmVyID0gdGhpcy5zdWJzY3JpYmVySGVhZDsKLQotICAgICAgd2hpbGUgKHN1YnNjcmli
ZXIpIHsKLSAgICAgICAgdmFyIG5leHQgPSBzdWJzY3JpYmVyLm5leHQ7Ci0gICAgICAgIGlmIChz
dWJzY3JpYmVyLmNhbGxiYWNrID09PSBjYWxsYmFjayAmJiBzdWJzY3JpYmVyLmNvbnRleHQgPT09
IGNvbnRleHQpIHsKLSAgICAgICAgICBzdWJzY3JpYmVyLnJlbW92ZUZyb20odGhpcyk7Ci0gICAg
ICAgIH0KLSAgICAgICAgc3Vic2NyaWJlciA9IG5leHQ7Ci0gICAgICB9Ci0gICAgfSwKLQotICAg
IG5vdGlmeVN1YnNjcmliZXJzOiBmdW5jdGlvbiAoY2FsbGJhY2tUb1NraXAsIGNvbnRleHRUb1Nr
aXApIHsKLSAgICAgIHZhciBzdWJzY3JpYmVyID0gdGhpcy5zdWJzY3JpYmVySGVhZDsKLQotICAg
ICAgd2hpbGUgKHN1YnNjcmliZXIpIHsKLSAgICAgICAgdmFyIG5leHQgPSBzdWJzY3JpYmVyLm5l
eHQ7Ci0KLSAgICAgICAgdmFyIGNhbGxiYWNrID0gc3Vic2NyaWJlci5jYWxsYmFjazsKLSAgICAg
ICAgdmFyIGNvbnRleHQgPSBzdWJzY3JpYmVyLmNvbnRleHQ7Ci0KLSAgICAgICAgc3Vic2NyaWJl
ciA9IG5leHQ7Ci0KLSAgICAgICAgaWYgKGNhbGxiYWNrID09PSBjYWxsYmFja1RvU2tpcCAmJiBj
b250ZXh0ID09PSBjb250ZXh0VG9Ta2lwKSB7Ci0gICAgICAgICAgY29udGludWU7Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAoY29udGV4dCA9PT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgICAgY2Fs
bGJhY2sodGhpcyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgY2FsbGJhY2suY2FsbChj
b250ZXh0LCB0aGlzKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0KLSAgICBkZXN0cm95
OiBmdW5jdGlvbiAocHJ1bmUpIHsKLSAgICAgIGlmICghdGhpcy5pc0Rlc3Ryb3llZCkgewotICAg
ICAgICB0aGlzLmlzRGVzdHJveWVkID0gdHJ1ZTsKLQotICAgICAgICB0aGlzLnN1YnNjcmliZXJI
ZWFkID0gdGhpcy5zdWJzY3JpYmVyVGFpbCA9IG51bGw7Ci0gICAgICAgIHRoaXMubWF5YmVEZWFj
dGl2YXRlKCk7Ci0KLSAgICAgICAgdmFyIGRlcGVuZGVuY2llcyA9IHRoaXMuZGVwZW5kZW5jaWVz
OwotCi0gICAgICAgIGlmIChkZXBlbmRlbmNpZXMpIHsKLSAgICAgICAgICBmb3IgKHZhciBpID0g
MCwgbCA9IGRlcGVuZGVuY2llcy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKLSAgICAgICAgICAgIGRl
cGVuZGVuY2llc1tpXShwcnVuZSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgfQotICB9OwotCi0gIEJhc2ljU3RyZWFtLmV4dGVu
ZCA9IGZ1bmN0aW9uIChvYmplY3QpIHsKLSAgICB2YXIgQ2hpbGQgPSBmdW5jdGlvbiAoKSB7Ci0g
ICAgICB0aGlzLl9pbml0KCk7Ci0gICAgICB0aGlzLmluaXQuYXBwbHkodGhpcywgYXJndW1lbnRz
KTsKLQotICAgICAgX2VtYmVyTWV0YWxEZWJ1Zy5kZWJ1Z1NlYWwodGhpcyk7Ci0gICAgfTsKLQot
ICAgIENoaWxkLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUodGhpcy5wcm90b3R5cGUpOwotCi0g
ICAgX2VtYmVyTWV0YWxBc3NpZ24uZGVmYXVsdChDaGlsZC5wcm90b3R5cGUsIG9iamVjdCk7Ci0g
ICAgQ2hpbGQuZXh0ZW5kID0gQmFzaWNTdHJlYW0uZXh0ZW5kOwotICAgIHJldHVybiBDaGlsZDsK
LSAgfTsKLQotICB2YXIgU3RyZWFtID0gQmFzaWNTdHJlYW0uZXh0ZW5kKHsKLSAgICBpbml0OiBm
dW5jdGlvbiAoZm4sIGxhYmVsKSB7Ci0gICAgICB0aGlzLl9jb21wdXRlID0gZm47Ci0gICAgICB0
aGlzLmxhYmVsID0gbGFiZWw7Ci0gICAgfSwKLQotICAgIGNvbXB1dGU6IGZ1bmN0aW9uICgpIHsK
LSAgICAgIHJldHVybiB0aGlzLl9jb21wdXRlKCk7Ci0gICAgfQotICB9KTsKLQotICBmdW5jdGlv
biB3cmFwKHZhbHVlLCBLaW5kLCBwYXJhbSkgewotICAgIGlmIChfZW1iZXJNZXRhbFN0cmVhbXNV
dGlscy5pc1N0cmVhbSh2YWx1ZSkpIHsKLSAgICAgIHJldHVybiB2YWx1ZTsKLSAgICB9IGVsc2Ug
ewotICAgICAgcmV0dXJuIG5ldyBLaW5kKHZhbHVlLCBwYXJhbSk7Ci0gICAgfQotICB9Ci0KLSAg
ZnVuY3Rpb24gbWFrZUxhYmVsKGxhYmVsKSB7Ci0gICAgaWYgKGxhYmVsID09PSB1bmRlZmluZWQp
IHsKLSAgICAgIHJldHVybiAnKG5vIGxhYmVsKSc7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJldHVy
biBsYWJlbDsKLSAgICB9Ci0gIH0KLQotICBleHBvcnRzLmRlZmF1bHQgPSBCYXNpY1N0cmVhbTsK
LSAgZXhwb3J0cy5TdHJlYW0gPSBTdHJlYW07Ci19KTsKLWVuaWZlZCgnZW1iZXItbWV0YWwvc3Ry
ZWFtcy9zdWJzY3JpYmVyJywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFsL2Fzc2lnbiddLCBmdW5j
dGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0YWxBc3NpZ24pIHsKLSAgJ3VzZSBzdHJpY3QnOwotCi0g
IC8qKgotICAgIEBtb2R1bGUgZW1iZXItbWV0YWwKLSAgKi8KLQotICAvKioKLSAgICBAcHJpdmF0
ZQotICAgIEBjbGFzcyBTdWJzY3JpYmVyCi0gICAgQG5hbWVzcGFjZSBFbWJlci5zdHJlYW1zCi0g
ICAgQGNvbnN0cnVjdG9yCi0gICovCi0gIGZ1bmN0aW9uIFN1YnNjcmliZXIoY2FsbGJhY2ssIGNv
bnRleHQpIHsKLSAgICB0aGlzLm5leHQgPSBudWxsOwotICAgIHRoaXMucHJldiA9IG51bGw7Ci0g
ICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrOwotICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7
Ci0gIH0KLQotICBfZW1iZXJNZXRhbEFzc2lnbi5kZWZhdWx0KFN1YnNjcmliZXIucHJvdG90eXBl
LCB7Ci0gICAgcmVtb3ZlRnJvbTogZnVuY3Rpb24gKHN0cmVhbSkgewotICAgICAgdmFyIG5leHQg
PSB0aGlzLm5leHQ7Ci0gICAgICB2YXIgcHJldiA9IHRoaXMucHJldjsKLQotICAgICAgaWYgKHBy
ZXYpIHsKLSAgICAgICAgcHJldi5uZXh0ID0gbmV4dDsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAg
IHN0cmVhbS5zdWJzY3JpYmVySGVhZCA9IG5leHQ7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChuZXh0
KSB7Ci0gICAgICAgIG5leHQucHJldiA9IHByZXY7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBz
dHJlYW0uc3Vic2NyaWJlclRhaWwgPSBwcmV2OwotICAgICAgfQotCi0gICAgICBzdHJlYW0ubWF5
YmVEZWFjdGl2YXRlKCk7Ci0gICAgfQotICB9KTsKLQotICBleHBvcnRzLmRlZmF1bHQgPSBTdWJz
Y3JpYmVyOwotfSk7Ci1lbmlmZWQoJ2VtYmVyLW1ldGFsL3N0cmVhbXMvdXRpbHMnLCBbJ2V4cG9y
dHMnLCAnZW1iZXItbWV0YWwvZGVidWcnLCAnZW1iZXItbWV0YWwvc3RyZWFtcy9zdHJlYW0nXSwg
ZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1ldGFsRGVidWcsIF9lbWJlck1ldGFsU3RyZWFtc1N0
cmVhbSkgewotICAndXNlIHN0cmljdCc7Ci0KLSAgZXhwb3J0cy5pc1N0cmVhbSA9IGlzU3RyZWFt
OwotICBleHBvcnRzLnN1YnNjcmliZSA9IHN1YnNjcmliZTsKLSAgZXhwb3J0cy51bnN1YnNjcmli
ZSA9IHVuc3Vic2NyaWJlOwotICBleHBvcnRzLnJlYWQgPSByZWFkOwotICBleHBvcnRzLnJlYWRB
cnJheSA9IHJlYWRBcnJheTsKLSAgZXhwb3J0cy5yZWFkSGFzaCA9IHJlYWRIYXNoOwotICBleHBv
cnRzLnNjYW5BcnJheSA9IHNjYW5BcnJheTsKLSAgZXhwb3J0cy5zY2FuSGFzaCA9IHNjYW5IYXNo
OwotICBleHBvcnRzLmNvbmNhdCA9IGNvbmNhdDsKLSAgZXhwb3J0cy5sYWJlbHNGb3IgPSBsYWJl
bHNGb3I7Ci0gIGV4cG9ydHMubGFiZWxzRm9yT2JqZWN0ID0gbGFiZWxzRm9yT2JqZWN0OwotICBl
eHBvcnRzLmxhYmVsRm9yID0gbGFiZWxGb3I7Ci0gIGV4cG9ydHMub3IgPSBvcjsKLSAgZXhwb3J0
cy5hZGREZXBlbmRlbmN5ID0gYWRkRGVwZW5kZW5jeTsKLSAgZXhwb3J0cy56aXAgPSB6aXA7Ci0g
IGV4cG9ydHMuemlwSGFzaCA9IHppcEhhc2g7Ci0gIGV4cG9ydHMuY2hhaW4gPSBjaGFpbjsKLSAg
ZXhwb3J0cy5zZXRWYWx1ZSA9IHNldFZhbHVlOwotCi0gIC8qCi0gICBDaGVjayB3aGV0aGVyIGFu
IG9iamVjdCBpcyBhIHN0cmVhbSBvciBub3QuCi0gIAotICAgQHByaXZhdGUKLSAgIEBmb3IgRW1i
ZXIuc3RyZWFtCi0gICBAZnVuY3Rpb24gaXNTdHJlYW0KLSAgIEBwYXJhbSB7T2JqZWN0fFN0cmVh
bX0gb2JqZWN0IE9iamVjdCB0byBjaGVjayB3aGV0aGVyIGl0IGlzIGEgc3RyZWFtLgotICAgQHJl
dHVybiB7Qm9vbGVhbn0gYHRydWVgIGlmIHRoZSBvYmplY3QgaXMgYSBzdHJlYW0sIGBmYWxzZWAg
b3RoZXJ3aXNlLgotICAqLwotCi0gIGZ1bmN0aW9uIGlzU3RyZWFtKG9iamVjdCkgewotICAgIHJl
dHVybiBvYmplY3QgJiYgb2JqZWN0W19lbWJlck1ldGFsU3RyZWFtc1N0cmVhbS5JU19TVFJFQU1d
OwotICB9Ci0KLSAgLyoKLSAgIEEgbWV0aG9kIG9mIHN1YnNjcmliaW5nIHRvIGEgc3RyZWFtIHdo
aWNoIGlzIHNhZmUgZm9yIHVzZSB3aXRoIGEgbm9uLXN0cmVhbQotICAgb2JqZWN0LiBJZiBhIG5v
bi1zdHJlYW0gb2JqZWN0IGlzIHBhc3NlZCwgdGhlIGZ1bmN0aW9uIGRvZXMgbm90aGluZy4KLSAg
Ci0gICBAcHVibGljCi0gICBAZm9yIEVtYmVyLnN0cmVhbQotICAgQGZ1bmN0aW9uIHN1YnNjcmli
ZQotICAgQHBhcmFtIHtPYmplY3R8U3RyZWFtfSBvYmplY3QgT2JqZWN0IG9yIHN0cmVhbSB0byBw
b3RlbnRpYWxseSBzdWJzY3JpYmUgdG8uCi0gICBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBG
dW5jdGlvbiB0byBydW4gd2hlbiBzdHJlYW0gdmFsdWUgY2hhbmdlcy4KLSAgIEBwYXJhbSB7T2Jq
ZWN0fSBbY29udGV4dF0gdGhlIGNhbGxiYWNrIHdpbGwgYmUgZXhlY3V0ZWQgd2l0aCB0aGlzIGNv
bnRleHQgaWYgaXQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgcHJvdmlkZWQuCi0g
ICAqLwotCi0gIGZ1bmN0aW9uIHN1YnNjcmliZShvYmplY3QsIGNhbGxiYWNrLCBjb250ZXh0KSB7
Ci0gICAgaWYgKG9iamVjdCAmJiBvYmplY3RbX2VtYmVyTWV0YWxTdHJlYW1zU3RyZWFtLklTX1NU
UkVBTV0pIHsKLSAgICAgIHJldHVybiBvYmplY3Quc3Vic2NyaWJlKGNhbGxiYWNrLCBjb250ZXh0
KTsKLSAgICB9Ci0gIH0KLQotICAvKgotICAgQSBtZXRob2Qgb2YgdW5zdWJzY3JpYmluZyBmcm9t
IGEgc3RyZWFtIHdoaWNoIGlzIHNhZmUgZm9yIHVzZSB3aXRoIGEgbm9uLXN0cmVhbQotICAgb2Jq
ZWN0LiBJZiBhIG5vbi1zdHJlYW0gb2JqZWN0IGlzIHBhc3NlZCwgdGhlIGZ1bmN0aW9uIGRvZXMg
bm90aGluZy4KLSAgCi0gICBAcHJpdmF0ZQotICAgQGZvciBFbWJlci5zdHJlYW0KLSAgIEBmdW5j
dGlvbiB1bnN1YnNjcmliZQotICAgQHBhcmFtIHtPYmplY3R8U3RyZWFtfSBvYmplY3QgT2JqZWN0
IG9yIHN0cmVhbSB0byBwb3RlbnRpYWxseSB1bnN1YnNjcmliZSBmcm9tLgotICAgQHBhcmFtIHtG
dW5jdGlvbn0gY2FsbGJhY2sgRnVuY3Rpb24gb3JpZ2luYWxseSBwYXNzZWQgdG8gYHN1YnNjcmli
ZSgpYC4KLSAgIEBwYXJhbSB7T2JqZWN0fSBbY29udGV4dF0gT2JqZWN0IG9yaWdpbmFsbHkgcGFz
c2VkIHRvIGBzdWJzY3JpYmUoKWAuCi0gICAqLwotCi0gIGZ1bmN0aW9uIHVuc3Vic2NyaWJlKG9i
amVjdCwgY2FsbGJhY2ssIGNvbnRleHQpIHsKLSAgICBpZiAob2JqZWN0ICYmIG9iamVjdFtfZW1i
ZXJNZXRhbFN0cmVhbXNTdHJlYW0uSVNfU1RSRUFNXSkgewotICAgICAgb2JqZWN0LnVuc3Vic2Ny
aWJlKGNhbGxiYWNrLCBjb250ZXh0KTsKLSAgICB9Ci0gIH0KLQotICAvKgotICAgUmV0cmlldmUg
dGhlIHZhbHVlIG9mIGEgc3RyZWFtLCBvciBpbiB0aGUgY2FzZSB3aGVyZSBhIG5vbi1zdHJlYW0g
b2JqZWN0IGlzIHBhc3NlZCwKLSAgIHJldHVybiB0aGUgb2JqZWN0IGl0c2VsZi4KLSAgCi0gICBA
cHJpdmF0ZQotICAgQGZvciBFbWJlci5zdHJlYW0KLSAgIEBmdW5jdGlvbiByZWFkCi0gICBAcGFy
YW0ge09iamVjdHxTdHJlYW19IG9iamVjdCBPYmplY3QgdG8gcmV0dXJuIHRoZSB2YWx1ZSBvZi4K
LSAgIEByZXR1cm4gVGhlIHN0cmVhbSdzIGN1cnJlbnQgdmFsdWUsIG9yIHRoZSBub24tc3RyZWFt
IG9iamVjdCBpdHNlbGYuCi0gICAqLwotCi0gIGZ1bmN0aW9uIHJlYWQob2JqZWN0KSB7Ci0gICAg
aWYgKG9iamVjdCAmJiBvYmplY3RbX2VtYmVyTWV0YWxTdHJlYW1zU3RyZWFtLklTX1NUUkVBTV0p
IHsKLSAgICAgIHJldHVybiBvYmplY3QudmFsdWUoKTsKLSAgICB9IGVsc2UgewotICAgICAgcmV0
dXJuIG9iamVjdDsKLSAgICB9Ci0gIH0KLQotICAvKgotICAgTWFwIGFuIGFycmF5LCByZXBsYWNp
bmcgYW55IHN0cmVhbXMgd2l0aCB0aGVpciB2YWx1ZXMuCi0gIAotICAgQHByaXZhdGUKLSAgIEBm
b3IgRW1iZXIuc3RyZWFtCi0gICBAZnVuY3Rpb24gcmVhZEFycmF5Ci0gICBAcGFyYW0ge0FycmF5
fSBhcnJheSBUaGUgYXJyYXkgdG8gcmVhZCB2YWx1ZXMgZnJvbQotICAgQHJldHVybiB7QXJyYXl9
IEEgbmV3IGFycmF5IG9mIHRoZSBzYW1lIGxlbmd0aCB3aXRoIHRoZSB2YWx1ZXMgb2Ygbm9uLXN0
cmVhbQotICAgICAgICAgICAgICAgICAgIG9iamVjdHMgbWFwcGVkIGZyb20gdGhlaXIgb3JpZ2lu
YWwgcG9zaXRpb25zIHVudG91Y2hlZCwgYW5kCi0gICAgICAgICAgICAgICAgICAgdGhlIHZhbHVl
cyBvZiBzdHJlYW0gb2JqZWN0cyByZXRhaW5pbmcgdGhlaXIgb3JpZ2luYWwgcG9zaXRpb24KLSAg
ICAgICAgICAgICAgICAgICBhbmQgcmVwbGFjZWQgd2l0aCB0aGUgc3RyZWFtJ3MgY3VycmVudCB2
YWx1ZS4KLSAgICovCi0KLSAgZnVuY3Rpb24gcmVhZEFycmF5KGFycmF5KSB7Ci0gICAgdmFyIGxl
bmd0aCA9IGFycmF5Lmxlbmd0aDsKLSAgICB2YXIgcmV0ID0gbmV3IEFycmF5KGxlbmd0aCk7Ci0g
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgcmV0W2ldID0gcmVh
ZChhcnJheVtpXSk7Ci0gICAgfQotICAgIHJldHVybiByZXQ7Ci0gIH0KLQotICAvKgotICAgTWFw
IGEgaGFzaCwgcmVwbGFjaW5nIGFueSBzdHJlYW0gcHJvcGVydHkgdmFsdWVzIHdpdGggdGhlIGN1
cnJlbnQgdmFsdWUgb2YgdGhhdAotICAgc3RyZWFtLgotICAKLSAgIEBwcml2YXRlCi0gICBAZm9y
IEVtYmVyLnN0cmVhbQotICAgQGZ1bmN0aW9uIHJlYWRIYXNoCi0gICBAcGFyYW0ge09iamVjdH0g
b2JqZWN0IFRoZSBoYXNoIHRvIHJlYWQga2V5cyBhbmQgdmFsdWVzIGZyb20uCi0gICBAcmV0dXJu
IHtPYmplY3R9IEEgbmV3IG9iamVjdCB3aXRoIHRoZSBzYW1lIGtleXMgYXMgdGhlIHBhc3NlZCBv
YmplY3QuIFRoZQotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eSB2YWx1ZXMgaW4gdGhlIG5l
dyBvYmplY3QgYXJlIHRoZSBvcmlnaW5hbCB2YWx1ZXMgaW4KLSAgICAgICAgICAgICAgICAgICAg
dGhlIGNhc2Ugb2Ygbm9uLXN0cmVhbSBvYmplY3RzLCBhbmQgdGhlIHN0cmVhbXMnIGN1cnJlbnQK
LSAgICAgICAgICAgICAgICAgICAgdmFsdWVzIGluIHRoZSBjYXNlIG9mIHN0cmVhbSBvYmplY3Rz
LgotICAgKi8KLQotICBmdW5jdGlvbiByZWFkSGFzaChvYmplY3QpIHsKLSAgICB2YXIgcmV0ID0g
e307Ci0gICAgZm9yICh2YXIga2V5IGluIG9iamVjdCkgewotICAgICAgcmV0W2tleV0gPSByZWFk
KG9iamVjdFtrZXldKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJldDsKLSAgfQotCi0gIC8qCi0gICBD
aGVjayB3aGV0aGVyIGFuIGFycmF5IGNvbnRhaW5zIGFueSBzdHJlYW0gdmFsdWVzLgotICAKLSAg
IEBwcml2YXRlCi0gICBAZm9yIEVtYmVyLnN0cmVhbQotICAgQGZ1bmN0aW9uIHNjYW5BcnJheQot
ICAgQHBhcmFtIHtBcnJheX0gYXJyYXkgQXJyYXkgZ2l2ZW4gdG8gYSBoYW5kbGViYXJzIGhlbHBl
ci4KLSAgIEByZXR1cm4ge0Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgYXJyYXkgY29udGFpbnMgYSBz
dHJlYW0vYm91bmQgdmFsdWUsIGBmYWxzZWAKLSAgICAgICAgICAgICAgICAgICAgIG90aGVyd2lz
ZS4KLSAgKi8KLQotICBmdW5jdGlvbiBzY2FuQXJyYXkoYXJyYXkpIHsKLSAgICB2YXIgbGVuZ3Ro
ID0gYXJyYXkubGVuZ3RoOwotICAgIHZhciBjb250YWluc1N0cmVhbSA9IGZhbHNlOwotCi0gICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgaWYgKGlzU3RyZWFtKGFy
cmF5W2ldKSkgewotICAgICAgICBjb250YWluc1N0cmVhbSA9IHRydWU7Ci0gICAgICAgIGJyZWFr
OwotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBjb250YWluc1N0cmVhbTsKLSAgfQotCi0g
IC8qCi0gICBDaGVjayB3aGV0aGVyIGEgaGFzaCBoYXMgYW55IHN0cmVhbSBwcm9wZXJ0eSB2YWx1
ZXMuCi0gIAotICAgQHByaXZhdGUKLSAgIEBmb3IgRW1iZXIuc3RyZWFtCi0gICBAZnVuY3Rpb24g
c2Nhbkhhc2gKLSAgIEBwYXJhbSB7T2JqZWN0fSBoYXNoICJoYXNoIiBhcmd1bWVudCBnaXZlbiB0
byBhIGhhbmRsZWJhcnMgaGVscGVyLgotICAgQHJldHVybiB7Qm9vbGVhbn0gYHRydWVgIGlmIHRo
ZSBvYmplY3QgY29udGFpbnMgYSBzdHJlYW0vYm91bmQgdmFsdWUsIGBmYWxzZWAKLSAgICAgICAg
ICAgICAgICAgICAgIG90aGVyd2lzZS4KLSAgICovCi0KLSAgZnVuY3Rpb24gc2Nhbkhhc2goaGFz
aCkgewotICAgIHZhciBjb250YWluc1N0cmVhbSA9IGZhbHNlOwotCi0gICAgZm9yICh2YXIgcHJv
cCBpbiBoYXNoKSB7Ci0gICAgICBpZiAoaXNTdHJlYW0oaGFzaFtwcm9wXSkpIHsKLSAgICAgICAg
Y29udGFpbnNTdHJlYW0gPSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0K
LSAgICByZXR1cm4gY29udGFpbnNTdHJlYW07Ci0gIH0KLQotICB2YXIgQ29uY2F0U3RyZWFtID0g
X2VtYmVyTWV0YWxTdHJlYW1zU3RyZWFtLmRlZmF1bHQuZXh0ZW5kKHsKLSAgICBpbml0OiBmdW5j
dGlvbiAoYXJyYXksIHNlcGFyYXRvcikgewotICAgICAgdGhpcy5hcnJheSA9IGFycmF5OwotICAg
ICAgdGhpcy5zZXBhcmF0b3IgPSBzZXBhcmF0b3I7Ci0KLSAgICAgIC8vIFVzZWQgYnkgYW5nbGUg
YnJhY2tldCBjb21wb25lbnRzIHRvIGRldGVjdCBhbiBhdHRyaWJ1dGUgd2FzIHByb3ZpZGVkCi0g
ICAgICAvLyBhcyBhIHN0cmluZyBsaXRlcmFsLgotICAgICAgdGhpcy5pc0NvbmNhdCA9IHRydWU7
Ci0gICAgfSwKLQotICAgIGxhYmVsOiBmdW5jdGlvbiAoKSB7Ci0gICAgICB2YXIgbGFiZWxzID0g
bGFiZWxzRm9yKHRoaXMuYXJyYXkpOwotICAgICAgcmV0dXJuICdjb25jYXQoWycgKyBsYWJlbHMu
am9pbignLCAnKSArICddOyBzZXBhcmF0b3I9JyArIGluc3BlY3QodGhpcy5zZXBhcmF0b3IpICsg
JyknOwotICAgIH0sCi0KLSAgICBjb21wdXRlOiBmdW5jdGlvbiAoKSB7Ci0gICAgICByZXR1cm4g
Y29uY2F0KHJlYWRBcnJheSh0aGlzLmFycmF5KSwgdGhpcy5zZXBhcmF0b3IpOwotICAgIH0KLSAg
fSk7Ci0KLSAgLyoKLSAgIEpvaW4gYW4gYXJyYXksIHdpdGggYW55IHN0cmVhbXMgcmVwbGFjZWQg
YnkgdGhlaXIgY3VycmVudCB2YWx1ZXMuCi0gIAotICAgQHByaXZhdGUKLSAgIEBmb3IgRW1iZXIu
c3RyZWFtCi0gICBAZnVuY3Rpb24gY29uY2F0Ci0gICBAcGFyYW0ge0FycmF5fSBhcnJheSBBbiBh
cnJheSBjb250YWluaW5nIHplcm8gb3IgbW9yZSBzdHJlYW0gb2JqZWN0cyBhbmQKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHplcm8gb3IgbW9yZSBub24tc3RyZWFtIG9iamVjdHMuCi0gICBAcGFy
YW0ge1N0cmluZ30gc2VwYXJhdG9yIFN0cmluZyB0byBiZSB1c2VkIHRvIGpvaW4gYXJyYXkgZWxl
bWVudHMuCi0gICBAcmV0dXJuIHtTdHJpbmd9IFN0cmluZyB3aXRoIGFycmF5IGVsZW1lbnRzIGNv
bmNhdGVuYXRlZCBhbmQgam9pbmVkIGJ5IHRoZQotICAgICAgICAgICAgICAgICAgICBwcm92aWRl
ZCBzZXBhcmF0b3IsIGFuZCBhbnkgc3RyZWFtIGFycmF5IG1lbWJlcnMgaGF2aW5nIGJlZW4KLSAg
ICAgICAgICAgICAgICAgICAgcmVwbGFjZWQgYnkgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIHN0
cmVhbS4KLSAgICovCi0KLSAgZnVuY3Rpb24gY29uY2F0KGFycmF5LCBzZXBhcmF0b3IpIHsKLSAg
ICAvLyBUT0RPOiBDcmVhdGUgc3ViY2xhc3MgQ29uY2F0U3RyZWFtIDwgU3RyZWFtLiBEZWZlcgot
ICAgIC8vIHN1YnNjcmliaW5nIHRvIHN0cmVhbXMgdW50aWwgdGhlIHZhbHVlKCkgaXMgY2FsbGVk
LgotICAgIHZhciBoYXNTdHJlYW0gPSBzY2FuQXJyYXkoYXJyYXkpOwotICAgIGlmIChoYXNTdHJl
YW0pIHsKLSAgICAgIHZhciBzdHJlYW0gPSBuZXcgQ29uY2F0U3RyZWFtKGFycmF5LCBzZXBhcmF0
b3IpOwotCi0gICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGFycmF5Lmxlbmd0aDsgaSA8IGw7IGkr
KykgewotICAgICAgICBhZGREZXBlbmRlbmN5KHN0cmVhbSwgYXJyYXlbaV0pOwotICAgICAgfQot
Ci0gICAgICByZXR1cm4gc3RyZWFtOwotICAgIH0gZWxzZSB7Ci0gICAgICByZXR1cm4gYXJyYXku
am9pbihzZXBhcmF0b3IpOwotICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIGxhYmVsc0ZvcihzdHJl
YW1zKSB7Ci0gICAgdmFyIGxhYmVscyA9IFtdOwotCi0gICAgZm9yICh2YXIgaSA9IDAsIGwgPSBz
dHJlYW1zLmxlbmd0aDsgaSA8IGw7IGkrKykgewotICAgICAgdmFyIHN0cmVhbSA9IHN0cmVhbXNb
aV07Ci0gICAgICBsYWJlbHMucHVzaChsYWJlbEZvcihzdHJlYW0pKTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gbGFiZWxzOwotICB9Ci0KLSAgZnVuY3Rpb24gbGFiZWxzRm9yT2JqZWN0KHN0cmVhbXMp
IHsKLSAgICB2YXIgbGFiZWxzID0gW107Ci0KLSAgICBmb3IgKHZhciBwcm9wIGluIHN0cmVhbXMp
IHsKLSAgICAgIGxhYmVscy5wdXNoKHByb3AgKyAnOiAnICsgaW5zcGVjdChzdHJlYW1zW3Byb3Bd
KSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGxhYmVscy5sZW5ndGggPyAneyAnICsgbGFiZWxzLmpv
aW4oJywgJykgKyAnIH0nIDogJ3t9JzsKLSAgfQotCi0gIGZ1bmN0aW9uIGxhYmVsRm9yKG1heWJl
U3RyZWFtKSB7Ci0gICAgaWYgKGlzU3RyZWFtKG1heWJlU3RyZWFtKSkgewotICAgICAgdmFyIHN0
cmVhbSA9IG1heWJlU3RyZWFtOwotICAgICAgcmV0dXJuIHR5cGVvZiBzdHJlYW0ubGFiZWwgPT09
ICdmdW5jdGlvbicgPyBzdHJlYW0ubGFiZWwoKSA6IHN0cmVhbS5sYWJlbDsKLSAgICB9IGVsc2Ug
ewotICAgICAgcmV0dXJuIGluc3BlY3QobWF5YmVTdHJlYW0pOwotICAgIH0KLSAgfQotCi0gIGZ1
bmN0aW9uIGluc3BlY3QodmFsdWUpIHsKLSAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkgewotICAg
ICAgY2FzZSAnc3RyaW5nJzoKLSAgICAgICAgcmV0dXJuICciJyArIHZhbHVlICsgJyInOwotICAg
ICAgY2FzZSAnb2JqZWN0JzoKLSAgICAgICAgcmV0dXJuICd7IC4uLiB9JzsKLSAgICAgIGNhc2Ug
J2Z1bmN0aW9uJzoKLSAgICAgICAgcmV0dXJuICdmdW5jdGlvbigpIHsgLi4uIH0nOwotICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7Ci0gICAgfQotICB9Ci0KLSAg
ZnVuY3Rpb24gb3IoZmlyc3QsIHNlY29uZCkgewotICAgIHZhciBzdHJlYW0gPSBuZXcgX2VtYmVy
TWV0YWxTdHJlYW1zU3RyZWFtLlN0cmVhbShmdW5jdGlvbiAoKSB7Ci0gICAgICByZXR1cm4gZmly
c3QudmFsdWUoKSB8fCBzZWNvbmQudmFsdWUoKTsKLSAgICB9LCBmdW5jdGlvbiAoKSB7Ci0gICAg
ICByZXR1cm4gbGFiZWxGb3IoZmlyc3QpICsgJyB8fCAnICsgbGFiZWxGb3Ioc2Vjb25kKTsKLSAg
ICB9KTsKLQotICAgIHN0cmVhbS5hZGREZXBlbmRlbmN5KGZpcnN0KTsKLSAgICBzdHJlYW0uYWRk
RGVwZW5kZW5jeShzZWNvbmQpOwotCi0gICAgcmV0dXJuIHN0cmVhbTsKLSAgfQotCi0gIGZ1bmN0
aW9uIGFkZERlcGVuZGVuY3koc3RyZWFtLCBkZXBlbmRlbmN5KSB7Ci0gICAgX2VtYmVyTWV0YWxE
ZWJ1Zy5hc3NlcnQoJ0Nhbm5vdCBhZGQgYSBzdHJlYW0gYXMgYSBkZXBlbmRlbmN5IHRvIGEgbm9u
LXN0cmVhbScsIGlzU3RyZWFtKHN0cmVhbSkgfHwgIWlzU3RyZWFtKGRlcGVuZGVuY3kpKTsKLSAg
ICBpZiAoaXNTdHJlYW0oc3RyZWFtKSkgewotICAgICAgc3RyZWFtLmFkZERlcGVuZGVuY3koZGVw
ZW5kZW5jeSk7Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gemlwKHN0cmVhbXMsIGNhbGxiYWNr
LCBsYWJlbCkgewotICAgIF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0KCdNdXN0IGNhbGwgemlwIHdp
dGggYSBsYWJlbCcsICEhbGFiZWwpOwotCi0gICAgdmFyIHN0cmVhbSA9IG5ldyBfZW1iZXJNZXRh
bFN0cmVhbXNTdHJlYW0uU3RyZWFtKGZ1bmN0aW9uICgpIHsKLSAgICAgIHZhciBhcnJheSA9IHJl
YWRBcnJheShzdHJlYW1zKTsKLSAgICAgIHJldHVybiBjYWxsYmFjayA/IGNhbGxiYWNrKGFycmF5
KSA6IGFycmF5OwotICAgIH0sIGZ1bmN0aW9uICgpIHsKLSAgICAgIHJldHVybiBsYWJlbCArICco
JyArIGxhYmVsc0ZvcihzdHJlYW1zKSArICcpJzsKLSAgICB9KTsKLQotICAgIGZvciAodmFyIGkg
PSAwLCBsID0gc3RyZWFtcy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKLSAgICAgIHN0cmVhbS5hZGRE
ZXBlbmRlbmN5KHN0cmVhbXNbaV0pOwotICAgIH0KLQotICAgIHJldHVybiBzdHJlYW07Ci0gIH0K
LQotICBmdW5jdGlvbiB6aXBIYXNoKG9iamVjdCwgY2FsbGJhY2ssIGxhYmVsKSB7Ci0gICAgX2Vt
YmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ011c3QgY2FsbCB6aXBIYXNoIHdpdGggYSBsYWJlbCcsICEh
bGFiZWwpOwotCi0gICAgdmFyIHN0cmVhbSA9IG5ldyBfZW1iZXJNZXRhbFN0cmVhbXNTdHJlYW0u
U3RyZWFtKGZ1bmN0aW9uICgpIHsKLSAgICAgIHZhciBoYXNoID0gcmVhZEhhc2gob2JqZWN0KTsK
LSAgICAgIHJldHVybiBjYWxsYmFjayA/IGNhbGxiYWNrKGhhc2gpIDogaGFzaDsKLSAgICB9LCBm
dW5jdGlvbiAoKSB7Ci0gICAgICByZXR1cm4gbGFiZWwgKyAnKCcgKyBsYWJlbHNGb3JPYmplY3Qo
b2JqZWN0KSArICcpJzsKLSAgICB9KTsKLQotICAgIGZvciAodmFyIHByb3AgaW4gb2JqZWN0KSB7
Ci0gICAgICBzdHJlYW0uYWRkRGVwZW5kZW5jeShvYmplY3RbcHJvcF0pOwotICAgIH0KLQotICAg
IHJldHVybiBzdHJlYW07Ci0gIH0KLQotICAvKioKLSAgIEdlbmVyYXRlIGEgbmV3IHN0cmVhbSBi
eSBwcm92aWRpbmcgYSBzb3VyY2Ugc3RyZWFtIGFuZCBhIGZ1bmN0aW9uIHRoYXQgY2FuCi0gICBi
ZSB1c2VkIHRvIHRyYW5zZm9ybSB0aGUgc3RyZWFtJ3MgdmFsdWUuIEluIHRoZSBjYXNlIG9mIGEg
bm9uLXN0cmVhbSBvYmplY3QsCi0gICByZXR1cm5zIHRoZSByZXN1bHQgb2YgdGhlIGZ1bmN0aW9u
LgotICAKLSAgIFRoZSB2YWx1ZSB0byB0cmFuc2Zvcm0gd291bGQgdHlwaWNhbGx5IGJlIGF2YWls
YWJsZSB0byB0aGUgZnVuY3Rpb24geW91IHBhc3MKLSAgIHRvIGBjaGFpbigpYCB2aWEgc2NvcGUu
IEZvciBleGFtcGxlOgotICAKLSAgIGBgYGphdmFzY3JpcHQKLSAgICAgICB2YXIgc291cmNlID0g
Li4uOyAgLy8gc3RyZWFtIHJldHVybmluZyBhIG51bWJlcgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gb3IgYSBudW1lcmljIChub24tc3RyZWFtKSBvYmplY3QKLSAgICAgICB2YXIg
cmVzdWx0ID0gY2hhaW4oc291cmNlLCBmdW5jdGlvbigpIHsKLSAgICAgICAgIHZhciBjdXJyZW50
VmFsdWUgPSByZWFkKHNvdXJjZSk7Ci0gICAgICAgICByZXR1cm4gY3VycmVudFZhbHVlICsgMTsK
LSAgICAgICB9KTsKLSAgIGBgYAotICAKLSAgIEluIHRoZSBleGFtcGxlLCByZXN1bHQgaXMgYSBz
dHJlYW0gaWYgc291cmNlIGlzIGEgc3RyZWFtLCBvciBhIG51bWJlciBvZgotICAgc291cmNlIHdh
cyBudW1lcmljLgotICAKLSAgIEBwcml2YXRlCi0gICBAZm9yIEVtYmVyLnN0cmVhbQotICAgQGZ1
bmN0aW9uIGNoYWluCi0gICBAcGFyYW0ge09iamVjdHxTdHJlYW19IHZhbHVlIEEgc3RyZWFtIG9y
IG5vbi1zdHJlYW0gb2JqZWN0LgotICAgQHBhcmFtIHtGdW5jdGlvbn0gZm4gRnVuY3Rpb24gdG8g
YmUgcnVuIHdoZW4gdGhlIHN0cmVhbSB2YWx1ZSBjaGFuZ2VzLCBvciB0bwotICAgICAgICAgICAg
ICAgICAgICAgICAgYmUgcnVuIG9uY2UgaW4gdGhlIGNhc2Ugb2YgYSBub24tc3RyZWFtIG9iamVj
dC4KLSAgIEByZXR1cm4ge09iamVjdHxTdHJlYW19IEluIHRoZSBjYXNlIG9mIGEgc3RyZWFtIGB2
YWx1ZWAgcGFyYW1ldGVyLCBhIG5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFt
IHRoYXQgd2lsbCBiZSB1cGRhdGVkIHdpdGggdGhlIHJldHVybiB2YWx1ZSBvZgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uIGBmbmAuIEluIHRoZSBjYXNl
IG9mIGEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vbi1zdHJlYW0gb2JqZWN0LCB0aGUg
cmV0dXJuIHZhbHVlIG9mIHRoZSBwcm92aWRlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZnVuY3Rpb24gYGZuYC4KLSAgICovCi0KLSAgZnVuY3Rpb24gY2hhaW4odmFsdWUsIGZuLCBsYWJl
bCkgewotICAgIF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0KCdNdXN0IGNhbGwgY2hhaW4gd2l0aCBh
IGxhYmVsJywgISFsYWJlbCk7Ci0gICAgaWYgKGlzU3RyZWFtKHZhbHVlKSkgewotICAgICAgdmFy
IHN0cmVhbSA9IG5ldyBfZW1iZXJNZXRhbFN0cmVhbXNTdHJlYW0uU3RyZWFtKGZuLCBmdW5jdGlv
biAoKSB7Ci0gICAgICAgIHJldHVybiBsYWJlbCArICcoJyArIGxhYmVsRm9yKHZhbHVlKSArICcp
JzsKLSAgICAgIH0pOwotICAgICAgc3RyZWFtLmFkZERlcGVuZGVuY3kodmFsdWUpOwotICAgICAg
cmV0dXJuIHN0cmVhbTsKLSAgICB9IGVsc2UgewotICAgICAgcmV0dXJuIGZuKCk7Ci0gICAgfQot
ICB9Ci0KLSAgZnVuY3Rpb24gc2V0VmFsdWUob2JqZWN0LCB2YWx1ZSkgewotICAgIGlmIChvYmpl
Y3QgJiYgb2JqZWN0W19lbWJlck1ldGFsU3RyZWFtc1N0cmVhbS5JU19TVFJFQU1dKSB7Ci0gICAg
ICBvYmplY3Quc2V0VmFsdWUodmFsdWUpOwotICAgIH0KLSAgfQotfSk7Ci1lbmlmZWQoJ2VtYmVy
LW1ldGFsL3N5bWJvbCcsIFsnZXhwb3J0cycsICdlbWJlci1tZXRhbC91dGlscyddLCBmdW5jdGlv
biAoZXhwb3J0cywgX2VtYmVyTWV0YWxVdGlscykgewotICAndXNlIHN0cmljdCc7Ci0KLSAgZXhw
b3J0cy5kZWZhdWx0ID0gc3ltYm9sOwotCi0gIGZ1bmN0aW9uIHN5bWJvbChkZWJ1Z05hbWUpIHsK
LSAgICAvLyBUT0RPOiBJbnZlc3RpZ2F0ZSB1c2luZyBwbGF0Zm9ybSBzeW1ib2xzLCBidXQgd2Ug
ZG8gbm90Ci0gICAgLy8gd2FudCB0byByZXF1aXJlIG5vbi1lbnVtZXJhYmlsaXR5IGZvciB0aGlz
IEFQSSwgd2hpY2gKLSAgICAvLyB3b3VsZCBpbnRyb2R1Y2UgYSBsYXJnZSBjb3N0LgotCi0gICAg
cmV0dXJuIF9lbWJlck1ldGFsVXRpbHMuaW50ZXJuKGRlYnVnTmFtZSArICcgW2lkPScgKyBfZW1i
ZXJNZXRhbFV0aWxzLkdVSURfS0VZICsgTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogbmV3IERh
dGUoKSkgKyAnXScpOwotICB9Ci19KTsKLWVuaWZlZCgnZW1iZXItbWV0YWwvdGFncycsIFsnZXhw
b3J0cycsICdlbWJlci1tZXRhbC9tZXRhJywgJ3JlcXVpcmUnXSwgZnVuY3Rpb24gKGV4cG9ydHMs
IF9lbWJlck1ldGFsTWV0YSwgX3JlcXVpcmUyKSB7Ci0gICd1c2Ugc3RyaWN0JzsKLQotICBleHBv
cnRzLnRhZ0ZvciA9IHRhZ0ZvcjsKLQotICB2YXIgaGFzR2xpbW1lciA9IF9yZXF1aXJlMi5oYXMo
J2dsaW1tZXItcmVmZXJlbmNlJyk7Ci0gIHZhciBDT05TVEFOVF9UQUcgPSB1bmRlZmluZWQsCi0g
ICAgICBDVVJSRU5UX1RBRyA9IHVuZGVmaW5lZCwKLSAgICAgIERpcnR5YWJsZVRhZyA9IHVuZGVm
aW5lZCwKLSAgICAgIG1ha2VUYWcgPSB1bmRlZmluZWQ7Ci0KLSAgdmFyIG1hcmtPYmplY3RBc0Rp
cnR5ID0gdW5kZWZpbmVkOwotCi0gIGV4cG9ydHMubWFya09iamVjdEFzRGlydHkgPSBtYXJrT2Jq
ZWN0QXNEaXJ0eTsKLQotICBmdW5jdGlvbiB0YWdGb3Iob2JqZWN0LCBfbWV0YSkgewotICAgIGlm
ICghaGFzR2xpbW1lcikgewotICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY2FsbCB0YWdG
b3Igd2l0aG91dCBHbGltbWVyJyk7Ci0gICAgfQotCi0gICAgaWYgKG9iamVjdCAmJiB0eXBlb2Yg
b2JqZWN0ID09PSAnb2JqZWN0JykgewotICAgICAgdmFyIG1ldGEgPSBfbWV0YSB8fCBfZW1iZXJN
ZXRhbE1ldGEubWV0YShvYmplY3QpOwotICAgICAgcmV0dXJuIG1ldGEud3JpdGFibGVUYWcobWFr
ZVRhZyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJldHVybiBDT05TVEFOVF9UQUc7Ci0gICAgfQot
ICB9Ci0KLSAgaWYgKGhhc0dsaW1tZXIpIHsKLSAgICB2YXIgX3JlcXVpcmUgPSBfcmVxdWlyZTIu
ZGVmYXVsdCgnZ2xpbW1lci1yZWZlcmVuY2UnKTsKLQotICAgIERpcnR5YWJsZVRhZyA9IF9yZXF1
aXJlLkRpcnR5YWJsZVRhZzsKLSAgICBDT05TVEFOVF9UQUcgPSBfcmVxdWlyZS5DT05TVEFOVF9U
QUc7Ci0gICAgQ1VSUkVOVF9UQUcgPSBfcmVxdWlyZS5DVVJSRU5UX1RBRzsKLQotICAgIG1ha2VU
YWcgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICByZXR1cm4gbmV3IERpcnR5YWJsZVRhZygpOwotICAg
IH07Ci0KLSAgICBleHBvcnRzLm1hcmtPYmplY3RBc0RpcnR5ID0gbWFya09iamVjdEFzRGlydHkg
PSBmdW5jdGlvbiAobWV0YSkgewotICAgICAgdmFyIHRhZyA9IG1ldGEgJiYgbWV0YS5yZWFkYWJs
ZVRhZygpIHx8IENVUlJFTlRfVEFHOwotICAgICAgdGFnLmRpcnR5KCk7Ci0gICAgfTsKLSAgfSBl
bHNlIHsKLSAgICBleHBvcnRzLm1hcmtPYmplY3RBc0RpcnR5ID0gbWFya09iamVjdEFzRGlydHkg
PSBmdW5jdGlvbiAoKSB7fTsKLSAgfQotfSk7Ci1lbmlmZWQoJ2VtYmVyLW1ldGFsL3V0aWxzJywg
WydleHBvcnRzJ10sIGZ1bmN0aW9uIChleHBvcnRzKSB7Ci0gICdubyB1c2Ugc3RyaWN0JzsKLSAg
Ly8gUmVtb3ZlICJ1c2Ugc3RyaWN0IjsgZnJvbSB0cmFuc3BpbGVkIG1vZHVsZSB1bnRpbAotICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM4MDM4IGlzIGZpeGVk
Ci0KLSAgLyoqCi0gIEBtb2R1bGUgZW1iZXItbWV0YWwKLSAgKi8KLQotICAvKioKLSAgICBQcmV2
aW91c2x5IHdlIHVzZWQgYEVtYmVyLiQudXVpZGAsIGhvd2V2ZXIgYCQudXVpZGAgaGFzIGJlZW4g
cmVtb3ZlZCBmcm9tCi0gICAgalF1ZXJ5IG1hc3Rlci4gV2UnbGwganVzdCBib290c3RyYXAgb3Vy
IG93biB1dWlkIG5vdy4KLSAgCi0gICAgQHByaXZhdGUKLSAgICBAcmV0dXJuIHtOdW1iZXJ9IHRo
ZSB1dWlkCi0gICovCi0gIGV4cG9ydHMudXVpZCA9IHV1aWQ7Ci0gIGV4cG9ydHMuaW50ZXJuID0g
aW50ZXJuOwotICBleHBvcnRzLmdlbmVyYXRlR3VpZCA9IGdlbmVyYXRlR3VpZDsKLSAgZXhwb3J0
cy5ndWlkRm9yID0gZ3VpZEZvcjsKLSAgZXhwb3J0cy53cmFwID0gd3JhcDsKLSAgZXhwb3J0cy50
cnlJbnZva2UgPSB0cnlJbnZva2U7Ci0gIGV4cG9ydHMubWFrZUFycmF5ID0gbWFrZUFycmF5Owot
ICBleHBvcnRzLmluc3BlY3QgPSBpbnNwZWN0OwotICBleHBvcnRzLmFwcGx5U3RyID0gYXBwbHlT
dHI7Ci0gIGV4cG9ydHMubG9va3VwRGVzY3JpcHRvciA9IGxvb2t1cERlc2NyaXB0b3I7Ci0gIGV4
cG9ydHMudG9TdHJpbmcgPSB0b1N0cmluZzsKLSAgdmFyIF91dWlkID0gMDsKLQotICAvKioKLSAg
ICBHZW5lcmF0ZXMgYSB1bml2ZXJzYWxseSB1bmlxdWUgaWRlbnRpZmllci4gVGhpcyBtZXRob2QK
LSAgICBpcyB1c2VkIGludGVybmFsbHkgYnkgRW1iZXIgZm9yIGFzc2lzdGluZyB3aXRoCi0gICAg
dGhlIGdlbmVyYXRpb24gb2YgR1VJRCdzIGFuZCBvdGhlciB1bmlxdWUgaWRlbnRpZmllcnMuCi0g
IAotICAgIEBwdWJsaWMKLSAgICBAcmV0dXJuIHtOdW1iZXJ9IFtkZXNjcmlwdGlvbl0KLSAgICov
Ci0KLSAgZnVuY3Rpb24gdXVpZCgpIHsKLSAgICByZXR1cm4gKytfdXVpZDsKLSAgfQotCi0gIC8q
KgotICAgIFByZWZpeCB1c2VkIGZvciBndWlkcyB0aHJvdWdoIG91dCBFbWJlci4KLSAgICBAcHJp
dmF0ZQotICAgIEBwcm9wZXJ0eSBHVUlEX1BSRUZJWAotICAgIEBmb3IgRW1iZXIKLSAgICBAdHlw
ZSBTdHJpbmcKLSAgICBAZmluYWwKLSAgKi8KLSAgdmFyIEdVSURfUFJFRklYID0gJ2VtYmVyJzsK
LQotICAvLyBVc2VkIGZvciBndWlkIGdlbmVyYXRpb24uLi4KLSAgdmFyIG51bWJlckNhY2hlID0g
W107Ci0gIHZhciBzdHJpbmdDYWNoZSA9IHt9OwotCi0gIC8qKgotICAgIFN0cm9uZ2x5IGhpbnQg
cnVudGltZXMgdG8gaW50ZXJuIHRoZSBwcm92aWRlZCBzdHJpbmcuCi0gIAotICAgIFdoZW4gZG8g
SSBuZWVkIHRvIHVzZSB0aGlzIGZ1bmN0aW9uPwotICAKLSAgICBGb3IgdGhlIG1vc3QgcGFydCwg
bmV2ZXIuIFByZS1tYXR1cmUgb3B0aW1pemF0aW9uIGlzIGJhZCwgYW5kIG9mdGVuIHRoZQotICAg
IHJ1bnRpbWUgZG9lcyBleGFjdGx5IHdoYXQgeW91IG5lZWQgaXQgdG8sIGFuZCBtb3JlIG9mdGVu
IHRoZSB0cmFkZS1vZmYgaXNuJ3QKLSAgICB3b3J0aCBpdC4KLSAgCi0gICAgV2h5PwotICAKLSAg
ICBSdW50aW1lcyBzdG9yZSBzdHJpbmdzIGluIGF0IGxlYXN0IDIgZGlmZmVyZW50IHJlcHJlc2Vu
dGF0aW9uczoKLSAgICBSb3BlcyBhbmQgU3ltYm9scyAoaW50ZXJuZWQgc3RyaW5ncykuIFRoZSBS
b3BlIHByb3ZpZGVzIGEgbWVtb3J5IGVmZmljaWVudAotICAgIGRhdGEtc3RydWN0dXJlIGZvciBz
dHJpbmdzIGNyZWF0ZWQgZnJvbSBjb25jYXRlbmF0aW9uIG9yIHNvbWUgb3RoZXIgc3RyaW5nCi0g
ICAgbWFuaXB1bGF0aW9uIGxpa2Ugc3BsaXR0aW5nLgotICAKLSAgICBVbmZvcnR1bmF0ZWx5IGNo
ZWNraW5nIGVxdWFsaXR5IG9mIGRpZmZlcmVudCByb3BlcyBjYW4gYmUgcXVpdGUgY29zdGx5IGFz
Ci0gICAgcnVudGltZXMgbXVzdCByZXNvcnQgdG8gY2xldmVyIHN0cmluZyBjb21wYXJpc29uIGFs
Z29yaXRobXMuIFRoZXNlCi0gICAgYWxnb3JpdGhtcyB0eXBpY2FsbHkgY29zdCBpbiBwcm9wb3J0
aW9uIHRvIHRoZSBsZW5ndGggb2YgdGhlIHN0cmluZy4KLSAgICBMdWNraWx5LCB0aGlzIGlzIHdo
ZXJlIHRoZSBTeW1ib2xzIChpbnRlcm5lZCBzdHJpbmdzKSBzaGluZS4gQXMgU3ltYm9scyBhcmUK
LSAgICB1bmlxdWUgYnkgdGhlaXIgc3RyaW5nIGNvbnRlbnQsIGVxdWFsaXR5IGNoZWNrcyBjYW4g
YmUgZG9uZSBieSBwb2ludGVyCi0gICAgY29tcGFyaXNvbi4KLSAgCi0gICAgSG93IGRvIEkga25v
dyBpZiBteSBzdHJpbmcgaXMgYSByb3BlIG9yIHN5bWJvbD8KLSAgCi0gICAgVHlwaWNhbGx5ICh3
YXJuaW5nIGdlbmVyYWwgc3dlZXBpbmcgc3RhdGVtZW50LCBidXQgdHJ1dGh5IGluIHJ1bnRpbWVz
IGF0Ci0gICAgcHJlc2VudCkgc3RhdGljIHN0cmluZ3MgY3JlYXRlZCBhcyBwYXJ0IG9mIHRoZSBK
UyBzb3VyY2UgYXJlIGludGVybmVkLgotICAgIFN0cmluZ3Mgb2Z0ZW4gdXNlZCBmb3IgY29tcGFy
aXNvbnMgY2FuIGJlIGludGVybmVkIGF0IHJ1bnRpbWUgaWYgc29tZQotICAgIGNyaXRlcmlhIGFy
ZSBtZXQuICBPbmUgb2YgdGhlc2UgY3JpdGVyaWEgY2FuIGJlIHRoZSBzaXplIG9mIHRoZSBlbnRp
cmUgcm9wZS4KLSAgICBGb3IgZXhhbXBsZSwgaW4gY2hyb21lIDM4IGEgcm9wZSBsb25nZXIgdGhl
biAxMiBjaGFyYWN0ZXJzIHdpbGwgbm90Ci0gICAgaW50ZXJuLCBub3Igd2lsbCBzZWdtZW50cyBv
ZiB0aGF0IHJvcGUuCi0gIAotICAgIFNvbWUgbnVtYmVyczogaHR0cDovL2pzcGVyZi5jb20vZXZh
bC12cy1rZXlzLzgKLSAgCi0gICAgS25vd24gVHJpY2vihKIKLSAgCi0gICAgQHByaXZhdGUKLSAg
ICBAcmV0dXJuIHtTdHJpbmd9IGludGVybmVkIHZlcnNpb24gb2YgdGhlIHByb3ZpZGVkIHN0cmlu
ZwotICAqLwotCi0gIGZ1bmN0aW9uIGludGVybihzdHIpIHsKLSAgICB2YXIgb2JqID0ge307Ci0g
ICAgb2JqW3N0cl0gPSAxOwotICAgIGZvciAodmFyIGtleSBpbiBvYmopIHsKLSAgICAgIGlmIChr
ZXkgPT09IHN0cikgewotICAgICAgICByZXR1cm4ga2V5OwotICAgICAgfQotICAgIH0KLSAgICBy
ZXR1cm4gc3RyOwotICB9Ci0KLSAgLyoqCi0gICAgQSB1bmlxdWUga2V5IHVzZWQgdG8gYXNzaWdu
IGd1aWRzIGFuZCBvdGhlciBwcml2YXRlIG1ldGFkYXRhIHRvIG9iamVjdHMuCi0gICAgSWYgeW91
IGluc3BlY3QgYW4gb2JqZWN0IGluIHlvdXIgYnJvd3NlciBkZWJ1Z2dlciB5b3Ugd2lsbCBvZnRl
biBzZWUgdGhlc2UuCi0gICAgVGhleSBjYW4gYmUgc2FmZWx5IGlnbm9yZWQuCi0gIAotICAgIE9u
IGJyb3dzZXJzIHRoYXQgc3VwcG9ydCBpdCwgdGhlc2UgcHJvcGVydGllcyBhcmUgYWRkZWQgd2l0
aCBlbnVtZXJhdGlvbgotICAgIGRpc2FibGVkIHNvIHRoZXkgd29uJ3Qgc2hvdyB1cCB3aGVuIHlv
dSBpdGVyYXRlIG92ZXIgeW91ciBwcm9wZXJ0aWVzLgotICAKLSAgICBAcHJpdmF0ZQotICAgIEBw
cm9wZXJ0eSBHVUlEX0tFWQotICAgIEBmb3IgRW1iZXIKLSAgICBAdHlwZSBTdHJpbmcKLSAgICBA
ZmluYWwKLSAgKi8KLSAgdmFyIEdVSURfS0VZID0gaW50ZXJuKCdfX2VtYmVyJyArICtuZXcgRGF0
ZSgpKTsKLQotICB2YXIgR1VJRF9ERVNDID0gewotICAgIHdyaXRhYmxlOiB0cnVlLAotICAgIGNv
bmZpZ3VyYWJsZTogdHJ1ZSwKLSAgICBlbnVtZXJhYmxlOiBmYWxzZSwKLSAgICB2YWx1ZTogbnVs
bAotICB9OwotCi0gIGV4cG9ydHMuR1VJRF9ERVNDID0gR1VJRF9ERVNDOwotICB2YXIgbnVsbERl
c2NyaXB0b3IgPSB7Ci0gICAgY29uZmlndXJhYmxlOiB0cnVlLAotICAgIHdyaXRhYmxlOiB0cnVl
LAotICAgIGVudW1lcmFibGU6IGZhbHNlLAotICAgIHZhbHVlOiBudWxsCi0gIH07Ci0KLSAgdmFy
IEdVSURfS0VZX1BST1BFUlRZID0gewotICAgIG5hbWU6IEdVSURfS0VZLAotICAgIGRlc2NyaXB0
b3I6IG51bGxEZXNjcmlwdG9yCi0gIH07Ci0KLSAgZXhwb3J0cy5HVUlEX0tFWV9QUk9QRVJUWSA9
IEdVSURfS0VZX1BST1BFUlRZOwotICAvKioKLSAgICBHZW5lcmF0ZXMgYSBuZXcgZ3VpZCwgb3B0
aW9uYWxseSBzYXZpbmcgdGhlIGd1aWQgdG8gdGhlIG9iamVjdCB0aGF0IHlvdQotICAgIHBhc3Mg
aW4uIFlvdSB3aWxsIHJhcmVseSBuZWVkIHRvIHVzZSB0aGlzIG1ldGhvZC4gSW5zdGVhZCB5b3Ug
c2hvdWxkCi0gICAgY2FsbCBgRW1iZXIuZ3VpZEZvcihvYmopYCwgd2hpY2ggcmV0dXJuIGFuIGV4
aXN0aW5nIGd1aWQgaWYgYXZhaWxhYmxlLgotICAKLSAgICBAcHJpdmF0ZQotICAgIEBtZXRob2Qg
Z2VuZXJhdGVHdWlkCi0gICAgQGZvciBFbWJlcgotICAgIEBwYXJhbSB7T2JqZWN0fSBbb2JqXSBP
YmplY3QgdGhlIGd1aWQgd2lsbCBiZSB1c2VkIGZvci4gSWYgcGFzc2VkIGluLCB0aGUgZ3VpZCB3
aWxsCi0gICAgICBiZSBzYXZlZCBvbiB0aGUgb2JqZWN0IGFuZCByZXVzZWQgd2hlbmV2ZXIgeW91
IHBhc3MgdGhlIHNhbWUgb2JqZWN0Ci0gICAgICBhZ2Fpbi4KLSAgCi0gICAgICBJZiBubyBvYmpl
Y3QgaXMgcGFzc2VkLCBqdXN0IGdlbmVyYXRlIGEgbmV3IGd1aWQuCi0gICAgQHBhcmFtIHtTdHJp
bmd9IFtwcmVmaXhdIFByZWZpeCB0byBwbGFjZSBpbiBmcm9udCBvZiB0aGUgZ3VpZC4gVXNlZnVs
IHdoZW4geW91IHdhbnQgdG8KLSAgICAgIHNlcGFyYXRlIHRoZSBndWlkIGludG8gc2VwYXJhdGUg
bmFtZXNwYWNlcy4KLSAgICBAcmV0dXJuIHtTdHJpbmd9IHRoZSBndWlkCi0gICovCi0KLSAgZnVu
Y3Rpb24gZ2VuZXJhdGVHdWlkKG9iaiwgcHJlZml4KSB7Ci0gICAgaWYgKCFwcmVmaXgpIHsKLSAg
ICAgIHByZWZpeCA9IEdVSURfUFJFRklYOwotICAgIH0KLQotICAgIHZhciByZXQgPSBwcmVmaXgg
KyB1dWlkKCk7Ci0gICAgaWYgKG9iaikgewotICAgICAgaWYgKG9ialtHVUlEX0tFWV0gPT09IG51
bGwpIHsKLSAgICAgICAgb2JqW0dVSURfS0VZXSA9IHJldDsKLSAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgIEdVSURfREVTQy52YWx1ZSA9IHJldDsKLSAgICAgICAgaWYgKG9iai5fX2RlZmluZU5vbkVu
dW1lcmFibGUpIHsKLSAgICAgICAgICBvYmouX19kZWZpbmVOb25FbnVtZXJhYmxlKEdVSURfS0VZ
X1BST1BFUlRZKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBPYmplY3QuZGVmaW5lUHJv
cGVydHkob2JqLCBHVUlEX0tFWSwgR1VJRF9ERVNDKTsKLSAgICAgICAgfQotICAgICAgfQotICAg
IH0KLSAgICByZXR1cm4gcmV0OwotICB9Ci0KLSAgLyoqCi0gICAgUmV0dXJucyBhIHVuaXF1ZSBp
ZCBmb3IgdGhlIG9iamVjdC4gSWYgdGhlIG9iamVjdCBkb2VzIG5vdCB5ZXQgaGF2ZSBhIGd1aWQs
Ci0gICAgb25lIHdpbGwgYmUgYXNzaWduZWQgdG8gaXQuIFlvdSBjYW4gY2FsbCB0aGlzIG9uIGFu
eSBvYmplY3QsCi0gICAgYEVtYmVyLk9iamVjdGAtYmFzZWQgb3Igbm90LCBidXQgYmUgYXdhcmUg
dGhhdCBpdCB3aWxsIGFkZCBhIGBfZ3VpZGAKLSAgICBwcm9wZXJ0eS4KLSAgCi0gICAgWW91IGNh
biBhbHNvIHVzZSB0aGlzIG1ldGhvZCBvbiBET00gRWxlbWVudCBvYmplY3RzLgotICAKLSAgICBA
cHVibGljCi0gICAgQG1ldGhvZCBndWlkRm9yCi0gICAgQGZvciBFbWJlcgotICAgIEBwYXJhbSB7
T2JqZWN0fSBvYmogYW55IG9iamVjdCwgc3RyaW5nLCBudW1iZXIsIEVsZW1lbnQsIG9yIHByaW1p
dGl2ZQotICAgIEByZXR1cm4ge1N0cmluZ30gdGhlIHVuaXF1ZSBndWlkIGZvciB0aGlzIGluc3Rh
bmNlLgotICAqLwotCi0gIGZ1bmN0aW9uIGd1aWRGb3Iob2JqKSB7Ci0gICAgaWYgKG9iaiAmJiBv
YmpbR1VJRF9LRVldKSB7Ci0gICAgICByZXR1cm4gb2JqW0dVSURfS0VZXTsKLSAgICB9Ci0KLSAg
ICAvLyBzcGVjaWFsIGNhc2VzIHdoZXJlIHdlIGRvbid0IHdhbnQgdG8gYWRkIGEga2V5IHRvIG9i
amVjdAotICAgIGlmIChvYmogPT09IHVuZGVmaW5lZCkgewotICAgICAgcmV0dXJuICcodW5kZWZp
bmVkKSc7Ci0gICAgfQotCi0gICAgaWYgKG9iaiA9PT0gbnVsbCkgewotICAgICAgcmV0dXJuICco
bnVsbCknOwotICAgIH0KLQotICAgIHZhciByZXQ7Ci0gICAgdmFyIHR5cGUgPSB0eXBlb2Ygb2Jq
OwotCi0gICAgLy8gRG9uJ3QgYWxsb3cgcHJvdG90eXBlIGNoYW5nZXMgdG8gU3RyaW5nIGV0Yy4g
dG8gY2hhbmdlIHRoZSBndWlkRm9yCi0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICBjYXNlICdu
dW1iZXInOgotICAgICAgICByZXQgPSBudW1iZXJDYWNoZVtvYmpdOwotCi0gICAgICAgIGlmICgh
cmV0KSB7Ci0gICAgICAgICAgcmV0ID0gbnVtYmVyQ2FjaGVbb2JqXSA9ICdudScgKyBvYmo7Ci0g
ICAgICAgIH0KLQotICAgICAgICByZXR1cm4gcmV0OwotCi0gICAgICBjYXNlICdzdHJpbmcnOgot
ICAgICAgICByZXQgPSBzdHJpbmdDYWNoZVtvYmpdOwotCi0gICAgICAgIGlmICghcmV0KSB7Ci0g
ICAgICAgICAgcmV0ID0gc3RyaW5nQ2FjaGVbb2JqXSA9ICdzdCcgKyB1dWlkKCk7Ci0gICAgICAg
IH0KLQotICAgICAgICByZXR1cm4gcmV0OwotCi0gICAgICBjYXNlICdib29sZWFuJzoKLSAgICAg
ICAgcmV0dXJuIG9iaiA/ICcodHJ1ZSknIDogJyhmYWxzZSknOwotCi0gICAgICBkZWZhdWx0Ogot
ICAgICAgICBpZiAob2JqID09PSBPYmplY3QpIHsKLSAgICAgICAgICByZXR1cm4gJyhPYmplY3Qp
JzsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChvYmogPT09IEFycmF5KSB7Ci0gICAgICAgICAg
cmV0dXJuICcoQXJyYXkpJzsKLSAgICAgICAgfQotCi0gICAgICAgIHJldCA9IEdVSURfUFJFRklY
ICsgdXVpZCgpOwotCi0gICAgICAgIGlmIChvYmpbR1VJRF9LRVldID09PSBudWxsKSB7Ci0gICAg
ICAgICAgb2JqW0dVSURfS0VZXSA9IHJldDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBH
VUlEX0RFU0MudmFsdWUgPSByZXQ7Ci0KLSAgICAgICAgICBpZiAob2JqLl9fZGVmaW5lTm9uRW51
bWVyYWJsZSkgewotICAgICAgICAgICAgb2JqLl9fZGVmaW5lTm9uRW51bWVyYWJsZShHVUlEX0tF
WV9QUk9QRVJUWSk7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIE9iamVjdC5kZWZp
bmVQcm9wZXJ0eShvYmosIEdVSURfS0VZLCBHVUlEX0RFU0MpOwotICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgICByZXR1cm4gcmV0OwotICAgIH0KLSAgfQotCi0gIHZhciBIQVNfU1VQRVJf
UEFUVEVSTiA9IC9cLihfc3VwZXJ8Y2FsbFwodGhpc3xhcHBseVwodGhpcykvOwotICB2YXIgZm5U
b1N0cmluZyA9IEZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZzsKLQotICB2YXIgY2hlY2tIYXNT
dXBlciA9IChmdW5jdGlvbiAoKSB7Ci0gICAgdmFyIHNvdXJjZUF2YWlsYWJsZSA9IGZuVG9TdHJp
bmcuY2FsbChmdW5jdGlvbiAoKSB7Ci0gICAgICByZXR1cm4gdGhpczsKLSAgICB9KS5pbmRleE9m
KCdyZXR1cm4gdGhpcycpID4gLTE7Ci0KLSAgICBpZiAoc291cmNlQXZhaWxhYmxlKSB7Ci0gICAg
ICByZXR1cm4gZnVuY3Rpb24gY2hlY2tIYXNTdXBlcihmdW5jKSB7Ci0gICAgICAgIHJldHVybiBI
QVNfU1VQRVJfUEFUVEVSTi50ZXN0KGZuVG9TdHJpbmcuY2FsbChmdW5jKSk7Ci0gICAgICB9Owot
ICAgIH0KLQotICAgIHJldHVybiBmdW5jdGlvbiBjaGVja0hhc1N1cGVyKCkgewotICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfTsKLSAgfSkoKTsKLQotICBleHBvcnRzLmNoZWNrSGFzU3VwZXIgPSBj
aGVja0hhc1N1cGVyOwotICBmdW5jdGlvbiBST09UKCkge30KLSAgUk9PVC5fX2hhc1N1cGVyID0g
ZmFsc2U7Ci0KLSAgZnVuY3Rpb24gaGFzU3VwZXIoZnVuYykgewotICAgIGlmIChmdW5jLl9faGFz
U3VwZXIgPT09IHVuZGVmaW5lZCkgewotICAgICAgZnVuYy5fX2hhc1N1cGVyID0gY2hlY2tIYXNT
dXBlcihmdW5jKTsKLSAgICB9Ci0gICAgcmV0dXJuIGZ1bmMuX19oYXNTdXBlcjsKLSAgfQotCi0g
IC8qKgotICAgIFdyYXBzIHRoZSBwYXNzZWQgZnVuY3Rpb24gc28gdGhhdCBgdGhpcy5fc3VwZXJg
IHdpbGwgcG9pbnQgdG8gdGhlIHN1cGVyRnVuYwotICAgIHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGlu
dm9rZWQuIFRoaXMgaXMgdGhlIHByaW1pdGl2ZSB3ZSB1c2UgdG8gaW1wbGVtZW50Ci0gICAgY2Fs
bHMgdG8gc3VwZXIuCi0gIAotICAgIEBwcml2YXRlCi0gICAgQG1ldGhvZCB3cmFwCi0gICAgQGZv
ciBFbWJlcgotICAgIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNhbGwK
LSAgICBAcGFyYW0ge0Z1bmN0aW9ufSBzdXBlckZ1bmMgVGhlIHN1cGVyIGZ1bmN0aW9uLgotICAg
IEByZXR1cm4ge0Z1bmN0aW9ufSB3cmFwcGVkIGZ1bmN0aW9uLgotICAqLwotCi0gIGZ1bmN0aW9u
IHdyYXAoZnVuYywgc3VwZXJGdW5jKSB7Ci0gICAgaWYgKCFoYXNTdXBlcihmdW5jKSkgewotICAg
ICAgcmV0dXJuIGZ1bmM7Ci0gICAgfQotICAgIC8vIGVuc3VyZSBhbiB1bndyYXBwZWQgc3VwZXIg
dGhhdCBjYWxscyBfc3VwZXIgaXMgd3JhcHBlZCB3aXRoIGEgdGVybWluYWwgX3N1cGVyCi0gICAg
aWYgKCFzdXBlckZ1bmMud3JhcHBlZEZ1bmN0aW9uICYmIGhhc1N1cGVyKHN1cGVyRnVuYykpIHsK
LSAgICAgIHJldHVybiBfd3JhcChmdW5jLCBfd3JhcChzdXBlckZ1bmMsIFJPT1QpKTsKLSAgICB9
Ci0gICAgcmV0dXJuIF93cmFwKGZ1bmMsIHN1cGVyRnVuYyk7Ci0gIH0KLQotICBmdW5jdGlvbiBf
d3JhcChmdW5jLCBzdXBlckZ1bmMpIHsKLSAgICBmdW5jdGlvbiBzdXBlcldyYXBwZXIoKSB7Ci0g
ICAgICB2YXIgb3JpZyA9IHRoaXMuX3N1cGVyOwotICAgICAgdGhpcy5fc3VwZXIgPSBzdXBlckZ1
bmM7Ci0gICAgICB2YXIgcmV0ID0gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwotICAgICAg
dGhpcy5fc3VwZXIgPSBvcmlnOwotICAgICAgcmV0dXJuIHJldDsKLSAgICB9Ci0KLSAgICBzdXBl
cldyYXBwZXIud3JhcHBlZEZ1bmN0aW9uID0gZnVuYzsKLSAgICBzdXBlcldyYXBwZXIuX19lbWJl
cl9vYnNlcnZlc19fID0gZnVuYy5fX2VtYmVyX29ic2VydmVzX187Ci0gICAgc3VwZXJXcmFwcGVy
Ll9fZW1iZXJfb2JzZXJ2ZXNCZWZvcmVfXyA9IGZ1bmMuX19lbWJlcl9vYnNlcnZlc0JlZm9yZV9f
OwotICAgIHN1cGVyV3JhcHBlci5fX2VtYmVyX2xpc3RlbnNfXyA9IGZ1bmMuX19lbWJlcl9saXN0
ZW5zX187Ci0KLSAgICByZXR1cm4gc3VwZXJXcmFwcGVyOwotICB9Ci0KLSAgLyoqCi0gICAgQ2hl
Y2tzIHRvIHNlZSBpZiB0aGUgYG1ldGhvZE5hbWVgIGV4aXN0cyBvbiB0aGUgYG9iamAuCi0gIAot
ICAgIGBgYGphdmFzY3JpcHQKLSAgICB2YXIgZm9vID0geyBiYXI6IGZ1bmN0aW9uKCkgeyByZXR1
cm4gJ2Jhcic7IH0sIGJhejogbnVsbCB9OwotICAKLSAgICBFbWJlci5jYW5JbnZva2UoZm9vLCAn
YmFyJyk7IC8vIHRydWUKLSAgICBFbWJlci5jYW5JbnZva2UoZm9vLCAnYmF6Jyk7IC8vIGZhbHNl
Ci0gICAgRW1iZXIuY2FuSW52b2tlKGZvbywgJ2JhdCcpOyAvLyBmYWxzZQotICAgIGBgYAotICAK
LSAgICBAbWV0aG9kIGNhbkludm9rZQotICAgIEBmb3IgRW1iZXIKLSAgICBAcGFyYW0ge09iamVj
dH0gb2JqIFRoZSBvYmplY3QgdG8gY2hlY2sgZm9yIHRoZSBtZXRob2QKLSAgICBAcGFyYW0ge1N0
cmluZ30gbWV0aG9kTmFtZSBUaGUgbWV0aG9kIG5hbWUgdG8gY2hlY2sgZm9yCi0gICAgQHJldHVy
biB7Qm9vbGVhbn0KLSAgICBAcHJpdmF0ZQotICAqLwotICBmdW5jdGlvbiBjYW5JbnZva2Uob2Jq
LCBtZXRob2ROYW1lKSB7Ci0gICAgcmV0dXJuICEhKG9iaiAmJiB0eXBlb2Ygb2JqW21ldGhvZE5h
bWVdID09PSAnZnVuY3Rpb24nKTsKLSAgfQotCi0gIC8qKgotICAgIENoZWNrcyB0byBzZWUgaWYg
dGhlIGBtZXRob2ROYW1lYCBleGlzdHMgb24gdGhlIGBvYmpgLAotICAgIGFuZCBpZiBpdCBkb2Vz
LCBpbnZva2VzIGl0IHdpdGggdGhlIGFyZ3VtZW50cyBwYXNzZWQuCi0gIAotICAgIGBgYGphdmFz
Y3JpcHQKLSAgICB2YXIgZCA9IG5ldyBEYXRlKCcwMy8xNS8yMDEzJyk7Ci0gIAotICAgIEVtYmVy
LnRyeUludm9rZShkLCAnZ2V0VGltZScpOyAgICAgICAgICAgICAgLy8gMTM2MzMyMDAwMDAwMAot
ICAgIEVtYmVyLnRyeUludm9rZShkLCAnc2V0RnVsbFllYXInLCBbMjAxNF0pOyAgLy8gMTM5NDg1
NjAwMDAwMAotICAgIEVtYmVyLnRyeUludm9rZShkLCAnbm9TdWNoTWV0aG9kJywgWzIwMTRdKTsg
Ly8gdW5kZWZpbmVkCi0gICAgYGBgCi0gIAotICAgIEBtZXRob2QgdHJ5SW52b2tlCi0gICAgQGZv
ciBFbWJlcgotICAgIEBwYXJhbSB7T2JqZWN0fSBvYmogVGhlIG9iamVjdCB0byBjaGVjayBmb3Ig
dGhlIG1ldGhvZAotICAgIEBwYXJhbSB7U3RyaW5nfSBtZXRob2ROYW1lIFRoZSBtZXRob2QgbmFt
ZSB0byBjaGVjayBmb3IKLSAgICBAcGFyYW0ge0FycmF5fSBbYXJnc10gVGhlIGFyZ3VtZW50cyB0
byBwYXNzIHRvIHRoZSBtZXRob2QKLSAgICBAcmV0dXJuIHsqfSB0aGUgcmV0dXJuIHZhbHVlIG9m
IHRoZSBpbnZva2VkIG1ldGhvZCBvciB1bmRlZmluZWQgaWYgaXQgY2Fubm90IGJlIGludm9rZWQK
LSAgICBAcHVibGljCi0gICovCi0KLSAgZnVuY3Rpb24gdHJ5SW52b2tlKG9iaiwgbWV0aG9kTmFt
ZSwgYXJncykgewotICAgIGlmIChjYW5JbnZva2Uob2JqLCBtZXRob2ROYW1lKSkgewotICAgICAg
cmV0dXJuIGFyZ3MgPyBhcHBseVN0cihvYmosIG1ldGhvZE5hbWUsIGFyZ3MpIDogYXBwbHlTdHIo
b2JqLCBtZXRob2ROYW1lKTsKLSAgICB9Ci0gIH0KLQotICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uCi0gIC8vIFRZUElORyAmIEFSUkFZIE1FU1NBR0lORwotICAv
LwotCi0gIHZhciBvYmplY3RUb1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7Ci0K
LSAgLyoqCi0gICAgRm9yY2VzIHRoZSBwYXNzZWQgb2JqZWN0IHRvIGJlIHBhcnQgb2YgYW4gYXJy
YXkuIElmIHRoZSBvYmplY3QgaXMgYWxyZWFkeQotICAgIGFuIGFycmF5LCBpdCB3aWxsIHJldHVy
biB0aGUgb2JqZWN0LiBPdGhlcndpc2UsIGl0IHdpbGwgYWRkIHRoZSBvYmplY3QgdG8KLSAgICBh
biBhcnJheS4gSWYgb2JqIGlzIGBudWxsYCBvciBgdW5kZWZpbmVkYCwgaXQgd2lsbCByZXR1cm4g
YW4gZW1wdHkgYXJyYXkuCi0gIAotICAgIGBgYGphdmFzY3JpcHQKLSAgICBFbWJlci5tYWtlQXJy
YXkoKTsgICAgICAgICAgICAvLyBbXQotICAgIEVtYmVyLm1ha2VBcnJheShudWxsKTsgICAgICAg
IC8vIFtdCi0gICAgRW1iZXIubWFrZUFycmF5KHVuZGVmaW5lZCk7ICAgLy8gW10KLSAgICBFbWJl
ci5tYWtlQXJyYXkoJ2xpbmRzYXknKTsgICAvLyBbJ2xpbmRzYXknXQotICAgIEVtYmVyLm1ha2VB
cnJheShbMSwgMiwgNDJdKTsgIC8vIFsxLCAyLCA0Ml0KLSAgCi0gICAgdmFyIGNvbnRyb2xsZXIg
PSBFbWJlci5BcnJheVByb3h5LmNyZWF0ZSh7IGNvbnRlbnQ6IFtdIH0pOwotICAKLSAgICBFbWJl
ci5tYWtlQXJyYXkoY29udHJvbGxlcikgPT09IGNvbnRyb2xsZXI7ICAvLyB0cnVlCi0gICAgYGBg
Ci0gIAotICAgIEBtZXRob2QgbWFrZUFycmF5Ci0gICAgQGZvciBFbWJlcgotICAgIEBwYXJhbSB7
T2JqZWN0fSBvYmogdGhlIG9iamVjdAotICAgIEByZXR1cm4ge0FycmF5fQotICAgIEBwcml2YXRl
Ci0gICovCi0KLSAgZnVuY3Rpb24gbWFrZUFycmF5KG9iaikgewotICAgIGlmIChvYmogPT09IG51
bGwgfHwgb2JqID09PSB1bmRlZmluZWQpIHsKLSAgICAgIHJldHVybiBbXTsKLSAgICB9Ci0gICAg
cmV0dXJuIEFycmF5LmlzQXJyYXkob2JqKSA/IG9iaiA6IFtvYmpdOwotICB9Ci0KLSAgLyoqCi0g
ICAgQ29udmVuaWVuY2UgbWV0aG9kIHRvIGluc3BlY3QgYW4gb2JqZWN0LiBUaGlzIG1ldGhvZCB3
aWxsIGF0dGVtcHQgdG8KLSAgICBjb252ZXJ0IHRoZSBvYmplY3QgaW50byBhIHVzZWZ1bCBzdHJp
bmcgZGVzY3JpcHRpb24uCi0gIAotICAgIEl0IGlzIGEgcHJldHR5IHNpbXBsZSBpbXBsZW1lbnRh
dGlvbi4gSWYgeW91IHdhbnQgc29tZXRoaW5nIG1vcmUgcm9idXN0LAotICAgIHVzZSBzb21ldGhp
bmcgbGlrZSBKU0R1bXA6IGh0dHBzOi8vZ2l0aHViLmNvbS9OVi9qc0R1bXAKLSAgCi0gICAgQG1l
dGhvZCBpbnNwZWN0Ci0gICAgQGZvciBFbWJlcgotICAgIEBwYXJhbSB7T2JqZWN0fSBvYmogVGhl
IG9iamVjdCB5b3Ugd2FudCB0byBpbnNwZWN0LgotICAgIEByZXR1cm4ge1N0cmluZ30gQSBkZXNj
cmlwdGlvbiBvZiB0aGUgb2JqZWN0Ci0gICAgQHNpbmNlIDEuNC4wCi0gICAgQHByaXZhdGUKLSAg
Ki8KLQotICBmdW5jdGlvbiBpbnNwZWN0KG9iaikgewotICAgIGlmIChvYmogPT09IG51bGwpIHsK
LSAgICAgIHJldHVybiAnbnVsbCc7Ci0gICAgfQotICAgIGlmIChvYmogPT09IHVuZGVmaW5lZCkg
ewotICAgICAgcmV0dXJuICd1bmRlZmluZWQnOwotICAgIH0KLSAgICBpZiAoQXJyYXkuaXNBcnJh
eShvYmopKSB7Ci0gICAgICByZXR1cm4gJ1snICsgb2JqICsgJ10nOwotICAgIH0KLSAgICAvLyBm
b3Igbm9uIG9iamVjdHMKLSAgICB2YXIgdHlwZSA9IHR5cGVvZiBvYmo7Ci0gICAgaWYgKHR5cGUg
IT09ICdvYmplY3QnICYmIHR5cGUgIT09ICdzeW1ib2wnKSB7Ci0gICAgICByZXR1cm4gJycgKyBv
Ymo7Ci0gICAgfQotICAgIC8vIG92ZXJyaWRkZW4gdG9TdHJpbmcKLSAgICBpZiAodHlwZW9mIG9i
ai50b1N0cmluZyA9PT0gJ2Z1bmN0aW9uJyAmJiBvYmoudG9TdHJpbmcgIT09IG9iamVjdFRvU3Ry
aW5nKSB7Ci0gICAgICByZXR1cm4gb2JqLnRvU3RyaW5nKCk7Ci0gICAgfQotCi0gICAgLy8gT2Jq
ZWN0LnByb3RvdHlwZS50b1N0cmluZyA9PT0ge30udG9TdHJpbmcKLSAgICB2YXIgdjsKLSAgICB2
YXIgcmV0ID0gW107Ci0gICAgZm9yICh2YXIga2V5IGluIG9iaikgewotICAgICAgaWYgKG9iai5o
YXNPd25Qcm9wZXJ0eShrZXkpKSB7Ci0gICAgICAgIHYgPSBvYmpba2V5XTsKLSAgICAgICAgaWYg
KHYgPT09ICd0b1N0cmluZycpIHsKLSAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfSAvLyBp
Z25vcmUgdXNlbGVzcyBpdGVtcwotICAgICAgICBpZiAodHlwZW9mIHYgPT09ICdmdW5jdGlvbicp
IHsKLSAgICAgICAgICB2ID0gJ2Z1bmN0aW9uKCkgeyAuLi4gfSc7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAodiAmJiB0eXBlb2Ygdi50b1N0cmluZyAhPT0gJ2Z1bmN0aW9uJykgewotICAgICAg
ICAgIHJldC5wdXNoKGtleSArICc6ICcgKyBvYmplY3RUb1N0cmluZy5jYWxsKHYpKTsKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICByZXQucHVzaChrZXkgKyAnOiAnICsgdik7Ci0gICAgICAg
IH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuICd7JyArIHJldC5qb2luKCcsICcpICsgJ30n
OwotICB9Ci0KLSAgLyoqCi0gICAgQHBhcmFtIHtPYmplY3R9IHQgdGFyZ2V0Ci0gICAgQHBhcmFt
IHtTdHJpbmd9IG0gbWV0aG9kCi0gICAgQHBhcmFtIHtBcnJheX0gYSBhcmdzCi0gICAgQHByaXZh
dGUKLSAgKi8KLQotICBmdW5jdGlvbiBhcHBseVN0cih0LCBtLCBhKSB7Ci0gICAgdmFyIGwgPSBh
ICYmIGEubGVuZ3RoOwotICAgIGlmICghYSB8fCAhbCkgewotICAgICAgcmV0dXJuIHRbbV0oKTsK
LSAgICB9Ci0gICAgc3dpdGNoIChsKSB7Ci0gICAgICBjYXNlIDE6Ci0gICAgICAgIHJldHVybiB0
W21dKGFbMF0pOwotICAgICAgY2FzZSAyOgotICAgICAgICByZXR1cm4gdFttXShhWzBdLCBhWzFd
KTsKLSAgICAgIGNhc2UgMzoKLSAgICAgICAgcmV0dXJuIHRbbV0oYVswXSwgYVsxXSwgYVsyXSk7
Ci0gICAgICBjYXNlIDQ6Ci0gICAgICAgIHJldHVybiB0W21dKGFbMF0sIGFbMV0sIGFbMl0sIGFb
M10pOwotICAgICAgY2FzZSA1OgotICAgICAgICByZXR1cm4gdFttXShhWzBdLCBhWzFdLCBhWzJd
LCBhWzNdLCBhWzRdKTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiB0W21dLmFwcGx5
KHQsIGEpOwotICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIGxvb2t1cERlc2NyaXB0b3Iob2JqLCBr
ZXlOYW1lKSB7Ci0gICAgdmFyIGN1cnJlbnQgPSBvYmo7Ci0gICAgd2hpbGUgKGN1cnJlbnQpIHsK
LSAgICAgIHZhciBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihj
dXJyZW50LCBrZXlOYW1lKTsKLQotICAgICAgaWYgKGRlc2NyaXB0b3IpIHsKLSAgICAgICAgcmV0
dXJuIGRlc2NyaXB0b3I7Ci0gICAgICB9Ci0KLSAgICAgIGN1cnJlbnQgPSBPYmplY3QuZ2V0UHJv
dG90eXBlT2YoY3VycmVudCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAv
LyBBIGB0b1N0cmluZ2AgdXRpbCBmdW5jdGlvbiB0aGF0IHN1cHBvcnRzIG9iamVjdHMgd2l0aG91
dCBhIGB0b1N0cmluZ2AKLSAgLy8gbWV0aG9kLCBlLmcuIGFuIG9iamVjdCBjcmVhdGVkIHdpdGgg
YE9iamVjdC5jcmVhdGUobnVsbClgLgotCi0gIGZ1bmN0aW9uIHRvU3RyaW5nKG9iaikgewotICAg
IGlmIChvYmogJiYgb2JqLnRvU3RyaW5nKSB7Ci0gICAgICByZXR1cm4gb2JqLnRvU3RyaW5nKCk7
Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJldHVybiBvYmplY3RUb1N0cmluZy5jYWxsKG9iaik7Ci0g
ICAgfQotICB9Ci0KLSAgZXhwb3J0cy5HVUlEX0tFWSA9IEdVSURfS0VZOwotICBleHBvcnRzLm1h
a2VBcnJheSA9IG1ha2VBcnJheTsKLSAgZXhwb3J0cy5jYW5JbnZva2UgPSBjYW5JbnZva2U7Ci19
KTsKLWVuaWZlZCgnZW1iZXItbWV0YWwvd2F0Y2hfa2V5JywgWydleHBvcnRzJywgJ2VtYmVyLW1l
dGFsL2ZlYXR1cmVzJywgJ2VtYmVyLW1ldGFsL21ldGEnLCAnZW1iZXItbWV0YWwvcHJvcGVydGll
cycsICdlbWJlci1tZXRhbC91dGlscyddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0YWxG
ZWF0dXJlcywgX2VtYmVyTWV0YWxNZXRhLCBfZW1iZXJNZXRhbFByb3BlcnRpZXMsIF9lbWJlck1l
dGFsVXRpbHMpIHsKLSAgJ3VzZSBzdHJpY3QnOwotCi0gIGV4cG9ydHMud2F0Y2hLZXkgPSB3YXRj
aEtleTsKLSAgZXhwb3J0cy51bndhdGNoS2V5ID0gdW53YXRjaEtleTsKLQotICB2YXIgaGFuZGxl
TWFuZGF0b3J5U2V0dGVyID0gdW5kZWZpbmVkOwotCi0gIGZ1bmN0aW9uIHdhdGNoS2V5KG9iaiwg
a2V5TmFtZSwgbWV0YSkgewotICAgIC8vIGNhbid0IHdhdGNoIGxlbmd0aCBvbiBBcnJheSAtIGl0
IGlzIHNwZWNpYWwuLi4KLSAgICBpZiAoa2V5TmFtZSA9PT0gJ2xlbmd0aCcgJiYgQXJyYXkuaXNB
cnJheShvYmopKSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgdmFyIG0gPSBtZXRhIHx8
IF9lbWJlck1ldGFsTWV0YS5tZXRhKG9iaik7Ci0KLSAgICAvLyBhY3RpdmF0ZSB3YXRjaGluZyBm
aXJzdCB0aW1lCi0gICAgaWYgKCFtLnBlZWtXYXRjaGluZyhrZXlOYW1lKSkgewotICAgICAgbS53
cml0ZVdhdGNoaW5nKGtleU5hbWUsIDEpOwotCi0gICAgICB2YXIgcG9zc2libGVEZXNjID0gb2Jq
W2tleU5hbWVdOwotICAgICAgdmFyIGRlc2MgPSBwb3NzaWJsZURlc2MgIT09IG51bGwgJiYgdHlw
ZW9mIHBvc3NpYmxlRGVzYyA9PT0gJ29iamVjdCcgJiYgcG9zc2libGVEZXNjLmlzRGVzY3JpcHRv
ciA/IHBvc3NpYmxlRGVzYyA6IHVuZGVmaW5lZDsKLSAgICAgIGlmIChkZXNjICYmIGRlc2Mud2ls
bFdhdGNoKSB7Ci0gICAgICAgIGRlc2Mud2lsbFdhdGNoKG9iaiwga2V5TmFtZSk7Ci0gICAgICB9
Ci0KLSAgICAgIGlmICgnZnVuY3Rpb24nID09PSB0eXBlb2Ygb2JqLndpbGxXYXRjaFByb3BlcnR5
KSB7Ci0gICAgICAgIG9iai53aWxsV2F0Y2hQcm9wZXJ0eShrZXlOYW1lKTsKLSAgICAgIH0KLQot
ICAgICAgLy8gTk9URTogdGhpcyBpcyBkcm9wcGVkIGZvciBwcm9kICsgbWluaWZpZWQgYnVpbGRz
Ci0gICAgICBoYW5kbGVNYW5kYXRvcnlTZXR0ZXIobSwgb2JqLCBrZXlOYW1lKTsKLSAgICB9IGVs
c2UgewotICAgICAgbS53cml0ZVdhdGNoaW5nKGtleU5hbWUsIChtLnBlZWtXYXRjaGluZyhrZXlO
YW1lKSB8fCAwKSArIDEpOwotICAgIH0KLSAgfQotCi0gIC8vIEZ1dHVyZSB0cmF2ZWxlciwgYWx0
aG91Z2ggdGhpcyBjb2RlIGxvb2tzIHNjYXJ5LiBJdCBtZXJlbHkgZXhpc3RzIGluCi0gIC8vIGRl
dmVsb3BtZW50IHRvIGFpZCBpbiBkZXZlbG9wbWVudCBhc2VydGlvbnMuIFByb2R1Y3Rpb24gYnVp
bGRzIG9mCi0gIC8vIGVtYmVyIHN0cmlwIHRoaXMgZW50aXJlIGJsb2NrIG91dAotICBoYW5kbGVN
YW5kYXRvcnlTZXR0ZXIgPSBmdW5jdGlvbiBoYW5kbGVNYW5kYXRvcnlTZXR0ZXIobSwgb2JqLCBr
ZXlOYW1lKSB7Ci0gICAgdmFyIGRlc2NyaXB0b3IgPSBfZW1iZXJNZXRhbFV0aWxzLmxvb2t1cERl
c2NyaXB0b3Iob2JqLCBrZXlOYW1lKTsKLSAgICB2YXIgY29uZmlndXJhYmxlID0gZGVzY3JpcHRv
ciA/IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlIDogdHJ1ZTsKLSAgICB2YXIgaXNXcml0YWJsZSA9
IGRlc2NyaXB0b3IgPyBkZXNjcmlwdG9yLndyaXRhYmxlIDogdHJ1ZTsKLSAgICB2YXIgaGFzVmFs
dWUgPSBkZXNjcmlwdG9yID8gJ3ZhbHVlJyBpbiBkZXNjcmlwdG9yIDogdHJ1ZTsKLSAgICB2YXIg
cG9zc2libGVEZXNjID0gZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLnZhbHVlOwotICAgIHZhciBp
c0Rlc2NyaXB0b3IgPSBwb3NzaWJsZURlc2MgIT09IG51bGwgJiYgdHlwZW9mIHBvc3NpYmxlRGVz
YyA9PT0gJ29iamVjdCcgJiYgcG9zc2libGVEZXNjLmlzRGVzY3JpcHRvcjsKLQotICAgIGlmIChp
c0Rlc2NyaXB0b3IpIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyB0aGlzIHggaW4g
WSBkZW9wdHMsIHNvIGtlZXBpbmcgaXQgaW4gdGhpcyBmdW5jdGlvbiBpcyBiZXR0ZXI7Ci0gICAg
aWYgKGNvbmZpZ3VyYWJsZSAmJiBpc1dyaXRhYmxlICYmIGhhc1ZhbHVlICYmIGtleU5hbWUgaW4g
b2JqKSB7Ci0gICAgICB2YXIgZGVzYyA9IHsKLSAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAot
ICAgICAgICBlbnVtZXJhYmxlOiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxl
LmNhbGwob2JqLCBrZXlOYW1lKSwKLSAgICAgICAgc2V0OiBfZW1iZXJNZXRhbFByb3BlcnRpZXMu
TUFOREFUT1JZX1NFVFRFUl9GVU5DVElPTihrZXlOYW1lKSwKLSAgICAgICAgZ2V0OiB1bmRlZmlu
ZWQKLSAgICAgIH07Ci0KLSAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5
LmNhbGwob2JqLCBrZXlOYW1lKSkgewotICAgICAgICBtLndyaXRlVmFsdWVzKGtleU5hbWUsIG9i
altrZXlOYW1lXSk7Ci0gICAgICAgIGRlc2MuZ2V0ID0gX2VtYmVyTWV0YWxQcm9wZXJ0aWVzLkRF
RkFVTFRfR0VUVEVSX0ZVTkNUSU9OKGtleU5hbWUpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ZGVzYy5nZXQgPSBfZW1iZXJNZXRhbFByb3BlcnRpZXMuSU5IRVJJVElOR19HRVRURVJfRlVOQ1RJ
T04oa2V5TmFtZSk7Ci0gICAgICB9Ci0KLSAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmos
IGtleU5hbWUsIGRlc2MpOwotICAgIH0KLSAgfTsKLQotICBmdW5jdGlvbiB1bndhdGNoS2V5KG9i
aiwga2V5TmFtZSwgbWV0YSkgewotICAgIHZhciBtID0gbWV0YSB8fCBfZW1iZXJNZXRhbE1ldGEu
bWV0YShvYmopOwotICAgIHZhciBjb3VudCA9IG0ucGVla1dhdGNoaW5nKGtleU5hbWUpOwotICAg
IGlmIChjb3VudCA9PT0gMSkgewotICAgICAgbS53cml0ZVdhdGNoaW5nKGtleU5hbWUsIDApOwot
Ci0gICAgICB2YXIgcG9zc2libGVEZXNjID0gb2JqW2tleU5hbWVdOwotICAgICAgdmFyIGRlc2Mg
PSBwb3NzaWJsZURlc2MgIT09IG51bGwgJiYgdHlwZW9mIHBvc3NpYmxlRGVzYyA9PT0gJ29iamVj
dCcgJiYgcG9zc2libGVEZXNjLmlzRGVzY3JpcHRvciA/IHBvc3NpYmxlRGVzYyA6IHVuZGVmaW5l
ZDsKLQotICAgICAgaWYgKGRlc2MgJiYgZGVzYy5kaWRVbndhdGNoKSB7Ci0gICAgICAgIGRlc2Mu
ZGlkVW53YXRjaChvYmosIGtleU5hbWUpOwotICAgICAgfQotCi0gICAgICBpZiAoJ2Z1bmN0aW9u
JyA9PT0gdHlwZW9mIG9iai5kaWRVbndhdGNoUHJvcGVydHkpIHsKLSAgICAgICAgb2JqLmRpZFVu
d2F0Y2hQcm9wZXJ0eShrZXlOYW1lKTsKLSAgICAgIH0KLQotICAgICAgLy8gSXQgaXMgdHJ1ZSwg
dGhlIGZvbGxvd2luZyBjb2RlIGxvb2tzIHF1aXRlIFdBVC4gQnV0IGhhdmUgbm8gZmVhciwgSXQK
LSAgICAgIC8vIGV4aXN0cyBwdXJlbHkgdG8gaW1wcm92ZSBkZXZlbG9wbWVudCBlcmdvbm9taWNz
IGFuZCBpcyByZW1vdmVkIGZyb20KLSAgICAgIC8vIGVtYmVyLm1pbi5qcyBhbmQgZW1iZXIucHJv
ZC5qcyBidWlsZHMuCi0gICAgICAvLwotICAgICAgLy8gU29tZSBmdXJ0aGVyIGNvbnRleHQ6IE9u
Y2UgYSBwcm9wZXJ0eSBpcyB3YXRjaGVkIGJ5IGVtYmVyLCBieXBhc3NpbmcgYHNldGAKLSAgICAg
IC8vIGZvciBtdXRhdGlvbiwgd2lsbCBieXBhc3Mgb2JzZXJ2YXRpb24uIFRoaXMgY29kZSBleGlz
dHMgdG8gYXNzZXJ0IHdoZW4KLSAgICAgIC8vIHRoYXQgb2NjdXJzLCBhbmQgYXR0ZW1wdCB0byBw
cm92aWRlIG1vcmUgaGVscGZ1bCBmZWVkYmFjay4gVGhlIGFsdGVybmF0aXZlCi0gICAgICAvLyBp
cyB0cmlja3kgdG8gZGVidWcgcGFydGlhbGx5IG9ic2VydmFibGUgcHJvcGVydGllcy4KLSAgICAg
IGlmICghZGVzYyAmJiBrZXlOYW1lIGluIG9iaikgewotICAgICAgICB2YXIgbWF5YmVNYW5kYXRv
cnlEZXNjcmlwdG9yID0gX2VtYmVyTWV0YWxVdGlscy5sb29rdXBEZXNjcmlwdG9yKG9iaiwga2V5
TmFtZSk7Ci0KLSAgICAgICAgaWYgKG1heWJlTWFuZGF0b3J5RGVzY3JpcHRvci5zZXQgJiYgbWF5
YmVNYW5kYXRvcnlEZXNjcmlwdG9yLnNldC5pc01hbmRhdG9yeVNldHRlcikgewotICAgICAgICAg
IGlmIChtYXliZU1hbmRhdG9yeURlc2NyaXB0b3IuZ2V0ICYmIG1heWJlTWFuZGF0b3J5RGVzY3Jp
cHRvci5nZXQuaXNJbmhlcml0aW5nR2V0dGVyKSB7Ci0gICAgICAgICAgICBkZWxldGUgb2JqW2tl
eU5hbWVdOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJv
cGVydHkob2JqLCBrZXlOYW1lLCB7Ci0gICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwK
LSAgICAgICAgICAgICAgZW51bWVyYWJsZTogT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51
bWVyYWJsZS5jYWxsKG9iaiwga2V5TmFtZSksCi0gICAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVl
LAotICAgICAgICAgICAgICB2YWx1ZTogbS5wZWVrVmFsdWVzKGtleU5hbWUpCi0gICAgICAgICAg
ICB9KTsKLSAgICAgICAgICAgIG0uZGVsZXRlRnJvbVZhbHVlcyhrZXlOYW1lKTsKLSAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGNvdW50ID4gMSkgewotICAg
ICAgbS53cml0ZVdhdGNoaW5nKGtleU5hbWUsIGNvdW50IC0gMSk7Ci0gICAgfQotICB9Ci19KTsK
LWVuaWZlZCgnZW1iZXItbWV0YWwvd2F0Y2hfcGF0aCcsIFsnZXhwb3J0cycsICdlbWJlci1tZXRh
bC9tZXRhJywgJ2VtYmVyLW1ldGFsL2NoYWlucyddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVy
TWV0YWxNZXRhLCBfZW1iZXJNZXRhbENoYWlucykgewotICAndXNlIHN0cmljdCc7Ci0KLSAgZXhw
b3J0cy53YXRjaFBhdGggPSB3YXRjaFBhdGg7Ci0gIGV4cG9ydHMudW53YXRjaFBhdGggPSB1bndh
dGNoUGF0aDsKLQotICAvLyBnZXQgdGhlIGNoYWlucyBmb3IgdGhlIGN1cnJlbnQgb2JqZWN0LiBJ
ZiB0aGUgY3VycmVudCBvYmplY3QgaGFzCi0gIC8vIGNoYWlucyBpbmhlcml0ZWQgZnJvbSB0aGUg
cHJvdG8gdGhleSB3aWxsIGJlIGNsb25lZCBhbmQgcmVjb25maWd1cmVkIGZvcgotICAvLyB0aGUg
Y3VycmVudCBvYmplY3QuCi0gIGZ1bmN0aW9uIGNoYWluc0ZvcihvYmosIG1ldGEpIHsKLSAgICBy
ZXR1cm4gKG1ldGEgfHwgX2VtYmVyTWV0YWxNZXRhLm1ldGEob2JqKSkud3JpdGFibGVDaGFpbnMo
bWFrZUNoYWluTm9kZSk7Ci0gIH0KLQotICBmdW5jdGlvbiBtYWtlQ2hhaW5Ob2RlKG9iaikgewot
ICAgIHJldHVybiBuZXcgX2VtYmVyTWV0YWxDaGFpbnMuQ2hhaW5Ob2RlKG51bGwsIG51bGwsIG9i
aik7Ci0gIH0KLQotICBmdW5jdGlvbiB3YXRjaFBhdGgob2JqLCBrZXlQYXRoLCBtZXRhKSB7Ci0g
ICAgLy8gY2FuJ3Qgd2F0Y2ggbGVuZ3RoIG9uIEFycmF5IC0gaXQgaXMgc3BlY2lhbC4uLgotICAg
IGlmIChrZXlQYXRoID09PSAnbGVuZ3RoJyAmJiBBcnJheS5pc0FycmF5KG9iaikpIHsKLSAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICB2YXIgbSA9IG1ldGEgfHwgX2VtYmVyTWV0YWxNZXRhLm1l
dGEob2JqKTsKLSAgICB2YXIgY291bnRlciA9IG0ucGVla1dhdGNoaW5nKGtleVBhdGgpIHx8IDA7
Ci0gICAgaWYgKCFjb3VudGVyKSB7Ci0gICAgICAvLyBhY3RpdmF0ZSB3YXRjaGluZyBmaXJzdCB0
aW1lCi0gICAgICBtLndyaXRlV2F0Y2hpbmcoa2V5UGF0aCwgMSk7Ci0gICAgICBjaGFpbnNGb3Io
b2JqLCBtKS5hZGQoa2V5UGF0aCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIG0ud3JpdGVXYXRjaGlu
ZyhrZXlQYXRoLCBjb3VudGVyICsgMSk7Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gdW53YXRj
aFBhdGgob2JqLCBrZXlQYXRoLCBtZXRhKSB7Ci0gICAgdmFyIG0gPSBtZXRhIHx8IF9lbWJlck1l
dGFsTWV0YS5tZXRhKG9iaik7Ci0gICAgdmFyIGNvdW50ZXIgPSBtLnBlZWtXYXRjaGluZyhrZXlQ
YXRoKSB8fCAwOwotCi0gICAgaWYgKGNvdW50ZXIgPT09IDEpIHsKLSAgICAgIG0ud3JpdGVXYXRj
aGluZyhrZXlQYXRoLCAwKTsKLSAgICAgIGNoYWluc0ZvcihvYmosIG0pLnJlbW92ZShrZXlQYXRo
KTsKLSAgICB9IGVsc2UgaWYgKGNvdW50ZXIgPiAxKSB7Ci0gICAgICBtLndyaXRlV2F0Y2hpbmco
a2V5UGF0aCwgY291bnRlciAtIDEpOwotICAgIH0KLSAgfQotfSk7Ci1lbmlmZWQoJ2VtYmVyLW1l
dGFsL3dhdGNoaW5nJywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFsL2NoYWlucycsICdlbWJlci1t
ZXRhbC93YXRjaF9rZXknLCAnZW1iZXItbWV0YWwvd2F0Y2hfcGF0aCcsICdlbWJlci1tZXRhbC9w
YXRoX2NhY2hlJywgJ2VtYmVyLW1ldGFsL21ldGEnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJl
ck1ldGFsQ2hhaW5zLCBfZW1iZXJNZXRhbFdhdGNoX2tleSwgX2VtYmVyTWV0YWxXYXRjaF9wYXRo
LCBfZW1iZXJNZXRhbFBhdGhfY2FjaGUsIF9lbWJlck1ldGFsTWV0YSkgewotICAvKioKLSAgQG1v
ZHVsZSBlbWJlci1tZXRhbAotICAqLwotCi0gICd1c2Ugc3RyaWN0JzsKLQotICBleHBvcnRzLmlz
V2F0Y2hpbmcgPSBpc1dhdGNoaW5nOwotICBleHBvcnRzLndhdGNoZXJDb3VudCA9IHdhdGNoZXJD
b3VudDsKLSAgZXhwb3J0cy51bndhdGNoID0gdW53YXRjaDsKLSAgZXhwb3J0cy5kZXN0cm95ID0g
ZGVzdHJveTsKLQotICAvKioKLSAgICBTdGFydHMgd2F0Y2hpbmcgYSBwcm9wZXJ0eSBvbiBhbiBv
YmplY3QuIFdoZW5ldmVyIHRoZSBwcm9wZXJ0eSBjaGFuZ2VzLAotICAgIGludm9rZXMgYEVtYmVy
LnByb3BlcnR5V2lsbENoYW5nZWAgYW5kIGBFbWJlci5wcm9wZXJ0eURpZENoYW5nZWAuIFRoaXMg
aXMgdGhlCi0gICAgcHJpbWl0aXZlIHVzZWQgYnkgb2JzZXJ2ZXJzIGFuZCBkZXBlbmRlbnQga2V5
czsgdXN1YWxseSB5b3Ugd2lsbCBuZXZlciBjYWxsCi0gICAgdGhpcyBtZXRob2QgZGlyZWN0bHkg
YnV0IGluc3RlYWQgdXNlIGhpZ2hlciBsZXZlbCBtZXRob2RzIGxpa2UKLSAgICBgRW1iZXIuYWRk
T2JzZXJ2ZXIoKWAKLSAgCi0gICAgQHByaXZhdGUKLSAgICBAbWV0aG9kIHdhdGNoCi0gICAgQGZv
ciBFbWJlcgotICAgIEBwYXJhbSBvYmoKLSAgICBAcGFyYW0ge1N0cmluZ30gX2tleVBhdGgKLSAg
Ki8KLSAgZnVuY3Rpb24gd2F0Y2gob2JqLCBfa2V5UGF0aCwgbSkgewotICAgIC8vIGNhbid0IHdh
dGNoIGxlbmd0aCBvbiBBcnJheSAtIGl0IGlzIHNwZWNpYWwuLi4KLSAgICBpZiAoX2tleVBhdGgg
PT09ICdsZW5ndGgnICYmIEFycmF5LmlzQXJyYXkob2JqKSkgewotICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIGlmICghX2VtYmVyTWV0YWxQYXRoX2NhY2hlLmlzUGF0aChfa2V5UGF0aCkpIHsK
LSAgICAgIF9lbWJlck1ldGFsV2F0Y2hfa2V5LndhdGNoS2V5KG9iaiwgX2tleVBhdGgsIG0pOwot
ICAgIH0gZWxzZSB7Ci0gICAgICBfZW1iZXJNZXRhbFdhdGNoX3BhdGgud2F0Y2hQYXRoKG9iaiwg
X2tleVBhdGgsIG0pOwotICAgIH0KLSAgfQotCi0gIGV4cG9ydHMud2F0Y2ggPSB3YXRjaDsKLQot
ICBmdW5jdGlvbiBpc1dhdGNoaW5nKG9iaiwga2V5KSB7Ci0gICAgdmFyIG1ldGEgPSBfZW1iZXJN
ZXRhbE1ldGEucGVla01ldGEob2JqKTsKLSAgICByZXR1cm4gKG1ldGEgJiYgbWV0YS5wZWVrV2F0
Y2hpbmcoa2V5KSkgPiAwOwotICB9Ci0KLSAgZnVuY3Rpb24gd2F0Y2hlckNvdW50KG9iaiwga2V5
KSB7Ci0gICAgdmFyIG1ldGEgPSBfZW1iZXJNZXRhbE1ldGEucGVla01ldGEob2JqKTsKLSAgICBy
ZXR1cm4gbWV0YSAmJiBtZXRhLnBlZWtXYXRjaGluZyhrZXkpIHx8IDA7Ci0gIH0KLQotICBmdW5j
dGlvbiB1bndhdGNoKG9iaiwgX2tleVBhdGgsIG0pIHsKLSAgICAvLyBjYW4ndCB3YXRjaCBsZW5n
dGggb24gQXJyYXkgLSBpdCBpcyBzcGVjaWFsLi4uCi0gICAgaWYgKF9rZXlQYXRoID09PSAnbGVu
Z3RoJyAmJiBBcnJheS5pc0FycmF5KG9iaikpIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBpZiAoIV9lbWJlck1ldGFsUGF0aF9jYWNoZS5pc1BhdGgoX2tleVBhdGgpKSB7Ci0gICAgICBf
ZW1iZXJNZXRhbFdhdGNoX2tleS51bndhdGNoS2V5KG9iaiwgX2tleVBhdGgsIG0pOwotICAgIH0g
ZWxzZSB7Ci0gICAgICBfZW1iZXJNZXRhbFdhdGNoX3BhdGgudW53YXRjaFBhdGgob2JqLCBfa2V5
UGF0aCwgbSk7Ci0gICAgfQotICB9Ci0KLSAgdmFyIE5PREVfU1RBQ0sgPSBbXTsKLQotICAvKioK
LSAgICBUZWFycyBkb3duIHRoZSBtZXRhIG9uIGFuIG9iamVjdCBzbyB0aGF0IGl0IGNhbiBiZSBn
YXJiYWdlIGNvbGxlY3RlZC4KLSAgICBNdWx0aXBsZSBjYWxscyB3aWxsIGhhdmUgbm8gZWZmZWN0
LgotICAKLSAgICBAbWV0aG9kIGRlc3Ryb3kKLSAgICBAZm9yIEVtYmVyCi0gICAgQHBhcmFtIHtP
YmplY3R9IG9iaiAgdGhlIG9iamVjdCB0byBkZXN0cm95Ci0gICAgQHJldHVybiB7dm9pZH0KLSAg
ICBAcHJpdmF0ZQotICAqLwotCi0gIGZ1bmN0aW9uIGRlc3Ryb3kob2JqKSB7Ci0gICAgdmFyIG1l
dGEgPSBfZW1iZXJNZXRhbE1ldGEucGVla01ldGEob2JqKTsKLSAgICB2YXIgbm9kZSwgbm9kZXMs
IGtleSwgbm9kZU9iamVjdDsKLQotICAgIGlmIChtZXRhKSB7Ci0gICAgICBfZW1iZXJNZXRhbE1l
dGEuZGVsZXRlTWV0YShvYmopOwotICAgICAgLy8gcmVtb3ZlIGNoYWluV2F0Y2hlcnMgdG8gcmVt
b3ZlIGNpcmN1bGFyIHJlZmVyZW5jZXMgdGhhdCB3b3VsZCBwcmV2ZW50IEdDCi0gICAgICBub2Rl
ID0gbWV0YS5yZWFkYWJsZUNoYWlucygpOwotICAgICAgaWYgKG5vZGUpIHsKLSAgICAgICAgTk9E
RV9TVEFDSy5wdXNoKG5vZGUpOwotICAgICAgICAvLyBwcm9jZXNzIHRyZWUKLSAgICAgICAgd2hp
bGUgKE5PREVfU1RBQ0subGVuZ3RoID4gMCkgewotICAgICAgICAgIG5vZGUgPSBOT0RFX1NUQUNL
LnBvcCgpOwotICAgICAgICAgIC8vIHB1c2ggY2hpbGRyZW4KLSAgICAgICAgICBub2RlcyA9IG5v
ZGUuX2NoYWluczsKLSAgICAgICAgICBpZiAobm9kZXMpIHsKLSAgICAgICAgICAgIGZvciAoa2V5
IGluIG5vZGVzKSB7Ci0gICAgICAgICAgICAgIGlmIChub2Rlc1trZXldICE9PSB1bmRlZmluZWQp
IHsKLSAgICAgICAgICAgICAgICBOT0RFX1NUQUNLLnB1c2gobm9kZXNba2V5XSk7Ci0gICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgLy8gcmVtb3Zl
IGNoYWluV2F0Y2hlciBpbiBub2RlIG9iamVjdAotICAgICAgICAgIGlmIChub2RlLl93YXRjaGlu
ZykgewotICAgICAgICAgICAgbm9kZU9iamVjdCA9IG5vZGUuX29iamVjdDsKLSAgICAgICAgICAg
IGlmIChub2RlT2JqZWN0KSB7Ci0gICAgICAgICAgICAgIF9lbWJlck1ldGFsQ2hhaW5zLnJlbW92
ZUNoYWluV2F0Y2hlcihub2RlT2JqZWN0LCBub2RlLl9rZXksIG5vZGUpOwotICAgICAgICAgICAg
fQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotfSk7Ci1lbmlm
ZWQoJ2VtYmVyLW1ldGFsL3dlYWtfbWFwJywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFsL2RlYnVn
JywgJ2VtYmVyLW1ldGFsL3V0aWxzJywgJ2VtYmVyLW1ldGFsL21ldGEnXSwgZnVuY3Rpb24gKGV4
cG9ydHMsIF9lbWJlck1ldGFsRGVidWcsIF9lbWJlck1ldGFsVXRpbHMsIF9lbWJlck1ldGFsTWV0
YSkgewotICAndXNlIHN0cmljdCc7Ci0KLSAgZXhwb3J0cy5kZWZhdWx0ID0gV2Vha01hcDsKLQot
ICB2YXIgaWQgPSAwOwotICBmdW5jdGlvbiBVTkRFRklORUQoKSB7fQotCi0gIC8qCi0gICAqIEBw
cml2YXRlCi0gICAqIEBjbGFzcyBFbWJlci5XZWFrTWFwCi0gICAqCi0gICAqIEEgcGFydGlhbCBw
b2x5ZmlsbCBmb3IgW1dlYWtNYXBdKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9l
Y21hLTI2Mi82LjAvI3NlYy13ZWFrbWFwLW9iamVjdHMpLgotICAgKgotICAgKiBUaGVyZSBpcyBh
IHNtYWxsIGJ1dCBpbXBvcnRhbnQgY2F2ZWF0LiBUaGlzIGltcGxlbWVudGF0aW9uIGFzc3VtZXMg
dGhhdCB0aGUKLSAgICogd2VhayBtYXAgd2lsbCBsaXZlIGxvbmdlciAoaW4gdGhlIHNlbnNlIG9m
IGdhcmJhZ2UgY29sbGVjdGlvbikgdGhhbiBhbGwgb2YgaXRzCi0gICAqIGtleXMsIG90aGVyd2lz
ZSBpdCBpcyBwb3NzaWJsZSB0byBsZWFrIHRoZSB2YWx1ZXMgc3RvcmVkIGluIHRoZSB3ZWFrIG1h
cC4gSW4KLSAgICogcHJhY3RpY2UsIG1vc3QgdXNlIGNhc2VzIHNhdGlzZnkgdGhpcyBsaW1pdGF0
aW9uIHdoaWNoIGlzIHdoeSBpdCBpcyBpbmNsdWRlZAotICAgKiBpbiBlbWJlci1tZXRhbC4KLSAg
ICovCi0KLSAgZnVuY3Rpb24gV2Vha01hcCgpIHsKLSAgICBfZW1iZXJNZXRhbERlYnVnLmFzc2Vy
dCgnSW52b2tpbmcgdGhlIFdlYWtNYXAgY29uc3RydWN0b3Igd2l0aCBhcmd1bWVudHMgaXMgbm90
IHN1cHBvcnRlZCBhdCB0aGlzIHRpbWUnLCBhcmd1bWVudHMubGVuZ3RoID09PSAwKTsKLQotICAg
IHRoaXMuX2lkID0gX2VtYmVyTWV0YWxVdGlscy5HVUlEX0tFWSArIGlkKys7Ci0gIH0KLQotICAv
KgotICAgKiBAbWV0aG9kIGdldAotICAgKiBAcGFyYW0ga2V5IHtPYmplY3QgfCBGdW5jdGlvbn0K
LSAgICogQHJldHVybiB7QW55fSBzdG9yZWQgdmFsdWUKLSAgICovCi0gIFdlYWtNYXAucHJvdG90
eXBlLmdldCA9IGZ1bmN0aW9uIChvYmopIHsKLSAgICB2YXIgbWV0YSA9IF9lbWJlck1ldGFsTWV0
YS5wZWVrTWV0YShvYmopOwotICAgIGlmIChtZXRhKSB7Ci0gICAgICB2YXIgbWFwID0gbWV0YS5y
ZWFkYWJsZVdlYWsoKTsKLSAgICAgIGlmIChtYXApIHsKLSAgICAgICAgaWYgKG1hcFt0aGlzLl9p
ZF0gPT09IFVOREVGSU5FRCkgewotICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7Ci0gICAgICAg
IH0KLQotICAgICAgICByZXR1cm4gbWFwW3RoaXMuX2lkXTsKLSAgICAgIH0KLSAgICB9Ci0gIH07
Ci0KLSAgLyoKLSAgICogQG1ldGhvZCBzZXQKLSAgICogQHBhcmFtIGtleSB7T2JqZWN0IHwgRnVu
Y3Rpb259Ci0gICAqIEBwYXJhbSB2YWx1ZSB7QW55fQotICAgKiBAcmV0dXJuIHtXZWFrTWFwfSB0
aGUgd2VhayBtYXAKLSAgICovCi0gIFdlYWtNYXAucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChv
YmosIHZhbHVlKSB7Ci0gICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ1VuY2F1Z2h0IFR5cGVF
cnJvcjogSW52YWxpZCB2YWx1ZSB1c2VkIGFzIHdlYWsgbWFwIGtleScsIG9iaiAmJiAodHlwZW9m
IG9iaiA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIG9iaiA9PT0gJ2Z1bmN0aW9uJykpOwotCi0gICAg
aWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHsKLSAgICAgIHZhbHVlID0gVU5ERUZJTkVEOwotICAg
IH0KLQotICAgIF9lbWJlck1ldGFsTWV0YS5tZXRhKG9iaikud3JpdGFibGVXZWFrKClbdGhpcy5f
aWRdID0gdmFsdWU7Ci0KLSAgICByZXR1cm4gdGhpczsKLSAgfTsKLQotICAvKgotICAgKiBAbWV0
aG9kIGhhcwotICAgKiBAcGFyYW0ga2V5IHtPYmplY3QgfCBGdW5jdGlvbn0KLSAgICogQHJldHVy
biB7Ym9vbGVhbn0gaWYgdGhlIGtleSBleGlzdHMKLSAgICovCi0gIFdlYWtNYXAucHJvdG90eXBl
LmhhcyA9IGZ1bmN0aW9uIChvYmopIHsKLSAgICB2YXIgbWV0YSA9IF9lbWJlck1ldGFsTWV0YS5w
ZWVrTWV0YShvYmopOwotICAgIGlmIChtZXRhKSB7Ci0gICAgICB2YXIgbWFwID0gbWV0YS5yZWFk
YWJsZVdlYWsoKTsKLSAgICAgIGlmIChtYXApIHsKLSAgICAgICAgcmV0dXJuIG1hcFt0aGlzLl9p
ZF0gIT09IHVuZGVmaW5lZDsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci0g
IH07Ci0KLSAgLyoKLSAgICogQG1ldGhvZCBkZWxldGUKLSAgICogQHBhcmFtIGtleSB7T2JqZWN0
IHwgRnVuY3Rpb259Ci0gICAqIEByZXR1cm4ge2Jvb2xlYW59IGlmIHRoZSBrZXkgd2FzIGRlbGV0
ZWQKLSAgICovCi0gIFdlYWtNYXAucHJvdG90eXBlLmRlbGV0ZSA9IGZ1bmN0aW9uIChvYmopIHsK
LSAgICBpZiAodGhpcy5oYXMob2JqKSkgewotICAgICAgZGVsZXRlIF9lbWJlck1ldGFsTWV0YS5t
ZXRhKG9iaikud3JpdGFibGVXZWFrKClbdGhpcy5faWRdOwotICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH07Ci19KTsKLWVuaWZl
ZCgnZW1iZXItcm91dGluZy1odG1sYmFycy9oZWxwZXJzL3F1ZXJ5LXBhcmFtcycsIFsnZXhwb3J0
cycsICdlbWJlci1tZXRhbC9kZWJ1ZycsICdlbWJlci1yb3V0aW5nL3N5c3RlbS9xdWVyeV9wYXJh
bXMnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1ldGFsRGVidWcsIF9lbWJlclJvdXRpbmdT
eXN0ZW1RdWVyeV9wYXJhbXMpIHsKLSAgLyoqCi0gIEBtb2R1bGUgZW1iZXIKLSAgQHN1Ym1vZHVs
ZSBlbWJlci1yb3V0aW5nLWh0bWxiYXJzCi0gICovCi0KLSAgJ3VzZSBzdHJpY3QnOwotCi0gIGV4
cG9ydHMucXVlcnlQYXJhbXNIZWxwZXIgPSBxdWVyeVBhcmFtc0hlbHBlcjsKLQotICAvKioKLSAg
ICBUaGlzIGlzIGEgaGVscGVyIHRvIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgbGlu
ay10byBoZWxwZXIuCi0gICAgSXQgd2lsbCBzdXBwbHkgdXJsIHF1ZXJ5IHBhcmFtZXRlcnMgdG8g
dGhlIHRhcmdldCByb3V0ZS4KLSAgCi0gICAgRXhhbXBsZQotICAKLSAgICBgYGBoYW5kbGViYXJz
Ci0gICAge3sjbGluay10byAncG9zdHMnIChxdWVyeS1wYXJhbXMgZGlyZWN0aW9uPSJhc2MiKX19
U29ydHt7L2xpbmstdG99fQotICAgIGBgYAotICAKLSAgICBAbWV0aG9kIHF1ZXJ5LXBhcmFtcwot
ICAgIEBmb3IgRW1iZXIuVGVtcGxhdGVzLmhlbHBlcnMKLSAgICBAcGFyYW0ge09iamVjdH0gaGFz
aCB0YWtlcyBhIGhhc2ggb2YgcXVlcnkgcGFyYW1ldGVycwotICAgIEByZXR1cm4ge09iamVjdH0g
QSBgUXVlcnlQYXJhbXNgIG9iamVjdCBmb3IgYHt7bGluay10b319YAotICAgIEBwdWJsaWMKLSAg
Ki8KLQotICBmdW5jdGlvbiBxdWVyeVBhcmFtc0hlbHBlcihwYXJhbXMsIGhhc2gpIHsKLSAgICBf
ZW1iZXJNZXRhbERlYnVnLmFzc2VydCgnVGhlIGBxdWVyeS1wYXJhbXNgIGhlbHBlciBvbmx5IGFj
Y2VwdHMgaGFzaCBwYXJhbWV0ZXJzLCBlLmcuIChxdWVyeS1wYXJhbXMgcXVlcnlQYXJhbVByb3Bl
cnR5TmFtZT1cJ2Zvb1wnKSBhcyBvcHBvc2VkIHRvIGp1c3QgKHF1ZXJ5LXBhcmFtcyBcJ2Zvb1wn
KScsIHBhcmFtcy5sZW5ndGggPT09IDApOwotCi0gICAgcmV0dXJuIF9lbWJlclJvdXRpbmdTeXN0
ZW1RdWVyeV9wYXJhbXMuZGVmYXVsdC5jcmVhdGUoewotICAgICAgdmFsdWVzOiBoYXNoCi0gICAg
fSk7Ci0gIH0KLX0pOwotZW5pZmVkKCdlbWJlci1yb3V0aW5nLWh0bWxiYXJzL2luZGV4JywgWydl
eHBvcnRzJywgJ2VtYmVyLW1ldGFsL2NvcmUnLCAnZW1iZXItaHRtbGJhcnMvaGVscGVycycsICdl
bWJlci1odG1sYmFycy9rZXl3b3JkcycsICdlbWJlci1yb3V0aW5nLWh0bWxiYXJzL2hlbHBlcnMv
cXVlcnktcGFyYW1zJywgJ2VtYmVyLXJvdXRpbmctaHRtbGJhcnMva2V5d29yZHMvYWN0aW9uJywg
J2VtYmVyLXJvdXRpbmctaHRtbGJhcnMva2V5d29yZHMvZWxlbWVudC1hY3Rpb24nLCAnZW1iZXIt
cm91dGluZy1odG1sYmFycy9rZXl3b3Jkcy9yZW5kZXInXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9l
bWJlck1ldGFsQ29yZSwgX2VtYmVySHRtbGJhcnNIZWxwZXJzLCBfZW1iZXJIdG1sYmFyc0tleXdv
cmRzLCBfZW1iZXJSb3V0aW5nSHRtbGJhcnNIZWxwZXJzUXVlcnlQYXJhbXMsIF9lbWJlclJvdXRp
bmdIdG1sYmFyc0tleXdvcmRzQWN0aW9uLCBfZW1iZXJSb3V0aW5nSHRtbGJhcnNLZXl3b3Jkc0Vs
ZW1lbnRBY3Rpb24sIF9lbWJlclJvdXRpbmdIdG1sYmFyc0tleXdvcmRzUmVuZGVyKSB7Ci0gIC8q
KgotICBAbW9kdWxlIGVtYmVyCi0gIEBzdWJtb2R1bGUgZW1iZXItcm91dGluZy1odG1sYmFycwot
ICAqLwotCi0gICd1c2Ugc3RyaWN0JzsKLQotICBfZW1iZXJIdG1sYmFyc0hlbHBlcnMucmVnaXN0
ZXJIZWxwZXIoJ3F1ZXJ5LXBhcmFtcycsIF9lbWJlclJvdXRpbmdIdG1sYmFyc0hlbHBlcnNRdWVy
eVBhcmFtcy5xdWVyeVBhcmFtc0hlbHBlcik7Ci0KLSAgX2VtYmVySHRtbGJhcnNLZXl3b3Jkcy5y
ZWdpc3RlcktleXdvcmQoJ2FjdGlvbicsIF9lbWJlclJvdXRpbmdIdG1sYmFyc0tleXdvcmRzQWN0
aW9uLmRlZmF1bHQpOwotICBfZW1iZXJIdG1sYmFyc0tleXdvcmRzLnJlZ2lzdGVyS2V5d29yZCgn
QGVsZW1lbnRfYWN0aW9uJywgX2VtYmVyUm91dGluZ0h0bWxiYXJzS2V5d29yZHNFbGVtZW50QWN0
aW9uLmRlZmF1bHQpOwotICBfZW1iZXJIdG1sYmFyc0tleXdvcmRzLnJlZ2lzdGVyS2V5d29yZCgn
cmVuZGVyJywgX2VtYmVyUm91dGluZ0h0bWxiYXJzS2V5d29yZHNSZW5kZXIuZGVmYXVsdCk7Ci0K
LSAgZXhwb3J0cy5kZWZhdWx0ID0gX2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQ7Ci19KTsKLWVuaWZl
ZCgnZW1iZXItcm91dGluZy1odG1sYmFycy9rZXl3b3Jkcy9hY3Rpb24nLCBbJ2V4cG9ydHMnLCAn
aHRtbGJhcnMtcnVudGltZS9ob29rcycsICdlbWJlci1yb3V0aW5nLWh0bWxiYXJzL2tleXdvcmRz
L2Nsb3N1cmUtYWN0aW9uJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfaHRtbGJhcnNSdW50aW1lSG9v
a3MsIF9lbWJlclJvdXRpbmdIdG1sYmFyc0tleXdvcmRzQ2xvc3VyZUFjdGlvbikgewotICAvKioK
LSAgQG1vZHVsZSBlbWJlcgotICBAc3VibW9kdWxlIGVtYmVyLXRlbXBsYXRlcwotICAqLwotCi0g
ICd1c2Ugc3RyaWN0JzsKLQotICAvKioKLSAgICBUaGUgYHt7YWN0aW9ufX1gIGhlbHBlciBwcm92
aWRlcyBhIHdheSB0byBwYXNzIHRyaWdnZXJzIGZvciBiZWhhdmlvciAodXN1YWxseQotICAgIGp1
c3QgYSBmdW5jdGlvbikgYmV0d2VlbiBjb21wb25lbnRzLCBhbmQgaW50byBjb21wb25lbnRzIGZy
b20gY29udHJvbGxlcnMuCi0gIAotICAgICMjIyBQYXNzaW5nIGZ1bmN0aW9ucyB3aXRoIHRoZSBh
Y3Rpb24gaGVscGVyCi0gIAotICAgIFRoZXJlIGFyZSB0aHJlZSBjb250ZXh0cyBhbiBhY3Rpb24g
aGVscGVyIGNhbiBiZSB1c2VkIGluLiBUaGUgZmlyc3QgdHdvCi0gICAgY29udGV4dHMgdG8gZGlz
Y3VzcyBhcmUgYXR0cmlidXRlIGNvbnRleHQsIGFuZCBIYW5kbGViYXJzIHZhbHVlIGNvbnRleHQu
Ci0gIAotICAgIGBgYGhhbmRsZWJhcnMKLSAgICB7eyEgQW4gZXhhbXBsZSBvZiBhdHRyaWJ1dGUg
Y29udGV4dCB9fQotICAgIDxkaXYgb25jbGljaz17e2FjdGlvbiAic2F2ZSJ9fT48L2Rpdj4KLSAg
ICB7eyEgRXhhbXBsZXMgb2YgSGFuZGxlYmFycyB2YWx1ZSBjb250ZXh0IH19Ci0gICAge3tpbnB1
dCBvbi1pbnB1dD0oYWN0aW9uICJzYXZlIil9fQotICAgIHt7eWllbGQgKGFjdGlvbiAicmVmcmVz
aERhdGEiKSBhbmRBbm90aGVyUGFyYW19fQotICAgIGBgYAotICAKLSAgICBJbiB0aGVzZSBjb250
ZXh0cywKLSAgICB0aGUgaGVscGVyIGlzIGNhbGxlZCBhICJjbG9zdXJlIGFjdGlvbiIgaGVscGVy
LiBJdHMgYmVoYXZpb3IgaXMgc2ltcGxlOgotICAgIElmIHBhc3NlZCBhIGZ1bmN0aW9uIG5hbWUs
IHJlYWQgdGhhdCBmdW5jdGlvbiBvZmYgdGhlIGBhY3Rpb25zYCBwcm9wZXJ0eQotICAgIG9mIHRo
ZSBjdXJyZW50IGNvbnRleHQuIE9uY2UgdGhhdCBmdW5jdGlvbiBpcyByZWFkIChvciBpZiBhIGZ1
bmN0aW9uIHdhcwotICAgIHBhc3NlZCksIGNyZWF0ZSBhIGNsb3N1cmUgb3ZlciB0aGF0IGZ1bmN0
aW9uIGFuZCBhbnkgYXJndW1lbnRzLgotICAKLSAgICBUaGUgcmVzdWx0aW5nIHZhbHVlIG9mIGFu
IGFjdGlvbiBoZWxwZXIgdXNlZCB0aGlzIHdheSBpcyBzaW1wbHkgYSBmdW5jdGlvbi4KLSAgICBG
b3IgZXhhbXBsZSwgaW4gdGhlIGF0dHJpYnV0ZSBjb250ZXh0OgotICAKLSAgICBgYGBoYW5kbGVi
YXJzCi0gICAge3shIEFuIGV4YW1wbGUgb2YgYXR0cmlidXRlIGNvbnRleHQgfX0KLSAgICA8ZGl2
IG9uY2xpY2s9e3thY3Rpb24gInNhdmUifX0+PC9kaXY+Ci0gICAgYGBgCi0gIAotICAgIFRoZSBy
ZXN1bHRpbmcgdGVtcGxhdGUgcmVuZGVyIGxvZ2ljIHdvdWxkIGJlOgotICAKLSAgICBgYGBqcwot
ICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKLSAgICB2YXIgYWN0
aW9uRnVuY3Rpb24gPSAoZnVuY3Rpb24oY29udGV4dCl7Ci0gICAgICByZXR1cm4gZnVuY3Rpb24o
KSB7Ci0gICAgICAgIHJldHVybiBjb250ZXh0LmFjdGlvbnMuc2F2ZS5hcHBseShjb250ZXh0LCBh
cmd1bWVudHMpOwotICAgICAgfTsKLSAgICB9KShjb250ZXh0KTsKLSAgICBkaXYub25jbGljayA9
IGFjdGlvbkZ1bmN0aW9uOwotICAgIGBgYAotICAKLSAgICBUaHVzIHdoZW4gdGhlIGRpdiBpcyBj
bGlja2VkLCB0aGUgYWN0aW9uIG9uIHRoYXQgY29udGV4dCBpcyBjYWxsZWQuCi0gICAgQmVjYXVz
ZSB0aGUgYGFjdGlvbkZ1bmN0aW9uYCBpcyBqdXN0IGEgZnVuY3Rpb24sIGNsb3N1cmUgYWN0aW9u
cyBjYW4gYmUKLSAgICBwYXNzZWQgYmV0d2VlbiBjb21wb25lbnRzIGFuZCBzdGlsbCBleGVjdXRl
IGluIHRoZSBjb3JyZWN0IGNvbnRleHQuCi0gIAotICAgIEhlcmUgaXMgYW4gZXhhbXBsZSBhY3Rp
b24gaGFuZGxlciBvbiBhIGNvbXBvbmVudDoKLSAgCi0gICAgYGBganMKLSAgICBleHBvcnQgZGVm
YXVsdCBFbWJlci5Db21wb25lbnQuZXh0ZW5kKHsKLSAgICAgIGFjdGlvbnM6IHsKLSAgICAgICAg
c2F2ZSgpIHsKLSAgICAgICAgICB0aGlzLmdldCgnbW9kZWwnKS5zYXZlKCk7Ci0gICAgICAgIH0K
LSAgICAgIH0KLSAgICB9KTsKLSAgICBgYGAKLSAgCi0gICAgQWN0aW9ucyBhcmUgYWx3YXlzIGxv
b2tlZCB1cCBvbiB0aGUgYGFjdGlvbnNgIHByb3BlcnR5IG9mIHRoZSBjdXJyZW50IGNvbnRleHQu
Ci0gICAgVGhpcyBhdm9pZHMgY29sbGlzaW9ucyBpbiB0aGUgbmFtaW5nIG9mIGNvbW1vbiBhY3Rp
b25zLCBzdWNoIGFzIGBkZXN0cm95YC4KLSAgCi0gICAgVHdvIG9wdGlvbnMgY2FuIGJlIHBhc3Nl
ZCB0byB0aGUgYGFjdGlvbmAgaGVscGVyIHdoZW4gaXQgaXMgdXNlZCBpbiB0aGlzIHdheS4KLSAg
Ci0gICAgKiBgdGFyZ2V0PXNvbWVQcm9wZXJ0eWAgd2lsbCBsb29rIHRvIGBzb21lUHJvcGVydHlg
IGluc3RlYWQgb2YgdGhlIGN1cnJlbnQKLSAgICAgIGNvbnRleHQgZm9yIHRoZSBgYWN0aW9uc2Ag
aGFzaC4gVGhpcyBjYW4gYmUgdXNlZnVsIHdoZW4gdGFyZ2V0dGluZyBhCi0gICAgICBzZXJ2aWNl
IGZvciBhY3Rpb25zLgotICAgICogYHZhbHVlPSJ0YXJnZXQudmFsdWUiYCB3aWxsIHJlYWQgdGhl
IHBhdGggYHRhcmdldC52YWx1ZWAgb2ZmIHRoZSBmaXJzdAotICAgICAgYXJndW1lbnQgdG8gdGhl
IGFjdGlvbiB3aGVuIGl0IGlzIGNhbGxlZCBhbmQgcmV3cml0ZSB0aGUgZmlyc3QgYXJndW1lbnQK
LSAgICAgIHRvIGJlIHRoYXQgdmFsdWUuIFRoaXMgaXMgdXNlZnVsIHdoZW4gYXR0YWNoaW5nIGFj
dGlvbnMgdG8gZXZlbnQgbGlzdGVuZXJzLgotICAKLSAgICAjIyMgSW52b2tpbmcgYW4gYWN0aW9u
Ci0gIAotICAgIENsb3N1cmUgYWN0aW9ucyBjdXJyeSBib3RoIHRoZWlyIHNjb3BlIGFuZCBhbnkg
YXJndW1lbnRzLiBXaGVuIGludm9rZWQsIGFueQotICAgIGFkZGl0aW9uYWwgYXJndW1lbnRzIGFy
ZSBhZGRlZCB0byB0aGUgYWxyZWFkeSBjdXJyaWVkIGxpc3QuCi0gIAotICAgIEFjdGlvbnMgc2hv
dWxkIGJlIGludm9rZWQgdXNpbmcgdGhlIFtzZW5kQWN0aW9uXSgvYXBpL2NsYXNzZXMvRW1iZXIu
Q29tcG9uZW50Lmh0bWwjbWV0aG9kX3NlbmRBY3Rpb24pCi0gICAgbWV0aG9kLiBUaGUgZmlyc3Qg
YXJndW1lbnQgdG8gYHNlbmRBY3Rpb25gIGlzIHRoZSBhY3Rpb24gdG8gYmUgY2FsbGVkLCBhbmQK
LSAgICBhZGRpdGlvbmFsIGFyZ3VtZW50cyBhcmUgcGFzc2VkIHRvIHRoZSBhY3Rpb24gZnVuY3Rp
b24uIFRoaXMgaGFzIGludGVyZXN0aW5nCi0gICAgcHJvcGVydGllcyBjb21iaW5lZCB3aXRoIGN1
cnJ5aW5nIG9mIGFyZ3VtZW50cy4gRm9yIGV4YW1wbGU6Ci0gIAotICAgIGBgYGpzCi0gICAgZXhw
b3J0IGRlZmF1bHQgRW1iZXIuQ29tcG9uZW50LmV4dGVuZCh7Ci0gICAgICBhY3Rpb25zOiB7Ci0g
ICAgICAgIC8vIFVzYWdlIHt7aW5wdXQgb24taW5wdXQ9KGFjdGlvbiAoYWN0aW9uICdzZXROYW1l
JyBtb2RlbCkgdmFsdWU9InRhcmdldC52YWx1ZSIpfX0KLSAgICAgICAgc2V0TmFtZShtb2RlbCwg
bmFtZSkgewotICAgICAgICAgIG1vZGVsLnNldCgnbmFtZScsIG5hbWUpOwotICAgICAgICB9Ci0g
ICAgICB9Ci0gICAgfSk7Ci0gICAgYGBgCi0gIAotICAgIFRoZSBmaXJzdCBhcmd1bWVudCAoYG1v
ZGVsYCkgd2FzIGN1cnJpZWQgb3ZlciwgYW5kIHRoZSBydW4tdGltZSBhcmd1bWVudCAoYGV2ZW50
YCkKLSAgICBiZWNvbWVzIGEgc2Vjb25kIGFyZ3VtZW50LiBBY3Rpb24gY2FsbHMgY2FuIGJlIG5l
c3RlZCB0aGlzIHdheSBiZWNhdXNlIGVhY2ggc2ltcGx5Ci0gICAgcmV0dXJucyBhIGZ1bmN0aW9u
LiBBbnkgZnVuY3Rpb24gY2FuIGJlIHBhc3NlZCB0byB0aGUgYHt7YWN0aW9ufX1gIGhlbHBlciwg
aW5jbHVkaW5nCi0gICAgb3RoZXIgYWN0aW9ucy4KLSAgCi0gICAgQWN0aW9ucyBpbnZva2VkIHdp
dGggYHNlbmRBY3Rpb25gIGhhdmUgdGhlIHNhbWUgY3VycnlpbmcgYmVoYXZpb3IgYXMgZGVtb25z
dHJhdGVkCi0gICAgd2l0aCBgb24taW5wdXRgIGFib3ZlLiBGb3IgZXhhbXBsZToKLSAgCi0gICAg
YGBganMKLSAgICBleHBvcnQgZGVmYXVsdCBFbWJlci5Db21wb25lbnQuZXh0ZW5kKHsKLSAgICAg
IGFjdGlvbnM6IHsKLSAgICAgICAgc2V0TmFtZShtb2RlbCwgbmFtZSkgewotICAgICAgICAgIG1v
ZGVsLnNldCgnbmFtZScsIG5hbWUpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSk7Ci0gICAg
YGBgCi0gIAotICAgIGBgYGhhbmRsZWJhcnMKLSAgICB7e215LWlucHV0IHN1Ym1pdD0oYWN0aW9u
ICdzZXROYW1lJyBtb2RlbCl9fQotICAgIGBgYAotICAKLSAgICBgYGBqcwotICAgIC8vIGFwcC9j
b21wb25lbnRzL215LWNvbXBvbmVudC5qcwotICAgIGV4cG9ydCBkZWZhdWx0IEVtYmVyLkNvbXBv
bmVudC5leHRlbmQoewotICAgICAgY2xpY2soKSB7Ci0gICAgICAgIC8vIE5vdGUgdGhhdCBtb2Rl
bCBpcyBub3QgcGFzc2VkLCBpdCB3YXMgY3VycmllZCBpbiB0aGUgdGVtcGxhdGUKLSAgICAgICAg
dGhpcy5zZW5kQWN0aW9uKCdzdWJtaXQnLCAnYm9iJyk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gICAg
YGBgCi0gIAotICAgICMjIyBBdHRhY2hpbmcgYWN0aW9ucyB0byBET00gZWxlbWVudHMKLSAgCi0g
ICAgVGhlIHRoaXJkIGNvbnRleHQgb2YgdGhlIGB7e2FjdGlvbn19YCBoZWxwZXIgY2FuIGJlIGNh
bGxlZCAiZWxlbWVudCBzcGFjZSIuCi0gICAgRm9yIGV4YW1wbGU6Ci0gIAotICAgIGBgYGhhbmRs
ZWJhcnMKLSAgICB7eyEgQW4gZXhhbXBsZSBvZiBlbGVtZW50IHNwYWNlIH19Ci0gICAgPGRpdiB7
e2FjdGlvbiAic2F2ZSJ9fT48L2Rpdj4KLSAgICBgYGAKLSAgCi0gICAgVXNlZCB0aGlzIHdheSwg
dGhlIGB7e2FjdGlvbn19YCBoZWxwZXIgcHJvdmlkZXMgYSB1c2VmdWwgc2hvcnRjdXQgZm9yCi0g
ICAgcmVnaXN0ZXJpbmcgYW4gSFRNTCBlbGVtZW50IGluIGEgdGVtcGxhdGUgZm9yIGEgc2luZ2xl
IERPTSBldmVudCBhbmQKLSAgICBmb3J3YXJkaW5nIHRoYXQgaW50ZXJhY3Rpb24gdG8gdGhlIHRl
bXBsYXRlJ3MgY29udGV4dCAoY29udHJvbGxlciBvciBjb21wb25lbnQpLgotICAKLSAgICBJZiB0
aGUgY29udGV4dCBvZiBhIHRlbXBsYXRlIGlzIGEgY29udHJvbGxlciwgYWN0aW9ucyB1c2VkIHRo
aXMgd2F5IHdpbGwKLSAgICBidWJibGUgdG8gcm91dGVzIHdoZW4gdGhlIGNvbnRyb2xsZXIgZG9l
cyBub3QgaW1wbGVtZW50IHRoZSBzcGVjaWZpZWQgYWN0aW9uLgotICAgIE9uY2UgYW4gYWN0aW9u
IGhpdHMgYSByb3V0ZSwgaXQgd2lsbCBidWJibGUgdGhyb3VnaCB0aGUgcm91dGUgaGllcmFyY2h5
LgotICAKLSAgICAjIyMgRXZlbnQgUHJvcGFnYXRpb24KLSAgCi0gICAgYHt7YWN0aW9ufX1gIGhl
bHBlcnMgY2FsbGVkIGluIGVsZW1lbnQgc3BhY2UgY2FuIGNvbnRyb2wgZXZlbnQgYnViYmxpbmcu
IE5vdGUKLSAgICB0aGF0IHRoZSBjbG9zdXJlIHN0eWxlIGFjdGlvbnMgY2Fubm90LgotICAKLSAg
ICBFdmVudHMgdHJpZ2dlcmVkIHRocm91Z2ggdGhlIGFjdGlvbiBoZWxwZXIgd2lsbCBhdXRvbWF0
aWNhbGx5IGhhdmUKLSAgICBgLnByZXZlbnREZWZhdWx0KClgIGNhbGxlZCBvbiB0aGVtLiBZb3Ug
ZG8gbm90IG5lZWQgdG8gZG8gc28gaW4geW91ciBldmVudAotICAgIGhhbmRsZXJzLiBJZiB5b3Ug
bmVlZCB0byBhbGxvdyBldmVudCBwcm9wYWdhdGlvbiAodG8gaGFuZGxlIGZpbGUgaW5wdXRzIGZv
cgotICAgIGV4YW1wbGUpIHlvdSBjYW4gc3VwcGx5IHRoZSBgcHJldmVudERlZmF1bHQ9ZmFsc2Vg
IG9wdGlvbiB0byB0aGUgYHt7YWN0aW9ufX1gIGhlbHBlcjoKLSAgCi0gICAgYGBgaGFuZGxlYmFy
cwotICAgIDxkaXYge3thY3Rpb24gInNheUhlbGxvIiBwcmV2ZW50RGVmYXVsdD1mYWxzZX19Pgot
ICAgICAgPGlucHV0IHR5cGU9ImZpbGUiIC8+Ci0gICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3gi
IC8+Ci0gICAgPC9kaXY+Ci0gICAgYGBgCi0gIAotICAgIFRvIGRpc2FibGUgYnViYmxpbmcsIHBh
c3MgYGJ1YmJsZXM9ZmFsc2VgIHRvIHRoZSBoZWxwZXI6Ci0gIAotICAgIGBgYGhhbmRsZWJhcnMK
LSAgICA8YnV0dG9uIHt7YWN0aW9uICdlZGl0JyBwb3N0IGJ1YmJsZXM9ZmFsc2V9fT5FZGl0PC9i
dXR0b24+Ci0gICAgYGBgCi0gIAotICAgIFRvIGRpc2FibGUgYnViYmxpbmcgd2l0aCBjbG9zdXJl
IHN0eWxlIGFjdGlvbnMgeW91IG11c3QgY3JlYXRlIHlvdXIgb3duCi0gICAgd3JhcHBlciBoZWxw
ZXIgdGhhdCBtYWtlcyB1c2Ugb2YgYGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpYDoKLSAgCi0gICAg
YGBgaGFuZGxlYmFycwotICAgIDxkaXYgb25jbGljaz17e2Rpc2FibGUtYnViYmxpbmcgKGFjdGlv
biAic2F5SGVsbG8iKX19PkhlbGxvPC9kaXY+Ci0gICAgYGBgCi0gIAotICAgIGBgYGpzCi0gICAg
Ly8gYXBwL2hlbHBlcnMvZGlzYWJsZS1idWJibGluZy5qcwotICAgIGltcG9ydCBFbWJlciBmcm9t
ICdlbWJlcic7Ci0gIAotICAgIGV4cG9ydCBmdW5jdGlvbiBkaXNhYmxlQnViYmxpbmcoW2FjdGlv
bl0pIHsKLSAgICAgIHJldHVybiBmdW5jdGlvbihldmVudCkgewotICAgICAgICBldmVudC5zdG9w
UHJvcGFnYXRpb24oKTsKLSAgCi0gICAgICAgIHJldHVybiBhY3Rpb24oZXZlbnQpOwotICAgICAg
fTsKLSAgICB9Ci0gIAotICAgIGV4cG9ydCBkZWZhdWx0IEVtYmVyLkhlbHBlci5oZWxwZXIoZGlz
YWJsZUJ1YmJsaW5nKTsKLSAgICBgYGAKLSAgCi0gICAgSWYgeW91IG5lZWQgdGhlIGRlZmF1bHQg
aGFuZGxlciB0byB0cmlnZ2VyIHlvdSBzaG91bGQgZWl0aGVyIHJlZ2lzdGVyIHlvdXIKLSAgICBv
d24gZXZlbnQgaGFuZGxlciwgb3IgdXNlIGV2ZW50IG1ldGhvZHMgb24geW91ciB2aWV3IGNsYXNz
LiBTZWUKLSAgICBbIlJlc3BvbmRpbmcgdG8gQnJvd3NlciBFdmVudHMiXSgvYXBpL2NsYXNzZXMv
RW1iZXIuVmlldy5odG1sI3RvY19yZXNwb25kaW5nLXRvLWJyb3dzZXItZXZlbnRzKQotICAgIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGZvciBFbWJlci5WaWV3IGZvciBtb3JlIGluZm9ybWF0aW9uLgot
ICAKLSAgICAjIyMgU3BlY2lmeWluZyBET00gZXZlbnQgdHlwZQotICAKLSAgICBge3thY3Rpb259
fWAgaGVscGVycyBjYWxsZWQgaW4gZWxlbWVudCBzcGFjZSBjYW4gc3BlY2lmeSBhbiBldmVudCB0
eXBlLgotICAKLSAgICBCeSBkZWZhdWx0IHRoZSBge3thY3Rpb259fWAgaGVscGVyIHJlZ2lzdGVy
cyBmb3IgRE9NIGBjbGlja2AgZXZlbnRzLiBZb3UgY2FuCi0gICAgc3VwcGx5IGFuIGBvbmAgb3B0
aW9uIHRvIHRoZSBoZWxwZXIgdG8gc3BlY2lmeSBhIGRpZmZlcmVudCBET00gZXZlbnQgbmFtZToK
LSAgCi0gICAgYGBgaGFuZGxlYmFycwotICAgIDxkaXYge3thY3Rpb24gImFuQWN0aW9uTmFtZSIg
b249ImRvdWJsZUNsaWNrIn19PgotICAgICAgY2xpY2sgbWUKLSAgICA8L2Rpdj4KLSAgICBgYGAK
LSAgCi0gICAgU2VlIFsiRXZlbnQgTmFtZXMiXSgvYXBpL2NsYXNzZXMvRW1iZXIuVmlldy5odG1s
I3RvY19ldmVudC1uYW1lcykgZm9yIGEgbGlzdCBvZgotICAgIGFjY2VwdGFibGUgRE9NIGV2ZW50
IG5hbWVzLgotICAKLSAgICAjIyMgU3BlY2lmeWluZyB3aGl0ZWxpc3RlZCBtb2RpZmllciBrZXlz
Ci0gIAotICAgIGB7e2FjdGlvbn19YCBoZWxwZXJzIGNhbGxlZCBpbiBlbGVtZW50IHNwYWNlIGNh
biBzcGVjaWZ5IG1vZGlmaWVyIGtleXMuCi0gIAotICAgIEJ5IGRlZmF1bHQgdGhlIGB7e2FjdGlv
bn19YCBoZWxwZXIgd2lsbCBpZ25vcmUgY2xpY2sgZXZlbnRzIHdpdGggcHJlc3NlZCBtb2RpZmll
cgotICAgIGtleXMuIFlvdSBjYW4gc3VwcGx5IGFuIGBhbGxvd2VkS2V5c2Agb3B0aW9uIHRvIHNw
ZWNpZnkgd2hpY2gga2V5cyBzaG91bGQgbm90IGJlIGlnbm9yZWQuCi0gIAotICAgIGBgYGhhbmRs
ZWJhcnMKLSAgICA8ZGl2IHt7YWN0aW9uICJhbkFjdGlvbk5hbWUiIGFsbG93ZWRLZXlzPSJhbHQi
fX0+Ci0gICAgICBjbGljayBtZQotICAgIDwvZGl2PgotICAgIGBgYAotICAKLSAgICBUaGlzIHdh
eSB0aGUgYWN0aW9uIHdpbGwgZmlyZSB3aGVuIGNsaWNraW5nIHdpdGggdGhlIGFsdCBrZXkgcHJl
c3NlZCBkb3duLgotICAKLSAgICBBbHRlcm5hdGl2ZWx5LCBzdXBwbHkgImFueSIgdG8gdGhlIGBh
bGxvd2VkS2V5c2Agb3B0aW9uIHRvIGFjY2VwdCBhbnkgY29tYmluYXRpb24gb2YgbW9kaWZpZXIg
a2V5cy4KLSAgCi0gICAgYGBgaGFuZGxlYmFycwotICAgIDxkaXYge3thY3Rpb24gImFuQWN0aW9u
TmFtZSIgYWxsb3dlZEtleXM9ImFueSJ9fT4KLSAgICAgIGNsaWNrIG1lIHdpdGggYW55IGtleSBw
cmVzc2VkCi0gICAgPC9kaXY+Ci0gICAgYGBgCi0gIAotICAgICMjIyBTcGVjaWZ5aW5nIGEgVGFy
Z2V0Ci0gIAotICAgIEEgYHRhcmdldGAgb3B0aW9uIGNhbiBiZSBwcm92aWRlZCB0byB0aGUgaGVs
cGVyIHRvIGNoYW5nZQotICAgIHdoaWNoIG9iamVjdCB3aWxsIHJlY2VpdmUgdGhlIG1ldGhvZCBj
YWxsLiBUaGlzIG9wdGlvbiBtdXN0IGJlIGEgcGF0aAotICAgIHRvIGFuIG9iamVjdCwgYWNjZXNz
aWJsZSBpbiB0aGUgY3VycmVudCBjb250ZXh0OgotICAKLSAgICBgYGBoYW5kbGViYXJzCi0gICAg
e3shIGFwcC90ZW1wbGF0ZXMvYXBwbGljYXRpb24uaGJzIH19Ci0gICAgPGRpdiB7e2FjdGlvbiAi
YW5BY3Rpb25OYW1lIiB0YXJnZXQ9c29tZVNlcnZpY2V9fT4KLSAgICAgIGNsaWNrIG1lCi0gICAg
PC9kaXY+Ci0gICAgYGBgCi0gIAotICAgIGBgYGphdmFzY3JpcHQKLSAgICAvLyBhcHAvY29udHJv
bGxlcnMvYXBwbGljYXRpb24uanMKLSAgICBleHBvcnQgZGVmYXVsdCBFbWJlci5Db250cm9sbGVy
LmV4dGVuZCh7Ci0gICAgICBzb21lU2VydmljZTogRW1iZXIuaW5qZWN0LnNlcnZpY2UoKQotICAg
IH0pOwotICAgIGBgYAotICAKLSAgICBAbWV0aG9kIGFjdGlvbgotICAgIEBmb3IgRW1iZXIuVGVt
cGxhdGVzLmhlbHBlcnMKLSAgICBAcHVibGljCi0gICovCi0KLSAgZXhwb3J0cy5kZWZhdWx0ID0g
ZnVuY3Rpb24gKG1vcnBoLCBlbnYsIHNjb3BlLCBwYXJhbXMsIGhhc2gsIHRlbXBsYXRlLCBpbnZl
cnNlLCB2aXNpdG9yKSB7Ci0gICAgaWYgKG1vcnBoKSB7Ci0gICAgICBfaHRtbGJhcnNSdW50aW1l
SG9va3Mua2V5d29yZCgnQGVsZW1lbnRfYWN0aW9uJywgbW9ycGgsIGVudiwgc2NvcGUsIHBhcmFt
cywgaGFzaCwgdGVtcGxhdGUsIGludmVyc2UsIHZpc2l0b3IpOwotICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotCi0gICAgcmV0dXJuIF9lbWJlclJvdXRpbmdIdG1sYmFyc0tleXdvcmRzQ2xvc3Vy
ZUFjdGlvbi5kZWZhdWx0KG1vcnBoLCBlbnYsIHNjb3BlLCBwYXJhbXMsIGhhc2gsIHRlbXBsYXRl
LCBpbnZlcnNlLCB2aXNpdG9yKTsKLSAgfTsKLX0pOwotZW5pZmVkKCdlbWJlci1yb3V0aW5nLWh0
bWxiYXJzL2tleXdvcmRzL2Nsb3N1cmUtYWN0aW9uJywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFs
L3N0cmVhbXMvc3RyZWFtJywgJ2VtYmVyLW1ldGFsL3N0cmVhbXMvdXRpbHMnLCAnZW1iZXItbWV0
YWwvc3ltYm9sJywgJ2VtYmVyLW1ldGFsL3Byb3BlcnR5X2dldCcsICdlbWJlci1odG1sYmFycy9o
b29rcy9zdWJleHByJywgJ2VtYmVyLW1ldGFsL2Vycm9yJywgJ2VtYmVyLW1ldGFsL3J1bl9sb29w
JywgJ2VtYmVyLW1ldGFsL2luc3RydW1lbnRhdGlvbicsICdlbWJlci1tZXRhbC9pc19ub25lJ10s
IGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbFN0cmVhbXNTdHJlYW0sIF9lbWJlck1ldGFs
U3RyZWFtc1V0aWxzLCBfZW1iZXJNZXRhbFN5bWJvbCwgX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQs
IF9lbWJlckh0bWxiYXJzSG9va3NTdWJleHByLCBfZW1iZXJNZXRhbEVycm9yLCBfZW1iZXJNZXRh
bFJ1bl9sb29wLCBfZW1iZXJNZXRhbEluc3RydW1lbnRhdGlvbiwgX2VtYmVyTWV0YWxJc19ub25l
KSB7Ci0gICd1c2Ugc3RyaWN0JzsKLQotICBleHBvcnRzLmRlZmF1bHQgPSBjbG9zdXJlQWN0aW9u
OwotICB2YXIgSU5WT0tFID0gX2VtYmVyTWV0YWxTeW1ib2wuZGVmYXVsdCgnSU5WT0tFJyk7Ci0g
IGV4cG9ydHMuSU5WT0tFID0gSU5WT0tFOwotICB2YXIgQUNUSU9OID0gX2VtYmVyTWV0YWxTeW1i
b2wuZGVmYXVsdCgnQUNUSU9OJyk7Ci0KLSAgZXhwb3J0cy5BQ1RJT04gPSBBQ1RJT047Ci0KLSAg
ZnVuY3Rpb24gY2xvc3VyZUFjdGlvbihtb3JwaCwgZW52LCBzY29wZSwgcGFyYW1zLCBoYXNoLCB0
ZW1wbGF0ZSwgaW52ZXJzZSwgdmlzaXRvcikgewotICAgIHZhciBzID0gbmV3IF9lbWJlck1ldGFs
U3RyZWFtc1N0cmVhbS5TdHJlYW0oZnVuY3Rpb24gKCkgewotICAgICAgdmFyIHJhd0FjdGlvbiA9
IHBhcmFtc1swXTsKLSAgICAgIHZhciBhY3Rpb25Bcmd1bWVudHMgPSBfZW1iZXJNZXRhbFN0cmVh
bXNVdGlscy5yZWFkQXJyYXkocGFyYW1zLnNsaWNlKDEsIHBhcmFtcy5sZW5ndGgpKTsKLQotICAg
ICAgdmFyIHRhcmdldCA9IHVuZGVmaW5lZCwKLSAgICAgICAgICBhY3Rpb24gPSB1bmRlZmluZWQs
Ci0gICAgICAgICAgdmFsdWVQYXRoID0gdW5kZWZpbmVkOwotCi0gICAgICBpZiAoX2VtYmVyTWV0
YWxJc19ub25lLmRlZmF1bHQocmF3QWN0aW9uKSkgewotICAgICAgICB2YXIgbGFiZWwgPSBfZW1i
ZXJIdG1sYmFyc0hvb2tzU3ViZXhwci5sYWJlbEZvclN1YmV4cHIocGFyYW1zLCBoYXNoLCAnYWN0
aW9uJyk7Ci0gICAgICAgIHRocm93IG5ldyBfZW1iZXJNZXRhbEVycm9yLmRlZmF1bHQoJ0FjdGlv
biBwYXNzZWQgaXMgbnVsbCBvciB1bmRlZmluZWQgaW4gJyArIGxhYmVsICsgJyBmcm9tICcgKyBf
ZW1iZXJNZXRhbFN0cmVhbXNVdGlscy5yZWFkKHNjb3BlLmdldFNlbGYoKSkgKyAnLicpOwotICAg
ICAgfSBlbHNlIGlmIChyYXdBY3Rpb25bSU5WT0tFXSkgewotICAgICAgICAvLyBvbi1jaGFuZ2U9
e3thY3Rpb24gKG11dCBuYW1lKX19Ci0gICAgICAgIHRhcmdldCA9IHJhd0FjdGlvbjsKLSAgICAg
ICAgYWN0aW9uID0gcmF3QWN0aW9uW0lOVk9LRV07Ci0gICAgICB9IGVsc2UgewotICAgICAgICAv
LyBvbi1jaGFuZ2U9e3thY3Rpb24gc2V0TmFtZX19Ci0gICAgICAgIC8vIGVsZW1lbnQtc3BhY2Ug
YWN0aW9ucyBsb29rIHRvICJjb250cm9sbGVyIiB0aGVuIHRhcmdldC4gSGVyZSB3ZSBvbmx5Ci0g
ICAgICAgIC8vIGxvb2sgdG8gInRhcmdldCIuCi0gICAgICAgIHRhcmdldCA9IF9lbWJlck1ldGFs
U3RyZWFtc1V0aWxzLnJlYWQoc2NvcGUuZ2V0U2VsZigpKTsKLSAgICAgICAgYWN0aW9uID0gX2Vt
YmVyTWV0YWxTdHJlYW1zVXRpbHMucmVhZChyYXdBY3Rpb24pOwotICAgICAgICB2YXIgYWN0aW9u
VHlwZSA9IHR5cGVvZiBhY3Rpb247Ci0KLSAgICAgICAgaWYgKGFjdGlvblR5cGUgPT09ICdzdHJp
bmcnKSB7Ci0gICAgICAgICAgdmFyIGFjdGlvbk5hbWUgPSBhY3Rpb247Ci0gICAgICAgICAgYWN0
aW9uID0gbnVsbDsKLSAgICAgICAgICAvLyBvbi1jaGFuZ2U9e3thY3Rpb24gJ3NldE5hbWUnfX0K
LSAgICAgICAgICBpZiAoaGFzaC50YXJnZXQpIHsKLSAgICAgICAgICAgIC8vIG9uLWNoYW5nZT17
e2FjdGlvbiAnc2V0TmFtZScgdGFyZ2V0PWFsdGVybmF0aXZlQ29tcG9uZW50fX0KLSAgICAgICAg
ICAgIHRhcmdldCA9IF9lbWJlck1ldGFsU3RyZWFtc1V0aWxzLnJlYWQoaGFzaC50YXJnZXQpOwot
ICAgICAgICAgIH0KLSAgICAgICAgICBpZiAodGFyZ2V0LmFjdGlvbnMpIHsKLSAgICAgICAgICAg
IGFjdGlvbiA9IHRhcmdldC5hY3Rpb25zW2FjdGlvbk5hbWVdOwotICAgICAgICAgIH0KLQotICAg
ICAgICAgIGlmICghYWN0aW9uKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgX2VtYmVyTWV0YWxF
cnJvci5kZWZhdWx0KCdBbiBhY3Rpb24gbmFtZWQgXCcnICsgYWN0aW9uTmFtZSArICdcJyB3YXMg
bm90IGZvdW5kIGluICcgKyB0YXJnZXQgKyAnLicpOwotICAgICAgICAgIH0KLSAgICAgICAgfSBl
bHNlIGlmIChhY3Rpb24gJiYgdHlwZW9mIGFjdGlvbltJTlZPS0VdID09PSAnZnVuY3Rpb24nKSB7
Ci0gICAgICAgICAgdGFyZ2V0ID0gYWN0aW9uOwotICAgICAgICAgIGFjdGlvbiA9IGFjdGlvbltJ
TlZPS0VdOwotICAgICAgICB9IGVsc2UgaWYgKGFjdGlvblR5cGUgIT09ICdmdW5jdGlvbicpIHsK
LSAgICAgICAgICB0aHJvdyBuZXcgX2VtYmVyTWV0YWxFcnJvci5kZWZhdWx0KCdBbiBhY3Rpb24g
Y291bGQgbm90IGJlIG1hZGUgZm9yIGAnICsgcmF3QWN0aW9uLmxhYmVsICsgJ2AgaW4gJyArIHRh
cmdldCArICcuIFBsZWFzZSBjb25maXJtIHRoYXQgeW91IGFyZSB1c2luZyBlaXRoZXIgYSBxdW90
ZWQgYWN0aW9uIG5hbWUgKGkuZS4gYChhY3Rpb24gXCcnICsgcmF3QWN0aW9uLmxhYmVsICsgJ1wn
KWApIG9yIGEgZnVuY3Rpb24gYXZhaWxhYmxlIGluICcgKyB0YXJnZXQgKyAnLicpOwotICAgICAg
ICB9Ci0gICAgICB9Ci0KLSAgICAgIGlmIChoYXNoLnZhbHVlKSB7Ci0gICAgICAgIC8vIDxidXR0
b24gb24ta2V5cHJlc3M9e3thY3Rpb24gKG11dCBuYW1lKSB2YWx1ZT0id2hpY2gifX0KLSAgICAg
ICAgLy8gb24ta2V5cHJlc3MgaXMgbm90IGV2ZW4gYW4gRW1iZXIgZmVhdHVyZSB5ZXQKLSAgICAg
ICAgdmFsdWVQYXRoID0gX2VtYmVyTWV0YWxTdHJlYW1zVXRpbHMucmVhZChoYXNoLnZhbHVlKTsK
LSAgICAgIH0KLQotICAgICAgcmV0dXJuIGNyZWF0ZUNsb3N1cmVBY3Rpb24odGhpcywgdGFyZ2V0
LCBhY3Rpb24sIHZhbHVlUGF0aCwgYWN0aW9uQXJndW1lbnRzKTsKLSAgICB9LCBmdW5jdGlvbiAo
KSB7Ci0gICAgICByZXR1cm4gX2VtYmVySHRtbGJhcnNIb29rc1N1YmV4cHIubGFiZWxGb3JTdWJl
eHByKHBhcmFtcywgaGFzaCwgJ2FjdGlvbicpOwotICAgIH0pOwotCi0gICAgcGFyYW1zLmZvckVh
Y2gocy5hZGREZXBlbmRlbmN5LCBzKTsKLSAgICBPYmplY3Qua2V5cyhoYXNoKS5mb3JFYWNoKGZ1
bmN0aW9uIChpdGVtKSB7Ci0gICAgICByZXR1cm4gcy5hZGREZXBlbmRlbmN5KGl0ZW0pOwotICAg
IH0pOwotCi0gICAgcmV0dXJuIHM7Ci0gIH0KLQotICBmdW5jdGlvbiBjcmVhdGVDbG9zdXJlQWN0
aW9uKHN0cmVhbSwgdGFyZ2V0LCBhY3Rpb24sIHZhbHVlUGF0aCwgYWN0aW9uQXJndW1lbnRzKSB7
Ci0gICAgdmFyIGNsb3N1cmVBY3Rpb247Ci0KLSAgICBpZiAoYWN0aW9uQXJndW1lbnRzLmxlbmd0
aCA+IDApIHsKLSAgICAgIGNsb3N1cmVBY3Rpb24gPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgIHZh
ciBhcmdzID0gYWN0aW9uQXJndW1lbnRzOwotCi0gICAgICAgIGZvciAodmFyIF9sZW4gPSBhcmd1
bWVudHMubGVuZ3RoLCBwYXNzZWRBcmd1bWVudHMgPSBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9r
ZXkgPCBfbGVuOyBfa2V5KyspIHsKLSAgICAgICAgICBwYXNzZWRBcmd1bWVudHNbX2tleV0gPSBh
cmd1bWVudHNbX2tleV07Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocGFzc2VkQXJndW1lbnRz
Lmxlbmd0aCA+IDApIHsKLSAgICAgICAgICBhcmdzID0gYWN0aW9uQXJndW1lbnRzLmNvbmNhdChw
YXNzZWRBcmd1bWVudHMpOwotICAgICAgICB9Ci0gICAgICAgIGlmICh2YWx1ZVBhdGggJiYgYXJn
cy5sZW5ndGggPiAwKSB7Ci0gICAgICAgICAgYXJnc1swXSA9IF9lbWJlck1ldGFsUHJvcGVydHlf
Z2V0LmdldChhcmdzWzBdLCB2YWx1ZVBhdGgpOwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIHBh
eWxvYWQgPSB7IHRhcmdldDogdGFyZ2V0LCBhcmdzOiBhcmdzLCBsYWJlbDogX2VtYmVyTWV0YWxT
dHJlYW1zVXRpbHMubGFiZWxGb3Ioc3RyZWFtKSB9OwotICAgICAgICByZXR1cm4gX2VtYmVyTWV0
YWxJbnN0cnVtZW50YXRpb24uZmxhZ2dlZEluc3RydW1lbnQoJ2ludGVyYWN0aW9uLmVtYmVyLWFj
dGlvbicsIHBheWxvYWQsIGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICByZXR1cm4gX2VtYmVyTWV0
YWxSdW5fbG9vcC5kZWZhdWx0LmpvaW4uYXBwbHkoX2VtYmVyTWV0YWxSdW5fbG9vcC5kZWZhdWx0
LCBbdGFyZ2V0LCBhY3Rpb25dLmNvbmNhdChhcmdzKSk7Ci0gICAgICAgIH0pOwotICAgICAgfTsK
LSAgICB9IGVsc2UgewotICAgICAgY2xvc3VyZUFjdGlvbiA9IGZ1bmN0aW9uICgpIHsKLSAgICAg
ICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbjIp
LCBfa2V5MiA9IDA7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHsKLSAgICAgICAgICBhcmdzW19r
ZXkyXSA9IGFyZ3VtZW50c1tfa2V5Ml07Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodmFsdWVQ
YXRoICYmIGFyZ3MubGVuZ3RoID4gMCkgewotICAgICAgICAgIGFyZ3NbMF0gPSBfZW1iZXJNZXRh
bFByb3BlcnR5X2dldC5nZXQoYXJnc1swXSwgdmFsdWVQYXRoKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHZhciBwYXlsb2FkID0geyB0YXJnZXQ6IHRhcmdldCwgYXJnczogYXJncywgbGFiZWw6IF9l
bWJlck1ldGFsU3RyZWFtc1V0aWxzLmxhYmVsRm9yKHN0cmVhbSkgfTsKLSAgICAgICAgcmV0dXJu
IF9lbWJlck1ldGFsSW5zdHJ1bWVudGF0aW9uLmZsYWdnZWRJbnN0cnVtZW50KCdpbnRlcmFjdGlv
bi5lbWJlci1hY3Rpb24nLCBwYXlsb2FkLCBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgcmV0dXJu
IF9lbWJlck1ldGFsUnVuX2xvb3AuZGVmYXVsdC5qb2luLmFwcGx5KF9lbWJlck1ldGFsUnVuX2xv
b3AuZGVmYXVsdCwgW3RhcmdldCwgYWN0aW9uXS5jb25jYXQoYXJncykpOwotICAgICAgICB9KTsK
LSAgICAgIH07Ci0gICAgfQotCi0gICAgY2xvc3VyZUFjdGlvbltBQ1RJT05dID0gdHJ1ZTsKLQot
ICAgIHJldHVybiBjbG9zdXJlQWN0aW9uOwotICB9Ci19KTsKLWVuaWZlZCgnZW1iZXItcm91dGlu
Zy1odG1sYmFycy9rZXl3b3Jkcy9lbGVtZW50LWFjdGlvbicsIFsnZXhwb3J0cycsICdlbWJlci1t
ZXRhbC9kZWJ1ZycsICdlbWJlci1tZXRhbC91dGlscycsICdlbWJlci1tZXRhbC9zdHJlYW1zL3V0
aWxzJywgJ2VtYmVyLW1ldGFsL3J1bl9sb29wJywgJ2VtYmVyLXZpZXdzL3N0cmVhbXMvdXRpbHMn
LCAnZW1iZXItdmlld3Mvc3lzdGVtL3V0aWxzJywgJ2VtYmVyLXZpZXdzL3N5c3RlbS9hY3Rpb25f
bWFuYWdlciddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0YWxEZWJ1ZywgX2VtYmVyTWV0
YWxVdGlscywgX2VtYmVyTWV0YWxTdHJlYW1zVXRpbHMsIF9lbWJlck1ldGFsUnVuX2xvb3AsIF9l
bWJlclZpZXdzU3RyZWFtc1V0aWxzLCBfZW1iZXJWaWV3c1N5c3RlbVV0aWxzLCBfZW1iZXJWaWV3
c1N5c3RlbUFjdGlvbl9tYW5hZ2VyKSB7Ci0gICd1c2Ugc3RyaWN0JzsKLQotICBleHBvcnRzLmRl
ZmF1bHQgPSB7Ci0gICAgc2V0dXBTdGF0ZTogZnVuY3Rpb24gKHN0YXRlLCBlbnYsIHNjb3BlLCBw
YXJhbXMsIGhhc2gpIHsKLSAgICAgIHZhciBnZXRTdHJlYW0gPSBlbnYuaG9va3MuZ2V0OwotICAg
ICAgdmFyIHJlYWQgPSBlbnYuaG9va3MuZ2V0VmFsdWU7Ci0KLSAgICAgIHZhciBhY3Rpb25OYW1l
ID0gcmVhZChwYXJhbXNbMF0pOwotCi0gICAgICBfZW1iZXJNZXRhbERlYnVnLmFzc2VydCgnWW91
IHNwZWNpZmllZCBhIHF1b3RlbGVzcyBwYXRoIHRvIHRoZSB7e2FjdGlvbn19IGhlbHBlciAnICsg
J3doaWNoIGRpZCBub3QgcmVzb2x2ZSB0byBhbiBhY3Rpb24gbmFtZSAoYSBzdHJpbmcpLiAnICsg
J1BlcmhhcHMgeW91IG1lYW50IHRvIHVzZSBhIHF1b3RlZCBhY3Rpb25OYW1lPyAoZS5nLiB7e2Fj
dGlvbiBcJ3NhdmVcJ319KS4nLCB0eXBlb2YgYWN0aW9uTmFtZSA9PT0gJ3N0cmluZycgfHwgdHlw
ZW9mIGFjdGlvbk5hbWUgPT09ICdmdW5jdGlvbicpOwotCi0gICAgICB2YXIgYWN0aW9uQXJncyA9
IFtdOwotICAgICAgZm9yICh2YXIgaSA9IDEsIGwgPSBwYXJhbXMubGVuZ3RoOyBpIDwgbDsgaSsr
KSB7Ci0gICAgICAgIGFjdGlvbkFyZ3MucHVzaChfZW1iZXJWaWV3c1N0cmVhbXNVdGlscy5yZWFk
VW53cmFwcGVkTW9kZWwocGFyYW1zW2ldKSk7Ci0gICAgICB9Ci0KLSAgICAgIHZhciB0YXJnZXQ7
Ci0gICAgICBpZiAoaGFzaC50YXJnZXQpIHsKLSAgICAgICAgaWYgKHR5cGVvZiBoYXNoLnRhcmdl
dCA9PT0gJ3N0cmluZycpIHsKLSAgICAgICAgICB0YXJnZXQgPSByZWFkKGdldFN0cmVhbShlbnYs
IHNjb3BlLCBoYXNoLnRhcmdldCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIHRhcmdl
dCA9IHJlYWQoaGFzaC50YXJnZXQpOwotICAgICAgICB9Ci0gICAgICB9IGVsc2UgewotICAgICAg
ICB0YXJnZXQgPSByZWFkKHNjb3BlLmdldExvY2FsKCdjb250cm9sbGVyJykpIHx8IHJlYWQoc2Nv
cGUuZ2V0U2VsZigpKTsKLSAgICAgIH0KLQotICAgICAgcmV0dXJuIHsgYWN0aW9uTmFtZTogYWN0
aW9uTmFtZSwgYWN0aW9uQXJnczogYWN0aW9uQXJncywgdGFyZ2V0OiB0YXJnZXQgfTsKLSAgICB9
LAotCi0gICAgaXNTdGFibGU6IGZ1bmN0aW9uIChzdGF0ZSwgZW52LCBzY29wZSwgcGFyYW1zLCBo
YXNoKSB7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9LAotCi0gICAgcmVuZGVyOiBmdW5jdGlv
biAobm9kZSwgZW52LCBzY29wZSwgcGFyYW1zLCBoYXNoLCB0ZW1wbGF0ZSwgaW52ZXJzZSwgdmlz
aXRvcikgewotICAgICAgdmFyIGFjdGlvbklkID0gZW52LmRvbS5nZXRBdHRyaWJ1dGUobm9kZS5l
bGVtZW50LCAnZGF0YS1lbWJlci1hY3Rpb24nKSB8fCBfZW1iZXJNZXRhbFV0aWxzLnV1aWQoKTsK
LQotICAgICAgQWN0aW9uSGVscGVyLnJlZ2lzdGVyQWN0aW9uKHsKLSAgICAgICAgYWN0aW9uSWQ6
IGFjdGlvbklkLAotICAgICAgICBub2RlOiBub2RlLAotICAgICAgICBldmVudE5hbWU6IGhhc2gu
b24gfHwgJ2NsaWNrJywKLSAgICAgICAgYnViYmxlczogaGFzaC5idWJibGVzLAotICAgICAgICBw
cmV2ZW50RGVmYXVsdDogaGFzaC5wcmV2ZW50RGVmYXVsdCwKLSAgICAgICAgd2l0aEtleUNvZGU6
IGhhc2gud2l0aEtleUNvZGUsCi0gICAgICAgIGFsbG93ZWRLZXlzOiBoYXNoLmFsbG93ZWRLZXlz
Ci0gICAgICB9KTsKLQotICAgICAgbm9kZS5jbGVhbnVwID0gZnVuY3Rpb24gKCkgewotICAgICAg
ICBBY3Rpb25IZWxwZXIudW5yZWdpc3RlckFjdGlvbihhY3Rpb25JZCk7Ci0gICAgICB9OwotCi0g
ICAgICBlbnYuZG9tLnNldEF0dHJpYnV0ZShub2RlLmVsZW1lbnQsICdkYXRhLWVtYmVyLWFjdGlv
bicsIGFjdGlvbklkKTsKLSAgICB9Ci0gIH07Ci0gIHZhciBBY3Rpb25IZWxwZXIgPSB7fTsKLQot
ICBleHBvcnRzLkFjdGlvbkhlbHBlciA9IEFjdGlvbkhlbHBlcjsKLSAgLy8gcmVnaXN0ZXJlZEFj
dGlvbnMgaXMgcmUtZXhwb3J0ZWQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciBwbHVnaW5z
Ci0gIC8vIHRoYXQgd2VyZSB1c2luZyB0aGlzIHVuZG9jdW1lbnRlZCBBUEkuCi0gIEFjdGlvbkhl
bHBlci5yZWdpc3RlcmVkQWN0aW9ucyA9IF9lbWJlclZpZXdzU3lzdGVtQWN0aW9uX21hbmFnZXIu
ZGVmYXVsdC5yZWdpc3RlcmVkQWN0aW9uczsKLQotICBBY3Rpb25IZWxwZXIucmVnaXN0ZXJBY3Rp
b24gPSBmdW5jdGlvbiAoX3JlZikgewotICAgIHZhciBhY3Rpb25JZCA9IF9yZWYuYWN0aW9uSWQ7
Ci0gICAgdmFyIG5vZGUgPSBfcmVmLm5vZGU7Ci0gICAgdmFyIGV2ZW50TmFtZSA9IF9yZWYuZXZl
bnROYW1lOwotICAgIHZhciBwcmV2ZW50RGVmYXVsdCA9IF9yZWYucHJldmVudERlZmF1bHQ7Ci0g
ICAgdmFyIGJ1YmJsZXMgPSBfcmVmLmJ1YmJsZXM7Ci0gICAgdmFyIGFsbG93ZWRLZXlzID0gX3Jl
Zi5hbGxvd2VkS2V5czsKLQotICAgIHZhciBhY3Rpb25zID0gX2VtYmVyVmlld3NTeXN0ZW1BY3Rp
b25fbWFuYWdlci5kZWZhdWx0LnJlZ2lzdGVyZWRBY3Rpb25zW2FjdGlvbklkXTsKLQotICAgIGlm
ICghYWN0aW9ucykgewotICAgICAgYWN0aW9ucyA9IF9lbWJlclZpZXdzU3lzdGVtQWN0aW9uX21h
bmFnZXIuZGVmYXVsdC5yZWdpc3RlcmVkQWN0aW9uc1thY3Rpb25JZF0gPSBbXTsKLSAgICB9Ci0K
LSAgICBhY3Rpb25zLnB1c2goewotICAgICAgZXZlbnROYW1lOiBldmVudE5hbWUsCi0gICAgICBo
YW5kbGVyOiBmdW5jdGlvbiAoZXZlbnQpIHsKLSAgICAgICAgaWYgKCFpc0FsbG93ZWRFdmVudChl
dmVudCwgX2VtYmVyTWV0YWxTdHJlYW1zVXRpbHMucmVhZChhbGxvd2VkS2V5cykpKSB7Ci0gICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoX2VtYmVyTWV0YWxT
dHJlYW1zVXRpbHMucmVhZChwcmV2ZW50RGVmYXVsdCkgIT09IGZhbHNlKSB7Ci0gICAgICAgICAg
ZXZlbnQucHJldmVudERlZmF1bHQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChfZW1iZXJN
ZXRhbFN0cmVhbXNVdGlscy5yZWFkKGJ1YmJsZXMpID09PSBmYWxzZSkgewotICAgICAgICAgIGV2
ZW50LnN0b3BQcm9wYWdhdGlvbigpOwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIF9ub2RlJGdl
dFN0YXRlID0gbm9kZS5nZXRTdGF0ZSgpOwotCi0gICAgICAgIHZhciB0YXJnZXQgPSBfbm9kZSRn
ZXRTdGF0ZS50YXJnZXQ7Ci0gICAgICAgIHZhciBhY3Rpb25OYW1lID0gX25vZGUkZ2V0U3RhdGUu
YWN0aW9uTmFtZTsKLSAgICAgICAgdmFyIGFjdGlvbkFyZ3MgPSBfbm9kZSRnZXRTdGF0ZS5hY3Rp
b25BcmdzOwotCi0gICAgICAgIF9lbWJlck1ldGFsUnVuX2xvb3AuZGVmYXVsdChmdW5jdGlvbiBy
dW5SZWdpc3RlcmVkQWN0aW9uKCkgewotICAgICAgICAgIGlmICh0eXBlb2YgYWN0aW9uTmFtZSA9
PT0gJ2Z1bmN0aW9uJykgewotICAgICAgICAgICAgYWN0aW9uTmFtZS5hcHBseSh0YXJnZXQsIGFj
dGlvbkFyZ3MpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgIH0KLSAgICAgICAgICBp
ZiAodGFyZ2V0LnNlbmQpIHsKLSAgICAgICAgICAgIHRhcmdldC5zZW5kLmFwcGx5KHRhcmdldCwg
W2FjdGlvbk5hbWVdLmNvbmNhdChhY3Rpb25BcmdzKSk7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0KCdUaGUgYWN0aW9uIFwnJyArIGFjdGlv
bk5hbWUgKyAnXCcgZGlkIG5vdCBleGlzdCBvbiAnICsgdGFyZ2V0LCB0eXBlb2YgdGFyZ2V0W2Fj
dGlvbk5hbWVdID09PSAnZnVuY3Rpb24nKTsKLQotICAgICAgICAgICAgdGFyZ2V0W2FjdGlvbk5h
bWVdLmFwcGx5KHRhcmdldCwgYWN0aW9uQXJncyk7Ci0gICAgICAgICAgfQotICAgICAgICB9KTsK
LSAgICAgIH0KLSAgICB9KTsKLQotICAgIHJldHVybiBhY3Rpb25JZDsKLSAgfTsKLQotICBBY3Rp
b25IZWxwZXIudW5yZWdpc3RlckFjdGlvbiA9IGZ1bmN0aW9uIChhY3Rpb25JZCkgewotICAgIGRl
bGV0ZSBfZW1iZXJWaWV3c1N5c3RlbUFjdGlvbl9tYW5hZ2VyLmRlZmF1bHQucmVnaXN0ZXJlZEFj
dGlvbnNbYWN0aW9uSWRdOwotICB9OwotCi0gIHZhciBNT0RJRklFUlMgPSBbJ2FsdCcsICdzaGlm
dCcsICdtZXRhJywgJ2N0cmwnXTsKLSAgdmFyIFBPSU5URVJfRVZFTlRfVFlQRV9SRUdFWCA9IC9e
Y2xpY2t8bW91c2V8dG91Y2gvOwotCi0gIGZ1bmN0aW9uIGlzQWxsb3dlZEV2ZW50KGV2ZW50LCBh
bGxvd2VkS2V5cykgewotICAgIGlmICh0eXBlb2YgYWxsb3dlZEtleXMgPT09ICd1bmRlZmluZWQn
KSB7Ci0gICAgICBpZiAoUE9JTlRFUl9FVkVOVF9UWVBFX1JFR0VYLnRlc3QoZXZlbnQudHlwZSkp
IHsKLSAgICAgICAgcmV0dXJuIF9lbWJlclZpZXdzU3lzdGVtVXRpbHMuaXNTaW1wbGVDbGljayhl
dmVudCk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBhbGxvd2VkS2V5cyA9ICcnOwotICAgICAg
fQotICAgIH0KLQotICAgIGlmIChhbGxvd2VkS2V5cy5pbmRleE9mKCdhbnknKSA+PSAwKSB7Ci0g
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBmb3IgKHZhciBpID0gMCwgbCA9IE1PRElG
SUVSUy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKLSAgICAgIGlmIChldmVudFtNT0RJRklFUlNbaV0g
KyAnS2V5J10gJiYgYWxsb3dlZEtleXMuaW5kZXhPZihNT0RJRklFUlNbaV0pID09PSAtMSkgewot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7
Ci0gIH0KLX0pOwotZW5pZmVkKCdlbWJlci1yb3V0aW5nLWh0bWxiYXJzL2tleXdvcmRzL3JlbmRl
cicsIFsnZXhwb3J0cycsICdlbWJlci1tZXRhbC9kZWJ1ZycsICdlbWJlci1tZXRhbC9wcm9wZXJ0
eV9nZXQnLCAnZW1iZXItbWV0YWwvZW1wdHlfb2JqZWN0JywgJ2VtYmVyLW1ldGFsL2Vycm9yJywg
J2VtYmVyLW1ldGFsL3N0cmVhbXMvdXRpbHMnLCAnZW1iZXItcnVudGltZS9zeXN0ZW0vc3RyaW5n
JywgJ2VtYmVyLXJvdXRpbmcvc3lzdGVtL2dlbmVyYXRlX2NvbnRyb2xsZXInLCAnZW1iZXItaHRt
bGJhcnMvbm9kZS1tYW5hZ2Vycy92aWV3LW5vZGUtbWFuYWdlciddLCBmdW5jdGlvbiAoZXhwb3J0
cywgX2VtYmVyTWV0YWxEZWJ1ZywgX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQsIF9lbWJlck1ldGFs
RW1wdHlfb2JqZWN0LCBfZW1iZXJNZXRhbEVycm9yLCBfZW1iZXJNZXRhbFN0cmVhbXNVdGlscywg
X2VtYmVyUnVudGltZVN5c3RlbVN0cmluZywgX2VtYmVyUm91dGluZ1N5c3RlbUdlbmVyYXRlX2Nv
bnRyb2xsZXIsIF9lbWJlckh0bWxiYXJzTm9kZU1hbmFnZXJzVmlld05vZGVNYW5hZ2VyKSB7Ci0g
IC8qKgotICBAbW9kdWxlIGVtYmVyCi0gIEBzdWJtb2R1bGUgZW1iZXItdGVtcGxhdGVzCi0gICov
Ci0KLSAgJ3VzZSBzdHJpY3QnOwotCi0gIC8qKgotICAgIENhbGxpbmcgYGB7e3JlbmRlcn19YGAg
ZnJvbSB3aXRoaW4gYSB0ZW1wbGF0ZSB3aWxsIGluc2VydCBhbm90aGVyCi0gICAgdGVtcGxhdGUg
dGhhdCBtYXRjaGVzIHRoZSBwcm92aWRlZCBuYW1lLiBUaGUgaW5zZXJ0ZWQgdGVtcGxhdGUgd2ls
bAotICAgIGFjY2VzcyBpdHMgcHJvcGVydGllcyBvbiBpdHMgb3duIGNvbnRyb2xsZXIgKHJhdGhl
ciB0aGFuIHRoZSBjb250cm9sbGVyCi0gICAgb2YgdGhlIHBhcmVudCB0ZW1wbGF0ZSkuCi0gICAg
SWYgYSB2aWV3IGNsYXNzIHdpdGggdGhlIHNhbWUgbmFtZSBleGlzdHMsIHRoZSB2aWV3IGNsYXNz
IGFsc28gd2lsbCBiZSB1c2VkLgotICAgIE5vdGU6IEEgZ2l2ZW4gY29udHJvbGxlciBtYXkgb25s
eSBiZSB1c2VkICpvbmNlKiBpbiB5b3VyIGFwcCBpbiB0aGlzIG1hbm5lci4KLSAgICBBIHNpbmds
ZXRvbiBpbnN0YW5jZSBvZiB0aGUgY29udHJvbGxlciB3aWxsIGJlIGNyZWF0ZWQgZm9yIHlvdS4K
LSAgICBFeGFtcGxlOgotICAKLSAgICBgYGBqYXZhc2NyaXB0Ci0gICAgQXBwLk5hdmlnYXRpb25D
b250cm9sbGVyID0gRW1iZXIuQ29udHJvbGxlci5leHRlbmQoewotICAgICAgd2hvOiAid29ybGQi
Ci0gICAgfSk7Ci0gICAgYGBgCi0gIAotICAgIGBgYGhhbmRsZWJhcnMKLSAgICA8IS0tIG5hdmln
YXRpb24uaGJzIC0tPgotICAgIEhlbGxvLCB7e3dob319LgotICAgIGBgYAotICAKLSAgICBgYGBo
YW5kbGViYXJzCi0gICAgPCEtLSBhcHBsaWNhdGlvbi5oYnMgLS0+Ci0gICAgPGgxPk15IGdyZWF0
IGFwcDwvaDE+Ci0gICAge3tyZW5kZXIgIm5hdmlnYXRpb24ifX0KLSAgICBgYGAKLSAgCi0gICAg
YGBgaHRtbAotICAgIDxoMT5NeSBncmVhdCBhcHA8L2gxPgotICAgIDxkaXYgY2xhc3M9J2VtYmVy
LXZpZXcnPgotICAgICAgSGVsbG8sIHdvcmxkLgotICAgIDwvZGl2PgotICAgIGBgYAotICAKLSAg
ICBPcHRpb25hbGx5IHlvdSBtYXkgcHJvdmlkZSBhIHNlY29uZCBhcmd1bWVudDogYSBwcm9wZXJ0
eSBwYXRoCi0gICAgdGhhdCB3aWxsIGJlIGJvdW5kIHRvIHRoZSBgbW9kZWxgIHByb3BlcnR5IG9m
IHRoZSBjb250cm9sbGVyLgotICAgIElmIGEgYG1vZGVsYCBwcm9wZXJ0eSBwYXRoIGlzIHNwZWNp
ZmllZCwgdGhlbiBhIG5ldyBpbnN0YW5jZSBvZiB0aGUKLSAgICBjb250cm9sbGVyIHdpbGwgYmUg
Y3JlYXRlZCBhbmQgYHt7cmVuZGVyfX1gIGNhbiBiZSB1c2VkIG11bHRpcGxlIHRpbWVzCi0gICAg
d2l0aCB0aGUgc2FtZSBuYW1lLgotICAKLSAgICBGb3IgZXhhbXBsZSBpZiB5b3UgaGFkIHRoaXMg
YGF1dGhvcmAgdGVtcGxhdGUuCi0gIAotICAgIGBgYGhhbmRsZWJhcnMKLSAgICA8ZGl2IGNsYXNz
PSJhdXRob3IiPgotICAgICAgV3JpdHRlbiBieSB7e2ZpcnN0TmFtZX19IHt7bGFzdE5hbWV9fS4K
LSAgICAgIFRvdGFsIFBvc3RzOiB7e3Bvc3RDb3VudH19Ci0gICAgPC9kaXY+Ci0gICAgYGBgCi0g
IAotICAgIFlvdSBjb3VsZCByZW5kZXIgaXQgaW5zaWRlIHRoZSBgcG9zdGAgdGVtcGxhdGUgdXNp
bmcgdGhlIGByZW5kZXJgIGhlbHBlci4KLSAgCi0gICAgYGBgaGFuZGxlYmFycwotICAgIDxkaXYg
Y2xhc3M9InBvc3QiPgotICAgICAgPGgxPnt7dGl0bGV9fTwvaDE+Ci0gICAgICA8ZGl2Pnt7Ym9k
eX19PC9kaXY+Ci0gICAgICB7e3JlbmRlciAiYXV0aG9yIiBhdXRob3J9fQotICAgIDwvZGl2Pgot
ICAgIGBgYAotICAKLSAgICBAbWV0aG9kIHJlbmRlcgotICAgIEBmb3IgRW1iZXIuVGVtcGxhdGVz
LmhlbHBlcnMKLSAgICBAcGFyYW0ge1N0cmluZ30gbmFtZQotICAgIEBwYXJhbSB7T2JqZWN0P30g
Y29udGV4dAotICAgIEBwYXJhbSB7SGFzaH0gb3B0aW9ucwotICAgIEByZXR1cm4ge1N0cmluZ30g
SFRNTCBzdHJpbmcKLSAgICBAcHVibGljCi0gICovCi0gIGV4cG9ydHMuZGVmYXVsdCA9IHsKLSAg
ICB3aWxsUmVuZGVyOiBmdW5jdGlvbiAocmVuZGVyTm9kZSwgZW52KSB7Ci0gICAgICBpZiAoZW52
LnZpZXcub3duZXJWaWV3Ll9vdXRsZXRzKSB7Ci0gICAgICAgIC8vIFdlIG1ha2Ugc3VyZSB3ZSB3
aWxsIGdldCBkaXJ0aWVkIHdoZW4gb3V0bGV0IHN0YXRlIGNoYW5nZXMuCi0gICAgICAgIGVudi52
aWV3Lm93bmVyVmlldy5fb3V0bGV0cy5wdXNoKHJlbmRlck5vZGUpOwotICAgICAgfQotICAgIH0s
Ci0KLSAgICBzZXR1cFN0YXRlOiBmdW5jdGlvbiAocHJldlN0YXRlLCBlbnYsIHNjb3BlLCBwYXJh
bXMsIGhhc2gpIHsKLSAgICAgIHZhciBuYW1lID0gcGFyYW1zWzBdOwotCi0gICAgICBfZW1iZXJN
ZXRhbERlYnVnLmFzc2VydCgnVGhlIGZpcnN0IGFyZ3VtZW50IG9mIHt7cmVuZGVyfX0gbXVzdCBi
ZSBxdW90ZWQsIGUuZy4ge3tyZW5kZXIgInNpZGViYXIifX0uJywgdHlwZW9mIG5hbWUgPT09ICdz
dHJpbmcnKTsKLQotICAgICAgcmV0dXJuIHsKLSAgICAgICAgcGFyZW50VmlldzogZW52LnZpZXcs
Ci0gICAgICAgIG1hbmFnZXI6IHByZXZTdGF0ZS5tYW5hZ2VyLAotICAgICAgICBjb250cm9sbGVy
OiBwcmV2U3RhdGUuY29udHJvbGxlciwKLSAgICAgICAgY2hpbGRPdXRsZXRTdGF0ZTogY2hpbGRP
dXRsZXRTdGF0ZShuYW1lLCBlbnYpCi0gICAgICB9OwotICAgIH0sCi0KLSAgICBjaGlsZEVudjog
ZnVuY3Rpb24gKHN0YXRlLCBlbnYpIHsKLSAgICAgIHJldHVybiBlbnYuY2hpbGRXaXRoT3V0bGV0
U3RhdGUoc3RhdGUuY2hpbGRPdXRsZXRTdGF0ZSk7Ci0gICAgfSwKLQotICAgIGlzU3RhYmxlOiBm
dW5jdGlvbiAobGFzdFN0YXRlLCBuZXh0U3RhdGUpIHsKLSAgICAgIHJldHVybiBpc1N0YWJsZShs
YXN0U3RhdGUuY2hpbGRPdXRsZXRTdGF0ZSwgbmV4dFN0YXRlLmNoaWxkT3V0bGV0U3RhdGUpOwot
ICAgIH0sCi0KLSAgICBpc0VtcHR5OiBmdW5jdGlvbiAoc3RhdGUpIHsKLSAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9LAotCi0gICAgcmVuZGVyOiBmdW5jdGlvbiAobm9kZSwgZW52LCBzY29wZSwg
cGFyYW1zLCBoYXNoLCB0ZW1wbGF0ZSwgaW52ZXJzZSwgdmlzaXRvcikgewotICAgICAgdmFyIHN0
YXRlID0gbm9kZS5nZXRTdGF0ZSgpOwotICAgICAgdmFyIG5hbWUgPSBwYXJhbXNbMF07Ci0gICAg
ICB2YXIgY29udGV4dCA9IHBhcmFtc1sxXTsKLQotICAgICAgdmFyIG93bmVyID0gZW52Lm93bmVy
OwotCi0gICAgICAvLyBUaGUgcmVuZGVyIGtleXdvcmQgcHJlc3VtZXMgaXQgY2FuIHdvcmsgd2l0
aG91dCBhIHJvdXRlci4gVGhpcyBpcyByZWFsbHkKLSAgICAgIC8vIG9ubHkgdG8gc2F0aXNmeSB0
aGUgdGVzdDoKLSAgICAgIC8vCi0gICAgICAvLyAgICAge3t2aWV3fX0gc2hvdWxkIG5vdCBvdmVy
cmlkZSBjbGFzcyBiaW5kaW5ncyBkZWZpbmVkIG9uIGEgY2hpbGQgdmlldyIKLSAgICAgIC8vCi0g
ICAgICB2YXIgcm91dGVyID0gb3duZXIubG9va3VwKCdyb3V0ZXI6bWFpbicpOwotCi0gICAgICBf
ZW1iZXJNZXRhbERlYnVnLmFzc2VydCgnVGhlIHNlY29uZCBhcmd1bWVudCBvZiB7e3JlbmRlcn19
IG11c3QgYmUgYSBwYXRoLCBlLmcuIHt7cmVuZGVyICJwb3N0IiBwb3N0fX0uJywgcGFyYW1zLmxl
bmd0aCA8IDIgfHwgX2VtYmVyTWV0YWxTdHJlYW1zVXRpbHMuaXNTdHJlYW0ocGFyYW1zWzFdKSk7
Ci0KLSAgICAgIGlmIChwYXJhbXMubGVuZ3RoID09PSAxKSB7Ci0gICAgICAgIC8vIHVzZSB0aGUg
c2luZ2xldG9uIGNvbnRyb2xsZXIKLSAgICAgICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ1lv
dSBjYW4gb25seSB1c2UgdGhlIHt7cmVuZGVyfX0gaGVscGVyIG9uY2Ugd2l0aG91dCBhIG1vZGVs
IG9iamVjdCBhcyAnICsgJ2l0cyBzZWNvbmQgYXJndW1lbnQsIGFzIGluIHt7cmVuZGVyICJwb3N0
IiBwb3N0fX0uJywgIXJvdXRlciB8fCAhcm91dGVyLl9sb29rdXBBY3RpdmVDb21wb25lbnROb2Rl
KG5hbWUpKTsKLSAgICAgIH0gZWxzZSBpZiAocGFyYW1zLmxlbmd0aCAhPT0gMikgewotICAgICAg
ICB0aHJvdyBuZXcgX2VtYmVyTWV0YWxFcnJvci5kZWZhdWx0KCdZb3UgbXVzdCBwYXNzIGEgdGVt
cGxhdGVOYW1lIHRvIHJlbmRlcicpOwotICAgICAgfQotCi0gICAgICB2YXIgdGVtcGxhdGVOYW1l
ID0gJ3RlbXBsYXRlOicgKyBuYW1lOwotICAgICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ1lv
dSB1c2VkIGB7e3JlbmRlciBcJycgKyBuYW1lICsgJ1wnfX1gLCBidXQgXCcnICsgbmFtZSArICdc
JyBjYW4gbm90IGJlICcgKyAnZm91bmQgYXMgZWl0aGVyIGEgdGVtcGxhdGUgb3IgYSB2aWV3Lics
IG93bmVyLmhhc1JlZ2lzdHJhdGlvbigndmlldzonICsgbmFtZSkgfHwgb3duZXIuaGFzUmVnaXN0
cmF0aW9uKHRlbXBsYXRlTmFtZSkgfHwgISF0ZW1wbGF0ZSk7Ci0KLSAgICAgIHZhciB2aWV3ID0g
b3duZXIubG9va3VwKCd2aWV3OicgKyBuYW1lKTsKLSAgICAgIGlmICghdmlldykgewotICAgICAg
ICB2aWV3ID0gb3duZXIubG9va3VwKCd2aWV3OmRlZmF1bHQnKTsKLSAgICAgIH0KLSAgICAgIHZh
ciB2aWV3SGFzVGVtcGxhdGVTcGVjaWZpZWQgPSB2aWV3ICYmICEhX2VtYmVyTWV0YWxQcm9wZXJ0
eV9nZXQuZ2V0KHZpZXcsICd0ZW1wbGF0ZScpOwotICAgICAgaWYgKCF0ZW1wbGF0ZSAmJiAhdmll
d0hhc1RlbXBsYXRlU3BlY2lmaWVkKSB7Ci0gICAgICAgIHRlbXBsYXRlID0gb3duZXIubG9va3Vw
KHRlbXBsYXRlTmFtZSk7Ci0gICAgICB9Ci0KLSAgICAgIGlmICh2aWV3KSB7Ci0gICAgICAgIHZp
ZXcub3duZXJWaWV3ID0gZW52LnZpZXcub3duZXJWaWV3OwotICAgICAgfQotCi0gICAgICAvLyBw
cm92aWRlIGNvbnRyb2xsZXIgb3ZlcnJpZGUKLSAgICAgIHZhciBjb250cm9sbGVyTmFtZTsKLSAg
ICAgIHZhciBjb250cm9sbGVyRnVsbE5hbWU7Ci0KLSAgICAgIGlmIChoYXNoLmNvbnRyb2xsZXIp
IHsKLSAgICAgICAgY29udHJvbGxlck5hbWUgPSBoYXNoLmNvbnRyb2xsZXI7Ci0gICAgICAgIGNv
bnRyb2xsZXJGdWxsTmFtZSA9ICdjb250cm9sbGVyOicgKyBjb250cm9sbGVyTmFtZTsKLSAgICAg
ICAgZGVsZXRlIGhhc2guY29udHJvbGxlcjsKLQotICAgICAgICBfZW1iZXJNZXRhbERlYnVnLmFz
c2VydCgnVGhlIGNvbnRyb2xsZXIgbmFtZSB5b3Ugc3VwcGxpZWQgXCcnICsgY29udHJvbGxlck5h
bWUgKyAnXCcgJyArICdkaWQgbm90IHJlc29sdmUgdG8gYSBjb250cm9sbGVyLicsIG93bmVyLmhh
c1JlZ2lzdHJhdGlvbihjb250cm9sbGVyRnVsbE5hbWUpKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgIGNvbnRyb2xsZXJOYW1lID0gbmFtZTsKLSAgICAgICAgY29udHJvbGxlckZ1bGxOYW1lID0g
J2NvbnRyb2xsZXI6JyArIGNvbnRyb2xsZXJOYW1lOwotICAgICAgfQotCi0gICAgICB2YXIgdGFy
Z2V0ID0gcm91dGVyOwotICAgICAgdmFyIGNvbnRyb2xsZXI7Ci0KLSAgICAgIC8vIGNob29zZSBu
YW1lCi0gICAgICBpZiAocGFyYW1zLmxlbmd0aCA+IDEpIHsKLSAgICAgICAgdmFyIGZhY3Rvcnkg
PSBvd25lci5fbG9va3VwRmFjdG9yeShjb250cm9sbGVyRnVsbE5hbWUpIHx8IF9lbWJlclJvdXRp
bmdTeXN0ZW1HZW5lcmF0ZV9jb250cm9sbGVyLmdlbmVyYXRlQ29udHJvbGxlckZhY3Rvcnkob3du
ZXIsIGNvbnRyb2xsZXJOYW1lKTsKLQotICAgICAgICBjb250cm9sbGVyID0gZmFjdG9yeS5jcmVh
dGUoewotICAgICAgICAgIG1vZGVsOiBfZW1iZXJNZXRhbFN0cmVhbXNVdGlscy5yZWFkKGNvbnRl
eHQpLAotICAgICAgICAgIHRhcmdldDogdGFyZ2V0Ci0gICAgICAgIH0pOwotCi0gICAgICAgIG5v
ZGUuYWRkRGVzdHJ1Y3Rpb24oY29udHJvbGxlcik7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBj
b250cm9sbGVyID0gb3duZXIubG9va3VwKGNvbnRyb2xsZXJGdWxsTmFtZSkgfHwgX2VtYmVyUm91
dGluZ1N5c3RlbUdlbmVyYXRlX2NvbnRyb2xsZXIuZGVmYXVsdChvd25lciwgY29udHJvbGxlck5h
bWUpOwotCi0gICAgICAgIGNvbnRyb2xsZXIuc2V0UHJvcGVydGllcyh7Ci0gICAgICAgICAgdGFy
Z2V0OiB0YXJnZXQKLSAgICAgICAgfSk7Ci0gICAgICB9Ci0KLSAgICAgIGlmICh2aWV3KSB7Ci0g
ICAgICAgIHZpZXcuc2V0KCdjb250cm9sbGVyJywgY29udHJvbGxlcik7Ci0gICAgICB9Ci0gICAg
ICBzdGF0ZS5jb250cm9sbGVyID0gY29udHJvbGxlcjsKLQotICAgICAgaGFzaC52aWV3TmFtZSA9
IF9lbWJlclJ1bnRpbWVTeXN0ZW1TdHJpbmcuY2FtZWxpemUobmFtZSk7Ci0KLSAgICAgIGlmICh0
ZW1wbGF0ZSAmJiB0ZW1wbGF0ZS5yYXcpIHsKLSAgICAgICAgdGVtcGxhdGUgPSB0ZW1wbGF0ZS5y
YXc7Ci0gICAgICB9Ci0KLSAgICAgIHZhciBvcHRpb25zID0gewotICAgICAgICBsYXlvdXQ6IG51
bGwsCi0gICAgICAgIHNlbGY6IGNvbnRyb2xsZXIKLSAgICAgIH07Ci0KLSAgICAgIGlmICh2aWV3
KSB7Ci0gICAgICAgIG9wdGlvbnMuY29tcG9uZW50ID0gdmlldzsKLSAgICAgIH0KLQotICAgICAg
dmFyIG5vZGVNYW5hZ2VyID0gX2VtYmVySHRtbGJhcnNOb2RlTWFuYWdlcnNWaWV3Tm9kZU1hbmFn
ZXIuZGVmYXVsdC5jcmVhdGUobm9kZSwgZW52LCBoYXNoLCBvcHRpb25zLCBzdGF0ZS5wYXJlbnRW
aWV3LCBudWxsLCBudWxsLCB0ZW1wbGF0ZSk7Ci0gICAgICBzdGF0ZS5tYW5hZ2VyID0gbm9kZU1h
bmFnZXI7Ci0KLSAgICAgIGlmIChyb3V0ZXIgJiYgcGFyYW1zLmxlbmd0aCA9PT0gMSkgewotICAg
ICAgICByb3V0ZXIuX2Nvbm5lY3RBY3RpdmVDb21wb25lbnROb2RlKG5hbWUsIG5vZGVNYW5hZ2Vy
KTsKLSAgICAgIH0KLQotICAgICAgbm9kZU1hbmFnZXIucmVuZGVyKGVudiwgaGFzaCwgdmlzaXRv
cik7Ci0gICAgfSwKLQotICAgIHJlcmVuZGVyOiBmdW5jdGlvbiAobm9kZSwgZW52LCBzY29wZSwg
cGFyYW1zLCBoYXNoLCB0ZW1wbGF0ZSwgaW52ZXJzZSwgdmlzaXRvcikgewotICAgICAgaWYgKHBh
cmFtcy5sZW5ndGggPiAxKSB7Ci0gICAgICAgIHZhciBtb2RlbCA9IF9lbWJlck1ldGFsU3RyZWFt
c1V0aWxzLnJlYWQocGFyYW1zWzFdKTsKLSAgICAgICAgbm9kZS5nZXRTdGF0ZSgpLmNvbnRyb2xs
ZXIuc2V0KCdtb2RlbCcsIG1vZGVsKTsKLSAgICAgIH0KLSAgICB9Ci0gIH07Ci0KLSAgZnVuY3Rp
b24gY2hpbGRPdXRsZXRTdGF0ZShuYW1lLCBlbnYpIHsKLSAgICB2YXIgdG9wTGV2ZWwgPSBlbnYu
dmlldy5vd25lclZpZXc7Ci0gICAgaWYgKCF0b3BMZXZlbCB8fCAhdG9wTGV2ZWwub3V0bGV0U3Rh
dGUpIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICB2YXIgb3V0bGV0U3RhdGUgPSB0b3BM
ZXZlbC5vdXRsZXRTdGF0ZTsKLSAgICBpZiAoIW91dGxldFN0YXRlLm1haW4pIHsKLSAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICB2YXIgc2VsZWN0ZWRPdXRsZXRTdGF0ZSA9IG91dGxldFN0YXRl
Lm1haW4ub3V0bGV0c1snX19lbWJlcl9vcnBoYW5zX18nXTsKLSAgICBpZiAoIXNlbGVjdGVkT3V0
bGV0U3RhdGUpIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgdmFyIG1hdGNoZWQgPSBzZWxl
Y3RlZE91dGxldFN0YXRlLm91dGxldHNbbmFtZV07Ci0gICAgaWYgKG1hdGNoZWQpIHsKLSAgICAg
IHZhciBjaGlsZFN0YXRlID0gbmV3IF9lbWJlck1ldGFsRW1wdHlfb2JqZWN0LmRlZmF1bHQoKTsK
LSAgICAgIGNoaWxkU3RhdGVbbWF0Y2hlZC5yZW5kZXIub3V0bGV0XSA9IG1hdGNoZWQ7Ci0gICAg
ICBtYXRjaGVkLndhc1VzZWQgPSB0cnVlOwotICAgICAgcmV0dXJuIGNoaWxkU3RhdGU7Ci0gICAg
fQotICB9Ci0KLSAgZnVuY3Rpb24gaXNTdGFibGUoYSwgYikgewotICAgIGlmICghYSAmJiAhYikg
ewotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGlmICghYSB8fCAhYikgewotICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBmb3IgKHZhciBvdXRsZXROYW1lIGluIGEpIHsKLSAg
ICAgIGlmICghaXNTdGFibGVPdXRsZXQoYVtvdXRsZXROYW1lXSwgYltvdXRsZXROYW1lXSkpIHsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsK
LSAgfQotCi0gIGZ1bmN0aW9uIGlzU3RhYmxlT3V0bGV0KGEsIGIpIHsKLSAgICBpZiAoIWEgJiYg
IWIpIHsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBpZiAoIWEgfHwgIWIpIHsKLSAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgYSA9IGEucmVuZGVyOwotICAgIGIgPSBiLnJl
bmRlcjsKLSAgICBmb3IgKHZhciBrZXkgaW4gYSkgewotICAgICAgaWYgKGEuaGFzT3duUHJvcGVy
dHkoa2V5KSkgewotICAgICAgICAvLyBuYW1lIGlzIG9ubHkgaGVyZSBmb3IgbG9nZ2luZyAmIGRl
YnVnZ2luZy4gSWYgdHdvIGRpZmZlcmVudAotICAgICAgICAvLyBuYW1lcyByZXN1bHQgaW4gb3Ro
ZXJ3aXNlIGlkZW50aWNhbCBzdGF0ZXMsIHRoZXkncmUgc3RpbGwKLSAgICAgICAgLy8gaWRlbnRp
Y2FsLgotICAgICAgICBpZiAoYVtrZXldICE9PSBiW2tleV0gJiYga2V5ICE9PSAnbmFtZScpIHsK
LSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAg
cmV0dXJuIHRydWU7Ci0gIH0KLX0pOwotZW5pZmVkKCdlbWJlci1yb3V0aW5nLXZpZXdzL2NvbXBv
bmVudHMvbGluay10bycsIFsnZXhwb3J0cycsICdlbWJlci1tZXRhbC9mZWF0dXJlcycsICdlbWJl
ci1tZXRhbC9sb2dnZXInLCAnZW1iZXItbWV0YWwvZGVidWcnLCAnZW1iZXItbWV0YWwvcHJvcGVy
dHlfZ2V0JywgJ2VtYmVyLW1ldGFsL2NvbXB1dGVkJywgJ2VtYmVyLW1ldGFsL2NvbXB1dGVkX21h
Y3JvcycsICdlbWJlci12aWV3cy9zeXN0ZW0vdXRpbHMnLCAnZW1iZXItdmlld3MvY29tcG9uZW50
cy9jb21wb25lbnQnLCAnZW1iZXItcnVudGltZS9pbmplY3QnLCAnZW1iZXItcnVudGltZS9zeXN0
ZW0vc2VydmljZScsICdlbWJlci1ydW50aW1lL21peGlucy9jb250cm9sbGVyJywgJ2VtYmVyLWh0
bWxiYXJzL25vZGUtbWFuYWdlcnMvY29tcG9uZW50LW5vZGUtbWFuYWdlcicsICdlbWJlci1odG1s
YmFycy90ZW1wbGF0ZXMvbGluay10bycsICdyZXF1aXJlJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBf
ZW1iZXJNZXRhbEZlYXR1cmVzLCBfZW1iZXJNZXRhbExvZ2dlciwgX2VtYmVyTWV0YWxEZWJ1Zywg
X2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQsIF9lbWJlck1ldGFsQ29tcHV0ZWQsIF9lbWJlck1ldGFs
Q29tcHV0ZWRfbWFjcm9zLCBfZW1iZXJWaWV3c1N5c3RlbVV0aWxzLCBfZW1iZXJWaWV3c0NvbXBv
bmVudHNDb21wb25lbnQsIF9lbWJlclJ1bnRpbWVJbmplY3QsIF9lbWJlclJ1bnRpbWVTeXN0ZW1T
ZXJ2aWNlLCBfZW1iZXJSdW50aW1lTWl4aW5zQ29udHJvbGxlciwgX2VtYmVySHRtbGJhcnNOb2Rl
TWFuYWdlcnNDb21wb25lbnROb2RlTWFuYWdlciwgX2VtYmVySHRtbGJhcnNUZW1wbGF0ZXNMaW5r
VG8sIF9yZXF1aXJlKSB7Ci0gIC8qKgotICBAbW9kdWxlIGVtYmVyCi0gIEBzdWJtb2R1bGUgZW1i
ZXItdGVtcGxhdGVzCi0gICovCi0KLSAgLyoqCi0gICAgVGhlIGB7e2xpbmstdG99fWAgY29tcG9u
ZW50IHJlbmRlcnMgYSBsaW5rIHRvIHRoZSBzdXBwbGllZAotICAgIGByb3V0ZU5hbWVgIHBhc3Np
bmcgYW4gb3B0aW9uYWxseSBzdXBwbGllZCBtb2RlbCB0byB0aGUKLSAgICByb3V0ZSBhcyBpdHMg
YG1vZGVsYCBjb250ZXh0IG9mIHRoZSByb3V0ZS4gVGhlIGJsb2NrCi0gICAgZm9yIGB7e2xpbmst
dG99fWAgYmVjb21lcyB0aGUgaW5uZXJIVE1MIG9mIHRoZSByZW5kZXJlZAotICAgIGVsZW1lbnQ6
Ci0gIAotICAgIGBgYGhhbmRsZWJhcnMKLSAgICB7eyNsaW5rLXRvICdwaG90b0dhbGxlcnknfX0K
LSAgICAgIEdyZWF0IEhhbXN0ZXIgUGhvdG9zCi0gICAge3svbGluay10b319Ci0gICAgYGBgCi0g
IAotICAgIFlvdSBjYW4gYWxzbyB1c2UgYW4gaW5saW5lIGZvcm0gb2YgYHt7bGluay10b319YCBj
b21wb25lbnQgYnkKLSAgICBwYXNzaW5nIHRoZSBsaW5rIHRleHQgYXMgdGhlIGZpcnN0IGFyZ3Vt
ZW50Ci0gICAgdG8gdGhlIGNvbXBvbmVudDoKLSAgCi0gICAgYGBgaGFuZGxlYmFycwotICAgIHt7
bGluay10byAnR3JlYXQgSGFtc3RlciBQaG90b3MnICdwaG90b0dhbGxlcnknfX0KLSAgICBgYGAK
LSAgCi0gICAgQm90aCB3aWxsIHJlc3VsdCBpbjoKLSAgCi0gICAgYGBgaHRtbAotICAgIDxhIGhy
ZWY9Ii9oYW1zdGVyLXBob3RvcyI+Ci0gICAgICBHcmVhdCBIYW1zdGVyIFBob3RvcwotICAgIDwv
YT4KLSAgICBgYGAKLSAgCi0gICAgIyMjIFN1cHBseWluZyBhIHRhZ05hbWUKLSAgICBCeSBkZWZh
dWx0IGB7e2xpbmstdG99fWAgcmVuZGVycyBhbiBgPGE+YCBlbGVtZW50LiBUaGlzIGNhbgotICAg
IGJlIG92ZXJyaWRkZW4gZm9yIGEgc2luZ2xlIHVzZSBvZiBge3tsaW5rLXRvfX1gIGJ5IHN1cHBs
eWluZwotICAgIGEgYHRhZ05hbWVgIG9wdGlvbjoKLSAgCi0gICAgYGBgaGFuZGxlYmFycwotICAg
IHt7I2xpbmstdG8gJ3Bob3RvR2FsbGVyeScgdGFnTmFtZT0ibGkifX0KLSAgICAgIEdyZWF0IEhh
bXN0ZXIgUGhvdG9zCi0gICAge3svbGluay10b319Ci0gICAgYGBgCi0gIAotICAgIGBgYGh0bWwK
LSAgICA8bGk+Ci0gICAgICBHcmVhdCBIYW1zdGVyIFBob3RvcwotICAgIDwvbGk+Ci0gICAgYGBg
Ci0gIAotICAgIFRvIG92ZXJyaWRlIHRoaXMgb3B0aW9uIGZvciB5b3VyIGVudGlyZSBhcHBsaWNh
dGlvbiwgc2VlCi0gICAgIk92ZXJyaWRpbmcgQXBwbGljYXRpb24td2lkZSBEZWZhdWx0cyIuCi0g
IAotICAgICMjIyBEaXNhYmxpbmcgdGhlIGBsaW5rLXRvYCBjb21wb25lbnQKLSAgICBCeSBkZWZh
dWx0IGB7e2xpbmstdG99fWAgaXMgZW5hYmxlZC4KLSAgICBhbnkgcGFzc2VkIHZhbHVlIHRvIHRo
ZSBgZGlzYWJsZWRgIGNvbXBvbmVudCBwcm9wZXJ0eSB3aWxsIGRpc2FibGUKLSAgICB0aGUgYGxp
bmstdG9gIGNvbXBvbmVudC4KLSAgCi0gICAgc3RhdGljIHVzZTogdGhlIGBkaXNhYmxlZGAgb3B0
aW9uOgotICAKLSAgICBgYGBoYW5kbGViYXJzCi0gICAge3sjbGluay10byAncGhvdG9HYWxsZXJ5
JyBkaXNhYmxlZD10cnVlfX0KLSAgICAgIEdyZWF0IEhhbXN0ZXIgUGhvdG9zCi0gICAge3svbGlu
ay10b319Ci0gICAgYGBgCi0gIAotICAgIGR5bmFtaWMgdXNlOiB0aGUgYGRpc2FibGVkV2hlbmAg
b3B0aW9uOgotICAKLSAgICBgYGBoYW5kbGViYXJzCi0gICAge3sjbGluay10byAncGhvdG9HYWxs
ZXJ5JyBkaXNhYmxlZFdoZW49Y29udHJvbGxlci5zb21lUHJvcGVydHl9fQotICAgICAgR3JlYXQg
SGFtc3RlciBQaG90b3MKLSAgICB7ey9saW5rLXRvfX0KLSAgICBgYGAKLSAgCi0gICAgYW55IHBh
c3NlZCB2YWx1ZSB0byBgZGlzYWJsZWRgIHdpbGwgZGlzYWJsZSBpdCBleGNlcHQgYHVuZGVmaW5l
ZGAuCi0gICAgdG8gZW5zdXJlIHRoYXQgb25seSBgdHJ1ZWAgZGlzYWJsZSB0aGUgYGxpbmstdG9g
IGNvbXBvbmVudCB5b3UgY2FuCi0gICAgb3ZlcnJpZGUgdGhlIGdsb2JhbCBiZWhhdmlvdXIgb2Yg
YEVtYmVyLkxpbmtDb21wb25lbnRgLgotICAKLSAgICBgYGBqYXZhc2NyaXB0Ci0gICAgRW1iZXIu
TGlua0NvbXBvbmVudC5yZW9wZW4oewotICAgICAgZGlzYWJsZWQ6IEVtYmVyLmNvbXB1dGVkKGZ1
bmN0aW9uKGtleSwgdmFsdWUpIHsKLSAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHsK
LSAgICAgICAgICB0aGlzLnNldCgnX2lzRGlzYWJsZWQnLCB2YWx1ZSA9PT0gdHJ1ZSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuIHZhbHVlID09PSB0cnVlID8gZ2V0KHRoaXMsICdkaXNhYmxl
ZENsYXNzJykgOiBmYWxzZTsKLSAgICAgIH0pCi0gICAgfSk7Ci0gICAgYGBgCi0gIAotICAgIHNl
ZSAiT3ZlcnJpZGluZyBBcHBsaWNhdGlvbi13aWRlIERlZmF1bHRzIiBmb3IgbW9yZS4KLSAgCi0g
ICAgIyMjIEhhbmRsaW5nIGBocmVmYAotICAgIGB7e2xpbmstdG99fWAgd2lsbCB1c2UgeW91ciBh
cHBsaWNhdGlvbidzIFJvdXRlciB0bwotICAgIGZpbGwgdGhlIGVsZW1lbnQncyBgaHJlZmAgcHJv
cGVydHkgd2l0aCBhIHVybCB0aGF0Ci0gICAgbWF0Y2hlcyB0aGUgcGF0aCB0byB0aGUgc3VwcGxp
ZWQgYHJvdXRlTmFtZWAgZm9yIHlvdXIKLSAgICByb3V0ZXIncyBjb25maWd1cmVkIGBMb2NhdGlv
bmAgc2NoZW1lLCB3aGljaCBkZWZhdWx0cwotICAgIHRvIEVtYmVyLkhhc2hMb2NhdGlvbi4KLSAg
Ci0gICAgIyMjIEhhbmRsaW5nIGN1cnJlbnQgcm91dGUKLSAgICBge3tsaW5rLXRvfX1gIHdpbGwg
YXBwbHkgYSBDU1MgY2xhc3MgbmFtZSBvZiAnYWN0aXZlJwotICAgIHdoZW4gdGhlIGFwcGxpY2F0
aW9uJ3MgY3VycmVudCByb3V0ZSBtYXRjaGVzCi0gICAgdGhlIHN1cHBsaWVkIHJvdXRlTmFtZS4g
Rm9yIGV4YW1wbGUsIGlmIHRoZSBhcHBsaWNhdGlvbidzCi0gICAgY3VycmVudCByb3V0ZSBpcyAn
cGhvdG9HYWxsZXJ5LnJlY2VudCcgdGhlIGZvbGxvd2luZwotICAgIHVzZSBvZiBge3tsaW5rLXRv
fX1gOgotICAKLSAgICBgYGBoYW5kbGViYXJzCi0gICAge3sjbGluay10byAncGhvdG9HYWxsZXJ5
LnJlY2VudCd9fQotICAgICAgR3JlYXQgSGFtc3RlciBQaG90b3MKLSAgICB7ey9saW5rLXRvfX0K
LSAgICBgYGAKLSAgCi0gICAgd2lsbCByZXN1bHQgaW4KLSAgCi0gICAgYGBgaHRtbAotICAgIDxh
IGhyZWY9Ii9oYW1zdGVyLXBob3Rvcy90aGlzLXdlZWsiIGNsYXNzPSJhY3RpdmUiPgotICAgICAg
R3JlYXQgSGFtc3RlciBQaG90b3MKLSAgICA8L2E+Ci0gICAgYGBgCi0gIAotICAgIFRoZSBDU1Mg
Y2xhc3MgbmFtZSB1c2VkIGZvciBhY3RpdmUgY2xhc3NlcyBjYW4gYmUgY3VzdG9taXplZAotICAg
IGZvciBhIHNpbmdsZSB1c2Ugb2YgYHt7bGluay10b319YCBieSBwYXNzaW5nIGFuIGBhY3RpdmVD
bGFzc2AKLSAgICBvcHRpb246Ci0gIAotICAgIGBgYGhhbmRsZWJhcnMKLSAgICB7eyNsaW5rLXRv
ICdwaG90b0dhbGxlcnkucmVjZW50JyBhY3RpdmVDbGFzcz0iY3VycmVudC11cmwifX0KLSAgICAg
IEdyZWF0IEhhbXN0ZXIgUGhvdG9zCi0gICAge3svbGluay10b319Ci0gICAgYGBgCi0gIAotICAg
IGBgYGh0bWwKLSAgICA8YSBocmVmPSIvaGFtc3Rlci1waG90b3MvdGhpcy13ZWVrIiBjbGFzcz0i
Y3VycmVudC11cmwiPgotICAgICAgR3JlYXQgSGFtc3RlciBQaG90b3MKLSAgICA8L2E+Ci0gICAg
YGBgCi0gIAotICAgIFRvIG92ZXJyaWRlIHRoaXMgb3B0aW9uIGZvciB5b3VyIGVudGlyZSBhcHBs
aWNhdGlvbiwgc2VlCi0gICAgIk92ZXJyaWRpbmcgQXBwbGljYXRpb24td2lkZSBEZWZhdWx0cyIu
Ci0gIAotICAgICMjIyBLZWVwaW5nIGEgbGluayBhY3RpdmUgZm9yIG90aGVyIHJvdXRlcwotICAK
LSAgICBJZiB5b3UgbmVlZCBhIGxpbmsgdG8gYmUgJ2FjdGl2ZScgZXZlbiB3aGVuIGl0IGRvZXNu
J3QgbWF0Y2gKLSAgICB0aGUgY3VycmVudCByb3V0ZSwgeW91IGNhbiB1c2UgdGhlIGBjdXJyZW50
LXdoZW5gIGFyZ3VtZW50LgotICAKLSAgICBgYGBoYW5kbGViYXJzCi0gICAge3sjbGluay10byAn
cGhvdG9HYWxsZXJ5JyBjdXJyZW50LXdoZW49J3Bob3Rvcyd9fQotICAgICAgUGhvdG8gR2FsbGVy
eQotICAgIHt7L2xpbmstdG99fQotICAgIGBgYAotICAKLSAgICBUaGlzIG1heSBiZSBoZWxwZnVs
IGZvciBrZWVwaW5nIGxpbmtzIGFjdGl2ZSBmb3I6Ci0gIAotICAgICogbm9uLW5lc3RlZCByb3V0
ZXMgdGhhdCBhcmUgbG9naWNhbGx5IHJlbGF0ZWQKLSAgICAqIHNvbWUgc2Vjb25kYXJ5IG1lbnUg
YXBwcm9hY2hlcwotICAgICogJ3RvcCBuYXZpZ2F0aW9uJyB3aXRoICdzdWIgbmF2aWdhdGlvbicg
c2NlbmFyaW9zCi0gIAotICAgIEEgbGluayB3aWxsIGJlIGFjdGl2ZSBpZiBgY3VycmVudC13aGVu
YCBpcyBgdHJ1ZWAgb3IgdGhlIGN1cnJlbnQKLSAgICByb3V0ZSBpcyB0aGUgcm91dGUgdGhpcyBs
aW5rIHdvdWxkIHRyYW5zaXRpb24gdG8uCi0gIAotICAgIFRvIG1hdGNoIG11bHRpcGxlIHJvdXRl
cyAnc3BhY2Utc2VwYXJhdGUnIHRoZSByb3V0ZXM6Ci0gIAotICAgIGBgYGhhbmRsZWJhcnMKLSAg
ICB7eyNsaW5rLXRvICdnYWxsZXJ5JyBjdXJyZW50LXdoZW49J3Bob3RvcyBkcmF3aW5ncyBwYWlu
dGluZ3MnfX0KLSAgICAgIEFydCBHYWxsZXJ5Ci0gICAge3svbGluay10b319Ci0gICAgYGBgCi0g
IAotICAgICMjIyBTdXBwbHlpbmcgYSBtb2RlbAotICAgIEFuIG9wdGlvbmFsIG1vZGVsIGFyZ3Vt
ZW50IGNhbiBiZSB1c2VkIGZvciByb3V0ZXMgd2hvc2UKLSAgICBwYXRocyBjb250YWluIGR5bmFt
aWMgc2VnbWVudHMuIFRoaXMgYXJndW1lbnQgd2lsbCBiZWNvbWUKLSAgICB0aGUgbW9kZWwgY29u
dGV4dCBvZiB0aGUgbGlua2VkIHJvdXRlOgotICAKLSAgICBgYGBqYXZhc2NyaXB0Ci0gICAgUm91
dGVyLm1hcChmdW5jdGlvbigpIHsKLSAgICAgIHRoaXMucm91dGUoInBob3RvR2FsbGVyeSIsIHtw
YXRoOiAiaGFtc3Rlci1waG90b3MvOnBob3RvX2lkIn0pOwotICAgIH0pOwotICAgIGBgYAotICAK
LSAgICBgYGBoYW5kbGViYXJzCi0gICAge3sjbGluay10byAncGhvdG9HYWxsZXJ5JyBhUGhvdG99
fQotICAgICAge3thUGhvdG8udGl0bGV9fQotICAgIHt7L2xpbmstdG99fQotICAgIGBgYAotICAK
LSAgICBgYGBodG1sCi0gICAgPGEgaHJlZj0iL2hhbXN0ZXItcGhvdG9zLzQyIj4KLSAgICAgIFRv
bXN0ZXIKLSAgICA8L2E+Ci0gICAgYGBgCi0gIAotICAgICMjIyBTdXBwbHlpbmcgbXVsdGlwbGUg
bW9kZWxzCi0gICAgRm9yIGRlZXAtbGlua2luZyB0byByb3V0ZSBwYXRocyB0aGF0IGNvbnRhaW4g
bXVsdGlwbGUKLSAgICBkeW5hbWljIHNlZ21lbnRzLCBtdWx0aXBsZSBtb2RlbCBhcmd1bWVudHMg
Y2FuIGJlIHVzZWQuCi0gICAgQXMgdGhlIHJvdXRlciB0cmFuc2l0aW9ucyB0aHJvdWdoIHRoZSBy
b3V0ZSBwYXRoLCBlYWNoCi0gICAgc3VwcGxpZWQgbW9kZWwgYXJndW1lbnQgd2lsbCBiZWNvbWUg
dGhlIGNvbnRleHQgZm9yIHRoZQotICAgIHJvdXRlIHdpdGggdGhlIGR5bmFtaWMgc2VnbWVudHM6
Ci0gIAotICAgIGBgYGphdmFzY3JpcHQKLSAgICBSb3V0ZXIubWFwKGZ1bmN0aW9uKCkgewotICAg
ICAgdGhpcy5yb3V0ZSgicGhvdG9HYWxsZXJ5IiwgeyBwYXRoOiAiaGFtc3Rlci1waG90b3MvOnBo
b3RvX2lkIiB9LCBmdW5jdGlvbigpIHsKLSAgICAgICAgdGhpcy5yb3V0ZSgiY29tbWVudCIsIHtw
YXRoOiAiY29tbWVudHMvOmNvbW1lbnRfaWQifSk7Ci0gICAgICB9KTsKLSAgICB9KTsKLSAgICBg
YGAKLSAgICBUaGlzIGFyZ3VtZW50IHdpbGwgYmVjb21lIHRoZSBtb2RlbCBjb250ZXh0IG9mIHRo
ZSBsaW5rZWQgcm91dGU6Ci0gIAotICAgIGBgYGhhbmRsZWJhcnMKLSAgICB7eyNsaW5rLXRvICdw
aG90b0dhbGxlcnkuY29tbWVudCcgYVBob3RvIGNvbW1lbnR9fQotICAgICAge3tjb21tZW50LmJv
ZHl9fQotICAgIHt7L2xpbmstdG99fQotICAgIGBgYAotICAKLSAgICBgYGBodG1sCi0gICAgPGEg
aHJlZj0iL2hhbXN0ZXItcGhvdG9zLzQyL2NvbW1lbnRzLzcxOCI+Ci0gICAgICBBKysrIHdvdWxk
IHNudWdnbGUgYWdhaW4uCi0gICAgPC9hPgotICAgIGBgYAotICAKLSAgICAjIyMgU3VwcGx5aW5n
IGFuIGV4cGxpY2l0IGR5bmFtaWMgc2VnbWVudCB2YWx1ZQotICAgIElmIHlvdSBkb24ndCBoYXZl
IGEgbW9kZWwgb2JqZWN0IGF2YWlsYWJsZSB0byBwYXNzIHRvIGB7e2xpbmstdG99fWAsCi0gICAg
YW4gb3B0aW9uYWwgc3RyaW5nIG9yIGludGVnZXIgYXJndW1lbnQgY2FuIGJlIHBhc3NlZCBmb3Ig
cm91dGVzIHdob3NlCi0gICAgcGF0aHMgY29udGFpbiBkeW5hbWljIHNlZ21lbnRzLiBUaGlzIGFy
Z3VtZW50IHdpbGwgYmVjb21lIHRoZSB2YWx1ZQotICAgIG9mIHRoZSBkeW5hbWljIHNlZ21lbnQ6
Ci0gIAotICAgIGBgYGphdmFzY3JpcHQKLSAgICBSb3V0ZXIubWFwKGZ1bmN0aW9uKCkgewotICAg
ICAgdGhpcy5yb3V0ZSgicGhvdG9HYWxsZXJ5IiwgeyBwYXRoOiAiaGFtc3Rlci1waG90b3MvOnBo
b3RvX2lkIiB9KTsKLSAgICB9KTsKLSAgICBgYGAKLSAgCi0gICAgYGBgaGFuZGxlYmFycwotICAg
IHt7I2xpbmstdG8gJ3Bob3RvR2FsbGVyeScgYVBob3RvSWR9fQotICAgICAge3thUGhvdG8udGl0
bGV9fQotICAgIHt7L2xpbmstdG99fQotICAgIGBgYAotICAKLSAgICBgYGBodG1sCi0gICAgPGEg
aHJlZj0iL2hhbXN0ZXItcGhvdG9zLzQyIj4KLSAgICAgIFRvbXN0ZXIKLSAgICA8L2E+Ci0gICAg
YGBgCi0gIAotICAgIFdoZW4gdHJhbnNpdGlvbmluZyBpbnRvIHRoZSBsaW5rZWQgcm91dGUsIHRo
ZSBgbW9kZWxgIGhvb2sgd2lsbAotICAgIGJlIHRyaWdnZXJlZCB3aXRoIHBhcmFtZXRlcnMgaW5j
bHVkaW5nIHRoaXMgcGFzc2VkIGlkZW50aWZpZXIuCi0gIAotICAgICMjIyBBbGxvd2luZyBEZWZh
dWx0IEFjdGlvbgotICAKLSAgIEJ5IGRlZmF1bHQgdGhlIGB7e2xpbmstdG99fWAgY29tcG9uZW50
IHByZXZlbnRzIHRoZSBkZWZhdWx0IGJyb3dzZXIgYWN0aW9uCi0gICBieSBjYWxsaW5nIGBwcmV2
ZW50RGVmYXVsdCgpYCBhcyB0aGlzIHNvcnQgb2YgYWN0aW9uIGJ1YmJsaW5nIGlzIG5vcm1hbGx5
Ci0gICBoYW5kbGVkIGludGVybmFsbHkgYW5kIHdlIGRvIG5vdCB3YW50IHRvIHRha2UgdGhlIGJy
b3dzZXIgdG8gYSBuZXcgVVJMIChmb3IKLSAgIGV4YW1wbGUpLgotICAKLSAgIElmIHlvdSBuZWVk
IHRvIG92ZXJyaWRlIHRoaXMgYmVoYXZpb3Igc3BlY2lmeSBgcHJldmVudERlZmF1bHQ9ZmFsc2Vg
IGluCi0gICB5b3VyIHRlbXBsYXRlOgotICAKLSAgICBgYGBoYW5kbGViYXJzCi0gICAge3sjbGlu
ay10byAncGhvdG9HYWxsZXJ5JyBhUGhvdG9JZCBwcmV2ZW50RGVmYXVsdD1mYWxzZX19Ci0gICAg
ICB7e2FQaG90b0lkLnRpdGxlfX0KLSAgICB7ey9saW5rLXRvfX0KLSAgICBgYGAKLSAgCi0gICAg
IyMjIE92ZXJyaWRpbmcgYXR0cmlidXRlcwotICAgIFlvdSBjYW4gb3ZlcnJpZGUgYW55IGdpdmVu
IHByb3BlcnR5IG9mIHRoZSBgRW1iZXIuTGlua0NvbXBvbmVudGAKLSAgICB0aGF0IGlzIGdlbmVy
YXRlZCBieSB0aGUgYHt7bGluay10b319YCBjb21wb25lbnQgYnkgcGFzc2luZwotICAgIGtleS92
YWx1ZSBwYWlycywgbGlrZSBzbzoKLSAgCi0gICAgYGBgaGFuZGxlYmFycwotICAgIHt7I2xpbmst
dG8gIGFQaG90byB0YWdOYW1lPSdsaScgdGl0bGU9J0ZvbGxvd2luZyB0aGlzIGxpbmsgd2lsbCBj
aGFuZ2UgeW91ciBsaWZlJyBjbGFzc05hbWVzPSdwaWMgc3dlZXQnfX0KLSAgICAgIFVoLW1hemlu
ZyEKLSAgICB7ey9saW5rLXRvfX0KLSAgICBgYGAKLSAgCi0gICAgU2VlIFtFbWJlci5MaW5rQ29t
cG9uZW50XSgvYXBpL2NsYXNzZXMvRW1iZXIuTGlua0NvbXBvbmVudC5odG1sKSBmb3IgYQotICAg
IGNvbXBsZXRlIGxpc3Qgb2Ygb3ZlcnJpZGVhYmxlIHByb3BlcnRpZXMuIEJlIHN1cmUgdG8gYWxz
bwotICAgIGNoZWNrIG91dCBpbmhlcml0ZWQgcHJvcGVydGllcyBvZiBgTGlua0NvbXBvbmVudGAu
Ci0gIAotICAgICMjIyBPdmVycmlkaW5nIEFwcGxpY2F0aW9uLXdpZGUgRGVmYXVsdHMKLSAgICBg
YHt7bGluay10b319YGAgY3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBgRW1iZXIuTGlua0NvbXBvbmVu
dGAKLSAgICBmb3IgcmVuZGVyaW5nLiBUbyBvdmVycmlkZSBvcHRpb25zIGZvciB5b3VyIGVudGly
ZQotICAgIGFwcGxpY2F0aW9uLCByZW9wZW4gYEVtYmVyLkxpbmtDb21wb25lbnRgIGFuZCBzdXBw
bHkgdGhlCi0gICAgZGVzaXJlZCB2YWx1ZXM6Ci0gIAotICAgIGBgYCBqYXZhc2NyaXB0Ci0gICAg
RW1iZXIuTGlua0NvbXBvbmVudC5yZW9wZW4oewotICAgICAgYWN0aXZlQ2xhc3M6ICJpcy1hY3Rp
dmUiLAotICAgICAgdGFnTmFtZTogJ2xpJwotICAgIH0pCi0gICAgYGBgCi0gIAotICAgIEl0IGlz
IGFsc28gcG9zc2libGUgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgZXZlbnQgaW4KLSAgICB0aGlz
IG1hbm5lcjoKLSAgCi0gICAgYGBgIGphdmFzY3JpcHQKLSAgICBFbWJlci5MaW5rQ29tcG9uZW50
LnJlb3Blbih7Ci0gICAgICBldmVudE5hbWU6ICdjdXN0b21FdmVudE5hbWUnCi0gICAgfSk7Ci0g
ICAgYGBgCi0gIAotICAgIEBtZXRob2QgbGluay10bwotICAgIEBmb3IgRW1iZXIuVGVtcGxhdGVz
LmhlbHBlcnMKLSAgICBAcGFyYW0ge1N0cmluZ30gcm91dGVOYW1lCi0gICAgQHBhcmFtIHtPYmpl
Y3R9IFtjb250ZXh0XSoKLSAgICBAcGFyYW0gW29wdGlvbnNdIHtPYmplY3R9IEhhbmRsZWJhcnMg
a2V5L3ZhbHVlIHBhaXJzIG9mIG9wdGlvbnMsIHlvdSBjYW4gb3ZlcnJpZGUgYW55IHByb3BlcnR5
IG9mIEVtYmVyLkxpbmtDb21wb25lbnQKLSAgICBAcmV0dXJuIHtTdHJpbmd9IEhUTUwgc3RyaW5n
Ci0gICAgQHNlZSB7RW1iZXIuTGlua0NvbXBvbmVudH0KLSAgICBAcHVibGljCi0gICovCi0KLSAg
LyoqCi0gIEBtb2R1bGUgZW1iZXIKLSAgQHN1Ym1vZHVsZSBlbWJlci1yb3V0aW5nLXZpZXdzCi0g
ICovCi0KLSAgJ3VzZSBzdHJpY3QnOwotCi0gIHZhciBsYXlvdXQgPSBfZW1iZXJIdG1sYmFyc1Rl
bXBsYXRlc0xpbmtUby5kZWZhdWx0OwotCi0gIC8qKgotICAgIGBFbWJlci5MaW5rQ29tcG9uZW50
YCByZW5kZXJzIGFuIGVsZW1lbnQgd2hvc2UgYGNsaWNrYCBldmVudCB0cmlnZ2VycyBhCi0gICAg
dHJhbnNpdGlvbiBvZiB0aGUgYXBwbGljYXRpb24ncyBpbnN0YW5jZSBvZiBgRW1iZXIuUm91dGVy
YCB0bwotICAgIGEgc3VwcGxpZWQgcm91dGUgYnkgbmFtZS4KLSAgCi0gICAgYEVtYmVyLkxpbmtD
b21wb25lbnRgIGNvbXBvbmVudHMgYXJlIGludm9rZWQgd2l0aCB7eyNsaW5rLXRvfX0uIFByb3Bl
cnRpZXMKLSAgICBvZiB0aGlzIGNsYXNzIGNhbiBiZSBvdmVycmlkZGVuIHdpdGggYHJlb3BlbmAg
dG8gY3VzdG9taXplIGFwcGxpY2F0aW9uLXdpZGUKLSAgICBiZWhhdmlvci4KLSAgCi0gICAgQGNs
YXNzIExpbmtDb21wb25lbnQKLSAgICBAbmFtZXNwYWNlIEVtYmVyCi0gICAgQGV4dGVuZHMgRW1i
ZXIuQ29tcG9uZW50Ci0gICAgQHNlZSB7RW1iZXIuVGVtcGxhdGVzLmhlbHBlcnMubGluay10b30K
LSAgICBAcHJpdmF0ZQotICAqKi8KLSAgdmFyIExpbmtDb21wb25lbnQgPSBfZW1iZXJWaWV3c0Nv
bXBvbmVudHNDb21wb25lbnQuZGVmYXVsdC5leHRlbmQoewotICAgIGxheW91dDogbGF5b3V0LAot
Ci0gICAgdGFnTmFtZTogJ2EnLAotCi0gICAgLyoqCi0gICAgICBAZGVwcmVjYXRlZCBVc2UgY3Vy
cmVudC13aGVuIGluc3RlYWQuCi0gICAgICBAcHJvcGVydHkgY3VycmVudFdoZW4KLSAgICAgIEBw
cml2YXRlCi0gICAgKi8KLSAgICBjdXJyZW50V2hlbjogX2VtYmVyTWV0YWxDb21wdXRlZF9tYWNy
b3MuZGVwcmVjYXRpbmdBbGlhcygnY3VycmVudC13aGVuJywgeyBpZDogJ2VtYmVyLXJvdXRpbmct
dmlldy5kZXByZWNhdGVkLWN1cnJlbnQtd2hlbicsIHVudGlsOiAnMy4wLjAnIH0pLAotCi0gICAg
LyoqCi0gICAgICBVc2VkIHRvIGRldGVybWluZSB3aGVuIHRoaXMgYExpbmtDb21wb25lbnRgIGlz
IGFjdGl2ZS4KLSAgICAgICBAcHJvcGVydHkgY3VycmVudFdoZW4KLSAgICAgIEBwdWJsaWMKLSAg
ICAqLwotICAgICdjdXJyZW50LXdoZW4nOiBudWxsLAotCi0gICAgLyoqCi0gICAgICBTZXRzIHRo
ZSBgdGl0bGVgIGF0dHJpYnV0ZSBvZiB0aGUgYExpbmtDb21wb25lbnRgJ3MgSFRNTCBlbGVtZW50
LgotICAgICAgIEBwcm9wZXJ0eSB0aXRsZQotICAgICAgQGRlZmF1bHQgbnVsbAotICAgICAgQHB1
YmxpYwotICAgICoqLwotICAgIHRpdGxlOiBudWxsLAotCi0gICAgLyoqCi0gICAgICBTZXRzIHRo
ZSBgcmVsYCBhdHRyaWJ1dGUgb2YgdGhlIGBMaW5rQ29tcG9uZW50YCdzIEhUTUwgZWxlbWVudC4K
LSAgICAgICBAcHJvcGVydHkgcmVsCi0gICAgICBAZGVmYXVsdCBudWxsCi0gICAgICBAcHVibGlj
Ci0gICAgKiovCi0gICAgcmVsOiBudWxsLAotCi0gICAgLyoqCi0gICAgICBTZXRzIHRoZSBgdGFi
aW5kZXhgIGF0dHJpYnV0ZSBvZiB0aGUgYExpbmtDb21wb25lbnRgJ3MgSFRNTCBlbGVtZW50Lgot
ICAgICAgIEBwcm9wZXJ0eSB0YWJpbmRleAotICAgICAgQGRlZmF1bHQgbnVsbAotICAgICAgQHB1
YmxpYwotICAgICoqLwotICAgIHRhYmluZGV4OiBudWxsLAotCi0gICAgLyoqCi0gICAgICBTZXRz
IHRoZSBgdGFyZ2V0YCBhdHRyaWJ1dGUgb2YgdGhlIGBMaW5rQ29tcG9uZW50YCdzIEhUTUwgZWxl
bWVudC4KLSAgICAgICBAc2luY2UgMS44LjAKLSAgICAgIEBwcm9wZXJ0eSB0YXJnZXQKLSAgICAg
IEBkZWZhdWx0IG51bGwKLSAgICAgIEBwdWJsaWMKLSAgICAqKi8KLSAgICB0YXJnZXQ6IG51bGws
Ci0KLSAgICAvKioKLSAgICAgIFRoZSBDU1MgY2xhc3MgdG8gYXBwbHkgdG8gYExpbmtDb21wb25l
bnRgJ3MgZWxlbWVudCB3aGVuIGl0cyBgYWN0aXZlYAotICAgICAgcHJvcGVydHkgaXMgYHRydWVg
LgotICAgICAgIEBwcm9wZXJ0eSBhY3RpdmVDbGFzcwotICAgICAgQHR5cGUgU3RyaW5nCi0gICAg
ICBAZGVmYXVsdCBhY3RpdmUKLSAgICAgIEBwcml2YXRlCi0gICAgKiovCi0gICAgYWN0aXZlQ2xh
c3M6ICdhY3RpdmUnLAotCi0gICAgLyoqCi0gICAgICBUaGUgQ1NTIGNsYXNzIHRvIGFwcGx5IHRv
IGBMaW5rQ29tcG9uZW50YCdzIGVsZW1lbnQgd2hlbiBpdHMgYGxvYWRpbmdgCi0gICAgICBwcm9w
ZXJ0eSBpcyBgdHJ1ZWAuCi0gICAgICAgQHByb3BlcnR5IGxvYWRpbmdDbGFzcwotICAgICAgQHR5
cGUgU3RyaW5nCi0gICAgICBAZGVmYXVsdCBsb2FkaW5nCi0gICAgICBAcHJpdmF0ZQotICAgICoq
LwotICAgIGxvYWRpbmdDbGFzczogJ2xvYWRpbmcnLAotCi0gICAgLyoqCi0gICAgICBUaGUgQ1NT
IGNsYXNzIHRvIGFwcGx5IHRvIGEgYExpbmtDb21wb25lbnRgJ3MgZWxlbWVudCB3aGVuIGl0cyBg
ZGlzYWJsZWRgCi0gICAgICBwcm9wZXJ0eSBpcyBgdHJ1ZWAuCi0gICAgICAgQHByb3BlcnR5IGRp
c2FibGVkQ2xhc3MKLSAgICAgIEB0eXBlIFN0cmluZwotICAgICAgQGRlZmF1bHQgZGlzYWJsZWQK
LSAgICAgIEBwcml2YXRlCi0gICAgKiovCi0gICAgZGlzYWJsZWRDbGFzczogJ2Rpc2FibGVkJywK
LSAgICBfaXNEaXNhYmxlZDogZmFsc2UsCi0KLSAgICAvKioKLSAgICAgIERldGVybWluZXMgd2hl
dGhlciB0aGUgYExpbmtDb21wb25lbnRgIHdpbGwgdHJpZ2dlciByb3V0aW5nIHZpYQotICAgICAg
dGhlIGByZXBsYWNlV2l0aGAgcm91dGluZyBzdHJhdGVneS4KLSAgICAgICBAcHJvcGVydHkgcmVw
bGFjZQotICAgICAgQHR5cGUgQm9vbGVhbgotICAgICAgQGRlZmF1bHQgZmFsc2UKLSAgICAgIEBw
dWJsaWMKLSAgICAqKi8KLSAgICByZXBsYWNlOiBmYWxzZSwKLQotICAgIC8qKgotICAgICAgQnkg
ZGVmYXVsdCB0aGUgYHt7bGluay10b319YCBjb21wb25lbnQgd2lsbCBiaW5kIHRvIHRoZSBgaHJl
ZmAgYW5kCi0gICAgICBgdGl0bGVgIGF0dHJpYnV0ZXMuIEl0J3MgZGlzY291cmFnZWQgdGhhdCB5
b3Ugb3ZlcnJpZGUgdGhlc2UgZGVmYXVsdHMsCi0gICAgICBob3dldmVyIHlvdSBjYW4gcHVzaCBv
bnRvIHRoZSBhcnJheSBpZiBuZWVkZWQuCi0gICAgICAgQHByb3BlcnR5IGF0dHJpYnV0ZUJpbmRp
bmdzCi0gICAgICBAdHlwZSBBcnJheSB8IFN0cmluZwotICAgICAgQGRlZmF1bHQgWyd0aXRsZScs
ICdyZWwnLCAndGFiaW5kZXgnLCAndGFyZ2V0J10KLSAgICAgIEBwdWJsaWMKLSAgICAqLwotICAg
IGF0dHJpYnV0ZUJpbmRpbmdzOiBbJ2hyZWYnLCAndGl0bGUnLCAncmVsJywgJ3RhYmluZGV4Jywg
J3RhcmdldCddLAotCi0gICAgLyoqCi0gICAgICBCeSBkZWZhdWx0IHRoZSBge3tsaW5rLXRvfX1g
IGNvbXBvbmVudCB3aWxsIGJpbmQgdG8gdGhlIGBhY3RpdmVgLCBgbG9hZGluZ2AsCi0gICAgICBh
bmQgYGRpc2FibGVkYCBjbGFzc2VzLiBJdCBpcyBkaXNjb3VyYWdlZCB0byBvdmVycmlkZSB0aGVz
ZSBkaXJlY3RseS4KLSAgICAgICBAcHJvcGVydHkgY2xhc3NOYW1lQmluZGluZ3MKLSAgICAgIEB0
eXBlIEFycmF5Ci0gICAgICBAZGVmYXVsdCBbJ2FjdGl2ZScsICdsb2FkaW5nJywgJ2Rpc2FibGVk
JywgJ2VtYmVyLXRyYW5zaXRpb25pbmctaW4nLCAnZW1iZXItdHJhbnNpdGlvbmluZy1vdXQnXQot
ICAgICAgQHB1YmxpYwotICAgICovCi0gICAgY2xhc3NOYW1lQmluZGluZ3M6IFsnYWN0aXZlJywg
J2xvYWRpbmcnLCAnZGlzYWJsZWQnLCAndHJhbnNpdGlvbmluZ0luJywgJ3RyYW5zaXRpb25pbmdP
dXQnXSwKLQotICAgIC8qKgotICAgICAgQnkgZGVmYXVsdCB0aGUgYHt7bGluay10b319YCBjb21w
b25lbnQgcmVzcG9uZHMgdG8gdGhlIGBjbGlja2AgZXZlbnQuIFlvdQotICAgICAgY2FuIG92ZXJy
aWRlIHRoaXMgZ2xvYmFsbHkgYnkgc2V0dGluZyB0aGlzIHByb3BlcnR5IHRvIHlvdXIgY3VzdG9t
Ci0gICAgICBldmVudCBuYW1lLgotICAgICAgIFRoaXMgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBv
biBtb2JpbGUgd2hlbiBvbmUgd2FudHMgdG8gYXZvaWQgdGhlIDMwMG1zCi0gICAgICBjbGljayBk
ZWxheSB1c2luZyBzb21lIHNvcnQgb2YgY3VzdG9tIGB0YXBgIGV2ZW50LgotICAgICAgIEBwcm9w
ZXJ0eSBldmVudE5hbWUKLSAgICAgIEB0eXBlIFN0cmluZwotICAgICAgQGRlZmF1bHQgY2xpY2sK
LSAgICAgIEBwcml2YXRlCi0gICAgKi8KLSAgICBldmVudE5hbWU6ICdjbGljaycsCi0KLSAgICAv
LyB0aGlzIGlzIGRvYydlZCBoZXJlIHNvIGl0IHNob3dzIHVwIGluIHRoZSBldmVudHMKLSAgICAv
LyBzZWN0aW9uIG9mIHRoZSBBUEkgZG9jdW1lbnRhdGlvbiwgd2hpY2ggaXMgd2hlcmUKLSAgICAv
LyBwZW9wbGUgd2lsbCBsaWtlbHkgZ28gbG9va2luZyBmb3IgaXQuCi0gICAgLyoqCi0gICAgICBU
cmlnZ2VycyB0aGUgYExpbmtDb21wb25lbnRgJ3Mgcm91dGluZyBiZWhhdmlvci4gSWYKLSAgICAg
IGBldmVudE5hbWVgIGlzIGNoYW5nZWQgdG8gYSB2YWx1ZSBvdGhlciB0aGFuIGBjbGlja2AKLSAg
ICAgIHRoZSByb3V0aW5nIGJlaGF2aW9yIHdpbGwgdHJpZ2dlciBvbiB0aGF0IGN1c3RvbSBldmVu
dAotICAgICAgaW5zdGVhZC4KLSAgICAgICBAZXZlbnQgY2xpY2sKLSAgICAgIEBwcml2YXRlCi0g
ICAgKi8KLQotICAgIC8qKgotICAgICAgQW4gb3ZlcnJpZGFibGUgbWV0aG9kIGNhbGxlZCB3aGVu
IGBMaW5rQ29tcG9uZW50YCBvYmplY3RzIGFyZSBpbnN0YW50aWF0ZWQuCi0gICAgICAgRXhhbXBs
ZToKLSAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICBBcHAuTXlMaW5rQ29tcG9uZW50ID0gRW1i
ZXIuTGlua0NvbXBvbmVudC5leHRlbmQoewotICAgICAgICBpbml0OiBmdW5jdGlvbigpIHsKLSAg
ICAgICAgICB0aGlzLl9zdXBlciguLi5hcmd1bWVudHMpOwotICAgICAgICAgIEVtYmVyLkxvZ2dl
ci5sb2coJ0V2ZW50IGlzICcgKyB0aGlzLmdldCgnZXZlbnROYW1lJykpOwotICAgICAgICB9Ci0g
ICAgICB9KTsKLSAgICAgIGBgYAotICAgICAgIE5PVEU6IElmIHlvdSBkbyBvdmVycmlkZSBgaW5p
dGAgZm9yIGEgZnJhbWV3b3JrIGNsYXNzIGxpa2UgYEVtYmVyLlZpZXdgLAotICAgICAgYmUgc3Vy
ZSB0byBjYWxsIGB0aGlzLl9zdXBlciguLi5hcmd1bWVudHMpYCBpbiB5b3VyCi0gICAgICBgaW5p
dGAgZGVjbGFyYXRpb24hIElmIHlvdSBkb24ndCwgRW1iZXIgbWF5IG5vdCBoYXZlIGFuIG9wcG9y
dHVuaXR5IHRvCi0gICAgICBkbyBpbXBvcnRhbnQgc2V0dXAgd29yaywgYW5kIHlvdSdsbCBzZWUg
c3RyYW5nZSBiZWhhdmlvciBpbiB5b3VyCi0gICAgICBhcHBsaWNhdGlvbi4KLSAgICAgICBAbWV0
aG9kIGluaXQKLSAgICAgIEBwcml2YXRlCi0gICAgKi8KLSAgICBpbml0OiBmdW5jdGlvbiAoKSB7
Ci0gICAgICB0aGlzLl9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwotCi0gICAgICAvLyBN
YXAgZGVzaXJlZCBldmVudCBuYW1lIHRvIGludm9rZSBmdW5jdGlvbgotICAgICAgdmFyIGV2ZW50
TmFtZSA9IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0aGlzLCAnZXZlbnROYW1lJyk7Ci0g
ICAgICB0aGlzLm9uKGV2ZW50TmFtZSwgdGhpcywgdGhpcy5faW52b2tlKTsKLSAgICB9LAotCi0g
ICAgX3JvdXRpbmc6IF9lbWJlclJ1bnRpbWVJbmplY3QuZGVmYXVsdC5zZXJ2aWNlKCctcm91dGlu
ZycpLAotCi0gICAgLyoqCi0gICAgICBBY2Nlc3NlZCBhcyBhIGNsYXNzbmFtZSBiaW5kaW5nIHRv
IGFwcGx5IHRoZSBgTGlua0NvbXBvbmVudGAncyBgZGlzYWJsZWRDbGFzc2AKLSAgICAgIENTUyBg
Y2xhc3NgIHRvIHRoZSBlbGVtZW50IHdoZW4gdGhlIGxpbmsgaXMgZGlzYWJsZWQuCi0gICAgICAg
V2hlbiBgdHJ1ZWAgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGVsZW1lbnQgd2lsbCBub3QgdHJpZ2dl
ciByb3V0ZSBjaGFuZ2VzLgotICAgICAgQHByb3BlcnR5IGRpc2FibGVkCi0gICAgICBAcHJpdmF0
ZQotICAgICovCi0gICAgZGlzYWJsZWQ6IF9lbWJlck1ldGFsQ29tcHV0ZWQuY29tcHV0ZWQoewot
ICAgICAgZ2V0OiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkgewotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICB9LAotICAgICAgc2V0OiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkgewotICAgICAgICBp
ZiAodmFsdWUgIT09IHVuZGVmaW5lZCkgewotICAgICAgICAgIHRoaXMuc2V0KCdfaXNEaXNhYmxl
ZCcsIHZhbHVlKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiB2YWx1ZSA/IF9lbWJlck1l
dGFsUHJvcGVydHlfZ2V0LmdldCh0aGlzLCAnZGlzYWJsZWRDbGFzcycpIDogZmFsc2U7Ci0gICAg
ICB9Ci0gICAgfSksCi0KLSAgICBfY29tcHV0ZUFjdGl2ZTogZnVuY3Rpb24gKHJvdXRlclN0YXRl
KSB7Ci0gICAgICBpZiAoX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsICdsb2FkaW5n
JykpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotCi0gICAgICB2YXIgcm91dGlu
ZyA9IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0aGlzLCAnX3JvdXRpbmcnKTsKLSAgICAg
IHZhciBtb2RlbHMgPSBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywgJ21vZGVscycp
OwotICAgICAgdmFyIHJlc29sdmVkUXVlcnlQYXJhbXMgPSBfZW1iZXJNZXRhbFByb3BlcnR5X2dl
dC5nZXQodGhpcywgJ3Jlc29sdmVkUXVlcnlQYXJhbXMnKTsKLQotICAgICAgdmFyIGN1cnJlbnRX
aGVuID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsICdjdXJyZW50LXdoZW4nKTsK
LSAgICAgIHZhciBpc0N1cnJlbnRXaGVuU3BlY2lmaWVkID0gISFjdXJyZW50V2hlbjsKLSAgICAg
IGN1cnJlbnRXaGVuID0gY3VycmVudFdoZW4gfHwgX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0
KHRoaXMsICdxdWFsaWZpZWRSb3V0ZU5hbWUnKTsKLSAgICAgIGN1cnJlbnRXaGVuID0gY3VycmVu
dFdoZW4uc3BsaXQoJyAnKTsKLQotICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGN1cnJlbnRX
aGVuLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgICAgIGlmIChyb3V0aW5nLmlzQWN0aXZl
Rm9yUm91dGUobW9kZWxzLCByZXNvbHZlZFF1ZXJ5UGFyYW1zLCBjdXJyZW50V2hlbltpXSwgcm91
dGVyU3RhdGUsIGlzQ3VycmVudFdoZW5TcGVjaWZpZWQpKSB7Ci0gICAgICAgICAgcmV0dXJuIF9l
bWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0aGlzLCAnYWN0aXZlQ2xhc3MnKTsKLSAgICAgICAg
fQotICAgICAgfQotCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfSwKLQotICAgIC8qKgotICAg
ICAgQWNjZXNzZWQgYXMgYSBjbGFzc25hbWUgYmluZGluZyB0byBhcHBseSB0aGUgYExpbmtDb21w
b25lbnRgJ3MgYGFjdGl2ZUNsYXNzYAotICAgICAgQ1NTIGBjbGFzc2AgdG8gdGhlIGVsZW1lbnQg
d2hlbiB0aGUgbGluayBpcyBhY3RpdmUuCi0gICAgICAgQSBgTGlua0NvbXBvbmVudGAgaXMgY29u
c2lkZXJlZCBhY3RpdmUgd2hlbiBpdHMgYGN1cnJlbnRXaGVuYCBwcm9wZXJ0eSBpcyBgdHJ1ZWAK
LSAgICAgIG9yIHRoZSBhcHBsaWNhdGlvbidzIGN1cnJlbnQgcm91dGUgaXMgdGhlIHJvdXRlIHRo
ZSBgTGlua0NvbXBvbmVudGAgd291bGQgdHJpZ2dlcgotICAgICAgdHJhbnNpdGlvbnMgaW50by4K
LSAgICAgICBUaGUgYGN1cnJlbnRXaGVuYCBwcm9wZXJ0eSBjYW4gbWF0Y2ggYWdhaW5zdCBtdWx0
aXBsZSByb3V0ZXMgYnkgc2VwYXJhdGluZwotICAgICAgcm91dGUgbmFtZXMgdXNpbmcgdGhlIGAg
YCAoc3BhY2UpIGNoYXJhY3Rlci4KLSAgICAgICBAcHJvcGVydHkgYWN0aXZlCi0gICAgICBAcHJp
dmF0ZQotICAgICovCi0gICAgYWN0aXZlOiBfZW1iZXJNZXRhbENvbXB1dGVkLmNvbXB1dGVkKCdh
dHRycy5wYXJhbXMnLCAnX3JvdXRpbmcuY3VycmVudFN0YXRlJywgZnVuY3Rpb24gY29tcHV0ZUxp
bmtUb0NvbXBvbmVudEFjdGl2ZSgpIHsKLSAgICAgIHZhciBjdXJyZW50U3RhdGUgPSBfZW1iZXJN
ZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywgJ19yb3V0aW5nLmN1cnJlbnRTdGF0ZScpOwotICAg
ICAgaWYgKCFjdXJyZW50U3RhdGUpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQot
Ci0gICAgICByZXR1cm4gdGhpcy5fY29tcHV0ZUFjdGl2ZShjdXJyZW50U3RhdGUpOwotICAgIH0p
LAotCi0gICAgd2lsbEJlQWN0aXZlOiBfZW1iZXJNZXRhbENvbXB1dGVkLmNvbXB1dGVkKCdfcm91
dGluZy50YXJnZXRTdGF0ZScsIGZ1bmN0aW9uIGNvbXB1dGVMaW5rVG9Db21wb25lbnRXaWxsQmVB
Y3RpdmUoKSB7Ci0gICAgICB2YXIgcm91dGluZyA9IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0Lmdl
dCh0aGlzLCAnX3JvdXRpbmcnKTsKLSAgICAgIHZhciB0YXJnZXRTdGF0ZSA9IF9lbWJlck1ldGFs
UHJvcGVydHlfZ2V0LmdldChyb3V0aW5nLCAndGFyZ2V0U3RhdGUnKTsKLSAgICAgIGlmIChfZW1i
ZXJNZXRhbFByb3BlcnR5X2dldC5nZXQocm91dGluZywgJ2N1cnJlbnRTdGF0ZScpID09PSB0YXJn
ZXRTdGF0ZSkgewotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0KLSAgICAgIHJldHVybiAhIXRo
aXMuX2NvbXB1dGVBY3RpdmUodGFyZ2V0U3RhdGUpOwotICAgIH0pLAotCi0gICAgdHJhbnNpdGlv
bmluZ0luOiBfZW1iZXJNZXRhbENvbXB1dGVkLmNvbXB1dGVkKCdhY3RpdmUnLCAnd2lsbEJlQWN0
aXZlJywgZnVuY3Rpb24gY29tcHV0ZUxpbmtUb0NvbXBvbmVudFRyYW5zaXRpb25pbmdJbigpIHsK
LSAgICAgIHZhciB3aWxsQmVBY3RpdmUgPSBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodGhp
cywgJ3dpbGxCZUFjdGl2ZScpOwotICAgICAgaWYgKHR5cGVvZiB3aWxsQmVBY3RpdmUgPT09ICd1
bmRlZmluZWQnKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLQotICAgICAgcmV0
dXJuICFfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywgJ2FjdGl2ZScpICYmIHdpbGxC
ZUFjdGl2ZSAmJiAnZW1iZXItdHJhbnNpdGlvbmluZy1pbic7Ci0gICAgfSksCi0KLSAgICB0cmFu
c2l0aW9uaW5nT3V0OiBfZW1iZXJNZXRhbENvbXB1dGVkLmNvbXB1dGVkKCdhY3RpdmUnLCAnd2ls
bEJlQWN0aXZlJywgZnVuY3Rpb24gY29tcHV0ZUxpbmtUb0NvbXBvbmVudFRyYW5zaXRpb25pbmdP
dXQoKSB7Ci0gICAgICB2YXIgd2lsbEJlQWN0aXZlID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQu
Z2V0KHRoaXMsICd3aWxsQmVBY3RpdmUnKTsKLSAgICAgIGlmICh0eXBlb2Ygd2lsbEJlQWN0aXZl
ID09PSAndW5kZWZpbmVkJykgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0KLSAg
ICAgIHJldHVybiBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywgJ2FjdGl2ZScpICYm
ICF3aWxsQmVBY3RpdmUgJiYgJ2VtYmVyLXRyYW5zaXRpb25pbmctb3V0JzsKLSAgICB9KSwKLQot
ICAgIC8qKgotICAgICAgRXZlbnQgaGFuZGxlciB0aGF0IGludm9rZXMgdGhlIGxpbmssIGFjdGl2
YXRpbmcgdGhlIGFzc29jaWF0ZWQgcm91dGUuCi0gICAgICAgQHByaXZhdGUKLSAgICAgIEBtZXRo
b2QgX2ludm9rZQotICAgICAgQHBhcmFtIHtFdmVudH0gZXZlbnQKLSAgICAgIEBwcml2YXRlCi0g
ICAgKi8KLSAgICBfaW52b2tlOiBmdW5jdGlvbiAoZXZlbnQpIHsKLSAgICAgIGlmICghX2VtYmVy
Vmlld3NTeXN0ZW1VdGlscy5pc1NpbXBsZUNsaWNrKGV2ZW50KSkgewotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgIH0KLQotICAgICAgdmFyIHByZXZlbnREZWZhdWx0ID0gX2VtYmVyTWV0YWxQ
cm9wZXJ0eV9nZXQuZ2V0KHRoaXMsICdwcmV2ZW50RGVmYXVsdCcpOwotICAgICAgdmFyIHRhcmdl
dEF0dHJpYnV0ZSA9IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0aGlzLCAndGFyZ2V0Jyk7
Ci0KLSAgICAgIGlmIChwcmV2ZW50RGVmYXVsdCAhPT0gZmFsc2UpIHsKLSAgICAgICAgaWYgKCF0
YXJnZXRBdHRyaWJ1dGUgfHwgdGFyZ2V0QXR0cmlidXRlID09PSAnX3NlbGYnKSB7Ci0gICAgICAg
ICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBp
ZiAoX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsICdidWJibGVzJykgPT09IGZhbHNl
KSB7Ci0gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOwotICAgICAgfQotCi0gICAgICBp
ZiAoX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsICdfaXNEaXNhYmxlZCcpKSB7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLQotICAgICAgaWYgKF9lbWJlck1ldGFsUHJv
cGVydHlfZ2V0LmdldCh0aGlzLCAnbG9hZGluZycpKSB7Ci0gICAgICAgIF9lbWJlck1ldGFsTG9n
Z2VyLmRlZmF1bHQud2FybignVGhpcyBsaW5rLXRvIGlzIGluIGFuIGluYWN0aXZlIGxvYWRpbmcg
c3RhdGUgYmVjYXVzZSBhdCBsZWFzdCBvbmUgb2YgaXRzIHBhcmFtZXRlcnMgcHJlc2VudGx5IGhh
cyBhIG51bGwvdW5kZWZpbmVkIHZhbHVlLCBvciB0aGUgcHJvdmlkZWQgcm91dGUgbmFtZSBpcyBp
bnZhbGlkLicpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0KLSAgICAgIGlmICh0
YXJnZXRBdHRyaWJ1dGUgJiYgdGFyZ2V0QXR0cmlidXRlICE9PSAnX3NlbGYnKSB7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgIH0KLQotICAgICAgdmFyIHJvdXRpbmcgPSBfZW1iZXJNZXRh
bFByb3BlcnR5X2dldC5nZXQodGhpcywgJ19yb3V0aW5nJyk7Ci0gICAgICB2YXIgcXVhbGlmaWVk
Um91dGVOYW1lID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsICdxdWFsaWZpZWRS
b3V0ZU5hbWUnKTsKLSAgICAgIHZhciBtb2RlbHMgPSBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5n
ZXQodGhpcywgJ21vZGVscycpOwotICAgICAgdmFyIHF1ZXJ5UGFyYW1WYWx1ZXMgPSBfZW1iZXJN
ZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywgJ3F1ZXJ5UGFyYW1zLnZhbHVlcycpOwotICAgICAg
dmFyIHNob3VsZFJlcGxhY2UgPSBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywgJ3Jl
cGxhY2UnKTsKLQotICAgICAgcm91dGluZy50cmFuc2l0aW9uVG8ocXVhbGlmaWVkUm91dGVOYW1l
LCBtb2RlbHMsIHF1ZXJ5UGFyYW1WYWx1ZXMsIHNob3VsZFJlcGxhY2UpOwotICAgIH0sCi0KLSAg
ICBxdWVyeVBhcmFtczogbnVsbCwKLQotICAgIHF1YWxpZmllZFJvdXRlTmFtZTogX2VtYmVyTWV0
YWxDb21wdXRlZC5jb21wdXRlZCgndGFyZ2V0Um91dGVOYW1lJywgJ19yb3V0aW5nLmN1cnJlbnRT
dGF0ZScsIGZ1bmN0aW9uIGNvbXB1dGVMaW5rVG9Db21wb25lbnRRdWFsaWZpZWRSb3V0ZU5hbWUo
KSB7Ci0gICAgICB2YXIgcGFyYW1zID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMs
ICdwYXJhbXMnKS5zbGljZSgpOwotICAgICAgdmFyIGxhc3RQYXJhbSA9IHBhcmFtc1twYXJhbXMu
bGVuZ3RoIC0gMV07Ci0gICAgICBpZiAobGFzdFBhcmFtICYmIGxhc3RQYXJhbS5pc1F1ZXJ5UGFy
YW1zKSB7Ci0gICAgICAgIHBhcmFtcy5wb3AoKTsKLSAgICAgIH0KLSAgICAgIHZhciBvbmx5UXVl
cnlQYXJhbXNTdXBwbGllZCA9IHRoaXNbX2VtYmVySHRtbGJhcnNOb2RlTWFuYWdlcnNDb21wb25l
bnROb2RlTWFuYWdlci5IQVNfQkxPQ0tdID8gcGFyYW1zLmxlbmd0aCA9PT0gMCA6IHBhcmFtcy5s
ZW5ndGggPT09IDE7Ci0gICAgICBpZiAob25seVF1ZXJ5UGFyYW1zU3VwcGxpZWQpIHsKLSAgICAg
ICAgcmV0dXJuIF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0aGlzLCAnX3JvdXRpbmcuY3Vy
cmVudFJvdXRlTmFtZScpOwotICAgICAgfQotICAgICAgcmV0dXJuIF9lbWJlck1ldGFsUHJvcGVy
dHlfZ2V0LmdldCh0aGlzLCAndGFyZ2V0Um91dGVOYW1lJyk7Ci0gICAgfSksCi0KLSAgICByZXNv
bHZlZFF1ZXJ5UGFyYW1zOiBfZW1iZXJNZXRhbENvbXB1dGVkLmNvbXB1dGVkKCdxdWVyeVBhcmFt
cycsIGZ1bmN0aW9uIGNvbXB1dGVMaW5rVG9Db21wb25lbnRSZXNvbHZlZFF1ZXJ5UGFyYW1zKCkg
ewotICAgICAgdmFyIHJlc29sdmVkUXVlcnlQYXJhbXMgPSB7fTsKLSAgICAgIHZhciBxdWVyeVBh
cmFtcyA9IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0aGlzLCAncXVlcnlQYXJhbXMnKTsK
LQotICAgICAgaWYgKCFxdWVyeVBhcmFtcykgewotICAgICAgICByZXR1cm4gcmVzb2x2ZWRRdWVy
eVBhcmFtczsKLSAgICAgIH0KLQotICAgICAgdmFyIHZhbHVlcyA9IHF1ZXJ5UGFyYW1zLnZhbHVl
czsKLSAgICAgIGZvciAodmFyIGtleSBpbiB2YWx1ZXMpIHsKLSAgICAgICAgaWYgKCF2YWx1ZXMu
aGFzT3duUHJvcGVydHkoa2V5KSkgewotICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0g
ICAgICAgIHJlc29sdmVkUXVlcnlQYXJhbXNba2V5XSA9IHZhbHVlc1trZXldOwotICAgICAgfQot
Ci0gICAgICByZXR1cm4gcmVzb2x2ZWRRdWVyeVBhcmFtczsKLSAgICB9KSwKLQotICAgIC8qKgot
ICAgICAgU2V0cyB0aGUgZWxlbWVudCdzIGBocmVmYCBhdHRyaWJ1dGUgdG8gdGhlIHVybCBmb3IK
LSAgICAgIHRoZSBgTGlua0NvbXBvbmVudGAncyB0YXJnZXRlZCByb3V0ZS4KLSAgICAgICBJZiB0
aGUgYExpbmtDb21wb25lbnRgJ3MgYHRhZ05hbWVgIGlzIGNoYW5nZWQgdG8gYSB2YWx1ZSBvdGhl
cgotICAgICAgdGhhbiBgYWAsIHRoaXMgcHJvcGVydHkgd2lsbCBiZSBpZ25vcmVkLgotICAgICAg
IEBwcm9wZXJ0eSBocmVmCi0gICAgICBAcHJpdmF0ZQotICAgICovCi0gICAgaHJlZjogX2VtYmVy
TWV0YWxDb21wdXRlZC5jb21wdXRlZCgnbW9kZWxzJywgJ3F1YWxpZmllZFJvdXRlTmFtZScsIGZ1
bmN0aW9uIGNvbXB1dGVMaW5rVG9Db21wb25lbnRIcmVmKCkgewotICAgICAgaWYgKF9lbWJlck1l
dGFsUHJvcGVydHlfZ2V0LmdldCh0aGlzLCAndGFnTmFtZScpICE9PSAnYScpIHsKLSAgICAgICAg
cmV0dXJuOwotICAgICAgfQotCi0gICAgICB2YXIgcXVhbGlmaWVkUm91dGVOYW1lID0gX2VtYmVy
TWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsICdxdWFsaWZpZWRSb3V0ZU5hbWUnKTsKLSAgICAg
IHZhciBtb2RlbHMgPSBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywgJ21vZGVscycp
OwotCi0gICAgICBpZiAoX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsICdsb2FkaW5n
JykpIHsKLSAgICAgICAgcmV0dXJuIF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0aGlzLCAn
bG9hZGluZ0hyZWYnKTsKLSAgICAgIH0KLQotICAgICAgdmFyIHJvdXRpbmcgPSBfZW1iZXJNZXRh
bFByb3BlcnR5X2dldC5nZXQodGhpcywgJ19yb3V0aW5nJyk7Ci0gICAgICB2YXIgcXVlcnlQYXJh
bXMgPSBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywgJ3F1ZXJ5UGFyYW1zLnZhbHVl
cycpOwotICAgICAgcmV0dXJuIHJvdXRpbmcuZ2VuZXJhdGVVUkwocXVhbGlmaWVkUm91dGVOYW1l
LCBtb2RlbHMsIHF1ZXJ5UGFyYW1zKTsKLSAgICB9KSwKLQotICAgIGxvYWRpbmc6IF9lbWJlck1l
dGFsQ29tcHV0ZWQuY29tcHV0ZWQoJ19tb2RlbHNBcmVMb2FkZWQnLCAncXVhbGlmaWVkUm91dGVO
YW1lJywgZnVuY3Rpb24gY29tcHV0ZUxpbmtUb0NvbXBvbmVudExvYWRpbmcoKSB7Ci0gICAgICB2
YXIgcXVhbGlmaWVkUm91dGVOYW1lID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMs
ICdxdWFsaWZpZWRSb3V0ZU5hbWUnKTsKLSAgICAgIHZhciBtb2RlbHNBcmVMb2FkZWQgPSBfZW1i
ZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywgJ19tb2RlbHNBcmVMb2FkZWQnKTsKLQotICAg
ICAgaWYgKCFtb2RlbHNBcmVMb2FkZWQgfHwgcXVhbGlmaWVkUm91dGVOYW1lID09IG51bGwpIHsK
LSAgICAgICAgcmV0dXJuIF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0aGlzLCAnbG9hZGlu
Z0NsYXNzJyk7Ci0gICAgICB9Ci0gICAgfSksCi0KLSAgICBfbW9kZWxzQXJlTG9hZGVkOiBfZW1i
ZXJNZXRhbENvbXB1dGVkLmNvbXB1dGVkKCdtb2RlbHMnLCBmdW5jdGlvbiBjb21wdXRlTGlua1Rv
Q29tcG9uZW50TW9kZWxzQXJlTG9hZGVkKCkgewotICAgICAgdmFyIG1vZGVscyA9IF9lbWJlck1l
dGFsUHJvcGVydHlfZ2V0LmdldCh0aGlzLCAnbW9kZWxzJyk7Ci0gICAgICBmb3IgKHZhciBpID0g
MCwgbCA9IG1vZGVscy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKLSAgICAgICAgaWYgKG1vZGVsc1tp
XSA9PSBudWxsKSB7Ci0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICB9
Ci0KLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0pLAotCi0gICAgX2dldE1vZGVsczogZnVuY3Rp
b24gKHBhcmFtcykgewotICAgICAgdmFyIG1vZGVsQ291bnQgPSBwYXJhbXMubGVuZ3RoIC0gMTsK
LSAgICAgIHZhciBtb2RlbHMgPSBuZXcgQXJyYXkobW9kZWxDb3VudCk7Ci0KLSAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgbW9kZWxDb3VudDsgaSsrKSB7Ci0gICAgICAgIHZhciB2YWx1ZSA9IHBh
cmFtc1tpICsgMV07Ci0KLSAgICAgICAgd2hpbGUgKF9lbWJlclJ1bnRpbWVNaXhpbnNDb250cm9s
bGVyLmRlZmF1bHQuZGV0ZWN0KHZhbHVlKSkgewotICAgICAgICAgIF9lbWJlck1ldGFsRGVidWcu
ZGVwcmVjYXRlKCdQcm92aWRpbmcgYHt7bGluay10b319YCB3aXRoIGEgcGFyYW0gdGhhdCBpcyB3
cmFwcGVkIGluIGEgY29udHJvbGxlciBpcyBkZXByZWNhdGVkLiAnICsgKHRoaXMucGFyZW50Vmll
dyA/ICdQbGVhc2UgdXBkYXRlIGAnICsgdGhpcy5wYXJlbnRWaWV3ICsgJ2AgdG8gdXNlIGB7e2xp
bmstdG8gInBvc3QiIHNvbWVDb250cm9sbGVyLm1vZGVsfX1gIGluc3RlYWQuJyA6ICcnKSwgZmFs
c2UsIHsgaWQ6ICdlbWJlci1yb3V0aW5nLXZpZXdzLmNvbnRyb2xsZXItd3JhcHBlZC1wYXJhbScs
IHVudGlsOiAnMy4wLjAnIH0pOwotICAgICAgICAgIHZhbHVlID0gdmFsdWUuZ2V0KCdtb2RlbCcp
OwotICAgICAgICB9Ci0KLSAgICAgICAgbW9kZWxzW2ldID0gdmFsdWU7Ci0gICAgICB9Ci0KLSAg
ICAgIHJldHVybiBtb2RlbHM7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAgVGhlIGRlZmF1bHQg
aHJlZiB2YWx1ZSB0byB1c2Ugd2hpbGUgYSBsaW5rLXRvIGlzIGxvYWRpbmcuCi0gICAgICBPbmx5
IGFwcGxpZXMgd2hlbiB0YWdOYW1lIGlzICdhJwotICAgICAgIEBwcm9wZXJ0eSBsb2FkaW5nSHJl
ZgotICAgICAgQHR5cGUgU3RyaW5nCi0gICAgICBAZGVmYXVsdCAjCi0gICAgICBAcHJpdmF0ZQot
ICAgICovCi0gICAgbG9hZGluZ0hyZWY6ICcjJywKLQotICAgIHdpbGxSZW5kZXI6IGZ1bmN0aW9u
ICgpIHsKLSAgICAgIHZhciBxdWVyeVBhcmFtcyA9IHVuZGVmaW5lZDsKLQotICAgICAgLy8gRG8g
bm90IG11dGF0ZSBwYXJhbXMgaW4gcGxhY2UKLSAgICAgIHZhciBwYXJhbXMgPSBfZW1iZXJNZXRh
bFByb3BlcnR5X2dldC5nZXQodGhpcywgJ3BhcmFtcycpLnNsaWNlKCk7Ci0KLSAgICAgIF9lbWJl
ck1ldGFsRGVidWcuYXNzZXJ0KCdZb3UgbXVzdCBwcm92aWRlIG9uZSBvciBtb3JlIHBhcmFtZXRl
cnMgdG8gdGhlIGxpbmstdG8gY29tcG9uZW50LicsIHBhcmFtcy5sZW5ndGgpOwotCi0gICAgICB2
YXIgZGlzYWJsZWRXaGVuID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsICdkaXNh
YmxlZFdoZW4nKTsKLSAgICAgIGlmIChkaXNhYmxlZFdoZW4gIT09IHVuZGVmaW5lZCkgewotICAg
ICAgICB0aGlzLnNldCgnZGlzYWJsZWQnLCBkaXNhYmxlZFdoZW4pOwotICAgICAgfQotCi0gICAg
ICAvLyBQcm9jZXNzIHRoZSBwb3NpdGlvbmFsIGFyZ3VtZW50cywgaW4gb3JkZXIuCi0gICAgICAv
LyAxLiBJbmxpbmUgbGluayB0aXRsZSBjb21lcyBmaXJzdCwgaWYgcHJlc2VudC4KLSAgICAgIGlm
ICghdGhpc1tfZW1iZXJIdG1sYmFyc05vZGVNYW5hZ2Vyc0NvbXBvbmVudE5vZGVNYW5hZ2VyLkhB
U19CTE9DS10pIHsKLSAgICAgICAgdGhpcy5zZXQoJ2xpbmtUaXRsZScsIHBhcmFtcy5zaGlmdCgp
KTsKLSAgICAgIH0KLQotICAgICAgLy8gMi4gYHRhcmdldFJvdXRlTmFtZWAgaXMgbm93IGFsd2F5
cyBhdCBpbmRleCAwLgotICAgICAgdGhpcy5zZXQoJ3RhcmdldFJvdXRlTmFtZScsIHBhcmFtc1sw
XSk7Ci0KLSAgICAgIC8vIDMuIFRoZSBsYXN0IGFyZ3VtZW50IChpZiBzdGlsbCByZW1haW5pbmcp
IGlzIHRoZSBgcXVlcnlQYXJhbXNgIG9iamVjdC4KLSAgICAgIHZhciBsYXN0UGFyYW0gPSBwYXJh
bXNbcGFyYW1zLmxlbmd0aCAtIDFdOwotCi0gICAgICBpZiAobGFzdFBhcmFtICYmIGxhc3RQYXJh
bS5pc1F1ZXJ5UGFyYW1zKSB7Ci0gICAgICAgIHF1ZXJ5UGFyYW1zID0gcGFyYW1zLnBvcCgpOwot
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgcXVlcnlQYXJhbXMgPSB7fTsKLSAgICAgIH0KLSAgICAg
IHRoaXMuc2V0KCdxdWVyeVBhcmFtcycsIHF1ZXJ5UGFyYW1zKTsKLQotICAgICAgLy8gNC4gQW55
IHJlbWFpbmluZyBpbmRpY2VzIChleGNlcHRpbmcgYHRhcmdldFJvdXRlTmFtZWAgYXQgMCkgYXJl
IGBtb2RlbHNgLgotICAgICAgaWYgKHBhcmFtcy5sZW5ndGggPiAxKSB7Ci0gICAgICAgIHRoaXMu
c2V0KCdtb2RlbHMnLCB0aGlzLl9nZXRNb2RlbHMocGFyYW1zKSk7Ci0gICAgICB9IGVsc2Ugewot
ICAgICAgICB0aGlzLnNldCgnbW9kZWxzJywgW10pOwotICAgICAgfQotICAgIH0KLSAgfSk7Ci0K
LSAgTGlua0NvbXBvbmVudC50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHsKLSAgICByZXR1cm4gJ0xp
bmtDb21wb25lbnQnOwotICB9OwotCi0gIExpbmtDb21wb25lbnQucmVvcGVuQ2xhc3MoewotICAg
IHBvc2l0aW9uYWxQYXJhbXM6ICdwYXJhbXMnCi0gIH0pOwotCi0gIGV4cG9ydHMuZGVmYXVsdCA9
IExpbmtDb21wb25lbnQ7Ci19KTsKLS8vIGNyZWF0ZXMgaW5qZWN0LnNlcnZpY2UKLWVuaWZlZCgn
ZW1iZXItcm91dGluZy12aWV3cy9pbmRleCcsIFsnZXhwb3J0cycsICdlbWJlci1tZXRhbC9jb3Jl
JywgJ2VtYmVyLXJvdXRpbmctdmlld3MvY29tcG9uZW50cy9saW5rLXRvJywgJ2VtYmVyLXJvdXRp
bmctdmlld3Mvdmlld3Mvb3V0bGV0J10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbENv
cmUsIF9lbWJlclJvdXRpbmdWaWV3c0NvbXBvbmVudHNMaW5rVG8sIF9lbWJlclJvdXRpbmdWaWV3
c1ZpZXdzT3V0bGV0KSB7Ci0gIC8qKgotICBAbW9kdWxlIGVtYmVyCi0gIEBzdWJtb2R1bGUgZW1i
ZXItcm91dGluZy12aWV3cwotICAqLwotCi0gICd1c2Ugc3RyaWN0JzsKLQotICBfZW1iZXJNZXRh
bENvcmUuZGVmYXVsdC5MaW5rQ29tcG9uZW50ID0gX2VtYmVyUm91dGluZ1ZpZXdzQ29tcG9uZW50
c0xpbmtUby5kZWZhdWx0OwotICBfZW1iZXJNZXRhbENvcmUuZGVmYXVsdC5PdXRsZXRWaWV3ID0g
X2VtYmVyUm91dGluZ1ZpZXdzVmlld3NPdXRsZXQuT3V0bGV0VmlldzsKLQotICBleHBvcnRzLmRl
ZmF1bHQgPSBfZW1iZXJNZXRhbENvcmUuZGVmYXVsdDsKLX0pOwotZW5pZmVkKCdlbWJlci1yb3V0
aW5nLXZpZXdzL3ZpZXdzL291dGxldCcsIFsnZXhwb3J0cycsICdlbWJlci12aWV3cy92aWV3cy92
aWV3JywgJ2VtYmVyLWh0bWxiYXJzL3RlbXBsYXRlcy90b3AtbGV2ZWwtdmlldyddLCBmdW5jdGlv
biAoZXhwb3J0cywgX2VtYmVyVmlld3NWaWV3c1ZpZXcsIF9lbWJlckh0bWxiYXJzVGVtcGxhdGVz
VG9wTGV2ZWxWaWV3KSB7Ci0gIC8qKgotICBAbW9kdWxlIGVtYmVyCi0gIEBzdWJtb2R1bGUgZW1i
ZXItcm91dGluZy12aWV3cwotICAqLwotCi0gICd1c2Ugc3RyaWN0JzsKLQotICB2YXIgQ29yZU91
dGxldFZpZXcgPSBfZW1iZXJWaWV3c1ZpZXdzVmlldy5kZWZhdWx0LmV4dGVuZCh7Ci0gICAgZGVm
YXVsdFRlbXBsYXRlOiBfZW1iZXJIdG1sYmFyc1RlbXBsYXRlc1RvcExldmVsVmlldy5kZWZhdWx0
LAotCi0gICAgaW5pdDogZnVuY3Rpb24gKCkgewotICAgICAgdGhpcy5fc3VwZXIoKTsKLSAgICAg
IHRoaXMuX291dGxldHMgPSBbXTsKLSAgICB9LAotCi0gICAgc2V0T3V0bGV0U3RhdGU6IGZ1bmN0
aW9uIChzdGF0ZSkgewotICAgICAgdGhpcy5vdXRsZXRTdGF0ZSA9IHsgbWFpbjogc3RhdGUgfTsK
LQotICAgICAgaWYgKHRoaXMuZW52KSB7Ci0gICAgICAgIHRoaXMuZW52Lm91dGxldFN0YXRlID0g
dGhpcy5vdXRsZXRTdGF0ZTsKLSAgICAgIH0KLQotICAgICAgaWYgKHRoaXMubGFzdFJlc3VsdCkg
ewotICAgICAgICB0aGlzLmRpcnR5T3V0bGV0cygpOwotICAgICAgICB0aGlzLl9vdXRsZXRzID0g
W107Ci0KLSAgICAgICAgdGhpcy5zY2hlZHVsZVJldmFsaWRhdGUobnVsbCwgbnVsbCk7Ci0gICAg
ICB9Ci0gICAgfSwKLQotICAgIGRpcnR5T3V0bGV0czogZnVuY3Rpb24gKCkgewotICAgICAgLy8g
RGlydHkgYW55IHJlbmRlciBub2RlcyB0aGF0IGNvcnJlc3BvbmQgdG8gb3V0bGV0cwotICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9vdXRsZXRzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAg
IHRoaXMuX291dGxldHNbaV0uaXNEaXJ0eSA9IHRydWU7Ci0gICAgICB9Ci0gICAgfQotICB9KTsK
LQotICBleHBvcnRzLkNvcmVPdXRsZXRWaWV3ID0gQ29yZU91dGxldFZpZXc7Ci0gIHZhciBPdXRs
ZXRWaWV3ID0gQ29yZU91dGxldFZpZXcuZXh0ZW5kKHsgdGFnTmFtZTogJycgfSk7Ci0gIGV4cG9y
dHMuT3V0bGV0VmlldyA9IE91dGxldFZpZXc7Ci19KTsKLWVuaWZlZCgnZW1iZXItcm91dGluZy9l
eHQvY29udHJvbGxlcicsIFsnZXhwb3J0cycsICdlbWJlci1tZXRhbC9wcm9wZXJ0eV9nZXQnLCAn
ZW1iZXItcnVudGltZS9taXhpbnMvY29udHJvbGxlciddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2Vt
YmVyTWV0YWxQcm9wZXJ0eV9nZXQsIF9lbWJlclJ1bnRpbWVNaXhpbnNDb250cm9sbGVyKSB7Ci0g
ICd1c2Ugc3RyaWN0JzsKLQotICAvKioKLSAgQG1vZHVsZSBlbWJlcgotICBAc3VibW9kdWxlIGVt
YmVyLXJvdXRpbmcKLSAgKi8KLQotICBfZW1iZXJSdW50aW1lTWl4aW5zQ29udHJvbGxlci5kZWZh
dWx0LnJlb3Blbih7Ci0gICAgY29uY2F0ZW5hdGVkUHJvcGVydGllczogWydxdWVyeVBhcmFtcydd
LAotCi0gICAgLyoqCi0gICAgICBEZWZpbmVzIHdoaWNoIHF1ZXJ5IHBhcmFtZXRlcnMgdGhlIGNv
bnRyb2xsZXIgYWNjZXB0cy4KLSAgICAgIElmIHlvdSBnaXZlIHRoZSBuYW1lcyBgWydjYXRlZ29y
eScsJ3BhZ2UnXWAgaXQgd2lsbCBiaW5kCi0gICAgICB0aGUgdmFsdWVzIG9mIHRoZXNlIHF1ZXJ5
IHBhcmFtZXRlcnMgdG8gdGhlIHZhcmlhYmxlcwotICAgICAgYHRoaXMuY2F0ZWdvcnlgIGFuZCBg
dGhpcy5wYWdlYAotICAgICAgIEBwcm9wZXJ0eSBxdWVyeVBhcmFtcwotICAgICAgQHB1YmxpYwot
ICAgICovCi0gICAgcXVlcnlQYXJhbXM6IG51bGwsCi0KLSAgICAvKioKLSAgICAgIEBwcm9wZXJ0
eSBfcXBEZWxlZ2F0ZQotICAgICAgQHByaXZhdGUKLSAgICAqLwotICAgIF9xcERlbGVnYXRlOiBu
dWxsLCAvLyBzZXQgYnkgcm91dGUKLQotICAgIC8qKgotICAgICAgQG1ldGhvZCBfcXBDaGFuZ2Vk
Ci0gICAgICBAcHJpdmF0ZQotICAgICovCi0gICAgX3FwQ2hhbmdlZDogZnVuY3Rpb24gKGNvbnRy
b2xsZXIsIF9wcm9wKSB7Ci0gICAgICB2YXIgcHJvcCA9IF9wcm9wLnN1YnN0cigwLCBfcHJvcC5s
ZW5ndGggLSAzKTsKLQotICAgICAgdmFyIGRlbGVnYXRlID0gY29udHJvbGxlci5fcXBEZWxlZ2F0
ZTsKLSAgICAgIHZhciB2YWx1ZSA9IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldChjb250cm9s
bGVyLCBwcm9wKTsKLSAgICAgIGRlbGVnYXRlKHByb3AsIHZhbHVlKTsKLSAgICB9LAotCi0gICAg
LyoqCi0gICAgICBUcmFuc2l0aW9uIHRoZSBhcHBsaWNhdGlvbiBpbnRvIGFub3RoZXIgcm91dGUu
IFRoZSByb3V0ZSBtYXkKLSAgICAgIGJlIGVpdGhlciBhIHNpbmdsZSByb3V0ZSBvciByb3V0ZSBw
YXRoOgotICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgIGFDb250cm9sbGVyLnRyYW5zaXRpb25U
b1JvdXRlKCdibG9nUG9zdHMnKTsKLSAgICAgIGFDb250cm9sbGVyLnRyYW5zaXRpb25Ub1JvdXRl
KCdibG9nUG9zdHMucmVjZW50RW50cmllcycpOwotICAgICAgYGBgCi0gICAgICAgT3B0aW9uYWxs
eSBzdXBwbHkgYSBtb2RlbCBmb3IgdGhlIHJvdXRlIGluIHF1ZXN0aW9uLiBUaGUgbW9kZWwKLSAg
ICAgIHdpbGwgYmUgc2VyaWFsaXplZCBpbnRvIHRoZSBVUkwgdXNpbmcgdGhlIGBzZXJpYWxpemVg
IGhvb2sgb2YKLSAgICAgIHRoZSByb3V0ZToKLSAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICBh
Q29udHJvbGxlci50cmFuc2l0aW9uVG9Sb3V0ZSgnYmxvZ1Bvc3QnLCBhUG9zdCk7Ci0gICAgICBg
YGAKLSAgICAgICBJZiBhIGxpdGVyYWwgaXMgcGFzc2VkIChzdWNoIGFzIGEgbnVtYmVyIG9yIGEg
c3RyaW5nKSwgaXQgd2lsbAotICAgICAgYmUgdHJlYXRlZCBhcyBhbiBpZGVudGlmaWVyIGluc3Rl
YWQuIEluIHRoaXMgY2FzZSwgdGhlIGBtb2RlbGAKLSAgICAgIGhvb2sgb2YgdGhlIHJvdXRlIHdp
bGwgYmUgdHJpZ2dlcmVkOgotICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgIGFDb250cm9sbGVy
LnRyYW5zaXRpb25Ub1JvdXRlKCdibG9nUG9zdCcsIDEpOwotICAgICAgYGBgCi0gICAgICAgTXVs
dGlwbGUgbW9kZWxzIHdpbGwgYmUgYXBwbGllZCBsYXN0IHRvIGZpcnN0IHJlY3Vyc2l2ZWx5IHVw
IHRoZQotICAgICAgcm91dGUgdHJlZS4KLSAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICBBcHAu
Um91dGVyLm1hcChmdW5jdGlvbigpIHsKLSAgICAgICAgdGhpcy5yb3V0ZSgnYmxvZ1Bvc3QnLCB7
IHBhdGg6ICc6YmxvZ1Bvc3RJZCcgfSwgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgdGhpcy5yb3V0
ZSgnYmxvZ0NvbW1lbnQnLCB7IHBhdGg6ICc6YmxvZ0NvbW1lbnRJZCcsIHJlc2V0TmFtZXNwYWNl
OiB0cnVlIH0pOwotICAgICAgICB9KTsKLSAgICAgIH0pOwotICAgICAgIGFDb250cm9sbGVyLnRy
YW5zaXRpb25Ub1JvdXRlKCdibG9nQ29tbWVudCcsIGFQb3N0LCBhQ29tbWVudCk7Ci0gICAgICBh
Q29udHJvbGxlci50cmFuc2l0aW9uVG9Sb3V0ZSgnYmxvZ0NvbW1lbnQnLCAxLCAxMyk7Ci0gICAg
ICBgYGAKLSAgICAgICBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIHBhc3MgYSBVUkwgKGEgc3RyaW5n
IHRoYXQgc3RhcnRzIHdpdGggYQotICAgICAgYC9gKS4gVGhpcyBpcyBpbnRlbmRlZCBmb3IgdGVz
dGluZyBhbmQgZGVidWdnaW5nIHB1cnBvc2VzIGFuZAotICAgICAgc2hvdWxkIHJhcmVseSBiZSB1
c2VkIGluIHByb2R1Y3Rpb24gY29kZS4KLSAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICBhQ29u
dHJvbGxlci50cmFuc2l0aW9uVG9Sb3V0ZSgnLycpOwotICAgICAgYUNvbnRyb2xsZXIudHJhbnNp
dGlvblRvUm91dGUoJy9ibG9nL3Bvc3QvMS9jb21tZW50LzEzJyk7Ci0gICAgICBhQ29udHJvbGxl
ci50cmFuc2l0aW9uVG9Sb3V0ZSgnL2Jsb2cvcG9zdHM/c29ydD10aXRsZScpOwotICAgICAgYGBg
Ci0gICAgICAgQW4gb3B0aW9ucyBoYXNoIHdpdGggYSBgcXVlcnlQYXJhbXNgIHByb3BlcnR5IG1h
eSBiZSBwcm92aWRlZCBhcwotICAgICAgdGhlIGZpbmFsIGFyZ3VtZW50IHRvIGFkZCBxdWVyeSBw
YXJhbWV0ZXJzIHRvIHRoZSBkZXN0aW5hdGlvbiBVUkwuCi0gICAgICAgYGBgamF2YXNjcmlwdAot
ICAgICAgYUNvbnRyb2xsZXIudHJhbnNpdGlvblRvUm91dGUoJ2Jsb2dQb3N0JywgMSwgewotICAg
ICAgICBxdWVyeVBhcmFtczoge3Nob3dDb21tZW50czogJ3RydWUnfQotICAgICAgfSk7Ci0gICAg
ICAgLy8gaWYgeW91IGp1c3Qgd2FudCB0byB0cmFuc2l0aW9uIHRoZSBxdWVyeSBwYXJhbWV0ZXJz
IHdpdGhvdXQgY2hhbmdpbmcgdGhlIHJvdXRlCi0gICAgICBhQ29udHJvbGxlci50cmFuc2l0aW9u
VG9Sb3V0ZSh7cXVlcnlQYXJhbXM6IHtzb3J0OiAnZGF0ZSd9fSk7Ci0gICAgICBgYGAKLSAgICAg
ICBTZWUgYWxzbyBbcmVwbGFjZVJvdXRlXSgvYXBpL2NsYXNzZXMvRW1iZXIuQ29udHJvbGxlck1p
eGluLmh0bWwjbWV0aG9kX3JlcGxhY2VSb3V0ZSkuCi0gICAgICAgQHBhcmFtIHtTdHJpbmd9IG5h
bWUgdGhlIG5hbWUgb2YgdGhlIHJvdXRlIG9yIGEgVVJMCi0gICAgICBAcGFyYW0gey4uLk9iamVj
dH0gbW9kZWxzIHRoZSBtb2RlbChzKSBvciBpZGVudGlmaWVyKHMpIHRvIGJlIHVzZWQKLSAgICAg
ICAgd2hpbGUgdHJhbnNpdGlvbmluZyB0byB0aGUgcm91dGUuCi0gICAgICBAcGFyYW0ge09iamVj
dH0gW29wdGlvbnNdIG9wdGlvbmFsIGhhc2ggd2l0aCBhIHF1ZXJ5UGFyYW1zIHByb3BlcnR5Ci0g
ICAgICAgIGNvbnRhaW5pbmcgYSBtYXBwaW5nIG9mIHF1ZXJ5IHBhcmFtZXRlcnMKLSAgICAgIEBm
b3IgRW1iZXIuQ29udHJvbGxlck1peGluCi0gICAgICBAbWV0aG9kIHRyYW5zaXRpb25Ub1JvdXRl
Ci0gICAgICBAcHVibGljCi0gICAgKi8KLSAgICB0cmFuc2l0aW9uVG9Sb3V0ZTogZnVuY3Rpb24g
KCkgewotICAgICAgLy8gdGFyZ2V0IG1heSBiZSBlaXRoZXIgYW5vdGhlciBjb250cm9sbGVyIG9y
IGEgcm91dGVyCi0gICAgICB2YXIgdGFyZ2V0ID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0
KHRoaXMsICd0YXJnZXQnKTsKLSAgICAgIHZhciBtZXRob2QgPSB0YXJnZXQudHJhbnNpdGlvblRv
Um91dGUgfHwgdGFyZ2V0LnRyYW5zaXRpb25UbzsKLSAgICAgIHJldHVybiBtZXRob2QuYXBwbHko
dGFyZ2V0LCBhcmd1bWVudHMpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgIFRyYW5zaXRpb24g
aW50byBhbm90aGVyIHJvdXRlIHdoaWxlIHJlcGxhY2luZyB0aGUgY3VycmVudCBVUkwsIGlmIHBv
c3NpYmxlLgotICAgICAgVGhpcyB3aWxsIHJlcGxhY2UgdGhlIGN1cnJlbnQgaGlzdG9yeSBlbnRy
eSBpbnN0ZWFkIG9mIGFkZGluZyBhIG5ldyBvbmUuCi0gICAgICBCZXNpZGUgdGhhdCwgaXQgaXMg
aWRlbnRpY2FsIHRvIGB0cmFuc2l0aW9uVG9Sb3V0ZWAgaW4gYWxsIG90aGVyIHJlc3BlY3RzLgot
ICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgIGFDb250cm9sbGVyLnJlcGxhY2VSb3V0ZSgnYmxv
Z1Bvc3RzJyk7Ci0gICAgICBhQ29udHJvbGxlci5yZXBsYWNlUm91dGUoJ2Jsb2dQb3N0cy5yZWNl
bnRFbnRyaWVzJyk7Ci0gICAgICBgYGAKLSAgICAgICBPcHRpb25hbGx5IHN1cHBseSBhIG1vZGVs
IGZvciB0aGUgcm91dGUgaW4gcXVlc3Rpb24uIFRoZSBtb2RlbAotICAgICAgd2lsbCBiZSBzZXJp
YWxpemVkIGludG8gdGhlIFVSTCB1c2luZyB0aGUgYHNlcmlhbGl6ZWAgaG9vayBvZgotICAgICAg
dGhlIHJvdXRlOgotICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgIGFDb250cm9sbGVyLnJlcGxh
Y2VSb3V0ZSgnYmxvZ1Bvc3QnLCBhUG9zdCk7Ci0gICAgICBgYGAKLSAgICAgICBJZiBhIGxpdGVy
YWwgaXMgcGFzc2VkIChzdWNoIGFzIGEgbnVtYmVyIG9yIGEgc3RyaW5nKSwgaXQgd2lsbAotICAg
ICAgYmUgdHJlYXRlZCBhcyBhbiBpZGVudGlmaWVyIGluc3RlYWQuIEluIHRoaXMgY2FzZSwgdGhl
IGBtb2RlbGAKLSAgICAgIGhvb2sgb2YgdGhlIHJvdXRlIHdpbGwgYmUgdHJpZ2dlcmVkOgotICAg
ICAgIGBgYGphdmFzY3JpcHQKLSAgICAgIGFDb250cm9sbGVyLnJlcGxhY2VSb3V0ZSgnYmxvZ1Bv
c3QnLCAxKTsKLSAgICAgIGBgYAotICAgICAgIE11bHRpcGxlIG1vZGVscyB3aWxsIGJlIGFwcGxp
ZWQgbGFzdCB0byBmaXJzdCByZWN1cnNpdmVseSB1cCB0aGUKLSAgICAgIHJvdXRlIHRyZWUuCi0g
ICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgQXBwLlJvdXRlci5tYXAoZnVuY3Rpb24oKSB7Ci0g
ICAgICAgIHRoaXMucm91dGUoJ2Jsb2dQb3N0JywgeyBwYXRoOiAnOmJsb2dQb3N0SWQnIH0sIGZ1
bmN0aW9uKCkgewotICAgICAgICAgIHRoaXMucm91dGUoJ2Jsb2dDb21tZW50JywgeyBwYXRoOiAn
OmJsb2dDb21tZW50SWQnLCByZXNldE5hbWVzcGFjZTogdHJ1ZSB9KTsKLSAgICAgICAgfSk7Ci0g
ICAgICB9KTsKLSAgICAgICBhQ29udHJvbGxlci5yZXBsYWNlUm91dGUoJ2Jsb2dDb21tZW50Jywg
YVBvc3QsIGFDb21tZW50KTsKLSAgICAgIGFDb250cm9sbGVyLnJlcGxhY2VSb3V0ZSgnYmxvZ0Nv
bW1lbnQnLCAxLCAxMyk7Ci0gICAgICBgYGAKLSAgICAgICBJdCBpcyBhbHNvIHBvc3NpYmxlIHRv
IHBhc3MgYSBVUkwgKGEgc3RyaW5nIHRoYXQgc3RhcnRzIHdpdGggYQotICAgICAgYC9gKS4gVGhp
cyBpcyBpbnRlbmRlZCBmb3IgdGVzdGluZyBhbmQgZGVidWdnaW5nIHB1cnBvc2VzIGFuZAotICAg
ICAgc2hvdWxkIHJhcmVseSBiZSB1c2VkIGluIHByb2R1Y3Rpb24gY29kZS4KLSAgICAgICBgYGBq
YXZhc2NyaXB0Ci0gICAgICBhQ29udHJvbGxlci5yZXBsYWNlUm91dGUoJy8nKTsKLSAgICAgIGFD
b250cm9sbGVyLnJlcGxhY2VSb3V0ZSgnL2Jsb2cvcG9zdC8xL2NvbW1lbnQvMTMnKTsKLSAgICAg
IGBgYAotICAgICAgIEBwYXJhbSB7U3RyaW5nfSBuYW1lIHRoZSBuYW1lIG9mIHRoZSByb3V0ZSBv
ciBhIFVSTAotICAgICAgQHBhcmFtIHsuLi5PYmplY3R9IG1vZGVscyB0aGUgbW9kZWwocykgb3Ig
aWRlbnRpZmllcihzKSB0byBiZSB1c2VkCi0gICAgICB3aGlsZSB0cmFuc2l0aW9uaW5nIHRvIHRo
ZSByb3V0ZS4KLSAgICAgIEBmb3IgRW1iZXIuQ29udHJvbGxlck1peGluCi0gICAgICBAbWV0aG9k
IHJlcGxhY2VSb3V0ZQotICAgICAgQHByaXZhdGUKLSAgICAqLwotICAgIHJlcGxhY2VSb3V0ZTog
ZnVuY3Rpb24gKCkgewotICAgICAgLy8gdGFyZ2V0IG1heSBiZSBlaXRoZXIgYW5vdGhlciBjb250
cm9sbGVyIG9yIGEgcm91dGVyCi0gICAgICB2YXIgdGFyZ2V0ID0gX2VtYmVyTWV0YWxQcm9wZXJ0
eV9nZXQuZ2V0KHRoaXMsICd0YXJnZXQnKTsKLSAgICAgIHZhciBtZXRob2QgPSB0YXJnZXQucmVw
bGFjZVJvdXRlIHx8IHRhcmdldC5yZXBsYWNlV2l0aDsKLSAgICAgIHJldHVybiBtZXRob2QuYXBw
bHkodGFyZ2V0LCBhcmd1bWVudHMpOwotICAgIH0KLSAgfSk7Ci0KLSAgZXhwb3J0cy5kZWZhdWx0
ID0gX2VtYmVyUnVudGltZU1peGluc0NvbnRyb2xsZXIuZGVmYXVsdDsKLX0pOwotZW5pZmVkKCdl
bWJlci1yb3V0aW5nL2V4dC9ydW5fbG9vcCcsIFsnZXhwb3J0cycsICdlbWJlci1tZXRhbC9ydW5f
bG9vcCddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0YWxSdW5fbG9vcCkgewotICAndXNl
IHN0cmljdCc7Ci0KLSAgLyoqCi0gIEBtb2R1bGUgZW1iZXIKLSAgQHN1Ym1vZHVsZSBlbWJlci12
aWV3cwotICAqLwotCi0gIC8vIEFkZCBhIG5ldyBuYW1lZCBxdWV1ZSBhZnRlciB0aGUgJ2FjdGlv
bnMnIHF1ZXVlICh3aGVyZSBSU1ZQIHByb21pc2VzCi0gIC8vIHJlc29sdmUpLCB3aGljaCBpcyB1
c2VkIGluIHJvdXRlciB0cmFuc2l0aW9ucyB0byBwcmV2ZW50IHVubmVjZXNzYXJ5Ci0gIC8vIGxv
YWRpbmcgc3RhdGUgZW50cnkgaWYgYWxsIGNvbnRleHQgcHJvbWlzZXMgcmVzb2x2ZSBvbiB0aGUK
LSAgLy8gJ2FjdGlvbnMnIHF1ZXVlIGZpcnN0LgotICBfZW1iZXJNZXRhbFJ1bl9sb29wLmRlZmF1
bHQuX2FkZFF1ZXVlKCdyb3V0ZXJUcmFuc2l0aW9ucycsICdhY3Rpb25zJyk7Ci19KTsKLWVuaWZl
ZCgnZW1iZXItcm91dGluZy9pbmRleCcsIFsnZXhwb3J0cycsICdlbWJlci1tZXRhbC9jb3JlJywg
J2VtYmVyLXJvdXRpbmcvZXh0L3J1bl9sb29wJywgJ2VtYmVyLXJvdXRpbmcvZXh0L2NvbnRyb2xs
ZXInLCAnZW1iZXItcm91dGluZy9sb2NhdGlvbi9hcGknLCAnZW1iZXItcm91dGluZy9sb2NhdGlv
bi9ub25lX2xvY2F0aW9uJywgJ2VtYmVyLXJvdXRpbmcvbG9jYXRpb24vaGFzaF9sb2NhdGlvbics
ICdlbWJlci1yb3V0aW5nL2xvY2F0aW9uL2hpc3RvcnlfbG9jYXRpb24nLCAnZW1iZXItcm91dGlu
Zy9sb2NhdGlvbi9hdXRvX2xvY2F0aW9uJywgJ2VtYmVyLXJvdXRpbmcvc3lzdGVtL2dlbmVyYXRl
X2NvbnRyb2xsZXInLCAnZW1iZXItcm91dGluZy9zeXN0ZW0vY29udHJvbGxlcl9mb3InLCAnZW1i
ZXItcm91dGluZy9zeXN0ZW0vZHNsJywgJ2VtYmVyLXJvdXRpbmcvc3lzdGVtL3JvdXRlcicsICdl
bWJlci1yb3V0aW5nL3N5c3RlbS9yb3V0ZSddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0
YWxDb3JlLCBfZW1iZXJSb3V0aW5nRXh0UnVuX2xvb3AsIF9lbWJlclJvdXRpbmdFeHRDb250cm9s
bGVyLCBfZW1iZXJSb3V0aW5nTG9jYXRpb25BcGksIF9lbWJlclJvdXRpbmdMb2NhdGlvbk5vbmVf
bG9jYXRpb24sIF9lbWJlclJvdXRpbmdMb2NhdGlvbkhhc2hfbG9jYXRpb24sIF9lbWJlclJvdXRp
bmdMb2NhdGlvbkhpc3RvcnlfbG9jYXRpb24sIF9lbWJlclJvdXRpbmdMb2NhdGlvbkF1dG9fbG9j
YXRpb24sIF9lbWJlclJvdXRpbmdTeXN0ZW1HZW5lcmF0ZV9jb250cm9sbGVyLCBfZW1iZXJSb3V0
aW5nU3lzdGVtQ29udHJvbGxlcl9mb3IsIF9lbWJlclJvdXRpbmdTeXN0ZW1Ec2wsIF9lbWJlclJv
dXRpbmdTeXN0ZW1Sb3V0ZXIsIF9lbWJlclJvdXRpbmdTeXN0ZW1Sb3V0ZSkgewotICAvKioKLSAg
QG1vZHVsZSBlbWJlcgotICBAc3VibW9kdWxlIGVtYmVyLXJvdXRpbmcKLSAgKi8KLQotICAndXNl
IHN0cmljdCc7Ci0KLSAgX2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQuTG9jYXRpb24gPSBfZW1iZXJS
b3V0aW5nTG9jYXRpb25BcGkuZGVmYXVsdDsKLSAgX2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQuQXV0
b0xvY2F0aW9uID0gX2VtYmVyUm91dGluZ0xvY2F0aW9uQXV0b19sb2NhdGlvbi5kZWZhdWx0Owot
ICBfZW1iZXJNZXRhbENvcmUuZGVmYXVsdC5IYXNoTG9jYXRpb24gPSBfZW1iZXJSb3V0aW5nTG9j
YXRpb25IYXNoX2xvY2F0aW9uLmRlZmF1bHQ7Ci0gIF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0Lkhp
c3RvcnlMb2NhdGlvbiA9IF9lbWJlclJvdXRpbmdMb2NhdGlvbkhpc3RvcnlfbG9jYXRpb24uZGVm
YXVsdDsKLSAgX2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQuTm9uZUxvY2F0aW9uID0gX2VtYmVyUm91
dGluZ0xvY2F0aW9uTm9uZV9sb2NhdGlvbi5kZWZhdWx0OwotCi0gIF9lbWJlck1ldGFsQ29yZS5k
ZWZhdWx0LmNvbnRyb2xsZXJGb3IgPSBfZW1iZXJSb3V0aW5nU3lzdGVtQ29udHJvbGxlcl9mb3Iu
ZGVmYXVsdDsKLSAgX2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQuZ2VuZXJhdGVDb250cm9sbGVyRmFj
dG9yeSA9IF9lbWJlclJvdXRpbmdTeXN0ZW1HZW5lcmF0ZV9jb250cm9sbGVyLmdlbmVyYXRlQ29u
dHJvbGxlckZhY3Rvcnk7Ci0gIF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0LmdlbmVyYXRlQ29udHJv
bGxlciA9IF9lbWJlclJvdXRpbmdTeXN0ZW1HZW5lcmF0ZV9jb250cm9sbGVyLmRlZmF1bHQ7Ci0g
IF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0LlJvdXRlckRTTCA9IF9lbWJlclJvdXRpbmdTeXN0ZW1E
c2wuZGVmYXVsdDsKLSAgX2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQuUm91dGVyID0gX2VtYmVyUm91
dGluZ1N5c3RlbVJvdXRlci5kZWZhdWx0OwotICBfZW1iZXJNZXRhbENvcmUuZGVmYXVsdC5Sb3V0
ZSA9IF9lbWJlclJvdXRpbmdTeXN0ZW1Sb3V0ZS5kZWZhdWx0OwotCi0gIGV4cG9ydHMuZGVmYXVs
dCA9IF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0OwotfSk7Ci0KLS8vIEVTNlRPRE86IENsZWFudXAg
bW9kdWxlcyB3aXRoIHNpZGUtZWZmZWN0cyBiZWxvdwotZW5pZmVkKCdlbWJlci1yb3V0aW5nL2xv
Y2F0aW9uL2FwaScsIFsnZXhwb3J0cycsICdlbWJlci1tZXRhbC9kZWJ1ZycsICdlbWJlci1tZXRh
bC9lbnZpcm9ubWVudCcsICdlbWJlci1yb3V0aW5nL2xvY2F0aW9uL3V0aWwnXSwgZnVuY3Rpb24g
KGV4cG9ydHMsIF9lbWJlck1ldGFsRGVidWcsIF9lbWJlck1ldGFsRW52aXJvbm1lbnQsIF9lbWJl
clJvdXRpbmdMb2NhdGlvblV0aWwpIHsKLSAgJ3VzZSBzdHJpY3QnOwotCi0gIC8qKgotICBAbW9k
dWxlIGVtYmVyCi0gIEBzdWJtb2R1bGUgZW1iZXItcm91dGluZwotICAqLwotCi0gIC8qKgotICAg
IEVtYmVyLkxvY2F0aW9uIHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIGNvcnJlY3QgaW1wbGVt
ZW50YXRpb24gb2YKLSAgICB0aGUgYGxvY2F0aW9uYCBBUEkuCi0gIAotICAgICMjIEltcGxlbWVu
dGF0aW9ucwotICAKLSAgICBZb3UgY2FuIHBhc3MgYW4gaW1wbGVtZW50YXRpb24gbmFtZSAoYGhh
c2hgLCBgaGlzdG9yeWAsIGBub25lYCkgdG8gZm9yY2UgYQotICAgIHBhcnRpY3VsYXIgaW1wbGVt
ZW50YXRpb24gdG8gYmUgdXNlZCBpbiB5b3VyIGFwcGxpY2F0aW9uLgotICAKLSAgICAjIyMgSGFz
aExvY2F0aW9uCi0gIAotICAgIFVzaW5nIGBIYXNoTG9jYXRpb25gIHJlc3VsdHMgaW4gVVJMcyB3
aXRoIGEgYCNgIChoYXNoIHNpZ24pIHNlcGFyYXRpbmcgdGhlCi0gICAgc2VydmVyIHNpZGUgVVJM
IHBvcnRpb24gb2YgdGhlIFVSTCBmcm9tIHRoZSBwb3J0aW9uIHRoYXQgaXMgdXNlZCBieSBFbWJl
ci4KLSAgICBUaGlzIHJlbGllcyB1cG9uIHRoZSBgaGFzaGNoYW5nZWAgZXZlbnQgZXhpc3Rpbmcg
aW4gdGhlIGJyb3dzZXIuCi0gIAotICAgIEV4YW1wbGU6Ci0gIAotICAgIGBgYGphdmFzY3JpcHQK
LSAgICBBcHAuUm91dGVyLm1hcChmdW5jdGlvbigpIHsKLSAgICAgIHRoaXMucm91dGUoJ3Bvc3Rz
JywgZnVuY3Rpb24oKSB7Ci0gICAgICAgIHRoaXMucm91dGUoJ25ldycpOwotICAgICAgfSk7Ci0g
ICAgfSk7Ci0gIAotICAgIEFwcC5Sb3V0ZXIucmVvcGVuKHsKLSAgICAgIGxvY2F0aW9uOiAnaGFz
aCcKLSAgICB9KTsKLSAgICBgYGAKLSAgCi0gICAgVGhpcyB3aWxsIHJlc3VsdCBpbiBhIHBvc3Rz
Lm5ldyB1cmwgb2YgYC8jL3Bvc3RzL25ld2AuCi0gIAotICAgICMjIyBIaXN0b3J5TG9jYXRpb24K
LSAgCi0gICAgVXNpbmcgYEhpc3RvcnlMb2NhdGlvbmAgcmVzdWx0cyBpbiBVUkxzIHRoYXQgYXJl
IGluZGlzdGluZ3Vpc2hhYmxlIGZyb20gYQotICAgIHN0YW5kYXJkIFVSTC4gVGhpcyByZWxpZXMg
dXBvbiB0aGUgYnJvd3NlcidzIGBoaXN0b3J5YCBBUEkuCi0gIAotICAgIEV4YW1wbGU6Ci0gIAot
ICAgIGBgYGphdmFzY3JpcHQKLSAgICBBcHAuUm91dGVyLm1hcChmdW5jdGlvbigpIHsKLSAgICAg
IHRoaXMucm91dGUoJ3Bvc3RzJywgZnVuY3Rpb24oKSB7Ci0gICAgICAgIHRoaXMucm91dGUoJ25l
dycpOwotICAgICAgfSk7Ci0gICAgfSk7Ci0gIAotICAgIEFwcC5Sb3V0ZXIucmVvcGVuKHsKLSAg
ICAgIGxvY2F0aW9uOiAnaGlzdG9yeScKLSAgICB9KTsKLSAgICBgYGAKLSAgCi0gICAgVGhpcyB3
aWxsIHJlc3VsdCBpbiBhIHBvc3RzLm5ldyB1cmwgb2YgYC9wb3N0cy9uZXdgLgotICAKLSAgICBL
ZWVwIGluIG1pbmQgdGhhdCB5b3VyIHNlcnZlciBtdXN0IHNlcnZlIHRoZSBFbWJlciBhcHAgYXQg
YWxsIHRoZSByb3V0ZXMgeW91Ci0gICAgZGVmaW5lLgotICAKLSAgICAjIyMgQXV0b0xvY2F0aW9u
Ci0gIAotICAgIFVzaW5nIGBBdXRvTG9jYXRpb25gLCB0aGUgcm91dGVyIHdpbGwgdXNlIHRoZSBi
ZXN0IExvY2F0aW9uIGNsYXNzIHN1cHBvcnRlZCBieQotICAgIHRoZSBicm93c2VyIGl0IGlzIHJ1
bm5pbmcgaW4uCi0gIAotICAgIEJyb3dzZXJzIHRoYXQgc3VwcG9ydCB0aGUgYGhpc3RvcnlgIEFQ
SSB3aWxsIHVzZSBgSGlzdG9yeUxvY2F0aW9uYCwgdGhvc2UgdGhhdAotICAgIGRvIG5vdCwgYnV0
IHN0aWxsIHN1cHBvcnQgdGhlIGBoYXNoY2hhbmdlYCBldmVudCB3aWxsIHVzZSBgSGFzaExvY2F0
aW9uYCwgYW5kCi0gICAgaW4gdGhlIHJhcmUgY2FzZSBuZWl0aGVyIGlzIHN1cHBvcnRlZCB3aWxs
IHVzZSBgTm9uZUxvY2F0aW9uYC4KLSAgCi0gICAgRXhhbXBsZToKLSAgCi0gICAgYGBgamF2YXNj
cmlwdAotICAgIEFwcC5Sb3V0ZXIubWFwKGZ1bmN0aW9uKCkgewotICAgICAgdGhpcy5yb3V0ZSgn
cG9zdHMnLCBmdW5jdGlvbigpIHsKLSAgICAgICAgdGhpcy5yb3V0ZSgnbmV3Jyk7Ci0gICAgICB9
KTsKLSAgICB9KTsKLSAgCi0gICAgQXBwLlJvdXRlci5yZW9wZW4oewotICAgICAgbG9jYXRpb246
ICdhdXRvJwotICAgIH0pOwotICAgIGBgYAotICAKLSAgICBUaGlzIHdpbGwgcmVzdWx0IGluIGEg
cG9zdHMubmV3IHVybCBvZiBgL3Bvc3RzL25ld2AgZm9yIG1vZGVybiBicm93c2VycyB0aGF0Ci0g
ICAgc3VwcG9ydCB0aGUgYGhpc3RvcnlgIGFwaSBvciBgLyMvcG9zdHMvbmV3YCBmb3Igb2xkZXIg
b25lcywgbGlrZSBJbnRlcm5ldAotICAgIEV4cGxvcmVyIDkgYW5kIGJlbG93LgotICAKLSAgICBX
aGVuIGEgdXNlciB2aXNpdHMgYSBsaW5rIHRvIHlvdXIgYXBwbGljYXRpb24sIHRoZXkgd2lsbCBi
ZSBhdXRvbWF0aWNhbGx5Ci0gICAgdXBncmFkZWQgb3IgZG93bmdyYWRlZCB0byB0aGUgYXBwcm9w
cmlhdGUgYExvY2F0aW9uYCBjbGFzcywgd2l0aCB0aGUgVVJMCi0gICAgdHJhbnNmb3JtZWQgYWNj
b3JkaW5nbHksIGlmIG5lZWRlZC4KLSAgCi0gICAgS2VlcCBpbiBtaW5kIHRoYXQgc2luY2Ugc29t
ZSBvZiB5b3VyIHVzZXJzIHdpbGwgdXNlIGBIaXN0b3J5TG9jYXRpb25gLCB5b3VyCi0gICAgc2Vy
dmVyIG11c3Qgc2VydmUgdGhlIEVtYmVyIGFwcCBhdCBhbGwgdGhlIHJvdXRlcyB5b3UgZGVmaW5l
LgotICAKLSAgICAjIyMgTm9uZUxvY2F0aW9uCi0gIAotICAgIFVzaW5nIGBOb25lTG9jYXRpb25g
IGNhdXNlcyBFbWJlciB0byBub3Qgc3RvcmUgdGhlIGFwcGxpY2F0aW9ucyBVUkwgc3RhdGUKLSAg
ICBpbiB0aGUgYWN0dWFsIFVSTC4gVGhpcyBpcyBnZW5lcmFsbHkgdXNlZCBmb3IgdGVzdGluZyBw
dXJwb3NlcywgYW5kIGlzIG9uZQotICAgIG9mIHRoZSBjaGFuZ2VzIG1hZGUgd2hlbiBjYWxsaW5n
IGBBcHAuc2V0dXBGb3JUZXN0aW5nKClgLgotICAKLSAgICAjIyBMb2NhdGlvbiBBUEkKLSAgCi0g
ICAgRWFjaCBsb2NhdGlvbiBpbXBsZW1lbnRhdGlvbiBtdXN0IHByb3ZpZGUgdGhlIGZvbGxvd2lu
ZyBtZXRob2RzOgotICAKLSAgICAqIGltcGxlbWVudGF0aW9uOiByZXR1cm5zIHRoZSBzdHJpbmcg
bmFtZSB1c2VkIHRvIHJlZmVyZW5jZSB0aGUgaW1wbGVtZW50YXRpb24uCi0gICAgKiBnZXRVUkw6
IHJldHVybnMgdGhlIGN1cnJlbnQgVVJMLgotICAgICogc2V0VVJMKHBhdGgpOiBzZXRzIHRoZSBj
dXJyZW50IFVSTC4KLSAgICAqIHJlcGxhY2VVUkwocGF0aCk6IHJlcGxhY2UgdGhlIGN1cnJlbnQg
VVJMIChvcHRpb25hbCkuCi0gICAgKiBvblVwZGF0ZVVSTChjYWxsYmFjayk6IHRyaWdnZXJzIHRo
ZSBjYWxsYmFjayB3aGVuIHRoZSBVUkwgY2hhbmdlcy4KLSAgICAqIGZvcm1hdFVSTCh1cmwpOiBm
b3JtYXRzIGB1cmxgIHRvIGJlIHBsYWNlZCBpbnRvIGBocmVmYCBhdHRyaWJ1dGUuCi0gICAgKiBk
ZXRlY3QoKSAob3B0aW9uYWwpOiBpbnN0cnVjdHMgdGhlIGxvY2F0aW9uIHRvIGRvIGFueSBmZWF0
dXJlIGRldGVjdGlvbgotICAgICAgICBuZWNlc3NhcnkuIElmIHRoZSBsb2NhdGlvbiBuZWVkcyB0
byByZWRpcmVjdCB0byBhIGRpZmZlcmVudCBVUkwsIGl0Ci0gICAgICAgIGNhbiBjYW5jZWwgcm91
dGluZyBieSBzZXR0aW5nIHRoZSBgY2FuY2VsUm91dGVyU2V0dXBgIHByb3BlcnR5IG9uIGl0c2Vs
ZgotICAgICAgICB0byBgZmFsc2VgLgotICAKLSAgICBDYWxsaW5nIHNldFVSTCBvciByZXBsYWNl
VVJMIHdpbGwgbm90IHRyaWdnZXIgb25VcGRhdGVVUkwgY2FsbGJhY2tzLgotICAKLSAgICAjIyBD
dXN0b20gaW1wbGVtZW50YXRpb24KLSAgCi0gICAgRW1iZXIgc2NhbnMgYGFwcC9sb2NhdGlvbnMv
KmAgZm9yIGV4dGVuZGluZyB0aGUgTG9jYXRpb24gQVBJLgotICAKLSAgICBFeGFtcGxlOgotICAK
LSAgICBgYGBqYXZhc2NyaXB0Ci0gICAgaW1wb3J0IEVtYmVyIGZyb20gJ2VtYmVyJzsKLSAgCi0g
ICAgZXhwb3J0IGRlZmF1bHQgRW1iZXIuSGlzdG9yeUxvY2F0aW9uLmV4dGVuZCh7Ci0gICAgICBp
bXBsZW1lbnRhdGlvbjogJ2hpc3RvcnktdXJsLWxvZ2dpbmcnLAotICAKLSAgICAgIHB1c2hTdGF0
ZTogZnVuY3Rpb24gKHBhdGgpIHsKLSAgICAgICAgY29uc29sZS5sb2cocGF0aCk7Ci0gICAgICAg
IHRoaXMuX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7Ci0gICAgICB9Ci0gICAgfSk7Ci0g
ICAgYGBgCi0gIAotICAgIEBjbGFzcyBMb2NhdGlvbgotICAgIEBuYW1lc3BhY2UgRW1iZXIKLSAg
ICBAc3RhdGljCi0gICAgQHByaXZhdGUKLSAgKi8KLSAgZXhwb3J0cy5kZWZhdWx0ID0gewotICAg
IC8qKgotICAgICBUaGlzIGlzIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgdXNpbmcgdGhlIGNvbnRh
aW5lciB0byBsb29rdXAgdGhlIGxvY2F0aW9uCi0gICAgIGltcGxlbWVudGF0aW9uIGFzIGRlc2ly
ZWQuCi0gICAgICBGb3IgZXhhbXBsZToKLSAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgLy8gR2l2
ZW4gYSBsb2NhdGlvbiByZWdpc3RlcmVkIGFzIGZvbGxvd3M6Ci0gICAgIGNvbnRhaW5lci5yZWdp
c3RlcignbG9jYXRpb246aGlzdG9yeS10ZXN0JywgSGlzdG9yeVRlc3RMb2NhdGlvbik7Ci0gICAg
ICAvLyBZb3UgY291bGQgY3JlYXRlIGEgbmV3IGluc3RhbmNlIHZpYToKLSAgICAgY29udGFpbmVy
Lmxvb2t1cCgnbG9jYXRpb246aGlzdG9yeS10ZXN0Jyk7Ci0gICAgIGBgYAotICAgICAgIEBtZXRo
b2QgY3JlYXRlCi0gICAgICBAcGFyYW0ge09iamVjdH0gb3B0aW9ucwotICAgICAgQHJldHVybiB7
T2JqZWN0fSBhbiBpbnN0YW5jZSBvZiBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgYGxvY2F0aW9u
YCBBUEkKLSAgICAgIEBkZXByZWNhdGVkIFVzZSB0aGUgY29udGFpbmVyIHRvIGxvb2t1cCB0aGUg
bG9jYXRpb24gaW1wbGVtZW50YXRpb24gdGhhdCB5b3UKLSAgICAgIG5lZWQuCi0gICAgICBAcHJp
dmF0ZQotICAgICovCi0gICAgY3JlYXRlOiBmdW5jdGlvbiAob3B0aW9ucykgewotICAgICAgdmFy
IGltcGxlbWVudGF0aW9uID0gb3B0aW9ucyAmJiBvcHRpb25zLmltcGxlbWVudGF0aW9uOwotICAg
ICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ0VtYmVyLkxvY2F0aW9uLmNyZWF0ZTogeW91IG11
c3Qgc3BlY2lmeSBhIFwnaW1wbGVtZW50YXRpb25cJyBvcHRpb24nLCAhIWltcGxlbWVudGF0aW9u
KTsKLQotICAgICAgdmFyIGltcGxlbWVudGF0aW9uQ2xhc3MgPSB0aGlzLmltcGxlbWVudGF0aW9u
c1tpbXBsZW1lbnRhdGlvbl07Ci0gICAgICBfZW1iZXJNZXRhbERlYnVnLmFzc2VydCgnRW1iZXIu
TG9jYXRpb24uY3JlYXRlOiAnICsgaW1wbGVtZW50YXRpb24gKyAnIGlzIG5vdCBhIHZhbGlkIGlt
cGxlbWVudGF0aW9uJywgISFpbXBsZW1lbnRhdGlvbkNsYXNzKTsKLQotICAgICAgcmV0dXJuIGlt
cGxlbWVudGF0aW9uQ2xhc3MuY3JlYXRlLmFwcGx5KGltcGxlbWVudGF0aW9uQ2xhc3MsIGFyZ3Vt
ZW50cyk7Ci0gICAgfSwKLQotICAgIGltcGxlbWVudGF0aW9uczoge30sCi0gICAgX2xvY2F0aW9u
OiBfZW1iZXJNZXRhbEVudmlyb25tZW50LmRlZmF1bHQubG9jYXRpb24sCi0KLSAgICAvKioKLSAg
ICAgIFJldHVybnMgdGhlIGN1cnJlbnQgYGxvY2F0aW9uLmhhc2hgIGJ5IHBhcnNpbmcgbG9jYXRp
b24uaHJlZiBzaW5jZSBicm93c2VycwotICAgICAgaW5jb25zaXN0ZW50bHkgVVJMLWRlY29kZSBg
bG9jYXRpb24uaGFzaGAuCi0gICAgICAgaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDgzMzA0Ci0gICAgICAgQHByaXZhdGUKLSAgICAgIEBtZXRob2QgZ2V0SGFz
aAotICAgICAgQHNpbmNlIDEuNC4wCi0gICAgKi8KLSAgICBfZ2V0SGFzaDogZnVuY3Rpb24gKCkg
ewotICAgICAgcmV0dXJuIF9lbWJlclJvdXRpbmdMb2NhdGlvblV0aWwuZ2V0SGFzaCh0aGlzLmxv
Y2F0aW9uKTsKLSAgICB9Ci0gIH07Ci19KTsKLWVuaWZlZCgnZW1iZXItcm91dGluZy9sb2NhdGlv
bi9hdXRvX2xvY2F0aW9uJywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFsL2RlYnVnJywgJ2VtYmVy
LW1ldGFsL3Byb3BlcnR5X2dldCcsICdlbWJlci1tZXRhbC9wcm9wZXJ0eV9zZXQnLCAnZW1iZXIt
bWV0YWwvdXRpbHMnLCAnY29udGFpbmVyL293bmVyJywgJ2VtYmVyLXJ1bnRpbWUvc3lzdGVtL29i
amVjdCcsICdlbWJlci1tZXRhbC9lbnZpcm9ubWVudCcsICdlbWJlci1yb3V0aW5nL2xvY2F0aW9u
L3V0aWwnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1ldGFsRGVidWcsIF9lbWJlck1ldGFs
UHJvcGVydHlfZ2V0LCBfZW1iZXJNZXRhbFByb3BlcnR5X3NldCwgX2VtYmVyTWV0YWxVdGlscywg
X2NvbnRhaW5lck93bmVyLCBfZW1iZXJSdW50aW1lU3lzdGVtT2JqZWN0LCBfZW1iZXJNZXRhbEVu
dmlyb25tZW50LCBfZW1iZXJSb3V0aW5nTG9jYXRpb25VdGlsKSB7Ci0gICd1c2Ugc3RyaWN0JzsK
LQotICBleHBvcnRzLmdldEhpc3RvcnlQYXRoID0gZ2V0SGlzdG9yeVBhdGg7Ci0gIGV4cG9ydHMu
Z2V0SGFzaFBhdGggPSBnZXRIYXNoUGF0aDsKLQotICAvKioKLSAgQG1vZHVsZSBlbWJlcgotICBA
c3VibW9kdWxlIGVtYmVyLXJvdXRpbmcKLSAgKi8KLQotICAvKioKLSAgICBFbWJlci5BdXRvTG9j
YXRpb24gd2lsbCBzZWxlY3QgdGhlIGJlc3QgbG9jYXRpb24gb3B0aW9uIGJhc2VkIG9mZiBicm93
c2VyCi0gICAgc3VwcG9ydCB3aXRoIHRoZSBwcmlvcml0eSBvcmRlcjogaGlzdG9yeSwgaGFzaCwg
bm9uZS4KLSAgCi0gICAgQ2xlYW4gcHVzaFN0YXRlIHBhdGhzIGFjY2Vzc2VkIGJ5IGhhc2hjaGFu
Z2Utb25seSBicm93c2VycyB3aWxsIGJlIHJlZGlyZWN0ZWQKLSAgICB0byB0aGUgaGFzaC1lcXVp
dmFsZW50IGFuZCB2aWNlIHZlcnNhIHNvIGZ1dHVyZSB0cmFuc2l0aW9ucyBhcmUgY29uc2lzdGVu
dC4KLSAgCi0gICAgS2VlcCBpbiBtaW5kIHRoYXQgc2luY2Ugc29tZSBvZiB5b3VyIHVzZXJzIHdp
bGwgdXNlIGBIaXN0b3J5TG9jYXRpb25gLCB5b3VyCi0gICAgc2VydmVyIG11c3Qgc2VydmUgdGhl
IEVtYmVyIGFwcCBhdCBhbGwgdGhlIHJvdXRlcyB5b3UgZGVmaW5lLgotICAKLSAgICBAY2xhc3Mg
QXV0b0xvY2F0aW9uCi0gICAgQG5hbWVzcGFjZSBFbWJlcgotICAgIEBzdGF0aWMKLSAgICBAcHJp
dmF0ZQotICAqLwotICBleHBvcnRzLmRlZmF1bHQgPSBfZW1iZXJSdW50aW1lU3lzdGVtT2JqZWN0
LmRlZmF1bHQuZXh0ZW5kKHsKLSAgICAvKioKLSAgICAgIEBwcml2YXRlCi0gICAgICAgVGhlIGJy
b3dzZXIncyBgbG9jYXRpb25gIG9iamVjdC4gVGhpcyBpcyB0eXBpY2FsbHkgZXF1aXZhbGVudCB0
bwotICAgICAgYHdpbmRvdy5sb2NhdGlvbmAsIGJ1dCBtYXkgYmUgb3ZlcnJpZGRlbiBmb3IgdGVz
dGluZy4KLSAgICAgICBAcHJvcGVydHkgbG9jYXRpb24KLSAgICAgIEBkZWZhdWx0IGVudmlyb25t
ZW50LmxvY2F0aW9uCi0gICAgKi8KLSAgICBsb2NhdGlvbjogX2VtYmVyTWV0YWxFbnZpcm9ubWVu
dC5kZWZhdWx0LmxvY2F0aW9uLAotCi0gICAgLyoqCi0gICAgICBAcHJpdmF0ZQotICAgICAgIFRo
ZSBicm93c2VyJ3MgYGhpc3RvcnlgIG9iamVjdC4gVGhpcyBpcyB0eXBpY2FsbHkgZXF1aXZhbGVu
dCB0bwotICAgICAgYHdpbmRvdy5oaXN0b3J5YCwgYnV0IG1heSBiZSBvdmVycmlkZGVuIGZvciB0
ZXN0aW5nLgotICAgICAgIEBzaW5jZSAxLjUuMQotICAgICAgQHByb3BlcnR5IGhpc3RvcnkKLSAg
ICAgIEBkZWZhdWx0IGVudmlyb25tZW50Lmhpc3RvcnkKLSAgICAqLwotICAgIGhpc3Rvcnk6IF9l
bWJlck1ldGFsRW52aXJvbm1lbnQuZGVmYXVsdC5oaXN0b3J5LAotCi0gICAgLyoqCi0gICAgIEBw
cml2YXRlCi0gICAgICBUaGUgdXNlciBhZ2VudCdzIGdsb2JhbCB2YXJpYWJsZS4gSW4gYnJvd3Nl
cnMsIHRoaXMgd2lsbCBiZSBgd2luZG93YC4KLSAgICAgIEBzaW5jZSAxLjExCi0gICAgIEBwcm9w
ZXJ0eSBnbG9iYWwKLSAgICAgQGRlZmF1bHQgZW52aXJvbm1lbnQuZ2xvYmFsCi0gICAgKi8KLSAg
ICBnbG9iYWw6IF9lbWJlck1ldGFsRW52aXJvbm1lbnQuZGVmYXVsdC5nbG9iYWwsCi0KLSAgICAv
KioKLSAgICAgIEBwcml2YXRlCi0gICAgICAgVGhlIGJyb3dzZXIncyBgdXNlckFnZW50YC4gVGhp
cyBpcyB0eXBpY2FsbHkgZXF1aXZhbGVudCB0bwotICAgICAgYG5hdmlnYXRvci51c2VyQWdlbnRg
LCBidXQgbWF5IGJlIG92ZXJyaWRkZW4gZm9yIHRlc3RpbmcuCi0gICAgICAgQHNpbmNlIDEuNS4x
Ci0gICAgICBAcHJvcGVydHkgdXNlckFnZW50Ci0gICAgICBAZGVmYXVsdCBlbnZpcm9ubWVudC5o
aXN0b3J5Ci0gICAgKi8KLSAgICB1c2VyQWdlbnQ6IF9lbWJlck1ldGFsRW52aXJvbm1lbnQuZGVm
YXVsdC51c2VyQWdlbnQsCi0KLSAgICAvKioKLSAgICAgIEBwcml2YXRlCi0gICAgICAgVGhpcyBw
cm9wZXJ0eSBpcyB1c2VkIGJ5IHRoZSByb3V0ZXIgdG8ga25vdyB3aGV0aGVyIHRvIGNhbmNlbCB0
aGUgcm91dGluZwotICAgICAgc2V0dXAgcHJvY2Vzcywgd2hpY2ggaXMgbmVlZGVkIHdoaWxlIHdl
IHJlZGlyZWN0IHRoZSBicm93c2VyLgotICAgICAgIEBzaW5jZSAxLjUuMQotICAgICAgQHByb3Bl
cnR5IGNhbmNlbFJvdXRlclNldHVwCi0gICAgICBAZGVmYXVsdCBmYWxzZQotICAgICovCi0gICAg
Y2FuY2VsUm91dGVyU2V0dXA6IGZhbHNlLAotCi0gICAgLyoqCi0gICAgICBAcHJpdmF0ZQotICAg
ICAgIFdpbGwgYmUgcHJlLXBlbmRlZCB0byBwYXRoIHVwb24gc3RhdGUgY2hhbmdlLgotICAgICAg
IEBzaW5jZSAxLjUuMQotICAgICAgQHByb3BlcnR5IHJvb3RVUkwKLSAgICAgIEBkZWZhdWx0ICcv
JwotICAgICovCi0gICAgcm9vdFVSTDogJy8nLAotCi0gICAgLyoqCi0gICAgIENhbGxlZCBieSB0
aGUgcm91dGVyIHRvIGluc3RydWN0IHRoZSBsb2NhdGlvbiB0byBkbyBhbnkgZmVhdHVyZSBkZXRl
Y3Rpb24KLSAgICAgbmVjZXNzYXJ5LiBJbiB0aGUgY2FzZSBvZiBBdXRvTG9jYXRpb24sIHdlIGRl
dGVjdCB3aGV0aGVyIHRvIHVzZSBoaXN0b3J5Ci0gICAgIG9yIGhhc2ggY29uY3JldGUgaW1wbGVt
ZW50YXRpb25zLgotICAgICAgQHByaXZhdGUKLSAgICAqLwotICAgIGRldGVjdDogZnVuY3Rpb24g
KCkgewotICAgICAgdmFyIHJvb3RVUkwgPSB0aGlzLnJvb3RVUkw7Ci0KLSAgICAgIF9lbWJlck1l
dGFsRGVidWcuYXNzZXJ0KCdyb290VVJMIG11c3QgZW5kIHdpdGggYSB0cmFpbGluZyBmb3J3YXJk
IHNsYXNoIGUuZy4gIi9hcHAvIicsIHJvb3RVUkwuY2hhckF0KHJvb3RVUkwubGVuZ3RoIC0gMSkg
PT09ICcvJyk7Ci0KLSAgICAgIHZhciBpbXBsZW1lbnRhdGlvbiA9IGRldGVjdEltcGxlbWVudGF0
aW9uKHsKLSAgICAgICAgbG9jYXRpb246IHRoaXMubG9jYXRpb24sCi0gICAgICAgIGhpc3Rvcnk6
IHRoaXMuaGlzdG9yeSwKLSAgICAgICAgdXNlckFnZW50OiB0aGlzLnVzZXJBZ2VudCwKLSAgICAg
ICAgcm9vdFVSTDogcm9vdFVSTCwKLSAgICAgICAgZG9jdW1lbnRNb2RlOiB0aGlzLmRvY3VtZW50
TW9kZSwKLSAgICAgICAgZ2xvYmFsOiB0aGlzLmdsb2JhbAotICAgICAgfSk7Ci0KLSAgICAgIGlm
IChpbXBsZW1lbnRhdGlvbiA9PT0gZmFsc2UpIHsKLSAgICAgICAgX2VtYmVyTWV0YWxQcm9wZXJ0
eV9zZXQuc2V0KHRoaXMsICdjYW5jZWxSb3V0ZXJTZXR1cCcsIHRydWUpOwotICAgICAgICBpbXBs
ZW1lbnRhdGlvbiA9ICdub25lJzsKLSAgICAgIH0KLQotICAgICAgdmFyIGNvbmNyZXRlID0gX2Nv
bnRhaW5lck93bmVyLmdldE93bmVyKHRoaXMpLmxvb2t1cCgnbG9jYXRpb246JyArIGltcGxlbWVu
dGF0aW9uKTsKLSAgICAgIF9lbWJlck1ldGFsUHJvcGVydHlfc2V0LnNldChjb25jcmV0ZSwgJ3Jv
b3RVUkwnLCByb290VVJMKTsKLQotICAgICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ0NvdWxk
IG5vdCBmaW5kIGxvY2F0aW9uIFwnJyArIGltcGxlbWVudGF0aW9uICsgJ1wnLicsICEhY29uY3Jl
dGUpOwotCi0gICAgICBfZW1iZXJNZXRhbFByb3BlcnR5X3NldC5zZXQodGhpcywgJ2NvbmNyZXRl
SW1wbGVtZW50YXRpb24nLCBjb25jcmV0ZSk7Ci0gICAgfSwKLQotICAgIGluaXRTdGF0ZTogZGVs
ZWdhdGVUb0NvbmNyZXRlSW1wbGVtZW50YXRpb24oJ2luaXRTdGF0ZScpLAotICAgIGdldFVSTDog
ZGVsZWdhdGVUb0NvbmNyZXRlSW1wbGVtZW50YXRpb24oJ2dldFVSTCcpLAotICAgIHNldFVSTDog
ZGVsZWdhdGVUb0NvbmNyZXRlSW1wbGVtZW50YXRpb24oJ3NldFVSTCcpLAotICAgIHJlcGxhY2VV
Ukw6IGRlbGVnYXRlVG9Db25jcmV0ZUltcGxlbWVudGF0aW9uKCdyZXBsYWNlVVJMJyksCi0gICAg
b25VcGRhdGVVUkw6IGRlbGVnYXRlVG9Db25jcmV0ZUltcGxlbWVudGF0aW9uKCdvblVwZGF0ZVVS
TCcpLAotICAgIGZvcm1hdFVSTDogZGVsZWdhdGVUb0NvbmNyZXRlSW1wbGVtZW50YXRpb24oJ2Zv
cm1hdFVSTCcpLAotCi0gICAgd2lsbERlc3Ryb3k6IGZ1bmN0aW9uICgpIHsKLSAgICAgIHZhciBj
b25jcmV0ZUltcGxlbWVudGF0aW9uID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMs
ICdjb25jcmV0ZUltcGxlbWVudGF0aW9uJyk7Ci0KLSAgICAgIGlmIChjb25jcmV0ZUltcGxlbWVu
dGF0aW9uKSB7Ci0gICAgICAgIGNvbmNyZXRlSW1wbGVtZW50YXRpb24uZGVzdHJveSgpOwotICAg
ICAgfQotICAgIH0KLSAgfSk7Ci0KLSAgZnVuY3Rpb24gZGVsZWdhdGVUb0NvbmNyZXRlSW1wbGVt
ZW50YXRpb24obWV0aG9kTmFtZSkgewotICAgIHJldHVybiBmdW5jdGlvbiAoKSB7Ci0gICAgICB2
YXIgY29uY3JldGVJbXBsZW1lbnRhdGlvbiA9IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0
aGlzLCAnY29uY3JldGVJbXBsZW1lbnRhdGlvbicpOwotICAgICAgX2VtYmVyTWV0YWxEZWJ1Zy5h
c3NlcnQoJ0F1dG9Mb2NhdGlvblwncyBkZXRlY3QoKSBtZXRob2Qgc2hvdWxkIGJlIGNhbGxlZCBi
ZWZvcmUgY2FsbGluZyBhbnkgb3RoZXIgaG9va3MuJywgISFjb25jcmV0ZUltcGxlbWVudGF0aW9u
KTsKLQotICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJh
eShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHsKLSAgICAgICAgYXJnc1tf
a2V5XSA9IGFyZ3VtZW50c1tfa2V5XTsKLSAgICAgIH0KLQotICAgICAgcmV0dXJuIF9lbWJlck1l
dGFsVXRpbHMudHJ5SW52b2tlKGNvbmNyZXRlSW1wbGVtZW50YXRpb24sIG1ldGhvZE5hbWUsIGFy
Z3MpOwotICAgIH07Ci0gIH0KLQotICAvKgotICAgIEdpdmVuIHRoZSBicm93c2VyJ3MgYGxvY2F0
aW9uYCwgYGhpc3RvcnlgIGFuZCBgdXNlckFnZW50YCwgYW5kIGEgY29uZmlndXJlZAotICAgIHJv
b3QgVVJMLCB0aGlzIGZ1bmN0aW9uIGRldGVjdHMgd2hldGhlciB0aGUgYnJvd3NlciBzdXBwb3J0
cyB0aGUgW0hpc3RvcnkKLSAgICBBUEldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2Vu
LVVTL2RvY3MvV2ViL0FQSS9IaXN0b3J5KSBhbmQgcmV0dXJucyBhCi0gICAgc3RyaW5nIHJlcHJl
c2VudGluZyB0aGUgTG9jYXRpb24gb2JqZWN0IHRvIHVzZSBiYXNlZCBvbiBpdHMgZGV0ZXJtaW5h
dGlvbi4KLSAgCi0gICAgRm9yIGV4YW1wbGUsIGlmIHRoZSBwYWdlIGxvYWRzIGluIGFuIGV2ZXJn
cmVlbiBicm93c2VyLCB0aGlzIGZ1bmN0aW9uIHdvdWxkCi0gICAgcmV0dXJuIHRoZSBzdHJpbmcg
Imhpc3RvcnkiLCBtZWFuaW5nIHRoZSBoaXN0b3J5IEFQSSBhbmQgdGh1cyBIaXN0b3J5TG9jYXRp
b24KLSAgICBzaG91bGQgYmUgdXNlZC4gSWYgdGhlIHBhZ2UgaXMgbG9hZGVkIGluIElFOCwgaXQg
d2lsbCByZXR1cm4gdGhlIHN0cmluZwotICAgICJoYXNoLCIgaW5kaWNhdGluZyB0aGF0IHRoZSBI
aXN0b3J5IEFQSSBzaG91bGQgYmUgc2ltdWxhdGVkIGJ5IG1hbmlwdWxhdGluZyB0aGUKLSAgICBo
YXNoIHBvcnRpb24gb2YgdGhlIGxvY2F0aW9uLgotICAKLSAgKi8KLQotICBmdW5jdGlvbiBkZXRl
Y3RJbXBsZW1lbnRhdGlvbihvcHRpb25zKSB7Ci0gICAgdmFyIGxvY2F0aW9uID0gb3B0aW9ucy5s
b2NhdGlvbjsKLSAgICB2YXIgdXNlckFnZW50ID0gb3B0aW9ucy51c2VyQWdlbnQ7Ci0gICAgdmFy
IGhpc3RvcnkgPSBvcHRpb25zLmhpc3Rvcnk7Ci0gICAgdmFyIGRvY3VtZW50TW9kZSA9IG9wdGlv
bnMuZG9jdW1lbnRNb2RlOwotICAgIHZhciBnbG9iYWwgPSBvcHRpb25zLmdsb2JhbDsKLSAgICB2
YXIgcm9vdFVSTCA9IG9wdGlvbnMucm9vdFVSTDsKLQotICAgIHZhciBpbXBsZW1lbnRhdGlvbiA9
ICdub25lJzsKLSAgICB2YXIgY2FuY2VsUm91dGVyU2V0dXAgPSBmYWxzZTsKLSAgICB2YXIgY3Vy
cmVudFBhdGggPSBfZW1iZXJSb3V0aW5nTG9jYXRpb25VdGlsLmdldEZ1bGxQYXRoKGxvY2F0aW9u
KTsKLQotICAgIGlmIChfZW1iZXJSb3V0aW5nTG9jYXRpb25VdGlsLnN1cHBvcnRzSGlzdG9yeSh1
c2VyQWdlbnQsIGhpc3RvcnkpKSB7Ci0gICAgICB2YXIgaGlzdG9yeVBhdGggPSBnZXRIaXN0b3J5
UGF0aChyb290VVJMLCBsb2NhdGlvbik7Ci0KLSAgICAgIC8vIElmIHRoZSBicm93c2VyIHN1cHBv
cnRzIGhpc3RvcnkgYW5kIHdlIGhhdmUgYSBoaXN0b3J5IHBhdGgsIHdlIGNhbiB1c2UKLSAgICAg
IC8vIHRoZSBoaXN0b3J5IGxvY2F0aW9uIHdpdGggbm8gcmVkaXJlY3RzLgotICAgICAgaWYgKGN1
cnJlbnRQYXRoID09PSBoaXN0b3J5UGF0aCkgewotICAgICAgICByZXR1cm4gJ2hpc3RvcnknOwot
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKGN1cnJlbnRQYXRoLnN1YnN0cigwLCAyKSA9PT0g
Jy8jJykgewotICAgICAgICAgIGhpc3RvcnkucmVwbGFjZVN0YXRlKHsgcGF0aDogaGlzdG9yeVBh
dGggfSwgbnVsbCwgaGlzdG9yeVBhdGgpOwotICAgICAgICAgIGltcGxlbWVudGF0aW9uID0gJ2hp
c3RvcnknOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGNhbmNlbFJvdXRlclNldHVwID0g
dHJ1ZTsKLSAgICAgICAgICBfZW1iZXJSb3V0aW5nTG9jYXRpb25VdGlsLnJlcGxhY2VQYXRoKGxv
Y2F0aW9uLCBoaXN0b3J5UGF0aCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9IGVsc2UgaWYg
KF9lbWJlclJvdXRpbmdMb2NhdGlvblV0aWwuc3VwcG9ydHNIYXNoQ2hhbmdlKGRvY3VtZW50TW9k
ZSwgZ2xvYmFsKSkgewotICAgICAgdmFyIGhhc2hQYXRoID0gZ2V0SGFzaFBhdGgocm9vdFVSTCwg
bG9jYXRpb24pOwotCi0gICAgICAvLyBCZSBzdXJlIHdlJ3JlIHVzaW5nIGEgaGFzaGVkIHBhdGgs
IG90aGVyd2lzZSBsZXQncyBzd2l0Y2ggb3ZlciBpdCB0byBzbwotICAgICAgLy8gd2Ugc3RhcnQg
b2ZmIGNsZWFuIGFuZCBjb25zaXN0ZW50LiBXZSdsbCBjb3VudCBhbiBpbmRleCBwYXRoIHdpdGgg
bm8KLSAgICAgIC8vIGhhc2ggYXMgImdvb2QgZW5vdWdoIiBhcyB3ZWxsLgotICAgICAgaWYgKGN1
cnJlbnRQYXRoID09PSBoYXNoUGF0aCB8fCBjdXJyZW50UGF0aCA9PT0gJy8nICYmIGhhc2hQYXRo
ID09PSAnLyMvJykgewotICAgICAgICBpbXBsZW1lbnRhdGlvbiA9ICdoYXNoJzsKLSAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgIC8vIE91ciBVUkwgaXNuJ3QgaW4gdGhlIGV4cGVjdGVkIGhhc2gtc3Vw
cG9ydGVkIGZvcm1hdCwgc28gd2Ugd2FudCB0bwotICAgICAgICAvLyBjYW5jZWwgdGhlIHJvdXRl
ciBzZXR1cCBhbmQgcmVwbGFjZSB0aGUgVVJMIHRvIHN0YXJ0IG9mZiBjbGVhbgotICAgICAgICBj
YW5jZWxSb3V0ZXJTZXR1cCA9IHRydWU7Ci0gICAgICAgIF9lbWJlclJvdXRpbmdMb2NhdGlvblV0
aWwucmVwbGFjZVBhdGgobG9jYXRpb24sIGhhc2hQYXRoKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAg
ICBpZiAoY2FuY2VsUm91dGVyU2V0dXApIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gaW1wbGVtZW50YXRpb247Ci0gIH0KLQotICAvKioKLSAgICBAcHJpdmF0ZQot
ICAKLSAgICBSZXR1cm5zIHRoZSBjdXJyZW50IHBhdGggYXMgaXQgc2hvdWxkIGFwcGVhciBmb3Ig
SGlzdG9yeUxvY2F0aW9uIHN1cHBvcnRlZAotICAgIGJyb3dzZXJzLiBUaGlzIG1heSB2ZXJ5IHdl
bGwgZGlmZmVyIGZyb20gdGhlIHJlYWwgY3VycmVudCBwYXRoIChlLmcuIGlmIGl0Ci0gICAgc3Rh
cnRzIG9mZiBhcyBhIGhhc2hlZCBVUkwpCi0gICovCi0KLSAgZnVuY3Rpb24gZ2V0SGlzdG9yeVBh
dGgocm9vdFVSTCwgbG9jYXRpb24pIHsKLSAgICB2YXIgcGF0aCA9IF9lbWJlclJvdXRpbmdMb2Nh
dGlvblV0aWwuZ2V0UGF0aChsb2NhdGlvbik7Ci0gICAgdmFyIGhhc2ggPSBfZW1iZXJSb3V0aW5n
TG9jYXRpb25VdGlsLmdldEhhc2gobG9jYXRpb24pOwotICAgIHZhciBxdWVyeSA9IF9lbWJlclJv
dXRpbmdMb2NhdGlvblV0aWwuZ2V0UXVlcnkobG9jYXRpb24pOwotICAgIHZhciByb290VVJMSW5k
ZXggPSBwYXRoLmluZGV4T2Yocm9vdFVSTCk7Ci0gICAgdmFyIHJvdXRlSGFzaCwgaGFzaFBhcnRz
OwotCi0gICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ1BhdGggJyArIHBhdGggKyAnIGRvZXMg
bm90IHN0YXJ0IHdpdGggdGhlIHByb3ZpZGVkIHJvb3RVUkwgJyArIHJvb3RVUkwsIHJvb3RVUkxJ
bmRleCA9PT0gMCk7Ci0KLSAgICAvLyBCeSBjb252ZW50aW9uLCBFbWJlci5qcyByb3V0ZXMgdXNp
bmcgSGFzaExvY2F0aW9uIGFyZSByZXF1aXJlZCB0byBzdGFydAotICAgIC8vIHdpdGggYCMvYC4g
QW55dGhpbmcgZWxzZSBzaG91bGQgTk9UIGJlIGNvbnNpZGVyZWQgYSByb3V0ZSBhbmQgc2hvdWxk
Ci0gICAgLy8gYmUgcGFzc2VkIHN0cmFpZ2h0IHRocm91Z2gsIHdpdGhvdXQgdHJhbnNmb3JtYXRp
b24uCi0gICAgaWYgKGhhc2guc3Vic3RyKDAsIDIpID09PSAnIy8nKSB7Ci0gICAgICAvLyBUaGVy
ZSBjb3VsZCBiZSBleHRyYSBoYXNoIHNlZ21lbnRzIGFmdGVyIHRoZSByb3V0ZQotICAgICAgaGFz
aFBhcnRzID0gaGFzaC5zdWJzdHIoMSkuc3BsaXQoJyMnKTsKLSAgICAgIC8vIFRoZSBmaXJzdCBv
bmUgaXMgYWx3YXlzIHRoZSByb3V0ZSB1cmwKLSAgICAgIHJvdXRlSGFzaCA9IGhhc2hQYXJ0cy5z
aGlmdCgpOwotCi0gICAgICAvLyBJZiB0aGUgcGF0aCBhbHJlYWR5IGhhcyBhIHRyYWlsaW5nIHNs
YXNoLCByZW1vdmUgdGhlIG9uZQotICAgICAgLy8gZnJvbSB0aGUgaGFzaGVkIHJvdXRlIHNvIHdl
IGRvbid0IGRvdWJsZSB1cC4KLSAgICAgIGlmIChwYXRoLnNsaWNlKC0xKSA9PT0gJy8nKSB7Ci0g
ICAgICAgIHJvdXRlSGFzaCA9IHJvdXRlSGFzaC5zdWJzdHIoMSk7Ci0gICAgICB9Ci0KLSAgICAg
IC8vIFRoaXMgaXMgdGhlICJleHBlY3RlZCIgZmluYWwgb3JkZXIKLSAgICAgIHBhdGggPSBwYXRo
ICsgcm91dGVIYXNoICsgcXVlcnk7Ci0KLSAgICAgIGlmIChoYXNoUGFydHMubGVuZ3RoKSB7Ci0g
ICAgICAgIHBhdGggKz0gJyMnICsgaGFzaFBhcnRzLmpvaW4oJyMnKTsKLSAgICAgIH0KLSAgICB9
IGVsc2UgewotICAgICAgcGF0aCA9IHBhdGggKyBxdWVyeSArIGhhc2g7Ci0gICAgfQotCi0gICAg
cmV0dXJuIHBhdGg7Ci0gIH0KLQotICAvKioKLSAgICBAcHJpdmF0ZQotICAKLSAgICBSZXR1cm5z
IHRoZSBjdXJyZW50IHBhdGggYXMgaXQgc2hvdWxkIGFwcGVhciBmb3IgSGFzaExvY2F0aW9uIHN1
cHBvcnRlZAotICAgIGJyb3dzZXJzLiBUaGlzIG1heSB2ZXJ5IHdlbGwgZGlmZmVyIGZyb20gdGhl
IHJlYWwgY3VycmVudCBwYXRoLgotICAKLSAgICBAbWV0aG9kIF9nZXRIYXNoUGF0aAotICAqLwot
Ci0gIGZ1bmN0aW9uIGdldEhhc2hQYXRoKHJvb3RVUkwsIGxvY2F0aW9uKSB7Ci0gICAgdmFyIHBh
dGggPSByb290VVJMOwotICAgIHZhciBoaXN0b3J5UGF0aCA9IGdldEhpc3RvcnlQYXRoKHJvb3RV
UkwsIGxvY2F0aW9uKTsKLSAgICB2YXIgcm91dGVQYXRoID0gaGlzdG9yeVBhdGguc3Vic3RyKHJv
b3RVUkwubGVuZ3RoKTsKLQotICAgIGlmIChyb3V0ZVBhdGggIT09ICcnKSB7Ci0gICAgICBpZiAo
cm91dGVQYXRoLmNoYXJBdCgwKSAhPT0gJy8nKSB7Ci0gICAgICAgIHJvdXRlUGF0aCA9ICcvJyAr
IHJvdXRlUGF0aDsKLSAgICAgIH0KLQotICAgICAgcGF0aCArPSAnIycgKyByb3V0ZVBhdGg7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIHBhdGg7Ci0gIH0KLX0pOwotZW5pZmVkKCdlbWJlci1yb3V0aW5n
L2xvY2F0aW9uL2hhc2hfbG9jYXRpb24nLCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwvcHJvcGVy
dHlfZ2V0JywgJ2VtYmVyLW1ldGFsL3Byb3BlcnR5X3NldCcsICdlbWJlci1tZXRhbC9ydW5fbG9v
cCcsICdlbWJlci1tZXRhbC91dGlscycsICdlbWJlci1ydW50aW1lL3N5c3RlbS9vYmplY3QnLCAn
ZW1iZXItcm91dGluZy9sb2NhdGlvbi9hcGknLCAnZW1iZXItdmlld3Mvc3lzdGVtL2pxdWVyeSdd
LCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQsIF9lbWJlck1ldGFs
UHJvcGVydHlfc2V0LCBfZW1iZXJNZXRhbFJ1bl9sb29wLCBfZW1iZXJNZXRhbFV0aWxzLCBfZW1i
ZXJSdW50aW1lU3lzdGVtT2JqZWN0LCBfZW1iZXJSb3V0aW5nTG9jYXRpb25BcGksIF9lbWJlclZp
ZXdzU3lzdGVtSnF1ZXJ5KSB7Ci0gICd1c2Ugc3RyaWN0JzsKLQotICAvKioKLSAgQG1vZHVsZSBl
bWJlcgotICBAc3VibW9kdWxlIGVtYmVyLXJvdXRpbmcKLSAgKi8KLQotICAvKioKLSAgICBgRW1i
ZXIuSGFzaExvY2F0aW9uYCBpbXBsZW1lbnRzIHRoZSBsb2NhdGlvbiBBUEkgdXNpbmcgdGhlIGJy
b3dzZXIncwotICAgIGhhc2guIEF0IHByZXNlbnQsIGl0IHJlbGllcyBvbiBhIGBoYXNoY2hhbmdl
YCBldmVudCBleGlzdGluZyBpbiB0aGUKLSAgICBicm93c2VyLgotICAKLSAgICBAY2xhc3MgSGFz
aExvY2F0aW9uCi0gICAgQG5hbWVzcGFjZSBFbWJlcgotICAgIEBleHRlbmRzIEVtYmVyLk9iamVj
dAotICAgIEBwcml2YXRlCi0gICovCi0gIGV4cG9ydHMuZGVmYXVsdCA9IF9lbWJlclJ1bnRpbWVT
eXN0ZW1PYmplY3QuZGVmYXVsdC5leHRlbmQoewotICAgIGltcGxlbWVudGF0aW9uOiAnaGFzaCcs
Ci0KLSAgICBpbml0OiBmdW5jdGlvbiAoKSB7Ci0gICAgICBfZW1iZXJNZXRhbFByb3BlcnR5X3Nl
dC5zZXQodGhpcywgJ2xvY2F0aW9uJywgX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMs
ICdfbG9jYXRpb24nKSB8fCB3aW5kb3cubG9jYXRpb24pOwotICAgIH0sCi0KLSAgICAvKioKLSAg
ICAgIEBwcml2YXRlCi0gICAgICAgUmV0dXJucyBub3JtYWxpemVkIGxvY2F0aW9uLmhhc2gKLSAg
ICAgICBAc2luY2UgMS41LjEKLSAgICAgIEBtZXRob2QgZ2V0SGFzaAotICAgICovCi0gICAgZ2V0
SGFzaDogX2VtYmVyUm91dGluZ0xvY2F0aW9uQXBpLmRlZmF1bHQuX2dldEhhc2gsCi0KLSAgICAv
KioKLSAgICAgIFJldHVybnMgdGhlIG5vcm1hbGl6ZWQgVVJMLCBjb25zdHJ1Y3RlZCBmcm9tIGBs
b2NhdGlvbi5oYXNoYC4KLSAgICAgICBlLmcuIGAjL2Zvb2AgPT4gYC9mb29gIGFzIHdlbGwgYXMg
YCMvZm9vI2JhcmAgPT4gYC9mb28jYmFyYC4KLSAgICAgICBCeSBjb252ZW50aW9uLCBoYXNoZWQg
cGF0aHMgbXVzdCBiZWdpbiB3aXRoIGEgZm9yd2FyZCBzbGFzaCwgb3RoZXJ3aXNlIHRoZXkKLSAg
ICAgIGFyZSBub3QgdHJlYXRlZCBhcyBhIHBhdGggc28gd2UgY2FuIGRpc3Rpbmd1aXNoIGludGVu
dC4KLSAgICAgICBAcHJpdmF0ZQotICAgICAgQG1ldGhvZCBnZXRVUkwKLSAgICAqLwotICAgIGdl
dFVSTDogZnVuY3Rpb24gKCkgewotICAgICAgdmFyIG9yaWdpbmFsUGF0aCA9IHRoaXMuZ2V0SGFz
aCgpLnN1YnN0cigxKTsKLSAgICAgIHZhciBvdXRQYXRoID0gb3JpZ2luYWxQYXRoOwotCi0gICAg
ICBpZiAob3V0UGF0aC5jaGFyQXQoMCkgIT09ICcvJykgewotICAgICAgICBvdXRQYXRoID0gJy8n
OwotCi0gICAgICAgIC8vIE9ubHkgYWRkIHRoZSAjIGlmIHRoZSBwYXRoIGlzbid0IGVtcHR5Lgot
ICAgICAgICAvLyBXZSBkbyBOT1Qgd2FudCBgLyNgIHNpbmNlIHRoZSBhbXBlcnNhbmQKLSAgICAg
ICAgLy8gaXMgb25seSBpbmNsdWRlZCAoY29udmVudGlvbmFsbHkpIHdoZW4KLSAgICAgICAgLy8g
dGhlIGxvY2F0aW9uLmhhc2ggaGFzIGEgdmFsdWUKLSAgICAgICAgaWYgKG9yaWdpbmFsUGF0aCkg
ewotICAgICAgICAgIG91dFBhdGggKz0gJyMnICsgb3JpZ2luYWxQYXRoOwotICAgICAgICB9Ci0g
ICAgICB9Ci0KLSAgICAgIHJldHVybiBvdXRQYXRoOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAg
IFNldCB0aGUgYGxvY2F0aW9uLmhhc2hgIGFuZCByZW1lbWJlcnMgd2hhdCB3YXMgc2V0LiBUaGlz
IHByZXZlbnRzCi0gICAgICBgb25VcGRhdGVVUkxgIGNhbGxiYWNrcyBmcm9tIHRyaWdnZXJpbmcg
d2hlbiB0aGUgaGFzaCB3YXMgc2V0IGJ5Ci0gICAgICBgSGFzaExvY2F0aW9uYC4KLSAgICAgICBA
cHJpdmF0ZQotICAgICAgQG1ldGhvZCBzZXRVUkwKLSAgICAgIEBwYXJhbSBwYXRoIHtTdHJpbmd9
Ci0gICAgKi8KLSAgICBzZXRVUkw6IGZ1bmN0aW9uIChwYXRoKSB7Ci0gICAgICBfZW1iZXJNZXRh
bFByb3BlcnR5X2dldC5nZXQodGhpcywgJ2xvY2F0aW9uJykuaGFzaCA9IHBhdGg7Ci0gICAgICBf
ZW1iZXJNZXRhbFByb3BlcnR5X3NldC5zZXQodGhpcywgJ2xhc3RTZXRVUkwnLCBwYXRoKTsKLSAg
ICB9LAotCi0gICAgLyoqCi0gICAgICBVc2VzIGxvY2F0aW9uLnJlcGxhY2UgdG8gdXBkYXRlIHRo
ZSB1cmwgd2l0aG91dCBhIHBhZ2UgcmVsb2FkCi0gICAgICBvciBoaXN0b3J5IG1vZGlmaWNhdGlv
bi4KLSAgICAgICBAcHJpdmF0ZQotICAgICAgQG1ldGhvZCByZXBsYWNlVVJMCi0gICAgICBAcGFy
YW0gcGF0aCB7U3RyaW5nfQotICAgICovCi0gICAgcmVwbGFjZVVSTDogZnVuY3Rpb24gKHBhdGgp
IHsKLSAgICAgIF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0aGlzLCAnbG9jYXRpb24nKS5y
ZXBsYWNlKCcjJyArIHBhdGgpOwotICAgICAgX2VtYmVyTWV0YWxQcm9wZXJ0eV9zZXQuc2V0KHRo
aXMsICdsYXN0U2V0VVJMJywgcGF0aCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAgUmVnaXN0
ZXIgYSBjYWxsYmFjayB0byBiZSBpbnZva2VkIHdoZW4gdGhlIGhhc2ggY2hhbmdlcy4gVGhlc2UK
LSAgICAgIGNhbGxiYWNrcyB3aWxsIGV4ZWN1dGUgd2hlbiB0aGUgdXNlciBwcmVzc2VzIHRoZSBi
YWNrIG9yIGZvcndhcmQKLSAgICAgIGJ1dHRvbiwgYnV0IG5vdCBhZnRlciBgc2V0VVJMYCBpcyBp
bnZva2VkLgotICAgICAgIEBwcml2YXRlCi0gICAgICBAbWV0aG9kIG9uVXBkYXRlVVJMCi0gICAg
ICBAcGFyYW0gY2FsbGJhY2sge0Z1bmN0aW9ufQotICAgICovCi0gICAgb25VcGRhdGVVUkw6IGZ1
bmN0aW9uIChjYWxsYmFjaykgewotICAgICAgdmFyIF90aGlzID0gdGhpczsKLQotICAgICAgdmFy
IGd1aWQgPSBfZW1iZXJNZXRhbFV0aWxzLmd1aWRGb3IodGhpcyk7Ci0KLSAgICAgIF9lbWJlclZp
ZXdzU3lzdGVtSnF1ZXJ5LmRlZmF1bHQod2luZG93KS5vbignaGFzaGNoYW5nZS5lbWJlci1sb2Nh
dGlvbi0nICsgZ3VpZCwgZnVuY3Rpb24gKCkgewotICAgICAgICBfZW1iZXJNZXRhbFJ1bl9sb29w
LmRlZmF1bHQoZnVuY3Rpb24gKCkgewotICAgICAgICAgIHZhciBwYXRoID0gX3RoaXMuZ2V0VVJM
KCk7Ci0gICAgICAgICAgaWYgKF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldChfdGhpcywgJ2xh
c3RTZXRVUkwnKSA9PT0gcGF0aCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgIH0K
LQotICAgICAgICAgIF9lbWJlck1ldGFsUHJvcGVydHlfc2V0LnNldChfdGhpcywgJ2xhc3RTZXRV
UkwnLCBudWxsKTsKLQotICAgICAgICAgIGNhbGxiYWNrKHBhdGgpOwotICAgICAgICB9KTsKLSAg
ICAgIH0pOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgIEdpdmVuIGEgVVJMLCBmb3JtYXRzIGl0
IHRvIGJlIHBsYWNlZCBpbnRvIHRoZSBwYWdlIGFzIHBhcnQKLSAgICAgIG9mIGFuIGVsZW1lbnQn
cyBgaHJlZmAgYXR0cmlidXRlLgotICAgICAgIFRoaXMgaXMgdXNlZCwgZm9yIGV4YW1wbGUsIHdo
ZW4gdXNpbmcgdGhlIHt7YWN0aW9ufX0gaGVscGVyCi0gICAgICB0byBnZW5lcmF0ZSBhIFVSTCBi
YXNlZCBvbiBhbiBldmVudC4KLSAgICAgICBAcHJpdmF0ZQotICAgICAgQG1ldGhvZCBmb3JtYXRV
UkwKLSAgICAgIEBwYXJhbSB1cmwge1N0cmluZ30KLSAgICAqLwotICAgIGZvcm1hdFVSTDogZnVu
Y3Rpb24gKHVybCkgewotICAgICAgcmV0dXJuICcjJyArIHVybDsKLSAgICB9LAotCi0gICAgLyoq
Ci0gICAgICBDbGVhbnMgdXAgdGhlIEhhc2hMb2NhdGlvbiBldmVudCBsaXN0ZW5lci4KLSAgICAg
ICBAcHJpdmF0ZQotICAgICAgQG1ldGhvZCB3aWxsRGVzdHJveQotICAgICovCi0gICAgd2lsbERl
c3Ryb3k6IGZ1bmN0aW9uICgpIHsKLSAgICAgIHZhciBndWlkID0gX2VtYmVyTWV0YWxVdGlscy5n
dWlkRm9yKHRoaXMpOwotCi0gICAgICBfZW1iZXJWaWV3c1N5c3RlbUpxdWVyeS5kZWZhdWx0KHdp
bmRvdykub2ZmKCdoYXNoY2hhbmdlLmVtYmVyLWxvY2F0aW9uLScgKyBndWlkKTsKLSAgICB9Ci0g
IH0pOwotfSk7Ci1lbmlmZWQoJ2VtYmVyLXJvdXRpbmcvbG9jYXRpb24vaGlzdG9yeV9sb2NhdGlv
bicsIFsnZXhwb3J0cycsICdlbWJlci1tZXRhbC9wcm9wZXJ0eV9nZXQnLCAnZW1iZXItbWV0YWwv
cHJvcGVydHlfc2V0JywgJ2VtYmVyLW1ldGFsL3V0aWxzJywgJ2VtYmVyLXJ1bnRpbWUvc3lzdGVt
L29iamVjdCcsICdlbWJlci1yb3V0aW5nL2xvY2F0aW9uL2FwaScsICdlbWJlci12aWV3cy9zeXN0
ZW0vanF1ZXJ5J10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbFByb3BlcnR5X2dldCwg
X2VtYmVyTWV0YWxQcm9wZXJ0eV9zZXQsIF9lbWJlck1ldGFsVXRpbHMsIF9lbWJlclJ1bnRpbWVT
eXN0ZW1PYmplY3QsIF9lbWJlclJvdXRpbmdMb2NhdGlvbkFwaSwgX2VtYmVyVmlld3NTeXN0ZW1K
cXVlcnkpIHsKLSAgJ3VzZSBzdHJpY3QnOwotCi0gIC8qKgotICBAbW9kdWxlIGVtYmVyCi0gIEBz
dWJtb2R1bGUgZW1iZXItcm91dGluZwotICAqLwotCi0gIHZhciBwb3BzdGF0ZUZpcmVkID0gZmFs
c2U7Ci0KLSAgLyoqCi0gICAgRW1iZXIuSGlzdG9yeUxvY2F0aW9uIGltcGxlbWVudHMgdGhlIGxv
Y2F0aW9uIEFQSSB1c2luZyB0aGUgYnJvd3NlcidzCi0gICAgaGlzdG9yeS5wdXNoU3RhdGUgQVBJ
LgotICAKLSAgICBAY2xhc3MgSGlzdG9yeUxvY2F0aW9uCi0gICAgQG5hbWVzcGFjZSBFbWJlcgot
ICAgIEBleHRlbmRzIEVtYmVyLk9iamVjdAotICAgIEBwcml2YXRlCi0gICovCi0gIGV4cG9ydHMu
ZGVmYXVsdCA9IF9lbWJlclJ1bnRpbWVTeXN0ZW1PYmplY3QuZGVmYXVsdC5leHRlbmQoewotICAg
IGltcGxlbWVudGF0aW9uOiAnaGlzdG9yeScsCi0KLSAgICBpbml0OiBmdW5jdGlvbiAoKSB7Ci0g
ICAgICBfZW1iZXJNZXRhbFByb3BlcnR5X3NldC5zZXQodGhpcywgJ2xvY2F0aW9uJywgX2VtYmVy
TWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsICdsb2NhdGlvbicpIHx8IHdpbmRvdy5sb2NhdGlv
bik7Ci0gICAgICBfZW1iZXJNZXRhbFByb3BlcnR5X3NldC5zZXQodGhpcywgJ2Jhc2VVUkwnLCBf
ZW1iZXJWaWV3c1N5c3RlbUpxdWVyeS5kZWZhdWx0KCdiYXNlJykuYXR0cignaHJlZicpIHx8ICcn
KTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICBVc2VkIHRvIHNldCBzdGF0ZSBvbiBmaXJzdCBj
YWxsIHRvIHNldFVSTAotICAgICAgIEBwcml2YXRlCi0gICAgICBAbWV0aG9kIGluaXRTdGF0ZQot
ICAgICovCi0gICAgaW5pdFN0YXRlOiBmdW5jdGlvbiAoKSB7Ci0gICAgICB2YXIgaGlzdG9yeSA9
IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0aGlzLCAnaGlzdG9yeScpIHx8IHdpbmRvdy5o
aXN0b3J5OwotICAgICAgX2VtYmVyTWV0YWxQcm9wZXJ0eV9zZXQuc2V0KHRoaXMsICdoaXN0b3J5
JywgaGlzdG9yeSk7Ci0KLSAgICAgIGlmIChoaXN0b3J5ICYmICdzdGF0ZScgaW4gaGlzdG9yeSkg
ewotICAgICAgICB0aGlzLnN1cHBvcnRzSGlzdG9yeSA9IHRydWU7Ci0gICAgICB9Ci0KLSAgICAg
IHRoaXMucmVwbGFjZVN0YXRlKHRoaXMuZm9ybWF0VVJMKHRoaXMuZ2V0VVJMKCkpKTsKLSAgICB9
LAotCi0gICAgLyoqCi0gICAgICBXaWxsIGJlIHByZS1wZW5kZWQgdG8gcGF0aCB1cG9uIHN0YXRl
IGNoYW5nZQotICAgICAgIEBwcm9wZXJ0eSByb290VVJMCi0gICAgICBAZGVmYXVsdCAnLycKLSAg
ICAgIEBwcml2YXRlCi0gICAgKi8KLSAgICByb290VVJMOiAnLycsCi0KLSAgICAvKioKLSAgICAg
IFJldHVybnMgdGhlIGN1cnJlbnQgYGxvY2F0aW9uLnBhdGhuYW1lYCB3aXRob3V0IGByb290VVJM
YCBvciBgYmFzZVVSTGAKLSAgICAgICBAcHJpdmF0ZQotICAgICAgQG1ldGhvZCBnZXRVUkwKLSAg
ICAgIEByZXR1cm4gdXJsIHtTdHJpbmd9Ci0gICAgKi8KLSAgICBnZXRVUkw6IGZ1bmN0aW9uICgp
IHsKLSAgICAgIHZhciBsb2NhdGlvbiA9IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0aGlz
LCAnbG9jYXRpb24nKTsKLSAgICAgIHZhciBwYXRoID0gbG9jYXRpb24ucGF0aG5hbWU7Ci0KLSAg
ICAgIHZhciByb290VVJMID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsICdyb290
VVJMJyk7Ci0gICAgICB2YXIgYmFzZVVSTCA9IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0
aGlzLCAnYmFzZVVSTCcpOwotCi0gICAgICAvLyByZW1vdmUgdHJhaWxpbmcgc2xhc2hlcyBpZiB0
aGV5IGV4aXN0cwotICAgICAgcm9vdFVSTCA9IHJvb3RVUkwucmVwbGFjZSgvXC8kLywgJycpOwot
ICAgICAgYmFzZVVSTCA9IGJhc2VVUkwucmVwbGFjZSgvXC8kLywgJycpOwotCi0gICAgICAvLyBy
ZW1vdmUgYmFzZVVSTCBhbmQgcm9vdFVSTCBmcm9tIHN0YXJ0IG9mIHBhdGgKLSAgICAgIHZhciB1
cmwgPSBwYXRoLnJlcGxhY2UobmV3IFJlZ0V4cCgnXicgKyBiYXNlVVJMICsgJyg/PS98JCknKSwg
JycpLnJlcGxhY2UobmV3IFJlZ0V4cCgnXicgKyByb290VVJMICsgJyg/PS98JCknKSwgJycpOwot
Ci0gICAgICB2YXIgc2VhcmNoID0gbG9jYXRpb24uc2VhcmNoIHx8ICcnOwotICAgICAgdXJsICs9
IHNlYXJjaDsKLSAgICAgIHVybCArPSB0aGlzLmdldEhhc2goKTsKLQotICAgICAgcmV0dXJuIHVy
bDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICBVc2VzIGBoaXN0b3J5LnB1c2hTdGF0ZWAgdG8g
dXBkYXRlIHRoZSB1cmwgd2l0aG91dCBhIHBhZ2UgcmVsb2FkLgotICAgICAgIEBwcml2YXRlCi0g
ICAgICBAbWV0aG9kIHNldFVSTAotICAgICAgQHBhcmFtIHBhdGgge1N0cmluZ30KLSAgICAqLwot
ICAgIHNldFVSTDogZnVuY3Rpb24gKHBhdGgpIHsKLSAgICAgIHZhciBzdGF0ZSA9IHRoaXMuZ2V0
U3RhdGUoKTsKLSAgICAgIHBhdGggPSB0aGlzLmZvcm1hdFVSTChwYXRoKTsKLQotICAgICAgaWYg
KCFzdGF0ZSB8fCBzdGF0ZS5wYXRoICE9PSBwYXRoKSB7Ci0gICAgICAgIHRoaXMucHVzaFN0YXRl
KHBhdGgpOwotICAgICAgfQotICAgIH0sCi0KLSAgICAvKioKLSAgICAgIFVzZXMgYGhpc3Rvcnku
cmVwbGFjZVN0YXRlYCB0byB1cGRhdGUgdGhlIHVybCB3aXRob3V0IGEgcGFnZSByZWxvYWQKLSAg
ICAgIG9yIGhpc3RvcnkgbW9kaWZpY2F0aW9uLgotICAgICAgIEBwcml2YXRlCi0gICAgICBAbWV0
aG9kIHJlcGxhY2VVUkwKLSAgICAgIEBwYXJhbSBwYXRoIHtTdHJpbmd9Ci0gICAgKi8KLSAgICBy
ZXBsYWNlVVJMOiBmdW5jdGlvbiAocGF0aCkgewotICAgICAgdmFyIHN0YXRlID0gdGhpcy5nZXRT
dGF0ZSgpOwotICAgICAgcGF0aCA9IHRoaXMuZm9ybWF0VVJMKHBhdGgpOwotCi0gICAgICBpZiAo
IXN0YXRlIHx8IHN0YXRlLnBhdGggIT09IHBhdGgpIHsKLSAgICAgICAgdGhpcy5yZXBsYWNlU3Rh
dGUocGF0aCk7Ci0gICAgICB9Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAgR2V0IHRoZSBjdXJy
ZW50IGBoaXN0b3J5LnN0YXRlYC4gQ2hlY2tzIGZvciBpZiBhIHBvbHlmaWxsIGlzCi0gICAgICBy
ZXF1aXJlZCBhbmQgaWYgc28gZmV0Y2hlcyB0aGlzLl9oaXN0b3J5U3RhdGUuIFRoZSBzdGF0ZSBy
ZXR1cm5lZAotICAgICAgZnJvbSBnZXRTdGF0ZSBtYXkgYmUgbnVsbCBpZiBhbiBpZnJhbWUgaGFz
IGNoYW5nZWQgYSB3aW5kb3cncwotICAgICAgaGlzdG9yeS4KLSAgICAgICBAcHJpdmF0ZQotICAg
ICAgQG1ldGhvZCBnZXRTdGF0ZQotICAgICAgQHJldHVybiBzdGF0ZSB7T2JqZWN0fQotICAgICov
Ci0gICAgZ2V0U3RhdGU6IGZ1bmN0aW9uICgpIHsKLSAgICAgIGlmICh0aGlzLnN1cHBvcnRzSGlz
dG9yeSkgewotICAgICAgICByZXR1cm4gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMs
ICdoaXN0b3J5Jykuc3RhdGU7Ci0gICAgICB9Ci0KLSAgICAgIHJldHVybiB0aGlzLl9oaXN0b3J5
U3RhdGU7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICBQdXNoZXMgYSBuZXcgc3RhdGUuCi0gICAg
ICBAcHJpdmF0ZQotICAgICBAbWV0aG9kIHB1c2hTdGF0ZQotICAgICBAcGFyYW0gcGF0aCB7U3Ry
aW5nfQotICAgICovCi0gICAgcHVzaFN0YXRlOiBmdW5jdGlvbiAocGF0aCkgewotICAgICAgdmFy
IHN0YXRlID0geyBwYXRoOiBwYXRoIH07Ci0KLSAgICAgIF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0
LmdldCh0aGlzLCAnaGlzdG9yeScpLnB1c2hTdGF0ZShzdGF0ZSwgbnVsbCwgcGF0aCk7Ci0KLSAg
ICAgIHRoaXMuX2hpc3RvcnlTdGF0ZSA9IHN0YXRlOwotCi0gICAgICAvLyB1c2VkIGZvciB3ZWJr
aXQgd29ya2Fyb3VuZAotICAgICAgdGhpcy5fcHJldmlvdXNVUkwgPSB0aGlzLmdldFVSTCgpOwot
ICAgIH0sCi0KLSAgICAvKioKLSAgICAgUmVwbGFjZXMgdGhlIGN1cnJlbnQgc3RhdGUuCi0gICAg
ICBAcHJpdmF0ZQotICAgICBAbWV0aG9kIHJlcGxhY2VTdGF0ZQotICAgICBAcGFyYW0gcGF0aCB7
U3RyaW5nfQotICAgICovCi0gICAgcmVwbGFjZVN0YXRlOiBmdW5jdGlvbiAocGF0aCkgewotICAg
ICAgdmFyIHN0YXRlID0geyBwYXRoOiBwYXRoIH07Ci0gICAgICBfZW1iZXJNZXRhbFByb3BlcnR5
X2dldC5nZXQodGhpcywgJ2hpc3RvcnknKS5yZXBsYWNlU3RhdGUoc3RhdGUsIG51bGwsIHBhdGgp
OwotCi0gICAgICB0aGlzLl9oaXN0b3J5U3RhdGUgPSBzdGF0ZTsKLQotICAgICAgLy8gdXNlZCBm
b3Igd2Via2l0IHdvcmthcm91bmQKLSAgICAgIHRoaXMuX3ByZXZpb3VzVVJMID0gdGhpcy5nZXRV
UkwoKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICBSZWdpc3RlciBhIGNhbGxiYWNrIHRvIGJl
IGludm9rZWQgd2hlbmV2ZXIgdGhlIGJyb3dzZXIKLSAgICAgIGhpc3RvcnkgY2hhbmdlcywgaW5j
bHVkaW5nIHVzaW5nIGZvcndhcmQgYW5kIGJhY2sgYnV0dG9ucy4KLSAgICAgICBAcHJpdmF0ZQot
ICAgICAgQG1ldGhvZCBvblVwZGF0ZVVSTAotICAgICAgQHBhcmFtIGNhbGxiYWNrIHtGdW5jdGlv
bn0KLSAgICAqLwotICAgIG9uVXBkYXRlVVJMOiBmdW5jdGlvbiAoY2FsbGJhY2spIHsKLSAgICAg
IHZhciBfdGhpcyA9IHRoaXM7Ci0KLSAgICAgIHZhciBndWlkID0gX2VtYmVyTWV0YWxVdGlscy5n
dWlkRm9yKHRoaXMpOwotCi0gICAgICBfZW1iZXJWaWV3c1N5c3RlbUpxdWVyeS5kZWZhdWx0KHdp
bmRvdykub24oJ3BvcHN0YXRlLmVtYmVyLWxvY2F0aW9uLScgKyBndWlkLCBmdW5jdGlvbiAoZSkg
ewotICAgICAgICAvLyBJZ25vcmUgaW5pdGlhbCBwYWdlIGxvYWQgcG9wc3RhdGUgZXZlbnQgaW4g
Q2hyb21lCi0gICAgICAgIGlmICghcG9wc3RhdGVGaXJlZCkgewotICAgICAgICAgIHBvcHN0YXRl
RmlyZWQgPSB0cnVlOwotICAgICAgICAgIGlmIChfdGhpcy5nZXRVUkwoKSA9PT0gX3RoaXMuX3By
ZXZpb3VzVVJMKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgICAgIGNhbGxiYWNrKF90aGlzLmdldFVSTCgpKTsKLSAgICAgIH0pOwotICAgIH0sCi0K
LSAgICAvKioKLSAgICAgIFVzZWQgd2hlbiB1c2luZyBge3thY3Rpb259fWAgaGVscGVyLiAgVGhl
IHVybCBpcyBhbHdheXMgYXBwZW5kZWQgdG8gdGhlIHJvb3RVUkwuCi0gICAgICAgQHByaXZhdGUK
LSAgICAgIEBtZXRob2QgZm9ybWF0VVJMCi0gICAgICBAcGFyYW0gdXJsIHtTdHJpbmd9Ci0gICAg
ICBAcmV0dXJuIGZvcm1hdHRlZCB1cmwge1N0cmluZ30KLSAgICAqLwotICAgIGZvcm1hdFVSTDog
ZnVuY3Rpb24gKHVybCkgewotICAgICAgdmFyIHJvb3RVUkwgPSBfZW1iZXJNZXRhbFByb3BlcnR5
X2dldC5nZXQodGhpcywgJ3Jvb3RVUkwnKTsKLSAgICAgIHZhciBiYXNlVVJMID0gX2VtYmVyTWV0
YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsICdiYXNlVVJMJyk7Ci0KLSAgICAgIGlmICh1cmwgIT09
ICcnKSB7Ci0gICAgICAgIC8vIHJlbW92ZSB0cmFpbGluZyBzbGFzaGVzIGlmIHRoZXkgZXhpc3Rz
Ci0gICAgICAgIHJvb3RVUkwgPSByb290VVJMLnJlcGxhY2UoL1wvJC8sICcnKTsKLSAgICAgICAg
YmFzZVVSTCA9IGJhc2VVUkwucmVwbGFjZSgvXC8kLywgJycpOwotICAgICAgfSBlbHNlIGlmIChi
YXNlVVJMLm1hdGNoKC9eXC8vKSAmJiByb290VVJMLm1hdGNoKC9eXC8vKSkgewotICAgICAgICAv
LyBpZiBiYXNlVVJMIGFuZCByb290VVJMIGJvdGggc3RhcnQgd2l0aCBhIHNsYXNoCi0gICAgICAg
IC8vIC4uLiByZW1vdmUgdHJhaWxpbmcgc2xhc2ggZnJvbSBiYXNlVVJMIGlmIGl0IGV4aXN0cwot
ICAgICAgICBiYXNlVVJMID0gYmFzZVVSTC5yZXBsYWNlKC9cLyQvLCAnJyk7Ci0gICAgICB9Ci0K
LSAgICAgIHJldHVybiBiYXNlVVJMICsgcm9vdFVSTCArIHVybDsKLSAgICB9LAotCi0gICAgLyoq
Ci0gICAgICBDbGVhbnMgdXAgdGhlIEhpc3RvcnlMb2NhdGlvbiBldmVudCBsaXN0ZW5lci4KLSAg
ICAgICBAcHJpdmF0ZQotICAgICAgQG1ldGhvZCB3aWxsRGVzdHJveQotICAgICovCi0gICAgd2ls
bERlc3Ryb3k6IGZ1bmN0aW9uICgpIHsKLSAgICAgIHZhciBndWlkID0gX2VtYmVyTWV0YWxVdGls
cy5ndWlkRm9yKHRoaXMpOwotCi0gICAgICBfZW1iZXJWaWV3c1N5c3RlbUpxdWVyeS5kZWZhdWx0
KHdpbmRvdykub2ZmKCdwb3BzdGF0ZS5lbWJlci1sb2NhdGlvbi0nICsgZ3VpZCk7Ci0gICAgfSwK
LQotICAgIC8qKgotICAgICAgQHByaXZhdGUKLSAgICAgICBSZXR1cm5zIG5vcm1hbGl6ZWQgbG9j
YXRpb24uaGFzaAotICAgICAgIEBtZXRob2QgZ2V0SGFzaAotICAgICovCi0gICAgZ2V0SGFzaDog
X2VtYmVyUm91dGluZ0xvY2F0aW9uQXBpLmRlZmF1bHQuX2dldEhhc2gKLSAgfSk7Ci19KTsKLWVu
aWZlZCgnZW1iZXItcm91dGluZy9sb2NhdGlvbi9ub25lX2xvY2F0aW9uJywgWydleHBvcnRzJywg
J2VtYmVyLW1ldGFsL2RlYnVnJywgJ2VtYmVyLW1ldGFsL3Byb3BlcnR5X2dldCcsICdlbWJlci1t
ZXRhbC9wcm9wZXJ0eV9zZXQnLCAnZW1iZXItcnVudGltZS9zeXN0ZW0vb2JqZWN0J10sIGZ1bmN0
aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbERlYnVnLCBfZW1iZXJNZXRhbFByb3BlcnR5X2dldCwg
X2VtYmVyTWV0YWxQcm9wZXJ0eV9zZXQsIF9lbWJlclJ1bnRpbWVTeXN0ZW1PYmplY3QpIHsKLSAg
J3VzZSBzdHJpY3QnOwotCi0gIC8qKgotICBAbW9kdWxlIGVtYmVyCi0gIEBzdWJtb2R1bGUgZW1i
ZXItcm91dGluZwotICAqLwotCi0gIC8qKgotICAgIEVtYmVyLk5vbmVMb2NhdGlvbiBkb2VzIG5v
dCBpbnRlcmFjdCB3aXRoIHRoZSBicm93c2VyLiBJdCBpcyB1c2VmdWwgZm9yCi0gICAgdGVzdGlu
Zywgb3Igd2hlbiB5b3UgbmVlZCB0byBtYW5hZ2Ugc3RhdGUgd2l0aCB5b3VyIFJvdXRlciwgYnV0
IHRlbXBvcmFyaWx5Ci0gICAgZG9uJ3Qgd2FudCBpdCB0byBtdWNrIHdpdGggdGhlIFVSTCAoZm9y
IGV4YW1wbGUgd2hlbiB5b3UgZW1iZWQgeW91cgotICAgIGFwcGxpY2F0aW9uIGluIGEgbGFyZ2Vy
IHBhZ2UpLgotICAKLSAgICBAY2xhc3MgTm9uZUxvY2F0aW9uCi0gICAgQG5hbWVzcGFjZSBFbWJl
cgotICAgIEBleHRlbmRzIEVtYmVyLk9iamVjdAotICAgIEBwcml2YXRlCi0gICovCi0gIGV4cG9y
dHMuZGVmYXVsdCA9IF9lbWJlclJ1bnRpbWVTeXN0ZW1PYmplY3QuZGVmYXVsdC5leHRlbmQoewot
ICAgIGltcGxlbWVudGF0aW9uOiAnbm9uZScsCi0gICAgcGF0aDogJycsCi0KLSAgICBkZXRlY3Q6
IGZ1bmN0aW9uICgpIHsKLSAgICAgIHZhciByb290VVJMID0gdGhpcy5yb290VVJMOwotCi0gICAg
ICBfZW1iZXJNZXRhbERlYnVnLmFzc2VydCgncm9vdFVSTCBtdXN0IGVuZCB3aXRoIGEgdHJhaWxp
bmcgZm9yd2FyZCBzbGFzaCBlLmcuICIvYXBwLyInLCByb290VVJMLmNoYXJBdChyb290VVJMLmxl
bmd0aCAtIDEpID09PSAnLycpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgIFdpbGwgYmUgcHJl
LXBlbmRlZCB0byBwYXRoLgotICAgICAgIEBwcml2YXRlCi0gICAgICBAcHJvcGVydHkgcm9vdFVS
TAotICAgICAgQGRlZmF1bHQgJy8nCi0gICAgKi8KLSAgICByb290VVJMOiAnLycsCi0KLSAgICAv
KioKLSAgICAgIFJldHVybnMgdGhlIGN1cnJlbnQgcGF0aCB3aXRob3V0IGByb290VVJMYC4KLSAg
ICAgICBAcHJpdmF0ZQotICAgICAgQG1ldGhvZCBnZXRVUkwKLSAgICAgIEByZXR1cm4ge1N0cmlu
Z30gcGF0aAotICAgICovCi0gICAgZ2V0VVJMOiBmdW5jdGlvbiAoKSB7Ci0gICAgICB2YXIgcGF0
aCA9IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0aGlzLCAncGF0aCcpOwotICAgICAgdmFy
IHJvb3RVUkwgPSBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywgJ3Jvb3RVUkwnKTsK
LQotICAgICAgLy8gcmVtb3ZlIHRyYWlsaW5nIHNsYXNoZXMgaWYgdGhleSBleGlzdHMKLSAgICAg
IHJvb3RVUkwgPSByb290VVJMLnJlcGxhY2UoL1wvJC8sICcnKTsKLQotICAgICAgLy8gcmVtb3Zl
IHJvb3RVUkwgZnJvbSB1cmwKLSAgICAgIHJldHVybiBwYXRoLnJlcGxhY2UobmV3IFJlZ0V4cCgn
XicgKyByb290VVJMICsgJyg/PS98JCknKSwgJycpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAg
IFNldCB0aGUgcGF0aCBhbmQgcmVtZW1iZXJzIHdoYXQgd2FzIHNldC4gVXNpbmcgdGhpcyBtZXRo
b2QKLSAgICAgIHRvIGNoYW5nZSB0aGUgcGF0aCB3aWxsIG5vdCBpbnZva2UgdGhlIGB1cGRhdGVV
UkxgIGNhbGxiYWNrLgotICAgICAgIEBwcml2YXRlCi0gICAgICBAbWV0aG9kIHNldFVSTAotICAg
ICAgQHBhcmFtIHBhdGgge1N0cmluZ30KLSAgICAqLwotICAgIHNldFVSTDogZnVuY3Rpb24gKHBh
dGgpIHsKLSAgICAgIF9lbWJlck1ldGFsUHJvcGVydHlfc2V0LnNldCh0aGlzLCAncGF0aCcsIHBh
dGgpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgIFJlZ2lzdGVyIGEgY2FsbGJhY2sgdG8gYmUg
aW52b2tlZCB3aGVuIHRoZSBwYXRoIGNoYW5nZXMuIFRoZXNlCi0gICAgICBjYWxsYmFja3Mgd2ls
bCBleGVjdXRlIHdoZW4gdGhlIHVzZXIgcHJlc3NlcyB0aGUgYmFjayBvciBmb3J3YXJkCi0gICAg
ICBidXR0b24sIGJ1dCBub3QgYWZ0ZXIgYHNldFVSTGAgaXMgaW52b2tlZC4KLSAgICAgICBAcHJp
dmF0ZQotICAgICAgQG1ldGhvZCBvblVwZGF0ZVVSTAotICAgICAgQHBhcmFtIGNhbGxiYWNrIHtG
dW5jdGlvbn0KLSAgICAqLwotICAgIG9uVXBkYXRlVVJMOiBmdW5jdGlvbiAoY2FsbGJhY2spIHsK
LSAgICAgIHRoaXMudXBkYXRlQ2FsbGJhY2sgPSBjYWxsYmFjazsKLSAgICB9LAotCi0gICAgLyoq
Ci0gICAgICBTZXRzIHRoZSBwYXRoIGFuZCBjYWxscyB0aGUgYHVwZGF0ZVVSTGAgY2FsbGJhY2su
Ci0gICAgICAgQHByaXZhdGUKLSAgICAgIEBtZXRob2QgaGFuZGxlVVJMCi0gICAgICBAcGFyYW0g
Y2FsbGJhY2sge0Z1bmN0aW9ufQotICAgICovCi0gICAgaGFuZGxlVVJMOiBmdW5jdGlvbiAodXJs
KSB7Ci0gICAgICBfZW1iZXJNZXRhbFByb3BlcnR5X3NldC5zZXQodGhpcywgJ3BhdGgnLCB1cmwp
OwotICAgICAgdGhpcy51cGRhdGVDYWxsYmFjayh1cmwpOwotICAgIH0sCi0KLSAgICAvKioKLSAg
ICAgIEdpdmVuIGEgVVJMLCBmb3JtYXRzIGl0IHRvIGJlIHBsYWNlZCBpbnRvIHRoZSBwYWdlIGFz
IHBhcnQKLSAgICAgIG9mIGFuIGVsZW1lbnQncyBgaHJlZmAgYXR0cmlidXRlLgotICAgICAgIFRo
aXMgaXMgdXNlZCwgZm9yIGV4YW1wbGUsIHdoZW4gdXNpbmcgdGhlIHt7YWN0aW9ufX0gaGVscGVy
Ci0gICAgICB0byBnZW5lcmF0ZSBhIFVSTCBiYXNlZCBvbiBhbiBldmVudC4KLSAgICAgICBAcHJp
dmF0ZQotICAgICAgQG1ldGhvZCBmb3JtYXRVUkwKLSAgICAgIEBwYXJhbSB1cmwge1N0cmluZ30K
LSAgICAgIEByZXR1cm4ge1N0cmluZ30gdXJsCi0gICAgKi8KLSAgICBmb3JtYXRVUkw6IGZ1bmN0
aW9uICh1cmwpIHsKLSAgICAgIHZhciByb290VVJMID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQu
Z2V0KHRoaXMsICdyb290VVJMJyk7Ci0KLSAgICAgIGlmICh1cmwgIT09ICcnKSB7Ci0gICAgICAg
IC8vIHJlbW92ZSB0cmFpbGluZyBzbGFzaGVzIGlmIHRoZXkgZXhpc3RzCi0gICAgICAgIHJvb3RV
UkwgPSByb290VVJMLnJlcGxhY2UoL1wvJC8sICcnKTsKLSAgICAgIH0KLQotICAgICAgcmV0dXJu
IHJvb3RVUkwgKyB1cmw7Ci0gICAgfQotICB9KTsKLX0pOwotZW5pZmVkKCdlbWJlci1yb3V0aW5n
L2xvY2F0aW9uL3V0aWwnLCBbJ2V4cG9ydHMnXSwgZnVuY3Rpb24gKGV4cG9ydHMpIHsKLSAgLyoq
Ci0gICAgQHByaXZhdGUKLSAgCi0gICAgUmV0dXJucyB0aGUgY3VycmVudCBgbG9jYXRpb24ucGF0
aG5hbWVgLCBub3JtYWxpemVkIGZvciBJRSBpbmNvbnNpc3RlbmNpZXMuCi0gICovCi0gICd1c2Ug
c3RyaWN0JzsKLQotICBleHBvcnRzLmdldFBhdGggPSBnZXRQYXRoOwotICBleHBvcnRzLmdldFF1
ZXJ5ID0gZ2V0UXVlcnk7Ci0gIGV4cG9ydHMuZ2V0SGFzaCA9IGdldEhhc2g7Ci0gIGV4cG9ydHMu
Z2V0RnVsbFBhdGggPSBnZXRGdWxsUGF0aDsKLSAgZXhwb3J0cy5nZXRPcmlnaW4gPSBnZXRPcmln
aW47Ci0gIGV4cG9ydHMuc3VwcG9ydHNIYXNoQ2hhbmdlID0gc3VwcG9ydHNIYXNoQ2hhbmdlOwot
ICBleHBvcnRzLnN1cHBvcnRzSGlzdG9yeSA9IHN1cHBvcnRzSGlzdG9yeTsKLSAgZXhwb3J0cy5y
ZXBsYWNlUGF0aCA9IHJlcGxhY2VQYXRoOwotCi0gIGZ1bmN0aW9uIGdldFBhdGgobG9jYXRpb24p
IHsKLSAgICB2YXIgcGF0aG5hbWUgPSBsb2NhdGlvbi5wYXRobmFtZTsKLSAgICAvLyBWYXJpb3Vz
IHZlcnNpb25zIG9mIElFL09wZXJhIGRvbid0IGFsd2F5cyByZXR1cm4gYSBsZWFkaW5nIHNsYXNo
Ci0gICAgaWYgKHBhdGhuYW1lLmNoYXJBdCgwKSAhPT0gJy8nKSB7Ci0gICAgICBwYXRobmFtZSA9
ICcvJyArIHBhdGhuYW1lOwotICAgIH0KLQotICAgIHJldHVybiBwYXRobmFtZTsKLSAgfQotCi0g
IC8qKgotICAgIEBwcml2YXRlCi0gIAotICAgIFJldHVybnMgdGhlIGN1cnJlbnQgYGxvY2F0aW9u
LnNlYXJjaGAuCi0gICovCi0KLSAgZnVuY3Rpb24gZ2V0UXVlcnkobG9jYXRpb24pIHsKLSAgICBy
ZXR1cm4gbG9jYXRpb24uc2VhcmNoOwotICB9Ci0KLSAgLyoqCi0gICAgQHByaXZhdGUKLSAgCi0g
ICAgUmV0dXJucyB0aGUgY3VycmVudCBgbG9jYXRpb24uaGFzaGAgYnkgcGFyc2luZyBsb2NhdGlv
bi5ocmVmIHNpbmNlIGJyb3dzZXJzCi0gICAgaW5jb25zaXN0ZW50bHkgVVJMLWRlY29kZSBgbG9j
YXRpb24uaGFzaGAuCi0gIAotICAgIFNob3VsZCBiZSBwYXNzZWQgdGhlIGJyb3dzZXIncyBgbG9j
YXRpb25gIG9iamVjdCBhcyB0aGUgZmlyc3QgYXJndW1lbnQuCi0gIAotICAgIGh0dHBzOi8vYnVn
emlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTQ4MzMwNAotICAqLwotCi0gIGZ1bmN0
aW9uIGdldEhhc2gobG9jYXRpb24pIHsKLSAgICB2YXIgaHJlZiA9IGxvY2F0aW9uLmhyZWY7Ci0g
ICAgdmFyIGhhc2hJbmRleCA9IGhyZWYuaW5kZXhPZignIycpOwotCi0gICAgaWYgKGhhc2hJbmRl
eCA9PT0gLTEpIHsKLSAgICAgIHJldHVybiAnJzsKLSAgICB9IGVsc2UgewotICAgICAgcmV0dXJu
IGhyZWYuc3Vic3RyKGhhc2hJbmRleCk7Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gZ2V0RnVs
bFBhdGgobG9jYXRpb24pIHsKLSAgICByZXR1cm4gZ2V0UGF0aChsb2NhdGlvbikgKyBnZXRRdWVy
eShsb2NhdGlvbikgKyBnZXRIYXNoKGxvY2F0aW9uKTsKLSAgfQotCi0gIGZ1bmN0aW9uIGdldE9y
aWdpbihsb2NhdGlvbikgewotICAgIHZhciBvcmlnaW4gPSBsb2NhdGlvbi5vcmlnaW47Ci0KLSAg
ICAvLyBPbGRlciBicm93c2VycywgZXNwZWNpYWxseSBJRSwgZG9uJ3QgaGF2ZSBvcmlnaW4KLSAg
ICBpZiAoIW9yaWdpbikgewotICAgICAgb3JpZ2luID0gbG9jYXRpb24ucHJvdG9jb2wgKyAnLy8n
ICsgbG9jYXRpb24uaG9zdG5hbWU7Ci0KLSAgICAgIGlmIChsb2NhdGlvbi5wb3J0KSB7Ci0gICAg
ICAgIG9yaWdpbiArPSAnOicgKyBsb2NhdGlvbi5wb3J0OwotICAgICAgfQotICAgIH0KLQotICAg
IHJldHVybiBvcmlnaW47Ci0gIH0KLQotICAvKgotICAgIGBkb2N1bWVudE1vZGVgIG9ubHkgZXhp
c3QgaW4gSW50ZXJuZXQgRXhwbG9yZXIsIGFuZCBpdCdzIHRlc3RlZCBiZWNhdXNlIElFOCBydW5u
aW5nIGluCi0gICAgSUU3IGNvbXBhdGliaWxpdHkgbW9kZSBjbGFpbXMgdG8gc3VwcG9ydCBgb25o
YXNoY2hhbmdlYCBidXQgYWN0dWFsbHkgZG9lcyBub3QuCi0gIAotICAgIGBnbG9iYWxgIGlzIGFu
IG9iamVjdCB0aGF0IG1heSBoYXZlIGFuIGBvbmhhc2hjaGFuZ2VgIHByb3BlcnR5LgotICAKLSAg
ICBAcHJpdmF0ZQotICAgIEBmdW5jdGlvbiBzdXBwb3J0c0hhc2hDaGFuZ2UKLSAgKi8KLQotICBm
dW5jdGlvbiBzdXBwb3J0c0hhc2hDaGFuZ2UoZG9jdW1lbnRNb2RlLCBnbG9iYWwpIHsKLSAgICBy
ZXR1cm4gJ29uaGFzaGNoYW5nZScgaW4gZ2xvYmFsICYmIChkb2N1bWVudE1vZGUgPT09IHVuZGVm
aW5lZCB8fCBkb2N1bWVudE1vZGUgPiA3KTsKLSAgfQotCi0gIC8qCi0gICAgYHVzZXJBZ2VudGAg
aXMgYSB1c2VyIGFnZW50IHN0cmluZy4gV2UgdXNlIHVzZXIgYWdlbnQgdGVzdGluZyBoZXJlLCBi
ZWNhdXNlCi0gICAgdGhlIHN0b2NrIEFuZHJvaWQgYnJvd3NlciBpcyBrbm93biB0byBoYXZlIGJ1
Z2d5IHZlcnNpb25zIG9mIHRoZSBIaXN0b3J5IEFQSSwKLSAgICBpbiBzb21lIEFuZHJvaWQgdmVy
c2lvbnMuCi0gIAotICAgIEBwcml2YXRlCi0gICAgQGZ1bmN0aW9uIHN1cHBvcnRzSGlzdG9yeQot
ICAqLwotCi0gIGZ1bmN0aW9uIHN1cHBvcnRzSGlzdG9yeSh1c2VyQWdlbnQsIGhpc3RvcnkpIHsK
LSAgICAvLyBCb29zdGVkIGZyb20gTW9kZXJuaXpyOiBodHRwczovL2dpdGh1Yi5jb20vTW9kZXJu
aXpyL01vZGVybml6ci9ibG9iL21hc3Rlci9mZWF0dXJlLWRldGVjdHMvaGlzdG9yeS5qcwotICAg
IC8vIFRoZSBzdG9jayBicm93c2VyIG9uIEFuZHJvaWQgMi4yICYgMi4zLCBhbmQgNC4wLnggcmV0
dXJucyBwb3NpdGl2ZSBvbiBoaXN0b3J5IHN1cHBvcnQKLSAgICAvLyBVbmZvcnR1bmF0ZWx5IHN1
cHBvcnQgaXMgcmVhbGx5IGJ1Z2d5IGFuZCB0aGVyZSBpcyBubyBjbGVhbiB3YXkgdG8gZGV0ZWN0
Ci0gICAgLy8gdGhlc2UgYnVncywgc28gd2UgZmFsbCBiYWNrIHRvIGEgdXNlciBhZ2VudCBzbmlm
ZiA6KAotCi0gICAgLy8gV2Ugb25seSB3YW50IEFuZHJvaWQgMiBhbmQgNC4wLCBzdG9jayBicm93
c2VyLCBhbmQgbm90IENocm9tZSB3aGljaCBpZGVudGlmaWVzCi0gICAgLy8gaXRzZWxmIGFzICdN
b2JpbGUgU2FmYXJpJyBhcyB3ZWxsLCBub3IgV2luZG93cyBQaG9uZS4KLSAgICBpZiAoKHVzZXJB
Z2VudC5pbmRleE9mKCdBbmRyb2lkIDIuJykgIT09IC0xIHx8IHVzZXJBZ2VudC5pbmRleE9mKCdB
bmRyb2lkIDQuMCcpICE9PSAtMSkgJiYgdXNlckFnZW50LmluZGV4T2YoJ01vYmlsZSBTYWZhcmkn
KSAhPT0gLTEgJiYgdXNlckFnZW50LmluZGV4T2YoJ0Nocm9tZScpID09PSAtMSAmJiB1c2VyQWdl
bnQuaW5kZXhPZignV2luZG93cyBQaG9uZScpID09PSAtMSkgewotICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIHJldHVybiAhIShoaXN0b3J5ICYmICdwdXNoU3RhdGUnIGluIGhpc3Rv
cnkpOwotICB9Ci0KLSAgLyoqCi0gICAgUmVwbGFjZXMgdGhlIGN1cnJlbnQgbG9jYXRpb24sIG1h
a2luZyBzdXJlIHdlIGV4cGxpY2l0bHkgaW5jbHVkZSB0aGUgb3JpZ2luCi0gICAgdG8gcHJldmVu
dCByZWRpcmVjdGluZyB0byBhIGRpZmZlcmVudCBvcmlnaW4uCi0gIAotICAgIEBwcml2YXRlCi0g
ICovCi0KLSAgZnVuY3Rpb24gcmVwbGFjZVBhdGgobG9jYXRpb24sIHBhdGgpIHsKLSAgICBsb2Nh
dGlvbi5yZXBsYWNlKGdldE9yaWdpbihsb2NhdGlvbikgKyBwYXRoKTsKLSAgfQotfSk7Ci1lbmlm
ZWQoJ2VtYmVyLXJvdXRpbmcvc2VydmljZXMvcm91dGluZycsIFsnZXhwb3J0cycsICdlbWJlci1y
dW50aW1lL3N5c3RlbS9zZXJ2aWNlJywgJ2VtYmVyLW1ldGFsL3Byb3BlcnR5X2dldCcsICdlbWJl
ci1tZXRhbC9jb21wdXRlZF9tYWNyb3MnLCAnZW1iZXItcm91dGluZy91dGlscycsICdlbWJlci1t
ZXRhbC9hc3NpZ24nXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlclJ1bnRpbWVTeXN0ZW1TZXJ2
aWNlLCBfZW1iZXJNZXRhbFByb3BlcnR5X2dldCwgX2VtYmVyTWV0YWxDb21wdXRlZF9tYWNyb3Ms
IF9lbWJlclJvdXRpbmdVdGlscywgX2VtYmVyTWV0YWxBc3NpZ24pIHsKLSAgLyoqCi0gIEBtb2R1
bGUgZW1iZXIKLSAgQHN1Ym1vZHVsZSBlbWJlci1yb3V0aW5nCi0gICovCi0KLSAgJ3VzZSBzdHJp
Y3QnOwotCi0gIC8qKgotICAgIFRoZSBSb3V0aW5nIHNlcnZpY2UgaXMgdXNlZCBieSBMaW5rQ29t
cG9uZW50LCBhbmQgcHJvdmlkZXMgZmFjaWxpdGllcyBmb3IKLSAgICB0aGUgY29tcG9uZW50L3Zp
ZXcgbGF5ZXIgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgcm91dGVyLgotICAKLSAgICBXaGlsZSBzdGls
bCBwcml2YXRlLCB0aGlzIHNlcnZpY2UgY2FuIGV2ZW50dWFsbHkgYmUgb3BlbmVkIHVwLCBhbmQg
cHJvdmlkZXMKLSAgICB0aGUgc2V0IG9mIEFQSSBuZWVkZWQgZm9yIGNvbXBvbmVudHMgdG8gY29u
dHJvbCByb3V0aW5nIHdpdGhvdXQgaW50ZXJhY3RpbmcKLSAgICB3aXRoIHJvdXRlciBpbnRlcm5h
bHMuCi0gIAotICAgIEBwcml2YXRlCi0gICAgQGNsYXNzIFJvdXRpbmdTZXJ2aWNlCi0gICovCi0g
IGV4cG9ydHMuZGVmYXVsdCA9IF9lbWJlclJ1bnRpbWVTeXN0ZW1TZXJ2aWNlLmRlZmF1bHQuZXh0
ZW5kKHsKLSAgICByb3V0ZXI6IG51bGwsCi0KLSAgICB0YXJnZXRTdGF0ZTogX2VtYmVyTWV0YWxD
b21wdXRlZF9tYWNyb3MucmVhZE9ubHkoJ3JvdXRlci50YXJnZXRTdGF0ZScpLAotICAgIGN1cnJl
bnRTdGF0ZTogX2VtYmVyTWV0YWxDb21wdXRlZF9tYWNyb3MucmVhZE9ubHkoJ3JvdXRlci5jdXJy
ZW50U3RhdGUnKSwKLSAgICBjdXJyZW50Um91dGVOYW1lOiBfZW1iZXJNZXRhbENvbXB1dGVkX21h
Y3Jvcy5yZWFkT25seSgncm91dGVyLmN1cnJlbnRSb3V0ZU5hbWUnKSwKLSAgICBjdXJyZW50UGF0
aDogX2VtYmVyTWV0YWxDb21wdXRlZF9tYWNyb3MucmVhZE9ubHkoJ3JvdXRlci5jdXJyZW50UGF0
aCcpLAotCi0gICAgYXZhaWxhYmxlUm91dGVzOiBmdW5jdGlvbiAoKSB7Ci0gICAgICByZXR1cm4g
T2JqZWN0LmtleXMoX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsICdyb3V0ZXInKS5y
b3V0ZXIucmVjb2duaXplci5uYW1lcyk7Ci0gICAgfSwKLQotICAgIGhhc1JvdXRlOiBmdW5jdGlv
biAocm91dGVOYW1lKSB7Ci0gICAgICByZXR1cm4gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0
KHRoaXMsICdyb3V0ZXInKS5oYXNSb3V0ZShyb3V0ZU5hbWUpOwotICAgIH0sCi0KLSAgICB0cmFu
c2l0aW9uVG86IGZ1bmN0aW9uIChyb3V0ZU5hbWUsIG1vZGVscywgcXVlcnlQYXJhbXMsIHNob3Vs
ZFJlcGxhY2UpIHsKLSAgICAgIHZhciByb3V0ZXIgPSBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5n
ZXQodGhpcywgJ3JvdXRlcicpOwotCi0gICAgICB2YXIgdHJhbnNpdGlvbiA9IHJvdXRlci5fZG9U
cmFuc2l0aW9uKHJvdXRlTmFtZSwgbW9kZWxzLCBxdWVyeVBhcmFtcyk7Ci0KLSAgICAgIGlmIChz
aG91bGRSZXBsYWNlKSB7Ci0gICAgICAgIHRyYW5zaXRpb24ubWV0aG9kKCdyZXBsYWNlJyk7Ci0g
ICAgICB9Ci0gICAgfSwKLQotICAgIG5vcm1hbGl6ZVF1ZXJ5UGFyYW1zOiBmdW5jdGlvbiAocm91
dGVOYW1lLCBtb2RlbHMsIHF1ZXJ5UGFyYW1zKSB7Ci0gICAgICB2YXIgcm91dGVyID0gX2VtYmVy
TWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsICdyb3V0ZXInKTsKLSAgICAgIHJvdXRlci5fcHJl
cGFyZVF1ZXJ5UGFyYW1zKHJvdXRlTmFtZSwgbW9kZWxzLCBxdWVyeVBhcmFtcyk7Ci0gICAgfSwK
LQotICAgIGdlbmVyYXRlVVJMOiBmdW5jdGlvbiAocm91dGVOYW1lLCBtb2RlbHMsIHF1ZXJ5UGFy
YW1zKSB7Ci0gICAgICB2YXIgcm91dGVyID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRo
aXMsICdyb3V0ZXInKTsKLSAgICAgIGlmICghcm91dGVyLnJvdXRlcikgewotICAgICAgICByZXR1
cm47Ci0gICAgICB9Ci0KLSAgICAgIHZhciB2aXNpYmxlUXVlcnlQYXJhbXMgPSB7fTsKLSAgICAg
IF9lbWJlck1ldGFsQXNzaWduLmRlZmF1bHQodmlzaWJsZVF1ZXJ5UGFyYW1zLCBxdWVyeVBhcmFt
cyk7Ci0KLSAgICAgIHRoaXMubm9ybWFsaXplUXVlcnlQYXJhbXMocm91dGVOYW1lLCBtb2RlbHMs
IHZpc2libGVRdWVyeVBhcmFtcyk7Ci0KLSAgICAgIHZhciBhcmdzID0gX2VtYmVyUm91dGluZ1V0
aWxzLnJvdXRlQXJncyhyb3V0ZU5hbWUsIG1vZGVscywgdmlzaWJsZVF1ZXJ5UGFyYW1zKTsKLSAg
ICAgIHJldHVybiByb3V0ZXIuZ2VuZXJhdGUuYXBwbHkocm91dGVyLCBhcmdzKTsKLSAgICB9LAot
Ci0gICAgaXNBY3RpdmVGb3JSb3V0ZTogZnVuY3Rpb24gKGNvbnRleHRzLCBxdWVyeVBhcmFtcywg
cm91dGVOYW1lLCByb3V0ZXJTdGF0ZSwgaXNDdXJyZW50V2hlblNwZWNpZmllZCkgewotICAgICAg
dmFyIHJvdXRlciA9IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0aGlzLCAncm91dGVyJyk7
Ci0KLSAgICAgIHZhciBoYW5kbGVycyA9IHJvdXRlci5yb3V0ZXIucmVjb2duaXplci5oYW5kbGVy
c0Zvcihyb3V0ZU5hbWUpOwotICAgICAgdmFyIGxlYWZOYW1lID0gaGFuZGxlcnNbaGFuZGxlcnMu
bGVuZ3RoIC0gMV0uaGFuZGxlcjsKLSAgICAgIHZhciBtYXhpbXVtQ29udGV4dHMgPSBudW1iZXJP
ZkNvbnRleHRzQWNjZXB0ZWRCeUhhbmRsZXIocm91dGVOYW1lLCBoYW5kbGVycyk7Ci0KLSAgICAg
IC8vIE5PVEU6IGFueSB1Z2xpbmVzcyBpbiB0aGUgY2FsY3VsYXRpb24gb2YgYWN0aXZlbmVzcyBp
cyBsYXJnZWx5Ci0gICAgICAvLyBkdWUgdG8gdGhlIGZhY3QgdGhhdCB3ZSBzdXBwb3J0IGF1dG9t
YXRpYyBub3JtYWxpemluZyBvZgotICAgICAgLy8gYHJlc291cmNlYCAtPiBgcmVzb3VyY2UuaW5k
ZXhgLCBldmVuIHRob3VnaCB0aGVyZSBtaWdodCBiZQotICAgICAgLy8gZHluYW1pYyBzZWdtZW50
cyAvIHF1ZXJ5IHBhcmFtcyBkZWZpbmVkIG9uIGByZXNvdXJjZS5pbmRleGAKLSAgICAgIC8vIHdo
aWNoIGNvbXBsaWNhdGVzIChhbmQgbWFrZXMgc29tZXdoYXQgYW1iaWd1b3VzKSB0aGUgY2FsY3Vs
YXRpb24KLSAgICAgIC8vIG9mIGFjdGl2ZW5lc3MgZm9yIGxpbmtzIHRoYXQgbGluayB0byBgcmVz
b3VyY2VgIGluc3RlYWQgb2YKLSAgICAgIC8vIGRpcmVjdGx5IHRvIGByZXNvdXJjZS5pbmRleGAu
Ci0KLSAgICAgIC8vIGlmIHdlIGRvbid0IGhhdmUgZW5vdWdoIGNvbnRleHRzIHJldmVydCBiYWNr
IHRvIGZ1bGwgcm91dGUgbmFtZQotICAgICAgLy8gdGhpcyBpcyBiZWNhdXNlIHRoZSBsZWFmIHJv
dXRlIHdpbGwgdXNlIG9uZSBvZiB0aGUgY29udGV4dHMKLSAgICAgIGlmIChjb250ZXh0cy5sZW5n
dGggPiBtYXhpbXVtQ29udGV4dHMpIHsKLSAgICAgICAgcm91dGVOYW1lID0gbGVhZk5hbWU7Ci0g
ICAgICB9Ci0KLSAgICAgIHJldHVybiByb3V0ZXJTdGF0ZS5pc0FjdGl2ZUludGVudChyb3V0ZU5h
bWUsIGNvbnRleHRzLCBxdWVyeVBhcmFtcywgIWlzQ3VycmVudFdoZW5TcGVjaWZpZWQpOwotICAg
IH0KLSAgfSk7Ci0KLSAgZnVuY3Rpb24gbnVtYmVyT2ZDb250ZXh0c0FjY2VwdGVkQnlIYW5kbGVy
KGhhbmRsZXIsIGhhbmRsZXJJbmZvcykgewotICAgIHZhciByZXEgPSAwOwotICAgIGZvciAodmFy
IGkgPSAwLCBsID0gaGFuZGxlckluZm9zLmxlbmd0aDsgaSA8IGw7IGkrKykgewotICAgICAgcmVx
ID0gcmVxICsgaGFuZGxlckluZm9zW2ldLm5hbWVzLmxlbmd0aDsKLSAgICAgIGlmIChoYW5kbGVy
SW5mb3NbaV0uaGFuZGxlciA9PT0gaGFuZGxlcikgewotICAgICAgICBicmVhazsKLSAgICAgIH0K
LSAgICB9Ci0KLSAgICByZXR1cm4gcmVxOwotICB9Ci19KTsKLWVuaWZlZCgnZW1iZXItcm91dGlu
Zy9zeXN0ZW0vY2FjaGUnLCBbJ2V4cG9ydHMnLCAnZW1iZXItcnVudGltZS9zeXN0ZW0vb2JqZWN0
J10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJSdW50aW1lU3lzdGVtT2JqZWN0KSB7Ci0gICd1
c2Ugc3RyaWN0JzsKLQotICBleHBvcnRzLmRlZmF1bHQgPSBfZW1iZXJSdW50aW1lU3lzdGVtT2Jq
ZWN0LmRlZmF1bHQuZXh0ZW5kKHsKLSAgICBpbml0OiBmdW5jdGlvbiAoKSB7Ci0gICAgICB0aGlz
LmNhY2hlID0ge307Ci0gICAgfSwKLSAgICBoYXM6IGZ1bmN0aW9uIChidWNrZXRLZXkpIHsKLSAg
ICAgIHJldHVybiBidWNrZXRLZXkgaW4gdGhpcy5jYWNoZTsKLSAgICB9LAotICAgIHN0YXNoOiBm
dW5jdGlvbiAoYnVja2V0S2V5LCBrZXksIHZhbHVlKSB7Ci0gICAgICB2YXIgYnVja2V0ID0gdGhp
cy5jYWNoZVtidWNrZXRLZXldOwotICAgICAgaWYgKCFidWNrZXQpIHsKLSAgICAgICAgYnVja2V0
ID0gdGhpcy5jYWNoZVtidWNrZXRLZXldID0ge307Ci0gICAgICB9Ci0gICAgICBidWNrZXRba2V5
XSA9IHZhbHVlOwotICAgIH0sCi0gICAgbG9va3VwOiBmdW5jdGlvbiAoYnVja2V0S2V5LCBwcm9w
LCBkZWZhdWx0VmFsdWUpIHsKLSAgICAgIHZhciBjYWNoZSA9IHRoaXMuY2FjaGU7Ci0gICAgICBp
ZiAoIShidWNrZXRLZXkgaW4gY2FjaGUpKSB7Ci0gICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7
Ci0gICAgICB9Ci0gICAgICB2YXIgYnVja2V0ID0gY2FjaGVbYnVja2V0S2V5XTsKLSAgICAgIGlm
IChwcm9wIGluIGJ1Y2tldCkgewotICAgICAgICByZXR1cm4gYnVja2V0W3Byb3BdOwotICAgICAg
fSBlbHNlIHsKLSAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTsKLSAgICAgIH0KLSAgICB9LAot
ICAgIGNhY2hlOiBudWxsCi0gIH0pOwotfSk7Ci1lbmlmZWQoImVtYmVyLXJvdXRpbmcvc3lzdGVt
L2NvbnRyb2xsZXJfZm9yIiwgWyJleHBvcnRzIl0sIGZ1bmN0aW9uIChleHBvcnRzKSB7Ci0gIC8q
KgotICBAbW9kdWxlIGVtYmVyCi0gIEBzdWJtb2R1bGUgZW1iZXItcm91dGluZwotICAqLwotCi0g
IC8qKgotICAgIEZpbmRzIGEgY29udHJvbGxlciBpbnN0YW5jZS4KLSAgCi0gICAgQGZvciBFbWJl
cgotICAgIEBtZXRob2QgY29udHJvbGxlckZvcgotICAgIEBwcml2YXRlCi0gICovCi0gICJ1c2Ug
c3RyaWN0IjsKLQotICBleHBvcnRzLmRlZmF1bHQgPSBjb250cm9sbGVyRm9yOwotCi0gIGZ1bmN0
aW9uIGNvbnRyb2xsZXJGb3IoY29udGFpbmVyLCBjb250cm9sbGVyTmFtZSwgbG9va3VwT3B0aW9u
cykgewotICAgIHJldHVybiBjb250YWluZXIubG9va3VwKCJjb250cm9sbGVyOiIgKyBjb250cm9s
bGVyTmFtZSwgbG9va3VwT3B0aW9ucyk7Ci0gIH0KLX0pOwotZW5pZmVkKCdlbWJlci1yb3V0aW5n
L3N5c3RlbS9kc2wnLCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwvZGVidWcnXSwgZnVuY3Rpb24g
KGV4cG9ydHMsIF9lbWJlck1ldGFsRGVidWcpIHsKLSAgJ3VzZSBzdHJpY3QnOwotCi0gIC8qKgot
ICBAbW9kdWxlIGVtYmVyCi0gIEBzdWJtb2R1bGUgZW1iZXItcm91dGluZwotICAqLwotCi0gIGZ1
bmN0aW9uIERTTChuYW1lLCBvcHRpb25zKSB7Ci0gICAgdGhpcy5wYXJlbnQgPSBuYW1lOwotICAg
IHRoaXMuZW5hYmxlTG9hZGluZ1N1YnN0YXRlcyA9IG9wdGlvbnMgJiYgb3B0aW9ucy5lbmFibGVM
b2FkaW5nU3Vic3RhdGVzOwotICAgIHRoaXMubWF0Y2hlcyA9IFtdOwotICAgIHRoaXMuZXhwbGlj
aXRJbmRleCA9IHVuZGVmaW5lZDsKLSAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zOwotICB9Ci0K
LSAgZXhwb3J0cy5kZWZhdWx0ID0gRFNMOwotCi0gIERTTC5wcm90b3R5cGUgPSB7Ci0gICAgcm91
dGU6IGZ1bmN0aW9uIChuYW1lLCBvcHRpb25zLCBjYWxsYmFjaykgewotICAgICAgdmFyIGR1bW15
RXJyb3JSb3V0ZSA9ICcvX3VudXNlZF9kdW1teV9lcnJvcl9wYXRoX3JvdXRlXycgKyBuYW1lICsg
Jy86ZXJyb3InOwotICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIgJiYgdHlwZW9mIG9w
dGlvbnMgPT09ICdmdW5jdGlvbicpIHsKLSAgICAgICAgY2FsbGJhY2sgPSBvcHRpb25zOwotICAg
ICAgICBvcHRpb25zID0ge307Ci0gICAgICB9Ci0KLSAgICAgIGlmIChhcmd1bWVudHMubGVuZ3Ro
ID09PSAxKSB7Ci0gICAgICAgIG9wdGlvbnMgPSB7fTsKLSAgICAgIH0KLQotICAgICAgX2VtYmVy
TWV0YWxEZWJ1Zy5hc3NlcnQoJ1wnJyArIG5hbWUgKyAnXCcgY2Fubm90IGJlIHVzZWQgYXMgYSBy
b3V0ZSBuYW1lLicsIChmdW5jdGlvbiAoKSB7Ci0gICAgICAgIGlmIChvcHRpb25zLm92ZXJyaWRl
TmFtZUFzc2VydGlvbiA9PT0gdHJ1ZSkgewotICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICB9Ci0KLSAgICAgICAgcmV0dXJuIFsnYXJyYXknLCAnYmFzaWMnLCAnb2JqZWN0JywgJ2FwcGxp
Y2F0aW9uJ10uaW5kZXhPZihuYW1lKSA9PT0gLTE7Ci0gICAgICB9KSgpKTsKLQotICAgICAgaWYg
KHRoaXMuZW5hYmxlTG9hZGluZ1N1YnN0YXRlcykgewotICAgICAgICBjcmVhdGVSb3V0ZSh0aGlz
LCBuYW1lICsgJ19sb2FkaW5nJywgeyByZXNldE5hbWVzcGFjZTogb3B0aW9ucy5yZXNldE5hbWVz
cGFjZSB9KTsKLSAgICAgICAgY3JlYXRlUm91dGUodGhpcywgbmFtZSArICdfZXJyb3InLCB7IHBh
dGg6IGR1bW15RXJyb3JSb3V0ZSB9KTsKLSAgICAgIH0KLQotICAgICAgaWYgKGNhbGxiYWNrKSB7
Ci0gICAgICAgIHZhciBmdWxsTmFtZSA9IGdldEZ1bGxOYW1lKHRoaXMsIG5hbWUsIG9wdGlvbnMu
cmVzZXROYW1lc3BhY2UpOwotICAgICAgICB2YXIgZHNsID0gbmV3IERTTChmdWxsTmFtZSwgdGhp
cy5vcHRpb25zKTsKLQotICAgICAgICBjcmVhdGVSb3V0ZShkc2wsICdsb2FkaW5nJyk7Ci0gICAg
ICAgIGNyZWF0ZVJvdXRlKGRzbCwgJ2Vycm9yJywgeyBwYXRoOiBkdW1teUVycm9yUm91dGUgfSk7
Ci0KLSAgICAgICAgY2FsbGJhY2suY2FsbChkc2wpOwotCi0gICAgICAgIGNyZWF0ZVJvdXRlKHRo
aXMsIG5hbWUsIG9wdGlvbnMsIGRzbC5nZW5lcmF0ZSgpKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgIGNyZWF0ZVJvdXRlKHRoaXMsIG5hbWUsIG9wdGlvbnMpOwotICAgICAgfQotICAgIH0sCi0K
LSAgICBwdXNoOiBmdW5jdGlvbiAodXJsLCBuYW1lLCBjYWxsYmFjaykgewotICAgICAgdmFyIHBh
cnRzID0gbmFtZS5zcGxpdCgnLicpOwotICAgICAgaWYgKHVybCA9PT0gJycgfHwgdXJsID09PSAn
LycgfHwgcGFydHNbcGFydHMubGVuZ3RoIC0gMV0gPT09ICdpbmRleCcpIHsKLSAgICAgICAgdGhp
cy5leHBsaWNpdEluZGV4ID0gdHJ1ZTsKLSAgICAgIH0KLQotICAgICAgdGhpcy5tYXRjaGVzLnB1
c2goW3VybCwgbmFtZSwgY2FsbGJhY2tdKTsKLSAgICB9LAotCi0gICAgcmVzb3VyY2U6IGZ1bmN0
aW9uIChuYW1lLCBvcHRpb25zLCBjYWxsYmFjaykgewotICAgICAgaWYgKGFyZ3VtZW50cy5sZW5n
dGggPT09IDIgJiYgdHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHsKLSAgICAgICAgY2Fs
bGJhY2sgPSBvcHRpb25zOwotICAgICAgICBvcHRpb25zID0ge307Ci0gICAgICB9Ci0KLSAgICAg
IGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7Ci0gICAgICAgIG9wdGlvbnMgPSB7fTsKLSAg
ICAgIH0KLQotICAgICAgb3B0aW9ucy5yZXNldE5hbWVzcGFjZSA9IHRydWU7Ci0gICAgICBfZW1i
ZXJNZXRhbERlYnVnLmRlcHJlY2F0ZSgndGhpcy5yZXNvdXJjZSgpIGlzIGRlcHJlY2F0ZWQuIFVz
ZSB0aGlzLnJvdXRlKFwnbmFtZVwnLCB7IHJlc2V0TmFtZXNwYWNlOiB0cnVlIH0sIGZ1bmN0aW9u
ICgpIHt9KSBpbnN0ZWFkLicsIGZhbHNlLCB7IGlkOiAnZW1iZXItcm91dGluZy5yb3V0ZXItcmVz
b3VyY2UnLCB1bnRpbDogJzMuMC4wJyB9KTsKLSAgICAgIHRoaXMucm91dGUobmFtZSwgb3B0aW9u
cywgY2FsbGJhY2spOwotICAgIH0sCi0KLSAgICBnZW5lcmF0ZTogZnVuY3Rpb24gKCkgewotICAg
ICAgdmFyIGRzbE1hdGNoZXMgPSB0aGlzLm1hdGNoZXM7Ci0KLSAgICAgIGlmICghdGhpcy5leHBs
aWNpdEluZGV4KSB7Ci0gICAgICAgIHRoaXMucm91dGUoJ2luZGV4JywgeyBwYXRoOiAnLycgfSk7
Ci0gICAgICB9Ci0KLSAgICAgIHJldHVybiBmdW5jdGlvbiAobWF0Y2gpIHsKLSAgICAgICAgZm9y
ICh2YXIgaSA9IDAsIGwgPSBkc2xNYXRjaGVzLmxlbmd0aDsgaSA8IGw7IGkrKykgewotICAgICAg
ICAgIHZhciBkc2xNYXRjaCA9IGRzbE1hdGNoZXNbaV07Ci0gICAgICAgICAgbWF0Y2goZHNsTWF0
Y2hbMF0pLnRvKGRzbE1hdGNoWzFdLCBkc2xNYXRjaFsyXSk7Ci0gICAgICAgIH0KLSAgICAgIH07
Ci0gICAgfQotICB9OwotCi0gIGZ1bmN0aW9uIGNhbk5lc3QoZHNsKSB7Ci0gICAgcmV0dXJuIGRz
bC5wYXJlbnQgJiYgZHNsLnBhcmVudCAhPT0gJ2FwcGxpY2F0aW9uJzsKLSAgfQotCi0gIGZ1bmN0
aW9uIGdldEZ1bGxOYW1lKGRzbCwgbmFtZSwgcmVzZXROYW1lc3BhY2UpIHsKLSAgICBpZiAoY2Fu
TmVzdChkc2wpICYmIHJlc2V0TmFtZXNwYWNlICE9PSB0cnVlKSB7Ci0gICAgICByZXR1cm4gZHNs
LnBhcmVudCArICcuJyArIG5hbWU7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJldHVybiBuYW1lOwot
ICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIGNyZWF0ZVJvdXRlKGRzbCwgbmFtZSwgb3B0aW9ucywg
Y2FsbGJhY2spIHsKLSAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKLQotICAgIHZhciBmdWxs
TmFtZSA9IGdldEZ1bGxOYW1lKGRzbCwgbmFtZSwgb3B0aW9ucy5yZXNldE5hbWVzcGFjZSk7Ci0K
LSAgICBpZiAodHlwZW9mIG9wdGlvbnMucGF0aCAhPT0gJ3N0cmluZycpIHsKLSAgICAgIG9wdGlv
bnMucGF0aCA9ICcvJyArIG5hbWU7Ci0gICAgfQotCi0gICAgZHNsLnB1c2gob3B0aW9ucy5wYXRo
LCBmdWxsTmFtZSwgY2FsbGJhY2spOwotICB9Ci0KLSAgRFNMLm1hcCA9IGZ1bmN0aW9uIChjYWxs
YmFjaykgewotICAgIHZhciBkc2wgPSBuZXcgRFNMKCk7Ci0gICAgY2FsbGJhY2suY2FsbChkc2wp
OwotICAgIHJldHVybiBkc2w7Ci0gIH07Ci19KTsKLWVuaWZlZCgnZW1iZXItcm91dGluZy9zeXN0
ZW0vZ2VuZXJhdGVfY29udHJvbGxlcicsIFsnZXhwb3J0cycsICdlbWJlci1tZXRhbC9kZWJ1Zycs
ICdlbWJlci1tZXRhbC9wcm9wZXJ0eV9nZXQnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1l
dGFsRGVidWcsIF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0KSB7Ci0gICd1c2Ugc3RyaWN0JzsKLQot
ICBleHBvcnRzLmdlbmVyYXRlQ29udHJvbGxlckZhY3RvcnkgPSBnZW5lcmF0ZUNvbnRyb2xsZXJG
YWN0b3J5OwotICBleHBvcnRzLmRlZmF1bHQgPSBnZW5lcmF0ZUNvbnRyb2xsZXI7Ci0KLSAgLyoq
Ci0gIEBtb2R1bGUgZW1iZXIKLSAgQHN1Ym1vZHVsZSBlbWJlci1yb3V0aW5nCi0gICovCi0KLSAg
LyoqCi0gICAgR2VuZXJhdGVzIGEgY29udHJvbGxlciBmYWN0b3J5Ci0gIAotICAgIEBmb3IgRW1i
ZXIKLSAgICBAbWV0aG9kIGdlbmVyYXRlQ29udHJvbGxlckZhY3RvcnkKLSAgICBAcHJpdmF0ZQot
ICAqLwotCi0gIGZ1bmN0aW9uIGdlbmVyYXRlQ29udHJvbGxlckZhY3Rvcnkob3duZXIsIGNvbnRy
b2xsZXJOYW1lLCBjb250ZXh0KSB7Ci0gICAgdmFyIEZhY3RvcnksIGZ1bGxOYW1lOwotCi0gICAg
RmFjdG9yeSA9IG93bmVyLl9sb29rdXBGYWN0b3J5KCdjb250cm9sbGVyOmJhc2ljJykuZXh0ZW5k
KHsKLSAgICAgIGlzR2VuZXJhdGVkOiB0cnVlLAotICAgICAgdG9TdHJpbmc6IGZ1bmN0aW9uICgp
IHsKLSAgICAgICAgcmV0dXJuICcoZ2VuZXJhdGVkICcgKyBjb250cm9sbGVyTmFtZSArICcgY29u
dHJvbGxlciknOwotICAgICAgfQotICAgIH0pOwotCi0gICAgZnVsbE5hbWUgPSAnY29udHJvbGxl
cjonICsgY29udHJvbGxlck5hbWU7Ci0KLSAgICBvd25lci5yZWdpc3RlcihmdWxsTmFtZSwgRmFj
dG9yeSk7Ci0KLSAgICByZXR1cm4gRmFjdG9yeTsKLSAgfQotCi0gIC8qKgotICAgIEdlbmVyYXRl
cyBhbmQgaW5zdGFudGlhdGVzIGEgY29udHJvbGxlci4KLSAgCi0gICAgVGhlIHR5cGUgb2YgdGhl
IGdlbmVyYXRlZCBjb250cm9sbGVyIGZhY3RvcnkgaXMgZGVyaXZlZAotICAgIGZyb20gdGhlIGNv
bnRleHQuIElmIHRoZSBjb250ZXh0IGlzIGFuIGFycmF5IGFuIGFycmF5IGNvbnRyb2xsZXIKLSAg
ICBpcyBnZW5lcmF0ZWQsIGlmIGFuIG9iamVjdCwgYW4gb2JqZWN0IGNvbnRyb2xsZXIgb3RoZXJ3
aXNlLCBhIGJhc2ljCi0gICAgY29udHJvbGxlciBpcyBnZW5lcmF0ZWQuCi0gIAotICAgIEBmb3Ig
RW1iZXIKLSAgICBAbWV0aG9kIGdlbmVyYXRlQ29udHJvbGxlcgotICAgIEBwcml2YXRlCi0gICAg
QHNpbmNlIDEuMy4wCi0gICovCi0KLSAgZnVuY3Rpb24gZ2VuZXJhdGVDb250cm9sbGVyKG93bmVy
LCBjb250cm9sbGVyTmFtZSwgY29udGV4dCkgewotICAgIGdlbmVyYXRlQ29udHJvbGxlckZhY3Rv
cnkob3duZXIsIGNvbnRyb2xsZXJOYW1lLCBjb250ZXh0KTsKLQotICAgIHZhciBmdWxsTmFtZSA9
ICdjb250cm9sbGVyOicgKyBjb250cm9sbGVyTmFtZTsKLSAgICB2YXIgaW5zdGFuY2UgPSBvd25l
ci5sb29rdXAoZnVsbE5hbWUpOwotCi0gICAgaWYgKF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0Lmdl
dChpbnN0YW5jZSwgJ25hbWVzcGFjZS5MT0dfQUNUSVZFX0dFTkVSQVRJT04nKSkgewotICAgICAg
X2VtYmVyTWV0YWxEZWJ1Zy5pbmZvKCdnZW5lcmF0ZWQgLT4gJyArIGZ1bGxOYW1lLCB7IGZ1bGxO
YW1lOiBmdWxsTmFtZSB9KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gaW5zdGFuY2U7Ci0gIH0KLX0p
OwotZW5pZmVkKCdlbWJlci1yb3V0aW5nL3N5c3RlbS9xdWVyeV9wYXJhbXMnLCBbJ2V4cG9ydHMn
LCAnZW1iZXItcnVudGltZS9zeXN0ZW0vb2JqZWN0J10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1i
ZXJSdW50aW1lU3lzdGVtT2JqZWN0KSB7Ci0gICd1c2Ugc3RyaWN0JzsKLQotICBleHBvcnRzLmRl
ZmF1bHQgPSBfZW1iZXJSdW50aW1lU3lzdGVtT2JqZWN0LmRlZmF1bHQuZXh0ZW5kKHsKLSAgICBp
c1F1ZXJ5UGFyYW1zOiB0cnVlLAotICAgIHZhbHVlczogbnVsbAotICB9KTsKLX0pOwotZW5pZmVk
KCdlbWJlci1yb3V0aW5nL3N5c3RlbS9yb3V0ZScsIFsnZXhwb3J0cycsICdlbWJlci1tZXRhbC9j
b3JlJywgJ2VtYmVyLW1ldGFsL2RlYnVnJywgJ2VtYmVyLW1ldGFsL2ZlYXR1cmVzJywgJ2VtYmVy
LW1ldGFsL2Vycm9yJywgJ2VtYmVyLW1ldGFsL3Byb3BlcnR5X2dldCcsICdlbWJlci1tZXRhbC9w
cm9wZXJ0eV9zZXQnLCAnZW1iZXItbWV0YWwvZ2V0X3Byb3BlcnRpZXMnLCAnZW1iZXItbWV0YWwv
aXNfbm9uZScsICdlbWJlci1tZXRhbC9jb21wdXRlZCcsICdlbWJlci1tZXRhbC9hc3NpZ24nLCAn
ZW1iZXItcnVudGltZS91dGlscycsICdlbWJlci1tZXRhbC9ydW5fbG9vcCcsICdlbWJlci1ydW50
aW1lL2NvcHknLCAnZW1iZXItcnVudGltZS9zeXN0ZW0vc3RyaW5nJywgJ2VtYmVyLXJ1bnRpbWUv
c3lzdGVtL29iamVjdCcsICdlbWJlci1ydW50aW1lL3N5c3RlbS9uYXRpdmVfYXJyYXknLCAnZW1i
ZXItcnVudGltZS9taXhpbnMvZXZlbnRlZCcsICdlbWJlci1ydW50aW1lL21peGlucy9hY3Rpb25f
aGFuZGxlcicsICdlbWJlci1yb3V0aW5nL3N5c3RlbS9nZW5lcmF0ZV9jb250cm9sbGVyJywgJ2Vt
YmVyLXJvdXRpbmcvdXRpbHMnLCAnY29udGFpbmVyL293bmVyJywgJ2VtYmVyLW1ldGFsL2lzX2Vt
cHR5J10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbENvcmUsIF9lbWJlck1ldGFsRGVi
dWcsIF9lbWJlck1ldGFsRmVhdHVyZXMsIF9lbWJlck1ldGFsRXJyb3IsIF9lbWJlck1ldGFsUHJv
cGVydHlfZ2V0LCBfZW1iZXJNZXRhbFByb3BlcnR5X3NldCwgX2VtYmVyTWV0YWxHZXRfcHJvcGVy
dGllcywgX2VtYmVyTWV0YWxJc19ub25lLCBfZW1iZXJNZXRhbENvbXB1dGVkLCBfZW1iZXJNZXRh
bEFzc2lnbiwgX2VtYmVyUnVudGltZVV0aWxzLCBfZW1iZXJNZXRhbFJ1bl9sb29wLCBfZW1iZXJS
dW50aW1lQ29weSwgX2VtYmVyUnVudGltZVN5c3RlbVN0cmluZywgX2VtYmVyUnVudGltZVN5c3Rl
bU9iamVjdCwgX2VtYmVyUnVudGltZVN5c3RlbU5hdGl2ZV9hcnJheSwgX2VtYmVyUnVudGltZU1p
eGluc0V2ZW50ZWQsIF9lbWJlclJ1bnRpbWVNaXhpbnNBY3Rpb25faGFuZGxlciwgX2VtYmVyUm91
dGluZ1N5c3RlbUdlbmVyYXRlX2NvbnRyb2xsZXIsIF9lbWJlclJvdXRpbmdVdGlscywgX2NvbnRh
aW5lck93bmVyLCBfZW1iZXJNZXRhbElzX2VtcHR5KSB7Ci0gICd1c2Ugc3RyaWN0JzsKLQotICB2
YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7Ci0KLSAgZnVuY3Rpb24gSygpIHsKLSAg
ICByZXR1cm4gdGhpczsKLSAgfQotCi0gIC8qKgotICBAbW9kdWxlIGVtYmVyCi0gIEBzdWJtb2R1
bGUgZW1iZXItcm91dGluZwotICAqLwotCi0gIC8qKgotICAgIFRoZSBgRW1iZXIuUm91dGVgIGNs
YXNzIGlzIHVzZWQgdG8gZGVmaW5lIGluZGl2aWR1YWwgcm91dGVzLiBSZWZlciB0bwotICAgIHRo
ZSBbcm91dGluZyBndWlkZV0oaHR0cDovL2VtYmVyanMuY29tL2d1aWRlcy9yb3V0aW5nLykgZm9y
IGRvY3VtZW50YXRpb24uCi0gIAotICAgIEBjbGFzcyBSb3V0ZQotICAgIEBuYW1lc3BhY2UgRW1i
ZXIKLSAgICBAZXh0ZW5kcyBFbWJlci5PYmplY3QKLSAgICBAdXNlcyBFbWJlci5BY3Rpb25IYW5k
bGVyCi0gICAgQHVzZXMgRW1iZXIuRXZlbnRlZAotICAgIEBwdWJsaWMKLSAgKi8KLSAgdmFyIFJv
dXRlID0gX2VtYmVyUnVudGltZVN5c3RlbU9iamVjdC5kZWZhdWx0LmV4dGVuZChfZW1iZXJSdW50
aW1lTWl4aW5zQWN0aW9uX2hhbmRsZXIuZGVmYXVsdCwgX2VtYmVyUnVudGltZU1peGluc0V2ZW50
ZWQuZGVmYXVsdCwgewotICAgIC8qKgotICAgICAgQ29uZmlndXJhdGlvbiBoYXNoIGZvciB0aGlz
IHJvdXRlJ3MgcXVlcnlQYXJhbXMuIFRoZSBwb3NzaWJsZQotICAgICAgY29uZmlndXJhdGlvbiBv
cHRpb25zIGFuZCB0aGVpciBkZWZhdWx0cyBhcmUgYXMgZm9sbG93cwotICAgICAgKGFzc3VtaW5n
IGEgcXVlcnkgcGFyYW0gd2hvc2UgY29udHJvbGxlciBwcm9wZXJ0eSBpcyBgcGFnZWApOgotICAg
ICAgIGBgYGphdmFzY3JpcHQKLSAgICAgIHF1ZXJ5UGFyYW1zOiB7Ci0gICAgICAgIHBhZ2U6IHsK
LSAgICAgICAgICAvLyBCeSBkZWZhdWx0LCBjb250cm9sbGVyIHF1ZXJ5IHBhcmFtIHByb3BlcnRp
ZXMgZG9uJ3QKLSAgICAgICAgICAvLyBjYXVzZSBhIGZ1bGwgdHJhbnNpdGlvbiB3aGVuIHRoZXkg
YXJlIGNoYW5nZWQsIGJ1dAotICAgICAgICAgIC8vIHJhdGhlciBvbmx5IGNhdXNlIHRoZSBVUkwg
dG8gdXBkYXRlLiBTZXR0aW5nCi0gICAgICAgICAgLy8gYHJlZnJlc2hNb2RlbGAgdG8gdHJ1ZSB3
aWxsIGNhdXNlIGFuICJpbi1wbGFjZSIKLSAgICAgICAgICAvLyB0cmFuc2l0aW9uIHRvIG9jY3Vy
LCB3aGVyZWJ5IHRoZSBtb2RlbCBob29rcyBmb3IKLSAgICAgICAgICAvLyB0aGlzIHJvdXRlIChh
bmQgYW55IGNoaWxkIHJvdXRlcykgd2lsbCByZS1maXJlLCBhbGxvd2luZwotICAgICAgICAgIC8v
IHlvdSB0byByZWxvYWQgbW9kZWxzIChlLmcuLCBmcm9tIHRoZSBzZXJ2ZXIpIHVzaW5nIHRoZQot
ICAgICAgICAgIC8vIHVwZGF0ZWQgcXVlcnkgcGFyYW0gdmFsdWVzLgotICAgICAgICAgIHJlZnJl
c2hNb2RlbDogZmFsc2UsCi0gICAgICAgICAgIC8vIEJ5IGRlZmF1bHQsIGNoYW5nZXMgdG8gY29u
dHJvbGxlciBxdWVyeSBwYXJhbSBwcm9wZXJ0aWVzCi0gICAgICAgICAgLy8gY2F1c2UgdGhlIFVS
TCB0byB1cGRhdGUgdmlhIGBwdXNoU3RhdGVgLCB3aGljaCBtZWFucyBhbgotICAgICAgICAgIC8v
IGl0ZW0gd2lsbCBiZSBhZGRlZCB0byB0aGUgYnJvd3NlcidzIGhpc3RvcnksIGFsbG93aW5nCi0g
ICAgICAgICAgLy8geW91IHRvIHVzZSB0aGUgYmFjayBidXR0b24gdG8gcmVzdG9yZSB0aGUgYXBw
IHRvIHRoZQotICAgICAgICAgIC8vIHByZXZpb3VzIHN0YXRlIGJlZm9yZSB0aGUgcXVlcnkgcGFy
YW0gcHJvcGVydHkgd2FzIGNoYW5nZWQuCi0gICAgICAgICAgLy8gU2V0dGluZyBgcmVwbGFjZWAg
dG8gdHJ1ZSB3aWxsIHVzZSBgcmVwbGFjZVN0YXRlYCAob3IgaXRzCi0gICAgICAgICAgLy8gaGFz
aCBsb2NhdGlvbiBlcXVpdmFsZW50KSwgd2hpY2ggY2F1c2VzIG5vIGJyb3dzZXIgaGlzdG9yeQot
ICAgICAgICAgIC8vIGl0ZW0gdG8gYmUgYWRkZWQuIFRoaXMgb3B0aW9ucyBuYW1lIGFuZCBkZWZh
dWx0IHZhbHVlIGFyZQotICAgICAgICAgIC8vIHRoZSBzYW1lIGFzIHRoZSBgbGluay10b2AgaGVs
cGVyJ3MgYHJlcGxhY2VgIG9wdGlvbi4KLSAgICAgICAgICByZXBsYWNlOiBmYWxzZSwKLSAgICAg
ICAgICAgLy8gQnkgZGVmYXVsdCwgdGhlIHF1ZXJ5IHBhcmFtIFVSTCBrZXkgaXMgdGhlIHNhbWUg
bmFtZSBhcwotICAgICAgICAgIC8vIHRoZSBjb250cm9sbGVyIHByb3BlcnR5IG5hbWUuIFVzZSBg
YXNgIHRvIHNwZWNpZnkgYQotICAgICAgICAgIC8vIGRpZmZlcmVudCBVUkwga2V5LgotICAgICAg
ICAgIGFzOiAncGFnZScKLSAgICAgICAgfQotICAgICAgfQotICAgICAgYGBgCi0gICAgICAgQHBy
b3BlcnR5IHF1ZXJ5UGFyYW1zCi0gICAgICBAZm9yIEVtYmVyLlJvdXRlCi0gICAgICBAdHlwZSBP
YmplY3QKLSAgICAgIEBwdWJsaWMKLSAgICAqLwotICAgIHF1ZXJ5UGFyYW1zOiB7fSwKLQotICAg
IC8qKgotICAgICAgVGhlIG5hbWUgb2YgdGhlIHJvdXRlLCBkb3QtZGVsaW1pdGVkLgotICAgICAg
IEZvciBleGFtcGxlLCBhIHJvdXRlIGZvdW5kIGF0IGBhcHAvcm91dGVzL3Bvc3RzL3Bvc3QuanNg
IG9yCi0gICAgICBgYXBwL3Bvc3RzL3Bvc3Qvcm91dGUuanNgICh3aXRoIHBvZHMpIHdpbGwgaGF2
ZSBhIGByb3V0ZU5hbWVgIG9mCi0gICAgICBgcG9zdHMucG9zdGAuCi0gICAgICAgQHByb3BlcnR5
IHJvdXRlTmFtZQotICAgICAgQGZvciBFbWJlci5Sb3V0ZQotICAgICAgQHR5cGUgU3RyaW5nCi0g
ICAgICBAcHVibGljCi0gICAgKi8KLQotICAgIC8qKgotICAgICAgQHByaXZhdGUKLSAgICAgICBA
cHJvcGVydHkgX3FwCi0gICAgKi8KLSAgICBfcXA6IF9lbWJlck1ldGFsQ29tcHV0ZWQuY29tcHV0
ZWQoZnVuY3Rpb24gKCkgewotICAgICAgdmFyIF90aGlzID0gdGhpczsKLQotICAgICAgdmFyIGNv
bnRyb2xsZXJQcm90bywgY29tYmluZWRRdWVyeVBhcmFtZXRlckNvbmZpZ3VyYXRpb247Ci0KLSAg
ICAgIHZhciBjb250cm9sbGVyTmFtZSA9IHRoaXMuY29udHJvbGxlck5hbWUgfHwgdGhpcy5yb3V0
ZU5hbWU7Ci0gICAgICB2YXIgZGVmaW5lZENvbnRyb2xsZXJDbGFzcyA9IF9jb250YWluZXJPd25l
ci5nZXRPd25lcih0aGlzKS5fbG9va3VwRmFjdG9yeSgnY29udHJvbGxlcjonICsgY29udHJvbGxl
ck5hbWUpOwotICAgICAgdmFyIHF1ZXJ5UGFyYW1ldGVyQ29uZmlndXJhdG9uID0gX2VtYmVyTWV0
YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsICdxdWVyeVBhcmFtcycpOwotICAgICAgdmFyIGhhc1Jv
dXRlckRlZmluZWRRdWVyeVBhcmFtcyA9ICEhT2JqZWN0LmtleXMocXVlcnlQYXJhbWV0ZXJDb25m
aWd1cmF0b24pLmxlbmd0aDsKLQotICAgICAgaWYgKGRlZmluZWRDb250cm9sbGVyQ2xhc3MpIHsK
LSAgICAgICAgLy8gdGhlIGRldmVsb3BlciBoYXMgYXV0aG9yZWQgYSBjb250cm9sbGVyIGNsYXNz
IGluIHRoZWlyIGFwcGxpY2F0aW9uIGZvciB0aGlzIHJvdXRlCi0gICAgICAgIC8vIGFjY2VzcyB0
aGUgcHJvdG90eXBlLCBmaW5kIGl0cyBxdWVyeSBwYXJhbXMgYW5kIG5vcm1hbGl6ZSB0aGVpciBv
YmplY3Qgc2hhcGUKLSAgICAgICAgLy8gdGhlbSBtZXJnZSBpbiB0aGUgcXVlcnkgcGFyYW1zIGZv
ciB0aGUgcm91dGUuIEFzIGEgbWVyZ2VkUHJvcGVydHksIFJvdXRlI3F1ZXJ5UGFyYW1zIGlzIGFs
d2F5cwotICAgICAgICAvLyBhdCBsZWFzdCBge31gCi0gICAgICAgIGNvbnRyb2xsZXJQcm90byA9
IGRlZmluZWRDb250cm9sbGVyQ2xhc3MucHJvdG8oKTsKLQotICAgICAgICB2YXIgY29udHJvbGxl
ckRlZmluZWRRdWVyeVBhcmFtZXRlckNvbmZpZ3VyYXRpb24gPSBfZW1iZXJNZXRhbFByb3BlcnR5
X2dldC5nZXQoY29udHJvbGxlclByb3RvLCAncXVlcnlQYXJhbXMnKTsKLSAgICAgICAgdmFyIG5v
cm1hbGl6ZWRDb250cm9sbGVyUXVlcnlQYXJhbWV0ZXJDb25maWd1cmF0aW9uID0gX2VtYmVyUm91
dGluZ1V0aWxzLm5vcm1hbGl6ZUNvbnRyb2xsZXJRdWVyeVBhcmFtcyhjb250cm9sbGVyRGVmaW5l
ZFF1ZXJ5UGFyYW1ldGVyQ29uZmlndXJhdGlvbik7Ci0gICAgICAgIGNvbWJpbmVkUXVlcnlQYXJh
bWV0ZXJDb25maWd1cmF0aW9uID0gbWVyZ2VFYWNoUXVlcnlQYXJhbXMobm9ybWFsaXplZENvbnRy
b2xsZXJRdWVyeVBhcmFtZXRlckNvbmZpZ3VyYXRpb24sIHF1ZXJ5UGFyYW1ldGVyQ29uZmlndXJh
dG9uKTsKLSAgICAgIH0gZWxzZSBpZiAoaGFzUm91dGVyRGVmaW5lZFF1ZXJ5UGFyYW1zKSB7Ci0g
ICAgICAgIC8vIHRoZSBkZXZlbG9wZXIgaGFzIG5vdCBkZWZpbmVkIGEgY29udHJvbGxlciBidXQg
Kmhhcyogc3VwcGxpZWQgcm91dGUgcXVlcnkgcGFyYW1zLgotICAgICAgICAvLyBHZW5lcmF0ZSBh
IGNsYXNzIGZvciB0aGVtIHNvIHdlIGNhbiBsYXRlciBpbnNlcnQgZGVmYXVsdCB2YWx1ZXMKLSAg
ICAgICAgdmFyIGdlbmVyYXRlZENvbnRyb2xsZXJDbGFzcyA9IF9lbWJlclJvdXRpbmdTeXN0ZW1H
ZW5lcmF0ZV9jb250cm9sbGVyLmdlbmVyYXRlQ29udHJvbGxlckZhY3RvcnkoX2NvbnRhaW5lck93
bmVyLmdldE93bmVyKHRoaXMpLCBjb250cm9sbGVyTmFtZSk7Ci0gICAgICAgIGNvbnRyb2xsZXJQ
cm90byA9IGdlbmVyYXRlZENvbnRyb2xsZXJDbGFzcy5wcm90bygpOwotICAgICAgICBjb21iaW5l
ZFF1ZXJ5UGFyYW1ldGVyQ29uZmlndXJhdGlvbiA9IHF1ZXJ5UGFyYW1ldGVyQ29uZmlndXJhdG9u
OwotICAgICAgfQotCi0gICAgICB2YXIgcXBzID0gW107Ci0gICAgICB2YXIgbWFwID0ge307Ci0g
ICAgICB2YXIgcHJvcGVydHlOYW1lcyA9IFtdOwotCi0gICAgICBmb3IgKHZhciBwcm9wTmFtZSBp
biBjb21iaW5lZFF1ZXJ5UGFyYW1ldGVyQ29uZmlndXJhdGlvbikgewotICAgICAgICBpZiAoIWNv
bWJpbmVkUXVlcnlQYXJhbWV0ZXJDb25maWd1cmF0aW9uLmhhc093blByb3BlcnR5KHByb3BOYW1l
KSkgewotICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gdG8gc3Vw
cG9ydCB0aGUgZHViaW91cyBmZWF0dXJlIG9mIHVzaW5nIHVua25vd25Qcm9wZXJ0eQotICAgICAg
ICAvLyBvbiBxdWVyeVBhcmFtcyBjb25maWd1cmF0aW9uCi0gICAgICAgIGlmIChwcm9wTmFtZSA9
PT0gJ3Vua25vd25Qcm9wZXJ0eScgfHwgcHJvcE5hbWUgPT09ICdfc3VwZXInKSB7Ci0gICAgICAg
ICAgLy8gcG9zc2libGUgdG9kbzogaXNzdWUgZGVwcmVjYXRpb24gd2FybmluZz8KLSAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciBkZXNjID0gY29tYmluZWRRdWVy
eVBhcmFtZXRlckNvbmZpZ3VyYXRpb25bcHJvcE5hbWVdOwotCi0gICAgICAgIHZhciBzY29wZSA9
IGRlc2Muc2NvcGUgfHwgJ21vZGVsJzsKLSAgICAgICAgdmFyIHBhcnRzOwotCi0gICAgICAgIGlm
IChzY29wZSA9PT0gJ2NvbnRyb2xsZXInKSB7Ci0gICAgICAgICAgcGFydHMgPSBbXTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHZhciB1cmxLZXkgPSBkZXNjLmFzIHx8IHRoaXMuc2VyaWFsaXplUXVl
cnlQYXJhbUtleShwcm9wTmFtZSk7Ci0gICAgICAgIHZhciBkZWZhdWx0VmFsdWUgPSBfZW1iZXJN
ZXRhbFByb3BlcnR5X2dldC5nZXQoY29udHJvbGxlclByb3RvLCBwcm9wTmFtZSk7Ci0KLSAgICAg
ICAgaWYgKEFycmF5LmlzQXJyYXkoZGVmYXVsdFZhbHVlKSkgewotICAgICAgICAgIGRlZmF1bHRW
YWx1ZSA9IF9lbWJlclJ1bnRpbWVTeXN0ZW1OYXRpdmVfYXJyYXkuQShkZWZhdWx0VmFsdWUuc2xp
Y2UoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgdHlwZSA9IGRlc2MudHlwZSB8fCBfZW1i
ZXJSdW50aW1lVXRpbHMudHlwZU9mKGRlZmF1bHRWYWx1ZSk7Ci0KLSAgICAgICAgdmFyIGRlZmF1
bHRWYWx1ZVNlcmlhbGl6ZWQgPSB0aGlzLnNlcmlhbGl6ZVF1ZXJ5UGFyYW0oZGVmYXVsdFZhbHVl
LCB1cmxLZXksIHR5cGUpOwotICAgICAgICB2YXIgc2NvcGVkUHJvcGVydHlOYW1lID0gY29udHJv
bGxlck5hbWUgKyAnOicgKyBwcm9wTmFtZTsKLSAgICAgICAgdmFyIHFwID0gewotICAgICAgICAg
IHVuZGVjb3JhdGVkRGVmYXVsdFZhbHVlOiBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQoY29u
dHJvbGxlclByb3RvLCBwcm9wTmFtZSksCi0gICAgICAgICAgZGVmYXVsdFZhbHVlOiBkZWZhdWx0
VmFsdWUsCi0gICAgICAgICAgc2VyaWFsaXplZERlZmF1bHRWYWx1ZTogZGVmYXVsdFZhbHVlU2Vy
aWFsaXplZCwKLSAgICAgICAgICBzZXJpYWxpemVkVmFsdWU6IGRlZmF1bHRWYWx1ZVNlcmlhbGl6
ZWQsCi0KLSAgICAgICAgICB0eXBlOiB0eXBlLAotICAgICAgICAgIHVybEtleTogdXJsS2V5LAot
ICAgICAgICAgIHByb3A6IHByb3BOYW1lLAotICAgICAgICAgIHNjb3BlZFByb3BlcnR5TmFtZTog
c2NvcGVkUHJvcGVydHlOYW1lLAotICAgICAgICAgIGN0cmw6IGNvbnRyb2xsZXJOYW1lLAotICAg
ICAgICAgIHJvdXRlOiB0aGlzLAotICAgICAgICAgIHBhcnRzOiBwYXJ0cywgLy8gcHJvdmlkZWQg
bGF0ZXIgd2hlbiBzdGFzaE5hbWVzIGlzIGNhbGxlZCBpZiAnbW9kZWwnIHNjb3BlCi0gICAgICAg
ICAgdmFsdWVzOiBudWxsLCAvLyBwcm92aWRlZCBsYXRlciB3aGVuIHNldHVwIGlzIGNhbGxlZC4g
bm8gaWRlYSB3aHkuCi0gICAgICAgICAgc2NvcGU6IHNjb3BlLAotICAgICAgICAgIHByZWZpeDog
JycKLSAgICAgICAgfTsKLQotICAgICAgICBtYXBbcHJvcE5hbWVdID0gbWFwW3VybEtleV0gPSBt
YXBbc2NvcGVkUHJvcGVydHlOYW1lXSA9IHFwOwotICAgICAgICBxcHMucHVzaChxcCk7Ci0gICAg
ICAgIHByb3BlcnR5TmFtZXMucHVzaChwcm9wTmFtZSk7Ci0gICAgICB9Ci0KLSAgICAgIHJldHVy
biB7Ci0gICAgICAgIHFwczogcXBzLAotICAgICAgICBtYXA6IG1hcCwKLSAgICAgICAgcHJvcGVy
dHlOYW1lczogcHJvcGVydHlOYW1lcywKLSAgICAgICAgc3RhdGVzOiB7Ci0gICAgICAgICAgLyoK
LSAgICAgICAgICAgIENhbGxlZCB3aGVuIGEgcXVlcnkgcGFyYW1ldGVyIGNoYW5nZXMgaW4gdGhl
IFVSTCwgdGhpcyByb3V0ZSBjYXJlcwotICAgICAgICAgICAgYWJvdXQgdGhhdCBxdWVyeSBwYXJh
bWV0ZXIsIGJ1dCB0aGUgcm91dGUgaXMgbm90IGN1cnJlbnRseQotICAgICAgICAgICAgaW4gdGhl
IGFjdGl2ZSByb3V0ZSBoaWVyYXJjaHkuCi0gICAgICAgICAgKi8KLSAgICAgICAgICBpbmFjdGl2
ZTogZnVuY3Rpb24gKHByb3AsIHZhbHVlKSB7Ci0gICAgICAgICAgICB2YXIgcXAgPSBtYXBbcHJv
cF07Ci0gICAgICAgICAgICBfdGhpcy5fcXBDaGFuZ2VkKHByb3AsIHZhbHVlLCBxcCk7Ci0gICAg
ICAgICAgfSwKLSAgICAgICAgICAvKgotICAgICAgICAgICAgQ2FsbGVkIHdoZW4gYSBxdWVyeSBw
YXJhbWV0ZXIgY2hhbmdlcyBpbiB0aGUgVVJMLCB0aGlzIHJvdXRlIGNhcmVzCi0gICAgICAgICAg
ICBhYm91dCB0aGF0IHF1ZXJ5IHBhcmFtZXRlciwgYW5kIHRoZSByb3V0ZSBpcyBjdXJyZW50bHkK
LSAgICAgICAgICAgIGluIHRoZSBhY3RpdmUgcm91dGUgaGllcmFyY2h5LgotICAgICAgICAgICov
Ci0gICAgICAgICAgYWN0aXZlOiBmdW5jdGlvbiAocHJvcCwgdmFsdWUpIHsKLSAgICAgICAgICAg
IHZhciBxcCA9IG1hcFtwcm9wXTsKLSAgICAgICAgICAgIF90aGlzLl9xcENoYW5nZWQocHJvcCwg
dmFsdWUsIHFwKTsKLSAgICAgICAgICAgIHJldHVybiBfdGhpcy5fYWN0aXZlUVBDaGFuZ2VkKG1h
cFtwcm9wXSwgdmFsdWUpOwotICAgICAgICAgIH0sCi0gICAgICAgICAgLyoKLSAgICAgICAgICAg
IENhbGxlZCB3aGVuIGEgdmFsdWUgb2YgYSBxdWVyeSBwYXJhbWV0ZXIgdGhpcyByb3V0ZSBoYW5k
bGVzIGNoYW5nZXMgaW4gYSBjb250cm9sbGVyCi0gICAgICAgICAgICBhbmQgdGhlIHJvdXRlIGlz
IGN1cnJlbnRseSBpbiB0aGUgYWN0aXZlIHJvdXRlIGhpZXJhcmNoeS4KLSAgICAgICAgICAqLwot
ICAgICAgICAgIGFsbG93T3ZlcnJpZGVzOiBmdW5jdGlvbiAocHJvcCwgdmFsdWUpIHsKLSAgICAg
ICAgICAgIHZhciBxcCA9IG1hcFtwcm9wXTsKLSAgICAgICAgICAgIF90aGlzLl9xcENoYW5nZWQo
cHJvcCwgdmFsdWUsIHFwKTsKLSAgICAgICAgICAgIHJldHVybiBfdGhpcy5fdXBkYXRpbmdRUENo
YW5nZWQobWFwW3Byb3BdKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH07Ci0gICAg
fSksCi0KLSAgICAvKioKLSAgICAgIEBwcml2YXRlCi0gICAgICAgQHByb3BlcnR5IF9uYW1lcwot
ICAgICovCi0gICAgX25hbWVzOiBudWxsLAotCi0gICAgLyoqCi0gICAgICBAcHJpdmF0ZQotICAg
ICAgIEBtZXRob2QgX3N0YXNoTmFtZXMKLSAgICAqLwotICAgIF9zdGFzaE5hbWVzOiBmdW5jdGlv
biAoX2hhbmRsZXJJbmZvLCBkeW5hbWljUGFyZW50KSB7Ci0gICAgICB2YXIgaGFuZGxlckluZm8g
PSBfaGFuZGxlckluZm87Ci0gICAgICBpZiAodGhpcy5fbmFtZXMpIHsKLSAgICAgICAgcmV0dXJu
OwotICAgICAgfQotICAgICAgdmFyIG5hbWVzID0gdGhpcy5fbmFtZXMgPSBoYW5kbGVySW5mby5f
bmFtZXM7Ci0KLSAgICAgIGlmICghbmFtZXMubGVuZ3RoKSB7Ci0gICAgICAgIGhhbmRsZXJJbmZv
ID0gZHluYW1pY1BhcmVudDsKLSAgICAgICAgbmFtZXMgPSBoYW5kbGVySW5mbyAmJiBoYW5kbGVy
SW5mby5fbmFtZXMgfHwgW107Ci0gICAgICB9Ci0KLSAgICAgIHZhciBxcHMgPSBfZW1iZXJNZXRh
bFByb3BlcnR5X2dldC5nZXQodGhpcywgJ19xcC5xcHMnKTsKLSAgICAgIHZhciBsZW4gPSBxcHMu
bGVuZ3RoOwotCi0gICAgICB2YXIgbmFtZVBhdGhzID0gbmV3IEFycmF5KG5hbWVzLmxlbmd0aCk7
Ci0gICAgICBmb3IgKHZhciBhID0gMCwgbmxlbiA9IG5hbWVzLmxlbmd0aDsgYSA8IG5sZW47ICsr
YSkgewotICAgICAgICBuYW1lUGF0aHNbYV0gPSBoYW5kbGVySW5mby5uYW1lICsgJy4nICsgbmFt
ZXNbYV07Ci0gICAgICB9Ci0KLSAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHsK
LSAgICAgICAgdmFyIHFwID0gcXBzW2ldOwotICAgICAgICBpZiAocXAuc2NvcGUgPT09ICdtb2Rl
bCcpIHsKLSAgICAgICAgICBxcC5wYXJ0cyA9IG5hbWVQYXRoczsKLSAgICAgICAgfQotICAgICAg
ICBxcC5wcmVmaXggPSBxcC5jdHJsOwotICAgICAgfQotICAgIH0sCi0KLSAgICAvKioKLSAgICAg
IEBwcml2YXRlCi0gICAgICAgQHByb3BlcnR5IF9hY3RpdmVRUENoYW5nZWQKLSAgICAqLwotICAg
IF9hY3RpdmVRUENoYW5nZWQ6IGZ1bmN0aW9uIChxcCwgdmFsdWUpIHsKLSAgICAgIHZhciByb3V0
ZXIgPSB0aGlzLnJvdXRlcjsKLSAgICAgIHJvdXRlci5fYWN0aXZlUVBDaGFuZ2VkKHFwLnNjb3Bl
ZFByb3BlcnR5TmFtZSwgdmFsdWUpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgIEBwcml2YXRl
Ci0gICAgICBAbWV0aG9kIF91cGRhdGluZ1FQQ2hhbmdlZAotICAgICovCi0gICAgX3VwZGF0aW5n
UVBDaGFuZ2VkOiBmdW5jdGlvbiAocXApIHsKLSAgICAgIHZhciByb3V0ZXIgPSB0aGlzLnJvdXRl
cjsKLSAgICAgIHJvdXRlci5fdXBkYXRpbmdRUENoYW5nZWQocXAudXJsS2V5KTsKLSAgICB9LAot
Ci0gICAgbWVyZ2VkUHJvcGVydGllczogWydxdWVyeVBhcmFtcyddLAotCi0gICAgLyoqCi0gICAg
ICBSZXRyaWV2ZXMgcGFyYW1ldGVycywgZm9yIGN1cnJlbnQgcm91dGUgdXNpbmcgdGhlIHN0YXRl
LnBhcmFtcwotICAgICAgdmFyaWFibGUgYW5kIGdldFF1ZXJ5UGFyYW1zRm9yLCB1c2luZyB0aGUg
c3VwcGxpZWQgcm91dGVOYW1lLgotICAgICAgIEBtZXRob2QgcGFyYW1zRm9yCi0gICAgICBAcGFy
YW0ge1N0cmluZ30gbmFtZQotICAgICAgQHB1YmxpYwotICAgICovCi0gICAgcGFyYW1zRm9yOiBm
dW5jdGlvbiAobmFtZSkgewotICAgICAgdmFyIHJvdXRlID0gX2NvbnRhaW5lck93bmVyLmdldE93
bmVyKHRoaXMpLmxvb2t1cCgncm91dGU6JyArIG5hbWUpOwotCi0gICAgICBpZiAoIXJvdXRlKSB7
Ci0gICAgICAgIHJldHVybiB7fTsKLSAgICAgIH0KLQotICAgICAgdmFyIHRyYW5zaXRpb24gPSB0
aGlzLnJvdXRlci5yb3V0ZXIuYWN0aXZlVHJhbnNpdGlvbjsKLSAgICAgIHZhciBzdGF0ZSA9IHRy
YW5zaXRpb24gPyB0cmFuc2l0aW9uLnN0YXRlIDogdGhpcy5yb3V0ZXIucm91dGVyLnN0YXRlOwot
Ci0gICAgICB2YXIgcGFyYW1zID0ge307Ci0gICAgICBfZW1iZXJNZXRhbEFzc2lnbi5kZWZhdWx0
KHBhcmFtcywgc3RhdGUucGFyYW1zW25hbWVdKTsKLSAgICAgIF9lbWJlck1ldGFsQXNzaWduLmRl
ZmF1bHQocGFyYW1zLCBnZXRRdWVyeVBhcmFtc0Zvcihyb3V0ZSwgc3RhdGUpKTsKLQotICAgICAg
cmV0dXJuIHBhcmFtczsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICBTZXJpYWxpemVzIHRoZSBx
dWVyeSBwYXJhbWV0ZXIga2V5Ci0gICAgICAgQG1ldGhvZCBzZXJpYWxpemVRdWVyeVBhcmFtS2V5
Ci0gICAgICBAcGFyYW0ge1N0cmluZ30gY29udHJvbGxlclByb3BlcnR5TmFtZQotICAgICAgQHBy
aXZhdGUKLSAgICAqLwotICAgIHNlcmlhbGl6ZVF1ZXJ5UGFyYW1LZXk6IGZ1bmN0aW9uIChjb250
cm9sbGVyUHJvcGVydHlOYW1lKSB7Ci0gICAgICByZXR1cm4gY29udHJvbGxlclByb3BlcnR5TmFt
ZTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICBTZXJpYWxpemVzIHZhbHVlIG9mIHRoZSBxdWVy
eSBwYXJhbWV0ZXIgYmFzZWQgb24gZGVmYXVsdFZhbHVlVHlwZQotICAgICAgIEBtZXRob2Qgc2Vy
aWFsaXplUXVlcnlQYXJhbQotICAgICAgQHBhcmFtIHtPYmplY3R9IHZhbHVlCi0gICAgICBAcGFy
YW0ge1N0cmluZ30gdXJsS2V5Ci0gICAgICBAcGFyYW0ge1N0cmluZ30gZGVmYXVsdFZhbHVlVHlw
ZQotICAgICAgQHByaXZhdGUKLSAgICAqLwotICAgIHNlcmlhbGl6ZVF1ZXJ5UGFyYW06IGZ1bmN0
aW9uICh2YWx1ZSwgdXJsS2V5LCBkZWZhdWx0VmFsdWVUeXBlKSB7Ci0gICAgICAvLyB1cmxLZXkg
aXNuJ3QgdXNlZCBoZXJlLCBidXQgYW55b25lIG92ZXJyaWRpbmcKLSAgICAgIC8vIGNhbiB1c2Ug
aXQgdG8gcHJvdmlkZSBzZXJpYWxpemF0aW9uIHNwZWNpZmljCi0gICAgICAvLyB0byBhIGNlcnRh
aW4gcXVlcnkgcGFyYW0uCi0gICAgICBpZiAoZGVmYXVsdFZhbHVlVHlwZSA9PT0gJ2FycmF5Jykg
ewotICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUpOwotICAgICAgfQotICAgICAg
cmV0dXJuICcnICsgdmFsdWU7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAgRGVzZXJpYWxpemVz
IHZhbHVlIG9mIHRoZSBxdWVyeSBwYXJhbWV0ZXIgYmFzZWQgb24gZGVmYXVsdFZhbHVlVHlwZQot
ICAgICAgIEBtZXRob2QgZGVzZXJpYWxpemVRdWVyeVBhcmFtCi0gICAgICBAcGFyYW0ge09iamVj
dH0gdmFsdWUKLSAgICAgIEBwYXJhbSB7U3RyaW5nfSB1cmxLZXkKLSAgICAgIEBwYXJhbSB7U3Ry
aW5nfSBkZWZhdWx0VmFsdWVUeXBlCi0gICAgICBAcHJpdmF0ZQotICAgICovCi0gICAgZGVzZXJp
YWxpemVRdWVyeVBhcmFtOiBmdW5jdGlvbiAodmFsdWUsIHVybEtleSwgZGVmYXVsdFZhbHVlVHlw
ZSkgewotICAgICAgLy8gdXJsS2V5IGlzbid0IHVzZWQgaGVyZSwgYnV0IGFueW9uZSBvdmVycmlk
aW5nCi0gICAgICAvLyBjYW4gdXNlIGl0IHRvIHByb3ZpZGUgZGVzZXJpYWxpemF0aW9uIHNwZWNp
ZmljCi0gICAgICAvLyB0byBhIGNlcnRhaW4gcXVlcnkgcGFyYW0uCi0KLSAgICAgIC8vIFVzZSB0
aGUgZGVmYXVsdFZhbHVlVHlwZSBvZiB0aGUgZGVmYXVsdCB2YWx1ZSAodGhlIGluaXRpYWwgdmFs
dWUgYXNzaWduZWQgdG8gYQotICAgICAgLy8gY29udHJvbGxlciBxdWVyeSBwYXJhbSBwcm9wZXJ0
eSksIHRvIGludGVsbGlnZW50bHkgZGVzZXJpYWxpemUgYW5kIGNhc3QuCi0gICAgICBpZiAoZGVm
YXVsdFZhbHVlVHlwZSA9PT0gJ2Jvb2xlYW4nKSB7Ci0gICAgICAgIHJldHVybiB2YWx1ZSA9PT0g
J3RydWUnID8gdHJ1ZSA6IGZhbHNlOwotICAgICAgfSBlbHNlIGlmIChkZWZhdWx0VmFsdWVUeXBl
ID09PSAnbnVtYmVyJykgewotICAgICAgICByZXR1cm4gTnVtYmVyKHZhbHVlKS52YWx1ZU9mKCk7
Ci0gICAgICB9IGVsc2UgaWYgKGRlZmF1bHRWYWx1ZVR5cGUgPT09ICdhcnJheScpIHsKLSAgICAg
ICAgcmV0dXJuIF9lbWJlclJ1bnRpbWVTeXN0ZW1OYXRpdmVfYXJyYXkuQShKU09OLnBhcnNlKHZh
bHVlKSk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gdmFsdWU7Ci0gICAgfSwKLQotICAgIC8qKgot
ICAgICAgQHByaXZhdGUKLSAgICAgICBAcHJvcGVydHkgX29wdGlvbnNGb3JRdWVyeVBhcmFtCi0g
ICAgKi8KLSAgICBfb3B0aW9uc0ZvclF1ZXJ5UGFyYW06IGZ1bmN0aW9uIChxcCkgewotICAgICAg
cmV0dXJuIF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0aGlzLCAncXVlcnlQYXJhbXMuJyAr
IHFwLnVybEtleSkgfHwgX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsICdxdWVyeVBh
cmFtcy4nICsgcXAucHJvcCkgfHwge307Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAgQSBob29r
IHlvdSBjYW4gdXNlIHRvIHJlc2V0IGNvbnRyb2xsZXIgdmFsdWVzIGVpdGhlciB3aGVuIHRoZSBt
b2RlbAotICAgICAgY2hhbmdlcyBvciB0aGUgcm91dGUgaXMgZXhpdGluZy4KLSAgICAgICBgYGBq
YXZhc2NyaXB0Ci0gICAgICBBcHAuQXJ0aWNsZXNSb3V0ZSA9IEVtYmVyLlJvdXRlLmV4dGVuZCh7
Ci0gICAgICAgIC8vIC4uLgotICAgICAgICAgcmVzZXRDb250cm9sbGVyOiBmdW5jdGlvbihjb250
cm9sbGVyLCBpc0V4aXRpbmcsIHRyYW5zaXRpb24pIHsKLSAgICAgICAgICBpZiAoaXNFeGl0aW5n
KSB7Ci0gICAgICAgICAgICBjb250cm9sbGVyLnNldCgncGFnZScsIDEpOwotICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgfSk7Ci0gICAgICBgYGAKLSAgICAgICBAbWV0aG9kIHJlc2V0Q29u
dHJvbGxlcgotICAgICAgQHBhcmFtIHtDb250cm9sbGVyfSBjb250cm9sbGVyIGluc3RhbmNlCi0g
ICAgICBAcGFyYW0ge0Jvb2xlYW59IGlzRXhpdGluZwotICAgICAgQHBhcmFtIHtPYmplY3R9IHRy
YW5zaXRpb24KLSAgICAgIEBzaW5jZSAxLjcuMAotICAgICAgQHB1YmxpYwotICAgICovCi0gICAg
cmVzZXRDb250cm9sbGVyOiBLLAotCi0gICAgLyoqCi0gICAgICBAcHJpdmF0ZQotICAgICAgIEBt
ZXRob2QgZXhpdAotICAgICovCi0gICAgZXhpdDogZnVuY3Rpb24gKCkgewotICAgICAgdGhpcy5k
ZWFjdGl2YXRlKCk7Ci0gICAgICB0aGlzLnRyaWdnZXIoJ2RlYWN0aXZhdGUnKTsKLSAgICAgIHRo
aXMudGVhcmRvd25WaWV3cygpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgIEBwcml2YXRlCi0g
ICAgICAgQG1ldGhvZCBfcmVzZXQKLSAgICAgIEBzaW5jZSAxLjcuMAotICAgICovCi0gICAgX3Jl
c2V0OiBmdW5jdGlvbiAoaXNFeGl0aW5nLCB0cmFuc2l0aW9uKSB7Ci0gICAgICB2YXIgY29udHJv
bGxlciA9IHRoaXMuY29udHJvbGxlcjsKLSAgICAgIGNvbnRyb2xsZXIuX3FwRGVsZWdhdGUgPSBf
ZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywgJ19xcC5zdGF0ZXMuaW5hY3RpdmUnKTsK
LQotICAgICAgdGhpcy5yZXNldENvbnRyb2xsZXIoY29udHJvbGxlciwgaXNFeGl0aW5nLCB0cmFu
c2l0aW9uKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICBAcHJpdmF0ZQotICAgICAgIEBtZXRo
b2QgZW50ZXIKLSAgICAqLwotICAgIGVudGVyOiBmdW5jdGlvbiAoKSB7Ci0gICAgICB0aGlzLmNv
bm5lY3Rpb25zID0gW107Ci0gICAgICB0aGlzLmFjdGl2YXRlKCk7Ci0gICAgICB0aGlzLnRyaWdn
ZXIoJ2FjdGl2YXRlJyk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAgVGhlIG5hbWUgb2YgdGhl
IHZpZXcgdG8gdXNlIGJ5IGRlZmF1bHQgd2hlbiByZW5kZXJpbmcgdGhpcyByb3V0ZXMgdGVtcGxh
dGUuCi0gICAgICAgV2hlbiByZW5kZXJpbmcgYSB0ZW1wbGF0ZSwgdGhlIHJvdXRlIHdpbGwsIGJ5
IGRlZmF1bHQsIGRldGVybWluZSB0aGUKLSAgICAgIHRlbXBsYXRlIGFuZCB2aWV3IHRvIHVzZSBm
cm9tIHRoZSBuYW1lIG9mIHRoZSByb3V0ZSBpdHNlbGYuIElmIHlvdSBuZWVkIHRvCi0gICAgICBk
ZWZpbmUgYSBzcGVjaWZpYyB2aWV3LCBzZXQgdGhpcyBwcm9wZXJ0eS4KLSAgICAgICBUaGlzIGlz
IHVzZWZ1bCB3aGVuIG11bHRpcGxlIHJvdXRlcyB3b3VsZCBiZW5lZml0IGZyb20gdXNpbmcgdGhl
IHNhbWUgdmlldwotICAgICAgYmVjYXVzZSBpdCBkb2Vzbid0IHJlcXVpcmUgYSBjdXN0b20gYHJl
bmRlclRlbXBsYXRlYCBtZXRob2QuIEZvciBleGFtcGxlLAotICAgICAgdGhlIGZvbGxvd2luZyBy
b3V0ZXMgd2lsbCBhbGwgcmVuZGVyIHVzaW5nIHRoZSBgQXBwLlBvc3RzTGlzdFZpZXdgIHZpZXc6
Ci0gICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgdmFyIFBvc3RzTGlzdCA9IEVtYmVyLlJvdXRl
LmV4dGVuZCh7Ci0gICAgICAgIHZpZXdOYW1lOiAncG9zdHNMaXN0JwotICAgICAgfSk7Ci0gICAg
ICAgQXBwLlBvc3RzSW5kZXhSb3V0ZSA9IFBvc3RzTGlzdC5leHRlbmQoKTsKLSAgICAgIEFwcC5Q
b3N0c0FyY2hpdmVkUm91dGUgPSBQb3N0c0xpc3QuZXh0ZW5kKCk7Ci0gICAgICBgYGAKLSAgICAg
ICBAcHJvcGVydHkgdmlld05hbWUKLSAgICAgIEB0eXBlIFN0cmluZwotICAgICAgQGRlZmF1bHQg
bnVsbAotICAgICAgQHNpbmNlIDEuNC4wCi0gICAgICBAcHVibGljCi0gICAgKi8KLSAgICB2aWV3
TmFtZTogbnVsbCwKLQotICAgIC8qKgotICAgICAgVGhlIG5hbWUgb2YgdGhlIHRlbXBsYXRlIHRv
IHVzZSBieSBkZWZhdWx0IHdoZW4gcmVuZGVyaW5nIHRoaXMgcm91dGVzCi0gICAgICB0ZW1wbGF0
ZS4KLSAgICAgICBUaGlzIGlzIHNpbWlsYXIgd2l0aCBgdmlld05hbWVgLCBidXQgaXMgdXNlZnVs
IHdoZW4geW91IGp1c3Qgd2FudCBhIGN1c3RvbQotICAgICAgdGVtcGxhdGUgd2l0aG91dCBhIHZp
ZXcuCi0gICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgdmFyIFBvc3RzTGlzdCA9IEVtYmVyLlJv
dXRlLmV4dGVuZCh7Ci0gICAgICAgIHRlbXBsYXRlTmFtZTogJ3Bvc3RzL2xpc3QnCi0gICAgICB9
KTsKLSAgICAgICBBcHAuUG9zdHNJbmRleFJvdXRlID0gUG9zdHNMaXN0LmV4dGVuZCgpOwotICAg
ICAgQXBwLlBvc3RzQXJjaGl2ZWRSb3V0ZSA9IFBvc3RzTGlzdC5leHRlbmQoKTsKLSAgICAgIGBg
YAotICAgICAgIEBwcm9wZXJ0eSB0ZW1wbGF0ZU5hbWUKLSAgICAgIEB0eXBlIFN0cmluZwotICAg
ICAgQGRlZmF1bHQgbnVsbAotICAgICAgQHNpbmNlIDEuNC4wCi0gICAgICBAcHVibGljCi0gICAg
Ki8KLSAgICB0ZW1wbGF0ZU5hbWU6IG51bGwsCi0KLSAgICAvKioKLSAgICAgIFRoZSBuYW1lIG9m
IHRoZSBjb250cm9sbGVyIHRvIGFzc29jaWF0ZSB3aXRoIHRoaXMgcm91dGUuCi0gICAgICAgQnkg
ZGVmYXVsdCwgRW1iZXIgd2lsbCBsb29rdXAgYSByb3V0ZSdzIGNvbnRyb2xsZXIgdGhhdCBtYXRj
aGVzIHRoZSBuYW1lCi0gICAgICBvZiB0aGUgcm91dGUgKGkuZS4gYEFwcC5Qb3N0Q29udHJvbGxl
cmAgZm9yIGBBcHAuUG9zdFJvdXRlYCkuIEhvd2V2ZXIsCi0gICAgICBpZiB5b3Ugd291bGQgbGlr
ZSB0byBkZWZpbmUgYSBzcGVjaWZpYyBjb250cm9sbGVyIHRvIHVzZSwgeW91IGNhbiBkbyBzbwot
ICAgICAgdXNpbmcgdGhpcyBwcm9wZXJ0eS4KLSAgICAgICBUaGlzIGlzIHVzZWZ1bCBpbiBtYW55
IHdheXMsIGFzIHRoZSBjb250cm9sbGVyIHNwZWNpZmllZCB3aWxsIGJlOgotICAgICAgICogcGFz
c2VkIHRvIHRoZSBgc2V0dXBDb250cm9sbGVyYCBtZXRob2QuCi0gICAgICAqIHVzZWQgYXMgdGhl
IGNvbnRyb2xsZXIgZm9yIHRoZSB2aWV3IGJlaW5nIHJlbmRlcmVkIGJ5IHRoZSByb3V0ZS4KLSAg
ICAgICogcmV0dXJuZWQgZnJvbSBhIGNhbGwgdG8gYGNvbnRyb2xsZXJGb3JgIGZvciB0aGUgcm91
dGUuCi0gICAgICAgQHByb3BlcnR5IGNvbnRyb2xsZXJOYW1lCi0gICAgICBAdHlwZSBTdHJpbmcK
LSAgICAgIEBkZWZhdWx0IG51bGwKLSAgICAgIEBzaW5jZSAxLjQuMAotICAgICAgQHB1YmxpYwot
ICAgICovCi0gICAgY29udHJvbGxlck5hbWU6IG51bGwsCi0KLSAgICAvKioKLSAgICAgIFRoZSBg
d2lsbFRyYW5zaXRpb25gIGFjdGlvbiBpcyBmaXJlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGFueQot
ICAgICAgYXR0ZW1wdGVkIHRyYW5zaXRpb24gd2l0aCBhIGBUcmFuc2l0aW9uYCBvYmplY3QgYXMg
dGhlIHNvbGUKLSAgICAgIGFyZ3VtZW50LiBUaGlzIGFjdGlvbiBjYW4gYmUgdXNlZCBmb3IgYWJv
cnRpbmcsIHJlZGlyZWN0aW5nLAotICAgICAgb3IgZGVjb3JhdGluZyB0aGUgdHJhbnNpdGlvbiBm
cm9tIHRoZSBjdXJyZW50bHkgYWN0aXZlIHJvdXRlcy4KLSAgICAgICBBIGdvb2QgZXhhbXBsZSBp
cyBwcmV2ZW50aW5nIG5hdmlnYXRpb24gd2hlbiBhIGZvcm0gaXMKLSAgICAgIGhhbGYtZmlsbGVk
IG91dDoKLSAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICBBcHAuQ29udGFjdEZvcm1Sb3V0ZSA9
IEVtYmVyLlJvdXRlLmV4dGVuZCh7Ci0gICAgICAgIGFjdGlvbnM6IHsKLSAgICAgICAgICB3aWxs
VHJhbnNpdGlvbjogZnVuY3Rpb24odHJhbnNpdGlvbikgewotICAgICAgICAgICAgaWYgKHRoaXMu
Y29udHJvbGxlci5nZXQoJ3VzZXJIYXNFbnRlcmVkRGF0YScpKSB7Ci0gICAgICAgICAgICAgIHRo
aXMuY29udHJvbGxlci5kaXNwbGF5TmF2aWdhdGlvbkNvbmZpcm0oKTsKLSAgICAgICAgICAgICAg
dHJhbnNpdGlvbi5hYm9ydCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgICAgfSk7Ci0gICAgICBgYGAKLSAgICAgICBZb3UgY2FuIGFsc28gcmVkaXJlY3QgZWxz
ZXdoZXJlIGJ5IGNhbGxpbmcKLSAgICAgIGB0aGlzLnRyYW5zaXRpb25UbygnZWxzZXdoZXJlJylg
IGZyb20gd2l0aGluIGB3aWxsVHJhbnNpdGlvbmAuCi0gICAgICBOb3RlIHRoYXQgYHdpbGxUcmFu
c2l0aW9uYCB3aWxsIG5vdCBiZSBmaXJlZCBmb3IgdGhlCi0gICAgICByZWRpcmVjdGluZyBgdHJh
bnNpdGlvblRvYCwgc2luY2UgYHdpbGxUcmFuc2l0aW9uYCBkb2Vzbid0Ci0gICAgICBmaXJlIHdo
ZW4gdGhlcmUgaXMgYWxyZWFkeSBhIHRyYW5zaXRpb24gdW5kZXJ3YXkuIElmIHlvdSB3YW50Ci0g
ICAgICBzdWJzZXF1ZW50IGB3aWxsVHJhbnNpdGlvbmAgYWN0aW9ucyB0byBmaXJlIGZvciB0aGUg
cmVkaXJlY3RpbmcKLSAgICAgIHRyYW5zaXRpb24sIHlvdSBtdXN0IGZpcnN0IGV4cGxpY2l0bHkg
Y2FsbAotICAgICAgYHRyYW5zaXRpb24uYWJvcnQoKWAuCi0gICAgICAgVG8gYWxsb3cgdGhlIGB3
aWxsVHJhbnNpdGlvbmAgZXZlbnQgdG8gY29udGludWUgYnViYmxpbmcgdG8gdGhlIHBhcmVudAot
ICAgICAgcm91dGUsIHVzZSBgcmV0dXJuIHRydWU7YC4gV2hlbiB0aGUgYHdpbGxUcmFuc2l0aW9u
YCBtZXRob2QgaGFzIGEKLSAgICAgIHJldHVybiB2YWx1ZSBvZiBgdHJ1ZWAgdGhlbiB0aGUgcGFy
ZW50IHJvdXRlJ3MgYHdpbGxUcmFuc2l0aW9uYCBtZXRob2QKLSAgICAgIHdpbGwgYmUgZmlyZWQs
IGVuYWJsaW5nICJidWJibGluZyIgYmVoYXZpb3IgZm9yIHRoZSBldmVudC4KLSAgICAgICBAZXZl
bnQgd2lsbFRyYW5zaXRpb24KLSAgICAgIEBwYXJhbSB7VHJhbnNpdGlvbn0gdHJhbnNpdGlvbgot
ICAgICAgQHB1YmxpYwotICAgICovCi0KLSAgICAvKioKLSAgICAgIFRoZSBgZGlkVHJhbnNpdGlv
bmAgYWN0aW9uIGlzIGZpcmVkIGFmdGVyIGEgdHJhbnNpdGlvbiBoYXMKLSAgICAgIHN1Y2Nlc3Nm
dWxseSBiZWVuIGNvbXBsZXRlZC4gVGhpcyBvY2N1cnMgYWZ0ZXIgdGhlIG5vcm1hbCBtb2RlbAot
ICAgICAgaG9va3MgKGBiZWZvcmVNb2RlbGAsIGBtb2RlbGAsIGBhZnRlck1vZGVsYCwgYHNldHVw
Q29udHJvbGxlcmApCi0gICAgICBoYXZlIHJlc29sdmVkLiBUaGUgYGRpZFRyYW5zaXRpb25gIGFj
dGlvbiBoYXMgbm8gYXJndW1lbnRzLAotICAgICAgaG93ZXZlciwgaXQgY2FuIGJlIHVzZWZ1bCBm
b3IgdHJhY2tpbmcgcGFnZSB2aWV3cyBvciByZXNldHRpbmcKLSAgICAgIHN0YXRlIG9uIHRoZSBj
b250cm9sbGVyLgotICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgIEFwcC5Mb2dpblJvdXRlID0g
RW1iZXIuUm91dGUuZXh0ZW5kKHsKLSAgICAgICAgYWN0aW9uczogewotICAgICAgICAgIGRpZFRy
YW5zaXRpb246IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyLmdldCgn
ZXJyb3JzLmJhc2UnKS5jbGVhcigpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7IC8vIEJ1YmJs
ZSB0aGUgZGlkVHJhbnNpdGlvbiBldmVudAotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAg
fSk7Ci0gICAgICBgYGAKLSAgICAgICBAZXZlbnQgZGlkVHJhbnNpdGlvbgotICAgICAgQHNpbmNl
IDEuMi4wCi0gICAgICBAcHVibGljCi0gICAgKi8KLQotICAgIC8qKgotICAgICAgVGhlIGBsb2Fk
aW5nYCBhY3Rpb24gaXMgZmlyZWQgb24gdGhlIHJvdXRlIHdoZW4gYSByb3V0ZSdzIGBtb2RlbGAK
LSAgICAgIGhvb2sgcmV0dXJucyBhIHByb21pc2UgdGhhdCBpcyBub3QgYWxyZWFkeSByZXNvbHZl
ZC4gVGhlIGN1cnJlbnQKLSAgICAgIGBUcmFuc2l0aW9uYCBvYmplY3QgaXMgdGhlIGZpcnN0IHBh
cmFtZXRlciBhbmQgdGhlIHJvdXRlIHRoYXQKLSAgICAgIHRyaWdnZXJlZCB0aGUgbG9hZGluZyBl
dmVudCBpcyB0aGUgc2Vjb25kIHBhcmFtZXRlci4KLSAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAg
ICBBcHAuQXBwbGljYXRpb25Sb3V0ZSA9IEVtYmVyLlJvdXRlLmV4dGVuZCh7Ci0gICAgICAgIGFj
dGlvbnM6IHsKLSAgICAgICAgICBsb2FkaW5nOiBmdW5jdGlvbih0cmFuc2l0aW9uLCByb3V0ZSkg
ewotICAgICAgICAgICAgbGV0IGNvbnRyb2xsZXIgPSB0aGlzLmNvbnRyb2xsZXJGb3IoJ2Zvbycp
OwotICAgICAgICAgICAgY29udHJvbGxlci5zZXQoJ2N1cnJlbnRseUxvYWRpbmcnLCB0cnVlKTsK
LSAgICAgICAgICAgICB0cmFuc2l0aW9uLmZpbmFsbHkoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAg
ICAgIGNvbnRyb2xsZXIuc2V0KCdjdXJyZW50bHlMb2FkaW5nJywgZmFsc2UpOwotICAgICAgICAg
ICAgfSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9KTsKLSAgICAgIGBgYAotICAg
ICAgIEBldmVudCBsb2FkaW5nCi0gICAgICBAcGFyYW0ge1RyYW5zaXRpb259IHRyYW5zaXRpb24K
LSAgICAgIEBwYXJhbSB7RW1iZXIuUm91dGV9IHJvdXRlIFRoZSByb3V0ZSB0aGF0IHRyaWdnZXJl
ZCB0aGUgbG9hZGluZyBldmVudAotICAgICAgQHNpbmNlIDEuMi4wCi0gICAgICBAcHVibGljCi0g
ICAgKi8KLQotICAgIC8qKgotICAgICAgV2hlbiBhdHRlbXB0aW5nIHRvIHRyYW5zaXRpb24gaW50
byBhIHJvdXRlLCBhbnkgb2YgdGhlIGhvb2tzCi0gICAgICBtYXkgcmV0dXJuIGEgcHJvbWlzZSB0
aGF0IHJlamVjdHMsIGF0IHdoaWNoIHBvaW50IGFuIGBlcnJvcmAKLSAgICAgIGFjdGlvbiB3aWxs
IGJlIGZpcmVkIG9uIHRoZSBwYXJ0aWFsbHktZW50ZXJlZCByb3V0ZXMsIGFsbG93aW5nCi0gICAg
ICBmb3IgcGVyLXJvdXRlIGVycm9yIGhhbmRsaW5nIGxvZ2ljLCBvciBzaGFyZWQgZXJyb3IgaGFu
ZGxpbmcKLSAgICAgIGxvZ2ljIGRlZmluZWQgb24gYSBwYXJlbnQgcm91dGUuCi0gICAgICAgSGVy
ZSBpcyBhbiBleGFtcGxlIG9mIGFuIGVycm9yIGhhbmRsZXIgdGhhdCB3aWxsIGJlIGludm9rZWQK
LSAgICAgIGZvciByZWplY3RlZCBwcm9taXNlcyBmcm9tIHRoZSB2YXJpb3VzIGhvb2tzIG9uIHRo
ZSByb3V0ZSwKLSAgICAgIGFzIHdlbGwgYXMgYW55IHVuaGFuZGxlZCBlcnJvcnMgZnJvbSBjaGls
ZCByb3V0ZXM6Ci0gICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgQXBwLkFkbWluUm91dGUgPSBF
bWJlci5Sb3V0ZS5leHRlbmQoewotICAgICAgICBiZWZvcmVNb2RlbDogZnVuY3Rpb24oKSB7Ci0g
ICAgICAgICAgcmV0dXJuIEVtYmVyLlJTVlAucmVqZWN0KCdiYWQgdGhpbmdzIScpOwotICAgICAg
ICB9LAotICAgICAgICAgYWN0aW9uczogewotICAgICAgICAgIGVycm9yOiBmdW5jdGlvbihlcnJv
ciwgdHJhbnNpdGlvbikgewotICAgICAgICAgICAgLy8gQXNzdW1pbmcgd2UgZ290IGhlcmUgZHVl
IHRvIHRoZSBlcnJvciBpbiBgYmVmb3JlTW9kZWxgLAotICAgICAgICAgICAgLy8gd2UgY2FuIGV4
cGVjdCB0aGF0IGVycm9yID09PSAiYmFkIHRoaW5ncyEiLAotICAgICAgICAgICAgLy8gYnV0IGEg
cHJvbWlzZSBtb2RlbCByZWplY3Rpbmcgd291bGQgYWxzbwotICAgICAgICAgICAgLy8gY2FsbCB0
aGlzIGhvb2ssIGFzIHdvdWxkIGFueSBlcnJvcnMgZW5jb3VudGVyZWQKLSAgICAgICAgICAgIC8v
IGluIGBhZnRlck1vZGVsYC4KLSAgICAgICAgICAgICAvLyBUaGUgYGVycm9yYCBob29rIGlzIGFs
c28gcHJvdmlkZWQgdGhlIGZhaWxlZAotICAgICAgICAgICAgLy8gYHRyYW5zaXRpb25gLCB3aGlj
aCBjYW4gYmUgc3RvcmVkIGFuZCBsYXRlcgotICAgICAgICAgICAgLy8gYC5yZXRyeSgpYGQgaWYg
ZGVzaXJlZC4KLSAgICAgICAgICAgICB0aGlzLnRyYW5zaXRpb25UbygnbG9naW4nKTsKLSAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0pOwotICAgICAgYGBgCi0gICAgICAgYGVycm9yYCBh
Y3Rpb25zIHRoYXQgYnViYmxlIHVwIGFsbCB0aGUgd2F5IHRvIGBBcHBsaWNhdGlvblJvdXRlYAot
ICAgICAgd2lsbCBmaXJlIGEgZGVmYXVsdCBlcnJvciBoYW5kbGVyIHRoYXQgbG9ncyB0aGUgZXJy
b3IuIFlvdSBjYW4KLSAgICAgIHNwZWNpZnkgeW91ciBvd24gZ2xvYmFsIGRlZmF1bHQgZXJyb3Ig
aGFuZGxlciBieSBvdmVycmlkaW5nIHRoZQotICAgICAgYGVycm9yYCBoYW5kbGVyIG9uIGBBcHBs
aWNhdGlvblJvdXRlYDoKLSAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICBBcHAuQXBwbGljYXRp
b25Sb3V0ZSA9IEVtYmVyLlJvdXRlLmV4dGVuZCh7Ci0gICAgICAgIGFjdGlvbnM6IHsKLSAgICAg
ICAgICBlcnJvcjogZnVuY3Rpb24oZXJyb3IsIHRyYW5zaXRpb24pIHsKLSAgICAgICAgICAgIHRo
aXMuY29udHJvbGxlckZvcignYmFubmVyJykuZGlzcGxheUVycm9yKGVycm9yLm1lc3NhZ2UpOwot
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfSk7Ci0gICAgICBgYGAKLSAgICAgIEBldmVu
dCBlcnJvcgotICAgICAgQHBhcmFtIHtFcnJvcn0gZXJyb3IKLSAgICAgIEBwYXJhbSB7VHJhbnNp
dGlvbn0gdHJhbnNpdGlvbgotICAgICAgQHB1YmxpYwotICAgICovCi0KLSAgICAvKioKLSAgICAg
IFRoaXMgZXZlbnQgaXMgdHJpZ2dlcmVkIHdoZW4gdGhlIHJvdXRlciBlbnRlcnMgdGhlIHJvdXRl
LiBJdCBpcwotICAgICAgbm90IGV4ZWN1dGVkIHdoZW4gdGhlIG1vZGVsIGZvciB0aGUgcm91dGUg
Y2hhbmdlcy4KLSAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICBBcHAuQXBwbGljYXRpb25Sb3V0
ZSA9IEVtYmVyLlJvdXRlLmV4dGVuZCh7Ci0gICAgICAgIGNvbGxlY3RBbmFseXRpY3M6IGZ1bmN0
aW9uKCl7Ci0gICAgICAgICAgY29sbGVjdEFuYWx5dGljcygpOwotICAgICAgICB9Lm9uKCdhY3Rp
dmF0ZScpCi0gICAgICB9KTsKLSAgICAgIGBgYAotICAgICAgIEBldmVudCBhY3RpdmF0ZQotICAg
ICAgQHNpbmNlIDEuOS4wCi0gICAgICBAcHVibGljCi0gICAgKi8KLQotICAgIC8qKgotICAgICAg
VGhpcyBldmVudCBpcyB0cmlnZ2VyZWQgd2hlbiB0aGUgcm91dGVyIGNvbXBsZXRlbHkgZXhpdHMg
dGhpcwotICAgICAgcm91dGUuIEl0IGlzIG5vdCBleGVjdXRlZCB3aGVuIHRoZSBtb2RlbCBmb3Ig
dGhlIHJvdXRlIGNoYW5nZXMuCi0gICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgQXBwLkluZGV4
Um91dGUgPSBFbWJlci5Sb3V0ZS5leHRlbmQoewotICAgICAgICB0cmFja1BhZ2VMZWF2ZUFuYWx5
dGljczogZnVuY3Rpb24oKXsKLSAgICAgICAgICB0cmFja1BhZ2VMZWF2ZUFuYWx5dGljcygpOwot
ICAgICAgICB9Lm9uKCdkZWFjdGl2YXRlJykKLSAgICAgIH0pOwotICAgICAgYGBgCi0gICAgICAg
QGV2ZW50IGRlYWN0aXZhdGUKLSAgICAgIEBzaW5jZSAxLjkuMAotICAgICAgQHB1YmxpYwotICAg
ICovCi0KLSAgICAvKioKLSAgICAgIFRoZSBjb250cm9sbGVyIGFzc29jaWF0ZWQgd2l0aCB0aGlz
IHJvdXRlLgotICAgICAgIEV4YW1wbGUKLSAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICBBcHAu
Rm9ybVJvdXRlID0gRW1iZXIuUm91dGUuZXh0ZW5kKHsKLSAgICAgICAgYWN0aW9uczogewotICAg
ICAgICAgIHdpbGxUcmFuc2l0aW9uOiBmdW5jdGlvbih0cmFuc2l0aW9uKSB7Ci0gICAgICAgICAg
ICBpZiAodGhpcy5jb250cm9sbGVyLmdldCgndXNlckhhc0VudGVyZWREYXRhJykgJiYKLSAgICAg
ICAgICAgICAgICAhY29uZmlybSgnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGFiYW5kb24gcHJv
Z3Jlc3M/JykpIHsKLSAgICAgICAgICAgICAgdHJhbnNpdGlvbi5hYm9ydCgpOwotICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgLy8gQnViYmxlIHRoZSBgd2lsbFRyYW5zaXRpb25g
IGFjdGlvbiBzbyB0aGF0Ci0gICAgICAgICAgICAgIC8vIHBhcmVudCByb3V0ZXMgY2FuIGRlY2lk
ZSB3aGV0aGVyIG9yIG5vdCB0byBhYm9ydC4KLSAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9KTsKLSAgICAgIGBg
YAotICAgICAgIEBwcm9wZXJ0eSBjb250cm9sbGVyCi0gICAgICBAdHlwZSBFbWJlci5Db250cm9s
bGVyCi0gICAgICBAc2luY2UgMS42LjAKLSAgICAgIEBwdWJsaWMKLSAgICAqLwotCi0gICAgYWN0
aW9uczogewotCi0gICAgICBxdWVyeVBhcmFtc0RpZENoYW5nZTogZnVuY3Rpb24gKGNoYW5nZWQs
IHRvdGFsUHJlc2VudCwgcmVtb3ZlZCkgewotICAgICAgICB2YXIgcXBNYXAgPSBfZW1iZXJNZXRh
bFByb3BlcnR5X2dldC5nZXQodGhpcywgJ19xcCcpLm1hcDsKLQotICAgICAgICB2YXIgdG90YWxD
aGFuZ2VkID0gT2JqZWN0LmtleXMoY2hhbmdlZCkuY29uY2F0KE9iamVjdC5rZXlzKHJlbW92ZWQp
KTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHRvdGFsQ2hhbmdlZC5sZW5ndGg7IGkg
PCBsZW47ICsraSkgewotICAgICAgICAgIHZhciBxcCA9IHFwTWFwW3RvdGFsQ2hhbmdlZFtpXV07
Ci0gICAgICAgICAgaWYgKHFwICYmIF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0aGlzLl9v
cHRpb25zRm9yUXVlcnlQYXJhbShxcCksICdyZWZyZXNoTW9kZWwnKSAmJiB0aGlzLnJvdXRlci5j
dXJyZW50U3RhdGUpIHsKLSAgICAgICAgICAgIHRoaXMucmVmcmVzaCgpOwotICAgICAgICAgIH0K
LSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfSwKLQotICAgICAgZmlu
YWxpemVRdWVyeVBhcmFtQ2hhbmdlOiBmdW5jdGlvbiAocGFyYW1zLCBmaW5hbFBhcmFtcywgdHJh
bnNpdGlvbikgewotICAgICAgICBpZiAodGhpcy5yb3V0ZU5hbWUgIT09ICdhcHBsaWNhdGlvbicp
IHsKLSAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFRyYW5z
aXRpb24gb2JqZWN0IGlzIGFic2VudCBmb3IgaW50ZXJtZWRpYXRlIHRyYW5zaXRpb25zLgotICAg
ICAgICBpZiAoIXRyYW5zaXRpb24pIHsKLSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQot
ICAgICAgICB2YXIgaGFuZGxlckluZm9zID0gdHJhbnNpdGlvbi5zdGF0ZS5oYW5kbGVySW5mb3M7
Ci0gICAgICAgIHZhciByb3V0ZXIgPSB0aGlzLnJvdXRlcjsKLSAgICAgICAgdmFyIHFwTWV0YSA9
IHJvdXRlci5fcXVlcnlQYXJhbXNGb3IoaGFuZGxlckluZm9zW2hhbmRsZXJJbmZvcy5sZW5ndGgg
LSAxXS5uYW1lKTsKLSAgICAgICAgdmFyIGNoYW5nZXMgPSByb3V0ZXIuX3FwVXBkYXRlczsKLSAg
ICAgICAgdmFyIHJlcGxhY2VVcmw7Ci0KLSAgICAgICAgX2VtYmVyUm91dGluZ1V0aWxzLnN0YXNo
UGFyYW1OYW1lcyhyb3V0ZXIsIGhhbmRsZXJJbmZvcyk7Ci0KLSAgICAgICAgZm9yICh2YXIgaSA9
IDAsIGxlbiA9IHFwTWV0YS5xcHMubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHsKLSAgICAgICAgICB2
YXIgcXAgPSBxcE1ldGEucXBzW2ldOwotICAgICAgICAgIHZhciByb3V0ZSA9IHFwLnJvdXRlOwot
ICAgICAgICAgIHZhciBjb250cm9sbGVyID0gcm91dGUuY29udHJvbGxlcjsKLSAgICAgICAgICB2
YXIgcHJlc2VudEtleSA9IHFwLnVybEtleSBpbiBwYXJhbXMgJiYgcXAudXJsS2V5OwotCi0gICAg
ICAgICAgLy8gRG8gYSByZXZlcnNlIGxvb2t1cCB0byBzZWUgaWYgdGhlIGNoYW5nZWQgcXVlcnkK
LSAgICAgICAgICAvLyBwYXJhbSBVUkwga2V5IGNvcnJlc3BvbmRzIHRvIGEgUVAgcHJvcGVydHkg
b24KLSAgICAgICAgICAvLyB0aGlzIGNvbnRyb2xsZXIuCi0gICAgICAgICAgdmFyIHZhbHVlLCBz
dmFsdWU7Ci0gICAgICAgICAgaWYgKGNoYW5nZXMgJiYgcXAudXJsS2V5IGluIGNoYW5nZXMpIHsK
LSAgICAgICAgICAgIC8vIFZhbHVlIHVwZGF0ZWQgaW4vYmVmb3JlIHNldHVwQ29udHJvbGxlcgot
ICAgICAgICAgICAgdmFsdWUgPSBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQoY29udHJvbGxl
ciwgcXAucHJvcCk7Ci0gICAgICAgICAgICBzdmFsdWUgPSByb3V0ZS5zZXJpYWxpemVRdWVyeVBh
cmFtKHZhbHVlLCBxcC51cmxLZXksIHFwLnR5cGUpOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBpZiAocHJlc2VudEtleSkgewotICAgICAgICAgICAgICBzdmFsdWUgPSBwYXJhbXNb
cHJlc2VudEtleV07Ci0gICAgICAgICAgICAgIHZhbHVlID0gcm91dGUuZGVzZXJpYWxpemVRdWVy
eVBhcmFtKHN2YWx1ZSwgcXAudXJsS2V5LCBxcC50eXBlKTsKLSAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgIC8vIE5vIFFQIHByb3ZpZGVkOyB1c2UgZGVmYXVsdCB2YWx1ZS4KLSAg
ICAgICAgICAgICAgc3ZhbHVlID0gcXAuc2VyaWFsaXplZERlZmF1bHRWYWx1ZTsKLSAgICAgICAg
ICAgICAgdmFsdWUgPSBjb3B5RGVmYXVsdFZhbHVlKHFwLmRlZmF1bHRWYWx1ZSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgY29udHJvbGxlci5fcXBEZWxlZ2F0ZSA9
IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldChyb3V0ZSwgJ19xcC5zdGF0ZXMuaW5hY3RpdmUn
KTsKLQotICAgICAgICAgIHZhciB0aGlzUXVlcnlQYXJhbUNoYW5nZWQgPSBzdmFsdWUgIT09IHFw
LnNlcmlhbGl6ZWRWYWx1ZTsKLSAgICAgICAgICBpZiAodGhpc1F1ZXJ5UGFyYW1DaGFuZ2VkKSB7
Ci0gICAgICAgICAgICBpZiAodHJhbnNpdGlvbi5xdWVyeVBhcmFtc09ubHkgJiYgcmVwbGFjZVVy
bCAhPT0gZmFsc2UpIHsKLSAgICAgICAgICAgICAgdmFyIG9wdGlvbnMgPSByb3V0ZS5fb3B0aW9u
c0ZvclF1ZXJ5UGFyYW0ocXApOwotICAgICAgICAgICAgICB2YXIgcmVwbGFjZUNvbmZpZ1ZhbHVl
ID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KG9wdGlvbnMsICdyZXBsYWNlJyk7Ci0gICAg
ICAgICAgICAgIGlmIChyZXBsYWNlQ29uZmlnVmFsdWUpIHsKLSAgICAgICAgICAgICAgICByZXBs
YWNlVXJsID0gdHJ1ZTsKLSAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXBsYWNlQ29uZmlnVmFs
dWUgPT09IGZhbHNlKSB7Ci0gICAgICAgICAgICAgICAgLy8gRXhwbGljaXQgcHVzaFN0YXRlIHdp
bnMgb3ZlciBhbnkgb3RoZXIgcmVwbGFjZVN0YXRlcy4KLSAgICAgICAgICAgICAgICByZXBsYWNl
VXJsID0gZmFsc2U7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgX2VtYmVyTWV0YWxQcm9wZXJ0eV9zZXQuc2V0KGNvbnRyb2xsZXIsIHFwLnByb3AsIHZhbHVl
KTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICAvLyBTdGFzaCBjdXJyZW50IHNlcmlhbGl6ZWQg
dmFsdWUgb2YgY29udHJvbGxlci4KLSAgICAgICAgICBxcC5zZXJpYWxpemVkVmFsdWUgPSBzdmFs
dWU7Ci0KLSAgICAgICAgICB2YXIgdGhpc1F1ZXJ5UGFyYW1IYXNEZWZhdWx0VmFsdWUgPSBxcC5z
ZXJpYWxpemVkRGVmYXVsdFZhbHVlID09PSBzdmFsdWU7Ci0gICAgICAgICAgaWYgKCF0aGlzUXVl
cnlQYXJhbUhhc0RlZmF1bHRWYWx1ZSkgewotICAgICAgICAgICAgZmluYWxQYXJhbXMucHVzaCh7
Ci0gICAgICAgICAgICAgIHZhbHVlOiBzdmFsdWUsCi0gICAgICAgICAgICAgIHZpc2libGU6IHRy
dWUsCi0gICAgICAgICAgICAgIGtleTogcHJlc2VudEtleSB8fCBxcC51cmxLZXkKLSAgICAgICAg
ICAgIH0pOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChyZXBsYWNlVXJs
KSB7Ci0gICAgICAgICAgdHJhbnNpdGlvbi5tZXRob2QoJ3JlcGxhY2UnKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIHFwTWV0YS5xcHMuZm9yRWFjaChmdW5jdGlvbiAocXApIHsKLSAgICAgICAgICB2
YXIgcm91dGVRcE1ldGEgPSBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQocXAucm91dGUsICdf
cXAnKTsKLSAgICAgICAgICB2YXIgZmluYWxpemVkQ29udHJvbGxlciA9IHFwLnJvdXRlLmNvbnRy
b2xsZXI7Ci0gICAgICAgICAgZmluYWxpemVkQ29udHJvbGxlci5fcXBEZWxlZ2F0ZSA9IF9lbWJl
ck1ldGFsUHJvcGVydHlfZ2V0LmdldChyb3V0ZVFwTWV0YSwgJ3N0YXRlcy5hY3RpdmUnKTsKLSAg
ICAgICAgfSk7Ci0KLSAgICAgICAgcm91dGVyLl9xcFVwZGF0ZXMgPSBudWxsOwotICAgICAgfQot
ICAgIH0sCi0KLSAgICAvKioKLSAgICAgIFRoaXMgaG9vayBpcyBleGVjdXRlZCB3aGVuIHRoZSBy
b3V0ZXIgY29tcGxldGVseSBleGl0cyB0aGlzIHJvdXRlLiBJdCBpcwotICAgICAgbm90IGV4ZWN1
dGVkIHdoZW4gdGhlIG1vZGVsIGZvciB0aGUgcm91dGUgY2hhbmdlcy4KLSAgICAgICBAbWV0aG9k
IGRlYWN0aXZhdGUKLSAgICAgIEBwdWJsaWMKLSAgICAqLwotICAgIGRlYWN0aXZhdGU6IEssCi0K
LSAgICAvKioKLSAgICAgIFRoaXMgaG9vayBpcyBleGVjdXRlZCB3aGVuIHRoZSByb3V0ZXIgZW50
ZXJzIHRoZSByb3V0ZS4gSXQgaXMgbm90IGV4ZWN1dGVkCi0gICAgICB3aGVuIHRoZSBtb2RlbCBm
b3IgdGhlIHJvdXRlIGNoYW5nZXMuCi0gICAgICAgQG1ldGhvZCBhY3RpdmF0ZQotICAgICAgQHB1
YmxpYwotICAgICovCi0gICAgYWN0aXZhdGU6IEssCi0KLSAgICAvKioKLSAgICAgIFRyYW5zaXRp
b24gdGhlIGFwcGxpY2F0aW9uIGludG8gYW5vdGhlciByb3V0ZS4gVGhlIHJvdXRlIG1heQotICAg
ICAgYmUgZWl0aGVyIGEgc2luZ2xlIHJvdXRlIG9yIHJvdXRlIHBhdGg6Ci0gICAgICAgYGBgamF2
YXNjcmlwdAotICAgICAgdGhpcy50cmFuc2l0aW9uVG8oJ2Jsb2dQb3N0cycpOwotICAgICAgdGhp
cy50cmFuc2l0aW9uVG8oJ2Jsb2dQb3N0cy5yZWNlbnRFbnRyaWVzJyk7Ci0gICAgICBgYGAKLSAg
ICAgICBPcHRpb25hbGx5IHN1cHBseSBhIG1vZGVsIGZvciB0aGUgcm91dGUgaW4gcXVlc3Rpb24u
IFRoZSBtb2RlbAotICAgICAgd2lsbCBiZSBzZXJpYWxpemVkIGludG8gdGhlIFVSTCB1c2luZyB0
aGUgYHNlcmlhbGl6ZWAgaG9vayBvZgotICAgICAgdGhlIHJvdXRlOgotICAgICAgIGBgYGphdmFz
Y3JpcHQKLSAgICAgIHRoaXMudHJhbnNpdGlvblRvKCdibG9nUG9zdCcsIGFQb3N0KTsKLSAgICAg
IGBgYAotICAgICAgIElmIGEgbGl0ZXJhbCBpcyBwYXNzZWQgKHN1Y2ggYXMgYSBudW1iZXIgb3Ig
YSBzdHJpbmcpLCBpdCB3aWxsCi0gICAgICBiZSB0cmVhdGVkIGFzIGFuIGlkZW50aWZpZXIgaW5z
dGVhZC4gSW4gdGhpcyBjYXNlLCB0aGUgYG1vZGVsYAotICAgICAgaG9vayBvZiB0aGUgcm91dGUg
d2lsbCBiZSB0cmlnZ2VyZWQ6Ci0gICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgdGhpcy50cmFu
c2l0aW9uVG8oJ2Jsb2dQb3N0JywgMSk7Ci0gICAgICBgYGAKLSAgICAgICBNdWx0aXBsZSBtb2Rl
bHMgd2lsbCBiZSBhcHBsaWVkIGxhc3QgdG8gZmlyc3QgcmVjdXJzaXZlbHkgdXAgdGhlCi0gICAg
ICByb3V0ZSB0cmVlLgotICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgIEFwcC5Sb3V0ZXIubWFw
KGZ1bmN0aW9uKCkgewotICAgICAgICB0aGlzLnJvdXRlKCdibG9nUG9zdCcsIHsgcGF0aDonOmJs
b2dQb3N0SWQnIH0sIGZ1bmN0aW9uKCkgewotICAgICAgICAgIHRoaXMucm91dGUoJ2Jsb2dDb21t
ZW50JywgeyBwYXRoOiAnOmJsb2dDb21tZW50SWQnLCByZXNldE5hbWVzcGFjZTogdHJ1ZSB9KTsK
LSAgICAgICAgfSk7Ci0gICAgICB9KTsKLSAgICAgICB0aGlzLnRyYW5zaXRpb25UbygnYmxvZ0Nv
bW1lbnQnLCBhUG9zdCwgYUNvbW1lbnQpOwotICAgICAgdGhpcy50cmFuc2l0aW9uVG8oJ2Jsb2dD
b21tZW50JywgMSwgMTMpOwotICAgICAgYGBgCi0gICAgICAgSXQgaXMgYWxzbyBwb3NzaWJsZSB0
byBwYXNzIGEgVVJMIChhIHN0cmluZyB0aGF0IHN0YXJ0cyB3aXRoIGEKLSAgICAgIGAvYCkuIFRo
aXMgaXMgaW50ZW5kZWQgZm9yIHRlc3RpbmcgYW5kIGRlYnVnZ2luZyBwdXJwb3NlcyBhbmQKLSAg
ICAgIHNob3VsZCByYXJlbHkgYmUgdXNlZCBpbiBwcm9kdWN0aW9uIGNvZGUuCi0gICAgICAgYGBg
amF2YXNjcmlwdAotICAgICAgdGhpcy50cmFuc2l0aW9uVG8oJy8nKTsKLSAgICAgIHRoaXMudHJh
bnNpdGlvblRvKCcvYmxvZy9wb3N0LzEvY29tbWVudC8xMycpOwotICAgICAgdGhpcy50cmFuc2l0
aW9uVG8oJy9ibG9nL3Bvc3RzP3NvcnQ9dGl0bGUnKTsKLSAgICAgIGBgYAotICAgICAgIEFuIG9w
dGlvbnMgaGFzaCB3aXRoIGEgYHF1ZXJ5UGFyYW1zYCBwcm9wZXJ0eSBtYXkgYmUgcHJvdmlkZWQg
YXMKLSAgICAgIHRoZSBmaW5hbCBhcmd1bWVudCB0byBhZGQgcXVlcnkgcGFyYW1ldGVycyB0byB0
aGUgZGVzdGluYXRpb24gVVJMLgotICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgIHRoaXMudHJh
bnNpdGlvblRvKCdibG9nUG9zdCcsIDEsIHsKLSAgICAgICAgcXVlcnlQYXJhbXM6IHtzaG93Q29t
bWVudHM6ICd0cnVlJ30KLSAgICAgIH0pOwotICAgICAgIC8vIGlmIHlvdSBqdXN0IHdhbnQgdG8g
dHJhbnNpdGlvbiB0aGUgcXVlcnkgcGFyYW1ldGVycyB3aXRob3V0IGNoYW5naW5nIHRoZSByb3V0
ZQotICAgICAgdGhpcy50cmFuc2l0aW9uVG8oe3F1ZXJ5UGFyYW1zOiB7c29ydDogJ2RhdGUnfX0p
OwotICAgICAgYGBgCi0gICAgICAgU2VlIGFsc28gW3JlcGxhY2VXaXRoXSgjbWV0aG9kX3JlcGxh
Y2VXaXRoKS4KLSAgICAgICBTaW1wbGUgVHJhbnNpdGlvbiBFeGFtcGxlCi0gICAgICAgYGBgamF2
YXNjcmlwdAotICAgICAgQXBwLlJvdXRlci5tYXAoZnVuY3Rpb24oKSB7Ci0gICAgICAgIHRoaXMu
cm91dGUoJ2luZGV4Jyk7Ci0gICAgICAgIHRoaXMucm91dGUoJ3NlY3JldCcpOwotICAgICAgICB0
aGlzLnJvdXRlKCdmb3VyT2hGb3VyJywgeyBwYXRoOiAnKjonIH0pOwotICAgICAgfSk7Ci0gICAg
ICAgQXBwLkluZGV4Um91dGUgPSBFbWJlci5Sb3V0ZS5leHRlbmQoewotICAgICAgICBhY3Rpb25z
OiB7Ci0gICAgICAgICAgbW92ZVRvU2VjcmV0OiBmdW5jdGlvbihjb250ZXh0KSB7Ci0gICAgICAg
ICAgICBpZiAoYXV0aG9yaXplZCgpKSB7Ci0gICAgICAgICAgICAgIHRoaXMudHJhbnNpdGlvblRv
KCdzZWNyZXQnLCBjb250ZXh0KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
IHRoaXMudHJhbnNpdGlvblRvKCdmb3VyT2hGb3VyJyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgICB9KTsKLSAgICAgIGBgYAotICAgICAgIFRyYW5zaXRpb24g
dG8gYSBuZXN0ZWQgcm91dGUKLSAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICBBcHAuUm91dGVy
Lm1hcChmdW5jdGlvbigpIHsKLSAgICAgICAgdGhpcy5yb3V0ZSgnYXJ0aWNsZXMnLCB7IHBhdGg6
ICcvYXJ0aWNsZXMnIH0sIGZ1bmN0aW9uKCkgewotICAgICAgICAgIHRoaXMucm91dGUoJ25ldycp
OwotICAgICAgICB9KTsKLSAgICAgIH0pOwotICAgICAgIEFwcC5JbmRleFJvdXRlID0gRW1iZXIu
Um91dGUuZXh0ZW5kKHsKLSAgICAgICAgYWN0aW9uczogewotICAgICAgICAgIHRyYW5zaXRpb25U
b05ld0FydGljbGU6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgdGhpcy50cmFuc2l0aW9uVG8o
J2FydGljbGVzLm5ldycpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfSk7Ci0gICAg
ICBgYGAKLSAgICAgICBNdWx0aXBsZSBNb2RlbHMgRXhhbXBsZQotICAgICAgIGBgYGphdmFzY3Jp
cHQKLSAgICAgIEFwcC5Sb3V0ZXIubWFwKGZ1bmN0aW9uKCkgewotICAgICAgICB0aGlzLnJvdXRl
KCdpbmRleCcpOwotICAgICAgICAgdGhpcy5yb3V0ZSgnYnJlYWtmYXN0JywgeyBwYXRoOiAnOmJy
ZWFrZmFzdElkJyB9LCBmdW5jdGlvbigpIHsKLSAgICAgICAgICB0aGlzLnJvdXRlKCdjZXJlYWwn
LCB7IHBhdGg6ICc6Y2VyZWFsSWQnLCByZXNldE5hbWVzcGFjZTogdHJ1ZSB9KTsKLSAgICAgICAg
fSk7Ci0gICAgICB9KTsKLSAgICAgICBBcHAuSW5kZXhSb3V0ZSA9IEVtYmVyLlJvdXRlLmV4dGVu
ZCh7Ci0gICAgICAgIGFjdGlvbnM6IHsKLSAgICAgICAgICBtb3ZlVG9DaG9jb2xhdGVDZXJlYWw6
IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgdmFyIGNlcmVhbCA9IHsgY2VyZWFsSWQ6ICdDaG9j
b2xhdGVZdW1taW5lc3MnIH07Ci0gICAgICAgICAgICB2YXIgYnJlYWtmYXN0ID0geyBicmVha2Zh
c3RJZDogJ0NlcmVhbEFuZE1pbGsnIH07Ci0gICAgICAgICAgICAgdGhpcy50cmFuc2l0aW9uVG8o
J2NlcmVhbCcsIGJyZWFrZmFzdCwgY2VyZWFsKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICAgIH0pOwotICAgICAgYGBgCi0gICAgICAgTmVzdGVkIFJvdXRlIHdpdGggUXVlcnkgU3RyaW5n
IEV4YW1wbGUKLSAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICBBcHAuUm91dGVyLm1hcChmdW5j
dGlvbigpIHsKLSAgICAgICAgdGhpcy5yb3V0ZSgnZnJ1aXRzJywgZnVuY3Rpb24oKSB7Ci0gICAg
ICAgICAgdGhpcy5yb3V0ZSgnYXBwbGVzJyk7Ci0gICAgICAgIH0pOwotICAgICAgfSk7Ci0gICAg
ICAgQXBwLkluZGV4Um91dGUgPSBFbWJlci5Sb3V0ZS5leHRlbmQoewotICAgICAgICBhY3Rpb25z
OiB7Ci0gICAgICAgICAgdHJhbnNpdGlvblRvQXBwbGVzOiBmdW5jdGlvbigpIHsKLSAgICAgICAg
ICAgIHRoaXMudHJhbnNpdGlvblRvKCdmcnVpdHMuYXBwbGVzJywge3F1ZXJ5UGFyYW1zOiB7Y29s
b3I6ICdyZWQnfX0pOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfSk7Ci0gICAgICBg
YGAKLSAgICAgICBAbWV0aG9kIHRyYW5zaXRpb25UbwotICAgICAgQHBhcmFtIHtTdHJpbmd9IG5h
bWUgdGhlIG5hbWUgb2YgdGhlIHJvdXRlIG9yIGEgVVJMCi0gICAgICBAcGFyYW0gey4uLk9iamVj
dH0gbW9kZWxzIHRoZSBtb2RlbChzKSBvciBpZGVudGlmaWVyKHMpIHRvIGJlIHVzZWQgd2hpbGUK
LSAgICAgICAgdHJhbnNpdGlvbmluZyB0byB0aGUgcm91dGUuCi0gICAgICBAcGFyYW0ge09iamVj
dH0gW29wdGlvbnNdIG9wdGlvbmFsIGhhc2ggd2l0aCBhIHF1ZXJ5UGFyYW1zIHByb3BlcnR5Ci0g
ICAgICAgIGNvbnRhaW5pbmcgYSBtYXBwaW5nIG9mIHF1ZXJ5IHBhcmFtZXRlcnMKLSAgICAgIEBy
ZXR1cm4ge1RyYW5zaXRpb259IHRoZSB0cmFuc2l0aW9uIG9iamVjdCBhc3NvY2lhdGVkIHdpdGgg
dGhpcwotICAgICAgICBhdHRlbXB0ZWQgdHJhbnNpdGlvbgotICAgICAgQHB1YmxpYwotICAgICov
Ci0gICAgdHJhbnNpdGlvblRvOiBmdW5jdGlvbiAobmFtZSwgY29udGV4dCkgewotICAgICAgdmFy
IHJvdXRlciA9IHRoaXMucm91dGVyOwotICAgICAgcmV0dXJuIHJvdXRlci50cmFuc2l0aW9uVG8u
YXBwbHkocm91dGVyLCBhcmd1bWVudHMpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgIFBlcmZv
cm0gYSBzeW5jaHJvbm91cyB0cmFuc2l0aW9uIGludG8gYW5vdGhlciByb3V0ZSB3aXRob3V0IGF0
dGVtcHRpbmcKLSAgICAgIHRvIHJlc29sdmUgcHJvbWlzZXMsIHVwZGF0ZSB0aGUgVVJMLCBvciBh
Ym9ydCBhbnkgY3VycmVudGx5IGFjdGl2ZQotICAgICAgYXN5bmNocm9ub3VzIHRyYW5zaXRpb25z
IChpLmUuIHJlZ3VsYXIgdHJhbnNpdGlvbnMgY2F1c2VkIGJ5Ci0gICAgICBgdHJhbnNpdGlvblRv
YCBvciBVUkwgY2hhbmdlcykuCi0gICAgICAgVGhpcyBtZXRob2QgaXMgaGFuZHkgZm9yIHBlcmZv
cm1pbmcgaW50ZXJtZWRpYXRlIHRyYW5zaXRpb25zIG9uIHRoZQotICAgICAgd2F5IHRvIGEgZmlu
YWwgZGVzdGluYXRpb24gcm91dGUsIGFuZCBpcyBjYWxsZWQgaW50ZXJuYWxseSBieSB0aGUKLSAg
ICAgIGRlZmF1bHQgaW1wbGVtZW50YXRpb25zIG9mIHRoZSBgZXJyb3JgIGFuZCBgbG9hZGluZ2Ag
aGFuZGxlcnMuCi0gICAgICAgQG1ldGhvZCBpbnRlcm1lZGlhdGVUcmFuc2l0aW9uVG8KLSAgICAg
IEBwYXJhbSB7U3RyaW5nfSBuYW1lIHRoZSBuYW1lIG9mIHRoZSByb3V0ZQotICAgICAgQHBhcmFt
IHsuLi5PYmplY3R9IG1vZGVscyB0aGUgbW9kZWwocykgdG8gYmUgdXNlZCB3aGlsZSB0cmFuc2l0
aW9uaW5nCi0gICAgICB0byB0aGUgcm91dGUuCi0gICAgICBAc2luY2UgMS4yLjAKLSAgICAgIEBw
dWJsaWMKLSAgICAgKi8KLSAgICBpbnRlcm1lZGlhdGVUcmFuc2l0aW9uVG86IGZ1bmN0aW9uICgp
IHsKLSAgICAgIHZhciByb3V0ZXIgPSB0aGlzLnJvdXRlcjsKLSAgICAgIHJvdXRlci5pbnRlcm1l
ZGlhdGVUcmFuc2l0aW9uVG8uYXBwbHkocm91dGVyLCBhcmd1bWVudHMpOwotICAgIH0sCi0KLSAg
ICAvKioKLSAgICAgIFJlZnJlc2ggdGhlIG1vZGVsIG9uIHRoaXMgcm91dGUgYW5kIGFueSBjaGls
ZCByb3V0ZXMsIGZpcmluZyB0aGUKLSAgICAgIGBiZWZvcmVNb2RlbGAsIGBtb2RlbGAsIGFuZCBg
YWZ0ZXJNb2RlbGAgaG9va3MgaW4gYSBzaW1pbGFyIGZhc2hpb24KLSAgICAgIHRvIGhvdyByb3V0
ZXMgYXJlIGVudGVyZWQgd2hlbiB0cmFuc2l0aW9uaW5nIGluIGZyb20gb3RoZXIgcm91dGUuCi0g
ICAgICBUaGUgY3VycmVudCByb3V0ZSBwYXJhbXMgKGUuZy4gYGFydGljbGVfaWRgKSB3aWxsIGJl
IHBhc3NlZCBpbgotICAgICAgdG8gdGhlIHJlc3BlY3RpdmUgbW9kZWwgaG9va3MsIGFuZCBpZiBh
IGRpZmZlcmVudCBtb2RlbCBpcyByZXR1cm5lZCwKLSAgICAgIGBzZXR1cENvbnRyb2xsZXJgIGFu
ZCBhc3NvY2lhdGVkIHJvdXRlIGhvb2tzIHdpbGwgcmUtZmlyZSBhcyB3ZWxsLgotICAgICAgIEFu
IGV4YW1wbGUgdXNhZ2Ugb2YgdGhpcyBtZXRob2QgaXMgcmUtcXVlcnlpbmcgdGhlIHNlcnZlciBm
b3IgdGhlCi0gICAgICBsYXRlc3QgaW5mb3JtYXRpb24gdXNpbmcgdGhlIHNhbWUgcGFyYW1ldGVy
cyBhcyB3aGVuIHRoZSByb3V0ZQotICAgICAgd2FzIGZpcnN0IGVudGVyZWQuCi0gICAgICAgTm90
ZSB0aGF0IHRoaXMgd2lsbCBjYXVzZSBgbW9kZWxgIGhvb2tzIHRvIGZpcmUgZXZlbiBvbiByb3V0
ZXMKLSAgICAgIHRoYXQgd2VyZSBwcm92aWRlZCBhIG1vZGVsIG9iamVjdCB3aGVuIHRoZSByb3V0
ZSB3YXMgaW5pdGlhbGx5Ci0gICAgICBlbnRlcmVkLgotICAgICAgIEBtZXRob2QgcmVmcmVzaAot
ICAgICAgQHJldHVybiB7VHJhbnNpdGlvbn0gdGhlIHRyYW5zaXRpb24gb2JqZWN0IGFzc29jaWF0
ZWQgd2l0aCB0aGlzCi0gICAgICAgIGF0dGVtcHRlZCB0cmFuc2l0aW9uCi0gICAgICBAc2luY2Ug
MS40LjAKLSAgICAgIEBwdWJsaWMKLSAgICAgKi8KLSAgICByZWZyZXNoOiBmdW5jdGlvbiAoKSB7
Ci0gICAgICByZXR1cm4gdGhpcy5yb3V0ZXIucm91dGVyLnJlZnJlc2godGhpcyk7Ci0gICAgfSwK
LQotICAgIC8qKgotICAgICAgVHJhbnNpdGlvbiBpbnRvIGFub3RoZXIgcm91dGUgd2hpbGUgcmVw
bGFjaW5nIHRoZSBjdXJyZW50IFVSTCwgaWYgcG9zc2libGUuCi0gICAgICBUaGlzIHdpbGwgcmVw
bGFjZSB0aGUgY3VycmVudCBoaXN0b3J5IGVudHJ5IGluc3RlYWQgb2YgYWRkaW5nIGEgbmV3IG9u
ZS4KLSAgICAgIEJlc2lkZSB0aGF0LCBpdCBpcyBpZGVudGljYWwgdG8gYHRyYW5zaXRpb25Ub2Ag
aW4gYWxsIG90aGVyIHJlc3BlY3RzLiBTZWUKLSAgICAgICd0cmFuc2l0aW9uVG8nIGZvciBhZGRp
dGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBtdWx0aXBsZSBtb2RlbHMuCi0gICAgICAgRXhh
bXBsZQotICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgIEFwcC5Sb3V0ZXIubWFwKGZ1bmN0aW9u
KCkgewotICAgICAgICB0aGlzLnJvdXRlKCdpbmRleCcpOwotICAgICAgICB0aGlzLnJvdXRlKCdz
ZWNyZXQnKTsKLSAgICAgIH0pOwotICAgICAgIEFwcC5TZWNyZXRSb3V0ZSA9IEVtYmVyLlJvdXRl
LmV4dGVuZCh7Ci0gICAgICAgIGFmdGVyTW9kZWw6IGZ1bmN0aW9uKCkgewotICAgICAgICAgIGlm
ICghYXV0aG9yaXplZCgpKXsKLSAgICAgICAgICAgIHRoaXMucmVwbGFjZVdpdGgoJ2luZGV4Jyk7
Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9KTsKLSAgICAgIGBgYAotICAgICAgIEBt
ZXRob2QgcmVwbGFjZVdpdGgKLSAgICAgIEBwYXJhbSB7U3RyaW5nfSBuYW1lIHRoZSBuYW1lIG9m
IHRoZSByb3V0ZSBvciBhIFVSTAotICAgICAgQHBhcmFtIHsuLi5PYmplY3R9IG1vZGVscyB0aGUg
bW9kZWwocykgb3IgaWRlbnRpZmllcihzKSB0byBiZSB1c2VkIHdoaWxlCi0gICAgICAgIHRyYW5z
aXRpb25pbmcgdG8gdGhlIHJvdXRlLgotICAgICAgQHJldHVybiB7VHJhbnNpdGlvbn0gdGhlIHRy
YW5zaXRpb24gb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGlzCi0gICAgICAgIGF0dGVtcHRlZCB0
cmFuc2l0aW9uCi0gICAgICBAcHVibGljCi0gICAgKi8KLSAgICByZXBsYWNlV2l0aDogZnVuY3Rp
b24gKCkgewotICAgICAgdmFyIHJvdXRlciA9IHRoaXMucm91dGVyOwotICAgICAgcmV0dXJuIHJv
dXRlci5yZXBsYWNlV2l0aC5hcHBseShyb3V0ZXIsIGFyZ3VtZW50cyk7Ci0gICAgfSwKLQotICAg
IC8qKgotICAgICAgU2VuZHMgYW4gYWN0aW9uIHRvIHRoZSByb3V0ZXIsIHdoaWNoIHdpbGwgZGVs
ZWdhdGUgaXQgdG8gdGhlIGN1cnJlbnRseQotICAgICAgYWN0aXZlIHJvdXRlIGhpZXJhcmNoeSBw
ZXIgdGhlIGJ1YmJsaW5nIHJ1bGVzIGV4cGxhaW5lZCB1bmRlciBgYWN0aW9uc2AuCi0gICAgICAg
RXhhbXBsZQotICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgIEFwcC5Sb3V0ZXIubWFwKGZ1bmN0
aW9uKCkgewotICAgICAgICB0aGlzLnJvdXRlKCdpbmRleCcpOwotICAgICAgfSk7Ci0gICAgICAg
QXBwLkFwcGxpY2F0aW9uUm91dGUgPSBFbWJlci5Sb3V0ZS5leHRlbmQoewotICAgICAgICBhY3Rp
b25zOiB7Ci0gICAgICAgICAgdHJhY2s6IGZ1bmN0aW9uKGFyZykgewotICAgICAgICAgICAgY29u
c29sZS5sb2coYXJnLCAnd2FzIGNsaWNrZWQnKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICAgIH0pOwotICAgICAgIEFwcC5JbmRleFJvdXRlID0gRW1iZXIuUm91dGUuZXh0ZW5kKHsKLSAg
ICAgICAgYWN0aW9uczogewotICAgICAgICAgIHRyYWNrSWZEZWJ1ZzogZnVuY3Rpb24oYXJnKSB7
Ci0gICAgICAgICAgICBpZiAoZGVidWcpIHsKLSAgICAgICAgICAgICAgdGhpcy5zZW5kKCd0cmFj
aycsIGFyZyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9
KTsKLSAgICAgIGBgYAotICAgICAgIEBtZXRob2Qgc2VuZAotICAgICAgQHBhcmFtIHtTdHJpbmd9
IG5hbWUgdGhlIG5hbWUgb2YgdGhlIGFjdGlvbiB0byB0cmlnZ2VyCi0gICAgICBAcGFyYW0gey4u
Lip9IGFyZ3MKLSAgICAgIEBwdWJsaWMKLSAgICAqLwotICAgIHNlbmQ6IGZ1bmN0aW9uICgpIHsK
LSAgICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xl
biksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7Ci0gICAgICAgIGFyZ3NbX2tleV0g
PSBhcmd1bWVudHNbX2tleV07Ci0gICAgICB9Ci0KLSAgICAgIGlmICh0aGlzLnJvdXRlciAmJiB0
aGlzLnJvdXRlci5yb3V0ZXIgfHwgIV9lbWJlck1ldGFsQ29yZS5kZWZhdWx0LnRlc3RpbmcpIHsK
LSAgICAgICAgdmFyIF9yb3V0ZXI7Ci0KLSAgICAgICAgKF9yb3V0ZXIgPSB0aGlzLnJvdXRlciku
c2VuZC5hcHBseShfcm91dGVyLCBhcmdzKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHZhciBu
YW1lID0gYXJnc1swXTsKLSAgICAgICAgYXJncyA9IHNsaWNlLmNhbGwoYXJncywgMSk7Ci0gICAg
ICAgIHZhciBhY3Rpb24gPSB0aGlzLmFjdGlvbnNbbmFtZV07Ci0gICAgICAgIGlmIChhY3Rpb24p
IHsKLSAgICAgICAgICByZXR1cm4gdGhpcy5hY3Rpb25zW25hbWVdLmFwcGx5KHRoaXMsIGFyZ3Mp
OwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAgVGhpcyBob29r
IGlzIHRoZSBlbnRyeSBwb2ludCBmb3Igcm91dGVyLmpzCi0gICAgICAgQHByaXZhdGUKLSAgICAg
IEBtZXRob2Qgc2V0dXAKLSAgICAqLwotICAgIHNldHVwOiBmdW5jdGlvbiAoY29udGV4dCwgdHJh
bnNpdGlvbikgewotICAgICAgdmFyIGNvbnRyb2xsZXI7Ci0KLSAgICAgIHZhciBjb250cm9sbGVy
TmFtZSA9IHRoaXMuY29udHJvbGxlck5hbWUgfHwgdGhpcy5yb3V0ZU5hbWU7Ci0gICAgICB2YXIg
ZGVmaW5lZENvbnRyb2xsZXIgPSB0aGlzLmNvbnRyb2xsZXJGb3IoY29udHJvbGxlck5hbWUsIHRy
dWUpOwotCi0gICAgICBpZiAoIWRlZmluZWRDb250cm9sbGVyKSB7Ci0gICAgICAgIGNvbnRyb2xs
ZXIgPSB0aGlzLmdlbmVyYXRlQ29udHJvbGxlcihjb250cm9sbGVyTmFtZSwgY29udGV4dCk7Ci0g
ICAgICB9IGVsc2UgewotICAgICAgICBjb250cm9sbGVyID0gZGVmaW5lZENvbnRyb2xsZXI7Ci0g
ICAgICB9Ci0KLSAgICAgIC8vIEFzc2lnbiB0aGUgcm91dGUncyBjb250cm9sbGVyIHNvIHRoYXQg
aXQgY2FuIG1vcmUgZWFzaWx5IGJlCi0gICAgICAvLyByZWZlcmVuY2VkIGluIGFjdGlvbiBoYW5k
bGVycy4gU2lkZSBlZmZlY3RzLiBTaWRlIGVmZmVjdHMgZXZlcnl3aGVyZS4KLSAgICAgIGlmICgh
dGhpcy5jb250cm9sbGVyKSB7Ci0gICAgICAgIHZhciBwcm9wTmFtZXMgPSBfZW1iZXJNZXRhbFBy
b3BlcnR5X2dldC5nZXQodGhpcywgJ19xcC5wcm9wZXJ0eU5hbWVzJyk7Ci0gICAgICAgIGFkZFF1
ZXJ5UGFyYW1zT2JzZXJ2ZXJzKGNvbnRyb2xsZXIsIHByb3BOYW1lcyk7Ci0gICAgICAgIHRoaXMu
Y29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0gICAgICB9Ci0KLSAgICAgIHZhciBxdWVyeVBhcmFt
cyA9IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0aGlzLCAnX3FwJyk7Ci0KLSAgICAgIHZh
ciBzdGF0ZXMgPSBxdWVyeVBhcmFtcy5zdGF0ZXM7Ci0gICAgICBpZiAodHJhbnNpdGlvbikgewot
ICAgICAgICAvLyBVcGRhdGUgdGhlIG1vZGVsIGRlcCB2YWx1ZXMgdXNlZCB0byBjYWxjdWxhdGUg
Y2FjaGUga2V5cy4KLSAgICAgICAgX2VtYmVyUm91dGluZ1V0aWxzLnN0YXNoUGFyYW1OYW1lcyh0
aGlzLnJvdXRlciwgdHJhbnNpdGlvbi5zdGF0ZS5oYW5kbGVySW5mb3MpOwotCi0gICAgICAgIHZh
ciBwYXJhbXMgPSB0cmFuc2l0aW9uLnBhcmFtczsKLSAgICAgICAgdmFyIGFsbFBhcmFtcyA9IHF1
ZXJ5UGFyYW1zLnByb3BlcnR5TmFtZXM7Ci0gICAgICAgIHZhciBjYWNoZSA9IHRoaXMuX2J1Y2tl
dENhY2hlOwotCi0gICAgICAgIGFsbFBhcmFtcy5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wKSB7Ci0g
ICAgICAgICAgdmFyIGFRcCA9IHF1ZXJ5UGFyYW1zLm1hcFtwcm9wXTsKLQotICAgICAgICAgIGFR
cC52YWx1ZXMgPSBwYXJhbXM7Ci0gICAgICAgICAgdmFyIGNhY2hlS2V5ID0gX2VtYmVyUm91dGlu
Z1V0aWxzLmNhbGN1bGF0ZUNhY2hlS2V5KGFRcC5wcmVmaXgsIGFRcC5wYXJ0cywgYVFwLnZhbHVl
cyk7Ci0KLSAgICAgICAgICBpZiAoY2FjaGUpIHsKLSAgICAgICAgICAgIHZhciB2YWx1ZSA9IGNh
Y2hlLmxvb2t1cChjYWNoZUtleSwgcHJvcCwgYVFwLnVuZGVjb3JhdGVkRGVmYXVsdFZhbHVlKTsK
LSAgICAgICAgICAgIF9lbWJlck1ldGFsUHJvcGVydHlfc2V0LnNldChjb250cm9sbGVyLCBwcm9w
LCB2YWx1ZSk7Ci0gICAgICAgICAgfQotICAgICAgICB9KTsKLSAgICAgIH0KLQotICAgICAgY29u
dHJvbGxlci5fcXBEZWxlZ2F0ZSA9IHN0YXRlcy5hbGxvd092ZXJyaWRlczsKLQotICAgICAgaWYg
KHRyYW5zaXRpb24pIHsKLSAgICAgICAgdmFyIHFwVmFsdWVzID0gZ2V0UXVlcnlQYXJhbXNGb3Io
dGhpcywgdHJhbnNpdGlvbi5zdGF0ZSk7Ci0gICAgICAgIGNvbnRyb2xsZXIuc2V0UHJvcGVydGll
cyhxcFZhbHVlcyk7Ci0gICAgICB9Ci0KLSAgICAgIHRoaXMuc2V0dXBDb250cm9sbGVyKGNvbnRy
b2xsZXIsIGNvbnRleHQsIHRyYW5zaXRpb24pOwotCi0gICAgICBpZiAoIXRoaXMuX2Vudmlyb25t
ZW50IHx8IHRoaXMuX2Vudmlyb25tZW50Lm9wdGlvbnMuc2hvdWxkUmVuZGVyKSB7Ci0gICAgICAg
IHRoaXMucmVuZGVyVGVtcGxhdGUoY29udHJvbGxlciwgY29udGV4dCk7Ci0gICAgICB9Ci0gICAg
fSwKLQotICAgIC8qCi0gICAgICBDYWxsZWQgd2hlbiBhIHF1ZXJ5IHBhcmFtZXRlciBmb3IgdGhp
cyByb3V0ZSBjaGFuZ2VzLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIHJvdXRlCi0gICAgICBp
cyBjdXJyZW50bHkgcGFydCBvZiB0aGUgYWN0aXZlIHJvdXRlIGhpZXJhcmNoeS4gVGhpcyB3aWxs
IHVwZGF0ZSB0aGUgcXVlcnkgcGFyYW1ldGVyJ3MKLSAgICAgIHZhbHVlIGluIHRoZSBjYWNoZSBz
byBpZiB0aGlzIHJvdXRlIGJlY29tZXMgYWN0aXZlLCB0aGUgY2FjaGUgdmFsdWUgaGFzIGJlZW4g
dXBkYXRlZC4KLSAgICAqLwotICAgIF9xcENoYW5nZWQ6IGZ1bmN0aW9uIChwcm9wLCB2YWx1ZSwg
cXApIHsKLSAgICAgIGlmICghcXApIHsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotCi0gICAg
ICB2YXIgY2FjaGVLZXkgPSBfZW1iZXJSb3V0aW5nVXRpbHMuY2FsY3VsYXRlQ2FjaGVLZXkocXAu
cHJlZml4IHx8ICcnLCBxcC5wYXJ0cywgcXAudmFsdWVzKTsKLQotICAgICAgLy8gVXBkYXRlIG1v
ZGVsLWRlcCBjYWNoZQotICAgICAgdmFyIGNhY2hlID0gdGhpcy5fYnVja2V0Q2FjaGU7Ci0gICAg
ICBpZiAoY2FjaGUpIHsKLSAgICAgICAgY2FjaGUuc3Rhc2goY2FjaGVLZXksIHByb3AsIHZhbHVl
KTsKLSAgICAgIH0KLSAgICB9LAotICAgIC8qKgotICAgICAgVGhpcyBob29rIGlzIHRoZSBmaXJz
dCBvZiB0aGUgcm91dGUgZW50cnkgdmFsaWRhdGlvbiBob29rcwotICAgICAgY2FsbGVkIHdoZW4g
YW4gYXR0ZW1wdCBpcyBtYWRlIHRvIHRyYW5zaXRpb24gaW50byBhIHJvdXRlCi0gICAgICBvciBv
bmUgb2YgaXRzIGNoaWxkcmVuLiBJdCBpcyBjYWxsZWQgYmVmb3JlIGBtb2RlbGAgYW5kCi0gICAg
ICBgYWZ0ZXJNb2RlbGAsIGFuZCBpcyBhcHByb3ByaWF0ZSBmb3IgY2FzZXMgd2hlbjoKLSAgICAg
ICAxKSBBIGRlY2lzaW9uIGNhbiBiZSBtYWRlIHRvIHJlZGlyZWN0IGVsc2V3aGVyZSB3aXRob3V0
Ci0gICAgICAgICBuZWVkaW5nIHRvIHJlc29sdmUgdGhlIG1vZGVsIGZpcnN0LgotICAgICAgMikg
QW55IGFzeW5jIG9wZXJhdGlvbnMgbmVlZCB0byBvY2N1ciBmaXJzdCBiZWZvcmUgdGhlCi0gICAg
ICAgICBtb2RlbCBpcyBhdHRlbXB0ZWQgdG8gYmUgcmVzb2x2ZWQuCi0gICAgICAgVGhpcyBob29r
IGlzIHByb3ZpZGVkIHRoZSBjdXJyZW50IGB0cmFuc2l0aW9uYCBhdHRlbXB0Ci0gICAgICBhcyBh
IHBhcmFtZXRlciwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gYC5hYm9ydCgpYCB0aGUgdHJhbnNpdGlv
biwKLSAgICAgIHNhdmUgaXQgZm9yIGEgbGF0ZXIgYC5yZXRyeSgpYCwgb3IgcmV0cmlldmUgdmFs
dWVzIHNldAotICAgICAgb24gaXQgZnJvbSBhIHByZXZpb3VzIGhvb2suIFlvdSBjYW4gYWxzbyBq
dXN0IGNhbGwKLSAgICAgIGB0aGlzLnRyYW5zaXRpb25Ub2AgdG8gYW5vdGhlciByb3V0ZSB0byBp
bXBsaWNpdGx5Ci0gICAgICBhYm9ydCB0aGUgYHRyYW5zaXRpb25gLgotICAgICAgIFlvdSBjYW4g
cmV0dXJuIGEgcHJvbWlzZSBmcm9tIHRoaXMgaG9vayB0byBwYXVzZSB0aGUKLSAgICAgIHRyYW5z
aXRpb24gdW50aWwgdGhlIHByb21pc2UgcmVzb2x2ZXMgKG9yIHJlamVjdHMpLiBUaGlzIGNvdWxk
Ci0gICAgICBiZSB1c2VmdWwsIGZvciBpbnN0YW5jZSwgZm9yIHJldHJpZXZpbmcgYXN5bmMgY29k
ZSBmcm9tCi0gICAgICB0aGUgc2VydmVyIHRoYXQgaXMgcmVxdWlyZWQgdG8gZW50ZXIgYSByb3V0
ZS4KLSAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICBBcHAuUG9zdFJvdXRlID0gRW1iZXIuUm91
dGUuZXh0ZW5kKHsKLSAgICAgICAgYmVmb3JlTW9kZWw6IGZ1bmN0aW9uKHRyYW5zaXRpb24pIHsK
LSAgICAgICAgICBpZiAoIUFwcC5Qb3N0KSB7Ci0gICAgICAgICAgICByZXR1cm4gRW1iZXIuJC5n
ZXRTY3JpcHQoJy9tb2RlbHMvcG9zdC5qcycpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
ICAgfSk7Ci0gICAgICBgYGAKLSAgICAgICBJZiBgQXBwLlBvc3RgIGRvZXNuJ3QgZXhpc3QgaW4g
dGhlIGFib3ZlIGV4YW1wbGUsCi0gICAgICBgYmVmb3JlTW9kZWxgIHdpbGwgdXNlIGpRdWVyeSdz
IGBnZXRTY3JpcHRgLCB3aGljaAotICAgICAgcmV0dXJucyBhIHByb21pc2UgdGhhdCByZXNvbHZl
cyBhZnRlciB0aGUgc2VydmVyIGhhcwotICAgICAgc3VjY2Vzc2Z1bGx5IHJldHJpZXZlZCBhbmQg
ZXhlY3V0ZWQgdGhlIGNvZGUgZnJvbSB0aGUKLSAgICAgIHNlcnZlci4gTm90ZSB0aGF0IGlmIGFu
IGVycm9yIHdlcmUgdG8gb2NjdXIsIGl0IHdvdWxkCi0gICAgICBiZSBwYXNzZWQgdG8gdGhlIGBl
cnJvcmAgaG9vayBvbiBgRW1iZXIuUm91dGVgLCBidXQKLSAgICAgIGl0J3MgYWxzbyBwb3NzaWJs
ZSB0byBoYW5kbGUgZXJyb3JzIHNwZWNpZmljIHRvCi0gICAgICBgYmVmb3JlTW9kZWxgIHJpZ2h0
IGZyb20gd2l0aGluIHRoZSBob29rICh0byBkaXN0aW5ndWlzaAotICAgICAgZnJvbSB0aGUgc2hh
cmVkIGVycm9yIGhhbmRsaW5nIGJlaGF2aW9yIG9mIHRoZSBgZXJyb3JgCi0gICAgICBob29rKToK
LSAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICBBcHAuUG9zdFJvdXRlID0gRW1iZXIuUm91dGUu
ZXh0ZW5kKHsKLSAgICAgICAgYmVmb3JlTW9kZWw6IGZ1bmN0aW9uKHRyYW5zaXRpb24pIHsKLSAg
ICAgICAgICBpZiAoIUFwcC5Qb3N0KSB7Ci0gICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7Ci0g
ICAgICAgICAgICByZXR1cm4gRW1iZXIuJC5nZXRTY3JpcHQoJ3Bvc3QuanMnKS50aGVuKG51bGws
IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgICAgICAgc2VsZi50cmFuc2l0aW9uVG8oJ2hlbHAnKTsK
LSAgICAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB0aGUgYWJvdmUgdHJhbnNpdGlvblRvIHdpbGwg
aW1wbGljaXRseQotICAgICAgICAgICAgICAvLyBoYWx0IHRoZSB0cmFuc2l0aW9uLiBJZiB5b3Ug
d2VyZSB0byByZXR1cm4KLSAgICAgICAgICAgICAgLy8gbm90aGluZyBmcm9tIHRoaXMgcHJvbWlz
ZSByZWplY3QgaGFuZGxlciwKLSAgICAgICAgICAgICAgLy8gYWNjb3JkaW5nIHRvIHByb21pc2Ug
c2VtYW50aWNzLCB0aGF0IHdvdWxkCi0gICAgICAgICAgICAgIC8vIGNvbnZlcnQgdGhlIHJlamVj
dCBpbnRvIGEgcmVzb2x2ZSBhbmQgdGhlCi0gICAgICAgICAgICAgIC8vIHRyYW5zaXRpb24gd291
bGQgY29udGludWUuIFRvIHByb3BhZ2F0ZSB0aGUKLSAgICAgICAgICAgICAgLy8gZXJyb3Igc28g
dGhhdCBpdCdkIGJlIGhhbmRsZWQgYnkgdGhlIGBlcnJvcmAKLSAgICAgICAgICAgICAgLy8gaG9v
aywgeW91IHdvdWxkIGhhdmUgdG8KLSAgICAgICAgICAgICAgcmV0dXJuIEVtYmVyLlJTVlAucmVq
ZWN0KGUpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9
KTsKLSAgICAgIGBgYAotICAgICAgIEBtZXRob2QgYmVmb3JlTW9kZWwKLSAgICAgIEBwYXJhbSB7
VHJhbnNpdGlvbn0gdHJhbnNpdGlvbgotICAgICAgQHJldHVybiB7UHJvbWlzZX0gaWYgdGhlIHZh
bHVlIHJldHVybmVkIGZyb20gdGhpcyBob29rIGlzCi0gICAgICAgIGEgcHJvbWlzZSwgdGhlIHRy
YW5zaXRpb24gd2lsbCBwYXVzZSB1bnRpbCB0aGUgdHJhbnNpdGlvbgotICAgICAgICByZXNvbHZl
cy4gT3RoZXJ3aXNlLCBub24tcHJvbWlzZSByZXR1cm4gdmFsdWVzIGFyZSBub3QKLSAgICAgICAg
dXRpbGl6ZWQgaW4gYW55IHdheS4KLSAgICAgIEBwdWJsaWMKLSAgICAqLwotICAgIGJlZm9yZU1v
ZGVsOiBLLAotCi0gICAgLyoqCi0gICAgICBUaGlzIGhvb2sgaXMgY2FsbGVkIGFmdGVyIHRoaXMg
cm91dGUncyBtb2RlbCBoYXMgcmVzb2x2ZWQuCi0gICAgICBJdCBmb2xsb3dzIGlkZW50aWNhbCBh
c3luYy9wcm9taXNlIHNlbWFudGljcyB0byBgYmVmb3JlTW9kZWxgCi0gICAgICBidXQgaXMgcHJv
dmlkZWQgdGhlIHJvdXRlJ3MgcmVzb2x2ZWQgbW9kZWwgaW4gYWRkaXRpb24gdG8KLSAgICAgIHRo
ZSBgdHJhbnNpdGlvbmAsIGFuZCBpcyB0aGVyZWZvcmUgc3VpdGVkIHRvIHBlcmZvcm1pbmcKLSAg
ICAgIGxvZ2ljIHRoYXQgY2FuIG9ubHkgdGFrZSBwbGFjZSBhZnRlciB0aGUgbW9kZWwgaGFzIGFs
cmVhZHkKLSAgICAgIHJlc29sdmVkLgotICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgIEFwcC5Q
b3N0c1JvdXRlID0gRW1iZXIuUm91dGUuZXh0ZW5kKHsKLSAgICAgICAgYWZ0ZXJNb2RlbDogZnVu
Y3Rpb24ocG9zdHMsIHRyYW5zaXRpb24pIHsKLSAgICAgICAgICBpZiAocG9zdHMuZ2V0KCdsZW5n
dGgnKSA9PT0gMSkgewotICAgICAgICAgICAgdGhpcy50cmFuc2l0aW9uVG8oJ3Bvc3Quc2hvdycs
IHBvc3RzLmdldCgnZmlyc3RPYmplY3QnKSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
ICB9KTsKLSAgICAgIGBgYAotICAgICAgIFJlZmVyIHRvIGRvY3VtZW50YXRpb24gZm9yIGBiZWZv
cmVNb2RlbGAgZm9yIGEgZGVzY3JpcHRpb24KLSAgICAgIG9mIHRyYW5zaXRpb24tcGF1c2luZyBz
ZW1hbnRpY3Mgd2hlbiBhIHByb21pc2UgaXMgcmV0dXJuZWQKLSAgICAgIGZyb20gdGhpcyBob29r
LgotICAgICAgIEBtZXRob2QgYWZ0ZXJNb2RlbAotICAgICAgQHBhcmFtIHtPYmplY3R9IHJlc29s
dmVkTW9kZWwgdGhlIHZhbHVlIHJldHVybmVkIGZyb20gYG1vZGVsYCwKLSAgICAgICAgb3IgaXRz
IHJlc29sdmVkIHZhbHVlIGlmIGl0IHdhcyBhIHByb21pc2UKLSAgICAgIEBwYXJhbSB7VHJhbnNp
dGlvbn0gdHJhbnNpdGlvbgotICAgICAgQHJldHVybiB7UHJvbWlzZX0gaWYgdGhlIHZhbHVlIHJl
dHVybmVkIGZyb20gdGhpcyBob29rIGlzCi0gICAgICAgIGEgcHJvbWlzZSwgdGhlIHRyYW5zaXRp
b24gd2lsbCBwYXVzZSB1bnRpbCB0aGUgdHJhbnNpdGlvbgotICAgICAgICByZXNvbHZlcy4gT3Ro
ZXJ3aXNlLCBub24tcHJvbWlzZSByZXR1cm4gdmFsdWVzIGFyZSBub3QKLSAgICAgICAgdXRpbGl6
ZWQgaW4gYW55IHdheS4KLSAgICAgIEBwdWJsaWMKLSAgICAgKi8KLSAgICBhZnRlck1vZGVsOiBL
LAotCi0gICAgLyoqCi0gICAgICBBIGhvb2sgeW91IGNhbiBpbXBsZW1lbnQgdG8gb3B0aW9uYWxs
eSByZWRpcmVjdCB0byBhbm90aGVyIHJvdXRlLgotICAgICAgIElmIHlvdSBjYWxsIGB0aGlzLnRy
YW5zaXRpb25Ub2AgZnJvbSBpbnNpZGUgb2YgdGhpcyBob29rLCB0aGlzIHJvdXRlCi0gICAgICB3
aWxsIG5vdCBiZSBlbnRlcmVkIGluIGZhdm9yIG9mIHRoZSBvdGhlciBob29rLgotICAgICAgIGBy
ZWRpcmVjdGAgYW5kIGBhZnRlck1vZGVsYCBiZWhhdmUgdmVyeSBzaW1pbGFybHkgYW5kIGFyZQot
ICAgICAgY2FsbGVkIGFsbW9zdCBhdCB0aGUgc2FtZSB0aW1lLCBidXQgdGhleSBoYXZlIGFuIGlt
cG9ydGFudAotICAgICAgZGlzdGluY3Rpb24gaW4gdGhlIGNhc2UgdGhhdCwgZnJvbSBvbmUgb2Yg
dGhlc2UgaG9va3MsIGEKLSAgICAgIHJlZGlyZWN0IGludG8gYSBjaGlsZCByb3V0ZSBvZiB0aGlz
IHJvdXRlIG9jY3VyczogcmVkaXJlY3RzCi0gICAgICBmcm9tIGBhZnRlck1vZGVsYCBlc3NlbnRp
YWxseSBpbnZhbGlkYXRlIHRoZSBjdXJyZW50IGF0dGVtcHQKLSAgICAgIHRvIGVudGVyIHRoaXMg
cm91dGUsIGFuZCB3aWxsIHJlc3VsdCBpbiB0aGlzIHJvdXRlJ3MgYGJlZm9yZU1vZGVsYCwKLSAg
ICAgIGBtb2RlbGAsIGFuZCBgYWZ0ZXJNb2RlbGAgaG9va3MgYmVpbmcgZmlyZWQgYWdhaW4gd2l0
aGluCi0gICAgICB0aGUgbmV3LCByZWRpcmVjdGluZyB0cmFuc2l0aW9uLiBSZWRpcmVjdHMgdGhh
dCBvY2N1ciB3aXRoaW4KLSAgICAgIHRoZSBgcmVkaXJlY3RgIGhvb2ssIG9uIHRoZSBvdGhlciBo
YW5kLCB3aWxsIF9ub3RfIGNhdXNlCi0gICAgICB0aGVzZSBob29rcyB0byBiZSBmaXJlZCBhZ2Fp
biB0aGUgc2Vjb25kIHRpbWUgYXJvdW5kOyBpbgotICAgICAgb3RoZXIgd29yZHMsIGJ5IHRoZSB0
aW1lIHRoZSBgcmVkaXJlY3RgIGhvb2sgaGFzIGJlZW4gY2FsbGVkLAotICAgICAgYm90aCB0aGUg
cmVzb2x2ZWQgbW9kZWwgYW5kIGF0dGVtcHRlZCBlbnRyeSBpbnRvIHRoaXMgcm91dGUKLSAgICAg
IGFyZSBjb25zaWRlcmVkIHRvIGJlIGZ1bGx5IHZhbGlkYXRlZC4KLSAgICAgICBAbWV0aG9kIHJl
ZGlyZWN0Ci0gICAgICBAcGFyYW0ge09iamVjdH0gbW9kZWwgdGhlIG1vZGVsIGZvciB0aGlzIHJv
dXRlCi0gICAgICBAcGFyYW0ge1RyYW5zaXRpb259IHRyYW5zaXRpb24gdGhlIHRyYW5zaXRpb24g
b2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGUgY3VycmVudCB0cmFuc2l0aW9uCi0gICAgICBAcHVi
bGljCi0gICAgKi8KLSAgICByZWRpcmVjdDogSywKLQotICAgIC8qKgotICAgICAgQ2FsbGVkIHdo
ZW4gdGhlIGNvbnRleHQgaXMgY2hhbmdlZCBieSByb3V0ZXIuanMuCi0gICAgICAgQHByaXZhdGUK
LSAgICAgIEBtZXRob2QgY29udGV4dERpZENoYW5nZQotICAgICovCi0gICAgY29udGV4dERpZENo
YW5nZTogZnVuY3Rpb24gKCkgewotICAgICAgdGhpcy5jdXJyZW50TW9kZWwgPSB0aGlzLmNvbnRl
eHQ7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAgQSBob29rIHlvdSBjYW4gaW1wbGVtZW50IHRv
IGNvbnZlcnQgdGhlIFVSTCBpbnRvIHRoZSBtb2RlbCBmb3IKLSAgICAgIHRoaXMgcm91dGUuCi0g
ICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgQXBwLlJvdXRlci5tYXAoZnVuY3Rpb24oKSB7Ci0g
ICAgICAgIHRoaXMucm91dGUoJ3Bvc3QnLCB7IHBhdGg6ICcvcG9zdHMvOnBvc3RfaWQnIH0pOwot
ICAgICAgfSk7Ci0gICAgICBgYGAKLSAgICAgICBUaGUgbW9kZWwgZm9yIHRoZSBgcG9zdGAgcm91
dGUgaXMgYHN0b3JlLmZpbmRSZWNvcmQoJ3Bvc3QnLCBwYXJhbXMucG9zdF9pZClgLgotICAgICAg
IEJ5IGRlZmF1bHQsIGlmIHlvdXIgcm91dGUgaGFzIGEgZHluYW1pYyBzZWdtZW50IGVuZGluZyBp
biBgX2lkYDoKLSAgICAgICAqIFRoZSBtb2RlbCBjbGFzcyBpcyBkZXRlcm1pbmVkIGZyb20gdGhl
IHNlZ21lbnQgKGBwb3N0X2lkYCdzCi0gICAgICAgIGNsYXNzIGlzIGBBcHAuUG9zdGApCi0gICAg
ICAqIFRoZSBmaW5kIG1ldGhvZCBpcyBjYWxsZWQgb24gdGhlIG1vZGVsIGNsYXNzIHdpdGggdGhl
IHZhbHVlIG9mCi0gICAgICAgIHRoZSBkeW5hbWljIHNlZ21lbnQuCi0gICAgICAgTm90ZSB0aGF0
IGZvciByb3V0ZXMgd2l0aCBkeW5hbWljIHNlZ21lbnRzLCB0aGlzIGhvb2sgaXMgbm90IGFsd2F5
cwotICAgICAgZXhlY3V0ZWQuIElmIHRoZSByb3V0ZSBpcyBlbnRlcmVkIHRocm91Z2ggYSB0cmFu
c2l0aW9uIChlLmcuIHdoZW4KLSAgICAgIHVzaW5nIHRoZSBgbGluay10b2AgSGFuZGxlYmFycyBo
ZWxwZXIgb3IgdGhlIGB0cmFuc2l0aW9uVG9gIG1ldGhvZAotICAgICAgb2Ygcm91dGVzKSwgYW5k
IGEgbW9kZWwgY29udGV4dCBpcyBhbHJlYWR5IHByb3ZpZGVkIHRoaXMgaG9vawotICAgICAgaXMg
bm90IGNhbGxlZC4KLSAgICAgICBBIG1vZGVsIGNvbnRleHQgZG9lcyBub3QgaW5jbHVkZSBhIHBy
aW1pdGl2ZSBzdHJpbmcgb3IgbnVtYmVyLAotICAgICAgd2hpY2ggZG9lcyBjYXVzZSB0aGUgbW9k
ZWwgaG9vayB0byBiZSBjYWxsZWQuCi0gICAgICAgUm91dGVzIHdpdGhvdXQgZHluYW1pYyBzZWdt
ZW50cyB3aWxsIGFsd2F5cyBleGVjdXRlIHRoZSBtb2RlbCBob29rLgotICAgICAgIGBgYGphdmFz
Y3JpcHQKLSAgICAgIC8vIG5vIGR5bmFtaWMgc2VnbWVudCwgbW9kZWwgaG9vayBhbHdheXMgY2Fs
bGVkCi0gICAgICB0aGlzLnRyYW5zaXRpb25UbygncG9zdHMnKTsKLSAgICAgICAvLyBtb2RlbCBw
YXNzZWQgaW4sIHNvIG1vZGVsIGhvb2sgbm90IGNhbGxlZAotICAgICAgdGhlUG9zdCA9IHN0b3Jl
LmZpbmRSZWNvcmQoJ3Bvc3QnLCAxKTsKLSAgICAgIHRoaXMudHJhbnNpdGlvblRvKCdwb3N0Jywg
dGhlUG9zdCk7Ci0gICAgICAgLy8gaW50ZWdlciBwYXNzZWQgaW4sIG1vZGVsIGhvb2sgaXMgY2Fs
bGVkCi0gICAgICB0aGlzLnRyYW5zaXRpb25UbygncG9zdCcsIDEpOwotICAgICAgIC8vIG1vZGVs
IGlkIHBhc3NlZCBpbiwgbW9kZWwgaG9vayBpcyBjYWxsZWQKLSAgICAgIC8vIHVzZWZ1bCBmb3Ig
Zm9yY2luZyB0aGUgaG9vayB0byBleGVjdXRlCi0gICAgICB0aGVQb3N0ID0gc3RvcmUuZmluZFJl
Y29yZCgncG9zdCcsIDEpOwotICAgICAgdGhpcy50cmFuc2l0aW9uVG8oJ3Bvc3QnLCB0aGVQb3N0
LmlkKTsKLSAgICAgIGBgYAotICAgICAgICBUaGlzIGhvb2sgZm9sbG93cyB0aGUgYXN5bmNocm9u
b3VzL3Byb21pc2Ugc2VtYW50aWNzCi0gICAgICBkZXNjcmliZWQgaW4gdGhlIGRvY3VtZW50YXRp
b24gZm9yIGBiZWZvcmVNb2RlbGAuIEluIHBhcnRpY3VsYXIsCi0gICAgICBpZiBhIHByb21pc2Ug
cmV0dXJuZWQgZnJvbSBgbW9kZWxgIGZhaWxzLCB0aGUgZXJyb3Igd2lsbCBiZQotICAgICAgaGFu
ZGxlZCBieSB0aGUgYGVycm9yYCBob29rIG9uIGBFbWJlci5Sb3V0ZWAuCi0gICAgICAgRXhhbXBs
ZQotICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgIEFwcC5Qb3N0Um91dGUgPSBFbWJlci5Sb3V0
ZS5leHRlbmQoewotICAgICAgICBtb2RlbDogZnVuY3Rpb24ocGFyYW1zKSB7Ci0gICAgICAgICAg
cmV0dXJuIHRoaXMuc3RvcmUuZmluZFJlY29yZCgncG9zdCcsIHBhcmFtcy5wb3N0X2lkKTsKLSAg
ICAgICAgfQotICAgICAgfSk7Ci0gICAgICBgYGAKLSAgICAgICBAbWV0aG9kIG1vZGVsCi0gICAg
ICBAcGFyYW0ge09iamVjdH0gcGFyYW1zIHRoZSBwYXJhbWV0ZXJzIGV4dHJhY3RlZCBmcm9tIHRo
ZSBVUkwKLSAgICAgIEBwYXJhbSB7VHJhbnNpdGlvbn0gdHJhbnNpdGlvbgotICAgICAgQHJldHVy
biB7T2JqZWN0fFByb21pc2V9IHRoZSBtb2RlbCBmb3IgdGhpcyByb3V0ZS4gSWYKLSAgICAgICAg
YSBwcm9taXNlIGlzIHJldHVybmVkLCB0aGUgdHJhbnNpdGlvbiB3aWxsIHBhdXNlIHVudGlsCi0g
ICAgICAgIHRoZSBwcm9taXNlIHJlc29sdmVzLCBhbmQgdGhlIHJlc29sdmVkIHZhbHVlIG9mIHRo
ZSBwcm9taXNlCi0gICAgICAgIHdpbGwgYmUgdXNlZCBhcyB0aGUgbW9kZWwgZm9yIHRoaXMgcm91
dGUuCi0gICAgICBAcHVibGljCi0gICAgKi8KLSAgICBtb2RlbDogZnVuY3Rpb24gKHBhcmFtcywg
dHJhbnNpdGlvbikgewotICAgICAgdmFyIG1hdGNoLCBuYW1lLCBzYXdQYXJhbXMsIHZhbHVlOwot
ICAgICAgdmFyIHF1ZXJ5UGFyYW1zID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMs
ICdfcXAubWFwJyk7Ci0KLSAgICAgIGZvciAodmFyIHByb3AgaW4gcGFyYW1zKSB7Ci0gICAgICAg
IGlmIChwcm9wID09PSAncXVlcnlQYXJhbXMnIHx8IHF1ZXJ5UGFyYW1zICYmIHByb3AgaW4gcXVl
cnlQYXJhbXMpIHsKLSAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlm
IChtYXRjaCA9IHByb3AubWF0Y2goL14oLiopX2lkJC8pKSB7Ci0gICAgICAgICAgbmFtZSA9IG1h
dGNoWzFdOwotICAgICAgICAgIHZhbHVlID0gcGFyYW1zW3Byb3BdOwotICAgICAgICB9Ci0gICAg
ICAgIHNhd1BhcmFtcyA9IHRydWU7Ci0gICAgICB9Ci0KLSAgICAgIGlmICghbmFtZSAmJiBzYXdQ
YXJhbXMpIHsKLSAgICAgICAgcmV0dXJuIF9lbWJlclJ1bnRpbWVDb3B5LmRlZmF1bHQocGFyYW1z
KTsKLSAgICAgIH0gZWxzZSBpZiAoIW5hbWUpIHsKLSAgICAgICAgaWYgKHRyYW5zaXRpb24ucmVz
b2x2ZUluZGV4IDwgMSkgewotICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAg
IHZhciBwYXJlbnRNb2RlbCA9IHRyYW5zaXRpb24uc3RhdGUuaGFuZGxlckluZm9zW3RyYW5zaXRp
b24ucmVzb2x2ZUluZGV4IC0gMV0uY29udGV4dDsKLQotICAgICAgICByZXR1cm4gcGFyZW50TW9k
ZWw7Ci0gICAgICB9Ci0KLSAgICAgIHJldHVybiB0aGlzLmZpbmRNb2RlbChuYW1lLCB2YWx1ZSk7
Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAgQHByaXZhdGUKLSAgICAgIEBtZXRob2QgZGVzZXJp
YWxpemUKLSAgICAgIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgdGhlIHBhcmFtZXRlcnMgZXh0cmFj
dGVkIGZyb20gdGhlIFVSTAotICAgICAgQHBhcmFtIHtUcmFuc2l0aW9ufSB0cmFuc2l0aW9uCi0g
ICAgICBAcmV0dXJuIHtPYmplY3R8UHJvbWlzZX0gdGhlIG1vZGVsIGZvciB0aGlzIHJvdXRlLgot
ICAgICAgIFJvdXRlci5qcyBob29rLgotICAgICAqLwotICAgIGRlc2VyaWFsaXplOiBmdW5jdGlv
biAocGFyYW1zLCB0cmFuc2l0aW9uKSB7Ci0gICAgICByZXR1cm4gdGhpcy5tb2RlbCh0aGlzLnBh
cmFtc0Zvcih0aGlzLnJvdXRlTmFtZSksIHRyYW5zaXRpb24pOwotICAgIH0sCi0KLSAgICAvKioK
LSAgICAgICBAbWV0aG9kIGZpbmRNb2RlbAotICAgICAgQHBhcmFtIHtTdHJpbmd9IHR5cGUgdGhl
IG1vZGVsIHR5cGUKLSAgICAgIEBwYXJhbSB7T2JqZWN0fSB2YWx1ZSB0aGUgdmFsdWUgcGFzc2Vk
IHRvIGZpbmQKLSAgICAgIEBwcml2YXRlCi0gICAgKi8KLSAgICBmaW5kTW9kZWw6IGZ1bmN0aW9u
ICgpIHsKLSAgICAgIHZhciBzdG9yZSA9IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0aGlz
LCAnc3RvcmUnKTsKLSAgICAgIHJldHVybiBzdG9yZS5maW5kLmFwcGx5KHN0b3JlLCBhcmd1bWVu
dHMpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgIFN0b3JlIHByb3BlcnR5IHByb3ZpZGVzIGEg
aG9vayBmb3IgZGF0YSBwZXJzaXN0ZW5jZSBsaWJyYXJpZXMgdG8gaW5qZWN0IHRoZW1zZWx2ZXMu
Ci0gICAgICAgQnkgZGVmYXVsdCwgdGhpcyBzdG9yZSBwcm9wZXJ0eSBwcm92aWRlcyB0aGUgZXhh
Y3Qgc2FtZSBmdW5jdGlvbmFsaXR5IHByZXZpb3VzbHkKLSAgICAgIGluIHRoZSBtb2RlbCBob29r
LgotICAgICAgIEN1cnJlbnRseSwgdGhlIHJlcXVpcmVkIGludGVyZmFjZSBpczoKLSAgICAgICBg
c3RvcmUuZmluZChtb2RlbE5hbWUsIGZpbmRBcmd1bWVudHMpYAotICAgICAgIEBtZXRob2Qgc3Rv
cmUKLSAgICAgIEBwYXJhbSB7T2JqZWN0fSBzdG9yZQotICAgICAgQHByaXZhdGUKLSAgICAqLwot
ICAgIHN0b3JlOiBfZW1iZXJNZXRhbENvbXB1dGVkLmNvbXB1dGVkKGZ1bmN0aW9uICgpIHsKLSAg
ICAgIHZhciBvd25lciA9IF9jb250YWluZXJPd25lci5nZXRPd25lcih0aGlzKTsKLSAgICAgIHZh
ciByb3V0ZU5hbWUgPSB0aGlzLnJvdXRlTmFtZTsKLSAgICAgIHZhciBuYW1lc3BhY2UgPSBfZW1i
ZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywgJ3JvdXRlci5uYW1lc3BhY2UnKTsKLQotICAg
ICAgcmV0dXJuIHsKLSAgICAgICAgZmluZDogZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7Ci0gICAg
ICAgICAgdmFyIG1vZGVsQ2xhc3MgPSBvd25lci5fbG9va3VwRmFjdG9yeSgnbW9kZWw6JyArIG5h
bWUpOwotCi0gICAgICAgICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ1lvdSB1c2VkIHRoZSBk
eW5hbWljIHNlZ21lbnQgJyArIG5hbWUgKyAnX2lkIGluIHlvdXIgcm91dGUgJyArIHJvdXRlTmFt
ZSArICcsIGJ1dCAnICsgbmFtZXNwYWNlICsgJy4nICsgX2VtYmVyUnVudGltZVN5c3RlbVN0cmlu
Zy5jbGFzc2lmeShuYW1lKSArICcgZGlkIG5vdCBleGlzdCBhbmQgeW91IGRpZCBub3Qgb3ZlcnJp
ZGUgeW91ciByb3V0ZVwncyBgbW9kZWxgIGhvb2suJywgISFtb2RlbENsYXNzKTsKLQotICAgICAg
ICAgIGlmICghbW9kZWxDbGFzcykgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgIH0K
LQotICAgICAgICAgIF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0KF9lbWJlclJ1bnRpbWVTeXN0ZW1T
dHJpbmcuY2xhc3NpZnkobmFtZSkgKyAnIGhhcyBubyBtZXRob2QgYGZpbmRgLicsIHR5cGVvZiBt
b2RlbENsYXNzLmZpbmQgPT09ICdmdW5jdGlvbicpOwotCi0gICAgICAgICAgcmV0dXJuIG1vZGVs
Q2xhc3MuZmluZCh2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgIH07Ci0gICAgfSksCi0KLSAgICAv
KioKLSAgICAgIEEgaG9vayB5b3UgY2FuIGltcGxlbWVudCB0byBjb252ZXJ0IHRoZSByb3V0ZSdz
IG1vZGVsIGludG8gcGFyYW1ldGVycwotICAgICAgZm9yIHRoZSBVUkwuCi0gICAgICAgYGBgamF2
YXNjcmlwdAotICAgICAgQXBwLlJvdXRlci5tYXAoZnVuY3Rpb24oKSB7Ci0gICAgICAgIHRoaXMu
cm91dGUoJ3Bvc3QnLCB7IHBhdGg6ICcvcG9zdHMvOnBvc3RfaWQnIH0pOwotICAgICAgfSk7Ci0g
ICAgICAgQXBwLlBvc3RSb3V0ZSA9IEVtYmVyLlJvdXRlLmV4dGVuZCh7Ci0gICAgICAgIG1vZGVs
OiBmdW5jdGlvbihwYXJhbXMpIHsKLSAgICAgICAgICAvLyB0aGUgc2VydmVyIHJldHVybnMgYHsg
aWQ6IDEyIH1gCi0gICAgICAgICAgcmV0dXJuIEVtYmVyLiQuZ2V0SlNPTignL3Bvc3RzLycgKyBw
YXJhbXMucG9zdF9pZCk7Ci0gICAgICAgIH0sCi0gICAgICAgICBzZXJpYWxpemU6IGZ1bmN0aW9u
KG1vZGVsKSB7Ci0gICAgICAgICAgLy8gdGhpcyB3aWxsIG1ha2UgdGhlIFVSTCBgL3Bvc3RzLzEy
YAotICAgICAgICAgIHJldHVybiB7IHBvc3RfaWQ6IG1vZGVsLmlkIH07Ci0gICAgICAgIH0KLSAg
ICAgIH0pOwotICAgICAgYGBgCi0gICAgICAgVGhlIGRlZmF1bHQgYHNlcmlhbGl6ZWAgbWV0aG9k
IHdpbGwgaW5zZXJ0IHRoZSBtb2RlbCdzIGBpZGAgaW50byB0aGUKLSAgICAgIHJvdXRlJ3MgZHlu
YW1pYyBzZWdtZW50IChpbiB0aGlzIGNhc2UsIGA6cG9zdF9pZGApIGlmIHRoZSBzZWdtZW50IGNv
bnRhaW5zICdfaWQnLgotICAgICAgSWYgdGhlIHJvdXRlIGhhcyBtdWx0aXBsZSBkeW5hbWljIHNl
Z21lbnRzIG9yIGRvZXMgbm90IGNvbnRhaW4gJ19pZCcsIGBzZXJpYWxpemVgCi0gICAgICB3aWxs
IHJldHVybiBgRW1iZXIuZ2V0UHJvcGVydGllcyhtb2RlbCwgcGFyYW1zKWAKLSAgICAgICBUaGlz
IG1ldGhvZCBpcyBjYWxsZWQgd2hlbiBgdHJhbnNpdGlvblRvYCBpcyBjYWxsZWQgd2l0aCBhIGNv
bnRleHQKLSAgICAgIGluIG9yZGVyIHRvIHBvcHVsYXRlIHRoZSBVUkwuCi0gICAgICAgQG1ldGhv
ZCBzZXJpYWxpemUKLSAgICAgIEBwYXJhbSB7T2JqZWN0fSBtb2RlbCB0aGUgcm91dGVzIG1vZGVs
Ci0gICAgICBAcGFyYW0ge0FycmF5fSBwYXJhbXMgYW4gQXJyYXkgb2YgcGFyYW1ldGVyIG5hbWVz
IGZvciB0aGUgY3VycmVudAotICAgICAgICByb3V0ZSAoaW4gdGhlIGV4YW1wbGUsIGBbJ3Bvc3Rf
aWQnXWAuCi0gICAgICBAcmV0dXJuIHtPYmplY3R9IHRoZSBzZXJpYWxpemVkIHBhcmFtZXRlcnMK
LSAgICAgIEBwdWJsaWMKLSAgICAqLwotICAgIHNlcmlhbGl6ZTogZnVuY3Rpb24gKG1vZGVsLCBw
YXJhbXMpIHsKLSAgICAgIGlmIChwYXJhbXMubGVuZ3RoIDwgMSkgewotICAgICAgICByZXR1cm47
Ci0gICAgICB9Ci0gICAgICBpZiAoIW1vZGVsKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0K
LQotICAgICAgdmFyIG5hbWUgPSBwYXJhbXNbMF07Ci0gICAgICB2YXIgb2JqZWN0ID0ge307Ci0K
LSAgICAgIGlmIChwYXJhbXMubGVuZ3RoID09PSAxKSB7Ci0gICAgICAgIGlmIChuYW1lIGluIG1v
ZGVsKSB7Ci0gICAgICAgICAgb2JqZWN0W25hbWVdID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQu
Z2V0KG1vZGVsLCBuYW1lKTsKLSAgICAgICAgfSBlbHNlIGlmICgvX2lkJC8udGVzdChuYW1lKSkg
ewotICAgICAgICAgIG9iamVjdFtuYW1lXSA9IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCht
b2RlbCwgJ2lkJyk7Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIG9iamVjdCA9
IF9lbWJlck1ldGFsR2V0X3Byb3BlcnRpZXMuZGVmYXVsdChtb2RlbCwgcGFyYW1zKTsKLSAgICAg
IH0KLQotICAgICAgcmV0dXJuIG9iamVjdDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICBBIGhv
b2sgeW91IGNhbiB1c2UgdG8gc2V0dXAgdGhlIGNvbnRyb2xsZXIgZm9yIHRoZSBjdXJyZW50IHJv
dXRlLgotICAgICAgIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aXRoIHRoZSBjb250cm9sbGVyIGZv
ciB0aGUgY3VycmVudCByb3V0ZSBhbmQgdGhlCi0gICAgICBtb2RlbCBzdXBwbGllZCBieSB0aGUg
YG1vZGVsYCBob29rLgotICAgICAgIEJ5IGRlZmF1bHQsIHRoZSBgc2V0dXBDb250cm9sbGVyYCBo
b29rIHNldHMgdGhlIGBtb2RlbGAgcHJvcGVydHkgb2YKLSAgICAgIHRoZSBjb250cm9sbGVyIHRv
IHRoZSBgbW9kZWxgLgotICAgICAgIElmIHlvdSBpbXBsZW1lbnQgdGhlIGBzZXR1cENvbnRyb2xs
ZXJgIGhvb2sgaW4geW91ciBSb3V0ZSwgaXQgd2lsbAotICAgICAgcHJldmVudCB0aGlzIGRlZmF1
bHQgYmVoYXZpb3IuIElmIHlvdSB3YW50IHRvIHByZXNlcnZlIHRoYXQgYmVoYXZpb3IKLSAgICAg
IHdoZW4gaW1wbGVtZW50aW5nIHlvdXIgYHNldHVwQ29udHJvbGxlcmAgZnVuY3Rpb24sIG1ha2Ug
c3VyZSB0byBjYWxsCi0gICAgICBgX3N1cGVyYDoKLSAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAg
ICBBcHAuUGhvdG9zUm91dGUgPSBFbWJlci5Sb3V0ZS5leHRlbmQoewotICAgICAgICBtb2RlbDog
ZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmUuZmluZEFsbCgncGhvdG8n
KTsKLSAgICAgICAgfSwKLSAgICAgICAgIHNldHVwQ29udHJvbGxlcjogZnVuY3Rpb24oY29udHJv
bGxlciwgbW9kZWwpIHsKLSAgICAgICAgICAvLyBDYWxsIF9zdXBlciBmb3IgZGVmYXVsdCBiZWhh
dmlvcgotICAgICAgICAgIHRoaXMuX3N1cGVyKGNvbnRyb2xsZXIsIG1vZGVsKTsKLSAgICAgICAg
ICAvLyBJbXBsZW1lbnQgeW91ciBjdXN0b20gc2V0dXAgYWZ0ZXIKLSAgICAgICAgICB0aGlzLmNv
bnRyb2xsZXJGb3IoJ2FwcGxpY2F0aW9uJykuc2V0KCdzaG93aW5nUGhvdG9zJywgdHJ1ZSk7Ci0g
ICAgICAgIH0KLSAgICAgIH0pOwotICAgICAgYGBgCi0gICAgICAgVGhlIHByb3ZpZGVkIGNvbnRy
b2xsZXIgd2lsbCBiZSBvbmUgcmVzb2x2ZWQgYmFzZWQgb24gdGhlIG5hbWUKLSAgICAgIG9mIHRo
aXMgcm91dGUuCi0gICAgICAgSWYgbm8gZXhwbGljaXQgY29udHJvbGxlciBpcyBkZWZpbmVkLCBF
bWJlciB3aWxsIGF1dG9tYXRpY2FsbHkgY3JlYXRlIG9uZS4KLSAgICAgICBBcyBhbiBleGFtcGxl
LCBjb25zaWRlciB0aGUgcm91dGVyOgotICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgIEFwcC5S
b3V0ZXIubWFwKGZ1bmN0aW9uKCkgewotICAgICAgICB0aGlzLnJvdXRlKCdwb3N0JywgeyBwYXRo
OiAnL3Bvc3RzLzpwb3N0X2lkJyB9KTsKLSAgICAgIH0pOwotICAgICAgYGBgCi0gICAgICAgRm9y
IHRoZSBgcG9zdGAgcm91dGUsIGEgY29udHJvbGxlciBuYW1lZCBgQXBwLlBvc3RDb250cm9sbGVy
YCB3b3VsZAotICAgICAgYmUgdXNlZCBpZiBpdCBpcyBkZWZpbmVkLiBJZiBpdCBpcyBub3QgZGVm
aW5lZCwgYSBiYXNpYyBgRW1iZXIuQ29udHJvbGxlcmAKLSAgICAgIGluc3RhbmNlIHdvdWxkIGJl
IHVzZWQuCi0gICAgICAgRXhhbXBsZQotICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgIEFwcC5Q
b3N0Um91dGUgPSBFbWJlci5Sb3V0ZS5leHRlbmQoewotICAgICAgICBzZXR1cENvbnRyb2xsZXI6
IGZ1bmN0aW9uKGNvbnRyb2xsZXIsIG1vZGVsKSB7Ci0gICAgICAgICAgY29udHJvbGxlci5zZXQo
J21vZGVsJywgbW9kZWwpOwotICAgICAgICB9Ci0gICAgICB9KTsKLSAgICAgIGBgYAotICAgICAg
IEBtZXRob2Qgc2V0dXBDb250cm9sbGVyCi0gICAgICBAcGFyYW0ge0NvbnRyb2xsZXJ9IGNvbnRy
b2xsZXIgaW5zdGFuY2UKLSAgICAgIEBwYXJhbSB7T2JqZWN0fSBtb2RlbAotICAgICAgQHB1Ymxp
YwotICAgICovCi0gICAgc2V0dXBDb250cm9sbGVyOiBmdW5jdGlvbiAoY29udHJvbGxlciwgY29u
dGV4dCwgdHJhbnNpdGlvbikgewotICAgICAgaWYgKGNvbnRyb2xsZXIgJiYgY29udGV4dCAhPT0g
dW5kZWZpbmVkKSB7Ci0gICAgICAgIF9lbWJlck1ldGFsUHJvcGVydHlfc2V0LnNldChjb250cm9s
bGVyLCAnbW9kZWwnLCBjb250ZXh0KTsKLSAgICAgIH0KLSAgICB9LAotCi0gICAgLyoqCi0gICAg
ICBSZXR1cm5zIHRoZSBjb250cm9sbGVyIGZvciBhIHBhcnRpY3VsYXIgcm91dGUgb3IgbmFtZS4K
LSAgICAgICBUaGUgY29udHJvbGxlciBpbnN0YW5jZSBtdXN0IGFscmVhZHkgaGF2ZSBiZWVuIGNy
ZWF0ZWQsIGVpdGhlciB0aHJvdWdoIGVudGVyaW5nIHRoZQotICAgICAgYXNzb2NpYXRlZCByb3V0
ZSBvciB1c2luZyBgZ2VuZXJhdGVDb250cm9sbGVyYC4KLSAgICAgICBgYGBqYXZhc2NyaXB0Ci0g
ICAgICBBcHAuUG9zdFJvdXRlID0gRW1iZXIuUm91dGUuZXh0ZW5kKHsKLSAgICAgICAgc2V0dXBD
b250cm9sbGVyOiBmdW5jdGlvbihjb250cm9sbGVyLCBwb3N0KSB7Ci0gICAgICAgICAgdGhpcy5f
c3VwZXIoY29udHJvbGxlciwgcG9zdCk7Ci0gICAgICAgICAgdGhpcy5jb250cm9sbGVyRm9yKCdw
b3N0cycpLnNldCgnY3VycmVudFBvc3QnLCBwb3N0KTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0g
ICAgICBgYGAKLSAgICAgICBAbWV0aG9kIGNvbnRyb2xsZXJGb3IKLSAgICAgIEBwYXJhbSB7U3Ry
aW5nfSBuYW1lIHRoZSBuYW1lIG9mIHRoZSByb3V0ZSBvciBjb250cm9sbGVyCi0gICAgICBAcmV0
dXJuIHtFbWJlci5Db250cm9sbGVyfQotICAgICAgQHB1YmxpYwotICAgICovCi0gICAgY29udHJv
bGxlckZvcjogZnVuY3Rpb24gKG5hbWUsIF9za2lwQXNzZXJ0KSB7Ci0gICAgICB2YXIgb3duZXIg
PSBfY29udGFpbmVyT3duZXIuZ2V0T3duZXIodGhpcyk7Ci0gICAgICB2YXIgcm91dGUgPSBvd25l
ci5sb29rdXAoJ3JvdXRlOicgKyBuYW1lKTsKLSAgICAgIHZhciBjb250cm9sbGVyOwotCi0gICAg
ICBpZiAocm91dGUgJiYgcm91dGUuY29udHJvbGxlck5hbWUpIHsKLSAgICAgICAgbmFtZSA9IHJv
dXRlLmNvbnRyb2xsZXJOYW1lOwotICAgICAgfQotCi0gICAgICBjb250cm9sbGVyID0gb3duZXIu
bG9va3VwKCdjb250cm9sbGVyOicgKyBuYW1lKTsKLQotICAgICAgLy8gTk9URTogV2UncmUgc3Bl
Y2lmaWNhbGx5IGNoZWNraW5nIHRoYXQgc2tpcEFzc2VydCBpcyB0cnVlLCBiZWNhdXNlIGFjY29y
ZGluZwotICAgICAgLy8gICB0byB0aGUgb2xkIEFQSSB0aGUgc2Vjb25kIHBhcmFtZXRlciB3YXMg
bW9kZWwuIFdlIGRvIG5vdCB3YW50IHBlb3BsZSB3aG8KLSAgICAgIC8vICAgcGFzc2VkIGEgbW9k
ZWwgdG8gc2tpcCB0aGUgYXNzZXJ0aW9uLgotICAgICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQo
J1RoZSBjb250cm9sbGVyIG5hbWVkIFwnJyArIG5hbWUgKyAnXCcgY291bGQgbm90IGJlIGZvdW5k
LiBNYWtlIHN1cmUgdGhhdCB0aGlzIHJvdXRlIGV4aXN0cyBhbmQgaGFzIGFscmVhZHkgYmVlbiBl
bnRlcmVkIGF0IGxlYXN0IG9uY2UuIElmIHlvdSBhcmUgYWNjZXNzaW5nIGEgY29udHJvbGxlciBu
b3QgYXNzb2NpYXRlZCB3aXRoIGEgcm91dGUsIG1ha2Ugc3VyZSB0aGUgY29udHJvbGxlciBjbGFz
cyBpcyBleHBsaWNpdGx5IGRlZmluZWQuJywgY29udHJvbGxlciB8fCBfc2tpcEFzc2VydCA9PT0g
dHJ1ZSk7Ci0KLSAgICAgIHJldHVybiBjb250cm9sbGVyOwotICAgIH0sCi0KLSAgICAvKioKLSAg
ICAgIEdlbmVyYXRlcyBhIGNvbnRyb2xsZXIgZm9yIGEgcm91dGUuCi0gICAgICAgRXhhbXBsZQot
ICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgIEFwcC5Qb3N0Um91dGUgPSBFbWJlci5Sb3V0ZS5l
eHRlbmQoewotICAgICAgICBzZXR1cENvbnRyb2xsZXI6IGZ1bmN0aW9uKGNvbnRyb2xsZXIsIHBv
c3QpIHsKLSAgICAgICAgICB0aGlzLl9zdXBlcihjb250cm9sbGVyLCBwb3N0KTsKLSAgICAgICAg
ICB0aGlzLmdlbmVyYXRlQ29udHJvbGxlcigncG9zdHMnLCBwb3N0KTsKLSAgICAgICAgfQotICAg
ICAgfSk7Ci0gICAgICBgYGAKLSAgICAgICBAbWV0aG9kIGdlbmVyYXRlQ29udHJvbGxlcgotICAg
ICAgQHBhcmFtIHtTdHJpbmd9IG5hbWUgdGhlIG5hbWUgb2YgdGhlIGNvbnRyb2xsZXIKLSAgICAg
IEBwYXJhbSB7T2JqZWN0fSBtb2RlbCB0aGUgbW9kZWwgdG8gaW5mZXIgdGhlIHR5cGUgb2YgdGhl
IGNvbnRyb2xsZXIgKG9wdGlvbmFsKQotICAgICAgQHByaXZhdGUKLSAgICAqLwotICAgIGdlbmVy
YXRlQ29udHJvbGxlcjogZnVuY3Rpb24gKG5hbWUsIG1vZGVsKSB7Ci0gICAgICB2YXIgb3duZXIg
PSBfY29udGFpbmVyT3duZXIuZ2V0T3duZXIodGhpcyk7Ci0KLSAgICAgIG1vZGVsID0gbW9kZWwg
fHwgdGhpcy5tb2RlbEZvcihuYW1lKTsKLQotICAgICAgcmV0dXJuIF9lbWJlclJvdXRpbmdTeXN0
ZW1HZW5lcmF0ZV9jb250cm9sbGVyLmRlZmF1bHQob3duZXIsIG5hbWUsIG1vZGVsKTsKLSAgICB9
LAotCi0gICAgLyoqCi0gICAgICBSZXR1cm5zIHRoZSByZXNvbHZlZCBtb2RlbCBvZiBhIHBhcmVu
dCAob3IgYW55IGFuY2VzdG9yKSByb3V0ZQotICAgICAgaW4gYSByb3V0ZSBoaWVyYXJjaHkuICBE
dXJpbmcgYSB0cmFuc2l0aW9uLCBhbGwgcm91dGVzCi0gICAgICBtdXN0IHJlc29sdmUgYSBtb2Rl
bCBvYmplY3QsIGFuZCBpZiBhIHJvdXRlCi0gICAgICBuZWVkcyBhY2Nlc3MgdG8gYSBwYXJlbnQg
cm91dGUncyBtb2RlbCBpbiBvcmRlciB0bwotICAgICAgcmVzb2x2ZSBhIG1vZGVsIChvciBqdXN0
IHJldXNlIHRoZSBtb2RlbCBmcm9tIGEgcGFyZW50KSwKLSAgICAgIGl0IGNhbiBjYWxsIGB0aGlz
Lm1vZGVsRm9yKHRoZU5hbWVPZlBhcmVudFJvdXRlKWAgdG8KLSAgICAgIHJldHJpZXZlIGl0LiBJ
ZiB0aGUgYW5jZXN0b3Igcm91dGUncyBtb2RlbCB3YXMgYSBwcm9taXNlLAotICAgICAgaXRzIHJl
c29sdmVkIHJlc3VsdCBpcyByZXR1cm5lZC4KLSAgICAgICBFeGFtcGxlCi0gICAgICAgYGBgamF2
YXNjcmlwdAotICAgICAgQXBwLlJvdXRlci5tYXAoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgdGhp
cy5yb3V0ZSgncG9zdCcsIHsgcGF0aDogJy9wb3N0Lzpwb3N0X2lkJyB9LCBmdW5jdGlvbigpIHsK
LSAgICAgICAgICAgIHRoaXMucm91dGUoJ2NvbW1lbnRzJywgeyByZXNldE5hbWVzcGFjZTogdHJ1
ZSB9KTsKLSAgICAgICAgICB9KTsKLSAgICAgIH0pOwotICAgICAgIEFwcC5Db21tZW50c1JvdXRl
ID0gRW1iZXIuUm91dGUuZXh0ZW5kKHsKLSAgICAgICAgICBhZnRlck1vZGVsOiBmdW5jdGlvbigp
IHsKLSAgICAgICAgICAgIHRoaXMuc2V0KCdwb3N0JywgdGhpcy5tb2RlbEZvcigncG9zdCcpKTsK
LSAgICAgICAgICB9Ci0gICAgICB9KTsKLSAgICAgIGBgYAotICAgICAgIEBtZXRob2QgbW9kZWxG
b3IKLSAgICAgIEBwYXJhbSB7U3RyaW5nfSBuYW1lIHRoZSBuYW1lIG9mIHRoZSByb3V0ZQotICAg
ICAgQHJldHVybiB7T2JqZWN0fSB0aGUgbW9kZWwgb2JqZWN0Ci0gICAgICBAcHVibGljCi0gICAg
Ki8KLSAgICBtb2RlbEZvcjogZnVuY3Rpb24gKG5hbWUpIHsKLSAgICAgIHZhciByb3V0ZSA9IF9j
b250YWluZXJPd25lci5nZXRPd25lcih0aGlzKS5sb29rdXAoJ3JvdXRlOicgKyBuYW1lKTsKLSAg
ICAgIHZhciB0cmFuc2l0aW9uID0gdGhpcy5yb3V0ZXIgPyB0aGlzLnJvdXRlci5yb3V0ZXIuYWN0
aXZlVHJhbnNpdGlvbiA6IG51bGw7Ci0KLSAgICAgIC8vIElmIHdlIGFyZSBtaWQtdHJhbnNpdGlv
biwgd2Ugd2FudCB0byB0cnkgYW5kIGxvb2sgdXAKLSAgICAgIC8vIHJlc29sdmVkIHBhcmVudCBj
b250ZXh0cyBvbiB0aGUgY3VycmVudCB0cmFuc2l0aW9uRXZlbnQuCi0gICAgICBpZiAodHJhbnNp
dGlvbikgewotICAgICAgICB2YXIgbW9kZWxMb29rdXBOYW1lID0gcm91dGUgJiYgcm91dGUucm91
dGVOYW1lIHx8IG5hbWU7Ci0gICAgICAgIGlmICh0cmFuc2l0aW9uLnJlc29sdmVkTW9kZWxzLmhh
c093blByb3BlcnR5KG1vZGVsTG9va3VwTmFtZSkpIHsKLSAgICAgICAgICByZXR1cm4gdHJhbnNp
dGlvbi5yZXNvbHZlZE1vZGVsc1ttb2RlbExvb2t1cE5hbWVdOwotICAgICAgICB9Ci0gICAgICB9
Ci0KLSAgICAgIHJldHVybiByb3V0ZSAmJiByb3V0ZS5jdXJyZW50TW9kZWw7Ci0gICAgfSwKLQot
ICAgIC8qKgotICAgICAgQSBob29rIHlvdSBjYW4gdXNlIHRvIHJlbmRlciB0aGUgdGVtcGxhdGUg
Zm9yIHRoZSBjdXJyZW50IHJvdXRlLgotICAgICAgIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aXRo
IHRoZSBjb250cm9sbGVyIGZvciB0aGUgY3VycmVudCByb3V0ZSBhbmQgdGhlCi0gICAgICBtb2Rl
bCBzdXBwbGllZCBieSB0aGUgYG1vZGVsYCBob29rLiBCeSBkZWZhdWx0LCBpdCByZW5kZXJzIHRo
ZSByb3V0ZSdzCi0gICAgICB0ZW1wbGF0ZSwgY29uZmlndXJlZCB3aXRoIHRoZSBjb250cm9sbGVy
IGZvciB0aGUgcm91dGUuCi0gICAgICAgVGhpcyBtZXRob2QgY2FuIGJlIG92ZXJyaWRkZW4gdG8g
c2V0IHVwIGFuZCByZW5kZXIgYWRkaXRpb25hbCBvcgotICAgICAgYWx0ZXJuYXRpdmUgdGVtcGxh
dGVzLgotICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgIEFwcC5Qb3N0c1JvdXRlID0gRW1iZXIu
Um91dGUuZXh0ZW5kKHsKLSAgICAgICAgcmVuZGVyVGVtcGxhdGU6IGZ1bmN0aW9uKGNvbnRyb2xs
ZXIsIG1vZGVsKSB7Ci0gICAgICAgICAgdmFyIGZhdkNvbnRyb2xsZXIgPSB0aGlzLmNvbnRyb2xs
ZXJGb3IoJ2Zhdm9yaXRlUG9zdCcpOwotICAgICAgICAgICAvLyBSZW5kZXIgdGhlIGBmYXZvcml0
ZVBvc3RgIHRlbXBsYXRlIGludG8KLSAgICAgICAgICAvLyB0aGUgb3V0bGV0IGBwb3N0c2AsIGFu
ZCBkaXNwbGF5IHRoZSBgZmF2b3JpdGVQb3N0YAotICAgICAgICAgIC8vIGNvbnRyb2xsZXIuCi0g
ICAgICAgICAgdGhpcy5yZW5kZXIoJ2Zhdm9yaXRlUG9zdCcsIHsKLSAgICAgICAgICAgIG91dGxl
dDogJ3Bvc3RzJywKLSAgICAgICAgICAgIGNvbnRyb2xsZXI6IGZhdkNvbnRyb2xsZXIKLSAgICAg
ICAgICB9KTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0gICAgICBgYGAKLSAgICAgICBAbWV0aG9k
IHJlbmRlclRlbXBsYXRlCi0gICAgICBAcGFyYW0ge09iamVjdH0gY29udHJvbGxlciB0aGUgcm91
dGUncyBjb250cm9sbGVyCi0gICAgICBAcGFyYW0ge09iamVjdH0gbW9kZWwgdGhlIHJvdXRlJ3Mg
bW9kZWwKLSAgICAgIEBwdWJsaWMKLSAgICAqLwotICAgIHJlbmRlclRlbXBsYXRlOiBmdW5jdGlv
biAoY29udHJvbGxlciwgbW9kZWwpIHsKLSAgICAgIHRoaXMucmVuZGVyKCk7Ci0gICAgfSwKLQot
ICAgIC8qKgotICAgICAgYHJlbmRlcmAgaXMgdXNlZCB0byByZW5kZXIgYSB0ZW1wbGF0ZSBpbnRv
IGEgcmVnaW9uIG9mIGFub3RoZXIgdGVtcGxhdGUKLSAgICAgIChpbmRpY2F0ZWQgYnkgYW4gYHt7
b3V0bGV0fX1gKS4gYHJlbmRlcmAgaXMgdXNlZCBib3RoIGR1cmluZyB0aGUgZW50cnkKLSAgICAg
IHBoYXNlIG9mIHJvdXRpbmcgKHZpYSB0aGUgYHJlbmRlclRlbXBsYXRlYCBob29rKSBhbmQgbGF0
ZXIgaW4gcmVzcG9uc2UgdG8KLSAgICAgIHVzZXIgaW50ZXJhY3Rpb24uCi0gICAgICAgRm9yIGV4
YW1wbGUsIGdpdmVuIHRoZSBmb2xsb3dpbmcgbWluaW1hbCByb3V0ZXIgYW5kIHRlbXBsYXRlczoK
LSAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICBSb3V0ZXIubWFwKGZ1bmN0aW9uKCkgewotICAg
ICAgICB0aGlzLnJvdXRlKCdwaG90b3MnKTsKLSAgICAgIH0pOwotICAgICAgYGBgCi0gICAgICAg
YGBgaGFuZGxlYmFycwotICAgICAgPCEtLSBhcHBsaWNhdGlvbi5oYnMgLS0+Ci0gICAgICA8ZGl2
IGNsYXNzPSdzb21ldGhpbmctaW4tdGhlLWFwcC1oYnMnPgotICAgICAgICB7e291dGxldCAiYW5P
dXRsZXROYW1lIn19Ci0gICAgICA8L2Rpdj4KLSAgICAgIGBgYAotICAgICAgIGBgYGhhbmRsZWJh
cnMKLSAgICAgIDwhLS0gcGhvdG9zLmhicyAtLT4KLSAgICAgIDxoMT5QaG90b3M8L2gxPgotICAg
ICAgYGBgCi0gICAgICAgWW91IGNhbiByZW5kZXIgYHBob3Rvcy5oYnNgIGludG8gdGhlIGAiYW5P
dXRsZXROYW1lImAgb3V0bGV0IG9mCi0gICAgICBgYXBwbGljYXRpb24uaGJzYCBieSBjYWxsaW5n
IGByZW5kZXJgOgotICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgIC8vIHBvc3RzIHJvdXRlCi0g
ICAgICBFbWJlci5Sb3V0ZS5leHRlbmQoewotICAgICAgICByZW5kZXJUZW1wbGF0ZTogZnVuY3Rp
b24oKSB7Ci0gICAgICAgICAgdGhpcy5yZW5kZXIoJ3Bob3RvcycsIHsKLSAgICAgICAgICAgIGlu
dG86ICdhcHBsaWNhdGlvbicsCi0gICAgICAgICAgICBvdXRsZXQ6ICdhbk91dGxldE5hbWUnCi0g
ICAgICAgICAgfSkKLSAgICAgICAgfQotICAgICAgfSk7Ci0gICAgICBgYGAKLSAgICAgICBgcmVu
ZGVyYCBhZGRpdGlvbmFsbHkgYWxsb3dzIHlvdSB0byBzdXBwbHkgd2hpY2ggYHZpZXdgLCBgY29u
dHJvbGxlcmAsIGFuZAotICAgICAgYG1vZGVsYCBvYmplY3RzIHNob3VsZCBiZSBsb2FkZWQgYW5k
IGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVuZGVyZWQgdGVtcGxhdGUuCi0gICAgICAgIGBgYGphdmFz
Y3JpcHQKLSAgICAgIC8vIHBvc3RzIHJvdXRlCi0gICAgICBFbWJlci5Sb3V0ZS5leHRlbmQoewot
ICAgICAgICByZW5kZXJUZW1wbGF0ZTogZnVuY3Rpb24oY29udHJvbGxlciwgbW9kZWwpewotICAg
ICAgICAgIHRoaXMucmVuZGVyKCdwb3N0cycsIHsgICAgLy8gdGhlIHRlbXBsYXRlIHRvIHJlbmRl
ciwgcmVmZXJlbmNlZCBieSBuYW1lCi0gICAgICAgICAgICBpbnRvOiAnYXBwbGljYXRpb24nLCAg
ICAvLyB0aGUgdGVtcGxhdGUgdG8gcmVuZGVyIGludG8sIHJlZmVyZW5jZWQgYnkgbmFtZQotICAg
ICAgICAgICAgb3V0bGV0OiAnYW5PdXRsZXROYW1lJywgLy8gdGhlIG91dGxldCBpbnNpZGUgYG9w
dGlvbnMudGVtcGxhdGVgIHRvIHJlbmRlciBpbnRvLgotICAgICAgICAgICAgdmlldzogJ2FWaWV3
TmFtZScsICAgICAgLy8gdGhlIHZpZXcgdG8gdXNlIGZvciB0aGlzIHRlbXBsYXRlLCByZWZlcmVu
Y2VkIGJ5IG5hbWUKLSAgICAgICAgICAgIGNvbnRyb2xsZXI6ICdzb21lQ29udHJvbGxlck5hbWUn
LCAvLyB0aGUgY29udHJvbGxlciB0byB1c2UgZm9yIHRoaXMgdGVtcGxhdGUsIHJlZmVyZW5jZWQg
YnkgbmFtZQotICAgICAgICAgICAgbW9kZWw6IG1vZGVsICAgICAgICAgICAgLy8gdGhlIG1vZGVs
IHRvIHNldCBvbiBgb3B0aW9ucy5jb250cm9sbGVyYC4KLSAgICAgICAgICB9KQotICAgICAgICB9
Ci0gICAgICB9KTsKLSAgICAgIGBgYAotICAgICAgIFRoZSBzdHJpbmcgdmFsdWVzIHByb3ZpZGVk
IGZvciB0aGUgdGVtcGxhdGUgbmFtZSwgdmlldywgYW5kIGNvbnRyb2xsZXIKLSAgICAgIHdpbGwg
ZXZlbnR1YWxseSBwYXNzIHRocm91Z2ggdG8gdGhlIHJlc29sdmVyIGZvciBsb29rdXAuIFNlZQot
ICAgICAgRW1iZXIuUmVzb2x2ZXIgZm9yIGhvdyB0aGVzZSBhcmUgbWFwcGVkIHRvIEphdmFTY3Jp
cHQgb2JqZWN0cyBpbiB5b3VyCi0gICAgICBhcHBsaWNhdGlvbi4KLSAgICAgICBOb3QgYWxsIG9w
dGlvbnMgbmVlZCB0byBiZSBwYXNzZWQgdG8gYHJlbmRlcmAuIERlZmF1bHQgdmFsdWVzIHdpbGwg
YmUgdXNlZAotICAgICAgYmFzZWQgb24gdGhlIG5hbWUgb2YgdGhlIHJvdXRlIHNwZWNpZmllZCBp
biB0aGUgcm91dGVyIG9yIHRoZSBSb3V0ZSdzCi0gICAgICBgY29udHJvbGxlck5hbWVgLCBgdmll
d05hbWVgIGFuZCBgdGVtcGxhdGVOYW1lYCBwcm9wZXJ0aWVzLgotICAgICAgIEZvciBleGFtcGxl
OgotICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgIC8vIHJvdXRlcgotICAgICAgUm91dGVyLm1h
cChmdW5jdGlvbigpIHsKLSAgICAgICAgdGhpcy5yb3V0ZSgnaW5kZXgnKTsKLSAgICAgICAgdGhp
cy5yb3V0ZSgncG9zdCcsIHsgcGF0aDogJy9wb3N0cy86cG9zdF9pZCcgfSk7Ci0gICAgICB9KTsK
LSAgICAgIGBgYAotICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgIC8vIHBvc3Qgcm91dGUKLSAg
ICAgIFBvc3RSb3V0ZSA9IEFwcC5Sb3V0ZS5leHRlbmQoewotICAgICAgICByZW5kZXJUZW1wbGF0
ZTogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgdGhpcy5yZW5kZXIoKTsgLy8gYWxsIGRlZmF1bHRz
IGFwcGx5Ci0gICAgICAgIH0KLSAgICAgIH0pOwotICAgICAgYGBgCi0gICAgICAgVGhlIG5hbWUg
b2YgdGhlIGBQb3N0Um91dGVgLCBkZWZpbmVkIGJ5IHRoZSByb3V0ZXIsIGlzIGBwb3N0YC4KLSAg
ICAgICBUaGUgZm9sbG93aW5nIGVxdWl2YWxlbnQgZGVmYXVsdCBvcHRpb25zIHdpbGwgYmUgYXBw
bGllZCB3aGVuCi0gICAgICB0aGUgUm91dGUgY2FsbHMgYHJlbmRlcmA6Ci0gICAgICAgYGBgamF2
YXNjcmlwdAotICAgICAgLy8KLSAgICAgIHRoaXMucmVuZGVyKCdwb3N0JywgeyAgLy8gdGhlIHRl
bXBsYXRlIG5hbWUgYXNzb2NpYXRlZCB3aXRoICdwb3N0JyBSb3V0ZQotICAgICAgICBpbnRvOiAn
YXBwbGljYXRpb24nLCAvLyB0aGUgcGFyZW50IHJvdXRlIHRvICdwb3N0JyBSb3V0ZQotICAgICAg
ICBvdXRsZXQ6ICdtYWluJywgICAgICAvLyB7e291dGxldH19IGFuZCB7e291dGxldCAnbWFpbid9
fSBhcmUgc3lub255bW91cywKLSAgICAgICAgdmlldzogJ3Bvc3QnLCAgICAgICAgLy8gdGhlIHZp
ZXcgYXNzb2NpYXRlZCB3aXRoIHRoZSAncG9zdCcgUm91dGUKLSAgICAgICAgY29udHJvbGxlcjog
J3Bvc3QnLCAgLy8gdGhlIGNvbnRyb2xsZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSAncG9zdCcgUm91
dGUKLSAgICAgIH0pCi0gICAgICBgYGAKLSAgICAgICBCeSBkZWZhdWx0IHRoZSBjb250cm9sbGVy
J3MgYG1vZGVsYCB3aWxsIGJlIHRoZSByb3V0ZSdzIG1vZGVsLCBzbyBpdCBkb2VzIG5vdAotICAg
ICAgbmVlZCB0byBiZSBwYXNzZWQgdW5sZXNzIHlvdSB3aXNoIHRvIGNoYW5nZSB3aGljaCBtb2Rl
bCBpcyBiZWluZyB1c2VkLgotICAgICAgIEBtZXRob2QgcmVuZGVyCi0gICAgICBAcGFyYW0ge1N0
cmluZ30gbmFtZSB0aGUgbmFtZSBvZiB0aGUgdGVtcGxhdGUgdG8gcmVuZGVyCi0gICAgICBAcGFy
YW0ge09iamVjdH0gW29wdGlvbnNdIHRoZSBvcHRpb25zCi0gICAgICBAcGFyYW0ge1N0cmluZ30g
W29wdGlvbnMuaW50b10gdGhlIHRlbXBsYXRlIHRvIHJlbmRlciBpbnRvLAotICAgICAgICAgICAg
ICAgICAgICAgIHJlZmVyZW5jZWQgYnkgbmFtZS4gRGVmYXVsdHMgdG8gdGhlIHBhcmVudCB0ZW1w
bGF0ZQotICAgICAgQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLm91dGxldF0gdGhlIG91dGxldCBp
bnNpZGUgYG9wdGlvbnMudGVtcGxhdGVgIHRvIHJlbmRlciBpbnRvLgotICAgICAgICAgICAgICAg
ICAgICAgIERlZmF1bHRzIHRvICdtYWluJwotICAgICAgQHBhcmFtIHtTdHJpbmd8T2JqZWN0fSBb
b3B0aW9ucy5jb250cm9sbGVyXSB0aGUgY29udHJvbGxlciB0byB1c2UgZm9yIHRoaXMgdGVtcGxh
dGUsCi0gICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlZCBieSBuYW1lIG9yIGFzIGEgY29u
dHJvbGxlciBpbnN0YW5jZS4gRGVmYXVsdHMgdG8gdGhlIFJvdXRlJ3MgcGFpcmVkIGNvbnRyb2xs
ZXIKLSAgICAgIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucy5tb2RlbF0gdGhlIG1vZGVsIG9iamVj
dCB0byBzZXQgb24gYG9wdGlvbnMuY29udHJvbGxlcmAuCi0gICAgICAgICAgICAgICAgICAgICAg
RGVmYXVsdHMgdG8gdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgUm91dGUncyBtb2RlbCBob29rCi0g
ICAgICBAcHVibGljCi0gICAgKi8KLSAgICByZW5kZXI6IGZ1bmN0aW9uIChfbmFtZSwgb3B0aW9u
cykgewotICAgICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ1RoZSBuYW1lIGluIHRoZSBnaXZl
biBhcmd1bWVudHMgaXMgdW5kZWZpbmVkJywgYXJndW1lbnRzLmxlbmd0aCA+IDAgPyAhX2VtYmVy
TWV0YWxJc19ub25lLmRlZmF1bHQoYXJndW1lbnRzWzBdKSA6IHRydWUpOwotCi0gICAgICB2YXIg
bmFtZVBhc3NlZCA9IHR5cGVvZiBfbmFtZSA9PT0gJ3N0cmluZycgJiYgISFfbmFtZTsKLSAgICAg
IHZhciBpc0RlZmF1bHRSZW5kZXIgPSBhcmd1bWVudHMubGVuZ3RoID09PSAwIHx8IF9lbWJlck1l
dGFsSXNfZW1wdHkuZGVmYXVsdChhcmd1bWVudHNbMF0pOwotICAgICAgdmFyIG5hbWU7Ci0KLSAg
ICAgIGlmICh0eXBlb2YgX25hbWUgPT09ICdvYmplY3QnICYmICFvcHRpb25zKSB7Ci0gICAgICAg
IG5hbWUgPSB0aGlzLnJvdXRlTmFtZTsKLSAgICAgICAgb3B0aW9ucyA9IF9uYW1lOwotICAgICAg
fSBlbHNlIHsKLSAgICAgICAgbmFtZSA9IF9uYW1lOwotICAgICAgfQotCi0gICAgICB2YXIgcmVu
ZGVyT3B0aW9ucyA9IGJ1aWxkUmVuZGVyT3B0aW9ucyh0aGlzLCBuYW1lUGFzc2VkLCBpc0RlZmF1
bHRSZW5kZXIsIG5hbWUsIG9wdGlvbnMpOwotICAgICAgdGhpcy5jb25uZWN0aW9ucy5wdXNoKHJl
bmRlck9wdGlvbnMpOwotICAgICAgX2VtYmVyTWV0YWxSdW5fbG9vcC5kZWZhdWx0Lm9uY2UodGhp
cy5yb3V0ZXIsICdfc2V0T3V0bGV0cycpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgIERpc2Nv
bm5lY3RzIGEgdmlldyB0aGF0IGhhcyBiZWVuIHJlbmRlcmVkIGludG8gYW4gb3V0bGV0LgotICAg
ICAgIFlvdSBtYXkgcGFzcyBhbnkgb3IgYWxsIG9mIHRoZSBmb2xsb3dpbmcgb3B0aW9ucyB0byBg
ZGlzY29ubmVjdE91dGxldGA6Ci0gICAgICAgKiBgb3V0bGV0YDogdGhlIG5hbWUgb2YgdGhlIG91
dGxldCB0byBjbGVhciAoZGVmYXVsdDogJ21haW4nKQotICAgICAgKiBgcGFyZW50Vmlld2A6IHRo
ZSBuYW1lIG9mIHRoZSB2aWV3IGNvbnRhaW5pbmcgdGhlIG91dGxldCB0byBjbGVhcgotICAgICAg
ICAgKGRlZmF1bHQ6IHRoZSB2aWV3IHJlbmRlcmVkIGJ5IHRoZSBwYXJlbnQgcm91dGUpCi0gICAg
ICAgRXhhbXBsZToKLSAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICBBcHAuQXBwbGljYXRpb25S
b3V0ZSA9IEFwcC5Sb3V0ZS5leHRlbmQoewotICAgICAgICBhY3Rpb25zOiB7Ci0gICAgICAgICAg
c2hvd01vZGFsOiBmdW5jdGlvbihldnQpIHsKLSAgICAgICAgICAgIHRoaXMucmVuZGVyKGV2dC5t
b2RhbE5hbWUsIHsKLSAgICAgICAgICAgICAgb3V0bGV0OiAnbW9kYWwnLAotICAgICAgICAgICAg
ICBpbnRvOiAnYXBwbGljYXRpb24nCi0gICAgICAgICAgICB9KTsKLSAgICAgICAgICB9LAotICAg
ICAgICAgIGhpZGVNb2RhbDogZnVuY3Rpb24oZXZ0KSB7Ci0gICAgICAgICAgICB0aGlzLmRpc2Nv
bm5lY3RPdXRsZXQoewotICAgICAgICAgICAgICBvdXRsZXQ6ICdtb2RhbCcsCi0gICAgICAgICAg
ICAgIHBhcmVudFZpZXc6ICdhcHBsaWNhdGlvbicKLSAgICAgICAgICAgIH0pOwotICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgICAgfSk7Ci0gICAgICBgYGAKLSAgICAgICBBbHRlcm5hdGl2ZWx5
LCB5b3UgY2FuIHBhc3MgdGhlIGBvdXRsZXRgIG5hbWUgZGlyZWN0bHkgYXMgYSBzdHJpbmcuCi0g
ICAgICAgRXhhbXBsZToKLSAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICBoaWRlTW9kYWw6IGZ1
bmN0aW9uKGV2dCkgewotICAgICAgICB0aGlzLmRpc2Nvbm5lY3RPdXRsZXQoJ21vZGFsJyk7Ci0g
ICAgICB9Ci0gICAgICBgYGAKLSAgICAgICBAbWV0aG9kIGRpc2Nvbm5lY3RPdXRsZXQKLSAgICAg
IEBwYXJhbSB7T2JqZWN0fFN0cmluZ30gb3B0aW9ucyB0aGUgb3B0aW9ucyBoYXNoIG9yIG91dGxl
dCBuYW1lCi0gICAgICBAcHVibGljCi0gICAgKi8KLSAgICBkaXNjb25uZWN0T3V0bGV0OiBmdW5j
dGlvbiAob3B0aW9ucykgewotICAgICAgdmFyIG91dGxldE5hbWU7Ci0gICAgICB2YXIgcGFyZW50
VmlldzsKLSAgICAgIGlmICghb3B0aW9ucyB8fCB0eXBlb2Ygb3B0aW9ucyA9PT0gJ3N0cmluZycp
IHsKLSAgICAgICAgb3V0bGV0TmFtZSA9IG9wdGlvbnM7Ci0gICAgICB9IGVsc2UgewotICAgICAg
ICBvdXRsZXROYW1lID0gb3B0aW9ucy5vdXRsZXQ7Ci0gICAgICAgIHBhcmVudFZpZXcgPSBvcHRp
b25zLnBhcmVudFZpZXc7Ci0KLSAgICAgICAgaWYgKG9wdGlvbnMgJiYgT2JqZWN0LmtleXMob3B0
aW9ucykuaW5kZXhPZignb3V0bGV0JykgIT09IC0xICYmIHR5cGVvZiBvcHRpb25zLm91dGxldCA9
PT0gJ3VuZGVmaW5lZCcpIHsKLSAgICAgICAgICB0aHJvdyBuZXcgX2VtYmVyTWV0YWxFcnJvci5k
ZWZhdWx0KCdZb3UgcGFzc2VkIHVuZGVmaW5lZCBhcyB0aGUgb3V0bGV0IG5hbWUuJyk7Ci0gICAg
ICAgIH0KLSAgICAgIH0KLSAgICAgIHBhcmVudFZpZXcgPSBwYXJlbnRWaWV3ICYmIHBhcmVudFZp
ZXcucmVwbGFjZSgvXC8vZywgJy4nKTsKLSAgICAgIG91dGxldE5hbWUgPSBvdXRsZXROYW1lIHx8
ICdtYWluJzsKLSAgICAgIHRoaXMuX2Rpc2Nvbm5lY3RPdXRsZXQob3V0bGV0TmFtZSwgcGFyZW50
Vmlldyk7Ci0gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucm91dGVyLnJvdXRlci5jdXJy
ZW50SGFuZGxlckluZm9zLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIC8vIFRoaXMgbm9uLWxvY2Fs
IHN0YXRlIG11bmdpbmcgaXMgc2FkbHkgbmVjZXNzYXJ5IHRvIG1haW50YWluCi0gICAgICAgIC8v
IGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCBvdXIgZXhpc3Rpbmcgc2VtYW50aWNzLCB3aGlj
aCBhbGxvdwotICAgICAgICAvLyBhbnkgcm91dGUgdG8gZGlzY29ubmVjdE91dGxldCB0aGluZ3Mg
b3JpZ2luYWxseSByZW5kZXJlZCBieSBhbnkKLSAgICAgICAgLy8gb3RoZXIgcm91dGUuIFRoaXMg
c2hvdWxkIGFsbCBnZXQgY3V0IGluIDIuMC4KLSAgICAgICAgdGhpcy5yb3V0ZXIucm91dGVyLmN1
cnJlbnRIYW5kbGVySW5mb3NbaV0uaGFuZGxlci5fZGlzY29ubmVjdE91dGxldChvdXRsZXROYW1l
LCBwYXJlbnRWaWV3KTsKLSAgICAgIH0KLSAgICB9LAotCi0gICAgX2Rpc2Nvbm5lY3RPdXRsZXQ6
IGZ1bmN0aW9uIChvdXRsZXROYW1lLCBwYXJlbnRWaWV3KSB7Ci0gICAgICB2YXIgcGFyZW50ID0g
cGFyZW50Um91dGUodGhpcyk7Ci0gICAgICBpZiAocGFyZW50ICYmIHBhcmVudFZpZXcgPT09IHBh
cmVudC5yb3V0ZU5hbWUpIHsKLSAgICAgICAgcGFyZW50VmlldyA9IHVuZGVmaW5lZDsKLSAgICAg
IH0KLSAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jb25uZWN0aW9ucy5sZW5ndGg7IGkr
KykgewotICAgICAgICB2YXIgY29ubmVjdGlvbiA9IHRoaXMuY29ubmVjdGlvbnNbaV07Ci0gICAg
ICAgIGlmIChjb25uZWN0aW9uLm91dGxldCA9PT0gb3V0bGV0TmFtZSAmJiBjb25uZWN0aW9uLmlu
dG8gPT09IHBhcmVudFZpZXcpIHsKLSAgICAgICAgICAvLyBUaGlzIG5ldXRlcnMgdGhlIGRpc2Nv
bm5lY3RlZCBvdXRsZXQgc3VjaCB0aGF0IGl0IGRvZXNuJ3QKLSAgICAgICAgICAvLyByZW5kZXIg
YW55dGhpbmcsIGJ1dCBpdCBsZWF2ZXMgYW4gZW50cnkgaW4gdGhlIG91dGxldAotICAgICAgICAg
IC8vIGhpZXJhcmNoeSBzbyB0aGF0IGFueSBleGlzdGluZyBvdGhlciByZW5kZXJzIHRoYXQgdGFy
Z2V0IGl0Ci0gICAgICAgICAgLy8gZG9uJ3Qgc3VkZGVubHkgYmxvdyB1cC4gVGhleSB3aWxsIHN0
aWxsIHN0aWNrIHRoZW1zZWx2ZXMKLSAgICAgICAgICAvLyBpbnRvIGl0cyBvdXRsZXRzLCB3aGlj
aCB3b24ndCByZW5kZXIgYW55d2hlcmUuIEFsbCBvZiB0aGlzCi0gICAgICAgICAgLy8gc3RhdGVm
dWxuZXNzIHNob3VsZCBnZXQgdGhlIG1hY2hldGUgaW4gMi4wLgotICAgICAgICAgIHRoaXMuY29u
bmVjdGlvbnNbaV0gPSB7Ci0gICAgICAgICAgICBvd25lcjogY29ubmVjdGlvbi5vd25lciwKLSAg
ICAgICAgICAgIGludG86IGNvbm5lY3Rpb24uaW50bywKLSAgICAgICAgICAgIG91dGxldDogY29u
bmVjdGlvbi5vdXRsZXQsCi0gICAgICAgICAgICBuYW1lOiBjb25uZWN0aW9uLm5hbWUsCi0gICAg
ICAgICAgICBjb250cm9sbGVyOiB1bmRlZmluZWQsCi0gICAgICAgICAgICB0ZW1wbGF0ZTogdW5k
ZWZpbmVkLAotICAgICAgICAgICAgVmlld0NsYXNzOiB1bmRlZmluZWQKLSAgICAgICAgICB9Owot
ICAgICAgICAgIF9lbWJlck1ldGFsUnVuX2xvb3AuZGVmYXVsdC5vbmNlKHRoaXMucm91dGVyLCAn
X3NldE91dGxldHMnKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0KLSAgICB3aWxsRGVz
dHJveTogZnVuY3Rpb24gKCkgewotICAgICAgdGhpcy50ZWFyZG93blZpZXdzKCk7Ci0gICAgfSwK
LQotICAgIC8qKgotICAgICAgQHByaXZhdGUKLSAgICAgICBAbWV0aG9kIHRlYXJkb3duVmlld3MK
LSAgICAqLwotICAgIHRlYXJkb3duVmlld3M6IGZ1bmN0aW9uICgpIHsKLSAgICAgIGlmICh0aGlz
LmNvbm5lY3Rpb25zICYmIHRoaXMuY29ubmVjdGlvbnMubGVuZ3RoID4gMCkgewotICAgICAgICB0
aGlzLmNvbm5lY3Rpb25zID0gW107Ci0gICAgICAgIF9lbWJlck1ldGFsUnVuX2xvb3AuZGVmYXVs
dC5vbmNlKHRoaXMucm91dGVyLCAnX3NldE91dGxldHMnKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0p
OwotCi0gIF9lbWJlclJ1bnRpbWVNaXhpbnNBY3Rpb25faGFuZGxlci5kZXByZWNhdGVVbmRlcnNj
b3JlQWN0aW9ucyhSb3V0ZSk7Ci0KLSAgUm91dGUucmVvcGVuQ2xhc3MoewotICAgIGlzUm91dGVG
YWN0b3J5OiB0cnVlCi0gIH0pOwotCi0gIGZ1bmN0aW9uIHBhcmVudFJvdXRlKHJvdXRlKSB7Ci0g
ICAgdmFyIGhhbmRsZXJJbmZvID0gaGFuZGxlckluZm9Gb3Iocm91dGUsIHJvdXRlLnJvdXRlci5y
b3V0ZXIuc3RhdGUuaGFuZGxlckluZm9zLCAtMSk7Ci0gICAgcmV0dXJuIGhhbmRsZXJJbmZvICYm
IGhhbmRsZXJJbmZvLmhhbmRsZXI7Ci0gIH0KLQotICBmdW5jdGlvbiBoYW5kbGVySW5mb0Zvcihy
b3V0ZSwgaGFuZGxlckluZm9zLCBfb2Zmc2V0KSB7Ci0gICAgaWYgKCFoYW5kbGVySW5mb3MpIHsK
LSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICB2YXIgb2Zmc2V0ID0gX29mZnNldCB8fCAwOwot
ICAgIHZhciBjdXJyZW50OwotICAgIGZvciAodmFyIGkgPSAwLCBsID0gaGFuZGxlckluZm9zLmxl
bmd0aDsgaSA8IGw7IGkrKykgewotICAgICAgY3VycmVudCA9IGhhbmRsZXJJbmZvc1tpXS5oYW5k
bGVyOwotICAgICAgaWYgKGN1cnJlbnQgPT09IHJvdXRlKSB7Ci0gICAgICAgIHJldHVybiBoYW5k
bGVySW5mb3NbaSArIG9mZnNldF07Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24g
YnVpbGRSZW5kZXJPcHRpb25zKHJvdXRlLCBuYW1lUGFzc2VkLCBpc0RlZmF1bHRSZW5kZXIsIG5h
bWUsIG9wdGlvbnMpIHsKLSAgICB2YXIgY29udHJvbGxlciA9IG9wdGlvbnMgJiYgb3B0aW9ucy5j
b250cm9sbGVyOwotICAgIHZhciB0ZW1wbGF0ZU5hbWU7Ci0gICAgdmFyIHZpZXdOYW1lOwotICAg
IHZhciBWaWV3Q2xhc3M7Ci0gICAgdmFyIHRlbXBsYXRlOwotICAgIHZhciBMT0dfVklFV19MT09L
VVBTID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHJvdXRlLnJvdXRlciwgJ25hbWVzcGFj
ZS5MT0dfVklFV19MT09LVVBTJyk7Ci0gICAgdmFyIGludG8gPSBvcHRpb25zICYmIG9wdGlvbnMu
aW50byAmJiBvcHRpb25zLmludG8ucmVwbGFjZSgvXC8vZywgJy4nKTsKLSAgICB2YXIgb3V0bGV0
ID0gb3B0aW9ucyAmJiBvcHRpb25zLm91dGxldCB8fCAnbWFpbic7Ci0gICAgdmFyIG93bmVyID0g
X2NvbnRhaW5lck93bmVyLmdldE93bmVyKHJvdXRlKTsKLQotICAgIGlmIChuYW1lKSB7Ci0gICAg
ICBuYW1lID0gbmFtZS5yZXBsYWNlKC9cLy9nLCAnLicpOwotICAgICAgdGVtcGxhdGVOYW1lID0g
bmFtZTsKLSAgICB9IGVsc2UgewotICAgICAgbmFtZSA9IHJvdXRlLnJvdXRlTmFtZTsKLSAgICAg
IHRlbXBsYXRlTmFtZSA9IHJvdXRlLnRlbXBsYXRlTmFtZSB8fCBuYW1lOwotICAgIH0KLQotICAg
IGlmICghY29udHJvbGxlcikgewotICAgICAgaWYgKG5hbWVQYXNzZWQpIHsKLSAgICAgICAgY29u
dHJvbGxlciA9IG93bmVyLmxvb2t1cCgnY29udHJvbGxlcjonICsgbmFtZSkgfHwgcm91dGUuY29u
dHJvbGxlck5hbWUgfHwgcm91dGUucm91dGVOYW1lOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAg
Y29udHJvbGxlciA9IHJvdXRlLmNvbnRyb2xsZXJOYW1lIHx8IG93bmVyLmxvb2t1cCgnY29udHJv
bGxlcjonICsgbmFtZSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHR5cGVvZiBjb250cm9s
bGVyID09PSAnc3RyaW5nJykgewotICAgICAgdmFyIGNvbnRyb2xsZXJOYW1lID0gY29udHJvbGxl
cjsKLSAgICAgIGNvbnRyb2xsZXIgPSBvd25lci5sb29rdXAoJ2NvbnRyb2xsZXI6JyArIGNvbnRy
b2xsZXJOYW1lKTsKLSAgICAgIGlmICghY29udHJvbGxlcikgewotICAgICAgICB0aHJvdyBuZXcg
X2VtYmVyTWV0YWxFcnJvci5kZWZhdWx0KCdZb3UgcGFzc2VkIGBjb250cm9sbGVyOiBcJycgKyBj
b250cm9sbGVyTmFtZSArICdcJ2AgaW50byB0aGUgYHJlbmRlcmAgbWV0aG9kLCBidXQgbm8gc3Vj
aCBjb250cm9sbGVyIGNvdWxkIGJlIGZvdW5kLicpOwotICAgICAgfQotICAgIH0KLQotICAgIGlm
IChvcHRpb25zICYmIE9iamVjdC5rZXlzKG9wdGlvbnMpLmluZGV4T2YoJ291dGxldCcpICE9PSAt
MSAmJiB0eXBlb2Ygb3B0aW9ucy5vdXRsZXQgPT09ICd1bmRlZmluZWQnKSB7Ci0gICAgICB0aHJv
dyBuZXcgX2VtYmVyTWV0YWxFcnJvci5kZWZhdWx0KCdZb3UgcGFzc2VkIHVuZGVmaW5lZCBhcyB0
aGUgb3V0bGV0IG5hbWUuJyk7Ci0gICAgfQotCi0gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5t
b2RlbCkgewotICAgICAgY29udHJvbGxlci5zZXQoJ21vZGVsJywgb3B0aW9ucy5tb2RlbCk7Ci0g
ICAgfQotCi0gICAgdmlld05hbWUgPSBvcHRpb25zICYmIG9wdGlvbnMudmlldyB8fCBuYW1lUGFz
c2VkICYmIG5hbWUgfHwgcm91dGUudmlld05hbWUgfHwgbmFtZTsKLSAgICBWaWV3Q2xhc3MgPSBv
d25lci5fbG9va3VwRmFjdG9yeSgndmlldzonICsgdmlld05hbWUpOwotICAgIHRlbXBsYXRlID0g
b3duZXIubG9va3VwKCd0ZW1wbGF0ZTonICsgdGVtcGxhdGVOYW1lKTsKLQotICAgIHZhciBwYXJl
bnQ7Ci0gICAgaWYgKGludG8gJiYgKHBhcmVudCA9IHBhcmVudFJvdXRlKHJvdXRlKSkgJiYgaW50
byA9PT0gcGFyZW50Um91dGUocm91dGUpLnJvdXRlTmFtZSkgewotICAgICAgaW50byA9IHVuZGVm
aW5lZDsKLSAgICB9Ci0KLSAgICB2YXIgcmVuZGVyT3B0aW9ucyA9IHsKLSAgICAgIG93bmVyOiBv
d25lciwKLSAgICAgIGludG86IGludG8sCi0gICAgICBvdXRsZXQ6IG91dGxldCwKLSAgICAgIG5h
bWU6IG5hbWUsCi0gICAgICBjb250cm9sbGVyOiBjb250cm9sbGVyLAotICAgICAgVmlld0NsYXNz
OiBWaWV3Q2xhc3MsCi0gICAgICB0ZW1wbGF0ZTogdGVtcGxhdGUgfHwgcm91dGUuX3RvcExldmVs
Vmlld1RlbXBsYXRlCi0gICAgfTsKLQotICAgIHZhciBDb21wb25lbnQgPSB1bmRlZmluZWQ7Ci0K
LSAgICBpZiAoIVZpZXdDbGFzcyAmJiAhdGVtcGxhdGUgJiYgIUNvbXBvbmVudCkgewotICAgICAg
X2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ0NvdWxkIG5vdCBmaW5kICInICsgbmFtZSArICciIHRl
bXBsYXRlLCB2aWV3LCBvciBjb21wb25lbnQuJywgaXNEZWZhdWx0UmVuZGVyKTsKLSAgICAgIGlm
IChMT0dfVklFV19MT09LVVBTKSB7Ci0gICAgICAgIHZhciBmdWxsTmFtZSA9ICd0ZW1wbGF0ZTon
ICsgbmFtZTsKLSAgICAgICAgX2VtYmVyTWV0YWxEZWJ1Zy5pbmZvKCdDb3VsZCBub3QgZmluZCAi
JyArIG5hbWUgKyAnIiB0ZW1wbGF0ZSBvciB2aWV3LiBOb3RoaW5nIHdpbGwgYmUgcmVuZGVyZWQn
LCB7IGZ1bGxOYW1lOiBmdWxsTmFtZSB9KTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4g
cmVuZGVyT3B0aW9uczsKLSAgfQotCi0gIGZ1bmN0aW9uIGdldEZ1bGxRdWVyeVBhcmFtcyhyb3V0
ZXIsIHN0YXRlKSB7Ci0gICAgaWYgKHN0YXRlLmZ1bGxRdWVyeVBhcmFtcykgewotICAgICAgcmV0
dXJuIHN0YXRlLmZ1bGxRdWVyeVBhcmFtczsKLSAgICB9Ci0KLSAgICBzdGF0ZS5mdWxsUXVlcnlQ
YXJhbXMgPSB7fTsKLSAgICBfZW1iZXJNZXRhbEFzc2lnbi5kZWZhdWx0KHN0YXRlLmZ1bGxRdWVy
eVBhcmFtcywgc3RhdGUucXVlcnlQYXJhbXMpOwotCi0gICAgdmFyIHRhcmdldFJvdXRlTmFtZSA9
IHN0YXRlLmhhbmRsZXJJbmZvc1tzdGF0ZS5oYW5kbGVySW5mb3MubGVuZ3RoIC0gMV0ubmFtZTsK
LSAgICByb3V0ZXIuX2Rlc2VyaWFsaXplUXVlcnlQYXJhbXModGFyZ2V0Um91dGVOYW1lLCBzdGF0
ZS5mdWxsUXVlcnlQYXJhbXMpOwotICAgIHJldHVybiBzdGF0ZS5mdWxsUXVlcnlQYXJhbXM7Ci0g
IH0KLQotICBmdW5jdGlvbiBnZXRRdWVyeVBhcmFtc0Zvcihyb3V0ZSwgc3RhdGUpIHsKLSAgICBz
dGF0ZS5xdWVyeVBhcmFtc0ZvciA9IHN0YXRlLnF1ZXJ5UGFyYW1zRm9yIHx8IHt9OwotICAgIHZh
ciBuYW1lID0gcm91dGUucm91dGVOYW1lOwotCi0gICAgaWYgKHN0YXRlLnF1ZXJ5UGFyYW1zRm9y
W25hbWVdKSB7Ci0gICAgICByZXR1cm4gc3RhdGUucXVlcnlQYXJhbXNGb3JbbmFtZV07Ci0gICAg
fQotCi0gICAgdmFyIGZ1bGxRdWVyeVBhcmFtcyA9IGdldEZ1bGxRdWVyeVBhcmFtcyhyb3V0ZS5y
b3V0ZXIsIHN0YXRlKTsKLQotICAgIHZhciBwYXJhbXMgPSBzdGF0ZS5xdWVyeVBhcmFtc0Zvcltu
YW1lXSA9IHt9OwotCi0gICAgLy8gQ29weSBvdmVyIGFsbCB0aGUgcXVlcnkgcGFyYW1zIGZvciB0
aGlzIHJvdXRlL2NvbnRyb2xsZXIgaW50byBwYXJhbXMgaGFzaC4KLSAgICB2YXIgcXBNZXRhID0g
X2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHJvdXRlLCAnX3FwJyk7Ci0gICAgdmFyIHFwcyA9
IHFwTWV0YS5xcHM7Ci0gICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHFwcy5sZW5ndGg7IGkgPCBs
ZW47ICsraSkgewotICAgICAgLy8gUHV0IGRlc2VyaWFsaXplZCBxcCBvbiBwYXJhbXMgaGFzaC4K
LSAgICAgIHZhciBxcCA9IHFwc1tpXTsKLQotICAgICAgdmFyIHFwVmFsdWVXYXNQYXNzZWRJbiA9
IChxcC5wcm9wIGluIGZ1bGxRdWVyeVBhcmFtcyk7Ci0gICAgICBwYXJhbXNbcXAucHJvcF0gPSBx
cFZhbHVlV2FzUGFzc2VkSW4gPyBmdWxsUXVlcnlQYXJhbXNbcXAucHJvcF0gOiBjb3B5RGVmYXVs
dFZhbHVlKHFwLmRlZmF1bHRWYWx1ZSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHBhcmFtczsKLSAg
fQotCi0gIGZ1bmN0aW9uIGNvcHlEZWZhdWx0VmFsdWUodmFsdWUpIHsKLSAgICBpZiAoQXJyYXku
aXNBcnJheSh2YWx1ZSkpIHsKLSAgICAgIHJldHVybiBfZW1iZXJSdW50aW1lU3lzdGVtTmF0aXZl
X2FycmF5LkEodmFsdWUuc2xpY2UoKSk7Ci0gICAgfQotICAgIHJldHVybiB2YWx1ZTsKLSAgfQot
Ci0gIC8qCi0gICAgTWVyZ2VzIGFsbCBxdWVyeSBwYXJhbWV0ZXJzIGZyb20gYSBjb250cm9sbGVy
IHdpdGggdGhvc2UgZnJvbQotICAgIGEgcm91dGUsIHJldHVybmluZyBhIG5ldyBvYmplY3QgYW5k
IGF2b2lkaW5nIGFueSBtdXRhdGlvbnMgdG8KLSAgICB0aGUgZXhpc3Rpbmcgb2JqZWN0cy4KLSAg
Ki8KLSAgZnVuY3Rpb24gbWVyZ2VFYWNoUXVlcnlQYXJhbXMoY29udHJvbGxlclFQLCByb3V0ZVFQ
KSB7Ci0gICAgdmFyIGtleXNBbHJlYWR5TWVyZ2VkT3JTa2lwcGFibGU7Ci0gICAgdmFyIHFwcyA9
IHt9OwotCi0gICAga2V5c0FscmVhZHlNZXJnZWRPclNraXBwYWJsZSA9IHsKLSAgICAgIGRlZmF1
bHRWYWx1ZTogdHJ1ZSwKLSAgICAgIHR5cGU6IHRydWUsCi0gICAgICBzY29wZTogdHJ1ZSwKLSAg
ICAgIGFzOiB0cnVlCi0gICAgfTsKLQotICAgIC8vIGZpcnN0IGxvb3Agb3ZlciBhbGwgY29udHJv
bGxlciBxcHMsIG1lcmdpbmcgdGhlbSB3aXRoIGFueSBtYXRjaGluZyByb3V0ZSBxcHMKLSAgICAv
LyBpbnRvIGEgbmV3IGVtcHR5IG9iamVjdCB0byBhdm9pZCBtdXRhdGluZy4KLSAgICBmb3IgKHZh
ciBjcXBOYW1lIGluIGNvbnRyb2xsZXJRUCkgewotICAgICAgaWYgKCFjb250cm9sbGVyUVAuaGFz
T3duUHJvcGVydHkoY3FwTmFtZSkpIHsKLSAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0KLSAg
ICAgIHZhciBuZXdDb250cm9sbGVyUGFyYW1ldGVyQ29uZmlndXJhdGlvbiA9IHt9OwotICAgICAg
X2VtYmVyTWV0YWxBc3NpZ24uZGVmYXVsdChuZXdDb250cm9sbGVyUGFyYW1ldGVyQ29uZmlndXJh
dGlvbiwgY29udHJvbGxlclFQW2NxcE5hbWVdKTsKLSAgICAgIF9lbWJlck1ldGFsQXNzaWduLmRl
ZmF1bHQobmV3Q29udHJvbGxlclBhcmFtZXRlckNvbmZpZ3VyYXRpb24sIHJvdXRlUVBbY3FwTmFt
ZV0pOwotCi0gICAgICBxcHNbY3FwTmFtZV0gPSBuZXdDb250cm9sbGVyUGFyYW1ldGVyQ29uZmln
dXJhdGlvbjsKLQotICAgICAgLy8gYWxsb3dzIHVzIHRvIHNraXAgdGhpcyBRUCB3aGVuIHdlIGNo
ZWNrIHJvdXRlIFFQcy4KLSAgICAgIGtleXNBbHJlYWR5TWVyZ2VkT3JTa2lwcGFibGVbY3FwTmFt
ZV0gPSB0cnVlOwotICAgIH0KLQotICAgIC8vIGxvb3Agb3ZlciBhbGwgcm91dGUgcXBzLCBza2lw
cGluZyB0aG9zZSB0aGF0IHdlcmUgbWVyZ2VkIGluIHRoZSBmaXJzdCBwYXNzCi0gICAgLy8gYmVj
YXVzZSB0aGV5IGFsc28gYXBwZWFyIGluIGNvbnRyb2xsZXIgcXBzCi0gICAgZm9yICh2YXIgcnFw
TmFtZSBpbiByb3V0ZVFQKSB7Ci0gICAgICBpZiAoIXJvdXRlUVAuaGFzT3duUHJvcGVydHkocnFw
TmFtZSkgfHwga2V5c0FscmVhZHlNZXJnZWRPclNraXBwYWJsZVtycXBOYW1lXSkgewotICAgICAg
ICBjb250aW51ZTsKLSAgICAgIH0KLQotICAgICAgdmFyIG5ld1JvdXRlUGFyYW1ldGVyQ29uZmln
dXJhdGlvbiA9IHt9OwotICAgICAgX2VtYmVyTWV0YWxBc3NpZ24uZGVmYXVsdChuZXdSb3V0ZVBh
cmFtZXRlckNvbmZpZ3VyYXRpb24sIHJvdXRlUVBbcnFwTmFtZV0sIGNvbnRyb2xsZXJRUFtycXBO
YW1lXSk7Ci0gICAgICBxcHNbcnFwTmFtZV0gPSBuZXdSb3V0ZVBhcmFtZXRlckNvbmZpZ3VyYXRp
b247Ci0gICAgfQotCi0gICAgcmV0dXJuIHFwczsKLSAgfQotCi0gIGZ1bmN0aW9uIGFkZFF1ZXJ5
UGFyYW1zT2JzZXJ2ZXJzKGNvbnRyb2xsZXIsIHByb3BOYW1lcykgewotICAgIHByb3BOYW1lcy5m
b3JFYWNoKGZ1bmN0aW9uIChwcm9wKSB7Ci0gICAgICBjb250cm9sbGVyLmFkZE9ic2VydmVyKHBy
b3AgKyAnLltdJywgY29udHJvbGxlciwgY29udHJvbGxlci5fcXBDaGFuZ2VkKTsKLSAgICB9KTsK
LSAgfQotCi0gIGZ1bmN0aW9uIGRlcHJlY2F0ZVF1ZXJ5UGFyYW1EZWZhdWx0VmFsdWVzU2V0T25D
b250cm9sbGVyKGNvbnRyb2xsZXJOYW1lLCByb3V0ZU5hbWUsIHByb3BOYW1lKSB7Ci0gICAgX2Vt
YmVyTWV0YWxEZWJ1Zy5kZXByZWNhdGUoJ0NvbmZpZ3VyaW5nIHF1ZXJ5IHBhcmFtZXRlciBkZWZh
dWx0IHZhbHVlcyBvbiBjb250cm9sbGVycyBpcyBkZXByZWNhdGVkLiBQbGVhc2UgbW92ZSB0aGUg
dmFsdWUgZm9yIHRoZSBwcm9wZXJ0eSBcJycgKyBwcm9wTmFtZSArICdcJyBmcm9tIHRoZSBcJycg
KyBjb250cm9sbGVyTmFtZSArICdcJyBjb250cm9sbGVyIHRvIHRoZSBcJycgKyByb3V0ZU5hbWUg
KyAnXCcgcm91dGUgaW4gdGhlIGZvcm1hdDoge3F1ZXJ5UGFyYW1zOiAnICsgcHJvcE5hbWUgKyAn
OiB7ZGVmYXVsdFZhbHVlOiA8ZGVmYXVsdCB2YWx1ZT4gfX0nLCBmYWxzZSwgeyBpZDogJ2VtYmVy
LXJvdXRpbmcuZGVwcmVjYXRlLXF1ZXJ5LXBhcmFtLWRlZmF1bHQtdmFsdWVzLXNldC1vbi1jb250
cm9sbGVyJywgdW50aWw6ICczLjAuMCcgfSk7Ci0gIH0KLQotICBleHBvcnRzLmRlZmF1bHQgPSBS
b3V0ZTsKLX0pOwotLy8gRkVBVFVSRVMsIEEsIGRlcHJlY2F0ZSwgYXNzZXJ0LCBMb2dnZXIKLQot
Ly8gYXBwbHkgZGVmYXVsdCB2YWx1ZXMgdG8gY29udHJvbGxlcnMKLS8vIGRldGVjdCB0aGF0IGRl
ZmF1bHQgdmFsdWUgZGVmaW5lZCBvbiByb3V0ZXIgY29uZmlnCi0KLS8vIGRldGVjdCB0aGF0IHBy
b3BlcnR5IHdhcyBub3QgZGVmaW5lZCBvbiBjb250cm9sbGVyCi1lbmlmZWQoJ2VtYmVyLXJvdXRp
bmcvc3lzdGVtL3JvdXRlcicsIFsnZXhwb3J0cycsICdlbWJlci1tZXRhbC9sb2dnZXInLCAnZW1i
ZXItbWV0YWwvZGVidWcnLCAnZW1iZXItbWV0YWwvZXJyb3InLCAnZW1iZXItbWV0YWwvcHJvcGVy
dHlfZ2V0JywgJ2VtYmVyLW1ldGFsL3Byb3BlcnR5X3NldCcsICdlbWJlci1tZXRhbC9wcm9wZXJ0
aWVzJywgJ2VtYmVyLW1ldGFsL2VtcHR5X29iamVjdCcsICdlbWJlci1tZXRhbC9jb21wdXRlZCcs
ICdlbWJlci1tZXRhbC9hc3NpZ24nLCAnZW1iZXItbWV0YWwvcnVuX2xvb3AnLCAnZW1iZXItcnVu
dGltZS9zeXN0ZW0vb2JqZWN0JywgJ2VtYmVyLXJ1bnRpbWUvbWl4aW5zL2V2ZW50ZWQnLCAnZW1i
ZXItcm91dGluZy9zeXN0ZW0vZHNsJywgJ2VtYmVyLXJvdXRpbmcvbG9jYXRpb24vYXBpJywgJ2Vt
YmVyLXJvdXRpbmcvdXRpbHMnLCAnZW1iZXItbWV0YWwvdXRpbHMnLCAnZW1iZXItcm91dGluZy9z
eXN0ZW0vcm91dGVyX3N0YXRlJywgJ2NvbnRhaW5lci9vd25lcicsICdlbWJlci1tZXRhbC9kaWN0
aW9uYXJ5JywgJ3JvdXRlcicsICdyb3V0ZXIvdHJhbnNpdGlvbiddLCBmdW5jdGlvbiAoZXhwb3J0
cywgX2VtYmVyTWV0YWxMb2dnZXIsIF9lbWJlck1ldGFsRGVidWcsIF9lbWJlck1ldGFsRXJyb3Is
IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LCBfZW1iZXJNZXRhbFByb3BlcnR5X3NldCwgX2VtYmVy
TWV0YWxQcm9wZXJ0aWVzLCBfZW1iZXJNZXRhbEVtcHR5X29iamVjdCwgX2VtYmVyTWV0YWxDb21w
dXRlZCwgX2VtYmVyTWV0YWxBc3NpZ24sIF9lbWJlck1ldGFsUnVuX2xvb3AsIF9lbWJlclJ1bnRp
bWVTeXN0ZW1PYmplY3QsIF9lbWJlclJ1bnRpbWVNaXhpbnNFdmVudGVkLCBfZW1iZXJSb3V0aW5n
U3lzdGVtRHNsLCBfZW1iZXJSb3V0aW5nTG9jYXRpb25BcGksIF9lbWJlclJvdXRpbmdVdGlscywg
X2VtYmVyTWV0YWxVdGlscywgX2VtYmVyUm91dGluZ1N5c3RlbVJvdXRlcl9zdGF0ZSwgX2NvbnRh
aW5lck93bmVyLCBfZW1iZXJNZXRhbERpY3Rpb25hcnksIF9yb3V0ZXI0LCBfcm91dGVyVHJhbnNp
dGlvbikgewotICAndXNlIHN0cmljdCc7Ci0KLSAgZXhwb3J0cy50cmlnZ2VyRXZlbnQgPSB0cmln
Z2VyRXZlbnQ7Ci0KLSAgZnVuY3Rpb24gSygpIHsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotCi0g
IHZhciBzbGljZSA9IFtdLnNsaWNlOwotCi0gIC8qKgotICAgIFRoZSBgRW1iZXIuUm91dGVyYCBj
bGFzcyBtYW5hZ2VzIHRoZSBhcHBsaWNhdGlvbiBzdGF0ZSBhbmQgVVJMcy4gUmVmZXIgdG8KLSAg
ICB0aGUgW3JvdXRpbmcgZ3VpZGVdKGh0dHA6Ly9lbWJlcmpzLmNvbS9ndWlkZXMvcm91dGluZy8p
IGZvciBkb2N1bWVudGF0aW9uLgotICAKLSAgICBAY2xhc3MgUm91dGVyCi0gICAgQG5hbWVzcGFj
ZSBFbWJlcgotICAgIEBleHRlbmRzIEVtYmVyLk9iamVjdAotICAgIEB1c2VzIEVtYmVyLkV2ZW50
ZWQKLSAgICBAcHVibGljCi0gICovCi0gIHZhciBFbWJlclJvdXRlciA9IF9lbWJlclJ1bnRpbWVT
eXN0ZW1PYmplY3QuZGVmYXVsdC5leHRlbmQoX2VtYmVyUnVudGltZU1peGluc0V2ZW50ZWQuZGVm
YXVsdCwgewotICAgIC8qKgotICAgICAgVGhlIGBsb2NhdGlvbmAgcHJvcGVydHkgZGV0ZXJtaW5l
cyB0aGUgdHlwZSBvZiBVUkwncyB0aGF0IHlvdXIKLSAgICAgIGFwcGxpY2F0aW9uIHdpbGwgdXNl
LgotICAgICAgIFRoZSBmb2xsb3dpbmcgbG9jYXRpb24gdHlwZXMgYXJlIGN1cnJlbnRseSBhdmFp
bGFibGU6Ci0gICAgICAgKiBgaGlzdG9yeWAgLSB1c2UgdGhlIGJyb3dzZXIncyBoaXN0b3J5IEFQ
SSB0byBtYWtlIHRoZSBVUkxzIGxvb2sganVzdCBsaWtlIGFueSBzdGFuZGFyZCBVUkwKLSAgICAg
ICogYGhhc2hgIC0gdXNlIGAjYCB0byBzZXBhcmF0ZSB0aGUgc2VydmVyIHBhcnQgb2YgdGhlIFVS
TCBmcm9tIHRoZSBFbWJlciBwYXJ0OiBgL2Jsb2cvIy9wb3N0cy9uZXdgCi0gICAgICAqIGBub25l
YCAtIGRvIG5vdCBzdG9yZSB0aGUgRW1iZXIgVVJMIGluIHRoZSBhY3R1YWwgYnJvd3NlciBVUkwg
KG1haW5seSB1c2VkIGZvciB0ZXN0aW5nKQotICAgICAgKiBgYXV0b2AgLSB1c2UgdGhlIGJlc3Qg
b3B0aW9uIGJhc2VkIG9uIGJyb3dzZXIgY2FwYWJpbGl0ZXM6IGBoaXN0b3J5YCBpZiBwb3NzaWJs
ZSwgdGhlbiBgaGFzaGAgaWYgcG9zc2libGUsIG90aGVyd2lzZSBgbm9uZWAKLSAgICAgICBOb3Rl
OiBJZiB1c2luZyBlbWJlci1jbGksIHRoaXMgdmFsdWUgaXMgZGVmYXVsdGVkIHRvIGBhdXRvYCBi
eSB0aGUgYGxvY2F0aW9uVHlwZWAgc2V0dGluZyBvZiBgL2NvbmZpZy9lbnZpcm9ubWVudC5qc2AK
LSAgICAgICBAcHJvcGVydHkgbG9jYXRpb24KLSAgICAgIEBkZWZhdWx0ICdoYXNoJwotICAgICAg
QHNlZSB7RW1iZXIuTG9jYXRpb259Ci0gICAgICBAcHVibGljCi0gICAgKi8KLSAgICBsb2NhdGlv
bjogJ2hhc2gnLAotCi0gICAgLyoqCi0gICAgIFJlcHJlc2VudHMgdGhlIFVSTCBvZiB0aGUgcm9v
dCBvZiB0aGUgYXBwbGljYXRpb24sIG9mdGVuICcvJy4gVGhpcyBwcmVmaXggaXMKLSAgICAgYXNz
dW1lZCBvbiBhbGwgcm91dGVzIGRlZmluZWQgb24gdGhpcyByb3V0ZXIuCi0gICAgICBAcHJvcGVy
dHkgcm9vdFVSTAotICAgICBAZGVmYXVsdCAnLycKLSAgICAgQHB1YmxpYwotICAgICovCi0gICAg
cm9vdFVSTDogJy8nLAotCi0gICAgX2luaXRSb3V0ZXJKczogZnVuY3Rpb24gKCkgewotICAgICAg
dmFyIHJvdXRlciA9IHRoaXMucm91dGVyID0gbmV3IF9yb3V0ZXI0LmRlZmF1bHQoKTsKLSAgICAg
IHJvdXRlci50cmlnZ2VyRXZlbnQgPSB0cmlnZ2VyRXZlbnQ7Ci0KLSAgICAgIHJvdXRlci5fdHJp
Z2dlcldpbGxDaGFuZ2VDb250ZXh0ID0gSzsKLSAgICAgIHJvdXRlci5fdHJpZ2dlcldpbGxMZWF2
ZSA9IEs7Ci0KLSAgICAgIHZhciBkc2xDYWxsYmFja3MgPSB0aGlzLmNvbnN0cnVjdG9yLmRzbENh
bGxiYWNrcyB8fCBbS107Ci0gICAgICB2YXIgZHNsID0gdGhpcy5fYnVpbGREU0woKTsKLQotICAg
ICAgZHNsLnJvdXRlKCdhcHBsaWNhdGlvbicsIHsgcGF0aDogJy8nLCByZXNldE5hbWVzcGFjZTog
dHJ1ZSwgb3ZlcnJpZGVOYW1lQXNzZXJ0aW9uOiB0cnVlIH0sIGZ1bmN0aW9uICgpIHsKLSAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkc2xDYWxsYmFja3MubGVuZ3RoOyBpKyspIHsKLSAgICAg
ICAgICBkc2xDYWxsYmFja3NbaV0uY2FsbCh0aGlzKTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0K
LSAgICAgIGlmIChfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywgJ25hbWVzcGFjZS5M
T0dfVFJBTlNJVElPTlNfSU5URVJOQUwnKSkgewotICAgICAgICByb3V0ZXIubG9nID0gX2VtYmVy
TWV0YWxMb2dnZXIuZGVmYXVsdC5kZWJ1ZzsKLSAgICAgIH0KLQotICAgICAgcm91dGVyLm1hcChk
c2wuZ2VuZXJhdGUoKSk7Ci0gICAgfSwKLQotICAgIF9idWlsZERTTDogZnVuY3Rpb24gKCkgewot
ICAgICAgdmFyIG1vZHVsZUJhc2VkUmVzb2x2ZXIgPSB0aGlzLl9oYXNNb2R1bGVCYXNlZFJlc29s
dmVyKCk7Ci0KLSAgICAgIHJldHVybiBuZXcgX2VtYmVyUm91dGluZ1N5c3RlbURzbC5kZWZhdWx0
KG51bGwsIHsKLSAgICAgICAgZW5hYmxlTG9hZGluZ1N1YnN0YXRlczogISFtb2R1bGVCYXNlZFJl
c29sdmVyCi0gICAgICB9KTsKLSAgICB9LAotCi0gICAgaW5pdDogZnVuY3Rpb24gKCkgewotICAg
ICAgdGhpcy5fc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKLQotICAgICAgdGhpcy5fYWN0
aXZlVmlld3MgPSB7fTsKLSAgICAgIHRoaXMuX3FwQ2FjaGUgPSBuZXcgX2VtYmVyTWV0YWxFbXB0
eV9vYmplY3QuZGVmYXVsdCgpOwotICAgICAgdGhpcy5fcmVzZXRRdWV1ZWRRdWVyeVBhcmFtZXRl
ckNoYW5nZXMoKTsKLSAgICAgIHRoaXMuX2hhbmRsZWRFcnJvcnMgPSBfZW1iZXJNZXRhbERpY3Rp
b25hcnkuZGVmYXVsdChudWxsKTsKLSAgICB9LAotCi0gICAgLyoKLSAgICAgIFJlc2V0cyBhbGwg
cGVuZGluZyBxdWVyeSBwYXJhbXRlciBjaGFuZ2VzLgotICAgICAgQ2FsbGVkIGFmdGVyIHRyYW5z
aXRpb25pbmcgdG8gYSBuZXcgcm91dGUKLSAgICAgIGJhc2VkIG9uIHF1ZXJ5IHBhcmFtZXRlciBj
aGFuZ2VzLgotICAgICovCi0gICAgX3Jlc2V0UXVldWVkUXVlcnlQYXJhbWV0ZXJDaGFuZ2VzOiBm
dW5jdGlvbiAoKSB7Ci0gICAgICB0aGlzLl9xdWV1ZWRRUENoYW5nZXMgPSB7fTsKLSAgICB9LAot
Ci0gICAgLyoqCi0gICAgICBSZXByZXNlbnRzIHRoZSBjdXJyZW50IFVSTC4KLSAgICAgICBAbWV0
aG9kIHVybAotICAgICAgQHJldHVybiB7U3RyaW5nfSBUaGUgY3VycmVudCBVUkwuCi0gICAgICBA
cHJpdmF0ZQotICAgICovCi0gICAgdXJsOiBfZW1iZXJNZXRhbENvbXB1dGVkLmNvbXB1dGVkKGZ1
bmN0aW9uICgpIHsKLSAgICAgIHJldHVybiBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodGhp
cywgJ2xvY2F0aW9uJykuZ2V0VVJMKCk7Ci0gICAgfSksCi0KLSAgICBfaGFzTW9kdWxlQmFzZWRS
ZXNvbHZlcjogZnVuY3Rpb24gKCkgewotICAgICAgdmFyIG93bmVyID0gX2NvbnRhaW5lck93bmVy
LmdldE93bmVyKHRoaXMpOwotCi0gICAgICBpZiAoIW93bmVyKSB7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgIH0KLQotICAgICAgdmFyIHJlc29sdmVyID0gb3duZXIuYXBwbGljYXRpb24g
JiYgb3duZXIuYXBwbGljYXRpb24uX19yZWdpc3RyeV9fICYmIG93bmVyLmFwcGxpY2F0aW9uLl9f
cmVnaXN0cnlfXy5yZXNvbHZlcjsKLQotICAgICAgaWYgKCFyZXNvbHZlcikgewotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0KLSAgICAgIHJldHVybiAhIXJlc29sdmVyLm1vZHVsZUJh
c2VkUmVzb2x2ZXI7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAgSW5pdGlhbGl6ZXMgdGhlIGN1
cnJlbnQgcm91dGVyIGluc3RhbmNlIGFuZCBzZXRzIHVwIHRoZSBjaGFuZ2UgaGFuZGxpbmcKLSAg
ICAgIGV2ZW50IGxpc3RlbmVycyB1c2VkIGJ5IHRoZSBpbnN0YW5jZXMgYGxvY2F0aW9uYCBpbXBs
ZW1lbnRhdGlvbi4KLSAgICAgICBBIHByb3BlcnR5IG5hbWVkIGBpbml0aWFsVVJMYCB3aWxsIGJl
IHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBpbml0aWFsIFVSTC4KLSAgICAgIElmIG5vIHZhbHVlIGlz
IGZvdW5kIGAvYCB3aWxsIGJlIHVzZWQuCi0gICAgICAgQG1ldGhvZCBzdGFydFJvdXRpbmcKLSAg
ICAgIEBwcml2YXRlCi0gICAgKi8KLSAgICBzdGFydFJvdXRpbmc6IGZ1bmN0aW9uICgpIHsKLSAg
ICAgIHZhciBpbml0aWFsVVJMID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsICdp
bml0aWFsVVJMJyk7Ci0KLSAgICAgIGlmICh0aGlzLnNldHVwUm91dGVyKCkpIHsKLSAgICAgICAg
aWYgKHR5cGVvZiBpbml0aWFsVVJMID09PSAndW5kZWZpbmVkJykgewotICAgICAgICAgIGluaXRp
YWxVUkwgPSBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywgJ2xvY2F0aW9uJykuZ2V0
VVJMKCk7Ci0gICAgICAgIH0KLSAgICAgICAgdmFyIGluaXRpYWxUcmFuc2l0aW9uID0gdGhpcy5o
YW5kbGVVUkwoaW5pdGlhbFVSTCk7Ci0gICAgICAgIGlmIChpbml0aWFsVHJhbnNpdGlvbiAmJiBp
bml0aWFsVHJhbnNpdGlvbi5lcnJvcikgewotICAgICAgICAgIHRocm93IGluaXRpYWxUcmFuc2l0
aW9uLmVycm9yOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLQotICAgIHNldHVwUm91dGVy
OiBmdW5jdGlvbiAoKSB7Ci0gICAgICB2YXIgX3RoaXMgPSB0aGlzOwotCi0gICAgICB0aGlzLl9p
bml0Um91dGVySnMoKTsKLSAgICAgIHRoaXMuX3NldHVwTG9jYXRpb24oKTsKLQotICAgICAgdmFy
IHJvdXRlciA9IHRoaXMucm91dGVyOwotICAgICAgdmFyIGxvY2F0aW9uID0gX2VtYmVyTWV0YWxQ
cm9wZXJ0eV9nZXQuZ2V0KHRoaXMsICdsb2NhdGlvbicpOwotCi0gICAgICAvLyBBbGxvdyB0aGUg
TG9jYXRpb24gY2xhc3MgdG8gY2FuY2VsIHRoZSByb3V0ZXIgc2V0dXAgd2hpbGUgaXQgcmVmcmVz
aGVzCi0gICAgICAvLyB0aGUgcGFnZQotICAgICAgaWYgKF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0
LmdldChsb2NhdGlvbiwgJ2NhbmNlbFJvdXRlclNldHVwJykpIHsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgfQotCi0gICAgICB0aGlzLl9zZXR1cFJvdXRlcihyb3V0ZXIsIGxvY2F0aW9u
KTsKLQotICAgICAgbG9jYXRpb24ub25VcGRhdGVVUkwoZnVuY3Rpb24gKHVybCkgewotICAgICAg
ICBfdGhpcy5oYW5kbGVVUkwodXJsKTsKLSAgICAgIH0pOwotCi0gICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9LAotCi0gICAgLyoqCi0gICAgICBIYW5kbGVzIHVwZGF0aW5nIHRoZSBwYXRocyBhbmQg
bm90aWZ5aW5nIGFueSBsaXN0ZW5lcnMgb2YgdGhlIFVSTAotICAgICAgY2hhbmdlLgotICAgICAg
IFRyaWdnZXJzIHRoZSByb3V0ZXIgbGV2ZWwgYGRpZFRyYW5zaXRpb25gIGhvb2suCi0gICAgICAg
Rm9yIGV4YW1wbGUsIHRvIG5vdGlmeSBnb29nbGUgYW5hbHl0aWNzIHdoZW4gdGhlIHJvdXRlIGNo
YW5nZXMsCi0gICAgICB5b3UgY291bGQgdXNlIHRoaXMgaG9vay4gIChOb3RlOiByZXF1aXJlcyBh
bHNvIGluY2x1ZGluZyBHQSBzY3JpcHRzLCBldGMuKQotICAgICAgIGBgYGphdmFzY3JpcHQKLSAg
ICAgIHZhciBSb3V0ZXIgPSBFbWJlci5Sb3V0ZXIuZXh0ZW5kKHsKLSAgICAgICAgbG9jYXRpb246
IGNvbmZpZy5sb2NhdGlvblR5cGUsCi0gICAgICAgICBkaWRUcmFuc2l0aW9uOiBmdW5jdGlvbigp
IHsKLSAgICAgICAgICB0aGlzLl9zdXBlciguLi5hcmd1bWVudHMpOwotICAgICAgICAgICByZXR1
cm4gZ2EoJ3NlbmQnLCAncGFnZXZpZXcnLCB7Ci0gICAgICAgICAgICAncGFnZSc6IHRoaXMuZ2V0
KCd1cmwnKSwKLSAgICAgICAgICAgICd0aXRsZSc6IHRoaXMuZ2V0KCd1cmwnKQotICAgICAgICAg
IH0pOwotICAgICAgICB9Ci0gICAgICB9KTsKLSAgICAgIGBgYAotICAgICAgIEBtZXRob2QgZGlk
VHJhbnNpdGlvbgotICAgICAgQHB1YmxpYwotICAgICAgQHNpbmNlIDEuMi4wCi0gICAgKi8KLSAg
ICBkaWRUcmFuc2l0aW9uOiBmdW5jdGlvbiAoaW5mb3MpIHsKLSAgICAgIHVwZGF0ZVBhdGhzKHRo
aXMpOwotCi0gICAgICB0aGlzLl9jYW5jZWxTbG93VHJhbnNpdGlvblRpbWVyKCk7Ci0KLSAgICAg
IHRoaXMubm90aWZ5UHJvcGVydHlDaGFuZ2UoJ3VybCcpOwotICAgICAgdGhpcy5zZXQoJ2N1cnJl
bnRTdGF0ZScsIHRoaXMudGFyZ2V0U3RhdGUpOwotCi0gICAgICAvLyBQdXQgdGhpcyBpbiB0aGUg
cnVubG9vcCBzbyB1cmwgd2lsbCBiZSBhY2N1cmF0ZS4gU2VlbXMKLSAgICAgIC8vIGxlc3Mgc3Vy
cHJpc2luZyB0aGFuIGRpZFRyYW5zaXRpb24gYmVpbmcgb3V0IG9mIHN5bmMuCi0gICAgICBfZW1i
ZXJNZXRhbFJ1bl9sb29wLmRlZmF1bHQub25jZSh0aGlzLCB0aGlzLnRyaWdnZXIsICdkaWRUcmFu
c2l0aW9uJyk7Ci0KLSAgICAgIGlmIChfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywg
J25hbWVzcGFjZScpLkxPR19UUkFOU0lUSU9OUykgewotICAgICAgICBfZW1iZXJNZXRhbExvZ2dl
ci5kZWZhdWx0LmxvZygnVHJhbnNpdGlvbmVkIGludG8gXCcnICsgRW1iZXJSb3V0ZXIuX3JvdXRl
UGF0aChpbmZvcykgKyAnXCcnKTsKLSAgICAgIH0KLSAgICB9LAotCi0gICAgX3NldE91dGxldHM6
IGZ1bmN0aW9uICgpIHsKLSAgICAgIHZhciBoYW5kbGVySW5mb3MgPSB0aGlzLnJvdXRlci5jdXJy
ZW50SGFuZGxlckluZm9zOwotICAgICAgdmFyIHJvdXRlOwotICAgICAgdmFyIGRlZmF1bHRQYXJl
bnRTdGF0ZTsKLSAgICAgIHZhciBsaXZlUm91dGVzID0gbnVsbDsKLQotICAgICAgaWYgKCFoYW5k
bGVySW5mb3MpIHsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotCi0gICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IGhhbmRsZXJJbmZvcy5sZW5ndGg7IGkrKykgewotICAgICAgICByb3V0ZSA9IGhh
bmRsZXJJbmZvc1tpXS5oYW5kbGVyOwotICAgICAgICB2YXIgY29ubmVjdGlvbnMgPSByb3V0ZS5j
b25uZWN0aW9uczsKLSAgICAgICAgdmFyIG93blN0YXRlOwotICAgICAgICBmb3IgKHZhciBqID0g
MDsgaiA8IGNvbm5lY3Rpb25zLmxlbmd0aDsgaisrKSB7Ci0gICAgICAgICAgdmFyIGFwcGVuZGVk
ID0gYXBwZW5kTGl2ZVJvdXRlKGxpdmVSb3V0ZXMsIGRlZmF1bHRQYXJlbnRTdGF0ZSwgY29ubmVj
dGlvbnNbal0pOwotICAgICAgICAgIGxpdmVSb3V0ZXMgPSBhcHBlbmRlZC5saXZlUm91dGVzOwot
ICAgICAgICAgIGlmIChhcHBlbmRlZC5vd25TdGF0ZS5yZW5kZXIubmFtZSA9PT0gcm91dGUucm91
dGVOYW1lIHx8IGFwcGVuZGVkLm93blN0YXRlLnJlbmRlci5vdXRsZXQgPT09ICdtYWluJykgewot
ICAgICAgICAgICAgb3duU3RhdGUgPSBhcHBlbmRlZC5vd25TdGF0ZTsKLSAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICAgICAgaWYgKGNvbm5lY3Rpb25zLmxlbmd0aCA9PT0gMCkgewotICAgICAg
ICAgIG93blN0YXRlID0gcmVwcmVzZW50RW1wdHlSb3V0ZShsaXZlUm91dGVzLCBkZWZhdWx0UGFy
ZW50U3RhdGUsIHJvdXRlKTsKLSAgICAgICAgfQotICAgICAgICBkZWZhdWx0UGFyZW50U3RhdGUg
PSBvd25TdGF0ZTsKLSAgICAgIH0KLSAgICAgIGlmICghdGhpcy5fdG9wbGV2ZWxWaWV3KSB7Ci0g
ICAgICAgIHZhciBvd25lciA9IF9jb250YWluZXJPd25lci5nZXRPd25lcih0aGlzKTsKLSAgICAg
ICAgdmFyIE91dGxldFZpZXcgPSBvd25lci5fbG9va3VwRmFjdG9yeSgndmlldzotb3V0bGV0Jyk7
Ci0gICAgICAgIHRoaXMuX3RvcGxldmVsVmlldyA9IE91dGxldFZpZXcuY3JlYXRlKCk7Ci0gICAg
ICAgIHRoaXMuX3RvcGxldmVsVmlldy5zZXRPdXRsZXRTdGF0ZShsaXZlUm91dGVzKTsKLSAgICAg
ICAgdmFyIGluc3RhbmNlID0gb3duZXIubG9va3VwKCctYXBwbGljYXRpb24taW5zdGFuY2U6bWFp
bicpOwotICAgICAgICBpbnN0YW5jZS5kaWRDcmVhdGVSb290Vmlldyh0aGlzLl90b3BsZXZlbFZp
ZXcpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgdGhpcy5fdG9wbGV2ZWxWaWV3LnNldE91dGxl
dFN0YXRlKGxpdmVSb3V0ZXMpOwotICAgICAgfQotICAgIH0sCi0KLSAgICAvKioKLSAgICAgIEhh
bmRsZXMgbm90aWZ5aW5nIGFueSBsaXN0ZW5lcnMgb2YgYW4gaW1wZW5kaW5nIFVSTAotICAgICAg
Y2hhbmdlLgotICAgICAgIFRyaWdnZXJzIHRoZSByb3V0ZXIgbGV2ZWwgYHdpbGxUcmFuc2l0aW9u
YCBob29rLgotICAgICAgIEBtZXRob2Qgd2lsbFRyYW5zaXRpb24KLSAgICAgIEBwdWJsaWMKLSAg
ICAgIEBzaW5jZSAxLjExLjAKLSAgICAqLwotICAgIHdpbGxUcmFuc2l0aW9uOiBmdW5jdGlvbiAo
b2xkSW5mb3MsIG5ld0luZm9zLCB0cmFuc2l0aW9uKSB7Ci0gICAgICBfZW1iZXJNZXRhbFJ1bl9s
b29wLmRlZmF1bHQub25jZSh0aGlzLCB0aGlzLnRyaWdnZXIsICd3aWxsVHJhbnNpdGlvbicsIHRy
YW5zaXRpb24pOwotCi0gICAgICBpZiAoX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMs
ICduYW1lc3BhY2UnKS5MT0dfVFJBTlNJVElPTlMpIHsKLSAgICAgICAgX2VtYmVyTWV0YWxMb2dn
ZXIuZGVmYXVsdC5sb2coJ1ByZXBhcmluZyB0byB0cmFuc2l0aW9uIGZyb20gXCcnICsgRW1iZXJS
b3V0ZXIuX3JvdXRlUGF0aChvbGRJbmZvcykgKyAnXCcgdG8gXCcnICsgRW1iZXJSb3V0ZXIuX3Jv
dXRlUGF0aChuZXdJbmZvcykgKyAnXCcnKTsKLSAgICAgIH0KLSAgICB9LAotCi0gICAgaGFuZGxl
VVJMOiBmdW5jdGlvbiAodXJsKSB7Ci0gICAgICAvLyBVbnRpbCB3ZSBoYXZlIGFuIGVtYmVyLWlk
aW9tYXRpYyB3YXkgb2YgYWNjZXNzaW5nICNoYXNoZXMsIHdlIG5lZWQgdG8KLSAgICAgIC8vIHJl
bW92ZSBpdCBiZWNhdXNlIHJvdXRlci5qcyBkb2Vzbid0IGtub3cgaG93IHRvIGhhbmRsZSBpdC4K
LSAgICAgIHVybCA9IHVybC5zcGxpdCgvIyguKyk/LylbMF07Ci0gICAgICByZXR1cm4gdGhpcy5f
ZG9VUkxUcmFuc2l0aW9uKCdoYW5kbGVVUkwnLCB1cmwpOwotICAgIH0sCi0KLSAgICBfZG9VUkxU
cmFuc2l0aW9uOiBmdW5jdGlvbiAocm91dGVySnNNZXRob2QsIHVybCkgewotICAgICAgdmFyIHRy
YW5zaXRpb24gPSB0aGlzLnJvdXRlcltyb3V0ZXJKc01ldGhvZF0odXJsIHx8ICcvJyk7Ci0gICAg
ICBkaWRCZWdpblRyYW5zaXRpb24odHJhbnNpdGlvbiwgdGhpcyk7Ci0gICAgICByZXR1cm4gdHJh
bnNpdGlvbjsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICBUcmFuc2l0aW9uIHRoZSBhcHBsaWNh
dGlvbiBpbnRvIGFub3RoZXIgcm91dGUuIFRoZSByb3V0ZSBtYXkKLSAgICAgIGJlIGVpdGhlciBh
IHNpbmdsZSByb3V0ZSBvciByb3V0ZSBwYXRoOgotICAgICAgIFNlZSBbUm91dGUudHJhbnNpdGlv
blRvXShodHRwOi8vZW1iZXJqcy5jb20vYXBpL2NsYXNzZXMvRW1iZXIuUm91dGUuaHRtbCNtZXRo
b2RfdHJhbnNpdGlvblRvKSBmb3IgbW9yZSBpbmZvLgotICAgICAgIEBtZXRob2QgdHJhbnNpdGlv
blRvCi0gICAgICBAcGFyYW0ge1N0cmluZ30gbmFtZSB0aGUgbmFtZSBvZiB0aGUgcm91dGUgb3Ig
YSBVUkwKLSAgICAgIEBwYXJhbSB7Li4uT2JqZWN0fSBtb2RlbHMgdGhlIG1vZGVsKHMpIG9yIGlk
ZW50aWZpZXIocykgdG8gYmUgdXNlZCB3aGlsZQotICAgICAgICB0cmFuc2l0aW9uaW5nIHRvIHRo
ZSByb3V0ZS4KLSAgICAgIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gb3B0aW9uYWwgaGFzaCB3
aXRoIGEgcXVlcnlQYXJhbXMgcHJvcGVydHkKLSAgICAgICAgY29udGFpbmluZyBhIG1hcHBpbmcg
b2YgcXVlcnkgcGFyYW1ldGVycwotICAgICAgQHJldHVybiB7VHJhbnNpdGlvbn0gdGhlIHRyYW5z
aXRpb24gb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGlzCi0gICAgICAgIGF0dGVtcHRlZCB0cmFu
c2l0aW9uCi0gICAgICBAcHVibGljCi0gICAgKi8KLSAgICB0cmFuc2l0aW9uVG86IGZ1bmN0aW9u
ICgpIHsKLSAgICAgIHZhciBxdWVyeVBhcmFtczsKLQotICAgICAgZm9yICh2YXIgX2xlbiA9IGFy
Z3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVu
OyBfa2V5KyspIHsKLSAgICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTsKLSAgICAg
IH0KLQotICAgICAgaWYgKHJlc2VtYmxlc1VSTChhcmdzWzBdKSkgewotICAgICAgICByZXR1cm4g
dGhpcy5fZG9VUkxUcmFuc2l0aW9uKCd0cmFuc2l0aW9uVG8nLCBhcmdzWzBdKTsKLSAgICAgIH0K
LQotICAgICAgdmFyIHBvc3NpYmxlUXVlcnlQYXJhbXMgPSBhcmdzW2FyZ3MubGVuZ3RoIC0gMV07
Ci0gICAgICBpZiAocG9zc2libGVRdWVyeVBhcmFtcyAmJiBwb3NzaWJsZVF1ZXJ5UGFyYW1zLmhh
c093blByb3BlcnR5KCdxdWVyeVBhcmFtcycpKSB7Ci0gICAgICAgIHF1ZXJ5UGFyYW1zID0gYXJn
cy5wb3AoKS5xdWVyeVBhcmFtczsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHF1ZXJ5UGFyYW1z
ID0ge307Ci0gICAgICB9Ci0KLSAgICAgIHZhciB0YXJnZXRSb3V0ZU5hbWUgPSBhcmdzLnNoaWZ0
KCk7Ci0gICAgICByZXR1cm4gdGhpcy5fZG9UcmFuc2l0aW9uKHRhcmdldFJvdXRlTmFtZSwgYXJn
cywgcXVlcnlQYXJhbXMpOwotICAgIH0sCi0KLSAgICBpbnRlcm1lZGlhdGVUcmFuc2l0aW9uVG86
IGZ1bmN0aW9uICgpIHsKLSAgICAgIHZhciBfcm91dGVyOwotCi0gICAgICAoX3JvdXRlciA9IHRo
aXMucm91dGVyKS5pbnRlcm1lZGlhdGVUcmFuc2l0aW9uVG8uYXBwbHkoX3JvdXRlciwgYXJndW1l
bnRzKTsKLQotICAgICAgdXBkYXRlUGF0aHModGhpcyk7Ci0KLSAgICAgIHZhciBpbmZvcyA9IHRo
aXMucm91dGVyLmN1cnJlbnRIYW5kbGVySW5mb3M7Ci0gICAgICBpZiAoX2VtYmVyTWV0YWxQcm9w
ZXJ0eV9nZXQuZ2V0KHRoaXMsICduYW1lc3BhY2UnKS5MT0dfVFJBTlNJVElPTlMpIHsKLSAgICAg
ICAgX2VtYmVyTWV0YWxMb2dnZXIuZGVmYXVsdC5sb2coJ0ludGVybWVkaWF0ZS10cmFuc2l0aW9u
ZWQgaW50byBcJycgKyBFbWJlclJvdXRlci5fcm91dGVQYXRoKGluZm9zKSArICdcJycpOwotICAg
ICAgfQotICAgIH0sCi0KLSAgICByZXBsYWNlV2l0aDogZnVuY3Rpb24gKCkgewotICAgICAgcmV0
dXJuIHRoaXMudHJhbnNpdGlvblRvLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykubWV0aG9kKCdyZXBs
YWNlJyk7Ci0gICAgfSwKLQotICAgIGdlbmVyYXRlOiBmdW5jdGlvbiAoKSB7Ci0gICAgICB2YXIg
X3JvdXRlcjI7Ci0KLSAgICAgIHZhciB1cmwgPSAoX3JvdXRlcjIgPSB0aGlzLnJvdXRlcikuZ2Vu
ZXJhdGUuYXBwbHkoX3JvdXRlcjIsIGFyZ3VtZW50cyk7Ci0gICAgICByZXR1cm4gdGhpcy5sb2Nh
dGlvbi5mb3JtYXRVUkwodXJsKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICBEZXRlcm1pbmVz
IGlmIHRoZSBzdXBwbGllZCByb3V0ZSBpcyBjdXJyZW50bHkgYWN0aXZlLgotICAgICAgIEBtZXRo
b2QgaXNBY3RpdmUKLSAgICAgIEBwYXJhbSByb3V0ZU5hbWUKLSAgICAgIEByZXR1cm4ge0Jvb2xl
YW59Ci0gICAgICBAcHJpdmF0ZQotICAgICovCi0gICAgaXNBY3RpdmU6IGZ1bmN0aW9uIChyb3V0
ZU5hbWUpIHsKLSAgICAgIHZhciByb3V0ZXIgPSB0aGlzLnJvdXRlcjsKLSAgICAgIHJldHVybiBy
b3V0ZXIuaXNBY3RpdmUuYXBwbHkocm91dGVyLCBhcmd1bWVudHMpOwotICAgIH0sCi0KLSAgICAv
KioKLSAgICAgIEFuIGFsdGVybmF0aXZlIGZvcm0gb2YgYGlzQWN0aXZlYCB0aGF0IGRvZXNuJ3Qg
cmVxdWlyZQotICAgICAgbWFudWFsIGNvbmNhdGVuYXRpb24gb2YgdGhlIGFyZ3VtZW50cyBpbnRv
IGEgc2luZ2xlCi0gICAgICBhcnJheS4KLSAgICAgICBAbWV0aG9kIGlzQWN0aXZlSW50ZW50Ci0g
ICAgICBAcGFyYW0gcm91dGVOYW1lCi0gICAgICBAcGFyYW0gbW9kZWxzCi0gICAgICBAcGFyYW0g
cXVlcnlQYXJhbXMKLSAgICAgIEByZXR1cm4ge0Jvb2xlYW59Ci0gICAgICBAcHJpdmF0ZQotICAg
ICAgQHNpbmNlIDEuNy4wCi0gICAgKi8KLSAgICBpc0FjdGl2ZUludGVudDogZnVuY3Rpb24gKHJv
dXRlTmFtZSwgbW9kZWxzLCBxdWVyeVBhcmFtcykgewotICAgICAgcmV0dXJuIHRoaXMuY3VycmVu
dFN0YXRlLmlzQWN0aXZlSW50ZW50KHJvdXRlTmFtZSwgbW9kZWxzLCBxdWVyeVBhcmFtcyk7Ci0g
ICAgfSwKLQotICAgIHNlbmQ6IGZ1bmN0aW9uIChuYW1lLCBjb250ZXh0KSB7Ci0gICAgICB2YXIg
X3JvdXRlcjM7Ci0KLSAgICAgIChfcm91dGVyMyA9IHRoaXMucm91dGVyKS50cmlnZ2VyLmFwcGx5
KF9yb3V0ZXIzLCBhcmd1bWVudHMpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgIERvZXMgdGhp
cyByb3V0ZXIgaW5zdGFuY2UgaGF2ZSB0aGUgZ2l2ZW4gcm91dGUuCi0gICAgICAgQG1ldGhvZCBo
YXNSb3V0ZQotICAgICAgQHJldHVybiB7Qm9vbGVhbn0KLSAgICAgIEBwcml2YXRlCi0gICAgKi8K
LSAgICBoYXNSb3V0ZTogZnVuY3Rpb24gKHJvdXRlKSB7Ci0gICAgICByZXR1cm4gdGhpcy5yb3V0
ZXIuaGFzUm91dGUocm91dGUpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgIFJlc2V0cyB0aGUg
c3RhdGUgb2YgdGhlIHJvdXRlciBieSBjbGVhcmluZyB0aGUgY3VycmVudCByb3V0ZQotICAgICAg
aGFuZGxlcnMgYW5kIGRlYWN0aXZhdGluZyB0aGVtLgotICAgICAgIEBwcml2YXRlCi0gICAgICBA
bWV0aG9kIHJlc2V0Ci0gICAgICovCi0gICAgcmVzZXQ6IGZ1bmN0aW9uICgpIHsKLSAgICAgIGlm
ICh0aGlzLnJvdXRlcikgewotICAgICAgICB0aGlzLnJvdXRlci5yZXNldCgpOwotICAgICAgfQot
ICAgIH0sCi0KLSAgICB3aWxsRGVzdHJveTogZnVuY3Rpb24gKCkgewotICAgICAgaWYgKHRoaXMu
X3RvcGxldmVsVmlldykgewotICAgICAgICB0aGlzLl90b3BsZXZlbFZpZXcuZGVzdHJveSgpOwot
ICAgICAgICB0aGlzLl90b3BsZXZlbFZpZXcgPSBudWxsOwotICAgICAgfQotICAgICAgdGhpcy5f
c3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKLSAgICAgIHRoaXMucmVzZXQoKTsKLSAgICB9
LAotCi0gICAgX2xvb2t1cEFjdGl2ZUNvbXBvbmVudE5vZGU6IGZ1bmN0aW9uICh0ZW1wbGF0ZU5h
bWUpIHsKLSAgICAgIHJldHVybiB0aGlzLl9hY3RpdmVWaWV3c1t0ZW1wbGF0ZU5hbWVdOwotICAg
IH0sCi0KLSAgICAvKgotICAgICAgQ2FsbGVkIHdoZW4gYW4gYWN0aXZlIHJvdXRlJ3MgcXVlcnkg
cGFyYW1ldGVyIGhhcyBjaGFuZ2VkLgotICAgICAgVGhlc2UgY2hhbmdlcyBhcmUgYmF0Y2hlZCBp
bnRvIGEgcnVubG9vcCBydW4gYW5kIHRyaWdnZXIKLSAgICAgIGEgc2luZ2xlIHRyYW5zaXRpb24u
Ci0gICAgKi8KLSAgICBfYWN0aXZlUVBDaGFuZ2VkOiBmdW5jdGlvbiAocXVlcnlQYXJhbWV0ZXJO
YW1lLCBuZXdWYWx1ZSkgewotICAgICAgdGhpcy5fcXVldWVkUVBDaGFuZ2VzW3F1ZXJ5UGFyYW1l
dGVyTmFtZV0gPSBuZXdWYWx1ZTsKLSAgICAgIF9lbWJlck1ldGFsUnVuX2xvb3AuZGVmYXVsdC5v
bmNlKHRoaXMsIHRoaXMuX2ZpcmVRdWVyeVBhcmFtVHJhbnNpdGlvbik7Ci0gICAgfSwKLQotICAg
IF91cGRhdGluZ1FQQ2hhbmdlZDogZnVuY3Rpb24gKHF1ZXJ5UGFyYW1ldGVyTmFtZSkgewotICAg
ICAgaWYgKCF0aGlzLl9xcFVwZGF0ZXMpIHsKLSAgICAgICAgdGhpcy5fcXBVcGRhdGVzID0ge307
Ci0gICAgICB9Ci0gICAgICB0aGlzLl9xcFVwZGF0ZXNbcXVlcnlQYXJhbWV0ZXJOYW1lXSA9IHRy
dWU7Ci0gICAgfSwKLQotICAgIC8qCi0gICAgICBUcmlnZ2VycyBhIHRyYW5zaXRpb24gdG8gYSBy
b3V0ZSBiYXNlZCBvbiBxdWVyeSBwYXJhbWV0ZXIgY2hhbmdlcy4KLSAgICAgIFRoaXMgaXMgY2Fs
bGVkIG9uY2UgcGVyIHJ1bmxvb3AsIHRvIGJhdGNoIGNoYW5nZXMuCi0gICAgICAgZS5nLgotICAg
ICAgIGlmIHRoZXNlIG1ldGhvZHMgYXJlIGNhbGxlZCBpbiBzdWNjZXNzaW9uOgotICAgICAgdGhp
cy5fYWN0aXZlUVBDaGFuZ2VkKCdmb28nLCAnMTAnKTsKLSAgICAgICAgLy8gcmVzdWx0cyBpbiBf
cXVldWVkUVBDaGFuZ2VzID0ge2ZvbzogJzEwJ30KLSAgICAgIHRoaXMuX2FjdGl2ZVFQQ2hhbmdl
ZCgnYmFyJywgZmFsc2UpOwotICAgICAgICAvLyByZXN1bHRzIGluIF9xdWV1ZWRRUENoYW5nZXMg
PSB7Zm9vOiAnMTAnLCBiYXI6IGZhbHNlfQotICAgICAgICBfcXVldWVkUVBDaGFuZ2VzIHdpbGwg
cmVwcmVzZW50IGJvdGggb2YgdGhlc2UgY2hhbmdlcwotICAgICAgYW5kIHRoZSB0cmFuc2l0aW9u
IHVzaW5nIGB0cmFuc2l0aW9uVG9gIHdpbGwgYmUgdHJpZ2dlcmVkCi0gICAgICBvbmNlLgotICAg
ICovCi0gICAgX2ZpcmVRdWVyeVBhcmFtVHJhbnNpdGlvbjogZnVuY3Rpb24gKCkgewotICAgICAg
dGhpcy50cmFuc2l0aW9uVG8oeyBxdWVyeVBhcmFtczogdGhpcy5fcXVldWVkUVBDaGFuZ2VzIH0p
OwotICAgICAgdGhpcy5fcmVzZXRRdWV1ZWRRdWVyeVBhcmFtZXRlckNoYW5nZXMoKTsKLSAgICB9
LAotCi0gICAgX2Nvbm5lY3RBY3RpdmVDb21wb25lbnROb2RlOiBmdW5jdGlvbiAodGVtcGxhdGVO
YW1lLCBjb21wb25lbnROb2RlKSB7Ci0gICAgICBfZW1iZXJNZXRhbERlYnVnLmFzc2VydCgnY2Fu
bm90IGNvbm5lY3QgYW4gYWN0aXZlVmlldyB0aGF0IGFscmVhZHkgZXhpc3RzJywgIXRoaXMuX2Fj
dGl2ZVZpZXdzW3RlbXBsYXRlTmFtZV0pOwotCi0gICAgICB2YXIgX2FjdGl2ZVZpZXdzID0gdGhp
cy5fYWN0aXZlVmlld3M7Ci0gICAgICBmdW5jdGlvbiBkaXNjb25uZWN0QWN0aXZlVmlldygpIHsK
LSAgICAgICAgZGVsZXRlIF9hY3RpdmVWaWV3c1t0ZW1wbGF0ZU5hbWVdOwotICAgICAgfQotCi0g
ICAgICB0aGlzLl9hY3RpdmVWaWV3c1t0ZW1wbGF0ZU5hbWVdID0gY29tcG9uZW50Tm9kZTsKLSAg
ICAgIGNvbXBvbmVudE5vZGUucmVuZGVyTm9kZS5hZGREZXN0cnVjdGlvbih7IGRlc3Ryb3k6IGRp
c2Nvbm5lY3RBY3RpdmVWaWV3IH0pOwotICAgIH0sCi0KLSAgICBfc2V0dXBMb2NhdGlvbjogZnVu
Y3Rpb24gKCkgewotICAgICAgdmFyIGxvY2F0aW9uID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQu
Z2V0KHRoaXMsICdsb2NhdGlvbicpOwotICAgICAgdmFyIHJvb3RVUkwgPSBfZW1iZXJNZXRhbFBy
b3BlcnR5X2dldC5nZXQodGhpcywgJ3Jvb3RVUkwnKTsKLSAgICAgIHZhciBvd25lciA9IF9jb250
YWluZXJPd25lci5nZXRPd25lcih0aGlzKTsKLQotICAgICAgaWYgKCdzdHJpbmcnID09PSB0eXBl
b2YgbG9jYXRpb24gJiYgb3duZXIpIHsKLSAgICAgICAgdmFyIHJlc29sdmVkTG9jYXRpb24gPSBv
d25lci5sb29rdXAoJ2xvY2F0aW9uOicgKyBsb2NhdGlvbik7Ci0KLSAgICAgICAgaWYgKCd1bmRl
ZmluZWQnICE9PSB0eXBlb2YgcmVzb2x2ZWRMb2NhdGlvbikgewotICAgICAgICAgIGxvY2F0aW9u
ID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9zZXQuc2V0KHRoaXMsICdsb2NhdGlvbicsIHJlc29sdmVk
TG9jYXRpb24pOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIC8vIEFsbG93IGZvciBkZXBy
ZWNhdGVkIHJlZ2lzdHJhdGlvbiBvZiBjdXN0b20gbG9jYXRpb24gQVBJJ3MKLSAgICAgICAgICB2
YXIgb3B0aW9ucyA9IHsKLSAgICAgICAgICAgIGltcGxlbWVudGF0aW9uOiBsb2NhdGlvbgotICAg
ICAgICAgIH07Ci0KLSAgICAgICAgICBsb2NhdGlvbiA9IF9lbWJlck1ldGFsUHJvcGVydHlfc2V0
LnNldCh0aGlzLCAnbG9jYXRpb24nLCBfZW1iZXJSb3V0aW5nTG9jYXRpb25BcGkuZGVmYXVsdC5j
cmVhdGUob3B0aW9ucykpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGlmIChsb2NhdGlv
biAhPT0gbnVsbCAmJiB0eXBlb2YgbG9jYXRpb24gPT09ICdvYmplY3QnKSB7Ci0gICAgICAgIGlm
IChyb290VVJMKSB7Ci0gICAgICAgICAgX2VtYmVyTWV0YWxQcm9wZXJ0eV9zZXQuc2V0KGxvY2F0
aW9uLCAncm9vdFVSTCcsIHJvb3RVUkwpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQWxsb3cg
dGhlIGxvY2F0aW9uIHRvIGRvIGFueSBmZWF0dXJlIGRldGVjdGlvbiwgc3VjaCBhcyBBdXRvTG9j
YXRpb24KLSAgICAgICAgLy8gZGV0ZWN0aW5nIGhpc3Rvcnkgc3VwcG9ydC4gVGhpcyBnaXZlcyBp
dCBhIGNoYW5jZSB0byBzZXQgaXRzCi0gICAgICAgIC8vIGBjYW5jZWxSb3V0ZXJTZXR1cGAgcHJv
cGVydHkgd2hpY2ggYWJvcnRzIHJvdXRpbmcuCi0gICAgICAgIGlmICh0eXBlb2YgbG9jYXRpb24u
ZGV0ZWN0ID09PSAnZnVuY3Rpb24nKSB7Ci0gICAgICAgICAgbG9jYXRpb24uZGV0ZWN0KCk7Ci0g
ICAgICAgIH0KLQotICAgICAgICAvLyBlbnN1cmUgdGhhdCBpbml0U3RhdGUgaXMgY2FsbGVkIEFG
VEVSIHRoZSByb290VVJMIGlzIHNldCBvbgotICAgICAgICAvLyB0aGUgbG9jYXRpb24gaW5zdGFu
Y2UKLSAgICAgICAgaWYgKHR5cGVvZiBsb2NhdGlvbi5pbml0U3RhdGUgPT09ICdmdW5jdGlvbicp
IHsKLSAgICAgICAgICBsb2NhdGlvbi5pbml0U3RhdGUoKTsKLSAgICAgICAgfQotICAgICAgfQot
ICAgIH0sCi0KLSAgICBfZ2V0SGFuZGxlckZ1bmN0aW9uOiBmdW5jdGlvbiAoKSB7Ci0gICAgICB2
YXIgX3RoaXMyID0gdGhpczsKLQotICAgICAgdmFyIHNlZW4gPSBuZXcgX2VtYmVyTWV0YWxFbXB0
eV9vYmplY3QuZGVmYXVsdCgpOwotICAgICAgdmFyIG93bmVyID0gX2NvbnRhaW5lck93bmVyLmdl
dE93bmVyKHRoaXMpOwotICAgICAgdmFyIERlZmF1bHRSb3V0ZSA9IG93bmVyLl9sb29rdXBGYWN0
b3J5KCdyb3V0ZTpiYXNpYycpOwotCi0gICAgICByZXR1cm4gZnVuY3Rpb24gKG5hbWUpIHsKLSAg
ICAgICAgdmFyIHJvdXRlTmFtZSA9ICdyb3V0ZTonICsgbmFtZTsKLSAgICAgICAgdmFyIGhhbmRs
ZXIgPSBvd25lci5sb29rdXAocm91dGVOYW1lKTsKLQotICAgICAgICBpZiAoc2VlbltuYW1lXSkg
ewotICAgICAgICAgIHJldHVybiBoYW5kbGVyOwotICAgICAgICB9Ci0KLSAgICAgICAgc2Vlbltu
YW1lXSA9IHRydWU7Ci0KLSAgICAgICAgaWYgKCFoYW5kbGVyKSB7Ci0gICAgICAgICAgb3duZXIu
cmVnaXN0ZXIocm91dGVOYW1lLCBEZWZhdWx0Um91dGUuZXh0ZW5kKCkpOwotICAgICAgICAgIGhh
bmRsZXIgPSBvd25lci5sb29rdXAocm91dGVOYW1lKTsKLQotICAgICAgICAgIGlmIChfZW1iZXJN
ZXRhbFByb3BlcnR5X2dldC5nZXQoX3RoaXMyLCAnbmFtZXNwYWNlLkxPR19BQ1RJVkVfR0VORVJB
VElPTicpKSB7Ci0gICAgICAgICAgICBfZW1iZXJNZXRhbERlYnVnLmluZm8oJ2dlbmVyYXRlZCAt
PiAnICsgcm91dGVOYW1lLCB7IGZ1bGxOYW1lOiByb3V0ZU5hbWUgfSk7Ci0gICAgICAgICAgfQot
ICAgICAgICB9Ci0KLSAgICAgICAgaGFuZGxlci5yb3V0ZU5hbWUgPSBuYW1lOwotICAgICAgICBy
ZXR1cm4gaGFuZGxlcjsKLSAgICAgIH07Ci0gICAgfSwKLQotICAgIF9zZXR1cFJvdXRlcjogZnVu
Y3Rpb24gKHJvdXRlciwgbG9jYXRpb24pIHsKLSAgICAgIHZhciBsYXN0VVJMOwotICAgICAgdmFy
IGVtYmVyUm91dGVyID0gdGhpczsKLQotICAgICAgcm91dGVyLmdldEhhbmRsZXIgPSB0aGlzLl9n
ZXRIYW5kbGVyRnVuY3Rpb24oKTsKLQotICAgICAgdmFyIGRvVXBkYXRlVVJMID0gZnVuY3Rpb24g
KCkgewotICAgICAgICBsb2NhdGlvbi5zZXRVUkwobGFzdFVSTCk7Ci0gICAgICB9OwotCi0gICAg
ICByb3V0ZXIudXBkYXRlVVJMID0gZnVuY3Rpb24gKHBhdGgpIHsKLSAgICAgICAgbGFzdFVSTCA9
IHBhdGg7Ci0gICAgICAgIF9lbWJlck1ldGFsUnVuX2xvb3AuZGVmYXVsdC5vbmNlKGRvVXBkYXRl
VVJMKTsKLSAgICAgIH07Ci0KLSAgICAgIGlmIChsb2NhdGlvbi5yZXBsYWNlVVJMKSB7Ci0gICAg
ICAgIHZhciBkb1JlcGxhY2VVUkwgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgbG9jYXRpb24u
cmVwbGFjZVVSTChsYXN0VVJMKTsKLSAgICAgICAgfTsKLQotICAgICAgICByb3V0ZXIucmVwbGFj
ZVVSTCA9IGZ1bmN0aW9uIChwYXRoKSB7Ci0gICAgICAgICAgbGFzdFVSTCA9IHBhdGg7Ci0gICAg
ICAgICAgX2VtYmVyTWV0YWxSdW5fbG9vcC5kZWZhdWx0Lm9uY2UoZG9SZXBsYWNlVVJMKTsKLSAg
ICAgICAgfTsKLSAgICAgIH0KLQotICAgICAgcm91dGVyLmRpZFRyYW5zaXRpb24gPSBmdW5jdGlv
biAoaW5mb3MpIHsKLSAgICAgICAgZW1iZXJSb3V0ZXIuZGlkVHJhbnNpdGlvbihpbmZvcyk7Ci0g
ICAgICB9OwotCi0gICAgICByb3V0ZXIud2lsbFRyYW5zaXRpb24gPSBmdW5jdGlvbiAob2xkSW5m
b3MsIG5ld0luZm9zLCB0cmFuc2l0aW9uKSB7Ci0gICAgICAgIGVtYmVyUm91dGVyLndpbGxUcmFu
c2l0aW9uKG9sZEluZm9zLCBuZXdJbmZvcywgdHJhbnNpdGlvbik7Ci0gICAgICB9OwotICAgIH0s
Ci0KLSAgICBfc2VyaWFsaXplUXVlcnlQYXJhbXM6IGZ1bmN0aW9uICh0YXJnZXRSb3V0ZU5hbWUs
IHF1ZXJ5UGFyYW1zKSB7Ci0gICAgICB2YXIgZ3JvdXBlZEJ5VXJsS2V5ID0ge307Ci0KLSAgICAg
IGZvckVhY2hRdWVyeVBhcmFtKHRoaXMsIHRhcmdldFJvdXRlTmFtZSwgcXVlcnlQYXJhbXMsIGZ1
bmN0aW9uIChrZXksIHZhbHVlLCBxcCkgewotICAgICAgICB2YXIgdXJsS2V5ID0gcXAudXJsS2V5
OwotICAgICAgICBpZiAoIWdyb3VwZWRCeVVybEtleVt1cmxLZXldKSB7Ci0gICAgICAgICAgZ3Jv
dXBlZEJ5VXJsS2V5W3VybEtleV0gPSBbXTsKLSAgICAgICAgfQotICAgICAgICBncm91cGVkQnlV
cmxLZXlbdXJsS2V5XS5wdXNoKHsKLSAgICAgICAgICBxcDogcXAsCi0gICAgICAgICAgdmFsdWU6
IHZhbHVlCi0gICAgICAgIH0pOwotICAgICAgICBkZWxldGUgcXVlcnlQYXJhbXNba2V5XTsKLSAg
ICAgIH0pOwotCi0gICAgICBmb3IgKHZhciBrZXkgaW4gZ3JvdXBlZEJ5VXJsS2V5KSB7Ci0gICAg
ICAgIHZhciBxcHMgPSBncm91cGVkQnlVcmxLZXlba2V5XTsKLSAgICAgICAgX2VtYmVyTWV0YWxE
ZWJ1Zy5hc3NlcnQoJ1lvdVwncmUgbm90IGFsbG93ZWQgdG8gaGF2ZSBtb3JlIHRoYW4gb25lIGNv
bnRyb2xsZXIgcHJvcGVydHkgbWFwIHRvIHRoZSBzYW1lIHF1ZXJ5IHBhcmFtIGtleSwgYnV0IGJv
dGggYCcgKyBxcHNbMF0ucXAuc2NvcGVkUHJvcGVydHlOYW1lICsgJ2AgYW5kIGAnICsgKHFwc1sx
XSA/IHFwc1sxXS5xcC5zY29wZWRQcm9wZXJ0eU5hbWUgOiAnJykgKyAnYCBtYXAgdG8gYCcgKyBx
cHNbMF0ucXAudXJsS2V5ICsgJ2AuIFlvdSBjYW4gZml4IHRoaXMgYnkgbWFwcGluZyBvbmUgb2Yg
dGhlIGNvbnRyb2xsZXIgcHJvcGVydGllcyB0byBhIGRpZmZlcmVudCBxdWVyeSBwYXJhbSBrZXkg
dmlhIHRoZSBgYXNgIGNvbmZpZyBvcHRpb24sIGUuZy4gYCcgKyBxcHNbMF0ucXAucHJvcCArICc6
IHsgYXM6IFwnb3RoZXItJyArIHFwc1swXS5xcC5wcm9wICsgJ1wnIH1gJywgcXBzLmxlbmd0aCA8
PSAxKTsKLSAgICAgICAgdmFyIHFwID0gcXBzWzBdLnFwOwotICAgICAgICBxdWVyeVBhcmFtc1tx
cC51cmxLZXldID0gcXAucm91dGUuc2VyaWFsaXplUXVlcnlQYXJhbShxcHNbMF0udmFsdWUsIHFw
LnVybEtleSwgcXAudHlwZSk7Ci0gICAgICB9Ci0gICAgfSwKLQotICAgIF9kZXNlcmlhbGl6ZVF1
ZXJ5UGFyYW1zOiBmdW5jdGlvbiAodGFyZ2V0Um91dGVOYW1lLCBxdWVyeVBhcmFtcykgewotICAg
ICAgZm9yRWFjaFF1ZXJ5UGFyYW0odGhpcywgdGFyZ2V0Um91dGVOYW1lLCBxdWVyeVBhcmFtcywg
ZnVuY3Rpb24gKGtleSwgdmFsdWUsIHFwKSB7Ci0gICAgICAgIGRlbGV0ZSBxdWVyeVBhcmFtc1tr
ZXldOwotICAgICAgICBxdWVyeVBhcmFtc1txcC5wcm9wXSA9IHFwLnJvdXRlLmRlc2VyaWFsaXpl
UXVlcnlQYXJhbSh2YWx1ZSwgcXAudXJsS2V5LCBxcC50eXBlKTsKLSAgICAgIH0pOwotICAgIH0s
Ci0KLSAgICBfcHJ1bmVEZWZhdWx0UXVlcnlQYXJhbVZhbHVlczogZnVuY3Rpb24gKHRhcmdldFJv
dXRlTmFtZSwgcXVlcnlQYXJhbXMpIHsKLSAgICAgIHZhciBxcHMgPSB0aGlzLl9xdWVyeVBhcmFt
c0Zvcih0YXJnZXRSb3V0ZU5hbWUpOwotICAgICAgZm9yICh2YXIga2V5IGluIHF1ZXJ5UGFyYW1z
KSB7Ci0gICAgICAgIHZhciBxcCA9IHFwcy5tYXBba2V5XTsKLSAgICAgICAgaWYgKHFwICYmIHFw
LnNlcmlhbGl6ZWREZWZhdWx0VmFsdWUgPT09IHF1ZXJ5UGFyYW1zW2tleV0pIHsKLSAgICAgICAg
ICBkZWxldGUgcXVlcnlQYXJhbXNba2V5XTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0K
LSAgICBfZG9UcmFuc2l0aW9uOiBmdW5jdGlvbiAoX3RhcmdldFJvdXRlTmFtZSwgbW9kZWxzLCBf
cXVlcnlQYXJhbXMpIHsKLSAgICAgIHZhciB0YXJnZXRSb3V0ZU5hbWUgPSBfdGFyZ2V0Um91dGVO
YW1lIHx8IF9lbWJlclJvdXRpbmdVdGlscy5nZXRBY3RpdmVUYXJnZXROYW1lKHRoaXMucm91dGVy
KTsKLSAgICAgIF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0KCdUaGUgcm91dGUgJyArIHRhcmdldFJv
dXRlTmFtZSArICcgd2FzIG5vdCBmb3VuZCcsIHRhcmdldFJvdXRlTmFtZSAmJiB0aGlzLnJvdXRl
ci5oYXNSb3V0ZSh0YXJnZXRSb3V0ZU5hbWUpKTsKLQotICAgICAgdmFyIHF1ZXJ5UGFyYW1zID0g
e307Ci0gICAgICAvLyBtZXJnZSBpbiBhbnkgcXVlcnlQYXJhbXMgZnJvbSB0aGUgYWN0aXZlIHRy
YW5zaXRpb24gd2hpY2ggY291bGQgaW5jbHVkZQotICAgICAgLy8gcXVlcnlwYXJhbXMgZnJvbSB0
aGUgdXJsIG9uIGluaXRpYWwgbG9hZC4KLSAgICAgIGlmICh0aGlzLnJvdXRlci5hY3RpdmVUcmFu
c2l0aW9uKSB7Ci0gICAgICAgIF9lbWJlck1ldGFsQXNzaWduLmRlZmF1bHQocXVlcnlQYXJhbXMs
IHRoaXMucm91dGVyLmFjdGl2ZVRyYW5zaXRpb24ucXVlcnlQYXJhbXMpOwotICAgICAgfQotCi0g
ICAgICBfZW1iZXJNZXRhbEFzc2lnbi5kZWZhdWx0KHF1ZXJ5UGFyYW1zLCBfcXVlcnlQYXJhbXMp
OwotICAgICAgdGhpcy5fcHJlcGFyZVF1ZXJ5UGFyYW1zKHRhcmdldFJvdXRlTmFtZSwgbW9kZWxz
LCBxdWVyeVBhcmFtcyk7Ci0KLSAgICAgIHZhciB0cmFuc2l0aW9uQXJncyA9IF9lbWJlclJvdXRp
bmdVdGlscy5yb3V0ZUFyZ3ModGFyZ2V0Um91dGVOYW1lLCBtb2RlbHMsIHF1ZXJ5UGFyYW1zKTsK
LSAgICAgIHZhciB0cmFuc2l0aW9uID0gdGhpcy5yb3V0ZXIudHJhbnNpdGlvblRvLmFwcGx5KHRo
aXMucm91dGVyLCB0cmFuc2l0aW9uQXJncyk7Ci0KLSAgICAgIGRpZEJlZ2luVHJhbnNpdGlvbih0
cmFuc2l0aW9uLCB0aGlzKTsKLQotICAgICAgcmV0dXJuIHRyYW5zaXRpb247Ci0gICAgfSwKLQot
ICAgIF9wcmVwYXJlUXVlcnlQYXJhbXM6IGZ1bmN0aW9uICh0YXJnZXRSb3V0ZU5hbWUsIG1vZGVs
cywgcXVlcnlQYXJhbXMpIHsKLSAgICAgIHRoaXMuX2h5ZHJhdGVVbnN1cHBsaWVkUXVlcnlQYXJh
bXModGFyZ2V0Um91dGVOYW1lLCBtb2RlbHMsIHF1ZXJ5UGFyYW1zKTsKLSAgICAgIHRoaXMuX3Nl
cmlhbGl6ZVF1ZXJ5UGFyYW1zKHRhcmdldFJvdXRlTmFtZSwgcXVlcnlQYXJhbXMpOwotICAgICAg
dGhpcy5fcHJ1bmVEZWZhdWx0UXVlcnlQYXJhbVZhbHVlcyh0YXJnZXRSb3V0ZU5hbWUsIHF1ZXJ5
UGFyYW1zKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICBSZXR1cm5zIGEgbWVyZ2VkIHF1ZXJ5
IHBhcmFtcyBtZXRhIG9iamVjdCBmb3IgYSBnaXZlbiByb3V0ZS4KLSAgICAgIFVzZWZ1bCBmb3Ig
YXNraW5nIGEgcm91dGUgd2hhdCBpdHMga25vd24gcXVlcnkgcGFyYW1zIGFyZS4KLSAgICAgICBA
cHJpdmF0ZQotICAgICAqLwotICAgIF9xdWVyeVBhcmFtc0ZvcjogZnVuY3Rpb24gKGxlYWZSb3V0
ZU5hbWUpIHsKLSAgICAgIGlmICh0aGlzLl9xcENhY2hlW2xlYWZSb3V0ZU5hbWVdKSB7Ci0gICAg
ICAgIHJldHVybiB0aGlzLl9xcENhY2hlW2xlYWZSb3V0ZU5hbWVdOwotICAgICAgfQotCi0gICAg
ICB2YXIgbWFwID0ge307Ci0gICAgICB2YXIgcXBzID0gW107Ci0gICAgICB0aGlzLl9xcENhY2hl
W2xlYWZSb3V0ZU5hbWVdID0gewotICAgICAgICBtYXA6IG1hcCwKLSAgICAgICAgcXBzOiBxcHMK
LSAgICAgIH07Ci0KLSAgICAgIHZhciByb3V0ZXJqcyA9IHRoaXMucm91dGVyOwotICAgICAgdmFy
IHJlY29nSGFuZGxlckluZm9zID0gcm91dGVyanMucmVjb2duaXplci5oYW5kbGVyc0ZvcihsZWFm
Um91dGVOYW1lKTsKLQotICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHJlY29nSGFuZGxlcklu
Zm9zLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7Ci0gICAgICAgIHZhciByZWNvZ0hhbmRsZXIgPSBy
ZWNvZ0hhbmRsZXJJbmZvc1tpXTsKLSAgICAgICAgdmFyIHJvdXRlID0gcm91dGVyanMuZ2V0SGFu
ZGxlcihyZWNvZ0hhbmRsZXIuaGFuZGxlcik7Ci0gICAgICAgIHZhciBxcE1ldGEgPSBfZW1iZXJN
ZXRhbFByb3BlcnR5X2dldC5nZXQocm91dGUsICdfcXAnKTsKLQotICAgICAgICBpZiAoIXFwTWV0
YSkgewotICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgX2VtYmVyTWV0
YWxBc3NpZ24uZGVmYXVsdChtYXAsIHFwTWV0YS5tYXApOwotICAgICAgICBxcHMucHVzaC5hcHBs
eShxcHMsIHFwTWV0YS5xcHMpOwotICAgICAgfQotCi0gICAgICByZXR1cm4gewotICAgICAgICBx
cHM6IHFwcywKLSAgICAgICAgbWFwOiBtYXAKLSAgICAgIH07Ci0gICAgfSwKLQotICAgIF9oeWRy
YXRlVW5zdXBwbGllZFF1ZXJ5UGFyYW1zOiBmdW5jdGlvbiAobGVhZlJvdXRlTmFtZSwgY29udGV4
dHMsIHF1ZXJ5UGFyYW1zKSB7Ci0gICAgICB2YXIgc3RhdGUgPSBjYWxjdWxhdGVQb3N0VHJhbnNp
dGlvblN0YXRlKHRoaXMsIGxlYWZSb3V0ZU5hbWUsIGNvbnRleHRzKTsKLSAgICAgIHZhciBoYW5k
bGVySW5mb3MgPSBzdGF0ZS5oYW5kbGVySW5mb3M7Ci0gICAgICB2YXIgYXBwQ2FjaGUgPSB0aGlz
Ll9idWNrZXRDYWNoZTsKLSAgICAgIF9lbWJlclJvdXRpbmdVdGlscy5zdGFzaFBhcmFtTmFtZXMo
dGhpcywgaGFuZGxlckluZm9zKTsKLQotICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGhhbmRs
ZXJJbmZvcy5sZW5ndGg7IGkgPCBsZW47ICsraSkgewotICAgICAgICB2YXIgcm91dGUgPSBoYW5k
bGVySW5mb3NbaV0uaGFuZGxlcjsKLSAgICAgICAgdmFyIHFwTWV0YSA9IF9lbWJlck1ldGFsUHJv
cGVydHlfZ2V0LmdldChyb3V0ZSwgJ19xcCcpOwotCi0gICAgICAgIGZvciAodmFyIGogPSAwLCBx
cExlbiA9IHFwTWV0YS5xcHMubGVuZ3RoOyBqIDwgcXBMZW47ICsraikgewotICAgICAgICAgIHZh
ciBxcCA9IHFwTWV0YS5xcHNbal07Ci0KLSAgICAgICAgICB2YXIgcHJlc2VudFByb3AgPSBxcC5w
cm9wIGluIHF1ZXJ5UGFyYW1zICYmIHFwLnByb3AgfHwgcXAuc2NvcGVkUHJvcGVydHlOYW1lIGlu
IHF1ZXJ5UGFyYW1zICYmIHFwLnNjb3BlZFByb3BlcnR5TmFtZTsKLQotICAgICAgICAgIGlmIChw
cmVzZW50UHJvcCkgewotICAgICAgICAgICAgaWYgKHByZXNlbnRQcm9wICE9PSBxcC5zY29wZWRQ
cm9wZXJ0eU5hbWUpIHsKLSAgICAgICAgICAgICAgcXVlcnlQYXJhbXNbcXAuc2NvcGVkUHJvcGVy
dHlOYW1lXSA9IHF1ZXJ5UGFyYW1zW3ByZXNlbnRQcm9wXTsKLSAgICAgICAgICAgICAgZGVsZXRl
IHF1ZXJ5UGFyYW1zW3ByZXNlbnRQcm9wXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgdmFyIGNhY2hlS2V5ID0gX2VtYmVyUm91dGluZ1V0aWxzLmNhbGN1
bGF0ZUNhY2hlS2V5KHFwLmN0cmwsIHFwLnBhcnRzLCBzdGF0ZS5wYXJhbXMpOwotICAgICAgICAg
ICAgcXVlcnlQYXJhbXNbcXAuc2NvcGVkUHJvcGVydHlOYW1lXSA9IGFwcENhY2hlLmxvb2t1cChj
YWNoZUtleSwgcXAucHJvcCwgcXAuZGVmYXVsdFZhbHVlKTsKLSAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICAgIH0KLSAgICB9LAotCi0gICAgX3NjaGVkdWxlTG9hZGluZ0V2ZW50OiBmdW5jdGlv
biAodHJhbnNpdGlvbiwgb3JpZ2luUm91dGUpIHsKLSAgICAgIHRoaXMuX2NhbmNlbFNsb3dUcmFu
c2l0aW9uVGltZXIoKTsKLSAgICAgIHRoaXMuX3Nsb3dUcmFuc2l0aW9uVGltZXIgPSBfZW1iZXJN
ZXRhbFJ1bl9sb29wLmRlZmF1bHQuc2NoZWR1bGVPbmNlKCdyb3V0ZXJUcmFuc2l0aW9ucycsIHRo
aXMsICdfaGFuZGxlU2xvd1RyYW5zaXRpb24nLCB0cmFuc2l0aW9uLCBvcmlnaW5Sb3V0ZSk7Ci0g
ICAgfSwKLQotICAgIGN1cnJlbnRTdGF0ZTogbnVsbCwKLSAgICB0YXJnZXRTdGF0ZTogbnVsbCwK
LQotICAgIF9oYW5kbGVTbG93VHJhbnNpdGlvbjogZnVuY3Rpb24gKHRyYW5zaXRpb24sIG9yaWdp
blJvdXRlKSB7Ci0gICAgICBpZiAoIXRoaXMucm91dGVyLmFjdGl2ZVRyYW5zaXRpb24pIHsKLSAg
ICAgICAgLy8gRG9uJ3QgZmlyZSBhbiBldmVudCBpZiB3ZSd2ZSBzaW5jZSBtb3ZlZCBvbiBmcm9t
Ci0gICAgICAgIC8vIHRoZSB0cmFuc2l0aW9uIHRoYXQgcHV0IHVzIGluIGEgbG9hZGluZyBzdGF0
ZS4KLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotCi0gICAgICB0aGlzLnNldCgndGFyZ2V0U3Rh
dGUnLCBfZW1iZXJSb3V0aW5nU3lzdGVtUm91dGVyX3N0YXRlLmRlZmF1bHQuY3JlYXRlKHsKLSAg
ICAgICAgZW1iZXJSb3V0ZXI6IHRoaXMsCi0gICAgICAgIHJvdXRlckpzOiB0aGlzLnJvdXRlciwK
LSAgICAgICAgcm91dGVySnNTdGF0ZTogdGhpcy5yb3V0ZXIuYWN0aXZlVHJhbnNpdGlvbi5zdGF0
ZQotICAgICAgfSkpOwotCi0gICAgICB0cmFuc2l0aW9uLnRyaWdnZXIodHJ1ZSwgJ2xvYWRpbmcn
LCB0cmFuc2l0aW9uLCBvcmlnaW5Sb3V0ZSk7Ci0gICAgfSwKLQotICAgIF9jYW5jZWxTbG93VHJh
bnNpdGlvblRpbWVyOiBmdW5jdGlvbiAoKSB7Ci0gICAgICBpZiAodGhpcy5fc2xvd1RyYW5zaXRp
b25UaW1lcikgewotICAgICAgICBfZW1iZXJNZXRhbFJ1bl9sb29wLmRlZmF1bHQuY2FuY2VsKHRo
aXMuX3Nsb3dUcmFuc2l0aW9uVGltZXIpOwotICAgICAgfQotICAgICAgdGhpcy5fc2xvd1RyYW5z
aXRpb25UaW1lciA9IG51bGw7Ci0gICAgfSwKLQotICAgIC8vIFRoZXNlIHRocmVlIGhlbHBlciBm
dW5jdGlvbnMgYXJlIHVzZWQgdG8gZW5zdXJlIGVycm9ycyBhcmVuJ3QKLSAgICAvLyByZS1yYWlz
ZWQgaWYgdGhleSdyZSBoYW5kbGVkIGluIGEgcm91dGUncyBlcnJvciBhY3Rpb24uCi0gICAgX21h
cmtFcnJvckFzSGFuZGxlZDogZnVuY3Rpb24gKGVycm9yR3VpZCkgewotICAgICAgdGhpcy5faGFu
ZGxlZEVycm9yc1tlcnJvckd1aWRdID0gdHJ1ZTsKLSAgICB9LAotCi0gICAgX2lzRXJyb3JIYW5k
bGVkOiBmdW5jdGlvbiAoZXJyb3JHdWlkKSB7Ci0gICAgICByZXR1cm4gdGhpcy5faGFuZGxlZEVy
cm9yc1tlcnJvckd1aWRdOwotICAgIH0sCi0KLSAgICBfY2xlYXJIYW5kbGVkRXJyb3I6IGZ1bmN0
aW9uIChlcnJvckd1aWQpIHsKLSAgICAgIGRlbGV0ZSB0aGlzLl9oYW5kbGVkRXJyb3JzW2Vycm9y
R3VpZF07Ci0gICAgfQotICB9KTsKLQotICAvKgotICAgIEhlbHBlciBmdW5jdGlvbiBmb3IgaXRl
cmF0aW5nIHJvb3Qtd2FyZCwgc3RhcnRpbmcKLSAgICBmcm9tIChidXQgbm90IGluY2x1ZGluZykg
dGhlIHByb3ZpZGVkIGBvcmlnaW5Sb3V0ZWAuCi0gIAotICAgIFJldHVybnMgdHJ1ZSBpZiB0aGUg
bGFzdCBjYWxsYmFjayBmaXJlZCByZXF1ZXN0ZWQKLSAgICB0byBidWJibGUgdXB3YXJkLgotICAK
LSAgICBAcHJpdmF0ZQotICAgKi8KLSAgZnVuY3Rpb24gZm9yRWFjaFJvdXRlQWJvdmUob3JpZ2lu
Um91dGUsIHRyYW5zaXRpb24sIGNhbGxiYWNrKSB7Ci0gICAgdmFyIGhhbmRsZXJJbmZvcyA9IHRy
YW5zaXRpb24uc3RhdGUuaGFuZGxlckluZm9zOwotICAgIHZhciBvcmlnaW5Sb3V0ZUZvdW5kID0g
ZmFsc2U7Ci0gICAgdmFyIGhhbmRsZXJJbmZvLCByb3V0ZTsKLQotICAgIGZvciAodmFyIGkgPSBo
YW5kbGVySW5mb3MubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHsKLSAgICAgIGhhbmRsZXJJbmZv
ID0gaGFuZGxlckluZm9zW2ldOwotICAgICAgcm91dGUgPSBoYW5kbGVySW5mby5oYW5kbGVyOwot
Ci0gICAgICBpZiAoIW9yaWdpblJvdXRlRm91bmQpIHsKLSAgICAgICAgaWYgKG9yaWdpblJvdXRl
ID09PSByb3V0ZSkgewotICAgICAgICAgIG9yaWdpblJvdXRlRm91bmQgPSB0cnVlOwotICAgICAg
ICB9Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAgfQotCi0gICAgICBpZiAoY2FsbGJhY2socm91
dGUsIGhhbmRsZXJJbmZvc1tpICsgMV0uaGFuZGxlcikgIT09IHRydWUpIHsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8v
IFRoZXNlIGdldCBpbnZva2VkIHdoZW4gYW4gYWN0aW9uIGJ1YmJsZXMgYWJvdmUgQXBwbGljYXRp
b25Sb3V0ZQotICAvLyBhbmQgYXJlIG5vdCBtZWFudCB0byBiZSBvdmVycmlkYWJsZS4KLSAgdmFy
IGRlZmF1bHRBY3Rpb25IYW5kbGVycyA9IHsKLQotICAgIHdpbGxSZXNvbHZlTW9kZWw6IGZ1bmN0
aW9uICh0cmFuc2l0aW9uLCBvcmlnaW5Sb3V0ZSkgewotICAgICAgb3JpZ2luUm91dGUucm91dGVy
Ll9zY2hlZHVsZUxvYWRpbmdFdmVudCh0cmFuc2l0aW9uLCBvcmlnaW5Sb3V0ZSk7Ci0gICAgfSwK
LQotICAgIGVycm9yOiBmdW5jdGlvbiAoZXJyb3IsIHRyYW5zaXRpb24sIG9yaWdpblJvdXRlKSB7
Ci0gICAgICAvLyBBdHRlbXB0IHRvIGZpbmQgYW4gYXBwcm9wcmlhdGUgZXJyb3Igc3Vic3RhdGUg
dG8gZW50ZXIuCi0gICAgICB2YXIgcm91dGVyID0gb3JpZ2luUm91dGUucm91dGVyOwotCi0gICAg
ICB2YXIgdHJ5VG9wTGV2ZWwgPSBmb3JFYWNoUm91dGVBYm92ZShvcmlnaW5Sb3V0ZSwgdHJhbnNp
dGlvbiwgZnVuY3Rpb24gKHJvdXRlLCBjaGlsZFJvdXRlKSB7Ci0gICAgICAgIHZhciBjaGlsZEVy
cm9yUm91dGVOYW1lID0gZmluZENoaWxkUm91dGVOYW1lKHJvdXRlLCBjaGlsZFJvdXRlLCAnZXJy
b3InKTsKLSAgICAgICAgaWYgKGNoaWxkRXJyb3JSb3V0ZU5hbWUpIHsKLSAgICAgICAgICByb3V0
ZXIuaW50ZXJtZWRpYXRlVHJhbnNpdGlvblRvKGNoaWxkRXJyb3JSb3V0ZU5hbWUsIGVycm9yKTsK
LSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICB9KTsKLQotICAgICAgaWYgKHRyeVRvcExldmVsKSB7Ci0gICAgICAgIC8vIENoZWNrIGZvciB0
b3AtbGV2ZWwgZXJyb3Igc3RhdGUgdG8gZW50ZXIuCi0gICAgICAgIGlmIChyb3V0ZUhhc0JlZW5E
ZWZpbmVkKG9yaWdpblJvdXRlLnJvdXRlciwgJ2FwcGxpY2F0aW9uX2Vycm9yJykpIHsKLSAgICAg
ICAgICByb3V0ZXIuaW50ZXJtZWRpYXRlVHJhbnNpdGlvblRvKCdhcHBsaWNhdGlvbl9lcnJvcics
IGVycm9yKTsKLSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAg
bG9nRXJyb3IoZXJyb3IsICdFcnJvciB3aGlsZSBwcm9jZXNzaW5nIHJvdXRlOiAnICsgdHJhbnNp
dGlvbi50YXJnZXROYW1lKTsKLSAgICB9LAotCi0gICAgbG9hZGluZzogZnVuY3Rpb24gKHRyYW5z
aXRpb24sIG9yaWdpblJvdXRlKSB7Ci0gICAgICAvLyBBdHRlbXB0IHRvIGZpbmQgYW4gYXBwcm9w
cmlhdGUgbG9hZGluZyBzdWJzdGF0ZSB0byBlbnRlci4KLSAgICAgIHZhciByb3V0ZXIgPSBvcmln
aW5Sb3V0ZS5yb3V0ZXI7Ci0KLSAgICAgIHZhciB0cnlUb3BMZXZlbCA9IGZvckVhY2hSb3V0ZUFi
b3ZlKG9yaWdpblJvdXRlLCB0cmFuc2l0aW9uLCBmdW5jdGlvbiAocm91dGUsIGNoaWxkUm91dGUp
IHsKLSAgICAgICAgdmFyIGNoaWxkTG9hZGluZ1JvdXRlTmFtZSA9IGZpbmRDaGlsZFJvdXRlTmFt
ZShyb3V0ZSwgY2hpbGRSb3V0ZSwgJ2xvYWRpbmcnKTsKLQotICAgICAgICBpZiAoY2hpbGRMb2Fk
aW5nUm91dGVOYW1lKSB7Ci0gICAgICAgICAgcm91dGVyLmludGVybWVkaWF0ZVRyYW5zaXRpb25U
byhjaGlsZExvYWRpbmdSb3V0ZU5hbWUpOwotICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
Ci0gICAgICAgIC8vIERvbid0IGJ1YmJsZSBhYm92ZSBwaXZvdCByb3V0ZS4KLSAgICAgICAgaWYg
KHRyYW5zaXRpb24ucGl2b3RIYW5kbGVyICE9PSByb3V0ZSkgewotICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICB9Ci0gICAgICB9KTsKLQotICAgICAgaWYgKHRyeVRvcExldmVsKSB7Ci0g
ICAgICAgIC8vIENoZWNrIGZvciB0b3AtbGV2ZWwgbG9hZGluZyBzdGF0ZSB0byBlbnRlci4KLSAg
ICAgICAgaWYgKHJvdXRlSGFzQmVlbkRlZmluZWQob3JpZ2luUm91dGUucm91dGVyLCAnYXBwbGlj
YXRpb25fbG9hZGluZycpKSB7Ci0gICAgICAgICAgcm91dGVyLmludGVybWVkaWF0ZVRyYW5zaXRp
b25UbygnYXBwbGljYXRpb25fbG9hZGluZycpOwotICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotICAgICAgfQotICAgIH0KLSAgfTsKLQotICBmdW5jdGlvbiBsb2dFcnJvcihfZXJyb3IsIGlu
aXRpYWxNZXNzYWdlKSB7Ci0gICAgdmFyIGVycm9yQXJncyA9IFtdOwotICAgIHZhciBlcnJvcjsK
LSAgICBpZiAoX2Vycm9yICYmIHR5cGVvZiBfZXJyb3IgPT09ICdvYmplY3QnICYmIHR5cGVvZiBf
ZXJyb3IuZXJyb3JUaHJvd24gPT09ICdvYmplY3QnKSB7Ci0gICAgICBlcnJvciA9IF9lcnJvci5l
cnJvclRocm93bjsKLSAgICB9IGVsc2UgewotICAgICAgZXJyb3IgPSBfZXJyb3I7Ci0gICAgfQot
Ci0gICAgaWYgKGluaXRpYWxNZXNzYWdlKSB7Ci0gICAgICBlcnJvckFyZ3MucHVzaChpbml0aWFs
TWVzc2FnZSk7Ci0gICAgfQotCi0gICAgaWYgKGVycm9yKSB7Ci0gICAgICBpZiAoZXJyb3IubWVz
c2FnZSkgewotICAgICAgICBlcnJvckFyZ3MucHVzaChlcnJvci5tZXNzYWdlKTsKLSAgICAgIH0K
LSAgICAgIGlmIChlcnJvci5zdGFjaykgewotICAgICAgICBlcnJvckFyZ3MucHVzaChlcnJvci5z
dGFjayk7Ci0gICAgICB9Ci0KLSAgICAgIGlmICh0eXBlb2YgZXJyb3IgPT09ICdzdHJpbmcnKSB7
Ci0gICAgICAgIGVycm9yQXJncy5wdXNoKGVycm9yKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBf
ZW1iZXJNZXRhbExvZ2dlci5kZWZhdWx0LmVycm9yLmFwcGx5KHRoaXMsIGVycm9yQXJncyk7Ci0g
IH0KLQotICBmdW5jdGlvbiBmaW5kQ2hpbGRSb3V0ZU5hbWUocGFyZW50Um91dGUsIG9yaWdpbmF0
aW5nQ2hpbGRSb3V0ZSwgbmFtZSkgewotICAgIHZhciByb3V0ZXIgPSBwYXJlbnRSb3V0ZS5yb3V0
ZXI7Ci0gICAgdmFyIGNoaWxkTmFtZTsKLSAgICB2YXIgdGFyZ2V0Q2hpbGRSb3V0ZU5hbWUgPSBv
cmlnaW5hdGluZ0NoaWxkUm91dGUucm91dGVOYW1lLnNwbGl0KCcuJykucG9wKCk7Ci0gICAgdmFy
IG5hbWVzcGFjZSA9IHBhcmVudFJvdXRlLnJvdXRlTmFtZSA9PT0gJ2FwcGxpY2F0aW9uJyA/ICcn
IDogcGFyZW50Um91dGUucm91dGVOYW1lICsgJy4nOwotCi0gICAgLy8gRmlyc3QsIHRyeSBhIG5h
bWVkIGxvYWRpbmcgc3RhdGUsIGUuZy4gJ2Zvb19sb2FkaW5nJwotICAgIGNoaWxkTmFtZSA9IG5h
bWVzcGFjZSArIHRhcmdldENoaWxkUm91dGVOYW1lICsgJ18nICsgbmFtZTsKLSAgICBpZiAocm91
dGVIYXNCZWVuRGVmaW5lZChyb3V0ZXIsIGNoaWxkTmFtZSkpIHsKLSAgICAgIHJldHVybiBjaGls
ZE5hbWU7Ci0gICAgfQotCi0gICAgLy8gU2Vjb25kLCB0cnkgZ2VuZXJhbCBsb2FkaW5nIHN0YXRl
LCBlLmcuICdsb2FkaW5nJwotICAgIGNoaWxkTmFtZSA9IG5hbWVzcGFjZSArIG5hbWU7Ci0gICAg
aWYgKHJvdXRlSGFzQmVlbkRlZmluZWQocm91dGVyLCBjaGlsZE5hbWUpKSB7Ci0gICAgICByZXR1
cm4gY2hpbGROYW1lOwotICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIHJvdXRlSGFzQmVlbkRlZmlu
ZWQocm91dGVyLCBuYW1lKSB7Ci0gICAgdmFyIG93bmVyID0gX2NvbnRhaW5lck93bmVyLmdldE93
bmVyKHJvdXRlcik7Ci0gICAgcmV0dXJuIHJvdXRlci5oYXNSb3V0ZShuYW1lKSAmJiAob3duZXIu
aGFzUmVnaXN0cmF0aW9uKCd0ZW1wbGF0ZTonICsgbmFtZSkgfHwgb3duZXIuaGFzUmVnaXN0cmF0
aW9uKCdyb3V0ZTonICsgbmFtZSkpOwotICB9Ci0KLSAgZnVuY3Rpb24gdHJpZ2dlckV2ZW50KGhh
bmRsZXJJbmZvcywgaWdub3JlRmFpbHVyZSwgYXJncykgewotICAgIHZhciBuYW1lID0gYXJncy5z
aGlmdCgpOwotCi0gICAgaWYgKCFoYW5kbGVySW5mb3MpIHsKLSAgICAgIGlmIChpZ25vcmVGYWls
dXJlKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICAgIHRocm93IG5ldyBfZW1iZXJN
ZXRhbEVycm9yLmRlZmF1bHQoJ0NhblwndCB0cmlnZ2VyIGFjdGlvbiBcJycgKyBuYW1lICsgJ1wn
IGJlY2F1c2UgeW91ciBhcHAgaGFzblwndCBmaW5pc2hlZCB0cmFuc2l0aW9uaW5nIGludG8gaXRz
IGZpcnN0IHJvdXRlLiBUbyB0cmlnZ2VyIGFuIGFjdGlvbiBvbiBkZXN0aW5hdGlvbiByb3V0ZXMg
ZHVyaW5nIGEgdHJhbnNpdGlvbiwgeW91IGNhbiBjYWxsIGAuc2VuZCgpYCBvbiB0aGUgYFRyYW5z
aXRpb25gIG9iamVjdCBwYXNzZWQgdG8gdGhlIGBtb2RlbC9iZWZvcmVNb2RlbC9hZnRlck1vZGVs
YCBob29rcy4nKTsKLSAgICB9Ci0KLSAgICB2YXIgZXZlbnRXYXNIYW5kbGVkID0gZmFsc2U7Ci0g
ICAgdmFyIGhhbmRsZXJJbmZvLCBoYW5kbGVyOwotCi0gICAgZm9yICh2YXIgaSA9IGhhbmRsZXJJ
bmZvcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgewotICAgICAgaGFuZGxlckluZm8gPSBoYW5k
bGVySW5mb3NbaV07Ci0gICAgICBoYW5kbGVyID0gaGFuZGxlckluZm8uaGFuZGxlcjsKLQotICAg
ICAgaWYgKGhhbmRsZXIuYWN0aW9ucyAmJiBoYW5kbGVyLmFjdGlvbnNbbmFtZV0pIHsKLSAgICAg
ICAgaWYgKGhhbmRsZXIuYWN0aW9uc1tuYW1lXS5hcHBseShoYW5kbGVyLCBhcmdzKSA9PT0gdHJ1
ZSkgewotICAgICAgICAgIGV2ZW50V2FzSGFuZGxlZCA9IHRydWU7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgLy8gU2hvdWxkIG9ubHkgaGl0IGhlcmUgaWYgYSBub24tYnViYmxpbmcgZXJy
b3IgYWN0aW9uIGlzIHRyaWdnZXJlZCBvbiBhIHJvdXRlLgotICAgICAgICAgIGlmIChuYW1lID09
PSAnZXJyb3InKSB7Ci0gICAgICAgICAgICB2YXIgZXJyb3JJZCA9IF9lbWJlck1ldGFsVXRpbHMu
Z3VpZEZvcihhcmdzWzBdKTsKLSAgICAgICAgICAgIGhhbmRsZXIucm91dGVyLl9tYXJrRXJyb3JB
c0hhbmRsZWQoZXJyb3JJZCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgICAgfQotICAgIH0KLQotICAgIGlmIChkZWZhdWx0QWN0aW9uSGFuZGxlcnNbbmFt
ZV0pIHsKLSAgICAgIGRlZmF1bHRBY3Rpb25IYW5kbGVyc1tuYW1lXS5hcHBseShudWxsLCBhcmdz
KTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIWV2ZW50V2FzSGFuZGxlZCAmJiAh
aWdub3JlRmFpbHVyZSkgewotICAgICAgdGhyb3cgbmV3IF9lbWJlck1ldGFsRXJyb3IuZGVmYXVs
dCgnTm90aGluZyBoYW5kbGVkIHRoZSBhY3Rpb24gXCcnICsgbmFtZSArICdcJy4gSWYgeW91IGRp
ZCBoYW5kbGUgdGhlIGFjdGlvbiwgdGhpcyBlcnJvciBjYW4gYmUgY2F1c2VkIGJ5IHJldHVybmlu
ZyB0cnVlIGZyb20gYW4gYWN0aW9uIGhhbmRsZXIgaW4gYSBjb250cm9sbGVyLCBjYXVzaW5nIHRo
ZSBhY3Rpb24gdG8gYnViYmxlLicpOwotICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIGNhbGN1bGF0
ZVBvc3RUcmFuc2l0aW9uU3RhdGUoZW1iZXJSb3V0ZXIsIGxlYWZSb3V0ZU5hbWUsIGNvbnRleHRz
KSB7Ci0gICAgdmFyIHJvdXRlcmpzID0gZW1iZXJSb3V0ZXIucm91dGVyOwotICAgIHZhciBzdGF0
ZSA9IHJvdXRlcmpzLmFwcGx5SW50ZW50KGxlYWZSb3V0ZU5hbWUsIGNvbnRleHRzKTsKLSAgICB2
YXIgaGFuZGxlckluZm9zID0gc3RhdGUuaGFuZGxlckluZm9zOwotICAgIHZhciBwYXJhbXMgPSBz
dGF0ZS5wYXJhbXM7Ci0KLSAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gaGFuZGxlckluZm9zLmxl
bmd0aDsgaSA8IGxlbjsgKytpKSB7Ci0gICAgICB2YXIgaGFuZGxlckluZm8gPSBoYW5kbGVySW5m
b3NbaV07Ci0gICAgICBpZiAoIWhhbmRsZXJJbmZvLmlzUmVzb2x2ZWQpIHsKLSAgICAgICAgaGFu
ZGxlckluZm8gPSBoYW5kbGVySW5mby5iZWNvbWVSZXNvbHZlZChudWxsLCBoYW5kbGVySW5mby5j
b250ZXh0KTsKLSAgICAgIH0KLSAgICAgIHBhcmFtc1toYW5kbGVySW5mby5uYW1lXSA9IGhhbmRs
ZXJJbmZvLnBhcmFtczsKLSAgICB9Ci0gICAgcmV0dXJuIHN0YXRlOwotICB9Ci0KLSAgZnVuY3Rp
b24gdXBkYXRlUGF0aHMocm91dGVyKSB7Ci0gICAgdmFyIGluZm9zID0gcm91dGVyLnJvdXRlci5j
dXJyZW50SGFuZGxlckluZm9zOwotICAgIHZhciBwYXRoID0gRW1iZXJSb3V0ZXIuX3JvdXRlUGF0
aChpbmZvcyk7Ci0gICAgdmFyIGN1cnJlbnRSb3V0ZU5hbWUgPSBpbmZvc1tpbmZvcy5sZW5ndGgg
LSAxXS5uYW1lOwotCi0gICAgX2VtYmVyTWV0YWxQcm9wZXJ0eV9zZXQuc2V0KHJvdXRlciwgJ2N1
cnJlbnRQYXRoJywgcGF0aCk7Ci0gICAgX2VtYmVyTWV0YWxQcm9wZXJ0eV9zZXQuc2V0KHJvdXRl
ciwgJ2N1cnJlbnRSb3V0ZU5hbWUnLCBjdXJyZW50Um91dGVOYW1lKTsKLQotICAgIHZhciBhcHBD
b250cm9sbGVyID0gX2NvbnRhaW5lck93bmVyLmdldE93bmVyKHJvdXRlcikubG9va3VwKCdjb250
cm9sbGVyOmFwcGxpY2F0aW9uJyk7Ci0KLSAgICBpZiAoIWFwcENvbnRyb2xsZXIpIHsKLSAgICAg
IC8vIGFwcENvbnRyb2xsZXIgbWlnaHQgbm90IGV4aXN0IHdoZW4gdG9wLWxldmVsIGxvYWRpbmcv
ZXJyb3IKLSAgICAgIC8vIHN1YnN0YXRlcyBoYXZlIGJlZW4gZW50ZXJlZCBzaW5jZSBBcHBsaWNh
dGlvblJvdXRlIGhhc24ndAotICAgICAgLy8gYWN0dWFsbHkgYmVlbiBlbnRlcmVkIGF0IHRoYXQg
cG9pbnQuCi0gICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCEoJ2N1cnJlbnRQYXRoJyBp
biBhcHBDb250cm9sbGVyKSkgewotICAgICAgX2VtYmVyTWV0YWxQcm9wZXJ0aWVzLmRlZmluZVBy
b3BlcnR5KGFwcENvbnRyb2xsZXIsICdjdXJyZW50UGF0aCcpOwotICAgIH0KLQotICAgIF9lbWJl
ck1ldGFsUHJvcGVydHlfc2V0LnNldChhcHBDb250cm9sbGVyLCAnY3VycmVudFBhdGgnLCBwYXRo
KTsKLQotICAgIGlmICghKCdjdXJyZW50Um91dGVOYW1lJyBpbiBhcHBDb250cm9sbGVyKSkgewot
ICAgICAgX2VtYmVyTWV0YWxQcm9wZXJ0aWVzLmRlZmluZVByb3BlcnR5KGFwcENvbnRyb2xsZXIs
ICdjdXJyZW50Um91dGVOYW1lJyk7Ci0gICAgfQotCi0gICAgX2VtYmVyTWV0YWxQcm9wZXJ0eV9z
ZXQuc2V0KGFwcENvbnRyb2xsZXIsICdjdXJyZW50Um91dGVOYW1lJywgY3VycmVudFJvdXRlTmFt
ZSk7Ci0gIH0KLQotICBFbWJlclJvdXRlci5yZW9wZW5DbGFzcyh7Ci0gICAgcm91dGVyOiBudWxs
LAotCi0gICAgLyoqCi0gICAgICBUaGUgYFJvdXRlci5tYXBgIGZ1bmN0aW9uIGFsbG93cyB5b3Ug
dG8gZGVmaW5lIG1hcHBpbmdzIGZyb20gVVJMcyB0byByb3V0ZXMKLSAgICAgIGluIHlvdXIgYXBw
bGljYXRpb24uIFRoZXNlIG1hcHBpbmdzIGFyZSBkZWZpbmVkIHdpdGhpbiB0aGUKLSAgICAgIHN1
cHBsaWVkIGNhbGxiYWNrIGZ1bmN0aW9uIHVzaW5nIGB0aGlzLnJvdXRlYC4KLSAgICAgICBUaGUg
Zmlyc3QgcGFyYW1ldGVyIGlzIHRoZSBuYW1lIG9mIHRoZSByb3V0ZSB3aGljaCBpcyB1c2VkIGJ5
IGRlZmF1bHQgYXMgdGhlCi0gICAgICBwYXRoIG5hbWUgYXMgd2VsbC4KLSAgICAgICBUaGUgc2Vj
b25kIHBhcmFtZXRlciBpcyB0aGUgb3B0aW9uYWwgb3B0aW9ucyBoYXNoLiBBdmFpbGFibGUgb3B0
aW9ucyBhcmU6Ci0gICAgICAgICogYHBhdGhgOiBhbGxvd3MgeW91IHRvIHByb3ZpZGUgeW91ciBv
d24gcGF0aCBhcyB3ZWxsIGFzIG1hcmsgZHluYW1pYwotICAgICAgICAgIHNlZ21lbnRzLgotICAg
ICAgICAqIGByZXNldE5hbWVzcGFjZWA6IGZhbHNlIGJ5IGRlZmF1bHQ7IHdoZW4gbmVzdGluZyBy
b3V0ZXMsIGVtYmVyIHdpbGwKLSAgICAgICAgICBjb21iaW5lIHRoZSByb3V0ZSBuYW1lcyB0byBm
b3JtIHRoZSBmdWxseS1xdWFsaWZpZWQgcm91dGUgbmFtZSwgd2hpY2ggaXMKLSAgICAgICAgICB1
c2VkIHdpdGggYHt7bGluay10b319YCBvciBtYW51YWxseSB0cmFuc2l0aW9uaW5nIHRvIHJvdXRl
cy4gU2V0dGluZwotICAgICAgICAgIGByZXNldE5hbWVzcGFjZTogdHJ1ZWAgd2lsbCBjYXVzZSB0
aGUgcm91dGUgbm90IHRvIGluaGVyaXQgZnJvbSBpdHMKLSAgICAgICAgICBwYXJlbnQgcm91dGUn
cyBuYW1lcy4gVGhpcyBpcyBoYW5keSBmb3IgcmVzb3VyY2VzIHdoaWNoIGNhbiBiZSBhY2Nlc3Nl
ZAotICAgICAgICAgIGluIG11bHRpcGxlIHBsYWNlcyBhcyB3ZWxsIGFzIHByZXZlbnRpbmcgZXh0
cmVtZWx5IGxvbmcgcm91dGUgbmFtZXMuCi0gICAgICAgICAgS2VlcCBpbiBtaW5kIHRoYXQgdGhl
IGFjdHVhbCBVUkwgcGF0aCBiZWhhdmlvciBpcyBzdGlsbCByZXRhaW5lZC4KLSAgICAgICBUaGUg
dGhpcmQgcGFyYW1ldGVyIGlzIGEgZnVuY3Rpb24sIHdoaWNoIGNhbiBiZSB1c2VkIHRvIG5lc3Qg
cm91dGVzLgotICAgICAgTmVzdGVkIHJvdXRlcywgYnkgZGVmYXVsdCwgd2lsbCBoYXZlIHRoZSBw
YXJlbnQgcm91dGUgdHJlZSdzIHJvdXRlIG5hbWUgYW5kCi0gICAgICBwYXRoIHByZXBlbmRlZCB0
byBpdCdzIG93bi4KLSAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICBBcHAuUm91dGVyLm1hcChm
dW5jdGlvbigpewotICAgICAgICB0aGlzLnJvdXRlKCdwb3N0JywgeyBwYXRoOiAnL3Bvc3QvOnBv
c3RfaWQnIH0sIGZ1bmN0aW9uKCkgewotICAgICAgICAgIHRoaXMucm91dGUoJ2VkaXQnKTsKLSAg
ICAgICAgICB0aGlzLnJvdXRlKCdjb21tZW50cycsIHsgcmVzZXROYW1lc3BhY2U6IHRydWUgfSwg
ZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICB0aGlzLnJvdXRlKCduZXcnKTsKLSAgICAgICAgICB9
KTsKLSAgICAgICAgfSk7Ci0gICAgICB9KTsKLSAgICAgIGBgYAotICAgICAgIEZvciBtb3JlIGRl
dGFpbGVkIGRvY3VtZW50YXRpb24gYW5kIGV4YW1wbGVzIHBsZWFzZSBzZWUKLSAgICAgIFt0aGUg
Z3VpZGVzXShodHRwOi8vZW1iZXJqcy5jb20vZ3VpZGVzL3JvdXRpbmcvZGVmaW5pbmcteW91ci1y
b3V0ZXMvKS4KLSAgICAgICBAbWV0aG9kIG1hcAotICAgICAgQHBhcmFtIGNhbGxiYWNrCi0gICAg
ICBAcHVibGljCi0gICAgKi8KLSAgICBtYXA6IGZ1bmN0aW9uIChjYWxsYmFjaykgewotICAgICAg
aWYgKCF0aGlzLmRzbENhbGxiYWNrcykgewotICAgICAgICB0aGlzLmRzbENhbGxiYWNrcyA9IFtd
OwotICAgICAgICB0aGlzLnJlb3BlbkNsYXNzKHsgZHNsQ2FsbGJhY2tzOiB0aGlzLmRzbENhbGxi
YWNrcyB9KTsKLSAgICAgIH0KLQotICAgICAgdGhpcy5kc2xDYWxsYmFja3MucHVzaChjYWxsYmFj
ayk7Ci0KLSAgICAgIHJldHVybiB0aGlzOwotICAgIH0sCi0KLSAgICBfcm91dGVQYXRoOiBmdW5j
dGlvbiAoaGFuZGxlckluZm9zKSB7Ci0gICAgICB2YXIgcGF0aCA9IFtdOwotCi0gICAgICAvLyBX
ZSBoYXZlIHRvIGhhbmRsZSBjb2FsZXNjaW5nIHJlc291cmNlIG5hbWVzIHRoYXQKLSAgICAgIC8v
IGFyZSBwcmVmaXhlZCB3aXRoIHRoZWlyIHBhcmVudCdzIG5hbWVzLCBlLmcuCi0gICAgICAvLyBb
J2ZvbycsICdmb28uYmFyLmJheiddID0+ICdmb28uYmFyLmJheicsIG5vdCAnZm9vLmZvby5iYXIu
YmF6JwotCi0gICAgICBmdW5jdGlvbiBpbnRlcnNlY3Rpb25NYXRjaGVzKGExLCBhMikgewotICAg
ICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gYTEubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHsKLSAg
ICAgICAgICBpZiAoYTFbaV0gIT09IGEyW2ldKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQot
Ci0gICAgICB2YXIgbmFtZSwgbmFtZVBhcnRzLCBvbGROYW1lUGFydHM7Ci0gICAgICBmb3IgKHZh
ciBpID0gMSwgbCA9IGhhbmRsZXJJbmZvcy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKLSAgICAgICAg
bmFtZSA9IGhhbmRsZXJJbmZvc1tpXS5uYW1lOwotICAgICAgICBuYW1lUGFydHMgPSBuYW1lLnNw
bGl0KCcuJyk7Ci0gICAgICAgIG9sZE5hbWVQYXJ0cyA9IHNsaWNlLmNhbGwocGF0aCk7Ci0KLSAg
ICAgICAgd2hpbGUgKG9sZE5hbWVQYXJ0cy5sZW5ndGgpIHsKLSAgICAgICAgICBpZiAoaW50ZXJz
ZWN0aW9uTWF0Y2hlcyhvbGROYW1lUGFydHMsIG5hbWVQYXJ0cykpIHsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBvbGROYW1lUGFydHMuc2hpZnQoKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHBhdGgucHVzaC5hcHBseShwYXRoLCBuYW1lUGFydHMuc2xpY2Uob2xk
TmFtZVBhcnRzLmxlbmd0aCkpOwotICAgICAgfQotCi0gICAgICByZXR1cm4gcGF0aC5qb2luKCcu
Jyk7Ci0gICAgfQotICB9KTsKLQotICBmdW5jdGlvbiBkaWRCZWdpblRyYW5zaXRpb24odHJhbnNp
dGlvbiwgcm91dGVyKSB7Ci0gICAgdmFyIHJvdXRlclN0YXRlID0gX2VtYmVyUm91dGluZ1N5c3Rl
bVJvdXRlcl9zdGF0ZS5kZWZhdWx0LmNyZWF0ZSh7Ci0gICAgICBlbWJlclJvdXRlcjogcm91dGVy
LAotICAgICAgcm91dGVySnM6IHJvdXRlci5yb3V0ZXIsCi0gICAgICByb3V0ZXJKc1N0YXRlOiB0
cmFuc2l0aW9uLnN0YXRlCi0gICAgfSk7Ci0KLSAgICBpZiAoIXJvdXRlci5jdXJyZW50U3RhdGUp
IHsKLSAgICAgIHJvdXRlci5zZXQoJ2N1cnJlbnRTdGF0ZScsIHJvdXRlclN0YXRlKTsKLSAgICB9
Ci0gICAgcm91dGVyLnNldCgndGFyZ2V0U3RhdGUnLCByb3V0ZXJTdGF0ZSk7Ci0KLSAgICB0cmFu
c2l0aW9uLnByb21pc2UgPSB0cmFuc2l0aW9uLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikgewotICAg
ICAgdmFyIGVycm9ySWQgPSBfZW1iZXJNZXRhbFV0aWxzLmd1aWRGb3IoZXJyb3IpOwotCi0gICAg
ICBpZiAocm91dGVyLl9pc0Vycm9ySGFuZGxlZChlcnJvcklkKSkgewotICAgICAgICByb3V0ZXIu
X2NsZWFySGFuZGxlZEVycm9yKGVycm9ySWQpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgdGhy
b3cgZXJyb3I7Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICBmdW5jdGlvbiByZXNlbWJsZXNV
Ukwoc3RyKSB7Ci0gICAgcmV0dXJuIHR5cGVvZiBzdHIgPT09ICdzdHJpbmcnICYmIChzdHIgPT09
ICcnIHx8IHN0ci5jaGFyQXQoMCkgPT09ICcvJyk7Ci0gIH0KLQotICBmdW5jdGlvbiBmb3JFYWNo
UXVlcnlQYXJhbShyb3V0ZXIsIHRhcmdldFJvdXRlTmFtZSwgcXVlcnlQYXJhbXMsIGNhbGxiYWNr
KSB7Ci0gICAgdmFyIHFwQ2FjaGUgPSByb3V0ZXIuX3F1ZXJ5UGFyYW1zRm9yKHRhcmdldFJvdXRl
TmFtZSk7Ci0KLSAgICBmb3IgKHZhciBrZXkgaW4gcXVlcnlQYXJhbXMpIHsKLSAgICAgIGlmICgh
cXVlcnlQYXJhbXMuaGFzT3duUHJvcGVydHkoa2V5KSkgewotICAgICAgICBjb250aW51ZTsKLSAg
ICAgIH0KLSAgICAgIHZhciB2YWx1ZSA9IHF1ZXJ5UGFyYW1zW2tleV07Ci0gICAgICB2YXIgcXAg
PSBxcENhY2hlLm1hcFtrZXldOwotCi0gICAgICBpZiAocXApIHsKLSAgICAgICAgY2FsbGJhY2so
a2V5LCB2YWx1ZSwgcXApOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIGZpbmRM
aXZlUm91dGUobGl2ZVJvdXRlcywgbmFtZSkgewotICAgIGlmICghbGl2ZVJvdXRlcykgewotICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICB2YXIgc3RhY2sgPSBbbGl2ZVJvdXRlc107Ci0gICAgd2hp
bGUgKHN0YWNrLmxlbmd0aCA+IDApIHsKLSAgICAgIHZhciB0ZXN0ID0gc3RhY2suc2hpZnQoKTsK
LSAgICAgIGlmICh0ZXN0LnJlbmRlci5uYW1lID09PSBuYW1lKSB7Ci0gICAgICAgIHJldHVybiB0
ZXN0OwotICAgICAgfQotICAgICAgdmFyIG91dGxldHMgPSB0ZXN0Lm91dGxldHM7Ci0gICAgICBm
b3IgKHZhciBvdXRsZXROYW1lIGluIG91dGxldHMpIHsKLSAgICAgICAgc3RhY2sucHVzaChvdXRs
ZXRzW291dGxldE5hbWVdKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBmdW5jdGlvbiBhcHBl
bmRMaXZlUm91dGUobGl2ZVJvdXRlcywgZGVmYXVsdFBhcmVudFN0YXRlLCByZW5kZXJPcHRpb25z
KSB7Ci0gICAgdmFyIHRhcmdldDsKLSAgICB2YXIgbXlTdGF0ZSA9IHsKLSAgICAgIHJlbmRlcjog
cmVuZGVyT3B0aW9ucywKLSAgICAgIG91dGxldHM6IG5ldyBfZW1iZXJNZXRhbEVtcHR5X29iamVj
dC5kZWZhdWx0KCkKLSAgICB9OwotICAgIGlmIChyZW5kZXJPcHRpb25zLmludG8pIHsKLSAgICAg
IHRhcmdldCA9IGZpbmRMaXZlUm91dGUobGl2ZVJvdXRlcywgcmVuZGVyT3B0aW9ucy5pbnRvKTsK
LSAgICB9IGVsc2UgewotICAgICAgdGFyZ2V0ID0gZGVmYXVsdFBhcmVudFN0YXRlOwotICAgIH0K
LSAgICBpZiAodGFyZ2V0KSB7Ci0gICAgICBfZW1iZXJNZXRhbFByb3BlcnR5X3NldC5zZXQodGFy
Z2V0Lm91dGxldHMsIHJlbmRlck9wdGlvbnMub3V0bGV0LCBteVN0YXRlKTsKLSAgICB9IGVsc2Ug
ewotICAgICAgaWYgKHJlbmRlck9wdGlvbnMuaW50bykgewotICAgICAgICAvLyBNZWdhaGF4IHRp
bWUuIFBvc3QtMi4wLWJyZWFraW5nLWNoYW5nZXMsIHdlIHdpbGwganVzdCBhc3NlcnQKLSAgICAg
ICAgLy8gcmlnaHQgaGVyZSB0aGF0IHRoZSB1c2VyIHRyaWVkIHRvIHRhcmdldCBhIG5vbmV4aXN0
ZW50Ci0gICAgICAgIC8vIHRoaW5nLiBCdXQgZm9yIG5vdyB3ZSBzdGlsbCBuZWVkIHRvIHN1cHBv
cnQgdGhlIGByZW5kZXJgCi0gICAgICAgIC8vIGhlbHBlciwgYW5kIHBlb3BsZSBhcmUgYWxsb3dl
ZCB0byB0YXJnZXQgdGVtcGxhdGVzIHJlbmRlcmVkCi0gICAgICAgIC8vIGJ5IHRoZSByZW5kZXIg
aGVscGVyLiBTbyBpbnN0ZWFkIHdlIGRlZmVyIGRvaW5nIGFueXRpbmcgd2l0aAotICAgICAgICAv
LyB0aGVzZSBvcnBoYW4gcmVuZGVycyB1bnRpbCBhZnRlclJlbmRlci4KLSAgICAgICAgYXBwZW5k
T3JwaGFuKGxpdmVSb3V0ZXMsIHJlbmRlck9wdGlvbnMuaW50bywgbXlTdGF0ZSk7Ci0gICAgICB9
IGVsc2UgewotICAgICAgICBsaXZlUm91dGVzID0gbXlTdGF0ZTsKLSAgICAgIH0KLSAgICB9Ci0g
ICAgcmV0dXJuIHsKLSAgICAgIGxpdmVSb3V0ZXM6IGxpdmVSb3V0ZXMsCi0gICAgICBvd25TdGF0
ZTogbXlTdGF0ZQotICAgIH07Ci0gIH0KLQotICBmdW5jdGlvbiBhcHBlbmRPcnBoYW4obGl2ZVJv
dXRlcywgaW50bywgbXlTdGF0ZSkgewotICAgIGlmICghbGl2ZVJvdXRlcy5vdXRsZXRzLl9fZW1i
ZXJfb3JwaGFuc19fKSB7Ci0gICAgICBsaXZlUm91dGVzLm91dGxldHMuX19lbWJlcl9vcnBoYW5z
X18gPSB7Ci0gICAgICAgIHJlbmRlcjogewotICAgICAgICAgIG5hbWU6ICdfX2VtYmVyX29ycGhh
bnNfXycKLSAgICAgICAgfSwKLSAgICAgICAgb3V0bGV0czogbmV3IF9lbWJlck1ldGFsRW1wdHlf
b2JqZWN0LmRlZmF1bHQoKQotICAgICAgfTsKLSAgICB9Ci0gICAgbGl2ZVJvdXRlcy5vdXRsZXRz
Ll9fZW1iZXJfb3JwaGFuc19fLm91dGxldHNbaW50b10gPSBteVN0YXRlOwotICAgIF9lbWJlck1l
dGFsUnVuX2xvb3AuZGVmYXVsdC5zY2hlZHVsZSgnYWZ0ZXJSZW5kZXInLCBmdW5jdGlvbiAoKSB7
Ci0gICAgICAvLyBgd2FzVXNlZGAgZ2V0cyBzZXQgYnkgdGhlIHJlbmRlciBoZWxwZXIuIFNlZSB0
aGUgZnVuY3Rpb24KLSAgICAgIC8vIGBpbXBlcnNvbmF0ZUFuT3V0bGV0YC4KLSAgICAgIF9lbWJl
ck1ldGFsRGVidWcuYXNzZXJ0KCdZb3UgYXR0ZW1wdGVkIHRvIHJlbmRlciBpbnRvIFwnJyArIGlu
dG8gKyAnXCcgYnV0IGl0IHdhcyBub3QgZm91bmQnLCBsaXZlUm91dGVzLm91dGxldHMuX19lbWJl
cl9vcnBoYW5zX18ub3V0bGV0c1tpbnRvXS53YXNVc2VkKTsKLSAgICB9KTsKLSAgfQotCi0gIGZ1
bmN0aW9uIHJlcHJlc2VudEVtcHR5Um91dGUobGl2ZVJvdXRlcywgZGVmYXVsdFBhcmVudFN0YXRl
LCByb3V0ZSkgewotICAgIC8vIHRoZSByb3V0ZSBkaWRuJ3QgcmVuZGVyIGFueXRoaW5nCi0gICAg
dmFyIGFscmVhZHlBcHBlbmRlZCA9IGZpbmRMaXZlUm91dGUobGl2ZVJvdXRlcywgcm91dGUucm91
dGVOYW1lKTsKLSAgICBpZiAoYWxyZWFkeUFwcGVuZGVkKSB7Ci0gICAgICAvLyBCdXQgc29tZSBv
dGhlciByb3V0ZSBoYXMgYWxyZWFkeSByZW5kZXJlZCBvdXIgZGVmYXVsdAotICAgICAgLy8gdGVt
cGxhdGUsIHNvIHRoYXQgYmVjb21lcyB0aGUgZGVmYXVsdCB0YXJnZXQgZm9yIGFueQotICAgICAg
Ly8gY2hpbGRyZW4gd2UgbWF5IGhhdmUuCi0gICAgICByZXR1cm4gYWxyZWFkeUFwcGVuZGVkOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAvLyBDcmVhdGUgYW4gZW50cnkgdG8gcmVwcmVzZW50IG91ciBk
ZWZhdWx0IHRlbXBsYXRlIG5hbWUsCi0gICAgICAvLyBqdXN0IHNvIG90aGVyIHJvdXRlcyBjYW4g
dGFyZ2V0IGl0IGFuZCBpbmhlcml0IGl0cyBwbGFjZQotICAgICAgLy8gaW4gdGhlIG91dGxldCBo
aWVyYXJjaHkuCi0gICAgICBkZWZhdWx0UGFyZW50U3RhdGUub3V0bGV0cy5tYWluID0gewotICAg
ICAgICByZW5kZXI6IHsKLSAgICAgICAgICBuYW1lOiByb3V0ZS5yb3V0ZU5hbWUsCi0gICAgICAg
ICAgb3V0bGV0OiAnbWFpbicKLSAgICAgICAgfSwKLSAgICAgICAgb3V0bGV0czoge30KLSAgICAg
IH07Ci0gICAgICByZXR1cm4gZGVmYXVsdFBhcmVudFN0YXRlOwotICAgIH0KLSAgfQotCi0gIGV4
cG9ydHMuZGVmYXVsdCA9IEVtYmVyUm91dGVyOwotfSk7Ci0KLS8qKgotQG1vZHVsZSBlbWJlcgot
QHN1Ym1vZHVsZSBlbWJlci1yb3V0aW5nCi0qLwotZW5pZmVkKCdlbWJlci1yb3V0aW5nL3N5c3Rl
bS9yb3V0ZXJfc3RhdGUnLCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwvaXNfZW1wdHknLCAnZW1i
ZXItcnVudGltZS9zeXN0ZW0vb2JqZWN0JywgJ2VtYmVyLW1ldGFsL2Fzc2lnbiddLCBmdW5jdGlv
biAoZXhwb3J0cywgX2VtYmVyTWV0YWxJc19lbXB0eSwgX2VtYmVyUnVudGltZVN5c3RlbU9iamVj
dCwgX2VtYmVyTWV0YWxBc3NpZ24pIHsKLSAgJ3VzZSBzdHJpY3QnOwotCi0gIHZhciBrZXlzID0g
T2JqZWN0LmtleXM7Ci0KLSAgdmFyIFJvdXRlclN0YXRlID0gX2VtYmVyUnVudGltZVN5c3RlbU9i
amVjdC5kZWZhdWx0LmV4dGVuZCh7Ci0gICAgZW1iZXJSb3V0ZXI6IG51bGwsCi0gICAgcm91dGVy
SnM6IG51bGwsCi0gICAgcm91dGVySnNTdGF0ZTogbnVsbCwKLQotICAgIGlzQWN0aXZlSW50ZW50
OiBmdW5jdGlvbiAocm91dGVOYW1lLCBtb2RlbHMsIHF1ZXJ5UGFyYW1zLCBxdWVyeVBhcmFtc011
c3RNYXRjaCkgewotICAgICAgdmFyIHN0YXRlID0gdGhpcy5yb3V0ZXJKc1N0YXRlOwotICAgICAg
aWYgKCF0aGlzLnJvdXRlckpzLmlzQWN0aXZlSW50ZW50KHJvdXRlTmFtZSwgbW9kZWxzLCBudWxs
LCBzdGF0ZSkpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotCi0gICAgICB2YXIg
ZW1wdHlRdWVyeVBhcmFtcyA9IF9lbWJlck1ldGFsSXNfZW1wdHkuZGVmYXVsdChrZXlzKHF1ZXJ5
UGFyYW1zKSk7Ci0KLSAgICAgIGlmIChxdWVyeVBhcmFtc011c3RNYXRjaCAmJiAhZW1wdHlRdWVy
eVBhcmFtcykgewotICAgICAgICB2YXIgdmlzaWJsZVF1ZXJ5UGFyYW1zID0ge307Ci0gICAgICAg
IF9lbWJlck1ldGFsQXNzaWduLmRlZmF1bHQodmlzaWJsZVF1ZXJ5UGFyYW1zLCBxdWVyeVBhcmFt
cyk7Ci0KLSAgICAgICAgdGhpcy5lbWJlclJvdXRlci5fcHJlcGFyZVF1ZXJ5UGFyYW1zKHJvdXRl
TmFtZSwgbW9kZWxzLCB2aXNpYmxlUXVlcnlQYXJhbXMpOwotICAgICAgICByZXR1cm4gc2hhbGxv
d0VxdWFsKHZpc2libGVRdWVyeVBhcmFtcywgc3RhdGUucXVlcnlQYXJhbXMpOwotICAgICAgfQot
Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gIH0pOwotCi0gIGZ1bmN0aW9uIHNoYWxsb3dF
cXVhbChhLCBiKSB7Ci0gICAgdmFyIGs7Ci0gICAgZm9yIChrIGluIGEpIHsKLSAgICAgIGlmIChh
Lmhhc093blByb3BlcnR5KGspICYmIGFba10gIT09IGJba10pIHsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgfQotICAgIH0KLSAgICBmb3IgKGsgaW4gYikgewotICAgICAgaWYgKGIuaGFz
T3duUHJvcGVydHkoaykgJiYgYVtrXSAhPT0gYltrXSkgewotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgZXhwb3J0cy5kZWZh
dWx0ID0gUm91dGVyU3RhdGU7Ci19KTsKLWVuaWZlZCgnZW1iZXItcm91dGluZy91dGlscycsIFsn
ZXhwb3J0cycsICdlbWJlci1tZXRhbC9hc3NpZ24nLCAnZW1iZXItbWV0YWwvcHJvcGVydHlfZ2V0
J10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbEFzc2lnbiwgX2VtYmVyTWV0YWxQcm9w
ZXJ0eV9nZXQpIHsKLSAgJ3VzZSBzdHJpY3QnOwotCi0gIGV4cG9ydHMucm91dGVBcmdzID0gcm91
dGVBcmdzOwotICBleHBvcnRzLmdldEFjdGl2ZVRhcmdldE5hbWUgPSBnZXRBY3RpdmVUYXJnZXRO
YW1lOwotICBleHBvcnRzLnN0YXNoUGFyYW1OYW1lcyA9IHN0YXNoUGFyYW1OYW1lczsKLSAgZXhw
b3J0cy5jYWxjdWxhdGVDYWNoZUtleSA9IGNhbGN1bGF0ZUNhY2hlS2V5OwotICBleHBvcnRzLm5v
cm1hbGl6ZUNvbnRyb2xsZXJRdWVyeVBhcmFtcyA9IG5vcm1hbGl6ZUNvbnRyb2xsZXJRdWVyeVBh
cmFtczsKLQotICBmdW5jdGlvbiByb3V0ZUFyZ3ModGFyZ2V0Um91dGVOYW1lLCBtb2RlbHMsIHF1
ZXJ5UGFyYW1zKSB7Ci0gICAgdmFyIGFyZ3MgPSBbXTsKLSAgICBpZiAodHlwZW9mIHRhcmdldFJv
dXRlTmFtZSA9PT0gJ3N0cmluZycpIHsKLSAgICAgIGFyZ3MucHVzaCgnJyArIHRhcmdldFJvdXRl
TmFtZSk7Ci0gICAgfQotICAgIGFyZ3MucHVzaC5hcHBseShhcmdzLCBtb2RlbHMpOwotICAgIGFy
Z3MucHVzaCh7IHF1ZXJ5UGFyYW1zOiBxdWVyeVBhcmFtcyB9KTsKLSAgICByZXR1cm4gYXJnczsK
LSAgfQotCi0gIGZ1bmN0aW9uIGdldEFjdGl2ZVRhcmdldE5hbWUocm91dGVyKSB7Ci0gICAgdmFy
IGhhbmRsZXJJbmZvcyA9IHJvdXRlci5hY3RpdmVUcmFuc2l0aW9uID8gcm91dGVyLmFjdGl2ZVRy
YW5zaXRpb24uc3RhdGUuaGFuZGxlckluZm9zIDogcm91dGVyLnN0YXRlLmhhbmRsZXJJbmZvczsK
LSAgICByZXR1cm4gaGFuZGxlckluZm9zW2hhbmRsZXJJbmZvcy5sZW5ndGggLSAxXS5uYW1lOwot
ICB9Ci0KLSAgZnVuY3Rpb24gc3Rhc2hQYXJhbU5hbWVzKHJvdXRlciwgaGFuZGxlckluZm9zKSB7
Ci0gICAgaWYgKGhhbmRsZXJJbmZvcy5fbmFtZXNTdGFzaGVkKSB7Ci0gICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgLy8gVGhpcyBoZWxwZXIgZXhpc3RzIGJlY2F1c2Ugcm91dGVyLmpzL3JvdXRl
LXJlY29nbml6ZXIuanMgYXdrd2FyZGx5Ci0gICAgLy8ga2VlcHMgc2VwYXJhdGUgYSBoYW5kbGVy
SW5mbydzIGxpc3Qgb2YgcGFyYW1ldGVyIG5hbWVzIGRlcGVuZGluZwotICAgIC8vIG9uIHdoZXRo
ZXIgYSBVUkwgdHJhbnNpdGlvbiBvciBuYW1lZCB0cmFuc2l0aW9uIGlzIGhhcHBlbmluZy4KLSAg
ICAvLyBIb3BlZnVsbHkgd2UgY2FuIHJlbW92ZSB0aGlzIGluIHRoZSBmdXR1cmUuCi0gICAgdmFy
IHRhcmdldFJvdXRlTmFtZSA9IGhhbmRsZXJJbmZvc1toYW5kbGVySW5mb3MubGVuZ3RoIC0gMV0u
bmFtZTsKLSAgICB2YXIgcmVjb2dIYW5kbGVycyA9IHJvdXRlci5yb3V0ZXIucmVjb2duaXplci5o
YW5kbGVyc0Zvcih0YXJnZXRSb3V0ZU5hbWUpOwotICAgIHZhciBkeW5hbWljUGFyZW50ID0gbnVs
bDsKLQotICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBoYW5kbGVySW5mb3MubGVuZ3RoOyBpIDwg
bGVuOyArK2kpIHsKLSAgICAgIHZhciBoYW5kbGVySW5mbyA9IGhhbmRsZXJJbmZvc1tpXTsKLSAg
ICAgIHZhciBuYW1lcyA9IHJlY29nSGFuZGxlcnNbaV0ubmFtZXM7Ci0KLSAgICAgIGlmIChuYW1l
cy5sZW5ndGgpIHsKLSAgICAgICAgZHluYW1pY1BhcmVudCA9IGhhbmRsZXJJbmZvOwotICAgICAg
fQotCi0gICAgICBoYW5kbGVySW5mby5fbmFtZXMgPSBuYW1lczsKLQotICAgICAgdmFyIHJvdXRl
ID0gaGFuZGxlckluZm8uaGFuZGxlcjsKLSAgICAgIHJvdXRlLl9zdGFzaE5hbWVzKGhhbmRsZXJJ
bmZvLCBkeW5hbWljUGFyZW50KTsKLSAgICB9Ci0KLSAgICBoYW5kbGVySW5mb3MuX25hbWVzU3Rh
c2hlZCA9IHRydWU7Ci0gIH0KLQotICBmdW5jdGlvbiBfY2FsY3VsYXRlQ2FjaGVWYWx1ZVByZWZp
eChwcmVmaXgsIHBhcnQpIHsKLSAgICAvLyBjYWxjdWxhdGVzIHRoZSBkb3Qgc2VwZXJhdGVkIHNl
Y3Rpb25zIGZyb20gcHJlZml4IHRoYXQgYXJlIGFsc28KLSAgICAvLyBhdCB0aGUgc3RhcnQgb2Yg
cGFydCAtIHdoaWNoIGdpdmVzIHVzIHRoZSByb3V0ZSBuYW1lCi0KLSAgICAvLyBnaXZlbiA6IHBy
ZWZpeCA9IHNpdGUuYXJ0aWNsZS5jb21tZW50cywgcGFydCA9IHNpdGUuYXJ0aWNsZS5pZAotICAg
IC8vICAgICAgLSByZXR1cm5zOiBzaXRlLmFydGljbGUgKHVzZSBnZXQodmFsdWVzW3NpdGUuYXJ0
aWNsZV0sICdpZCcpIHRvIGdldCB0aGUgZHluYW1pYyBwYXJ0IC0gdXNlZCBiZWxvdykKLQotICAg
IC8vIGdpdmVuIDogcHJlZml4ID0gc2l0ZS5hcnRpY2xlLCBwYXJ0ID0gc2l0ZS5hcnRpY2xlLmlk
Ci0gICAgLy8gICAgICAtIHJldHVybnM6IHNpdGUuYXJ0aWNsZS4gKHVzZSBnZXQodmFsdWVzW3Np
dGUuYXJ0aWNsZV0sICdpZCcpIHRvIGdldCB0aGUgZHluYW1pYyBwYXJ0IC0gdXNlZCBiZWxvdykK
LQotICAgIHZhciBwcmVmaXhQYXJ0cyA9IHByZWZpeC5zcGxpdCgnLicpOwotICAgIHZhciBjdXJy
UHJlZml4ID0gJyc7Ci0KLSAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gcHJlZml4UGFydHMubGVu
Z3RoOyBpIDwgbGVuOyBpKyspIHsKLSAgICAgIHZhciBjdXJyUGFydCA9IHByZWZpeFBhcnRzLnNs
aWNlKDAsIGkgKyAxKS5qb2luKCcuJyk7Ci0gICAgICBpZiAocGFydC5pbmRleE9mKGN1cnJQYXJ0
KSAhPT0gMCkgewotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGN1cnJQcmVmaXggPSBj
dXJyUGFydDsKLSAgICB9Ci0KLSAgICByZXR1cm4gY3VyclByZWZpeDsKLSAgfQotCi0gIC8qCi0g
ICAgU3RvbGVuIGZyb20gQ29udHJvbGxlcgotICAqLwotCi0gIGZ1bmN0aW9uIGNhbGN1bGF0ZUNh
Y2hlS2V5KHByZWZpeCwgX3BhcnRzLCB2YWx1ZXMpIHsKLSAgICB2YXIgcGFydHMgPSBfcGFydHMg
fHwgW107Ci0gICAgdmFyIHN1ZmZpeGVzID0gJyc7Ci0gICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9
IHBhcnRzLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7Ci0gICAgICB2YXIgcGFydCA9IHBhcnRzW2ld
OwotICAgICAgdmFyIGNhY2hlVmFsdWVQcmVmaXggPSBfY2FsY3VsYXRlQ2FjaGVWYWx1ZVByZWZp
eChwcmVmaXgsIHBhcnQpOwotICAgICAgdmFyIHZhbHVlOwotICAgICAgaWYgKHZhbHVlcykgewot
ICAgICAgICBpZiAoY2FjaGVWYWx1ZVByZWZpeCAmJiBjYWNoZVZhbHVlUHJlZml4IGluIHZhbHVl
cykgewotICAgICAgICAgIHZhciBwYXJ0UmVtb3ZlZFByZWZpeCA9IHBhcnQuaW5kZXhPZihjYWNo
ZVZhbHVlUHJlZml4KSA9PT0gMCA/IHBhcnQuc3Vic3RyKGNhY2hlVmFsdWVQcmVmaXgubGVuZ3Ro
ICsgMSkgOiBwYXJ0OwotICAgICAgICAgIHZhbHVlID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQu
Z2V0KHZhbHVlc1tjYWNoZVZhbHVlUHJlZml4XSwgcGFydFJlbW92ZWRQcmVmaXgpOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgIHZhbHVlID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0
KHZhbHVlcywgcGFydCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHN1ZmZpeGVzICs9ICc6
OicgKyBwYXJ0ICsgJzonICsgdmFsdWU7Ci0gICAgfQotICAgIHJldHVybiBwcmVmaXggKyBzdWZm
aXhlcy5yZXBsYWNlKEFMTF9QRVJJT0RTX1JFR0VYLCAnLScpOwotICB9Ci0KLSAgdmFyIEFMTF9Q
RVJJT0RTX1JFR0VYID0gL1wuL2c7Ci0KLSAgLyoKLSAgICBDb250cm9sbGVyLWRlZmluZWQgcXVl
cnkgcGFyYW1ldGVycyBjYW4gY29tZSBpbiB0aHJlZSBzaGFwZXM6Ci0gIAotICAgIEFycmF5Ci0g
ICAgICBxdWVyeVBhcmFtczogWydmb28nLCAnYmFyJ10KLSAgICBBcnJheSBvZiBzaW1wbGUgb2Jq
ZWN0cyB3aGVyZSB2YWx1ZSBpcyBhbiBhbGlhcwotICAgICAgcXVlcnlQYXJhbXM6IFsKLSAgICAg
ICAgewotICAgICAgICAgICdmb28nOiAncmVuYW1lX2Zvb190b190aGlzJwotICAgICAgICB9LAot
ICAgICAgICB7Ci0gICAgICAgICAgJ2Jhcic6ICdjYWxsX2Jhcl90aGlzX2luc3RlYWQnCi0gICAg
ICAgIH0KLSAgICAgIF0KLSAgICBBcnJheSBvZiBmdWxseSBkZWZpbmVkIG9iamVjdHMKLSAgICAg
IHF1ZXJ5UGFyYW1zOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAnZm9vJzogewotICAgICAgICAg
ICAgYXM6ICdyZW5hbWVfZm9vX3RvX3RoaXMnCi0gICAgICAgICAgfSwKLSAgICAgICAgfQotICAg
ICAgICB7Ci0gICAgICAgICAgJ2Jhcic6IHsKLSAgICAgICAgICAgIGFzOiAnY2FsbF9iYXJfdGhp
c19pbnN0ZWFkJywKLSAgICAgICAgICAgIHNjb3BlOiAnY29udHJvbGxlcicKLSAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICAgIF0KLSAgCi0gICAgVGhpcyBoZWxwZXIgbm9ybWFsaXplcyBhbGwg
dGhyZWUgcG9zc2libGUgc3R5bGVzIGludG8gdGhlCi0gICAgJ0FycmF5IG9mIGZ1bGx5IGRlZmlu
ZWQgb2JqZWN0cycgc3R5bGUuCi0gICovCi0KLSAgZnVuY3Rpb24gbm9ybWFsaXplQ29udHJvbGxl
clF1ZXJ5UGFyYW1zKHF1ZXJ5UGFyYW1zKSB7Ci0gICAgaWYgKHF1ZXJ5UGFyYW1zLl9xcE1hcCkg
ewotICAgICAgcmV0dXJuIHF1ZXJ5UGFyYW1zLl9xcE1hcDsKLSAgICB9Ci0KLSAgICB2YXIgcXBN
YXAgPSBxdWVyeVBhcmFtcy5fcXBNYXAgPSB7fTsKLQotICAgIGZvciAodmFyIGkgPSAwLCBsZW4g
PSBxdWVyeVBhcmFtcy5sZW5ndGg7IGkgPCBsZW47ICsraSkgewotICAgICAgYWNjdW11bGF0ZVF1
ZXJ5UGFyYW1EZXNjcmlwdG9ycyhxdWVyeVBhcmFtc1tpXSwgcXBNYXApOwotICAgIH0KLQotICAg
IHJldHVybiBxcE1hcDsKLSAgfQotCi0gIGZ1bmN0aW9uIGFjY3VtdWxhdGVRdWVyeVBhcmFtRGVz
Y3JpcHRvcnMoX2Rlc2MsIGFjY3VtKSB7Ci0gICAgdmFyIGRlc2MgPSBfZGVzYzsKLSAgICB2YXIg
dG1wOwotICAgIGlmICh0eXBlb2YgZGVzYyA9PT0gJ3N0cmluZycpIHsKLSAgICAgIHRtcCA9IHt9
OwotICAgICAgdG1wW2Rlc2NdID0geyBhczogbnVsbCB9OwotICAgICAgZGVzYyA9IHRtcDsKLSAg
ICB9Ci0KLSAgICBmb3IgKHZhciBrZXkgaW4gZGVzYykgewotICAgICAgaWYgKCFkZXNjLmhhc093
blByb3BlcnR5KGtleSkpIHsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotCi0gICAgICB2YXIg
c2luZ2xlRGVzYyA9IGRlc2Nba2V5XTsKLSAgICAgIGlmICh0eXBlb2Ygc2luZ2xlRGVzYyA9PT0g
J3N0cmluZycpIHsKLSAgICAgICAgc2luZ2xlRGVzYyA9IHsgYXM6IHNpbmdsZURlc2MgfTsKLSAg
ICAgIH0KLQotICAgICAgdG1wID0gYWNjdW1ba2V5XSB8fCB7IGFzOiBudWxsLCBzY29wZTogJ21v
ZGVsJyB9OwotICAgICAgX2VtYmVyTWV0YWxBc3NpZ24uZGVmYXVsdCh0bXAsIHNpbmdsZURlc2Mp
OwotCi0gICAgICBhY2N1bVtrZXldID0gdG1wOwotICAgIH0KLSAgfQotfSk7Ci1lbmlmZWQoJ2Vt
YmVyLXJ1bnRpbWUvY29tcGFyZScsIFsnZXhwb3J0cycsICdlbWJlci1ydW50aW1lL3V0aWxzJywg
J2VtYmVyLXJ1bnRpbWUvbWl4aW5zL2NvbXBhcmFibGUnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9l
bWJlclJ1bnRpbWVVdGlscywgX2VtYmVyUnVudGltZU1peGluc0NvbXBhcmFibGUpIHsKLSAgJ3Vz
ZSBzdHJpY3QnOwotCi0gIGV4cG9ydHMuZGVmYXVsdCA9IGNvbXBhcmU7Ci0KLSAgdmFyIFRZUEVf
T1JERVIgPSB7Ci0gICAgJ3VuZGVmaW5lZCc6IDAsCi0gICAgJ251bGwnOiAxLAotICAgICdib29s
ZWFuJzogMiwKLSAgICAnbnVtYmVyJzogMywKLSAgICAnc3RyaW5nJzogNCwKLSAgICAnYXJyYXkn
OiA1LAotICAgICdvYmplY3QnOiA2LAotICAgICdpbnN0YW5jZSc6IDcsCi0gICAgJ2Z1bmN0aW9u
JzogOCwKLSAgICAnY2xhc3MnOiA5LAotICAgICdkYXRlJzogMTAKLSAgfTsKLQotICAvLwotICAv
LyB0aGUgc3BhY2VzaGlwIG9wZXJhdG9yCi0gIC8vCi0gIC8vICAgICAgICAgICAgICAgICAgICAg
IGAuIF9fXwotICAvLyAgICAgICAgICAgICAgICAgICAgIF9fLCcgX19gLiAgICAgICAgICAgICAg
ICBfLi4tLS0tLi4uLl9fX18KLSAgLy8gICAgICAgICBfXy4uLi0tLidgYDsuICAgLC4gICA7YGAt
LS4uX18gICAgIC4nICAgICwtLl8gICAgXy4tJwotICAvLyAgIF8uLi0nJy0tLS0tLS0nICAgYCcg
ICBgJyAgIGAnICAgICBPIGBgLScnLl8gICAoLDsnKSBfLCcKLSAgLy8gLCdfX19fX19fX19fX19f
X19fICAgICAgICAgICAgICAgICAgICAgICAgICBcYC0uX2AtJywnCi0gIC8vICBgLl8gICAgICAg
ICAgICAgIGBgYGBgYGBgYGBgLS0tLS0tLi4uX19fICAgJy0uLl8nLToKLSAgLy8gICAgIGBgYC0t
Li5fICAgICAgLC4gICAgICAgICAgICAgICAgICAgICBgYGBgLS0uLi5fX1wtLgotICAvLyAgICAg
ICAgICAgICBgLi0tLiBgLWAgIklORklOSVRZIElTIExFU1MgICAgIF9fX18gICAgfCAgfGAKLSAg
Ly8gICAgICAgICAgICAgICBgLiBgLiAgIFRIQU4gQkVZT05EIiAgICAgICAgLCdgYGBgYC4gIDsg
IDtgCi0gIC8vICAgICAgICAgICAgICAgICBgLl9gLiAgICAgICAgX19fX19fX19fXyAgIGAuICAg
ICAgXCdfXy9gCi0gIC8vICAgICAgICAgICAgICAgICAgICBgLTouX19fX18vX19fX19fL19fXy9f
X19fYC4gICAgIFwgIGAKLSAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAg
ICAgYC5fICAgIGAuICAgIFwKLSAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAu
X19fX19fX19fYC0uICAgYC4gICBgLl9fXwotICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBTU3QgIGAtLS0tLS0nYAotICBmdW5jdGlvbiBzcGFjZXNoaXAo
YSwgYikgewotICAgIHZhciBkaWZmID0gYSAtIGI7Ci0gICAgcmV0dXJuIChkaWZmID4gMCkgLSAo
ZGlmZiA8IDApOwotICB9Ci0KLSAgLyoqCi0gICBDb21wYXJlcyB0d28gamF2YXNjcmlwdCB2YWx1
ZXMgYW5kIHJldHVybnM6Ci0gIAotICAgIC0gLTEgaWYgdGhlIGZpcnN0IGlzIHNtYWxsZXIgdGhh
biB0aGUgc2Vjb25kLAotICAgIC0gMCBpZiBib3RoIGFyZSBlcXVhbCwKLSAgICAtIDEgaWYgdGhl
IGZpcnN0IGlzIGdyZWF0ZXIgdGhhbiB0aGUgc2Vjb25kLgotICAKLSAgICBgYGBqYXZhc2NyaXB0
Ci0gICAgRW1iZXIuY29tcGFyZSgnaGVsbG8nLCAnaGVsbG8nKTsgIC8vIDAKLSAgICBFbWJlci5j
b21wYXJlKCdhYmMnLCAnZGZnJyk7ICAgICAgLy8gLTEKLSAgICBFbWJlci5jb21wYXJlKDIsIDEp
OyAgICAgICAgICAgICAgLy8gMQotICAgIGBgYAotICAKLSAgIElmIHRoZSB0eXBlcyBvZiB0aGUg
dHdvIG9iamVjdHMgYXJlIGRpZmZlcmVudCBwcmVjZWRlbmNlIG9jY3VycyBpbiB0aGUKLSAgIGZv
bGxvd2luZyBvcmRlciwgd2l0aCB0eXBlcyBlYXJsaWVyIGluIHRoZSBsaXN0IGNvbnNpZGVyZWQg
YDxgIHR5cGVzCi0gICBsYXRlciBpbiB0aGUgbGlzdDoKLSAgCi0gICAgLSB1bmRlZmluZWQKLSAg
ICAtIG51bGwKLSAgICAtIGJvb2xlYW4KLSAgICAtIG51bWJlcgotICAgIC0gc3RyaW5nCi0gICAg
LSBhcnJheQotICAgIC0gb2JqZWN0Ci0gICAgLSBpbnN0YW5jZQotICAgIC0gZnVuY3Rpb24KLSAg
ICAtIGNsYXNzCi0gICAgLSBkYXRlCi0gIAotICAgIGBgYGphdmFzY3JpcHQKLSAgICBFbWJlci5j
b21wYXJlKCdoZWxsbycsIDUwKTsgICAgICAgLy8gMQotICAgIEVtYmVyLmNvbXBhcmUoNTAsICdo
ZWxsbycpOyAgICAgICAvLyAtMQotICAgIGBgYAotICAKLSAgIEBtZXRob2QgY29tcGFyZQotICAg
QGZvciBFbWJlcgotICAgQHBhcmFtIHtPYmplY3R9IHYgRmlyc3QgdmFsdWUgdG8gY29tcGFyZQot
ICAgQHBhcmFtIHtPYmplY3R9IHcgU2Vjb25kIHZhbHVlIHRvIGNvbXBhcmUKLSAgIEByZXR1cm4g
e051bWJlcn0gLTEgaWYgdiA8IHcsIDAgaWYgdiA9IHcgYW5kIDEgaWYgdiA+IHcuCi0gICBAcHVi
bGljCi0gICovCi0KLSAgZnVuY3Rpb24gY29tcGFyZSh2LCB3KSB7Ci0gICAgaWYgKHYgPT09IHcp
IHsKLSAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIHZhciB0eXBlMSA9IF9lbWJlclJ1bnRp
bWVVdGlscy50eXBlT2Yodik7Ci0gICAgdmFyIHR5cGUyID0gX2VtYmVyUnVudGltZVV0aWxzLnR5
cGVPZih3KTsKLQotICAgIGlmIChfZW1iZXJSdW50aW1lTWl4aW5zQ29tcGFyYWJsZS5kZWZhdWx0
KSB7Ci0gICAgICBpZiAodHlwZTEgPT09ICdpbnN0YW5jZScgJiYgX2VtYmVyUnVudGltZU1peGlu
c0NvbXBhcmFibGUuZGVmYXVsdC5kZXRlY3QodikgJiYgdi5jb25zdHJ1Y3Rvci5jb21wYXJlKSB7
Ci0gICAgICAgIHJldHVybiB2LmNvbnN0cnVjdG9yLmNvbXBhcmUodiwgdyk7Ci0gICAgICB9Ci0K
LSAgICAgIGlmICh0eXBlMiA9PT0gJ2luc3RhbmNlJyAmJiBfZW1iZXJSdW50aW1lTWl4aW5zQ29t
cGFyYWJsZS5kZWZhdWx0LmRldGVjdCh3KSAmJiB3LmNvbnN0cnVjdG9yLmNvbXBhcmUpIHsKLSAg
ICAgICAgcmV0dXJuIHcuY29uc3RydWN0b3IuY29tcGFyZSh3LCB2KSAqIC0xOwotICAgICAgfQot
ICAgIH0KLQotICAgIHZhciByZXMgPSBzcGFjZXNoaXAoVFlQRV9PUkRFUlt0eXBlMV0sIFRZUEVf
T1JERVJbdHlwZTJdKTsKLQotICAgIGlmIChyZXMgIT09IDApIHsKLSAgICAgIHJldHVybiByZXM7
Ci0gICAgfQotCi0gICAgLy8gdHlwZXMgYXJlIGVxdWFsIC0gc28gd2UgaGF2ZSB0byBjaGVjayB2
YWx1ZXMgbm93Ci0gICAgc3dpdGNoICh0eXBlMSkgewotICAgICAgY2FzZSAnYm9vbGVhbic6Ci0g
ICAgICBjYXNlICdudW1iZXInOgotICAgICAgICByZXR1cm4gc3BhY2VzaGlwKHYsIHcpOwotCi0g
ICAgICBjYXNlICdzdHJpbmcnOgotICAgICAgICByZXR1cm4gc3BhY2VzaGlwKHYubG9jYWxlQ29t
cGFyZSh3KSwgMCk7Ci0KLSAgICAgIGNhc2UgJ2FycmF5JzoKLSAgICAgICAgdmFyIHZMZW4gPSB2
Lmxlbmd0aDsKLSAgICAgICAgdmFyIHdMZW4gPSB3Lmxlbmd0aDsKLSAgICAgICAgdmFyIGxlbiA9
IE1hdGgubWluKHZMZW4sIHdMZW4pOwotCi0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVu
OyBpKyspIHsKLSAgICAgICAgICB2YXIgciA9IGNvbXBhcmUodltpXSwgd1tpXSk7Ci0gICAgICAg
ICAgaWYgKHIgIT09IDApIHsKLSAgICAgICAgICAgIHJldHVybiByOwotICAgICAgICAgIH0KLSAg
ICAgICAgfQotCi0gICAgICAgIC8vIGFsbCBlbGVtZW50cyBhcmUgZXF1YWwgbm93Ci0gICAgICAg
IC8vIHNob3J0ZXIgYXJyYXkgc2hvdWxkIGJlIG9yZGVyZWQgZmlyc3QKLSAgICAgICAgcmV0dXJu
IHNwYWNlc2hpcCh2TGVuLCB3TGVuKTsKLQotICAgICAgY2FzZSAnaW5zdGFuY2UnOgotICAgICAg
ICBpZiAoX2VtYmVyUnVudGltZU1peGluc0NvbXBhcmFibGUuZGVmYXVsdCAmJiBfZW1iZXJSdW50
aW1lTWl4aW5zQ29tcGFyYWJsZS5kZWZhdWx0LmRldGVjdCh2KSkgewotICAgICAgICAgIHJldHVy
biB2LmNvbXBhcmUodiwgdyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAg
IGNhc2UgJ2RhdGUnOgotICAgICAgICByZXR1cm4gc3BhY2VzaGlwKHYuZ2V0VGltZSgpLCB3Lmdl
dFRpbWUoKSk7Ci0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAg
fQotfSk7Ci1lbmlmZWQoJ2VtYmVyLXJ1bnRpbWUvY29tcHV0ZWQvcmVkdWNlX2NvbXB1dGVkX21h
Y3JvcycsIFsnZXhwb3J0cycsICdlbWJlci1tZXRhbC9kZWJ1ZycsICdlbWJlci1tZXRhbC9wcm9w
ZXJ0eV9nZXQnLCAnZW1iZXItbWV0YWwvZXJyb3InLCAnZW1iZXItbWV0YWwvY29tcHV0ZWQnLCAn
ZW1iZXItbWV0YWwvb2JzZXJ2ZXInLCAnZW1iZXItcnVudGltZS9jb21wYXJlJywgJ2VtYmVyLXJ1
bnRpbWUvdXRpbHMnLCAnZW1iZXItcnVudGltZS9zeXN0ZW0vbmF0aXZlX2FycmF5JywgJ2VtYmVy
LW1ldGFsL2lzX25vbmUnLCAnZW1iZXItbWV0YWwvZ2V0X3Byb3BlcnRpZXMnLCAnZW1iZXItbWV0
YWwvZW1wdHlfb2JqZWN0JywgJ2VtYmVyLW1ldGFsL3V0aWxzJywgJ2VtYmVyLW1ldGFsL3dlYWtf
bWFwJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbERlYnVnLCBfZW1iZXJNZXRhbFBy
b3BlcnR5X2dldCwgX2VtYmVyTWV0YWxFcnJvciwgX2VtYmVyTWV0YWxDb21wdXRlZCwgX2VtYmVy
TWV0YWxPYnNlcnZlciwgX2VtYmVyUnVudGltZUNvbXBhcmUsIF9lbWJlclJ1bnRpbWVVdGlscywg
X2VtYmVyUnVudGltZVN5c3RlbU5hdGl2ZV9hcnJheSwgX2VtYmVyTWV0YWxJc19ub25lLCBfZW1i
ZXJNZXRhbEdldF9wcm9wZXJ0aWVzLCBfZW1iZXJNZXRhbEVtcHR5X29iamVjdCwgX2VtYmVyTWV0
YWxVdGlscywgX2VtYmVyTWV0YWxXZWFrX21hcCkgewotICAvKioKLSAgQG1vZHVsZSBlbWJlcgot
ICBAc3VibW9kdWxlIGVtYmVyLXJ1bnRpbWUKLSAgKi8KLQotICAndXNlIHN0cmljdCc7Ci0KLSAg
ZXhwb3J0cy5zdW0gPSBzdW07Ci0gIGV4cG9ydHMubWF4ID0gbWF4OwotICBleHBvcnRzLm1pbiA9
IG1pbjsKLSAgZXhwb3J0cy5tYXAgPSBtYXA7Ci0gIGV4cG9ydHMubWFwQnkgPSBtYXBCeTsKLSAg
ZXhwb3J0cy5maWx0ZXIgPSBmaWx0ZXI7Ci0gIGV4cG9ydHMuZmlsdGVyQnkgPSBmaWx0ZXJCeTsK
LSAgZXhwb3J0cy51bmlxID0gdW5pcTsKLSAgZXhwb3J0cy51bmlxQnkgPSB1bmlxQnk7Ci0gIGV4
cG9ydHMuaW50ZXJzZWN0ID0gaW50ZXJzZWN0OwotICBleHBvcnRzLnNldERpZmYgPSBzZXREaWZm
OwotICBleHBvcnRzLmNvbGxlY3QgPSBjb2xsZWN0OwotICBleHBvcnRzLnNvcnQgPSBzb3J0Owot
Ci0gIGZ1bmN0aW9uIHJlZHVjZU1hY3JvKGRlcGVuZGVudEtleSwgY2FsbGJhY2ssIGluaXRpYWxW
YWx1ZSkgewotICAgIHJldHVybiBfZW1iZXJNZXRhbENvbXB1dGVkLmNvbXB1dGVkKGRlcGVuZGVu
dEtleSArICcuW10nLCBmdW5jdGlvbiAoKSB7Ci0gICAgICB2YXIgX3RoaXMgPSB0aGlzOwotCi0g
ICAgICB2YXIgYXJyID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsIGRlcGVuZGVu
dEtleSk7Ci0KLSAgICAgIGlmIChhcnIgPT09IG51bGwgfHwgdHlwZW9mIGFyciAhPT0gJ29iamVj
dCcpIHsKLSAgICAgICAgcmV0dXJuIGluaXRpYWxWYWx1ZTsKLSAgICAgIH0KLQotICAgICAgcmV0
dXJuIGFyci5yZWR1Y2UoZnVuY3Rpb24gKHByZXZpb3VzVmFsdWUsIGN1cnJlbnRWYWx1ZSwgaW5k
ZXgsIGFycmF5KSB7Ci0gICAgICAgIHJldHVybiBjYWxsYmFjay5jYWxsKF90aGlzLCBwcmV2aW91
c1ZhbHVlLCBjdXJyZW50VmFsdWUsIGluZGV4LCBhcnJheSk7Ci0gICAgICB9LCBpbml0aWFsVmFs
dWUpOwotICAgIH0pLnJlYWRPbmx5KCk7Ci0gIH0KLQotICBmdW5jdGlvbiBhcnJheU1hY3JvKGRl
cGVuZGVudEtleSwgY2FsbGJhY2spIHsKLSAgICAvLyBUaGlzIGlzIGEgYml0IHVnbHkKLSAgICB2
YXIgcHJvcGVydHlOYW1lOwotICAgIGlmICgvQGVhY2gvLnRlc3QoZGVwZW5kZW50S2V5KSkgewot
ICAgICAgcHJvcGVydHlOYW1lID0gZGVwZW5kZW50S2V5LnJlcGxhY2UoL1wuQGVhY2guKiQvLCAn
Jyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHByb3BlcnR5TmFtZSA9IGRlcGVuZGVudEtleTsKLSAg
ICAgIGRlcGVuZGVudEtleSArPSAnLltdJzsKLSAgICB9Ci0KLSAgICByZXR1cm4gX2VtYmVyTWV0
YWxDb21wdXRlZC5jb21wdXRlZChkZXBlbmRlbnRLZXksIGZ1bmN0aW9uICgpIHsKLSAgICAgIHZh
ciB2YWx1ZSA9IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0aGlzLCBwcm9wZXJ0eU5hbWUp
OwotICAgICAgaWYgKF9lbWJlclJ1bnRpbWVVdGlscy5pc0FycmF5KHZhbHVlKSkgewotICAgICAg
ICByZXR1cm4gX2VtYmVyUnVudGltZVN5c3RlbU5hdGl2ZV9hcnJheS5BKGNhbGxiYWNrLmNhbGwo
dGhpcywgdmFsdWUpKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVybiBfZW1iZXJSdW50
aW1lU3lzdGVtTmF0aXZlX2FycmF5LkEoKTsKLSAgICAgIH0KLSAgICB9KS5yZWFkT25seSgpOwot
ICB9Ci0KLSAgZnVuY3Rpb24gbXVsdGlBcnJheU1hY3JvKGRlcGVuZGVudEtleXMsIGNhbGxiYWNr
KSB7Ci0gICAgdmFyIGFyZ3MgPSBkZXBlbmRlbnRLZXlzLm1hcChmdW5jdGlvbiAoa2V5KSB7Ci0g
ICAgICByZXR1cm4ga2V5ICsgJy5bXSc7Ci0gICAgfSk7Ci0KLSAgICBhcmdzLnB1c2goZnVuY3Rp
b24gKCkgewotICAgICAgcmV0dXJuIF9lbWJlclJ1bnRpbWVTeXN0ZW1OYXRpdmVfYXJyYXkuQShj
YWxsYmFjay5jYWxsKHRoaXMsIGRlcGVuZGVudEtleXMpKTsKLSAgICB9KTsKLQotICAgIHJldHVy
biBfZW1iZXJNZXRhbENvbXB1dGVkLmNvbXB1dGVkLmFwcGx5KHRoaXMsIGFyZ3MpLnJlYWRPbmx5
KCk7Ci0gIH0KLQotICAvKioKLSAgICBBIGNvbXB1dGVkIHByb3BlcnR5IHRoYXQgcmV0dXJucyB0
aGUgc3VtIG9mIHRoZSB2YWx1ZXMKLSAgICBpbiB0aGUgZGVwZW5kZW50IGFycmF5LgotICAKLSAg
ICBAbWV0aG9kIHN1bQotICAgIEBmb3IgRW1iZXIuY29tcHV0ZWQKLSAgICBAcGFyYW0ge1N0cmlu
Z30gZGVwZW5kZW50S2V5Ci0gICAgQHJldHVybiB7RW1iZXIuQ29tcHV0ZWRQcm9wZXJ0eX0gY29t
cHV0ZXMgdGhlIHN1bSBvZiBhbGwgdmFsdWVzIGluIHRoZSBkZXBlbmRlbnRLZXkncyBhcnJheQot
ICAgIEBzaW5jZSAxLjQuMAotICAgIEBwdWJsaWMKLSAgKi8KLQotICBmdW5jdGlvbiBzdW0oZGVw
ZW5kZW50S2V5KSB7Ci0gICAgcmV0dXJuIHJlZHVjZU1hY3JvKGRlcGVuZGVudEtleSwgZnVuY3Rp
b24gKHN1bSwgaXRlbSkgewotICAgICAgcmV0dXJuIHN1bSArIGl0ZW07Ci0gICAgfSwgMCk7Ci0g
IH0KLQotICAvKioKLSAgICBBIGNvbXB1dGVkIHByb3BlcnR5IHRoYXQgY2FsY3VsYXRlcyB0aGUg
bWF4aW11bSB2YWx1ZSBpbiB0aGUKLSAgICBkZXBlbmRlbnQgYXJyYXkuIFRoaXMgd2lsbCByZXR1
cm4gYC1JbmZpbml0eWAgd2hlbiB0aGUgZGVwZW5kZW50Ci0gICAgYXJyYXkgaXMgZW1wdHkuCi0g
IAotICAgIGBgYGphdmFzY3JpcHQKLSAgICB2YXIgUGVyc29uID0gRW1iZXIuT2JqZWN0LmV4dGVu
ZCh7Ci0gICAgICBjaGlsZEFnZXM6IEVtYmVyLmNvbXB1dGVkLm1hcEJ5KCdjaGlsZHJlbicsICdh
Z2UnKSwKLSAgICAgIG1heENoaWxkQWdlOiBFbWJlci5jb21wdXRlZC5tYXgoJ2NoaWxkQWdlcycp
Ci0gICAgfSk7Ci0gIAotICAgIHZhciBsb3JkQnlyb24gPSBQZXJzb24uY3JlYXRlKHsgY2hpbGRy
ZW46IFtdIH0pOwotICAKLSAgICBsb3JkQnlyb24uZ2V0KCdtYXhDaGlsZEFnZScpOyAvLyAtSW5m
aW5pdHkKLSAgICBsb3JkQnlyb24uZ2V0KCdjaGlsZHJlbicpLnB1c2hPYmplY3QoewotICAgICAg
bmFtZTogJ0F1Z3VzdGEgQWRhIEJ5cm9uJywgYWdlOiA3Ci0gICAgfSk7Ci0gICAgbG9yZEJ5cm9u
LmdldCgnbWF4Q2hpbGRBZ2UnKTsgLy8gNwotICAgIGxvcmRCeXJvbi5nZXQoJ2NoaWxkcmVuJyku
cHVzaE9iamVjdHMoW3sKLSAgICAgIG5hbWU6ICdBbGxlZ3JhIEJ5cm9uJywKLSAgICAgIGFnZTog
NQotICAgIH0sIHsKLSAgICAgIG5hbWU6ICdFbGl6YWJldGggTWVkb3JhIExlaWdoJywKLSAgICAg
IGFnZTogOAotICAgIH1dKTsKLSAgICBsb3JkQnlyb24uZ2V0KCdtYXhDaGlsZEFnZScpOyAvLyA4
Ci0gICAgYGBgCi0gIAotICAgIEBtZXRob2QgbWF4Ci0gICAgQGZvciBFbWJlci5jb21wdXRlZAot
ICAgIEBwYXJhbSB7U3RyaW5nfSBkZXBlbmRlbnRLZXkKLSAgICBAcmV0dXJuIHtFbWJlci5Db21w
dXRlZFByb3BlcnR5fSBjb21wdXRlcyB0aGUgbGFyZ2VzdCB2YWx1ZSBpbiB0aGUgZGVwZW5kZW50
S2V5J3MgYXJyYXkKLSAgICBAcHVibGljCi0gICovCi0KLSAgZnVuY3Rpb24gbWF4KGRlcGVuZGVu
dEtleSkgewotICAgIHJldHVybiByZWR1Y2VNYWNybyhkZXBlbmRlbnRLZXksIGZ1bmN0aW9uICht
YXgsIGl0ZW0pIHsKLSAgICAgIHJldHVybiBNYXRoLm1heChtYXgsIGl0ZW0pOwotICAgIH0sIC1J
bmZpbml0eSk7Ci0gIH0KLQotICAvKioKLSAgICBBIGNvbXB1dGVkIHByb3BlcnR5IHRoYXQgY2Fs
Y3VsYXRlcyB0aGUgbWluaW11bSB2YWx1ZSBpbiB0aGUKLSAgICBkZXBlbmRlbnQgYXJyYXkuIFRo
aXMgd2lsbCByZXR1cm4gYEluZmluaXR5YCB3aGVuIHRoZSBkZXBlbmRlbnQKLSAgICBhcnJheSBp
cyBlbXB0eS4KLSAgCi0gICAgYGBgamF2YXNjcmlwdAotICAgIHZhciBQZXJzb24gPSBFbWJlci5P
YmplY3QuZXh0ZW5kKHsKLSAgICAgIGNoaWxkQWdlczogRW1iZXIuY29tcHV0ZWQubWFwQnkoJ2No
aWxkcmVuJywgJ2FnZScpLAotICAgICAgbWluQ2hpbGRBZ2U6IEVtYmVyLmNvbXB1dGVkLm1pbign
Y2hpbGRBZ2VzJykKLSAgICB9KTsKLSAgCi0gICAgdmFyIGxvcmRCeXJvbiA9IFBlcnNvbi5jcmVh
dGUoeyBjaGlsZHJlbjogW10gfSk7Ci0gIAotICAgIGxvcmRCeXJvbi5nZXQoJ21pbkNoaWxkQWdl
Jyk7IC8vIEluZmluaXR5Ci0gICAgbG9yZEJ5cm9uLmdldCgnY2hpbGRyZW4nKS5wdXNoT2JqZWN0
KHsKLSAgICAgIG5hbWU6ICdBdWd1c3RhIEFkYSBCeXJvbicsIGFnZTogNwotICAgIH0pOwotICAg
IGxvcmRCeXJvbi5nZXQoJ21pbkNoaWxkQWdlJyk7IC8vIDcKLSAgICBsb3JkQnlyb24uZ2V0KCdj
aGlsZHJlbicpLnB1c2hPYmplY3RzKFt7Ci0gICAgICBuYW1lOiAnQWxsZWdyYSBCeXJvbicsCi0g
ICAgICBhZ2U6IDUKLSAgICB9LCB7Ci0gICAgICBuYW1lOiAnRWxpemFiZXRoIE1lZG9yYSBMZWln
aCcsCi0gICAgICBhZ2U6IDgKLSAgICB9XSk7Ci0gICAgbG9yZEJ5cm9uLmdldCgnbWluQ2hpbGRB
Z2UnKTsgLy8gNQotICAgIGBgYAotICAKLSAgICBAbWV0aG9kIG1pbgotICAgIEBmb3IgRW1iZXIu
Y29tcHV0ZWQKLSAgICBAcGFyYW0ge1N0cmluZ30gZGVwZW5kZW50S2V5Ci0gICAgQHJldHVybiB7
RW1iZXIuQ29tcHV0ZWRQcm9wZXJ0eX0gY29tcHV0ZXMgdGhlIHNtYWxsZXN0IHZhbHVlIGluIHRo
ZSBkZXBlbmRlbnRLZXkncyBhcnJheQotICAgIEBwdWJsaWMKLSAgKi8KLQotICBmdW5jdGlvbiBt
aW4oZGVwZW5kZW50S2V5KSB7Ci0gICAgcmV0dXJuIHJlZHVjZU1hY3JvKGRlcGVuZGVudEtleSwg
ZnVuY3Rpb24gKG1pbiwgaXRlbSkgewotICAgICAgcmV0dXJuIE1hdGgubWluKG1pbiwgaXRlbSk7
Ci0gICAgfSwgSW5maW5pdHkpOwotICB9Ci0KLSAgLyoqCi0gICAgUmV0dXJucyBhbiBhcnJheSBt
YXBwZWQgdmlhIHRoZSBjYWxsYmFjawotICAKLSAgICBUaGUgY2FsbGJhY2sgbWV0aG9kIHlvdSBw
cm92aWRlIHNob3VsZCBoYXZlIHRoZSBmb2xsb3dpbmcgc2lnbmF0dXJlLgotICAgIGBpdGVtYCBp
cyB0aGUgY3VycmVudCBpdGVtIGluIHRoZSBpdGVyYXRpb24uCi0gICAgYGluZGV4YCBpcyB0aGUg
aW50ZWdlciBpbmRleCBvZiB0aGUgY3VycmVudCBpdGVtIGluIHRoZSBpdGVyYXRpb24uCi0gIAot
ICAgIGBgYGphdmFzY3JpcHQKLSAgICBmdW5jdGlvbihpdGVtLCBpbmRleCk7Ci0gICAgYGBgCi0g
IAotICAgIEV4YW1wbGUKLSAgCi0gICAgYGBgamF2YXNjcmlwdAotICAgIHZhciBIYW1zdGVyID0g
RW1iZXIuT2JqZWN0LmV4dGVuZCh7Ci0gICAgICBleGNpdGluZ0Nob3JlczogRW1iZXIuY29tcHV0
ZWQubWFwKCdjaG9yZXMnLCBmdW5jdGlvbihjaG9yZSwgaW5kZXgpIHsKLSAgICAgICAgcmV0dXJu
IGNob3JlLnRvVXBwZXJDYXNlKCkgKyAnISc7Ci0gICAgICB9KQotICAgIH0pOwotICAKLSAgICB2
YXIgaGFtc3RlciA9IEhhbXN0ZXIuY3JlYXRlKHsKLSAgICAgIGNob3JlczogWydjbGVhbicsICd3
cml0ZSBtb3JlIHVuaXQgdGVzdHMnXQotICAgIH0pOwotICAKLSAgICBoYW1zdGVyLmdldCgnZXhj
aXRpbmdDaG9yZXMnKTsgLy8gWydDTEVBTiEnLCAnV1JJVEUgTU9SRSBVTklUIFRFU1RTISddCi0g
ICAgYGBgCi0gIAotICAgIEBtZXRob2QgbWFwCi0gICAgQGZvciBFbWJlci5jb21wdXRlZAotICAg
IEBwYXJhbSB7U3RyaW5nfSBkZXBlbmRlbnRLZXkKLSAgICBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxs
YmFjawotICAgIEByZXR1cm4ge0VtYmVyLkNvbXB1dGVkUHJvcGVydHl9IGFuIGFycmF5IG1hcHBl
ZCB2aWEgdGhlIGNhbGxiYWNrCi0gICAgQHB1YmxpYwotICAqLwotCi0gIGZ1bmN0aW9uIG1hcChk
ZXBlbmRlbnRLZXksIGNhbGxiYWNrKSB7Ci0gICAgcmV0dXJuIGFycmF5TWFjcm8oZGVwZW5kZW50
S2V5LCBmdW5jdGlvbiAodmFsdWUpIHsKLSAgICAgIHJldHVybiB2YWx1ZS5tYXAoY2FsbGJhY2ss
IHRoaXMpOwotICAgIH0pOwotICB9Ci0KLSAgLyoqCi0gICAgUmV0dXJucyBhbiBhcnJheSBtYXBw
ZWQgdG8gdGhlIHNwZWNpZmllZCBrZXkuCi0gIAotICAgIGBgYGphdmFzY3JpcHQKLSAgICB2YXIg
UGVyc29uID0gRW1iZXIuT2JqZWN0LmV4dGVuZCh7Ci0gICAgICBjaGlsZEFnZXM6IEVtYmVyLmNv
bXB1dGVkLm1hcEJ5KCdjaGlsZHJlbicsICdhZ2UnKQotICAgIH0pOwotICAKLSAgICB2YXIgbG9y
ZEJ5cm9uID0gUGVyc29uLmNyZWF0ZSh7IGNoaWxkcmVuOiBbXSB9KTsKLSAgCi0gICAgbG9yZEJ5
cm9uLmdldCgnY2hpbGRBZ2VzJyk7IC8vIFtdCi0gICAgbG9yZEJ5cm9uLmdldCgnY2hpbGRyZW4n
KS5wdXNoT2JqZWN0KHsgbmFtZTogJ0F1Z3VzdGEgQWRhIEJ5cm9uJywgYWdlOiA3IH0pOwotICAg
IGxvcmRCeXJvbi5nZXQoJ2NoaWxkQWdlcycpOyAvLyBbN10KLSAgICBsb3JkQnlyb24uZ2V0KCdj
aGlsZHJlbicpLnB1c2hPYmplY3RzKFt7Ci0gICAgICBuYW1lOiAnQWxsZWdyYSBCeXJvbicsCi0g
ICAgICBhZ2U6IDUKLSAgICB9LCB7Ci0gICAgICBuYW1lOiAnRWxpemFiZXRoIE1lZG9yYSBMZWln
aCcsCi0gICAgICBhZ2U6IDgKLSAgICB9XSk7Ci0gICAgbG9yZEJ5cm9uLmdldCgnY2hpbGRBZ2Vz
Jyk7IC8vIFs3LCA1LCA4XQotICAgIGBgYAotICAKLSAgICBAbWV0aG9kIG1hcEJ5Ci0gICAgQGZv
ciBFbWJlci5jb21wdXRlZAotICAgIEBwYXJhbSB7U3RyaW5nfSBkZXBlbmRlbnRLZXkKLSAgICBA
cGFyYW0ge1N0cmluZ30gcHJvcGVydHlLZXkKLSAgICBAcmV0dXJuIHtFbWJlci5Db21wdXRlZFBy
b3BlcnR5fSBhbiBhcnJheSBtYXBwZWQgdG8gdGhlIHNwZWNpZmllZCBrZXkKLSAgICBAcHVibGlj
Ci0gICovCi0KLSAgZnVuY3Rpb24gbWFwQnkoZGVwZW5kZW50S2V5LCBwcm9wZXJ0eUtleSkgewot
ICAgIF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0KCdFbWJlci5jb21wdXRlZC5tYXBCeSBleHBlY3Rz
IGEgcHJvcGVydHkgc3RyaW5nIGZvciBpdHMgc2Vjb25kIGFyZ3VtZW50LCAnICsgJ3BlcmhhcHMg
eW91IG1lYW50IHRvIHVzZSAibWFwIicsIHR5cGVvZiBwcm9wZXJ0eUtleSA9PT0gJ3N0cmluZycp
OwotCi0gICAgcmV0dXJuIG1hcChkZXBlbmRlbnRLZXkgKyAnLkBlYWNoLicgKyBwcm9wZXJ0eUtl
eSwgZnVuY3Rpb24gKGl0ZW0pIHsKLSAgICAgIHJldHVybiBfZW1iZXJNZXRhbFByb3BlcnR5X2dl
dC5nZXQoaXRlbSwgcHJvcGVydHlLZXkpOwotICAgIH0pOwotICB9Ci0KLSAgLyoqCi0gICAgRmls
dGVycyB0aGUgYXJyYXkgYnkgdGhlIGNhbGxiYWNrLgotICAKLSAgICBUaGUgY2FsbGJhY2sgbWV0
aG9kIHlvdSBwcm92aWRlIHNob3VsZCBoYXZlIHRoZSBmb2xsb3dpbmcgc2lnbmF0dXJlLgotICAg
IGBpdGVtYCBpcyB0aGUgY3VycmVudCBpdGVtIGluIHRoZSBpdGVyYXRpb24uCi0gICAgYGluZGV4
YCBpcyB0aGUgaW50ZWdlciBpbmRleCBvZiB0aGUgY3VycmVudCBpdGVtIGluIHRoZSBpdGVyYXRp
b24uCi0gICAgYGFycmF5YCBpcyB0aGUgZGVwZW5kYW50IGFycmF5IGl0c2VsZi4KLSAgCi0gICAg
YGBgamF2YXNjcmlwdAotICAgIGZ1bmN0aW9uKGl0ZW0sIGluZGV4LCBhcnJheSk7Ci0gICAgYGBg
Ci0gIAotICAgIGBgYGphdmFzY3JpcHQKLSAgICB2YXIgSGFtc3RlciA9IEVtYmVyLk9iamVjdC5l
eHRlbmQoewotICAgICAgcmVtYWluaW5nQ2hvcmVzOiBFbWJlci5jb21wdXRlZC5maWx0ZXIoJ2No
b3JlcycsIGZ1bmN0aW9uKGNob3JlLCBpbmRleCwgYXJyYXkpIHsKLSAgICAgICAgcmV0dXJuICFj
aG9yZS5kb25lOwotICAgICAgfSkKLSAgICB9KTsKLSAgCi0gICAgdmFyIGhhbXN0ZXIgPSBIYW1z
dGVyLmNyZWF0ZSh7Ci0gICAgICBjaG9yZXM6IFsKLSAgICAgICAgeyBuYW1lOiAnY29vaycsIGRv
bmU6IHRydWUgfSwKLSAgICAgICAgeyBuYW1lOiAnY2xlYW4nLCBkb25lOiB0cnVlIH0sCi0gICAg
ICAgIHsgbmFtZTogJ3dyaXRlIG1vcmUgdW5pdCB0ZXN0cycsIGRvbmU6IGZhbHNlIH0KLSAgICAg
IF0KLSAgICB9KTsKLSAgCi0gICAgaGFtc3Rlci5nZXQoJ3JlbWFpbmluZ0Nob3JlcycpOyAvLyBb
e25hbWU6ICd3cml0ZSBtb3JlIHVuaXQgdGVzdHMnLCBkb25lOiBmYWxzZX1dCi0gICAgYGBgCi0g
IAotICAgIEBtZXRob2QgZmlsdGVyCi0gICAgQGZvciBFbWJlci5jb21wdXRlZAotICAgIEBwYXJh
bSB7U3RyaW5nfSBkZXBlbmRlbnRLZXkKLSAgICBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjawot
ICAgIEByZXR1cm4ge0VtYmVyLkNvbXB1dGVkUHJvcGVydHl9IHRoZSBmaWx0ZXJlZCBhcnJheQot
ICAgIEBwdWJsaWMKLSAgKi8KLQotICBmdW5jdGlvbiBmaWx0ZXIoZGVwZW5kZW50S2V5LCBjYWxs
YmFjaykgewotICAgIHJldHVybiBhcnJheU1hY3JvKGRlcGVuZGVudEtleSwgZnVuY3Rpb24gKHZh
bHVlKSB7Ci0gICAgICByZXR1cm4gdmFsdWUuZmlsdGVyKGNhbGxiYWNrLCB0aGlzKTsKLSAgICB9
KTsKLSAgfQotCi0gIC8qKgotICAgIEZpbHRlcnMgdGhlIGFycmF5IGJ5IHRoZSBwcm9wZXJ0eSBh
bmQgdmFsdWUKLSAgCi0gICAgYGBgamF2YXNjcmlwdAotICAgIHZhciBIYW1zdGVyID0gRW1iZXIu
T2JqZWN0LmV4dGVuZCh7Ci0gICAgICByZW1haW5pbmdDaG9yZXM6IEVtYmVyLmNvbXB1dGVkLmZp
bHRlckJ5KCdjaG9yZXMnLCAnZG9uZScsIGZhbHNlKQotICAgIH0pOwotICAKLSAgICB2YXIgaGFt
c3RlciA9IEhhbXN0ZXIuY3JlYXRlKHsKLSAgICAgIGNob3JlczogWwotICAgICAgICB7IG5hbWU6
ICdjb29rJywgZG9uZTogdHJ1ZSB9LAotICAgICAgICB7IG5hbWU6ICdjbGVhbicsIGRvbmU6IHRy
dWUgfSwKLSAgICAgICAgeyBuYW1lOiAnd3JpdGUgbW9yZSB1bml0IHRlc3RzJywgZG9uZTogZmFs
c2UgfQotICAgICAgXQotICAgIH0pOwotICAKLSAgICBoYW1zdGVyLmdldCgncmVtYWluaW5nQ2hv
cmVzJyk7IC8vIFt7IG5hbWU6ICd3cml0ZSBtb3JlIHVuaXQgdGVzdHMnLCBkb25lOiBmYWxzZSB9
XQotICAgIGBgYAotICAKLSAgICBAbWV0aG9kIGZpbHRlckJ5Ci0gICAgQGZvciBFbWJlci5jb21w
dXRlZAotICAgIEBwYXJhbSB7U3RyaW5nfSBkZXBlbmRlbnRLZXkKLSAgICBAcGFyYW0ge1N0cmlu
Z30gcHJvcGVydHlLZXkKLSAgICBAcGFyYW0geyp9IHZhbHVlCi0gICAgQHJldHVybiB7RW1iZXIu
Q29tcHV0ZWRQcm9wZXJ0eX0gdGhlIGZpbHRlcmVkIGFycmF5Ci0gICAgQHB1YmxpYwotICAqLwot
Ci0gIGZ1bmN0aW9uIGZpbHRlckJ5KGRlcGVuZGVudEtleSwgcHJvcGVydHlLZXksIHZhbHVlKSB7
Ci0gICAgdmFyIGNhbGxiYWNrOwotCi0gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHsK
LSAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKGl0ZW0pIHsKLSAgICAgICAgcmV0dXJuIF9lbWJl
ck1ldGFsUHJvcGVydHlfZ2V0LmdldChpdGVtLCBwcm9wZXJ0eUtleSk7Ci0gICAgICB9OwotICAg
IH0gZWxzZSB7Ci0gICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uIChpdGVtKSB7Ci0gICAgICAgIHJl
dHVybiBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQoaXRlbSwgcHJvcGVydHlLZXkpID09PSB2
YWx1ZTsKLSAgICAgIH07Ci0gICAgfQotCi0gICAgcmV0dXJuIGZpbHRlcihkZXBlbmRlbnRLZXkg
KyAnLkBlYWNoLicgKyBwcm9wZXJ0eUtleSwgY2FsbGJhY2spOwotICB9Ci0KLSAgLyoqCi0gICAg
QSBjb21wdXRlZCBwcm9wZXJ0eSB3aGljaCByZXR1cm5zIGEgbmV3IGFycmF5IHdpdGggYWxsIHRo
ZSB1bmlxdWUKLSAgICBlbGVtZW50cyBmcm9tIG9uZSBvciBtb3JlIGRlcGVuZGVudCBhcnJheXMu
Ci0gIAotICAgIEV4YW1wbGUKLSAgCi0gICAgYGBgamF2YXNjcmlwdAotICAgIHZhciBIYW1zdGVy
ID0gRW1iZXIuT2JqZWN0LmV4dGVuZCh7Ci0gICAgICB1bmlxdWVGcnVpdHM6IEVtYmVyLmNvbXB1
dGVkLnVuaXEoJ2ZydWl0cycpCi0gICAgfSk7Ci0gIAotICAgIHZhciBoYW1zdGVyID0gSGFtc3Rl
ci5jcmVhdGUoewotICAgICAgZnJ1aXRzOiBbCi0gICAgICAgICdiYW5hbmEnLAotICAgICAgICAn
Z3JhcGUnLAotICAgICAgICAna2FsZScsCi0gICAgICAgICdiYW5hbmEnCi0gICAgICBdCi0gICAg
fSk7Ci0gIAotICAgIGhhbXN0ZXIuZ2V0KCd1bmlxdWVGcnVpdHMnKTsgLy8gWydiYW5hbmEnLCAn
Z3JhcGUnLCAna2FsZSddCi0gICAgYGBgCi0gIAotICAgIEBtZXRob2QgdW5pcQotICAgIEBmb3Ig
RW1iZXIuY29tcHV0ZWQKLSAgICBAcGFyYW0ge1N0cmluZ30gcHJvcGVydHlLZXkqCi0gICAgQHJl
dHVybiB7RW1iZXIuQ29tcHV0ZWRQcm9wZXJ0eX0gY29tcHV0ZXMgYSBuZXcgYXJyYXkgd2l0aCBh
bGwgdGhlCi0gICAgdW5pcXVlIGVsZW1lbnRzIGZyb20gdGhlIGRlcGVuZGVudCBhcnJheQotICAg
IEBwdWJsaWMKLSAgKi8KLQotICBmdW5jdGlvbiB1bmlxKCkgewotICAgIGZvciAodmFyIF9sZW4g
PSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwg
X2xlbjsgX2tleSsrKSB7Ci0gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldOwotICAg
IH0KLQotICAgIHJldHVybiBtdWx0aUFycmF5TWFjcm8oYXJncywgZnVuY3Rpb24gKGRlcGVuZGVu
dEtleXMpIHsKLSAgICAgIHZhciBfdGhpczIgPSB0aGlzOwotCi0gICAgICB2YXIgdW5pcSA9IF9l
bWJlclJ1bnRpbWVTeXN0ZW1OYXRpdmVfYXJyYXkuQSgpOwotCi0gICAgICBkZXBlbmRlbnRLZXlz
LmZvckVhY2goZnVuY3Rpb24gKGRlcGVuZGVudEtleSkgewotICAgICAgICB2YXIgdmFsdWUgPSBf
ZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQoX3RoaXMyLCBkZXBlbmRlbnRLZXkpOwotICAgICAg
ICBpZiAoX2VtYmVyUnVudGltZVV0aWxzLmlzQXJyYXkodmFsdWUpKSB7Ci0gICAgICAgICAgdmFs
dWUuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkgewotICAgICAgICAgICAgaWYgKHVuaXEuaW5kZXhP
ZihpdGVtKSA9PT0gLTEpIHsKLSAgICAgICAgICAgICAgdW5pcS5wdXNoKGl0ZW0pOwotICAgICAg
ICAgICAgfQotICAgICAgICAgIH0pOwotICAgICAgICB9Ci0gICAgICB9KTsKLQotICAgICAgcmV0
dXJuIHVuaXE7Ci0gICAgfSk7Ci0gIH0KLQotICAvKioKLSAgICBBIGNvbXB1dGVkIHByb3BlcnR5
IHdoaWNoIHJldHVybnMgYSBuZXcgYXJyYXkgd2l0aCBhbGwgdGhlIHVuaXF1ZQotICAgIGVsZW1l
bnRzIGZyb20gYW4gYXJyYXksIHdpdGggdW5pcXVlbmVzcyBkZXRlcm1pbmVkIGJ5IHNwZWNpZmlj
IGtleS4KLSAgICBFeGFtcGxlCi0gICAgYGBgamF2YXNjcmlwdAotICAgIHZhciBIYW1zdGVyID0g
RW1iZXIuT2JqZWN0LmV4dGVuZCh7Ci0gICAgICB1bmlxdWVGcnVpdHM6IEVtYmVyLmNvbXB1dGVk
LnVuaXFCeSgnZnJ1aXRzJywgJ2lkJykKLSAgICB9KTsKLSAgICB2YXIgaGFtc3RlciA9IEhhbXN0
ZXIuY3JlYXRlKHsKLSAgICAgIGZydWl0czogWwotICAgICAgICB7IGlkOiAxLCAnYmFuYW5hJyB9
LAotICAgICAgICB7IGlkOiAyLCAnZ3JhcGUnIH0sCi0gICAgICAgIHsgaWQ6IDMsICdwZWFjaCcg
fSwKLSAgICAgICAgeyBpZDogMSwgJ2JhbmFuYScgfQotICAgICAgXQotICAgIH0pOwotICAgIGhh
bXN0ZXIuZ2V0KCd1bmlxdWVGcnVpdHMnKTsgLy8gWyB7IGlkOiAxLCAnYmFuYW5hJyB9LCB7IGlk
OiAyLCAnZ3JhcGUnIH0sIHsgaWQ6IDMsICdwZWFjaCcgfV0KLSAgICBgYGAKLSAgICBAbWV0aG9k
IHVuaXFCeQotICAgIEBmb3IgRW1iZXIuY29tcHV0ZWQKLSAgICBAcGFyYW0ge1N0cmluZ30gZGVw
ZW5kZW50S2V5Ci0gICAgQHBhcmFtIHtTdHJpbmd9IHByb3BlcnR5S2V5Ci0gICAgQHJldHVybiB7
RW1iZXIuQ29tcHV0ZWRQcm9wZXJ0eX0gY29tcHV0ZXMgYSBuZXcgYXJyYXkgd2l0aCBhbGwgdGhl
Ci0gICAgdW5pcXVlIGVsZW1lbnRzIGZyb20gdGhlIGRlcGVuZGVudCBhcnJheQotICAgIEBwdWJs
aWMKLSAgKi8KLQotICBmdW5jdGlvbiB1bmlxQnkoZGVwZW5kZW50S2V5LCBwcm9wZXJ0eUtleSkg
ewotICAgIHJldHVybiBfZW1iZXJNZXRhbENvbXB1dGVkLmNvbXB1dGVkKGRlcGVuZGVudEtleSAr
ICcuW10nLCBmdW5jdGlvbiAoKSB7Ci0gICAgICB2YXIgdW5pcSA9IF9lbWJlclJ1bnRpbWVTeXN0
ZW1OYXRpdmVfYXJyYXkuQSgpOwotICAgICAgdmFyIHNlZW4gPSBuZXcgX2VtYmVyTWV0YWxFbXB0
eV9vYmplY3QuZGVmYXVsdCgpOwotICAgICAgdmFyIGxpc3QgPSBfZW1iZXJNZXRhbFByb3BlcnR5
X2dldC5nZXQodGhpcywgZGVwZW5kZW50S2V5KTsKLSAgICAgIGlmIChfZW1iZXJSdW50aW1lVXRp
bHMuaXNBcnJheShsaXN0KSkgewotICAgICAgICBsaXN0LmZvckVhY2goZnVuY3Rpb24gKGl0ZW0p
IHsKLSAgICAgICAgICB2YXIgZ3VpZCA9IF9lbWJlck1ldGFsVXRpbHMuZ3VpZEZvcihfZW1iZXJN
ZXRhbFByb3BlcnR5X2dldC5nZXQoaXRlbSwgcHJvcGVydHlLZXkpKTsKLSAgICAgICAgICBpZiAo
IShndWlkIGluIHNlZW4pKSB7Ci0gICAgICAgICAgICBzZWVuW2d1aWRdID0gdHJ1ZTsKLSAgICAg
ICAgICAgIHVuaXEucHVzaChpdGVtKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0pOwotICAgICAg
fQotICAgICAgcmV0dXJuIHVuaXE7Ci0gICAgfSkucmVhZE9ubHkoKTsKLSAgfQotCi0gIC8qKgot
ICAgIEFsaWFzIGZvciBbRW1iZXIuY29tcHV0ZWQudW5pcV0oL2FwaS8jbWV0aG9kX2NvbXB1dGVk
X3VuaXEpLgotICAKLSAgICBAbWV0aG9kIHVuaW9uCi0gICAgQGZvciBFbWJlci5jb21wdXRlZAot
ICAgIEBwYXJhbSB7U3RyaW5nfSBwcm9wZXJ0eUtleSoKLSAgICBAcmV0dXJuIHtFbWJlci5Db21w
dXRlZFByb3BlcnR5fSBjb21wdXRlcyBhIG5ldyBhcnJheSB3aXRoIGFsbCB0aGUKLSAgICB1bmlx
dWUgZWxlbWVudHMgZnJvbSB0aGUgZGVwZW5kZW50IGFycmF5Ci0gICAgQHB1YmxpYwotICAqLwot
ICB2YXIgdW5pb24gPSB1bmlxOwotCi0gIGV4cG9ydHMudW5pb24gPSB1bmlvbjsKLSAgLyoqCi0g
ICAgQSBjb21wdXRlZCBwcm9wZXJ0eSB3aGljaCByZXR1cm5zIGEgbmV3IGFycmF5IHdpdGggYWxs
IHRoZSBkdXBsaWNhdGVkCi0gICAgZWxlbWVudHMgZnJvbSB0d28gb3IgbW9yZSBkZXBlbmRlbnQg
YXJyYXlzLgotICAKLSAgICBFeGFtcGxlCi0gIAotICAgIGBgYGphdmFzY3JpcHQKLSAgICB2YXIg
b2JqID0gRW1iZXIuT2JqZWN0LmV4dGVuZCh7Ci0gICAgICBmcmllbmRzSW5Db21tb246IEVtYmVy
LmNvbXB1dGVkLmludGVyc2VjdCgnYWRhRnJpZW5kcycsICdjaGFybGVzRnJpZW5kcycpCi0gICAg
fSkuY3JlYXRlKHsKLSAgICAgIGFkYUZyaWVuZHM6IFsnQ2hhcmxlcyBCYWJiYWdlJywgJ0pvaG4g
SG9iaG91c2UnLCAnV2lsbGlhbSBLaW5nJywgJ01hcnkgU29tZXJ2aWxsZSddLAotICAgICAgY2hh
cmxlc0ZyaWVuZHM6IFsnV2lsbGlhbSBLaW5nJywgJ01hcnkgU29tZXJ2aWxsZScsICdBZGEgTG92
ZWxhY2UnLCAnR2VvcmdlIFBlYWNvY2snXQotICAgIH0pOwotICAKLSAgICBvYmouZ2V0KCdmcmll
bmRzSW5Db21tb24nKTsgLy8gWydXaWxsaWFtIEtpbmcnLCAnTWFyeSBTb21lcnZpbGxlJ10KLSAg
ICBgYGAKLSAgCi0gICAgQG1ldGhvZCBpbnRlcnNlY3QKLSAgICBAZm9yIEVtYmVyLmNvbXB1dGVk
Ci0gICAgQHBhcmFtIHtTdHJpbmd9IHByb3BlcnR5S2V5KgotICAgIEByZXR1cm4ge0VtYmVyLkNv
bXB1dGVkUHJvcGVydHl9IGNvbXB1dGVzIGEgbmV3IGFycmF5IHdpdGggYWxsIHRoZQotICAgIGR1
cGxpY2F0ZWQgZWxlbWVudHMgZnJvbSB0aGUgZGVwZW5kZW50IGFycmF5cwotICAgIEBwdWJsaWMK
LSAgKi8KLQotICBmdW5jdGlvbiBpbnRlcnNlY3QoKSB7Ci0gICAgZm9yICh2YXIgX2xlbjIgPSBh
cmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbjIpLCBfa2V5MiA9IDA7IF9rZXkyIDwg
X2xlbjI7IF9rZXkyKyspIHsKLSAgICAgIGFyZ3NbX2tleTJdID0gYXJndW1lbnRzW19rZXkyXTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gbXVsdGlBcnJheU1hY3JvKGFyZ3MsIGZ1bmN0aW9uIChkZXBl
bmRlbnRLZXlzKSB7Ci0gICAgICB2YXIgX3RoaXMzID0gdGhpczsKLQotICAgICAgdmFyIGFycmF5
cyA9IGRlcGVuZGVudEtleXMubWFwKGZ1bmN0aW9uIChkZXBlbmRlbnRLZXkpIHsKLSAgICAgICAg
dmFyIGFycmF5ID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KF90aGlzMywgZGVwZW5kZW50
S2V5KTsKLQotICAgICAgICByZXR1cm4gX2VtYmVyUnVudGltZVV0aWxzLmlzQXJyYXkoYXJyYXkp
ID8gYXJyYXkgOiBbXTsKLSAgICAgIH0pOwotCi0gICAgICB2YXIgcmVzdWx0cyA9IGFycmF5cy5w
b3AoKS5maWx0ZXIoZnVuY3Rpb24gKGNhbmRpZGF0ZSkgewotICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IGFycmF5cy5sZW5ndGg7IGkrKykgewotICAgICAgICAgIHZhciBmb3VuZCA9IGZhbHNl
OwotICAgICAgICAgIHZhciBhcnJheSA9IGFycmF5c1tpXTsKLSAgICAgICAgICBmb3IgKHZhciBq
ID0gMDsgaiA8IGFycmF5Lmxlbmd0aDsgaisrKSB7Ci0gICAgICAgICAgICBpZiAoYXJyYXlbal0g
PT09IGNhbmRpZGF0ZSkgewotICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLQotICAgICAgICAgIGlmIChm
b3VuZCA9PT0gZmFsc2UpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICB9
Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0pOwotCi0gICAgICBy
ZXR1cm4gX2VtYmVyUnVudGltZVN5c3RlbU5hdGl2ZV9hcnJheS5BKHJlc3VsdHMpOwotICAgIH0p
OwotICB9Ci0KLSAgLyoqCi0gICAgQSBjb21wdXRlZCBwcm9wZXJ0eSB3aGljaCByZXR1cm5zIGEg
bmV3IGFycmF5IHdpdGggYWxsIHRoZQotICAgIHByb3BlcnRpZXMgZnJvbSB0aGUgZmlyc3QgZGVw
ZW5kZW50IGFycmF5IHRoYXQgYXJlIG5vdCBpbiB0aGUgc2Vjb25kCi0gICAgZGVwZW5kZW50IGFy
cmF5LgotICAKLSAgICBFeGFtcGxlCi0gIAotICAgIGBgYGphdmFzY3JpcHQKLSAgICB2YXIgSGFt
c3RlciA9IEVtYmVyLk9iamVjdC5leHRlbmQoewotICAgICAgbGlrZXM6IFsnYmFuYW5hJywgJ2dy
YXBlJywgJ2thbGUnXSwKLSAgICAgIHdhbnRzOiBFbWJlci5jb21wdXRlZC5zZXREaWZmKCdsaWtl
cycsICdmcnVpdHMnKQotICAgIH0pOwotICAKLSAgICB2YXIgaGFtc3RlciA9IEhhbXN0ZXIuY3Jl
YXRlKHsKLSAgICAgIGZydWl0czogWwotICAgICAgICAnZ3JhcGUnLAotICAgICAgICAna2FsZScs
Ci0gICAgICBdCi0gICAgfSk7Ci0gIAotICAgIGhhbXN0ZXIuZ2V0KCd3YW50cycpOyAvLyBbJ2Jh
bmFuYSddCi0gICAgYGBgCi0gIAotICAgIEBtZXRob2Qgc2V0RGlmZgotICAgIEBmb3IgRW1iZXIu
Y29tcHV0ZWQKLSAgICBAcGFyYW0ge1N0cmluZ30gc2V0QVByb3BlcnR5Ci0gICAgQHBhcmFtIHtT
dHJpbmd9IHNldEJQcm9wZXJ0eQotICAgIEByZXR1cm4ge0VtYmVyLkNvbXB1dGVkUHJvcGVydHl9
IGNvbXB1dGVzIGEgbmV3IGFycmF5IHdpdGggYWxsIHRoZQotICAgIGl0ZW1zIGZyb20gdGhlIGZp
cnN0IGRlcGVuZGVudCBhcnJheSB0aGF0IGFyZSBub3QgaW4gdGhlIHNlY29uZAotICAgIGRlcGVu
ZGVudCBhcnJheQotICAgIEBwdWJsaWMKLSAgKi8KLQotICBmdW5jdGlvbiBzZXREaWZmKHNldEFQ
cm9wZXJ0eSwgc2V0QlByb3BlcnR5KSB7Ci0gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggIT09IDIp
IHsKLSAgICAgIHRocm93IG5ldyBfZW1iZXJNZXRhbEVycm9yLmRlZmF1bHQoJ3NldERpZmYgcmVx
dWlyZXMgZXhhY3RseSB0d28gZGVwZW5kZW50IGFycmF5cy4nKTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gX2VtYmVyTWV0YWxDb21wdXRlZC5jb21wdXRlZChzZXRBUHJvcGVydHkgKyAnLltdJywgc2V0
QlByb3BlcnR5ICsgJy5bXScsIGZ1bmN0aW9uICgpIHsKLSAgICAgIHZhciBzZXRBID0gdGhpcy5n
ZXQoc2V0QVByb3BlcnR5KTsKLSAgICAgIHZhciBzZXRCID0gdGhpcy5nZXQoc2V0QlByb3BlcnR5
KTsKLQotICAgICAgaWYgKCFfZW1iZXJSdW50aW1lVXRpbHMuaXNBcnJheShzZXRBKSkgewotICAg
ICAgICByZXR1cm4gX2VtYmVyUnVudGltZVN5c3RlbU5hdGl2ZV9hcnJheS5BKCk7Ci0gICAgICB9
Ci0gICAgICBpZiAoIV9lbWJlclJ1bnRpbWVVdGlscy5pc0FycmF5KHNldEIpKSB7Ci0gICAgICAg
IHJldHVybiBfZW1iZXJSdW50aW1lU3lzdGVtTmF0aXZlX2FycmF5LkEoc2V0QSk7Ci0gICAgICB9
Ci0KLSAgICAgIHJldHVybiBzZXRBLmZpbHRlcihmdW5jdGlvbiAoeCkgewotICAgICAgICByZXR1
cm4gc2V0Qi5pbmRleE9mKHgpID09PSAtMTsKLSAgICAgIH0pOwotICAgIH0pLnJlYWRPbmx5KCk7
Ci0gIH0KLQotICAvKioKLSAgICBBIGNvbXB1dGVkIHByb3BlcnR5IHRoYXQgcmV0dXJucyB0aGUg
YXJyYXkgb2YgdmFsdWVzCi0gICAgZm9yIHRoZSBwcm92aWRlZCBkZXBlbmRlbnQgcHJvcGVydGll
cy4KLSAgCi0gICAgRXhhbXBsZQotICAKLSAgICBgYGBqYXZhc2NyaXB0Ci0gICAgdmFyIEhhbXN0
ZXIgPSBFbWJlci5PYmplY3QuZXh0ZW5kKHsKLSAgICAgIGNsb3RoZXM6IEVtYmVyLmNvbXB1dGVk
LmNvbGxlY3QoJ2hhdCcsICdzaGlydCcpCi0gICAgfSk7Ci0gIAotICAgIHZhciBoYW1zdGVyID0g
SGFtc3Rlci5jcmVhdGUoKTsKLSAgCi0gICAgaGFtc3Rlci5nZXQoJ2Nsb3RoZXMnKTsgLy8gW251
bGwsIG51bGxdCi0gICAgaGFtc3Rlci5zZXQoJ2hhdCcsICdDYW1wIEhhdCcpOwotICAgIGhhbXN0
ZXIuc2V0KCdzaGlydCcsICdDYW1wIFNoaXJ0Jyk7Ci0gICAgaGFtc3Rlci5nZXQoJ2Nsb3RoZXMn
KTsgLy8gWydDYW1wIEhhdCcsICdDYW1wIFNoaXJ0J10KLSAgICBgYGAKLSAgCi0gICAgQG1ldGhv
ZCBjb2xsZWN0Ci0gICAgQGZvciBFbWJlci5jb21wdXRlZAotICAgIEBwYXJhbSB7U3RyaW5nfSBk
ZXBlbmRlbnRLZXkqCi0gICAgQHJldHVybiB7RW1iZXIuQ29tcHV0ZWRQcm9wZXJ0eX0gY29tcHV0
ZWQgcHJvcGVydHkgd2hpY2ggbWFwcwotICAgIHZhbHVlcyBvZiBhbGwgcGFzc2VkIGluIHByb3Bl
cnRpZXMgdG8gYW4gYXJyYXkuCi0gICAgQHB1YmxpYwotICAqLwotCi0gIGZ1bmN0aW9uIGNvbGxl
Y3QoKSB7Ci0gICAgZm9yICh2YXIgX2xlbjMgPSBhcmd1bWVudHMubGVuZ3RoLCBkZXBlbmRlbnRL
ZXlzID0gQXJyYXkoX2xlbjMpLCBfa2V5MyA9IDA7IF9rZXkzIDwgX2xlbjM7IF9rZXkzKyspIHsK
LSAgICAgIGRlcGVuZGVudEtleXNbX2tleTNdID0gYXJndW1lbnRzW19rZXkzXTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gbXVsdGlBcnJheU1hY3JvKGRlcGVuZGVudEtleXMsIGZ1bmN0aW9uICgpIHsK
LSAgICAgIHZhciBwcm9wZXJ0aWVzID0gX2VtYmVyTWV0YWxHZXRfcHJvcGVydGllcy5kZWZhdWx0
KHRoaXMsIGRlcGVuZGVudEtleXMpOwotICAgICAgdmFyIHJlcyA9IF9lbWJlclJ1bnRpbWVTeXN0
ZW1OYXRpdmVfYXJyYXkuQSgpOwotICAgICAgZm9yICh2YXIga2V5IGluIHByb3BlcnRpZXMpIHsK
LSAgICAgICAgaWYgKHByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkoa2V5KSkgewotICAgICAgICAg
IGlmIChfZW1iZXJNZXRhbElzX25vbmUuZGVmYXVsdChwcm9wZXJ0aWVzW2tleV0pKSB7Ci0gICAg
ICAgICAgICByZXMucHVzaChudWxsKTsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
cmVzLnB1c2gocHJvcGVydGllc1trZXldKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAg
IH0KLSAgICAgIHJldHVybiByZXM7Ci0gICAgfSk7Ci0gIH0KLQotICAvKioKLSAgICBBIGNvbXB1
dGVkIHByb3BlcnR5IHdoaWNoIHJldHVybnMgYSBuZXcgYXJyYXkgd2l0aCBhbGwgdGhlCi0gICAg
cHJvcGVydGllcyBmcm9tIHRoZSBmaXJzdCBkZXBlbmRlbnQgYXJyYXkgc29ydGVkIGJhc2VkIG9u
IGEgcHJvcGVydHkKLSAgICBvciBzb3J0IGZ1bmN0aW9uLgotICAKLSAgICBUaGUgY2FsbGJhY2sg
bWV0aG9kIHlvdSBwcm92aWRlIHNob3VsZCBoYXZlIHRoZSBmb2xsb3dpbmcgc2lnbmF0dXJlOgot
ICAKLSAgICBgYGBqYXZhc2NyaXB0Ci0gICAgZnVuY3Rpb24oaXRlbUEsIGl0ZW1CKTsKLSAgICBg
YGAKLSAgCi0gICAgLSBgaXRlbUFgIHRoZSBmaXJzdCBpdGVtIHRvIGNvbXBhcmUuCi0gICAgLSBg
aXRlbUJgIHRoZSBzZWNvbmQgaXRlbSB0byBjb21wYXJlLgotICAKLSAgICBUaGlzIGZ1bmN0aW9u
IHNob3VsZCByZXR1cm4gbmVnYXRpdmUgbnVtYmVyIChlLmcuIGAtMWApIHdoZW4gYGl0ZW1BYCBz
aG91bGQgY29tZSBiZWZvcmUKLSAgICBgaXRlbUJgLiBJdCBzaG91bGQgcmV0dXJuIHBvc2l0aXZl
IG51bWJlciAoZS5nLiBgMWApIHdoZW4gYGl0ZW1BYCBzaG91bGQgY29tZSBhZnRlcgotICAgIGBp
dGVtQmAuIElmIHRoZSBgaXRlbUFgIGFuZCBgaXRlbUJgIGFyZSBlcXVhbCB0aGlzIGZ1bmN0aW9u
IHNob3VsZCByZXR1cm4gYDBgLgotICAKLSAgICBUaGVyZWZvcmUsIGlmIHRoaXMgZnVuY3Rpb24g
aXMgY29tcGFyaW5nIHNvbWUgbnVtZXJpYyB2YWx1ZXMsIHNpbXBsZSBgaXRlbUEgLSBpdGVtQmAg
b3IKLSAgICBgaXRlbUEuZ2V0KCAnZm9vJyApIC0gaXRlbUIuZ2V0KCAnZm9vJyApYCBjYW4gYmUg
dXNlZCBpbnN0ZWFkIG9mIHNlcmllcyBvZiBgaWZgLgotICAKLSAgICBFeGFtcGxlCi0gIAotICAg
IGBgYGphdmFzY3JpcHQKLSAgICB2YXIgVG9Eb0xpc3QgPSBFbWJlci5PYmplY3QuZXh0ZW5kKHsK
LSAgICAgIC8vIHVzaW5nIHN0YW5kYXJkIGFzY2VuZGluZyBzb3J0Ci0gICAgICB0b2Rvc1NvcnRp
bmc6IFsnbmFtZSddLAotICAgICAgc29ydGVkVG9kb3M6IEVtYmVyLmNvbXB1dGVkLnNvcnQoJ3Rv
ZG9zJywgJ3RvZG9zU29ydGluZycpLAotICAKLSAgICAgIC8vIHVzaW5nIGRlc2NlbmRpbmcgc29y
dAotICAgICAgdG9kb3NTb3J0aW5nRGVzYzogWyduYW1lOmRlc2MnXSwKLSAgICAgIHNvcnRlZFRv
ZG9zRGVzYzogRW1iZXIuY29tcHV0ZWQuc29ydCgndG9kb3MnLCAndG9kb3NTb3J0aW5nRGVzYycp
LAotICAKLSAgICAgIC8vIHVzaW5nIGEgY3VzdG9tIHNvcnQgZnVuY3Rpb24KLSAgICAgIHByaW9y
aXR5VG9kb3M6IEVtYmVyLmNvbXB1dGVkLnNvcnQoJ3RvZG9zJywgZnVuY3Rpb24oYSwgYil7Ci0g
ICAgICAgIGlmIChhLnByaW9yaXR5ID4gYi5wcmlvcml0eSkgewotICAgICAgICAgIHJldHVybiAx
OwotICAgICAgICB9IGVsc2UgaWYgKGEucHJpb3JpdHkgPCBiLnByaW9yaXR5KSB7Ci0gICAgICAg
ICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0gIAotICAgICAgICByZXR1cm4gMDsKLSAgICAgIH0p
Ci0gICAgfSk7Ci0gIAotICAgIHZhciB0b2RvTGlzdCA9IFRvRG9MaXN0LmNyZWF0ZSh7dG9kb3M6
IFsKLSAgICAgIHsgbmFtZTogJ1VuaXQgVGVzdCcsIHByaW9yaXR5OiAyIH0sCi0gICAgICB7IG5h
bWU6ICdEb2N1bWVudGF0aW9uJywgcHJpb3JpdHk6IDMgfSwKLSAgICAgIHsgbmFtZTogJ1JlbGVh
c2UnLCBwcmlvcml0eTogMSB9Ci0gICAgXX0pOwotICAKLSAgICB0b2RvTGlzdC5nZXQoJ3NvcnRl
ZFRvZG9zJyk7ICAgICAgLy8gW3sgbmFtZTonRG9jdW1lbnRhdGlvbicsIHByaW9yaXR5OjMgfSwg
eyBuYW1lOidSZWxlYXNlJywgcHJpb3JpdHk6MSB9LCB7IG5hbWU6J1VuaXQgVGVzdCcsIHByaW9y
aXR5OjIgfV0KLSAgICB0b2RvTGlzdC5nZXQoJ3NvcnRlZFRvZG9zRGVzYycpOyAgLy8gW3sgbmFt
ZTonVW5pdCBUZXN0JywgcHJpb3JpdHk6MiB9LCB7IG5hbWU6J1JlbGVhc2UnLCBwcmlvcml0eTox
IH0sIHsgbmFtZTonRG9jdW1lbnRhdGlvbicsIHByaW9yaXR5OjMgfV0KLSAgICB0b2RvTGlzdC5n
ZXQoJ3ByaW9yaXR5VG9kb3MnKTsgICAgLy8gW3sgbmFtZTonUmVsZWFzZScsIHByaW9yaXR5OjEg
fSwgeyBuYW1lOidVbml0IFRlc3QnLCBwcmlvcml0eToyIH0sIHsgbmFtZTonRG9jdW1lbnRhdGlv
bicsIHByaW9yaXR5OjMgfV0KLSAgICBgYGAKLSAgCi0gICAgQG1ldGhvZCBzb3J0Ci0gICAgQGZv
ciBFbWJlci5jb21wdXRlZAotICAgIEBwYXJhbSB7U3RyaW5nfSBpdGVtc0tleQotICAgIEBwYXJh
bSB7U3RyaW5nIG9yIEZ1bmN0aW9ufSBzb3J0RGVmaW5pdGlvbiBhIGRlcGVuZGVudCBrZXkgdG8g
YW4KLSAgICBhcnJheSBvZiBzb3J0IHByb3BlcnRpZXMgKGFkZCBgOmRlc2NgIHRvIHRoZSBhcnJh
eXMgc29ydCBwcm9wZXJ0aWVzIHRvIHNvcnQgZGVzY2VuZGluZykgb3IgYSBmdW5jdGlvbiB0byB1
c2Ugd2hlbiBzb3J0aW5nCi0gICAgQHJldHVybiB7RW1iZXIuQ29tcHV0ZWRQcm9wZXJ0eX0gY29t
cHV0ZXMgYSBuZXcgc29ydGVkIGFycmF5IGJhc2VkCi0gICAgb24gdGhlIHNvcnQgcHJvcGVydHkg
YXJyYXkgb3IgY2FsbGJhY2sgZnVuY3Rpb24KLSAgICBAcHVibGljCi0gICovCi0KLSAgZnVuY3Rp
b24gc29ydChpdGVtc0tleSwgc29ydERlZmluaXRpb24pIHsKLSAgICBfZW1iZXJNZXRhbERlYnVn
LmFzc2VydCgnRW1iZXIuY29tcHV0ZWQuc29ydCByZXF1aXJlcyB0d28gYXJndW1lbnRzOiBhbiBh
cnJheSBrZXkgdG8gc29ydCBhbmQgJyArICdlaXRoZXIgYSBzb3J0IHByb3BlcnRpZXMga2V5IG9y
IHNvcnQgZnVuY3Rpb24nLCBhcmd1bWVudHMubGVuZ3RoID09PSAyKTsKLQotICAgIGlmICh0eXBl
b2Ygc29ydERlZmluaXRpb24gPT09ICdmdW5jdGlvbicpIHsKLSAgICAgIHJldHVybiBjdXN0b21T
b3J0KGl0ZW1zS2V5LCBzb3J0RGVmaW5pdGlvbik7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJldHVy
biBwcm9wZXJ0eVNvcnQoaXRlbXNLZXksIHNvcnREZWZpbml0aW9uKTsKLSAgICB9Ci0gIH0KLQot
ICBmdW5jdGlvbiBjdXN0b21Tb3J0KGl0ZW1zS2V5LCBjb21wYXJhdG9yKSB7Ci0gICAgcmV0dXJu
IGFycmF5TWFjcm8oaXRlbXNLZXksIGZ1bmN0aW9uICh2YWx1ZSkgewotICAgICAgdmFyIF90aGlz
NCA9IHRoaXM7Ci0KLSAgICAgIHJldHVybiB2YWx1ZS5zbGljZSgpLnNvcnQoZnVuY3Rpb24gKHgs
IHkpIHsKLSAgICAgICAgcmV0dXJuIGNvbXBhcmF0b3IuY2FsbChfdGhpczQsIHgsIHkpOwotICAg
ICAgfSk7Ci0gICAgfSk7Ci0gIH0KLQotICAvLyBUaGlzIG9uZSBuZWVkcyB0byBkeW5hbWljYWxs
eSBzZXQgdXAgYW5kIHRlYXIgZG93biBvYnNlcnZlcnMgb24gdGhlIGl0ZW1zS2V5Ci0gIC8vIGRl
cGVuZGluZyBvbiB0aGUgc29ydFByb3BlcnRpZXMKLSAgZnVuY3Rpb24gcHJvcGVydHlTb3J0KGl0
ZW1zS2V5LCBzb3J0UHJvcGVydGllc0tleSkgewotICAgIHZhciBjcCA9IG5ldyBfZW1iZXJNZXRh
bENvbXB1dGVkLkNvbXB1dGVkUHJvcGVydHkoZnVuY3Rpb24gKGtleSkgewotICAgICAgdmFyIF90
aGlzNSA9IHRoaXM7Ci0KLSAgICAgIHZhciBpdGVtc0tleUlzQXRUaGlzID0gaXRlbXNLZXkgPT09
ICdAdGhpcyc7Ci0gICAgICB2YXIgc29ydFByb3BlcnRpZXMgPSBfZW1iZXJNZXRhbFByb3BlcnR5
X2dldC5nZXQodGhpcywgc29ydFByb3BlcnRpZXNLZXkpOwotCi0gICAgICBfZW1iZXJNZXRhbERl
YnVnLmFzc2VydCgnVGhlIHNvcnQgZGVmaW5pdGlvbiBmb3IgXCcnICsga2V5ICsgJ1wnIG9uICcg
KyB0aGlzICsgJyBtdXN0IGJlIGEgZnVuY3Rpb24gb3IgYW4gYXJyYXkgb2Ygc3RyaW5ncycsIF9l
bWJlclJ1bnRpbWVVdGlscy5pc0FycmF5KHNvcnRQcm9wZXJ0aWVzKSAmJiBzb3J0UHJvcGVydGll
cy5ldmVyeShmdW5jdGlvbiAocykgewotICAgICAgICByZXR1cm4gdHlwZW9mIHMgPT09ICdzdHJp
bmcnOwotICAgICAgfSkpOwotCi0gICAgICB2YXIgbm9ybWFsaXplZFNvcnRQcm9wZXJ0aWVzID0g
bm9ybWFsaXplU29ydFByb3BlcnRpZXMoc29ydFByb3BlcnRpZXMpOwotCi0gICAgICAvLyBBZGQv
cmVtb3ZlIHByb3BlcnR5IG9ic2VydmVycyBhcyByZXF1aXJlZC4KLSAgICAgIHZhciBhY3RpdmVP
YnNlcnZlcnNNYXAgPSBjcC5fYWN0aXZlT2JzZXJ2ZXJNYXAgfHwgKGNwLl9hY3RpdmVPYnNlcnZl
ck1hcCA9IG5ldyBfZW1iZXJNZXRhbFdlYWtfbWFwLmRlZmF1bHQoKSk7Ci0gICAgICB2YXIgYWN0
aXZlT2JzZXJ2ZXJzID0gYWN0aXZlT2JzZXJ2ZXJzTWFwLmdldCh0aGlzKTsKLQotICAgICAgaWYg
KGFjdGl2ZU9ic2VydmVycykgewotICAgICAgICBhY3RpdmVPYnNlcnZlcnMuZm9yRWFjaChmdW5j
dGlvbiAoYXJncykgewotICAgICAgICAgIF9lbWJlck1ldGFsT2JzZXJ2ZXIucmVtb3ZlT2JzZXJ2
ZXIuYXBwbHkobnVsbCwgYXJncyk7Ci0gICAgICAgIH0pOwotICAgICAgfQotCi0gICAgICBmdW5j
dGlvbiBzb3J0UHJvcGVydHlEaWRDaGFuZ2UoKSB7Ci0gICAgICAgIHRoaXMubm90aWZ5UHJvcGVy
dHlDaGFuZ2Uoa2V5KTsKLSAgICAgIH0KLQotICAgICAgYWN0aXZlT2JzZXJ2ZXJzID0gbm9ybWFs
aXplZFNvcnRQcm9wZXJ0aWVzLm1hcChmdW5jdGlvbiAoX3JlZikgewotICAgICAgICB2YXIgcHJv
cCA9IF9yZWZbMF07Ci0KLSAgICAgICAgdmFyIHBhdGggPSBpdGVtc0tleUlzQXRUaGlzID8gJ0Bl
YWNoLicgKyBwcm9wIDogaXRlbXNLZXkgKyAnLkBlYWNoLicgKyBwcm9wOwotICAgICAgICB2YXIg
YXJncyA9IFtfdGhpczUsIHBhdGgsIHNvcnRQcm9wZXJ0eURpZENoYW5nZV07Ci0gICAgICAgIF9l
bWJlck1ldGFsT2JzZXJ2ZXIuYWRkT2JzZXJ2ZXIuYXBwbHkobnVsbCwgYXJncyk7Ci0gICAgICAg
IHJldHVybiBhcmdzOwotICAgICAgfSk7Ci0KLSAgICAgIGFjdGl2ZU9ic2VydmVyc01hcC5zZXQo
dGhpcywgYWN0aXZlT2JzZXJ2ZXJzKTsKLQotICAgICAgLy8gU29ydCBhbmQgcmV0dXJuIHRoZSBh
cnJheS4KLSAgICAgIHZhciBpdGVtcyA9IGl0ZW1zS2V5SXNBdFRoaXMgPyB0aGlzIDogX2VtYmVy
TWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsIGl0ZW1zS2V5KTsKLQotICAgICAgaWYgKF9lbWJl
clJ1bnRpbWVVdGlscy5pc0FycmF5KGl0ZW1zKSkgewotICAgICAgICByZXR1cm4gc29ydEJ5Tm9y
bWFsaXplZFNvcnRQcm9wZXJ0aWVzKGl0ZW1zLCBub3JtYWxpemVkU29ydFByb3BlcnRpZXMpOwot
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJuIF9lbWJlclJ1bnRpbWVTeXN0ZW1OYXRpdmVf
YXJyYXkuQSgpOwotICAgICAgfQotICAgIH0pOwotCi0gICAgY3AuX2FjdGl2ZU9ic2VydmVyTWFw
ID0gdW5kZWZpbmVkOwotCi0gICAgcmV0dXJuIGNwLnByb3BlcnR5KHNvcnRQcm9wZXJ0aWVzS2V5
ICsgJy5bXScpLnJlYWRPbmx5KCk7Ci0gIH0KLQotICBmdW5jdGlvbiBub3JtYWxpemVTb3J0UHJv
cGVydGllcyhzb3J0UHJvcGVydGllcykgewotICAgIHJldHVybiBzb3J0UHJvcGVydGllcy5tYXAo
ZnVuY3Rpb24gKHApIHsKLSAgICAgIHZhciBfcCRzcGxpdCA9IHAuc3BsaXQoJzonKTsKLQotICAg
ICAgdmFyIHByb3AgPSBfcCRzcGxpdFswXTsKLSAgICAgIHZhciBkaXJlY3Rpb24gPSBfcCRzcGxp
dFsxXTsKLQotICAgICAgZGlyZWN0aW9uID0gZGlyZWN0aW9uIHx8ICdhc2MnOwotCi0gICAgICBy
ZXR1cm4gW3Byb3AsIGRpcmVjdGlvbl07Ci0gICAgfSk7Ci0gIH0KLQotICBmdW5jdGlvbiBzb3J0
QnlOb3JtYWxpemVkU29ydFByb3BlcnRpZXMoaXRlbXMsIG5vcm1hbGl6ZWRTb3J0UHJvcGVydGll
cykgewotICAgIHJldHVybiBfZW1iZXJSdW50aW1lU3lzdGVtTmF0aXZlX2FycmF5LkEoaXRlbXMu
c2xpY2UoKS5zb3J0KGZ1bmN0aW9uIChpdGVtQSwgaXRlbUIpIHsKLSAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgbm9ybWFsaXplZFNvcnRQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAg
IHZhciBfbm9ybWFsaXplZFNvcnRQcm9wZXJ0aWVzJGkgPSBub3JtYWxpemVkU29ydFByb3BlcnRp
ZXNbaV07Ci0gICAgICAgIHZhciBwcm9wID0gX25vcm1hbGl6ZWRTb3J0UHJvcGVydGllcyRpWzBd
OwotICAgICAgICB2YXIgZGlyZWN0aW9uID0gX25vcm1hbGl6ZWRTb3J0UHJvcGVydGllcyRpWzFd
OwotCi0gICAgICAgIHZhciByZXN1bHQgPSBfZW1iZXJSdW50aW1lQ29tcGFyZS5kZWZhdWx0KF9l
bWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldChpdGVtQSwgcHJvcCksIF9lbWJlck1ldGFsUHJvcGVy
dHlfZ2V0LmdldChpdGVtQiwgcHJvcCkpOwotICAgICAgICBpZiAocmVzdWx0ICE9PSAwKSB7Ci0g
ICAgICAgICAgcmV0dXJuIGRpcmVjdGlvbiA9PT0gJ2Rlc2MnID8gLTEgKiByZXN1bHQgOiByZXN1
bHQ7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgcmV0dXJuIDA7Ci0gICAgfSkpOwotICB9
Ci19KTsKLWVuaWZlZCgnZW1iZXItcnVudGltZS9jb250cm9sbGVycy9jb250cm9sbGVyJywgWydl
eHBvcnRzJywgJ2VtYmVyLW1ldGFsL2RlYnVnJywgJ2VtYmVyLXJ1bnRpbWUvc3lzdGVtL29iamVj
dCcsICdlbWJlci1ydW50aW1lL21peGlucy9jb250cm9sbGVyJywgJ2VtYmVyLXJ1bnRpbWUvaW5q
ZWN0JywgJ2VtYmVyLXJ1bnRpbWUvbWl4aW5zL2FjdGlvbl9oYW5kbGVyJ10sIGZ1bmN0aW9uIChl
eHBvcnRzLCBfZW1iZXJNZXRhbERlYnVnLCBfZW1iZXJSdW50aW1lU3lzdGVtT2JqZWN0LCBfZW1i
ZXJSdW50aW1lTWl4aW5zQ29udHJvbGxlciwgX2VtYmVyUnVudGltZUluamVjdCwgX2VtYmVyUnVu
dGltZU1peGluc0FjdGlvbl9oYW5kbGVyKSB7Ci0gICd1c2Ugc3RyaWN0JzsKLQotICAvKioKLSAg
QG1vZHVsZSBlbWJlcgotICBAc3VibW9kdWxlIGVtYmVyLXJ1bnRpbWUKLSAgKi8KLQotICAvKioK
LSAgICBAY2xhc3MgQ29udHJvbGxlcgotICAgIEBuYW1lc3BhY2UgRW1iZXIKLSAgICBAZXh0ZW5k
cyBFbWJlci5PYmplY3QKLSAgICBAdXNlcyBFbWJlci5Db250cm9sbGVyTWl4aW4KLSAgICBAcHVi
bGljCi0gICovCi0gIHZhciBDb250cm9sbGVyID0gX2VtYmVyUnVudGltZVN5c3RlbU9iamVjdC5k
ZWZhdWx0LmV4dGVuZChfZW1iZXJSdW50aW1lTWl4aW5zQ29udHJvbGxlci5kZWZhdWx0KTsKLQot
ICBfZW1iZXJSdW50aW1lTWl4aW5zQWN0aW9uX2hhbmRsZXIuZGVwcmVjYXRlVW5kZXJzY29yZUFj
dGlvbnMoQ29udHJvbGxlcik7Ci0KLSAgZnVuY3Rpb24gY29udHJvbGxlckluamVjdGlvbkhlbHBl
cihmYWN0b3J5KSB7Ci0gICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ0RlZmluaW5nIGFuIGlu
amVjdGVkIGNvbnRyb2xsZXIgcHJvcGVydHkgb24gYSAnICsgJ25vbi1jb250cm9sbGVyIGlzIG5v
dCBhbGxvd2VkLicsIF9lbWJlclJ1bnRpbWVNaXhpbnNDb250cm9sbGVyLmRlZmF1bHQuZGV0ZWN0
KGZhY3RvcnkuUHJvdG90eXBlTWl4aW4pKTsKLSAgfQotCi0gIC8qKgotICAgIENyZWF0ZXMgYSBw
cm9wZXJ0eSB0aGF0IGxhemlseSBsb29rcyB1cCBhbm90aGVyIGNvbnRyb2xsZXIgaW4gdGhlIGNv
bnRhaW5lci4KLSAgICBDYW4gb25seSBiZSB1c2VkIHdoZW4gZGVmaW5pbmcgYW5vdGhlciBjb250
cm9sbGVyLgotICAKLSAgICBFeGFtcGxlOgotICAKLSAgICBgYGBqYXZhc2NyaXB0Ci0gICAgQXBw
LlBvc3RDb250cm9sbGVyID0gRW1iZXIuQ29udHJvbGxlci5leHRlbmQoewotICAgICAgcG9zdHM6
IEVtYmVyLmluamVjdC5jb250cm9sbGVyKCkKLSAgICB9KTsKLSAgICBgYGAKLSAgCi0gICAgVGhp
cyBleGFtcGxlIHdpbGwgY3JlYXRlIGEgYHBvc3RzYCBwcm9wZXJ0eSBvbiB0aGUgYHBvc3RgIGNv
bnRyb2xsZXIgdGhhdAotICAgIGxvb2tzIHVwIHRoZSBgcG9zdHNgIGNvbnRyb2xsZXIgaW4gdGhl
IGNvbnRhaW5lciwgbWFraW5nIGl0IGVhc3kgdG8KLSAgICByZWZlcmVuY2Ugb3RoZXIgY29udHJv
bGxlcnMuIFRoaXMgaXMgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgdG86Ci0gIAotICAgIGBgYGph
dmFzY3JpcHQKLSAgICBBcHAuUG9zdENvbnRyb2xsZXIgPSBFbWJlci5Db250cm9sbGVyLmV4dGVu
ZCh7Ci0gICAgICBuZWVkczogJ3Bvc3RzJywKLSAgICAgIHBvc3RzOiBFbWJlci5jb21wdXRlZC5h
bGlhcygnY29udHJvbGxlcnMucG9zdHMnKQotICAgIH0pOwotICAgIGBgYAotICAKLSAgICBAbWV0
aG9kIGNvbnRyb2xsZXIKLSAgICBAc2luY2UgMS4xMC4wCi0gICAgQGZvciBFbWJlci5pbmplY3QK
LSAgICBAcGFyYW0ge1N0cmluZ30gbmFtZSAob3B0aW9uYWwpIG5hbWUgb2YgdGhlIGNvbnRyb2xs
ZXIgdG8gaW5qZWN0LCBkZWZhdWx0cwotICAgICAgICAgICB0byB0aGUgcHJvcGVydHkncyBuYW1l
Ci0gICAgQHJldHVybiB7RW1iZXIuSW5qZWN0ZWRQcm9wZXJ0eX0gaW5qZWN0aW9uIGRlc2NyaXB0
b3IgaW5zdGFuY2UKLSAgICBAcHVibGljCi0gICovCi0gIF9lbWJlclJ1bnRpbWVJbmplY3QuY3Jl
YXRlSW5qZWN0aW9uSGVscGVyKCdjb250cm9sbGVyJywgY29udHJvbGxlckluamVjdGlvbkhlbHBl
cik7Ci0KLSAgZXhwb3J0cy5kZWZhdWx0ID0gQ29udHJvbGxlcjsKLX0pOwotZW5pZmVkKCdlbWJl
ci1ydW50aW1lL2NvcHknLCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwvZGVidWcnLCAnZW1iZXIt
cnVudGltZS9zeXN0ZW0vb2JqZWN0JywgJ2VtYmVyLXJ1bnRpbWUvbWl4aW5zL2NvcHlhYmxlJ10s
IGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbERlYnVnLCBfZW1iZXJSdW50aW1lU3lzdGVt
T2JqZWN0LCBfZW1iZXJSdW50aW1lTWl4aW5zQ29weWFibGUpIHsKLSAgJ3VzZSBzdHJpY3QnOwot
Ci0gIGV4cG9ydHMuZGVmYXVsdCA9IGNvcHk7Ci0KLSAgZnVuY3Rpb24gX2NvcHkob2JqLCBkZWVw
LCBzZWVuLCBjb3BpZXMpIHsKLSAgICB2YXIgcmV0LCBsb2MsIGtleTsKLQotICAgIC8vIHByaW1p
dGl2ZSBkYXRhIHR5cGVzIGFyZSBpbW11dGFibGUsIGp1c3QgcmV0dXJuIHRoZW0uCi0gICAgaWYg
KHR5cGVvZiBvYmogIT09ICdvYmplY3QnIHx8IG9iaiA9PT0gbnVsbCkgewotICAgICAgcmV0dXJu
IG9iajsKLSAgICB9Ci0KLSAgICAvLyBhdm9pZCBjeWNsaWNhbCBsb29wcwotICAgIGlmIChkZWVw
ICYmIChsb2MgPSBzZWVuLmluZGV4T2Yob2JqKSkgPj0gMCkgewotICAgICAgcmV0dXJuIGNvcGll
c1tsb2NdOwotICAgIH0KLQotICAgIF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0KCdDYW5ub3QgY2xv
bmUgYW4gRW1iZXIuT2JqZWN0IHRoYXQgZG9lcyBub3QgaW1wbGVtZW50IEVtYmVyLkNvcHlhYmxl
JywgIShvYmogaW5zdGFuY2VvZiBfZW1iZXJSdW50aW1lU3lzdGVtT2JqZWN0LmRlZmF1bHQpIHx8
IF9lbWJlclJ1bnRpbWVNaXhpbnNDb3B5YWJsZS5kZWZhdWx0ICYmIF9lbWJlclJ1bnRpbWVNaXhp
bnNDb3B5YWJsZS5kZWZhdWx0LmRldGVjdChvYmopKTsKLQotICAgIC8vIElNUE9SVEFOVDogdGhp
cyBzcGVjaWZpYyB0ZXN0IHdpbGwgZGV0ZWN0IGEgbmF0aXZlIGFycmF5IG9ubHkuIEFueSBvdGhl
cgotICAgIC8vIG9iamVjdCB3aWxsIG5lZWQgdG8gaW1wbGVtZW50IENvcHlhYmxlLgotICAgIGlm
IChBcnJheS5pc0FycmF5KG9iaikpIHsKLSAgICAgIHJldCA9IG9iai5zbGljZSgpOwotCi0gICAg
ICBpZiAoZGVlcCkgewotICAgICAgICBsb2MgPSByZXQubGVuZ3RoOwotCi0gICAgICAgIHdoaWxl
ICgtLWxvYyA+PSAwKSB7Ci0gICAgICAgICAgcmV0W2xvY10gPSBfY29weShyZXRbbG9jXSwgZGVl
cCwgc2VlbiwgY29waWVzKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0gZWxzZSBpZiAoX2Vt
YmVyUnVudGltZU1peGluc0NvcHlhYmxlLmRlZmF1bHQgJiYgX2VtYmVyUnVudGltZU1peGluc0Nv
cHlhYmxlLmRlZmF1bHQuZGV0ZWN0KG9iaikpIHsKLSAgICAgIHJldCA9IG9iai5jb3B5KGRlZXAs
IHNlZW4sIGNvcGllcyk7Ci0gICAgfSBlbHNlIGlmIChvYmogaW5zdGFuY2VvZiBEYXRlKSB7Ci0g
ICAgICByZXQgPSBuZXcgRGF0ZShvYmouZ2V0VGltZSgpKTsKLSAgICB9IGVsc2UgewotICAgICAg
cmV0ID0ge307Ci0KLSAgICAgIGZvciAoa2V5IGluIG9iaikgewotICAgICAgICAvLyBzdXBwb3J0
IE51bGwgcHJvdG90eXBlCi0gICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9w
ZXJ0eS5jYWxsKG9iaiwga2V5KSkgewotICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0K
LSAgICAgICAgLy8gUHJldmVudHMgYnJvd3NlcnMgdGhhdCBkb24ndCByZXNwZWN0IG5vbi1lbnVt
ZXJhYmlsaXR5IGZyb20KLSAgICAgICAgLy8gY29weWluZyBpbnRlcm5hbCBFbWJlciBwcm9wZXJ0
aWVzCi0gICAgICAgIGlmIChrZXkuc3Vic3RyaW5nKDAsIDIpID09PSAnX18nKSB7Ci0gICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICByZXRba2V5XSA9IGRlZXAgPyBfY29w
eShvYmpba2V5XSwgZGVlcCwgc2VlbiwgY29waWVzKSA6IG9ialtrZXldOwotICAgICAgfQotICAg
IH0KLQotICAgIGlmIChkZWVwKSB7Ci0gICAgICBzZWVuLnB1c2gob2JqKTsKLSAgICAgIGNvcGll
cy5wdXNoKHJldCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJldDsKLSAgfQotCi0gIC8qKgotICAg
IENyZWF0ZXMgYSBzaGFsbG93IGNvcHkgb2YgdGhlIHBhc3NlZCBvYmplY3QuIEEgZGVlcCBjb3B5
IG9mIHRoZSBvYmplY3QgaXMKLSAgICByZXR1cm5lZCBpZiB0aGUgb3B0aW9uYWwgYGRlZXBgIGFy
Z3VtZW50IGlzIGB0cnVlYC4KLSAgCi0gICAgSWYgdGhlIHBhc3NlZCBvYmplY3QgaW1wbGVtZW50
cyB0aGUgYEVtYmVyLkNvcHlhYmxlYCBpbnRlcmZhY2UsIHRoZW4gdGhpcwotICAgIGZ1bmN0aW9u
IHdpbGwgZGVsZWdhdGUgdG8gdGhlIG9iamVjdCdzIGBjb3B5KClgIG1ldGhvZCBhbmQgcmV0dXJu
IHRoZQotICAgIHJlc3VsdC4gU2VlIGBFbWJlci5Db3B5YWJsZWAgZm9yIGZ1cnRoZXIgZGV0YWls
cy4KLSAgCi0gICAgRm9yIHByaW1pdGl2ZSB2YWx1ZXMgKHdoaWNoIGFyZSBpbW11dGFibGUgaW4g
SmF2YVNjcmlwdCksIHRoZSBwYXNzZWQgb2JqZWN0Ci0gICAgaXMgc2ltcGx5IHJldHVybmVkLgot
ICAKLSAgICBAbWV0aG9kIGNvcHkKLSAgICBAZm9yIEVtYmVyCi0gICAgQHBhcmFtIHtPYmplY3R9
IG9iaiBUaGUgb2JqZWN0IHRvIGNsb25lCi0gICAgQHBhcmFtIHtCb29sZWFufSBbZGVlcD1mYWxz
ZV0gSWYgdHJ1ZSwgYSBkZWVwIGNvcHkgb2YgdGhlIG9iamVjdCBpcyBtYWRlLgotICAgIEByZXR1
cm4ge09iamVjdH0gVGhlIGNvcGllZCBvYmplY3QKLSAgICBAcHVibGljCi0gICovCi0KLSAgZnVu
Y3Rpb24gY29weShvYmosIGRlZXApIHsKLSAgICAvLyBmYXN0IHBhdGhzCi0gICAgaWYgKCdvYmpl
Y3QnICE9PSB0eXBlb2Ygb2JqIHx8IG9iaiA9PT0gbnVsbCkgewotICAgICAgcmV0dXJuIG9iajsg
Ly8gY2FuJ3QgY29weSBwcmltaXRpdmVzCi0gICAgfQotCi0gICAgaWYgKF9lbWJlclJ1bnRpbWVN
aXhpbnNDb3B5YWJsZS5kZWZhdWx0ICYmIF9lbWJlclJ1bnRpbWVNaXhpbnNDb3B5YWJsZS5kZWZh
dWx0LmRldGVjdChvYmopKSB7Ci0gICAgICByZXR1cm4gb2JqLmNvcHkoZGVlcCk7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIF9jb3B5KG9iaiwgZGVlcCwgZGVlcCA/IFtdIDogbnVsbCwgZGVlcCA/IFtd
IDogbnVsbCk7Ci0gIH0KLX0pOwotZW5pZmVkKCJlbWJlci1ydW50aW1lL2NvcmUiLCBbImV4cG9y
dHMiXSwgZnVuY3Rpb24gKGV4cG9ydHMpIHsKLSAgInVzZSBzdHJpY3QiOwotfSk7Ci0vKioKLUBt
b2R1bGUgZW1iZXIKLUBzdWJtb2R1bGUgZW1iZXItcnVudGltZQotKi8KLWVuaWZlZCgnZW1iZXIt
cnVudGltZS9leHQvZnVuY3Rpb24nLCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwvY29yZScsICdl
bWJlci1tZXRhbC9kZWJ1ZycsICdlbWJlci1tZXRhbC9jb21wdXRlZCcsICdlbWJlci1tZXRhbC9t
aXhpbiddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0YWxDb3JlLCBfZW1iZXJNZXRhbERl
YnVnLCBfZW1iZXJNZXRhbENvbXB1dGVkLCBfZW1iZXJNZXRhbE1peGluKSB7Ci0gIC8qKgotICBA
bW9kdWxlIGVtYmVyCi0gIEBzdWJtb2R1bGUgZW1iZXItcnVudGltZQotICAqLwotCi0gICd1c2Ug
c3RyaWN0JzsKLQotICB2YXIgYV9zbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTsKLSAgdmFy
IEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlOwotCi0gIGlmIChfZW1iZXJN
ZXRhbENvcmUuZGVmYXVsdC5FWFRFTkRfUFJPVE9UWVBFUyA9PT0gdHJ1ZSB8fCBfZW1iZXJNZXRh
bENvcmUuZGVmYXVsdC5FWFRFTkRfUFJPVE9UWVBFUy5GdW5jdGlvbikgewotICAgIC8qKgotICAg
ICAgVGhlIGBwcm9wZXJ0eWAgZXh0ZW5zaW9uIG9mIEphdmFzY3JpcHQncyBGdW5jdGlvbiBwcm90
b3R5cGUgaXMgYXZhaWxhYmxlCi0gICAgICB3aGVuIGBFbWJlci5FWFRFTkRfUFJPVE9UWVBFU2Ag
b3IgYEVtYmVyLkVYVEVORF9QUk9UT1RZUEVTLkZ1bmN0aW9uYCBpcwotICAgICAgYHRydWVgLCB3
aGljaCBpcyB0aGUgZGVmYXVsdC4KLSAgICAgICBDb21wdXRlZCBwcm9wZXJ0aWVzIGFsbG93IHlv
dSB0byB0cmVhdCBhIGZ1bmN0aW9uIGxpa2UgYSBwcm9wZXJ0eToKLSAgICAgICBgYGBqYXZhc2Ny
aXB0Ci0gICAgICBNeUFwcC5QcmVzaWRlbnQgPSBFbWJlci5PYmplY3QuZXh0ZW5kKHsKLSAgICAg
ICAgZmlyc3ROYW1lOiAnJywKLSAgICAgICAgbGFzdE5hbWU6ICAnJywKLSAgICAgICAgIGZ1bGxO
YW1lOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICByZXR1cm4gdGhpcy5nZXQoJ2ZpcnN0TmFtZScp
ICsgJyAnICsgdGhpcy5nZXQoJ2xhc3ROYW1lJyk7Ci0gICAgICAgIH0ucHJvcGVydHkoKSAvLyBD
YWxsIHRoaXMgZmxhZyB0byBtYXJrIHRoZSBmdW5jdGlvbiBhcyBhIHByb3BlcnR5Ci0gICAgICB9
KTsKLSAgICAgICB2YXIgcHJlc2lkZW50ID0gTXlBcHAuUHJlc2lkZW50LmNyZWF0ZSh7Ci0gICAg
ICAgIGZpcnN0TmFtZTogJ0JhcmFjaycsCi0gICAgICAgIGxhc3ROYW1lOiAnT2JhbWEnCi0gICAg
ICB9KTsKLSAgICAgICBwcmVzaWRlbnQuZ2V0KCdmdWxsTmFtZScpOyAvLyAnQmFyYWNrIE9iYW1h
JwotICAgICAgYGBgCi0gICAgICAgVHJlYXRpbmcgYSBmdW5jdGlvbiBsaWtlIGEgcHJvcGVydHkg
aXMgdXNlZnVsIGJlY2F1c2UgdGhleSBjYW4gd29yayB3aXRoCi0gICAgICBiaW5kaW5ncywganVz
dCBsaWtlIGFueSBvdGhlciBwcm9wZXJ0eS4KLSAgICAgICBNYW55IGNvbXB1dGVkIHByb3BlcnRp
ZXMgaGF2ZSBkZXBlbmRlbmNpZXMgb24gb3RoZXIgcHJvcGVydGllcy4gRm9yCi0gICAgICBleGFt
cGxlLCBpbiB0aGUgYWJvdmUgZXhhbXBsZSwgdGhlIGBmdWxsTmFtZWAgcHJvcGVydHkgZGVwZW5k
cyBvbgotICAgICAgYGZpcnN0TmFtZWAgYW5kIGBsYXN0TmFtZWAgdG8gZGV0ZXJtaW5lIGl0cyB2
YWx1ZS4gWW91IGNhbiB0ZWxsIEVtYmVyCi0gICAgICBhYm91dCB0aGVzZSBkZXBlbmRlbmNpZXMg
bGlrZSB0aGlzOgotICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgIE15QXBwLlByZXNpZGVudCA9
IEVtYmVyLk9iamVjdC5leHRlbmQoewotICAgICAgICBmaXJzdE5hbWU6ICcnLAotICAgICAgICBs
YXN0TmFtZTogICcnLAotICAgICAgICAgZnVsbE5hbWU6IGZ1bmN0aW9uKCkgewotICAgICAgICAg
IHJldHVybiB0aGlzLmdldCgnZmlyc3ROYW1lJykgKyAnICcgKyB0aGlzLmdldCgnbGFzdE5hbWUn
KTsKLSAgICAgICAgICAgLy8gVGVsbCBFbWJlci5qcyB0aGF0IHRoaXMgY29tcHV0ZWQgcHJvcGVy
dHkgZGVwZW5kcyBvbiBmaXJzdE5hbWUKLSAgICAgICAgICAvLyBhbmQgbGFzdE5hbWUKLSAgICAg
ICAgfS5wcm9wZXJ0eSgnZmlyc3ROYW1lJywgJ2xhc3ROYW1lJykKLSAgICAgIH0pOwotICAgICAg
YGBgCi0gICAgICAgTWFrZSBzdXJlIHlvdSBsaXN0IHRoZXNlIGRlcGVuZGVuY2llcyBzbyBFbWJl
ciBrbm93cyB3aGVuIHRvIHVwZGF0ZQotICAgICAgYmluZGluZ3MgdGhhdCBjb25uZWN0IHRvIGEg
Y29tcHV0ZWQgcHJvcGVydHkuIENoYW5naW5nIGEgZGVwZW5kZW5jeQotICAgICAgd2lsbCBub3Qg
aW1tZWRpYXRlbHkgdHJpZ2dlciBhbiB1cGRhdGUgb2YgdGhlIGNvbXB1dGVkIHByb3BlcnR5LCBi
dXQKLSAgICAgIHdpbGwgaW5zdGVhZCBjbGVhciB0aGUgY2FjaGUgc28gdGhhdCBpdCBpcyB1cGRh
dGVkIHdoZW4gdGhlIG5leHQgYGdldGAKLSAgICAgIGlzIGNhbGxlZCBvbiB0aGUgcHJvcGVydHku
Ci0gICAgICAgU2VlIFtFbWJlci5Db21wdXRlZFByb3BlcnR5XSgvYXBpL2NsYXNzZXMvRW1iZXIu
Q29tcHV0ZWRQcm9wZXJ0eS5odG1sKSwgW0VtYmVyLmNvbXB1dGVkXSgvYXBpL2NsYXNzZXMvRW1i
ZXIuY29tcHV0ZWQuaHRtbCkuCi0gICAgICAgQG1ldGhvZCBwcm9wZXJ0eQotICAgICAgQGZvciBG
dW5jdGlvbgotICAgICAgQHB1YmxpYwotICAgICovCi0gICAgRnVuY3Rpb25Qcm90b3R5cGUucHJv
cGVydHkgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICB2YXIgcmV0ID0gX2VtYmVyTWV0YWxDb21wdXRl
ZC5jb21wdXRlZCh0aGlzKTsKLSAgICAgIC8vIENvbXB1dGVkUHJvcGVydHkucHJvdG90eXBlLnBy
b3BlcnR5IGV4cGFuZHMgcHJvcGVydGllczsgbm8gbmVlZCBmb3IgdXMgdG8KLSAgICAgIC8vIGRv
IHNvIGhlcmUuCi0gICAgICByZXR1cm4gcmV0LnByb3BlcnR5LmFwcGx5KHJldCwgYXJndW1lbnRz
KTsKLSAgICB9OwotCi0gICAgLyoqCi0gICAgICBUaGUgYG9ic2VydmVzYCBleHRlbnNpb24gb2Yg
SmF2YXNjcmlwdCdzIEZ1bmN0aW9uIHByb3RvdHlwZSBpcyBhdmFpbGFibGUKLSAgICAgIHdoZW4g
YEVtYmVyLkVYVEVORF9QUk9UT1RZUEVTYCBvciBgRW1iZXIuRVhURU5EX1BST1RPVFlQRVMuRnVu
Y3Rpb25gIGlzCi0gICAgICB0cnVlLCB3aGljaCBpcyB0aGUgZGVmYXVsdC4KLSAgICAgICBZb3Ug
Y2FuIG9ic2VydmUgcHJvcGVydHkgY2hhbmdlcyBzaW1wbHkgYnkgYWRkaW5nIHRoZSBgb2JzZXJ2
ZXNgCi0gICAgICBjYWxsIHRvIHRoZSBlbmQgb2YgeW91ciBtZXRob2QgZGVjbGFyYXRpb25zIGlu
IGNsYXNzZXMgdGhhdCB5b3Ugd3JpdGUuCi0gICAgICBGb3IgZXhhbXBsZToKLSAgICAgICBgYGBq
YXZhc2NyaXB0Ci0gICAgICBFbWJlci5PYmplY3QuZXh0ZW5kKHsKLSAgICAgICAgdmFsdWVPYnNl
cnZlcjogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgLy8gRXhlY3V0ZXMgd2hlbmV2ZXIgdGhlICJ2
YWx1ZSIgcHJvcGVydHkgY2hhbmdlcwotICAgICAgICB9Lm9ic2VydmVzKCd2YWx1ZScpCi0gICAg
ICB9KTsKLSAgICAgIGBgYAotICAgICAgIEluIHRoZSBmdXR1cmUgdGhpcyBtZXRob2QgbWF5IGJl
Y29tZSBhc3luY2hyb25vdXMuCi0gICAgICAgU2VlIGBFbWJlci5vYnNlcnZlcmAuCi0gICAgICAg
QG1ldGhvZCBvYnNlcnZlcwotICAgICAgQGZvciBGdW5jdGlvbgotICAgICAgQHB1YmxpYwotICAg
ICovCi0gICAgRnVuY3Rpb25Qcm90b3R5cGUub2JzZXJ2ZXMgPSBmdW5jdGlvbiAoKSB7Ci0gICAg
ICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4pLCBf
a2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykgewotICAgICAgICBhcmdzW19rZXldID0gYXJn
dW1lbnRzW19rZXldOwotICAgICAgfQotCi0gICAgICBhcmdzLnB1c2godGhpcyk7Ci0gICAgICBy
ZXR1cm4gX2VtYmVyTWV0YWxNaXhpbi5vYnNlcnZlci5hcHBseSh0aGlzLCBhcmdzKTsKLSAgICB9
OwotCi0gICAgRnVuY3Rpb25Qcm90b3R5cGUuX29ic2VydmVzSW1tZWRpYXRlbHkgPSBmdW5jdGlv
biAoKSB7Ci0gICAgICBfZW1iZXJNZXRhbERlYnVnLmFzc2VydCgnSW1tZWRpYXRlIG9ic2VydmVy
cyBtdXN0IG9ic2VydmUgaW50ZXJuYWwgcHJvcGVydGllcyBvbmx5LCAnICsgJ25vdCBwcm9wZXJ0
aWVzIG9uIG90aGVyIG9iamVjdHMuJywgZnVuY3Rpb24gY2hlY2tJc0ludGVybmFsUHJvcGVydHko
KSB7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7
IGkrKykgewotICAgICAgICAgIGlmIChhcmd1bWVudHNbaV0uaW5kZXhPZignLicpICE9PSAtMSkg
ewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0pOwotCi0gICAgICAvLyBvYnNlcnZlcyBoYW5kbGVz
IHByb3BlcnR5IGV4cGFuc2lvbgotICAgICAgcmV0dXJuIHRoaXMub2JzZXJ2ZXMuYXBwbHkodGhp
cywgYXJndW1lbnRzKTsKLSAgICB9OwotICAgIC8qKgotICAgICAgVGhlIGBvYnNlcnZlc0ltbWVk
aWF0ZWx5YCBleHRlbnNpb24gb2YgSmF2YXNjcmlwdCdzIEZ1bmN0aW9uIHByb3RvdHlwZSBpcwot
ICAgICAgYXZhaWxhYmxlIHdoZW4gYEVtYmVyLkVYVEVORF9QUk9UT1RZUEVTYCBvcgotICAgICAg
YEVtYmVyLkVYVEVORF9QUk9UT1RZUEVTLkZ1bmN0aW9uYCBpcyB0cnVlLCB3aGljaCBpcyB0aGUg
ZGVmYXVsdC4KLSAgICAgICBZb3UgY2FuIG9ic2VydmUgcHJvcGVydHkgY2hhbmdlcyBzaW1wbHkg
YnkgYWRkaW5nIHRoZSBgb2JzZXJ2ZXNJbW1lZGlhdGVseWAKLSAgICAgIGNhbGwgdG8gdGhlIGVu
ZCBvZiB5b3VyIG1ldGhvZCBkZWNsYXJhdGlvbnMgaW4gY2xhc3NlcyB0aGF0IHlvdSB3cml0ZS4K
LSAgICAgIEZvciBleGFtcGxlOgotICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgIEVtYmVyLk9i
amVjdC5leHRlbmQoewotICAgICAgICB2YWx1ZU9ic2VydmVyOiBmdW5jdGlvbigpIHsKLSAgICAg
ICAgICAvLyBFeGVjdXRlcyBpbW1lZGlhdGVseSBhZnRlciB0aGUgInZhbHVlIiBwcm9wZXJ0eSBj
aGFuZ2VzCi0gICAgICAgIH0ub2JzZXJ2ZXNJbW1lZGlhdGVseSgndmFsdWUnKQotICAgICAgfSk7
Ci0gICAgICBgYGAKLSAgICAgICBJbiB0aGUgZnV0dXJlLCBgb2JzZXJ2ZXNgIG1heSBiZWNvbWUg
YXN5bmNocm9ub3VzLiBJbiB0aGlzIGV2ZW50LAotICAgICAgYG9ic2VydmVzSW1tZWRpYXRlbHlg
IHdpbGwgbWFpbnRhaW4gdGhlIHN5bmNocm9ub3VzIGJlaGF2aW9yLgotICAgICAgIFNlZSBgRW1i
ZXIuaW1tZWRpYXRlT2JzZXJ2ZXJgLgotICAgICAgIEBtZXRob2Qgb2JzZXJ2ZXNJbW1lZGlhdGVs
eQotICAgICAgQGZvciBGdW5jdGlvbgotICAgICAgQGRlcHJlY2F0ZWQKLSAgICAgIEBwcml2YXRl
Ci0gICAgKi8KLSAgICBGdW5jdGlvblByb3RvdHlwZS5vYnNlcnZlc0ltbWVkaWF0ZWx5ID0gX2Vt
YmVyTWV0YWxEZWJ1Zy5kZXByZWNhdGVGdW5jKCdGdW5jdGlvbiNvYnNlcnZlc0ltbWVkaWF0ZWx5
IGlzIGRlcHJlY2F0ZWQuIFVzZSBGdW5jdGlvbiNvYnNlcnZlcyBpbnN0ZWFkJywgeyBpZDogJ2Vt
YmVyLXJ1bnRpbWUuZXh0LWZ1bmN0aW9uJywgdW50aWw6ICczLjAuMCcgfSwgRnVuY3Rpb25Qcm90
b3R5cGUuX29ic2VydmVzSW1tZWRpYXRlbHkpOwotCi0gICAgLyoqCi0gICAgICBUaGUgYG9uYCBl
eHRlbnNpb24gb2YgSmF2YXNjcmlwdCdzIEZ1bmN0aW9uIHByb3RvdHlwZSBpcyBhdmFpbGFibGUK
LSAgICAgIHdoZW4gYEVtYmVyLkVYVEVORF9QUk9UT1RZUEVTYCBvciBgRW1iZXIuRVhURU5EX1BS
T1RPVFlQRVMuRnVuY3Rpb25gIGlzCi0gICAgICB0cnVlLCB3aGljaCBpcyB0aGUgZGVmYXVsdC4K
LSAgICAgICBZb3UgY2FuIGxpc3RlbiBmb3IgZXZlbnRzIHNpbXBseSBieSBhZGRpbmcgdGhlIGBv
bmAgY2FsbCB0byB0aGUgZW5kIG9mCi0gICAgICB5b3VyIG1ldGhvZCBkZWNsYXJhdGlvbnMgaW4g
Y2xhc3NlcyBvciBtaXhpbnMgdGhhdCB5b3Ugd3JpdGUuIEZvciBleGFtcGxlOgotICAgICAgIGBg
YGphdmFzY3JpcHQKLSAgICAgIEVtYmVyLk1peGluLmNyZWF0ZSh7Ci0gICAgICAgIGRvU29tZXRo
aW5nV2l0aEVsZW1lbnQ6IGZ1bmN0aW9uKCkgewotICAgICAgICAgIC8vIEV4ZWN1dGVzIHdoZW5l
dmVyIHRoZSAiZGlkSW5zZXJ0RWxlbWVudCIgZXZlbnQgZmlyZXMKLSAgICAgICAgfS5vbignZGlk
SW5zZXJ0RWxlbWVudCcpCi0gICAgICB9KTsKLSAgICAgIGBgYAotICAgICAgIFNlZSBgRW1iZXIu
b25gLgotICAgICAgIEBtZXRob2Qgb24KLSAgICAgIEBmb3IgRnVuY3Rpb24KLSAgICAgIEBwdWJs
aWMKLSAgICAqLwotICAgIEZ1bmN0aW9uUHJvdG90eXBlLm9uID0gZnVuY3Rpb24gKCkgewotICAg
ICAgdmFyIGV2ZW50cyA9IGFfc2xpY2UuY2FsbChhcmd1bWVudHMpOwotICAgICAgdGhpcy5fX2Vt
YmVyX2xpc3RlbnNfXyA9IGV2ZW50czsKLQotICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgfTsKLSAg
fQotfSk7Ci0vLyBFbWJlci5FWFRFTkRfUFJPVE9UWVBFUwotZW5pZmVkKCdlbWJlci1ydW50aW1l
L2V4dC9yc3ZwJywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFsL2NvcmUnLCAncmVxdWlyZScsICdl
bWJlci1tZXRhbC9kZWJ1ZycsICdlbWJlci1tZXRhbC9sb2dnZXInLCAnZW1iZXItbWV0YWwvcnVu
X2xvb3AnLCAncnN2cCddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0YWxDb3JlLCBfcmVx
dWlyZSwgX2VtYmVyTWV0YWxEZWJ1ZywgX2VtYmVyTWV0YWxMb2dnZXIsIF9lbWJlck1ldGFsUnVu
X2xvb3AsIF9yc3ZwKSB7Ci0gICd1c2Ugc3RyaWN0JzsKLQotICBleHBvcnRzLm9uZXJyb3JEZWZh
dWx0ID0gb25lcnJvckRlZmF1bHQ7Ci0gIGV4cG9ydHMuYWZ0ZXIgPSBhZnRlcjsKLQotICB2YXIg
dGVzdE1vZHVsZU5hbWUgPSAnZW1iZXItdGVzdGluZy90ZXN0JzsKLSAgdmFyIFRlc3Q7Ci0KLSAg
dmFyIGFzeW5jU3RhcnQgPSBmdW5jdGlvbiAoKSB7Ci0gICAgaWYgKF9lbWJlck1ldGFsQ29yZS5k
ZWZhdWx0LlRlc3QgJiYgX2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQuVGVzdC5hZGFwdGVyKSB7Ci0g
ICAgICBfZW1iZXJNZXRhbENvcmUuZGVmYXVsdC5UZXN0LmFkYXB0ZXIuYXN5bmNTdGFydCgpOwot
ICAgIH0KLSAgfTsKLQotICB2YXIgYXN5bmNFbmQgPSBmdW5jdGlvbiAoKSB7Ci0gICAgaWYgKF9l
bWJlck1ldGFsQ29yZS5kZWZhdWx0LlRlc3QgJiYgX2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQuVGVz
dC5hZGFwdGVyKSB7Ci0gICAgICBfZW1iZXJNZXRhbENvcmUuZGVmYXVsdC5UZXN0LmFkYXB0ZXIu
YXN5bmNFbmQoKTsKLSAgICB9Ci0gIH07Ci0KLSAgX3JzdnAuY29uZmlndXJlKCdhc3luYycsIGZ1
bmN0aW9uIChjYWxsYmFjaywgcHJvbWlzZSkgewotICAgIHZhciBhc3luYyA9ICFfZW1iZXJNZXRh
bFJ1bl9sb29wLmRlZmF1bHQuY3VycmVudFJ1bkxvb3A7Ci0KLSAgICBpZiAoX2VtYmVyTWV0YWxD
b3JlLmRlZmF1bHQudGVzdGluZyAmJiBhc3luYykgewotICAgICAgYXN5bmNTdGFydCgpOwotICAg
IH0KLQotICAgIF9lbWJlck1ldGFsUnVuX2xvb3AuZGVmYXVsdC5iYWNrYnVybmVyLnNjaGVkdWxl
KCdhY3Rpb25zJywgZnVuY3Rpb24gKCkgewotICAgICAgaWYgKF9lbWJlck1ldGFsQ29yZS5kZWZh
dWx0LnRlc3RpbmcgJiYgYXN5bmMpIHsKLSAgICAgICAgYXN5bmNFbmQoKTsKLSAgICAgIH0KLSAg
ICAgIGNhbGxiYWNrKHByb21pc2UpOwotICAgIH0pOwotICB9KTsKLQotICBmdW5jdGlvbiBvbmVy
cm9yRGVmYXVsdChyZWFzb24pIHsKLSAgICB2YXIgZXJyb3I7Ci0KLSAgICBpZiAocmVhc29uICYm
IHJlYXNvbi5lcnJvclRocm93bikgewotICAgICAgLy8ganFYSFIgcHJvdmlkZXMgdGhpcwotICAg
ICAgZXJyb3IgPSByZWFzb24uZXJyb3JUaHJvd247Ci0gICAgICBpZiAodHlwZW9mIGVycm9yID09
PSAnc3RyaW5nJykgewotICAgICAgICBlcnJvciA9IG5ldyBFcnJvcihlcnJvcik7Ci0gICAgICB9
Ci0gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXJyb3IsICdfX3JlYXNvbl93aXRoX2Vycm9y
X3Rocm93bl9fJywgewotICAgICAgICB2YWx1ZTogcmVhc29uLAotICAgICAgICBlbnVtZXJhYmxl
OiBmYWxzZQotICAgICAgfSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGVycm9yID0gcmVhc29uOwot
ICAgIH0KLQotICAgIGlmIChlcnJvciAmJiBlcnJvci5uYW1lID09PSAnVW5yZWNvZ25pemVkVVJM
RXJyb3InKSB7Ci0gICAgICBfZW1iZXJNZXRhbERlYnVnLmFzc2VydCgnVGhlIFVSTCBcJycgKyBl
cnJvci5tZXNzYWdlICsgJ1wnIGRpZCBub3QgbWF0Y2ggYW55IHJvdXRlcyBpbiB5b3VyIGFwcGxp
Y2F0aW9uJywgZmFsc2UpOwotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChlcnJvciAm
JiBlcnJvci5uYW1lICE9PSAnVHJhbnNpdGlvbkFib3J0ZWQnKSB7Ci0gICAgICBpZiAoX2VtYmVy
TWV0YWxDb3JlLmRlZmF1bHQudGVzdGluZykgewotICAgICAgICAvLyBFUzZUT0RPOiByZW1vdmUg
d2hlbiBwb3NzaWJsZQotICAgICAgICBpZiAoIVRlc3QgJiYgX3JlcXVpcmUuaGFzKHRlc3RNb2R1
bGVOYW1lKSkgewotICAgICAgICAgIFRlc3QgPSBfcmVxdWlyZS5kZWZhdWx0KHRlc3RNb2R1bGVO
YW1lKVsnZGVmYXVsdCddOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKFRlc3QgJiYgVGVzdC5h
ZGFwdGVyKSB7Ci0gICAgICAgICAgVGVzdC5hZGFwdGVyLmV4Y2VwdGlvbihlcnJvcik7Ci0gICAg
ICAgICAgX2VtYmVyTWV0YWxMb2dnZXIuZGVmYXVsdC5lcnJvcihlcnJvci5zdGFjayk7Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgdGhyb3cgZXJyb3I7Ci0gICAgICAgIH0KLSAgICAgIH0g
ZWxzZSBpZiAoX2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQub25lcnJvcikgewotICAgICAgICBfZW1i
ZXJNZXRhbENvcmUuZGVmYXVsdC5vbmVycm9yKGVycm9yKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgIF9lbWJlck1ldGFsTG9nZ2VyLmRlZmF1bHQuZXJyb3IoZXJyb3Iuc3RhY2spOwotICAgICAg
fQotICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIGFmdGVyKGNiKSB7Ci0gICAgX2VtYmVyTWV0YWxS
dW5fbG9vcC5kZWZhdWx0LnNjaGVkdWxlKF9lbWJlck1ldGFsUnVuX2xvb3AuZGVmYXVsdC5xdWV1
ZXNbX2VtYmVyTWV0YWxSdW5fbG9vcC5kZWZhdWx0LnF1ZXVlcy5sZW5ndGggLSAxXSwgY2IpOwot
ICB9Ci0KLSAgX3JzdnAub24oJ2Vycm9yJywgb25lcnJvckRlZmF1bHQpOwotICBfcnN2cC5jb25m
aWd1cmUoJ2FmdGVyJywgYWZ0ZXIpOwotCi0gIGV4cG9ydHMuZGVmYXVsdCA9IF9yc3ZwOwotfSk7
Ci1lbmlmZWQoJ2VtYmVyLXJ1bnRpbWUvZXh0L3N0cmluZycsIFsnZXhwb3J0cycsICdlbWJlci1t
ZXRhbC9jb3JlJywgJ2VtYmVyLXJ1bnRpbWUvc3lzdGVtL3N0cmluZyddLCBmdW5jdGlvbiAoZXhw
b3J0cywgX2VtYmVyTWV0YWxDb3JlLCBfZW1iZXJSdW50aW1lU3lzdGVtU3RyaW5nKSB7Ci0gIC8q
KgotICBAbW9kdWxlIGVtYmVyCi0gIEBzdWJtb2R1bGUgZW1iZXItcnVudGltZQotICAqLwotCi0g
ICd1c2Ugc3RyaWN0JzsKLQotICB2YXIgU3RyaW5nUHJvdG90eXBlID0gU3RyaW5nLnByb3RvdHlw
ZTsKLQotICBpZiAoX2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQuRVhURU5EX1BST1RPVFlQRVMgPT09
IHRydWUgfHwgX2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQuRVhURU5EX1BST1RPVFlQRVMuU3RyaW5n
KSB7Ci0gICAgLyoqCi0gICAgICBTZWUgW0VtYmVyLlN0cmluZy5mbXRdKC9hcGkvY2xhc3Nlcy9F
bWJlci5TdHJpbmcuaHRtbCNtZXRob2RfZm10KS4KLSAgICAgICBAbWV0aG9kIGZtdAotICAgICAg
QGZvciBTdHJpbmcKLSAgICAgIEBwcml2YXRlCi0gICAgICBAZGVwcmVjYXRlZAotICAgICovCi0g
ICAgU3RyaW5nUHJvdG90eXBlLmZtdCA9IGZ1bmN0aW9uICgpIHsKLSAgICAgIGZvciAodmFyIF9s
ZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5
IDwgX2xlbjsgX2tleSsrKSB7Ci0gICAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07
Ci0gICAgICB9Ci0KLSAgICAgIHJldHVybiBfZW1iZXJSdW50aW1lU3lzdGVtU3RyaW5nLmZtdCh0
aGlzLCBhcmdzKTsKLSAgICB9OwotCi0gICAgLyoqCi0gICAgICBTZWUgW0VtYmVyLlN0cmluZy53
XSgvYXBpL2NsYXNzZXMvRW1iZXIuU3RyaW5nLmh0bWwjbWV0aG9kX3cpLgotICAgICAgIEBtZXRo
b2QgdwotICAgICAgQGZvciBTdHJpbmcKLSAgICAgIEBwcml2YXRlCi0gICAgKi8KLSAgICBTdHJp
bmdQcm90b3R5cGUudyA9IGZ1bmN0aW9uICgpIHsKLSAgICAgIHJldHVybiBfZW1iZXJSdW50aW1l
U3lzdGVtU3RyaW5nLncodGhpcyk7Ci0gICAgfTsKLQotICAgIC8qKgotICAgICAgU2VlIFtFbWJl
ci5TdHJpbmcubG9jXSgvYXBpL2NsYXNzZXMvRW1iZXIuU3RyaW5nLmh0bWwjbWV0aG9kX2xvYyku
Ci0gICAgICAgQG1ldGhvZCBsb2MKLSAgICAgIEBmb3IgU3RyaW5nCi0gICAgICBAcHJpdmF0ZQot
ICAgICovCi0gICAgU3RyaW5nUHJvdG90eXBlLmxvYyA9IGZ1bmN0aW9uICgpIHsKLSAgICAgIGZv
ciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4yKSwgX2tl
eTIgPSAwOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7Ci0gICAgICAgIGFyZ3NbX2tleTJdID0g
YXJndW1lbnRzW19rZXkyXTsKLSAgICAgIH0KLQotICAgICAgcmV0dXJuIF9lbWJlclJ1bnRpbWVT
eXN0ZW1TdHJpbmcubG9jKHRoaXMsIGFyZ3MpOwotICAgIH07Ci0KLSAgICAvKioKLSAgICAgIFNl
ZSBbRW1iZXIuU3RyaW5nLmNhbWVsaXplXSgvYXBpL2NsYXNzZXMvRW1iZXIuU3RyaW5nLmh0bWwj
bWV0aG9kX2NhbWVsaXplKS4KLSAgICAgICBAbWV0aG9kIGNhbWVsaXplCi0gICAgICBAZm9yIFN0
cmluZwotICAgICAgQHByaXZhdGUKLSAgICAqLwotICAgIFN0cmluZ1Byb3RvdHlwZS5jYW1lbGl6
ZSA9IGZ1bmN0aW9uICgpIHsKLSAgICAgIHJldHVybiBfZW1iZXJSdW50aW1lU3lzdGVtU3RyaW5n
LmNhbWVsaXplKHRoaXMpOwotICAgIH07Ci0KLSAgICAvKioKLSAgICAgIFNlZSBbRW1iZXIuU3Ry
aW5nLmRlY2FtZWxpemVdKC9hcGkvY2xhc3Nlcy9FbWJlci5TdHJpbmcuaHRtbCNtZXRob2RfZGVj
YW1lbGl6ZSkuCi0gICAgICAgQG1ldGhvZCBkZWNhbWVsaXplCi0gICAgICBAZm9yIFN0cmluZwot
ICAgICAgQHByaXZhdGUKLSAgICAqLwotICAgIFN0cmluZ1Byb3RvdHlwZS5kZWNhbWVsaXplID0g
ZnVuY3Rpb24gKCkgewotICAgICAgcmV0dXJuIF9lbWJlclJ1bnRpbWVTeXN0ZW1TdHJpbmcuZGVj
YW1lbGl6ZSh0aGlzKTsKLSAgICB9OwotCi0gICAgLyoqCi0gICAgICBTZWUgW0VtYmVyLlN0cmlu
Zy5kYXNoZXJpemVdKC9hcGkvY2xhc3Nlcy9FbWJlci5TdHJpbmcuaHRtbCNtZXRob2RfZGFzaGVy
aXplKS4KLSAgICAgICBAbWV0aG9kIGRhc2hlcml6ZQotICAgICAgQGZvciBTdHJpbmcKLSAgICAg
IEBwcml2YXRlCi0gICAgKi8KLSAgICBTdHJpbmdQcm90b3R5cGUuZGFzaGVyaXplID0gZnVuY3Rp
b24gKCkgewotICAgICAgcmV0dXJuIF9lbWJlclJ1bnRpbWVTeXN0ZW1TdHJpbmcuZGFzaGVyaXpl
KHRoaXMpOwotICAgIH07Ci0KLSAgICAvKioKLSAgICAgIFNlZSBbRW1iZXIuU3RyaW5nLnVuZGVy
c2NvcmVdKC9hcGkvY2xhc3Nlcy9FbWJlci5TdHJpbmcuaHRtbCNtZXRob2RfdW5kZXJzY29yZSku
Ci0gICAgICAgQG1ldGhvZCB1bmRlcnNjb3JlCi0gICAgICBAZm9yIFN0cmluZwotICAgICAgQHBy
aXZhdGUKLSAgICAqLwotICAgIFN0cmluZ1Byb3RvdHlwZS51bmRlcnNjb3JlID0gZnVuY3Rpb24g
KCkgewotICAgICAgcmV0dXJuIF9lbWJlclJ1bnRpbWVTeXN0ZW1TdHJpbmcudW5kZXJzY29yZSh0
aGlzKTsKLSAgICB9OwotCi0gICAgLyoqCi0gICAgICBTZWUgW0VtYmVyLlN0cmluZy5jbGFzc2lm
eV0oL2FwaS9jbGFzc2VzL0VtYmVyLlN0cmluZy5odG1sI21ldGhvZF9jbGFzc2lmeSkuCi0gICAg
ICAgQG1ldGhvZCBjbGFzc2lmeQotICAgICAgQGZvciBTdHJpbmcKLSAgICAgIEBwcml2YXRlCi0g
ICAgKi8KLSAgICBTdHJpbmdQcm90b3R5cGUuY2xhc3NpZnkgPSBmdW5jdGlvbiAoKSB7Ci0gICAg
ICByZXR1cm4gX2VtYmVyUnVudGltZVN5c3RlbVN0cmluZy5jbGFzc2lmeSh0aGlzKTsKLSAgICB9
OwotCi0gICAgLyoqCi0gICAgICBTZWUgW0VtYmVyLlN0cmluZy5jYXBpdGFsaXplXSgvYXBpL2Ns
YXNzZXMvRW1iZXIuU3RyaW5nLmh0bWwjbWV0aG9kX2NhcGl0YWxpemUpLgotICAgICAgIEBtZXRo
b2QgY2FwaXRhbGl6ZQotICAgICAgQGZvciBTdHJpbmcKLSAgICAgIEBwcml2YXRlCi0gICAgKi8K
LSAgICBTdHJpbmdQcm90b3R5cGUuY2FwaXRhbGl6ZSA9IGZ1bmN0aW9uICgpIHsKLSAgICAgIHJl
dHVybiBfZW1iZXJSdW50aW1lU3lzdGVtU3RyaW5nLmNhcGl0YWxpemUodGhpcyk7Ci0gICAgfTsK
LSAgfQotfSk7Ci0vLyBFbWJlci5FWFRFTkRfUFJPVE9UWVBFUwotZW5pZmVkKCdlbWJlci1ydW50
aW1lL2luZGV4JywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFsJywgJ2VtYmVyLXJ1bnRpbWUvaXMt
ZXF1YWwnLCAnZW1iZXItcnVudGltZS9jb21wYXJlJywgJ2VtYmVyLXJ1bnRpbWUvY29weScsICdl
bWJlci1ydW50aW1lL2luamVjdCcsICdlbWJlci1ydW50aW1lL3N5c3RlbS9uYW1lc3BhY2UnLCAn
ZW1iZXItcnVudGltZS9zeXN0ZW0vb2JqZWN0JywgJ2VtYmVyLXJ1bnRpbWUvc3lzdGVtL2NvbnRh
aW5lcicsICdlbWJlci1ydW50aW1lL3N5c3RlbS9hcnJheV9wcm94eScsICdlbWJlci1ydW50aW1l
L3N5c3RlbS9vYmplY3RfcHJveHknLCAnZW1iZXItcnVudGltZS9zeXN0ZW0vY29yZV9vYmplY3Qn
LCAnZW1iZXItcnVudGltZS9zeXN0ZW0vbmF0aXZlX2FycmF5JywgJ2VtYmVyLXJ1bnRpbWUvc3lz
dGVtL3N0cmluZycsICdlbWJlci1ydW50aW1lL3N5c3RlbS9sYXp5X2xvYWQnLCAnZW1iZXItcnVu
dGltZS9taXhpbnMvYXJyYXknLCAnZW1iZXItcnVudGltZS9taXhpbnMvY29tcGFyYWJsZScsICdl
bWJlci1ydW50aW1lL21peGlucy9jb3B5YWJsZScsICdlbWJlci1ydW50aW1lL21peGlucy9lbnVt
ZXJhYmxlJywgJ2VtYmVyLXJ1bnRpbWUvbWl4aW5zL2ZyZWV6YWJsZScsICdlbWJlci1ydW50aW1l
L21peGlucy8tcHJveHknLCAnZW1iZXItcnVudGltZS9taXhpbnMvb2JzZXJ2YWJsZScsICdlbWJl
ci1ydW50aW1lL21peGlucy9hY3Rpb25faGFuZGxlcicsICdlbWJlci1ydW50aW1lL21peGlucy9t
dXRhYmxlX2VudW1lcmFibGUnLCAnZW1iZXItcnVudGltZS9taXhpbnMvbXV0YWJsZV9hcnJheScs
ICdlbWJlci1ydW50aW1lL21peGlucy90YXJnZXRfYWN0aW9uX3N1cHBvcnQnLCAnZW1iZXItcnVu
dGltZS9taXhpbnMvZXZlbnRlZCcsICdlbWJlci1ydW50aW1lL21peGlucy9wcm9taXNlX3Byb3h5
JywgJ2VtYmVyLW1ldGFsL2ZlYXR1cmVzJywgJ2VtYmVyLXJ1bnRpbWUvY29tcHV0ZWQvcmVkdWNl
X2NvbXB1dGVkX21hY3JvcycsICdlbWJlci1ydW50aW1lL2NvbnRyb2xsZXJzL2NvbnRyb2xsZXIn
LCAnZW1iZXItcnVudGltZS9taXhpbnMvY29udHJvbGxlcicsICdlbWJlci1ydW50aW1lL3N5c3Rl
bS9zZXJ2aWNlJywgJ2VtYmVyLXJ1bnRpbWUvZXh0L3JzdnAnLCAnZW1iZXItcnVudGltZS9leHQv
c3RyaW5nJywgJ2VtYmVyLXJ1bnRpbWUvZXh0L2Z1bmN0aW9uJywgJ2VtYmVyLXJ1bnRpbWUvdXRp
bHMnLCAnZW1iZXItcnVudGltZS9taXhpbnMvcmVnaXN0cnlfcHJveHknLCAnZW1iZXItcnVudGlt
ZS9taXhpbnMvY29udGFpbmVyX3Byb3h5JywgJ2VtYmVyLXJ1bnRpbWUvc3RyaW5nX3JlZ2lzdHJ5
J10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbCwgX2VtYmVyUnVudGltZUlzRXF1YWws
IF9lbWJlclJ1bnRpbWVDb21wYXJlLCBfZW1iZXJSdW50aW1lQ29weSwgX2VtYmVyUnVudGltZUlu
amVjdCwgX2VtYmVyUnVudGltZVN5c3RlbU5hbWVzcGFjZSwgX2VtYmVyUnVudGltZVN5c3RlbU9i
amVjdCwgX2VtYmVyUnVudGltZVN5c3RlbUNvbnRhaW5lciwgX2VtYmVyUnVudGltZVN5c3RlbUFy
cmF5X3Byb3h5LCBfZW1iZXJSdW50aW1lU3lzdGVtT2JqZWN0X3Byb3h5LCBfZW1iZXJSdW50aW1l
U3lzdGVtQ29yZV9vYmplY3QsIF9lbWJlclJ1bnRpbWVTeXN0ZW1OYXRpdmVfYXJyYXksIF9lbWJl
clJ1bnRpbWVTeXN0ZW1TdHJpbmcsIF9lbWJlclJ1bnRpbWVTeXN0ZW1MYXp5X2xvYWQsIF9lbWJl
clJ1bnRpbWVNaXhpbnNBcnJheSwgX2VtYmVyUnVudGltZU1peGluc0NvbXBhcmFibGUsIF9lbWJl
clJ1bnRpbWVNaXhpbnNDb3B5YWJsZSwgX2VtYmVyUnVudGltZU1peGluc0VudW1lcmFibGUsIF9l
bWJlclJ1bnRpbWVNaXhpbnNGcmVlemFibGUsIF9lbWJlclJ1bnRpbWVNaXhpbnNQcm94eSwgX2Vt
YmVyUnVudGltZU1peGluc09ic2VydmFibGUsIF9lbWJlclJ1bnRpbWVNaXhpbnNBY3Rpb25faGFu
ZGxlciwgX2VtYmVyUnVudGltZU1peGluc011dGFibGVfZW51bWVyYWJsZSwgX2VtYmVyUnVudGlt
ZU1peGluc011dGFibGVfYXJyYXksIF9lbWJlclJ1bnRpbWVNaXhpbnNUYXJnZXRfYWN0aW9uX3N1
cHBvcnQsIF9lbWJlclJ1bnRpbWVNaXhpbnNFdmVudGVkLCBfZW1iZXJSdW50aW1lTWl4aW5zUHJv
bWlzZV9wcm94eSwgX2VtYmVyTWV0YWxGZWF0dXJlcywgX2VtYmVyUnVudGltZUNvbXB1dGVkUmVk
dWNlX2NvbXB1dGVkX21hY3JvcywgX2VtYmVyUnVudGltZUNvbnRyb2xsZXJzQ29udHJvbGxlciwg
X2VtYmVyUnVudGltZU1peGluc0NvbnRyb2xsZXIsIF9lbWJlclJ1bnRpbWVTeXN0ZW1TZXJ2aWNl
LCBfZW1iZXJSdW50aW1lRXh0UnN2cCwgX2VtYmVyUnVudGltZUV4dFN0cmluZywgX2VtYmVyUnVu
dGltZUV4dEZ1bmN0aW9uLCBfZW1iZXJSdW50aW1lVXRpbHMsIF9lbWJlclJ1bnRpbWVNaXhpbnNS
ZWdpc3RyeV9wcm94eSwgX2VtYmVyUnVudGltZU1peGluc0NvbnRhaW5lcl9wcm94eSwgX2VtYmVy
UnVudGltZVN0cmluZ19yZWdpc3RyeSkgewotICAvKioKLSAgQG1vZHVsZSBlbWJlcgotICBAc3Vi
bW9kdWxlIGVtYmVyLXJ1bnRpbWUKLSAgKi8KLQotICAvLyBCRUdJTiBJTVBPUlRTCi0gICd1c2Ug
c3RyaWN0JzsKLQotICAvLyBFTkQgSU1QT1JUUwotCi0gIC8vIEJFR0lOIEVYUE9SVFMKLSAgX2Vt
YmVyTWV0YWwuZGVmYXVsdC5jb21wYXJlID0gX2VtYmVyUnVudGltZUNvbXBhcmUuZGVmYXVsdDsK
LSAgX2VtYmVyTWV0YWwuZGVmYXVsdC5jb3B5ID0gX2VtYmVyUnVudGltZUNvcHkuZGVmYXVsdDsK
LSAgX2VtYmVyTWV0YWwuZGVmYXVsdC5pc0VxdWFsID0gX2VtYmVyUnVudGltZUlzRXF1YWwuZGVm
YXVsdDsKLQotICBfZW1iZXJNZXRhbC5kZWZhdWx0LmluamVjdCA9IF9lbWJlclJ1bnRpbWVJbmpl
Y3QuZGVmYXVsdDsKLQotICBfZW1iZXJNZXRhbC5kZWZhdWx0LkFycmF5ID0gX2VtYmVyUnVudGlt
ZU1peGluc0FycmF5LmRlZmF1bHQ7Ci0KLSAgX2VtYmVyTWV0YWwuZGVmYXVsdC5Db21wYXJhYmxl
ID0gX2VtYmVyUnVudGltZU1peGluc0NvbXBhcmFibGUuZGVmYXVsdDsKLSAgX2VtYmVyTWV0YWwu
ZGVmYXVsdC5Db3B5YWJsZSA9IF9lbWJlclJ1bnRpbWVNaXhpbnNDb3B5YWJsZS5kZWZhdWx0Owot
Ci0gIF9lbWJlck1ldGFsLmRlZmF1bHQuRnJlZXphYmxlID0gX2VtYmVyUnVudGltZU1peGluc0Zy
ZWV6YWJsZS5GcmVlemFibGU7Ci0gIF9lbWJlck1ldGFsLmRlZmF1bHQuRlJPWkVOX0VSUk9SID0g
X2VtYmVyUnVudGltZU1peGluc0ZyZWV6YWJsZS5GUk9aRU5fRVJST1I7Ci0KLSAgX2VtYmVyTWV0
YWwuZGVmYXVsdC5NdXRhYmxlRW51bWVyYWJsZSA9IF9lbWJlclJ1bnRpbWVNaXhpbnNNdXRhYmxl
X2VudW1lcmFibGUuZGVmYXVsdDsKLSAgX2VtYmVyTWV0YWwuZGVmYXVsdC5NdXRhYmxlQXJyYXkg
PSBfZW1iZXJSdW50aW1lTWl4aW5zTXV0YWJsZV9hcnJheS5kZWZhdWx0OwotCi0gIF9lbWJlck1l
dGFsLmRlZmF1bHQuVGFyZ2V0QWN0aW9uU3VwcG9ydCA9IF9lbWJlclJ1bnRpbWVNaXhpbnNUYXJn
ZXRfYWN0aW9uX3N1cHBvcnQuZGVmYXVsdDsKLSAgX2VtYmVyTWV0YWwuZGVmYXVsdC5FdmVudGVk
ID0gX2VtYmVyUnVudGltZU1peGluc0V2ZW50ZWQuZGVmYXVsdDsKLQotICBfZW1iZXJNZXRhbC5k
ZWZhdWx0LlByb21pc2VQcm94eU1peGluID0gX2VtYmVyUnVudGltZU1peGluc1Byb21pc2VfcHJv
eHkuZGVmYXVsdDsKLQotICBfZW1iZXJNZXRhbC5kZWZhdWx0Lk9ic2VydmFibGUgPSBfZW1iZXJS
dW50aW1lTWl4aW5zT2JzZXJ2YWJsZS5kZWZhdWx0OwotCi0gIF9lbWJlck1ldGFsLmRlZmF1bHQu
dHlwZU9mID0gX2VtYmVyUnVudGltZVV0aWxzLnR5cGVPZjsKLSAgX2VtYmVyTWV0YWwuZGVmYXVs
dC5pc0FycmF5ID0gX2VtYmVyUnVudGltZVV0aWxzLmlzQXJyYXk7Ci0KLSAgLy8gRVM2VE9ETzog
dGhpcyBzZWVtcyBhIGxlc3MgdGhhbiBpZGVhbCB3YXkvcGxhY2UgdG8gYWRkIHByb3BlcnRpZXMg
dG8gRW1iZXIuY29tcHV0ZWQKLSAgdmFyIEVtQ29tcHV0ZWQgPSBfZW1iZXJNZXRhbC5kZWZhdWx0
LmNvbXB1dGVkOwotCi0gIEVtQ29tcHV0ZWQuc3VtID0gX2VtYmVyUnVudGltZUNvbXB1dGVkUmVk
dWNlX2NvbXB1dGVkX21hY3Jvcy5zdW07Ci0gIEVtQ29tcHV0ZWQubWluID0gX2VtYmVyUnVudGlt
ZUNvbXB1dGVkUmVkdWNlX2NvbXB1dGVkX21hY3Jvcy5taW47Ci0gIEVtQ29tcHV0ZWQubWF4ID0g
X2VtYmVyUnVudGltZUNvbXB1dGVkUmVkdWNlX2NvbXB1dGVkX21hY3Jvcy5tYXg7Ci0gIEVtQ29t
cHV0ZWQubWFwID0gX2VtYmVyUnVudGltZUNvbXB1dGVkUmVkdWNlX2NvbXB1dGVkX21hY3Jvcy5t
YXA7Ci0gIEVtQ29tcHV0ZWQuc29ydCA9IF9lbWJlclJ1bnRpbWVDb21wdXRlZFJlZHVjZV9jb21w
dXRlZF9tYWNyb3Muc29ydDsKLSAgRW1Db21wdXRlZC5zZXREaWZmID0gX2VtYmVyUnVudGltZUNv
bXB1dGVkUmVkdWNlX2NvbXB1dGVkX21hY3Jvcy5zZXREaWZmOwotICBFbUNvbXB1dGVkLm1hcEJ5
ID0gX2VtYmVyUnVudGltZUNvbXB1dGVkUmVkdWNlX2NvbXB1dGVkX21hY3Jvcy5tYXBCeTsKLSAg
RW1Db21wdXRlZC5maWx0ZXIgPSBfZW1iZXJSdW50aW1lQ29tcHV0ZWRSZWR1Y2VfY29tcHV0ZWRf
bWFjcm9zLmZpbHRlcjsKLSAgRW1Db21wdXRlZC5maWx0ZXJCeSA9IF9lbWJlclJ1bnRpbWVDb21w
dXRlZFJlZHVjZV9jb21wdXRlZF9tYWNyb3MuZmlsdGVyQnk7Ci0gIEVtQ29tcHV0ZWQudW5pcSA9
IF9lbWJlclJ1bnRpbWVDb21wdXRlZFJlZHVjZV9jb21wdXRlZF9tYWNyb3MudW5pcTsKLQotICBF
bUNvbXB1dGVkLnVuaW9uID0gX2VtYmVyUnVudGltZUNvbXB1dGVkUmVkdWNlX2NvbXB1dGVkX21h
Y3Jvcy51bmlvbjsKLSAgRW1Db21wdXRlZC5pbnRlcnNlY3QgPSBfZW1iZXJSdW50aW1lQ29tcHV0
ZWRSZWR1Y2VfY29tcHV0ZWRfbWFjcm9zLmludGVyc2VjdDsKLSAgRW1Db21wdXRlZC5jb2xsZWN0
ID0gX2VtYmVyUnVudGltZUNvbXB1dGVkUmVkdWNlX2NvbXB1dGVkX21hY3Jvcy5jb2xsZWN0Owot
Ci0gIF9lbWJlck1ldGFsLmRlZmF1bHQuU3RyaW5nID0gX2VtYmVyUnVudGltZVN5c3RlbVN0cmlu
Zy5kZWZhdWx0OwotICBfZW1iZXJNZXRhbC5kZWZhdWx0Lk9iamVjdCA9IF9lbWJlclJ1bnRpbWVT
eXN0ZW1PYmplY3QuZGVmYXVsdDsKLSAgX2VtYmVyTWV0YWwuZGVmYXVsdC5Db250YWluZXIgPSBf
ZW1iZXJSdW50aW1lU3lzdGVtQ29udGFpbmVyLkNvbnRhaW5lcjsKLSAgX2VtYmVyTWV0YWwuZGVm
YXVsdC5SZWdpc3RyeSA9IF9lbWJlclJ1bnRpbWVTeXN0ZW1Db250YWluZXIuUmVnaXN0cnk7Ci0K
LSAgX2VtYmVyTWV0YWwuZGVmYXVsdC5nZXRPd25lciA9IF9lbWJlclJ1bnRpbWVTeXN0ZW1Db250
YWluZXIuZ2V0T3duZXI7Ci0gIF9lbWJlck1ldGFsLmRlZmF1bHQuc2V0T3duZXIgPSBfZW1iZXJS
dW50aW1lU3lzdGVtQ29udGFpbmVyLnNldE93bmVyOwotCi0gIF9lbWJlck1ldGFsLmRlZmF1bHQu
X1JlZ2lzdHJ5UHJveHlNaXhpbiA9IF9lbWJlclJ1bnRpbWVNaXhpbnNSZWdpc3RyeV9wcm94eS5k
ZWZhdWx0OwotICBfZW1iZXJNZXRhbC5kZWZhdWx0Ll9Db250YWluZXJQcm94eU1peGluID0gX2Vt
YmVyUnVudGltZU1peGluc0NvbnRhaW5lcl9wcm94eS5kZWZhdWx0OwotCi0gIF9lbWJlck1ldGFs
LmRlZmF1bHQuTmFtZXNwYWNlID0gX2VtYmVyUnVudGltZVN5c3RlbU5hbWVzcGFjZS5kZWZhdWx0
OwotICBfZW1iZXJNZXRhbC5kZWZhdWx0LkVudW1lcmFibGUgPSBfZW1iZXJSdW50aW1lTWl4aW5z
RW51bWVyYWJsZS5kZWZhdWx0OwotICBfZW1iZXJNZXRhbC5kZWZhdWx0LkFycmF5UHJveHkgPSBf
ZW1iZXJSdW50aW1lU3lzdGVtQXJyYXlfcHJveHkuZGVmYXVsdDsKLSAgX2VtYmVyTWV0YWwuZGVm
YXVsdC5PYmplY3RQcm94eSA9IF9lbWJlclJ1bnRpbWVTeXN0ZW1PYmplY3RfcHJveHkuZGVmYXVs
dDsKLSAgX2VtYmVyTWV0YWwuZGVmYXVsdC5BY3Rpb25IYW5kbGVyID0gX2VtYmVyUnVudGltZU1p
eGluc0FjdGlvbl9oYW5kbGVyLmRlZmF1bHQ7Ci0gIF9lbWJlck1ldGFsLmRlZmF1bHQuQ29yZU9i
amVjdCA9IF9lbWJlclJ1bnRpbWVTeXN0ZW1Db3JlX29iamVjdC5kZWZhdWx0OwotICBfZW1iZXJN
ZXRhbC5kZWZhdWx0Lk5hdGl2ZUFycmF5ID0gX2VtYmVyUnVudGltZVN5c3RlbU5hdGl2ZV9hcnJh
eS5kZWZhdWx0OwotICAvLyBFUzZUT0RPOiBDdXJyZW50bHkgd2UgbXVzdCByZWx5IG9uIHRoZSBn
bG9iYWwgZnJvbSBlbWJlci1tZXRhbC9jb3JlIHRvIGF2b2lkIGNpcmN1bGFyIGRlcHMKLSAgLy8g
RW1iZXIuQSA9IEE7Ci0gIF9lbWJlck1ldGFsLmRlZmF1bHQub25Mb2FkID0gX2VtYmVyUnVudGlt
ZVN5c3RlbUxhenlfbG9hZC5vbkxvYWQ7Ci0gIF9lbWJlck1ldGFsLmRlZmF1bHQucnVuTG9hZEhv
b2tzID0gX2VtYmVyUnVudGltZVN5c3RlbUxhenlfbG9hZC5ydW5Mb2FkSG9va3M7Ci0KLSAgX2Vt
YmVyTWV0YWwuZGVmYXVsdC5Db250cm9sbGVyID0gX2VtYmVyUnVudGltZUNvbnRyb2xsZXJzQ29u
dHJvbGxlci5kZWZhdWx0OwotICBfZW1iZXJNZXRhbC5kZWZhdWx0LkNvbnRyb2xsZXJNaXhpbiA9
IF9lbWJlclJ1bnRpbWVNaXhpbnNDb250cm9sbGVyLmRlZmF1bHQ7Ci0KLSAgX2VtYmVyTWV0YWwu
ZGVmYXVsdC5TZXJ2aWNlID0gX2VtYmVyUnVudGltZVN5c3RlbVNlcnZpY2UuZGVmYXVsdDsKLQot
ICBfZW1iZXJNZXRhbC5kZWZhdWx0Ll9Qcm94eU1peGluID0gX2VtYmVyUnVudGltZU1peGluc1By
b3h5LmRlZmF1bHQ7Ci0KLSAgX2VtYmVyTWV0YWwuZGVmYXVsdC5SU1ZQID0gX2VtYmVyUnVudGlt
ZUV4dFJzdnAuZGVmYXVsdDsKLSAgLy8gRU5EIEVYUE9SVFMKLQotICAvKioKLSAgICBEZWZpbmVz
IHRoZSBoYXNoIG9mIGxvY2FsaXplZCBzdHJpbmdzIGZvciB0aGUgY3VycmVudCBsYW5ndWFnZS4g
VXNlZCBieQotICAgIHRoZSBgRW1iZXIuU3RyaW5nLmxvYygpYCBoZWxwZXIuIFRvIGxvY2FsaXpl
LCBhZGQgc3RyaW5nIHZhbHVlcyB0byB0aGlzCi0gICAgaGFzaC4KLSAgCi0gICAgQHByb3BlcnR5
IFNUUklOR1MKLSAgICBAZm9yIEVtYmVyCi0gICAgQHR5cGUgT2JqZWN0Ci0gICAgQHByaXZhdGUK
LSAgKi8KLSAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9lbWJlck1ldGFsLmRlZmF1bHQsICdTVFJJ
TkdTJywgewotICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsCi0gICAgZ2V0OiBfZW1iZXJSdW50aW1l
U3RyaW5nX3JlZ2lzdHJ5LmdldFN0cmluZ3MsCi0gICAgc2V0OiBfZW1iZXJSdW50aW1lU3RyaW5n
X3JlZ2lzdHJ5LnNldFN0cmluZ3MKLSAgfSk7Ci0KLSAgZXhwb3J0cy5kZWZhdWx0ID0gX2VtYmVy
TWV0YWwuZGVmYXVsdDsKLX0pOwotLy8ganVzdCBmb3Igc2lkZSBlZmZlY3Qgb2YgZXh0ZW5kaW5n
IEVtYmVyLlJTVlAKLS8vIGp1c3QgZm9yIHNpZGUgZWZmZWN0IG9mIGV4dGVuZGluZyBTdHJpbmcu
cHJvdG90eXBlCi0vLyBqdXN0IGZvciBzaWRlIGVmZmVjdCBvZiBleHRlbmRpbmcgRnVuY3Rpb24u
cHJvdG90eXBlCi1lbmlmZWQoJ2VtYmVyLXJ1bnRpbWUvaW5qZWN0JywgWydleHBvcnRzJywgJ2Vt
YmVyLW1ldGFsL2RlYnVnJywgJ2VtYmVyLW1ldGFsL2luamVjdGVkX3Byb3BlcnR5J10sIGZ1bmN0
aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbERlYnVnLCBfZW1iZXJNZXRhbEluamVjdGVkX3Byb3Bl
cnR5KSB7Ci0gICd1c2Ugc3RyaWN0JzsKLQotICBleHBvcnRzLmRlZmF1bHQgPSBpbmplY3Q7Ci0g
IGV4cG9ydHMuY3JlYXRlSW5qZWN0aW9uSGVscGVyID0gY3JlYXRlSW5qZWN0aW9uSGVscGVyOwot
ICBleHBvcnRzLnZhbGlkYXRlUHJvcGVydHlJbmplY3Rpb25zID0gdmFsaWRhdGVQcm9wZXJ0eUlu
amVjdGlvbnM7Ci0KLSAgLyoqCi0gICAgTmFtZXNwYWNlIGZvciBpbmplY3Rpb24gaGVscGVyIG1l
dGhvZHMuCi0gIAotICAgIEBjbGFzcyBpbmplY3QKLSAgICBAbmFtZXNwYWNlIEVtYmVyCi0gICAg
QHN0YXRpYwotICAgIEBwdWJsaWMKLSAgKi8KLQotICBmdW5jdGlvbiBpbmplY3QoKSB7Ci0gICAg
X2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ0luamVjdGVkIHByb3BlcnRpZXMgbXVzdCBiZSBjcmVh
dGVkIHRocm91Z2ggaGVscGVycywgc2VlIFwnJyArIE9iamVjdC5rZXlzKGluamVjdCkuam9pbign
IicsICciJykgKyAnXCcnKTsKLSAgfQotCi0gIC8vIERpY3Rpb25hcnkgb2YgaW5qZWN0aW9uIHZh
bGlkYXRpb25zIGJ5IHR5cGUsIGFkZGVkIHRvIGJ5IGBjcmVhdGVJbmplY3Rpb25IZWxwZXJgCi0g
IHZhciB0eXBlVmFsaWRhdG9ycyA9IHt9OwotCi0gIC8qKgotICAgIFRoaXMgbWV0aG9kIGFsbG93
cyBvdGhlciBFbWJlciBtb2R1bGVzIHRvIHJlZ2lzdGVyIGluamVjdGlvbiBoZWxwZXJzIGZvciBh
Ci0gICAgZ2l2ZW4gY29udGFpbmVyIHR5cGUuIEhlbHBlcnMgYXJlIGV4cG9ydGVkIHRvIHRoZSBg
aW5qZWN0YCBuYW1lc3BhY2UgYXMgdGhlCi0gICAgY29udGFpbmVyIHR5cGUgaXRzZWxmLgotICAK
LSAgICBAcHJpdmF0ZQotICAgIEBtZXRob2QgY3JlYXRlSW5qZWN0aW9uSGVscGVyCi0gICAgQHNp
bmNlIDEuMTAuMAotICAgIEBmb3IgRW1iZXIKLSAgICBAcGFyYW0ge1N0cmluZ30gdHlwZSBUaGUg
Y29udGFpbmVyIHR5cGUgdGhlIGhlbHBlciB3aWxsIGluamVjdAotICAgIEBwYXJhbSB7RnVuY3Rp
b259IHZhbGlkYXRvciBBIHZhbGlkYXRpb24gY2FsbGJhY2sgdGhhdCBpcyBleGVjdXRlZCBhdCBt
aXhpbi10aW1lCi0gICovCi0KLSAgZnVuY3Rpb24gY3JlYXRlSW5qZWN0aW9uSGVscGVyKHR5cGUs
IHZhbGlkYXRvcikgewotICAgIHR5cGVWYWxpZGF0b3JzW3R5cGVdID0gdmFsaWRhdG9yOwotCi0g
ICAgaW5qZWN0W3R5cGVdID0gZnVuY3Rpb24gKG5hbWUpIHsKLSAgICAgIHJldHVybiBuZXcgX2Vt
YmVyTWV0YWxJbmplY3RlZF9wcm9wZXJ0eS5kZWZhdWx0KHR5cGUsIG5hbWUpOwotICAgIH07Ci0g
IH0KLQotICAvKioKLSAgICBWYWxpZGF0aW9uIGZ1bmN0aW9uIHRoYXQgcnVucyBwZXItdHlwZSB2
YWxpZGF0aW9uIGZ1bmN0aW9ucyBvbmNlIGZvciBlYWNoCi0gICAgaW5qZWN0ZWQgdHlwZSBlbmNv
dW50ZXJlZC4KLSAgCi0gICAgQHByaXZhdGUKLSAgICBAbWV0aG9kIHZhbGlkYXRlUHJvcGVydHlJ
bmplY3Rpb25zCi0gICAgQHNpbmNlIDEuMTAuMAotICAgIEBmb3IgRW1iZXIKLSAgICBAcGFyYW0g
e09iamVjdH0gZmFjdG9yeSBUaGUgZmFjdG9yeSBvYmplY3QKLSAgKi8KLQotICBmdW5jdGlvbiB2
YWxpZGF0ZVByb3BlcnR5SW5qZWN0aW9ucyhmYWN0b3J5KSB7Ci0gICAgdmFyIHByb3RvID0gZmFj
dG9yeS5wcm90bygpOwotICAgIHZhciB0eXBlcyA9IFtdOwotICAgIHZhciBrZXksIGRlc2MsIHZh
bGlkYXRvciwgaSwgbDsKLQotICAgIGZvciAoa2V5IGluIHByb3RvKSB7Ci0gICAgICBkZXNjID0g
cHJvdG9ba2V5XTsKLSAgICAgIGlmIChkZXNjIGluc3RhbmNlb2YgX2VtYmVyTWV0YWxJbmplY3Rl
ZF9wcm9wZXJ0eS5kZWZhdWx0ICYmIHR5cGVzLmluZGV4T2YoZGVzYy50eXBlKSA9PT0gLTEpIHsK
LSAgICAgICAgdHlwZXMucHVzaChkZXNjLnR5cGUpOwotICAgICAgfQotICAgIH0KLQotICAgIGlm
ICh0eXBlcy5sZW5ndGgpIHsKLSAgICAgIGZvciAoaSA9IDAsIGwgPSB0eXBlcy5sZW5ndGg7IGkg
PCBsOyBpKyspIHsKLSAgICAgICAgdmFsaWRhdG9yID0gdHlwZVZhbGlkYXRvcnNbdHlwZXNbaV1d
OwotCi0gICAgICAgIGlmICh0eXBlb2YgdmFsaWRhdG9yID09PSAnZnVuY3Rpb24nKSB7Ci0gICAg
ICAgICAgdmFsaWRhdG9yKGZhY3RvcnkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0g
ICAgcmV0dXJuIHRydWU7Ci0gIH0KLX0pOwotZW5pZmVkKCdlbWJlci1ydW50aW1lL2lzLWVxdWFs
JywgWydleHBvcnRzJ10sIGZ1bmN0aW9uIChleHBvcnRzKSB7Ci0gIC8qKgotICAgIENvbXBhcmVz
IHR3byBvYmplY3RzLCByZXR1cm5pbmcgdHJ1ZSBpZiB0aGV5IGFyZSBlcXVhbC4KLSAgCi0gICAg
YGBgamF2YXNjcmlwdAotICAgIEVtYmVyLmlzRXF1YWwoJ2hlbGxvJywgJ2hlbGxvJyk7ICAgICAg
ICAgICAgICAgICAgIC8vIHRydWUKLSAgICBFbWJlci5pc0VxdWFsKDEsIDIpOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBmYWxzZQotICAgIGBgYAotICAKLSAgICBgaXNFcXVhbGAg
aXMgYSBtb3JlIHNwZWNpZmljIGNvbXBhcmlzb24gdGhhbiBhIHRyaXBsZSBlcXVhbCBjb21wYXJp
c29uLgotICAgIEl0IHdpbGwgY2FsbCB0aGUgYGlzRXF1YWxgIGluc3RhbmNlIG1ldGhvZCBvbiB0
aGUgb2JqZWN0cyBiZWluZwotICAgIGNvbXBhcmVkLCBhbGxvd2luZyBmaW5lciBjb250cm9sIG92
ZXIgd2hlbiBvYmplY3RzIHNob3VsZCBiZSBjb25zaWRlcmVkCi0gICAgZXF1YWwgdG8gZWFjaCBv
dGhlci4KLSAgCi0gICAgYGBgamF2YXNjcmlwdAotICAgIGxldCBQZXJzb24gPSBFbWJlci5PYmpl
Y3QuZXh0ZW5kKHsKLSAgICAgIGlzRXF1YWwob3RoZXIpIHsgcmV0dXJuIHRoaXMuc3NuID09IG90
aGVyLnNzbjsgfQotICAgIH0pOwotICAKLSAgICBsZXQgcGVyc29uQSA9IFBlcnNvbi5jcmVhdGUo
e25hbWU6ICdNdWhhbW1hZCBBbGknLCBzc246ICcxMjMtNDUtNjc4OSd9KTsKLSAgICBsZXQgcGVy
c29uQiA9IFBlcnNvbi5jcmVhdGUoe25hbWU6ICdDYXNzaXVzIENsYXknLCBzc246ICcxMjMtNDUt
Njc4OSd9KTsKLSAgCi0gICAgRW1iZXIuaXNFcXVhbChwZXJzb25BLCBwZXJzb25CKTsgLy8gdHJ1
ZQotICAgIGBgYAotICAKLSAgICBEdWUgdG8gdGhlIGV4cGVuc2Ugb2YgYXJyYXkgY29tcGFyaXNv
bnMsIGNvbGxlY3Rpb25zIHdpbGwgbmV2ZXIgYmUgZXF1YWwgdG8KLSAgICBlYWNoIG90aGVyIGV2
ZW4gaWYgZWFjaCBvZiB0aGVpciBpdGVtcyBhcmUgZXF1YWwgdG8gZWFjaCBvdGhlci4KLSAgCi0g
ICAgYGBgamF2YXNjcmlwdAotICAgIEVtYmVyLmlzRXF1YWwoWzQsIDJdLCBbNCwgMl0pOyAgICAg
ICAgICAgICAgICAgICAgIC8vIGZhbHNlCi0gICAgYGBgCi0gIAotICAgIEBtZXRob2QgaXNFcXVh
bAotICAgIEBmb3IgRW1iZXIKLSAgICBAcGFyYW0ge09iamVjdH0gYSBmaXJzdCBvYmplY3QgdG8g
Y29tcGFyZQotICAgIEBwYXJhbSB7T2JqZWN0fSBiIHNlY29uZCBvYmplY3QgdG8gY29tcGFyZQot
ICAgIEByZXR1cm4ge0Jvb2xlYW59Ci0gICAgQHB1YmxpYwotICAqLwotICAndXNlIHN0cmljdCc7
Ci0KLSAgZXhwb3J0cy5kZWZhdWx0ID0gaXNFcXVhbDsKLQotICBmdW5jdGlvbiBpc0VxdWFsKGEs
IGIpIHsKLSAgICBpZiAoYSAmJiB0eXBlb2YgYS5pc0VxdWFsID09PSAnZnVuY3Rpb24nKSB7Ci0g
ICAgICByZXR1cm4gYS5pc0VxdWFsKGIpOwotICAgIH0KLQotICAgIGlmIChhIGluc3RhbmNlb2Yg
RGF0ZSAmJiBiIGluc3RhbmNlb2YgRGF0ZSkgewotICAgICAgcmV0dXJuIGEuZ2V0VGltZSgpID09
PSBiLmdldFRpbWUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gYSA9PT0gYjsKLSAgfQotfSk7Ci1l
bmlmZWQoJ2VtYmVyLXJ1bnRpbWUvbWl4aW5zLy1wcm94eScsIFsnZXhwb3J0cycsICdlbWJlci1t
ZXRhbC9kZWJ1ZycsICdlbWJlci1tZXRhbC9wcm9wZXJ0eV9nZXQnLCAnZW1iZXItbWV0YWwvcHJv
cGVydHlfc2V0JywgJ2VtYmVyLW1ldGFsL21ldGEnLCAnZW1iZXItbWV0YWwvb2JzZXJ2ZXInLCAn
ZW1iZXItbWV0YWwvcHJvcGVydHlfZXZlbnRzJywgJ2VtYmVyLW1ldGFsL2NvbXB1dGVkJywgJ2Vt
YmVyLW1ldGFsL3Byb3BlcnRpZXMnLCAnZW1iZXItbWV0YWwvbWl4aW4nLCAnZW1iZXItbWV0YWwv
c3ltYm9sJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbERlYnVnLCBfZW1iZXJNZXRh
bFByb3BlcnR5X2dldCwgX2VtYmVyTWV0YWxQcm9wZXJ0eV9zZXQsIF9lbWJlck1ldGFsTWV0YSwg
X2VtYmVyTWV0YWxPYnNlcnZlciwgX2VtYmVyTWV0YWxQcm9wZXJ0eV9ldmVudHMsIF9lbWJlck1l
dGFsQ29tcHV0ZWQsIF9lbWJlck1ldGFsUHJvcGVydGllcywgX2VtYmVyTWV0YWxNaXhpbiwgX2Vt
YmVyTWV0YWxTeW1ib2wpIHsKLSAgLyoqCi0gIEBtb2R1bGUgZW1iZXIKLSAgQHN1Ym1vZHVsZSBl
bWJlci1ydW50aW1lCi0gICovCi0KLSAgJ3VzZSBzdHJpY3QnOwotCi0gIHZhciBfTWl4aW4kY3Jl
YXRlOwotCi0gIGV4cG9ydHMuaXNQcm94eSA9IGlzUHJveHk7Ci0KLSAgdmFyIElTX1BST1hZID0g
X2VtYmVyTWV0YWxTeW1ib2wuZGVmYXVsdCgnSVNfUFJPWFknKTsKLQotICBmdW5jdGlvbiBpc1By
b3h5KHZhbHVlKSB7Ci0gICAgcmV0dXJuIHZhbHVlICYmIHZhbHVlW0lTX1BST1hZXTsKLSAgfQot
Ci0gIGZ1bmN0aW9uIGNvbnRlbnRQcm9wZXJ0eVdpbGxDaGFuZ2UoY29udGVudCwgY29udGVudEtl
eSkgewotICAgIHZhciBrZXkgPSBjb250ZW50S2V5LnNsaWNlKDgpOyAvLyByZW1vdmUgImNvbnRl
bnQuIgotICAgIGlmIChrZXkgaW4gdGhpcykgewotICAgICAgcmV0dXJuOwotICAgIH0gLy8gaWYg
c2hhZG93ZWQgaW4gcHJveHkKLSAgICBfZW1iZXJNZXRhbFByb3BlcnR5X2V2ZW50cy5wcm9wZXJ0
eVdpbGxDaGFuZ2UodGhpcywga2V5KTsKLSAgfQotCi0gIGZ1bmN0aW9uIGNvbnRlbnRQcm9wZXJ0
eURpZENoYW5nZShjb250ZW50LCBjb250ZW50S2V5KSB7Ci0gICAgdmFyIGtleSA9IGNvbnRlbnRL
ZXkuc2xpY2UoOCk7IC8vIHJlbW92ZSAiY29udGVudC4iCi0gICAgaWYgKGtleSBpbiB0aGlzKSB7
Ci0gICAgICByZXR1cm47Ci0gICAgfSAvLyBpZiBzaGFkb3dlZCBpbiBwcm94eQotICAgIF9lbWJl
ck1ldGFsUHJvcGVydHlfZXZlbnRzLnByb3BlcnR5RGlkQ2hhbmdlKHRoaXMsIGtleSk7Ci0gIH0K
LQotICAvKioKLSAgICBgRW1iZXIuUHJveHlNaXhpbmAgZm9yd2FyZHMgYWxsIHByb3BlcnRpZXMg
bm90IGRlZmluZWQgYnkgdGhlIHByb3h5IGl0c2VsZgotICAgIHRvIGEgcHJveGllZCBgY29udGVu
dGAgb2JqZWN0LiAgU2VlIEVtYmVyLk9iamVjdFByb3h5IGZvciBtb3JlIGRldGFpbHMuCi0gIAot
ICAgIEBjbGFzcyBQcm94eU1peGluCi0gICAgQG5hbWVzcGFjZSBFbWJlcgotICAgIEBwcml2YXRl
Ci0gICovCi0gIGV4cG9ydHMuZGVmYXVsdCA9IF9lbWJlck1ldGFsTWl4aW4uTWl4aW4uY3JlYXRl
KChfTWl4aW4kY3JlYXRlID0ge30sIF9NaXhpbiRjcmVhdGVbSVNfUFJPWFldID0gdHJ1ZSwgX01p
eGluJGNyZWF0ZS5jb250ZW50ID0gbnVsbCwgX01peGluJGNyZWF0ZS5fY29udGVudERpZENoYW5n
ZSA9IF9lbWJlck1ldGFsTWl4aW4ub2JzZXJ2ZXIoJ2NvbnRlbnQnLCBmdW5jdGlvbiAoKSB7Ci0g
ICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ0NhblwndCBzZXQgUHJveHlcJ3MgY29udGVudCB0
byBpdHNlbGYnLCBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywgJ2NvbnRlbnQnKSAh
PT0gdGhpcyk7Ci0gIH0pLCBfTWl4aW4kY3JlYXRlLmlzVHJ1dGh5ID0gX2VtYmVyTWV0YWxDb21w
dXRlZC5jb21wdXRlZC5ib29sKCdjb250ZW50JyksIF9NaXhpbiRjcmVhdGUuX2RlYnVnQ29udGFp
bmVyS2V5ID0gbnVsbCwgX01peGluJGNyZWF0ZS53aWxsV2F0Y2hQcm9wZXJ0eSA9IGZ1bmN0aW9u
IChrZXkpIHsKLSAgICB2YXIgY29udGVudEtleSA9ICdjb250ZW50LicgKyBrZXk7Ci0gICAgX2Vt
YmVyTWV0YWxPYnNlcnZlci5fYWRkQmVmb3JlT2JzZXJ2ZXIodGhpcywgY29udGVudEtleSwgbnVs
bCwgY29udGVudFByb3BlcnR5V2lsbENoYW5nZSk7Ci0gICAgX2VtYmVyTWV0YWxPYnNlcnZlci5h
ZGRPYnNlcnZlcih0aGlzLCBjb250ZW50S2V5LCBudWxsLCBjb250ZW50UHJvcGVydHlEaWRDaGFu
Z2UpOwotICB9LCBfTWl4aW4kY3JlYXRlLmRpZFVud2F0Y2hQcm9wZXJ0eSA9IGZ1bmN0aW9uIChr
ZXkpIHsKLSAgICB2YXIgY29udGVudEtleSA9ICdjb250ZW50LicgKyBrZXk7Ci0gICAgX2VtYmVy
TWV0YWxPYnNlcnZlci5fcmVtb3ZlQmVmb3JlT2JzZXJ2ZXIodGhpcywgY29udGVudEtleSwgbnVs
bCwgY29udGVudFByb3BlcnR5V2lsbENoYW5nZSk7Ci0gICAgX2VtYmVyTWV0YWxPYnNlcnZlci5y
ZW1vdmVPYnNlcnZlcih0aGlzLCBjb250ZW50S2V5LCBudWxsLCBjb250ZW50UHJvcGVydHlEaWRD
aGFuZ2UpOwotICB9LCBfTWl4aW4kY3JlYXRlLnVua25vd25Qcm9wZXJ0eSA9IGZ1bmN0aW9uIChr
ZXkpIHsKLSAgICB2YXIgY29udGVudCA9IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0aGlz
LCAnY29udGVudCcpOwotICAgIGlmIChjb250ZW50KSB7Ci0gICAgICBfZW1iZXJNZXRhbERlYnVn
LmRlcHJlY2F0ZSgnWW91IGF0dGVtcHRlZCB0byBhY2Nlc3MgYCcgKyBrZXkgKyAnYCBmcm9tIGAn
ICsgdGhpcyArICdgLCBidXQgb2JqZWN0IHByb3h5aW5nIGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1
c2UgYG1vZGVsLicgKyBrZXkgKyAnYCBpbnN0ZWFkLicsICF0aGlzLmlzQ29udHJvbGxlciwgeyBp
ZDogJ2VtYmVyLXJ1bnRpbWUuY29udHJvbGxlci1wcm94eScsIHVudGlsOiAnMy4wLjAnIH0pOwot
ICAgICAgcmV0dXJuIF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldChjb250ZW50LCBrZXkpOwot
ICAgIH0KLSAgfSwgX01peGluJGNyZWF0ZS5zZXRVbmtub3duUHJvcGVydHkgPSBmdW5jdGlvbiAo
a2V5LCB2YWx1ZSkgewotICAgIHZhciBtID0gX2VtYmVyTWV0YWxNZXRhLm1ldGEodGhpcyk7Ci0g
ICAgaWYgKG0ucHJvdG8gPT09IHRoaXMpIHsKLSAgICAgIC8vIGlmIG1hcmtlZCBhcyBwcm90b3R5
cGUgdGhlbiBqdXN0IGRlZmluZVByb3BlcnR5Ci0gICAgICAvLyByYXRoZXIgdGhhbiBkZWxlZ2F0
ZQotICAgICAgX2VtYmVyTWV0YWxQcm9wZXJ0aWVzLmRlZmluZVByb3BlcnR5KHRoaXMsIGtleSwg
bnVsbCwgdmFsdWUpOwotICAgICAgcmV0dXJuIHZhbHVlOwotICAgIH0KLQotICAgIHZhciBjb250
ZW50ID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsICdjb250ZW50Jyk7Ci0gICAg
X2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ0Nhbm5vdCBkZWxlZ2F0ZSBzZXQoXCcnICsga2V5ICsg
J1wnLCAnICsgdmFsdWUgKyAnKSB0byB0aGUgXCdjb250ZW50XCcgcHJvcGVydHkgb2Ygb2JqZWN0
IHByb3h5ICcgKyB0aGlzICsgJzogaXRzIFwnY29udGVudFwnIGlzIHVuZGVmaW5lZC4nLCBjb250
ZW50KTsKLQotICAgIF9lbWJlck1ldGFsRGVidWcuZGVwcmVjYXRlKCdZb3UgYXR0ZW1wdGVkIHRv
IHNldCBgJyArIGtleSArICdgIGZyb20gYCcgKyB0aGlzICsgJ2AsIGJ1dCBvYmplY3QgcHJveHlp
bmcgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSBgbW9kZWwuJyArIGtleSArICdgIGluc3RlYWQu
JywgIXRoaXMuaXNDb250cm9sbGVyLCB7IGlkOiAnZW1iZXItcnVudGltZS5jb250cm9sbGVyLXBy
b3h5JywgdW50aWw6ICczLjAuMCcgfSk7Ci0gICAgcmV0dXJuIF9lbWJlck1ldGFsUHJvcGVydHlf
c2V0LnNldChjb250ZW50LCBrZXksIHZhbHVlKTsKLSAgfSwgX01peGluJGNyZWF0ZSkpOwotfSk7
Ci0KLS8qKgotICBUaGUgb2JqZWN0IHdob3NlIHByb3BlcnRpZXMgd2lsbCBiZSBmb3J3YXJkZWQu
Ci0gICBAcHJvcGVydHkgY29udGVudAotICBAdHlwZSBFbWJlci5PYmplY3QKLSAgQGRlZmF1bHQg
bnVsbAotICBAcHJpdmF0ZQotKi8KLWVuaWZlZCgnZW1iZXItcnVudGltZS9taXhpbnMvYWN0aW9u
X2hhbmRsZXInLCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwvZGVidWcnLCAnZW1iZXItbWV0YWwv
bWl4aW4nLCAnZW1iZXItbWV0YWwvcHJvcGVydHlfZ2V0J10sIGZ1bmN0aW9uIChleHBvcnRzLCBf
ZW1iZXJNZXRhbERlYnVnLCBfZW1iZXJNZXRhbE1peGluLCBfZW1iZXJNZXRhbFByb3BlcnR5X2dl
dCkgewotICAvKioKLSAgQG1vZHVsZSBlbWJlcgotICBAc3VibW9kdWxlIGVtYmVyLXJ1bnRpbWUK
LSAgKi8KLQotICAndXNlIHN0cmljdCc7Ci0KLSAgZXhwb3J0cy5kZXByZWNhdGVVbmRlcnNjb3Jl
QWN0aW9ucyA9IGRlcHJlY2F0ZVVuZGVyc2NvcmVBY3Rpb25zOwotCi0gIC8qKgotICAgIGBFbWJl
ci5BY3Rpb25IYW5kbGVyYCBpcyBhdmFpbGFibGUgb24gc29tZSBmYW1pbGlhciBjbGFzc2VzIGlu
Y2x1ZGluZwotICAgIGBFbWJlci5Sb3V0ZWAsIGBFbWJlci5WaWV3YCwgYEVtYmVyLkNvbXBvbmVu
dGAsIGFuZCBgRW1iZXIuQ29udHJvbGxlcmAuCi0gICAgKEludGVybmFsbHkgdGhlIG1peGluIGlz
IHVzZWQgYnkgYEVtYmVyLkNvcmVWaWV3YCwgYEVtYmVyLkNvbnRyb2xsZXJNaXhpbmAsCi0gICAg
YW5kIGBFbWJlci5Sb3V0ZWAgYW5kIGF2YWlsYWJsZSB0byB0aGUgYWJvdmUgY2xhc3NlcyB0aHJv
dWdoCi0gICAgaW5oZXJpdGFuY2UuKQotICAKLSAgICBAY2xhc3MgQWN0aW9uSGFuZGxlcgotICAg
IEBuYW1lc3BhY2UgRW1iZXIKLSAgICBAcHJpdmF0ZQotICAqLwotICB2YXIgQWN0aW9uSGFuZGxl
ciA9IF9lbWJlck1ldGFsTWl4aW4uTWl4aW4uY3JlYXRlKHsKLSAgICBtZXJnZWRQcm9wZXJ0aWVz
OiBbJ2FjdGlvbnMnXSwKLQotICAgIC8qKgotICAgICAgVGhlIGNvbGxlY3Rpb24gb2YgZnVuY3Rp
b25zLCBrZXllZCBieSBuYW1lLCBhdmFpbGFibGUgb24gdGhpcwotICAgICAgYEFjdGlvbkhhbmRs
ZXJgIGFzIGFjdGlvbiB0YXJnZXRzLgotICAgICAgIFRoZXNlIGZ1bmN0aW9ucyB3aWxsIGJlIGlu
dm9rZWQgd2hlbiBhIG1hdGNoaW5nIGB7e2FjdGlvbn19YCBpcyB0cmlnZ2VyZWQKLSAgICAgIGZy
b20gd2l0aGluIGEgdGVtcGxhdGUgYW5kIHRoZSBhcHBsaWNhdGlvbidzIGN1cnJlbnQgcm91dGUg
aXMgdGhpcyByb3V0ZS4KLSAgICAgICBBY3Rpb25zIGNhbiBhbHNvIGJlIGludm9rZWQgZnJvbSBv
dGhlciBwYXJ0cyBvZiB5b3VyIGFwcGxpY2F0aW9uCi0gICAgICB2aWEgYEFjdGlvbkhhbmRsZXIj
c2VuZGAuCi0gICAgICAgVGhlIGBhY3Rpb25zYCBoYXNoIHdpbGwgaW5oZXJpdCBhY3Rpb24gaGFu
ZGxlcnMgZnJvbQotICAgICAgdGhlIGBhY3Rpb25zYCBoYXNoIGRlZmluZWQgb24gZXh0ZW5kZWQg
cGFyZW50IGNsYXNzZXMKLSAgICAgIG9yIG1peGlucyByYXRoZXIgdGhhbiBqdXN0IHJlcGxhY2Ug
dGhlIGVudGlyZSBoYXNoLCBlLmcuOgotICAgICAgIGBgYGpzCi0gICAgICBBcHAuQ2FuRGlzcGxh
eUJhbm5lciA9IEVtYmVyLk1peGluLmNyZWF0ZSh7Ci0gICAgICAgIGFjdGlvbnM6IHsKLSAgICAg
ICAgICBkaXNwbGF5QmFubmVyOiBmdW5jdGlvbihtc2cpIHsKLSAgICAgICAgICAgIC8vIC4uLgot
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfSk7Ci0gICAgICAgQXBwLldlbGNvbWVSb3V0
ZSA9IEVtYmVyLlJvdXRlLmV4dGVuZChBcHAuQ2FuRGlzcGxheUJhbm5lciwgewotICAgICAgICBh
Y3Rpb25zOiB7Ci0gICAgICAgICAgcGxheU11c2ljOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAg
IC8vIC4uLgotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfSk7Ci0gICAgICAgLy8gYFdl
bGNvbWVSb3V0ZWAsIHdoZW4gYWN0aXZlLCB3aWxsIGJlIGFibGUgdG8gcmVzcG9uZAotICAgICAg
Ly8gdG8gYm90aCBhY3Rpb25zLCBzaW5jZSB0aGUgYWN0aW9ucyBoYXNoIGlzIG1lcmdlZCByYXRo
ZXIKLSAgICAgIC8vIHRoZW4gcmVwbGFjZWQgd2hlbiBleHRlbmRpbmcgbWl4aW5zIC8gcGFyZW50
IGNsYXNzZXMuCi0gICAgICB0aGlzLnNlbmQoJ2Rpc3BsYXlCYW5uZXInKTsKLSAgICAgIHRoaXMu
c2VuZCgncGxheU11c2ljJyk7Ci0gICAgICBgYGAKLSAgICAgICBXaXRoaW4gYSBDb250cm9sbGVy
LCBSb3V0ZSwgVmlldyBvciBDb21wb25lbnQncyBhY3Rpb24gaGFuZGxlciwKLSAgICAgIHRoZSB2
YWx1ZSBvZiB0aGUgYHRoaXNgIGNvbnRleHQgaXMgdGhlIENvbnRyb2xsZXIsIFJvdXRlLCBWaWV3
IG9yCi0gICAgICBDb21wb25lbnQgb2JqZWN0OgotICAgICAgIGBgYGpzCi0gICAgICBBcHAuU29u
Z1JvdXRlID0gRW1iZXIuUm91dGUuZXh0ZW5kKHsKLSAgICAgICAgYWN0aW9uczogewotICAgICAg
ICAgIG15QWN0aW9uOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIHRoaXMuY29udHJvbGxlckZv
cigic29uZyIpOwotICAgICAgICAgICAgdGhpcy50cmFuc2l0aW9uVG8oIm90aGVyLnJvdXRlIik7
Ci0gICAgICAgICAgICAuLi4KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0pOwotICAg
ICAgYGBgCi0gICAgICAgSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBjYWxsIGB0aGlzLl9zdXBlcigu
Li5hcmd1bWVudHMpYCBmcm9tIHdpdGhpbiBhbgotICAgICAgYWN0aW9uIGhhbmRsZXIgaWYgaXQg
b3ZlcnJpZGVzIGEgaGFuZGxlciBkZWZpbmVkIG9uIGEgcGFyZW50Ci0gICAgICBjbGFzcyBvciBt
aXhpbjoKLSAgICAgICBUYWtlIGZvciBleGFtcGxlIHRoZSBmb2xsb3dpbmcgcm91dGVzOgotICAg
ICAgIGBgYGpzCi0gICAgICBBcHAuRGVidWdSb3V0ZSA9IEVtYmVyLk1peGluLmNyZWF0ZSh7Ci0g
ICAgICAgIGFjdGlvbnM6IHsKLSAgICAgICAgICBkZWJ1Z1JvdXRlSW5mb3JtYXRpb246IGZ1bmN0
aW9uKCkgewotICAgICAgICAgICAgY29uc29sZS5kZWJ1ZygidHJvbG9sbyIpOwotICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgICAgfSk7Ci0gICAgICAgQXBwLkFubm95aW5nRGVidWdSb3V0ZSA9
IEVtYmVyLlJvdXRlLmV4dGVuZChBcHAuRGVidWdSb3V0ZSwgewotICAgICAgICBhY3Rpb25zOiB7
Ci0gICAgICAgICAgZGVidWdSb3V0ZUluZm9ybWF0aW9uOiBmdW5jdGlvbigpIHsKLSAgICAgICAg
ICAgIC8vIGFsc28gY2FsbCB0aGUgZGVidWdSb3V0ZUluZm9ybWF0aW9uIG9mIG1peGVkIGluIEFw
cC5EZWJ1Z1JvdXRlCi0gICAgICAgICAgICB0aGlzLl9zdXBlciguLi5hcmd1bWVudHMpOwotICAg
ICAgICAgICAgIC8vIHNob3cgYWRkaXRpb25hbCBhbm5veWFuY2UKLSAgICAgICAgICAgIHdpbmRv
dy5hbGVydCguLi4pOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfSk7Ci0gICAgICBg
YGAKLSAgICAgICAjIyBCdWJibGluZwotICAgICAgIEJ5IGRlZmF1bHQsIGFuIGFjdGlvbiB3aWxs
IHN0b3AgYnViYmxpbmcgb25jZSBhIGhhbmRsZXIgZGVmaW5lZAotICAgICAgb24gdGhlIGBhY3Rp
b25zYCBoYXNoIGhhbmRsZXMgaXQuIFRvIGNvbnRpbnVlIGJ1YmJsaW5nIHRoZSBhY3Rpb24sCi0g
ICAgICB5b3UgbXVzdCByZXR1cm4gYHRydWVgIGZyb20gdGhlIGhhbmRsZXI6Ci0gICAgICAgYGBg
anMKLSAgICAgIEFwcC5Sb3V0ZXIubWFwKGZ1bmN0aW9uKCkgewotICAgICAgICB0aGlzLnJvdXRl
KCJhbGJ1bSIsIGZ1bmN0aW9uKCkgewotICAgICAgICAgIHRoaXMucm91dGUoInNvbmciKTsKLSAg
ICAgICAgfSk7Ci0gICAgICB9KTsKLSAgICAgICBBcHAuQWxidW1Sb3V0ZSA9IEVtYmVyLlJvdXRl
LmV4dGVuZCh7Ci0gICAgICAgIGFjdGlvbnM6IHsKLSAgICAgICAgICBzdGFydFBsYXlpbmc6IGZ1
bmN0aW9uKCkgewotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfSk7Ci0gICAgICAgQXBw
LkFsYnVtU29uZ1JvdXRlID0gRW1iZXIuUm91dGUuZXh0ZW5kKHsKLSAgICAgICAgYWN0aW9uczog
ewotICAgICAgICAgIHN0YXJ0UGxheWluZzogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAvLyAu
Li4KLSAgICAgICAgICAgICBpZiAoYWN0aW9uU2hvdWxkQWxzb0JlVHJpZ2dlcmVkT25QYXJlbnRS
b3V0ZSkgewotICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0pOwotICAgICAgYGBgCi0gICAgICAgQHByb3BlcnR5
IGFjdGlvbnMKLSAgICAgIEB0eXBlIE9iamVjdAotICAgICAgQGRlZmF1bHQgbnVsbAotICAgICAg
QHB1YmxpYwotICAgICovCi0KLSAgICAvKioKLSAgICAgIFRyaWdnZXJzIGEgbmFtZWQgYWN0aW9u
IG9uIHRoZSBgQWN0aW9uSGFuZGxlcmAuIEFueSBwYXJhbWV0ZXJzCi0gICAgICBzdXBwbGllZCBh
ZnRlciB0aGUgYGFjdGlvbk5hbWVgIHN0cmluZyB3aWxsIGJlIHBhc3NlZCBhcyBhcmd1bWVudHMK
LSAgICAgIHRvIHRoZSBhY3Rpb24gdGFyZ2V0IGZ1bmN0aW9uLgotICAgICAgIElmIHRoZSBgQWN0
aW9uSGFuZGxlcmAgaGFzIGl0cyBgdGFyZ2V0YCBwcm9wZXJ0eSBzZXQsIGFjdGlvbnMgbWF5Ci0g
ICAgICBidWJibGUgdG8gdGhlIGB0YXJnZXRgLiBCdWJibGluZyBoYXBwZW5zIHdoZW4gYW4gYGFj
dGlvbk5hbWVgIGNhbgotICAgICAgbm90IGJlIGZvdW5kIGluIHRoZSBgQWN0aW9uSGFuZGxlcmAn
cyBgYWN0aW9uc2AgaGFzaCBvciBpZiB0aGUKLSAgICAgIGFjdGlvbiB0YXJnZXQgZnVuY3Rpb24g
cmV0dXJucyBgdHJ1ZWAuCi0gICAgICAgRXhhbXBsZQotICAgICAgIGBgYGpzCi0gICAgICBBcHAu
V2VsY29tZVJvdXRlID0gRW1iZXIuUm91dGUuZXh0ZW5kKHsKLSAgICAgICAgYWN0aW9uczogewot
ICAgICAgICAgIHBsYXlUaGVtZTogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgdGhpcy5zZW5k
KCdwbGF5TXVzaWMnLCAndGhlbWUubXAzJyk7Ci0gICAgICAgICAgfSwKLSAgICAgICAgICBwbGF5
TXVzaWM6IGZ1bmN0aW9uKHRyYWNrKSB7Ci0gICAgICAgICAgICAvLyAuLi4KLSAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICAgIH0pOwotICAgICAgYGBgCi0gICAgICAgQG1ldGhvZCBzZW5kCi0g
ICAgICBAcGFyYW0ge1N0cmluZ30gYWN0aW9uTmFtZSBUaGUgYWN0aW9uIHRvIHRyaWdnZXIKLSAg
ICAgIEBwYXJhbSB7Kn0gY29udGV4dCBhIGNvbnRleHQgdG8gc2VuZCB3aXRoIHRoZSBhY3Rpb24K
LSAgICAgIEBwdWJsaWMKLSAgICAqLwotICAgIHNlbmQ6IGZ1bmN0aW9uIChhY3Rpb25OYW1lKSB7
Ci0gICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9s
ZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHsK
LSAgICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07Ci0gICAgICB9Ci0KLSAg
ICAgIHZhciB0YXJnZXQ7Ci0KLSAgICAgIGlmICh0aGlzLmFjdGlvbnMgJiYgdGhpcy5hY3Rpb25z
W2FjdGlvbk5hbWVdKSB7Ci0gICAgICAgIHZhciBzaG91bGRCdWJibGUgPSB0aGlzLmFjdGlvbnNb
YWN0aW9uTmFtZV0uYXBwbHkodGhpcywgYXJncykgPT09IHRydWU7Ci0gICAgICAgIGlmICghc2hv
dWxkQnViYmxlKSB7Ci0gICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAg
ICAgIGlmICh0YXJnZXQgPSBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywgJ3Rhcmdl
dCcpKSB7Ci0gICAgICAgIHZhciBfdGFyZ2V0OwotCi0gICAgICAgIF9lbWJlck1ldGFsRGVidWcu
YXNzZXJ0KCdUaGUgYHRhcmdldGAgZm9yICcgKyB0aGlzICsgJyAoJyArIHRhcmdldCArICcpIGRv
ZXMgbm90IGhhdmUgYSBgc2VuZGAgbWV0aG9kJywgdHlwZW9mIHRhcmdldC5zZW5kID09PSAnZnVu
Y3Rpb24nKTsKLSAgICAgICAgKF90YXJnZXQgPSB0YXJnZXQpLnNlbmQuYXBwbHkoX3RhcmdldCwg
YXJndW1lbnRzKTsKLSAgICAgIH0KLSAgICB9LAotCi0gICAgd2lsbE1lcmdlTWl4aW46IGZ1bmN0
aW9uIChwcm9wcykgewotICAgICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ1NwZWNpZnlpbmcg
YF9hY3Rpb25zYCBhbmQgYGFjdGlvbnNgIGluIHRoZSBzYW1lIG1peGluIGlzIG5vdCBzdXBwb3J0
ZWQuJywgIXByb3BzLmFjdGlvbnMgfHwgIXByb3BzLl9hY3Rpb25zKTsKLQotICAgICAgaWYgKHBy
b3BzLl9hY3Rpb25zKSB7Ci0gICAgICAgIF9lbWJlck1ldGFsRGVidWcuZGVwcmVjYXRlKCdTcGVj
aWZ5aW5nIGFjdGlvbnMgaW4gYF9hY3Rpb25zYCBpcyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIGBh
Y3Rpb25zYCBpbnN0ZWFkLicsIGZhbHNlLCB7IGlkOiAnZW1iZXItcnVudGltZS5hY3Rpb24taGFu
ZGxlci1fYWN0aW9ucycsIHVudGlsOiAnMy4wLjAnIH0pOwotCi0gICAgICAgIHByb3BzLmFjdGlv
bnMgPSBwcm9wcy5fYWN0aW9uczsKLSAgICAgICAgZGVsZXRlIHByb3BzLl9hY3Rpb25zOwotICAg
ICAgfQotICAgIH0KLSAgfSk7Ci0KLSAgZXhwb3J0cy5kZWZhdWx0ID0gQWN0aW9uSGFuZGxlcjsK
LQotICBmdW5jdGlvbiBkZXByZWNhdGVVbmRlcnNjb3JlQWN0aW9ucyhmYWN0b3J5KSB7Ci0gICAg
T2JqZWN0LmRlZmluZVByb3BlcnR5KGZhY3RvcnkucHJvdG90eXBlLCAnX2FjdGlvbnMnLCB7Ci0g
ICAgICBjb25maWd1cmFibGU6IHRydWUsCi0gICAgICBlbnVtZXJhYmxlOiBmYWxzZSwKLSAgICAg
IHNldDogZnVuY3Rpb24gKHZhbHVlKSB7Ci0gICAgICAgIF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0
KCdZb3UgY2Fubm90IHNldCBgX2FjdGlvbnNgIG9uICcgKyB0aGlzICsgJywgcGxlYXNlIHVzZSBg
YWN0aW9uc2AgaW5zdGVhZC4nKTsKLSAgICAgIH0sCi0gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsK
LSAgICAgICAgX2VtYmVyTWV0YWxEZWJ1Zy5kZXByZWNhdGUoJ1VzYWdlIG9mIGBfYWN0aW9uc2Ag
aXMgZGVwcmVjYXRlZCwgdXNlIGBhY3Rpb25zYCBpbnN0ZWFkLicsIGZhbHNlLCB7IGlkOiAnZW1i
ZXItcnVudGltZS5hY3Rpb24taGFuZGxlci1fYWN0aW9ucycsIHVudGlsOiAnMy4wLjAnIH0pOwot
ICAgICAgICByZXR1cm4gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsICdhY3Rpb25z
Jyk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLX0pOwotZW5pZmVkKCdlbWJlci1ydW50aW1lL21p
eGlucy9hcnJheScsIFsnZXhwb3J0cycsICdlbWJlci1tZXRhbC9jb3JlJywgJ2VtYmVyLW1ldGFs
L3N5bWJvbCcsICdlbWJlci1tZXRhbC9wcm9wZXJ0eV9nZXQnLCAnZW1iZXItbWV0YWwvY29tcHV0
ZWQnLCAnZW1iZXItbWV0YWwvaXNfbm9uZScsICdlbWJlci1ydW50aW1lL21peGlucy9lbnVtZXJh
YmxlJywgJ2VtYmVyLW1ldGFsL21peGluJywgJ2VtYmVyLW1ldGFsL3Byb3BlcnR5X2V2ZW50cycs
ICdlbWJlci1tZXRhbC9ldmVudHMnLCAnZW1iZXItbWV0YWwvbWV0YScsICdlbWJlci1tZXRhbC90
YWdzJywgJ2VtYmVyLXJ1bnRpbWUvc3lzdGVtL2VhY2hfcHJveHknXSwgZnVuY3Rpb24gKGV4cG9y
dHMsIF9lbWJlck1ldGFsQ29yZSwgX2VtYmVyTWV0YWxTeW1ib2wsIF9lbWJlck1ldGFsUHJvcGVy
dHlfZ2V0LCBfZW1iZXJNZXRhbENvbXB1dGVkLCBfZW1iZXJNZXRhbElzX25vbmUsIF9lbWJlclJ1
bnRpbWVNaXhpbnNFbnVtZXJhYmxlLCBfZW1iZXJNZXRhbE1peGluLCBfZW1iZXJNZXRhbFByb3Bl
cnR5X2V2ZW50cywgX2VtYmVyTWV0YWxFdmVudHMsIF9lbWJlck1ldGFsTWV0YSwgX2VtYmVyTWV0
YWxUYWdzLCBfZW1iZXJSdW50aW1lU3lzdGVtRWFjaF9wcm94eSkgewotICAvKioKLSAgQG1vZHVs
ZSBlbWJlcgotICBAc3VibW9kdWxlIGVtYmVyLXJ1bnRpbWUKLSAgKi8KLQotICAvLyAuLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0gIC8v
IEhFTFBFUlMKLSAgLy8KLSAgJ3VzZSBzdHJpY3QnOwotCi0gIHZhciBfTWl4aW4kY3JlYXRlOwot
Ci0gIGV4cG9ydHMuYWRkQXJyYXlPYnNlcnZlciA9IGFkZEFycmF5T2JzZXJ2ZXI7Ci0gIGV4cG9y
dHMucmVtb3ZlQXJyYXlPYnNlcnZlciA9IHJlbW92ZUFycmF5T2JzZXJ2ZXI7Ci0gIGV4cG9ydHMu
b2JqZWN0QXQgPSBvYmplY3RBdDsKLSAgZXhwb3J0cy5pc0VtYmVyQXJyYXkgPSBpc0VtYmVyQXJy
YXk7Ci0KLSAgZnVuY3Rpb24gYXJyYXlPYnNlcnZlcnNIZWxwZXIob2JqLCB0YXJnZXQsIG9wdHMs
IG9wZXJhdGlvbiwgbm90aWZ5KSB7Ci0gICAgdmFyIHdpbGxDaGFuZ2UgPSBvcHRzICYmIG9wdHMu
d2lsbENoYW5nZSB8fCAnYXJyYXlXaWxsQ2hhbmdlJzsKLSAgICB2YXIgZGlkQ2hhbmdlID0gb3B0
cyAmJiBvcHRzLmRpZENoYW5nZSB8fCAnYXJyYXlEaWRDaGFuZ2UnOwotICAgIHZhciBoYXNPYnNl
cnZlcnMgPSBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQob2JqLCAnaGFzQXJyYXlPYnNlcnZl
cnMnKTsKLQotICAgIGlmIChoYXNPYnNlcnZlcnMgPT09IG5vdGlmeSkgewotICAgICAgX2VtYmVy
TWV0YWxQcm9wZXJ0eV9ldmVudHMucHJvcGVydHlXaWxsQ2hhbmdlKG9iaiwgJ2hhc0FycmF5T2Jz
ZXJ2ZXJzJyk7Ci0gICAgfQotCi0gICAgb3BlcmF0aW9uKG9iaiwgJ0BhcnJheTpiZWZvcmUnLCB0
YXJnZXQsIHdpbGxDaGFuZ2UpOwotICAgIG9wZXJhdGlvbihvYmosICdAYXJyYXk6Y2hhbmdlJywg
dGFyZ2V0LCBkaWRDaGFuZ2UpOwotCi0gICAgaWYgKGhhc09ic2VydmVycyA9PT0gbm90aWZ5KSB7
Ci0gICAgICBfZW1iZXJNZXRhbFByb3BlcnR5X2V2ZW50cy5wcm9wZXJ0eURpZENoYW5nZShvYmos
ICdoYXNBcnJheU9ic2VydmVycycpOwotICAgIH0KLQotICAgIHJldHVybiBvYmo7Ci0gIH0KLQot
ICBmdW5jdGlvbiBhZGRBcnJheU9ic2VydmVyKGFycmF5LCB0YXJnZXQsIG9wdHMpIHsKLSAgICBy
ZXR1cm4gYXJyYXlPYnNlcnZlcnNIZWxwZXIoYXJyYXksIHRhcmdldCwgb3B0cywgX2VtYmVyTWV0
YWxFdmVudHMuYWRkTGlzdGVuZXIsIGZhbHNlKTsKLSAgfQotCi0gIGZ1bmN0aW9uIHJlbW92ZUFy
cmF5T2JzZXJ2ZXIoYXJyYXksIHRhcmdldCwgb3B0cykgewotICAgIHJldHVybiBhcnJheU9ic2Vy
dmVyc0hlbHBlcihhcnJheSwgdGFyZ2V0LCBvcHRzLCBfZW1iZXJNZXRhbEV2ZW50cy5yZW1vdmVM
aXN0ZW5lciwgdHJ1ZSk7Ci0gIH0KLQotICBmdW5jdGlvbiBvYmplY3RBdChjb250ZW50LCBpZHgp
IHsKLSAgICBpZiAoY29udGVudC5vYmplY3RBdCkgewotICAgICAgcmV0dXJuIGNvbnRlbnQub2Jq
ZWN0QXQoaWR4KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gY29udGVudFtpZHhdOwotICB9Ci0KLSAg
dmFyIEVNQkVSX0FSUkFZID0gX2VtYmVyTWV0YWxTeW1ib2wuZGVmYXVsdCgnRU1CRVJfQVJSQVkn
KTsKLQotICBmdW5jdGlvbiBpc0VtYmVyQXJyYXkob2JqKSB7Ci0gICAgcmV0dXJuIG9iaiAmJiAh
IW9ialtFTUJFUl9BUlJBWV07Ci0gIH0KLQotICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0gIC8vIEFSUkFZCi0gIC8vCi0gIC8q
KgotICAgIFRoaXMgbWl4aW4gaW1wbGVtZW50cyBPYnNlcnZlci1mcmllbmRseSBBcnJheS1saWtl
IGJlaGF2aW9yLiBJdCBpcyBub3QgYQotICAgIGNvbmNyZXRlIGltcGxlbWVudGF0aW9uLCBidXQg
aXQgY2FuIGJlIHVzZWQgdXAgYnkgb3RoZXIgY2xhc3NlcyB0aGF0IHdhbnQKLSAgICB0byBhcHBl
YXIgbGlrZSBhcnJheXMuCi0gIAotICAgIEZvciBleGFtcGxlLCBBcnJheVByb3h5IGlzIGEgY29u
Y3JldGUgY2xhc3NlcyB0aGF0IGNhbgotICAgIGJlIGluc3RhbnRpYXRlZCB0byBpbXBsZW1lbnQg
YXJyYXktbGlrZSBiZWhhdmlvci4gQm90aCBvZiB0aGVzZSBjbGFzc2VzIHVzZQotICAgIHRoZSBB
cnJheSBNaXhpbiBieSB3YXkgb2YgdGhlIE11dGFibGVBcnJheSBtaXhpbiwgd2hpY2ggYWxsb3dz
IG9ic2VydmFibGUKLSAgICBjaGFuZ2VzIHRvIGJlIG1hZGUgdG8gdGhlIHVuZGVybHlpbmcgYXJy
YXkuCi0gIAotICAgIFVubGlrZSBgRW1iZXIuRW51bWVyYWJsZSxgIHRoaXMgbWl4aW4gZGVmaW5l
cyBtZXRob2RzIHNwZWNpZmljYWxseSBmb3IKLSAgICBjb2xsZWN0aW9ucyB0aGF0IHByb3ZpZGUg
aW5kZXgtb3JkZXJlZCBhY2Nlc3MgdG8gdGhlaXIgY29udGVudHMuIFdoZW4geW91Ci0gICAgYXJl
IGRlc2lnbmluZyBjb2RlIHRoYXQgbmVlZHMgdG8gYWNjZXB0IGFueSBraW5kIG9mIEFycmF5LWxp
a2Ugb2JqZWN0LCB5b3UKLSAgICBzaG91bGQgdXNlIHRoZXNlIG1ldGhvZHMgaW5zdGVhZCBvZiBB
cnJheSBwcmltaXRpdmVzIGJlY2F1c2UgdGhlc2Ugd2lsbAotICAgIHByb3Blcmx5IG5vdGlmeSBv
YnNlcnZlcnMgb2YgY2hhbmdlcyB0byB0aGUgYXJyYXkuCi0gIAotICAgIEFsdGhvdWdoIHRoZXNl
IG1ldGhvZHMgYXJlIGVmZmljaWVudCwgdGhleSBkbyBhZGQgYSBsYXllciBvZiBpbmRpcmVjdGlv
biB0bwotICAgIHlvdXIgYXBwbGljYXRpb24gc28gaXQgaXMgYSBnb29kIGlkZWEgdG8gdXNlIHRo
ZW0gb25seSB3aGVuIHlvdSBuZWVkIHRoZQotICAgIGZsZXhpYmlsaXR5IG9mIHVzaW5nIGJvdGgg
dHJ1ZSBKYXZhU2NyaXB0IGFycmF5cyBhbmQgInZpcnR1YWwiIGFycmF5cyBzdWNoCi0gICAgYXMg
Y29udHJvbGxlcnMgYW5kIGNvbGxlY3Rpb25zLgotICAKLSAgICBZb3UgY2FuIHVzZSB0aGUgbWV0
aG9kcyBkZWZpbmVkIGluIHRoaXMgbW9kdWxlIHRvIGFjY2VzcyBhbmQgbW9kaWZ5IGFycmF5Ci0g
ICAgY29udGVudHMgaW4gYSBLVk8tZnJpZW5kbHkgd2F5LiBZb3UgY2FuIGFsc28gYmUgbm90aWZp
ZWQgd2hlbmV2ZXIgdGhlCi0gICAgbWVtYmVyc2hpcCBvZiBhbiBhcnJheSBjaGFuZ2VzIGJ5IHVz
aW5nIGAub2JzZXJ2ZXMoJ215QXJyYXkuW10nKWAuCi0gIAotICAgIFRvIHN1cHBvcnQgYEVtYmVy
LkFycmF5YCBpbiB5b3VyIG93biBjbGFzcywgeW91IG11c3Qgb3ZlcnJpZGUgdHdvCi0gICAgcHJp
bWl0aXZlcyB0byB1c2UgaXQ6IGBsZW5ndGgoKWAgYW5kIGBvYmplY3RBdCgpYC4KLSAgCi0gICAg
Tm90ZSB0aGF0IHRoZSBFbWJlci5BcnJheSBtaXhpbiBhbHNvIGluY29ycG9yYXRlcyB0aGUgYEVt
YmVyLkVudW1lcmFibGVgCi0gICAgbWl4aW4uIEFsbCBgRW1iZXIuQXJyYXlgLWxpa2Ugb2JqZWN0
cyBhcmUgYWxzbyBlbnVtZXJhYmxlLgotICAKLSAgICBAY2xhc3MgQXJyYXkKLSAgICBAbmFtZXNw
YWNlIEVtYmVyCi0gICAgQHVzZXMgRW1iZXIuRW51bWVyYWJsZQotICAgIEBzaW5jZSBFbWJlciAw
LjkuMAotICAgIEBwdWJsaWMKLSAgKi8KLSAgZXhwb3J0cy5kZWZhdWx0ID0gX2VtYmVyTWV0YWxN
aXhpbi5NaXhpbi5jcmVhdGUoX2VtYmVyUnVudGltZU1peGluc0VudW1lcmFibGUuZGVmYXVsdCwg
KF9NaXhpbiRjcmVhdGUgPSB7fSwgX01peGluJGNyZWF0ZVtFTUJFUl9BUlJBWV0gPSB0cnVlLCBf
TWl4aW4kY3JlYXRlLmxlbmd0aCA9IG51bGwsIF9NaXhpbiRjcmVhdGUub2JqZWN0QXQgPSBmdW5j
dGlvbiAoaWR4KSB7Ci0gICAgaWYgKGlkeCA8IDAgfHwgaWR4ID49IF9lbWJlck1ldGFsUHJvcGVy
dHlfZ2V0LmdldCh0aGlzLCAnbGVuZ3RoJykpIHsKLSAgICAgIHJldHVybiB1bmRlZmluZWQ7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0aGlzLCBpZHgp
OwotICB9LCBfTWl4aW4kY3JlYXRlLm9iamVjdHNBdCA9IGZ1bmN0aW9uIChpbmRleGVzKSB7Ci0g
ICAgdmFyIF90aGlzID0gdGhpczsKLQotICAgIHJldHVybiBpbmRleGVzLm1hcChmdW5jdGlvbiAo
aWR4KSB7Ci0gICAgICByZXR1cm4gb2JqZWN0QXQoX3RoaXMsIGlkeCk7Ci0gICAgfSk7Ci0gIH0s
IF9NaXhpbiRjcmVhdGUubmV4dE9iamVjdCA9IGZ1bmN0aW9uIChpZHgpIHsKLSAgICByZXR1cm4g
b2JqZWN0QXQodGhpcywgaWR4KTsKLSAgfSwgX01peGluJGNyZWF0ZVsnW10nXSA9IF9lbWJlck1l
dGFsQ29tcHV0ZWQuY29tcHV0ZWQoewotICAgIGdldDogZnVuY3Rpb24gKGtleSkgewotICAgICAg
cmV0dXJuIHRoaXM7Ci0gICAgfSwKLSAgICBzZXQ6IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7Ci0g
ICAgICB0aGlzLnJlcGxhY2UoMCwgX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsICds
ZW5ndGgnKSwgdmFsdWUpOwotICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgfQotICB9KSwgX01peGlu
JGNyZWF0ZS5maXJzdE9iamVjdCA9IF9lbWJlck1ldGFsQ29tcHV0ZWQuY29tcHV0ZWQoZnVuY3Rp
b24gKCkgewotICAgIHJldHVybiBvYmplY3RBdCh0aGlzLCAwKTsKLSAgfSkucmVhZE9ubHkoKSwg
X01peGluJGNyZWF0ZS5sYXN0T2JqZWN0ID0gX2VtYmVyTWV0YWxDb21wdXRlZC5jb21wdXRlZChm
dW5jdGlvbiAoKSB7Ci0gICAgcmV0dXJuIG9iamVjdEF0KHRoaXMsIF9lbWJlck1ldGFsUHJvcGVy
dHlfZ2V0LmdldCh0aGlzLCAnbGVuZ3RoJykgLSAxKTsKLSAgfSkucmVhZE9ubHkoKSwgX01peGlu
JGNyZWF0ZS5jb250YWlucyA9IGZ1bmN0aW9uIChvYmopIHsKLSAgICByZXR1cm4gdGhpcy5pbmRl
eE9mKG9iaikgPj0gMDsKLSAgfSwgX01peGluJGNyZWF0ZS5zbGljZSA9IGZ1bmN0aW9uIChiZWdp
bkluZGV4LCBlbmRJbmRleCkgewotICAgIHZhciByZXQgPSBfZW1iZXJNZXRhbENvcmUuZGVmYXVs
dC5BKCk7Ci0gICAgdmFyIGxlbmd0aCA9IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0aGlz
LCAnbGVuZ3RoJyk7Ci0KLSAgICBpZiAoX2VtYmVyTWV0YWxJc19ub25lLmRlZmF1bHQoYmVnaW5J
bmRleCkpIHsKLSAgICAgIGJlZ2luSW5kZXggPSAwOwotICAgIH0KLQotICAgIGlmIChfZW1iZXJN
ZXRhbElzX25vbmUuZGVmYXVsdChlbmRJbmRleCkgfHwgZW5kSW5kZXggPiBsZW5ndGgpIHsKLSAg
ICAgIGVuZEluZGV4ID0gbGVuZ3RoOwotICAgIH0KLQotICAgIGlmIChiZWdpbkluZGV4IDwgMCkg
ewotICAgICAgYmVnaW5JbmRleCA9IGxlbmd0aCArIGJlZ2luSW5kZXg7Ci0gICAgfQotCi0gICAg
aWYgKGVuZEluZGV4IDwgMCkgewotICAgICAgZW5kSW5kZXggPSBsZW5ndGggKyBlbmRJbmRleDsK
LSAgICB9Ci0KLSAgICB3aGlsZSAoYmVnaW5JbmRleCA8IGVuZEluZGV4KSB7Ci0gICAgICByZXRb
cmV0Lmxlbmd0aF0gPSBvYmplY3RBdCh0aGlzLCBiZWdpbkluZGV4KyspOwotICAgIH0KLQotICAg
IHJldHVybiByZXQ7Ci0gIH0sIF9NaXhpbiRjcmVhdGUuaW5kZXhPZiA9IGZ1bmN0aW9uIChvYmpl
Y3QsIHN0YXJ0QXQpIHsKLSAgICB2YXIgbGVuID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0
KHRoaXMsICdsZW5ndGgnKTsKLSAgICB2YXIgaWR4OwotCi0gICAgaWYgKHN0YXJ0QXQgPT09IHVu
ZGVmaW5lZCkgewotICAgICAgc3RhcnRBdCA9IDA7Ci0gICAgfQotCi0gICAgaWYgKHN0YXJ0QXQg
PCAwKSB7Ci0gICAgICBzdGFydEF0ICs9IGxlbjsKLSAgICB9Ci0KLSAgICBmb3IgKGlkeCA9IHN0
YXJ0QXQ7IGlkeCA8IGxlbjsgaWR4KyspIHsKLSAgICAgIGlmIChvYmplY3RBdCh0aGlzLCBpZHgp
ID09PSBvYmplY3QpIHsKLSAgICAgICAgcmV0dXJuIGlkeDsKLSAgICAgIH0KLSAgICB9Ci0KLSAg
ICByZXR1cm4gLTE7Ci0gIH0sIF9NaXhpbiRjcmVhdGUubGFzdEluZGV4T2YgPSBmdW5jdGlvbiAo
b2JqZWN0LCBzdGFydEF0KSB7Ci0gICAgdmFyIGxlbiA9IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0
LmdldCh0aGlzLCAnbGVuZ3RoJyk7Ci0gICAgdmFyIGlkeDsKLQotICAgIGlmIChzdGFydEF0ID09
PSB1bmRlZmluZWQgfHwgc3RhcnRBdCA+PSBsZW4pIHsKLSAgICAgIHN0YXJ0QXQgPSBsZW4gLSAx
OwotICAgIH0KLQotICAgIGlmIChzdGFydEF0IDwgMCkgewotICAgICAgc3RhcnRBdCArPSBsZW47
Ci0gICAgfQotCi0gICAgZm9yIChpZHggPSBzdGFydEF0OyBpZHggPj0gMDsgaWR4LS0pIHsKLSAg
ICAgIGlmIChvYmplY3RBdCh0aGlzLCBpZHgpID09PSBvYmplY3QpIHsKLSAgICAgICAgcmV0dXJu
IGlkeDsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gLTE7Ci0gIH0sIF9NaXhpbiRjcmVh
dGUuYWRkQXJyYXlPYnNlcnZlciA9IGZ1bmN0aW9uICh0YXJnZXQsIG9wdHMpIHsKLSAgICByZXR1
cm4gYWRkQXJyYXlPYnNlcnZlcih0aGlzLCB0YXJnZXQsIG9wdHMpOwotICB9LCBfTWl4aW4kY3Jl
YXRlLnJlbW92ZUFycmF5T2JzZXJ2ZXIgPSBmdW5jdGlvbiAodGFyZ2V0LCBvcHRzKSB7Ci0gICAg
cmV0dXJuIHJlbW92ZUFycmF5T2JzZXJ2ZXIodGhpcywgdGFyZ2V0LCBvcHRzKTsKLSAgfSwgX01p
eGluJGNyZWF0ZS5oYXNBcnJheU9ic2VydmVycyA9IF9lbWJlck1ldGFsQ29tcHV0ZWQuY29tcHV0
ZWQoZnVuY3Rpb24gKCkgewotICAgIHJldHVybiBfZW1iZXJNZXRhbEV2ZW50cy5oYXNMaXN0ZW5l
cnModGhpcywgJ0BhcnJheTpjaGFuZ2UnKSB8fCBfZW1iZXJNZXRhbEV2ZW50cy5oYXNMaXN0ZW5l
cnModGhpcywgJ0BhcnJheTpiZWZvcmUnKTsKLSAgfSksIF9NaXhpbiRjcmVhdGUuYXJyYXlDb250
ZW50V2lsbENoYW5nZSA9IGZ1bmN0aW9uIChzdGFydElkeCwgcmVtb3ZlQW10LCBhZGRBbXQpIHsK
LSAgICB2YXIgcmVtb3ZpbmcsIGxpbTsKLQotICAgIC8vIGlmIG5vIGFyZ3MgYXJlIHBhc3NlZCBh
c3N1bWUgZXZlcnl0aGluZyBjaGFuZ2VzCi0gICAgaWYgKHN0YXJ0SWR4ID09PSB1bmRlZmluZWQp
IHsKLSAgICAgIHN0YXJ0SWR4ID0gMDsKLSAgICAgIHJlbW92ZUFtdCA9IGFkZEFtdCA9IC0xOwot
ICAgIH0gZWxzZSB7Ci0gICAgICBpZiAocmVtb3ZlQW10ID09PSB1bmRlZmluZWQpIHsKLSAgICAg
ICAgcmVtb3ZlQW10ID0gLTE7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChhZGRBbXQgPT09IHVuZGVm
aW5lZCkgewotICAgICAgICBhZGRBbXQgPSAtMTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAo
dGhpcy5fX2VhY2gpIHsKLSAgICAgIHRoaXMuX19lYWNoLmFycmF5V2lsbENoYW5nZSh0aGlzLCBz
dGFydElkeCwgcmVtb3ZlQW10LCBhZGRBbXQpOwotICAgIH0KLQotICAgIF9lbWJlck1ldGFsRXZl
bnRzLnNlbmRFdmVudCh0aGlzLCAnQGFycmF5OmJlZm9yZScsIFt0aGlzLCBzdGFydElkeCwgcmVt
b3ZlQW10LCBhZGRBbXRdKTsKLQotICAgIGlmIChzdGFydElkeCA+PSAwICYmIHJlbW92ZUFtdCA+
PSAwICYmIF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0aGlzLCAnaGFzRW51bWVyYWJsZU9i
c2VydmVycycpKSB7Ci0gICAgICByZW1vdmluZyA9IFtdOwotICAgICAgbGltID0gc3RhcnRJZHgg
KyByZW1vdmVBbXQ7Ci0KLSAgICAgIGZvciAodmFyIGlkeCA9IHN0YXJ0SWR4OyBpZHggPCBsaW07
IGlkeCsrKSB7Ci0gICAgICAgIHJlbW92aW5nLnB1c2gob2JqZWN0QXQodGhpcywgaWR4KSk7Ci0g
ICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJlbW92aW5nID0gcmVtb3ZlQW10OwotICAgIH0K
LQotICAgIHRoaXMuZW51bWVyYWJsZUNvbnRlbnRXaWxsQ2hhbmdlKHJlbW92aW5nLCBhZGRBbXQp
OwotCi0gICAgcmV0dXJuIHRoaXM7Ci0gIH0sIF9NaXhpbiRjcmVhdGUuYXJyYXlDb250ZW50RGlk
Q2hhbmdlID0gZnVuY3Rpb24gKHN0YXJ0SWR4LCByZW1vdmVBbXQsIGFkZEFtdCkgewotICAgIHZh
ciBhZGRpbmcsIGxpbTsKLQotICAgIF9lbWJlck1ldGFsVGFncy5tYXJrT2JqZWN0QXNEaXJ0eShf
ZW1iZXJNZXRhbE1ldGEubWV0YSh0aGlzKSk7Ci0KLSAgICAvLyBpZiBubyBhcmdzIGFyZSBwYXNz
ZWQgYXNzdW1lIGV2ZXJ5dGhpbmcgY2hhbmdlcwotICAgIGlmIChzdGFydElkeCA9PT0gdW5kZWZp
bmVkKSB7Ci0gICAgICBzdGFydElkeCA9IDA7Ci0gICAgICByZW1vdmVBbXQgPSBhZGRBbXQgPSAt
MTsKLSAgICB9IGVsc2UgewotICAgICAgaWYgKHJlbW92ZUFtdCA9PT0gdW5kZWZpbmVkKSB7Ci0g
ICAgICAgIHJlbW92ZUFtdCA9IC0xOwotICAgICAgfQotCi0gICAgICBpZiAoYWRkQW10ID09PSB1
bmRlZmluZWQpIHsKLSAgICAgICAgYWRkQW10ID0gLTE7Ci0gICAgICB9Ci0gICAgfQotCi0gICAg
aWYgKHN0YXJ0SWR4ID49IDAgJiYgYWRkQW10ID49IDAgJiYgX2VtYmVyTWV0YWxQcm9wZXJ0eV9n
ZXQuZ2V0KHRoaXMsICdoYXNFbnVtZXJhYmxlT2JzZXJ2ZXJzJykpIHsKLSAgICAgIGFkZGluZyA9
IFtdOwotICAgICAgbGltID0gc3RhcnRJZHggKyBhZGRBbXQ7Ci0KLSAgICAgIGZvciAodmFyIGlk
eCA9IHN0YXJ0SWR4OyBpZHggPCBsaW07IGlkeCsrKSB7Ci0gICAgICAgIGFkZGluZy5wdXNoKG9i
amVjdEF0KHRoaXMsIGlkeCkpOwotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICBhZGRpbmcg
PSBhZGRBbXQ7Ci0gICAgfQotCi0gICAgdGhpcy5lbnVtZXJhYmxlQ29udGVudERpZENoYW5nZShy
ZW1vdmVBbXQsIGFkZGluZyk7Ci0KLSAgICBpZiAodGhpcy5fX2VhY2gpIHsKLSAgICAgIHRoaXMu
X19lYWNoLmFycmF5RGlkQ2hhbmdlKHRoaXMsIHN0YXJ0SWR4LCByZW1vdmVBbXQsIGFkZEFtdCk7
Ci0gICAgfQotCi0gICAgX2VtYmVyTWV0YWxFdmVudHMuc2VuZEV2ZW50KHRoaXMsICdAYXJyYXk6
Y2hhbmdlJywgW3RoaXMsIHN0YXJ0SWR4LCByZW1vdmVBbXQsIGFkZEFtdF0pOwotCi0gICAgdmFy
IGxlbmd0aCA9IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0aGlzLCAnbGVuZ3RoJyk7Ci0g
ICAgdmFyIGNhY2hlZEZpcnN0ID0gX2VtYmVyTWV0YWxDb21wdXRlZC5jYWNoZUZvcih0aGlzLCAn
Zmlyc3RPYmplY3QnKTsKLSAgICB2YXIgY2FjaGVkTGFzdCA9IF9lbWJlck1ldGFsQ29tcHV0ZWQu
Y2FjaGVGb3IodGhpcywgJ2xhc3RPYmplY3QnKTsKLQotICAgIGlmIChvYmplY3RBdCh0aGlzLCAw
KSAhPT0gY2FjaGVkRmlyc3QpIHsKLSAgICAgIF9lbWJlck1ldGFsUHJvcGVydHlfZXZlbnRzLnBy
b3BlcnR5V2lsbENoYW5nZSh0aGlzLCAnZmlyc3RPYmplY3QnKTsKLSAgICAgIF9lbWJlck1ldGFs
UHJvcGVydHlfZXZlbnRzLnByb3BlcnR5RGlkQ2hhbmdlKHRoaXMsICdmaXJzdE9iamVjdCcpOwot
ICAgIH0KLQotICAgIGlmIChvYmplY3RBdCh0aGlzLCBsZW5ndGggLSAxKSAhPT0gY2FjaGVkTGFz
dCkgewotICAgICAgX2VtYmVyTWV0YWxQcm9wZXJ0eV9ldmVudHMucHJvcGVydHlXaWxsQ2hhbmdl
KHRoaXMsICdsYXN0T2JqZWN0Jyk7Ci0gICAgICBfZW1iZXJNZXRhbFByb3BlcnR5X2V2ZW50cy5w
cm9wZXJ0eURpZENoYW5nZSh0aGlzLCAnbGFzdE9iamVjdCcpOwotICAgIH0KLQotICAgIHJldHVy
biB0aGlzOwotICB9LCBfTWl4aW4kY3JlYXRlWydAZWFjaCddID0gX2VtYmVyTWV0YWxDb21wdXRl
ZC5jb21wdXRlZChmdW5jdGlvbiAoKSB7Ci0gICAgLy8gVE9ETyB1c2UgU3ltYm9sIG9yIGFkZCB0
byBtZXRhCi0gICAgaWYgKCF0aGlzLl9fZWFjaCkgewotICAgICAgdGhpcy5fX2VhY2ggPSBuZXcg
X2VtYmVyUnVudGltZVN5c3RlbUVhY2hfcHJveHkuZGVmYXVsdCh0aGlzKTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gdGhpcy5fX2VhY2g7Ci0gIH0pLnZvbGF0aWxlKCksIF9NaXhpbiRjcmVhdGUpKTsK
LX0pOwotLy8gRVM2VE9ETzogRW1iZXIuQQotCi0vKioKLSAgX19SZXF1aXJlZC5fXyBZb3UgbXVz
dCBpbXBsZW1lbnQgdGhpcyBtZXRob2QgdG8gYXBwbHkgdGhpcyBtaXhpbi4KLSAgIFlvdXIgYXJy
YXkgbXVzdCBzdXBwb3J0IHRoZSBgbGVuZ3RoYCBwcm9wZXJ0eS4gWW91ciByZXBsYWNlIG1ldGhv
ZHMgc2hvdWxkCi0gIHNldCB0aGlzIHByb3BlcnR5IHdoZW5ldmVyIGl0IGNoYW5nZXMuCi0gICBA
cHJvcGVydHkge051bWJlcn0gbGVuZ3RoCi0gIEBwdWJsaWMKLSovCi0KLS8qKgotICBSZXR1cm5z
IHRoZSBvYmplY3QgYXQgdGhlIGdpdmVuIGBpbmRleGAuIElmIHRoZSBnaXZlbiBgaW5kZXhgIGlz
IG5lZ2F0aXZlCi0gIG9yIGlzIGdyZWF0ZXIgb3IgZXF1YWwgdGhhbiB0aGUgYXJyYXkgbGVuZ3Ro
LCByZXR1cm5zIGB1bmRlZmluZWRgLgotICAgVGhpcyBpcyBvbmUgb2YgdGhlIHByaW1pdGl2ZXMg
eW91IG11c3QgaW1wbGVtZW50IHRvIHN1cHBvcnQgYEVtYmVyLkFycmF5YC4KLSAgSWYgeW91ciBv
YmplY3Qgc3VwcG9ydHMgcmV0cmlldmluZyB0aGUgdmFsdWUgb2YgYW4gYXJyYXkgaXRlbSB1c2lu
ZyBgZ2V0KClgCi0gIChpLmUuIGBteUFycmF5LmdldCgwKWApLCB0aGVuIHlvdSBkbyBub3QgbmVl
ZCB0byBpbXBsZW1lbnQgdGhpcyBtZXRob2QKLSAgeW91cnNlbGYuCi0gICBgYGBqYXZhc2NyaXB0
Ci0gIHZhciBhcnIgPSBbJ2EnLCAnYicsICdjJywgJ2QnXTsKLSAgIGFyci5vYmplY3RBdCgwKTsg
ICAvLyAnYScKLSAgYXJyLm9iamVjdEF0KDMpOyAgIC8vICdkJwotICBhcnIub2JqZWN0QXQoLTEp
OyAgLy8gdW5kZWZpbmVkCi0gIGFyci5vYmplY3RBdCg0KTsgICAvLyB1bmRlZmluZWQKLSAgYXJy
Lm9iamVjdEF0KDUpOyAgIC8vIHVuZGVmaW5lZAotICBgYGAKLSAgIEBtZXRob2Qgb2JqZWN0QXQK
LSAgQHBhcmFtIHtOdW1iZXJ9IGlkeCBUaGUgaW5kZXggb2YgdGhlIGl0ZW0gdG8gcmV0dXJuLgot
ICBAcmV0dXJuIHsqfSBpdGVtIGF0IGluZGV4IG9yIHVuZGVmaW5lZAotICBAcHVibGljCi0qLwot
Ci0vKioKLSAgVGhpcyByZXR1cm5zIHRoZSBvYmplY3RzIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXhl
cywgdXNpbmcgYG9iamVjdEF0YC4KLSAgIGBgYGphdmFzY3JpcHQKLSAgdmFyIGFyciA9wqBbJ2En
LCAnYicsICdjJywgJ2QnXTsKLSAgIGFyci5vYmplY3RzQXQoWzAsIDEsIDJdKTsgIC8vIFsnYScs
ICdiJywgJ2MnXQotICBhcnIub2JqZWN0c0F0KFsyLCAzLCA0XSk7ICAvLyBbJ2MnLCAnZCcsIHVu
ZGVmaW5lZF0KLSAgYGBgCi0gICBAbWV0aG9kIG9iamVjdHNBdAotICBAcGFyYW0ge0FycmF5fSBp
bmRleGVzIEFuIGFycmF5IG9mIGluZGV4ZXMgb2YgaXRlbXMgdG8gcmV0dXJuLgotICBAcmV0dXJu
IHtBcnJheX0KLSAgQHB1YmxpYwotICovCi0KLS8vIG92ZXJyaWRlcyBFbWJlci5FbnVtZXJhYmxl
IHZlcnNpb24KLQotLyoqCi0gIFRoaXMgaXMgdGhlIGhhbmRsZXIgZm9yIHRoZSBzcGVjaWFsIGFy
cmF5IGNvbnRlbnQgcHJvcGVydHkuIElmIHlvdSBnZXQKLSAgdGhpcyBwcm9wZXJ0eSwgaXQgd2ls
bCByZXR1cm4gdGhpcy4gSWYgeW91IHNldCB0aGlzIHByb3BlcnR5IHRvIGEgbmV3Ci0gIGFycmF5
LCBpdCB3aWxsIHJlcGxhY2UgdGhlIGN1cnJlbnQgY29udGVudC4KLSAgIFRoaXMgcHJvcGVydHkg
b3ZlcnJpZGVzIHRoZSBkZWZhdWx0IHByb3BlcnR5IGRlZmluZWQgaW4gYEVtYmVyLkVudW1lcmFi
bGVgLgotICAgQHByb3BlcnR5IFtdCi0gIEByZXR1cm4gdGhpcwotICBAcHVibGljCi0qLwotCi0v
LyBvcHRpbWl6ZWQgdmVyc2lvbiBmcm9tIEVudW1lcmFibGUKLQotLy8gQWRkIGFueSBleHRyYSBt
ZXRob2RzIHRvIEVtYmVyLkFycmF5IHRoYXQgYXJlIG5hdGl2ZSB0byB0aGUgYnVpbHQtaW4gQXJy
YXkuCi0vKioKLSAgUmV0dXJucyBhIG5ldyBhcnJheSB0aGF0IGlzIGEgc2xpY2Ugb2YgdGhlIHJl
Y2VpdmVyLiBUaGlzIGltcGxlbWVudGF0aW9uCi0gIHVzZXMgdGhlIG9ic2VydmFibGUgYXJyYXkg
bWV0aG9kcyB0byByZXRyaWV2ZSB0aGUgb2JqZWN0cyBmb3IgdGhlIG5ldwotICBzbGljZS4KLSAg
IGBgYGphdmFzY3JpcHQKLSAgdmFyIGFyciA9IFsncmVkJywgJ2dyZWVuJywgJ2JsdWUnXTsKLSAg
IGFyci5zbGljZSgwKTsgICAgICAgLy8gWydyZWQnLCAnZ3JlZW4nLCAnYmx1ZSddCi0gIGFyci5z
bGljZSgwLCAyKTsgICAgLy8gWydyZWQnLCAnZ3JlZW4nXQotICBhcnIuc2xpY2UoMSwgMTAwKTsg
IC8vIFsnZ3JlZW4nLCAnYmx1ZSddCi0gIGBgYAotICAgQG1ldGhvZCBzbGljZQotICBAcGFyYW0g
e051bWJlcn0gYmVnaW5JbmRleCAoT3B0aW9uYWwpIGluZGV4IHRvIGJlZ2luIHNsaWNpbmcgZnJv
bS4KLSAgQHBhcmFtIHtOdW1iZXJ9IGVuZEluZGV4IChPcHRpb25hbCkgaW5kZXggdG8gZW5kIHRo
ZSBzbGljZSBhdCAoYnV0IG5vdCBpbmNsdWRlZCkuCi0gIEByZXR1cm4ge0FycmF5fSBOZXcgYXJy
YXkgd2l0aCBzcGVjaWZpZWQgc2xpY2UKLSAgQHB1YmxpYwotKi8KLQotLyoqCi0gIFJldHVybnMg
dGhlIGluZGV4IG9mIHRoZSBnaXZlbiBvYmplY3QncyBmaXJzdCBvY2N1cnJlbmNlLgotICBJZiBu
byBgc3RhcnRBdGAgYXJndW1lbnQgaXMgZ2l2ZW4sIHRoZSBzdGFydGluZyBsb2NhdGlvbiB0bwot
ICBzZWFyY2ggaXMgMC4gSWYgaXQncyBuZWdhdGl2ZSwgd2lsbCBjb3VudCBiYWNrd2FyZCBmcm9t
Ci0gIHRoZSBlbmQgb2YgdGhlIGFycmF5LiBSZXR1cm5zIC0xIGlmIG5vIG1hdGNoIGlzIGZvdW5k
LgotICAgYGBgamF2YXNjcmlwdAotICB2YXIgYXJyID0gWydhJywgJ2InLCAnYycsICdkJywgJ2En
XTsKLSAgIGFyci5pbmRleE9mKCdhJyk7ICAgICAgIC8vICAwCi0gIGFyci5pbmRleE9mKCd6Jyk7
ICAgICAgIC8vIC0xCi0gIGFyci5pbmRleE9mKCdhJywgMik7ICAgIC8vICA0Ci0gIGFyci5pbmRl
eE9mKCdhJywgLTEpOyAgIC8vICA0Ci0gIGFyci5pbmRleE9mKCdiJywgMyk7ICAgIC8vIC0xCi0g
IGFyci5pbmRleE9mKCdhJywgMTAwKTsgIC8vIC0xCi0gIGBgYAotICAgQG1ldGhvZCBpbmRleE9m
Ci0gIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgdGhlIGl0ZW0gdG8gc2VhcmNoIGZvcgotICBAcGFy
YW0ge051bWJlcn0gc3RhcnRBdCBvcHRpb25hbCBzdGFydGluZyBsb2NhdGlvbiB0byBzZWFyY2gs
IGRlZmF1bHQgMAotICBAcmV0dXJuIHtOdW1iZXJ9IGluZGV4IG9yIC0xIGlmIG5vdCBmb3VuZAot
ICBAcHVibGljCi0qLwotCi0vKioKLSAgUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGdpdmVuIG9i
amVjdCdzIGxhc3Qgb2NjdXJyZW5jZS4KLSAgSWYgbm8gYHN0YXJ0QXRgIGFyZ3VtZW50IGlzIGdp
dmVuLCB0aGUgc2VhcmNoIHN0YXJ0cyBmcm9tCi0gIHRoZSBsYXN0IHBvc2l0aW9uLiBJZiBpdCdz
IG5lZ2F0aXZlLCB3aWxsIGNvdW50IGJhY2t3YXJkCi0gIGZyb20gdGhlIGVuZCBvZiB0aGUgYXJy
YXkuIFJldHVybnMgLTEgaWYgbm8gbWF0Y2ggaXMgZm91bmQuCi0gICBgYGBqYXZhc2NyaXB0Ci0g
IHZhciBhcnIgPSBbJ2EnLCAnYicsICdjJywgJ2QnLCAnYSddOwotICAgYXJyLmxhc3RJbmRleE9m
KCdhJyk7ICAgICAgIC8vICA0Ci0gIGFyci5sYXN0SW5kZXhPZigneicpOyAgICAgICAvLyAtMQot
ICBhcnIubGFzdEluZGV4T2YoJ2EnLCAyKTsgICAgLy8gIDAKLSAgYXJyLmxhc3RJbmRleE9mKCdh
JywgLTEpOyAgIC8vICA0Ci0gIGFyci5sYXN0SW5kZXhPZignYicsIDMpOyAgICAvLyAgMQotICBh
cnIubGFzdEluZGV4T2YoJ2EnLCAxMDApOyAgLy8gIDQKLSAgYGBgCi0gICBAbWV0aG9kIGxhc3RJ
bmRleE9mCi0gIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgdGhlIGl0ZW0gdG8gc2VhcmNoIGZvcgot
ICBAcGFyYW0ge051bWJlcn0gc3RhcnRBdCBvcHRpb25hbCBzdGFydGluZyBsb2NhdGlvbiB0byBz
ZWFyY2gsIGRlZmF1bHQgMAotICBAcmV0dXJuIHtOdW1iZXJ9IGluZGV4IG9yIC0xIGlmIG5vdCBm
b3VuZAotICBAcHVibGljCi0qLwotCi0vLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0vLyBBUlJBWSBPQlNFUlZFUlMKLS8vCi0KLS8q
KgotICBBZGRzIGFuIGFycmF5IG9ic2VydmVyIHRvIHRoZSByZWNlaXZpbmcgYXJyYXkuIFRoZSBh
cnJheSBvYnNlcnZlciBvYmplY3QKLSAgbm9ybWFsbHkgbXVzdCBpbXBsZW1lbnQgdHdvIG1ldGhv
ZHM6Ci0gICAqIGBhcnJheVdpbGxDaGFuZ2Uob2JzZXJ2ZWRPYmosIHN0YXJ0LCByZW1vdmVDb3Vu
dCwgYWRkQ291bnQpYCAtIFRoaXMgbWV0aG9kIHdpbGwgYmUKLSAgICBjYWxsZWQganVzdCBiZWZv
cmUgdGhlIGFycmF5IGlzIG1vZGlmaWVkLgotICAqIGBhcnJheURpZENoYW5nZShvYnNlcnZlZE9i
aiwgc3RhcnQsIHJlbW92ZUNvdW50LCBhZGRDb3VudClgIC0gVGhpcyBtZXRob2Qgd2lsbCBiZQot
ICAgIGNhbGxlZCBqdXN0IGFmdGVyIHRoZSBhcnJheSBpcyBtb2RpZmllZC4KLSAgIEJvdGggY2Fs
bGJhY2tzIHdpbGwgYmUgcGFzc2VkIHRoZSBvYnNlcnZlZCBvYmplY3QsIHN0YXJ0aW5nIGluZGV4
IG9mIHRoZQotICBjaGFuZ2UgYXMgd2VsbCBhcyBhIGNvdW50IG9mIHRoZSBpdGVtcyB0byBiZSBy
ZW1vdmVkIGFuZCBhZGRlZC4gWW91IGNhbiB1c2UKLSAgdGhlc2UgY2FsbGJhY2tzIHRvIG9wdGlv
bmFsbHkgaW5zcGVjdCB0aGUgYXJyYXkgZHVyaW5nIHRoZSBjaGFuZ2UsIGNsZWFyCi0gIGNhY2hl
cywgb3IgZG8gYW55IG90aGVyIGJvb2trZWVwaW5nIG5lY2Vzc2FyeS4KLSAgIEluIGFkZGl0aW9u
IHRvIHBhc3NpbmcgYSB0YXJnZXQsIHlvdSBjYW4gYWxzbyBpbmNsdWRlIGFuIG9wdGlvbnMgaGFz
aAotICB3aGljaCB5b3UgY2FuIHVzZSB0byBvdmVycmlkZSB0aGUgbWV0aG9kIG5hbWVzIHRoYXQg
d2lsbCBiZSBpbnZva2VkIG9uIHRoZQotICB0YXJnZXQuCi0gICBAbWV0aG9kIGFkZEFycmF5T2Jz
ZXJ2ZXIKLSAgQHBhcmFtIHtPYmplY3R9IHRhcmdldCBUaGUgb2JzZXJ2ZXIgb2JqZWN0LgotICBA
cGFyYW0ge09iamVjdH0gb3B0cyBPcHRpb25hbCBoYXNoIG9mIGNvbmZpZ3VyYXRpb24gb3B0aW9u
cyBpbmNsdWRpbmcKLSAgICBgd2lsbENoYW5nZWAgYW5kIGBkaWRDaGFuZ2VgIG9wdGlvbi4KLSAg
QHJldHVybiB7RW1iZXIuQXJyYXl9IHJlY2VpdmVyCi0gIEBwdWJsaWMKLSovCi0KLS8qKgotICBS
ZW1vdmVzIGFuIGFycmF5IG9ic2VydmVyIGZyb20gdGhlIG9iamVjdCBpZiB0aGUgb2JzZXJ2ZXIg
aXMgY3VycmVudAotICByZWdpc3RlcmVkLiBDYWxsaW5nIHRoaXMgbWV0aG9kIG11bHRpcGxlIHRp
bWVzIHdpdGggdGhlIHNhbWUgb2JqZWN0IHdpbGwKLSAgaGF2ZSBubyBlZmZlY3QuCi0gICBAbWV0
aG9kIHJlbW92ZUFycmF5T2JzZXJ2ZXIKLSAgQHBhcmFtIHtPYmplY3R9IHRhcmdldCBUaGUgb2Jq
ZWN0IG9ic2VydmluZyB0aGUgYXJyYXkuCi0gIEBwYXJhbSB7T2JqZWN0fSBvcHRzIE9wdGlvbmFs
IGhhc2ggb2YgY29uZmlndXJhdGlvbiBvcHRpb25zIGluY2x1ZGluZwotICAgIGB3aWxsQ2hhbmdl
YCBhbmQgYGRpZENoYW5nZWAgb3B0aW9uLgotICBAcmV0dXJuIHtFbWJlci5BcnJheX0gcmVjZWl2
ZXIKLSAgQHB1YmxpYwotKi8KLQotLyoqCi0gIEJlY29tZXMgdHJ1ZSB3aGVuZXZlciB0aGUgYXJy
YXkgY3VycmVudGx5IGhhcyBvYnNlcnZlcnMgd2F0Y2hpbmcgY2hhbmdlcwotICBvbiB0aGUgYXJy
YXkuCi0gICBAcHJvcGVydHkge0Jvb2xlYW59IGhhc0FycmF5T2JzZXJ2ZXJzCi0gIEBwdWJsaWMK
LSovCi0KLS8qKgotICBJZiB5b3UgYXJlIGltcGxlbWVudGluZyBhbiBvYmplY3QgdGhhdCBzdXBw
b3J0cyBgRW1iZXIuQXJyYXlgLCBjYWxsIHRoaXMKLSAgbWV0aG9kIGp1c3QgYmVmb3JlIHRoZSBh
cnJheSBjb250ZW50IGNoYW5nZXMgdG8gbm90aWZ5IGFueSBvYnNlcnZlcnMgYW5kCi0gIGludmFs
aWRhdGUgYW55IHJlbGF0ZWQgcHJvcGVydGllcy4gUGFzcyB0aGUgc3RhcnRpbmcgaW5kZXggb2Yg
dGhlIGNoYW5nZQotICBhcyB3ZWxsIGFzIGEgZGVsdGEgb2YgdGhlIGFtb3VudHMgdG8gY2hhbmdl
LgotICAgQG1ldGhvZCBhcnJheUNvbnRlbnRXaWxsQ2hhbmdlCi0gIEBwYXJhbSB7TnVtYmVyfSBz
dGFydElkeCBUaGUgc3RhcnRpbmcgaW5kZXggaW4gdGhlIGFycmF5IHRoYXQgd2lsbCBjaGFuZ2Uu
Ci0gIEBwYXJhbSB7TnVtYmVyfSByZW1vdmVBbXQgVGhlIG51bWJlciBvZiBpdGVtcyB0aGF0IHdp
bGwgYmUgcmVtb3ZlZC4gSWYgeW91Ci0gICAgcGFzcyBgbnVsbGAgYXNzdW1lcyAwCi0gIEBwYXJh
bSB7TnVtYmVyfSBhZGRBbXQgVGhlIG51bWJlciBvZiBpdGVtcyB0aGF0IHdpbGwgYmUgYWRkZWQu
IElmIHlvdQotICAgIHBhc3MgYG51bGxgIGFzc3VtZXMgMC4KLSAgQHJldHVybiB7RW1iZXIuQXJy
YXl9IHJlY2VpdmVyCi0gIEBwdWJsaWMKLSovCi0KLS8qKgotICBJZiB5b3UgYXJlIGltcGxlbWVu
dGluZyBhbiBvYmplY3QgdGhhdCBzdXBwb3J0cyBgRW1iZXIuQXJyYXlgLCBjYWxsIHRoaXMKLSAg
bWV0aG9kIGp1c3QgYWZ0ZXIgdGhlIGFycmF5IGNvbnRlbnQgY2hhbmdlcyB0byBub3RpZnkgYW55
IG9ic2VydmVycyBhbmQKLSAgaW52YWxpZGF0ZSBhbnkgcmVsYXRlZCBwcm9wZXJ0aWVzLiBQYXNz
IHRoZSBzdGFydGluZyBpbmRleCBvZiB0aGUgY2hhbmdlCi0gIGFzIHdlbGwgYXMgYSBkZWx0YSBv
ZiB0aGUgYW1vdW50cyB0byBjaGFuZ2UuCi0gICBAbWV0aG9kIGFycmF5Q29udGVudERpZENoYW5n
ZQotICBAcGFyYW0ge051bWJlcn0gc3RhcnRJZHggVGhlIHN0YXJ0aW5nIGluZGV4IGluIHRoZSBh
cnJheSB0aGF0IGRpZCBjaGFuZ2UuCi0gIEBwYXJhbSB7TnVtYmVyfSByZW1vdmVBbXQgVGhlIG51
bWJlciBvZiBpdGVtcyB0aGF0IHdlcmUgcmVtb3ZlZC4gSWYgeW91Ci0gICAgcGFzcyBgbnVsbGAg
YXNzdW1lcyAwCi0gIEBwYXJhbSB7TnVtYmVyfSBhZGRBbXQgVGhlIG51bWJlciBvZiBpdGVtcyB0
aGF0IHdlcmUgYWRkZWQuIElmIHlvdQotICAgIHBhc3MgYG51bGxgIGFzc3VtZXMgMC4KLSAgQHJl
dHVybiB7RW1iZXIuQXJyYXl9IHJlY2VpdmVyCi0gIEBwdWJsaWMKLSovCi0KLS8qKgotICBSZXR1
cm5zIGEgc3BlY2lhbCBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCB0byBvYnNlcnZlIGluZGl2aWR1
YWwgcHJvcGVydGllcwotICBvbiB0aGUgYXJyYXkuIEp1c3QgZ2V0IGFuIGVxdWl2YWxlbnQgcHJv
cGVydHkgb24gdGhpcyBvYmplY3QgYW5kIGl0IHdpbGwKLSAgcmV0dXJuIGFuIGVudW1lcmFibGUg
dGhhdCBtYXBzIGF1dG9tYXRpY2FsbHkgdG8gdGhlIG5hbWVkIGtleSBvbiB0aGUKLSAgbWVtYmVy
IG9iamVjdHMuCi0gICBgQGVhY2hgIHNob3VsZCBvbmx5IGJlIHVzZWQgaW4gYSBub24tdGVybWlu
YWwgY29udGV4dC4gRXhhbXBsZToKLSAgIGBgYGphdmFzY3JpcHQKLSAgbXlNZXRob2Q6IGNvbXB1
dGVkKCdwb3N0cy5AZWFjaC5hdXRob3InLCBmdW5jdGlvbigpewotICAgIC4uLgotICB9KTsKLSAg
YGBgCi0gICBJZiB5b3UgbWVyZWx5IHdhbnQgdG8gd2F0Y2ggZm9yIHRoZSBhcnJheSBiZWluZyBj
aGFuZ2VkLCBsaWtlIGFuIG9iamVjdCBiZWluZwotICByZXBsYWNlZCwgYWRkZWQgb3IgcmVtb3Zl
ZCwgdXNlIGBbXWAgaW5zdGVhZCBvZiBgQGVhY2hgLgotICAgYGBgamF2YXNjcmlwdAotICBteU1l
dGhvZDogY29tcHV0ZWQoJ3Bvc3RzLltdJywgZnVuY3Rpb24oKXsKLSAgICAuLi4KLSAgfSk7Ci0g
IGBgYAotICAgQHByb3BlcnR5IEBlYWNoCi0gIEBwdWJsaWMKLSovCi1lbmlmZWQoJ2VtYmVyLXJ1
bnRpbWUvbWl4aW5zL2NvbXBhcmFibGUnLCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwvbWl4aW4n
XSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1ldGFsTWl4aW4pIHsKLSAgJ3VzZSBzdHJpY3Qn
OwotCi0gIC8qKgotICBAbW9kdWxlIGVtYmVyCi0gIEBzdWJtb2R1bGUgZW1iZXItcnVudGltZQot
ICAqLwotCi0gIC8qKgotICAgIEltcGxlbWVudHMgc29tZSBzdGFuZGFyZCBtZXRob2RzIGZvciBj
b21wYXJpbmcgb2JqZWN0cy4gQWRkIHRoaXMgbWl4aW4gdG8KLSAgICBhbnkgY2xhc3MgeW91IGNy
ZWF0ZSB0aGF0IGNhbiBjb21wYXJlIGl0cyBpbnN0YW5jZXMuCi0gIAotICAgIFlvdSBzaG91bGQg
aW1wbGVtZW50IHRoZSBgY29tcGFyZSgpYCBtZXRob2QuCi0gIAotICAgIEBjbGFzcyBDb21wYXJh
YmxlCi0gICAgQG5hbWVzcGFjZSBFbWJlcgotICAgIEBzaW5jZSBFbWJlciAwLjkKLSAgICBAcHJp
dmF0ZQotICAqLwotICBleHBvcnRzLmRlZmF1bHQgPSBfZW1iZXJNZXRhbE1peGluLk1peGluLmNy
ZWF0ZSh7Ci0KLSAgICAvKioKLSAgICAgIF9fUmVxdWlyZWQuX18gWW91IG11c3QgaW1wbGVtZW50
IHRoaXMgbWV0aG9kIHRvIGFwcGx5IHRoaXMgbWl4aW4uCi0gICAgICAgT3ZlcnJpZGUgdG8gcmV0
dXJuIHRoZSByZXN1bHQgb2YgdGhlIGNvbXBhcmlzb24gb2YgdGhlIHR3byBwYXJhbWV0ZXJzLiBU
aGUKLSAgICAgIGNvbXBhcmUgbWV0aG9kIHNob3VsZCByZXR1cm46Ci0gICAgICAgLSBgLTFgIGlm
IGBhIDwgYmAKLSAgICAgIC0gYDBgIGlmIGBhID09IGJgCi0gICAgICAtIGAxYCBpZiBgYSA+IGJg
Ci0gICAgICAgRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByYWlzZXMgYW4gZXhjZXB0aW9uLgotICAg
ICAgIEBtZXRob2QgY29tcGFyZQotICAgICAgQHBhcmFtIGEge09iamVjdH0gdGhlIGZpcnN0IG9i
amVjdCB0byBjb21wYXJlCi0gICAgICBAcGFyYW0gYiB7T2JqZWN0fSB0aGUgc2Vjb25kIG9iamVj
dCB0byBjb21wYXJlCi0gICAgICBAcmV0dXJuIHtOdW1iZXJ9IHRoZSByZXN1bHQgb2YgdGhlIGNv
bXBhcmlzb24KLSAgICAgIEBwcml2YXRlCi0gICAgKi8KLSAgICBjb21wYXJlOiBudWxsCi0gIH0p
OwotfSk7Ci1lbmlmZWQoJ2VtYmVyLXJ1bnRpbWUvbWl4aW5zL2NvbnRhaW5lcl9wcm94eScsIFsn
ZXhwb3J0cycsICdlbWJlci1tZXRhbC9ydW5fbG9vcCcsICdlbWJlci1tZXRhbC9kZWJ1ZycsICdl
bWJlci1tZXRhbC9taXhpbiddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0YWxSdW5fbG9v
cCwgX2VtYmVyTWV0YWxEZWJ1ZywgX2VtYmVyTWV0YWxNaXhpbikgewotICAvKioKLSAgQG1vZHVs
ZSBlbWJlcgotICBAc3VibW9kdWxlIGVtYmVyLXJ1bnRpbWUKLSAgKi8KLSAgJ3VzZSBzdHJpY3Qn
OwotCi0gIGV4cG9ydHMuYnVpbGRGYWtlQ29udGFpbmVyV2l0aERlcHJlY2F0aW9ucyA9IGJ1aWxk
RmFrZUNvbnRhaW5lcldpdGhEZXByZWNhdGlvbnM7Ci0KLSAgLyoqCi0gICAgQ29udGFpbmVyUHJv
eHlNaXhpbiBpcyB1c2VkIHRvIHByb3ZpZGUgcHVibGljIGFjY2VzcyB0byBzcGVjaWZpYwotICAg
IGNvbnRhaW5lciBmdW5jdGlvbmFsaXR5LgotICAKLSAgICBAY2xhc3MgQ29udGFpbmVyUHJveHlN
aXhpbgotICAgIEBwcml2YXRlCi0gICovCi0gIGV4cG9ydHMuZGVmYXVsdCA9IF9lbWJlck1ldGFs
TWl4aW4uTWl4aW4uY3JlYXRlKHsKLSAgICAvKioKLSAgICAgVGhlIGNvbnRhaW5lciBzdG9yZXMg
c3RhdGUuCi0gICAgICBAcHJpdmF0ZQotICAgICBAcHJvcGVydHkge0VtYmVyLkNvbnRhaW5lcn0g
X19jb250YWluZXJfXwotICAgICAqLwotICAgIF9fY29udGFpbmVyX186IG51bGwsCi0KLSAgICAv
KioKLSAgICAgUmV0dXJucyBhbiBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCB0byBwcm92aWRlIGFu
IG93bmVyIHRvIGEKLSAgICAgbWFudWFsbHkgY3JlYXRlZCBpbnN0YW5jZS4KLSAgICAgIEV4YW1w
bGU6Ci0gICAgICBgYGAKLSAgICAgbGV0IG93bmVyID0gRW1iZXIuZ2V0T3duZXIodGhpcyk7Ci0g
ICAgICBVc2VyLmNyZWF0ZSgKLSAgICAgICBvd25lci5vd25lckluamVjdGlvbigpLAotICAgICAg
IHsgdXNlcm5hbWU6ICdyd2pibHVlJyB9Ci0gICAgICkKLSAgICAgYGBgCi0gICAgICBAcHVibGlj
Ci0gICAgIEBtZXRob2Qgb3duZXJJbmplY3Rpb24KLSAgICAgQHJldHVybiB7T2JqZWN0fQotICAg
ICovCi0gICAgb3duZXJJbmplY3Rpb246IGZ1bmN0aW9uICgpIHsKLSAgICAgIHJldHVybiB0aGlz
Ll9fY29udGFpbmVyX18ub3duZXJJbmplY3Rpb24oKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAg
IEdpdmVuIGEgZnVsbE5hbWUgcmV0dXJuIGEgY29ycmVzcG9uZGluZyBpbnN0YW5jZS4KLSAgICAg
IFRoZSBkZWZhdWx0IGJlaGF2aW91ciBpcyBmb3IgbG9va3VwIHRvIHJldHVybiBhIHNpbmdsZXRv
biBpbnN0YW5jZS4KLSAgICAgVGhlIHNpbmdsZXRvbiBpcyBzY29wZWQgdG8gdGhlIGNvbnRhaW5l
ciwgYWxsb3dpbmcgbXVsdGlwbGUgY29udGFpbmVycwotICAgICB0byBhbGwgaGF2ZSB0aGVpciBv
d24gbG9jYWxseSBzY29wZWQgc2luZ2xldG9ucy4KLSAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAg
dmFyIHJlZ2lzdHJ5ID0gbmV3IFJlZ2lzdHJ5KCk7Ci0gICAgIHZhciBjb250YWluZXIgPSByZWdp
c3RyeS5jb250YWluZXIoKTsKLSAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyKCdhcGk6dHdpdHRlcics
IFR3aXR0ZXIpOwotICAgICAgdmFyIHR3aXR0ZXIgPSBjb250YWluZXIubG9va3VwKCdhcGk6dHdp
dHRlcicpOwotICAgICAgdHdpdHRlciBpbnN0YW5jZW9mIFR3aXR0ZXI7IC8vID0+IHRydWUKLSAg
ICAgIC8vIGJ5IGRlZmF1bHQgdGhlIGNvbnRhaW5lciB3aWxsIHJldHVybiBzaW5nbGV0b25zCi0g
ICAgIHZhciB0d2l0dGVyMiA9IGNvbnRhaW5lci5sb29rdXAoJ2FwaTp0d2l0dGVyJyk7Ci0gICAg
IHR3aXR0ZXIyIGluc3RhbmNlb2YgVHdpdHRlcjsgLy8gPT4gdHJ1ZQotICAgICAgdHdpdHRlciA9
PT0gdHdpdHRlcjI7IC8vPT4gdHJ1ZQotICAgICBgYGAKLSAgICAgIElmIHNpbmdsZXRvbnMgYXJl
IG5vdCB3YW50ZWQgYW4gb3B0aW9uYWwgZmxhZyBjYW4gYmUgcHJvdmlkZWQgYXQgbG9va3VwLgot
ICAgICAgYGBgamF2YXNjcmlwdAotICAgICB2YXIgcmVnaXN0cnkgPSBuZXcgUmVnaXN0cnkoKTsK
LSAgICAgdmFyIGNvbnRhaW5lciA9IHJlZ2lzdHJ5LmNvbnRhaW5lcigpOwotICAgICAgcmVnaXN0
cnkucmVnaXN0ZXIoJ2FwaTp0d2l0dGVyJywgVHdpdHRlcik7Ci0gICAgICB2YXIgdHdpdHRlciA9
IGNvbnRhaW5lci5sb29rdXAoJ2FwaTp0d2l0dGVyJywgeyBzaW5nbGV0b246IGZhbHNlIH0pOwot
ICAgICB2YXIgdHdpdHRlcjIgPSBjb250YWluZXIubG9va3VwKCdhcGk6dHdpdHRlcicsIHsgc2lu
Z2xldG9uOiBmYWxzZSB9KTsKLSAgICAgIHR3aXR0ZXIgPT09IHR3aXR0ZXIyOyAvLz0+IGZhbHNl
Ci0gICAgIGBgYAotICAgICAgQHB1YmxpYwotICAgICBAbWV0aG9kIGxvb2t1cAotICAgICBAcGFy
YW0ge1N0cmluZ30gZnVsbE5hbWUKLSAgICAgQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMKLSAgICAg
QHJldHVybiB7YW55fQotICAgICAqLwotICAgIGxvb2t1cDogZnVuY3Rpb24gKGZ1bGxOYW1lLCBv
cHRpb25zKSB7Ci0gICAgICByZXR1cm4gdGhpcy5fX2NvbnRhaW5lcl9fLmxvb2t1cChmdWxsTmFt
ZSwgb3B0aW9ucyk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICBHaXZlbiBhIGZ1bGxOYW1lIHJl
dHVybiB0aGUgY29ycmVzcG9uZGluZyBmYWN0b3J5LgotICAgICAgQHByaXZhdGUKLSAgICAgQG1l
dGhvZCBfbG9va3VwRmFjdG9yeQotICAgICBAcGFyYW0ge1N0cmluZ30gZnVsbE5hbWUKLSAgICAg
QHJldHVybiB7YW55fQotICAgICAqLwotICAgIF9sb29rdXBGYWN0b3J5OiBmdW5jdGlvbiAoZnVs
bE5hbWUsIG9wdGlvbnMpIHsKLSAgICAgIHJldHVybiB0aGlzLl9fY29udGFpbmVyX18ubG9va3Vw
RmFjdG9yeShmdWxsTmFtZSwgb3B0aW9ucyk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICBAcHJp
dmF0ZQotICAgICAqLwotICAgIHdpbGxEZXN0cm95OiBmdW5jdGlvbiAoKSB7Ci0gICAgICB0aGlz
Ll9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwotCi0gICAgICBpZiAodGhpcy5fX2NvbnRh
aW5lcl9fKSB7Ci0gICAgICAgIF9lbWJlck1ldGFsUnVuX2xvb3AuZGVmYXVsdCh0aGlzLl9fY29u
dGFpbmVyX18sICdkZXN0cm95Jyk7Ci0gICAgICB9Ci0gICAgfQotICB9KTsKLQotICBmdW5jdGlv
biBidWlsZEZha2VDb250YWluZXJXaXRoRGVwcmVjYXRpb25zKGNvbnRhaW5lcikgewotICAgIHZh
ciBmYWtlQ29udGFpbmVyID0ge307Ci0gICAgdmFyIHByb3BlcnR5TWFwcGluZ3MgPSB7Ci0gICAg
ICBsb29rdXA6ICdsb29rdXAnLAotICAgICAgbG9va3VwRmFjdG9yeTogJ19sb29rdXBGYWN0b3J5
JwotICAgIH07Ci0KLSAgICBmb3IgKHZhciBjb250YWluZXJQcm9wZXJ0eSBpbiBwcm9wZXJ0eU1h
cHBpbmdzKSB7Ci0gICAgICBmYWtlQ29udGFpbmVyW2NvbnRhaW5lclByb3BlcnR5XSA9IGJ1aWxk
RmFrZUNvbnRhaW5lckZ1bmN0aW9uKGNvbnRhaW5lciwgY29udGFpbmVyUHJvcGVydHksIHByb3Bl
cnR5TWFwcGluZ3NbY29udGFpbmVyUHJvcGVydHldKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFr
ZUNvbnRhaW5lcjsKLSAgfQotCi0gIGZ1bmN0aW9uIGJ1aWxkRmFrZUNvbnRhaW5lckZ1bmN0aW9u
KGNvbnRhaW5lciwgY29udGFpbmVyUHJvcGVydHksIG93bmVyUHJvcGVydHkpIHsKLSAgICByZXR1
cm4gZnVuY3Rpb24gKCkgewotICAgICAgX2VtYmVyTWV0YWxEZWJ1Zy5kZXByZWNhdGUoJ1VzaW5n
IHRoZSBpbmplY3RlZCBgY29udGFpbmVyYCBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIHRoZSBg
Z2V0T3duZXJgIGhlbHBlciB0byBhY2Nlc3MgdGhlIG93bmVyIG9mIHRoaXMgb2JqZWN0IGFuZCB0
aGVuIGNhbGwgYCcgKyBvd25lclByb3BlcnR5ICsgJ2AgaW5zdGVhZC4nLCBmYWxzZSwgewotICAg
ICAgICBpZDogJ2VtYmVyLWFwcGxpY2F0aW9uLmluamVjdGVkLWNvbnRhaW5lcicsCi0gICAgICAg
IHVudGlsOiAnMy4wLjAnLAotICAgICAgICB1cmw6ICdodHRwOi8vZW1iZXJqcy5jb20vZGVwcmVj
YXRpb25zL3YyLngjdG9jX2luamVjdGVkLWNvbnRhaW5lci1hY2Nlc3MnCi0gICAgICB9KTsKLSAg
ICAgIHJldHVybiBjb250YWluZXJbY29udGFpbmVyUHJvcGVydHldLmFwcGx5KGNvbnRhaW5lciwg
YXJndW1lbnRzKTsKLSAgICB9OwotICB9Ci19KTsKLWVuaWZlZCgnZW1iZXItcnVudGltZS9taXhp
bnMvY29udHJvbGxlcicsIFsnZXhwb3J0cycsICdlbWJlci1tZXRhbC9taXhpbicsICdlbWJlci1t
ZXRhbC9hbGlhcycsICdlbWJlci1ydW50aW1lL21peGlucy9hY3Rpb25faGFuZGxlcicsICdlbWJl
ci1ydW50aW1lL21peGlucy9jb250cm9sbGVyX2NvbnRlbnRfbW9kZWxfYWxpYXNfZGVwcmVjYXRp
b24nXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1ldGFsTWl4aW4sIF9lbWJlck1ldGFsQWxp
YXMsIF9lbWJlclJ1bnRpbWVNaXhpbnNBY3Rpb25faGFuZGxlciwgX2VtYmVyUnVudGltZU1peGlu
c0NvbnRyb2xsZXJfY29udGVudF9tb2RlbF9hbGlhc19kZXByZWNhdGlvbikgewotICAndXNlIHN0
cmljdCc7Ci0KLSAgLyoqCi0gICAgQGNsYXNzIENvbnRyb2xsZXJNaXhpbgotICAgIEBuYW1lc3Bh
Y2UgRW1iZXIKLSAgICBAdXNlcyBFbWJlci5BY3Rpb25IYW5kbGVyCi0gICAgQHByaXZhdGUKLSAg
Ki8KLSAgZXhwb3J0cy5kZWZhdWx0ID0gX2VtYmVyTWV0YWxNaXhpbi5NaXhpbi5jcmVhdGUoX2Vt
YmVyUnVudGltZU1peGluc0FjdGlvbl9oYW5kbGVyLmRlZmF1bHQsIF9lbWJlclJ1bnRpbWVNaXhp
bnNDb250cm9sbGVyX2NvbnRlbnRfbW9kZWxfYWxpYXNfZGVwcmVjYXRpb24uZGVmYXVsdCwgewot
ICAgIC8qIGR1Y2t0eXBlIGFzIGEgY29udHJvbGxlciAqLwotICAgIGlzQ29udHJvbGxlcjogdHJ1
ZSwKLQotICAgIC8qKgotICAgICAgVGhlIG9iamVjdCB0byB3aGljaCBhY3Rpb25zIGZyb20gdGhl
IHZpZXcgc2hvdWxkIGJlIHNlbnQuCi0gICAgICAgRm9yIGV4YW1wbGUsIHdoZW4gYSBIYW5kbGVi
YXJzIHRlbXBsYXRlIHVzZXMgdGhlIGB7e2FjdGlvbn19YCBoZWxwZXIsCi0gICAgICBpdCB3aWxs
IGF0dGVtcHQgdG8gc2VuZCB0aGUgYWN0aW9uIHRvIHRoZSB2aWV3J3MgY29udHJvbGxlcidzIGB0
YXJnZXRgLgotICAgICAgIEJ5IGRlZmF1bHQsIHRoZSB2YWx1ZSBvZiB0aGUgdGFyZ2V0IHByb3Bl
cnR5IGlzIHNldCB0byB0aGUgcm91dGVyLCBhbmQKLSAgICAgIGlzIGluamVjdGVkIHdoZW4gYSBj
b250cm9sbGVyIGlzIGluc3RhbnRpYXRlZC4gVGhpcyBpbmplY3Rpb24gaXMgYXBwbGllZAotICAg
ICAgYXMgcGFydCBvZiB0aGUgYXBwbGljYXRpb24ncyBpbml0aWFsaXphdGlvbiBwcm9jZXNzLiBJ
biBtb3N0IGNhc2VzIHRoZQotICAgICAgYHRhcmdldGAgcHJvcGVydHkgd2lsbCBhdXRvbWF0aWNh
bGx5IGJlIHNldCB0byB0aGUgbG9naWNhbCBjb25zdW1lciBvZgotICAgICAgYWN0aW9ucyBmb3Ig
dGhlIGNvbnRyb2xsZXIuCi0gICAgICAgQHByb3BlcnR5IHRhcmdldAotICAgICAgQGRlZmF1bHQg
bnVsbAotICAgICAgQHB1YmxpYwotICAgICovCi0gICAgdGFyZ2V0OiBudWxsLAotCi0gICAgcGFy
ZW50Q29udHJvbGxlcjogbnVsbCwKLQotICAgIHN0b3JlOiBudWxsLAotCi0gICAgLyoqCi0gICAg
ICBUaGUgY29udHJvbGxlcidzIGN1cnJlbnQgbW9kZWwuIFdoZW4gcmV0cmlldmluZyBvciBtb2Rp
ZnlpbmcgYSBjb250cm9sbGVyJ3MKLSAgICAgIG1vZGVsLCB0aGlzIHByb3BlcnR5IHNob3VsZCBi
ZSB1c2VkIGluc3RlYWQgb2YgdGhlIGBjb250ZW50YCBwcm9wZXJ0eS4KLSAgICAgICBAcHJvcGVy
dHkgbW9kZWwKLSAgICAgIEBwdWJsaWMKLSAgICAgKi8KLSAgICBtb2RlbDogbnVsbCwKLQotICAg
IC8qKgotICAgICAgQHByaXZhdGUKLSAgICAqLwotICAgIGNvbnRlbnQ6IF9lbWJlck1ldGFsQWxp
YXMuZGVmYXVsdCgnbW9kZWwnKQotCi0gIH0pOwotfSk7Ci1lbmlmZWQoJ2VtYmVyLXJ1bnRpbWUv
bWl4aW5zL2NvbnRyb2xsZXJfY29udGVudF9tb2RlbF9hbGlhc19kZXByZWNhdGlvbicsIFsnZXhw
b3J0cycsICdlbWJlci1tZXRhbC9kZWJ1ZycsICdlbWJlci1tZXRhbC9taXhpbiddLCBmdW5jdGlv
biAoZXhwb3J0cywgX2VtYmVyTWV0YWxEZWJ1ZywgX2VtYmVyTWV0YWxNaXhpbikgewotICAndXNl
IHN0cmljdCc7Ci0KLSAgLyoKLSAgICBUaGUgQ29udHJvbGxlckNvbnRlbnRNb2RlbEFsaWFzRGVw
cmVjYXRpb24gbWl4aW4gaXMgdXNlZCB0byBwcm92aWRlIGEgdXNlZnVsCi0gICAgZGVwcmVjYXRp
b24gd2FybmluZyB3aGVuIHNwZWNpZnlpbmcgYGNvbnRlbnRgIGRpcmVjdGx5IG9uIGEgYEVtYmVy
LkNvbnRyb2xsZXJgCi0gICAgKHdpdGhvdXQgYWxzbyBzcGVjaWZ5aW5nIGBtb2RlbGApLgotICAK
LSAgICBFbWJlciB2ZXJzaW9ucyBwcmlvciB0byAxLjcgdXNlZCBgbW9kZWxgIGFzIGFuIGFsaWFz
IG9mIGBjb250ZW50YCwgYnV0IGR1ZSB0bwotICAgIG11Y2ggY29uZnVzaW9uIHRoaXMgYWxpYXMg
d2FzIHJldmVyc2VkIChzbyBgY29udGVudGAgaXMgbm93IGFuIGFsaWFzIG9mIGBtb2RlbCkuCi0g
IAotICAgIFRoaXMgY2hhbmdlIHJlZHVjZXMgbWFueSBjYXZlYXRzIHdpdGggbW9kZWwvY29udGVu
dCwgYW5kIGFsc28gc2V0cyBhCi0gICAgc2ltcGxlIGdyb3VuZCBydWxlOiBOZXZlciBzZXQgYSBj
b250cm9sbGVycyBjb250ZW50LCByYXRoZXIgYWx3YXlzIHNldAotICAgIGl0cyBtb2RlbCBhbmQg
ZW1iZXIgd2lsbCBkbyB0aGUgcmlnaHQgdGhpbmcuCi0gIAotICAgIFVzZWQgaW50ZXJuYWxseSBi
eSBFbWJlciBpbiBgRW1iZXIuQ29udHJvbGxlcmAuCi0gICovCi0gIGV4cG9ydHMuZGVmYXVsdCA9
IF9lbWJlck1ldGFsTWl4aW4uTWl4aW4uY3JlYXRlKHsKLSAgICAvKioKLSAgICAgIEBwcml2YXRl
Ci0gICAgICAgTW92ZXMgYGNvbnRlbnRgIHRvIGBtb2RlbGAgIGF0IGV4dGVuZCB0aW1lIGlmIGEg
YG1vZGVsYCBpcyBub3QgYWxzbyBzcGVjaWZpZWQuCi0gICAgICAgTm90ZSB0aGF0IHRoaXMgY3Vy
cmVudGx5IG1vZGlmaWVzIHRoZSBtaXhpbiB0aGVtc2VsdmVzLCB3aGljaCBpcyB0ZWNobmljYWxs
eQotICAgICAgZHViaW91cyBidXQgaXMgcHJhY3RpY2FsbHkgb2YgbGl0dGxlIGNvbnNlcXVlbmNl
LiBUaGlzIG1heSBjaGFuZ2UgaW4gdGhlCi0gICAgICBmdXR1cmUuCi0gICAgICAgQG1ldGhvZCB3
aWxsTWVyZ2VNaXhpbgotICAgICAgQHNpbmNlIDEuNC4wCi0gICAgKi8KLSAgICB3aWxsTWVyZ2VN
aXhpbjogZnVuY3Rpb24gKHByb3BzKSB7Ci0gICAgICAvLyBDYWxsaW5nIHN1cGVyIGlzIG9ubHkg
T0sgaGVyZSBzaW5jZSB3ZSBLTk9XIHRoYXQKLSAgICAgIC8vIHRoZXJlIGlzIGFub3RoZXIgTWl4
aW4gbG9hZGVkIGZpcnN0LgotICAgICAgdGhpcy5fc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRz
KTsKLQotICAgICAgdmFyIG1vZGVsU3BlY2lmaWVkID0gISFwcm9wcy5tb2RlbDsKLQotICAgICAg
aWYgKHByb3BzLmNvbnRlbnQgJiYgIW1vZGVsU3BlY2lmaWVkKSB7Ci0gICAgICAgIHByb3BzLm1v
ZGVsID0gcHJvcHMuY29udGVudDsKLSAgICAgICAgZGVsZXRlIHByb3BzWydjb250ZW50J107Ci0K
LSAgICAgICAgX2VtYmVyTWV0YWxEZWJ1Zy5kZXByZWNhdGUoJ0RvIG5vdCBzcGVjaWZ5IGBjb250
ZW50YCBvbiBhIENvbnRyb2xsZXIsIHVzZSBgbW9kZWxgIGluc3RlYWQuJywgZmFsc2UsIHsgaWQ6
ICdlbWJlci1ydW50aW1lLndpbGwtbWVyZ2UtbWl4aW4nLCB1bnRpbDogJzMuMC4wJyB9KTsKLSAg
ICAgIH0KLSAgICB9Ci0gIH0pOwotfSk7Ci1lbmlmZWQoJ2VtYmVyLXJ1bnRpbWUvbWl4aW5zL2Nv
cHlhYmxlJywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFsL2RlYnVnJywgJ2VtYmVyLW1ldGFsL3By
b3BlcnR5X2dldCcsICdlbWJlci1tZXRhbC9taXhpbicsICdlbWJlci1ydW50aW1lL21peGlucy9m
cmVlemFibGUnLCAnZW1iZXItbWV0YWwvZXJyb3InXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJl
ck1ldGFsRGVidWcsIF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LCBfZW1iZXJNZXRhbE1peGluLCBf
ZW1iZXJSdW50aW1lTWl4aW5zRnJlZXphYmxlLCBfZW1iZXJNZXRhbEVycm9yKSB7Ci0gIC8qKgot
ICBAbW9kdWxlIGVtYmVyCi0gIEBzdWJtb2R1bGUgZW1iZXItcnVudGltZQotICAqLwotCi0gICd1
c2Ugc3RyaWN0JzsKLQotICAvKioKLSAgICBJbXBsZW1lbnRzIHNvbWUgc3RhbmRhcmQgbWV0aG9k
cyBmb3IgY29weWluZyBhbiBvYmplY3QuIEFkZCB0aGlzIG1peGluIHRvCi0gICAgYW55IG9iamVj
dCB5b3UgY3JlYXRlIHRoYXQgY2FuIGNyZWF0ZSBhIGNvcHkgb2YgaXRzZWxmLiBUaGlzIG1peGlu
IGlzCi0gICAgYWRkZWQgYXV0b21hdGljYWxseSB0byB0aGUgYnVpbHQtaW4gYXJyYXkuCi0gIAot
ICAgIFlvdSBzaG91bGQgZ2VuZXJhbGx5IGltcGxlbWVudCB0aGUgYGNvcHkoKWAgbWV0aG9kIHRv
IHJldHVybiBhIGNvcHkgb2YgdGhlCi0gICAgcmVjZWl2ZXIuCi0gIAotICAgIE5vdGUgdGhhdCBg
ZnJvemVuQ29weSgpYCB3aWxsIG9ubHkgd29yayBpZiB5b3UgYWxzbyBpbXBsZW1lbnQKLSAgICBg
RW1iZXIuRnJlZXphYmxlYC4KLSAgCi0gICAgQGNsYXNzIENvcHlhYmxlCi0gICAgQG5hbWVzcGFj
ZSBFbWJlcgotICAgIEBzaW5jZSBFbWJlciAwLjkKLSAgICBAcHJpdmF0ZQotICAqLwotICBleHBv
cnRzLmRlZmF1bHQgPSBfZW1iZXJNZXRhbE1peGluLk1peGluLmNyZWF0ZSh7Ci0gICAgLyoqCi0g
ICAgICBfX1JlcXVpcmVkLl9fIFlvdSBtdXN0IGltcGxlbWVudCB0aGlzIG1ldGhvZCB0byBhcHBs
eSB0aGlzIG1peGluLgotICAgICAgIE92ZXJyaWRlIHRvIHJldHVybiBhIGNvcHkgb2YgdGhlIHJl
Y2VpdmVyLiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIHJhaXNlcwotICAgICAgYW4gZXhjZXB0aW9u
LgotICAgICAgIEBtZXRob2QgY29weQotICAgICAgQHBhcmFtIHtCb29sZWFufSBkZWVwIGlmIGB0
cnVlYCwgYSBkZWVwIGNvcHkgb2YgdGhlIG9iamVjdCBzaG91bGQgYmUgbWFkZQotICAgICAgQHJl
dHVybiB7T2JqZWN0fSBjb3B5IG9mIHJlY2VpdmVyCi0gICAgICBAcHJpdmF0ZQotICAgICovCi0g
ICAgY29weTogbnVsbCwKLQotICAgIC8qKgotICAgICAgSWYgdGhlIG9iamVjdCBpbXBsZW1lbnRz
IGBFbWJlci5GcmVlemFibGVgLCB0aGVuIHRoaXMgd2lsbCByZXR1cm4gYSBuZXcKLSAgICAgIGNv
cHkgaWYgdGhlIG9iamVjdCBpcyBub3QgZnJvemVuIGFuZCB0aGUgcmVjZWl2ZXIgaWYgdGhlIG9i
amVjdCBpcyBmcm96ZW4uCi0gICAgICAgUmFpc2VzIGFuIGV4Y2VwdGlvbiBpZiB5b3UgdHJ5IHRv
IGNhbGwgdGhpcyBtZXRob2Qgb24gYSBvYmplY3QgdGhhdCBkb2VzCi0gICAgICBub3Qgc3VwcG9y
dCBmcmVlemluZy4KLSAgICAgICBZb3Ugc2hvdWxkIHVzZSB0aGlzIG1ldGhvZCB3aGVuZXZlciB5
b3Ugd2FudCBhIGNvcHkgb2YgYSBmcmVlemFibGUgb2JqZWN0Ci0gICAgICBzaW5jZSBhIGZyZWV6
YWJsZSBvYmplY3QgY2FuIHNpbXBseSByZXR1cm4gaXRzZWxmIHdpdGhvdXQgYWN0dWFsbHkKLSAg
ICAgIGNvbnN1bWluZyBtb3JlIG1lbW9yeS4KLSAgICAgICBAbWV0aG9kIGZyb3plbkNvcHkKLSAg
ICAgIEByZXR1cm4ge09iamVjdH0gY29weSBvZiByZWNlaXZlciBvciByZWNlaXZlcgotICAgICAg
QGRlcHJlY2F0ZWQgVXNlIGBPYmplY3QuZnJlZXplYCBpbnN0ZWFkLgotICAgICAgQHByaXZhdGUK
LSAgICAqLwotICAgIGZyb3plbkNvcHk6IGZ1bmN0aW9uICgpIHsKLSAgICAgIF9lbWJlck1ldGFs
RGVidWcuZGVwcmVjYXRlKCdgZnJvemVuQ29weWAgaXMgZGVwcmVjYXRlZCwgdXNlIGBPYmplY3Qu
ZnJlZXplYCBpbnN0ZWFkLicsIGZhbHNlLCB7IGlkOiAnZW1iZXItcnVudGltZS5mcm96ZW4tY29w
eScsIHVudGlsOiAnMy4wLjAnIH0pOwotICAgICAgaWYgKF9lbWJlclJ1bnRpbWVNaXhpbnNGcmVl
emFibGUuRnJlZXphYmxlICYmIF9lbWJlclJ1bnRpbWVNaXhpbnNGcmVlemFibGUuRnJlZXphYmxl
LmRldGVjdCh0aGlzKSkgewotICAgICAgICByZXR1cm4gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQu
Z2V0KHRoaXMsICdpc0Zyb3plbicpID8gdGhpcyA6IHRoaXMuY29weSgpLmZyZWV6ZSgpOwotICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgdGhyb3cgbmV3IF9lbWJlck1ldGFsRXJyb3IuZGVmYXVsdCh0
aGlzICsgJyBkb2VzIG5vdCBzdXBwb3J0IGZyZWV6aW5nJyk7Ci0gICAgICB9Ci0gICAgfQotICB9
KTsKLX0pOwotZW5pZmVkKCdlbWJlci1ydW50aW1lL21peGlucy9lbnVtZXJhYmxlJywgWydleHBv
cnRzJywgJ2VtYmVyLW1ldGFsL3Byb3BlcnR5X2dldCcsICdlbWJlci1tZXRhbC9wcm9wZXJ0eV9z
ZXQnLCAnZW1iZXItbWV0YWwvbWl4aW4nLCAnZW1iZXItbWV0YWwvdXRpbHMnLCAnZW1iZXItbWV0
YWwvY29tcHV0ZWQnLCAnZW1iZXItbWV0YWwvZW1wdHlfb2JqZWN0JywgJ2VtYmVyLW1ldGFsL2Zl
YXR1cmVzJywgJ2VtYmVyLW1ldGFsL3Byb3BlcnR5X2V2ZW50cycsICdlbWJlci1tZXRhbC9ldmVu
dHMnLCAnZW1iZXItcnVudGltZS9jb21wYXJlJywgJ3JlcXVpcmUnXSwgZnVuY3Rpb24gKGV4cG9y
dHMsIF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LCBfZW1iZXJNZXRhbFByb3BlcnR5X3NldCwgX2Vt
YmVyTWV0YWxNaXhpbiwgX2VtYmVyTWV0YWxVdGlscywgX2VtYmVyTWV0YWxDb21wdXRlZCwgX2Vt
YmVyTWV0YWxFbXB0eV9vYmplY3QsIF9lbWJlck1ldGFsRmVhdHVyZXMsIF9lbWJlck1ldGFsUHJv
cGVydHlfZXZlbnRzLCBfZW1iZXJNZXRhbEV2ZW50cywgX2VtYmVyUnVudGltZUNvbXBhcmUsIF9y
ZXF1aXJlKSB7Ci0gIC8qKgotICBAbW9kdWxlIGVtYmVyCi0gIEBzdWJtb2R1bGUgZW1iZXItcnVu
dGltZQotICAqLwotCi0gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4KLSAgLy8gSEVMUEVSUwotICAvLwotCi0gICd1c2Ugc3RyaWN0
JzsKLQotICB2YXIgX2VtYmVyQSA9IHVuZGVmaW5lZDsKLQotICBmdW5jdGlvbiBlbWJlckEoKSB7
Ci0gICAgcmV0dXJuIChfZW1iZXJBIHx8IChfZW1iZXJBID0gX3JlcXVpcmUuZGVmYXVsdCgnZW1i
ZXItcnVudGltZS9zeXN0ZW0vbmF0aXZlX2FycmF5JykuQSkpKCk7Ci0gIH0KLQotICB2YXIgY29u
dGV4dHMgPSBbXTsKLQotICBmdW5jdGlvbiBwb3BDdHgoKSB7Ci0gICAgcmV0dXJuIGNvbnRleHRz
Lmxlbmd0aCA9PT0gMCA/IHt9IDogY29udGV4dHMucG9wKCk7Ci0gIH0KLQotICBmdW5jdGlvbiBw
dXNoQ3R4KGN0eCkgewotICAgIGNvbnRleHRzLnB1c2goY3R4KTsKLSAgICByZXR1cm4gbnVsbDsK
LSAgfQotCi0gIGZ1bmN0aW9uIGl0ZXIoa2V5LCB2YWx1ZSkgewotICAgIHZhciB2YWx1ZVByb3Zp
ZGVkID0gYXJndW1lbnRzLmxlbmd0aCA9PT0gMjsKLQotICAgIGZ1bmN0aW9uIGkoaXRlbSkgewot
ICAgICAgdmFyIGN1ciA9IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldChpdGVtLCBrZXkpOwot
ICAgICAgcmV0dXJuIHZhbHVlUHJvdmlkZWQgPyB2YWx1ZSA9PT0gY3VyIDogISFjdXI7Ci0gICAg
fQotCi0gICAgcmV0dXJuIGk7Ci0gIH0KLQotICAvKioKLSAgICBUaGlzIG1peGluIGRlZmluZXMg
dGhlIGNvbW1vbiBpbnRlcmZhY2UgaW1wbGVtZW50ZWQgYnkgZW51bWVyYWJsZSBvYmplY3RzCi0g
ICAgaW4gRW1iZXIuIE1vc3Qgb2YgdGhlc2UgbWV0aG9kcyBmb2xsb3cgdGhlIHN0YW5kYXJkIEFy
cmF5IGl0ZXJhdGlvbgotICAgIEFQSSBkZWZpbmVkIHVwIHRvIEphdmFTY3JpcHQgMS44IChleGNs
dWRpbmcgbGFuZ3VhZ2Utc3BlY2lmaWMgZmVhdHVyZXMgdGhhdAotICAgIGNhbm5vdCBiZSBlbXVs
YXRlZCBpbiBvbGRlciB2ZXJzaW9ucyBvZiBKYXZhU2NyaXB0KS4KLSAgCi0gICAgVGhpcyBtaXhp
biBpcyBhcHBsaWVkIGF1dG9tYXRpY2FsbHkgdG8gdGhlIEFycmF5IGNsYXNzIG9uIHBhZ2UgbG9h
ZCwgc28geW91Ci0gICAgY2FuIHVzZSBhbnkgb2YgdGhlc2UgbWV0aG9kcyBvbiBzaW1wbGUgYXJy
YXlzLiBJZiBBcnJheSBhbHJlYWR5IGltcGxlbWVudHMKLSAgICBvbmUgb2YgdGhlc2UgbWV0aG9k
cywgdGhlIG1peGluIHdpbGwgbm90IG92ZXJyaWRlIHRoZW0uCi0gIAotICAgICMjIFdyaXRpbmcg
WW91ciBPd24gRW51bWVyYWJsZQotICAKLSAgICBUbyBtYWtlIHlvdXIgb3duIGN1c3RvbSBjbGFz
cyBlbnVtZXJhYmxlLCB5b3UgbmVlZCB0d28gaXRlbXM6Ci0gIAotICAgIDEuIFlvdSBtdXN0IGhh
dmUgYSBsZW5ndGggcHJvcGVydHkuIFRoaXMgcHJvcGVydHkgc2hvdWxkIGNoYW5nZSB3aGVuZXZl
cgotICAgICAgIHRoZSBudW1iZXIgb2YgaXRlbXMgaW4geW91ciBlbnVtZXJhYmxlIG9iamVjdCBj
aGFuZ2VzLiBJZiB5b3UgdXNlIHRoaXMKLSAgICAgICB3aXRoIGFuIGBFbWJlci5PYmplY3RgIHN1
YmNsYXNzLCB5b3Ugc2hvdWxkIGJlIHN1cmUgdG8gY2hhbmdlIHRoZSBsZW5ndGgKLSAgICAgICBw
cm9wZXJ0eSB1c2luZyBgc2V0KCkuYAotICAKLSAgICAyLiBZb3UgbXVzdCBpbXBsZW1lbnQgYG5l
eHRPYmplY3QoKS5gIFNlZSBkb2N1bWVudGF0aW9uLgotICAKLSAgICBPbmNlIHlvdSBoYXZlIHRo
ZXNlIHR3byBtZXRob2RzIGltcGxlbWVudGVkLCBhcHBseSB0aGUgYEVtYmVyLkVudW1lcmFibGVg
IG1peGluCi0gICAgdG8geW91ciBjbGFzcyBhbmQgeW91IHdpbGwgYmUgYWJsZSB0byBlbnVtZXJh
dGUgdGhlIGNvbnRlbnRzIG9mIHlvdXIgb2JqZWN0Ci0gICAgbGlrZSBhbnkgb3RoZXIgY29sbGVj
dGlvbi4KLSAgCi0gICAgIyMgVXNpbmcgRW1iZXIgRW51bWVyYXRpb24gd2l0aCBPdGhlciBMaWJy
YXJpZXMKLSAgCi0gICAgTWFueSBvdGhlciBsaWJyYXJpZXMgcHJvdmlkZSBzb21lIGtpbmQgb2Yg
aXRlcmF0b3Igb3IgZW51bWVyYXRpb24gbGlrZQotICAgIGZhY2lsaXR5LiBUaGlzIGlzIG9mdGVu
IHdoZXJlIHRoZSBtb3N0IGNvbW1vbiBBUEkgY29uZmxpY3RzIG9jY3VyLgotICAgIEVtYmVyJ3Mg
QVBJIGlzIGRlc2lnbmVkIHRvIGJlIGFzIGZyaWVuZGx5IGFzIHBvc3NpYmxlIHdpdGggb3RoZXIK
LSAgICBsaWJyYXJpZXMgYnkgaW1wbGVtZW50aW5nIG9ubHkgbWV0aG9kcyB0aGF0IG1vc3RseSBj
b3JyZXNwb25kIHRvIHRoZQotICAgIEphdmFTY3JpcHQgMS44IEFQSS4KLSAgCi0gICAgQGNsYXNz
IEVudW1lcmFibGUKLSAgICBAbmFtZXNwYWNlIEVtYmVyCi0gICAgQHNpbmNlIEVtYmVyIDAuOQot
ICAgIEBwcml2YXRlCi0gICovCi0gIHZhciBFbnVtZXJhYmxlID0gX2VtYmVyTWV0YWxNaXhpbi5N
aXhpbi5jcmVhdGUoewotCi0gICAgLyoqCi0gICAgICBfX1JlcXVpcmVkLl9fIFlvdSBtdXN0IGlt
cGxlbWVudCB0aGlzIG1ldGhvZCB0byBhcHBseSB0aGlzIG1peGluLgotICAgICAgIEltcGxlbWVu
dCB0aGlzIG1ldGhvZCB0byBtYWtlIHlvdXIgY2xhc3MgZW51bWVyYWJsZS4KLSAgICAgICBUaGlz
IG1ldGhvZCB3aWxsIGJlIGNhbGxlZCByZXBlYXRlZGx5IGR1cmluZyBlbnVtZXJhdGlvbi4gVGhl
IGluZGV4IHZhbHVlCi0gICAgICB3aWxsIGFsd2F5cyBiZWdpbiB3aXRoIDAgYW5kIGluY3JlbWVu
dCBtb25vdG9uaWNhbGx5LiBZb3UgZG9uJ3QgaGF2ZSB0bwotICAgICAgcmVseSBvbiB0aGUgaW5k
ZXggdmFsdWUgdG8gZGV0ZXJtaW5lIHdoYXQgb2JqZWN0IHRvIHJldHVybiwgYnV0IHlvdSBzaG91
bGQKLSAgICAgIGFsd2F5cyBjaGVjayB0aGUgdmFsdWUgYW5kIHN0YXJ0IGZyb20gdGhlIGJlZ2lu
bmluZyB3aGVuIHlvdSBzZWUgdGhlCi0gICAgICByZXF1ZXN0ZWQgaW5kZXggaXMgMC4KLSAgICAg
ICBUaGUgYHByZXZpb3VzT2JqZWN0YCBpcyB0aGUgb2JqZWN0IHRoYXQgd2FzIHJldHVybmVkIGZy
b20gdGhlIGxhc3QgY2FsbAotICAgICAgdG8gYG5leHRPYmplY3RgIGZvciB0aGUgY3VycmVudCBp
dGVyYXRpb24uIFRoaXMgaXMgYSB1c2VmdWwgd2F5IHRvCi0gICAgICBtYW5hZ2UgaXRlcmF0aW9u
IGlmIHlvdSBhcmUgdHJhY2luZyBhIGxpbmtlZCBsaXN0LCBmb3IgZXhhbXBsZS4KLSAgICAgICBG
aW5hbGx5IHRoZSBjb250ZXh0IHBhcmFtZXRlciB3aWxsIGFsd2F5cyBjb250YWluIGEgaGFzaCB5
b3UgY2FuIHVzZSBhcwotICAgICAgYSAic2NyYXRjaHBhZCIgdG8gbWFpbnRhaW4gYW55IG90aGVy
IHN0YXRlIHlvdSBuZWVkIGluIG9yZGVyIHRvIGl0ZXJhdGUKLSAgICAgIHByb3Blcmx5LiBUaGUg
Y29udGV4dCBvYmplY3QgaXMgcmV1c2VkIGFuZCBpcyBub3QgcmVzZXQgYmV0d2VlbgotICAgICAg
aXRlcmF0aW9ucyBzbyBtYWtlIHN1cmUgeW91IHNldHVwIHRoZSBjb250ZXh0IHdpdGggYSBmcmVz
aCBzdGF0ZSB3aGVuZXZlcgotICAgICAgdGhlIGluZGV4IHBhcmFtZXRlciBpcyAwLgotICAgICAg
IEdlbmVyYWxseSBpdGVyYXRvcnMgd2lsbCBjb250aW51ZSB0byBjYWxsIGBuZXh0T2JqZWN0YCB1
bnRpbCB0aGUgaW5kZXgKLSAgICAgIHJlYWNoZXMgdGhlIGN1cnJlbnQgbGVuZ3RoLTEuIElmIHlv
dSBydW4gb3V0IG9mIGRhdGEgYmVmb3JlIHRoaXMKLSAgICAgIHRpbWUgZm9yIHNvbWUgcmVhc29u
LCB5b3Ugc2hvdWxkIHNpbXBseSByZXR1cm4gdW5kZWZpbmVkLgotICAgICAgIFRoZSBkZWZhdWx0
IGltcGxlbWVudGF0aW9uIG9mIHRoaXMgbWV0aG9kIHNpbXBseSBsb29rcyB1cCB0aGUgaW5kZXgu
Ci0gICAgICBUaGlzIHdvcmtzIGdyZWF0IG9uIGFueSBBcnJheS1saWtlIG9iamVjdHMuCi0gICAg
ICAgQG1ldGhvZCBuZXh0T2JqZWN0Ci0gICAgICBAcGFyYW0ge051bWJlcn0gaW5kZXggdGhlIGN1
cnJlbnQgaW5kZXggb2YgdGhlIGl0ZXJhdGlvbgotICAgICAgQHBhcmFtIHtPYmplY3R9IHByZXZp
b3VzT2JqZWN0IHRoZSB2YWx1ZSByZXR1cm5lZCBieSB0aGUgbGFzdCBjYWxsIHRvCi0gICAgICAg
IGBuZXh0T2JqZWN0YC4KLSAgICAgIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0IGEgY29udGV4dCBv
YmplY3QgeW91IGNhbiB1c2UgdG8gbWFpbnRhaW4gc3RhdGUuCi0gICAgICBAcmV0dXJuIHtPYmpl
Y3R9IHRoZSBuZXh0IG9iamVjdCBpbiB0aGUgaXRlcmF0aW9uIG9yIHVuZGVmaW5lZAotICAgICAg
QHByaXZhdGUKLSAgICAqLwotICAgIG5leHRPYmplY3Q6IG51bGwsCi0KLSAgICAvKioKLSAgICAg
IEhlbHBlciBtZXRob2QgcmV0dXJucyB0aGUgZmlyc3Qgb2JqZWN0IGZyb20gYSBjb2xsZWN0aW9u
LiBUaGlzIGlzIHVzdWFsbHkKLSAgICAgIHVzZWQgYnkgYmluZGluZ3MgYW5kIG90aGVyIHBhcnRz
IG9mIHRoZSBmcmFtZXdvcmsgdG8gZXh0cmFjdCBhIHNpbmdsZQotICAgICAgb2JqZWN0IGlmIHRo
ZSBlbnVtZXJhYmxlIGNvbnRhaW5zIG9ubHkgb25lIGl0ZW0uCi0gICAgICAgSWYgeW91IG92ZXJy
aWRlIHRoaXMgbWV0aG9kLCB5b3Ugc2hvdWxkIGltcGxlbWVudCBpdCBzbyB0aGF0IGl0IHdpbGwK
LSAgICAgIGFsd2F5cyByZXR1cm4gdGhlIHNhbWUgdmFsdWUgZWFjaCB0aW1lIGl0IGlzIGNhbGxl
ZC4gSWYgeW91ciBlbnVtZXJhYmxlCi0gICAgICBjb250YWlucyBvbmx5IG9uZSBvYmplY3QsIHRo
aXMgbWV0aG9kIHNob3VsZCBhbHdheXMgcmV0dXJuIHRoYXQgb2JqZWN0LgotICAgICAgSWYgeW91
ciBlbnVtZXJhYmxlIGlzIGVtcHR5LCB0aGlzIG1ldGhvZCBzaG91bGQgcmV0dXJuIGB1bmRlZmlu
ZWRgLgotICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgIHZhciBhcnIgPSBbJ2EnLCAnYicsICdj
J107Ci0gICAgICBhcnIuZ2V0KCdmaXJzdE9iamVjdCcpOyAgLy8gJ2EnCi0gICAgICAgdmFyIGFy
ciA9IFtdOwotICAgICAgYXJyLmdldCgnZmlyc3RPYmplY3QnKTsgIC8vIHVuZGVmaW5lZAotICAg
ICAgYGBgCi0gICAgICAgQHByb3BlcnR5IGZpcnN0T2JqZWN0Ci0gICAgICBAcmV0dXJuIHtPYmpl
Y3R9IHRoZSBvYmplY3Qgb3IgdW5kZWZpbmVkCi0gICAgICBAcmVhZE9ubHkKLSAgICAgIEBwdWJs
aWMKLSAgICAqLwotICAgIGZpcnN0T2JqZWN0OiBfZW1iZXJNZXRhbENvbXB1dGVkLmNvbXB1dGVk
KCdbXScsIGZ1bmN0aW9uICgpIHsKLSAgICAgIGlmIChfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5n
ZXQodGhpcywgJ2xlbmd0aCcpID09PSAwKSB7Ci0gICAgICAgIHJldHVybiB1bmRlZmluZWQ7Ci0g
ICAgICB9Ci0KLSAgICAgIC8vIGhhbmRsZSBnZW5lcmljIGVudW1lcmFibGVzCi0gICAgICB2YXIg
Y29udGV4dCA9IHBvcEN0eCgpOwotICAgICAgdmFyIHJldCA9IHRoaXMubmV4dE9iamVjdCgwLCBu
dWxsLCBjb250ZXh0KTsKLQotICAgICAgcHVzaEN0eChjb250ZXh0KTsKLQotICAgICAgcmV0dXJu
IHJldDsKLSAgICB9KS5yZWFkT25seSgpLAotCi0gICAgLyoqCi0gICAgICBIZWxwZXIgbWV0aG9k
IHJldHVybnMgdGhlIGxhc3Qgb2JqZWN0IGZyb20gYSBjb2xsZWN0aW9uLiBJZiB5b3VyIGVudW1l
cmFibGUKLSAgICAgIGNvbnRhaW5zIG9ubHkgb25lIG9iamVjdCwgdGhpcyBtZXRob2Qgc2hvdWxk
IGFsd2F5cyByZXR1cm4gdGhhdCBvYmplY3QuCi0gICAgICBJZiB5b3VyIGVudW1lcmFibGUgaXMg
ZW1wdHksIHRoaXMgbWV0aG9kIHNob3VsZCByZXR1cm4gYHVuZGVmaW5lZGAuCi0gICAgICAgYGBg
amF2YXNjcmlwdAotICAgICAgdmFyIGFyciA9IFsnYScsICdiJywgJ2MnXTsKLSAgICAgIGFyci5n
ZXQoJ2xhc3RPYmplY3QnKTsgIC8vICdjJwotICAgICAgIHZhciBhcnIgPSBbXTsKLSAgICAgIGFy
ci5nZXQoJ2xhc3RPYmplY3QnKTsgIC8vIHVuZGVmaW5lZAotICAgICAgYGBgCi0gICAgICAgQHBy
b3BlcnR5IGxhc3RPYmplY3QKLSAgICAgIEByZXR1cm4ge09iamVjdH0gdGhlIGxhc3Qgb2JqZWN0
IG9yIHVuZGVmaW5lZAotICAgICAgQHJlYWRPbmx5Ci0gICAgICBAcHVibGljCi0gICAgKi8KLSAg
ICBsYXN0T2JqZWN0OiBfZW1iZXJNZXRhbENvbXB1dGVkLmNvbXB1dGVkKCdbXScsIGZ1bmN0aW9u
ICgpIHsKLSAgICAgIHZhciBsZW4gPSBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywg
J2xlbmd0aCcpOwotCi0gICAgICBpZiAobGVuID09PSAwKSB7Ci0gICAgICAgIHJldHVybiB1bmRl
ZmluZWQ7Ci0gICAgICB9Ci0KLSAgICAgIHZhciBjb250ZXh0ID0gcG9wQ3R4KCk7Ci0gICAgICB2
YXIgaWR4ID0gMDsKLSAgICAgIHZhciBsYXN0ID0gbnVsbDsKLSAgICAgIHZhciBjdXI7Ci0KLSAg
ICAgIGRvIHsKLSAgICAgICAgbGFzdCA9IGN1cjsKLSAgICAgICAgY3VyID0gdGhpcy5uZXh0T2Jq
ZWN0KGlkeCsrLCBsYXN0LCBjb250ZXh0KTsKLSAgICAgIH0gd2hpbGUgKGN1ciAhPT0gdW5kZWZp
bmVkKTsKLQotICAgICAgcHVzaEN0eChjb250ZXh0KTsKLQotICAgICAgcmV0dXJuIGxhc3Q7Ci0g
ICAgfSkucmVhZE9ubHkoKSwKLQotICAgIC8qKgotICAgICAgUmV0dXJucyBgdHJ1ZWAgaWYgdGhl
IHBhc3NlZCBvYmplY3QgY2FuIGJlIGZvdW5kIGluIHRoZSByZWNlaXZlci4gVGhlCi0gICAgICBk
ZWZhdWx0IHZlcnNpb24gd2lsbCBpdGVyYXRlIHRocm91Z2ggdGhlIGVudW1lcmFibGUgdW50aWwg
dGhlIG9iamVjdAotICAgICAgaXMgZm91bmQuIFlvdSBtYXkgd2FudCB0byBvdmVycmlkZSB0aGlz
IHdpdGggYSBtb3JlIGVmZmljaWVudCB2ZXJzaW9uLgotICAgICAgIGBgYGphdmFzY3JpcHQKLSAg
ICAgIHZhciBhcnIgPSBbJ2EnLCAnYicsICdjJ107Ci0gICAgICAgYXJyLmNvbnRhaW5zKCdhJyk7
IC8vIHRydWUKLSAgICAgIGFyci5jb250YWlucygneicpOyAvLyBmYWxzZQotICAgICAgYGBgCi0g
ICAgICAgQG1ldGhvZCBjb250YWlucwotICAgICAgQHBhcmFtIHtPYmplY3R9IG9iaiBUaGUgb2Jq
ZWN0IHRvIHNlYXJjaCBmb3IuCi0gICAgICBAcmV0dXJuIHtCb29sZWFufSBgdHJ1ZWAgaWYgb2Jq
ZWN0IGlzIGZvdW5kIGluIGVudW1lcmFibGUuCi0gICAgICBAcHVibGljCi0gICAgKi8KLSAgICBj
b250YWluczogZnVuY3Rpb24gKG9iaikgewotICAgICAgdmFyIGZvdW5kID0gdGhpcy5maW5kKGZ1
bmN0aW9uIChpdGVtKSB7Ci0gICAgICAgIHJldHVybiBpdGVtID09PSBvYmo7Ci0gICAgICB9KTsK
LQotICAgICAgcmV0dXJuIGZvdW5kICE9PSB1bmRlZmluZWQ7Ci0gICAgfSwKLQotICAgIC8qKgot
ICAgICAgSXRlcmF0ZXMgdGhyb3VnaCB0aGUgZW51bWVyYWJsZSwgY2FsbGluZyB0aGUgcGFzc2Vk
IGZ1bmN0aW9uIG9uIGVhY2gKLSAgICAgIGl0ZW0uIFRoaXMgbWV0aG9kIGNvcnJlc3BvbmRzIHRv
IHRoZSBgZm9yRWFjaCgpYCBtZXRob2QgZGVmaW5lZCBpbgotICAgICAgSmF2YVNjcmlwdCAxLjYu
Ci0gICAgICAgVGhlIGNhbGxiYWNrIG1ldGhvZCB5b3UgcHJvdmlkZSBzaG91bGQgaGF2ZSB0aGUg
Zm9sbG93aW5nIHNpZ25hdHVyZSAoYWxsCi0gICAgICBwYXJhbWV0ZXJzIGFyZSBvcHRpb25hbCk6
Ci0gICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgZnVuY3Rpb24oaXRlbSwgaW5kZXgsIGVudW1l
cmFibGUpOwotICAgICAgYGBgCi0gICAgICAgLSBgaXRlbWAgaXMgdGhlIGN1cnJlbnQgaXRlbSBp
biB0aGUgaXRlcmF0aW9uLgotICAgICAgLSBgaW5kZXhgIGlzIHRoZSBjdXJyZW50IGluZGV4IGlu
IHRoZSBpdGVyYXRpb24uCi0gICAgICAtIGBlbnVtZXJhYmxlYCBpcyB0aGUgZW51bWVyYWJsZSBv
YmplY3QgaXRzZWxmLgotICAgICAgIE5vdGUgdGhhdCBpbiBhZGRpdGlvbiB0byBhIGNhbGxiYWNr
LCB5b3UgY2FuIGFsc28gcGFzcyBhbiBvcHRpb25hbCB0YXJnZXQKLSAgICAgIG9iamVjdCB0aGF0
IHdpbGwgYmUgc2V0IGFzIGB0aGlzYCBvbiB0aGUgY29udGV4dC4gVGhpcyBpcyBhIGdvb2Qgd2F5
Ci0gICAgICB0byBnaXZlIHlvdXIgaXRlcmF0b3IgZnVuY3Rpb24gYWNjZXNzIHRvIHRoZSBjdXJy
ZW50IG9iamVjdC4KLSAgICAgICBAbWV0aG9kIGZvckVhY2gKLSAgICAgIEBwYXJhbSB7RnVuY3Rp
b259IGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBleGVjdXRlCi0gICAgICBAcGFyYW0ge09iamVj
dH0gW3RhcmdldF0gVGhlIHRhcmdldCBvYmplY3QgdG8gdXNlCi0gICAgICBAcmV0dXJuIHtPYmpl
Y3R9IHJlY2VpdmVyCi0gICAgICBAcHVibGljCi0gICAgKi8KLSAgICBmb3JFYWNoOiBmdW5jdGlv
biAoY2FsbGJhY2ssIHRhcmdldCkgewotICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1
bmN0aW9uJykgewotICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCk7Ci0gICAgICB9Ci0KLSAg
ICAgIHZhciBjb250ZXh0ID0gcG9wQ3R4KCk7Ci0gICAgICB2YXIgbGVuID0gX2VtYmVyTWV0YWxQ
cm9wZXJ0eV9nZXQuZ2V0KHRoaXMsICdsZW5ndGgnKTsKLSAgICAgIHZhciBsYXN0ID0gbnVsbDsK
LQotICAgICAgaWYgKHRhcmdldCA9PT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgIHRhcmdldCA9IG51
bGw7Ci0gICAgICB9Ci0KLSAgICAgIGZvciAodmFyIGlkeCA9IDA7IGlkeCA8IGxlbjsgaWR4Kysp
IHsKLSAgICAgICAgdmFyIG5leHQgPSB0aGlzLm5leHRPYmplY3QoaWR4LCBsYXN0LCBjb250ZXh0
KTsKLSAgICAgICAgY2FsbGJhY2suY2FsbCh0YXJnZXQsIG5leHQsIGlkeCwgdGhpcyk7Ci0gICAg
ICAgIGxhc3QgPSBuZXh0OwotICAgICAgfQotCi0gICAgICBsYXN0ID0gbnVsbDsKLSAgICAgIGNv
bnRleHQgPSBwdXNoQ3R4KGNvbnRleHQpOwotCi0gICAgICByZXR1cm4gdGhpczsKLSAgICB9LAot
Ci0gICAgLyoqCi0gICAgICBBbGlhcyBmb3IgYG1hcEJ5YAotICAgICAgIEBtZXRob2QgZ2V0RWFj
aAotICAgICAgQHBhcmFtIHtTdHJpbmd9IGtleSBuYW1lIG9mIHRoZSBwcm9wZXJ0eQotICAgICAg
QHJldHVybiB7QXJyYXl9IFRoZSBtYXBwZWQgYXJyYXkuCi0gICAgICBAcHVibGljCi0gICAgKi8K
LSAgICBnZXRFYWNoOiBfZW1iZXJNZXRhbE1peGluLmFsaWFzTWV0aG9kKCdtYXBCeScpLAotCi0g
ICAgLyoqCi0gICAgICBTZXRzIHRoZSB2YWx1ZSBvbiB0aGUgbmFtZWQgcHJvcGVydHkgZm9yIGVh
Y2ggbWVtYmVyLiBUaGlzIGlzIG1vcmUKLSAgICAgIGVmZmljaWVudCB0aGFuIHVzaW5nIG90aGVy
IG1ldGhvZHMgZGVmaW5lZCBvbiB0aGlzIGhlbHBlci4gSWYgdGhlIG9iamVjdAotICAgICAgaW1w
bGVtZW50cyBFbWJlci5PYnNlcnZhYmxlLCB0aGUgdmFsdWUgd2lsbCBiZSBjaGFuZ2VkIHRvIGBz
ZXQoKSxgIG90aGVyd2lzZQotICAgICAgaXQgd2lsbCBiZSBzZXQgZGlyZWN0bHkuIGBudWxsYCBv
YmplY3RzIGFyZSBza2lwcGVkLgotICAgICAgIEBtZXRob2Qgc2V0RWFjaAotICAgICAgQHBhcmFt
IHtTdHJpbmd9IGtleSBUaGUga2V5IHRvIHNldAotICAgICAgQHBhcmFtIHtPYmplY3R9IHZhbHVl
IFRoZSBvYmplY3QgdG8gc2V0Ci0gICAgICBAcmV0dXJuIHtPYmplY3R9IHJlY2VpdmVyCi0gICAg
ICBAcHVibGljCi0gICAgKi8KLSAgICBzZXRFYWNoOiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkgewot
ICAgICAgcmV0dXJuIHRoaXMuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkgewotICAgICAgICBfZW1i
ZXJNZXRhbFByb3BlcnR5X3NldC5zZXQoaXRlbSwga2V5LCB2YWx1ZSk7Ci0gICAgICB9KTsKLSAg
ICB9LAotCi0gICAgLyoqCi0gICAgICBNYXBzIGFsbCBvZiB0aGUgaXRlbXMgaW4gdGhlIGVudW1l
cmF0aW9uIHRvIGFub3RoZXIgdmFsdWUsIHJldHVybmluZwotICAgICAgYSBuZXcgYXJyYXkuIFRo
aXMgbWV0aG9kIGNvcnJlc3BvbmRzIHRvIGBtYXAoKWAgZGVmaW5lZCBpbiBKYXZhU2NyaXB0IDEu
Ni4KLSAgICAgICBUaGUgY2FsbGJhY2sgbWV0aG9kIHlvdSBwcm92aWRlIHNob3VsZCBoYXZlIHRo
ZSBmb2xsb3dpbmcgc2lnbmF0dXJlIChhbGwKLSAgICAgIHBhcmFtZXRlcnMgYXJlIG9wdGlvbmFs
KToKLSAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICBmdW5jdGlvbihpdGVtLCBpbmRleCwgZW51
bWVyYWJsZSk7Ci0gICAgICBgYGAKLSAgICAgICAtIGBpdGVtYCBpcyB0aGUgY3VycmVudCBpdGVt
IGluIHRoZSBpdGVyYXRpb24uCi0gICAgICAtIGBpbmRleGAgaXMgdGhlIGN1cnJlbnQgaW5kZXgg
aW4gdGhlIGl0ZXJhdGlvbi4KLSAgICAgIC0gYGVudW1lcmFibGVgIGlzIHRoZSBlbnVtZXJhYmxl
IG9iamVjdCBpdHNlbGYuCi0gICAgICAgSXQgc2hvdWxkIHJldHVybiB0aGUgbWFwcGVkIHZhbHVl
LgotICAgICAgIE5vdGUgdGhhdCBpbiBhZGRpdGlvbiB0byBhIGNhbGxiYWNrLCB5b3UgY2FuIGFs
c28gcGFzcyBhbiBvcHRpb25hbCB0YXJnZXQKLSAgICAgIG9iamVjdCB0aGF0IHdpbGwgYmUgc2V0
IGFzIGB0aGlzYCBvbiB0aGUgY29udGV4dC4gVGhpcyBpcyBhIGdvb2Qgd2F5Ci0gICAgICB0byBn
aXZlIHlvdXIgaXRlcmF0b3IgZnVuY3Rpb24gYWNjZXNzIHRvIHRoZSBjdXJyZW50IG9iamVjdC4K
LSAgICAgICBAbWV0aG9kIG1hcAotICAgICAgQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhl
IGNhbGxiYWNrIHRvIGV4ZWN1dGUKLSAgICAgIEBwYXJhbSB7T2JqZWN0fSBbdGFyZ2V0XSBUaGUg
dGFyZ2V0IG9iamVjdCB0byB1c2UKLSAgICAgIEByZXR1cm4ge0FycmF5fSBUaGUgbWFwcGVkIGFy
cmF5LgotICAgICAgQHB1YmxpYwotICAgICovCi0gICAgbWFwOiBmdW5jdGlvbiAoY2FsbGJhY2ss
IHRhcmdldCkgewotICAgICAgdmFyIHJldCA9IGVtYmVyQSgpOwotCi0gICAgICB0aGlzLmZvckVh
Y2goZnVuY3Rpb24gKHgsIGlkeCwgaSkgewotICAgICAgICByZXRbaWR4XSA9IGNhbGxiYWNrLmNh
bGwodGFyZ2V0LCB4LCBpZHgsIGkpOwotICAgICAgfSk7Ci0KLSAgICAgIHJldHVybiByZXQ7Ci0g
ICAgfSwKLQotICAgIC8qKgotICAgICAgU2ltaWxhciB0byBtYXAsIHRoaXMgc3BlY2lhbGl6ZWQg
ZnVuY3Rpb24gcmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIG5hbWVkCi0gICAgICBwcm9wZXJ0eSBv
biBhbGwgaXRlbXMgaW4gdGhlIGVudW1lcmF0aW9uLgotICAgICAgIEBtZXRob2QgbWFwQnkKLSAg
ICAgIEBwYXJhbSB7U3RyaW5nfSBrZXkgbmFtZSBvZiB0aGUgcHJvcGVydHkKLSAgICAgIEByZXR1
cm4ge0FycmF5fSBUaGUgbWFwcGVkIGFycmF5LgotICAgICAgQHB1YmxpYwotICAgICovCi0gICAg
bWFwQnk6IGZ1bmN0aW9uIChrZXkpIHsKLSAgICAgIHJldHVybiB0aGlzLm1hcChmdW5jdGlvbiAo
bmV4dCkgewotICAgICAgICByZXR1cm4gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KG5leHQs
IGtleSk7Ci0gICAgICB9KTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICBSZXR1cm5zIGFuIGFy
cmF5IHdpdGggYWxsIG9mIHRoZSBpdGVtcyBpbiB0aGUgZW51bWVyYXRpb24gdGhhdCB0aGUgcGFz
c2VkCi0gICAgICBmdW5jdGlvbiByZXR1cm5zIHRydWUgZm9yLiBUaGlzIG1ldGhvZCBjb3JyZXNw
b25kcyB0byBgZmlsdGVyKClgIGRlZmluZWQgaW4KLSAgICAgIEphdmFTY3JpcHQgMS42LgotICAg
ICAgIFRoZSBjYWxsYmFjayBtZXRob2QgeW91IHByb3ZpZGUgc2hvdWxkIGhhdmUgdGhlIGZvbGxv
d2luZyBzaWduYXR1cmUgKGFsbAotICAgICAgcGFyYW1ldGVycyBhcmUgb3B0aW9uYWwpOgotICAg
ICAgIGBgYGphdmFzY3JpcHQKLSAgICAgIGZ1bmN0aW9uKGl0ZW0sIGluZGV4LCBlbnVtZXJhYmxl
KTsKLSAgICAgIGBgYAotICAgICAgIC0gYGl0ZW1gIGlzIHRoZSBjdXJyZW50IGl0ZW0gaW4gdGhl
IGl0ZXJhdGlvbi4KLSAgICAgIC0gYGluZGV4YCBpcyB0aGUgY3VycmVudCBpbmRleCBpbiB0aGUg
aXRlcmF0aW9uLgotICAgICAgLSBgZW51bWVyYWJsZWAgaXMgdGhlIGVudW1lcmFibGUgb2JqZWN0
IGl0c2VsZi4KLSAgICAgICBJdCBzaG91bGQgcmV0dXJuIGB0cnVlYCB0byBpbmNsdWRlIHRoZSBp
dGVtIGluIHRoZSByZXN1bHRzLCBgZmFsc2VgCi0gICAgICBvdGhlcndpc2UuCi0gICAgICAgTm90
ZSB0aGF0IGluIGFkZGl0aW9uIHRvIGEgY2FsbGJhY2ssIHlvdSBjYW4gYWxzbyBwYXNzIGFuIG9w
dGlvbmFsIHRhcmdldAotICAgICAgb2JqZWN0IHRoYXQgd2lsbCBiZSBzZXQgYXMgYHRoaXNgIG9u
IHRoZSBjb250ZXh0LiBUaGlzIGlzIGEgZ29vZCB3YXkKLSAgICAgIHRvIGdpdmUgeW91ciBpdGVy
YXRvciBmdW5jdGlvbiBhY2Nlc3MgdG8gdGhlIGN1cnJlbnQgb2JqZWN0LgotICAgICAgIEBtZXRo
b2QgZmlsdGVyCi0gICAgICBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgY2FsbGJhY2sg
dG8gZXhlY3V0ZQotICAgICAgQHBhcmFtIHtPYmplY3R9IFt0YXJnZXRdIFRoZSB0YXJnZXQgb2Jq
ZWN0IHRvIHVzZQotICAgICAgQHJldHVybiB7QXJyYXl9IEEgZmlsdGVyZWQgYXJyYXkuCi0gICAg
ICBAcHVibGljCi0gICAgKi8KLSAgICBmaWx0ZXI6IGZ1bmN0aW9uIChjYWxsYmFjaywgdGFyZ2V0
KSB7Ci0gICAgICB2YXIgcmV0ID0gZW1iZXJBKCk7Ci0KLSAgICAgIHRoaXMuZm9yRWFjaChmdW5j
dGlvbiAoeCwgaWR4LCBpKSB7Ci0gICAgICAgIGlmIChjYWxsYmFjay5jYWxsKHRhcmdldCwgeCwg
aWR4LCBpKSkgewotICAgICAgICAgIHJldC5wdXNoKHgpOwotICAgICAgICB9Ci0gICAgICB9KTsK
LQotICAgICAgcmV0dXJuIHJldDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICBSZXR1cm5zIGFu
IGFycmF5IHdpdGggYWxsIG9mIHRoZSBpdGVtcyBpbiB0aGUgZW51bWVyYXRpb24gd2hlcmUgdGhl
IHBhc3NlZAotICAgICAgZnVuY3Rpb24gcmV0dXJucyBmYWxzZS4gVGhpcyBtZXRob2QgaXMgdGhl
IGludmVyc2Ugb2YgZmlsdGVyKCkuCi0gICAgICAgVGhlIGNhbGxiYWNrIG1ldGhvZCB5b3UgcHJv
dmlkZSBzaG91bGQgaGF2ZSB0aGUgZm9sbG93aW5nIHNpZ25hdHVyZSAoYWxsCi0gICAgICBwYXJh
bWV0ZXJzIGFyZSBvcHRpb25hbCk6Ci0gICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgZnVuY3Rp
b24oaXRlbSwgaW5kZXgsIGVudW1lcmFibGUpOwotICAgICAgYGBgCi0gICAgICAgLSAqaXRlbSog
aXMgdGhlIGN1cnJlbnQgaXRlbSBpbiB0aGUgaXRlcmF0aW9uLgotICAgICAgLSAqaW5kZXgqIGlz
IHRoZSBjdXJyZW50IGluZGV4IGluIHRoZSBpdGVyYXRpb24KLSAgICAgIC0gKmVudW1lcmFibGUq
IGlzIHRoZSBlbnVtZXJhYmxlIG9iamVjdCBpdHNlbGYuCi0gICAgICAgSXQgc2hvdWxkIHJldHVy
biBhIGZhbHNleSB2YWx1ZSB0byBpbmNsdWRlIHRoZSBpdGVtIGluIHRoZSByZXN1bHRzLgotICAg
ICAgIE5vdGUgdGhhdCBpbiBhZGRpdGlvbiB0byBhIGNhbGxiYWNrLCB5b3UgY2FuIGFsc28gcGFz
cyBhbiBvcHRpb25hbCB0YXJnZXQKLSAgICAgIG9iamVjdCB0aGF0IHdpbGwgYmUgc2V0IGFzICJ0
aGlzIiBvbiB0aGUgY29udGV4dC4gVGhpcyBpcyBhIGdvb2Qgd2F5Ci0gICAgICB0byBnaXZlIHlv
dXIgaXRlcmF0b3IgZnVuY3Rpb24gYWNjZXNzIHRvIHRoZSBjdXJyZW50IG9iamVjdC4KLSAgICAg
ICBAbWV0aG9kIHJlamVjdAotICAgICAgQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGNh
bGxiYWNrIHRvIGV4ZWN1dGUKLSAgICAgIEBwYXJhbSB7T2JqZWN0fSBbdGFyZ2V0XSBUaGUgdGFy
Z2V0IG9iamVjdCB0byB1c2UKLSAgICAgIEByZXR1cm4ge0FycmF5fSBBIHJlamVjdGVkIGFycmF5
LgotICAgICAgQHB1YmxpYwotICAgICovCi0gICAgcmVqZWN0OiBmdW5jdGlvbiAoY2FsbGJhY2ss
IHRhcmdldCkgewotICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uICgpIHsKLSAgICAg
ICAgcmV0dXJuICFjYWxsYmFjay5hcHBseSh0YXJnZXQsIGFyZ3VtZW50cyk7Ci0gICAgICB9KTsK
LSAgICB9LAotCi0gICAgLyoqCi0gICAgICBSZXR1cm5zIGFuIGFycmF5IHdpdGgganVzdCB0aGUg
aXRlbXMgd2l0aCB0aGUgbWF0Y2hlZCBwcm9wZXJ0eS4gWW91Ci0gICAgICBjYW4gcGFzcyBhbiBv
cHRpb25hbCBzZWNvbmQgYXJndW1lbnQgd2l0aCB0aGUgdGFyZ2V0IHZhbHVlLiBPdGhlcndpc2UK
LSAgICAgIHRoaXMgd2lsbCBtYXRjaCBhbnkgcHJvcGVydHkgdGhhdCBldmFsdWF0ZXMgdG8gYHRy
dWVgLgotICAgICAgIEBtZXRob2QgZmlsdGVyQnkKLSAgICAgIEBwYXJhbSB7U3RyaW5nfSBrZXkg
dGhlIHByb3BlcnR5IHRvIHRlc3QKLSAgICAgIEBwYXJhbSB7Kn0gW3ZhbHVlXSBvcHRpb25hbCB2
YWx1ZSB0byB0ZXN0IGFnYWluc3QuCi0gICAgICBAcmV0dXJuIHtBcnJheX0gZmlsdGVyZWQgYXJy
YXkKLSAgICAgIEBwdWJsaWMKLSAgICAqLwotICAgIGZpbHRlckJ5OiBmdW5jdGlvbiAoa2V5LCB2
YWx1ZSkgewotICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyKGl0ZXIuYXBwbHkodGhpcywgYXJndW1l
bnRzKSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAgUmV0dXJucyBhbiBhcnJheSB3aXRoIHRo
ZSBpdGVtcyB0aGF0IGRvIG5vdCBoYXZlIHRydXRoeSB2YWx1ZXMgZm9yCi0gICAgICBrZXkuICBZ
b3UgY2FuIHBhc3MgYW4gb3B0aW9uYWwgc2Vjb25kIGFyZ3VtZW50IHdpdGggdGhlIHRhcmdldCB2
YWx1ZS4gIE90aGVyd2lzZQotICAgICAgdGhpcyB3aWxsIG1hdGNoIGFueSBwcm9wZXJ0eSB0aGF0
IGV2YWx1YXRlcyB0byBmYWxzZS4KLSAgICAgICBAbWV0aG9kIHJlamVjdEJ5Ci0gICAgICBAcGFy
YW0ge1N0cmluZ30ga2V5IHRoZSBwcm9wZXJ0eSB0byB0ZXN0Ci0gICAgICBAcGFyYW0ge1N0cmlu
Z30gW3ZhbHVlXSBvcHRpb25hbCB2YWx1ZSB0byB0ZXN0IGFnYWluc3QuCi0gICAgICBAcmV0dXJu
IHtBcnJheX0gcmVqZWN0ZWQgYXJyYXkKLSAgICAgIEBwdWJsaWMKLSAgICAqLwotICAgIHJlamVj
dEJ5OiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkgewotICAgICAgdmFyIGV4YWN0VmFsdWUgPSBmdW5j
dGlvbiAoaXRlbSkgewotICAgICAgICByZXR1cm4gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0
KGl0ZW0sIGtleSkgPT09IHZhbHVlOwotICAgICAgfTsKLQotICAgICAgdmFyIGhhc1ZhbHVlID0g
ZnVuY3Rpb24gKGl0ZW0pIHsKLSAgICAgICAgcmV0dXJuICEhX2VtYmVyTWV0YWxQcm9wZXJ0eV9n
ZXQuZ2V0KGl0ZW0sIGtleSk7Ci0gICAgICB9OwotCi0gICAgICB2YXIgdXNlID0gYXJndW1lbnRz
Lmxlbmd0aCA9PT0gMiA/IGV4YWN0VmFsdWUgOiBoYXNWYWx1ZTsKLQotICAgICAgcmV0dXJuIHRo
aXMucmVqZWN0KHVzZSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAgUmV0dXJucyB0aGUgZmly
c3QgaXRlbSBpbiB0aGUgYXJyYXkgZm9yIHdoaWNoIHRoZSBjYWxsYmFjayByZXR1cm5zIHRydWUu
Ci0gICAgICBUaGlzIG1ldGhvZCB3b3JrcyBzaW1pbGFyIHRvIHRoZSBgZmlsdGVyKClgIG1ldGhv
ZCBkZWZpbmVkIGluIEphdmFTY3JpcHQgMS42Ci0gICAgICBleGNlcHQgdGhhdCBpdCB3aWxsIHN0
b3Agd29ya2luZyBvbiB0aGUgYXJyYXkgb25jZSBhIG1hdGNoIGlzIGZvdW5kLgotICAgICAgIFRo
ZSBjYWxsYmFjayBtZXRob2QgeW91IHByb3ZpZGUgc2hvdWxkIGhhdmUgdGhlIGZvbGxvd2luZyBz
aWduYXR1cmUgKGFsbAotICAgICAgcGFyYW1ldGVycyBhcmUgb3B0aW9uYWwpOgotICAgICAgIGBg
YGphdmFzY3JpcHQKLSAgICAgIGZ1bmN0aW9uKGl0ZW0sIGluZGV4LCBlbnVtZXJhYmxlKTsKLSAg
ICAgIGBgYAotICAgICAgIC0gYGl0ZW1gIGlzIHRoZSBjdXJyZW50IGl0ZW0gaW4gdGhlIGl0ZXJh
dGlvbi4KLSAgICAgIC0gYGluZGV4YCBpcyB0aGUgY3VycmVudCBpbmRleCBpbiB0aGUgaXRlcmF0
aW9uLgotICAgICAgLSBgZW51bWVyYWJsZWAgaXMgdGhlIGVudW1lcmFibGUgb2JqZWN0IGl0c2Vs
Zi4KLSAgICAgICBJdCBzaG91bGQgcmV0dXJuIHRoZSBgdHJ1ZWAgdG8gaW5jbHVkZSB0aGUgaXRl
bSBpbiB0aGUgcmVzdWx0cywgYGZhbHNlYAotICAgICAgb3RoZXJ3aXNlLgotICAgICAgIE5vdGUg
dGhhdCBpbiBhZGRpdGlvbiB0byBhIGNhbGxiYWNrLCB5b3UgY2FuIGFsc28gcGFzcyBhbiBvcHRp
b25hbCB0YXJnZXQKLSAgICAgIG9iamVjdCB0aGF0IHdpbGwgYmUgc2V0IGFzIGB0aGlzYCBvbiB0
aGUgY29udGV4dC4gVGhpcyBpcyBhIGdvb2Qgd2F5Ci0gICAgICB0byBnaXZlIHlvdXIgaXRlcmF0
b3IgZnVuY3Rpb24gYWNjZXNzIHRvIHRoZSBjdXJyZW50IG9iamVjdC4KLSAgICAgICBAbWV0aG9k
IGZpbmQKLSAgICAgIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBl
eGVjdXRlCi0gICAgICBAcGFyYW0ge09iamVjdH0gW3RhcmdldF0gVGhlIHRhcmdldCBvYmplY3Qg
dG8gdXNlCi0gICAgICBAcmV0dXJuIHtPYmplY3R9IEZvdW5kIGl0ZW0gb3IgYHVuZGVmaW5lZGAu
Ci0gICAgICBAcHVibGljCi0gICAgKi8KLSAgICBmaW5kOiBmdW5jdGlvbiAoY2FsbGJhY2ssIHRh
cmdldCkgewotICAgICAgdmFyIGxlbiA9IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0aGlz
LCAnbGVuZ3RoJyk7Ci0KLSAgICAgIGlmICh0YXJnZXQgPT09IHVuZGVmaW5lZCkgewotICAgICAg
ICB0YXJnZXQgPSBudWxsOwotICAgICAgfQotCi0gICAgICB2YXIgY29udGV4dCA9IHBvcEN0eCgp
OwotICAgICAgdmFyIGZvdW5kID0gZmFsc2U7Ci0gICAgICB2YXIgbGFzdCA9IG51bGw7Ci0gICAg
ICB2YXIgbmV4dCwgcmV0OwotCi0gICAgICBmb3IgKHZhciBpZHggPSAwOyBpZHggPCBsZW4gJiYg
IWZvdW5kOyBpZHgrKykgewotICAgICAgICBuZXh0ID0gdGhpcy5uZXh0T2JqZWN0KGlkeCwgbGFz
dCwgY29udGV4dCk7Ci0KLSAgICAgICAgaWYgKGZvdW5kID0gY2FsbGJhY2suY2FsbCh0YXJnZXQs
IG5leHQsIGlkeCwgdGhpcykpIHsKLSAgICAgICAgICByZXQgPSBuZXh0OwotICAgICAgICB9Ci0K
LSAgICAgICAgbGFzdCA9IG5leHQ7Ci0gICAgICB9Ci0KLSAgICAgIG5leHQgPSBsYXN0ID0gbnVs
bDsKLSAgICAgIGNvbnRleHQgPSBwdXNoQ3R4KGNvbnRleHQpOwotCi0gICAgICByZXR1cm4gcmV0
OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgIFJldHVybnMgdGhlIGZpcnN0IGl0ZW0gd2l0aCBh
IHByb3BlcnR5IG1hdGNoaW5nIHRoZSBwYXNzZWQgdmFsdWUuIFlvdQotICAgICAgY2FuIHBhc3Mg
YW4gb3B0aW9uYWwgc2Vjb25kIGFyZ3VtZW50IHdpdGggdGhlIHRhcmdldCB2YWx1ZS4gT3RoZXJ3
aXNlCi0gICAgICB0aGlzIHdpbGwgbWF0Y2ggYW55IHByb3BlcnR5IHRoYXQgZXZhbHVhdGVzIHRv
IGB0cnVlYC4KLSAgICAgICBUaGlzIG1ldGhvZCB3b3JrcyBtdWNoIGxpa2UgdGhlIG1vcmUgZ2Vu
ZXJpYyBgZmluZCgpYCBtZXRob2QuCi0gICAgICAgQG1ldGhvZCBmaW5kQnkKLSAgICAgIEBwYXJh
bSB7U3RyaW5nfSBrZXkgdGhlIHByb3BlcnR5IHRvIHRlc3QKLSAgICAgIEBwYXJhbSB7U3RyaW5n
fSBbdmFsdWVdIG9wdGlvbmFsIHZhbHVlIHRvIHRlc3QgYWdhaW5zdC4KLSAgICAgIEByZXR1cm4g
e09iamVjdH0gZm91bmQgaXRlbSBvciBgdW5kZWZpbmVkYAotICAgICAgQHB1YmxpYwotICAgICov
Ci0gICAgZmluZEJ5OiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkgewotICAgICAgcmV0dXJuIHRoaXMu
ZmluZChpdGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpOwotICAgIH0sCi0KLSAgICAvKioKLSAg
ICAgIFJldHVybnMgYHRydWVgIGlmIHRoZSBwYXNzZWQgZnVuY3Rpb24gcmV0dXJucyB0cnVlIGZv
ciBldmVyeSBpdGVtIGluIHRoZQotICAgICAgZW51bWVyYXRpb24uIFRoaXMgY29ycmVzcG9uZHMg
d2l0aCB0aGUgYGV2ZXJ5KClgIG1ldGhvZCBpbiBKYXZhU2NyaXB0IDEuNi4KLSAgICAgICBUaGUg
Y2FsbGJhY2sgbWV0aG9kIHlvdSBwcm92aWRlIHNob3VsZCBoYXZlIHRoZSBmb2xsb3dpbmcgc2ln
bmF0dXJlIChhbGwKLSAgICAgIHBhcmFtZXRlcnMgYXJlIG9wdGlvbmFsKToKLSAgICAgICBgYGBq
YXZhc2NyaXB0Ci0gICAgICBmdW5jdGlvbihpdGVtLCBpbmRleCwgZW51bWVyYWJsZSk7Ci0gICAg
ICBgYGAKLSAgICAgICAtIGBpdGVtYCBpcyB0aGUgY3VycmVudCBpdGVtIGluIHRoZSBpdGVyYXRp
b24uCi0gICAgICAtIGBpbmRleGAgaXMgdGhlIGN1cnJlbnQgaW5kZXggaW4gdGhlIGl0ZXJhdGlv
bi4KLSAgICAgIC0gYGVudW1lcmFibGVgIGlzIHRoZSBlbnVtZXJhYmxlIG9iamVjdCBpdHNlbGYu
Ci0gICAgICAgSXQgc2hvdWxkIHJldHVybiB0aGUgYHRydWVgIG9yIGBmYWxzZWAuCi0gICAgICAg
Tm90ZSB0aGF0IGluIGFkZGl0aW9uIHRvIGEgY2FsbGJhY2ssIHlvdSBjYW4gYWxzbyBwYXNzIGFu
IG9wdGlvbmFsIHRhcmdldAotICAgICAgb2JqZWN0IHRoYXQgd2lsbCBiZSBzZXQgYXMgYHRoaXNg
IG9uIHRoZSBjb250ZXh0LiBUaGlzIGlzIGEgZ29vZCB3YXkKLSAgICAgIHRvIGdpdmUgeW91ciBp
dGVyYXRvciBmdW5jdGlvbiBhY2Nlc3MgdG8gdGhlIGN1cnJlbnQgb2JqZWN0LgotICAgICAgIEV4
YW1wbGUgVXNhZ2U6Ci0gICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgaWYgKHBlb3BsZS5ldmVy
eShpc0VuZ2luZWVyKSkgewotICAgICAgICBQYXljaGVja3MuYWRkQmlnQm9udXMoKTsKLSAgICAg
IH0KLSAgICAgIGBgYAotICAgICAgIEBtZXRob2QgZXZlcnkKLSAgICAgIEBwYXJhbSB7RnVuY3Rp
b259IGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBleGVjdXRlCi0gICAgICBAcGFyYW0ge09iamVj
dH0gW3RhcmdldF0gVGhlIHRhcmdldCBvYmplY3QgdG8gdXNlCi0gICAgICBAcmV0dXJuIHtCb29s
ZWFufQotICAgICAgQHB1YmxpYwotICAgICovCi0gICAgZXZlcnk6IGZ1bmN0aW9uIChjYWxsYmFj
aywgdGFyZ2V0KSB7Ci0gICAgICByZXR1cm4gIXRoaXMuZmluZChmdW5jdGlvbiAoeCwgaWR4LCBp
KSB7Ci0gICAgICAgIHJldHVybiAhY2FsbGJhY2suY2FsbCh0YXJnZXQsIHgsIGlkeCwgaSk7Ci0g
ICAgICB9KTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICBSZXR1cm5zIGB0cnVlYCBpZiB0aGUg
cGFzc2VkIHByb3BlcnR5IHJlc29sdmVzIHRvIHRoZSB2YWx1ZSBvZiB0aGUgc2Vjb25kCi0gICAg
ICBhcmd1bWVudCBmb3IgYWxsIGl0ZW1zIGluIHRoZSBlbnVtZXJhYmxlLiBUaGlzIG1ldGhvZCBp
cyBvZnRlbiBzaW1wbGVyL2Zhc3RlcgotICAgICAgdGhhbiB1c2luZyBhIGNhbGxiYWNrLgotICAg
ICAgIEBtZXRob2QgaXNFdmVyeQotICAgICAgQHBhcmFtIHtTdHJpbmd9IGtleSB0aGUgcHJvcGVy
dHkgdG8gdGVzdAotICAgICAgQHBhcmFtIHtTdHJpbmd9IFt2YWx1ZV0gb3B0aW9uYWwgdmFsdWUg
dG8gdGVzdCBhZ2FpbnN0LiBEZWZhdWx0cyB0byBgdHJ1ZWAKLSAgICAgIEByZXR1cm4ge0Jvb2xl
YW59Ci0gICAgICBAc2luY2UgMS4zLjAKLSAgICAgIEBwdWJsaWMKLSAgICAqLwotICAgIGlzRXZl
cnk6IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7Ci0gICAgICByZXR1cm4gdGhpcy5ldmVyeShpdGVy
LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgIFJldHVy
bnMgYHRydWVgIGlmIHRoZSBwYXNzZWQgZnVuY3Rpb24gcmV0dXJucyB0cnVlIGZvciBhbnkgaXRl
bSBpbiB0aGUKLSAgICAgIGVudW1lcmF0aW9uLiBUaGlzIGNvcnJlc3BvbmRzIHdpdGggdGhlIGBz
b21lKClgIG1ldGhvZCBpbiBKYXZhU2NyaXB0IDEuNi4KLSAgICAgICBUaGUgY2FsbGJhY2sgbWV0
aG9kIHlvdSBwcm92aWRlIHNob3VsZCBoYXZlIHRoZSBmb2xsb3dpbmcgc2lnbmF0dXJlIChhbGwK
LSAgICAgIHBhcmFtZXRlcnMgYXJlIG9wdGlvbmFsKToKLSAgICAgICBgYGBqYXZhc2NyaXB0Ci0g
ICAgICBmdW5jdGlvbihpdGVtLCBpbmRleCwgZW51bWVyYWJsZSk7Ci0gICAgICBgYGAKLSAgICAg
ICAtIGBpdGVtYCBpcyB0aGUgY3VycmVudCBpdGVtIGluIHRoZSBpdGVyYXRpb24uCi0gICAgICAt
IGBpbmRleGAgaXMgdGhlIGN1cnJlbnQgaW5kZXggaW4gdGhlIGl0ZXJhdGlvbi4KLSAgICAgIC0g
YGVudW1lcmFibGVgIGlzIHRoZSBlbnVtZXJhYmxlIG9iamVjdCBpdHNlbGYuCi0gICAgICAgSXQg
c2hvdWxkIHJldHVybiB0aGUgYHRydWVgIHRvIGluY2x1ZGUgdGhlIGl0ZW0gaW4gdGhlIHJlc3Vs
dHMsIGBmYWxzZWAKLSAgICAgIG90aGVyd2lzZS4KLSAgICAgICBOb3RlIHRoYXQgaW4gYWRkaXRp
b24gdG8gYSBjYWxsYmFjaywgeW91IGNhbiBhbHNvIHBhc3MgYW4gb3B0aW9uYWwgdGFyZ2V0Ci0g
ICAgICBvYmplY3QgdGhhdCB3aWxsIGJlIHNldCBhcyBgdGhpc2Agb24gdGhlIGNvbnRleHQuIFRo
aXMgaXMgYSBnb29kIHdheQotICAgICAgdG8gZ2l2ZSB5b3VyIGl0ZXJhdG9yIGZ1bmN0aW9uIGFj
Y2VzcyB0byB0aGUgY3VycmVudCBvYmplY3QuCi0gICAgICAgVXNhZ2UgRXhhbXBsZToKLSAgICAg
ICBgYGBqYXZhc2NyaXB0Ci0gICAgICBpZiAocGVvcGxlLmFueShpc01hbmFnZXIpKSB7Ci0gICAg
ICAgIFBheWNoZWNrcy5hZGRCaWdnZXJCb251cygpOwotICAgICAgfQotICAgICAgYGBgCi0gICAg
ICAgQG1ldGhvZCBhbnkKLSAgICAgIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIFRoZSBjYWxs
YmFjayB0byBleGVjdXRlCi0gICAgICBAcGFyYW0ge09iamVjdH0gW3RhcmdldF0gVGhlIHRhcmdl
dCBvYmplY3QgdG8gdXNlCi0gICAgICBAcmV0dXJuIHtCb29sZWFufSBgdHJ1ZWAgaWYgdGhlIHBh
c3NlZCBmdW5jdGlvbiByZXR1cm5zIGB0cnVlYCBmb3IgYW55IGl0ZW0KLSAgICAgIEBwdWJsaWMK
LSAgICAqLwotICAgIGFueTogZnVuY3Rpb24gKGNhbGxiYWNrLCB0YXJnZXQpIHsKLSAgICAgIHZh
ciBsZW4gPSBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywgJ2xlbmd0aCcpOwotICAg
ICAgdmFyIGNvbnRleHQgPSBwb3BDdHgoKTsKLSAgICAgIHZhciBmb3VuZCA9IGZhbHNlOwotICAg
ICAgdmFyIGxhc3QgPSBudWxsOwotICAgICAgdmFyIG5leHQsIGlkeDsKLQotICAgICAgaWYgKHRh
cmdldCA9PT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgIHRhcmdldCA9IG51bGw7Ci0gICAgICB9Ci0K
LSAgICAgIGZvciAoaWR4ID0gMDsgaWR4IDwgbGVuICYmICFmb3VuZDsgaWR4KyspIHsKLSAgICAg
ICAgbmV4dCA9IHRoaXMubmV4dE9iamVjdChpZHgsIGxhc3QsIGNvbnRleHQpOwotICAgICAgICBm
b3VuZCA9IGNhbGxiYWNrLmNhbGwodGFyZ2V0LCBuZXh0LCBpZHgsIHRoaXMpOwotICAgICAgICBs
YXN0ID0gbmV4dDsKLSAgICAgIH0KLQotICAgICAgbmV4dCA9IGxhc3QgPSBudWxsOwotICAgICAg
Y29udGV4dCA9IHB1c2hDdHgoY29udGV4dCk7Ci0gICAgICByZXR1cm4gZm91bmQ7Ci0gICAgfSwK
LQotICAgIC8qKgotICAgICAgUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHBhc3NlZCBwcm9wZXJ0eSBy
ZXNvbHZlcyB0byB0aGUgdmFsdWUgb2YgdGhlIHNlY29uZAotICAgICAgYXJndW1lbnQgZm9yIGFu
eSBpdGVtIGluIHRoZSBlbnVtZXJhYmxlLiBUaGlzIG1ldGhvZCBpcyBvZnRlbiBzaW1wbGVyL2Zh
c3RlcgotICAgICAgdGhhbiB1c2luZyBhIGNhbGxiYWNrLgotICAgICAgIEBtZXRob2QgaXNBbnkK
LSAgICAgIEBwYXJhbSB7U3RyaW5nfSBrZXkgdGhlIHByb3BlcnR5IHRvIHRlc3QKLSAgICAgIEBw
YXJhbSB7U3RyaW5nfSBbdmFsdWVdIG9wdGlvbmFsIHZhbHVlIHRvIHRlc3QgYWdhaW5zdC4gRGVm
YXVsdHMgdG8gYHRydWVgCi0gICAgICBAcmV0dXJuIHtCb29sZWFufQotICAgICAgQHNpbmNlIDEu
My4wCi0gICAgICBAcHVibGljCi0gICAgKi8KLSAgICBpc0FueTogZnVuY3Rpb24gKGtleSwgdmFs
dWUpIHsKLSAgICAgIHJldHVybiB0aGlzLmFueShpdGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykp
OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgIFRoaXMgd2lsbCBjb21iaW5lIHRoZSB2YWx1ZXMg
b2YgdGhlIGVudW1lcmF0b3IgaW50byBhIHNpbmdsZSB2YWx1ZS4gSXQKLSAgICAgIGlzIGEgdXNl
ZnVsIHdheSB0byBjb2xsZWN0IGEgc3VtbWFyeSB2YWx1ZSBmcm9tIGFuIGVudW1lcmF0aW9uLiBU
aGlzCi0gICAgICBjb3JyZXNwb25kcyB0byB0aGUgYHJlZHVjZSgpYCBtZXRob2QgZGVmaW5lZCBp
biBKYXZhU2NyaXB0IDEuOC4KLSAgICAgICBUaGUgY2FsbGJhY2sgbWV0aG9kIHlvdSBwcm92aWRl
IHNob3VsZCBoYXZlIHRoZSBmb2xsb3dpbmcgc2lnbmF0dXJlIChhbGwKLSAgICAgIHBhcmFtZXRl
cnMgYXJlIG9wdGlvbmFsKToKLSAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICBmdW5jdGlvbihw
cmV2aW91c1ZhbHVlLCBpdGVtLCBpbmRleCwgZW51bWVyYWJsZSk7Ci0gICAgICBgYGAKLSAgICAg
ICAtIGBwcmV2aW91c1ZhbHVlYCBpcyB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgdGhlIGxhc3QgY2Fs
bCB0byB0aGUgaXRlcmF0b3IuCi0gICAgICAtIGBpdGVtYCBpcyB0aGUgY3VycmVudCBpdGVtIGlu
IHRoZSBpdGVyYXRpb24uCi0gICAgICAtIGBpbmRleGAgaXMgdGhlIGN1cnJlbnQgaW5kZXggaW4g
dGhlIGl0ZXJhdGlvbi4KLSAgICAgIC0gYGVudW1lcmFibGVgIGlzIHRoZSBlbnVtZXJhYmxlIG9i
amVjdCBpdHNlbGYuCi0gICAgICAgUmV0dXJuIHRoZSBuZXcgY3VtdWxhdGl2ZSB2YWx1ZS4KLSAg
ICAgICBJbiBhZGRpdGlvbiB0byB0aGUgY2FsbGJhY2sgeW91IGNhbiBhbHNvIHBhc3MgYW4gYGlu
aXRpYWxWYWx1ZWAuIEFuIGVycm9yCi0gICAgICB3aWxsIGJlIHJhaXNlZCBpZiB5b3UgZG8gbm90
IHBhc3MgYW4gaW5pdGlhbCB2YWx1ZSBhbmQgdGhlIGVudW1lcmF0b3IgaXMKLSAgICAgIGVtcHR5
LgotICAgICAgIE5vdGUgdGhhdCB1bmxpa2UgdGhlIG90aGVyIG1ldGhvZHMsIHRoaXMgbWV0aG9k
IGRvZXMgbm90IGFsbG93IHlvdSB0bwotICAgICAgcGFzcyBhIHRhcmdldCBvYmplY3QgdG8gc2V0
IGFzIHRoaXMgZm9yIHRoZSBjYWxsYmFjay4gSXQncyBwYXJ0IG9mIHRoZQotICAgICAgc3BlYy4g
U29ycnkuCi0gICAgICAgQG1ldGhvZCByZWR1Y2UKLSAgICAgIEBwYXJhbSB7RnVuY3Rpb259IGNh
bGxiYWNrIFRoZSBjYWxsYmFjayB0byBleGVjdXRlCi0gICAgICBAcGFyYW0ge09iamVjdH0gaW5p
dGlhbFZhbHVlIEluaXRpYWwgdmFsdWUgZm9yIHRoZSByZWR1Y2UKLSAgICAgIEBwYXJhbSB7U3Ry
aW5nfSByZWR1Y2VyUHJvcGVydHkgaW50ZXJuYWwgdXNlIG9ubHkuCi0gICAgICBAcmV0dXJuIHtP
YmplY3R9IFRoZSByZWR1Y2VkIHZhbHVlLgotICAgICAgQHB1YmxpYwotICAgICovCi0gICAgcmVk
dWNlOiBmdW5jdGlvbiAoY2FsbGJhY2ssIGluaXRpYWxWYWx1ZSwgcmVkdWNlclByb3BlcnR5KSB7
Ci0gICAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7Ci0gICAgICAgIHRo
cm93IG5ldyBUeXBlRXJyb3IoKTsKLSAgICAgIH0KLQotICAgICAgdmFyIHJldCA9IGluaXRpYWxW
YWx1ZTsKLQotICAgICAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtLCBpKSB7Ci0gICAgICAg
IHJldCA9IGNhbGxiYWNrKHJldCwgaXRlbSwgaSwgdGhpcywgcmVkdWNlclByb3BlcnR5KTsKLSAg
ICAgIH0sIHRoaXMpOwotCi0gICAgICByZXR1cm4gcmV0OwotICAgIH0sCi0KLSAgICAvKioKLSAg
ICAgIEludm9rZXMgdGhlIG5hbWVkIG1ldGhvZCBvbiBldmVyeSBvYmplY3QgaW4gdGhlIHJlY2Vp
dmVyIHRoYXQKLSAgICAgIGltcGxlbWVudHMgaXQuIFRoaXMgbWV0aG9kIGNvcnJlc3BvbmRzIHRv
IHRoZSBpbXBsZW1lbnRhdGlvbiBpbgotICAgICAgUHJvdG90eXBlIDEuNi4KLSAgICAgICBAbWV0
aG9kIGludm9rZQotICAgICAgQHBhcmFtIHtTdHJpbmd9IG1ldGhvZE5hbWUgdGhlIG5hbWUgb2Yg
dGhlIG1ldGhvZAotICAgICAgQHBhcmFtIHtPYmplY3QuLi59IGFyZ3Mgb3B0aW9uYWwgYXJndW1l
bnRzIHRvIHBhc3MgYXMgd2VsbC4KLSAgICAgIEByZXR1cm4ge0FycmF5fSByZXR1cm4gdmFsdWVz
IGZyb20gY2FsbGluZyBpbnZva2UuCi0gICAgICBAcHVibGljCi0gICAgKi8KLSAgICBpbnZva2U6
IGZ1bmN0aW9uIChtZXRob2ROYW1lKSB7Ci0gICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRz
Lmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7
IF9rZXkgPCBfbGVuOyBfa2V5KyspIHsKLSAgICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVu
dHNbX2tleV07Ci0gICAgICB9Ci0KLSAgICAgIHZhciByZXQgPSBlbWJlckEoKTsKLQotICAgICAg
dGhpcy5mb3JFYWNoKGZ1bmN0aW9uICh4LCBpZHgpIHsKLSAgICAgICAgdmFyIG1ldGhvZCA9IHgg
JiYgeFttZXRob2ROYW1lXTsKLQotICAgICAgICBpZiAoJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIG1l
dGhvZCkgewotICAgICAgICAgIHJldFtpZHhdID0gYXJncyA/IG1ldGhvZC5hcHBseSh4LCBhcmdz
KSA6IHhbbWV0aG9kTmFtZV0oKTsKLSAgICAgICAgfQotICAgICAgfSwgdGhpcyk7Ci0KLSAgICAg
IHJldHVybiByZXQ7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAgU2ltcGx5IGNvbnZlcnRzIHRo
ZSBlbnVtZXJhYmxlIGludG8gYSBnZW51aW5lIGFycmF5LiBUaGUgb3JkZXIgaXMgbm90Ci0gICAg
ICBndWFyYW50ZWVkLiBDb3JyZXNwb25kcyB0byB0aGUgbWV0aG9kIGltcGxlbWVudGVkIGJ5IFBy
b3RvdHlwZS4KLSAgICAgICBAbWV0aG9kIHRvQXJyYXkKLSAgICAgIEByZXR1cm4ge0FycmF5fSB0
aGUgZW51bWVyYWJsZSBhcyBhbiBhcnJheS4KLSAgICAgIEBwdWJsaWMKLSAgICAqLwotICAgIHRv
QXJyYXk6IGZ1bmN0aW9uICgpIHsKLSAgICAgIHZhciByZXQgPSBlbWJlckEoKTsKLQotICAgICAg
dGhpcy5mb3JFYWNoKGZ1bmN0aW9uIChvLCBpZHgpIHsKLSAgICAgICAgcmV0W2lkeF0gPSBvOwot
ICAgICAgfSk7Ci0KLSAgICAgIHJldHVybiByZXQ7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAg
UmV0dXJucyBhIGNvcHkgb2YgdGhlIGFycmF5IHdpdGggYWxsIGBudWxsYCBhbmQgYHVuZGVmaW5l
ZGAgZWxlbWVudHMgcmVtb3ZlZC4KLSAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICB2YXIgYXJy
ID0gWydhJywgbnVsbCwgJ2MnLCB1bmRlZmluZWRdOwotICAgICAgYXJyLmNvbXBhY3QoKTsgIC8v
IFsnYScsICdjJ10KLSAgICAgIGBgYAotICAgICAgIEBtZXRob2QgY29tcGFjdAotICAgICAgQHJl
dHVybiB7QXJyYXl9IHRoZSBhcnJheSB3aXRob3V0IG51bGwgYW5kIHVuZGVmaW5lZCBlbGVtZW50
cy4KLSAgICAgIEBwdWJsaWMKLSAgICAqLwotICAgIGNvbXBhY3Q6IGZ1bmN0aW9uICgpIHsKLSAg
ICAgIHJldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbiAodmFsdWUpIHsKLSAgICAgICAgcmV0dXJu
IHZhbHVlICE9IG51bGw7Ci0gICAgICB9KTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICBSZXR1
cm5zIGEgbmV3IGVudW1lcmFibGUgdGhhdCBleGNsdWRlcyB0aGUgcGFzc2VkIHZhbHVlLiBUaGUg
ZGVmYXVsdAotICAgICAgaW1wbGVtZW50YXRpb24gcmV0dXJucyBhbiBhcnJheSByZWdhcmRsZXNz
IG9mIHRoZSByZWNlaXZlciB0eXBlIHVubGVzcwotICAgICAgdGhlIHJlY2VpdmVyIGRvZXMgbm90
IGNvbnRhaW4gdGhlIHZhbHVlLgotICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgIHZhciBhcnIg
PSBbJ2EnLCAnYicsICdhJywgJ2MnXTsKLSAgICAgIGFyci53aXRob3V0KCdhJyk7ICAvLyBbJ2In
LCAnYyddCi0gICAgICBgYGAKLSAgICAgICBAbWV0aG9kIHdpdGhvdXQKLSAgICAgIEBwYXJhbSB7
T2JqZWN0fSB2YWx1ZQotICAgICAgQHJldHVybiB7RW1iZXIuRW51bWVyYWJsZX0KLSAgICAgIEBw
dWJsaWMKLSAgICAqLwotICAgIHdpdGhvdXQ6IGZ1bmN0aW9uICh2YWx1ZSkgewotICAgICAgaWYg
KCF0aGlzLmNvbnRhaW5zKHZhbHVlKSkgewotICAgICAgICByZXR1cm4gdGhpczsgLy8gbm90aGlu
ZyB0byBkbwotICAgICAgfQotCi0gICAgICB2YXIgcmV0ID0gZW1iZXJBKCk7Ci0KLSAgICAgIHRo
aXMuZm9yRWFjaChmdW5jdGlvbiAoaykgewotICAgICAgICBpZiAoayAhPT0gdmFsdWUpIHsKLSAg
ICAgICAgICByZXRbcmV0Lmxlbmd0aF0gPSBrOwotICAgICAgICB9Ci0gICAgICB9KTsKLQotICAg
ICAgcmV0dXJuIHJldDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICBSZXR1cm5zIGEgbmV3IGVu
dW1lcmFibGUgdGhhdCBjb250YWlucyBvbmx5IHVuaXF1ZSB2YWx1ZXMuIFRoZSBkZWZhdWx0Ci0g
ICAgICBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIGFuIGFycmF5IHJlZ2FyZGxlc3Mgb2YgdGhlIHJl
Y2VpdmVyIHR5cGUuCi0gICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgdmFyIGFyciA9IFsnYScs
ICdhJywgJ2InLCAnYiddOwotICAgICAgYXJyLnVuaXEoKTsgIC8vIFsnYScsICdiJ10KLSAgICAg
IGBgYAotICAgICAgIFRoaXMgb25seSB3b3JrcyBvbiBwcmltaXRpdmUgZGF0YSB0eXBlcywgZS5n
LiBTdHJpbmdzLCBOdW1iZXJzLCBldGMuCi0gICAgICAgQG1ldGhvZCB1bmlxCi0gICAgICBAcmV0
dXJuIHtFbWJlci5FbnVtZXJhYmxlfQotICAgICAgQHB1YmxpYwotICAgICovCi0gICAgdW5pcTog
ZnVuY3Rpb24gKCkgewotICAgICAgdmFyIHJldCA9IGVtYmVyQSgpOwotCi0gICAgICB0aGlzLmZv
ckVhY2goZnVuY3Rpb24gKGspIHsKLSAgICAgICAgaWYgKHJldC5pbmRleE9mKGspIDwgMCkgewot
ICAgICAgICAgIHJldC5wdXNoKGspOwotICAgICAgICB9Ci0gICAgICB9KTsKLQotICAgICAgcmV0
dXJuIHJldDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICBUaGlzIHByb3BlcnR5IHdpbGwgdHJp
Z2dlciBhbnl0aW1lIHRoZSBlbnVtZXJhYmxlJ3MgY29udGVudCBjaGFuZ2VzLgotICAgICAgWW91
IGNhbiBvYnNlcnZlIHRoaXMgcHJvcGVydHkgdG8gYmUgbm90aWZpZWQgb2YgY2hhbmdlcyB0byB0
aGUgZW51bWVyYWJsZSdzCi0gICAgICBjb250ZW50LgotICAgICAgIEZvciBwbGFpbiBlbnVtZXJh
YmxlcywgdGhpcyBwcm9wZXJ0eSBpcyByZWFkIG9ubHkuIGBBcnJheWAgb3ZlcnJpZGVzCi0gICAg
ICB0aGlzIG1ldGhvZC4KLSAgICAgICBAcHJvcGVydHkgW10KLSAgICAgIEB0eXBlIEFycmF5Ci0g
ICAgICBAcmV0dXJuIHRoaXMKLSAgICAgIEBwcml2YXRlCi0gICAgKi8KLSAgICAnW10nOiBfZW1i
ZXJNZXRhbENvbXB1dGVkLmNvbXB1dGVkKHsKLSAgICAgIGdldDogZnVuY3Rpb24gKGtleSkgewot
ICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgIH0KLSAgICB9KSwKLQotICAgIC8vIC4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLSAgICAv
LyBFTlVNRVJBQkxFIE9CU0VSVkVSUwotICAgIC8vCi0KLSAgICAvKioKLSAgICAgIFJlZ2lzdGVy
cyBhbiBlbnVtZXJhYmxlIG9ic2VydmVyLiBNdXN0IGltcGxlbWVudCBgRW1iZXIuRW51bWVyYWJs
ZU9ic2VydmVyYAotICAgICAgbWl4aW4uCi0gICAgICAgQG1ldGhvZCBhZGRFbnVtZXJhYmxlT2Jz
ZXJ2ZXIKLSAgICAgIEBwYXJhbSB7T2JqZWN0fSB0YXJnZXQKLSAgICAgIEBwYXJhbSB7T2JqZWN0
fSBbb3B0c10KLSAgICAgIEByZXR1cm4gdGhpcwotICAgICAgQHByaXZhdGUKLSAgICAqLwotICAg
IGFkZEVudW1lcmFibGVPYnNlcnZlcjogZnVuY3Rpb24gKHRhcmdldCwgb3B0cykgewotICAgICAg
dmFyIHdpbGxDaGFuZ2UgPSBvcHRzICYmIG9wdHMud2lsbENoYW5nZSB8fCAnZW51bWVyYWJsZVdp
bGxDaGFuZ2UnOwotICAgICAgdmFyIGRpZENoYW5nZSA9IG9wdHMgJiYgb3B0cy5kaWRDaGFuZ2Ug
fHwgJ2VudW1lcmFibGVEaWRDaGFuZ2UnOwotICAgICAgdmFyIGhhc09ic2VydmVycyA9IF9lbWJl
ck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0aGlzLCAnaGFzRW51bWVyYWJsZU9ic2VydmVycycpOwot
Ci0gICAgICBpZiAoIWhhc09ic2VydmVycykgewotICAgICAgICBfZW1iZXJNZXRhbFByb3BlcnR5
X2V2ZW50cy5wcm9wZXJ0eVdpbGxDaGFuZ2UodGhpcywgJ2hhc0VudW1lcmFibGVPYnNlcnZlcnMn
KTsKLSAgICAgIH0KLQotICAgICAgX2VtYmVyTWV0YWxFdmVudHMuYWRkTGlzdGVuZXIodGhpcywg
J0BlbnVtZXJhYmxlOmJlZm9yZScsIHRhcmdldCwgd2lsbENoYW5nZSk7Ci0gICAgICBfZW1iZXJN
ZXRhbEV2ZW50cy5hZGRMaXN0ZW5lcih0aGlzLCAnQGVudW1lcmFibGU6Y2hhbmdlJywgdGFyZ2V0
LCBkaWRDaGFuZ2UpOwotCi0gICAgICBpZiAoIWhhc09ic2VydmVycykgewotICAgICAgICBfZW1i
ZXJNZXRhbFByb3BlcnR5X2V2ZW50cy5wcm9wZXJ0eURpZENoYW5nZSh0aGlzLCAnaGFzRW51bWVy
YWJsZU9ic2VydmVycycpOwotICAgICAgfQotCi0gICAgICByZXR1cm4gdGhpczsKLSAgICB9LAot
Ci0gICAgLyoqCi0gICAgICBSZW1vdmVzIGEgcmVnaXN0ZXJlZCBlbnVtZXJhYmxlIG9ic2VydmVy
LgotICAgICAgIEBtZXRob2QgcmVtb3ZlRW51bWVyYWJsZU9ic2VydmVyCi0gICAgICBAcGFyYW0g
e09iamVjdH0gdGFyZ2V0Ci0gICAgICBAcGFyYW0ge09iamVjdH0gW29wdHNdCi0gICAgICBAcmV0
dXJuIHRoaXMKLSAgICAgIEBwcml2YXRlCi0gICAgKi8KLSAgICByZW1vdmVFbnVtZXJhYmxlT2Jz
ZXJ2ZXI6IGZ1bmN0aW9uICh0YXJnZXQsIG9wdHMpIHsKLSAgICAgIHZhciB3aWxsQ2hhbmdlID0g
b3B0cyAmJiBvcHRzLndpbGxDaGFuZ2UgfHwgJ2VudW1lcmFibGVXaWxsQ2hhbmdlJzsKLSAgICAg
IHZhciBkaWRDaGFuZ2UgPSBvcHRzICYmIG9wdHMuZGlkQ2hhbmdlIHx8ICdlbnVtZXJhYmxlRGlk
Q2hhbmdlJzsKLSAgICAgIHZhciBoYXNPYnNlcnZlcnMgPSBfZW1iZXJNZXRhbFByb3BlcnR5X2dl
dC5nZXQodGhpcywgJ2hhc0VudW1lcmFibGVPYnNlcnZlcnMnKTsKLQotICAgICAgaWYgKGhhc09i
c2VydmVycykgewotICAgICAgICBfZW1iZXJNZXRhbFByb3BlcnR5X2V2ZW50cy5wcm9wZXJ0eVdp
bGxDaGFuZ2UodGhpcywgJ2hhc0VudW1lcmFibGVPYnNlcnZlcnMnKTsKLSAgICAgIH0KLQotICAg
ICAgX2VtYmVyTWV0YWxFdmVudHMucmVtb3ZlTGlzdGVuZXIodGhpcywgJ0BlbnVtZXJhYmxlOmJl
Zm9yZScsIHRhcmdldCwgd2lsbENoYW5nZSk7Ci0gICAgICBfZW1iZXJNZXRhbEV2ZW50cy5yZW1v
dmVMaXN0ZW5lcih0aGlzLCAnQGVudW1lcmFibGU6Y2hhbmdlJywgdGFyZ2V0LCBkaWRDaGFuZ2Up
OwotCi0gICAgICBpZiAoaGFzT2JzZXJ2ZXJzKSB7Ci0gICAgICAgIF9lbWJlck1ldGFsUHJvcGVy
dHlfZXZlbnRzLnByb3BlcnR5RGlkQ2hhbmdlKHRoaXMsICdoYXNFbnVtZXJhYmxlT2JzZXJ2ZXJz
Jyk7Ci0gICAgICB9Ci0KLSAgICAgIHJldHVybiB0aGlzOwotICAgIH0sCi0KLSAgICAvKioKLSAg
ICAgIEJlY29tZXMgdHJ1ZSB3aGVuZXZlciB0aGUgYXJyYXkgY3VycmVudGx5IGhhcyBvYnNlcnZl
cnMgd2F0Y2hpbmcgY2hhbmdlcwotICAgICAgb24gdGhlIGFycmF5LgotICAgICAgIEBwcm9wZXJ0
eSBoYXNFbnVtZXJhYmxlT2JzZXJ2ZXJzCi0gICAgICBAdHlwZSBCb29sZWFuCi0gICAgICBAcHJp
dmF0ZQotICAgICovCi0gICAgaGFzRW51bWVyYWJsZU9ic2VydmVyczogX2VtYmVyTWV0YWxDb21w
dXRlZC5jb21wdXRlZChmdW5jdGlvbiAoKSB7Ci0gICAgICByZXR1cm4gX2VtYmVyTWV0YWxFdmVu
dHMuaGFzTGlzdGVuZXJzKHRoaXMsICdAZW51bWVyYWJsZTpjaGFuZ2UnKSB8fCBfZW1iZXJNZXRh
bEV2ZW50cy5oYXNMaXN0ZW5lcnModGhpcywgJ0BlbnVtZXJhYmxlOmJlZm9yZScpOwotICAgIH0p
LAotCi0gICAgLyoqCi0gICAgICBJbnZva2UgdGhpcyBtZXRob2QganVzdCBiZWZvcmUgdGhlIGNv
bnRlbnRzIG9mIHlvdXIgZW51bWVyYWJsZSB3aWxsCi0gICAgICBjaGFuZ2UuIFlvdSBjYW4gZWl0
aGVyIG9taXQgdGhlIHBhcmFtZXRlcnMgY29tcGxldGVseSBvciBwYXNzIHRoZSBvYmplY3RzCi0g
ICAgICB0byBiZSByZW1vdmVkIG9yIGFkZGVkIGlmIGF2YWlsYWJsZSBvciBqdXN0IGEgY291bnQu
Ci0gICAgICAgQG1ldGhvZCBlbnVtZXJhYmxlQ29udGVudFdpbGxDaGFuZ2UKLSAgICAgIEBwYXJh
bSB7RW1iZXIuRW51bWVyYWJsZXxOdW1iZXJ9IHJlbW92aW5nIEFuIGVudW1lcmFibGUgb2YgdGhl
IG9iamVjdHMgdG8KLSAgICAgICAgYmUgcmVtb3ZlZCBvciB0aGUgbnVtYmVyIG9mIGl0ZW1zIHRv
IGJlIHJlbW92ZWQuCi0gICAgICBAcGFyYW0ge0VtYmVyLkVudW1lcmFibGV8TnVtYmVyfSBhZGRp
bmcgQW4gZW51bWVyYWJsZSBvZiB0aGUgb2JqZWN0cyB0byBiZQotICAgICAgICBhZGRlZCBvciB0
aGUgbnVtYmVyIG9mIGl0ZW1zIHRvIGJlIGFkZGVkLgotICAgICAgQGNoYWluYWJsZQotICAgICAg
QHByaXZhdGUKLSAgICAqLwotICAgIGVudW1lcmFibGVDb250ZW50V2lsbENoYW5nZTogZnVuY3Rp
b24gKHJlbW92aW5nLCBhZGRpbmcpIHsKLSAgICAgIHZhciByZW1vdmVDbnQsIGFkZENudCwgaGFz
RGVsdGE7Ci0KLSAgICAgIGlmICgnbnVtYmVyJyA9PT0gdHlwZW9mIHJlbW92aW5nKSB7Ci0gICAg
ICAgIHJlbW92ZUNudCA9IHJlbW92aW5nOwotICAgICAgfSBlbHNlIGlmIChyZW1vdmluZykgewot
ICAgICAgICByZW1vdmVDbnQgPSBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQocmVtb3Zpbmcs
ICdsZW5ndGgnKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHJlbW92ZUNudCA9IHJlbW92aW5n
ID0gLTE7Ci0gICAgICB9Ci0KLSAgICAgIGlmICgnbnVtYmVyJyA9PT0gdHlwZW9mIGFkZGluZykg
ewotICAgICAgICBhZGRDbnQgPSBhZGRpbmc7Ci0gICAgICB9IGVsc2UgaWYgKGFkZGluZykgewot
ICAgICAgICBhZGRDbnQgPSBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQoYWRkaW5nLCAnbGVu
Z3RoJyk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBhZGRDbnQgPSBhZGRpbmcgPSAtMTsKLSAg
ICAgIH0KLQotICAgICAgaGFzRGVsdGEgPSBhZGRDbnQgPCAwIHx8IHJlbW92ZUNudCA8IDAgfHwg
YWRkQ250IC0gcmVtb3ZlQ250ICE9PSAwOwotCi0gICAgICBpZiAocmVtb3ZpbmcgPT09IC0xKSB7
Ci0gICAgICAgIHJlbW92aW5nID0gbnVsbDsKLSAgICAgIH0KLQotICAgICAgaWYgKGFkZGluZyA9
PT0gLTEpIHsKLSAgICAgICAgYWRkaW5nID0gbnVsbDsKLSAgICAgIH0KLQotICAgICAgX2VtYmVy
TWV0YWxQcm9wZXJ0eV9ldmVudHMucHJvcGVydHlXaWxsQ2hhbmdlKHRoaXMsICdbXScpOwotCi0g
ICAgICBpZiAoaGFzRGVsdGEpIHsKLSAgICAgICAgX2VtYmVyTWV0YWxQcm9wZXJ0eV9ldmVudHMu
cHJvcGVydHlXaWxsQ2hhbmdlKHRoaXMsICdsZW5ndGgnKTsKLSAgICAgIH0KLQotICAgICAgX2Vt
YmVyTWV0YWxFdmVudHMuc2VuZEV2ZW50KHRoaXMsICdAZW51bWVyYWJsZTpiZWZvcmUnLCBbdGhp
cywgcmVtb3ZpbmcsIGFkZGluZ10pOwotCi0gICAgICByZXR1cm4gdGhpczsKLSAgICB9LAotCi0g
ICAgLyoqCi0gICAgICBJbnZva2UgdGhpcyBtZXRob2Qgd2hlbiB0aGUgY29udGVudHMgb2YgeW91
ciBlbnVtZXJhYmxlIGhhcyBjaGFuZ2VkLgotICAgICAgVGhpcyB3aWxsIG5vdGlmeSBhbnkgb2Jz
ZXJ2ZXJzIHdhdGNoaW5nIGZvciBjb250ZW50IGNoYW5nZXMuIElmIHlvdSBhcmUKLSAgICAgIGlt
cGxlbWVudGluZyBhbiBvcmRlcmVkIGVudW1lcmFibGUgKHN1Y2ggYXMgYW4gYXJyYXkpLCBhbHNv
IHBhc3MgdGhlCi0gICAgICBzdGFydCBhbmQgZW5kIHZhbHVlcyB3aGVyZSB0aGUgY29udGVudCBj
aGFuZ2VkIHNvIHRoYXQgaXQgY2FuIGJlIHVzZWQgdG8KLSAgICAgIG5vdGlmeSByYW5nZSBvYnNl
cnZlcnMuCi0gICAgICAgQG1ldGhvZCBlbnVtZXJhYmxlQ29udGVudERpZENoYW5nZQotICAgICAg
QHBhcmFtIHtFbWJlci5FbnVtZXJhYmxlfE51bWJlcn0gcmVtb3ZpbmcgQW4gZW51bWVyYWJsZSBv
ZiB0aGUgb2JqZWN0cyB0bwotICAgICAgICBiZSByZW1vdmVkIG9yIHRoZSBudW1iZXIgb2YgaXRl
bXMgdG8gYmUgcmVtb3ZlZC4KLSAgICAgIEBwYXJhbSB7RW1iZXIuRW51bWVyYWJsZXxOdW1iZXJ9
IGFkZGluZyAgQW4gZW51bWVyYWJsZSBvZiB0aGUgb2JqZWN0cyB0bwotICAgICAgICBiZSBhZGRl
ZCBvciB0aGUgbnVtYmVyIG9mIGl0ZW1zIHRvIGJlIGFkZGVkLgotICAgICAgQGNoYWluYWJsZQot
ICAgICAgQHByaXZhdGUKLSAgICAqLwotICAgIGVudW1lcmFibGVDb250ZW50RGlkQ2hhbmdlOiBm
dW5jdGlvbiAocmVtb3ZpbmcsIGFkZGluZykgewotICAgICAgdmFyIHJlbW92ZUNudCwgYWRkQ250
LCBoYXNEZWx0YTsKLQotICAgICAgaWYgKCdudW1iZXInID09PSB0eXBlb2YgcmVtb3ZpbmcpIHsK
LSAgICAgICAgcmVtb3ZlQ250ID0gcmVtb3Zpbmc7Ci0gICAgICB9IGVsc2UgaWYgKHJlbW92aW5n
KSB7Ci0gICAgICAgIHJlbW92ZUNudCA9IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldChyZW1v
dmluZywgJ2xlbmd0aCcpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcmVtb3ZlQ250ID0gcmVt
b3ZpbmcgPSAtMTsKLSAgICAgIH0KLQotICAgICAgaWYgKCdudW1iZXInID09PSB0eXBlb2YgYWRk
aW5nKSB7Ci0gICAgICAgIGFkZENudCA9IGFkZGluZzsKLSAgICAgIH0gZWxzZSBpZiAoYWRkaW5n
KSB7Ci0gICAgICAgIGFkZENudCA9IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldChhZGRpbmcs
ICdsZW5ndGgnKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGFkZENudCA9IGFkZGluZyA9IC0x
OwotICAgICAgfQotCi0gICAgICBoYXNEZWx0YSA9IGFkZENudCA8IDAgfHwgcmVtb3ZlQ250IDwg
MCB8fCBhZGRDbnQgLSByZW1vdmVDbnQgIT09IDA7Ci0KLSAgICAgIGlmIChyZW1vdmluZyA9PT0g
LTEpIHsKLSAgICAgICAgcmVtb3ZpbmcgPSBudWxsOwotICAgICAgfQotCi0gICAgICBpZiAoYWRk
aW5nID09PSAtMSkgewotICAgICAgICBhZGRpbmcgPSBudWxsOwotICAgICAgfQotCi0gICAgICBf
ZW1iZXJNZXRhbEV2ZW50cy5zZW5kRXZlbnQodGhpcywgJ0BlbnVtZXJhYmxlOmNoYW5nZScsIFt0
aGlzLCByZW1vdmluZywgYWRkaW5nXSk7Ci0KLSAgICAgIGlmIChoYXNEZWx0YSkgewotICAgICAg
ICBfZW1iZXJNZXRhbFByb3BlcnR5X2V2ZW50cy5wcm9wZXJ0eURpZENoYW5nZSh0aGlzLCAnbGVu
Z3RoJyk7Ci0gICAgICB9Ci0KLSAgICAgIF9lbWJlck1ldGFsUHJvcGVydHlfZXZlbnRzLnByb3Bl
cnR5RGlkQ2hhbmdlKHRoaXMsICdbXScpOwotCi0gICAgICByZXR1cm4gdGhpczsKLSAgICB9LAot
Ci0gICAgLyoqCi0gICAgICBDb252ZXJ0cyB0aGUgZW51bWVyYWJsZSBpbnRvIGFuIGFycmF5IGFu
ZCBzb3J0cyBieSB0aGUga2V5cwotICAgICAgc3BlY2lmaWVkIGluIHRoZSBhcmd1bWVudC4KLSAg
ICAgICBZb3UgbWF5IHByb3ZpZGUgbXVsdGlwbGUgYXJndW1lbnRzIHRvIHNvcnQgYnkgbXVsdGlw
bGUgcHJvcGVydGllcy4KLSAgICAgICBAbWV0aG9kIHNvcnRCeQotICAgICAgQHBhcmFtIHtTdHJp
bmd9IHByb3BlcnR5IG5hbWUocykgdG8gc29ydCBvbgotICAgICAgQHJldHVybiB7QXJyYXl9IFRo
ZSBzb3J0ZWQgYXJyYXkuCi0gICAgICBAc2luY2UgMS4yLjAKLSAgICAgIEBwdWJsaWMKLSAgICAq
LwotICAgIHNvcnRCeTogZnVuY3Rpb24gKCkgewotICAgICAgdmFyIHNvcnRLZXlzID0gYXJndW1l
bnRzOwotCi0gICAgICByZXR1cm4gdGhpcy50b0FycmF5KCkuc29ydChmdW5jdGlvbiAoYSwgYikg
ewotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNvcnRLZXlzLmxlbmd0aDsgaSsrKSB7Ci0g
ICAgICAgICAgdmFyIGtleSA9IHNvcnRLZXlzW2ldOwotICAgICAgICAgIHZhciBwcm9wQSA9IF9l
bWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldChhLCBrZXkpOwotICAgICAgICAgIHZhciBwcm9wQiA9
IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldChiLCBrZXkpOwotICAgICAgICAgIC8vIHJldHVy
biAxIG9yIC0xIGVsc2UgY29udGludWUgdG8gdGhlIG5leHQgc29ydEtleQotICAgICAgICAgIHZh
ciBjb21wYXJlVmFsdWUgPSBfZW1iZXJSdW50aW1lQ29tcGFyZS5kZWZhdWx0KHByb3BBLCBwcm9w
Qik7Ci0KLSAgICAgICAgICBpZiAoY29tcGFyZVZhbHVlKSB7Ci0gICAgICAgICAgICByZXR1cm4g
Y29tcGFyZVZhbHVlOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gMDsK
LSAgICAgIH0pOwotICAgIH0KLSAgfSk7Ci0KLSAgZXhwb3J0cy5kZWZhdWx0ID0gRW51bWVyYWJs
ZTsKLX0pOwotCi0vKioKLSAgUmV0dXJucyBhIG5ldyBlbnVtZXJhYmxlIHRoYXQgY29udGFpbnMg
b25seSBpdGVtcyBjb250YWluaW5nIGEgdW5pcXVlIHByb3BlcnR5IHZhbHVlLgotICBUaGUgZGVm
YXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIGFuIGFycmF5IHJlZ2FyZGxlc3Mgb2YgdGhlIHJl
Y2VpdmVyIHR5cGUuCi0gICBgYGBqYXZhc2NyaXB0Ci0gIHZhciBhcnIgPSBbeyB2YWx1ZTogJ2En
IH0sIHsgdmFsdWU6ICdhJyB9LCB7IHZhbHVlOiAnYicgfSwgeyB2YWx1ZTogJ2InIH1dOwotICBh
cnIudW5pcUJ5KCd2YWx1ZScpOyAgLy8gW3sgdmFsdWU6ICdhJyB9LCB7IHZhbHVlOiAnYicgfV0K
LSAgYGBgCi0gICBAbWV0aG9kIHVuaXFCeQotICBAcmV0dXJuIHtFbWJlci5FbnVtZXJhYmxlfQot
ICBAcHVibGljCi0qLwotZW5pZmVkKCdlbWJlci1ydW50aW1lL21peGlucy9ldmVudGVkJywgWydl
eHBvcnRzJywgJ2VtYmVyLW1ldGFsL21peGluJywgJ2VtYmVyLW1ldGFsL2V2ZW50cyddLCBmdW5j
dGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0YWxNaXhpbiwgX2VtYmVyTWV0YWxFdmVudHMpIHsKLSAg
J3VzZSBzdHJpY3QnOwotCi0gIC8qKgotICBAbW9kdWxlIGVtYmVyCi0gIEBzdWJtb2R1bGUgZW1i
ZXItcnVudGltZQotICAqLwotCi0gIC8qKgotICAgIFRoaXMgbWl4aW4gYWxsb3dzIGZvciBFbWJl
ciBvYmplY3RzIHRvIHN1YnNjcmliZSB0byBhbmQgZW1pdCBldmVudHMuCi0gIAotICAgIGBgYGph
dmFzY3JpcHQKLSAgICBBcHAuUGVyc29uID0gRW1iZXIuT2JqZWN0LmV4dGVuZChFbWJlci5FdmVu
dGVkLCB7Ci0gICAgICBncmVldDogZnVuY3Rpb24oKSB7Ci0gICAgICAgIC8vIC4uLgotICAgICAg
ICB0aGlzLnRyaWdnZXIoJ2dyZWV0Jyk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gIAotICAgIHZhciBw
ZXJzb24gPSBBcHAuUGVyc29uLmNyZWF0ZSgpOwotICAKLSAgICBwZXJzb24ub24oJ2dyZWV0Jywg
ZnVuY3Rpb24oKSB7Ci0gICAgICBjb25zb2xlLmxvZygnT3VyIHBlcnNvbiBoYXMgZ3JlZXRlZCcp
OwotICAgIH0pOwotICAKLSAgICBwZXJzb24uZ3JlZXQoKTsKLSAgCi0gICAgLy8gb3V0cHV0czog
J091ciBwZXJzb24gaGFzIGdyZWV0ZWQnCi0gICAgYGBgCi0gIAotICAgIFlvdSBjYW4gYWxzbyBj
aGFpbiBtdWx0aXBsZSBldmVudCBzdWJzY3JpcHRpb25zOgotICAKLSAgICBgYGBqYXZhc2NyaXB0
Ci0gICAgcGVyc29uLm9uKCdncmVldCcsIGZ1bmN0aW9uKCkgewotICAgICAgY29uc29sZS5sb2co
J091ciBwZXJzb24gaGFzIGdyZWV0ZWQnKTsKLSAgICB9KS5vbmUoJ2dyZWV0JywgZnVuY3Rpb24o
KSB7Ci0gICAgICBjb25zb2xlLmxvZygnT2ZmZXIgb25lLXRpbWUgc3BlY2lhbCcpOwotICAgIH0p
Lm9mZignZXZlbnQnLCB0aGlzLCBmb3JnZXRUaGlzKTsKLSAgICBgYGAKLSAgCi0gICAgQGNsYXNz
IEV2ZW50ZWQKLSAgICBAbmFtZXNwYWNlIEVtYmVyCi0gICAgQHB1YmxpYwotICAgKi8KLSAgZXhw
b3J0cy5kZWZhdWx0ID0gX2VtYmVyTWV0YWxNaXhpbi5NaXhpbi5jcmVhdGUoewotCi0gICAgLyoq
Ci0gICAgIFN1YnNjcmliZXMgdG8gYSBuYW1lZCBldmVudCB3aXRoIGdpdmVuIGZ1bmN0aW9uLgot
ICAgICAgYGBgamF2YXNjcmlwdAotICAgICBwZXJzb24ub24oJ2RpZExvYWQnLCBmdW5jdGlvbigp
IHsKLSAgICAgICAvLyBmaXJlZCBvbmNlIHRoZSBwZXJzb24gaGFzIGxvYWRlZAotICAgICB9KTsK
LSAgICAgYGBgCi0gICAgICBBbiBvcHRpb25hbCB0YXJnZXQgY2FuIGJlIHBhc3NlZCBpbiBhcyB0
aGUgMm5kIGFyZ3VtZW50IHRoYXQgd2lsbAotICAgICBiZSBzZXQgYXMgdGhlICJ0aGlzIiBmb3Ig
dGhlIGNhbGxiYWNrLiBUaGlzIGlzIGEgZ29vZCB3YXkgdG8gZ2l2ZSB5b3VyCi0gICAgIGZ1bmN0
aW9uIGFjY2VzcyB0byB0aGUgb2JqZWN0IHRyaWdnZXJpbmcgdGhlIGV2ZW50LiBXaGVuIHRoZSB0
YXJnZXQKLSAgICAgcGFyYW1ldGVyIGlzIHVzZWQgdGhlIGNhbGxiYWNrIGJlY29tZXMgdGhlIHRo
aXJkIGFyZ3VtZW50LgotICAgICAgQG1ldGhvZCBvbgotICAgICBAcGFyYW0ge1N0cmluZ30gbmFt
ZSBUaGUgbmFtZSBvZiB0aGUgZXZlbnQKLSAgICAgQHBhcmFtIHtPYmplY3R9IFt0YXJnZXRdIFRo
ZSAidGhpcyIgYmluZGluZyBmb3IgdGhlIGNhbGxiYWNrCi0gICAgIEBwYXJhbSB7RnVuY3Rpb259
IG1ldGhvZCBUaGUgY2FsbGJhY2sgdG8gZXhlY3V0ZQotICAgICBAcmV0dXJuIHRoaXMKLSAgICAg
QHB1YmxpYwotICAgICovCi0gICAgb246IGZ1bmN0aW9uIChuYW1lLCB0YXJnZXQsIG1ldGhvZCkg
ewotICAgICAgX2VtYmVyTWV0YWxFdmVudHMuYWRkTGlzdGVuZXIodGhpcywgbmFtZSwgdGFyZ2V0
LCBtZXRob2QpOwotICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAg
U3Vic2NyaWJlcyBhIGZ1bmN0aW9uIHRvIGEgbmFtZWQgZXZlbnQgYW5kIHRoZW4gY2FuY2VscyB0
aGUgc3Vic2NyaXB0aW9uCi0gICAgICBhZnRlciB0aGUgZmlyc3QgdGltZSB0aGUgZXZlbnQgaXMg
dHJpZ2dlcmVkLiBJdCBpcyBnb29kIHRvIHVzZSBgYG9uZWBgIHdoZW4KLSAgICAgIHlvdSBvbmx5
IGNhcmUgYWJvdXQgdGhlIGZpcnN0IHRpbWUgYW4gZXZlbnQgaGFzIHRha2VuIHBsYWNlLgotICAg
ICAgIFRoaXMgZnVuY3Rpb24gdGFrZXMgYW4gb3B0aW9uYWwgMm5kIGFyZ3VtZW50IHRoYXQgd2ls
bCBiZWNvbWUgdGhlICJ0aGlzIgotICAgICAgdmFsdWUgZm9yIHRoZSBjYWxsYmFjay4gSWYgdGhp
cyBhcmd1bWVudCBpcyBwYXNzZWQgdGhlbiB0aGUgM3JkIGFyZ3VtZW50Ci0gICAgICBiZWNvbWVz
IHRoZSBmdW5jdGlvbi4KLSAgICAgICBAbWV0aG9kIG9uZQotICAgICAgQHBhcmFtIHtTdHJpbmd9
IG5hbWUgVGhlIG5hbWUgb2YgdGhlIGV2ZW50Ci0gICAgICBAcGFyYW0ge09iamVjdH0gW3Rhcmdl
dF0gVGhlICJ0aGlzIiBiaW5kaW5nIGZvciB0aGUgY2FsbGJhY2sKLSAgICAgIEBwYXJhbSB7RnVu
Y3Rpb259IG1ldGhvZCBUaGUgY2FsbGJhY2sgdG8gZXhlY3V0ZQotICAgICAgQHJldHVybiB0aGlz
Ci0gICAgICBAcHVibGljCi0gICAgKi8KLSAgICBvbmU6IGZ1bmN0aW9uIChuYW1lLCB0YXJnZXQs
IG1ldGhvZCkgewotICAgICAgaWYgKCFtZXRob2QpIHsKLSAgICAgICAgbWV0aG9kID0gdGFyZ2V0
OwotICAgICAgICB0YXJnZXQgPSBudWxsOwotICAgICAgfQotCi0gICAgICBfZW1iZXJNZXRhbEV2
ZW50cy5hZGRMaXN0ZW5lcih0aGlzLCBuYW1lLCB0YXJnZXQsIG1ldGhvZCwgdHJ1ZSk7Ci0gICAg
ICByZXR1cm4gdGhpczsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICBUcmlnZ2VycyBhIG5hbWVk
IGV2ZW50IGZvciB0aGUgb2JqZWN0LiBBbnkgYWRkaXRpb25hbCBhcmd1bWVudHMKLSAgICAgIHdp
bGwgYmUgcGFzc2VkIGFzIHBhcmFtZXRlcnMgdG8gdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBzdWJz
Y3JpYmVkIHRvIHRoZQotICAgICAgZXZlbnQuCi0gICAgICAgYGBgamF2YXNjcmlwdAotICAgICAg
cGVyc29uLm9uKCdkaWRFYXQnLCBmdW5jdGlvbihmb29kKSB7Ci0gICAgICAgIGNvbnNvbGUubG9n
KCdwZXJzb24gYXRlIHNvbWUgJyArIGZvb2QpOwotICAgICAgfSk7Ci0gICAgICAgcGVyc29uLnRy
aWdnZXIoJ2RpZEVhdCcsICdicm9jY29saScpOwotICAgICAgIC8vIG91dHB1dHM6IHBlcnNvbiBh
dGUgc29tZSBicm9jY29saQotICAgICAgYGBgCi0gICAgICBAbWV0aG9kIHRyaWdnZXIKLSAgICAg
IEBwYXJhbSB7U3RyaW5nfSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBldmVudAotICAgICAgQHBhcmFt
IHtPYmplY3QuLi59IGFyZ3MgT3B0aW9uYWwgYXJndW1lbnRzIHRvIHBhc3Mgb24KLSAgICAgIEBw
dWJsaWMKLSAgICAqLwotICAgIHRyaWdnZXI6IGZ1bmN0aW9uIChuYW1lKSB7Ci0gICAgICBmb3Ig
KHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4gPiAxID8gX2xl
biAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHsKLSAgICAgICAgYXJn
c1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07Ci0gICAgICB9Ci0KLSAgICAgIF9lbWJlck1l
dGFsRXZlbnRzLnNlbmRFdmVudCh0aGlzLCBuYW1lLCBhcmdzKTsKLSAgICB9LAotCi0gICAgLyoq
Ci0gICAgICBDYW5jZWxzIHN1YnNjcmlwdGlvbiBmb3IgZ2l2ZW4gbmFtZSwgdGFyZ2V0LCBhbmQg
bWV0aG9kLgotICAgICAgIEBtZXRob2Qgb2ZmCi0gICAgICBAcGFyYW0ge1N0cmluZ30gbmFtZSBU
aGUgbmFtZSBvZiB0aGUgZXZlbnQKLSAgICAgIEBwYXJhbSB7T2JqZWN0fSB0YXJnZXQgVGhlIHRh
cmdldCBvZiB0aGUgc3Vic2NyaXB0aW9uCi0gICAgICBAcGFyYW0ge0Z1bmN0aW9ufSBtZXRob2Qg
VGhlIGZ1bmN0aW9uIG9mIHRoZSBzdWJzY3JpcHRpb24KLSAgICAgIEByZXR1cm4gdGhpcwotICAg
ICAgQHB1YmxpYwotICAgICovCi0gICAgb2ZmOiBmdW5jdGlvbiAobmFtZSwgdGFyZ2V0LCBtZXRo
b2QpIHsKLSAgICAgIF9lbWJlck1ldGFsRXZlbnRzLnJlbW92ZUxpc3RlbmVyKHRoaXMsIG5hbWUs
IHRhcmdldCwgbWV0aG9kKTsKLSAgICAgIHJldHVybiB0aGlzOwotICAgIH0sCi0KLSAgICAvKioK
LSAgICAgIENoZWNrcyB0byBzZWUgaWYgb2JqZWN0IGhhcyBhbnkgc3Vic2NyaXB0aW9ucyBmb3Ig
bmFtZWQgZXZlbnQuCi0gICAgICAgQG1ldGhvZCBoYXMKLSAgICAgIEBwYXJhbSB7U3RyaW5nfSBu
YW1lIFRoZSBuYW1lIG9mIHRoZSBldmVudAotICAgICAgQHJldHVybiB7Qm9vbGVhbn0gZG9lcyB0
aGUgb2JqZWN0IGhhdmUgYSBzdWJzY3JpcHRpb24gZm9yIGV2ZW50Ci0gICAgICBAcHVibGljCi0g
ICAgICovCi0gICAgaGFzOiBmdW5jdGlvbiAobmFtZSkgewotICAgICAgcmV0dXJuIF9lbWJlck1l
dGFsRXZlbnRzLmhhc0xpc3RlbmVycyh0aGlzLCBuYW1lKTsKLSAgICB9Ci0gIH0pOwotfSk7Ci1l
bmlmZWQoJ2VtYmVyLXJ1bnRpbWUvbWl4aW5zL2ZyZWV6YWJsZScsIFsnZXhwb3J0cycsICdlbWJl
ci1tZXRhbC9kZWJ1ZycsICdlbWJlci1tZXRhbC9taXhpbicsICdlbWJlci1tZXRhbC9wcm9wZXJ0
eV9nZXQnLCAnZW1iZXItbWV0YWwvcHJvcGVydHlfc2V0J10sIGZ1bmN0aW9uIChleHBvcnRzLCBf
ZW1iZXJNZXRhbERlYnVnLCBfZW1iZXJNZXRhbE1peGluLCBfZW1iZXJNZXRhbFByb3BlcnR5X2dl
dCwgX2VtYmVyTWV0YWxQcm9wZXJ0eV9zZXQpIHsKLSAgLyoqCi0gIEBtb2R1bGUgZW1iZXIKLSAg
QHN1Ym1vZHVsZSBlbWJlci1ydW50aW1lCi0gICovCi0KLSAgJ3VzZSBzdHJpY3QnOwotCi0gIC8q
KgotICAgIFRoZSBgRW1iZXIuRnJlZXphYmxlYCBtaXhpbiBpbXBsZW1lbnRzIHNvbWUgYmFzaWMg
bWV0aG9kcyBmb3IgbWFya2luZyBhbgotICAgIG9iamVjdCBhcyBmcm96ZW4uIE9uY2UgYW4gb2Jq
ZWN0IGlzIGZyb3plbiBpdCBzaG91bGQgYmUgcmVhZCBvbmx5LiBObyBjaGFuZ2VzCi0gICAgbWF5
IGJlIG1hZGUgdGhlIGludGVybmFsIHN0YXRlIG9mIHRoZSBvYmplY3QuCi0gIAotICAgICMjIEVu
Zm9yY2VtZW50Ci0gIAotICAgIFRvIGZ1bGx5IHN1cHBvcnQgZnJlZXppbmcgaW4geW91ciBzdWJj
bGFzcywgeW91IG11c3QgaW5jbHVkZSB0aGlzIG1peGluIGFuZAotICAgIG92ZXJyaWRlIGFueSBt
ZXRob2QgdGhhdCBtaWdodCBhbHRlciBhbnkgcHJvcGVydHkgb24gdGhlIG9iamVjdCB0byBpbnN0
ZWFkCi0gICAgcmFpc2UgYW4gZXhjZXB0aW9uLiBZb3UgY2FuIGNoZWNrIHRoZSBzdGF0ZSBvZiBh
biBvYmplY3QgYnkgY2hlY2tpbmcgdGhlCi0gICAgYGlzRnJvemVuYCBwcm9wZXJ0eS4KLSAgCi0g
ICAgQWx0aG91Z2ggZnV0dXJlIHZlcnNpb25zIG9mIEphdmFTY3JpcHQgbWF5IHN1cHBvcnQgbGFu
Z3VhZ2UtbGV2ZWwgZnJlZXppbmcKLSAgICBvYmplY3Qgb2JqZWN0cywgdGhhdCBpcyBub3QgdGhl
IGNhc2UgdG9kYXkuIEV2ZW4gaWYgYW4gb2JqZWN0IGlzIGZyZWV6YWJsZSwKLSAgICBpdCBpcyBz
dGlsbCB0ZWNobmljYWxseSBwb3NzaWJsZSB0byBtb2RpZnkgdGhlIG9iamVjdCwgZXZlbiB0aG91
Z2ggaXQgY291bGQKLSAgICBicmVhayBvdGhlciBwYXJ0cyBvZiB5b3VyIGFwcGxpY2F0aW9uIHRo
YXQgZG8gbm90IGV4cGVjdCBhIGZyb3plbiBvYmplY3QgdG8KLSAgICBjaGFuZ2UuIEl0IGlzLCB0
aGVyZWZvcmUsIHZlcnkgaW1wb3J0YW50IHRoYXQgeW91IGFsd2F5cyByZXNwZWN0IHRoZQotICAg
IGBpc0Zyb3plbmAgcHJvcGVydHkgb24gYWxsIGZyZWV6YWJsZSBvYmplY3RzLgotICAKLSAgICAj
IyBFeGFtcGxlIFVzYWdlCi0gIAotICAgIFRoZSBleGFtcGxlIGJlbG93IHNob3dzIGEgc2ltcGxl
IG9iamVjdCB0aGF0IGltcGxlbWVudCB0aGUgYEVtYmVyLkZyZWV6YWJsZWAKLSAgICBwcm90b2Nv
bC4KLSAgCi0gICAgYGBgamF2YXNjcmlwdAotICAgIENvbnRhY3QgPSBFbWJlci5PYmplY3QuZXh0
ZW5kKEVtYmVyLkZyZWV6YWJsZSwgewotICAgICAgZmlyc3ROYW1lOiBudWxsLAotICAgICAgbGFz
dE5hbWU6IG51bGwsCi0gIAotICAgICAgLy8gc3dhcHMgdGhlIG5hbWVzCi0gICAgICBzd2FwTmFt
ZXM6IGZ1bmN0aW9uKCkgewotICAgICAgICBpZiAodGhpcy5nZXQoJ2lzRnJvemVuJykpIHRocm93
IEVtYmVyLkZST1pFTl9FUlJPUjsKLSAgICAgICAgdmFyIHRtcCA9IHRoaXMuZ2V0KCdmaXJzdE5h
bWUnKTsKLSAgICAgICAgdGhpcy5zZXQoJ2ZpcnN0TmFtZScsIHRoaXMuZ2V0KCdsYXN0TmFtZScp
KTsKLSAgICAgICAgdGhpcy5zZXQoJ2xhc3ROYW1lJywgdG1wKTsKLSAgICAgICAgcmV0dXJuIHRo
aXM7Ci0gICAgICB9Ci0gIAotICAgIH0pOwotICAKLSAgICBjID0gQ29udGFjdC5jcmVhdGUoeyBm
aXJzdE5hbWU6ICJKb2huIiwgbGFzdE5hbWU6ICJEb2UiIH0pOwotICAgIGMuc3dhcE5hbWVzKCk7
ICAvLyByZXR1cm5zIGMKLSAgICBjLmZyZWV6ZSgpOwotICAgIGMuc3dhcE5hbWVzKCk7ICAvLyBF
WENFUFRJT04KLSAgICBgYGAKLSAgCi0gICAgIyMgQ29weWluZwotICAKLSAgICBVc3VhbGx5IHRo
ZSBgRW1iZXIuRnJlZXphYmxlYCBwcm90b2NvbCBpcyBpbXBsZW1lbnRlZCBpbiBjb29wZXJhdGlv
biB3aXRoIHRoZQotICAgIGBFbWJlci5Db3B5YWJsZWAgcHJvdG9jb2wsIHdoaWNoIGRlZmluZXMg
YSBgZnJvemVuQ29weSgpYCBtZXRob2QgdGhhdCB3aWxsCi0gICAgcmV0dXJuIGEgZnJvemVuIG9i
amVjdCwgaWYgdGhlIG9iamVjdCBpbXBsZW1lbnRzIHRoaXMgbWV0aG9kIGFzIHdlbGwuCi0gIAot
ICAgIEBjbGFzcyBGcmVlemFibGUKLSAgICBAbmFtZXNwYWNlIEVtYmVyCi0gICAgQHNpbmNlIEVt
YmVyIDAuOQotICAgIEBkZXByZWNhdGVkIFVzZSBgT2JqZWN0LmZyZWV6ZWAgaW5zdGVhZC4KLSAg
ICBAcHJpdmF0ZQotICAqLwotICB2YXIgRnJlZXphYmxlID0gX2VtYmVyTWV0YWxNaXhpbi5NaXhp
bi5jcmVhdGUoewotCi0gICAgaW5pdDogZnVuY3Rpb24gKCkgewotICAgICAgX2VtYmVyTWV0YWxE
ZWJ1Zy5kZXByZWNhdGUoJ2BFbWJlci5GcmVlemFibGVgIGlzIGRlcHJlY2F0ZWQsIHVzZSBgT2Jq
ZWN0LmZyZWV6ZWAgaW5zdGVhZC4nLCBmYWxzZSwgeyBpZDogJ2VtYmVyLXJ1bnRpbWUuZnJlZXph
YmxlLWluaXQnLCB1bnRpbDogJzMuMC4wJyB9KTsKLSAgICAgIHRoaXMuX3N1cGVyLmFwcGx5KHRo
aXMsIGFyZ3VtZW50cyk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAgU2V0IHRvIGB0cnVlYCB3
aGVuIHRoZSBvYmplY3QgaXMgZnJvemVuLiBVc2UgdGhpcyBwcm9wZXJ0eSB0byBkZXRlY3QKLSAg
ICAgIHdoZXRoZXIgeW91ciBvYmplY3QgaXMgZnJvemVuIG9yIG5vdC4KLSAgICAgICBAcHJvcGVy
dHkgaXNGcm96ZW4KLSAgICAgIEB0eXBlIEJvb2xlYW4KLSAgICAgIEBwcml2YXRlCi0gICAgKi8K
LSAgICBpc0Zyb3plbjogZmFsc2UsCi0KLSAgICAvKioKLSAgICAgIEZyZWV6ZXMgdGhlIG9iamVj
dC4gT25jZSB0aGlzIG1ldGhvZCBoYXMgYmVlbiBjYWxsZWQgdGhlIG9iamVjdCBzaG91bGQKLSAg
ICAgIG5vIGxvbmdlciBhbGxvdyBhbnkgcHJvcGVydGllcyB0byBiZSBlZGl0ZWQuCi0gICAgICAg
QG1ldGhvZCBmcmVlemUKLSAgICAgIEByZXR1cm4ge09iamVjdH0gcmVjZWl2ZXIKLSAgICAgIEBw
cml2YXRlCi0gICAgKi8KLSAgICBmcmVlemU6IGZ1bmN0aW9uICgpIHsKLSAgICAgIGlmIChfZW1i
ZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywgJ2lzRnJvemVuJykpIHsKLSAgICAgICAgcmV0
dXJuIHRoaXM7Ci0gICAgICB9Ci0KLSAgICAgIF9lbWJlck1ldGFsUHJvcGVydHlfc2V0LnNldCh0
aGlzLCAnaXNGcm96ZW4nLCB0cnVlKTsKLSAgICAgIHJldHVybiB0aGlzOwotICAgIH0KLQotICB9
KTsKLQotICBleHBvcnRzLkZyZWV6YWJsZSA9IEZyZWV6YWJsZTsKLSAgdmFyIEZST1pFTl9FUlJP
UiA9ICdGcm96ZW4gb2JqZWN0IGNhbm5vdCBiZSBtb2RpZmllZC4nOwotICBleHBvcnRzLkZST1pF
Tl9FUlJPUiA9IEZST1pFTl9FUlJPUjsKLX0pOwotZW5pZmVkKCdlbWJlci1ydW50aW1lL21peGlu
cy9tdXRhYmxlX2FycmF5JywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFsL3Byb3BlcnR5X2dldCcs
ICdlbWJlci1tZXRhbC9lcnJvcicsICdlbWJlci1tZXRhbC9taXhpbicsICdlbWJlci1ydW50aW1l
L21peGlucy9hcnJheScsICdlbWJlci1ydW50aW1lL21peGlucy9tdXRhYmxlX2VudW1lcmFibGUn
LCAnZW1iZXItcnVudGltZS9taXhpbnMvZW51bWVyYWJsZSddLCBmdW5jdGlvbiAoZXhwb3J0cywg
X2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQsIF9lbWJlck1ldGFsRXJyb3IsIF9lbWJlck1ldGFsTWl4
aW4sIF9lbWJlclJ1bnRpbWVNaXhpbnNBcnJheSwgX2VtYmVyUnVudGltZU1peGluc011dGFibGVf
ZW51bWVyYWJsZSwgX2VtYmVyUnVudGltZU1peGluc0VudW1lcmFibGUpIHsKLSAgLyoqCi0gIEBt
b2R1bGUgZW1iZXIKLSAgQHN1Ym1vZHVsZSBlbWJlci1ydW50aW1lCi0gICovCi0KLSAgLy8gcmVx
dWlyZSgnZW1iZXItcnVudGltZS9taXhpbnMvYXJyYXknKTsKLSAgLy8gcmVxdWlyZSgnZW1iZXIt
cnVudGltZS9taXhpbnMvbXV0YWJsZV9lbnVtZXJhYmxlJyk7Ci0KLSAgLy8gLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgotICAvLyBDT05T
VEFOVFMKLSAgLy8KLQotICAndXNlIHN0cmljdCc7Ci0KLSAgdmFyIE9VVF9PRl9SQU5HRV9FWENF
UFRJT04gPSAnSW5kZXggb3V0IG9mIHJhbmdlJzsKLSAgdmFyIEVNUFRZID0gW107Ci0KLSAgLy8g
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
LgotICAvLyBIRUxQRVJTCi0gIC8vCi0KLSAgLyoqCi0gICAgVGhpcyBtaXhpbiBkZWZpbmVzIHRo
ZSBBUEkgZm9yIG1vZGlmeWluZyBhcnJheS1saWtlIG9iamVjdHMuIFRoZXNlIG1ldGhvZHMKLSAg
ICBjYW4gYmUgYXBwbGllZCBvbmx5IHRvIGEgY29sbGVjdGlvbiB0aGF0IGtlZXBzIGl0cyBpdGVt
cyBpbiBhbiBvcmRlcmVkIHNldC4KLSAgICBJdCBidWlsZHMgdXBvbiB0aGUgQXJyYXkgbWl4aW4g
YW5kIGFkZHMgbWV0aG9kcyB0byBtb2RpZnkgdGhlIGFycmF5LgotICAgIE9uZSBjb25jcmV0ZSBp
bXBsZW1lbnRhdGlvbnMgb2YgdGhpcyBjbGFzcyBpbmNsdWRlIEFycmF5UHJveHkuCi0gIAotICAg
IEl0IGlzIGltcG9ydGFudCB0byB1c2UgdGhlIG1ldGhvZHMgaW4gdGhpcyBjbGFzcyB0byBtb2Rp
ZnkgYXJyYXlzIHNvIHRoYXQKLSAgICBjaGFuZ2VzIGFyZSBvYnNlcnZhYmxlLiBUaGlzIGFsbG93
cyB0aGUgYmluZGluZyBzeXN0ZW0gaW4gRW1iZXIgdG8gZnVuY3Rpb24KLSAgICBjb3JyZWN0bHku
Ci0gIAotICAKLSAgICBOb3RlIHRoYXQgYW4gQXJyYXkgY2FuIGNoYW5nZSBldmVuIGlmIGl0IGRv
ZXMgbm90IGltcGxlbWVudCB0aGlzIG1peGluLgotICAgIEZvciBleGFtcGxlLCBvbmUgbWlnaHQg
aW1wbGVtZW50IGEgU3BhcnNlQXJyYXkgdGhhdCBjYW5ub3QgYmUgZGlyZWN0bHkKLSAgICBtb2Rp
ZmllZCwgYnV0IGlmIGl0cyB1bmRlcmx5aW5nIGVudW1lcmFibGUgY2hhbmdlcywgaXQgd2lsbCBj
aGFuZ2UgYWxzby4KLSAgCi0gICAgQGNsYXNzIE11dGFibGVBcnJheQotICAgIEBuYW1lc3BhY2Ug
RW1iZXIKLSAgICBAdXNlcyBFbWJlci5BcnJheQotICAgIEB1c2VzIEVtYmVyLk11dGFibGVFbnVt
ZXJhYmxlCi0gICAgQHB1YmxpYwotICAqLwotICBleHBvcnRzLmRlZmF1bHQgPSBfZW1iZXJNZXRh
bE1peGluLk1peGluLmNyZWF0ZShfZW1iZXJSdW50aW1lTWl4aW5zQXJyYXkuZGVmYXVsdCwgX2Vt
YmVyUnVudGltZU1peGluc011dGFibGVfZW51bWVyYWJsZS5kZWZhdWx0LCB7Ci0KLSAgICAvKioK
LSAgICAgIF9fUmVxdWlyZWQuX18gWW91IG11c3QgaW1wbGVtZW50IHRoaXMgbWV0aG9kIHRvIGFw
cGx5IHRoaXMgbWl4aW4uCi0gICAgICAgVGhpcyBpcyBvbmUgb2YgdGhlIHByaW1pdGl2ZXMgeW91
IG11c3QgaW1wbGVtZW50IHRvIHN1cHBvcnQgYEVtYmVyLkFycmF5YC4KLSAgICAgIFlvdSBzaG91
bGQgcmVwbGFjZSBhbXQgb2JqZWN0cyBzdGFydGVkIGF0IGlkeCB3aXRoIHRoZSBvYmplY3RzIGlu
IHRoZQotICAgICAgcGFzc2VkIGFycmF5LiBZb3Ugc2hvdWxkIGFsc28gY2FsbCBgdGhpcy5lbnVt
ZXJhYmxlQ29udGVudERpZENoYW5nZSgpYAotICAgICAgIEBtZXRob2QgcmVwbGFjZQotICAgICAg
QHBhcmFtIHtOdW1iZXJ9IGlkeCBTdGFydGluZyBpbmRleCBpbiB0aGUgYXJyYXkgdG8gcmVwbGFj
ZS4gSWYKLSAgICAgICAgaWR4ID49IGxlbmd0aCwgdGhlbiBhcHBlbmQgdG8gdGhlIGVuZCBvZiB0
aGUgYXJyYXkuCi0gICAgICBAcGFyYW0ge051bWJlcn0gYW10IE51bWJlciBvZiBlbGVtZW50cyB0
aGF0IHNob3VsZCBiZSByZW1vdmVkIGZyb20KLSAgICAgICAgdGhlIGFycmF5LCBzdGFydGluZyBh
dCAqaWR4Ki4KLSAgICAgIEBwYXJhbSB7QXJyYXl9IG9iamVjdHMgQW4gYXJyYXkgb2YgemVybyBv
ciBtb3JlIG9iamVjdHMgdGhhdCBzaG91bGQgYmUKLSAgICAgICAgaW5zZXJ0ZWQgaW50byB0aGUg
YXJyYXkgYXQgKmlkeCoKLSAgICAgIEBwdWJsaWMKLSAgICAqLwotICAgIHJlcGxhY2U6IG51bGws
Ci0KLSAgICAvKioKLSAgICAgIFJlbW92ZSBhbGwgZWxlbWVudHMgZnJvbSB0aGUgYXJyYXkuIFRo
aXMgaXMgdXNlZnVsIGlmIHlvdQotICAgICAgd2FudCB0byByZXVzZSBhbiBleGlzdGluZyBhcnJh
eSB3aXRob3V0IGhhdmluZyB0byByZWNyZWF0ZSBpdC4KLSAgICAgICBgYGBqYXZhc2NyaXB0Ci0g
ICAgICB2YXIgY29sb3JzID0gWydyZWQnLCAnZ3JlZW4nLCAnYmx1ZSddOwotICAgICAgIGNvbG9y
Lmxlbmd0aCgpOyAgIC8vICAzCi0gICAgICBjb2xvcnMuY2xlYXIoKTsgICAvLyAgW10KLSAgICAg
IGNvbG9ycy5sZW5ndGgoKTsgIC8vICAwCi0gICAgICBgYGAKLSAgICAgICBAbWV0aG9kIGNsZWFy
Ci0gICAgICBAcmV0dXJuIHtFbWJlci5BcnJheX0gQW4gZW1wdHkgQXJyYXkuCi0gICAgICBAcHVi
bGljCi0gICAgKi8KLSAgICBjbGVhcjogZnVuY3Rpb24gKCkgewotICAgICAgdmFyIGxlbiA9IF9l
bWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0aGlzLCAnbGVuZ3RoJyk7Ci0gICAgICBpZiAobGVu
ID09PSAwKSB7Ci0gICAgICAgIHJldHVybiB0aGlzOwotICAgICAgfQotCi0gICAgICB0aGlzLnJl
cGxhY2UoMCwgbGVuLCBFTVBUWSk7Ci0gICAgICByZXR1cm4gdGhpczsKLSAgICB9LAotCi0gICAg
LyoqCi0gICAgICBUaGlzIHdpbGwgdXNlIHRoZSBwcmltaXRpdmUgYHJlcGxhY2UoKWAgbWV0aG9k
IHRvIGluc2VydCBhbiBvYmplY3QgYXQgdGhlCi0gICAgICBzcGVjaWZpZWQgaW5kZXguCi0gICAg
ICAgYGBgamF2YXNjcmlwdAotICAgICAgdmFyIGNvbG9ycyA9IFsncmVkJywgJ2dyZWVuJywgJ2Js
dWUnXTsKLSAgICAgICBjb2xvcnMuaW5zZXJ0QXQoMiwgJ3llbGxvdycpOyAgLy8gWydyZWQnLCAn
Z3JlZW4nLCAneWVsbG93JywgJ2JsdWUnXQotICAgICAgY29sb3JzLmluc2VydEF0KDUsICdvcmFu
Z2UnKTsgIC8vIEVycm9yOiBJbmRleCBvdXQgb2YgcmFuZ2UKLSAgICAgIGBgYAotICAgICAgIEBt
ZXRob2QgaW5zZXJ0QXQKLSAgICAgIEBwYXJhbSB7TnVtYmVyfSBpZHggaW5kZXggb2YgaW5zZXJ0
IHRoZSBvYmplY3QgYXQuCi0gICAgICBAcGFyYW0ge09iamVjdH0gb2JqZWN0IG9iamVjdCB0byBp
bnNlcnQKLSAgICAgIEByZXR1cm4ge0VtYmVyLkFycmF5fSByZWNlaXZlcgotICAgICAgQHB1Ymxp
YwotICAgICovCi0gICAgaW5zZXJ0QXQ6IGZ1bmN0aW9uIChpZHgsIG9iamVjdCkgewotICAgICAg
aWYgKGlkeCA+IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0aGlzLCAnbGVuZ3RoJykpIHsK
LSAgICAgICAgdGhyb3cgbmV3IF9lbWJlck1ldGFsRXJyb3IuZGVmYXVsdChPVVRfT0ZfUkFOR0Vf
RVhDRVBUSU9OKTsKLSAgICAgIH0KLQotICAgICAgdGhpcy5yZXBsYWNlKGlkeCwgMCwgW29iamVj
dF0pOwotICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAgUmVtb3Zl
IGFuIG9iamVjdCBhdCB0aGUgc3BlY2lmaWVkIGluZGV4IHVzaW5nIHRoZSBgcmVwbGFjZSgpYCBw
cmltaXRpdmUKLSAgICAgIG1ldGhvZC4gWW91IGNhbiBwYXNzIGVpdGhlciBhIHNpbmdsZSBpbmRl
eCwgb3IgYSBzdGFydCBhbmQgYSBsZW5ndGguCi0gICAgICAgSWYgeW91IHBhc3MgYSBzdGFydCBh
bmQgbGVuZ3RoIHRoYXQgaXMgYmV5b25kIHRoZQotICAgICAgbGVuZ3RoIHRoaXMgbWV0aG9kIHdp
bGwgdGhyb3cgYW4gYE9VVF9PRl9SQU5HRV9FWENFUFRJT05gLgotICAgICAgIGBgYGphdmFzY3Jp
cHQKLSAgICAgIHZhciBjb2xvcnMgPSBbJ3JlZCcsICdncmVlbicsICdibHVlJywgJ3llbGxvdycs
ICdvcmFuZ2UnXTsKLSAgICAgICBjb2xvcnMucmVtb3ZlQXQoMCk7ICAgICAvLyBbJ2dyZWVuJywg
J2JsdWUnLCAneWVsbG93JywgJ29yYW5nZSddCi0gICAgICBjb2xvcnMucmVtb3ZlQXQoMiwgMik7
ICAvLyBbJ2dyZWVuJywgJ2JsdWUnXQotICAgICAgY29sb3JzLnJlbW92ZUF0KDQsIDIpOyAgLy8g
RXJyb3I6IEluZGV4IG91dCBvZiByYW5nZQotICAgICAgYGBgCi0gICAgICAgQG1ldGhvZCByZW1v
dmVBdAotICAgICAgQHBhcmFtIHtOdW1iZXJ9IHN0YXJ0IGluZGV4LCBzdGFydCBvZiByYW5nZQot
ICAgICAgQHBhcmFtIHtOdW1iZXJ9IGxlbiBsZW5ndGggb2YgcGFzc2luZyByYW5nZQotICAgICAg
QHJldHVybiB7RW1iZXIuQXJyYXl9IHJlY2VpdmVyCi0gICAgICBAcHVibGljCi0gICAgKi8KLSAg
ICByZW1vdmVBdDogZnVuY3Rpb24gKHN0YXJ0LCBsZW4pIHsKLSAgICAgIGlmICgnbnVtYmVyJyA9
PT0gdHlwZW9mIHN0YXJ0KSB7Ci0gICAgICAgIGlmIChzdGFydCA8IDAgfHwgc3RhcnQgPj0gX2Vt
YmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsICdsZW5ndGgnKSkgewotICAgICAgICAgIHRo
cm93IG5ldyBfZW1iZXJNZXRhbEVycm9yLmRlZmF1bHQoT1VUX09GX1JBTkdFX0VYQ0VQVElPTik7
Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBmYXN0IGNhc2UKLSAgICAgICAgaWYgKGxlbiA9PT0g
dW5kZWZpbmVkKSB7Ci0gICAgICAgICAgbGVuID0gMTsKLSAgICAgICAgfQotCi0gICAgICAgIHRo
aXMucmVwbGFjZShzdGFydCwgbGVuLCBFTVBUWSk7Ci0gICAgICB9Ci0KLSAgICAgIHJldHVybiB0
aGlzOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgIFB1c2ggdGhlIG9iamVjdCBvbnRvIHRoZSBl
bmQgb2YgdGhlIGFycmF5LiBXb3JrcyBqdXN0IGxpa2UgYHB1c2goKWAgYnV0IGl0Ci0gICAgICBp
cyBLVk8tY29tcGxpYW50LgotICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgIHZhciBjb2xvcnMg
PSBbJ3JlZCcsICdncmVlbiddOwotICAgICAgIGNvbG9ycy5wdXNoT2JqZWN0KCdibGFjaycpOyAg
ICAgLy8gWydyZWQnLCAnZ3JlZW4nLCAnYmxhY2snXQotICAgICAgY29sb3JzLnB1c2hPYmplY3Qo
Wyd5ZWxsb3cnXSk7ICAvLyBbJ3JlZCcsICdncmVlbicsIFsneWVsbG93J11dCi0gICAgICBgYGAK
LSAgICAgICBAbWV0aG9kIHB1c2hPYmplY3QKLSAgICAgIEBwYXJhbSB7Kn0gb2JqIG9iamVjdCB0
byBwdXNoCi0gICAgICBAcmV0dXJuIG9iamVjdCBzYW1lIG9iamVjdCBwYXNzZWQgYXMgYSBwYXJh
bQotICAgICAgQHB1YmxpYwotICAgICovCi0gICAgcHVzaE9iamVjdDogZnVuY3Rpb24gKG9iaikg
ewotICAgICAgdGhpcy5pbnNlcnRBdChfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywg
J2xlbmd0aCcpLCBvYmopOwotICAgICAgcmV0dXJuIG9iajsKLSAgICB9LAotCi0gICAgLyoqCi0g
ICAgICBBZGQgdGhlIG9iamVjdHMgaW4gdGhlIHBhc3NlZCBudW1lcmFibGUgdG8gdGhlIGVuZCBv
ZiB0aGUgYXJyYXkuIERlZmVycwotICAgICAgbm90aWZ5aW5nIG9ic2VydmVycyBvZiB0aGUgY2hh
bmdlIHVudGlsIGFsbCBvYmplY3RzIGFyZSBhZGRlZC4KLSAgICAgICBgYGBqYXZhc2NyaXB0Ci0g
ICAgICB2YXIgY29sb3JzID0gWydyZWQnXTsKLSAgICAgICBjb2xvcnMucHVzaE9iamVjdHMoWyd5
ZWxsb3cnLCAnb3JhbmdlJ10pOyAgLy8gWydyZWQnLCAneWVsbG93JywgJ29yYW5nZSddCi0gICAg
ICBgYGAKLSAgICAgICBAbWV0aG9kIHB1c2hPYmplY3RzCi0gICAgICBAcGFyYW0ge0VtYmVyLkVu
dW1lcmFibGV9IG9iamVjdHMgdGhlIG9iamVjdHMgdG8gYWRkCi0gICAgICBAcmV0dXJuIHtFbWJl
ci5BcnJheX0gcmVjZWl2ZXIKLSAgICAgIEBwdWJsaWMKLSAgICAqLwotICAgIHB1c2hPYmplY3Rz
OiBmdW5jdGlvbiAob2JqZWN0cykgewotICAgICAgaWYgKCEoX2VtYmVyUnVudGltZU1peGluc0Vu
dW1lcmFibGUuZGVmYXVsdC5kZXRlY3Qob2JqZWN0cykgfHwgQXJyYXkuaXNBcnJheShvYmplY3Rz
KSkpIHsKLSAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTXVzdCBwYXNzIEVtYmVyLkVudW1l
cmFibGUgdG8gRW1iZXIuTXV0YWJsZUFycmF5I3B1c2hPYmplY3RzJyk7Ci0gICAgICB9Ci0gICAg
ICB0aGlzLnJlcGxhY2UoX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsICdsZW5ndGgn
KSwgMCwgb2JqZWN0cyk7Ci0gICAgICByZXR1cm4gdGhpczsKLSAgICB9LAotCi0gICAgLyoqCi0g
ICAgICBQb3Agb2JqZWN0IGZyb20gYXJyYXkgb3IgbmlsIGlmIG5vbmUgYXJlIGxlZnQuIFdvcmtz
IGp1c3QgbGlrZSBgcG9wKClgIGJ1dAotICAgICAgaXQgaXMgS1ZPLWNvbXBsaWFudC4KLSAgICAg
ICBgYGBqYXZhc2NyaXB0Ci0gICAgICB2YXIgY29sb3JzID0gWydyZWQnLCAnZ3JlZW4nLCAnYmx1
ZSddOwotICAgICAgIGNvbG9ycy5wb3BPYmplY3QoKTsgICAvLyAnYmx1ZScKLSAgICAgIGNvbnNv
bGUubG9nKGNvbG9ycyk7ICAvLyBbJ3JlZCcsICdncmVlbiddCi0gICAgICBgYGAKLSAgICAgICBA
bWV0aG9kIHBvcE9iamVjdAotICAgICAgQHJldHVybiBvYmplY3QKLSAgICAgIEBwdWJsaWMKLSAg
ICAqLwotICAgIHBvcE9iamVjdDogZnVuY3Rpb24gKCkgewotICAgICAgdmFyIGxlbiA9IF9lbWJl
ck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0aGlzLCAnbGVuZ3RoJyk7Ci0gICAgICBpZiAobGVuID09
PSAwKSB7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgICAgfQotCi0gICAgICB2YXIgcmV0ID0g
X2VtYmVyUnVudGltZU1peGluc0FycmF5Lm9iamVjdEF0KHRoaXMsIGxlbiAtIDEpOwotICAgICAg
dGhpcy5yZW1vdmVBdChsZW4gLSAxLCAxKTsKLSAgICAgIHJldHVybiByZXQ7Ci0gICAgfSwKLQot
ICAgIC8qKgotICAgICAgU2hpZnQgYW4gb2JqZWN0IGZyb20gc3RhcnQgb2YgYXJyYXkgb3Igbmls
IGlmIG5vbmUgYXJlIGxlZnQuIFdvcmtzIGp1c3QKLSAgICAgIGxpa2UgYHNoaWZ0KClgIGJ1dCBp
dCBpcyBLVk8tY29tcGxpYW50LgotICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgIHZhciBjb2xv
cnMgPSBbJ3JlZCcsICdncmVlbicsICdibHVlJ107Ci0gICAgICAgY29sb3JzLnNoaWZ0T2JqZWN0
KCk7ICAvLyAncmVkJwotICAgICAgY29uc29sZS5sb2coY29sb3JzKTsgICAvLyBbJ2dyZWVuJywg
J2JsdWUnXQotICAgICAgYGBgCi0gICAgICAgQG1ldGhvZCBzaGlmdE9iamVjdAotICAgICAgQHJl
dHVybiBvYmplY3QKLSAgICAgIEBwdWJsaWMKLSAgICAqLwotICAgIHNoaWZ0T2JqZWN0OiBmdW5j
dGlvbiAoKSB7Ci0gICAgICBpZiAoX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsICds
ZW5ndGgnKSA9PT0gMCkgewotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgIH0KLQotICAgICAg
dmFyIHJldCA9IF9lbWJlclJ1bnRpbWVNaXhpbnNBcnJheS5vYmplY3RBdCh0aGlzLCAwKTsKLSAg
ICAgIHRoaXMucmVtb3ZlQXQoMCk7Ci0gICAgICByZXR1cm4gcmV0OwotICAgIH0sCi0KLSAgICAv
KioKLSAgICAgIFVuc2hpZnQgYW4gb2JqZWN0IHRvIHN0YXJ0IG9mIGFycmF5LiBXb3JrcyBqdXN0
IGxpa2UgYHVuc2hpZnQoKWAgYnV0IGl0IGlzCi0gICAgICBLVk8tY29tcGxpYW50LgotICAgICAg
IGBgYGphdmFzY3JpcHQKLSAgICAgIHZhciBjb2xvcnMgPSBbJ3JlZCddOwotICAgICAgIGNvbG9y
cy51bnNoaWZ0T2JqZWN0KCd5ZWxsb3cnKTsgICAgLy8gWyd5ZWxsb3cnLCAncmVkJ10KLSAgICAg
IGNvbG9ycy51bnNoaWZ0T2JqZWN0KFsnYmxhY2snXSk7ICAgLy8gW1snYmxhY2snXSwgJ3llbGxv
dycsICdyZWQnXQotICAgICAgYGBgCi0gICAgICAgQG1ldGhvZCB1bnNoaWZ0T2JqZWN0Ci0gICAg
ICBAcGFyYW0geyp9IG9iaiBvYmplY3QgdG8gdW5zaGlmdAotICAgICAgQHJldHVybiBvYmplY3Qg
c2FtZSBvYmplY3QgcGFzc2VkIGFzIGEgcGFyYW0KLSAgICAgIEBwdWJsaWMKLSAgICAqLwotICAg
IHVuc2hpZnRPYmplY3Q6IGZ1bmN0aW9uIChvYmopIHsKLSAgICAgIHRoaXMuaW5zZXJ0QXQoMCwg
b2JqKTsKLSAgICAgIHJldHVybiBvYmo7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAgQWRkcyB0
aGUgbmFtZWQgb2JqZWN0cyB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcnJheS4gRGVmZXJzIG5v
dGlmeWluZwotICAgICAgb2JzZXJ2ZXJzIHVudGlsIGFsbCBvYmplY3RzIGhhdmUgYmVlbiBhZGRl
ZC4KLSAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICB2YXIgY29sb3JzID0gWydyZWQnXTsKLSAg
ICAgICBjb2xvcnMudW5zaGlmdE9iamVjdHMoWydibGFjaycsICd3aGl0ZSddKTsgICAvLyBbJ2Js
YWNrJywgJ3doaXRlJywgJ3JlZCddCi0gICAgICBjb2xvcnMudW5zaGlmdE9iamVjdHMoJ3llbGxv
dycpOyAvLyBUeXBlIEVycm9yOiAndW5kZWZpbmVkJyBpcyBub3QgYSBmdW5jdGlvbgotICAgICAg
YGBgCi0gICAgICAgQG1ldGhvZCB1bnNoaWZ0T2JqZWN0cwotICAgICAgQHBhcmFtIHtFbWJlci5F
bnVtZXJhYmxlfSBvYmplY3RzIHRoZSBvYmplY3RzIHRvIGFkZAotICAgICAgQHJldHVybiB7RW1i
ZXIuQXJyYXl9IHJlY2VpdmVyCi0gICAgICBAcHVibGljCi0gICAgKi8KLSAgICB1bnNoaWZ0T2Jq
ZWN0czogZnVuY3Rpb24gKG9iamVjdHMpIHsKLSAgICAgIHRoaXMucmVwbGFjZSgwLCAwLCBvYmpl
Y3RzKTsKLSAgICAgIHJldHVybiB0aGlzOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgIFJldmVy
c2Ugb2JqZWN0cyBpbiB0aGUgYXJyYXkuIFdvcmtzIGp1c3QgbGlrZSBgcmV2ZXJzZSgpYCBidXQg
aXQgaXMKLSAgICAgIEtWTy1jb21wbGlhbnQuCi0gICAgICAgQG1ldGhvZCByZXZlcnNlT2JqZWN0
cwotICAgICAgQHJldHVybiB7RW1iZXIuQXJyYXl9IHJlY2VpdmVyCi0gICAgICAgQHB1YmxpYwot
ICAgICovCi0gICAgcmV2ZXJzZU9iamVjdHM6IGZ1bmN0aW9uICgpIHsKLSAgICAgIHZhciBsZW4g
PSBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywgJ2xlbmd0aCcpOwotICAgICAgaWYg
KGxlbiA9PT0gMCkgewotICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgIH0KLQotICAgICAgdmFy
IG9iamVjdHMgPSB0aGlzLnRvQXJyYXkoKS5yZXZlcnNlKCk7Ci0gICAgICB0aGlzLnJlcGxhY2Uo
MCwgbGVuLCBvYmplY3RzKTsKLSAgICAgIHJldHVybiB0aGlzOwotICAgIH0sCi0KLSAgICAvKioK
LSAgICAgIFJlcGxhY2UgYWxsIHRoZSByZWNlaXZlcidzIGNvbnRlbnQgd2l0aCBjb250ZW50IG9m
IHRoZSBhcmd1bWVudC4KLSAgICAgIElmIGFyZ3VtZW50IGlzIGFuIGVtcHR5IGFycmF5IHJlY2Vp
dmVyIHdpbGwgYmUgY2xlYXJlZC4KLSAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICB2YXIgY29s
b3JzID0gWydyZWQnLCAnZ3JlZW4nLCAnYmx1ZSddOwotICAgICAgIGNvbG9ycy5zZXRPYmplY3Rz
KFsnYmxhY2snLCAnd2hpdGUnXSk7ICAvLyBbJ2JsYWNrJywgJ3doaXRlJ10KLSAgICAgIGNvbG9y
cy5zZXRPYmplY3RzKFtdKTsgICAgICAgICAgICAgICAgICAvLyBbXQotICAgICAgYGBgCi0gICAg
ICAgQG1ldGhvZCBzZXRPYmplY3RzCi0gICAgICBAcGFyYW0ge0VtYmVyLkFycmF5fSBvYmplY3Rz
IGFycmF5IHdob3NlIGNvbnRlbnQgd2lsbCBiZSB1c2VkIGZvciByZXBsYWNpbmcKLSAgICAgICAg
ICB0aGUgY29udGVudCBvZiB0aGUgcmVjZWl2ZXIKLSAgICAgIEByZXR1cm4ge0VtYmVyLkFycmF5
fSByZWNlaXZlciB3aXRoIHRoZSBuZXcgY29udGVudAotICAgICAgQHB1YmxpYwotICAgICovCi0g
ICAgc2V0T2JqZWN0czogZnVuY3Rpb24gKG9iamVjdHMpIHsKLSAgICAgIGlmIChvYmplY3RzLmxl
bmd0aCA9PT0gMCkgewotICAgICAgICByZXR1cm4gdGhpcy5jbGVhcigpOwotICAgICAgfQotCi0g
ICAgICB2YXIgbGVuID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsICdsZW5ndGgn
KTsKLSAgICAgIHRoaXMucmVwbGFjZSgwLCBsZW4sIG9iamVjdHMpOwotICAgICAgcmV0dXJuIHRo
aXM7Ci0gICAgfSwKLQotICAgIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLSAgICAvLyBJTVBMRU1FTlQgRW1iZXIuTXV0YWJsZUVu
dW1lcmFibGUKLSAgICAvLwotCi0gICAgLyoqCi0gICAgICBSZW1vdmUgYWxsIG9jY3VycmVuY2Vz
IG9mIGFuIG9iamVjdCBpbiB0aGUgYXJyYXkuCi0gICAgICAgYGBgamF2YXNjcmlwdAotICAgICAg
dmFyIGNpdGllcyA9IFsnQ2hpY2FnbycsICdCZXJsaW4nLCAnTGltYScsICdDaGljYWdvJ107Ci0g
ICAgICAgY2l0aWVzLnJlbW92ZU9iamVjdCgnQ2hpY2FnbycpOyAgLy8gWydCZXJsaW4nLCAnTGlt
YSddCi0gICAgICBjaXRpZXMucmVtb3ZlT2JqZWN0KCdMaW1hJyk7ICAgICAvLyBbJ0Jlcmxpbidd
Ci0gICAgICBjaXRpZXMucmVtb3ZlT2JqZWN0KCdUb2t5bycpICAgICAvLyBbJ0JlcmxpbiddCi0g
ICAgICBgYGAKLSAgICAgICBAbWV0aG9kIHJlbW92ZU9iamVjdAotICAgICAgQHBhcmFtIHsqfSBv
Ymogb2JqZWN0IHRvIHJlbW92ZQotICAgICAgQHJldHVybiB7RW1iZXIuQXJyYXl9IHJlY2VpdmVy
Ci0gICAgICBAcHVibGljCi0gICAgKi8KLSAgICByZW1vdmVPYmplY3Q6IGZ1bmN0aW9uIChvYmop
IHsKLSAgICAgIHZhciBsb2MgPSBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywgJ2xl
bmd0aCcpIHx8IDA7Ci0gICAgICB3aGlsZSAoLS1sb2MgPj0gMCkgewotICAgICAgICB2YXIgY3Vy
T2JqZWN0ID0gX2VtYmVyUnVudGltZU1peGluc0FycmF5Lm9iamVjdEF0KHRoaXMsIGxvYyk7Ci0K
LSAgICAgICAgaWYgKGN1ck9iamVjdCA9PT0gb2JqKSB7Ci0gICAgICAgICAgdGhpcy5yZW1vdmVB
dChsb2MpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICByZXR1cm4gdGhpczsKLSAgICB9LAot
Ci0gICAgLyoqCi0gICAgICBQdXNoIHRoZSBvYmplY3Qgb250byB0aGUgZW5kIG9mIHRoZSBhcnJh
eSBpZiBpdCBpcyBub3QgYWxyZWFkeQotICAgICAgcHJlc2VudCBpbiB0aGUgYXJyYXkuCi0gICAg
ICAgYGBgamF2YXNjcmlwdAotICAgICAgdmFyIGNpdGllcyA9IFsnQ2hpY2FnbycsICdCZXJsaW4n
XTsKLSAgICAgICBjaXRpZXMuYWRkT2JqZWN0KCdMaW1hJyk7ICAgIC8vIFsnQ2hpY2FnbycsICdC
ZXJsaW4nLCAnTGltYSddCi0gICAgICBjaXRpZXMuYWRkT2JqZWN0KCdCZXJsaW4nKTsgIC8vIFsn
Q2hpY2FnbycsICdCZXJsaW4nLCAnTGltYSddCi0gICAgICBgYGAKLSAgICAgICBAbWV0aG9kIGFk
ZE9iamVjdAotICAgICAgQHBhcmFtIHsqfSBvYmogb2JqZWN0IHRvIGFkZCwgaWYgbm90IGFscmVh
ZHkgcHJlc2VudAotICAgICAgQHJldHVybiB7RW1iZXIuQXJyYXl9IHJlY2VpdmVyCi0gICAgICBA
cHVibGljCi0gICAgKi8KLSAgICBhZGRPYmplY3Q6IGZ1bmN0aW9uIChvYmopIHsKLSAgICAgIGlm
ICghdGhpcy5jb250YWlucyhvYmopKSB7Ci0gICAgICAgIHRoaXMucHVzaE9iamVjdChvYmopOwot
ICAgICAgfQotCi0gICAgICByZXR1cm4gdGhpczsKLSAgICB9Ci0gIH0pOwotfSk7Ci1lbmlmZWQo
J2VtYmVyLXJ1bnRpbWUvbWl4aW5zL211dGFibGVfZW51bWVyYWJsZScsIFsnZXhwb3J0cycsICdl
bWJlci1ydW50aW1lL21peGlucy9lbnVtZXJhYmxlJywgJ2VtYmVyLW1ldGFsL21peGluJywgJ2Vt
YmVyLW1ldGFsL3Byb3BlcnR5X2V2ZW50cyddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyUnVu
dGltZU1peGluc0VudW1lcmFibGUsIF9lbWJlck1ldGFsTWl4aW4sIF9lbWJlck1ldGFsUHJvcGVy
dHlfZXZlbnRzKSB7Ci0gICd1c2Ugc3RyaWN0JzsKLQotICAvKioKLSAgQG1vZHVsZSBlbWJlcgot
ICBAc3VibW9kdWxlIGVtYmVyLXJ1bnRpbWUKLSAgKi8KLQotICAvKioKLSAgICBUaGlzIG1peGlu
IGRlZmluZXMgdGhlIEFQSSBmb3IgbW9kaWZ5aW5nIGdlbmVyaWMgZW51bWVyYWJsZXMuIFRoZXNl
IG1ldGhvZHMKLSAgICBjYW4gYmUgYXBwbGllZCB0byBhbiBvYmplY3QgcmVnYXJkbGVzcyBvZiB3
aGV0aGVyIGl0IGlzIG9yZGVyZWQgb3IKLSAgICB1bm9yZGVyZWQuCi0gIAotICAgIE5vdGUgdGhh
dCBhbiBFbnVtZXJhYmxlIGNhbiBjaGFuZ2UgZXZlbiBpZiBpdCBkb2VzIG5vdCBpbXBsZW1lbnQg
dGhpcyBtaXhpbi4KLSAgICBGb3IgZXhhbXBsZSwgYSBNYXBwZWRFbnVtZXJhYmxlIGNhbm5vdCBi
ZSBkaXJlY3RseSBtb2RpZmllZCBidXQgaWYgaXRzCi0gICAgdW5kZXJseWluZyBlbnVtZXJhYmxl
IGNoYW5nZXMsIGl0IHdpbGwgY2hhbmdlIGFsc28uCi0gIAotICAgICMjIEFkZGluZyBPYmplY3Rz
Ci0gIAotICAgIFRvIGFkZCBhbiBvYmplY3QgdG8gYW4gZW51bWVyYWJsZSwgdXNlIHRoZSBgYWRk
T2JqZWN0KClgIG1ldGhvZC4gVGhpcwotICAgIG1ldGhvZCB3aWxsIG9ubHkgYWRkIHRoZSBvYmpl
Y3QgdG8gdGhlIGVudW1lcmFibGUgaWYgdGhlIG9iamVjdCBpcyBub3QKLSAgICBhbHJlYWR5IHBy
ZXNlbnQgYW5kIGlzIG9mIGEgdHlwZSBzdXBwb3J0ZWQgYnkgdGhlIGVudW1lcmFibGUuCi0gIAot
ICAgIGBgYGphdmFzY3JpcHQKLSAgICBzZXQuYWRkT2JqZWN0KGNvbnRhY3QpOwotICAgIGBgYAot
ICAKLSAgICAjIyBSZW1vdmluZyBPYmplY3RzCi0gIAotICAgIFRvIHJlbW92ZSBhbiBvYmplY3Qg
ZnJvbSBhbiBlbnVtZXJhYmxlLCB1c2UgdGhlIGByZW1vdmVPYmplY3QoKWAgbWV0aG9kLiBUaGlz
Ci0gICAgd2lsbCBvbmx5IHJlbW92ZSB0aGUgb2JqZWN0IGlmIGl0IGlzIHByZXNlbnQgaW4gdGhl
IGVudW1lcmFibGUsIG90aGVyd2lzZQotICAgIHRoaXMgbWV0aG9kIGhhcyBubyBlZmZlY3QuCi0g
IAotICAgIGBgYGphdmFzY3JpcHQKLSAgICBzZXQucmVtb3ZlT2JqZWN0KGNvbnRhY3QpOwotICAg
IGBgYAotICAKLSAgICAjIyBJbXBsZW1lbnRpbmcgSW4gWW91ciBPd24gQ29kZQotICAKLSAgICBJ
ZiB5b3UgYXJlIGltcGxlbWVudGluZyBhbiBvYmplY3QgYW5kIHdhbnQgdG8gc3VwcG9ydCB0aGlz
IEFQSSwganVzdCBpbmNsdWRlCi0gICAgdGhpcyBtaXhpbiBpbiB5b3VyIGNsYXNzIGFuZCBpbXBs
ZW1lbnQgdGhlIHJlcXVpcmVkIG1ldGhvZHMuIEluIHlvdXIgdW5pdAotICAgIHRlc3RzLCBiZSBz
dXJlIHRvIGFwcGx5IHRoZSBFbWJlci5NdXRhYmxlRW51bWVyYWJsZVRlc3RzIHRvIHlvdXIgb2Jq
ZWN0LgotICAKLSAgICBAY2xhc3MgTXV0YWJsZUVudW1lcmFibGUKLSAgICBAbmFtZXNwYWNlIEVt
YmVyCi0gICAgQHVzZXMgRW1iZXIuRW51bWVyYWJsZQotICAgIEBwdWJsaWMKLSAgKi8KLSAgZXhw
b3J0cy5kZWZhdWx0ID0gX2VtYmVyTWV0YWxNaXhpbi5NaXhpbi5jcmVhdGUoX2VtYmVyUnVudGlt
ZU1peGluc0VudW1lcmFibGUuZGVmYXVsdCwgewotCi0gICAgLyoqCi0gICAgICBfX1JlcXVpcmVk
Ll9fIFlvdSBtdXN0IGltcGxlbWVudCB0aGlzIG1ldGhvZCB0byBhcHBseSB0aGlzIG1peGluLgot
ICAgICAgIEF0dGVtcHRzIHRvIGFkZCB0aGUgcGFzc2VkIG9iamVjdCB0byB0aGUgcmVjZWl2ZXIg
aWYgdGhlIG9iamVjdCBpcyBub3QKLSAgICAgIGFscmVhZHkgcHJlc2VudCBpbiB0aGUgY29sbGVj
dGlvbi4gSWYgdGhlIG9iamVjdCBpcyBwcmVzZW50LCB0aGlzIG1ldGhvZAotICAgICAgaGFzIG5v
IGVmZmVjdC4KLSAgICAgICBJZiB0aGUgcGFzc2VkIG9iamVjdCBpcyBvZiBhIHR5cGUgbm90IHN1
cHBvcnRlZCBieSB0aGUgcmVjZWl2ZXIsCi0gICAgICB0aGVuIHRoaXMgbWV0aG9kIHNob3VsZCBy
YWlzZSBhbiBleGNlcHRpb24uCi0gICAgICAgQG1ldGhvZCBhZGRPYmplY3QKLSAgICAgIEBwYXJh
bSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBhZGQgdG8gdGhlIGVudW1lcmFibGUuCi0g
ICAgICBAcmV0dXJuIHtPYmplY3R9IHRoZSBwYXNzZWQgb2JqZWN0Ci0gICAgICBAcHVibGljCi0g
ICAgKi8KLSAgICBhZGRPYmplY3Q6IG51bGwsCi0KLSAgICAvKioKLSAgICAgIEFkZHMgZWFjaCBv
YmplY3QgaW4gdGhlIHBhc3NlZCBlbnVtZXJhYmxlIHRvIHRoZSByZWNlaXZlci4KLSAgICAgICBA
bWV0aG9kIGFkZE9iamVjdHMKLSAgICAgIEBwYXJhbSB7RW1iZXIuRW51bWVyYWJsZX0gb2JqZWN0
cyB0aGUgb2JqZWN0cyB0byBhZGQuCi0gICAgICBAcmV0dXJuIHtPYmplY3R9IHJlY2VpdmVyCi0g
ICAgICBAcHVibGljCi0gICAgKi8KLSAgICBhZGRPYmplY3RzOiBmdW5jdGlvbiAob2JqZWN0cykg
ewotICAgICAgdmFyIF90aGlzID0gdGhpczsKLQotICAgICAgX2VtYmVyTWV0YWxQcm9wZXJ0eV9l
dmVudHMuYmVnaW5Qcm9wZXJ0eUNoYW5nZXModGhpcyk7Ci0gICAgICBvYmplY3RzLmZvckVhY2go
ZnVuY3Rpb24gKG9iaikgewotICAgICAgICByZXR1cm4gX3RoaXMuYWRkT2JqZWN0KG9iaik7Ci0g
ICAgICB9KTsKLSAgICAgIF9lbWJlck1ldGFsUHJvcGVydHlfZXZlbnRzLmVuZFByb3BlcnR5Q2hh
bmdlcyh0aGlzKTsKLSAgICAgIHJldHVybiB0aGlzOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAg
IF9fUmVxdWlyZWQuX18gWW91IG11c3QgaW1wbGVtZW50IHRoaXMgbWV0aG9kIHRvIGFwcGx5IHRo
aXMgbWl4aW4uCi0gICAgICAgQXR0ZW1wdHMgdG8gcmVtb3ZlIHRoZSBwYXNzZWQgb2JqZWN0IGZy
b20gdGhlIHJlY2VpdmVyIGNvbGxlY3Rpb24gaWYgdGhlCi0gICAgICBvYmplY3QgaXMgcHJlc2Vu
dCBpbiB0aGUgY29sbGVjdGlvbi4gSWYgdGhlIG9iamVjdCBpcyBub3QgcHJlc2VudCwKLSAgICAg
IHRoaXMgbWV0aG9kIGhhcyBubyBlZmZlY3QuCi0gICAgICAgSWYgdGhlIHBhc3NlZCBvYmplY3Qg
aXMgb2YgYSB0eXBlIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIHJlY2VpdmVyLAotICAgICAgdGhlbiB0
aGlzIG1ldGhvZCBzaG91bGQgcmFpc2UgYW4gZXhjZXB0aW9uLgotICAgICAgIEBtZXRob2QgcmVt
b3ZlT2JqZWN0Ci0gICAgICBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcmVt
b3ZlIGZyb20gdGhlIGVudW1lcmFibGUuCi0gICAgICBAcmV0dXJuIHtPYmplY3R9IHRoZSBwYXNz
ZWQgb2JqZWN0Ci0gICAgICBAcHVibGljCi0gICAgKi8KLSAgICByZW1vdmVPYmplY3Q6IG51bGws
Ci0KLSAgICAvKioKLSAgICAgIFJlbW92ZXMgZWFjaCBvYmplY3QgaW4gdGhlIHBhc3NlZCBlbnVt
ZXJhYmxlIGZyb20gdGhlIHJlY2VpdmVyLgotICAgICAgIEBtZXRob2QgcmVtb3ZlT2JqZWN0cwot
ICAgICAgQHBhcmFtIHtFbWJlci5FbnVtZXJhYmxlfSBvYmplY3RzIHRoZSBvYmplY3RzIHRvIHJl
bW92ZQotICAgICAgQHJldHVybiB7T2JqZWN0fSByZWNlaXZlcgotICAgICAgQHB1YmxpYwotICAg
ICovCi0gICAgcmVtb3ZlT2JqZWN0czogZnVuY3Rpb24gKG9iamVjdHMpIHsKLSAgICAgIF9lbWJl
ck1ldGFsUHJvcGVydHlfZXZlbnRzLmJlZ2luUHJvcGVydHlDaGFuZ2VzKHRoaXMpOwotICAgICAg
Zm9yICh2YXIgaSA9IG9iamVjdHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKLSAgICAgICAg
dGhpcy5yZW1vdmVPYmplY3Qob2JqZWN0c1tpXSk7Ci0gICAgICB9Ci0gICAgICBfZW1iZXJNZXRh
bFByb3BlcnR5X2V2ZW50cy5lbmRQcm9wZXJ0eUNoYW5nZXModGhpcyk7Ci0gICAgICByZXR1cm4g
dGhpczsKLSAgICB9Ci0gIH0pOwotfSk7Ci1lbmlmZWQoJ2VtYmVyLXJ1bnRpbWUvbWl4aW5zL29i
c2VydmFibGUnLCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwvZGVidWcnLCAnZW1iZXItbWV0YWwv
cHJvcGVydHlfZ2V0JywgJ2VtYmVyLW1ldGFsL3Byb3BlcnR5X3NldCcsICdlbWJlci1tZXRhbC9n
ZXRfcHJvcGVydGllcycsICdlbWJlci1tZXRhbC9zZXRfcHJvcGVydGllcycsICdlbWJlci1tZXRh
bC9taXhpbicsICdlbWJlci1tZXRhbC9ldmVudHMnLCAnZW1iZXItbWV0YWwvcHJvcGVydHlfZXZl
bnRzJywgJ2VtYmVyLW1ldGFsL29ic2VydmVyJywgJ2VtYmVyLW1ldGFsL2NvbXB1dGVkJywgJ2Vt
YmVyLW1ldGFsL2lzX25vbmUnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1ldGFsRGVidWcs
IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LCBfZW1iZXJNZXRhbFByb3BlcnR5X3NldCwgX2VtYmVy
TWV0YWxHZXRfcHJvcGVydGllcywgX2VtYmVyTWV0YWxTZXRfcHJvcGVydGllcywgX2VtYmVyTWV0
YWxNaXhpbiwgX2VtYmVyTWV0YWxFdmVudHMsIF9lbWJlck1ldGFsUHJvcGVydHlfZXZlbnRzLCBf
ZW1iZXJNZXRhbE9ic2VydmVyLCBfZW1iZXJNZXRhbENvbXB1dGVkLCBfZW1iZXJNZXRhbElzX25v
bmUpIHsKLSAgLyoqCi0gIEBtb2R1bGUgZW1iZXIKLSAgQHN1Ym1vZHVsZSBlbWJlci1ydW50aW1l
Ci0gICovCi0KLSAgJ3VzZSBzdHJpY3QnOwotCi0gIC8qKgotICAgICMjIE92ZXJ2aWV3Ci0gIAot
ICAgIFRoaXMgbWl4aW4gcHJvdmlkZXMgcHJvcGVydGllcyBhbmQgcHJvcGVydHkgb2JzZXJ2aW5n
IGZ1bmN0aW9uYWxpdHksIGNvcmUKLSAgICBmZWF0dXJlcyBvZiB0aGUgRW1iZXIgb2JqZWN0IG1v
ZGVsLgotICAKLSAgICBQcm9wZXJ0aWVzIGFuZCBvYnNlcnZlcnMgYWxsb3cgb25lIG9iamVjdCB0
byBvYnNlcnZlIGNoYW5nZXMgdG8gYQotICAgIHByb3BlcnR5IG9uIGFub3RoZXIgb2JqZWN0LiBU
aGlzIGlzIG9uZSBvZiB0aGUgZnVuZGFtZW50YWwgd2F5cyB0aGF0Ci0gICAgbW9kZWxzLCBjb250
cm9sbGVycyBhbmQgdmlld3MgY29tbXVuaWNhdGUgd2l0aCBlYWNoIG90aGVyIGluIGFuIEVtYmVy
Ci0gICAgYXBwbGljYXRpb24uCi0gIAotICAgIEFueSBvYmplY3QgdGhhdCBoYXMgdGhpcyBtaXhp
biBhcHBsaWVkIGNhbiBiZSB1c2VkIGluIG9ic2VydmVyCi0gICAgb3BlcmF0aW9ucy4gVGhhdCBp
bmNsdWRlcyBgRW1iZXIuT2JqZWN0YCBhbmQgbW9zdCBvYmplY3RzIHlvdSB3aWxsCi0gICAgaW50
ZXJhY3Qgd2l0aCBhcyB5b3Ugd3JpdGUgeW91ciBFbWJlciBhcHBsaWNhdGlvbi4KLSAgCi0gICAg
Tm90ZSB0aGF0IHlvdSB3aWxsIG5vdCBnZW5lcmFsbHkgYXBwbHkgdGhpcyBtaXhpbiB0byBjbGFz
c2VzIHlvdXJzZWxmLAotICAgIGJ1dCB5b3Ugd2lsbCB1c2UgdGhlIGZlYXR1cmVzIHByb3ZpZGVk
IGJ5IHRoaXMgbW9kdWxlIGZyZXF1ZW50bHksIHNvIGl0Ci0gICAgaXMgaW1wb3J0YW50IHRvIHVu
ZGVyc3RhbmQgaG93IHRvIHVzZSBpdC4KLSAgCi0gICAgIyMgVXNpbmcgYGdldCgpYCBhbmQgYHNl
dCgpYAotICAKLSAgICBCZWNhdXNlIG9mIEVtYmVyJ3Mgc3VwcG9ydCBmb3IgYmluZGluZ3MgYW5k
IG9ic2VydmVycywgeW91IHdpbGwgYWx3YXlzCi0gICAgYWNjZXNzIHByb3BlcnRpZXMgdXNpbmcg
dGhlIGdldCBtZXRob2QsIGFuZCBzZXQgcHJvcGVydGllcyB1c2luZyB0aGUKLSAgICBzZXQgbWV0
aG9kLiBUaGlzIGFsbG93cyB0aGUgb2JzZXJ2aW5nIG9iamVjdHMgdG8gYmUgbm90aWZpZWQgYW5k
Ci0gICAgY29tcHV0ZWQgcHJvcGVydGllcyB0byBiZSBoYW5kbGVkIHByb3Blcmx5LgotICAKLSAg
ICBNb3JlIGRvY3VtZW50YXRpb24gYWJvdXQgYGdldGAgYW5kIGBzZXRgIGFyZSBiZWxvdy4KLSAg
Ci0gICAgIyMgT2JzZXJ2aW5nIFByb3BlcnR5IENoYW5nZXMKLSAgCi0gICAgWW91IHR5cGljYWxs
eSBvYnNlcnZlIHByb3BlcnR5IGNoYW5nZXMgc2ltcGx5IGJ5IHVzaW5nIHRoZSBgRW1iZXIub2Jz
ZXJ2ZXJgCi0gICAgZnVuY3Rpb24gaW4gY2xhc3NlcyB0aGF0IHlvdSB3cml0ZS4KLSAgCi0gICAg
Rm9yIGV4YW1wbGU6Ci0gIAotICAgIGBgYGphdmFzY3JpcHQKLSAgICBFbWJlci5PYmplY3QuZXh0
ZW5kKHsKLSAgICAgIHZhbHVlT2JzZXJ2ZXI6IEVtYmVyLm9ic2VydmVyKCd2YWx1ZScsIGZ1bmN0
aW9uKHNlbmRlciwga2V5LCB2YWx1ZSwgcmV2KSB7Ci0gICAgICAgIC8vIEV4ZWN1dGVzIHdoZW5l
dmVyIHRoZSAidmFsdWUiIHByb3BlcnR5IGNoYW5nZXMKLSAgICAgICAgLy8gU2VlIHRoZSBhZGRP
YnNlcnZlciBtZXRob2QgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNhbGxiYWNrIGFy
Z3VtZW50cwotICAgICAgfSkKLSAgICB9KTsKLSAgICBgYGAKLSAgCi0gICAgQWx0aG91Z2ggdGhp
cyBpcyB0aGUgbW9zdCBjb21tb24gd2F5IHRvIGFkZCBhbiBvYnNlcnZlciwgdGhpcyBjYXBhYmls
aXR5Ci0gICAgaXMgYWN0dWFsbHkgYnVpbHQgaW50byB0aGUgYEVtYmVyLk9iamVjdGAgY2xhc3Mg
b24gdG9wIG9mIHR3byBtZXRob2RzCi0gICAgZGVmaW5lZCBpbiB0aGlzIG1peGluOiBgYWRkT2Jz
ZXJ2ZXJgIGFuZCBgcmVtb3ZlT2JzZXJ2ZXJgLiBZb3UgY2FuIHVzZQotICAgIHRoZXNlIHR3byBt
ZXRob2RzIHRvIGFkZCBhbmQgcmVtb3ZlIG9ic2VydmVycyB5b3Vyc2VsZiBpZiB5b3UgbmVlZCB0
bwotICAgIGRvIHNvIGF0IHJ1bnRpbWUuCi0gIAotICAgIFRvIGFkZCBhbiBvYnNlcnZlciBmb3Ig
YSBwcm9wZXJ0eSwgY2FsbDoKLSAgCi0gICAgYGBgamF2YXNjcmlwdAotICAgIG9iamVjdC5hZGRP
YnNlcnZlcigncHJvcGVydHlLZXknLCB0YXJnZXRPYmplY3QsIHRhcmdldEFjdGlvbikKLSAgICBg
YGAKLSAgCi0gICAgVGhpcyB3aWxsIGNhbGwgdGhlIGB0YXJnZXRBY3Rpb25gIG1ldGhvZCBvbiB0
aGUgYHRhcmdldE9iamVjdGAgd2hlbmV2ZXIKLSAgICB0aGUgdmFsdWUgb2YgdGhlIGBwcm9wZXJ0
eUtleWAgY2hhbmdlcy4KLSAgCi0gICAgTm90ZSB0aGF0IGlmIGBwcm9wZXJ0eUtleWAgaXMgYSBj
b21wdXRlZCBwcm9wZXJ0eSwgdGhlIG9ic2VydmVyIHdpbGwgYmUKLSAgICBjYWxsZWQgd2hlbiBh
bnkgb2YgdGhlIHByb3BlcnR5IGRlcGVuZGVuY2llcyBhcmUgY2hhbmdlZCwgZXZlbiBpZiB0aGUK
LSAgICByZXN1bHRpbmcgdmFsdWUgb2YgdGhlIGNvbXB1dGVkIHByb3BlcnR5IGlzIHVuY2hhbmdl
ZC4gVGhpcyBpcyBuZWNlc3NhcnkKLSAgICBiZWNhdXNlIGNvbXB1dGVkIHByb3BlcnRpZXMgYXJl
IG5vdCBjb21wdXRlZCB1bnRpbCBgZ2V0YCBpcyBjYWxsZWQuCi0gIAotICAgIEBjbGFzcyBPYnNl
cnZhYmxlCi0gICAgQG5hbWVzcGFjZSBFbWJlcgotICAgIEBwdWJsaWMKLSAgKi8KLSAgZXhwb3J0
cy5kZWZhdWx0ID0gX2VtYmVyTWV0YWxNaXhpbi5NaXhpbi5jcmVhdGUoewotCi0gICAgLyoqCi0g
ICAgICBSZXRyaWV2ZXMgdGhlIHZhbHVlIG9mIGEgcHJvcGVydHkgZnJvbSB0aGUgb2JqZWN0Lgot
ICAgICAgIFRoaXMgbWV0aG9kIGlzIHVzdWFsbHkgc2ltaWxhciB0byB1c2luZyBgb2JqZWN0W2tl
eU5hbWVdYCBvciBgb2JqZWN0LmtleU5hbWVgLAotICAgICAgaG93ZXZlciBpdCBzdXBwb3J0cyBi
b3RoIGNvbXB1dGVkIHByb3BlcnRpZXMgYW5kIHRoZSB1bmtub3duUHJvcGVydHkKLSAgICAgIGhh
bmRsZXIuCi0gICAgICAgQmVjYXVzZSBgZ2V0YCB1bmlmaWVzIHRoZSBzeW50YXggZm9yIGFjY2Vz
c2luZyBhbGwgdGhlc2Uga2luZHMKLSAgICAgIG9mIHByb3BlcnRpZXMsIGl0IGNhbiBtYWtlIG1h
bnkgcmVmYWN0b3JpbmdzIGVhc2llciwgc3VjaCBhcyByZXBsYWNpbmcgYQotICAgICAgc2ltcGxl
IHByb3BlcnR5IHdpdGggYSBjb21wdXRlZCBwcm9wZXJ0eSwgb3IgdmljZSB2ZXJzYS4KLSAgICAg
ICAjIyMgQ29tcHV0ZWQgUHJvcGVydGllcwotICAgICAgIENvbXB1dGVkIHByb3BlcnRpZXMgYXJl
IG1ldGhvZHMgZGVmaW5lZCB3aXRoIHRoZSBgcHJvcGVydHlgIG1vZGlmaWVyCi0gICAgICBkZWNs
YXJlZCBhdCB0aGUgZW5kLCBzdWNoIGFzOgotICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgIGZ1
bGxOYW1lOiBmdW5jdGlvbigpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KCdmaXJzdE5hbWUn
KSArICcgJyArIHRoaXMuZ2V0KCdsYXN0TmFtZScpOwotICAgICAgfS5wcm9wZXJ0eSgnZmlyc3RO
YW1lJywgJ2xhc3ROYW1lJykKLSAgICAgIGBgYAotICAgICAgIFdoZW4geW91IGNhbGwgYGdldGAg
b24gYSBjb21wdXRlZCBwcm9wZXJ0eSwgdGhlIGZ1bmN0aW9uIHdpbGwgYmUKLSAgICAgIGNhbGxl
ZCBhbmQgdGhlIHJldHVybiB2YWx1ZSB3aWxsIGJlIHJldHVybmVkIGluc3RlYWQgb2YgdGhlIGZ1
bmN0aW9uCi0gICAgICBpdHNlbGYuCi0gICAgICAgIyMjIFVua25vd24gUHJvcGVydGllcwotICAg
ICAgIExpa2V3aXNlLCBpZiB5b3UgdHJ5IHRvIGNhbGwgYGdldGAgb24gYSBwcm9wZXJ0eSB3aG9z
ZSB2YWx1ZSBpcwotICAgICAgYHVuZGVmaW5lZGAsIHRoZSBgdW5rbm93blByb3BlcnR5KClgIG1l
dGhvZCB3aWxsIGJlIGNhbGxlZCBvbiB0aGUgb2JqZWN0LgotICAgICAgSWYgdGhpcyBtZXRob2Qg
cmV0dXJucyBhbnkgdmFsdWUgb3RoZXIgdGhhbiBgdW5kZWZpbmVkYCwgaXQgd2lsbCBiZSByZXR1
cm5lZAotICAgICAgaW5zdGVhZC4gVGhpcyBhbGxvd3MgeW91IHRvIGltcGxlbWVudCAidmlydHVh
bCIgcHJvcGVydGllcyB0aGF0IGFyZQotICAgICAgbm90IGRlZmluZWQgdXBmcm9udC4KLSAgICAg
ICBAbWV0aG9kIGdldAotICAgICAgQHBhcmFtIHtTdHJpbmd9IGtleU5hbWUgVGhlIHByb3BlcnR5
IHRvIHJldHJpZXZlCi0gICAgICBAcmV0dXJuIHtPYmplY3R9IFRoZSBwcm9wZXJ0eSB2YWx1ZSBv
ciB1bmRlZmluZWQuCi0gICAgICBAcHVibGljCi0gICAgKi8KLSAgICBnZXQ6IGZ1bmN0aW9uIChr
ZXlOYW1lKSB7Ci0gICAgICByZXR1cm4gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMs
IGtleU5hbWUpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgIFRvIGdldCB0aGUgdmFsdWVzIG9m
IG11bHRpcGxlIHByb3BlcnRpZXMgYXQgb25jZSwgY2FsbCBgZ2V0UHJvcGVydGllc2AKLSAgICAg
IHdpdGggYSBsaXN0IG9mIHN0cmluZ3Mgb3IgYW4gYXJyYXk6Ci0gICAgICAgYGBgamF2YXNjcmlw
dAotICAgICAgcmVjb3JkLmdldFByb3BlcnRpZXMoJ2ZpcnN0TmFtZScsICdsYXN0TmFtZScsICd6
aXBDb2RlJyk7Ci0gICAgICAvLyB7IGZpcnN0TmFtZTogJ0pvaG4nLCBsYXN0TmFtZTogJ0RvZScs
IHppcENvZGU6ICcxMDAxMScgfQotICAgICAgYGBgCi0gICAgICAgaXMgZXF1aXZhbGVudCB0bzoK
LSAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICByZWNvcmQuZ2V0UHJvcGVydGllcyhbJ2ZpcnN0
TmFtZScsICdsYXN0TmFtZScsICd6aXBDb2RlJ10pOwotICAgICAgLy8geyBmaXJzdE5hbWU6ICdK
b2huJywgbGFzdE5hbWU6ICdEb2UnLCB6aXBDb2RlOiAnMTAwMTEnIH0KLSAgICAgIGBgYAotICAg
ICAgIEBtZXRob2QgZ2V0UHJvcGVydGllcwotICAgICAgQHBhcmFtIHtTdHJpbmcuLi58QXJyYXl9
IGxpc3Qgb2Yga2V5cyB0byBnZXQKLSAgICAgIEByZXR1cm4ge09iamVjdH0KLSAgICAgIEBwdWJs
aWMKLSAgICAqLwotICAgIGdldFByb3BlcnRpZXM6IGZ1bmN0aW9uICgpIHsKLSAgICAgIGZvciAo
dmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbiksIF9rZXkgPSAw
OyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7Ci0gICAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNb
X2tleV07Ci0gICAgICB9Ci0KLSAgICAgIHJldHVybiBfZW1iZXJNZXRhbEdldF9wcm9wZXJ0aWVz
LmRlZmF1bHQuYXBwbHkobnVsbCwgW3RoaXNdLmNvbmNhdChhcmdzKSk7Ci0gICAgfSwKLQotICAg
IC8qKgotICAgICAgU2V0cyB0aGUgcHJvdmlkZWQga2V5IG9yIHBhdGggdG8gdGhlIHZhbHVlLgot
ICAgICAgIFRoaXMgbWV0aG9kIGlzIGdlbmVyYWxseSB2ZXJ5IHNpbWlsYXIgdG8gY2FsbGluZyBg
b2JqZWN0W2tleV0gPSB2YWx1ZWAgb3IKLSAgICAgIGBvYmplY3Qua2V5ID0gdmFsdWVgLCBleGNl
cHQgdGhhdCBpdCBwcm92aWRlcyBzdXBwb3J0IGZvciBjb21wdXRlZAotICAgICAgcHJvcGVydGll
cywgdGhlIGBzZXRVbmtub3duUHJvcGVydHkoKWAgbWV0aG9kIGFuZCBwcm9wZXJ0eSBvYnNlcnZl
cnMuCi0gICAgICAgIyMjIENvbXB1dGVkIFByb3BlcnRpZXMKLSAgICAgICBJZiB5b3UgdHJ5IHRv
IHNldCBhIHZhbHVlIG9uIGEga2V5IHRoYXQgaGFzIGEgY29tcHV0ZWQgcHJvcGVydHkgaGFuZGxl
cgotICAgICAgZGVmaW5lZCAoc2VlIHRoZSBgZ2V0KClgIG1ldGhvZCBmb3IgYW4gZXhhbXBsZSks
IHRoZW4gYHNldCgpYCB3aWxsIGNhbGwKLSAgICAgIHRoYXQgbWV0aG9kLCBwYXNzaW5nIGJvdGgg
dGhlIHZhbHVlIGFuZCBrZXkgaW5zdGVhZCBvZiBzaW1wbHkgY2hhbmdpbmcKLSAgICAgIHRoZSB2
YWx1ZSBpdHNlbGYuIFRoaXMgaXMgdXNlZnVsIGZvciB0aG9zZSB0aW1lcyB3aGVuIHlvdSBuZWVk
IHRvCi0gICAgICBpbXBsZW1lbnQgYSBwcm9wZXJ0eSB0aGF0IGlzIGNvbXBvc2VkIG9mIG9uZSBv
ciBtb3JlIG1lbWJlcgotICAgICAgcHJvcGVydGllcy4KLSAgICAgICAjIyMgVW5rbm93biBQcm9w
ZXJ0aWVzCi0gICAgICAgSWYgeW91IHRyeSB0byBzZXQgYSB2YWx1ZSBvbiBhIGtleSB0aGF0IGlz
IHVuZGVmaW5lZCBpbiB0aGUgdGFyZ2V0Ci0gICAgICBvYmplY3QsIHRoZW4gdGhlIGBzZXRVbmtu
b3duUHJvcGVydHkoKWAgaGFuZGxlciB3aWxsIGJlIGNhbGxlZCBpbnN0ZWFkLiBUaGlzCi0gICAg
ICBnaXZlcyB5b3UgYW4gb3Bwb3J0dW5pdHkgdG8gaW1wbGVtZW50IGNvbXBsZXggInZpcnR1YWwi
IHByb3BlcnRpZXMgdGhhdAotICAgICAgYXJlIG5vdCBwcmVkZWZpbmVkIG9uIHRoZSBvYmplY3Qu
IElmIGBzZXRVbmtub3duUHJvcGVydHkoKWAgcmV0dXJucwotICAgICAgdW5kZWZpbmVkLCB0aGVu
IGBzZXQoKWAgd2lsbCBzaW1wbHkgc2V0IHRoZSB2YWx1ZSBvbiB0aGUgb2JqZWN0LgotICAgICAg
ICMjIyBQcm9wZXJ0eSBPYnNlcnZlcnMKLSAgICAgICBJbiBhZGRpdGlvbiB0byBjaGFuZ2luZyB0
aGUgcHJvcGVydHksIGBzZXQoKWAgd2lsbCBhbHNvIHJlZ2lzdGVyIGEgcHJvcGVydHkKLSAgICAg
IGNoYW5nZSB3aXRoIHRoZSBvYmplY3QuIFVubGVzcyB5b3UgaGF2ZSBwbGFjZWQgdGhpcyBjYWxs
IGluc2lkZSBvZiBhCi0gICAgICBgYmVnaW5Qcm9wZXJ0eUNoYW5nZXMoKWAgYW5kIGBlbmRQcm9w
ZXJ0eUNoYW5nZXMoKSxgIGFueSAibG9jYWwiIG9ic2VydmVycwotICAgICAgKGkuZS4gb2JzZXJ2
ZXIgbWV0aG9kcyBkZWNsYXJlZCBvbiB0aGUgc2FtZSBvYmplY3QpLCB3aWxsIGJlIGNhbGxlZAot
ICAgICAgaW1tZWRpYXRlbHkuIEFueSAicmVtb3RlIiBvYnNlcnZlcnMgKGkuZS4gb2JzZXJ2ZXIg
bWV0aG9kcyBkZWNsYXJlZCBvbgotICAgICAgYW5vdGhlciBvYmplY3QpIHdpbGwgYmUgcGxhY2Vk
IGluIGEgcXVldWUgYW5kIGNhbGxlZCBhdCBhIGxhdGVyIHRpbWUgaW4gYQotICAgICAgY29hbGVz
Y2VkIG1hbm5lci4KLSAgICAgICBAbWV0aG9kIHNldAotICAgICAgQHBhcmFtIHtTdHJpbmd9IGtl
eU5hbWUgVGhlIHByb3BlcnR5IHRvIHNldAotICAgICAgQHBhcmFtIHtPYmplY3R9IHZhbHVlIFRo
ZSB2YWx1ZSB0byBzZXQgb3IgYG51bGxgLgotICAgICAgQHJldHVybiB7T2JqZWN0fSBUaGUgcGFz
c2VkIHZhbHVlCi0gICAgICBAcHVibGljCi0gICAgKi8KLSAgICBzZXQ6IGZ1bmN0aW9uIChrZXlO
YW1lLCB2YWx1ZSkgewotICAgICAgcmV0dXJuIF9lbWJlck1ldGFsUHJvcGVydHlfc2V0LnNldCh0
aGlzLCBrZXlOYW1lLCB2YWx1ZSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAgU2V0cyBhIGxp
c3Qgb2YgcHJvcGVydGllcyBhdCBvbmNlLiBUaGVzZSBwcm9wZXJ0aWVzIGFyZSBzZXQgaW5zaWRl
Ci0gICAgICBhIHNpbmdsZSBgYmVnaW5Qcm9wZXJ0eUNoYW5nZXNgIGFuZCBgZW5kUHJvcGVydHlD
aGFuZ2VzYCBiYXRjaCwgc28KLSAgICAgIG9ic2VydmVycyB3aWxsIGJlIGJ1ZmZlcmVkLgotICAg
ICAgIGBgYGphdmFzY3JpcHQKLSAgICAgIHJlY29yZC5zZXRQcm9wZXJ0aWVzKHsgZmlyc3ROYW1l
OiAnQ2hhcmxlcycsIGxhc3ROYW1lOiAnSm9sbGV5JyB9KTsKLSAgICAgIGBgYAotICAgICAgIEBt
ZXRob2Qgc2V0UHJvcGVydGllcwotICAgICAgQHBhcmFtIHtPYmplY3R9IGhhc2ggdGhlIGhhc2gg
b2Yga2V5cyBhbmQgdmFsdWVzIHRvIHNldAotICAgICAgQHJldHVybiB7T2JqZWN0fSBUaGUgcGFz
c2VkIGluIGhhc2gKLSAgICAgIEBwdWJsaWMKLSAgICAqLwotICAgIHNldFByb3BlcnRpZXM6IGZ1
bmN0aW9uIChoYXNoKSB7Ci0gICAgICByZXR1cm4gX2VtYmVyTWV0YWxTZXRfcHJvcGVydGllcy5k
ZWZhdWx0KHRoaXMsIGhhc2gpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgIEJlZ2lucyBhIGdy
b3VwaW5nIG9mIHByb3BlcnR5IGNoYW5nZXMuCi0gICAgICAgWW91IGNhbiB1c2UgdGhpcyBtZXRo
b2QgdG8gZ3JvdXAgcHJvcGVydHkgY2hhbmdlcyBzbyB0aGF0IG5vdGlmaWNhdGlvbnMKLSAgICAg
IHdpbGwgbm90IGJlIHNlbnQgdW50aWwgdGhlIGNoYW5nZXMgYXJlIGZpbmlzaGVkLiBJZiB5b3Ug
cGxhbiB0byBtYWtlIGEKLSAgICAgIGxhcmdlIG51bWJlciBvZiBjaGFuZ2VzIHRvIGFuIG9iamVj
dCBhdCBvbmUgdGltZSwgeW91IHNob3VsZCBjYWxsIHRoaXMKLSAgICAgIG1ldGhvZCBhdCB0aGUg
YmVnaW5uaW5nIG9mIHRoZSBjaGFuZ2VzIHRvIGJlZ2luIGRlZmVycmluZyBjaGFuZ2UKLSAgICAg
IG5vdGlmaWNhdGlvbnMuIFdoZW4geW91IGFyZSBkb25lIG1ha2luZyBjaGFuZ2VzLCBjYWxsCi0g
ICAgICBgZW5kUHJvcGVydHlDaGFuZ2VzKClgIHRvIGRlbGl2ZXIgdGhlIGRlZmVycmVkIGNoYW5n
ZSBub3RpZmljYXRpb25zIGFuZCBlbmQKLSAgICAgIGRlZmVycmluZy4KLSAgICAgICBAbWV0aG9k
IGJlZ2luUHJvcGVydHlDaGFuZ2VzCi0gICAgICBAcmV0dXJuIHtFbWJlci5PYnNlcnZhYmxlfQot
ICAgICAgQHByaXZhdGUKLSAgICAqLwotICAgIGJlZ2luUHJvcGVydHlDaGFuZ2VzOiBmdW5jdGlv
biAoKSB7Ci0gICAgICBfZW1iZXJNZXRhbFByb3BlcnR5X2V2ZW50cy5iZWdpblByb3BlcnR5Q2hh
bmdlcygpOwotICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAgRW5k
cyBhIGdyb3VwaW5nIG9mIHByb3BlcnR5IGNoYW5nZXMuCi0gICAgICAgWW91IGNhbiB1c2UgdGhp
cyBtZXRob2QgdG8gZ3JvdXAgcHJvcGVydHkgY2hhbmdlcyBzbyB0aGF0IG5vdGlmaWNhdGlvbnMK
LSAgICAgIHdpbGwgbm90IGJlIHNlbnQgdW50aWwgdGhlIGNoYW5nZXMgYXJlIGZpbmlzaGVkLiBJ
ZiB5b3UgcGxhbiB0byBtYWtlIGEKLSAgICAgIGxhcmdlIG51bWJlciBvZiBjaGFuZ2VzIHRvIGFu
IG9iamVjdCBhdCBvbmUgdGltZSwgeW91IHNob3VsZCBjYWxsCi0gICAgICBgYmVnaW5Qcm9wZXJ0
eUNoYW5nZXMoKWAgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgY2hhbmdlcyB0byBkZWZlciBjaGFu
Z2UKLSAgICAgIG5vdGlmaWNhdGlvbnMuIFdoZW4geW91IGFyZSBkb25lIG1ha2luZyBjaGFuZ2Vz
LCBjYWxsIHRoaXMgbWV0aG9kIHRvCi0gICAgICBkZWxpdmVyIHRoZSBkZWZlcnJlZCBjaGFuZ2Ug
bm90aWZpY2F0aW9ucyBhbmQgZW5kIGRlZmVycmluZy4KLSAgICAgICBAbWV0aG9kIGVuZFByb3Bl
cnR5Q2hhbmdlcwotICAgICAgQHJldHVybiB7RW1iZXIuT2JzZXJ2YWJsZX0KLSAgICAgIEBwcml2
YXRlCi0gICAgKi8KLSAgICBlbmRQcm9wZXJ0eUNoYW5nZXM6IGZ1bmN0aW9uICgpIHsKLSAgICAg
IF9lbWJlck1ldGFsUHJvcGVydHlfZXZlbnRzLmVuZFByb3BlcnR5Q2hhbmdlcygpOwotICAgICAg
cmV0dXJuIHRoaXM7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAgTm90aWZ5IHRoZSBvYnNlcnZl
ciBzeXN0ZW0gdGhhdCBhIHByb3BlcnR5IGlzIGFib3V0IHRvIGNoYW5nZS4KLSAgICAgICBTb21l
dGltZXMgeW91IG5lZWQgdG8gY2hhbmdlIGEgdmFsdWUgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB3
aXRob3V0Ci0gICAgICBhY3R1YWxseSBjYWxsaW5nIGBnZXQoKWAgb3IgYHNldCgpYCBvbiBpdC4g
SW4gdGhpcyBjYXNlLCB5b3UgY2FuIHVzZSB0aGlzCi0gICAgICBtZXRob2QgYW5kIGBwcm9wZXJ0
eURpZENoYW5nZSgpYCBpbnN0ZWFkLiBDYWxsaW5nIHRoZXNlIHR3byBtZXRob2RzCi0gICAgICB0
b2dldGhlciB3aWxsIG5vdGlmeSBhbGwgb2JzZXJ2ZXJzIHRoYXQgdGhlIHByb3BlcnR5IGhhcyBw
b3RlbnRpYWxseQotICAgICAgY2hhbmdlZCB2YWx1ZS4KLSAgICAgICBOb3RlIHRoYXQgeW91IG11
c3QgYWx3YXlzIGNhbGwgYHByb3BlcnR5V2lsbENoYW5nZWAgYW5kIGBwcm9wZXJ0eURpZENoYW5n
ZWAKLSAgICAgIGFzIGEgcGFpci4gSWYgeW91IGRvIG5vdCwgaXQgbWF5IGdldCB0aGUgcHJvcGVy
dHkgY2hhbmdlIGdyb3VwcyBvdXQgb2YKLSAgICAgIG9yZGVyIGFuZCBjYXVzZSBub3RpZmljYXRp
b25zIHRvIGJlIGRlbGl2ZXJlZCBtb3JlIG9mdGVuIHRoYW4geW91IHdvdWxkCi0gICAgICBsaWtl
LgotICAgICAgIEBtZXRob2QgcHJvcGVydHlXaWxsQ2hhbmdlCi0gICAgICBAcGFyYW0ge1N0cmlu
Z30ga2V5TmFtZSBUaGUgcHJvcGVydHkga2V5IHRoYXQgaXMgYWJvdXQgdG8gY2hhbmdlLgotICAg
ICAgQHJldHVybiB7RW1iZXIuT2JzZXJ2YWJsZX0KLSAgICAgIEBwcml2YXRlCi0gICAgKi8KLSAg
ICBwcm9wZXJ0eVdpbGxDaGFuZ2U6IGZ1bmN0aW9uIChrZXlOYW1lKSB7Ci0gICAgICBfZW1iZXJN
ZXRhbFByb3BlcnR5X2V2ZW50cy5wcm9wZXJ0eVdpbGxDaGFuZ2UodGhpcywga2V5TmFtZSk7Ci0g
ICAgICByZXR1cm4gdGhpczsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICBOb3RpZnkgdGhlIG9i
c2VydmVyIHN5c3RlbSB0aGF0IGEgcHJvcGVydHkgaGFzIGp1c3QgY2hhbmdlZC4KLSAgICAgICBT
b21ldGltZXMgeW91IG5lZWQgdG8gY2hhbmdlIGEgdmFsdWUgZGlyZWN0bHkgb3IgaW5kaXJlY3Rs
eSB3aXRob3V0Ci0gICAgICBhY3R1YWxseSBjYWxsaW5nIGBnZXQoKWAgb3IgYHNldCgpYCBvbiBp
dC4gSW4gdGhpcyBjYXNlLCB5b3UgY2FuIHVzZSB0aGlzCi0gICAgICBtZXRob2QgYW5kIGBwcm9w
ZXJ0eVdpbGxDaGFuZ2UoKWAgaW5zdGVhZC4gQ2FsbGluZyB0aGVzZSB0d28gbWV0aG9kcwotICAg
ICAgdG9nZXRoZXIgd2lsbCBub3RpZnkgYWxsIG9ic2VydmVycyB0aGF0IHRoZSBwcm9wZXJ0eSBo
YXMgcG90ZW50aWFsbHkKLSAgICAgIGNoYW5nZWQgdmFsdWUuCi0gICAgICAgTm90ZSB0aGF0IHlv
dSBtdXN0IGFsd2F5cyBjYWxsIGBwcm9wZXJ0eVdpbGxDaGFuZ2VgIGFuZCBgcHJvcGVydHlEaWRD
aGFuZ2VgCi0gICAgICBhcyBhIHBhaXIuIElmIHlvdSBkbyBub3QsIGl0IG1heSBnZXQgdGhlIHBy
b3BlcnR5IGNoYW5nZSBncm91cHMgb3V0IG9mCi0gICAgICBvcmRlciBhbmQgY2F1c2Ugbm90aWZp
Y2F0aW9ucyB0byBiZSBkZWxpdmVyZWQgbW9yZSBvZnRlbiB0aGFuIHlvdSB3b3VsZAotICAgICAg
bGlrZS4KLSAgICAgICBAbWV0aG9kIHByb3BlcnR5RGlkQ2hhbmdlCi0gICAgICBAcGFyYW0ge1N0
cmluZ30ga2V5TmFtZSBUaGUgcHJvcGVydHkga2V5IHRoYXQgaGFzIGp1c3QgY2hhbmdlZC4KLSAg
ICAgIEByZXR1cm4ge0VtYmVyLk9ic2VydmFibGV9Ci0gICAgICBAcHJpdmF0ZQotICAgICovCi0g
ICAgcHJvcGVydHlEaWRDaGFuZ2U6IGZ1bmN0aW9uIChrZXlOYW1lKSB7Ci0gICAgICBfZW1iZXJN
ZXRhbFByb3BlcnR5X2V2ZW50cy5wcm9wZXJ0eURpZENoYW5nZSh0aGlzLCBrZXlOYW1lKTsKLSAg
ICAgIHJldHVybiB0aGlzOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgIENvbnZlbmllbmNlIG1l
dGhvZCB0byBjYWxsIGBwcm9wZXJ0eVdpbGxDaGFuZ2VgIGFuZCBgcHJvcGVydHlEaWRDaGFuZ2Vg
IGluCi0gICAgICBzdWNjZXNzaW9uLgotICAgICAgIEBtZXRob2Qgbm90aWZ5UHJvcGVydHlDaGFu
Z2UKLSAgICAgIEBwYXJhbSB7U3RyaW5nfSBrZXlOYW1lIFRoZSBwcm9wZXJ0eSBrZXkgdG8gYmUg
bm90aWZpZWQgYWJvdXQuCi0gICAgICBAcmV0dXJuIHtFbWJlci5PYnNlcnZhYmxlfQotICAgICAg
QHB1YmxpYwotICAgICovCi0gICAgbm90aWZ5UHJvcGVydHlDaGFuZ2U6IGZ1bmN0aW9uIChrZXlO
YW1lKSB7Ci0gICAgICB0aGlzLnByb3BlcnR5V2lsbENoYW5nZShrZXlOYW1lKTsKLSAgICAgIHRo
aXMucHJvcGVydHlEaWRDaGFuZ2Uoa2V5TmFtZSk7Ci0gICAgICByZXR1cm4gdGhpczsKLSAgICB9
LAotCi0gICAgLyoqCi0gICAgICBBZGRzIGFuIG9ic2VydmVyIG9uIGEgcHJvcGVydHkuCi0gICAg
ICAgVGhpcyBpcyB0aGUgY29yZSBtZXRob2QgdXNlZCB0byByZWdpc3RlciBhbiBvYnNlcnZlciBm
b3IgYSBwcm9wZXJ0eS4KLSAgICAgICBPbmNlIHlvdSBjYWxsIHRoaXMgbWV0aG9kLCBhbnkgdGlt
ZSB0aGUga2V5J3MgdmFsdWUgaXMgc2V0LCB5b3VyIG9ic2VydmVyCi0gICAgICB3aWxsIGJlIG5v
dGlmaWVkLiBOb3RlIHRoYXQgdGhlIG9ic2VydmVycyBhcmUgdHJpZ2dlcmVkIGFueSB0aW1lIHRo
ZQotICAgICAgdmFsdWUgaXMgc2V0LCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgaGFzIGFjdHVh
bGx5IGNoYW5nZWQuIFlvdXIKLSAgICAgIG9ic2VydmVyIHNob3VsZCBiZSBwcmVwYXJlZCB0byBo
YW5kbGUgdGhhdC4KLSAgICAgICBZb3UgY2FuIGFsc28gcGFzcyBhbiBvcHRpb25hbCBjb250ZXh0
IHBhcmFtZXRlciB0byB0aGlzIG1ldGhvZC4gVGhlCi0gICAgICBjb250ZXh0IHdpbGwgYmUgcGFz
c2VkIHRvIHlvdXIgb2JzZXJ2ZXIgbWV0aG9kIHdoZW5ldmVyIGl0IGlzIHRyaWdnZXJlZC4KLSAg
ICAgIE5vdGUgdGhhdCBpZiB5b3UgYWRkIHRoZSBzYW1lIHRhcmdldC9tZXRob2QgcGFpciBvbiBh
IGtleSBtdWx0aXBsZSB0aW1lcwotICAgICAgd2l0aCBkaWZmZXJlbnQgY29udGV4dCBwYXJhbWV0
ZXJzLCB5b3VyIG9ic2VydmVyIHdpbGwgb25seSBiZSBjYWxsZWQgb25jZQotICAgICAgd2l0aCB0
aGUgbGFzdCBjb250ZXh0IHlvdSBwYXNzZWQuCi0gICAgICAgIyMjIE9ic2VydmVyIE1ldGhvZHMK
LSAgICAgICBPYnNlcnZlciBtZXRob2RzIHlvdSBwYXNzIHNob3VsZCBnZW5lcmFsbHkgaGF2ZSB0
aGUgZm9sbG93aW5nIHNpZ25hdHVyZSBpZgotICAgICAgeW91IGRvIG5vdCBwYXNzIGEgYGNvbnRl
eHRgIHBhcmFtZXRlcjoKLSAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICBmb29EaWRDaGFuZ2U6
IGZ1bmN0aW9uKHNlbmRlciwga2V5LCB2YWx1ZSwgcmV2KSB7IH07Ci0gICAgICBgYGAKLSAgICAg
ICBUaGUgc2VuZGVyIGlzIHRoZSBvYmplY3QgdGhhdCBjaGFuZ2VkLiBUaGUga2V5IGlzIHRoZSBw
cm9wZXJ0eSB0aGF0Ci0gICAgICBjaGFuZ2VzLiBUaGUgdmFsdWUgcHJvcGVydHkgaXMgY3VycmVu
dGx5IHJlc2VydmVkIGFuZCB1bnVzZWQuIFRoZSByZXYKLSAgICAgIGlzIHRoZSBsYXN0IHByb3Bl
cnR5IHJldmlzaW9uIG9mIHRoZSBvYmplY3Qgd2hlbiBpdCBjaGFuZ2VkLCB3aGljaCB5b3UgY2Fu
Ci0gICAgICB1c2UgdG8gZGV0ZWN0IGlmIHRoZSBrZXkgdmFsdWUgaGFzIHJlYWxseSBjaGFuZ2Vk
IG9yIG5vdC4KLSAgICAgICBJZiB5b3UgcGFzcyBhIGBjb250ZXh0YCBwYXJhbWV0ZXIsIHRoZSBj
b250ZXh0IHdpbGwgYmUgcGFzc2VkIGJlZm9yZSB0aGUKLSAgICAgIHJldmlzaW9uIGxpa2Ugc286
Ci0gICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgZm9vRGlkQ2hhbmdlOiBmdW5jdGlvbihzZW5k
ZXIsIGtleSwgdmFsdWUsIGNvbnRleHQsIHJldikgeyB9OwotICAgICAgYGBgCi0gICAgICAgVXN1
YWxseSB5b3Ugd2lsbCBub3QgbmVlZCB0aGUgdmFsdWUsIGNvbnRleHQgb3IgcmV2aXNpb24gcGFy
YW1ldGVycyBhdAotICAgICAgdGhlIGVuZC4gSW4gdGhpcyBjYXNlLCBpdCBpcyBjb21tb24gdG8g
d3JpdGUgb2JzZXJ2ZXIgbWV0aG9kcyB0aGF0IHRha2UKLSAgICAgIG9ubHkgYSBzZW5kZXIgYW5k
IGtleSB2YWx1ZSBhcyBwYXJhbWV0ZXJzIG9yLCBpZiB5b3UgYXJlbid0IGludGVyZXN0ZWQgaW4K
LSAgICAgIGFueSBvZiB0aGVzZSB2YWx1ZXMsIHRvIHdyaXRlIGFuIG9ic2VydmVyIHRoYXQgaGFz
IG5vIHBhcmFtZXRlcnMgYXQgYWxsLgotICAgICAgIEBtZXRob2QgYWRkT2JzZXJ2ZXIKLSAgICAg
IEBwYXJhbSB7U3RyaW5nfSBrZXkgVGhlIGtleSB0byBvYnNlcnZlcgotICAgICAgQHBhcmFtIHtP
YmplY3R9IHRhcmdldCBUaGUgdGFyZ2V0IG9iamVjdCB0byBpbnZva2UKLSAgICAgIEBwYXJhbSB7
U3RyaW5nfEZ1bmN0aW9ufSBtZXRob2QgVGhlIG1ldGhvZCB0byBpbnZva2UuCi0gICAgICBAcHVi
bGljCi0gICAgKi8KLSAgICBhZGRPYnNlcnZlcjogZnVuY3Rpb24gKGtleSwgdGFyZ2V0LCBtZXRo
b2QpIHsKLSAgICAgIF9lbWJlck1ldGFsT2JzZXJ2ZXIuYWRkT2JzZXJ2ZXIodGhpcywga2V5LCB0
YXJnZXQsIG1ldGhvZCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAgUmVtb3ZlIGFuIG9ic2Vy
dmVyIHlvdSBoYXZlIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBvbiB0aGlzIG9iamVjdC4gUGFzcwot
ICAgICAgdGhlIHNhbWUga2V5LCB0YXJnZXQsIGFuZCBtZXRob2QgeW91IHBhc3NlZCB0byBgYWRk
T2JzZXJ2ZXIoKWAgYW5kIHlvdXIKLSAgICAgIHRhcmdldCB3aWxsIG5vIGxvbmdlciByZWNlaXZl
IG5vdGlmaWNhdGlvbnMuCi0gICAgICAgQG1ldGhvZCByZW1vdmVPYnNlcnZlcgotICAgICAgQHBh
cmFtIHtTdHJpbmd9IGtleSBUaGUga2V5IHRvIG9ic2VydmVyCi0gICAgICBAcGFyYW0ge09iamVj
dH0gdGFyZ2V0IFRoZSB0YXJnZXQgb2JqZWN0IHRvIGludm9rZQotICAgICAgQHBhcmFtIHtTdHJp
bmd8RnVuY3Rpb259IG1ldGhvZCBUaGUgbWV0aG9kIHRvIGludm9rZS4KLSAgICAgIEBwdWJsaWMK
LSAgICAqLwotICAgIHJlbW92ZU9ic2VydmVyOiBmdW5jdGlvbiAoa2V5LCB0YXJnZXQsIG1ldGhv
ZCkgewotICAgICAgX2VtYmVyTWV0YWxPYnNlcnZlci5yZW1vdmVPYnNlcnZlcih0aGlzLCBrZXks
IHRhcmdldCwgbWV0aG9kKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICBSZXR1cm5zIGB0cnVl
YCBpZiB0aGUgb2JqZWN0IGN1cnJlbnRseSBoYXMgb2JzZXJ2ZXJzIHJlZ2lzdGVyZWQgZm9yIGEK
LSAgICAgIHBhcnRpY3VsYXIga2V5LiBZb3UgY2FuIHVzZSB0aGlzIG1ldGhvZCB0byBwb3RlbnRp
YWxseSBkZWZlciBwZXJmb3JtaW5nCi0gICAgICBhbiBleHBlbnNpdmUgYWN0aW9uIHVudGlsIHNv
bWVvbmUgYmVnaW5zIG9ic2VydmluZyBhIHBhcnRpY3VsYXIgcHJvcGVydHkKLSAgICAgIG9uIHRo
ZSBvYmplY3QuCi0gICAgICAgQG1ldGhvZCBoYXNPYnNlcnZlckZvcgotICAgICAgQHBhcmFtIHtT
dHJpbmd9IGtleSBLZXkgdG8gY2hlY2sKLSAgICAgIEByZXR1cm4ge0Jvb2xlYW59Ci0gICAgICBA
cHJpdmF0ZQotICAgICovCi0gICAgaGFzT2JzZXJ2ZXJGb3I6IGZ1bmN0aW9uIChrZXkpIHsKLSAg
ICAgIHJldHVybiBfZW1iZXJNZXRhbEV2ZW50cy5oYXNMaXN0ZW5lcnModGhpcywga2V5ICsgJzpj
aGFuZ2UnKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICBSZXRyaWV2ZXMgdGhlIHZhbHVlIG9m
IGEgcHJvcGVydHksIG9yIGEgZGVmYXVsdCB2YWx1ZSBpbiB0aGUgY2FzZSB0aGF0IHRoZQotICAg
ICAgcHJvcGVydHkgcmV0dXJucyBgdW5kZWZpbmVkYC4KLSAgICAgICBgYGBqYXZhc2NyaXB0Ci0g
ICAgICBwZXJzb24uZ2V0V2l0aERlZmF1bHQoJ2xhc3ROYW1lJywgJ0RvZScpOwotICAgICAgYGBg
Ci0gICAgICAgQG1ldGhvZCBnZXRXaXRoRGVmYXVsdAotICAgICAgQHBhcmFtIHtTdHJpbmd9IGtl
eU5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIHJldHJpZXZlCi0gICAgICBAcGFyYW0g
e09iamVjdH0gZGVmYXVsdFZhbHVlIFRoZSB2YWx1ZSB0byByZXR1cm4gaWYgdGhlIHByb3BlcnR5
IHZhbHVlIGlzIHVuZGVmaW5lZAotICAgICAgQHJldHVybiB7T2JqZWN0fSBUaGUgcHJvcGVydHkg
dmFsdWUgb3IgdGhlIGRlZmF1bHRWYWx1ZS4KLSAgICAgIEBwdWJsaWMKLSAgICAqLwotICAgIGdl
dFdpdGhEZWZhdWx0OiBmdW5jdGlvbiAoa2V5TmFtZSwgZGVmYXVsdFZhbHVlKSB7Ci0gICAgICBy
ZXR1cm4gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0V2l0aERlZmF1bHQodGhpcywga2V5TmFt
ZSwgZGVmYXVsdFZhbHVlKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICBTZXQgdGhlIHZhbHVl
IG9mIGEgcHJvcGVydHkgdG8gdGhlIGN1cnJlbnQgdmFsdWUgcGx1cyBzb21lIGFtb3VudC4KLSAg
ICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICBwZXJzb24uaW5jcmVtZW50UHJvcGVydHkoJ2FnZScp
OwotICAgICAgdGVhbS5pbmNyZW1lbnRQcm9wZXJ0eSgnc2NvcmUnLCAyKTsKLSAgICAgIGBgYAot
ICAgICAgIEBtZXRob2QgaW5jcmVtZW50UHJvcGVydHkKLSAgICAgIEBwYXJhbSB7U3RyaW5nfSBr
ZXlOYW1lIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBpbmNyZW1lbnQKLSAgICAgIEBwYXJh
bSB7TnVtYmVyfSBpbmNyZW1lbnQgVGhlIGFtb3VudCB0byBpbmNyZW1lbnQgYnkuIERlZmF1bHRz
IHRvIDEKLSAgICAgIEByZXR1cm4ge051bWJlcn0gVGhlIG5ldyBwcm9wZXJ0eSB2YWx1ZQotICAg
ICAgQHB1YmxpYwotICAgICovCi0gICAgaW5jcmVtZW50UHJvcGVydHk6IGZ1bmN0aW9uIChrZXlO
YW1lLCBpbmNyZW1lbnQpIHsKLSAgICAgIGlmIChfZW1iZXJNZXRhbElzX25vbmUuZGVmYXVsdChp
bmNyZW1lbnQpKSB7Ci0gICAgICAgIGluY3JlbWVudCA9IDE7Ci0gICAgICB9Ci0gICAgICBfZW1i
ZXJNZXRhbERlYnVnLmFzc2VydCgnTXVzdCBwYXNzIGEgbnVtZXJpYyB2YWx1ZSB0byBpbmNyZW1l
bnRQcm9wZXJ0eScsICFpc05hTihwYXJzZUZsb2F0KGluY3JlbWVudCkpICYmIGlzRmluaXRlKGlu
Y3JlbWVudCkpOwotICAgICAgcmV0dXJuIF9lbWJlck1ldGFsUHJvcGVydHlfc2V0LnNldCh0aGlz
LCBrZXlOYW1lLCAocGFyc2VGbG9hdChfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywg
a2V5TmFtZSkpIHx8IDApICsgaW5jcmVtZW50KTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICBT
ZXQgdGhlIHZhbHVlIG9mIGEgcHJvcGVydHkgdG8gdGhlIGN1cnJlbnQgdmFsdWUgbWludXMgc29t
ZSBhbW91bnQuCi0gICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgcGxheWVyLmRlY3JlbWVudFBy
b3BlcnR5KCdsaXZlcycpOwotICAgICAgb3JjLmRlY3JlbWVudFByb3BlcnR5KCdoZWFsdGgnLCA1
KTsKLSAgICAgIGBgYAotICAgICAgIEBtZXRob2QgZGVjcmVtZW50UHJvcGVydHkKLSAgICAgIEBw
YXJhbSB7U3RyaW5nfSBrZXlOYW1lIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBkZWNyZW1l
bnQKLSAgICAgIEBwYXJhbSB7TnVtYmVyfSBkZWNyZW1lbnQgVGhlIGFtb3VudCB0byBkZWNyZW1l
bnQgYnkuIERlZmF1bHRzIHRvIDEKLSAgICAgIEByZXR1cm4ge051bWJlcn0gVGhlIG5ldyBwcm9w
ZXJ0eSB2YWx1ZQotICAgICAgQHB1YmxpYwotICAgICovCi0gICAgZGVjcmVtZW50UHJvcGVydHk6
IGZ1bmN0aW9uIChrZXlOYW1lLCBkZWNyZW1lbnQpIHsKLSAgICAgIGlmIChfZW1iZXJNZXRhbElz
X25vbmUuZGVmYXVsdChkZWNyZW1lbnQpKSB7Ci0gICAgICAgIGRlY3JlbWVudCA9IDE7Ci0gICAg
ICB9Ci0gICAgICBfZW1iZXJNZXRhbERlYnVnLmFzc2VydCgnTXVzdCBwYXNzIGEgbnVtZXJpYyB2
YWx1ZSB0byBkZWNyZW1lbnRQcm9wZXJ0eScsICFpc05hTihwYXJzZUZsb2F0KGRlY3JlbWVudCkp
ICYmIGlzRmluaXRlKGRlY3JlbWVudCkpOwotICAgICAgcmV0dXJuIF9lbWJlck1ldGFsUHJvcGVy
dHlfc2V0LnNldCh0aGlzLCBrZXlOYW1lLCAoX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRo
aXMsIGtleU5hbWUpIHx8IDApIC0gZGVjcmVtZW50KTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAg
ICBTZXQgdGhlIHZhbHVlIG9mIGEgYm9vbGVhbiBwcm9wZXJ0eSB0byB0aGUgb3Bwb3NpdGUgb2Yg
aXRzCi0gICAgICBjdXJyZW50IHZhbHVlLgotICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgIHN0
YXJzaGlwLnRvZ2dsZVByb3BlcnR5KCd3YXJwRHJpdmVFbmdhZ2VkJyk7Ci0gICAgICBgYGAKLSAg
ICAgICBAbWV0aG9kIHRvZ2dsZVByb3BlcnR5Ci0gICAgICBAcGFyYW0ge1N0cmluZ30ga2V5TmFt
ZSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gdG9nZ2xlCi0gICAgICBAcmV0dXJuIHtCb29s
ZWFufSBUaGUgbmV3IHByb3BlcnR5IHZhbHVlCi0gICAgICBAcHVibGljCi0gICAgKi8KLSAgICB0
b2dnbGVQcm9wZXJ0eTogZnVuY3Rpb24gKGtleU5hbWUpIHsKLSAgICAgIHJldHVybiBfZW1iZXJN
ZXRhbFByb3BlcnR5X3NldC5zZXQodGhpcywga2V5TmFtZSwgIV9lbWJlck1ldGFsUHJvcGVydHlf
Z2V0LmdldCh0aGlzLCBrZXlOYW1lKSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAgUmV0dXJu
cyB0aGUgY2FjaGVkIHZhbHVlIG9mIGEgY29tcHV0ZWQgcHJvcGVydHksIGlmIGl0IGV4aXN0cy4K
LSAgICAgIFRoaXMgYWxsb3dzIHlvdSB0byBpbnNwZWN0IHRoZSB2YWx1ZSBvZiBhIGNvbXB1dGVk
IHByb3BlcnR5Ci0gICAgICB3aXRob3V0IGFjY2lkZW50YWxseSBpbnZva2luZyBpdCBpZiBpdCBp
cyBpbnRlbmRlZCB0byBiZQotICAgICAgZ2VuZXJhdGVkIGxhemlseS4KLSAgICAgICBAbWV0aG9k
IGNhY2hlRm9yCi0gICAgICBAcGFyYW0ge1N0cmluZ30ga2V5TmFtZQotICAgICAgQHJldHVybiB7
T2JqZWN0fSBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSBjb21wdXRlZCBwcm9wZXJ0eSwgaWYgYW55
Ci0gICAgICBAcHVibGljCi0gICAgKi8KLSAgICBjYWNoZUZvcjogZnVuY3Rpb24gKGtleU5hbWUp
IHsKLSAgICAgIHJldHVybiBfZW1iZXJNZXRhbENvbXB1dGVkLmNhY2hlRm9yKHRoaXMsIGtleU5h
bWUpOwotICAgIH0sCi0KLSAgICAvLyBpbnRlbmRlZCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzCi0g
ICAgb2JzZXJ2ZXJzRm9yS2V5OiBmdW5jdGlvbiAoa2V5TmFtZSkgewotICAgICAgcmV0dXJuIF9l
bWJlck1ldGFsT2JzZXJ2ZXIub2JzZXJ2ZXJzRm9yKHRoaXMsIGtleU5hbWUpOwotICAgIH0KLSAg
fSk7Ci19KTsKLWVuaWZlZCgnZW1iZXItcnVudGltZS9taXhpbnMvcHJvbWlzZV9wcm94eScsIFsn
ZXhwb3J0cycsICdlbWJlci1tZXRhbC9wcm9wZXJ0eV9nZXQnLCAnZW1iZXItbWV0YWwvc2V0X3By
b3BlcnRpZXMnLCAnZW1iZXItbWV0YWwvY29tcHV0ZWQnLCAnZW1iZXItbWV0YWwvbWl4aW4nLCAn
ZW1iZXItbWV0YWwvZXJyb3InXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1ldGFsUHJvcGVy
dHlfZ2V0LCBfZW1iZXJNZXRhbFNldF9wcm9wZXJ0aWVzLCBfZW1iZXJNZXRhbENvbXB1dGVkLCBf
ZW1iZXJNZXRhbE1peGluLCBfZW1iZXJNZXRhbEVycm9yKSB7Ci0gICd1c2Ugc3RyaWN0JzsKLQot
ICB2YXIgbm90ID0gX2VtYmVyTWV0YWxDb21wdXRlZC5jb21wdXRlZC5ub3Q7Ci0gIHZhciBvciA9
IF9lbWJlck1ldGFsQ29tcHV0ZWQuY29tcHV0ZWQub3I7Ci0KLSAgLyoqCi0gICAgQG1vZHVsZSBl
bWJlcgotICAgIEBzdWJtb2R1bGUgZW1iZXItcnVudGltZQotICAqLwotCi0gIGZ1bmN0aW9uIHRh
cChwcm94eSwgcHJvbWlzZSkgewotICAgIF9lbWJlck1ldGFsU2V0X3Byb3BlcnRpZXMuZGVmYXVs
dChwcm94eSwgewotICAgICAgaXNGdWxmaWxsZWQ6IGZhbHNlLAotICAgICAgaXNSZWplY3RlZDog
ZmFsc2UKLSAgICB9KTsKLQotICAgIHJldHVybiBwcm9taXNlLnRoZW4oZnVuY3Rpb24gKHZhbHVl
KSB7Ci0gICAgICBfZW1iZXJNZXRhbFNldF9wcm9wZXJ0aWVzLmRlZmF1bHQocHJveHksIHsKLSAg
ICAgICAgY29udGVudDogdmFsdWUsCi0gICAgICAgIGlzRnVsZmlsbGVkOiB0cnVlCi0gICAgICB9
KTsKLSAgICAgIHJldHVybiB2YWx1ZTsKLSAgICB9LCBmdW5jdGlvbiAocmVhc29uKSB7Ci0gICAg
ICBfZW1iZXJNZXRhbFNldF9wcm9wZXJ0aWVzLmRlZmF1bHQocHJveHksIHsKLSAgICAgICAgcmVh
c29uOiByZWFzb24sCi0gICAgICAgIGlzUmVqZWN0ZWQ6IHRydWUKLSAgICAgIH0pOwotICAgICAg
dGhyb3cgcmVhc29uOwotICAgIH0sICdFbWJlcjogUHJvbWlzZVByb3h5Jyk7Ci0gIH0KLQotICAv
KioKLSAgICBBIGxvdyBsZXZlbCBtaXhpbiBtYWtpbmcgT2JqZWN0UHJveHkgcHJvbWlzZS1hd2Fy
ZS4KLSAgCi0gICAgYGBgamF2YXNjcmlwdAotICAgIHZhciBPYmplY3RQcm9taXNlUHJveHkgPSBF
bWJlci5PYmplY3RQcm94eS5leHRlbmQoRW1iZXIuUHJvbWlzZVByb3h5TWl4aW4pOwotICAKLSAg
ICB2YXIgcHJveHkgPSBPYmplY3RQcm9taXNlUHJveHkuY3JlYXRlKHsKLSAgICAgIHByb21pc2U6
ICQuZ2V0SlNPTignL3NvbWUvcmVtb3RlL2RhdGEuanNvbicpCi0gICAgfSk7Ci0gIAotICAgIHBy
b3h5LnRoZW4oZnVuY3Rpb24oanNvbil7Ci0gICAgICAgLy8gdGhlIGpzb24KLSAgICB9LCBmdW5j
dGlvbihyZWFzb24pIHsKLSAgICAgICAvLyB0aGUgcmVhc29uIHdoeSB5b3UgaGF2ZSBubyBqc29u
Ci0gICAgfSk7Ci0gICAgYGBgCi0gIAotICAgIHRoZSBwcm94eSBoYXMgYmluZGFibGUgYXR0cmli
dXRlcyB3aGljaAotICAgIHRyYWNrIHRoZSBwcm9taXNlcyBsaWZlIGN5Y2xlCi0gIAotICAgIGBg
YGphdmFzY3JpcHQKLSAgICBwcm94eS5nZXQoJ2lzUGVuZGluZycpICAgLy89PiB0cnVlCi0gICAg
cHJveHkuZ2V0KCdpc1NldHRsZWQnKSAgLy89PiBmYWxzZQotICAgIHByb3h5LmdldCgnaXNSZWpl
Y3RlZCcpICAvLz0+IGZhbHNlCi0gICAgcHJveHkuZ2V0KCdpc0Z1bGZpbGxlZCcpIC8vPT4gZmFs
c2UKLSAgICBgYGAKLSAgCi0gICAgV2hlbiB0aGUgJC5nZXRKU09OIGNvbXBsZXRlcywgYW5kIHRo
ZSBwcm9taXNlIGlzIGZ1bGZpbGxlZAotICAgIHdpdGgganNvbiwgdGhlIGxpZmUgY3ljbGUgYXR0
cmlidXRlcyB3aWxsIHVwZGF0ZSBhY2NvcmRpbmdseS4KLSAgCi0gICAgYGBgamF2YXNjcmlwdAot
ICAgIHByb3h5LmdldCgnaXNQZW5kaW5nJykgICAvLz0+IGZhbHNlCi0gICAgcHJveHkuZ2V0KCdp
c1NldHRsZWQnKSAgIC8vPT4gdHJ1ZQotICAgIHByb3h5LmdldCgnaXNSZWplY3RlZCcpICAvLz0+
IGZhbHNlCi0gICAgcHJveHkuZ2V0KCdpc0Z1bGZpbGxlZCcpIC8vPT4gdHJ1ZQotICAgIGBgYAot
ICAKLSAgICBBcyB0aGUgcHJveHkgaXMgYW4gT2JqZWN0UHJveHksIGFuZCB0aGUganNvbiBub3cg
aXRzIGNvbnRlbnQsCi0gICAgYWxsIHRoZSBqc29uIHByb3BlcnRpZXMgd2lsbCBiZSBhdmFpbGFi
bGUgZGlyZWN0bHkgZnJvbSB0aGUgcHJveHkuCi0gIAotICAgIGBgYGphdmFzY3JpcHQKLSAgICAv
LyBBc3N1bWluZyB0aGUgZm9sbG93aW5nIGpzb246Ci0gICAgewotICAgICAgZmlyc3ROYW1lOiAn
U3RlZmFuJywKLSAgICAgIGxhc3ROYW1lOiAnUGVubmVyJwotICAgIH0KLSAgCi0gICAgLy8gYm90
aCBwcm9wZXJ0aWVzIHdpbGwgYWNjZXNzaWJsZSBvbiB0aGUgcHJveHkKLSAgICBwcm94eS5nZXQo
J2ZpcnN0TmFtZScpIC8vPT4gJ1N0ZWZhbicKLSAgICBwcm94eS5nZXQoJ2xhc3ROYW1lJykgIC8v
PT4gJ1Blbm5lcicKLSAgICBgYGAKLSAgCi0gICAgQGNsYXNzIEVtYmVyLlByb21pc2VQcm94eU1p
eGluCi0gICAgQHB1YmxpYwotICAqLwotICBleHBvcnRzLmRlZmF1bHQgPSBfZW1iZXJNZXRhbE1p
eGluLk1peGluLmNyZWF0ZSh7Ci0gICAgLyoqCi0gICAgICBJZiB0aGUgcHJveGllZCBwcm9taXNl
IGlzIHJlamVjdGVkIHRoaXMgd2lsbCBjb250YWluIHRoZSByZWFzb24KLSAgICAgIHByb3ZpZGVk
LgotICAgICAgIEBwcm9wZXJ0eSByZWFzb24KLSAgICAgIEBkZWZhdWx0IG51bGwKLSAgICAgIEBw
dWJsaWMKLSAgICAqLwotICAgIHJlYXNvbjogbnVsbCwKLQotICAgIC8qKgotICAgICAgT25jZSB0
aGUgcHJveGllZCBwcm9taXNlIGhhcyBzZXR0bGVkIHRoaXMgd2lsbCBiZWNvbWUgYGZhbHNlYC4K
LSAgICAgICBAcHJvcGVydHkgaXNQZW5kaW5nCi0gICAgICBAZGVmYXVsdCB0cnVlCi0gICAgICBA
cHVibGljCi0gICAgKi8KLSAgICBpc1BlbmRpbmc6IG5vdCgnaXNTZXR0bGVkJykucmVhZE9ubHko
KSwKLQotICAgIC8qKgotICAgICAgT25jZSB0aGUgcHJveGllZCBwcm9taXNlIGhhcyBzZXR0bGVk
IHRoaXMgd2lsbCBiZWNvbWUgYHRydWVgLgotICAgICAgIEBwcm9wZXJ0eSBpc1NldHRsZWQKLSAg
ICAgIEBkZWZhdWx0IGZhbHNlCi0gICAgICBAcHVibGljCi0gICAgKi8KLSAgICBpc1NldHRsZWQ6
IG9yKCdpc1JlamVjdGVkJywgJ2lzRnVsZmlsbGVkJykucmVhZE9ubHkoKSwKLQotICAgIC8qKgot
ICAgICAgV2lsbCBiZWNvbWUgYHRydWVgIGlmIHRoZSBwcm94aWVkIHByb21pc2UgaXMgcmVqZWN0
ZWQuCi0gICAgICAgQHByb3BlcnR5IGlzUmVqZWN0ZWQKLSAgICAgIEBkZWZhdWx0IGZhbHNlCi0g
ICAgICBAcHVibGljCi0gICAgKi8KLSAgICBpc1JlamVjdGVkOiBmYWxzZSwKLQotICAgIC8qKgot
ICAgICAgV2lsbCBiZWNvbWUgYHRydWVgIGlmIHRoZSBwcm94aWVkIHByb21pc2UgaXMgZnVsZmls
bGVkLgotICAgICAgIEBwcm9wZXJ0eSBpc0Z1bGZpbGxlZAotICAgICAgQGRlZmF1bHQgZmFsc2UK
LSAgICAgIEBwdWJsaWMKLSAgICAqLwotICAgIGlzRnVsZmlsbGVkOiBmYWxzZSwKLQotICAgIC8q
KgotICAgICAgVGhlIHByb21pc2Ugd2hvc2UgZnVsZmlsbG1lbnQgdmFsdWUgaXMgYmVpbmcgcHJv
eGllZCBieSB0aGlzIG9iamVjdC4KLSAgICAgICBUaGlzIHByb3BlcnR5IG11c3QgYmUgc3BlY2lm
aWVkIHVwb24gY3JlYXRpb24sIGFuZCBzaG91bGQgbm90IGJlCi0gICAgICBjaGFuZ2VkIG9uY2Ug
Y3JlYXRlZC4KLSAgICAgICBFeGFtcGxlOgotICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgIEVt
YmVyLk9iamVjdFByb3h5LmV4dGVuZChFbWJlci5Qcm9taXNlUHJveHlNaXhpbikuY3JlYXRlKHsK
LSAgICAgICAgcHJvbWlzZTogPHRoZW5hYmxlPgotICAgICAgfSk7Ci0gICAgICBgYGAKLSAgICAg
ICBAcHJvcGVydHkgcHJvbWlzZQotICAgICAgQHB1YmxpYwotICAgICovCi0gICAgcHJvbWlzZTog
X2VtYmVyTWV0YWxDb21wdXRlZC5jb21wdXRlZCh7Ci0gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsK
LSAgICAgICAgdGhyb3cgbmV3IF9lbWJlck1ldGFsRXJyb3IuZGVmYXVsdCgnUHJvbWlzZVByb3h5
XCdzIHByb21pc2UgbXVzdCBiZSBzZXQnKTsKLSAgICAgIH0sCi0gICAgICBzZXQ6IGZ1bmN0aW9u
IChrZXksIHByb21pc2UpIHsKLSAgICAgICAgcmV0dXJuIHRhcCh0aGlzLCBwcm9taXNlKTsKLSAg
ICAgIH0KLSAgICB9KSwKLQotICAgIC8qKgotICAgICAgQW4gYWxpYXMgdG8gdGhlIHByb3hpZWQg
cHJvbWlzZSdzIGB0aGVuYC4KLSAgICAgICBTZWUgUlNWUC5Qcm9taXNlLnRoZW4uCi0gICAgICAg
QG1ldGhvZCB0aGVuCi0gICAgICBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjawotICAgICAgQHJl
dHVybiB7UlNWUC5Qcm9taXNlfQotICAgICAgQHB1YmxpYwotICAgICovCi0gICAgdGhlbjogcHJv
bWlzZUFsaWFzKCd0aGVuJyksCi0KLSAgICAvKioKLSAgICAgIEFuIGFsaWFzIHRvIHRoZSBwcm94
aWVkIHByb21pc2UncyBgY2F0Y2hgLgotICAgICAgIFNlZSBSU1ZQLlByb21pc2UuY2F0Y2guCi0g
ICAgICAgQG1ldGhvZCBjYXRjaAotICAgICAgQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sKLSAg
ICAgIEByZXR1cm4ge1JTVlAuUHJvbWlzZX0KLSAgICAgIEBzaW5jZSAxLjMuMAotICAgICAgQHB1
YmxpYwotICAgICovCi0gICAgJ2NhdGNoJzogcHJvbWlzZUFsaWFzKCdjYXRjaCcpLAotCi0gICAg
LyoqCi0gICAgICBBbiBhbGlhcyB0byB0aGUgcHJveGllZCBwcm9taXNlJ3MgYGZpbmFsbHlgLgot
ICAgICAgIFNlZSBSU1ZQLlByb21pc2UuZmluYWxseS4KLSAgICAgICBAbWV0aG9kIGZpbmFsbHkK
LSAgICAgIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrCi0gICAgICBAcmV0dXJuIHtSU1ZQLlBy
b21pc2V9Ci0gICAgICBAc2luY2UgMS4zLjAKLSAgICAgIEBwdWJsaWMKLSAgICAqLwotICAgICdm
aW5hbGx5JzogcHJvbWlzZUFsaWFzKCdmaW5hbGx5JykKLQotICB9KTsKLQotICBmdW5jdGlvbiBw
cm9taXNlQWxpYXMobmFtZSkgewotICAgIHJldHVybiBmdW5jdGlvbiAoKSB7Ci0gICAgICB2YXIg
cHJvbWlzZSA9IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0aGlzLCAncHJvbWlzZScpOwot
ICAgICAgcmV0dXJuIHByb21pc2VbbmFtZV0uYXBwbHkocHJvbWlzZSwgYXJndW1lbnRzKTsKLSAg
ICB9OwotICB9Ci19KTsKLWVuaWZlZCgnZW1iZXItcnVudGltZS9taXhpbnMvcmVnaXN0cnlfcHJv
eHknLCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwvZGVidWcnLCAnZW1iZXItbWV0YWwvbWl4aW4n
XSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1ldGFsRGVidWcsIF9lbWJlck1ldGFsTWl4aW4p
IHsKLSAgLyoqCi0gIEBtb2R1bGUgZW1iZXIKLSAgQHN1Ym1vZHVsZSBlbWJlci1ydW50aW1lCi0g
ICovCi0KLSAgJ3VzZSBzdHJpY3QnOwotCi0gIGV4cG9ydHMuYnVpbGRGYWtlUmVnaXN0cnlXaXRo
RGVwcmVjYXRpb25zID0gYnVpbGRGYWtlUmVnaXN0cnlXaXRoRGVwcmVjYXRpb25zOwotCi0gIC8q
KgotICAgIFJlZ2lzdHJ5UHJveHlNaXhpbiBpcyB1c2VkIHRvIHByb3ZpZGUgcHVibGljIGFjY2Vz
cyB0byBzcGVjaWZpYwotICAgIHJlZ2lzdHJ5IGZ1bmN0aW9uYWxpdHkuCi0gIAotICAgIEBjbGFz
cyBSZWdpc3RyeVByb3h5TWl4aW4KLSAgICBAcHJpdmF0ZQotICAqLwotICBleHBvcnRzLmRlZmF1
bHQgPSBfZW1iZXJNZXRhbE1peGluLk1peGluLmNyZWF0ZSh7Ci0gICAgX19yZWdpc3RyeV9fOiBu
dWxsLAotCi0gICAgLyoqCi0gICAgIEdpdmVuIGEgZnVsbE5hbWUgcmV0dXJuIHRoZSBjb3JyZXNw
b25kaW5nIGZhY3RvcnkuCi0gICAgICBAcHVibGljCi0gICAgIEBtZXRob2QgcmVzb2x2ZVJlZ2lz
dHJhdGlvbgotICAgICBAcGFyYW0ge1N0cmluZ30gZnVsbE5hbWUKLSAgICAgQHJldHVybiB7RnVu
Y3Rpb259IGZ1bGxOYW1lJ3MgZmFjdG9yeQotICAgICAqLwotICAgIHJlc29sdmVSZWdpc3RyYXRp
b246IHJlZ2lzdHJ5QWxpYXMoJ3Jlc29sdmUnKSwKLQotICAgIC8qKgotICAgICAgUmVnaXN0ZXJz
IGEgZmFjdG9yeSB0aGF0IGNhbiBiZSB1c2VkIGZvciBkZXBlbmRlbmN5IGluamVjdGlvbiAod2l0
aAotICAgICAgYGluamVjdGApIG9yIGZvciBzZXJ2aWNlIGxvb2t1cC4gRWFjaCBmYWN0b3J5IGlz
IHJlZ2lzdGVyZWQgd2l0aAotICAgICAgYSBmdWxsIG5hbWUgaW5jbHVkaW5nIHR3byBwYXJ0czog
YHR5cGU6bmFtZWAuCi0gICAgICAgQSBzaW1wbGUgZXhhbXBsZToKLSAgICAgICBgYGBqYXZhc2Ny
aXB0Ci0gICAgICB2YXIgQXBwID0gRW1iZXIuQXBwbGljYXRpb24uY3JlYXRlKCk7Ci0gICAgICAg
QXBwLk9yYW5nZSA9IEVtYmVyLk9iamVjdC5leHRlbmQoKTsKLSAgICAgIEFwcC5yZWdpc3Rlcign
ZnJ1aXQ6ZmF2b3JpdGUnLCBBcHAuT3JhbmdlKTsKLSAgICAgIGBgYAotICAgICAgIEVtYmVyIHdp
bGwgcmVzb2x2ZSBmYWN0b3JpZXMgZnJvbSB0aGUgYEFwcGAgbmFtZXNwYWNlIGF1dG9tYXRpY2Fs
bHkuCi0gICAgICBGb3IgZXhhbXBsZSBgQXBwLkNhcnNDb250cm9sbGVyYCB3aWxsIGJlIGRpc2Nv
dmVyZWQgYW5kIHJldHVybmVkIGlmCi0gICAgICBhbiBhcHBsaWNhdGlvbiByZXF1ZXN0cyBgY29u
dHJvbGxlcjpjYXJzYC4KLSAgICAgICBBbiBleGFtcGxlIG9mIHJlZ2lzdGVyaW5nIGEgY29udHJv
bGxlciB3aXRoIGEgbm9uLXN0YW5kYXJkIG5hbWU6Ci0gICAgICAgYGBgamF2YXNjcmlwdAotICAg
ICAgdmFyIEFwcCA9IEVtYmVyLkFwcGxpY2F0aW9uLmNyZWF0ZSgpOwotICAgICAgdmFyIFNlc3Np
b24gPSBFbWJlci5Db250cm9sbGVyLmV4dGVuZCgpOwotICAgICAgIEFwcC5yZWdpc3RlcignY29u
dHJvbGxlcjpzZXNzaW9uJywgU2Vzc2lvbik7Ci0gICAgICAgLy8gVGhlIFNlc3Npb24gY29udHJv
bGxlciBjYW4gbm93IGJlIHRyZWF0ZWQgbGlrZSBhIG5vcm1hbCBjb250cm9sbGVyLAotICAgICAg
Ly8gZGVzcGl0ZSBpdHMgbm9uLXN0YW5kYXJkIG5hbWUuCi0gICAgICBBcHAuQXBwbGljYXRpb25D
b250cm9sbGVyID0gRW1iZXIuQ29udHJvbGxlci5leHRlbmQoewotICAgICAgICBuZWVkczogWydz
ZXNzaW9uJ10KLSAgICAgIH0pOwotICAgICAgYGBgCi0gICAgICAgUmVnaXN0ZXJlZCBmYWN0b3Jp
ZXMgYXJlICoqaW5zdGFudGlhdGVkKiogYnkgaGF2aW5nIGBjcmVhdGVgCi0gICAgICBjYWxsZWQg
b24gdGhlbS4gQWRkaXRpb25hbGx5IHRoZXkgYXJlICoqc2luZ2xldG9ucyoqLCBlYWNoIHRpbWUK
LSAgICAgIHRoZXkgYXJlIGxvb2tlZCB1cCB0aGV5IHJldHVybiB0aGUgc2FtZSBpbnN0YW5jZS4K
LSAgICAgICBTb21lIGV4YW1wbGVzIG1vZGlmeWluZyB0aGF0IGRlZmF1bHQgYmVoYXZpb3I6Ci0g
ICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgdmFyIEFwcCA9IEVtYmVyLkFwcGxpY2F0aW9uLmNy
ZWF0ZSgpOwotICAgICAgIEFwcC5QZXJzb24gPSBFbWJlci5PYmplY3QuZXh0ZW5kKCk7Ci0gICAg
ICBBcHAuT3JhbmdlID0gRW1iZXIuT2JqZWN0LmV4dGVuZCgpOwotICAgICAgQXBwLkVtYWlsID0g
RW1iZXIuT2JqZWN0LmV4dGVuZCgpOwotICAgICAgQXBwLnNlc3Npb24gPSBFbWJlci5PYmplY3Qu
Y3JlYXRlKCk7Ci0gICAgICAgQXBwLnJlZ2lzdGVyKCdtb2RlbDp1c2VyJywgQXBwLlBlcnNvbiwg
eyBzaW5nbGV0b246IGZhbHNlIH0pOwotICAgICAgQXBwLnJlZ2lzdGVyKCdmcnVpdDpmYXZvcml0
ZScsIEFwcC5PcmFuZ2UpOwotICAgICAgQXBwLnJlZ2lzdGVyKCdjb21tdW5pY2F0aW9uOm1haW4n
LCBBcHAuRW1haWwsIHsgc2luZ2xldG9uOiBmYWxzZSB9KTsKLSAgICAgIEFwcC5yZWdpc3Rlcign
c2Vzc2lvbicsIEFwcC5zZXNzaW9uLCB7IGluc3RhbnRpYXRlOiBmYWxzZSB9KTsKLSAgICAgIGBg
YAotICAgICAgIEBtZXRob2QgcmVnaXN0ZXIKLSAgICAgIEBwYXJhbSAgZnVsbE5hbWUge1N0cmlu
Z30gdHlwZTpuYW1lIChlLmcuLCAnbW9kZWw6dXNlcicpCi0gICAgICBAcGFyYW0gIGZhY3Rvcnkg
e0Z1bmN0aW9ufSAoZS5nLiwgQXBwLlBlcnNvbikKLSAgICAgIEBwYXJhbSAgb3B0aW9ucyB7T2Jq
ZWN0fSAob3B0aW9uYWwpIGRpc2FibGUgaW5zdGFudGlhdGlvbiBvciBzaW5nbGV0b24gdXNhZ2UK
LSAgICAgIEBwdWJsaWMKLSAgICAgKi8KLSAgICByZWdpc3RlcjogcmVnaXN0cnlBbGlhcygncmVn
aXN0ZXInKSwKLQotICAgIC8qKgotICAgICBVbnJlZ2lzdGVyIGEgZmFjdG9yeS4KLSAgICAgIGBg
YGphdmFzY3JpcHQKLSAgICAgdmFyIEFwcCA9IEVtYmVyLkFwcGxpY2F0aW9uLmNyZWF0ZSgpOwot
ICAgICB2YXIgVXNlciA9IEVtYmVyLk9iamVjdC5leHRlbmQoKTsKLSAgICAgQXBwLnJlZ2lzdGVy
KCdtb2RlbDp1c2VyJywgVXNlcik7Ci0gICAgICBBcHAucmVzb2x2ZVJlZ2lzdHJhdGlvbignbW9k
ZWw6dXNlcicpLmNyZWF0ZSgpIGluc3RhbmNlb2YgVXNlciAvLz0+IHRydWUKLSAgICAgIEFwcC51
bnJlZ2lzdGVyKCdtb2RlbDp1c2VyJykKLSAgICAgQXBwLnJlc29sdmVSZWdpc3RyYXRpb24oJ21v
ZGVsOnVzZXInKSA9PT0gdW5kZWZpbmVkIC8vPT4gdHJ1ZQotICAgICBgYGAKLSAgICAgIEBwdWJs
aWMKLSAgICAgQG1ldGhvZCB1bnJlZ2lzdGVyCi0gICAgIEBwYXJhbSB7U3RyaW5nfSBmdWxsTmFt
ZQotICAgICAqLwotICAgIHVucmVnaXN0ZXI6IHJlZ2lzdHJ5QWxpYXMoJ3VucmVnaXN0ZXInKSwK
LQotICAgIC8qKgotICAgICBDaGVjayBpZiBhIGZhY3RvcnkgaXMgcmVnaXN0ZXJlZC4KLSAgICAg
IEBwdWJsaWMKLSAgICAgQG1ldGhvZCBoYXNSZWdpc3RyYXRpb24KLSAgICAgQHBhcmFtIHtTdHJp
bmd9IGZ1bGxOYW1lCi0gICAgIEByZXR1cm4ge0Jvb2xlYW59Ci0gICAgICovCi0gICAgaGFzUmVn
aXN0cmF0aW9uOiByZWdpc3RyeUFsaWFzKCdoYXMnKSwKLQotICAgIC8qKgotICAgICBSZWdpc3Rl
ciBhbiBvcHRpb24gZm9yIGEgcGFydGljdWxhciBmYWN0b3J5LgotICAgICAgQHB1YmxpYwotICAg
ICBAbWV0aG9kIHJlZ2lzdGVyT3B0aW9uCi0gICAgIEBwYXJhbSB7U3RyaW5nfSBmdWxsTmFtZQot
ICAgICBAcGFyYW0ge1N0cmluZ30gb3B0aW9uTmFtZQotICAgICBAcGFyYW0ge09iamVjdH0gb3B0
aW9ucwotICAgICAqLwotICAgIHJlZ2lzdGVyT3B0aW9uOiByZWdpc3RyeUFsaWFzKCdvcHRpb24n
KSwKLQotICAgIC8qKgotICAgICBSZXR1cm4gYSBzcGVjaWZpYyByZWdpc3RlcmVkIG9wdGlvbiBm
b3IgYSBwYXJ0aWN1bGFyIGZhY3RvcnkuCi0gICAgICBAcHVibGljCi0gICAgIEBtZXRob2QgcmVn
aXN0ZXJlZE9wdGlvbgotICAgICBAcGFyYW0gIHtTdHJpbmd9IGZ1bGxOYW1lCi0gICAgIEBwYXJh
bSAge1N0cmluZ30gb3B0aW9uTmFtZQotICAgICBAcmV0dXJuIHtPYmplY3R9IG9wdGlvbnMKLSAg
ICAgKi8KLSAgICByZWdpc3RlcmVkT3B0aW9uOiByZWdpc3RyeUFsaWFzKCdnZXRPcHRpb24nKSwK
LQotICAgIC8qKgotICAgICBSZWdpc3RlciBvcHRpb25zIGZvciBhIHBhcnRpY3VsYXIgZmFjdG9y
eS4KLSAgICAgIEBwdWJsaWMKLSAgICAgQG1ldGhvZCByZWdpc3Rlck9wdGlvbnMKLSAgICAgQHBh
cmFtIHtTdHJpbmd9IGZ1bGxOYW1lCi0gICAgIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zCi0gICAg
ICovCi0gICAgcmVnaXN0ZXJPcHRpb25zOiByZWdpc3RyeUFsaWFzKCdvcHRpb25zJyksCi0KLSAg
ICAvKioKLSAgICAgUmV0dXJuIHJlZ2lzdGVyZWQgb3B0aW9ucyBmb3IgYSBwYXJ0aWN1bGFyIGZh
Y3RvcnkuCi0gICAgICBAcHVibGljCi0gICAgIEBtZXRob2QgcmVnaXN0ZXJlZE9wdGlvbnMKLSAg
ICAgQHBhcmFtICB7U3RyaW5nfSBmdWxsTmFtZQotICAgICBAcmV0dXJuIHtPYmplY3R9IG9wdGlv
bnMKLSAgICAgKi8KLSAgICByZWdpc3RlcmVkT3B0aW9uczogcmVnaXN0cnlBbGlhcygnZ2V0T3B0
aW9ucycpLAotCi0gICAgLyoqCi0gICAgIEFsbG93IHJlZ2lzdGVyaW5nIG9wdGlvbnMgZm9yIGFs
bCBmYWN0b3JpZXMgb2YgYSB0eXBlLgotICAgICAgYGBgamF2YXNjcmlwdAotICAgICB2YXIgQXBw
ID0gRW1iZXIuQXBwbGljYXRpb24uY3JlYXRlKCk7Ci0gICAgIHZhciBhcHBJbnN0YW5jZSA9IEFw
cC5idWlsZEluc3RhbmNlKCk7Ci0gICAgICAvLyBpZiBhbGwgb2YgdHlwZSBgY29ubmVjdGlvbmAg
bXVzdCBub3QgYmUgc2luZ2xldG9ucwotICAgICBhcHBJbnN0YW5jZS5vcHRpb25zRm9yVHlwZSgn
Y29ubmVjdGlvbicsIHsgc2luZ2xldG9uOiBmYWxzZSB9KTsKLSAgICAgIGFwcEluc3RhbmNlLnJl
Z2lzdGVyKCdjb25uZWN0aW9uOnR3aXR0ZXInLCBUd2l0dGVyQ29ubmVjdGlvbik7Ci0gICAgIGFw
cEluc3RhbmNlLnJlZ2lzdGVyKCdjb25uZWN0aW9uOmZhY2Vib29rJywgRmFjZWJvb2tDb25uZWN0
aW9uKTsKLSAgICAgIHZhciB0d2l0dGVyID0gYXBwSW5zdGFuY2UubG9va3VwKCdjb25uZWN0aW9u
OnR3aXR0ZXInKTsKLSAgICAgdmFyIHR3aXR0ZXIyID0gYXBwSW5zdGFuY2UubG9va3VwKCdjb25u
ZWN0aW9uOnR3aXR0ZXInKTsKLSAgICAgIHR3aXR0ZXIgPT09IHR3aXR0ZXIyOyAvLyA9PiBmYWxz
ZQotICAgICAgdmFyIGZhY2Vib29rID0gYXBwSW5zdGFuY2UubG9va3VwKCdjb25uZWN0aW9uOmZh
Y2Vib29rJyk7Ci0gICAgIHZhciBmYWNlYm9vazIgPSBhcHBJbnN0YW5jZS5sb29rdXAoJ2Nvbm5l
Y3Rpb246ZmFjZWJvb2snKTsKLSAgICAgIGZhY2Vib29rID09PSBmYWNlYm9vazI7IC8vID0+IGZh
bHNlCi0gICAgIGBgYAotICAgICAgQHB1YmxpYwotICAgICBAbWV0aG9kIHJlZ2lzdGVyT3B0aW9u
c0ZvclR5cGUKLSAgICAgQHBhcmFtIHtTdHJpbmd9IHR5cGUKLSAgICAgQHBhcmFtIHtPYmplY3R9
IG9wdGlvbnMKLSAgICAgKi8KLSAgICByZWdpc3Rlck9wdGlvbnNGb3JUeXBlOiByZWdpc3RyeUFs
aWFzKCdvcHRpb25zRm9yVHlwZScpLAotCi0gICAgLyoqCi0gICAgIFJldHVybiB0aGUgcmVnaXN0
ZXJlZCBvcHRpb25zIGZvciBhbGwgZmFjdG9yaWVzIG9mIGEgdHlwZS4KLSAgICAgIEBwdWJsaWMK
LSAgICAgQG1ldGhvZCByZWdpc3RlcmVkT3B0aW9uc0ZvclR5cGUKLSAgICAgQHBhcmFtIHtTdHJp
bmd9IHR5cGUKLSAgICAgQHJldHVybiB7T2JqZWN0fSBvcHRpb25zCi0gICAgICovCi0gICAgcmVn
aXN0ZXJlZE9wdGlvbnNGb3JUeXBlOiByZWdpc3RyeUFsaWFzKCdnZXRPcHRpb25zRm9yVHlwZScp
LAotCi0gICAgLyoqCi0gICAgICBEZWZpbmUgYSBkZXBlbmRlbmN5IGluamVjdGlvbiBvbnRvIGEg
c3BlY2lmaWMgZmFjdG9yeSBvciBhbGwgZmFjdG9yaWVzCi0gICAgICBvZiBhIHR5cGUuCi0gICAg
ICAgV2hlbiBFbWJlciBpbnN0YW50aWF0ZXMgYSBjb250cm9sbGVyLCB2aWV3LCBvciBvdGhlciBm
cmFtZXdvcmsgY29tcG9uZW50Ci0gICAgICBpdCBjYW4gYXR0YWNoIGEgZGVwZW5kZW5jeSB0byB0
aGF0IGNvbXBvbmVudC4gVGhpcyBpcyBvZnRlbiB1c2VkIHRvCi0gICAgICBwcm92aWRlIHNlcnZp
Y2VzIHRvIGEgc2V0IG9mIGZyYW1ld29yayBjb21wb25lbnRzLgotICAgICAgIEFuIGV4YW1wbGUg
b2YgcHJvdmlkaW5nIGEgc2Vzc2lvbiBvYmplY3QgdG8gYWxsIGNvbnRyb2xsZXJzOgotICAgICAg
IGBgYGphdmFzY3JpcHQKLSAgICAgIHZhciBBcHAgPSBFbWJlci5BcHBsaWNhdGlvbi5jcmVhdGUo
KTsKLSAgICAgIHZhciBTZXNzaW9uID0gRW1iZXIuT2JqZWN0LmV4dGVuZCh7IGlzQXV0aGVudGlj
YXRlZDogZmFsc2UgfSk7Ci0gICAgICAgLy8gQSBmYWN0b3J5IG11c3QgYmUgcmVnaXN0ZXJlZCBi
ZWZvcmUgaXQgY2FuIGJlIGluamVjdGVkCi0gICAgICBBcHAucmVnaXN0ZXIoJ3Nlc3Npb246bWFp
bicsIFNlc3Npb24pOwotICAgICAgIC8vIEluamVjdCAnc2Vzc2lvbjptYWluJyBvbnRvIGFsbCBm
YWN0b3JpZXMgb2YgdGhlIHR5cGUgJ2NvbnRyb2xsZXInCi0gICAgICAvLyB3aXRoIHRoZSBuYW1l
ICdzZXNzaW9uJwotICAgICAgQXBwLmluamVjdCgnY29udHJvbGxlcicsICdzZXNzaW9uJywgJ3Nl
c3Npb246bWFpbicpOwotICAgICAgIEFwcC5JbmRleENvbnRyb2xsZXIgPSBFbWJlci5Db250cm9s
bGVyLmV4dGVuZCh7Ci0gICAgICAgIGlzTG9nZ2VkSW46IEVtYmVyLmNvbXB1dGVkLmFsaWFzKCdz
ZXNzaW9uLmlzQXV0aGVudGljYXRlZCcpCi0gICAgICB9KTsKLSAgICAgIGBgYAotICAgICAgIElu
amVjdGlvbnMgY2FuIGFsc28gYmUgcGVyZm9ybWVkIG9uIHNwZWNpZmljIGZhY3Rvcmllcy4KLSAg
ICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICBBcHAuaW5qZWN0KDxmdWxsX25hbWUgb3IgdHlwZT4s
IDxwcm9wZXJ0eSBuYW1lPiwgPGZ1bGxfbmFtZT4pCi0gICAgICBBcHAuaW5qZWN0KCdyb3V0ZScs
ICdzb3VyY2UnLCAnc291cmNlOm1haW4nKQotICAgICAgQXBwLmluamVjdCgncm91dGU6YXBwbGlj
YXRpb24nLCAnZW1haWwnLCAnbW9kZWw6ZW1haWwnKQotICAgICAgYGBgCi0gICAgICAgSXQgaXMg
aW1wb3J0YW50IHRvIG5vdGUgdGhhdCBpbmplY3Rpb25zIGNhbiBvbmx5IGJlIHBlcmZvcm1lZCBv
bgotICAgICAgY2xhc3NlcyB0aGF0IGFyZSBpbnN0YW50aWF0ZWQgYnkgRW1iZXIgaXRzZWxmLiBJ
bnN0YW50aWF0aW5nIGEgY2xhc3MKLSAgICAgIGRpcmVjdGx5ICh2aWEgYGNyZWF0ZWAgb3IgYG5l
d2ApIGJ5cGFzc2VzIHRoZSBkZXBlbmRlbmN5IGluamVjdGlvbgotICAgICAgc3lzdGVtLgotICAg
ICAgICoqTm90ZToqKiBFbWJlci1EYXRhIGluc3RhbnRpYXRlcyBpdHMgbW9kZWxzIGluIGEgdW5p
cXVlIG1hbm5lciwgYW5kIGNvbnNlcXVlbnRseQotICAgICAgaW5qZWN0aW9ucyBvbnRvIG1vZGVs
cyAob3IgYWxsIG1vZGVscykgd2lsbCBub3Qgd29yayBhcyBleHBlY3RlZC4gSW5qZWN0aW9ucwot
ICAgICAgb24gbW9kZWxzIGNhbiBiZSBlbmFibGVkIGJ5IHNldHRpbmcgYEVtYmVyLk1PREVMX0ZB
Q1RPUllfSU5KRUNUSU9OU2AKLSAgICAgIHRvIGB0cnVlYC4KLSAgICAgICBAcHVibGljCi0gICAg
ICBAbWV0aG9kIGluamVjdAotICAgICAgQHBhcmFtICBmYWN0b3J5TmFtZU9yVHlwZSB7U3RyaW5n
fQotICAgICAgQHBhcmFtICBwcm9wZXJ0eSB7U3RyaW5nfQotICAgICAgQHBhcmFtICBpbmplY3Rp
b25OYW1lIHtTdHJpbmd9Ci0gICAgKiovCi0gICAgaW5qZWN0OiByZWdpc3RyeUFsaWFzKCdpbmpl
Y3Rpb24nKQotICB9KTsKLQotICBmdW5jdGlvbiByZWdpc3RyeUFsaWFzKG5hbWUpIHsKLSAgICBy
ZXR1cm4gZnVuY3Rpb24gKCkgewotICAgICAgdmFyIF9yZWdpc3RyeV9fOwotCi0gICAgICByZXR1
cm4gKF9yZWdpc3RyeV9fID0gdGhpcy5fX3JlZ2lzdHJ5X18pW25hbWVdLmFwcGx5KF9yZWdpc3Ry
eV9fLCBhcmd1bWVudHMpOwotICAgIH07Ci0gIH0KLQotICBmdW5jdGlvbiBidWlsZEZha2VSZWdp
c3RyeVdpdGhEZXByZWNhdGlvbnMoaW5zdGFuY2UsIHR5cGVGb3JNZXNzYWdlKSB7Ci0gICAgdmFy
IGZha2VSZWdpc3RyeSA9IHt9OwotICAgIHZhciByZWdpc3RyeVByb3BzID0gewotICAgICAgcmVz
b2x2ZTogJ3Jlc29sdmVSZWdpc3RyYXRpb24nLAotICAgICAgcmVnaXN0ZXI6ICdyZWdpc3Rlcics
Ci0gICAgICB1bnJlZ2lzdGVyOiAndW5yZWdpc3RlcicsCi0gICAgICBoYXM6ICdoYXNSZWdpc3Ry
YXRpb24nLAotICAgICAgb3B0aW9uOiAncmVnaXN0ZXJPcHRpb24nLAotICAgICAgb3B0aW9uczog
J3JlZ2lzdGVyT3B0aW9ucycsCi0gICAgICBnZXRPcHRpb25zOiAncmVnaXN0ZXJlZE9wdGlvbnMn
LAotICAgICAgb3B0aW9uc0ZvclR5cGU6ICdyZWdpc3Rlck9wdGlvbnNGb3JUeXBlJywKLSAgICAg
IGdldE9wdGlvbnNGb3JUeXBlOiAncmVnaXN0ZXJlZE9wdGlvbnNGb3JUeXBlJywKLSAgICAgIGlu
amVjdGlvbjogJ2luamVjdCcKLSAgICB9OwotCi0gICAgZm9yICh2YXIgZGVwcmVjYXRlZFByb3Bl
cnR5IGluIHJlZ2lzdHJ5UHJvcHMpIHsKLSAgICAgIGZha2VSZWdpc3RyeVtkZXByZWNhdGVkUHJv
cGVydHldID0gYnVpbGRGYWtlUmVnaXN0cnlGdW5jdGlvbihpbnN0YW5jZSwgdHlwZUZvck1lc3Nh
Z2UsIGRlcHJlY2F0ZWRQcm9wZXJ0eSwgcmVnaXN0cnlQcm9wc1tkZXByZWNhdGVkUHJvcGVydHld
KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFrZVJlZ2lzdHJ5OwotICB9Ci0KLSAgZnVuY3Rpb24g
YnVpbGRGYWtlUmVnaXN0cnlGdW5jdGlvbihpbnN0YW5jZSwgdHlwZUZvck1lc3NhZ2UsIGRlcHJl
Y2F0ZWRQcm9wZXJ0eSwgbm9uRGVwcmVjYXRlZFByb3BlcnR5KSB7Ci0gICAgcmV0dXJuIGZ1bmN0
aW9uICgpIHsKLSAgICAgIF9lbWJlck1ldGFsRGVidWcuZGVwcmVjYXRlKCdVc2luZyBgJyArIHR5
cGVGb3JNZXNzYWdlICsgJy5yZWdpc3RyeS4nICsgZGVwcmVjYXRlZFByb3BlcnR5ICsgJ2AgaXMg
ZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSBgJyArIHR5cGVGb3JNZXNzYWdlICsgJy4nICsgbm9uRGVw
cmVjYXRlZFByb3BlcnR5ICsgJ2AgaW5zdGVhZC4nLCBmYWxzZSwgewotICAgICAgICBpZDogJ2Vt
YmVyLWFwcGxpY2F0aW9uLmFwcC1pbnN0YW5jZS1yZWdpc3RyeScsCi0gICAgICAgIHVudGlsOiAn
My4wLjAnLAotICAgICAgICB1cmw6ICdodHRwOi8vZW1iZXJqcy5jb20vZGVwcmVjYXRpb25zL3Yy
LngvI3RvY19lbWJlci1hcHBsaWNhdGlvbi1yZWdpc3RyeS1lbWJlci1hcHBsaWNhdGlvbmluc3Rh
bmNlLXJlZ2lzdHJ5JwotICAgICAgfSk7Ci0gICAgICByZXR1cm4gaW5zdGFuY2Vbbm9uRGVwcmVj
YXRlZFByb3BlcnR5XS5hcHBseShpbnN0YW5jZSwgYXJndW1lbnRzKTsKLSAgICB9OwotICB9Ci19
KTsKLWVuaWZlZCgnZW1iZXItcnVudGltZS9taXhpbnMvdGFyZ2V0X2FjdGlvbl9zdXBwb3J0Jywg
WydleHBvcnRzJywgJ2VtYmVyLW1ldGFsL2NvcmUnLCAnZW1iZXItbWV0YWwvZGVidWcnLCAnZW1i
ZXItbWV0YWwvcHJvcGVydHlfZ2V0JywgJ2VtYmVyLW1ldGFsL21peGluJywgJ2VtYmVyLW1ldGFs
L2NvbXB1dGVkJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbENvcmUsIF9lbWJlck1l
dGFsRGVidWcsIF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LCBfZW1iZXJNZXRhbE1peGluLCBfZW1i
ZXJNZXRhbENvbXB1dGVkKSB7Ci0gIC8qKgotICBAbW9kdWxlIGVtYmVyCi0gIEBzdWJtb2R1bGUg
ZW1iZXItcnVudGltZQotICAqLwotCi0gICd1c2Ugc3RyaWN0JzsKLQotICAvKioKLSAgYEVtYmVy
LlRhcmdldEFjdGlvblN1cHBvcnRgIGlzIGEgbWl4aW4gdGhhdCBjYW4gYmUgaW5jbHVkZWQgaW4g
YSBjbGFzcwotICB0byBhZGQgYSBgdHJpZ2dlckFjdGlvbmAgbWV0aG9kIHdpdGggc2VtYW50aWNz
IHNpbWlsYXIgdG8gdGhlIEhhbmRsZWJhcnMKLSAgYHt7YWN0aW9ufX1gIGhlbHBlci4gSW4gbm9y
bWFsIEVtYmVyIHVzYWdlLCB0aGUgYHt7YWN0aW9ufX1gIGhlbHBlciBpcwotICB1c3VhbGx5IHRo
ZSBiZXN0IGNob2ljZS4gVGhpcyBtaXhpbiBpcyBtb3N0IG9mdGVuIHVzZWZ1bCB3aGVuIHlvdSBh
cmUKLSAgZG9pbmcgbW9yZSBjb21wbGV4IGV2ZW50IGhhbmRsaW5nIGluIFZpZXcgb2JqZWN0cy4K
LSAgCi0gIFNlZSBhbHNvIGBFbWJlci5WaWV3VGFyZ2V0QWN0aW9uU3VwcG9ydGAsIHdoaWNoIGhh
cwotICB2aWV3LWF3YXJlIGRlZmF1bHRzIGZvciB0YXJnZXQgYW5kIGFjdGlvbkNvbnRleHQuCi0g
IAotICBAY2xhc3MgVGFyZ2V0QWN0aW9uU3VwcG9ydAotICBAbmFtZXNwYWNlIEVtYmVyCi0gIEBl
eHRlbmRzIEVtYmVyLk1peGluCi0gIEBwcml2YXRlCi0gICovCi0gIHZhciBUYXJnZXRBY3Rpb25T
dXBwb3J0ID0gX2VtYmVyTWV0YWxNaXhpbi5NaXhpbi5jcmVhdGUoewotICAgIHRhcmdldDogbnVs
bCwKLSAgICBhY3Rpb246IG51bGwsCi0gICAgYWN0aW9uQ29udGV4dDogbnVsbCwKLQotICAgIHRh
cmdldE9iamVjdDogX2VtYmVyTWV0YWxDb21wdXRlZC5jb21wdXRlZCgndGFyZ2V0JywgZnVuY3Rp
b24gKCkgewotICAgICAgaWYgKHRoaXMuX3RhcmdldE9iamVjdCkgewotICAgICAgICByZXR1cm4g
dGhpcy5fdGFyZ2V0T2JqZWN0OwotICAgICAgfQotCi0gICAgICB2YXIgdGFyZ2V0ID0gX2VtYmVy
TWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsICd0YXJnZXQnKTsKLQotICAgICAgaWYgKHR5cGVv
ZiB0YXJnZXQgPT09ICdzdHJpbmcnKSB7Ci0gICAgICAgIHZhciB2YWx1ZSA9IF9lbWJlck1ldGFs
UHJvcGVydHlfZ2V0LmdldCh0aGlzLCB0YXJnZXQpOwotICAgICAgICBpZiAodmFsdWUgPT09IHVu
ZGVmaW5lZCkgewotICAgICAgICAgIHZhbHVlID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0
KF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0Lmxvb2t1cCwgdGFyZ2V0KTsKLSAgICAgICAgfQotCi0g
ICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVybiB0YXJn
ZXQ7Ci0gICAgICB9Ci0gICAgfSksCi0KLSAgICBhY3Rpb25Db250ZXh0T2JqZWN0OiBfZW1iZXJN
ZXRhbENvbXB1dGVkLmNvbXB1dGVkKGZ1bmN0aW9uICgpIHsKLSAgICAgIHZhciBhY3Rpb25Db250
ZXh0ID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsICdhY3Rpb25Db250ZXh0Jyk7
Ci0KLSAgICAgIGlmICh0eXBlb2YgYWN0aW9uQ29udGV4dCA9PT0gJ3N0cmluZycpIHsKLSAgICAg
ICAgdmFyIHZhbHVlID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsIGFjdGlvbkNv
bnRleHQpOwotICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgewotICAgICAgICAgIHZh
bHVlID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0
Lmxvb2t1cCwgYWN0aW9uQ29udGV4dCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHZhbHVl
OwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJuIGFjdGlvbkNvbnRleHQ7Ci0gICAgICB9
Ci0gICAgfSkucHJvcGVydHkoJ2FjdGlvbkNvbnRleHQnKSwKLQotICAgIC8qKgotICAgIFNlbmQg
YW4gYGFjdGlvbmAgd2l0aCBhbiBgYWN0aW9uQ29udGV4dGAgdG8gYSBgdGFyZ2V0YC4gVGhlIGFj
dGlvbiwgYWN0aW9uQ29udGV4dAotICAgIGFuZCB0YXJnZXQgd2lsbCBiZSByZXRyaWV2ZWQgZnJv
bSBwcm9wZXJ0aWVzIG9mIHRoZSBvYmplY3QuIEZvciBleGFtcGxlOgotICAgICBgYGBqYXZhc2Ny
aXB0Ci0gICAgQXBwLlNhdmVCdXR0b25WaWV3ID0gRW1iZXIuVmlldy5leHRlbmQoRW1iZXIuVGFy
Z2V0QWN0aW9uU3VwcG9ydCwgewotICAgICAgdGFyZ2V0OiBFbWJlci5jb21wdXRlZC5hbGlhcygn
Y29udHJvbGxlcicpLAotICAgICAgYWN0aW9uOiAnc2F2ZScsCi0gICAgICBhY3Rpb25Db250ZXh0
OiBFbWJlci5jb21wdXRlZC5hbGlhcygnY29udGV4dCcpLAotICAgICAgY2xpY2s6IGZ1bmN0aW9u
KCkgewotICAgICAgICB0aGlzLnRyaWdnZXJBY3Rpb24oKTsgLy8gU2VuZHMgdGhlIGBzYXZlYCBh
Y3Rpb24sIGFsb25nIHdpdGggdGhlIGN1cnJlbnQgY29udGV4dAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gdG8gdGhlIGN1cnJlbnQgY29udHJvbGxlcgotICAgICAgfQotICAgIH0p
OwotICAgIGBgYAotICAgICBUaGUgYHRhcmdldGAsIGBhY3Rpb25gLCBhbmQgYGFjdGlvbkNvbnRl
eHRgIGNhbiBiZSBwcm92aWRlZCBhcyBwcm9wZXJ0aWVzIG9mCi0gICAgYW4gb3B0aW9uYWwgb2Jq
ZWN0IGFyZ3VtZW50IHRvIGB0cmlnZ2VyQWN0aW9uYCBhcyB3ZWxsLgotICAgICBgYGBqYXZhc2Ny
aXB0Ci0gICAgQXBwLlNhdmVCdXR0b25WaWV3ID0gRW1iZXIuVmlldy5leHRlbmQoRW1iZXIuVGFy
Z2V0QWN0aW9uU3VwcG9ydCwgewotICAgICAgY2xpY2s6IGZ1bmN0aW9uKCkgewotICAgICAgICB0
aGlzLnRyaWdnZXJBY3Rpb24oewotICAgICAgICAgIGFjdGlvbjogJ3NhdmUnLAotICAgICAgICAg
IHRhcmdldDogdGhpcy5nZXQoJ2NvbnRyb2xsZXInKSwKLSAgICAgICAgICBhY3Rpb25Db250ZXh0
OiB0aGlzLmdldCgnY29udGV4dCcpCi0gICAgICAgIH0pOyAvLyBTZW5kcyB0aGUgYHNhdmVgIGFj
dGlvbiwgYWxvbmcgd2l0aCB0aGUgY3VycmVudCBjb250ZXh0Ci0gICAgICAgICAgICAvLyB0byB0
aGUgY3VycmVudCBjb250cm9sbGVyCi0gICAgICB9Ci0gICAgfSk7Ci0gICAgYGBgCi0gICAgIFRo
ZSBgYWN0aW9uQ29udGV4dGAgZGVmYXVsdHMgdG8gdGhlIG9iamVjdCB5b3UgYXJlIG1peGluZyBg
VGFyZ2V0QWN0aW9uU3VwcG9ydGAgaW50by4KLSAgICBCdXQgYHRhcmdldGAgYW5kIGBhY3Rpb25g
IG11c3QgYmUgc3BlY2lmaWVkIGVpdGhlciBhcyBwcm9wZXJ0aWVzIG9yIHdpdGggdGhlIGFyZ3Vt
ZW50Ci0gICAgdG8gYHRyaWdnZXJBY3Rpb25gLCBvciBhIGNvbWJpbmF0aW9uOgotICAgICBgYGBq
YXZhc2NyaXB0Ci0gICAgQXBwLlNhdmVCdXR0b25WaWV3ID0gRW1iZXIuVmlldy5leHRlbmQoRW1i
ZXIuVGFyZ2V0QWN0aW9uU3VwcG9ydCwgewotICAgICAgdGFyZ2V0OiBFbWJlci5jb21wdXRlZC5h
bGlhcygnY29udHJvbGxlcicpLAotICAgICAgY2xpY2s6IGZ1bmN0aW9uKCkgewotICAgICAgICB0
aGlzLnRyaWdnZXJBY3Rpb24oewotICAgICAgICAgIGFjdGlvbjogJ3NhdmUnCi0gICAgICAgIH0p
OyAvLyBTZW5kcyB0aGUgYHNhdmVgIGFjdGlvbiwgYWxvbmcgd2l0aCBhIHJlZmVyZW5jZSB0byBg
dGhpc2AsCi0gICAgICAgICAgICAvLyB0byB0aGUgY3VycmVudCBjb250cm9sbGVyCi0gICAgICB9
Ci0gICAgfSk7Ci0gICAgYGBgCi0gICAgIEBtZXRob2QgdHJpZ2dlckFjdGlvbgotICAgIEBwYXJh
bSBvcHRzIHtPYmplY3R9IChvcHRpb25hbCwgd2l0aCB0aGUgb3B0aW9uYWwga2V5cyBhY3Rpb24s
IHRhcmdldCBhbmQvb3IgYWN0aW9uQ29udGV4dCkKLSAgICBAcmV0dXJuIHtCb29sZWFufSB0cnVl
IGlmIHRoZSBhY3Rpb24gd2FzIHNlbnQgc3VjY2Vzc2Z1bGx5IGFuZCBkaWQgbm90IHJldHVybiBm
YWxzZQotICAgIEBwcml2YXRlCi0gICAgKi8KLSAgICB0cmlnZ2VyQWN0aW9uOiBmdW5jdGlvbiAo
KSB7Ci0gICAgICB2YXIgb3B0cyA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMCB8fCBhcmd1bWVudHNb
MF0gPT09IHVuZGVmaW5lZCA/IHt9IDogYXJndW1lbnRzWzBdOwotCi0gICAgICB2YXIgYWN0aW9u
ID0gb3B0cy5hY3Rpb24gfHwgX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsICdhY3Rp
b24nKTsKLSAgICAgIHZhciB0YXJnZXQgPSBvcHRzLnRhcmdldCB8fCBfZW1iZXJNZXRhbFByb3Bl
cnR5X2dldC5nZXQodGhpcywgJ3RhcmdldE9iamVjdCcpOwotICAgICAgdmFyIGFjdGlvbkNvbnRl
eHQgPSBvcHRzLmFjdGlvbkNvbnRleHQ7Ci0KLSAgICAgIGZ1bmN0aW9uIGFyZ3Mob3B0aW9ucywg
YWN0aW9uTmFtZSkgewotICAgICAgICB2YXIgcmV0ID0gW107Ci0gICAgICAgIGlmIChhY3Rpb25O
YW1lKSB7Ci0gICAgICAgICAgcmV0LnB1c2goYWN0aW9uTmFtZSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICByZXR1cm4gcmV0LmNvbmNhdChvcHRpb25zKTsKLSAgICAgIH0KLQotICAgICAgaWYgKHR5
cGVvZiBhY3Rpb25Db250ZXh0ID09PSAndW5kZWZpbmVkJykgewotICAgICAgICBhY3Rpb25Db250
ZXh0ID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsICdhY3Rpb25Db250ZXh0T2Jq
ZWN0JykgfHwgdGhpczsKLSAgICAgIH0KLQotICAgICAgaWYgKHRhcmdldCAmJiBhY3Rpb24pIHsK
LSAgICAgICAgdmFyIHJldDsKLQotICAgICAgICBpZiAodGFyZ2V0LnNlbmQpIHsKLSAgICAgICAg
ICByZXQgPSB0YXJnZXQuc2VuZC5hcHBseSh0YXJnZXQsIGFyZ3MoYWN0aW9uQ29udGV4dCwgYWN0
aW9uKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3Nl
cnQoJ1RoZSBhY3Rpb24gXCcnICsgYWN0aW9uICsgJ1wnIGRpZCBub3QgZXhpc3Qgb24gJyArIHRh
cmdldCwgdHlwZW9mIHRhcmdldFthY3Rpb25dID09PSAnZnVuY3Rpb24nKTsKLSAgICAgICAgICBy
ZXQgPSB0YXJnZXRbYWN0aW9uXS5hcHBseSh0YXJnZXQsIGFyZ3MoYWN0aW9uQ29udGV4dCkpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHJldCAhPT0gZmFsc2UpIHsKLSAgICAgICAgICByZXQg
PSB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHJldDsKLSAgICAgIH0gZWxzZSB7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICB9Ci0gIH0pOwotCi0gIGV4cG9y
dHMuZGVmYXVsdCA9IFRhcmdldEFjdGlvblN1cHBvcnQ7Ci19KTsKLS8vIEVtYmVyLmxvb2t1cAot
ZW5pZmVkKCJlbWJlci1ydW50aW1lL3N0cmluZ19yZWdpc3RyeSIsIFsiZXhwb3J0cyJdLCBmdW5j
dGlvbiAoZXhwb3J0cykgewotICAvLyBTVEFURSB3aXRoaW4gYSBtb2R1bGUgaXMgZnJvd25lZCBh
cG9uLCB0aGlzIGV4aXN0cwotICAvLyB0byBzdXBwb3J0IEVtYmVyLlNUUklOR1MgYnV0IHNoaWVs
ZCBlbWJlciBpbnRlcm5hbHMgZnJvbSB0aGlzIGxlZ2FjeSBnbG9iYWwKLSAgLy8gQVBJLgotICAi
dXNlIHN0cmljdCI7Ci0KLSAgZXhwb3J0cy5zZXRTdHJpbmdzID0gc2V0U3RyaW5nczsKLSAgZXhw
b3J0cy5nZXRTdHJpbmdzID0gZ2V0U3RyaW5nczsKLSAgZXhwb3J0cy5nZXQgPSBnZXQ7Ci0gIHZh
ciBTVFJJTkdTID0ge307Ci0KLSAgZnVuY3Rpb24gc2V0U3RyaW5ncyhzdHJpbmdzKSB7Ci0gICAg
U1RSSU5HUyA9IHN0cmluZ3M7Ci0gIH0KLQotICBmdW5jdGlvbiBnZXRTdHJpbmdzKCkgewotICAg
IHJldHVybiBTVFJJTkdTOwotICB9Ci0KLSAgZnVuY3Rpb24gZ2V0KG5hbWUpIHsKLSAgICByZXR1
cm4gU1RSSU5HU1tuYW1lXTsKLSAgfQotfSk7Ci1lbmlmZWQoJ2VtYmVyLXJ1bnRpbWUvc3lzdGVt
L2FwcGxpY2F0aW9uJywgWydleHBvcnRzJywgJ2VtYmVyLXJ1bnRpbWUvc3lzdGVtL25hbWVzcGFj
ZSddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyUnVudGltZVN5c3RlbU5hbWVzcGFjZSkgewot
ICAndXNlIHN0cmljdCc7Ci0KLSAgZXhwb3J0cy5kZWZhdWx0ID0gX2VtYmVyUnVudGltZVN5c3Rl
bU5hbWVzcGFjZS5kZWZhdWx0LmV4dGVuZCgpOwotfSk7Ci1lbmlmZWQoJ2VtYmVyLXJ1bnRpbWUv
c3lzdGVtL2FycmF5X3Byb3h5JywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFsL2RlYnVnJywgJ2Vt
YmVyLW1ldGFsL3Byb3BlcnR5X2dldCcsICdlbWJlci1ydW50aW1lL3V0aWxzJywgJ2VtYmVyLW1l
dGFsL2NvbXB1dGVkJywgJ2VtYmVyLW1ldGFsL21peGluJywgJ2VtYmVyLW1ldGFsL3Byb3BlcnR5
X2V2ZW50cycsICdlbWJlci1tZXRhbC9lcnJvcicsICdlbWJlci1ydW50aW1lL3N5c3RlbS9vYmpl
Y3QnLCAnZW1iZXItcnVudGltZS9taXhpbnMvbXV0YWJsZV9hcnJheScsICdlbWJlci1ydW50aW1l
L21peGlucy9lbnVtZXJhYmxlJywgJ2VtYmVyLW1ldGFsL2FsaWFzJywgJ2VtYmVyLXJ1bnRpbWUv
bWl4aW5zL2FycmF5J10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbERlYnVnLCBfZW1i
ZXJNZXRhbFByb3BlcnR5X2dldCwgX2VtYmVyUnVudGltZVV0aWxzLCBfZW1iZXJNZXRhbENvbXB1
dGVkLCBfZW1iZXJNZXRhbE1peGluLCBfZW1iZXJNZXRhbFByb3BlcnR5X2V2ZW50cywgX2VtYmVy
TWV0YWxFcnJvciwgX2VtYmVyUnVudGltZVN5c3RlbU9iamVjdCwgX2VtYmVyUnVudGltZU1peGlu
c011dGFibGVfYXJyYXksIF9lbWJlclJ1bnRpbWVNaXhpbnNFbnVtZXJhYmxlLCBfZW1iZXJNZXRh
bEFsaWFzLCBfZW1iZXJSdW50aW1lTWl4aW5zQXJyYXkpIHsKLSAgJ3VzZSBzdHJpY3QnOwotCi0g
IC8qKgotICBAbW9kdWxlIGVtYmVyCi0gIEBzdWJtb2R1bGUgZW1iZXItcnVudGltZQotICAqLwot
Ci0gIHZhciBPVVRfT0ZfUkFOR0VfRVhDRVBUSU9OID0gJ0luZGV4IG91dCBvZiByYW5nZSc7Ci0g
IHZhciBFTVBUWSA9IFtdOwotCi0gIGZ1bmN0aW9uIEsoKSB7Ci0gICAgcmV0dXJuIHRoaXM7Ci0g
IH0KLQotICAvKioKLSAgICBBbiBBcnJheVByb3h5IHdyYXBzIGFueSBvdGhlciBvYmplY3QgdGhh
dCBpbXBsZW1lbnRzIGBFbWJlci5BcnJheWAgYW5kL29yCi0gICAgYEVtYmVyLk11dGFibGVBcnJh
eSxgIGZvcndhcmRpbmcgYWxsIHJlcXVlc3RzLiBUaGlzIG1ha2VzIGl0IHZlcnkgdXNlZnVsIGZv
cgotICAgIGEgbnVtYmVyIG9mIGJpbmRpbmcgdXNlIGNhc2VzIG9yIG90aGVyIGNhc2VzIHdoZXJl
IGJlaW5nIGFibGUgdG8gc3dhcAotICAgIG91dCB0aGUgdW5kZXJseWluZyBhcnJheSBpcyB1c2Vm
dWwuCi0gIAotICAgIEEgc2ltcGxlIGV4YW1wbGUgb2YgdXNhZ2U6Ci0gIAotICAgIGBgYGphdmFz
Y3JpcHQKLSAgICB2YXIgcGV0cyA9IFsnZG9nJywgJ2NhdCcsICdmaXNoJ107Ci0gICAgdmFyIGFw
ID0gRW1iZXIuQXJyYXlQcm94eS5jcmVhdGUoeyBjb250ZW50OiBFbWJlci5BKHBldHMpIH0pOwot
ICAKLSAgICBhcC5nZXQoJ2ZpcnN0T2JqZWN0Jyk7ICAgICAgICAgICAgICAgICAgICAgICAgLy8g
J2RvZycKLSAgICBhcC5zZXQoJ2NvbnRlbnQnLCBbJ2Ftb2ViYScsICdwYXJhbWVjaXVtJ10pOwot
ICAgIGFwLmdldCgnZmlyc3RPYmplY3QnKTsgICAgICAgICAgICAgICAgICAgICAgICAvLyAnYW1v
ZWJhJwotICAgIGBgYAotICAKLSAgICBUaGlzIGNsYXNzIGNhbiBhbHNvIGJlIHVzZWZ1bCBhcyBh
IGxheWVyIHRvIHRyYW5zZm9ybSB0aGUgY29udGVudHMgb2YKLSAgICBhbiBhcnJheSwgYXMgdGhl
eSBhcmUgYWNjZXNzZWQuIFRoaXMgY2FuIGJlIGRvbmUgYnkgb3ZlcnJpZGluZwotICAgIGBvYmpl
Y3RBdENvbnRlbnRgOgotICAKLSAgICBgYGBqYXZhc2NyaXB0Ci0gICAgdmFyIHBldHMgPSBbJ2Rv
ZycsICdjYXQnLCAnZmlzaCddOwotICAgIHZhciBhcCA9IEVtYmVyLkFycmF5UHJveHkuY3JlYXRl
KHsKLSAgICAgICAgY29udGVudDogRW1iZXIuQShwZXRzKSwKLSAgICAgICAgb2JqZWN0QXRDb250
ZW50OiBmdW5jdGlvbihpZHgpIHsKLSAgICAgICAgICAgIHJldHVybiB0aGlzLmdldCgnY29udGVu
dCcpLm9iamVjdEF0KGlkeCkudG9VcHBlckNhc2UoKTsKLSAgICAgICAgfQotICAgIH0pOwotICAK
LSAgICBhcC5nZXQoJ2ZpcnN0T2JqZWN0Jyk7IC8vIC4gJ0RPRycKLSAgICBgYGAKLSAgCi0gICAg
QGNsYXNzIEFycmF5UHJveHkKLSAgICBAbmFtZXNwYWNlIEVtYmVyCi0gICAgQGV4dGVuZHMgRW1i
ZXIuT2JqZWN0Ci0gICAgQHVzZXMgRW1iZXIuTXV0YWJsZUFycmF5Ci0gICAgQHB1YmxpYwotICAq
LwotICB2YXIgQXJyYXlQcm94eSA9IF9lbWJlclJ1bnRpbWVTeXN0ZW1PYmplY3QuZGVmYXVsdC5l
eHRlbmQoX2VtYmVyUnVudGltZU1peGluc011dGFibGVfYXJyYXkuZGVmYXVsdCwgewotCi0gICAg
LyoqCi0gICAgICBUaGUgY29udGVudCBhcnJheS4gTXVzdCBiZSBhbiBvYmplY3QgdGhhdCBpbXBs
ZW1lbnRzIGBFbWJlci5BcnJheWAgYW5kL29yCi0gICAgICBgRW1iZXIuTXV0YWJsZUFycmF5LmAK
LSAgICAgICBAcHJvcGVydHkgY29udGVudAotICAgICAgQHR5cGUgRW1iZXIuQXJyYXkKLSAgICAg
IEBwcml2YXRlCi0gICAgKi8KLSAgICBjb250ZW50OiBudWxsLAotCi0gICAgLyoqCi0gICAgIFRo
ZSBhcnJheSB0aGF0IHRoZSBwcm94eSBwcmV0ZW5kcyB0byBiZS4gSW4gdGhlIGRlZmF1bHQgYEFy
cmF5UHJveHlgCi0gICAgIGltcGxlbWVudGF0aW9uLCB0aGlzIGFuZCBgY29udGVudGAgYXJlIHRo
ZSBzYW1lLiBTdWJjbGFzc2VzIG9mIGBBcnJheVByb3h5YAotICAgICBjYW4gb3ZlcnJpZGUgdGhp
cyBwcm9wZXJ0eSB0byBwcm92aWRlIHRoaW5ncyBsaWtlIHNvcnRpbmcgYW5kIGZpbHRlcmluZy4K
LSAgICAgIEBwcm9wZXJ0eSBhcnJhbmdlZENvbnRlbnQKLSAgICAgQHByaXZhdGUKLSAgICAqLwot
ICAgIGFycmFuZ2VkQ29udGVudDogX2VtYmVyTWV0YWxBbGlhcy5kZWZhdWx0KCdjb250ZW50Jyks
Ci0KLSAgICAvKioKLSAgICAgIFNob3VsZCBhY3R1YWxseSByZXRyaWV2ZSB0aGUgb2JqZWN0IGF0
IHRoZSBzcGVjaWZpZWQgaW5kZXggZnJvbSB0aGUKLSAgICAgIGNvbnRlbnQuIFlvdSBjYW4gb3Zl
cnJpZGUgdGhpcyBtZXRob2QgaW4gc3ViY2xhc3NlcyB0byB0cmFuc2Zvcm0gdGhlCi0gICAgICBj
b250ZW50IGl0ZW0gdG8gc29tZXRoaW5nIG5ldy4KLSAgICAgICBUaGlzIG1ldGhvZCB3aWxsIG9u
bHkgYmUgY2FsbGVkIGlmIGNvbnRlbnQgaXMgbm9uLWBudWxsYC4KLSAgICAgICBAbWV0aG9kIG9i
amVjdEF0Q29udGVudAotICAgICAgQHBhcmFtIHtOdW1iZXJ9IGlkeCBUaGUgaW5kZXggdG8gcmV0
cmlldmUuCi0gICAgICBAcmV0dXJuIHtPYmplY3R9IHRoZSB2YWx1ZSBvciB1bmRlZmluZWQgaWYg
bm9uZSBmb3VuZAotICAgICAgQHByaXZhdGUKLSAgICAqLwotICAgIG9iamVjdEF0Q29udGVudDog
ZnVuY3Rpb24gKGlkeCkgewotICAgICAgcmV0dXJuIF9lbWJlclJ1bnRpbWVNaXhpbnNBcnJheS5v
YmplY3RBdChfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywgJ2FycmFuZ2VkQ29udGVu
dCcpLCBpZHgpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgIFNob3VsZCBhY3R1YWxseSByZXBs
YWNlIHRoZSBzcGVjaWZpZWQgb2JqZWN0cyBvbiB0aGUgY29udGVudCBhcnJheS4KLSAgICAgIFlv
dSBjYW4gb3ZlcnJpZGUgdGhpcyBtZXRob2QgaW4gc3ViY2xhc3NlcyB0byB0cmFuc2Zvcm0gdGhl
IGNvbnRlbnQgaXRlbQotICAgICAgaW50byBzb21ldGhpbmcgbmV3LgotICAgICAgIFRoaXMgbWV0
aG9kIHdpbGwgb25seSBiZSBjYWxsZWQgaWYgY29udGVudCBpcyBub24tYG51bGxgLgotICAgICAg
IEBtZXRob2QgcmVwbGFjZUNvbnRlbnQKLSAgICAgIEBwYXJhbSB7TnVtYmVyfSBpZHggVGhlIHN0
YXJ0aW5nIGluZGV4Ci0gICAgICBAcGFyYW0ge051bWJlcn0gYW10IFRoZSBudW1iZXIgb2YgaXRl
bXMgdG8gcmVtb3ZlIGZyb20gdGhlIGNvbnRlbnQuCi0gICAgICBAcGFyYW0ge0FycmF5fSBvYmpl
Y3RzIE9wdGlvbmFsIGFycmF5IG9mIG9iamVjdHMgdG8gaW5zZXJ0IG9yIG51bGwgaWYgbm8KLSAg
ICAgICAgb2JqZWN0cy4KLSAgICAgIEByZXR1cm4ge3ZvaWR9Ci0gICAgICBAcHJpdmF0ZQotICAg
ICovCi0gICAgcmVwbGFjZUNvbnRlbnQ6IGZ1bmN0aW9uIChpZHgsIGFtdCwgb2JqZWN0cykgewot
ICAgICAgX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsICdjb250ZW50JykucmVwbGFj
ZShpZHgsIGFtdCwgb2JqZWN0cyk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAgSW52b2tlZCB3
aGVuIHRoZSBjb250ZW50IHByb3BlcnR5IGlzIGFib3V0IHRvIGNoYW5nZS4gTm90aWZpZXMgb2Jz
ZXJ2ZXJzIHRoYXQgdGhlCi0gICAgICBlbnRpcmUgYXJyYXkgY29udGVudCB3aWxsIGNoYW5nZS4K
LSAgICAgICBAcHJpdmF0ZQotICAgICAgQG1ldGhvZCBfY29udGVudFdpbGxDaGFuZ2UKLSAgICAq
LwotICAgIF9jb250ZW50V2lsbENoYW5nZTogX2VtYmVyTWV0YWxNaXhpbi5fYmVmb3JlT2JzZXJ2
ZXIoJ2NvbnRlbnQnLCBmdW5jdGlvbiAoKSB7Ci0gICAgICB0aGlzLl90ZWFyZG93bkNvbnRlbnQo
KTsKLSAgICB9KSwKLQotICAgIF90ZWFyZG93bkNvbnRlbnQ6IGZ1bmN0aW9uICgpIHsKLSAgICAg
IHZhciBjb250ZW50ID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsICdjb250ZW50
Jyk7Ci0KLSAgICAgIGlmIChjb250ZW50KSB7Ci0gICAgICAgIF9lbWJlclJ1bnRpbWVNaXhpbnNB
cnJheS5yZW1vdmVBcnJheU9ic2VydmVyKGNvbnRlbnQsIHRoaXMsIHsKLSAgICAgICAgICB3aWxs
Q2hhbmdlOiAnY29udGVudEFycmF5V2lsbENoYW5nZScsCi0gICAgICAgICAgZGlkQ2hhbmdlOiAn
Y29udGVudEFycmF5RGlkQ2hhbmdlJwotICAgICAgICB9KTsKLSAgICAgIH0KLSAgICB9LAotCi0g
ICAgLyoqCi0gICAgICBPdmVycmlkZSB0byBpbXBsZW1lbnQgY29udGVudCBhcnJheSBgd2lsbENo
YW5nZWAgb2JzZXJ2ZXIuCi0gICAgICAgQG1ldGhvZCBjb250ZW50QXJyYXlXaWxsQ2hhbmdlCi0g
ICAgICAgQHBhcmFtIHtFbWJlci5BcnJheX0gY29udGVudEFycmF5IHRoZSBjb250ZW50IGFycmF5
Ci0gICAgICBAcGFyYW0ge051bWJlcn0gc3RhcnQgc3RhcnRpbmcgaW5kZXggb2YgdGhlIGNoYW5n
ZQotICAgICAgQHBhcmFtIHtOdW1iZXJ9IHJlbW92ZUNvdW50IGNvdW50IG9mIGl0ZW1zIHJlbW92
ZWQKLSAgICAgIEBwYXJhbSB7TnVtYmVyfSBhZGRDb3VudCBjb3VudCBvZiBpdGVtcyBhZGRlZAot
ICAgICAgQHByaXZhdGUKLSAgICAqLwotICAgIGNvbnRlbnRBcnJheVdpbGxDaGFuZ2U6IEssCi0g
ICAgLyoqCi0gICAgICBPdmVycmlkZSB0byBpbXBsZW1lbnQgY29udGVudCBhcnJheSBgZGlkQ2hh
bmdlYCBvYnNlcnZlci4KLSAgICAgICBAbWV0aG9kIGNvbnRlbnRBcnJheURpZENoYW5nZQotICAg
ICAgIEBwYXJhbSB7RW1iZXIuQXJyYXl9IGNvbnRlbnRBcnJheSB0aGUgY29udGVudCBhcnJheQot
ICAgICAgQHBhcmFtIHtOdW1iZXJ9IHN0YXJ0IHN0YXJ0aW5nIGluZGV4IG9mIHRoZSBjaGFuZ2UK
LSAgICAgIEBwYXJhbSB7TnVtYmVyfSByZW1vdmVDb3VudCBjb3VudCBvZiBpdGVtcyByZW1vdmVk
Ci0gICAgICBAcGFyYW0ge051bWJlcn0gYWRkQ291bnQgY291bnQgb2YgaXRlbXMgYWRkZWQKLSAg
ICAgIEBwcml2YXRlCi0gICAgKi8KLSAgICBjb250ZW50QXJyYXlEaWRDaGFuZ2U6IEssCi0KLSAg
ICAvKioKLSAgICAgIEludm9rZWQgd2hlbiB0aGUgY29udGVudCBwcm9wZXJ0eSBjaGFuZ2VzLiBO
b3RpZmllcyBvYnNlcnZlcnMgdGhhdCB0aGUKLSAgICAgIGVudGlyZSBhcnJheSBjb250ZW50IGhh
cyBjaGFuZ2VkLgotICAgICAgIEBwcml2YXRlCi0gICAgICBAbWV0aG9kIF9jb250ZW50RGlkQ2hh
bmdlCi0gICAgKi8KLSAgICBfY29udGVudERpZENoYW5nZTogX2VtYmVyTWV0YWxNaXhpbi5vYnNl
cnZlcignY29udGVudCcsIGZ1bmN0aW9uICgpIHsKLSAgICAgIHZhciBjb250ZW50ID0gX2VtYmVy
TWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsICdjb250ZW50Jyk7Ci0KLSAgICAgIF9lbWJlck1l
dGFsRGVidWcuYXNzZXJ0KCdDYW5cJ3Qgc2V0IEFycmF5UHJveHlcJ3MgY29udGVudCB0byBpdHNl
bGYnLCBjb250ZW50ICE9PSB0aGlzKTsKLQotICAgICAgdGhpcy5fc2V0dXBDb250ZW50KCk7Ci0g
ICAgfSksCi0KLSAgICBfc2V0dXBDb250ZW50OiBmdW5jdGlvbiAoKSB7Ci0gICAgICB2YXIgY29u
dGVudCA9IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0aGlzLCAnY29udGVudCcpOwotCi0g
ICAgICBpZiAoY29udGVudCkgewotICAgICAgICBfZW1iZXJNZXRhbERlYnVnLmFzc2VydCgnQXJy
YXlQcm94eSBleHBlY3RzIGFuIEFycmF5IG9yIEVtYmVyLkFycmF5UHJveHksIGJ1dCB5b3UgcGFz
c2VkICcgKyB0eXBlb2YgY29udGVudCwgX2VtYmVyUnVudGltZVV0aWxzLmlzQXJyYXkoY29udGVu
dCkgfHwgY29udGVudC5pc0Rlc3Ryb3llZCk7Ci0KLSAgICAgICAgX2VtYmVyUnVudGltZU1peGlu
c0FycmF5LmFkZEFycmF5T2JzZXJ2ZXIoY29udGVudCwgdGhpcywgewotICAgICAgICAgIHdpbGxD
aGFuZ2U6ICdjb250ZW50QXJyYXlXaWxsQ2hhbmdlJywKLSAgICAgICAgICBkaWRDaGFuZ2U6ICdj
b250ZW50QXJyYXlEaWRDaGFuZ2UnCi0gICAgICAgIH0pOwotICAgICAgfQotICAgIH0sCi0KLSAg
ICBfYXJyYW5nZWRDb250ZW50V2lsbENoYW5nZTogX2VtYmVyTWV0YWxNaXhpbi5fYmVmb3JlT2Jz
ZXJ2ZXIoJ2FycmFuZ2VkQ29udGVudCcsIGZ1bmN0aW9uICgpIHsKLSAgICAgIHZhciBhcnJhbmdl
ZENvbnRlbnQgPSBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywgJ2FycmFuZ2VkQ29u
dGVudCcpOwotICAgICAgdmFyIGxlbiA9IGFycmFuZ2VkQ29udGVudCA/IF9lbWJlck1ldGFsUHJv
cGVydHlfZ2V0LmdldChhcnJhbmdlZENvbnRlbnQsICdsZW5ndGgnKSA6IDA7Ci0KLSAgICAgIHRo
aXMuYXJyYW5nZWRDb250ZW50QXJyYXlXaWxsQ2hhbmdlKHRoaXMsIDAsIGxlbiwgdW5kZWZpbmVk
KTsKLSAgICAgIHRoaXMuYXJyYW5nZWRDb250ZW50V2lsbENoYW5nZSh0aGlzKTsKLQotICAgICAg
dGhpcy5fdGVhcmRvd25BcnJhbmdlZENvbnRlbnQoYXJyYW5nZWRDb250ZW50KTsKLSAgICB9KSwK
LQotICAgIF9hcnJhbmdlZENvbnRlbnREaWRDaGFuZ2U6IF9lbWJlck1ldGFsTWl4aW4ub2JzZXJ2
ZXIoJ2FycmFuZ2VkQ29udGVudCcsIGZ1bmN0aW9uICgpIHsKLSAgICAgIHZhciBhcnJhbmdlZENv
bnRlbnQgPSBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywgJ2FycmFuZ2VkQ29udGVu
dCcpOwotICAgICAgdmFyIGxlbiA9IGFycmFuZ2VkQ29udGVudCA/IF9lbWJlck1ldGFsUHJvcGVy
dHlfZ2V0LmdldChhcnJhbmdlZENvbnRlbnQsICdsZW5ndGgnKSA6IDA7Ci0KLSAgICAgIF9lbWJl
ck1ldGFsRGVidWcuYXNzZXJ0KCdDYW5cJ3Qgc2V0IEFycmF5UHJveHlcJ3MgY29udGVudCB0byBp
dHNlbGYnLCBhcnJhbmdlZENvbnRlbnQgIT09IHRoaXMpOwotCi0gICAgICB0aGlzLl9zZXR1cEFy
cmFuZ2VkQ29udGVudCgpOwotCi0gICAgICB0aGlzLmFycmFuZ2VkQ29udGVudERpZENoYW5nZSh0
aGlzKTsKLSAgICAgIHRoaXMuYXJyYW5nZWRDb250ZW50QXJyYXlEaWRDaGFuZ2UodGhpcywgMCwg
dW5kZWZpbmVkLCBsZW4pOwotICAgIH0pLAotCi0gICAgX3NldHVwQXJyYW5nZWRDb250ZW50OiBm
dW5jdGlvbiAoKSB7Ci0gICAgICB2YXIgYXJyYW5nZWRDb250ZW50ID0gX2VtYmVyTWV0YWxQcm9w
ZXJ0eV9nZXQuZ2V0KHRoaXMsICdhcnJhbmdlZENvbnRlbnQnKTsKLQotICAgICAgaWYgKGFycmFu
Z2VkQ29udGVudCkgewotICAgICAgICBfZW1iZXJNZXRhbERlYnVnLmFzc2VydCgnQXJyYXlQcm94
eSBleHBlY3RzIGFuIEFycmF5IG9yIEVtYmVyLkFycmF5UHJveHksIGJ1dCB5b3UgcGFzc2VkICcg
KyB0eXBlb2YgYXJyYW5nZWRDb250ZW50LCBfZW1iZXJSdW50aW1lVXRpbHMuaXNBcnJheShhcnJh
bmdlZENvbnRlbnQpIHx8IGFycmFuZ2VkQ29udGVudC5pc0Rlc3Ryb3llZCk7Ci0KLSAgICAgICAg
X2VtYmVyUnVudGltZU1peGluc0FycmF5LmFkZEFycmF5T2JzZXJ2ZXIoYXJyYW5nZWRDb250ZW50
LCB0aGlzLCB7Ci0gICAgICAgICAgd2lsbENoYW5nZTogJ2FycmFuZ2VkQ29udGVudEFycmF5V2ls
bENoYW5nZScsCi0gICAgICAgICAgZGlkQ2hhbmdlOiAnYXJyYW5nZWRDb250ZW50QXJyYXlEaWRD
aGFuZ2UnCi0gICAgICAgIH0pOwotICAgICAgfQotICAgIH0sCi0KLSAgICBfdGVhcmRvd25BcnJh
bmdlZENvbnRlbnQ6IGZ1bmN0aW9uICgpIHsKLSAgICAgIHZhciBhcnJhbmdlZENvbnRlbnQgPSBf
ZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywgJ2FycmFuZ2VkQ29udGVudCcpOwotCi0g
ICAgICBpZiAoYXJyYW5nZWRDb250ZW50KSB7Ci0gICAgICAgIF9lbWJlclJ1bnRpbWVNaXhpbnNB
cnJheS5yZW1vdmVBcnJheU9ic2VydmVyKGFycmFuZ2VkQ29udGVudCwgdGhpcywgewotICAgICAg
ICAgIHdpbGxDaGFuZ2U6ICdhcnJhbmdlZENvbnRlbnRBcnJheVdpbGxDaGFuZ2UnLAotICAgICAg
ICAgIGRpZENoYW5nZTogJ2FycmFuZ2VkQ29udGVudEFycmF5RGlkQ2hhbmdlJwotICAgICAgICB9
KTsKLSAgICAgIH0KLSAgICB9LAotCi0gICAgYXJyYW5nZWRDb250ZW50V2lsbENoYW5nZTogSywK
LSAgICBhcnJhbmdlZENvbnRlbnREaWRDaGFuZ2U6IEssCi0KLSAgICBvYmplY3RBdDogZnVuY3Rp
b24gKGlkeCkgewotICAgICAgcmV0dXJuIF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0aGlz
LCAnY29udGVudCcpICYmIHRoaXMub2JqZWN0QXRDb250ZW50KGlkeCk7Ci0gICAgfSwKLQotICAg
IGxlbmd0aDogX2VtYmVyTWV0YWxDb21wdXRlZC5jb21wdXRlZChmdW5jdGlvbiAoKSB7Ci0gICAg
ICB2YXIgYXJyYW5nZWRDb250ZW50ID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMs
ICdhcnJhbmdlZENvbnRlbnQnKTsKLSAgICAgIHJldHVybiBhcnJhbmdlZENvbnRlbnQgPyBfZW1i
ZXJNZXRhbFByb3BlcnR5X2dldC5nZXQoYXJyYW5nZWRDb250ZW50LCAnbGVuZ3RoJykgOiAwOwot
ICAgICAgLy8gTm8gZGVwZW5kZW5jaWVzIHNpbmNlIEVudW1lcmFibGUgbm90aWZpZXMgbGVuZ3Ro
IG9mIGNoYW5nZQotICAgIH0pLAotCi0gICAgX3JlcGxhY2U6IGZ1bmN0aW9uIChpZHgsIGFtdCwg
b2JqZWN0cykgewotICAgICAgdmFyIGNvbnRlbnQgPSBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5n
ZXQodGhpcywgJ2NvbnRlbnQnKTsKLSAgICAgIF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0KCdUaGUg
Y29udGVudCBwcm9wZXJ0eSBvZiAnICsgdGhpcy5jb25zdHJ1Y3RvciArICcgc2hvdWxkIGJlIHNl
dCBiZWZvcmUgbW9kaWZ5aW5nIGl0JywgY29udGVudCk7Ci0gICAgICBpZiAoY29udGVudCkgewot
ICAgICAgICB0aGlzLnJlcGxhY2VDb250ZW50KGlkeCwgYW10LCBvYmplY3RzKTsKLSAgICAgIH0K
LQotICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgfSwKLQotICAgIHJlcGxhY2U6IGZ1bmN0aW9uICgp
IHsKLSAgICAgIGlmIChfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywgJ2FycmFuZ2Vk
Q29udGVudCcpID09PSBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywgJ2NvbnRlbnQn
KSkgewotICAgICAgICB0aGlzLl9yZXBsYWNlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7Ci0gICAg
ICB9IGVsc2UgewotICAgICAgICB0aHJvdyBuZXcgX2VtYmVyTWV0YWxFcnJvci5kZWZhdWx0KCdV
c2luZyByZXBsYWNlIG9uIGFuIGFycmFuZ2VkIEFycmF5UHJveHkgaXMgbm90IGFsbG93ZWQuJyk7
Ci0gICAgICB9Ci0gICAgfSwKLQotICAgIF9pbnNlcnRBdDogZnVuY3Rpb24gKGlkeCwgb2JqZWN0
KSB7Ci0gICAgICBpZiAoaWR4ID4gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsICdj
b250ZW50Lmxlbmd0aCcpKSB7Ci0gICAgICAgIHRocm93IG5ldyBfZW1iZXJNZXRhbEVycm9yLmRl
ZmF1bHQoT1VUX09GX1JBTkdFX0VYQ0VQVElPTik7Ci0gICAgICB9Ci0KLSAgICAgIHRoaXMuX3Jl
cGxhY2UoaWR4LCAwLCBbb2JqZWN0XSk7Ci0gICAgICByZXR1cm4gdGhpczsKLSAgICB9LAotCi0g
ICAgaW5zZXJ0QXQ6IGZ1bmN0aW9uIChpZHgsIG9iamVjdCkgewotICAgICAgaWYgKF9lbWJlck1l
dGFsUHJvcGVydHlfZ2V0LmdldCh0aGlzLCAnYXJyYW5nZWRDb250ZW50JykgPT09IF9lbWJlck1l
dGFsUHJvcGVydHlfZ2V0LmdldCh0aGlzLCAnY29udGVudCcpKSB7Ci0gICAgICAgIHJldHVybiB0
aGlzLl9pbnNlcnRBdChpZHgsIG9iamVjdCk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICB0aHJv
dyBuZXcgX2VtYmVyTWV0YWxFcnJvci5kZWZhdWx0KCdVc2luZyBpbnNlcnRBdCBvbiBhbiBhcnJh
bmdlZCBBcnJheVByb3h5IGlzIG5vdCBhbGxvd2VkLicpOwotICAgICAgfQotICAgIH0sCi0KLSAg
ICByZW1vdmVBdDogZnVuY3Rpb24gKHN0YXJ0LCBsZW4pIHsKLSAgICAgIGlmICgnbnVtYmVyJyA9
PT0gdHlwZW9mIHN0YXJ0KSB7Ci0gICAgICAgIHZhciBjb250ZW50ID0gX2VtYmVyTWV0YWxQcm9w
ZXJ0eV9nZXQuZ2V0KHRoaXMsICdjb250ZW50Jyk7Ci0gICAgICAgIHZhciBhcnJhbmdlZENvbnRl
bnQgPSBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywgJ2FycmFuZ2VkQ29udGVudCcp
OwotICAgICAgICB2YXIgaW5kaWNlcyA9IFtdOwotICAgICAgICB2YXIgaTsKLQotICAgICAgICBp
ZiAoc3RhcnQgPCAwIHx8IHN0YXJ0ID49IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0aGlz
LCAnbGVuZ3RoJykpIHsKLSAgICAgICAgICB0aHJvdyBuZXcgX2VtYmVyTWV0YWxFcnJvci5kZWZh
dWx0KE9VVF9PRl9SQU5HRV9FWENFUFRJT04pOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGxl
biA9PT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgICAgbGVuID0gMTsKLSAgICAgICAgfQotCi0gICAg
ICAgIC8vIEdldCBhIGxpc3Qgb2YgaW5kaWNlcyBpbiBvcmlnaW5hbCBjb250ZW50IHRvIHJlbW92
ZQotICAgICAgICBmb3IgKGkgPSBzdGFydDsgaSA8IHN0YXJ0ICsgbGVuOyBpKyspIHsKLSAgICAg
ICAgICAvLyBVc2UgYXJyYW5nZWRDb250ZW50IGhlcmUgc28gd2UgYXZvaWQgY29uZnVzaW9uIHdp
dGggb2JqZWN0cyB0cmFuc2Zvcm1lZCBieSBvYmplY3RBdENvbnRlbnQKLSAgICAgICAgICBpbmRp
Y2VzLnB1c2goY29udGVudC5pbmRleE9mKF9lbWJlclJ1bnRpbWVNaXhpbnNBcnJheS5vYmplY3RB
dChhcnJhbmdlZENvbnRlbnQsIGkpKSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBSZXBsYWNl
IGluIHJldmVyc2Ugb3JkZXIgc2luY2UgaW5kaWNlcyB3aWxsIGNoYW5nZQotICAgICAgICBpbmRp
Y2VzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsKLSAgICAgICAgICByZXR1cm4gYiAtIGE7Ci0gICAg
ICAgIH0pOwotCi0gICAgICAgIF9lbWJlck1ldGFsUHJvcGVydHlfZXZlbnRzLmJlZ2luUHJvcGVy
dHlDaGFuZ2VzKCk7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBpbmRpY2VzLmxlbmd0aDsgaSsr
KSB7Ci0gICAgICAgICAgdGhpcy5fcmVwbGFjZShpbmRpY2VzW2ldLCAxLCBFTVBUWSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgX2VtYmVyTWV0YWxQcm9wZXJ0eV9ldmVudHMuZW5kUHJvcGVydHlDaGFu
Z2VzKCk7Ci0gICAgICB9Ci0KLSAgICAgIHJldHVybiB0aGlzOwotICAgIH0sCi0KLSAgICBwdXNo
T2JqZWN0OiBmdW5jdGlvbiAob2JqKSB7Ci0gICAgICB0aGlzLl9pbnNlcnRBdChfZW1iZXJNZXRh
bFByb3BlcnR5X2dldC5nZXQodGhpcywgJ2NvbnRlbnQubGVuZ3RoJyksIG9iaik7Ci0gICAgICBy
ZXR1cm4gb2JqOwotICAgIH0sCi0KLSAgICBwdXNoT2JqZWN0czogZnVuY3Rpb24gKG9iamVjdHMp
IHsKLSAgICAgIGlmICghKF9lbWJlclJ1bnRpbWVNaXhpbnNFbnVtZXJhYmxlLmRlZmF1bHQuZGV0
ZWN0KG9iamVjdHMpIHx8IF9lbWJlclJ1bnRpbWVVdGlscy5pc0FycmF5KG9iamVjdHMpKSkgewot
ICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdNdXN0IHBhc3MgRW1iZXIuRW51bWVyYWJsZSB0
byBFbWJlci5NdXRhYmxlQXJyYXkjcHVzaE9iamVjdHMnKTsKLSAgICAgIH0KLSAgICAgIHRoaXMu
X3JlcGxhY2UoX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsICdsZW5ndGgnKSwgMCwg
b2JqZWN0cyk7Ci0gICAgICByZXR1cm4gdGhpczsKLSAgICB9LAotCi0gICAgc2V0T2JqZWN0czog
ZnVuY3Rpb24gKG9iamVjdHMpIHsKLSAgICAgIGlmIChvYmplY3RzLmxlbmd0aCA9PT0gMCkgewot
ICAgICAgICByZXR1cm4gdGhpcy5jbGVhcigpOwotICAgICAgfQotCi0gICAgICB2YXIgbGVuID0g
X2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsICdsZW5ndGgnKTsKLSAgICAgIHRoaXMu
X3JlcGxhY2UoMCwgbGVuLCBvYmplY3RzKTsKLSAgICAgIHJldHVybiB0aGlzOwotICAgIH0sCi0K
LSAgICB1bnNoaWZ0T2JqZWN0OiBmdW5jdGlvbiAob2JqKSB7Ci0gICAgICB0aGlzLl9pbnNlcnRB
dCgwLCBvYmopOwotICAgICAgcmV0dXJuIG9iajsKLSAgICB9LAotCi0gICAgdW5zaGlmdE9iamVj
dHM6IGZ1bmN0aW9uIChvYmplY3RzKSB7Ci0gICAgICB0aGlzLl9yZXBsYWNlKDAsIDAsIG9iamVj
dHMpOwotICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgfSwKLQotICAgIHNsaWNlOiBmdW5jdGlvbiAo
KSB7Ci0gICAgICB2YXIgYXJyID0gdGhpcy50b0FycmF5KCk7Ci0gICAgICByZXR1cm4gYXJyLnNs
aWNlLmFwcGx5KGFyciwgYXJndW1lbnRzKTsKLSAgICB9LAotCi0gICAgYXJyYW5nZWRDb250ZW50
QXJyYXlXaWxsQ2hhbmdlOiBmdW5jdGlvbiAoaXRlbSwgaWR4LCByZW1vdmVkQ250LCBhZGRlZENu
dCkgewotICAgICAgdGhpcy5hcnJheUNvbnRlbnRXaWxsQ2hhbmdlKGlkeCwgcmVtb3ZlZENudCwg
YWRkZWRDbnQpOwotICAgIH0sCi0KLSAgICBhcnJhbmdlZENvbnRlbnRBcnJheURpZENoYW5nZTog
ZnVuY3Rpb24gKGl0ZW0sIGlkeCwgcmVtb3ZlZENudCwgYWRkZWRDbnQpIHsKLSAgICAgIHRoaXMu
YXJyYXlDb250ZW50RGlkQ2hhbmdlKGlkeCwgcmVtb3ZlZENudCwgYWRkZWRDbnQpOwotICAgIH0s
Ci0KLSAgICBpbml0OiBmdW5jdGlvbiAoKSB7Ci0gICAgICB0aGlzLl9zdXBlci5hcHBseSh0aGlz
LCBhcmd1bWVudHMpOwotICAgICAgdGhpcy5fc2V0dXBDb250ZW50KCk7Ci0gICAgICB0aGlzLl9z
ZXR1cEFycmFuZ2VkQ29udGVudCgpOwotICAgIH0sCi0KLSAgICB3aWxsRGVzdHJveTogZnVuY3Rp
b24gKCkgewotICAgICAgdGhpcy5fdGVhcmRvd25BcnJhbmdlZENvbnRlbnQoKTsKLSAgICAgIHRo
aXMuX3RlYXJkb3duQ29udGVudCgpOwotICAgIH0KLSAgfSk7Ci0KLSAgZXhwb3J0cy5kZWZhdWx0
ID0gQXJyYXlQcm94eTsKLX0pOwotZW5pZmVkKCdlbWJlci1ydW50aW1lL3N5c3RlbS9jb250YWlu
ZXInLCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwvcHJvcGVydHlfc2V0JywgJ2NvbnRhaW5lci9y
ZWdpc3RyeScsICdjb250YWluZXIvY29udGFpbmVyJywgJ2NvbnRhaW5lci9vd25lciddLCBmdW5j
dGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0YWxQcm9wZXJ0eV9zZXQsIF9jb250YWluZXJSZWdpc3Ry
eSwgX2NvbnRhaW5lckNvbnRhaW5lciwgX2NvbnRhaW5lck93bmVyKSB7Ci0gICd1c2Ugc3RyaWN0
JzsKLQotICBfY29udGFpbmVyUmVnaXN0cnkuZGVmYXVsdC5zZXQgPSBfZW1iZXJNZXRhbFByb3Bl
cnR5X3NldC5zZXQ7Ci0gIF9jb250YWluZXJDb250YWluZXIuZGVmYXVsdC5zZXQgPSBfZW1iZXJN
ZXRhbFByb3BlcnR5X3NldC5zZXQ7Ci0KLSAgZXhwb3J0cy5SZWdpc3RyeSA9IF9jb250YWluZXJS
ZWdpc3RyeS5kZWZhdWx0OwotICBleHBvcnRzLkNvbnRhaW5lciA9IF9jb250YWluZXJDb250YWlu
ZXIuZGVmYXVsdDsKLSAgZXhwb3J0cy5nZXRPd25lciA9IF9jb250YWluZXJPd25lci5nZXRPd25l
cjsKLSAgZXhwb3J0cy5zZXRPd25lciA9IF9jb250YWluZXJPd25lci5zZXRPd25lcjsKLX0pOwot
ZW5pZmVkKCdlbWJlci1ydW50aW1lL3N5c3RlbS9jb3JlX29iamVjdCcsIFsnZXhwb3J0cycsICdl
bWJlci1tZXRhbC9kZWJ1ZycsICdlbWJlci1tZXRhbC9mZWF0dXJlcycsICdlbWJlci1tZXRhbC9h
c3NpZ24nLCAnZW1iZXItbWV0YWwvcHJvcGVydHlfZ2V0JywgJ2VtYmVyLW1ldGFsL3V0aWxzJywg
J2VtYmVyLW1ldGFsL21ldGEnLCAnZW1iZXItbWV0YWwvY2hhaW5zJywgJ2VtYmVyLW1ldGFsL2V2
ZW50cycsICdlbWJlci1tZXRhbC9taXhpbicsICdlbWJlci1tZXRhbC9lcnJvcicsICdlbWJlci1y
dW50aW1lL21peGlucy9hY3Rpb25faGFuZGxlcicsICdlbWJlci1tZXRhbC9wcm9wZXJ0aWVzJywg
J2VtYmVyLW1ldGFsL2JpbmRpbmcnLCAnZW1iZXItbWV0YWwvY29tcHV0ZWQnLCAnZW1iZXItbWV0
YWwvaW5qZWN0ZWRfcHJvcGVydHknLCAnZW1iZXItbWV0YWwvcnVuX2xvb3AnLCAnZW1iZXItbWV0
YWwvd2F0Y2hpbmcnLCAnZW1iZXItbWV0YWwvY29yZScsICdlbWJlci1ydW50aW1lL2luamVjdCcs
ICdlbWJlci1tZXRhbC9zeW1ib2wnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1ldGFsRGVi
dWcsIF9lbWJlck1ldGFsRmVhdHVyZXMsIF9lbWJlck1ldGFsQXNzaWduLCBfZW1iZXJNZXRhbFBy
b3BlcnR5X2dldCwgX2VtYmVyTWV0YWxVdGlscywgX2VtYmVyTWV0YWxNZXRhLCBfZW1iZXJNZXRh
bENoYWlucywgX2VtYmVyTWV0YWxFdmVudHMsIF9lbWJlck1ldGFsTWl4aW4sIF9lbWJlck1ldGFs
RXJyb3IsIF9lbWJlclJ1bnRpbWVNaXhpbnNBY3Rpb25faGFuZGxlciwgX2VtYmVyTWV0YWxQcm9w
ZXJ0aWVzLCBfZW1iZXJNZXRhbEJpbmRpbmcsIF9lbWJlck1ldGFsQ29tcHV0ZWQsIF9lbWJlck1l
dGFsSW5qZWN0ZWRfcHJvcGVydHksIF9lbWJlck1ldGFsUnVuX2xvb3AsIF9lbWJlck1ldGFsV2F0
Y2hpbmcsIF9lbWJlck1ldGFsQ29yZSwgX2VtYmVyUnVudGltZUluamVjdCwgX2VtYmVyTWV0YWxT
eW1ib2wpIHsKLSAgJ25vIHVzZSBzdHJpY3QnOwotICAvLyBSZW1vdmUgInVzZSBzdHJpY3QiOyBm
cm9tIHRyYW5zcGlsZWQgbW9kdWxlIHVudGlsCi0gIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMzgwMzggaXMgZml4ZWQKLQotICAvKioKLSAgICBAbW9kdWxlIGVt
YmVyCi0gICAgQHN1Ym1vZHVsZSBlbWJlci1ydW50aW1lCi0gICovCi0KLSAgLy8gdXNpbmcgZW1i
ZXItbWV0YWwvbGliL21haW4gaGVyZSB0byBlbnN1cmUgdGhhdCBlbWJlci1kZWJ1ZyBpcyBzZXR1
cAotICAvLyBpZiBwcmVzZW50Ci0KLSAgdmFyIF9NaXhpbiRjcmVhdGU7Ci0KLSAgdmFyIFBPU1Rf
SU5JVCA9IF9lbWJlck1ldGFsU3ltYm9sLmRlZmF1bHQoJ1BPU1RfSU5JVCcpOwotICBleHBvcnRz
LlBPU1RfSU5JVCA9IFBPU1RfSU5JVDsKLSAgdmFyIHNjaGVkdWxlID0gX2VtYmVyTWV0YWxSdW5f
bG9vcC5kZWZhdWx0LnNjaGVkdWxlOwotICB2YXIgYXBwbHlNaXhpbiA9IF9lbWJlck1ldGFsTWl4
aW4uTWl4aW4uX2FwcGx5OwotICB2YXIgZmluaXNoUGFydGlhbCA9IF9lbWJlck1ldGFsTWl4aW4u
TWl4aW4uZmluaXNoUGFydGlhbDsKLSAgdmFyIHJlb3BlbiA9IF9lbWJlck1ldGFsTWl4aW4uTWl4
aW4ucHJvdG90eXBlLnJlb3BlbjsKLSAgdmFyIGhhc0NhY2hlZENvbXB1dGVkUHJvcGVydGllcyA9
IGZhbHNlOwotCi0gIGZ1bmN0aW9uIG1ha2VDdG9yKCkgewotICAgIC8vIE5vdGU6IGF2b2lkIGFj
Y2Vzc2luZyBhbnkgcHJvcGVydGllcyBvbiB0aGUgb2JqZWN0IHNpbmNlIGl0IG1ha2VzIHRoZQot
ICAgIC8vIG1ldGhvZCBhIGxvdCBmYXN0ZXIuIFRoaXMgaXMgZ2x1ZSBjb2RlIHNvIHdlIHdhbnQg
aXQgdG8gYmUgYXMgZmFzdCBhcwotICAgIC8vIHBvc3NpYmxlLgotCi0gICAgdmFyIHdhc0FwcGxp
ZWQgPSBmYWxzZTsKLSAgICB2YXIgaW5pdFByb3BlcnRpZXM7Ci0KLSAgICB2YXIgQ2xhc3MgPSBm
dW5jdGlvbiAoKSB7Ci0gICAgICBpZiAoIXdhc0FwcGxpZWQpIHsKLSAgICAgICAgQ2xhc3MucHJv
dG8oKTsgLy8gcHJlcGFyZSBwcm90b3R5cGUuLi4KLSAgICAgIH0KLQotICAgICAgaWYgKGFyZ3Vt
ZW50cy5sZW5ndGggPiAwKSB7Ci0gICAgICAgIGluaXRQcm9wZXJ0aWVzID0gW2FyZ3VtZW50c1sw
XV07Ci0gICAgICB9Ci0KLSAgICAgIHRoaXMuX19kZWZpbmVOb25FbnVtZXJhYmxlKF9lbWJlck1l
dGFsVXRpbHMuR1VJRF9LRVlfUFJPUEVSVFkpOwotICAgICAgdmFyIG0gPSBfZW1iZXJNZXRhbE1l
dGEubWV0YSh0aGlzKTsKLSAgICAgIHZhciBwcm90byA9IG0ucHJvdG87Ci0gICAgICBtLnByb3Rv
ID0gdGhpczsKLSAgICAgIGlmIChpbml0UHJvcGVydGllcykgewotICAgICAgICAvLyBjYXB0dXJl
IGxvY2FsbHkgc28gd2UgY2FuIGNsZWFyIHRoZSBjbG9zZWQgb3ZlciB2YXJpYWJsZQotICAgICAg
ICB2YXIgcHJvcHMgPSBpbml0UHJvcGVydGllczsKLSAgICAgICAgaW5pdFByb3BlcnRpZXMgPSBu
dWxsOwotCi0gICAgICAgIHZhciBjb25jYXRlbmF0ZWRQcm9wZXJ0aWVzID0gdGhpcy5jb25jYXRl
bmF0ZWRQcm9wZXJ0aWVzOwotICAgICAgICB2YXIgbWVyZ2VkUHJvcGVydGllcyA9IHRoaXMubWVy
Z2VkUHJvcGVydGllczsKLQotICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IHByb3BzLmxlbmd0
aDsgaSA8IGw7IGkrKykgewotICAgICAgICAgIHZhciBwcm9wZXJ0aWVzID0gcHJvcHNbaV07Ci0K
LSAgICAgICAgICBfZW1iZXJNZXRhbERlYnVnLmFzc2VydCgnRW1iZXIuT2JqZWN0LmNyZWF0ZSBu
byBsb25nZXIgc3VwcG9ydHMgbWl4aW5nIGluIG90aGVyICcgKyAnZGVmaW5pdGlvbnMsIHVzZSAu
ZXh0ZW5kICYgLmNyZWF0ZSBzZXBhcmF0ZWx5IGluc3RlYWQuJywgIShwcm9wZXJ0aWVzIGluc3Rh
bmNlb2YgX2VtYmVyTWV0YWxNaXhpbi5NaXhpbikpOwotCi0gICAgICAgICAgaWYgKHR5cGVvZiBw
cm9wZXJ0aWVzICE9PSAnb2JqZWN0JyAmJiBwcm9wZXJ0aWVzICE9PSB1bmRlZmluZWQpIHsKLSAg
ICAgICAgICAgIHRocm93IG5ldyBfZW1iZXJNZXRhbEVycm9yLmRlZmF1bHQoJ0VtYmVyLk9iamVj
dC5jcmVhdGUgb25seSBhY2NlcHRzIG9iamVjdHMuJyk7Ci0gICAgICAgICAgfQotCi0gICAgICAg
ICAgaWYgKCFwcm9wZXJ0aWVzKSB7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICB9
Ci0KLSAgICAgICAgICB2YXIga2V5TmFtZXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKTsKLQot
ICAgICAgICAgIGZvciAodmFyIGogPSAwLCBsbCA9IGtleU5hbWVzLmxlbmd0aDsgaiA8IGxsOyBq
KyspIHsKLSAgICAgICAgICAgIHZhciBrZXlOYW1lID0ga2V5TmFtZXNbal07Ci0gICAgICAgICAg
ICB2YXIgdmFsdWUgPSBwcm9wZXJ0aWVzW2tleU5hbWVdOwotCi0gICAgICAgICAgICBpZiAoX2Vt
YmVyTWV0YWxNaXhpbi5JU19CSU5ESU5HLnRlc3Qoa2V5TmFtZSkpIHsKLSAgICAgICAgICAgICAg
bS53cml0ZUJpbmRpbmdzKGtleU5hbWUsIHZhbHVlKTsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgdmFyIHBvc3NpYmxlRGVzYyA9IHRoaXNba2V5TmFtZV07Ci0gICAgICAgICAgICB2YXIg
ZGVzYyA9IHBvc3NpYmxlRGVzYyAhPT0gbnVsbCAmJiB0eXBlb2YgcG9zc2libGVEZXNjID09PSAn
b2JqZWN0JyAmJiBwb3NzaWJsZURlc2MuaXNEZXNjcmlwdG9yID8gcG9zc2libGVEZXNjIDogdW5k
ZWZpbmVkOwotCi0gICAgICAgICAgICBfZW1iZXJNZXRhbERlYnVnLmFzc2VydCgnRW1iZXIuT2Jq
ZWN0LmNyZWF0ZSBubyBsb25nZXIgc3VwcG9ydHMgZGVmaW5pbmcgY29tcHV0ZWQgJyArICdwcm9w
ZXJ0aWVzLiBEZWZpbmUgY29tcHV0ZWQgcHJvcGVydGllcyB1c2luZyBleHRlbmQoKSBvciByZW9w
ZW4oKSAnICsgJ2JlZm9yZSBjYWxsaW5nIGNyZWF0ZSgpLicsICEodmFsdWUgaW5zdGFuY2VvZiBf
ZW1iZXJNZXRhbENvbXB1dGVkLkNvbXB1dGVkUHJvcGVydHkpKTsKLSAgICAgICAgICAgIF9lbWJl
ck1ldGFsRGVidWcuYXNzZXJ0KCdFbWJlci5PYmplY3QuY3JlYXRlIG5vIGxvbmdlciBzdXBwb3J0
cyBkZWZpbmluZyBtZXRob2RzIHRoYXQgY2FsbCBfc3VwZXIuJywgISh0eXBlb2YgdmFsdWUgPT09
ICdmdW5jdGlvbicgJiYgdmFsdWUudG9TdHJpbmcoKS5pbmRleE9mKCcuX3N1cGVyJykgIT09IC0x
KSk7Ci0gICAgICAgICAgICBfZW1iZXJNZXRhbERlYnVnLmFzc2VydCgnYGFjdGlvbnNgIG11c3Qg
YmUgcHJvdmlkZWQgYXQgZXh0ZW5kIHRpbWUsIG5vdCBhdCBjcmVhdGUgdGltZSwgJyArICd3aGVu
IEVtYmVyLkFjdGlvbkhhbmRsZXIgaXMgdXNlZCAoaS5lLiB2aWV3cywgY29udHJvbGxlcnMgJiBy
b3V0ZXMpLicsICEoa2V5TmFtZSA9PT0gJ2FjdGlvbnMnICYmIF9lbWJlclJ1bnRpbWVNaXhpbnNB
Y3Rpb25faGFuZGxlci5kZWZhdWx0LmRldGVjdCh0aGlzKSkpOwotCi0gICAgICAgICAgICBpZiAo
Y29uY2F0ZW5hdGVkUHJvcGVydGllcyAmJiBjb25jYXRlbmF0ZWRQcm9wZXJ0aWVzLmxlbmd0aCA+
IDAgJiYgY29uY2F0ZW5hdGVkUHJvcGVydGllcy5pbmRleE9mKGtleU5hbWUpID49IDApIHsKLSAg
ICAgICAgICAgICAgdmFyIGJhc2VWYWx1ZSA9IHRoaXNba2V5TmFtZV07Ci0KLSAgICAgICAgICAg
ICAgaWYgKGJhc2VWYWx1ZSkgewotICAgICAgICAgICAgICAgIGlmICgnZnVuY3Rpb24nID09PSB0
eXBlb2YgYmFzZVZhbHVlLmNvbmNhdCkgewotICAgICAgICAgICAgICAgICAgdmFsdWUgPSBiYXNl
VmFsdWUuY29uY2F0KHZhbHVlKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgICAgdmFsdWUgPSBfZW1iZXJNZXRhbFV0aWxzLm1ha2VBcnJheShiYXNlVmFsdWUpLmNv
bmNhdCh2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgIHZhbHVlID0gX2VtYmVyTWV0YWxVdGlscy5tYWtlQXJyYXkodmFsdWUp
OwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChtZXJn
ZWRQcm9wZXJ0aWVzICYmIG1lcmdlZFByb3BlcnRpZXMubGVuZ3RoICYmIG1lcmdlZFByb3BlcnRp
ZXMuaW5kZXhPZihrZXlOYW1lKSA+PSAwKSB7Ci0gICAgICAgICAgICAgIHZhciBvcmlnaW5hbFZh
bHVlID0gdGhpc1trZXlOYW1lXTsKLQotICAgICAgICAgICAgICB2YWx1ZSA9IF9lbWJlck1ldGFs
QXNzaWduLmRlZmF1bHQoe30sIG9yaWdpbmFsVmFsdWUsIHZhbHVlKTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgaWYgKGRlc2MpIHsKLSAgICAgICAgICAgICAgZGVzYy5zZXQodGhpcywg
a2V5TmFtZSwgdmFsdWUpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgaWYg
KHR5cGVvZiB0aGlzLnNldFVua25vd25Qcm9wZXJ0eSA9PT0gJ2Z1bmN0aW9uJyAmJiAhKGtleU5h
bWUgaW4gdGhpcykpIHsKLSAgICAgICAgICAgICAgICB0aGlzLnNldFVua25vd25Qcm9wZXJ0eShr
ZXlOYW1lLCB2YWx1ZSk7Ci0gICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
X2VtYmVyTWV0YWxQcm9wZXJ0aWVzLmRlZmluZVByb3BlcnR5KHRoaXMsIGtleU5hbWUsIG51bGws
IHZhbHVlKTsgLy8gc2V0dXAgbWFuZGF0b3J5IHNldHRlcgotICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGZpbmlz
aFBhcnRpYWwodGhpcywgbSk7Ci0KLSAgICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3Ro
OwotCi0gICAgICBpZiAobGVuZ3RoID09PSAwKSB7Ci0gICAgICAgIHRoaXMuaW5pdCgpOwotICAg
ICAgfSBlbHNlIGlmIChsZW5ndGggPT09IDEpIHsKLSAgICAgICAgdGhpcy5pbml0KGFyZ3VtZW50
c1swXSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICAvLyB2OCBidWcgcG90ZW50aWFsbHkgaW5j
b3JyZWN0bHkgZGVvcHRzIHRoaXMgZnVuY3Rpb246IGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3Av
djgvaXNzdWVzL2RldGFpbD9pZD0zNzA5Ci0gICAgICAgIC8vIHdlIG1heSB3YW50IHRvIGtlZXAg
dGhpcyBhcm91bmQgdGlsbCB0aGlzIGFnZXMgb3V0IG9uIG1vYmlsZQotICAgICAgICB2YXIgYXJn
cyA9IG5ldyBBcnJheShsZW5ndGgpOwotICAgICAgICBmb3IgKHZhciB4ID0gMDsgeCA8IGxlbmd0
aDsgeCsrKSB7Ci0gICAgICAgICAgYXJnc1t4XSA9IGFyZ3VtZW50c1t4XTsKLSAgICAgICAgfQot
ICAgICAgICB0aGlzLmluaXQuYXBwbHkodGhpcywgYXJncyk7Ci0gICAgICB9Ci0KLSAgICAgIHRo
aXNbUE9TVF9JTklUXSgpOwotCi0gICAgICBtLnByb3RvID0gcHJvdG87Ci0gICAgICBfZW1iZXJN
ZXRhbENoYWlucy5maW5pc2hDaGFpbnModGhpcyk7Ci0gICAgICBfZW1iZXJNZXRhbEV2ZW50cy5z
ZW5kRXZlbnQodGhpcywgJ2luaXQnKTsKLSAgICB9OwotCi0gICAgQ2xhc3MudG9TdHJpbmcgPSBf
ZW1iZXJNZXRhbE1peGluLk1peGluLnByb3RvdHlwZS50b1N0cmluZzsKLSAgICBDbGFzcy53aWxs
UmVvcGVuID0gZnVuY3Rpb24gKCkgewotICAgICAgaWYgKHdhc0FwcGxpZWQpIHsKLSAgICAgICAg
Q2xhc3MuUHJvdG90eXBlTWl4aW4gPSBfZW1iZXJNZXRhbE1peGluLk1peGluLmNyZWF0ZShDbGFz
cy5Qcm90b3R5cGVNaXhpbik7Ci0gICAgICB9Ci0KLSAgICAgIHdhc0FwcGxpZWQgPSBmYWxzZTsK
LSAgICB9OwotCi0gICAgQ2xhc3MuX2luaXRQcm9wZXJ0aWVzID0gZnVuY3Rpb24gKGFyZ3MpIHsK
LSAgICAgIGluaXRQcm9wZXJ0aWVzID0gYXJnczsKLSAgICB9OwotCi0gICAgQ2xhc3MucHJvdG8g
PSBmdW5jdGlvbiAoKSB7Ci0gICAgICB2YXIgc3VwZXJjbGFzcyA9IENsYXNzLnN1cGVyY2xhc3M7
Ci0gICAgICBpZiAoc3VwZXJjbGFzcykgewotICAgICAgICBzdXBlcmNsYXNzLnByb3RvKCk7Ci0g
ICAgICB9Ci0KLSAgICAgIGlmICghd2FzQXBwbGllZCkgewotICAgICAgICB3YXNBcHBsaWVkID0g
dHJ1ZTsKLSAgICAgICAgQ2xhc3MuUHJvdG90eXBlTWl4aW4uYXBwbHlQYXJ0aWFsKENsYXNzLnBy
b3RvdHlwZSk7Ci0gICAgICB9Ci0KLSAgICAgIHJldHVybiB0aGlzLnByb3RvdHlwZTsKLSAgICB9
OwotCi0gICAgcmV0dXJuIENsYXNzOwotICB9Ci0KLSAgLyoqCi0gICAgQGNsYXNzIENvcmVPYmpl
Y3QKLSAgICBAbmFtZXNwYWNlIEVtYmVyCi0gICAgQHB1YmxpYwotICAqLwotICB2YXIgQ29yZU9i
amVjdCA9IG1ha2VDdG9yKCk7Ci0gIENvcmVPYmplY3QudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7
Ci0gICAgcmV0dXJuICdFbWJlci5Db3JlT2JqZWN0JzsKLSAgfTsKLSAgQ29yZU9iamVjdC5Qcm90
b3R5cGVNaXhpbiA9IF9lbWJlck1ldGFsTWl4aW4uTWl4aW4uY3JlYXRlKChfTWl4aW4kY3JlYXRl
ID0gewotICAgIHJlb3BlbjogZnVuY3Rpb24gKCkgewotICAgICAgZm9yICh2YXIgX2xlbiA9IGFy
Z3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVu
OyBfa2V5KyspIHsKLSAgICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTsKLSAgICAg
IH0KLQotICAgICAgYXBwbHlNaXhpbih0aGlzLCBhcmdzLCB0cnVlKTsKLSAgICAgIHJldHVybiB0
aGlzOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgIEFuIG92ZXJyaWRhYmxlIG1ldGhvZCBjYWxs
ZWQgd2hlbiBvYmplY3RzIGFyZSBpbnN0YW50aWF0ZWQuIEJ5IGRlZmF1bHQsCi0gICAgICBkb2Vz
IG5vdGhpbmcgdW5sZXNzIGl0IGlzIG92ZXJyaWRkZW4gZHVyaW5nIGNsYXNzIGRlZmluaXRpb24u
Ci0gICAgICAgRXhhbXBsZToKLSAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICBBcHAuUGVyc29u
ID0gRW1iZXIuT2JqZWN0LmV4dGVuZCh7Ci0gICAgICAgIGluaXQ6IGZ1bmN0aW9uKCkgewotICAg
ICAgICAgIGFsZXJ0KCdOYW1lIGlzICcgKyB0aGlzLmdldCgnbmFtZScpKTsKLSAgICAgICAgfQot
ICAgICAgfSk7Ci0gICAgICAgdmFyIHN0ZXZlID0gQXBwLlBlcnNvbi5jcmVhdGUoewotICAgICAg
ICBuYW1lOiAiU3RldmUiCi0gICAgICB9KTsKLSAgICAgICAvLyBhbGVydHMgJ05hbWUgaXMgU3Rl
dmUnLgotICAgICAgYGBgCi0gICAgICAgTk9URTogSWYgeW91IGRvIG92ZXJyaWRlIGBpbml0YCBm
b3IgYSBmcmFtZXdvcmsgY2xhc3MgbGlrZSBgRW1iZXIuVmlld2AsCi0gICAgICBiZSBzdXJlIHRv
IGNhbGwgYHRoaXMuX3N1cGVyKC4uLmFyZ3VtZW50cylgIGluIHlvdXIKLSAgICAgIGBpbml0YCBk
ZWNsYXJhdGlvbiEgSWYgeW91IGRvbid0LCBFbWJlciBtYXkgbm90IGhhdmUgYW4gb3Bwb3J0dW5p
dHkgdG8KLSAgICAgIGRvIGltcG9ydGFudCBzZXR1cCB3b3JrLCBhbmQgeW91J2xsIHNlZSBzdHJh
bmdlIGJlaGF2aW9yIGluIHlvdXIKLSAgICAgIGFwcGxpY2F0aW9uLgotICAgICAgIEBtZXRob2Qg
aW5pdAotICAgICAgQHB1YmxpYwotICAgICovCi0gICAgaW5pdDogZnVuY3Rpb24gKCkge30KLQot
ICB9LCBfTWl4aW4kY3JlYXRlW1BPU1RfSU5JVF0gPSBmdW5jdGlvbiAoKSB7fSwgX01peGluJGNy
ZWF0ZS5fX2RlZmluZU5vbkVudW1lcmFibGUgPSBmdW5jdGlvbiAocHJvcGVydHkpIHsKLSAgICBP
YmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgcHJvcGVydHkubmFtZSwgcHJvcGVydHkuZGVzY3Jp
cHRvcik7Ci0gICAgLy90aGlzW3Byb3BlcnR5Lm5hbWVdID0gcHJvcGVydHkuZGVzY3JpcHRvci52
YWx1ZTsKLSAgfSwgX01peGluJGNyZWF0ZS5jb25jYXRlbmF0ZWRQcm9wZXJ0aWVzID0gbnVsbCwg
X01peGluJGNyZWF0ZS5tZXJnZWRQcm9wZXJ0aWVzID0gbnVsbCwgX01peGluJGNyZWF0ZS5pc0Rl
c3Ryb3llZCA9IGZhbHNlLCBfTWl4aW4kY3JlYXRlLmlzRGVzdHJveWluZyA9IGZhbHNlLCBfTWl4
aW4kY3JlYXRlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7Ci0gICAgaWYgKHRoaXMuaXNEZXN0cm95
aW5nKSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHRoaXMuaXNEZXN0cm95aW5nID0gdHJ1
ZTsKLQotICAgIHNjaGVkdWxlKCdhY3Rpb25zJywgdGhpcywgdGhpcy53aWxsRGVzdHJveSk7Ci0g
ICAgc2NoZWR1bGUoJ2Rlc3Ryb3knLCB0aGlzLCB0aGlzLl9zY2hlZHVsZWREZXN0cm95KTsKLSAg
ICByZXR1cm4gdGhpczsKLSAgfSwgX01peGluJGNyZWF0ZS53aWxsRGVzdHJveSA9IF9lbWJlck1l
dGFsQ29yZS5LLCBfTWl4aW4kY3JlYXRlLl9zY2hlZHVsZWREZXN0cm95ID0gZnVuY3Rpb24gKCkg
ewotICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAg
IF9lbWJlck1ldGFsV2F0Y2hpbmcuZGVzdHJveSh0aGlzKTsKLSAgICB0aGlzLmlzRGVzdHJveWVk
ID0gdHJ1ZTsKLSAgfSwgX01peGluJGNyZWF0ZS5iaW5kID0gZnVuY3Rpb24gKHRvLCBmcm9tKSB7
Ci0gICAgaWYgKCEoZnJvbSBpbnN0YW5jZW9mIF9lbWJlck1ldGFsQmluZGluZy5CaW5kaW5nKSkg
ewotICAgICAgZnJvbSA9IF9lbWJlck1ldGFsQmluZGluZy5CaW5kaW5nLmZyb20oZnJvbSk7Ci0g
ICAgfQotICAgIGZyb20udG8odG8pLmNvbm5lY3QodGhpcyk7Ci0gICAgcmV0dXJuIGZyb207Ci0g
IH0sIF9NaXhpbiRjcmVhdGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7Ci0gICAgdmFyIGhhc1Rv
U3RyaW5nRXh0ZW5zaW9uID0gdHlwZW9mIHRoaXMudG9TdHJpbmdFeHRlbnNpb24gPT09ICdmdW5j
dGlvbic7Ci0gICAgdmFyIGV4dGVuc2lvbiA9IGhhc1RvU3RyaW5nRXh0ZW5zaW9uID8gJzonICsg
dGhpcy50b1N0cmluZ0V4dGVuc2lvbigpIDogJyc7Ci0gICAgdmFyIHJldCA9ICc8JyArIHRoaXMu
Y29uc3RydWN0b3IudG9TdHJpbmcoKSArICc6JyArIF9lbWJlck1ldGFsVXRpbHMuZ3VpZEZvcih0
aGlzKSArIGV4dGVuc2lvbiArICc+JzsKLQotICAgIHJldHVybiByZXQ7Ci0gIH0sIF9NaXhpbiRj
cmVhdGUpKTsKLQotICBDb3JlT2JqZWN0LlByb3RvdHlwZU1peGluLm93bmVyQ29uc3RydWN0b3Ig
PSBDb3JlT2JqZWN0OwotCi0gIENvcmVPYmplY3QuX19zdXBlcl9fID0gbnVsbDsKLQotICB2YXIg
Q2xhc3NNaXhpblByb3BzID0gewotCi0gICAgQ2xhc3NNaXhpbjogX2VtYmVyTWV0YWxNaXhpbi5S
RVFVSVJFRCwKLQotICAgIFByb3RvdHlwZU1peGluOiBfZW1iZXJNZXRhbE1peGluLlJFUVVJUkVE
LAotCi0gICAgaXNDbGFzczogdHJ1ZSwKLQotICAgIGlzTWV0aG9kOiBmYWxzZSwKLQotICAgIC8q
KgotICAgICAgQ3JlYXRlcyBhIG5ldyBzdWJjbGFzcy4KLSAgICAgICBgYGBqYXZhc2NyaXB0Ci0g
ICAgICBBcHAuUGVyc29uID0gRW1iZXIuT2JqZWN0LmV4dGVuZCh7Ci0gICAgICAgIHNheTogZnVu
Y3Rpb24odGhpbmcpIHsKLSAgICAgICAgICBhbGVydCh0aGluZyk7Ci0gICAgICAgICB9Ci0gICAg
ICB9KTsKLSAgICAgIGBgYAotICAgICAgIFRoaXMgZGVmaW5lcyBhIG5ldyBzdWJjbGFzcyBvZiBF
bWJlci5PYmplY3Q6IGBBcHAuUGVyc29uYC4gSXQgY29udGFpbnMgb25lIG1ldGhvZDogYHNheSgp
YC4KLSAgICAgICBZb3UgY2FuIGFsc28gY3JlYXRlIGEgc3ViY2xhc3MgZnJvbSBhbnkgZXhpc3Rp
bmcgY2xhc3MgYnkgY2FsbGluZyBpdHMgYGV4dGVuZCgpYCBtZXRob2QuCi0gICAgICBGb3IgZXhh
bXBsZSwgeW91IG1pZ2h0IHdhbnQgdG8gY3JlYXRlIGEgc3ViY2xhc3Mgb2YgRW1iZXIncyBidWls
dC1pbiBgRW1iZXIuVmlld2AgY2xhc3M6Ci0gICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgQXBw
LlBlcnNvblZpZXcgPSBFbWJlci5WaWV3LmV4dGVuZCh7Ci0gICAgICAgIHRhZ05hbWU6ICdsaScs
Ci0gICAgICAgIGNsYXNzTmFtZUJpbmRpbmdzOiBbJ2lzQWRtaW5pc3RyYXRvciddCi0gICAgICB9
KTsKLSAgICAgIGBgYAotICAgICAgIFdoZW4gZGVmaW5pbmcgYSBzdWJjbGFzcywgeW91IGNhbiBv
dmVycmlkZSBtZXRob2RzIGJ1dCBzdGlsbCBhY2Nlc3MgdGhlCi0gICAgICBpbXBsZW1lbnRhdGlv
biBvZiB5b3VyIHBhcmVudCBjbGFzcyBieSBjYWxsaW5nIHRoZSBzcGVjaWFsIGBfc3VwZXIoKWAg
bWV0aG9kOgotICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgIEFwcC5QZXJzb24gPSBFbWJlci5P
YmplY3QuZXh0ZW5kKHsKLSAgICAgICAgc2F5OiBmdW5jdGlvbih0aGluZykgewotICAgICAgICAg
IHZhciBuYW1lID0gdGhpcy5nZXQoJ25hbWUnKTsKLSAgICAgICAgICBhbGVydChuYW1lICsgJyBz
YXlzOiAnICsgdGhpbmcpOwotICAgICAgICB9Ci0gICAgICB9KTsKLSAgICAgICBBcHAuU29sZGll
ciA9IEFwcC5QZXJzb24uZXh0ZW5kKHsKLSAgICAgICAgc2F5OiBmdW5jdGlvbih0aGluZykgewot
ICAgICAgICAgIHRoaXMuX3N1cGVyKHRoaW5nICsgIiwgc2lyISIpOwotICAgICAgICB9LAotICAg
ICAgICBtYXJjaDogZnVuY3Rpb24obnVtYmVyT2ZIb3VycykgewotICAgICAgICAgIGFsZXJ0KHRo
aXMuZ2V0KCduYW1lJykgKyAnIG1hcmNoZXMgZm9yICcgKyBudW1iZXJPZkhvdXJzICsgJyBob3Vy
cy4nKTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0gICAgICAgdmFyIHllaHVkYSA9IEFwcC5Tb2xk
aWVyLmNyZWF0ZSh7Ci0gICAgICAgIG5hbWU6ICJZZWh1ZGEgS2F0eiIKLSAgICAgIH0pOwotICAg
ICAgIHllaHVkYS5zYXkoIlllcyIpOyAgLy8gYWxlcnRzICJZZWh1ZGEgS2F0eiBzYXlzOiBZZXMs
IHNpciEiCi0gICAgICBgYGAKLSAgICAgICBUaGUgYGNyZWF0ZSgpYCBvbiBsaW5lICMxNyBjcmVh
dGVzIGFuICppbnN0YW5jZSogb2YgdGhlIGBBcHAuU29sZGllcmAgY2xhc3MuCi0gICAgICBUaGUg
YGV4dGVuZCgpYCBvbiBsaW5lICM4IGNyZWF0ZXMgYSAqc3ViY2xhc3MqIG9mIGBBcHAuUGVyc29u
YC4gQW55IGluc3RhbmNlCi0gICAgICBvZiB0aGUgYEFwcC5QZXJzb25gIGNsYXNzIHdpbGwgKm5v
dCogaGF2ZSB0aGUgYG1hcmNoKClgIG1ldGhvZC4KLSAgICAgICBZb3UgY2FuIGFsc28gcGFzcyBg
TWl4aW5gIGNsYXNzZXMgdG8gYWRkIGFkZGl0aW9uYWwgcHJvcGVydGllcyB0byB0aGUgc3ViY2xh
c3MuCi0gICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgQXBwLlBlcnNvbiA9IEVtYmVyLk9iamVj
dC5leHRlbmQoewotICAgICAgICBzYXk6IGZ1bmN0aW9uKHRoaW5nKSB7Ci0gICAgICAgICAgYWxl
cnQodGhpcy5nZXQoJ25hbWUnKSArICcgc2F5czogJyArIHRoaW5nKTsKLSAgICAgICAgfQotICAg
ICAgfSk7Ci0gICAgICAgQXBwLlNpbmdpbmdNaXhpbiA9IE1peGluLmNyZWF0ZSh7Ci0gICAgICAg
IHNpbmc6IGZ1bmN0aW9uKHRoaW5nKXsKLSAgICAgICAgICBhbGVydCh0aGlzLmdldCgnbmFtZScp
ICsgJyBzaW5nczogbGEgbGEgbGEgJyArIHRoaW5nKTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0g
ICAgICAgQXBwLkJyb2Fkd2F5U3RhciA9IEFwcC5QZXJzb24uZXh0ZW5kKEFwcC5TaW5naW5nTWl4
aW4sIHsKLSAgICAgICAgZGFuY2U6IGZ1bmN0aW9uKCkgewotICAgICAgICAgIGFsZXJ0KHRoaXMu
Z2V0KCduYW1lJykgKyAnIGRhbmNlczogdGFwIHRhcCB0YXAgdGFwICcpOwotICAgICAgICB9Ci0g
ICAgICB9KTsKLSAgICAgIGBgYAotICAgICAgIFRoZSBgQXBwLkJyb2Fkd2F5U3RhcmAgY2xhc3Mg
Y29udGFpbnMgdGhyZWUgbWV0aG9kczogYHNheSgpYCwgYHNpbmcoKWAsIGFuZCBgZGFuY2UoKWAu
Ci0gICAgICAgQG1ldGhvZCBleHRlbmQKLSAgICAgIEBzdGF0aWMKLSAgICAgICBAcGFyYW0ge01p
eGlufSBbbWl4aW5zXSogT25lIG9yIG1vcmUgTWl4aW4gY2xhc3NlcwotICAgICAgQHBhcmFtIHtP
YmplY3R9IFthcmd1bWVudHNdKiBPYmplY3QgY29udGFpbmluZyB2YWx1ZXMgdG8gdXNlIHdpdGhp
biB0aGUgbmV3IGNsYXNzCi0gICAgICBAcHVibGljCi0gICAgKi8KLSAgICBleHRlbmQ6IGZ1bmN0
aW9uICgpIHsKLSAgICAgIHZhciBDbGFzcyA9IG1ha2VDdG9yKCk7Ci0gICAgICB2YXIgcHJvdG87
Ci0gICAgICBDbGFzcy5DbGFzc01peGluID0gX2VtYmVyTWV0YWxNaXhpbi5NaXhpbi5jcmVhdGUo
dGhpcy5DbGFzc01peGluKTsKLSAgICAgIENsYXNzLlByb3RvdHlwZU1peGluID0gX2VtYmVyTWV0
YWxNaXhpbi5NaXhpbi5jcmVhdGUodGhpcy5Qcm90b3R5cGVNaXhpbik7Ci0KLSAgICAgIENsYXNz
LkNsYXNzTWl4aW4ub3duZXJDb25zdHJ1Y3RvciA9IENsYXNzOwotICAgICAgQ2xhc3MuUHJvdG90
eXBlTWl4aW4ub3duZXJDb25zdHJ1Y3RvciA9IENsYXNzOwotCi0gICAgICByZW9wZW4uYXBwbHko
Q2xhc3MuUHJvdG90eXBlTWl4aW4sIGFyZ3VtZW50cyk7Ci0KLSAgICAgIENsYXNzLnN1cGVyY2xh
c3MgPSB0aGlzOwotICAgICAgQ2xhc3MuX19zdXBlcl9fID0gdGhpcy5wcm90b3R5cGU7Ci0KLSAg
ICAgIHByb3RvID0gQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSh0aGlzLnByb3RvdHlw
ZSk7Ci0gICAgICBwcm90by5jb25zdHJ1Y3RvciA9IENsYXNzOwotICAgICAgX2VtYmVyTWV0YWxV
dGlscy5nZW5lcmF0ZUd1aWQocHJvdG8pOwotICAgICAgX2VtYmVyTWV0YWxNZXRhLm1ldGEocHJv
dG8pLnByb3RvID0gcHJvdG87IC8vIHRoaXMgd2lsbCBkaXNhYmxlIG9ic2VydmVycyBvbiBwcm90
b3R5cGUKLQotICAgICAgQ2xhc3MuQ2xhc3NNaXhpbi5hcHBseShDbGFzcyk7Ci0gICAgICByZXR1
cm4gQ2xhc3M7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAgQ3JlYXRlcyBhbiBpbnN0YW5jZSBv
ZiBhIGNsYXNzLiBBY2NlcHRzIGVpdGhlciBubyBhcmd1bWVudHMsIG9yIGFuIG9iamVjdAotICAg
ICAgY29udGFpbmluZyB2YWx1ZXMgdG8gaW5pdGlhbGl6ZSB0aGUgbmV3bHkgaW5zdGFudGlhdGVk
IG9iamVjdCB3aXRoLgotICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgIEFwcC5QZXJzb24gPSBF
bWJlci5PYmplY3QuZXh0ZW5kKHsKLSAgICAgICAgaGVsbG9Xb3JsZDogZnVuY3Rpb24oKSB7Ci0g
ICAgICAgICAgYWxlcnQoIkhpLCBteSBuYW1lIGlzICIgKyB0aGlzLmdldCgnbmFtZScpKTsKLSAg
ICAgICAgfQotICAgICAgfSk7Ci0gICAgICAgdmFyIHRvbSA9IEFwcC5QZXJzb24uY3JlYXRlKHsK
LSAgICAgICAgbmFtZTogJ1RvbSBEYWxlJwotICAgICAgfSk7Ci0gICAgICAgdG9tLmhlbGxvV29y
bGQoKTsgLy8gYWxlcnRzICJIaSwgbXkgbmFtZSBpcyBUb20gRGFsZSIuCi0gICAgICBgYGAKLSAg
ICAgICBgY3JlYXRlYCB3aWxsIGNhbGwgdGhlIGBpbml0YCBmdW5jdGlvbiBpZiBkZWZpbmVkIGR1
cmluZwotICAgICAgYEVtYmVyLkFueU9iamVjdC5leHRlbmRgCi0gICAgICAgSWYgbm8gYXJndW1l
bnRzIGFyZSBwYXNzZWQgdG8gYGNyZWF0ZWAsIGl0IHdpbGwgbm90IHNldCB2YWx1ZXMgdG8gdGhl
IG5ldwotICAgICAgaW5zdGFuY2UgZHVyaW5nIGluaXRpYWxpemF0aW9uOgotICAgICAgIGBgYGph
dmFzY3JpcHQKLSAgICAgIHZhciBub05hbWUgPSBBcHAuUGVyc29uLmNyZWF0ZSgpOwotICAgICAg
bm9OYW1lLmhlbGxvV29ybGQoKTsgLy8gYWxlcnRzIHVuZGVmaW5lZAotICAgICAgYGBgCi0gICAg
ICAgTk9URTogRm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMsIHlvdSBjYW5ub3QgZGVjbGFyZSBtZXRo
b2RzIG9yIGNvbXB1dGVkCi0gICAgICBwcm9wZXJ0aWVzIGR1cmluZyBgY3JlYXRlYC4gWW91IHNo
b3VsZCBpbnN0ZWFkIGRlY2xhcmUgbWV0aG9kcyBhbmQgY29tcHV0ZWQKLSAgICAgIHByb3BlcnRp
ZXMgd2hlbiB1c2luZyBgZXh0ZW5kYC4KLSAgICAgICBAbWV0aG9kIGNyZWF0ZQotICAgICAgQHN0
YXRpYwotICAgICAgQHBhcmFtIFthcmd1bWVudHNdKgotICAgICAgQHB1YmxpYwotICAgICovCi0g
ICAgY3JlYXRlOiBmdW5jdGlvbiAoKSB7Ci0gICAgICB2YXIgQyA9IHRoaXM7Ci0KLSAgICAgIGZv
ciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4yKSwgX2tl
eTIgPSAwOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7Ci0gICAgICAgIGFyZ3NbX2tleTJdID0g
YXJndW1lbnRzW19rZXkyXTsKLSAgICAgIH0KLQotICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gMCkg
ewotICAgICAgICB0aGlzLl9pbml0UHJvcGVydGllcyhhcmdzKTsKLSAgICAgIH0KLSAgICAgIHJl
dHVybiBuZXcgQygpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgIEF1Z21lbnRzIGEgY29uc3Ry
dWN0b3IncyBwcm90b3R5cGUgd2l0aCBhZGRpdGlvbmFsCi0gICAgICBwcm9wZXJ0aWVzIGFuZCBm
dW5jdGlvbnM6Ci0gICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgTXlPYmplY3QgPSBFbWJlci5P
YmplY3QuZXh0ZW5kKHsKLSAgICAgICAgbmFtZTogJ2FuIG9iamVjdCcKLSAgICAgIH0pOwotICAg
ICAgIG8gPSBNeU9iamVjdC5jcmVhdGUoKTsKLSAgICAgIG8uZ2V0KCduYW1lJyk7IC8vICdhbiBv
YmplY3QnCi0gICAgICAgTXlPYmplY3QucmVvcGVuKHsKLSAgICAgICAgc2F5OiBmdW5jdGlvbiht
c2cpewotICAgICAgICAgIGNvbnNvbGUubG9nKG1zZyk7Ci0gICAgICAgIH0KLSAgICAgIH0pCi0g
ICAgICAgbzIgPSBNeU9iamVjdC5jcmVhdGUoKTsKLSAgICAgIG8yLnNheSgiaGVsbG8iKTsgLy8g
bG9ncyAiaGVsbG8iCi0gICAgICAgby5zYXkoImdvb2RieWUiKTsgLy8gbG9ncyAiZ29vZGJ5ZSIK
LSAgICAgIGBgYAotICAgICAgIFRvIGFkZCBmdW5jdGlvbnMgYW5kIHByb3BlcnRpZXMgdG8gdGhl
IGNvbnN0cnVjdG9yIGl0c2VsZiwKLSAgICAgIHNlZSBgcmVvcGVuQ2xhc3NgCi0gICAgICAgQG1l
dGhvZCByZW9wZW4KLSAgICAgIEBwdWJsaWMKLSAgICAqLwotICAgIHJlb3BlbjogZnVuY3Rpb24g
KCkgewotICAgICAgdGhpcy53aWxsUmVvcGVuKCk7Ci0gICAgICByZW9wZW4uYXBwbHkodGhpcy5Q
cm90b3R5cGVNaXhpbiwgYXJndW1lbnRzKTsKLSAgICAgIHJldHVybiB0aGlzOwotICAgIH0sCi0K
LSAgICAvKioKLSAgICAgIEF1Z21lbnRzIGEgY29uc3RydWN0b3IncyBvd24gcHJvcGVydGllcyBh
bmQgZnVuY3Rpb25zOgotICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgIE15T2JqZWN0ID0gRW1i
ZXIuT2JqZWN0LmV4dGVuZCh7Ci0gICAgICAgIG5hbWU6ICdhbiBvYmplY3QnCi0gICAgICB9KTsK
LSAgICAgICBNeU9iamVjdC5yZW9wZW5DbGFzcyh7Ci0gICAgICAgIGNhbkJ1aWxkOiBmYWxzZQot
ICAgICAgfSk7Ci0gICAgICAgTXlPYmplY3QuY2FuQnVpbGQ7IC8vIGZhbHNlCi0gICAgICBvID0g
TXlPYmplY3QuY3JlYXRlKCk7Ci0gICAgICBgYGAKLSAgICAgICBJbiBvdGhlciB3b3JkcywgdGhp
cyBjcmVhdGVzIHN0YXRpYyBwcm9wZXJ0aWVzIGFuZCBmdW5jdGlvbnMgZm9yIHRoZSBjbGFzcy4K
LSAgICAgIFRoZXNlIGFyZSBvbmx5IGF2YWlsYWJsZSBvbiB0aGUgY2xhc3MgYW5kIG5vdCBvbiBh
bnkgaW5zdGFuY2Ugb2YgdGhhdCBjbGFzcy4KLSAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICBB
cHAuUGVyc29uID0gRW1iZXIuT2JqZWN0LmV4dGVuZCh7Ci0gICAgICAgIG5hbWUgOiAiIiwKLSAg
ICAgICAgc2F5SGVsbG8gOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICBhbGVydCgiSGVsbG8uIE15
IG5hbWUgaXMgIiArIHRoaXMuZ2V0KCduYW1lJykpOwotICAgICAgICB9Ci0gICAgICB9KTsKLSAg
ICAgICBBcHAuUGVyc29uLnJlb3BlbkNsYXNzKHsKLSAgICAgICAgc3BlY2llcyA6ICJIb21vIHNh
cGllbnMiLAotICAgICAgICBjcmVhdGVQZXJzb246IGZ1bmN0aW9uKG5ld1BlcnNvbnNOYW1lKXsK
LSAgICAgICAgICByZXR1cm4gQXBwLlBlcnNvbi5jcmVhdGUoewotICAgICAgICAgICAgbmFtZTpu
ZXdQZXJzb25zTmFtZQotICAgICAgICAgIH0pOwotICAgICAgICB9Ci0gICAgICB9KTsKLSAgICAg
ICB2YXIgdG9tID0gQXBwLlBlcnNvbi5jcmVhdGUoewotICAgICAgICBuYW1lIDogIlRvbSBEYWxl
IgotICAgICAgfSk7Ci0gICAgICB2YXIgeWVodWRhID0gQXBwLlBlcnNvbi5jcmVhdGVQZXJzb24o
IlllaHVkYSBLYXR6Iik7Ci0gICAgICAgdG9tLnNheUhlbGxvKCk7IC8vICJIZWxsby4gTXkgbmFt
ZSBpcyBUb20gRGFsZSIKLSAgICAgIHllaHVkYS5zYXlIZWxsbygpOyAvLyAiSGVsbG8uIE15IG5h
bWUgaXMgWWVodWRhIEthdHoiCi0gICAgICBhbGVydChBcHAuUGVyc29uLnNwZWNpZXMpOyAvLyAi
SG9tbyBzYXBpZW5zIgotICAgICAgYGBgCi0gICAgICAgTm90ZSB0aGF0IGBzcGVjaWVzYCBhbmQg
YGNyZWF0ZVBlcnNvbmAgYXJlICpub3QqIHZhbGlkIG9uIHRoZSBgdG9tYCBhbmQgYHllaHVkYWAK
LSAgICAgIHZhcmlhYmxlcy4gVGhleSBhcmUgb25seSB2YWxpZCBvbiBgQXBwLlBlcnNvbmAuCi0g
ICAgICAgVG8gYWRkIGZ1bmN0aW9ucyBhbmQgcHJvcGVydGllcyB0byBpbnN0YW5jZXMgb2YKLSAg
ICAgIGEgY29uc3RydWN0b3IgYnkgZXh0ZW5kaW5nIHRoZSBjb25zdHJ1Y3RvcidzIHByb3RvdHlw
ZQotICAgICAgc2VlIGByZW9wZW5gCi0gICAgICAgQG1ldGhvZCByZW9wZW5DbGFzcwotICAgICAg
QHB1YmxpYwotICAgICovCi0gICAgcmVvcGVuQ2xhc3M6IGZ1bmN0aW9uICgpIHsKLSAgICAgIHJl
b3Blbi5hcHBseSh0aGlzLkNsYXNzTWl4aW4sIGFyZ3VtZW50cyk7Ci0gICAgICBhcHBseU1peGlu
KHRoaXMsIGFyZ3VtZW50cywgZmFsc2UpOwotICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgfSwKLQot
ICAgIGRldGVjdDogZnVuY3Rpb24gKG9iaikgewotICAgICAgaWYgKCdmdW5jdGlvbicgIT09IHR5
cGVvZiBvYmopIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgICAgd2hpbGUg
KG9iaikgewotICAgICAgICBpZiAob2JqID09PSB0aGlzKSB7Ci0gICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgIH0KLSAgICAgICAgb2JqID0gb2JqLnN1cGVyY2xhc3M7Ci0gICAgICB9Ci0g
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfSwKLQotICAgIGRldGVjdEluc3RhbmNlOiBmdW5jdGlv
biAob2JqKSB7Ci0gICAgICByZXR1cm4gb2JqIGluc3RhbmNlb2YgdGhpczsKLSAgICB9LAotCi0g
ICAgLyoqCi0gICAgICBJbiBzb21lIGNhc2VzLCB5b3UgbWF5IHdhbnQgdG8gYW5ub3RhdGUgY29t
cHV0ZWQgcHJvcGVydGllcyB3aXRoIGFkZGl0aW9uYWwKLSAgICAgIG1ldGFkYXRhIGFib3V0IGhv
dyB0aGV5IGZ1bmN0aW9uIG9yIHdoYXQgdmFsdWVzIHRoZXkgb3BlcmF0ZSBvbi4gRm9yCi0gICAg
ICBleGFtcGxlLCBjb21wdXRlZCBwcm9wZXJ0eSBmdW5jdGlvbnMgbWF5IGNsb3NlIG92ZXIgdmFy
aWFibGVzIHRoYXQgYXJlIHRoZW4KLSAgICAgIG5vIGxvbmdlciBhdmFpbGFibGUgZm9yIGludHJv
c3BlY3Rpb24uCi0gICAgICAgWW91IGNhbiBwYXNzIGEgaGFzaCBvZiB0aGVzZSB2YWx1ZXMgdG8g
YSBjb21wdXRlZCBwcm9wZXJ0eSBsaWtlIHRoaXM6Ci0gICAgICAgYGBgamF2YXNjcmlwdAotICAg
ICAgcGVyc29uOiBmdW5jdGlvbigpIHsKLSAgICAgICAgdmFyIHBlcnNvbklkID0gdGhpcy5nZXQo
J3BlcnNvbklkJyk7Ci0gICAgICAgIHJldHVybiBBcHAuUGVyc29uLmNyZWF0ZSh7IGlkOiBwZXJz
b25JZCB9KTsKLSAgICAgIH0ucHJvcGVydHkoKS5tZXRhKHsgdHlwZTogQXBwLlBlcnNvbiB9KQot
ICAgICAgYGBgCi0gICAgICAgT25jZSB5b3UndmUgZG9uZSB0aGlzLCB5b3UgY2FuIHJldHJpZXZl
IHRoZSB2YWx1ZXMgc2F2ZWQgdG8gdGhlIGNvbXB1dGVkCi0gICAgICBwcm9wZXJ0eSBmcm9tIHlv
dXIgY2xhc3MgbGlrZSB0aGlzOgotICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgIE15Q2xhc3Mu
bWV0YUZvclByb3BlcnR5KCdwZXJzb24nKTsKLSAgICAgIGBgYAotICAgICAgIFRoaXMgd2lsbCBy
ZXR1cm4gdGhlIG9yaWdpbmFsIGhhc2ggdGhhdCB3YXMgcGFzc2VkIHRvIGBtZXRhKClgLgotICAg
ICAgIEBzdGF0aWMKLSAgICAgIEBtZXRob2QgbWV0YUZvclByb3BlcnR5Ci0gICAgICBAcGFyYW0g
a2V5IHtTdHJpbmd9IHByb3BlcnR5IG5hbWUKLSAgICAgIEBwcml2YXRlCi0gICAgKi8KLSAgICBt
ZXRhRm9yUHJvcGVydHk6IGZ1bmN0aW9uIChrZXkpIHsKLSAgICAgIHZhciBwcm90byA9IHRoaXMu
cHJvdG8oKTsKLSAgICAgIHZhciBwb3NzaWJsZURlc2MgPSBwcm90b1trZXldOwotICAgICAgdmFy
IGRlc2MgPSBwb3NzaWJsZURlc2MgIT09IG51bGwgJiYgdHlwZW9mIHBvc3NpYmxlRGVzYyA9PT0g
J29iamVjdCcgJiYgcG9zc2libGVEZXNjLmlzRGVzY3JpcHRvciA/IHBvc3NpYmxlRGVzYyA6IHVu
ZGVmaW5lZDsKLQotICAgICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ21ldGFGb3JQcm9wZXJ0
eSgpIGNvdWxkIG5vdCBmaW5kIGEgY29tcHV0ZWQgcHJvcGVydHkgJyArICd3aXRoIGtleSBcJycg
KyBrZXkgKyAnXCcuJywgISFkZXNjICYmIGRlc2MgaW5zdGFuY2VvZiBfZW1iZXJNZXRhbENvbXB1
dGVkLkNvbXB1dGVkUHJvcGVydHkpOwotICAgICAgcmV0dXJuIGRlc2MuX21ldGEgfHwge307Ci0g
ICAgfSwKLQotICAgIF9jb21wdXRlZFByb3BlcnRpZXM6IF9lbWJlck1ldGFsQ29tcHV0ZWQuY29t
cHV0ZWQoZnVuY3Rpb24gKCkgewotICAgICAgaGFzQ2FjaGVkQ29tcHV0ZWRQcm9wZXJ0aWVzID0g
dHJ1ZTsKLSAgICAgIHZhciBwcm90byA9IHRoaXMucHJvdG8oKTsKLSAgICAgIHZhciBwcm9wZXJ0
eTsKLSAgICAgIHZhciBwcm9wZXJ0aWVzID0gW107Ci0KLSAgICAgIGZvciAodmFyIG5hbWUgaW4g
cHJvdG8pIHsKLSAgICAgICAgcHJvcGVydHkgPSBwcm90b1tuYW1lXTsKLQotICAgICAgICBpZiAo
cHJvcGVydHkgJiYgcHJvcGVydHkuaXNEZXNjcmlwdG9yKSB7Ci0gICAgICAgICAgcHJvcGVydGll
cy5wdXNoKHsKLSAgICAgICAgICAgIG5hbWU6IG5hbWUsCi0gICAgICAgICAgICBtZXRhOiBwcm9w
ZXJ0eS5fbWV0YQotICAgICAgICAgIH0pOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICByZXR1
cm4gcHJvcGVydGllczsKLSAgICB9KS5yZWFkT25seSgpLAotCi0gICAgLyoqCi0gICAgICBJdGVy
YXRlIG92ZXIgZWFjaCBjb21wdXRlZCBwcm9wZXJ0eSBmb3IgdGhlIGNsYXNzLCBwYXNzaW5nIGl0
cyBuYW1lCi0gICAgICBhbmQgYW55IGFzc29jaWF0ZWQgbWV0YWRhdGEgKHNlZSBgbWV0YUZvclBy
b3BlcnR5YCkgdG8gdGhlIGNhbGxiYWNrLgotICAgICAgIEBzdGF0aWMKLSAgICAgIEBtZXRob2Qg
ZWFjaENvbXB1dGVkUHJvcGVydHkKLSAgICAgIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrCi0g
ICAgICBAcGFyYW0ge09iamVjdH0gYmluZGluZwotICAgICAgQHByaXZhdGUKLSAgICAqLwotICAg
IGVhY2hDb21wdXRlZFByb3BlcnR5OiBmdW5jdGlvbiAoY2FsbGJhY2ssIGJpbmRpbmcpIHsKLSAg
ICAgIHZhciBwcm9wZXJ0eTsKLSAgICAgIHZhciBlbXB0eSA9IHt9OwotCi0gICAgICB2YXIgcHJv
cGVydGllcyA9IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0aGlzLCAnX2NvbXB1dGVkUHJv
cGVydGllcycpOwotCi0gICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gcHJvcGVydGllcy5s
ZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICBwcm9wZXJ0eSA9IHByb3BlcnRpZXNb
aV07Ci0gICAgICAgIGNhbGxiYWNrLmNhbGwoYmluZGluZyB8fCB0aGlzLCBwcm9wZXJ0eS5uYW1l
LCBwcm9wZXJ0eS5tZXRhIHx8IGVtcHR5KTsKLSAgICAgIH0KLSAgICB9Ci0gIH07Ci0KLSAgZnVu
Y3Rpb24gaW5qZWN0ZWRQcm9wZXJ0eUFzc2VydGlvbigpIHsKLSAgICBfZW1iZXJNZXRhbERlYnVn
LmFzc2VydCgnSW5qZWN0ZWQgcHJvcGVydGllcyBhcmUgaW52YWxpZCcsIF9lbWJlclJ1bnRpbWVJ
bmplY3QudmFsaWRhdGVQcm9wZXJ0eUluamVjdGlvbnModGhpcykpOwotICB9Ci0KLSAgX2VtYmVy
TWV0YWxEZWJ1Zy5ydW5JbkRlYnVnKGZ1bmN0aW9uICgpIHsKLSAgICAvKioKLSAgICAgIFByb3Zp
ZGVzIGxvb2t1cC10aW1lIHR5cGUgdmFsaWRhdGlvbiBmb3IgaW5qZWN0ZWQgcHJvcGVydGllcy4K
LSAgICAgICBAcHJpdmF0ZQotICAgICAgQG1ldGhvZCBfb25Mb29rdXAKLSAgICAqLwotICAgIENs
YXNzTWl4aW5Qcm9wcy5fb25Mb29rdXAgPSBpbmplY3RlZFByb3BlcnR5QXNzZXJ0aW9uOwotICB9
KTsKLQotICAvKioKLSAgICBSZXR1cm5zIGEgaGFzaCBvZiBwcm9wZXJ0eSBuYW1lcyBhbmQgY29u
dGFpbmVyIG5hbWVzIHRoYXQgaW5qZWN0ZWQKLSAgICBwcm9wZXJ0aWVzIHdpbGwgbG9va3VwIG9u
IHRoZSBjb250YWluZXIgbGF6aWx5LgotICAKLSAgICBAbWV0aG9kIF9sYXp5SW5qZWN0aW9ucwot
ICAgIEByZXR1cm4ge09iamVjdH0gSGFzaCBvZiBhbGwgbGF6eSBpbmplY3RlZCBwcm9wZXJ0eSBr
ZXlzIHRvIGNvbnRhaW5lciBuYW1lcwotICAgIEBwcml2YXRlCi0gICovCi0gIENsYXNzTWl4aW5Q
cm9wcy5fbGF6eUluamVjdGlvbnMgPSBmdW5jdGlvbiAoKSB7Ci0gICAgdmFyIGluamVjdGlvbnMg
PSB7fTsKLSAgICB2YXIgcHJvdG8gPSB0aGlzLnByb3RvKCk7Ci0gICAgdmFyIGtleSwgZGVzYzsK
LQotICAgIGZvciAoa2V5IGluIHByb3RvKSB7Ci0gICAgICBkZXNjID0gcHJvdG9ba2V5XTsKLSAg
ICAgIGlmIChkZXNjIGluc3RhbmNlb2YgX2VtYmVyTWV0YWxJbmplY3RlZF9wcm9wZXJ0eS5kZWZh
dWx0KSB7Ci0gICAgICAgIGluamVjdGlvbnNba2V5XSA9IGRlc2MudHlwZSArICc6JyArIChkZXNj
Lm5hbWUgfHwga2V5KTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gaW5qZWN0aW9uczsK
LSAgfTsKLQotICB2YXIgQ2xhc3NNaXhpbiA9IF9lbWJlck1ldGFsTWl4aW4uTWl4aW4uY3JlYXRl
KENsYXNzTWl4aW5Qcm9wcyk7Ci0KLSAgQ2xhc3NNaXhpbi5vd25lckNvbnN0cnVjdG9yID0gQ29y
ZU9iamVjdDsKLQotICBDb3JlT2JqZWN0LkNsYXNzTWl4aW4gPSBDbGFzc01peGluOwotCi0gIENs
YXNzTWl4aW4uYXBwbHkoQ29yZU9iamVjdCk7Ci0KLSAgQ29yZU9iamVjdC5yZW9wZW4oewotICAg
IGRpZERlZmluZVByb3BlcnR5OiBmdW5jdGlvbiAocHJvdG8sIGtleSwgdmFsdWUpIHsKLSAgICAg
IGlmIChoYXNDYWNoZWRDb21wdXRlZFByb3BlcnRpZXMgPT09IGZhbHNlKSB7Ci0gICAgICAgIHJl
dHVybjsKLSAgICAgIH0KLSAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIF9lbWJlck1ldGFsQ29t
cHV0ZWQuQ29tcHV0ZWRQcm9wZXJ0eSkgewotICAgICAgICB2YXIgY2FjaGUgPSBfZW1iZXJNZXRh
bE1ldGEubWV0YSh0aGlzLmNvbnN0cnVjdG9yKS5yZWFkYWJsZUNhY2hlKCk7Ci0KLSAgICAgICAg
aWYgKGNhY2hlICYmIGNhY2hlLl9jb21wdXRlZFByb3BlcnRpZXMgIT09IHVuZGVmaW5lZCkgewot
ICAgICAgICAgIGNhY2hlLl9jb21wdXRlZFByb3BlcnRpZXMgPSB1bmRlZmluZWQ7Ci0gICAgICAg
IH0KLSAgICAgIH0KLSAgICB9Ci0gIH0pOwotCi0gIGV4cG9ydHMuZGVmYXVsdCA9IENvcmVPYmpl
Y3Q7Ci19KTsKLQotLy8gTk9URTogdGhpcyBvYmplY3Qgc2hvdWxkIG5ldmVyIGJlIGluY2x1ZGVk
IGRpcmVjdGx5LiBJbnN0ZWFkIHVzZSBgRW1iZXIuT2JqZWN0YC4KLS8vIFdlIG9ubHkgZGVmaW5l
IHRoaXMgc2VwYXJhdGVseSBzbyB0aGF0IGBFbWJlci5TZXRgIGNhbiBkZXBlbmQgb24gaXQuCi0K
LS8qKgotICBEZWZpbmVzIHRoZSBwcm9wZXJ0aWVzIHRoYXQgd2lsbCBiZSBjb25jYXRlbmF0ZWQg
ZnJvbSB0aGUgc3VwZXJjbGFzcwotICAoaW5zdGVhZCBvZiBvdmVycmlkZGVuKS4KLSAgIEJ5IGRl
ZmF1bHQsIHdoZW4geW91IGV4dGVuZCBhbiBFbWJlciBjbGFzcyBhIHByb3BlcnR5IGRlZmluZWQg
aW4KLSAgdGhlIHN1YmNsYXNzIG92ZXJyaWRlcyBhIHByb3BlcnR5IHdpdGggdGhlIHNhbWUgbmFt
ZSB0aGF0IGlzIGRlZmluZWQKLSAgaW4gdGhlIHN1cGVyY2xhc3MuIEhvd2V2ZXIsIHRoZXJlIGFy
ZSBzb21lIGNhc2VzIHdoZXJlIGl0IGlzIHByZWZlcmFibGUKLSAgdG8gYnVpbGQgdXAgYSBwcm9w
ZXJ0eSdzIHZhbHVlIGJ5IGNvbWJpbmluZyB0aGUgc3VwZXJjbGFzcycgcHJvcGVydHkKLSAgdmFs
dWUgd2l0aCB0aGUgc3ViY2xhc3MnIHZhbHVlLiBBbiBleGFtcGxlIG9mIHRoaXMgaW4gdXNlIHdp
dGhpbiBFbWJlcgotICBpcyB0aGUgYGNsYXNzTmFtZXNgIHByb3BlcnR5IG9mIGBFbWJlci5WaWV3
YC4KLSAgIEhlcmUgaXMgc29tZSBzYW1wbGUgY29kZSBzaG93aW5nIHRoZSBkaWZmZXJlbmNlIGJl
dHdlZW4gYSBjb25jYXRlbmF0ZWQKLSAgcHJvcGVydHkgYW5kIGEgbm9ybWFsIG9uZToKLSAgIGBg
YGphdmFzY3JpcHQKLSAgQXBwLkJhclZpZXcgPSBFbWJlci5WaWV3LmV4dGVuZCh7Ci0gICAgc29t
ZU5vbkNvbmNhdGVuYXRlZFByb3BlcnR5OiBbJ2JhciddLAotICAgIGNsYXNzTmFtZXM6IFsnYmFy
J10KLSAgfSk7Ci0gICBBcHAuRm9vQmFyVmlldyA9IEFwcC5CYXJWaWV3LmV4dGVuZCh7Ci0gICAg
c29tZU5vbkNvbmNhdGVuYXRlZFByb3BlcnR5OiBbJ2ZvbyddLAotICAgIGNsYXNzTmFtZXM6IFsn
Zm9vJ10KLSAgfSk7Ci0gICB2YXIgZm9vQmFyVmlldyA9IEFwcC5Gb29CYXJWaWV3LmNyZWF0ZSgp
OwotICBmb29CYXJWaWV3LmdldCgnc29tZU5vbkNvbmNhdGVuYXRlZFByb3BlcnR5Jyk7IC8vIFsn
Zm9vJ10KLSAgZm9vQmFyVmlldy5nZXQoJ2NsYXNzTmFtZXMnKTsgLy8gWydlbWJlci12aWV3Jywg
J2JhcicsICdmb28nXQotICBgYGAKLSAgIFRoaXMgYmVoYXZpb3IgZXh0ZW5kcyB0byBvYmplY3Qg
Y3JlYXRpb24gYXMgd2VsbC4gQ29udGludWluZyB0aGUKLSAgYWJvdmUgZXhhbXBsZToKLSAgIGBg
YGphdmFzY3JpcHQKLSAgdmFyIHZpZXcgPSBBcHAuRm9vQmFyVmlldy5jcmVhdGUoewotICAgIHNv
bWVOb25Db25jYXRlbmF0ZWRQcm9wZXJ0eTogWydiYXonXSwKLSAgICBjbGFzc05hbWVzOiBbJ2Jh
eiddCi0gIH0pCi0gIHZpZXcuZ2V0KCdzb21lTm9uQ29uY2F0ZW5hdGVkUHJvcGVydHknKTsgLy8g
WydiYXonXQotICB2aWV3LmdldCgnY2xhc3NOYW1lcycpOyAvLyBbJ2VtYmVyLXZpZXcnLCAnYmFy
JywgJ2ZvbycsICdiYXonXQotICBgYGAKLSAgQWRkaW5nIGEgc2luZ2xlIHByb3BlcnR5IHRoYXQg
aXMgbm90IGFuIGFycmF5IHdpbGwganVzdCBhZGQgaXQgaW4gdGhlIGFycmF5OgotICAgYGBgamF2
YXNjcmlwdAotICB2YXIgdmlldyA9IEFwcC5Gb29CYXJWaWV3LmNyZWF0ZSh7Ci0gICAgY2xhc3NO
YW1lczogJ2JheicKLSAgfSkKLSAgdmlldy5nZXQoJ2NsYXNzTmFtZXMnKTsgLy8gWydlbWJlci12
aWV3JywgJ2JhcicsICdmb28nLCAnYmF6J10KLSAgYGBgCi0gICBVc2luZyB0aGUgYGNvbmNhdGVu
YXRlZFByb3BlcnRpZXNgIHByb3BlcnR5LCB3ZSBjYW4gdGVsbCBFbWJlciB0byBtaXggdGhlCi0g
IGNvbnRlbnQgb2YgdGhlIHByb3BlcnRpZXMuCi0gICBJbiBgRW1iZXIuVmlld2AgdGhlIGBjbGFz
c05hbWVCaW5kaW5nc2AgYW5kIGBhdHRyaWJ1dGVCaW5kaW5nc2AgcHJvcGVydGllcwotICBhcmUg
YWxzbyBjb25jYXRlbmF0ZWQsIGluIGFkZGl0aW9uIHRvIGBjbGFzc05hbWVzYC4KLSAgIFRoaXMg
ZmVhdHVyZSBpcyBhdmFpbGFibGUgZm9yIHlvdSB0byB1c2UgdGhyb3VnaG91dCB0aGUgRW1iZXIg
b2JqZWN0IG1vZGVsLAotICBhbHRob3VnaCB0eXBpY2FsIGFwcCBkZXZlbG9wZXJzIGFyZSBsaWtl
bHkgdG8gdXNlIGl0IGluZnJlcXVlbnRseS4gU2luY2UKLSAgaXQgY2hhbmdlcyBleHBlY3RhdGlv
bnMgYWJvdXQgYmVoYXZpb3Igb2YgcHJvcGVydGllcywgeW91IHNob3VsZCBwcm9wZXJseQotICBk
b2N1bWVudCBpdHMgdXNhZ2UgaW4gZWFjaCBpbmRpdmlkdWFsIGNvbmNhdGVuYXRlZCBwcm9wZXJ0
eSAodG8gbm90Ci0gIG1pc2xlYWQgeW91ciB1c2VycyB0byB0aGluayB0aGV5IGNhbiBvdmVycmlk
ZSB0aGUgcHJvcGVydHkgaW4gYSBzdWJjbGFzcykuCi0gICBAcHJvcGVydHkgY29uY2F0ZW5hdGVk
UHJvcGVydGllcwotICBAdHlwZSBBcnJheQotICBAZGVmYXVsdCBudWxsCi0gIEBwdWJsaWMKLSov
Ci0KLS8qKgotICBEZWZpbmVzIHRoZSBwcm9wZXJ0aWVzIHRoYXQgd2lsbCBiZSBtZXJnZWQgZnJv
bSB0aGUgc3VwZXJjbGFzcwotICAoaW5zdGVhZCBvZiBvdmVycmlkZGVuKS4KLSAgIEJ5IGRlZmF1
bHQsIHdoZW4geW91IGV4dGVuZCBhbiBFbWJlciBjbGFzcyBhIHByb3BlcnR5IGRlZmluZWQgaW4K
LSAgdGhlIHN1YmNsYXNzIG92ZXJyaWRlcyBhIHByb3BlcnR5IHdpdGggdGhlIHNhbWUgbmFtZSB0
aGF0IGlzIGRlZmluZWQKLSAgaW4gdGhlIHN1cGVyY2xhc3MuIEhvd2V2ZXIsIHRoZXJlIGFyZSBz
b21lIGNhc2VzIHdoZXJlIGl0IGlzIHByZWZlcmFibGUKLSAgdG8gYnVpbGQgdXAgYSBwcm9wZXJ0
eSdzIHZhbHVlIGJ5IG1lcmdpbmcgdGhlIHN1cGVyY2xhc3MgcHJvcGVydHkgdmFsdWUKLSAgd2l0
aCB0aGUgc3ViY2xhc3MgcHJvcGVydHkncyB2YWx1ZS4gQW4gZXhhbXBsZSBvZiB0aGlzIGluIHVz
ZSB3aXRoaW4gRW1iZXIKLSAgaXMgdGhlIGBxdWVyeVBhcmFtc2AgcHJvcGVydHkgb2Ygcm91dGVz
LgotICAgSGVyZSBpcyBzb21lIHNhbXBsZSBjb2RlIHNob3dpbmcgdGhlIGRpZmZlcmVuY2UgYmV0
d2VlbiBhIG1lcmdlZAotICBwcm9wZXJ0eSBhbmQgYSBub3JtYWwgb25lOgotICAgYGBgamF2YXNj
cmlwdAotICBBcHAuQmFyUm91dGUgPSBFbWJlci5Sb3V0ZS5leHRlbmQoewotICAgIHNvbWVOb25N
ZXJnZWRQcm9wZXJ0eTogewotICAgICAgbm9uTWVyZ2VkOiAnc3VwZXJjbGFzcyB2YWx1ZSBvZiBu
b25NZXJnZWQnCi0gICAgfSwKLSAgICBxdWVyeVBhcmFtczogewotICAgICAgcGFnZToge3JlcGxh
Y2U6IGZhbHNlfSwKLSAgICAgIGxpbWl0OiB7cmVwbGFjZTogdHJ1ZX0KLSAgICB9Ci0gIH0pOwot
ICAgQXBwLkZvb0JhclJvdXRlID0gQXBwLkJhclJvdXRlLmV4dGVuZCh7Ci0gICAgc29tZU5vbk1l
cmdlZFByb3BlcnR5OiB7Ci0gICAgICBjb21wbGV0ZWx5Tm9uTWVyZ2VkOiAnc3ViY2xhc3MgdmFs
dWUgb2Ygbm9uTWVyZ2VkJwotICAgIH0sCi0gICAgcXVlcnlQYXJhbXM6IHsKLSAgICAgIGxpbWl0
OiB7cmVwbGFjZTogZmFsc2V9Ci0gICAgfQotICB9KTsKLSAgIHZhciBmb29CYXJSb3V0ZSA9IEFw
cC5Gb29CYXJSb3V0ZS5jcmVhdGUoKTsKLSAgIGZvb0JhclJvdXRlLmdldCgnc29tZU5vbk1lcmdl
ZFByb3BlcnR5Jyk7Ci0gIC8vID0+IHsgY29tcGxldGVseU5vbk1lcmdlZDogJ3N1YmNsYXNzIHZh
bHVlIG9mIG5vbk1lcmdlZCcgfQotICAvLwotICAvLyBOb3RlIHRoZSBlbnRpcmUgb2JqZWN0LCBp
bmNsdWRpbmcgdGhlIG5vbk1lcmdlZCBwcm9wZXJ0eSBvZgotICAvLyB0aGUgc3VwZXJjbGFzcyBv
YmplY3QsIGhhcyBiZWVuIHJlcGxhY2VkCi0gICBmb29CYXJSb3V0ZS5nZXQoJ3F1ZXJ5UGFyYW1z
Jyk7Ci0gIC8vID0+IHsKLSAgLy8gICBwYWdlOiB7cmVwbGFjZTogZmFsc2V9LAotICAvLyAgIGxp
bWl0OiB7cmVwbGFjZTogZmFsc2V9Ci0gIC8vIH0KLSAgLy8KLSAgLy8gTm90ZSB0aGUgcGFnZSBy
ZW1haW5zIGZyb20gdGhlIHN1cGVyY2xhc3MsIGFuZCB0aGUKLSAgLy8gYGxpbWl0YCBwcm9wZXJ0
eSdzIHZhbHVlIG9mIGBmYWxzZWAgaGFzIGJlZW4gbWVyZ2VkIGZyb20KLSAgLy8gdGhlIHN1YmNs
YXNzLgotICBgYGAKLSAgIFRoaXMgYmVoYXZpb3IgaXMgbm90IGF2YWlsYWJsZSBkdXJpbmcgb2Jq
ZWN0IGBjcmVhdGVgIGNhbGxzLiBJdCBpcyBvbmx5Ci0gIGF2YWlsYWJsZSBhdCBgZXh0ZW5kYCB0
aW1lLgotICAgVGhpcyBmZWF0dXJlIGlzIGF2YWlsYWJsZSBmb3IgeW91IHRvIHVzZSB0aHJvdWdo
b3V0IHRoZSBFbWJlciBvYmplY3QgbW9kZWwsCi0gIGFsdGhvdWdoIHR5cGljYWwgYXBwIGRldmVs
b3BlcnMgYXJlIGxpa2VseSB0byB1c2UgaXQgaW5mcmVxdWVudGx5LiBTaW5jZQotICBpdCBjaGFu
Z2VzIGV4cGVjdGF0aW9ucyBhYm91dCBiZWhhdmlvciBvZiBwcm9wZXJ0aWVzLCB5b3Ugc2hvdWxk
IHByb3Blcmx5Ci0gIGRvY3VtZW50IGl0cyB1c2FnZSBpbiBlYWNoIGluZGl2aWR1YWwgbWVyZ2Vk
IHByb3BlcnR5ICh0byBub3QKLSAgbWlzbGVhZCB5b3VyIHVzZXJzIHRvIHRoaW5rIHRoZXkgY2Fu
IG92ZXJyaWRlIHRoZSBwcm9wZXJ0eSBpbiBhIHN1YmNsYXNzKS4KLSAgIEBwcm9wZXJ0eSBtZXJn
ZWRQcm9wZXJ0aWVzCi0gIEB0eXBlIEFycmF5Ci0gIEBkZWZhdWx0IG51bGwKLSAgQHB1YmxpYwot
Ki8KLQotLyoqCi0gIERlc3Ryb3llZCBvYmplY3QgcHJvcGVydHkgZmxhZy4KLSAgIGlmIHRoaXMg
cHJvcGVydHkgaXMgYHRydWVgIHRoZSBvYnNlcnZlcnMgYW5kIGJpbmRpbmdzIHdlcmUgYWxyZWFk
eQotICByZW1vdmVkIGJ5IHRoZSBlZmZlY3Qgb2YgY2FsbGluZyB0aGUgYGRlc3Ryb3koKWAgbWV0
aG9kLgotICAgQHByb3BlcnR5IGlzRGVzdHJveWVkCi0gIEBkZWZhdWx0IGZhbHNlCi0gIEBwdWJs
aWMKLSovCi0KLS8qKgotICBEZXN0cnVjdGlvbiBzY2hlZHVsZWQgZmxhZy4gVGhlIGBkZXN0cm95
KClgIG1ldGhvZCBoYXMgYmVlbiBjYWxsZWQuCi0gICBUaGUgb2JqZWN0IHN0YXlzIGludGFjdCB1
bnRpbCB0aGUgZW5kIG9mIHRoZSBydW4gbG9vcCBhdCB3aGljaCBwb2ludAotICB0aGUgYGlzRGVz
dHJveWVkYCBmbGFnIGlzIHNldC4KLSAgIEBwcm9wZXJ0eSBpc0Rlc3Ryb3lpbmcKLSAgQGRlZmF1
bHQgZmFsc2UKLSAgQHB1YmxpYwotKi8KLQotLyoqCi0gIERlc3Ryb3lzIGFuIG9iamVjdCBieSBz
ZXR0aW5nIHRoZSBgaXNEZXN0cm95ZWRgIGZsYWcgYW5kIHJlbW92aW5nIGl0cwotICBtZXRhZGF0
YSwgd2hpY2ggZWZmZWN0aXZlbHkgZGVzdHJveXMgb2JzZXJ2ZXJzIGFuZCBiaW5kaW5ncy4KLSAg
IElmIHlvdSB0cnkgdG8gc2V0IGEgcHJvcGVydHkgb24gYSBkZXN0cm95ZWQgb2JqZWN0LCBhbiBl
eGNlcHRpb24gd2lsbCBiZQotICByYWlzZWQuCi0gICBOb3RlIHRoYXQgZGVzdHJ1Y3Rpb24gaXMg
c2NoZWR1bGVkIGZvciB0aGUgZW5kIG9mIHRoZSBydW4gbG9vcCBhbmQgZG9lcyBub3QKLSAgaGFw
cGVuIGltbWVkaWF0ZWx5LiAgSXQgd2lsbCBzZXQgYW4gaXNEZXN0cm95aW5nIGZsYWcgaW1tZWRp
YXRlbHkuCi0gICBAbWV0aG9kIGRlc3Ryb3kKLSAgQHJldHVybiB7RW1iZXIuT2JqZWN0fSByZWNl
aXZlcgotICBAcHVibGljCi0qLwotCi0vKioKLSAgT3ZlcnJpZGUgdG8gaW1wbGVtZW50IHRlYXJk
b3duLgotICAgQG1ldGhvZCB3aWxsRGVzdHJveQotICBAcHVibGljCi0qLwotCi0vKioKLSAgSW52
b2tlZCBieSB0aGUgcnVuIGxvb3AgdG8gYWN0dWFsbHkgZGVzdHJveSB0aGUgb2JqZWN0LiBUaGlz
IGlzCi0gIHNjaGVkdWxlZCBmb3IgZXhlY3V0aW9uIGJ5IHRoZSBgZGVzdHJveWAgbWV0aG9kLgot
ICAgQHByaXZhdGUKLSAgQG1ldGhvZCBfc2NoZWR1bGVkRGVzdHJveQotKi8KLQotLyoqCi0gIFJl
dHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gd2hpY2ggYXR0ZW1wdHMgdG8gcHJvdmlkZSBt
b3JlIGluZm9ybWF0aW9uCi0gIHRoYW4gSmF2YXNjcmlwdCdzIGB0b1N0cmluZ2AgdHlwaWNhbGx5
IGRvZXMsIGluIGEgZ2VuZXJpYyB3YXkgZm9yIGFsbCBFbWJlcgotICBvYmplY3RzLgotICAgYGBg
amF2YXNjcmlwdAotICBBcHAuUGVyc29uID0gRW0uT2JqZWN0LmV4dGVuZCgpCi0gIHBlcnNvbiA9
IEFwcC5QZXJzb24uY3JlYXRlKCkKLSAgcGVyc29uLnRvU3RyaW5nKCkgLy89PiAiPEFwcC5QZXJz
b246ZW1iZXIxMDI0PiIKLSAgYGBgCi0gICBJZiB0aGUgb2JqZWN0J3MgY2xhc3MgaXMgbm90IGRl
ZmluZWQgb24gYW4gRW1iZXIgbmFtZXNwYWNlLCBpdCB3aWxsCi0gIGluZGljYXRlIGl0IGlzIGEg
c3ViY2xhc3Mgb2YgdGhlIHJlZ2lzdGVyZWQgc3VwZXJjbGFzczoKLSAgYGBgamF2YXNjcmlwdAot
ICBTdHVkZW50ID0gQXBwLlBlcnNvbi5leHRlbmQoKQotICBzdHVkZW50ID0gU3R1ZGVudC5jcmVh
dGUoKQotICBzdHVkZW50LnRvU3RyaW5nKCkgLy89PiAiPChzdWJjbGFzcyBvZiBBcHAuUGVyc29u
KTplbWJlcjEwMjU+IgotICBgYGAKLSAgIElmIHRoZSBtZXRob2QgYHRvU3RyaW5nRXh0ZW5zaW9u
YCBpcyBkZWZpbmVkLCBpdHMgcmV0dXJuIHZhbHVlIHdpbGwgYmUKLSAgaW5jbHVkZWQgaW4gdGhl
IG91dHB1dC4KLSAgIGBgYGphdmFzY3JpcHQKLSAgQXBwLlRlYWNoZXIgPSBBcHAuUGVyc29uLmV4
dGVuZCh7Ci0gICAgdG9TdHJpbmdFeHRlbnNpb246IGZ1bmN0aW9uKCkgewotICAgICAgcmV0dXJu
IHRoaXMuZ2V0KCdmdWxsTmFtZScpOwotICAgIH0KLSAgfSk7Ci0gIHRlYWNoZXIgPSBBcHAuVGVh
Y2hlci5jcmVhdGUoKQotICB0ZWFjaGVyLnRvU3RyaW5nKCk7IC8vPT4gIjxBcHAuVGVhY2hlcjpl
bWJlcjEwMjY6VG9tIERhbGU+IgotICBgYGAKLSAgIEBtZXRob2QgdG9TdHJpbmcKLSAgQHJldHVy
biB7U3RyaW5nfSBzdHJpbmcgcmVwcmVzZW50YXRpb24KLSAgQHB1YmxpYwotKi8KLWVuaWZlZCgn
ZW1iZXItcnVudGltZS9zeXN0ZW0vZWFjaF9wcm94eScsIFsnZXhwb3J0cycsICdlbWJlci1tZXRh
bC9kZWJ1ZycsICdlbWJlci1tZXRhbC9wcm9wZXJ0eV9nZXQnLCAnZW1iZXItbWV0YWwvb2JzZXJ2
ZXInLCAnZW1iZXItbWV0YWwvcHJvcGVydHlfZXZlbnRzJywgJ2VtYmVyLW1ldGFsL2VtcHR5X29i
amVjdCcsICdlbWJlci1ydW50aW1lL21peGlucy9hcnJheSddLCBmdW5jdGlvbiAoZXhwb3J0cywg
X2VtYmVyTWV0YWxEZWJ1ZywgX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQsIF9lbWJlck1ldGFsT2Jz
ZXJ2ZXIsIF9lbWJlck1ldGFsUHJvcGVydHlfZXZlbnRzLCBfZW1iZXJNZXRhbEVtcHR5X29iamVj
dCwgX2VtYmVyUnVudGltZU1peGluc0FycmF5KSB7Ci0gICd1c2Ugc3RyaWN0JzsKLQotICAvKioK
LSAgICBUaGlzIGlzIHRoZSBvYmplY3QgaW5zdGFuY2UgcmV0dXJuZWQgd2hlbiB5b3UgZ2V0IHRo
ZSBgQGVhY2hgIHByb3BlcnR5IG9uIGFuCi0gICAgYXJyYXkuIEl0IHVzZXMgdGhlIHVua25vd25Q
cm9wZXJ0eSBoYW5kbGVyIHRvIGF1dG9tYXRpY2FsbHkgY3JlYXRlCi0gICAgRWFjaEFycmF5IGlu
c3RhbmNlcyBmb3IgcHJvcGVydHkgbmFtZXMuCi0gICAgQGNsYXNzIEVhY2hQcm94eQotICAgIEBw
cml2YXRlCi0gICovCi0gIGZ1bmN0aW9uIEVhY2hQcm94eShjb250ZW50KSB7Ci0gICAgdGhpcy5f
Y29udGVudCA9IGNvbnRlbnQ7Ci0gICAgdGhpcy5fa2V5cyA9IHVuZGVmaW5lZDsKLSAgICB0aGlz
Ll9fZW1iZXJfbWV0YV9fID0gbnVsbDsKLSAgfQotCi0gIEVhY2hQcm94eS5wcm90b3R5cGUgPSB7
Ci0gICAgX19kZWZpbmVOb25FbnVtZXJhYmxlOiBmdW5jdGlvbiAocHJvcGVydHkpIHsKLSAgICAg
IHRoaXNbcHJvcGVydHkubmFtZV0gPSBwcm9wZXJ0eS5kZXNjcmlwdG9yLnZhbHVlOwotICAgIH0s
Ci0KLSAgICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uCi0gICAgLy8gQVJSQVkgQ0hBTkdFUwotICAgIC8vIEludm9rZXMgd2hlbmV2
ZXIgdGhlIGNvbnRlbnQgYXJyYXkgaXRzZWxmIGNoYW5nZXMuCi0KLSAgICBhcnJheVdpbGxDaGFu
Z2U6IGZ1bmN0aW9uIChjb250ZW50LCBpZHgsIHJlbW92ZWRDbnQsIGFkZGVkQ250KSB7Ci0gICAg
ICB2YXIga2V5cyA9IHRoaXMuX2tleXM7Ci0gICAgICB2YXIgbGltID0gcmVtb3ZlZENudCA+IDAg
PyBpZHggKyByZW1vdmVkQ250IDogLTE7Ci0gICAgICBmb3IgKHZhciBrZXkgaW4ga2V5cykgewot
ICAgICAgICBpZiAobGltID4gMCkgewotICAgICAgICAgIHJlbW92ZU9ic2VydmVyRm9yQ29udGVu
dEtleShjb250ZW50LCBrZXksIHRoaXMsIGlkeCwgbGltKTsKLSAgICAgICAgfQotICAgICAgICBf
ZW1iZXJNZXRhbFByb3BlcnR5X2V2ZW50cy5wcm9wZXJ0eVdpbGxDaGFuZ2UodGhpcywga2V5KTsK
LSAgICAgIH0KLSAgICB9LAotCi0gICAgYXJyYXlEaWRDaGFuZ2U6IGZ1bmN0aW9uIChjb250ZW50
LCBpZHgsIHJlbW92ZWRDbnQsIGFkZGVkQ250KSB7Ci0gICAgICB2YXIga2V5cyA9IHRoaXMuX2tl
eXM7Ci0gICAgICB2YXIgbGltID0gYWRkZWRDbnQgPiAwID8gaWR4ICsgYWRkZWRDbnQgOiAtMTsK
LSAgICAgIGZvciAodmFyIGtleSBpbiBrZXlzKSB7Ci0gICAgICAgIGlmIChsaW0gPiAwKSB7Ci0g
ICAgICAgICAgYWRkT2JzZXJ2ZXJGb3JDb250ZW50S2V5KGNvbnRlbnQsIGtleSwgdGhpcywgaWR4
LCBsaW0pOwotICAgICAgICB9Ci0gICAgICAgIF9lbWJlck1ldGFsUHJvcGVydHlfZXZlbnRzLnBy
b3BlcnR5RGlkQ2hhbmdlKHRoaXMsIGtleSk7Ci0gICAgICB9Ci0gICAgfSwKLQotICAgIC8vIC4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4K
LSAgICAvLyBMSVNURU4gRk9SIE5FVyBPQlNFUlZFUlMgQU5EIE9USEVSIEVWRU5UIExJU1RFTkVS
UwotICAgIC8vIFN0YXJ0IG1vbml0b3Jpbmcga2V5cyBiYXNlZCBvbiB3aG8gaXMgbGlzdGVuaW5n
Li4uCi0KLSAgICB3aWxsV2F0Y2hQcm9wZXJ0eTogZnVuY3Rpb24gKHByb3BlcnR5KSB7Ci0gICAg
ICB0aGlzLmJlZ2luT2JzZXJ2aW5nQ29udGVudEtleShwcm9wZXJ0eSk7Ci0gICAgfSwKLQotICAg
IGRpZFVud2F0Y2hQcm9wZXJ0eTogZnVuY3Rpb24gKHByb3BlcnR5KSB7Ci0gICAgICB0aGlzLnN0
b3BPYnNlcnZpbmdDb250ZW50S2V5KHByb3BlcnR5KTsKLSAgICB9LAotCi0gICAgLy8gLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgotICAg
IC8vIENPTlRFTlQgS0VZIE9CU0VSVklORwotICAgIC8vIEFjdHVhbCB3YXRjaCBrZXlzIG9uIHRo
ZSBzb3VyY2UgY29udGVudC4KLQotICAgIGJlZ2luT2JzZXJ2aW5nQ29udGVudEtleTogZnVuY3Rp
b24gKGtleU5hbWUpIHsKLSAgICAgIHZhciBrZXlzID0gdGhpcy5fa2V5czsKLSAgICAgIGlmICgh
a2V5cykgewotICAgICAgICBrZXlzID0gdGhpcy5fa2V5cyA9IG5ldyBfZW1iZXJNZXRhbEVtcHR5
X29iamVjdC5kZWZhdWx0KCk7Ci0gICAgICB9Ci0KLSAgICAgIGlmICgha2V5c1trZXlOYW1lXSkg
ewotICAgICAgICBrZXlzW2tleU5hbWVdID0gMTsKLSAgICAgICAgdmFyIGNvbnRlbnQgPSB0aGlz
Ll9jb250ZW50OwotICAgICAgICB2YXIgbGVuID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0
KGNvbnRlbnQsICdsZW5ndGgnKTsKLQotICAgICAgICBhZGRPYnNlcnZlckZvckNvbnRlbnRLZXko
Y29udGVudCwga2V5TmFtZSwgdGhpcywgMCwgbGVuKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAg
IGtleXNba2V5TmFtZV0rKzsKLSAgICAgIH0KLSAgICB9LAotCi0gICAgc3RvcE9ic2VydmluZ0Nv
bnRlbnRLZXk6IGZ1bmN0aW9uIChrZXlOYW1lKSB7Ci0gICAgICB2YXIga2V5cyA9IHRoaXMuX2tl
eXM7Ci0gICAgICBpZiAoa2V5cyAmJiBrZXlzW2tleU5hbWVdID4gMCAmJiAtLWtleXNba2V5TmFt
ZV0gPD0gMCkgewotICAgICAgICB2YXIgY29udGVudCA9IHRoaXMuX2NvbnRlbnQ7Ci0gICAgICAg
IHZhciBsZW4gPSBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQoY29udGVudCwgJ2xlbmd0aCcp
OwotCi0gICAgICAgIHJlbW92ZU9ic2VydmVyRm9yQ29udGVudEtleShjb250ZW50LCBrZXlOYW1l
LCB0aGlzLCAwLCBsZW4pOwotICAgICAgfQotICAgIH0sCi0KLSAgICBjb250ZW50S2V5V2lsbENo
YW5nZTogZnVuY3Rpb24gKG9iaiwga2V5TmFtZSkgewotICAgICAgX2VtYmVyTWV0YWxQcm9wZXJ0
eV9ldmVudHMucHJvcGVydHlXaWxsQ2hhbmdlKHRoaXMsIGtleU5hbWUpOwotICAgIH0sCi0KLSAg
ICBjb250ZW50S2V5RGlkQ2hhbmdlOiBmdW5jdGlvbiAob2JqLCBrZXlOYW1lKSB7Ci0gICAgICBf
ZW1iZXJNZXRhbFByb3BlcnR5X2V2ZW50cy5wcm9wZXJ0eURpZENoYW5nZSh0aGlzLCBrZXlOYW1l
KTsKLSAgICB9Ci0gIH07Ci0KLSAgZnVuY3Rpb24gYWRkT2JzZXJ2ZXJGb3JDb250ZW50S2V5KGNv
bnRlbnQsIGtleU5hbWUsIHByb3h5LCBpZHgsIGxvYykgewotICAgIHdoaWxlICgtLWxvYyA+PSBp
ZHgpIHsKLSAgICAgIHZhciBpdGVtID0gX2VtYmVyUnVudGltZU1peGluc0FycmF5Lm9iamVjdEF0
KGNvbnRlbnQsIGxvYyk7Ci0gICAgICBpZiAoaXRlbSkgewotICAgICAgICBfZW1iZXJNZXRhbERl
YnVnLmFzc2VydCgnV2hlbiB1c2luZyBAZWFjaCB0byBvYnNlcnZlIHRoZSBhcnJheSAnICsgY29u
dGVudCArICcsIHRoZSBhcnJheSBtdXN0IHJldHVybiBhbiBvYmplY3QnLCB0eXBlb2YgaXRlbSA9
PT0gJ29iamVjdCcpOwotICAgICAgICBfZW1iZXJNZXRhbE9ic2VydmVyLl9hZGRCZWZvcmVPYnNl
cnZlcihpdGVtLCBrZXlOYW1lLCBwcm94eSwgJ2NvbnRlbnRLZXlXaWxsQ2hhbmdlJyk7Ci0gICAg
ICAgIF9lbWJlck1ldGFsT2JzZXJ2ZXIuYWRkT2JzZXJ2ZXIoaXRlbSwga2V5TmFtZSwgcHJveHks
ICdjb250ZW50S2V5RGlkQ2hhbmdlJyk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rp
b24gcmVtb3ZlT2JzZXJ2ZXJGb3JDb250ZW50S2V5KGNvbnRlbnQsIGtleU5hbWUsIHByb3h5LCBp
ZHgsIGxvYykgewotICAgIHdoaWxlICgtLWxvYyA+PSBpZHgpIHsKLSAgICAgIHZhciBpdGVtID0g
X2VtYmVyUnVudGltZU1peGluc0FycmF5Lm9iamVjdEF0KGNvbnRlbnQsIGxvYyk7Ci0gICAgICBp
ZiAoaXRlbSkgewotICAgICAgICBfZW1iZXJNZXRhbE9ic2VydmVyLl9yZW1vdmVCZWZvcmVPYnNl
cnZlcihpdGVtLCBrZXlOYW1lLCBwcm94eSwgJ2NvbnRlbnRLZXlXaWxsQ2hhbmdlJyk7Ci0gICAg
ICAgIF9lbWJlck1ldGFsT2JzZXJ2ZXIucmVtb3ZlT2JzZXJ2ZXIoaXRlbSwga2V5TmFtZSwgcHJv
eHksICdjb250ZW50S2V5RGlkQ2hhbmdlJyk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgZXhw
b3J0cy5kZWZhdWx0ID0gRWFjaFByb3h5OwotfSk7Ci1lbmlmZWQoJ2VtYmVyLXJ1bnRpbWUvc3lz
dGVtL2xhenlfbG9hZCcsIFsnZXhwb3J0cycsICdlbWJlci1tZXRhbC9jb3JlJywgJ2VtYmVyLXJ1
bnRpbWUvc3lzdGVtL25hdGl2ZV9hcnJheSddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0
YWxDb3JlLCBfZW1iZXJSdW50aW1lU3lzdGVtTmF0aXZlX2FycmF5KSB7Ci0gIC8qZ2xvYmFscyBD
dXN0b21FdmVudCAqLwotCi0gICd1c2Ugc3RyaWN0JzsKLQotICBleHBvcnRzLm9uTG9hZCA9IG9u
TG9hZDsKLSAgZXhwb3J0cy5ydW5Mb2FkSG9va3MgPSBydW5Mb2FkSG9va3M7Ci0KLSAgLyoqCi0g
ICAgQG1vZHVsZSBlbWJlcgotICAgIEBzdWJtb2R1bGUgZW1iZXItcnVudGltZQotICAqLwotCi0g
IHZhciBsb2FkSG9va3MgPSBfZW1iZXJNZXRhbENvcmUuZGVmYXVsdC5FTlYuRU1CRVJfTE9BRF9I
T09LUyB8fCB7fTsKLSAgdmFyIGxvYWRlZCA9IHt9OwotICB2YXIgX2xvYWRlZCA9IGxvYWRlZDsK
LQotICBleHBvcnRzLl9sb2FkZWQgPSBfbG9hZGVkOwotICAvKioKLSAgICBEZXRlY3RzIHdoZW4g
YSBzcGVjaWZpYyBwYWNrYWdlIG9mIEVtYmVyIChlLmcuICdFbWJlci5BcHBsaWNhdGlvbicpCi0g
ICAgaGFzIGZ1bGx5IGxvYWRlZCBhbmQgaXMgYXZhaWxhYmxlIGZvciBleHRlbnNpb24uCi0gIAot
ICAgIFRoZSBwcm92aWRlZCBgY2FsbGJhY2tgIHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIGBuYW1l
YCBwYXNzZWQKLSAgICByZXNvbHZlZCBmcm9tIGEgc3RyaW5nIGludG8gdGhlIG9iamVjdDoKLSAg
Ci0gICAgYGBgIGphdmFzY3JpcHQKLSAgICBFbWJlci5vbkxvYWQoJ0VtYmVyLkFwcGxpY2F0aW9u
JyBmdW5jdGlvbihoYmFycykgewotICAgICAgaGJhcnMucmVnaXN0ZXJIZWxwZXIoLi4uKTsKLSAg
ICB9KTsKLSAgICBgYGAKLSAgCi0gICAgQG1ldGhvZCBvbkxvYWQKLSAgICBAZm9yIEVtYmVyCi0g
ICAgQHBhcmFtIG5hbWUge1N0cmluZ30gbmFtZSBvZiBob29rCi0gICAgQHBhcmFtIGNhbGxiYWNr
IHtGdW5jdGlvbn0gY2FsbGJhY2sgdG8gYmUgY2FsbGVkCi0gICAgQHByaXZhdGUKLSAgKi8KLQot
ICBmdW5jdGlvbiBvbkxvYWQobmFtZSwgY2FsbGJhY2spIHsKLSAgICB2YXIgb2JqZWN0ID0gbG9h
ZGVkW25hbWVdOwotCi0gICAgbG9hZEhvb2tzW25hbWVdID0gbG9hZEhvb2tzW25hbWVdIHx8IF9l
bWJlclJ1bnRpbWVTeXN0ZW1OYXRpdmVfYXJyYXkuQSgpOwotICAgIGxvYWRIb29rc1tuYW1lXS5w
dXNoT2JqZWN0KGNhbGxiYWNrKTsKLQotICAgIGlmIChvYmplY3QpIHsKLSAgICAgIGNhbGxiYWNr
KG9iamVjdCk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAgQ2FsbGVkIHdoZW4gYW4gRW1iZXIu
anMgcGFja2FnZSAoZS5nIEVtYmVyLkFwcGxpY2F0aW9uKSBoYXMgZmluaXNoZWQKLSAgICBsb2Fk
aW5nLiBUcmlnZ2VycyBhbnkgY2FsbGJhY2tzIHJlZ2lzdGVyZWQgZm9yIHRoaXMgZXZlbnQuCi0g
IAotICAgIEBtZXRob2QgcnVuTG9hZEhvb2tzCi0gICAgQGZvciBFbWJlcgotICAgIEBwYXJhbSBu
YW1lIHtTdHJpbmd9IG5hbWUgb2YgaG9vawotICAgIEBwYXJhbSBvYmplY3Qge09iamVjdH0gb2Jq
ZWN0IHRvIHBhc3MgdG8gY2FsbGJhY2tzCi0gICAgQHByaXZhdGUKLSAgKi8KLQotICBmdW5jdGlv
biBydW5Mb2FkSG9va3MobmFtZSwgb2JqZWN0KSB7Ci0gICAgbG9hZGVkW25hbWVdID0gb2JqZWN0
OwotCi0gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnICYmIHR5cGVvZiB3aW5kb3cu
ZGlzcGF0Y2hFdmVudCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgQ3VzdG9tRXZlbnQgPT09ICdm
dW5jdGlvbicpIHsKLSAgICAgIHZhciBldmVudCA9IG5ldyBDdXN0b21FdmVudChuYW1lLCB7IGRl
dGFpbDogb2JqZWN0LCBuYW1lOiBuYW1lIH0pOwotICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQo
ZXZlbnQpOwotICAgIH0KLQotICAgIGlmIChsb2FkSG9va3NbbmFtZV0pIHsKLSAgICAgIGxvYWRI
b29rc1tuYW1lXS5mb3JFYWNoKGZ1bmN0aW9uIChjYWxsYmFjaykgewotICAgICAgICByZXR1cm4g
Y2FsbGJhY2sob2JqZWN0KTsKLSAgICAgIH0pOwotICAgIH0KLSAgfQotfSk7Ci0vLyBFbWJlci5F
TlYuRU1CRVJfTE9BRF9IT09LUwotZW5pZmVkKCdlbWJlci1ydW50aW1lL3N5c3RlbS9uYW1lc3Bh
Y2UnLCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwvY29yZScsICdlbWJlci1tZXRhbC9wcm9wZXJ0
eV9nZXQnLCAnZW1iZXItbWV0YWwvdXRpbHMnLCAnZW1iZXItbWV0YWwvbWl4aW4nLCAnZW1iZXIt
cnVudGltZS9zeXN0ZW0vb2JqZWN0J10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbENv
cmUsIF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LCBfZW1iZXJNZXRhbFV0aWxzLCBfZW1iZXJNZXRh
bE1peGluLCBfZW1iZXJSdW50aW1lU3lzdGVtT2JqZWN0KSB7Ci0gIC8qKgotICBAbW9kdWxlIGVt
YmVyCi0gIEBzdWJtb2R1bGUgZW1iZXItcnVudGltZQotICAqLwotCi0gIC8vIEVtYmVyLmxvb2t1
cCwgRW1iZXIuQk9PVEVELCBFbWJlci5OQU1FX0tFWSwgRW1iZXIuYW55VW5wcm9jZXNzZWRNaXhp
bnMKLSAgJ3VzZSBzdHJpY3QnOwotCi0gIC8qKgotICAgIEEgTmFtZXNwYWNlIGlzIGFuIG9iamVj
dCB1c3VhbGx5IHVzZWQgdG8gY29udGFpbiBvdGhlciBvYmplY3RzIG9yIG1ldGhvZHMKLSAgICBz
dWNoIGFzIGFuIGFwcGxpY2F0aW9uIG9yIGZyYW1ld29yay4gQ3JlYXRlIGEgbmFtZXNwYWNlIGFu
eXRpbWUgeW91IHdhbnQKLSAgICB0byBkZWZpbmUgb25lIG9mIHRoZXNlIG5ldyBjb250YWluZXJz
LgotICAKLSAgICAjIEV4YW1wbGUgVXNhZ2UKLSAgCi0gICAgYGBgamF2YXNjcmlwdAotICAgIE15
RnJhbWV3b3JrID0gRW1iZXIuTmFtZXNwYWNlLmNyZWF0ZSh7Ci0gICAgICBWRVJTSU9OOiAnMS4w
LjAnCi0gICAgfSk7Ci0gICAgYGBgCi0gIAotICAgIEBjbGFzcyBOYW1lc3BhY2UKLSAgICBAbmFt
ZXNwYWNlIEVtYmVyCi0gICAgQGV4dGVuZHMgRW1iZXIuT2JqZWN0Ci0gICAgQHB1YmxpYwotICAq
LwotICB2YXIgTmFtZXNwYWNlID0gX2VtYmVyUnVudGltZVN5c3RlbU9iamVjdC5kZWZhdWx0LmV4
dGVuZCh7Ci0gICAgaXNOYW1lc3BhY2U6IHRydWUsCi0KLSAgICBpbml0OiBmdW5jdGlvbiAoKSB7
Ci0gICAgICBOYW1lc3BhY2UuTkFNRVNQQUNFUy5wdXNoKHRoaXMpOwotICAgICAgTmFtZXNwYWNl
LlBST0NFU1NFRCA9IGZhbHNlOwotICAgIH0sCi0KLSAgICB0b1N0cmluZzogZnVuY3Rpb24gKCkg
ewotICAgICAgdmFyIG5hbWUgPSBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywgJ25h
bWUnKSB8fCBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywgJ21vZHVsZVByZWZpeCcp
OwotICAgICAgaWYgKG5hbWUpIHsKLSAgICAgICAgcmV0dXJuIG5hbWU7Ci0gICAgICB9Ci0KLSAg
ICAgIGZpbmROYW1lc3BhY2VzKCk7Ci0gICAgICByZXR1cm4gdGhpc1tOQU1FX0tFWV07Ci0gICAg
fSwKLQotICAgIG5hbWVDbGFzc2VzOiBmdW5jdGlvbiAoKSB7Ci0gICAgICBwcm9jZXNzTmFtZXNw
YWNlKFt0aGlzLnRvU3RyaW5nKCldLCB0aGlzLCB7fSk7Ci0gICAgfSwKLQotICAgIGRlc3Ryb3k6
IGZ1bmN0aW9uICgpIHsKLSAgICAgIHZhciBuYW1lc3BhY2VzID0gTmFtZXNwYWNlLk5BTUVTUEFD
RVM7Ci0gICAgICB2YXIgdG9TdHJpbmcgPSB0aGlzLnRvU3RyaW5nKCk7Ci0KLSAgICAgIGlmICh0
b1N0cmluZykgewotICAgICAgICBfZW1iZXJNZXRhbENvcmUuZGVmYXVsdC5sb29rdXBbdG9TdHJp
bmddID0gdW5kZWZpbmVkOwotICAgICAgICBkZWxldGUgTmFtZXNwYWNlLk5BTUVTUEFDRVNfQllf
SURbdG9TdHJpbmddOwotICAgICAgfQotICAgICAgbmFtZXNwYWNlcy5zcGxpY2UobmFtZXNwYWNl
cy5pbmRleE9mKHRoaXMpLCAxKTsKLSAgICAgIHRoaXMuX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3Vt
ZW50cyk7Ci0gICAgfQotICB9KTsKLQotICBOYW1lc3BhY2UucmVvcGVuQ2xhc3MoewotICAgIE5B
TUVTUEFDRVM6IFtfZW1iZXJNZXRhbENvcmUuZGVmYXVsdF0sCi0gICAgTkFNRVNQQUNFU19CWV9J
RDoge30sCi0gICAgUFJPQ0VTU0VEOiBmYWxzZSwKLSAgICBwcm9jZXNzQWxsOiBwcm9jZXNzQWxs
TmFtZXNwYWNlcywKLSAgICBieU5hbWU6IGZ1bmN0aW9uIChuYW1lKSB7Ci0gICAgICBpZiAoIV9l
bWJlck1ldGFsQ29yZS5kZWZhdWx0LkJPT1RFRCkgewotICAgICAgICBwcm9jZXNzQWxsTmFtZXNw
YWNlcygpOwotICAgICAgfQotCi0gICAgICByZXR1cm4gTkFNRVNQQUNFU19CWV9JRFtuYW1lXTsK
LSAgICB9Ci0gIH0pOwotCi0gIHZhciBOQU1FU1BBQ0VTX0JZX0lEID0gTmFtZXNwYWNlLk5BTUVT
UEFDRVNfQllfSUQ7Ci0KLSAgdmFyIGhhc093blByb3AgPSAoe30pLmhhc093blByb3BlcnR5Owot
Ci0gIGZ1bmN0aW9uIHByb2Nlc3NOYW1lc3BhY2UocGF0aHMsIHJvb3QsIHNlZW4pIHsKLSAgICB2
YXIgaWR4ID0gcGF0aHMubGVuZ3RoOwotCi0gICAgTkFNRVNQQUNFU19CWV9JRFtwYXRocy5qb2lu
KCcuJyldID0gcm9vdDsKLQotICAgIC8vIExvb3Agb3ZlciBhbGwgb2YgdGhlIGtleXMgaW4gdGhl
IG5hbWVzcGFjZSwgbG9va2luZyBmb3IgY2xhc3NlcwotICAgIGZvciAodmFyIGtleSBpbiByb290
KSB7Ci0gICAgICBpZiAoIWhhc093blByb3AuY2FsbChyb290LCBrZXkpKSB7Ci0gICAgICAgIGNv
bnRpbnVlOwotICAgICAgfQotICAgICAgdmFyIG9iaiA9IHJvb3Rba2V5XTsKLQotICAgICAgLy8g
SWYgd2UgYXJlIHByb2Nlc3NpbmcgdGhlIGBFbWJlcmAgbmFtZXNwYWNlLCBmb3IgZXhhbXBsZSwg
dGhlCi0gICAgICAvLyBgcGF0aHNgIHdpbGwgc3RhcnQgd2l0aCBgWyJFbWJlciJdYC4gRXZlcnkg
aXRlcmF0aW9uIHRocm91Z2gKLSAgICAgIC8vIHRoZSBsb29wIHdpbGwgdXBkYXRlIHRoZSAqKnNl
Y29uZCoqIGVsZW1lbnQgb2YgdGhpcyBsaXN0IHdpdGgKLSAgICAgIC8vIHRoZSBrZXksIHNvIHBy
b2Nlc3NpbmcgYEVtYmVyLlZpZXdgIHdpbGwgbWFrZSB0aGUgQXJyYXkKLSAgICAgIC8vIGBbJ0Vt
YmVyJywgJ1ZpZXcnXWAuCi0gICAgICBwYXRoc1tpZHhdID0ga2V5OwotCi0gICAgICAvLyBJZiB3
ZSBoYXZlIGZvdW5kIGFuIHVucHJvY2Vzc2VkIGNsYXNzCi0gICAgICBpZiAob2JqICYmIG9iai50
b1N0cmluZyA9PT0gY2xhc3NUb1N0cmluZyAmJiAhb2JqW05BTUVfS0VZXSkgewotICAgICAgICAv
LyBSZXBsYWNlIHRoZSBjbGFzcycgYHRvU3RyaW5nYCB3aXRoIHRoZSBkb3Qtc2VwYXJhdGVkIHBh
dGgKLSAgICAgICAgLy8gYW5kIHNldCBpdHMgYE5BTUVfS0VZYAotICAgICAgICBvYmpbTkFNRV9L
RVldID0gcGF0aHMuam9pbignLicpOwotCi0gICAgICAgIC8vIFN1cHBvcnQgbmVzdGVkIG5hbWVz
cGFjZXMKLSAgICAgIH0gZWxzZSBpZiAob2JqICYmIG9iai5pc05hbWVzcGFjZSkgewotICAgICAg
ICAgIC8vIFNraXAgYWxpYXNlZCBuYW1lc3BhY2VzCi0gICAgICAgICAgaWYgKHNlZW5bX2VtYmVy
TWV0YWxVdGlscy5ndWlkRm9yKG9iaildKSB7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICB9Ci0gICAgICAgICAgc2VlbltfZW1iZXJNZXRhbFV0aWxzLmd1aWRGb3Iob2JqKV0gPSB0
cnVlOwotCi0gICAgICAgICAgLy8gUHJvY2VzcyB0aGUgY2hpbGQgbmFtZXNwYWNlCi0gICAgICAg
ICAgcHJvY2Vzc05hbWVzcGFjZShwYXRocywgb2JqLCBzZWVuKTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIHBhdGhzLmxlbmd0aCA9IGlkeDsgLy8gY3V0IG91dCBsYXN0IGl0ZW0KLSAgfQotCi0g
IHZhciBTVEFSVFNfV0lUSF9VUFBFUkNBU0UgPSAvXltBLVpdLzsKLQotICBmdW5jdGlvbiB0cnlJ
c05hbWVzcGFjZShsb29rdXAsIHByb3ApIHsKLSAgICB0cnkgewotICAgICAgdmFyIG9iaiA9IGxv
b2t1cFtwcm9wXTsKLSAgICAgIHJldHVybiBvYmogJiYgb2JqLmlzTmFtZXNwYWNlICYmIG9iajsK
LSAgICB9IGNhdGNoIChlKSB7Ci0gICAgICAvLyBjb250aW51ZQotICAgIH0KLSAgfQotCi0gIGZ1
bmN0aW9uIGZpbmROYW1lc3BhY2VzKCkgewotICAgIHZhciBsb29rdXAgPSBfZW1iZXJNZXRhbENv
cmUuZGVmYXVsdC5sb29rdXA7Ci0gICAgdmFyIG9iajsKLQotICAgIGlmIChOYW1lc3BhY2UuUFJP
Q0VTU0VEKSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZm9yICh2YXIgcHJvcCBpbiBs
b29rdXApIHsKLSAgICAgIC8vIE9ubHkgcHJvY2VzcyBlbnRpdGllcyB0aGF0IHN0YXJ0IHdpdGgg
dXBwZXJjYXNlIEEtWgotICAgICAgaWYgKCFTVEFSVFNfV0lUSF9VUFBFUkNBU0UudGVzdChwcm9w
KSkgewotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLQotICAgICAgLy8gVW5mb3J0dW5hdGVs
eSwgc29tZSB2ZXJzaW9ucyBvZiBJRSBkb24ndCBzdXBwb3J0IHdpbmRvdy5oYXNPd25Qcm9wZXJ0
eQotICAgICAgaWYgKGxvb2t1cC5oYXNPd25Qcm9wZXJ0eSAmJiAhbG9va3VwLmhhc093blByb3Bl
cnR5KHByb3ApKSB7Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAgfQotCi0gICAgICAvLyBBdCB0
aW1lcyB3ZSBhcmUgbm90IGFsbG93ZWQgdG8gYWNjZXNzIGNlcnRhaW4gcHJvcGVydGllcyBmb3Ig
c2VjdXJpdHkgcmVhc29ucy4KLSAgICAgIC8vIFRoZXJlIGFyZSBhbHNvIHRpbWVzIHdoZXJlIGV2
ZW4gaWYgd2UgY2FuIGFjY2VzcyB0aGVtLCB3ZSBhcmUgbm90IGFsbG93ZWQgdG8gYWNjZXNzIHRo
ZWlyIHByb3BlcnRpZXMuCi0gICAgICBvYmogPSB0cnlJc05hbWVzcGFjZShsb29rdXAsIHByb3Ap
OwotICAgICAgaWYgKG9iaikgewotICAgICAgICBvYmpbTkFNRV9LRVldID0gcHJvcDsKLSAgICAg
IH0KLSAgICB9Ci0gIH0KLQotICB2YXIgTkFNRV9LRVkgPSBfZW1iZXJNZXRhbENvcmUuZGVmYXVs
dC5OQU1FX0tFWSA9IF9lbWJlck1ldGFsVXRpbHMuR1VJRF9LRVkgKyAnX25hbWUnOwotCi0gIGZ1
bmN0aW9uIHN1cGVyQ2xhc3NTdHJpbmcobWl4aW4pIHsKLSAgICB2YXIgc3VwZXJjbGFzcyA9IG1p
eGluLnN1cGVyY2xhc3M7Ci0gICAgaWYgKHN1cGVyY2xhc3MpIHsKLSAgICAgIGlmIChzdXBlcmNs
YXNzW05BTUVfS0VZXSkgewotICAgICAgICByZXR1cm4gc3VwZXJjbGFzc1tOQU1FX0tFWV07Ci0g
ICAgICB9IGVsc2UgewotICAgICAgICByZXR1cm4gc3VwZXJDbGFzc1N0cmluZyhzdXBlcmNsYXNz
KTsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgcmV0dXJuOwotICAgIH0KLSAgfQotCi0g
IGZ1bmN0aW9uIGNsYXNzVG9TdHJpbmcoKSB7Ci0gICAgaWYgKCFfZW1iZXJNZXRhbENvcmUuZGVm
YXVsdC5CT09URUQgJiYgIXRoaXNbTkFNRV9LRVldKSB7Ci0gICAgICBwcm9jZXNzQWxsTmFtZXNw
YWNlcygpOwotICAgIH0KLQotICAgIHZhciByZXQ7Ci0KLSAgICBpZiAodGhpc1tOQU1FX0tFWV0p
IHsKLSAgICAgIHJldCA9IHRoaXNbTkFNRV9LRVldOwotICAgIH0gZWxzZSBpZiAodGhpcy5fdG9T
dHJpbmcpIHsKLSAgICAgIHJldCA9IHRoaXMuX3RvU3RyaW5nOwotICAgIH0gZWxzZSB7Ci0gICAg
ICB2YXIgc3RyID0gc3VwZXJDbGFzc1N0cmluZyh0aGlzKTsKLSAgICAgIGlmIChzdHIpIHsKLSAg
ICAgICAgcmV0ID0gJyhzdWJjbGFzcyBvZiAnICsgc3RyICsgJyknOwotICAgICAgfSBlbHNlIHsK
LSAgICAgICAgcmV0ID0gJyh1bmtub3duIG1peGluKSc7Ci0gICAgICB9Ci0gICAgICB0aGlzLnRv
U3RyaW5nID0gbWFrZVRvU3RyaW5nKHJldCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJldDsKLSAg
fQotCi0gIGZ1bmN0aW9uIHByb2Nlc3NBbGxOYW1lc3BhY2VzKCkgewotICAgIHZhciB1bnByb2Nl
c3NlZE5hbWVzcGFjZXMgPSAhTmFtZXNwYWNlLlBST0NFU1NFRDsKLSAgICB2YXIgdW5wcm9jZXNz
ZWRNaXhpbnMgPSBfZW1iZXJNZXRhbENvcmUuZGVmYXVsdC5hbnlVbnByb2Nlc3NlZE1peGluczsK
LQotICAgIGlmICh1bnByb2Nlc3NlZE5hbWVzcGFjZXMpIHsKLSAgICAgIGZpbmROYW1lc3BhY2Vz
KCk7Ci0gICAgICBOYW1lc3BhY2UuUFJPQ0VTU0VEID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAo
dW5wcm9jZXNzZWROYW1lc3BhY2VzIHx8IHVucHJvY2Vzc2VkTWl4aW5zKSB7Ci0gICAgICB2YXIg
bmFtZXNwYWNlcyA9IE5hbWVzcGFjZS5OQU1FU1BBQ0VTOwotICAgICAgdmFyIG5hbWVzcGFjZTsK
LQotICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBuYW1lc3BhY2VzLmxlbmd0aDsgaSA8IGw7IGkr
KykgewotICAgICAgICBuYW1lc3BhY2UgPSBuYW1lc3BhY2VzW2ldOwotICAgICAgICBwcm9jZXNz
TmFtZXNwYWNlKFtuYW1lc3BhY2UudG9TdHJpbmcoKV0sIG5hbWVzcGFjZSwge30pOwotICAgICAg
fQotCi0gICAgICBfZW1iZXJNZXRhbENvcmUuZGVmYXVsdC5hbnlVbnByb2Nlc3NlZE1peGlucyA9
IGZhbHNlOwotICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIG1ha2VUb1N0cmluZyhyZXQpIHsKLSAg
ICByZXR1cm4gZnVuY3Rpb24gKCkgewotICAgICAgcmV0dXJuIHJldDsKLSAgICB9OwotICB9Ci0K
LSAgX2VtYmVyTWV0YWxNaXhpbi5NaXhpbi5wcm90b3R5cGUudG9TdHJpbmcgPSBjbGFzc1RvU3Ry
aW5nOyAvLyBFUzZUT0RPOiBhbHRlcmluZyBpbXBvcnRlZCBvYmplY3RzLiBTQkIuCi0KLSAgZXhw
b3J0cy5kZWZhdWx0ID0gTmFtZXNwYWNlOwotfSk7Ci1lbmlmZWQoJ2VtYmVyLXJ1bnRpbWUvc3lz
dGVtL25hdGl2ZV9hcnJheScsIFsnZXhwb3J0cycsICdlbWJlci1tZXRhbC9jb3JlJywgJ2VtYmVy
LW1ldGFsL3JlcGxhY2UnLCAnZW1iZXItbWV0YWwvcHJvcGVydHlfZ2V0JywgJ2VtYmVyLW1ldGFs
L21peGluJywgJ2VtYmVyLXJ1bnRpbWUvbWl4aW5zL2FycmF5JywgJ2VtYmVyLXJ1bnRpbWUvbWl4
aW5zL211dGFibGVfYXJyYXknLCAnZW1iZXItcnVudGltZS9taXhpbnMvb2JzZXJ2YWJsZScsICdl
bWJlci1ydW50aW1lL21peGlucy9jb3B5YWJsZScsICdlbWJlci1ydW50aW1lL21peGlucy9mcmVl
emFibGUnLCAnZW1iZXItcnVudGltZS9jb3B5J10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJN
ZXRhbENvcmUsIF9lbWJlck1ldGFsUmVwbGFjZSwgX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQsIF9l
bWJlck1ldGFsTWl4aW4sIF9lbWJlclJ1bnRpbWVNaXhpbnNBcnJheSwgX2VtYmVyUnVudGltZU1p
eGluc011dGFibGVfYXJyYXksIF9lbWJlclJ1bnRpbWVNaXhpbnNPYnNlcnZhYmxlLCBfZW1iZXJS
dW50aW1lTWl4aW5zQ29weWFibGUsIF9lbWJlclJ1bnRpbWVNaXhpbnNGcmVlemFibGUsIF9lbWJl
clJ1bnRpbWVDb3B5KSB7Ci0gIC8qKgotICBAbW9kdWxlIGVtYmVyCi0gIEBzdWJtb2R1bGUgZW1i
ZXItcnVudGltZQotICAqLwotCi0gICd1c2Ugc3RyaWN0JzsKLQotICAvLyBBZGQgRW1iZXIuQXJy
YXkgdG8gQXJyYXkucHJvdG90eXBlLiBSZW1vdmUgbWV0aG9kcyB3aXRoIG5hdGl2ZQotICAvLyBp
bXBsZW1lbnRhdGlvbnMgYW5kIHN1cHBseSBzb21lIG1vcmUgb3B0aW1pemVkIHZlcnNpb25zIG9m
IGdlbmVyaWMgbWV0aG9kcwotICAvLyBiZWNhdXNlIHRoZXkgYXJlIHNvIGNvbW1vbi4KLQotICAv
KioKLSAgICBUaGUgTmF0aXZlQXJyYXkgbWl4aW4gY29udGFpbnMgdGhlIHByb3BlcnRpZXMgbmVl
ZGVkIHRvIG1ha2UgdGhlIG5hdGl2ZQotICAgIEFycmF5IHN1cHBvcnQgRW1iZXIuTXV0YWJsZUFy
cmF5IGFuZCBhbGwgb2YgaXRzIGRlcGVuZGVudCBBUElzLiBVbmxlc3MgeW91Ci0gICAgaGF2ZSBg
RW1iZXIuRVhURU5EX1BST1RPVFlQRVNgIG9yIGBFbWJlci5FWFRFTkRfUFJPVE9UWVBFUy5BcnJh
eWAgc2V0IHRvCi0gICAgZmFsc2UsIHRoaXMgd2lsbCBiZSBhcHBsaWVkIGF1dG9tYXRpY2FsbHku
IE90aGVyd2lzZSB5b3UgY2FuIGFwcGx5IHRoZSBtaXhpbgotICAgIGF0IGFueXRpbWUgYnkgY2Fs
bGluZyBgRW1iZXIuTmF0aXZlQXJyYXkuYXBwbHkoQXJyYXkucHJvdG90eXBlKWAuCi0gIAotICAg
IEBjbGFzcyBOYXRpdmVBcnJheQotICAgIEBuYW1lc3BhY2UgRW1iZXIKLSAgICBAdXNlcyBFbWJl
ci5NdXRhYmxlQXJyYXkKLSAgICBAdXNlcyBFbWJlci5PYnNlcnZhYmxlCi0gICAgQHVzZXMgRW1i
ZXIuQ29weWFibGUKLSAgICBAcHVibGljCi0gICovCi0gIHZhciBOYXRpdmVBcnJheSA9IF9lbWJl
ck1ldGFsTWl4aW4uTWl4aW4uY3JlYXRlKF9lbWJlclJ1bnRpbWVNaXhpbnNNdXRhYmxlX2FycmF5
LmRlZmF1bHQsIF9lbWJlclJ1bnRpbWVNaXhpbnNPYnNlcnZhYmxlLmRlZmF1bHQsIF9lbWJlclJ1
bnRpbWVNaXhpbnNDb3B5YWJsZS5kZWZhdWx0LCB7Ci0KLSAgICAvLyBiZWNhdXNlIGxlbmd0aCBp
cyBhIGJ1aWx0LWluIHByb3BlcnR5IHdlIG5lZWQgdG8ga25vdyB0byBqdXN0IGdldCB0aGUKLSAg
ICAvLyBvcmlnaW5hbCBwcm9wZXJ0eS4KLSAgICBnZXQ6IGZ1bmN0aW9uIChrZXkpIHsKLSAgICAg
IGlmIChrZXkgPT09ICdsZW5ndGgnKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLmxlbmd0aDsKLSAg
ICAgIH0gZWxzZSBpZiAoJ251bWJlcicgPT09IHR5cGVvZiBrZXkpIHsKLSAgICAgICAgcmV0dXJu
IHRoaXNba2V5XTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9zdXBlcihr
ZXkpOwotICAgICAgfQotICAgIH0sCi0KLSAgICBvYmplY3RBdDogZnVuY3Rpb24gKGlkeCkgewot
ICAgICAgcmV0dXJuIHRoaXNbaWR4XTsKLSAgICB9LAotCi0gICAgLy8gcHJpbWl0aXZlIGZvciBh
cnJheSBzdXBwb3J0LgotICAgIHJlcGxhY2U6IGZ1bmN0aW9uIChpZHgsIGFtdCwgb2JqZWN0cykg
ewotICAgICAgaWYgKHRoaXMuaXNGcm96ZW4pIHsKLSAgICAgICAgdGhyb3cgX2VtYmVyUnVudGlt
ZU1peGluc0ZyZWV6YWJsZS5GUk9aRU5fRVJST1I7Ci0gICAgICB9Ci0KLSAgICAgIC8vIGlmIHdl
IHJlcGxhY2VkIGV4YWN0bHkgdGhlIHNhbWUgbnVtYmVyIG9mIGl0ZW1zLCB0aGVuIHBhc3Mgb25s
eSB0aGUKLSAgICAgIC8vIHJlcGxhY2VkIHJhbmdlLiBPdGhlcndpc2UsIHBhc3MgdGhlIGZ1bGwg
cmVtYWluaW5nIGFycmF5IGxlbmd0aAotICAgICAgLy8gc2luY2UgZXZlcnl0aGluZyBoYXMgc2hp
ZnRlZAotICAgICAgdmFyIGxlbiA9IG9iamVjdHMgPyBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5n
ZXQob2JqZWN0cywgJ2xlbmd0aCcpIDogMDsKLSAgICAgIHRoaXMuYXJyYXlDb250ZW50V2lsbENo
YW5nZShpZHgsIGFtdCwgbGVuKTsKLQotICAgICAgaWYgKGxlbiA9PT0gMCkgewotICAgICAgICB0
aGlzLnNwbGljZShpZHgsIGFtdCk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBfZW1iZXJNZXRh
bFJlcGxhY2UuX3JlcGxhY2UodGhpcywgaWR4LCBhbXQsIG9iamVjdHMpOwotICAgICAgfQotCi0g
ICAgICB0aGlzLmFycmF5Q29udGVudERpZENoYW5nZShpZHgsIGFtdCwgbGVuKTsKLSAgICAgIHJl
dHVybiB0aGlzOwotICAgIH0sCi0KLSAgICAvLyBJZiB5b3UgYXNrIGZvciBhbiB1bmtub3duIHBy
b3BlcnR5LCB0aGVuIHRyeSB0byBjb2xsZWN0IHRoZSB2YWx1ZQotICAgIC8vIGZyb20gbWVtYmVy
IGl0ZW1zLgotICAgIHVua25vd25Qcm9wZXJ0eTogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHsKLSAg
ICAgIHZhciByZXQ7IC8vID0gdGhpcy5yZWR1Y2VkUHJvcGVydHkoa2V5LCB2YWx1ZSk7Ci0gICAg
ICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiByZXQgPT09IHVuZGVmaW5lZCkgewotICAgICAg
ICByZXQgPSB0aGlzW2tleV0gPSB2YWx1ZTsKLSAgICAgIH0KLSAgICAgIHJldHVybiByZXQ7Ci0g
ICAgfSwKLQotICAgIGluZGV4T2Y6IEFycmF5LnByb3RvdHlwZS5pbmRleE9mLAotICAgIGxhc3RJ
bmRleE9mOiBBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YsCi0KLSAgICBjb3B5OiBmdW5jdGlv
biAoZGVlcCkgewotICAgICAgaWYgKGRlZXApIHsKLSAgICAgICAgcmV0dXJuIHRoaXMubWFwKGZ1
bmN0aW9uIChpdGVtKSB7Ci0gICAgICAgICAgcmV0dXJuIF9lbWJlclJ1bnRpbWVDb3B5LmRlZmF1
bHQoaXRlbSwgdHJ1ZSk7Ci0gICAgICAgIH0pOwotICAgICAgfQotCi0gICAgICByZXR1cm4gdGhp
cy5zbGljZSgpOwotICAgIH0KLSAgfSk7Ci0KLSAgLy8gUmVtb3ZlIGFueSBtZXRob2RzIGltcGxl
bWVudGVkIG5hdGl2ZWx5IHNvIHdlIGRvbid0IG92ZXJyaWRlIHRoZW0KLSAgdmFyIGlnbm9yZSA9
IFsnbGVuZ3RoJ107Ci0gIE5hdGl2ZUFycmF5LmtleXMoKS5mb3JFYWNoKGZ1bmN0aW9uIChtZXRo
b2ROYW1lKSB7Ci0gICAgaWYgKEFycmF5LnByb3RvdHlwZVttZXRob2ROYW1lXSkgewotICAgICAg
aWdub3JlLnB1c2gobWV0aG9kTmFtZSk7Ci0gICAgfQotICB9KTsKLQotICBleHBvcnRzLk5hdGl2
ZUFycmF5IC8vIFRPRE86IG9ubHkgdXNlIGRlZmF1bHQgZXhwb3J0Ci0gICA9IE5hdGl2ZUFycmF5
ID0gTmF0aXZlQXJyYXkud2l0aG91dC5hcHBseShOYXRpdmVBcnJheSwgaWdub3JlKTsKLQotICAv
KioKLSAgICBDcmVhdGVzIGFuIGBFbWJlci5OYXRpdmVBcnJheWAgZnJvbSBhbiBBcnJheSBsaWtl
IG9iamVjdC4KLSAgICBEb2VzIG5vdCBtb2RpZnkgdGhlIG9yaWdpbmFsIG9iamVjdC4gRW1iZXIu
QSBpcyBub3QgbmVlZGVkIGlmCi0gICAgYEVtYmVyLkVYVEVORF9QUk9UT1RZUEVTYCBpcyBgdHJ1
ZWAgKHRoZSBkZWZhdWx0IHZhbHVlKS4gSG93ZXZlciwKLSAgICBpdCBpcyByZWNvbW1lbmRlZCB0
aGF0IHlvdSB1c2UgRW1iZXIuQSB3aGVuIGNyZWF0aW5nIGFkZG9ucyBmb3IKLSAgICBlbWJlciBv
ciB3aGVuIHlvdSBjYW4gbm90IGd1YXJhbnRlZSB0aGF0IGBFbWJlci5FWFRFTkRfUFJPVE9UWVBF
U2AKLSAgICB3aWxsIGJlIGB0cnVlYC4KLSAgCi0gICAgRXhhbXBsZQotICAKLSAgICBgYGBqcwot
ICAgIGV4cG9ydCBkZWZhdWx0IEVtYmVyLkNvbXBvbmVudC5leHRlbmQoewotICAgICAgdGFnTmFt
ZTogJ3VsJywKLSAgICAgIGNsYXNzTmFtZXM6IFsncGFnaW5hdGlvbiddLAotICAKLSAgICAgIGlu
aXQoKSB7Ci0gICAgICAgIHRoaXMuX3N1cGVyKC4uLmFyZ3VtZW50cyk7Ci0gIAotICAgICAgICBp
ZiAoIXRoaXMuZ2V0KCdjb250ZW50JykpIHsKLSAgICAgICAgICB0aGlzLnNldCgnY29udGVudCcs
IEVtYmVyLkEoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9KTsKLSAgICBgYGAKLSAgCi0g
ICAgQG1ldGhvZCBBCi0gICAgQGZvciBFbWJlcgotICAgIEByZXR1cm4ge0VtYmVyLk5hdGl2ZUFy
cmF5fQotICAgIEBwdWJsaWMKLSAgKi8KLSAgdmFyIEE7Ci0KLSAgaWYgKF9lbWJlck1ldGFsQ29y
ZS5kZWZhdWx0LkVYVEVORF9QUk9UT1RZUEVTID09PSB0cnVlIHx8IF9lbWJlck1ldGFsQ29yZS5k
ZWZhdWx0LkVYVEVORF9QUk9UT1RZUEVTLkFycmF5KSB7Ci0gICAgTmF0aXZlQXJyYXkuYXBwbHko
QXJyYXkucHJvdG90eXBlKTsKLSAgICBleHBvcnRzLiAvLyBFUzZUT0RPOiBTZXR0aW5nIEEgb250
byB0aGUgb2JqZWN0IHJldHVybmVkIGJ5IGVtYmVyLW1ldGFsL2NvcmUgdG8gYXZvaWQgY2lyY2xl
cwotICAgIEEgPSBBID0gZnVuY3Rpb24gKGFycikgewotICAgICAgcmV0dXJuIGFyciB8fCBbXTsK
LSAgICB9OwotICB9IGVsc2UgewotICAgIGV4cG9ydHMuQSA9IEEgPSBmdW5jdGlvbiAoYXJyKSB7
Ci0gICAgICBpZiAoIWFycikgewotICAgICAgICBhcnIgPSBbXTsKLSAgICAgIH0KLSAgICAgIHJl
dHVybiBfZW1iZXJSdW50aW1lTWl4aW5zQXJyYXkuZGVmYXVsdC5kZXRlY3QoYXJyKSA/IGFyciA6
IE5hdGl2ZUFycmF5LmFwcGx5KGFycik7Ci0gICAgfTsKLSAgfQotCi0gIF9lbWJlck1ldGFsQ29y
ZS5kZWZhdWx0LkEgPSBBO2V4cG9ydHMuQSA9IEE7Ci0gIGV4cG9ydHMuTmF0aXZlQXJyYXkgPSBO
YXRpdmVBcnJheTsKLSAgZXhwb3J0cy5kZWZhdWx0ID0gTmF0aXZlQXJyYXk7Ci19KTsKLS8vIEVt
YmVyLkVYVEVORF9QUk9UT1RZUEVTCi1lbmlmZWQoJ2VtYmVyLXJ1bnRpbWUvc3lzdGVtL29iamVj
dCcsIFsnZXhwb3J0cycsICdlbWJlci1ydW50aW1lL3N5c3RlbS9jb3JlX29iamVjdCcsICdlbWJl
ci1ydW50aW1lL21peGlucy9vYnNlcnZhYmxlJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJS
dW50aW1lU3lzdGVtQ29yZV9vYmplY3QsIF9lbWJlclJ1bnRpbWVNaXhpbnNPYnNlcnZhYmxlKSB7
Ci0gIC8qKgotICBAbW9kdWxlIGVtYmVyCi0gIEBzdWJtb2R1bGUgZW1iZXItcnVudGltZQotICAq
LwotCi0gICd1c2Ugc3RyaWN0JzsKLQotICAvKioKLSAgICBgRW1iZXIuT2JqZWN0YCBpcyB0aGUg
bWFpbiBiYXNlIGNsYXNzIGZvciBhbGwgRW1iZXIgb2JqZWN0cy4gSXQgaXMgYSBzdWJjbGFzcwot
ICAgIG9mIGBFbWJlci5Db3JlT2JqZWN0YCB3aXRoIHRoZSBgRW1iZXIuT2JzZXJ2YWJsZWAgbWl4
aW4gYXBwbGllZC4gRm9yIGRldGFpbHMsCi0gICAgc2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciBl
YWNoIG9mIHRoZXNlLgotICAKLSAgICBAY2xhc3MgT2JqZWN0Ci0gICAgQG5hbWVzcGFjZSBFbWJl
cgotICAgIEBleHRlbmRzIEVtYmVyLkNvcmVPYmplY3QKLSAgICBAdXNlcyBFbWJlci5PYnNlcnZh
YmxlCi0gICAgQHB1YmxpYwotICAqLwotICB2YXIgRW1iZXJPYmplY3QgPSBfZW1iZXJSdW50aW1l
U3lzdGVtQ29yZV9vYmplY3QuZGVmYXVsdC5leHRlbmQoX2VtYmVyUnVudGltZU1peGluc09ic2Vy
dmFibGUuZGVmYXVsdCk7Ci0gIEVtYmVyT2JqZWN0LnRvU3RyaW5nID0gZnVuY3Rpb24gKCkgewot
ICAgIHJldHVybiAnRW1iZXIuT2JqZWN0JzsKLSAgfTsKLQotICBleHBvcnRzLmRlZmF1bHQgPSBF
bWJlck9iamVjdDsKLX0pOwotZW5pZmVkKCdlbWJlci1ydW50aW1lL3N5c3RlbS9vYmplY3RfcHJv
eHknLCBbJ2V4cG9ydHMnLCAnZW1iZXItcnVudGltZS9zeXN0ZW0vb2JqZWN0JywgJ2VtYmVyLXJ1
bnRpbWUvbWl4aW5zLy1wcm94eSddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyUnVudGltZVN5
c3RlbU9iamVjdCwgX2VtYmVyUnVudGltZU1peGluc1Byb3h5KSB7Ci0gICd1c2Ugc3RyaWN0JzsK
LQotICAvKioKLSAgICBgRW1iZXIuT2JqZWN0UHJveHlgIGZvcndhcmRzIGFsbCBwcm9wZXJ0aWVz
IG5vdCBkZWZpbmVkIGJ5IHRoZSBwcm94eSBpdHNlbGYKLSAgICB0byBhIHByb3hpZWQgYGNvbnRl
bnRgIG9iamVjdC4KLSAgCi0gICAgYGBgamF2YXNjcmlwdAotICAgIG9iamVjdCA9IEVtYmVyLk9i
amVjdC5jcmVhdGUoewotICAgICAgbmFtZTogJ0ZvbycKLSAgICB9KTsKLSAgCi0gICAgcHJveHkg
PSBFbWJlci5PYmplY3RQcm94eS5jcmVhdGUoewotICAgICAgY29udGVudDogb2JqZWN0Ci0gICAg
fSk7Ci0gIAotICAgIC8vIEFjY2VzcyBhbmQgY2hhbmdlIGV4aXN0aW5nIHByb3BlcnRpZXMKLSAg
ICBwcm94eS5nZXQoJ25hbWUnKSAgICAgICAgICAvLyAnRm9vJwotICAgIHByb3h5LnNldCgnbmFt
ZScsICdCYXInKTsKLSAgICBvYmplY3QuZ2V0KCduYW1lJykgICAgICAgICAvLyAnQmFyJwotICAK
LSAgICAvLyBDcmVhdGUgbmV3ICdkZXNjcmlwdGlvbicgcHJvcGVydHkgb24gYG9iamVjdGAKLSAg
ICBwcm94eS5zZXQoJ2Rlc2NyaXB0aW9uJywgJ0ZvbyBpcyBhIHdoaXpib28gYmF6Jyk7Ci0gICAg
b2JqZWN0LmdldCgnZGVzY3JpcHRpb24nKSAgLy8gJ0ZvbyBpcyBhIHdoaXpib28gYmF6JwotICAg
IGBgYAotICAKLSAgICBXaGlsZSBgY29udGVudGAgaXMgdW5zZXQsIHNldHRpbmcgYSBwcm9wZXJ0
eSB0byBiZSBkZWxlZ2F0ZWQgd2lsbCB0aHJvdyBhbgotICAgIEVycm9yLgotICAKLSAgICBgYGBq
YXZhc2NyaXB0Ci0gICAgcHJveHkgPSBFbWJlci5PYmplY3RQcm94eS5jcmVhdGUoewotICAgICAg
Y29udGVudDogbnVsbCwKLSAgICAgIGZsYWc6IG51bGwKLSAgICB9KTsKLSAgICBwcm94eS5zZXQo
J2ZsYWcnLCB0cnVlKTsKLSAgICBwcm94eS5nZXQoJ2ZsYWcnKTsgICAgICAgICAvLyB0cnVlCi0g
ICAgcHJveHkuZ2V0KCdmb28nKTsgICAgICAgICAgLy8gdW5kZWZpbmVkCi0gICAgcHJveHkuc2V0
KCdmb28nLCAnZGF0YScpOyAgLy8gdGhyb3dzIEVycm9yCi0gICAgYGBgCi0gIAotICAgIERlbGVn
YXRlZCBwcm9wZXJ0aWVzIGNhbiBiZSBib3VuZCB0byBhbmQgd2lsbCBjaGFuZ2Ugd2hlbiBjb250
ZW50IGlzIHVwZGF0ZWQuCi0gIAotICAgIENvbXB1dGVkIHByb3BlcnRpZXMgb24gdGhlIHByb3h5
IGl0c2VsZiBjYW4gZGVwZW5kIG9uIGRlbGVnYXRlZCBwcm9wZXJ0aWVzLgotICAKLSAgICBgYGBq
YXZhc2NyaXB0Ci0gICAgUHJveHlXaXRoQ29tcHV0ZWRQcm9wZXJ0eSA9IEVtYmVyLk9iamVjdFBy
b3h5LmV4dGVuZCh7Ci0gICAgICBmdWxsTmFtZTogZnVuY3Rpb24oKSB7Ci0gICAgICAgIHZhciBm
aXJzdE5hbWUgPSB0aGlzLmdldCgnZmlyc3ROYW1lJyksCi0gICAgICAgICAgICBsYXN0TmFtZSA9
IHRoaXMuZ2V0KCdsYXN0TmFtZScpOwotICAgICAgICBpZiAoZmlyc3ROYW1lICYmIGxhc3ROYW1l
KSB7Ci0gICAgICAgICAgcmV0dXJuIGZpcnN0TmFtZSArICcgJyArIGxhc3ROYW1lOwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiBmaXJzdE5hbWUgfHwgbGFzdE5hbWU7Ci0gICAgICB9LnByb3Bl
cnR5KCdmaXJzdE5hbWUnLCAnbGFzdE5hbWUnKQotICAgIH0pOwotICAKLSAgICBwcm94eSA9IFBy
b3h5V2l0aENvbXB1dGVkUHJvcGVydHkuY3JlYXRlKCk7Ci0gIAotICAgIHByb3h5LmdldCgnZnVs
bE5hbWUnKTsgIC8vIHVuZGVmaW5lZAotICAgIHByb3h5LnNldCgnY29udGVudCcsIHsKLSAgICAg
IGZpcnN0TmFtZTogJ1RvbScsIGxhc3ROYW1lOiAnRGFsZScKLSAgICB9KTsgLy8gdHJpZ2dlcnMg
cHJvcGVydHkgY2hhbmdlIGZvciBmdWxsTmFtZSBvbiBwcm94eQotICAKLSAgICBwcm94eS5nZXQo
J2Z1bGxOYW1lJyk7ICAvLyAnVG9tIERhbGUnCi0gICAgYGBgCi0gIAotICAgIEBjbGFzcyBPYmpl
Y3RQcm94eQotICAgIEBuYW1lc3BhY2UgRW1iZXIKLSAgICBAZXh0ZW5kcyBFbWJlci5PYmplY3QK
LSAgICBAZXh0ZW5kcyBFbWJlci5fUHJveHlNaXhpbgotICAgIEBwdWJsaWMKLSAgKi8KLQotICBl
eHBvcnRzLmRlZmF1bHQgPSBfZW1iZXJSdW50aW1lU3lzdGVtT2JqZWN0LmRlZmF1bHQuZXh0ZW5k
KF9lbWJlclJ1bnRpbWVNaXhpbnNQcm94eS5kZWZhdWx0KTsKLX0pOwotZW5pZmVkKCdlbWJlci1y
dW50aW1lL3N5c3RlbS9zZXJ2aWNlJywgWydleHBvcnRzJywgJ2VtYmVyLXJ1bnRpbWUvc3lzdGVt
L29iamVjdCcsICdlbWJlci1ydW50aW1lL2luamVjdCddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2Vt
YmVyUnVudGltZVN5c3RlbU9iamVjdCwgX2VtYmVyUnVudGltZUluamVjdCkgewotICAndXNlIHN0
cmljdCc7Ci0KLSAgLyoqCi0gICAgQ3JlYXRlcyBhIHByb3BlcnR5IHRoYXQgbGF6aWx5IGxvb2tz
IHVwIGEgc2VydmljZSBpbiB0aGUgY29udGFpbmVyLiBUaGVyZQotICAgIGFyZSBubyByZXN0cmlj
dGlvbnMgYXMgdG8gd2hhdCBvYmplY3RzIGEgc2VydmljZSBjYW4gYmUgaW5qZWN0ZWQgaW50by4K
LSAgCi0gICAgRXhhbXBsZToKLSAgCi0gICAgYGBgamF2YXNjcmlwdAotICAgIEFwcC5BcHBsaWNh
dGlvblJvdXRlID0gRW1iZXIuUm91dGUuZXh0ZW5kKHsKLSAgICAgIGF1dGhNYW5hZ2VyOiBFbWJl
ci5pbmplY3Quc2VydmljZSgnYXV0aCcpLAotICAKLSAgICAgIG1vZGVsOiBmdW5jdGlvbigpIHsK
LSAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KCdhdXRoTWFuYWdlcicpLmZpbmRDdXJyZW50VXNlcigp
OwotICAgICAgfQotICAgIH0pOwotICAgIGBgYAotICAKLSAgICBUaGlzIGV4YW1wbGUgd2lsbCBj
cmVhdGUgYW4gYGF1dGhNYW5hZ2VyYCBwcm9wZXJ0eSBvbiB0aGUgYXBwbGljYXRpb24gcm91dGUK
LSAgICB0aGF0IGxvb2tzIHVwIHRoZSBgYXV0aGAgc2VydmljZSBpbiB0aGUgY29udGFpbmVyLCBt
YWtpbmcgaXQgZWFzaWx5Ci0gICAgYWNjZXNzaWJsZSBpbiB0aGUgYG1vZGVsYCBob29rLgotICAK
LSAgICBAbWV0aG9kIHNlcnZpY2UKLSAgICBAc2luY2UgMS4xMC4wCi0gICAgQGZvciBFbWJlci5p
bmplY3QKLSAgICBAcGFyYW0ge1N0cmluZ30gbmFtZSAob3B0aW9uYWwpIG5hbWUgb2YgdGhlIHNl
cnZpY2UgdG8gaW5qZWN0LCBkZWZhdWx0cyB0bwotICAgICAgICAgICB0aGUgcHJvcGVydHkncyBu
YW1lCi0gICAgQHJldHVybiB7RW1iZXIuSW5qZWN0ZWRQcm9wZXJ0eX0gaW5qZWN0aW9uIGRlc2Ny
aXB0b3IgaW5zdGFuY2UKLSAgICBAcHVibGljCi0gICovCi0gIF9lbWJlclJ1bnRpbWVJbmplY3Qu
Y3JlYXRlSW5qZWN0aW9uSGVscGVyKCdzZXJ2aWNlJyk7Ci0KLSAgLyoqCi0gICAgQGNsYXNzIFNl
cnZpY2UKLSAgICBAbmFtZXNwYWNlIEVtYmVyCi0gICAgQGV4dGVuZHMgRW1iZXIuT2JqZWN0Ci0g
ICAgQHNpbmNlIDEuMTAuMAotICAgIEBwdWJsaWMKLSAgKi8KLSAgdmFyIFNlcnZpY2UgPSBfZW1i
ZXJSdW50aW1lU3lzdGVtT2JqZWN0LmRlZmF1bHQuZXh0ZW5kKCk7Ci0KLSAgU2VydmljZS5yZW9w
ZW5DbGFzcyh7Ci0gICAgaXNTZXJ2aWNlRmFjdG9yeTogdHJ1ZQotICB9KTsKLQotICBleHBvcnRz
LmRlZmF1bHQgPSBTZXJ2aWNlOwotfSk7Ci1lbmlmZWQoJ2VtYmVyLXJ1bnRpbWUvc3lzdGVtL3N0
cmluZycsIFsnZXhwb3J0cycsICdlbWJlci1tZXRhbC9kZWJ1ZycsICdlbWJlci1tZXRhbC91dGls
cycsICdlbWJlci1ydW50aW1lL3V0aWxzJywgJ2VtYmVyLXJ1bnRpbWUvc3RyaW5nX3JlZ2lzdHJ5
JywgJ2VtYmVyLW1ldGFsL2NhY2hlJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbERl
YnVnLCBfZW1iZXJNZXRhbFV0aWxzLCBfZW1iZXJSdW50aW1lVXRpbHMsIF9lbWJlclJ1bnRpbWVT
dHJpbmdfcmVnaXN0cnksIF9lbWJlck1ldGFsQ2FjaGUpIHsKLSAgLyoqCi0gIEBtb2R1bGUgZW1i
ZXIKLSAgQHN1Ym1vZHVsZSBlbWJlci1ydW50aW1lCi0gICovCi0gICd1c2Ugc3RyaWN0JzsKLQot
ICB2YXIgU1RSSU5HX0RBU0hFUklaRV9SRUdFWFAgPSAvWyBfXS9nOwotCi0gIHZhciBTVFJJTkdf
REFTSEVSSVpFX0NBQ0hFID0gbmV3IF9lbWJlck1ldGFsQ2FjaGUuZGVmYXVsdCgxMDAwLCBmdW5j
dGlvbiAoa2V5KSB7Ci0gICAgcmV0dXJuIGRlY2FtZWxpemUoa2V5KS5yZXBsYWNlKFNUUklOR19E
QVNIRVJJWkVfUkVHRVhQLCAnLScpOwotICB9KTsKLQotICB2YXIgU1RSSU5HX0NBTUVMSVpFX1JF
R0VYUF8xID0gLyhcLXxcX3xcLnxccykrKC4pPy9nOwotICB2YXIgU1RSSU5HX0NBTUVMSVpFX1JF
R0VYUF8yID0gLyhefFwvKShbQS1aXSkvZzsKLQotICB2YXIgQ0FNRUxJWkVfQ0FDSEUgPSBuZXcg
X2VtYmVyTWV0YWxDYWNoZS5kZWZhdWx0KDEwMDAsIGZ1bmN0aW9uIChrZXkpIHsKLSAgICByZXR1
cm4ga2V5LnJlcGxhY2UoU1RSSU5HX0NBTUVMSVpFX1JFR0VYUF8xLCBmdW5jdGlvbiAobWF0Y2gs
IHNlcGFyYXRvciwgY2hyKSB7Ci0gICAgICByZXR1cm4gY2hyID8gY2hyLnRvVXBwZXJDYXNlKCkg
OiAnJzsKLSAgICB9KS5yZXBsYWNlKFNUUklOR19DQU1FTElaRV9SRUdFWFBfMiwgZnVuY3Rpb24g
KG1hdGNoLCBzZXBhcmF0b3IsIGNocikgewotICAgICAgcmV0dXJuIG1hdGNoLnRvTG93ZXJDYXNl
KCk7Ci0gICAgfSk7Ci0gIH0pOwotCi0gIHZhciBTVFJJTkdfQ0xBU1NJRllfUkVHRVhQXzEgPSAv
XihcLXxfKSsoLik/LzsKLSAgdmFyIFNUUklOR19DTEFTU0lGWV9SRUdFWFBfMiA9IC8oLikoXC18
XF98XC58XHMpKyguKT8vZzsKLSAgdmFyIFNUUklOR19DTEFTU0lGWV9SRUdFWFBfMyA9IC8oXnxc
L3xcLikoW2Etel0pL2c7Ci0KLSAgdmFyIENMQVNTSUZZX0NBQ0hFID0gbmV3IF9lbWJlck1ldGFs
Q2FjaGUuZGVmYXVsdCgxMDAwLCBmdW5jdGlvbiAoc3RyKSB7Ci0gICAgdmFyIHJlcGxhY2UxID0g
ZnVuY3Rpb24gKG1hdGNoLCBzZXBhcmF0b3IsIGNocikgewotICAgICAgcmV0dXJuIGNociA/ICdf
JyArIGNoci50b1VwcGVyQ2FzZSgpIDogJyc7Ci0gICAgfTsKLSAgICB2YXIgcmVwbGFjZTIgPSBm
dW5jdGlvbiAobWF0Y2gsIGluaXRpYWxDaGFyLCBzZXBhcmF0b3IsIGNocikgewotICAgICAgcmV0
dXJuIGluaXRpYWxDaGFyICsgKGNociA/IGNoci50b1VwcGVyQ2FzZSgpIDogJycpOwotICAgIH07
Ci0gICAgdmFyIHBhcnRzID0gc3RyLnNwbGl0KCcvJyk7Ci0gICAgZm9yICh2YXIgaSA9IDAsIGxl
biA9IHBhcnRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgICBwYXJ0c1tpXSA9IHBhcnRz
W2ldLnJlcGxhY2UoU1RSSU5HX0NMQVNTSUZZX1JFR0VYUF8xLCByZXBsYWNlMSkucmVwbGFjZShT
VFJJTkdfQ0xBU1NJRllfUkVHRVhQXzIsIHJlcGxhY2UyKTsKLSAgICB9Ci0gICAgcmV0dXJuIHBh
cnRzLmpvaW4oJy8nKS5yZXBsYWNlKFNUUklOR19DTEFTU0lGWV9SRUdFWFBfMywgZnVuY3Rpb24g
KG1hdGNoLCBzZXBhcmF0b3IsIGNocikgewotICAgICAgcmV0dXJuIG1hdGNoLnRvVXBwZXJDYXNl
KCk7Ci0gICAgfSk7Ci0gIH0pOwotCi0gIHZhciBTVFJJTkdfVU5ERVJTQ09SRV9SRUdFWFBfMSA9
IC8oW2EtelxkXSkoW0EtWl0rKS9nOwotICB2YXIgU1RSSU5HX1VOREVSU0NPUkVfUkVHRVhQXzIg
PSAvXC18XHMrL2c7Ci0KLSAgdmFyIFVOREVSU0NPUkVfQ0FDSEUgPSBuZXcgX2VtYmVyTWV0YWxD
YWNoZS5kZWZhdWx0KDEwMDAsIGZ1bmN0aW9uIChzdHIpIHsKLSAgICByZXR1cm4gc3RyLnJlcGxh
Y2UoU1RSSU5HX1VOREVSU0NPUkVfUkVHRVhQXzEsICckMV8kMicpLnJlcGxhY2UoU1RSSU5HX1VO
REVSU0NPUkVfUkVHRVhQXzIsICdfJykudG9Mb3dlckNhc2UoKTsKLSAgfSk7Ci0KLSAgdmFyIFNU
UklOR19DQVBJVEFMSVpFX1JFR0VYUCA9IC8oXnxcLykoW2Etel0pL2c7Ci0KLSAgdmFyIENBUElU
QUxJWkVfQ0FDSEUgPSBuZXcgX2VtYmVyTWV0YWxDYWNoZS5kZWZhdWx0KDEwMDAsIGZ1bmN0aW9u
IChzdHIpIHsKLSAgICByZXR1cm4gc3RyLnJlcGxhY2UoU1RSSU5HX0NBUElUQUxJWkVfUkVHRVhQ
LCBmdW5jdGlvbiAobWF0Y2gsIHNlcGFyYXRvciwgY2hyKSB7Ci0gICAgICByZXR1cm4gbWF0Y2gu
dG9VcHBlckNhc2UoKTsKLSAgICB9KTsKLSAgfSk7Ci0KLSAgdmFyIFNUUklOR19ERUNBTUVMSVpF
X1JFR0VYUCA9IC8oW2EtelxkXSkoW0EtWl0pL2c7Ci0KLSAgdmFyIERFQ0FNRUxJWkVfQ0FDSEUg
PSBuZXcgX2VtYmVyTWV0YWxDYWNoZS5kZWZhdWx0KDEwMDAsIGZ1bmN0aW9uIChzdHIpIHsKLSAg
ICByZXR1cm4gc3RyLnJlcGxhY2UoU1RSSU5HX0RFQ0FNRUxJWkVfUkVHRVhQLCAnJDFfJDInKS50
b0xvd2VyQ2FzZSgpOwotICB9KTsKLQotICBmdW5jdGlvbiBfZm10KHN0ciwgZm9ybWF0cykgewot
ICAgIHZhciBjYWNoZWRGb3JtYXRzID0gZm9ybWF0czsKLQotICAgIGlmICghX2VtYmVyUnVudGlt
ZVV0aWxzLmlzQXJyYXkoY2FjaGVkRm9ybWF0cykgfHwgYXJndW1lbnRzLmxlbmd0aCA+IDIpIHsK
LSAgICAgIGNhY2hlZEZvcm1hdHMgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpOwot
Ci0gICAgICBmb3IgKHZhciBpID0gMSwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKysp
IHsKLSAgICAgICAgY2FjaGVkRm9ybWF0c1tpIC0gMV0gPSBhcmd1bWVudHNbaV07Ci0gICAgICB9
Ci0gICAgfQotCi0gICAgLy8gZmlyc3QsIHJlcGxhY2UgYW55IE9SREVSRUQgcmVwbGFjZW1lbnRz
LgotICAgIHZhciBpZHggPSAwOyAvLyB0aGUgY3VycmVudCBpbmRleCBmb3Igbm9uLW51bWVyaWNh
bCByZXBsYWNlbWVudHMKLSAgICByZXR1cm4gc3RyLnJlcGxhY2UoLyVAKFswLTldKyk/L2csIGZ1
bmN0aW9uIChzLCBhcmdJbmRleCkgewotICAgICAgYXJnSW5kZXggPSBhcmdJbmRleCA/IHBhcnNl
SW50KGFyZ0luZGV4LCAxMCkgLSAxIDogaWR4Kys7Ci0gICAgICBzID0gY2FjaGVkRm9ybWF0c1th
cmdJbmRleF07Ci0gICAgICByZXR1cm4gcyA9PT0gbnVsbCA/ICcobnVsbCknIDogcyA9PT0gdW5k
ZWZpbmVkID8gJycgOiBfZW1iZXJNZXRhbFV0aWxzLmluc3BlY3Qocyk7Ci0gICAgfSk7Ci0gIH0K
LQotICBmdW5jdGlvbiBmbXQoc3RyLCBmb3JtYXRzKSB7Ci0gICAgX2VtYmVyTWV0YWxEZWJ1Zy5k
ZXByZWNhdGUoJ0VtYmVyLlN0cmluZy5mbXQgaXMgZGVwcmVjYXRlZCwgdXNlIEVTNiB0ZW1wbGF0
ZSBzdHJpbmdzIGluc3RlYWQuJywgZmFsc2UsIHsgaWQ6ICdlbWJlci1zdHJpbmctdXRpbHMuZm10
JywgdW50aWw6ICczLjAuMCcsIHVybDogJ2h0dHA6Ly9iYWJlbGpzLmlvL2RvY3MvbGVhcm4tZXMy
MDE1LyN0ZW1wbGF0ZS1zdHJpbmdzJyB9KTsKLSAgICByZXR1cm4gX2ZtdC5hcHBseSh1bmRlZmlu
ZWQsIGFyZ3VtZW50cyk7Ci0gIH0KLQotICBmdW5jdGlvbiBsb2Moc3RyLCBmb3JtYXRzKSB7Ci0g
ICAgaWYgKCFfZW1iZXJSdW50aW1lVXRpbHMuaXNBcnJheShmb3JtYXRzKSB8fCBhcmd1bWVudHMu
bGVuZ3RoID4gMikgewotICAgICAgZm9ybWF0cyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxs
KGFyZ3VtZW50cywgMSk7Ci0gICAgfQotCi0gICAgc3RyID0gX2VtYmVyUnVudGltZVN0cmluZ19y
ZWdpc3RyeS5nZXQoc3RyKSB8fCBzdHI7Ci0gICAgcmV0dXJuIF9mbXQoc3RyLCBmb3JtYXRzKTsK
LSAgfQotCi0gIGZ1bmN0aW9uIHcoc3RyKSB7Ci0gICAgcmV0dXJuIHN0ci5zcGxpdCgvXHMrLyk7
Ci0gIH0KLQotICBmdW5jdGlvbiBkZWNhbWVsaXplKHN0cikgewotICAgIHJldHVybiBERUNBTUVM
SVpFX0NBQ0hFLmdldChzdHIpOwotICB9Ci0KLSAgZnVuY3Rpb24gZGFzaGVyaXplKHN0cikgewot
ICAgIHJldHVybiBTVFJJTkdfREFTSEVSSVpFX0NBQ0hFLmdldChzdHIpOwotICB9Ci0KLSAgZnVu
Y3Rpb24gY2FtZWxpemUoc3RyKSB7Ci0gICAgcmV0dXJuIENBTUVMSVpFX0NBQ0hFLmdldChzdHIp
OwotICB9Ci0KLSAgZnVuY3Rpb24gY2xhc3NpZnkoc3RyKSB7Ci0gICAgcmV0dXJuIENMQVNTSUZZ
X0NBQ0hFLmdldChzdHIpOwotICB9Ci0KLSAgZnVuY3Rpb24gdW5kZXJzY29yZShzdHIpIHsKLSAg
ICByZXR1cm4gVU5ERVJTQ09SRV9DQUNIRS5nZXQoc3RyKTsKLSAgfQotCi0gIGZ1bmN0aW9uIGNh
cGl0YWxpemUoc3RyKSB7Ci0gICAgcmV0dXJuIENBUElUQUxJWkVfQ0FDSEUuZ2V0KHN0cik7Ci0g
IH0KLQotICAvKioKLSAgICBEZWZpbmVzIHN0cmluZyBoZWxwZXIgbWV0aG9kcyBpbmNsdWRpbmcg
c3RyaW5nIGZvcm1hdHRpbmcgYW5kIGxvY2FsaXphdGlvbi4KLSAgICBVbmxlc3MgYEVtYmVyLkVY
VEVORF9QUk9UT1RZUEVTLlN0cmluZ2AgaXMgYGZhbHNlYCB0aGVzZSBtZXRob2RzIHdpbGwgYWxz
byBiZQotICAgIGFkZGVkIHRvIHRoZSBgU3RyaW5nLnByb3RvdHlwZWAgYXMgd2VsbC4KLSAgCi0g
ICAgQGNsYXNzIFN0cmluZwotICAgIEBuYW1lc3BhY2UgRW1iZXIKLSAgICBAc3RhdGljCi0gICAg
QHB1YmxpYwotICAqLwotICBleHBvcnRzLmRlZmF1bHQgPSB7Ci0gICAgLyoqCi0gICAgICBBcHBs
eSBmb3JtYXR0aW5nIG9wdGlvbnMgdG8gdGhlIHN0cmluZy4gVGhpcyB3aWxsIGxvb2sgZm9yIG9j
Y3VycmVuY2VzCi0gICAgICBvZiAiJUAiIGluIHlvdXIgc3RyaW5nIGFuZCBzdWJzdGl0dXRlIHRo
ZW0gd2l0aCB0aGUgYXJndW1lbnRzIHlvdSBwYXNzIGludG8KLSAgICAgIHRoaXMgbWV0aG9kLiBJ
ZiB5b3Ugd2FudCB0byBjb250cm9sIHRoZSBzcGVjaWZpYyBvcmRlciBvZiByZXBsYWNlbWVudCwK
LSAgICAgIHlvdSBjYW4gYWRkIGEgbnVtYmVyIGFmdGVyIHRoZSBrZXkgYXMgd2VsbCB0byBpbmRp
Y2F0ZSB3aGljaCBhcmd1bWVudAotICAgICAgeW91IHdhbnQgdG8gaW5zZXJ0LgotICAgICAgIE9y
ZGVyZWQgaW5zZXJ0aW9ucyBhcmUgbW9zdCB1c2VmdWwgd2hlbiBidWlsZGluZyBsb2Mgc3RyaW5n
cyB3aGVyZSB2YWx1ZXMKLSAgICAgIHlvdSBuZWVkIHRvIGluc2VydCBtYXkgYXBwZWFyIGluIGRp
ZmZlcmVudCBvcmRlcnMuCi0gICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgIkhlbGxvICVAICVA
Ii5mbXQoJ0pvaG4nLCAnRG9lJyk7ICAgICAvLyAiSGVsbG8gSm9obiBEb2UiCi0gICAgICAiSGVs
bG8gJUAyLCAlQDEiLmZtdCgnSm9obicsICdEb2UnKTsgIC8vICJIZWxsbyBEb2UsIEpvaG4iCi0g
ICAgICBgYGAKLSAgICAgICBAbWV0aG9kIGZtdAotICAgICAgQHBhcmFtIHtTdHJpbmd9IHN0ciBU
aGUgc3RyaW5nIHRvIGZvcm1hdAotICAgICAgQHBhcmFtIHtBcnJheX0gZm9ybWF0cyBBbiBhcnJh
eSBvZiBwYXJhbWV0ZXJzIHRvIGludGVycG9sYXRlIGludG8gc3RyaW5nLgotICAgICAgQHJldHVy
biB7U3RyaW5nfSBmb3JtYXR0ZWQgc3RyaW5nCi0gICAgICBAcHVibGljCi0gICAgICBAZGVwcmVj
YXRlZCBVc2UgRVM2IHRlbXBsYXRlIHN0cmluZ3MgaW5zdGVhZDogaHR0cDovL2JhYmVsanMuaW8v
ZG9jcy9sZWFybi1lczIwMTUvI3RlbXBsYXRlLXN0cmluZ3MKLSAgICAqLwotICAgIGZtdDogZm10
LAotCi0gICAgLyoqCi0gICAgICBGb3JtYXRzIHRoZSBwYXNzZWQgc3RyaW5nLCBidXQgZmlyc3Qg
bG9va3MgdXAgdGhlIHN0cmluZyBpbiB0aGUgbG9jYWxpemVkCi0gICAgICBzdHJpbmdzIGhhc2gu
IFRoaXMgaXMgYSBjb252ZW5pZW50IHdheSB0byBsb2NhbGl6ZSB0ZXh0LiBTZWUKLSAgICAgIGBF
bWJlci5TdHJpbmcuZm10KClgIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGZvcm1hdHRpbmcuCi0g
ICAgICAgTm90ZSB0aGF0IGl0IGlzIHRyYWRpdGlvbmFsIGJ1dCBub3QgcmVxdWlyZWQgdG8gcHJl
Zml4IGxvY2FsaXplZCBzdHJpbmcKLSAgICAgIGtleXMgd2l0aCBhbiB1bmRlcnNjb3JlIG9yIG90
aGVyIGNoYXJhY3RlciBzbyB5b3UgY2FuIGVhc2lseSBpZGVudGlmeQotICAgICAgbG9jYWxpemVk
IHN0cmluZ3MuCi0gICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgRW1iZXIuU1RSSU5HUyA9IHsK
LSAgICAgICAgJ19IZWxsbyBXb3JsZCc6ICdCb25qb3VyIGxlIG1vbmRlJywKLSAgICAgICAgJ19I
ZWxsbyAlQCAlQCc6ICdCb25qb3VyICVAICVAJwotICAgICAgfTsKLSAgICAgICBFbWJlci5TdHJp
bmcubG9jKCJfSGVsbG8gV29ybGQiKTsgIC8vICdCb25qb3VyIGxlIG1vbmRlJzsKLSAgICAgIEVt
YmVyLlN0cmluZy5sb2MoIl9IZWxsbyAlQCAlQCIsIFsiSm9obiIsICJTbWl0aCJdKTsgIC8vICJC
b25qb3VyIEpvaG4gU21pdGgiOwotICAgICAgYGBgCi0gICAgICAgQG1ldGhvZCBsb2MKLSAgICAg
IEBwYXJhbSB7U3RyaW5nfSBzdHIgVGhlIHN0cmluZyB0byBmb3JtYXQKLSAgICAgIEBwYXJhbSB7
QXJyYXl9IGZvcm1hdHMgT3B0aW9uYWwgYXJyYXkgb2YgcGFyYW1ldGVycyB0byBpbnRlcnBvbGF0
ZSBpbnRvIHN0cmluZy4KLSAgICAgIEByZXR1cm4ge1N0cmluZ30gZm9ybWF0dGVkIHN0cmluZwot
ICAgICAgQHB1YmxpYwotICAgICovCi0gICAgbG9jOiBsb2MsCi0KLSAgICAvKioKLSAgICAgIFNw
bGl0cyBhIHN0cmluZyBpbnRvIHNlcGFyYXRlIHVuaXRzIHNlcGFyYXRlZCBieSBzcGFjZXMsIGVs
aW1pbmF0aW5nIGFueQotICAgICAgZW1wdHkgc3RyaW5ncyBpbiB0aGUgcHJvY2Vzcy4gVGhpcyBp
cyBhIGNvbnZlbmllbmNlIG1ldGhvZCBmb3Igc3BsaXQgdGhhdAotICAgICAgaXMgbW9zdGx5IHVz
ZWZ1bCB3aGVuIGFwcGxpZWQgdG8gdGhlIGBTdHJpbmcucHJvdG90eXBlYC4KLSAgICAgICBgYGBq
YXZhc2NyaXB0Ci0gICAgICBFbWJlci5TdHJpbmcudygiYWxwaGEgYmV0YSBnYW1tYSIpLmZvckVh
Y2goZnVuY3Rpb24oa2V5KSB7Ci0gICAgICAgIGNvbnNvbGUubG9nKGtleSk7Ci0gICAgICB9KTsK
LSAgICAgICAvLyA+IGFscGhhCi0gICAgICAvLyA+IGJldGEKLSAgICAgIC8vID4gZ2FtbWEKLSAg
ICAgIGBgYAotICAgICAgIEBtZXRob2QgdwotICAgICAgQHBhcmFtIHtTdHJpbmd9IHN0ciBUaGUg
c3RyaW5nIHRvIHNwbGl0Ci0gICAgICBAcmV0dXJuIHtBcnJheX0gYXJyYXkgY29udGFpbmluZyB0
aGUgc3BsaXQgc3RyaW5ncwotICAgICAgQHB1YmxpYwotICAgICovCi0gICAgdzogdywKLQotICAg
IC8qKgotICAgICAgQ29udmVydHMgYSBjYW1lbGl6ZWQgc3RyaW5nIGludG8gYWxsIGxvd2VyIGNh
c2Ugc2VwYXJhdGVkIGJ5IHVuZGVyc2NvcmVzLgotICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAg
ICdpbm5lckhUTUwnLmRlY2FtZWxpemUoKTsgICAgICAgICAgIC8vICdpbm5lcl9odG1sJwotICAg
ICAgJ2FjdGlvbl9uYW1lJy5kZWNhbWVsaXplKCk7ICAgICAgICAvLyAnYWN0aW9uX25hbWUnCi0g
ICAgICAnY3NzLWNsYXNzLW5hbWUnLmRlY2FtZWxpemUoKTsgICAgIC8vICdjc3MtY2xhc3MtbmFt
ZScKLSAgICAgICdteSBmYXZvcml0ZSBpdGVtcycuZGVjYW1lbGl6ZSgpOyAgLy8gJ215IGZhdm9y
aXRlIGl0ZW1zJwotICAgICAgYGBgCi0gICAgICAgQG1ldGhvZCBkZWNhbWVsaXplCi0gICAgICBA
cGFyYW0ge1N0cmluZ30gc3RyIFRoZSBzdHJpbmcgdG8gZGVjYW1lbGl6ZS4KLSAgICAgIEByZXR1
cm4ge1N0cmluZ30gdGhlIGRlY2FtZWxpemVkIHN0cmluZy4KLSAgICAgIEBwdWJsaWMKLSAgICAq
LwotICAgIGRlY2FtZWxpemU6IGRlY2FtZWxpemUsCi0KLSAgICAvKioKLSAgICAgIFJlcGxhY2Vz
IHVuZGVyc2NvcmVzLCBzcGFjZXMsIG9yIGNhbWVsQ2FzZSB3aXRoIGRhc2hlcy4KLSAgICAgICBg
YGBqYXZhc2NyaXB0Ci0gICAgICAnaW5uZXJIVE1MJy5kYXNoZXJpemUoKTsgICAgICAgICAgLy8g
J2lubmVyLWh0bWwnCi0gICAgICAnYWN0aW9uX25hbWUnLmRhc2hlcml6ZSgpOyAgICAgICAgLy8g
J2FjdGlvbi1uYW1lJwotICAgICAgJ2Nzcy1jbGFzcy1uYW1lJy5kYXNoZXJpemUoKTsgICAgIC8v
ICdjc3MtY2xhc3MtbmFtZScKLSAgICAgICdteSBmYXZvcml0ZSBpdGVtcycuZGFzaGVyaXplKCk7
ICAvLyAnbXktZmF2b3JpdGUtaXRlbXMnCi0gICAgICAncHJpdmF0ZURvY3Mvb3duZXJJbnZvaWNl
Jy5kYXNoZXJpemUoKTsgLy8gJ3ByaXZhdGUtZG9jcy9vd25lci1pbnZvaWNlJwotICAgICAgYGBg
Ci0gICAgICAgQG1ldGhvZCBkYXNoZXJpemUKLSAgICAgIEBwYXJhbSB7U3RyaW5nfSBzdHIgVGhl
IHN0cmluZyB0byBkYXNoZXJpemUuCi0gICAgICBAcmV0dXJuIHtTdHJpbmd9IHRoZSBkYXNoZXJp
emVkIHN0cmluZy4KLSAgICAgIEBwdWJsaWMKLSAgICAqLwotICAgIGRhc2hlcml6ZTogZGFzaGVy
aXplLAotCi0gICAgLyoqCi0gICAgICBSZXR1cm5zIHRoZSBsb3dlckNhbWVsQ2FzZSBmb3JtIG9m
IGEgc3RyaW5nLgotICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICdpbm5lckhUTUwnLmNhbWVs
aXplKCk7ICAgICAgICAgIC8vICdpbm5lckhUTUwnCi0gICAgICAnYWN0aW9uX25hbWUnLmNhbWVs
aXplKCk7ICAgICAgICAvLyAnYWN0aW9uTmFtZScKLSAgICAgICdjc3MtY2xhc3MtbmFtZScuY2Ft
ZWxpemUoKTsgICAgIC8vICdjc3NDbGFzc05hbWUnCi0gICAgICAnbXkgZmF2b3JpdGUgaXRlbXMn
LmNhbWVsaXplKCk7ICAvLyAnbXlGYXZvcml0ZUl0ZW1zJwotICAgICAgJ015IEZhdm9yaXRlIEl0
ZW1zJy5jYW1lbGl6ZSgpOyAgLy8gJ215RmF2b3JpdGVJdGVtcycKLSAgICAgICdwcml2YXRlLWRv
Y3Mvb3duZXItaW52b2ljZScuY2FtZWxpemUoKTsgLy8gJ3ByaXZhdGVEb2NzL293bmVySW52b2lj
ZScKLSAgICAgIGBgYAotICAgICAgIEBtZXRob2QgY2FtZWxpemUKLSAgICAgIEBwYXJhbSB7U3Ry
aW5nfSBzdHIgVGhlIHN0cmluZyB0byBjYW1lbGl6ZS4KLSAgICAgIEByZXR1cm4ge1N0cmluZ30g
dGhlIGNhbWVsaXplZCBzdHJpbmcuCi0gICAgICBAcHVibGljCi0gICAgKi8KLSAgICBjYW1lbGl6
ZTogY2FtZWxpemUsCi0KLSAgICAvKioKLSAgICAgIFJldHVybnMgdGhlIFVwcGVyQ2FtZWxDYXNl
IGZvcm0gb2YgYSBzdHJpbmcuCi0gICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgJ2lubmVySFRN
TCcuY2xhc3NpZnkoKTsgICAgICAgICAgLy8gJ0lubmVySFRNTCcKLSAgICAgICdhY3Rpb25fbmFt
ZScuY2xhc3NpZnkoKTsgICAgICAgIC8vICdBY3Rpb25OYW1lJwotICAgICAgJ2Nzcy1jbGFzcy1u
YW1lJy5jbGFzc2lmeSgpOyAgICAgLy8gJ0Nzc0NsYXNzTmFtZScKLSAgICAgICdteSBmYXZvcml0
ZSBpdGVtcycuY2xhc3NpZnkoKTsgIC8vICdNeUZhdm9yaXRlSXRlbXMnCi0gICAgICAncHJpdmF0
ZS1kb2NzL293bmVyLWludm9pY2UnLmNsYXNzaWZ5KCk7IC8vICdQcml2YXRlRG9jcy9Pd25lcklu
dm9pY2UnCi0gICAgICBgYGAKLSAgICAgICBAbWV0aG9kIGNsYXNzaWZ5Ci0gICAgICBAcGFyYW0g
e1N0cmluZ30gc3RyIHRoZSBzdHJpbmcgdG8gY2xhc3NpZnkKLSAgICAgIEByZXR1cm4ge1N0cmlu
Z30gdGhlIGNsYXNzaWZpZWQgc3RyaW5nCi0gICAgICBAcHVibGljCi0gICAgKi8KLSAgICBjbGFz
c2lmeTogY2xhc3NpZnksCi0KLSAgICAvKioKLSAgICAgIE1vcmUgZ2VuZXJhbCB0aGFuIGRlY2Ft
ZWxpemUuIFJldHVybnMgdGhlIGxvd2VyXF9jYXNlXF9hbmRcX3VuZGVyc2NvcmVkCi0gICAgICBm
b3JtIG9mIGEgc3RyaW5nLgotICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgICdpbm5lckhUTUwn
LnVuZGVyc2NvcmUoKTsgICAgICAgICAgLy8gJ2lubmVyX2h0bWwnCi0gICAgICAnYWN0aW9uX25h
bWUnLnVuZGVyc2NvcmUoKTsgICAgICAgIC8vICdhY3Rpb25fbmFtZScKLSAgICAgICdjc3MtY2xh
c3MtbmFtZScudW5kZXJzY29yZSgpOyAgICAgLy8gJ2Nzc19jbGFzc19uYW1lJwotICAgICAgJ215
IGZhdm9yaXRlIGl0ZW1zJy51bmRlcnNjb3JlKCk7ICAvLyAnbXlfZmF2b3JpdGVfaXRlbXMnCi0g
ICAgICAncHJpdmF0ZURvY3Mvb3duZXJJbnZvaWNlJy51bmRlcnNjb3JlKCk7IC8vICdwcml2YXRl
X2RvY3Mvb3duZXJfaW52b2ljZScKLSAgICAgIGBgYAotICAgICAgIEBtZXRob2QgdW5kZXJzY29y
ZQotICAgICAgQHBhcmFtIHtTdHJpbmd9IHN0ciBUaGUgc3RyaW5nIHRvIHVuZGVyc2NvcmUuCi0g
ICAgICBAcmV0dXJuIHtTdHJpbmd9IHRoZSB1bmRlcnNjb3JlZCBzdHJpbmcuCi0gICAgICBAcHVi
bGljCi0gICAgKi8KLSAgICB1bmRlcnNjb3JlOiB1bmRlcnNjb3JlLAotCi0gICAgLyoqCi0gICAg
ICBSZXR1cm5zIHRoZSBDYXBpdGFsaXplZCBmb3JtIG9mIGEgc3RyaW5nCi0gICAgICAgYGBgamF2
YXNjcmlwdAotICAgICAgJ2lubmVySFRNTCcuY2FwaXRhbGl6ZSgpICAgICAgICAgLy8gJ0lubmVy
SFRNTCcKLSAgICAgICdhY3Rpb25fbmFtZScuY2FwaXRhbGl6ZSgpICAgICAgIC8vICdBY3Rpb25f
bmFtZScKLSAgICAgICdjc3MtY2xhc3MtbmFtZScuY2FwaXRhbGl6ZSgpICAgIC8vICdDc3MtY2xh
c3MtbmFtZScKLSAgICAgICdteSBmYXZvcml0ZSBpdGVtcycuY2FwaXRhbGl6ZSgpIC8vICdNeSBm
YXZvcml0ZSBpdGVtcycKLSAgICAgICdwcml2YXRlRG9jcy9vd25lckludm9pY2UnLmNhcGl0YWxp
emUoKTsgLy8gJ1ByaXZhdGVEb2NzL293bmVySW52b2ljZScKLSAgICAgIGBgYAotICAgICAgIEBt
ZXRob2QgY2FwaXRhbGl6ZQotICAgICAgQHBhcmFtIHtTdHJpbmd9IHN0ciBUaGUgc3RyaW5nIHRv
IGNhcGl0YWxpemUuCi0gICAgICBAcmV0dXJuIHtTdHJpbmd9IFRoZSBjYXBpdGFsaXplZCBzdHJp
bmcuCi0gICAgICBAcHVibGljCi0gICAgKi8KLSAgICBjYXBpdGFsaXplOiBjYXBpdGFsaXplCi0g
IH07Ci0gIGV4cG9ydHMuZm10ID0gZm10OwotICBleHBvcnRzLmxvYyA9IGxvYzsKLSAgZXhwb3J0
cy53ID0gdzsKLSAgZXhwb3J0cy5kZWNhbWVsaXplID0gZGVjYW1lbGl6ZTsKLSAgZXhwb3J0cy5k
YXNoZXJpemUgPSBkYXNoZXJpemU7Ci0gIGV4cG9ydHMuY2FtZWxpemUgPSBjYW1lbGl6ZTsKLSAg
ZXhwb3J0cy5jbGFzc2lmeSA9IGNsYXNzaWZ5OwotICBleHBvcnRzLnVuZGVyc2NvcmUgPSB1bmRl
cnNjb3JlOwotICBleHBvcnRzLmNhcGl0YWxpemUgPSBjYXBpdGFsaXplOwotfSk7Ci1lbmlmZWQo
J2VtYmVyLXJ1bnRpbWUvdXRpbHMnLCBbJ2V4cG9ydHMnLCAnZW1iZXItcnVudGltZS9taXhpbnMv
YXJyYXknLCAnZW1iZXItcnVudGltZS9zeXN0ZW0vb2JqZWN0J10sIGZ1bmN0aW9uIChleHBvcnRz
LCBfZW1iZXJSdW50aW1lTWl4aW5zQXJyYXksIF9lbWJlclJ1bnRpbWVTeXN0ZW1PYmplY3QpIHsK
LSAgJ3VzZSBzdHJpY3QnOwotCi0gIGV4cG9ydHMuaXNBcnJheSA9IGlzQXJyYXk7Ci0gIGV4cG9y
dHMudHlwZU9mID0gdHlwZU9mOwotCi0gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4KLSAgLy8gVFlQSU5HICYgQVJSQVkgTUVTU0FHSU5HCi0gIC8vCi0gIHZhciBU
WVBFX01BUCA9IHsKLSAgICAnW29iamVjdCBCb29sZWFuXSc6ICdib29sZWFuJywKLSAgICAnW29i
amVjdCBOdW1iZXJdJzogJ251bWJlcicsCi0gICAgJ1tvYmplY3QgU3RyaW5nXSc6ICdzdHJpbmcn
LAotICAgICdbb2JqZWN0IEZ1bmN0aW9uXSc6ICdmdW5jdGlvbicsCi0gICAgJ1tvYmplY3QgQXJy
YXldJzogJ2FycmF5JywKLSAgICAnW29iamVjdCBEYXRlXSc6ICdkYXRlJywKLSAgICAnW29iamVj
dCBSZWdFeHBdJzogJ3JlZ2V4cCcsCi0gICAgJ1tvYmplY3QgT2JqZWN0XSc6ICdvYmplY3QnCi0g
IH07Ci0KLSAgdmFyIHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZzsKLQotICAv
KioKLSAgICBSZXR1cm5zIHRydWUgaWYgdGhlIHBhc3NlZCBvYmplY3QgaXMgYW4gYXJyYXkgb3Ig
QXJyYXktbGlrZS4KLSAgCi0gICAgT2JqZWN0cyBhcmUgY29uc2lkZXJlZCBBcnJheS1saWtlIGlm
IGFueSBvZiB0aGUgZm9sbG93aW5nIGFyZSB0cnVlOgotICAKLSAgICAgIC0gdGhlIG9iamVjdCBp
cyBhIG5hdGl2ZSBBcnJheQotICAgICAgLSB0aGUgb2JqZWN0IGhhcyBhbiBvYmplY3RBdCBwcm9w
ZXJ0eQotICAgICAgLSB0aGUgb2JqZWN0IGlzIGFuIE9iamVjdCwgYW5kIGhhcyBhIGxlbmd0aCBw
cm9wZXJ0eQotICAKLSAgICBVbmxpa2UgYEVtYmVyLnR5cGVPZmAgdGhpcyBtZXRob2QgcmV0dXJu
cyB0cnVlIGV2ZW4gaWYgdGhlIHBhc3NlZCBvYmplY3QgaXMKLSAgICBub3QgZm9ybWFsbHkgYW4g
YXJyYXkgYnV0IGFwcGVhcnMgdG8gYmUgYXJyYXktbGlrZSAoaS5lLiBpbXBsZW1lbnRzIGBFbWJl
ci5BcnJheWApCi0gIAotICAgIGBgYGphdmFzY3JpcHQKLSAgICBFbWJlci5pc0FycmF5KCk7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZmFsc2UKLSAgICBFbWJl
ci5pc0FycmF5KFtdKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
dHJ1ZQotICAgIEVtYmVyLmlzQXJyYXkoRW1iZXIuQXJyYXlQcm94eS5jcmVhdGUoeyBjb250ZW50
OiBbXSB9KSk7ICAvLyB0cnVlCi0gICAgYGBgCi0gIAotICAgIEBtZXRob2QgaXNBcnJheQotICAg
IEBmb3IgRW1iZXIKLSAgICBAcGFyYW0ge09iamVjdH0gb2JqIFRoZSBvYmplY3QgdG8gdGVzdAot
ICAgIEByZXR1cm4ge0Jvb2xlYW59IHRydWUgaWYgdGhlIHBhc3NlZCBvYmplY3QgaXMgYW4gYXJy
YXkgb3IgQXJyYXktbGlrZQotICAgIEBwdWJsaWMKLSAgKi8KLQotICBmdW5jdGlvbiBpc0FycmF5
KG9iaikgewotICAgIGlmICghb2JqIHx8IG9iai5zZXRJbnRlcnZhbCkgewotICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLSAgICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7Ci0gICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKF9lbWJlclJ1bnRpbWVNaXhpbnNBcnJheS5kZWZhdWx0
LmRldGVjdChvYmopKSB7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICB2YXIgdHlw
ZSA9IHR5cGVPZihvYmopOwotICAgIGlmICgnYXJyYXknID09PSB0eXBlKSB7Ci0gICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKG9iai5sZW5ndGggIT09IHVuZGVmaW5lZCAmJiAnb2Jq
ZWN0JyA9PT0gdHlwZSkgewotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBm
YWxzZTsKLSAgfQotCi0gIC8qKgotICAgIFJldHVybnMgYSBjb25zaXN0ZW50IHR5cGUgZm9yIHRo
ZSBwYXNzZWQgb2JqZWN0LgotICAKLSAgICBVc2UgdGhpcyBpbnN0ZWFkIG9mIHRoZSBidWlsdC1p
biBgdHlwZW9mYCB0byBnZXQgdGhlIHR5cGUgb2YgYW4gaXRlbS4KLSAgICBJdCB3aWxsIHJldHVy
biB0aGUgc2FtZSByZXN1bHQgYWNyb3NzIGFsbCBicm93c2VycyBhbmQgaW5jbHVkZXMgYSBiaXQK
LSAgICBtb3JlIGRldGFpbC4gSGVyZSBpcyB3aGF0IHdpbGwgYmUgcmV0dXJuZWQ6Ci0gIAotICAg
ICAgICB8IFJldHVybiBWYWx1ZSAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHwKLSAgICAgICAgfC0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18Ci0gICAgICAgIHwg
J3N0cmluZycgICAgICB8IFN0cmluZyBwcmltaXRpdmUgb3IgU3RyaW5nIG9iamVjdC4gICAgICAg
ICAgICAgICAgICAgfAotICAgICAgICB8ICdudW1iZXInICAgICAgfCBOdW1iZXIgcHJpbWl0aXZl
IG9yIE51bWJlciBvYmplY3QuICAgICAgICAgICAgICAgICAgIHwKLSAgICAgICAgfCAnYm9vbGVh
bicgICAgIHwgQm9vbGVhbiBwcmltaXRpdmUgb3IgQm9vbGVhbiBvYmplY3QuICAgICAgICAgICAg
ICAgICB8Ci0gICAgICAgIHwgJ251bGwnICAgICAgICB8IE51bGwgdmFsdWUgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICAgICB8ICd1bmRlZmluZWQnICAg
fCBVbmRlZmluZWQgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwK
LSAgICAgICAgfCAnZnVuY3Rpb24nICAgIHwgQSBmdW5jdGlvbiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgICAgIHwgJ2FycmF5JyAgICAgICB8IEFuIGlu
c3RhbmNlIG9mIEFycmF5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICAg
ICB8ICdyZWdleHAnICAgICAgfCBBbiBpbnN0YW5jZSBvZiBSZWdFeHAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHwKLSAgICAgICAgfCAnZGF0ZScgICAgICAgIHwgQW4gaW5zdGFuY2Ug
b2YgRGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgICAgIHwgJ2Ns
YXNzJyAgICAgICB8IEFuIEVtYmVyIGNsYXNzIChjcmVhdGVkIHVzaW5nIEVtYmVyLk9iamVjdC5l
eHRlbmQoKSkgfAotICAgICAgICB8ICdpbnN0YW5jZScgICAgfCBBbiBFbWJlciBvYmplY3QgaW5z
dGFuY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgICAgfCAnZXJyb3InICAg
ICAgIHwgQW4gaW5zdGFuY2Ugb2YgdGhlIEVycm9yIG9iamVjdCAgICAgICAgICAgICAgICAgICAg
ICB8Ci0gICAgICAgIHwgJ29iamVjdCcgICAgICB8IEEgSmF2YVNjcmlwdCBvYmplY3Qgbm90IGlu
aGVyaXRpbmcgZnJvbSBFbWJlci5PYmplY3QgfAotICAKLSAgICBFeGFtcGxlczoKLSAgCi0gICAg
YGBgamF2YXNjcmlwdAotICAgIEVtYmVyLnR5cGVPZigpOyAgICAgICAgICAgICAgICAgICAgICAg
Ly8gJ3VuZGVmaW5lZCcKLSAgICBFbWJlci50eXBlT2YobnVsbCk7ICAgICAgICAgICAgICAgICAg
IC8vICdudWxsJwotICAgIEVtYmVyLnR5cGVPZih1bmRlZmluZWQpOyAgICAgICAgICAgICAgLy8g
J3VuZGVmaW5lZCcKLSAgICBFbWJlci50eXBlT2YoJ21pY2hhZWwnKTsgICAgICAgICAgICAgIC8v
ICdzdHJpbmcnCi0gICAgRW1iZXIudHlwZU9mKG5ldyBTdHJpbmcoJ21pY2hhZWwnKSk7ICAvLyAn
c3RyaW5nJwotICAgIEVtYmVyLnR5cGVPZigxMDEpOyAgICAgICAgICAgICAgICAgICAgLy8gJ251
bWJlcicKLSAgICBFbWJlci50eXBlT2YobmV3IE51bWJlcigxMDEpKTsgICAgICAgIC8vICdudW1i
ZXInCi0gICAgRW1iZXIudHlwZU9mKHRydWUpOyAgICAgICAgICAgICAgICAgICAvLyAnYm9vbGVh
bicKLSAgICBFbWJlci50eXBlT2YobmV3IEJvb2xlYW4odHJ1ZSkpOyAgICAgIC8vICdib29sZWFu
JwotICAgIEVtYmVyLnR5cGVPZihFbWJlci5tYWtlQXJyYXkpOyAgICAgICAgLy8gJ2Z1bmN0aW9u
JwotICAgIEVtYmVyLnR5cGVPZihbMSwgMiwgOTBdKTsgICAgICAgICAgICAgLy8gJ2FycmF5Jwot
ICAgIEVtYmVyLnR5cGVPZigvYWJjLyk7ICAgICAgICAgICAgICAgICAgLy8gJ3JlZ2V4cCcKLSAg
ICBFbWJlci50eXBlT2YobmV3IERhdGUoKSk7ICAgICAgICAgICAgIC8vICdkYXRlJwotICAgIEVt
YmVyLnR5cGVPZihFbWJlci5PYmplY3QuZXh0ZW5kKCkpOyAgLy8gJ2NsYXNzJwotICAgIEVtYmVy
LnR5cGVPZihFbWJlci5PYmplY3QuY3JlYXRlKCkpOyAgLy8gJ2luc3RhbmNlJwotICAgIEVtYmVy
LnR5cGVPZihuZXcgRXJyb3IoJ3RlYW1vY2lsJykpOyAgLy8gJ2Vycm9yJwotICAKLSAgICAvLyAn
bm9ybWFsJyBKYXZhU2NyaXB0IG9iamVjdAotICAgIEVtYmVyLnR5cGVPZih7IGE6ICdiJyB9KTsg
ICAgICAgICAgICAgLy8gJ29iamVjdCcKLSAgICBgYGAKLSAgCi0gICAgQG1ldGhvZCB0eXBlT2YK
LSAgICBAZm9yIEVtYmVyCi0gICAgQHBhcmFtIHtPYmplY3R9IGl0ZW0gdGhlIGl0ZW0gdG8gY2hl
Y2sKLSAgICBAcmV0dXJuIHtTdHJpbmd9IHRoZSB0eXBlCi0gICAgQHB1YmxpYwotICAqLwotCi0g
IGZ1bmN0aW9uIHR5cGVPZihpdGVtKSB7Ci0gICAgaWYgKGl0ZW0gPT09IG51bGwpIHsKLSAgICAg
IHJldHVybiAnbnVsbCc7Ci0gICAgfQotICAgIGlmIChpdGVtID09PSB1bmRlZmluZWQpIHsKLSAg
ICAgIHJldHVybiAndW5kZWZpbmVkJzsKLSAgICB9Ci0gICAgdmFyIHJldCA9IFRZUEVfTUFQW3Rv
U3RyaW5nLmNhbGwoaXRlbSldIHx8ICdvYmplY3QnOwotCi0gICAgaWYgKHJldCA9PT0gJ2Z1bmN0
aW9uJykgewotICAgICAgaWYgKF9lbWJlclJ1bnRpbWVTeXN0ZW1PYmplY3QuZGVmYXVsdC5kZXRl
Y3QoaXRlbSkpIHsKLSAgICAgICAgcmV0ID0gJ2NsYXNzJzsKLSAgICAgIH0KLSAgICB9IGVsc2Ug
aWYgKHJldCA9PT0gJ29iamVjdCcpIHsKLSAgICAgIGlmIChpdGVtIGluc3RhbmNlb2YgRXJyb3Ip
IHsKLSAgICAgICAgcmV0ID0gJ2Vycm9yJzsKLSAgICAgIH0gZWxzZSBpZiAoaXRlbSBpbnN0YW5j
ZW9mIF9lbWJlclJ1bnRpbWVTeXN0ZW1PYmplY3QuZGVmYXVsdCkgewotICAgICAgICByZXQgPSAn
aW5zdGFuY2UnOwotICAgICAgfSBlbHNlIGlmIChpdGVtIGluc3RhbmNlb2YgRGF0ZSkgewotICAg
ICAgICByZXQgPSAnZGF0ZSc7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHJldDsKLSAg
fQotfSk7Ci1lbmlmZWQoJ2VtYmVyLXRlbXBsYXRlLWNvbXBpbGVyL2NvbXBhdCcsIFsnZXhwb3J0
cycsICdlbWJlci1tZXRhbC9jb3JlJywgJ2VtYmVyLXRlbXBsYXRlLWNvbXBpbGVyL2NvbXBhdC9w
cmVjb21waWxlJywgJ2VtYmVyLXRlbXBsYXRlLWNvbXBpbGVyL3N5c3RlbS9jb21waWxlJywgJ2Vt
YmVyLXRlbXBsYXRlLWNvbXBpbGVyL3N5c3RlbS90ZW1wbGF0ZSddLCBmdW5jdGlvbiAoZXhwb3J0
cywgX2VtYmVyTWV0YWxDb3JlLCBfZW1iZXJUZW1wbGF0ZUNvbXBpbGVyQ29tcGF0UHJlY29tcGls
ZSwgX2VtYmVyVGVtcGxhdGVDb21waWxlclN5c3RlbUNvbXBpbGUsIF9lbWJlclRlbXBsYXRlQ29t
cGlsZXJTeXN0ZW1UZW1wbGF0ZSkgewotICAndXNlIHN0cmljdCc7Ci0KLSAgdmFyIEVtYmVySGFu
ZGxlYmFycyA9IF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0LkhhbmRsZWJhcnMgPSBfZW1iZXJNZXRh
bENvcmUuZGVmYXVsdC5IYW5kbGViYXJzIHx8IHt9OwotCi0gIEVtYmVySGFuZGxlYmFycy5wcmVj
b21waWxlID0gX2VtYmVyVGVtcGxhdGVDb21waWxlckNvbXBhdFByZWNvbXBpbGUuZGVmYXVsdDsK
LSAgRW1iZXJIYW5kbGViYXJzLmNvbXBpbGUgPSBfZW1iZXJUZW1wbGF0ZUNvbXBpbGVyU3lzdGVt
Q29tcGlsZS5kZWZhdWx0OwotICBFbWJlckhhbmRsZWJhcnMudGVtcGxhdGUgPSBfZW1iZXJUZW1w
bGF0ZUNvbXBpbGVyU3lzdGVtVGVtcGxhdGUuZGVmYXVsdDsKLX0pOwotZW5pZmVkKCdlbWJlci10
ZW1wbGF0ZS1jb21waWxlci9jb21wYXQvcHJlY29tcGlsZScsIFsnZXhwb3J0cycsICdyZXF1aXJl
JywgJ2VtYmVyLXRlbXBsYXRlLWNvbXBpbGVyL3N5c3RlbS9jb21waWxlX29wdGlvbnMnXSwgZnVu
Y3Rpb24gKGV4cG9ydHMsIF9yZXF1aXJlLCBfZW1iZXJUZW1wbGF0ZUNvbXBpbGVyU3lzdGVtQ29t
cGlsZV9vcHRpb25zKSB7Ci0gIC8qKgotICBAbW9kdWxlIGVtYmVyCi0gIEBzdWJtb2R1bGUgZW1i
ZXItdGVtcGxhdGUtY29tcGlsZXIKLSAgKi8KLSAgJ3VzZSBzdHJpY3QnOwotCi0gIHZhciBjb21w
aWxlLCBjb21waWxlU3BlYzsKLQotICBleHBvcnRzLmRlZmF1bHQgPSBmdW5jdGlvbiAoc3RyaW5n
KSB7Ci0gICAgaWYgKCghY29tcGlsZSB8fCAhY29tcGlsZVNwZWMpICYmIF9yZXF1aXJlLmhhcygn
aHRtbGJhcnMtY29tcGlsZXIvY29tcGlsZXInKSkgewotICAgICAgdmFyIENvbXBpbGVyID0gX3Jl
cXVpcmUuZGVmYXVsdCgnaHRtbGJhcnMtY29tcGlsZXIvY29tcGlsZXInKTsKLQotICAgICAgY29t
cGlsZSA9IENvbXBpbGVyLmNvbXBpbGU7Ci0gICAgICBjb21waWxlU3BlYyA9IENvbXBpbGVyLmNv
bXBpbGVTcGVjOwotICAgIH0KLQotICAgIGlmICghY29tcGlsZSB8fCAhY29tcGlsZVNwZWMpIHsK
LSAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNhbGwgYHByZWNvbXBpbGVgIHdpdGhvdXQg
dGhlIHRlbXBsYXRlIGNvbXBpbGVyIGxvYWRlZC4gUGxlYXNlIGxvYWQgYGVtYmVyLXRlbXBsYXRl
LWNvbXBpbGVyLmpzYCBwcmlvciB0byBjYWxsaW5nIGBwcmVjb21waWxlYC4nKTsKLSAgICB9Ci0K
LSAgICB2YXIgYXNPYmplY3QgPSBhcmd1bWVudHNbMV0gPT09IHVuZGVmaW5lZCA/IHRydWUgOiBh
cmd1bWVudHNbMV07Ci0gICAgdmFyIGNvbXBpbGVGdW5jID0gYXNPYmplY3QgPyBjb21waWxlIDog
Y29tcGlsZVNwZWM7Ci0KLSAgICByZXR1cm4gY29tcGlsZUZ1bmMoc3RyaW5nLCBfZW1iZXJUZW1w
bGF0ZUNvbXBpbGVyU3lzdGVtQ29tcGlsZV9vcHRpb25zLmRlZmF1bHQoKSk7Ci0gIH07Ci19KTsK
LWVuaWZlZCgnZW1iZXItdGVtcGxhdGUtY29tcGlsZXIvaW5kZXgnLCBbJ2V4cG9ydHMnLCAnZW1i
ZXItbWV0YWwnLCAnZW1iZXItdGVtcGxhdGUtY29tcGlsZXIvc3lzdGVtL3ByZWNvbXBpbGUnLCAn
ZW1iZXItdGVtcGxhdGUtY29tcGlsZXIvc3lzdGVtL2NvbXBpbGUnLCAnZW1iZXItdGVtcGxhdGUt
Y29tcGlsZXIvc3lzdGVtL3RlbXBsYXRlJywgJ2VtYmVyLXRlbXBsYXRlLWNvbXBpbGVyL3BsdWdp
bnMnLCAnZW1iZXItdGVtcGxhdGUtY29tcGlsZXIvcGx1Z2lucy90cmFuc2Zvcm0tb2xkLWJpbmRp
bmctc3ludGF4JywgJ2VtYmVyLXRlbXBsYXRlLWNvbXBpbGVyL3BsdWdpbnMvdHJhbnNmb3JtLW9s
ZC1jbGFzcy1iaW5kaW5nLXN5bnRheCcsICdlbWJlci10ZW1wbGF0ZS1jb21waWxlci9wbHVnaW5z
L3RyYW5zZm9ybS1pdGVtLWNsYXNzJywgJ2VtYmVyLXRlbXBsYXRlLWNvbXBpbGVyL3BsdWdpbnMv
dHJhbnNmb3JtLWNsb3N1cmUtY29tcG9uZW50LWF0dHJzLWludG8tbXV0JywgJ2VtYmVyLXRlbXBs
YXRlLWNvbXBpbGVyL3BsdWdpbnMvdHJhbnNmb3JtLWNvbXBvbmVudC1hdHRycy1pbnRvLW11dCcs
ICdlbWJlci10ZW1wbGF0ZS1jb21waWxlci9wbHVnaW5zL3RyYW5zZm9ybS1jb21wb25lbnQtY3Vy
bHktdG8tcmVhZG9ubHknLCAnZW1iZXItdGVtcGxhdGUtY29tcGlsZXIvcGx1Z2lucy90cmFuc2Zv
cm0tYW5nbGUtYnJhY2tldC1jb21wb25lbnRzJywgJ2VtYmVyLXRlbXBsYXRlLWNvbXBpbGVyL3Bs
dWdpbnMvdHJhbnNmb3JtLWlucHV0LW9uLXRvLW9uRXZlbnQnLCAnZW1iZXItdGVtcGxhdGUtY29t
cGlsZXIvcGx1Z2lucy90cmFuc2Zvcm0tdG9wLWxldmVsLWNvbXBvbmVudHMnLCAnZW1iZXItdGVt
cGxhdGUtY29tcGlsZXIvcGx1Z2lucy9kZXByZWNhdGUtcmVuZGVyLW1vZGVsJywgJ2VtYmVyLXRl
bXBsYXRlLWNvbXBpbGVyL3BsdWdpbnMvcHJldmVudC1yZW5kZXItYmxvY2snLCAnZW1iZXItdGVt
cGxhdGUtY29tcGlsZXIvcGx1Z2lucy90cmFuc2Zvcm0taW5saW5lLWxpbmstdG8nLCAnZW1iZXIt
dGVtcGxhdGUtY29tcGlsZXIvcGx1Z2lucy9hc3NlcnQtbm8tdmlldy1hbmQtY29udHJvbGxlci1w
YXRocycsICdlbWJlci10ZW1wbGF0ZS1jb21waWxlci9wbHVnaW5zL2Fzc2VydC1uby12aWV3LWhl
bHBlcicsICdlbWJlci10ZW1wbGF0ZS1jb21waWxlci9wbHVnaW5zL2Fzc2VydC1uby1lYWNoLWlu
JywgJ2VtYmVyLXRlbXBsYXRlLWNvbXBpbGVyL2NvbXBhdCddLCBmdW5jdGlvbiAoZXhwb3J0cywg
X2VtYmVyTWV0YWwsIF9lbWJlclRlbXBsYXRlQ29tcGlsZXJTeXN0ZW1QcmVjb21waWxlLCBfZW1i
ZXJUZW1wbGF0ZUNvbXBpbGVyU3lzdGVtQ29tcGlsZSwgX2VtYmVyVGVtcGxhdGVDb21waWxlclN5
c3RlbVRlbXBsYXRlLCBfZW1iZXJUZW1wbGF0ZUNvbXBpbGVyUGx1Z2lucywgX2VtYmVyVGVtcGxh
dGVDb21waWxlclBsdWdpbnNUcmFuc2Zvcm1PbGRCaW5kaW5nU3ludGF4LCBfZW1iZXJUZW1wbGF0
ZUNvbXBpbGVyUGx1Z2luc1RyYW5zZm9ybU9sZENsYXNzQmluZGluZ1N5bnRheCwgX2VtYmVyVGVt
cGxhdGVDb21waWxlclBsdWdpbnNUcmFuc2Zvcm1JdGVtQ2xhc3MsIF9lbWJlclRlbXBsYXRlQ29t
cGlsZXJQbHVnaW5zVHJhbnNmb3JtQ2xvc3VyZUNvbXBvbmVudEF0dHJzSW50b011dCwgX2VtYmVy
VGVtcGxhdGVDb21waWxlclBsdWdpbnNUcmFuc2Zvcm1Db21wb25lbnRBdHRyc0ludG9NdXQsIF9l
bWJlclRlbXBsYXRlQ29tcGlsZXJQbHVnaW5zVHJhbnNmb3JtQ29tcG9uZW50Q3VybHlUb1JlYWRv
bmx5LCBfZW1iZXJUZW1wbGF0ZUNvbXBpbGVyUGx1Z2luc1RyYW5zZm9ybUFuZ2xlQnJhY2tldENv
bXBvbmVudHMsIF9lbWJlclRlbXBsYXRlQ29tcGlsZXJQbHVnaW5zVHJhbnNmb3JtSW5wdXRPblRv
T25FdmVudCwgX2VtYmVyVGVtcGxhdGVDb21waWxlclBsdWdpbnNUcmFuc2Zvcm1Ub3BMZXZlbENv
bXBvbmVudHMsIF9lbWJlclRlbXBsYXRlQ29tcGlsZXJQbHVnaW5zRGVwcmVjYXRlUmVuZGVyTW9k
ZWwsIF9lbWJlclRlbXBsYXRlQ29tcGlsZXJQbHVnaW5zUHJldmVudFJlbmRlckJsb2NrLCBfZW1i
ZXJUZW1wbGF0ZUNvbXBpbGVyUGx1Z2luc1RyYW5zZm9ybUlubGluZUxpbmtUbywgX2VtYmVyVGVt
cGxhdGVDb21waWxlclBsdWdpbnNBc3NlcnROb1ZpZXdBbmRDb250cm9sbGVyUGF0aHMsIF9lbWJl
clRlbXBsYXRlQ29tcGlsZXJQbHVnaW5zQXNzZXJ0Tm9WaWV3SGVscGVyLCBfZW1iZXJUZW1wbGF0
ZUNvbXBpbGVyUGx1Z2luc0Fzc2VydE5vRWFjaEluLCBfZW1iZXJUZW1wbGF0ZUNvbXBpbGVyQ29t
cGF0KSB7Ci0gICd1c2Ugc3RyaWN0JzsKLQotICBfZW1iZXJUZW1wbGF0ZUNvbXBpbGVyUGx1Z2lu
cy5yZWdpc3RlclBsdWdpbignYXN0JywgX2VtYmVyVGVtcGxhdGVDb21waWxlclBsdWdpbnNUcmFu
c2Zvcm1PbGRCaW5kaW5nU3ludGF4LmRlZmF1bHQpOwotICBfZW1iZXJUZW1wbGF0ZUNvbXBpbGVy
UGx1Z2lucy5yZWdpc3RlclBsdWdpbignYXN0JywgX2VtYmVyVGVtcGxhdGVDb21waWxlclBsdWdp
bnNUcmFuc2Zvcm1PbGRDbGFzc0JpbmRpbmdTeW50YXguZGVmYXVsdCk7Ci0gIF9lbWJlclRlbXBs
YXRlQ29tcGlsZXJQbHVnaW5zLnJlZ2lzdGVyUGx1Z2luKCdhc3QnLCBfZW1iZXJUZW1wbGF0ZUNv
bXBpbGVyUGx1Z2luc1RyYW5zZm9ybUl0ZW1DbGFzcy5kZWZhdWx0KTsKLSAgX2VtYmVyVGVtcGxh
dGVDb21waWxlclBsdWdpbnMucmVnaXN0ZXJQbHVnaW4oJ2FzdCcsIF9lbWJlclRlbXBsYXRlQ29t
cGlsZXJQbHVnaW5zVHJhbnNmb3JtQ2xvc3VyZUNvbXBvbmVudEF0dHJzSW50b011dC5kZWZhdWx0
KTsKLSAgX2VtYmVyVGVtcGxhdGVDb21waWxlclBsdWdpbnMucmVnaXN0ZXJQbHVnaW4oJ2FzdCcs
IF9lbWJlclRlbXBsYXRlQ29tcGlsZXJQbHVnaW5zVHJhbnNmb3JtQ29tcG9uZW50QXR0cnNJbnRv
TXV0LmRlZmF1bHQpOwotICBfZW1iZXJUZW1wbGF0ZUNvbXBpbGVyUGx1Z2lucy5yZWdpc3RlclBs
dWdpbignYXN0JywgX2VtYmVyVGVtcGxhdGVDb21waWxlclBsdWdpbnNUcmFuc2Zvcm1Db21wb25l
bnRDdXJseVRvUmVhZG9ubHkuZGVmYXVsdCk7Ci0gIF9lbWJlclRlbXBsYXRlQ29tcGlsZXJQbHVn
aW5zLnJlZ2lzdGVyUGx1Z2luKCdhc3QnLCBfZW1iZXJUZW1wbGF0ZUNvbXBpbGVyUGx1Z2luc1Ry
YW5zZm9ybUFuZ2xlQnJhY2tldENvbXBvbmVudHMuZGVmYXVsdCk7Ci0gIF9lbWJlclRlbXBsYXRl
Q29tcGlsZXJQbHVnaW5zLnJlZ2lzdGVyUGx1Z2luKCdhc3QnLCBfZW1iZXJUZW1wbGF0ZUNvbXBp
bGVyUGx1Z2luc1RyYW5zZm9ybUlucHV0T25Ub09uRXZlbnQuZGVmYXVsdCk7Ci0gIF9lbWJlclRl
bXBsYXRlQ29tcGlsZXJQbHVnaW5zLnJlZ2lzdGVyUGx1Z2luKCdhc3QnLCBfZW1iZXJUZW1wbGF0
ZUNvbXBpbGVyUGx1Z2luc1RyYW5zZm9ybVRvcExldmVsQ29tcG9uZW50cy5kZWZhdWx0KTsKLSAg
X2VtYmVyVGVtcGxhdGVDb21waWxlclBsdWdpbnMucmVnaXN0ZXJQbHVnaW4oJ2FzdCcsIF9lbWJl
clRlbXBsYXRlQ29tcGlsZXJQbHVnaW5zRGVwcmVjYXRlUmVuZGVyTW9kZWwuZGVmYXVsdCk7Ci0g
IF9lbWJlclRlbXBsYXRlQ29tcGlsZXJQbHVnaW5zLnJlZ2lzdGVyUGx1Z2luKCdhc3QnLCBfZW1i
ZXJUZW1wbGF0ZUNvbXBpbGVyUGx1Z2luc1ByZXZlbnRSZW5kZXJCbG9jay5kZWZhdWx0KTsKLSAg
X2VtYmVyVGVtcGxhdGVDb21waWxlclBsdWdpbnMucmVnaXN0ZXJQbHVnaW4oJ2FzdCcsIF9lbWJl
clRlbXBsYXRlQ29tcGlsZXJQbHVnaW5zQXNzZXJ0Tm9FYWNoSW4uZGVmYXVsdCk7Ci0gIF9lbWJl
clRlbXBsYXRlQ29tcGlsZXJQbHVnaW5zLnJlZ2lzdGVyUGx1Z2luKCdhc3QnLCBfZW1iZXJUZW1w
bGF0ZUNvbXBpbGVyUGx1Z2luc1RyYW5zZm9ybUlubGluZUxpbmtUby5kZWZhdWx0KTsKLQotICBp
ZiAoIV9lbWJlck1ldGFsLmRlZmF1bHQuRU5WLl9FTkFCTEVfTEVHQUNZX1ZJRVdfU1VQUE9SVCkg
ewotICAgIF9lbWJlclRlbXBsYXRlQ29tcGlsZXJQbHVnaW5zLnJlZ2lzdGVyUGx1Z2luKCdhc3Qn
LCBfZW1iZXJUZW1wbGF0ZUNvbXBpbGVyUGx1Z2luc0Fzc2VydE5vVmlld0FuZENvbnRyb2xsZXJQ
YXRocy5kZWZhdWx0KTsKLSAgICBfZW1iZXJUZW1wbGF0ZUNvbXBpbGVyUGx1Z2lucy5yZWdpc3Rl
clBsdWdpbignYXN0JywgX2VtYmVyVGVtcGxhdGVDb21waWxlclBsdWdpbnNBc3NlcnROb1ZpZXdI
ZWxwZXIuZGVmYXVsdCk7Ci0gIH0KLQotICBleHBvcnRzLl9FbWJlciA9IF9lbWJlck1ldGFsLmRl
ZmF1bHQ7Ci0gIGV4cG9ydHMucHJlY29tcGlsZSA9IF9lbWJlclRlbXBsYXRlQ29tcGlsZXJTeXN0
ZW1QcmVjb21waWxlLmRlZmF1bHQ7Ci0gIGV4cG9ydHMuY29tcGlsZSA9IF9lbWJlclRlbXBsYXRl
Q29tcGlsZXJTeXN0ZW1Db21waWxlLmRlZmF1bHQ7Ci0gIGV4cG9ydHMudGVtcGxhdGUgPSBfZW1i
ZXJUZW1wbGF0ZUNvbXBpbGVyU3lzdGVtVGVtcGxhdGUuZGVmYXVsdDsKLSAgZXhwb3J0cy5yZWdp
c3RlclBsdWdpbiA9IF9lbWJlclRlbXBsYXRlQ29tcGlsZXJQbHVnaW5zLnJlZ2lzdGVyUGx1Z2lu
OwotfSk7Ci0KLS8vIHVzZWQgZm9yIGFkZGluZyBFbWJlci5IYW5kbGViYXJzLmNvbXBpbGUgZm9y
IGJhY2t3YXJkcyBjb21wYXQKLWVuaWZlZCgnZW1iZXItdGVtcGxhdGUtY29tcGlsZXIvcGx1Z2lu
cycsIFsnZXhwb3J0cyddLCBmdW5jdGlvbiAoZXhwb3J0cykgewotICAvKioKLSAgQG1vZHVsZSBl
bWJlcgotICBAc3VibW9kdWxlIGVtYmVyLXRlbXBsYXRlLWNvbXBpbGVyCi0gICovCi0KLSAgLyoq
Ci0gICBAcHJpdmF0ZQotICAgQHByb3BlcnR5IGhlbHBlcnMKLSAgKi8KLSAgJ3VzZSBzdHJpY3Qn
OwotCi0gIGV4cG9ydHMucmVnaXN0ZXJQbHVnaW4gPSByZWdpc3RlclBsdWdpbjsKLSAgdmFyIHBs
dWdpbnMgPSB7Ci0gICAgYXN0OiBbXQotICB9OwotCi0gIC8qKgotICAgIEFkZHMgYW4gQVNUIHBs
dWdpbiB0byBiZSB1c2VkIGJ5IEVtYmVyLkhUTUxCYXJzLmNvbXBpbGUuCi0gIAotICAgIEBwcml2
YXRlCi0gICAgQG1ldGhvZCByZWdpc3RlckFTVFBsdWdpbgotICAqLwotCi0gIGZ1bmN0aW9uIHJl
Z2lzdGVyUGx1Z2luKHR5cGUsIFBsdWdpbikgewotICAgIGlmICghcGx1Z2luc1t0eXBlXSkgewot
ICAgICAgdGhyb3cgbmV3IEVycm9yKCdBdHRlbXB0aW5nIHRvIHJlZ2lzdGVyICInICsgUGx1Z2lu
ICsgJyIgYXMgIicgKyB0eXBlICsgJyIgd2hpY2ggaXMgbm90IGEgdmFsaWQgSFRNTEJhcnMgcGx1
Z2luIHR5cGUuJyk7Ci0gICAgfQotCi0gICAgcGx1Z2luc1t0eXBlXS5wdXNoKFBsdWdpbik7Ci0g
IH0KLQotICBleHBvcnRzLmRlZmF1bHQgPSBwbHVnaW5zOwotfSk7Ci1lbmlmZWQoJ2VtYmVyLXRl
bXBsYXRlLWNvbXBpbGVyL3BsdWdpbnMvYXNzZXJ0LW5vLWVhY2gtaW4nLCBbJ2V4cG9ydHMnLCAn
ZW1iZXItbWV0YWwvY29yZScsICdlbWJlci1tZXRhbC9kZWJ1ZycsICdlbWJlci10ZW1wbGF0ZS1j
b21waWxlci9zeXN0ZW0vY2FsY3VsYXRlLWxvY2F0aW9uLWRpc3BsYXknXSwgZnVuY3Rpb24gKGV4
cG9ydHMsIF9lbWJlck1ldGFsQ29yZSwgX2VtYmVyTWV0YWxEZWJ1ZywgX2VtYmVyVGVtcGxhdGVD
b21waWxlclN5c3RlbUNhbGN1bGF0ZUxvY2F0aW9uRGlzcGxheSkgewotICAndXNlIHN0cmljdCc7
Ci0KLSAgZnVuY3Rpb24gQXNzZXJ0Tm9FYWNoSW4oKSB7Ci0gICAgdmFyIG9wdGlvbnMgPSBhcmd1
bWVudHMubGVuZ3RoIDw9IDAgfHwgYXJndW1lbnRzWzBdID09PSB1bmRlZmluZWQgPyB7fSA6IGFy
Z3VtZW50c1swXTsKLQotICAgIHRoaXMuc3ludGF4ID0gbnVsbDsKLSAgICB0aGlzLm9wdGlvbnMg
PSBvcHRpb25zOwotICB9Ci0KLSAgQXNzZXJ0Tm9FYWNoSW4ucHJvdG90eXBlLnRyYW5zZm9ybSA9
IGZ1bmN0aW9uIEFzc2VydE5vRWFjaEluX3RyYW5zZm9ybShhc3QpIHsKLSAgICBpZiAoISFfZW1i
ZXJNZXRhbENvcmUuZGVmYXVsdC5FTlYuX0VOQUJMRV9MRUdBQ1lfVklFV19TVVBQT1JUKSB7Ci0g
ICAgICByZXR1cm4gYXN0OwotICAgIH0KLSAgICB2YXIgd2Fsa2VyID0gbmV3IHRoaXMuc3ludGF4
LldhbGtlcigpOwotICAgIHZhciBtb2R1bGVOYW1lID0gdGhpcy5vcHRpb25zICYmIHRoaXMub3B0
aW9ucy5tb2R1bGVOYW1lOwotCi0gICAgd2Fsa2VyLnZpc2l0KGFzdCwgZnVuY3Rpb24gKG5vZGUp
IHsKLSAgICAgIGlmICghdmFsaWRhdGUobm9kZSkpIHsKLSAgICAgICAgcmV0dXJuOwotICAgICAg
fQotICAgICAgYXNzZXJ0SGVscGVyKG1vZHVsZU5hbWUsIG5vZGUpOwotICAgIH0pOwotCi0gICAg
cmV0dXJuIGFzdDsKLSAgfTsKLQotICBmdW5jdGlvbiBhc3NlcnRIZWxwZXIobW9kdWxlTmFtZSwg
bm9kZSkgewotICAgIHZhciBtb2R1bGVJbmZvID0gX2VtYmVyVGVtcGxhdGVDb21waWxlclN5c3Rl
bUNhbGN1bGF0ZUxvY2F0aW9uRGlzcGxheS5kZWZhdWx0KG1vZHVsZU5hbWUsIG5vZGUubG9jKTsK
LSAgICB2YXIgc2luZ3VsYXIgPSBub2RlLnBhcmFtc1swXS5vcmlnaW5hbDsKLSAgICB2YXIgcGx1
cmFsID0gbm9kZS5wYXJhbXNbMl0ub3JpZ2luYWw7Ci0KLSAgICBfZW1iZXJNZXRhbERlYnVnLmFz
c2VydCgnVXNpbmcge3sjZWFjaCAnICsgc2luZ3VsYXIgKyAnIGluICcgKyBwbHVyYWwgKyAnfX0g
JyArIG1vZHVsZUluZm8gKyAnaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCBpbiBFbWJlciAyLjArLCBw
bGVhc2UgdXNlIHt7I2VhY2ggJyArIHBsdXJhbCArICcgYXMgfCcgKyBzaW5ndWxhciArICd8fX0n
KTsKLSAgfQotCi0gIGZ1bmN0aW9uIHZhbGlkYXRlKG5vZGUpIHsKLSAgICByZXR1cm4gKG5vZGUu
dHlwZSA9PT0gJ0Jsb2NrU3RhdGVtZW50JyB8fCBub2RlLnR5cGUgPT09ICdNdXN0YWNoZVN0YXRl
bWVudCcpICYmIG5vZGUucGF0aC5vcmlnaW5hbCA9PT0gJ2VhY2gnICYmIG5vZGUucGFyYW1zLmxl
bmd0aCA9PT0gMyAmJiBub2RlLnBhcmFtc1sxXS50eXBlID09PSAnUGF0aEV4cHJlc3Npb24nICYm
IG5vZGUucGFyYW1zWzFdLm9yaWdpbmFsID09PSAnaW4nOwotICB9Ci0KLSAgZXhwb3J0cy5kZWZh
dWx0ID0gQXNzZXJ0Tm9FYWNoSW47Ci19KTsKLWVuaWZlZCgnZW1iZXItdGVtcGxhdGUtY29tcGls
ZXIvcGx1Z2lucy9hc3NlcnQtbm8tdmlldy1hbmQtY29udHJvbGxlci1wYXRocycsIFsnZXhwb3J0
cycsICdlbWJlci1tZXRhbC9jb3JlJywgJ2VtYmVyLW1ldGFsL2RlYnVnJywgJ2VtYmVyLXRlbXBs
YXRlLWNvbXBpbGVyL3N5c3RlbS9jYWxjdWxhdGUtbG9jYXRpb24tZGlzcGxheSddLCBmdW5jdGlv
biAoZXhwb3J0cywgX2VtYmVyTWV0YWxDb3JlLCBfZW1iZXJNZXRhbERlYnVnLCBfZW1iZXJUZW1w
bGF0ZUNvbXBpbGVyU3lzdGVtQ2FsY3VsYXRlTG9jYXRpb25EaXNwbGF5KSB7Ci0gICd1c2Ugc3Ry
aWN0JzsKLQotICBmdW5jdGlvbiBBc3NlcnROb1ZpZXdBbmRDb250cm9sbGVyUGF0aHMoKSB7Ci0g
ICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoIDw9IDAgfHwgYXJndW1lbnRzWzBdID09
PSB1bmRlZmluZWQgPyB7fSA6IGFyZ3VtZW50c1swXTsKLQotICAgIC8vIHNldCBsYXRlciB3aXRo
aW4gSFRNTEJhcnMgdG8gdGhlIHN5bnRheCBwYWNrYWdlCi0gICAgdGhpcy5zeW50YXggPSBudWxs
OwotICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7Ci0gIH0KLQotICAvKioKLSAgICBAcHJpdmF0
ZQotICAgIEBtZXRob2QgdHJhbnNmb3JtCi0gICAgQHBhcmFtIHtBU1R9IGFzdCBUaGUgQVNUIHRv
IGJlIHRyYW5zZm9ybWVkLgotICAqLwotICBBc3NlcnROb1ZpZXdBbmRDb250cm9sbGVyUGF0aHMu
cHJvdG90eXBlLnRyYW5zZm9ybSA9IGZ1bmN0aW9uIEFzc2VydE5vVmlld0FuZENvbnRyb2xsZXJQ
YXRoc190cmFuc2Zvcm0oYXN0KSB7Ci0gICAgdmFyIHdhbGtlciA9IG5ldyB0aGlzLnN5bnRheC5X
YWxrZXIoKTsKLSAgICB2YXIgbW9kdWxlTmFtZSA9IHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlv
bnMubW9kdWxlTmFtZTsKLQotICAgIHdhbGtlci52aXNpdChhc3QsIGZ1bmN0aW9uIChub2RlKSB7
Ci0gICAgICBpZiAoIXZhbGlkYXRlKG5vZGUpKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0K
LQotICAgICAgYXNzZXJ0UGF0aChtb2R1bGVOYW1lLCBub2RlLCBub2RlLnBhdGgpOwotICAgICAg
YXNzZXJ0UGF0aHMobW9kdWxlTmFtZSwgbm9kZSwgbm9kZS5wYXJhbXMpOwotICAgICAgYXNzZXJ0
SGFzaChtb2R1bGVOYW1lLCBub2RlLCBub2RlLmhhc2gpOwotICAgIH0pOwotCi0gICAgcmV0dXJu
IGFzdDsKLSAgfTsKLQotICBmdW5jdGlvbiBhc3NlcnRIYXNoKG1vZHVsZU5hbWUsIG5vZGUsIGhh
c2gpIHsKLSAgICBpZiAoIWhhc2ggfHwgIWhhc2gucGFpcnMpIHsKLSAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgdmFyIGksIGwsIHBhaXIsIHBhdGhzOwotICAgIGZvciAoaSA9IDAsIGwgPSBoYXNo
LnBhaXJzLmxlbmd0aDsgaSA8IGw7IGkrKykgewotICAgICAgcGFpciA9IGhhc2gucGFpcnNbaV07
Ci0gICAgICBwYXRocyA9IHBhaXIudmFsdWUucGFyYW1zOwotICAgICAgYXNzZXJ0UGF0aHMobW9k
dWxlTmFtZSwgcGFpciwgcGF0aHMpOwotICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIGFzc2VydFBh
dGhzKG1vZHVsZU5hbWUsIG5vZGUsIHBhdGhzKSB7Ci0gICAgaWYgKCFwYXRocykgewotICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICB2YXIgaSwgbCwgcGF0aDsKLSAgICBmb3IgKGkgPSAwLCBsID0g
cGF0aHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7Ci0gICAgICBwYXRoID0gcGF0aHNbaV07Ci0gICAg
ICBhc3NlcnRQYXRoKG1vZHVsZU5hbWUsIG5vZGUsIHBhdGgpOwotICAgIH0KLSAgfQotCi0gIGZ1
bmN0aW9uIGFzc2VydFBhdGgobW9kdWxlTmFtZSwgbm9kZSwgcGF0aCkgewotICAgIF9lbWJlck1l
dGFsRGVidWcuYXNzZXJ0KCdVc2luZyBge3snICsgKHBhdGggJiYgcGF0aC50eXBlID09PSAnUGF0
aEV4cHJlc3Npb24nICYmIHBhdGgucGFydHNbMF0pICsgJ319YCBvciBhbnkgcGF0aCBiYXNlZCBv
biBpdCAnICsgX2VtYmVyVGVtcGxhdGVDb21waWxlclN5c3RlbUNhbGN1bGF0ZUxvY2F0aW9uRGlz
cGxheS5kZWZhdWx0KG1vZHVsZU5hbWUsIG5vZGUubG9jKSArICdoYXMgYmVlbiByZW1vdmVkIGlu
IEVtYmVyIDIuMCcsIChmdW5jdGlvbiAoKSB7Ci0gICAgICB2YXIgbm9Bc3NlcnRpb24gPSB0cnVl
OwotCi0gICAgICAvLyBhbGxvdyBvcHQtb3V0IG9mIHRoZSBhc3NlcnRpb24gd2hlbiBsZWdhY3kg
YWRkb25zIGFyZSBwcmVzZW50Ci0gICAgICB2YXIgdmlld0tleXdvcmQgPSBwYXRoICYmIHBhdGgu
dHlwZSA9PT0gJ1BhdGhFeHByZXNzaW9uJyAmJiBwYXRoLnBhcnRzICYmIHBhdGgucGFydHNbMF07
Ci0gICAgICBpZiAodmlld0tleXdvcmQgPT09ICd2aWV3JykgewotICAgICAgICBub0Fzc2VydGlv
biA9IF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0LkVOVi5fRU5BQkxFX0xFR0FDWV9WSUVXX1NVUFBP
UlQ7Ci0gICAgICB9Ci0KLSAgICAgIHJldHVybiBub0Fzc2VydGlvbjsKLSAgICB9KSgpLCB7Ci0g
ICAgICBpZDogcGF0aC5wYXJ0cyAmJiBwYXRoLnBhcnRzWzBdID09PSAndmlldycgPyAndmlldy5r
ZXl3b3JkLnZpZXcnIDogJ3ZpZXcua2V5d29yZC5jb250cm9sbGVyJywKLSAgICAgIHVudGlsOiAn
Mi4wLjAnCi0gICAgfSk7Ci0gIH0KLQotICBmdW5jdGlvbiB2YWxpZGF0ZShub2RlKSB7Ci0gICAg
cmV0dXJuIG5vZGUudHlwZSA9PT0gJ011c3RhY2hlU3RhdGVtZW50JyB8fCBub2RlLnR5cGUgPT09
ICdCbG9ja1N0YXRlbWVudCc7Ci0gIH0KLQotICBleHBvcnRzLmRlZmF1bHQgPSBBc3NlcnROb1Zp
ZXdBbmRDb250cm9sbGVyUGF0aHM7Ci19KTsKLWVuaWZlZCgnZW1iZXItdGVtcGxhdGUtY29tcGls
ZXIvcGx1Z2lucy9hc3NlcnQtbm8tdmlldy1oZWxwZXInLCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0
YWwvY29yZScsICdlbWJlci1tZXRhbC9kZWJ1ZycsICdlbWJlci10ZW1wbGF0ZS1jb21waWxlci9z
eXN0ZW0vY2FsY3VsYXRlLWxvY2F0aW9uLWRpc3BsYXknXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9l
bWJlck1ldGFsQ29yZSwgX2VtYmVyTWV0YWxEZWJ1ZywgX2VtYmVyVGVtcGxhdGVDb21waWxlclN5
c3RlbUNhbGN1bGF0ZUxvY2F0aW9uRGlzcGxheSkgewotICAndXNlIHN0cmljdCc7Ci0KLSAgZnVu
Y3Rpb24gQXNzZXJ0Tm9WaWV3SGVscGVyKCkgewotICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRz
Lmxlbmd0aCA8PSAwIHx8IGFyZ3VtZW50c1swXSA9PT0gdW5kZWZpbmVkID8ge30gOiBhcmd1bWVu
dHNbMF07Ci0KLSAgICAvLyBzZXQgbGF0ZXIgd2l0aGluIEhUTUxCYXJzIHRvIHRoZSBzeW50YXgg
cGFja2FnZQotICAgIHRoaXMuc3ludGF4ID0gbnVsbDsKLSAgICB0aGlzLm9wdGlvbnMgPSBvcHRp
b25zOwotICB9Ci0KLSAgLyoqCi0gICAgQHByaXZhdGUKLSAgICBAbWV0aG9kIHRyYW5zZm9ybQot
ICAgIEBwYXJhbSB7QVNUfSBhc3QgVGhlIEFTVCB0byBiZSB0cmFuc2Zvcm1lZC4KLSAgKi8KLSAg
QXNzZXJ0Tm9WaWV3SGVscGVyLnByb3RvdHlwZS50cmFuc2Zvcm0gPSBmdW5jdGlvbiBBc3NlcnRO
b1ZpZXdIZWxwZXJfdHJhbnNmb3JtKGFzdCkgewotICAgIGlmICghIV9lbWJlck1ldGFsQ29yZS5k
ZWZhdWx0LkVOVi5fRU5BQkxFX0xFR0FDWV9WSUVXX1NVUFBPUlQpIHsKLSAgICAgIHJldHVybiBh
c3Q7Ci0gICAgfQotICAgIHZhciB3YWxrZXIgPSBuZXcgdGhpcy5zeW50YXguV2Fsa2VyKCk7Ci0g
ICAgdmFyIG1vZHVsZU5hbWUgPSB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLm1vZHVsZU5h
bWU7Ci0KLSAgICB3YWxrZXIudmlzaXQoYXN0LCBmdW5jdGlvbiAobm9kZSkgewotICAgICAgaWYg
KCF2YWxpZGF0ZShub2RlKSkgewotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0KLSAgICAgIGFz
c2VydEhlbHBlcihtb2R1bGVOYW1lLCBub2RlKTsKLSAgICB9KTsKLQotICAgIHJldHVybiBhc3Q7
Ci0gIH07Ci0KLSAgZnVuY3Rpb24gYXNzZXJ0SGVscGVyKG1vZHVsZU5hbWUsIG5vZGUpIHsKLSAg
ICB2YXIgcGFyYW1WYWx1ZSA9IG5vZGUucGFyYW1zLmxlbmd0aCAmJiBub2RlLnBhcmFtc1swXS52
YWx1ZTsKLQotICAgIGlmICghcGFyYW1WYWx1ZSkgewotICAgICAgcmV0dXJuOwotICAgIH0gZWxz
ZSB7Ci0gICAgICBfZW1iZXJNZXRhbERlYnVnLmFzc2VydCgnVXNpbmcgdGhlIGB7e3ZpZXcgInN0
cmluZyJ9fWAgaGVscGVyIGlzIHJlbW92ZWQgaW4gMi4wLiAnICsgX2VtYmVyVGVtcGxhdGVDb21w
aWxlclN5c3RlbUNhbGN1bGF0ZUxvY2F0aW9uRGlzcGxheS5kZWZhdWx0KG1vZHVsZU5hbWUsIG5v
ZGUubG9jKSwgX2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQuRU5WLl9FTkFCTEVfTEVHQUNZX1ZJRVdf
U1VQUE9SVCwgeyBpZDogJ3ZpZXcuaGVscGVyJywgdW50aWw6ICcyLjAuMCcgfSk7Ci0gICAgfQot
ICB9Ci0KLSAgZnVuY3Rpb24gdmFsaWRhdGUobm9kZSkgewotICAgIHJldHVybiAobm9kZS50eXBl
ID09PSAnTXVzdGFjaGVTdGF0ZW1lbnQnIHx8IG5vZGUudHlwZSA9PT0gJ0Jsb2NrU3RhdGVtZW50
JykgJiYgbm9kZS5wYXRoLnBhcnRzWzBdID09PSAndmlldyc7Ci0gIH0KLQotICBleHBvcnRzLmRl
ZmF1bHQgPSBBc3NlcnROb1ZpZXdIZWxwZXI7Ci19KTsKLWVuaWZlZCgnZW1iZXItdGVtcGxhdGUt
Y29tcGlsZXIvcGx1Z2lucy9kZXByZWNhdGUtcmVuZGVyLW1vZGVsJywgWydleHBvcnRzJywgJ2Vt
YmVyLW1ldGFsL2RlYnVnJywgJ2VtYmVyLXRlbXBsYXRlLWNvbXBpbGVyL3N5c3RlbS9jYWxjdWxh
dGUtbG9jYXRpb24tZGlzcGxheSddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0YWxEZWJ1
ZywgX2VtYmVyVGVtcGxhdGVDb21waWxlclN5c3RlbUNhbGN1bGF0ZUxvY2F0aW9uRGlzcGxheSkg
ewotICAndXNlIHN0cmljdCc7Ci0KLSAgZXhwb3J0cy5kZWZhdWx0ID0gRGVwcmVjYXRlUmVuZGVy
TW9kZWw7Ci0KLSAgZnVuY3Rpb24gRGVwcmVjYXRlUmVuZGVyTW9kZWwob3B0aW9ucykgewotICAg
IHRoaXMuc3ludGF4ID0gbnVsbDsKLSAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zOwotICB9Ci0K
LSAgRGVwcmVjYXRlUmVuZGVyTW9kZWwucHJvdG90eXBlLnRyYW5zZm9ybSA9IGZ1bmN0aW9uIERl
cHJlY2F0ZVJlbmRlck1vZGVsX3RyYW5zZm9ybShhc3QpIHsKLSAgICB2YXIgbW9kdWxlTmFtZSA9
IHRoaXMub3B0aW9ucy5tb2R1bGVOYW1lOwotICAgIHZhciB3YWxrZXIgPSBuZXcgdGhpcy5zeW50
YXguV2Fsa2VyKCk7Ci0KLSAgICB3YWxrZXIudmlzaXQoYXN0LCBmdW5jdGlvbiAobm9kZSkgewot
ICAgICAgaWYgKCF2YWxpZGF0ZShub2RlKSkgewotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0K
LSAgICAgIGVhY2gobm9kZS5wYXJhbXMsIGZ1bmN0aW9uIChwYXJhbSkgewotICAgICAgICBpZiAo
cGFyYW0udHlwZSAhPT0gJ1BhdGhFeHByZXNzaW9uJykgewotICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotCi0gICAgICAgIF9lbWJlck1ldGFsRGVidWcuZGVwcmVjYXRlKGRlcHJlY2F0aW9u
TWVzc2FnZShtb2R1bGVOYW1lLCBub2RlLCBwYXJhbSksIGZhbHNlLCB7Ci0gICAgICAgICAgaWQ6
ICdlbWJlci10ZW1wbGF0ZS1jb21waWxlci5kZXByZWNhdGUtcmVuZGVyLW1vZGVsJywKLSAgICAg
ICAgICB1bnRpbDogJzMuMC4wJywKLSAgICAgICAgICB1cmw6ICdodHRwOi8vZW1iZXJqcy5jb20v
ZGVwcmVjYXRpb25zL3YyLngjdG9jX21vZGVsLXBhcmFtLWluLWNvZGUtcmVuZGVyLWNvZGUtaGVs
cGVyJwotICAgICAgICB9KTsKLSAgICAgIH0pOwotICAgIH0pOwotCi0gICAgcmV0dXJuIGFzdDsK
LSAgfTsKLQotICBmdW5jdGlvbiB2YWxpZGF0ZShub2RlKSB7Ci0gICAgcmV0dXJuIG5vZGUudHlw
ZSA9PT0gJ011c3RhY2hlU3RhdGVtZW50JyAmJiBub2RlLnBhdGgub3JpZ2luYWwgPT09ICdyZW5k
ZXInICYmIG5vZGUucGFyYW1zLmxlbmd0aCA+IDE7Ci0gIH0KLQotICBmdW5jdGlvbiBlYWNoKGxp
c3QsIGNhbGxiYWNrKSB7Ci0gICAgZm9yICh2YXIgaSA9IDAsIGwgPSBsaXN0Lmxlbmd0aDsgaSA8
IGw7IGkrKykgewotICAgICAgY2FsbGJhY2sobGlzdFtpXSk7Ci0gICAgfQotICB9Ci0KLSAgZnVu
Y3Rpb24gZGVwcmVjYXRpb25NZXNzYWdlKG1vZHVsZU5hbWUsIG5vZGUsIHBhcmFtKSB7Ci0gICAg
dmFyIHNvdXJjZUluZm9ybWF0aW9uID0gX2VtYmVyVGVtcGxhdGVDb21waWxlclN5c3RlbUNhbGN1
bGF0ZUxvY2F0aW9uRGlzcGxheS5kZWZhdWx0KG1vZHVsZU5hbWUsIG5vZGUubG9jKTsKLSAgICB2
YXIgY29tcG9uZW50TmFtZSA9IG5vZGUucGFyYW1zWzBdLm9yaWdpbmFsOwotICAgIHZhciBtb2Rl
bE5hbWUgPSBwYXJhbS5vcmlnaW5hbDsKLSAgICB2YXIgb3JpZ2luYWwgPSAne3tyZW5kZXIgIicg
KyBjb21wb25lbnROYW1lICsgJyIgJyArIG1vZGVsTmFtZSArICd9fSc7Ci0gICAgdmFyIHByZWZl
cnJlZCA9ICd7eycgKyBjb21wb25lbnROYW1lICsgJyBtb2RlbD0nICsgbW9kZWxOYW1lICsgJ319
JzsKLQotICAgIHJldHVybiAnUGxlYXNlIHJlZmFjdG9yIGAnICsgb3JpZ2luYWwgKyAnYCB0byBh
IGNvbXBvbmVudCBhbmQgaW52b2tlIHZpYScgKyAoJyBgJyArIHByZWZlcnJlZCArICdgLiAnICsg
c291cmNlSW5mb3JtYXRpb24pOwotICB9Ci19KTsKLWVuaWZlZCgnZW1iZXItdGVtcGxhdGUtY29t
cGlsZXIvcGx1Z2lucy9wcmV2ZW50LXJlbmRlci1ibG9jaycsIFsnZXhwb3J0cycsICdlbWJlci1t
ZXRhbC9lcnJvcicsICdlbWJlci10ZW1wbGF0ZS1jb21waWxlci9zeXN0ZW0vY2FsY3VsYXRlLWxv
Y2F0aW9uLWRpc3BsYXknXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1ldGFsRXJyb3IsIF9l
bWJlclRlbXBsYXRlQ29tcGlsZXJTeXN0ZW1DYWxjdWxhdGVMb2NhdGlvbkRpc3BsYXkpIHsKLSAg
J3VzZSBzdHJpY3QnOwotCi0gIGV4cG9ydHMuZGVmYXVsdCA9IFByZXZlbnRSZW5kZXJCbG9jazsK
LQotICBmdW5jdGlvbiBQcmV2ZW50UmVuZGVyQmxvY2sob3B0aW9ucykgewotICAgIHRoaXMuc3lu
dGF4ID0gbnVsbDsKLSAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zOwotICB9Ci0KLSAgUHJldmVu
dFJlbmRlckJsb2NrLnByb3RvdHlwZS50cmFuc2Zvcm0gPSBmdW5jdGlvbiBQcmV2ZW50UmVuZGVy
QmxvY2tfdHJhbnNmb3JtKGFzdCkgewotICAgIHZhciBtb2R1bGVOYW1lID0gdGhpcy5vcHRpb25z
Lm1vZHVsZU5hbWU7Ci0gICAgdmFyIHdhbGtlciA9IG5ldyB0aGlzLnN5bnRheC5XYWxrZXIoKTsK
LQotICAgIHdhbGtlci52aXNpdChhc3QsIGZ1bmN0aW9uIChub2RlKSB7Ci0gICAgICBpZiAoIXZh
bGlkYXRlKG5vZGUpKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLQotICAgICAgdGhyb3cg
bmV3IF9lbWJlck1ldGFsRXJyb3IuZGVmYXVsdChhc3NlcnRpb25NZXNzYWdlKG1vZHVsZU5hbWUs
IG5vZGUpKTsKLSAgICB9KTsKLQotICAgIHJldHVybiBhc3Q7Ci0gIH07Ci0KLSAgZnVuY3Rpb24g
dmFsaWRhdGUobm9kZSkgewotICAgIHJldHVybiBub2RlLnR5cGUgPT09ICdCbG9ja1N0YXRlbWVu
dCcgJiYgbm9kZS5wYXRoLm9yaWdpbmFsID09PSAncmVuZGVyJzsKLSAgfQotCi0gIGZ1bmN0aW9u
IGFzc2VydGlvbk1lc3NhZ2UobW9kdWxlTmFtZSwgbm9kZSkgewotICAgIHZhciBzb3VyY2VJbmZv
cm1hdGlvbiA9IF9lbWJlclRlbXBsYXRlQ29tcGlsZXJTeXN0ZW1DYWxjdWxhdGVMb2NhdGlvbkRp
c3BsYXkuZGVmYXVsdChtb2R1bGVOYW1lLCBub2RlLmxvYyk7Ci0KLSAgICByZXR1cm4gJ1VzYWdl
IG9mIGByZW5kZXJgIGluIGJsb2NrIGZvcm0gaXMgdW5zdXBwb3J0ZWQgJyArIHNvdXJjZUluZm9y
bWF0aW9uICsgJy4nOwotICB9Ci19KTsKLWVuaWZlZCgnZW1iZXItdGVtcGxhdGUtY29tcGlsZXIv
cGx1Z2lucy90cmFuc2Zvcm0tYW5nbGUtYnJhY2tldC1jb21wb25lbnRzJywgWydleHBvcnRzJ10s
IGZ1bmN0aW9uIChleHBvcnRzKSB7Ci0gICd1c2Ugc3RyaWN0JzsKLQotICBmdW5jdGlvbiBUcmFu
c2Zvcm1BbmdsZUJyYWNrZXRDb21wb25lbnRzKCkgewotICAgIC8vIHNldCBsYXRlciB3aXRoaW4g
SFRNTEJhcnMgdG8gdGhlIHN5bnRheCBwYWNrYWdlCi0gICAgdGhpcy5zeW50YXggPSBudWxsOwot
ICB9Ci0KLSAgLyoqCi0gICAgQHByaXZhdGUKLSAgICBAbWV0aG9kIHRyYW5zZm9ybQotICAgIEBw
YXJhbSB7QVNUfSBhc3QgVGhlIEFTVCB0byBiZSB0cmFuc2Zvcm1lZC4KLSAgKi8KLSAgVHJhbnNm
b3JtQW5nbGVCcmFja2V0Q29tcG9uZW50cy5wcm90b3R5cGUudHJhbnNmb3JtID0gZnVuY3Rpb24g
VHJhbnNmb3JtQW5nbGVCcmFja2V0Q29tcG9uZW50c190cmFuc2Zvcm0oYXN0KSB7Ci0gICAgdmFy
IHdhbGtlciA9IG5ldyB0aGlzLnN5bnRheC5XYWxrZXIoKTsKLQotICAgIHdhbGtlci52aXNpdChh
c3QsIGZ1bmN0aW9uIChub2RlKSB7Ci0gICAgICBpZiAoIXZhbGlkYXRlKG5vZGUpKSB7Ci0gICAg
ICAgIHJldHVybjsKLSAgICAgIH0KLQotICAgICAgbm9kZS50YWcgPSAnPCcgKyBub2RlLnRhZyAr
ICc+JzsKLSAgICB9KTsKLQotICAgIHJldHVybiBhc3Q7Ci0gIH07Ci0KLSAgZnVuY3Rpb24gdmFs
aWRhdGUobm9kZSkgewotICAgIHJldHVybiBub2RlLnR5cGUgPT09ICdDb21wb25lbnROb2RlJzsK
LSAgfQotCi0gIGV4cG9ydHMuZGVmYXVsdCA9IFRyYW5zZm9ybUFuZ2xlQnJhY2tldENvbXBvbmVu
dHM7Ci19KTsKLWVuaWZlZCgnZW1iZXItdGVtcGxhdGUtY29tcGlsZXIvcGx1Z2lucy90cmFuc2Zv
cm0tY2xvc3VyZS1jb21wb25lbnQtYXR0cnMtaW50by1tdXQnLCBbJ2V4cG9ydHMnXSwgZnVuY3Rp
b24gKGV4cG9ydHMpIHsKLSAgJ3VzZSBzdHJpY3QnOwotCi0gIGZ1bmN0aW9uIFRyYW5zZm9ybUNs
b3N1cmVDb21wb25lbnRBdHRyc0ludG9NdXQoKSB7Ci0gICAgLy8gc2V0IGxhdGVyIHdpdGhpbiBI
VE1MQmFycyB0byB0aGUgc3ludGF4IHBhY2thZ2UKLSAgICB0aGlzLnN5bnRheCA9IG51bGw7Ci0g
IH0KLQotICAvKioKLSAgICBAcHJpdmF0ZQotICAgIEBtZXRob2QgdHJhbnNmb3JtCi0gICAgQHBh
cmFtIHtBU1R9IGFzdCBUaGUgQVNUIHRvIGJlIHRyYW5zZm9ybWVkLgotICAqLwotICBUcmFuc2Zv
cm1DbG9zdXJlQ29tcG9uZW50QXR0cnNJbnRvTXV0LnByb3RvdHlwZS50cmFuc2Zvcm0gPSBmdW5j
dGlvbiBUcmFuc2Zvcm1DbG9zdXJlQ29tcG9uZW50QXR0cnNJbnRvTXV0X3RyYW5zZm9ybShhc3Qp
IHsKLSAgICB2YXIgYiA9IHRoaXMuc3ludGF4LmJ1aWxkZXJzOwotCi0gICAgdGhpcy5zeW50YXgu
dHJhdmVyc2UoYXN0LCB7Ci0gICAgICBTdWJFeHByZXNzaW9uOiBmdW5jdGlvbiAobm9kZSkgewot
ICAgICAgICBpZiAoaXNDb21wb25lbnRDbG9zdXJlKG5vZGUpKSB7Ci0gICAgICAgICAgbXV0UGFy
YW1ldGVycyhiLCBub2RlKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0pOwotCi0gICAgcmV0
dXJuIGFzdDsKLSAgfTsKLQotICBmdW5jdGlvbiBpc0NvbXBvbmVudENsb3N1cmUobm9kZSkgewot
ICAgIHJldHVybiBub2RlLnR5cGUgPT09ICdTdWJFeHByZXNzaW9uJyAmJiBub2RlLnBhdGgub3Jp
Z2luYWwgPT09ICdjb21wb25lbnQnOwotICB9Ci0KLSAgZnVuY3Rpb24gbXV0UGFyYW1ldGVycyhi
dWlsZGVyLCBub2RlKSB7Ci0gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBub2RlLnBhcmFtcy5sZW5n
dGg7IGkrKykgewotICAgICAgaWYgKG5vZGUucGFyYW1zW2ldLnR5cGUgPT09ICdQYXRoRXhwcmVz
c2lvbicpIHsKLSAgICAgICAgbm9kZS5wYXJhbXNbaV0gPSBidWlsZGVyLnNleHByKGJ1aWxkZXIu
cGF0aCgnQG11dCcpLCBbbm9kZS5wYXJhbXNbaV1dKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBl
YWNoKG5vZGUuaGFzaC5wYWlycywgZnVuY3Rpb24gKHBhaXIpIHsKLSAgICAgIHZhciB2YWx1ZSA9
IHBhaXIudmFsdWU7Ci0KLSAgICAgIGlmICh2YWx1ZS50eXBlID09PSAnUGF0aEV4cHJlc3Npb24n
KSB7Ci0gICAgICAgIHBhaXIudmFsdWUgPSBidWlsZGVyLnNleHByKGJ1aWxkZXIucGF0aCgnQG11
dCcpLCBbcGFpci52YWx1ZV0pOwotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgZnVuY3Rpb24g
ZWFjaChsaXN0LCBjYWxsYmFjaykgewotICAgIGZvciAodmFyIGkgPSAwLCBsID0gbGlzdC5sZW5n
dGg7IGkgPCBsOyBpKyspIHsKLSAgICAgIGNhbGxiYWNrKGxpc3RbaV0pOwotICAgIH0KLSAgfQot
Ci0gIGV4cG9ydHMuZGVmYXVsdCA9IFRyYW5zZm9ybUNsb3N1cmVDb21wb25lbnRBdHRyc0ludG9N
dXQ7Ci19KTsKLWVuaWZlZCgnZW1iZXItdGVtcGxhdGUtY29tcGlsZXIvcGx1Z2lucy90cmFuc2Zv
cm0tY29tcG9uZW50LWF0dHJzLWludG8tbXV0JywgWydleHBvcnRzJ10sIGZ1bmN0aW9uIChleHBv
cnRzKSB7Ci0gICd1c2Ugc3RyaWN0JzsKLQotICBmdW5jdGlvbiBUcmFuc2Zvcm1Db21wb25lbnRB
dHRyc0ludG9NdXQoKSB7Ci0gICAgLy8gc2V0IGxhdGVyIHdpdGhpbiBIVE1MQmFycyB0byB0aGUg
c3ludGF4IHBhY2thZ2UKLSAgICB0aGlzLnN5bnRheCA9IG51bGw7Ci0gIH0KLQotICAvKioKLSAg
ICBAcHJpdmF0ZQotICAgIEBtZXRob2QgdHJhbnNmb3JtCi0gICAgQHBhcmFtIHtBU1R9IGFzdCBU
aGUgQVNUIHRvIGJlIHRyYW5zZm9ybWVkLgotICAqLwotICBUcmFuc2Zvcm1Db21wb25lbnRBdHRy
c0ludG9NdXQucHJvdG90eXBlLnRyYW5zZm9ybSA9IGZ1bmN0aW9uIFRyYW5zZm9ybUNvbXBvbmVu
dEF0dHJzSW50b011dF90cmFuc2Zvcm0oYXN0KSB7Ci0gICAgdmFyIGIgPSB0aGlzLnN5bnRheC5i
dWlsZGVyczsKLSAgICB2YXIgd2Fsa2VyID0gbmV3IHRoaXMuc3ludGF4LldhbGtlcigpOwotCi0g
ICAgd2Fsa2VyLnZpc2l0KGFzdCwgZnVuY3Rpb24gKG5vZGUpIHsKLSAgICAgIGlmICghdmFsaWRh
dGUobm9kZSkpIHsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotCi0gICAgICBlYWNoKG5vZGUu
aGFzaC5wYWlycywgZnVuY3Rpb24gKHBhaXIpIHsKLSAgICAgICAgdmFyIHZhbHVlID0gcGFpci52
YWx1ZTsKLQotICAgICAgICBpZiAodmFsdWUudHlwZSA9PT0gJ1BhdGhFeHByZXNzaW9uJykgewot
ICAgICAgICAgIHBhaXIudmFsdWUgPSBiLnNleHByKGIucGF0aCgnQG11dCcpLCBbcGFpci52YWx1
ZV0pOwotICAgICAgICB9Ci0gICAgICB9KTsKLSAgICB9KTsKLQotICAgIHJldHVybiBhc3Q7Ci0g
IH07Ci0KLSAgZnVuY3Rpb24gdmFsaWRhdGUobm9kZSkgewotICAgIHJldHVybiBub2RlLnR5cGUg
PT09ICdCbG9ja1N0YXRlbWVudCcgfHwgbm9kZS50eXBlID09PSAnTXVzdGFjaGVTdGF0ZW1lbnQn
OwotICB9Ci0KLSAgZnVuY3Rpb24gZWFjaChsaXN0LCBjYWxsYmFjaykgewotICAgIGZvciAodmFy
IGkgPSAwLCBsID0gbGlzdC5sZW5ndGg7IGkgPCBsOyBpKyspIHsKLSAgICAgIGNhbGxiYWNrKGxp
c3RbaV0pOwotICAgIH0KLSAgfQotCi0gIGV4cG9ydHMuZGVmYXVsdCA9IFRyYW5zZm9ybUNvbXBv
bmVudEF0dHJzSW50b011dDsKLX0pOwotZW5pZmVkKCdlbWJlci10ZW1wbGF0ZS1jb21waWxlci9w
bHVnaW5zL3RyYW5zZm9ybS1jb21wb25lbnQtY3VybHktdG8tcmVhZG9ubHknLCBbJ2V4cG9ydHMn
XSwgZnVuY3Rpb24gKGV4cG9ydHMpIHsKLSAgJ3VzZSBzdHJpY3QnOwotCi0gIGZ1bmN0aW9uIFRy
YW5zZm9ybUNvbXBvbmVudEN1cmx5VG9SZWFkb25seSgpIHsKLSAgICAvLyBzZXQgbGF0ZXIgd2l0
aGluIEhUTUxCYXJzIHRvIHRoZSBzeW50YXggcGFja2FnZQotICAgIHRoaXMuc3ludGF4ID0gbnVs
bDsKLSAgfQotCi0gIC8qKgotICAgIEBwcml2YXRlCi0gICAgQG1ldGhvZCB0cmFuc2Zvcm0KLSAg
ICBAcGFyYW0ge0FTVH0gYXN0IFRoZSBBU1QgdG8gYmUgdHJhbnNmb3JtZWQuCi0gICovCi0gIFRy
YW5zZm9ybUNvbXBvbmVudEN1cmx5VG9SZWFkb25seS5wcm90b3R5cGUudHJhbnNmb3JtID0gZnVu
Y3Rpb24gVHJhbnNmb3JtQ29tcG9uZXRuQ3VybHlUb1JlYWRvbmx5X3RyYW5zZm9ybShhc3QpIHsK
LSAgICB2YXIgYiA9IHRoaXMuc3ludGF4LmJ1aWxkZXJzOwotICAgIHZhciB3YWxrZXIgPSBuZXcg
dGhpcy5zeW50YXguV2Fsa2VyKCk7Ci0KLSAgICB3YWxrZXIudmlzaXQoYXN0LCBmdW5jdGlvbiAo
bm9kZSkgewotICAgICAgaWYgKCF2YWxpZGF0ZShub2RlKSkgewotICAgICAgICByZXR1cm47Ci0g
ICAgICB9Ci0KLSAgICAgIGVhY2gobm9kZS5hdHRyaWJ1dGVzLCBmdW5jdGlvbiAoYXR0cikgewot
ICAgICAgICBpZiAoYXR0ci52YWx1ZS50eXBlICE9PSAnTXVzdGFjaGVTdGF0ZW1lbnQnKSB7Ci0g
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGlmIChhdHRyLnZhbHVlLnBhcmFt
cy5sZW5ndGggfHwgYXR0ci52YWx1ZS5oYXNoLnBhaXJzLmxlbmd0aCkgewotICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGF0dHIudmFsdWUgPSBiLm11c3RhY2hlKGIucGF0
aCgncmVhZG9ubHknKSwgW2F0dHIudmFsdWUucGF0aF0sIG51bGwsICFhdHRyLnZhbHVlLmVzY2Fw
ZSk7Ci0gICAgICB9KTsKLSAgICB9KTsKLQotICAgIHJldHVybiBhc3Q7Ci0gIH07Ci0KLSAgZnVu
Y3Rpb24gdmFsaWRhdGUobm9kZSkgewotICAgIHJldHVybiBub2RlLnR5cGUgPT09ICdDb21wb25l
bnROb2RlJzsKLSAgfQotCi0gIGZ1bmN0aW9uIGVhY2gobGlzdCwgY2FsbGJhY2spIHsKLSAgICBm
b3IgKHZhciBpID0gMCwgbCA9IGxpc3QubGVuZ3RoOyBpIDwgbDsgaSsrKSB7Ci0gICAgICBjYWxs
YmFjayhsaXN0W2ldKTsKLSAgICB9Ci0gIH0KLQotICBleHBvcnRzLmRlZmF1bHQgPSBUcmFuc2Zv
cm1Db21wb25lbnRDdXJseVRvUmVhZG9ubHk7Ci19KTsKLWVuaWZlZCgnZW1iZXItdGVtcGxhdGUt
Y29tcGlsZXIvcGx1Z2lucy90cmFuc2Zvcm0taW5saW5lLWxpbmstdG8nLCBbJ2V4cG9ydHMnXSwg
ZnVuY3Rpb24gKGV4cG9ydHMpIHsKLSAgJ3VzZSBzdHJpY3QnOwotCi0gIGV4cG9ydHMuZGVmYXVs
dCA9IFRyYW5zZm9ybUlubGluZUxpbmtUbzsKLQotICBmdW5jdGlvbiBUcmFuc2Zvcm1JbmxpbmVM
aW5rVG8ob3B0aW9ucykgewotICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7Ci0gICAgdGhpcy5z
eW50YXggPSBudWxsOwotICB9Ci0KLSAgVHJhbnNmb3JtSW5saW5lTGlua1RvLnByb3RvdHlwZS50
cmFuc2Zvcm0gPSBmdW5jdGlvbiBUcmFuc2Zvcm1JbmxpbmVMaW5rVG9fdHJhbnNmb3JtKGFzdCkg
ewotICAgIHZhciBfc3ludGF4ID0gdGhpcy5zeW50YXg7Ci0gICAgdmFyIHRyYXZlcnNlID0gX3N5
bnRheC50cmF2ZXJzZTsKLSAgICB2YXIgYiA9IF9zeW50YXguYnVpbGRlcnM7Ci0KLSAgICBmdW5j
dGlvbiBidWlsZFByb2dyYW0oY29udGVudCwgbG9jKSB7Ci0gICAgICByZXR1cm4gYi5wcm9ncmFt
KFtidWlsZFN0YXRlbWVudChjb250ZW50LCBsb2MpXSwgbnVsbCwgbG9jKTsKLSAgICB9Ci0KLSAg
ICBmdW5jdGlvbiBidWlsZFN0YXRlbWVudChjb250ZW50LCBsb2MpIHsKLSAgICAgIHN3aXRjaCAo
Y29udGVudC50eXBlKSB7Ci0gICAgICAgIGNhc2UgJ1BhdGhFeHByZXNzaW9uJzoKLSAgICAgICAg
ICByZXR1cm4gYi5tdXN0YWNoZShjb250ZW50LCBudWxsLCBudWxsLCBudWxsLCBsb2MpOwotCi0g
ICAgICAgIGNhc2UgJ1N1YkV4cHJlc3Npb24nOgotICAgICAgICAgIHJldHVybiBiLm11c3RhY2hl
KGNvbnRlbnQucGF0aCwgY29udGVudC5wYXJhbXMsIGNvbnRlbnQuaGFzaCwgbnVsbCwgbG9jKTsK
LQotICAgICAgICAvLyBUaGUgZGVmYXVsdCBjYXNlIGhhbmRsZXMgbGl0ZXJhbHMuCi0gICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgcmV0dXJuIGIudGV4dCgnJyArIGNvbnRlbnQudmFsdWUsIGxv
Yyk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gdW5zYWZlSHRtbChleHByKSB7Ci0g
ICAgICByZXR1cm4gYi5zZXhwcignLWh0bWwtc2FmZScsIFtleHByXSk7Ci0gICAgfQotCi0gICAg
dHJhdmVyc2UoYXN0LCB7Ci0gICAgICBNdXN0YWNoZVN0YXRlbWVudDogZnVuY3Rpb24gKG5vZGUp
IHsKLSAgICAgICAgaWYgKG5vZGUucGF0aC5vcmlnaW5hbCA9PT0gJ2xpbmstdG8nKSB7Ci0gICAg
ICAgICAgdmFyIGNvbnRlbnQgPSBub2RlLmVzY2FwZWQgPyBub2RlLnBhcmFtc1swXSA6IHVuc2Fm
ZUh0bWwobm9kZS5wYXJhbXNbMF0pOwotICAgICAgICAgIHJldHVybiBiLmJsb2NrKCdsaW5rLXRv
Jywgbm9kZS5wYXJhbXMuc2xpY2UoMSksIG5vZGUuaGFzaCwgYnVpbGRQcm9ncmFtKGNvbnRlbnQs
IG5vZGUubG9jKSwgbnVsbCwgbm9kZS5sb2MpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSk7
Ci0KLSAgICByZXR1cm4gYXN0OwotICB9OwotfSk7Ci1lbmlmZWQoJ2VtYmVyLXRlbXBsYXRlLWNv
bXBpbGVyL3BsdWdpbnMvdHJhbnNmb3JtLWlucHV0LW9uLXRvLW9uRXZlbnQnLCBbJ2V4cG9ydHMn
LCAnZW1iZXItbWV0YWwvZGVidWcnLCAnZW1iZXItdGVtcGxhdGUtY29tcGlsZXIvc3lzdGVtL2Nh
bGN1bGF0ZS1sb2NhdGlvbi1kaXNwbGF5J10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRh
bERlYnVnLCBfZW1iZXJUZW1wbGF0ZUNvbXBpbGVyU3lzdGVtQ2FsY3VsYXRlTG9jYXRpb25EaXNw
bGF5KSB7Ci0gICd1c2Ugc3RyaWN0JzsKLQotICAvKioKLSAgIEBtb2R1bGUgZW1iZXIKLSAgIEBz
dWJtb2R1bGUgZW1iZXItaHRtbGJhcnMKLSAgKi8KLQotICAvKioKLSAgICBBbiBIVE1MQmFycyBB
U1QgdHJhbnNmb3JtYXRpb24gdGhhdCByZXBsYWNlcyBhbGwgaW5zdGFuY2VzIG9mCi0gIAotICAg
IGBgYGhhbmRsZWJhcnMKLSAgIHt7aW5wdXQgb249ImVudGVyIiBhY3Rpb249ImRvU3R1ZmYifX0K
LSAgIHt7aW5wdXQgb249ImtleS1wcmVzcyIgYWN0aW9uPSJkb1N0dWZmIn19Ci0gICAgYGBgCi0g
IAotICAgIHdpdGgKLSAgCi0gICAgYGBgaGFuZGxlYmFycwotICAge3tpbnB1dCBlbnRlcj0iZG9T
dHVmZiJ9fQotICAge3tpbnB1dCBrZXktcHJlc3M9ImRvU3R1ZmYifX0KLSAgICBgYGAKLSAgCi0g
ICAgQHByaXZhdGUKLSAgICBAY2xhc3MgVHJhbnNmb3JtSW5wdXRPblRvT25FdmVudAotICAqLwot
ICBmdW5jdGlvbiBUcmFuc2Zvcm1JbnB1dE9uVG9PbkV2ZW50KCkgewotICAgIHZhciBvcHRpb25z
ID0gYXJndW1lbnRzLmxlbmd0aCA8PSAwIHx8IGFyZ3VtZW50c1swXSA9PT0gdW5kZWZpbmVkID8g
e30gOiBhcmd1bWVudHNbMF07Ci0KLSAgICAvLyBzZXQgbGF0ZXIgd2l0aGluIEhUTUxCYXJzIHRv
IHRoZSBzeW50YXggcGFja2FnZQotICAgIHRoaXMuc3ludGF4ID0gbnVsbDsKLSAgICB0aGlzLm9w
dGlvbnMgPSBvcHRpb25zOwotICB9Ci0KLSAgLyoqCi0gICAgQHByaXZhdGUKLSAgICBAbWV0aG9k
IHRyYW5zZm9ybQotICAgIEBwYXJhbSB7QVNUfSBhc3QgVGhlIEFTVCB0byBiZSB0cmFuc2Zvcm1l
ZC4KLSAgKi8KLSAgVHJhbnNmb3JtSW5wdXRPblRvT25FdmVudC5wcm90b3R5cGUudHJhbnNmb3Jt
ID0gZnVuY3Rpb24gVHJhbnNmb3JtSW5wdXRPblRvT25FdmVudF90cmFuc2Zvcm0oYXN0KSB7Ci0g
ICAgdmFyIHBsdWdpbkNvbnRleHQgPSB0aGlzOwotICAgIHZhciBiID0gcGx1Z2luQ29udGV4dC5z
eW50YXguYnVpbGRlcnM7Ci0gICAgdmFyIHdhbGtlciA9IG5ldyBwbHVnaW5Db250ZXh0LnN5bnRh
eC5XYWxrZXIoKTsKLSAgICB2YXIgbW9kdWxlTmFtZSA9IHBsdWdpbkNvbnRleHQub3B0aW9ucy5t
b2R1bGVOYW1lOwotCi0gICAgd2Fsa2VyLnZpc2l0KGFzdCwgZnVuY3Rpb24gKG5vZGUpIHsKLSAg
ICAgIGlmIChwbHVnaW5Db250ZXh0LnZhbGlkYXRlKG5vZGUpKSB7Ci0gICAgICAgIHZhciBhY3Rp
b24gPSBoYXNoUGFpckZvcktleShub2RlLmhhc2gsICdhY3Rpb24nKTsKLSAgICAgICAgdmFyIG9u
ID0gaGFzaFBhaXJGb3JLZXkobm9kZS5oYXNoLCAnb24nKTsKLSAgICAgICAgdmFyIG9uRXZlbnQg
PSBoYXNoUGFpckZvcktleShub2RlLmhhc2gsICdvbkV2ZW50Jyk7Ci0gICAgICAgIHZhciBub3Jt
YWxpemVkT24gPSBvbiB8fCBvbkV2ZW50OwotICAgICAgICB2YXIgbW9kdWxlSW5mbyA9IF9lbWJl
clRlbXBsYXRlQ29tcGlsZXJTeXN0ZW1DYWxjdWxhdGVMb2NhdGlvbkRpc3BsYXkuZGVmYXVsdCht
b2R1bGVOYW1lLCBub2RlLmxvYyk7Ci0KLSAgICAgICAgaWYgKG5vcm1hbGl6ZWRPbiAmJiBub3Jt
YWxpemVkT24udmFsdWUudHlwZSAhPT0gJ1N0cmluZ0xpdGVyYWwnKSB7Ci0gICAgICAgICAgX2Vt
YmVyTWV0YWxEZWJ1Zy5kZXByZWNhdGUoJ1VzaW5nIGEgZHluYW1pYyB2YWx1ZSBmb3IgXCcje25v
cm1hbGl6ZWRPbi5rZXl9PVwnIHdpdGggdGhlIFwne3tpbnB1dH19XCcgaGVscGVyICcgKyBtb2R1
bGVJbmZvICsgJ2lzIGRlcHJlY2F0ZWQuJywgZmFsc2UsIHsgaWQ6ICdlbWJlci10ZW1wbGF0ZS1j
b21waWxlci50cmFuc2Zvcm0taW5wdXQtb24tdG8tb25FdmVudC5keW5hbWljLXZhbHVlJywgdW50
aWw6ICczLjAuMCcgfSk7Ci0KLSAgICAgICAgICBub3JtYWxpemVkT24ua2V5ID0gJ29uRXZlbnQn
OwotICAgICAgICAgIHJldHVybjsgLy8gZXhpdCBlYXJseSwgYXMgd2UgY2Fubm90IHRyYW5zZm9y
bSBmdXJ0aGVyCi0gICAgICAgIH0KLQotICAgICAgICByZW1vdmVGcm9tSGFzaChub2RlLmhhc2gs
IG5vcm1hbGl6ZWRPbik7Ci0gICAgICAgIHJlbW92ZUZyb21IYXNoKG5vZGUuaGFzaCwgYWN0aW9u
KTsKLQotICAgICAgICBpZiAoIWFjdGlvbikgewotICAgICAgICAgIF9lbWJlck1ldGFsRGVidWcu
ZGVwcmVjYXRlKCdVc2luZyBcJ3t7aW5wdXQgJyArIG5vcm1hbGl6ZWRPbi5rZXkgKyAnPSInICsg
bm9ybWFsaXplZE9uLnZhbHVlLnZhbHVlICsgJyIgLi4ufX1cJyB3aXRob3V0IHNwZWNpZnlpbmcg
YW4gYWN0aW9uICcgKyBtb2R1bGVJbmZvICsgJ3dpbGwgZG8gbm90aGluZy4nLCBmYWxzZSwgeyBp
ZDogJ2VtYmVyLXRlbXBsYXRlLWNvbXBpbGVyLnRyYW5zZm9ybS1pbnB1dC1vbi10by1vbkV2ZW50
Lm5vLWFjdGlvbicsIHVudGlsOiAnMy4wLjAnIH0pOwotCi0gICAgICAgICAgcmV0dXJuOyAvLyBl
eGl0IGVhcmx5LCBpZiBubyBhY3Rpb24gd2FzIGF2YWlsYWJsZSB0aGVyZSBpcyBub3RoaW5nIHRv
IGRvCi0gICAgICAgIH0KLQotICAgICAgICB2YXIgc3BlY2lmaWVkT24gPSBub3JtYWxpemVkT24g
PyBub3JtYWxpemVkT24ua2V5ICsgJz0iJyArIG5vcm1hbGl6ZWRPbi52YWx1ZS52YWx1ZSArICci
ICcgOiAnJzsKLSAgICAgICAgaWYgKG5vcm1hbGl6ZWRPbiAmJiBub3JtYWxpemVkT24udmFsdWUu
dmFsdWUgPT09ICdrZXlQcmVzcycpIHsKLSAgICAgICAgICAvLyB1c2luZyBga2V5UHJlc3NgIGlu
IHRoZSByb290IG9mIHRoZSBjb21wb25lbnQgd2lsbAotICAgICAgICAgIC8vIGNsb2JiZXIgdGhl
IGtleVByZXNzIGV2ZW50IGhhbmRsZXIKLSAgICAgICAgICBub3JtYWxpemVkT24udmFsdWUudmFs
dWUgPSAna2V5LXByZXNzJzsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciBleHBlY3RlZCA9IChu
b3JtYWxpemVkT24gPyBub3JtYWxpemVkT24udmFsdWUudmFsdWUgOiAnZW50ZXInKSArICc9Iicg
KyBhY3Rpb24udmFsdWUub3JpZ2luYWwgKyAnIic7Ci0KLSAgICAgICAgX2VtYmVyTWV0YWxEZWJ1
Zy5kZXByZWNhdGUoJ1VzaW5nIFwne3tpbnB1dCAnICsgc3BlY2lmaWVkT24gKyAnYWN0aW9uPSIn
ICsgYWN0aW9uLnZhbHVlLm9yaWdpbmFsICsgJyJ9fVwnICcgKyBtb2R1bGVJbmZvICsgJ2lzIGRl
cHJlY2F0ZWQuIFBsZWFzZSB1c2UgXCd7e2lucHV0ICcgKyBleHBlY3RlZCArICd9fVwnIGluc3Rl
YWQuJywgZmFsc2UsIHsgaWQ6ICdlbWJlci10ZW1wbGF0ZS1jb21waWxlci50cmFuc2Zvcm0taW5w
dXQtb24tdG8tb25FdmVudC5ub3JtYWxpemVkLW9uJywgdW50aWw6ICczLjAuMCcgfSk7Ci0gICAg
ICAgIGlmICghbm9ybWFsaXplZE9uKSB7Ci0gICAgICAgICAgbm9ybWFsaXplZE9uID0gYi5wYWly
KCdvbkV2ZW50JywgYi5zdHJpbmcoJ2VudGVyJykpOwotICAgICAgICB9Ci0KLSAgICAgICAgbm9k
ZS5oYXNoLnBhaXJzLnB1c2goYi5wYWlyKG5vcm1hbGl6ZWRPbi52YWx1ZS52YWx1ZSwgYWN0aW9u
LnZhbHVlKSk7Ci0gICAgICB9Ci0gICAgfSk7Ci0KLSAgICByZXR1cm4gYXN0OwotICB9OwotCi0g
IFRyYW5zZm9ybUlucHV0T25Ub09uRXZlbnQucHJvdG90eXBlLnZhbGlkYXRlID0gZnVuY3Rpb24g
VHJhbnNmb3JtV2l0aEFzVG9IYXNoX3ZhbGlkYXRlKG5vZGUpIHsKLSAgICByZXR1cm4gbm9kZS50
eXBlID09PSAnTXVzdGFjaGVTdGF0ZW1lbnQnICYmIG5vZGUucGF0aC5vcmlnaW5hbCA9PT0gJ2lu
cHV0JyAmJiAoaGFzaFBhaXJGb3JLZXkobm9kZS5oYXNoLCAnYWN0aW9uJykgfHwgaGFzaFBhaXJG
b3JLZXkobm9kZS5oYXNoLCAnb24nKSB8fCBoYXNoUGFpckZvcktleShub2RlLmhhc2gsICdvbkV2
ZW50JykpOwotICB9OwotCi0gIGZ1bmN0aW9uIGhhc2hQYWlyRm9yS2V5KGhhc2gsIGtleSkgewot
ICAgIGZvciAodmFyIGkgPSAwLCBsID0gaGFzaC5wYWlycy5sZW5ndGg7IGkgPCBsOyBpKyspIHsK
LSAgICAgIHZhciBwYWlyID0gaGFzaC5wYWlyc1tpXTsKLSAgICAgIGlmIChwYWlyLmtleSA9PT0g
a2V5KSB7Ci0gICAgICAgIHJldHVybiBwYWlyOwotICAgICAgfQotICAgIH0KLQotICAgIHJldHVy
biBmYWxzZTsKLSAgfQotCi0gIGZ1bmN0aW9uIHJlbW92ZUZyb21IYXNoKGhhc2gsIHBhaXJUb1Jl
bW92ZSkgewotICAgIHZhciBuZXdQYWlycyA9IFtdOwotICAgIGZvciAodmFyIGkgPSAwLCBsID0g
aGFzaC5wYWlycy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKLSAgICAgIHZhciBwYWlyID0gaGFzaC5w
YWlyc1tpXTsKLQotICAgICAgaWYgKHBhaXIgIT09IHBhaXJUb1JlbW92ZSkgewotICAgICAgICBu
ZXdQYWlycy5wdXNoKHBhaXIpOwotICAgICAgfQotICAgIH0KLQotICAgIGhhc2gucGFpcnMgPSBu
ZXdQYWlyczsKLSAgfQotCi0gIGV4cG9ydHMuZGVmYXVsdCA9IFRyYW5zZm9ybUlucHV0T25Ub09u
RXZlbnQ7Ci19KTsKLWVuaWZlZCgnZW1iZXItdGVtcGxhdGUtY29tcGlsZXIvcGx1Z2lucy90cmFu
c2Zvcm0taXRlbS1jbGFzcycsIFsnZXhwb3J0cyddLCBmdW5jdGlvbiAoZXhwb3J0cykgewotICAn
dXNlIHN0cmljdCc7Ci0KLSAgZXhwb3J0cy5kZWZhdWx0ID0gVHJhbnNmb3JtSXRlbUNsYXNzOwot
Ci0gIGZ1bmN0aW9uIFRyYW5zZm9ybUl0ZW1DbGFzcygpIHsKLSAgICB0aGlzLnN5bnRheCA9IG51
bGw7Ci0gIH0KLQotICBUcmFuc2Zvcm1JdGVtQ2xhc3MucHJvdG90eXBlLnRyYW5zZm9ybSA9IGZ1
bmN0aW9uIFRyYW5zZm9ybUl0ZW1DbGFzc190cmFuc2Zvcm0oYXN0KSB7Ci0gICAgdmFyIGIgPSB0
aGlzLnN5bnRheC5idWlsZGVyczsKLSAgICB2YXIgd2Fsa2VyID0gbmV3IHRoaXMuc3ludGF4Lldh
bGtlcigpOwotCi0gICAgd2Fsa2VyLnZpc2l0KGFzdCwgZnVuY3Rpb24gKG5vZGUpIHsKLSAgICAg
IGlmICghdmFsaWRhdGUobm9kZSkpIHsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotCi0gICAg
ICBlYWNoKG5vZGUuaGFzaC5wYWlycywgZnVuY3Rpb24gKHBhaXIpIHsKLSAgICAgICAgdmFyIGtl
eSA9IHBhaXIua2V5OwotICAgICAgICB2YXIgdmFsdWUgPSBwYWlyLnZhbHVlOwotCi0gICAgICAg
IGlmIChrZXkgIT09ICdpdGVtQ2xhc3MnKSB7Ci0gICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0gICAgICAgIGlmICh2YWx1ZS50eXBlID09PSAnU3RyaW5nTGl0ZXJhbCcpIHsKLSAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgcHJvcE5hbWUgPSB2YWx1ZS5vcmln
aW5hbDsKLSAgICAgICAgdmFyIHBhcmFtcyA9IFt2YWx1ZV07Ci0gICAgICAgIHZhciBzZXhwclBh
cmFtcyA9IFtiLnN0cmluZyhwcm9wTmFtZSksIGIucGF0aChwcm9wTmFtZSldOwotCi0gICAgICAg
IHBhcmFtcy5wdXNoKGIuc2V4cHIoYi5zdHJpbmcoJy1ub3JtYWxpemUtY2xhc3MnKSwgc2V4cHJQ
YXJhbXMpKTsKLSAgICAgICAgdmFyIHNleHByID0gYi5zZXhwcihiLnN0cmluZygnaWYnKSwgcGFy
YW1zKTsKLQotICAgICAgICBwYWlyLnZhbHVlID0gc2V4cHI7Ci0gICAgICB9KTsKLSAgICB9KTsK
LQotICAgIHJldHVybiBhc3Q7Ci0gIH07Ci0KLSAgZnVuY3Rpb24gdmFsaWRhdGUobm9kZSkgewot
ICAgIHJldHVybiAobm9kZS50eXBlID09PSAnQmxvY2tTdGF0ZW1lbnQnIHx8IG5vZGUudHlwZSA9
PT0gJ011c3RhY2hlU3RhdGVtZW50JykgJiYgbm9kZS5wYXRoLm9yaWdpbmFsID09PSAnY29sbGVj
dGlvbic7Ci0gIH0KLQotICBmdW5jdGlvbiBlYWNoKGxpc3QsIGNhbGxiYWNrKSB7Ci0gICAgZm9y
ICh2YXIgaSA9IDAsIGwgPSBsaXN0Lmxlbmd0aDsgaSA8IGw7IGkrKykgewotICAgICAgY2FsbGJh
Y2sobGlzdFtpXSk7Ci0gICAgfQotICB9Ci19KTsKLWVuaWZlZCgnZW1iZXItdGVtcGxhdGUtY29t
cGlsZXIvcGx1Z2lucy90cmFuc2Zvcm0tb2xkLWJpbmRpbmctc3ludGF4JywgWydleHBvcnRzJywg
J2VtYmVyLW1ldGFsL2RlYnVnJywgJ2VtYmVyLXRlbXBsYXRlLWNvbXBpbGVyL3N5c3RlbS9jYWxj
dWxhdGUtbG9jYXRpb24tZGlzcGxheSddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0YWxE
ZWJ1ZywgX2VtYmVyVGVtcGxhdGVDb21waWxlclN5c3RlbUNhbGN1bGF0ZUxvY2F0aW9uRGlzcGxh
eSkgewotICAndXNlIHN0cmljdCc7Ci0KLSAgZXhwb3J0cy5kZWZhdWx0ID0gVHJhbnNmb3JtT2xk
QmluZGluZ1N5bnRheDsKLQotICBmdW5jdGlvbiBUcmFuc2Zvcm1PbGRCaW5kaW5nU3ludGF4KG9w
dGlvbnMpIHsKLSAgICB0aGlzLnN5bnRheCA9IG51bGw7Ci0gICAgdGhpcy5vcHRpb25zID0gb3B0
aW9uczsKLSAgfQotCi0gIFRyYW5zZm9ybU9sZEJpbmRpbmdTeW50YXgucHJvdG90eXBlLnRyYW5z
Zm9ybSA9IGZ1bmN0aW9uIFRyYW5zZm9ybU9sZEJpbmRpbmdTeW50YXhfdHJhbnNmb3JtKGFzdCkg
ewotICAgIHZhciBtb2R1bGVOYW1lID0gdGhpcy5vcHRpb25zLm1vZHVsZU5hbWU7Ci0gICAgdmFy
IGIgPSB0aGlzLnN5bnRheC5idWlsZGVyczsKLSAgICB2YXIgd2Fsa2VyID0gbmV3IHRoaXMuc3lu
dGF4LldhbGtlcigpOwotCi0gICAgd2Fsa2VyLnZpc2l0KGFzdCwgZnVuY3Rpb24gKG5vZGUpIHsK
LSAgICAgIGlmICghdmFsaWRhdGUobm9kZSkpIHsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQot
Ci0gICAgICBlYWNoKG5vZGUuaGFzaC5wYWlycywgZnVuY3Rpb24gKHBhaXIpIHsKLSAgICAgICAg
dmFyIGtleSA9IHBhaXIua2V5OwotICAgICAgICB2YXIgdmFsdWUgPSBwYWlyLnZhbHVlOwotCi0g
ICAgICAgIHZhciBzb3VyY2VJbmZvcm1hdGlvbiA9IF9lbWJlclRlbXBsYXRlQ29tcGlsZXJTeXN0
ZW1DYWxjdWxhdGVMb2NhdGlvbkRpc3BsYXkuZGVmYXVsdChtb2R1bGVOYW1lLCBwYWlyLmxvYyk7
Ci0KLSAgICAgICAgaWYgKGtleSA9PT0gJ2NsYXNzQmluZGluZycpIHsKLSAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLQotICAgICAgICBfZW1iZXJNZXRhbERlYnVnLmFzc2VydCgnU2V0dGlu
ZyBcJ2F0dHJpYnV0ZUJpbmRpbmdzXCcgdmlhIHRlbXBsYXRlIGhlbHBlcnMgaXMgbm90IGFsbG93
ZWQgJyArIHNvdXJjZUluZm9ybWF0aW9uLCBrZXkgIT09ICdhdHRyaWJ1dGVCaW5kaW5ncycpOwot
Ci0gICAgICAgIGlmIChrZXkuc3Vic3RyKC03KSA9PT0gJ0JpbmRpbmcnKSB7Ci0gICAgICAgICAg
dmFyIG5ld0tleSA9IGtleS5zbGljZSgwLCAtNyk7Ci0KLSAgICAgICAgICBfZW1iZXJNZXRhbERl
YnVnLmRlcHJlY2F0ZSgnWW91XCdyZSB1c2luZyBsZWdhY3kgYmluZGluZyBzeW50YXg6ICcgKyBr
ZXkgKyAnPScgKyBleHByVG9TdHJpbmcodmFsdWUpICsgJyAnICsgc291cmNlSW5mb3JtYXRpb24g
KyAnLiBQbGVhc2UgcmVwbGFjZSB3aXRoICcgKyBuZXdLZXkgKyAnPScgKyB2YWx1ZS5vcmlnaW5h
bCwgZmFsc2UsIHsgaWQ6ICdlbWJlci10ZW1wbGF0ZS1jb21waWxlci50cmFuc2Zvcm0tb2xkLWJp
bmRpbmctc3ludGF4JywgdW50aWw6ICczLjAuMCcgfSk7Ci0KLSAgICAgICAgICBwYWlyLmtleSA9
IG5ld0tleTsKLSAgICAgICAgICBpZiAodmFsdWUudHlwZSA9PT0gJ1N0cmluZ0xpdGVyYWwnKSB7
Ci0gICAgICAgICAgICBwYWlyLnZhbHVlID0gYi5wYXRoKHZhbHVlLm9yaWdpbmFsKTsKLSAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0pOwotICAgIH0pOwotCi0gICAgcmV0dXJuIGFzdDsK
LSAgfTsKLQotICBmdW5jdGlvbiB2YWxpZGF0ZShub2RlKSB7Ci0gICAgcmV0dXJuIG5vZGUudHlw
ZSA9PT0gJ0Jsb2NrU3RhdGVtZW50JyB8fCBub2RlLnR5cGUgPT09ICdNdXN0YWNoZVN0YXRlbWVu
dCc7Ci0gIH0KLQotICBmdW5jdGlvbiBlYWNoKGxpc3QsIGNhbGxiYWNrKSB7Ci0gICAgZm9yICh2
YXIgaSA9IDAsIGwgPSBsaXN0Lmxlbmd0aDsgaSA8IGw7IGkrKykgewotICAgICAgY2FsbGJhY2so
bGlzdFtpXSk7Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gZXhwclRvU3RyaW5nKGV4cHIpIHsK
LSAgICBzd2l0Y2ggKGV4cHIudHlwZSkgewotICAgICAgY2FzZSAnU3RyaW5nTGl0ZXJhbCc6Ci0g
ICAgICAgIHJldHVybiAnIicgKyBleHByLm9yaWdpbmFsICsgJyInOwotICAgICAgY2FzZSAnUGF0
aEV4cHJlc3Npb24nOgotICAgICAgICByZXR1cm4gZXhwci5vcmlnaW5hbDsKLSAgICB9Ci0gIH0K
LX0pOwotZW5pZmVkKCdlbWJlci10ZW1wbGF0ZS1jb21waWxlci9wbHVnaW5zL3RyYW5zZm9ybS1v
bGQtY2xhc3MtYmluZGluZy1zeW50YXgnLCBbJ2V4cG9ydHMnXSwgZnVuY3Rpb24gKGV4cG9ydHMp
IHsKLSAgJ3VzZSBzdHJpY3QnOwotCi0gIGV4cG9ydHMuZGVmYXVsdCA9IFRyYW5zZm9ybU9sZENs
YXNzQmluZGluZ1N5bnRheDsKLQotICBmdW5jdGlvbiBUcmFuc2Zvcm1PbGRDbGFzc0JpbmRpbmdT
eW50YXgob3B0aW9ucykgewotICAgIHRoaXMuc3ludGF4ID0gbnVsbDsKLSAgICB0aGlzLm9wdGlv
bnMgPSBvcHRpb25zOwotICB9Ci0KLSAgVHJhbnNmb3JtT2xkQ2xhc3NCaW5kaW5nU3ludGF4LnBy
b3RvdHlwZS50cmFuc2Zvcm0gPSBmdW5jdGlvbiBUcmFuc2Zvcm1PbGRDbGFzc0JpbmRpbmdTeW50
YXhfdHJhbnNmb3JtKGFzdCkgewotICAgIHZhciBiID0gdGhpcy5zeW50YXguYnVpbGRlcnM7Ci0g
ICAgdmFyIHdhbGtlciA9IG5ldyB0aGlzLnN5bnRheC5XYWxrZXIoKTsKLQotICAgIHdhbGtlci52
aXNpdChhc3QsIGZ1bmN0aW9uIChub2RlKSB7Ci0gICAgICBpZiAoIXZhbGlkYXRlKG5vZGUpKSB7
Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLQotICAgICAgdmFyIGFsbE9mVGhlTWljcm9zeW50
YXhlcyA9IFtdOwotICAgICAgdmFyIGFsbE9mVGhlTWljcm9zeW50YXhJbmRleGVzID0gW107Ci0g
ICAgICB2YXIgY2xhc3NQYWlyID0gdW5kZWZpbmVkOwotCi0gICAgICBlYWNoKG5vZGUuaGFzaC5w
YWlycywgZnVuY3Rpb24gKHBhaXIsIGluZGV4KSB7Ci0gICAgICAgIHZhciBrZXkgPSBwYWlyLmtl
eTsKLQotICAgICAgICBpZiAoa2V5ID09PSAnY2xhc3NCaW5kaW5nJyB8fCBrZXkgPT09ICdjbGFz
c05hbWVCaW5kaW5ncycpIHsKLSAgICAgICAgICBhbGxPZlRoZU1pY3Jvc3ludGF4SW5kZXhlcy5w
dXNoKGluZGV4KTsKLSAgICAgICAgICBhbGxPZlRoZU1pY3Jvc3ludGF4ZXMucHVzaChwYWlyKTsK
LSAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdjbGFzcycpIHsKLSAgICAgICAgICBjbGFzc1Bh
aXIgPSBwYWlyOwotICAgICAgICB9Ci0gICAgICB9KTsKLQotICAgICAgaWYgKGFsbE9mVGhlTWlj
cm9zeW50YXhlcy5sZW5ndGggPT09IDApIHsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotCi0g
ICAgICB2YXIgY2xhc3NWYWx1ZSA9IFtdOwotCi0gICAgICBpZiAoY2xhc3NQYWlyKSB7Ci0gICAg
ICAgIGNsYXNzVmFsdWUucHVzaChjbGFzc1BhaXIudmFsdWUpOwotICAgICAgICBjbGFzc1ZhbHVl
LnB1c2goYi5zdHJpbmcoJyAnKSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBjbGFzc1BhaXIg
PSBiLnBhaXIoJ2NsYXNzJywgbnVsbCk7Ci0gICAgICAgIG5vZGUuaGFzaC5wYWlycy5wdXNoKGNs
YXNzUGFpcik7Ci0gICAgICB9Ci0KLSAgICAgIGVhY2goYWxsT2ZUaGVNaWNyb3N5bnRheEluZGV4
ZXMsIGZ1bmN0aW9uIChpbmRleCkgewotICAgICAgICBub2RlLmhhc2gucGFpcnMuc3BsaWNlKGlu
ZGV4LCAxKTsKLSAgICAgIH0pOwotCi0gICAgICBlYWNoKGFsbE9mVGhlTWljcm9zeW50YXhlcywg
ZnVuY3Rpb24gKF9yZWYpIHsKLSAgICAgICAgdmFyIHZhbHVlID0gX3JlZi52YWx1ZTsKLSAgICAg
ICAgdmFyIGxvYyA9IF9yZWYubG9jOwotCi0gICAgICAgIHZhciBzZXhwcnMgPSBbXTsKLSAgICAg
ICAgLy8gVE9ETzogYWRkIGhlbHBmdWwgZGVwcmVjYXRpb24gd2hlbiBib3RoIGBjbGFzc05hbWVz
YCBhbmQgYGNsYXNzTmFtZUJpbmRpbmdzYCBjYW4KLSAgICAgICAgLy8gYmUgcmVtb3ZlZC4KLQot
ICAgICAgICBpZiAodmFsdWUudHlwZSA9PT0gJ1N0cmluZ0xpdGVyYWwnKSB7Ci0gICAgICAgICAg
dmFyIG1pY3Jvc3ludGF4ID0gcGFyc2VNaWNyb3N5bnRheCh2YWx1ZS5vcmlnaW5hbCk7Ci0KLSAg
ICAgICAgICBidWlsZFNleHBycyhtaWNyb3N5bnRheCwgc2V4cHJzLCBiKTsKLQotICAgICAgICAg
IGNsYXNzVmFsdWUucHVzaC5hcHBseShjbGFzc1ZhbHVlLCBzZXhwcnMpOwotICAgICAgICB9Ci0g
ICAgICB9KTsKLQotICAgICAgdmFyIGhhc2ggPSBiLmhhc2goKTsKLSAgICAgIGNsYXNzUGFpci52
YWx1ZSA9IGIuc2V4cHIoYi5zdHJpbmcoJ2NvbmNhdCcpLCBjbGFzc1ZhbHVlLCBoYXNoKTsKLSAg
ICB9KTsKLQotICAgIHJldHVybiBhc3Q7Ci0gIH07Ci0KLSAgZnVuY3Rpb24gYnVpbGRTZXhwcnMo
bWljcm9zeW50YXgsIHNleHBycywgYikgewotICAgIGZvciAodmFyIGkgPSAwLCBsID0gbWljcm9z
eW50YXgubGVuZ3RoOyBpIDwgbDsgaSsrKSB7Ci0gICAgICB2YXIgX21pY3Jvc3ludGF4JGkgPSBt
aWNyb3N5bnRheFtpXTsKLSAgICAgIHZhciBwcm9wTmFtZSA9IF9taWNyb3N5bnRheCRpWzBdOwot
ICAgICAgdmFyIGFjdGl2ZUNsYXNzID0gX21pY3Jvc3ludGF4JGlbMV07Ci0gICAgICB2YXIgaW5h
Y3RpdmVDbGFzcyA9IF9taWNyb3N5bnRheCRpWzJdOwotCi0gICAgICB2YXIgc2V4cHIgPSB1bmRl
ZmluZWQ7Ci0KLSAgICAgIC8vIDpteS1jbGFzcy1uYW1lIG1pY3Jvc3ludGF4IGZvciBzdGF0aWMg
dmFsdWVzCi0gICAgICBpZiAocHJvcE5hbWUgPT09ICcnKSB7Ci0gICAgICAgIHNleHByID0gYi5z
dHJpbmcoYWN0aXZlQ2xhc3MpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgdmFyIHBhcmFtcyA9
IFtiLnBhdGgocHJvcE5hbWUpXTsKLQotICAgICAgICBpZiAoYWN0aXZlQ2xhc3MpIHsKLSAgICAg
ICAgICBwYXJhbXMucHVzaChiLnN0cmluZyhhY3RpdmVDbGFzcykpOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgIHZhciBzZXhwclBhcmFtcyA9IFtiLnN0cmluZyhwcm9wTmFtZSksIGIucGF0
aChwcm9wTmFtZSldOwotCi0gICAgICAgICAgdmFyIGhhc2ggPSBiLmhhc2goKTsKLSAgICAgICAg
ICBpZiAoYWN0aXZlQ2xhc3MgIT09IHVuZGVmaW5lZCkgewotICAgICAgICAgICAgaGFzaC5wYWly
cy5wdXNoKGIucGFpcignYWN0aXZlQ2xhc3MnLCBiLnN0cmluZyhhY3RpdmVDbGFzcykpKTsKLSAg
ICAgICAgICB9Ci0KLSAgICAgICAgICBpZiAoaW5hY3RpdmVDbGFzcyAhPT0gdW5kZWZpbmVkKSB7
Ci0gICAgICAgICAgICBoYXNoLnBhaXJzLnB1c2goYi5wYWlyKCdpbmFjdGl2ZUNsYXNzJywgYi5z
dHJpbmcoaW5hY3RpdmVDbGFzcykpKTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBwYXJhbXMu
cHVzaChiLnNleHByKGIuc3RyaW5nKCctbm9ybWFsaXplLWNsYXNzJyksIHNleHByUGFyYW1zLCBo
YXNoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaW5hY3RpdmVDbGFzcykgewotICAgICAg
ICAgIHBhcmFtcy5wdXNoKGIuc3RyaW5nKGluYWN0aXZlQ2xhc3MpKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIHNleHByID0gYi5zZXhwcihiLnN0cmluZygnaWYnKSwgcGFyYW1zKTsKLSAgICAgIH0K
LQotICAgICAgc2V4cHJzLnB1c2goc2V4cHIpOwotICAgICAgc2V4cHJzLnB1c2goYi5zdHJpbmco
JyAnKSk7Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gdmFsaWRhdGUobm9kZSkgewotICAgIHJl
dHVybiBub2RlLnR5cGUgPT09ICdCbG9ja1N0YXRlbWVudCcgfHwgbm9kZS50eXBlID09PSAnTXVz
dGFjaGVTdGF0ZW1lbnQnOwotICB9Ci0KLSAgZnVuY3Rpb24gZWFjaChsaXN0LCBjYWxsYmFjaykg
ewotICAgIGZvciAodmFyIGkgPSAwLCBsID0gbGlzdC5sZW5ndGg7IGkgPCBsOyBpKyspIHsKLSAg
ICAgIGNhbGxiYWNrKGxpc3RbaV0sIGkpOwotICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIHBhcnNl
TWljcm9zeW50YXgoc3RyaW5nKSB7Ci0gICAgdmFyIHNlZ21lbnRzID0gc3RyaW5nLnNwbGl0KCcg
Jyk7Ci0KLSAgICBmb3IgKHZhciBpID0gMCwgbCA9IHNlZ21lbnRzLmxlbmd0aDsgaSA8IGw7IGkr
KykgewotICAgICAgc2VnbWVudHNbaV0gPSBzZWdtZW50c1tpXS5zcGxpdCgnOicpOwotICAgIH0K
LQotICAgIHJldHVybiBzZWdtZW50czsKLSAgfQotfSk7Ci1lbmlmZWQoJ2VtYmVyLXRlbXBsYXRl
LWNvbXBpbGVyL3BsdWdpbnMvdHJhbnNmb3JtLXRvcC1sZXZlbC1jb21wb25lbnRzJywgWydleHBv
cnRzJ10sIGZ1bmN0aW9uIChleHBvcnRzKSB7Ci0gICd1c2Ugc3RyaWN0JzsKLQotICBmdW5jdGlv
biBUcmFuc2Zvcm1Ub3BMZXZlbENvbXBvbmVudHMoKSB7Ci0gICAgLy8gc2V0IGxhdGVyIHdpdGhp
biBIVE1MQmFycyB0byB0aGUgc3ludGF4IHBhY2thZ2UKLSAgICB0aGlzLnN5bnRheCA9IG51bGw7
Ci0gIH0KLQotICAvKioKLSAgICBAcHJpdmF0ZQotICAgIEBtZXRob2QgdHJhbnNmb3JtCi0gICAg
QHBhcmFtIHtBU1R9IFRoZSBBU1QgdG8gYmUgdHJhbnNmb3JtZWQuCi0gICovCi0gIFRyYW5zZm9y
bVRvcExldmVsQ29tcG9uZW50cy5wcm90b3R5cGUudHJhbnNmb3JtID0gZnVuY3Rpb24gVHJhbnNm
b3JtVG9wTGV2ZWxDb21wb25lbnRzX3RyYW5zZm9ybShhc3QpIHsKLSAgICB2YXIgYiA9IHRoaXMu
c3ludGF4LmJ1aWxkZXJzOwotCi0gICAgaGFzU2luZ2xlQ29tcG9uZW50Tm9kZShhc3QsIGZ1bmN0
aW9uIChjb21wb25lbnQpIHsKLSAgICAgIGlmIChjb21wb25lbnQudHlwZSA9PT0gJ0NvbXBvbmVu
dE5vZGUnKSB7Ci0gICAgICAgIGNvbXBvbmVudC50YWcgPSAnQCcgKyBjb21wb25lbnQudGFnOwot
ICAgICAgICBjb21wb25lbnQuaXNTdGF0aWMgPSB0cnVlOwotICAgICAgfQotICAgIH0sIGZ1bmN0
aW9uIChlbGVtZW50KSB7Ci0gICAgICB2YXIgaGFzVHJpcGxlQ3VybGllcyA9IGVsZW1lbnQuYXR0
cmlidXRlcy5zb21lKGZ1bmN0aW9uIChhdHRyKSB7Ci0gICAgICAgIHJldHVybiBhdHRyLnZhbHVl
LmVzY2FwZWQgPT09IGZhbHNlOwotICAgICAgfSk7Ci0KLSAgICAgIGlmIChlbGVtZW50Lm1vZGlm
aWVycy5sZW5ndGggfHwgaGFzVHJpcGxlQ3VybGllcykgewotICAgICAgICByZXR1cm4gZWxlbWVu
dDsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIFRPRE86IFByb3Blcmx5IGNvcHkgbG9jIGZy
b20gY2hpbGRyZW4KLSAgICAgICAgdmFyIHByb2dyYW0gPSBiLnByb2dyYW0oZWxlbWVudC5jaGls
ZHJlbik7Ci0gICAgICAgIHZhciBjb21wb25lbnQgPSBiLmNvbXBvbmVudCgnQDwnICsgZWxlbWVu
dC50YWcgKyAnPicsIGVsZW1lbnQuYXR0cmlidXRlcywgcHJvZ3JhbSwgZWxlbWVudC5sb2MpOwot
ICAgICAgICBjb21wb25lbnQuaXNTdGF0aWMgPSB0cnVlOwotICAgICAgICByZXR1cm4gY29tcG9u
ZW50OwotICAgICAgfQotICAgIH0pOwotCi0gICAgcmV0dXJuIGFzdDsKLSAgfTsKLQotICBmdW5j
dGlvbiBoYXNTaW5nbGVDb21wb25lbnROb2RlKHByb2dyYW0sIGNvbXBvbmVudENhbGxiYWNrLCBl
bGVtZW50Q2FsbGJhY2spIHsKLSAgICB2YXIgbG9jID0gcHJvZ3JhbS5sb2M7Ci0gICAgdmFyIGJv
ZHkgPSBwcm9ncmFtLmJvZHk7Ci0KLSAgICBpZiAoIWxvYyB8fCBsb2Muc3RhcnQubGluZSAhPT0g
MSB8fCBsb2Muc3RhcnQuY29sdW1uICE9PSAwKSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgdmFyIGxhc3RDb21wb25lbnROb2RlID0gdW5kZWZpbmVkOwotICAgIHZhciBsYXN0SW5kZXgg
PSB1bmRlZmluZWQ7Ci0gICAgdmFyIG5vZGVDb3VudCA9IDA7Ci0KLSAgICBmb3IgKHZhciBpID0g
MCwgbCA9IGJvZHkubGVuZ3RoOyBpIDwgbDsgaSsrKSB7Ci0gICAgICB2YXIgY3VyciA9IGJvZHlb
aV07Ci0KLSAgICAgIC8vIHRleHQgbm9kZSB3aXRoIHdoaXRlc3BhY2Ugb25seQotICAgICAgaWYg
KGN1cnIudHlwZSA9PT0gJ1RleHROb2RlJyAmJiAvXltcc10qJC8udGVzdChjdXJyLmNoYXJzKSkg
ewotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLQotICAgICAgLy8gaGFzIG11bHRpcGxlIHJv
b3QgZWxlbWVudHMgaWYgd2UndmUgYmVlbiBoZXJlIGJlZm9yZQotICAgICAgaWYgKG5vZGVDb3Vu
dCsrID4gMCkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChj
dXJyLnR5cGUgPT09ICdDb21wb25lbnROb2RlJyB8fCBjdXJyLnR5cGUgPT09ICdFbGVtZW50Tm9k
ZScpIHsKLSAgICAgICAgbGFzdENvbXBvbmVudE5vZGUgPSBjdXJyOwotICAgICAgICBsYXN0SW5k
ZXggPSBpOwotICAgICAgfQotICAgIH0KLQotICAgIGlmICghbGFzdENvbXBvbmVudE5vZGUpIHsK
LSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAobGFzdENvbXBvbmVudE5vZGUudHlwZSA9
PT0gJ0NvbXBvbmVudE5vZGUnKSB7Ci0gICAgICBjb21wb25lbnRDYWxsYmFjayhsYXN0Q29tcG9u
ZW50Tm9kZSk7Ci0gICAgfQotICB9Ci0KLSAgZXhwb3J0cy5kZWZhdWx0ID0gVHJhbnNmb3JtVG9w
TGV2ZWxDb21wb25lbnRzOwotfSk7Ci1lbmlmZWQoJ2VtYmVyLXRlbXBsYXRlLWNvbXBpbGVyL3N5
c3RlbS9jYWxjdWxhdGUtbG9jYXRpb24tZGlzcGxheScsIFsnZXhwb3J0cyddLCBmdW5jdGlvbiAo
ZXhwb3J0cykgewotICAndXNlIHN0cmljdCc7Ci0KLSAgZXhwb3J0cy5kZWZhdWx0ID0gY2FsY3Vs
YXRlTG9jYXRpb25EaXNwbGF5OwotCi0gIGZ1bmN0aW9uIGNhbGN1bGF0ZUxvY2F0aW9uRGlzcGxh
eShtb2R1bGVOYW1lLCBfbG9jKSB7Ci0gICAgdmFyIGxvYyA9IF9sb2MgfHwge307Ci0KLSAgICB2
YXIgX3JlZiA9IGxvYy5zdGFydCB8fCB7fTsKLQotICAgIHZhciBjb2x1bW4gPSBfcmVmLmNvbHVt
bjsKLSAgICB2YXIgbGluZSA9IF9yZWYubGluZTsKLQotICAgIHZhciBtb2R1bGVJbmZvID0gJyc7
Ci0gICAgaWYgKG1vZHVsZU5hbWUpIHsKLSAgICAgIG1vZHVsZUluZm8gKz0gJ1wnJyArIG1vZHVs
ZU5hbWUgKyAnXCcgJzsKLSAgICB9Ci0KLSAgICBpZiAobGluZSAhPT0gdW5kZWZpbmVkICYmIGNv
bHVtbiAhPT0gdW5kZWZpbmVkKSB7Ci0gICAgICBpZiAobW9kdWxlTmFtZSkgewotICAgICAgICAv
LyBvbmx5IHByZXBlbmQgQCBpZiB0aGUgbW9kdWxlTmFtZSB3YXMgcHJlc2VudAotICAgICAgICBt
b2R1bGVJbmZvICs9ICdAICc7Ci0gICAgICB9Ci0gICAgICBtb2R1bGVJbmZvICs9ICdMJyArIGxp
bmUgKyAnOkMnICsgY29sdW1uOwotICAgIH0KLQotICAgIGlmIChtb2R1bGVJbmZvKSB7Ci0gICAg
ICBtb2R1bGVJbmZvID0gJygnICsgbW9kdWxlSW5mbyArICcpICc7Ci0gICAgfQotCi0gICAgcmV0
dXJuIG1vZHVsZUluZm87Ci0gIH0KLX0pOwotZW5pZmVkKCdlbWJlci10ZW1wbGF0ZS1jb21waWxl
ci9zeXN0ZW0vY29tcGlsZScsIFsnZXhwb3J0cycsICdlbWJlci1tZXRhbC9mZWF0dXJlcycsICdy
ZXF1aXJlJywgJ2VtYmVyLXRlbXBsYXRlLWNvbXBpbGVyL3N5c3RlbS9jb21waWxlX29wdGlvbnMn
LCAnZW1iZXItdGVtcGxhdGUtY29tcGlsZXIvc3lzdGVtL3RlbXBsYXRlJ10sIGZ1bmN0aW9uIChl
eHBvcnRzLCBfZW1iZXJNZXRhbEZlYXR1cmVzLCBfcmVxdWlyZSwgX2VtYmVyVGVtcGxhdGVDb21w
aWxlclN5c3RlbUNvbXBpbGVfb3B0aW9ucywgX2VtYmVyVGVtcGxhdGVDb21waWxlclN5c3RlbVRl
bXBsYXRlKSB7Ci0gIC8qKgotICBAbW9kdWxlIGVtYmVyCi0gIEBzdWJtb2R1bGUgZW1iZXItdGVt
cGxhdGUtY29tcGlsZXIKLSAgKi8KLQotICAndXNlIHN0cmljdCc7Ci0KLSAgdmFyIGNvbXBpbGU7
Ci0KLSAgLyoqCi0gICAgVXNlcyBIVE1MQmFycyBgY29tcGlsZWAgZnVuY3Rpb24gdG8gcHJvY2Vz
cyBhIHN0cmluZyBpbnRvIGEgY29tcGlsZWQgdGVtcGxhdGUuCi0gIAotICAgIFRoaXMgaXMgbm90
IHByZXNlbnQgaW4gcHJvZHVjdGlvbiBidWlsZHMuCi0gIAotICAgIEBwcml2YXRlCi0gICAgQG1l
dGhvZCBjb21waWxlCi0gICAgQHBhcmFtIHtTdHJpbmd9IHRlbXBsYXRlU3RyaW5nIFRoaXMgaXMg
dGhlIHN0cmluZyB0byBiZSBjb21waWxlZCBieSBIVE1MQmFycy4KLSAgICBAcGFyYW0ge09iamVj
dH0gb3B0aW9ucyBUaGlzIGlzIGFuIG9wdGlvbnMgaGFzaCB0byBhdWdtZW50IHRoZSBjb21waWxl
ciBvcHRpb25zLgotICAqLwotCi0gIGV4cG9ydHMuZGVmYXVsdCA9IGZ1bmN0aW9uICh0ZW1wbGF0
ZVN0cmluZywgb3B0aW9ucykgewotICAgIGlmICghY29tcGlsZSAmJiBfcmVxdWlyZS5oYXMoJ2h0
bWxiYXJzLWNvbXBpbGVyL2NvbXBpbGVyJykpIHsKLSAgICAgIGNvbXBpbGUgPSBfcmVxdWlyZS5k
ZWZhdWx0KCdodG1sYmFycy1jb21waWxlci9jb21waWxlcicpLmNvbXBpbGU7Ci0gICAgfQotCi0g
ICAgaWYgKCFjb21waWxlKSB7Ci0gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjYWxsIGBj
b21waWxlYCB3aXRob3V0IHRoZSB0ZW1wbGF0ZSBjb21waWxlciBsb2FkZWQuIFBsZWFzZSBsb2Fk
IGBlbWJlci10ZW1wbGF0ZS1jb21waWxlci5qc2AgcHJpb3IgdG8gY2FsbGluZyBgY29tcGlsZWAu
Jyk7Ci0gICAgfQotCi0gICAgdmFyIHRlbXBsYXRlU3BlYyA9IGNvbXBpbGUodGVtcGxhdGVTdHJp
bmcsIF9lbWJlclRlbXBsYXRlQ29tcGlsZXJTeXN0ZW1Db21waWxlX29wdGlvbnMuZGVmYXVsdChv
cHRpb25zKSk7Ci0KLSAgICByZXR1cm4gX2VtYmVyVGVtcGxhdGVDb21waWxlclN5c3RlbVRlbXBs
YXRlLmRlZmF1bHQodGVtcGxhdGVTcGVjKTsKLSAgfTsKLX0pOwotZW5pZmVkKCdlbWJlci10ZW1w
bGF0ZS1jb21waWxlci9zeXN0ZW0vY29tcGlsZV9vcHRpb25zJywgWydleHBvcnRzJywgJ2VtYmVy
LW1ldGFsL2Fzc2lnbicsICdlbWJlci10ZW1wbGF0ZS1jb21waWxlci9wbHVnaW5zJ10sIGZ1bmN0
aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbEFzc2lnbiwgX2VtYmVyVGVtcGxhdGVDb21waWxlclBs
dWdpbnMpIHsKLSAgLyoqCi0gIEBtb2R1bGUgZW1iZXIKLSAgQHN1Ym1vZHVsZSBlbWJlci10ZW1w
bGF0ZS1jb21waWxlcgotICAqLwotCi0gICd1c2Ugc3RyaWN0JzsKLQotICB2YXIgY29tcGlsZU9w
dGlvbnMgPSB1bmRlZmluZWQ7Ci0gIHZhciBmcmFnbWVudFJlYXNvbiA9IHVuZGVmaW5lZDsKLQot
ICAvKioKLSAgICBAcHJpdmF0ZQotICAgIEBwcm9wZXJ0eSBjb21waWxlT3B0aW9ucwotICAqLwot
ICBjb21waWxlT3B0aW9ucyA9IGZ1bmN0aW9uIChfb3B0aW9ucykgewotICAgIHZhciBkaXNhYmxl
Q29tcG9uZW50R2VuZXJhdGlvbiA9IHRydWU7Ci0KLSAgICB2YXIgb3B0aW9ucyA9IHVuZGVmaW5l
ZDsKLSAgICAvLyBXaGVuIGNhbGxpbmcgYEVtYmVyLkhhbmRsZWJhcnMuY29tcGlsZSgpYCBhIHNl
Y29uZCBhcmd1bWVudCBvZiBgdHJ1ZWAKLSAgICAvLyBoYWQgYSBzcGVjaWFsIG1lYW5pbmcgKGxv
bmcgc2luY2UgbG9zdCksIHRoaXMganVzdCBnYXVyZHMgYWdhaW5zdAotICAgIC8vIGBvcHRpb25z
YCBiZWluZyB0cnVlLCBhbmQgY2F1c2luZyBhbiBlcnJvciBkdXJpbmcgY29tcGlsYXRpb24uCi0g
ICAgaWYgKF9vcHRpb25zID09PSB0cnVlKSB7Ci0gICAgICBvcHRpb25zID0ge307Ci0gICAgfSBl
bHNlIHsKLSAgICAgIG9wdGlvbnMgPSBfZW1iZXJNZXRhbEFzc2lnbi5kZWZhdWx0KHt9LCBfb3B0
aW9ucyk7Ci0gICAgfQotCi0gICAgb3B0aW9ucy5kaXNhYmxlQ29tcG9uZW50R2VuZXJhdGlvbiA9
IGRpc2FibGVDb21wb25lbnRHZW5lcmF0aW9uOwotCi0gICAgdmFyIHBsdWdpbnMgPSB7Ci0gICAg
ICBhc3Q6IF9lbWJlclRlbXBsYXRlQ29tcGlsZXJQbHVnaW5zLmRlZmF1bHQuYXN0LnNsaWNlKCkK
LSAgICB9OwotCi0gICAgaWYgKG9wdGlvbnMucGx1Z2lucyAmJiBvcHRpb25zLnBsdWdpbnMuYXN0
KSB7Ci0gICAgICBwbHVnaW5zLmFzdCA9IHBsdWdpbnMuYXN0LmNvbmNhdChvcHRpb25zLnBsdWdp
bnMuYXN0KTsKLSAgICB9Ci0gICAgb3B0aW9ucy5wbHVnaW5zID0gcGx1Z2luczsKLQotICAgIG9w
dGlvbnMuYnVpbGRNZXRhID0gZnVuY3Rpb24gYnVpbGRNZXRhKHByb2dyYW0pIHsKLSAgICAgIHJl
dHVybiB7Ci0gICAgICAgIGZyYWdtZW50UmVhc29uOiBmcmFnbWVudFJlYXNvbihwcm9ncmFtKSwK
LSAgICAgICAgcmV2aXNpb246ICdFbWJlckAyLjYuMicsCi0gICAgICAgIGxvYzogcHJvZ3JhbS5s
b2MsCi0gICAgICAgIG1vZHVsZU5hbWU6IG9wdGlvbnMubW9kdWxlTmFtZQotICAgICAgfTsKLSAg
ICB9OwotCi0gICAgcmV0dXJuIG9wdGlvbnM7Ci0gIH07Ci0KLSAgZnJhZ21lbnRSZWFzb24gPSBm
dW5jdGlvbiAocHJvZ3JhbSkgewotICAgIHZhciBsb2MgPSBwcm9ncmFtLmxvYzsKLSAgICB2YXIg
Ym9keSA9IHByb2dyYW0uYm9keTsKLQotICAgIGlmICghbG9jIHx8IGxvYy5zdGFydC5saW5lICE9
PSAxIHx8IGxvYy5zdGFydC5jb2x1bW4gIT09IDApIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICB2YXIgY2FuZGlkYXRlID0gdW5kZWZpbmVkOwotICAgIHZhciBub2RlQ291bnQg
PSAwOwotCi0gICAgdmFyIHByb2JsZW1zID0ge307Ci0KLSAgICBmb3IgKHZhciBpID0gMCwgbCA9
IGJvZHkubGVuZ3RoOyBpIDwgbDsgaSsrKSB7Ci0gICAgICB2YXIgY3VyciA9IGJvZHlbaV07Ci0K
LSAgICAgIC8vIHRleHQgbm9kZSB3aXRoIHdoaXRlc3BhY2Ugb25seQotICAgICAgaWYgKGN1cnIu
dHlwZSA9PT0gJ1RleHROb2RlJyAmJiAvXltcc10qJC8udGVzdChjdXJyLmNoYXJzKSkgewotICAg
ICAgICBjb250aW51ZTsKLSAgICAgIH0KLQotICAgICAgLy8gaGFzIG11bHRpcGxlIHJvb3QgZWxl
bWVudHMgaWYgd2UndmUgYmVlbiBoZXJlIGJlZm9yZQotICAgICAgaWYgKG5vZGVDb3VudCsrID4g
MCkgewotICAgICAgICBwcm9ibGVtc1snbXVsdGlwbGUtbm9kZXMnXSA9IHRydWU7Ci0gICAgICB9
Ci0KLSAgICAgIGlmIChjdXJyLnR5cGUgPT09ICdDb21wb25lbnROb2RlJyB8fCBjdXJyLnR5cGUg
PT09ICdFbGVtZW50Tm9kZScpIHsKLSAgICAgICAgY2FuZGlkYXRlID0gY3VycjsKLSAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgIHByb2JsZW1zWyd3cm9uZy10eXBlJ10gPSB0cnVlOwotICAgICAgfQot
ICAgIH0KLQotICAgIGlmIChub2RlQ291bnQgPT09IDApIHsKLSAgICAgIHJldHVybiB7IG5hbWU6
ICdtaXNzaW5nLXdyYXBwZXInLCBwcm9ibGVtczogWydlbXB0eS1ib2R5J10gfTsKLSAgICB9Ci0K
LSAgICB2YXIgcHJvYmxlbUxpc3QgPSBPYmplY3Qua2V5cyhwcm9ibGVtcyk7Ci0gICAgaWYgKHBy
b2JsZW1MaXN0Lmxlbmd0aCkgewotICAgICAgcmV0dXJuIHsgbmFtZTogJ21pc3Npbmctd3JhcHBl
cicsIHByb2JsZW1zOiBwcm9ibGVtTGlzdCB9OwotICAgIH0KLQotICAgIGlmIChjYW5kaWRhdGUu
dHlwZSA9PT0gJ0NvbXBvbmVudE5vZGUnKSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfSBl
bHNlIGlmIChjYW5kaWRhdGUubW9kaWZpZXJzLmxlbmd0aCkgewotICAgICAgcmV0dXJuIHsgbmFt
ZTogJ21vZGlmaWVycycsIG1vZGlmaWVyczogY2FuZGlkYXRlLm1vZGlmaWVycy5tYXAoZnVuY3Rp
b24gKG0pIHsKLSAgICAgICAgICByZXR1cm4gbS5wYXRoLm9yaWdpbmFsOwotICAgICAgICB9KSB9
OwotICAgIH0gZWxzZSBpZiAoY2FuZGlkYXRlLmF0dHJpYnV0ZXMuc29tZShmdW5jdGlvbiAoYXR0
cikgewotICAgICAgcmV0dXJuICFhdHRyLnZhbHVlLmVzY2FwZWQ7Ci0gICAgfSkpIHsKLSAgICAg
IHJldHVybiB7IG5hbWU6ICd0cmlwbGUtY3VybGllcycgfTsKLSAgICB9IGVsc2UgewotICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfTsKLQotICBleHBvcnRzLmRlZmF1bHQgPSBjb21waWxl
T3B0aW9uczsKLX0pOwotZW5pZmVkKCdlbWJlci10ZW1wbGF0ZS1jb21waWxlci9zeXN0ZW0vcHJl
Y29tcGlsZScsIFsnZXhwb3J0cycsICdlbWJlci1tZXRhbC9mZWF0dXJlcycsICdyZXF1aXJlJywg
J2VtYmVyLXRlbXBsYXRlLWNvbXBpbGVyL3N5c3RlbS9jb21waWxlX29wdGlvbnMnXSwgZnVuY3Rp
b24gKGV4cG9ydHMsIF9lbWJlck1ldGFsRmVhdHVyZXMsIF9yZXF1aXJlLCBfZW1iZXJUZW1wbGF0
ZUNvbXBpbGVyU3lzdGVtQ29tcGlsZV9vcHRpb25zKSB7Ci0gIC8qKgotICBAbW9kdWxlIGVtYmVy
Ci0gIEBzdWJtb2R1bGUgZW1iZXItdGVtcGxhdGUtY29tcGlsZXIKLSAgKi8KLQotICAndXNlIHN0
cmljdCc7Ci0KLSAgdmFyIGNvbXBpbGVTcGVjOwotCi0gIC8qKgotICAgIFVzZXMgSFRNTEJhcnMg
YGNvbXBpbGVgIGZ1bmN0aW9uIHRvIHByb2Nlc3MgYSBzdHJpbmcgaW50byBhIGNvbXBpbGVkIHRl
bXBsYXRlIHN0cmluZy4KLSAgICBUaGUgcmV0dXJuZWQgc3RyaW5nIG11c3QgYmUgcGFzc2VkIHRo
cm91Z2ggYEVtYmVyLkhUTUxCYXJzLnRlbXBsYXRlYC4KLSAgCi0gICAgVGhpcyBpcyBub3QgcHJl
c2VudCBpbiBwcm9kdWN0aW9uIGJ1aWxkcy4KLSAgCi0gICAgQHByaXZhdGUKLSAgICBAbWV0aG9k
IHByZWNvbXBpbGUKLSAgICBAcGFyYW0ge1N0cmluZ30gdGVtcGxhdGVTdHJpbmcgVGhpcyBpcyB0
aGUgc3RyaW5nIHRvIGJlIGNvbXBpbGVkIGJ5IEhUTUxCYXJzLgotICAqLwotCi0gIGV4cG9ydHMu
ZGVmYXVsdCA9IGZ1bmN0aW9uICh0ZW1wbGF0ZVN0cmluZywgb3B0aW9ucykgewotICAgIGlmICgh
Y29tcGlsZVNwZWMgJiYgX3JlcXVpcmUuaGFzKCdodG1sYmFycy1jb21waWxlci9jb21waWxlcicp
KSB7Ci0gICAgICBjb21waWxlU3BlYyA9IF9yZXF1aXJlLmRlZmF1bHQoJ2h0bWxiYXJzLWNvbXBp
bGVyL2NvbXBpbGVyJykuY29tcGlsZVNwZWM7Ci0gICAgfQotCi0gICAgaWYgKCFjb21waWxlU3Bl
YykgewotICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY2FsbCBgY29tcGlsZVNwZWNgIHdp
dGhvdXQgdGhlIHRlbXBsYXRlIGNvbXBpbGVyIGxvYWRlZC4gUGxlYXNlIGxvYWQgYGVtYmVyLXRl
bXBsYXRlLWNvbXBpbGVyLmpzYCBwcmlvciB0byBjYWxsaW5nIGBjb21waWxlU3BlY2AuJyk7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIGNvbXBpbGVTcGVjKHRlbXBsYXRlU3RyaW5nLCBfZW1iZXJUZW1w
bGF0ZUNvbXBpbGVyU3lzdGVtQ29tcGlsZV9vcHRpb25zLmRlZmF1bHQob3B0aW9ucykpOwotICB9
OwotfSk7Ci1lbmlmZWQoJ2VtYmVyLXRlbXBsYXRlLWNvbXBpbGVyL3N5c3RlbS90ZW1wbGF0ZScs
IFsnZXhwb3J0cycsICdlbWJlci1tZXRhbC9mZWF0dXJlcycsICdyZXF1aXJlJ10sIGZ1bmN0aW9u
IChleHBvcnRzLCBfZW1iZXJNZXRhbEZlYXR1cmVzLCBfcmVxdWlyZTIpIHsKLSAgJ3VzZSBzdHJp
Y3QnOwotCi0gIC8qKgotICBAbW9kdWxlIGVtYmVyCi0gIEBzdWJtb2R1bGUgZW1iZXItdGVtcGxh
dGUtY29tcGlsZXIKLSAgKi8KLQotICAvKioKLSAgICBBdWdtZW50cyB0aGUgZGVmYXVsdCBwcmVj
b21waWxlZCBvdXRwdXQgb2YgYW4gSFRNTEJhcnMgdGVtcGxhdGUgd2l0aAotICAgIGFkZGl0aW9u
YWwgaW5mb3JtYXRpb24gbmVlZGVkIGJ5IEVtYmVyLgotICAKLSAgICBAcHJpdmF0ZQotICAgIEBt
ZXRob2QgdGVtcGxhdGUKLSAgICBAcGFyYW0ge0Z1bmN0aW9ufSB0ZW1wbGF0ZVNwZWMgVGhpcyBp
cyB0aGUgY29tcGlsZWQgSFRNTEJhcnMgdGVtcGxhdGUgc3BlYy4KLSAgKi8KLQotICB2YXIgdGVt
cGxhdGUgPSB1bmRlZmluZWQ7Ci0KLSAgdmFyIF9yZXF1aXJlID0gX3JlcXVpcmUyLmRlZmF1bHQo
J2h0bWxiYXJzLXJ1bnRpbWUvaG9va3MnKTsKLQotICB2YXIgd3JhcCA9IF9yZXF1aXJlLndyYXA7
Ci0KLSAgdGVtcGxhdGUgPSBmdW5jdGlvbiAodGVtcGxhdGVTcGVjKSB7Ci0gICAgaWYgKCF0ZW1w
bGF0ZVNwZWMucmVuZGVyKSB7Ci0gICAgICB0ZW1wbGF0ZVNwZWMgPSB3cmFwKHRlbXBsYXRlU3Bl
Yyk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGVTcGVjLmlzVG9wID0gdHJ1ZTsKLSAgICB0ZW1wbGF0
ZVNwZWMuaXNNZXRob2QgPSBmYWxzZTsKLQotICAgIHJldHVybiB0ZW1wbGF0ZVNwZWM7Ci0gIH07
Ci0gIGV4cG9ydHMuZGVmYXVsdCA9IHRlbXBsYXRlOwotfSk7Ci1lbmlmZWQoJ2VtYmVyLXRlc3Rp
bmcvYWRhcHRlcnMvYWRhcHRlcicsIFsnZXhwb3J0cycsICdlbWJlci1ydW50aW1lL3N5c3RlbS9v
YmplY3QnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlclJ1bnRpbWVTeXN0ZW1PYmplY3QpIHsK
LSAgJ3VzZSBzdHJpY3QnOwotCi0gIGZ1bmN0aW9uIEsoKSB7Ci0gICAgcmV0dXJuIHRoaXM7Ci0g
IH0KLQotICAvKioKLSAgIEBtb2R1bGUgZW1iZXIKLSAgIEBzdWJtb2R1bGUgZW1iZXItdGVzdGlu
ZwotICAqLwotCi0gIC8qKgotICAgIFRoZSBwcmltYXJ5IHB1cnBvc2Ugb2YgdGhpcyBjbGFzcyBp
cyB0byBjcmVhdGUgaG9va3MgdGhhdCBjYW4gYmUgaW1wbGVtZW50ZWQKLSAgICBieSBhbiBhZGFw
dGVyIGZvciB2YXJpb3VzIHRlc3QgZnJhbWV3b3Jrcy4KLSAgCi0gICAgQGNsYXNzIEFkYXB0ZXIK
LSAgICBAbmFtZXNwYWNlIEVtYmVyLlRlc3QKLSAgICBAcHVibGljCi0gICovCi0gIHZhciBBZGFw
dGVyID0gX2VtYmVyUnVudGltZVN5c3RlbU9iamVjdC5kZWZhdWx0LmV4dGVuZCh7Ci0gICAgLyoq
Ci0gICAgICBUaGlzIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHdoZW5ldmVyIGFuIGFzeW5jIG9w
ZXJhdGlvbiBpcyBhYm91dCB0byBzdGFydC4KLSAgICAgICBPdmVycmlkZSB0aGlzIHRvIGNhbGwg
eW91ciBmcmFtZXdvcmsncyBtZXRob2RzIHRoYXQgaGFuZGxlIGFzeW5jCi0gICAgICBvcGVyYXRp
b25zLgotICAgICAgIEBwdWJsaWMKLSAgICAgIEBtZXRob2QgYXN5bmNTdGFydAotICAgICovCi0g
ICAgYXN5bmNTdGFydDogSywKLQotICAgIC8qKgotICAgICAgVGhpcyBjYWxsYmFjayB3aWxsIGJl
IGNhbGxlZCB3aGVuZXZlciBhbiBhc3luYyBvcGVyYXRpb24gaGFzIGNvbXBsZXRlZC4KLSAgICAg
ICBAcHVibGljCi0gICAgICBAbWV0aG9kIGFzeW5jRW5kCi0gICAgKi8KLSAgICBhc3luY0VuZDog
SywKLQotICAgIC8qKgotICAgICAgT3ZlcnJpZGUgdGhpcyBtZXRob2Qgd2l0aCB5b3VyIHRlc3Rp
bmcgZnJhbWV3b3JrJ3MgZmFsc2UgYXNzZXJ0aW9uLgotICAgICAgVGhpcyBmdW5jdGlvbiBpcyBj
YWxsZWQgd2hlbmV2ZXIgYW4gZXhjZXB0aW9uIG9jY3VycyBjYXVzaW5nIHRoZSB0ZXN0aW5nCi0g
ICAgICBwcm9taXNlIHRvIGZhaWwuCi0gICAgICAgUVVuaXQgZXhhbXBsZToKLSAgICAgICBgYGBq
YXZhc2NyaXB0Ci0gICAgICAgIGV4Y2VwdGlvbjogZnVuY3Rpb24oZXJyb3IpIHsKLSAgICAgICAg
ICBvayhmYWxzZSwgZXJyb3IpOwotICAgICAgICB9OwotICAgICAgYGBgCi0gICAgICAgQHB1Ymxp
YwotICAgICAgQG1ldGhvZCBleGNlcHRpb24KLSAgICAgIEBwYXJhbSB7U3RyaW5nfSBlcnJvciBU
aGUgZXhjZXB0aW9uIHRvIGJlIHJhaXNlZC4KLSAgICAqLwotICAgIGV4Y2VwdGlvbjogZnVuY3Rp
b24gKGVycm9yKSB7Ci0gICAgICB0aHJvdyBlcnJvcjsKLSAgICB9Ci0gIH0pOwotCi0gIGV4cG9y
dHMuZGVmYXVsdCA9IEFkYXB0ZXI7Ci19KTsKLWVuaWZlZCgnZW1iZXItdGVzdGluZy9hZGFwdGVy
cy9xdW5pdCcsIFsnZXhwb3J0cycsICdlbWJlci10ZXN0aW5nL2FkYXB0ZXJzL2FkYXB0ZXInLCAn
ZW1iZXItbWV0YWwvdXRpbHMnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlclRlc3RpbmdBZGFw
dGVyc0FkYXB0ZXIsIF9lbWJlck1ldGFsVXRpbHMpIHsKLSAgJ3VzZSBzdHJpY3QnOwotCi0gIC8q
KgotICAgIFRoaXMgY2xhc3MgaW1wbGVtZW50cyB0aGUgbWV0aG9kcyBkZWZpbmVkIGJ5IEVtYmVy
LlRlc3QuQWRhcHRlciBmb3IgdGhlCi0gICAgUVVuaXQgdGVzdGluZyBmcmFtZXdvcmsuCi0gIAot
ICAgIEBjbGFzcyBRVW5pdEFkYXB0ZXIKLSAgICBAbmFtZXNwYWNlIEVtYmVyLlRlc3QKLSAgICBA
ZXh0ZW5kcyBFbWJlci5UZXN0LkFkYXB0ZXIKLSAgICBAcHVibGljCi0gICovCi0gIGV4cG9ydHMu
ZGVmYXVsdCA9IF9lbWJlclRlc3RpbmdBZGFwdGVyc0FkYXB0ZXIuZGVmYXVsdC5leHRlbmQoewot
ICAgIGFzeW5jU3RhcnQ6IGZ1bmN0aW9uICgpIHsKLSAgICAgIFFVbml0LnN0b3AoKTsKLSAgICB9
LAotICAgIGFzeW5jRW5kOiBmdW5jdGlvbiAoKSB7Ci0gICAgICBRVW5pdC5zdGFydCgpOwotICAg
IH0sCi0gICAgZXhjZXB0aW9uOiBmdW5jdGlvbiAoZXJyb3IpIHsKLSAgICAgIG9rKGZhbHNlLCBf
ZW1iZXJNZXRhbFV0aWxzLmluc3BlY3QoZXJyb3IpKTsKLSAgICB9Ci0gIH0pOwotfSk7Ci1lbmlm
ZWQoJ2VtYmVyLXRlc3RpbmcvaGVscGVycycsIFsnZXhwb3J0cycsICdlbWJlci1tZXRhbC9wcm9w
ZXJ0eV9nZXQnLCAnZW1iZXItbWV0YWwvZXJyb3InLCAnZW1iZXItbWV0YWwvcnVuX2xvb3AnLCAn
ZW1iZXItdmlld3Mvc3lzdGVtL2pxdWVyeScsICdlbWJlci10ZXN0aW5nL3Rlc3QnLCAnZW1iZXIt
cnVudGltZS9leHQvcnN2cCcsICdlbWJlci1tZXRhbC9mZWF0dXJlcyddLCBmdW5jdGlvbiAoZXhw
b3J0cywgX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQsIF9lbWJlck1ldGFsRXJyb3IsIF9lbWJlck1l
dGFsUnVuX2xvb3AsIF9lbWJlclZpZXdzU3lzdGVtSnF1ZXJ5LCBfZW1iZXJUZXN0aW5nVGVzdCwg
X2VtYmVyUnVudGltZUV4dFJzdnAsIF9lbWJlck1ldGFsRmVhdHVyZXMpIHsKLSAgJ3VzZSBzdHJp
Y3QnOwotCi0gIC8qKgotICBAbW9kdWxlIGVtYmVyCi0gIEBzdWJtb2R1bGUgZW1iZXItdGVzdGlu
ZwotICAqLwotCi0gIHZhciBoZWxwZXIgPSBfZW1iZXJUZXN0aW5nVGVzdC5kZWZhdWx0LnJlZ2lz
dGVySGVscGVyOwotICB2YXIgYXN5bmNIZWxwZXIgPSBfZW1iZXJUZXN0aW5nVGVzdC5kZWZhdWx0
LnJlZ2lzdGVyQXN5bmNIZWxwZXI7Ci0KLSAgdmFyIGtleWJvYXJkRXZlbnRUeXBlcywgbW91c2VF
dmVudFR5cGVzLCBidWlsZEtleWJvYXJkRXZlbnQsIGJ1aWxkTW91c2VFdmVudCwgYnVpbGRCYXNp
Y0V2ZW50LCBmaXJlRXZlbnQsIGZvY3VzOwotCi0gIHZhciBkZWZhdWx0RXZlbnRPcHRpb25zID0g
eyBjYW5CdWJibGU6IHRydWUsIGNhbmNlbGFibGU6IHRydWUgfTsKLSAga2V5Ym9hcmRFdmVudFR5
cGVzID0gWydrZXlkb3duJywgJ2tleXByZXNzJywgJ2tleXVwJ107Ci0gIG1vdXNlRXZlbnRUeXBl
cyA9IFsnY2xpY2snLCAnbW91c2Vkb3duJywgJ21vdXNldXAnLCAnZGJsY2xpY2snLCAnbW91c2Vl
bnRlcicsICdtb3VzZWxlYXZlJywgJ21vdXNlbW92ZScsICdtb3VzZW91dCcsICdtb3VzZW92ZXIn
XTsKLQotICBidWlsZEtleWJvYXJkRXZlbnQgPSBmdW5jdGlvbiBidWlsZEtleWJvYXJkRXZlbnQo
dHlwZSkgewotICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA8PSAxIHx8IGFyZ3Vt
ZW50c1sxXSA9PT0gdW5kZWZpbmVkID8ge30gOiBhcmd1bWVudHNbMV07Ci0KLSAgICB2YXIgZXZl
bnQgPSB1bmRlZmluZWQ7Ci0gICAgdHJ5IHsKLSAgICAgIGV2ZW50ID0gZG9jdW1lbnQuY3JlYXRl
RXZlbnQoJ0tleUV2ZW50cycpOwotICAgICAgdmFyIGV2ZW50T3B0cyA9IF9lbWJlclZpZXdzU3lz
dGVtSnF1ZXJ5LmRlZmF1bHQuZXh0ZW5kKHt9LCBkZWZhdWx0RXZlbnRPcHRpb25zLCBvcHRpb25z
KTsKLSAgICAgIGV2ZW50LmluaXRLZXlFdmVudCh0eXBlLCBldmVudE9wdHMuY2FuQnViYmxlLCBl
dmVudE9wdHMuY2FuY2VsYWJsZSwgd2luZG93LCBldmVudE9wdHMuY3RybEtleSwgZXZlbnRPcHRz
LmFsdEtleSwgZXZlbnRPcHRzLnNoaWZ0S2V5LCBldmVudE9wdHMubWV0YUtleSwgZXZlbnRPcHRz
LmtleUNvZGUsIGV2ZW50T3B0cy5jaGFyQ29kZSk7Ci0gICAgfSBjYXRjaCAoZSkgewotICAgICAg
ZXZlbnQgPSBidWlsZEJhc2ljRXZlbnQodHlwZSwgb3B0aW9ucyk7Ci0gICAgfQotICAgIHJldHVy
biBldmVudDsKLSAgfTsKLQotICBidWlsZE1vdXNlRXZlbnQgPSBmdW5jdGlvbiBidWlsZE1vdXNl
RXZlbnQodHlwZSkgewotICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA8PSAxIHx8
IGFyZ3VtZW50c1sxXSA9PT0gdW5kZWZpbmVkID8ge30gOiBhcmd1bWVudHNbMV07Ci0KLSAgICB2
YXIgZXZlbnQgPSB1bmRlZmluZWQ7Ci0gICAgdHJ5IHsKLSAgICAgIGV2ZW50ID0gZG9jdW1lbnQu
Y3JlYXRlRXZlbnQoJ01vdXNlRXZlbnRzJyk7Ci0gICAgICB2YXIgZXZlbnRPcHRzID0gX2VtYmVy
Vmlld3NTeXN0ZW1KcXVlcnkuZGVmYXVsdC5leHRlbmQoe30sIGRlZmF1bHRFdmVudE9wdGlvbnMs
IG9wdGlvbnMpOwotICAgICAgZXZlbnQuaW5pdE1vdXNlRXZlbnQodHlwZSwgZXZlbnRPcHRzLmNh
bkJ1YmJsZSwgZXZlbnRPcHRzLmNhbmNlbGFibGUsIHdpbmRvdywgZXZlbnRPcHRzLmRldGFpbCwg
ZXZlbnRPcHRzLnNjcmVlblgsIGV2ZW50T3B0cy5zY3JlZW5ZLCBldmVudE9wdHMuY2xpZW50WCwg
ZXZlbnRPcHRzLmNsaWVudFksIGV2ZW50T3B0cy5jdHJsS2V5LCBldmVudE9wdHMuYWx0S2V5LCBl
dmVudE9wdHMuc2hpZnRLZXksIGV2ZW50T3B0cy5tZXRhS2V5LCBldmVudE9wdHMuYnV0dG9uLCBl
dmVudE9wdHMucmVsYXRlZFRhcmdldCk7Ci0gICAgfSBjYXRjaCAoZSkgewotICAgICAgZXZlbnQg
PSBidWlsZEJhc2ljRXZlbnQodHlwZSwgb3B0aW9ucyk7Ci0gICAgfQotICAgIHJldHVybiBldmVu
dDsKLSAgfTsKLQotICBidWlsZEJhc2ljRXZlbnQgPSBmdW5jdGlvbiBidWlsZEJhc2ljRXZlbnQo
dHlwZSkgewotICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA8PSAxIHx8IGFyZ3Vt
ZW50c1sxXSA9PT0gdW5kZWZpbmVkID8ge30gOiBhcmd1bWVudHNbMV07Ci0KLSAgICB2YXIgZXZl
bnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnRXZlbnRzJyk7Ci0gICAgZXZlbnQuaW5pdEV2ZW50
KHR5cGUsIHRydWUsIHRydWUpOwotICAgIF9lbWJlclZpZXdzU3lzdGVtSnF1ZXJ5LmRlZmF1bHQu
ZXh0ZW5kKGV2ZW50LCBvcHRpb25zKTsKLSAgICByZXR1cm4gZXZlbnQ7Ci0gIH07Ci0KLSAgZmly
ZUV2ZW50ID0gZnVuY3Rpb24gZmlyZUV2ZW50KGVsZW1lbnQsIHR5cGUpIHsKLSAgICB2YXIgb3B0
aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMiB8fCBhcmd1bWVudHNbMl0gPT09IHVuZGVmaW5l
ZCA/IHt9IDogYXJndW1lbnRzWzJdOwotCi0gICAgaWYgKCFlbGVtZW50KSB7Ci0gICAgICByZXR1
cm47Ci0gICAgfQotICAgIHZhciBldmVudCA9IHVuZGVmaW5lZDsKLSAgICBpZiAoa2V5Ym9hcmRF
dmVudFR5cGVzLmluZGV4T2YodHlwZSkgPiAtMSkgewotICAgICAgZXZlbnQgPSBidWlsZEtleWJv
YXJkRXZlbnQodHlwZSwgb3B0aW9ucyk7Ci0gICAgfSBlbHNlIGlmIChtb3VzZUV2ZW50VHlwZXMu
aW5kZXhPZih0eXBlKSA+IC0xKSB7Ci0gICAgICB2YXIgcmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRp
bmdDbGllbnRSZWN0KCk7Ci0gICAgICB2YXIgeCA9IHJlY3QubGVmdCArIDE7Ci0gICAgICB2YXIg
eSA9IHJlY3QudG9wICsgMTsKLSAgICAgIHZhciBzaW11bGF0ZWRDb29yZGluYXRlcyA9IHsKLSAg
ICAgICAgc2NyZWVuWDogeCArIDUsCi0gICAgICAgIHNjcmVlblk6IHkgKyA5NSwKLSAgICAgICAg
Y2xpZW50WDogeCwKLSAgICAgICAgY2xpZW50WTogeQotICAgICAgfTsKLSAgICAgIGV2ZW50ID0g
YnVpbGRNb3VzZUV2ZW50KHR5cGUsIF9lbWJlclZpZXdzU3lzdGVtSnF1ZXJ5LmRlZmF1bHQuZXh0
ZW5kKHNpbXVsYXRlZENvb3JkaW5hdGVzLCBvcHRpb25zKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAg
IGV2ZW50ID0gYnVpbGRCYXNpY0V2ZW50KHR5cGUsIG9wdGlvbnMpOwotICAgIH0KLSAgICBlbGVt
ZW50LmRpc3BhdGNoRXZlbnQoZXZlbnQpOwotICB9OwotCi0gIGZvY3VzID0gZnVuY3Rpb24gZm9j
dXMoZWwpIHsKLSAgICBpZiAoIWVsKSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHZhciAk
ZWwgPSBfZW1iZXJWaWV3c1N5c3RlbUpxdWVyeS5kZWZhdWx0KGVsKTsKLSAgICBpZiAoJGVsLmlz
KCc6aW5wdXQsIFtjb250ZW50ZWRpdGFibGU9dHJ1ZV0nKSkgewotICAgICAgdmFyIHR5cGUgPSAk
ZWwucHJvcCgndHlwZScpOwotICAgICAgaWYgKHR5cGUgIT09ICdjaGVja2JveCcgJiYgdHlwZSAh
PT0gJ3JhZGlvJyAmJiB0eXBlICE9PSAnaGlkZGVuJykgewotICAgICAgICBfZW1iZXJNZXRhbFJ1
bl9sb29wLmRlZmF1bHQobnVsbCwgZnVuY3Rpb24gKCkgewotICAgICAgICAgIC8vIEZpcmVmb3gg
ZG9lcyBub3QgdHJpZ2dlciB0aGUgYGZvY3VzaW5gIGV2ZW50IGlmIHRoZSB3aW5kb3cKLSAgICAg
ICAgICAvLyBkb2VzIG5vdCBoYXZlIGZvY3VzLiBJZiB0aGUgZG9jdW1lbnQgZG9lc24ndCBoYXZl
IGZvY3VzIGp1c3QKLSAgICAgICAgICAvLyB1c2UgdHJpZ2dlcignZm9jdXNpbicpIGluc3RlYWQu
Ci0KLSAgICAgICAgICBpZiAoIWRvY3VtZW50Lmhhc0ZvY3VzIHx8IGRvY3VtZW50Lmhhc0ZvY3Vz
KCkpIHsKLSAgICAgICAgICAgIGVsLmZvY3VzKCk7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICRlbC50cmlnZ2VyKCdmb2N1c2luJyk7Ci0gICAgICAgICAgfQotICAgICAgICB9KTsK
LSAgICAgIH0KLSAgICB9Ci0gIH07Ci0KLSAgZnVuY3Rpb24gY3VycmVudFJvdXRlTmFtZShhcHAp
IHsKLSAgICB2YXIgcm91dGluZ1NlcnZpY2UgPSBhcHAuX19jb250YWluZXJfXy5sb29rdXAoJ3Nl
cnZpY2U6LXJvdXRpbmcnKTsKLQotICAgIHJldHVybiBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5n
ZXQocm91dGluZ1NlcnZpY2UsICdjdXJyZW50Um91dGVOYW1lJyk7Ci0gIH0KLQotICBmdW5jdGlv
biBjdXJyZW50UGF0aChhcHApIHsKLSAgICB2YXIgcm91dGluZ1NlcnZpY2UgPSBhcHAuX19jb250
YWluZXJfXy5sb29rdXAoJ3NlcnZpY2U6LXJvdXRpbmcnKTsKLQotICAgIHJldHVybiBfZW1iZXJN
ZXRhbFByb3BlcnR5X2dldC5nZXQocm91dGluZ1NlcnZpY2UsICdjdXJyZW50UGF0aCcpOwotICB9
Ci0KLSAgZnVuY3Rpb24gY3VycmVudFVSTChhcHApIHsKLSAgICB2YXIgcm91dGVyID0gYXBwLl9f
Y29udGFpbmVyX18ubG9va3VwKCdyb3V0ZXI6bWFpbicpOwotCi0gICAgcmV0dXJuIF9lbWJlck1l
dGFsUHJvcGVydHlfZ2V0LmdldChyb3V0ZXIsICdsb2NhdGlvbicpLmdldFVSTCgpOwotICB9Ci0K
LSAgZnVuY3Rpb24gcGF1c2VUZXN0KCkgewotICAgIF9lbWJlclRlc3RpbmdUZXN0LmRlZmF1bHQu
YWRhcHRlci5hc3luY1N0YXJ0KCk7Ci0gICAgcmV0dXJuIG5ldyBfZW1iZXJSdW50aW1lRXh0UnN2
cC5kZWZhdWx0LlByb21pc2UoZnVuY3Rpb24gKCkge30sICdUZXN0QWRhcHRlciBwYXVzZWQgcHJv
bWlzZScpOwotICB9Ci0KLSAgZnVuY3Rpb24gdmlzaXQoYXBwLCB1cmwpIHsKLSAgICB2YXIgcm91
dGVyID0gYXBwLl9fY29udGFpbmVyX18ubG9va3VwKCdyb3V0ZXI6bWFpbicpOwotICAgIHZhciBz
aG91bGRIYW5kbGVVUkwgPSBmYWxzZTsKLQotICAgIGFwcC5ib290KCkudGhlbihmdW5jdGlvbiAo
KSB7Ci0gICAgICByb3V0ZXIubG9jYXRpb24uc2V0VVJMKHVybCk7Ci0KLSAgICAgIGlmIChzaG91
bGRIYW5kbGVVUkwpIHsKLSAgICAgICAgX2VtYmVyTWV0YWxSdW5fbG9vcC5kZWZhdWx0KGFwcC5f
X2RlcHJlY2F0ZWRJbnN0YW5jZV9fLCAnaGFuZGxlVVJMJywgdXJsKTsKLSAgICAgIH0KLSAgICB9
KTsKLQotICAgIGlmIChhcHAuX3JlYWRpbmVzc0RlZmVycmFscyA+IDApIHsKLSAgICAgIHJvdXRl
clsnaW5pdGlhbFVSTCddID0gdXJsOwotICAgICAgX2VtYmVyTWV0YWxSdW5fbG9vcC5kZWZhdWx0
KGFwcCwgJ2FkdmFuY2VSZWFkaW5lc3MnKTsKLSAgICAgIGRlbGV0ZSByb3V0ZXJbJ2luaXRpYWxV
UkwnXTsKLSAgICB9IGVsc2UgewotICAgICAgc2hvdWxkSGFuZGxlVVJMID0gdHJ1ZTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gYXBwLnRlc3RIZWxwZXJzLndhaXQoKTsKLSAgfQotCi0gIGZ1bmN0aW9u
IGNsaWNrKGFwcCwgc2VsZWN0b3IsIGNvbnRleHQpIHsKLSAgICB2YXIgJGVsID0gYXBwLnRlc3RI
ZWxwZXJzLmZpbmRXaXRoQXNzZXJ0KHNlbGVjdG9yLCBjb250ZXh0KTsKLSAgICB2YXIgZWwgPSAk
ZWxbMF07Ci0KLSAgICBfZW1iZXJNZXRhbFJ1bl9sb29wLmRlZmF1bHQobnVsbCwgZmlyZUV2ZW50
LCBlbCwgJ21vdXNlZG93bicpOwotCi0gICAgZm9jdXMoZWwpOwotCi0gICAgX2VtYmVyTWV0YWxS
dW5fbG9vcC5kZWZhdWx0KG51bGwsIGZpcmVFdmVudCwgZWwsICdtb3VzZXVwJyk7Ci0gICAgX2Vt
YmVyTWV0YWxSdW5fbG9vcC5kZWZhdWx0KG51bGwsIGZpcmVFdmVudCwgZWwsICdjbGljaycpOwot
Ci0gICAgcmV0dXJuIGFwcC50ZXN0SGVscGVycy53YWl0KCk7Ci0gIH0KLQotICBmdW5jdGlvbiB0
cmlnZ2VyRXZlbnQoYXBwLCBzZWxlY3RvciwgY29udGV4dE9yVHlwZSwgdHlwZU9yT3B0aW9ucywg
cG9zc2libGVPcHRpb25zKSB7Ci0gICAgdmFyIGFyaXR5ID0gYXJndW1lbnRzLmxlbmd0aDsKLSAg
ICB2YXIgY29udGV4dCwgdHlwZSwgb3B0aW9uczsKLQotICAgIGlmIChhcml0eSA9PT0gMykgewot
ICAgICAgLy8gY29udGV4dCBhbmQgb3B0aW9ucyBhcmUgb3B0aW9uYWwsIHNvIHRoaXMgaXMKLSAg
ICAgIC8vIGFwcCwgc2VsZWN0b3IsIHR5cGUKLSAgICAgIGNvbnRleHQgPSBudWxsOwotICAgICAg
dHlwZSA9IGNvbnRleHRPclR5cGU7Ci0gICAgICBvcHRpb25zID0ge307Ci0gICAgfSBlbHNlIGlm
IChhcml0eSA9PT0gNCkgewotICAgICAgLy8gY29udGV4dCBhbmQgb3B0aW9ucyBhcmUgb3B0aW9u
YWwsIHNvIHRoaXMgaXMKLSAgICAgIGlmICh0eXBlb2YgdHlwZU9yT3B0aW9ucyA9PT0gJ29iamVj
dCcpIHsKLSAgICAgICAgLy8gZWl0aGVyCi0gICAgICAgIC8vIGFwcCwgc2VsZWN0b3IsIHR5cGUs
IG9wdGlvbnMKLSAgICAgICAgY29udGV4dCA9IG51bGw7Ci0gICAgICAgIHR5cGUgPSBjb250ZXh0
T3JUeXBlOwotICAgICAgICBvcHRpb25zID0gdHlwZU9yT3B0aW9uczsKLSAgICAgIH0gZWxzZSB7
Ci0gICAgICAgIC8vIG9yCi0gICAgICAgIC8vIGFwcCwgc2VsZWN0b3IsIGNvbnRleHQsIHR5cGUK
LSAgICAgICAgY29udGV4dCA9IGNvbnRleHRPclR5cGU7Ci0gICAgICAgIHR5cGUgPSB0eXBlT3JP
cHRpb25zOwotICAgICAgICBvcHRpb25zID0ge307Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAg
ICAgIGNvbnRleHQgPSBjb250ZXh0T3JUeXBlOwotICAgICAgdHlwZSA9IHR5cGVPck9wdGlvbnM7
Ci0gICAgICBvcHRpb25zID0gcG9zc2libGVPcHRpb25zOwotICAgIH0KLQotICAgIHZhciAkZWwg
PSBhcHAudGVzdEhlbHBlcnMuZmluZFdpdGhBc3NlcnQoc2VsZWN0b3IsIGNvbnRleHQpOwotICAg
IHZhciBlbCA9ICRlbFswXTsKLQotICAgIF9lbWJlck1ldGFsUnVuX2xvb3AuZGVmYXVsdChudWxs
LCBmaXJlRXZlbnQsIGVsLCB0eXBlLCBvcHRpb25zKTsKLQotICAgIHJldHVybiBhcHAudGVzdEhl
bHBlcnMud2FpdCgpOwotICB9Ci0KLSAgZnVuY3Rpb24ga2V5RXZlbnQoYXBwLCBzZWxlY3Rvciwg
Y29udGV4dE9yVHlwZSwgdHlwZU9yS2V5Q29kZSwga2V5Q29kZSkgewotICAgIHZhciBjb250ZXh0
LCB0eXBlOwotCi0gICAgaWYgKHR5cGVvZiBrZXlDb2RlID09PSAndW5kZWZpbmVkJykgewotICAg
ICAgY29udGV4dCA9IG51bGw7Ci0gICAgICBrZXlDb2RlID0gdHlwZU9yS2V5Q29kZTsKLSAgICAg
IHR5cGUgPSBjb250ZXh0T3JUeXBlOwotICAgIH0gZWxzZSB7Ci0gICAgICBjb250ZXh0ID0gY29u
dGV4dE9yVHlwZTsKLSAgICAgIHR5cGUgPSB0eXBlT3JLZXlDb2RlOwotICAgIH0KLQotICAgIHJl
dHVybiBhcHAudGVzdEhlbHBlcnMudHJpZ2dlckV2ZW50KHNlbGVjdG9yLCBjb250ZXh0LCB0eXBl
LCB7IGtleUNvZGU6IGtleUNvZGUsIHdoaWNoOiBrZXlDb2RlIH0pOwotICB9Ci0KLSAgZnVuY3Rp
b24gZmlsbEluKGFwcCwgc2VsZWN0b3IsIGNvbnRleHRPclRleHQsIHRleHQpIHsKLSAgICB2YXIg
JGVsLCBlbCwgY29udGV4dDsKLSAgICBpZiAodHlwZW9mIHRleHQgPT09ICd1bmRlZmluZWQnKSB7
Ci0gICAgICB0ZXh0ID0gY29udGV4dE9yVGV4dDsKLSAgICB9IGVsc2UgewotICAgICAgY29udGV4
dCA9IGNvbnRleHRPclRleHQ7Ci0gICAgfQotICAgICRlbCA9IGFwcC50ZXN0SGVscGVycy5maW5k
V2l0aEFzc2VydChzZWxlY3RvciwgY29udGV4dCk7Ci0gICAgZWwgPSAkZWxbMF07Ci0gICAgZm9j
dXMoZWwpOwotICAgIF9lbWJlck1ldGFsUnVuX2xvb3AuZGVmYXVsdChmdW5jdGlvbiAoKSB7Ci0g
ICAgICAkZWwudmFsKHRleHQpOwotICAgICAgZmlyZUV2ZW50KGVsLCAnaW5wdXQnKTsKLSAgICAg
IGZpcmVFdmVudChlbCwgJ2NoYW5nZScpOwotICAgIH0pOwotICAgIHJldHVybiBhcHAudGVzdEhl
bHBlcnMud2FpdCgpOwotICB9Ci0KLSAgZnVuY3Rpb24gZmluZFdpdGhBc3NlcnQoYXBwLCBzZWxl
Y3RvciwgY29udGV4dCkgewotICAgIHZhciAkZWwgPSBhcHAudGVzdEhlbHBlcnMuZmluZChzZWxl
Y3RvciwgY29udGV4dCk7Ci0gICAgaWYgKCRlbC5sZW5ndGggPT09IDApIHsKLSAgICAgIHRocm93
IG5ldyBfZW1iZXJNZXRhbEVycm9yLmRlZmF1bHQoJ0VsZW1lbnQgJyArIHNlbGVjdG9yICsgJyBu
b3QgZm91bmQuJyk7Ci0gICAgfQotICAgIHJldHVybiAkZWw7Ci0gIH0KLQotICBmdW5jdGlvbiBm
aW5kKGFwcCwgc2VsZWN0b3IsIGNvbnRleHQpIHsKLSAgICB2YXIgJGVsOwotICAgIGNvbnRleHQg
PSBjb250ZXh0IHx8IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldChhcHAsICdyb290RWxlbWVu
dCcpOwotICAgICRlbCA9IGFwcC4kKHNlbGVjdG9yLCBjb250ZXh0KTsKLQotICAgIHJldHVybiAk
ZWw7Ci0gIH0KLQotICBmdW5jdGlvbiBhbmRUaGVuKGFwcCwgY2FsbGJhY2spIHsKLSAgICByZXR1
cm4gYXBwLnRlc3RIZWxwZXJzLndhaXQoY2FsbGJhY2soYXBwKSk7Ci0gIH0KLQotICBmdW5jdGlv
biB3YWl0KGFwcCwgdmFsdWUpIHsKLSAgICByZXR1cm4gbmV3IF9lbWJlclJ1bnRpbWVFeHRSc3Zw
LmRlZmF1bHQuUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkgewotICAgICAgdmFyIHJvdXRlciA9
IGFwcC5fX2NvbnRhaW5lcl9fLmxvb2t1cCgncm91dGVyOm1haW4nKTsKLQotICAgICAgLy8gRXZl
cnkgMTBtcywgcG9sbCBmb3IgdGhlIGFzeW5jIHRoaW5nIHRvIGhhdmUgZmluaXNoZWQKLSAgICAg
IHZhciB3YXRjaGVyID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24gKCkgewotICAgICAgICAvLyAxLiBJ
ZiB0aGUgcm91dGVyIGlzIGxvYWRpbmcsIGtlZXAgcG9sbGluZwotICAgICAgICB2YXIgcm91dGVy
SXNMb2FkaW5nID0gcm91dGVyLnJvdXRlciAmJiAhIXJvdXRlci5yb3V0ZXIuYWN0aXZlVHJhbnNp
dGlvbjsKLSAgICAgICAgaWYgKHJvdXRlcklzTG9hZGluZykgewotICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotCi0gICAgICAgIC8vIDIuIElmIHRoZXJlIGFyZSBwZW5kaW5nIEFqYXggcmVx
dWVzdHMsIGtlZXAgcG9sbGluZwotICAgICAgICBpZiAoX2VtYmVyVGVzdGluZ1Rlc3QuZGVmYXVs
dC5wZW5kaW5nQWpheFJlcXVlc3RzKSB7Ci0gICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0K
LSAgICAgICAgLy8gMy4gSWYgdGhlcmUgYXJlIHNjaGVkdWxlZCB0aW1lcnMgb3Igd2UgYXJlIGlu
c2lkZSBvZiBhIHJ1biBsb29wLCBrZWVwIHBvbGxpbmcKLSAgICAgICAgaWYgKF9lbWJlck1ldGFs
UnVuX2xvb3AuZGVmYXVsdC5oYXNTY2hlZHVsZWRUaW1lcnMoKSB8fCBfZW1iZXJNZXRhbFJ1bl9s
b29wLmRlZmF1bHQuY3VycmVudFJ1bkxvb3ApIHsKLSAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICAgICAgaWYgKF9lbWJlclRlc3RpbmdUZXN0LmRlZmF1bHQud2FpdGVycyAmJiBfZW1i
ZXJUZXN0aW5nVGVzdC5kZWZhdWx0LndhaXRlcnMuYW55KGZ1bmN0aW9uICh3YWl0ZXIpIHsKLSAg
ICAgICAgICB2YXIgY29udGV4dCA9IHdhaXRlclswXTsKLSAgICAgICAgICB2YXIgY2FsbGJhY2sg
PSB3YWl0ZXJbMV07Ci0gICAgICAgICAgcmV0dXJuICFjYWxsYmFjay5jYWxsKGNvbnRleHQpOwot
ICAgICAgICB9KSkgewotICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAvLyBT
dG9wIHBvbGxpbmcKLSAgICAgICAgY2xlYXJJbnRlcnZhbCh3YXRjaGVyKTsKLQotICAgICAgICAv
LyBTeW5jaHJvbm91c2x5IHJlc29sdmUgdGhlIHByb21pc2UKLSAgICAgICAgX2VtYmVyTWV0YWxS
dW5fbG9vcC5kZWZhdWx0KG51bGwsIHJlc29sdmUsIHZhbHVlKTsKLSAgICAgIH0sIDEwKTsKLSAg
ICB9KTsKLSAgfQotCi0gIC8qKgotICAgIExvYWRzIGEgcm91dGUsIHNldHMgdXAgYW55IGNvbnRy
b2xsZXJzLCBhbmQgcmVuZGVycyBhbnkgdGVtcGxhdGVzIGFzc29jaWF0ZWQKLSAgICB3aXRoIHRo
ZSByb3V0ZSBhcyB0aG91Z2ggYSByZWFsIHVzZXIgaGFkIHRyaWdnZXJlZCB0aGUgcm91dGUgY2hh
bmdlIHdoaWxlCi0gICAgdXNpbmcgeW91ciBhcHAuCi0gIAotICAgIEV4YW1wbGU6Ci0gIAotICAg
IGBgYGphdmFzY3JpcHQKLSAgICB2aXNpdCgncG9zdHMvaW5kZXgnKS50aGVuKGZ1bmN0aW9uKCkg
ewotICAgICAgLy8gYXNzZXJ0IHNvbWV0aGluZwotICAgIH0pOwotICAgIGBgYAotICAKLSAgICBA
bWV0aG9kIHZpc2l0Ci0gICAgQHBhcmFtIHtTdHJpbmd9IHVybCB0aGUgbmFtZSBvZiB0aGUgcm91
dGUKLSAgICBAcmV0dXJuIHtSU1ZQLlByb21pc2V9Ci0gICAgQHB1YmxpYwotICAqLwotICBhc3lu
Y0hlbHBlcigndmlzaXQnLCB2aXNpdCk7Ci0KLSAgLyoqCi0gICAgQ2xpY2tzIGFuIGVsZW1lbnQg
YW5kIHRyaWdnZXJzIGFueSBhY3Rpb25zIHRyaWdnZXJlZCBieSB0aGUgZWxlbWVudCdzIGBjbGlj
a2AKLSAgICBldmVudC4KLSAgCi0gICAgRXhhbXBsZToKLSAgCi0gICAgYGBgamF2YXNjcmlwdAot
ICAgIGNsaWNrKCcuc29tZS1qUXVlcnktc2VsZWN0b3InKS50aGVuKGZ1bmN0aW9uKCkgewotICAg
ICAgLy8gYXNzZXJ0IHNvbWV0aGluZwotICAgIH0pOwotICAgIGBgYAotICAKLSAgICBAbWV0aG9k
IGNsaWNrCi0gICAgQHBhcmFtIHtTdHJpbmd9IHNlbGVjdG9yIGpRdWVyeSBzZWxlY3RvciBmb3Ig
ZmluZGluZyBlbGVtZW50IG9uIHRoZSBET00KLSAgICBAcmV0dXJuIHtSU1ZQLlByb21pc2V9Ci0g
ICAgQHB1YmxpYwotICAqLwotICBhc3luY0hlbHBlcignY2xpY2snLCBjbGljayk7Ci0KLSAgLyoq
Ci0gICAgU2ltdWxhdGVzIGEga2V5IGV2ZW50LCBlLmcuIGBrZXlwcmVzc2AsIGBrZXlkb3duYCwg
YGtleXVwYCB3aXRoIHRoZSBkZXNpcmVkIGtleUNvZGUKLSAgCi0gICAgRXhhbXBsZToKLSAgCi0g
ICAgYGBgamF2YXNjcmlwdAotICAgIGtleUV2ZW50KCcuc29tZS1qUXVlcnktc2VsZWN0b3InLCAn
a2V5cHJlc3MnLCAxMykudGhlbihmdW5jdGlvbigpIHsKLSAgICAgLy8gYXNzZXJ0IHNvbWV0aGlu
ZwotICAgIH0pOwotICAgIGBgYAotICAKLSAgICBAbWV0aG9kIGtleUV2ZW50Ci0gICAgQHBhcmFt
IHtTdHJpbmd9IHNlbGVjdG9yIGpRdWVyeSBzZWxlY3RvciBmb3IgZmluZGluZyBlbGVtZW50IG9u
IHRoZSBET00KLSAgICBAcGFyYW0ge1N0cmluZ30gdHlwZSB0aGUgdHlwZSBvZiBrZXkgZXZlbnQs
IGUuZy4gYGtleXByZXNzYCwgYGtleWRvd25gLCBga2V5dXBgCi0gICAgQHBhcmFtIHtOdW1iZXJ9
IGtleUNvZGUgdGhlIGtleUNvZGUgb2YgdGhlIHNpbXVsYXRlZCBrZXkgZXZlbnQKLSAgICBAcmV0
dXJuIHtSU1ZQLlByb21pc2V9Ci0gICAgQHNpbmNlIDEuNS4wCi0gICAgQHB1YmxpYwotICAqLwot
ICBhc3luY0hlbHBlcigna2V5RXZlbnQnLCBrZXlFdmVudCk7Ci0KLSAgLyoqCi0gICAgRmlsbHMg
aW4gYW4gaW5wdXQgZWxlbWVudCB3aXRoIHNvbWUgdGV4dC4KLSAgCi0gICAgRXhhbXBsZToKLSAg
Ci0gICAgYGBgamF2YXNjcmlwdAotICAgIGZpbGxJbignI2VtYWlsJywgJ3lvdUBleGFtcGxlLmNv
bScpLnRoZW4oZnVuY3Rpb24oKSB7Ci0gICAgICAvLyBhc3NlcnQgc29tZXRoaW5nCi0gICAgfSk7
Ci0gICAgYGBgCi0gIAotICAgIEBtZXRob2QgZmlsbEluCi0gICAgQHBhcmFtIHtTdHJpbmd9IHNl
bGVjdG9yIGpRdWVyeSBzZWxlY3RvciBmaW5kaW5nIGFuIGlucHV0IGVsZW1lbnQgb24gdGhlIERP
TQotICAgIHRvIGZpbGwgdGV4dCB3aXRoCi0gICAgQHBhcmFtIHtTdHJpbmd9IHRleHQgdGV4dCB0
byBwbGFjZSBpbnNpZGUgdGhlIGlucHV0IGVsZW1lbnQKLSAgICBAcmV0dXJuIHtSU1ZQLlByb21p
c2V9Ci0gICAgQHB1YmxpYwotICAqLwotICBhc3luY0hlbHBlcignZmlsbEluJywgZmlsbEluKTsK
LQotICAvKioKLSAgICBGaW5kcyBhbiBlbGVtZW50IGluIHRoZSBjb250ZXh0IG9mIHRoZSBhcHAn
cyBjb250YWluZXIgZWxlbWVudC4gQSBzaW1wbGUgYWxpYXMKLSAgICBmb3IgYGFwcC4kKHNlbGVj
dG9yKWAuCi0gIAotICAgIEV4YW1wbGU6Ci0gIAotICAgIGBgYGphdmFzY3JpcHQKLSAgICB2YXIg
JGVsID0gZmluZCgnLm15LXNlbGVjdG9yJyk7Ci0gICAgYGBgCi0gIAotICAgIEBtZXRob2QgZmlu
ZAotICAgIEBwYXJhbSB7U3RyaW5nfSBzZWxlY3RvciBqUXVlcnkgc3RyaW5nIHNlbGVjdG9yIGZv
ciBlbGVtZW50IGxvb2t1cAotICAgIEByZXR1cm4ge09iamVjdH0galF1ZXJ5IG9iamVjdCByZXBy
ZXNlbnRpbmcgdGhlIHJlc3VsdHMgb2YgdGhlIHF1ZXJ5Ci0gICAgQHB1YmxpYwotICAqLwotICBo
ZWxwZXIoJ2ZpbmQnLCBmaW5kKTsKLQotICAvKioKLSAgICBMaWtlIGBmaW5kYCwgYnV0IHRocm93
cyBhbiBlcnJvciBpZiB0aGUgZWxlbWVudCBzZWxlY3RvciByZXR1cm5zIG5vIHJlc3VsdHMuCi0g
IAotICAgIEV4YW1wbGU6Ci0gIAotICAgIGBgYGphdmFzY3JpcHQKLSAgICB2YXIgJGVsID0gZmlu
ZFdpdGhBc3NlcnQoJy5kb2VzbnQtZXhpc3QnKTsgLy8gdGhyb3dzIGVycm9yCi0gICAgYGBgCi0g
IAotICAgIEBtZXRob2QgZmluZFdpdGhBc3NlcnQKLSAgICBAcGFyYW0ge1N0cmluZ30gc2VsZWN0
b3IgalF1ZXJ5IHNlbGVjdG9yIHN0cmluZyBmb3IgZmluZGluZyBhbiBlbGVtZW50IHdpdGhpbgot
ICAgIHRoZSBET00KLSAgICBAcmV0dXJuIHtPYmplY3R9IGpRdWVyeSBvYmplY3QgcmVwcmVzZW50
aW5nIHRoZSByZXN1bHRzIG9mIHRoZSBxdWVyeQotICAgIEB0aHJvd3Mge0Vycm9yfSB0aHJvd3Mg
ZXJyb3IgaWYgalF1ZXJ5IG9iamVjdCByZXR1cm5lZCBoYXMgYSBsZW5ndGggb2YgMAotICAgIEBw
dWJsaWMKLSAgKi8KLSAgaGVscGVyKCdmaW5kV2l0aEFzc2VydCcsIGZpbmRXaXRoQXNzZXJ0KTsK
LQotICAvKioKLSAgICBDYXVzZXMgdGhlIHJ1biBsb29wIHRvIHByb2Nlc3MgYW55IHBlbmRpbmcg
ZXZlbnRzLiBUaGlzIGlzIHVzZWQgdG8gZW5zdXJlIHRoYXQKLSAgICBhbnkgYXN5bmMgb3BlcmF0
aW9ucyBmcm9tIG90aGVyIGhlbHBlcnMgKG9yIHlvdXIgYXNzZXJ0aW9ucykgaGF2ZSBiZWVuIHBy
b2Nlc3NlZC4KLSAgCi0gICAgVGhpcyBpcyBtb3N0IG9mdGVuIHVzZWQgYXMgdGhlIHJldHVybiB2
YWx1ZSBmb3IgdGhlIGhlbHBlciBmdW5jdGlvbnMgKHNlZSAnY2xpY2snLAotICAgICdmaWxsSW4n
LCd2aXNpdCcsZXRjKS4KLSAgCi0gICAgRXhhbXBsZToKLSAgCi0gICAgYGBgamF2YXNjcmlwdAot
ICAgIEVtYmVyLlRlc3QucmVnaXN0ZXJBc3luY0hlbHBlcignbG9naW5Vc2VyJywgZnVuY3Rpb24o
YXBwLCB1c2VybmFtZSwgcGFzc3dvcmQpIHsKLSAgICAgIHZpc2l0KCdzZWN1cmVkL3BhdGgvaGVy
ZScpCi0gICAgICAuZmlsbEluKCcjdXNlcm5hbWUnLCB1c2VybmFtZSkKLSAgICAgIC5maWxsSW4o
JyNwYXNzd29yZCcsIHBhc3N3b3JkKQotICAgICAgLmNsaWNrKCcuc3VibWl0JykKLSAgCi0gICAg
ICByZXR1cm4gYXBwLnRlc3RIZWxwZXJzLndhaXQoKTsKLSAgICB9KTsKLSAgCi0gICAgQG1ldGhv
ZCB3YWl0Ci0gICAgQHBhcmFtIHtPYmplY3R9IHZhbHVlIFRoZSB2YWx1ZSB0byBiZSByZXR1cm5l
ZC4KLSAgICBAcmV0dXJuIHtSU1ZQLlByb21pc2V9Ci0gICAgQHB1YmxpYwotICAqLwotICBhc3lu
Y0hlbHBlcignd2FpdCcsIHdhaXQpOwotICBhc3luY0hlbHBlcignYW5kVGhlbicsIGFuZFRoZW4p
OwotCi0gIC8qKgotICAgIFJldHVybnMgdGhlIGN1cnJlbnRseSBhY3RpdmUgcm91dGUgbmFtZS4K
LSAgCi0gIEV4YW1wbGU6Ci0gIAotICBgYGBqYXZhc2NyaXB0Ci0gIGZ1bmN0aW9uIHZhbGlkYXRl
Um91dGVOYW1lKCkgewotICAgIGVxdWFsKGN1cnJlbnRSb3V0ZU5hbWUoKSwgJ3NvbWUucGF0aCcs
ICJjb3JyZWN0IHJvdXRlIHdhcyB0cmFuc2l0aW9uZWQgaW50by4iKTsKLSAgfQotICAKLSAgdmlz
aXQoJy9zb21lL3BhdGgnKS50aGVuKHZhbGlkYXRlUm91dGVOYW1lKQotICBgYGAKLSAgCi0gIEBt
ZXRob2QgY3VycmVudFJvdXRlTmFtZQotICBAcmV0dXJuIHtPYmplY3R9IFRoZSBuYW1lIG9mIHRo
ZSBjdXJyZW50bHkgYWN0aXZlIHJvdXRlLgotICBAc2luY2UgMS41LjAKLSAgQHB1YmxpYwotICAq
LwotICBoZWxwZXIoJ2N1cnJlbnRSb3V0ZU5hbWUnLCBjdXJyZW50Um91dGVOYW1lKTsKLQotICAv
KioKLSAgICBSZXR1cm5zIHRoZSBjdXJyZW50IHBhdGguCi0gIAotICBFeGFtcGxlOgotICAKLSAg
YGBgamF2YXNjcmlwdAotICBmdW5jdGlvbiB2YWxpZGF0ZVVSTCgpIHsKLSAgICBlcXVhbChjdXJy
ZW50UGF0aCgpLCAnc29tZS5wYXRoLmluZGV4JywgImNvcnJlY3QgcGF0aCB3YXMgdHJhbnNpdGlv
bmVkIGludG8uIik7Ci0gIH0KLSAgCi0gIGNsaWNrKCcjc29tZS1saW5rLWlkJykudGhlbih2YWxp
ZGF0ZVVSTCk7Ci0gIGBgYAotICAKLSAgQG1ldGhvZCBjdXJyZW50UGF0aAotICBAcmV0dXJuIHtP
YmplY3R9IFRoZSBjdXJyZW50bHkgYWN0aXZlIHBhdGguCi0gIEBzaW5jZSAxLjUuMAotICBAcHVi
bGljCi0gICovCi0gIGhlbHBlcignY3VycmVudFBhdGgnLCBjdXJyZW50UGF0aCk7Ci0KLSAgLyoq
Ci0gICAgUmV0dXJucyB0aGUgY3VycmVudCBVUkwuCi0gIAotICBFeGFtcGxlOgotICAKLSAgYGBg
amF2YXNjcmlwdAotICBmdW5jdGlvbiB2YWxpZGF0ZVVSTCgpIHsKLSAgICBlcXVhbChjdXJyZW50
VVJMKCksICcvc29tZS9wYXRoJywgImNvcnJlY3QgVVJMIHdhcyB0cmFuc2l0aW9uZWQgaW50by4i
KTsKLSAgfQotICAKLSAgY2xpY2soJyNzb21lLWxpbmstaWQnKS50aGVuKHZhbGlkYXRlVVJMKTsK
LSAgYGBgCi0gIAotICBAbWV0aG9kIGN1cnJlbnRVUkwKLSAgQHJldHVybiB7T2JqZWN0fSBUaGUg
Y3VycmVudGx5IGFjdGl2ZSBVUkwuCi0gIEBzaW5jZSAxLjUuMAotICBAcHVibGljCi0gICovCi0g
IGhlbHBlcignY3VycmVudFVSTCcsIGN1cnJlbnRVUkwpOwotCi0gIC8qKgotICAgUGF1c2VzIHRo
ZSBjdXJyZW50IHRlc3QgLSB0aGlzIGlzIHVzZWZ1bCBmb3IgZGVidWdnaW5nIHdoaWxlIHRlc3Rp
bmcgb3IgZm9yIHRlc3QtZHJpdmluZy4KLSAgIEl0IGFsbG93cyB5b3UgdG8gaW5zcGVjdCB0aGUg
c3RhdGUgb2YgeW91ciBhcHBsaWNhdGlvbiBhdCBhbnkgcG9pbnQuCi0gIAotICAgRXhhbXBsZSAo
VGhlIHRlc3Qgd2lsbCBwYXVzZSBiZWZvcmUgY2xpY2tpbmcgdGhlIGJ1dHRvbik6Ci0gIAotICAg
YGBgamF2YXNjcmlwdAotICAgdmlzaXQoJy8nKQotICAgcmV0dXJuIHBhdXNlVGVzdCgpOwotICAK
LSAgIGNsaWNrKCcuYnRuJyk7Ci0gICBgYGAKLSAgCi0gICBAc2luY2UgMS45LjAKLSAgIEBtZXRo
b2QgcGF1c2VUZXN0Ci0gICBAcmV0dXJuIHtPYmplY3R9IEEgcHJvbWlzZSB0aGF0IHdpbGwgbmV2
ZXIgcmVzb2x2ZQotICAgQHB1YmxpYwotICAqLwotICBoZWxwZXIoJ3BhdXNlVGVzdCcsIHBhdXNl
VGVzdCk7Ci0KLSAgLyoqCi0gICAgVHJpZ2dlcnMgdGhlIGdpdmVuIERPTSBldmVudCBvbiB0aGUg
ZWxlbWVudCBpZGVudGlmaWVkIGJ5IHRoZSBwcm92aWRlZCBzZWxlY3Rvci4KLSAgCi0gICAgRXhh
bXBsZToKLSAgCi0gICAgYGBgamF2YXNjcmlwdAotICAgIHRyaWdnZXJFdmVudCgnI3NvbWUtZWxl
bS1pZCcsICdibHVyJyk7Ci0gICAgYGBgCi0gIAotICAgIFRoaXMgaXMgYWN0dWFsbHkgdXNlZCBp
bnRlcm5hbGx5IGJ5IHRoZSBga2V5RXZlbnRgIGhlbHBlciBsaWtlIHNvOgotICAKLSAgICBgYGBq
YXZhc2NyaXB0Ci0gICAgdHJpZ2dlckV2ZW50KCcjc29tZS1lbGVtLWlkJywgJ2tleXByZXNzJywg
eyBrZXlDb2RlOiAxMyB9KTsKLSAgICBgYGAKLSAgCi0gICBAbWV0aG9kIHRyaWdnZXJFdmVudAot
ICAgQHBhcmFtIHtTdHJpbmd9IHNlbGVjdG9yIGpRdWVyeSBzZWxlY3RvciBmb3IgZmluZGluZyBl
bGVtZW50IG9uIHRoZSBET00KLSAgIEBwYXJhbSB7U3RyaW5nfSBbY29udGV4dF0galF1ZXJ5IHNl
bGVjdG9yIHRoYXQgd2lsbCBsaW1pdCB0aGUgc2VsZWN0b3IKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYXJndW1lbnQgdG8gZmluZCBvbmx5IHdpdGhpbiB0aGUgY29udGV4dCdzIGNoaWxk
cmVuCi0gICBAcGFyYW0ge1N0cmluZ30gdHlwZSBUaGUgZXZlbnQgdHlwZSB0byBiZSB0cmlnZ2Vy
ZWQuCi0gICBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIFRoZSBvcHRpb25zIHRvIGJlIHBhc3Nl
ZCB0byBqUXVlcnkuRXZlbnQuCi0gICBAcmV0dXJuIHtSU1ZQLlByb21pc2V9Ci0gICBAc2luY2Ug
MS41LjAKLSAgIEBwdWJsaWMKLSAgKi8KLSAgYXN5bmNIZWxwZXIoJ3RyaWdnZXJFdmVudCcsIHRy
aWdnZXJFdmVudCk7Ci19KTsKLQotLy8gRmlyZWZveCBkb2VzIG5vdCB0cmlnZ2VyIHRoZSBgZm9j
dXNpbmAgZXZlbnQgaWYgdGhlIHdpbmRvdwotLy8gZG9lcyBub3QgaGF2ZSBmb2N1cy4gSWYgdGhl
IGRvY3VtZW50IGRvZXNuJ3QgaGF2ZSBmb2N1cyBqdXN0Ci0vLyB1c2UgdHJpZ2dlcignZm9jdXNp
bicpIGluc3RlYWQuCi1lbmlmZWQoJ2VtYmVyLXRlc3RpbmcvaW5kZXgnLCBbJ2V4cG9ydHMnLCAn
ZW1iZXItbWV0YWwvY29yZScsICdlbWJlci10ZXN0aW5nL2luaXRpYWxpemVycycsICdlbWJlci10
ZXN0aW5nL3N1cHBvcnQnLCAnZW1iZXItdGVzdGluZy9zZXR1cF9mb3JfdGVzdGluZycsICdlbWJl
ci10ZXN0aW5nL3Rlc3QnLCAnZW1iZXItdGVzdGluZy9hZGFwdGVycy9hZGFwdGVyJywgJ2VtYmVy
LXRlc3RpbmcvYWRhcHRlcnMvcXVuaXQnLCAnZW1iZXItdGVzdGluZy9oZWxwZXJzJ10sIGZ1bmN0
aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbENvcmUsIF9lbWJlclRlc3RpbmdJbml0aWFsaXplcnMs
IF9lbWJlclRlc3RpbmdTdXBwb3J0LCBfZW1iZXJUZXN0aW5nU2V0dXBfZm9yX3Rlc3RpbmcsIF9l
bWJlclRlc3RpbmdUZXN0LCBfZW1iZXJUZXN0aW5nQWRhcHRlcnNBZGFwdGVyLCBfZW1iZXJUZXN0
aW5nQWRhcHRlcnNRdW5pdCwgX2VtYmVyVGVzdGluZ0hlbHBlcnMpIHsKLSAgJ3VzZSBzdHJpY3Qn
OwotCi0gIC8vIGFkZHMgaGVscGVycyB0byBoZWxwZXJzIG9iamVjdCBpbiBUZXN0Ci0KLSAgLyoq
Ci0gICAgQG1vZHVsZSBlbWJlcgotICAgIEBzdWJtb2R1bGUgZW1iZXItdGVzdGluZwotICAqLwot
Ci0gIF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0LlRlc3QgPSBfZW1iZXJUZXN0aW5nVGVzdC5kZWZh
dWx0OwotICBfZW1iZXJNZXRhbENvcmUuZGVmYXVsdC5UZXN0LkFkYXB0ZXIgPSBfZW1iZXJUZXN0
aW5nQWRhcHRlcnNBZGFwdGVyLmRlZmF1bHQ7Ci0gIF9lbWJlck1ldGFsQ29yZS5kZWZhdWx0LlRl
c3QuUVVuaXRBZGFwdGVyID0gX2VtYmVyVGVzdGluZ0FkYXB0ZXJzUXVuaXQuZGVmYXVsdDsKLSAg
X2VtYmVyTWV0YWxDb3JlLmRlZmF1bHQuc2V0dXBGb3JUZXN0aW5nID0gX2VtYmVyVGVzdGluZ1Nl
dHVwX2Zvcl90ZXN0aW5nLmRlZmF1bHQ7Ci19KTsKLS8vIHRvIHNldHVwIGluaXRpYWxpemVyCi0v
LyB0byBoYW5kbGUgdmFyaW91cyBlZGdlIGNhc2VzCi1lbmlmZWQoJ2VtYmVyLXRlc3RpbmcvaW5p
dGlhbGl6ZXJzJywgWydleHBvcnRzJywgJ2VtYmVyLXJ1bnRpbWUvc3lzdGVtL2xhenlfbG9hZCdd
LCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyUnVudGltZVN5c3RlbUxhenlfbG9hZCkgewotICAn
dXNlIHN0cmljdCc7Ci0KLSAgdmFyIG5hbWUgPSAnZGVmZXJSZWFkaW5lc3MgaW4gYHRlc3Rpbmdg
IG1vZGUnOwotCi0gIF9lbWJlclJ1bnRpbWVTeXN0ZW1MYXp5X2xvYWQub25Mb2FkKCdFbWJlci5B
cHBsaWNhdGlvbicsIGZ1bmN0aW9uIChBcHBsaWNhdGlvbikgewotICAgIGlmICghQXBwbGljYXRp
b24uaW5pdGlhbGl6ZXJzW25hbWVdKSB7Ci0gICAgICBBcHBsaWNhdGlvbi5pbml0aWFsaXplcih7
Ci0gICAgICAgIG5hbWU6IG5hbWUsCi0KLSAgICAgICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24gKGFw
cGxpY2F0aW9uKSB7Ci0gICAgICAgICAgaWYgKGFwcGxpY2F0aW9uLnRlc3RpbmcpIHsKLSAgICAg
ICAgICAgIGFwcGxpY2F0aW9uLmRlZmVyUmVhZGluZXNzKCk7Ci0gICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICB9KTsKLSAgICB9Ci0gIH0pOwotfSk7Ci1lbmlmZWQoJ2VtYmVyLXRlc3Rpbmcv
c2V0dXBfZm9yX3Rlc3RpbmcnLCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwvY29yZScsICdlbWJl
ci10ZXN0aW5nL2FkYXB0ZXJzL3F1bml0JywgJ2VtYmVyLXZpZXdzL3N5c3RlbS9qcXVlcnknXSwg
ZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1ldGFsQ29yZSwgX2VtYmVyVGVzdGluZ0FkYXB0ZXJz
UXVuaXQsIF9lbWJlclZpZXdzU3lzdGVtSnF1ZXJ5KSB7Ci0gICd1c2Ugc3RyaWN0JzsKLQotICBl
eHBvcnRzLmRlZmF1bHQgPSBzZXR1cEZvclRlc3Rpbmc7Ci0KLSAgdmFyIFRlc3QsIHJlcXVlc3Rz
OwotCi0gIGZ1bmN0aW9uIGluY3JlbWVudEFqYXhQZW5kaW5nUmVxdWVzdHMoXywgeGhyKSB7Ci0g
ICAgcmVxdWVzdHMucHVzaCh4aHIpOwotICAgIFRlc3QucGVuZGluZ0FqYXhSZXF1ZXN0cyA9IHJl
cXVlc3RzLmxlbmd0aDsKLSAgfQotCi0gIGZ1bmN0aW9uIGRlY3JlbWVudEFqYXhQZW5kaW5nUmVx
dWVzdHMoXywgeGhyKSB7Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXF1ZXN0cy5sZW5ndGg7
IGkrKykgewotICAgICAgaWYgKHhociA9PT0gcmVxdWVzdHNbaV0pIHsKLSAgICAgICAgcmVxdWVz
dHMuc3BsaWNlKGksIDEpOwotICAgICAgfQotICAgIH0KLSAgICBUZXN0LnBlbmRpbmdBamF4UmVx
dWVzdHMgPSByZXF1ZXN0cy5sZW5ndGg7Ci0gIH0KLQotICAvKioKLSAgICBTZXRzIEVtYmVyIHVw
IGZvciB0ZXN0aW5nLiBUaGlzIGlzIHVzZWZ1bCB0byBwZXJmb3JtCi0gICAgYmFzaWMgc2V0dXAg
c3RlcHMgaW4gb3JkZXIgdG8gdW5pdCB0ZXN0LgotICAKLSAgICBVc2UgYEFwcC5zZXR1cEZvclRl
c3RpbmdgIHRvIHBlcmZvcm0gaW50ZWdyYXRpb24gdGVzdHMgKGZ1bGwKLSAgICBhcHBsaWNhdGlv
biB0ZXN0aW5nKS4KLSAgCi0gICAgQG1ldGhvZCBzZXR1cEZvclRlc3RpbmcKLSAgICBAbmFtZXNw
YWNlIEVtYmVyCi0gICAgQHNpbmNlIDEuNS4wCi0gICAgQHByaXZhdGUKLSAgKi8KLQotICBmdW5j
dGlvbiBzZXR1cEZvclRlc3RpbmcoKSB7Ci0gICAgaWYgKCFUZXN0KSB7Ci0gICAgICBUZXN0ID0g
cmVxdWlyZU1vZHVsZSgnZW1iZXItdGVzdGluZy90ZXN0JylbJ2RlZmF1bHQnXTsKLSAgICB9Ci0K
LSAgICBfZW1iZXJNZXRhbENvcmUuZGVmYXVsdC50ZXN0aW5nID0gdHJ1ZTsKLQotICAgIC8vIGlm
IGFkYXB0ZXIgaXMgbm90IG1hbnVhbGx5IHNldCBkZWZhdWx0IHRvIFFVbml0Ci0gICAgaWYgKCFU
ZXN0LmFkYXB0ZXIpIHsKLSAgICAgIFRlc3QuYWRhcHRlciA9IF9lbWJlclRlc3RpbmdBZGFwdGVy
c1F1bml0LmRlZmF1bHQuY3JlYXRlKCk7Ci0gICAgfQotCi0gICAgcmVxdWVzdHMgPSBbXTsKLSAg
ICBUZXN0LnBlbmRpbmdBamF4UmVxdWVzdHMgPSByZXF1ZXN0cy5sZW5ndGg7Ci0KLSAgICBfZW1i
ZXJWaWV3c1N5c3RlbUpxdWVyeS5kZWZhdWx0KGRvY3VtZW50KS5vZmYoJ2FqYXhTZW5kJywgaW5j
cmVtZW50QWpheFBlbmRpbmdSZXF1ZXN0cyk7Ci0gICAgX2VtYmVyVmlld3NTeXN0ZW1KcXVlcnku
ZGVmYXVsdChkb2N1bWVudCkub2ZmKCdhamF4Q29tcGxldGUnLCBkZWNyZW1lbnRBamF4UGVuZGlu
Z1JlcXVlc3RzKTsKLSAgICBfZW1iZXJWaWV3c1N5c3RlbUpxdWVyeS5kZWZhdWx0KGRvY3VtZW50
KS5vbignYWpheFNlbmQnLCBpbmNyZW1lbnRBamF4UGVuZGluZ1JlcXVlc3RzKTsKLSAgICBfZW1i
ZXJWaWV3c1N5c3RlbUpxdWVyeS5kZWZhdWx0KGRvY3VtZW50KS5vbignYWpheENvbXBsZXRlJywg
ZGVjcmVtZW50QWpheFBlbmRpbmdSZXF1ZXN0cyk7Ci0gIH0KLX0pOwotCi0vLyBpbXBvcnQgVGVz
dCBmcm9tICJlbWJlci10ZXN0aW5nL3Rlc3QiOyAgLy8gRVM2VE9ETzogZml4IHdoZW4gY3ljbGVz
IGFyZSBzdXBwb3J0ZWQKLWVuaWZlZCgnZW1iZXItdGVzdGluZy9zdXBwb3J0JywgWydleHBvcnRz
JywgJ2VtYmVyLW1ldGFsL2RlYnVnJywgJ2VtYmVyLXZpZXdzL3N5c3RlbS9qcXVlcnknLCAnZW1i
ZXItbWV0YWwvZW52aXJvbm1lbnQnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1ldGFsRGVi
dWcsIF9lbWJlclZpZXdzU3lzdGVtSnF1ZXJ5LCBfZW1iZXJNZXRhbEVudmlyb25tZW50KSB7Ci0g
ICd1c2Ugc3RyaWN0JzsKLQotICAvKioKLSAgICBAbW9kdWxlIGVtYmVyCi0gICAgQHN1Ym1vZHVs
ZSBlbWJlci10ZXN0aW5nCi0gICovCi0KLSAgdmFyICQgPSBfZW1iZXJWaWV3c1N5c3RlbUpxdWVy
eS5kZWZhdWx0OwotCi0gIC8qKgotICAgIFRoaXMgbWV0aG9kIGNyZWF0ZXMgYSBjaGVja2JveCBh
bmQgdHJpZ2dlcnMgdGhlIGNsaWNrIGV2ZW50IHRvIGZpcmUgdGhlCi0gICAgcGFzc2VkIGluIGhh
bmRsZXIuIEl0IGlzIHVzZWQgdG8gY29ycmVjdCBmb3IgYSBidWcgaW4gb2xkZXIgdmVyc2lvbnMK
LSAgICBvZiBqUXVlcnkgKGUuZyAxLjguMykuCi0gIAotICAgIEBwcml2YXRlCi0gICAgQG1ldGhv
ZCB0ZXN0Q2hlY2tib3hDbGljawotICAqLwotICBmdW5jdGlvbiB0ZXN0Q2hlY2tib3hDbGljayho
YW5kbGVyKSB7Ci0gICAgJCgnPGlucHV0IHR5cGU9ImNoZWNrYm94Ij4nKS5jc3MoeyBwb3NpdGlv
bjogJ2Fic29sdXRlJywgbGVmdDogJy0xMDAwcHgnLCB0b3A6ICctMTAwMHB4JyB9KS5hcHBlbmRU
bygnYm9keScpLm9uKCdjbGljaycsIGhhbmRsZXIpLnRyaWdnZXIoJ2NsaWNrJykucmVtb3ZlKCk7
Ci0gIH0KLQotICBpZiAoX2VtYmVyTWV0YWxFbnZpcm9ubWVudC5kZWZhdWx0Lmhhc0RPTSkgewot
ICAgICQoZnVuY3Rpb24gKCkgewotICAgICAgLyoKLSAgICAgICAgRGV0ZXJtaW5lIHdoZXRoZXIg
YSBjaGVja2JveCBjaGVja2VkIHVzaW5nIGpRdWVyeSdzICJjbGljayIgbWV0aG9kIHdpbGwgaGF2
ZQotICAgICAgICB0aGUgY29ycmVjdCB2YWx1ZSBmb3IgaXRzIGNoZWNrZWQgcHJvcGVydHkuCi0g
ICAgICAgICBJZiB3ZSBkZXRlcm1pbmUgdGhhdCB0aGUgY3VycmVudCBqUXVlcnkgdmVyc2lvbiBl
eGhpYml0cyB0aGlzIGJlaGF2aW9yLAotICAgICAgICBwYXRjaCBpdCB0byB3b3JrIGNvcnJlY3Rs
eSBhcyBpbiB0aGUgY29tbWl0IGZvciB0aGUgYWN0dWFsIGZpeDoKLSAgICAgICAgaHR0cHM6Ly9n
aXRodWIuY29tL2pxdWVyeS9qcXVlcnkvY29tbWl0LzFmYjJmOTIuCi0gICAgICAqLwotICAgICAg
dGVzdENoZWNrYm94Q2xpY2soZnVuY3Rpb24gKCkgewotICAgICAgICBpZiAoIXRoaXMuY2hlY2tl
ZCAmJiAhJC5ldmVudC5zcGVjaWFsLmNsaWNrKSB7Ci0gICAgICAgICAgJC5ldmVudC5zcGVjaWFs
LmNsaWNrID0gewotICAgICAgICAgICAgLy8gRm9yIGNoZWNrYm94LCBmaXJlIG5hdGl2ZSBldmVu
dCBzbyBjaGVja2VkIHN0YXRlIHdpbGwgYmUgcmlnaHQKLSAgICAgICAgICAgIHRyaWdnZXI6IGZ1
bmN0aW9uICgpIHsKLSAgICAgICAgICAgICAgaWYgKCQubm9kZU5hbWUodGhpcywgJ2lucHV0Jykg
JiYgdGhpcy50eXBlID09PSAnY2hlY2tib3gnICYmIHRoaXMuY2xpY2spIHsKLSAgICAgICAgICAg
ICAgICB0aGlzLmNsaWNrKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfTsKLSAgICAgICAgfQotICAgICAg
fSk7Ci0KLSAgICAgIC8vIFRyeSBhZ2FpbiB0byB2ZXJpZnkgdGhhdCB0aGUgcGF0Y2ggdG9vayBl
ZmZlY3Qgb3IgYmxvdyB1cC4KLSAgICAgIHRlc3RDaGVja2JveENsaWNrKGZ1bmN0aW9uICgpIHsK
LSAgICAgICAgX2VtYmVyTWV0YWxEZWJ1Zy53YXJuKCdjbGlja2VkIGNoZWNrYm94ZXMgc2hvdWxk
IGJlIGNoZWNrZWQhIHRoZSBqUXVlcnkgcGF0Y2ggZGlkblwndCB3b3JrJywgdGhpcy5jaGVja2Vk
LCB7IGlkOiAnZW1iZXItdGVzdGluZy50ZXN0LWNoZWNrYm94LWNsaWNrJyB9KTsKLSAgICAgIH0p
OwotICAgIH0pOwotICB9Ci19KTsKLWVuaWZlZCgnZW1iZXItdGVzdGluZy90ZXN0JywgWydleHBv
cnRzJywgJ2VtYmVyLW1ldGFsL3J1bl9sb29wJywgJ2VtYmVyLXJ1bnRpbWUvZXh0L3JzdnAnLCAn
ZW1iZXItdGVzdGluZy9zZXR1cF9mb3JfdGVzdGluZycsICdlbWJlci1hcHBsaWNhdGlvbi9zeXN0
ZW0vYXBwbGljYXRpb24nLCAnZW1iZXItcnVudGltZS9zeXN0ZW0vbmF0aXZlX2FycmF5J10sIGZ1
bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbFJ1bl9sb29wLCBfZW1iZXJSdW50aW1lRXh0UnN2
cCwgX2VtYmVyVGVzdGluZ1NldHVwX2Zvcl90ZXN0aW5nLCBfZW1iZXJBcHBsaWNhdGlvblN5c3Rl
bUFwcGxpY2F0aW9uLCBfZW1iZXJSdW50aW1lU3lzdGVtTmF0aXZlX2FycmF5KSB7Ci0gICd1c2Ug
c3RyaWN0JzsKLQotICAvKioKLSAgICBAbW9kdWxlIGVtYmVyCi0gICAgQHN1Ym1vZHVsZSBlbWJl
ci10ZXN0aW5nCi0gICovCi0gIHZhciBoZWxwZXJzID0ge307Ci0gIHZhciBpbmplY3RIZWxwZXJz
Q2FsbGJhY2tzID0gW107Ci0KLSAgLyoqCi0gICAgVGhpcyBpcyBhIGNvbnRhaW5lciBmb3IgYW4g
YXNzb3J0bWVudCBvZiB0ZXN0aW5nIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eToKLSAgCi0gICAgKiBD
aG9vc2UgeW91ciBkZWZhdWx0IHRlc3QgYWRhcHRlciAoZm9yIHlvdXIgZnJhbWV3b3JrIG9mIGNo
b2ljZSkuCi0gICAgKiBSZWdpc3Rlci9VbnJlZ2lzdGVyIGFkZGl0aW9uYWwgdGVzdCBoZWxwZXJz
LgotICAgICogU2V0dXAgY2FsbGJhY2tzIHRvIGJlIGZpcmVkIHdoZW4gdGhlIHRlc3QgaGVscGVy
cyBhcmUgaW5qZWN0ZWQgaW50bwotICAgICAgeW91ciBhcHBsaWNhdGlvbi4KLSAgCi0gICAgQGNs
YXNzIFRlc3QKLSAgICBAbmFtZXNwYWNlIEVtYmVyCi0gICAgQHB1YmxpYwotICAqLwotICB2YXIg
VGVzdCA9IHsKLSAgICAvKioKLSAgICAgIEhhc2ggY29udGFpbmluZyBhbGwga25vd24gdGVzdCBo
ZWxwZXJzLgotICAgICAgIEBwcm9wZXJ0eSBfaGVscGVycwotICAgICAgQHByaXZhdGUKLSAgICAg
IEBzaW5jZSAxLjcuMAotICAgICovCi0gICAgX2hlbHBlcnM6IGhlbHBlcnMsCi0KLSAgICAvKioK
LSAgICAgIGByZWdpc3RlckhlbHBlcmAgaXMgdXNlZCB0byByZWdpc3RlciBhIHRlc3QgaGVscGVy
IHRoYXQgd2lsbCBiZSBpbmplY3RlZAotICAgICAgd2hlbiBgQXBwLmluamVjdFRlc3RIZWxwZXJz
YCBpcyBjYWxsZWQuCi0gICAgICAgVGhlIGhlbHBlciBtZXRob2Qgd2lsbCBhbHdheXMgYmUgY2Fs
bGVkIHdpdGggdGhlIGN1cnJlbnQgQXBwbGljYXRpb24gYXMKLSAgICAgIHRoZSBmaXJzdCBwYXJh
bWV0ZXIuCi0gICAgICAgRm9yIGV4YW1wbGU6Ci0gICAgICAgYGBgamF2YXNjcmlwdAotICAgICAg
RW1iZXIuVGVzdC5yZWdpc3RlckhlbHBlcignYm9vdCcsIGZ1bmN0aW9uKGFwcCkgewotICAgICAg
ICBFbWJlci5ydW4oYXBwLCBhcHAuYWR2YW5jZVJlYWRpbmVzcyk7Ci0gICAgICB9KTsKLSAgICAg
IGBgYAotICAgICAgIFRoaXMgaGVscGVyIGNhbiBsYXRlciBiZSBjYWxsZWQgd2l0aG91dCBhcmd1
bWVudHMgYmVjYXVzZSBpdCB3aWxsIGJlCi0gICAgICBjYWxsZWQgd2l0aCBgYXBwYCBhcyB0aGUg
Zmlyc3QgcGFyYW1ldGVyLgotICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgIEFwcCA9IEVtYmVy
LkFwcGxpY2F0aW9uLmNyZWF0ZSgpOwotICAgICAgQXBwLmluamVjdFRlc3RIZWxwZXJzKCk7Ci0g
ICAgICBib290KCk7Ci0gICAgICBgYGAKLSAgICAgICBAcHVibGljCi0gICAgICBAbWV0aG9kIHJl
Z2lzdGVySGVscGVyCi0gICAgICBAcGFyYW0ge1N0cmluZ30gbmFtZSBUaGUgbmFtZSBvZiB0aGUg
aGVscGVyIG1ldGhvZCB0byBhZGQuCi0gICAgICBAcGFyYW0ge0Z1bmN0aW9ufSBoZWxwZXJNZXRo
b2QKLSAgICAgIEBwYXJhbSBvcHRpb25zIHtPYmplY3R9Ci0gICAgKi8KLSAgICByZWdpc3Rlckhl
bHBlcjogZnVuY3Rpb24gKG5hbWUsIGhlbHBlck1ldGhvZCkgewotICAgICAgaGVscGVyc1tuYW1l
XSA9IHsKLSAgICAgICAgbWV0aG9kOiBoZWxwZXJNZXRob2QsCi0gICAgICAgIG1ldGE6IHsgd2Fp
dDogZmFsc2UgfQotICAgICAgfTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICBgcmVnaXN0ZXJB
c3luY0hlbHBlcmAgaXMgdXNlZCB0byByZWdpc3RlciBhbiBhc3luYyB0ZXN0IGhlbHBlciB0aGF0
IHdpbGwgYmUgaW5qZWN0ZWQKLSAgICAgIHdoZW4gYEFwcC5pbmplY3RUZXN0SGVscGVyc2AgaXMg
Y2FsbGVkLgotICAgICAgIFRoZSBoZWxwZXIgbWV0aG9kIHdpbGwgYWx3YXlzIGJlIGNhbGxlZCB3
aXRoIHRoZSBjdXJyZW50IEFwcGxpY2F0aW9uIGFzCi0gICAgICB0aGUgZmlyc3QgcGFyYW1ldGVy
LgotICAgICAgIEZvciBleGFtcGxlOgotICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgIEVtYmVy
LlRlc3QucmVnaXN0ZXJBc3luY0hlbHBlcignYm9vdCcsIGZ1bmN0aW9uKGFwcCkgewotICAgICAg
ICBFbWJlci5ydW4oYXBwLCBhcHAuYWR2YW5jZVJlYWRpbmVzcyk7Ci0gICAgICB9KTsKLSAgICAg
IGBgYAotICAgICAgIFRoZSBhZHZhbnRhZ2Ugb2YgYW4gYXN5bmMgaGVscGVyIGlzIHRoYXQgaXQg
d2lsbCBub3QgcnVuCi0gICAgICB1bnRpbCB0aGUgbGFzdCBhc3luYyBoZWxwZXIgaGFzIGNvbXBs
ZXRlZC4gIEFsbCBhc3luYyBoZWxwZXJzCi0gICAgICBhZnRlciBpdCB3aWxsIHdhaXQgZm9yIGl0
IGNvbXBsZXRlIGJlZm9yZSBydW5uaW5nLgotICAgICAgICBGb3IgZXhhbXBsZToKLSAgICAgICBg
YGBqYXZhc2NyaXB0Ci0gICAgICBFbWJlci5UZXN0LnJlZ2lzdGVyQXN5bmNIZWxwZXIoJ2RlbGV0
ZVBvc3QnLCBmdW5jdGlvbihhcHAsIHBvc3RJZCkgewotICAgICAgICBjbGljaygnLmRlbGV0ZS0n
ICsgcG9zdElkKTsKLSAgICAgIH0pOwotICAgICAgIC8vIC4uLiBpbiB5b3VyIHRlc3QKLSAgICAg
IHZpc2l0KCcvcG9zdC8yJyk7Ci0gICAgICBkZWxldGVQb3N0KDIpOwotICAgICAgdmlzaXQoJy9w
b3N0LzMnKTsKLSAgICAgIGRlbGV0ZVBvc3QoMyk7Ci0gICAgICBgYGAKLSAgICAgICBAcHVibGlj
Ci0gICAgICBAbWV0aG9kIHJlZ2lzdGVyQXN5bmNIZWxwZXIKLSAgICAgIEBwYXJhbSB7U3RyaW5n
fSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBoZWxwZXIgbWV0aG9kIHRvIGFkZC4KLSAgICAgIEBwYXJh
bSB7RnVuY3Rpb259IGhlbHBlck1ldGhvZAotICAgICAgQHNpbmNlIDEuMi4wCi0gICAgKi8KLSAg
ICByZWdpc3RlckFzeW5jSGVscGVyOiBmdW5jdGlvbiAobmFtZSwgaGVscGVyTWV0aG9kKSB7Ci0g
ICAgICBoZWxwZXJzW25hbWVdID0gewotICAgICAgICBtZXRob2Q6IGhlbHBlck1ldGhvZCwKLSAg
ICAgICAgbWV0YTogeyB3YWl0OiB0cnVlIH0KLSAgICAgIH07Ci0gICAgfSwKLQotICAgIC8qKgot
ICAgICAgUmVtb3ZlIGEgcHJldmlvdXNseSBhZGRlZCBoZWxwZXIgbWV0aG9kLgotICAgICAgIEV4
YW1wbGU6Ci0gICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgRW1iZXIuVGVzdC51bnJlZ2lzdGVy
SGVscGVyKCd3YWl0Jyk7Ci0gICAgICBgYGAKLSAgICAgICBAcHVibGljCi0gICAgICBAbWV0aG9k
IHVucmVnaXN0ZXJIZWxwZXIKLSAgICAgIEBwYXJhbSB7U3RyaW5nfSBuYW1lIFRoZSBoZWxwZXIg
dG8gcmVtb3ZlLgotICAgICovCi0gICAgdW5yZWdpc3RlckhlbHBlcjogZnVuY3Rpb24gKG5hbWUp
IHsKLSAgICAgIGRlbGV0ZSBoZWxwZXJzW25hbWVdOwotICAgICAgZGVsZXRlIFRlc3QuUHJvbWlz
ZS5wcm90b3R5cGVbbmFtZV07Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAgVXNlZCB0byByZWdp
c3RlciBjYWxsYmFja3MgdG8gYmUgZmlyZWQgd2hlbmV2ZXIgYEFwcC5pbmplY3RUZXN0SGVscGVy
c2AKLSAgICAgIGlzIGNhbGxlZC4KLSAgICAgICBUaGUgY2FsbGJhY2sgd2lsbCByZWNlaXZlIHRo
ZSBjdXJyZW50IGFwcGxpY2F0aW9uIGFzIGFuIGFyZ3VtZW50LgotICAgICAgIEV4YW1wbGU6Ci0g
ICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgRW1iZXIuVGVzdC5vbkluamVjdEhlbHBlcnMoZnVu
Y3Rpb24oKSB7Ci0gICAgICAgIEVtYmVyLiQoZG9jdW1lbnQpLmFqYXhTZW5kKGZ1bmN0aW9uKCkg
ewotICAgICAgICAgIFRlc3QucGVuZGluZ0FqYXhSZXF1ZXN0cysrOwotICAgICAgICB9KTsKLSAg
ICAgICAgIEVtYmVyLiQoZG9jdW1lbnQpLmFqYXhDb21wbGV0ZShmdW5jdGlvbigpIHsKLSAgICAg
ICAgICBUZXN0LnBlbmRpbmdBamF4UmVxdWVzdHMtLTsKLSAgICAgICAgfSk7Ci0gICAgICB9KTsK
LSAgICAgIGBgYAotICAgICAgIEBwdWJsaWMKLSAgICAgIEBtZXRob2Qgb25JbmplY3RIZWxwZXJz
Ci0gICAgICBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdG8gYmUgY2Fs
bGVkLgotICAgICovCi0gICAgb25JbmplY3RIZWxwZXJzOiBmdW5jdGlvbiAoY2FsbGJhY2spIHsK
LSAgICAgIGluamVjdEhlbHBlcnNDYWxsYmFja3MucHVzaChjYWxsYmFjayk7Ci0gICAgfSwKLQot
ICAgIC8qKgotICAgICAgVGhpcyByZXR1cm5zIGEgdGhlbmFibGUgdGFpbG9yZWQgZm9yIHRlc3Rp
bmcuICBJdCBjYXRjaGVzIGZhaWxlZAotICAgICAgYG9uU3VjY2Vzc2AgY2FsbGJhY2tzIGFuZCBp
bnZva2VzIHRoZSBgRW1iZXIuVGVzdC5hZGFwdGVyLmV4Y2VwdGlvbmAKLSAgICAgIGNhbGxiYWNr
IGluIHRoZSBsYXN0IGNoYWluZWQgdGhlbi4KLSAgICAgICBUaGlzIG1ldGhvZCBzaG91bGQgYmUg
cmV0dXJuZWQgYnkgYXN5bmMgaGVscGVycyBzdWNoIGFzIGB3YWl0YC4KLSAgICAgICBAcHVibGlj
Ci0gICAgICBAbWV0aG9kIHByb21pc2UKLSAgICAgIEBwYXJhbSB7RnVuY3Rpb259IHJlc29sdmVy
IFRoZSBmdW5jdGlvbiB1c2VkIHRvIHJlc29sdmUgdGhlIHByb21pc2UuCi0gICAgICBAcGFyYW0g
e1N0cmluZ30gbGFiZWwgQW4gb3B0aW9uYWwgc3RyaW5nIGZvciBpZGVudGlmeWluZyB0aGUgcHJv
bWlzZS4KLSAgICAqLwotICAgIHByb21pc2U6IGZ1bmN0aW9uIChyZXNvbHZlciwgbGFiZWwpIHsK
LSAgICAgIHZhciBmdWxsTGFiZWwgPSAnRW1iZXIuVGVzdC5wcm9taXNlOiAnICsgKGxhYmVsIHx8
ICc8VW5rbm93biBQcm9taXNlPicpOwotICAgICAgcmV0dXJuIG5ldyBUZXN0LlByb21pc2UocmVz
b2x2ZXIsIGZ1bGxMYWJlbCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICBVc2VkIHRvIGFsbG93
IGVtYmVyLXRlc3RpbmcgdG8gY29tbXVuaWNhdGUgd2l0aCBhIHNwZWNpZmljIHRlc3RpbmcKLSAg
ICAgZnJhbWV3b3JrLgotICAgICAgWW91IGNhbiBtYW51YWxseSBzZXQgaXQgYmVmb3JlIGNhbGxp
bmcgYEFwcC5zZXR1cEZvclRlc3RpbmcoKWAuCi0gICAgICBFeGFtcGxlOgotICAgICAgYGBgamF2
YXNjcmlwdAotICAgICBFbWJlci5UZXN0LmFkYXB0ZXIgPSBNeUN1c3RvbUFkYXB0ZXIuY3JlYXRl
KCkKLSAgICAgYGBgCi0gICAgICBJZiB5b3UgZG8gbm90IHNldCBpdCwgZW1iZXItdGVzdGluZyB3
aWxsIGRlZmF1bHQgdG8gYEVtYmVyLlRlc3QuUVVuaXRBZGFwdGVyYC4KLSAgICAgIEBwdWJsaWMK
LSAgICAgQHByb3BlcnR5IGFkYXB0ZXIKLSAgICAgQHR5cGUge0NsYXNzfSBUaGUgYWRhcHRlciB0
byBiZSB1c2VkLgotICAgICBAZGVmYXVsdCBFbWJlci5UZXN0LlFVbml0QWRhcHRlcgotICAgICov
Ci0gICAgYWRhcHRlcjogbnVsbCwKLQotICAgIC8qKgotICAgICAgUmVwbGFjZW1lbnQgZm9yIGBF
bWJlci5SU1ZQLnJlc29sdmVgCi0gICAgICBUaGUgb25seSBkaWZmZXJlbmNlIGlzIHRoaXMgdXNl
cwotICAgICAgYW4gaW5zdGFuY2Ugb2YgYEVtYmVyLlRlc3QuUHJvbWlzZWAKLSAgICAgICBAcHVi
bGljCi0gICAgICBAbWV0aG9kIHJlc29sdmUKLSAgICAgIEBwYXJhbSB7TWl4ZWR9IFRoZSB2YWx1
ZSB0byByZXNvbHZlCi0gICAgICBAc2luY2UgMS4yLjAKLSAgICAqLwotICAgIHJlc29sdmU6IGZ1
bmN0aW9uICh2YWwpIHsKLSAgICAgIHJldHVybiBUZXN0LnByb21pc2UoZnVuY3Rpb24gKHJlc29s
dmUpIHsKLSAgICAgICAgcmV0dXJuIHJlc29sdmUodmFsKTsKLSAgICAgIH0pOwotICAgIH0sCi0K
LSAgICAvKioKLSAgICAgICBUaGlzIGFsbG93cyBlbWJlci10ZXN0aW5nIHRvIHBsYXkgbmljZWx5
IHdpdGggb3RoZXIgYXN5bmNocm9ub3VzCi0gICAgICAgZXZlbnRzLCBzdWNoIGFzIGFuIGFwcGxp
Y2F0aW9uIHRoYXQgaXMgd2FpdGluZyBmb3IgYSBDU1MzCi0gICAgICAgdHJhbnNpdGlvbiBvciBh
biBJbmRleERCIHRyYW5zYWN0aW9uLgotICAgICAgICBGb3IgZXhhbXBsZToKLSAgICAgICAgYGBg
amF2YXNjcmlwdAotICAgICAgIEVtYmVyLlRlc3QucmVnaXN0ZXJXYWl0ZXIoZnVuY3Rpb24oKSB7
Ci0gICAgICAgICByZXR1cm4gbXlQZW5kaW5nVHJhbnNhY3Rpb25zKCkgPT0gMDsKLSAgICAgICB9
KTsKLSAgICAgICBgYGAKLSAgICAgICBUaGUgYGNvbnRleHRgIGFyZ3VtZW50IGFsbG93cyB5b3Ug
dG8gb3B0aW9uYWxseSBzcGVjaWZ5IHRoZSBgdGhpc2AKLSAgICAgICB3aXRoIHdoaWNoIHlvdXIg
Y2FsbGJhY2sgd2lsbCBiZSBpbnZva2VkLgotICAgICAgICBGb3IgZXhhbXBsZToKLSAgICAgICAg
YGBgamF2YXNjcmlwdAotICAgICAgIEVtYmVyLlRlc3QucmVnaXN0ZXJXYWl0ZXIoTXlEQiwgTXlE
Qi5oYXNQZW5kaW5nVHJhbnNhY3Rpb25zKTsKLSAgICAgICBgYGAKLSAgICAgICAgQHB1YmxpYwot
ICAgICAgIEBtZXRob2QgcmVnaXN0ZXJXYWl0ZXIKLSAgICAgICBAcGFyYW0ge09iamVjdH0gY29u
dGV4dCAob3B0aW9uYWwpCi0gICAgICAgQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sKLSAgICAg
ICBAc2luY2UgMS4yLjAKLSAgICAqLwotICAgIHJlZ2lzdGVyV2FpdGVyOiBmdW5jdGlvbiAoY29u
dGV4dCwgY2FsbGJhY2spIHsKLSAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7Ci0g
ICAgICAgIGNhbGxiYWNrID0gY29udGV4dDsKLSAgICAgICAgY29udGV4dCA9IG51bGw7Ci0gICAg
ICB9Ci0gICAgICBpZiAoIXRoaXMud2FpdGVycykgewotICAgICAgICB0aGlzLndhaXRlcnMgPSBf
ZW1iZXJSdW50aW1lU3lzdGVtTmF0aXZlX2FycmF5LkEoKTsKLSAgICAgIH0KLSAgICAgIHRoaXMu
d2FpdGVycy5wdXNoKFtjb250ZXh0LCBjYWxsYmFja10pOwotICAgIH0sCi0gICAgLyoqCi0gICAg
ICAgYHVucmVnaXN0ZXJXYWl0ZXJgIGlzIHVzZWQgdG8gdW5yZWdpc3RlciBhIGNhbGxiYWNrIHRo
YXQgd2FzCi0gICAgICAgcmVnaXN0ZXJlZCB3aXRoIGByZWdpc3RlcldhaXRlcmAuCi0gICAgICAg
IEBwdWJsaWMKLSAgICAgICBAbWV0aG9kIHVucmVnaXN0ZXJXYWl0ZXIKLSAgICAgICBAcGFyYW0g
e09iamVjdH0gY29udGV4dCAob3B0aW9uYWwpCi0gICAgICAgQHBhcmFtIHtGdW5jdGlvbn0gY2Fs
bGJhY2sKLSAgICAgICBAc2luY2UgMS4yLjAKLSAgICAqLwotICAgIHVucmVnaXN0ZXJXYWl0ZXI6
IGZ1bmN0aW9uIChjb250ZXh0LCBjYWxsYmFjaykgewotICAgICAgaWYgKCF0aGlzLndhaXRlcnMp
IHsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGgg
PT09IDEpIHsKLSAgICAgICAgY2FsbGJhY2sgPSBjb250ZXh0OwotICAgICAgICBjb250ZXh0ID0g
bnVsbDsKLSAgICAgIH0KLSAgICAgIHRoaXMud2FpdGVycyA9IF9lbWJlclJ1bnRpbWVTeXN0ZW1O
YXRpdmVfYXJyYXkuQSh0aGlzLndhaXRlcnMuZmlsdGVyKGZ1bmN0aW9uIChlbHQpIHsKLSAgICAg
ICAgcmV0dXJuICEoZWx0WzBdID09PSBjb250ZXh0ICYmIGVsdFsxXSA9PT0gY2FsbGJhY2spOwot
ICAgICAgfSkpOwotICAgIH0KLSAgfTsKLQotICBmdW5jdGlvbiBoZWxwZXIoYXBwLCBuYW1lKSB7
Ci0gICAgdmFyIGZuID0gaGVscGVyc1tuYW1lXS5tZXRob2Q7Ci0gICAgdmFyIG1ldGEgPSBoZWxw
ZXJzW25hbWVdLm1ldGE7Ci0KLSAgICByZXR1cm4gZnVuY3Rpb24gKCkgewotICAgICAgZm9yICh2
YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShfbGVuKSwgX2tleSA9IDA7
IF9rZXkgPCBfbGVuOyBfa2V5KyspIHsKLSAgICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tf
a2V5XTsKLSAgICAgIH0KLQotICAgICAgdmFyIGxhc3RQcm9taXNlOwotCi0gICAgICBhcmdzLnVu
c2hpZnQoYXBwKTsKLQotICAgICAgLy8gc29tZSBoZWxwZXJzIGFyZSBub3QgYXN5bmMgYW5kCi0g
ICAgICAvLyBuZWVkIHRvIHJldHVybiBhIHZhbHVlIGltbWVkaWF0ZWx5LgotICAgICAgLy8gZXhh
bXBsZTogYGZpbmRgCi0gICAgICBpZiAoIW1ldGEud2FpdCkgewotICAgICAgICByZXR1cm4gZm4u
YXBwbHkoYXBwLCBhcmdzKTsKLSAgICAgIH0KLQotICAgICAgbGFzdFByb21pc2UgPSBydW4oZnVu
Y3Rpb24gKCkgewotICAgICAgICByZXR1cm4gVGVzdC5yZXNvbHZlKFRlc3QubGFzdFByb21pc2Up
OwotICAgICAgfSk7Ci0KLSAgICAgIC8vIHdhaXQgZm9yIGxhc3QgaGVscGVyJ3MgcHJvbWlzZSB0
byByZXNvbHZlIGFuZCB0aGVuCi0gICAgICAvLyBleGVjdXRlLiBUbyBiZSBzYWZlLCB3ZSBuZWVk
IHRvIHRlbGwgdGhlIGFkYXB0ZXIgd2UncmUgZ29pbmcKLSAgICAgIC8vIGFzeW5jaHJvbm91cyBo
ZXJlLCBiZWNhdXNlIGZuIG1heSBub3QgYmUgaW52b2tlZCBiZWZvcmUgd2UKLSAgICAgIC8vIHJl
dHVybi4KLSAgICAgIFRlc3QuYWRhcHRlci5hc3luY1N0YXJ0KCk7Ci0gICAgICByZXR1cm4gbGFz
dFByb21pc2UudGhlbihmdW5jdGlvbiAoKSB7Ci0gICAgICAgIHJldHVybiBmbi5hcHBseShhcHAs
IGFyZ3MpOwotICAgICAgfSkuZmluYWxseShmdW5jdGlvbiAoKSB7Ci0gICAgICAgIFRlc3QuYWRh
cHRlci5hc3luY0VuZCgpOwotICAgICAgfSk7Ci0gICAgfTsKLSAgfQotCi0gIGZ1bmN0aW9uIHJ1
bihmbikgewotICAgIGlmICghX2VtYmVyTWV0YWxSdW5fbG9vcC5kZWZhdWx0LmN1cnJlbnRSdW5M
b29wKSB7Ci0gICAgICByZXR1cm4gX2VtYmVyTWV0YWxSdW5fbG9vcC5kZWZhdWx0KGZuKTsKLSAg
ICB9IGVsc2UgewotICAgICAgcmV0dXJuIGZuKCk7Ci0gICAgfQotICB9Ci0KLSAgX2VtYmVyQXBw
bGljYXRpb25TeXN0ZW1BcHBsaWNhdGlvbi5kZWZhdWx0LnJlb3Blbih7Ci0gICAgLyoqCi0gICAg
IFRoaXMgcHJvcGVydHkgY29udGFpbnMgdGhlIHRlc3RpbmcgaGVscGVycyBmb3IgdGhlIGN1cnJl
bnQgYXBwbGljYXRpb24uIFRoZXNlCi0gICAgIGFyZSBjcmVhdGVkIG9uY2UgeW91IGNhbGwgYGlu
amVjdFRlc3RIZWxwZXJzYCBvbiB5b3VyIGBFbWJlci5BcHBsaWNhdGlvbmAKLSAgICAgaW5zdGFu
Y2UuIFRoZSBpbmNsdWRlZCBoZWxwZXJzIGFyZSBhbHNvIGF2YWlsYWJsZSBvbiB0aGUgYHdpbmRv
d2Agb2JqZWN0IGJ5Ci0gICAgIGRlZmF1bHQsIGJ1dCBjYW4gYmUgdXNlZCBmcm9tIHRoaXMgb2Jq
ZWN0IG9uIHRoZSBpbmRpdmlkdWFsIGFwcGxpY2F0aW9uIGFsc28uCi0gICAgICAgQHByb3BlcnR5
IHRlc3RIZWxwZXJzCi0gICAgICBAdHlwZSB7T2JqZWN0fQotICAgICAgQGRlZmF1bHQge30KLSAg
ICAgIEBwdWJsaWMKLSAgICAqLwotICAgIHRlc3RIZWxwZXJzOiB7fSwKLQotICAgIC8qKgotICAg
ICBUaGlzIHByb3BlcnR5IHdpbGwgY29udGFpbiB0aGUgb3JpZ2luYWwgbWV0aG9kcyB0aGF0IHdl
cmUgcmVnaXN0ZXJlZAotICAgICBvbiB0aGUgYGhlbHBlckNvbnRhaW5lcmAgYmVmb3JlIGBpbmpl
Y3RUZXN0SGVscGVyc2AgaXMgY2FsbGVkLgotICAgICAgV2hlbiBgcmVtb3ZlVGVzdEhlbHBlcnNg
IGlzIGNhbGxlZCwgdGhlc2UgbWV0aG9kcyBhcmUgcmVzdG9yZWQgdG8gdGhlCi0gICAgIGBoZWxw
ZXJDb250YWluZXJgLgotICAgICAgIEBwcm9wZXJ0eSBvcmlnaW5hbE1ldGhvZHMKLSAgICAgIEB0
eXBlIHtPYmplY3R9Ci0gICAgICBAZGVmYXVsdCB7fQotICAgICAgQHByaXZhdGUKLSAgICAgIEBz
aW5jZSAxLjMuMAotICAgICovCi0gICAgb3JpZ2luYWxNZXRob2RzOiB7fSwKLQotICAgIC8qKgot
ICAgIFRoaXMgcHJvcGVydHkgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoaXMgYXBwbGljYXRp
b24gaXMgY3VycmVudGx5IGluCi0gICAgdGVzdGluZyBtb2RlLiBUaGlzIGlzIHNldCB3aGVuIGBz
ZXR1cEZvclRlc3RpbmdgIGlzIGNhbGxlZCBvbiB0aGUgY3VycmVudAotICAgIGFwcGxpY2F0aW9u
LgotICAgICBAcHJvcGVydHkgdGVzdGluZwotICAgIEB0eXBlIHtCb29sZWFufQotICAgIEBkZWZh
dWx0IGZhbHNlCi0gICAgQHNpbmNlIDEuMy4wCi0gICAgQHB1YmxpYwotICAgICovCi0gICAgdGVz
dGluZzogZmFsc2UsCi0KLSAgICAvKioKLSAgICAgIFRoaXMgaG9vayBkZWZlcnMgdGhlIHJlYWRp
bmVzcyBvZiB0aGUgYXBwbGljYXRpb24sIHNvIHRoYXQgeW91IGNhbiBzdGFydAotICAgICAgdGhl
IGFwcCB3aGVuIHlvdXIgdGVzdHMgYXJlIHJlYWR5IHRvIHJ1bi4gSXQgYWxzbyBzZXRzIHRoZSBy
b3V0ZXIncwotICAgICAgbG9jYXRpb24gdG8gJ25vbmUnLCBzbyB0aGF0IHRoZSB3aW5kb3cncyBs
b2NhdGlvbiB3aWxsIG5vdCBiZSBtb2RpZmllZAotICAgICAgKHByZXZlbnRpbmcgYm90aCBhY2Np
ZGVudGFsIGxlYWtpbmcgb2Ygc3RhdGUgYmV0d2VlbiB0ZXN0cyBhbmQgaW50ZXJmZXJlbmNlCi0g
ICAgICB3aXRoIHlvdXIgdGVzdGluZyBmcmFtZXdvcmspLgotICAgICAgIEV4YW1wbGU6Ci0gICAg
ICAgYGBgCi0gICAgICBBcHAuc2V0dXBGb3JUZXN0aW5nKCk7Ci0gICAgICBgYGAKLSAgICAgICBA
bWV0aG9kIHNldHVwRm9yVGVzdGluZwotICAgICAgQHB1YmxpYwotICAgICovCi0gICAgc2V0dXBG
b3JUZXN0aW5nOiBmdW5jdGlvbiAoKSB7Ci0gICAgICBfZW1iZXJUZXN0aW5nU2V0dXBfZm9yX3Rl
c3RpbmcuZGVmYXVsdCgpOwotCi0gICAgICB0aGlzLnRlc3RpbmcgPSB0cnVlOwotCi0gICAgICB0
aGlzLlJvdXRlci5yZW9wZW4oewotICAgICAgICBsb2NhdGlvbjogJ25vbmUnCi0gICAgICB9KTsK
LSAgICB9LAotCi0gICAgLyoqCi0gICAgICBUaGlzIHdpbGwgYmUgdXNlZCBhcyB0aGUgY29udGFp
bmVyIHRvIGluamVjdCB0aGUgdGVzdCBoZWxwZXJzIGludG8uIEJ5Ci0gICAgICBkZWZhdWx0IHRo
ZSBoZWxwZXJzIGFyZSBpbmplY3RlZCBpbnRvIGB3aW5kb3dgLgotICAgICAgIEBwcm9wZXJ0eSBo
ZWxwZXJDb250YWluZXIKLSAgICAgIEB0eXBlIHtPYmplY3R9IFRoZSBvYmplY3QgdG8gYmUgdXNl
ZCBmb3IgdGVzdCBoZWxwZXJzLgotICAgICAgQGRlZmF1bHQgd2luZG93Ci0gICAgICBAc2luY2Ug
MS4yLjAKLSAgICAgIEBwcml2YXRlCi0gICAgKi8KLSAgICBoZWxwZXJDb250YWluZXI6IG51bGws
Ci0KLSAgICAvKioKLSAgICAgIFRoaXMgaW5qZWN0cyB0aGUgdGVzdCBoZWxwZXJzIGludG8gdGhl
IGBoZWxwZXJDb250YWluZXJgIG9iamVjdC4gSWYgYW4gb2JqZWN0IGlzIHByb3ZpZGVkCi0gICAg
ICBpdCB3aWxsIGJlIHVzZWQgYXMgdGhlIGhlbHBlckNvbnRhaW5lci4gSWYgYGhlbHBlckNvbnRh
aW5lcmAgaXMgbm90IHNldCBpdCB3aWxsIGRlZmF1bHQKLSAgICAgIHRvIGB3aW5kb3dgLiBJZiBh
IGZ1bmN0aW9uIG9mIHRoZSBzYW1lIG5hbWUgaGFzIGFscmVhZHkgYmVlbiBkZWZpbmVkIGl0IHdp
bGwgYmUgY2FjaGVkCi0gICAgICAoc28gdGhhdCBpdCBjYW4gYmUgcmVzZXQgaWYgdGhlIGhlbHBl
ciBpcyByZW1vdmVkIHdpdGggYHVucmVnaXN0ZXJIZWxwZXJgIG9yCi0gICAgICBgcmVtb3ZlVGVz
dEhlbHBlcnNgKS4KLSAgICAgICBBbnkgY2FsbGJhY2tzIHJlZ2lzdGVyZWQgd2l0aCBgb25Jbmpl
Y3RIZWxwZXJzYCB3aWxsIGJlIGNhbGxlZCBvbmNlIHRoZQotICAgICAgaGVscGVycyBoYXZlIGJl
ZW4gaW5qZWN0ZWQuCi0gICAgICAgRXhhbXBsZToKLSAgICAgIGBgYAotICAgICAgQXBwLmluamVj
dFRlc3RIZWxwZXJzKCk7Ci0gICAgICBgYGAKLSAgICAgICBAbWV0aG9kIGluamVjdFRlc3RIZWxw
ZXJzCi0gICAgICBAcHVibGljCi0gICAgKi8KLSAgICBpbmplY3RUZXN0SGVscGVyczogZnVuY3Rp
b24gKGhlbHBlckNvbnRhaW5lcikgewotICAgICAgaWYgKGhlbHBlckNvbnRhaW5lcikgewotICAg
ICAgICB0aGlzLmhlbHBlckNvbnRhaW5lciA9IGhlbHBlckNvbnRhaW5lcjsKLSAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgIHRoaXMuaGVscGVyQ29udGFpbmVyID0gd2luZG93OwotICAgICAgfQotCi0g
ICAgICB0aGlzLnJlb3Blbih7Ci0gICAgICAgIHdpbGxEZXN0cm95OiBmdW5jdGlvbiAoKSB7Ci0g
ICAgICAgICAgdGhpcy5fc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKLSAgICAgICAgICB0
aGlzLnJlbW92ZVRlc3RIZWxwZXJzKCk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotCi0gICAgICB0
aGlzLnRlc3RIZWxwZXJzID0ge307Ci0gICAgICBmb3IgKHZhciBuYW1lIGluIGhlbHBlcnMpIHsK
LSAgICAgICAgdGhpcy5vcmlnaW5hbE1ldGhvZHNbbmFtZV0gPSB0aGlzLmhlbHBlckNvbnRhaW5l
cltuYW1lXTsKLSAgICAgICAgdGhpcy50ZXN0SGVscGVyc1tuYW1lXSA9IHRoaXMuaGVscGVyQ29u
dGFpbmVyW25hbWVdID0gaGVscGVyKHRoaXMsIG5hbWUpOwotICAgICAgICBwcm90b1dyYXAoVGVz
dC5Qcm9taXNlLnByb3RvdHlwZSwgbmFtZSwgaGVscGVyKHRoaXMsIG5hbWUpLCBoZWxwZXJzW25h
bWVdLm1ldGEud2FpdCk7Ci0gICAgICB9Ci0KLSAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gaW5q
ZWN0SGVscGVyc0NhbGxiYWNrcy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKLSAgICAgICAgaW5qZWN0
SGVscGVyc0NhbGxiYWNrc1tpXSh0aGlzKTsKLSAgICAgIH0KLSAgICB9LAotCi0gICAgLyoqCi0g
ICAgICBUaGlzIHJlbW92ZXMgYWxsIGhlbHBlcnMgdGhhdCBoYXZlIGJlZW4gcmVnaXN0ZXJlZCwg
YW5kIHJlc2V0cyBhbmQgZnVuY3Rpb25zCi0gICAgICB0aGF0IHdlcmUgb3ZlcnJpZGRlbiBieSB0
aGUgaGVscGVycy4KLSAgICAgICBFeGFtcGxlOgotICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAg
IEFwcC5yZW1vdmVUZXN0SGVscGVycygpOwotICAgICAgYGBgCi0gICAgICAgQHB1YmxpYwotICAg
ICAgQG1ldGhvZCByZW1vdmVUZXN0SGVscGVycwotICAgICovCi0gICAgcmVtb3ZlVGVzdEhlbHBl
cnM6IGZ1bmN0aW9uICgpIHsKLSAgICAgIGlmICghdGhpcy5oZWxwZXJDb250YWluZXIpIHsKLSAg
ICAgICAgcmV0dXJuOwotICAgICAgfQotCi0gICAgICBmb3IgKHZhciBuYW1lIGluIGhlbHBlcnMp
IHsKLSAgICAgICAgdGhpcy5oZWxwZXJDb250YWluZXJbbmFtZV0gPSB0aGlzLm9yaWdpbmFsTWV0
aG9kc1tuYW1lXTsKLSAgICAgICAgZGVsZXRlIFRlc3QuUHJvbWlzZS5wcm90b3R5cGVbbmFtZV07
Ci0gICAgICAgIGRlbGV0ZSB0aGlzLnRlc3RIZWxwZXJzW25hbWVdOwotICAgICAgICBkZWxldGUg
dGhpcy5vcmlnaW5hbE1ldGhvZHNbbmFtZV07Ci0gICAgICB9Ci0gICAgfQotICB9KTsKLQotICAv
LyBUaGlzIG1ldGhvZCBpcyBubyBsb25nZXIgbmVlZGVkCi0gIC8vIEJ1dCBzdGlsbCBoZXJlIGZv
ciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eQotICAvLyBvZiBoZWxwZXIgY2hhaW5pbmcKLSAgZnVu
Y3Rpb24gcHJvdG9XcmFwKHByb3RvLCBuYW1lLCBjYWxsYmFjaywgaXNBc3luYykgewotICAgIHBy
b3RvW25hbWVdID0gZnVuY3Rpb24gKCkgewotICAgICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVu
dHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbjIpLCBfa2V5MiA9IDA7IF9rZXkyIDwgX2xlbjI7
IF9rZXkyKyspIHsKLSAgICAgICAgYXJnc1tfa2V5Ml0gPSBhcmd1bWVudHNbX2tleTJdOwotICAg
ICAgfQotCi0gICAgICBpZiAoaXNBc3luYykgewotICAgICAgICByZXR1cm4gY2FsbGJhY2suYXBw
bHkodGhpcywgYXJncyk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICByZXR1cm4gdGhpcy50aGVu
KGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkodGhpcywgYXJn
cyk7Ci0gICAgICAgIH0pOwotICAgICAgfQotICAgIH07Ci0gIH0KLQotICBUZXN0LlByb21pc2Ug
PSBmdW5jdGlvbiAoKSB7Ci0gICAgX2VtYmVyUnVudGltZUV4dFJzdnAuZGVmYXVsdC5Qcm9taXNl
LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7Ci0gICAgVGVzdC5sYXN0UHJvbWlzZSA9IHRoaXM7Ci0g
IH07Ci0KLSAgVGVzdC5Qcm9taXNlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoX2VtYmVyUnVu
dGltZUV4dFJzdnAuZGVmYXVsdC5Qcm9taXNlLnByb3RvdHlwZSk7Ci0gIFRlc3QuUHJvbWlzZS5w
cm90b3R5cGUuY29uc3RydWN0b3IgPSBUZXN0LlByb21pc2U7Ci0gIFRlc3QuUHJvbWlzZS5yZXNv
bHZlID0gVGVzdC5yZXNvbHZlOwotCi0gIC8vIFBhdGNoIGB0aGVuYCB0byBpc29sYXRlIGFzeW5j
IG1ldGhvZHMKLSAgLy8gc3BlY2lmaWNhbGx5IGBFbWJlci5UZXN0Lmxhc3RQcm9taXNlYAotICB2
YXIgb3JpZ2luYWxUaGVuID0gX2VtYmVyUnVudGltZUV4dFJzdnAuZGVmYXVsdC5Qcm9taXNlLnBy
b3RvdHlwZS50aGVuOwotICBUZXN0LlByb21pc2UucHJvdG90eXBlLnRoZW4gPSBmdW5jdGlvbiAo
b25TdWNjZXNzLCBvbkZhaWx1cmUpIHsKLSAgICByZXR1cm4gb3JpZ2luYWxUaGVuLmNhbGwodGhp
cywgZnVuY3Rpb24gKHZhbCkgewotICAgICAgcmV0dXJuIGlzb2xhdGUob25TdWNjZXNzLCB2YWwp
OwotICAgIH0sIG9uRmFpbHVyZSk7Ci0gIH07Ci0KLSAgLy8gVGhpcyBtZXRob2QgaXNvbGF0ZXMg
bmVzdGVkIGFzeW5jIG1ldGhvZHMKLSAgLy8gc28gdGhhdCB0aGV5IGRvbid0IGNvbmZsaWN0IHdp
dGggb3RoZXIgbGFzdCBwcm9taXNlcy4KLSAgLy8KLSAgLy8gMS4gU2V0IGBFbWJlci5UZXN0Lmxh
c3RQcm9taXNlYCB0byBudWxsCi0gIC8vIDIuIEludm9rZSBtZXRob2QKLSAgLy8gMy4gUmV0dXJu
IHRoZSBsYXN0IHByb21pc2UgY3JlYXRlZCBkdXJpbmcgbWV0aG9kCi0gIGZ1bmN0aW9uIGlzb2xh
dGUoZm4sIHZhbCkgewotICAgIHZhciB2YWx1ZSwgbGFzdFByb21pc2U7Ci0KLSAgICAvLyBSZXNl
dCBsYXN0UHJvbWlzZSBmb3IgbmVzdGVkIGhlbHBlcnMKLSAgICBUZXN0Lmxhc3RQcm9taXNlID0g
bnVsbDsKLQotICAgIHZhbHVlID0gZm4odmFsKTsKLQotICAgIGxhc3RQcm9taXNlID0gVGVzdC5s
YXN0UHJvbWlzZTsKLSAgICBUZXN0Lmxhc3RQcm9taXNlID0gbnVsbDsKLQotICAgIC8vIElmIHRo
ZSBtZXRob2QgcmV0dXJuZWQgYSBwcm9taXNlCi0gICAgLy8gcmV0dXJuIHRoYXQgcHJvbWlzZS4g
SWYgbm90LAotICAgIC8vIHJldHVybiB0aGUgbGFzdCBhc3luYyBoZWxwZXIncyBwcm9taXNlCi0g
ICAgaWYgKHZhbHVlICYmIHZhbHVlIGluc3RhbmNlb2YgVGVzdC5Qcm9taXNlIHx8ICFsYXN0UHJv
bWlzZSkgewotICAgICAgcmV0dXJuIHZhbHVlOwotICAgIH0gZWxzZSB7Ci0gICAgICByZXR1cm4g
cnVuKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgcmV0dXJuIFRlc3QucmVzb2x2ZShsYXN0UHJvbWlz
ZSkudGhlbihmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgICAgICB9
KTsKLSAgICAgIH0pOwotICAgIH0KLSAgfQotCi0gIGV4cG9ydHMuZGVmYXVsdCA9IFRlc3Q7Ci19
KTsKLWVuaWZlZCgnZW1iZXItdmlld3MvY29tcGF0L2F0dHJzLXByb3h5JywgWydleHBvcnRzJywg
J2VtYmVyLW1ldGFsL21peGluJywgJ2VtYmVyLW1ldGFsL3N5bWJvbCcsICdlbWJlci1tZXRhbC9w
cm9wZXJ0eV9ldmVudHMnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1ldGFsTWl4aW4sIF9l
bWJlck1ldGFsU3ltYm9sLCBfZW1iZXJNZXRhbFByb3BlcnR5X2V2ZW50cykgewotICAndXNlIHN0
cmljdCc7Ci0KLSAgZXhwb3J0cy5kZXByZWNhdGlvbiA9IGRlcHJlY2F0aW9uOwotCi0gIGZ1bmN0
aW9uIGRlcHJlY2F0aW9uKGtleSkgewotICAgIHJldHVybiAnWW91IHRyaWVkIHRvIGxvb2sgdXAg
YW4gYXR0cmlidXRlIGRpcmVjdGx5IG9uIHRoZSBjb21wb25lbnQuIFRoaXMgaXMgZGVwcmVjYXRl
ZC4gVXNlIGF0dHJzLicgKyBrZXkgKyAnIGluc3RlYWQuJzsKLSAgfQotCi0gIHZhciBNVVRBQkxF
X0NFTEwgPSBfZW1iZXJNZXRhbFN5bWJvbC5kZWZhdWx0KCdNVVRBQkxFX0NFTEwnKTsKLQotICBl
eHBvcnRzLk1VVEFCTEVfQ0VMTCA9IE1VVEFCTEVfQ0VMTDsKLSAgZnVuY3Rpb24gaXNDZWxsKHZh
bCkgewotICAgIHJldHVybiB2YWwgJiYgdmFsW01VVEFCTEVfQ0VMTF07Ci0gIH0KLQotICB2YXIg
QXR0cnNQcm94eU1peGluID0gewotICAgIGF0dHJzOiBudWxsLAotCi0gICAgZ2V0QXR0cjogZnVu
Y3Rpb24gKGtleSkgewotICAgICAgdmFyIGF0dHJzID0gdGhpcy5hdHRyczsKLSAgICAgIGlmICgh
YXR0cnMpIHsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgICAgcmV0dXJuIHRoaXMuZ2V0
QXR0ckZvcihhdHRycywga2V5KTsKLSAgICB9LAotCi0gICAgZ2V0QXR0ckZvcjogZnVuY3Rpb24g
KGF0dHJzLCBrZXkpIHsKLSAgICAgIHZhciB2YWwgPSBhdHRyc1trZXldOwotICAgICAgcmV0dXJu
IGlzQ2VsbCh2YWwpID8gdmFsLnZhbHVlIDogdmFsOwotICAgIH0sCi0KLSAgICBzZXRBdHRyOiBm
dW5jdGlvbiAoa2V5LCB2YWx1ZSkgewotICAgICAgdmFyIGF0dHJzID0gdGhpcy5hdHRyczsKLSAg
ICAgIHZhciB2YWwgPSBhdHRyc1trZXldOwotCi0gICAgICBpZiAoIWlzQ2VsbCh2YWwpKSB7Ci0g
ICAgICAgIHRocm93IG5ldyBFcnJvcignWW91IGNhblwndCB1cGRhdGUgYXR0cnMuJyArIGtleSAr
ICcsIGJlY2F1c2UgaXRcJ3Mgbm90IG11dGFibGUnKTsKLSAgICAgIH0KLQotICAgICAgdmFsLnVw
ZGF0ZSh2YWx1ZSk7Ci0gICAgfSwKLQotICAgIF9wcm9wYWdhdGVBdHRyc1RvVGhpczogZnVuY3Rp
b24gKGF0dHJzKSB7Ci0gICAgICB0aGlzLl9pc0Rpc3BhdGNoaW5nQXR0cnMgPSB0cnVlOwotICAg
ICAgdGhpcy5zZXRQcm9wZXJ0aWVzKGF0dHJzKTsKLSAgICAgIHRoaXMuX2lzRGlzcGF0Y2hpbmdB
dHRycyA9IGZhbHNlOwotICAgIH0KLSAgfTsKLQotICBBdHRyc1Byb3h5TWl4aW5bX2VtYmVyTWV0
YWxQcm9wZXJ0eV9ldmVudHMuUFJPUEVSVFlfRElEX0NIQU5HRV0gPSBmdW5jdGlvbiAoa2V5KSB7
Ci0gICAgaWYgKHRoaXMuX2lzQW5nbGVCcmFja2V0KSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQot
ICAgIGlmICh0aGlzLl9pc0Rpc3BhdGNoaW5nQXR0cnMpIHsKLSAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBpZiAodGhpcy5fY3VycmVudFN0YXRlKSB7Ci0gICAgICB0aGlzLl9jdXJyZW50U3Rh
dGUubGVnYWN5UHJvcGVydHlEaWRDaGFuZ2UodGhpcywga2V5KTsKLSAgICB9Ci0gIH07Ci0KLSAg
ZXhwb3J0cy5kZWZhdWx0ID0gX2VtYmVyTWV0YWxNaXhpbi5NaXhpbi5jcmVhdGUoQXR0cnNQcm94
eU1peGluKTsKLX0pOwotZW5pZmVkKCdlbWJlci12aWV3cy9jb21wb25lbnRfbG9va3VwJywgWydl
eHBvcnRzJywgJ2VtYmVyLW1ldGFsL2NvcmUnLCAnZW1iZXItbWV0YWwvZGVidWcnLCAnZW1iZXIt
cnVudGltZS9zeXN0ZW0vb2JqZWN0JywgJ2VtYmVyLWh0bWxiYXJzL3N5c3RlbS9sb29rdXAtaGVs
cGVyJywgJ2NvbnRhaW5lci9vd25lciddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0YWxD
b3JlLCBfZW1iZXJNZXRhbERlYnVnLCBfZW1iZXJSdW50aW1lU3lzdGVtT2JqZWN0LCBfZW1iZXJI
dG1sYmFyc1N5c3RlbUxvb2t1cEhlbHBlciwgX2NvbnRhaW5lck93bmVyKSB7Ci0gICd1c2Ugc3Ry
aWN0JzsKLQotICBleHBvcnRzLmRlZmF1bHQgPSBfZW1iZXJSdW50aW1lU3lzdGVtT2JqZWN0LmRl
ZmF1bHQuZXh0ZW5kKHsKLSAgICBpbnZhbGlkTmFtZTogZnVuY3Rpb24gKG5hbWUpIHsKLSAgICAg
IGlmICghX2VtYmVySHRtbGJhcnNTeXN0ZW1Mb29rdXBIZWxwZXIuQ09OVEFJTlNfREFTSF9DQUNI
RS5nZXQobmFtZSkpIHsKLSAgICAgICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ1lvdSBjYW5u
b3QgdXNlIFwnJyArIG5hbWUgKyAnXCcgYXMgYSBjb21wb25lbnQgbmFtZS4gQ29tcG9uZW50IG5h
bWVzIG11c3QgY29udGFpbiBhIGh5cGhlbi4nKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICB9Ci0gICAgfSwKLQotICAgIGxvb2t1cEZhY3Rvcnk6IGZ1bmN0aW9uIChuYW1lLCBvd25lcikg
ewotICAgICAgb3duZXIgPSBvd25lciB8fCBfY29udGFpbmVyT3duZXIuZ2V0T3duZXIodGhpcyk7
Ci0KLSAgICAgIHZhciBmdWxsTmFtZSA9ICdjb21wb25lbnQ6JyArIG5hbWU7Ci0gICAgICB2YXIg
dGVtcGxhdGVGdWxsTmFtZSA9ICd0ZW1wbGF0ZTpjb21wb25lbnRzLycgKyBuYW1lOwotICAgICAg
dmFyIHRlbXBsYXRlUmVnaXN0ZXJlZCA9IG93bmVyICYmIG93bmVyLmhhc1JlZ2lzdHJhdGlvbih0
ZW1wbGF0ZUZ1bGxOYW1lKTsKLQotICAgICAgaWYgKHRlbXBsYXRlUmVnaXN0ZXJlZCkgewotICAg
ICAgICBvd25lci5pbmplY3QoZnVsbE5hbWUsICdsYXlvdXQnLCB0ZW1wbGF0ZUZ1bGxOYW1lKTsK
LSAgICAgIH0KLQotICAgICAgdmFyIENvbXBvbmVudCA9IG93bmVyLl9sb29rdXBGYWN0b3J5KGZ1
bGxOYW1lKTsKLQotICAgICAgLy8gT25seSB0cmVhdCBhcyBhIGNvbXBvbmVudCBpZiBlaXRoZXIg
dGhlIGNvbXBvbmVudAotICAgICAgLy8gb3IgYSB0ZW1wbGF0ZSBoYXMgYmVlbiByZWdpc3RlcmVk
LgotICAgICAgaWYgKHRlbXBsYXRlUmVnaXN0ZXJlZCB8fCBDb21wb25lbnQpIHsKLSAgICAgICAg
aWYgKCFDb21wb25lbnQpIHsKLSAgICAgICAgICBvd25lci5yZWdpc3RlcihmdWxsTmFtZSwgX2Vt
YmVyTWV0YWxDb3JlLmRlZmF1bHQuQ29tcG9uZW50KTsKLSAgICAgICAgICBDb21wb25lbnQgPSBv
d25lci5fbG9va3VwRmFjdG9yeShmdWxsTmFtZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJu
IENvbXBvbmVudDsKLSAgICAgIH0KLSAgICB9LAotCi0gICAgY29tcG9uZW50Rm9yOiBmdW5jdGlv
biAobmFtZSwgb3duZXIsIG9wdGlvbnMpIHsKLSAgICAgIGlmICh0aGlzLmludmFsaWROYW1lKG5h
bWUpKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLQotICAgICAgdmFyIGZ1bGxOYW1lID0g
J2NvbXBvbmVudDonICsgbmFtZTsKLSAgICAgIHJldHVybiBvd25lci5fbG9va3VwRmFjdG9yeShm
dWxsTmFtZSwgb3B0aW9ucyk7Ci0gICAgfSwKLQotICAgIGxheW91dEZvcjogZnVuY3Rpb24gKG5h
bWUsIG93bmVyLCBvcHRpb25zKSB7Ci0gICAgICBpZiAodGhpcy5pbnZhbGlkTmFtZShuYW1lKSkg
ewotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0KLSAgICAgIHZhciB0ZW1wbGF0ZUZ1bGxOYW1l
ID0gJ3RlbXBsYXRlOmNvbXBvbmVudHMvJyArIG5hbWU7Ci0gICAgICByZXR1cm4gb3duZXIubG9v
a3VwKHRlbXBsYXRlRnVsbE5hbWUsIG9wdGlvbnMpOwotICAgIH0KLSAgfSk7Ci19KTsKLWVuaWZl
ZCgnZW1iZXItdmlld3MvY29tcG9uZW50cy9jb21wb25lbnQnLCBbJ2V4cG9ydHMnLCAnZW1iZXIt
bWV0YWwvZGVidWcnLCAnZW1iZXItbWV0YWwvZW52aXJvbm1lbnQnLCAnZW1iZXItcnVudGltZS9t
aXhpbnMvdGFyZ2V0X2FjdGlvbl9zdXBwb3J0JywgJ2VtYmVyLXZpZXdzL3ZpZXdzL3ZpZXcnLCAn
ZW1iZXItbWV0YWwvcHJvcGVydHlfZ2V0JywgJ2VtYmVyLW1ldGFsL3Byb3BlcnR5X3NldCcsICdl
bWJlci1tZXRhbC9pc19ub25lJywgJ2VtYmVyLW1ldGFsL3V0aWxzJywgJ2VtYmVyLW1ldGFsL2Nv
bXB1dGVkJywgJ2VtYmVyLXZpZXdzL2NvbXBhdC9hdHRycy1wcm94eScsICdjb250YWluZXIvb3du
ZXInXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1ldGFsRGVidWcsIF9lbWJlck1ldGFsRW52
aXJvbm1lbnQsIF9lbWJlclJ1bnRpbWVNaXhpbnNUYXJnZXRfYWN0aW9uX3N1cHBvcnQsIF9lbWJl
clZpZXdzVmlld3NWaWV3LCBfZW1iZXJNZXRhbFByb3BlcnR5X2dldCwgX2VtYmVyTWV0YWxQcm9w
ZXJ0eV9zZXQsIF9lbWJlck1ldGFsSXNfbm9uZSwgX2VtYmVyTWV0YWxVdGlscywgX2VtYmVyTWV0
YWxDb21wdXRlZCwgX2VtYmVyVmlld3NDb21wYXRBdHRyc1Byb3h5LCBfY29udGFpbmVyT3duZXIp
IHsKLSAgJ3VzZSBzdHJpY3QnOwotCi0gIGZ1bmN0aW9uIHZhbGlkYXRlQWN0aW9uKGNvbXBvbmVu
dCwgYWN0aW9uTmFtZSkgewotICAgIGlmIChhY3Rpb25OYW1lICYmIGFjdGlvbk5hbWVbX2VtYmVy
Vmlld3NDb21wYXRBdHRyc1Byb3h5Lk1VVEFCTEVfQ0VMTF0pIHsKLSAgICAgIGFjdGlvbk5hbWUg
PSBhY3Rpb25OYW1lLnZhbHVlOwotICAgIH0KLSAgICBfZW1iZXJNZXRhbERlYnVnLmFzc2VydCgn
VGhlIGRlZmF1bHQgYWN0aW9uIHdhcyB0cmlnZ2VyZWQgb24gdGhlIGNvbXBvbmVudCAnICsgY29t
cG9uZW50LnRvU3RyaW5nKCkgKyAnLCBidXQgdGhlIGFjdGlvbiBuYW1lICgnICsgYWN0aW9uTmFt
ZSArICcpIHdhcyBub3QgYSBzdHJpbmcuJywgX2VtYmVyTWV0YWxJc19ub25lLmRlZmF1bHQoYWN0
aW9uTmFtZSkgfHwgdHlwZW9mIGFjdGlvbk5hbWUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBhY3Rp
b25OYW1lID09PSAnZnVuY3Rpb24nKTsKLSAgICByZXR1cm4gYWN0aW9uTmFtZTsKLSAgfQotCi0g
IC8qKgotICBAbW9kdWxlIGVtYmVyCi0gIEBzdWJtb2R1bGUgZW1iZXItdmlld3MKLSAgKi8KLQot
ICAvKioKLSAgICBBbiBgRW1iZXIuQ29tcG9uZW50YCBpcyBhIHZpZXcgdGhhdCBpcyBjb21wbGV0
ZWx5Ci0gICAgaXNvbGF0ZWQuIFByb3BlcnRpZXMgYWNjZXNzZWQgaW4gaXRzIHRlbXBsYXRlcyBn
bwotICAgIHRvIHRoZSB2aWV3IG9iamVjdCBhbmQgYWN0aW9ucyBhcmUgdGFyZ2V0ZWQgYXQKLSAg
ICB0aGUgdmlldyBvYmplY3QuIFRoZXJlIGlzIG5vIGFjY2VzcyB0byB0aGUKLSAgICBzdXJyb3Vu
ZGluZyBjb250ZXh0IG9yIG91dGVyIGNvbnRyb2xsZXI7IGFsbAotICAgIGNvbnRleHR1YWwgaW5m
b3JtYXRpb24gbXVzdCBiZSBwYXNzZWQgaW4uCi0gIAotICAgIFRoZSBlYXNpZXN0IHdheSB0byBj
cmVhdGUgYW4gYEVtYmVyLkNvbXBvbmVudGAgaXMgdmlhCi0gICAgYSB0ZW1wbGF0ZS4gSWYgeW91
IG5hbWUgYSB0ZW1wbGF0ZQotICAgIGBjb21wb25lbnRzL215LWZvb2AsIHlvdSB3aWxsIGJlIGFi
bGUgdG8gdXNlCi0gICAgYHt7bXktZm9vfX1gIGluIG90aGVyIHRlbXBsYXRlcywgd2hpY2ggd2ls
bCBtYWtlCi0gICAgYW4gaW5zdGFuY2Ugb2YgdGhlIGlzb2xhdGVkIGNvbXBvbmVudC4KLSAgCi0g
ICAgYGBgaGFuZGxlYmFycwotICAgIHt7YXBwLXByb2ZpbGUgcGVyc29uPWN1cnJlbnRVc2VyfX0K
LSAgICBgYGAKLSAgCi0gICAgYGBgaGFuZGxlYmFycwotICAgIDwhLS0gYXBwLXByb2ZpbGUgdGVt
cGxhdGUgLS0+Ci0gICAgPGgxPnt7cGVyc29uLnRpdGxlfX08L2gxPgotICAgIDxpbWcgc3JjPXt7
cGVyc29uLmF2YXRhcn19PgotICAgIDxwIGNsYXNzPSdzaWduYXR1cmUnPnt7cGVyc29uLnNpZ25h
dHVyZX19PC9wPgotICAgIGBgYAotICAKLSAgICBZb3UgY2FuIHVzZSBgeWllbGRgIGluc2lkZSBh
IHRlbXBsYXRlIHRvCi0gICAgaW5jbHVkZSB0aGUgKipjb250ZW50cyoqIG9mIGFueSBibG9jayBh
dHRhY2hlZCB0bwotICAgIHRoZSBjb21wb25lbnQuIFRoZSBibG9jayB3aWxsIGJlIGV4ZWN1dGVk
IGluIHRoZQotICAgIGNvbnRleHQgb2YgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgb3Igb3V0ZXIg
Y29udHJvbGxlcjoKLSAgCi0gICAgYGBgaGFuZGxlYmFycwotICAgIHt7I2FwcC1wcm9maWxlIHBl
cnNvbj1jdXJyZW50VXNlcn19Ci0gICAgICA8cD5BZG1pbiBtb2RlPC9wPgotICAgICAge3shIEV4
ZWN1dGVkIGluIHRoZSBjb250cm9sbGVyJ3MgY29udGV4dC4gfX0KLSAgICB7ey9hcHAtcHJvZmls
ZX19Ci0gICAgYGBgCi0gIAotICAgIGBgYGhhbmRsZWJhcnMKLSAgICA8IS0tIGFwcC1wcm9maWxl
IHRlbXBsYXRlIC0tPgotICAgIDxoMT57e3BlcnNvbi50aXRsZX19PC9oMT4KLSAgICB7eyEgRXhl
Y3V0ZWQgaW4gdGhlIGNvbXBvbmVudCdzIGNvbnRleHQuIH19Ci0gICAge3t5aWVsZH19IHt7ISBi
bG9jayBjb250ZW50cyB9fQotICAgIGBgYAotICAKLSAgICBJZiB5b3Ugd2FudCB0byBjdXN0b21p
emUgdGhlIGNvbXBvbmVudCwgaW4gb3JkZXIgdG8KLSAgICBoYW5kbGUgZXZlbnRzIG9yIGFjdGlv
bnMsIHlvdSBpbXBsZW1lbnQgYSBzdWJjbGFzcwotICAgIG9mIGBFbWJlci5Db21wb25lbnRgIG5h
bWVkIGFmdGVyIHRoZSBuYW1lIG9mIHRoZQotICAgIGNvbXBvbmVudC4gTm90ZSB0aGF0IGBDb21w
b25lbnRgIG5lZWRzIHRvIGJlIGFwcGVuZGVkIHRvIHRoZSBuYW1lIG9mCi0gICAgeW91ciBzdWJj
bGFzcyBsaWtlIGBBcHBQcm9maWxlQ29tcG9uZW50YC4KLSAgCi0gICAgRm9yIGV4YW1wbGUsIHlv
dSBjb3VsZCBpbXBsZW1lbnQgdGhlIGFjdGlvbgotICAgIGBoZWxsb2AgZm9yIHRoZSBgYXBwLXBy
b2ZpbGVgIGNvbXBvbmVudDoKLSAgCi0gICAgYGBgamF2YXNjcmlwdAotICAgIEFwcC5BcHBQcm9m
aWxlQ29tcG9uZW50ID0gRW1iZXIuQ29tcG9uZW50LmV4dGVuZCh7Ci0gICAgICBhY3Rpb25zOiB7
Ci0gICAgICAgIGhlbGxvOiBmdW5jdGlvbihuYW1lKSB7Ci0gICAgICAgICAgY29uc29sZS5sb2co
IkhlbGxvIiwgbmFtZSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9KTsKLSAgICBgYGAKLSAg
Ci0gICAgQW5kIHRoZW4gdXNlIGl0IGluIHRoZSBjb21wb25lbnQncyB0ZW1wbGF0ZToKLSAgCi0g
ICAgYGBgaGFuZGxlYmFycwotICAgIDwhLS0gYXBwLXByb2ZpbGUgdGVtcGxhdGUgLS0+Ci0gIAot
ICAgIDxoMT57e3BlcnNvbi50aXRsZX19PC9oMT4KLSAgICB7e3lpZWxkfX0gPCEtLSBibG9jayBj
b250ZW50cyAtLT4KLSAgCi0gICAgPGJ1dHRvbiB7e2FjdGlvbiAnaGVsbG8nIHBlcnNvbi5uYW1l
fX0+Ci0gICAgICBTYXkgSGVsbG8gdG8ge3twZXJzb24ubmFtZX19Ci0gICAgPC9idXR0b24+Ci0g
ICAgYGBgCi0gIAotICAgIENvbXBvbmVudHMgbXVzdCBoYXZlIGEgYC1gIGluIHRoZWlyIG5hbWUg
dG8gYXZvaWQKLSAgICBjb25mbGljdHMgd2l0aCBidWlsdC1pbiBjb250cm9scyB0aGF0IHdyYXAg
SFRNTAotICAgIGVsZW1lbnRzLiBUaGlzIGlzIGNvbnNpc3RlbnQgd2l0aCB0aGUgc2FtZQotICAg
IHJlcXVpcmVtZW50IGluIHdlYiBjb21wb25lbnRzLgotICAKLSAgICBAY2xhc3MgQ29tcG9uZW50
Ci0gICAgQG5hbWVzcGFjZSBFbWJlcgotICAgIEBleHRlbmRzIEVtYmVyLlZpZXcKLSAgICBAdXNl
cyBFbWJlci5WaWV3VGFyZ2V0QWN0aW9uU3VwcG9ydAotICAgIEBwdWJsaWMKLSAgKi8KLSAgdmFy
IENvbXBvbmVudCA9IF9lbWJlclZpZXdzVmlld3NWaWV3LmRlZmF1bHQuZXh0ZW5kKF9lbWJlclJ1
bnRpbWVNaXhpbnNUYXJnZXRfYWN0aW9uX3N1cHBvcnQuZGVmYXVsdCwgewotICAgIGlzQ29tcG9u
ZW50OiB0cnVlLAotICAgIC8qCi0gICAgICBUaGlzIGlzIHNldCBzbyB0aGF0IHRoZSBwcm90byBp
bnNwZWN0aW9uIGluIGFwcGVuZFRlbXBsYXRlZFZpZXcgZG9lcyBub3QKLSAgICAgIHRoaW5rIHRo
YXQgaXQgc2hvdWxkIHNldCB0aGUgY29tcG9uZW50J3MgYGNvbnRleHRgIHRvIHRoYXQgb2YgdGhl
IHBhcmVudCB2aWV3LgotICAgICovCi0gICAgY29udHJvbGxlcjogbnVsbCwKLSAgICBjb250ZXh0
OiBudWxsLAotCi0gICAgaW5zdHJ1bWVudE5hbWU6ICdjb21wb25lbnQnLAotICAgIGluc3RydW1l
bnREaXNwbGF5OiBfZW1iZXJNZXRhbENvbXB1dGVkLmNvbXB1dGVkKGZ1bmN0aW9uICgpIHsKLSAg
ICAgIGlmICh0aGlzLl9kZWJ1Z0NvbnRhaW5lcktleSkgewotICAgICAgICByZXR1cm4gJ3t7JyAr
IHRoaXMuX2RlYnVnQ29udGFpbmVyS2V5LnNwbGl0KCc6JylbMV0gKyAnfX0nOwotICAgICAgfQot
ICAgIH0pLAotCi0gICAgaW5pdDogZnVuY3Rpb24gKCkgewotICAgICAgdmFyIF90aGlzID0gdGhp
czsKLQotICAgICAgdGhpcy5fc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKLSAgICAgIF9l
bWJlck1ldGFsUHJvcGVydHlfc2V0LnNldCh0aGlzLCAnY29udHJvbGxlcicsIHRoaXMpOwotICAg
ICAgX2VtYmVyTWV0YWxQcm9wZXJ0eV9zZXQuc2V0KHRoaXMsICdjb250ZXh0JywgdGhpcyk7Ci0K
LSAgICAgIGlmICghdGhpcy5sYXlvdXQgJiYgdGhpcy5sYXlvdXROYW1lICYmIF9jb250YWluZXJP
d25lci5nZXRPd25lcih0aGlzKSkgewotICAgICAgICB2YXIgbGF5b3V0TmFtZSA9IF9lbWJlck1l
dGFsUHJvcGVydHlfZ2V0LmdldCh0aGlzLCAnbGF5b3V0TmFtZScpOwotCi0gICAgICAgIHRoaXMu
bGF5b3V0ID0gdGhpcy50ZW1wbGF0ZUZvck5hbWUobGF5b3V0TmFtZSk7Ci0gICAgICB9Ci0KLSAg
ICAgIC8vIElmIGEgYGRlZmF1bHRMYXlvdXRgIHdhcyBzcGVjaWZpZWQgbW92ZSBpdCB0byB0aGUg
YGxheW91dGAgcHJvcC4KLSAgICAgIC8vIGBsYXlvdXRgIGlzIG5vIGxvbmdlciBhIENQLCBzbyB0
aGlzIGp1c3QgZW5zdXJlcyB0aGF0IHRoZSBgZGVmYXVsdExheW91dGAKLSAgICAgIC8vIGxvZ2lj
IGlzIHN1cHBvcnRlZCB3aXRoIGEgZGVwcmVjYXRpb24KLSAgICAgIGlmICh0aGlzLmRlZmF1bHRM
YXlvdXQgJiYgIXRoaXMubGF5b3V0KSB7Ci0gICAgICAgIF9lbWJlck1ldGFsRGVidWcuZGVwcmVj
YXRlKCdTcGVjaWZ5aW5nIGBkZWZhdWx0TGF5b3V0YCB0byAnICsgdGhpcyArICcgaXMgZGVwcmVj
YXRlZC4gUGxlYXNlIHVzZSBgbGF5b3V0YCBpbnN0ZWFkLicsIGZhbHNlLCB7Ci0gICAgICAgICAg
aWQ6ICdlbWJlci12aWV3cy5jb21wb25lbnQuZGVmYXVsdExheW91dCcsCi0gICAgICAgICAgdW50
aWw6ICczLjAuMCcsCi0gICAgICAgICAgdXJsOiAnaHR0cDovL2VtYmVyanMuY29tL2RlcHJlY2F0
aW9ucy92Mi54LyN0b2NfZW1iZXItY29tcG9uZW50LWRlZmF1bHRsYXlvdXQnCi0gICAgICAgIH0p
OwotCi0gICAgICAgIHRoaXMubGF5b3V0ID0gdGhpcy5kZWZhdWx0TGF5b3V0OwotICAgICAgfQot
Ci0gICAgICAvLyBJZiBpbiBhIHRhZ2xlc3MgY29tcG9uZW50LCBhc3NlcnQgdGhhdCBubyBldmVu
dCBoYW5kbGVycyBhcmUgZGVmaW5lZAotICAgICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ1lv
dSBjYW4gbm90IGRlZmluZSBhIGZ1bmN0aW9uIHRoYXQgaGFuZGxlcyBET00gZXZlbnRzIGluIHRo
ZSBgJyArIHRoaXMgKyAnYCB0YWdsZXNzIGNvbXBvbmVudCBzaW5jZSBpdCBkb2VzblwndCBoYXZl
IGFueSBET00gZWxlbWVudC4nLCB0aGlzLnRhZ05hbWUgIT09ICcnIHx8ICFfZW1iZXJNZXRhbEVu
dmlyb25tZW50LmRlZmF1bHQuaGFzRE9NIHx8ICEoZnVuY3Rpb24gKCkgewotICAgICAgICB2YXIg
ZXZlbnREaXNwYXRjaGVyID0gX2NvbnRhaW5lck93bmVyLmdldE93bmVyKF90aGlzKS5sb29rdXAo
J2V2ZW50X2Rpc3BhdGNoZXI6bWFpbicpOwotICAgICAgICB2YXIgZXZlbnRzID0gZXZlbnREaXNw
YXRjaGVyICYmIGV2ZW50RGlzcGF0Y2hlci5fZmluYWxFdmVudHMgfHwge307Ci0KLSAgICAgICAg
Zm9yICh2YXIga2V5IGluIGV2ZW50cykgewotICAgICAgICAgIHZhciBtZXRob2ROYW1lID0gZXZl
bnRzW2tleV07Ci0KLSAgICAgICAgICBpZiAodHlwZW9mIF90aGlzW21ldGhvZE5hbWVdID09PSAn
ZnVuY3Rpb24nKSB7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gaW5kaWNhdGUgdGhhdCB0
aGUgYXNzZXJ0aW9uIHNob3VsZCBiZSB0cmlnZ2VyZWQKLSAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICAgIH0pKCkpOwotICAgIH0sCi0KLSAgICB0ZW1wbGF0ZTogbnVsbCwKLSAgICBsYXlvdXRO
YW1lOiBudWxsLAotICAgIGxheW91dDogbnVsbCwKLQotICAgIC8qKgotICAgICAgSWYgdGhlIGNv
bXBvbmVudCBpcyBjdXJyZW50bHkgaW5zZXJ0ZWQgaW50byB0aGUgRE9NIG9mIGEgcGFyZW50IHZp
ZXcsIHRoaXMKLSAgICAgIHByb3BlcnR5IHdpbGwgcG9pbnQgdG8gdGhlIGNvbnRyb2xsZXIgb2Yg
dGhlIHBhcmVudCB2aWV3LgotICAgICAgIEBwcm9wZXJ0eSB0YXJnZXRPYmplY3QKLSAgICAgIEB0
eXBlIEVtYmVyLkNvbnRyb2xsZXIKLSAgICAgIEBkZWZhdWx0IG51bGwKLSAgICAgIEBwcml2YXRl
Ci0gICAgKi8KLSAgICB0YXJnZXRPYmplY3Q6IF9lbWJlck1ldGFsQ29tcHV0ZWQuY29tcHV0ZWQo
J2NvbnRyb2xsZXInLCBmdW5jdGlvbiAoa2V5KSB7Ci0gICAgICBpZiAodGhpcy5fdGFyZ2V0T2Jq
ZWN0KSB7Ci0gICAgICAgIHJldHVybiB0aGlzLl90YXJnZXRPYmplY3Q7Ci0gICAgICB9Ci0gICAg
ICBpZiAodGhpcy5fY29udHJvbGxlcikgewotICAgICAgICByZXR1cm4gdGhpcy5fY29udHJvbGxl
cjsKLSAgICAgIH0KLSAgICAgIHZhciBwYXJlbnRWaWV3ID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9n
ZXQuZ2V0KHRoaXMsICdwYXJlbnRWaWV3Jyk7Ci0gICAgICByZXR1cm4gcGFyZW50VmlldyA/IF9l
bWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldChwYXJlbnRWaWV3LCAnY29udHJvbGxlcicpIDogbnVs
bDsKLSAgICB9KSwKLQotICAgIC8qKgotICAgICAgQ2FsbHMgYW4gYWN0aW9uIHBhc3NlZCB0byBh
IGNvbXBvbmVudC4KLSAgICAgICBGb3IgZXhhbXBsZSBhIGNvbXBvbmVudCBmb3IgcGxheWluZyBv
ciBwYXVzaW5nIG11c2ljIG1heSB0cmFuc2xhdGUgY2xpY2sgZXZlbnRzCi0gICAgICBpbnRvIGFj
dGlvbiBub3RpZmljYXRpb25zIG9mICJwbGF5IiBvciAic3RvcCIgZGVwZW5kaW5nIG9uIHNvbWUg
aW50ZXJuYWwgc3RhdGUKLSAgICAgIG9mIHRoZSBjb21wb25lbnQ6Ci0gICAgICAgYGBgamF2YXNj
cmlwdAotICAgICAgLy8gYXBwL2NvbXBvbmVudHMvcGxheS1idXR0b24uanMKLSAgICAgIGV4cG9y
dCBkZWZhdWx0IEVtYmVyLkNvbXBvbmVudC5leHRlbmQoewotICAgICAgICBjbGljaygpIHsKLSAg
ICAgICAgICBpZiAodGhpcy5nZXQoJ2lzUGxheWluZycpKSB7Ci0gICAgICAgICAgICB0aGlzLnNl
bmRBY3Rpb24oJ3BsYXknKTsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdGhpcy5z
ZW5kQWN0aW9uKCdzdG9wJyk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9KTsKLSAg
ICAgIGBgYAotICAgICAgIFRoZSBhY3Rpb25zICJwbGF5IiBhbmQgInN0b3AiIG11c3QgYmUgcGFz
c2VkIHRvIHRoaXMgYHBsYXktYnV0dG9uYCBjb21wb25lbnQ6Ci0gICAgICAgYGBgaGFuZGxlYmFy
cwotICAgICAge3shIGFwcC90ZW1wbGF0ZXMvYXBwbGljYXRpb24uaGJzIH19Ci0gICAgICB7e3Bs
YXktYnV0dG9uIHBsYXk9KGFjdGlvbiAibXVzaWNTdGFydGVkIikgc3RvcD0oYWN0aW9uICJtdXNp
Y1N0b3BwZWQiKX19Ci0gICAgICBgYGAKLSAgICAgICBXaGVuIHRoZSBjb21wb25lbnQgcmVjZWl2
ZXMgYSBicm93c2VyIGBjbGlja2AgZXZlbnQgaXQgdHJhbnNsYXRlIHRoaXMKLSAgICAgIGludGVy
YWN0aW9uIGludG8gYXBwbGljYXRpb24tc3BlY2lmaWMgc2VtYW50aWNzICgicGxheSIgb3IgInN0
b3AiKSBhbmQKLSAgICAgIGNhbGxzIHRoZSBzcGVjaWZpZWQgYWN0aW9uLgotICAgICAgIGBgYGph
dmFzY3JpcHQKLSAgICAgIC8vIGFwcC9jb250cm9sbGVyL2FwcGxpY2F0aW9uLmpzCi0gICAgICBl
eHBvcnQgZGVmYXVsdCBFbWJlci5Db250cm9sbGVyLmV4dGVuZCh7Ci0gICAgICAgIGFjdGlvbnM6
IHsKLSAgICAgICAgICBtdXNpY1N0YXJ0ZWQoKSB7Ci0gICAgICAgICAgICAvLyBjYWxsZWQgd2hl
biB0aGUgcGxheSBidXR0b24gaXMgY2xpY2tlZAotICAgICAgICAgICAgLy8gYW5kIHRoZSBtdXNp
YyBzdGFydGVkIHBsYXlpbmcKLSAgICAgICAgICB9LAotICAgICAgICAgIG11c2ljU3RvcHBlZCgp
IHsKLSAgICAgICAgICAgIC8vIGNhbGxlZCB3aGVuIHRoZSBwbGF5IGJ1dHRvbiBpcyBjbGlja2Vk
Ci0gICAgICAgICAgICAvLyBhbmQgdGhlIG11c2ljIHN0b3BwZWQgcGxheWluZwotICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgICAgfSk7Ci0gICAgICBgYGAKLSAgICAgICBJZiBubyBhY3Rpb24g
aXMgcGFzc2VkIHRvIGBzZW5kQWN0aW9uYCBhIGRlZmF1bHQgbmFtZSBvZiAiYWN0aW9uIgotICAg
ICAgaXMgYXNzdW1lZC4KLSAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAvLyBhcHAvY29tcG9u
ZW50cy9uZXh0LWJ1dHRvbi5qcwotICAgICAgZXhwb3J0IGRlZmF1bHQgRW1iZXIuQ29tcG9uZW50
LmV4dGVuZCh7Ci0gICAgICAgIGNsaWNrKCkgewotICAgICAgICAgIHRoaXMuc2VuZEFjdGlvbigp
OwotICAgICAgICB9Ci0gICAgICB9KTsKLSAgICAgIGBgYAotICAgICAgIGBgYGhhbmRsZWJhcnMK
LSAgICAgIHt7ISBhcHAvdGVtcGxhdGVzL2FwcGxpY2F0aW9uLmhicyB9fQotICAgICAge3tuZXh0
LWJ1dHRvbiBhY3Rpb249KGFjdGlvbiAicGxheU5leHRTb25nSW5BbGJ1bSIpfX0KLSAgICAgIGBg
YAotICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgIC8vIGFwcC9jb250cm9sbGVycy9hcHBsaWNh
dGlvbi5qcwotICAgICAgQXBwLkFwcGxpY2F0aW9uQ29udHJvbGxlciA9IEVtYmVyLkNvbnRyb2xs
ZXIuZXh0ZW5kKHsKLSAgICAgICAgYWN0aW9uczogewotICAgICAgICAgIHBsYXlOZXh0U29uZ0lu
QWxidW0oKSB7Ci0gICAgICAgICAgICAuLi4KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAg
IH0pOwotICAgICAgYGBgCi0gICAgICAgQG1ldGhvZCBzZW5kQWN0aW9uCi0gICAgICBAcGFyYW0g
W2FjdGlvbl0ge1N0cmluZ30gdGhlIGFjdGlvbiB0byBjYWxsCi0gICAgICBAcGFyYW0gW3BhcmFt
c10geyp9IGFyZ3VtZW50cyBmb3IgdGhlIGFjdGlvbgotICAgICAgQHB1YmxpYwotICAgICovCi0g
ICAgc2VuZEFjdGlvbjogZnVuY3Rpb24gKGFjdGlvbikgewotICAgICAgZm9yICh2YXIgX2xlbiA9
IGFyZ3VtZW50cy5sZW5ndGgsIGNvbnRleHRzID0gQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6
IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykgewotICAgICAgICBjb250ZXh0c1tf
a2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07Ci0gICAgICB9Ci0KLSAgICAgIHZhciBhY3Rpb25O
YW1lOwotCi0gICAgICAvLyBTZW5kIHRoZSBkZWZhdWx0IGFjdGlvbgotICAgICAgaWYgKGFjdGlv
biA9PT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgIGFjdGlvbiA9ICdhY3Rpb24nOwotICAgICAgfQot
ICAgICAgYWN0aW9uTmFtZSA9IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0aGlzLCAnYXR0
cnMuJyArIGFjdGlvbikgfHwgX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsIGFjdGlv
bik7Ci0gICAgICBhY3Rpb25OYW1lID0gdmFsaWRhdGVBY3Rpb24odGhpcywgYWN0aW9uTmFtZSk7
Ci0KLSAgICAgIC8vIElmIG5vIGFjdGlvbiBuYW1lIGZvciB0aGF0IGFjdGlvbiBjb3VsZCBiZSBm
b3VuZCwganVzdCBhYm9ydC4KLSAgICAgIGlmIChhY3Rpb25OYW1lID09PSB1bmRlZmluZWQpIHsK
LSAgICAgICAgcmV0dXJuOwotICAgICAgfQotCi0gICAgICBpZiAodHlwZW9mIGFjdGlvbk5hbWUg
PT09ICdmdW5jdGlvbicpIHsKLSAgICAgICAgYWN0aW9uTmFtZS5hcHBseSh1bmRlZmluZWQsIGNv
bnRleHRzKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHRoaXMudHJpZ2dlckFjdGlvbih7Ci0g
ICAgICAgICAgYWN0aW9uOiBhY3Rpb25OYW1lLAotICAgICAgICAgIGFjdGlvbkNvbnRleHQ6IGNv
bnRleHRzCi0gICAgICAgIH0pOwotICAgICAgfQotICAgIH0sCi0KLSAgICBzZW5kOiBmdW5jdGlv
biAoYWN0aW9uTmFtZSkgewotICAgICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3Ro
LCBhcmdzID0gQXJyYXkoX2xlbjIgPiAxID8gX2xlbjIgLSAxIDogMCksIF9rZXkyID0gMTsgX2tl
eTIgPCBfbGVuMjsgX2tleTIrKykgewotICAgICAgICBhcmdzW19rZXkyIC0gMV0gPSBhcmd1bWVu
dHNbX2tleTJdOwotICAgICAgfQotCi0gICAgICB2YXIgdGFyZ2V0OwotICAgICAgdmFyIGFjdGlv
biA9IHRoaXMuYWN0aW9ucyAmJiB0aGlzLmFjdGlvbnNbYWN0aW9uTmFtZV07Ci0KLSAgICAgIGlm
IChhY3Rpb24pIHsKLSAgICAgICAgdmFyIHNob3VsZEJ1YmJsZSA9IGFjdGlvbi5hcHBseSh0aGlz
LCBhcmdzKSA9PT0gdHJ1ZTsKLSAgICAgICAgaWYgKCFzaG91bGRCdWJibGUpIHsKLSAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgaWYgKHRhcmdldCA9IF9lbWJl
ck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0aGlzLCAndGFyZ2V0JykpIHsKLSAgICAgICAgdmFyIF90
YXJnZXQ7Ci0KLSAgICAgICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ1RoZSBgdGFyZ2V0YCBm
b3IgJyArIHRoaXMgKyAnICgnICsgdGFyZ2V0ICsgJykgZG9lcyBub3QgaGF2ZSBhIGBzZW5kYCBt
ZXRob2QnLCB0eXBlb2YgdGFyZ2V0LnNlbmQgPT09ICdmdW5jdGlvbicpOwotICAgICAgICAoX3Rh
cmdldCA9IHRhcmdldCkuc2VuZC5hcHBseShfdGFyZ2V0LCBhcmd1bWVudHMpOwotICAgICAgfSBl
bHNlIHsKLSAgICAgICAgaWYgKCFhY3Rpb24pIHsKLSAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Io
X2VtYmVyTWV0YWxVdGlscy5pbnNwZWN0KHRoaXMpICsgJyBoYWQgbm8gYWN0aW9uIGhhbmRsZXIg
Zm9yOiAnICsgYWN0aW9uTmFtZSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICAv
KioKLSAgICAgIFJldHVybnMgdHJ1ZSB3aGVuIHRoZSBjb21wb25lbnQgd2FzIGludm9rZWQgd2l0
aCBhIGJsb2NrIHRlbXBsYXRlLgotICAgICAgIEV4YW1wbGUgKGBoYXNCbG9ja2Agd2lsbCBiZSBg
ZmFsc2VgKToKLSAgICAgICBgYGBoYnMKLSAgICAgIHt7ISB0ZW1wbGF0ZXMvYXBwbGljYXRpb24u
aGJzIH19Ci0gICAgICAge3tmb28tYmFyfX0KLSAgICAgICB7eyEgdGVtcGxhdGVzL2NvbXBvbmVu
dHMvZm9vLWJhci5oYnMgfX0KLSAgICAgIHt7I2lmIGhhc0Jsb2NrfX0KLSAgICAgICAgVGhpcyB3
aWxsIG5vdCBiZSBwcmludGVkLCBiZWNhdXNlIG5vIGJsb2NrIHdhcyBwcm92aWRlZAotICAgICAg
e3svaWZ9fQotICAgICAgYGBgCi0gICAgICAgRXhhbXBsZSAoYGhhc0Jsb2NrYCB3aWxsIGJlIGB0
cnVlYCk6Ci0gICAgICAgYGBgaGJzCi0gICAgICB7eyEgdGVtcGxhdGVzL2FwcGxpY2F0aW9uLmhi
cyB9fQotICAgICAgIHt7I2Zvby1iYXJ9fQotICAgICAgICBIaSEKLSAgICAgIHt7L2Zvby1iYXJ9
fQotICAgICAgIHt7ISB0ZW1wbGF0ZXMvY29tcG9uZW50cy9mb28tYmFyLmhicyB9fQotICAgICAg
e3sjaWYgaGFzQmxvY2t9fQotICAgICAgICBUaGlzIHdpbGwgYmUgcHJpbnRlZCBiZWNhdXNlIGEg
YmxvY2sgd2FzIHByb3ZpZGVkCi0gICAgICAgIHt7eWllbGR9fQotICAgICAge3svaWZ9fQotICAg
ICAgYGBgCi0gICAgICAgVGhpcyBoZWxwZXIgYWNjZXB0cyBhbiBhcmd1bWVudCB3aXRoIHRoZSBu
YW1lIG9mIHRoZSBibG9jayB3ZSB3YW50IHRvIGNoZWNrIHRoZSBwcmVzZW5jZSBvZi4KLSAgICAg
IFRoaXMgaXMgdXNlZnVsIGZvciBjaGVja2luZyBmb3IgdGhlIHByZXNlbmNlIG9mIHRoZSBvcHRp
b25hbCBpbnZlcnNlIGJsb2NrIGluIGNvbXBvbmVudHMuCi0gICAgICAgYGBgaGJzCi0gICAgICB7
eyEgdGVtcGxhdGVzL2FwcGxpY2F0aW9uLmhicyB9fQotICAgICAgIHt7I2Zvby1iYXJ9fQotICAg
ICAgICBIaSEKLSAgICAgIHt7ZWxzZX19Ci0gICAgICAgIFdoYXQncyB1cD8KLSAgICAgIHt7L2Zv
by1iYXJ9fQotICAgICAgIHt7ISB0ZW1wbGF0ZXMvY29tcG9uZW50cy9mb28tYmFyLmhicyB9fQot
ICAgICAge3t5aWVsZH19Ci0gICAgICB7eyNpZiAoaGFzQmxvY2sgImludmVyc2UiKX19Ci0gICAg
ICAgIHt7eWllbGQgdG89ImludmVyc2UifX0KLSAgICAgIHt7ZWxzZX19Ci0gICAgICAgIEhvdyBh
cmUgeW91PwotICAgICAge3svaWZ9fQotICAgICAgYGBgCi0gICAgICAgQHB1YmxpYwotICAgICAg
QHByb3BlcnR5IGhhc0Jsb2NrCi0gICAgICBAcGFyYW0ge1N0cmluZ30gW2Jsb2NrTmFtZT0iZGVm
YXVsdCJdIFRoZSBuYW1lIG9mIHRoZSBibG9jayB0byBjaGVjayBwcmVzZW5jZSBvZi4KLSAgICAg
IEByZXR1cm5zIEJvb2xlYW4KLSAgICAgIEBzaW5jZSAxLjEzLjAKLSAgICAqLwotCi0gICAgLyoq
Ci0gICAgICBSZXR1cm5zIHRydWUgd2hlbiB0aGUgY29tcG9uZW50IHdhcyBpbnZva2VkIHdpdGgg
YSBibG9jayBwYXJhbWV0ZXIKLSAgICAgIHN1cHBsaWVkLgotICAgICAgIEV4YW1wbGUgKGBoYXNC
bG9ja1BhcmFtc2Agd2lsbCBiZSBgZmFsc2VgKToKLSAgICAgICBgYGBoYnMKLSAgICAgIHt7ISB0
ZW1wbGF0ZXMvYXBwbGljYXRpb24uaGJzIH19Ci0gICAgICAge3sjZm9vLWJhcn19Ci0gICAgICAg
IE5vIGJsb2NrIHBhcmFtZXRlci4KLSAgICAgIHt7L2Zvby1iYXJ9fQotICAgICAgIHt7ISB0ZW1w
bGF0ZXMvY29tcG9uZW50cy9mb28tYmFyLmhicyB9fQotICAgICAge3sjaWYgaGFzQmxvY2tQYXJh
bXN9fQotICAgICAgICBUaGlzIHdpbGwgbm90IGJlIHByaW50ZWQsIGJlY2F1c2Ugbm8gYmxvY2sg
d2FzIHByb3ZpZGVkCi0gICAgICAgIHt7eWllbGQgdGhpc319Ci0gICAgICB7ey9pZn19Ci0gICAg
ICBgYGAKLSAgICAgICBFeGFtcGxlIChgaGFzQmxvY2tQYXJhbXNgIHdpbGwgYmUgYHRydWVgKToK
LSAgICAgICBgYGBoYnMKLSAgICAgIHt7ISB0ZW1wbGF0ZXMvYXBwbGljYXRpb24uaGJzIH19Ci0g
ICAgICAge3sjZm9vLWJhciBhcyB8Zm9vfH19Ci0gICAgICAgIEhpIQotICAgICAge3svZm9vLWJh
cn19Ci0gICAgICAge3shIHRlbXBsYXRlcy9jb21wb25lbnRzL2Zvby1iYXIuaGJzIH19Ci0gICAg
ICB7eyNpZiBoYXNCbG9ja1BhcmFtc319Ci0gICAgICAgIFRoaXMgd2lsbCBiZSBwcmludGVkIGJl
Y2F1c2UgYSBibG9jayB3YXMgcHJvdmlkZWQKLSAgICAgICAge3t5aWVsZCB0aGlzfX0KLSAgICAg
IHt7L2lmfX0KLSAgICAgIGBgYAotICAgICAgQHB1YmxpYwotICAgICAgQHByb3BlcnR5IGhhc0Js
b2NrUGFyYW1zCi0gICAgICBAcmV0dXJucyBCb29sZWFuCi0gICAgICBAc2luY2UgMS4xMy4wCi0g
ICAgKi8KLQotICAgIC8qKgotICAgICAgRW5hYmxlcyBjb21wb25lbnRzIHRvIHRha2UgYSBsaXN0
IG9mIHBhcmFtZXRlcnMgYXMgYXJndW1lbnRzCi0gICAgICAgRm9yIGV4YW1wbGUgYSBjb21wb25l
bnQgdGhhdCB0YWtlcyB0d28gcGFyYW1ldGVycyB3aXRoIHRoZSBuYW1lcwotICAgICAgYG5hbWVg
IGFuZCBgYWdlYDoKLSAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICBsZXQgTXlDb21wb25lbnQg
PSBFbWJlci5Db21wb25lbnQuZXh0ZW5kOwotICAgICAgTXlDb21wb25lbnQucmVvcGVuQ2xhc3Mo
ewotICAgICAgICBwb3NpdGlvbmFsUGFyYW1zOiBbJ25hbWUnLCAnYWdlJ10KLSAgICAgIH0pOwot
ICAgICAgYGBgCi0gICAgICAgSXQgY2FuIHRoZW4gYmUgaW52b2tlZCBsaWtlIHRoaXM6Ci0gICAg
ICAgYGBgaGJzCi0gICAgICB7e215LWNvbXBvbmVudCAiSm9obiIgMzh9fQotICAgICAgYGBgCi0g
ICAgICAgVGhlIHBhcmFtZXRlcnMgY2FuIGJlIHJlZmVyZWQgdG8ganVzdCBsaWtlIG5hbWVkIHBh
cmFtZXRlcnM6Ci0gICAgICAgYGBgaGJzCi0gICAgICBOYW1lOiB7e2F0dHJzLm5hbWV9fSwgQWdl
OiB7e2F0dHJzLmFnZX19LgotICAgICAgYGBgCi0gICAgICAgVXNpbmcgYSBzdHJpbmcgaW5zdGVh
ZCBvZiBhbiBhcnJheSBhbGxvd3MgZm9yIGFuIGFyYml0cmFyeSBudW1iZXIgb2YKLSAgICAgIHBh
cmFtZXRlcnM6Ci0gICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgbGV0IE15Q29tcG9uZW50ID0g
RW1iZXIuQ29tcG9uZW50LmV4dGVuZDsKLSAgICAgIE15Q29tcG9uZW50LnJlb3BlbkNsYXNzKHsK
LSAgICAgICAgcG9zaXRpb25hbFBhcmFtczogJ25hbWVzJwotICAgICAgfSk7Ci0gICAgICBgYGAK
LSAgICAgICBJdCBjYW4gdGhlbiBiZSBpbnZva2VkIGxpa2UgdGhpczoKLSAgICAgICBgYGBoYnMK
LSAgICAgIHt7bXktY29tcG9uZW50ICJKb2huIiAiTWljaGFlbCIgIlNjb3R0In19Ci0gICAgICBg
YGAKLSAgICAgICBUaGUgcGFyYW1ldGVycyBjYW4gdGhlbiBiZSByZWZlcmVkIHRvIGJ5IGVudW1l
cmF0aW5nIG92ZXIgdGhlIGxpc3Q6Ci0gICAgICAgYGBgaGJzCi0gICAgICB7eyNlYWNoIGF0dHJz
Lm5hbWVzIGFzIHxuYW1lfH19e3tuYW1lfX17ey9lYWNofX0KLSAgICAgIGBgYAotICAgICAgIEBz
dGF0aWMKLSAgICAgIEBwdWJsaWMKLSAgICAgIEBwcm9wZXJ0eSBwb3NpdGlvbmFsUGFyYW1zCi0g
ICAgICBAc2luY2UgMS4xMy4wCi0gICAgKi8KLQotICAgIC8qKgotICAgICAgQ2FsbGVkIHdoZW4g
dGhlIGF0dHJpYnV0ZXMgcGFzc2VkIGludG8gdGhlIGNvbXBvbmVudCBoYXZlIGJlZW4gdXBkYXRl
ZC4KLSAgICAgIENhbGxlZCBib3RoIGR1cmluZyB0aGUgaW5pdGlhbCByZW5kZXIgb2YgYSBjb250
YWluZXIgYW5kIGR1cmluZyBhIHJlcmVuZGVyLgotICAgICAgQ2FuIGJlIHVzZWQgaW4gcGxhY2Ug
b2YgYW4gb2JzZXJ2ZXI7IGNvZGUgcGxhY2VkIGhlcmUgd2lsbCBiZSBleGVjdXRlZAotICAgICAg
ZXZlcnkgdGltZSBhbnkgYXR0cmlidXRlIHVwZGF0ZXMuCi0gICAgICAgQG1ldGhvZCBkaWRSZWNl
aXZlQXR0cnMKLSAgICAgIEBwdWJsaWMKLSAgICAgIEBzaW5jZSAxLjEzLjAKLSAgICAqLwotCi0g
ICAgLyoqCi0gICAgICBDYWxsZWQgd2hlbiB0aGUgYXR0cmlidXRlcyBwYXNzZWQgaW50byB0aGUg
Y29tcG9uZW50IGhhdmUgYmVlbiB1cGRhdGVkLgotICAgICAgQ2FsbGVkIGJvdGggZHVyaW5nIHRo
ZSBpbml0aWFsIHJlbmRlciBvZiBhIGNvbnRhaW5lciBhbmQgZHVyaW5nIGEgcmVyZW5kZXIuCi0g
ICAgICBDYW4gYmUgdXNlZCBpbiBwbGFjZSBvZiBhbiBvYnNlcnZlcjsgY29kZSBwbGFjZWQgaGVy
ZSB3aWxsIGJlIGV4ZWN1dGVkCi0gICAgICBldmVyeSB0aW1lIGFueSBhdHRyaWJ1dGUgdXBkYXRl
cy4KLSAgICAgICBAZXZlbnQgZGlkUmVjZWl2ZUF0dHJzCi0gICAgICBAcHVibGljCi0gICAgICBA
c2luY2UgMS4xMy4wCi0gICAgKi8KLQotICAgIC8qKgotICAgICAgQ2FsbGVkIGFmdGVyIGEgY29t
cG9uZW50IGhhcyBiZWVuIHJlbmRlcmVkLCBib3RoIG9uIGluaXRpYWwgcmVuZGVyIGFuZAotICAg
ICAgaW4gc3Vic2VxdWVudCByZXJlbmRlcnMuCi0gICAgICAgQG1ldGhvZCBkaWRSZW5kZXIKLSAg
ICAgIEBwdWJsaWMKLSAgICAgIEBzaW5jZSAxLjEzLjAKLSAgICAqLwotCi0gICAgLyoqCi0gICAg
ICBDYWxsZWQgYWZ0ZXIgYSBjb21wb25lbnQgaGFzIGJlZW4gcmVuZGVyZWQsIGJvdGggb24gaW5p
dGlhbCByZW5kZXIgYW5kCi0gICAgICBpbiBzdWJzZXF1ZW50IHJlcmVuZGVycy4KLSAgICAgICBA
ZXZlbnQgZGlkUmVuZGVyCi0gICAgICBAcHVibGljCi0gICAgICBAc2luY2UgMS4xMy4wCi0gICAg
Ki8KLQotICAgIC8qKgotICAgICAgQ2FsbGVkIGJlZm9yZSBhIGNvbXBvbmVudCBoYXMgYmVlbiBy
ZW5kZXJlZCwgYm90aCBvbiBpbml0aWFsIHJlbmRlciBhbmQKLSAgICAgIGluIHN1YnNlcXVlbnQg
cmVyZW5kZXJzLgotICAgICAgIEBtZXRob2Qgd2lsbFJlbmRlcgotICAgICAgQHB1YmxpYwotICAg
ICAgQHNpbmNlIDEuMTMuMAotICAgICovCi0KLSAgICAvKioKLSAgICAgIENhbGxlZCBiZWZvcmUg
YSBjb21wb25lbnQgaGFzIGJlZW4gcmVuZGVyZWQsIGJvdGggb24gaW5pdGlhbCByZW5kZXIgYW5k
Ci0gICAgICBpbiBzdWJzZXF1ZW50IHJlcmVuZGVycy4KLSAgICAgICBAZXZlbnQgd2lsbFJlbmRl
cgotICAgICAgQHB1YmxpYwotICAgICAgQHNpbmNlIDEuMTMuMAotICAgICovCi0KLSAgICAvKioK
LSAgICAgIENhbGxlZCB3aGVuIHRoZSBhdHRyaWJ1dGVzIHBhc3NlZCBpbnRvIHRoZSBjb21wb25l
bnQgaGF2ZSBiZWVuIGNoYW5nZWQuCi0gICAgICBDYWxsZWQgb25seSBkdXJpbmcgYSByZXJlbmRl
ciwgbm90IGR1cmluZyBhbiBpbml0aWFsIHJlbmRlci4KLSAgICAgICBAbWV0aG9kIGRpZFVwZGF0
ZUF0dHJzCi0gICAgICBAcHVibGljCi0gICAgICBAc2luY2UgMS4xMy4wCi0gICAgKi8KLQotICAg
IC8qKgotICAgICAgQ2FsbGVkIHdoZW4gdGhlIGF0dHJpYnV0ZXMgcGFzc2VkIGludG8gdGhlIGNv
bXBvbmVudCBoYXZlIGJlZW4gY2hhbmdlZC4KLSAgICAgIENhbGxlZCBvbmx5IGR1cmluZyBhIHJl
cmVuZGVyLCBub3QgZHVyaW5nIGFuIGluaXRpYWwgcmVuZGVyLgotICAgICAgIEBldmVudCBkaWRV
cGRhdGVBdHRycwotICAgICAgQHB1YmxpYwotICAgICAgQHNpbmNlIDEuMTMuMAotICAgICovCi0K
LSAgICAvKioKLSAgICAgIENhbGxlZCB3aGVuIHRoZSBjb21wb25lbnQgaXMgYWJvdXQgdG8gdXBk
YXRlIGFuZCByZXJlbmRlciBpdHNlbGYuCi0gICAgICBDYWxsZWQgb25seSBkdXJpbmcgYSByZXJl
bmRlciwgbm90IGR1cmluZyBhbiBpbml0aWFsIHJlbmRlci4KLSAgICAgICBAbWV0aG9kIHdpbGxV
cGRhdGUKLSAgICAgIEBwdWJsaWMKLSAgICAgIEBzaW5jZSAxLjEzLjAKLSAgICAqLwotCi0gICAg
LyoqCi0gICAgICBDYWxsZWQgd2hlbiB0aGUgY29tcG9uZW50IGlzIGFib3V0IHRvIHVwZGF0ZSBh
bmQgcmVyZW5kZXIgaXRzZWxmLgotICAgICAgQ2FsbGVkIG9ubHkgZHVyaW5nIGEgcmVyZW5kZXIs
IG5vdCBkdXJpbmcgYW4gaW5pdGlhbCByZW5kZXIuCi0gICAgICAgQGV2ZW50IHdpbGxVcGRhdGUK
LSAgICAgIEBwdWJsaWMKLSAgICAgIEBzaW5jZSAxLjEzLjAKLSAgICAqLwotCi0gICAgLyoqCi0g
ICAgICBDYWxsZWQgd2hlbiB0aGUgY29tcG9uZW50IGhhcyB1cGRhdGVkIGFuZCByZXJlbmRlcmVk
IGl0c2VsZi4KLSAgICAgIENhbGxlZCBvbmx5IGR1cmluZyBhIHJlcmVuZGVyLCBub3QgZHVyaW5n
IGFuIGluaXRpYWwgcmVuZGVyLgotICAgICAgIEBldmVudCBkaWRVcGRhdGUKLSAgICAgIEBwdWJs
aWMKLSAgICAgIEBzaW5jZSAxLjEzLjAKLSAgICAqLwotCi0gICAgLyoqCi0gICAgICBDYWxsZWQg
d2hlbiB0aGUgY29tcG9uZW50IGhhcyB1cGRhdGVkIGFuZCByZXJlbmRlcmVkIGl0c2VsZi4KLSAg
ICAgIENhbGxlZCBvbmx5IGR1cmluZyBhIHJlcmVuZGVyLCBub3QgZHVyaW5nIGFuIGluaXRpYWwg
cmVuZGVyLgotICAgICAgIEBldmVudCBkaWRVcGRhdGUKLSAgICAgIEBwdWJsaWMKLSAgICAgIEBz
aW5jZSAxLjEzLjAKLSAgICAqLwotICB9KTsKLQotICBDb21wb25lbnQucmVvcGVuQ2xhc3Moewot
ICAgIGlzQ29tcG9uZW50RmFjdG9yeTogdHJ1ZQotICB9KTsKLQotICBleHBvcnRzLmRlZmF1bHQg
PSBDb21wb25lbnQ7Ci19KTsKLWVuaWZlZCgnZW1iZXItdmlld3MvaW5kZXgnLCBbJ2V4cG9ydHMn
LCAnZW1iZXItcnVudGltZScsICdlbWJlci12aWV3cy9zeXN0ZW0vanF1ZXJ5JywgJ2VtYmVyLXZp
ZXdzL3N5c3RlbS91dGlscycsICdlbWJlci12aWV3cy9zeXN0ZW0vZXh0JywgJ2VtYmVyLW1ldGFs
LXZpZXdzJywgJ2VtYmVyLXZpZXdzL2NvbXBvbmVudHMvY29tcG9uZW50JywgJ2VtYmVyLXZpZXdz
L3N5c3RlbS9ldmVudF9kaXNwYXRjaGVyJywgJ2VtYmVyLXZpZXdzL21peGlucy92aWV3X3Rhcmdl
dF9hY3Rpb25fc3VwcG9ydCcsICdlbWJlci12aWV3cy9jb21wb25lbnRfbG9va3VwJywgJ2VtYmVy
LXZpZXdzL3ZpZXdzL2NoZWNrYm94JywgJ2VtYmVyLXZpZXdzL21peGlucy90ZXh0X3N1cHBvcnQn
LCAnZW1iZXItdmlld3Mvdmlld3MvdGV4dF9maWVsZCcsICdlbWJlci12aWV3cy92aWV3cy90ZXh0
X2FyZWEnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlclJ1bnRpbWUsIF9lbWJlclZpZXdzU3lz
dGVtSnF1ZXJ5LCBfZW1iZXJWaWV3c1N5c3RlbVV0aWxzLCBfZW1iZXJWaWV3c1N5c3RlbUV4dCwg
X2VtYmVyTWV0YWxWaWV3cywgX2VtYmVyVmlld3NDb21wb25lbnRzQ29tcG9uZW50LCBfZW1iZXJW
aWV3c1N5c3RlbUV2ZW50X2Rpc3BhdGNoZXIsIF9lbWJlclZpZXdzTWl4aW5zVmlld190YXJnZXRf
YWN0aW9uX3N1cHBvcnQsIF9lbWJlclZpZXdzQ29tcG9uZW50X2xvb2t1cCwgX2VtYmVyVmlld3NW
aWV3c0NoZWNrYm94LCBfZW1iZXJWaWV3c01peGluc1RleHRfc3VwcG9ydCwgX2VtYmVyVmlld3NW
aWV3c1RleHRfZmllbGQsIF9lbWJlclZpZXdzVmlld3NUZXh0X2FyZWEpIHsKLSAgLyoqCi0gIEBt
b2R1bGUgZW1iZXIKLSAgQHN1Ym1vZHVsZSBlbWJlci12aWV3cwotICAqLwotCi0gIC8vIEJFR0lO
IElNUE9SVFMKLSAgJ3VzZSBzdHJpY3QnOwotCi0gIC8vIEVORCBJTVBPUlRTCi0KLSAgLyoqCi0g
ICAgQWxpYXMgZm9yIGpRdWVyeQotICAKLSAgICBAbWV0aG9kICQKLSAgICBAZm9yIEVtYmVyCi0g
ICBAcHVibGljCi0gICovCi0KLSAgLy8gQkVHSU4gRVhQT1JUUwotICBfZW1iZXJSdW50aW1lLmRl
ZmF1bHQuJCA9IF9lbWJlclZpZXdzU3lzdGVtSnF1ZXJ5LmRlZmF1bHQ7Ci0KLSAgX2VtYmVyUnVu
dGltZS5kZWZhdWx0LlZpZXdUYXJnZXRBY3Rpb25TdXBwb3J0ID0gX2VtYmVyVmlld3NNaXhpbnNW
aWV3X3RhcmdldF9hY3Rpb25fc3VwcG9ydC5kZWZhdWx0OwotCi0gIHZhciBWaWV3VXRpbHMgPSBf
ZW1iZXJSdW50aW1lLmRlZmF1bHQuVmlld1V0aWxzID0ge307Ci0gIFZpZXdVdGlscy5pc1NpbXBs
ZUNsaWNrID0gX2VtYmVyVmlld3NTeXN0ZW1VdGlscy5pc1NpbXBsZUNsaWNrOwotICBWaWV3VXRp
bHMuZ2V0Vmlld0NsaWVudFJlY3RzID0gX2VtYmVyVmlld3NTeXN0ZW1VdGlscy5nZXRWaWV3Q2xp
ZW50UmVjdHM7Ci0gIFZpZXdVdGlscy5nZXRWaWV3Qm91bmRpbmdDbGllbnRSZWN0ID0gX2VtYmVy
Vmlld3NTeXN0ZW1VdGlscy5nZXRWaWV3Qm91bmRpbmdDbGllbnRSZWN0OwotCi0gIF9lbWJlclJ1
bnRpbWUuZGVmYXVsdC5fUmVuZGVyZXIgPSBfZW1iZXJNZXRhbFZpZXdzLlJlbmRlcmVyOwotCi0g
IF9lbWJlclJ1bnRpbWUuZGVmYXVsdC5DaGVja2JveCA9IF9lbWJlclZpZXdzVmlld3NDaGVja2Jv
eC5kZWZhdWx0OwotICBfZW1iZXJSdW50aW1lLmRlZmF1bHQuVGV4dEZpZWxkID0gX2VtYmVyVmll
d3NWaWV3c1RleHRfZmllbGQuZGVmYXVsdDsKLSAgX2VtYmVyUnVudGltZS5kZWZhdWx0LlRleHRB
cmVhID0gX2VtYmVyVmlld3NWaWV3c1RleHRfYXJlYS5kZWZhdWx0OwotCi0gIF9lbWJlclJ1bnRp
bWUuZGVmYXVsdC5UZXh0U3VwcG9ydCA9IF9lbWJlclZpZXdzTWl4aW5zVGV4dF9zdXBwb3J0LmRl
ZmF1bHQ7Ci0gIF9lbWJlclJ1bnRpbWUuZGVmYXVsdC5Db21wb25lbnRMb29rdXAgPSBfZW1iZXJW
aWV3c0NvbXBvbmVudF9sb29rdXAuZGVmYXVsdDsKLSAgX2VtYmVyUnVudGltZS5kZWZhdWx0LkNv
bXBvbmVudCA9IF9lbWJlclZpZXdzQ29tcG9uZW50c0NvbXBvbmVudC5kZWZhdWx0OwotICBfZW1i
ZXJSdW50aW1lLmRlZmF1bHQuRXZlbnREaXNwYXRjaGVyID0gX2VtYmVyVmlld3NTeXN0ZW1FdmVu
dF9kaXNwYXRjaGVyLmRlZmF1bHQ7Ci0KLSAgLy8gRU5EIEVYUE9SVFMKLQotICBleHBvcnRzLmRl
ZmF1bHQgPSBfZW1iZXJSdW50aW1lLmRlZmF1bHQ7Ci19KTsKLS8vIGZvciB0aGUgc2lkZSBlZmZl
Y3Qgb2YgZXh0ZW5kaW5nIEVtYmVyLnJ1bi5xdWV1ZXMKLWVuaWZlZCgnZW1iZXItdmlld3MvbWl4
aW5zL2FyaWFfcm9sZV9zdXBwb3J0JywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFsL21peGluJ10s
IGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbE1peGluKSB7Ci0gIC8qKgotICAgQG1vZHVs
ZSBlbWJlcgotICAgQHN1Ym1vZHVsZSBlbWJlci12aWV3cwotICAqLwotCi0gICd1c2Ugc3RyaWN0
JzsKLQotICAvKioKLSAgIEBjbGFzcyBBcmlhUm9sZVN1cHBvcnQKLSAgIEBuYW1lc3BhY2UgRW1i
ZXIKLSAgIEBwcml2YXRlCi0gICovCi0gIGV4cG9ydHMuZGVmYXVsdCA9IF9lbWJlck1ldGFsTWl4
aW4uTWl4aW4uY3JlYXRlKHsKLSAgICBhdHRyaWJ1dGVCaW5kaW5nczogWydhcmlhUm9sZTpyb2xl
J10sCi0KLSAgICAvKioKLSAgICAgVGhlIFdBSS1BUklBIHJvbGUgb2YgdGhlIGNvbnRyb2wgcmVw
cmVzZW50ZWQgYnkgdGhpcyB2aWV3LiBGb3IgZXhhbXBsZSwgYQotICAgICBidXR0b24gbWF5IGhh
dmUgYSByb2xlIG9mIHR5cGUgJ2J1dHRvbicsIG9yIGEgcGFuZSBtYXkgaGF2ZSBhIHJvbGUgb2YK
LSAgICAgdHlwZSAnYWxlcnRkaWFsb2cnLiBUaGlzIHByb3BlcnR5IGlzIHVzZWQgYnkgYXNzaXN0
aXZlIHNvZnR3YXJlIHRvIGhlbHAKLSAgICAgdmlzdWFsbHkgY2hhbGxlbmdlZCB1c2VycyBuYXZp
Z2F0ZSByaWNoIHdlYiBhcHBsaWNhdGlvbnMuCi0gICAgICBUaGUgZnVsbCBsaXN0IG9mIHZhbGlk
IFdBSS1BUklBIHJvbGVzIGlzIGF2YWlsYWJsZSBhdDoKLSAgICAgW2h0dHA6Ly93d3cudzMub3Jn
L1RSL3dhaS1hcmlhL3JvbGVzI3JvbGVzX2NhdGVnb3JpemF0aW9uXShodHRwOi8vd3d3LnczLm9y
Zy9UUi93YWktYXJpYS9yb2xlcyNyb2xlc19jYXRlZ29yaXphdGlvbikKLSAgICAgIEBwcm9wZXJ0
eSBhcmlhUm9sZQotICAgICBAdHlwZSBTdHJpbmcKLSAgICAgQGRlZmF1bHQgbnVsbAotICAgICBA
cHVibGljCi0gICAgKi8KLSAgICBhcmlhUm9sZTogbnVsbAotICB9KTsKLX0pOwotZW5pZmVkKCdl
bWJlci12aWV3cy9taXhpbnMvY2xhc3NfbmFtZXNfc3VwcG9ydCcsIFsnZXhwb3J0cycsICdlbWJl
ci1tZXRhbC9kZWJ1ZycsICdlbWJlci1tZXRhbC9taXhpbicsICdlbWJlci1ydW50aW1lL3N5c3Rl
bS9uYXRpdmVfYXJyYXknXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1ldGFsRGVidWcsIF9l
bWJlck1ldGFsTWl4aW4sIF9lbWJlclJ1bnRpbWVTeXN0ZW1OYXRpdmVfYXJyYXkpIHsKLSAgLyoq
Ci0gIEBtb2R1bGUgZW1iZXIKLSAgQHN1Ym1vZHVsZSBlbWJlci12aWV3cwotICAqLwotICAndXNl
IHN0cmljdCc7Ci0KLSAgdmFyIEVNUFRZX0FSUkFZID0gW107Ci0KLSAgLyoqCi0gICAgQGNsYXNz
IENsYXNzTmFtZXNTdXBwb3J0Ci0gICAgQG5hbWVzcGFjZSBFbWJlcgotICAgIEBwcml2YXRlCi0g
ICovCi0gIGV4cG9ydHMuZGVmYXVsdCA9IF9lbWJlck1ldGFsTWl4aW4uTWl4aW4uY3JlYXRlKHsK
LSAgICBjb25jYXRlbmF0ZWRQcm9wZXJ0aWVzOiBbJ2NsYXNzTmFtZXMnLCAnY2xhc3NOYW1lQmlu
ZGluZ3MnXSwKLQotICAgIGluaXQ6IGZ1bmN0aW9uICgpIHsKLSAgICAgIHRoaXMuX3N1cGVyLmFw
cGx5KHRoaXMsIGFyZ3VtZW50cyk7Ci0KLSAgICAgIF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0KCdP
bmx5IGFycmF5cyBhcmUgYWxsb3dlZCBmb3IgXCdjbGFzc05hbWVCaW5kaW5nc1wnJywgQXJyYXku
aXNBcnJheSh0aGlzLmNsYXNzTmFtZUJpbmRpbmdzKSk7Ci0gICAgICB0aGlzLmNsYXNzTmFtZUJp
bmRpbmdzID0gX2VtYmVyUnVudGltZVN5c3RlbU5hdGl2ZV9hcnJheS5BKHRoaXMuY2xhc3NOYW1l
QmluZGluZ3Muc2xpY2UoKSk7Ci0KLSAgICAgIF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0KCdPbmx5
IGFycmF5cyBvZiBzdGF0aWMgY2xhc3Mgc3RyaW5ncyBhcmUgYWxsb3dlZCBmb3IgXCdjbGFzc05h
bWVzXCcuIEZvciBkeW5hbWljIGNsYXNzZXMsIHVzZSBcJ2NsYXNzTmFtZUJpbmRpbmdzXCcuJywg
QXJyYXkuaXNBcnJheSh0aGlzLmNsYXNzTmFtZXMpKTsKLSAgICAgIHRoaXMuY2xhc3NOYW1lcyA9
IF9lbWJlclJ1bnRpbWVTeXN0ZW1OYXRpdmVfYXJyYXkuQSh0aGlzLmNsYXNzTmFtZXMuc2xpY2Uo
KSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAgU3RhbmRhcmQgQ1NTIGNsYXNzIG5hbWVzIHRv
IGFwcGx5IHRvIHRoZSB2aWV3J3Mgb3V0ZXIgZWxlbWVudC4gVGhpcwotICAgICAgcHJvcGVydHkg
YXV0b21hdGljYWxseSBpbmhlcml0cyBhbnkgY2xhc3MgbmFtZXMgZGVmaW5lZCBieSB0aGUgdmll
dydzCi0gICAgICBzdXBlcmNsYXNzZXMgYXMgd2VsbC4KLSAgICAgICBAcHJvcGVydHkgY2xhc3NO
YW1lcwotICAgICAgQHR5cGUgQXJyYXkKLSAgICAgIEBkZWZhdWx0IFsnZW1iZXItdmlldyddCi0g
ICAgICBAcHVibGljCi0gICAgKi8KLSAgICBjbGFzc05hbWVzOiBbJ2VtYmVyLXZpZXcnXSwKLQot
ICAgIC8qKgotICAgICAgQSBsaXN0IG9mIHByb3BlcnRpZXMgb2YgdGhlIHZpZXcgdG8gYXBwbHkg
YXMgY2xhc3MgbmFtZXMuIElmIHRoZSBwcm9wZXJ0eQotICAgICAgaXMgYSBzdHJpbmcgdmFsdWUs
IHRoZSB2YWx1ZSBvZiB0aGF0IHN0cmluZyB3aWxsIGJlIGFwcGxpZWQgYXMgYSBjbGFzcwotICAg
ICAgbmFtZS4KLSAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICAvLyBBcHBsaWVzIHRoZSAnaGln
aCcgY2xhc3MgdG8gdGhlIHZpZXcgZWxlbWVudAotICAgICAgRW1iZXIuVmlldy5leHRlbmQoewot
ICAgICAgICBjbGFzc05hbWVCaW5kaW5nczogWydwcmlvcml0eSddLAotICAgICAgICBwcmlvcml0
eTogJ2hpZ2gnCi0gICAgICB9KTsKLSAgICAgIGBgYAotICAgICAgIElmIHRoZSB2YWx1ZSBvZiB0
aGUgcHJvcGVydHkgaXMgYSBCb29sZWFuLCB0aGUgbmFtZSBvZiB0aGF0IHByb3BlcnR5IGlzCi0g
ICAgICBhZGRlZCBhcyBhIGRhc2hlcml6ZWQgY2xhc3MgbmFtZS4KLSAgICAgICBgYGBqYXZhc2Ny
aXB0Ci0gICAgICAvLyBBcHBsaWVzIHRoZSAnaXMtdXJnZW50JyBjbGFzcyB0byB0aGUgdmlldyBl
bGVtZW50Ci0gICAgICBFbWJlci5WaWV3LmV4dGVuZCh7Ci0gICAgICAgIGNsYXNzTmFtZUJpbmRp
bmdzOiBbJ2lzVXJnZW50J10sCi0gICAgICAgIGlzVXJnZW50OiB0cnVlCi0gICAgICB9KTsKLSAg
ICAgIGBgYAotICAgICAgIElmIHlvdSB3b3VsZCBwcmVmZXIgdG8gdXNlIGEgY3VzdG9tIHZhbHVl
IGluc3RlYWQgb2YgdGhlIGRhc2hlcml6ZWQKLSAgICAgIHByb3BlcnR5IG5hbWUsIHlvdSBjYW4g
cGFzcyBhIGJpbmRpbmcgbGlrZSB0aGlzOgotICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgIC8v
IEFwcGxpZXMgdGhlICd1cmdlbnQnIGNsYXNzIHRvIHRoZSB2aWV3IGVsZW1lbnQKLSAgICAgIEVt
YmVyLlZpZXcuZXh0ZW5kKHsKLSAgICAgICAgY2xhc3NOYW1lQmluZGluZ3M6IFsnaXNVcmdlbnQ6
dXJnZW50J10sCi0gICAgICAgIGlzVXJnZW50OiB0cnVlCi0gICAgICB9KTsKLSAgICAgIGBgYAot
ICAgICAgIFRoaXMgbGlzdCBvZiBwcm9wZXJ0aWVzIGlzIGluaGVyaXRlZCBmcm9tIHRoZSB2aWV3
J3Mgc3VwZXJjbGFzc2VzIGFzIHdlbGwuCi0gICAgICAgQHByb3BlcnR5IGNsYXNzTmFtZUJpbmRp
bmdzCi0gICAgICBAdHlwZSBBcnJheQotICAgICAgQGRlZmF1bHQgW10KLSAgICAgIEBwdWJsaWMK
LSAgICAqLwotICAgIGNsYXNzTmFtZUJpbmRpbmdzOiBFTVBUWV9BUlJBWQotICB9KTsKLX0pOwot
ZW5pZmVkKCdlbWJlci12aWV3cy9taXhpbnMvaW5zdHJ1bWVudGF0aW9uX3N1cHBvcnQnLCBbJ2V4
cG9ydHMnLCAnZW1iZXItbWV0YWwvbWl4aW4nLCAnZW1iZXItbWV0YWwvcHJvcGVydHlfZ2V0J10s
IGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbE1peGluLCBfZW1iZXJNZXRhbFByb3BlcnR5
X2dldCkgewotICAvKioKLSAgQG1vZHVsZSBlbWJlcgotICBAc3VibW9kdWxlIGVtYmVyLXZpZXdz
Ci0gICovCi0gICd1c2Ugc3RyaWN0JzsKLQotICAvKioKLSAgICBAY2xhc3MgSW5zdHJ1bWVudGF0
aW9uU3VwcG9ydAotICAgIEBuYW1lc3BhY2UgRW1iZXIKLSAgICBAcHVibGljCi0gICovCi0gIHZh
ciBJbnN0cnVtZW50YXRpb25TdXBwb3J0ID0gX2VtYmVyTWV0YWxNaXhpbi5NaXhpbi5jcmVhdGUo
ewotICAgIC8qKgotICAgICAgVXNlZCB0byBpZGVudGlmeSB0aGlzIHZpZXcgZHVyaW5nIGRlYnVn
Z2luZwotICAgICAgIEBwcm9wZXJ0eSBpbnN0cnVtZW50RGlzcGxheQotICAgICAgQHR5cGUgU3Ry
aW5nCi0gICAgICBAcHVibGljCi0gICAgKi8KLSAgICBpbnN0cnVtZW50RGlzcGxheTogJycsCi0K
LSAgICBpbnN0cnVtZW50TmFtZTogJ3ZpZXcnLAotCi0gICAgaW5zdHJ1bWVudERldGFpbHM6IGZ1
bmN0aW9uIChoYXNoKSB7Ci0gICAgICBoYXNoLnRlbXBsYXRlID0gX2VtYmVyTWV0YWxQcm9wZXJ0
eV9nZXQuZ2V0KHRoaXMsICd0ZW1wbGF0ZU5hbWUnKTsKLSAgICAgIHRoaXMuX3N1cGVyKGhhc2gp
OwotICAgIH0KLSAgfSk7Ci0KLSAgZXhwb3J0cy5kZWZhdWx0ID0gSW5zdHJ1bWVudGF0aW9uU3Vw
cG9ydDsKLX0pOwotZW5pZmVkKCdlbWJlci12aWV3cy9taXhpbnMvbGVnYWN5X2NoaWxkX3ZpZXdz
X3N1cHBvcnQnLCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwvbWl4aW4nLCAnZW1iZXItbWV0YWwv
cHJvcGVydHlfZ2V0JywgJ2VtYmVyLW1ldGFsL3Byb3BlcnR5X3NldCcsICdjb250YWluZXIvb3du
ZXInXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1ldGFsTWl4aW4sIF9lbWJlck1ldGFsUHJv
cGVydHlfZ2V0LCBfZW1iZXJNZXRhbFByb3BlcnR5X3NldCwgX2NvbnRhaW5lck93bmVyKSB7Ci0g
ICd1c2Ugc3RyaWN0JzsKLQotICBleHBvcnRzLmRlZmF1bHQgPSBfZW1iZXJNZXRhbE1peGluLk1p
eGluLmNyZWF0ZSh7Ci0gICAgbGlua0NoaWxkOiBmdW5jdGlvbiAoaW5zdGFuY2UpIHsKLSAgICAg
IGlmICghaW5zdGFuY2VbX2NvbnRhaW5lck93bmVyLk9XTkVSXSkgewotICAgICAgICBfY29udGFp
bmVyT3duZXIuc2V0T3duZXIoaW5zdGFuY2UsIF9jb250YWluZXJPd25lci5nZXRPd25lcih0aGlz
KSk7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQoaW5z
dGFuY2UsICdwYXJlbnRWaWV3JykgIT09IHRoaXMpIHsKLSAgICAgICAgLy8gbGlua0NoaWxkIHNo
b3VsZCBiZSBpZGVtcG90ZW50Ci0gICAgICAgIF9lbWJlck1ldGFsUHJvcGVydHlfc2V0LnNldChp
bnN0YW5jZSwgJ3BhcmVudFZpZXcnLCB0aGlzKTsKLSAgICAgICAgaW5zdGFuY2UudHJpZ2dlcign
cGFyZW50Vmlld0RpZENoYW5nZScpOwotICAgICAgfQotICAgICAgaW5zdGFuY2Uub3duZXJWaWV3
ID0gdGhpcy5vd25lclZpZXc7Ci0gICAgfSwKLQotICAgIHVubGlua0NoaWxkOiBmdW5jdGlvbiAo
aW5zdGFuY2UpIHsKLSAgICAgIF9lbWJlck1ldGFsUHJvcGVydHlfc2V0LnNldChpbnN0YW5jZSwg
J3BhcmVudFZpZXcnLCBudWxsKTsKLSAgICAgIGluc3RhbmNlLnRyaWdnZXIoJ3BhcmVudFZpZXdE
aWRDaGFuZ2UnKTsKLSAgICB9Ci0gIH0pOwotfSk7Ci1lbmlmZWQoJ2VtYmVyLXZpZXdzL21peGlu
cy9sZWdhY3lfdmlld19zdXBwb3J0JywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFsL2RlYnVnJywg
J2VtYmVyLW1ldGFsL21peGluJywgJ2VtYmVyLW1ldGFsL3Byb3BlcnR5X2dldCddLCBmdW5jdGlv
biAoZXhwb3J0cywgX2VtYmVyTWV0YWxEZWJ1ZywgX2VtYmVyTWV0YWxNaXhpbiwgX2VtYmVyTWV0
YWxQcm9wZXJ0eV9nZXQpIHsKLSAgLyoqCi0gIEBtb2R1bGUgZW1iZXIKLSAgQHN1Ym1vZHVsZSBl
bWJlci12aWV3cwotICAqLwotICAndXNlIHN0cmljdCc7Ci0KLSAgLyoqCi0gICAgQGNsYXNzIExl
Z2FjeVZpZXdTdXBwb3J0Ci0gICAgQG5hbWVzcGFjZSBFbWJlcgotICAgIEBwcml2YXRlCi0gICov
Ci0gIHZhciBMZWdhY3lWaWV3U3VwcG9ydCA9IF9lbWJlck1ldGFsTWl4aW4uTWl4aW4uY3JlYXRl
KHsKLSAgICBtdXRhdGVDaGlsZFZpZXdzOiBmdW5jdGlvbiAoY2FsbGJhY2spIHsKLSAgICAgIHZh
ciBjaGlsZFZpZXdzID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsICdjaGlsZFZp
ZXdzJyk7Ci0gICAgICB2YXIgaWR4ID0gY2hpbGRWaWV3cy5sZW5ndGg7Ci0gICAgICB2YXIgdmll
dzsKLQotICAgICAgd2hpbGUgKC0taWR4ID49IDApIHsKLSAgICAgICAgdmlldyA9IGNoaWxkVmll
d3NbaWR4XTsKLSAgICAgICAgY2FsbGJhY2sodGhpcywgdmlldywgaWR4KTsKLSAgICAgIH0KLQot
ICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAgUmVtb3ZlcyBhbGwg
Y2hpbGRyZW4gZnJvbSB0aGUgYHBhcmVudFZpZXdgLgotICAgICAgIEBtZXRob2QgcmVtb3ZlQWxs
Q2hpbGRyZW4KLSAgICAgIEByZXR1cm4ge0VtYmVyLlZpZXd9IHJlY2VpdmVyCi0gICAgICBAcHJp
dmF0ZQotICAgICovCi0gICAgcmVtb3ZlQWxsQ2hpbGRyZW46IGZ1bmN0aW9uICgpIHsKLSAgICAg
IHJldHVybiB0aGlzLm11dGF0ZUNoaWxkVmlld3MoZnVuY3Rpb24gKHBhcmVudFZpZXcsIHZpZXcp
IHsKLSAgICAgICAgcGFyZW50Vmlldy5yZW1vdmVDaGlsZCh2aWV3KTsKLSAgICAgIH0pOwotICAg
IH0sCi0KLSAgICBkZXN0cm95QWxsQ2hpbGRyZW46IGZ1bmN0aW9uICgpIHsKLSAgICAgIHJldHVy
biB0aGlzLm11dGF0ZUNoaWxkVmlld3MoZnVuY3Rpb24gKHBhcmVudFZpZXcsIHZpZXcpIHsKLSAg
ICAgICAgdmlldy5kZXN0cm95KCk7Ci0gICAgICB9KTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAg
ICBSZXR1cm4gdGhlIG5lYXJlc3QgYW5jZXN0b3Igd2hvc2UgcGFyZW50IGlzIGFuIGluc3RhbmNl
IG9mCi0gICAgICBga2xhc3NgLgotICAgICAgIEBtZXRob2QgbmVhcmVzdENoaWxkT2YKLSAgICAg
IEBwYXJhbSB7Q2xhc3N9IGtsYXNzIFN1YmNsYXNzIG9mIEVtYmVyLlZpZXcgKG9yIEVtYmVyLlZp
ZXcgaXRzZWxmKQotICAgICAgQHJldHVybiBFbWJlci5WaWV3Ci0gICAgICBAZGVwcmVjYXRlZAot
ICAgICAgQHByaXZhdGUKLSAgICAqLwotICAgIG5lYXJlc3RDaGlsZE9mOiBmdW5jdGlvbiAoa2xh
c3MpIHsKLSAgICAgIF9lbWJlck1ldGFsRGVidWcuZGVwcmVjYXRlKCduZWFyZXN0Q2hpbGRPZiBo
YXMgYmVlbiBkZXByZWNhdGVkLicsIGZhbHNlLCB7IGlkOiAnZW1iZXItdmlld3MubmVhcmVzdC1j
aGlsZC1vZicsIHVudGlsOiAnMy4wLjAnIH0pOwotCi0gICAgICB2YXIgdmlldyA9IF9lbWJlck1l
dGFsUHJvcGVydHlfZ2V0LmdldCh0aGlzLCAncGFyZW50VmlldycpOwotCi0gICAgICB3aGlsZSAo
dmlldykgewotICAgICAgICBpZiAoX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHZpZXcsICdw
YXJlbnRWaWV3JykgaW5zdGFuY2VvZiBrbGFzcykgewotICAgICAgICAgIHJldHVybiB2aWV3Owot
ICAgICAgICB9Ci0gICAgICAgIHZpZXcgPSBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodmll
dywgJ3BhcmVudFZpZXcnKTsKLSAgICAgIH0KLSAgICB9LAotCi0gICAgLyoqCi0gICAgICBSZXR1
cm4gdGhlIG5lYXJlc3QgYW5jZXN0b3IgdGhhdCBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgcHJvdmlk
ZWQKLSAgICAgIGNsYXNzLgotICAgICAgIEBtZXRob2QgbmVhcmVzdEluc3RhbmNlT2YKLSAgICAg
IEBwYXJhbSB7Q2xhc3N9IGtsYXNzIFN1YmNsYXNzIG9mIEVtYmVyLlZpZXcgKG9yIEVtYmVyLlZp
ZXcgaXRzZWxmKQotICAgICAgQHJldHVybiBFbWJlci5WaWV3Ci0gICAgICBAZGVwcmVjYXRlZAot
ICAgICAgQHByaXZhdGUKLSAgICAqLwotICAgIG5lYXJlc3RJbnN0YW5jZU9mOiBmdW5jdGlvbiAo
a2xhc3MpIHsKLSAgICAgIF9lbWJlck1ldGFsRGVidWcuZGVwcmVjYXRlKCduZWFyZXN0SW5zdGFu
Y2VPZiBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgZnJvbSBmdXR1cmUgcmVsZWFz
ZXMuIFVzZSBuZWFyZXN0T2ZUeXBlLicsIGZhbHNlLCB7IGlkOiAnZW1iZXItdmlld3MubmVhcmVz
dC1pbnN0YW5jZS1vZicsIHVudGlsOiAnMy4wLjAnIH0pOwotCi0gICAgICB2YXIgdmlldyA9IF9l
bWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0aGlzLCAncGFyZW50VmlldycpOwotCi0gICAgICB3
aGlsZSAodmlldykgewotICAgICAgICBpZiAodmlldyBpbnN0YW5jZW9mIGtsYXNzKSB7Ci0gICAg
ICAgICAgcmV0dXJuIHZpZXc7Ci0gICAgICAgIH0KLSAgICAgICAgdmlldyA9IF9lbWJlck1ldGFs
UHJvcGVydHlfZ2V0LmdldCh2aWV3LCAncGFyZW50VmlldycpOwotICAgICAgfQotICAgIH0sCi0K
LSAgICAvKioKLSAgICAgIElmIGEgdmFsdWUgdGhhdCBhZmZlY3RzIHRlbXBsYXRlIHJlbmRlcmlu
ZyBjaGFuZ2VzLCB0aGUgdmlldyBzaG91bGQgYmUKLSAgICAgIHJlLXJlbmRlcmVkIHRvIHJlZmxl
Y3QgdGhlIG5ldyB2YWx1ZS4KLSAgICAgICBAbWV0aG9kIF9jb250ZXh0RGlkQ2hhbmdlCi0gICAg
ICBAcHJpdmF0ZQotICAgICAgQHByaXZhdGUKLSAgICAqLwotICAgIF9jb250ZXh0RGlkQ2hhbmdl
OiBfZW1iZXJNZXRhbE1peGluLm9ic2VydmVyKCdjb250ZXh0JywgZnVuY3Rpb24gKCkgewotICAg
ICAgdGhpcy5yZXJlbmRlcigpOwotICAgIH0pCi0gIH0pOwotCi0gIGV4cG9ydHMuZGVmYXVsdCA9
IExlZ2FjeVZpZXdTdXBwb3J0OwotfSk7Ci1lbmlmZWQoJ2VtYmVyLXZpZXdzL21peGlucy90ZW1w
bGF0ZV9yZW5kZXJpbmdfc3VwcG9ydCcsIFsnZXhwb3J0cycsICdlbWJlci1tZXRhbC9taXhpbidd
LCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0YWxNaXhpbikgewotICAvKioKLSAgQG1vZHVs
ZSBlbWJlcgotICBAc3VibW9kdWxlIGVtYmVyLXZpZXdzCi0gICovCi0gICd1c2Ugc3RyaWN0JzsK
LQotICAvLyBDaXJjdWxhciBkZXAKLSAgdmFyIF9yZW5kZXJWaWV3OwotCi0gIC8qKgotICAgIEBj
bGFzcyBUZW1wbGF0ZVJlbmRlcmluZ1N1cHBvcnQKLSAgICBAbmFtZXNwYWNlIEVtYmVyCi0gICAg
QHByaXZhdGUKLSAgKi8KLSAgdmFyIFRlbXBsYXRlUmVuZGVyaW5nU3VwcG9ydCA9IF9lbWJlck1l
dGFsTWl4aW4uTWl4aW4uY3JlYXRlKHsKLSAgICAvKioKLSAgICAgIENhbGxlZCBvbiB5b3VyIHZp
ZXcgd2hlbiBpdCBzaG91bGQgcHVzaCBzdHJpbmdzIG9mIEhUTUwgaW50byBhCi0gICAgICBgRW1i
ZXIuUmVuZGVyQnVmZmVyYC4gTW9zdCB1c2VycyB3aWxsIHdhbnQgdG8gb3ZlcnJpZGUgdGhlIGB0
ZW1wbGF0ZWAKLSAgICAgIG9yIGB0ZW1wbGF0ZU5hbWVgIHByb3BlcnRpZXMgaW5zdGVhZCBvZiB0
aGlzIG1ldGhvZC4KLSAgICAgICBCeSBkZWZhdWx0LCBgRW1iZXIuVmlld2Agd2lsbCBsb29rIGZv
ciBhIGZ1bmN0aW9uIGluIHRoZSBgdGVtcGxhdGVgCi0gICAgICBwcm9wZXJ0eSBhbmQgaW52b2tl
IGl0IHdpdGggdGhlIHZhbHVlIG9mIGBjb250ZXh0YC4gVGhlIHZhbHVlIG9mCi0gICAgICBgY29u
dGV4dGAgd2lsbCBiZSB0aGUgdmlldydzIGNvbnRyb2xsZXIgdW5sZXNzIHlvdSBvdmVycmlkZSBp
dC4KLSAgICAgICBAbWV0aG9kIHJlbmRlckJsb2NrCi0gICAgICBAcGFyYW0ge0VtYmVyLlJlbmRl
ckJ1ZmZlcn0gYnVmZmVyIFRoZSByZW5kZXIgYnVmZmVyCi0gICAgICBAcHJpdmF0ZQotICAgICov
Ci0KLSAgICByZW5kZXJCbG9jazogZnVuY3Rpb24gKGJsb2NrLCByZW5kZXJOb2RlKSB7Ci0gICAg
ICBpZiAoX3JlbmRlclZpZXcgPT09IHVuZGVmaW5lZCkgewotICAgICAgICBfcmVuZGVyVmlldyA9
IHJlcXVpcmUoJ2VtYmVyLWh0bWxiYXJzL3N5c3RlbS9yZW5kZXItdmlldycpOwotICAgICAgfQot
Ci0gICAgICByZXR1cm4gX3JlbmRlclZpZXcucmVuZGVySFRNTEJhcnNCbG9jayh0aGlzLCBibG9j
aywgcmVuZGVyTm9kZSk7Ci0gICAgfQotICB9KTsKLQotICBleHBvcnRzLmRlZmF1bHQgPSBUZW1w
bGF0ZVJlbmRlcmluZ1N1cHBvcnQ7Ci19KTsKLWVuaWZlZCgnZW1iZXItdmlld3MvbWl4aW5zL3Rl
eHRfc3VwcG9ydCcsIFsnZXhwb3J0cycsICdlbWJlci1tZXRhbC9wcm9wZXJ0eV9nZXQnLCAnZW1i
ZXItbWV0YWwvcHJvcGVydHlfc2V0JywgJ2VtYmVyLW1ldGFsL21peGluJywgJ2VtYmVyLXJ1bnRp
bWUvbWl4aW5zL3RhcmdldF9hY3Rpb25fc3VwcG9ydCddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2Vt
YmVyTWV0YWxQcm9wZXJ0eV9nZXQsIF9lbWJlck1ldGFsUHJvcGVydHlfc2V0LCBfZW1iZXJNZXRh
bE1peGluLCBfZW1iZXJSdW50aW1lTWl4aW5zVGFyZ2V0X2FjdGlvbl9zdXBwb3J0KSB7Ci0gIC8q
KgotICBAbW9kdWxlIGVtYmVyCi0gIEBzdWJtb2R1bGUgZW1iZXItdmlld3MKLSAgKi8KLQotICAn
dXNlIHN0cmljdCc7Ci0KLSAgdmFyIEtFWV9FVkVOVFMgPSB7Ci0gICAgMTM6ICdpbnNlcnROZXds
aW5lJywKLSAgICAyNzogJ2NhbmNlbCcKLSAgfTsKLQotICAvKioKLSAgICBgVGV4dFN1cHBvcnRg
IGlzIGEgc2hhcmVkIG1peGluIHVzZWQgYnkgYm90aCBgRW1iZXIuVGV4dEZpZWxkYCBhbmQKLSAg
ICBgRW1iZXIuVGV4dEFyZWFgLiBgVGV4dFN1cHBvcnRgIGFkZHMgYSBudW1iZXIgb2YgbWV0aG9k
cyB0aGF0IGFsbG93IHlvdSB0bwotICAgIHNwZWNpZnkgYSBjb250cm9sbGVyIGFjdGlvbiB0byBp
bnZva2Ugd2hlbiBhIGNlcnRhaW4gZXZlbnQgaXMgZmlyZWQgb24geW91cgotICAgIHRleHQgZmll
bGQgb3IgdGV4dGFyZWEuIFRoZSBzcGVjaWZlZCBjb250cm9sbGVyIGFjdGlvbiB3b3VsZCBnZXQg
dGhlIGN1cnJlbnQKLSAgICB2YWx1ZSBvZiB0aGUgZmllbGQgcGFzc2VkIGluIGFzIHRoZSBvbmx5
IGFyZ3VtZW50IHVubGVzcyB0aGUgdmFsdWUgb2YKLSAgICB0aGUgZmllbGQgaXMgZW1wdHkuIElu
IHRoYXQgY2FzZSwgdGhlIGluc3RhbmNlIG9mIHRoZSBmaWVsZCBpdHNlbGYgaXMgcGFzc2VkCi0g
ICAgaW4gYXMgdGhlIG9ubHkgYXJndW1lbnQuCi0gIAotICAgIExldCdzIHVzZSB0aGUgcHJlc3Np
bmcgb2YgdGhlIGVzY2FwZSBrZXkgYXMgYW4gZXhhbXBsZS4gSWYgeW91IHdhbnRlZCB0bwotICAg
IGludm9rZSBhIGNvbnRyb2xsZXIgYWN0aW9uIHdoZW4gYSB1c2VyIHByZXNzZXMgdGhlIGVzY2Fw
ZSBrZXkgd2hpbGUgb24geW91cgotICAgIGZpZWxkLCB5b3Ugd291bGQgdXNlIHRoZSBgZXNjYXBl
LXByZXNzYCBhdHRyaWJ1dGUgb24geW91ciBmaWVsZCBsaWtlIHNvOgotICAKLSAgICBgYGBoYW5k
bGViYXJzCi0gICAgICB7eyEgYXBwbGljYXRpb24uaGJzfX0KLSAgCi0gICAgICB7e2lucHV0IGVz
Y2FwZS1wcmVzcz0nYWxlcnRVc2VyJ319Ci0gICAgYGBgCi0gIAotICAgIGBgYGphdmFzY3JpcHQK
LSAgICAgICAgQXBwID0gRW1iZXIuQXBwbGljYXRpb24uY3JlYXRlKCk7Ci0gIAotICAgICAgICBB
cHAuQXBwbGljYXRpb25Db250cm9sbGVyID0gRW1iZXIuQ29udHJvbGxlci5leHRlbmQoewotICAg
ICAgICAgIGFjdGlvbnM6IHsKLSAgICAgICAgICAgIGFsZXJ0VXNlcjogZnVuY3Rpb24gKCBjdXJy
ZW50VmFsdWUgKSB7Ci0gICAgICAgICAgICAgIGFsZXJ0KCAnZXNjYXBlIHByZXNzZWQsIGN1cnJl
bnQgdmFsdWU6ICcgKyBjdXJyZW50VmFsdWUgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9
Ci0gICAgICAgIH0pOwotICAgIGBgYAotICAKLSAgICBUaGUgZm9sbG93aW5nIGNoYXJ0IGlzIGEg
dmlzdWFsIHJlcHJlc2VudGF0aW9uIG9mIHdoYXQgdGFrZXMgcGxhY2Ugd2hlbiB0aGUKLSAgICBl
c2NhcGUga2V5IGlzIHByZXNzZWQgaW4gdGhpcyBzY2VuYXJpbzoKLSAgCi0gICAgYGBgCi0gICAg
VGhlIFRlbXBsYXRlCi0gICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgICB8ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgIHwgZXNjYXBlLXByZXNzPSdhbGVydFVzZXIn
ICB8Ci0gICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgVGV4dFN1cHBv
cnQgTWl4aW4KLSAgICArLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICArLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgICAgICAgIHwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8IGNhbmNlbCBtZXRob2QgICAgICAgICAgICAgICAgIHwKLSAgICAg
ICAgIHwgICAgICBlc2NhcGUgYnV0dG9uIHByZXNzZWQgICAgICB8ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHwKLSAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
PiB8IGNoZWNrcyBmb3IgdGhlIGBlc2NhcGUtcHJlc3NgIHwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8IGF0dHJpYnV0ZSBhbmQgcHVsbHMgb3V0IHRoZSAgIHwK
LSAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyB8IGBhbGVydFVzZXJg
IHZhbHVlICAgICAgICAgICAgIHwKLSAgICAgICAgIHwgICAgIGFjdGlvbiBuYW1lICdhbGVydFVz
ZXInICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgICAgICAgIHwgICAg
IHNlbnQgdG8gY29udHJvbGxlcgotICAgICAgICAgdgotICAgIENvbnRyb2xsZXIKLSAgICArLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICsKLSAgICB8ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICB8ICBhY3Rpb25zOiB7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICB8ICAgICBhbGVydFVzZXI6IGZ1bmN0
aW9uKCBjdXJyZW50VmFsdWUgKXsgIHwKLSAgICB8ICAgICAgIGFsZXJ0KCAndGhlIGVzYyBrZXkg
d2FzIHByZXNzZWQhJyApIHwKLSAgICB8ICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHwKLSAgICB8ICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHwKLSAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwK
LSAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgICBg
YGAKLSAgCi0gICAgSGVyZSBhcmUgdGhlIGV2ZW50cyB0aGF0IHdlIGN1cnJlbnRseSBzdXBwb3J0
IGFsb25nIHdpdGggdGhlIG5hbWUgb2YgdGhlCi0gICAgYXR0cmlidXRlIHlvdSB3b3VsZCBuZWVk
IHRvIHVzZSBvbiB5b3VyIGZpZWxkLiBUbyByZWl0ZXJhdGUsIHlvdSB3b3VsZCB1c2UgdGhlCi0g
ICAgYXR0cmlidXRlIG5hbWUgbGlrZSBzbzoKLSAgCi0gICAgYGBgaGFuZGxlYmFycwotICAgICAg
e3tpbnB1dCBhdHRyaWJ1dGUtbmFtZT0nY29udHJvbGxlckFjdGlvbid9fQotICAgIGBgYAotICAK
LSAgICBgYGAKLSAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKLSAg
ICB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIHwKLSAgICB8IGV2ZW50ICAg
ICAgICAgICAgICB8IGF0dHJpYnV0ZSBuYW1lIHwKLSAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0r
LS0tLS0tLS0tLS0tLS0tLSsKLSAgICB8IG5ldyBsaW5lIGluc2VydGVkICB8IGluc2VydC1uZXds
aW5lIHwKLSAgICB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIHwKLSAgICB8
IGVudGVyIGtleSBwcmVzc2VkICB8IGluc2VydC1uZXdsaW5lIHwKLSAgICB8ICAgICAgICAgICAg
ICAgICAgICB8ICAgICAgICAgICAgICAgIHwKLSAgICB8IGNhbmNlbCBrZXkgcHJlc3NlZCB8IGVz
Y2FwZS1wcmVzcyAgIHwKLSAgICB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAg
IHwKLSAgICB8IGZvY3VzaW4gICAgICAgICAgICB8IGZvY3VzLWluICAgICAgIHwKLSAgICB8ICAg
ICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIHwKLSAgICB8IGZvY3Vzb3V0ICAgICAg
ICAgICB8IGZvY3VzLW91dCAgICAgIHwKLSAgICB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAg
ICAgICAgICAgIHwKLSAgICB8IGtleXByZXNzICAgICAgICAgICB8IGtleS1wcmVzcyAgICAgIHwK
LSAgICB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIHwKLSAgICB8IGtleXVw
ICAgICAgICAgICAgICB8IGtleS11cCAgICAgICAgIHwKLSAgICB8ICAgICAgICAgICAgICAgICAg
ICB8ICAgICAgICAgICAgICAgIHwKLSAgICB8IGtleWRvd24gICAgICAgICAgICB8IGtleS1kb3du
ICAgICAgIHwKLSAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKLSAg
ICBgYGAKLSAgCi0gICAgQGNsYXNzIFRleHRTdXBwb3J0Ci0gICAgQG5hbWVzcGFjZSBFbWJlcgot
ICAgIEB1c2VzIEVtYmVyLlRhcmdldEFjdGlvblN1cHBvcnQKLSAgICBAZXh0ZW5kcyBFbWJlci5N
aXhpbgotICAgIEBwcml2YXRlCi0gICovCi0gIHZhciBUZXh0U3VwcG9ydCA9IF9lbWJlck1ldGFs
TWl4aW4uTWl4aW4uY3JlYXRlKF9lbWJlclJ1bnRpbWVNaXhpbnNUYXJnZXRfYWN0aW9uX3N1cHBv
cnQuZGVmYXVsdCwgewotICAgIHZhbHVlOiAnJywKLQotICAgIGF0dHJpYnV0ZUJpbmRpbmdzOiBb
J2F1dG9jYXBpdGFsaXplJywgJ2F1dG9jb3JyZWN0JywgJ2F1dG9mb2N1cycsICdkaXNhYmxlZCcs
ICdmb3JtJywgJ21heGxlbmd0aCcsICdwbGFjZWhvbGRlcicsICdyZWFkb25seScsICdyZXF1aXJl
ZCcsICdzZWxlY3Rpb25EaXJlY3Rpb24nLCAnc3BlbGxjaGVjaycsICd0YWJpbmRleCcsICd0aXRs
ZSddLAotICAgIHBsYWNlaG9sZGVyOiBudWxsLAotICAgIGRpc2FibGVkOiBmYWxzZSwKLSAgICBt
YXhsZW5ndGg6IG51bGwsCi0KLSAgICBpbml0OiBmdW5jdGlvbiAoKSB7Ci0gICAgICB0aGlzLl9z
dXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwotICAgICAgdGhpcy5vbigncGFzdGUnLCB0aGlz
LCB0aGlzLl9lbGVtZW50VmFsdWVEaWRDaGFuZ2UpOwotICAgICAgdGhpcy5vbignY3V0JywgdGhp
cywgdGhpcy5fZWxlbWVudFZhbHVlRGlkQ2hhbmdlKTsKLSAgICAgIHRoaXMub24oJ2lucHV0Jywg
dGhpcywgdGhpcy5fZWxlbWVudFZhbHVlRGlkQ2hhbmdlKTsKLSAgICB9LAotCi0gICAgLyoqCi0g
ICAgICBUaGUgYWN0aW9uIHRvIGJlIHNlbnQgd2hlbiB0aGUgdXNlciBwcmVzc2VzIHRoZSByZXR1
cm4ga2V5LgotICAgICAgIFRoaXMgaXMgc2ltaWxhciB0byB0aGUgYHt7YWN0aW9ufX1gIGhlbHBl
ciwgYnV0IGlzIGZpcmVkIHdoZW4KLSAgICAgIHRoZSB1c2VyIHByZXNzZXMgdGhlIHJldHVybiBr
ZXkgd2hlbiBlZGl0aW5nIGEgdGV4dCBmaWVsZCwgYW5kIHNlbmRzCi0gICAgICB0aGUgdmFsdWUg
b2YgdGhlIGZpZWxkIGFzIHRoZSBjb250ZXh0LgotICAgICAgIEBwcm9wZXJ0eSBhY3Rpb24KLSAg
ICAgIEB0eXBlIFN0cmluZwotICAgICAgQGRlZmF1bHQgbnVsbAotICAgICAgQHByaXZhdGUKLSAg
ICAqLwotICAgIGFjdGlvbjogbnVsbCwKLQotICAgIC8qKgotICAgICAgVGhlIGV2ZW50IHRoYXQg
c2hvdWxkIHNlbmQgdGhlIGFjdGlvbi4KLSAgICAgICBPcHRpb25zIGFyZToKLSAgICAgICAqIGBl
bnRlcmA6IHRoZSB1c2VyIHByZXNzZWQgZW50ZXIKLSAgICAgICogYGtleVByZXNzYDogdGhlIHVz
ZXIgcHJlc3NlZCBhIGtleQotICAgICAgIEBwcm9wZXJ0eSBvbkV2ZW50Ci0gICAgICBAdHlwZSBT
dHJpbmcKLSAgICAgIEBkZWZhdWx0IGVudGVyCi0gICAgICBAcHJpdmF0ZQotICAgICovCi0gICAg
b25FdmVudDogJ2VudGVyJywKLQotICAgIC8qKgotICAgICAgV2hldGhlciB0aGUgYGtleVVwYCBl
dmVudCB0aGF0IHRyaWdnZXJzIGFuIGBhY3Rpb25gIHRvIGJlIHNlbnQgY29udGludWVzCi0gICAg
ICBwcm9wYWdhdGluZyB0byBvdGhlciB2aWV3cy4KLSAgICAgICBCeSBkZWZhdWx0LCB3aGVuIHRo
ZSB1c2VyIHByZXNzZXMgdGhlIHJldHVybiBrZXkgb24gdGhlaXIga2V5Ym9hcmQgYW5kCi0gICAg
ICB0aGUgdGV4dCBmaWVsZCBoYXMgYW4gYGFjdGlvbmAgc2V0LCB0aGUgYWN0aW9uIHdpbGwgYmUg
c2VudCB0byB0aGUgdmlldydzCi0gICAgICBjb250cm9sbGVyIGFuZCB0aGUga2V5IGV2ZW50IHdp
bGwgc3RvcCBwcm9wYWdhdGluZy4KLSAgICAgICBJZiB5b3Ugd291bGQgbGlrZSBwYXJlbnQgdmll
d3MgdG8gcmVjZWl2ZSB0aGUgYGtleVVwYCBldmVudCBldmVuIGFmdGVyIGFuCi0gICAgICBhY3Rp
b24gaGFzIGJlZW4gZGlzcGF0Y2hlZCwgc2V0IGBidWJibGVzYCB0byB0cnVlLgotICAgICAgIEBw
cm9wZXJ0eSBidWJibGVzCi0gICAgICBAdHlwZSBCb29sZWFuCi0gICAgICBAZGVmYXVsdCBmYWxz
ZQotICAgICAgQHByaXZhdGUKLSAgICAqLwotICAgIGJ1YmJsZXM6IGZhbHNlLAotCi0gICAgaW50
ZXJwcmV0S2V5RXZlbnRzOiBmdW5jdGlvbiAoZXZlbnQpIHsKLSAgICAgIHZhciBtYXAgPSBLRVlf
RVZFTlRTOwotICAgICAgdmFyIG1ldGhvZCA9IG1hcFtldmVudC5rZXlDb2RlXTsKLQotICAgICAg
dGhpcy5fZWxlbWVudFZhbHVlRGlkQ2hhbmdlKCk7Ci0gICAgICBpZiAobWV0aG9kKSB7Ci0gICAg
ICAgIHJldHVybiB0aGlzW21ldGhvZF0oZXZlbnQpOwotICAgICAgfQotICAgIH0sCi0KLSAgICBf
ZWxlbWVudFZhbHVlRGlkQ2hhbmdlOiBmdW5jdGlvbiAoKSB7Ci0gICAgICAvLyBVc2luZyByZWFk
RE9NQXR0ciB3aWxsIGVuc3VyZSB0aGF0IEhUTUxCYXJzIGtub3dzIHRoZSBsYXN0Ci0gICAgICAv
LyB2YWx1ZS4KLSAgICAgIF9lbWJlck1ldGFsUHJvcGVydHlfc2V0LnNldCh0aGlzLCAndmFsdWUn
LCB0aGlzLnJlYWRET01BdHRyKCd2YWx1ZScpKTsKLSAgICB9LAotCi0gICAgY2hhbmdlOiBmdW5j
dGlvbiAoZXZlbnQpIHsKLSAgICAgIHRoaXMuX2VsZW1lbnRWYWx1ZURpZENoYW5nZShldmVudCk7
Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAgQWxsb3dzIHlvdSB0byBzcGVjaWZ5IGEgY29udHJv
bGxlciBhY3Rpb24gdG8gaW52b2tlIHdoZW4gZWl0aGVyIHRoZSBgZW50ZXJgCi0gICAgICBrZXkg
aXMgcHJlc3NlZCBvciwgaW4gdGhlIGNhc2Ugb2YgdGhlIGZpZWxkIGJlaW5nIGEgdGV4dGFyZWEs
IHdoZW4gYSBuZXdsaW5lCi0gICAgICBpcyBpbnNlcnRlZC4gVG8gdXNlIHRoaXMgbWV0aG9kLCBn
aXZlIHlvdXIgZmllbGQgYW4gYGluc2VydC1uZXdsaW5lYAotICAgICAgYXR0cmlidXRlLiBUaGUg
dmFsdWUgb2YgdGhhdCBhdHRyaWJ1dGUgc2hvdWxkIGJlIHRoZSBuYW1lIG9mIHRoZSBhY3Rpb24K
LSAgICAgIGluIHlvdXIgY29udHJvbGxlciB0aGF0IHlvdSB3aXNoIHRvIGludm9rZS4KLSAgICAg
ICBGb3IgYW4gZXhhbXBsZSBvbiBob3cgdG8gdXNlIHRoZSBgaW5zZXJ0LW5ld2xpbmVgIGF0dHJp
YnV0ZSwgcGxlYXNlCi0gICAgICByZWZlcmVuY2UgdGhlIGV4YW1wbGUgbmVhciB0aGUgdG9wIG9m
IHRoaXMgZmlsZS4KLSAgICAgICBAbWV0aG9kIGluc2VydE5ld2xpbmUKLSAgICAgIEBwYXJhbSB7
RXZlbnR9IGV2ZW50Ci0gICAgICBAcHJpdmF0ZQotICAgICovCi0gICAgaW5zZXJ0TmV3bGluZTog
ZnVuY3Rpb24gKGV2ZW50KSB7Ci0gICAgICBzZW5kQWN0aW9uKCdlbnRlcicsIHRoaXMsIGV2ZW50
KTsKLSAgICAgIHNlbmRBY3Rpb24oJ2luc2VydC1uZXdsaW5lJywgdGhpcywgZXZlbnQpOwotICAg
IH0sCi0KLSAgICAvKioKLSAgICAgIEFsbG93cyB5b3UgdG8gc3BlY2lmeSBhIGNvbnRyb2xsZXIg
YWN0aW9uIHRvIGludm9rZSB3aGVuIHRoZSBlc2NhcGUgYnV0dG9uCi0gICAgICBpcyBwcmVzc2Vk
LiBUbyB1c2UgdGhpcyBtZXRob2QsIGdpdmUgeW91ciBmaWVsZCBhbiBgZXNjYXBlLXByZXNzYAot
ICAgICAgYXR0cmlidXRlLiBUaGUgdmFsdWUgb2YgdGhhdCBhdHRyaWJ1dGUgc2hvdWxkIGJlIHRo
ZSBuYW1lIG9mIHRoZSBhY3Rpb24KLSAgICAgIGluIHlvdXIgY29udHJvbGxlciB0aGF0IHlvdSB3
aXNoIHRvIGludm9rZS4KLSAgICAgICBGb3IgYW4gZXhhbXBsZSBvbiBob3cgdG8gdXNlIHRoZSBg
ZXNjYXBlLXByZXNzYCBhdHRyaWJ1dGUsIHBsZWFzZSByZWZlcmVuY2UKLSAgICAgIHRoZSBleGFt
cGxlIG5lYXIgdGhlIHRvcCBvZiB0aGlzIGZpbGUuCi0gICAgICAgQG1ldGhvZCBjYW5jZWwKLSAg
ICAgIEBwYXJhbSB7RXZlbnR9IGV2ZW50Ci0gICAgICBAcHJpdmF0ZQotICAgICovCi0gICAgY2Fu
Y2VsOiBmdW5jdGlvbiAoZXZlbnQpIHsKLSAgICAgIHNlbmRBY3Rpb24oJ2VzY2FwZS1wcmVzcycs
IHRoaXMsIGV2ZW50KTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICBBbGxvd3MgeW91IHRvIHNw
ZWNpZnkgYSBjb250cm9sbGVyIGFjdGlvbiB0byBpbnZva2Ugd2hlbiBhIGZpZWxkIHJlY2VpdmVz
Ci0gICAgICBmb2N1cy4gVG8gdXNlIHRoaXMgbWV0aG9kLCBnaXZlIHlvdXIgZmllbGQgYSBgZm9j
dXMtaW5gIGF0dHJpYnV0ZS4gVGhlIHZhbHVlCi0gICAgICBvZiB0aGF0IGF0dHJpYnV0ZSBzaG91
bGQgYmUgdGhlIG5hbWUgb2YgdGhlIGFjdGlvbiBpbiB5b3VyIGNvbnRyb2xsZXIKLSAgICAgIHRo
YXQgeW91IHdpc2ggdG8gaW52b2tlLgotICAgICAgIEZvciBhbiBleGFtcGxlIG9uIGhvdyB0byB1
c2UgdGhlIGBmb2N1cy1pbmAgYXR0cmlidXRlLCBwbGVhc2UgcmVmZXJlbmNlIHRoZQotICAgICAg
ZXhhbXBsZSBuZWFyIHRoZSB0b3Agb2YgdGhpcyBmaWxlLgotICAgICAgIEBtZXRob2QgZm9jdXNJ
bgotICAgICAgQHBhcmFtIHtFdmVudH0gZXZlbnQKLSAgICAgIEBwcml2YXRlCi0gICAgKi8KLSAg
ICBmb2N1c0luOiBmdW5jdGlvbiAoZXZlbnQpIHsKLSAgICAgIHNlbmRBY3Rpb24oJ2ZvY3VzLWlu
JywgdGhpcywgZXZlbnQpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgIEFsbG93cyB5b3UgdG8g
c3BlY2lmeSBhIGNvbnRyb2xsZXIgYWN0aW9uIHRvIGludm9rZSB3aGVuIGEgZmllbGQgbG9zZXMK
LSAgICAgIGZvY3VzLiBUbyB1c2UgdGhpcyBtZXRob2QsIGdpdmUgeW91ciBmaWVsZCBhIGBmb2N1
cy1vdXRgIGF0dHJpYnV0ZS4gVGhlIHZhbHVlCi0gICAgICBvZiB0aGF0IGF0dHJpYnV0ZSBzaG91
bGQgYmUgdGhlIG5hbWUgb2YgdGhlIGFjdGlvbiBpbiB5b3VyIGNvbnRyb2xsZXIKLSAgICAgIHRo
YXQgeW91IHdpc2ggdG8gaW52b2tlLgotICAgICAgIEZvciBhbiBleGFtcGxlIG9uIGhvdyB0byB1
c2UgdGhlIGBmb2N1cy1vdXRgIGF0dHJpYnV0ZSwgcGxlYXNlIHJlZmVyZW5jZSB0aGUKLSAgICAg
IGV4YW1wbGUgbmVhciB0aGUgdG9wIG9mIHRoaXMgZmlsZS4KLSAgICAgICBAbWV0aG9kIGZvY3Vz
T3V0Ci0gICAgICBAcGFyYW0ge0V2ZW50fSBldmVudAotICAgICAgQHByaXZhdGUKLSAgICAqLwot
ICAgIGZvY3VzT3V0OiBmdW5jdGlvbiAoZXZlbnQpIHsKLSAgICAgIHRoaXMuX2VsZW1lbnRWYWx1
ZURpZENoYW5nZShldmVudCk7Ci0gICAgICBzZW5kQWN0aW9uKCdmb2N1cy1vdXQnLCB0aGlzLCBl
dmVudCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAgQWxsb3dzIHlvdSB0byBzcGVjaWZ5IGEg
Y29udHJvbGxlciBhY3Rpb24gdG8gaW52b2tlIHdoZW4gYSBrZXkgaXMgcHJlc3NlZC4KLSAgICAg
IFRvIHVzZSB0aGlzIG1ldGhvZCwgZ2l2ZSB5b3VyIGZpZWxkIGEgYGtleS1wcmVzc2AgYXR0cmli
dXRlLiBUaGUgdmFsdWUgb2YKLSAgICAgIHRoYXQgYXR0cmlidXRlIHNob3VsZCBiZSB0aGUgbmFt
ZSBvZiB0aGUgYWN0aW9uIGluIHlvdXIgY29udHJvbGxlciB5b3UKLSAgICAgIHRoYXQgd2lzaCB0
byBpbnZva2UuCi0gICAgICAgRm9yIGFuIGV4YW1wbGUgb24gaG93IHRvIHVzZSB0aGUgYGtleS1w
cmVzc2AgYXR0cmlidXRlLCBwbGVhc2UgcmVmZXJlbmNlIHRoZQotICAgICAgZXhhbXBsZSBuZWFy
IHRoZSB0b3Agb2YgdGhpcyBmaWxlLgotICAgICAgIEBtZXRob2Qga2V5UHJlc3MKLSAgICAgIEBw
YXJhbSB7RXZlbnR9IGV2ZW50Ci0gICAgICBAcHJpdmF0ZQotICAgICovCi0gICAga2V5UHJlc3M6
IGZ1bmN0aW9uIChldmVudCkgewotICAgICAgc2VuZEFjdGlvbigna2V5LXByZXNzJywgdGhpcywg
ZXZlbnQpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgIEFsbG93cyB5b3UgdG8gc3BlY2lmeSBh
IGNvbnRyb2xsZXIgYWN0aW9uIHRvIGludm9rZSB3aGVuIGEga2V5LXVwIGV2ZW50IGlzCi0gICAg
ICBmaXJlZC4gVG8gdXNlIHRoaXMgbWV0aG9kLCBnaXZlIHlvdXIgZmllbGQgYSBga2V5LXVwYCBh
dHRyaWJ1dGUuIFRoZSB2YWx1ZQotICAgICAgb2YgdGhhdCBhdHRyaWJ1dGUgc2hvdWxkIGJlIHRo
ZSBuYW1lIG9mIHRoZSBhY3Rpb24gaW4geW91ciBjb250cm9sbGVyCi0gICAgICB0aGF0IHlvdSB3
aXNoIHRvIGludm9rZS4KLSAgICAgICBGb3IgYW4gZXhhbXBsZSBvbiBob3cgdG8gdXNlIHRoZSBg
a2V5LXVwYCBhdHRyaWJ1dGUsIHBsZWFzZSByZWZlcmVuY2UgdGhlCi0gICAgICBleGFtcGxlIG5l
YXIgdGhlIHRvcCBvZiB0aGlzIGZpbGUuCi0gICAgICAgQG1ldGhvZCBrZXlVcAotICAgICAgQHBh
cmFtIHtFdmVudH0gZXZlbnQKLSAgICAgIEBwcml2YXRlCi0gICAgKi8KLSAgICBrZXlVcDogZnVu
Y3Rpb24gKGV2ZW50KSB7Ci0gICAgICB0aGlzLmludGVycHJldEtleUV2ZW50cyhldmVudCk7Ci0K
LSAgICAgIHRoaXMuc2VuZEFjdGlvbigna2V5LXVwJywgX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQu
Z2V0KHRoaXMsICd2YWx1ZScpLCBldmVudCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAgQWxs
b3dzIHlvdSB0byBzcGVjaWZ5IGEgY29udHJvbGxlciBhY3Rpb24gdG8gaW52b2tlIHdoZW4gYSBr
ZXktZG93biBldmVudCBpcwotICAgICAgZmlyZWQuIFRvIHVzZSB0aGlzIG1ldGhvZCwgZ2l2ZSB5
b3VyIGZpZWxkIGEgYGtleS1kb3duYCBhdHRyaWJ1dGUuIFRoZSB2YWx1ZQotICAgICAgb2YgdGhh
dCBhdHRyaWJ1dGUgc2hvdWxkIGJlIHRoZSBuYW1lIG9mIHRoZSBhY3Rpb24gaW4geW91ciBjb250
cm9sbGVyIHRoYXQKLSAgICAgIHlvdSB3aXNoIHRvIGludm9rZS4KLSAgICAgICBGb3IgYW4gZXhh
bXBsZSBvbiBob3cgdG8gdXNlIHRoZSBga2V5LWRvd25gIGF0dHJpYnV0ZSwgcGxlYXNlIHJlZmVy
ZW5jZSB0aGUKLSAgICAgIGV4YW1wbGUgbmVhciB0aGUgdG9wIG9mIHRoaXMgZmlsZS4KLSAgICAg
ICBAbWV0aG9kIGtleURvd24KLSAgICAgIEBwYXJhbSB7RXZlbnR9IGV2ZW50Ci0gICAgICBAcHJp
dmF0ZQotICAgICovCi0gICAga2V5RG93bjogZnVuY3Rpb24gKGV2ZW50KSB7Ci0gICAgICB0aGlz
LnNlbmRBY3Rpb24oJ2tleS1kb3duJywgX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMs
ICd2YWx1ZScpLCBldmVudCk7Ci0gICAgfQotICB9KTsKLQotICAvLyBJbiBwcmluY2lwbGUsIHRo
aXMgc2hvdWxkbid0IGJlIG5lY2Vzc2FyeSwgYnV0IHRoZSBsZWdhY3kKLSAgLy8gc2VuZEFjdGlv
biBzZW1hbnRpY3MgZm9yIFRleHRGaWVsZCBhcmUgZGlmZmVyZW50IGZyb20KLSAgLy8gdGhlIGNv
bXBvbmVudCBzZW1hbnRpY3Mgc28gdGhpcyBtZXRob2Qgbm9ybWFsaXplcyB0aGVtLgotICBmdW5j
dGlvbiBzZW5kQWN0aW9uKGV2ZW50TmFtZSwgdmlldywgZXZlbnQpIHsKLSAgICB2YXIgYWN0aW9u
ID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHZpZXcsICdhdHRycy4nICsgZXZlbnROYW1l
KSB8fCBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodmlldywgZXZlbnROYW1lKTsKLSAgICB2
YXIgb24gPSBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodmlldywgJ29uRXZlbnQnKTsKLSAg
ICB2YXIgdmFsdWUgPSBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodmlldywgJ3ZhbHVlJyk7
Ci0KLSAgICAvLyBiYWNrLWNvbXBhdCBzdXBwb3J0IGZvciBrZXlQcmVzcyBhcyBhbiBldmVudCBu
YW1lIGV2ZW4gdGhvdWdoCi0gICAgLy8gaXQncyBhbHNvIGEgbWV0aG9kIG5hbWUgdGhhdCBjb25z
dW1lcyB0aGUgZXZlbnQgKGFuZCB0aGVyZWZvcmUKLSAgICAvLyBpbmNvbXBhdGlibGUgd2l0aCBz
ZW5kQWN0aW9uIHNlbWFudGljcykuCi0gICAgaWYgKG9uID09PSBldmVudE5hbWUgfHwgb24gPT09
ICdrZXlQcmVzcycgJiYgZXZlbnROYW1lID09PSAna2V5LXByZXNzJykgewotICAgICAgdmlldy5z
ZW5kQWN0aW9uKCdhY3Rpb24nLCB2YWx1ZSk7Ci0gICAgfQotCi0gICAgdmlldy5zZW5kQWN0aW9u
KGV2ZW50TmFtZSwgdmFsdWUpOwotCi0gICAgaWYgKGFjdGlvbiB8fCBvbiA9PT0gZXZlbnROYW1l
KSB7Ci0gICAgICBpZiAoIV9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh2aWV3LCAnYnViYmxl
cycpKSB7Ci0gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOwotICAgICAgfQotICAgIH0K
LSAgfQotCi0gIGV4cG9ydHMuZGVmYXVsdCA9IFRleHRTdXBwb3J0OwotfSk7Ci1lbmlmZWQoJ2Vt
YmVyLXZpZXdzL21peGlucy92aWV3X2NoaWxkX3ZpZXdzX3N1cHBvcnQnLCBbJ2V4cG9ydHMnLCAn
ZW1iZXItbWV0YWwvZGVidWcnLCAnZW1iZXItbWV0YWwvbWl4aW4nLCAnZW1iZXItbWV0YWwvcHJv
cGVydHlfZ2V0JywgJ2VtYmVyLW1ldGFsL3Byb3BlcnR5X3NldCcsICdlbWJlci1tZXRhbC9zZXRf
cHJvcGVydGllcycsICdlbWJlci1ydW50aW1lL3N5c3RlbS9uYXRpdmVfYXJyYXknLCAnY29udGFp
bmVyL293bmVyJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbERlYnVnLCBfZW1iZXJN
ZXRhbE1peGluLCBfZW1iZXJNZXRhbFByb3BlcnR5X2dldCwgX2VtYmVyTWV0YWxQcm9wZXJ0eV9z
ZXQsIF9lbWJlck1ldGFsU2V0X3Byb3BlcnRpZXMsIF9lbWJlclJ1bnRpbWVTeXN0ZW1OYXRpdmVf
YXJyYXksIF9jb250YWluZXJPd25lcikgewotICAvKioKLSAgQG1vZHVsZSBlbWJlcgotICBAc3Vi
bW9kdWxlIGVtYmVyLXZpZXdzCi0gICovCi0gICd1c2Ugc3RyaWN0JzsKLQotICB2YXIgRU1QVFlf
QVJSQVkgPSBbXTsKLQotICBleHBvcnRzLmRlZmF1bHQgPSBfZW1iZXJNZXRhbE1peGluLk1peGlu
LmNyZWF0ZSh7Ci0gICAgLyoqCi0gICAgICBBcnJheSBvZiBjaGlsZCB2aWV3cy4gWW91IHNob3Vs
ZCBuZXZlciBlZGl0IHRoaXMgYXJyYXkgZGlyZWN0bHkuCi0gICAgICBJbnN0ZWFkLCB1c2UgYGFw
cGVuZENoaWxkYCBhbmQgYHJlbW92ZUZyb21QYXJlbnRgLgotICAgICAgIEBwcm9wZXJ0eSBjaGls
ZFZpZXdzCi0gICAgICBAdHlwZSBBcnJheQotICAgICAgQGRlZmF1bHQgW10KLSAgICAgIEBwcml2
YXRlCi0gICAgKi8KLSAgICBjaGlsZFZpZXdzOiBFTVBUWV9BUlJBWSwKLQotICAgIGluaXQ6IGZ1
bmN0aW9uICgpIHsKLSAgICAgIHRoaXMuX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7Ci0K
LSAgICAgIC8vIHNldHVwIGNoaWxkIHZpZXdzLiBiZSBzdXJlIHRvIGNsb25lIHRoZSBjaGlsZCB2
aWV3cyBhcnJheSBmaXJzdAotICAgICAgLy8gMi4wVE9ETzogUmVtb3ZlIEVtYmVyLkEoKSBoZXJl
Ci0gICAgICB0aGlzLmNoaWxkVmlld3MgPSBfZW1iZXJSdW50aW1lU3lzdGVtTmF0aXZlX2FycmF5
LkEodGhpcy5jaGlsZFZpZXdzLnNsaWNlKCkpOwotICAgICAgdGhpcy5vd25lclZpZXcgPSB0aGlz
Lm93bmVyVmlldyB8fCB0aGlzOwotICAgIH0sCi0KLSAgICBhcHBlbmRDaGlsZDogZnVuY3Rpb24g
KHZpZXcpIHsKLSAgICAgIHRoaXMubGlua0NoaWxkKHZpZXcpOwotICAgICAgdGhpcy5jaGlsZFZp
ZXdzLnB1c2godmlldyk7Ci0gICAgfSwKLQotICAgIGRlc3Ryb3lDaGlsZDogZnVuY3Rpb24gKHZp
ZXcpIHsKLSAgICAgIHZpZXcuZGVzdHJveSgpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgIFJl
bW92ZXMgdGhlIGNoaWxkIHZpZXcgZnJvbSB0aGUgcGFyZW50IHZpZXcuCi0gICAgICAgQG1ldGhv
ZCByZW1vdmVDaGlsZAotICAgICAgQHBhcmFtIHtFbWJlci5WaWV3fSB2aWV3Ci0gICAgICBAcmV0
dXJuIHtFbWJlci5WaWV3fSByZWNlaXZlcgotICAgICAgQHByaXZhdGUKLSAgICAqLwotICAgIHJl
bW92ZUNoaWxkOiBmdW5jdGlvbiAodmlldykgewotICAgICAgLy8gSWYgd2UncmUgZGVzdHJveWlu
ZywgdGhlIGVudGlyZSBzdWJ0cmVlIHdpbGwgYmUKLSAgICAgIC8vIGZyZWVkLCBhbmQgdGhlIERP
TSB3aWxsIGJlIGhhbmRsZWQgc2VwYXJhdGVseSwKLSAgICAgIC8vIHNvIG5vIG5lZWQgdG8gbWVz
cyB3aXRoIGNoaWxkVmlld3MuCi0gICAgICBpZiAodGhpcy5pc0Rlc3Ryb3lpbmcpIHsKLSAgICAg
ICAgcmV0dXJuOwotICAgICAgfQotCi0gICAgICAvLyB1cGRhdGUgcGFyZW50IG5vZGUKLSAgICAg
IHRoaXMudW5saW5rQ2hpbGQodmlldyk7Ci0KLSAgICAgIC8vIHJlbW92ZSB2aWV3IGZyb20gY2hp
bGRWaWV3cyBhcnJheS4KLSAgICAgIHZhciBjaGlsZFZpZXdzID0gX2VtYmVyTWV0YWxQcm9wZXJ0
eV9nZXQuZ2V0KHRoaXMsICdjaGlsZFZpZXdzJyk7Ci0KLSAgICAgIHZhciBpbmRleCA9IGNoaWxk
Vmlld3MuaW5kZXhPZih2aWV3KTsKLSAgICAgIGlmIChpbmRleCAhPT0gLTEpIHsKLSAgICAgICAg
Y2hpbGRWaWV3cy5zcGxpY2UoaW5kZXgsIDEpOwotICAgICAgfQotCi0gICAgICByZXR1cm4gdGhp
czsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICBJbnN0YW50aWF0ZXMgYSB2aWV3IHRvIGJlIGFk
ZGVkIHRvIHRoZSBjaGlsZFZpZXdzIGFycmF5IGR1cmluZyB2aWV3Ci0gICAgICBpbml0aWFsaXph
dGlvbi4gWW91IGdlbmVyYWxseSB3aWxsIG5vdCBjYWxsIHRoaXMgbWV0aG9kIGRpcmVjdGx5IHVu
bGVzcwotICAgICAgeW91IGFyZSBvdmVycmlkaW5nIGBjcmVhdGVDaGlsZFZpZXdzKClgLiBOb3Rl
IHRoYXQgdGhpcyBtZXRob2Qgd2lsbAotICAgICAgYXV0b21hdGljYWxseSBjb25maWd1cmUgdGhl
IGNvcnJlY3Qgc2V0dGluZ3Mgb24gdGhlIG5ldyB2aWV3IGluc3RhbmNlIHRvCi0gICAgICBhY3Qg
YXMgYSBjaGlsZCBvZiB0aGUgcGFyZW50LgotICAgICAgIEBtZXRob2QgY3JlYXRlQ2hpbGRWaWV3
Ci0gICAgICBAcGFyYW0ge0NsYXNzfFN0cmluZ30gdmlld0NsYXNzCi0gICAgICBAcGFyYW0ge09i
amVjdH0gW2F0dHJzXSBBdHRyaWJ1dGVzIHRvIGFkZAotICAgICAgQHJldHVybiB7RW1iZXIuVmll
d30gbmV3IGluc3RhbmNlCi0gICAgICBAcHJpdmF0ZQotICAgICovCi0gICAgY3JlYXRlQ2hpbGRW
aWV3OiBmdW5jdGlvbiAobWF5YmVWaWV3Q2xhc3MpIHsKLSAgICAgIHZhciBhdHRycyA9IGFyZ3Vt
ZW50cy5sZW5ndGggPD0gMSB8fCBhcmd1bWVudHNbMV0gPT09IHVuZGVmaW5lZCA/IHt9IDogYXJn
dW1lbnRzWzFdOwotCi0gICAgICBpZiAoIW1heWJlVmlld0NsYXNzKSB7Ci0gICAgICAgIHRocm93
IG5ldyBUeXBlRXJyb3IoJ2NyZWF0ZUNoaWxkVmlld3MgZmlyc3QgYXJndW1lbnQgbXVzdCBleGlz
dCcpOwotICAgICAgfQotCi0gICAgICB2YXIgb3duZXIgPSBfY29udGFpbmVyT3duZXIuZ2V0T3du
ZXIodGhpcyk7Ci0KLSAgICAgIGlmIChtYXliZVZpZXdDbGFzcy5pc1ZpZXcgJiYgbWF5YmVWaWV3
Q2xhc3MucGFyZW50VmlldyA9PT0gdGhpcyAmJiBfY29udGFpbmVyT3duZXIuZ2V0T3duZXIobWF5
YmVWaWV3Q2xhc3MpID09PSBvd25lcikgewotICAgICAgICByZXR1cm4gbWF5YmVWaWV3Q2xhc3M7
Ci0gICAgICB9Ci0KLSAgICAgIHZhciB2aWV3OwotCi0gICAgICBhdHRycy5wYXJlbnRWaWV3ID0g
dGhpczsKLSAgICAgIGF0dHJzLnJlbmRlcmVyID0gdGhpcy5yZW5kZXJlcjsKLSAgICAgIGF0dHJz
Ll92aWV3UmVnaXN0cnkgPSB0aGlzLl92aWV3UmVnaXN0cnk7Ci0KLSAgICAgIGlmIChtYXliZVZp
ZXdDbGFzcy5pc1ZpZXdGYWN0b3J5KSB7Ci0gICAgICAgIF9jb250YWluZXJPd25lci5zZXRPd25l
cihhdHRycywgb3duZXIpOwotCi0gICAgICAgIHZpZXcgPSBtYXliZVZpZXdDbGFzcy5jcmVhdGUo
YXR0cnMpOwotCi0gICAgICAgIGlmICh2aWV3LnZpZXdOYW1lKSB7Ci0gICAgICAgICAgX2VtYmVy
TWV0YWxQcm9wZXJ0eV9zZXQuc2V0KHRoaXMsIHZpZXcudmlld05hbWUsIHZpZXcpOwotICAgICAg
ICB9Ci0gICAgICB9IGVsc2UgaWYgKCdzdHJpbmcnID09PSB0eXBlb2YgbWF5YmVWaWV3Q2xhc3Mp
IHsKLSAgICAgICAgdmFyIGZ1bGxOYW1lID0gJ3ZpZXc6JyArIG1heWJlVmlld0NsYXNzOwotICAg
ICAgICB2YXIgVmlld0tsYXNzID0gb3duZXIuX2xvb2t1cEZhY3RvcnkoZnVsbE5hbWUpOwotCi0g
ICAgICAgIF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0KCdDb3VsZCBub3QgZmluZCB2aWV3OiBcJycg
KyBmdWxsTmFtZSArICdcJycsICEhVmlld0tsYXNzKTsKLQotICAgICAgICB2aWV3ID0gVmlld0ts
YXNzLmNyZWF0ZShhdHRycyk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICB2aWV3ID0gbWF5YmVW
aWV3Q2xhc3M7Ci0gICAgICAgIF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0KCdZb3UgbXVzdCBwYXNz
IGluc3RhbmNlIG9yIHN1YmNsYXNzIG9mIFZpZXcnLCB2aWV3LmlzVmlldyk7Ci0KLSAgICAgICAg
X2NvbnRhaW5lck93bmVyLnNldE93bmVyKGF0dHJzLCBvd25lcik7Ci0gICAgICAgIF9lbWJlck1l
dGFsU2V0X3Byb3BlcnRpZXMuZGVmYXVsdCh2aWV3LCBhdHRycyk7Ci0gICAgICB9Ci0KLSAgICAg
IHRoaXMubGlua0NoaWxkKHZpZXcpOwotCi0gICAgICByZXR1cm4gdmlldzsKLSAgICB9LAotCi0g
ICAgbGlua0NoaWxkOiBmdW5jdGlvbiAoaW5zdGFuY2UpIHsKLSAgICAgIGlmICghaW5zdGFuY2Vb
X2NvbnRhaW5lck93bmVyLk9XTkVSXSkgewotICAgICAgICBfY29udGFpbmVyT3duZXIuc2V0T3du
ZXIoaW5zdGFuY2UsIF9jb250YWluZXJPd25lci5nZXRPd25lcih0aGlzKSk7Ci0gICAgICB9Ci0K
LSAgICAgIGluc3RhbmNlLnBhcmVudFZpZXcgPSB0aGlzOwotICAgICAgaW5zdGFuY2Uub3duZXJW
aWV3ID0gdGhpcy5vd25lclZpZXc7Ci0gICAgfSwKLQotICAgIHVubGlua0NoaWxkOiBmdW5jdGlv
biAoaW5zdGFuY2UpIHsKLSAgICAgIGluc3RhbmNlLnBhcmVudFZpZXcgPSBudWxsOwotICAgIH0K
LSAgfSk7Ci19KTsKLWVuaWZlZCgnZW1iZXItdmlld3MvbWl4aW5zL3ZpZXdfY29udGV4dF9zdXBw
b3J0JywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFsL21peGluJywgJ2VtYmVyLW1ldGFsL2NvbXB1
dGVkJywgJ2VtYmVyLW1ldGFsL3Byb3BlcnR5X2dldCcsICdlbWJlci1tZXRhbC9wcm9wZXJ0eV9z
ZXQnLCAnZW1iZXItdmlld3MvbWl4aW5zL2xlZ2FjeV92aWV3X3N1cHBvcnQnLCAnZW1iZXItbWV0
YWwvZXZlbnRzJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbE1peGluLCBfZW1iZXJN
ZXRhbENvbXB1dGVkLCBfZW1iZXJNZXRhbFByb3BlcnR5X2dldCwgX2VtYmVyTWV0YWxQcm9wZXJ0
eV9zZXQsIF9lbWJlclZpZXdzTWl4aW5zTGVnYWN5X3ZpZXdfc3VwcG9ydCwgX2VtYmVyTWV0YWxF
dmVudHMpIHsKLSAgLyoqCi0gIEBtb2R1bGUgZW1iZXIKLSAgQHN1Ym1vZHVsZSBlbWJlci12aWV3
cwotICAqLwotICAndXNlIHN0cmljdCc7Ci0KLSAgdmFyIFZpZXdDb250ZXh0U3VwcG9ydCA9IF9l
bWJlck1ldGFsTWl4aW4uTWl4aW4uY3JlYXRlKF9lbWJlclZpZXdzTWl4aW5zTGVnYWN5X3ZpZXdf
c3VwcG9ydC5kZWZhdWx0LCB7Ci0gICAgLyoqCi0gICAgICBUaGUgb2JqZWN0IGZyb20gd2hpY2gg
dGVtcGxhdGVzIHNob3VsZCBhY2Nlc3MgcHJvcGVydGllcy4KLSAgICAgICBUaGlzIG9iamVjdCB3
aWxsIGJlIHBhc3NlZCB0byB0aGUgdGVtcGxhdGUgZnVuY3Rpb24gZWFjaCB0aW1lIHRoZSByZW5k
ZXIKLSAgICAgIG1ldGhvZCBpcyBjYWxsZWQsIGJ1dCBpdCBpcyB1cCB0byB0aGUgaW5kaXZpZHVh
bCBmdW5jdGlvbiB0byBkZWNpZGUgd2hhdAotICAgICAgdG8gZG8gd2l0aCBpdC4KLSAgICAgICBC
eSBkZWZhdWx0LCB0aGlzIHdpbGwgYmUgdGhlIHZpZXcncyBjb250cm9sbGVyLgotICAgICAgIEBw
cm9wZXJ0eSBjb250ZXh0Ci0gICAgICBAdHlwZSBPYmplY3QKLSAgICAgIEBwcml2YXRlCi0gICAg
Ki8KLSAgICBjb250ZXh0OiBfZW1iZXJNZXRhbENvbXB1dGVkLmNvbXB1dGVkKHsKLSAgICAgIGdl
dDogZnVuY3Rpb24gKCkgewotICAgICAgICByZXR1cm4gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQu
Z2V0KHRoaXMsICdfY29udGV4dCcpOwotICAgICAgfSwKLSAgICAgIHNldDogZnVuY3Rpb24gKGtl
eSwgdmFsdWUpIHsKLSAgICAgICAgX2VtYmVyTWV0YWxQcm9wZXJ0eV9zZXQuc2V0KHRoaXMsICdf
Y29udGV4dCcsIHZhbHVlKTsKLSAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgICAgfQotICAgIH0p
LAotCi0gICAgLyoqCi0gICAgICBQcml2YXRlIGNvcHkgb2YgdGhlIHZpZXcncyB0ZW1wbGF0ZSBj
b250ZXh0LiBUaGlzIGNhbiBiZSBzZXQgZGlyZWN0bHkKLSAgICAgIGJ5IEhhbmRsZWJhcnMgd2l0
aG91dCB0cmlnZ2VyaW5nIHRoZSBvYnNlcnZlciB0aGF0IGNhdXNlcyB0aGUgdmlldwotICAgICAg
dG8gYmUgcmUtcmVuZGVyZWQuCi0gICAgICAgVGhlIGNvbnRleHQgb2YgYSB2aWV3IGlzIGxvb2tl
ZCB1cCBhcyBmb2xsb3dzOgotICAgICAgIDEuIFN1cHBsaWVkIGNvbnRleHQgKHVzdWFsbHkgYnkg
SGFuZGxlYmFycykKLSAgICAgIDIuIFNwZWNpZmllZCBjb250cm9sbGVyCi0gICAgICAzLiBgcGFy
ZW50Vmlld2AncyBjb250ZXh0Ci0gICAgICAgVGhlIGNvZGUgaW4gSGFuZGxlYmFycyB0aGF0IG92
ZXJyaWRlcyB0aGUgYF9jb250ZXh0YCBwcm9wZXJ0eSBmaXJzdAotICAgICAgY2hlY2tzIHRvIHNl
ZSB3aGV0aGVyIHRoZSB2aWV3IGhhcyBhIHNwZWNpZmllZCBjb250cm9sbGVyLiBUaGlzIGlzCi0g
ICAgICBzb21ldGhpbmcgb2YgYSBoYWNrIGFuZCBzaG91bGQgYmUgcmV2aXNpdGVkLgotICAgICAg
IEBwcm9wZXJ0eSBfY29udGV4dAotICAgICAgQHByaXZhdGUKLSAgICAqLwotICAgIF9jb250ZXh0
OiBfZW1iZXJNZXRhbENvbXB1dGVkLmNvbXB1dGVkKHsKLSAgICAgIGdldDogZnVuY3Rpb24gKCkg
ewotICAgICAgICB2YXIgcGFyZW50VmlldywgY29udHJvbGxlcjsKLQotICAgICAgICBpZiAoY29u
dHJvbGxlciA9IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0aGlzLCAnY29udHJvbGxlcicp
KSB7Ci0gICAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXI7Ci0gICAgICAgIH0KLQotICAgICAgICBw
YXJlbnRWaWV3ID0gdGhpcy5wYXJlbnRWaWV3OwotICAgICAgICBpZiAocGFyZW50Vmlldykgewot
ICAgICAgICAgIHJldHVybiBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQocGFyZW50Vmlldywg
J19jb250ZXh0Jyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICB9LAot
ICAgICAgc2V0OiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkgewotICAgICAgICByZXR1cm4gdmFsdWU7
Ci0gICAgICB9Ci0gICAgfSksCi0KLSAgICBfY29udHJvbGxlcjogbnVsbCwKLQotICAgIC8qKgot
ICAgICAgVGhlIGNvbnRyb2xsZXIgbWFuYWdpbmcgdGhpcyB2aWV3LiBJZiB0aGlzIHByb3BlcnR5
IGlzIHNldCwgaXQgd2lsbCBiZQotICAgICAgbWFkZSBhdmFpbGFibGUgZm9yIHVzZSBieSB0aGUg
dGVtcGxhdGUuCi0gICAgICAgQHByb3BlcnR5IGNvbnRyb2xsZXIKLSAgICAgIEB0eXBlIE9iamVj
dAotICAgICAgQHByaXZhdGUKLSAgICAqLwotICAgIGNvbnRyb2xsZXI6IF9lbWJlck1ldGFsQ29t
cHV0ZWQuY29tcHV0ZWQoewotICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7Ci0gICAgICAgIGlmICh0
aGlzLl9jb250cm9sbGVyKSB7Ci0gICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRyb2xsZXI7Ci0g
ICAgICAgIH0KLQotICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnRWaWV3ID8gX2VtYmVyTWV0YWxQ
cm9wZXJ0eV9nZXQuZ2V0KHRoaXMucGFyZW50VmlldywgJ2NvbnRyb2xsZXInKSA6IG51bGw7Ci0g
ICAgICB9LAotICAgICAgc2V0OiBmdW5jdGlvbiAoXywgdmFsdWUpIHsKLSAgICAgICAgdGhpcy5f
Y29udHJvbGxlciA9IHZhbHVlOwotICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgICB9Ci0gICAg
fSksCi0KLSAgICBfbGVnYWN5Q29udHJvbGxlckRpZENoYW5nZTogX2VtYmVyTWV0YWxNaXhpbi5v
YnNlcnZlcignY29udHJvbGxlcicsIGZ1bmN0aW9uICgpIHsKLSAgICAgIHRoaXMuY2hpbGRWaWV3
cy5mb3JFYWNoKGZ1bmN0aW9uICh2aWV3KSB7Ci0gICAgICAgIHJldHVybiB2aWV3Lm5vdGlmeVBy
b3BlcnR5Q2hhbmdlKCdjb250cm9sbGVyJyk7Ci0gICAgICB9KTsKLSAgICB9KSwKLQotICAgIF9u
b3RpZnlDb250cm9sbGVyQ2hhbmdlOiBfZW1iZXJNZXRhbEV2ZW50cy5vbigncGFyZW50Vmlld0Rp
ZENoYW5nZScsIGZ1bmN0aW9uICgpIHsKLSAgICAgIHRoaXMubm90aWZ5UHJvcGVydHlDaGFuZ2Uo
J2NvbnRyb2xsZXInKTsKLSAgICB9KQotICB9KTsKLQotICBleHBvcnRzLmRlZmF1bHQgPSBWaWV3
Q29udGV4dFN1cHBvcnQ7Ci19KTsKLWVuaWZlZCgnZW1iZXItdmlld3MvbWl4aW5zL3ZpZXdfc3Rh
dGVfc3VwcG9ydCcsIFsnZXhwb3J0cycsICdlbWJlci1tZXRhbC9kZWJ1ZycsICdlbWJlci1tZXRh
bC9taXhpbiddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0YWxEZWJ1ZywgX2VtYmVyTWV0
YWxNaXhpbikgewotICAndXNlIHN0cmljdCc7Ci0KLSAgdmFyIFZpZXdTdGF0ZVN1cHBvcnQgPSBf
ZW1iZXJNZXRhbE1peGluLk1peGluLmNyZWF0ZSh7Ci0gICAgdHJhbnNpdGlvblRvOiBmdW5jdGlv
biAoc3RhdGUpIHsKLSAgICAgIF9lbWJlck1ldGFsRGVidWcuZGVwcmVjYXRlKCdFbWJlci5WaWV3
I3RyYW5zaXRpb25UbyBoYXMgYmVlbiBkZXByZWNhdGVkLCBpdCBpcyBmb3IgaW50ZXJuYWwgdXNl
IG9ubHknLCBmYWxzZSwgeyBpZDogJ2VtYmVyLXZpZXdzLnZpZXctdHJhbnNpdGlvbi10bycsIHVu
dGlsOiAnMi40LjAnIH0pOwotICAgICAgdGhpcy5fdHJhbnNpdGlvblRvKHN0YXRlKTsKLSAgICB9
LAotCi0gICAgX3RyYW5zaXRpb25UbzogZnVuY3Rpb24gKHN0YXRlKSB7Ci0gICAgICB2YXIgcHJp
b3JTdGF0ZSA9IHRoaXMuX2N1cnJlbnRTdGF0ZTsKLSAgICAgIHZhciBjdXJyZW50U3RhdGUgPSB0
aGlzLl9jdXJyZW50U3RhdGUgPSB0aGlzLl9zdGF0ZXNbc3RhdGVdOwotICAgICAgdGhpcy5fc3Rh
dGUgPSBzdGF0ZTsKLQotICAgICAgaWYgKHByaW9yU3RhdGUgJiYgcHJpb3JTdGF0ZS5leGl0KSB7
Ci0gICAgICAgIHByaW9yU3RhdGUuZXhpdCh0aGlzKTsKLSAgICAgIH0KLSAgICAgIGlmIChjdXJy
ZW50U3RhdGUuZW50ZXIpIHsKLSAgICAgICAgY3VycmVudFN0YXRlLmVudGVyKHRoaXMpOwotICAg
ICAgfQotICAgIH0KLSAgfSk7Ci0KLSAgZXhwb3J0cy5kZWZhdWx0ID0gVmlld1N0YXRlU3VwcG9y
dDsKLX0pOwotZW5pZmVkKCdlbWJlci12aWV3cy9taXhpbnMvdmlld19zdXBwb3J0JywgWydleHBv
cnRzJywgJ2VtYmVyLW1ldGFsL2RlYnVnJywgJ2VtYmVyLW1ldGFsL2Vycm9yJywgJ2VtYmVyLW1l
dGFsL3Byb3BlcnR5X2dldCcsICdlbWJlci1tZXRhbC9ydW5fbG9vcCcsICdlbWJlci1tZXRhbC9v
YnNlcnZlcicsICdlbWJlci1tZXRhbC91dGlscycsICdlbWJlci1tZXRhbC9jb21wdXRlZCcsICdl
bWJlci1tZXRhbC9taXhpbicsICdlbWJlci1ydW50aW1lL3N5c3RlbS9jb3JlX29iamVjdCcsICdl
bWJlci1tZXRhbC9zeW1ib2wnLCAnY29udGFpbmVyL293bmVyJywgJ2VtYmVyLXZpZXdzL3N5c3Rl
bS9qcXVlcnknXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1ldGFsRGVidWcsIF9lbWJlck1l
dGFsRXJyb3IsIF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LCBfZW1iZXJNZXRhbFJ1bl9sb29wLCBf
ZW1iZXJNZXRhbE9ic2VydmVyLCBfZW1iZXJNZXRhbFV0aWxzLCBfZW1iZXJNZXRhbENvbXB1dGVk
LCBfZW1iZXJNZXRhbE1peGluLCBfZW1iZXJSdW50aW1lU3lzdGVtQ29yZV9vYmplY3QsIF9lbWJl
ck1ldGFsU3ltYm9sLCBfY29udGFpbmVyT3duZXIsIF9lbWJlclZpZXdzU3lzdGVtSnF1ZXJ5KSB7
Ci0gICd1c2Ugc3RyaWN0JzsKLQotICB2YXIgX01peGluJGNyZWF0ZTsKLQotICB2YXIgSU5JVF9X
QVNfQ0FMTEVEID0gX2VtYmVyTWV0YWxTeW1ib2wuZGVmYXVsdCgnSU5JVF9XQVNfQ0FMTEVEJyk7
Ci0KLSAgZnVuY3Rpb24gSygpIHsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotCi0gIGV4cG9ydHMu
ZGVmYXVsdCA9IF9lbWJlck1ldGFsTWl4aW4uTWl4aW4uY3JlYXRlKChfTWl4aW4kY3JlYXRlID0g
ewotICAgIGNvbmNhdGVuYXRlZFByb3BlcnRpZXM6IFsnYXR0cmlidXRlQmluZGluZ3MnXSwKLQot
ICAgIC8qKgotICAgICAgQHByb3BlcnR5IGlzVmlldwotICAgICAgQHR5cGUgQm9vbGVhbgotICAg
ICAgQGRlZmF1bHQgdHJ1ZQotICAgICAgQHN0YXRpYwotICAgICAgQHByaXZhdGUKLSAgICAqLwot
ICAgIGlzVmlldzogdHJ1ZSwKLQotICAgIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLSAgICAvLyBURU1QTEFURSBTVVBQT1JUCi0g
ICAgLy8KLQotICAgIC8qKgotICAgICAgVGhlIG5hbWUgb2YgdGhlIHRlbXBsYXRlIHRvIGxvb2t1
cCBpZiBubyB0ZW1wbGF0ZSBpcyBwcm92aWRlZC4KLSAgICAgICBCeSBkZWZhdWx0IGBFbWJlci5W
aWV3YCB3aWxsIGxvb2t1cCBhIHRlbXBsYXRlIHdpdGggdGhpcyBuYW1lIGluCi0gICAgICBgRW1i
ZXIuVEVNUExBVEVTYCAoYSBzaGFyZWQgZ2xvYmFsIG9iamVjdCkuCi0gICAgICAgQHByb3BlcnR5
IHRlbXBsYXRlTmFtZQotICAgICAgQHR5cGUgU3RyaW5nCi0gICAgICBAZGVmYXVsdCBudWxsCi0g
ICAgICBAcHJpdmF0ZQotICAgICovCi0gICAgdGVtcGxhdGVOYW1lOiBudWxsLAotCi0gICAgLyoq
Ci0gICAgICBUaGUgbmFtZSBvZiB0aGUgbGF5b3V0IHRvIGxvb2t1cCBpZiBubyBsYXlvdXQgaXMg
cHJvdmlkZWQuCi0gICAgICAgQnkgZGVmYXVsdCBgRW1iZXIuVmlld2Agd2lsbCBsb29rdXAgYSB0
ZW1wbGF0ZSB3aXRoIHRoaXMgbmFtZSBpbgotICAgICAgYEVtYmVyLlRFTVBMQVRFU2AgKGEgc2hh
cmVkIGdsb2JhbCBvYmplY3QpLgotICAgICAgIEBwcm9wZXJ0eSBsYXlvdXROYW1lCi0gICAgICBA
dHlwZSBTdHJpbmcKLSAgICAgIEBkZWZhdWx0IG51bGwKLSAgICAgIEBwcml2YXRlCi0gICAgKi8K
LSAgICBsYXlvdXROYW1lOiBudWxsLAotCi0gICAgLyoqCi0gICAgICBUaGUgdGVtcGxhdGUgdXNl
ZCB0byByZW5kZXIgdGhlIHZpZXcuIFRoaXMgc2hvdWxkIGJlIGEgZnVuY3Rpb24gdGhhdAotICAg
ICAgYWNjZXB0cyBhbiBvcHRpb25hbCBjb250ZXh0IHBhcmFtZXRlciBhbmQgcmV0dXJucyBhIHN0
cmluZyBvZiBIVE1MIHRoYXQKLSAgICAgIHdpbGwgYmUgaW5zZXJ0ZWQgaW50byB0aGUgRE9NIHJl
bGF0aXZlIHRvIGl0cyBwYXJlbnQgdmlldy4KLSAgICAgICBJbiBnZW5lcmFsLCB5b3Ugc2hvdWxk
IHNldCB0aGUgYHRlbXBsYXRlTmFtZWAgcHJvcGVydHkgaW5zdGVhZCBvZiBzZXR0aW5nCi0gICAg
ICB0aGUgdGVtcGxhdGUgeW91cnNlbGYuCi0gICAgICAgQHByb3BlcnR5IHRlbXBsYXRlCi0gICAg
ICBAdHlwZSBGdW5jdGlvbgotICAgICAgQHByaXZhdGUKLSAgICAqLwotICAgIHRlbXBsYXRlOiBf
ZW1iZXJNZXRhbENvbXB1dGVkLmNvbXB1dGVkKHsKLSAgICAgIGdldDogZnVuY3Rpb24gKCkgewot
ICAgICAgICB2YXIgdGVtcGxhdGVOYW1lID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRo
aXMsICd0ZW1wbGF0ZU5hbWUnKTsKLSAgICAgICAgdmFyIHRlbXBsYXRlID0gdGhpcy50ZW1wbGF0
ZUZvck5hbWUodGVtcGxhdGVOYW1lLCAndGVtcGxhdGUnKTsKLSAgICAgICAgX2VtYmVyTWV0YWxE
ZWJ1Zy5hc3NlcnQoJ1lvdSBzcGVjaWZpZWQgdGhlIHRlbXBsYXRlTmFtZSAnICsgdGVtcGxhdGVO
YW1lICsgJyBmb3IgJyArIHRoaXMgKyAnLCBidXQgaXQgZGlkIG5vdCBleGlzdC4nLCAhdGVtcGxh
dGVOYW1lIHx8ICEhdGVtcGxhdGUpOwotICAgICAgICByZXR1cm4gdGVtcGxhdGUgfHwgX2VtYmVy
TWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsICdkZWZhdWx0VGVtcGxhdGUnKTsKLSAgICAgIH0s
Ci0gICAgICBzZXQ6IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7Ci0gICAgICAgIGlmICh2YWx1ZSAh
PT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgICAgICB9Ci0gICAg
ICAgIHJldHVybiBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywga2V5KTsKLSAgICAg
IH0KLSAgICB9KSwKLQotICAgIC8qKgotICAgICAgQSB2aWV3IG1heSBjb250YWluIGEgbGF5b3V0
LiBBIGxheW91dCBpcyBhIHJlZ3VsYXIgdGVtcGxhdGUgYnV0Ci0gICAgICBzdXBlcnNlZGVzIHRo
ZSBgdGVtcGxhdGVgIHByb3BlcnR5IGR1cmluZyByZW5kZXJpbmcuIEl0IGlzIHRoZQotICAgICAg
cmVzcG9uc2liaWxpdHkgb2YgdGhlIGxheW91dCB0ZW1wbGF0ZSB0byByZXRyaWV2ZSB0aGUgYHRl
bXBsYXRlYAotICAgICAgcHJvcGVydHkgZnJvbSB0aGUgdmlldyAob3IgYWx0ZXJuYXRpdmVseSwg
Y2FsbCBgSGFuZGxlYmFycy5oZWxwZXJzLnlpZWxkYCwKLSAgICAgIGB7e3lpZWxkfX1gKSB0byBy
ZW5kZXIgaXQgaW4gdGhlIGNvcnJlY3QgbG9jYXRpb24uCi0gICAgICAgVGhpcyBpcyB1c2VmdWwg
Zm9yIGEgdmlldyB0aGF0IGhhcyBhIHNoYXJlZCB3cmFwcGVyLCBidXQgd2hpY2ggZGVsZWdhdGVz
Ci0gICAgICB0aGUgcmVuZGVyaW5nIG9mIHRoZSBjb250ZW50cyBvZiB0aGUgd3JhcHBlciB0byB0
aGUgYHRlbXBsYXRlYCBwcm9wZXJ0eQotICAgICAgb24gYSBzdWJjbGFzcy4KLSAgICAgICBAcHJv
cGVydHkgbGF5b3V0Ci0gICAgICBAdHlwZSBGdW5jdGlvbgotICAgICAgQHByaXZhdGUKLSAgICAq
LwotICAgIGxheW91dDogX2VtYmVyTWV0YWxDb21wdXRlZC5jb21wdXRlZCh7Ci0gICAgICBnZXQ6
IGZ1bmN0aW9uIChrZXkpIHsKLSAgICAgICAgdmFyIGxheW91dE5hbWUgPSBfZW1iZXJNZXRhbFBy
b3BlcnR5X2dldC5nZXQodGhpcywgJ2xheW91dE5hbWUnKTsKLSAgICAgICAgdmFyIGxheW91dCA9
IHRoaXMudGVtcGxhdGVGb3JOYW1lKGxheW91dE5hbWUsICdsYXlvdXQnKTsKLQotICAgICAgICBf
ZW1iZXJNZXRhbERlYnVnLmFzc2VydCgnWW91IHNwZWNpZmllZCB0aGUgbGF5b3V0TmFtZSAnICsg
bGF5b3V0TmFtZSArICcgZm9yICcgKyB0aGlzICsgJywgYnV0IGl0IGRpZCBub3QgZXhpc3QuJywg
IWxheW91dE5hbWUgfHwgISFsYXlvdXQpOwotCi0gICAgICAgIHJldHVybiBsYXlvdXQgfHwgX2Vt
YmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsICdkZWZhdWx0TGF5b3V0Jyk7Ci0gICAgICB9
LAotCi0gICAgICBzZXQ6IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7Ci0gICAgICAgIHJldHVybiB2
YWx1ZTsKLSAgICAgIH0KLSAgICB9KSwKLQotICAgIHRlbXBsYXRlRm9yTmFtZTogZnVuY3Rpb24g
KG5hbWUsIHR5cGUpIHsKLSAgICAgIGlmICghbmFtZSkgewotICAgICAgICByZXR1cm47Ci0gICAg
ICB9Ci0gICAgICBfZW1iZXJNZXRhbERlYnVnLmFzc2VydCgndGVtcGxhdGVOYW1lcyBhcmUgbm90
IGFsbG93ZWQgdG8gY29udGFpbiBwZXJpb2RzOiAnICsgbmFtZSwgbmFtZS5pbmRleE9mKCcuJykg
PT09IC0xKTsKLQotICAgICAgdmFyIG93bmVyID0gX2NvbnRhaW5lck93bmVyLmdldE93bmVyKHRo
aXMpOwotCi0gICAgICBpZiAoIW93bmVyKSB7Ci0gICAgICAgIHRocm93IG5ldyBfZW1iZXJNZXRh
bEVycm9yLmRlZmF1bHQoJ0NvbnRhaW5lciB3YXMgbm90IGZvdW5kIHdoZW4gbG9va2luZyB1cCBh
IHZpZXdzIHRlbXBsYXRlLiAnICsgJ1RoaXMgaXMgbW9zdCBsaWtlbHkgZHVlIHRvIG1hbnVhbGx5
IGluc3RhbnRpYXRpbmcgYW4gRW1iZXIuVmlldy4gJyArICdTZWU6IGh0dHA6Ly9naXQuaW8vRUtQ
cG5BJyk7Ci0gICAgICB9Ci0KLSAgICAgIHJldHVybiBvd25lci5sb29rdXAoJ3RlbXBsYXRlOicg
KyBuYW1lKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICBSZXR1cm4gdGhlIG5lYXJlc3QgYW5j
ZXN0b3IgdGhhdCBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgcHJvdmlkZWQKLSAgICAgIGNsYXNzIG9y
IG1peGluLgotICAgICAgIEBtZXRob2QgbmVhcmVzdE9mVHlwZQotICAgICAgQHBhcmFtIHtDbGFz
cyxNaXhpbn0ga2xhc3MgU3ViY2xhc3Mgb2YgRW1iZXIuVmlldyAob3IgRW1iZXIuVmlldyBpdHNl
bGYpLAotICAgICAgICAgICAgIG9yIGFuIGluc3RhbmNlIG9mIEVtYmVyLk1peGluLgotICAgICAg
QHJldHVybiBFbWJlci5WaWV3Ci0gICAgICBAcHJpdmF0ZQotICAgICovCi0gICAgbmVhcmVzdE9m
VHlwZTogZnVuY3Rpb24gKGtsYXNzKSB7Ci0gICAgICB2YXIgdmlldyA9IF9lbWJlck1ldGFsUHJv
cGVydHlfZ2V0LmdldCh0aGlzLCAncGFyZW50VmlldycpOwotICAgICAgdmFyIGlzT2ZUeXBlID0g
a2xhc3MgaW5zdGFuY2VvZiBfZW1iZXJNZXRhbE1peGluLk1peGluID8gZnVuY3Rpb24gKHZpZXcp
IHsKLSAgICAgICAgcmV0dXJuIGtsYXNzLmRldGVjdCh2aWV3KTsKLSAgICAgIH0gOiBmdW5jdGlv
biAodmlldykgewotICAgICAgICByZXR1cm4ga2xhc3MuZGV0ZWN0KHZpZXcuY29uc3RydWN0b3Ip
OwotICAgICAgfTsKLQotICAgICAgd2hpbGUgKHZpZXcpIHsKLSAgICAgICAgaWYgKGlzT2ZUeXBl
KHZpZXcpKSB7Ci0gICAgICAgICAgcmV0dXJuIHZpZXc7Ci0gICAgICAgIH0KLSAgICAgICAgdmll
dyA9IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh2aWV3LCAncGFyZW50VmlldycpOwotICAg
ICAgfQotICAgIH0sCi0KLSAgICAvKioKLSAgICAgIFJldHVybiB0aGUgbmVhcmVzdCBhbmNlc3Rv
ciB0aGF0IGhhcyBhIGdpdmVuIHByb3BlcnR5LgotICAgICAgIEBtZXRob2QgbmVhcmVzdFdpdGhQ
cm9wZXJ0eQotICAgICAgQHBhcmFtIHtTdHJpbmd9IHByb3BlcnR5IEEgcHJvcGVydHkgbmFtZQot
ICAgICAgQHJldHVybiBFbWJlci5WaWV3Ci0gICAgICBAcHJpdmF0ZQotICAgICovCi0gICAgbmVh
cmVzdFdpdGhQcm9wZXJ0eTogZnVuY3Rpb24gKHByb3BlcnR5KSB7Ci0gICAgICB2YXIgdmlldyA9
IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh0aGlzLCAncGFyZW50VmlldycpOwotCi0gICAg
ICB3aGlsZSAodmlldykgewotICAgICAgICBpZiAocHJvcGVydHkgaW4gdmlldykgewotICAgICAg
ICAgIHJldHVybiB2aWV3OwotICAgICAgICB9Ci0gICAgICAgIHZpZXcgPSBfZW1iZXJNZXRhbFBy
b3BlcnR5X2dldC5nZXQodmlldywgJ3BhcmVudFZpZXcnKTsKLSAgICAgIH0KLSAgICB9LAotCi0g
ICAgLyoqCi0gICAgICBSZW5kZXJzIHRoZSB2aWV3IGFnYWluLiBUaGlzIHdpbGwgd29yayByZWdh
cmRsZXNzIG9mIHdoZXRoZXIgdGhlCi0gICAgICB2aWV3IGlzIGFscmVhZHkgaW4gdGhlIERPTSBv
ciBub3QuIElmIHRoZSB2aWV3IGlzIGluIHRoZSBET00sIHRoZQotICAgICAgcmVuZGVyaW5nIHBy
b2Nlc3Mgd2lsbCBiZSBkZWZlcnJlZCB0byBnaXZlIGJpbmRpbmdzIGEgY2hhbmNlCi0gICAgICB0
byBzeW5jaHJvbml6ZS4KLSAgICAgICBJZiBjaGlsZHJlbiB3ZXJlIGFkZGVkIGR1cmluZyB0aGUg
cmVuZGVyaW5nIHByb2Nlc3MgdXNpbmcgYGFwcGVuZENoaWxkYCwKLSAgICAgIGByZXJlbmRlcmAg
d2lsbCByZW1vdmUgdGhlbSwgYmVjYXVzZSB0aGV5IHdpbGwgYmUgYWRkZWQgYWdhaW4KLSAgICAg
IGlmIG5lZWRlZCBieSB0aGUgbmV4dCBgcmVuZGVyYC4KLSAgICAgICBJbiBnZW5lcmFsLCBpZiB0
aGUgZGlzcGxheSBvZiB5b3VyIHZpZXcgY2hhbmdlcywgeW91IHNob3VsZCBtb2RpZnkKLSAgICAg
IHRoZSBET00gZWxlbWVudCBkaXJlY3RseSBpbnN0ZWFkIG9mIG1hbnVhbGx5IGNhbGxpbmcgYHJl
cmVuZGVyYCwgd2hpY2ggY2FuCi0gICAgICBiZSBzbG93LgotICAgICAgIEBtZXRob2QgcmVyZW5k
ZXIKLSAgICAgIEBwdWJsaWMKLSAgICAqLwotICAgIHJlcmVuZGVyOiBmdW5jdGlvbiAoKSB7Ci0g
ICAgICByZXR1cm4gdGhpcy5fY3VycmVudFN0YXRlLnJlcmVuZGVyKHRoaXMpOwotICAgIH0sCi0K
LSAgICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uCi0gICAgLy8gRUxFTUVOVCBTVVBQT1JUCi0gICAgLy8KLQotICAgIC8qKgotICAg
ICAgUmV0dXJucyB0aGUgY3VycmVudCBET00gZWxlbWVudCBmb3IgdGhlIHZpZXcuCi0gICAgICAg
QHByb3BlcnR5IGVsZW1lbnQKLSAgICAgIEB0eXBlIERPTUVsZW1lbnQKLSAgICAgIEBwdWJsaWMK
LSAgICAqLwotICAgIGVsZW1lbnQ6IG51bGwsCi0KLSAgICAvKioKLSAgICAgIFJldHVybnMgYSBq
UXVlcnkgb2JqZWN0IGZvciB0aGlzIHZpZXcncyBlbGVtZW50LiBJZiB5b3UgcGFzcyBpbiBhIHNl
bGVjdG9yCi0gICAgICBzdHJpbmcsIHRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIGEgalF1ZXJ5IG9i
amVjdCwgdXNpbmcgdGhlIGN1cnJlbnQgZWxlbWVudAotICAgICAgYXMgaXRzIGJ1ZmZlci4KLSAg
ICAgICBGb3IgZXhhbXBsZSwgY2FsbGluZyBgdmlldy4kKCdsaScpYCB3aWxsIHJldHVybiBhIGpR
dWVyeSBvYmplY3QgY29udGFpbmluZwotICAgICAgYWxsIG9mIHRoZSBgbGlgIGVsZW1lbnRzIGlu
c2lkZSB0aGUgRE9NIGVsZW1lbnQgb2YgdGhpcyB2aWV3LgotICAgICAgIEBtZXRob2QgJAotICAg
ICAgQHBhcmFtIHtTdHJpbmd9IFtzZWxlY3Rvcl0gYSBqUXVlcnktY29tcGF0aWJsZSBzZWxlY3Rv
ciBzdHJpbmcKLSAgICAgIEByZXR1cm4ge2pRdWVyeX0gdGhlIGpRdWVyeSBvYmplY3QgZm9yIHRo
ZSBET00gbm9kZQotICAgICAgQHB1YmxpYwotICAgICovCi0gICAgJDogZnVuY3Rpb24gKHNlbCkg
ewotICAgICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ1lvdSBjYW5ub3QgYWNjZXNzIHRoaXMu
JCgpIG9uIGEgY29tcG9uZW50IHdpdGggYHRhZ05hbWU6IFwnXCdgIHNwZWNpZmllZC4nLCB0aGlz
LnRhZ05hbWUgIT09ICcnKTsKLSAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50U3RhdGUuJCh0aGlz
LCBzZWwpOwotICAgIH0sCi0KLSAgICBmb3JFYWNoQ2hpbGRWaWV3OiBmdW5jdGlvbiAoY2FsbGJh
Y2spIHsKLSAgICAgIHZhciBjaGlsZFZpZXdzID0gdGhpcy5jaGlsZFZpZXdzOwotCi0gICAgICBp
ZiAoIWNoaWxkVmlld3MpIHsKLSAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICB9Ci0KLSAgICAg
IHZhciBsZW4gPSBjaGlsZFZpZXdzLmxlbmd0aDsKLSAgICAgIHZhciB2aWV3LCBpZHg7Ci0KLSAg
ICAgIGZvciAoaWR4ID0gMDsgaWR4IDwgbGVuOyBpZHgrKykgewotICAgICAgICB2aWV3ID0gY2hp
bGRWaWV3c1tpZHhdOwotICAgICAgICBjYWxsYmFjayh2aWV3KTsKLSAgICAgIH0KLQotICAgICAg
cmV0dXJuIHRoaXM7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAgQXBwZW5kcyB0aGUgdmlldydz
IGVsZW1lbnQgdG8gdGhlIHNwZWNpZmllZCBwYXJlbnQgZWxlbWVudC4KLSAgICAgICBJZiB0aGUg
dmlldyBkb2VzIG5vdCBoYXZlIGFuIEhUTUwgcmVwcmVzZW50YXRpb24geWV0LCBgY3JlYXRlRWxl
bWVudCgpYAotICAgICAgd2lsbCBiZSBjYWxsZWQgYXV0b21hdGljYWxseS4KLSAgICAgICBOb3Rl
IHRoYXQgdGhpcyBtZXRob2QganVzdCBzY2hlZHVsZXMgdGhlIHZpZXcgdG8gYmUgYXBwZW5kZWQ7
IHRoZSBET00KLSAgICAgIGVsZW1lbnQgd2lsbCBub3QgYmUgYXBwZW5kZWQgdG8gdGhlIGdpdmVu
IGVsZW1lbnQgdW50aWwgYWxsIGJpbmRpbmdzIGhhdmUKLSAgICAgIGZpbmlzaGVkIHN5bmNocm9u
aXppbmcuCi0gICAgICAgVGhpcyBpcyBub3QgdHlwaWNhbGx5IGEgZnVuY3Rpb24gdGhhdCB5b3Ug
d2lsbCBuZWVkIHRvIGNhbGwgZGlyZWN0bHkgd2hlbgotICAgICAgYnVpbGRpbmcgeW91ciBhcHBs
aWNhdGlvbi4gSWYgeW91IGRvIG5lZWQgdG8gdXNlIGBhcHBlbmRUb2AsIGJlIHN1cmUgdGhhdAot
ICAgICAgdGhlIHRhcmdldCBlbGVtZW50IHlvdSBhcmUgcHJvdmlkaW5nIGlzIGFzc29jaWF0ZWQg
d2l0aCBhbiBgRW1iZXIuQXBwbGljYXRpb25gCi0gICAgICBhbmQgZG9lcyBub3QgaGF2ZSBhbiBh
bmNlc3RvciBlbGVtZW50IHRoYXQgaXMgYXNzb2NpYXRlZCB3aXRoIGFuIEVtYmVyIHZpZXcuCi0g
ICAgICAgQG1ldGhvZCBhcHBlbmRUbwotICAgICAgQHBhcmFtIHtTdHJpbmd8RE9NRWxlbWVudHxq
UXVlcnl9IEEgc2VsZWN0b3IsIGVsZW1lbnQsIEhUTUwgc3RyaW5nLCBvciBqUXVlcnkgb2JqZWN0
Ci0gICAgICBAcmV0dXJuIHtFbWJlci5WaWV3fSByZWNlaXZlcgotICAgICAgQHByaXZhdGUKLSAg
ICAqLwotICAgIGFwcGVuZFRvOiBmdW5jdGlvbiAoc2VsZWN0b3IpIHsKLSAgICAgIHZhciAkID0g
dGhpcy5fZW52aXJvbm1lbnQgPyB0aGlzLl9lbnZpcm9ubWVudC5vcHRpb25zLmpRdWVyeSA6IF9l
bWJlclZpZXdzU3lzdGVtSnF1ZXJ5LmRlZmF1bHQ7Ci0KLSAgICAgIGlmICgkKSB7Ci0gICAgICAg
IHZhciB0YXJnZXQgPSAkKHNlbGVjdG9yKTsKLQotICAgICAgICBfZW1iZXJNZXRhbERlYnVnLmFz
c2VydCgnWW91IHRyaWVkIHRvIGFwcGVuZCB0byAoJyArIHNlbGVjdG9yICsgJykgYnV0IHRoYXQg
aXNuXCd0IGluIHRoZSBET00nLCB0YXJnZXQubGVuZ3RoID4gMCk7Ci0gICAgICAgIF9lbWJlck1l
dGFsRGVidWcuYXNzZXJ0KCdZb3UgY2Fubm90IGFwcGVuZCB0byBhbiBleGlzdGluZyBFbWJlci5W
aWV3LicsICF0YXJnZXQuaXMoJy5lbWJlci12aWV3JykgJiYgIXRhcmdldC5wYXJlbnRzKCkuaXMo
Jy5lbWJlci12aWV3JykpOwotCi0gICAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kVG8odGhpcywg
dGFyZ2V0WzBdKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHZhciB0YXJnZXQgPSBzZWxlY3Rv
cjsKLQotICAgICAgICBfZW1iZXJNZXRhbERlYnVnLmFzc2VydCgnWW91IHRyaWVkIHRvIGFwcGVu
ZCB0byBhIHNlbGVjdG9yIHN0cmluZyAoJyArIHNlbGVjdG9yICsgJykgaW4gYW4gZW52aXJvbm1l
bnQgd2l0aG91dCBqUXVlcnknLCB0eXBlb2YgdGFyZ2V0ICE9PSAnc3RyaW5nJyk7Ci0gICAgICAg
IF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0KCdZb3UgdHJpZWQgdG8gYXBwZW5kIHRvIGEgbm9uLUVs
ZW1lbnQgKCcgKyBzZWxlY3RvciArICcpIGluIGFuIGVudmlyb25tZW50IHdpdGhvdXQgalF1ZXJ5
JywgdHlwZW9mIHNlbGVjdG9yLmFwcGVuZENoaWxkID09PSAnZnVuY3Rpb24nKTsKLQotICAgICAg
ICB0aGlzLnJlbmRlcmVyLmFwcGVuZFRvKHRoaXMsIHRhcmdldCk7Ci0gICAgICB9Ci0KLSAgICAg
IHJldHVybiB0aGlzOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgIEBwcml2YXRlCi0gICAgICAg
Q3JlYXRlcyBhIG5ldyBET00gZWxlbWVudCwgcmVuZGVycyB0aGUgdmlldyBpbnRvIGl0LCB0aGVu
IHJldHVybnMgdGhlCi0gICAgICBlbGVtZW50LgotICAgICAgIEJ5IGRlZmF1bHQsIHRoZSBlbGVt
ZW50IGNyZWF0ZWQgYW5kIHJlbmRlcmVkIGludG8gd2lsbCBiZSBhIGBCT0RZYCBlbGVtZW50LAot
ICAgICAgc2luY2UgdGhpcyBpcyB0aGUgZGVmYXVsdCBjb250ZXh0IHRoYXQgdmlld3MgYXJlIHJl
bmRlcmVkIGludG8gd2hlbiBiZWluZwotICAgICAgaW5zZXJ0ZWQgZGlyZWN0bHkgaW50byB0aGUg
RE9NLgotICAgICAgIGBgYGpzCi0gICAgICB2YXIgZWxlbWVudCA9IHZpZXcucmVuZGVyVG9FbGVt
ZW50KCk7Ci0gICAgICBlbGVtZW50LnRhZ05hbWU7IC8vID0+ICJCT0RZIgotICAgICAgYGBgCi0g
ICAgICAgWW91IGNhbiBvdmVycmlkZSB0aGUga2luZCBvZiBlbGVtZW50IHJlbmRlcmVkIGludG8g
YW5kIHJldHVybmVkIGJ5Ci0gICAgICBzcGVjaWZ5aW5nIGFuIG9wdGlvbmFsIHRhZyBuYW1lIGFz
IHRoZSBmaXJzdCBhcmd1bWVudC4KLSAgICAgICBgYGBqcwotICAgICAgdmFyIGVsZW1lbnQgPSB2
aWV3LnJlbmRlclRvRWxlbWVudCgndGFibGUnKTsKLSAgICAgIGVsZW1lbnQudGFnTmFtZTsgLy8g
PT4gIlRBQkxFIgotICAgICAgYGBgCi0gICAgICAgVGhpcyBtZXRob2QgaXMgdXNlZnVsIGlmIHlv
dSB3YW50IHRvIHJlbmRlciB0aGUgdmlldyBpbnRvIGFuIGVsZW1lbnQgdGhhdAotICAgICAgaXMg
bm90IGluIHRoZSBkb2N1bWVudCdzIGJvZHkuIEluc3RlYWQsIGEgbmV3IGBib2R5YCBlbGVtZW50
LCBkZXRhY2hlZCBmcm9tCi0gICAgICB0aGUgRE9NIGlzIHJldHVybmVkLiBGYXN0Qm9vdCB1c2Vz
IHRoaXMgdG8gc2VyaWFsaXplIHRoZSByZW5kZXJlZCB2aWV3IGludG8KLSAgICAgIGEgc3RyaW5n
IGZvciB0cmFuc21pc3Npb24gb3ZlciB0aGUgbmV0d29yay4KLSAgICAgICBgYGBqcwotICAgICAg
YXBwLnZpc2l0KCcvJykudGhlbihmdW5jdGlvbihpbnN0YW5jZSkgewotICAgICAgICB2YXIgZWxl
bWVudDsKLSAgICAgICAgRW1iZXIucnVuKGZ1bmN0aW9uKCkgewotICAgICAgICAgIGVsZW1lbnQg
PSByZW5kZXJUb0VsZW1lbnQoaW5zdGFuY2UpOwotICAgICAgICB9KTsKLSAgICAgICAgIHJlcy5z
ZW5kKHNlcmlhbGl6ZShlbGVtZW50KSk7Ci0gICAgICB9KTsKLSAgICAgIGBgYAotICAgICAgIEBt
ZXRob2QgcmVuZGVyVG9FbGVtZW50Ci0gICAgICBAcGFyYW0ge1N0cmluZ30gdGFnTmFtZSBUaGUg
dGFnIG9mIHRoZSBlbGVtZW50IHRvIGNyZWF0ZSBhbmQgcmVuZGVyIGludG8uIERlZmF1bHRzIHRv
ICJib2R5Ii4KLSAgICAgIEByZXR1cm4ge0hUTUxCb2R5RWxlbWVudH0gZWxlbWVudAotICAgICAg
QHByaXZhdGUKLSAgICAqLwotICAgIHJlbmRlclRvRWxlbWVudDogZnVuY3Rpb24gKHRhZ05hbWUp
IHsKLSAgICAgIHRhZ05hbWUgPSB0YWdOYW1lIHx8ICdib2R5JzsKLQotICAgICAgdmFyIGVsZW1l
bnQgPSB0aGlzLnJlbmRlcmVyLl9kb20uY3JlYXRlRWxlbWVudCh0YWdOYW1lKTsKLQotICAgICAg
dGhpcy5yZW5kZXJlci5hcHBlbmRUbyh0aGlzLCBlbGVtZW50KTsKLSAgICAgIHJldHVybiBlbGVt
ZW50OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgIFJlcGxhY2VzIHRoZSBjb250ZW50IG9mIHRo
ZSBzcGVjaWZpZWQgcGFyZW50IGVsZW1lbnQgd2l0aCB0aGlzIHZpZXcncwotICAgICAgZWxlbWVu
dC4gSWYgdGhlIHZpZXcgZG9lcyBub3QgaGF2ZSBhbiBIVE1MIHJlcHJlc2VudGF0aW9uIHlldCwK
LSAgICAgIHRoZSBlbGVtZW50IHdpbGwgYmUgZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkuCi0gICAg
ICAgTm90ZSB0aGF0IHRoaXMgbWV0aG9kIGp1c3Qgc2NoZWR1bGVzIHRoZSB2aWV3IHRvIGJlIGFw
cGVuZGVkOyB0aGUgRE9NCi0gICAgICBlbGVtZW50IHdpbGwgbm90IGJlIGFwcGVuZGVkIHRvIHRo
ZSBnaXZlbiBlbGVtZW50IHVudGlsIGFsbCBiaW5kaW5ncyBoYXZlCi0gICAgICBmaW5pc2hlZCBz
eW5jaHJvbml6aW5nCi0gICAgICAgQG1ldGhvZCByZXBsYWNlSW4KLSAgICAgIEBwYXJhbSB7U3Ry
aW5nfERPTUVsZW1lbnR8alF1ZXJ5fSB0YXJnZXQgQSBzZWxlY3RvciwgZWxlbWVudCwgSFRNTCBz
dHJpbmcsIG9yIGpRdWVyeSBvYmplY3QKLSAgICAgIEByZXR1cm4ge0VtYmVyLlZpZXd9IHJlY2Vp
dmVkCi0gICAgICBAcHJpdmF0ZQotICAgICovCi0gICAgcmVwbGFjZUluOiBmdW5jdGlvbiAoc2Vs
ZWN0b3IpIHsKLSAgICAgIHZhciB0YXJnZXQgPSBfZW1iZXJWaWV3c1N5c3RlbUpxdWVyeS5kZWZh
dWx0KHNlbGVjdG9yKTsKLQotICAgICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ1lvdSB0cmll
ZCB0byByZXBsYWNlIGluICgnICsgc2VsZWN0b3IgKyAnKSBidXQgdGhhdCBpc25cJ3QgaW4gdGhl
IERPTScsIHRhcmdldC5sZW5ndGggPiAwKTsKLSAgICAgIF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0
KCdZb3UgY2Fubm90IHJlcGxhY2UgYW4gZXhpc3RpbmcgRW1iZXIuVmlldy4nLCAhdGFyZ2V0Lmlz
KCcuZW1iZXItdmlldycpICYmICF0YXJnZXQucGFyZW50cygpLmlzKCcuZW1iZXItdmlldycpKTsK
LQotICAgICAgdGhpcy5yZW5kZXJlci5yZXBsYWNlSW4odGhpcywgdGFyZ2V0WzBdKTsKLQotICAg
ICAgcmV0dXJuIHRoaXM7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAgQXBwZW5kcyB0aGUgdmll
dydzIGVsZW1lbnQgdG8gdGhlIGRvY3VtZW50IGJvZHkuIElmIHRoZSB2aWV3IGRvZXMKLSAgICAg
IG5vdCBoYXZlIGFuIEhUTUwgcmVwcmVzZW50YXRpb24geWV0Ci0gICAgICB0aGUgZWxlbWVudCB3
aWxsIGJlIGdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5LgotICAgICAgIElmIHlvdXIgYXBwbGljYXRp
b24gdXNlcyB0aGUgYHJvb3RFbGVtZW50YCBwcm9wZXJ0eSwgeW91IG11c3QgYXBwZW5kCi0gICAg
ICB0aGUgdmlldyB3aXRoaW4gdGhhdCBlbGVtZW50LiBSZW5kZXJpbmcgdmlld3Mgb3V0c2lkZSBv
ZiB0aGUgYHJvb3RFbGVtZW50YAotICAgICAgaXMgbm90IHN1cHBvcnRlZC4KLSAgICAgICBOb3Rl
IHRoYXQgdGhpcyBtZXRob2QganVzdCBzY2hlZHVsZXMgdGhlIHZpZXcgdG8gYmUgYXBwZW5kZWQ7
IHRoZSBET00KLSAgICAgIGVsZW1lbnQgd2lsbCBub3QgYmUgYXBwZW5kZWQgdG8gdGhlIGRvY3Vt
ZW50IGJvZHkgdW50aWwgYWxsIGJpbmRpbmdzIGhhdmUKLSAgICAgIGZpbmlzaGVkIHN5bmNocm9u
aXppbmcuCi0gICAgICAgQG1ldGhvZCBhcHBlbmQKLSAgICAgIEByZXR1cm4ge0VtYmVyLlZpZXd9
IHJlY2VpdmVyCi0gICAgICBAcHJpdmF0ZQotICAgICovCi0gICAgYXBwZW5kOiBmdW5jdGlvbiAo
KSB7Ci0gICAgICByZXR1cm4gdGhpcy5hcHBlbmRUbyhkb2N1bWVudC5ib2R5KTsKLSAgICB9LAot
Ci0gICAgLyoqCi0gICAgICBSZW1vdmVzIHRoZSB2aWV3J3MgZWxlbWVudCBmcm9tIHRoZSBlbGVt
ZW50IHRvIHdoaWNoIGl0IGlzIGF0dGFjaGVkLgotICAgICAgIEBtZXRob2QgcmVtb3ZlCi0gICAg
ICBAcmV0dXJuIHtFbWJlci5WaWV3fSByZWNlaXZlcgotICAgICAgQHByaXZhdGUKLSAgICAqLwot
ICAgIHJlbW92ZTogZnVuY3Rpb24gKCkgewotICAgICAgLy8gV2hhdCB3ZSBzaG91bGQgcmVhbGx5
IGRvIGhlcmUgaXMgd2FpdCB1bnRpbCB0aGUgZW5kIG9mIHRoZSBydW4gbG9vcAotICAgICAgLy8g
dG8gZGV0ZXJtaW5lIGlmIHRoZSBlbGVtZW50IGhhcyBiZWVuIHJlLWFwcGVuZGVkIHRvIGEgZGlm
ZmVyZW50Ci0gICAgICAvLyBlbGVtZW50LgotICAgICAgLy8gSW4gdGhlIGludGVyaW0sIHdlIHdp
bGwganVzdCByZS1yZW5kZXIgaWYgdGhhdCBoYXBwZW5zLiBJdCBpcyBtb3JlCi0gICAgICAvLyBp
bXBvcnRhbnQgdGhhbiBlbGVtZW50cyBnZXQgZ2FyYmFnZSBjb2xsZWN0ZWQuCi0gICAgICBpZiAo
IXRoaXMucmVtb3ZlZEZyb21ET00pIHsKLSAgICAgICAgdGhpcy5kZXN0cm95RWxlbWVudCgpOwot
ICAgICAgfQotCi0gICAgICAvLyBTZXQgZmxhZyB0byBhdm9pZCBmdXR1cmUgcmVuZGVycwotICAg
ICAgdGhpcy5fd2lsbEluc2VydCA9IGZhbHNlOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgIFRo
ZSBIVE1MIGBpZGAgb2YgdGhlIHZpZXcncyBlbGVtZW50IGluIHRoZSBET00uIFlvdSBjYW4gcHJv
dmlkZSB0aGlzCi0gICAgICB2YWx1ZSB5b3Vyc2VsZiBidXQgaXQgbXVzdCBiZSB1bmlxdWUgKGp1
c3QgYXMgaW4gSFRNTCk6Ci0gICAgICAgYGBgaGFuZGxlYmFycwotICAgICAgICB7e215LWNvbXBv
bmVudCBlbGVtZW50SWQ9ImEtcmVhbGx5LWNvb2wtaWQifX0KLSAgICAgIGBgYAotICAgICAgIElm
IG5vdCBtYW51YWxseSBzZXQgYSBkZWZhdWx0IHZhbHVlIHdpbGwgYmUgcHJvdmlkZWQgYnkgdGhl
IGZyYW1ld29yay4KLSAgICAgICBPbmNlIHJlbmRlcmVkIGFuIGVsZW1lbnQncyBgZWxlbWVudElk
YCBpcyBjb25zaWRlcmVkIGltbXV0YWJsZSBhbmQgeW91Ci0gICAgICBzaG91bGQgbmV2ZXIgY2hh
bmdlIGl0LiBJZiB5b3UgbmVlZCB0byBjb21wdXRlIGEgZHluYW1pYyB2YWx1ZSBmb3IgdGhlCi0g
ICAgICBgZWxlbWVudElkYCwgeW91IHNob3VsZCBkbyB0aGlzIHdoZW4gdGhlIGNvbXBvbmVudCBv
ciBlbGVtZW50IGlzIGJlaW5nCi0gICAgICBpbnN0YW50aWF0ZWQ6Ci0gICAgICAgYGBgamF2YXNj
cmlwdAotICAgICAgICBleHBvcnQgZGVmYXVsdCBFbWJlci5Db21wb25lbnQuZXh0ZW5kKHsKLSAg
ICAgICAgICBzZXRFbGVtZW50SWQ6IEVtYmVyLm9uKCdpbml0JywgZnVuY3Rpb24oKSB7Ci0gICAg
ICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmdldCgnaW5kZXgnKTsKLSAgICAgICAgICAgIHRoaXMu
c2V0KCdlbGVtZW50SWQnLCAnY29tcG9uZW50LWlkJyArIGluZGV4KTsKLSAgICAgICAgICB9KQot
ICAgICAgICB9KTsKLSAgICAgIGBgYAotICAgICAgIEBwcm9wZXJ0eSBlbGVtZW50SWQKLSAgICAg
IEB0eXBlIFN0cmluZwotICAgICAgQHB1YmxpYwotICAgICovCi0gICAgZWxlbWVudElkOiBudWxs
LAotCi0gICAgLyoqCi0gICAgICBBdHRlbXB0cyB0byBkaXNjb3ZlciB0aGUgZWxlbWVudCBpbiB0
aGUgcGFyZW50IGVsZW1lbnQuIFRoZSBkZWZhdWx0Ci0gICAgICBpbXBsZW1lbnRhdGlvbiBsb29r
cyBmb3IgYW4gZWxlbWVudCB3aXRoIGFuIElEIG9mIGBlbGVtZW50SWRgIChvciB0aGUKLSAgICAg
IHZpZXcncyBndWlkIGlmIGBlbGVtZW50SWRgIGlzIG51bGwpLiBZb3UgY2FuIG92ZXJyaWRlIHRo
aXMgbWV0aG9kIHRvCi0gICAgICBwcm92aWRlIHlvdXIgb3duIGZvcm0gb2YgbG9va3VwLiBGb3Ig
ZXhhbXBsZSwgaWYgeW91IHdhbnQgdG8gZGlzY292ZXIgeW91cgotICAgICAgZWxlbWVudCB1c2lu
ZyBhIENTUyBjbGFzcyBuYW1lIGluc3RlYWQgb2YgYW4gSUQuCi0gICAgICAgQG1ldGhvZCBmaW5k
RWxlbWVudEluUGFyZW50RWxlbWVudAotICAgICAgQHBhcmFtIHtET01FbGVtZW50fSBwYXJlbnRF
bGVtZW50IFRoZSBwYXJlbnQncyBET00gZWxlbWVudAotICAgICAgQHJldHVybiB7RE9NRWxlbWVu
dH0gVGhlIGRpc2NvdmVyZWQgZWxlbWVudAotICAgICAgQHByaXZhdGUKLSAgICAqLwotICAgIGZp
bmRFbGVtZW50SW5QYXJlbnRFbGVtZW50OiBmdW5jdGlvbiAocGFyZW50RWxlbSkgewotICAgICAg
dmFyIGlkID0gJyMnICsgdGhpcy5lbGVtZW50SWQ7Ci0gICAgICByZXR1cm4gX2VtYmVyVmlld3NT
eXN0ZW1KcXVlcnkuZGVmYXVsdChpZClbMF0gfHwgX2VtYmVyVmlld3NTeXN0ZW1KcXVlcnkuZGVm
YXVsdChpZCwgcGFyZW50RWxlbSlbMF07Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAgQ3JlYXRl
cyBhIERPTSByZXByZXNlbnRhdGlvbiBvZiB0aGUgdmlldyBhbmQgYWxsIG9mIGl0cyBjaGlsZCB2
aWV3cyBieQotICAgICAgcmVjdXJzaXZlbHkgY2FsbGluZyB0aGUgYHJlbmRlcigpYCBtZXRob2Qu
IE9uY2UgdGhlIGVsZW1lbnQgaXMgY3JlYXRlZCwKLSAgICAgIGl0IHNldHMgdGhlIGBlbGVtZW50
YCBwcm9wZXJ0eSBvZiB0aGUgdmlldyB0byB0aGUgcmVuZGVyZWQgZWxlbWVudC4KLSAgICAgICBB
ZnRlciB0aGUgZWxlbWVudCBoYXMgYmVlbiBpbnNlcnRlZCBpbnRvIHRoZSBET00sIGBkaWRJbnNl
cnRFbGVtZW50YCB3aWxsCi0gICAgICBiZSBjYWxsZWQgb24gdGhpcyB2aWV3IGFuZCBhbGwgb2Yg
aXRzIGNoaWxkIHZpZXdzLgotICAgICAgIEBtZXRob2QgY3JlYXRlRWxlbWVudAotICAgICAgQHJl
dHVybiB7RW1iZXIuVmlld30gcmVjZWl2ZXIKLSAgICAgIEBwcml2YXRlCi0gICAgKi8KLSAgICBj
cmVhdGVFbGVtZW50OiBmdW5jdGlvbiAoKSB7Ci0gICAgICBpZiAodGhpcy5lbGVtZW50KSB7Ci0g
ICAgICAgIHJldHVybiB0aGlzOwotICAgICAgfQotCi0gICAgICB0aGlzLnJlbmRlcmVyLmNyZWF0
ZUVsZW1lbnQodGhpcyk7Ci0KLSAgICAgIHJldHVybiB0aGlzOwotICAgIH0sCi0KLSAgICAvKioK
LSAgICAgIENhbGxlZCB3aGVuIGEgdmlldyBpcyBnb2luZyB0byBpbnNlcnQgYW4gZWxlbWVudCBp
bnRvIHRoZSBET00uCi0gICAgICAgQGV2ZW50IHdpbGxJbnNlcnRFbGVtZW50Ci0gICAgICBAcHVi
bGljCi0gICAgKi8KLSAgICB3aWxsSW5zZXJ0RWxlbWVudDogSywKLQotICAgIC8qKgotICAgICAg
Q2FsbGVkIHdoZW4gdGhlIGVsZW1lbnQgb2YgdGhlIHZpZXcgaGFzIGJlZW4gaW5zZXJ0ZWQgaW50
byB0aGUgRE9NCi0gICAgICBvciBhZnRlciB0aGUgdmlldyB3YXMgcmUtcmVuZGVyZWQuIE92ZXJy
aWRlIHRoaXMgZnVuY3Rpb24gdG8gZG8gYW55Ci0gICAgICBzZXQgdXAgdGhhdCByZXF1aXJlcyBh
biBlbGVtZW50IGluIHRoZSBkb2N1bWVudCBib2R5LgotICAgICAgIFdoZW4gYSB2aWV3IGhhcyBj
aGlsZHJlbiwgZGlkSW5zZXJ0RWxlbWVudCB3aWxsIGJlIGNhbGxlZCBvbiB0aGUKLSAgICAgIGNo
aWxkIHZpZXcocykgZmlyc3QsIGJ1YmJsaW5nIHVwd2FyZHMgdGhyb3VnaCB0aGUgaGllcmFyY2h5
LgotICAgICAgIEBldmVudCBkaWRJbnNlcnRFbGVtZW50Ci0gICAgICBAcHVibGljCi0gICAgKi8K
LSAgICBkaWRJbnNlcnRFbGVtZW50OiBLLAotCi0gICAgLyoqCi0gICAgICBDYWxsZWQgd2hlbiB0
aGUgdmlldyBpcyBhYm91dCB0byByZXJlbmRlciwgYnV0IGJlZm9yZSBhbnl0aGluZyBoYXMKLSAg
ICAgIGJlZW4gdG9ybiBkb3duLiBUaGlzIGlzIGEgZ29vZCBvcHBvcnR1bml0eSB0byB0ZWFyIGRv
d24gYW55IG1hbnVhbAotICAgICAgb2JzZXJ2ZXJzIHlvdSBoYXZlIGluc3RhbGxlZCBiYXNlZCBv
biB0aGUgRE9NIHN0YXRlCi0gICAgICAgQGV2ZW50IHdpbGxDbGVhclJlbmRlcgotICAgICAgQHB1
YmxpYwotICAgICovCi0gICAgd2lsbENsZWFyUmVuZGVyOiBLLAotCi0gICAgLyoqCi0gICAgICBE
ZXN0cm95cyBhbnkgZXhpc3RpbmcgZWxlbWVudCBhbG9uZyB3aXRoIHRoZSBlbGVtZW50IGZvciBh
bnkgY2hpbGQgdmlld3MKLSAgICAgIGFzIHdlbGwuIElmIHRoZSB2aWV3IGRvZXMgbm90IGN1cnJl
bnRseSBoYXZlIGEgZWxlbWVudCwgdGhlbiB0aGlzIG1ldGhvZAotICAgICAgd2lsbCBkbyBub3Ro
aW5nLgotICAgICAgIElmIHlvdSBpbXBsZW1lbnQgYHdpbGxEZXN0cm95RWxlbWVudCgpYCBvbiB5
b3VyIHZpZXcsIHRoZW4gdGhpcyBtZXRob2Qgd2lsbAotICAgICAgYmUgaW52b2tlZCBvbiB5b3Vy
IHZpZXcgYmVmb3JlIHlvdXIgZWxlbWVudCBpcyBkZXN0cm95ZWQgdG8gZ2l2ZSB5b3UgYQotICAg
ICAgY2hhbmNlIHRvIGNsZWFuIHVwIGFueSBldmVudCBoYW5kbGVycywgZXRjLgotICAgICAgIElm
IHlvdSB3cml0ZSBhIGB3aWxsRGVzdHJveUVsZW1lbnQoKWAgaGFuZGxlciwgeW91IGNhbiBhc3N1
bWUgdGhhdCB5b3VyCi0gICAgICBgZGlkSW5zZXJ0RWxlbWVudCgpYCBoYW5kbGVyIHdhcyBjYWxs
ZWQgZWFybGllciBmb3IgdGhlIHNhbWUgZWxlbWVudC4KLSAgICAgICBZb3Ugc2hvdWxkIG5vdCBj
YWxsIG9yIG92ZXJyaWRlIHRoaXMgbWV0aG9kIHlvdXJzZWxmLCBidXQgeW91IG1heQotICAgICAg
d2FudCB0byBpbXBsZW1lbnQgdGhlIGFib3ZlIGNhbGxiYWNrcy4KLSAgICAgICBAbWV0aG9kIGRl
c3Ryb3lFbGVtZW50Ci0gICAgICBAcmV0dXJuIHtFbWJlci5WaWV3fSByZWNlaXZlcgotICAgICAg
QHByaXZhdGUKLSAgICAqLwotICAgIGRlc3Ryb3lFbGVtZW50OiBmdW5jdGlvbiAoKSB7Ci0gICAg
ICByZXR1cm4gdGhpcy5fY3VycmVudFN0YXRlLmRlc3Ryb3lFbGVtZW50KHRoaXMpOwotICAgIH0s
Ci0KLSAgICAvKioKLSAgICAgIENhbGxlZCB3aGVuIHRoZSBlbGVtZW50IG9mIHRoZSB2aWV3IGlz
IGdvaW5nIHRvIGJlIGRlc3Ryb3llZC4gT3ZlcnJpZGUKLSAgICAgIHRoaXMgZnVuY3Rpb24gdG8g
ZG8gYW55IHRlYXJkb3duIHRoYXQgcmVxdWlyZXMgYW4gZWxlbWVudCwgbGlrZSByZW1vdmluZwot
ICAgICAgZXZlbnQgbGlzdGVuZXJzLgotICAgICAgIFBsZWFzZSBub3RlOiBhbnkgcHJvcGVydHkg
Y2hhbmdlcyBtYWRlIGR1cmluZyB0aGlzIGV2ZW50IHdpbGwgaGF2ZSBubwotICAgICAgZWZmZWN0
IG9uIG9iamVjdCBvYnNlcnZlcnMuCi0gICAgICAgQGV2ZW50IHdpbGxEZXN0cm95RWxlbWVudAot
ICAgICAgQHB1YmxpYwotICAgICovCi0gICAgd2lsbERlc3Ryb3lFbGVtZW50OiBLLAotCi0gICAg
LyoqCi0gICAgICBDYWxsZWQgd2hlbiB0aGUgcGFyZW50VmlldyBwcm9wZXJ0eSBoYXMgY2hhbmdl
ZC4KLSAgICAgICBAZXZlbnQgcGFyZW50Vmlld0RpZENoYW5nZQotICAgICAgQHByaXZhdGUKLSAg
ICAqLwotICAgIHBhcmVudFZpZXdEaWRDaGFuZ2U6IEssCi0KLSAgICAvLyAuLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0gICAgLy8gU1RB
TkRBUkQgUkVOREVSIFBST1BFUlRJRVMKLSAgICAvLwotCi0gICAgLyoqCi0gICAgICBUYWcgbmFt
ZSBmb3IgdGhlIHZpZXcncyBvdXRlciBlbGVtZW50LiBUaGUgdGFnIG5hbWUgaXMgb25seSB1c2Vk
IHdoZW4gYW4KLSAgICAgIGVsZW1lbnQgaXMgZmlyc3QgY3JlYXRlZC4gSWYgeW91IGNoYW5nZSB0
aGUgYHRhZ05hbWVgIGZvciBhbiBlbGVtZW50LCB5b3UKLSAgICAgIG11c3QgZGVzdHJveSBhbmQg
cmVjcmVhdGUgdGhlIHZpZXcgZWxlbWVudC4KLSAgICAgICBCeSBkZWZhdWx0LCB0aGUgcmVuZGVy
IGJ1ZmZlciB3aWxsIHVzZSBhIGA8ZGl2PmAgdGFnIGZvciB2aWV3cy4KLSAgICAgICBAcHJvcGVy
dHkgdGFnTmFtZQotICAgICAgQHR5cGUgU3RyaW5nCi0gICAgICBAZGVmYXVsdCBudWxsCi0gICAg
ICBAcHVibGljCi0gICAgKi8KLQotICAgIC8vIFdlIGxlYXZlIHRoaXMgbnVsbCBieSBkZWZhdWx0
IHNvIHdlIGNhbiB0ZWxsIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4KLSAgICAvLyB0aGUgZGVmYXVs
dCBjYXNlIGFuZCBhIHVzZXItc3BlY2lmaWVkIHRhZy4KLSAgICB0YWdOYW1lOiBudWxsLAotCi0g
ICAgLyoKLSAgICAgIFVzZWQgdG8gc3BlY2lmeSBhIGRlZmF1bHQgdGFnTmFtZSB0aGF0IGNhbiBi
ZSBvdmVycmlkZGVuIHdoZW4gZXh0ZW5kaW5nCi0gICAgICBvciBpbnZva2luZyBmcm9tIGEgdGVt
cGxhdGUuCi0gICAgICAgQHByb3BlcnR5IF9kZWZhdWx0VGFnTmFtZQotICAgICAgQHByaXZhdGUK
LSAgICAqLwotCi0gICAgLyoqCi0gICAgICBOb3JtYWxseSwgRW1iZXIncyBjb21wb25lbnQgbW9k
ZWwgaXMgIndyaXRlLW9ubHkiLiBUaGUgY29tcG9uZW50IHRha2VzIGEKLSAgICAgIGJ1bmNoIG9m
IGF0dHJpYnV0ZXMgdGhhdCBpdCBnb3QgcGFzc2VkIGluLCBhbmQgdXNlcyB0aGVtIHRvIHJlbmRl
ciBpdHMKLSAgICAgIHRlbXBsYXRlLgotICAgICAgIE9uZSBuaWNlIHRoaW5nIGFib3V0IHRoaXMg
bW9kZWwgaXMgdGhhdCBpZiB5b3UgdHJ5IHRvIHNldCBhIHZhbHVlIHRvIHRoZQotICAgICAgc2Ft
ZSB0aGluZyBhcyBsYXN0IHRpbWUsIEVtYmVyICh0aHJvdWdoIEhUTUxCYXJzKSB3aWxsIGF2b2lk
IGRvaW5nIGFueQotICAgICAgd29yayBvbiB0aGUgRE9NLgotICAgICAgIFRoaXMgaXMgbm90IGp1
c3QgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24uIElmIGFuIGF0dHJpYnV0ZSBoYXMgbm90Ci0g
ICAgICBjaGFuZ2VkLCBpdCBpcyBpbXBvcnRhbnQgbm90IHRvIGNsb2JiZXIgdGhlIGVsZW1lbnQn
cyAiaGlkZGVuIHN0YXRlIi4KLSAgICAgIEZvciBleGFtcGxlLCBpZiB5b3Ugc2V0IGFuIGlucHV0
J3MgYHZhbHVlYCB0byB0aGUgc2FtZSB2YWx1ZSBhcyBiZWZvcmUsCi0gICAgICBpdCB3aWxsIGNs
b2JiZXIgc2VsZWN0aW9uIHN0YXRlIGFuZCBjdXJzb3IgcG9zaXRpb24uIEluIG90aGVyIHdvcmRz
LAotICAgICAgc2V0dGluZyBhbiBhdHRyaWJ1dGUgaXMgbm90ICoqYWx3YXlzKiogaWRlbXBvdGVu
dC4KLSAgICAgICBUaGlzIG1ldGhvZCBwcm92aWRlcyBhIHdheSB0byByZWFkIGFuIGVsZW1lbnQn
cyBhdHRyaWJ1dGUgYW5kIGFsc28KLSAgICAgIHVwZGF0ZSB0aGUgbGFzdCB2YWx1ZSBFbWJlciBr
bm93cyBhYm91dCBhdCB0aGUgc2FtZSB0aW1lLiBUaGlzIG1ha2VzCi0gICAgICBzZXR0aW5nIGFu
IGF0dHJpYnV0ZSBpZGVtcG90ZW50LgotICAgICAgIEluIHBhcnRpY3VsYXIsIHdoYXQgdGhpcyBt
ZWFucyBpcyB0aGF0IGlmIHlvdSBnZXQgYW4gYDxpbnB1dD5gIGVsZW1lbnQncwotICAgICAgYHZh
bHVlYCBhdHRyaWJ1dGUgYW5kIHRoZW4gcmUtcmVuZGVyIHRoZSB0ZW1wbGF0ZSB3aXRoIHRoZSBz
YW1lIHZhbHVlLAotICAgICAgaXQgd2lsbCBhdm9pZCBjbG9iYmVyaW5nIHRoZSBjdXJzb3IgYW5k
IHNlbGVjdGlvbiBwb3NpdGlvbi4KLSAgICAgICBTaW5jZSBtb3N0IGF0dHJpYnV0ZSBzZXRzIGFy
ZSBpZGVtcG90ZW50IGluIHRoZSBicm93c2VyLCB5b3UgdHlwaWNhbGx5Ci0gICAgICBjYW4gZ2V0
IGF3YXkgd2l0aCByZWFkaW5nIGF0dHJpYnV0ZXMgdXNpbmcgalF1ZXJ5LCBidXQgdGhlIG1vc3Qg
cmVsaWFibGUKLSAgICAgIHdheSB0byBkbyBzbyBpcyB0aHJvdWdoIHRoaXMgbWV0aG9kLgotICAg
ICAgIEBtZXRob2QgcmVhZERPTUF0dHIKLSAgICAgIEBwYXJhbSB7U3RyaW5nfSBuYW1lIHRoZSBu
YW1lIG9mIHRoZSBhdHRyaWJ1dGUKLSAgICAgIEByZXR1cm4gU3RyaW5nCi0gICAgICBAcHVibGlj
Ci0gICAgKi8KLSAgICByZWFkRE9NQXR0cjogZnVuY3Rpb24gKG5hbWUpIHsKLSAgICAgIHZhciBh
dHRyID0gdGhpcy5fcmVuZGVyTm9kZS5jaGlsZE5vZGVzLmZpbHRlcihmdW5jdGlvbiAobm9kZSkg
ewotICAgICAgICByZXR1cm4gbm9kZS5hdHRyTmFtZSA9PT0gbmFtZTsKLSAgICAgIH0pWzBdOwot
ICAgICAgaWYgKCFhdHRyKSB7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgICAgfQotICAgICAg
cmV0dXJuIGF0dHIuZ2V0Q29udGVudCgpOwotICAgIH0sCi0KLSAgICAvLyAuLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0gICAgLy8gQ09SRSBE
SVNQTEFZIE1FVEhPRFMKLSAgICAvLwotCi0gICAgLyoqCi0gICAgICBTZXR1cCBhIHZpZXcsIGJ1
dCBkbyBub3QgZmluaXNoIHdha2luZyBpdCB1cC4KLSAgICAgICAqIGNvbmZpZ3VyZSBgY2hpbGRW
aWV3c2AKLSAgICAgICogcmVnaXN0ZXIgdGhlIHZpZXcgd2l0aCB0aGUgZ2xvYmFsIHZpZXdzIGhh
c2gsIHdoaWNoIGlzIHVzZWQgZm9yIGV2ZW50Ci0gICAgICAgIGRpc3BhdGNoCi0gICAgICAgQG1l
dGhvZCBpbml0Ci0gICAgICBAcHJpdmF0ZQotICAgICovCi0gICAgaW5pdDogZnVuY3Rpb24gKCkg
ewotICAgICAgdGhpcy5fc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKLQotICAgICAgaWYg
KCF0aGlzLmVsZW1lbnRJZCkgewotICAgICAgICB0aGlzLmVsZW1lbnRJZCA9IF9lbWJlck1ldGFs
VXRpbHMuZ3VpZEZvcih0aGlzKTsKLSAgICAgIH0KLQotICAgICAgdGhpcy5zY2hlZHVsZWRSZXZh
bGlkYXRpb24gPSBmYWxzZTsKLQotICAgICAgdGhpc1tJTklUX1dBU19DQUxMRURdID0gdHJ1ZTsK
LQotICAgICAgaWYgKHR5cGVvZiB0aGlzLmRpZEluaXRBdHRycyA9PT0gJ2Z1bmN0aW9uJykgewot
ICAgICAgICBfZW1iZXJNZXRhbERlYnVnLmRlcHJlY2F0ZSgnW0RFUFJFQ0FURURdIGRpZEluaXRB
dHRycyBjYWxsZWQgaW4gJyArIHRoaXMudG9TdHJpbmcoKSArICcuJywgZmFsc2UsIHsKLSAgICAg
ICAgICBpZDogJ2VtYmVyLXZpZXdzLmRpZC1pbml0LWF0dHJzJywKLSAgICAgICAgICB1bnRpbDog
JzMuMC4wJywKLSAgICAgICAgICB1cmw6ICdodHRwOi8vZW1iZXJqcy5jb20vZGVwcmVjYXRpb25z
L3YyLngjdG9jX2VtYmVyLWNvbXBvbmVudC1kaWRpbml0YXR0cnMnCi0gICAgICAgIH0pOwotICAg
ICAgfQotCi0gICAgICBfZW1iZXJNZXRhbERlYnVnLmFzc2VydCgnVXNpbmcgYSBjdXN0b20gYC5y
ZW5kZXJgIGZ1bmN0aW9uIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuJywgIXRoaXMucmVuZGVyKTsK
LSAgICB9Ci0KLSAgfSwgX01peGluJGNyZWF0ZVtfZW1iZXJSdW50aW1lU3lzdGVtQ29yZV9vYmpl
Y3QuUE9TVF9JTklUXSA9IGZ1bmN0aW9uICgpIHsKLSAgICB0aGlzLl9zdXBlci5hcHBseSh0aGlz
LCBhcmd1bWVudHMpOwotCi0gICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ1lvdSBtdXN0IGNh
bGwgYHRoaXMuX3N1cGVyKC4uLmFyZ3VtZW50cyk7YCB3aGVuIGltcGxlbWVudGluZyBgaW5pdGAg
aW4gYSBjb21wb25lbnQuIFBsZWFzZSB1cGRhdGUgJyArIHRoaXMgKyAnIHRvIGNhbGwgYHRoaXMu
X3N1cGVyYCBmcm9tIGBpbml0YC4nLCB0aGlzW0lOSVRfV0FTX0NBTExFRF0pOwotCi0gICAgdGhp
cy5yZW5kZXJlci5jb21wb25lbnRJbml0QXR0cnModGhpcywgdGhpcy5hdHRycyB8fCB7fSk7Ci0g
IH0sIF9NaXhpbiRjcmVhdGUuX19kZWZpbmVOb25FbnVtZXJhYmxlID0gZnVuY3Rpb24gKHByb3Bl
cnR5KSB7Ci0gICAgdGhpc1twcm9wZXJ0eS5uYW1lXSA9IHByb3BlcnR5LmRlc2NyaXB0b3IudmFs
dWU7Ci0gIH0sIF9NaXhpbiRjcmVhdGUucmV2YWxpZGF0ZSA9IGZ1bmN0aW9uICgpIHsKLSAgICB0
aGlzLnJlbmRlcmVyLnJldmFsaWRhdGVUb3BMZXZlbFZpZXcodGhpcyk7Ci0gICAgdGhpcy5zY2hl
ZHVsZWRSZXZhbGlkYXRpb24gPSBmYWxzZTsKLSAgfSwgX01peGluJGNyZWF0ZS5zY2hlZHVsZVJl
dmFsaWRhdGUgPSBmdW5jdGlvbiAobm9kZSwgbGFiZWwsIG1hbnVhbFJlcmVuZGVyKSB7Ci0gICAg
aWYgKG5vZGUgJiYgIXRoaXMuX2Rpc3BhdGNoaW5nICYmIHRoaXMuZW52LnJlbmRlcmVkTm9kZXMu
aGFzKG5vZGUpKSB7Ci0gICAgICBpZiAobWFudWFsUmVyZW5kZXIpIHsKLSAgICAgICAgX2VtYmVy
TWV0YWxEZWJ1Zy5kZXByZWNhdGUoJ1lvdSBtYW51YWxseSByZXJlbmRlcmVkICcgKyBsYWJlbCAr
ICcgKGEgcGFyZW50IGNvbXBvbmVudCkgZnJvbSBhIGNoaWxkIGNvbXBvbmVudCBkdXJpbmcgdGhl
IHJlbmRlcmluZyBwcm9jZXNzLiBUaGlzIHJhcmVseSB3b3JrZWQgaW4gRW1iZXIgMS54IGFuZCB3
aWxsIGJlIHJlbW92ZWQgaW4gRW1iZXIgMy4wJywgZmFsc2UsIHsgaWQ6ICdlbWJlci12aWV3cy5t
YW51YWwtcGFyZW50LXJlcmVuZGVyJywgdW50aWw6ICczLjAuMCcgfSk7Ci0gICAgICB9IGVsc2Ug
ewotICAgICAgICBfZW1iZXJNZXRhbERlYnVnLmRlcHJlY2F0ZSgnWW91IG1vZGlmaWVkICcgKyBs
YWJlbCArICcgdHdpY2UgaW4gYSBzaW5nbGUgcmVuZGVyLiBUaGlzIHdhcyB1bnJlbGlhYmxlIGlu
IEVtYmVyIDEueCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIEVtYmVyIDMuMCcsIGZhbHNlLCB7IGlk
OiAnZW1iZXItdmlld3MucmVuZGVyLWRvdWJsZS1tb2RpZnknLCB1bnRpbDogJzMuMC4wJyB9KTsK
LSAgICAgIH0KLSAgICAgIF9lbWJlck1ldGFsUnVuX2xvb3AuZGVmYXVsdC5zY2hlZHVsZU9uY2Uo
J3JlbmRlcicsIHRoaXMsIHRoaXMucmV2YWxpZGF0ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgX2VtYmVyTWV0YWxEZWJ1Zy5kZXByZWNhdGUoJ0EgcHJvcGVydHkgb2YgJyArIHRoaXMg
KyAnIHdhcyBtb2RpZmllZCBpbnNpZGUgdGhlICcgKyB0aGlzLl9kaXNwYXRjaGluZyArICcgaG9v
ay4gWW91IHNob3VsZCBuZXZlciBjaGFuZ2UgcHJvcGVydGllcyBvbiBjb21wb25lbnRzLCBzZXJ2
aWNlcyBvciBtb2RlbHMgZHVyaW5nICcgKyB0aGlzLl9kaXNwYXRjaGluZyArICcgYmVjYXVzZSBp
dCBjYXVzZXMgc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UgZGVncmFkYXRpb24uJywgIXRoaXMuX2Rp
c3BhdGNoaW5nLCB7IGlkOiAnZW1iZXItdmlld3MuZGlzcGF0Y2hpbmctbW9kaWZ5LXByb3BlcnR5
JywgdW50aWw6ICczLjAuMCcgfSk7Ci0KLSAgICBpZiAoIXRoaXMuc2NoZWR1bGVkUmV2YWxpZGF0
aW9uIHx8IHRoaXMuX2Rpc3BhdGNoaW5nKSB7Ci0gICAgICB0aGlzLnNjaGVkdWxlZFJldmFsaWRh
dGlvbiA9IHRydWU7Ci0gICAgICBfZW1iZXJNZXRhbFJ1bl9sb29wLmRlZmF1bHQuc2NoZWR1bGVP
bmNlKCdyZW5kZXInLCB0aGlzLCB0aGlzLnJldmFsaWRhdGUpOwotICAgIH0KLSAgfSwgX01peGlu
JGNyZWF0ZS50ZW1wbGF0ZVJlbmRlcmVyID0gbnVsbCwgX01peGluJGNyZWF0ZS5yZW1vdmVGcm9t
UGFyZW50ID0gZnVuY3Rpb24gKCkgewotICAgIHZhciBwYXJlbnQgPSB0aGlzLnBhcmVudFZpZXc7
Ci0KLSAgICAvLyBSZW1vdmUgRE9NIGVsZW1lbnQgZnJvbSBwYXJlbnQKLSAgICB0aGlzLnJlbW92
ZSgpOwotCi0gICAgaWYgKHBhcmVudCkgewotICAgICAgcGFyZW50LnJlbW92ZUNoaWxkKHRoaXMp
OwotICAgIH0KLSAgICByZXR1cm4gdGhpczsKLSAgfSwgX01peGluJGNyZWF0ZS5kZXN0cm95ID0g
ZnVuY3Rpb24gKCkgewotICAgIC8vIGdldCBwYXJlbnRWaWV3IGJlZm9yZSBjYWxsaW5nIHN1cGVy
IGJlY2F1c2UgaXQnbGwgYmUgZGVzdHJveWVkCi0gICAgdmFyIHBhcmVudFZpZXcgPSB0aGlzLnBh
cmVudFZpZXc7Ci0gICAgdmFyIHZpZXdOYW1lID0gdGhpcy52aWV3TmFtZTsKLQotICAgIGlmICgh
dGhpcy5fc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSkgewotICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIC8vIHJlbW92ZSBmcm9tIG5vbi12aXJ0dWFsIHBhcmVudCB2aWV3IGlmIHZpZXdO
YW1lIHdhcyBzcGVjaWZpZWQKLSAgICBpZiAodmlld05hbWUgJiYgcGFyZW50VmlldykgewotICAg
ICAgcGFyZW50Vmlldy5zZXQodmlld05hbWUsIG51bGwpOwotICAgIH0KLQotICAgIC8vIERlc3Ry
b3kgSFRNTGJhcnMgdGVtcGxhdGUKLSAgICBpZiAodGhpcy5sYXN0UmVzdWx0KSB7Ci0gICAgICB0
aGlzLmxhc3RSZXN1bHQuZGVzdHJveSgpOwotICAgIH0KLQotICAgIHJldHVybiB0aGlzOwotICB9
LCBfTWl4aW4kY3JlYXRlLmhhbmRsZUV2ZW50ID0gZnVuY3Rpb24gKGV2ZW50TmFtZSwgZXZ0KSB7
Ci0gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRTdGF0ZS5oYW5kbGVFdmVudCh0aGlzLCBldmVudE5h
bWUsIGV2dCk7Ci0gIH0sIF9NaXhpbiRjcmVhdGUuX3JlZ2lzdGVyID0gZnVuY3Rpb24gKCkgewot
ICAgIF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0KCdBdHRlbXB0ZWQgdG8gcmVnaXN0ZXIgYSB2aWV3
IHdpdGggYW4gaWQgYWxyZWFkeSBpbiB1c2U6ICcgKyB0aGlzLmVsZW1lbnRJZCwgIXRoaXMuX3Zp
ZXdSZWdpc3RyeVt0aGlzLmVsZW1lbnRJZF0pOwotICAgIHRoaXMuX3ZpZXdSZWdpc3RyeVt0aGlz
LmVsZW1lbnRJZF0gPSB0aGlzOwotICB9LCBfTWl4aW4kY3JlYXRlLl91bnJlZ2lzdGVyID0gZnVu
Y3Rpb24gKCkgewotICAgIGRlbGV0ZSB0aGlzLl92aWV3UmVnaXN0cnlbdGhpcy5lbGVtZW50SWRd
OwotICB9LCBfTWl4aW4kY3JlYXRlLnJlZ2lzdGVyT2JzZXJ2ZXIgPSBmdW5jdGlvbiAocm9vdCwg
cGF0aCwgdGFyZ2V0LCBvYnNlcnZlcikgewotICAgIGlmICghb2JzZXJ2ZXIgJiYgJ2Z1bmN0aW9u
JyA9PT0gdHlwZW9mIHRhcmdldCkgewotICAgICAgb2JzZXJ2ZXIgPSB0YXJnZXQ7Ci0gICAgICB0
YXJnZXQgPSBudWxsOwotICAgIH0KLQotICAgIGlmICghcm9vdCB8fCB0eXBlb2Ygcm9vdCAhPT0g
J29iamVjdCcpIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICB2YXIgc2NoZWR1bGVkT2Jz
ZXJ2ZXIgPSB0aGlzLl93cmFwQXNTY2hlZHVsZWQob2JzZXJ2ZXIpOwotCi0gICAgX2VtYmVyTWV0
YWxPYnNlcnZlci5hZGRPYnNlcnZlcihyb290LCBwYXRoLCB0YXJnZXQsIHNjaGVkdWxlZE9ic2Vy
dmVyKTsKLQotICAgIHRoaXMub25lKCd3aWxsQ2xlYXJSZW5kZXInLCBmdW5jdGlvbiAoKSB7Ci0g
ICAgICBfZW1iZXJNZXRhbE9ic2VydmVyLnJlbW92ZU9ic2VydmVyKHJvb3QsIHBhdGgsIHRhcmdl
dCwgc2NoZWR1bGVkT2JzZXJ2ZXIpOwotICAgIH0pOwotICB9LCBfTWl4aW4kY3JlYXRlLl93cmFw
QXNTY2hlZHVsZWQgPSBmdW5jdGlvbiAoZm4pIHsKLSAgICB2YXIgdmlldyA9IHRoaXM7Ci0gICAg
dmFyIHN0YXRlQ2hlY2tlZEZuID0gZnVuY3Rpb24gKCkgewotICAgICAgdmlldy5fY3VycmVudFN0
YXRlLmludm9rZU9ic2VydmVyKHRoaXMsIGZuKTsKLSAgICB9OwotICAgIHZhciBzY2hlZHVsZWRG
biA9IGZ1bmN0aW9uICgpIHsKLSAgICAgIF9lbWJlck1ldGFsUnVuX2xvb3AuZGVmYXVsdC5zY2hl
ZHVsZU9uY2UoJ3JlbmRlcicsIHRoaXMsIHN0YXRlQ2hlY2tlZEZuKTsKLSAgICB9OwotICAgIHJl
dHVybiBzY2hlZHVsZWRGbjsKLSAgfSwgX01peGluJGNyZWF0ZSkpOwotfSk7Ci0vKgotIFRoaXMg
aXMgYSBzcGVjaWFsIGhvb2sgaW1wbGVtZW50ZWQgaW4gQ29yZU9iamVjdCwgdGhhdCBhbGxvd3Mg
Vmlld3MvQ29tcG9uZW50cwotIHRvIGhhdmUgYSB3YXkgdG8gZW5zdXJlIHRoYXQgYGluaXRgIGZp
cmVzIGJlZm9yZSBgZGlkSW5pdEF0dHJzYCAvIGBkaWRSZWNlaXZlQXR0cnNgCi0gKHNvIHRoYXQg
YHRoaXMuX3N1cGVyYCBpbiBpbml0IGRvZXMgbm90IHRyaWdnZXIgYGRpZFJlY2VpdmVBdHRyc2Ag
YmVmb3JlIHRoZSBjbGFzc2VzCi0gb3duIGBpbml0YCBpcyBmaW5pc2hlZCkuCi0gIEBtZXRob2Qg
X19wb3N0SW5pdEluaXRpYWxpemF0aW9uCi0gQHByaXZhdGUKLSAqLwotCi0vKioKLSAgUmVtb3Zl
cyB0aGUgdmlldyBmcm9tIGl0cyBgcGFyZW50Vmlld2AsIGlmIG9uZSBpcyBmb3VuZC4gT3RoZXJ3
aXNlCi0gIGRvZXMgbm90aGluZy4KLSAgIEBtZXRob2QgcmVtb3ZlRnJvbVBhcmVudAotICBAcmV0
dXJuIHtFbWJlci5WaWV3fSByZWNlaXZlcgotICBAcHJpdmF0ZQotKi8KLQotLyoqCi0gIFlvdSBt
dXN0IGNhbGwgYGRlc3Ryb3lgIG9uIGEgdmlldyB0byBkZXN0cm95IHRoZSB2aWV3IChhbmQgYWxs
IG9mIGl0cwotICBjaGlsZCB2aWV3cykuIFRoaXMgd2lsbCByZW1vdmUgdGhlIHZpZXcgZnJvbSBh
bnkgcGFyZW50IG5vZGUsIHRoZW4gbWFrZQotICBzdXJlIHRoYXQgdGhlIERPTSBlbGVtZW50IG1h
bmFnZWQgYnkgdGhlIHZpZXcgY2FuIGJlIHJlbGVhc2VkIGJ5IHRoZQotICBtZW1vcnkgbWFuYWdl
ci4KLSAgIEBtZXRob2QgZGVzdHJveQotICBAcHJpdmF0ZQotKi8KLQotLy8gLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgotLy8gRVZFTlQgSEFO
RExJTkcKLS8vCi0KLS8qKgotICBIYW5kbGUgZXZlbnRzIGZyb20gYEVtYmVyLkV2ZW50RGlzcGF0
Y2hlcmAKLSAgIEBtZXRob2QgaGFuZGxlRXZlbnQKLSAgQHBhcmFtIGV2ZW50TmFtZSB7U3RyaW5n
fQotICBAcGFyYW0gZXZ0IHtFdmVudH0KLSAgQHByaXZhdGUKLSovCi0KLS8qKgotICBSZWdpc3Rl
cnMgdGhlIHZpZXcgaW4gdGhlIHZpZXcgcmVnaXN0cnksIGtleWVkIG9uIHRoZSB2aWV3J3MgYGVs
ZW1lbnRJZGAuCi0gIFRoaXMgaXMgdXNlZCBieSB0aGUgRXZlbnREaXNwYXRjaGVyIHRvIGxvY2F0
ZSB0aGUgdmlldyBpbiByZXNwb25zZSB0bwotICBldmVudHMuCi0gICBUaGlzIG1ldGhvZCBzaG91
bGQgb25seSBiZSBjYWxsZWQgb25jZSB0aGUgdmlldyBoYXMgYmVlbiBpbnNlcnRlZCBpbnRvIHRo
ZQotICBET00uCi0gICBAbWV0aG9kIF9yZWdpc3RlcgotICBAcHJpdmF0ZQotKi8KLQotLyoqCi0g
IFJlbW92ZXMgdGhlIHZpZXcgZnJvbSB0aGUgdmlldyByZWdpc3RyeS4gVGhpcyBzaG91bGQgYmUg
Y2FsbGVkIHdoZW4gdGhlCi0gIHZpZXcgaXMgcmVtb3ZlZCBmcm9tIERPTS4KLSAgIEBtZXRob2Qg
X3VucmVnaXN0ZXIKLSAgQHByaXZhdGUKLSovCi1lbmlmZWQoJ2VtYmVyLXZpZXdzL21peGlucy92
aWV3X3RhcmdldF9hY3Rpb25fc3VwcG9ydCcsIFsnZXhwb3J0cycsICdlbWJlci1tZXRhbC9taXhp
bicsICdlbWJlci1ydW50aW1lL21peGlucy90YXJnZXRfYWN0aW9uX3N1cHBvcnQnLCAnZW1iZXIt
bWV0YWwvYWxpYXMnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1ldGFsTWl4aW4sIF9lbWJl
clJ1bnRpbWVNaXhpbnNUYXJnZXRfYWN0aW9uX3N1cHBvcnQsIF9lbWJlck1ldGFsQWxpYXMpIHsK
LSAgJ3VzZSBzdHJpY3QnOwotCi0gIC8qKgotICBgRW1iZXIuVmlld1RhcmdldEFjdGlvblN1cHBv
cnRgIGlzIGEgbWl4aW4gdGhhdCBjYW4gYmUgaW5jbHVkZWQgaW4gYQotICB2aWV3IGNsYXNzIHRv
IGFkZCBhIGB0cmlnZ2VyQWN0aW9uYCBtZXRob2Qgd2l0aCBzZW1hbnRpY3Mgc2ltaWxhciB0bwot
ICB0aGUgSGFuZGxlYmFycyBge3thY3Rpb259fWAgaGVscGVyLiBJdCBwcm92aWRlcyBpbnRlbGxp
Z2VudCBkZWZhdWx0cwotICBmb3IgdGhlIGFjdGlvbidzIHRhcmdldDogdGhlIHZpZXcncyBjb250
cm9sbGVyOyBhbmQgdGhlIGNvbnRleHQgdGhhdCBpcwotICBzZW50IHdpdGggdGhlIGFjdGlvbjog
dGhlIHZpZXcncyBjb250ZXh0LgotICAKLSAgTm90ZTogSW4gbm9ybWFsIEVtYmVyIHVzYWdlLCB0
aGUgYHt7YWN0aW9ufX1gIGhlbHBlciBpcyB1c3VhbGx5IHRoZSBiZXN0Ci0gIGNob2ljZS4gVGhp
cyBtaXhpbiBpcyBtb3N0IG9mdGVuIHVzZWZ1bCB3aGVuIHlvdSBhcmUgZG9pbmcgbW9yZSBjb21w
bGV4Ci0gIGV2ZW50IGhhbmRsaW5nIGluIGN1c3RvbSBWaWV3IHN1YmNsYXNzZXMuCi0gIAotICBG
b3IgZXhhbXBsZToKLSAgCi0gIGBgYGphdmFzY3JpcHQKLSAgQXBwLlNhdmVCdXR0b25WaWV3ID0g
RW1iZXIuVmlldy5leHRlbmQoRW1iZXIuVmlld1RhcmdldEFjdGlvblN1cHBvcnQsIHsKLSAgICBh
Y3Rpb246ICdzYXZlJywKLSAgICBjbGljazogZnVuY3Rpb24oKSB7Ci0gICAgICB0aGlzLnRyaWdn
ZXJBY3Rpb24oKTsgLy8gU2VuZHMgdGhlIGBzYXZlYCBhY3Rpb24sIGFsb25nIHdpdGggdGhlIGN1
cnJlbnQgY29udGV4dAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvIHRoZSBjdXJy
ZW50IGNvbnRyb2xsZXIKLSAgICB9Ci0gIH0pOwotICBgYGAKLSAgCi0gIFRoZSBgYWN0aW9uYCBj
YW4gYmUgcHJvdmlkZWQgYXMgcHJvcGVydGllcyBvZiBhbiBvcHRpb25hbCBvYmplY3QgYXJndW1l
bnQKLSAgdG8gYHRyaWdnZXJBY3Rpb25gIGFzIHdlbGwuCi0gIAotICBgYGBqYXZhc2NyaXB0Ci0g
IEFwcC5TYXZlQnV0dG9uVmlldyA9IEVtYmVyLlZpZXcuZXh0ZW5kKEVtYmVyLlZpZXdUYXJnZXRB
Y3Rpb25TdXBwb3J0LCB7Ci0gICAgY2xpY2s6IGZ1bmN0aW9uKCkgewotICAgICAgdGhpcy50cmln
Z2VyQWN0aW9uKHsKLSAgICAgICAgYWN0aW9uOiAnc2F2ZScKLSAgICAgIH0pOyAvLyBTZW5kcyB0
aGUgYHNhdmVgIGFjdGlvbiwgYWxvbmcgd2l0aCB0aGUgY3VycmVudCBjb250ZXh0Ci0gICAgICAg
ICAgLy8gdG8gdGhlIGN1cnJlbnQgY29udHJvbGxlcgotICAgIH0KLSAgfSk7Ci0gIGBgYAotICAK
LSAgQGNsYXNzIFZpZXdUYXJnZXRBY3Rpb25TdXBwb3J0Ci0gIEBuYW1lc3BhY2UgRW1iZXIKLSAg
QGV4dGVuZHMgRW1iZXIuVGFyZ2V0QWN0aW9uU3VwcG9ydAotICBAcHJpdmF0ZQotICAqLwotICBl
eHBvcnRzLmRlZmF1bHQgPSBfZW1iZXJNZXRhbE1peGluLk1peGluLmNyZWF0ZShfZW1iZXJSdW50
aW1lTWl4aW5zVGFyZ2V0X2FjdGlvbl9zdXBwb3J0LmRlZmF1bHQsIHsKLSAgICAvKioKLSAgICAg
QHByb3BlcnR5IHRhcmdldAotICAgICBAcHJpdmF0ZQotICAgICovCi0gICAgdGFyZ2V0OiBfZW1i
ZXJNZXRhbEFsaWFzLmRlZmF1bHQoJ2NvbnRyb2xsZXInKSwKLSAgICAvKioKLSAgICAgQHByb3Bl
cnR5IGFjdGlvbkNvbnRleHQKLSAgICAgQHByaXZhdGUKLSAgICAqLwotICAgIGFjdGlvbkNvbnRl
eHQ6IF9lbWJlck1ldGFsQWxpYXMuZGVmYXVsdCgnY29udGV4dCcpCi0gIH0pOwotfSk7Ci1lbmlm
ZWQoJ2VtYmVyLXZpZXdzL21peGlucy92aXNpYmlsaXR5X3N1cHBvcnQnLCBbJ2V4cG9ydHMnLCAn
ZW1iZXItbWV0YWwvbWl4aW4nLCAnZW1iZXItbWV0YWwvcHJvcGVydHlfZ2V0JywgJ2VtYmVyLW1l
dGFsL3J1bl9sb29wJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbE1peGluLCBfZW1i
ZXJNZXRhbFByb3BlcnR5X2dldCwgX2VtYmVyTWV0YWxSdW5fbG9vcCkgewotICAvKioKLSAgIEBt
b2R1bGUgZW1iZXIKLSAgIEBzdWJtb2R1bGUgZW1iZXItdmlld3MKLSAgKi8KLSAgJ3VzZSBzdHJp
Y3QnOwotCi0gIGZ1bmN0aW9uIEsoKSB7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLQotICAvKioK
LSAgIEBjbGFzcyBWaXNpYmlsaXR5U3VwcG9ydAotICAgQG5hbWVzcGFjZSBFbWJlcgotICAgQHB1
YmxpYwotICAqLwotICB2YXIgVmlzaWJpbGl0eVN1cHBvcnQgPSBfZW1iZXJNZXRhbE1peGluLk1p
eGluLmNyZWF0ZSh7Ci0gICAgLyoqCi0gICAgICBJZiBgZmFsc2VgLCB0aGUgdmlldyB3aWxsIGFw
cGVhciBoaWRkZW4gaW4gRE9NLgotICAgICAgIEBwcm9wZXJ0eSBpc1Zpc2libGUKLSAgICAgIEB0
eXBlIEJvb2xlYW4KLSAgICAgIEBkZWZhdWx0IG51bGwKLSAgICAgIEBwdWJsaWMKLSAgICAqLwot
ICAgIGlzVmlzaWJsZTogdHJ1ZSwKLQotICAgIGJlY2FtZVZpc2libGU6IEssCi0gICAgYmVjYW1l
SGlkZGVuOiBLLAotCi0gICAgLyoqCi0gICAgICBXaGVuIHRoZSB2aWV3J3MgYGlzVmlzaWJsZWAg
cHJvcGVydHkgY2hhbmdlcywgdG9nZ2xlIHRoZSB2aXNpYmlsaXR5Ci0gICAgICBlbGVtZW50IG9m
IHRoZSBhY3R1YWwgRE9NIGVsZW1lbnQuCi0gICAgICAgQG1ldGhvZCBfaXNWaXNpYmxlRGlkQ2hh
bmdlCi0gICAgICBAcHJpdmF0ZQotICAgICovCi0gICAgX2lzVmlzaWJsZURpZENoYW5nZTogX2Vt
YmVyTWV0YWxNaXhpbi5vYnNlcnZlcignaXNWaXNpYmxlJywgZnVuY3Rpb24gKCkgewotICAgICAg
aWYgKHRoaXMuX2lzVmlzaWJsZSA9PT0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMs
ICdpc1Zpc2libGUnKSkgewotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgICBfZW1iZXJN
ZXRhbFJ1bl9sb29wLmRlZmF1bHQuc2NoZWR1bGVPbmNlKCdyZW5kZXInLCB0aGlzLCB0aGlzLl90
b2dnbGVWaXNpYmlsaXR5KTsKLSAgICB9KSwKLQotICAgIF90b2dnbGVWaXNpYmlsaXR5OiBmdW5j
dGlvbiAoKSB7Ci0gICAgICB2YXIgJGVsID0gdGhpcy4kKCk7Ci0gICAgICB2YXIgaXNWaXNpYmxl
ID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsICdpc1Zpc2libGUnKTsKLQotICAg
ICAgaWYgKHRoaXMuX2lzVmlzaWJsZSA9PT0gaXNWaXNpYmxlKSB7Ci0gICAgICAgIHJldHVybjsK
LSAgICAgIH0KLQotICAgICAgLy8gSXQncyBpbXBvcnRhbnQgdG8ga2VlcCB0aGVzZSBpbiBzeW5j
LCBldmVuIGlmIHdlIGRvbid0IHlldCBoYXZlCi0gICAgICAvLyBhbiBlbGVtZW50IGluIHRoZSBE
T00gdG8gbWFuaXB1bGF0ZToKLSAgICAgIHRoaXMuX2lzVmlzaWJsZSA9IGlzVmlzaWJsZTsKLQot
ICAgICAgaWYgKCEkZWwpIHsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotCi0gICAgICAkZWwu
dG9nZ2xlKGlzVmlzaWJsZSk7Ci0KLSAgICAgIGlmICh0aGlzLl9pc0FuY2VzdG9ySGlkZGVuKCkp
IHsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotCi0gICAgICBpZiAoaXNWaXNpYmxlKSB7Ci0g
ICAgICAgIHRoaXMuX25vdGlmeUJlY2FtZVZpc2libGUoKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgIHRoaXMuX25vdGlmeUJlY2FtZUhpZGRlbigpOwotICAgICAgfQotICAgIH0sCi0KLSAgICBf
bm90aWZ5QmVjYW1lVmlzaWJsZTogZnVuY3Rpb24gKCkgewotICAgICAgdGhpcy50cmlnZ2VyKCdi
ZWNhbWVWaXNpYmxlJyk7Ci0KLSAgICAgIHRoaXMuZm9yRWFjaENoaWxkVmlldyhmdW5jdGlvbiAo
dmlldykgewotICAgICAgICB2YXIgaXNWaXNpYmxlID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQu
Z2V0KHZpZXcsICdpc1Zpc2libGUnKTsKLQotICAgICAgICBpZiAoaXNWaXNpYmxlIHx8IGlzVmlz
aWJsZSA9PT0gbnVsbCkgewotICAgICAgICAgIHZpZXcuX25vdGlmeUJlY2FtZVZpc2libGUoKTsK
LSAgICAgICAgfQotICAgICAgfSk7Ci0gICAgfSwKLQotICAgIF9ub3RpZnlCZWNhbWVIaWRkZW46
IGZ1bmN0aW9uICgpIHsKLSAgICAgIHRoaXMudHJpZ2dlcignYmVjYW1lSGlkZGVuJyk7Ci0gICAg
ICB0aGlzLmZvckVhY2hDaGlsZFZpZXcoZnVuY3Rpb24gKHZpZXcpIHsKLSAgICAgICAgdmFyIGlz
VmlzaWJsZSA9IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh2aWV3LCAnaXNWaXNpYmxlJyk7
Ci0KLSAgICAgICAgaWYgKGlzVmlzaWJsZSB8fCBpc1Zpc2libGUgPT09IG51bGwpIHsKLSAgICAg
ICAgICB2aWV3Ll9ub3RpZnlCZWNhbWVIaWRkZW4oKTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0g
ICAgfSwKLQotICAgIF9pc0FuY2VzdG9ySGlkZGVuOiBmdW5jdGlvbiAoKSB7Ci0gICAgICB2YXIg
cGFyZW50ID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMsICdwYXJlbnRWaWV3Jyk7
Ci0KLSAgICAgIHdoaWxlIChwYXJlbnQpIHsKLSAgICAgICAgaWYgKF9lbWJlck1ldGFsUHJvcGVy
dHlfZ2V0LmdldChwYXJlbnQsICdpc1Zpc2libGUnKSA9PT0gZmFsc2UpIHsKLSAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHBhcmVudCA9IF9lbWJlck1ldGFsUHJv
cGVydHlfZ2V0LmdldChwYXJlbnQsICdwYXJlbnRWaWV3Jyk7Ci0gICAgICB9Ci0KLSAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0gIH0pOwotCi0gIGV4cG9ydHMuZGVmYXVsdCA9IFZpc2liaWxp
dHlTdXBwb3J0OwotfSk7Ci1lbmlmZWQoJ2VtYmVyLXZpZXdzL3N0cmVhbXMvY2xhc3NfbmFtZV9i
aW5kaW5nJywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFsL2RlYnVnJywgJ2VtYmVyLW1ldGFsL3By
b3BlcnR5X2dldCcsICdlbWJlci1tZXRhbC91dGlscycsICdlbWJlci1tZXRhbC9zdHJlYW1zL3V0
aWxzJywgJ2VtYmVyLXJ1bnRpbWUvc3lzdGVtL3N0cmluZyddLCBmdW5jdGlvbiAoZXhwb3J0cywg
X2VtYmVyTWV0YWxEZWJ1ZywgX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQsIF9lbWJlck1ldGFsVXRp
bHMsIF9lbWJlck1ldGFsU3RyZWFtc1V0aWxzLCBfZW1iZXJSdW50aW1lU3lzdGVtU3RyaW5nKSB7
Ci0gICd1c2Ugc3RyaWN0JzsKLQotICBleHBvcnRzLnBhcnNlUHJvcGVydHlQYXRoID0gcGFyc2VQ
cm9wZXJ0eVBhdGg7Ci0gIGV4cG9ydHMuY2xhc3NTdHJpbmdGb3JWYWx1ZSA9IGNsYXNzU3RyaW5n
Rm9yVmFsdWU7Ci0gIGV4cG9ydHMuc3RyZWFtaWZ5Q2xhc3NOYW1lQmluZGluZyA9IHN0cmVhbWlm
eUNsYXNzTmFtZUJpbmRpbmc7Ci0KLSAgLyoqCi0gICAgUGFyc2UgYSBwYXRoIGFuZCByZXR1cm4g
YW4gb2JqZWN0IHdoaWNoIGhvbGRzIHRoZSBwYXJzZWQgcHJvcGVydGllcy4KLSAgCi0gICAgRm9y
IGV4YW1wbGUgYSBwYXRoIGxpa2UgImNvbnRlbnQuaXNFbmFibGVkOmVuYWJsZWQ6ZGlzYWJsZWQi
IHdpbGwgcmV0dXJuIHRoZQotICAgIGZvbGxvd2luZyBvYmplY3Q6Ci0gIAotICAgIGBgYGphdmFz
Y3JpcHQKLSAgICB7Ci0gICAgICBwYXRoOiAiY29udGVudC5pc0VuYWJsZWQiLAotICAgICAgY2xh
c3NOYW1lOiAiZW5hYmxlZCIsCi0gICAgICBmYWxzeUNsYXNzTmFtZTogImRpc2FibGVkIiwKLSAg
ICAgIGNsYXNzTmFtZXM6ICI6ZW5hYmxlZDpkaXNhYmxlZCIKLSAgICB9Ci0gICAgYGBgCi0gIAot
ICAgIEBtZXRob2QgcGFyc2VQcm9wZXJ0eVBhdGgKLSAgICBAc3RhdGljCi0gICAgQHByaXZhdGUK
LSAgKi8KLQotICBmdW5jdGlvbiBwYXJzZVByb3BlcnR5UGF0aChwYXRoKSB7Ci0gICAgdmFyIHNw
bGl0ID0gcGF0aC5zcGxpdCgnOicpOwotICAgIHZhciBwcm9wZXJ0eVBhdGggPSBzcGxpdFswXTsK
LSAgICB2YXIgY2xhc3NOYW1lcyA9ICcnOwotICAgIHZhciBjbGFzc05hbWUsIGZhbHN5Q2xhc3NO
YW1lOwotCi0gICAgLy8gY2hlY2sgaWYgdGhlIHByb3BlcnR5IGlzIGRlZmluZWQgYXMgcHJvcDpj
bGFzcyBvciBwcm9wOnRydWVDbGFzczpmYWxzZUNsYXNzCi0gICAgaWYgKHNwbGl0Lmxlbmd0aCA+
IDEpIHsKLSAgICAgIGNsYXNzTmFtZSA9IHNwbGl0WzFdOwotICAgICAgaWYgKHNwbGl0Lmxlbmd0
aCA9PT0gMykgewotICAgICAgICBmYWxzeUNsYXNzTmFtZSA9IHNwbGl0WzJdOwotICAgICAgfQot
Ci0gICAgICBjbGFzc05hbWVzID0gJzonICsgY2xhc3NOYW1lOwotICAgICAgaWYgKGZhbHN5Q2xh
c3NOYW1lKSB7Ci0gICAgICAgIGNsYXNzTmFtZXMgKz0gJzonICsgZmFsc3lDbGFzc05hbWU7Ci0g
ICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHsKLSAgICAgIHBhdGg6IHByb3BlcnR5UGF0aCwK
LSAgICAgIGNsYXNzTmFtZXM6IGNsYXNzTmFtZXMsCi0gICAgICBjbGFzc05hbWU6IGNsYXNzTmFt
ZSA9PT0gJycgPyB1bmRlZmluZWQgOiBjbGFzc05hbWUsCi0gICAgICBmYWxzeUNsYXNzTmFtZTog
ZmFsc3lDbGFzc05hbWUKLSAgICB9OwotICB9Ci0KLSAgLyoqCi0gICAgR2V0IHRoZSBjbGFzcyBu
YW1lIGZvciBhIGdpdmVuIHZhbHVlLCBiYXNlZCBvbiB0aGUgcGF0aCwgb3B0aW9uYWwKLSAgICBg
Y2xhc3NOYW1lYCBhbmQgb3B0aW9uYWwgYGZhbHN5Q2xhc3NOYW1lYC4KLSAgCi0gICAgLSBpZiBh
IGBjbGFzc05hbWVgIG9yIGBmYWxzeUNsYXNzTmFtZWAgaGFzIGJlZW4gc3BlY2lmaWVkOgotICAg
ICAgLSBpZiB0aGUgdmFsdWUgaXMgdHJ1dGh5IGFuZCBgY2xhc3NOYW1lYCBoYXMgYmVlbiBzcGVj
aWZpZWQsCi0gICAgICAgIGBjbGFzc05hbWVgIGlzIHJldHVybmVkCi0gICAgICAtIGlmIHRoZSB2
YWx1ZSBpcyBmYWxzeSBhbmQgYGZhbHN5Q2xhc3NOYW1lYCBoYXMgYmVlbiBzcGVjaWZpZWQsCi0g
ICAgICAgIGBmYWxzeUNsYXNzTmFtZWAgaXMgcmV0dXJuZWQKLSAgICAgIC0gb3RoZXJ3aXNlIGBu
dWxsYCBpcyByZXR1cm5lZAotICAgIC0gaWYgdGhlIHZhbHVlIGlzIGB0cnVlYCwgdGhlIGRhc2hl
cml6ZWQgbGFzdCBwYXJ0IG9mIHRoZSBzdXBwbGllZCBwYXRoCi0gICAgICBpcyByZXR1cm5lZAot
ICAgIC0gaWYgdGhlIHZhbHVlIGlzIG5vdCBgZmFsc2VgLCBgdW5kZWZpbmVkYCBvciBgbnVsbGAs
IHRoZSBgdmFsdWVgCi0gICAgICBpcyByZXR1cm5lZAotICAgIC0gaWYgbm9uZSBvZiB0aGUgYWJv
dmUgcnVsZXMgYXBwbHksIGBudWxsYCBpcyByZXR1cm5lZAotICAKLSAgICBAbWV0aG9kIGNsYXNz
U3RyaW5nRm9yVmFsdWUKLSAgICBAcGFyYW0gcGF0aAotICAgIEBwYXJhbSB2YWwKLSAgICBAcGFy
YW0gY2xhc3NOYW1lCi0gICAgQHBhcmFtIGZhbHN5Q2xhc3NOYW1lCi0gICAgQHN0YXRpYwotICAg
IEBwcml2YXRlCi0gICovCi0KLSAgZnVuY3Rpb24gY2xhc3NTdHJpbmdGb3JWYWx1ZShwYXRoLCB2
YWwsIGNsYXNzTmFtZSwgZmFsc3lDbGFzc05hbWUpIHsKLSAgICBpZiAoX2VtYmVyTWV0YWxVdGls
cy5pc0FycmF5KHZhbCkpIHsKLSAgICAgIHZhbCA9IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0Lmdl
dCh2YWwsICdsZW5ndGgnKSAhPT0gMDsKLSAgICB9Ci0KLSAgICAvLyBXaGVuIHVzaW5nIHRoZSBj
b2xvbiBzeW50YXgsIGV2YWx1YXRlIHRoZSB0cnV0aGluZXNzIG9yIGZhbHNpbmVzcwotICAgIC8v
IG9mIHRoZSB2YWx1ZSB0byBkZXRlcm1pbmUgd2hpY2ggY2xhc3NOYW1lIHRvIHJldHVybgotICAg
IGlmIChjbGFzc05hbWUgfHwgZmFsc3lDbGFzc05hbWUpIHsKLSAgICAgIGlmIChjbGFzc05hbWUg
JiYgISF2YWwpIHsKLSAgICAgICAgcmV0dXJuIGNsYXNzTmFtZTsKLSAgICAgIH0gZWxzZSBpZiAo
ZmFsc3lDbGFzc05hbWUgJiYgIXZhbCkgewotICAgICAgICByZXR1cm4gZmFsc3lDbGFzc05hbWU7
Ci0gICAgICB9IGVsc2UgewotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgIH0KLQotICAgICAg
Ly8gSWYgdmFsdWUgaXMgYSBCb29sZWFuIGFuZCB0cnVlLCByZXR1cm4gdGhlIGRhc2hlcml6ZWQg
cHJvcGVydHkKLSAgICAgIC8vIG5hbWUuCi0gICAgfSBlbHNlIGlmICh2YWwgPT09IHRydWUpIHsK
LSAgICAgICAgLy8gTm9ybWFsaXplIHByb3BlcnR5IHBhdGggdG8gYmUgc3VpdGFibGUgZm9yIHVz
ZQotICAgICAgICAvLyBhcyBhIGNsYXNzIG5hbWUuIEZvciBleGFwbGUsIGNvbnRlbnQuZm9vLmJh
ckJhegotICAgICAgICAvLyBiZWNvbWVzIGJhci1iYXouCi0gICAgICAgIHZhciBwYXJ0cyA9IHBh
dGguc3BsaXQoJy4nKTsKLSAgICAgICAgcmV0dXJuIF9lbWJlclJ1bnRpbWVTeXN0ZW1TdHJpbmcu
ZGFzaGVyaXplKHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdKTsKLQotICAgICAgICAvLyBJZiB0aGUg
dmFsdWUgaXMgbm90IGZhbHNlLCB1bmRlZmluZWQsIG9yIG51bGwsIHJldHVybiB0aGUgY3VycmVu
dAotICAgICAgICAvLyB2YWx1ZSBvZiB0aGUgcHJvcGVydHkuCi0gICAgICB9IGVsc2UgaWYgKHZh
bCAhPT0gZmFsc2UgJiYgdmFsICE9IG51bGwpIHsKLSAgICAgICAgICByZXR1cm4gdmFsOwotCi0g
ICAgICAgICAgLy8gTm90aGluZyB0byBkaXNwbGF5LiBSZXR1cm4gbnVsbCBzbyB0aGF0IHRoZSBv
bGQgY2xhc3MgaXMgcmVtb3ZlZAotICAgICAgICAgIC8vIGJ1dCBubyBuZXcgY2xhc3MgaXMgYWRk
ZWQuCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAg
ICB9Ci0gIH0KLQotICBmdW5jdGlvbiBzdHJlYW1pZnlDbGFzc05hbWVCaW5kaW5nKHZpZXcsIGNs
YXNzTmFtZUJpbmRpbmcsIHByZWZpeCkgewotICAgIHByZWZpeCA9IHByZWZpeCB8fCAnJzsKLSAg
ICBfZW1iZXJNZXRhbERlYnVnLmFzc2VydCgnY2xhc3NOYW1lQmluZGluZ3MgbXVzdCBub3QgaGF2
ZSBzcGFjZXMgaW4gdGhlbS4gTXVsdGlwbGUgY2xhc3MgbmFtZSBiaW5kaW5ncyBjYW4gYmUgcHJv
dmlkZWQgYXMgZWxlbWVudHMgb2YgYW4gYXJyYXksIGUuZy4gW1wnZm9vXCcsIFwnOmJhclwnXScs
IGNsYXNzTmFtZUJpbmRpbmcuaW5kZXhPZignICcpID09PSAtMSk7Ci0gICAgdmFyIHBhcnNlZFBh
dGggPSBwYXJzZVByb3BlcnR5UGF0aChjbGFzc05hbWVCaW5kaW5nKTsKLSAgICBpZiAocGFyc2Vk
UGF0aC5wYXRoID09PSAnJykgewotICAgICAgcmV0dXJuIGNsYXNzU3RyaW5nRm9yVmFsdWUocGFy
c2VkUGF0aC5wYXRoLCB0cnVlLCBwYXJzZWRQYXRoLmNsYXNzTmFtZSwgcGFyc2VkUGF0aC5mYWxz
eUNsYXNzTmFtZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHZhciBwYXRoVmFsdWUgPSB2aWV3Lmdl
dFN0cmVhbShwcmVmaXggKyBwYXJzZWRQYXRoLnBhdGgpOwotICAgICAgcmV0dXJuIF9lbWJlck1l
dGFsU3RyZWFtc1V0aWxzLmNoYWluKHBhdGhWYWx1ZSwgZnVuY3Rpb24gKCkgewotICAgICAgICBy
ZXR1cm4gY2xhc3NTdHJpbmdGb3JWYWx1ZShwYXJzZWRQYXRoLnBhdGgsIF9lbWJlck1ldGFsU3Ry
ZWFtc1V0aWxzLnJlYWQocGF0aFZhbHVlKSwgcGFyc2VkUGF0aC5jbGFzc05hbWUsIHBhcnNlZFBh
dGguZmFsc3lDbGFzc05hbWUpOwotICAgICAgfSk7Ci0gICAgfQotICB9Ci19KTsKLWVuaWZlZCgn
ZW1iZXItdmlld3Mvc3RyZWFtcy9zaG91bGRfZGlzcGxheScsIFsnZXhwb3J0cycsICdlbWJlci1t
ZXRhbC9kZWJ1ZycsICdlbWJlci1tZXRhbC9wcm9wZXJ0eV9nZXQnLCAnZW1iZXItcnVudGltZS91
dGlscycsICdlbWJlci1tZXRhbC9zdHJlYW1zL3N0cmVhbScsICdlbWJlci1tZXRhbC9zdHJlYW1z
L3V0aWxzJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbERlYnVnLCBfZW1iZXJNZXRh
bFByb3BlcnR5X2dldCwgX2VtYmVyUnVudGltZVV0aWxzLCBfZW1iZXJNZXRhbFN0cmVhbXNTdHJl
YW0sIF9lbWJlck1ldGFsU3RyZWFtc1V0aWxzKSB7Ci0gICd1c2Ugc3RyaWN0JzsKLQotICBleHBv
cnRzLmRlZmF1bHQgPSBzaG91bGREaXNwbGF5OwotCi0gIHZhciBTaG91bGREaXNwbGF5U3RyZWFt
ID0gX2VtYmVyTWV0YWxTdHJlYW1zU3RyZWFtLmRlZmF1bHQuZXh0ZW5kKHsKLSAgICBpbml0OiBm
dW5jdGlvbiAocHJlZGljYXRlKSB7Ci0gICAgICBfZW1iZXJNZXRhbERlYnVnLmFzc2VydCgnU2hv
dWxkRGlzcGxheVN0cmVhbSBlcnJvcjogcHJlZGljYXRlIG11c3QgYmUgYSBzdHJlYW0nLCBfZW1i
ZXJNZXRhbFN0cmVhbXNVdGlscy5pc1N0cmVhbShwcmVkaWNhdGUpKTsKLQotICAgICAgdmFyIGlz
VHJ1dGh5ID0gcHJlZGljYXRlLmdldCgnaXNUcnV0aHknKTsKLQotICAgICAgdGhpcy5pbml0KCk7
Ci0gICAgICB0aGlzLnByZWRpY2F0ZSA9IHByZWRpY2F0ZTsKLSAgICAgIHRoaXMuaXNUcnV0aHkg
PSBpc1RydXRoeTsKLSAgICAgIHRoaXMubGVuZ3RoRGVwID0gbnVsbDsKLQotICAgICAgdGhpcy5h
ZGREZXBlbmRlbmN5KHByZWRpY2F0ZSk7Ci0gICAgICB0aGlzLmFkZERlcGVuZGVuY3koaXNUcnV0
aHkpOwotICAgIH0sCi0KLSAgICBjb21wdXRlOiBmdW5jdGlvbiAoKSB7Ci0gICAgICB2YXIgdHJ1
dGh5ID0gX2VtYmVyTWV0YWxTdHJlYW1zVXRpbHMucmVhZCh0aGlzLmlzVHJ1dGh5KTsKLQotICAg
ICAgaWYgKHR5cGVvZiB0cnV0aHkgPT09ICdib29sZWFuJykgewotICAgICAgICByZXR1cm4gdHJ1
dGh5OwotICAgICAgfQotCi0gICAgICBpZiAodGhpcy5sZW5ndGhEZXApIHsKLSAgICAgICAgcmV0
dXJuIHRoaXMubGVuZ3RoRGVwLmdldFZhbHVlKCkgIT09IDA7Ci0gICAgICB9IGVsc2UgewotICAg
ICAgICByZXR1cm4gISFfZW1iZXJNZXRhbFN0cmVhbXNVdGlscy5yZWFkKHRoaXMucHJlZGljYXRl
KTsKLSAgICAgIH0KLSAgICB9LAotCi0gICAgcmV2YWxpZGF0ZTogZnVuY3Rpb24gKCkgewotICAg
ICAgaWYgKF9lbWJlclJ1bnRpbWVVdGlscy5pc0FycmF5KF9lbWJlck1ldGFsU3RyZWFtc1V0aWxz
LnJlYWQodGhpcy5wcmVkaWNhdGUpKSkgewotICAgICAgICBpZiAoIXRoaXMubGVuZ3RoRGVwKSB7
Ci0gICAgICAgICAgdGhpcy5sZW5ndGhEZXAgPSB0aGlzLmFkZE11dGFibGVEZXBlbmRlbmN5KHRo
aXMucHJlZGljYXRlLmdldCgnbGVuZ3RoJykpOwotICAgICAgICB9Ci0gICAgICB9IGVsc2Ugewot
ICAgICAgICBpZiAodGhpcy5sZW5ndGhEZXApIHsKLSAgICAgICAgICB0aGlzLmxlbmd0aERlcC5k
ZXN0cm95KCk7Ci0gICAgICAgICAgdGhpcy5sZW5ndGhEZXAgPSBudWxsOwotICAgICAgICB9Ci0g
ICAgICB9Ci0gICAgfQotICB9KTsKLQotICBmdW5jdGlvbiBzaG91bGREaXNwbGF5KHByZWRpY2F0
ZSkgewotICAgIGlmIChfZW1iZXJNZXRhbFN0cmVhbXNVdGlscy5pc1N0cmVhbShwcmVkaWNhdGUp
KSB7Ci0gICAgICByZXR1cm4gbmV3IFNob3VsZERpc3BsYXlTdHJlYW0ocHJlZGljYXRlKTsKLSAg
ICB9Ci0KLSAgICB2YXIgdHlwZSA9IHR5cGVvZiBwcmVkaWNhdGU7Ci0KLSAgICBpZiAodHlwZSA9
PT0gJ2Jvb2xlYW4nKSB7Ci0gICAgICByZXR1cm4gcHJlZGljYXRlOwotICAgIH0KLQotICAgIGlm
ICh0eXBlICYmIHR5cGUgPT09ICdvYmplY3QnICYmIHByZWRpY2F0ZSAhPT0gbnVsbCkgewotICAg
ICAgdmFyIGlzVHJ1dGh5ID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHByZWRpY2F0ZSwg
J2lzVHJ1dGh5Jyk7Ci0gICAgICBpZiAodHlwZW9mIGlzVHJ1dGh5ID09PSAnYm9vbGVhbicpIHsK
LSAgICAgICAgcmV0dXJuIGlzVHJ1dGh5OwotICAgICAgfQotICAgIH0KLQotICAgIGlmIChfZW1i
ZXJSdW50aW1lVXRpbHMuaXNBcnJheShwcmVkaWNhdGUpKSB7Ci0gICAgICByZXR1cm4gX2VtYmVy
TWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHByZWRpY2F0ZSwgJ2xlbmd0aCcpICE9PSAwOwotICAgIH0g
ZWxzZSB7Ci0gICAgICByZXR1cm4gISFwcmVkaWNhdGU7Ci0gICAgfQotICB9Ci19KTsKLWVuaWZl
ZCgnZW1iZXItdmlld3Mvc3RyZWFtcy91dGlscycsIFsnZXhwb3J0cycsICdlbWJlci1tZXRhbC9k
ZWJ1ZycsICdlbWJlci1tZXRhbC9wcm9wZXJ0eV9nZXQnLCAnZW1iZXItbWV0YWwvc3RyZWFtcy91
dGlscycsICdlbWJlci1ydW50aW1lL21peGlucy9jb250cm9sbGVyJ10sIGZ1bmN0aW9uIChleHBv
cnRzLCBfZW1iZXJNZXRhbERlYnVnLCBfZW1iZXJNZXRhbFByb3BlcnR5X2dldCwgX2VtYmVyTWV0
YWxTdHJlYW1zVXRpbHMsIF9lbWJlclJ1bnRpbWVNaXhpbnNDb250cm9sbGVyKSB7Ci0gICd1c2Ug
c3RyaWN0JzsKLQotICBleHBvcnRzLnJlYWRWaWV3RmFjdG9yeSA9IHJlYWRWaWV3RmFjdG9yeTsK
LSAgZXhwb3J0cy5yZWFkQ29tcG9uZW50RmFjdG9yeSA9IHJlYWRDb21wb25lbnRGYWN0b3J5Owot
ICBleHBvcnRzLnJlYWRVbndyYXBwZWRNb2RlbCA9IHJlYWRVbndyYXBwZWRNb2RlbDsKLQotICBm
dW5jdGlvbiByZWFkVmlld0ZhY3Rvcnkob2JqZWN0LCBvd25lcikgewotICAgIHZhciB2YWx1ZSA9
IF9lbWJlck1ldGFsU3RyZWFtc1V0aWxzLnJlYWQob2JqZWN0KTsKLSAgICB2YXIgdmlld0NsYXNz
OwotCi0gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHsKLSAgICAgIF9lbWJlck1l
dGFsRGVidWcuYXNzZXJ0KCdWaWV3IHJlcXVpcmVzIGFuIG93bmVyIHRvIHJlc29sdmUgdmlld3Mg
bm90IHBhc3NlZCBpbiB0aHJvdWdoIHRoZSBjb250ZXh0JywgISFvd25lcik7Ci0gICAgICB2aWV3
Q2xhc3MgPSBvd25lci5fbG9va3VwRmFjdG9yeSgndmlldzonICsgdmFsdWUpOwotICAgIH0gZWxz
ZSB7Ci0gICAgICB2aWV3Q2xhc3MgPSB2YWx1ZTsKLSAgICB9Ci0KLSAgICBfZW1iZXJNZXRhbERl
YnVnLmFzc2VydCh2YWx1ZSArICcgbXVzdCBiZSBhIHN1YmNsYXNzIG9yIGFuIGluc3RhbmNlIG9m
IEVtYmVyLlZpZXcsIG5vdCAnICsgdmlld0NsYXNzLCAoZnVuY3Rpb24gKHZpZXdDbGFzcykgewot
ICAgICAgcmV0dXJuIHZpZXdDbGFzcyAmJiAodmlld0NsYXNzLmlzVmlld0ZhY3RvcnkgfHwgdmll
d0NsYXNzLmlzVmlldyB8fCB2aWV3Q2xhc3MuaXNDb21wb25lbnRGYWN0b3J5IHx8IHZpZXdDbGFz
cy5pc0NvbXBvbmVudCk7Ci0gICAgfSkodmlld0NsYXNzKSk7Ci0KLSAgICByZXR1cm4gdmlld0Ns
YXNzOwotICB9Ci0KLSAgZnVuY3Rpb24gcmVhZENvbXBvbmVudEZhY3RvcnkobmFtZU9yU3RyZWFt
LCBvd25lcikgewotICAgIHZhciBuYW1lID0gX2VtYmVyTWV0YWxTdHJlYW1zVXRpbHMucmVhZChu
YW1lT3JTdHJlYW0pOwotICAgIHZhciBjb21wb25lbnRMb29rdXAgPSBvd25lci5sb29rdXAoJ2Nv
bXBvbmVudC1sb29rdXA6bWFpbicpOwotICAgIF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0KCdDb3Vs
ZCBub3QgZmluZCBcJ2NvbXBvbmVudC1sb29rdXA6bWFpblwnIG9uIHRoZSBwcm92aWRlZCBjb250
YWluZXIsICcgKyAnd2hpY2ggaXMgbmVjZXNzYXJ5IGZvciBwZXJmb3JtaW5nIGNvbXBvbmVudCBs
b29rdXBzJywgY29tcG9uZW50TG9va3VwKTsKLQotICAgIHJldHVybiBjb21wb25lbnRMb29rdXAu
bG9va3VwRmFjdG9yeShuYW1lLCBvd25lcik7Ci0gIH0KLQotICBmdW5jdGlvbiByZWFkVW53cmFw
cGVkTW9kZWwob2JqZWN0KSB7Ci0gICAgaWYgKF9lbWJlck1ldGFsU3RyZWFtc1V0aWxzLmlzU3Ry
ZWFtKG9iamVjdCkpIHsKLSAgICAgIHZhciByZXN1bHQgPSBvYmplY3QudmFsdWUoKTsKLQotICAg
ICAgLy8gSWYgdGhlIHBhdGggaXMgZXhhY3RseSBgY29udHJvbGxlcmAgdGhlbiB3ZSBkb24ndCB1
bndyYXAgaXQuCi0gICAgICBpZiAob2JqZWN0LmxhYmVsICE9PSAnY29udHJvbGxlcicpIHsKLSAg
ICAgICAgd2hpbGUgKF9lbWJlclJ1bnRpbWVNaXhpbnNDb250cm9sbGVyLmRlZmF1bHQuZGV0ZWN0
KHJlc3VsdCkpIHsKLSAgICAgICAgICByZXN1bHQgPSBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5n
ZXQocmVzdWx0LCAnbW9kZWwnKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICByZXR1cm4g
cmVzdWx0OwotICAgIH0gZWxzZSB7Ci0gICAgICByZXR1cm4gb2JqZWN0OwotICAgIH0KLSAgfQot
fSk7Ci1lbmlmZWQoImVtYmVyLXZpZXdzL3N5c3RlbS9hY3Rpb25fbWFuYWdlciIsIFsiZXhwb3J0
cyJdLCBmdW5jdGlvbiAoZXhwb3J0cykgewotICAvKioKLSAgQG1vZHVsZSBlbWJlcgotICBAc3Vi
bW9kdWxlIGVtYmVyLXZpZXdzCi0gICovCi0KLSAgInVzZSBzdHJpY3QiOwotCi0gIGZ1bmN0aW9u
IEFjdGlvbk1hbmFnZXIoKSB7fQotCi0gIC8qKgotICAgIEdsb2JhbCBhY3Rpb24gaWQgaGFzaC4K
LSAgCi0gICAgQHByaXZhdGUKLSAgICBAcHJvcGVydHkgcmVnaXN0ZXJlZEFjdGlvbnMKLSAgICBA
dHlwZSBPYmplY3QKLSAgKi8KLSAgQWN0aW9uTWFuYWdlci5yZWdpc3RlcmVkQWN0aW9ucyA9IHt9
OwotCi0gIGV4cG9ydHMuZGVmYXVsdCA9IEFjdGlvbk1hbmFnZXI7Ci19KTsKLWVuaWZlZCgnZW1i
ZXItdmlld3Mvc3lzdGVtL2J1aWxkLWNvbXBvbmVudC10ZW1wbGF0ZScsIFsnZXhwb3J0cycsICdl
bWJlci1tZXRhbC9kZWJ1ZycsICdlbWJlci1tZXRhbC9wcm9wZXJ0eV9nZXQnLCAnZW1iZXItbWV0
YWwvYXNzaWduJywgJ2h0bWxiYXJzLXJ1bnRpbWUnLCAnZW1iZXItaHRtbGJhcnMvaG9va3MvZ2V0
LXZhbHVlJywgJ2VtYmVyLW1ldGFsL3N0cmVhbXMvdXRpbHMnXSwgZnVuY3Rpb24gKGV4cG9ydHMs
IF9lbWJlck1ldGFsRGVidWcsIF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LCBfZW1iZXJNZXRhbEFz
c2lnbiwgX2h0bWxiYXJzUnVudGltZSwgX2VtYmVySHRtbGJhcnNIb29rc0dldFZhbHVlLCBfZW1i
ZXJNZXRhbFN0cmVhbXNVdGlscykgewotICAndXNlIHN0cmljdCc7Ci0KLSAgZXhwb3J0cy5kZWZh
dWx0ID0gYnVpbGRDb21wb25lbnRUZW1wbGF0ZTsKLSAgZXhwb3J0cy5idWlsZEhUTUxUZW1wbGF0
ZSA9IGJ1aWxkSFRNTFRlbXBsYXRlOwotCi0gIGZ1bmN0aW9uIGJ1aWxkQ29tcG9uZW50VGVtcGxh
dGUoX3JlZiwgYXR0cnMsIGNvbnRlbnQpIHsKLSAgICB2YXIgY29tcG9uZW50ID0gX3JlZi5jb21w
b25lbnQ7Ci0gICAgdmFyIHRhZ05hbWUgPSBfcmVmLnRhZ05hbWU7Ci0gICAgdmFyIGxheW91dCA9
IF9yZWYubGF5b3V0OwotICAgIHZhciBpc0FuZ2xlQnJhY2tldCA9IF9yZWYuaXNBbmdsZUJyYWNr
ZXQ7Ci0gICAgdmFyIGlzQ29tcG9uZW50RWxlbWVudCA9IF9yZWYuaXNDb21wb25lbnRFbGVtZW50
OwotICAgIHZhciBvdXRlckF0dHJzID0gX3JlZi5vdXRlckF0dHJzOwotCi0gICAgdmFyIGJsb2Nr
VG9SZW5kZXIsIG1ldGE7Ci0KLSAgICBpZiAoY29tcG9uZW50ID09PSB1bmRlZmluZWQpIHsKLSAg
ICAgIGNvbXBvbmVudCA9IG51bGw7Ci0gICAgfQotCi0gICAgaWYgKGxheW91dCAmJiBsYXlvdXQu
cmF3KSB7Ci0gICAgICB2YXIgeWllbGRUbyA9IGNyZWF0ZUNvbnRlbnRCbG9ja3MoY29udGVudC50
ZW1wbGF0ZXMsIGNvbnRlbnQuc2NvcGUsIGNvbnRlbnQuc2VsZiwgY29tcG9uZW50KTsKLSAgICAg
IGJsb2NrVG9SZW5kZXIgPSBjcmVhdGVMYXlvdXRCbG9jayhsYXlvdXQucmF3LCB5aWVsZFRvLCBj
b250ZW50LnNlbGYsIGNvbXBvbmVudCwgYXR0cnMpOwotICAgICAgbWV0YSA9IGxheW91dC5yYXcu
bWV0YTsKLSAgICB9IGVsc2UgaWYgKGNvbnRlbnQudGVtcGxhdGVzICYmIGNvbnRlbnQudGVtcGxh
dGVzLmRlZmF1bHQpIHsKLSAgICAgIGJsb2NrVG9SZW5kZXIgPSBjcmVhdGVDb250ZW50QmxvY2so
Y29udGVudC50ZW1wbGF0ZXMuZGVmYXVsdCwgY29udGVudC5zY29wZSwgY29udGVudC5zZWxmLCBj
b21wb25lbnQpOwotICAgICAgbWV0YSA9IGNvbnRlbnQudGVtcGxhdGVzLmRlZmF1bHQubWV0YTsK
LSAgICB9Ci0KLSAgICBpZiAoY29tcG9uZW50ICYmICFjb21wb25lbnQuX2lzQW5nbGVCcmFja2V0
IHx8IGlzQ29tcG9uZW50RWxlbWVudCkgewotICAgICAgdGFnTmFtZSA9IHRhZ05hbWUgfHwgdGFn
TmFtZUZvcihjb21wb25lbnQpOwotCi0gICAgICAvLyBJZiB0aGlzIGlzIG5vdCBhIHRhZ2xlc3Mg
Y29tcG9uZW50LCB3ZSBuZWVkIHRvIGNyZWF0ZSB0aGUgd3JhcHBpbmcKLSAgICAgIC8vIGVsZW1l
bnQuIFdlIHVzZSBgbWFudWFsRWxlbWVudGAgdG8gY3JlYXRlIGEgdGVtcGxhdGUgdGhhdCByZXBy
ZXNlbnRzCi0gICAgICAvLyB0aGUgd3JhcHBpbmcgZWxlbWVudCBhbmQgeWllbGRzIHRvIHRoZSBw
cmV2aW91cyBibG9jay4KLSAgICAgIGlmICh0YWdOYW1lICE9PSAnJykgewotICAgICAgICBpZiAo
aXNDb21wb25lbnRFbGVtZW50KSB7Ci0gICAgICAgICAgYXR0cnMgPSBtZXJnZUF0dHJzKGF0dHJz
LCBvdXRlckF0dHJzKTsKLSAgICAgICAgfQotICAgICAgICB2YXIgYXR0cmlidXRlcyA9IG5vcm1h
bGl6ZUNvbXBvbmVudEF0dHJpYnV0ZXMoY29tcG9uZW50LCBpc0FuZ2xlQnJhY2tldCwgYXR0cnMp
OwotICAgICAgICB2YXIgZWxlbWVudFRlbXBsYXRlID0gX2h0bWxiYXJzUnVudGltZS5pbnRlcm5h
bC5tYW51YWxFbGVtZW50KHRhZ05hbWUsIGF0dHJpYnV0ZXMpOwotICAgICAgICBlbGVtZW50VGVt
cGxhdGUubWV0YSA9IG1ldGE7Ci0KLSAgICAgICAgYmxvY2tUb1JlbmRlciA9IGNyZWF0ZUVsZW1l
bnRCbG9jayhlbGVtZW50VGVtcGxhdGUsIGJsb2NrVG9SZW5kZXIsIGNvbXBvbmVudCk7Ci0gICAg
ICB9IGVsc2UgewotICAgICAgICB2YWxpZGF0ZVRhZ2xlc3NDb21wb25lbnQoY29tcG9uZW50KTsK
LSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyB0YWdOYW1lIGlzIG9uZSBvZjoKLSAgICAvLyAgICog
YHVuZGVmaW5lZGAgaWYgbm8gY29tcG9uZW50IGlzIHByZXNlbnQKLSAgICAvLyAgICogdGhlIGZh
bHN5IHZhbHVlICIiIGlmIHNldCBleHBsaWNpdGx5IG9uIHRoZSBjb21wb25lbnQKLSAgICAvLyAg
ICogYW4gYWN0dWFsIHRhZ05hbWUgc2V0IGV4cGxpY2l0bHkgb24gdGhlIGNvbXBvbmVudAotICAg
IHJldHVybiB7IGNyZWF0ZWRFbGVtZW50OiAhIXRhZ05hbWUsIGJsb2NrOiBibG9ja1RvUmVuZGVy
IH07Ci0gIH0KLQotICBmdW5jdGlvbiBidWlsZEhUTUxUZW1wbGF0ZSh0YWdOYW1lLCBfYXR0cnMs
IGNvbnRlbnQpIHsKLSAgICB2YXIgYXR0cnMgPSB7fTsKLQotICAgIGZvciAodmFyIHByb3AgaW4g
X2F0dHJzKSB7Ci0gICAgICB2YXIgdmFsID0gX2F0dHJzW3Byb3BdOwotCi0gICAgICBpZiAodHlw
ZW9mIHZhbCA9PT0gJ3N0cmluZycpIHsKLSAgICAgICAgYXR0cnNbcHJvcF0gPSB2YWw7Ci0gICAg
ICB9IGVsc2UgewotICAgICAgICBhdHRyc1twcm9wXSA9IFsndmFsdWUnLCB2YWxdOwotICAgICAg
fQotICAgIH0KLQotICAgIHZhciBjaGlsZFRlbXBsYXRlID0gY29udGVudC50ZW1wbGF0ZXMuZGVm
YXVsdDsKLSAgICB2YXIgZWxlbWVudFRlbXBsYXRlID0gX2h0bWxiYXJzUnVudGltZS5pbnRlcm5h
bC5tYW51YWxFbGVtZW50KHRhZ05hbWUsIGF0dHJzLCBjaGlsZFRlbXBsYXRlLmlzRW1wdHkpOwot
Ci0gICAgaWYgKGNoaWxkVGVtcGxhdGUuaXNFbXB0eSkgewotICAgICAgcmV0dXJuIGJsb2NrRm9y
KGVsZW1lbnRUZW1wbGF0ZSwgeyBzY29wZTogY29udGVudC5zY29wZSB9KTsKLSAgICB9IGVsc2Ug
ewotICAgICAgdmFyIGJsb2NrVG9SZW5kZXIgPSBibG9ja0Zvcihjb250ZW50LnRlbXBsYXRlcy5k
ZWZhdWx0LCBjb250ZW50KTsKLSAgICAgIHJldHVybiBibG9ja0ZvcihlbGVtZW50VGVtcGxhdGUs
IHsgeWllbGRUbzogYmxvY2tUb1JlbmRlciwgc2NvcGU6IGNvbnRlbnQuc2NvcGUgfSk7Ci0gICAg
fQotICB9Ci0KLSAgZnVuY3Rpb24gbWVyZ2VBdHRycyhpbm5lckF0dHJzLCBvdXRlckF0dHJzKSB7
Ci0gICAgdmFyIHJlc3VsdCA9IF9lbWJlck1ldGFsQXNzaWduLmRlZmF1bHQoe30sIGlubmVyQXR0
cnMsIG91dGVyQXR0cnMpOwotCi0gICAgaWYgKGlubmVyQXR0cnMuY2xhc3MgJiYgb3V0ZXJBdHRy
cy5jbGFzcykgewotICAgICAgcmVzdWx0LmNsYXNzID0gWydzdWJleHByJywgJy1qb2luLWNsYXNz
ZXMnLCBbWyd2YWx1ZScsIGlubmVyQXR0cnMuY2xhc3NdLCBbJ3ZhbHVlJywgb3V0ZXJBdHRycy5j
bGFzc11dLCBbXV07Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIGZ1bmN0
aW9uIGJsb2NrRm9yKHRlbXBsYXRlLCBvcHRpb25zKSB7Ci0gICAgX2VtYmVyTWV0YWxEZWJ1Zy5h
c3NlcnQoJ0JVRzogTXVzdCBwYXNzIGEgdGVtcGxhdGUgdG8gYmxvY2tGb3InLCAhIXRlbXBsYXRl
KTsKLSAgICByZXR1cm4gX2h0bWxiYXJzUnVudGltZS5pbnRlcm5hbC5ibG9ja0ZvcihfaHRtbGJh
cnNSdW50aW1lLnJlbmRlciwgdGVtcGxhdGUsIG9wdGlvbnMpOwotICB9Ci0KLSAgZnVuY3Rpb24g
Y3JlYXRlQ29udGVudEJsb2NrKHRlbXBsYXRlLCBzY29wZSwgc2VsZiwgY29tcG9uZW50KSB7Ci0g
ICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ0JVRzogYnVpbGRDb21wb25lbnRUZW1wbGF0ZSBj
YW4gdGFrZSBhIHNjb3BlIG9yIGEgc2VsZiwgYnV0IG5vdCBib3RoJywgIShzY29wZSAmJiBzZWxm
KSk7Ci0KLSAgICByZXR1cm4gYmxvY2tGb3IodGVtcGxhdGUsIHsKLSAgICAgIHNjb3BlOiBzY29w
ZSwKLSAgICAgIHNlbGY6IHNlbGYsCi0gICAgICBvcHRpb25zOiB7IHZpZXc6IGNvbXBvbmVudCB9
Ci0gICAgfSk7Ci0gIH0KLQotICBmdW5jdGlvbiBjcmVhdGVDb250ZW50QmxvY2tzKHRlbXBsYXRl
cywgc2NvcGUsIHNlbGYsIGNvbXBvbmVudCkgewotICAgIGlmICghdGVtcGxhdGVzKSB7Ci0gICAg
ICByZXR1cm47Ci0gICAgfQotICAgIHZhciBvdXRwdXQgPSB7fTsKLSAgICBmb3IgKHZhciBuYW1l
IGluIHRlbXBsYXRlcykgewotICAgICAgaWYgKHRlbXBsYXRlcy5oYXNPd25Qcm9wZXJ0eShuYW1l
KSkgewotICAgICAgICB2YXIgdGVtcGxhdGUgPSB0ZW1wbGF0ZXNbbmFtZV07Ci0gICAgICAgIGlm
ICh0ZW1wbGF0ZSkgewotICAgICAgICAgIG91dHB1dFtuYW1lXSA9IGNyZWF0ZUNvbnRlbnRCbG9j
ayh0ZW1wbGF0ZXNbbmFtZV0sIHNjb3BlLCBzZWxmLCBjb21wb25lbnQpOwotICAgICAgICB9Ci0g
ICAgICB9Ci0gICAgfQotICAgIHJldHVybiBvdXRwdXQ7Ci0gIH0KLQotICBmdW5jdGlvbiBjcmVh
dGVMYXlvdXRCbG9jayh0ZW1wbGF0ZSwgeWllbGRUbywgc2VsZiwgY29tcG9uZW50LCBhdHRycykg
ewotICAgIHJldHVybiBibG9ja0Zvcih0ZW1wbGF0ZSwgewotICAgICAgeWllbGRUbzogeWllbGRU
bywKLQotICAgICAgLy8gSWYgd2UgaGF2ZSBhbiBvbGQtc3R5bGUgQ29udHJvbGxlciB3aXRoIGEg
dGVtcGxhdGUgaXQgd2lsbCBiZQotICAgICAgLy8gcGFzc2VkIGFzIG91ciBgc2VsZmAgYXJndW1l
bnQsIGFuZCBpdCBzaG91bGQgYmUgdGhlIGNvbnRleHQgZm9yCi0gICAgICAvLyB0aGUgdGVtcGxh
dGUuIE90aGVyd2lzZSwgd2UgbXVzdCBoYXZlIGEgcmVhbCBDb21wb25lbnQgYW5kIGl0Ci0gICAg
ICAvLyBzaG91bGQgYmUgaXRzIG93biB0ZW1wbGF0ZSBjb250ZXh0LgotICAgICAgc2VsZjogc2Vs
ZiB8fCBjb21wb25lbnQsCi0KLSAgICAgIG9wdGlvbnM6IHsgdmlldzogY29tcG9uZW50LCBhdHRy
czogYXR0cnMgfQotICAgIH0pOwotICB9Ci0KLSAgZnVuY3Rpb24gY3JlYXRlRWxlbWVudEJsb2Nr
KHRlbXBsYXRlLCB5aWVsZFRvLCBjb21wb25lbnQpIHsKLSAgICByZXR1cm4gYmxvY2tGb3IodGVt
cGxhdGUsIHsKLSAgICAgIHlpZWxkVG86IHlpZWxkVG8sCi0gICAgICBzZWxmOiBjb21wb25lbnQs
Ci0gICAgICBvcHRpb25zOiB7IHZpZXc6IGNvbXBvbmVudCB9Ci0gICAgfSk7Ci0gIH0KLQotICBm
dW5jdGlvbiB0YWdOYW1lRm9yKHZpZXcpIHsKLSAgICB2YXIgdGFnTmFtZSA9IHZpZXcudGFnTmFt
ZTsKLQotICAgIGlmICh0YWdOYW1lICE9PSBudWxsICYmIHR5cGVvZiB0YWdOYW1lID09PSAnb2Jq
ZWN0JyAmJiB0YWdOYW1lLmlzRGVzY3JpcHRvcikgewotICAgICAgdGFnTmFtZSA9IF9lbWJlck1l
dGFsUHJvcGVydHlfZ2V0LmdldCh2aWV3LCAndGFnTmFtZScpOwotICAgICAgX2VtYmVyTWV0YWxE
ZWJ1Zy5kZXByZWNhdGUoJ0luIHRoZSBmdXR1cmUgdXNpbmcgYSBjb21wdXRlZCBwcm9wZXJ0eSB0
byBkZWZpbmUgdGFnTmFtZSB3aWxsIG5vdCBiZSBwZXJtaXR0ZWQuIFRoYXQgdmFsdWUgd2lsbCBi
ZSByZXNwZWN0ZWQsIGJ1dCBjaGFuZ2luZyBpdCB3aWxsIG5vdCB1cGRhdGUgdGhlIGVsZW1lbnQu
JywgIXRhZ05hbWUsIHsgaWQ6ICdlbWJlci12aWV3cy5jb21wdXRlZC10YWctbmFtZScsIHVudGls
OiAnMi4wLjAnIH0pOwotICAgIH0KLQotICAgIGlmICh0YWdOYW1lID09PSBudWxsIHx8IHRhZ05h
bWUgPT09IHVuZGVmaW5lZCkgewotICAgICAgdGFnTmFtZSA9IHZpZXcuX2RlZmF1bHRUYWdOYW1l
IHx8ICdkaXYnOwotICAgIH0KLQotICAgIHJldHVybiB0YWdOYW1lOwotICB9Ci0KLSAgLy8gVGFr
ZXMgYSBjb21wb25lbnQgYW5kIGJ1aWxkcyBhIG5vcm1hbGl6ZWQgc2V0IG9mIGF0dHJpYnV0ZQot
ICAvLyBiaW5kaW5ncyBjb25zdW1hYmxlIGJ5IEhUTUxCYXJzJyBgYXR0cmlidXRlYCBob29rLgot
ICBmdW5jdGlvbiBub3JtYWxpemVDb21wb25lbnRBdHRyaWJ1dGVzKGNvbXBvbmVudCwgaXNBbmds
ZUJyYWNrZXQsIGF0dHJzKSB7Ci0gICAgdmFyIG5vcm1hbGl6ZWQgPSB7fTsKLSAgICB2YXIgYXR0
cmlidXRlQmluZGluZ3MgPSBjb21wb25lbnQuYXR0cmlidXRlQmluZGluZ3M7Ci0gICAgdmFyIHN0
cmVhbUJhc2VQYXRoID0gY29tcG9uZW50LmlzQ29tcG9uZW50ID8gJycgOiAndmlldy4nOwotICAg
IHZhciBpLCBsOwotCi0gICAgaWYgKGF0dHJzLmlkICYmIF9lbWJlckh0bWxiYXJzSG9va3NHZXRW
YWx1ZS5kZWZhdWx0KGF0dHJzLmlkKSkgewotICAgICAgLy8gRG8gbm90IGFsbG93IGJpbmRpbmcg
dG8gdGhlIGBpZGAKLSAgICAgIG5vcm1hbGl6ZWQuaWQgPSBfZW1iZXJIdG1sYmFyc0hvb2tzR2V0
VmFsdWUuZGVmYXVsdChhdHRycy5pZCk7Ci0gICAgICBjb21wb25lbnQuZWxlbWVudElkID0gbm9y
bWFsaXplZC5pZDsKLSAgICB9IGVsc2UgewotICAgICAgbm9ybWFsaXplZC5pZCA9IGNvbXBvbmVu
dC5lbGVtZW50SWQ7Ci0gICAgfQotCi0gICAgaWYgKGF0dHJpYnV0ZUJpbmRpbmdzKSB7Ci0gICAg
ICBmb3IgKGkgPSAwLCBsID0gYXR0cmlidXRlQmluZGluZ3MubGVuZ3RoOyBpIDwgbDsgaSsrKSB7
Ci0gICAgICAgIHZhciBhdHRyID0gYXR0cmlidXRlQmluZGluZ3NbaV07Ci0gICAgICAgIHZhciBj
b2xvbkluZGV4ID0gYXR0ci5pbmRleE9mKCc6Jyk7Ci0KLSAgICAgICAgdmFyIGF0dHJOYW1lLCBl
eHByZXNzaW9uOwotICAgICAgICBpZiAoY29sb25JbmRleCAhPT0gLTEpIHsKLSAgICAgICAgICB2
YXIgYXR0clByb3BlcnR5ID0gYXR0ci5zdWJzdHJpbmcoMCwgY29sb25JbmRleCk7Ci0gICAgICAg
ICAgYXR0ck5hbWUgPSBhdHRyLnN1YnN0cmluZyhjb2xvbkluZGV4ICsgMSk7Ci0gICAgICAgICAg
ZXhwcmVzc2lvbiA9IFsnZ2V0JywgJycgKyBzdHJlYW1CYXNlUGF0aCArIGF0dHJQcm9wZXJ0eV07
Ci0gICAgICAgIH0gZWxzZSBpZiAoYXR0cnNbYXR0cl0pIHsKLSAgICAgICAgICAvLyBUT0RPOiBG
b3IgY29tcGF0aWJpbGl0eSB3aXRoIDEueCwgd2UgcHJvYmFibHkgbmVlZCB0byBgc2V0YAotICAg
ICAgICAgIC8vIHRoZSBjb21wb25lbnQncyBhdHRyaWJ1dGUgaGVyZSBpZiBpdCBpcyBhIENQLCBi
dXQgd2UgYWxzbwotICAgICAgICAgIC8vIHByb2JhYmx5IHdhbnQgdG8gc3VzcGVuZCBvYnNlcnZl
cnMgYW5kIGFsbG93IHRoZQotICAgICAgICAgIC8vIHdpbGxVcGRhdGVBdHRycyBsb2dpYyB0byB0
cmlnZ2VyIG9ic2VydmVycyBhdCB0aGUgY29ycmVjdCB0aW1lLgotICAgICAgICAgIGF0dHJOYW1l
ID0gYXR0cjsKLSAgICAgICAgICBleHByZXNzaW9uID0gWyd2YWx1ZScsIGF0dHJzW2F0dHJdXTsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBhdHRyTmFtZSA9IGF0dHI7Ci0gICAgICAgICAg
ZXhwcmVzc2lvbiA9IFsnZ2V0JywgJycgKyBzdHJlYW1CYXNlUGF0aCArIGF0dHJdOwotICAgICAg
ICB9Ci0KLSAgICAgICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ1lvdSBjYW5ub3QgdXNlIGNs
YXNzIGFzIGFuIGF0dHJpYnV0ZUJpbmRpbmcsIHVzZSBjbGFzc05hbWVCaW5kaW5ncyBpbnN0ZWFk
LicsIGF0dHJOYW1lICE9PSAnY2xhc3MnKTsKLQotICAgICAgICBub3JtYWxpemVkW2F0dHJOYW1l
XSA9IGV4cHJlc3Npb247Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGlzQW5nbGVCcmFja2V0
KSB7Ci0gICAgICBmb3IgKHZhciBwcm9wIGluIGF0dHJzKSB7Ci0gICAgICAgIHZhciB2YWwgPSBh
dHRyc1twcm9wXTsKLSAgICAgICAgaWYgKCF2YWwpIHsKLSAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJyB8fCB2YWwuaXND
b25jYXQpIHsKLSAgICAgICAgICBub3JtYWxpemVkW3Byb3BdID0gWyd2YWx1ZScsIHZhbF07Ci0g
ICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoYXR0cnMudGFnTmFtZSkgewotICAg
ICAgY29tcG9uZW50LnRhZ05hbWUgPSBhdHRycy50YWdOYW1lOwotICAgIH0KLQotICAgIHZhciBu
b3JtYWxpemVkQ2xhc3MgPSBub3JtYWxpemVDbGFzcyhjb21wb25lbnQsIGF0dHJzLCBzdHJlYW1C
YXNlUGF0aCk7Ci0KLSAgICBpZiAobm9ybWFsaXplZENsYXNzKSB7Ci0gICAgICBub3JtYWxpemVk
LmNsYXNzID0gbm9ybWFsaXplZENsYXNzOwotICAgIH0KLQotICAgIGlmIChfZW1iZXJNZXRhbFBy
b3BlcnR5X2dldC5nZXQoY29tcG9uZW50LCAnaXNWaXNpYmxlJykgPT09IGZhbHNlKSB7Ci0gICAg
ICB2YXIgaGlkZGVuU3R5bGUgPSBbJ3N1YmV4cHInLCAnLWh0bWwtc2FmZScsIFsnZGlzcGxheTog
bm9uZTsnXSwgW11dOwotICAgICAgdmFyIGV4aXN0aW5nU3R5bGUgPSBub3JtYWxpemVkLnN0eWxl
OwotCi0gICAgICBpZiAoZXhpc3RpbmdTdHlsZSkgewotICAgICAgICBub3JtYWxpemVkLnN0eWxl
ID0gWydzdWJleHByJywgJ2NvbmNhdCcsIFtleGlzdGluZ1N0eWxlLCAnICcsIGhpZGRlblN0eWxl
XSwgW11dOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgbm9ybWFsaXplZC5zdHlsZSA9IGhpZGRl
blN0eWxlOwotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBub3JtYWxpemVkOwotICB9Ci0K
LSAgZnVuY3Rpb24gbm9ybWFsaXplQ2xhc3MoY29tcG9uZW50LCBhdHRycywgc3RyZWFtQmFzZVBh
dGgpIHsKLSAgICB2YXIgaSwgbDsKLSAgICB2YXIgbm9ybWFsaXplZENsYXNzID0gW107Ci0gICAg
dmFyIGNsYXNzTmFtZXMgPSBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQoY29tcG9uZW50LCAn
Y2xhc3NOYW1lcycpOwotICAgIHZhciBjbGFzc05hbWVCaW5kaW5ncyA9IF9lbWJlck1ldGFsUHJv
cGVydHlfZ2V0LmdldChjb21wb25lbnQsICdjbGFzc05hbWVCaW5kaW5ncycpOwotCi0gICAgaWYg
KGF0dHJzLmNsYXNzKSB7Ci0gICAgICBpZiAoX2VtYmVyTWV0YWxTdHJlYW1zVXRpbHMuaXNTdHJl
YW0oYXR0cnMuY2xhc3MpKSB7Ci0gICAgICAgIG5vcm1hbGl6ZWRDbGFzcy5wdXNoKFsnc3ViZXhw
cicsICctbm9ybWFsaXplLWNsYXNzJywgW1sndmFsdWUnLCBhdHRycy5jbGFzcy5wYXRoXSwgWyd2
YWx1ZScsIGF0dHJzLmNsYXNzXV0sIFtdXSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBub3Jt
YWxpemVkQ2xhc3MucHVzaChhdHRycy5jbGFzcyk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYg
KGF0dHJzLmNsYXNzQmluZGluZykgewotICAgICAgbm9ybWFsaXplQ2xhc3NlcyhhdHRycy5jbGFz
c0JpbmRpbmcuc3BsaXQoJyAnKSwgbm9ybWFsaXplZENsYXNzLCBzdHJlYW1CYXNlUGF0aCk7Ci0g
ICAgfQotCi0gICAgaWYgKGNsYXNzTmFtZXMpIHsKLSAgICAgIGZvciAoaSA9IDAsIGwgPSBjbGFz
c05hbWVzLmxlbmd0aDsgaSA8IGw7IGkrKykgewotICAgICAgICBub3JtYWxpemVkQ2xhc3MucHVz
aChjbGFzc05hbWVzW2ldKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoY2xhc3NOYW1lQmlu
ZGluZ3MpIHsKLSAgICAgIG5vcm1hbGl6ZUNsYXNzZXMoY2xhc3NOYW1lQmluZGluZ3MsIG5vcm1h
bGl6ZWRDbGFzcywgc3RyZWFtQmFzZVBhdGgpOwotICAgIH0KLQotICAgIGlmIChub3JtYWxpemVD
bGFzcy5sZW5ndGgpIHsKLSAgICAgIHJldHVybiBbJ3N1YmV4cHInLCAnLWpvaW4tY2xhc3Nlcycs
IG5vcm1hbGl6ZWRDbGFzcywgW11dOwotICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIG5vcm1hbGl6
ZUNsYXNzZXMoY2xhc3Nlcywgb3V0cHV0LCBzdHJlYW1CYXNlUGF0aCkgewotICAgIHZhciBpLCBs
OwotCi0gICAgZm9yIChpID0gMCwgbCA9IGNsYXNzZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7Ci0g
ICAgICB2YXIgY2xhc3NOYW1lID0gY2xhc3Nlc1tpXTsKLSAgICAgIF9lbWJlck1ldGFsRGVidWcu
YXNzZXJ0KCdjbGFzc05hbWVCaW5kaW5ncyBtdXN0IG5vdCBoYXZlIHNwYWNlcyBpbiB0aGVtLiBN
dWx0aXBsZSBjbGFzcyBuYW1lIGJpbmRpbmdzIGNhbiBiZSBwcm92aWRlZCBhcyBlbGVtZW50cyBv
ZiBhbiBhcnJheSwgZS5nLiBbXCdmb29cJywgXCc6YmFyXCddJywgY2xhc3NOYW1lLmluZGV4T2Yo
JyAnKSA9PT0gLTEpOwotCi0gICAgICB2YXIgX2NsYXNzTmFtZSRzcGxpdCA9IGNsYXNzTmFtZS5z
cGxpdCgnOicpOwotCi0gICAgICB2YXIgcHJvcE5hbWUgPSBfY2xhc3NOYW1lJHNwbGl0WzBdOwot
ICAgICAgdmFyIGFjdGl2ZUNsYXNzID0gX2NsYXNzTmFtZSRzcGxpdFsxXTsKLSAgICAgIHZhciBp
bmFjdGl2ZUNsYXNzID0gX2NsYXNzTmFtZSRzcGxpdFsyXTsKLQotICAgICAgLy8gTGVnYWN5IDpj
bGFzcyBtaWNyb3N5bnRheCBmb3Igc3RhdGljIGNsYXNzIG5hbWVzCi0gICAgICBpZiAocHJvcE5h
bWUgPT09ICcnKSB7Ci0gICAgICAgIG91dHB1dC5wdXNoKGFjdGl2ZUNsYXNzKTsKLSAgICAgICAg
Y29udGludWU7Ci0gICAgICB9Ci0KLSAgICAgIHZhciBwcm9wID0gJycgKyBzdHJlYW1CYXNlUGF0
aCArIHByb3BOYW1lOwotCi0gICAgICBvdXRwdXQucHVzaChbJ3N1YmV4cHInLCAnLW5vcm1hbGl6
ZS1jbGFzcycsIFsKLSAgICAgIC8vIHBhcmFtcwotICAgICAgWyd2YWx1ZScsIHByb3BOYW1lXSwg
WydnZXQnLCBwcm9wXV0sIFsKLSAgICAgIC8vIGhhc2gKLSAgICAgICdhY3RpdmVDbGFzcycsIGFj
dGl2ZUNsYXNzLCAnaW5hY3RpdmVDbGFzcycsIGluYWN0aXZlQ2xhc3NdXSk7Ci0gICAgfQotICB9
Ci0KLSAgZnVuY3Rpb24gdmFsaWRhdGVUYWdsZXNzQ29tcG9uZW50KGNvbXBvbmVudCkgewotICAg
IF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0KCdZb3UgY2Fubm90IHVzZSBgY2xhc3NOYW1lQmluZGlu
Z3NgIG9uIGEgdGFnLWxlc3MgY29tcG9uZW50OiAnICsgY29tcG9uZW50LnRvU3RyaW5nKCksIChm
dW5jdGlvbiAoKSB7Ci0gICAgICB2YXIgY2xhc3NOYW1lQmluZGluZ3MgPSBjb21wb25lbnQuY2xh
c3NOYW1lQmluZGluZ3M7Ci0gICAgICByZXR1cm4gIWNsYXNzTmFtZUJpbmRpbmdzIHx8IGNsYXNz
TmFtZUJpbmRpbmdzLmxlbmd0aCA9PT0gMDsKLSAgICB9KSgpKTsKLSAgfQotfSk7Ci1lbmlmZWQo
J2VtYmVyLXZpZXdzL3N5c3RlbS9ldmVudF9kaXNwYXRjaGVyJywgWydleHBvcnRzJywgJ2VtYmVy
LW1ldGFsL2RlYnVnJywgJ2VtYmVyLW1ldGFsL3Byb3BlcnR5X2dldCcsICdlbWJlci1tZXRhbC9w
cm9wZXJ0eV9zZXQnLCAnZW1iZXItbWV0YWwvaXNfbm9uZScsICdlbWJlci1tZXRhbC9ydW5fbG9v
cCcsICdlbWJlci1ydW50aW1lL3N5c3RlbS9vYmplY3QnLCAnZW1iZXItdmlld3Mvc3lzdGVtL2px
dWVyeScsICdlbWJlci12aWV3cy9zeXN0ZW0vYWN0aW9uX21hbmFnZXInLCAnZW1iZXItdmlld3Mv
dmlld3MvdmlldycsICdlbWJlci1tZXRhbC9hc3NpZ24nLCAnY29udGFpbmVyL293bmVyJywgJ2Vt
YmVyLW1ldGFsL2Vudmlyb25tZW50J10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbERl
YnVnLCBfZW1iZXJNZXRhbFByb3BlcnR5X2dldCwgX2VtYmVyTWV0YWxQcm9wZXJ0eV9zZXQsIF9l
bWJlck1ldGFsSXNfbm9uZSwgX2VtYmVyTWV0YWxSdW5fbG9vcCwgX2VtYmVyUnVudGltZVN5c3Rl
bU9iamVjdCwgX2VtYmVyVmlld3NTeXN0ZW1KcXVlcnksIF9lbWJlclZpZXdzU3lzdGVtQWN0aW9u
X21hbmFnZXIsIF9lbWJlclZpZXdzVmlld3NWaWV3LCBfZW1iZXJNZXRhbEFzc2lnbiwgX2NvbnRh
aW5lck93bmVyLCBfZW1iZXJNZXRhbEVudmlyb25tZW50KSB7Ci0gIC8qKgotICBAbW9kdWxlIGVt
YmVyCi0gIEBzdWJtb2R1bGUgZW1iZXItdmlld3MKLSAgKi8KLQotICAndXNlIHN0cmljdCc7Ci0K
LSAgdmFyIFJPT1RfRUxFTUVOVF9DTEFTUyA9ICdlbWJlci1hcHBsaWNhdGlvbic7Ci0gIHZhciBS
T09UX0VMRU1FTlRfU0VMRUNUT1IgPSAnLicgKyBST09UX0VMRU1FTlRfQ0xBU1M7Ci0KLSAgLyoq
Ci0gICAgYEVtYmVyLkV2ZW50RGlzcGF0Y2hlcmAgaGFuZGxlcyBkZWxlZ2F0aW5nIGJyb3dzZXIg
ZXZlbnRzIHRvIHRoZWlyCi0gICAgY29ycmVzcG9uZGluZyBgRW1iZXIuVmlld3MuYCBGb3IgZXhh
bXBsZSwgd2hlbiB5b3UgY2xpY2sgb24gYSB2aWV3LAotICAgIGBFbWJlci5FdmVudERpc3BhdGNo
ZXJgIGVuc3VyZXMgdGhhdCB0aGF0IHZpZXcncyBgbW91c2VEb3duYCBtZXRob2QgZ2V0cwotICAg
IGNhbGxlZC4KLSAgCi0gICAgQGNsYXNzIEV2ZW50RGlzcGF0Y2hlcgotICAgIEBuYW1lc3BhY2Ug
RW1iZXIKLSAgICBAcHJpdmF0ZQotICAgIEBleHRlbmRzIEVtYmVyLk9iamVjdAotICAqLwotICBl
eHBvcnRzLmRlZmF1bHQgPSBfZW1iZXJSdW50aW1lU3lzdGVtT2JqZWN0LmRlZmF1bHQuZXh0ZW5k
KHsKLQotICAgIC8qKgotICAgICAgVGhlIHNldCBvZiBldmVudHMgbmFtZXMgKGFuZCBhc3NvY2lh
dGVkIGhhbmRsZXIgZnVuY3Rpb24gbmFtZXMpIHRvIGJlIHNldHVwCi0gICAgICBhbmQgZGlzcGF0
Y2hlZCBieSB0aGUgYEV2ZW50RGlzcGF0Y2hlcmAuIE1vZGlmaWNhdGlvbnMgdG8gdGhpcyBsaXN0
IGNhbiBiZSBkb25lCi0gICAgICBhdCBzZXR1cCB0aW1lLCBnZW5lcmFsbHkgdmlhIHRoZSBgRW1i
ZXIuQXBwbGljYXRpb24uY3VzdG9tRXZlbnRzYCBoYXNoLgotICAgICAgIFRvIGFkZCBuZXcgZXZl
bnRzIHRvIGJlIGxpc3RlbmVkIHRvOgotICAgICAgIGBgYGphdmFzY3JpcHQKLSAgICAgIHZhciBB
cHAgPSBFbWJlci5BcHBsaWNhdGlvbi5jcmVhdGUoewotICAgICAgICBjdXN0b21FdmVudHM6IHsK
LSAgICAgICAgICBwYXN0ZTogJ3Bhc3RlJwotICAgICAgICB9Ci0gICAgICB9KTsKLSAgICAgIGBg
YAotICAgICAgIFRvIHByZXZlbnQgZGVmYXVsdCBldmVudHMgZnJvbSBiZWluZyBsaXN0ZW5lZCB0
bzoKLSAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICB2YXIgQXBwID0gRW1iZXIuQXBwbGljYXRp
b24uY3JlYXRlKHsKLSAgICAgICAgY3VzdG9tRXZlbnRzOiB7Ci0gICAgICAgICAgbW91c2VlbnRl
cjogbnVsbCwKLSAgICAgICAgICBtb3VzZWxlYXZlOiBudWxsCi0gICAgICAgIH0KLSAgICAgIH0p
OwotICAgICAgYGBgCi0gICAgICBAcHJvcGVydHkgZXZlbnRzCi0gICAgICBAdHlwZSBPYmplY3QK
LSAgICAgIEBwcml2YXRlCi0gICAgKi8KLSAgICBldmVudHM6IHsKLSAgICAgIHRvdWNoc3RhcnQ6
ICd0b3VjaFN0YXJ0JywKLSAgICAgIHRvdWNobW92ZTogJ3RvdWNoTW92ZScsCi0gICAgICB0b3Vj
aGVuZDogJ3RvdWNoRW5kJywKLSAgICAgIHRvdWNoY2FuY2VsOiAndG91Y2hDYW5jZWwnLAotICAg
ICAga2V5ZG93bjogJ2tleURvd24nLAotICAgICAga2V5dXA6ICdrZXlVcCcsCi0gICAgICBrZXlw
cmVzczogJ2tleVByZXNzJywKLSAgICAgIG1vdXNlZG93bjogJ21vdXNlRG93bicsCi0gICAgICBt
b3VzZXVwOiAnbW91c2VVcCcsCi0gICAgICBjb250ZXh0bWVudTogJ2NvbnRleHRNZW51JywKLSAg
ICAgIGNsaWNrOiAnY2xpY2snLAotICAgICAgZGJsY2xpY2s6ICdkb3VibGVDbGljaycsCi0gICAg
ICBtb3VzZW1vdmU6ICdtb3VzZU1vdmUnLAotICAgICAgZm9jdXNpbjogJ2ZvY3VzSW4nLAotICAg
ICAgZm9jdXNvdXQ6ICdmb2N1c091dCcsCi0gICAgICBtb3VzZWVudGVyOiAnbW91c2VFbnRlcics
Ci0gICAgICBtb3VzZWxlYXZlOiAnbW91c2VMZWF2ZScsCi0gICAgICBzdWJtaXQ6ICdzdWJtaXQn
LAotICAgICAgaW5wdXQ6ICdpbnB1dCcsCi0gICAgICBjaGFuZ2U6ICdjaGFuZ2UnLAotICAgICAg
ZHJhZ3N0YXJ0OiAnZHJhZ1N0YXJ0JywKLSAgICAgIGRyYWc6ICdkcmFnJywKLSAgICAgIGRyYWdl
bnRlcjogJ2RyYWdFbnRlcicsCi0gICAgICBkcmFnbGVhdmU6ICdkcmFnTGVhdmUnLAotICAgICAg
ZHJhZ292ZXI6ICdkcmFnT3ZlcicsCi0gICAgICBkcm9wOiAnZHJvcCcsCi0gICAgICBkcmFnZW5k
OiAnZHJhZ0VuZCcKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICBUaGUgcm9vdCBET00gZWxlbWVu
dCB0byB3aGljaCBldmVudCBsaXN0ZW5lcnMgc2hvdWxkIGJlIGF0dGFjaGVkLiBFdmVudAotICAg
ICAgbGlzdGVuZXJzIHdpbGwgYmUgYXR0YWNoZWQgdG8gdGhlIGRvY3VtZW50IHVubGVzcyB0aGlz
IGlzIG92ZXJyaWRkZW4uCi0gICAgICAgQ2FuIGJlIHNwZWNpZmllZCBhcyBhIERPTUVsZW1lbnQg
b3IgYSBzZWxlY3RvciBzdHJpbmcuCi0gICAgICAgVGhlIGRlZmF1bHQgYm9keSBpcyBhIHN0cmlu
ZyBzaW5jZSB0aGlzIG1heSBiZSBldmFsdWF0ZWQgYmVmb3JlIGRvY3VtZW50LmJvZHkKLSAgICAg
IGV4aXN0cyBpbiB0aGUgRE9NLgotICAgICAgIEBwcml2YXRlCi0gICAgICBAcHJvcGVydHkgcm9v
dEVsZW1lbnQKLSAgICAgIEB0eXBlIERPTUVsZW1lbnQKLSAgICAgIEBkZWZhdWx0ICdib2R5Jwot
ICAgICovCi0gICAgcm9vdEVsZW1lbnQ6ICdib2R5JywKLQotICAgIC8qKgotICAgICAgSXQgZW5h
YmxlcyBldmVudHMgdG8gYmUgZGlzcGF0Y2hlZCB0byB0aGUgdmlldydzIGBldmVudE1hbmFnZXIu
YCBXaGVuIHByZXNlbnQsCi0gICAgICB0aGlzIG9iamVjdCB0YWtlcyBwcmVjZWRlbmNlIG92ZXIg
aGFuZGxpbmcgb2YgZXZlbnRzIG9uIHRoZSB2aWV3IGl0c2VsZi4KLSAgICAgICBOb3RlIHRoYXQg
bW9zdCBFbWJlciBhcHBsaWNhdGlvbnMgZG8gbm90IHVzZSB0aGlzIGZlYXR1cmUuIElmIHlvdXIg
YXBwIGFsc28KLSAgICAgIGRvZXMgbm90IHVzZSBpdCwgY29uc2lkZXIgc2V0dGluZyB0aGlzIHBy
b3BlcnR5IHRvIGZhbHNlIHRvIGdhaW4gc29tZSBwZXJmb3JtYW5jZQotICAgICAgaW1wcm92ZW1l
bnQgYnkgYWxsb3dpbmcgdGhlIEV2ZW50RGlzcGF0Y2hlciB0byBza2lwIHRoZSBzZWFyY2ggZm9y
IHRoZQotICAgICAgYGV2ZW50TWFuYWdlcmAgb24gdGhlIHZpZXcgdHJlZS4KLSAgICAgICBgYGBq
YXZhc2NyaXB0Ci0gICAgICB2YXIgRXZlbnREaXNwYXRjaGVyID0gRW0uRXZlbnREaXNwYXRjaGVy
LmV4dGVuZCh7Ci0gICAgICAgIGV2ZW50czogewotICAgICAgICAgICAgY2xpY2sgICAgICAgOiAn
Y2xpY2snLAotICAgICAgICAgICAgZm9jdXNpbiAgICAgOiAnZm9jdXNJbicsCi0gICAgICAgICAg
ICBmb2N1c291dCAgICA6ICdmb2N1c091dCcsCi0gICAgICAgICAgICBjaGFuZ2UgICAgICA6ICdj
aGFuZ2UnCi0gICAgICAgIH0sCi0gICAgICAgIGNhbkRpc3BhdGNoVG9FdmVudE1hbmFnZXI6IGZh
bHNlCi0gICAgICB9KTsKLSAgICAgIGNvbnRhaW5lci5yZWdpc3RlcignZXZlbnRfZGlzcGF0Y2hl
cjptYWluJywgRXZlbnREaXNwYXRjaGVyKTsKLSAgICAgIGBgYAotICAgICAgIEBwcm9wZXJ0eSBj
YW5EaXNwYXRjaFRvRXZlbnRNYW5hZ2VyCi0gICAgICBAdHlwZSBib29sZWFuCi0gICAgICBAZGVm
YXVsdCAndHJ1ZScKLSAgICAgIEBzaW5jZSAxLjcuMAotICAgICAgQHByaXZhdGUKLSAgICAqLwot
ICAgIGNhbkRpc3BhdGNoVG9FdmVudE1hbmFnZXI6IHRydWUsCi0KLSAgICBpbml0OiBmdW5jdGlv
biAoKSB7Ci0gICAgICB0aGlzLl9zdXBlcigpOwotICAgICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3Nl
cnQoJ0V2ZW50RGlzcGF0Y2hlciBzaG91bGQgbmV2ZXIgYmUgaW5zdGFudGlhdGVkIGluIGZhc3Ri
b290IG1vZGUuIFBsZWFzZSByZXBvcnQgdGhpcyBhcyBhbiBFbWJlciBidWcuJywgX2VtYmVyTWV0
YWxFbnZpcm9ubWVudC5kZWZhdWx0Lmhhc0RPTSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAg
U2V0cyB1cCBldmVudCBsaXN0ZW5lcnMgZm9yIHN0YW5kYXJkIGJyb3dzZXIgZXZlbnRzLgotICAg
ICAgIFRoaXMgd2lsbCBiZSBjYWxsZWQgYWZ0ZXIgdGhlIGJyb3dzZXIgc2VuZHMgYSBgRE9NQ29u
dGVudFJlYWR5YCBldmVudC4gQnkKLSAgICAgIGRlZmF1bHQsIGl0IHdpbGwgc2V0IHVwIGFsbCBv
ZiB0aGUgbGlzdGVuZXJzIG9uIHRoZSBkb2N1bWVudCBib2R5LiBJZiB5b3UKLSAgICAgIHdvdWxk
IGxpa2UgdG8gcmVnaXN0ZXIgdGhlIGxpc3RlbmVycyBvbiBhIGRpZmZlcmVudCBlbGVtZW50LCBz
ZXQgdGhlIGV2ZW50Ci0gICAgICBkaXNwYXRjaGVyJ3MgYHJvb3RgIHByb3BlcnR5LgotICAgICAg
IEBwcml2YXRlCi0gICAgICBAbWV0aG9kIHNldHVwCi0gICAgICBAcGFyYW0gYWRkZWRFdmVudHMg
e09iamVjdH0KLSAgICAqLwotICAgIHNldHVwOiBmdW5jdGlvbiAoYWRkZWRFdmVudHMsIHJvb3RF
bGVtZW50KSB7Ci0gICAgICB2YXIgZXZlbnQ7Ci0gICAgICB2YXIgZXZlbnRzID0gdGhpcy5fZmlu
YWxFdmVudHMgPSBfZW1iZXJNZXRhbEFzc2lnbi5kZWZhdWx0KHt9LCBfZW1iZXJNZXRhbFByb3Bl
cnR5X2dldC5nZXQodGhpcywgJ2V2ZW50cycpLCBhZGRlZEV2ZW50cyk7Ci0KLSAgICAgIGlmICgh
X2VtYmVyTWV0YWxJc19ub25lLmRlZmF1bHQocm9vdEVsZW1lbnQpKSB7Ci0gICAgICAgIF9lbWJl
ck1ldGFsUHJvcGVydHlfc2V0LnNldCh0aGlzLCAncm9vdEVsZW1lbnQnLCByb290RWxlbWVudCk7
Ci0gICAgICB9Ci0KLSAgICAgIHJvb3RFbGVtZW50ID0gX2VtYmVyVmlld3NTeXN0ZW1KcXVlcnku
ZGVmYXVsdChfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywgJ3Jvb3RFbGVtZW50Jykp
OwotCi0gICAgICBfZW1iZXJNZXRhbERlYnVnLmFzc2VydCgnWW91IGNhbm5vdCB1c2UgdGhlIHNh
bWUgcm9vdCBlbGVtZW50ICgnICsgKHJvb3RFbGVtZW50LnNlbGVjdG9yIHx8IHJvb3RFbGVtZW50
WzBdLnRhZ05hbWUpICsgJykgbXVsdGlwbGUgdGltZXMgaW4gYW4gRW1iZXIuQXBwbGljYXRpb24n
LCAhcm9vdEVsZW1lbnQuaXMoUk9PVF9FTEVNRU5UX1NFTEVDVE9SKSk7Ci0gICAgICBfZW1iZXJN
ZXRhbERlYnVnLmFzc2VydCgnWW91IGNhbm5vdCBtYWtlIGEgbmV3IEVtYmVyLkFwcGxpY2F0aW9u
IHVzaW5nIGEgcm9vdCBlbGVtZW50IHRoYXQgaXMgYSBkZXNjZW5kZW50IG9mIGFuIGV4aXN0aW5n
IEVtYmVyLkFwcGxpY2F0aW9uJywgIXJvb3RFbGVtZW50LmNsb3Nlc3QoUk9PVF9FTEVNRU5UX1NF
TEVDVE9SKS5sZW5ndGgpOwotICAgICAgX2VtYmVyTWV0YWxEZWJ1Zy5hc3NlcnQoJ1lvdSBjYW5u
b3QgbWFrZSBhIG5ldyBFbWJlci5BcHBsaWNhdGlvbiB1c2luZyBhIHJvb3QgZWxlbWVudCB0aGF0
IGlzIGFuIGFuY2VzdG9yIG9mIGFuIGV4aXN0aW5nIEVtYmVyLkFwcGxpY2F0aW9uJywgIXJvb3RF
bGVtZW50LmZpbmQoUk9PVF9FTEVNRU5UX1NFTEVDVE9SKS5sZW5ndGgpOwotCi0gICAgICByb290
RWxlbWVudC5hZGRDbGFzcyhST09UX0VMRU1FTlRfQ0xBU1MpOwotCi0gICAgICBfZW1iZXJNZXRh
bERlYnVnLmFzc2VydCgnVW5hYmxlIHRvIGFkZCBcJycgKyBST09UX0VMRU1FTlRfQ0xBU1MgKyAn
XCcgY2xhc3MgdG8gcm9vdEVsZW1lbnQuIE1ha2Ugc3VyZSB5b3Ugc2V0IHJvb3RFbGVtZW50IHRv
IHRoZSBib2R5IG9yIGFuIGVsZW1lbnQgaW4gdGhlIGJvZHkuJywgcm9vdEVsZW1lbnQuaXMoUk9P
VF9FTEVNRU5UX1NFTEVDVE9SKSk7Ci0KLSAgICAgIGZvciAoZXZlbnQgaW4gZXZlbnRzKSB7Ci0g
ICAgICAgIGlmIChldmVudHMuaGFzT3duUHJvcGVydHkoZXZlbnQpKSB7Ci0gICAgICAgICAgdGhp
cy5zZXR1cEhhbmRsZXIocm9vdEVsZW1lbnQsIGV2ZW50LCBldmVudHNbZXZlbnRdKTsKLSAgICAg
ICAgfQotICAgICAgfQotICAgIH0sCi0KLSAgICAvKioKLSAgICAgIFJlZ2lzdGVycyBhbiBldmVu
dCBsaXN0ZW5lciBvbiB0aGUgcm9vdEVsZW1lbnQuIElmIHRoZSBnaXZlbiBldmVudCBpcwotICAg
ICAgdHJpZ2dlcmVkLCB0aGUgcHJvdmlkZWQgZXZlbnQgaGFuZGxlciB3aWxsIGJlIHRyaWdnZXJl
ZCBvbiB0aGUgdGFyZ2V0IHZpZXcuCi0gICAgICAgSWYgdGhlIHRhcmdldCB2aWV3IGRvZXMgbm90
IGltcGxlbWVudCB0aGUgZXZlbnQgaGFuZGxlciwgb3IgaWYgdGhlIGhhbmRsZXIKLSAgICAgIHJl
dHVybnMgYGZhbHNlYCwgdGhlIHBhcmVudCB2aWV3IHdpbGwgYmUgY2FsbGVkLiBUaGUgZXZlbnQg
d2lsbCBjb250aW51ZSB0bwotICAgICAgYnViYmxlIHRvIGVhY2ggc3VjY2Vzc2l2ZSBwYXJlbnQg
dmlldyB1bnRpbCBpdCByZWFjaGVzIHRoZSB0b3AuCi0gICAgICAgQHByaXZhdGUKLSAgICAgIEBt
ZXRob2Qgc2V0dXBIYW5kbGVyCi0gICAgICBAcGFyYW0ge0VsZW1lbnR9IHJvb3RFbGVtZW50Ci0g
ICAgICBAcGFyYW0ge1N0cmluZ30gZXZlbnQgdGhlIGJyb3dzZXItb3JpZ2luYXRlZCBldmVudCB0
byBsaXN0ZW4gdG8KLSAgICAgIEBwYXJhbSB7U3RyaW5nfSBldmVudE5hbWUgdGhlIG5hbWUgb2Yg
dGhlIG1ldGhvZCB0byBjYWxsIG9uIHRoZSB2aWV3Ci0gICAgKi8KLSAgICBzZXR1cEhhbmRsZXI6
IGZ1bmN0aW9uIChyb290RWxlbWVudCwgZXZlbnQsIGV2ZW50TmFtZSkgewotICAgICAgdmFyIHNl
bGYgPSB0aGlzOwotCi0gICAgICB2YXIgb3duZXIgPSBfY29udGFpbmVyT3duZXIuZ2V0T3duZXIo
dGhpcyk7Ci0gICAgICB2YXIgdmlld1JlZ2lzdHJ5ID0gb3duZXIgJiYgb3duZXIubG9va3VwKCct
dmlldy1yZWdpc3RyeTptYWluJykgfHwgX2VtYmVyVmlld3NWaWV3c1ZpZXcuZGVmYXVsdC52aWV3
czsKLQotICAgICAgaWYgKGV2ZW50TmFtZSA9PT0gbnVsbCkgewotICAgICAgICByZXR1cm47Ci0g
ICAgICB9Ci0KLSAgICAgIHJvb3RFbGVtZW50Lm9uKGV2ZW50ICsgJy5lbWJlcicsICcuZW1iZXIt
dmlldycsIGZ1bmN0aW9uIChldnQsIHRyaWdnZXJpbmdNYW5hZ2VyKSB7Ci0gICAgICAgIHZhciB2
aWV3ID0gdmlld1JlZ2lzdHJ5W3RoaXMuaWRdOwotICAgICAgICB2YXIgcmVzdWx0ID0gdHJ1ZTsK
LQotICAgICAgICB2YXIgbWFuYWdlciA9IHNlbGYuY2FuRGlzcGF0Y2hUb0V2ZW50TWFuYWdlciA/
IHNlbGYuX2ZpbmROZWFyZXN0RXZlbnRNYW5hZ2VyKHZpZXcsIGV2ZW50TmFtZSkgOiBudWxsOwot
Ci0gICAgICAgIGlmIChtYW5hZ2VyICYmIG1hbmFnZXIgIT09IHRyaWdnZXJpbmdNYW5hZ2VyKSB7
Ci0gICAgICAgICAgcmVzdWx0ID0gc2VsZi5fZGlzcGF0Y2hFdmVudChtYW5hZ2VyLCBldnQsIGV2
ZW50TmFtZSwgdmlldyk7Ci0gICAgICAgIH0gZWxzZSBpZiAodmlldykgewotICAgICAgICAgIHJl
c3VsdCA9IHNlbGYuX2J1YmJsZUV2ZW50KHZpZXcsIGV2dCwgZXZlbnROYW1lKTsKLSAgICAgICAg
fQotCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICB9KTsKLQotICAgICAgcm9vdEVsZW1l
bnQub24oZXZlbnQgKyAnLmVtYmVyJywgJ1tkYXRhLWVtYmVyLWFjdGlvbl0nLCBmdW5jdGlvbiAo
ZXZ0KSB7Ci0gICAgICAgIHZhciBhY3Rpb25JZCA9IF9lbWJlclZpZXdzU3lzdGVtSnF1ZXJ5LmRl
ZmF1bHQoZXZ0LmN1cnJlbnRUYXJnZXQpLmF0dHIoJ2RhdGEtZW1iZXItYWN0aW9uJyk7Ci0gICAg
ICAgIHZhciBhY3Rpb25zID0gX2VtYmVyVmlld3NTeXN0ZW1BY3Rpb25fbWFuYWdlci5kZWZhdWx0
LnJlZ2lzdGVyZWRBY3Rpb25zW2FjdGlvbklkXTsKLQotICAgICAgICAvLyBXZSBoYXZlIHRvIGNo
ZWNrIGZvciBhY3Rpb25zIGhlcmUgc2luY2UgaW4gc29tZSBjYXNlcywgalF1ZXJ5IHdpbGwgdHJp
Z2dlcgotICAgICAgICAvLyBhbiBldmVudCBvbiBgcmVtb3ZlQ2hpbGRgIChpLmUuIGZvY3Vzb3V0
KSBhZnRlciB3ZSd2ZSBhbHJlYWR5IHRvcm4gZG93biB0aGUKLSAgICAgICAgLy8gYWN0aW9uIGhh
bmRsZXJzIGZvciB0aGUgdmlldy4KLSAgICAgICAgaWYgKCFhY3Rpb25zKSB7Ci0gICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwLCBfbGVuZ3Ro
ID0gYWN0aW9ucy5sZW5ndGg7IGluZGV4IDwgX2xlbmd0aDsgaW5kZXgrKykgewotICAgICAgICAg
IHZhciBhY3Rpb24gPSBhY3Rpb25zW2luZGV4XTsKLQotICAgICAgICAgIGlmIChhY3Rpb24gJiYg
YWN0aW9uLmV2ZW50TmFtZSA9PT0gZXZlbnROYW1lKSB7Ci0gICAgICAgICAgICByZXR1cm4gYWN0
aW9uLmhhbmRsZXIoZXZ0KTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0pOwotICAg
IH0sCi0KLSAgICBfZmluZE5lYXJlc3RFdmVudE1hbmFnZXI6IGZ1bmN0aW9uICh2aWV3LCBldmVu
dE5hbWUpIHsKLSAgICAgIHZhciBtYW5hZ2VyID0gbnVsbDsKLQotICAgICAgd2hpbGUgKHZpZXcp
IHsKLSAgICAgICAgbWFuYWdlciA9IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh2aWV3LCAn
ZXZlbnRNYW5hZ2VyJyk7Ci0gICAgICAgIGlmIChtYW5hZ2VyICYmIG1hbmFnZXJbZXZlbnROYW1l
XSkgewotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgdmlldyA9IF9lbWJl
ck1ldGFsUHJvcGVydHlfZ2V0LmdldCh2aWV3LCAncGFyZW50VmlldycpOwotICAgICAgfQotCi0g
ICAgICByZXR1cm4gbWFuYWdlcjsKLSAgICB9LAotCi0gICAgX2Rpc3BhdGNoRXZlbnQ6IGZ1bmN0
aW9uIChvYmplY3QsIGV2dCwgZXZlbnROYW1lLCB2aWV3KSB7Ci0gICAgICB2YXIgcmVzdWx0ID0g
dHJ1ZTsKLQotICAgICAgdmFyIGhhbmRsZXIgPSBvYmplY3RbZXZlbnROYW1lXTsKLSAgICAgIGlm
ICh0eXBlb2YgaGFuZGxlciA9PT0gJ2Z1bmN0aW9uJykgewotICAgICAgICByZXN1bHQgPSBfZW1i
ZXJNZXRhbFJ1bl9sb29wLmRlZmF1bHQob2JqZWN0LCBoYW5kbGVyLCBldnQsIHZpZXcpOwotICAg
ICAgICAvLyBEbyBub3QgcHJldmVudERlZmF1bHQgaW4gZXZlbnRNYW5hZ2Vycy4KLSAgICAgICAg
ZXZ0LnN0b3BQcm9wYWdhdGlvbigpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcmVzdWx0ID0g
dGhpcy5fYnViYmxlRXZlbnQodmlldywgZXZ0LCBldmVudE5hbWUpOwotICAgICAgfQotCi0gICAg
ICByZXR1cm4gcmVzdWx0OwotICAgIH0sCi0KLSAgICBfYnViYmxlRXZlbnQ6IGZ1bmN0aW9uICh2
aWV3LCBldnQsIGV2ZW50TmFtZSkgewotICAgICAgcmV0dXJuIHZpZXcuaGFuZGxlRXZlbnQoZXZl
bnROYW1lLCBldnQpOwotICAgIH0sCi0KLSAgICBkZXN0cm95OiBmdW5jdGlvbiAoKSB7Ci0gICAg
ICB2YXIgcm9vdEVsZW1lbnQgPSBfZW1iZXJNZXRhbFByb3BlcnR5X2dldC5nZXQodGhpcywgJ3Jv
b3RFbGVtZW50Jyk7Ci0gICAgICBfZW1iZXJWaWV3c1N5c3RlbUpxdWVyeS5kZWZhdWx0KHJvb3RF
bGVtZW50KS5vZmYoJy5lbWJlcicsICcqKicpLnJlbW92ZUNsYXNzKFJPT1RfRUxFTUVOVF9DTEFT
Uyk7Ci0gICAgICByZXR1cm4gdGhpcy5fc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKLSAg
ICB9LAotCi0gICAgdG9TdHJpbmc6IGZ1bmN0aW9uICgpIHsKLSAgICAgIHJldHVybiAnKEV2ZW50
RGlzcGF0Y2hlciknOwotICAgIH0KLSAgfSk7Ci19KTsKLWVuaWZlZCgnZW1iZXItdmlld3Mvc3lz
dGVtL2V4dCcsIFsnZXhwb3J0cycsICdlbWJlci1tZXRhbC9ydW5fbG9vcCddLCBmdW5jdGlvbiAo
ZXhwb3J0cywgX2VtYmVyTWV0YWxSdW5fbG9vcCkgewotICAvKioKLSAgQG1vZHVsZSBlbWJlcgot
ICBAc3VibW9kdWxlIGVtYmVyLXZpZXdzCi0gICovCi0KLSAgJ3VzZSBzdHJpY3QnOwotCi0gIC8v
IEFkZCBhIG5ldyBuYW1lZCBxdWV1ZSBmb3IgcmVuZGVyaW5nIHZpZXdzIHRoYXQgaGFwcGVucwot
ICAvLyBhZnRlciBiaW5kaW5ncyBoYXZlIHN5bmNlZCwgYW5kIGEgcXVldWUgZm9yIHNjaGVkdWxp
bmcgYWN0aW9ucwotICAvLyB0aGF0IHNob3VsZCBvY2N1ciBhZnRlciB2aWV3IHJlbmRlcmluZy4K
LSAgX2VtYmVyTWV0YWxSdW5fbG9vcC5kZWZhdWx0Ll9hZGRRdWV1ZSgncmVuZGVyJywgJ2FjdGlv
bnMnKTsKLSAgX2VtYmVyTWV0YWxSdW5fbG9vcC5kZWZhdWx0Ll9hZGRRdWV1ZSgnYWZ0ZXJSZW5k
ZXInLCAncmVuZGVyJyk7Ci19KTsKLWVuaWZlZCgnZW1iZXItdmlld3Mvc3lzdGVtL2pxdWVyeScs
IFsnZXhwb3J0cycsICdlbWJlci1tZXRhbC9jb3JlJywgJ2VtYmVyLW1ldGFsL2Vudmlyb25tZW50
J10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbENvcmUsIF9lbWJlck1ldGFsRW52aXJv
bm1lbnQpIHsKLSAgJ3VzZSBzdHJpY3QnOwotCi0gIHZhciBqUXVlcnk7Ci0KLSAgaWYgKF9lbWJl
ck1ldGFsRW52aXJvbm1lbnQuZGVmYXVsdC5oYXNET00pIHsKLSAgICAvLyBtYWluQ29udGV4dCBp
cyBzZXQgaW4gYHBhY2thZ2UvbG9hZGVyL2xpYi9tYWluLmpzYCB0byB0aGUgYHRoaXNgIGNvbnRl
eHQgYmVmb3JlIGVudGVyaW5nIHN0cmljdCBtb2RlCi0gICAgalF1ZXJ5ID0gX2VtYmVyTWV0YWxD
b3JlLmRlZmF1bHQuaW1wb3J0cyAmJiBfZW1iZXJNZXRhbENvcmUuZGVmYXVsdC5pbXBvcnRzLmpR
dWVyeSB8fCBtYWluQ29udGV4dCAmJiBtYWluQ29udGV4dC5qUXVlcnk7IC8vanNoaW50IGlnbm9y
ZTpsaW5lCi0gICAgaWYgKCFqUXVlcnkgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicp
IHsKLSAgICAgIGpRdWVyeSA9IHJlcXVpcmUoJ2pxdWVyeScpOwotICAgIH0KLQotICAgIGlmIChq
UXVlcnkpIHsKLSAgICAgIC8vIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9j
dXJyZW50LXdvcmsvbXVsdGlwYWdlL2RuZC5odG1sI2RuZGV2ZW50cwotICAgICAgdmFyIGRyYWdF
dmVudHMgPSBbJ2RyYWdzdGFydCcsICdkcmFnJywgJ2RyYWdlbnRlcicsICdkcmFnbGVhdmUnLCAn
ZHJhZ292ZXInLCAnZHJvcCcsICdkcmFnZW5kJ107Ci0KLSAgICAgIC8vIENvcGllcyB0aGUgYGRh
dGFUcmFuc2ZlcmAgcHJvcGVydHkgZnJvbSBhIGJyb3dzZXIgZXZlbnQgb2JqZWN0IG9udG8gdGhl
Ci0gICAgICAvLyBqUXVlcnkgZXZlbnQgb2JqZWN0IGZvciB0aGUgc3BlY2lmaWVkIGV2ZW50cwot
ICAgICAgZHJhZ0V2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChldmVudE5hbWUpIHsKLSAgICAgICAg
alF1ZXJ5LmV2ZW50LmZpeEhvb2tzW2V2ZW50TmFtZV0gPSB7Ci0gICAgICAgICAgcHJvcHM6IFsn
ZGF0YVRyYW5zZmVyJ10KLSAgICAgICAgfTsKLSAgICAgIH0pOwotICAgIH0KLSAgfQotCi0gIGV4
cG9ydHMuZGVmYXVsdCA9IGpRdWVyeTsKLX0pOwotCi0vLyBFUzZUT0RPOiB0aGUgZnVuY3Rpb25z
IG9uIEVudW1lcmFibGVVdGlscyBuZWVkIHRoZWlyIG93biBleHBvcnRzCi1lbmlmZWQoJ2VtYmVy
LXZpZXdzL3N5c3RlbS9sb29rdXBfcGFydGlhbCcsIFsnZXhwb3J0cycsICdlbWJlci1tZXRhbC9k
ZWJ1ZycsICdlbWJlci1tZXRhbC9lcnJvciddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0
YWxEZWJ1ZywgX2VtYmVyTWV0YWxFcnJvcikgewotICAndXNlIHN0cmljdCc7Ci0KLSAgZXhwb3J0
cy5kZWZhdWx0ID0gbG9va3VwUGFydGlhbDsKLQotICBmdW5jdGlvbiBsb29rdXBQYXJ0aWFsKGVu
diwgdGVtcGxhdGVOYW1lKSB7Ci0gICAgaWYgKHRlbXBsYXRlTmFtZSA9PSBudWxsKSB7Ci0gICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgdmFyIG5hbWVQYXJ0cyA9IHRlbXBsYXRlTmFtZS5zcGxp
dCgnLycpOwotICAgIHZhciBsYXN0UGFydCA9IG5hbWVQYXJ0c1tuYW1lUGFydHMubGVuZ3RoIC0g
MV07Ci0KLSAgICBuYW1lUGFydHNbbmFtZVBhcnRzLmxlbmd0aCAtIDFdID0gJ18nICsgbGFzdFBh
cnQ7Ci0KLSAgICB2YXIgdW5kZXJzY29yZWROYW1lID0gbmFtZVBhcnRzLmpvaW4oJy8nKTsKLSAg
ICB2YXIgdGVtcGxhdGUgPSB0ZW1wbGF0ZUZvcihlbnYsIHVuZGVyc2NvcmVkTmFtZSwgdGVtcGxh
dGVOYW1lKTsKLQotICAgIF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0KCdVbmFibGUgdG8gZmluZCBw
YXJ0aWFsIHdpdGggbmFtZSAiJyArIHRlbXBsYXRlTmFtZSArICciJywgISF0ZW1wbGF0ZSk7Ci0K
LSAgICByZXR1cm4gdGVtcGxhdGU7Ci0gIH0KLQotICBmdW5jdGlvbiB0ZW1wbGF0ZUZvcihlbnYs
IHVuZGVyc2NvcmVkLCBuYW1lKSB7Ci0gICAgaWYgKCFuYW1lKSB7Ci0gICAgICByZXR1cm47Ci0g
ICAgfQotICAgIF9lbWJlck1ldGFsRGVidWcuYXNzZXJ0KCd0ZW1wbGF0ZU5hbWVzIGFyZSBub3Qg
YWxsb3dlZCB0byBjb250YWluIHBlcmlvZHM6ICcgKyBuYW1lLCBuYW1lLmluZGV4T2YoJy4nKSA9
PT0gLTEpOwotCi0gICAgaWYgKCFlbnYub3duZXIpIHsKLSAgICAgIHRocm93IG5ldyBfZW1iZXJN
ZXRhbEVycm9yLmRlZmF1bHQoJ0NvbnRhaW5lciB3YXMgbm90IGZvdW5kIHdoZW4gbG9va2luZyB1
cCBhIHZpZXdzIHRlbXBsYXRlLiAnICsgJ1RoaXMgaXMgbW9zdCBsaWtlbHkgZHVlIHRvIG1hbnVh
bGx5IGluc3RhbnRpYXRpbmcgYW4gRW1iZXIuVmlldy4gJyArICdTZWU6IGh0dHA6Ly9naXQuaW8v
RUtQcG5BJyk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGVudi5vd25lci5sb29rdXAoJ3RlbXBsYXRl
OicgKyB1bmRlcnNjb3JlZCkgfHwgZW52Lm93bmVyLmxvb2t1cCgndGVtcGxhdGU6JyArIG5hbWUp
OwotICB9Ci19KTsKLWVuaWZlZCgnZW1iZXItdmlld3Mvc3lzdGVtL3BsYXRmb3JtJywgWydleHBv
cnRzJywgJ2VtYmVyLW1ldGFsL2Vudmlyb25tZW50J10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1i
ZXJNZXRhbEVudmlyb25tZW50KSB7Ci0gICd1c2Ugc3RyaWN0JzsKLQotICAvLyBJRSA2LzcgaGF2
ZSBidWdzIGFyb3VuZCBzZXR0aW5nIG5hbWVzIG9uIGlucHV0cyBkdXJpbmcgY3JlYXRpb24uCi0g
IC8vIEZyb20gaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2llL21zNTM2
Mzg5KHY9dnMuODUpLmFzcHg6Ci0gIC8vICJUbyBpbmNsdWRlIHRoZSBOQU1FIGF0dHJpYnV0ZSBh
dCBydW4gdGltZSBvbiBvYmplY3RzIGNyZWF0ZWQgd2l0aCB0aGUgY3JlYXRlRWxlbWVudCBtZXRo
b2QsIHVzZSB0aGUgZVRhZy4iCi0gIHZhciBjYW5TZXROYW1lT25JbnB1dHMgPSBfZW1iZXJNZXRh
bEVudmlyb25tZW50LmRlZmF1bHQuaGFzRE9NICYmIChmdW5jdGlvbiAoKSB7Ci0gICAgdmFyIGRp
diA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwotICAgIHZhciBlbCA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7Ci0KLSAgICBlbC5zZXRBdHRyaWJ1dGUoJ25hbWUnLCAn
Zm9vJyk7Ci0gICAgZGl2LmFwcGVuZENoaWxkKGVsKTsKLQotICAgIHJldHVybiAhIWRpdi5pbm5l
ckhUTUwubWF0Y2goJ2ZvbycpOwotICB9KSgpOwotICBleHBvcnRzLmNhblNldE5hbWVPbklucHV0
cyA9IGNhblNldE5hbWVPbklucHV0czsKLX0pOwotZW5pZmVkKCJlbWJlci12aWV3cy9zeXN0ZW0v
dXRpbHMiLCBbImV4cG9ydHMiXSwgZnVuY3Rpb24gKGV4cG9ydHMpIHsKLSAgLyoqCi0gIEBtb2R1
bGUgZW1iZXIKLSAgQHN1Ym1vZHVsZSBlbWJlci12aWV3cwotICAqLwotCi0gICJ1c2Ugc3RyaWN0
IjsKLQotICBleHBvcnRzLmlzU2ltcGxlQ2xpY2sgPSBpc1NpbXBsZUNsaWNrOwotICBleHBvcnRz
LmdldFZpZXdDbGllbnRSZWN0cyA9IGdldFZpZXdDbGllbnRSZWN0czsKLSAgZXhwb3J0cy5nZXRW
aWV3Qm91bmRpbmdDbGllbnRSZWN0ID0gZ2V0Vmlld0JvdW5kaW5nQ2xpZW50UmVjdDsKLQotICBm
dW5jdGlvbiBpc1NpbXBsZUNsaWNrKGV2ZW50KSB7Ci0gICAgdmFyIG1vZGlmaWVyID0gZXZlbnQu
c2hpZnRLZXkgfHwgZXZlbnQubWV0YUtleSB8fCBldmVudC5hbHRLZXkgfHwgZXZlbnQuY3RybEtl
eTsKLSAgICB2YXIgc2Vjb25kYXJ5Q2xpY2sgPSBldmVudC53aGljaCA+IDE7IC8vIElFOSBtYXkg
cmV0dXJuIHVuZGVmaW5lZAotCi0gICAgcmV0dXJuICFtb2RpZmllciAmJiAhc2Vjb25kYXJ5Q2xp
Y2s7Ci0gIH0KLQotICAvKioKLSAgICBAcHJpdmF0ZQotICAgIEBtZXRob2QgZ2V0Vmlld1Jhbmdl
Ci0gICAgQHBhcmFtIHtFbWJlci5WaWV3fSB2aWV3Ci0gICovCi0gIGZ1bmN0aW9uIGdldFZpZXdS
YW5nZSh2aWV3KSB7Ci0gICAgdmFyIHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKLSAg
ICByYW5nZS5zZXRTdGFydEJlZm9yZSh2aWV3Ll9yZW5kZXJOb2RlLmZpcnN0Tm9kZSk7Ci0gICAg
cmFuZ2Uuc2V0RW5kQWZ0ZXIodmlldy5fcmVuZGVyTm9kZS5sYXN0Tm9kZSk7Ci0gICAgcmV0dXJu
IHJhbmdlOwotICB9Ci0KLSAgLyoqCi0gICAgYGdldFZpZXdDbGllbnRSZWN0c2AgcHJvdmlkZXMg
aW5mb3JtYXRpb24gYWJvdXQgdGhlIHBvc2l0aW9uIG9mIHRoZSBib3JkZXIKLSAgICBib3ggZWRn
ZXMgb2YgYSB2aWV3IHJlbGF0aXZlIHRvIHRoZSB2aWV3cG9ydC4KLSAgCi0gICAgSXQgaXMgb25s
eSBpbnRlbmRlZCB0byBiZSB1c2VkIGJ5IGRldmVsb3BtZW50IHRvb2xzIGxpa2UgdGhlIEVtYmVy
IEluc3BlY3RvcgotICAgIGFuZCBtYXkgbm90IHdvcmsgb24gb2xkZXIgYnJvd3NlcnMuCi0gIAot
ICAgIEBwcml2YXRlCi0gICAgQG1ldGhvZCBnZXRWaWV3Q2xpZW50UmVjdHMKLSAgICBAcGFyYW0g
e0VtYmVyLlZpZXd9IHZpZXcKLSAgKi8KLQotICBmdW5jdGlvbiBnZXRWaWV3Q2xpZW50UmVjdHMo
dmlldykgewotICAgIHZhciByYW5nZSA9IGdldFZpZXdSYW5nZSh2aWV3KTsKLSAgICByZXR1cm4g
cmFuZ2UuZ2V0Q2xpZW50UmVjdHMoKTsKLSAgfQotCi0gIC8qKgotICAgIGBnZXRWaWV3Qm91bmRp
bmdDbGllbnRSZWN0YCBwcm92aWRlcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcG9zaXRpb24gb2Yg
dGhlCi0gICAgYm91bmRpbmcgYm9yZGVyIGJveCBlZGdlcyBvZiBhIHZpZXcgcmVsYXRpdmUgdG8g
dGhlIHZpZXdwb3J0LgotICAKLSAgICBJdCBpcyBvbmx5IGludGVuZGVkIHRvIGJlIHVzZWQgYnkg
ZGV2ZWxvcG1lbnQgdG9vbHMgbGlrZSB0aGUgRW1iZXIgSW5wc2VjdG9yCi0gICAgYW5kIG1heSBu
b3Qgd29yayBvbiBvbGRlciBicm93c2Vycy4KLSAgCi0gICAgQHByaXZhdGUKLSAgICBAbWV0aG9k
IGdldFZpZXdCb3VuZGluZ0NsaWVudFJlY3QKLSAgICBAcGFyYW0ge0VtYmVyLlZpZXd9IHZpZXcK
LSAgKi8KLQotICBmdW5jdGlvbiBnZXRWaWV3Qm91bmRpbmdDbGllbnRSZWN0KHZpZXcpIHsKLSAg
ICB2YXIgcmFuZ2UgPSBnZXRWaWV3UmFuZ2Uodmlldyk7Ci0gICAgcmV0dXJuIHJhbmdlLmdldEJv
dW5kaW5nQ2xpZW50UmVjdCgpOwotICB9Ci19KTsKLWVuaWZlZCgnZW1iZXItdmlld3Mvdmlld3Mv
Y2hlY2tib3gnLCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwvcHJvcGVydHlfZ2V0JywgJ2VtYmVy
LW1ldGFsL3Byb3BlcnR5X3NldCcsICdlbWJlci12aWV3cy9jb21wb25lbnRzL2NvbXBvbmVudCdd
LCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQsIF9lbWJlck1ldGFs
UHJvcGVydHlfc2V0LCBfZW1iZXJWaWV3c0NvbXBvbmVudHNDb21wb25lbnQpIHsKLSAgJ3VzZSBz
dHJpY3QnOwotCi0gIC8qKgotICBAbW9kdWxlIGVtYmVyCi0gIEBzdWJtb2R1bGUgZW1iZXItdmll
d3MKLSAgKi8KLQotICAvKioKLSAgICBUaGUgaW50ZXJuYWwgY2xhc3MgdXNlZCB0byBjcmVhdGUg
dGV4dCBpbnB1dHMgd2hlbiB0aGUgYHt7aW5wdXR9fWAKLSAgICBoZWxwZXIgaXMgdXNlZCB3aXRo
IGB0eXBlYCBvZiBgY2hlY2tib3hgLgotICAKLSAgICBTZWUgW0VtYmVyLlRlbXBsYXRlcy5oZWxw
ZXJzLmlucHV0XSgvYXBpL2NsYXNzZXMvRW1iZXIuVGVtcGxhdGVzLmhlbHBlcnMuaHRtbCNtZXRo
b2RfaW5wdXQpICBmb3IgdXNhZ2UgZGV0YWlscy4KLSAgCi0gICAgIyMgRGlyZWN0IG1hbmlwdWxh
dGlvbiBvZiBgY2hlY2tlZGAKLSAgCi0gICAgVGhlIGBjaGVja2VkYCBhdHRyaWJ1dGUgb2YgYW4g
YEVtYmVyLkNoZWNrYm94YCBvYmplY3Qgc2hvdWxkIGFsd2F5cyBiZSBzZXQKLSAgICB0aHJvdWdo
IHRoZSBFbWJlciBvYmplY3Qgb3IgYnkgaW50ZXJhY3Rpbmcgd2l0aCBpdHMgcmVuZGVyZWQgZWxl
bWVudAotICAgIHJlcHJlc2VudGF0aW9uIHZpYSB0aGUgbW91c2UsIGtleWJvYXJkLCBvciB0b3Vj
aC4gVXBkYXRpbmcgdGhlIHZhbHVlIG9mIHRoZQotICAgIGNoZWNrYm94IHZpYSBqUXVlcnkgd2ls
bCByZXN1bHQgaW4gdGhlIGNoZWNrZWQgdmFsdWUgb2YgdGhlIG9iamVjdCBhbmQgaXRzCi0gICAg
ZWxlbWVudCBsb3Npbmcgc3luY2hyb25pemF0aW9uLgotICAKLSAgICAjIyBMYXlvdXQgYW5kIExh
eW91dE5hbWUgcHJvcGVydGllcwotICAKLSAgICBCZWNhdXNlIEhUTUwgYGlucHV0YCBlbGVtZW50
cyBhcmUgc2VsZiBjbG9zaW5nIGBsYXlvdXRgIGFuZCBgbGF5b3V0TmFtZWAKLSAgICBwcm9wZXJ0
aWVzIHdpbGwgbm90IGJlIGFwcGxpZWQuIFNlZSBbRW1iZXIuVmlld10oL2FwaS9jbGFzc2VzL0Vt
YmVyLlZpZXcuaHRtbCkncwotICAgIGxheW91dCBzZWN0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9u
LgotICAKLSAgICBAY2xhc3MgQ2hlY2tib3gKLSAgICBAbmFtZXNwYWNlIEVtYmVyCi0gICAgQGV4
dGVuZHMgRW1iZXIuQ29tcG9uZW50Ci0gICAgQHB1YmxpYwotICAqLwotICBleHBvcnRzLmRlZmF1
bHQgPSBfZW1iZXJWaWV3c0NvbXBvbmVudHNDb21wb25lbnQuZGVmYXVsdC5leHRlbmQoewotICAg
IGluc3RydW1lbnREaXNwbGF5OiAne3tpbnB1dCB0eXBlPSJjaGVja2JveCJ9fScsCi0KLSAgICBj
bGFzc05hbWVzOiBbJ2VtYmVyLWNoZWNrYm94J10sCi0KLSAgICB0YWdOYW1lOiAnaW5wdXQnLAot
Ci0gICAgYXR0cmlidXRlQmluZGluZ3M6IFsndHlwZScsICdjaGVja2VkJywgJ2luZGV0ZXJtaW5h
dGUnLCAnZGlzYWJsZWQnLCAndGFiaW5kZXgnLCAnbmFtZScsICdhdXRvZm9jdXMnLCAncmVxdWly
ZWQnLCAnZm9ybSddLAotCi0gICAgdHlwZTogJ2NoZWNrYm94JywKLSAgICBjaGVja2VkOiBmYWxz
ZSwKLSAgICBkaXNhYmxlZDogZmFsc2UsCi0gICAgaW5kZXRlcm1pbmF0ZTogZmFsc2UsCi0KLSAg
ICBkaWRJbnNlcnRFbGVtZW50OiBmdW5jdGlvbiAoKSB7Ci0gICAgICB0aGlzLl9zdXBlci5hcHBs
eSh0aGlzLCBhcmd1bWVudHMpOwotICAgICAgX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRo
aXMsICdlbGVtZW50JykuaW5kZXRlcm1pbmF0ZSA9ICEhX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQu
Z2V0KHRoaXMsICdpbmRldGVybWluYXRlJyk7Ci0gICAgfSwKLQotICAgIGNoYW5nZTogZnVuY3Rp
b24gKCkgewotICAgICAgX2VtYmVyTWV0YWxQcm9wZXJ0eV9zZXQuc2V0KHRoaXMsICdjaGVja2Vk
JywgdGhpcy4kKCkucHJvcCgnY2hlY2tlZCcpKTsKLSAgICB9Ci0gIH0pOwotfSk7Ci1lbmlmZWQo
J2VtYmVyLXZpZXdzL3ZpZXdzL2NvcmVfdmlldycsIFsnZXhwb3J0cycsICdlbWJlci1tZXRhbC9k
ZWJ1ZycsICdlbWJlci1tZXRhbC9wcm9wZXJ0eV9nZXQnLCAnZW1iZXItcnVudGltZS9zeXN0ZW0v
b2JqZWN0JywgJ2VtYmVyLXJ1bnRpbWUvbWl4aW5zL2V2ZW50ZWQnLCAnZW1iZXItcnVudGltZS9t
aXhpbnMvYWN0aW9uX2hhbmRsZXInLCAnZW1iZXItcnVudGltZS91dGlscycsICdlbWJlci1tZXRh
bC12aWV3cycsICdlbWJlci12aWV3cy92aWV3cy9zdGF0ZXMnLCAnaHRtbGJhcnMtcnVudGltZScs
ICdyZXF1aXJlJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJNZXRhbERlYnVnLCBfZW1iZXJN
ZXRhbFByb3BlcnR5X2dldCwgX2VtYmVyUnVudGltZVN5c3RlbU9iamVjdCwgX2VtYmVyUnVudGlt
ZU1peGluc0V2ZW50ZWQsIF9lbWJlclJ1bnRpbWVNaXhpbnNBY3Rpb25faGFuZGxlciwgX2VtYmVy
UnVudGltZVV0aWxzLCBfZW1iZXJNZXRhbFZpZXdzLCBfZW1iZXJWaWV3c1ZpZXdzU3RhdGVzLCBf
aHRtbGJhcnNSdW50aW1lLCBfcmVxdWlyZSkgewotICAndXNlIHN0cmljdCc7Ci0KLSAgLy8gTm9y
bWFsbHksIHRoZSByZW5kZXJlciBpcyBpbmplY3RlZCBieSB0aGUgY29udGFpbmVyIHdoZW4gdGhl
IHZpZXcgaXMgbG9va2VkCi0gIC8vIHVwLiBIb3dldmVyLCBpZiBzb21lb25lIGNyZWF0ZXMgYSB2
aWV3IHdpdGhvdXQgbG9va2luZyBpdCB1cCB2aWEgdGhlCi0gIC8vIGNvbnRhaW5lciAoZS5nLiBg
RW1iZXIuVmlldy5jcmVhdGUoKS5hcHBlbmQoKWApIHRoZW4gd2UgY3JlYXRlIGEgZmFsbGJhY2sK
LSAgLy8gRE9NIHJlbmRlcmVyIHRoYXQgaXMgc2hhcmVkLiBJbiBnZW5lcmFsLCB0aGlzIHBhdGgg
c2hvdWxkIGJlIGF2b2lkZWQgc2luY2UKLSAgLy8gdmlld3MgY3JlYXRlZCB0aGlzIHdheSBjYW5u
b3QgcnVuIGluIGEgbm9kZSBlbnZpcm9ubWVudC4KLSAgdmFyIHJlbmRlcmVyOwotCi0gIC8qKgot
ICAgIGBFbWJlci5Db3JlVmlld2AgaXMgYW4gYWJzdHJhY3QgY2xhc3MgdGhhdCBleGlzdHMgdG8g
Z2l2ZSB2aWV3LWxpa2UgYmVoYXZpb3IKLSAgICB0byBib3RoIEVtYmVyJ3MgbWFpbiB2aWV3IGNs
YXNzIGBFbWJlci5WaWV3YCBhbmQgb3RoZXIgY2xhc3NlcyB0aGF0IGRvbid0IG5lZWQKLSAgICB0
aGUgZnVsbHkgZnVuY3Rpb25hbHRpeSBvZiBgRW1iZXIuVmlld2AuCi0gIAotICAgIFVubGVzcyB5
b3UgaGF2ZSBzcGVjaWZpYyBuZWVkcyBmb3IgYENvcmVWaWV3YCwgeW91IHdpbGwgdXNlIGBFbWJl
ci5WaWV3YAotICAgIGluIHlvdXIgYXBwbGljYXRpb25zLgotICAKLSAgICBAY2xhc3MgQ29yZVZp
ZXcKLSAgICBAbmFtZXNwYWNlIEVtYmVyCi0gICAgQGV4dGVuZHMgRW1iZXIuT2JqZWN0Ci0gICAg
QGRlcHJlY2F0ZWQgVXNlIGBFbWJlci5WaWV3YCBpbnN0ZWFkLgotICAgIEB1c2VzIEVtYmVyLkV2
ZW50ZWQKLSAgICBAdXNlcyBFbWJlci5BY3Rpb25IYW5kbGVyCi0gICAgQHByaXZhdGUKLSAgKi8K
LSAgdmFyIENvcmVWaWV3ID0gX2VtYmVyUnVudGltZVN5c3RlbU9iamVjdC5kZWZhdWx0LmV4dGVu
ZChfZW1iZXJSdW50aW1lTWl4aW5zRXZlbnRlZC5kZWZhdWx0LCBfZW1iZXJSdW50aW1lTWl4aW5z
QWN0aW9uX2hhbmRsZXIuZGVmYXVsdCwgewotICAgIGlzVmlldzogdHJ1ZSwKLQotICAgIF9zdGF0
ZXM6IF9lbWJlclZpZXdzVmlld3NTdGF0ZXMuY2xvbmVTdGF0ZXMoX2VtYmVyVmlld3NWaWV3c1N0
YXRlcy5zdGF0ZXMpLAotCi0gICAgaW5pdDogZnVuY3Rpb24gKCkgewotICAgICAgdGhpcy5fc3Vw
ZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKLSAgICAgIHRoaXMuX3N0YXRlID0gJ3ByZVJlbmRl
cic7Ci0gICAgICB0aGlzLl9jdXJyZW50U3RhdGUgPSB0aGlzLl9zdGF0ZXMucHJlUmVuZGVyOwot
ICAgICAgdGhpcy5faXNWaXNpYmxlID0gX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHRoaXMs
ICdpc1Zpc2libGUnKTsKLQotICAgICAgLy8gRmFsbGJhY2sgZm9yIGxlZ2FjeSBjYXNlcyB3aGVy
ZSB0aGUgdmlldyB3YXMgY3JlYXRlZCBkaXJlY3RseQotICAgICAgLy8gdmlhIGBjcmVhdGUoKWAg
aW5zdGVhZCBvZiBnb2luZyB0aHJvdWdoIHRoZSBjb250YWluZXIuCi0gICAgICBpZiAoIXRoaXMu
cmVuZGVyZXIpIHsKLSAgICAgICAgdmFyIERPTUhlbHBlciA9IGRvbUhlbHBlcigpOwotICAgICAg
ICByZW5kZXJlciA9IHJlbmRlcmVyIHx8IF9lbWJlck1ldGFsVmlld3MuSW50ZXJhY3RpdmVSZW5k
ZXJlci5jcmVhdGUoeyBkb206IG5ldyBET01IZWxwZXIoKSB9KTsKLSAgICAgICAgdGhpcy5yZW5k
ZXJlciA9IHJlbmRlcmVyOwotICAgICAgfQotCi0gICAgICB0aGlzLl9kZXN0cm95aW5nU3VidHJl
ZUZvclZpZXcgPSBudWxsOwotICAgICAgdGhpcy5fZGlzcGF0Y2hpbmcgPSBudWxsOwotICAgIH0s
Ci0KLSAgICAvKioKLSAgICAgIElmIHRoZSB2aWV3IGlzIGN1cnJlbnRseSBpbnNlcnRlZCBpbnRv
IHRoZSBET00gb2YgYSBwYXJlbnQgdmlldywgdGhpcwotICAgICAgcHJvcGVydHkgd2lsbCBwb2lu
dCB0byB0aGUgcGFyZW50IG9mIHRoZSB2aWV3LgotICAgICAgIEBwcm9wZXJ0eSBwYXJlbnRWaWV3
Ci0gICAgICBAdHlwZSBFbWJlci5WaWV3Ci0gICAgICBAZGVmYXVsdCBudWxsCi0gICAgICBAcHJp
dmF0ZQotICAgICovCi0gICAgcGFyZW50VmlldzogbnVsbCwKLQotICAgIGluc3RydW1lbnROYW1l
OiAnY29yZV92aWV3JywKLQotICAgIGluc3RydW1lbnREZXRhaWxzOiBmdW5jdGlvbiAoaGFzaCkg
ewotICAgICAgaGFzaC5vYmplY3QgPSB0aGlzLnRvU3RyaW5nKCk7Ci0gICAgICBoYXNoLmNvbnRh
aW5lcktleSA9IHRoaXMuX2RlYnVnQ29udGFpbmVyS2V5OwotICAgICAgaGFzaC52aWV3ID0gdGhp
czsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICBPdmVycmlkZSB0aGUgZGVmYXVsdCBldmVudCBm
aXJpbmcgZnJvbSBgRW1iZXIuRXZlbnRlZGAgdG8KLSAgICAgIGFsc28gY2FsbCBtZXRob2RzIHdp
dGggdGhlIGdpdmVuIG5hbWUuCi0gICAgICAgQG1ldGhvZCB0cmlnZ2VyCi0gICAgICBAcGFyYW0g
bmFtZSB7U3RyaW5nfQotICAgICAgQHByaXZhdGUKLSAgICAqLwotICAgIHRyaWdnZXI6IGZ1bmN0
aW9uICgpIHsKLSAgICAgIHRoaXMuX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7Ci0gICAg
ICB2YXIgbmFtZSA9IGFyZ3VtZW50c1swXTsKLSAgICAgIHZhciBtZXRob2QgPSB0aGlzW25hbWVd
OwotICAgICAgaWYgKG1ldGhvZCkgewotICAgICAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxl
bmd0aDsKLSAgICAgICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkobGVuZ3RoIC0gMSk7Ci0gICAgICAg
IGZvciAodmFyIGkgPSAxOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICBhcmdzW2kgLSAx
XSA9IGFyZ3VtZW50c1tpXTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbWV0aG9kLmFwcGx5
KHRoaXMsIGFyZ3MpOwotICAgICAgfQotICAgIH0sCi0KLSAgICBoYXM6IGZ1bmN0aW9uIChuYW1l
KSB7Ci0gICAgICByZXR1cm4gX2VtYmVyUnVudGltZVV0aWxzLnR5cGVPZih0aGlzW25hbWVdKSA9
PT0gJ2Z1bmN0aW9uJyB8fCB0aGlzLl9zdXBlcihuYW1lKTsKLSAgICB9LAotCi0gICAgZGVzdHJv
eTogZnVuY3Rpb24gKCkgewotICAgICAgaWYgKCF0aGlzLl9zdXBlci5hcHBseSh0aGlzLCBhcmd1
bWVudHMpKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLQotICAgICAgdGhpcy5fY3VycmVu
dFN0YXRlLmNsZWFudXAodGhpcyk7Ci0KLSAgICAgIC8vIElmIHRoZSBkZXN0cm95aW5nU3VidHJl
ZUZvclZpZXcgcHJvcGVydHkgaXMgbm90IHNldCBidXQgd2UgaGF2ZSBhbgotICAgICAgLy8gYXNz
b2NpYXRlZCByZW5kZXIgbm9kZSwgaXQgbWVhbnMgdGhpcyB2aWV3IGlzIGJlaW5nIGRlc3Ryb3ll
ZCBmcm9tIHVzZXIKLSAgICAgIC8vIGNvZGUgYW5kIG5vdCB2aWEgYSBjaGFuZ2UgaW4gdGhlIHRl
bXBsYXRpbmcgbGF5ZXIgKGxpa2UgYW4ge3tpZn19Ci0gICAgICAvLyBiZWNvbWluZyBmYWxzeSwg
Zm9yIGV4YW1wbGUpLiAgSW4gdGhpcyBjYXNlLCBpdCBpcyBvdXIgcmVzcG9uc2liaWxpdHkgdG8K
LSAgICAgIC8vIG1ha2Ugc3VyZSB0aGF0IGFueSByZW5kZXIgbm9kZXMgY3JlYXRlZCBhcyBwYXJ0
IG9mIHRoZSByZW5kZXJpbmcgcHJvY2VzcwotICAgICAgLy8gYXJlIGNsZWFuZWQgdXAuCi0gICAg
ICBpZiAoIXRoaXMub3duZXJWaWV3Ll9kZXN0cm95aW5nU3VidHJlZUZvclZpZXcgJiYgdGhpcy5f
cmVuZGVyTm9kZSkgewotICAgICAgICBfZW1iZXJNZXRhbERlYnVnLmFzc2VydCgnQlVHOiBSZW5k
ZXIgbm9kZSBleGlzdHMgd2l0aG91dCBjb25jb21pdGFudCBlbnYuJywgdGhpcy5vd25lclZpZXcu
ZW52KTsKLSAgICAgICAgX2h0bWxiYXJzUnVudGltZS5pbnRlcm5hbC5jbGVhck1vcnBoKHRoaXMu
X3JlbmRlck5vZGUsIHRoaXMub3duZXJWaWV3LmVudiwgdHJ1ZSk7Ci0gICAgICB9Ci0KLSAgICAg
IHJldHVybiB0aGlzOwotICAgIH0KLSAgfSk7Ci0KLSAgX2VtYmVyUnVudGltZU1peGluc0FjdGlv
bl9oYW5kbGVyLmRlcHJlY2F0ZVVuZGVyc2NvcmVBY3Rpb25zKENvcmVWaWV3KTsKLQotICBDb3Jl
Vmlldy5yZW9wZW5DbGFzcyh7Ci0gICAgaXNWaWV3RmFjdG9yeTogdHJ1ZQotICB9KTsKLQotICB2
YXIgX2RvbUhlbHBlcjsKLSAgZnVuY3Rpb24gZG9tSGVscGVyKCkgewotICAgIHJldHVybiBfZG9t
SGVscGVyID0gX2RvbUhlbHBlciB8fCBfcmVxdWlyZS5kZWZhdWx0KCdlbWJlci1odG1sYmFycy9z
eXN0ZW0vZG9tLWhlbHBlcicpLmRlZmF1bHQ7Ci0gIH0KLQotICBleHBvcnRzLmRlZmF1bHQgPSBD
b3JlVmlldzsKLX0pOwotZW5pZmVkKCdlbWJlci12aWV3cy92aWV3cy9zdGF0ZXMnLCBbJ2V4cG9y
dHMnLCAnZW1iZXItbWV0YWwvYXNzaWduJywgJ2VtYmVyLXZpZXdzL3ZpZXdzL3N0YXRlcy9kZWZh
dWx0JywgJ2VtYmVyLXZpZXdzL3ZpZXdzL3N0YXRlcy9wcmVfcmVuZGVyJywgJ2VtYmVyLXZpZXdz
L3ZpZXdzL3N0YXRlcy9oYXNfZWxlbWVudCcsICdlbWJlci12aWV3cy92aWV3cy9zdGF0ZXMvaW5f
ZG9tJywgJ2VtYmVyLXZpZXdzL3ZpZXdzL3N0YXRlcy9kZXN0cm95aW5nJ10sIGZ1bmN0aW9uIChl
eHBvcnRzLCBfZW1iZXJNZXRhbEFzc2lnbiwgX2VtYmVyVmlld3NWaWV3c1N0YXRlc0RlZmF1bHQs
IF9lbWJlclZpZXdzVmlld3NTdGF0ZXNQcmVfcmVuZGVyLCBfZW1iZXJWaWV3c1ZpZXdzU3RhdGVz
SGFzX2VsZW1lbnQsIF9lbWJlclZpZXdzVmlld3NTdGF0ZXNJbl9kb20sIF9lbWJlclZpZXdzVmll
d3NTdGF0ZXNEZXN0cm95aW5nKSB7Ci0gICd1c2Ugc3RyaWN0JzsKLQotICBleHBvcnRzLmNsb25l
U3RhdGVzID0gY2xvbmVTdGF0ZXM7Ci0KLSAgZnVuY3Rpb24gY2xvbmVTdGF0ZXMoZnJvbSkgewot
ICAgIHZhciBpbnRvID0ge307Ci0KLSAgICBpbnRvLl9kZWZhdWx0ID0ge307Ci0gICAgaW50by5w
cmVSZW5kZXIgPSBPYmplY3QuY3JlYXRlKGludG8uX2RlZmF1bHQpOwotICAgIGludG8uZGVzdHJv
eWluZyA9IE9iamVjdC5jcmVhdGUoaW50by5fZGVmYXVsdCk7Ci0gICAgaW50by5oYXNFbGVtZW50
ID0gT2JqZWN0LmNyZWF0ZShpbnRvLl9kZWZhdWx0KTsKLSAgICBpbnRvLmluRE9NID0gT2JqZWN0
LmNyZWF0ZShpbnRvLmhhc0VsZW1lbnQpOwotCi0gICAgZm9yICh2YXIgc3RhdGVOYW1lIGluIGZy
b20pIHsKLSAgICAgIGlmICghZnJvbS5oYXNPd25Qcm9wZXJ0eShzdGF0ZU5hbWUpKSB7Ci0gICAg
ICAgIGNvbnRpbnVlOwotICAgICAgfQotICAgICAgX2VtYmVyTWV0YWxBc3NpZ24uZGVmYXVsdChp
bnRvW3N0YXRlTmFtZV0sIGZyb21bc3RhdGVOYW1lXSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGlu
dG87Ci0gIH0KLQotICB2YXIgc3RhdGVzID0gewotICAgIF9kZWZhdWx0OiBfZW1iZXJWaWV3c1Zp
ZXdzU3RhdGVzRGVmYXVsdC5kZWZhdWx0LAotICAgIHByZVJlbmRlcjogX2VtYmVyVmlld3NWaWV3
c1N0YXRlc1ByZV9yZW5kZXIuZGVmYXVsdCwKLSAgICBpbkRPTTogX2VtYmVyVmlld3NWaWV3c1N0
YXRlc0luX2RvbS5kZWZhdWx0LAotICAgIGhhc0VsZW1lbnQ6IF9lbWJlclZpZXdzVmlld3NTdGF0
ZXNIYXNfZWxlbWVudC5kZWZhdWx0LAotICAgIGRlc3Ryb3lpbmc6IF9lbWJlclZpZXdzVmlld3NT
dGF0ZXNEZXN0cm95aW5nLmRlZmF1bHQKLSAgfTsKLSAgZXhwb3J0cy5zdGF0ZXMgPSBzdGF0ZXM7
Ci19KTsKLWVuaWZlZCgnZW1iZXItdmlld3Mvdmlld3Mvc3RhdGVzL2RlZmF1bHQnLCBbJ2V4cG9y
dHMnLCAnZW1iZXItbWV0YWwvZXJyb3InLCAnZW1iZXItbWV0YWwvcHJvcGVydHlfZ2V0JywgJ2Vt
YmVyLXZpZXdzL2NvbXBhdC9hdHRycy1wcm94eSddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVy
TWV0YWxFcnJvciwgX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQsIF9lbWJlclZpZXdzQ29tcGF0QXR0
cnNQcm94eSkgewotICAndXNlIHN0cmljdCc7Ci0KLSAgLyoqCi0gIEBtb2R1bGUgZW1iZXIKLSAg
QHN1Ym1vZHVsZSBlbWJlci12aWV3cwotICAqLwotICBleHBvcnRzLmRlZmF1bHQgPSB7Ci0gICAg
Ly8gYXBwZW5kQ2hpbGQgaXMgb25seSBsZWdhbCB3aGlsZSByZW5kZXJpbmcgdGhlIGJ1ZmZlci4K
LSAgICBhcHBlbmRDaGlsZDogZnVuY3Rpb24gKCkgewotICAgICAgdGhyb3cgbmV3IF9lbWJlck1l
dGFsRXJyb3IuZGVmYXVsdCgnWW91IGNhblwndCB1c2UgYXBwZW5kQ2hpbGQgb3V0c2lkZSBvZiB0
aGUgcmVuZGVyaW5nIHByb2Nlc3MnKTsKLSAgICB9LAotCi0gICAgJDogZnVuY3Rpb24gKCkgewot
ICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKLSAgICB9LAotCi0gICAgZ2V0RWxlbWVudDogZnVuY3Rp
b24gKCkgewotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfSwKLQotICAgIGxlZ2FjeVByb3BlcnR5
RGlkQ2hhbmdlOiBmdW5jdGlvbiAodmlldywga2V5KSB7Ci0gICAgICB2YXIgYXR0cnMgPSB2aWV3
LmF0dHJzOwotICAgICAgaWYgKGF0dHJzICYmIGtleSBpbiBhdHRycykgewotICAgICAgICB2YXIg
cG9zc2libGVDZWxsID0gYXR0cnNba2V5XTsKLQotICAgICAgICBpZiAocG9zc2libGVDZWxsICYm
IHBvc3NpYmxlQ2VsbFtfZW1iZXJWaWV3c0NvbXBhdEF0dHJzUHJveHkuTVVUQUJMRV9DRUxMXSkg
ewotICAgICAgICAgIHZhciB2YWx1ZSA9IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh2aWV3
LCBrZXkpOwotICAgICAgICAgIGlmICh2YWx1ZSA9PT0gcG9zc2libGVDZWxsLnZhbHVlKSB7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgfQotICAgICAgICAgIHBvc3NpYmxlQ2VsbC51
cGRhdGUodmFsdWUpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLQotICAgIC8vIEhhbmRs
ZSBldmVudHMgZnJvbSBgRW1iZXIuRXZlbnREaXNwYXRjaGVyYAotICAgIGhhbmRsZUV2ZW50OiBm
dW5jdGlvbiAoKSB7Ci0gICAgICByZXR1cm4gdHJ1ZTsgLy8gY29udGludWUgZXZlbnQgcHJvcGFn
YXRpb24KLSAgICB9LAotCi0gICAgY2xlYW51cDogZnVuY3Rpb24gKCkge30sCi0gICAgZGVzdHJv
eUVsZW1lbnQ6IGZ1bmN0aW9uICgpIHt9LAotCi0gICAgcmVyZW5kZXI6IGZ1bmN0aW9uICh2aWV3
KSB7Ci0gICAgICB2aWV3LnJlbmRlcmVyLmVuc3VyZVZpZXdOb3RSZW5kZXJpbmcodmlldyk7Ci0g
ICAgfSwKLSAgICBpbnZva2VPYnNlcnZlcjogZnVuY3Rpb24gKCkge30KLSAgfTsKLX0pOwotZW5p
ZmVkKCdlbWJlci12aWV3cy92aWV3cy9zdGF0ZXMvZGVzdHJveWluZycsIFsnZXhwb3J0cycsICdl
bWJlci1tZXRhbC9hc3NpZ24nLCAnZW1iZXItdmlld3Mvdmlld3Mvc3RhdGVzL2RlZmF1bHQnLCAn
ZW1iZXItbWV0YWwvZXJyb3InXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlck1ldGFsQXNzaWdu
LCBfZW1iZXJWaWV3c1ZpZXdzU3RhdGVzRGVmYXVsdCwgX2VtYmVyTWV0YWxFcnJvcikgewotICAn
dXNlIHN0cmljdCc7Ci0KLSAgLyoqCi0gIEBtb2R1bGUgZW1iZXIKLSAgQHN1Ym1vZHVsZSBlbWJl
ci12aWV3cwotICAqLwotCi0gIHZhciBkZXN0cm95aW5nID0gT2JqZWN0LmNyZWF0ZShfZW1iZXJW
aWV3c1ZpZXdzU3RhdGVzRGVmYXVsdC5kZWZhdWx0KTsKLQotICBfZW1iZXJNZXRhbEFzc2lnbi5k
ZWZhdWx0KGRlc3Ryb3lpbmcsIHsKLSAgICBhcHBlbmRDaGlsZDogZnVuY3Rpb24gKCkgewotICAg
ICAgdGhyb3cgbmV3IF9lbWJlck1ldGFsRXJyb3IuZGVmYXVsdCgnWW91IGNhblwndCBjYWxsIGFw
cGVuZENoaWxkIG9uIGEgdmlldyBiZWluZyBkZXN0cm95ZWQnKTsKLSAgICB9LAotICAgIHJlcmVu
ZGVyOiBmdW5jdGlvbiAoKSB7Ci0gICAgICB0aHJvdyBuZXcgX2VtYmVyTWV0YWxFcnJvci5kZWZh
dWx0KCdZb3UgY2FuXCd0IGNhbGwgcmVyZW5kZXIgb24gYSB2aWV3IGJlaW5nIGRlc3Ryb3llZCcp
OwotICAgIH0sCi0gICAgZGVzdHJveUVsZW1lbnQ6IGZ1bmN0aW9uICgpIHsKLSAgICAgIHRocm93
IG5ldyBfZW1iZXJNZXRhbEVycm9yLmRlZmF1bHQoJ1lvdSBjYW5cJ3QgY2FsbCBkZXN0cm95RWxl
bWVudCBvbiBhIHZpZXcgYmVpbmcgZGVzdHJveWVkJyk7Ci0gICAgfQotICB9KTsKLQotICBleHBv
cnRzLmRlZmF1bHQgPSBkZXN0cm95aW5nOwotfSk7Ci1lbmlmZWQoJ2VtYmVyLXZpZXdzL3ZpZXdz
L3N0YXRlcy9oYXNfZWxlbWVudCcsIFsnZXhwb3J0cycsICdlbWJlci12aWV3cy92aWV3cy9zdGF0
ZXMvZGVmYXVsdCcsICdlbWJlci1tZXRhbC9hc3NpZ24nLCAnZW1iZXItdmlld3Mvc3lzdGVtL2px
dWVyeScsICdlbWJlci1tZXRhbC9ydW5fbG9vcCcsICdlbWJlci1tZXRhbC9pbnN0cnVtZW50YXRp
b24nLCAnZW1iZXItbWV0YWwvcHJvcGVydHlfZ2V0J10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1i
ZXJWaWV3c1ZpZXdzU3RhdGVzRGVmYXVsdCwgX2VtYmVyTWV0YWxBc3NpZ24sIF9lbWJlclZpZXdz
U3lzdGVtSnF1ZXJ5LCBfZW1iZXJNZXRhbFJ1bl9sb29wLCBfZW1iZXJNZXRhbEluc3RydW1lbnRh
dGlvbiwgX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQpIHsKLSAgJ3VzZSBzdHJpY3QnOwotCi0gIHZh
ciBoYXNFbGVtZW50ID0gT2JqZWN0LmNyZWF0ZShfZW1iZXJWaWV3c1ZpZXdzU3RhdGVzRGVmYXVs
dC5kZWZhdWx0KTsKLQotICBfZW1iZXJNZXRhbEFzc2lnbi5kZWZhdWx0KGhhc0VsZW1lbnQsIHsK
LSAgICAkOiBmdW5jdGlvbiAodmlldywgc2VsKSB7Ci0gICAgICB2YXIgZWxlbSA9IHZpZXcuZWxl
bWVudDsKLSAgICAgIHJldHVybiBzZWwgPyBfZW1iZXJWaWV3c1N5c3RlbUpxdWVyeS5kZWZhdWx0
KHNlbCwgZWxlbSkgOiBfZW1iZXJWaWV3c1N5c3RlbUpxdWVyeS5kZWZhdWx0KGVsZW0pOwotICAg
IH0sCi0KLSAgICBnZXRFbGVtZW50OiBmdW5jdGlvbiAodmlldykgewotICAgICAgdmFyIHBhcmVu
dCA9IF9lbWJlck1ldGFsUHJvcGVydHlfZ2V0LmdldCh2aWV3LCAncGFyZW50VmlldycpOwotICAg
ICAgaWYgKHBhcmVudCkgewotICAgICAgICBwYXJlbnQgPSBfZW1iZXJNZXRhbFByb3BlcnR5X2dl
dC5nZXQocGFyZW50LCAnZWxlbWVudCcpOwotICAgICAgfQotICAgICAgaWYgKHBhcmVudCkgewot
ICAgICAgICByZXR1cm4gdmlldy5maW5kRWxlbWVudEluUGFyZW50RWxlbWVudChwYXJlbnQpOwot
ICAgICAgfQotICAgICAgcmV0dXJuIF9lbWJlclZpZXdzU3lzdGVtSnF1ZXJ5LmRlZmF1bHQoJyMn
ICsgX2VtYmVyTWV0YWxQcm9wZXJ0eV9nZXQuZ2V0KHZpZXcsICdlbGVtZW50SWQnKSlbMF07Ci0g
ICAgfSwKLQotICAgIC8vIG9uY2UgdGhlIHZpZXcgaGFzIGJlZW4gaW5zZXJ0ZWQgaW50byB0aGUg
RE9NLCByZXJlbmRlcmluZyBpcwotICAgIC8vIGRlZmVycmVkIHRvIGFsbG93IGJpbmRpbmdzIHRv
IHN5bmNocm9uaXplLgotICAgIHJlcmVuZGVyOiBmdW5jdGlvbiAodmlldykgewotICAgICAgdmll
dy5yZW5kZXJlci5lbnN1cmVWaWV3Tm90UmVuZGVyaW5nKHZpZXcpOwotICAgICAgdmlldy5yZW5k
ZXJlci5yZXJlbmRlcih2aWV3KTsKLSAgICB9LAotCi0gICAgY2xlYW51cDogZnVuY3Rpb24gKHZp
ZXcpIHsKLSAgICAgIHZpZXcuX2N1cnJlbnRTdGF0ZS5kZXN0cm95RWxlbWVudCh2aWV3KTsKLSAg
ICB9LAotCi0gICAgLy8gb25jZSB0aGUgdmlldyBpcyBhbHJlYWR5IGluIHRoZSBET00sIGRlc3Ry
b3lpbmcgaXQgcmVtb3ZlcyBpdAotICAgIC8vIGZyb20gdGhlIERPTSwgbnVrZXMgaXRzIGVsZW1l
bnQsIGFuZCBwdXRzIGl0IGJhY2sgaW50byB0aGUKLSAgICAvLyBwcmVSZW5kZXIgc3RhdGUgaWYg
aW5ET00uCi0KLSAgICBkZXN0cm95RWxlbWVudDogZnVuY3Rpb24gKHZpZXcpIHsKLSAgICAgIHZp
ZXcucmVuZGVyZXIucmVtb3ZlKHZpZXcsIGZhbHNlKTsKLSAgICAgIHJldHVybiB2aWV3OwotICAg
IH0sCi0KLSAgICAvLyBIYW5kbGUgZXZlbnRzIGZyb20gYEVtYmVyLkV2ZW50RGlzcGF0Y2hlcmAK
LSAgICBoYW5kbGVFdmVudDogZnVuY3Rpb24gKHZpZXcsIGV2ZW50TmFtZSwgZXZlbnQpIHsKLSAg
ICAgIGlmICh2aWV3LmhhcyhldmVudE5hbWUpKSB7Ci0gICAgICAgIC8vIEhhbmRsZXIgc2hvdWxk
IGJlIGFibGUgdG8gcmUtZGlzcGF0Y2ggZXZlbnRzLCBzbyB3ZSBkb24ndAotICAgICAgICAvLyBw
cmV2ZW50RGVmYXVsdCBvciBzdG9wUHJvcGFnYXRpb24uCi0gICAgICAgIHJldHVybiBfZW1iZXJN
ZXRhbEluc3RydW1lbnRhdGlvbi5mbGFnZ2VkSW5zdHJ1bWVudCgnaW50ZXJhY3Rpb24uJyArIGV2
ZW50TmFtZSwgeyBldmVudDogZXZlbnQsIHZpZXc6IHZpZXcgfSwgZnVuY3Rpb24gKCkgewotICAg
ICAgICAgIHJldHVybiBfZW1iZXJNZXRhbFJ1bl9sb29wLmRlZmF1bHQuam9pbih2aWV3LCB2aWV3
LnRyaWdnZXIsIGV2ZW50TmFtZSwgZXZlbnQpOwotICAgICAgICB9KTsKLSAgICAgIH0gZWxzZSB7
Ci0gICAgICAgIHJldHVybiB0cnVlOyAvLyBjb250aW51ZSBldmVudCBwcm9wYWdhdGlvbgotICAg
ICAgfQotICAgIH0sCi0KLSAgICBpbnZva2VPYnNlcnZlcjogZnVuY3Rpb24gKHRhcmdldCwgb2Jz
ZXJ2ZXIpIHsKLSAgICAgIG9ic2VydmVyLmNhbGwodGFyZ2V0KTsKLSAgICB9Ci0gIH0pOwotCi0g
IGV4cG9ydHMuZGVmYXVsdCA9IGhhc0VsZW1lbnQ7Ci19KTsKLQotLyoqCi1AbW9kdWxlIGVtYmVy
Ci1Ac3VibW9kdWxlIGVtYmVyLXZpZXdzCi0qLwotZW5pZmVkKCdlbWJlci12aWV3cy92aWV3cy9z
dGF0ZXMvaW5fZG9tJywgWydleHBvcnRzJywgJ2VtYmVyLW1ldGFsL2RlYnVnJywgJ2VtYmVyLW1l
dGFsL2Fzc2lnbicsICdlbWJlci1tZXRhbC9lcnJvcicsICdlbWJlci1tZXRhbC9vYnNlcnZlcics
ICdlbWJlci12aWV3cy92aWV3cy9zdGF0ZXMvaGFzX2VsZW1lbnQnXSwgZnVuY3Rpb24gKGV4cG9y
dHMsIF9lbWJlck1ldGFsRGVidWcsIF9lbWJlck1ldGFsQXNzaWduLCBfZW1iZXJNZXRhbEVycm9y
LCBfZW1iZXJNZXRhbE9ic2VydmVyLCBfZW1iZXJWaWV3c1ZpZXdzU3RhdGVzSGFzX2VsZW1lbnQp
IHsKLSAgJ3VzZSBzdHJpY3QnOwotCi0gIC8qKgotICBAbW9kdWxlIGVtYmVyCi0gIEBzdWJtb2R1
bGUgZW1iZXItdmlld3MKLSAgKi8KLQotICB2YXIgaW5ET00gPSBPYmplY3QuY3JlYXRlKF9lbWJl
clZpZXdzVmlld3NTdGF0ZXNIYXNfZWxlbWVudC5kZWZhdWx0KTsKLQotICBfZW1iZXJNZXRhbEFz
c2lnbi5kZWZhdWx0KGluRE9NLCB7Ci0gICAgZW50ZXI6IGZ1bmN0aW9uICh2aWV3KSB7Ci0gICAg
ICAvLyBSZWdpc3RlciB0aGUgdmlldyBmb3IgZXZlbnQgaGFuZGxpbmcuIFRoaXMgaGFzaCBpcyB1
c2VkIGJ5Ci0gICAgICAvLyBFbWJlci5FdmVudERpc3BhdGNoZXIgdG8gZGlzcGF0Y2ggaW5jb21p
bmcgZXZlbnRzLgotICAgICAgaWYgKHZpZXcudGFnTmFtZSAhPT0gJycpIHsKLSAgICAgICAgdmll
dy5fcmVnaXN0ZXIoKTsKLSAgICAgIH0KLQotICAgICAgX2VtYmVyTWV0YWxEZWJ1Zy5ydW5JbkRl
YnVnKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgX2VtYmVyTWV0YWxPYnNlcnZlci5fYWRkQmVmb3Jl
T2JzZXJ2ZXIodmlldywgJ2VsZW1lbnRJZCcsIGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICB0aHJv
dyBuZXcgX2VtYmVyTWV0YWxFcnJvci5kZWZhdWx0KCdDaGFuZ2luZyBhIHZpZXdcJ3MgZWxlbWVu
dElkIGFmdGVyIGNyZWF0aW9uIGlzIG5vdCBhbGxvd2VkJyk7Ci0gICAgICAgIH0pOwotICAgICAg
fSk7Ci0gICAgfSwKLQotICAgIGV4aXQ6IGZ1bmN0aW9uICh2aWV3KSB7Ci0gICAgICB2aWV3Ll91
bnJlZ2lzdGVyKCk7Ci0gICAgfQotICB9KTsKLQotICBleHBvcnRzLmRlZmF1bHQgPSBpbkRPTTsK
LX0pOwotZW5pZmVkKCdlbWJlci12aWV3cy92aWV3cy9zdGF0ZXMvcHJlX3JlbmRlcicsIFsnZXhw
b3J0cycsICdlbWJlci12aWV3cy92aWV3cy9zdGF0ZXMvZGVmYXVsdCcsICdlbWJlci1tZXRhbC9h
c3NpZ24nXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlclZpZXdzVmlld3NTdGF0ZXNEZWZhdWx0
LCBfZW1iZXJNZXRhbEFzc2lnbikgewotICAndXNlIHN0cmljdCc7Ci0KLSAgLyoqCi0gIEBtb2R1
bGUgZW1iZXIKLSAgQHN1Ym1vZHVsZSBlbWJlci12aWV3cwotICAqLwotCi0gIHZhciBwcmVSZW5k
ZXIgPSBPYmplY3QuY3JlYXRlKF9lbWJlclZpZXdzVmlld3NTdGF0ZXNEZWZhdWx0LmRlZmF1bHQp
OwotCi0gIF9lbWJlck1ldGFsQXNzaWduLmRlZmF1bHQocHJlUmVuZGVyLCB7Ci0gICAgbGVnYWN5
UHJvcGVydHlEaWRDaGFuZ2U6IGZ1bmN0aW9uICh2aWV3LCBrZXkpIHt9Ci0gIH0pOwotCi0gIGV4
cG9ydHMuZGVmYXVsdCA9IHByZVJlbmRlcjsKLX0pOwotZW5pZmVkKCdlbWJlci12aWV3cy92aWV3
cy90ZXh0X2FyZWEnLCBbJ2V4cG9ydHMnLCAnZW1iZXItdmlld3MvY29tcG9uZW50cy9jb21wb25l
bnQnLCAnZW1iZXItdmlld3MvbWl4aW5zL3RleHRfc3VwcG9ydCddLCBmdW5jdGlvbiAoZXhwb3J0
cywgX2VtYmVyVmlld3NDb21wb25lbnRzQ29tcG9uZW50LCBfZW1iZXJWaWV3c01peGluc1RleHRf
c3VwcG9ydCkgewotICAvKioKLSAgQG1vZHVsZSBlbWJlcgotICBAc3VibW9kdWxlIGVtYmVyLXZp
ZXdzCi0gICovCi0gICd1c2Ugc3RyaWN0JzsKLQotICAvKioKLSAgICBUaGUgaW50ZXJuYWwgY2xh
c3MgdXNlZCB0byBjcmVhdGUgdGV4dGFyZWEgZWxlbWVudCB3aGVuIHRoZSBge3t0ZXh0YXJlYX19
YAotICAgIGhlbHBlciBpcyB1c2VkLgotICAKLSAgICBTZWUgW0VtYmVyLlRlbXBsYXRlcy5oZWxw
ZXJzLnRleHRhcmVhXSgvYXBpL2NsYXNzZXMvRW1iZXIuVGVtcGxhdGVzLmhlbHBlcnMuaHRtbCNt
ZXRob2RfdGV4dGFyZWEpICBmb3IgdXNhZ2UgZGV0YWlscy4KLSAgCi0gICAgIyMgTGF5b3V0IGFu
ZCBMYXlvdXROYW1lIHByb3BlcnRpZXMKLSAgCi0gICAgQmVjYXVzZSBIVE1MIGB0ZXh0YXJlYWAg
ZWxlbWVudHMgZG8gbm90IGNvbnRhaW4gaW5uZXIgSFRNTCB0aGUgYGxheW91dGAgYW5kCi0gICAg
YGxheW91dE5hbWVgIHByb3BlcnRpZXMgd2lsbCBub3QgYmUgYXBwbGllZC4gU2VlIFtFbWJlci5W
aWV3XSgvYXBpL2NsYXNzZXMvRW1iZXIuVmlldy5odG1sKSdzCi0gICAgbGF5b3V0IHNlY3Rpb24g
Zm9yIG1vcmUgaW5mb3JtYXRpb24uCi0gIAotICAgIEBjbGFzcyBUZXh0QXJlYQotICAgIEBuYW1l
c3BhY2UgRW1iZXIKLSAgICBAZXh0ZW5kcyBFbWJlci5Db21wb25lbnQKLSAgICBAdXNlcyBFbWJl
ci5UZXh0U3VwcG9ydAotICAgIEBwdWJsaWMKLSAgKi8KLSAgZXhwb3J0cy5kZWZhdWx0ID0gX2Vt
YmVyVmlld3NDb21wb25lbnRzQ29tcG9uZW50LmRlZmF1bHQuZXh0ZW5kKF9lbWJlclZpZXdzTWl4
aW5zVGV4dF9zdXBwb3J0LmRlZmF1bHQsIHsKLSAgICBpbnN0cnVtZW50RGlzcGxheTogJ3t7dGV4
dGFyZWF9fScsCi0KLSAgICBjbGFzc05hbWVzOiBbJ2VtYmVyLXRleHQtYXJlYSddLAotCi0gICAg
dGFnTmFtZTogJ3RleHRhcmVhJywKLSAgICBhdHRyaWJ1dGVCaW5kaW5nczogWydyb3dzJywgJ2Nv
bHMnLCAnbmFtZScsICdzZWxlY3Rpb25FbmQnLCAnc2VsZWN0aW9uU3RhcnQnLCAnd3JhcCcsICds
YW5nJywgJ2RpcicsICd2YWx1ZSddLAotICAgIHJvd3M6IG51bGwsCi0gICAgY29sczogbnVsbAot
ICB9KTsKLX0pOwotZW5pZmVkKCdlbWJlci12aWV3cy92aWV3cy90ZXh0X2ZpZWxkJywgWydleHBv
cnRzJywgJ2VtYmVyLW1ldGFsL2NvbXB1dGVkJywgJ2VtYmVyLW1ldGFsL2Vudmlyb25tZW50Jywg
J2VtYmVyLXZpZXdzL2NvbXBvbmVudHMvY29tcG9uZW50JywgJ2VtYmVyLXZpZXdzL21peGlucy90
ZXh0X3N1cHBvcnQnLCAnZW1iZXItbWV0YWwvZW1wdHlfb2JqZWN0J10sIGZ1bmN0aW9uIChleHBv
cnRzLCBfZW1iZXJNZXRhbENvbXB1dGVkLCBfZW1iZXJNZXRhbEVudmlyb25tZW50LCBfZW1iZXJW
aWV3c0NvbXBvbmVudHNDb21wb25lbnQsIF9lbWJlclZpZXdzTWl4aW5zVGV4dF9zdXBwb3J0LCBf
ZW1iZXJNZXRhbEVtcHR5X29iamVjdCkgewotICAvKioKLSAgQG1vZHVsZSBlbWJlcgotICBAc3Vi
bW9kdWxlIGVtYmVyLXZpZXdzCi0gICovCi0gICd1c2Ugc3RyaWN0JzsKLQotICB2YXIgaW5wdXRU
eXBlVGVzdEVsZW1lbnQ7Ci0gIHZhciBpbnB1dFR5cGVzID0gbmV3IF9lbWJlck1ldGFsRW1wdHlf
b2JqZWN0LmRlZmF1bHQoKTsKLSAgZnVuY3Rpb24gY2FuU2V0VHlwZU9mSW5wdXQodHlwZSkgewot
ICAgIGlmICh0eXBlIGluIGlucHV0VHlwZXMpIHsKLSAgICAgIHJldHVybiBpbnB1dFR5cGVzW3R5
cGVdOwotICAgIH0KLQotICAgIC8vIGlmIHJ1bm5pbmcgaW4gb3V0c2lkZSBvZiBhIGJyb3dzZXIg
YWx3YXlzIHJldHVybiB0aGUKLSAgICAvLyBvcmlnaW5hbCB0eXBlCi0gICAgaWYgKCFfZW1iZXJN
ZXRhbEVudmlyb25tZW50LmRlZmF1bHQuaGFzRE9NKSB7Ci0gICAgICBpbnB1dFR5cGVzW3R5cGVd
ID0gdHlwZTsKLQotICAgICAgcmV0dXJuIHR5cGU7Ci0gICAgfQotCi0gICAgaWYgKCFpbnB1dFR5
cGVUZXN0RWxlbWVudCkgewotICAgICAgaW5wdXRUeXBlVGVzdEVsZW1lbnQgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCdpbnB1dCcpOwotICAgIH0KLQotICAgIHRyeSB7Ci0gICAgICBpbnB1dFR5
cGVUZXN0RWxlbWVudC50eXBlID0gdHlwZTsKLSAgICB9IGNhdGNoIChlKSB7fQotCi0gICAgcmV0
dXJuIGlucHV0VHlwZXNbdHlwZV0gPSBpbnB1dFR5cGVUZXN0RWxlbWVudC50eXBlID09PSB0eXBl
OwotICB9Ci0KLSAgLyoqCi0gIAotICAgIFRoZSBpbnRlcm5hbCBjbGFzcyB1c2VkIHRvIGNyZWF0
ZSB0ZXh0IGlucHV0cyB3aGVuIHRoZSBge3tpbnB1dH19YAotICAgIGhlbHBlciBpcyB1c2VkIHdp
dGggYHR5cGVgIG9mIGB0ZXh0YC4KLSAgCi0gICAgU2VlIFtFbWJlci5UZW1wbGF0ZXMuaGVscGVy
cy5pbnB1dF0oL2FwaS9jbGFzc2VzL0VtYmVyLlRlbXBsYXRlcy5oZWxwZXJzLmh0bWwjbWV0aG9k
X2lucHV0KSAgZm9yIHVzYWdlIGRldGFpbHMuCi0gIAotICAgICMjIExheW91dCBhbmQgTGF5b3V0
TmFtZSBwcm9wZXJ0aWVzCi0gIAotICAgIEJlY2F1c2UgSFRNTCBgaW5wdXRgIGVsZW1lbnRzIGFy
ZSBzZWxmIGNsb3NpbmcgYGxheW91dGAgYW5kIGBsYXlvdXROYW1lYAotICAgIHByb3BlcnRpZXMg
d2lsbCBub3QgYmUgYXBwbGllZC4gU2VlIFtFbWJlci5WaWV3XSgvYXBpL2NsYXNzZXMvRW1iZXIu
Vmlldy5odG1sKSdzCi0gICAgbGF5b3V0IHNlY3Rpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0g
IAotICAgIEBjbGFzcyBUZXh0RmllbGQKLSAgICBAbmFtZXNwYWNlIEVtYmVyCi0gICAgQGV4dGVu
ZHMgRW1iZXIuQ29tcG9uZW50Ci0gICAgQHVzZXMgRW1iZXIuVGV4dFN1cHBvcnQKLSAgICBAcHVi
bGljCi0gICovCi0gIGV4cG9ydHMuZGVmYXVsdCA9IF9lbWJlclZpZXdzQ29tcG9uZW50c0NvbXBv
bmVudC5kZWZhdWx0LmV4dGVuZChfZW1iZXJWaWV3c01peGluc1RleHRfc3VwcG9ydC5kZWZhdWx0
LCB7Ci0gICAgaW5zdHJ1bWVudERpc3BsYXk6ICd7e2lucHV0IHR5cGU9InRleHQifX0nLAotCi0g
ICAgY2xhc3NOYW1lczogWydlbWJlci10ZXh0LWZpZWxkJ10sCi0gICAgdGFnTmFtZTogJ2lucHV0
JywKLSAgICBhdHRyaWJ1dGVCaW5kaW5nczogWydhY2NlcHQnLCAnYXV0b2NvbXBsZXRlJywgJ2F1
dG9zYXZlJywgJ2RpcicsICdmb3JtYWN0aW9uJywgJ2Zvcm1lbmN0eXBlJywgJ2Zvcm1tZXRob2Qn
LCAnZm9ybW5vdmFsaWRhdGUnLCAnZm9ybXRhcmdldCcsICdoZWlnaHQnLCAnaW5wdXRtb2RlJywg
J2xhbmcnLCAnbGlzdCcsICdtYXgnLCAnbWluJywgJ211bHRpcGxlJywgJ25hbWUnLCAncGF0dGVy
bicsICdzaXplJywgJ3N0ZXAnLCAndHlwZScsICd2YWx1ZScsICd3aWR0aCddLAotCi0gICAgZGVm
YXVsdExheW91dDogbnVsbCwKLQotICAgIC8qKgotICAgICAgVGhlIGB2YWx1ZWAgYXR0cmlidXRl
IG9mIHRoZSBpbnB1dCBlbGVtZW50LiBBcyB0aGUgdXNlciBpbnB1dHMgdGV4dCwgdGhpcwotICAg
ICAgcHJvcGVydHkgaXMgdXBkYXRlZCBsaXZlLgotICAgICAgIEBwcm9wZXJ0eSB2YWx1ZQotICAg
ICAgQHR5cGUgU3RyaW5nCi0gICAgICBAZGVmYXVsdCAiIgotICAgICAgQHB1YmxpYwotICAgICov
Ci0gICAgdmFsdWU6ICcnLAotCi0gICAgLyoqCi0gICAgICBUaGUgYHR5cGVgIGF0dHJpYnV0ZSBv
ZiB0aGUgaW5wdXQgZWxlbWVudC4KLSAgICAgICBAcHJvcGVydHkgdHlwZQotICAgICAgQHR5cGUg
U3RyaW5nCi0gICAgICBAZGVmYXVsdCAidGV4dCIKLSAgICAgIEBwdWJsaWMKLSAgICAqLwotICAg
IHR5cGU6IF9lbWJlck1ldGFsQ29tcHV0ZWQuY29tcHV0ZWQoewotICAgICAgZ2V0OiBmdW5jdGlv
biAoKSB7Ci0gICAgICAgIHJldHVybiAndGV4dCc7Ci0gICAgICB9LAotCi0gICAgICBzZXQ6IGZ1
bmN0aW9uIChrZXksIHZhbHVlKSB7Ci0gICAgICAgIHZhciB0eXBlID0gJ3RleHQnOwotCi0gICAg
ICAgIGlmIChjYW5TZXRUeXBlT2ZJbnB1dCh2YWx1ZSkpIHsKLSAgICAgICAgICB0eXBlID0gdmFs
dWU7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gdHlwZTsKLSAgICAgIH0KLSAgICB9KSwK
LQotICAgIC8qKgotICAgICAgVGhlIGBzaXplYCBvZiB0aGUgdGV4dCBmaWVsZCBpbiBjaGFyYWN0
ZXJzLgotICAgICAgIEBwcm9wZXJ0eSBzaXplCi0gICAgICBAdHlwZSBTdHJpbmcKLSAgICAgIEBk
ZWZhdWx0IG51bGwKLSAgICAgIEBwdWJsaWMKLSAgICAqLwotICAgIHNpemU6IG51bGwsCi0KLSAg
ICAvKioKLSAgICAgIFRoZSBgcGF0dGVybmAgYXR0cmlidXRlIG9mIGlucHV0IGVsZW1lbnQuCi0g
ICAgICAgQHByb3BlcnR5IHBhdHRlcm4KLSAgICAgIEB0eXBlIFN0cmluZwotICAgICAgQGRlZmF1
bHQgbnVsbAotICAgICAgQHB1YmxpYwotICAgICovCi0gICAgcGF0dGVybjogbnVsbCwKLQotICAg
IC8qKgotICAgICAgVGhlIGBtaW5gIGF0dHJpYnV0ZSBvZiBpbnB1dCBlbGVtZW50IHVzZWQgd2l0
aCBgdHlwZT0ibnVtYmVyImAgb3IgYHR5cGU9InJhbmdlImAuCi0gICAgICAgQHByb3BlcnR5IG1p
bgotICAgICAgQHR5cGUgU3RyaW5nCi0gICAgICBAZGVmYXVsdCBudWxsCi0gICAgICBAc2luY2Ug
MS40LjAKLSAgICAgIEBwdWJsaWMKLSAgICAqLwotICAgIG1pbjogbnVsbCwKLQotICAgIC8qKgot
ICAgICAgVGhlIGBtYXhgIGF0dHJpYnV0ZSBvZiBpbnB1dCBlbGVtZW50IHVzZWQgd2l0aCBgdHlw
ZT0ibnVtYmVyImAgb3IgYHR5cGU9InJhbmdlImAuCi0gICAgICAgQHByb3BlcnR5IG1heAotICAg
ICAgQHR5cGUgU3RyaW5nCi0gICAgICBAZGVmYXVsdCBudWxsCi0gICAgICBAc2luY2UgMS40LjAK
LSAgICAgIEBwdWJsaWMKLSAgICAqLwotICAgIG1heDogbnVsbAotICB9KTsKLX0pOwotZW5pZmVk
KCdlbWJlci12aWV3cy92aWV3cy92aWV3JywgWydleHBvcnRzJywgJ2VtYmVyLXZpZXdzL3N5c3Rl
bS9leHQnLCAnZW1iZXItdmlld3Mvdmlld3MvY29yZV92aWV3JywgJ2VtYmVyLXZpZXdzL21peGlu
cy92aWV3X2NvbnRleHRfc3VwcG9ydCcsICdlbWJlci12aWV3cy9taXhpbnMvdmlld19jaGlsZF92
aWV3c19zdXBwb3J0JywgJ2VtYmVyLXZpZXdzL21peGlucy9sZWdhY3lfY2hpbGRfdmlld3Nfc3Vw
cG9ydCcsICdlbWJlci12aWV3cy9taXhpbnMvdmlld19zdGF0ZV9zdXBwb3J0JywgJ2VtYmVyLXZp
ZXdzL21peGlucy90ZW1wbGF0ZV9yZW5kZXJpbmdfc3VwcG9ydCcsICdlbWJlci12aWV3cy9taXhp
bnMvY2xhc3NfbmFtZXNfc3VwcG9ydCcsICdlbWJlci12aWV3cy9taXhpbnMvbGVnYWN5X3ZpZXdf
c3VwcG9ydCcsICdlbWJlci12aWV3cy9taXhpbnMvaW5zdHJ1bWVudGF0aW9uX3N1cHBvcnQnLCAn
ZW1iZXItdmlld3MvbWl4aW5zL2FyaWFfcm9sZV9zdXBwb3J0JywgJ2VtYmVyLXZpZXdzL21peGlu
cy92aXNpYmlsaXR5X3N1cHBvcnQnLCAnZW1iZXItdmlld3MvY29tcGF0L2F0dHJzLXByb3h5Jywg
J2VtYmVyLXZpZXdzL21peGlucy92aWV3X3N1cHBvcnQnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9l
bWJlclZpZXdzU3lzdGVtRXh0LCBfZW1iZXJWaWV3c1ZpZXdzQ29yZV92aWV3LCBfZW1iZXJWaWV3
c01peGluc1ZpZXdfY29udGV4dF9zdXBwb3J0LCBfZW1iZXJWaWV3c01peGluc1ZpZXdfY2hpbGRf
dmlld3Nfc3VwcG9ydCwgX2VtYmVyVmlld3NNaXhpbnNMZWdhY3lfY2hpbGRfdmlld3Nfc3VwcG9y
dCwgX2VtYmVyVmlld3NNaXhpbnNWaWV3X3N0YXRlX3N1cHBvcnQsIF9lbWJlclZpZXdzTWl4aW5z
VGVtcGxhdGVfcmVuZGVyaW5nX3N1cHBvcnQsIF9lbWJlclZpZXdzTWl4aW5zQ2xhc3NfbmFtZXNf
c3VwcG9ydCwgX2VtYmVyVmlld3NNaXhpbnNMZWdhY3lfdmlld19zdXBwb3J0LCBfZW1iZXJWaWV3
c01peGluc0luc3RydW1lbnRhdGlvbl9zdXBwb3J0LCBfZW1iZXJWaWV3c01peGluc0FyaWFfcm9s
ZV9zdXBwb3J0LCBfZW1iZXJWaWV3c01peGluc1Zpc2liaWxpdHlfc3VwcG9ydCwgX2VtYmVyVmll
d3NDb21wYXRBdHRyc1Byb3h5LCBfZW1iZXJWaWV3c01peGluc1ZpZXdfc3VwcG9ydCkgewotICAv
LyBqUXVlcnksIEVtYmVyLmxvb2t1cCwKLSAgLy8gRW1iZXIuRU5WCi0gICd1c2Ugc3RyaWN0JzsK
LQotICAvKioKLSAgQG1vZHVsZSBlbWJlcgotICBAc3VibW9kdWxlIGVtYmVyLXZpZXdzCi0gICov
Ci0KLSAgLyoqCi0gICAgYEVtYmVyLlZpZXdgIGlzIHRoZSBjbGFzcyBpbiBFbWJlciByZXNwb25z
aWJsZSBmb3IgZW5jYXBzdWxhdGluZyB0ZW1wbGF0ZXMgb2YKLSAgICBIVE1MIGNvbnRlbnQsIGNv
bWJpbmluZyB0ZW1wbGF0ZXMgd2l0aCBkYXRhIHRvIHJlbmRlciBhcyBzZWN0aW9ucyBvZiBhIHBh
Z2UncwotICAgIERPTSwgYW5kIHJlZ2lzdGVyaW5nIGFuZCByZXNwb25kaW5nIHRvIHVzZXItaW5p
dGlhdGVkIGV2ZW50cy4KLSAgCi0gICAgIyMgSFRNTCBUYWcKLSAgCi0gICAgVGhlIGRlZmF1bHQg
SFRNTCB0YWcgbmFtZSB1c2VkIGZvciBhIHZpZXcncyBET00gcmVwcmVzZW50YXRpb24gaXMgYGRp
dmAuIFRoaXMKLSAgICBjYW4gYmUgY3VzdG9taXplZCBieSBzZXR0aW5nIHRoZSBgdGFnTmFtZWAg
cHJvcGVydHkuIFRoZSBmb2xsb3dpbmcgdmlldwotICAgIGNsYXNzOgotICAKLSAgICBgYGBqYXZh
c2NyaXB0Ci0gICAgUGFyYWdyYXBoVmlldyA9IEVtYmVyLlZpZXcuZXh0ZW5kKHsKLSAgICAgIHRh
Z05hbWU6ICdlbScKLSAgICB9KTsKLSAgICBgYGAKLSAgCi0gICAgV291bGQgcmVzdWx0IGluIGlu
c3RhbmNlcyB3aXRoIHRoZSBmb2xsb3dpbmcgSFRNTDoKLSAgCi0gICAgYGBgaHRtbAotICAgIDxl
bSBpZD0iZW1iZXIxIiBjbGFzcz0iZW1iZXItdmlldyI+PC9lbT4KLSAgICBgYGAKLSAgCi0gICAg
IyMgSFRNTCBgY2xhc3NgIEF0dHJpYnV0ZQotICAKLSAgICBUaGUgSFRNTCBgY2xhc3NgIGF0dHJp
YnV0ZSBvZiBhIHZpZXcncyB0YWcgY2FuIGJlIHNldCBieSBwcm92aWRpbmcgYQotICAgIGBjbGFz
c05hbWVzYCBwcm9wZXJ0eSB0aGF0IGlzIHNldCB0byBhbiBhcnJheSBvZiBzdHJpbmdzOgotICAK
LSAgICBgYGBqYXZhc2NyaXB0Ci0gICAgTXlWaWV3ID0gRW1iZXIuVmlldy5leHRlbmQoewotICAg
ICAgY2xhc3NOYW1lczogWydteS1jbGFzcycsICdteS1vdGhlci1jbGFzcyddCi0gICAgfSk7Ci0g
ICAgYGBgCi0gIAotICAgIFdpbGwgcmVzdWx0IGluIHZpZXcgaW5zdGFuY2VzIHdpdGggYW4gSFRN
TCByZXByZXNlbnRhdGlvbiBvZjoKLSAgCi0gICAgYGBgaHRtbAotICAgIDxkaXYgaWQ9ImVtYmVy
MSIgY2xhc3M9ImVtYmVyLXZpZXcgbXktY2xhc3MgbXktb3RoZXItY2xhc3MiPjwvZGl2PgotICAg
IGBgYAotICAKLSAgICBgY2xhc3NgIGF0dHJpYnV0ZSB2YWx1ZXMgY2FuIGFsc28gYmUgc2V0IGJ5
IHByb3ZpZGluZyBhIGBjbGFzc05hbWVCaW5kaW5nc2AKLSAgICBwcm9wZXJ0eSBzZXQgdG8gYW4g
YXJyYXkgb2YgcHJvcGVydGllcyBuYW1lcyBmb3IgdGhlIHZpZXcuIFRoZSByZXR1cm4gdmFsdWUK
LSAgICBvZiB0aGVzZSBwcm9wZXJ0aWVzIHdpbGwgYmUgYWRkZWQgYXMgcGFydCBvZiB0aGUgdmFs
dWUgZm9yIHRoZSB2aWV3J3MgYGNsYXNzYAotICAgIGF0dHJpYnV0ZS4gVGhlc2UgcHJvcGVydGll
cyBjYW4gYmUgY29tcHV0ZWQgcHJvcGVydGllczoKLSAgCi0gICAgYGBgamF2YXNjcmlwdAotICAg
IE15VmlldyA9IEVtYmVyLlZpZXcuZXh0ZW5kKHsKLSAgICAgIGNsYXNzTmFtZUJpbmRpbmdzOiBb
J3Byb3BlcnR5QScsICdwcm9wZXJ0eUInXSwKLSAgICAgIHByb3BlcnR5QTogJ2Zyb20tYScsCi0g
ICAgICBwcm9wZXJ0eUI6IEVtYmVyLmNvbXB1dGVkKGZ1bmN0aW9uKCkgewotICAgICAgICBpZiAo
c29tZUxvZ2ljKSB7IHJldHVybiAnZnJvbS1iJzsgfQotICAgICAgfSkKLSAgICB9KTsKLSAgICBg
YGAKLSAgCi0gICAgV2lsbCByZXN1bHQgaW4gdmlldyBpbnN0YW5jZXMgd2l0aCBhbiBIVE1MIHJl
cHJlc2VudGF0aW9uIG9mOgotICAKLSAgICBgYGBodG1sCi0gICAgPGRpdiBpZD0iZW1iZXIxIiBj
bGFzcz0iZW1iZXItdmlldyBmcm9tLWEgZnJvbS1iIj48L2Rpdj4KLSAgICBgYGAKLSAgCi0gICAg
SWYgdGhlIHZhbHVlIG9mIGEgY2xhc3MgbmFtZSBiaW5kaW5nIHJldHVybnMgYSBib29sZWFuIHRo
ZSBwcm9wZXJ0eSBuYW1lCi0gICAgaXRzZWxmIHdpbGwgYmUgdXNlZCBhcyB0aGUgY2xhc3MgbmFt
ZSBpZiB0aGUgcHJvcGVydHkgaXMgdHJ1ZS4gVGhlIGNsYXNzIG5hbWUKLSAgICB3aWxsIG5vdCBi
ZSBhZGRlZCBpZiB0aGUgdmFsdWUgaXMgYGZhbHNlYCBvciBgdW5kZWZpbmVkYC4KLSAgCi0gICAg
YGBgamF2YXNjcmlwdAotICAgIE15VmlldyA9IEVtYmVyLlZpZXcuZXh0ZW5kKHsKLSAgICAgIGNs
YXNzTmFtZUJpbmRpbmdzOiBbJ2hvdmVyZWQnXSwKLSAgICAgIGhvdmVyZWQ6IHRydWUKLSAgICB9
KTsKLSAgICBgYGAKLSAgCi0gICAgV2lsbCByZXN1bHQgaW4gdmlldyBpbnN0YW5jZXMgd2l0aCBh
biBIVE1MIHJlcHJlc2VudGF0aW9uIG9mOgotICAKLSAgICBgYGBodG1sCi0gICAgPGRpdiBpZD0i
ZW1iZXIxIiBjbGFzcz0iZW1iZXItdmlldyBob3ZlcmVkIj48L2Rpdj4KLSAgICBgYGAKLSAgCi0g
ICAgV2hlbiB1c2luZyBib29sZWFuIGNsYXNzIG5hbWUgYmluZGluZ3MgeW91IGNhbiBzdXBwbHkg
YSBzdHJpbmcgdmFsdWUgb3RoZXIKLSAgICB0aGFuIHRoZSBwcm9wZXJ0eSBuYW1lIGZvciB1c2Ug
YXMgdGhlIGBjbGFzc2AgSFRNTCBhdHRyaWJ1dGUgYnkgYXBwZW5kaW5nIHRoZQotICAgIHByZWZl
cnJlZCB2YWx1ZSBhZnRlciBhICI6IiBjaGFyYWN0ZXIgd2hlbiBkZWZpbmluZyB0aGUgYmluZGlu
ZzoKLSAgCi0gICAgYGBgamF2YXNjcmlwdAotICAgIE15VmlldyA9IEVtYmVyLlZpZXcuZXh0ZW5k
KHsKLSAgICAgIGNsYXNzTmFtZUJpbmRpbmdzOiBbJ2F3ZXNvbWU6c28tdmVyeS1jb29sJ10sCi0g
ICAgICBhd2Vzb21lOiB0cnVlCi0gICAgfSk7Ci0gICAgYGBgCi0gIAotICAgIFdpbGwgcmVzdWx0
IGluIHZpZXcgaW5zdGFuY2VzIHdpdGggYW4gSFRNTCByZXByZXNlbnRhdGlvbiBvZjoKLSAgCi0g
ICAgYGBgaHRtbAotICAgIDxkaXYgaWQ9ImVtYmVyMSIgY2xhc3M9ImVtYmVyLXZpZXcgc28tdmVy
eS1jb29sIj48L2Rpdj4KLSAgICBgYGAKLSAgCi0gICAgQm9vbGVhbiB2YWx1ZSBjbGFzcyBuYW1l
IGJpbmRpbmdzIHdob3NlIHByb3BlcnR5IG5hbWVzIGFyZSBpbiBhCi0gICAgY2FtZWxDYXNlLXN0
eWxlIGZvcm1hdCB3aWxsIGJlIGNvbnZlcnRlZCB0byBhIGRhc2hlcml6ZWQgZm9ybWF0OgotICAK
LSAgICBgYGBqYXZhc2NyaXB0Ci0gICAgTXlWaWV3ID0gRW1iZXIuVmlldy5leHRlbmQoewotICAg
ICAgY2xhc3NOYW1lQmluZGluZ3M6IFsnaXNVcmdlbnQnXSwKLSAgICAgIGlzVXJnZW50OiB0cnVl
Ci0gICAgfSk7Ci0gICAgYGBgCi0gIAotICAgIFdpbGwgcmVzdWx0IGluIHZpZXcgaW5zdGFuY2Vz
IHdpdGggYW4gSFRNTCByZXByZXNlbnRhdGlvbiBvZjoKLSAgCi0gICAgYGBgaHRtbAotICAgIDxk
aXYgaWQ9ImVtYmVyMSIgY2xhc3M9ImVtYmVyLXZpZXcgaXMtdXJnZW50Ij48L2Rpdj4KLSAgICBg
YGAKLSAgCi0gICAgQ2xhc3MgbmFtZSBiaW5kaW5ncyBjYW4gYWxzbyByZWZlciB0byBvYmplY3Qg
dmFsdWVzIHRoYXQgYXJlIGZvdW5kIGJ5Ci0gICAgdHJhdmVyc2luZyBhIHBhdGggcmVsYXRpdmUg
dG8gdGhlIHZpZXcgaXRzZWxmOgotICAKLSAgICBgYGBqYXZhc2NyaXB0Ci0gICAgTXlWaWV3ID0g
RW1iZXIuVmlldy5leHRlbmQoewotICAgICAgY2xhc3NOYW1lQmluZGluZ3M6IFsnbWVzc2FnZXMu
ZW1wdHknXQotICAgICAgbWVzc2FnZXM6IEVtYmVyLk9iamVjdC5jcmVhdGUoewotICAgICAgICBl
bXB0eTogdHJ1ZQotICAgICAgfSkKLSAgICB9KTsKLSAgICBgYGAKLSAgCi0gICAgV2lsbCByZXN1
bHQgaW4gdmlldyBpbnN0YW5jZXMgd2l0aCBhbiBIVE1MIHJlcHJlc2VudGF0aW9uIG9mOgotICAK
LSAgICBgYGBodG1sCi0gICAgPGRpdiBpZD0iZW1iZXIxIiBjbGFzcz0iZW1iZXItdmlldyBlbXB0
eSI+PC9kaXY+Ci0gICAgYGBgCi0gIAotICAgIElmIHlvdSB3YW50IHRvIGFkZCBhIGNsYXNzIG5h
bWUgZm9yIGEgcHJvcGVydHkgd2hpY2ggZXZhbHVhdGVzIHRvIHRydWUgYW5kCi0gICAgYW5kIGEg
ZGlmZmVyZW50IGNsYXNzIG5hbWUgaWYgaXQgZXZhbHVhdGVzIHRvIGZhbHNlLCB5b3UgY2FuIHBh
c3MgYSBiaW5kaW5nCi0gICAgbGlrZSB0aGlzOgotICAKLSAgICBgYGBqYXZhc2NyaXB0Ci0gICAg
Ly8gQXBwbGllcyAnZW5hYmxlZCcgY2xhc3Mgd2hlbiBpc0VuYWJsZWQgaXMgdHJ1ZSBhbmQgJ2Rp
c2FibGVkJyB3aGVuIGlzRW5hYmxlZCBpcyBmYWxzZQotICAgIEVtYmVyLlZpZXcuZXh0ZW5kKHsK
LSAgICAgIGNsYXNzTmFtZUJpbmRpbmdzOiBbJ2lzRW5hYmxlZDplbmFibGVkOmRpc2FibGVkJ10K
LSAgICAgIGlzRW5hYmxlZDogdHJ1ZQotICAgIH0pOwotICAgIGBgYAotICAKLSAgICBXaWxsIHJl
c3VsdCBpbiB2aWV3IGluc3RhbmNlcyB3aXRoIGFuIEhUTUwgcmVwcmVzZW50YXRpb24gb2Y6Ci0g
IAotICAgIGBgYGh0bWwKLSAgICA8ZGl2IGlkPSJlbWJlcjEiIGNsYXNzPSJlbWJlci12aWV3IGVu
YWJsZWQiPjwvZGl2PgotICAgIGBgYAotICAKLSAgICBXaGVuIGlzRW5hYmxlZCBpcyBgZmFsc2Vg
LCB0aGUgcmVzdWx0aW5nIEhUTUwgcmVwcmVzZW50YXRpb24gbG9va3MgbGlrZQotICAgIHRoaXM6
Ci0gIAotICAgIGBgYGh0bWwKLSAgICA8ZGl2IGlkPSJlbWJlcjEiIGNsYXNzPSJlbWJlci12aWV3
IGRpc2FibGVkIj48L2Rpdj4KLSAgICBgYGAKLSAgCi0gICAgVGhpcyBzeW50YXggb2ZmZXJzIHRo
ZSBjb252ZW5pZW5jZSB0byBhZGQgYSBjbGFzcyBpZiBhIHByb3BlcnR5IGlzIGBmYWxzZWA6Ci0g
IAotICAgIGBgYGphdmFzY3JpcHQKLSAgICAvLyBBcHBsaWVzIG5vIGNsYXNzIHdoZW4gaXNFbmFi
bGVkIGlzIHRydWUgYW5kIGNsYXNzICdkaXNhYmxlZCcgd2hlbiBpc0VuYWJsZWQgaXMgZmFsc2UK
LSAgICBFbWJlci5WaWV3LmV4dGVuZCh7Ci0gICAgICBjbGFzc05hbWVCaW5kaW5nczogWydpc0Vu
YWJsZWQ6OmRpc2FibGVkJ10KLSAgICAgIGlzRW5hYmxlZDogdHJ1ZQotICAgIH0pOwotICAgIGBg
YAotICAKLSAgICBXaWxsIHJlc3VsdCBpbiB2aWV3IGluc3RhbmNlcyB3aXRoIGFuIEhUTUwgcmVw
cmVzZW50YXRpb24gb2Y6Ci0gIAotICAgIGBgYGh0bWwKLSAgICA8ZGl2IGlkPSJlbWJlcjEiIGNs
YXNzPSJlbWJlci12aWV3Ij48L2Rpdj4KLSAgICBgYGAKLSAgCi0gICAgV2hlbiB0aGUgYGlzRW5h
YmxlZGAgcHJvcGVydHkgb24gdGhlIHZpZXcgaXMgc2V0IHRvIGBmYWxzZWAsIGl0IHdpbGwgcmVz
dWx0Ci0gICAgaW4gdmlldyBpbnN0YW5jZXMgd2l0aCBhbiBIVE1MIHJlcHJlc2VudGF0aW9uIG9m
OgotICAKLSAgICBgYGBodG1sCi0gICAgPGRpdiBpZD0iZW1iZXIxIiBjbGFzcz0iZW1iZXItdmll
dyBkaXNhYmxlZCI+PC9kaXY+Ci0gICAgYGBgCi0gIAotICAgIFVwZGF0ZXMgdG8gdGhlIHZhbHVl
IG9mIGEgY2xhc3MgbmFtZSBiaW5kaW5nIHdpbGwgcmVzdWx0IGluIGF1dG9tYXRpYwotICAgIHVw
ZGF0ZSBvZiB0aGUgIEhUTUwgYGNsYXNzYCBhdHRyaWJ1dGUgaW4gdGhlIHZpZXcncyByZW5kZXJl
ZCBIVE1MCi0gICAgcmVwcmVzZW50YXRpb24uIElmIHRoZSB2YWx1ZSBiZWNvbWVzIGBmYWxzZWAg
b3IgYHVuZGVmaW5lZGAgdGhlIGNsYXNzIG5hbWUKLSAgICB3aWxsIGJlIHJlbW92ZWQuCi0gIAot
ICAgIEJvdGggYGNsYXNzTmFtZXNgIGFuZCBgY2xhc3NOYW1lQmluZGluZ3NgIGFyZSBjb25jYXRl
bmF0ZWQgcHJvcGVydGllcy4gU2VlCi0gICAgW0VtYmVyLk9iamVjdF0oL2FwaS9jbGFzc2VzL0Vt
YmVyLk9iamVjdC5odG1sKSBkb2N1bWVudGF0aW9uIGZvciBtb3JlCi0gICAgaW5mb3JtYXRpb24g
YWJvdXQgY29uY2F0ZW5hdGVkIHByb3BlcnRpZXMuCi0gIAotICAgICMjIEhUTUwgQXR0cmlidXRl
cwotICAKLSAgICBUaGUgSFRNTCBhdHRyaWJ1dGUgc2VjdGlvbiBvZiBhIHZpZXcncyB0YWcgY2Fu
IGJlIHNldCBieSBwcm92aWRpbmcgYW4KLSAgICBgYXR0cmlidXRlQmluZGluZ3NgIHByb3BlcnR5
IHNldCB0byBhbiBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBvbiB0aGUgdmlldy4KLSAgICBUaGUg
cmV0dXJuIHZhbHVlIG9mIHRoZXNlIHByb3BlcnRpZXMgd2lsbCBiZSB1c2VkIGFzIHRoZSB2YWx1
ZSBvZiB0aGUgdmlldydzCi0gICAgSFRNTCBhc3NvY2lhdGVkIGF0dHJpYnV0ZToKLSAgCi0gICAg
YGBgamF2YXNjcmlwdAotICAgIEFuY2hvclZpZXcgPSBFbWJlci5WaWV3LmV4dGVuZCh7Ci0gICAg
ICB0YWdOYW1lOiAnYScsCi0gICAgICBhdHRyaWJ1dGVCaW5kaW5nczogWydocmVmJ10sCi0gICAg
ICBocmVmOiAnaHR0cDovL2dvb2dsZS5jb20nCi0gICAgfSk7Ci0gICAgYGBgCi0gIAotICAgIFdp
bGwgcmVzdWx0IGluIHZpZXcgaW5zdGFuY2VzIHdpdGggYW4gSFRNTCByZXByZXNlbnRhdGlvbiBv
ZjoKLSAgCi0gICAgYGBgaHRtbAotICAgIDxhIGlkPSJlbWJlcjEiIGNsYXNzPSJlbWJlci12aWV3
IiBocmVmPSJodHRwOi8vZ29vZ2xlLmNvbSI+PC9hPgotICAgIGBgYAotICAKLSAgICBPbmUgcHJv
cGVydHkgY2FuIGJlIG1hcHBlZCBvbiB0byBhbm90aGVyIGJ5IHBsYWNpbmcgYSAiOiIgYmV0d2Vl
bgotICAgIHRoZSBzb3VyY2UgcHJvcGVydHkgYW5kIHRoZSBkZXN0aW5hdGlvbiBwcm9wZXJ0eToK
LSAgCi0gICAgYGBgamF2YXNjcmlwdAotICAgIEFuY2hvclZpZXcgPSBFbWJlci5WaWV3LmV4dGVu
ZCh7Ci0gICAgICB0YWdOYW1lOiAnYScsCi0gICAgICBhdHRyaWJ1dGVCaW5kaW5nczogWyd1cmw6
aHJlZiddLAotICAgICAgdXJsOiAnaHR0cDovL2dvb2dsZS5jb20nCi0gICAgfSk7Ci0gICAgYGBg
Ci0gIAotICAgIFdpbGwgcmVzdWx0IGluIHZpZXcgaW5zdGFuY2VzIHdpdGggYW4gSFRNTCByZXBy
ZXNlbnRhdGlvbiBvZjoKLSAgCi0gICAgYGBgaHRtbAotICAgIDxhIGlkPSJlbWJlcjEiIGNsYXNz
PSJlbWJlci12aWV3IiBocmVmPSJodHRwOi8vZ29vZ2xlLmNvbSI+PC9hPgotICAgIGBgYAotICAK
LSAgICBOYW1lc3BhY2VkIGF0dHJpYnV0ZXMgKGUuZy4gYHhsaW5rOmhyZWZgKSBhcmUgc3VwcG9y
dGVkLCBidXQgaGF2ZSB0byBiZQotICAgIG1hcHBlZCwgc2luY2UgYDpgIGlzIG5vdCBhIHZhbGlk
IGNoYXJhY3RlciBmb3IgcHJvcGVydGllcyBpbiBKYXZhc2NyaXB0OgotICAKLSAgICBgYGBqYXZh
c2NyaXB0Ci0gICAgVXNlVmlldyA9IEVtYmVyLlZpZXcuZXh0ZW5kKHsKLSAgICAgIHRhZ05hbWU6
ICd1c2UnLAotICAgICAgYXR0cmlidXRlQmluZGluZ3M6IFsneGxpbmtIcmVmOnhsaW5rOmhyZWYn
XSwKLSAgICAgIHhsaW5rSHJlZjogJyN0cmlhbmdsZScKLSAgICB9KTsKLSAgICBgYGAKLSAgICBX
aWxsIHJlc3VsdCBpbiB2aWV3IGluc3RhbmNlcyB3aXRoIGFuIEhUTUwgcmVwcmVzZW50YXRpb24g
b2Y6Ci0gIAotICAgIGBgYGh0bWwKLSAgICA8dXNlIHhsaW5rOmhyZWY9IiN0cmlhbmdsZSI+PC91
c2U+Ci0gICAgYGBgCi0gIAotICAgIElmIHRoZSByZXR1cm4gdmFsdWUgb2YgYW4gYGF0dHJpYnV0
ZUJpbmRpbmdzYCBtb25pdG9yZWQgcHJvcGVydHkgaXMgYSBib29sZWFuCi0gICAgdGhlIHByb3Bl
cnR5J3MgdmFsdWUgd2lsbCBiZSBzZXQgYXMgYSBjb2VyY2VkIHN0cmluZzoKLSAgCi0gICAgYGBg
amF2YXNjcmlwdAotICAgIE15VGV4dElucHV0ID0gRW1iZXIuVmlldy5leHRlbmQoewotICAgICAg
dGFnTmFtZTogJ2lucHV0JywKLSAgICAgIGF0dHJpYnV0ZUJpbmRpbmdzOiBbJ2Rpc2FibGVkJ10s
Ci0gICAgICBkaXNhYmxlZDogZmFsc2UKLSAgICB9KTsKLSAgICBgYGAKLSAgCi0gICAgV2lsbCBy
ZXN1bHQgaW4gYSB2aWV3IGluc3RhbmNlIHdpdGggYW4gSFRNTCByZXByZXNlbnRhdGlvbiBvZjoK
LSAgCi0gICAgYGBgaHRtbAotICAgIDxpbnB1dCBpZD0iZW1iZXIxIiBjbGFzcz0iZW1iZXItdmll
dyIgZGlzYWJsZWQ9ImZhbHNlIiAvPgotICAgIGBgYAotICAKLSAgICBgYXR0cmlidXRlQmluZGlu
Z3NgIGNhbiByZWZlciB0byBjb21wdXRlZCBwcm9wZXJ0aWVzOgotICAKLSAgICBgYGBqYXZhc2Ny
aXB0Ci0gICAgTXlUZXh0SW5wdXQgPSBFbWJlci5WaWV3LmV4dGVuZCh7Ci0gICAgICB0YWdOYW1l
OiAnaW5wdXQnLAotICAgICAgYXR0cmlidXRlQmluZGluZ3M6IFsnZGlzYWJsZWQnXSwKLSAgICAg
IGRpc2FibGVkOiBFbWJlci5jb21wdXRlZChmdW5jdGlvbigpIHsKLSAgICAgICAgaWYgKHNvbWVM
b2dpYykgewotICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgfSkKLSAgICB9KTsKLSAgICBgYGAK
LSAgCi0gICAgVG8gcHJldmVudCBzZXR0aW5nIGFuIGF0dHJpYnV0ZSBhbHRvZ2V0aGVyLCB1c2Ug
YG51bGxgIG9yIGB1bmRlZmluZWRgIGFzIHRoZQotICAgIHJldHVybiB2YWx1ZSBvZiB0aGUgYGF0
dHJpYnV0ZUJpbmRpbmdzYCBtb25pdG9yZWQgcHJvcGVydHk6Ci0gIAotICAgIGBgYGphdmFzY3Jp
cHQKLSAgICBNeVRleHRJbnB1dCA9IEVtYmVyLlZpZXcuZXh0ZW5kKHsKLSAgICAgIHRhZ05hbWU6
ICdmb3JtJywKLSAgICAgIGF0dHJpYnV0ZUJpbmRpbmdzOiBbJ25vdmFsaWRhdGUnXSwKLSAgICAg
IG5vdmFsaWRhdGU6IG51bGwKLSAgICB9KTsKLSAgICBgYGAKLSAgCi0gICAgVXBkYXRlcyB0byB0
aGUgcHJvcGVydHkgb2YgYW4gYXR0cmlidXRlIGJpbmRpbmcgd2lsbCByZXN1bHQgaW4gYXV0b21h
dGljCi0gICAgdXBkYXRlIG9mIHRoZSAgSFRNTCBhdHRyaWJ1dGUgaW4gdGhlIHZpZXcncyByZW5k
ZXJlZCBIVE1MIHJlcHJlc2VudGF0aW9uLgotICAKLSAgICBgYXR0cmlidXRlQmluZGluZ3NgIGlz
IGEgY29uY2F0ZW5hdGVkIHByb3BlcnR5LiBTZWUgW0VtYmVyLk9iamVjdF0oL2FwaS9jbGFzc2Vz
L0VtYmVyLk9iamVjdC5odG1sKQotICAgIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRp
b24gYWJvdXQgY29uY2F0ZW5hdGVkIHByb3BlcnRpZXMuCi0gIAotICAgICMjIFRlbXBsYXRlcwot
ICAKLSAgICBUaGUgSFRNTCBjb250ZW50cyBvZiBhIHZpZXcncyByZW5kZXJlZCByZXByZXNlbnRh
dGlvbiBhcmUgZGV0ZXJtaW5lZCBieSBpdHMKLSAgICB0ZW1wbGF0ZS4gVGVtcGxhdGVzIGNhbiBi
ZSBhbnkgZnVuY3Rpb24gdGhhdCBhY2NlcHRzIGFuIG9wdGlvbmFsIGNvbnRleHQKLSAgICBwYXJh
bWV0ZXIgYW5kIHJldHVybnMgYSBzdHJpbmcgb2YgSFRNTCB0aGF0IHdpbGwgYmUgaW5zZXJ0ZWQg
d2l0aGluIHRoZQotICAgIHZpZXcncyB0YWcuIE1vc3QgdHlwaWNhbGx5IGluIEVtYmVyIHRoaXMg
ZnVuY3Rpb24gd2lsbCBiZSBhIGNvbXBpbGVkCi0gICAgdGVtcGxhdGUuCi0gIAotICAgIGBgYGph
dmFzY3JpcHQKLSAgICBBVmlldyA9IEVtYmVyLlZpZXcuZXh0ZW5kKHsKLSAgICAgIHRlbXBsYXRl
OiBFbWJlci5IVE1MQmFycy5jb21waWxlKCdJIGFtIHRoZSB0ZW1wbGF0ZScpCi0gICAgfSk7Ci0g
ICAgYGBgCi0gIAotICAgIFdpbGwgcmVzdWx0IGluIHZpZXcgaW5zdGFuY2VzIHdpdGggYW4gSFRN
TCByZXByZXNlbnRhdGlvbiBvZjoKLSAgCi0gICAgYGBgaHRtbAotICAgIDxkaXYgaWQ9ImVtYmVy
MSIgY2xhc3M9ImVtYmVyLXZpZXciPkkgYW0gdGhlIHRlbXBsYXRlPC9kaXY+Ci0gICAgYGBgCi0g
IAotICAgIFdpdGhpbiBhbiBFbWJlciBhcHBsaWNhdGlvbiBpcyBtb3JlIGNvbW1vbiB0byBkZWZp
bmUgYSBIYW5kbGViYXJzIHRlbXBsYXRlcyBhcwotICAgIHBhcnQgb2YgYSBwYWdlOgotICAKLSAg
ICBgYGBodG1sCi0gICAgPHNjcmlwdCB0eXBlPSd0ZXh0L3gtaGFuZGxlYmFycycgZGF0YS10ZW1w
bGF0ZS1uYW1lPSdzb21lLXRlbXBsYXRlJz4KLSAgICAgIEhlbGxvCi0gICAgPC9zY3JpcHQ+Ci0g
ICAgYGBgCi0gIAotICAgIEFuZCBhc3NvY2lhdGUgaXQgYnkgbmFtZSB1c2luZyBhIHZpZXcncyBg
dGVtcGxhdGVOYW1lYCBwcm9wZXJ0eToKLSAgCi0gICAgYGBgamF2YXNjcmlwdAotICAgIEFWaWV3
ID0gRW1iZXIuVmlldy5leHRlbmQoewotICAgICAgdGVtcGxhdGVOYW1lOiAnc29tZS10ZW1wbGF0
ZScKLSAgICB9KTsKLSAgICBgYGAKLSAgCi0gICAgSWYgeW91IGhhdmUgbmVzdGVkIHJvdXRlcywg
eW91ciBIYW5kbGViYXJzIHRlbXBsYXRlIHdpbGwgbG9vayBsaWtlIHRoaXM6Ci0gIAotICAgIGBg
YGh0bWwKLSAgICA8c2NyaXB0IHR5cGU9J3RleHQveC1oYW5kbGViYXJzJyBkYXRhLXRlbXBsYXRl
LW5hbWU9J3Bvc3RzL25ldyc+Ci0gICAgICA8aDE+TmV3IFBvc3Q8L2gxPgotICAgIDwvc2NyaXB0
PgotICAgIGBgYAotICAKLSAgICBBbmQgYHRlbXBsYXRlTmFtZWAgcHJvcGVydHk6Ci0gIAotICAg
IGBgYGphdmFzY3JpcHQKLSAgICBBVmlldyA9IEVtYmVyLlZpZXcuZXh0ZW5kKHsKLSAgICAgIHRl
bXBsYXRlTmFtZTogJ3Bvc3RzL25ldycKLSAgICB9KTsKLSAgICBgYGAKLSAgCi0gICAgVXNpbmcg
YSB2YWx1ZSBmb3IgYHRlbXBsYXRlTmFtZWAgdGhhdCBkb2VzIG5vdCBoYXZlIGEgdGVtcGxhdGUK
LSAgICB3aXRoIGEgbWF0Y2hpbmcgYGRhdGEtdGVtcGxhdGUtbmFtZWAgYXR0cmlidXRlIHdpbGwg
dGhyb3cgYW4gZXJyb3IuCi0gIAotICAgIEZvciB2aWV3cyBjbGFzc2VzIHRoYXQgbWF5IGhhdmUg
YSB0ZW1wbGF0ZSBsYXRlciBkZWZpbmVkIChlLmcuIGFzIHRoZSBibG9jawotICAgIHBvcnRpb24g
b2YgYSBge3t2aWV3fX1gIGhlbHBlciBjYWxsIGluIGFub3RoZXIgdGVtcGxhdGUgb3IgaW4KLSAg
ICBhIHN1YmNsYXNzKSwgeW91IGNhbiBwcm92aWRlIGEgYGRlZmF1bHRUZW1wbGF0ZWAgcHJvcGVy
dHkgc2V0IHRvIGNvbXBpbGVkCi0gICAgdGVtcGxhdGUgZnVuY3Rpb24uIElmIGEgdGVtcGxhdGUg
aXMgbm90IGxhdGVyIHByb3ZpZGVkIGZvciB0aGUgdmlldyBpbnN0YW5jZQotICAgIHRoZSBgZGVm
YXVsdFRlbXBsYXRlYCB2YWx1ZSB3aWxsIGJlIHVzZWQ6Ci0gIAotICAgIGBgYGphdmFzY3JpcHQK
LSAgICBBVmlldyA9IEVtYmVyLlZpZXcuZXh0ZW5kKHsKLSAgICAgIGRlZmF1bHRUZW1wbGF0ZTog
RW1iZXIuSFRNTEJhcnMuY29tcGlsZSgnSSB3YXMgdGhlIGRlZmF1bHQnKSwKLSAgICAgIHRlbXBs
YXRlOiBudWxsLAotICAgICAgdGVtcGxhdGVOYW1lOiBudWxsCi0gICAgfSk7Ci0gICAgYGBgCi0g
IAotICAgIFdpbGwgcmVzdWx0IGluIGluc3RhbmNlcyB3aXRoIGFuIEhUTUwgcmVwcmVzZW50YXRp
b24gb2Y6Ci0gIAotICAgIGBgYGh0bWwKLSAgICA8ZGl2IGlkPSJlbWJlcjEiIGNsYXNzPSJlbWJl
ci12aWV3Ij5JIHdhcyB0aGUgZGVmYXVsdDwvZGl2PgotICAgIGBgYAotICAKLSAgICBJZiBhIGB0
ZW1wbGF0ZWAgb3IgYHRlbXBsYXRlTmFtZWAgaXMgcHJvdmlkZWQgaXQgd2lsbCB0YWtlIHByZWNl
ZGVuY2Ugb3ZlcgotICAgIGBkZWZhdWx0VGVtcGxhdGVgOgotICAKLSAgICBgYGBqYXZhc2NyaXB0
Ci0gICAgQVZpZXcgPSBFbWJlci5WaWV3LmV4dGVuZCh7Ci0gICAgICBkZWZhdWx0VGVtcGxhdGU6
IEVtYmVyLkhUTUxCYXJzLmNvbXBpbGUoJ0kgd2FzIHRoZSBkZWZhdWx0JykKLSAgICB9KTsKLSAg
Ci0gICAgYVZpZXcgPSBBVmlldy5jcmVhdGUoewotICAgICAgdGVtcGxhdGU6IEVtYmVyLkhUTUxC
YXJzLmNvbXBpbGUoJ0kgd2FzIHRoZSB0ZW1wbGF0ZSwgbm90IGRlZmF1bHQnKQotICAgIH0pOwot
ICAgIGBgYAotICAKLSAgICBXaWxsIHJlc3VsdCBpbiB0aGUgZm9sbG93aW5nIEhUTUwgcmVwcmVz
ZW50YXRpb24gd2hlbiByZW5kZXJlZDoKLSAgCi0gICAgYGBgaHRtbAotICAgIDxkaXYgaWQ9ImVt
YmVyMSIgY2xhc3M9ImVtYmVyLXZpZXciPkkgd2FzIHRoZSB0ZW1wbGF0ZSwgbm90IGRlZmF1bHQ8
L2Rpdj4KLSAgICBgYGAKLSAgCi0gICAgIyMgVmlldyBDb250ZXh0Ci0gIAotICAgIFRoZSBkZWZh
dWx0IGNvbnRleHQgb2YgdGhlIGNvbXBpbGVkIHRlbXBsYXRlIGlzIHRoZSB2aWV3J3MgY29udHJv
bGxlcjoKLSAgCi0gICAgYGBgamF2YXNjcmlwdAotICAgIEFWaWV3ID0gRW1iZXIuVmlldy5leHRl
bmQoewotICAgICAgdGVtcGxhdGU6IEVtYmVyLkhUTUxCYXJzLmNvbXBpbGUoJ0hlbGxvIHt7ZXhj
aXRlZEdyZWV0aW5nfX0nKQotICAgIH0pOwotICAKLSAgICBhQ29udHJvbGxlciA9IEVtYmVyLk9i
amVjdC5jcmVhdGUoewotICAgICAgZmlyc3ROYW1lOiAnQmFycnknLAotICAgICAgZXhjaXRlZEdy
ZWV0aW5nOiBFbWJlci5jb21wdXRlZCgnY29udGVudC5maXJzdE5hbWUnLCBmdW5jdGlvbigpIHsK
LSAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KCdjb250ZW50LmZpcnN0TmFtZScpICsgJyEhISc7Ci0g
ICAgICB9KQotICAgIH0pOwotICAKLSAgICBhVmlldyA9IEFWaWV3LmNyZWF0ZSh7Ci0gICAgICBj
b250cm9sbGVyOiBhQ29udHJvbGxlcgotICAgIH0pOwotICAgIGBgYAotICAKLSAgICBXaWxsIHJl
c3VsdCBpbiBhbiBIVE1MIHJlcHJlc2VudGF0aW9uIG9mOgotICAKLSAgICBgYGBodG1sCi0gICAg
PGRpdiBpZD0iZW1iZXIxIiBjbGFzcz0iZW1iZXItdmlldyI+SGVsbG8gQmFycnkhISE8L2Rpdj4K
LSAgICBgYGAKLSAgCi0gICAgQSBjb250ZXh0IGNhbiBhbHNvIGJlIGV4cGxpY2l0bHkgc3VwcGxp
ZWQgdGhyb3VnaCB0aGUgdmlldydzIGBjb250ZXh0YAotICAgIHByb3BlcnR5LiBJZiB0aGUgdmll
dyBoYXMgbmVpdGhlciBgY29udGV4dGAgbm9yIGBjb250cm9sbGVyYCBwcm9wZXJ0aWVzLCB0aGUK
LSAgICBgcGFyZW50Vmlld2AncyBjb250ZXh0IHdpbGwgYmUgdXNlZC4KLSAgCi0gICAgIyMgTGF5
b3V0cwotICAKLSAgICBWaWV3cyBjYW4gaGF2ZSBhIHNlY29uZGFyeSB0ZW1wbGF0ZSB0aGF0IHdy
YXBzIHRoZWlyIG1haW4gdGVtcGxhdGUuIExpa2UKLSAgICBwcmltYXJ5IHRlbXBsYXRlcywgbGF5
b3V0cyBjYW4gYmUgYW55IGZ1bmN0aW9uIHRoYXQgIGFjY2VwdHMgYW4gb3B0aW9uYWwKLSAgICBj
b250ZXh0IHBhcmFtZXRlciBhbmQgcmV0dXJucyBhIHN0cmluZyBvZiBIVE1MIHRoYXQgd2lsbCBi
ZSBpbnNlcnRlZCBpbnNpZGUKLSAgICB2aWV3J3MgdGFnLiBWaWV3cyB3aG9zZSBIVE1MIGVsZW1l
bnQgaXMgc2VsZiBjbG9zaW5nIChlLmcuIGA8aW5wdXQgLz5gKQotICAgIGNhbm5vdCBoYXZlIGEg
bGF5b3V0IGFuZCB0aGlzIHByb3BlcnR5IHdpbGwgYmUgaWdub3JlZC4KLSAgCi0gICAgTW9zdCB0
eXBpY2FsbHkgaW4gRW1iZXIgYSBsYXlvdXQgd2lsbCBiZSBhIGNvbXBpbGVkIHRlbXBsYXRlLgot
ICAKLSAgICBBIHZpZXcncyBsYXlvdXQgY2FuIGJlIHNldCBkaXJlY3RseSB3aXRoIHRoZSBgbGF5
b3V0YCBwcm9wZXJ0eSBvciByZWZlcmVuY2UKLSAgICBhbiBleGlzdGluZyB0ZW1wbGF0ZSBieSBu
YW1lIHdpdGggdGhlIGBsYXlvdXROYW1lYCBwcm9wZXJ0eS4KLSAgCi0gICAgQSB0ZW1wbGF0ZSB1
c2VkIGFzIGEgbGF5b3V0IG11c3QgY29udGFpbiBhIHNpbmdsZSB1c2Ugb2YgdGhlCi0gICAgYHt7
eWllbGR9fWAgaGVscGVyLiBUaGUgSFRNTCBjb250ZW50cyBvZiBhIHZpZXcncyByZW5kZXJlZCBg
dGVtcGxhdGVgIHdpbGwgYmUKLSAgICBpbnNlcnRlZCBhdCB0aGlzIGxvY2F0aW9uOgotICAKLSAg
ICBgYGBqYXZhc2NyaXB0Ci0gICAgQVZpZXdXaXRoTGF5b3V0ID0gRW1iZXIuVmlldy5leHRlbmQo
ewotICAgICAgbGF5b3V0OiBFbWJlci5IVE1MQmFycy5jb21waWxlKCI8ZGl2IGNsYXNzPSdteS1k
ZWNvcmF0aXZlLWNsYXNzJz57e3lpZWxkfX08L2Rpdj4iKSwKLSAgICAgIHRlbXBsYXRlOiBFbWJl
ci5IVE1MQmFycy5jb21waWxlKCJJIGdvdCB3cmFwcGVkIikKLSAgICB9KTsKLSAgICBgYGAKLSAg
Ci0gICAgV2lsbCByZXN1bHQgaW4gdmlldyBpbnN0YW5jZXMgd2l0aCBhbiBIVE1MIHJlcHJlc2Vu
dGF0aW9uIG9mOgotICAKLSAgICBgYGBodG1sCi0gICAgPGRpdiBpZD0iZW1iZXIxIiBjbGFzcz0i
ZW1iZXItdmlldyI+Ci0gICAgICA8ZGl2IGNsYXNzPSJteS1kZWNvcmF0aXZlLWNsYXNzIj4KLSAg
ICAgICAgSSBnb3Qgd3JhcHBlZAotICAgICAgPC9kaXY+Ci0gICAgPC9kaXY+Ci0gICAgYGBgCi0g
IAotICAgIFNlZSBbRW1iZXIuVGVtcGxhdGVzLmhlbHBlcnMueWllbGRdKC9hcGkvY2xhc3Nlcy9F
bWJlci5UZW1wbGF0ZXMuaGVscGVycy5odG1sI21ldGhvZF95aWVsZCkKLSAgICBmb3IgbW9yZSBp
bmZvcm1hdGlvbi4KLSAgCi0gICAgIyMgUmVzcG9uZGluZyB0byBCcm93c2VyIEV2ZW50cwotICAK
LSAgICBWaWV3cyBjYW4gcmVzcG9uZCB0byB1c2VyLWluaXRpYXRlZCBldmVudHMgaW4gb25lIG9m
IHRocmVlIHdheXM6IG1ldGhvZAotICAgIGltcGxlbWVudGF0aW9uLCB0aHJvdWdoIGFuIGV2ZW50
IG1hbmFnZXIsIGFuZCB0aHJvdWdoIGB7e2FjdGlvbn19YCBoZWxwZXIgdXNlCi0gICAgaW4gdGhl
aXIgdGVtcGxhdGUgb3IgbGF5b3V0LgotICAKLSAgICAjIyMgTWV0aG9kIEltcGxlbWVudGF0aW9u
Ci0gIAotICAgIFZpZXdzIGNhbiByZXNwb25kIHRvIHVzZXItaW5pdGlhdGVkIGV2ZW50cyBieSBp
bXBsZW1lbnRpbmcgYSBtZXRob2QgdGhhdAotICAgIG1hdGNoZXMgdGhlIGV2ZW50IG5hbWUuIEEg
YGpRdWVyeS5FdmVudGAgb2JqZWN0IHdpbGwgYmUgcGFzc2VkIGFzIHRoZQotICAgIGFyZ3VtZW50
IHRvIHRoaXMgbWV0aG9kLgotICAKLSAgICBgYGBqYXZhc2NyaXB0Ci0gICAgQVZpZXcgPSBFbWJl
ci5WaWV3LmV4dGVuZCh7Ci0gICAgICBjbGljazogZnVuY3Rpb24oZXZlbnQpIHsKLSAgICAgICAg
Ly8gd2lsbCBiZSBjYWxsZWQgd2hlbiBhbiBpbnN0YW5jZSdzCi0gICAgICAgIC8vIHJlbmRlcmVk
IGVsZW1lbnQgaXMgY2xpY2tlZAotICAgICAgfQotICAgIH0pOwotICAgIGBgYAotICAKLSAgICAj
IyMgRXZlbnQgTWFuYWdlcnMKLSAgCi0gICAgVmlld3MgY2FuIGRlZmluZSBhbiBvYmplY3QgYXMg
dGhlaXIgYGV2ZW50TWFuYWdlcmAgcHJvcGVydHkuIFRoaXMgb2JqZWN0IGNhbgotICAgIHRoZW4g
aW1wbGVtZW50IG1ldGhvZHMgdGhhdCBtYXRjaCB0aGUgZGVzaXJlZCBldmVudCBuYW1lcy4gTWF0
Y2hpbmcgZXZlbnRzCi0gICAgdGhhdCBvY2N1ciBvbiB0aGUgdmlldydzIHJlbmRlcmVkIEhUTUwg
b3IgdGhlIHJlbmRlcmVkIEhUTUwgb2YgYW55IG9mIGl0cyBET00KLSAgICBkZXNjZW5kYW50cyB3
aWxsIHRyaWdnZXIgdGhpcyBtZXRob2QuIEEgYGpRdWVyeS5FdmVudGAgb2JqZWN0IHdpbGwgYmUg
cGFzc2VkCi0gICAgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBtZXRob2QgYW5kIGFuICBg
RW1iZXIuVmlld2Agb2JqZWN0IGFzIHRoZQotICAgIHNlY29uZC4gVGhlIGBFbWJlci5WaWV3YCB3
aWxsIGJlIHRoZSB2aWV3IHdob3NlIHJlbmRlcmVkIEhUTUwgd2FzIGludGVyYWN0ZWQKLSAgICB3
aXRoLiBUaGlzIG1heSBiZSB0aGUgdmlldyB3aXRoIHRoZSBgZXZlbnRNYW5hZ2VyYCBwcm9wZXJ0
eSBvciBvbmUgb2YgaXRzCi0gICAgZGVzY2VuZGFudCB2aWV3cy4KLSAgCi0gICAgYGBgamF2YXNj
cmlwdAotICAgIEFWaWV3ID0gRW1iZXIuVmlldy5leHRlbmQoewotICAgICAgZXZlbnRNYW5hZ2Vy
OiBFbWJlci5PYmplY3QuY3JlYXRlKHsKLSAgICAgICAgZG91YmxlQ2xpY2s6IGZ1bmN0aW9uKGV2
ZW50LCB2aWV3KSB7Ci0gICAgICAgICAgLy8gd2lsbCBiZSBjYWxsZWQgd2hlbiBhbiBpbnN0YW5j
ZSdzCi0gICAgICAgICAgLy8gcmVuZGVyZWQgZWxlbWVudCBvciBhbnkgcmVuZGVyaW5nCi0gICAg
ICAgICAgLy8gb2YgdGhpcyB2aWV3J3MgZGVzY2VuZGFudAotICAgICAgICAgIC8vIGVsZW1lbnRz
IGlzIGNsaWNrZWQKLSAgICAgICAgfQotICAgICAgfSkKLSAgICB9KTsKLSAgICBgYGAKLSAgCi0g
ICAgQW4gZXZlbnQgZGVmaW5lZCBmb3IgYW4gZXZlbnQgbWFuYWdlciB0YWtlcyBwcmVjZWRlbmNl
IG92ZXIgZXZlbnRzIG9mIHRoZQotICAgIHNhbWUgbmFtZSBoYW5kbGVkIHRocm91Z2ggbWV0aG9k
cyBvbiB0aGUgdmlldy4KLSAgCi0gICAgYGBgamF2YXNjcmlwdAotICAgIEFWaWV3ID0gRW1iZXIu
Vmlldy5leHRlbmQoewotICAgICAgbW91c2VFbnRlcjogZnVuY3Rpb24oZXZlbnQpIHsKLSAgICAg
ICAgLy8gd2lsbCBuZXZlciB0cmlnZ2VyLgotICAgICAgfSwKLSAgICAgIGV2ZW50TWFuYWdlcjog
RW1iZXIuT2JqZWN0LmNyZWF0ZSh7Ci0gICAgICAgIG1vdXNlRW50ZXI6IGZ1bmN0aW9uKGV2ZW50
LCB2aWV3KSB7Ci0gICAgICAgICAgLy8gdGFrZXMgcHJlY2VkZW5jZSBvdmVyIEFWaWV3I21vdXNl
RW50ZXIKLSAgICAgICAgfQotICAgICAgfSkKLSAgICB9KTsKLSAgICBgYGAKLSAgCi0gICAgU2lt
aWxhcmx5IGEgdmlldydzIGV2ZW50IG1hbmFnZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UgZm9yIGV2
ZW50cyBvZiBhbnkgdmlld3MKLSAgICByZW5kZXJlZCBhcyBhIGRlc2NlbmRhbnQuIEEgbWV0aG9k
IG5hbWUgdGhhdCBtYXRjaGVzIGFuIGV2ZW50IG5hbWUgd2lsbCBub3QKLSAgICBiZSBjYWxsZWQg
aWYgdGhlIHZpZXcgaW5zdGFuY2Ugd2FzIHJlbmRlcmVkIGluc2lkZSB0aGUgSFRNTCByZXByZXNl
bnRhdGlvbiBvZgotICAgIGEgdmlldyB0aGF0IGhhcyBhbiBgZXZlbnRNYW5hZ2VyYCBwcm9wZXJ0
eSBkZWZpbmVkIHRoYXQgaGFuZGxlcyBldmVudHMgb2YgdGhlCi0gICAgbmFtZS4gRXZlbnRzIG5v
dCBoYW5kbGVkIGJ5IHRoZSBldmVudCBtYW5hZ2VyIHdpbGwgc3RpbGwgdHJpZ2dlciBtZXRob2Qg
Y2FsbHMKLSAgICBvbiB0aGUgZGVzY2VuZGFudC4KLSAgCi0gICAgYGBgamF2YXNjcmlwdAotICAg
IHZhciBBcHAgPSBFbWJlci5BcHBsaWNhdGlvbi5jcmVhdGUoKTsKLSAgICBBcHAuT3V0ZXJWaWV3
ID0gRW1iZXIuVmlldy5leHRlbmQoewotICAgICAgdGVtcGxhdGU6IEVtYmVyLkhUTUxCYXJzLmNv
bXBpbGUoIm91dGVyIHt7I3ZpZXcgJ2lubmVyJ319aW5uZXJ7ey92aWV3fX0gb3V0ZXIiKSwKLSAg
ICAgIGV2ZW50TWFuYWdlcjogRW1iZXIuT2JqZWN0LmNyZWF0ZSh7Ci0gICAgICAgIG1vdXNlRW50
ZXI6IGZ1bmN0aW9uKGV2ZW50LCB2aWV3KSB7Ci0gICAgICAgICAgLy8gdmlldyBtaWdodCBiZSBp
bnN0YW5jZSBvZiBlaXRoZXIKLSAgICAgICAgICAvLyBPdXRlclZpZXcgb3IgSW5uZXJWaWV3IGRl
cGVuZGluZyBvbgotICAgICAgICAgIC8vIHdoZXJlIG9uIHRoZSBwYWdlIHRoZSB1c2VyIGludGVy
YWN0aW9uIG9jY3VycmVkCi0gICAgICAgIH0KLSAgICAgIH0pCi0gICAgfSk7Ci0gIAotICAgIEFw
cC5Jbm5lclZpZXcgPSBFbWJlci5WaWV3LmV4dGVuZCh7Ci0gICAgICBjbGljazogZnVuY3Rpb24o
ZXZlbnQpIHsKLSAgICAgICAgLy8gd2lsbCBiZSBjYWxsZWQgaWYgcmVuZGVyZWQgaW5zaWRlCi0g
ICAgICAgIC8vIGFuIE91dGVyVmlldyBiZWNhdXNlIE91dGVyVmlldydzCi0gICAgICAgIC8vIGV2
ZW50TWFuYWdlciBkb2Vzbid0IGhhbmRsZSBjbGljayBldmVudHMKLSAgICAgIH0sCi0gICAgICBt
b3VzZUVudGVyOiBmdW5jdGlvbihldmVudCkgewotICAgICAgICAvLyB3aWxsIG5ldmVyIGJlIGNh
bGxlZCBpZiByZW5kZXJlZCBpbnNpZGUKLSAgICAgICAgLy8gYW4gT3V0ZXJWaWV3LgotICAgICAg
fQotICAgIH0pOwotICAgIGBgYAotICAKLSAgICAjIyMgYHt7YWN0aW9ufX1gIEhlbHBlcgotICAK
LSAgICBTZWUgW0VtYmVyLlRlbXBsYXRlcy5oZWxwZXJzLmFjdGlvbl0oL2FwaS9jbGFzc2VzL0Vt
YmVyLlRlbXBsYXRlcy5oZWxwZXJzLmh0bWwjbWV0aG9kX2FjdGlvbikuCi0gIAotICAgICMjIyBF
dmVudCBOYW1lcwotICAKLSAgICBBbGwgb2YgdGhlIGV2ZW50IGhhbmRsaW5nIGFwcHJvYWNoZXMg
ZGVzY3JpYmVkIGFib3ZlIHJlc3BvbmQgdG8gdGhlIHNhbWUgc2V0Ci0gICAgb2YgZXZlbnRzLiBU
aGUgbmFtZXMgb2YgdGhlIGJ1aWx0LWluIGV2ZW50cyBhcmUgbGlzdGVkIGJlbG93LiAoVGhlIGhh
c2ggb2YKLSAgICBidWlsdC1pbiBldmVudHMgZXhpc3RzIGluIGBFbWJlci5FdmVudERpc3BhdGNo
ZXJgLikgQWRkaXRpb25hbCwgY3VzdG9tIGV2ZW50cwotICAgIGNhbiBiZSByZWdpc3RlcmVkIGJ5
IHVzaW5nIGBFbWJlci5BcHBsaWNhdGlvbi5jdXN0b21FdmVudHNgLgotICAKLSAgICBUb3VjaCBl
dmVudHM6Ci0gIAotICAgICogYHRvdWNoU3RhcnRgCi0gICAgKiBgdG91Y2hNb3ZlYAotICAgICog
YHRvdWNoRW5kYAotICAgICogYHRvdWNoQ2FuY2VsYAotICAKLSAgICBLZXlib2FyZCBldmVudHMK
LSAgCi0gICAgKiBga2V5RG93bmAKLSAgICAqIGBrZXlVcGAKLSAgICAqIGBrZXlQcmVzc2AKLSAg
Ci0gICAgTW91c2UgZXZlbnRzCi0gIAotICAgICogYG1vdXNlRG93bmAKLSAgICAqIGBtb3VzZVVw
YAotICAgICogYGNvbnRleHRNZW51YAotICAgICogYGNsaWNrYAotICAgICogYGRvdWJsZUNsaWNr
YAotICAgICogYG1vdXNlTW92ZWAKLSAgICAqIGBmb2N1c0luYAotICAgICogYGZvY3VzT3V0YAot
ICAgICogYG1vdXNlRW50ZXJgCi0gICAgKiBgbW91c2VMZWF2ZWAKLSAgCi0gICAgRm9ybSBldmVu
dHM6Ci0gIAotICAgICogYHN1Ym1pdGAKLSAgICAqIGBjaGFuZ2VgCi0gICAgKiBgZm9jdXNJbmAK
LSAgICAqIGBmb2N1c091dGAKLSAgICAqIGBpbnB1dGAKLSAgCi0gICAgSFRNTDUgZHJhZyBhbmQg
ZHJvcCBldmVudHM6Ci0gIAotICAgICogYGRyYWdTdGFydGAKLSAgICAqIGBkcmFnYAotICAgICog
YGRyYWdFbnRlcmAKLSAgICAqIGBkcmFnTGVhdmVgCi0gICAgKiBgZHJhZ092ZXJgCi0gICAgKiBg
ZHJhZ0VuZGAKLSAgICAqIGBkcm9wYAotICAKLSAgICAjIyBge3t2aWV3fX1gIEhlbHBlcgotICAK
LSAgICBPdGhlciBgRW1iZXIuVmlld2AgaW5zdGFuY2VzIGNhbiBiZSBpbmNsdWRlZCBhcyBwYXJ0
IG9mIGEgdmlldydzIHRlbXBsYXRlIGJ5Ci0gICAgdXNpbmcgdGhlIGB7e3ZpZXd9fWAgaGVscGVy
LiBTZWUgW0VtYmVyLlRlbXBsYXRlcy5oZWxwZXJzLnZpZXddKC9hcGkvY2xhc3Nlcy9FbWJlci5U
ZW1wbGF0ZXMuaGVscGVycy5odG1sI21ldGhvZF92aWV3KQotICAgIGZvciBhZGRpdGlvbmFsIGlu
Zm9ybWF0aW9uLgotICAKLSAgICBAY2xhc3MgVmlldwotICAgIEBuYW1lc3BhY2UgRW1iZXIKLSAg
ICBAZXh0ZW5kcyBFbWJlci5Db3JlVmlldwotICAgIEBkZXByZWNhdGVkIFNlZSBodHRwOi8vZW1i
ZXJqcy5jb20vZGVwcmVjYXRpb25zL3YxLngvI3RvY19lbWJlci12aWV3Ci0gICAgQHVzZXMgRW1i
ZXIuVmlld1N1cHBvcnQKLSAgICBAdXNlcyBFbWJlci5WaWV3Q29udGV4dFN1cHBvcnQKLSAgICBA
dXNlcyBFbWJlci5WaWV3Q2hpbGRWaWV3c1N1cHBvcnQKLSAgICBAdXNlcyBFbWJlci5UZW1wbGF0
ZVJlbmRlcmluZ1N1cHBvcnQKLSAgICBAdXNlcyBFbWJlci5DbGFzc05hbWVzU3VwcG9ydAotICAg
IEB1c2VzIEVtYmVyLkF0dHJpYnV0ZUJpbmRpbmdzU3VwcG9ydAotICAgIEB1c2VzIEVtYmVyLkxl
Z2FjeVZpZXdTdXBwb3J0Ci0gICAgQHVzZXMgRW1iZXIuSW5zdHJ1bWVudGF0aW9uU3VwcG9ydAot
ICAgIEB1c2VzIEVtYmVyLlZpc2liaWxpdHlTdXBwb3J0Ci0gICAgQHVzZXMgRW1iZXIuQXJpYVJv
bGVTdXBwb3J0Ci0gICAgQHB1YmxpYwotICAqLwotICAvLyBqc2NzOmRpc2FibGUgdmFsaWRhdGVJ
bmRlbnRhdGlvbgotICB2YXIgVmlldyA9IF9lbWJlclZpZXdzVmlld3NDb3JlX3ZpZXcuZGVmYXVs
dC5leHRlbmQoX2VtYmVyVmlld3NNaXhpbnNWaWV3X2NvbnRleHRfc3VwcG9ydC5kZWZhdWx0LCBf
ZW1iZXJWaWV3c01peGluc1ZpZXdfY2hpbGRfdmlld3Nfc3VwcG9ydC5kZWZhdWx0LCBfZW1iZXJW
aWV3c01peGluc0xlZ2FjeV9jaGlsZF92aWV3c19zdXBwb3J0LmRlZmF1bHQsIF9lbWJlclZpZXdz
TWl4aW5zVmlld19zdGF0ZV9zdXBwb3J0LmRlZmF1bHQsIF9lbWJlclZpZXdzTWl4aW5zVGVtcGxh
dGVfcmVuZGVyaW5nX3N1cHBvcnQuZGVmYXVsdCwgX2VtYmVyVmlld3NNaXhpbnNDbGFzc19uYW1l
c19zdXBwb3J0LmRlZmF1bHQsIF9lbWJlclZpZXdzTWl4aW5zTGVnYWN5X3ZpZXdfc3VwcG9ydC5k
ZWZhdWx0LCBfZW1iZXJWaWV3c01peGluc0luc3RydW1lbnRhdGlvbl9zdXBwb3J0LmRlZmF1bHQs
IF9lbWJlclZpZXdzTWl4aW5zVmlzaWJpbGl0eV9zdXBwb3J0LmRlZmF1bHQsIF9lbWJlclZpZXdz
Q29tcGF0QXR0cnNQcm94eS5kZWZhdWx0LCBfZW1iZXJWaWV3c01peGluc0FyaWFfcm9sZV9zdXBw
b3J0LmRlZmF1bHQsIF9lbWJlclZpZXdzTWl4aW5zVmlld19zdXBwb3J0LmRlZmF1bHQsIHsKLSAg
ICBpbml0OiBmdW5jdGlvbiAoKSB7Ci0gICAgICB0aGlzLl9zdXBlci5hcHBseSh0aGlzLCBhcmd1
bWVudHMpOwotCi0gICAgICBpZiAoIXRoaXMuX3ZpZXdSZWdpc3RyeSkgewotICAgICAgICB0aGlz
Ll92aWV3UmVnaXN0cnkgPSBWaWV3LnZpZXdzOwotICAgICAgfQotICAgIH0sCi0KLSAgICAvKioK
LSAgICAgIEdpdmVuIGEgcHJvcGVydHkgbmFtZSwgcmV0dXJucyBhIGRhc2hlcml6ZWQgdmVyc2lv
biBvZiB0aGF0Ci0gICAgICBwcm9wZXJ0eSBuYW1lIGlmIHRoZSBwcm9wZXJ0eSBldmFsdWF0ZXMg
dG8gYSBub24tZmFsc3kgdmFsdWUuCi0gICAgICAgRm9yIGV4YW1wbGUsIGlmIHRoZSB2aWV3IGhh
cyBwcm9wZXJ0eSBgaXNVcmdlbnRgIHRoYXQgZXZhbHVhdGVzIHRvIHRydWUsCi0gICAgICBwYXNz
aW5nIGBpc1VyZ2VudGAgdG8gdGhpcyBtZXRob2Qgd2lsbCByZXR1cm4gYCJpcy11cmdlbnQiYC4K
LSAgICAgICBAbWV0aG9kIF9jbGFzc1N0cmluZ0ZvclByb3BlcnR5Ci0gICAgICBAcGFyYW0gcHJv
cGVydHkKLSAgICAgIEBwcml2YXRlCi0gICAgKi8KLSAgICBfY2xhc3NTdHJpbmdGb3JQcm9wZXJ0
eTogZnVuY3Rpb24gKHBhcnNlZFBhdGgpIHsKLSAgICAgIHJldHVybiBWaWV3Ll9jbGFzc1N0cmlu
Z0ZvclZhbHVlKHBhcnNlZFBhdGgucGF0aCwgcGFyc2VkUGF0aC5zdHJlYW0udmFsdWUoKSwgcGFy
c2VkUGF0aC5jbGFzc05hbWUsIHBhcnNlZFBhdGguZmFsc3lDbGFzc05hbWUpOwotICAgIH0KLSAg
fSk7Ci0KLSAgLy8ganNjczplbmFibGUgdmFsaWRhdGVJbmRlbnRhdGlvbgotCi0gIC8qCi0gICAg
RGVzY3JpYmUgaG93IHRoZSBzcGVjaWZpZWQgYWN0aW9ucyBzaG91bGQgYmVoYXZlIGluIHRoZSB2
YXJpb3VzCi0gICAgc3RhdGVzIHRoYXQgYSB2aWV3IGNhbiBleGlzdCBpbi4gUG9zc2libGUgc3Rh
dGVzOgotICAKLSAgICAqIHByZVJlbmRlcjogd2hlbiBhIHZpZXcgaXMgZmlyc3QgaW5zdGFudGlh
dGVkLCBhbmQgYWZ0ZXIgaXRzCi0gICAgICBlbGVtZW50IHdhcyBkZXN0cm95ZWQsIGl0IGlzIGlu
IHRoZSBwcmVSZW5kZXIgc3RhdGUKLSAgICAqIGluQnVmZmVyOiBvbmNlIGEgdmlldyBoYXMgYmVl
biByZW5kZXJlZCwgYnV0IGJlZm9yZSBpdCBoYXMKLSAgICAgIGJlZW4gaW5zZXJ0ZWQgaW50byB0
aGUgRE9NLCBpdCBpcyBpbiB0aGUgaW5CdWZmZXIgc3RhdGUKLSAgICAqIGhhc0VsZW1lbnQ6IHRo
ZSBET00gcmVwcmVzZW50YXRpb24gb2YgdGhlIHZpZXcgaXMgY3JlYXRlZCwKLSAgICAgIGFuZCBp
cyByZWFkeSB0byBiZSBpbnNlcnRlZAotICAgICogaW5ET006IG9uY2UgYSB2aWV3IGhhcyBiZWVu
IGluc2VydGVkIGludG8gdGhlIERPTSBpdCBpcyBpbgotICAgICAgdGhlIGluRE9NIHN0YXRlLiBB
IHZpZXcgc3BlbmRzIHRoZSB2YXN0IG1ham9yaXR5IG9mIGl0cwotICAgICAgZXhpc3RlbmNlIGlu
IHRoaXMgc3RhdGUuCi0gICAgKiBkZXN0cm95ZWQ6IG9uY2UgYSB2aWV3IGhhcyBiZWVuIGRlc3Ry
b3llZCAodXNpbmcgdGhlIGRlc3Ryb3kKLSAgICAgIG1ldGhvZCksIGl0IGlzIGluIHRoaXMgc3Rh
dGUuIE5vIGZ1cnRoZXIgYWN0aW9ucyBjYW4gYmUgaW52b2tlZAotICAgICAgb24gYSBkZXN0cm95
ZWQgdmlldy4KLSAgKi8KLQotICAvLyBpbiB0aGUgZGVzdHJveWVkIHN0YXRlLCBldmVyeXRoaW5n
IGlzIGlsbGVnYWwKLQotICAvLyBiZWZvcmUgcmVuZGVyaW5nIGhhcyBiZWd1biwgYWxsIGxlZ2Fs
IG1hbmlwdWxhdGlvbnMgYXJlIG5vb3BzLgotCi0gIC8vIGluc2lkZSB0aGUgYnVmZmVyLCBsZWdh
bCBtYW5pcHVsYXRpb25zIGFyZSBkb25lIG9uIHRoZSBidWZmZXIKLQotICAvLyBvbmNlIHRoZSB2
aWV3IGhhcyBiZWVuIGluc2VydGVkIGludG8gdGhlIERPTSwgbGVnYWwgbWFuaXB1bGF0aW9ucwot
ICAvLyBhcmUgZG9uZSBvbiB0aGUgRE9NIGVsZW1lbnQuCi0KLSAgVmlldy5yZW9wZW5DbGFzcyh7
Ci0gICAgLyoqCi0gICAgICBHbG9iYWwgdmlld3MgaGFzaAotICAgICAgIEBwcm9wZXJ0eSB2aWV3
cwotICAgICAgQHN0YXRpYwotICAgICAgQHR5cGUgT2JqZWN0Ci0gICAgICBAcHJpdmF0ZQotICAg
ICovCi0gICAgdmlld3M6IHt9Ci0gIH0pOwotCi0gIGV4cG9ydHMuZGVmYXVsdCA9IFZpZXc7Ci0g
IGV4cG9ydHMuVmlld0NvbnRleHRTdXBwb3J0ID0gX2VtYmVyVmlld3NNaXhpbnNWaWV3X2NvbnRl
eHRfc3VwcG9ydC5kZWZhdWx0OwotICBleHBvcnRzLlZpZXdDaGlsZFZpZXdzU3VwcG9ydCA9IF9l
bWJlclZpZXdzTWl4aW5zVmlld19jaGlsZF92aWV3c19zdXBwb3J0LmRlZmF1bHQ7Ci0gIGV4cG9y
dHMuVmlld1N0YXRlU3VwcG9ydCA9IF9lbWJlclZpZXdzTWl4aW5zVmlld19zdGF0ZV9zdXBwb3J0
LmRlZmF1bHQ7Ci0gIGV4cG9ydHMuVGVtcGxhdGVSZW5kZXJpbmdTdXBwb3J0ID0gX2VtYmVyVmll
d3NNaXhpbnNUZW1wbGF0ZV9yZW5kZXJpbmdfc3VwcG9ydC5kZWZhdWx0OwotICBleHBvcnRzLkNs
YXNzTmFtZXNTdXBwb3J0ID0gX2VtYmVyVmlld3NNaXhpbnNDbGFzc19uYW1lc19zdXBwb3J0LmRl
ZmF1bHQ7Ci19KTsKLS8vIGZvciB0aGUgc2lkZSBlZmZlY3Qgb2YgZXh0ZW5kaW5nIEVtYmVyLnJ1
bi5xdWV1ZXMKLWVuaWZlZCgnZW1iZXIvaW5kZXgnLCBbJ2V4cG9ydHMnLCAnZW1iZXItbWV0YWwn
LCAnZW1iZXItcnVudGltZScsICdlbWJlci12aWV3cycsICdlbWJlci1yb3V0aW5nJywgJ2VtYmVy
LWFwcGxpY2F0aW9uJywgJ2VtYmVyLWV4dGVuc2lvbi1zdXBwb3J0JywgJ2VtYmVyLWh0bWxiYXJz
JywgJ2VtYmVyLXJvdXRpbmctaHRtbGJhcnMnLCAnZW1iZXItcm91dGluZy12aWV3cycsICdyZXF1
aXJlJywgJ2VtYmVyLXJ1bnRpbWUvc3lzdGVtL2xhenlfbG9hZCddLCBmdW5jdGlvbiAoZXhwb3J0
cywgX2VtYmVyTWV0YWwsIF9lbWJlclJ1bnRpbWUsIF9lbWJlclZpZXdzLCBfZW1iZXJSb3V0aW5n
LCBfZW1iZXJBcHBsaWNhdGlvbiwgX2VtYmVyRXh0ZW5zaW9uU3VwcG9ydCwgX2VtYmVySHRtbGJh
cnMsIF9lbWJlclJvdXRpbmdIdG1sYmFycywgX2VtYmVyUm91dGluZ1ZpZXdzLCBfcmVxdWlyZSwg
X2VtYmVyUnVudGltZVN5c3RlbUxhenlfbG9hZCkgewotICAvLyByZXF1aXJlIHRoZSBtYWluIGVu
dHJ5IHBvaW50cyBmb3IgZWFjaCBvZiB0aGVzZSBwYWNrYWdlcwotICAvLyB0aGlzIGlzIHNvIHRo
YXQgdGhlIGdsb2JhbCBleHBvcnRzIG9jY3VyIHByb3Blcmx5Ci0gICd1c2Ugc3RyaWN0JzsKLQot
ICBpZiAoX3JlcXVpcmUuaGFzKCdlbWJlci10ZW1wbGF0ZS1jb21waWxlcicpKSB7Ci0gICAgX3Jl
cXVpcmUuZGVmYXVsdCgnZW1iZXItdGVtcGxhdGUtY29tcGlsZXInKTsKLSAgfQotCi0gIC8vIGRv
IHRoaXMgdG8gZW5zdXJlIHRoYXQgRW1iZXIuVGVzdCBpcyBkZWZpbmVkIHByb3Blcmx5IG9uIHRo
ZSBnbG9iYWwKLSAgLy8gaWYgaXQgaXMgcHJlc2VudC4KLSAgaWYgKF9yZXF1aXJlLmhhcygnZW1i
ZXItdGVzdGluZycpKSB7Ci0gICAgX3JlcXVpcmUuZGVmYXVsdCgnZW1iZXItdGVzdGluZycpOwot
ICB9Ci0KLSAgX2VtYmVyUnVudGltZVN5c3RlbUxhenlfbG9hZC5ydW5Mb2FkSG9va3MoJ0VtYmVy
Jyk7Ci0KLSAgLyoqCi0gIEBtb2R1bGUgZW1iZXIKLSAgKi8KLX0pOwotZW5pZmVkKCdodG1sYmFy
cy1ydW50aW1lJywgWydleHBvcnRzJywgJ2h0bWxiYXJzLXJ1bnRpbWUvaG9va3MnLCAnaHRtbGJh
cnMtcnVudGltZS9yZW5kZXInLCAnaHRtbGJhcnMtdXRpbC9tb3JwaC11dGlscycsICdodG1sYmFy
cy11dGlsL3RlbXBsYXRlLXV0aWxzJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfaHRtbGJhcnNSdW50
aW1lSG9va3MsIF9odG1sYmFyc1J1bnRpbWVSZW5kZXIsIF9odG1sYmFyc1V0aWxNb3JwaFV0aWxz
LCBfaHRtbGJhcnNVdGlsVGVtcGxhdGVVdGlscykgewotICAndXNlIHN0cmljdCc7Ci0KLSAgdmFy
IGludGVybmFsID0gewotICAgIGJsb2NrRm9yOiBfaHRtbGJhcnNVdGlsVGVtcGxhdGVVdGlscy5i
bG9ja0ZvciwKLSAgICBtYW51YWxFbGVtZW50OiBfaHRtbGJhcnNSdW50aW1lUmVuZGVyLm1hbnVh
bEVsZW1lbnQsCi0gICAgaG9zdEJsb2NrOiBfaHRtbGJhcnNSdW50aW1lSG9va3MuaG9zdEJsb2Nr
LAotICAgIGNvbnRpbnVlQmxvY2s6IF9odG1sYmFyc1J1bnRpbWVIb29rcy5jb250aW51ZUJsb2Nr
LAotICAgIGhvc3RZaWVsZFdpdGhTaGFkb3dUZW1wbGF0ZTogX2h0bWxiYXJzUnVudGltZUhvb2tz
Lmhvc3RZaWVsZFdpdGhTaGFkb3dUZW1wbGF0ZSwKLSAgICB2aXNpdENoaWxkcmVuOiBfaHRtbGJh
cnNVdGlsTW9ycGhVdGlscy52aXNpdENoaWxkcmVuLAotICAgIHZhbGlkYXRlQ2hpbGRNb3JwaHM6
IF9odG1sYmFyc1V0aWxNb3JwaFV0aWxzLnZhbGlkYXRlQ2hpbGRNb3JwaHMsCi0gICAgY2xlYXJN
b3JwaDogX2h0bWxiYXJzVXRpbFRlbXBsYXRlVXRpbHMuY2xlYXJNb3JwaAotICB9OwotCi0gIGV4
cG9ydHMuaG9va3MgPSBfaHRtbGJhcnNSdW50aW1lSG9va3MuZGVmYXVsdDsKLSAgZXhwb3J0cy5y
ZW5kZXIgPSBfaHRtbGJhcnNSdW50aW1lUmVuZGVyLmRlZmF1bHQ7Ci0gIGV4cG9ydHMuaW50ZXJu
YWwgPSBpbnRlcm5hbDsKLX0pOwotZW5pZmVkKCdodG1sYmFycy1ydW50aW1lL2V4cHJlc3Npb24t
dmlzaXRvcicsIFsnZXhwb3J0cyddLCBmdW5jdGlvbiAoZXhwb3J0cykgewotICAvKioKLSAgICAj
IEV4cHJlc3Npb24gTm9kZXM6Ci0gIAotICAgIFRoZXNlIG5vZGVzIGFyZSBub3QgZGlyZWN0bHkg
cmVzcG9uc2libGUgZm9yIGFueSBwYXJ0IG9mIHRoZSBET00sIGJ1dCBhcmUKLSAgICBldmVudHVh
bGx5IHBhc3NlZCB0byBhIFN0YXRlbWVudCBOb2RlLgotICAKLSAgICAqIGdldAotICAgICogc3Vi
ZXhwcgotICAgICogY29uY2F0Ci0gICovCi0KLSAgJ3VzZSBzdHJpY3QnOwotCi0gIGV4cG9ydHMu
YWNjZXB0UGFyYW1zID0gYWNjZXB0UGFyYW1zOwotICBleHBvcnRzLmFjY2VwdEhhc2ggPSBhY2Nl
cHRIYXNoOwotCi0gIGZ1bmN0aW9uIGFjY2VwdFBhcmFtcyhub2RlcywgZW52LCBzY29wZSkgewot
ICAgIHZhciBhcnJheSA9IFtdOwotCi0gICAgZm9yICh2YXIgaSA9IDAsIGwgPSBub2Rlcy5sZW5n
dGg7IGkgPCBsOyBpKyspIHsKLSAgICAgIGFycmF5LnB1c2goYWNjZXB0RXhwcmVzc2lvbihub2Rl
c1tpXSwgZW52LCBzY29wZSkudmFsdWUpOwotICAgIH0KLQotICAgIHJldHVybiBhcnJheTsKLSAg
fQotCi0gIGZ1bmN0aW9uIGFjY2VwdEhhc2gocGFpcnMsIGVudiwgc2NvcGUpIHsKLSAgICB2YXIg
b2JqZWN0ID0ge307Ci0KLSAgICBmb3IgKHZhciBpID0gMCwgbCA9IHBhaXJzLmxlbmd0aDsgaSA8
IGw7IGkgKz0gMikgewotICAgICAgdmFyIGtleSA9IHBhaXJzW2ldOwotICAgICAgdmFyIHZhbHVl
ID0gcGFpcnNbaSArIDFdOwotICAgICAgb2JqZWN0W2tleV0gPSBhY2NlcHRFeHByZXNzaW9uKHZh
bHVlLCBlbnYsIHNjb3BlKS52YWx1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gb2JqZWN0OwotICB9
Ci0KLSAgZnVuY3Rpb24gYWNjZXB0RXhwcmVzc2lvbihub2RlLCBlbnYsIHNjb3BlKSB7Ci0gICAg
dmFyIHJldCA9IHsgdmFsdWU6IG51bGwgfTsKLQotICAgIC8vIFByaW1pdGl2ZSBsaXRlcmFscyBh
cmUgdW5hbWJpZ3VvdXNseSBub24tYXJyYXkgcmVwcmVzZW50YXRpb25zIG9mCi0gICAgLy8gdGhl
bXNlbHZlcy4KLSAgICBpZiAodHlwZW9mIG5vZGUgIT09ICdvYmplY3QnIHx8IG5vZGUgPT09IG51
bGwpIHsKLSAgICAgIHJldC52YWx1ZSA9IG5vZGU7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJldC52
YWx1ZSA9IGV2YWx1YXRlTm9kZShub2RlLCBlbnYsIHNjb3BlKTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gcmV0OwotICB9Ci0KLSAgZnVuY3Rpb24gZXZhbHVhdGVOb2RlKG5vZGUsIGVudiwgc2NvcGUp
IHsKLSAgICBzd2l0Y2ggKG5vZGVbMF0pIHsKLSAgICAgIC8vIGNhbiBiZSB1c2VkIGJ5IG1hbnVh
bEVsZW1lbnQKLSAgICAgIGNhc2UgJ3ZhbHVlJzoKLSAgICAgICAgcmV0dXJuIG5vZGVbMV07Ci0g
ICAgICBjYXNlICdnZXQnOgotICAgICAgICByZXR1cm4gZXZhbHVhdGVHZXQobm9kZSwgZW52LCBz
Y29wZSk7Ci0gICAgICBjYXNlICdzdWJleHByJzoKLSAgICAgICAgcmV0dXJuIGV2YWx1YXRlU3Vi
ZXhwcihub2RlLCBlbnYsIHNjb3BlKTsKLSAgICAgIGNhc2UgJ2NvbmNhdCc6Ci0gICAgICAgIHJl
dHVybiBldmFsdWF0ZUNvbmNhdChub2RlLCBlbnYsIHNjb3BlKTsKLSAgICB9Ci0gIH0KLQotICBm
dW5jdGlvbiBldmFsdWF0ZUdldChub2RlLCBlbnYsIHNjb3BlKSB7Ci0gICAgdmFyIHBhdGggPSBu
b2RlWzFdOwotCi0gICAgcmV0dXJuIGVudi5ob29rcy5nZXQoZW52LCBzY29wZSwgcGF0aCk7Ci0g
IH0KLQotICBmdW5jdGlvbiBldmFsdWF0ZVN1YmV4cHIobm9kZSwgZW52LCBzY29wZSkgewotICAg
IHZhciBwYXRoID0gbm9kZVsxXTsKLSAgICB2YXIgcmF3UGFyYW1zID0gbm9kZVsyXTsKLSAgICB2
YXIgcmF3SGFzaCA9IG5vZGVbM107Ci0KLSAgICB2YXIgcGFyYW1zID0gYWNjZXB0UGFyYW1zKHJh
d1BhcmFtcywgZW52LCBzY29wZSk7Ci0gICAgdmFyIGhhc2ggPSBhY2NlcHRIYXNoKHJhd0hhc2gs
IGVudiwgc2NvcGUpOwotCi0gICAgcmV0dXJuIGVudi5ob29rcy5zdWJleHByKGVudiwgc2NvcGUs
IHBhdGgsIHBhcmFtcywgaGFzaCk7Ci0gIH0KLQotICBmdW5jdGlvbiBldmFsdWF0ZUNvbmNhdChu
b2RlLCBlbnYsIHNjb3BlKSB7Ci0gICAgdmFyIHJhd1BhcnRzID0gbm9kZVsxXTsKLQotICAgIHZh
ciBwYXJ0cyA9IGFjY2VwdFBhcmFtcyhyYXdQYXJ0cywgZW52LCBzY29wZSk7Ci0KLSAgICByZXR1
cm4gZW52Lmhvb2tzLmNvbmNhdChlbnYsIHBhcnRzKTsKLSAgfQotfSk7Ci1lbmlmZWQoImh0bWxi
YXJzLXJ1bnRpbWUvaG9va3MiLCBbImV4cG9ydHMiLCAiaHRtbGJhcnMtcnVudGltZS9yZW5kZXIi
LCAibW9ycGgtcmFuZ2UvbW9ycGgtbGlzdCIsICJodG1sYmFycy11dGlsL29iamVjdC11dGlscyIs
ICJodG1sYmFycy11dGlsL21vcnBoLXV0aWxzIiwgImh0bWxiYXJzLXV0aWwvdGVtcGxhdGUtdXRp
bHMiXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9odG1sYmFyc1J1bnRpbWVSZW5kZXIsIF9tb3JwaFJh
bmdlTW9ycGhMaXN0LCBfaHRtbGJhcnNVdGlsT2JqZWN0VXRpbHMsIF9odG1sYmFyc1V0aWxNb3Jw
aFV0aWxzLCBfaHRtbGJhcnNVdGlsVGVtcGxhdGVVdGlscykgewotICAidXNlIHN0cmljdCI7Ci0K
LSAgZXhwb3J0cy53cmFwID0gd3JhcDsKLSAgZXhwb3J0cy53cmFwRm9ySGVscGVyID0gd3JhcEZv
ckhlbHBlcjsKLSAgZXhwb3J0cy5jcmVhdGVTY29wZSA9IGNyZWF0ZVNjb3BlOwotICBleHBvcnRz
LmNyZWF0ZUZyZXNoU2NvcGUgPSBjcmVhdGVGcmVzaFNjb3BlOwotICBleHBvcnRzLmJpbmRTaGFk
b3dTY29wZSA9IGJpbmRTaGFkb3dTY29wZTsKLSAgZXhwb3J0cy5jcmVhdGVDaGlsZFNjb3BlID0g
Y3JlYXRlQ2hpbGRTY29wZTsKLSAgZXhwb3J0cy5iaW5kU2VsZiA9IGJpbmRTZWxmOwotICBleHBv
cnRzLnVwZGF0ZVNlbGYgPSB1cGRhdGVTZWxmOwotICBleHBvcnRzLmJpbmRMb2NhbCA9IGJpbmRM
b2NhbDsKLSAgZXhwb3J0cy51cGRhdGVMb2NhbCA9IHVwZGF0ZUxvY2FsOwotICBleHBvcnRzLmJp
bmRCbG9jayA9IGJpbmRCbG9jazsKLSAgZXhwb3J0cy5ibG9jayA9IGJsb2NrOwotICBleHBvcnRz
LmNvbnRpbnVlQmxvY2sgPSBjb250aW51ZUJsb2NrOwotICBleHBvcnRzLmhvc3RCbG9jayA9IGhv
c3RCbG9jazsKLSAgZXhwb3J0cy5oYW5kbGVSZWRpcmVjdCA9IGhhbmRsZVJlZGlyZWN0OwotICBl
eHBvcnRzLmhhbmRsZUtleXdvcmQgPSBoYW5kbGVLZXl3b3JkOwotICBleHBvcnRzLmxpbmtSZW5k
ZXJOb2RlID0gbGlua1JlbmRlck5vZGU7Ci0gIGV4cG9ydHMuaW5saW5lID0gaW5saW5lOwotICBl
eHBvcnRzLmtleXdvcmQgPSBrZXl3b3JkOwotICBleHBvcnRzLmludm9rZUhlbHBlciA9IGludm9r
ZUhlbHBlcjsKLSAgZXhwb3J0cy5jbGFzc2lmeSA9IGNsYXNzaWZ5OwotICBleHBvcnRzLnBhcnRp
YWwgPSBwYXJ0aWFsOwotICBleHBvcnRzLnJhbmdlID0gcmFuZ2U7Ci0gIGV4cG9ydHMuZWxlbWVu
dCA9IGVsZW1lbnQ7Ci0gIGV4cG9ydHMuYXR0cmlidXRlID0gYXR0cmlidXRlOwotICBleHBvcnRz
LnN1YmV4cHIgPSBzdWJleHByOwotICBleHBvcnRzLmdldCA9IGdldDsKLSAgZXhwb3J0cy5nZXRS
b290ID0gZ2V0Um9vdDsKLSAgZXhwb3J0cy5nZXRCbG9jayA9IGdldEJsb2NrOwotICBleHBvcnRz
LmdldENoaWxkID0gZ2V0Q2hpbGQ7Ci0gIGV4cG9ydHMuZ2V0VmFsdWUgPSBnZXRWYWx1ZTsKLSAg
ZXhwb3J0cy5nZXRDZWxsT3JWYWx1ZSA9IGdldENlbGxPclZhbHVlOwotICBleHBvcnRzLmNvbXBv
bmVudCA9IGNvbXBvbmVudDsKLSAgZXhwb3J0cy5jb25jYXQgPSBjb25jYXQ7Ci0gIGV4cG9ydHMu
aGFzSGVscGVyID0gaGFzSGVscGVyOwotICBleHBvcnRzLmxvb2t1cEhlbHBlciA9IGxvb2t1cEhl
bHBlcjsKLSAgZXhwb3J0cy5iaW5kU2NvcGUgPSBiaW5kU2NvcGU7Ci0gIGV4cG9ydHMudXBkYXRl
U2NvcGUgPSB1cGRhdGVTY29wZTsKLQotICAvKioKLSAgICBIVE1MQmFycyBkZWxlZ2F0ZXMgdGhl
IHJ1bnRpbWUgYmVoYXZpb3Igb2YgYSB0ZW1wbGF0ZSB0bwotICAgIGhvb2tzIHByb3ZpZGVkIGJ5
IHRoZSBob3N0IGVudmlyb25tZW50LiBUaGVzZSBob29rcyBleHBsYWluCi0gICAgdGhlIGxleGlj
YWwgZW52aXJvbm1lbnQgb2YgYSBIYW5kbGViYXJzIHRlbXBsYXRlLCB0aGUgaW50ZXJuYWwKLSAg
ICByZXByZXNlbnRhdGlvbiBvZiByZWZlcmVuY2VzLCBhbmQgdGhlIGludGVyYWN0aW9uIGJldHdl
ZW4gYW4KLSAgICBIVE1MQmFycyB0ZW1wbGF0ZSBhbmQgdGhlIERPTSBpdCBpcyBtYW5hZ2luZy4K
LSAgCi0gICAgV2hpbGUgSFRNTEJhcnMgaG9zdCBob29rcyBoYXZlIGFjY2VzcyB0byBhbGwgb2Yg
dGhpcyBpbnRlcm5hbAotICAgIG1hY2hpbmVyeSwgdGVtcGxhdGVzIGFuZCBoZWxwZXJzIGhhdmUg
YWNjZXNzIHRvIHRoZSBhYnN0cmFjdGlvbgotICAgIHByb3ZpZGVkIGJ5IHRoZSBob3N0IGhvb2tz
LgotICAKLSAgICAjIyBUaGUgTGV4aWNhbCBFbnZpcm9ubWVudAotICAKLSAgICBUaGUgZGVmYXVs
dCBsZXhpY2FsIGVudmlyb25tZW50IG9mIGFuIEhUTUxCYXJzIHRlbXBsYXRlIGluY2x1ZGVzOgot
ICAKLSAgICAqIEFueSBsb2NhbCB2YXJpYWJsZXMsIHByb3ZpZGVkIGJ5ICpibG9jayBhcmd1bWVu
dHMqCi0gICAgKiBUaGUgY3VycmVudCB2YWx1ZSBvZiBgc2VsZmAKLSAgCi0gICAgIyMgU2ltcGxl
IE5lc3RpbmcKLSAgCi0gICAgTGV0J3MgbG9vayBhdCBhIHNpbXBsZSB0ZW1wbGF0ZSB3aXRoIGEg
bmVzdGVkIGJsb2NrOgotICAKLSAgICBgYGBoYnMKLSAgICA8aDE+e3t0aXRsZX19PC9oMT4KLSAg
Ci0gICAge3sjaWYgYXV0aG9yfX0KLSAgICAgIDxwIGNsYXNzPSJieWxpbmUiPnt7YXV0aG9yfX08
L3A+Ci0gICAge3svaWZ9fQotICAgIGBgYAotICAKLSAgICBJbiB0aGlzIGNhc2UsIHRoZSBsZXhp
Y2FsIGVudmlyb25tZW50IGF0IHRoZSB0b3AtbGV2ZWwgb2YgdGhlCi0gICAgdGVtcGxhdGUgZG9l
cyBub3QgY2hhbmdlIGluc2lkZSBvZiB0aGUgYGlmYCBibG9jay4gVGhpcyBpcwotICAgIGFjaGll
dmVkIHZpYSBhbiBpbXBsZW1lbnRhdGlvbiBvZiBgaWZgIHRoYXQgbG9va3MgbGlrZSB0aGlzOgot
ICAKLSAgICBgYGBqcwotICAgIHJlZ2lzdGVySGVscGVyKCdpZicsIGZ1bmN0aW9uKHBhcmFtcykg
ewotICAgICAgaWYgKCEhcGFyYW1zWzBdKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLnlpZWxkKCk7
Ci0gICAgICB9Ci0gICAgfSk7Ci0gICAgYGBgCi0gIAotICAgIEEgY2FsbCB0byBgdGhpcy55aWVs
ZGAgaW52b2tlcyB0aGUgY2hpbGQgdGVtcGxhdGUgdXNpbmcgdGhlCi0gICAgY3VycmVudCBsZXhp
Y2FsIGVudmlyb25tZW50LgotICAKLSAgICAjIyBCbG9jayBBcmd1bWVudHMKLSAgCi0gICAgSXQg
aXMgcG9zc2libGUgZm9yIG5lc3RlZCBibG9ja3MgdG8gaW50cm9kdWNlIG5ldyBsb2NhbAotICAg
IHZhcmlhYmxlczoKLSAgCi0gICAgYGBgaGJzCi0gICAge3sjY291bnQtY2FsbHMgYXMgfGl8fX0K
LSAgICA8aDE+e3t0aXRsZX19PC9oMT4KLSAgICA8cD5DYWxsZWQge3tpfX0gdGltZXM8L3A+Ci0g
ICAge3svY291bnR9fQotICAgIGBgYAotICAKLSAgICBJbiB0aGlzIGV4YW1wbGUsIHRoZSBjaGls
ZCBibG9jayBpbmhlcml0cyBpdHMgc3Vycm91bmRpbmcKLSAgICBsZXhpY2FsIGVudmlyb25tZW50
LCBidXQgYXVnbWVudHMgaXQgd2l0aCBhIHNpbmdsZSBuZXcKLSAgICB2YXJpYWJsZSBiaW5kaW5n
LgotICAKLSAgICBUaGUgaW1wbGVtZW50YXRpb24gb2YgYGNvdW50LWNhbGxzYCBzdXBwbGllcyB0
aGUgdmFsdWUgb2YKLSAgICBgaWAsIGJ1dCBkb2VzIG5vdCBvdGhlcndpc2UgYWx0ZXIgdGhlIGVu
dmlyb25tZW50OgotICAKLSAgICBgYGBqcwotICAgIHZhciBjb3VudCA9IDA7Ci0gICAgcmVnaXN0
ZXJIZWxwZXIoJ2NvdW50LWNhbGxzJywgZnVuY3Rpb24oKSB7Ci0gICAgICByZXR1cm4gdGhpcy55
aWVsZChbICsrY291bnQgXSk7Ci0gICAgfSk7Ci0gICAgYGBgCi0gICovCi0KLSAgZnVuY3Rpb24g
d3JhcCh0ZW1wbGF0ZSkgewotICAgIGlmICh0ZW1wbGF0ZSA9PT0gbnVsbCkgewotICAgICAgcmV0
dXJuIG51bGw7Ci0gICAgfQotCi0gICAgcmV0dXJuIHsKLSAgICAgIG1ldGE6IHRlbXBsYXRlLm1l
dGEsCi0gICAgICBhcml0eTogdGVtcGxhdGUuYXJpdHksCi0gICAgICByYXc6IHRlbXBsYXRlLAot
ICAgICAgcmVuZGVyOiBmdW5jdGlvbiAoc2VsZiwgZW52LCBvcHRpb25zLCBibG9ja0FyZ3VtZW50
cykgewotICAgICAgICB2YXIgc2NvcGUgPSBlbnYuaG9va3MuY3JlYXRlRnJlc2hTY29wZSgpOwot
Ci0gICAgICAgIHZhciBjb250ZXh0dWFsRWxlbWVudCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5jb250
ZXh0dWFsRWxlbWVudDsKLSAgICAgICAgdmFyIHJlbmRlck9wdGlvbnMgPSBuZXcgX2h0bWxiYXJz
UnVudGltZVJlbmRlci5SZW5kZXJPcHRpb25zKG51bGwsIHNlbGYsIGJsb2NrQXJndW1lbnRzLCBj
b250ZXh0dWFsRWxlbWVudCk7Ci0KLSAgICAgICAgcmV0dXJuIF9odG1sYmFyc1J1bnRpbWVSZW5k
ZXIuZGVmYXVsdCh0ZW1wbGF0ZSwgZW52LCBzY29wZSwgcmVuZGVyT3B0aW9ucyk7Ci0gICAgICB9
Ci0gICAgfTsKLSAgfQotCi0gIGZ1bmN0aW9uIHdyYXBGb3JIZWxwZXIodGVtcGxhdGUsIGVudiwg
c2NvcGUsIG1vcnBoLCByZW5kZXJTdGF0ZSwgdmlzaXRvcikgewotICAgIGlmICghdGVtcGxhdGUp
IHsKLSAgICAgIHJldHVybiB7fTsKLSAgICB9Ci0KLSAgICB2YXIgeWllbGRBcmdzID0geWllbGRU
ZW1wbGF0ZSh0ZW1wbGF0ZSwgZW52LCBzY29wZSwgbW9ycGgsIHJlbmRlclN0YXRlLCB2aXNpdG9y
KTsKLQotICAgIHJldHVybiB7Ci0gICAgICBtZXRhOiB0ZW1wbGF0ZS5tZXRhLAotICAgICAgYXJp
dHk6IHRlbXBsYXRlLmFyaXR5LAotICAgICAgJ3lpZWxkJzogeWllbGRBcmdzLCAvLyBxdW90ZWQg
c2luY2UgaXQncyBhIHJlc2VydmVkIHdvcmQsIHNlZSBpc3N1ZSAjNDIwCi0gICAgICB5aWVsZEl0
ZW06IHlpZWxkSXRlbSh0ZW1wbGF0ZSwgZW52LCBzY29wZSwgbW9ycGgsIHJlbmRlclN0YXRlLCB2
aXNpdG9yKSwKLSAgICAgIHJhdzogdGVtcGxhdGUsCi0KLSAgICAgIHJlbmRlcjogZnVuY3Rpb24g
KHNlbGYsIGJsb2NrQXJndW1lbnRzKSB7Ci0gICAgICAgIHlpZWxkQXJncyhibG9ja0FyZ3VtZW50
cywgc2VsZik7Ci0gICAgICB9Ci0gICAgfTsKLSAgfQotCi0gIC8vIENhbGxlZCBieSBhIHVzZXIt
bGFuZCBoZWxwZXIgdG8gcmVuZGVyIGEgdGVtcGxhdGUuCi0gIGZ1bmN0aW9uIHlpZWxkVGVtcGxh
dGUodGVtcGxhdGUsIGVudiwgcGFyZW50U2NvcGUsIG1vcnBoLCByZW5kZXJTdGF0ZSwgdmlzaXRv
cikgewotICAgIHJldHVybiBmdW5jdGlvbiAoYmxvY2tBcmd1bWVudHMsIHNlbGYpIHsKLSAgICAg
IC8vIFJlbmRlciBzdGF0ZSBpcyB1c2VkIHRvIHRyYWNrIHRoZSBwcm9ncmVzcyBvZiB0aGUgaGVs
cGVyIChzaW5jZSBpdAotICAgICAgLy8gbWF5IGNhbGwgaW50byB1cyBtdWx0aXBsZSB0aW1lcyku
IEFzIHRoZSB1c2VyLWxhbmQgaGVscGVyIGNhbGxzCi0gICAgICAvLyBpbnRvIGxpYnJhcnkgY29k
ZSwgd2UgdHJhY2sgd2hhdCBuZWVkcyB0byBiZSBjbGVhbmVkIHVwIGFmdGVyIHRoZQotICAgICAg
Ly8gaGVscGVyIGhhcyByZXR1cm5lZC4KLSAgICAgIC8vCi0gICAgICAvLyBIZXJlLCB3ZSByZW1l
bWJlciB0aGF0IGEgdGVtcGxhdGUgaGFzIGJlZW4geWllbGRlZCBhbmQgc28gd2UgZG8gbm90Ci0g
ICAgICAvLyBuZWVkIHRvIHJlbW92ZSB0aGUgcHJldmlvdXMgdGVtcGxhdGUuIChJZiBubyB0ZW1w
bGF0ZSBpcyB5aWVsZGVkCi0gICAgICAvLyB0aGlzIHJlbmRlciBieSB0aGUgaGVscGVyLCB3ZSBh
c3N1bWUgbm90aGluZyBzaG91bGQgYmUgc2hvd24gYW5kCi0gICAgICAvLyByZW1vdmUgYW55IHBy
ZXZpb3VzIHJlbmRlcmVkIHRlbXBsYXRlcy4pCi0gICAgICByZW5kZXJTdGF0ZS5tb3JwaFRvQ2xl
YXIgPSBudWxsOwotCi0gICAgICAvLyBJbiB0aGlzIGNvbmRpdGlvbmFsIGlzIHRydWUsIGl0IG1l
YW5zIHRoYXQgb24gdGhlIHByZXZpb3VzIHJlbmRlcmluZyBwYXNzCi0gICAgICAvLyB0aGUgaGVs
cGVyIHlpZWxkZWQgbXVsdGlwbGUgaXRlbXMgdmlhIGB5aWVsZEl0ZW0oKWAsIGJ1dCB0aGlzIHRp
bWUgdGhleQotICAgICAgLy8gYXJlIHlpZWxkaW5nIGEgc2luZ2xlIHRlbXBsYXRlLiBJbiB0aGF0
IGNhc2UsIHdlIG1hcmsgdGhlIG1vcnBoIGxpc3QgZm9yCi0gICAgICAvLyBjbGVhbnVwIHNvIGl0
IGlzIHJlbW92ZWQgZnJvbSB0aGUgRE9NLgotICAgICAgaWYgKG1vcnBoLm1vcnBoTGlzdCkgewot
ICAgICAgICBfaHRtbGJhcnNVdGlsVGVtcGxhdGVVdGlscy5jbGVhck1vcnBoTGlzdChtb3JwaC5t
b3JwaExpc3QsIG1vcnBoLCBlbnYpOwotICAgICAgICByZW5kZXJTdGF0ZS5tb3JwaExpc3RUb0Ns
ZWFyID0gbnVsbDsKLSAgICAgIH0KLQotICAgICAgdmFyIHNjb3BlID0gcGFyZW50U2NvcGU7Ci0K
LSAgICAgIGlmIChtb3JwaC5sYXN0WWllbGRlZCAmJiBpc1N0YWJsZVRlbXBsYXRlKHRlbXBsYXRl
LCBtb3JwaC5sYXN0WWllbGRlZCkpIHsKLSAgICAgICAgcmV0dXJuIG1vcnBoLmxhc3RSZXN1bHQu
cmV2YWxpZGF0ZVdpdGgoZW52LCB1bmRlZmluZWQsIHNlbGYsIGJsb2NrQXJndW1lbnRzLCB2aXNp
dG9yKTsKLSAgICAgIH0KLQotICAgICAgLy8gQ2hlY2sgdG8gbWFrZSBzdXJlIHRoYXQgd2UgYWN0
dWFsbHkgKipuZWVkKiogYSBuZXcgc2NvcGUsIGFuZCBjYW4ndAotICAgICAgLy8gc2hhcmUgdGhl
IHBhcmVudCBzY29wZS4gTm90ZSB0aGF0IHdlIG5lZWQgdG8gbW92ZSB0aGlzIGNoZWNrIGludG8K
LSAgICAgIC8vIGEgaG9zdCBob29rLCBiZWNhdXNlIHRoZSBob3N0J3Mgbm90aW9uIG9mIHNjb3Bl
IG1heSByZXF1aXJlIGEgbmV3Ci0gICAgICAvLyBzY29wZSBpbiBtb3JlIGNhc2VzIHRoYW4gdGhl
IG9uZXMgd2UgY2FuIGRldGVybWluZSBzdGF0aWNhbGx5LgotICAgICAgaWYgKHNlbGYgIT09IHVu
ZGVmaW5lZCB8fCBwYXJlbnRTY29wZSA9PT0gbnVsbCB8fCB0ZW1wbGF0ZS5hcml0eSkgewotICAg
ICAgICBzY29wZSA9IGVudi5ob29rcy5jcmVhdGVDaGlsZFNjb3BlKHBhcmVudFNjb3BlKTsKLSAg
ICAgIH0KLQotICAgICAgbW9ycGgubGFzdFlpZWxkZWQgPSB7IHNlbGY6IHNlbGYsIHRlbXBsYXRl
OiB0ZW1wbGF0ZSwgc2hhZG93VGVtcGxhdGU6IG51bGwgfTsKLQotICAgICAgLy8gUmVuZGVyIHRo
ZSB0ZW1wbGF0ZSB0aGF0IHdhcyBzZWxlY3RlZCBieSB0aGUgaGVscGVyCi0gICAgICB2YXIgcmVu
ZGVyT3B0aW9ucyA9IG5ldyBfaHRtbGJhcnNSdW50aW1lUmVuZGVyLlJlbmRlck9wdGlvbnMobW9y
cGgsIHNlbGYsIGJsb2NrQXJndW1lbnRzKTsKLSAgICAgIF9odG1sYmFyc1J1bnRpbWVSZW5kZXIu
ZGVmYXVsdCh0ZW1wbGF0ZSwgZW52LCBzY29wZSwgcmVuZGVyT3B0aW9ucyk7Ci0gICAgfTsKLSAg
fQotCi0gIGZ1bmN0aW9uIHlpZWxkSXRlbSh0ZW1wbGF0ZSwgZW52LCBwYXJlbnRTY29wZSwgbW9y
cGgsIHJlbmRlclN0YXRlLCB2aXNpdG9yKSB7Ci0gICAgLy8gSW5pdGlhbGl6ZSBzdGF0ZSB0aGF0
IHRyYWNrcyBtdWx0aXBsZSBpdGVtcyBiZWluZwotICAgIC8vIHlpZWxkZWQgaW4uCi0gICAgdmFy
IGN1cnJlbnRNb3JwaCA9IG51bGw7Ci0KLSAgICAvLyBDYW5kaWRhdGUgbW9ycGhzIGZvciBkZWxl
dGlvbi4KLSAgICB2YXIgY2FuZGlkYXRlcyA9IHt9OwotCi0gICAgLy8gUmV1c2UgZXhpc3Rpbmcg
TW9ycGhMaXN0IGlmIHRoaXMgaXMgbm90IGEgZmlyc3QtdGltZQotICAgIC8vIHJlbmRlci4KLSAg
ICB2YXIgbW9ycGhMaXN0ID0gbW9ycGgubW9ycGhMaXN0OwotICAgIGlmIChtb3JwaExpc3QpIHsK
LSAgICAgIGN1cnJlbnRNb3JwaCA9IG1vcnBoTGlzdC5maXJzdENoaWxkTW9ycGg7Ci0gICAgfQot
Ci0gICAgLy8gQWR2YW5jZXMgdGhlIGN1cnJlbnRNb3JwaCBwb2ludGVyIHRvIHRoZSBtb3JwaCBp
biB0aGUgcHJldmlvdXNseS1yZW5kZXJlZAotICAgIC8vIGxpc3QgdGhhdCBtYXRjaGVzIHRoZSB5
aWVsZGVkIGtleS4gV2hpbGUgZG9pbmcgc28sIGl0IG1hcmtzIGFueSBtb3JwaHMKLSAgICAvLyB0
aGF0IGl0IGFkdmFuY2VzIHBhc3QgYXMgY2FuZGlkYXRlcyBmb3IgZGVsZXRpb24uIEFzc3VtaW5n
IHRob3NlIG1vcnBocwotICAgIC8vIGFyZSBub3QgeWllbGRlZCBpbiBsYXRlciwgdGhleSB3aWxs
IGJlIHJlbW92ZWQgaW4gdGhlIHBydW5lIHN0ZXAgZHVyaW5nCi0gICAgLy8gY2xlYW51cC4KLSAg
ICAvLyBOb3RlIHRoYXQgdGhpcyBoZWxwZXIgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IHRoZSBtb3Jw
aCBiZWluZyBzZWVrZWQgdG8gaXMKLSAgICAvLyBndWFyYW50ZWVkIHRvIGV4aXN0IGluIHRoZSBw
cmV2aW91cyBNb3JwaExpc3Q7IGlmIHRoaXMgaXMgY2FsbGVkIGFuZCB0aGUKLSAgICAvLyBtb3Jw
aCBkb2VzIG5vdCBleGlzdCwgaXQgd2lsbCByZXN1bHQgaW4gYW4gaW5maW5pdGUgbG9vcAotICAg
IGZ1bmN0aW9uIGFkdmFuY2VUb0tleShrZXkpIHsKLSAgICAgIHZhciBzZWVrID0gY3VycmVudE1v
cnBoOwotCi0gICAgICB3aGlsZSAoc2Vlay5rZXkgIT09IGtleSkgewotICAgICAgICBjYW5kaWRh
dGVzW3NlZWsua2V5XSA9IHNlZWs7Ci0gICAgICAgIHNlZWsgPSBzZWVrLm5leHRNb3JwaDsKLSAg
ICAgIH0KLQotICAgICAgY3VycmVudE1vcnBoID0gc2Vlay5uZXh0TW9ycGg7Ci0gICAgICByZXR1
cm4gc2VlazsKLSAgICB9Ci0KLSAgICByZXR1cm4gZnVuY3Rpb24gKF9rZXksIGJsb2NrQXJndW1l
bnRzLCBzZWxmKSB7Ci0gICAgICBpZiAodHlwZW9mIF9rZXkgIT09ICdzdHJpbmcnKSB7Ci0gICAg
ICAgIHRocm93IG5ldyBFcnJvcigiWW91IG11c3QgcHJvdmlkZSBhIHN0cmluZyBrZXkgd2hlbiBj
YWxsaW5nIGB5aWVsZEl0ZW1gOyB5b3UgcHJvdmlkZWQgIiArIF9rZXkpOwotICAgICAgfQotCi0g
ICAgICAvLyBBdCBsZWFzdCBvbmUgaXRlbSBoYXMgYmVlbiB5aWVsZGVkLCBzbyB3ZSBkbyBub3Qg
d2hvbGVzYWxlCi0gICAgICAvLyBjbGVhciB0aGUgbGFzdCBNb3JwaExpc3QgYnV0IGluc3RlYWQg
YXBwbHkgYSBwcnVuZSBvcGVyYXRpb24uCi0gICAgICByZW5kZXJTdGF0ZS5tb3JwaExpc3RUb0Ns
ZWFyID0gbnVsbDsKLSAgICAgIG1vcnBoLmxhc3RZaWVsZGVkID0gbnVsbDsKLQotICAgICAgdmFy
IG1vcnBoTGlzdCwgbW9ycGhNYXA7Ci0KLSAgICAgIGlmICghbW9ycGgubW9ycGhMaXN0KSB7Ci0g
ICAgICAgIG1vcnBoLm1vcnBoTGlzdCA9IG5ldyBfbW9ycGhSYW5nZU1vcnBoTGlzdC5kZWZhdWx0
KCk7Ci0gICAgICAgIG1vcnBoLm1vcnBoTWFwID0ge307Ci0gICAgICAgIG1vcnBoLnNldE1vcnBo
TGlzdChtb3JwaC5tb3JwaExpc3QpOwotICAgICAgfQotCi0gICAgICBtb3JwaExpc3QgPSBtb3Jw
aC5tb3JwaExpc3Q7Ci0gICAgICBtb3JwaE1hcCA9IG1vcnBoLm1vcnBoTWFwOwotCi0gICAgICAv
LyBBIG1hcCBvZiBtb3JwaHMgdGhhdCBoYXZlIGJlZW4geWllbGRlZCBpbiBvbiB0aGlzCi0gICAg
ICAvLyByZW5kZXJpbmcgcGFzcy4gQW55IG1vcnBocyB0aGF0IGRvIG5vdCBtYWtlIGl0IGludG8K
LSAgICAgIC8vIHRoaXMgbGlzdCB3aWxsIGJlIHBydW5lZCBmcm9tIHRoZSBNb3JwaExpc3QgZHVy
aW5nIHRoZSBjbGVhbnVwCi0gICAgICAvLyBwcm9jZXNzLgotICAgICAgdmFyIGhhbmRsZWRNb3Jw
aHMgPSByZW5kZXJTdGF0ZS5oYW5kbGVkTW9ycGhzOwotICAgICAgdmFyIGtleSA9IHVuZGVmaW5l
ZDsKLQotICAgICAgaWYgKF9rZXkgaW4gaGFuZGxlZE1vcnBocykgewotICAgICAgICAvLyBJbiB0
aGlzIGJyYW5jaCB3ZSBhcmUgZGVhbGluZyB3aXRoIGEgZHVwbGljYXRlIGtleS4gVGhlIHN0cmF0
ZWd5Ci0gICAgICAgIC8vIGlzIHRvIHRha2UgdGhlIG9yaWdpbmFsIGtleSBhbmQgYXBwZW5kIGEg
Y291bnRlciB0byBpdCB0aGF0IGlzCi0gICAgICAgIC8vIGluY3JlbWVudGVkIGV2ZXJ5IHRpbWUg
dGhlIGtleSBpcyByZXVzZWQuIEluIG9yZGVyIHRvIGdyZWF0bHkKLSAgICAgICAgLy8gcmVkdWNl
IHRoZSBjaGFuY2Ugb2YgY29sbGlkaW5nIHdpdGggYW5vdGhlciB2YWxpZCBrZXkgd2UgYWxzbyBh
ZGQKLSAgICAgICAgLy8gYW4gZXh0cmEgc3RyaW5nICItLXo4bVMyaHZEVzBBLS0iIHRvIHRoZSBu
ZXcga2V5LgotICAgICAgICB2YXIgY29sbGlzaW9ucyA9IHJlbmRlclN0YXRlLmNvbGxpc2lvbnM7
Ci0gICAgICAgIGlmIChjb2xsaXNpb25zID09PSB1bmRlZmluZWQpIHsKLSAgICAgICAgICBjb2xs
aXNpb25zID0gcmVuZGVyU3RhdGUuY29sbGlzaW9ucyA9IHt9OwotICAgICAgICB9Ci0gICAgICAg
IHZhciBjb3VudCA9IGNvbGxpc2lvbnNbX2tleV0gfCAwOwotICAgICAgICBjb2xsaXNpb25zW19r
ZXldID0gKytjb3VudDsKLQotICAgICAgICBrZXkgPSBfa2V5ICsgJy0tejhtUzJodkRXMEEtLScg
KyBjb3VudDsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGtleSA9IF9rZXk7Ci0gICAgICB9Ci0K
LSAgICAgIGlmIChjdXJyZW50TW9ycGggJiYgY3VycmVudE1vcnBoLmtleSA9PT0ga2V5KSB7Ci0g
ICAgICAgIHlpZWxkVGVtcGxhdGUodGVtcGxhdGUsIGVudiwgcGFyZW50U2NvcGUsIGN1cnJlbnRN
b3JwaCwgcmVuZGVyU3RhdGUsIHZpc2l0b3IpKGJsb2NrQXJndW1lbnRzLCBzZWxmKTsKLSAgICAg
ICAgY3VycmVudE1vcnBoID0gY3VycmVudE1vcnBoLm5leHRNb3JwaDsKLSAgICAgICAgaGFuZGxl
ZE1vcnBoc1trZXldID0gY3VycmVudE1vcnBoOwotICAgICAgfSBlbHNlIGlmIChtb3JwaE1hcFtr
ZXldICE9PSB1bmRlZmluZWQpIHsKLSAgICAgICAgdmFyIGZvdW5kTW9ycGggPSBtb3JwaE1hcFtr
ZXldOwotCi0gICAgICAgIGlmIChrZXkgaW4gY2FuZGlkYXRlcykgewotICAgICAgICAgIC8vIElm
IHdlIGFscmVhZHkgc2F3IHRoaXMgbW9ycGgsIG1vdmUgaXQgZm9yd2FyZCB0byB0aGlzIHBvc2l0
aW9uCi0gICAgICAgICAgbW9ycGhMaXN0Lmluc2VydEJlZm9yZU1vcnBoKGZvdW5kTW9ycGgsIGN1
cnJlbnRNb3JwaCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgLy8gT3RoZXJ3aXNlLCBt
b3ZlIHRoZSBwb2ludGVyIGZvcndhcmQgdG8gdGhlIGV4aXN0aW5nIG1vcnBoIGZvciB0aGlzIGtl
eQotICAgICAgICAgIGFkdmFuY2VUb0tleShrZXkpOwotICAgICAgICB9Ci0KLSAgICAgICAgaGFu
ZGxlZE1vcnBoc1tmb3VuZE1vcnBoLmtleV0gPSBmb3VuZE1vcnBoOwotICAgICAgICB5aWVsZFRl
bXBsYXRlKHRlbXBsYXRlLCBlbnYsIHBhcmVudFNjb3BlLCBmb3VuZE1vcnBoLCByZW5kZXJTdGF0
ZSwgdmlzaXRvcikoYmxvY2tBcmd1bWVudHMsIHNlbGYpOwotICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgdmFyIGNoaWxkTW9ycGggPSBfaHRtbGJhcnNSdW50aW1lUmVuZGVyLmNyZWF0ZUNoaWxkTW9y
cGgoZW52LmRvbSwgbW9ycGgpOwotICAgICAgICBjaGlsZE1vcnBoLmtleSA9IGtleTsKLSAgICAg
ICAgbW9ycGhNYXBba2V5XSA9IGhhbmRsZWRNb3JwaHNba2V5XSA9IGNoaWxkTW9ycGg7Ci0gICAg
ICAgIG1vcnBoTGlzdC5pbnNlcnRCZWZvcmVNb3JwaChjaGlsZE1vcnBoLCBjdXJyZW50TW9ycGgp
OwotICAgICAgICB5aWVsZFRlbXBsYXRlKHRlbXBsYXRlLCBlbnYsIHBhcmVudFNjb3BlLCBjaGls
ZE1vcnBoLCByZW5kZXJTdGF0ZSwgdmlzaXRvcikoYmxvY2tBcmd1bWVudHMsIHNlbGYpOwotICAg
ICAgfQotCi0gICAgICByZW5kZXJTdGF0ZS5tb3JwaExpc3RUb1BydW5lID0gbW9ycGhMaXN0Owot
ICAgICAgbW9ycGguY2hpbGROb2RlcyA9IG51bGw7Ci0gICAgfTsKLSAgfQotCi0gIGZ1bmN0aW9u
IGlzU3RhYmxlVGVtcGxhdGUodGVtcGxhdGUsIGxhc3RZaWVsZGVkKSB7Ci0gICAgcmV0dXJuICFs
YXN0WWllbGRlZC5zaGFkb3dUZW1wbGF0ZSAmJiB0ZW1wbGF0ZSA9PT0gbGFzdFlpZWxkZWQudGVt
cGxhdGU7Ci0gIH0KLSAgZnVuY3Rpb24gb3B0aW9uc0Zvcih0ZW1wbGF0ZSwgaW52ZXJzZSwgZW52
LCBzY29wZSwgbW9ycGgsIHZpc2l0b3IpIHsKLSAgICAvLyBJZiB0aGVyZSB3YXMgYSB0ZW1wbGF0
ZSB5aWVsZGVkIGxhc3QgdGltZSwgc2V0IG1vcnBoVG9DbGVhciBzbyBpdCB3aWxsIGJlIGNsZWFy
ZWQKLSAgICAvLyBpZiBubyB0ZW1wbGF0ZSBpcyB5aWVsZGVkIG9uIHRoaXMgcmVuZGVyLgotICAg
IHZhciBtb3JwaFRvQ2xlYXIgPSBtb3JwaC5sYXN0UmVzdWx0ID8gbW9ycGggOiBudWxsOwotICAg
IHZhciByZW5kZXJTdGF0ZSA9IG5ldyBfaHRtbGJhcnNVdGlsVGVtcGxhdGVVdGlscy5SZW5kZXJT
dGF0ZShtb3JwaFRvQ2xlYXIsIG1vcnBoLm1vcnBoTGlzdCB8fCBudWxsKTsKLQotICAgIHJldHVy
biB7Ci0gICAgICB0ZW1wbGF0ZXM6IHsKLSAgICAgICAgdGVtcGxhdGU6IHdyYXBGb3JIZWxwZXIo
dGVtcGxhdGUsIGVudiwgc2NvcGUsIG1vcnBoLCByZW5kZXJTdGF0ZSwgdmlzaXRvciksCi0gICAg
ICAgIGludmVyc2U6IHdyYXBGb3JIZWxwZXIoaW52ZXJzZSwgZW52LCBzY29wZSwgbW9ycGgsIHJl
bmRlclN0YXRlLCB2aXNpdG9yKQotICAgICAgfSwKLSAgICAgIHJlbmRlclN0YXRlOiByZW5kZXJT
dGF0ZQotICAgIH07Ci0gIH0KLQotICBmdW5jdGlvbiB0aGlzRm9yKG9wdGlvbnMpIHsKLSAgICBy
ZXR1cm4gewotICAgICAgYXJpdHk6IG9wdGlvbnMudGVtcGxhdGUuYXJpdHksCi0gICAgICAneWll
bGQnOiBvcHRpb25zLnRlbXBsYXRlLnlpZWxkLCAvLyBxdW90ZWQgc2luY2UgaXQncyBhIHJlc2Vy
dmVkIHdvcmQsIHNlZSBpc3N1ZSAjNDIwCi0gICAgICB5aWVsZEl0ZW06IG9wdGlvbnMudGVtcGxh
dGUueWllbGRJdGVtLAotICAgICAgeWllbGRJbjogb3B0aW9ucy50ZW1wbGF0ZS55aWVsZEluCi0g
ICAgfTsKLSAgfQotCi0gIC8qKgotICAgIEhvc3QgSG9vazogY3JlYXRlU2NvcGUKLSAgCi0gICAg
QHBhcmFtIHtTY29wZT99IHBhcmVudFNjb3BlCi0gICAgQHJldHVybiBTY29wZQotICAKLSAgICBD
b3JyZXNwb25kcyB0byBlbnRlcmluZyBhIG5ldyBIVE1MQmFycyBibG9jay4KLSAgCi0gICAgVGhp
cyBob29rIGlzIGludm9rZWQgd2hlbiBhIGJsb2NrIGlzIGVudGVyZWQgd2l0aAotICAgIGEgbmV3
IGBzZWxmYCBvciBhZGRpdGlvbmFsIGxvY2FsIHZhcmlhYmxlcy4KLSAgCi0gICAgV2hlbiBpbnZv
a2VkIGZvciBhIHRvcC1sZXZlbCB0ZW1wbGF0ZSwgdGhlCi0gICAgYHBhcmVudFNjb3BlYCBpcyBg
bnVsbGAsIGFuZCB0aGlzIGhvb2sgc2hvdWxkIHJldHVybgotICAgIGEgZnJlc2ggU2NvcGUuCi0g
IAotICAgIFdoZW4gaW52b2tlZCBmb3IgYSBjaGlsZCB0ZW1wbGF0ZSwgdGhlIGBwYXJlbnRTY29w
ZWAKLSAgICBpcyB0aGUgc2NvcGUgZm9yIHRoZSBwYXJlbnQgZW52aXJvbm1lbnQuCi0gIAotICAg
IE5vdGUgdGhhdCB0aGUgYFNjb3BlYCBpcyBhbiBvcGFxdWUgdmFsdWUgdGhhdCBpcwotICAgIHBh
c3NlZCB0byBvdGhlciBob3N0IGhvb2tzLiBGb3IgZXhhbXBsZSwgdGhlIGBnZXRgCi0gICAgaG9v
ayB1c2VzIHRoZSBzY29wZSB0byByZXRyaWV2ZSBhIHZhbHVlIGZvciBhIGdpdmVuCi0gICAgc2Nv
cGUgYW5kIHZhcmlhYmxlIG5hbWUuCi0gICovCi0KLSAgZnVuY3Rpb24gY3JlYXRlU2NvcGUoZW52
LCBwYXJlbnRTY29wZSkgewotICAgIGlmIChwYXJlbnRTY29wZSkgewotICAgICAgcmV0dXJuIGVu
di5ob29rcy5jcmVhdGVDaGlsZFNjb3BlKHBhcmVudFNjb3BlKTsKLSAgICB9IGVsc2UgewotICAg
ICAgcmV0dXJuIGVudi5ob29rcy5jcmVhdGVGcmVzaFNjb3BlKCk7Ci0gICAgfQotICB9Ci0KLSAg
ZnVuY3Rpb24gY3JlYXRlRnJlc2hTY29wZSgpIHsKLSAgICAvLyBiZWNhdXNlIGBpbmAgY2hlY2tz
IGhhdmUgdW5wcmVkaWN0YWJsZSBwZXJmb3JtYW5jZSwga2VlcCBhCi0gICAgLy8gc2VwYXJhdGUg
ZGljdGlvbmFyeSB0byB0cmFjayB3aGV0aGVyIGEgbG9jYWwgd2FzIGJvdW5kLgotICAgIC8vIFNl
ZSBgYmluZExvY2FsYCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KLSAgICByZXR1cm4geyBzZWxmOiBu
dWxsLCBibG9ja3M6IHt9LCBsb2NhbHM6IHt9LCBsb2NhbFByZXNlbnQ6IHt9IH07Ci0gIH0KLQot
ICAvKioKLSAgICBIb3N0IEhvb2s6IGJpbmRTaGFkb3dTY29wZQotICAKLSAgICBAcGFyYW0ge1Nj
b3BlP30gcGFyZW50U2NvcGUKLSAgICBAcmV0dXJuIFNjb3BlCi0gIAotICAgIENvcnJlc3BvbmRz
IHRvIHJlbmRlcmluZyBhIG5ldyB0ZW1wbGF0ZSBpbnRvIGFuIGV4aXN0aW5nCi0gICAgcmVuZGVy
IHRyZWUsIGJ1dCB3aXRoIGEgbmV3IHRvcC1sZXZlbCBsZXhpY2FsIHNjb3BlLiBUaGlzCi0gICAg
dGVtcGxhdGUgaXMgY2FsbGVkIHRoZSAic2hhZG93IHJvb3QiLgotICAKLSAgICBJZiBhIHNoYWRv
dyB0ZW1wbGF0ZSBpbnZva2VzIGB7e3lpZWxkfX1gLCBpdCB3aWxsIHJlbmRlcgotICAgIHRoZSBi
bG9jayBwcm92aWRlZCB0byB0aGUgc2hhZG93IHJvb3QgaW4gdGhlIG9yaWdpbmFsCi0gICAgbGV4
aWNhbCBzY29wZS4KLSAgCi0gICAgYGBgaGJzCi0gICAge3shLS0gcG9zdCB0ZW1wbGF0ZSAtLX19
Ci0gICAgPHA+e3twcm9wcy50aXRsZX19PC9wPgotICAgIHt7eWllbGR9fQotICAKLSAgICB7eyEt
LSBibG9nIHRlbXBsYXRlIC0tfX0KLSAgICB7eyNwb3N0IHRpdGxlPSJIZWxsbyB3b3JsZCJ9fQot
ICAgICAgPHA+Ynkge3tieWxpbmV9fTwvcD4KLSAgICAgIDxhcnRpY2xlPlRoaXMgaXMgbXkgZmly
c3QgcG9zdDwvYXJ0aWNsZT4KLSAgICB7ey9wb3N0fX0KLSAgCi0gICAge3sjcG9zdCB0aXRsZT0i
R29vZGJ5ZSB3b3JsZCJ9fQotICAgICAgPHA+Ynkge3tieWxpbmV9fTwvcD4KLSAgICAgIDxhcnRp
Y2xlPlRoaXMgaXMgbXkgbGFzdCBwb3N0PC9hcnRpY2xlPgotICAgIHt7L3Bvc3R9fQotICAgIGBg
YAotICAKLSAgICBgYGBqcwotICAgIGhlbHBlcnMucG9zdCA9IGZ1bmN0aW9uKHBhcmFtcywgaGFz
aCwgb3B0aW9ucykgewotICAgICAgb3B0aW9ucy50ZW1wbGF0ZS55aWVsZEluKHBvc3RUZW1wbGF0
ZSwgeyBwcm9wczogaGFzaCB9KTsKLSAgICB9OwotICAKLSAgICBibG9nLnJlbmRlcih7IGJ5bGlu
ZTogIlllaHVkYSBLYXR6IiB9KTsKLSAgICBgYGAKLSAgCi0gICAgUHJvZHVjZXM6Ci0gIAotICAg
IGBgYGh0bWwKLSAgICA8cD5IZWxsbyB3b3JsZDwvcD4KLSAgICA8cD5ieSBZZWh1ZGEgS2F0ejwv
cD4KLSAgICA8YXJ0aWNsZT5UaGlzIGlzIG15IGZpcnN0IHBvc3Q8L2FydGljbGU+Ci0gIAotICAg
IDxwPkdvb2RieWUgd29ybGQ8L3A+Ci0gICAgPHA+YnkgWWVodWRhIEthdHo8L3A+Ci0gICAgPGFy
dGljbGU+VGhpcyBpcyBteSBsYXN0IHBvc3Q8L2FydGljbGU+Ci0gICAgYGBgCi0gIAotICAgIElu
IHNob3J0LCBgeWllbGRJbmAgY3JlYXRlcyBhIG5ldyB0b3AtbGV2ZWwgc2NvcGUgZm9yIHRoZQot
ICAgIHByb3ZpZGVkIHRlbXBsYXRlIGFuZCByZW5kZXJzIGl0LCBtYWtpbmcgdGhlIG9yaWdpbmFs
IGJsb2NrCi0gICAgYXZhaWxhYmxlIHRvIGB7e3lpZWxkfX1gIGluIHRoYXQgdGVtcGxhdGUuCi0g
ICovCi0KLSAgZnVuY3Rpb24gYmluZFNoYWRvd1Njb3BlKGVudiAvKiwgcGFyZW50U2NvcGUsIHNo
YWRvd1Njb3BlICovKSB7Ci0gICAgcmV0dXJuIGVudi5ob29rcy5jcmVhdGVGcmVzaFNjb3BlKCk7
Ci0gIH0KLQotICBmdW5jdGlvbiBjcmVhdGVDaGlsZFNjb3BlKHBhcmVudCkgewotICAgIHZhciBz
Y29wZSA9IE9iamVjdC5jcmVhdGUocGFyZW50KTsKLSAgICBzY29wZS5sb2NhbHMgPSBPYmplY3Qu
Y3JlYXRlKHBhcmVudC5sb2NhbHMpOwotICAgIHNjb3BlLmxvY2FsUHJlc2VudCA9IE9iamVjdC5j
cmVhdGUocGFyZW50LmxvY2FsUHJlc2VudCk7Ci0gICAgc2NvcGUuYmxvY2tzID0gT2JqZWN0LmNy
ZWF0ZShwYXJlbnQuYmxvY2tzKTsKLSAgICByZXR1cm4gc2NvcGU7Ci0gIH0KLQotICAvKioKLSAg
ICBIb3N0IEhvb2s6IGJpbmRTZWxmCi0gIAotICAgIEBwYXJhbSB7U2NvcGV9IHNjb3BlCi0gICAg
QHBhcmFtIHthbnl9IHNlbGYKLSAgCi0gICAgQ29ycmVzcG9uZHMgdG8gZW50ZXJpbmcgYSB0ZW1w
bGF0ZS4KLSAgCi0gICAgVGhpcyBob29rIGlzIGludm9rZWQgd2hlbiB0aGUgYHNlbGZgIHZhbHVl
IGZvciBhIHNjb3BlIGlzIHJlYWR5IHRvIGJlIGJvdW5kLgotICAKLSAgICBUaGUgaG9zdCBtdXN0
IGVuc3VyZSB0aGF0IGNoaWxkIHNjb3BlcyByZWZsZWN0IHRoZSBjaGFuZ2UgdG8gdGhlIGBzZWxm
YCBpbgotICAgIGZ1dHVyZSBjYWxscyB0byB0aGUgYGdldGAgaG9vay4KLSAgKi8KLQotICBmdW5j
dGlvbiBiaW5kU2VsZihlbnYsIHNjb3BlLCBzZWxmKSB7Ci0gICAgc2NvcGUuc2VsZiA9IHNlbGY7
Ci0gIH0KLQotICBmdW5jdGlvbiB1cGRhdGVTZWxmKGVudiwgc2NvcGUsIHNlbGYpIHsKLSAgICBl
bnYuaG9va3MuYmluZFNlbGYoZW52LCBzY29wZSwgc2VsZik7Ci0gIH0KLQotICAvKioKLSAgICBI
b3N0IEhvb2s6IGJpbmRMb2NhbAotICAKLSAgICBAcGFyYW0ge0Vudmlyb25tZW50fSBlbnYKLSAg
ICBAcGFyYW0ge1Njb3BlfSBzY29wZQotICAgIEBwYXJhbSB7U3RyaW5nfSBuYW1lCi0gICAgQHBh
cmFtIHthbnl9IHZhbHVlCi0gIAotICAgIENvcnJlc3BvbmRzIHRvIGVudGVyaW5nIGEgdGVtcGxh
dGUgd2l0aCBibG9jayBhcmd1bWVudHMuCi0gIAotICAgIFRoaXMgaG9vayBpcyBpbnZva2VkIHdo
ZW4gYSBsb2NhbCB2YXJpYWJsZSBmb3IgYSBzY29wZSBoYXMgYmVlbiBwcm92aWRlZC4KLSAgCi0g
ICAgVGhlIGhvc3QgbXVzdCBlbnN1cmUgdGhhdCBjaGlsZCBzY29wZXMgcmVmbGVjdCB0aGUgY2hh
bmdlIGluIGZ1dHVyZSBjYWxscwotICAgIHRvIHRoZSBgZ2V0YCBob29rLgotICAqLwotCi0gIGZ1
bmN0aW9uIGJpbmRMb2NhbChlbnYsIHNjb3BlLCBuYW1lLCB2YWx1ZSkgewotICAgIHNjb3BlLmxv
Y2FsUHJlc2VudFtuYW1lXSA9IHRydWU7Ci0gICAgc2NvcGUubG9jYWxzW25hbWVdID0gdmFsdWU7
Ci0gIH0KLQotICBmdW5jdGlvbiB1cGRhdGVMb2NhbChlbnYsIHNjb3BlLCBuYW1lLCB2YWx1ZSkg
ewotICAgIGVudi5ob29rcy5iaW5kTG9jYWwoZW52LCBzY29wZSwgbmFtZSwgdmFsdWUpOwotICB9
Ci0KLSAgLyoqCi0gICAgSG9zdCBIb29rOiBiaW5kQmxvY2sKLSAgCi0gICAgQHBhcmFtIHtFbnZp
cm9ubWVudH0gZW52Ci0gICAgQHBhcmFtIHtTY29wZX0gc2NvcGUKLSAgICBAcGFyYW0ge0Z1bmN0
aW9ufSBibG9jawotICAKLSAgICBDb3JyZXNwb25kcyB0byBlbnRlcmluZyBhIHNoYWRvdyB0ZW1w
bGF0ZSB0aGF0IHdhcyBpbnZva2VkIGJ5IGEgYmxvY2sgaGVscGVyIHdpdGgKLSAgICBgeWllbGRJ
bmAuCi0gIAotICAgIFRoaXMgaG9vayBpcyBpbnZva2VkIHdpdGggYW4gb3BhcXVlIGJsb2NrIHRo
YXQgd2lsbCBiZSBwYXNzZWQgYWxvbmcKLSAgICB0byB0aGUgc2hhZG93IHRlbXBsYXRlLCBhbmQg
aW5zZXJ0ZWQgaW50byB0aGUgc2hhZG93IHRlbXBsYXRlIHdoZW4KLSAgICBge3t5aWVsZH19YCBp
cyB1c2VkLiBPcHRpb25hbGx5IHByb3ZpZGUgYSBub24tZGVmYXVsdCBibG9jayBuYW1lCi0gICAg
dGhhdCBjYW4gYmUgdGFyZ2V0ZWQgYnkgYHt7eWllbGQgdG89YmxvY2tOYW1lfX1gLgotICAqLwot
Ci0gIGZ1bmN0aW9uIGJpbmRCbG9jayhlbnYsIHNjb3BlLCBibG9jaykgewotICAgIHZhciBuYW1l
ID0gYXJndW1lbnRzLmxlbmd0aCA8PSAzIHx8IGFyZ3VtZW50c1szXSA9PT0gdW5kZWZpbmVkID8g
J2RlZmF1bHQnIDogYXJndW1lbnRzWzNdOwotCi0gICAgc2NvcGUuYmxvY2tzW25hbWVdID0gYmxv
Y2s7Ci0gIH0KLQotICAvKioKLSAgICBIb3N0IEhvb2s6IGJsb2NrCi0gIAotICAgIEBwYXJhbSB7
UmVuZGVyTm9kZX0gcmVuZGVyTm9kZQotICAgIEBwYXJhbSB7RW52aXJvbm1lbnR9IGVudgotICAg
IEBwYXJhbSB7U2NvcGV9IHNjb3BlCi0gICAgQHBhcmFtIHtTdHJpbmd9IHBhdGgKLSAgICBAcGFy
YW0ge0FycmF5fSBwYXJhbXMKLSAgICBAcGFyYW0ge09iamVjdH0gaGFzaAotICAgIEBwYXJhbSB7
QmxvY2t9IGJsb2NrCi0gICAgQHBhcmFtIHtCbG9ja30gZWxzZUJsb2NrCi0gIAotICAgIENvcnJl
c3BvbmRzIHRvOgotICAKLSAgICBgYGBoYnMKLSAgICB7eyNoZWxwZXIgcGFyYW0xIHBhcmFtMiBr
ZXkxPXZhbDEga2V5Mj12YWwyfX0KLSAgICAgIHt7IS0tIGNoaWxkIHRlbXBsYXRlIC0tfX0KLSAg
ICB7ey9oZWxwZXJ9fQotICAgIGBgYAotICAKLSAgICBUaGlzIGhvc3QgaG9vayBpcyBhIHdvcmto
b3JzZSBvZiB0aGUgc3lzdGVtLiBJdCBpcyBpbnZva2VkCi0gICAgd2hlbmV2ZXIgYSBibG9jayBp
cyBlbmNvdW50ZXJlZCwgYW5kIGlzIHJlc3BvbnNpYmxlIGZvcgotICAgIHJlc29sdmluZyB0aGUg
aGVscGVyIHRvIGNhbGwsIGFuZCB0aGVuIGludm9rZSBpdC4KLSAgCi0gICAgVGhlIGhlbHBlciBz
aG91bGQgYmUgaW52b2tlZCB3aXRoOgotICAKLSAgICAtIGB7QXJyYXl9IHBhcmFtc2A6IHRoZSBw
YXJhbWV0ZXJzIHBhc3NlZCB0byB0aGUgaGVscGVyCi0gICAgICBpbiB0aGUgdGVtcGxhdGUuCi0g
ICAgLSBge09iamVjdH0gaGFzaGA6IGFuIG9iamVjdCBjb250YWluaW5nIHRoZSBrZXlzIGFuZCB2
YWx1ZXMgcGFzc2VkCi0gICAgICBpbiB0aGUgaGFzaCBwb3NpdGlvbiBpbiB0aGUgdGVtcGxhdGUu
Ci0gIAotICAgIFRoZSB2YWx1ZXMgaW4gYHBhcmFtc2AgYW5kIGBoYXNoYCB3aWxsIGFscmVhZHkg
YmUgcmVzb2x2ZWQKLSAgICB0aHJvdWdoIGEgcHJldmlvdXMgY2FsbCB0byB0aGUgYGdldGAgaG9z
dCBob29rLgotICAKLSAgICBUaGUgaGVscGVyIHNob3VsZCBiZSBpbnZva2VkIHdpdGggYSBgdGhp
c2AgdmFsdWUgdGhhdCBpcwotICAgIGFuIG9iamVjdCB3aXRoIG9uZSBmaWVsZDoKLSAgCi0gICAg
YHtGdW5jdGlvbn0geWllbGRgOiB3aGVuIGludm9rZWQsIHRoaXMgZnVuY3Rpb24gZXhlY3V0ZXMg
dGhlCi0gICAgYmxvY2sgd2l0aCB0aGUgY3VycmVudCBzY29wZS4gSXQgdGFrZXMgYW4gb3B0aW9u
YWwgYXJyYXkgb2YKLSAgICBibG9jayBwYXJhbWV0ZXJzLiBJZiBibG9jayBwYXJhbWV0ZXJzIGFy
ZSBzdXBwbGllZCwgSFRNTEJhcnMKLSAgICB3aWxsIGludm9rZSB0aGUgYGJpbmRMb2NhbGAgaG9z
dCBob29rIHRvIGJpbmQgdGhlIHN1cHBsaWVkCi0gICAgdmFsdWVzIHRvIHRoZSBibG9jayBhcmd1
bWVudHMgcHJvdmlkZWQgYnkgdGhlIHRlbXBsYXRlLgotICAKLSAgICBJbiBnZW5lcmFsLCB0aGUg
ZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiBgYmxvY2tgIHNob3VsZCB3b3JrCi0gICAgZm9yIG1v
c3QgaG9zdCBlbnZpcm9ubWVudHMuIEl0IGRlbGVnYXRlcyB0byBvdGhlciBob3N0IGhvb2tzCi0g
ICAgd2hlcmUgYXBwcm9wcmlhdGUsIGFuZCBwcm9wZXJseSBpbnZva2VzIHRoZSBoZWxwZXIgd2l0
aCB0aGUKLSAgICBhcHByb3ByaWF0ZSBhcmd1bWVudHMuCi0gICovCi0KLSAgZnVuY3Rpb24gYmxv
Y2sobW9ycGgsIGVudiwgc2NvcGUsIHBhdGgsIHBhcmFtcywgaGFzaCwgdGVtcGxhdGUsIGludmVy
c2UsIHZpc2l0b3IpIHsKLSAgICBpZiAoaGFuZGxlUmVkaXJlY3QobW9ycGgsIGVudiwgc2NvcGUs
IHBhdGgsIHBhcmFtcywgaGFzaCwgdGVtcGxhdGUsIGludmVyc2UsIHZpc2l0b3IpKSB7Ci0gICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgY29udGludWVCbG9jayhtb3JwaCwgZW52LCBzY29wZSwg
cGF0aCwgcGFyYW1zLCBoYXNoLCB0ZW1wbGF0ZSwgaW52ZXJzZSwgdmlzaXRvcik7Ci0gIH0KLQot
ICBmdW5jdGlvbiBjb250aW51ZUJsb2NrKG1vcnBoLCBlbnYsIHNjb3BlLCBwYXRoLCBwYXJhbXMs
IGhhc2gsIHRlbXBsYXRlLCBpbnZlcnNlLCB2aXNpdG9yKSB7Ci0gICAgaG9zdEJsb2NrKG1vcnBo
LCBlbnYsIHNjb3BlLCB0ZW1wbGF0ZSwgaW52ZXJzZSwgbnVsbCwgdmlzaXRvciwgZnVuY3Rpb24g
KG9wdGlvbnMpIHsKLSAgICAgIHZhciBoZWxwZXIgPSBlbnYuaG9va3MubG9va3VwSGVscGVyKGVu
diwgc2NvcGUsIHBhdGgpOwotICAgICAgcmV0dXJuIGVudi5ob29rcy5pbnZva2VIZWxwZXIobW9y
cGgsIGVudiwgc2NvcGUsIHZpc2l0b3IsIHBhcmFtcywgaGFzaCwgaGVscGVyLCBvcHRpb25zLnRl
bXBsYXRlcywgdGhpc0ZvcihvcHRpb25zLnRlbXBsYXRlcykpOwotICAgIH0pOwotICB9Ci0KLSAg
ZnVuY3Rpb24gaG9zdEJsb2NrKG1vcnBoLCBlbnYsIHNjb3BlLCB0ZW1wbGF0ZSwgaW52ZXJzZSwg
c2hhZG93T3B0aW9ucywgdmlzaXRvciwgY2FsbGJhY2spIHsKLSAgICB2YXIgb3B0aW9ucyA9IG9w
dGlvbnNGb3IodGVtcGxhdGUsIGludmVyc2UsIGVudiwgc2NvcGUsIG1vcnBoLCB2aXNpdG9yKTsK
LSAgICBfaHRtbGJhcnNVdGlsVGVtcGxhdGVVdGlscy5yZW5kZXJBbmRDbGVhbnVwKG1vcnBoLCBl
bnYsIG9wdGlvbnMsIHNoYWRvd09wdGlvbnMsIGNhbGxiYWNrKTsKLSAgfQotCi0gIGZ1bmN0aW9u
IGhhbmRsZVJlZGlyZWN0KG1vcnBoLCBlbnYsIHNjb3BlLCBwYXRoLCBwYXJhbXMsIGhhc2gsIHRl
bXBsYXRlLCBpbnZlcnNlLCB2aXNpdG9yKSB7Ci0gICAgaWYgKCFwYXRoKSB7Ci0gICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgdmFyIHJlZGlyZWN0ID0gZW52Lmhvb2tzLmNsYXNzaWZ5
KGVudiwgc2NvcGUsIHBhdGgpOwotICAgIGlmIChyZWRpcmVjdCkgewotICAgICAgc3dpdGNoIChy
ZWRpcmVjdCkgewotICAgICAgICBjYXNlICdjb21wb25lbnQnOgotICAgICAgICAgIGVudi5ob29r
cy5jb21wb25lbnQobW9ycGgsIGVudiwgc2NvcGUsIHBhdGgsIHBhcmFtcywgaGFzaCwgeyBkZWZh
dWx0OiB0ZW1wbGF0ZSwgaW52ZXJzZTogaW52ZXJzZSB9LCB2aXNpdG9yKTticmVhazsKLSAgICAg
ICAgY2FzZSAnaW5saW5lJzoKLSAgICAgICAgICBlbnYuaG9va3MuaW5saW5lKG1vcnBoLCBlbnYs
IHNjb3BlLCBwYXRoLCBwYXJhbXMsIGhhc2gsIHZpc2l0b3IpO2JyZWFrOwotICAgICAgICBjYXNl
ICdibG9jayc6Ci0gICAgICAgICAgZW52Lmhvb2tzLmJsb2NrKG1vcnBoLCBlbnYsIHNjb3BlLCBw
YXRoLCBwYXJhbXMsIGhhc2gsIHRlbXBsYXRlLCBpbnZlcnNlLCB2aXNpdG9yKTticmVhazsKLSAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkludGVybmFsIEhUTUxC
YXJzIHJlZGlyZWN0aW9uIHRvICIgKyByZWRpcmVjdCArICIgbm90IHN1cHBvcnRlZCIpOwotICAg
ICAgfQotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKGhhbmRsZUtleXdvcmQo
cGF0aCwgbW9ycGgsIGVudiwgc2NvcGUsIHBhcmFtcywgaGFzaCwgdGVtcGxhdGUsIGludmVyc2Us
IHZpc2l0b3IpKSB7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFs
c2U7Ci0gIH0KLQotICBmdW5jdGlvbiBoYW5kbGVLZXl3b3JkKHBhdGgsIG1vcnBoLCBlbnYsIHNj
b3BlLCBwYXJhbXMsIGhhc2gsIHRlbXBsYXRlLCBpbnZlcnNlLCB2aXNpdG9yKSB7Ci0gICAgdmFy
IGtleXdvcmQgPSBlbnYuaG9va3Mua2V5d29yZHNbcGF0aF07Ci0gICAgaWYgKCFrZXl3b3JkKSB7
Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKHR5cGVvZiBrZXl3b3JkID09
PSAnZnVuY3Rpb24nKSB7Ci0gICAgICByZXR1cm4ga2V5d29yZChtb3JwaCwgZW52LCBzY29wZSwg
cGFyYW1zLCBoYXNoLCB0ZW1wbGF0ZSwgaW52ZXJzZSwgdmlzaXRvcik7Ci0gICAgfQotCi0gICAg
aWYgKGtleXdvcmQud2lsbFJlbmRlcikgewotICAgICAga2V5d29yZC53aWxsUmVuZGVyKG1vcnBo
LCBlbnYpOwotICAgIH0KLQotICAgIHZhciBsYXN0U3RhdGUsIG5ld1N0YXRlOwotICAgIGlmIChr
ZXl3b3JkLnNldHVwU3RhdGUpIHsKLSAgICAgIGxhc3RTdGF0ZSA9IF9odG1sYmFyc1V0aWxPYmpl
Y3RVdGlscy5zaGFsbG93Q29weShtb3JwaC5nZXRTdGF0ZSgpKTsKLSAgICAgIG5ld1N0YXRlID0g
bW9ycGguc2V0U3RhdGUoa2V5d29yZC5zZXR1cFN0YXRlKGxhc3RTdGF0ZSwgZW52LCBzY29wZSwg
cGFyYW1zLCBoYXNoKSk7Ci0gICAgfQotCi0gICAgaWYgKGtleXdvcmQuY2hpbGRFbnYpIHsKLSAg
ICAgIC8vIEJ1aWxkIHRoZSBjaGlsZCBlbnZpcm9ubWVudC4uLgotICAgICAgZW52ID0ga2V5d29y
ZC5jaGlsZEVudihtb3JwaC5nZXRTdGF0ZSgpLCBlbnYpOwotCi0gICAgICAvLyAuLnRoZW4gc2F2
ZSBvZmYgdGhlIGNoaWxkIGVudiBidWlsZGVyIG9uIHRoZSByZW5kZXIgbm9kZS4gSWYgdGhlIHJl
bmRlcgotICAgICAgLy8gbm9kZSB0cmVlIGlzIHJlLXJlbmRlcmVkIGFuZCB0aGlzIG5vZGUgaXMg
bm90IGRpcnR5LCB0aGUgY2hpbGQgZW52Ci0gICAgICAvLyBidWlsZGVyIHdpbGwgc3RpbGwgYmUg
aW52b2tlZCBzbyB0aGF0IGNoaWxkIGRpcnR5IHJlbmRlciBub2RlcyBzdGlsbCBnZXQKLSAgICAg
IC8vIHRoZSBjb3JyZWN0IGNoaWxkIGVudi4KLSAgICAgIG1vcnBoLmJ1aWxkQ2hpbGRFbnYgPSBr
ZXl3b3JkLmNoaWxkRW52OwotICAgIH0KLQotICAgIHZhciBmaXJzdFRpbWUgPSAhbW9ycGgucmVu
ZGVyZWQ7Ci0KLSAgICBpZiAoa2V5d29yZC5pc0VtcHR5KSB7Ci0gICAgICB2YXIgaXNFbXB0eSA9
IGtleXdvcmQuaXNFbXB0eShtb3JwaC5nZXRTdGF0ZSgpLCBlbnYsIHNjb3BlLCBwYXJhbXMsIGhh
c2gpOwotCi0gICAgICBpZiAoaXNFbXB0eSkgewotICAgICAgICBpZiAoIWZpcnN0VGltZSkgewot
ICAgICAgICAgIF9odG1sYmFyc1V0aWxUZW1wbGF0ZVV0aWxzLmNsZWFyTW9ycGgobW9ycGgsIGVu
diwgZmFsc2UpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAg
IH0KLQotICAgIGlmIChmaXJzdFRpbWUpIHsKLSAgICAgIGlmIChrZXl3b3JkLnJlbmRlcikgewot
ICAgICAgICBrZXl3b3JkLnJlbmRlcihtb3JwaCwgZW52LCBzY29wZSwgcGFyYW1zLCBoYXNoLCB0
ZW1wbGF0ZSwgaW52ZXJzZSwgdmlzaXRvcik7Ci0gICAgICB9Ci0gICAgICBtb3JwaC5yZW5kZXJl
ZCA9IHRydWU7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICB2YXIgaXNTdGFibGU7
Ci0gICAgaWYgKGtleXdvcmQuaXNTdGFibGUpIHsKLSAgICAgIGlzU3RhYmxlID0ga2V5d29yZC5p
c1N0YWJsZShsYXN0U3RhdGUsIG5ld1N0YXRlKTsKLSAgICB9IGVsc2UgewotICAgICAgaXNTdGFi
bGUgPSBzdGFibGVTdGF0ZShsYXN0U3RhdGUsIG5ld1N0YXRlKTsKLSAgICB9Ci0KLSAgICBpZiAo
aXNTdGFibGUpIHsKLSAgICAgIGlmIChrZXl3b3JkLnJlcmVuZGVyKSB7Ci0gICAgICAgIHZhciBu
ZXdFbnYgPSBrZXl3b3JkLnJlcmVuZGVyKG1vcnBoLCBlbnYsIHNjb3BlLCBwYXJhbXMsIGhhc2gs
IHRlbXBsYXRlLCBpbnZlcnNlLCB2aXNpdG9yKTsKLSAgICAgICAgZW52ID0gbmV3RW52IHx8IGVu
djsKLSAgICAgIH0KLSAgICAgIF9odG1sYmFyc1V0aWxNb3JwaFV0aWxzLnZhbGlkYXRlQ2hpbGRN
b3JwaHMoZW52LCBtb3JwaCwgdmlzaXRvcik7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IGVs
c2UgewotICAgICAgX2h0bWxiYXJzVXRpbFRlbXBsYXRlVXRpbHMuY2xlYXJNb3JwaChtb3JwaCwg
ZW52LCBmYWxzZSk7Ci0gICAgfQotCi0gICAgLy8gSWYgdGhlIG5vZGUgaXMgdW5zdGFibGUsIHJl
LXJlbmRlciBmcm9tIHNjcmF0Y2gKLSAgICBpZiAoa2V5d29yZC5yZW5kZXIpIHsKLSAgICAgIGtl
eXdvcmQucmVuZGVyKG1vcnBoLCBlbnYsIHNjb3BlLCBwYXJhbXMsIGhhc2gsIHRlbXBsYXRlLCBp
bnZlcnNlLCB2aXNpdG9yKTsKLSAgICAgIG1vcnBoLnJlbmRlcmVkID0gdHJ1ZTsKLSAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIHN0YWJsZVN0YXRlKG9sZFN0YXRl
LCBuZXdTdGF0ZSkgewotICAgIGlmIChfaHRtbGJhcnNVdGlsT2JqZWN0VXRpbHMua2V5TGVuZ3Ro
KG9sZFN0YXRlKSAhPT0gX2h0bWxiYXJzVXRpbE9iamVjdFV0aWxzLmtleUxlbmd0aChuZXdTdGF0
ZSkpIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBmb3IgKHZhciBwcm9wIGlu
IG9sZFN0YXRlKSB7Ci0gICAgICBpZiAob2xkU3RhdGVbcHJvcF0gIT09IG5ld1N0YXRlW3Byb3Bd
KSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4g
dHJ1ZTsKLSAgfQotCi0gIGZ1bmN0aW9uIGxpbmtSZW5kZXJOb2RlKCkgLyogbW9ycGgsIGVudiwg
c2NvcGUsIHBhcmFtcywgaGFzaCAqL3sKLSAgICByZXR1cm47Ci0gIH0KLQotICAvKioKLSAgICBI
b3N0IEhvb2s6IGlubGluZQotICAKLSAgICBAcGFyYW0ge1JlbmRlck5vZGV9IHJlbmRlck5vZGUK
LSAgICBAcGFyYW0ge0Vudmlyb25tZW50fSBlbnYKLSAgICBAcGFyYW0ge1Njb3BlfSBzY29wZQot
ICAgIEBwYXJhbSB7U3RyaW5nfSBwYXRoCi0gICAgQHBhcmFtIHtBcnJheX0gcGFyYW1zCi0gICAg
QHBhcmFtIHtIYXNofSBoYXNoCi0gIAotICAgIENvcnJlc3BvbmRzIHRvOgotICAKLSAgICBgYGBo
YnMKLSAgICB7e2hlbHBlciBwYXJhbTEgcGFyYW0yIGtleTE9dmFsMSBrZXkyPXZhbDJ9fQotICAg
IGBgYAotICAKLSAgICBUaGlzIGhvc3QgaG9vayBpcyBzaW1pbGFyIHRvIHRoZSBgYmxvY2tgIGhv
c3QgaG9vaywgYnV0IGl0Ci0gICAgaW52b2tlcyBoZWxwZXJzIHRoYXQgZG8gbm90IHN1cHBseSBh
biBhdHRhY2hlZCBibG9jay4KLSAgCi0gICAgTGlrZSB0aGUgYGJsb2NrYCBob29rLCB0aGUgaGVs
cGVyIHNob3VsZCBiZSBpbnZva2VkIHdpdGg6Ci0gIAotICAgIC0gYHtBcnJheX0gcGFyYW1zYDog
dGhlIHBhcmFtZXRlcnMgcGFzc2VkIHRvIHRoZSBoZWxwZXIKLSAgICAgIGluIHRoZSB0ZW1wbGF0
ZS4KLSAgICAtIGB7T2JqZWN0fSBoYXNoYDogYW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGtleXMg
YW5kIHZhbHVlcyBwYXNzZWQKLSAgICAgIGluIHRoZSBoYXNoIHBvc2l0aW9uIGluIHRoZSB0ZW1w
bGF0ZS4KLSAgCi0gICAgVGhlIHZhbHVlcyBpbiBgcGFyYW1zYCBhbmQgYGhhc2hgIHdpbGwgYWxy
ZWFkeSBiZSByZXNvbHZlZAotICAgIHRocm91Z2ggYSBwcmV2aW91cyBjYWxsIHRvIHRoZSBgZ2V0
YCBob3N0IGhvb2suCi0gIAotICAgIEluIGdlbmVyYWwsIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0
aW9uIG9mIGBpbmxpbmVgIHNob3VsZCB3b3JrCi0gICAgZm9yIG1vc3QgaG9zdCBlbnZpcm9ubWVu
dHMuIEl0IGRlbGVnYXRlcyB0byBvdGhlciBob3N0IGhvb2tzCi0gICAgd2hlcmUgYXBwcm9wcmlh
dGUsIGFuZCBwcm9wZXJseSBpbnZva2VzIHRoZSBoZWxwZXIgd2l0aCB0aGUKLSAgICBhcHByb3By
aWF0ZSBhcmd1bWVudHMuCi0gIAotICAgIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIGBp
bmxpbmVgIGFsc28gbWFrZXMgYHBhcnRpYWxgCi0gICAgYSBrZXl3b3JkLiBJbnN0ZWFkIG9mIGlu
dm9raW5nIGEgaGVscGVyIG5hbWVkIGBwYXJ0aWFsYCwKLSAgICBpdCBpbnZva2VzIHRoZSBgcGFy
dGlhbGAgaG9zdCBob29rLgotICAqLwotCi0gIGZ1bmN0aW9uIGlubGluZShtb3JwaCwgZW52LCBz
Y29wZSwgcGF0aCwgcGFyYW1zLCBoYXNoLCB2aXNpdG9yKSB7Ci0gICAgaWYgKGhhbmRsZVJlZGly
ZWN0KG1vcnBoLCBlbnYsIHNjb3BlLCBwYXRoLCBwYXJhbXMsIGhhc2gsIG51bGwsIG51bGwsIHZp
c2l0b3IpKSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgdmFyIHZhbHVlID0gdW5kZWZp
bmVkLAotICAgICAgICBoYXNWYWx1ZSA9IHVuZGVmaW5lZDsKLSAgICBpZiAobW9ycGgubGlua2Vk
UmVzdWx0KSB7Ci0gICAgICB2YWx1ZSA9IGVudi5ob29rcy5nZXRWYWx1ZShtb3JwaC5saW5rZWRS
ZXN1bHQpOwotICAgICAgaGFzVmFsdWUgPSB0cnVlOwotICAgIH0gZWxzZSB7Ci0gICAgICB2YXIg
b3B0aW9ucyA9IG9wdGlvbnNGb3IobnVsbCwgbnVsbCwgZW52LCBzY29wZSwgbW9ycGgpOwotCi0g
ICAgICB2YXIgaGVscGVyID0gZW52Lmhvb2tzLmxvb2t1cEhlbHBlcihlbnYsIHNjb3BlLCBwYXRo
KTsKLSAgICAgIHZhciByZXN1bHQgPSBlbnYuaG9va3MuaW52b2tlSGVscGVyKG1vcnBoLCBlbnYs
IHNjb3BlLCB2aXNpdG9yLCBwYXJhbXMsIGhhc2gsIGhlbHBlciwgb3B0aW9ucy50ZW1wbGF0ZXMs
IHRoaXNGb3Iob3B0aW9ucy50ZW1wbGF0ZXMpKTsKLQotICAgICAgaWYgKHJlc3VsdCAmJiByZXN1
bHQubGluaykgewotICAgICAgICBtb3JwaC5saW5rZWRSZXN1bHQgPSByZXN1bHQudmFsdWU7Ci0g
ICAgICAgIF9odG1sYmFyc1V0aWxNb3JwaFV0aWxzLmxpbmtQYXJhbXMoZW52LCBzY29wZSwgbW9y
cGgsICdAY29udGVudC1oZWxwZXInLCBbbW9ycGgubGlua2VkUmVzdWx0XSwgbnVsbCk7Ci0gICAg
ICB9Ci0KLSAgICAgIGlmIChyZXN1bHQgJiYgJ3ZhbHVlJyBpbiByZXN1bHQpIHsKLSAgICAgICAg
dmFsdWUgPSBlbnYuaG9va3MuZ2V0VmFsdWUocmVzdWx0LnZhbHVlKTsKLSAgICAgICAgaGFzVmFs
dWUgPSB0cnVlOwotICAgICAgfQotICAgIH0KLQotICAgIGlmIChoYXNWYWx1ZSkgewotICAgICAg
aWYgKG1vcnBoLmxhc3RWYWx1ZSAhPT0gdmFsdWUpIHsKLSAgICAgICAgbW9ycGguc2V0Q29udGVu
dCh2YWx1ZSk7Ci0gICAgICB9Ci0gICAgICBtb3JwaC5sYXN0VmFsdWUgPSB2YWx1ZTsKLSAgICB9
Ci0gIH0KLQotICBmdW5jdGlvbiBrZXl3b3JkKHBhdGgsIG1vcnBoLCBlbnYsIHNjb3BlLCBwYXJh
bXMsIGhhc2gsIHRlbXBsYXRlLCBpbnZlcnNlLCB2aXNpdG9yKSB7Ci0gICAgaGFuZGxlS2V5d29y
ZChwYXRoLCBtb3JwaCwgZW52LCBzY29wZSwgcGFyYW1zLCBoYXNoLCB0ZW1wbGF0ZSwgaW52ZXJz
ZSwgdmlzaXRvcik7Ci0gIH0KLQotICBmdW5jdGlvbiBpbnZva2VIZWxwZXIobW9ycGgsIGVudiwg
c2NvcGUsIHZpc2l0b3IsIF9wYXJhbXMsIF9oYXNoLCBoZWxwZXIsIHRlbXBsYXRlcywgY29udGV4
dCkgewotICAgIHZhciBwYXJhbXMgPSBub3JtYWxpemVBcnJheShlbnYsIF9wYXJhbXMpOwotICAg
IHZhciBoYXNoID0gbm9ybWFsaXplT2JqZWN0KGVudiwgX2hhc2gpOwotICAgIHJldHVybiB7IHZh
bHVlOiBoZWxwZXIuY2FsbChjb250ZXh0LCBwYXJhbXMsIGhhc2gsIHRlbXBsYXRlcykgfTsKLSAg
fQotCi0gIGZ1bmN0aW9uIG5vcm1hbGl6ZUFycmF5KGVudiwgYXJyYXkpIHsKLSAgICB2YXIgb3V0
ID0gbmV3IEFycmF5KGFycmF5Lmxlbmd0aCk7Ci0KLSAgICBmb3IgKHZhciBpID0gMCwgbCA9IGFy
cmF5Lmxlbmd0aDsgaSA8IGw7IGkrKykgewotICAgICAgb3V0W2ldID0gZW52Lmhvb2tzLmdldENl
bGxPclZhbHVlKGFycmF5W2ldKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gb3V0OwotICB9Ci0KLSAg
ZnVuY3Rpb24gbm9ybWFsaXplT2JqZWN0KGVudiwgb2JqZWN0KSB7Ci0gICAgdmFyIG91dCA9IHt9
OwotCi0gICAgZm9yICh2YXIgcHJvcCBpbiBvYmplY3QpIHsKLSAgICAgIG91dFtwcm9wXSA9IGVu
di5ob29rcy5nZXRDZWxsT3JWYWx1ZShvYmplY3RbcHJvcF0pOwotICAgIH0KLQotICAgIHJldHVy
biBvdXQ7Ci0gIH0KLQotICBmdW5jdGlvbiBjbGFzc2lmeSgpIC8qIGVudiwgc2NvcGUsIHBhdGgg
Ki97Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICB2YXIga2V5d29yZHMgPSB7Ci0gICAgcGFy
dGlhbDogZnVuY3Rpb24gKG1vcnBoLCBlbnYsIHNjb3BlLCBwYXJhbXMpIHsKLSAgICAgIHZhciB2
YWx1ZSA9IGVudi5ob29rcy5wYXJ0aWFsKG1vcnBoLCBlbnYsIHNjb3BlLCBwYXJhbXNbMF0pOwot
ICAgICAgbW9ycGguc2V0Q29udGVudCh2YWx1ZSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
LAotCi0gICAgLy8gcXVvdGVkIHNpbmNlIGl0J3MgYSByZXNlcnZlZCB3b3JkLCBzZWUgaXNzdWUg
IzQyMAotICAgICd5aWVsZCc6IGZ1bmN0aW9uIChtb3JwaCwgZW52LCBzY29wZSwgcGFyYW1zLCBo
YXNoLCB0ZW1wbGF0ZSwgaW52ZXJzZSwgdmlzaXRvcikgewotICAgICAgLy8gdGhlIGN1cnJlbnQg
c2NvcGUgaXMgcHJvdmlkZWQgcHVyZWx5IGZvciB0aGUgY3JlYXRpb24gb2Ygc2hhZG93Ci0gICAg
ICAvLyBzY29wZXM7IGl0IHNob3VsZCBub3QgYmUgcHJvdmlkZWQgdG8gdXNlciBjb2RlLgotCi0g
ICAgICB2YXIgdG8gPSBlbnYuaG9va3MuZ2V0VmFsdWUoaGFzaC50bykgfHwgJ2RlZmF1bHQnOwot
ICAgICAgdmFyIGJsb2NrID0gZW52Lmhvb2tzLmdldEJsb2NrKHNjb3BlLCB0byk7Ci0KLSAgICAg
IGlmIChibG9jaykgewotICAgICAgICBibG9jay5pbnZva2UoZW52LCBwYXJhbXMsIGhhc2guc2Vs
ZiwgbW9ycGgsIHNjb3BlLCB2aXNpdG9yKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0sCi0KLSAgICBoYXNCbG9jazogZnVuY3Rpb24gKG1vcnBoLCBlbnYsIHNjb3BlLCBwYXJh
bXMpIHsKLSAgICAgIHZhciBuYW1lID0gZW52Lmhvb2tzLmdldFZhbHVlKHBhcmFtc1swXSkgfHwg
J2RlZmF1bHQnOwotICAgICAgcmV0dXJuICEhZW52Lmhvb2tzLmdldEJsb2NrKHNjb3BlLCBuYW1l
KTsKLSAgICB9LAotCi0gICAgaGFzQmxvY2tQYXJhbXM6IGZ1bmN0aW9uIChtb3JwaCwgZW52LCBz
Y29wZSwgcGFyYW1zKSB7Ci0gICAgICB2YXIgbmFtZSA9IGVudi5ob29rcy5nZXRWYWx1ZShwYXJh
bXNbMF0pIHx8ICdkZWZhdWx0JzsKLSAgICAgIHZhciBibG9jayA9IGVudi5ob29rcy5nZXRCbG9j
ayhzY29wZSwgbmFtZSk7Ci0gICAgICByZXR1cm4gISEoYmxvY2sgJiYgYmxvY2suYXJpdHkpOwot
ICAgIH0KLQotICB9OwotCi0gIGV4cG9ydHMua2V5d29yZHMgPSBrZXl3b3JkczsKLSAgLyoqCi0g
ICAgSG9zdCBIb29rOiBwYXJ0aWFsCi0gIAotICAgIEBwYXJhbSB7UmVuZGVyTm9kZX0gcmVuZGVy
Tm9kZQotICAgIEBwYXJhbSB7RW52aXJvbm1lbnR9IGVudgotICAgIEBwYXJhbSB7U2NvcGV9IHNj
b3BlCi0gICAgQHBhcmFtIHtTdHJpbmd9IHBhdGgKLSAgCi0gICAgQ29ycmVzcG9uZHMgdG86Ci0g
IAotICAgIGBgYGhicwotICAgIHt7cGFydGlhbCAibG9jYXRpb24ifX0KLSAgICBgYGAKLSAgCi0g
ICAgVGhpcyBob3N0IGhvb2sgaXMgaW52b2tlZCBieSB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlv
biBvZgotICAgIHRoZSBgaW5saW5lYCBob29rLiBUaGlzIG1ha2VzIGBwYXJ0aWFsYCBhIGtleXdv
cmQgaW4gYW4KLSAgICBIVE1MQmFycyBlbnZpcm9ubWVudCB1c2luZyB0aGUgZGVmYXVsdCBgaW5s
aW5lYCBob3N0IGhvb2suCi0gIAotICAgIEl0IGlzIGltcGxlbWVudGVkIGFzIGEgaG9zdCBob29r
IHNvIHRoYXQgaXQgY2FuIHJldHJpZXZlCi0gICAgdGhlIG5hbWVkIHBhcnRpYWwgb3V0IG9mIHRo
ZSBgRW52aXJvbm1lbnRgLiBIZWxwZXJzLCBpbgotICAgIGNvbnRyYXN0LCBvbmx5IGhhdmUgYWNj
ZXNzIHRvIHRoZSB2YWx1ZXMgcGFzc2VkIGluIHRvIHRoZW0sCi0gICAgYW5kIG5vdCB0byB0aGUg
YW1iaWVudCBsZXhpY2FsIGVudmlyb25tZW50LgotICAKLSAgICBUaGUgaG9zdCBob29rIHNob3Vs
ZCBpbnZva2UgdGhlIHJlZmVyZW5jZWQgcGFydGlhbCB3aXRoCi0gICAgdGhlIGFtYmllbnQgYHNl
bGZgLgotICAqLwotCi0gIGZ1bmN0aW9uIHBhcnRpYWwocmVuZGVyTm9kZSwgZW52LCBzY29wZSwg
cGF0aCkgewotICAgIHZhciB0ZW1wbGF0ZSA9IGVudi5wYXJ0aWFsc1twYXRoXTsKLSAgICByZXR1
cm4gdGVtcGxhdGUucmVuZGVyKHNjb3BlLnNlbGYsIGVudiwge30pLmZyYWdtZW50OwotICB9Ci0K
LSAgLyoqCi0gICAgSG9zdCBob29rOiByYW5nZQotICAKLSAgICBAcGFyYW0ge1JlbmRlck5vZGV9
IHJlbmRlck5vZGUKLSAgICBAcGFyYW0ge0Vudmlyb25tZW50fSBlbnYKLSAgICBAcGFyYW0ge1Nj
b3BlfSBzY29wZQotICAgIEBwYXJhbSB7YW55fSB2YWx1ZQotICAKLSAgICBDb3JyZXNwb25kcyB0
bzoKLSAgCi0gICAgYGBgaGJzCi0gICAge3tjb250ZW50fX0KLSAgICB7e3t1bmVzY2FwZWR9fX0K
LSAgICBgYGAKLSAgCi0gICAgVGhpcyBob29rIGlzIHJlc3BvbnNpYmxlIGZvciB1cGRhdGluZyBh
IHJlbmRlciBub2RlCi0gICAgdGhhdCByZXByZXNlbnRzIGEgcmFuZ2Ugb2YgY29udGVudCB3aXRo
IGEgdmFsdWUuCi0gICovCi0KLSAgZnVuY3Rpb24gcmFuZ2UobW9ycGgsIGVudiwgc2NvcGUsIHBh
dGgsIHZhbHVlLCB2aXNpdG9yKSB7Ci0gICAgaWYgKGhhbmRsZVJlZGlyZWN0KG1vcnBoLCBlbnYs
IHNjb3BlLCBwYXRoLCBbXSwge30sIG51bGwsIG51bGwsIHZpc2l0b3IpKSB7Ci0gICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgdmFsdWUgPSBlbnYuaG9va3MuZ2V0VmFsdWUodmFsdWUpOwotCi0g
ICAgaWYgKG1vcnBoLmxhc3RWYWx1ZSAhPT0gdmFsdWUpIHsKLSAgICAgIG1vcnBoLnNldENvbnRl
bnQodmFsdWUpOwotICAgIH0KLQotICAgIG1vcnBoLmxhc3RWYWx1ZSA9IHZhbHVlOwotICB9Ci0K
LSAgLyoqCi0gICAgSG9zdCBob29rOiBlbGVtZW50Ci0gIAotICAgIEBwYXJhbSB7UmVuZGVyTm9k
ZX0gcmVuZGVyTm9kZQotICAgIEBwYXJhbSB7RW52aXJvbm1lbnR9IGVudgotICAgIEBwYXJhbSB7
U2NvcGV9IHNjb3BlCi0gICAgQHBhcmFtIHtTdHJpbmd9IHBhdGgKLSAgICBAcGFyYW0ge0FycmF5
fSBwYXJhbXMKLSAgICBAcGFyYW0ge0hhc2h9IGhhc2gKLSAgCi0gICAgQ29ycmVzcG9uZHMgdG86
Ci0gIAotICAgIGBgYGhicwotICAgIDxkaXYge3tiaW5kLWF0dHIgZm9vPWJhcn19PjwvZGl2Pgot
ICAgIGBgYAotICAKLSAgICBUaGlzIGhvb2sgaXMgcmVzcG9uc2libGUgZm9yIGludm9raW5nIGEg
aGVscGVyIHRoYXQKLSAgICBtb2RpZmllcyBhbiBlbGVtZW50LgotICAKLSAgICBJdHMgcHVycG9z
ZSBpcyBsYXJnZWx5IGxlZ2FjeSBzdXBwb3J0IGZvciBhd2t3YXJkCi0gICAgaWRpb21zIHRoYXQg
YmVjYW1lIGNvbW1vbiB3aGVuIHVzaW5nIHRoZSBzdHJpbmctYmFzZWQKLSAgICBIYW5kbGViYXJz
IGVuZ2luZS4KLSAgCi0gICAgTW9zdCBvZiB0aGUgdXNlcyBvZiB0aGUgYGVsZW1lbnRgIGhvb2sg
YXJlIGV4cGVjdGVkCi0gICAgdG8gYmUgc3VwZXJzZWRlZCBieSBjb21wb25lbnQgc3ludGF4IGFu
ZCB0aGUKLSAgICBgYXR0cmlidXRlYCBob29rLgotICAqLwotCi0gIGZ1bmN0aW9uIGVsZW1lbnQo
bW9ycGgsIGVudiwgc2NvcGUsIHBhdGgsIHBhcmFtcywgaGFzaCwgdmlzaXRvcikgewotICAgIGlm
IChoYW5kbGVSZWRpcmVjdChtb3JwaCwgZW52LCBzY29wZSwgcGF0aCwgcGFyYW1zLCBoYXNoLCBu
dWxsLCBudWxsLCB2aXNpdG9yKSkgewotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHZhciBo
ZWxwZXIgPSBlbnYuaG9va3MubG9va3VwSGVscGVyKGVudiwgc2NvcGUsIHBhdGgpOwotICAgIGlm
IChoZWxwZXIpIHsKLSAgICAgIGVudi5ob29rcy5pbnZva2VIZWxwZXIobnVsbCwgZW52LCBzY29w
ZSwgbnVsbCwgcGFyYW1zLCBoYXNoLCBoZWxwZXIsIHsgZWxlbWVudDogbW9ycGguZWxlbWVudCB9
KTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICBIb3N0IGhvb2s6IGF0dHJpYnV0ZQotICAKLSAg
ICBAcGFyYW0ge1JlbmRlck5vZGV9IHJlbmRlck5vZGUKLSAgICBAcGFyYW0ge0Vudmlyb25tZW50
fSBlbnYKLSAgICBAcGFyYW0ge1N0cmluZ30gbmFtZQotICAgIEBwYXJhbSB7YW55fSB2YWx1ZQot
ICAKLSAgICBDb3JyZXNwb25kcyB0bzoKLSAgCi0gICAgYGBgaGJzCi0gICAgPGRpdiBmb289e3ti
YXJ9fT48L2Rpdj4KLSAgICBgYGAKLSAgCi0gICAgVGhpcyBob29rIGlzIHJlc3BvbnNpYmxlIGZv
ciB1cGRhdGluZyBhIHJlbmRlciBub2RlCi0gICAgdGhhdCByZXByZXNlbnRzIGFuIGVsZW1lbnQn
cyBhdHRyaWJ1dGUgd2l0aCBhIHZhbHVlLgotICAKLSAgICBJdCByZWNlaXZlcyB0aGUgbmFtZSBv
ZiB0aGUgYXR0cmlidXRlIGFzIHdlbGwgYXMgYW4KLSAgICBhbHJlYWR5LXJlc29sdmVkIHZhbHVl
LCBhbmQgc2hvdWxkIHVwZGF0ZSB0aGUgcmVuZGVyCi0gICAgbm9kZSB3aXRoIHRoZSB2YWx1ZSBp
ZiBhcHByb3ByaWF0ZS4KLSAgKi8KLQotICBmdW5jdGlvbiBhdHRyaWJ1dGUobW9ycGgsIGVudiwg
c2NvcGUsIG5hbWUsIHZhbHVlKSB7Ci0gICAgdmFsdWUgPSBlbnYuaG9va3MuZ2V0VmFsdWUodmFs
dWUpOwotCi0gICAgaWYgKG1vcnBoLmxhc3RWYWx1ZSAhPT0gdmFsdWUpIHsKLSAgICAgIG1vcnBo
LnNldENvbnRlbnQodmFsdWUpOwotICAgIH0KLQotICAgIG1vcnBoLmxhc3RWYWx1ZSA9IHZhbHVl
OwotICB9Ci0KLSAgZnVuY3Rpb24gc3ViZXhwcihlbnYsIHNjb3BlLCBoZWxwZXJOYW1lLCBwYXJh
bXMsIGhhc2gpIHsKLSAgICB2YXIgaGVscGVyID0gZW52Lmhvb2tzLmxvb2t1cEhlbHBlcihlbnYs
IHNjb3BlLCBoZWxwZXJOYW1lKTsKLSAgICB2YXIgcmVzdWx0ID0gZW52Lmhvb2tzLmludm9rZUhl
bHBlcihudWxsLCBlbnYsIHNjb3BlLCBudWxsLCBwYXJhbXMsIGhhc2gsIGhlbHBlciwge30pOwot
ICAgIGlmIChyZXN1bHQgJiYgJ3ZhbHVlJyBpbiByZXN1bHQpIHsKLSAgICAgIHJldHVybiBlbnYu
aG9va3MuZ2V0VmFsdWUocmVzdWx0LnZhbHVlKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICBI
b3N0IEhvb2s6IGdldAotICAKLSAgICBAcGFyYW0ge0Vudmlyb25tZW50fSBlbnYKLSAgICBAcGFy
YW0ge1Njb3BlfSBzY29wZQotICAgIEBwYXJhbSB7U3RyaW5nfSBwYXRoCi0gIAotICAgIENvcnJl
c3BvbmRzIHRvOgotICAKLSAgICBgYGBoYnMKLSAgICB7e2Zvby5iYXJ9fQotICAgICAgXgotICAK
LSAgICB7e2hlbHBlciBmb28uYmFyIGtleT12YWx1ZX19Ci0gICAgICAgICAgICAgXiAgICAgICAg
ICAgXgotICAgIGBgYAotICAKLSAgICBUaGlzIGhvb2sgaXMgdGhlICJsZWFmIiBob29rIG9mIHRo
ZSBzeXN0ZW0uIEl0IGlzIHVzZWQgdG8KLSAgICByZXNvbHZlIGEgcGF0aCByZWxhdGl2ZSB0byB0
aGUgY3VycmVudCBzY29wZS4KLSAgKi8KLQotICBmdW5jdGlvbiBnZXQoZW52LCBzY29wZSwgcGF0
aCkgewotICAgIGlmIChwYXRoID09PSAnJykgewotICAgICAgcmV0dXJuIHNjb3BlLnNlbGY7Ci0g
ICAgfQotCi0gICAgdmFyIGtleXMgPSBwYXRoLnNwbGl0KCcuJyk7Ci0gICAgdmFyIHZhbHVlID0g
ZW52Lmhvb2tzLmdldFJvb3Qoc2NvcGUsIGtleXNbMF0pWzBdOwotCi0gICAgZm9yICh2YXIgaSA9
IDE7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICBpZiAodmFsdWUpIHsKLSAgICAgICAg
dmFsdWUgPSBlbnYuaG9va3MuZ2V0Q2hpbGQodmFsdWUsIGtleXNbaV0pOwotICAgICAgfSBlbHNl
IHsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHZhbHVlOwot
ICB9Ci0KLSAgZnVuY3Rpb24gZ2V0Um9vdChzY29wZSwga2V5KSB7Ci0gICAgaWYgKHNjb3BlLmxv
Y2FsUHJlc2VudFtrZXldKSB7Ci0gICAgICByZXR1cm4gW3Njb3BlLmxvY2Fsc1trZXldXTsKLSAg
ICB9IGVsc2UgaWYgKHNjb3BlLnNlbGYpIHsKLSAgICAgIHJldHVybiBbc2NvcGUuc2VsZltrZXld
XTsKLSAgICB9IGVsc2UgewotICAgICAgcmV0dXJuIFt1bmRlZmluZWRdOwotICAgIH0KLSAgfQot
Ci0gIGZ1bmN0aW9uIGdldEJsb2NrKHNjb3BlLCBrZXkpIHsKLSAgICByZXR1cm4gc2NvcGUuYmxv
Y2tzW2tleV07Ci0gIH0KLQotICBmdW5jdGlvbiBnZXRDaGlsZCh2YWx1ZSwga2V5KSB7Ci0gICAg
cmV0dXJuIHZhbHVlW2tleV07Ci0gIH0KLQotICBmdW5jdGlvbiBnZXRWYWx1ZShyZWZlcmVuY2Up
IHsKLSAgICByZXR1cm4gcmVmZXJlbmNlOwotICB9Ci0KLSAgZnVuY3Rpb24gZ2V0Q2VsbE9yVmFs
dWUocmVmZXJlbmNlKSB7Ci0gICAgcmV0dXJuIHJlZmVyZW5jZTsKLSAgfQotCi0gIGZ1bmN0aW9u
IGNvbXBvbmVudChtb3JwaCwgZW52LCBzY29wZSwgdGFnTmFtZSwgcGFyYW1zLCBhdHRycywgdGVt
cGxhdGVzLCB2aXNpdG9yKSB7Ci0gICAgaWYgKGVudi5ob29rcy5oYXNIZWxwZXIoZW52LCBzY29w
ZSwgdGFnTmFtZSkpIHsKLSAgICAgIHJldHVybiBlbnYuaG9va3MuYmxvY2sobW9ycGgsIGVudiwg
c2NvcGUsIHRhZ05hbWUsIHBhcmFtcywgYXR0cnMsIHRlbXBsYXRlcy5kZWZhdWx0LCB0ZW1wbGF0
ZXMuaW52ZXJzZSwgdmlzaXRvcik7Ci0gICAgfQotCi0gICAgY29tcG9uZW50RmFsbGJhY2sobW9y
cGgsIGVudiwgc2NvcGUsIHRhZ05hbWUsIGF0dHJzLCB0ZW1wbGF0ZXMuZGVmYXVsdCk7Ci0gIH0K
LQotICBmdW5jdGlvbiBjb25jYXQoZW52LCBwYXJhbXMpIHsKLSAgICB2YXIgdmFsdWUgPSAiIjsK
LSAgICBmb3IgKHZhciBpID0gMCwgbCA9IHBhcmFtcy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKLSAg
ICAgIHZhbHVlICs9IGVudi5ob29rcy5nZXRWYWx1ZShwYXJhbXNbaV0pOwotICAgIH0KLSAgICBy
ZXR1cm4gdmFsdWU7Ci0gIH0KLQotICBmdW5jdGlvbiBjb21wb25lbnRGYWxsYmFjayhtb3JwaCwg
ZW52LCBzY29wZSwgdGFnTmFtZSwgYXR0cnMsIHRlbXBsYXRlKSB7Ci0gICAgdmFyIGVsZW1lbnQg
PSBlbnYuZG9tLmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7Ci0gICAgZm9yICh2YXIgbmFtZSBpbiBh
dHRycykgewotICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUobmFtZSwgZW52Lmhvb2tzLmdldFZh
bHVlKGF0dHJzW25hbWVdKSk7Ci0gICAgfQotICAgIHZhciBmcmFnbWVudCA9IF9odG1sYmFyc1J1
bnRpbWVSZW5kZXIuZGVmYXVsdCh0ZW1wbGF0ZSwgZW52LCBzY29wZSwge30pLmZyYWdtZW50Owot
ICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoZnJhZ21lbnQpOwotICAgIG1vcnBoLnNldE5vZGUoZWxl
bWVudCk7Ci0gIH0KLQotICBmdW5jdGlvbiBoYXNIZWxwZXIoZW52LCBzY29wZSwgaGVscGVyTmFt
ZSkgewotICAgIHJldHVybiBlbnYuaGVscGVyc1toZWxwZXJOYW1lXSAhPT0gdW5kZWZpbmVkOwot
ICB9Ci0KLSAgZnVuY3Rpb24gbG9va3VwSGVscGVyKGVudiwgc2NvcGUsIGhlbHBlck5hbWUpIHsK
LSAgICByZXR1cm4gZW52LmhlbHBlcnNbaGVscGVyTmFtZV07Ci0gIH0KLQotICBmdW5jdGlvbiBi
aW5kU2NvcGUoKSAvKiBlbnYsIHNjb3BlICovewotICAgIC8vIHRoaXMgZnVuY3Rpb24gaXMgdXNl
ZCB0byBoYW5kbGUgaG9zdC1zcGVjaWZpZWQgZXh0ZW5zaW9ucyB0byBzY29wZQotICAgIC8vIG90
aGVyIHRoYW4gYHNlbGZgLCBgbG9jYWxzYCBhbmQgYGJsb2NrYC4KLSAgfQotCi0gIGZ1bmN0aW9u
IHVwZGF0ZVNjb3BlKGVudiwgc2NvcGUpIHsKLSAgICBlbnYuaG9va3MuYmluZFNjb3BlKGVudiwg
c2NvcGUpOwotICB9Ci0KLSAgZXhwb3J0cy5kZWZhdWx0ID0gewotICAgIC8vIGZ1bmRhbWVudGFs
IGhvb2tzIHRoYXQgeW91IHdpbGwgbGlrZWx5IHdhbnQgdG8gb3ZlcnJpZGUKLSAgICBiaW5kTG9j
YWw6IGJpbmRMb2NhbCwKLSAgICBiaW5kU2VsZjogYmluZFNlbGYsCi0gICAgYmluZFNjb3BlOiBi
aW5kU2NvcGUsCi0gICAgY2xhc3NpZnk6IGNsYXNzaWZ5LAotICAgIGNvbXBvbmVudDogY29tcG9u
ZW50LAotICAgIGNvbmNhdDogY29uY2F0LAotICAgIGNyZWF0ZUZyZXNoU2NvcGU6IGNyZWF0ZUZy
ZXNoU2NvcGUsCi0gICAgZ2V0Q2hpbGQ6IGdldENoaWxkLAotICAgIGdldFJvb3Q6IGdldFJvb3Qs
Ci0gICAgZ2V0QmxvY2s6IGdldEJsb2NrLAotICAgIGdldFZhbHVlOiBnZXRWYWx1ZSwKLSAgICBn
ZXRDZWxsT3JWYWx1ZTogZ2V0Q2VsbE9yVmFsdWUsCi0gICAga2V5d29yZHM6IGtleXdvcmRzLAot
ICAgIGxpbmtSZW5kZXJOb2RlOiBsaW5rUmVuZGVyTm9kZSwKLSAgICBwYXJ0aWFsOiBwYXJ0aWFs
LAotICAgIHN1YmV4cHI6IHN1YmV4cHIsCi0KLSAgICAvLyBmdW5kYW1lbnRhbCBob29rcyB3aXRo
IGdvb2QgZGVmYXVsdCBiZWhhdmlvcgotICAgIGJpbmRCbG9jazogYmluZEJsb2NrLAotICAgIGJp
bmRTaGFkb3dTY29wZTogYmluZFNoYWRvd1Njb3BlLAotICAgIHVwZGF0ZUxvY2FsOiB1cGRhdGVM
b2NhbCwKLSAgICB1cGRhdGVTZWxmOiB1cGRhdGVTZWxmLAotICAgIHVwZGF0ZVNjb3BlOiB1cGRh
dGVTY29wZSwKLSAgICBjcmVhdGVDaGlsZFNjb3BlOiBjcmVhdGVDaGlsZFNjb3BlLAotICAgIGhh
c0hlbHBlcjogaGFzSGVscGVyLAotICAgIGxvb2t1cEhlbHBlcjogbG9va3VwSGVscGVyLAotICAg
IGludm9rZUhlbHBlcjogaW52b2tlSGVscGVyLAotICAgIGNsZWFudXBSZW5kZXJOb2RlOiBudWxs
LAotICAgIGRlc3Ryb3lSZW5kZXJOb2RlOiBudWxsLAotICAgIHdpbGxDbGVhbnVwVHJlZTogbnVs
bCwKLSAgICBkaWRDbGVhbnVwVHJlZTogbnVsbCwKLSAgICB3aWxsUmVuZGVyTm9kZTogbnVsbCwK
LSAgICBkaWRSZW5kZXJOb2RlOiBudWxsLAotCi0gICAgLy8gZGVyaXZlZCBob29rcwotICAgIGF0
dHJpYnV0ZTogYXR0cmlidXRlLAotICAgIGJsb2NrOiBibG9jaywKLSAgICBjcmVhdGVTY29wZTog
Y3JlYXRlU2NvcGUsCi0gICAgZWxlbWVudDogZWxlbWVudCwKLSAgICBnZXQ6IGdldCwKLSAgICBp
bmxpbmU6IGlubGluZSwKLSAgICByYW5nZTogcmFuZ2UsCi0gICAga2V5d29yZDoga2V5d29yZAot
ICB9OwotfSk7Ci1lbmlmZWQoImh0bWxiYXJzLXJ1bnRpbWUvbW9ycGgiLCBbImV4cG9ydHMiLCAi
bW9ycGgtcmFuZ2UiXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9tb3JwaFJhbmdlKSB7Ci0gICJ1c2Ug
c3RyaWN0IjsKLQotICB2YXIgZ3VpZCA9IDE7Ci0KLSAgZnVuY3Rpb24gSFRNTEJhcnNNb3JwaChk
b21IZWxwZXIsIGNvbnRleHR1YWxFbGVtZW50KSB7Ci0gICAgdGhpcy5zdXBlciRjb25zdHJ1Y3Rv
cihkb21IZWxwZXIsIGNvbnRleHR1YWxFbGVtZW50KTsKLQotICAgIHRoaXMuX3N0YXRlID0gdW5k
ZWZpbmVkOwotICAgIHRoaXMub3duZXJOb2RlID0gbnVsbDsKLSAgICB0aGlzLmlzRGlydHkgPSBm
YWxzZTsKLSAgICB0aGlzLmlzU3VidHJlZURpcnR5ID0gZmFsc2U7Ci0gICAgdGhpcy5sYXN0WWll
bGRlZCA9IG51bGw7Ci0gICAgdGhpcy5sYXN0UmVzdWx0ID0gbnVsbDsKLSAgICB0aGlzLmxhc3RW
YWx1ZSA9IG51bGw7Ci0gICAgdGhpcy5idWlsZENoaWxkRW52ID0gbnVsbDsKLSAgICB0aGlzLm1v
cnBoTGlzdCA9IG51bGw7Ci0gICAgdGhpcy5tb3JwaE1hcCA9IG51bGw7Ci0gICAgdGhpcy5rZXkg
PSBudWxsOwotICAgIHRoaXMubGlua2VkUGFyYW1zID0gbnVsbDsKLSAgICB0aGlzLmxpbmtlZFJl
c3VsdCA9IG51bGw7Ci0gICAgdGhpcy5jaGlsZE5vZGVzID0gbnVsbDsKLSAgICB0aGlzLnJlbmRl
cmVkID0gZmFsc2U7Ci0gICAgdGhpcy5ndWlkID0gInJhbmdlIiArIGd1aWQrKzsKLSAgICB0aGlz
LnNlZW4gPSBmYWxzZTsKLSAgfQotCi0gIEhUTUxCYXJzTW9ycGguZW1wdHkgPSBmdW5jdGlvbiAo
ZG9tSGVscGVyLCBjb250ZXh0dWFsRWxlbWVudCkgewotICAgIHZhciBtb3JwaCA9IG5ldyBIVE1M
QmFyc01vcnBoKGRvbUhlbHBlciwgY29udGV4dHVhbEVsZW1lbnQpOwotICAgIG1vcnBoLmNsZWFy
KCk7Ci0gICAgcmV0dXJuIG1vcnBoOwotICB9OwotCi0gIEhUTUxCYXJzTW9ycGguY3JlYXRlID0g
ZnVuY3Rpb24gKGRvbUhlbHBlciwgY29udGV4dHVhbEVsZW1lbnQsIG5vZGUpIHsKLSAgICB2YXIg
bW9ycGggPSBuZXcgSFRNTEJhcnNNb3JwaChkb21IZWxwZXIsIGNvbnRleHR1YWxFbGVtZW50KTsK
LSAgICBtb3JwaC5zZXROb2RlKG5vZGUpOwotICAgIHJldHVybiBtb3JwaDsKLSAgfTsKLQotICBI
VE1MQmFyc01vcnBoLmF0dGFjaCA9IGZ1bmN0aW9uIChkb21IZWxwZXIsIGNvbnRleHR1YWxFbGVt
ZW50LCBmaXJzdE5vZGUsIGxhc3ROb2RlKSB7Ci0gICAgdmFyIG1vcnBoID0gbmV3IEhUTUxCYXJz
TW9ycGgoZG9tSGVscGVyLCBjb250ZXh0dWFsRWxlbWVudCk7Ci0gICAgbW9ycGguc2V0UmFuZ2Uo
Zmlyc3ROb2RlLCBsYXN0Tm9kZSk7Ci0gICAgcmV0dXJuIG1vcnBoOwotICB9OwotCi0gIHZhciBw
cm90b3R5cGUgPSBIVE1MQmFyc01vcnBoLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoX21vcnBo
UmFuZ2UuZGVmYXVsdC5wcm90b3R5cGUpOwotICBwcm90b3R5cGUuY29uc3RydWN0b3IgPSBIVE1M
QmFyc01vcnBoOwotICBwcm90b3R5cGUuc3VwZXIkY29uc3RydWN0b3IgPSBfbW9ycGhSYW5nZS5k
ZWZhdWx0OwotCi0gIHByb3RvdHlwZS5nZXRTdGF0ZSA9IGZ1bmN0aW9uICgpIHsKLSAgICBpZiAo
IXRoaXMuX3N0YXRlKSB7Ci0gICAgICB0aGlzLl9zdGF0ZSA9IHt9OwotICAgIH0KLQotICAgIHJl
dHVybiB0aGlzLl9zdGF0ZTsKLSAgfTsKLQotICBwcm90b3R5cGUuc2V0U3RhdGUgPSBmdW5jdGlv
biAobmV3U3RhdGUpIHsKLSAgICAvKmpzaGludCAtVzA5MyAqLwotCi0gICAgcmV0dXJuIHRoaXMu
X3N0YXRlID0gbmV3U3RhdGU7Ci0gIH07Ci0KLSAgZXhwb3J0cy5kZWZhdWx0ID0gSFRNTEJhcnNN
b3JwaDsKLX0pOwotZW5pZmVkKCJodG1sYmFycy1ydW50aW1lL25vZGUtdmlzaXRvciIsIFsiZXhw
b3J0cyIsICJodG1sYmFycy11dGlsL21vcnBoLXV0aWxzIiwgImh0bWxiYXJzLXJ1bnRpbWUvZXhw
cmVzc2lvbi12aXNpdG9yIl0sIGZ1bmN0aW9uIChleHBvcnRzLCBfaHRtbGJhcnNVdGlsTW9ycGhV
dGlscywgX2h0bWxiYXJzUnVudGltZUV4cHJlc3Npb25WaXNpdG9yKSB7Ci0gICJ1c2Ugc3RyaWN0
IjsKLQotICAvKioKLSAgICBOb2RlIGNsYXNzaWZpY2F0aW9uOgotICAKLSAgICAjIFByaW1hcnkg
U3RhdGVtZW50IE5vZGVzOgotICAKLSAgICBUaGVzZSBub2RlcyBhcmUgcmVzcG9uc2libGUgZm9y
IGEgcmVuZGVyIG5vZGUgdGhhdCByZXByZXNlbnRzIGEgbW9ycGgtcmFuZ2UuCi0gIAotICAgICog
YmxvY2sKLSAgICAqIGlubGluZQotICAgICogY29udGVudAotICAgICogZWxlbWVudAotICAgICog
Y29tcG9uZW50Ci0gIAotICAgICMgTGVhZiBTdGF0ZW1lbnQgTm9kZXM6Ci0gIAotICAgIFRoaXMg
bm9kZSBpcyByZXNwb25zaWJsZSBmb3IgYSByZW5kZXIgbm9kZSB0aGF0IHJlcHJlc2VudHMgYSBt
b3JwaC1hdHRyLgotICAKLSAgICAqIGF0dHJpYnV0ZQotICAqLwotCi0gIGZ1bmN0aW9uIGxpbmtQ
YXJhbXNBbmRIYXNoKGVudiwgc2NvcGUsIG1vcnBoLCBwYXRoLCBwYXJhbXMsIGhhc2gpIHsKLSAg
ICBpZiAobW9ycGgubGlua2VkUGFyYW1zKSB7Ci0gICAgICBwYXJhbXMgPSBtb3JwaC5saW5rZWRQ
YXJhbXMucGFyYW1zOwotICAgICAgaGFzaCA9IG1vcnBoLmxpbmtlZFBhcmFtcy5oYXNoOwotICAg
IH0gZWxzZSB7Ci0gICAgICBwYXJhbXMgPSBwYXJhbXMgJiYgX2h0bWxiYXJzUnVudGltZUV4cHJl
c3Npb25WaXNpdG9yLmFjY2VwdFBhcmFtcyhwYXJhbXMsIGVudiwgc2NvcGUpOwotICAgICAgaGFz
aCA9IGhhc2ggJiYgX2h0bWxiYXJzUnVudGltZUV4cHJlc3Npb25WaXNpdG9yLmFjY2VwdEhhc2go
aGFzaCwgZW52LCBzY29wZSk7Ci0gICAgfQotCi0gICAgX2h0bWxiYXJzVXRpbE1vcnBoVXRpbHMu
bGlua1BhcmFtcyhlbnYsIHNjb3BlLCBtb3JwaCwgcGF0aCwgcGFyYW1zLCBoYXNoKTsKLSAgICBy
ZXR1cm4gW3BhcmFtcywgaGFzaF07Ci0gIH0KLQotICB2YXIgQWx3YXlzRGlydHlWaXNpdG9yID0g
ewotCi0gICAgYmxvY2s6IGZ1bmN0aW9uIChub2RlLCBtb3JwaCwgZW52LCBzY29wZSwgdGVtcGxh
dGUsIHZpc2l0b3IpIHsKLSAgICAgIHZhciBwYXRoID0gbm9kZVsxXTsKLSAgICAgIHZhciBwYXJh
bXMgPSBub2RlWzJdOwotICAgICAgdmFyIGhhc2ggPSBub2RlWzNdOwotICAgICAgdmFyIHRlbXBs
YXRlSWQgPSBub2RlWzRdOwotICAgICAgdmFyIGludmVyc2VJZCA9IG5vZGVbNV07Ci0KLSAgICAg
IHZhciBwYXJhbXNBbmRIYXNoID0gbGlua1BhcmFtc0FuZEhhc2goZW52LCBzY29wZSwgbW9ycGgs
IHBhdGgsIHBhcmFtcywgaGFzaCk7Ci0KLSAgICAgIG1vcnBoLmlzRGlydHkgPSBtb3JwaC5pc1N1
YnRyZWVEaXJ0eSA9IGZhbHNlOwotICAgICAgZW52Lmhvb2tzLmJsb2NrKG1vcnBoLCBlbnYsIHNj
b3BlLCBwYXRoLCBwYXJhbXNBbmRIYXNoWzBdLCBwYXJhbXNBbmRIYXNoWzFdLCB0ZW1wbGF0ZUlk
ID09PSBudWxsID8gbnVsbCA6IHRlbXBsYXRlLnRlbXBsYXRlc1t0ZW1wbGF0ZUlkXSwgaW52ZXJz
ZUlkID09PSBudWxsID8gbnVsbCA6IHRlbXBsYXRlLnRlbXBsYXRlc1tpbnZlcnNlSWRdLCB2aXNp
dG9yKTsKLSAgICB9LAotCi0gICAgaW5saW5lOiBmdW5jdGlvbiAobm9kZSwgbW9ycGgsIGVudiwg
c2NvcGUsIHZpc2l0b3IpIHsKLSAgICAgIHZhciBwYXRoID0gbm9kZVsxXTsKLSAgICAgIHZhciBw
YXJhbXMgPSBub2RlWzJdOwotICAgICAgdmFyIGhhc2ggPSBub2RlWzNdOwotCi0gICAgICB2YXIg
cGFyYW1zQW5kSGFzaCA9IGxpbmtQYXJhbXNBbmRIYXNoKGVudiwgc2NvcGUsIG1vcnBoLCBwYXRo
LCBwYXJhbXMsIGhhc2gpOwotCi0gICAgICBtb3JwaC5pc0RpcnR5ID0gbW9ycGguaXNTdWJ0cmVl
RGlydHkgPSBmYWxzZTsKLSAgICAgIGVudi5ob29rcy5pbmxpbmUobW9ycGgsIGVudiwgc2NvcGUs
IHBhdGgsIHBhcmFtc0FuZEhhc2hbMF0sIHBhcmFtc0FuZEhhc2hbMV0sIHZpc2l0b3IpOwotICAg
IH0sCi0KLSAgICBjb250ZW50OiBmdW5jdGlvbiAobm9kZSwgbW9ycGgsIGVudiwgc2NvcGUsIHZp
c2l0b3IpIHsKLSAgICAgIHZhciBwYXRoID0gbm9kZVsxXTsKLQotICAgICAgbW9ycGguaXNEaXJ0
eSA9IG1vcnBoLmlzU3VidHJlZURpcnR5ID0gZmFsc2U7Ci0KLSAgICAgIGlmIChpc0hlbHBlcihl
bnYsIHNjb3BlLCBwYXRoKSkgewotICAgICAgICBlbnYuaG9va3MuaW5saW5lKG1vcnBoLCBlbnYs
IHNjb3BlLCBwYXRoLCBbXSwge30sIHZpc2l0b3IpOwotICAgICAgICBpZiAobW9ycGgubGlua2Vk
UmVzdWx0KSB7Ci0gICAgICAgICAgX2h0bWxiYXJzVXRpbE1vcnBoVXRpbHMubGlua1BhcmFtcyhl
bnYsIHNjb3BlLCBtb3JwaCwgJ0Bjb250ZW50LWhlbHBlcicsIFttb3JwaC5saW5rZWRSZXN1bHRd
LCBudWxsKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0KLSAgICAgIHZh
ciBwYXJhbXMgPSB1bmRlZmluZWQ7Ci0gICAgICBpZiAobW9ycGgubGlua2VkUGFyYW1zKSB7Ci0g
ICAgICAgIHBhcmFtcyA9IG1vcnBoLmxpbmtlZFBhcmFtcy5wYXJhbXM7Ci0gICAgICB9IGVsc2Ug
ewotICAgICAgICBwYXJhbXMgPSBbZW52Lmhvb2tzLmdldChlbnYsIHNjb3BlLCBwYXRoKV07Ci0g
ICAgICB9Ci0KLSAgICAgIF9odG1sYmFyc1V0aWxNb3JwaFV0aWxzLmxpbmtQYXJhbXMoZW52LCBz
Y29wZSwgbW9ycGgsICdAcmFuZ2UnLCBwYXJhbXMsIG51bGwpOwotICAgICAgZW52Lmhvb2tzLnJh
bmdlKG1vcnBoLCBlbnYsIHNjb3BlLCBwYXRoLCBwYXJhbXNbMF0sIHZpc2l0b3IpOwotICAgIH0s
Ci0KLSAgICBlbGVtZW50OiBmdW5jdGlvbiAobm9kZSwgbW9ycGgsIGVudiwgc2NvcGUsIHZpc2l0
b3IpIHsKLSAgICAgIHZhciBwYXRoID0gbm9kZVsxXTsKLSAgICAgIHZhciBwYXJhbXMgPSBub2Rl
WzJdOwotICAgICAgdmFyIGhhc2ggPSBub2RlWzNdOwotCi0gICAgICB2YXIgcGFyYW1zQW5kSGFz
aCA9IGxpbmtQYXJhbXNBbmRIYXNoKGVudiwgc2NvcGUsIG1vcnBoLCBwYXRoLCBwYXJhbXMsIGhh
c2gpOwotCi0gICAgICBtb3JwaC5pc0RpcnR5ID0gbW9ycGguaXNTdWJ0cmVlRGlydHkgPSBmYWxz
ZTsKLSAgICAgIGVudi5ob29rcy5lbGVtZW50KG1vcnBoLCBlbnYsIHNjb3BlLCBwYXRoLCBwYXJh
bXNBbmRIYXNoWzBdLCBwYXJhbXNBbmRIYXNoWzFdLCB2aXNpdG9yKTsKLSAgICB9LAotCi0gICAg
YXR0cmlidXRlOiBmdW5jdGlvbiAobm9kZSwgbW9ycGgsIGVudiwgc2NvcGUpIHsKLSAgICAgIHZh
ciBuYW1lID0gbm9kZVsxXTsKLSAgICAgIHZhciB2YWx1ZSA9IG5vZGVbMl07Ci0KLSAgICAgIHZh
ciBwYXJhbXNBbmRIYXNoID0gbGlua1BhcmFtc0FuZEhhc2goZW52LCBzY29wZSwgbW9ycGgsICdA
YXR0cmlidXRlJywgW3ZhbHVlXSwgbnVsbCk7Ci0KLSAgICAgIG1vcnBoLmlzRGlydHkgPSBtb3Jw
aC5pc1N1YnRyZWVEaXJ0eSA9IGZhbHNlOwotICAgICAgZW52Lmhvb2tzLmF0dHJpYnV0ZShtb3Jw
aCwgZW52LCBzY29wZSwgbmFtZSwgcGFyYW1zQW5kSGFzaFswXVswXSk7Ci0gICAgfSwKLQotICAg
IGNvbXBvbmVudDogZnVuY3Rpb24gKG5vZGUsIG1vcnBoLCBlbnYsIHNjb3BlLCB0ZW1wbGF0ZSwg
dmlzaXRvcikgewotICAgICAgdmFyIHBhdGggPSBub2RlWzFdOwotICAgICAgdmFyIGF0dHJzID0g
bm9kZVsyXTsKLSAgICAgIHZhciB0ZW1wbGF0ZUlkID0gbm9kZVszXTsKLSAgICAgIHZhciBpbnZl
cnNlSWQgPSBub2RlWzRdOwotCi0gICAgICB2YXIgcGFyYW1zQW5kSGFzaCA9IGxpbmtQYXJhbXNB
bmRIYXNoKGVudiwgc2NvcGUsIG1vcnBoLCBwYXRoLCBbXSwgYXR0cnMpOwotICAgICAgdmFyIHRl
bXBsYXRlcyA9IHsKLSAgICAgICAgZGVmYXVsdDogdGVtcGxhdGUudGVtcGxhdGVzW3RlbXBsYXRl
SWRdLAotICAgICAgICBpbnZlcnNlOiB0ZW1wbGF0ZS50ZW1wbGF0ZXNbaW52ZXJzZUlkXQotICAg
ICAgfTsKLQotICAgICAgbW9ycGguaXNEaXJ0eSA9IG1vcnBoLmlzU3VidHJlZURpcnR5ID0gZmFs
c2U7Ci0gICAgICBlbnYuaG9va3MuY29tcG9uZW50KG1vcnBoLCBlbnYsIHNjb3BlLCBwYXRoLCBw
YXJhbXNBbmRIYXNoWzBdLCBwYXJhbXNBbmRIYXNoWzFdLCB0ZW1wbGF0ZXMsIHZpc2l0b3IpOwot
ICAgIH0sCi0KLSAgICBhdHRyaWJ1dGVzOiBmdW5jdGlvbiAobm9kZSwgbW9ycGgsIGVudiwgc2Nv
cGUsIHBhcmVudE1vcnBoLCB2aXNpdG9yKSB7Ci0gICAgICB2YXIgdGVtcGxhdGUgPSBub2RlWzFd
OwotCi0gICAgICBlbnYuaG9va3MuYXR0cmlidXRlcyhtb3JwaCwgZW52LCBzY29wZSwgdGVtcGxh
dGUsIHBhcmVudE1vcnBoLCB2aXNpdG9yKTsKLSAgICB9Ci0KLSAgfTsKLQotICBleHBvcnRzLkFs
d2F5c0RpcnR5VmlzaXRvciA9IEFsd2F5c0RpcnR5VmlzaXRvcjsKLSAgZXhwb3J0cy5kZWZhdWx0
ID0gewotICAgIGJsb2NrOiBmdW5jdGlvbiAobm9kZSwgbW9ycGgsIGVudiwgc2NvcGUsIHRlbXBs
YXRlLCB2aXNpdG9yKSB7Ci0gICAgICBkaXJ0eUNoZWNrKGVudiwgbW9ycGgsIHZpc2l0b3IsIGZ1
bmN0aW9uICh2aXNpdG9yKSB7Ci0gICAgICAgIEFsd2F5c0RpcnR5VmlzaXRvci5ibG9jayhub2Rl
LCBtb3JwaCwgZW52LCBzY29wZSwgdGVtcGxhdGUsIHZpc2l0b3IpOwotICAgICAgfSk7Ci0gICAg
fSwKLQotICAgIGlubGluZTogZnVuY3Rpb24gKG5vZGUsIG1vcnBoLCBlbnYsIHNjb3BlLCB2aXNp
dG9yKSB7Ci0gICAgICBkaXJ0eUNoZWNrKGVudiwgbW9ycGgsIHZpc2l0b3IsIGZ1bmN0aW9uICh2
aXNpdG9yKSB7Ci0gICAgICAgIEFsd2F5c0RpcnR5VmlzaXRvci5pbmxpbmUobm9kZSwgbW9ycGgs
IGVudiwgc2NvcGUsIHZpc2l0b3IpOwotICAgICAgfSk7Ci0gICAgfSwKLQotICAgIGNvbnRlbnQ6
IGZ1bmN0aW9uIChub2RlLCBtb3JwaCwgZW52LCBzY29wZSwgdmlzaXRvcikgewotICAgICAgZGly
dHlDaGVjayhlbnYsIG1vcnBoLCB2aXNpdG9yLCBmdW5jdGlvbiAodmlzaXRvcikgewotICAgICAg
ICBBbHdheXNEaXJ0eVZpc2l0b3IuY29udGVudChub2RlLCBtb3JwaCwgZW52LCBzY29wZSwgdmlz
aXRvcik7Ci0gICAgICB9KTsKLSAgICB9LAotCi0gICAgZWxlbWVudDogZnVuY3Rpb24gKG5vZGUs
IG1vcnBoLCBlbnYsIHNjb3BlLCB0ZW1wbGF0ZSwgdmlzaXRvcikgewotICAgICAgZGlydHlDaGVj
ayhlbnYsIG1vcnBoLCB2aXNpdG9yLCBmdW5jdGlvbiAodmlzaXRvcikgewotICAgICAgICBBbHdh
eXNEaXJ0eVZpc2l0b3IuZWxlbWVudChub2RlLCBtb3JwaCwgZW52LCBzY29wZSwgdGVtcGxhdGUs
IHZpc2l0b3IpOwotICAgICAgfSk7Ci0gICAgfSwKLQotICAgIGF0dHJpYnV0ZTogZnVuY3Rpb24g
KG5vZGUsIG1vcnBoLCBlbnYsIHNjb3BlLCB0ZW1wbGF0ZSkgewotICAgICAgZGlydHlDaGVjayhl
bnYsIG1vcnBoLCBudWxsLCBmdW5jdGlvbiAoKSB7Ci0gICAgICAgIEFsd2F5c0RpcnR5VmlzaXRv
ci5hdHRyaWJ1dGUobm9kZSwgbW9ycGgsIGVudiwgc2NvcGUsIHRlbXBsYXRlKTsKLSAgICAgIH0p
OwotICAgIH0sCi0KLSAgICBjb21wb25lbnQ6IGZ1bmN0aW9uIChub2RlLCBtb3JwaCwgZW52LCBz
Y29wZSwgdGVtcGxhdGUsIHZpc2l0b3IpIHsKLSAgICAgIGRpcnR5Q2hlY2soZW52LCBtb3JwaCwg
dmlzaXRvciwgZnVuY3Rpb24gKHZpc2l0b3IpIHsKLSAgICAgICAgQWx3YXlzRGlydHlWaXNpdG9y
LmNvbXBvbmVudChub2RlLCBtb3JwaCwgZW52LCBzY29wZSwgdGVtcGxhdGUsIHZpc2l0b3IpOwot
ICAgICAgfSk7Ci0gICAgfSwKLQotICAgIGF0dHJpYnV0ZXM6IGZ1bmN0aW9uIChub2RlLCBtb3Jw
aCwgZW52LCBzY29wZSwgcGFyZW50TW9ycGgsIHZpc2l0b3IpIHsKLSAgICAgIEFsd2F5c0RpcnR5
VmlzaXRvci5hdHRyaWJ1dGVzKG5vZGUsIG1vcnBoLCBlbnYsIHNjb3BlLCBwYXJlbnRNb3JwaCwg
dmlzaXRvcik7Ci0gICAgfQotICB9OwotCi0gIGZ1bmN0aW9uIGRpcnR5Q2hlY2soX2VudiwgbW9y
cGgsIHZpc2l0b3IsIGNhbGxiYWNrKSB7Ci0gICAgdmFyIGlzRGlydHkgPSBtb3JwaC5pc0RpcnR5
OwotICAgIHZhciBpc1N1YnRyZWVEaXJ0eSA9IG1vcnBoLmlzU3VidHJlZURpcnR5OwotICAgIHZh
ciBlbnYgPSBfZW52OwotCi0gICAgaWYgKGlzU3VidHJlZURpcnR5KSB7Ci0gICAgICB2aXNpdG9y
ID0gQWx3YXlzRGlydHlWaXNpdG9yOwotICAgIH0KLQotICAgIGlmIChpc0RpcnR5IHx8IGlzU3Vi
dHJlZURpcnR5KSB7Ci0gICAgICBjYWxsYmFjayh2aXNpdG9yKTsKLSAgICB9IGVsc2UgewotICAg
ICAgaWYgKG1vcnBoLmJ1aWxkQ2hpbGRFbnYpIHsKLSAgICAgICAgZW52ID0gbW9ycGguYnVpbGRD
aGlsZEVudihtb3JwaC5nZXRTdGF0ZSgpLCBlbnYpOwotICAgICAgfQotICAgICAgX2h0bWxiYXJz
VXRpbE1vcnBoVXRpbHMudmFsaWRhdGVDaGlsZE1vcnBocyhlbnYsIG1vcnBoLCB2aXNpdG9yKTsK
LSAgICB9Ci0gIH0KLQotICBmdW5jdGlvbiBpc0hlbHBlcihlbnYsIHNjb3BlLCBwYXRoKSB7Ci0g
ICAgcmV0dXJuIGVudi5ob29rcy5rZXl3b3Jkc1twYXRoXSAhPT0gdW5kZWZpbmVkIHx8IGVudi5o
b29rcy5oYXNIZWxwZXIoZW52LCBzY29wZSwgcGF0aCk7Ci0gIH0KLX0pOwotZW5pZmVkKCJodG1s
YmFycy1ydW50aW1lL3JlbmRlciIsIFsiZXhwb3J0cyIsICJodG1sYmFycy11dGlsL21vcnBoLXV0
aWxzIiwgImh0bWxiYXJzLXJ1bnRpbWUvbm9kZS12aXNpdG9yIiwgImh0bWxiYXJzLXJ1bnRpbWUv
bW9ycGgiLCAiaHRtbGJhcnMtdXRpbC90ZW1wbGF0ZS11dGlscyIsICJodG1sYmFycy11dGlsL3Zv
aWQtdGFnLW5hbWVzIl0sIGZ1bmN0aW9uIChleHBvcnRzLCBfaHRtbGJhcnNVdGlsTW9ycGhVdGls
cywgX2h0bWxiYXJzUnVudGltZU5vZGVWaXNpdG9yLCBfaHRtbGJhcnNSdW50aW1lTW9ycGgsIF9o
dG1sYmFyc1V0aWxUZW1wbGF0ZVV0aWxzLCBfaHRtbGJhcnNVdGlsVm9pZFRhZ05hbWVzKSB7Ci0g
ICJ1c2Ugc3RyaWN0IjsKLQotICBleHBvcnRzLmRlZmF1bHQgPSByZW5kZXI7Ci0gIGV4cG9ydHMu
UmVuZGVyT3B0aW9ucyA9IFJlbmRlck9wdGlvbnM7Ci0gIGV4cG9ydHMubWFudWFsRWxlbWVudCA9
IG1hbnVhbEVsZW1lbnQ7Ci0gIGV4cG9ydHMuYXR0YWNoQXR0cmlidXRlcyA9IGF0dGFjaEF0dHJp
YnV0ZXM7Ci0gIGV4cG9ydHMuY3JlYXRlQ2hpbGRNb3JwaCA9IGNyZWF0ZUNoaWxkTW9ycGg7Ci0g
IGV4cG9ydHMuZ2V0Q2FjaGVkRnJhZ21lbnQgPSBnZXRDYWNoZWRGcmFnbWVudDsKLQotICB2YXIg
c3ZnTmFtZXNwYWNlID0gImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIjsKLQotICBmdW5jdGlv
biByZW5kZXIodGVtcGxhdGUsIGVudiwgc2NvcGUsIG9wdGlvbnMpIHsKLSAgICB2YXIgZG9tID0g
ZW52LmRvbTsKLSAgICB2YXIgY29udGV4dHVhbEVsZW1lbnQ7Ci0KLSAgICBpZiAob3B0aW9ucykg
ewotICAgICAgaWYgKG9wdGlvbnMucmVuZGVyTm9kZSkgewotICAgICAgICBjb250ZXh0dWFsRWxl
bWVudCA9IG9wdGlvbnMucmVuZGVyTm9kZS5jb250ZXh0dWFsRWxlbWVudDsKLSAgICAgIH0gZWxz
ZSBpZiAob3B0aW9ucy5jb250ZXh0dWFsRWxlbWVudCkgewotICAgICAgICBjb250ZXh0dWFsRWxl
bWVudCA9IG9wdGlvbnMuY29udGV4dHVhbEVsZW1lbnQ7Ci0gICAgICB9Ci0gICAgfQotCi0gICAg
ZG9tLmRldGVjdE5hbWVzcGFjZShjb250ZXh0dWFsRWxlbWVudCk7Ci0KLSAgICB2YXIgcmVuZGVy
UmVzdWx0ID0gUmVuZGVyUmVzdWx0LmJ1aWxkKGVudiwgc2NvcGUsIHRlbXBsYXRlLCBvcHRpb25z
LCBjb250ZXh0dWFsRWxlbWVudCk7Ci0gICAgcmVuZGVyUmVzdWx0LnJlbmRlcigpOwotCi0gICAg
cmV0dXJuIHJlbmRlclJlc3VsdDsKLSAgfQotCi0gIGZ1bmN0aW9uIFJlbmRlck9wdGlvbnMocmVu
ZGVyTm9kZSwgc2VsZiwgYmxvY2tBcmd1bWVudHMsIGNvbnRleHR1YWxFbGVtZW50KSB7Ci0gICAg
dGhpcy5yZW5kZXJOb2RlID0gcmVuZGVyTm9kZSB8fCBudWxsOwotICAgIHRoaXMuc2VsZiA9IHNl
bGY7Ci0gICAgdGhpcy5ibG9ja0FyZ3VtZW50cyA9IGJsb2NrQXJndW1lbnRzIHx8IG51bGw7Ci0g
ICAgdGhpcy5jb250ZXh0dWFsRWxlbWVudCA9IGNvbnRleHR1YWxFbGVtZW50IHx8IG51bGw7Ci0g
IH0KLQotICBmdW5jdGlvbiBSZW5kZXJSZXN1bHQoZW52LCBzY29wZSwgb3B0aW9ucywgcm9vdE5v
ZGUsIG93bmVyTm9kZSwgbm9kZXMsIGZyYWdtZW50LCB0ZW1wbGF0ZSwgc2hvdWxkU2V0Q29udGVu
dCkgewotICAgIHRoaXMucm9vdCA9IHJvb3ROb2RlOwotICAgIHRoaXMuZnJhZ21lbnQgPSBmcmFn
bWVudDsKLQotICAgIHRoaXMubm9kZXMgPSBub2RlczsKLSAgICB0aGlzLnRlbXBsYXRlID0gdGVt
cGxhdGU7Ci0gICAgdGhpcy5zdGF0ZW1lbnRzID0gdGVtcGxhdGUuc3RhdGVtZW50cy5zbGljZSgp
OwotICAgIHRoaXMuZW52ID0gZW52OwotICAgIHRoaXMuc2NvcGUgPSBzY29wZTsKLSAgICB0aGlz
LnNob3VsZFNldENvbnRlbnQgPSBzaG91bGRTZXRDb250ZW50OwotCi0gICAgaWYgKG9wdGlvbnMu
c2VsZiAhPT0gdW5kZWZpbmVkKSB7Ci0gICAgICB0aGlzLmJpbmRTZWxmKG9wdGlvbnMuc2VsZik7
Ci0gICAgfQotICAgIGlmIChvcHRpb25zLmJsb2NrQXJndW1lbnRzICE9PSB1bmRlZmluZWQpIHsK
LSAgICAgIHRoaXMuYmluZExvY2FscyhvcHRpb25zLmJsb2NrQXJndW1lbnRzKTsKLSAgICB9Ci0K
LSAgICB0aGlzLmluaXRpYWxpemVOb2Rlcyhvd25lck5vZGUpOwotICB9Ci0KLSAgUmVuZGVyUmVz
dWx0LmJ1aWxkID0gZnVuY3Rpb24gKGVudiwgc2NvcGUsIHRlbXBsYXRlLCBvcHRpb25zLCBjb250
ZXh0dWFsRWxlbWVudCkgewotICAgIHZhciBkb20gPSBlbnYuZG9tOwotICAgIHZhciBmcmFnbWVu
dCA9IGdldENhY2hlZEZyYWdtZW50KHRlbXBsYXRlLCBlbnYpOwotICAgIHZhciBub2RlcyA9IHRl
bXBsYXRlLmJ1aWxkUmVuZGVyTm9kZXMoZG9tLCBmcmFnbWVudCwgY29udGV4dHVhbEVsZW1lbnQp
OwotCi0gICAgdmFyIHJvb3ROb2RlLCBvd25lck5vZGUsIHNob3VsZFNldENvbnRlbnQ7Ci0KLSAg
ICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnJlbmRlck5vZGUpIHsKLSAgICAgIHJvb3ROb2RlID0g
b3B0aW9ucy5yZW5kZXJOb2RlOwotICAgICAgb3duZXJOb2RlID0gcm9vdE5vZGUub3duZXJOb2Rl
OwotICAgICAgc2hvdWxkU2V0Q29udGVudCA9IHRydWU7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJv
b3ROb2RlID0gZG9tLmNyZWF0ZU1vcnBoKG51bGwsIGZyYWdtZW50LmZpcnN0Q2hpbGQsIGZyYWdt
ZW50Lmxhc3RDaGlsZCwgY29udGV4dHVhbEVsZW1lbnQpOwotICAgICAgb3duZXJOb2RlID0gcm9v
dE5vZGU7Ci0gICAgICByb290Tm9kZS5vd25lck5vZGUgPSBvd25lck5vZGU7Ci0gICAgICBzaG91
bGRTZXRDb250ZW50ID0gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKHJvb3ROb2RlLmNoaWxkTm9k
ZXMpIHsKLSAgICAgIF9odG1sYmFyc1V0aWxNb3JwaFV0aWxzLnZpc2l0Q2hpbGRyZW4ocm9vdE5v
ZGUuY2hpbGROb2RlcywgZnVuY3Rpb24gKG5vZGUpIHsKLSAgICAgICAgX2h0bWxiYXJzVXRpbFRl
bXBsYXRlVXRpbHMuY2xlYXJNb3JwaChub2RlLCBlbnYsIHRydWUpOwotICAgICAgfSk7Ci0gICAg
fQotCi0gICAgcm9vdE5vZGUuY2hpbGROb2RlcyA9IG5vZGVzOwotICAgIHJldHVybiBuZXcgUmVu
ZGVyUmVzdWx0KGVudiwgc2NvcGUsIG9wdGlvbnMsIHJvb3ROb2RlLCBvd25lck5vZGUsIG5vZGVz
LCBmcmFnbWVudCwgdGVtcGxhdGUsIHNob3VsZFNldENvbnRlbnQpOwotICB9OwotCi0gIGZ1bmN0
aW9uIG1hbnVhbEVsZW1lbnQodGFnTmFtZSwgYXR0cmlidXRlcywgX2lzRW1wdHkpIHsKLSAgICB2
YXIgc3RhdGVtZW50cyA9IFtdOwotCi0gICAgZm9yICh2YXIga2V5IGluIGF0dHJpYnV0ZXMpIHsK
LSAgICAgIGlmICh0eXBlb2YgYXR0cmlidXRlc1trZXldID09PSAnc3RyaW5nJykgewotICAgICAg
ICBjb250aW51ZTsKLSAgICAgIH0KLSAgICAgIHN0YXRlbWVudHMucHVzaChbImF0dHJpYnV0ZSIs
IGtleSwgYXR0cmlidXRlc1trZXldXSk7Ci0gICAgfQotCi0gICAgdmFyIGlzRW1wdHkgPSBfaXNF
bXB0eSB8fCBfaHRtbGJhcnNVdGlsVm9pZFRhZ05hbWVzLmRlZmF1bHRbdGFnTmFtZV07Ci0KLSAg
ICBpZiAoIWlzRW1wdHkpIHsKLSAgICAgIHN0YXRlbWVudHMucHVzaChbJ2NvbnRlbnQnLCAneWll
bGQnXSk7Ci0gICAgfQotCi0gICAgdmFyIHRlbXBsYXRlID0gewotICAgICAgYXJpdHk6IDAsCi0g
ICAgICBjYWNoZWRGcmFnbWVudDogbnVsbCwKLSAgICAgIGhhc1JlbmRlcmVkOiBmYWxzZSwKLSAg
ICAgIGJ1aWxkRnJhZ21lbnQ6IGZ1bmN0aW9uIGJ1aWxkRnJhZ21lbnQoZG9tKSB7Ci0gICAgICAg
IHZhciBlbDAgPSBkb20uY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOwotICAgICAgICBpZiAodGFn
TmFtZSA9PT0gJ3N2ZycpIHsKLSAgICAgICAgICBkb20uc2V0TmFtZXNwYWNlKHN2Z05hbWVzcGFj
ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgdmFyIGVsMSA9IGRvbS5jcmVhdGVFbGVtZW50KHRhZ05h
bWUpOwotCi0gICAgICAgIGZvciAodmFyIGtleSBpbiBhdHRyaWJ1dGVzKSB7Ci0gICAgICAgICAg
aWYgKHR5cGVvZiBhdHRyaWJ1dGVzW2tleV0gIT09ICdzdHJpbmcnKSB7Ci0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZG9tLnNldEF0dHJpYnV0ZShlbDEsIGtl
eSwgYXR0cmlidXRlc1trZXldKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghaXNFbXB0eSkg
ewotICAgICAgICAgIHZhciBlbDIgPSBkb20uY3JlYXRlQ29tbWVudCgiIik7Ci0gICAgICAgICAg
ZG9tLmFwcGVuZENoaWxkKGVsMSwgZWwyKTsKLSAgICAgICAgfQotCi0gICAgICAgIGRvbS5hcHBl
bmRDaGlsZChlbDAsIGVsMSk7Ci0KLSAgICAgICAgcmV0dXJuIGVsMDsKLSAgICAgIH0sCi0gICAg
ICBidWlsZFJlbmRlck5vZGVzOiBmdW5jdGlvbiBidWlsZFJlbmRlck5vZGVzKGRvbSwgZnJhZ21l
bnQpIHsKLSAgICAgICAgdmFyIGVsZW1lbnQgPSBkb20uY2hpbGRBdChmcmFnbWVudCwgWzBdKTsK
LSAgICAgICAgdmFyIG1vcnBocyA9IFtdOwotCi0gICAgICAgIGZvciAodmFyIGtleSBpbiBhdHRy
aWJ1dGVzKSB7Ci0gICAgICAgICAgaWYgKHR5cGVvZiBhdHRyaWJ1dGVzW2tleV0gPT09ICdzdHJp
bmcnKSB7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgbW9y
cGhzLnB1c2goZG9tLmNyZWF0ZUF0dHJNb3JwaChlbGVtZW50LCBrZXkpKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGlmICghaXNFbXB0eSkgewotICAgICAgICAgIG1vcnBocy5wdXNoKGRvbS5jcmVh
dGVNb3JwaEF0KGVsZW1lbnQsIDAsIDApKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBt
b3JwaHM7Ci0gICAgICB9LAotICAgICAgc3RhdGVtZW50czogc3RhdGVtZW50cywKLSAgICAgIGxv
Y2FsczogW10sCi0gICAgICB0ZW1wbGF0ZXM6IFtdCi0gICAgfTsKLQotICAgIHJldHVybiB0ZW1w
bGF0ZTsKLSAgfQotCi0gIGZ1bmN0aW9uIGF0dGFjaEF0dHJpYnV0ZXMoYXR0cmlidXRlcykgewot
ICAgIHZhciBzdGF0ZW1lbnRzID0gW107Ci0KLSAgICBmb3IgKHZhciBrZXkgaW4gYXR0cmlidXRl
cykgewotICAgICAgaWYgKHR5cGVvZiBhdHRyaWJ1dGVzW2tleV0gPT09ICdzdHJpbmcnKSB7Ci0g
ICAgICAgIGNvbnRpbnVlOwotICAgICAgfQotICAgICAgc3RhdGVtZW50cy5wdXNoKFsiYXR0cmli
dXRlIiwga2V5LCBhdHRyaWJ1dGVzW2tleV1dKTsKLSAgICB9Ci0KLSAgICB2YXIgdGVtcGxhdGUg
PSB7Ci0gICAgICBhcml0eTogMCwKLSAgICAgIGNhY2hlZEZyYWdtZW50OiBudWxsLAotICAgICAg
aGFzUmVuZGVyZWQ6IGZhbHNlLAotICAgICAgYnVpbGRGcmFnbWVudDogZnVuY3Rpb24gYnVpbGRG
cmFnbWVudChkb20pIHsKLSAgICAgICAgdmFyIGVsMCA9IHRoaXMuZWxlbWVudDsKLSAgICAgICAg
aWYgKGVsMC5uYW1lc3BhY2VVUkkgPT09ICJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIpIHsK
LSAgICAgICAgICBkb20uc2V0TmFtZXNwYWNlKHN2Z05hbWVzcGFjZSk7Ci0gICAgICAgIH0KLSAg
ICAgICAgZm9yICh2YXIga2V5IGluIGF0dHJpYnV0ZXMpIHsKLSAgICAgICAgICBpZiAodHlwZW9m
IGF0dHJpYnV0ZXNba2V5XSAhPT0gJ3N0cmluZycpIHsKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgIH0KLSAgICAgICAgICBkb20uc2V0QXR0cmlidXRlKGVsMCwga2V5LCBhdHRyaWJ1
dGVzW2tleV0pOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGVsMDsKLSAgICAgIH0sCi0g
ICAgICBidWlsZFJlbmRlck5vZGVzOiBmdW5jdGlvbiBidWlsZFJlbmRlck5vZGVzKGRvbSkgewot
ICAgICAgICB2YXIgZWxlbWVudCA9IHRoaXMuZWxlbWVudDsKLSAgICAgICAgdmFyIG1vcnBocyA9
IFtdOwotCi0gICAgICAgIGZvciAodmFyIGtleSBpbiBhdHRyaWJ1dGVzKSB7Ci0gICAgICAgICAg
aWYgKHR5cGVvZiBhdHRyaWJ1dGVzW2tleV0gPT09ICdzdHJpbmcnKSB7Ci0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgbW9ycGhzLnB1c2goZG9tLmNyZWF0ZUF0
dHJNb3JwaChlbGVtZW50LCBrZXkpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBtb3Jw
aHM7Ci0gICAgICB9LAotICAgICAgc3RhdGVtZW50czogc3RhdGVtZW50cywKLSAgICAgIGxvY2Fs
czogW10sCi0gICAgICB0ZW1wbGF0ZXM6IFtdLAotICAgICAgZWxlbWVudDogbnVsbAotICAgIH07
Ci0KLSAgICByZXR1cm4gdGVtcGxhdGU7Ci0gIH0KLQotICBSZW5kZXJSZXN1bHQucHJvdG90eXBl
LmluaXRpYWxpemVOb2RlcyA9IGZ1bmN0aW9uIChvd25lck5vZGUpIHsKLSAgICB2YXIgY2hpbGRO
b2RlcyA9IHRoaXMucm9vdC5jaGlsZE5vZGVzOwotCi0gICAgZm9yICh2YXIgaSA9IDAsIGwgPSBj
aGlsZE5vZGVzLmxlbmd0aDsgaSA8IGw7IGkrKykgewotICAgICAgY2hpbGROb2Rlc1tpXS5vd25l
ck5vZGUgPSBvd25lck5vZGU7Ci0gICAgfQotICB9OwotCi0gIFJlbmRlclJlc3VsdC5wcm90b3R5
cGUucmVuZGVyID0gZnVuY3Rpb24gKCkgewotICAgIHRoaXMucm9vdC5sYXN0UmVzdWx0ID0gdGhp
czsKLSAgICB0aGlzLnJvb3QucmVuZGVyZWQgPSB0cnVlOwotICAgIHRoaXMucG9wdWxhdGVOb2Rl
cyhfaHRtbGJhcnNSdW50aW1lTm9kZVZpc2l0b3IuQWx3YXlzRGlydHlWaXNpdG9yKTsKLQotICAg
IGlmICh0aGlzLnNob3VsZFNldENvbnRlbnQgJiYgdGhpcy5yb290LnNldENvbnRlbnQpIHsKLSAg
ICAgIHRoaXMucm9vdC5zZXRDb250ZW50KHRoaXMuZnJhZ21lbnQpOwotICAgIH0KLSAgfTsKLQot
ICBSZW5kZXJSZXN1bHQucHJvdG90eXBlLmRpcnR5ID0gZnVuY3Rpb24gKCkgewotICAgIF9odG1s
YmFyc1V0aWxNb3JwaFV0aWxzLnZpc2l0Q2hpbGRyZW4oW3RoaXMucm9vdF0sIGZ1bmN0aW9uIChu
b2RlKSB7Ci0gICAgICBub2RlLmlzRGlydHkgPSB0cnVlOwotICAgIH0pOwotICB9OwotCi0gIFJl
bmRlclJlc3VsdC5wcm90b3R5cGUucmV2YWxpZGF0ZSA9IGZ1bmN0aW9uIChlbnYsIHNlbGYsIGJs
b2NrQXJndW1lbnRzLCBzY29wZSkgewotICAgIHRoaXMucmV2YWxpZGF0ZVdpdGgoZW52LCBzY29w
ZSwgc2VsZiwgYmxvY2tBcmd1bWVudHMsIF9odG1sYmFyc1J1bnRpbWVOb2RlVmlzaXRvci5kZWZh
dWx0KTsKLSAgfTsKLQotICBSZW5kZXJSZXN1bHQucHJvdG90eXBlLnJlcmVuZGVyID0gZnVuY3Rp
b24gKGVudiwgc2VsZiwgYmxvY2tBcmd1bWVudHMsIHNjb3BlKSB7Ci0gICAgdGhpcy5yZXZhbGlk
YXRlV2l0aChlbnYsIHNjb3BlLCBzZWxmLCBibG9ja0FyZ3VtZW50cywgX2h0bWxiYXJzUnVudGlt
ZU5vZGVWaXNpdG9yLkFsd2F5c0RpcnR5VmlzaXRvcik7Ci0gIH07Ci0KLSAgUmVuZGVyUmVzdWx0
LnByb3RvdHlwZS5yZXZhbGlkYXRlV2l0aCA9IGZ1bmN0aW9uIChlbnYsIHNjb3BlLCBzZWxmLCBi
bG9ja0FyZ3VtZW50cywgdmlzaXRvcikgewotICAgIGlmIChlbnYgIT09IHVuZGVmaW5lZCkgewot
ICAgICAgdGhpcy5lbnYgPSBlbnY7Ci0gICAgfQotICAgIGlmIChzY29wZSAhPT0gdW5kZWZpbmVk
KSB7Ci0gICAgICB0aGlzLnNjb3BlID0gc2NvcGU7Ci0gICAgfQotICAgIHRoaXMudXBkYXRlU2Nv
cGUoKTsKLQotICAgIGlmIChzZWxmICE9PSB1bmRlZmluZWQpIHsKLSAgICAgIHRoaXMudXBkYXRl
U2VsZihzZWxmKTsKLSAgICB9Ci0gICAgaWYgKGJsb2NrQXJndW1lbnRzICE9PSB1bmRlZmluZWQp
IHsKLSAgICAgIHRoaXMudXBkYXRlTG9jYWxzKGJsb2NrQXJndW1lbnRzKTsKLSAgICB9Ci0KLSAg
ICB0aGlzLnBvcHVsYXRlTm9kZXModmlzaXRvcik7Ci0gIH07Ci0KLSAgUmVuZGVyUmVzdWx0LnBy
b3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkgewotICAgIHZhciByb290Tm9kZSA9IHRoaXMu
cm9vdDsKLSAgICBfaHRtbGJhcnNVdGlsVGVtcGxhdGVVdGlscy5jbGVhck1vcnBoKHJvb3ROb2Rl
LCB0aGlzLmVudiwgdHJ1ZSk7Ci0gIH07Ci0KLSAgUmVuZGVyUmVzdWx0LnByb3RvdHlwZS5wb3B1
bGF0ZU5vZGVzID0gZnVuY3Rpb24gKHZpc2l0b3IpIHsKLSAgICB2YXIgZW52ID0gdGhpcy5lbnY7
Ci0gICAgdmFyIHNjb3BlID0gdGhpcy5zY29wZTsKLSAgICB2YXIgdGVtcGxhdGUgPSB0aGlzLnRl
bXBsYXRlOwotICAgIHZhciBub2RlcyA9IHRoaXMubm9kZXM7Ci0gICAgdmFyIHN0YXRlbWVudHMg
PSB0aGlzLnN0YXRlbWVudHM7Ci0gICAgdmFyIGksIGw7Ci0KLSAgICBmb3IgKGkgPSAwLCBsID0g
c3RhdGVtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKLSAgICAgIHZhciBzdGF0ZW1lbnQgPSBz
dGF0ZW1lbnRzW2ldOwotICAgICAgdmFyIG1vcnBoID0gbm9kZXNbaV07Ci0KLSAgICAgIGlmIChl
bnYuaG9va3Mud2lsbFJlbmRlck5vZGUpIHsKLSAgICAgICAgZW52Lmhvb2tzLndpbGxSZW5kZXJO
b2RlKG1vcnBoLCBlbnYsIHNjb3BlKTsKLSAgICAgIH0KLQotICAgICAgc3dpdGNoIChzdGF0ZW1l
bnRbMF0pIHsKLSAgICAgICAgY2FzZSAnYmxvY2snOgotICAgICAgICAgIHZpc2l0b3IuYmxvY2so
c3RhdGVtZW50LCBtb3JwaCwgZW52LCBzY29wZSwgdGVtcGxhdGUsIHZpc2l0b3IpO2JyZWFrOwot
ICAgICAgICBjYXNlICdpbmxpbmUnOgotICAgICAgICAgIHZpc2l0b3IuaW5saW5lKHN0YXRlbWVu
dCwgbW9ycGgsIGVudiwgc2NvcGUsIHZpc2l0b3IpO2JyZWFrOwotICAgICAgICBjYXNlICdjb250
ZW50JzoKLSAgICAgICAgICB2aXNpdG9yLmNvbnRlbnQoc3RhdGVtZW50LCBtb3JwaCwgZW52LCBz
Y29wZSwgdmlzaXRvcik7YnJlYWs7Ci0gICAgICAgIGNhc2UgJ2VsZW1lbnQnOgotICAgICAgICAg
IHZpc2l0b3IuZWxlbWVudChzdGF0ZW1lbnQsIG1vcnBoLCBlbnYsIHNjb3BlLCB0ZW1wbGF0ZSwg
dmlzaXRvcik7YnJlYWs7Ci0gICAgICAgIGNhc2UgJ2F0dHJpYnV0ZSc6Ci0gICAgICAgICAgdmlz
aXRvci5hdHRyaWJ1dGUoc3RhdGVtZW50LCBtb3JwaCwgZW52LCBzY29wZSk7YnJlYWs7Ci0gICAg
ICAgIGNhc2UgJ2NvbXBvbmVudCc6Ci0gICAgICAgICAgdmlzaXRvci5jb21wb25lbnQoc3RhdGVt
ZW50LCBtb3JwaCwgZW52LCBzY29wZSwgdGVtcGxhdGUsIHZpc2l0b3IpO2JyZWFrOwotICAgICAg
fQotCi0gICAgICBpZiAoZW52Lmhvb2tzLmRpZFJlbmRlck5vZGUpIHsKLSAgICAgICAgZW52Lmhv
b2tzLmRpZFJlbmRlck5vZGUobW9ycGgsIGVudiwgc2NvcGUpOwotICAgICAgfQotICAgIH0KLSAg
fTsKLQotICBSZW5kZXJSZXN1bHQucHJvdG90eXBlLmJpbmRTY29wZSA9IGZ1bmN0aW9uICgpIHsK
LSAgICB0aGlzLmVudi5ob29rcy5iaW5kU2NvcGUodGhpcy5lbnYsIHRoaXMuc2NvcGUpOwotICB9
OwotCi0gIFJlbmRlclJlc3VsdC5wcm90b3R5cGUudXBkYXRlU2NvcGUgPSBmdW5jdGlvbiAoKSB7
Ci0gICAgdGhpcy5lbnYuaG9va3MudXBkYXRlU2NvcGUodGhpcy5lbnYsIHRoaXMuc2NvcGUpOwot
ICB9OwotCi0gIFJlbmRlclJlc3VsdC5wcm90b3R5cGUuYmluZFNlbGYgPSBmdW5jdGlvbiAoc2Vs
ZikgewotICAgIHRoaXMuZW52Lmhvb2tzLmJpbmRTZWxmKHRoaXMuZW52LCB0aGlzLnNjb3BlLCBz
ZWxmKTsKLSAgfTsKLQotICBSZW5kZXJSZXN1bHQucHJvdG90eXBlLnVwZGF0ZVNlbGYgPSBmdW5j
dGlvbiAoc2VsZikgewotICAgIHRoaXMuZW52Lmhvb2tzLnVwZGF0ZVNlbGYodGhpcy5lbnYsIHRo
aXMuc2NvcGUsIHNlbGYpOwotICB9OwotCi0gIFJlbmRlclJlc3VsdC5wcm90b3R5cGUuYmluZExv
Y2FscyA9IGZ1bmN0aW9uIChibG9ja0FyZ3VtZW50cykgewotICAgIHZhciBsb2NhbE5hbWVzID0g
dGhpcy50ZW1wbGF0ZS5sb2NhbHM7Ci0KLSAgICBmb3IgKHZhciBpID0gMCwgbCA9IGxvY2FsTmFt
ZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7Ci0gICAgICB0aGlzLmVudi5ob29rcy5iaW5kTG9jYWwo
dGhpcy5lbnYsIHRoaXMuc2NvcGUsIGxvY2FsTmFtZXNbaV0sIGJsb2NrQXJndW1lbnRzW2ldKTsK
LSAgICB9Ci0gIH07Ci0KLSAgUmVuZGVyUmVzdWx0LnByb3RvdHlwZS51cGRhdGVMb2NhbHMgPSBm
dW5jdGlvbiAoYmxvY2tBcmd1bWVudHMpIHsKLSAgICB2YXIgbG9jYWxOYW1lcyA9IHRoaXMudGVt
cGxhdGUubG9jYWxzOwotCi0gICAgZm9yICh2YXIgaSA9IDAsIGwgPSBsb2NhbE5hbWVzLmxlbmd0
aDsgaSA8IGw7IGkrKykgewotICAgICAgdGhpcy5lbnYuaG9va3MudXBkYXRlTG9jYWwodGhpcy5l
bnYsIHRoaXMuc2NvcGUsIGxvY2FsTmFtZXNbaV0sIGJsb2NrQXJndW1lbnRzW2ldKTsKLSAgICB9
Ci0gIH07Ci0KLSAgZnVuY3Rpb24gaW5pdGlhbGl6ZU5vZGUobm9kZSwgb3duZXIpIHsKLSAgICBu
b2RlLm93bmVyTm9kZSA9IG93bmVyOwotICB9Ci0KLSAgZnVuY3Rpb24gY3JlYXRlQ2hpbGRNb3Jw
aChkb20sIHBhcmVudE1vcnBoLCBjb250ZXh0dWFsRWxlbWVudCkgewotICAgIHZhciBtb3JwaCA9
IF9odG1sYmFyc1J1bnRpbWVNb3JwaC5kZWZhdWx0LmVtcHR5KGRvbSwgY29udGV4dHVhbEVsZW1l
bnQgfHwgcGFyZW50TW9ycGguY29udGV4dHVhbEVsZW1lbnQpOwotICAgIGluaXRpYWxpemVOb2Rl
KG1vcnBoLCBwYXJlbnRNb3JwaC5vd25lck5vZGUpOwotICAgIHJldHVybiBtb3JwaDsKLSAgfQot
Ci0gIGZ1bmN0aW9uIGdldENhY2hlZEZyYWdtZW50KHRlbXBsYXRlLCBlbnYpIHsKLSAgICB2YXIg
ZG9tID0gZW52LmRvbSwKLSAgICAgICAgZnJhZ21lbnQ7Ci0gICAgaWYgKGVudi51c2VGcmFnbWVu
dENhY2hlICYmIGRvbS5jYW5DbG9uZSkgewotICAgICAgaWYgKHRlbXBsYXRlLmNhY2hlZEZyYWdt
ZW50ID09PSBudWxsKSB7Ci0gICAgICAgIGZyYWdtZW50ID0gdGVtcGxhdGUuYnVpbGRGcmFnbWVu
dChkb20pOwotICAgICAgICBpZiAodGVtcGxhdGUuaGFzUmVuZGVyZWQpIHsKLSAgICAgICAgICB0
ZW1wbGF0ZS5jYWNoZWRGcmFnbWVudCA9IGZyYWdtZW50OwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgIHRlbXBsYXRlLmhhc1JlbmRlcmVkID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgfQot
ICAgICAgaWYgKHRlbXBsYXRlLmNhY2hlZEZyYWdtZW50KSB7Ci0gICAgICAgIGZyYWdtZW50ID0g
ZG9tLmNsb25lTm9kZSh0ZW1wbGF0ZS5jYWNoZWRGcmFnbWVudCwgdHJ1ZSk7Ci0gICAgICB9Ci0g
ICAgfSBlbHNlIGlmICghZnJhZ21lbnQpIHsKLSAgICAgIGZyYWdtZW50ID0gdGVtcGxhdGUuYnVp
bGRGcmFnbWVudChkb20pOwotICAgIH0KLQotICAgIHJldHVybiBmcmFnbWVudDsKLSAgfQotfSk7
Ci1lbmlmZWQoJ2h0bWxiYXJzLXV0aWwnLCBbJ2V4cG9ydHMnLCAnaHRtbGJhcnMtdXRpbC9zYWZl
LXN0cmluZycsICdodG1sYmFycy11dGlsL2hhbmRsZWJhcnMvdXRpbHMnLCAnaHRtbGJhcnMtdXRp
bC9uYW1lc3BhY2VzJywgJ2h0bWxiYXJzLXV0aWwvbW9ycGgtdXRpbHMnXSwgZnVuY3Rpb24gKGV4
cG9ydHMsIF9odG1sYmFyc1V0aWxTYWZlU3RyaW5nLCBfaHRtbGJhcnNVdGlsSGFuZGxlYmFyc1V0
aWxzLCBfaHRtbGJhcnNVdGlsTmFtZXNwYWNlcywgX2h0bWxiYXJzVXRpbE1vcnBoVXRpbHMpIHsK
LSAgJ3VzZSBzdHJpY3QnOwotCi0gIGV4cG9ydHMuU2FmZVN0cmluZyA9IF9odG1sYmFyc1V0aWxT
YWZlU3RyaW5nLmRlZmF1bHQ7Ci0gIGV4cG9ydHMuZXNjYXBlRXhwcmVzc2lvbiA9IF9odG1sYmFy
c1V0aWxIYW5kbGViYXJzVXRpbHMuZXNjYXBlRXhwcmVzc2lvbjsKLSAgZXhwb3J0cy5nZXRBdHRy
TmFtZXNwYWNlID0gX2h0bWxiYXJzVXRpbE5hbWVzcGFjZXMuZ2V0QXR0ck5hbWVzcGFjZTsKLSAg
ZXhwb3J0cy52YWxpZGF0ZUNoaWxkTW9ycGhzID0gX2h0bWxiYXJzVXRpbE1vcnBoVXRpbHMudmFs
aWRhdGVDaGlsZE1vcnBoczsKLSAgZXhwb3J0cy5saW5rUGFyYW1zID0gX2h0bWxiYXJzVXRpbE1v
cnBoVXRpbHMubGlua1BhcmFtczsKLSAgZXhwb3J0cy5kdW1wID0gX2h0bWxiYXJzVXRpbE1vcnBo
VXRpbHMuZHVtcDsKLX0pOwotZW5pZmVkKCdodG1sYmFycy11dGlsL2FycmF5LXV0aWxzJywgWydl
eHBvcnRzJ10sIGZ1bmN0aW9uIChleHBvcnRzKSB7Ci0gICd1c2Ugc3RyaWN0JzsKLQotICBleHBv
cnRzLmZvckVhY2ggPSBmb3JFYWNoOwotICBleHBvcnRzLm1hcCA9IG1hcDsKLQotICBmdW5jdGlv
biBmb3JFYWNoKGFycmF5LCBjYWxsYmFjaywgYmluZGluZykgewotICAgIHZhciBpLCBsOwotICAg
IGlmIChiaW5kaW5nID09PSB1bmRlZmluZWQpIHsKLSAgICAgIGZvciAoaSA9IDAsIGwgPSBhcnJh
eS5sZW5ndGg7IGkgPCBsOyBpKyspIHsKLSAgICAgICAgY2FsbGJhY2soYXJyYXlbaV0sIGksIGFy
cmF5KTsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgZm9yIChpID0gMCwgbCA9IGFycmF5
Lmxlbmd0aDsgaSA8IGw7IGkrKykgewotICAgICAgICBjYWxsYmFjay5jYWxsKGJpbmRpbmcsIGFy
cmF5W2ldLCBpLCBhcnJheSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gbWFw
KGFycmF5LCBjYWxsYmFjaykgewotICAgIHZhciBvdXRwdXQgPSBbXTsKLSAgICB2YXIgaSwgbDsK
LQotICAgIGZvciAoaSA9IDAsIGwgPSBhcnJheS5sZW5ndGg7IGkgPCBsOyBpKyspIHsKLSAgICAg
IG91dHB1dC5wdXNoKGNhbGxiYWNrKGFycmF5W2ldLCBpLCBhcnJheSkpOwotICAgIH0KLQotICAg
IHJldHVybiBvdXRwdXQ7Ci0gIH0KLQotICB2YXIgZ2V0SWR4OwotICBpZiAoQXJyYXkucHJvdG90
eXBlLmluZGV4T2YpIHsKLSAgICBnZXRJZHggPSBmdW5jdGlvbiAoYXJyYXksIG9iaiwgZnJvbSkg
ewotICAgICAgcmV0dXJuIGFycmF5LmluZGV4T2Yob2JqLCBmcm9tKTsKLSAgICB9OwotICB9IGVs
c2UgewotICAgIGdldElkeCA9IGZ1bmN0aW9uIChhcnJheSwgb2JqLCBmcm9tKSB7Ci0gICAgICBp
ZiAoZnJvbSA9PT0gdW5kZWZpbmVkIHx8IGZyb20gPT09IG51bGwpIHsKLSAgICAgICAgZnJvbSA9
IDA7Ci0gICAgICB9IGVsc2UgaWYgKGZyb20gPCAwKSB7Ci0gICAgICAgIGZyb20gPSBNYXRoLm1h
eCgwLCBhcnJheS5sZW5ndGggKyBmcm9tKTsKLSAgICAgIH0KLSAgICAgIGZvciAodmFyIGkgPSBm
cm9tLCBsID0gYXJyYXkubGVuZ3RoOyBpIDwgbDsgaSsrKSB7Ci0gICAgICAgIGlmIChhcnJheVtp
XSA9PT0gb2JqKSB7Ci0gICAgICAgICAgcmV0dXJuIGk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAg
ICAgIHJldHVybiAtMTsKLSAgICB9OwotICB9Ci0KLSAgdmFyIGlzQXJyYXkgPSBBcnJheS5pc0Fy
cmF5IHx8IGZ1bmN0aW9uIChhcnJheSkgewotICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRv
U3RyaW5nLmNhbGwoYXJyYXkpID09PSAnW29iamVjdCBBcnJheV0nOwotICB9OwotCi0gIGV4cG9y
dHMuaXNBcnJheSA9IGlzQXJyYXk7Ci0gIHZhciBpbmRleE9mQXJyYXkgPSBnZXRJZHg7Ci0gIGV4
cG9ydHMuaW5kZXhPZkFycmF5ID0gaW5kZXhPZkFycmF5OwotfSk7Ci1lbmlmZWQoJ2h0bWxiYXJz
LXV0aWwvaGFuZGxlYmFycy9zYWZlLXN0cmluZycsIFsnZXhwb3J0cyddLCBmdW5jdGlvbiAoZXhw
b3J0cykgewotICAvLyBCdWlsZCBvdXQgb3VyIGJhc2ljIFNhZmVTdHJpbmcgdHlwZQotICAndXNl
IHN0cmljdCc7Ci0KLSAgZnVuY3Rpb24gU2FmZVN0cmluZyhzdHJpbmcpIHsKLSAgICB0aGlzLnN0
cmluZyA9IHN0cmluZzsKLSAgfQotCi0gIFNhZmVTdHJpbmcucHJvdG90eXBlLnRvU3RyaW5nID0g
U2FmZVN0cmluZy5wcm90b3R5cGUudG9IVE1MID0gZnVuY3Rpb24gKCkgewotICAgIHJldHVybiAn
JyArIHRoaXMuc3RyaW5nOwotICB9OwotCi0gIGV4cG9ydHMuZGVmYXVsdCA9IFNhZmVTdHJpbmc7
Ci19KTsKLWVuaWZlZCgnaHRtbGJhcnMtdXRpbC9oYW5kbGViYXJzL3V0aWxzJywgWydleHBvcnRz
J10sIGZ1bmN0aW9uIChleHBvcnRzKSB7Ci0gICd1c2Ugc3RyaWN0JzsKLQotICBleHBvcnRzLmV4
dGVuZCA9IGV4dGVuZDsKLSAgZXhwb3J0cy5pbmRleE9mID0gaW5kZXhPZjsKLSAgZXhwb3J0cy5l
c2NhcGVFeHByZXNzaW9uID0gZXNjYXBlRXhwcmVzc2lvbjsKLSAgZXhwb3J0cy5pc0VtcHR5ID0g
aXNFbXB0eTsKLSAgZXhwb3J0cy5ibG9ja1BhcmFtcyA9IGJsb2NrUGFyYW1zOwotICBleHBvcnRz
LmFwcGVuZENvbnRleHRQYXRoID0gYXBwZW5kQ29udGV4dFBhdGg7Ci0gIHZhciBlc2NhcGUgPSB7
Ci0gICAgJyYnOiAnJmFtcDsnLAotICAgICc8JzogJyZsdDsnLAotICAgICc+JzogJyZndDsnLAot
ICAgICciJzogJyZxdW90OycsCi0gICAgIiciOiAnJiN4Mjc7JywKLSAgICAnYCc6ICcmI3g2MDsn
Ci0gIH07Ci0KLSAgdmFyIGJhZENoYXJzID0gL1smPD4iJ2BdL2csCi0gICAgICBwb3NzaWJsZSA9
IC9bJjw+IidgXS87Ci0KLSAgZnVuY3Rpb24gZXNjYXBlQ2hhcihjaHIpIHsKLSAgICByZXR1cm4g
ZXNjYXBlW2Nocl07Ci0gIH0KLQotICBmdW5jdGlvbiBleHRlbmQob2JqIC8qICwgLi4uc291cmNl
ICovKSB7Ci0gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsK
LSAgICAgIGZvciAodmFyIGtleSBpbiBhcmd1bWVudHNbaV0pIHsKLSAgICAgICAgaWYgKE9iamVj
dC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhcmd1bWVudHNbaV0sIGtleSkpIHsKLSAg
ICAgICAgICBvYmpba2V5XSA9IGFyZ3VtZW50c1tpXVtrZXldOwotICAgICAgICB9Ci0gICAgICB9
Ci0gICAgfQotCi0gICAgcmV0dXJuIG9iajsKLSAgfQotCi0gIHZhciB0b1N0cmluZyA9IE9iamVj
dC5wcm90b3R5cGUudG9TdHJpbmc7Ci0KLSAgZXhwb3J0cy50b1N0cmluZyA9IHRvU3RyaW5nOwot
ICAvLyBTb3VyY2VkIGZyb20gbG9kYXNoCi0gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9iZXN0aWVq
cy9sb2Rhc2gvYmxvYi9tYXN0ZXIvTElDRU5TRS50eHQKLSAgLyplc2xpbnQtZGlzYWJsZSBmdW5j
LXN0eWxlLCBuby12YXIgKi8KLSAgdmFyIGlzRnVuY3Rpb24gPSBmdW5jdGlvbiAodmFsdWUpIHsK
LSAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nOwotICB9OwotICAvLyBmYWxs
YmFjayBmb3Igb2xkZXIgdmVyc2lvbnMgb2YgQ2hyb21lIGFuZCBTYWZhcmkKLSAgLyogaXN0YW5i
dWwgaWdub3JlIG5leHQgKi8KLSAgaWYgKGlzRnVuY3Rpb24oL3gvKSkgewotICAgIGV4cG9ydHMu
aXNGdW5jdGlvbiA9IGlzRnVuY3Rpb24gPSBmdW5jdGlvbiAodmFsdWUpIHsKLSAgICAgIHJldHVy
biB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicgJiYgdG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09
ICdbb2JqZWN0IEZ1bmN0aW9uXSc7Ci0gICAgfTsKLSAgfQotICB2YXIgaXNGdW5jdGlvbjsKLSAg
ZXhwb3J0cy5pc0Z1bmN0aW9uID0gaXNGdW5jdGlvbjsKLSAgLyplc2xpbnQtZW5hYmxlIGZ1bmMt
c3R5bGUsIG5vLXZhciAqLwotCi0gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovCi0gIHZhciBp
c0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAodmFsdWUpIHsKLSAgICByZXR1cm4g
dmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyA/IHRvU3RyaW5nLmNhbGwodmFsdWUp
ID09PSAnW29iamVjdCBBcnJheV0nIDogZmFsc2U7Ci0gIH07Ci0KLSAgZXhwb3J0cy5pc0FycmF5
ID0gaXNBcnJheTsKLSAgLy8gT2xkZXIgSUUgdmVyc2lvbnMgZG8gbm90IGRpcmVjdGx5IHN1cHBv
cnQgaW5kZXhPZiBzbyB3ZSBtdXN0IGltcGxlbWVudCBvdXIgb3duLCBzYWRseS4KLQotICBmdW5j
dGlvbiBpbmRleE9mKGFycmF5LCB2YWx1ZSkgewotICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBh
cnJheS5sZW5ndGg7IGkgPCBsZW47IGkrKykgewotICAgICAgaWYgKGFycmF5W2ldID09PSB2YWx1
ZSkgewotICAgICAgICByZXR1cm4gaTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIC0xOwot
ICB9Ci0KLSAgZnVuY3Rpb24gZXNjYXBlRXhwcmVzc2lvbihzdHJpbmcpIHsKLSAgICBpZiAodHlw
ZW9mIHN0cmluZyAhPT0gJ3N0cmluZycpIHsKLSAgICAgIC8vIGRvbid0IGVzY2FwZSBTYWZlU3Ry
aW5ncywgc2luY2UgdGhleSdyZSBhbHJlYWR5IHNhZmUKLSAgICAgIGlmIChzdHJpbmcgJiYgc3Ry
aW5nLnRvSFRNTCkgewotICAgICAgICByZXR1cm4gc3RyaW5nLnRvSFRNTCgpOwotICAgICAgfSBl
bHNlIGlmIChzdHJpbmcgPT0gbnVsbCkgewotICAgICAgICByZXR1cm4gJyc7Ci0gICAgICB9IGVs
c2UgaWYgKCFzdHJpbmcpIHsKLSAgICAgICAgcmV0dXJuIHN0cmluZyArICcnOwotICAgICAgfQot
Ci0gICAgICAvLyBGb3JjZSBhIHN0cmluZyBjb252ZXJzaW9uIGFzIHRoaXMgd2lsbCBiZSBkb25l
IGJ5IHRoZSBhcHBlbmQgcmVnYXJkbGVzcyBhbmQKLSAgICAgIC8vIHRoZSByZWdleCB0ZXN0IHdp
bGwgZG8gdGhpcyB0cmFuc3BhcmVudGx5IGJlaGluZCB0aGUgc2NlbmVzLCBjYXVzaW5nIGlzc3Vl
cyBpZgotICAgICAgLy8gYW4gb2JqZWN0J3MgdG8gc3RyaW5nIGhhcyBlc2NhcGVkIGNoYXJhY3Rl
cnMgaW4gaXQuCi0gICAgICBzdHJpbmcgPSAnJyArIHN0cmluZzsKLSAgICB9Ci0KLSAgICBpZiAo
IXBvc3NpYmxlLnRlc3Qoc3RyaW5nKSkgewotICAgICAgcmV0dXJuIHN0cmluZzsKLSAgICB9Ci0g
ICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKGJhZENoYXJzLCBlc2NhcGVDaGFyKTsKLSAgfQotCi0g
IGZ1bmN0aW9uIGlzRW1wdHkodmFsdWUpIHsKLSAgICBpZiAoIXZhbHVlICYmIHZhbHVlICE9PSAw
KSB7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKGlzQXJyYXkodmFsdWUpICYm
IHZhbHVlLmxlbmd0aCA9PT0gMCkgewotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSBlbHNlIHsK
LSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0KLQotICBmdW5jdGlvbiBibG9ja1BhcmFt
cyhwYXJhbXMsIGlkcykgewotICAgIHBhcmFtcy5wYXRoID0gaWRzOwotICAgIHJldHVybiBwYXJh
bXM7Ci0gIH0KLQotICBmdW5jdGlvbiBhcHBlbmRDb250ZXh0UGF0aChjb250ZXh0UGF0aCwgaWQp
IHsKLSAgICByZXR1cm4gKGNvbnRleHRQYXRoID8gY29udGV4dFBhdGggKyAnLicgOiAnJykgKyBp
ZDsKLSAgfQotfSk7Ci1lbmlmZWQoImh0bWxiYXJzLXV0aWwvbW9ycGgtdXRpbHMiLCBbImV4cG9y
dHMiXSwgZnVuY3Rpb24gKGV4cG9ydHMpIHsKLSAgLypnbG9iYWxzIGNvbnNvbGUqLwotCi0gICJ1
c2Ugc3RyaWN0IjsKLQotICBleHBvcnRzLnZpc2l0Q2hpbGRyZW4gPSB2aXNpdENoaWxkcmVuOwot
ICBleHBvcnRzLnZhbGlkYXRlQ2hpbGRNb3JwaHMgPSB2YWxpZGF0ZUNoaWxkTW9ycGhzOwotICBl
eHBvcnRzLmxpbmtQYXJhbXMgPSBsaW5rUGFyYW1zOwotICBleHBvcnRzLmR1bXAgPSBkdW1wOwot
Ci0gIGZ1bmN0aW9uIHZpc2l0Q2hpbGRyZW4obm9kZXMsIGNhbGxiYWNrKSB7Ci0gICAgaWYgKCFu
b2RlcyB8fCBub2Rlcy5sZW5ndGggPT09IDApIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBub2RlcyA9IG5vZGVzLnNsaWNlKCk7Ci0KLSAgICB3aGlsZSAobm9kZXMubGVuZ3RoKSB7Ci0g
ICAgICB2YXIgbm9kZSA9IG5vZGVzLnBvcCgpOwotICAgICAgY2FsbGJhY2sobm9kZSk7Ci0KLSAg
ICAgIGlmIChub2RlLmNoaWxkTm9kZXMpIHsKLSAgICAgICAgbm9kZXMucHVzaC5hcHBseShub2Rl
cywgbm9kZS5jaGlsZE5vZGVzKTsKLSAgICAgIH0gZWxzZSBpZiAobm9kZS5maXJzdENoaWxkTW9y
cGgpIHsKLSAgICAgICAgdmFyIGN1cnJlbnQgPSBub2RlLmZpcnN0Q2hpbGRNb3JwaDsKLQotICAg
ICAgICB3aGlsZSAoY3VycmVudCkgewotICAgICAgICAgIG5vZGVzLnB1c2goY3VycmVudCk7Ci0g
ICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQubmV4dE1vcnBoOwotICAgICAgICB9Ci0gICAgICB9
IGVsc2UgaWYgKG5vZGUubW9ycGhMaXN0KSB7Ci0gICAgICAgIHZhciBjdXJyZW50ID0gbm9kZS5t
b3JwaExpc3QuZmlyc3RDaGlsZE1vcnBoOwotCi0gICAgICAgIHdoaWxlIChjdXJyZW50KSB7Ci0g
ICAgICAgICAgbm9kZXMucHVzaChjdXJyZW50KTsKLSAgICAgICAgICBjdXJyZW50ID0gY3VycmVu
dC5uZXh0TW9ycGg7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBmdW5jdGlv
biB2YWxpZGF0ZUNoaWxkTW9ycGhzKGVudiwgbW9ycGgsIHZpc2l0b3IpIHsKLSAgICB2YXIgbW9y
cGhMaXN0ID0gbW9ycGgubW9ycGhMaXN0OwotICAgIGlmIChtb3JwaC5tb3JwaExpc3QpIHsKLSAg
ICAgIHZhciBjdXJyZW50ID0gbW9ycGhMaXN0LmZpcnN0Q2hpbGRNb3JwaDsKLQotICAgICAgd2hp
bGUgKGN1cnJlbnQpIHsKLSAgICAgICAgdmFyIG5leHQgPSBjdXJyZW50Lm5leHRNb3JwaDsKLSAg
ICAgICAgdmFsaWRhdGVDaGlsZE1vcnBocyhlbnYsIGN1cnJlbnQsIHZpc2l0b3IpOwotICAgICAg
ICBjdXJyZW50ID0gbmV4dDsKLSAgICAgIH0KLSAgICB9IGVsc2UgaWYgKG1vcnBoLmxhc3RSZXN1
bHQpIHsKLSAgICAgIG1vcnBoLmxhc3RSZXN1bHQucmV2YWxpZGF0ZVdpdGgoZW52LCB1bmRlZmlu
ZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB2aXNpdG9yKTsKLSAgICB9IGVsc2UgaWYgKG1vcnBo
LmNoaWxkTm9kZXMpIHsKLSAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0aGUgY2hpbGROb2RlcyB3
ZXJlIHdpcmVkIHVwIG1hbnVhbGx5Ci0gICAgICBmb3IgKHZhciBpID0gMCwgbCA9IG1vcnBoLmNo
aWxkTm9kZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7Ci0gICAgICAgIHZhbGlkYXRlQ2hpbGRNb3Jw
aHMoZW52LCBtb3JwaC5jaGlsZE5vZGVzW2ldLCB2aXNpdG9yKTsKLSAgICAgIH0KLSAgICB9Ci0g
IH0KLQotICBmdW5jdGlvbiBsaW5rUGFyYW1zKGVudiwgc2NvcGUsIG1vcnBoLCBwYXRoLCBwYXJh
bXMsIGhhc2gpIHsKLSAgICBpZiAobW9ycGgubGlua2VkUGFyYW1zKSB7Ci0gICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgaWYgKGVudi5ob29rcy5saW5rUmVuZGVyTm9kZShtb3JwaCwgZW52LCBz
Y29wZSwgcGF0aCwgcGFyYW1zLCBoYXNoKSkgewotICAgICAgbW9ycGgubGlua2VkUGFyYW1zID0g
eyBwYXJhbXM6IHBhcmFtcywgaGFzaDogaGFzaCB9OwotICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9u
IGR1bXAobm9kZSkgewotICAgIGNvbnNvbGUuZ3JvdXAobm9kZSwgbm9kZS5pc0RpcnR5KTsKLQot
ICAgIGlmIChub2RlLmNoaWxkTm9kZXMpIHsKLSAgICAgIG1hcChub2RlLmNoaWxkTm9kZXMsIGR1
bXApOwotICAgIH0gZWxzZSBpZiAobm9kZS5maXJzdENoaWxkTW9ycGgpIHsKLSAgICAgIHZhciBj
dXJyZW50ID0gbm9kZS5maXJzdENoaWxkTW9ycGg7Ci0KLSAgICAgIHdoaWxlIChjdXJyZW50KSB7
Ci0gICAgICAgIGR1bXAoY3VycmVudCk7Ci0gICAgICAgIGN1cnJlbnQgPSBjdXJyZW50Lm5leHRN
b3JwaDsKLSAgICAgIH0KLSAgICB9IGVsc2UgaWYgKG5vZGUubW9ycGhMaXN0KSB7Ci0gICAgICBk
dW1wKG5vZGUubW9ycGhMaXN0KTsKLSAgICB9Ci0KLSAgICBjb25zb2xlLmdyb3VwRW5kKCk7Ci0g
IH0KLQotICBmdW5jdGlvbiBtYXAobm9kZXMsIGNiKSB7Ci0gICAgZm9yICh2YXIgaSA9IDAsIGwg
PSBub2Rlcy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKLSAgICAgIGNiKG5vZGVzW2ldKTsKLSAgICB9
Ci0gIH0KLX0pOwotZW5pZmVkKCdodG1sYmFycy11dGlsL25hbWVzcGFjZXMnLCBbJ2V4cG9ydHMn
XSwgZnVuY3Rpb24gKGV4cG9ydHMpIHsKLSAgLy8gcmVmIGh0dHA6Ly9kZXYudzMub3JnL2h0bWw1
L3NwZWMtTEMvbmFtZXNwYWNlcy5odG1sCi0gICd1c2Ugc3RyaWN0JzsKLQotICBleHBvcnRzLmdl
dEF0dHJOYW1lc3BhY2UgPSBnZXRBdHRyTmFtZXNwYWNlOwotICB2YXIgZGVmYXVsdE5hbWVzcGFj
ZXMgPSB7Ci0gICAgaHRtbDogJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwnLAotICAgIG1h
dGhtbDogJ2h0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwnLAotICAgIHN2ZzogJ2h0
dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywKLSAgICB4bGluazogJ2h0dHA6Ly93d3cudzMub3Jn
LzE5OTkveGxpbmsnLAotICAgIHhtbDogJ2h0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVz
cGFjZScKLSAgfTsKLQotICBmdW5jdGlvbiBnZXRBdHRyTmFtZXNwYWNlKGF0dHJOYW1lLCBkZXRl
Y3RlZE5hbWVzcGFjZSkgewotICAgIGlmIChkZXRlY3RlZE5hbWVzcGFjZSkgewotICAgICAgcmV0
dXJuIGRldGVjdGVkTmFtZXNwYWNlOwotICAgIH0KLQotICAgIHZhciBuYW1lc3BhY2U7Ci0KLSAg
ICB2YXIgY29sb25JbmRleCA9IGF0dHJOYW1lLmluZGV4T2YoJzonKTsKLSAgICBpZiAoY29sb25J
bmRleCAhPT0gLTEpIHsKLSAgICAgIHZhciBwcmVmaXggPSBhdHRyTmFtZS5zbGljZSgwLCBjb2xv
bkluZGV4KTsKLSAgICAgIG5hbWVzcGFjZSA9IGRlZmF1bHROYW1lc3BhY2VzW3ByZWZpeF07Ci0g
ICAgfQotCi0gICAgcmV0dXJuIG5hbWVzcGFjZSB8fCBudWxsOwotICB9Ci19KTsKLWVuaWZlZCgi
aHRtbGJhcnMtdXRpbC9vYmplY3QtdXRpbHMiLCBbImV4cG9ydHMiXSwgZnVuY3Rpb24gKGV4cG9y
dHMpIHsKLSAgInVzZSBzdHJpY3QiOwotCi0gIGV4cG9ydHMubWVyZ2UgPSBtZXJnZTsKLSAgZXhw
b3J0cy5zaGFsbG93Q29weSA9IHNoYWxsb3dDb3B5OwotICBleHBvcnRzLmtleVNldCA9IGtleVNl
dDsKLSAgZXhwb3J0cy5rZXlMZW5ndGggPSBrZXlMZW5ndGg7Ci0KLSAgZnVuY3Rpb24gbWVyZ2Uo
b3B0aW9ucywgZGVmYXVsdHMpIHsKLSAgICBmb3IgKHZhciBwcm9wIGluIGRlZmF1bHRzKSB7Ci0g
ICAgICBpZiAob3B0aW9ucy5oYXNPd25Qcm9wZXJ0eShwcm9wKSkgewotICAgICAgICBjb250aW51
ZTsKLSAgICAgIH0KLSAgICAgIG9wdGlvbnNbcHJvcF0gPSBkZWZhdWx0c1twcm9wXTsKLSAgICB9
Ci0gICAgcmV0dXJuIG9wdGlvbnM7Ci0gIH0KLQotICBmdW5jdGlvbiBzaGFsbG93Q29weShvYmop
IHsKLSAgICByZXR1cm4gbWVyZ2Uoe30sIG9iaik7Ci0gIH0KLQotICBmdW5jdGlvbiBrZXlTZXQo
b2JqKSB7Ci0gICAgdmFyIHNldCA9IHt9OwotCi0gICAgZm9yICh2YXIgcHJvcCBpbiBvYmopIHsK
LSAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkocHJvcCkpIHsKLSAgICAgICAgc2V0W3Byb3Bd
ID0gdHJ1ZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gc2V0OwotICB9Ci0KLSAgZnVu
Y3Rpb24ga2V5TGVuZ3RoKG9iaikgewotICAgIHZhciBjb3VudCA9IDA7Ci0KLSAgICBmb3IgKHZh
ciBwcm9wIGluIG9iaikgewotICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShwcm9wKSkgewot
ICAgICAgICBjb3VudCsrOwotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBjb3VudDsKLSAg
fQotfSk7Ci1lbmlmZWQoImh0bWxiYXJzLXV0aWwvcXVvdGluZyIsIFsiZXhwb3J0cyJdLCBmdW5j
dGlvbiAoZXhwb3J0cykgewotICAidXNlIHN0cmljdCI7Ci0KLSAgZXhwb3J0cy5oYXNoID0gaGFz
aDsKLSAgZXhwb3J0cy5yZXBlYXQgPSByZXBlYXQ7Ci0gIGZ1bmN0aW9uIGVzY2FwZVN0cmluZyhz
dHIpIHsKLSAgICBzdHIgPSBzdHIucmVwbGFjZSgvXFwvZywgIlxcXFwiKTsKLSAgICBzdHIgPSBz
dHIucmVwbGFjZSgvIi9nLCAnXFwiJyk7Ci0gICAgc3RyID0gc3RyLnJlcGxhY2UoL1xuL2csICJc
XG4iKTsKLSAgICByZXR1cm4gc3RyOwotICB9Ci0KLSAgZXhwb3J0cy5lc2NhcGVTdHJpbmcgPSBl
c2NhcGVTdHJpbmc7Ci0KLSAgZnVuY3Rpb24gc3RyaW5nKHN0cikgewotICAgIHJldHVybiAnIicg
KyBlc2NhcGVTdHJpbmcoc3RyKSArICciJzsKLSAgfQotCi0gIGV4cG9ydHMuc3RyaW5nID0gc3Ry
aW5nOwotCi0gIGZ1bmN0aW9uIGFycmF5KGEpIHsKLSAgICByZXR1cm4gIlsiICsgYSArICJdIjsK
LSAgfQotCi0gIGV4cG9ydHMuYXJyYXkgPSBhcnJheTsKLQotICBmdW5jdGlvbiBoYXNoKHBhaXJz
KSB7Ci0gICAgcmV0dXJuICJ7IiArIHBhaXJzLmpvaW4oIiwgIikgKyAifSI7Ci0gIH0KLQotICBm
dW5jdGlvbiByZXBlYXQoY2hhcnMsIHRpbWVzKSB7Ci0gICAgdmFyIHN0ciA9ICIiOwotICAgIHdo
aWxlICh0aW1lcy0tKSB7Ci0gICAgICBzdHIgKz0gY2hhcnM7Ci0gICAgfQotICAgIHJldHVybiBz
dHI7Ci0gIH0KLX0pOwotZW5pZmVkKCdodG1sYmFycy11dGlsL3NhZmUtc3RyaW5nJywgWydleHBv
cnRzJywgJ2h0bWxiYXJzLXV0aWwvaGFuZGxlYmFycy9zYWZlLXN0cmluZyddLCBmdW5jdGlvbiAo
ZXhwb3J0cywgX2h0bWxiYXJzVXRpbEhhbmRsZWJhcnNTYWZlU3RyaW5nKSB7Ci0gICd1c2Ugc3Ry
aWN0JzsKLQotICBleHBvcnRzLmRlZmF1bHQgPSBfaHRtbGJhcnNVdGlsSGFuZGxlYmFyc1NhZmVT
dHJpbmcuZGVmYXVsdDsKLX0pOwotZW5pZmVkKCJodG1sYmFycy11dGlsL3RlbXBsYXRlLXV0aWxz
IiwgWyJleHBvcnRzIiwgImh0bWxiYXJzLXV0aWwvbW9ycGgtdXRpbHMiLCAiaHRtbGJhcnMtcnVu
dGltZS9yZW5kZXIiXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9odG1sYmFyc1V0aWxNb3JwaFV0aWxz
LCBfaHRtbGJhcnNSdW50aW1lUmVuZGVyKSB7Ci0gICJ1c2Ugc3RyaWN0IjsKLQotICBleHBvcnRz
LlJlbmRlclN0YXRlID0gUmVuZGVyU3RhdGU7Ci0gIGV4cG9ydHMuYmxvY2tGb3IgPSBibG9ja0Zv
cjsKLSAgZXhwb3J0cy5yZW5kZXJBbmRDbGVhbnVwID0gcmVuZGVyQW5kQ2xlYW51cDsKLSAgZXhw
b3J0cy5jbGVhck1vcnBoID0gY2xlYXJNb3JwaDsKLSAgZXhwb3J0cy5jbGVhck1vcnBoTGlzdCA9
IGNsZWFyTW9ycGhMaXN0OwotCi0gIGZ1bmN0aW9uIFJlbmRlclN0YXRlKHJlbmRlck5vZGUsIG1v
cnBoTGlzdCkgewotICAgIC8vIFRoZSBtb3JwaCBsaXN0IHRoYXQgaXMgbm8gbG9uZ2VyIG5lZWRl
ZCBhbmQgY2FuIGJlCi0gICAgLy8gZGVzdHJveWVkLgotICAgIHRoaXMubW9ycGhMaXN0VG9DbGVh
ciA9IG1vcnBoTGlzdDsKLQotICAgIC8vIFRoZSBtb3JwaCBsaXN0IHRoYXQgbmVlZHMgdG8gYmUg
cHJ1bmVkIG9mIGFueSBpdGVtcwotICAgIC8vIHRoYXQgd2VyZSBub3QgeWllbGRlZCBvbiBhIHN1
YnNlcXVlbnQgcmVuZGVyLgotICAgIHRoaXMubW9ycGhMaXN0VG9QcnVuZSA9IG51bGw7Ci0KLSAg
ICAvLyBBIG1hcCBvZiBtb3JwaHMgZm9yIGVhY2ggaXRlbSB5aWVsZGVkIGluIGR1cmluZyB0aGlz
Ci0gICAgLy8gcmVuZGVyaW5nIHBhc3MuIEFueSBtb3JwaHMgaW4gdGhlIERPTSBidXQgbm90IGlu
IHRoaXMgbWFwCi0gICAgLy8gd2lsbCBiZSBwcnVuZWQgZHVyaW5nIGNsZWFudXAuCi0gICAgdGhp
cy5oYW5kbGVkTW9ycGhzID0ge307Ci0gICAgdGhpcy5jb2xsaXNpb25zID0gdW5kZWZpbmVkOwot
Ci0gICAgLy8gVGhlIG1vcnBoIHRvIGNsZWFyIG9uY2UgcmVuZGVyaW5nIGlzIGNvbXBsZXRlLiBC
eQotICAgIC8vIGRlZmF1bHQsIHdlIHNldCB0aGlzIHRvIHRoZSBwcmV2aW91cyBtb3JwaCAodG8g
Y2F0Y2gKLSAgICAvLyB0aGUgY2FzZSB3aGVyZSBub3RoaW5nIGlzIHlpZWxkZWQ7IGluIHRoYXQg
Y2FzZSwgd2UKLSAgICAvLyBzaG91bGQganVzdCBjbGVhciB0aGUgbW9ycGgpLiBPdGhlcndpc2Ug
dGhpcyBnZXRzIHNldAotICAgIC8vIHRvIG51bGwgaWYgYW55dGhpbmcgaXMgcmVuZGVyZWQuCi0g
ICAgdGhpcy5tb3JwaFRvQ2xlYXIgPSByZW5kZXJOb2RlOwotCi0gICAgdGhpcy5zaGFkb3dPcHRp
b25zID0gbnVsbDsKLSAgfQotCi0gIGZ1bmN0aW9uIEJsb2NrKHJlbmRlciwgdGVtcGxhdGUsIGJs
b2NrT3B0aW9ucykgewotICAgIHRoaXMucmVuZGVyID0gcmVuZGVyOwotICAgIHRoaXMudGVtcGxh
dGUgPSB0ZW1wbGF0ZTsKLSAgICB0aGlzLmJsb2NrT3B0aW9ucyA9IGJsb2NrT3B0aW9uczsKLSAg
ICB0aGlzLmFyaXR5ID0gdGVtcGxhdGUuYXJpdHk7Ci0gIH0KLQotICBCbG9jay5wcm90b3R5cGUu
aW52b2tlID0gZnVuY3Rpb24gKGVudiwgYmxvY2tBcmd1bWVudHMsIF9zZWxmLCByZW5kZXJOb2Rl
LCBwYXJlbnRTY29wZSwgdmlzaXRvcikgewotICAgIGlmIChyZW5kZXJOb2RlLmxhc3RSZXN1bHQp
IHsKLSAgICAgIHJlbmRlck5vZGUubGFzdFJlc3VsdC5yZXZhbGlkYXRlV2l0aChlbnYsIHVuZGVm
aW5lZCwgX3NlbGYsIGJsb2NrQXJndW1lbnRzLCB2aXNpdG9yKTsKLSAgICB9IGVsc2UgewotICAg
ICAgdGhpcy5fZmlyc3RSZW5kZXIoZW52LCBibG9ja0FyZ3VtZW50cywgX3NlbGYsIHJlbmRlck5v
ZGUsIHBhcmVudFNjb3BlKTsKLSAgICB9Ci0gIH07Ci0KLSAgQmxvY2sucHJvdG90eXBlLl9maXJz
dFJlbmRlciA9IGZ1bmN0aW9uIChlbnYsIGJsb2NrQXJndW1lbnRzLCBfc2VsZiwgcmVuZGVyTm9k
ZSwgcGFyZW50U2NvcGUpIHsKLSAgICB2YXIgb3B0aW9ucyA9IHsgcmVuZGVyU3RhdGU6IG5ldyBS
ZW5kZXJTdGF0ZShyZW5kZXJOb2RlKSB9OwotICAgIHZhciByZW5kZXIgPSB0aGlzLnJlbmRlcjsK
LSAgICB2YXIgdGVtcGxhdGUgPSB0aGlzLnRlbXBsYXRlOwotICAgIHZhciBzY29wZSA9IHRoaXMu
YmxvY2tPcHRpb25zLnNjb3BlOwotCi0gICAgdmFyIHNoYWRvd1Njb3BlID0gc2NvcGUgPyBlbnYu
aG9va3MuY3JlYXRlQ2hpbGRTY29wZShzY29wZSkgOiBlbnYuaG9va3MuY3JlYXRlRnJlc2hTY29w
ZSgpOwotCi0gICAgZW52Lmhvb2tzLmJpbmRTaGFkb3dTY29wZShlbnYsIHBhcmVudFNjb3BlLCBz
aGFkb3dTY29wZSwgdGhpcy5ibG9ja09wdGlvbnMub3B0aW9ucyk7Ci0KLSAgICBpZiAoX3NlbGYg
IT09IHVuZGVmaW5lZCkgewotICAgICAgZW52Lmhvb2tzLmJpbmRTZWxmKGVudiwgc2hhZG93U2Nv
cGUsIF9zZWxmKTsKLSAgICB9IGVsc2UgaWYgKHRoaXMuYmxvY2tPcHRpb25zLnNlbGYgIT09IHVu
ZGVmaW5lZCkgewotICAgICAgZW52Lmhvb2tzLmJpbmRTZWxmKGVudiwgc2hhZG93U2NvcGUsIHRo
aXMuYmxvY2tPcHRpb25zLnNlbGYpOwotICAgIH0KLQotICAgIGJpbmRCbG9ja3MoZW52LCBzaGFk
b3dTY29wZSwgdGhpcy5ibG9ja09wdGlvbnMueWllbGRUbyk7Ci0KLSAgICByZW5kZXJBbmRDbGVh
bnVwKHJlbmRlck5vZGUsIGVudiwgb3B0aW9ucywgbnVsbCwgZnVuY3Rpb24gKCkgewotICAgICAg
b3B0aW9ucy5yZW5kZXJTdGF0ZS5tb3JwaFRvQ2xlYXIgPSBudWxsOwotICAgICAgdmFyIHJlbmRl
ck9wdGlvbnMgPSBuZXcgX2h0bWxiYXJzUnVudGltZVJlbmRlci5SZW5kZXJPcHRpb25zKHJlbmRl
ck5vZGUsIHVuZGVmaW5lZCwgYmxvY2tBcmd1bWVudHMpOwotICAgICAgcmVuZGVyKHRlbXBsYXRl
LCBlbnYsIHNoYWRvd1Njb3BlLCByZW5kZXJPcHRpb25zKTsKLSAgICB9KTsKLSAgfTsKLQotICBm
dW5jdGlvbiBibG9ja0ZvcihyZW5kZXIsIHRlbXBsYXRlLCBibG9ja09wdGlvbnMpIHsKLSAgICBy
ZXR1cm4gbmV3IEJsb2NrKHJlbmRlciwgdGVtcGxhdGUsIGJsb2NrT3B0aW9ucyk7Ci0gIH0KLQot
ICBmdW5jdGlvbiBiaW5kQmxvY2tzKGVudiwgc2hhZG93U2NvcGUsIGJsb2NrcykgewotICAgIGlm
ICghYmxvY2tzKSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChibG9ja3MgaW5zdGFu
Y2VvZiBCbG9jaykgewotICAgICAgZW52Lmhvb2tzLmJpbmRCbG9jayhlbnYsIHNoYWRvd1Njb3Bl
LCBibG9ja3MpOwotICAgIH0gZWxzZSB7Ci0gICAgICBmb3IgKHZhciBuYW1lIGluIGJsb2Nrcykg
ewotICAgICAgICBpZiAoYmxvY2tzLmhhc093blByb3BlcnR5KG5hbWUpKSB7Ci0gICAgICAgICAg
ZW52Lmhvb2tzLmJpbmRCbG9jayhlbnYsIHNoYWRvd1Njb3BlLCBibG9ja3NbbmFtZV0sIG5hbWUp
OwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gcmVuZGVyQW5k
Q2xlYW51cChtb3JwaCwgZW52LCBvcHRpb25zLCBzaGFkb3dPcHRpb25zLCBjYWxsYmFjaykgewot
ICAgIC8vIFRoZSBSZW5kZXJTdGF0ZSBvYmplY3QgaXMgdXNlZCB0byBjb2xsZWN0IGluZm9ybWF0
aW9uIGFib3V0IHdoYXQgdGhlCi0gICAgLy8gaGVscGVyIG9yIGhvb2sgYmVpbmcgaW52b2tlZCBo
YXMgeWllbGRlZC4gT25jZSBpdCBoYXMgZmluaXNoZWQgZWl0aGVyCi0gICAgLy8geWllbGRpbmcg
bXVsdGlwbGUgaXRlbXMgKHZpYSB5aWVsZEl0ZW0pIG9yIGEgc2luZ2xlIHRlbXBsYXRlICh2aWEK
LSAgICAvLyB5aWVsZFRlbXBsYXRlKSwgd2UgZGV0ZWN0IHdoYXQgd2FzIHJlbmRlcmVkIGFuZCBo
b3cgaXQgZGlmZmVycyBmcm9tCi0gICAgLy8gdGhlIHByZXZpb3VzIHJlbmRlciwgY2xlYW5pbmcg
dXAgb2xkIHN0YXRlIGluIERPTSBhcyBhcHByb3ByaWF0ZS4KLSAgICB2YXIgcmVuZGVyU3RhdGUg
PSBvcHRpb25zLnJlbmRlclN0YXRlOwotICAgIHJlbmRlclN0YXRlLmNvbGxpc2lvbnMgPSB1bmRl
ZmluZWQ7Ci0gICAgcmVuZGVyU3RhdGUuc2hhZG93T3B0aW9ucyA9IHNoYWRvd09wdGlvbnM7Ci0K
LSAgICAvLyBJbnZva2UgdGhlIGNhbGxiYWNrLCBpbnN0cnVjdGluZyBpdCB0byBzYXZlIGluZm9y
bWF0aW9uIGFib3V0IHdoYXQgaXQKLSAgICAvLyByZW5kZXJzIGludG8gUmVuZGVyU3RhdGUuCi0g
ICAgdmFyIHJlc3VsdCA9IGNhbGxiYWNrKG9wdGlvbnMpOwotCi0gICAgLy8gVGhlIGhvb2sgY2Fu
IG9wdC1vdXQgb2YgY2xlYW51cCBpZiBpdCBoYW5kbGVkIGNsZWFudXAgaXRzZWxmLgotICAgIGlm
IChyZXN1bHQgJiYgcmVzdWx0LmhhbmRsZWQpIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICB2YXIgbW9ycGhNYXAgPSBtb3JwaC5tb3JwaE1hcDsKLQotICAgIC8vIFdhbGsgdGhlIG1vcnBo
IGxpc3QsIGNsZWFyaW5nIGFueSBpdGVtcyB0aGF0IHdlcmUgeWllbGRlZCBpbiBhIHByZXZpb3Vz
Ci0gICAgLy8gcmVuZGVyIGJ1dCB3ZXJlIG5vdCB5aWVsZGVkIGR1cmluZyB0aGlzIHJlbmRlci4K
LSAgICB2YXIgbW9ycGhMaXN0ID0gcmVuZGVyU3RhdGUubW9ycGhMaXN0VG9QcnVuZTsKLSAgICBp
ZiAobW9ycGhMaXN0KSB7Ci0gICAgICB2YXIgaGFuZGxlZE1vcnBocyA9IHJlbmRlclN0YXRlLmhh
bmRsZWRNb3JwaHM7Ci0gICAgICB2YXIgaXRlbSA9IG1vcnBoTGlzdC5maXJzdENoaWxkTW9ycGg7
Ci0KLSAgICAgIHdoaWxlIChpdGVtKSB7Ci0gICAgICAgIHZhciBuZXh0ID0gaXRlbS5uZXh0TW9y
cGg7Ci0KLSAgICAgICAgLy8gSWYgd2UgZG9uJ3Qgc2VlIHRoZSBrZXkgaW4gaGFuZGxlZE1vcnBo
cywgaXQgd2Fzbid0Ci0gICAgICAgIC8vIHlpZWxkZWQgaW4gYW5kIHdlIGNhbiBzYWZlbHkgcmVt
b3ZlIGl0IGZyb20gRE9NLgotICAgICAgICBpZiAoIShpdGVtLmtleSBpbiBoYW5kbGVkTW9ycGhz
KSkgewotICAgICAgICAgIG1vcnBoTWFwW2l0ZW0ua2V5XSA9IHVuZGVmaW5lZDsKLSAgICAgICAg
ICBjbGVhck1vcnBoKGl0ZW0sIGVudiwgdHJ1ZSk7Ci0gICAgICAgICAgaXRlbS5kZXN0cm95KCk7
Ci0gICAgICAgIH0KLQotICAgICAgICBpdGVtID0gbmV4dDsKLSAgICAgIH0KLSAgICB9Ci0KLSAg
ICBtb3JwaExpc3QgPSByZW5kZXJTdGF0ZS5tb3JwaExpc3RUb0NsZWFyOwotICAgIGlmIChtb3Jw
aExpc3QpIHsKLSAgICAgIGNsZWFyTW9ycGhMaXN0KG1vcnBoTGlzdCwgbW9ycGgsIGVudik7Ci0g
ICAgfQotCi0gICAgdmFyIHRvQ2xlYXIgPSByZW5kZXJTdGF0ZS5tb3JwaFRvQ2xlYXI7Ci0gICAg
aWYgKHRvQ2xlYXIpIHsKLSAgICAgIGNsZWFyTW9ycGgodG9DbGVhciwgZW52KTsKLSAgICB9Ci0g
IH0KLQotICBmdW5jdGlvbiBjbGVhck1vcnBoKG1vcnBoLCBlbnYsIGRlc3Ryb3lTZWxmKSB7Ci0g
ICAgdmFyIGNsZWFudXAgPSBlbnYuaG9va3MuY2xlYW51cFJlbmRlck5vZGU7Ci0gICAgdmFyIGRl
c3Ryb3kgPSBlbnYuaG9va3MuZGVzdHJveVJlbmRlck5vZGU7Ci0gICAgdmFyIHdpbGxDbGVhbnVw
ID0gZW52Lmhvb2tzLndpbGxDbGVhbnVwVHJlZTsKLSAgICB2YXIgZGlkQ2xlYW51cCA9IGVudi5o
b29rcy5kaWRDbGVhbnVwVHJlZTsKLQotICAgIGZ1bmN0aW9uIGRlc3Ryb3lOb2RlKG5vZGUpIHsK
LSAgICAgIGlmIChjbGVhbnVwKSB7Ci0gICAgICAgIGNsZWFudXAobm9kZSk7Ci0gICAgICB9Ci0g
ICAgICBpZiAoZGVzdHJveSkgewotICAgICAgICBkZXN0cm95KG5vZGUpOwotICAgICAgfQotICAg
IH0KLQotICAgIGlmICh3aWxsQ2xlYW51cCkgewotICAgICAgd2lsbENsZWFudXAoZW52LCBtb3Jw
aCwgZGVzdHJveVNlbGYpOwotICAgIH0KLSAgICBpZiAoY2xlYW51cCkgewotICAgICAgY2xlYW51
cChtb3JwaCk7Ci0gICAgfQotICAgIGlmIChkZXN0cm95U2VsZiAmJiBkZXN0cm95KSB7Ci0gICAg
ICBkZXN0cm95KG1vcnBoKTsKLSAgICB9Ci0KLSAgICBfaHRtbGJhcnNVdGlsTW9ycGhVdGlscy52
aXNpdENoaWxkcmVuKG1vcnBoLmNoaWxkTm9kZXMsIGRlc3Ryb3lOb2RlKTsKLQotICAgIC8vIFRP
RE86IERlYWwgd2l0aCBsb2dpY2FsIGNoaWxkcmVuIHRoYXQgYXJlIG5vdCBpbiB0aGUgRE9NIHRy
ZWUKLSAgICBtb3JwaC5jbGVhcigpOwotICAgIGlmIChkaWRDbGVhbnVwKSB7Ci0gICAgICBkaWRD
bGVhbnVwKGVudiwgbW9ycGgsIGRlc3Ryb3lTZWxmKTsKLSAgICB9Ci0KLSAgICBtb3JwaC5sYXN0
UmVzdWx0ID0gbnVsbDsKLSAgICBtb3JwaC5sYXN0WWllbGRlZCA9IG51bGw7Ci0gICAgbW9ycGgu
Y2hpbGROb2RlcyA9IG51bGw7Ci0gIH0KLQotICBmdW5jdGlvbiBjbGVhck1vcnBoTGlzdChtb3Jw
aExpc3QsIG1vcnBoLCBlbnYpIHsKLSAgICB2YXIgaXRlbSA9IG1vcnBoTGlzdC5maXJzdENoaWxk
TW9ycGg7Ci0KLSAgICB3aGlsZSAoaXRlbSkgewotICAgICAgdmFyIG5leHQgPSBpdGVtLm5leHRN
b3JwaDsKLSAgICAgIG1vcnBoLm1vcnBoTWFwW2l0ZW0ua2V5XSA9IHVuZGVmaW5lZDsKLSAgICAg
IGNsZWFyTW9ycGgoaXRlbSwgZW52LCB0cnVlKTsKLSAgICAgIGl0ZW0uZGVzdHJveSgpOwotCi0g
ICAgICBpdGVtID0gbmV4dDsKLSAgICB9Ci0KLSAgICAvLyBSZW1vdmUgdGhlIE1vcnBoTGlzdCBm
cm9tIHRoZSBtb3JwaC4KLSAgICBtb3JwaExpc3QuY2xlYXIoKTsKLSAgICBtb3JwaC5tb3JwaExp
c3QgPSBudWxsOwotICB9Ci19KTsKLWVuaWZlZCgiaHRtbGJhcnMtdXRpbC92b2lkLXRhZy1uYW1l
cyIsIFsiZXhwb3J0cyIsICJodG1sYmFycy11dGlsL2FycmF5LXV0aWxzIl0sIGZ1bmN0aW9uIChl
eHBvcnRzLCBfaHRtbGJhcnNVdGlsQXJyYXlVdGlscykgewotICAidXNlIHN0cmljdCI7Ci0KLSAg
Ly8gVGhlIEhUTUwgZWxlbWVudHMgaW4gdGhpcyBsaXN0IGFyZSBzcGVjZWQgYnkKLSAgLy8gaHR0
cDovL3d3dy53My5vcmcvVFIvaHRtbC1tYXJrdXAvc3ludGF4Lmh0bWwjc3ludGF4LWVsZW1lbnRz
LAotICAvLyBhbmQgd2lsbCBiZSBmb3JjZWQgdG8gY2xvc2UgcmVnYXJkbGVzcyBvZiBpZiB0aGV5
IGhhdmUgYQotICAvLyBzZWxmLWNsb3NpbmcgLz4gYXQgdGhlIGVuZC4KLSAgdmFyIHZvaWRUYWdO
YW1lcyA9ICJhcmVhIGJhc2UgYnIgY29sIGNvbW1hbmQgZW1iZWQgaHIgaW1nIGlucHV0IGtleWdl
biBsaW5rIG1ldGEgcGFyYW0gc291cmNlIHRyYWNrIHdiciI7Ci0gIHZhciB2b2lkTWFwID0ge307
Ci0KLSAgX2h0bWxiYXJzVXRpbEFycmF5VXRpbHMuZm9yRWFjaCh2b2lkVGFnTmFtZXMuc3BsaXQo
IiAiKSwgZnVuY3Rpb24gKHRhZ05hbWUpIHsKLSAgICB2b2lkTWFwW3RhZ05hbWVdID0gdHJ1ZTsK
LSAgfSk7Ci0KLSAgZXhwb3J0cy5kZWZhdWx0ID0gdm9pZE1hcDsKLX0pOwotZW5pZmVkKCJtb3Jw
aC1hdHRyIiwgWyJleHBvcnRzIiwgIm1vcnBoLWF0dHIvc2FuaXRpemUtYXR0cmlidXRlLXZhbHVl
IiwgImRvbS1oZWxwZXIvcHJvcCIsICJkb20taGVscGVyL2J1aWxkLWh0bWwtZG9tIiwgImh0bWxi
YXJzLXV0aWwiXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9tb3JwaEF0dHJTYW5pdGl6ZUF0dHJpYnV0
ZVZhbHVlLCBfZG9tSGVscGVyUHJvcCwgX2RvbUhlbHBlckJ1aWxkSHRtbERvbSwgX2h0bWxiYXJz
VXRpbCkgewotICAidXNlIHN0cmljdCI7Ci0KLSAgZnVuY3Rpb24gZ2V0UHJvcGVydHkoKSB7Ci0g
ICAgcmV0dXJuIHRoaXMuZG9tSGVscGVyLmdldFByb3BlcnR5U3RyaWN0KHRoaXMuZWxlbWVudCwg
dGhpcy5hdHRyTmFtZSk7Ci0gIH0KLQotICBmdW5jdGlvbiB1cGRhdGVQcm9wZXJ0eSh2YWx1ZSkg
ewotICAgIGlmICh0aGlzLl9yZW5kZXJlZEluaXRpYWxseSA9PT0gdHJ1ZSB8fCAhX2RvbUhlbHBl
clByb3AuaXNBdHRyUmVtb3ZhbFZhbHVlKHZhbHVlKSkgewotICAgICAgdmFyIGVsZW1lbnQgPSB0
aGlzLmVsZW1lbnQ7Ci0gICAgICB2YXIgYXR0ck5hbWUgPSB0aGlzLmF0dHJOYW1lOwotCi0gICAg
ICBpZiAoYXR0ck5hbWUgPT09ICd2YWx1ZScgJiYgZWxlbWVudC50YWdOYW1lID09PSAnSU5QVVQn
ICYmIGVsZW1lbnQudmFsdWUgPT09IHZhbHVlKSB7Ci0gICAgICAgIC8vIERvIG5vdGhpbmcuIEF0
dGVtcHRzIHRvIGF2b2lkIGFjY2lkZW50bHkgY2hhbmdpbmcgdGhlIGlucHV0IGN1cnNvciBsb2Nh
dGlvbi4KLSAgICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS90aWxkZWlvL2h0bWxiYXJz
L3B1bGwvNDQ3IGZvciBtb3JlIGRldGFpbHMuCi0gICAgICB9IGVsc2UgewotICAgICAgICAgIC8v
IGRvIG5vdCByZW5kZXIgaWYgaW5pdGlhbCB2YWx1ZSBpcyB1bmRlZmluZWQgb3IgbnVsbAotICAg
ICAgICAgIHRoaXMuZG9tSGVscGVyLnNldFByb3BlcnR5U3RyaWN0KGVsZW1lbnQsIGF0dHJOYW1l
LCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB0aGlzLl9yZW5kZXJlZEluaXRpYWxs
eSA9IHRydWU7Ci0gIH0KLQotICBmdW5jdGlvbiBnZXRBdHRyaWJ1dGUoKSB7Ci0gICAgcmV0dXJu
IHRoaXMuZG9tSGVscGVyLmdldEF0dHJpYnV0ZSh0aGlzLmVsZW1lbnQsIHRoaXMuYXR0ck5hbWUp
OwotICB9Ci0KLSAgZnVuY3Rpb24gdXBkYXRlQXR0cmlidXRlKHZhbHVlKSB7Ci0gICAgaWYgKF9k
b21IZWxwZXJQcm9wLmlzQXR0clJlbW92YWxWYWx1ZSh2YWx1ZSkpIHsKLSAgICAgIHRoaXMuZG9t
SGVscGVyLnJlbW92ZUF0dHJpYnV0ZSh0aGlzLmVsZW1lbnQsIHRoaXMuYXR0ck5hbWUpOwotICAg
IH0gZWxzZSB7Ci0gICAgICB0aGlzLmRvbUhlbHBlci5zZXRBdHRyaWJ1dGUodGhpcy5lbGVtZW50
LCB0aGlzLmF0dHJOYW1lLCB2YWx1ZSk7Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gZ2V0QXR0
cmlidXRlTlMoKSB7Ci0gICAgcmV0dXJuIHRoaXMuZG9tSGVscGVyLmdldEF0dHJpYnV0ZU5TKHRo
aXMuZWxlbWVudCwgdGhpcy5uYW1lc3BhY2UsIHRoaXMuYXR0ck5hbWUpOwotICB9Ci0KLSAgZnVu
Y3Rpb24gdXBkYXRlQXR0cmlidXRlTlModmFsdWUpIHsKLSAgICBpZiAoX2RvbUhlbHBlclByb3Au
aXNBdHRyUmVtb3ZhbFZhbHVlKHZhbHVlKSkgewotICAgICAgdGhpcy5kb21IZWxwZXIucmVtb3Zl
QXR0cmlidXRlKHRoaXMuZWxlbWVudCwgdGhpcy5hdHRyTmFtZSk7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgIHRoaXMuZG9tSGVscGVyLnNldEF0dHJpYnV0ZU5TKHRoaXMuZWxlbWVudCwgdGhpcy5uYW1l
c3BhY2UsIHRoaXMuYXR0ck5hbWUsIHZhbHVlKTsKLSAgICB9Ci0gIH0KLQotICB2YXIgVU5TRVQg
PSB7IHVuc2V0OiB0cnVlIH07Ci0KLSAgdmFyIGd1aWQgPSAxOwotCi0gIEF0dHJNb3JwaC5jcmVh
dGUgPSBmdW5jdGlvbiAoZWxlbWVudCwgYXR0ck5hbWUsIGRvbUhlbHBlciwgbmFtZXNwYWNlKSB7
Ci0gICAgdmFyIG5zID0gX2h0bWxiYXJzVXRpbC5nZXRBdHRyTmFtZXNwYWNlKGF0dHJOYW1lLCBu
YW1lc3BhY2UpOwotCi0gICAgaWYgKG5zKSB7Ci0gICAgICByZXR1cm4gbmV3IEF0dHJpYnV0ZU5T
QXR0ck1vcnBoKGVsZW1lbnQsIGF0dHJOYW1lLCBkb21IZWxwZXIsIG5zKTsKLSAgICB9IGVsc2Ug
ewotICAgICAgcmV0dXJuIGNyZWF0ZU5vbk5hbWVzcGFjZWRBdHRyTW9ycGgoZWxlbWVudCwgYXR0
ck5hbWUsIGRvbUhlbHBlcik7Ci0gICAgfQotICB9OwotCi0gIGZ1bmN0aW9uIGNyZWF0ZU5vbk5h
bWVzcGFjZWRBdHRyTW9ycGgoZWxlbWVudCwgYXR0ck5hbWUsIGRvbUhlbHBlcikgewotICAgIHZh
ciBfbm9ybWFsaXplUHJvcGVydHkgPSBfZG9tSGVscGVyUHJvcC5ub3JtYWxpemVQcm9wZXJ0eShl
bGVtZW50LCBhdHRyTmFtZSk7Ci0KLSAgICB2YXIgbm9ybWFsaXplZCA9IF9ub3JtYWxpemVQcm9w
ZXJ0eS5ub3JtYWxpemVkOwotICAgIHZhciB0eXBlID0gX25vcm1hbGl6ZVByb3BlcnR5LnR5cGU7
Ci0KLSAgICBpZiAoZWxlbWVudC5uYW1lc3BhY2VVUkkgPT09IF9kb21IZWxwZXJCdWlsZEh0bWxE
b20uc3ZnTmFtZXNwYWNlIHx8IGF0dHJOYW1lID09PSAnc3R5bGUnIHx8IHR5cGUgPT09ICdhdHRy
JykgewotICAgICAgcmV0dXJuIG5ldyBBdHRyaWJ1dGVBdHRyTW9ycGgoZWxlbWVudCwgbm9ybWFs
aXplZCwgZG9tSGVscGVyKTsKLSAgICB9IGVsc2UgewotICAgICAgcmV0dXJuIG5ldyBQcm9wZXJ0
eUF0dHJNb3JwaChlbGVtZW50LCBub3JtYWxpemVkLCBkb21IZWxwZXIpOwotICAgIH0KLSAgfQot
Ci0gIGZ1bmN0aW9uIEF0dHJNb3JwaChlbGVtZW50LCBhdHRyTmFtZSwgZG9tSGVscGVyKSB7Ci0g
ICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDsKLSAgICB0aGlzLmRvbUhlbHBlciA9IGRvbUhlbHBl
cjsKLSAgICB0aGlzLmF0dHJOYW1lID0gYXR0ck5hbWU7Ci0gICAgdGhpcy5fc3RhdGUgPSB1bmRl
ZmluZWQ7Ci0gICAgdGhpcy5pc0RpcnR5ID0gZmFsc2U7Ci0gICAgdGhpcy5pc1N1YnRyZWVEaXJ0
eSA9IGZhbHNlOwotICAgIHRoaXMuZXNjYXBlZCA9IHRydWU7Ci0gICAgdGhpcy5sYXN0VmFsdWUg
PSBVTlNFVDsKLSAgICB0aGlzLmxhc3RSZXN1bHQgPSBudWxsOwotICAgIHRoaXMubGFzdFlpZWxk
ZWQgPSBudWxsOwotICAgIHRoaXMuY2hpbGROb2RlcyA9IG51bGw7Ci0gICAgdGhpcy5saW5rZWRQ
YXJhbXMgPSBudWxsOwotICAgIHRoaXMubGlua2VkUmVzdWx0ID0gbnVsbDsKLSAgICB0aGlzLmd1
aWQgPSAiYXR0ciIgKyBndWlkKys7Ci0gICAgdGhpcy5zZWVuID0gZmFsc2U7Ci0gICAgdGhpcy5v
d25lck5vZGUgPSBudWxsOwotICAgIHRoaXMucmVuZGVyZWQgPSBmYWxzZTsKLSAgICB0aGlzLl9y
ZW5kZXJlZEluaXRpYWxseSA9IGZhbHNlOwotICAgIHRoaXMubmFtZXNwYWNlID0gdW5kZWZpbmVk
OwotICAgIHRoaXMuZGlkSW5pdCgpOwotICB9Ci0KLSAgQXR0ck1vcnBoLnByb3RvdHlwZS5nZXRT
dGF0ZSA9IGZ1bmN0aW9uICgpIHsKLSAgICBpZiAoIXRoaXMuX3N0YXRlKSB7Ci0gICAgICB0aGlz
Ll9zdGF0ZSA9IHt9OwotICAgIH0KLQotICAgIHJldHVybiB0aGlzLl9zdGF0ZTsKLSAgfTsKLQot
ICBBdHRyTW9ycGgucHJvdG90eXBlLnNldFN0YXRlID0gZnVuY3Rpb24gKG5ld1N0YXRlKSB7Ci0g
ICAgLypqc2hpbnQgLVcwOTMgKi8KLQotICAgIHJldHVybiB0aGlzLl9zdGF0ZSA9IG5ld1N0YXRl
OwotICB9OwotCi0gIEF0dHJNb3JwaC5wcm90b3R5cGUuZGlkSW5pdCA9IGZ1bmN0aW9uICgpIHt9
OwotICBBdHRyTW9ycGgucHJvdG90eXBlLndpbGxTZXRDb250ZW50ID0gZnVuY3Rpb24gKCkge307
Ci0KLSAgQXR0ck1vcnBoLnByb3RvdHlwZS5zZXRDb250ZW50ID0gZnVuY3Rpb24gKHZhbHVlKSB7
Ci0gICAgdGhpcy53aWxsU2V0Q29udGVudCh2YWx1ZSk7Ci0KLSAgICBpZiAodGhpcy5sYXN0VmFs
dWUgPT09IHZhbHVlKSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHRoaXMubGFzdFZhbHVl
ID0gdmFsdWU7Ci0KLSAgICBpZiAodGhpcy5lc2NhcGVkKSB7Ci0gICAgICB2YXIgc2FuaXRpemVk
ID0gX21vcnBoQXR0clNhbml0aXplQXR0cmlidXRlVmFsdWUuc2FuaXRpemVBdHRyaWJ1dGVWYWx1
ZSh0aGlzLmRvbUhlbHBlciwgdGhpcy5lbGVtZW50LCB0aGlzLmF0dHJOYW1lLCB2YWx1ZSk7Ci0g
ICAgICB0aGlzLl91cGRhdGUoc2FuaXRpemVkLCB0aGlzLm5hbWVzcGFjZSk7Ci0gICAgfSBlbHNl
IHsKLSAgICAgIHRoaXMuX3VwZGF0ZSh2YWx1ZSwgdGhpcy5uYW1lc3BhY2UpOwotICAgIH0KLSAg
fTsKLQotICBBdHRyTW9ycGgucHJvdG90eXBlLmdldENvbnRlbnQgPSBmdW5jdGlvbiAoKSB7Ci0g
ICAgdmFyIHZhbHVlID0gdGhpcy5sYXN0VmFsdWUgPSB0aGlzLl9nZXQoKTsKLSAgICByZXR1cm4g
dmFsdWU7Ci0gIH07Ci0KLSAgLy8gcmVuZGVyQW5kQ2xlYW51cCBjYWxscyBgY2xlYXJgIG9uIGFs
bCBpdGVtcyBpbiB0aGUgbW9ycGggbWFwCi0gIC8vIGp1c3QgYmVmb3JlIGNhbGxpbmcgYGRlc3Ry
b3lgIG9uIHRoZSBtb3JwaC4KLSAgLy8KLSAgLy8gQXMgYSBmdXR1cmUgcmVmYWN0b3IgdGhpcyBj
b3VsZCBiZSBjaGFuZ2VkIHRvIHNldCB0aGUgcHJvcGVydHkKLSAgLy8gYmFjayB0byBpdHMgb3Jp
Z2luYWwvZGVmYXVsdCB2YWx1ZS4KLSAgQXR0ck1vcnBoLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0
aW9uICgpIHt9OwotCi0gIEF0dHJNb3JwaC5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgp
IHsKLSAgICB0aGlzLmVsZW1lbnQgPSBudWxsOwotICAgIHRoaXMuZG9tSGVscGVyID0gbnVsbDsK
LSAgfTsKLQotICBBdHRyTW9ycGgucHJvdG90eXBlLl8kc3VwZXJBdHRyTW9ycGggPSBBdHRyTW9y
cGg7Ci0KLSAgZnVuY3Rpb24gUHJvcGVydHlBdHRyTW9ycGgoZWxlbWVudCwgYXR0ck5hbWUsIGRv
bUhlbHBlcikgewotICAgIHRoaXMuXyRzdXBlckF0dHJNb3JwaChlbGVtZW50LCBhdHRyTmFtZSwg
ZG9tSGVscGVyKTsKLSAgfQotCi0gIFByb3BlcnR5QXR0ck1vcnBoLnByb3RvdHlwZSA9IE9iamVj
dC5jcmVhdGUoQXR0ck1vcnBoLnByb3RvdHlwZSk7Ci0gIFByb3BlcnR5QXR0ck1vcnBoLnByb3Rv
dHlwZS5fdXBkYXRlID0gdXBkYXRlUHJvcGVydHk7Ci0gIFByb3BlcnR5QXR0ck1vcnBoLnByb3Rv
dHlwZS5fZ2V0ID0gZ2V0UHJvcGVydHk7Ci0KLSAgZnVuY3Rpb24gQXR0cmlidXRlTlNBdHRyTW9y
cGgoZWxlbWVudCwgYXR0ck5hbWUsIGRvbUhlbHBlciwgbmFtZXNwYWNlKSB7Ci0gICAgdGhpcy5f
JHN1cGVyQXR0ck1vcnBoKGVsZW1lbnQsIGF0dHJOYW1lLCBkb21IZWxwZXIpOwotICAgIHRoaXMu
bmFtZXNwYWNlID0gbmFtZXNwYWNlOwotICB9Ci0KLSAgQXR0cmlidXRlTlNBdHRyTW9ycGgucHJv
dG90eXBlID0gT2JqZWN0LmNyZWF0ZShBdHRyTW9ycGgucHJvdG90eXBlKTsKLSAgQXR0cmlidXRl
TlNBdHRyTW9ycGgucHJvdG90eXBlLl91cGRhdGUgPSB1cGRhdGVBdHRyaWJ1dGVOUzsKLSAgQXR0
cmlidXRlTlNBdHRyTW9ycGgucHJvdG90eXBlLl9nZXQgPSBnZXRBdHRyaWJ1dGVOUzsKLQotICBm
dW5jdGlvbiBBdHRyaWJ1dGVBdHRyTW9ycGgoZWxlbWVudCwgYXR0ck5hbWUsIGRvbUhlbHBlcikg
ewotICAgIHRoaXMuXyRzdXBlckF0dHJNb3JwaChlbGVtZW50LCBhdHRyTmFtZSwgZG9tSGVscGVy
KTsKLSAgfQotCi0gIEF0dHJpYnV0ZUF0dHJNb3JwaC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRl
KEF0dHJNb3JwaC5wcm90b3R5cGUpOwotICBBdHRyaWJ1dGVBdHRyTW9ycGgucHJvdG90eXBlLl91
cGRhdGUgPSB1cGRhdGVBdHRyaWJ1dGU7Ci0gIEF0dHJpYnV0ZUF0dHJNb3JwaC5wcm90b3R5cGUu
X2dldCA9IGdldEF0dHJpYnV0ZTsKLQotICBleHBvcnRzLmRlZmF1bHQgPSBBdHRyTW9ycGg7Ci0g
IGV4cG9ydHMuc2FuaXRpemVBdHRyaWJ1dGVWYWx1ZSA9IF9tb3JwaEF0dHJTYW5pdGl6ZUF0dHJp
YnV0ZVZhbHVlLnNhbml0aXplQXR0cmlidXRlVmFsdWU7Ci19KTsKLWVuaWZlZCgnbW9ycGgtYXR0
ci9zYW5pdGl6ZS1hdHRyaWJ1dGUtdmFsdWUnLCBbJ2V4cG9ydHMnXSwgZnVuY3Rpb24gKGV4cG9y
dHMpIHsKLSAgLyoganNoaW50IHNjcmlwdHVybDp0cnVlICovCi0KLSAgJ3VzZSBzdHJpY3QnOwot
Ci0gIGV4cG9ydHMuc2FuaXRpemVBdHRyaWJ1dGVWYWx1ZSA9IHNhbml0aXplQXR0cmlidXRlVmFs
dWU7Ci0gIHZhciBiYWRQcm90b2NvbHMgPSB7Ci0gICAgJ2phdmFzY3JpcHQ6JzogdHJ1ZSwKLSAg
ICAndmJzY3JpcHQ6JzogdHJ1ZQotICB9OwotCi0gIHZhciBiYWRUYWdzID0gewotICAgICdBJzog
dHJ1ZSwKLSAgICAnQk9EWSc6IHRydWUsCi0gICAgJ0xJTksnOiB0cnVlLAotICAgICdJTUcnOiB0
cnVlLAotICAgICdJRlJBTUUnOiB0cnVlLAotICAgICdCQVNFJzogdHJ1ZSwKLSAgICAnRk9STSc6
IHRydWUKLSAgfTsKLQotICB2YXIgYmFkVGFnc0ZvckRhdGFVUkkgPSB7Ci0gICAgJ0VNQkVEJzog
dHJ1ZQotICB9OwotCi0gIHZhciBiYWRBdHRyaWJ1dGVzID0gewotICAgICdocmVmJzogdHJ1ZSwK
LSAgICAnc3JjJzogdHJ1ZSwKLSAgICAnYmFja2dyb3VuZCc6IHRydWUsCi0gICAgJ2FjdGlvbic6
IHRydWUKLSAgfTsKLQotICBleHBvcnRzLmJhZEF0dHJpYnV0ZXMgPSBiYWRBdHRyaWJ1dGVzOwot
ICB2YXIgYmFkQXR0cmlidXRlc0ZvckRhdGFVUkkgPSB7Ci0gICAgJ3NyYyc6IHRydWUKLSAgfTsK
LQotICBmdW5jdGlvbiBzYW5pdGl6ZUF0dHJpYnV0ZVZhbHVlKGRvbSwgZWxlbWVudCwgYXR0cmli
dXRlLCB2YWx1ZSkgewotICAgIHZhciB0YWdOYW1lOwotCi0gICAgaWYgKCFlbGVtZW50KSB7Ci0g
ICAgICB0YWdOYW1lID0gbnVsbDsKLSAgICB9IGVsc2UgewotICAgICAgdGFnTmFtZSA9IGVsZW1l
bnQudGFnTmFtZS50b1VwcGVyQ2FzZSgpOwotICAgIH0KLQotICAgIGlmICh2YWx1ZSAmJiB2YWx1
ZS50b0hUTUwpIHsKLSAgICAgIHJldHVybiB2YWx1ZS50b0hUTUwoKTsKLSAgICB9Ci0KLSAgICBp
ZiAoKHRhZ05hbWUgPT09IG51bGwgfHwgYmFkVGFnc1t0YWdOYW1lXSkgJiYgYmFkQXR0cmlidXRl
c1thdHRyaWJ1dGVdKSB7Ci0gICAgICB2YXIgcHJvdG9jb2wgPSBkb20ucHJvdG9jb2xGb3JVUkwo
dmFsdWUpOwotICAgICAgaWYgKGJhZFByb3RvY29sc1twcm90b2NvbF0gPT09IHRydWUpIHsKLSAg
ICAgICAgcmV0dXJuICd1bnNhZmU6JyArIHZhbHVlOwotICAgICAgfQotICAgIH0KLQotICAgIGlm
IChiYWRUYWdzRm9yRGF0YVVSSVt0YWdOYW1lXSAmJiBiYWRBdHRyaWJ1dGVzRm9yRGF0YVVSSVth
dHRyaWJ1dGVdKSB7Ci0gICAgICByZXR1cm4gJ3Vuc2FmZTonICsgdmFsdWU7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIHZhbHVlOwotICB9Ci19KTsKLWVuaWZlZCgnbW9ycGgtcmFuZ2UnLCBbJ2V4cG9y
dHMnLCAnbW9ycGgtcmFuZ2UvdXRpbHMnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9tb3JwaFJhbmdl
VXRpbHMpIHsKLSAgJ3VzZSBzdHJpY3QnOwotCi0gIC8vIGNvbnN0cnVjdG9yIGp1c3QgaW5pdGlh
bGl6ZXMgdGhlIGZpZWxkcwotICAvLyB1c2Ugb25lIG9mIHRoZSBzdGF0aWMgaW5pdGlhbGl6ZXJz
IHRvIGNyZWF0ZSBhIHZhbGlkIG1vcnBoLgotICBmdW5jdGlvbiBNb3JwaChkb21IZWxwZXIsIGNv
bnRleHR1YWxFbGVtZW50KSB7Ci0gICAgdGhpcy5kb21IZWxwZXIgPSBkb21IZWxwZXI7Ci0gICAg
Ly8gY29udGV4dCBpZiBjb250ZW50IGlmIGN1cnJlbnQgY29udGVudCBpcyBkZXRhY2hlZAotICAg
IHRoaXMuY29udGV4dHVhbEVsZW1lbnQgPSBjb250ZXh0dWFsRWxlbWVudDsKLSAgICAvLyBpbmNs
dXNpdmUgcmFuZ2Ugb2YgbW9ycGgKLSAgICAvLyB0aGVzZSBzaG91bGQgYmUgbm9kZVR5cGUgMSwg
Mywgb3IgOAotICAgIHRoaXMuZmlyc3ROb2RlID0gbnVsbDsKLSAgICB0aGlzLmxhc3ROb2RlID0g
bnVsbDsKLQotICAgIC8vIGZsYWcgdG8gZm9yY2UgdGV4dCB0byBzZXRDb250ZW50IHRvIGJlIHRy
ZWF0ZWQgYXMgaHRtbAotICAgIHRoaXMucGFyc2VUZXh0QXNIVE1MID0gZmFsc2U7Ci0KLSAgICAv
LyBtb3JwaCBsaXN0IGdyYXBoCi0gICAgdGhpcy5wYXJlbnRNb3JwaExpc3QgPSBudWxsOwotICAg
IHRoaXMucHJldmlvdXNNb3JwaCA9IG51bGw7Ci0gICAgdGhpcy5uZXh0TW9ycGggPSBudWxsOwot
ICB9Ci0KLSAgTW9ycGguZW1wdHkgPSBmdW5jdGlvbiAoZG9tSGVscGVyLCBjb250ZXh0dWFsRWxl
bWVudCkgewotICAgIHZhciBtb3JwaCA9IG5ldyBNb3JwaChkb21IZWxwZXIsIGNvbnRleHR1YWxF
bGVtZW50KTsKLSAgICBtb3JwaC5jbGVhcigpOwotICAgIHJldHVybiBtb3JwaDsKLSAgfTsKLQot
ICBNb3JwaC5jcmVhdGUgPSBmdW5jdGlvbiAoZG9tSGVscGVyLCBjb250ZXh0dWFsRWxlbWVudCwg
bm9kZSkgewotICAgIHZhciBtb3JwaCA9IG5ldyBNb3JwaChkb21IZWxwZXIsIGNvbnRleHR1YWxF
bGVtZW50KTsKLSAgICBtb3JwaC5zZXROb2RlKG5vZGUpOwotICAgIHJldHVybiBtb3JwaDsKLSAg
fTsKLQotICBNb3JwaC5hdHRhY2ggPSBmdW5jdGlvbiAoZG9tSGVscGVyLCBjb250ZXh0dWFsRWxl
bWVudCwgZmlyc3ROb2RlLCBsYXN0Tm9kZSkgewotICAgIHZhciBtb3JwaCA9IG5ldyBNb3JwaChk
b21IZWxwZXIsIGNvbnRleHR1YWxFbGVtZW50KTsKLSAgICBtb3JwaC5zZXRSYW5nZShmaXJzdE5v
ZGUsIGxhc3ROb2RlKTsKLSAgICByZXR1cm4gbW9ycGg7Ci0gIH07Ci0KLSAgTW9ycGgucHJvdG90
eXBlLnNldENvbnRlbnQgPSBmdW5jdGlvbiBNb3JwaCRzZXRDb250ZW50KGNvbnRlbnQpIHsKLSAg
ICBpZiAoY29udGVudCA9PT0gbnVsbCB8fCBjb250ZW50ID09PSB1bmRlZmluZWQpIHsKLSAgICAg
IHJldHVybiB0aGlzLmNsZWFyKCk7Ci0gICAgfQotCi0gICAgdmFyIHR5cGUgPSB0eXBlb2YgY29u
dGVudDsKLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgIGNhc2UgJ3N0cmluZyc6Ci0gICAgICAg
IGlmICh0aGlzLnBhcnNlVGV4dEFzSFRNTCkgewotICAgICAgICAgIHJldHVybiB0aGlzLmRvbUhl
bHBlci5zZXRNb3JwaEhUTUwodGhpcywgY29udGVudCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0
dXJuIHRoaXMuc2V0VGV4dChjb250ZW50KTsKLSAgICAgIGNhc2UgJ29iamVjdCc6Ci0gICAgICAg
IGlmICh0eXBlb2YgY29udGVudC5ub2RlVHlwZSA9PT0gJ251bWJlcicpIHsKLSAgICAgICAgICBy
ZXR1cm4gdGhpcy5zZXROb2RlKGNvbnRlbnQpOwotICAgICAgICB9Ci0gICAgICAgIC8qIEhhbmRs
ZWJhcnMuU2FmZVN0cmluZyAqLwotICAgICAgICBpZiAodHlwZW9mIGNvbnRlbnQudG9IVE1MID09
PSAnZnVuY3Rpb24nKSB7Ci0gICAgICAgICAgcmV0dXJuIHRoaXMuc2V0SFRNTChjb250ZW50LnRv
SFRNTCgpKTsKLSAgICAgICAgfQotICAgICAgICBpZiAodGhpcy5wYXJzZVRleHRBc0hUTUwpIHsK
LSAgICAgICAgICByZXR1cm4gdGhpcy5zZXRIVE1MKGNvbnRlbnQudG9TdHJpbmcoKSk7Ci0gICAg
ICAgIH0KLSAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi8KLSAgICAgIGNhc2UgJ2Jvb2xlYW4nOgot
ICAgICAgY2FzZSAnbnVtYmVyJzoKLSAgICAgICAgcmV0dXJuIHRoaXMuc2V0VGV4dChjb250ZW50
LnRvU3RyaW5nKCkpOwotICAgICAgY2FzZSAnZnVuY3Rpb24nOgotICAgICAgICByYWlzZUNhbm5v
dEJpbmRUb0Z1bmN0aW9uKGNvbnRlbnQpOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgdGhyb3cg
bmV3IFR5cGVFcnJvcigndW5zdXBwb3J0ZWQgY29udGVudCcpOwotICAgIH0KLSAgfTsKLQotICBm
dW5jdGlvbiByYWlzZUNhbm5vdEJpbmRUb0Z1bmN0aW9uKGNvbnRlbnQpIHsKLSAgICB2YXIgZnVu
Y3Rpb25OYW1lID0gY29udGVudC5uYW1lOwotICAgIHZhciBtZXNzYWdlOwotCi0gICAgaWYgKGZ1
bmN0aW9uTmFtZSkgewotICAgICAgbWVzc2FnZSA9ICdVbnN1cHBvcnRlZCBDb250ZW50OiBDYW5u
b3QgYmluZCB0byBmdW5jdGlvbiBgJyArIGZ1bmN0aW9uTmFtZSArICdgJzsKLSAgICB9IGVsc2Ug
ewotICAgICAgbWVzc2FnZSA9ICdVbnN1cHBvcnRlZCBDb250ZW50OiBDYW5ub3QgYmluZCB0byBm
dW5jdGlvbic7Ci0gICAgfQotCi0gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihtZXNzYWdlKTsKLSAg
fQotCi0gIE1vcnBoLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uIE1vcnBoJGNsZWFyKCkgewot
ICAgIHZhciBub2RlID0gdGhpcy5zZXROb2RlKHRoaXMuZG9tSGVscGVyLmNyZWF0ZUNvbW1lbnQo
JycpKTsKLSAgICByZXR1cm4gbm9kZTsKLSAgfTsKLQotICBNb3JwaC5wcm90b3R5cGUuc2V0VGV4
dCA9IGZ1bmN0aW9uIE1vcnBoJHNldFRleHQodGV4dCkgewotICAgIHZhciBmaXJzdE5vZGUgPSB0
aGlzLmZpcnN0Tm9kZTsKLSAgICB2YXIgbGFzdE5vZGUgPSB0aGlzLmxhc3ROb2RlOwotCi0gICAg
aWYgKGZpcnN0Tm9kZSAmJiBsYXN0Tm9kZSA9PT0gZmlyc3ROb2RlICYmIGZpcnN0Tm9kZS5ub2Rl
VHlwZSA9PT0gMykgewotICAgICAgZmlyc3ROb2RlLm5vZGVWYWx1ZSA9IHRleHQ7Ci0gICAgICBy
ZXR1cm4gZmlyc3ROb2RlOwotICAgIH0KLQotICAgIHJldHVybiB0aGlzLnNldE5vZGUodGV4dCA/
IHRoaXMuZG9tSGVscGVyLmNyZWF0ZVRleHROb2RlKHRleHQpIDogdGhpcy5kb21IZWxwZXIuY3Jl
YXRlQ29tbWVudCgnJykpOwotICB9OwotCi0gIE1vcnBoLnByb3RvdHlwZS5zZXROb2RlID0gZnVu
Y3Rpb24gTW9ycGgkc2V0Tm9kZShuZXdOb2RlKSB7Ci0gICAgdmFyIGZpcnN0Tm9kZSwgbGFzdE5v
ZGU7Ci0gICAgc3dpdGNoIChuZXdOb2RlLm5vZGVUeXBlKSB7Ci0gICAgICBjYXNlIDM6Ci0gICAg
ICAgIGZpcnN0Tm9kZSA9IG5ld05vZGU7Ci0gICAgICAgIGxhc3ROb2RlID0gbmV3Tm9kZTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIDExOgotICAgICAgICBmaXJzdE5vZGUgPSBuZXdOb2Rl
LmZpcnN0Q2hpbGQ7Ci0gICAgICAgIGxhc3ROb2RlID0gbmV3Tm9kZS5sYXN0Q2hpbGQ7Ci0gICAg
ICAgIGlmIChmaXJzdE5vZGUgPT09IG51bGwpIHsKLSAgICAgICAgICBmaXJzdE5vZGUgPSB0aGlz
LmRvbUhlbHBlci5jcmVhdGVDb21tZW50KCcnKTsKLSAgICAgICAgICBuZXdOb2RlLmFwcGVuZENo
aWxkKGZpcnN0Tm9kZSk7Ci0gICAgICAgICAgbGFzdE5vZGUgPSBmaXJzdE5vZGU7Ci0gICAgICAg
IH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBmaXJzdE5vZGUgPSBu
ZXdOb2RlOwotICAgICAgICBsYXN0Tm9kZSA9IG5ld05vZGU7Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KLQotICAgIHRoaXMuc2V0UmFuZ2UoZmlyc3ROb2RlLCBsYXN0Tm9kZSk7Ci0KLSAgICByZXR1
cm4gbmV3Tm9kZTsKLSAgfTsKLQotICBNb3JwaC5wcm90b3R5cGUuc2V0UmFuZ2UgPSBmdW5jdGlv
biAoZmlyc3ROb2RlLCBsYXN0Tm9kZSkgewotICAgIHZhciBwcmV2aW91c0ZpcnN0Tm9kZSA9IHRo
aXMuZmlyc3ROb2RlOwotICAgIGlmIChwcmV2aW91c0ZpcnN0Tm9kZSAhPT0gbnVsbCkgewotCi0g
ICAgICB2YXIgcGFyZW50Tm9kZSA9IHByZXZpb3VzRmlyc3ROb2RlLnBhcmVudE5vZGU7Ci0gICAg
ICBpZiAocGFyZW50Tm9kZSAhPT0gbnVsbCkgewotICAgICAgICBfbW9ycGhSYW5nZVV0aWxzLmlu
c2VydEJlZm9yZShwYXJlbnROb2RlLCBmaXJzdE5vZGUsIGxhc3ROb2RlLCBwcmV2aW91c0ZpcnN0
Tm9kZSk7Ci0gICAgICAgIF9tb3JwaFJhbmdlVXRpbHMuY2xlYXIocGFyZW50Tm9kZSwgcHJldmlv
dXNGaXJzdE5vZGUsIHRoaXMubGFzdE5vZGUpOwotICAgICAgfQotICAgIH0KLQotICAgIHRoaXMu
Zmlyc3ROb2RlID0gZmlyc3ROb2RlOwotICAgIHRoaXMubGFzdE5vZGUgPSBsYXN0Tm9kZTsKLQot
ICAgIGlmICh0aGlzLnBhcmVudE1vcnBoTGlzdCkgewotICAgICAgdGhpcy5fc3luY0ZpcnN0Tm9k
ZSgpOwotICAgICAgdGhpcy5fc3luY0xhc3ROb2RlKCk7Ci0gICAgfQotICB9OwotCi0gIE1vcnBo
LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gTW9ycGgkZGVzdHJveSgpIHsKLSAgICB0aGlz
LnVubGluaygpOwotCi0gICAgdmFyIGZpcnN0Tm9kZSA9IHRoaXMuZmlyc3ROb2RlOwotICAgIHZh
ciBsYXN0Tm9kZSA9IHRoaXMubGFzdE5vZGU7Ci0gICAgdmFyIHBhcmVudE5vZGUgPSBmaXJzdE5v
ZGUgJiYgZmlyc3ROb2RlLnBhcmVudE5vZGU7Ci0KLSAgICB0aGlzLmZpcnN0Tm9kZSA9IG51bGw7
Ci0gICAgdGhpcy5sYXN0Tm9kZSA9IG51bGw7Ci0KLSAgICBfbW9ycGhSYW5nZVV0aWxzLmNsZWFy
KHBhcmVudE5vZGUsIGZpcnN0Tm9kZSwgbGFzdE5vZGUpOwotICB9OwotCi0gIE1vcnBoLnByb3Rv
dHlwZS51bmxpbmsgPSBmdW5jdGlvbiBNb3JwaCR1bmxpbmsoKSB7Ci0gICAgdmFyIHBhcmVudE1v
cnBoTGlzdCA9IHRoaXMucGFyZW50TW9ycGhMaXN0OwotICAgIHZhciBwcmV2aW91c01vcnBoID0g
dGhpcy5wcmV2aW91c01vcnBoOwotICAgIHZhciBuZXh0TW9ycGggPSB0aGlzLm5leHRNb3JwaDsK
LQotICAgIGlmIChwcmV2aW91c01vcnBoKSB7Ci0gICAgICBpZiAobmV4dE1vcnBoKSB7Ci0gICAg
ICAgIHByZXZpb3VzTW9ycGgubmV4dE1vcnBoID0gbmV4dE1vcnBoOwotICAgICAgICBuZXh0TW9y
cGgucHJldmlvdXNNb3JwaCA9IHByZXZpb3VzTW9ycGg7Ci0gICAgICB9IGVsc2UgewotICAgICAg
ICBwcmV2aW91c01vcnBoLm5leHRNb3JwaCA9IG51bGw7Ci0gICAgICAgIHBhcmVudE1vcnBoTGlz
dC5sYXN0Q2hpbGRNb3JwaCA9IHByZXZpb3VzTW9ycGg7Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsK
LSAgICAgIGlmIChuZXh0TW9ycGgpIHsKLSAgICAgICAgbmV4dE1vcnBoLnByZXZpb3VzTW9ycGgg
PSBudWxsOwotICAgICAgICBwYXJlbnRNb3JwaExpc3QuZmlyc3RDaGlsZE1vcnBoID0gbmV4dE1v
cnBoOwotICAgICAgfSBlbHNlIGlmIChwYXJlbnRNb3JwaExpc3QpIHsKLSAgICAgICAgcGFyZW50
TW9ycGhMaXN0Lmxhc3RDaGlsZE1vcnBoID0gcGFyZW50TW9ycGhMaXN0LmZpcnN0Q2hpbGRNb3Jw
aCA9IG51bGw7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgdGhpcy5wYXJlbnRNb3JwaExpc3QgPSBu
dWxsOwotICAgIHRoaXMubmV4dE1vcnBoID0gbnVsbDsKLSAgICB0aGlzLnByZXZpb3VzTW9ycGgg
PSBudWxsOwotCi0gICAgaWYgKHBhcmVudE1vcnBoTGlzdCAmJiBwYXJlbnRNb3JwaExpc3QubW91
bnRlZE1vcnBoKSB7Ci0gICAgICBpZiAoIXBhcmVudE1vcnBoTGlzdC5maXJzdENoaWxkTW9ycGgp
IHsKLSAgICAgICAgLy8gbGlzdCBpcyBlbXB0eQotICAgICAgICBwYXJlbnRNb3JwaExpc3QubW91
bnRlZE1vcnBoLmNsZWFyKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgIHBhcmVudE1vcnBoTGlzdC5maXJzdENoaWxkTW9ycGguX3N5bmNGaXJzdE5vZGUoKTsKLSAg
ICAgICAgcGFyZW50TW9ycGhMaXN0Lmxhc3RDaGlsZE1vcnBoLl9zeW5jTGFzdE5vZGUoKTsKLSAg
ICAgIH0KLSAgICB9Ci0gIH07Ci0KLSAgTW9ycGgucHJvdG90eXBlLnNldEhUTUwgPSBmdW5jdGlv
biAodGV4dCkgewotICAgIHZhciBmcmFnbWVudCA9IHRoaXMuZG9tSGVscGVyLnBhcnNlSFRNTCh0
ZXh0LCB0aGlzLmNvbnRleHR1YWxFbGVtZW50KTsKLSAgICByZXR1cm4gdGhpcy5zZXROb2RlKGZy
YWdtZW50KTsKLSAgfTsKLQotICBNb3JwaC5wcm90b3R5cGUuc2V0TW9ycGhMaXN0ID0gZnVuY3Rp
b24gTW9ycGgkYXBwZW5kTW9ycGhMaXN0KG1vcnBoTGlzdCkgewotICAgIG1vcnBoTGlzdC5tb3Vu
dGVkTW9ycGggPSB0aGlzOwotICAgIHRoaXMuY2xlYXIoKTsKLQotICAgIHZhciBvcmlnaW5hbEZp
cnN0Tm9kZSA9IHRoaXMuZmlyc3ROb2RlOwotCi0gICAgaWYgKG1vcnBoTGlzdC5maXJzdENoaWxk
TW9ycGgpIHsKLSAgICAgIHRoaXMuZmlyc3ROb2RlID0gbW9ycGhMaXN0LmZpcnN0Q2hpbGRNb3Jw
aC5maXJzdE5vZGU7Ci0gICAgICB0aGlzLmxhc3ROb2RlID0gbW9ycGhMaXN0Lmxhc3RDaGlsZE1v
cnBoLmxhc3ROb2RlOwotCi0gICAgICB2YXIgY3VycmVudCA9IG1vcnBoTGlzdC5maXJzdENoaWxk
TW9ycGg7Ci0KLSAgICAgIHdoaWxlIChjdXJyZW50KSB7Ci0gICAgICAgIHZhciBuZXh0ID0gY3Vy
cmVudC5uZXh0TW9ycGg7Ci0gICAgICAgIGN1cnJlbnQuaW5zZXJ0QmVmb3JlTm9kZShvcmlnaW5h
bEZpcnN0Tm9kZSwgbnVsbCk7Ci0gICAgICAgIGN1cnJlbnQgPSBuZXh0OwotICAgICAgfQotICAg
ICAgb3JpZ2luYWxGaXJzdE5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChvcmlnaW5hbEZpcnN0
Tm9kZSk7Ci0gICAgfQotICB9OwotCi0gIE1vcnBoLnByb3RvdHlwZS5fc3luY0ZpcnN0Tm9kZSA9
IGZ1bmN0aW9uIE1vcnBoJHN5bmNGaXJzdE5vZGUoKSB7Ci0gICAgdmFyIG1vcnBoID0gdGhpczsK
LSAgICB2YXIgcGFyZW50TW9ycGhMaXN0OwotICAgIHdoaWxlIChwYXJlbnRNb3JwaExpc3QgPSBt
b3JwaC5wYXJlbnRNb3JwaExpc3QpIHsKLSAgICAgIGlmIChwYXJlbnRNb3JwaExpc3QubW91bnRl
ZE1vcnBoID09PSBudWxsKSB7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgaWYgKG1v
cnBoICE9PSBwYXJlbnRNb3JwaExpc3QuZmlyc3RDaGlsZE1vcnBoKSB7Ci0gICAgICAgIGJyZWFr
OwotICAgICAgfQotICAgICAgaWYgKG1vcnBoLmZpcnN0Tm9kZSA9PT0gcGFyZW50TW9ycGhMaXN0
Lm1vdW50ZWRNb3JwaC5maXJzdE5vZGUpIHsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAg
ICAgIHBhcmVudE1vcnBoTGlzdC5tb3VudGVkTW9ycGguZmlyc3ROb2RlID0gbW9ycGguZmlyc3RO
b2RlOwotCi0gICAgICBtb3JwaCA9IHBhcmVudE1vcnBoTGlzdC5tb3VudGVkTW9ycGg7Ci0gICAg
fQotICB9OwotCi0gIE1vcnBoLnByb3RvdHlwZS5fc3luY0xhc3ROb2RlID0gZnVuY3Rpb24gTW9y
cGgkc3luY0xhc3ROb2RlKCkgewotICAgIHZhciBtb3JwaCA9IHRoaXM7Ci0gICAgdmFyIHBhcmVu
dE1vcnBoTGlzdDsKLSAgICB3aGlsZSAocGFyZW50TW9ycGhMaXN0ID0gbW9ycGgucGFyZW50TW9y
cGhMaXN0KSB7Ci0gICAgICBpZiAocGFyZW50TW9ycGhMaXN0Lm1vdW50ZWRNb3JwaCA9PT0gbnVs
bCkgewotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGlmIChtb3JwaCAhPT0gcGFyZW50
TW9ycGhMaXN0Lmxhc3RDaGlsZE1vcnBoKSB7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAg
ICAgaWYgKG1vcnBoLmxhc3ROb2RlID09PSBwYXJlbnRNb3JwaExpc3QubW91bnRlZE1vcnBoLmxh
c3ROb2RlKSB7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICBwYXJlbnRNb3JwaExp
c3QubW91bnRlZE1vcnBoLmxhc3ROb2RlID0gbW9ycGgubGFzdE5vZGU7Ci0KLSAgICAgIG1vcnBo
ID0gcGFyZW50TW9ycGhMaXN0Lm1vdW50ZWRNb3JwaDsKLSAgICB9Ci0gIH07Ci0KLSAgTW9ycGgu
cHJvdG90eXBlLmluc2VydEJlZm9yZU5vZGUgPSBmdW5jdGlvbiBNb3JwaCRpbnNlcnRCZWZvcmVO
b2RlKHBhcmVudE5vZGUsIHJlZk5vZGUpIHsKLSAgICBfbW9ycGhSYW5nZVV0aWxzLmluc2VydEJl
Zm9yZShwYXJlbnROb2RlLCB0aGlzLmZpcnN0Tm9kZSwgdGhpcy5sYXN0Tm9kZSwgcmVmTm9kZSk7
Ci0gIH07Ci0KLSAgTW9ycGgucHJvdG90eXBlLmFwcGVuZFRvTm9kZSA9IGZ1bmN0aW9uIE1vcnBo
JGFwcGVuZFRvTm9kZShwYXJlbnROb2RlKSB7Ci0gICAgX21vcnBoUmFuZ2VVdGlscy5pbnNlcnRC
ZWZvcmUocGFyZW50Tm9kZSwgdGhpcy5maXJzdE5vZGUsIHRoaXMubGFzdE5vZGUsIG51bGwpOwot
ICB9OwotCi0gIGV4cG9ydHMuZGVmYXVsdCA9IE1vcnBoOwotfSk7Ci1lbmlmZWQoJ21vcnBoLXJh
bmdlL21vcnBoLWxpc3QnLCBbJ2V4cG9ydHMnLCAnbW9ycGgtcmFuZ2UvdXRpbHMnXSwgZnVuY3Rp
b24gKGV4cG9ydHMsIF9tb3JwaFJhbmdlVXRpbHMpIHsKLSAgJ3VzZSBzdHJpY3QnOwotCi0gIGZ1
bmN0aW9uIE1vcnBoTGlzdCgpIHsKLSAgICAvLyBtb3JwaCBncmFwaAotICAgIHRoaXMuZmlyc3RD
aGlsZE1vcnBoID0gbnVsbDsKLSAgICB0aGlzLmxhc3RDaGlsZE1vcnBoID0gbnVsbDsKLQotICAg
IHRoaXMubW91bnRlZE1vcnBoID0gbnVsbDsKLSAgfQotCi0gIHZhciBwcm90b3R5cGUgPSBNb3Jw
aExpc3QucHJvdG90eXBlOwotCi0gIHByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uIE1vcnBoTGlz
dCRjbGVhcigpIHsKLSAgICB2YXIgY3VycmVudCA9IHRoaXMuZmlyc3RDaGlsZE1vcnBoOwotCi0g
ICAgd2hpbGUgKGN1cnJlbnQpIHsKLSAgICAgIHZhciBuZXh0ID0gY3VycmVudC5uZXh0TW9ycGg7
Ci0gICAgICBjdXJyZW50LnByZXZpb3VzTW9ycGggPSBudWxsOwotICAgICAgY3VycmVudC5uZXh0
TW9ycGggPSBudWxsOwotICAgICAgY3VycmVudC5wYXJlbnRNb3JwaExpc3QgPSBudWxsOwotICAg
ICAgY3VycmVudCA9IG5leHQ7Ci0gICAgfQotCi0gICAgdGhpcy5maXJzdENoaWxkTW9ycGggPSB0
aGlzLmxhc3RDaGlsZE1vcnBoID0gbnVsbDsKLSAgfTsKLQotICBwcm90b3R5cGUuZGVzdHJveSA9
IGZ1bmN0aW9uIE1vcnBoTGlzdCRkZXN0cm95KCkge307Ci0KLSAgcHJvdG90eXBlLmFwcGVuZE1v
cnBoID0gZnVuY3Rpb24gTW9ycGhMaXN0JGFwcGVuZE1vcnBoKG1vcnBoKSB7Ci0gICAgdGhpcy5p
bnNlcnRCZWZvcmVNb3JwaChtb3JwaCwgbnVsbCk7Ci0gIH07Ci0KLSAgcHJvdG90eXBlLmluc2Vy
dEJlZm9yZU1vcnBoID0gZnVuY3Rpb24gTW9ycGhMaXN0JGluc2VydEJlZm9yZU1vcnBoKG1vcnBo
LCByZWZlcmVuY2VNb3JwaCkgewotICAgIGlmIChtb3JwaC5wYXJlbnRNb3JwaExpc3QgIT09IG51
bGwpIHsKLSAgICAgIG1vcnBoLnVubGluaygpOwotICAgIH0KLSAgICBpZiAocmVmZXJlbmNlTW9y
cGggJiYgcmVmZXJlbmNlTW9ycGgucGFyZW50TW9ycGhMaXN0ICE9PSB0aGlzKSB7Ci0gICAgICB0
aHJvdyBuZXcgRXJyb3IoJ1RoZSBtb3JwaCBiZWZvcmUgd2hpY2ggdGhlIG5ldyBtb3JwaCBpcyB0
byBiZSBpbnNlcnRlZCBpcyBub3QgYSBjaGlsZCBvZiB0aGlzIG1vcnBoLicpOwotICAgIH0KLQot
ICAgIHZhciBtb3VudGVkTW9ycGggPSB0aGlzLm1vdW50ZWRNb3JwaDsKLQotICAgIGlmIChtb3Vu
dGVkTW9ycGgpIHsKLQotICAgICAgdmFyIHBhcmVudE5vZGUgPSBtb3VudGVkTW9ycGguZmlyc3RO
b2RlLnBhcmVudE5vZGU7Ci0gICAgICB2YXIgcmVmZXJlbmNlTm9kZSA9IHJlZmVyZW5jZU1vcnBo
ID8gcmVmZXJlbmNlTW9ycGguZmlyc3ROb2RlIDogbW91bnRlZE1vcnBoLmxhc3ROb2RlLm5leHRT
aWJsaW5nOwotCi0gICAgICBfbW9ycGhSYW5nZVV0aWxzLmluc2VydEJlZm9yZShwYXJlbnROb2Rl
LCBtb3JwaC5maXJzdE5vZGUsIG1vcnBoLmxhc3ROb2RlLCByZWZlcmVuY2VOb2RlKTsKLQotICAg
ICAgLy8gd2FzIG5vdCBpbiBsaXN0IG1vZGUgcmVwbGFjZSBjdXJyZW50IGNvbnRlbnQKLSAgICAg
IGlmICghdGhpcy5maXJzdENoaWxkTW9ycGgpIHsKLSAgICAgICAgX21vcnBoUmFuZ2VVdGlscy5j
bGVhcih0aGlzLm1vdW50ZWRNb3JwaC5maXJzdE5vZGUucGFyZW50Tm9kZSwgdGhpcy5tb3VudGVk
TW9ycGguZmlyc3ROb2RlLCB0aGlzLm1vdW50ZWRNb3JwaC5sYXN0Tm9kZSk7Ci0gICAgICB9Ci0g
ICAgfQotCi0gICAgbW9ycGgucGFyZW50TW9ycGhMaXN0ID0gdGhpczsKLQotICAgIHZhciBwcmV2
aW91c01vcnBoID0gcmVmZXJlbmNlTW9ycGggPyByZWZlcmVuY2VNb3JwaC5wcmV2aW91c01vcnBo
IDogdGhpcy5sYXN0Q2hpbGRNb3JwaDsKLSAgICBpZiAocHJldmlvdXNNb3JwaCkgewotICAgICAg
cHJldmlvdXNNb3JwaC5uZXh0TW9ycGggPSBtb3JwaDsKLSAgICAgIG1vcnBoLnByZXZpb3VzTW9y
cGggPSBwcmV2aW91c01vcnBoOwotICAgIH0gZWxzZSB7Ci0gICAgICB0aGlzLmZpcnN0Q2hpbGRN
b3JwaCA9IG1vcnBoOwotICAgIH0KLQotICAgIGlmIChyZWZlcmVuY2VNb3JwaCkgewotICAgICAg
cmVmZXJlbmNlTW9ycGgucHJldmlvdXNNb3JwaCA9IG1vcnBoOwotICAgICAgbW9ycGgubmV4dE1v
cnBoID0gcmVmZXJlbmNlTW9ycGg7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHRoaXMubGFzdENoaWxk
TW9ycGggPSBtb3JwaDsKLSAgICB9Ci0KLSAgICB0aGlzLmZpcnN0Q2hpbGRNb3JwaC5fc3luY0Zp
cnN0Tm9kZSgpOwotICAgIHRoaXMubGFzdENoaWxkTW9ycGguX3N5bmNMYXN0Tm9kZSgpOwotICB9
OwotCi0gIHByb3RvdHlwZS5yZW1vdmVDaGlsZE1vcnBoID0gZnVuY3Rpb24gTW9ycGhMaXN0JHJl
bW92ZUNoaWxkTW9ycGgobW9ycGgpIHsKLSAgICBpZiAobW9ycGgucGFyZW50TW9ycGhMaXN0ICE9
PSB0aGlzKSB7Ci0gICAgICB0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCByZW1vdmUgYSBtb3JwaCBm
cm9tIGEgcGFyZW50IGl0IGlzIG5vdCBpbnNpZGUgb2YiKTsKLSAgICB9Ci0KLSAgICBtb3JwaC5k
ZXN0cm95KCk7Ci0gIH07Ci0KLSAgZXhwb3J0cy5kZWZhdWx0ID0gTW9ycGhMaXN0OwotfSk7Ci1l
bmlmZWQoJ21vcnBoLXJhbmdlL21vcnBoLWxpc3QudW1kJywgWydleHBvcnRzJywgJ21vcnBoLXJh
bmdlL21vcnBoLWxpc3QnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9tb3JwaFJhbmdlTW9ycGhMaXN0
KSB7Ci0gICd1c2Ugc3RyaWN0JzsKLQotICAoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnkpIHsKLSAg
ICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7Ci0gICAg
ICBkZWZpbmUoW10sIGZhY3RvcnkpOwotICAgIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgPT09
ICdvYmplY3QnKSB7Ci0gICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTsKLSAgICB9IGVs
c2UgewotICAgICAgcm9vdC5Nb3JwaExpc3QgPSBmYWN0b3J5KCk7Ci0gICAgfQotICB9KSh1bmRl
ZmluZWQsIGZ1bmN0aW9uICgpIHsKLSAgICByZXR1cm4gX21vcnBoUmFuZ2VNb3JwaExpc3QuZGVm
YXVsdDsKLSAgfSk7Ci19KTsKLWVuaWZlZCgibW9ycGgtcmFuZ2UvdXRpbHMiLCBbImV4cG9ydHMi
XSwgZnVuY3Rpb24gKGV4cG9ydHMpIHsKLSAgLy8gaW5jbHVzaXZlIG9mIGJvdGggbm9kZXMKLSAg
InVzZSBzdHJpY3QiOwotCi0gIGV4cG9ydHMuY2xlYXIgPSBjbGVhcjsKLSAgZXhwb3J0cy5pbnNl
cnRCZWZvcmUgPSBpbnNlcnRCZWZvcmU7Ci0KLSAgZnVuY3Rpb24gY2xlYXIocGFyZW50Tm9kZSwg
Zmlyc3ROb2RlLCBsYXN0Tm9kZSkgewotICAgIGlmICghcGFyZW50Tm9kZSkgewotICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIHZhciBub2RlID0gZmlyc3ROb2RlOwotICAgIHZhciBuZXh0Tm9k
ZTsKLSAgICBkbyB7Ci0gICAgICBuZXh0Tm9kZSA9IG5vZGUubmV4dFNpYmxpbmc7Ci0gICAgICBw
YXJlbnROb2RlLnJlbW92ZUNoaWxkKG5vZGUpOwotICAgICAgaWYgKG5vZGUgPT09IGxhc3ROb2Rl
KSB7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgbm9kZSA9IG5leHROb2RlOwotICAg
IH0gd2hpbGUgKG5vZGUpOwotICB9Ci0KLSAgZnVuY3Rpb24gaW5zZXJ0QmVmb3JlKHBhcmVudE5v
ZGUsIGZpcnN0Tm9kZSwgbGFzdE5vZGUsIHJlZk5vZGUpIHsKLSAgICB2YXIgbm9kZSA9IGZpcnN0
Tm9kZTsKLSAgICB2YXIgbmV4dE5vZGU7Ci0gICAgZG8gewotICAgICAgbmV4dE5vZGUgPSBub2Rl
Lm5leHRTaWJsaW5nOwotICAgICAgcGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobm9kZSwgcmVmTm9k
ZSk7Ci0gICAgICBpZiAobm9kZSA9PT0gbGFzdE5vZGUpIHsKLSAgICAgICAgYnJlYWs7Ci0gICAg
ICB9Ci0gICAgICBub2RlID0gbmV4dE5vZGU7Ci0gICAgfSB3aGlsZSAobm9kZSk7Ci0gIH0KLX0p
OwotZW5pZmVkKCdyb3V0ZS1yZWNvZ25pemVyJywgWydleHBvcnRzJywgJ3JvdXRlLXJlY29nbml6
ZXIvZHNsJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfcm91dGVSZWNvZ25pemVyRHNsKSB7Ci0gICd1
c2Ugc3RyaWN0JzsKLQotICB2YXIgc3BlY2lhbHMgPSBbJy8nLCAnLicsICcqJywgJysnLCAnPycs
ICd8JywgJygnLCAnKScsICdbJywgJ10nLCAneycsICd9JywgJ1xcJ107Ci0KLSAgdmFyIGVzY2Fw
ZVJlZ2V4ID0gbmV3IFJlZ0V4cCgnKFxcJyArIHNwZWNpYWxzLmpvaW4oJ3xcXCcpICsgJyknLCAn
ZycpOwotCi0gIGZ1bmN0aW9uIGlzQXJyYXkodGVzdCkgewotICAgIHJldHVybiBPYmplY3QucHJv
dG90eXBlLnRvU3RyaW5nLmNhbGwodGVzdCkgPT09ICJbb2JqZWN0IEFycmF5XSI7Ci0gIH0KLQot
ICAvLyBBIFNlZ21lbnQgcmVwcmVzZW50cyBhIHNlZ21lbnQgaW4gdGhlIG9yaWdpbmFsIHJvdXRl
IGRlc2NyaXB0aW9uLgotICAvLyBFYWNoIFNlZ21lbnQgdHlwZSBwcm92aWRlcyBhbiBgZWFjaENo
YXJgIGFuZCBgcmVnZXhgIG1ldGhvZC4KLSAgLy8KLSAgLy8gVGhlIGBlYWNoQ2hhcmAgbWV0aG9k
IGludm9rZXMgdGhlIGNhbGxiYWNrIHdpdGggb25lIG9yIG1vcmUgY2hhcmFjdGVyCi0gIC8vIHNw
ZWNpZmljYXRpb25zLiBBIGNoYXJhY3RlciBzcGVjaWZpY2F0aW9uIGNvbnN1bWVzIG9uZSBvciBt
b3JlIGlucHV0Ci0gIC8vIGNoYXJhY3RlcnMuCi0gIC8vCi0gIC8vIFRoZSBgcmVnZXhgIG1ldGhv
ZCByZXR1cm5zIGEgcmVnZXggZnJhZ21lbnQgZm9yIHRoZSBzZWdtZW50LiBJZiB0aGUKLSAgLy8g
c2VnbWVudCBpcyBhIGR5bmFtaWMgb2Ygc3RhciBzZWdtZW50LCB0aGUgcmVnZXggZnJhZ21lbnQg
YWxzbyBpbmNsdWRlcwotICAvLyBhIGNhcHR1cmUuCi0gIC8vCi0gIC8vIEEgY2hhcmFjdGVyIHNw
ZWNpZmljYXRpb24gY29udGFpbnM6Ci0gIC8vCi0gIC8vICogYHZhbGlkQ2hhcnNgOiBhIFN0cmlu
ZyB3aXRoIGEgbGlzdCBvZiBhbGwgdmFsaWQgY2hhcmFjdGVycywgb3IKLSAgLy8gKiBgaW52YWxp
ZENoYXJzYDogYSBTdHJpbmcgd2l0aCBhIGxpc3Qgb2YgYWxsIGludmFsaWQgY2hhcmFjdGVycwot
ICAvLyAqIGByZXBlYXRgOiB0cnVlIGlmIHRoZSBjaGFyYWN0ZXIgc3BlY2lmaWNhdGlvbiBjYW4g
cmVwZWF0Ci0KLSAgZnVuY3Rpb24gU3RhdGljU2VnbWVudChzdHJpbmcpIHsKLSAgICB0aGlzLnN0
cmluZyA9IHN0cmluZzsKLSAgfQotICBTdGF0aWNTZWdtZW50LnByb3RvdHlwZSA9IHsKLSAgICBl
YWNoQ2hhcjogZnVuY3Rpb24gKGNhbGxiYWNrKSB7Ci0gICAgICB2YXIgc3RyaW5nID0gdGhpcy5z
dHJpbmcsCi0gICAgICAgICAgY2g7Ci0KLSAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gc3RyaW5n
Lmxlbmd0aDsgaSA8IGw7IGkrKykgewotICAgICAgICBjaCA9IHN0cmluZy5jaGFyQXQoaSk7Ci0g
ICAgICAgIGNhbGxiYWNrKHsgdmFsaWRDaGFyczogY2ggfSk7Ci0gICAgICB9Ci0gICAgfSwKLQot
ICAgIHJlZ2V4OiBmdW5jdGlvbiAoKSB7Ci0gICAgICByZXR1cm4gdGhpcy5zdHJpbmcucmVwbGFj
ZShlc2NhcGVSZWdleCwgJ1xcJDEnKTsKLSAgICB9LAotCi0gICAgZ2VuZXJhdGU6IGZ1bmN0aW9u
ICgpIHsKLSAgICAgIHJldHVybiB0aGlzLnN0cmluZzsKLSAgICB9Ci0gIH07Ci0KLSAgZnVuY3Rp
b24gRHluYW1pY1NlZ21lbnQobmFtZSkgewotICAgIHRoaXMubmFtZSA9IG5hbWU7Ci0gIH0KLSAg
RHluYW1pY1NlZ21lbnQucHJvdG90eXBlID0gewotICAgIGVhY2hDaGFyOiBmdW5jdGlvbiAoY2Fs
bGJhY2spIHsKLSAgICAgIGNhbGxiYWNrKHsgaW52YWxpZENoYXJzOiAiLyIsIHJlcGVhdDogdHJ1
ZSB9KTsKLSAgICB9LAotCi0gICAgcmVnZXg6IGZ1bmN0aW9uICgpIHsKLSAgICAgIHJldHVybiAi
KFteL10rKSI7Ci0gICAgfSwKLQotICAgIGdlbmVyYXRlOiBmdW5jdGlvbiAocGFyYW1zKSB7Ci0g
ICAgICByZXR1cm4gcGFyYW1zW3RoaXMubmFtZV07Ci0gICAgfQotICB9OwotCi0gIGZ1bmN0aW9u
IFN0YXJTZWdtZW50KG5hbWUpIHsKLSAgICB0aGlzLm5hbWUgPSBuYW1lOwotICB9Ci0gIFN0YXJT
ZWdtZW50LnByb3RvdHlwZSA9IHsKLSAgICBlYWNoQ2hhcjogZnVuY3Rpb24gKGNhbGxiYWNrKSB7
Ci0gICAgICBjYWxsYmFjayh7IGludmFsaWRDaGFyczogIiIsIHJlcGVhdDogdHJ1ZSB9KTsKLSAg
ICB9LAotCi0gICAgcmVnZXg6IGZ1bmN0aW9uICgpIHsKLSAgICAgIHJldHVybiAiKC4rKSI7Ci0g
ICAgfSwKLQotICAgIGdlbmVyYXRlOiBmdW5jdGlvbiAocGFyYW1zKSB7Ci0gICAgICByZXR1cm4g
cGFyYW1zW3RoaXMubmFtZV07Ci0gICAgfQotICB9OwotCi0gIGZ1bmN0aW9uIEVwc2lsb25TZWdt
ZW50KCkge30KLSAgRXBzaWxvblNlZ21lbnQucHJvdG90eXBlID0gewotICAgIGVhY2hDaGFyOiBm
dW5jdGlvbiAoKSB7fSwKLSAgICByZWdleDogZnVuY3Rpb24gKCkgewotICAgICAgcmV0dXJuICIi
OwotICAgIH0sCi0gICAgZ2VuZXJhdGU6IGZ1bmN0aW9uICgpIHsKLSAgICAgIHJldHVybiAiIjsK
LSAgICB9Ci0gIH07Ci0KLSAgZnVuY3Rpb24gcGFyc2Uocm91dGUsIG5hbWVzLCB0eXBlcykgewot
ICAgIC8vIG5vcm1hbGl6ZSByb3V0ZSBhcyBub3Qgc3RhcnRpbmcgd2l0aCBhICIvIi4gUmVjb2du
aXRpb24gd2lsbAotICAgIC8vIGFsc28gbm9ybWFsaXplLgotICAgIGlmIChyb3V0ZS5jaGFyQXQo
MCkgPT09ICIvIikgewotICAgICAgcm91dGUgPSByb3V0ZS5zdWJzdHIoMSk7Ci0gICAgfQotCi0g
ICAgdmFyIHNlZ21lbnRzID0gcm91dGUuc3BsaXQoIi8iKSwKLSAgICAgICAgcmVzdWx0cyA9IFtd
OwotCi0gICAgZm9yICh2YXIgaSA9IDAsIGwgPSBzZWdtZW50cy5sZW5ndGg7IGkgPCBsOyBpKysp
IHsKLSAgICAgIHZhciBzZWdtZW50ID0gc2VnbWVudHNbaV0sCi0gICAgICAgICAgbWF0Y2g7Ci0K
LSAgICAgIGlmIChtYXRjaCA9IHNlZ21lbnQubWF0Y2goL146KFteXC9dKykkLykpIHsKLSAgICAg
ICAgcmVzdWx0cy5wdXNoKG5ldyBEeW5hbWljU2VnbWVudChtYXRjaFsxXSkpOwotICAgICAgICBu
YW1lcy5wdXNoKG1hdGNoWzFdKTsKLSAgICAgICAgdHlwZXMuZHluYW1pY3MrKzsKLSAgICAgIH0g
ZWxzZSBpZiAobWF0Y2ggPSBzZWdtZW50Lm1hdGNoKC9eXCooW15cL10rKSQvKSkgewotICAgICAg
ICByZXN1bHRzLnB1c2gobmV3IFN0YXJTZWdtZW50KG1hdGNoWzFdKSk7Ci0gICAgICAgIG5hbWVz
LnB1c2gobWF0Y2hbMV0pOwotICAgICAgICB0eXBlcy5zdGFycysrOwotICAgICAgfSBlbHNlIGlm
IChzZWdtZW50ID09PSAiIikgewotICAgICAgICByZXN1bHRzLnB1c2gobmV3IEVwc2lsb25TZWdt
ZW50KCkpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcmVzdWx0cy5wdXNoKG5ldyBTdGF0aWNT
ZWdtZW50KHNlZ21lbnQpKTsKLSAgICAgICAgdHlwZXMuc3RhdGljcysrOwotICAgICAgfQotICAg
IH0KLQotICAgIHJldHVybiByZXN1bHRzOwotICB9Ci0KLSAgLy8gQSBTdGF0ZSBoYXMgYSBjaGFy
YWN0ZXIgc3BlY2lmaWNhdGlvbiBhbmQgKGBjaGFyU3BlY2ApIGFuZCBhIGxpc3Qgb2YgcG9zc2li
bGUKLSAgLy8gc3Vic2VxdWVudCBzdGF0ZXMgKGBuZXh0U3RhdGVzYCkuCi0gIC8vCi0gIC8vIElm
IGEgU3RhdGUgaXMgYW4gYWNjZXB0aW5nIHN0YXRlLCBpdCB3aWxsIGFsc28gaGF2ZSBzZXZlcmFs
IGFkZGl0aW9uYWwKLSAgLy8gcHJvcGVydGllczoKLSAgLy8KLSAgLy8gKiBgcmVnZXhgOiBBIHJl
Z3VsYXIgZXhwcmVzc2lvbiB0aGF0IGlzIHVzZWQgdG8gZXh0cmFjdCBwYXJhbWV0ZXJzIGZyb20g
cGF0aHMKLSAgLy8gICB0aGF0IHJlYWNoZWQgdGhpcyBhY2NlcHRpbmcgc3RhdGUuCi0gIC8vICog
YGhhbmRsZXJzYDogSW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnZlcnQgdGhlIGxpc3Qgb2YgY2Fw
dHVyZXMgaW50byBjYWxscwotICAvLyAgIHRvIHJlZ2lzdGVyZWQgaGFuZGxlcnMgd2l0aCB0aGUg
c3BlY2lmaWVkIHBhcmFtZXRlcnMKLSAgLy8gKiBgdHlwZXNgOiBIb3cgbWFueSBzdGF0aWMsIGR5
bmFtaWMgb3Igc3RhciBzZWdtZW50cyBpbiB0aGlzIHJvdXRlLiBVc2VkIHRvCi0gIC8vICAgZGVj
aWRlIHdoaWNoIHJvdXRlIHRvIHVzZSBpZiBtdWx0aXBsZSByZWdpc3RlcmVkIHJvdXRlcyBtYXRj
aCBhIHBhdGguCi0gIC8vCi0gIC8vIEN1cnJlbnRseSwgU3RhdGUgaXMgaW1wbGVtZW50ZWQgbmFp
dmVseSBieSBsb29waW5nIG92ZXIgYG5leHRTdGF0ZXNgIGFuZAotICAvLyBjb21wYXJpbmcgYSBj
aGFyYWN0ZXIgc3BlY2lmaWNhdGlvbiBhZ2FpbnN0IGEgY2hhcmFjdGVyLiBBIG1vcmUgZWZmaWNp
ZW50Ci0gIC8vIGltcGxlbWVudGF0aW9uIHdvdWxkIHVzZSBhIGhhc2ggb2Yga2V5cyBwb2ludGlu
ZyBhdCBvbmUgb3IgbW9yZSBuZXh0IHN0YXRlcy4KLQotICBmdW5jdGlvbiBTdGF0ZShjaGFyU3Bl
YykgewotICAgIHRoaXMuY2hhclNwZWMgPSBjaGFyU3BlYzsKLSAgICB0aGlzLm5leHRTdGF0ZXMg
PSBbXTsKLSAgfQotCi0gIFN0YXRlLnByb3RvdHlwZSA9IHsKLSAgICBnZXQ6IGZ1bmN0aW9uIChj
aGFyU3BlYykgewotICAgICAgdmFyIG5leHRTdGF0ZXMgPSB0aGlzLm5leHRTdGF0ZXM7Ci0KLSAg
ICAgIGZvciAodmFyIGkgPSAwLCBsID0gbmV4dFN0YXRlcy5sZW5ndGg7IGkgPCBsOyBpKyspIHsK
LSAgICAgICAgdmFyIGNoaWxkID0gbmV4dFN0YXRlc1tpXTsKLQotICAgICAgICB2YXIgaXNFcXVh
bCA9IGNoaWxkLmNoYXJTcGVjLnZhbGlkQ2hhcnMgPT09IGNoYXJTcGVjLnZhbGlkQ2hhcnM7Ci0g
ICAgICAgIGlzRXF1YWwgPSBpc0VxdWFsICYmIGNoaWxkLmNoYXJTcGVjLmludmFsaWRDaGFycyA9
PT0gY2hhclNwZWMuaW52YWxpZENoYXJzOwotCi0gICAgICAgIGlmIChpc0VxdWFsKSB7Ci0gICAg
ICAgICAgcmV0dXJuIGNoaWxkOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLQotICAgIHB1
dDogZnVuY3Rpb24gKGNoYXJTcGVjKSB7Ci0gICAgICB2YXIgc3RhdGU7Ci0KLSAgICAgIC8vIElm
IHRoZSBjaGFyYWN0ZXIgc3BlY2lmaWNhdGlvbiBhbHJlYWR5IGV4aXN0cyBpbiBhIGNoaWxkIG9m
IHRoZSBjdXJyZW50Ci0gICAgICAvLyBzdGF0ZSwganVzdCByZXR1cm4gdGhhdCBzdGF0ZS4KLSAg
ICAgIGlmIChzdGF0ZSA9IHRoaXMuZ2V0KGNoYXJTcGVjKSkgewotICAgICAgICByZXR1cm4gc3Rh
dGU7Ci0gICAgICB9Ci0KLSAgICAgIC8vIE1ha2UgYSBuZXcgc3RhdGUgZm9yIHRoZSBjaGFyYWN0
ZXIgc3BlYwotICAgICAgc3RhdGUgPSBuZXcgU3RhdGUoY2hhclNwZWMpOwotCi0gICAgICAvLyBJ
bnNlcnQgdGhlIG5ldyBzdGF0ZSBhcyBhIGNoaWxkIG9mIHRoZSBjdXJyZW50IHN0YXRlCi0gICAg
ICB0aGlzLm5leHRTdGF0ZXMucHVzaChzdGF0ZSk7Ci0KLSAgICAgIC8vIElmIHRoaXMgY2hhcmFj
dGVyIHNwZWNpZmljYXRpb24gcmVwZWF0cywgaW5zZXJ0IHRoZSBuZXcgc3RhdGUgYXMgYSBjaGls
ZAotICAgICAgLy8gb2YgaXRzZWxmLiBOb3RlIHRoYXQgdGhpcyB3aWxsIG5vdCB0cmlnZ2VyIGFu
IGluZmluaXRlIGxvb3AgYmVjYXVzZSBlYWNoCi0gICAgICAvLyB0cmFuc2l0aW9uIGR1cmluZyBy
ZWNvZ25pdGlvbiBjb25zdW1lcyBhIGNoYXJhY3Rlci4KLSAgICAgIGlmIChjaGFyU3BlYy5yZXBl
YXQpIHsKLSAgICAgICAgc3RhdGUubmV4dFN0YXRlcy5wdXNoKHN0YXRlKTsKLSAgICAgIH0KLQot
ICAgICAgLy8gUmV0dXJuIHRoZSBuZXcgc3RhdGUKLSAgICAgIHJldHVybiBzdGF0ZTsKLSAgICB9
LAotCi0gICAgLy8gRmluZCBhIGxpc3Qgb2YgY2hpbGQgc3RhdGVzIG1hdGNoaW5nIHRoZSBuZXh0
IGNoYXJhY3RlcgotICAgIG1hdGNoOiBmdW5jdGlvbiAoY2gpIHsKLSAgICAgIC8vIERFQlVHICJQ
cm9jZXNzaW5nIGAiICsgY2ggKyAiYDoiCi0gICAgICB2YXIgbmV4dFN0YXRlcyA9IHRoaXMubmV4
dFN0YXRlcywKLSAgICAgICAgICBjaGlsZCwKLSAgICAgICAgICBjaGFyU3BlYywKLSAgICAgICAg
ICBjaGFyczsKLQotICAgICAgLy8gREVCVUcgIiAgIiArIGRlYnVnU3RhdGUodGhpcykKLSAgICAg
IHZhciByZXR1cm5lZCA9IFtdOwotCi0gICAgICBmb3IgKHZhciBpID0gMCwgbCA9IG5leHRTdGF0
ZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7Ci0gICAgICAgIGNoaWxkID0gbmV4dFN0YXRlc1tpXTsK
LQotICAgICAgICBjaGFyU3BlYyA9IGNoaWxkLmNoYXJTcGVjOwotCi0gICAgICAgIGlmICh0eXBl
b2YgKGNoYXJzID0gY2hhclNwZWMudmFsaWRDaGFycykgIT09ICd1bmRlZmluZWQnKSB7Ci0gICAg
ICAgICAgaWYgKGNoYXJzLmluZGV4T2YoY2gpICE9PSAtMSkgewotICAgICAgICAgICAgcmV0dXJu
ZWQucHVzaChjaGlsZCk7Ci0gICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiAo
Y2hhcnMgPSBjaGFyU3BlYy5pbnZhbGlkQ2hhcnMpICE9PSAndW5kZWZpbmVkJykgewotICAgICAg
ICAgIGlmIChjaGFycy5pbmRleE9mKGNoKSA9PT0gLTEpIHsKLSAgICAgICAgICAgIHJldHVybmVk
LnB1c2goY2hpbGQpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBy
ZXR1cm4gcmV0dXJuZWQ7Ci0gICAgfQotCi0gICAgLyoqIElGIERFQlVHCi0gICAgLCBkZWJ1Zzog
ZnVuY3Rpb24oKSB7Ci0gICAgICB2YXIgY2hhclNwZWMgPSB0aGlzLmNoYXJTcGVjLAotICAgICAg
ICAgIGRlYnVnID0gIlsiLAotICAgICAgICAgIGNoYXJzID0gY2hhclNwZWMudmFsaWRDaGFycyB8
fCBjaGFyU3BlYy5pbnZhbGlkQ2hhcnM7Ci0gICAgICAgaWYgKGNoYXJTcGVjLmludmFsaWRDaGFy
cykgeyBkZWJ1ZyArPSAiXiI7IH0KLSAgICAgIGRlYnVnICs9IGNoYXJzOwotICAgICAgZGVidWcg
Kz0gIl0iOwotICAgICAgIGlmIChjaGFyU3BlYy5yZXBlYXQpIHsgZGVidWcgKz0gIisiOyB9Ci0g
ICAgICAgcmV0dXJuIGRlYnVnOwotICAgIH0KLSAgICBFTkQgSUYgKiovCi0gIH07Ci0KLSAgLyoq
IElGIERFQlVHCi0gIGZ1bmN0aW9uIGRlYnVnKGxvZykgewotICAgIGNvbnNvbGUubG9nKGxvZyk7
Ci0gIH0KLSAgCi0gIGZ1bmN0aW9uIGRlYnVnU3RhdGUoc3RhdGUpIHsKLSAgICByZXR1cm4gc3Rh
dGUubmV4dFN0YXRlcy5tYXAoZnVuY3Rpb24obikgewotICAgICAgaWYgKG4ubmV4dFN0YXRlcy5s
ZW5ndGggPT09IDApIHsgcmV0dXJuICIoICIgKyBuLmRlYnVnKCkgKyAiIFthY2NlcHRpbmddICki
OyB9Ci0gICAgICByZXR1cm4gIiggIiArIG4uZGVidWcoKSArICIgPHRoZW4+ICIgKyBuLm5leHRT
dGF0ZXMubWFwKGZ1bmN0aW9uKHMpIHsgcmV0dXJuIHMuZGVidWcoKSB9KS5qb2luKCIgb3IgIikg
KyAiICkiOwotICAgIH0pLmpvaW4oIiwgIikKLSAgfQotICBFTkQgSUYgKiovCi0KLSAgLy8gVGhp
cyBpcyBhIHNvbWV3aGF0IG5haXZlIHN0cmF0ZWd5LCBidXQgc2hvdWxkIHdvcmsgaW4gYSBsb3Qg
b2YgY2FzZXMKLSAgLy8gQSBiZXR0ZXIgc3RyYXRlZ3kgd291bGQgcHJvcGVybHkgcmVzb2x2ZSAv
cG9zdHMvOmlkL25ldyBhbmQgL3Bvc3RzL2VkaXQvOmlkLgotICAvLwotICAvLyBUaGlzIHN0cmF0
ZWd5IGdlbmVyYWxseSBwcmVmZXJzIG1vcmUgc3RhdGljIGFuZCBsZXNzIGR5bmFtaWMgbWF0Y2hp
bmcuCi0gIC8vIFNwZWNpZmljYWxseSwgaXQKLSAgLy8KLSAgLy8gICogcHJlZmVycyBmZXdlciBz
dGFycyB0byBtb3JlLCB0aGVuCi0gIC8vICAqIHByZWZlcnMgdXNpbmcgc3RhcnMgZm9yIGxlc3Mg
b2YgdGhlIG1hdGNoIHRvIG1vcmUsIHRoZW4KLSAgLy8gICogcHJlZmVycyBmZXdlciBkeW5hbWlj
IHNlZ21lbnRzIHRvIG1vcmUsIHRoZW4KLSAgLy8gICogcHJlZmVycyBtb3JlIHN0YXRpYyBzZWdt
ZW50cyB0byBtb3JlCi0gIGZ1bmN0aW9uIHNvcnRTb2x1dGlvbnMoc3RhdGVzKSB7Ci0gICAgcmV0
dXJuIHN0YXRlcy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7Ci0gICAgICBpZiAoYS50eXBlcy5zdGFy
cyAhPT0gYi50eXBlcy5zdGFycykgewotICAgICAgICByZXR1cm4gYS50eXBlcy5zdGFycyAtIGIu
dHlwZXMuc3RhcnM7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChhLnR5cGVzLnN0YXJzKSB7Ci0gICAg
ICAgIGlmIChhLnR5cGVzLnN0YXRpY3MgIT09IGIudHlwZXMuc3RhdGljcykgewotICAgICAgICAg
IHJldHVybiBiLnR5cGVzLnN0YXRpY3MgLSBhLnR5cGVzLnN0YXRpY3M7Ci0gICAgICAgIH0KLSAg
ICAgICAgaWYgKGEudHlwZXMuZHluYW1pY3MgIT09IGIudHlwZXMuZHluYW1pY3MpIHsKLSAgICAg
ICAgICByZXR1cm4gYi50eXBlcy5keW5hbWljcyAtIGEudHlwZXMuZHluYW1pY3M7Ci0gICAgICAg
IH0KLSAgICAgIH0KLQotICAgICAgaWYgKGEudHlwZXMuZHluYW1pY3MgIT09IGIudHlwZXMuZHlu
YW1pY3MpIHsKLSAgICAgICAgcmV0dXJuIGEudHlwZXMuZHluYW1pY3MgLSBiLnR5cGVzLmR5bmFt
aWNzOwotICAgICAgfQotICAgICAgaWYgKGEudHlwZXMuc3RhdGljcyAhPT0gYi50eXBlcy5zdGF0
aWNzKSB7Ci0gICAgICAgIHJldHVybiBiLnR5cGVzLnN0YXRpY3MgLSBhLnR5cGVzLnN0YXRpY3M7
Ci0gICAgICB9Ci0KLSAgICAgIHJldHVybiAwOwotICAgIH0pOwotICB9Ci0KLSAgZnVuY3Rpb24g
cmVjb2duaXplQ2hhcihzdGF0ZXMsIGNoKSB7Ci0gICAgdmFyIG5leHRTdGF0ZXMgPSBbXTsKLQot
ICAgIGZvciAodmFyIGkgPSAwLCBsID0gc3RhdGVzLmxlbmd0aDsgaSA8IGw7IGkrKykgewotICAg
ICAgdmFyIHN0YXRlID0gc3RhdGVzW2ldOwotCi0gICAgICBuZXh0U3RhdGVzID0gbmV4dFN0YXRl
cy5jb25jYXQoc3RhdGUubWF0Y2goY2gpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbmV4dFN0YXRl
czsKLSAgfQotCi0gIHZhciBvQ3JlYXRlID0gT2JqZWN0LmNyZWF0ZSB8fCBmdW5jdGlvbiAocHJv
dG8pIHsKLSAgICBmdW5jdGlvbiBGKCkge30KLSAgICBGLnByb3RvdHlwZSA9IHByb3RvOwotICAg
IHJldHVybiBuZXcgRigpOwotICB9OwotCi0gIGZ1bmN0aW9uIFJlY29nbml6ZVJlc3VsdHMocXVl
cnlQYXJhbXMpIHsKLSAgICB0aGlzLnF1ZXJ5UGFyYW1zID0gcXVlcnlQYXJhbXMgfHwge307Ci0g
IH0KLSAgUmVjb2duaXplUmVzdWx0cy5wcm90b3R5cGUgPSBvQ3JlYXRlKHsKLSAgICBzcGxpY2U6
IEFycmF5LnByb3RvdHlwZS5zcGxpY2UsCi0gICAgc2xpY2U6IEFycmF5LnByb3RvdHlwZS5zbGlj
ZSwKLSAgICBwdXNoOiBBcnJheS5wcm90b3R5cGUucHVzaCwKLSAgICBsZW5ndGg6IDAsCi0gICAg
cXVlcnlQYXJhbXM6IG51bGwKLSAgfSk7Ci0KLSAgZnVuY3Rpb24gZmluZEhhbmRsZXIoc3RhdGUs
IHBhdGgsIHF1ZXJ5UGFyYW1zKSB7Ci0gICAgdmFyIGhhbmRsZXJzID0gc3RhdGUuaGFuZGxlcnMs
Ci0gICAgICAgIHJlZ2V4ID0gc3RhdGUucmVnZXg7Ci0gICAgdmFyIGNhcHR1cmVzID0gcGF0aC5t
YXRjaChyZWdleCksCi0gICAgICAgIGN1cnJlbnRDYXB0dXJlID0gMTsKLSAgICB2YXIgcmVzdWx0
ID0gbmV3IFJlY29nbml6ZVJlc3VsdHMocXVlcnlQYXJhbXMpOwotCi0gICAgZm9yICh2YXIgaSA9
IDAsIGwgPSBoYW5kbGVycy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKLSAgICAgIHZhciBoYW5kbGVy
ID0gaGFuZGxlcnNbaV0sCi0gICAgICAgICAgbmFtZXMgPSBoYW5kbGVyLm5hbWVzLAotICAgICAg
ICAgIHBhcmFtcyA9IHt9OwotCi0gICAgICBmb3IgKHZhciBqID0gMCwgbSA9IG5hbWVzLmxlbmd0
aDsgaiA8IG07IGorKykgewotICAgICAgICBwYXJhbXNbbmFtZXNbal1dID0gY2FwdHVyZXNbY3Vy
cmVudENhcHR1cmUrK107Ci0gICAgICB9Ci0KLSAgICAgIHJlc3VsdC5wdXNoKHsgaGFuZGxlcjog
aGFuZGxlci5oYW5kbGVyLCBwYXJhbXM6IHBhcmFtcywgaXNEeW5hbWljOiAhIW5hbWVzLmxlbmd0
aCB9KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgZnVuY3Rpb24gYWRk
U2VnbWVudChjdXJyZW50U3RhdGUsIHNlZ21lbnQpIHsKLSAgICBzZWdtZW50LmVhY2hDaGFyKGZ1
bmN0aW9uIChjaCkgewotICAgICAgdmFyIHN0YXRlOwotCi0gICAgICBjdXJyZW50U3RhdGUgPSBj
dXJyZW50U3RhdGUucHV0KGNoKTsKLSAgICB9KTsKLQotICAgIHJldHVybiBjdXJyZW50U3RhdGU7
Ci0gIH0KLQotICBmdW5jdGlvbiBkZWNvZGVRdWVyeVBhcmFtUGFydChwYXJ0KSB7Ci0gICAgLy8g
aHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQwMS9pbnRlcmFjdC9mb3Jtcy5odG1sI2gtMTcuMTMu
NC4xCi0gICAgcGFydCA9IHBhcnQucmVwbGFjZSgvXCsvZ20sICclMjAnKTsKLSAgICByZXR1cm4g
ZGVjb2RlVVJJQ29tcG9uZW50KHBhcnQpOwotICB9Ci0KLSAgLy8gVGhlIG1haW4gaW50ZXJmYWNl
Ci0KLSAgdmFyIFJvdXRlUmVjb2duaXplciA9IGZ1bmN0aW9uICgpIHsKLSAgICB0aGlzLnJvb3RT
dGF0ZSA9IG5ldyBTdGF0ZSgpOwotICAgIHRoaXMubmFtZXMgPSB7fTsKLSAgfTsKLQotICBSb3V0
ZVJlY29nbml6ZXIucHJvdG90eXBlID0gewotICAgIGFkZDogZnVuY3Rpb24gKHJvdXRlcywgb3B0
aW9ucykgewotICAgICAgdmFyIGN1cnJlbnRTdGF0ZSA9IHRoaXMucm9vdFN0YXRlLAotICAgICAg
ICAgIHJlZ2V4ID0gIl4iLAotICAgICAgICAgIHR5cGVzID0geyBzdGF0aWNzOiAwLCBkeW5hbWlj
czogMCwgc3RhcnM6IDAgfSwKLSAgICAgICAgICBoYW5kbGVycyA9IFtdLAotICAgICAgICAgIGFs
bFNlZ21lbnRzID0gW10sCi0gICAgICAgICAgbmFtZTsKLQotICAgICAgdmFyIGlzRW1wdHkgPSB0
cnVlOwotCi0gICAgICBmb3IgKHZhciBpID0gMCwgbCA9IHJvdXRlcy5sZW5ndGg7IGkgPCBsOyBp
KyspIHsKLSAgICAgICAgdmFyIHJvdXRlID0gcm91dGVzW2ldLAotICAgICAgICAgICAgbmFtZXMg
PSBbXTsKLQotICAgICAgICB2YXIgc2VnbWVudHMgPSBwYXJzZShyb3V0ZS5wYXRoLCBuYW1lcywg
dHlwZXMpOwotCi0gICAgICAgIGFsbFNlZ21lbnRzID0gYWxsU2VnbWVudHMuY29uY2F0KHNlZ21l
bnRzKTsKLQotICAgICAgICBmb3IgKHZhciBqID0gMCwgbSA9IHNlZ21lbnRzLmxlbmd0aDsgaiA8
IG07IGorKykgewotICAgICAgICAgIHZhciBzZWdtZW50ID0gc2VnbWVudHNbal07Ci0KLSAgICAg
ICAgICBpZiAoc2VnbWVudCBpbnN0YW5jZW9mIEVwc2lsb25TZWdtZW50KSB7Ci0gICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBpc0VtcHR5ID0gZmFsc2U7Ci0K
LSAgICAgICAgICAvLyBBZGQgYSAiLyIgZm9yIHRoZSBuZXcgc2VnbWVudAotICAgICAgICAgIGN1
cnJlbnRTdGF0ZSA9IGN1cnJlbnRTdGF0ZS5wdXQoeyB2YWxpZENoYXJzOiAiLyIgfSk7Ci0gICAg
ICAgICAgcmVnZXggKz0gIi8iOwotCi0gICAgICAgICAgLy8gQWRkIGEgcmVwcmVzZW50YXRpb24g
b2YgdGhlIHNlZ21lbnQgdG8gdGhlIE5GQSBhbmQgcmVnZXgKLSAgICAgICAgICBjdXJyZW50U3Rh
dGUgPSBhZGRTZWdtZW50KGN1cnJlbnRTdGF0ZSwgc2VnbWVudCk7Ci0gICAgICAgICAgcmVnZXgg
Kz0gc2VnbWVudC5yZWdleCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIGhhbmRsZXIgPSB7
IGhhbmRsZXI6IHJvdXRlLmhhbmRsZXIsIG5hbWVzOiBuYW1lcyB9OwotICAgICAgICBoYW5kbGVy
cy5wdXNoKGhhbmRsZXIpOwotICAgICAgfQotCi0gICAgICBpZiAoaXNFbXB0eSkgewotICAgICAg
ICBjdXJyZW50U3RhdGUgPSBjdXJyZW50U3RhdGUucHV0KHsgdmFsaWRDaGFyczogIi8iIH0pOwot
ICAgICAgICByZWdleCArPSAiLyI7Ci0gICAgICB9Ci0KLSAgICAgIGN1cnJlbnRTdGF0ZS5oYW5k
bGVycyA9IGhhbmRsZXJzOwotICAgICAgY3VycmVudFN0YXRlLnJlZ2V4ID0gbmV3IFJlZ0V4cChy
ZWdleCArICIkIik7Ci0gICAgICBjdXJyZW50U3RhdGUudHlwZXMgPSB0eXBlczsKLQotICAgICAg
aWYgKG5hbWUgPSBvcHRpb25zICYmIG9wdGlvbnMuYXMpIHsKLSAgICAgICAgdGhpcy5uYW1lc1tu
YW1lXSA9IHsKLSAgICAgICAgICBzZWdtZW50czogYWxsU2VnbWVudHMsCi0gICAgICAgICAgaGFu
ZGxlcnM6IGhhbmRsZXJzCi0gICAgICAgIH07Ci0gICAgICB9Ci0gICAgfSwKLQotICAgIGhhbmRs
ZXJzRm9yOiBmdW5jdGlvbiAobmFtZSkgewotICAgICAgdmFyIHJvdXRlID0gdGhpcy5uYW1lc1tu
YW1lXSwKLSAgICAgICAgICByZXN1bHQgPSBbXTsKLSAgICAgIGlmICghcm91dGUpIHsKLSAgICAg
ICAgdGhyb3cgbmV3IEVycm9yKCJUaGVyZSBpcyBubyByb3V0ZSBuYW1lZCAiICsgbmFtZSk7Ci0g
ICAgICB9Ci0KLSAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gcm91dGUuaGFuZGxlcnMubGVuZ3Ro
OyBpIDwgbDsgaSsrKSB7Ci0gICAgICAgIHJlc3VsdC5wdXNoKHJvdXRlLmhhbmRsZXJzW2ldKTsK
LSAgICAgIH0KLQotICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9LAotCi0gICAgaGFzUm91dGU6
IGZ1bmN0aW9uIChuYW1lKSB7Ci0gICAgICByZXR1cm4gISF0aGlzLm5hbWVzW25hbWVdOwotICAg
IH0sCi0KLSAgICBnZW5lcmF0ZTogZnVuY3Rpb24gKG5hbWUsIHBhcmFtcykgewotICAgICAgdmFy
IHJvdXRlID0gdGhpcy5uYW1lc1tuYW1lXSwKLSAgICAgICAgICBvdXRwdXQgPSAiIjsKLSAgICAg
IGlmICghcm91dGUpIHsKLSAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJUaGVyZSBpcyBubyByb3V0
ZSBuYW1lZCAiICsgbmFtZSk7Ci0gICAgICB9Ci0KLSAgICAgIHZhciBzZWdtZW50cyA9IHJvdXRl
LnNlZ21lbnRzOwotCi0gICAgICBmb3IgKHZhciBpID0gMCwgbCA9IHNlZ21lbnRzLmxlbmd0aDsg
aSA8IGw7IGkrKykgewotICAgICAgICB2YXIgc2VnbWVudCA9IHNlZ21lbnRzW2ldOwotCi0gICAg
ICAgIGlmIChzZWdtZW50IGluc3RhbmNlb2YgRXBzaWxvblNlZ21lbnQpIHsKLSAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIG91dHB1dCArPSAiLyI7Ci0gICAgICAgIG91
dHB1dCArPSBzZWdtZW50LmdlbmVyYXRlKHBhcmFtcyk7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChv
dXRwdXQuY2hhckF0KDApICE9PSAnLycpIHsKLSAgICAgICAgb3V0cHV0ID0gJy8nICsgb3V0cHV0
OwotICAgICAgfQotCi0gICAgICBpZiAocGFyYW1zICYmIHBhcmFtcy5xdWVyeVBhcmFtcykgewot
ICAgICAgICBvdXRwdXQgKz0gdGhpcy5nZW5lcmF0ZVF1ZXJ5U3RyaW5nKHBhcmFtcy5xdWVyeVBh
cmFtcywgcm91dGUuaGFuZGxlcnMpOwotICAgICAgfQotCi0gICAgICByZXR1cm4gb3V0cHV0Owot
ICAgIH0sCi0KLSAgICBnZW5lcmF0ZVF1ZXJ5U3RyaW5nOiBmdW5jdGlvbiAocGFyYW1zLCBoYW5k
bGVycykgewotICAgICAgdmFyIHBhaXJzID0gW107Ci0gICAgICB2YXIga2V5cyA9IFtdOwotICAg
ICAgZm9yICh2YXIga2V5IGluIHBhcmFtcykgewotICAgICAgICBpZiAocGFyYW1zLmhhc093blBy
b3BlcnR5KGtleSkpIHsKLSAgICAgICAgICBrZXlzLnB1c2goa2V5KTsKLSAgICAgICAgfQotICAg
ICAgfQotICAgICAga2V5cy5zb3J0KCk7Ci0gICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0ga2V5
cy5sZW5ndGg7IGkgPCBsZW47IGkrKykgewotICAgICAgICBrZXkgPSBrZXlzW2ldOwotICAgICAg
ICB2YXIgdmFsdWUgPSBwYXJhbXNba2V5XTsKLSAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIHsK
LSAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICB2YXIgcGFpciA9IGVuY29k
ZVVSSUNvbXBvbmVudChrZXkpOwotICAgICAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHsKLSAgICAg
ICAgICBmb3IgKHZhciBqID0gMCwgbCA9IHZhbHVlLmxlbmd0aDsgaiA8IGw7IGorKykgewotICAg
ICAgICAgICAgdmFyIGFycmF5UGFpciA9IGtleSArICdbXScgKyAnPScgKyBlbmNvZGVVUklDb21w
b25lbnQodmFsdWVbal0pOwotICAgICAgICAgICAgcGFpcnMucHVzaChhcnJheVBhaXIpOwotICAg
ICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBwYWlyICs9ICI9IiArIGVuY29k
ZVVSSUNvbXBvbmVudCh2YWx1ZSk7Ci0gICAgICAgICAgcGFpcnMucHVzaChwYWlyKTsKLSAgICAg
ICAgfQotICAgICAgfQotCi0gICAgICBpZiAocGFpcnMubGVuZ3RoID09PSAwKSB7Ci0gICAgICAg
IHJldHVybiAnJzsKLSAgICAgIH0KLQotICAgICAgcmV0dXJuICI/IiArIHBhaXJzLmpvaW4oIiYi
KTsKLSAgICB9LAotCi0gICAgcGFyc2VRdWVyeVN0cmluZzogZnVuY3Rpb24gKHF1ZXJ5U3RyaW5n
KSB7Ci0gICAgICB2YXIgcGFpcnMgPSBxdWVyeVN0cmluZy5zcGxpdCgiJiIpLAotICAgICAgICAg
IHF1ZXJ5UGFyYW1zID0ge307Ci0gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhaXJzLmxlbmd0
aDsgaSsrKSB7Ci0gICAgICAgIHZhciBwYWlyID0gcGFpcnNbaV0uc3BsaXQoJz0nKSwKLSAgICAg
ICAgICAgIGtleSA9IGRlY29kZVF1ZXJ5UGFyYW1QYXJ0KHBhaXJbMF0pLAotICAgICAgICAgICAg
a2V5TGVuZ3RoID0ga2V5Lmxlbmd0aCwKLSAgICAgICAgICAgIGlzQXJyYXkgPSBmYWxzZSwKLSAg
ICAgICAgICAgIHZhbHVlOwotICAgICAgICBpZiAocGFpci5sZW5ndGggPT09IDEpIHsKLSAgICAg
ICAgICB2YWx1ZSA9ICd0cnVlJzsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAvL0hhbmRs
ZSBhcnJheXMKLSAgICAgICAgICBpZiAoa2V5TGVuZ3RoID4gMiAmJiBrZXkuc2xpY2Uoa2V5TGVu
Z3RoIC0gMikgPT09ICdbXScpIHsKLSAgICAgICAgICAgIGlzQXJyYXkgPSB0cnVlOwotICAgICAg
ICAgICAga2V5ID0ga2V5LnNsaWNlKDAsIGtleUxlbmd0aCAtIDIpOwotICAgICAgICAgICAgaWYg
KCFxdWVyeVBhcmFtc1trZXldKSB7Ci0gICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zW2tleV0gPSBb
XTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgdmFsdWUgPSBwYWlyWzFd
ID8gZGVjb2RlUXVlcnlQYXJhbVBhcnQocGFpclsxXSkgOiAnJzsKLSAgICAgICAgfQotICAgICAg
ICBpZiAoaXNBcnJheSkgewotICAgICAgICAgIHF1ZXJ5UGFyYW1zW2tleV0ucHVzaCh2YWx1ZSk7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgcXVlcnlQYXJhbXNba2V5XSA9IHZhbHVlOwot
ICAgICAgICB9Ci0gICAgICB9Ci0gICAgICByZXR1cm4gcXVlcnlQYXJhbXM7Ci0gICAgfSwKLQot
ICAgIHJlY29nbml6ZTogZnVuY3Rpb24gKHBhdGgpIHsKLSAgICAgIHZhciBzdGF0ZXMgPSBbdGhp
cy5yb290U3RhdGVdLAotICAgICAgICAgIHBhdGhMZW4sCi0gICAgICAgICAgaSwKLSAgICAgICAg
ICBsLAotICAgICAgICAgIHF1ZXJ5U3RhcnQsCi0gICAgICAgICAgcXVlcnlQYXJhbXMgPSB7fSwK
LSAgICAgICAgICBpc1NsYXNoRHJvcHBlZCA9IGZhbHNlOwotCi0gICAgICBxdWVyeVN0YXJ0ID0g
cGF0aC5pbmRleE9mKCc/Jyk7Ci0gICAgICBpZiAocXVlcnlTdGFydCAhPT0gLTEpIHsKLSAgICAg
ICAgdmFyIHF1ZXJ5U3RyaW5nID0gcGF0aC5zdWJzdHIocXVlcnlTdGFydCArIDEsIHBhdGgubGVu
Z3RoKTsKLSAgICAgICAgcGF0aCA9IHBhdGguc3Vic3RyKDAsIHF1ZXJ5U3RhcnQpOwotICAgICAg
ICBxdWVyeVBhcmFtcyA9IHRoaXMucGFyc2VRdWVyeVN0cmluZyhxdWVyeVN0cmluZyk7Ci0gICAg
ICB9Ci0KLSAgICAgIHBhdGggPSBkZWNvZGVVUkkocGF0aCk7Ci0KLSAgICAgIC8vIERFQlVHIEdS
T1VQIHBhdGgKLQotICAgICAgaWYgKHBhdGguY2hhckF0KDApICE9PSAiLyIpIHsKLSAgICAgICAg
cGF0aCA9ICIvIiArIHBhdGg7Ci0gICAgICB9Ci0KLSAgICAgIHBhdGhMZW4gPSBwYXRoLmxlbmd0
aDsKLSAgICAgIGlmIChwYXRoTGVuID4gMSAmJiBwYXRoLmNoYXJBdChwYXRoTGVuIC0gMSkgPT09
ICIvIikgewotICAgICAgICBwYXRoID0gcGF0aC5zdWJzdHIoMCwgcGF0aExlbiAtIDEpOwotICAg
ICAgICBpc1NsYXNoRHJvcHBlZCA9IHRydWU7Ci0gICAgICB9Ci0KLSAgICAgIGZvciAoaSA9IDAs
IGwgPSBwYXRoLmxlbmd0aDsgaSA8IGw7IGkrKykgewotICAgICAgICBzdGF0ZXMgPSByZWNvZ25p
emVDaGFyKHN0YXRlcywgcGF0aC5jaGFyQXQoaSkpOwotICAgICAgICBpZiAoIXN0YXRlcy5sZW5n
dGgpIHsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICAvLyBF
TkQgREVCVUcgR1JPVVAKLQotICAgICAgdmFyIHNvbHV0aW9ucyA9IFtdOwotICAgICAgZm9yIChp
ID0gMCwgbCA9IHN0YXRlcy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKLSAgICAgICAgaWYgKHN0YXRl
c1tpXS5oYW5kbGVycykgewotICAgICAgICAgIHNvbHV0aW9ucy5wdXNoKHN0YXRlc1tpXSk7Ci0g
ICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgc3RhdGVzID0gc29ydFNvbHV0aW9ucyhzb2x1dGlv
bnMpOwotCi0gICAgICB2YXIgc3RhdGUgPSBzb2x1dGlvbnNbMF07Ci0KLSAgICAgIGlmIChzdGF0
ZSAmJiBzdGF0ZS5oYW5kbGVycykgewotICAgICAgICAvLyBpZiBhIHRyYWlsaW5nIHNsYXNoIHdh
cyBkcm9wcGVkIGFuZCBhIHN0YXIgc2VnbWVudCBpcyB0aGUgbGFzdCBzZWdtZW50Ci0gICAgICAg
IC8vIHNwZWNpZmllZCwgcHV0IHRoZSB0cmFpbGluZyBzbGFzaCBiYWNrCi0gICAgICAgIGlmIChp
c1NsYXNoRHJvcHBlZCAmJiBzdGF0ZS5yZWdleC5zb3VyY2Uuc2xpY2UoLTUpID09PSAiKC4rKSQi
KSB7Ci0gICAgICAgICAgcGF0aCA9IHBhdGggKyAiLyI7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0
dXJuIGZpbmRIYW5kbGVyKHN0YXRlLCBwYXRoLCBxdWVyeVBhcmFtcyk7Ci0gICAgICB9Ci0gICAg
fQotICB9OwotCi0gIFJvdXRlUmVjb2duaXplci5wcm90b3R5cGUubWFwID0gX3JvdXRlUmVjb2du
aXplckRzbC5kZWZhdWx0OwotCi0gIFJvdXRlUmVjb2duaXplci5WRVJTSU9OID0gJzAuMS41JzsK
LQotICBleHBvcnRzLmRlZmF1bHQgPSBSb3V0ZVJlY29nbml6ZXI7Ci19KTsKLWVuaWZlZCgicm91
dGUtcmVjb2duaXplci9kc2wiLCBbImV4cG9ydHMiXSwgZnVuY3Rpb24gKGV4cG9ydHMpIHsKLSAg
InVzZSBzdHJpY3QiOwotCi0gIGZ1bmN0aW9uIFRhcmdldChwYXRoLCBtYXRjaGVyLCBkZWxlZ2F0
ZSkgewotICAgIHRoaXMucGF0aCA9IHBhdGg7Ci0gICAgdGhpcy5tYXRjaGVyID0gbWF0Y2hlcjsK
LSAgICB0aGlzLmRlbGVnYXRlID0gZGVsZWdhdGU7Ci0gIH0KLQotICBUYXJnZXQucHJvdG90eXBl
ID0gewotICAgIHRvOiBmdW5jdGlvbiAodGFyZ2V0LCBjYWxsYmFjaykgewotICAgICAgdmFyIGRl
bGVnYXRlID0gdGhpcy5kZWxlZ2F0ZTsKLQotICAgICAgaWYgKGRlbGVnYXRlICYmIGRlbGVnYXRl
LndpbGxBZGRSb3V0ZSkgewotICAgICAgICB0YXJnZXQgPSBkZWxlZ2F0ZS53aWxsQWRkUm91dGUo
dGhpcy5tYXRjaGVyLnRhcmdldCwgdGFyZ2V0KTsKLSAgICAgIH0KLQotICAgICAgdGhpcy5tYXRj
aGVyLmFkZCh0aGlzLnBhdGgsIHRhcmdldCk7Ci0KLSAgICAgIGlmIChjYWxsYmFjaykgewotICAg
ICAgICBpZiAoY2FsbGJhY2subGVuZ3RoID09PSAwKSB7Ci0gICAgICAgICAgdGhyb3cgbmV3IEVy
cm9yKCJZb3UgbXVzdCBoYXZlIGFuIGFyZ3VtZW50IGluIHRoZSBmdW5jdGlvbiBwYXNzZWQgdG8g
YHRvYCIpOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMubWF0Y2hlci5hZGRDaGlsZCh0aGlzLnBh
dGgsIHRhcmdldCwgY2FsbGJhY2ssIHRoaXMuZGVsZWdhdGUpOwotICAgICAgfQotICAgICAgcmV0
dXJuIHRoaXM7Ci0gICAgfQotICB9OwotCi0gIGZ1bmN0aW9uIE1hdGNoZXIodGFyZ2V0KSB7Ci0g
ICAgdGhpcy5yb3V0ZXMgPSB7fTsKLSAgICB0aGlzLmNoaWxkcmVuID0ge307Ci0gICAgdGhpcy50
YXJnZXQgPSB0YXJnZXQ7Ci0gIH0KLQotICBNYXRjaGVyLnByb3RvdHlwZSA9IHsKLSAgICBhZGQ6
IGZ1bmN0aW9uIChwYXRoLCBoYW5kbGVyKSB7Ci0gICAgICB0aGlzLnJvdXRlc1twYXRoXSA9IGhh
bmRsZXI7Ci0gICAgfSwKLQotICAgIGFkZENoaWxkOiBmdW5jdGlvbiAocGF0aCwgdGFyZ2V0LCBj
YWxsYmFjaywgZGVsZWdhdGUpIHsKLSAgICAgIHZhciBtYXRjaGVyID0gbmV3IE1hdGNoZXIodGFy
Z2V0KTsKLSAgICAgIHRoaXMuY2hpbGRyZW5bcGF0aF0gPSBtYXRjaGVyOwotCi0gICAgICB2YXIg
bWF0Y2ggPSBnZW5lcmF0ZU1hdGNoKHBhdGgsIG1hdGNoZXIsIGRlbGVnYXRlKTsKLQotICAgICAg
aWYgKGRlbGVnYXRlICYmIGRlbGVnYXRlLmNvbnRleHRFbnRlcmVkKSB7Ci0gICAgICAgIGRlbGVn
YXRlLmNvbnRleHRFbnRlcmVkKHRhcmdldCwgbWF0Y2gpOwotICAgICAgfQotCi0gICAgICBjYWxs
YmFjayhtYXRjaCk7Ci0gICAgfQotICB9OwotCi0gIGZ1bmN0aW9uIGdlbmVyYXRlTWF0Y2goc3Rh
cnRpbmdQYXRoLCBtYXRjaGVyLCBkZWxlZ2F0ZSkgewotICAgIHJldHVybiBmdW5jdGlvbiAocGF0
aCwgbmVzdGVkQ2FsbGJhY2spIHsKLSAgICAgIHZhciBmdWxsUGF0aCA9IHN0YXJ0aW5nUGF0aCAr
IHBhdGg7Ci0KLSAgICAgIGlmIChuZXN0ZWRDYWxsYmFjaykgewotICAgICAgICBuZXN0ZWRDYWxs
YmFjayhnZW5lcmF0ZU1hdGNoKGZ1bGxQYXRoLCBtYXRjaGVyLCBkZWxlZ2F0ZSkpOwotICAgICAg
fSBlbHNlIHsKLSAgICAgICAgcmV0dXJuIG5ldyBUYXJnZXQoc3RhcnRpbmdQYXRoICsgcGF0aCwg
bWF0Y2hlciwgZGVsZWdhdGUpOwotICAgICAgfQotICAgIH07Ci0gIH0KLQotICBmdW5jdGlvbiBh
ZGRSb3V0ZShyb3V0ZUFycmF5LCBwYXRoLCBoYW5kbGVyKSB7Ci0gICAgdmFyIGxlbiA9IDA7Ci0g
ICAgZm9yICh2YXIgaSA9IDAsIGwgPSByb3V0ZUFycmF5Lmxlbmd0aDsgaSA8IGw7IGkrKykgewot
ICAgICAgbGVuICs9IHJvdXRlQXJyYXlbaV0ucGF0aC5sZW5ndGg7Ci0gICAgfQotCi0gICAgcGF0
aCA9IHBhdGguc3Vic3RyKGxlbik7Ci0gICAgdmFyIHJvdXRlID0geyBwYXRoOiBwYXRoLCBoYW5k
bGVyOiBoYW5kbGVyIH07Ci0gICAgcm91dGVBcnJheS5wdXNoKHJvdXRlKTsKLSAgfQotCi0gIGZ1
bmN0aW9uIGVhY2hSb3V0ZShiYXNlUm91dGUsIG1hdGNoZXIsIGNhbGxiYWNrLCBiaW5kaW5nKSB7
Ci0gICAgdmFyIHJvdXRlcyA9IG1hdGNoZXIucm91dGVzOwotCi0gICAgZm9yICh2YXIgcGF0aCBp
biByb3V0ZXMpIHsKLSAgICAgIGlmIChyb3V0ZXMuaGFzT3duUHJvcGVydHkocGF0aCkpIHsKLSAg
ICAgICAgdmFyIHJvdXRlQXJyYXkgPSBiYXNlUm91dGUuc2xpY2UoKTsKLSAgICAgICAgYWRkUm91
dGUocm91dGVBcnJheSwgcGF0aCwgcm91dGVzW3BhdGhdKTsKLQotICAgICAgICBpZiAobWF0Y2hl
ci5jaGlsZHJlbltwYXRoXSkgewotICAgICAgICAgIGVhY2hSb3V0ZShyb3V0ZUFycmF5LCBtYXRj
aGVyLmNoaWxkcmVuW3BhdGhdLCBjYWxsYmFjaywgYmluZGluZyk7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgY2FsbGJhY2suY2FsbChiaW5kaW5nLCByb3V0ZUFycmF5KTsKLSAgICAgICAg
fQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIGV4cG9ydHMuZGVmYXVsdCA9IGZ1bmN0aW9uIChj
YWxsYmFjaywgYWRkUm91dGVDYWxsYmFjaykgewotICAgIHZhciBtYXRjaGVyID0gbmV3IE1hdGNo
ZXIoKTsKLQotICAgIGNhbGxiYWNrKGdlbmVyYXRlTWF0Y2goIiIsIG1hdGNoZXIsIHRoaXMuZGVs
ZWdhdGUpKTsKLQotICAgIGVhY2hSb3V0ZShbXSwgbWF0Y2hlciwgZnVuY3Rpb24gKHJvdXRlKSB7
Ci0gICAgICBpZiAoYWRkUm91dGVDYWxsYmFjaykgewotICAgICAgICBhZGRSb3V0ZUNhbGxiYWNr
KHRoaXMsIHJvdXRlKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHRoaXMuYWRkKHJvdXRlKTsK
LSAgICAgIH0KLSAgICB9LCB0aGlzKTsKLSAgfTsKLX0pOwotZW5pZmVkKCdyb3V0ZXInLCBbJ2V4
cG9ydHMnLCAncm91dGVyL3JvdXRlciddLCBmdW5jdGlvbiAoZXhwb3J0cywgX3JvdXRlclJvdXRl
cikgewotICAndXNlIHN0cmljdCc7Ci0KLSAgZXhwb3J0cy5kZWZhdWx0ID0gX3JvdXRlclJvdXRl
ci5kZWZhdWx0OwotfSk7Ci1lbmlmZWQoJ3JvdXRlci9oYW5kbGVyLWluZm8nLCBbJ2V4cG9ydHMn
LCAncm91dGVyL3V0aWxzJywgJ3JzdnAvcHJvbWlzZSddLCBmdW5jdGlvbiAoZXhwb3J0cywgX3Jv
dXRlclV0aWxzLCBfcnN2cFByb21pc2UpIHsKLSAgJ3VzZSBzdHJpY3QnOwotCi0gIGZ1bmN0aW9u
IEhhbmRsZXJJbmZvKF9wcm9wcykgewotICAgIHZhciBwcm9wcyA9IF9wcm9wcyB8fCB7fTsKLSAg
ICBfcm91dGVyVXRpbHMubWVyZ2UodGhpcywgcHJvcHMpOwotICAgIHRoaXMuaW5pdGlhbGl6ZShw
cm9wcyk7Ci0gIH0KLQotICBIYW5kbGVySW5mby5wcm90b3R5cGUgPSB7Ci0gICAgbmFtZTogbnVs
bCwKLSAgICBoYW5kbGVyOiBudWxsLAotICAgIHBhcmFtczogbnVsbCwKLSAgICBjb250ZXh0OiBu
dWxsLAotCi0gICAgLy8gSW5qZWN0ZWQgYnkgdGhlIGhhbmRsZXIgaW5mbyBmYWN0b3J5LgotICAg
IGZhY3Rvcnk6IG51bGwsCi0KLSAgICBpbml0aWFsaXplOiBmdW5jdGlvbiAoKSB7fSwKLQotICAg
IGxvZzogZnVuY3Rpb24gKHBheWxvYWQsIG1lc3NhZ2UpIHsKLSAgICAgIGlmIChwYXlsb2FkLmxv
ZykgewotICAgICAgICBwYXlsb2FkLmxvZyh0aGlzLm5hbWUgKyAnOiAnICsgbWVzc2FnZSk7Ci0g
ICAgICB9Ci0gICAgfSwKLQotICAgIHByb21pc2VMYWJlbDogZnVuY3Rpb24gKGxhYmVsKSB7Ci0g
ICAgICByZXR1cm4gX3JvdXRlclV0aWxzLnByb21pc2VMYWJlbCgiJyIgKyB0aGlzLm5hbWUgKyAi
JyAiICsgbGFiZWwpOwotICAgIH0sCi0KLSAgICBnZXRVbnJlc29sdmVkOiBmdW5jdGlvbiAoKSB7
Ci0gICAgICByZXR1cm4gdGhpczsKLSAgICB9LAotCi0gICAgc2VyaWFsaXplOiBmdW5jdGlvbiAo
KSB7Ci0gICAgICByZXR1cm4gdGhpcy5wYXJhbXMgfHwge307Ci0gICAgfSwKLQotICAgIHJlc29s
dmU6IGZ1bmN0aW9uIChzaG91bGRDb250aW51ZSwgcGF5bG9hZCkgewotICAgICAgdmFyIGNoZWNr
Rm9yQWJvcnQgPSBfcm91dGVyVXRpbHMuYmluZCh0aGlzLCB0aGlzLmNoZWNrRm9yQWJvcnQsIHNo
b3VsZENvbnRpbnVlKSwKLSAgICAgICAgICBiZWZvcmVNb2RlbCA9IF9yb3V0ZXJVdGlscy5iaW5k
KHRoaXMsIHRoaXMucnVuQmVmb3JlTW9kZWxIb29rLCBwYXlsb2FkKSwKLSAgICAgICAgICBtb2Rl
bCA9IF9yb3V0ZXJVdGlscy5iaW5kKHRoaXMsIHRoaXMuZ2V0TW9kZWwsIHBheWxvYWQpLAotICAg
ICAgICAgIGFmdGVyTW9kZWwgPSBfcm91dGVyVXRpbHMuYmluZCh0aGlzLCB0aGlzLnJ1bkFmdGVy
TW9kZWxIb29rLCBwYXlsb2FkKSwKLSAgICAgICAgICBiZWNvbWVSZXNvbHZlZCA9IF9yb3V0ZXJV
dGlscy5iaW5kKHRoaXMsIHRoaXMuYmVjb21lUmVzb2x2ZWQsIHBheWxvYWQpOwotCi0gICAgICBy
ZXR1cm4gX3JzdnBQcm9taXNlLmRlZmF1bHQucmVzb2x2ZSh1bmRlZmluZWQsIHRoaXMucHJvbWlz
ZUxhYmVsKCJTdGFydCBoYW5kbGVyIikpLnRoZW4oY2hlY2tGb3JBYm9ydCwgbnVsbCwgdGhpcy5w
cm9taXNlTGFiZWwoIkNoZWNrIGZvciBhYm9ydCIpKS50aGVuKGJlZm9yZU1vZGVsLCBudWxsLCB0
aGlzLnByb21pc2VMYWJlbCgiQmVmb3JlIG1vZGVsIikpLnRoZW4oY2hlY2tGb3JBYm9ydCwgbnVs
bCwgdGhpcy5wcm9taXNlTGFiZWwoIkNoZWNrIGlmIGFib3J0ZWQgZHVyaW5nICdiZWZvcmVNb2Rl
bCcgaG9vayIpKS50aGVuKG1vZGVsLCBudWxsLCB0aGlzLnByb21pc2VMYWJlbCgiTW9kZWwiKSku
dGhlbihjaGVja0ZvckFib3J0LCBudWxsLCB0aGlzLnByb21pc2VMYWJlbCgiQ2hlY2sgaWYgYWJv
cnRlZCBpbiAnbW9kZWwnIGhvb2siKSkudGhlbihhZnRlck1vZGVsLCBudWxsLCB0aGlzLnByb21p
c2VMYWJlbCgiQWZ0ZXIgbW9kZWwiKSkudGhlbihjaGVja0ZvckFib3J0LCBudWxsLCB0aGlzLnBy
b21pc2VMYWJlbCgiQ2hlY2sgaWYgYWJvcnRlZCBpbiAnYWZ0ZXJNb2RlbCcgaG9vayIpKS50aGVu
KGJlY29tZVJlc29sdmVkLCBudWxsLCB0aGlzLnByb21pc2VMYWJlbCgiQmVjb21lIHJlc29sdmVk
IikpOwotICAgIH0sCi0KLSAgICBydW5CZWZvcmVNb2RlbEhvb2s6IGZ1bmN0aW9uIChwYXlsb2Fk
KSB7Ci0gICAgICBpZiAocGF5bG9hZC50cmlnZ2VyKSB7Ci0gICAgICAgIHBheWxvYWQudHJpZ2dl
cih0cnVlLCAnd2lsbFJlc29sdmVNb2RlbCcsIHBheWxvYWQsIHRoaXMuaGFuZGxlcik7Ci0gICAg
ICB9Ci0gICAgICByZXR1cm4gdGhpcy5ydW5TaGFyZWRNb2RlbEhvb2socGF5bG9hZCwgJ2JlZm9y
ZU1vZGVsJywgW10pOwotICAgIH0sCi0KLSAgICBydW5BZnRlck1vZGVsSG9vazogZnVuY3Rpb24g
KHBheWxvYWQsIHJlc29sdmVkTW9kZWwpIHsKLSAgICAgIC8vIFN0YXNoIHRoZSByZXNvbHZlZCBt
b2RlbCBvbiB0aGUgcGF5bG9hZC4KLSAgICAgIC8vIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgZm9y
IHVzZXJzIHRvIHN3YXAgb3V0Ci0gICAgICAvLyB0aGUgcmVzb2x2ZWQgbW9kZWwgaW4gYWZ0ZXJN
b2RlbC4KLSAgICAgIHZhciBuYW1lID0gdGhpcy5uYW1lOwotICAgICAgdGhpcy5zdGFzaFJlc29s
dmVkTW9kZWwocGF5bG9hZCwgcmVzb2x2ZWRNb2RlbCk7Ci0KLSAgICAgIHJldHVybiB0aGlzLnJ1
blNoYXJlZE1vZGVsSG9vayhwYXlsb2FkLCAnYWZ0ZXJNb2RlbCcsIFtyZXNvbHZlZE1vZGVsXSku
dGhlbihmdW5jdGlvbiAoKSB7Ci0gICAgICAgIC8vIElnbm9yZSB0aGUgZnVsZmlsbGVkIHZhbHVl
IHJldHVybmVkIGZyb20gYWZ0ZXJNb2RlbC4KLSAgICAgICAgLy8gUmV0dXJuIHRoZSB2YWx1ZSBz
dGFzaGVkIGluIHJlc29sdmVkTW9kZWxzLCB3aGljaAotICAgICAgICAvLyBtaWdodCBoYXZlIGJl
ZW4gc3dhcHBlZCBvdXQgaW4gYWZ0ZXJNb2RlbC4KLSAgICAgICAgcmV0dXJuIHBheWxvYWQucmVz
b2x2ZWRNb2RlbHNbbmFtZV07Ci0gICAgICB9LCBudWxsLCB0aGlzLnByb21pc2VMYWJlbCgiSWdu
b3JlIGZ1bGZpbGxtZW50IHZhbHVlIGFuZCByZXR1cm4gbW9kZWwgdmFsdWUiKSk7Ci0gICAgfSwK
LQotICAgIHJ1blNoYXJlZE1vZGVsSG9vazogZnVuY3Rpb24gKHBheWxvYWQsIGhvb2tOYW1lLCBh
cmdzKSB7Ci0gICAgICB0aGlzLmxvZyhwYXlsb2FkLCAiY2FsbGluZyAiICsgaG9va05hbWUgKyAi
IGhvb2siKTsKLQotICAgICAgaWYgKHRoaXMucXVlcnlQYXJhbXMpIHsKLSAgICAgICAgYXJncy5w
dXNoKHRoaXMucXVlcnlQYXJhbXMpOwotICAgICAgfQotICAgICAgYXJncy5wdXNoKHBheWxvYWQp
OwotCi0gICAgICB2YXIgcmVzdWx0ID0gX3JvdXRlclV0aWxzLmFwcGx5SG9vayh0aGlzLmhhbmRs
ZXIsIGhvb2tOYW1lLCBhcmdzKTsKLQotICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQuaXNUcmFu
c2l0aW9uKSB7Ci0gICAgICAgIHJlc3VsdCA9IG51bGw7Ci0gICAgICB9Ci0KLSAgICAgIHJldHVy
biBfcnN2cFByb21pc2UuZGVmYXVsdC5yZXNvbHZlKHJlc3VsdCwgdGhpcy5wcm9taXNlTGFiZWwo
IlJlc29sdmUgdmFsdWUgcmV0dXJuZWQgZnJvbSBvbmUgb2YgdGhlIG1vZGVsIGhvb2tzIikpOwot
ICAgIH0sCi0KLSAgICAvLyBvdmVycmlkZGVuIGJ5IHN1YmNsYXNzZXMKLSAgICBnZXRNb2RlbDog
bnVsbCwKLQotICAgIGNoZWNrRm9yQWJvcnQ6IGZ1bmN0aW9uIChzaG91bGRDb250aW51ZSwgcHJv
bWlzZVZhbHVlKSB7Ci0gICAgICByZXR1cm4gX3JzdnBQcm9taXNlLmRlZmF1bHQucmVzb2x2ZShz
aG91bGRDb250aW51ZSgpLCB0aGlzLnByb21pc2VMYWJlbCgiQ2hlY2sgZm9yIGFib3J0IikpLnRo
ZW4oZnVuY3Rpb24gKCkgewotICAgICAgICAvLyBXZSBkb24ndCBjYXJlIGFib3V0IHNob3VsZENv
bnRpbnVlJ3MgcmVzb2x2ZSB2YWx1ZTsKLSAgICAgICAgLy8gcGFzcyBhbG9uZyB0aGUgb3JpZ2lu
YWwgdmFsdWUgcGFzc2VkIHRvIHRoaXMgZm4uCi0gICAgICAgIHJldHVybiBwcm9taXNlVmFsdWU7
Ci0gICAgICB9LCBudWxsLCB0aGlzLnByb21pc2VMYWJlbCgiSWdub3JlIGZ1bGZpbGxtZW50IHZh
bHVlIGFuZCBjb250aW51ZSIpKTsKLSAgICB9LAotCi0gICAgc3Rhc2hSZXNvbHZlZE1vZGVsOiBm
dW5jdGlvbiAocGF5bG9hZCwgcmVzb2x2ZWRNb2RlbCkgewotICAgICAgcGF5bG9hZC5yZXNvbHZl
ZE1vZGVscyA9IHBheWxvYWQucmVzb2x2ZWRNb2RlbHMgfHwge307Ci0gICAgICBwYXlsb2FkLnJl
c29sdmVkTW9kZWxzW3RoaXMubmFtZV0gPSByZXNvbHZlZE1vZGVsOwotICAgIH0sCi0KLSAgICBi
ZWNvbWVSZXNvbHZlZDogZnVuY3Rpb24gKHBheWxvYWQsIHJlc29sdmVkQ29udGV4dCkgewotICAg
ICAgdmFyIHBhcmFtcyA9IHRoaXMuc2VyaWFsaXplKHJlc29sdmVkQ29udGV4dCk7Ci0KLSAgICAg
IGlmIChwYXlsb2FkKSB7Ci0gICAgICAgIHRoaXMuc3Rhc2hSZXNvbHZlZE1vZGVsKHBheWxvYWQs
IHJlc29sdmVkQ29udGV4dCk7Ci0gICAgICAgIHBheWxvYWQucGFyYW1zID0gcGF5bG9hZC5wYXJh
bXMgfHwge307Ci0gICAgICAgIHBheWxvYWQucGFyYW1zW3RoaXMubmFtZV0gPSBwYXJhbXM7Ci0g
ICAgICB9Ci0KLSAgICAgIHJldHVybiB0aGlzLmZhY3RvcnkoJ3Jlc29sdmVkJywgewotICAgICAg
ICBjb250ZXh0OiByZXNvbHZlZENvbnRleHQsCi0gICAgICAgIG5hbWU6IHRoaXMubmFtZSwKLSAg
ICAgICAgaGFuZGxlcjogdGhpcy5oYW5kbGVyLAotICAgICAgICBwYXJhbXM6IHBhcmFtcwotICAg
ICAgfSk7Ci0gICAgfSwKLQotICAgIHNob3VsZFN1cGVyY2VkZTogZnVuY3Rpb24gKG90aGVyKSB7
Ci0gICAgICAvLyBQcmVmZXIgdGhpcyBuZXdlciBoYW5kbGVySW5mbyBvdmVyIGBvdGhlcmAgaWY6
Ci0gICAgICAvLyAxKSBUaGUgb3RoZXIgb25lIGRvZXNuJ3QgZXhpc3QKLSAgICAgIC8vIDIpIFRo
ZSBuYW1lcyBkb24ndCBtYXRjaAotICAgICAgLy8gMykgVGhpcyBoYW5kbGVyIGhhcyBhIGNvbnRl
eHQgdGhhdCBkb2Vzbid0IG1hdGNoCi0gICAgICAvLyAgICB0aGUgb3RoZXIgb25lIChvciB0aGUg
b3RoZXIgb25lIGRvZXNuJ3QgaGF2ZSBvbmUpLgotICAgICAgLy8gNCkgVGhpcyBoYW5kbGVyIGhh
cyBwYXJhbWV0ZXJzIHRoYXQgZG9uJ3QgbWF0Y2ggdGhlIG90aGVyLgotICAgICAgaWYgKCFvdGhl
cikgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLQotICAgICAgdmFyIGNvbnRleHRz
TWF0Y2ggPSBvdGhlci5jb250ZXh0ID09PSB0aGlzLmNvbnRleHQ7Ci0gICAgICByZXR1cm4gb3Ro
ZXIubmFtZSAhPT0gdGhpcy5uYW1lIHx8IHRoaXMuaGFzT3duUHJvcGVydHkoJ2NvbnRleHQnKSAm
JiAhY29udGV4dHNNYXRjaCB8fCB0aGlzLmhhc093blByb3BlcnR5KCdwYXJhbXMnKSAmJiAhcGFy
YW1zTWF0Y2godGhpcy5wYXJhbXMsIG90aGVyLnBhcmFtcyk7Ci0gICAgfQotICB9OwotCi0gIGZ1
bmN0aW9uIHBhcmFtc01hdGNoKGEsIGIpIHsKLSAgICBpZiAoIWEgXiAhYikgewotICAgICAgLy8g
T25seSBvbmUgaXMgbnVsbC4KLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAo
IWEpIHsKLSAgICAgIC8vIEJvdGggbXVzdCBiZSBudWxsLgotICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfQotCi0gICAgLy8gTm90ZTogdGhpcyBhc3N1bWVzIHRoYXQgYm90aCBwYXJhbXMgaGF2ZSB0
aGUgc2FtZQotICAgIC8vIG51bWJlciBvZiBrZXlzLCBidXQgc2luY2Ugd2UncmUgY29tcGFyaW5n
IHRoZQotICAgIC8vIHNhbWUgaGFuZGxlcnMsIHRoZXkgc2hvdWxkLgotICAgIGZvciAodmFyIGsg
aW4gYSkgewotICAgICAgaWYgKGEuaGFzT3duUHJvcGVydHkoaykgJiYgYVtrXSAhPT0gYltrXSkg
ewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiB0cnVl
OwotICB9Ci0KLSAgZXhwb3J0cy5kZWZhdWx0ID0gSGFuZGxlckluZm87Ci19KTsKLWVuaWZlZCgn
cm91dGVyL2hhbmRsZXItaW5mby9mYWN0b3J5JywgWydleHBvcnRzJywgJ3JvdXRlci9oYW5kbGVy
LWluZm8vcmVzb2x2ZWQtaGFuZGxlci1pbmZvJywgJ3JvdXRlci9oYW5kbGVyLWluZm8vdW5yZXNv
bHZlZC1oYW5kbGVyLWluZm8tYnktb2JqZWN0JywgJ3JvdXRlci9oYW5kbGVyLWluZm8vdW5yZXNv
bHZlZC1oYW5kbGVyLWluZm8tYnktcGFyYW0nXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9yb3V0ZXJI
YW5kbGVySW5mb1Jlc29sdmVkSGFuZGxlckluZm8sIF9yb3V0ZXJIYW5kbGVySW5mb1VucmVzb2x2
ZWRIYW5kbGVySW5mb0J5T2JqZWN0LCBfcm91dGVySGFuZGxlckluZm9VbnJlc29sdmVkSGFuZGxl
ckluZm9CeVBhcmFtKSB7Ci0gICd1c2Ugc3RyaWN0JzsKLQotICBoYW5kbGVySW5mb0ZhY3Rvcnku
a2xhc3NlcyA9IHsKLSAgICByZXNvbHZlZDogX3JvdXRlckhhbmRsZXJJbmZvUmVzb2x2ZWRIYW5k
bGVySW5mby5kZWZhdWx0LAotICAgIHBhcmFtOiBfcm91dGVySGFuZGxlckluZm9VbnJlc29sdmVk
SGFuZGxlckluZm9CeVBhcmFtLmRlZmF1bHQsCi0gICAgb2JqZWN0OiBfcm91dGVySGFuZGxlcklu
Zm9VbnJlc29sdmVkSGFuZGxlckluZm9CeU9iamVjdC5kZWZhdWx0Ci0gIH07Ci0KLSAgZnVuY3Rp
b24gaGFuZGxlckluZm9GYWN0b3J5KG5hbWUsIHByb3BzKSB7Ci0gICAgdmFyIEN0b3IgPSBoYW5k
bGVySW5mb0ZhY3Rvcnkua2xhc3Nlc1tuYW1lXSwKLSAgICAgICAgaGFuZGxlckluZm8gPSBuZXcg
Q3Rvcihwcm9wcyB8fCB7fSk7Ci0gICAgaGFuZGxlckluZm8uZmFjdG9yeSA9IGhhbmRsZXJJbmZv
RmFjdG9yeTsKLSAgICByZXR1cm4gaGFuZGxlckluZm87Ci0gIH0KLQotICBleHBvcnRzLmRlZmF1
bHQgPSBoYW5kbGVySW5mb0ZhY3Rvcnk7Ci19KTsKLWVuaWZlZCgncm91dGVyL2hhbmRsZXItaW5m
by9yZXNvbHZlZC1oYW5kbGVyLWluZm8nLCBbJ2V4cG9ydHMnLCAncm91dGVyL2hhbmRsZXItaW5m
bycsICdyb3V0ZXIvdXRpbHMnLCAncnN2cC9wcm9taXNlJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBf
cm91dGVySGFuZGxlckluZm8sIF9yb3V0ZXJVdGlscywgX3JzdnBQcm9taXNlKSB7Ci0gICd1c2Ug
c3RyaWN0JzsKLQotICB2YXIgUmVzb2x2ZWRIYW5kbGVySW5mbyA9IF9yb3V0ZXJVdGlscy5zdWJj
bGFzcyhfcm91dGVySGFuZGxlckluZm8uZGVmYXVsdCwgewotICAgIHJlc29sdmU6IGZ1bmN0aW9u
IChzaG91bGRDb250aW51ZSwgcGF5bG9hZCkgewotICAgICAgLy8gQSBSZXNvbHZlZEhhbmRsZXJJ
bmZvIGp1c3QgcmVzb2x2ZWQgd2l0aCBpdHNlbGYuCi0gICAgICBpZiAocGF5bG9hZCAmJiBwYXls
b2FkLnJlc29sdmVkTW9kZWxzKSB7Ci0gICAgICAgIHBheWxvYWQucmVzb2x2ZWRNb2RlbHNbdGhp
cy5uYW1lXSA9IHRoaXMuY29udGV4dDsKLSAgICAgIH0KLSAgICAgIHJldHVybiBfcnN2cFByb21p
c2UuZGVmYXVsdC5yZXNvbHZlKHRoaXMsIHRoaXMucHJvbWlzZUxhYmVsKCJSZXNvbHZlIikpOwot
ICAgIH0sCi0KLSAgICBnZXRVbnJlc29sdmVkOiBmdW5jdGlvbiAoKSB7Ci0gICAgICByZXR1cm4g
dGhpcy5mYWN0b3J5KCdwYXJhbScsIHsKLSAgICAgICAgbmFtZTogdGhpcy5uYW1lLAotICAgICAg
ICBoYW5kbGVyOiB0aGlzLmhhbmRsZXIsCi0gICAgICAgIHBhcmFtczogdGhpcy5wYXJhbXMKLSAg
ICAgIH0pOwotICAgIH0sCi0KLSAgICBpc1Jlc29sdmVkOiB0cnVlCi0gIH0pOwotCi0gIGV4cG9y
dHMuZGVmYXVsdCA9IFJlc29sdmVkSGFuZGxlckluZm87Ci19KTsKLWVuaWZlZCgncm91dGVyL2hh
bmRsZXItaW5mby91bnJlc29sdmVkLWhhbmRsZXItaW5mby1ieS1vYmplY3QnLCBbJ2V4cG9ydHMn
LCAncm91dGVyL2hhbmRsZXItaW5mbycsICdyb3V0ZXIvdXRpbHMnLCAncnN2cC9wcm9taXNlJ10s
IGZ1bmN0aW9uIChleHBvcnRzLCBfcm91dGVySGFuZGxlckluZm8sIF9yb3V0ZXJVdGlscywgX3Jz
dnBQcm9taXNlKSB7Ci0gICd1c2Ugc3RyaWN0JzsKLQotICB2YXIgVW5yZXNvbHZlZEhhbmRsZXJJ
bmZvQnlPYmplY3QgPSBfcm91dGVyVXRpbHMuc3ViY2xhc3MoX3JvdXRlckhhbmRsZXJJbmZvLmRl
ZmF1bHQsIHsKLSAgICBnZXRNb2RlbDogZnVuY3Rpb24gKHBheWxvYWQpIHsKLSAgICAgIHRoaXMu
bG9nKHBheWxvYWQsIHRoaXMubmFtZSArICI6IHJlc29sdmluZyBwcm92aWRlZCBtb2RlbCIpOwot
ICAgICAgcmV0dXJuIF9yc3ZwUHJvbWlzZS5kZWZhdWx0LnJlc29sdmUodGhpcy5jb250ZXh0KTsK
LSAgICB9LAotCi0gICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24gKHByb3BzKSB7Ci0gICAgICB0aGlz
Lm5hbWVzID0gcHJvcHMubmFtZXMgfHwgW107Ci0gICAgICB0aGlzLmNvbnRleHQgPSBwcm9wcy5j
b250ZXh0OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgIEBwcml2YXRlCi0gICAgICAgU2VyaWFs
aXplcyBhIGhhbmRsZXIgdXNpbmcgaXRzIGN1c3RvbSBgc2VyaWFsaXplYCBtZXRob2Qgb3IKLSAg
ICAgIGJ5IGEgZGVmYXVsdCB0aGF0IGxvb2tzIHVwIHRoZSBleHBlY3RlZCBwcm9wZXJ0eSBuYW1l
IGZyb20KLSAgICAgIHRoZSBkeW5hbWljIHNlZ21lbnQuCi0gICAgICAgQHBhcmFtIHtPYmplY3R9
IG1vZGVsIHRoZSBtb2RlbCB0byBiZSBzZXJpYWxpemVkIGZvciB0aGlzIGhhbmRsZXIKLSAgICAq
LwotICAgIHNlcmlhbGl6ZTogZnVuY3Rpb24gKF9tb2RlbCkgewotICAgICAgdmFyIG1vZGVsID0g
X21vZGVsIHx8IHRoaXMuY29udGV4dCwKLSAgICAgICAgICBuYW1lcyA9IHRoaXMubmFtZXMsCi0g
ICAgICAgICAgaGFuZGxlciA9IHRoaXMuaGFuZGxlcjsKLQotICAgICAgdmFyIG9iamVjdCA9IHt9
OwotICAgICAgaWYgKF9yb3V0ZXJVdGlscy5pc1BhcmFtKG1vZGVsKSkgewotICAgICAgICBvYmpl
Y3RbbmFtZXNbMF1dID0gbW9kZWw7Ci0gICAgICAgIHJldHVybiBvYmplY3Q7Ci0gICAgICB9Ci0K
LSAgICAgIC8vIFVzZSBjdXN0b20gc2VyaWFsaXplIGlmIGl0IGV4aXN0cy4KLSAgICAgIGlmICho
YW5kbGVyLnNlcmlhbGl6ZSkgewotICAgICAgICByZXR1cm4gaGFuZGxlci5zZXJpYWxpemUobW9k
ZWwsIG5hbWVzKTsKLSAgICAgIH0KLQotICAgICAgaWYgKG5hbWVzLmxlbmd0aCAhPT0gMSkgewot
ICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0KLSAgICAgIHZhciBuYW1lID0gbmFtZXNbMF07Ci0K
LSAgICAgIGlmICgvX2lkJC8udGVzdChuYW1lKSkgewotICAgICAgICBvYmplY3RbbmFtZV0gPSBt
b2RlbC5pZDsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIG9iamVjdFtuYW1lXSA9IG1vZGVsOwot
ICAgICAgfQotICAgICAgcmV0dXJuIG9iamVjdDsKLSAgICB9Ci0gIH0pOwotCi0gIGV4cG9ydHMu
ZGVmYXVsdCA9IFVucmVzb2x2ZWRIYW5kbGVySW5mb0J5T2JqZWN0OwotfSk7Ci1lbmlmZWQoJ3Jv
dXRlci9oYW5kbGVyLWluZm8vdW5yZXNvbHZlZC1oYW5kbGVyLWluZm8tYnktcGFyYW0nLCBbJ2V4
cG9ydHMnLCAncm91dGVyL2hhbmRsZXItaW5mbycsICdyb3V0ZXIvdXRpbHMnXSwgZnVuY3Rpb24g
KGV4cG9ydHMsIF9yb3V0ZXJIYW5kbGVySW5mbywgX3JvdXRlclV0aWxzKSB7Ci0gICd1c2Ugc3Ry
aWN0JzsKLQotICAvLyBHZW5lcmF0ZWQgYnkgVVJMIHRyYW5zaXRpb25zIGFuZCBub24tZHluYW1p
YyByb3V0ZSBzZWdtZW50cyBpbiBuYW1lZCBUcmFuc2l0aW9ucy4KLSAgdmFyIFVucmVzb2x2ZWRI
YW5kbGVySW5mb0J5UGFyYW0gPSBfcm91dGVyVXRpbHMuc3ViY2xhc3MoX3JvdXRlckhhbmRsZXJJ
bmZvLmRlZmF1bHQsIHsKLSAgICBpbml0aWFsaXplOiBmdW5jdGlvbiAocHJvcHMpIHsKLSAgICAg
IHRoaXMucGFyYW1zID0gcHJvcHMucGFyYW1zIHx8IHt9OwotICAgIH0sCi0KLSAgICBnZXRNb2Rl
bDogZnVuY3Rpb24gKHBheWxvYWQpIHsKLSAgICAgIHZhciBmdWxsUGFyYW1zID0gdGhpcy5wYXJh
bXM7Ci0gICAgICBpZiAocGF5bG9hZCAmJiBwYXlsb2FkLnF1ZXJ5UGFyYW1zKSB7Ci0gICAgICAg
IGZ1bGxQYXJhbXMgPSB7fTsKLSAgICAgICAgX3JvdXRlclV0aWxzLm1lcmdlKGZ1bGxQYXJhbXMs
IHRoaXMucGFyYW1zKTsKLSAgICAgICAgZnVsbFBhcmFtcy5xdWVyeVBhcmFtcyA9IHBheWxvYWQu
cXVlcnlQYXJhbXM7Ci0gICAgICB9Ci0KLSAgICAgIHZhciBoYW5kbGVyID0gdGhpcy5oYW5kbGVy
OwotICAgICAgdmFyIGhvb2tOYW1lID0gX3JvdXRlclV0aWxzLnJlc29sdmVIb29rKGhhbmRsZXIs
ICdkZXNlcmlhbGl6ZScpIHx8IF9yb3V0ZXJVdGlscy5yZXNvbHZlSG9vayhoYW5kbGVyLCAnbW9k
ZWwnKTsKLQotICAgICAgcmV0dXJuIHRoaXMucnVuU2hhcmVkTW9kZWxIb29rKHBheWxvYWQsIGhv
b2tOYW1lLCBbZnVsbFBhcmFtc10pOwotICAgIH0KLSAgfSk7Ci0KLSAgZXhwb3J0cy5kZWZhdWx0
ID0gVW5yZXNvbHZlZEhhbmRsZXJJbmZvQnlQYXJhbTsKLX0pOwotZW5pZmVkKCdyb3V0ZXIvcm91
dGVyJywgWydleHBvcnRzJywgJ3JvdXRlLXJlY29nbml6ZXInLCAncnN2cC9wcm9taXNlJywgJ3Jv
dXRlci91dGlscycsICdyb3V0ZXIvdHJhbnNpdGlvbi1zdGF0ZScsICdyb3V0ZXIvdHJhbnNpdGlv
bicsICdyb3V0ZXIvdHJhbnNpdGlvbi1pbnRlbnQvbmFtZWQtdHJhbnNpdGlvbi1pbnRlbnQnLCAn
cm91dGVyL3RyYW5zaXRpb24taW50ZW50L3VybC10cmFuc2l0aW9uLWludGVudCcsICdyb3V0ZXIv
aGFuZGxlci1pbmZvJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfcm91dGVSZWNvZ25pemVyLCBfcnN2
cFByb21pc2UsIF9yb3V0ZXJVdGlscywgX3JvdXRlclRyYW5zaXRpb25TdGF0ZSwgX3JvdXRlclRy
YW5zaXRpb24sIF9yb3V0ZXJUcmFuc2l0aW9uSW50ZW50TmFtZWRUcmFuc2l0aW9uSW50ZW50LCBf
cm91dGVyVHJhbnNpdGlvbkludGVudFVybFRyYW5zaXRpb25JbnRlbnQsIF9yb3V0ZXJIYW5kbGVy
SW5mbykgewotICAndXNlIHN0cmljdCc7Ci0KLSAgdmFyIHBvcCA9IEFycmF5LnByb3RvdHlwZS5w
b3A7Ci0KLSAgZnVuY3Rpb24gUm91dGVyKF9vcHRpb25zKSB7Ci0gICAgdmFyIG9wdGlvbnMgPSBf
b3B0aW9ucyB8fCB7fTsKLSAgICB0aGlzLmdldEhhbmRsZXIgPSBvcHRpb25zLmdldEhhbmRsZXIg
fHwgdGhpcy5nZXRIYW5kbGVyOwotICAgIHRoaXMudXBkYXRlVVJMID0gb3B0aW9ucy51cGRhdGVV
UkwgfHwgdGhpcy51cGRhdGVVUkw7Ci0gICAgdGhpcy5yZXBsYWNlVVJMID0gb3B0aW9ucy5yZXBs
YWNlVVJMIHx8IHRoaXMucmVwbGFjZVVSTDsKLSAgICB0aGlzLmRpZFRyYW5zaXRpb24gPSBvcHRp
b25zLmRpZFRyYW5zaXRpb24gfHwgdGhpcy5kaWRUcmFuc2l0aW9uOwotICAgIHRoaXMud2lsbFRy
YW5zaXRpb24gPSBvcHRpb25zLndpbGxUcmFuc2l0aW9uIHx8IHRoaXMud2lsbFRyYW5zaXRpb247
Ci0gICAgdGhpcy5kZWxlZ2F0ZSA9IG9wdGlvbnMuZGVsZWdhdGUgfHwgdGhpcy5kZWxlZ2F0ZTsK
LSAgICB0aGlzLnRyaWdnZXJFdmVudCA9IG9wdGlvbnMudHJpZ2dlckV2ZW50IHx8IHRoaXMudHJp
Z2dlckV2ZW50OwotICAgIHRoaXMubG9nID0gb3B0aW9ucy5sb2cgfHwgdGhpcy5sb2c7Ci0KLSAg
ICB0aGlzLnJlY29nbml6ZXIgPSBuZXcgX3JvdXRlUmVjb2duaXplci5kZWZhdWx0KCk7Ci0gICAg
dGhpcy5yZXNldCgpOwotICB9Ci0KLSAgZnVuY3Rpb24gZ2V0VHJhbnNpdGlvbkJ5SW50ZW50KGlu
dGVudCwgaXNJbnRlcm1lZGlhdGUpIHsKLSAgICB2YXIgd2FzVHJhbnNpdGlvbmluZyA9ICEhdGhp
cy5hY3RpdmVUcmFuc2l0aW9uOwotICAgIHZhciBvbGRTdGF0ZSA9IHdhc1RyYW5zaXRpb25pbmcg
PyB0aGlzLmFjdGl2ZVRyYW5zaXRpb24uc3RhdGUgOiB0aGlzLnN0YXRlOwotICAgIHZhciBuZXdU
cmFuc2l0aW9uOwotCi0gICAgdmFyIG5ld1N0YXRlID0gaW50ZW50LmFwcGx5VG9TdGF0ZShvbGRT
dGF0ZSwgdGhpcy5yZWNvZ25pemVyLCB0aGlzLmdldEhhbmRsZXIsIGlzSW50ZXJtZWRpYXRlKTsK
LSAgICB2YXIgcXVlcnlQYXJhbUNoYW5nZWxpc3QgPSBfcm91dGVyVXRpbHMuZ2V0Q2hhbmdlbGlz
dChvbGRTdGF0ZS5xdWVyeVBhcmFtcywgbmV3U3RhdGUucXVlcnlQYXJhbXMpOwotCi0gICAgaWYg
KGhhbmRsZXJJbmZvc0VxdWFsKG5ld1N0YXRlLmhhbmRsZXJJbmZvcywgb2xkU3RhdGUuaGFuZGxl
ckluZm9zKSkgewotCi0gICAgICAvLyBUaGlzIGlzIGEgbm8tb3AgdHJhbnNpdGlvbi4gU2VlIGlm
IHF1ZXJ5IHBhcmFtcyBjaGFuZ2VkLgotICAgICAgaWYgKHF1ZXJ5UGFyYW1DaGFuZ2VsaXN0KSB7
Ci0gICAgICAgIG5ld1RyYW5zaXRpb24gPSB0aGlzLnF1ZXJ5UGFyYW1zVHJhbnNpdGlvbihxdWVy
eVBhcmFtQ2hhbmdlbGlzdCwgd2FzVHJhbnNpdGlvbmluZywgb2xkU3RhdGUsIG5ld1N0YXRlKTsK
LSAgICAgICAgaWYgKG5ld1RyYW5zaXRpb24pIHsKLSAgICAgICAgICByZXR1cm4gbmV3VHJhbnNp
dGlvbjsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICAvLyBOby1vcC4gTm8gbmVlZCB0byBj
cmVhdGUgYSBuZXcgdHJhbnNpdGlvbi4KLSAgICAgIHJldHVybiB0aGlzLmFjdGl2ZVRyYW5zaXRp
b24gfHwgbmV3IF9yb3V0ZXJUcmFuc2l0aW9uLlRyYW5zaXRpb24odGhpcyk7Ci0gICAgfQotCi0g
ICAgaWYgKGlzSW50ZXJtZWRpYXRlKSB7Ci0gICAgICBzZXR1cENvbnRleHRzKHRoaXMsIG5ld1N0
YXRlKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBDcmVhdGUgYSBuZXcgdHJhbnNp
dGlvbiB0byB0aGUgZGVzdGluYXRpb24gcm91dGUuCi0gICAgbmV3VHJhbnNpdGlvbiA9IG5ldyBf
cm91dGVyVHJhbnNpdGlvbi5UcmFuc2l0aW9uKHRoaXMsIGludGVudCwgbmV3U3RhdGUpOwotCi0g
ICAgLy8gQWJvcnQgYW5kIHVzdXJwIGFueSBwcmV2aW91c2x5IGFjdGl2ZSB0cmFuc2l0aW9uLgot
ICAgIGlmICh0aGlzLmFjdGl2ZVRyYW5zaXRpb24pIHsKLSAgICAgIHRoaXMuYWN0aXZlVHJhbnNp
dGlvbi5hYm9ydCgpOwotICAgIH0KLSAgICB0aGlzLmFjdGl2ZVRyYW5zaXRpb24gPSBuZXdUcmFu
c2l0aW9uOwotCi0gICAgLy8gVHJhbnNpdGlvbiBwcm9taXNlcyBieSBkZWZhdWx0IHJlc29sdmUg
d2l0aCByZXNvbHZlZCBzdGF0ZS4KLSAgICAvLyBGb3Igb3VyIHB1cnBvc2VzLCBzd2FwIG91dCB0
aGUgcHJvbWlzZSB0byByZXNvbHZlCi0gICAgLy8gYWZ0ZXIgdGhlIHRyYW5zaXRpb24gaGFzIGJl
ZW4gZmluYWxpemVkLgotICAgIG5ld1RyYW5zaXRpb24ucHJvbWlzZSA9IG5ld1RyYW5zaXRpb24u
cHJvbWlzZS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHsKLSAgICAgIHJldHVybiBmaW5hbGl6ZVRy
YW5zaXRpb24obmV3VHJhbnNpdGlvbiwgcmVzdWx0LnN0YXRlKTsKLSAgICB9LCBudWxsLCBfcm91
dGVyVXRpbHMucHJvbWlzZUxhYmVsKCJTZXR0bGUgdHJhbnNpdGlvbiBwcm9taXNlIHdoZW4gdHJh
bnNpdGlvbiBpcyBmaW5hbGl6ZWQiKSk7Ci0KLSAgICBpZiAoIXdhc1RyYW5zaXRpb25pbmcpIHsK
LSAgICAgIG5vdGlmeUV4aXN0aW5nSGFuZGxlcnModGhpcywgbmV3U3RhdGUsIG5ld1RyYW5zaXRp
b24pOwotICAgIH0KLQotICAgIGZpcmVRdWVyeVBhcmFtRGlkQ2hhbmdlKHRoaXMsIG5ld1N0YXRl
LCBxdWVyeVBhcmFtQ2hhbmdlbGlzdCk7Ci0KLSAgICByZXR1cm4gbmV3VHJhbnNpdGlvbjsKLSAg
fQotCi0gIFJvdXRlci5wcm90b3R5cGUgPSB7Ci0KLSAgICAvKioKLSAgICAgIFRoZSBtYWluIGVu
dHJ5IHBvaW50IGludG8gdGhlIHJvdXRlci4gVGhlIEFQSSBpcyBlc3NlbnRpYWxseQotICAgICAg
dGhlIHNhbWUgYXMgdGhlIGBtYXBgIG1ldGhvZCBpbiBgcm91dGUtcmVjb2duaXplcmAuCi0gICAg
ICAgVGhpcyBtZXRob2QgZXh0cmFjdHMgdGhlIFN0cmluZyBoYW5kbGVyIGF0IHRoZSBsYXN0IGAu
dG8oKWAKLSAgICAgIGNhbGwgYW5kIHVzZXMgaXQgYXMgdGhlIG5hbWUgb2YgdGhlIHdob2xlIHJv
dXRlLgotICAgICAgIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrCi0gICAgKi8KLSAgICBtYXA6
IGZ1bmN0aW9uIChjYWxsYmFjaykgewotICAgICAgdGhpcy5yZWNvZ25pemVyLmRlbGVnYXRlID0g
dGhpcy5kZWxlZ2F0ZTsKLQotICAgICAgdGhpcy5yZWNvZ25pemVyLm1hcChjYWxsYmFjaywgZnVu
Y3Rpb24gKHJlY29nbml6ZXIsIHJvdXRlcykgewotICAgICAgICBmb3IgKHZhciBpID0gcm91dGVz
Lmxlbmd0aCAtIDEsIHByb2NlZWQgPSB0cnVlOyBpID49IDAgJiYgcHJvY2VlZDsgLS1pKSB7Ci0g
ICAgICAgICAgdmFyIHJvdXRlID0gcm91dGVzW2ldOwotICAgICAgICAgIHJlY29nbml6ZXIuYWRk
KHJvdXRlcywgeyBhczogcm91dGUuaGFuZGxlciB9KTsKLSAgICAgICAgICBwcm9jZWVkID0gcm91
dGUucGF0aCA9PT0gJy8nIHx8IHJvdXRlLnBhdGggPT09ICcnIHx8IHJvdXRlLmhhbmRsZXIuc2xp
Y2UoLTYpID09PSAnLmluZGV4JzsKLSAgICAgICAgfQotICAgICAgfSk7Ci0gICAgfSwKLQotICAg
IGhhc1JvdXRlOiBmdW5jdGlvbiAocm91dGUpIHsKLSAgICAgIHJldHVybiB0aGlzLnJlY29nbml6
ZXIuaGFzUm91dGUocm91dGUpOwotICAgIH0sCi0KLSAgICBnZXRIYW5kbGVyOiBmdW5jdGlvbiAo
KSB7fSwKLQotICAgIHF1ZXJ5UGFyYW1zVHJhbnNpdGlvbjogZnVuY3Rpb24gKGNoYW5nZWxpc3Qs
IHdhc1RyYW5zaXRpb25pbmcsIG9sZFN0YXRlLCBuZXdTdGF0ZSkgewotICAgICAgdmFyIHJvdXRl
ciA9IHRoaXM7Ci0KLSAgICAgIGZpcmVRdWVyeVBhcmFtRGlkQ2hhbmdlKHRoaXMsIG5ld1N0YXRl
LCBjaGFuZ2VsaXN0KTsKLQotICAgICAgaWYgKCF3YXNUcmFuc2l0aW9uaW5nICYmIHRoaXMuYWN0
aXZlVHJhbnNpdGlvbikgewotICAgICAgICAvLyBPbmUgb2YgdGhlIGhhbmRsZXJzIGluIHF1ZXJ5
UGFyYW1zRGlkQ2hhbmdlCi0gICAgICAgIC8vIGNhdXNlZCBhIHRyYW5zaXRpb24uIEp1c3QgcmV0
dXJuIHRoYXQgdHJhbnNpdGlvbi4KLSAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZlVHJhbnNpdGlv
bjsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIFJ1bm5pbmcgcXVlcnlQYXJhbXNEaWRDaGFu
Z2UgZGlkbid0IGNoYW5nZSBhbnl0aGluZy4KLSAgICAgICAgLy8gSnVzdCB1cGRhdGUgcXVlcnkg
cGFyYW1zIGFuZCBiZSBvbiBvdXIgd2F5LgotCi0gICAgICAgIC8vIFdlIGhhdmUgdG8gcmV0dXJu
IGEgbm9vcCB0cmFuc2l0aW9uIHRoYXQgd2lsbAotICAgICAgICAvLyBwZXJmb3JtIGEgVVJMIHVw
ZGF0ZSBhdCB0aGUgZW5kLiBUaGlzIGdpdmVzCi0gICAgICAgIC8vIHRoZSB1c2VyIHRoZSBhYmls
aXR5IHRvIHNldCB0aGUgdXJsIHVwZGF0ZQotICAgICAgICAvLyBtZXRob2QgKGRlZmF1bHQgaXMg
cmVwbGFjZVN0YXRlKS4KLSAgICAgICAgdmFyIG5ld1RyYW5zaXRpb24gPSBuZXcgX3JvdXRlclRy
YW5zaXRpb24uVHJhbnNpdGlvbih0aGlzKTsKLSAgICAgICAgbmV3VHJhbnNpdGlvbi5xdWVyeVBh
cmFtc09ubHkgPSB0cnVlOwotCi0gICAgICAgIG9sZFN0YXRlLnF1ZXJ5UGFyYW1zID0gZmluYWxp
emVRdWVyeVBhcmFtQ2hhbmdlKHRoaXMsIG5ld1N0YXRlLmhhbmRsZXJJbmZvcywgbmV3U3RhdGUu
cXVlcnlQYXJhbXMsIG5ld1RyYW5zaXRpb24pOwotCi0gICAgICAgIG5ld1RyYW5zaXRpb24ucHJv
bWlzZSA9IG5ld1RyYW5zaXRpb24ucHJvbWlzZS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHsKLSAg
ICAgICAgICB1cGRhdGVVUkwobmV3VHJhbnNpdGlvbiwgb2xkU3RhdGUsIHRydWUpOwotICAgICAg
ICAgIGlmIChyb3V0ZXIuZGlkVHJhbnNpdGlvbikgewotICAgICAgICAgICAgcm91dGVyLmRpZFRy
YW5zaXRpb24ocm91dGVyLmN1cnJlbnRIYW5kbGVySW5mb3MpOwotICAgICAgICAgIH0KLSAgICAg
ICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9LCBudWxsLCBfcm91dGVyVXRpbHMucHJvbWlz
ZUxhYmVsKCJUcmFuc2l0aW9uIGNvbXBsZXRlIikpOwotICAgICAgICByZXR1cm4gbmV3VHJhbnNp
dGlvbjsKLSAgICAgIH0KLSAgICB9LAotCi0gICAgLy8gTk9URTogdGhpcyBkb2Vzbid0IHJlYWxs
eSBiZWxvbmcgaGVyZSwgYnV0IGhlcmUKLSAgICAvLyBpdCBzaGFsbCByZW1haW4gdW50aWwgb3Vy
IEVTNiB0cmFuc3BpbGVyIGNhbgotICAgIC8vIGhhbmRsZSBjeWNsaWNhbCBkZXBzLgotICAgIHRy
YW5zaXRpb25CeUludGVudDogZnVuY3Rpb24gKGludGVudCwgaXNJbnRlcm1lZGlhdGUpIHsKLSAg
ICAgIHRyeSB7Ci0gICAgICAgIHJldHVybiBnZXRUcmFuc2l0aW9uQnlJbnRlbnQuYXBwbHkodGhp
cywgYXJndW1lbnRzKTsKLSAgICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBf
cm91dGVyVHJhbnNpdGlvbi5UcmFuc2l0aW9uKHRoaXMsIGludGVudCwgbnVsbCwgZSk7Ci0gICAg
ICB9Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAgQ2xlYXJzIHRoZSBjdXJyZW50IGFuZCB0YXJn
ZXQgcm91dGUgaGFuZGxlcnMgYW5kIHRyaWdnZXJzIGV4aXQKLSAgICAgIG9uIGVhY2ggb2YgdGhl
bSBzdGFydGluZyBhdCB0aGUgbGVhZiBhbmQgdHJhdmVyc2luZyB1cCB0aHJvdWdoCi0gICAgICBp
dHMgYW5jZXN0b3JzLgotICAgICovCi0gICAgcmVzZXQ6IGZ1bmN0aW9uICgpIHsKLSAgICAgIGlm
ICh0aGlzLnN0YXRlKSB7Ci0gICAgICAgIF9yb3V0ZXJVdGlscy5mb3JFYWNoKHRoaXMuc3RhdGUu
aGFuZGxlckluZm9zLnNsaWNlKCkucmV2ZXJzZSgpLCBmdW5jdGlvbiAoaGFuZGxlckluZm8pIHsK
LSAgICAgICAgICB2YXIgaGFuZGxlciA9IGhhbmRsZXJJbmZvLmhhbmRsZXI7Ci0gICAgICAgICAg
X3JvdXRlclV0aWxzLmNhbGxIb29rKGhhbmRsZXIsICdleGl0Jyk7Ci0gICAgICAgIH0pOwotICAg
ICAgfQotCi0gICAgICB0aGlzLnN0YXRlID0gbmV3IF9yb3V0ZXJUcmFuc2l0aW9uU3RhdGUuZGVm
YXVsdCgpOwotICAgICAgdGhpcy5jdXJyZW50SGFuZGxlckluZm9zID0gbnVsbDsKLSAgICB9LAot
Ci0gICAgYWN0aXZlVHJhbnNpdGlvbjogbnVsbCwKLQotICAgIC8qKgotICAgICAgdmFyIGhhbmRs
ZXIgPSBoYW5kbGVySW5mby5oYW5kbGVyOwotICAgICAgVGhlIGVudHJ5IHBvaW50IGZvciBoYW5k
bGluZyBhIGNoYW5nZSB0byB0aGUgVVJMICh1c3VhbGx5Ci0gICAgICB2aWEgdGhlIGJhY2sgYW5k
IGZvcndhcmQgYnV0dG9uKS4KLSAgICAgICBSZXR1cm5zIGFuIEFycmF5IG9mIGhhbmRsZXJzIGFu
ZCB0aGUgcGFyYW1ldGVycyBhc3NvY2lhdGVkCi0gICAgICB3aXRoIHRob3NlIHBhcmFtZXRlcnMu
Ci0gICAgICAgQHBhcmFtIHtTdHJpbmd9IHVybCBhIFVSTCB0byBwcm9jZXNzCi0gICAgICAgQHJl
dHVybiB7QXJyYXl9IGFuIEFycmF5IG9mIGBbaGFuZGxlciwgcGFyYW1ldGVyXWAgdHVwbGVzCi0g
ICAgKi8KLSAgICBoYW5kbGVVUkw6IGZ1bmN0aW9uICh1cmwpIHsKLSAgICAgIC8vIFBlcmZvcm0g
YSBVUkwtYmFzZWQgdHJhbnNpdGlvbiwgYnV0IGRvbid0IGNoYW5nZQotICAgICAgLy8gdGhlIFVS
TCBhZnRlcndhcmQsIHNpbmNlIGl0IGFscmVhZHkgaGFwcGVuZWQuCi0gICAgICB2YXIgYXJncyA9
IF9yb3V0ZXJVdGlscy5zbGljZS5jYWxsKGFyZ3VtZW50cyk7Ci0gICAgICBpZiAodXJsLmNoYXJB
dCgwKSAhPT0gJy8nKSB7Ci0gICAgICAgIGFyZ3NbMF0gPSAnLycgKyB1cmw7Ci0gICAgICB9Ci0K
LSAgICAgIHJldHVybiBkb1RyYW5zaXRpb24odGhpcywgYXJncykubWV0aG9kKG51bGwpOwotICAg
IH0sCi0KLSAgICAvKioKLSAgICAgIEhvb2sgcG9pbnQgZm9yIHVwZGF0aW5nIHRoZSBVUkwuCi0g
ICAgICAgQHBhcmFtIHtTdHJpbmd9IHVybCBhIFVSTCB0byB1cGRhdGUgdG8KLSAgICAqLwotICAg
IHVwZGF0ZVVSTDogZnVuY3Rpb24gKCkgewotICAgICAgdGhyb3cgbmV3IEVycm9yKCJ1cGRhdGVV
UkwgaXMgbm90IGltcGxlbWVudGVkIik7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAgSG9vayBw
b2ludCBmb3IgcmVwbGFjaW5nIHRoZSBjdXJyZW50IFVSTCwgaS5lLiB3aXRoIHJlcGxhY2VTdGF0
ZQotICAgICAgIEJ5IGRlZmF1bHQgdGhpcyBiZWhhdmVzIHRoZSBzYW1lIGFzIGB1cGRhdGVVUkxg
Ci0gICAgICAgQHBhcmFtIHtTdHJpbmd9IHVybCBhIFVSTCB0byB1cGRhdGUgdG8KLSAgICAqLwot
ICAgIHJlcGxhY2VVUkw6IGZ1bmN0aW9uICh1cmwpIHsKLSAgICAgIHRoaXMudXBkYXRlVVJMKHVy
bCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAgVHJhbnNpdGlvbiBpbnRvIHRoZSBzcGVjaWZp
ZWQgbmFtZWQgcm91dGUuCi0gICAgICAgSWYgbmVjZXNzYXJ5LCB0cmlnZ2VyIHRoZSBleGl0IGNh
bGxiYWNrIG9uIGFueSBoYW5kbGVycwotICAgICAgdGhhdCBhcmUgbm8gbG9uZ2VyIHJlcHJlc2Vu
dGVkIGJ5IHRoZSB0YXJnZXQgcm91dGUuCi0gICAgICAgQHBhcmFtIHtTdHJpbmd9IG5hbWUgdGhl
IG5hbWUgb2YgdGhlIHJvdXRlCi0gICAgKi8KLSAgICB0cmFuc2l0aW9uVG86IGZ1bmN0aW9uIChu
YW1lKSB7Ci0gICAgICByZXR1cm4gZG9UcmFuc2l0aW9uKHRoaXMsIGFyZ3VtZW50cyk7Ci0gICAg
fSwKLQotICAgIGludGVybWVkaWF0ZVRyYW5zaXRpb25UbzogZnVuY3Rpb24gKG5hbWUpIHsKLSAg
ICAgIHJldHVybiBkb1RyYW5zaXRpb24odGhpcywgYXJndW1lbnRzLCB0cnVlKTsKLSAgICB9LAot
Ci0gICAgcmVmcmVzaDogZnVuY3Rpb24gKHBpdm90SGFuZGxlcikgewotICAgICAgdmFyIHN0YXRl
ID0gdGhpcy5hY3RpdmVUcmFuc2l0aW9uID8gdGhpcy5hY3RpdmVUcmFuc2l0aW9uLnN0YXRlIDog
dGhpcy5zdGF0ZTsKLSAgICAgIHZhciBoYW5kbGVySW5mb3MgPSBzdGF0ZS5oYW5kbGVySW5mb3M7
Ci0gICAgICB2YXIgcGFyYW1zID0ge307Ci0gICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gaGFu
ZGxlckluZm9zLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7Ci0gICAgICAgIHZhciBoYW5kbGVySW5m
byA9IGhhbmRsZXJJbmZvc1tpXTsKLSAgICAgICAgcGFyYW1zW2hhbmRsZXJJbmZvLm5hbWVdID0g
aGFuZGxlckluZm8ucGFyYW1zIHx8IHt9OwotICAgICAgfQotCi0gICAgICBfcm91dGVyVXRpbHMu
bG9nKHRoaXMsICJTdGFydGluZyBhIHJlZnJlc2ggdHJhbnNpdGlvbiIpOwotICAgICAgdmFyIGlu
dGVudCA9IG5ldyBfcm91dGVyVHJhbnNpdGlvbkludGVudE5hbWVkVHJhbnNpdGlvbkludGVudC5k
ZWZhdWx0KHsKLSAgICAgICAgbmFtZTogaGFuZGxlckluZm9zW2hhbmRsZXJJbmZvcy5sZW5ndGgg
LSAxXS5uYW1lLAotICAgICAgICBwaXZvdEhhbmRsZXI6IHBpdm90SGFuZGxlciB8fCBoYW5kbGVy
SW5mb3NbMF0uaGFuZGxlciwKLSAgICAgICAgY29udGV4dHM6IFtdLCAvLyBUT0RPIGNvbGxlY3Qg
Y29udGV4dHMuLi4/Ci0gICAgICAgIHF1ZXJ5UGFyYW1zOiB0aGlzLl9jaGFuZ2VkUXVlcnlQYXJh
bXMgfHwgc3RhdGUucXVlcnlQYXJhbXMgfHwge30KLSAgICAgIH0pOwotCi0gICAgICByZXR1cm4g
dGhpcy50cmFuc2l0aW9uQnlJbnRlbnQoaW50ZW50LCBmYWxzZSk7Ci0gICAgfSwKLQotICAgIC8q
KgotICAgICAgSWRlbnRpY2FsIHRvIGB0cmFuc2l0aW9uVG9gIGV4Y2VwdCB0aGF0IHRoZSBjdXJy
ZW50IFVSTCB3aWxsIGJlIHJlcGxhY2VkCi0gICAgICBpZiBwb3NzaWJsZS4KLSAgICAgICBUaGlz
IG1ldGhvZCBpcyBpbnRlbmRlZCBwcmltYXJpbHkgZm9yIHVzZSB3aXRoIGByZXBsYWNlU3RhdGVg
LgotICAgICAgIEBwYXJhbSB7U3RyaW5nfSBuYW1lIHRoZSBuYW1lIG9mIHRoZSByb3V0ZQotICAg
ICovCi0gICAgcmVwbGFjZVdpdGg6IGZ1bmN0aW9uIChuYW1lKSB7Ci0gICAgICByZXR1cm4gZG9U
cmFuc2l0aW9uKHRoaXMsIGFyZ3VtZW50cykubWV0aG9kKCdyZXBsYWNlJyk7Ci0gICAgfSwKLQot
ICAgIC8qKgotICAgICAgVGFrZSBhIG5hbWVkIHJvdXRlIGFuZCBjb250ZXh0IG9iamVjdHMgYW5k
IGdlbmVyYXRlIGEKLSAgICAgIFVSTC4KLSAgICAgICBAcGFyYW0ge1N0cmluZ30gbmFtZSB0aGUg
bmFtZSBvZiB0aGUgcm91dGUgdG8gZ2VuZXJhdGUKLSAgICAgICAgYSBVUkwgZm9yCi0gICAgICBA
cGFyYW0gey4uLk9iamVjdH0gb2JqZWN0cyBhIGxpc3Qgb2Ygb2JqZWN0cyB0byBzZXJpYWxpemUK
LSAgICAgICBAcmV0dXJuIHtTdHJpbmd9IGEgVVJMCi0gICAgKi8KLSAgICBnZW5lcmF0ZTogZnVu
Y3Rpb24gKGhhbmRsZXJOYW1lKSB7Ci0KLSAgICAgIHZhciBwYXJ0aXRpb25lZEFyZ3MgPSBfcm91
dGVyVXRpbHMuZXh0cmFjdFF1ZXJ5UGFyYW1zKF9yb3V0ZXJVdGlscy5zbGljZS5jYWxsKGFyZ3Vt
ZW50cywgMSkpLAotICAgICAgICAgIHN1cHBsaWVkUGFyYW1zID0gcGFydGl0aW9uZWRBcmdzWzBd
LAotICAgICAgICAgIHF1ZXJ5UGFyYW1zID0gcGFydGl0aW9uZWRBcmdzWzFdOwotCi0gICAgICAv
LyBDb25zdHJ1Y3QgYSBUcmFuc2l0aW9uSW50ZW50IHdpdGggdGhlIHByb3ZpZGVkIHBhcmFtcwot
ICAgICAgLy8gYW5kIGFwcGx5IGl0IHRvIHRoZSBwcmVzZW50IHN0YXRlIG9mIHRoZSByb3V0ZXIu
Ci0gICAgICB2YXIgaW50ZW50ID0gbmV3IF9yb3V0ZXJUcmFuc2l0aW9uSW50ZW50TmFtZWRUcmFu
c2l0aW9uSW50ZW50LmRlZmF1bHQoeyBuYW1lOiBoYW5kbGVyTmFtZSwgY29udGV4dHM6IHN1cHBs
aWVkUGFyYW1zIH0pOwotICAgICAgdmFyIHN0YXRlID0gaW50ZW50LmFwcGx5VG9TdGF0ZSh0aGlz
LnN0YXRlLCB0aGlzLnJlY29nbml6ZXIsIHRoaXMuZ2V0SGFuZGxlcik7Ci0gICAgICB2YXIgcGFy
YW1zID0ge307Ci0KLSAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBzdGF0ZS5oYW5kbGVySW5m
b3MubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHsKLSAgICAgICAgdmFyIGhhbmRsZXJJbmZvID0gc3Rh
dGUuaGFuZGxlckluZm9zW2ldOwotICAgICAgICB2YXIgaGFuZGxlclBhcmFtcyA9IGhhbmRsZXJJ
bmZvLnNlcmlhbGl6ZSgpOwotICAgICAgICBfcm91dGVyVXRpbHMubWVyZ2UocGFyYW1zLCBoYW5k
bGVyUGFyYW1zKTsKLSAgICAgIH0KLSAgICAgIHBhcmFtcy5xdWVyeVBhcmFtcyA9IHF1ZXJ5UGFy
YW1zOwotCi0gICAgICByZXR1cm4gdGhpcy5yZWNvZ25pemVyLmdlbmVyYXRlKGhhbmRsZXJOYW1l
LCBwYXJhbXMpOwotICAgIH0sCi0KLSAgICBhcHBseUludGVudDogZnVuY3Rpb24gKGhhbmRsZXJO
YW1lLCBjb250ZXh0cykgewotICAgICAgdmFyIGludGVudCA9IG5ldyBfcm91dGVyVHJhbnNpdGlv
bkludGVudE5hbWVkVHJhbnNpdGlvbkludGVudC5kZWZhdWx0KHsKLSAgICAgICAgbmFtZTogaGFu
ZGxlck5hbWUsCi0gICAgICAgIGNvbnRleHRzOiBjb250ZXh0cwotICAgICAgfSk7Ci0KLSAgICAg
IHZhciBzdGF0ZSA9IHRoaXMuYWN0aXZlVHJhbnNpdGlvbiAmJiB0aGlzLmFjdGl2ZVRyYW5zaXRp
b24uc3RhdGUgfHwgdGhpcy5zdGF0ZTsKLSAgICAgIHJldHVybiBpbnRlbnQuYXBwbHlUb1N0YXRl
KHN0YXRlLCB0aGlzLnJlY29nbml6ZXIsIHRoaXMuZ2V0SGFuZGxlcik7Ci0gICAgfSwKLQotICAg
IGlzQWN0aXZlSW50ZW50OiBmdW5jdGlvbiAoaGFuZGxlck5hbWUsIGNvbnRleHRzLCBxdWVyeVBh
cmFtcywgX3N0YXRlKSB7Ci0gICAgICB2YXIgc3RhdGUgPSBfc3RhdGUgfHwgdGhpcy5zdGF0ZSwK
LSAgICAgICAgICB0YXJnZXRIYW5kbGVySW5mb3MgPSBzdGF0ZS5oYW5kbGVySW5mb3MsCi0gICAg
ICAgICAgZm91bmQgPSBmYWxzZSwKLSAgICAgICAgICBuYW1lcywKLSAgICAgICAgICBvYmplY3Qs
Ci0gICAgICAgICAgaGFuZGxlckluZm8sCi0gICAgICAgICAgaGFuZGxlck9iaiwKLSAgICAgICAg
ICBpLAotICAgICAgICAgIGxlbjsKLQotICAgICAgaWYgKCF0YXJnZXRIYW5kbGVySW5mb3MubGVu
Z3RoKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLQotICAgICAgdmFyIHRhcmdl
dEhhbmRsZXIgPSB0YXJnZXRIYW5kbGVySW5mb3NbdGFyZ2V0SGFuZGxlckluZm9zLmxlbmd0aCAt
IDFdLm5hbWU7Ci0gICAgICB2YXIgcmVjb2dIYW5kbGVycyA9IHRoaXMucmVjb2duaXplci5oYW5k
bGVyc0Zvcih0YXJnZXRIYW5kbGVyKTsKLQotICAgICAgdmFyIGluZGV4ID0gMDsKLSAgICAgIGZv
ciAobGVuID0gcmVjb2dIYW5kbGVycy5sZW5ndGg7IGluZGV4IDwgbGVuOyArK2luZGV4KSB7Ci0g
ICAgICAgIGhhbmRsZXJJbmZvID0gdGFyZ2V0SGFuZGxlckluZm9zW2luZGV4XTsKLSAgICAgICAg
aWYgKGhhbmRsZXJJbmZvLm5hbWUgPT09IGhhbmRsZXJOYW1lKSB7Ci0gICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgaWYgKGluZGV4ID09PSByZWNvZ0hhbmRsZXJz
Lmxlbmd0aCkgewotICAgICAgICAvLyBUaGUgcHJvdmlkZWQgcm91dGUgbmFtZSBpc24ndCBldmVu
IGluIHRoZSByb3V0ZSBoaWVyYXJjaHkuCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0K
LQotICAgICAgdmFyIHRlc3RTdGF0ZSA9IG5ldyBfcm91dGVyVHJhbnNpdGlvblN0YXRlLmRlZmF1
bHQoKTsKLSAgICAgIHRlc3RTdGF0ZS5oYW5kbGVySW5mb3MgPSB0YXJnZXRIYW5kbGVySW5mb3Mu
c2xpY2UoMCwgaW5kZXggKyAxKTsKLSAgICAgIHJlY29nSGFuZGxlcnMgPSByZWNvZ0hhbmRsZXJz
LnNsaWNlKDAsIGluZGV4ICsgMSk7Ci0KLSAgICAgIHZhciBpbnRlbnQgPSBuZXcgX3JvdXRlclRy
YW5zaXRpb25JbnRlbnROYW1lZFRyYW5zaXRpb25JbnRlbnQuZGVmYXVsdCh7Ci0gICAgICAgIG5h
bWU6IHRhcmdldEhhbmRsZXIsCi0gICAgICAgIGNvbnRleHRzOiBjb250ZXh0cwotICAgICAgfSk7
Ci0KLSAgICAgIHZhciBuZXdTdGF0ZSA9IGludGVudC5hcHBseVRvSGFuZGxlcnModGVzdFN0YXRl
LCByZWNvZ0hhbmRsZXJzLCB0aGlzLmdldEhhbmRsZXIsIHRhcmdldEhhbmRsZXIsIHRydWUsIHRy
dWUpOwotCi0gICAgICB2YXIgaGFuZGxlcnNFcXVhbCA9IGhhbmRsZXJJbmZvc0VxdWFsKG5ld1N0
YXRlLmhhbmRsZXJJbmZvcywgdGVzdFN0YXRlLmhhbmRsZXJJbmZvcyk7Ci0gICAgICBpZiAoIXF1
ZXJ5UGFyYW1zIHx8ICFoYW5kbGVyc0VxdWFsKSB7Ci0gICAgICAgIHJldHVybiBoYW5kbGVyc0Vx
dWFsOwotICAgICAgfQotCi0gICAgICAvLyBHZXQgYSBoYXNoIG9mIFFQcyB0aGF0IHdpbGwgc3Rp
bGwgYmUgYWN0aXZlIG9uIG5ldyByb3V0ZQotICAgICAgdmFyIGFjdGl2ZVFQc09uTmV3SGFuZGxl
ciA9IHt9OwotICAgICAgX3JvdXRlclV0aWxzLm1lcmdlKGFjdGl2ZVFQc09uTmV3SGFuZGxlciwg
cXVlcnlQYXJhbXMpOwotCi0gICAgICB2YXIgYWN0aXZlUXVlcnlQYXJhbXMgPSBzdGF0ZS5xdWVy
eVBhcmFtczsKLSAgICAgIGZvciAodmFyIGtleSBpbiBhY3RpdmVRdWVyeVBhcmFtcykgewotICAg
ICAgICBpZiAoYWN0aXZlUXVlcnlQYXJhbXMuaGFzT3duUHJvcGVydHkoa2V5KSAmJiBhY3RpdmVR
UHNPbk5ld0hhbmRsZXIuaGFzT3duUHJvcGVydHkoa2V5KSkgewotICAgICAgICAgIGFjdGl2ZVFQ
c09uTmV3SGFuZGxlcltrZXldID0gYWN0aXZlUXVlcnlQYXJhbXNba2V5XTsKLSAgICAgICAgfQot
ICAgICAgfQotCi0gICAgICByZXR1cm4gaGFuZGxlcnNFcXVhbCAmJiAhX3JvdXRlclV0aWxzLmdl
dENoYW5nZWxpc3QoYWN0aXZlUVBzT25OZXdIYW5kbGVyLCBxdWVyeVBhcmFtcyk7Ci0gICAgfSwK
LQotICAgIGlzQWN0aXZlOiBmdW5jdGlvbiAoaGFuZGxlck5hbWUpIHsKLSAgICAgIHZhciBwYXJ0
aXRpb25lZEFyZ3MgPSBfcm91dGVyVXRpbHMuZXh0cmFjdFF1ZXJ5UGFyYW1zKF9yb3V0ZXJVdGls
cy5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSkpOwotICAgICAgcmV0dXJuIHRoaXMuaXNBY3RpdmVJ
bnRlbnQoaGFuZGxlck5hbWUsIHBhcnRpdGlvbmVkQXJnc1swXSwgcGFydGl0aW9uZWRBcmdzWzFd
KTsKLSAgICB9LAotCi0gICAgdHJpZ2dlcjogZnVuY3Rpb24gKG5hbWUpIHsKLSAgICAgIHZhciBh
cmdzID0gX3JvdXRlclV0aWxzLnNsaWNlLmNhbGwoYXJndW1lbnRzKTsKLSAgICAgIF9yb3V0ZXJV
dGlscy50cmlnZ2VyKHRoaXMsIHRoaXMuY3VycmVudEhhbmRsZXJJbmZvcywgZmFsc2UsIGFyZ3Mp
OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgIEhvb2sgcG9pbnQgZm9yIGxvZ2dpbmcgdHJhbnNp
dGlvbiBzdGF0dXMgdXBkYXRlcy4KLSAgICAgICBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZSBUaGUg
bWVzc2FnZSB0byBsb2cuCi0gICAgKi8KLSAgICBsb2c6IG51bGwKLSAgfTsKLQotICAvKioKLSAg
ICBAcHJpdmF0ZQotICAKLSAgICBGaXJlcyBxdWVyeVBhcmFtc0RpZENoYW5nZSBldmVudAotICAq
LwotICBmdW5jdGlvbiBmaXJlUXVlcnlQYXJhbURpZENoYW5nZShyb3V0ZXIsIG5ld1N0YXRlLCBx
dWVyeVBhcmFtQ2hhbmdlbGlzdCkgewotICAgIC8vIElmIHF1ZXJ5UGFyYW1zIGNoYW5nZWQgdHJp
Z2dlciBldmVudAotICAgIGlmIChxdWVyeVBhcmFtQ2hhbmdlbGlzdCkgewotCi0gICAgICAvLyBU
aGlzIGlzIGEgbGl0dGxlIGhhY2t5IGJ1dCB3ZSBuZWVkIHNvbWUgd2F5IG9mIHN0b3JpbmcKLSAg
ICAgIC8vIGNoYW5nZWQgcXVlcnkgcGFyYW1zIGdpdmVuIHRoYXQgbm8gYWN0aXZlVHJhbnNpdGlv
bgotICAgICAgLy8gaXMgZ3VhcmFudGVlZCB0byBoYXZlIG9jY3VycmVkLgotICAgICAgcm91dGVy
Ll9jaGFuZ2VkUXVlcnlQYXJhbXMgPSBxdWVyeVBhcmFtQ2hhbmdlbGlzdC5hbGw7Ci0gICAgICBf
cm91dGVyVXRpbHMudHJpZ2dlcihyb3V0ZXIsIG5ld1N0YXRlLmhhbmRsZXJJbmZvcywgdHJ1ZSwg
WydxdWVyeVBhcmFtc0RpZENoYW5nZScsIHF1ZXJ5UGFyYW1DaGFuZ2VsaXN0LmNoYW5nZWQsIHF1
ZXJ5UGFyYW1DaGFuZ2VsaXN0LmFsbCwgcXVlcnlQYXJhbUNoYW5nZWxpc3QucmVtb3ZlZF0pOwot
ICAgICAgcm91dGVyLl9jaGFuZ2VkUXVlcnlQYXJhbXMgPSBudWxsOwotICAgIH0KLSAgfQotCi0g
IC8qKgotICAgIEBwcml2YXRlCi0gIAotICAgIFRha2VzIGFuIEFycmF5IG9mIGBIYW5kbGVySW5m
b2BzLCBmaWd1cmVzIG91dCB3aGljaCBvbmVzIGFyZQotICAgIGV4aXRpbmcsIGVudGVyaW5nLCBv
ciBjaGFuZ2luZyBjb250ZXh0cywgYW5kIGNhbGxzIHRoZQotICAgIHByb3BlciBoYW5kbGVyIGhv
b2tzLgotICAKLSAgICBGb3IgZXhhbXBsZSwgY29uc2lkZXIgdGhlIGZvbGxvd2luZyB0cmVlIG9m
IGhhbmRsZXJzLiBFYWNoIGhhbmRsZXIgaXMKLSAgICBmb2xsb3dlZCBieSB0aGUgVVJMIHNlZ21l
bnQgaXQgaGFuZGxlcy4KLSAgCi0gICAgYGBgCi0gICAgfH5pbmRleCAoIi8iKQotICAgIHwgfH5w
b3N0cyAoIi9wb3N0cyIpCi0gICAgfCB8IHwtc2hvd1Bvc3QgKCIvOmlkIikKLSAgICB8IHwgfC1u
ZXdQb3N0ICgiL25ldyIpCi0gICAgfCB8IHwtZWRpdFBvc3QgKCIvZWRpdCIpCi0gICAgfCB8fmFi
b3V0ICgiL2Fib3V0LzppZCIpCi0gICAgYGBgCi0gIAotICAgIENvbnNpZGVyIHRoZSBmb2xsb3dp
bmcgdHJhbnNpdGlvbnM6Ci0gIAotICAgIDEuIEEgVVJMIHRyYW5zaXRpb24gdG8gYC9wb3N0cy8x
YC4KLSAgICAgICAxLiBUcmlnZ2VycyB0aGUgYCptb2RlbGAgY2FsbGJhY2tzIG9uIHRoZQotICAg
ICAgICAgIGBpbmRleGAsIGBwb3N0c2AsIGFuZCBgc2hvd1Bvc3RgIGhhbmRsZXJzCi0gICAgICAg
Mi4gVHJpZ2dlcnMgdGhlIGBlbnRlcmAgY2FsbGJhY2sgb24gdGhlIHNhbWUKLSAgICAgICAzLiBU
cmlnZ2VycyB0aGUgYHNldHVwYCBjYWxsYmFjayBvbiB0aGUgc2FtZQotICAgIDIuIEEgZGlyZWN0
IHRyYW5zaXRpb24gdG8gYG5ld1Bvc3RgCi0gICAgICAgMS4gVHJpZ2dlcnMgdGhlIGBleGl0YCBj
YWxsYmFjayBvbiBgc2hvd1Bvc3RgCi0gICAgICAgMi4gVHJpZ2dlcnMgdGhlIGBlbnRlcmAgY2Fs
bGJhY2sgb24gYG5ld1Bvc3RgCi0gICAgICAgMy4gVHJpZ2dlcnMgdGhlIGBzZXR1cGAgY2FsbGJh
Y2sgb24gYG5ld1Bvc3RgCi0gICAgMy4gQSBkaXJlY3QgdHJhbnNpdGlvbiB0byBgYWJvdXRgIHdp
dGggYSBzcGVjaWZpZWQKLSAgICAgICBjb250ZXh0IG9iamVjdAotICAgICAgIDEuIFRyaWdnZXJz
IHRoZSBgZXhpdGAgY2FsbGJhY2sgb24gYG5ld1Bvc3RgCi0gICAgICAgICAgYW5kIGBwb3N0c2AK
LSAgICAgICAyLiBUcmlnZ2VycyB0aGUgYHNlcmlhbGl6ZWAgY2FsbGJhY2sgb24gYGFib3V0YAot
ICAgICAgIDMuIFRyaWdnZXJzIHRoZSBgZW50ZXJgIGNhbGxiYWNrIG9uIGBhYm91dGAKLSAgICAg
ICA0LiBUcmlnZ2VycyB0aGUgYHNldHVwYCBjYWxsYmFjayBvbiBgYWJvdXRgCi0gIAotICAgIEBw
YXJhbSB7Um91dGVyfSB0cmFuc2l0aW9uCi0gICAgQHBhcmFtIHtUcmFuc2l0aW9uU3RhdGV9IG5l
d1N0YXRlCi0gICovCi0gIGZ1bmN0aW9uIHNldHVwQ29udGV4dHMocm91dGVyLCBuZXdTdGF0ZSwg
dHJhbnNpdGlvbikgewotICAgIHZhciBwYXJ0aXRpb24gPSBwYXJ0aXRpb25IYW5kbGVycyhyb3V0
ZXIuc3RhdGUsIG5ld1N0YXRlKTsKLSAgICB2YXIgaSwgbCwgaGFuZGxlcjsKLQotICAgIGZvciAo
aSA9IDAsIGwgPSBwYXJ0aXRpb24uZXhpdGVkLmxlbmd0aDsgaSA8IGw7IGkrKykgewotICAgICAg
aGFuZGxlciA9IHBhcnRpdGlvbi5leGl0ZWRbaV0uaGFuZGxlcjsKLSAgICAgIGRlbGV0ZSBoYW5k
bGVyLmNvbnRleHQ7Ci0KLSAgICAgIF9yb3V0ZXJVdGlscy5jYWxsSG9vayhoYW5kbGVyLCAncmVz
ZXQnLCB0cnVlLCB0cmFuc2l0aW9uKTsKLSAgICAgIF9yb3V0ZXJVdGlscy5jYWxsSG9vayhoYW5k
bGVyLCAnZXhpdCcsIHRyYW5zaXRpb24pOwotICAgIH0KLQotICAgIHZhciBvbGRTdGF0ZSA9IHJv
dXRlci5vbGRTdGF0ZSA9IHJvdXRlci5zdGF0ZTsKLSAgICByb3V0ZXIuc3RhdGUgPSBuZXdTdGF0
ZTsKLSAgICB2YXIgY3VycmVudEhhbmRsZXJJbmZvcyA9IHJvdXRlci5jdXJyZW50SGFuZGxlcklu
Zm9zID0gcGFydGl0aW9uLnVuY2hhbmdlZC5zbGljZSgpOwotCi0gICAgdHJ5IHsKLSAgICAgIGZv
ciAoaSA9IDAsIGwgPSBwYXJ0aXRpb24ucmVzZXQubGVuZ3RoOyBpIDwgbDsgaSsrKSB7Ci0gICAg
ICAgIGhhbmRsZXIgPSBwYXJ0aXRpb24ucmVzZXRbaV0uaGFuZGxlcjsKLSAgICAgICAgX3JvdXRl
clV0aWxzLmNhbGxIb29rKGhhbmRsZXIsICdyZXNldCcsIGZhbHNlLCB0cmFuc2l0aW9uKTsKLSAg
ICAgIH0KLQotICAgICAgZm9yIChpID0gMCwgbCA9IHBhcnRpdGlvbi51cGRhdGVkQ29udGV4dC5s
ZW5ndGg7IGkgPCBsOyBpKyspIHsKLSAgICAgICAgaGFuZGxlckVudGVyZWRPclVwZGF0ZWQoY3Vy
cmVudEhhbmRsZXJJbmZvcywgcGFydGl0aW9uLnVwZGF0ZWRDb250ZXh0W2ldLCBmYWxzZSwgdHJh
bnNpdGlvbik7Ci0gICAgICB9Ci0KLSAgICAgIGZvciAoaSA9IDAsIGwgPSBwYXJ0aXRpb24uZW50
ZXJlZC5sZW5ndGg7IGkgPCBsOyBpKyspIHsKLSAgICAgICAgaGFuZGxlckVudGVyZWRPclVwZGF0
ZWQoY3VycmVudEhhbmRsZXJJbmZvcywgcGFydGl0aW9uLmVudGVyZWRbaV0sIHRydWUsIHRyYW5z
aXRpb24pOwotICAgICAgfQotICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgIHJvdXRlci5zdGF0ZSA9
IG9sZFN0YXRlOwotICAgICAgcm91dGVyLmN1cnJlbnRIYW5kbGVySW5mb3MgPSBvbGRTdGF0ZS5o
YW5kbGVySW5mb3M7Ci0gICAgICB0aHJvdyBlOwotICAgIH0KLQotICAgIHJvdXRlci5zdGF0ZS5x
dWVyeVBhcmFtcyA9IGZpbmFsaXplUXVlcnlQYXJhbUNoYW5nZShyb3V0ZXIsIGN1cnJlbnRIYW5k
bGVySW5mb3MsIG5ld1N0YXRlLnF1ZXJ5UGFyYW1zLCB0cmFuc2l0aW9uKTsKLSAgfQotCi0gIC8q
KgotICAgIEBwcml2YXRlCi0gIAotICAgIEhlbHBlciBtZXRob2QgdXNlZCBieSBzZXR1cENvbnRl
eHRzLiBIYW5kbGVzIGVycm9ycyBvciByZWRpcmVjdHMKLSAgICB0aGF0IG1heSBoYXBwZW4gaW4g
ZW50ZXIvc2V0dXAuCi0gICovCi0gIGZ1bmN0aW9uIGhhbmRsZXJFbnRlcmVkT3JVcGRhdGVkKGN1
cnJlbnRIYW5kbGVySW5mb3MsIGhhbmRsZXJJbmZvLCBlbnRlciwgdHJhbnNpdGlvbikgewotCi0g
ICAgdmFyIGhhbmRsZXIgPSBoYW5kbGVySW5mby5oYW5kbGVyLAotICAgICAgICBjb250ZXh0ID0g
aGFuZGxlckluZm8uY29udGV4dDsKLQotICAgIGlmIChlbnRlcikgewotICAgICAgX3JvdXRlclV0
aWxzLmNhbGxIb29rKGhhbmRsZXIsICdlbnRlcicsIHRyYW5zaXRpb24pOwotICAgIH0KLSAgICBp
ZiAodHJhbnNpdGlvbiAmJiB0cmFuc2l0aW9uLmlzQWJvcnRlZCkgewotICAgICAgdGhyb3cgbmV3
IF9yb3V0ZXJUcmFuc2l0aW9uLlRyYW5zaXRpb25BYm9ydGVkKCk7Ci0gICAgfQotCi0gICAgaGFu
ZGxlci5jb250ZXh0ID0gY29udGV4dDsKLSAgICBfcm91dGVyVXRpbHMuY2FsbEhvb2soaGFuZGxl
ciwgJ2NvbnRleHREaWRDaGFuZ2UnKTsKLQotICAgIF9yb3V0ZXJVdGlscy5jYWxsSG9vayhoYW5k
bGVyLCAnc2V0dXAnLCBjb250ZXh0LCB0cmFuc2l0aW9uKTsKLSAgICBpZiAodHJhbnNpdGlvbiAm
JiB0cmFuc2l0aW9uLmlzQWJvcnRlZCkgewotICAgICAgdGhyb3cgbmV3IF9yb3V0ZXJUcmFuc2l0
aW9uLlRyYW5zaXRpb25BYm9ydGVkKCk7Ci0gICAgfQotCi0gICAgY3VycmVudEhhbmRsZXJJbmZv
cy5wdXNoKGhhbmRsZXJJbmZvKTsKLQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLyoqCi0g
ICAgQHByaXZhdGUKLSAgCi0gICAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0cmFuc2l0
aW9uaW5nIGZyb20gb25lIFVSTCB0bwotICAgIGFub3RoZXIgdG8gZGV0ZXJtaW5lIHdoaWNoIGhh
bmRsZXJzIGFyZSBubyBsb25nZXIgYWN0aXZlLAotICAgIHdoaWNoIGhhbmRsZXJzIGFyZSBuZXds
eSBhY3RpdmUsIGFuZCB3aGljaCBoYW5kbGVycyByZW1haW4KLSAgICBhY3RpdmUgYnV0IGhhdmUg
dGhlaXIgY29udGV4dCBjaGFuZ2VkLgotICAKLSAgICBUYWtlIGEgbGlzdCBvZiBvbGQgaGFuZGxl
cnMgYW5kIG5ldyBoYW5kbGVycyBhbmQgcGFydGl0aW9uCi0gICAgdGhlbSBpbnRvIGZvdXIgYnVj
a2V0czoKLSAgCi0gICAgKiB1bmNoYW5nZWQ6IHRoZSBoYW5kbGVyIHdhcyBhY3RpdmUgaW4gYm90
aCB0aGUgb2xkIGFuZAotICAgICAgbmV3IFVSTCwgYW5kIGl0cyBjb250ZXh0IHJlbWFpbnMgdGhl
IHNhbWUKLSAgICAqIHVwZGF0ZWQgY29udGV4dDogdGhlIGhhbmRsZXIgd2FzIGFjdGl2ZSBpbiBi
b3RoIHRoZQotICAgICAgb2xkIGFuZCBuZXcgVVJMLCBidXQgaXRzIGNvbnRleHQgY2hhbmdlZC4g
VGhlIGhhbmRsZXIncwotICAgICAgYHNldHVwYCBtZXRob2QsIGlmIGFueSwgd2lsbCBiZSBjYWxs
ZWQgd2l0aCB0aGUgbmV3Ci0gICAgICBjb250ZXh0LgotICAgICogZXhpdGVkOiB0aGUgaGFuZGxl
ciB3YXMgYWN0aXZlIGluIHRoZSBvbGQgVVJMLCBidXQgaXMKLSAgICAgIG5vIGxvbmdlciBhY3Rp
dmUuCi0gICAgKiBlbnRlcmVkOiB0aGUgaGFuZGxlciB3YXMgbm90IGFjdGl2ZSBpbiB0aGUgb2xk
IFVSTCwgYnV0Ci0gICAgICBpcyBub3cgYWN0aXZlLgotICAKLSAgICBUaGUgUGFydGl0aW9uZWRI
YW5kbGVycyBzdHJ1Y3R1cmUgaGFzIGZvdXIgZmllbGRzOgotICAKLSAgICAqIGB1cGRhdGVkQ29u
dGV4dGA6IGEgbGlzdCBvZiBgSGFuZGxlckluZm9gIG9iamVjdHMgdGhhdAotICAgICAgcmVwcmVz
ZW50IGhhbmRsZXJzIHRoYXQgcmVtYWluIGFjdGl2ZSBidXQgaGF2ZSBhIGNoYW5nZWQKLSAgICAg
IGNvbnRleHQKLSAgICAqIGBlbnRlcmVkYDogYSBsaXN0IG9mIGBIYW5kbGVySW5mb2Agb2JqZWN0
cyB0aGF0IHJlcHJlc2VudAotICAgICAgaGFuZGxlcnMgdGhhdCBhcmUgbmV3bHkgYWN0aXZlCi0g
ICAgKiBgZXhpdGVkYDogYSBsaXN0IG9mIGBIYW5kbGVySW5mb2Agb2JqZWN0cyB0aGF0IGFyZSBu
bwotICAgICAgbG9uZ2VyIGFjdGl2ZS4KLSAgICAqIGB1bmNoYW5nZWRgOiBhIGxpc3Qgb2YgYEhh
bmRlckluZm9gIG9iamVjdHMgdGhhdCByZW1haW4gYWN0aXZlLgotICAKLSAgICBAcGFyYW0ge0Fy
cmF5W0hhbmRsZXJJbmZvXX0gb2xkSGFuZGxlcnMgYSBsaXN0IG9mIHRoZSBoYW5kbGVyCi0gICAg
ICBpbmZvcm1hdGlvbiBmb3IgdGhlIHByZXZpb3VzIFVSTCAob3IgYFtdYCBpZiB0aGlzIGlzIHRo
ZQotICAgICAgZmlyc3QgaGFuZGxlZCB0cmFuc2l0aW9uKQotICAgIEBwYXJhbSB7QXJyYXlbSGFu
ZGxlckluZm9dfSBuZXdIYW5kbGVycyBhIGxpc3Qgb2YgdGhlIGhhbmRsZXIKLSAgICAgIGluZm9y
bWF0aW9uIGZvciB0aGUgbmV3IFVSTAotICAKLSAgICBAcmV0dXJuIHtQYXJ0aXRpb259Ci0gICov
Ci0gIGZ1bmN0aW9uIHBhcnRpdGlvbkhhbmRsZXJzKG9sZFN0YXRlLCBuZXdTdGF0ZSkgewotICAg
IHZhciBvbGRIYW5kbGVycyA9IG9sZFN0YXRlLmhhbmRsZXJJbmZvczsKLSAgICB2YXIgbmV3SGFu
ZGxlcnMgPSBuZXdTdGF0ZS5oYW5kbGVySW5mb3M7Ci0KLSAgICB2YXIgaGFuZGxlcnMgPSB7Ci0g
ICAgICB1cGRhdGVkQ29udGV4dDogW10sCi0gICAgICBleGl0ZWQ6IFtdLAotICAgICAgZW50ZXJl
ZDogW10sCi0gICAgICB1bmNoYW5nZWQ6IFtdCi0gICAgfTsKLQotICAgIHZhciBoYW5kbGVyQ2hh
bmdlZCwKLSAgICAgICAgY29udGV4dENoYW5nZWQgPSBmYWxzZSwKLSAgICAgICAgaSwKLSAgICAg
ICAgbDsKLQotICAgIGZvciAoaSA9IDAsIGwgPSBuZXdIYW5kbGVycy5sZW5ndGg7IGkgPCBsOyBp
KyspIHsKLSAgICAgIHZhciBvbGRIYW5kbGVyID0gb2xkSGFuZGxlcnNbaV0sCi0gICAgICAgICAg
bmV3SGFuZGxlciA9IG5ld0hhbmRsZXJzW2ldOwotCi0gICAgICBpZiAoIW9sZEhhbmRsZXIgfHwg
b2xkSGFuZGxlci5oYW5kbGVyICE9PSBuZXdIYW5kbGVyLmhhbmRsZXIpIHsKLSAgICAgICAgaGFu
ZGxlckNoYW5nZWQgPSB0cnVlOwotICAgICAgfQotCi0gICAgICBpZiAoaGFuZGxlckNoYW5nZWQp
IHsKLSAgICAgICAgaGFuZGxlcnMuZW50ZXJlZC5wdXNoKG5ld0hhbmRsZXIpOwotICAgICAgICBp
ZiAob2xkSGFuZGxlcikgewotICAgICAgICAgIGhhbmRsZXJzLmV4aXRlZC51bnNoaWZ0KG9sZEhh
bmRsZXIpOwotICAgICAgICB9Ci0gICAgICB9IGVsc2UgaWYgKGNvbnRleHRDaGFuZ2VkIHx8IG9s
ZEhhbmRsZXIuY29udGV4dCAhPT0gbmV3SGFuZGxlci5jb250ZXh0KSB7Ci0gICAgICAgIGNvbnRl
eHRDaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgaGFuZGxlcnMudXBkYXRlZENvbnRleHQucHVzaChu
ZXdIYW5kbGVyKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGhhbmRsZXJzLnVuY2hhbmdlZC5w
dXNoKG9sZEhhbmRsZXIpOwotICAgICAgfQotICAgIH0KLQotICAgIGZvciAoaSA9IG5ld0hhbmRs
ZXJzLmxlbmd0aCwgbCA9IG9sZEhhbmRsZXJzLmxlbmd0aDsgaSA8IGw7IGkrKykgewotICAgICAg
aGFuZGxlcnMuZXhpdGVkLnVuc2hpZnQob2xkSGFuZGxlcnNbaV0pOwotICAgIH0KLQotICAgIGhh
bmRsZXJzLnJlc2V0ID0gaGFuZGxlcnMudXBkYXRlZENvbnRleHQuc2xpY2UoKTsKLSAgICBoYW5k
bGVycy5yZXNldC5yZXZlcnNlKCk7Ci0KLSAgICByZXR1cm4gaGFuZGxlcnM7Ci0gIH0KLQotICBm
dW5jdGlvbiB1cGRhdGVVUkwodHJhbnNpdGlvbiwgc3RhdGUsIGlucHV0VXJsKSB7Ci0gICAgdmFy
IHVybE1ldGhvZCA9IHRyYW5zaXRpb24udXJsTWV0aG9kOwotCi0gICAgaWYgKCF1cmxNZXRob2Qp
IHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICB2YXIgcm91dGVyID0gdHJhbnNpdGlvbi5y
b3V0ZXIsCi0gICAgICAgIGhhbmRsZXJJbmZvcyA9IHN0YXRlLmhhbmRsZXJJbmZvcywKLSAgICAg
ICAgaGFuZGxlck5hbWUgPSBoYW5kbGVySW5mb3NbaGFuZGxlckluZm9zLmxlbmd0aCAtIDFdLm5h
bWUsCi0gICAgICAgIHBhcmFtcyA9IHt9OwotCi0gICAgZm9yICh2YXIgaSA9IGhhbmRsZXJJbmZv
cy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkgewotICAgICAgdmFyIGhhbmRsZXJJbmZvID0gaGFu
ZGxlckluZm9zW2ldOwotICAgICAgX3JvdXRlclV0aWxzLm1lcmdlKHBhcmFtcywgaGFuZGxlcklu
Zm8ucGFyYW1zKTsKLSAgICAgIGlmIChoYW5kbGVySW5mby5oYW5kbGVyLmluYWNjZXNzaWJsZUJ5
VVJMKSB7Ci0gICAgICAgIHVybE1ldGhvZCA9IG51bGw7Ci0gICAgICB9Ci0gICAgfQotCi0gICAg
aWYgKHVybE1ldGhvZCkgewotICAgICAgcGFyYW1zLnF1ZXJ5UGFyYW1zID0gdHJhbnNpdGlvbi5f
dmlzaWJsZVF1ZXJ5UGFyYW1zIHx8IHN0YXRlLnF1ZXJ5UGFyYW1zOwotICAgICAgdmFyIHVybCA9
IHJvdXRlci5yZWNvZ25pemVyLmdlbmVyYXRlKGhhbmRsZXJOYW1lLCBwYXJhbXMpOwotCi0gICAg
ICBpZiAodXJsTWV0aG9kID09PSAncmVwbGFjZScpIHsKLSAgICAgICAgcm91dGVyLnJlcGxhY2VV
UkwodXJsKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHJvdXRlci51cGRhdGVVUkwodXJsKTsK
LSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICBAcHJpdmF0ZQotICAKLSAgICBVcGRh
dGVzIHRoZSBVUkwgKGlmIG5lY2Vzc2FyeSkgYW5kIGNhbGxzIGBzZXR1cENvbnRleHRzYAotICAg
IHRvIHVwZGF0ZSB0aGUgcm91dGVyJ3MgYXJyYXkgb2YgYGN1cnJlbnRIYW5kbGVySW5mb3NgLgot
ICAgKi8KLSAgZnVuY3Rpb24gZmluYWxpemVUcmFuc2l0aW9uKHRyYW5zaXRpb24sIG5ld1N0YXRl
KSB7Ci0KLSAgICB0cnkgewotICAgICAgX3JvdXRlclV0aWxzLmxvZyh0cmFuc2l0aW9uLnJvdXRl
ciwgdHJhbnNpdGlvbi5zZXF1ZW5jZSwgIlJlc29sdmVkIGFsbCBtb2RlbHMgb24gZGVzdGluYXRp
b24gcm91dGU7IGZpbmFsaXppbmcgdHJhbnNpdGlvbi4iKTsKLQotICAgICAgdmFyIHJvdXRlciA9
IHRyYW5zaXRpb24ucm91dGVyLAotICAgICAgICAgIGhhbmRsZXJJbmZvcyA9IG5ld1N0YXRlLmhh
bmRsZXJJbmZvcywKLSAgICAgICAgICBzZXEgPSB0cmFuc2l0aW9uLnNlcXVlbmNlOwotCi0gICAg
ICAvLyBSdW4gYWxsIHRoZSBuZWNlc3NhcnkgZW50ZXIvc2V0dXAvZXhpdCBob29rcwotICAgICAg
c2V0dXBDb250ZXh0cyhyb3V0ZXIsIG5ld1N0YXRlLCB0cmFuc2l0aW9uKTsKLQotICAgICAgLy8g
Q2hlY2sgaWYgYSByZWRpcmVjdCBvY2N1cnJlZCBpbiBlbnRlci9zZXR1cAotICAgICAgaWYgKHRy
YW5zaXRpb24uaXNBYm9ydGVkKSB7Ci0gICAgICAgIC8vIFRPRE86IGNsZWFuZXIgd2F5PyBkaXN0
aW5ndWlzaCBiL3cgdGFyZ2V0SGFuZGxlckluZm9zPwotICAgICAgICByb3V0ZXIuc3RhdGUuaGFu
ZGxlckluZm9zID0gcm91dGVyLmN1cnJlbnRIYW5kbGVySW5mb3M7Ci0gICAgICAgIHJldHVybiBf
cnN2cFByb21pc2UuZGVmYXVsdC5yZWplY3QoX3JvdXRlclRyYW5zaXRpb24ubG9nQWJvcnQodHJh
bnNpdGlvbikpOwotICAgICAgfQotCi0gICAgICB1cGRhdGVVUkwodHJhbnNpdGlvbiwgbmV3U3Rh
dGUsIHRyYW5zaXRpb24uaW50ZW50LnVybCk7Ci0KLSAgICAgIHRyYW5zaXRpb24uaXNBY3RpdmUg
PSBmYWxzZTsKLSAgICAgIHJvdXRlci5hY3RpdmVUcmFuc2l0aW9uID0gbnVsbDsKLQotICAgICAg
X3JvdXRlclV0aWxzLnRyaWdnZXIocm91dGVyLCByb3V0ZXIuY3VycmVudEhhbmRsZXJJbmZvcywg
dHJ1ZSwgWydkaWRUcmFuc2l0aW9uJ10pOwotCi0gICAgICBpZiAocm91dGVyLmRpZFRyYW5zaXRp
b24pIHsKLSAgICAgICAgcm91dGVyLmRpZFRyYW5zaXRpb24ocm91dGVyLmN1cnJlbnRIYW5kbGVy
SW5mb3MpOwotICAgICAgfQotCi0gICAgICBfcm91dGVyVXRpbHMubG9nKHJvdXRlciwgdHJhbnNp
dGlvbi5zZXF1ZW5jZSwgIlRSQU5TSVRJT04gQ09NUExFVEUuIik7Ci0KLSAgICAgIC8vIFJlc29s
dmUgd2l0aCB0aGUgZmluYWwgaGFuZGxlci4KLSAgICAgIHJldHVybiBoYW5kbGVySW5mb3NbaGFu
ZGxlckluZm9zLmxlbmd0aCAtIDFdLmhhbmRsZXI7Ci0gICAgfSBjYXRjaCAoZSkgewotICAgICAg
aWYgKCEoZSBpbnN0YW5jZW9mIF9yb3V0ZXJUcmFuc2l0aW9uLlRyYW5zaXRpb25BYm9ydGVkKSkg
ewotICAgICAgICAvL3ZhciBlcnJvbmVvdXNIYW5kbGVyID0gaGFuZGxlckluZm9zLnBvcCgpOwot
ICAgICAgICB2YXIgaW5mb3MgPSB0cmFuc2l0aW9uLnN0YXRlLmhhbmRsZXJJbmZvczsKLSAgICAg
ICAgdHJhbnNpdGlvbi50cmlnZ2VyKHRydWUsICdlcnJvcicsIGUsIHRyYW5zaXRpb24sIGluZm9z
W2luZm9zLmxlbmd0aCAtIDFdLmhhbmRsZXIpOwotICAgICAgICB0cmFuc2l0aW9uLmFib3J0KCk7
Ci0gICAgICB9Ci0KLSAgICAgIHRocm93IGU7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAgQHBy
aXZhdGUKLSAgCi0gICAgQmVnaW5zIGFuZCByZXR1cm5zIGEgVHJhbnNpdGlvbiBiYXNlZCBvbiB0
aGUgcHJvdmlkZWQKLSAgICBhcmd1bWVudHMuIEFjY2VwdHMgYXJndW1lbnRzIGluIHRoZSBmb3Jt
IG9mIGJvdGggVVJMCi0gICAgdHJhbnNpdGlvbnMgYW5kIG5hbWVkIHRyYW5zaXRpb25zLgotICAK
LSAgICBAcGFyYW0ge1JvdXRlcn0gcm91dGVyCi0gICAgQHBhcmFtIHtBcnJheVtPYmplY3RdfSBh
cmdzIGFyZ3VtZW50cyBwYXNzZWQgdG8gdHJhbnNpdGlvblRvLAotICAgICAgcmVwbGFjZVdpdGgs
IG9yIGhhbmRsZVVSTAotICAqLwotICBmdW5jdGlvbiBkb1RyYW5zaXRpb24ocm91dGVyLCBhcmdz
LCBpc0ludGVybWVkaWF0ZSkgewotICAgIC8vIE5vcm1hbGl6ZSBibGFuayB0cmFuc2l0aW9ucyB0
byByb290IFVSTCB0cmFuc2l0aW9ucy4KLSAgICB2YXIgbmFtZSA9IGFyZ3NbMF0gfHwgJy8nOwot
Ci0gICAgdmFyIGxhc3RBcmcgPSBhcmdzW2FyZ3MubGVuZ3RoIC0gMV07Ci0gICAgdmFyIHF1ZXJ5
UGFyYW1zID0ge307Ci0gICAgaWYgKGxhc3RBcmcgJiYgbGFzdEFyZy5oYXNPd25Qcm9wZXJ0eSgn
cXVlcnlQYXJhbXMnKSkgewotICAgICAgcXVlcnlQYXJhbXMgPSBwb3AuY2FsbChhcmdzKS5xdWVy
eVBhcmFtczsKLSAgICB9Ci0KLSAgICB2YXIgaW50ZW50OwotICAgIGlmIChhcmdzLmxlbmd0aCA9
PT0gMCkgewotCi0gICAgICBfcm91dGVyVXRpbHMubG9nKHJvdXRlciwgIlVwZGF0aW5nIHF1ZXJ5
IHBhcmFtcyIpOwotCi0gICAgICAvLyBBIHF1ZXJ5IHBhcmFtIHVwZGF0ZSBpcyByZWFsbHkganVz
dCBhIHRyYW5zaXRpb24KLSAgICAgIC8vIGludG8gdGhlIHJvdXRlIHlvdSdyZSBhbHJlYWR5IG9u
LgotICAgICAgdmFyIGhhbmRsZXJJbmZvcyA9IHJvdXRlci5zdGF0ZS5oYW5kbGVySW5mb3M7Ci0g
ICAgICBpbnRlbnQgPSBuZXcgX3JvdXRlclRyYW5zaXRpb25JbnRlbnROYW1lZFRyYW5zaXRpb25J
bnRlbnQuZGVmYXVsdCh7Ci0gICAgICAgIG5hbWU6IGhhbmRsZXJJbmZvc1toYW5kbGVySW5mb3Mu
bGVuZ3RoIC0gMV0ubmFtZSwKLSAgICAgICAgY29udGV4dHM6IFtdLAotICAgICAgICBxdWVyeVBh
cmFtczogcXVlcnlQYXJhbXMKLSAgICAgIH0pOwotICAgIH0gZWxzZSBpZiAobmFtZS5jaGFyQXQo
MCkgPT09ICcvJykgewotCi0gICAgICBfcm91dGVyVXRpbHMubG9nKHJvdXRlciwgIkF0dGVtcHRp
bmcgVVJMIHRyYW5zaXRpb24gdG8gIiArIG5hbWUpOwotICAgICAgaW50ZW50ID0gbmV3IF9yb3V0
ZXJUcmFuc2l0aW9uSW50ZW50VXJsVHJhbnNpdGlvbkludGVudC5kZWZhdWx0KHsgdXJsOiBuYW1l
IH0pOwotICAgIH0gZWxzZSB7Ci0KLSAgICAgIF9yb3V0ZXJVdGlscy5sb2cocm91dGVyLCAiQXR0
ZW1wdGluZyB0cmFuc2l0aW9uIHRvICIgKyBuYW1lKTsKLSAgICAgIGludGVudCA9IG5ldyBfcm91
dGVyVHJhbnNpdGlvbkludGVudE5hbWVkVHJhbnNpdGlvbkludGVudC5kZWZhdWx0KHsKLSAgICAg
ICAgbmFtZTogYXJnc1swXSwKLSAgICAgICAgY29udGV4dHM6IF9yb3V0ZXJVdGlscy5zbGljZS5j
YWxsKGFyZ3MsIDEpLAotICAgICAgICBxdWVyeVBhcmFtczogcXVlcnlQYXJhbXMKLSAgICAgIH0p
OwotICAgIH0KLQotICAgIHJldHVybiByb3V0ZXIudHJhbnNpdGlvbkJ5SW50ZW50KGludGVudCwg
aXNJbnRlcm1lZGlhdGUpOwotICB9Ci0KLSAgZnVuY3Rpb24gaGFuZGxlckluZm9zRXF1YWwoaGFu
ZGxlckluZm9zLCBvdGhlckhhbmRsZXJJbmZvcykgewotICAgIGlmIChoYW5kbGVySW5mb3MubGVu
Z3RoICE9PSBvdGhlckhhbmRsZXJJbmZvcy5sZW5ndGgpIHsKLSAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0KLSAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gaGFuZGxlckluZm9zLmxlbmd0aDsg
aSA8IGxlbjsgKytpKSB7Ci0gICAgICBpZiAoaGFuZGxlckluZm9zW2ldICE9PSBvdGhlckhhbmRs
ZXJJbmZvc1tpXSkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgfQotICAg
IHJldHVybiB0cnVlOwotICB9Ci0KLSAgZnVuY3Rpb24gZmluYWxpemVRdWVyeVBhcmFtQ2hhbmdl
KHJvdXRlciwgcmVzb2x2ZWRIYW5kbGVycywgbmV3UXVlcnlQYXJhbXMsIHRyYW5zaXRpb24pIHsK
LSAgICAvLyBXZSBmaXJlIGEgZmluYWxpemVRdWVyeVBhcmFtQ2hhbmdlIGV2ZW50IHdoaWNoCi0g
ICAgLy8gZ2l2ZXMgdGhlIG5ldyByb3V0ZSBoaWVyYXJjaHkgYSBjaGFuY2UgdG8gdGVsbAotICAg
IC8vIHVzIHdoaWNoIHF1ZXJ5IHBhcmFtcyBpdCdzIGNvbnN1bWluZyBhbmQgd2hhdAotICAgIC8v
IHRoZWlyIGZpbmFsIHZhbHVlcyBhcmUuIElmIGEgcXVlcnkgcGFyYW0gaXMKLSAgICAvLyBubyBs
b25nZXIgY29uc3VtZWQgaW4gdGhlIGZpbmFsIHJvdXRlIGhpZXJhcmNoeSwKLSAgICAvLyBpdHMg
c2VyaWFsaXplZCBzZWdtZW50IHdpbGwgYmUgcmVtb3ZlZAotICAgIC8vIGZyb20gdGhlIFVSTC4K
LQotICAgIGZvciAodmFyIGsgaW4gbmV3UXVlcnlQYXJhbXMpIHsKLSAgICAgIGlmIChuZXdRdWVy
eVBhcmFtcy5oYXNPd25Qcm9wZXJ0eShrKSAmJiBuZXdRdWVyeVBhcmFtc1trXSA9PT0gbnVsbCkg
ewotICAgICAgICBkZWxldGUgbmV3UXVlcnlQYXJhbXNba107Ci0gICAgICB9Ci0gICAgfQotCi0g
ICAgdmFyIGZpbmFsUXVlcnlQYXJhbXNBcnJheSA9IFtdOwotICAgIF9yb3V0ZXJVdGlscy50cmln
Z2VyKHJvdXRlciwgcmVzb2x2ZWRIYW5kbGVycywgdHJ1ZSwgWydmaW5hbGl6ZVF1ZXJ5UGFyYW1D
aGFuZ2UnLCBuZXdRdWVyeVBhcmFtcywgZmluYWxRdWVyeVBhcmFtc0FycmF5LCB0cmFuc2l0aW9u
XSk7Ci0KLSAgICBpZiAodHJhbnNpdGlvbikgewotICAgICAgdHJhbnNpdGlvbi5fdmlzaWJsZVF1
ZXJ5UGFyYW1zID0ge307Ci0gICAgfQotCi0gICAgdmFyIGZpbmFsUXVlcnlQYXJhbXMgPSB7fTsK
LSAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gZmluYWxRdWVyeVBhcmFtc0FycmF5Lmxlbmd0aDsg
aSA8IGxlbjsgKytpKSB7Ci0gICAgICB2YXIgcXAgPSBmaW5hbFF1ZXJ5UGFyYW1zQXJyYXlbaV07
Ci0gICAgICBmaW5hbFF1ZXJ5UGFyYW1zW3FwLmtleV0gPSBxcC52YWx1ZTsKLSAgICAgIGlmICh0
cmFuc2l0aW9uICYmIHFwLnZpc2libGUgIT09IGZhbHNlKSB7Ci0gICAgICAgIHRyYW5zaXRpb24u
X3Zpc2libGVRdWVyeVBhcmFtc1txcC5rZXldID0gcXAudmFsdWU7Ci0gICAgICB9Ci0gICAgfQot
ICAgIHJldHVybiBmaW5hbFF1ZXJ5UGFyYW1zOwotICB9Ci0KLSAgZnVuY3Rpb24gbm90aWZ5RXhp
c3RpbmdIYW5kbGVycyhyb3V0ZXIsIG5ld1N0YXRlLCBuZXdUcmFuc2l0aW9uKSB7Ci0gICAgdmFy
IG9sZEhhbmRsZXJzID0gcm91dGVyLnN0YXRlLmhhbmRsZXJJbmZvcywKLSAgICAgICAgY2hhbmdp
bmcgPSBbXSwKLSAgICAgICAgbGVhdmluZ0luZGV4ID0gbnVsbCwKLSAgICAgICAgbGVhdmluZywK
LSAgICAgICAgbGVhdmluZ0NoZWNrZXIsCi0gICAgICAgIGksCi0gICAgICAgIG9sZEhhbmRsZXJM
ZW4sCi0gICAgICAgIG9sZEhhbmRsZXIsCi0gICAgICAgIG5ld0hhbmRsZXI7Ci0KLSAgICBvbGRI
YW5kbGVyTGVuID0gb2xkSGFuZGxlcnMubGVuZ3RoOwotICAgIGZvciAoaSA9IDA7IGkgPCBvbGRI
YW5kbGVyTGVuOyBpKyspIHsKLSAgICAgIG9sZEhhbmRsZXIgPSBvbGRIYW5kbGVyc1tpXTsKLSAg
ICAgIG5ld0hhbmRsZXIgPSBuZXdTdGF0ZS5oYW5kbGVySW5mb3NbaV07Ci0KLSAgICAgIGlmICgh
bmV3SGFuZGxlciB8fCBvbGRIYW5kbGVyLm5hbWUgIT09IG5ld0hhbmRsZXIubmFtZSkgewotICAg
ICAgICBsZWF2aW5nSW5kZXggPSBpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAg
aWYgKCFuZXdIYW5kbGVyLmlzUmVzb2x2ZWQpIHsKLSAgICAgICAgY2hhbmdpbmcucHVzaChvbGRI
YW5kbGVyKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobGVhdmluZ0luZGV4ICE9PSBudWxs
KSB7Ci0gICAgICBsZWF2aW5nID0gb2xkSGFuZGxlcnMuc2xpY2UobGVhdmluZ0luZGV4LCBvbGRI
YW5kbGVyTGVuKTsKLSAgICAgIGxlYXZpbmdDaGVja2VyID0gZnVuY3Rpb24gKG5hbWUpIHsKLSAg
ICAgICAgZm9yICh2YXIgaCA9IDAsIGxlbiA9IGxlYXZpbmcubGVuZ3RoOyBoIDwgbGVuOyBoKysp
IHsKLSAgICAgICAgICBpZiAobGVhdmluZ1toXS5uYW1lID09PSBuYW1lKSB7Ci0gICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgfTsKLSAgICB9Ci0KLSAgICBfcm91dGVyVXRpbHMudHJpZ2dlcihyb3V0ZXIs
IG9sZEhhbmRsZXJzLCB0cnVlLCBbJ3dpbGxUcmFuc2l0aW9uJywgbmV3VHJhbnNpdGlvbl0pOwot
Ci0gICAgaWYgKHJvdXRlci53aWxsVHJhbnNpdGlvbikgewotICAgICAgcm91dGVyLndpbGxUcmFu
c2l0aW9uKG9sZEhhbmRsZXJzLCBuZXdTdGF0ZS5oYW5kbGVySW5mb3MsIG5ld1RyYW5zaXRpb24p
OwotICAgIH0KLSAgfQotCi0gIGV4cG9ydHMuZGVmYXVsdCA9IFJvdXRlcjsKLX0pOwotZW5pZmVk
KCdyb3V0ZXIvdHJhbnNpdGlvbi1pbnRlbnQnLCBbJ2V4cG9ydHMnLCAncm91dGVyL3V0aWxzJ10s
IGZ1bmN0aW9uIChleHBvcnRzLCBfcm91dGVyVXRpbHMpIHsKLSAgJ3VzZSBzdHJpY3QnOwotCi0g
IGZ1bmN0aW9uIFRyYW5zaXRpb25JbnRlbnQocHJvcHMpIHsKLSAgICB0aGlzLmluaXRpYWxpemUo
cHJvcHMpOwotCi0gICAgLy8gVE9ETzogd2F0Ci0gICAgdGhpcy5kYXRhID0gdGhpcy5kYXRhIHx8
IHt9OwotICB9Ci0KLSAgVHJhbnNpdGlvbkludGVudC5wcm90b3R5cGUgPSB7Ci0gICAgaW5pdGlh
bGl6ZTogbnVsbCwKLSAgICBhcHBseVRvU3RhdGU6IG51bGwKLSAgfTsKLQotICBleHBvcnRzLmRl
ZmF1bHQgPSBUcmFuc2l0aW9uSW50ZW50OwotfSk7Ci1lbmlmZWQoJ3JvdXRlci90cmFuc2l0aW9u
LWludGVudC9uYW1lZC10cmFuc2l0aW9uLWludGVudCcsIFsnZXhwb3J0cycsICdyb3V0ZXIvdHJh
bnNpdGlvbi1pbnRlbnQnLCAncm91dGVyL3RyYW5zaXRpb24tc3RhdGUnLCAncm91dGVyL2hhbmRs
ZXItaW5mby9mYWN0b3J5JywgJ3JvdXRlci91dGlscyddLCBmdW5jdGlvbiAoZXhwb3J0cywgX3Jv
dXRlclRyYW5zaXRpb25JbnRlbnQsIF9yb3V0ZXJUcmFuc2l0aW9uU3RhdGUsIF9yb3V0ZXJIYW5k
bGVySW5mb0ZhY3RvcnksIF9yb3V0ZXJVdGlscykgewotICAndXNlIHN0cmljdCc7Ci0KLSAgZXhw
b3J0cy5kZWZhdWx0ID0gX3JvdXRlclV0aWxzLnN1YmNsYXNzKF9yb3V0ZXJUcmFuc2l0aW9uSW50
ZW50LmRlZmF1bHQsIHsKLSAgICBuYW1lOiBudWxsLAotICAgIHBpdm90SGFuZGxlcjogbnVsbCwK
LSAgICBjb250ZXh0czogbnVsbCwKLSAgICBxdWVyeVBhcmFtczogbnVsbCwKLQotICAgIGluaXRp
YWxpemU6IGZ1bmN0aW9uIChwcm9wcykgewotICAgICAgdGhpcy5uYW1lID0gcHJvcHMubmFtZTsK
LSAgICAgIHRoaXMucGl2b3RIYW5kbGVyID0gcHJvcHMucGl2b3RIYW5kbGVyOwotICAgICAgdGhp
cy5jb250ZXh0cyA9IHByb3BzLmNvbnRleHRzIHx8IFtdOwotICAgICAgdGhpcy5xdWVyeVBhcmFt
cyA9IHByb3BzLnF1ZXJ5UGFyYW1zOwotICAgIH0sCi0KLSAgICBhcHBseVRvU3RhdGU6IGZ1bmN0
aW9uIChvbGRTdGF0ZSwgcmVjb2duaXplciwgZ2V0SGFuZGxlciwgaXNJbnRlcm1lZGlhdGUpIHsK
LQotICAgICAgdmFyIHBhcnRpdGlvbmVkQXJncyA9IF9yb3V0ZXJVdGlscy5leHRyYWN0UXVlcnlQ
YXJhbXMoW3RoaXMubmFtZV0uY29uY2F0KHRoaXMuY29udGV4dHMpKSwKLSAgICAgICAgICBwdXJl
QXJncyA9IHBhcnRpdGlvbmVkQXJnc1swXSwKLSAgICAgICAgICBxdWVyeVBhcmFtcyA9IHBhcnRp
dGlvbmVkQXJnc1sxXSwKLSAgICAgICAgICBoYW5kbGVycyA9IHJlY29nbml6ZXIuaGFuZGxlcnNG
b3IocHVyZUFyZ3NbMF0pOwotCi0gICAgICB2YXIgdGFyZ2V0Um91dGVOYW1lID0gaGFuZGxlcnNb
aGFuZGxlcnMubGVuZ3RoIC0gMV0uaGFuZGxlcjsKLQotICAgICAgcmV0dXJuIHRoaXMuYXBwbHlU
b0hhbmRsZXJzKG9sZFN0YXRlLCBoYW5kbGVycywgZ2V0SGFuZGxlciwgdGFyZ2V0Um91dGVOYW1l
LCBpc0ludGVybWVkaWF0ZSk7Ci0gICAgfSwKLQotICAgIGFwcGx5VG9IYW5kbGVyczogZnVuY3Rp
b24gKG9sZFN0YXRlLCBoYW5kbGVycywgZ2V0SGFuZGxlciwgdGFyZ2V0Um91dGVOYW1lLCBpc0lu
dGVybWVkaWF0ZSwgY2hlY2tpbmdJZkFjdGl2ZSkgewotCi0gICAgICB2YXIgaSwgbGVuOwotICAg
ICAgdmFyIG5ld1N0YXRlID0gbmV3IF9yb3V0ZXJUcmFuc2l0aW9uU3RhdGUuZGVmYXVsdCgpOwot
ICAgICAgdmFyIG9iamVjdHMgPSB0aGlzLmNvbnRleHRzLnNsaWNlKDApOwotCi0gICAgICB2YXIg
aW52YWxpZGF0ZUluZGV4ID0gaGFuZGxlcnMubGVuZ3RoOwotCi0gICAgICAvLyBQaXZvdCBoYW5k
bGVycyBhcmUgcHJvdmlkZWQgZm9yIHJlZnJlc2ggdHJhbnNpdGlvbnMKLSAgICAgIGlmICh0aGlz
LnBpdm90SGFuZGxlcikgewotICAgICAgICBmb3IgKGkgPSAwLCBsZW4gPSBoYW5kbGVycy5sZW5n
dGg7IGkgPCBsZW47ICsraSkgewotICAgICAgICAgIGlmIChnZXRIYW5kbGVyKGhhbmRsZXJzW2ld
LmhhbmRsZXIpID09PSB0aGlzLnBpdm90SGFuZGxlcikgewotICAgICAgICAgICAgaW52YWxpZGF0
ZUluZGV4ID0gaTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgfQotCi0gICAgICB2YXIgcGl2b3RIYW5kbGVyRm91bmQgPSAhdGhpcy5waXZvdEhhbmRs
ZXI7Ci0KLSAgICAgIGZvciAoaSA9IGhhbmRsZXJzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7
Ci0gICAgICAgIHZhciByZXN1bHQgPSBoYW5kbGVyc1tpXTsKLSAgICAgICAgdmFyIG5hbWUgPSBy
ZXN1bHQuaGFuZGxlcjsKLSAgICAgICAgdmFyIGhhbmRsZXIgPSBnZXRIYW5kbGVyKG5hbWUpOwot
Ci0gICAgICAgIHZhciBvbGRIYW5kbGVySW5mbyA9IG9sZFN0YXRlLmhhbmRsZXJJbmZvc1tpXTsK
LSAgICAgICAgdmFyIG5ld0hhbmRsZXJJbmZvID0gbnVsbDsKLQotICAgICAgICBpZiAocmVzdWx0
Lm5hbWVzLmxlbmd0aCA+IDApIHsKLSAgICAgICAgICBpZiAoaSA+PSBpbnZhbGlkYXRlSW5kZXgp
IHsKLSAgICAgICAgICAgIG5ld0hhbmRsZXJJbmZvID0gdGhpcy5jcmVhdGVQYXJhbUhhbmRsZXJJ
bmZvKG5hbWUsIGhhbmRsZXIsIHJlc3VsdC5uYW1lcywgb2JqZWN0cywgb2xkSGFuZGxlckluZm8p
OwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBuZXdIYW5kbGVySW5mbyA9IHRoaXMu
Z2V0SGFuZGxlckluZm9Gb3JEeW5hbWljU2VnbWVudChuYW1lLCBoYW5kbGVyLCByZXN1bHQubmFt
ZXMsIG9iamVjdHMsIG9sZEhhbmRsZXJJbmZvLCB0YXJnZXRSb3V0ZU5hbWUsIGkpOwotICAgICAg
ICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAvLyBUaGlzIHJvdXRlIGhhcyBubyBk
eW5hbWljIHNlZ21lbnQuCi0gICAgICAgICAgLy8gVGhlcmVmb3JlIHRyZWF0IGFzIGEgcGFyYW0t
YmFzZWQgaGFuZGxlckluZm8KLSAgICAgICAgICAvLyB3aXRoIGVtcHR5IHBhcmFtcy4gVGhpcyB3
aWxsIGNhdXNlIHRoZSBgbW9kZWxgCi0gICAgICAgICAgLy8gaG9vayB0byBiZSBjYWxsZWQgd2l0
aCBlbXB0eSBwYXJhbXMsIHdoaWNoIGlzIGRlc2lyYWJsZS4KLSAgICAgICAgICBuZXdIYW5kbGVy
SW5mbyA9IHRoaXMuY3JlYXRlUGFyYW1IYW5kbGVySW5mbyhuYW1lLCBoYW5kbGVyLCByZXN1bHQu
bmFtZXMsIG9iamVjdHMsIG9sZEhhbmRsZXJJbmZvKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlm
IChjaGVja2luZ0lmQWN0aXZlKSB7Ci0gICAgICAgICAgLy8gSWYgd2UncmUgcGVyZm9ybWluZyBh
biBpc0FjdGl2ZSBjaGVjaywgd2Ugd2FudCB0bwotICAgICAgICAgIC8vIHNlcmlhbGl6ZSBVUkwg
cGFyYW1zIHdpdGggdGhlIHByb3ZpZGVkIGNvbnRleHQsIGJ1dAotICAgICAgICAgIC8vIGlnbm9y
ZSBtaXNtYXRjaGVzIGJldHdlZW4gb2xkIGFuZCBuZXcgY29udGV4dC4KLSAgICAgICAgICBuZXdI
YW5kbGVySW5mbyA9IG5ld0hhbmRsZXJJbmZvLmJlY29tZVJlc29sdmVkKG51bGwsIG5ld0hhbmRs
ZXJJbmZvLmNvbnRleHQpOwotICAgICAgICAgIHZhciBvbGRDb250ZXh0ID0gb2xkSGFuZGxlcklu
Zm8gJiYgb2xkSGFuZGxlckluZm8uY29udGV4dDsKLSAgICAgICAgICBpZiAocmVzdWx0Lm5hbWVz
Lmxlbmd0aCA+IDAgJiYgbmV3SGFuZGxlckluZm8uY29udGV4dCA9PT0gb2xkQ29udGV4dCkgewot
ICAgICAgICAgICAgLy8gSWYgY29udGV4dHMgbWF0Y2ggaW4gaXNBY3RpdmUgdGVzdCwgYXNzdW1l
IHBhcmFtcyBhbHNvIG1hdGNoLgotICAgICAgICAgICAgLy8gVGhpcyBhbGxvd3MgZm9yIGZsZXhp
YmlsaXR5IGluIG5vdCByZXF1aXJpbmcgdGhhdCBldmVyeSBsYXN0Ci0gICAgICAgICAgICAvLyBo
YW5kbGVyIHByb3ZpZGUgYSBgc2VyaWFsaXplYCBtZXRob2QKLSAgICAgICAgICAgIG5ld0hhbmRs
ZXJJbmZvLnBhcmFtcyA9IG9sZEhhbmRsZXJJbmZvICYmIG9sZEhhbmRsZXJJbmZvLnBhcmFtczsK
LSAgICAgICAgICB9Ci0gICAgICAgICAgbmV3SGFuZGxlckluZm8uY29udGV4dCA9IG9sZENvbnRl
eHQ7Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgaGFuZGxlclRvVXNlID0gb2xkSGFuZGxlcklu
Zm87Ci0gICAgICAgIGlmIChpID49IGludmFsaWRhdGVJbmRleCB8fCBuZXdIYW5kbGVySW5mby5z
aG91bGRTdXBlcmNlZGUob2xkSGFuZGxlckluZm8pKSB7Ci0gICAgICAgICAgaW52YWxpZGF0ZUlu
ZGV4ID0gTWF0aC5taW4oaSwgaW52YWxpZGF0ZUluZGV4KTsKLSAgICAgICAgICBoYW5kbGVyVG9V
c2UgPSBuZXdIYW5kbGVySW5mbzsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChpc0ludGVybWVk
aWF0ZSAmJiAhY2hlY2tpbmdJZkFjdGl2ZSkgewotICAgICAgICAgIGhhbmRsZXJUb1VzZSA9IGhh
bmRsZXJUb1VzZS5iZWNvbWVSZXNvbHZlZChudWxsLCBoYW5kbGVyVG9Vc2UuY29udGV4dCk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBuZXdTdGF0ZS5oYW5kbGVySW5mb3MudW5zaGlmdChoYW5kbGVy
VG9Vc2UpOwotICAgICAgfQotCi0gICAgICBpZiAob2JqZWN0cy5sZW5ndGggPiAwKSB7Ci0gICAg
ICAgIHRocm93IG5ldyBFcnJvcigiTW9yZSBjb250ZXh0IG9iamVjdHMgd2VyZSBwYXNzZWQgdGhh
biB0aGVyZSBhcmUgZHluYW1pYyBzZWdtZW50cyBmb3IgdGhlIHJvdXRlOiAiICsgdGFyZ2V0Um91
dGVOYW1lKTsKLSAgICAgIH0KLQotICAgICAgaWYgKCFpc0ludGVybWVkaWF0ZSkgewotICAgICAg
ICB0aGlzLmludmFsaWRhdGVDaGlsZHJlbihuZXdTdGF0ZS5oYW5kbGVySW5mb3MsIGludmFsaWRh
dGVJbmRleCk7Ci0gICAgICB9Ci0KLSAgICAgIF9yb3V0ZXJVdGlscy5tZXJnZShuZXdTdGF0ZS5x
dWVyeVBhcmFtcywgdGhpcy5xdWVyeVBhcmFtcyB8fCB7fSk7Ci0KLSAgICAgIHJldHVybiBuZXdT
dGF0ZTsKLSAgICB9LAotCi0gICAgaW52YWxpZGF0ZUNoaWxkcmVuOiBmdW5jdGlvbiAoaGFuZGxl
ckluZm9zLCBpbnZhbGlkYXRlSW5kZXgpIHsKLSAgICAgIGZvciAodmFyIGkgPSBpbnZhbGlkYXRl
SW5kZXgsIGwgPSBoYW5kbGVySW5mb3MubGVuZ3RoOyBpIDwgbDsgKytpKSB7Ci0gICAgICAgIHZh
ciBoYW5kbGVySW5mbyA9IGhhbmRsZXJJbmZvc1tpXTsKLSAgICAgICAgaGFuZGxlckluZm9zW2ld
ID0gaGFuZGxlckluZm9zW2ldLmdldFVucmVzb2x2ZWQoKTsKLSAgICAgIH0KLSAgICB9LAotCi0g
ICAgZ2V0SGFuZGxlckluZm9Gb3JEeW5hbWljU2VnbWVudDogZnVuY3Rpb24gKG5hbWUsIGhhbmRs
ZXIsIG5hbWVzLCBvYmplY3RzLCBvbGRIYW5kbGVySW5mbywgdGFyZ2V0Um91dGVOYW1lLCBpKSB7
Ci0KLSAgICAgIHZhciBudW1OYW1lcyA9IG5hbWVzLmxlbmd0aDsKLSAgICAgIHZhciBvYmplY3RU
b1VzZTsKLSAgICAgIGlmIChvYmplY3RzLmxlbmd0aCA+IDApIHsKLQotICAgICAgICAvLyBVc2Ug
dGhlIG9iamVjdHMgcHJvdmlkZWQgZm9yIHRoaXMgdHJhbnNpdGlvbi4KLSAgICAgICAgb2JqZWN0
VG9Vc2UgPSBvYmplY3RzW29iamVjdHMubGVuZ3RoIC0gMV07Ci0gICAgICAgIGlmIChfcm91dGVy
VXRpbHMuaXNQYXJhbShvYmplY3RUb1VzZSkpIHsKLSAgICAgICAgICByZXR1cm4gdGhpcy5jcmVh
dGVQYXJhbUhhbmRsZXJJbmZvKG5hbWUsIGhhbmRsZXIsIG5hbWVzLCBvYmplY3RzLCBvbGRIYW5k
bGVySW5mbyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgb2JqZWN0cy5wb3AoKTsKLSAg
ICAgICAgfQotICAgICAgfSBlbHNlIGlmIChvbGRIYW5kbGVySW5mbyAmJiBvbGRIYW5kbGVySW5m
by5uYW1lID09PSBuYW1lKSB7Ci0gICAgICAgIC8vIFJldXNlIHRoZSBtYXRjaGluZyBvbGRIYW5k
bGVySW5mbwotICAgICAgICByZXR1cm4gb2xkSGFuZGxlckluZm87Ci0gICAgICB9IGVsc2Ugewot
ICAgICAgICBpZiAodGhpcy5wcmVUcmFuc2l0aW9uU3RhdGUpIHsKLSAgICAgICAgICB2YXIgcHJl
VHJhbnNpdGlvbkhhbmRsZXJJbmZvID0gdGhpcy5wcmVUcmFuc2l0aW9uU3RhdGUuaGFuZGxlcklu
Zm9zW2ldOwotICAgICAgICAgIG9iamVjdFRvVXNlID0gcHJlVHJhbnNpdGlvbkhhbmRsZXJJbmZv
ICYmIHByZVRyYW5zaXRpb25IYW5kbGVySW5mby5jb250ZXh0OwotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgIC8vIElkZWFsbHkgd2Ugc2hvdWxkIHRocm93IHRoaXMgZXJyb3IgdG8gcHJvdmlk
ZSBtYXhpbWFsCi0gICAgICAgICAgLy8gaW5mb3JtYXRpb24gdG8gdGhlIHVzZXIgdGhhdCBub3Qg
ZW5vdWdoIGNvbnRleHQgb2JqZWN0cwotICAgICAgICAgIC8vIHdlcmUgcHJvdmlkZWQsIGJ1dCB0
aGlzIHByb3ZlcyB0b28gY3VtYmVyc29tZSBpbiBFbWJlcgotICAgICAgICAgIC8vIGluIGNhc2Vz
IHdoZXJlIGlubmVyIHRlbXBsYXRlIGhlbHBlcnMgYXJlIGV2YWx1YXRlZAotICAgICAgICAgIC8v
IGJlZm9yZSBwYXJlbnQgaGVscGVycyB1bi1yZW5kZXIsIGluIHdoaWNoIGNhc2VzIHRoaXMKLSAg
ICAgICAgICAvLyBlcnJvciBzb21ld2hhdCBwcmVtYXR1cmVseSBmaXJlcy4KLSAgICAgICAgICAv
L3Rocm93IG5ldyBFcnJvcigiTm90IGVub3VnaCBjb250ZXh0IG9iamVjdHMgd2VyZSBwcm92aWRl
ZCB0byBjb21wbGV0ZSBhIHRyYW5zaXRpb24gdG8gIiArIHRhcmdldFJvdXRlTmFtZSArICIuIFNw
ZWNpZmljYWxseSwgdGhlICIgKyBuYW1lICsgIiByb3V0ZSBuZWVkcyBhbiBvYmplY3QgdGhhdCBj
YW4gYmUgc2VyaWFsaXplZCBpbnRvIGl0cyBkeW5hbWljIFVSTCBzZWdtZW50cyBbIiArIG5hbWVz
LmpvaW4oJywgJykgKyAiXSIpOwotICAgICAgICAgIHJldHVybiBvbGRIYW5kbGVySW5mbzsKLSAg
ICAgICAgfQotICAgICAgfQotCi0gICAgICByZXR1cm4gX3JvdXRlckhhbmRsZXJJbmZvRmFjdG9y
eS5kZWZhdWx0KCdvYmplY3QnLCB7Ci0gICAgICAgIG5hbWU6IG5hbWUsCi0gICAgICAgIGhhbmRs
ZXI6IGhhbmRsZXIsCi0gICAgICAgIGNvbnRleHQ6IG9iamVjdFRvVXNlLAotICAgICAgICBuYW1l
czogbmFtZXMKLSAgICAgIH0pOwotICAgIH0sCi0KLSAgICBjcmVhdGVQYXJhbUhhbmRsZXJJbmZv
OiBmdW5jdGlvbiAobmFtZSwgaGFuZGxlciwgbmFtZXMsIG9iamVjdHMsIG9sZEhhbmRsZXJJbmZv
KSB7Ci0gICAgICB2YXIgcGFyYW1zID0ge307Ci0KLSAgICAgIC8vIFNvYWsgdXAgYWxsIHRoZSBw
cm92aWRlZCBzdHJpbmcvbnVtYmVycwotICAgICAgdmFyIG51bU5hbWVzID0gbmFtZXMubGVuZ3Ro
OwotICAgICAgd2hpbGUgKG51bU5hbWVzLS0pIHsKLQotICAgICAgICAvLyBPbmx5IHVzZSBvbGQg
cGFyYW1zIGlmIHRoZSBuYW1lcyBtYXRjaCB3aXRoIHRoZSBuZXcgaGFuZGxlcgotICAgICAgICB2
YXIgb2xkUGFyYW1zID0gb2xkSGFuZGxlckluZm8gJiYgbmFtZSA9PT0gb2xkSGFuZGxlckluZm8u
bmFtZSAmJiBvbGRIYW5kbGVySW5mby5wYXJhbXMgfHwge307Ci0KLSAgICAgICAgdmFyIHBlZWsg
PSBvYmplY3RzW29iamVjdHMubGVuZ3RoIC0gMV07Ci0gICAgICAgIHZhciBwYXJhbU5hbWUgPSBu
YW1lc1tudW1OYW1lc107Ci0gICAgICAgIGlmIChfcm91dGVyVXRpbHMuaXNQYXJhbShwZWVrKSkg
ewotICAgICAgICAgIHBhcmFtc1twYXJhbU5hbWVdID0gIiIgKyBvYmplY3RzLnBvcCgpOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgIC8vIElmIHdlJ3JlIGhlcmUsIHRoaXMgbWVhbnMgb25s
eSBzb21lIG9mIHRoZSBwYXJhbXMKLSAgICAgICAgICAvLyB3ZXJlIHN0cmluZy9udW1iZXIgcGFy
YW1zLCBzbyB0cnkgYW5kIHVzZSBhIHBhcmFtCi0gICAgICAgICAgLy8gdmFsdWUgZnJvbSBhIHBy
ZXZpb3VzIGhhbmRsZXIuCi0gICAgICAgICAgaWYgKG9sZFBhcmFtcy5oYXNPd25Qcm9wZXJ0eShw
YXJhbU5hbWUpKSB7Ci0gICAgICAgICAgICBwYXJhbXNbcGFyYW1OYW1lXSA9IG9sZFBhcmFtc1tw
YXJhbU5hbWVdOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgRXJy
b3IoIllvdSBkaWRuJ3QgcHJvdmlkZSBlbm91Z2ggc3RyaW5nL251bWVyaWMgcGFyYW1ldGVycyB0
byBzYXRpc2Z5IGFsbCBvZiB0aGUgZHluYW1pYyBzZWdtZW50cyBmb3Igcm91dGUgIiArIG5hbWUp
OwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICByZXR1cm4gX3JvdXRl
ckhhbmRsZXJJbmZvRmFjdG9yeS5kZWZhdWx0KCdwYXJhbScsIHsKLSAgICAgICAgbmFtZTogbmFt
ZSwKLSAgICAgICAgaGFuZGxlcjogaGFuZGxlciwKLSAgICAgICAgcGFyYW1zOiBwYXJhbXMKLSAg
ICAgIH0pOwotICAgIH0KLSAgfSk7Ci19KTsKLWVuaWZlZCgncm91dGVyL3RyYW5zaXRpb24taW50
ZW50L3VybC10cmFuc2l0aW9uLWludGVudCcsIFsnZXhwb3J0cycsICdyb3V0ZXIvdHJhbnNpdGlv
bi1pbnRlbnQnLCAncm91dGVyL3RyYW5zaXRpb24tc3RhdGUnLCAncm91dGVyL2hhbmRsZXItaW5m
by9mYWN0b3J5JywgJ3JvdXRlci91dGlscycsICdyb3V0ZXIvdW5yZWNvZ25pemVkLXVybC1lcnJv
ciddLCBmdW5jdGlvbiAoZXhwb3J0cywgX3JvdXRlclRyYW5zaXRpb25JbnRlbnQsIF9yb3V0ZXJU
cmFuc2l0aW9uU3RhdGUsIF9yb3V0ZXJIYW5kbGVySW5mb0ZhY3RvcnksIF9yb3V0ZXJVdGlscywg
X3JvdXRlclVucmVjb2duaXplZFVybEVycm9yKSB7Ci0gICd1c2Ugc3RyaWN0JzsKLQotICBleHBv
cnRzLmRlZmF1bHQgPSBfcm91dGVyVXRpbHMuc3ViY2xhc3MoX3JvdXRlclRyYW5zaXRpb25JbnRl
bnQuZGVmYXVsdCwgewotICAgIHVybDogbnVsbCwKLQotICAgIGluaXRpYWxpemU6IGZ1bmN0aW9u
IChwcm9wcykgewotICAgICAgdGhpcy51cmwgPSBwcm9wcy51cmw7Ci0gICAgfSwKLQotICAgIGFw
cGx5VG9TdGF0ZTogZnVuY3Rpb24gKG9sZFN0YXRlLCByZWNvZ25pemVyLCBnZXRIYW5kbGVyKSB7
Ci0gICAgICB2YXIgbmV3U3RhdGUgPSBuZXcgX3JvdXRlclRyYW5zaXRpb25TdGF0ZS5kZWZhdWx0
KCk7Ci0KLSAgICAgIHZhciByZXN1bHRzID0gcmVjb2duaXplci5yZWNvZ25pemUodGhpcy51cmwp
LAotICAgICAgICAgIHF1ZXJ5UGFyYW1zID0ge30sCi0gICAgICAgICAgaSwKLSAgICAgICAgICBs
ZW47Ci0KLSAgICAgIGlmICghcmVzdWx0cykgewotICAgICAgICB0aHJvdyBuZXcgX3JvdXRlclVu
cmVjb2duaXplZFVybEVycm9yLmRlZmF1bHQodGhpcy51cmwpOwotICAgICAgfQotCi0gICAgICB2
YXIgc3RhdGVzRGlmZmVyID0gZmFsc2U7Ci0KLSAgICAgIGZvciAoaSA9IDAsIGxlbiA9IHJlc3Vs
dHMubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHsKLSAgICAgICAgdmFyIHJlc3VsdCA9IHJlc3VsdHNb
aV07Ci0gICAgICAgIHZhciBuYW1lID0gcmVzdWx0LmhhbmRsZXI7Ci0gICAgICAgIHZhciBoYW5k
bGVyID0gZ2V0SGFuZGxlcihuYW1lKTsKLQotICAgICAgICBpZiAoaGFuZGxlci5pbmFjY2Vzc2li
bGVCeVVSTCkgewotICAgICAgICAgIHRocm93IG5ldyBfcm91dGVyVW5yZWNvZ25pemVkVXJsRXJy
b3IuZGVmYXVsdCh0aGlzLnVybCk7Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgbmV3SGFuZGxl
ckluZm8gPSBfcm91dGVySGFuZGxlckluZm9GYWN0b3J5LmRlZmF1bHQoJ3BhcmFtJywgewotICAg
ICAgICAgIG5hbWU6IG5hbWUsCi0gICAgICAgICAgaGFuZGxlcjogaGFuZGxlciwKLSAgICAgICAg
ICBwYXJhbXM6IHJlc3VsdC5wYXJhbXMKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgdmFyIG9sZEhh
bmRsZXJJbmZvID0gb2xkU3RhdGUuaGFuZGxlckluZm9zW2ldOwotICAgICAgICBpZiAoc3RhdGVz
RGlmZmVyIHx8IG5ld0hhbmRsZXJJbmZvLnNob3VsZFN1cGVyY2VkZShvbGRIYW5kbGVySW5mbykp
IHsKLSAgICAgICAgICBzdGF0ZXNEaWZmZXIgPSB0cnVlOwotICAgICAgICAgIG5ld1N0YXRlLmhh
bmRsZXJJbmZvc1tpXSA9IG5ld0hhbmRsZXJJbmZvOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgIG5ld1N0YXRlLmhhbmRsZXJJbmZvc1tpXSA9IG9sZEhhbmRsZXJJbmZvOwotICAgICAgICB9
Ci0gICAgICB9Ci0KLSAgICAgIF9yb3V0ZXJVdGlscy5tZXJnZShuZXdTdGF0ZS5xdWVyeVBhcmFt
cywgcmVzdWx0cy5xdWVyeVBhcmFtcyk7Ci0KLSAgICAgIHJldHVybiBuZXdTdGF0ZTsKLSAgICB9
Ci0gIH0pOwotfSk7Ci1lbmlmZWQoJ3JvdXRlci90cmFuc2l0aW9uLXN0YXRlJywgWydleHBvcnRz
JywgJ3JvdXRlci9oYW5kbGVyLWluZm8nLCAncm91dGVyL3V0aWxzJywgJ3JzdnAvcHJvbWlzZSdd
LCBmdW5jdGlvbiAoZXhwb3J0cywgX3JvdXRlckhhbmRsZXJJbmZvLCBfcm91dGVyVXRpbHMsIF9y
c3ZwUHJvbWlzZSkgewotICAndXNlIHN0cmljdCc7Ci0KLSAgZnVuY3Rpb24gVHJhbnNpdGlvblN0
YXRlKG90aGVyKSB7Ci0gICAgdGhpcy5oYW5kbGVySW5mb3MgPSBbXTsKLSAgICB0aGlzLnF1ZXJ5
UGFyYW1zID0ge307Ci0gICAgdGhpcy5wYXJhbXMgPSB7fTsKLSAgfQotCi0gIFRyYW5zaXRpb25T
dGF0ZS5wcm90b3R5cGUgPSB7Ci0gICAgaGFuZGxlckluZm9zOiBudWxsLAotICAgIHF1ZXJ5UGFy
YW1zOiBudWxsLAotICAgIHBhcmFtczogbnVsbCwKLQotICAgIHByb21pc2VMYWJlbDogZnVuY3Rp
b24gKGxhYmVsKSB7Ci0gICAgICB2YXIgdGFyZ2V0TmFtZSA9ICcnOwotICAgICAgX3JvdXRlclV0
aWxzLmZvckVhY2godGhpcy5oYW5kbGVySW5mb3MsIGZ1bmN0aW9uIChoYW5kbGVySW5mbykgewot
ICAgICAgICBpZiAodGFyZ2V0TmFtZSAhPT0gJycpIHsKLSAgICAgICAgICB0YXJnZXROYW1lICs9
ICcuJzsKLSAgICAgICAgfQotICAgICAgICB0YXJnZXROYW1lICs9IGhhbmRsZXJJbmZvLm5hbWU7
Ci0gICAgICB9KTsKLSAgICAgIHJldHVybiBfcm91dGVyVXRpbHMucHJvbWlzZUxhYmVsKCInIiAr
IHRhcmdldE5hbWUgKyAiJzogIiArIGxhYmVsKTsKLSAgICB9LAotCi0gICAgcmVzb2x2ZTogZnVu
Y3Rpb24gKHNob3VsZENvbnRpbnVlLCBwYXlsb2FkKSB7Ci0gICAgICB2YXIgc2VsZiA9IHRoaXM7
Ci0gICAgICAvLyBGaXJzdCwgY2FsY3VsYXRlIHBhcmFtcyBmb3IgdGhpcyBzdGF0ZS4gVGhpcyBp
cyB1c2VmdWwKLSAgICAgIC8vIGluZm9ybWF0aW9uIHRvIHByb3ZpZGUgdG8gdGhlIHZhcmlvdXMg
cm91dGUgaG9va3MuCi0gICAgICB2YXIgcGFyYW1zID0gdGhpcy5wYXJhbXM7Ci0gICAgICBfcm91
dGVyVXRpbHMuZm9yRWFjaCh0aGlzLmhhbmRsZXJJbmZvcywgZnVuY3Rpb24gKGhhbmRsZXJJbmZv
KSB7Ci0gICAgICAgIHBhcmFtc1toYW5kbGVySW5mby5uYW1lXSA9IGhhbmRsZXJJbmZvLnBhcmFt
cyB8fCB7fTsKLSAgICAgIH0pOwotCi0gICAgICBwYXlsb2FkID0gcGF5bG9hZCB8fCB7fTsKLSAg
ICAgIHBheWxvYWQucmVzb2x2ZUluZGV4ID0gMDsKLQotICAgICAgdmFyIGN1cnJlbnRTdGF0ZSA9
IHRoaXM7Ci0gICAgICB2YXIgd2FzQWJvcnRlZCA9IGZhbHNlOwotCi0gICAgICAvLyBUaGUgcHJl
bHVkZSBSU1ZQLnJlc29sdmUoKSBhc3luY3MgdXMgaW50byB0aGUgcHJvbWlzZSBsYW5kLgotICAg
ICAgcmV0dXJuIF9yc3ZwUHJvbWlzZS5kZWZhdWx0LnJlc29sdmUobnVsbCwgdGhpcy5wcm9taXNl
TGFiZWwoIlN0YXJ0IHRyYW5zaXRpb24iKSkudGhlbihyZXNvbHZlT25lSGFuZGxlckluZm8sIG51
bGwsIHRoaXMucHJvbWlzZUxhYmVsKCdSZXNvbHZlIGhhbmRsZXInKSlbJ2NhdGNoJ10oaGFuZGxl
RXJyb3IsIHRoaXMucHJvbWlzZUxhYmVsKCdIYW5kbGUgZXJyb3InKSk7Ci0KLSAgICAgIGZ1bmN0
aW9uIGlubmVyU2hvdWxkQ29udGludWUoKSB7Ci0gICAgICAgIHJldHVybiBfcnN2cFByb21pc2Uu
ZGVmYXVsdC5yZXNvbHZlKHNob3VsZENvbnRpbnVlKCksIGN1cnJlbnRTdGF0ZS5wcm9taXNlTGFi
ZWwoIkNoZWNrIGlmIHNob3VsZCBjb250aW51ZSIpKVsnY2F0Y2gnXShmdW5jdGlvbiAocmVhc29u
KSB7Ci0gICAgICAgICAgLy8gV2UgZGlzdGluZ3Vpc2ggYmV0d2VlbiBlcnJvcnMgdGhhdCBvY2N1
cnJlZAotICAgICAgICAgIC8vIGR1cmluZyByZXNvbHV0aW9uIChlLmcuIGJlZm9yZU1vZGVsL21v
ZGVsL2FmdGVyTW9kZWwpLAotICAgICAgICAgIC8vIGFuZCBhYm9ydHMgZHVlIHRvIGEgcmVqZWN0
aW5nIHByb21pc2UgZnJvbSBzaG91bGRDb250aW51ZSgpLgotICAgICAgICAgIHdhc0Fib3J0ZWQg
PSB0cnVlOwotICAgICAgICAgIHJldHVybiBfcnN2cFByb21pc2UuZGVmYXVsdC5yZWplY3QocmVh
c29uKTsKLSAgICAgICAgfSwgY3VycmVudFN0YXRlLnByb21pc2VMYWJlbCgiSGFuZGxlIGFib3J0
IikpOwotICAgICAgfQotCi0gICAgICBmdW5jdGlvbiBoYW5kbGVFcnJvcihlcnJvcikgewotICAg
ICAgICAvLyBUaGlzIGlzIHRoZSBvbmx5IHBvc3NpYmxlCi0gICAgICAgIC8vIHJlamVjdCB2YWx1
ZSBvZiBUcmFuc2l0aW9uU3RhdGUjcmVzb2x2ZQotICAgICAgICB2YXIgaGFuZGxlckluZm9zID0g
Y3VycmVudFN0YXRlLmhhbmRsZXJJbmZvczsKLSAgICAgICAgdmFyIGVycm9ySGFuZGxlckluZGV4
ID0gcGF5bG9hZC5yZXNvbHZlSW5kZXggPj0gaGFuZGxlckluZm9zLmxlbmd0aCA/IGhhbmRsZXJJ
bmZvcy5sZW5ndGggLSAxIDogcGF5bG9hZC5yZXNvbHZlSW5kZXg7Ci0gICAgICAgIHJldHVybiBf
cnN2cFByb21pc2UuZGVmYXVsdC5yZWplY3QoewotICAgICAgICAgIGVycm9yOiBlcnJvciwKLSAg
ICAgICAgICBoYW5kbGVyV2l0aEVycm9yOiBjdXJyZW50U3RhdGUuaGFuZGxlckluZm9zW2Vycm9y
SGFuZGxlckluZGV4XS5oYW5kbGVyLAotICAgICAgICAgIHdhc0Fib3J0ZWQ6IHdhc0Fib3J0ZWQs
Ci0gICAgICAgICAgc3RhdGU6IGN1cnJlbnRTdGF0ZQotICAgICAgICB9KTsKLSAgICAgIH0KLQot
ICAgICAgZnVuY3Rpb24gcHJvY2VlZChyZXNvbHZlZEhhbmRsZXJJbmZvKSB7Ci0gICAgICAgIHZh
ciB3YXNBbHJlYWR5UmVzb2x2ZWQgPSBjdXJyZW50U3RhdGUuaGFuZGxlckluZm9zW3BheWxvYWQu
cmVzb2x2ZUluZGV4XS5pc1Jlc29sdmVkOwotCi0gICAgICAgIC8vIFN3YXAgdGhlIHByZXZpb3Vz
bHkgdW5yZXNvbHZlZCBoYW5kbGVySW5mbyB3aXRoCi0gICAgICAgIC8vIHRoZSByZXNvbHZlZCBo
YW5kbGVySW5mbwotICAgICAgICBjdXJyZW50U3RhdGUuaGFuZGxlckluZm9zW3BheWxvYWQucmVz
b2x2ZUluZGV4KytdID0gcmVzb2x2ZWRIYW5kbGVySW5mbzsKLQotICAgICAgICBpZiAoIXdhc0Fs
cmVhZHlSZXNvbHZlZCkgewotICAgICAgICAgIC8vIENhbGwgdGhlIHJlZGlyZWN0IGhvb2suIFRo
ZSByZWFzb24gd2UgY2FsbCBpdCBoZXJlCi0gICAgICAgICAgLy8gdnMuIGFmdGVyTW9kZWwgaXMg
c28gdGhhdCByZWRpcmVjdHMgaW50byBjaGlsZAotICAgICAgICAgIC8vIHJvdXRlcyBkb24ndCBy
ZS1ydW4gdGhlIG1vZGVsIGhvb2tzIGZvciB0aGlzCi0gICAgICAgICAgLy8gYWxyZWFkeS1yZXNv
bHZlZCByb3V0ZS4KLSAgICAgICAgICB2YXIgaGFuZGxlciA9IHJlc29sdmVkSGFuZGxlckluZm8u
aGFuZGxlcjsKLSAgICAgICAgICBfcm91dGVyVXRpbHMuY2FsbEhvb2soaGFuZGxlciwgJ3JlZGly
ZWN0JywgcmVzb2x2ZWRIYW5kbGVySW5mby5jb250ZXh0LCBwYXlsb2FkKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIC8vIFByb2NlZWQgYWZ0ZXIgZW5zdXJpbmcgdGhhdCB0aGUgcmVkaXJlY3QgaG9v
awotICAgICAgICAvLyBkaWRuJ3QgYWJvcnQgdGhpcyB0cmFuc2l0aW9uIGJ5IHRyYW5zaXRpb25p
bmcgZWxzZXdoZXJlLgotICAgICAgICByZXR1cm4gaW5uZXJTaG91bGRDb250aW51ZSgpLnRoZW4o
cmVzb2x2ZU9uZUhhbmRsZXJJbmZvLCBudWxsLCBjdXJyZW50U3RhdGUucHJvbWlzZUxhYmVsKCdS
ZXNvbHZlIGhhbmRsZXInKSk7Ci0gICAgICB9Ci0KLSAgICAgIGZ1bmN0aW9uIHJlc29sdmVPbmVI
YW5kbGVySW5mbygpIHsKLSAgICAgICAgaWYgKHBheWxvYWQucmVzb2x2ZUluZGV4ID09PSBjdXJy
ZW50U3RhdGUuaGFuZGxlckluZm9zLmxlbmd0aCkgewotICAgICAgICAgIC8vIFRoaXMgaXMgaXMg
dGhlIG9ubHkgcG9zc2libGUKLSAgICAgICAgICAvLyBmdWxmaWxsIHZhbHVlIG9mIFRyYW5zaXRp
b25TdGF0ZSNyZXNvbHZlCi0gICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgIGVycm9yOiBu
dWxsLAotICAgICAgICAgICAgc3RhdGU6IGN1cnJlbnRTdGF0ZQotICAgICAgICAgIH07Ci0gICAg
ICAgIH0KLQotICAgICAgICB2YXIgaGFuZGxlckluZm8gPSBjdXJyZW50U3RhdGUuaGFuZGxlcklu
Zm9zW3BheWxvYWQucmVzb2x2ZUluZGV4XTsKLQotICAgICAgICByZXR1cm4gaGFuZGxlckluZm8u
cmVzb2x2ZShpbm5lclNob3VsZENvbnRpbnVlLCBwYXlsb2FkKS50aGVuKHByb2NlZWQsIG51bGws
IGN1cnJlbnRTdGF0ZS5wcm9taXNlTGFiZWwoJ1Byb2NlZWQnKSk7Ci0gICAgICB9Ci0gICAgfQot
ICB9OwotCi0gIGV4cG9ydHMuZGVmYXVsdCA9IFRyYW5zaXRpb25TdGF0ZTsKLX0pOwotZW5pZmVk
KCdyb3V0ZXIvdHJhbnNpdGlvbicsIFsnZXhwb3J0cycsICdyc3ZwL3Byb21pc2UnLCAncm91dGVy
L2hhbmRsZXItaW5mbycsICdyb3V0ZXIvdXRpbHMnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9yc3Zw
UHJvbWlzZSwgX3JvdXRlckhhbmRsZXJJbmZvLCBfcm91dGVyVXRpbHMpIHsKLSAgJ3VzZSBzdHJp
Y3QnOwotCi0gIC8qKgotICAgIEEgVHJhbnNpdGlvbiBpcyBhIHRoZW5uYWJsZSAoYSBwcm9taXNl
LWxpa2Ugb2JqZWN0KSB0aGF0IHJlcHJlc2VudHMKLSAgICBhbiBhdHRlbXB0IHRvIHRyYW5zaXRp
b24gdG8gYW5vdGhlciByb3V0ZS4gSXQgY2FuIGJlIGFib3J0ZWQsIGVpdGhlcgotICAgIGV4cGxp
Y2l0bHkgdmlhIGBhYm9ydGAgb3IgYnkgYXR0ZW1wdGluZyBhbm90aGVyIHRyYW5zaXRpb24gd2hp
bGUgYQotICAgIHByZXZpb3VzIG9uZSBpcyBzdGlsbCB1bmRlcndheS4gQW4gYWJvcnRlZCB0cmFu
c2l0aW9uIGNhbiBhbHNvCi0gICAgYmUgYHJldHJ5KClgZCBsYXRlci4KLSAgCi0gICAgQGNsYXNz
IFRyYW5zaXRpb24KLSAgICBAY29uc3RydWN0b3IKLSAgICBAcGFyYW0ge09iamVjdH0gcm91dGVy
Ci0gICAgQHBhcmFtIHtPYmplY3R9IGludGVudAotICAgIEBwYXJhbSB7T2JqZWN0fSBzdGF0ZQot
ICAgIEBwYXJhbSB7T2JqZWN0fSBlcnJvcgotICAgIEBwcml2YXRlCi0gICAqLwotICBmdW5jdGlv
biBUcmFuc2l0aW9uKHJvdXRlciwgaW50ZW50LCBzdGF0ZSwgZXJyb3IpIHsKLSAgICB2YXIgdHJh
bnNpdGlvbiA9IHRoaXM7Ci0gICAgdGhpcy5zdGF0ZSA9IHN0YXRlIHx8IHJvdXRlci5zdGF0ZTsK
LSAgICB0aGlzLmludGVudCA9IGludGVudDsKLSAgICB0aGlzLnJvdXRlciA9IHJvdXRlcjsKLSAg
ICB0aGlzLmRhdGEgPSB0aGlzLmludGVudCAmJiB0aGlzLmludGVudC5kYXRhIHx8IHt9OwotICAg
IHRoaXMucmVzb2x2ZWRNb2RlbHMgPSB7fTsKLSAgICB0aGlzLnF1ZXJ5UGFyYW1zID0ge307Ci0K
LSAgICBpZiAoZXJyb3IpIHsKLSAgICAgIHRoaXMucHJvbWlzZSA9IF9yc3ZwUHJvbWlzZS5kZWZh
dWx0LnJlamVjdChlcnJvcik7Ci0gICAgICB0aGlzLmVycm9yID0gZXJyb3I7Ci0gICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlKSB7Ci0gICAgICB0aGlzLnBhcmFtcyA9IHN0YXRl
LnBhcmFtczsKLSAgICAgIHRoaXMucXVlcnlQYXJhbXMgPSBzdGF0ZS5xdWVyeVBhcmFtczsKLSAg
ICAgIHRoaXMuaGFuZGxlckluZm9zID0gc3RhdGUuaGFuZGxlckluZm9zOwotCi0gICAgICB2YXIg
bGVuID0gc3RhdGUuaGFuZGxlckluZm9zLmxlbmd0aDsKLSAgICAgIGlmIChsZW4pIHsKLSAgICAg
ICAgdGhpcy50YXJnZXROYW1lID0gc3RhdGUuaGFuZGxlckluZm9zW2xlbiAtIDFdLm5hbWU7Ci0g
ICAgICB9Ci0KLSAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKLSAgICAgICAg
dmFyIGhhbmRsZXJJbmZvID0gc3RhdGUuaGFuZGxlckluZm9zW2ldOwotCi0gICAgICAgIC8vIFRP
RE86IHRoaXMgYWxsIHNlZW1zIGhhY2t5Ci0gICAgICAgIGlmICghaGFuZGxlckluZm8uaXNSZXNv
bHZlZCkgewotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMucGl2b3RI
YW5kbGVyID0gaGFuZGxlckluZm8uaGFuZGxlcjsKLSAgICAgIH0KLQotICAgICAgdGhpcy5zZXF1
ZW5jZSA9IFRyYW5zaXRpb24uY3VycmVudFNlcXVlbmNlKys7Ci0gICAgICB0aGlzLnByb21pc2Ug
PSBzdGF0ZS5yZXNvbHZlKGNoZWNrRm9yQWJvcnQsIHRoaXMpWydjYXRjaCddKGZ1bmN0aW9uIChy
ZXN1bHQpIHsKLSAgICAgICAgaWYgKHJlc3VsdC53YXNBYm9ydGVkIHx8IHRyYW5zaXRpb24uaXNB
Ym9ydGVkKSB7Ci0gICAgICAgICAgcmV0dXJuIF9yc3ZwUHJvbWlzZS5kZWZhdWx0LnJlamVjdChs
b2dBYm9ydCh0cmFuc2l0aW9uKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgdHJhbnNp
dGlvbi50cmlnZ2VyKCdlcnJvcicsIHJlc3VsdC5lcnJvciwgdHJhbnNpdGlvbiwgcmVzdWx0Lmhh
bmRsZXJXaXRoRXJyb3IpOwotICAgICAgICAgIHRyYW5zaXRpb24uYWJvcnQoKTsKLSAgICAgICAg
ICByZXR1cm4gX3JzdnBQcm9taXNlLmRlZmF1bHQucmVqZWN0KHJlc3VsdC5lcnJvcik7Ci0gICAg
ICAgIH0KLSAgICAgIH0sIF9yb3V0ZXJVdGlscy5wcm9taXNlTGFiZWwoJ0hhbmRsZSBBYm9ydCcp
KTsKLSAgICB9IGVsc2UgewotICAgICAgdGhpcy5wcm9taXNlID0gX3JzdnBQcm9taXNlLmRlZmF1
bHQucmVzb2x2ZSh0aGlzLnN0YXRlKTsKLSAgICAgIHRoaXMucGFyYW1zID0ge307Ci0gICAgfQot
Ci0gICAgZnVuY3Rpb24gY2hlY2tGb3JBYm9ydCgpIHsKLSAgICAgIGlmICh0cmFuc2l0aW9uLmlz
QWJvcnRlZCkgewotICAgICAgICByZXR1cm4gX3JzdnBQcm9taXNlLmRlZmF1bHQucmVqZWN0KHVu
ZGVmaW5lZCwgX3JvdXRlclV0aWxzLnByb21pc2VMYWJlbCgiVHJhbnNpdGlvbiBhYm9ydGVkIC0g
cmVqZWN0IikpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIFRyYW5zaXRpb24uY3VycmVudFNl
cXVlbmNlID0gMDsKLQotICBUcmFuc2l0aW9uLnByb3RvdHlwZSA9IHsKLSAgICB0YXJnZXROYW1l
OiBudWxsLAotICAgIHVybE1ldGhvZDogJ3VwZGF0ZScsCi0gICAgaW50ZW50OiBudWxsLAotICAg
IHBhcmFtczogbnVsbCwKLSAgICBwaXZvdEhhbmRsZXI6IG51bGwsCi0gICAgcmVzb2x2ZUluZGV4
OiAwLAotICAgIGhhbmRsZXJJbmZvczogbnVsbCwKLSAgICByZXNvbHZlZE1vZGVsczogbnVsbCwK
LSAgICBpc0FjdGl2ZTogdHJ1ZSwKLSAgICBzdGF0ZTogbnVsbCwKLSAgICBxdWVyeVBhcmFtc09u
bHk6IGZhbHNlLAotCi0gICAgaXNUcmFuc2l0aW9uOiB0cnVlLAotCi0gICAgaXNFeGl0aW5nOiBm
dW5jdGlvbiAoaGFuZGxlcikgewotICAgICAgdmFyIGhhbmRsZXJJbmZvcyA9IHRoaXMuaGFuZGxl
ckluZm9zOwotICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGhhbmRsZXJJbmZvcy5sZW5ndGg7
IGkgPCBsZW47ICsraSkgewotICAgICAgICB2YXIgaGFuZGxlckluZm8gPSBoYW5kbGVySW5mb3Nb
aV07Ci0gICAgICAgIGlmIChoYW5kbGVySW5mby5uYW1lID09PSBoYW5kbGVyIHx8IGhhbmRsZXJJ
bmZvLmhhbmRsZXIgPT09IGhhbmRsZXIpIHsKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIH0KLSAgICAgIH0KLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0sCi0KLSAgICAvKioKLSAg
ICAgIFRoZSBUcmFuc2l0aW9uJ3MgaW50ZXJuYWwgcHJvbWlzZS4gQ2FsbGluZyBgLnRoZW5gIG9u
IHRoaXMgcHJvcGVydHkKLSAgICAgIGlzIHRoYXQgc2FtZSBhcyBjYWxsaW5nIGAudGhlbmAgb24g
dGhlIFRyYW5zaXRpb24gb2JqZWN0IGl0c2VsZiwgYnV0Ci0gICAgICB0aGlzIHByb3BlcnR5IGlz
IGV4cG9zZWQgZm9yIHdoZW4geW91IHdhbnQgdG8gcGFzcyBhcm91bmQgYQotICAgICAgVHJhbnNp
dGlvbidzIHByb21pc2UsIGJ1dCBub3QgdGhlIFRyYW5zaXRpb24gb2JqZWN0IGl0c2VsZiwgc2lu
Y2UKLSAgICAgIFRyYW5zaXRpb24gb2JqZWN0IGNhbiBiZSBleHRlcm5hbGx5IGBhYm9ydGBlZCwg
d2hpbGUgdGhlIHByb21pc2UKLSAgICAgIGNhbm5vdC4KLSAgICAgICBAcHJvcGVydHkgcHJvbWlz
ZQotICAgICAgQHR5cGUge09iamVjdH0KLSAgICAgIEBwdWJsaWMKLSAgICAgKi8KLSAgICBwcm9t
aXNlOiBudWxsLAotCi0gICAgLyoqCi0gICAgICBDdXN0b20gc3RhdGUgY2FuIGJlIHN0b3JlZCBv
biBhIFRyYW5zaXRpb24ncyBgZGF0YWAgb2JqZWN0LgotICAgICAgVGhpcyBjYW4gYmUgdXNlZnVs
IGZvciBkZWNvcmF0aW5nIGEgVHJhbnNpdGlvbiB3aXRoaW4gYW4gZWFybGllcgotICAgICAgaG9v
ayBhbmQgc2hhcmVkIHdpdGggYSBsYXRlciBob29rLiBQcm9wZXJ0aWVzIHNldCBvbiBgZGF0YWAg
d2lsbAotICAgICAgYmUgY29waWVkIHRvIG5ldyB0cmFuc2l0aW9ucyBnZW5lcmF0ZWQgYnkgY2Fs
bGluZyBgcmV0cnlgIG9uIHRoaXMKLSAgICAgIHRyYW5zaXRpb24uCi0gICAgIAotICAgICAgQHBy
b3BlcnR5IGRhdGEKLSAgICAgIEB0eXBlIHtPYmplY3R9Ci0gICAgICBAcHVibGljCi0gICAgICov
Ci0gICAgZGF0YTogbnVsbCwKLQotICAgIC8qKgotICAgICAgQSBzdGFuZGFyZCBwcm9taXNlIGhv
b2sgdGhhdCByZXNvbHZlcyBpZiB0aGUgdHJhbnNpdGlvbgotICAgICAgc3VjY2VlZHMgYW5kIHJl
amVjdHMgaWYgaXQgZmFpbHMvcmVkaXJlY3RzL2Fib3J0cy4KLSAgICAgICBGb3J3YXJkcyB0byB0
aGUgaW50ZXJuYWwgYHByb21pc2VgIHByb3BlcnR5IHdoaWNoIHlvdSBjYW4KLSAgICAgIHVzZSBp
biBzaXR1YXRpb25zIHdoZXJlIHlvdSB3YW50IHRvIHBhc3MgYXJvdW5kIGEgdGhlbm5hYmxlLAot
ICAgICAgYnV0IG5vdCB0aGUgVHJhbnNpdGlvbiBpdHNlbGYuCi0gICAgICAgQG1ldGhvZCB0aGVu
Ci0gICAgICBAcGFyYW0ge0Z1bmN0aW9ufSBvbkZ1bGZpbGxlZAotICAgICAgQHBhcmFtIHtGdW5j
dGlvbn0gb25SZWplY3RlZAotICAgICAgQHBhcmFtIHtTdHJpbmd9IGxhYmVsIG9wdGlvbmFsIHN0
cmluZyBmb3IgbGFiZWxpbmcgdGhlIHByb21pc2UuCi0gICAgICBVc2VmdWwgZm9yIHRvb2xpbmcu
Ci0gICAgICBAcmV0dXJuIHtQcm9taXNlfQotICAgICAgQHB1YmxpYwotICAgICAqLwotICAgIHRo
ZW46IGZ1bmN0aW9uIChvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCwgbGFiZWwpIHsKLSAgICAgIHJl
dHVybiB0aGlzLnByb21pc2UudGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCwgbGFiZWwpOwot
ICAgIH0sCi0KLSAgICAvKioKLSAgICAgICBGb3J3YXJkcyB0byB0aGUgaW50ZXJuYWwgYHByb21p
c2VgIHByb3BlcnR5IHdoaWNoIHlvdSBjYW4KLSAgICAgIHVzZSBpbiBzaXR1YXRpb25zIHdoZXJl
IHlvdSB3YW50IHRvIHBhc3MgYXJvdW5kIGEgdGhlbm5hYmxlLAotICAgICAgYnV0IG5vdCB0aGUg
VHJhbnNpdGlvbiBpdHNlbGYuCi0gICAgICAgQG1ldGhvZCBjYXRjaAotICAgICAgQHBhcmFtIHtG
dW5jdGlvbn0gb25SZWplY3Rpb24KLSAgICAgIEBwYXJhbSB7U3RyaW5nfSBsYWJlbCBvcHRpb25h
bCBzdHJpbmcgZm9yIGxhYmVsaW5nIHRoZSBwcm9taXNlLgotICAgICAgVXNlZnVsIGZvciB0b29s
aW5nLgotICAgICAgQHJldHVybiB7UHJvbWlzZX0KLSAgICAgIEBwdWJsaWMKLSAgICAgKi8KLSAg
ICBjYXRjaDogZnVuY3Rpb24gKG9uUmVqZWN0aW9uLCBsYWJlbCkgewotICAgICAgcmV0dXJuIHRo
aXMucHJvbWlzZS5jYXRjaChvblJlamVjdGlvbiwgbGFiZWwpOwotICAgIH0sCi0KLSAgICAvKioK
LSAgICAgICBGb3J3YXJkcyB0byB0aGUgaW50ZXJuYWwgYHByb21pc2VgIHByb3BlcnR5IHdoaWNo
IHlvdSBjYW4KLSAgICAgIHVzZSBpbiBzaXR1YXRpb25zIHdoZXJlIHlvdSB3YW50IHRvIHBhc3Mg
YXJvdW5kIGEgdGhlbm5hYmxlLAotICAgICAgYnV0IG5vdCB0aGUgVHJhbnNpdGlvbiBpdHNlbGYu
Ci0gICAgICAgQG1ldGhvZCBmaW5hbGx5Ci0gICAgICBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFj
awotICAgICAgQHBhcmFtIHtTdHJpbmd9IGxhYmVsIG9wdGlvbmFsIHN0cmluZyBmb3IgbGFiZWxp
bmcgdGhlIHByb21pc2UuCi0gICAgICBVc2VmdWwgZm9yIHRvb2xpbmcuCi0gICAgICBAcmV0dXJu
IHtQcm9taXNlfQotICAgICAgQHB1YmxpYwotICAgICAqLwotICAgIGZpbmFsbHk6IGZ1bmN0aW9u
IChjYWxsYmFjaywgbGFiZWwpIHsKLSAgICAgIHJldHVybiB0aGlzLnByb21pc2UuZmluYWxseShj
YWxsYmFjaywgbGFiZWwpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgIEFib3J0cyB0aGUgVHJh
bnNpdGlvbi4gTm90ZSB5b3UgY2FuIGFsc28gaW1wbGljaXRseSBhYm9ydCBhIHRyYW5zaXRpb24K
LSAgICAgIGJ5IGluaXRpYXRpbmcgYW5vdGhlciB0cmFuc2l0aW9uIHdoaWxlIGEgcHJldmlvdXMg
b25lIGlzIHVuZGVyd2F5LgotICAgICAgIEBtZXRob2QgYWJvcnQKLSAgICAgIEByZXR1cm4ge1Ry
YW5zaXRpb259IHRoaXMgdHJhbnNpdGlvbgotICAgICAgQHB1YmxpYwotICAgICAqLwotICAgIGFi
b3J0OiBmdW5jdGlvbiAoKSB7Ci0gICAgICBpZiAodGhpcy5pc0Fib3J0ZWQpIHsKLSAgICAgICAg
cmV0dXJuIHRoaXM7Ci0gICAgICB9Ci0gICAgICBfcm91dGVyVXRpbHMubG9nKHRoaXMucm91dGVy
LCB0aGlzLnNlcXVlbmNlLCB0aGlzLnRhcmdldE5hbWUgKyAiOiB0cmFuc2l0aW9uIHdhcyBhYm9y
dGVkIik7Ci0gICAgICB0aGlzLmludGVudC5wcmVUcmFuc2l0aW9uU3RhdGUgPSB0aGlzLnJvdXRl
ci5zdGF0ZTsKLSAgICAgIHRoaXMuaXNBYm9ydGVkID0gdHJ1ZTsKLSAgICAgIHRoaXMuaXNBY3Rp
dmUgPSBmYWxzZTsKLSAgICAgIHRoaXMucm91dGVyLmFjdGl2ZVRyYW5zaXRpb24gPSBudWxsOwot
ICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAgIFJldHJpZXMgYSBw
cmV2aW91c2x5LWFib3J0ZWQgdHJhbnNpdGlvbiAobWFraW5nIHN1cmUgdG8gYWJvcnQgdGhlCi0g
ICAgICB0cmFuc2l0aW9uIGlmIGl0J3Mgc3RpbGwgYWN0aXZlKS4gUmV0dXJucyBhIG5ldyB0cmFu
c2l0aW9uIHRoYXQKLSAgICAgIHJlcHJlc2VudHMgdGhlIG5ldyBhdHRlbXB0IHRvIHRyYW5zaXRp
b24uCi0gICAgICAgQG1ldGhvZCByZXRyeQotICAgICAgQHJldHVybiB7VHJhbnNpdGlvbn0gbmV3
IHRyYW5zaXRpb24KLSAgICAgIEBwdWJsaWMKLSAgICAgKi8KLSAgICByZXRyeTogZnVuY3Rpb24g
KCkgewotICAgICAgLy8gVE9ETzogYWRkIHRlc3RzIGZvciBtZXJnZWQgc3RhdGUgcmV0cnkoKXMK
LSAgICAgIHRoaXMuYWJvcnQoKTsKLSAgICAgIHJldHVybiB0aGlzLnJvdXRlci50cmFuc2l0aW9u
QnlJbnRlbnQodGhpcy5pbnRlbnQsIGZhbHNlKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICAg
U2V0cyB0aGUgVVJMLWNoYW5naW5nIG1ldGhvZCB0byBiZSBlbXBsb3llZCBhdCB0aGUgZW5kIG9m
IGEKLSAgICAgIHN1Y2Nlc3NmdWwgdHJhbnNpdGlvbi4gQnkgZGVmYXVsdCwgYSBuZXcgVHJhbnNp
dGlvbiB3aWxsIGp1c3QKLSAgICAgIHVzZSBgdXBkYXRlVVJMYCwgYnV0IHBhc3NpbmcgJ3JlcGxh
Y2UnIHRvIHRoaXMgbWV0aG9kIHdpbGwKLSAgICAgIGNhdXNlIHRoZSBVUkwgdG8gdXBkYXRlIHVz
aW5nICdyZXBsYWNlV2l0aCcgaW5zdGVhZC4gT21pdHRpbmcKLSAgICAgIGEgcGFyYW1ldGVyIHdp
bGwgZGlzYWJsZSB0aGUgVVJMIGNoYW5nZSwgYWxsb3dpbmcgZm9yIHRyYW5zaXRpb25zCi0gICAg
ICB0aGF0IGRvbid0IHVwZGF0ZSB0aGUgVVJMIGF0IGNvbXBsZXRpb24gKHRoaXMgaXMgYWxzbyB1
c2VkIGZvcgotICAgICAgaGFuZGxlVVJMLCBzaW5jZSB0aGUgVVJMIGhhcyBhbHJlYWR5IGNoYW5n
ZWQgYmVmb3JlIHRoZQotICAgICAgdHJhbnNpdGlvbiB0b29rIHBsYWNlKS4KLSAgICAgICBAbWV0
aG9kIG1ldGhvZAotICAgICAgQHBhcmFtIHtTdHJpbmd9IG1ldGhvZCB0aGUgdHlwZSBvZiBVUkwt
Y2hhbmdpbmcgbWV0aG9kIHRvIHVzZQotICAgICAgICBhdCB0aGUgZW5kIG9mIGEgdHJhbnNpdGlv
bi4gQWNjZXB0ZWQgdmFsdWVzIGFyZSAncmVwbGFjZScsCi0gICAgICAgIGZhbHN5IHZhbHVlcywg
b3IgYW55IG90aGVyIG5vbi1mYWxzeSB2YWx1ZSAod2hpY2ggaXMKLSAgICAgICAgaW50ZXJwcmV0
ZWQgYXMgYW4gdXBkYXRlVVJMIHRyYW5zaXRpb24pLgotICAgICAgIEByZXR1cm4ge1RyYW5zaXRp
b259IHRoaXMgdHJhbnNpdGlvbgotICAgICAgQHB1YmxpYwotICAgICAqLwotICAgIG1ldGhvZDog
ZnVuY3Rpb24gKG1ldGhvZCkgewotICAgICAgdGhpcy51cmxNZXRob2QgPSBtZXRob2Q7Ci0gICAg
ICByZXR1cm4gdGhpczsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICAgRmlyZXMgYW4gZXZlbnQg
b24gdGhlIGN1cnJlbnQgbGlzdCBvZiByZXNvbHZlZC9yZXNvbHZpbmcKLSAgICAgIGhhbmRsZXJz
IHdpdGhpbiB0aGlzIHRyYW5zaXRpb24uIFVzZWZ1bCBmb3IgZmlyaW5nIGV2ZW50cwotICAgICAg
b24gcm91dGUgaGllcmFyY2hpZXMgdGhhdCBoYXZlbid0IGZ1bGx5IGJlZW4gZW50ZXJlZCB5ZXQu
Ci0gICAgICAgTm90ZTogVGhpcyBtZXRob2QgaXMgYWxzbyBhbGlhc2VkIGFzIGBzZW5kYAotICAg
ICAgIEBtZXRob2QgdHJpZ2dlcgotICAgICAgQHBhcmFtIHtCb29sZWFufSBbaWdub3JlRmFpbHVy
ZT1mYWxzZV0gYSBib29sZWFuIHNwZWNpZnlpbmcgd2hldGhlciB1bmhhbmRsZWQgZXZlbnRzIHRo
cm93IGFuIGVycm9yCi0gICAgICBAcGFyYW0ge1N0cmluZ30gbmFtZSB0aGUgbmFtZSBvZiB0aGUg
ZXZlbnQgdG8gZmlyZQotICAgICAgQHB1YmxpYwotICAgICAqLwotICAgIHRyaWdnZXI6IGZ1bmN0
aW9uIChpZ25vcmVGYWlsdXJlKSB7Ci0gICAgICB2YXIgYXJncyA9IF9yb3V0ZXJVdGlscy5zbGlj
ZS5jYWxsKGFyZ3VtZW50cyk7Ci0gICAgICBpZiAodHlwZW9mIGlnbm9yZUZhaWx1cmUgPT09ICdi
b29sZWFuJykgewotICAgICAgICBhcmdzLnNoaWZ0KCk7Ci0gICAgICB9IGVsc2UgewotICAgICAg
ICAvLyBUaHJvdyBlcnJvcnMgb24gdW5oYW5kbGVkIHRyaWdnZXIgZXZlbnRzIGJ5IGRlZmF1bHQK
LSAgICAgICAgaWdub3JlRmFpbHVyZSA9IGZhbHNlOwotICAgICAgfQotICAgICAgX3JvdXRlclV0
aWxzLnRyaWdnZXIodGhpcy5yb3V0ZXIsIHRoaXMuc3RhdGUuaGFuZGxlckluZm9zLnNsaWNlKDAs
IHRoaXMucmVzb2x2ZUluZGV4ICsgMSksIGlnbm9yZUZhaWx1cmUsIGFyZ3MpOwotICAgIH0sCi0K
LSAgICAvKioKLSAgICAgIFRyYW5zaXRpb25zIGFyZSBhYm9ydGVkIGFuZCB0aGVpciBwcm9taXNl
cyByZWplY3RlZAotICAgICAgd2hlbiByZWRpcmVjdHMgb2NjdXI7IHRoaXMgbWV0aG9kIHJldHVy
bnMgYSBwcm9taXNlCi0gICAgICB0aGF0IHdpbGwgZm9sbG93IGFueSByZWRpcmVjdHMgdGhhdCBv
Y2N1ciBhbmQgZnVsZmlsbAotICAgICAgd2l0aCB0aGUgdmFsdWUgZnVsZmlsbGVkIGJ5IGFueSBy
ZWRpcmVjdGluZyB0cmFuc2l0aW9ucwotICAgICAgdGhhdCBvY2N1ci4KLSAgICAgICBAbWV0aG9k
IGZvbGxvd1JlZGlyZWN0cwotICAgICAgQHJldHVybiB7UHJvbWlzZX0gYSBwcm9taXNlIHRoYXQg
ZnVsZmlsbHMgd2l0aCB0aGUgc2FtZQotICAgICAgICB2YWx1ZSB0aGF0IHRoZSBmaW5hbCByZWRp
cmVjdGluZyB0cmFuc2l0aW9uIGZ1bGZpbGxzIHdpdGgKLSAgICAgIEBwdWJsaWMKLSAgICAgKi8K
LSAgICBmb2xsb3dSZWRpcmVjdHM6IGZ1bmN0aW9uICgpIHsKLSAgICAgIHZhciByb3V0ZXIgPSB0
aGlzLnJvdXRlcjsKLSAgICAgIHJldHVybiB0aGlzLnByb21pc2VbJ2NhdGNoJ10oZnVuY3Rpb24g
KHJlYXNvbikgewotICAgICAgICBpZiAocm91dGVyLmFjdGl2ZVRyYW5zaXRpb24pIHsKLSAgICAg
ICAgICByZXR1cm4gcm91dGVyLmFjdGl2ZVRyYW5zaXRpb24uZm9sbG93UmVkaXJlY3RzKCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuIF9yc3ZwUHJvbWlzZS5kZWZhdWx0LnJlamVjdChyZWFz
b24pOwotICAgICAgfSk7Ci0gICAgfSwKLQotICAgIHRvU3RyaW5nOiBmdW5jdGlvbiAoKSB7Ci0g
ICAgICByZXR1cm4gIlRyYW5zaXRpb24gKHNlcXVlbmNlICIgKyB0aGlzLnNlcXVlbmNlICsgIiki
OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgIEBwcml2YXRlCi0gICAgICovCi0gICAgbG9nOiBm
dW5jdGlvbiAobWVzc2FnZSkgewotICAgICAgX3JvdXRlclV0aWxzLmxvZyh0aGlzLnJvdXRlciwg
dGhpcy5zZXF1ZW5jZSwgbWVzc2FnZSk7Ci0gICAgfQotICB9OwotCi0gIC8vIEFsaWFzICd0cmln
Z2VyJyBhcyAnc2VuZCcKLSAgVHJhbnNpdGlvbi5wcm90b3R5cGUuc2VuZCA9IFRyYW5zaXRpb24u
cHJvdG90eXBlLnRyaWdnZXI7Ci0KLSAgLyoqCi0gICAgQHByaXZhdGUKLSAgCi0gICAgTG9ncyBh
bmQgcmV0dXJucyBhIFRyYW5zaXRpb25BYm9ydGVkIGVycm9yLgotICAgKi8KLSAgZnVuY3Rpb24g
bG9nQWJvcnQodHJhbnNpdGlvbikgewotICAgIF9yb3V0ZXJVdGlscy5sb2codHJhbnNpdGlvbi5y
b3V0ZXIsIHRyYW5zaXRpb24uc2VxdWVuY2UsICJkZXRlY3RlZCBhYm9ydC4iKTsKLSAgICByZXR1
cm4gbmV3IFRyYW5zaXRpb25BYm9ydGVkKCk7Ci0gIH0KLQotICBmdW5jdGlvbiBUcmFuc2l0aW9u
QWJvcnRlZChtZXNzYWdlKSB7Ci0gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAiVHJhbnNp
dGlvbkFib3J0ZWQiOwotICAgIHRoaXMubmFtZSA9ICJUcmFuc2l0aW9uQWJvcnRlZCI7Ci0gIH0K
LQotICBleHBvcnRzLlRyYW5zaXRpb24gPSBUcmFuc2l0aW9uOwotICBleHBvcnRzLmxvZ0Fib3J0
ID0gbG9nQWJvcnQ7Ci0gIGV4cG9ydHMuVHJhbnNpdGlvbkFib3J0ZWQgPSBUcmFuc2l0aW9uQWJv
cnRlZDsKLX0pOwotZW5pZmVkKCJyb3V0ZXIvdW5yZWNvZ25pemVkLXVybC1lcnJvciIsIFsiZXhw
b3J0cyIsICJyb3V0ZXIvdXRpbHMiXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9yb3V0ZXJVdGlscykg
ewotICAidXNlIHN0cmljdCI7Ci0KLSAgLyoqCi0gICAgUHJvbWlzZSByZWplY3QgcmVhc29ucyBw
YXNzZWQgdG8gcHJvbWlzZSByZWplY3Rpb24KLSAgICBoYW5kbGVycyBmb3IgZmFpbGVkIHRyYW5z
aXRpb25zLgotICAgKi8KLSAgZnVuY3Rpb24gVW5yZWNvZ25pemVkVVJMRXJyb3IobWVzc2FnZSkg
ewotICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgIlVucmVjb2duaXplZFVSTEVycm9yIjsK
LSAgICB0aGlzLm5hbWUgPSAiVW5yZWNvZ25pemVkVVJMRXJyb3IiOwotICAgIEVycm9yLmNhbGwo
dGhpcyk7Ci0gIH0KLQotICBVbnJlY29nbml6ZWRVUkxFcnJvci5wcm90b3R5cGUgPSBfcm91dGVy
VXRpbHMub0NyZWF0ZShFcnJvci5wcm90b3R5cGUpOwotCi0gIGV4cG9ydHMuZGVmYXVsdCA9IFVu
cmVjb2duaXplZFVSTEVycm9yOwotfSk7Ci1lbmlmZWQoJ3JvdXRlci91dGlscycsIFsnZXhwb3J0
cyddLCBmdW5jdGlvbiAoZXhwb3J0cykgewotICAndXNlIHN0cmljdCc7Ci0KLSAgZXhwb3J0cy5l
eHRyYWN0UXVlcnlQYXJhbXMgPSBleHRyYWN0UXVlcnlQYXJhbXM7Ci0gIGV4cG9ydHMubG9nID0g
bG9nOwotICBleHBvcnRzLmJpbmQgPSBiaW5kOwotICBleHBvcnRzLmZvckVhY2ggPSBmb3JFYWNo
OwotICBleHBvcnRzLnRyaWdnZXIgPSB0cmlnZ2VyOwotICBleHBvcnRzLmdldENoYW5nZWxpc3Qg
PSBnZXRDaGFuZ2VsaXN0OwotICBleHBvcnRzLnByb21pc2VMYWJlbCA9IHByb21pc2VMYWJlbDsK
LSAgZXhwb3J0cy5zdWJjbGFzcyA9IHN1YmNsYXNzOwotICB2YXIgc2xpY2UgPSBBcnJheS5wcm90
b3R5cGUuc2xpY2U7Ci0KLSAgdmFyIF9pc0FycmF5OwotICBpZiAoIUFycmF5LmlzQXJyYXkpIHsK
LSAgICBfaXNBcnJheSA9IGZ1bmN0aW9uICh4KSB7Ci0gICAgICByZXR1cm4gT2JqZWN0LnByb3Rv
dHlwZS50b1N0cmluZy5jYWxsKHgpID09PSAiW29iamVjdCBBcnJheV0iOwotICAgIH07Ci0gIH0g
ZWxzZSB7Ci0gICAgX2lzQXJyYXkgPSBBcnJheS5pc0FycmF5OwotICB9Ci0KLSAgdmFyIGlzQXJy
YXkgPSBfaXNBcnJheTsKLQotICBleHBvcnRzLmlzQXJyYXkgPSBpc0FycmF5OwotICBmdW5jdGlv
biBtZXJnZShoYXNoLCBvdGhlcikgewotICAgIGZvciAodmFyIHByb3AgaW4gb3RoZXIpIHsKLSAg
ICAgIGlmIChvdGhlci5oYXNPd25Qcm9wZXJ0eShwcm9wKSkgewotICAgICAgICBoYXNoW3Byb3Bd
ID0gb3RoZXJbcHJvcF07Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgdmFyIG9DcmVhdGUgPSBP
YmplY3QuY3JlYXRlIHx8IGZ1bmN0aW9uIChwcm90bykgewotICAgIGZ1bmN0aW9uIEYoKSB7fQot
ICAgIEYucHJvdG90eXBlID0gcHJvdG87Ci0gICAgcmV0dXJuIG5ldyBGKCk7Ci0gIH07Ci0KLSAg
ZXhwb3J0cy5vQ3JlYXRlID0gb0NyZWF0ZTsKLSAgLyoqCi0gICAgQHByaXZhdGUKLSAgCi0gICAg
RXh0cmFjdHMgcXVlcnkgcGFyYW1zIGZyb20gdGhlIGVuZCBvZiBhbiBhcnJheQotICAqKi8KLQot
ICBmdW5jdGlvbiBleHRyYWN0UXVlcnlQYXJhbXMoYXJyYXkpIHsKLSAgICB2YXIgbGVuID0gYXJy
YXkgJiYgYXJyYXkubGVuZ3RoLAotICAgICAgICBoZWFkLAotICAgICAgICBxdWVyeVBhcmFtczsK
LQotICAgIGlmIChsZW4gJiYgbGVuID4gMCAmJiBhcnJheVtsZW4gLSAxXSAmJiBhcnJheVtsZW4g
LSAxXS5oYXNPd25Qcm9wZXJ0eSgncXVlcnlQYXJhbXMnKSkgewotICAgICAgcXVlcnlQYXJhbXMg
PSBhcnJheVtsZW4gLSAxXS5xdWVyeVBhcmFtczsKLSAgICAgIGhlYWQgPSBzbGljZS5jYWxsKGFy
cmF5LCAwLCBsZW4gLSAxKTsKLSAgICAgIHJldHVybiBbaGVhZCwgcXVlcnlQYXJhbXNdOwotICAg
IH0gZWxzZSB7Ci0gICAgICByZXR1cm4gW2FycmF5LCBudWxsXTsKLSAgICB9Ci0gIH0KLQotICAv
KioKLSAgICBAcHJpdmF0ZQotICAKLSAgICBDb2VyY2VzIHF1ZXJ5IHBhcmFtIHByb3BlcnRpZXMg
YW5kIGFycmF5IGVsZW1lbnRzIGludG8gc3RyaW5ncy4KLSAgKiovCi0gIGZ1bmN0aW9uIGNvZXJj
ZVF1ZXJ5UGFyYW1zVG9TdHJpbmcocXVlcnlQYXJhbXMpIHsKLSAgICBmb3IgKHZhciBrZXkgaW4g
cXVlcnlQYXJhbXMpIHsKLSAgICAgIGlmICh0eXBlb2YgcXVlcnlQYXJhbXNba2V5XSA9PT0gJ251
bWJlcicpIHsKLSAgICAgICAgcXVlcnlQYXJhbXNba2V5XSA9ICcnICsgcXVlcnlQYXJhbXNba2V5
XTsKLSAgICAgIH0gZWxzZSBpZiAoaXNBcnJheShxdWVyeVBhcmFtc1trZXldKSkgewotICAgICAg
ICBmb3IgKHZhciBpID0gMCwgbCA9IHF1ZXJ5UGFyYW1zW2tleV0ubGVuZ3RoOyBpIDwgbDsgaSsr
KSB7Ci0gICAgICAgICAgcXVlcnlQYXJhbXNba2V5XVtpXSA9ICcnICsgcXVlcnlQYXJhbXNba2V5
XVtpXTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotICAvKioKLSAgICBAcHJpdmF0
ZQotICAgKi8KLQotICBmdW5jdGlvbiBsb2cocm91dGVyLCBzZXF1ZW5jZSwgbXNnKSB7Ci0gICAg
aWYgKCFyb3V0ZXIubG9nKSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGFyZ3Vt
ZW50cy5sZW5ndGggPT09IDMpIHsKLSAgICAgIHJvdXRlci5sb2coIlRyYW5zaXRpb24gIyIgKyBz
ZXF1ZW5jZSArICI6ICIgKyBtc2cpOwotICAgIH0gZWxzZSB7Ci0gICAgICBtc2cgPSBzZXF1ZW5j
ZTsKLSAgICAgIHJvdXRlci5sb2cobXNnKTsKLSAgICB9Ci0gIH0KLQotICBmdW5jdGlvbiBiaW5k
KGNvbnRleHQsIGZuKSB7Ci0gICAgdmFyIGJvdW5kQXJncyA9IGFyZ3VtZW50czsKLSAgICByZXR1
cm4gZnVuY3Rpb24gKHZhbHVlKSB7Ci0gICAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYm91bmRB
cmdzLCAyKTsKLSAgICAgIGFyZ3MucHVzaCh2YWx1ZSk7Ci0gICAgICByZXR1cm4gZm4uYXBwbHko
Y29udGV4dCwgYXJncyk7Ci0gICAgfTsKLSAgfQotCi0gIGZ1bmN0aW9uIGlzUGFyYW0ob2JqZWN0
KSB7Ci0gICAgcmV0dXJuIHR5cGVvZiBvYmplY3QgPT09ICJzdHJpbmciIHx8IG9iamVjdCBpbnN0
YW5jZW9mIFN0cmluZyB8fCB0eXBlb2Ygb2JqZWN0ID09PSAibnVtYmVyIiB8fCBvYmplY3QgaW5z
dGFuY2VvZiBOdW1iZXI7Ci0gIH0KLQotICBmdW5jdGlvbiBmb3JFYWNoKGFycmF5LCBjYWxsYmFj
aykgewotICAgIGZvciAodmFyIGkgPSAwLCBsID0gYXJyYXkubGVuZ3RoOyBpIDwgbCAmJiBmYWxz
ZSAhPT0gY2FsbGJhY2soYXJyYXlbaV0pOyBpKyspIHt9Ci0gIH0KLQotICBmdW5jdGlvbiB0cmln
Z2VyKHJvdXRlciwgaGFuZGxlckluZm9zLCBpZ25vcmVGYWlsdXJlLCBhcmdzKSB7Ci0gICAgaWYg
KHJvdXRlci50cmlnZ2VyRXZlbnQpIHsKLSAgICAgIHJvdXRlci50cmlnZ2VyRXZlbnQoaGFuZGxl
ckluZm9zLCBpZ25vcmVGYWlsdXJlLCBhcmdzKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICB2YXIgbmFtZSA9IGFyZ3Muc2hpZnQoKTsKLQotICAgIGlmICghaGFuZGxlckluZm9zKSB7Ci0g
ICAgICBpZiAoaWdub3JlRmFpbHVyZSkgewotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAg
ICB0aHJvdyBuZXcgRXJyb3IoIkNvdWxkIG5vdCB0cmlnZ2VyIGV2ZW50ICciICsgbmFtZSArICIn
LiBUaGVyZSBhcmUgbm8gYWN0aXZlIGhhbmRsZXJzIik7Ci0gICAgfQotCi0gICAgdmFyIGV2ZW50
V2FzSGFuZGxlZCA9IGZhbHNlOwotCi0gICAgZm9yICh2YXIgaSA9IGhhbmRsZXJJbmZvcy5sZW5n
dGggLSAxOyBpID49IDA7IGktLSkgewotICAgICAgdmFyIGhhbmRsZXJJbmZvID0gaGFuZGxlcklu
Zm9zW2ldLAotICAgICAgICAgIGhhbmRsZXIgPSBoYW5kbGVySW5mby5oYW5kbGVyOwotCi0gICAg
ICBpZiAoaGFuZGxlci5ldmVudHMgJiYgaGFuZGxlci5ldmVudHNbbmFtZV0pIHsKLSAgICAgICAg
aWYgKGhhbmRsZXIuZXZlbnRzW25hbWVdLmFwcGx5KGhhbmRsZXIsIGFyZ3MpID09PSB0cnVlKSB7
Ci0gICAgICAgICAgZXZlbnRXYXNIYW5kbGVkID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIWV2
ZW50V2FzSGFuZGxlZCAmJiAhaWdub3JlRmFpbHVyZSkgewotICAgICAgdGhyb3cgbmV3IEVycm9y
KCJOb3RoaW5nIGhhbmRsZWQgdGhlIGV2ZW50ICciICsgbmFtZSArICInLiIpOwotICAgIH0KLSAg
fQotCi0gIGZ1bmN0aW9uIGdldENoYW5nZWxpc3Qob2xkT2JqZWN0LCBuZXdPYmplY3QpIHsKLSAg
ICB2YXIga2V5OwotICAgIHZhciByZXN1bHRzID0gewotICAgICAgYWxsOiB7fSwKLSAgICAgIGNo
YW5nZWQ6IHt9LAotICAgICAgcmVtb3ZlZDoge30KLSAgICB9OwotCi0gICAgbWVyZ2UocmVzdWx0
cy5hbGwsIG5ld09iamVjdCk7Ci0KLSAgICB2YXIgZGlkQ2hhbmdlID0gZmFsc2U7Ci0gICAgY29l
cmNlUXVlcnlQYXJhbXNUb1N0cmluZyhvbGRPYmplY3QpOwotICAgIGNvZXJjZVF1ZXJ5UGFyYW1z
VG9TdHJpbmcobmV3T2JqZWN0KTsKLQotICAgIC8vIENhbGN1bGF0ZSByZW1vdmFscwotICAgIGZv
ciAoa2V5IGluIG9sZE9iamVjdCkgewotICAgICAgaWYgKG9sZE9iamVjdC5oYXNPd25Qcm9wZXJ0
eShrZXkpKSB7Ci0gICAgICAgIGlmICghbmV3T2JqZWN0Lmhhc093blByb3BlcnR5KGtleSkpIHsK
LSAgICAgICAgICBkaWRDaGFuZ2UgPSB0cnVlOwotICAgICAgICAgIHJlc3VsdHMucmVtb3ZlZFtr
ZXldID0gb2xkT2JqZWN0W2tleV07Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICAv
LyBDYWxjdWxhdGUgY2hhbmdlcwotICAgIGZvciAoa2V5IGluIG5ld09iamVjdCkgewotICAgICAg
aWYgKG5ld09iamVjdC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7Ci0gICAgICAgIGlmIChpc0FycmF5
KG9sZE9iamVjdFtrZXldKSAmJiBpc0FycmF5KG5ld09iamVjdFtrZXldKSkgewotICAgICAgICAg
IGlmIChvbGRPYmplY3Rba2V5XS5sZW5ndGggIT09IG5ld09iamVjdFtrZXldLmxlbmd0aCkgewot
ICAgICAgICAgICAgcmVzdWx0cy5jaGFuZ2VkW2tleV0gPSBuZXdPYmplY3Rba2V5XTsKLSAgICAg
ICAgICAgIGRpZENoYW5nZSA9IHRydWU7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IGZvciAodmFyIGkgPSAwLCBsID0gb2xkT2JqZWN0W2tleV0ubGVuZ3RoOyBpIDwgbDsgaSsrKSB7
Ci0gICAgICAgICAgICAgIGlmIChvbGRPYmplY3Rba2V5XVtpXSAhPT0gbmV3T2JqZWN0W2tleV1b
aV0pIHsKLSAgICAgICAgICAgICAgICByZXN1bHRzLmNoYW5nZWRba2V5XSA9IG5ld09iamVjdFtr
ZXldOwotICAgICAgICAgICAgICAgIGRpZENoYW5nZSA9IHRydWU7Ci0gICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
aWYgKG9sZE9iamVjdFtrZXldICE9PSBuZXdPYmplY3Rba2V5XSkgewotICAgICAgICAgICAgcmVz
dWx0cy5jaGFuZ2VkW2tleV0gPSBuZXdPYmplY3Rba2V5XTsKLSAgICAgICAgICAgIGRpZENoYW5n
ZSA9IHRydWU7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAg
cmV0dXJuIGRpZENoYW5nZSAmJiByZXN1bHRzOwotICB9Ci0KLSAgZnVuY3Rpb24gcHJvbWlzZUxh
YmVsKGxhYmVsKSB7Ci0gICAgcmV0dXJuICdSb3V0ZXI6ICcgKyBsYWJlbDsKLSAgfQotCi0gIGZ1
bmN0aW9uIHN1YmNsYXNzKHBhcmVudENvbnN0cnVjdG9yLCBwcm90bykgewotICAgIGZ1bmN0aW9u
IEMocHJvcHMpIHsKLSAgICAgIHBhcmVudENvbnN0cnVjdG9yLmNhbGwodGhpcywgcHJvcHMgfHwg
e30pOwotICAgIH0KLSAgICBDLnByb3RvdHlwZSA9IG9DcmVhdGUocGFyZW50Q29uc3RydWN0b3Iu
cHJvdG90eXBlKTsKLSAgICBtZXJnZShDLnByb3RvdHlwZSwgcHJvdG8pOwotICAgIHJldHVybiBD
OwotICB9Ci0KLSAgZnVuY3Rpb24gcmVzb2x2ZUhvb2sob2JqLCBob29rTmFtZSkgewotICAgIGlm
ICghb2JqKSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHZhciB1bmRlcnNjb3JlZCA9ICJf
IiArIGhvb2tOYW1lOwotICAgIHJldHVybiBvYmpbdW5kZXJzY29yZWRdICYmIHVuZGVyc2NvcmVk
IHx8IG9ialtob29rTmFtZV0gJiYgaG9va05hbWU7Ci0gIH0KLQotICBmdW5jdGlvbiBjYWxsSG9v
ayhvYmosIF9ob29rTmFtZSwgYXJnMSwgYXJnMikgewotICAgIHZhciBob29rTmFtZSA9IHJlc29s
dmVIb29rKG9iaiwgX2hvb2tOYW1lKTsKLSAgICByZXR1cm4gaG9va05hbWUgJiYgb2JqW2hvb2tO
YW1lXS5jYWxsKG9iaiwgYXJnMSwgYXJnMik7Ci0gIH0KLQotICBmdW5jdGlvbiBhcHBseUhvb2so
b2JqLCBfaG9va05hbWUsIGFyZ3MpIHsKLSAgICB2YXIgaG9va05hbWUgPSByZXNvbHZlSG9vayhv
YmosIF9ob29rTmFtZSk7Ci0gICAgaWYgKGhvb2tOYW1lKSB7Ci0gICAgICBpZiAoYXJncy5sZW5n
dGggPT09IDApIHsKLSAgICAgICAgcmV0dXJuIG9ialtob29rTmFtZV0uY2FsbChvYmopOwotICAg
ICAgfSBlbHNlIGlmIChhcmdzLmxlbmd0aCA9PT0gMSkgewotICAgICAgICByZXR1cm4gb2JqW2hv
b2tOYW1lXS5jYWxsKG9iaiwgYXJnc1swXSk7Ci0gICAgICB9IGVsc2UgaWYgKGFyZ3MubGVuZ3Ro
ID09PSAyKSB7Ci0gICAgICAgIHJldHVybiBvYmpbaG9va05hbWVdLmNhbGwob2JqLCBhcmdzWzBd
LCBhcmdzWzFdKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVybiBvYmpbaG9va05hbWVd
LmFwcGx5KG9iaiwgYXJncyk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgZXhwb3J0cy5tZXJn
ZSA9IG1lcmdlOwotICBleHBvcnRzLnNsaWNlID0gc2xpY2U7Ci0gIGV4cG9ydHMuaXNQYXJhbSA9
IGlzUGFyYW07Ci0gIGV4cG9ydHMuY29lcmNlUXVlcnlQYXJhbXNUb1N0cmluZyA9IGNvZXJjZVF1
ZXJ5UGFyYW1zVG9TdHJpbmc7Ci0gIGV4cG9ydHMuY2FsbEhvb2sgPSBjYWxsSG9vazsKLSAgZXhw
b3J0cy5yZXNvbHZlSG9vayA9IHJlc29sdmVIb29rOwotICBleHBvcnRzLmFwcGx5SG9vayA9IGFw
cGx5SG9vazsKLX0pOwotZW5pZmVkKCdyc3ZwJywgWydleHBvcnRzJywgJ3JzdnAvcHJvbWlzZScs
ICdyc3ZwL2V2ZW50cycsICdyc3ZwL25vZGUnLCAncnN2cC9hbGwnLCAncnN2cC9hbGwtc2V0dGxl
ZCcsICdyc3ZwL3JhY2UnLCAncnN2cC9oYXNoJywgJ3JzdnAvaGFzaC1zZXR0bGVkJywgJ3JzdnAv
cmV0aHJvdycsICdyc3ZwL2RlZmVyJywgJ3JzdnAvY29uZmlnJywgJ3JzdnAvbWFwJywgJ3JzdnAv
cmVzb2x2ZScsICdyc3ZwL3JlamVjdCcsICdyc3ZwL2ZpbHRlcicsICdyc3ZwL2FzYXAnXSwgZnVu
Y3Rpb24gKGV4cG9ydHMsIF9yc3ZwUHJvbWlzZSwgX3JzdnBFdmVudHMsIF9yc3ZwTm9kZSwgX3Jz
dnBBbGwsIF9yc3ZwQWxsU2V0dGxlZCwgX3JzdnBSYWNlLCBfcnN2cEhhc2gsIF9yc3ZwSGFzaFNl
dHRsZWQsIF9yc3ZwUmV0aHJvdywgX3JzdnBEZWZlciwgX3JzdnBDb25maWcsIF9yc3ZwTWFwLCBf
cnN2cFJlc29sdmUsIF9yc3ZwUmVqZWN0LCBfcnN2cEZpbHRlciwgX3JzdnBBc2FwKSB7Ci0gICd1
c2Ugc3RyaWN0JzsKLQotICAvLyBkZWZhdWx0cwotICBfcnN2cENvbmZpZy5jb25maWcuYXN5bmMg
PSBfcnN2cEFzYXAuZGVmYXVsdDsKLSAgX3JzdnBDb25maWcuY29uZmlnLmFmdGVyID0gZnVuY3Rp
b24gKGNiKSB7Ci0gICAgc2V0VGltZW91dChjYiwgMCk7Ci0gIH07Ci0gIHZhciBjYXN0ID0gX3Jz
dnBSZXNvbHZlLmRlZmF1bHQ7Ci0gIGZ1bmN0aW9uIGFzeW5jKGNhbGxiYWNrLCBhcmcpIHsKLSAg
ICBfcnN2cENvbmZpZy5jb25maWcuYXN5bmMoY2FsbGJhY2ssIGFyZyk7Ci0gIH0KLQotICBmdW5j
dGlvbiBvbigpIHsKLSAgICBfcnN2cENvbmZpZy5jb25maWdbJ29uJ10uYXBwbHkoX3JzdnBDb25m
aWcuY29uZmlnLCBhcmd1bWVudHMpOwotICB9Ci0KLSAgZnVuY3Rpb24gb2ZmKCkgewotICAgIF9y
c3ZwQ29uZmlnLmNvbmZpZ1snb2ZmJ10uYXBwbHkoX3JzdnBDb25maWcuY29uZmlnLCBhcmd1bWVu
dHMpOwotICB9Ci0KLSAgLy8gU2V0IHVwIGluc3RydW1lbnRhdGlvbiB0aHJvdWdoIGB3aW5kb3cu
X19QUk9NSVNFX0lOVFJVTUVOVEFUSU9OX19gCi0gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5k
ZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93WydfX1BST01JU0VfSU5TVFJVTUVOVEFUSU9OX18nXSA9
PT0gJ29iamVjdCcpIHsKLSAgICB2YXIgY2FsbGJhY2tzID0gd2luZG93WydfX1BST01JU0VfSU5T
VFJVTUVOVEFUSU9OX18nXTsKLSAgICBfcnN2cENvbmZpZy5jb25maWd1cmUoJ2luc3RydW1lbnQn
LCB0cnVlKTsKLSAgICBmb3IgKHZhciBldmVudE5hbWUgaW4gY2FsbGJhY2tzKSB7Ci0gICAgICBp
ZiAoY2FsbGJhY2tzLmhhc093blByb3BlcnR5KGV2ZW50TmFtZSkpIHsKLSAgICAgICAgb24oZXZl
bnROYW1lLCBjYWxsYmFja3NbZXZlbnROYW1lXSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAg
ZXhwb3J0cy5jYXN0ID0gY2FzdDsKLSAgZXhwb3J0cy5Qcm9taXNlID0gX3JzdnBQcm9taXNlLmRl
ZmF1bHQ7Ci0gIGV4cG9ydHMuRXZlbnRUYXJnZXQgPSBfcnN2cEV2ZW50cy5kZWZhdWx0OwotICBl
eHBvcnRzLmFsbCA9IF9yc3ZwQWxsLmRlZmF1bHQ7Ci0gIGV4cG9ydHMuYWxsU2V0dGxlZCA9IF9y
c3ZwQWxsU2V0dGxlZC5kZWZhdWx0OwotICBleHBvcnRzLnJhY2UgPSBfcnN2cFJhY2UuZGVmYXVs
dDsKLSAgZXhwb3J0cy5oYXNoID0gX3JzdnBIYXNoLmRlZmF1bHQ7Ci0gIGV4cG9ydHMuaGFzaFNl
dHRsZWQgPSBfcnN2cEhhc2hTZXR0bGVkLmRlZmF1bHQ7Ci0gIGV4cG9ydHMucmV0aHJvdyA9IF9y
c3ZwUmV0aHJvdy5kZWZhdWx0OwotICBleHBvcnRzLmRlZmVyID0gX3JzdnBEZWZlci5kZWZhdWx0
OwotICBleHBvcnRzLmRlbm9kZWlmeSA9IF9yc3ZwTm9kZS5kZWZhdWx0OwotICBleHBvcnRzLmNv
bmZpZ3VyZSA9IF9yc3ZwQ29uZmlnLmNvbmZpZ3VyZTsKLSAgZXhwb3J0cy5vbiA9IG9uOwotICBl
eHBvcnRzLm9mZiA9IG9mZjsKLSAgZXhwb3J0cy5yZXNvbHZlID0gX3JzdnBSZXNvbHZlLmRlZmF1
bHQ7Ci0gIGV4cG9ydHMucmVqZWN0ID0gX3JzdnBSZWplY3QuZGVmYXVsdDsKLSAgZXhwb3J0cy5h
c3luYyA9IGFzeW5jOwotICBleHBvcnRzLm1hcCA9IF9yc3ZwTWFwLmRlZmF1bHQ7Ci0gIGV4cG9y
dHMuZmlsdGVyID0gX3JzdnBGaWx0ZXIuZGVmYXVsdDsKLX0pOwotZW5pZmVkKCdyc3ZwLnVtZCcs
IFsnZXhwb3J0cycsICdyc3ZwL3BsYXRmb3JtJywgJ3JzdnAnXSwgZnVuY3Rpb24gKGV4cG9ydHMs
IF9yc3ZwUGxhdGZvcm0sIF9yc3ZwKSB7Ci0gICd1c2Ugc3RyaWN0JzsKLQotICB2YXIgUlNWUCA9
IHsKLSAgICAncmFjZSc6IF9yc3ZwLnJhY2UsCi0gICAgJ1Byb21pc2UnOiBfcnN2cC5Qcm9taXNl
LAotICAgICdhbGxTZXR0bGVkJzogX3JzdnAuYWxsU2V0dGxlZCwKLSAgICAnaGFzaCc6IF9yc3Zw
Lmhhc2gsCi0gICAgJ2hhc2hTZXR0bGVkJzogX3JzdnAuaGFzaFNldHRsZWQsCi0gICAgJ2Rlbm9k
ZWlmeSc6IF9yc3ZwLmRlbm9kZWlmeSwKLSAgICAnb24nOiBfcnN2cC5vbiwKLSAgICAnb2ZmJzog
X3JzdnAub2ZmLAotICAgICdtYXAnOiBfcnN2cC5tYXAsCi0gICAgJ2ZpbHRlcic6IF9yc3ZwLmZp
bHRlciwKLSAgICAncmVzb2x2ZSc6IF9yc3ZwLnJlc29sdmUsCi0gICAgJ3JlamVjdCc6IF9yc3Zw
LnJlamVjdCwKLSAgICAnYWxsJzogX3JzdnAuYWxsLAotICAgICdyZXRocm93JzogX3JzdnAucmV0
aHJvdywKLSAgICAnZGVmZXInOiBfcnN2cC5kZWZlciwKLSAgICAnRXZlbnRUYXJnZXQnOiBfcnN2
cC5FdmVudFRhcmdldCwKLSAgICAnY29uZmlndXJlJzogX3JzdnAuY29uZmlndXJlLAotICAgICdh
c3luYyc6IF9yc3ZwLmFzeW5jCi0gIH07Ci0KLSAgLyogZ2xvYmFsIGRlZmluZTp0cnVlIG1vZHVs
ZTp0cnVlIHdpbmRvdzogdHJ1ZSAqLwotICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9u
JyAmJiBkZWZpbmVbJ2FtZCddKSB7Ci0gICAgZGVmaW5lKGZ1bmN0aW9uICgpIHsKLSAgICAgIHJl
dHVybiBSU1ZQOwotICAgIH0pOwotICB9IGVsc2UgaWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRl
ZmluZWQnICYmIG1vZHVsZVsnZXhwb3J0cyddKSB7Ci0gICAgbW9kdWxlWydleHBvcnRzJ10gPSBS
U1ZQOwotICB9IGVsc2UgaWYgKHR5cGVvZiBfcnN2cFBsYXRmb3JtLmRlZmF1bHQgIT09ICd1bmRl
ZmluZWQnKSB7Ci0gICAgX3JzdnBQbGF0Zm9ybS5kZWZhdWx0WydSU1ZQJ10gPSBSU1ZQOwotICB9
Ci19KTsKLWVuaWZlZCgncnN2cC8taW50ZXJuYWwnLCBbJ2V4cG9ydHMnLCAncnN2cC91dGlscycs
ICdyc3ZwL2luc3RydW1lbnQnLCAncnN2cC9jb25maWcnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9y
c3ZwVXRpbHMsIF9yc3ZwSW5zdHJ1bWVudCwgX3JzdnBDb25maWcpIHsKLSAgJ3VzZSBzdHJpY3Qn
OwotCi0gIGZ1bmN0aW9uIHdpdGhPd25Qcm9taXNlKCkgewotICAgIHJldHVybiBuZXcgVHlwZUVy
cm9yKCdBIHByb21pc2VzIGNhbGxiYWNrIGNhbm5vdCByZXR1cm4gdGhhdCBzYW1lIHByb21pc2Uu
Jyk7Ci0gIH0KLQotICBmdW5jdGlvbiBub29wKCkge30KLQotICB2YXIgUEVORElORyA9IHZvaWQg
MDsKLSAgdmFyIEZVTEZJTExFRCA9IDE7Ci0gIHZhciBSRUpFQ1RFRCA9IDI7Ci0KLSAgdmFyIEdF
VF9USEVOX0VSUk9SID0gbmV3IEVycm9yT2JqZWN0KCk7Ci0KLSAgZnVuY3Rpb24gZ2V0VGhlbihw
cm9taXNlKSB7Ci0gICAgdHJ5IHsKLSAgICAgIHJldHVybiBwcm9taXNlLnRoZW47Ci0gICAgfSBj
YXRjaCAoZXJyb3IpIHsKLSAgICAgIEdFVF9USEVOX0VSUk9SLmVycm9yID0gZXJyb3I7Ci0gICAg
ICByZXR1cm4gR0VUX1RIRU5fRVJST1I7Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gdHJ5VGhl
bih0aGVuLCB2YWx1ZSwgZnVsZmlsbG1lbnRIYW5kbGVyLCByZWplY3Rpb25IYW5kbGVyKSB7Ci0g
ICAgdHJ5IHsKLSAgICAgIHRoZW4uY2FsbCh2YWx1ZSwgZnVsZmlsbG1lbnRIYW5kbGVyLCByZWpl
Y3Rpb25IYW5kbGVyKTsKLSAgICB9IGNhdGNoIChlKSB7Ci0gICAgICByZXR1cm4gZTsKLSAgICB9
Ci0gIH0KLQotICBmdW5jdGlvbiBoYW5kbGVGb3JlaWduVGhlbmFibGUocHJvbWlzZSwgdGhlbmFi
bGUsIHRoZW4pIHsKLSAgICBfcnN2cENvbmZpZy5jb25maWcuYXN5bmMoZnVuY3Rpb24gKHByb21p
c2UpIHsKLSAgICAgIHZhciBzZWFsZWQgPSBmYWxzZTsKLSAgICAgIHZhciBlcnJvciA9IHRyeVRo
ZW4odGhlbiwgdGhlbmFibGUsIGZ1bmN0aW9uICh2YWx1ZSkgewotICAgICAgICBpZiAoc2VhbGVk
KSB7Ci0gICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHNlYWxlZCA9IHRydWU7
Ci0gICAgICAgIGlmICh0aGVuYWJsZSAhPT0gdmFsdWUpIHsKLSAgICAgICAgICByZXNvbHZlKHBy
b21pc2UsIHZhbHVlKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBmdWxmaWxsKHByb21p
c2UsIHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgfSwgZnVuY3Rpb24gKHJlYXNvbikgewotICAg
ICAgICBpZiAoc2VhbGVkKSB7Ci0gICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAg
IHNlYWxlZCA9IHRydWU7Ci0KLSAgICAgICAgcmVqZWN0KHByb21pc2UsIHJlYXNvbik7Ci0gICAg
ICB9LCAnU2V0dGxlOiAnICsgKHByb21pc2UuX2xhYmVsIHx8ICcgdW5rbm93biBwcm9taXNlJykp
OwotCi0gICAgICBpZiAoIXNlYWxlZCAmJiBlcnJvcikgewotICAgICAgICBzZWFsZWQgPSB0cnVl
OwotICAgICAgICByZWplY3QocHJvbWlzZSwgZXJyb3IpOwotICAgICAgfQotICAgIH0sIHByb21p
c2UpOwotICB9Ci0KLSAgZnVuY3Rpb24gaGFuZGxlT3duVGhlbmFibGUocHJvbWlzZSwgdGhlbmFi
bGUpIHsKLSAgICBpZiAodGhlbmFibGUuX3N0YXRlID09PSBGVUxGSUxMRUQpIHsKLSAgICAgIGZ1
bGZpbGwocHJvbWlzZSwgdGhlbmFibGUuX3Jlc3VsdCk7Ci0gICAgfSBlbHNlIGlmICh0aGVuYWJs
ZS5fc3RhdGUgPT09IFJFSkVDVEVEKSB7Ci0gICAgICB0aGVuYWJsZS5fb25FcnJvciA9IG51bGw7
Ci0gICAgICByZWplY3QocHJvbWlzZSwgdGhlbmFibGUuX3Jlc3VsdCk7Ci0gICAgfSBlbHNlIHsK
LSAgICAgIHN1YnNjcmliZSh0aGVuYWJsZSwgdW5kZWZpbmVkLCBmdW5jdGlvbiAodmFsdWUpIHsK
LSAgICAgICAgaWYgKHRoZW5hYmxlICE9PSB2YWx1ZSkgewotICAgICAgICAgIHJlc29sdmUocHJv
bWlzZSwgdmFsdWUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGZ1bGZpbGwocHJvbWlz
ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICB9LCBmdW5jdGlvbiAocmVhc29uKSB7Ci0gICAg
ICAgIHJlamVjdChwcm9taXNlLCByZWFzb24pOwotICAgICAgfSk7Ci0gICAgfQotICB9Ci0KLSAg
ZnVuY3Rpb24gaGFuZGxlTWF5YmVUaGVuYWJsZShwcm9taXNlLCBtYXliZVRoZW5hYmxlKSB7Ci0g
ICAgaWYgKG1heWJlVGhlbmFibGUuY29uc3RydWN0b3IgPT09IHByb21pc2UuY29uc3RydWN0b3Ip
IHsKLSAgICAgIGhhbmRsZU93blRoZW5hYmxlKHByb21pc2UsIG1heWJlVGhlbmFibGUpOwotICAg
IH0gZWxzZSB7Ci0gICAgICB2YXIgdGhlbiA9IGdldFRoZW4obWF5YmVUaGVuYWJsZSk7Ci0KLSAg
ICAgIGlmICh0aGVuID09PSBHRVRfVEhFTl9FUlJPUikgewotICAgICAgICByZWplY3QocHJvbWlz
ZSwgR0VUX1RIRU5fRVJST1IuZXJyb3IpOwotICAgICAgfSBlbHNlIGlmICh0aGVuID09PSB1bmRl
ZmluZWQpIHsKLSAgICAgICAgZnVsZmlsbChwcm9taXNlLCBtYXliZVRoZW5hYmxlKTsKLSAgICAg
IH0gZWxzZSBpZiAoX3JzdnBVdGlscy5pc0Z1bmN0aW9uKHRoZW4pKSB7Ci0gICAgICAgIGhhbmRs
ZUZvcmVpZ25UaGVuYWJsZShwcm9taXNlLCBtYXliZVRoZW5hYmxlLCB0aGVuKTsKLSAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgIGZ1bGZpbGwocHJvbWlzZSwgbWF5YmVUaGVuYWJsZSk7Ci0gICAgICB9
Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24gcmVzb2x2ZShwcm9taXNlLCB2YWx1ZSkgewotICAg
IGlmIChwcm9taXNlID09PSB2YWx1ZSkgewotICAgICAgZnVsZmlsbChwcm9taXNlLCB2YWx1ZSk7
Ci0gICAgfSBlbHNlIGlmIChfcnN2cFV0aWxzLm9iamVjdE9yRnVuY3Rpb24odmFsdWUpKSB7Ci0g
ICAgICBoYW5kbGVNYXliZVRoZW5hYmxlKHByb21pc2UsIHZhbHVlKTsKLSAgICB9IGVsc2Ugewot
ICAgICAgZnVsZmlsbChwcm9taXNlLCB2YWx1ZSk7Ci0gICAgfQotICB9Ci0KLSAgZnVuY3Rpb24g
cHVibGlzaFJlamVjdGlvbihwcm9taXNlKSB7Ci0gICAgaWYgKHByb21pc2UuX29uRXJyb3IpIHsK
LSAgICAgIHByb21pc2UuX29uRXJyb3IocHJvbWlzZS5fcmVzdWx0KTsKLSAgICB9Ci0KLSAgICBw
dWJsaXNoKHByb21pc2UpOwotICB9Ci0KLSAgZnVuY3Rpb24gZnVsZmlsbChwcm9taXNlLCB2YWx1
ZSkgewotICAgIGlmIChwcm9taXNlLl9zdGF0ZSAhPT0gUEVORElORykgewotICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIHByb21pc2UuX3Jlc3VsdCA9IHZhbHVlOwotICAgIHByb21pc2UuX3N0
YXRlID0gRlVMRklMTEVEOwotCi0gICAgaWYgKHByb21pc2UuX3N1YnNjcmliZXJzLmxlbmd0aCA9
PT0gMCkgewotICAgICAgaWYgKF9yc3ZwQ29uZmlnLmNvbmZpZy5pbnN0cnVtZW50KSB7Ci0gICAg
ICAgIF9yc3ZwSW5zdHJ1bWVudC5kZWZhdWx0KCdmdWxmaWxsZWQnLCBwcm9taXNlKTsKLSAgICAg
IH0KLSAgICB9IGVsc2UgewotICAgICAgX3JzdnBDb25maWcuY29uZmlnLmFzeW5jKHB1Ymxpc2gs
IHByb21pc2UpOwotICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIHJlamVjdChwcm9taXNlLCByZWFz
b24pIHsKLSAgICBpZiAocHJvbWlzZS5fc3RhdGUgIT09IFBFTkRJTkcpIHsKLSAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgcHJvbWlzZS5fc3RhdGUgPSBSRUpFQ1RFRDsKLSAgICBwcm9taXNlLl9y
ZXN1bHQgPSByZWFzb247Ci0gICAgX3JzdnBDb25maWcuY29uZmlnLmFzeW5jKHB1Ymxpc2hSZWpl
Y3Rpb24sIHByb21pc2UpOwotICB9Ci0KLSAgZnVuY3Rpb24gc3Vic2NyaWJlKHBhcmVudCwgY2hp
bGQsIG9uRnVsZmlsbG1lbnQsIG9uUmVqZWN0aW9uKSB7Ci0gICAgdmFyIHN1YnNjcmliZXJzID0g
cGFyZW50Ll9zdWJzY3JpYmVyczsKLSAgICB2YXIgbGVuZ3RoID0gc3Vic2NyaWJlcnMubGVuZ3Ro
OwotCi0gICAgcGFyZW50Ll9vbkVycm9yID0gbnVsbDsKLQotICAgIHN1YnNjcmliZXJzW2xlbmd0
aF0gPSBjaGlsZDsKLSAgICBzdWJzY3JpYmVyc1tsZW5ndGggKyBGVUxGSUxMRURdID0gb25GdWxm
aWxsbWVudDsKLSAgICBzdWJzY3JpYmVyc1tsZW5ndGggKyBSRUpFQ1RFRF0gPSBvblJlamVjdGlv
bjsKLQotICAgIGlmIChsZW5ndGggPT09IDAgJiYgcGFyZW50Ll9zdGF0ZSkgewotICAgICAgX3Jz
dnBDb25maWcuY29uZmlnLmFzeW5jKHB1Ymxpc2gsIHBhcmVudCk7Ci0gICAgfQotICB9Ci0KLSAg
ZnVuY3Rpb24gcHVibGlzaChwcm9taXNlKSB7Ci0gICAgdmFyIHN1YnNjcmliZXJzID0gcHJvbWlz
ZS5fc3Vic2NyaWJlcnM7Ci0gICAgdmFyIHNldHRsZWQgPSBwcm9taXNlLl9zdGF0ZTsKLQotICAg
IGlmIChfcnN2cENvbmZpZy5jb25maWcuaW5zdHJ1bWVudCkgewotICAgICAgX3JzdnBJbnN0cnVt
ZW50LmRlZmF1bHQoc2V0dGxlZCA9PT0gRlVMRklMTEVEID8gJ2Z1bGZpbGxlZCcgOiAncmVqZWN0
ZWQnLCBwcm9taXNlKTsKLSAgICB9Ci0KLSAgICBpZiAoc3Vic2NyaWJlcnMubGVuZ3RoID09PSAw
KSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgdmFyIGNoaWxkLAotICAgICAgICBjYWxs
YmFjaywKLSAgICAgICAgZGV0YWlsID0gcHJvbWlzZS5fcmVzdWx0OwotCi0gICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBzdWJzY3JpYmVycy5sZW5ndGg7IGkgKz0gMykgewotICAgICAgY2hpbGQgPSBz
dWJzY3JpYmVyc1tpXTsKLSAgICAgIGNhbGxiYWNrID0gc3Vic2NyaWJlcnNbaSArIHNldHRsZWRd
OwotCi0gICAgICBpZiAoY2hpbGQpIHsKLSAgICAgICAgaW52b2tlQ2FsbGJhY2soc2V0dGxlZCwg
Y2hpbGQsIGNhbGxiYWNrLCBkZXRhaWwpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgY2FsbGJh
Y2soZGV0YWlsKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwcm9taXNlLl9zdWJzY3JpYmVycy5s
ZW5ndGggPSAwOwotICB9Ci0KLSAgZnVuY3Rpb24gRXJyb3JPYmplY3QoKSB7Ci0gICAgdGhpcy5l
cnJvciA9IG51bGw7Ci0gIH0KLQotICB2YXIgVFJZX0NBVENIX0VSUk9SID0gbmV3IEVycm9yT2Jq
ZWN0KCk7Ci0KLSAgZnVuY3Rpb24gdHJ5Q2F0Y2goY2FsbGJhY2ssIGRldGFpbCkgewotICAgIHRy
eSB7Ci0gICAgICByZXR1cm4gY2FsbGJhY2soZGV0YWlsKTsKLSAgICB9IGNhdGNoIChlKSB7Ci0g
ICAgICBUUllfQ0FUQ0hfRVJST1IuZXJyb3IgPSBlOwotICAgICAgcmV0dXJuIFRSWV9DQVRDSF9F
UlJPUjsKLSAgICB9Ci0gIH0KLQotICBmdW5jdGlvbiBpbnZva2VDYWxsYmFjayhzZXR0bGVkLCBw
cm9taXNlLCBjYWxsYmFjaywgZGV0YWlsKSB7Ci0gICAgdmFyIGhhc0NhbGxiYWNrID0gX3JzdnBV
dGlscy5pc0Z1bmN0aW9uKGNhbGxiYWNrKSwKLSAgICAgICAgdmFsdWUsCi0gICAgICAgIGVycm9y
LAotICAgICAgICBzdWNjZWVkZWQsCi0gICAgICAgIGZhaWxlZDsKLQotICAgIGlmIChoYXNDYWxs
YmFjaykgewotICAgICAgdmFsdWUgPSB0cnlDYXRjaChjYWxsYmFjaywgZGV0YWlsKTsKLQotICAg
ICAgaWYgKHZhbHVlID09PSBUUllfQ0FUQ0hfRVJST1IpIHsKLSAgICAgICAgZmFpbGVkID0gdHJ1
ZTsKLSAgICAgICAgZXJyb3IgPSB2YWx1ZS5lcnJvcjsKLSAgICAgICAgdmFsdWUgPSBudWxsOwot
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgc3VjY2VlZGVkID0gdHJ1ZTsKLSAgICAgIH0KLQotICAg
ICAgaWYgKHByb21pc2UgPT09IHZhbHVlKSB7Ci0gICAgICAgIHJlamVjdChwcm9taXNlLCB3aXRo
T3duUHJvbWlzZSgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgIH0gZWxzZSB7Ci0g
ICAgICB2YWx1ZSA9IGRldGFpbDsKLSAgICAgIHN1Y2NlZWRlZCA9IHRydWU7Ci0gICAgfQotCi0g
ICAgaWYgKHByb21pc2UuX3N0YXRlICE9PSBQRU5ESU5HKSB7Ci0gICAgICAvLyBub29wCi0gICAg
fSBlbHNlIGlmIChoYXNDYWxsYmFjayAmJiBzdWNjZWVkZWQpIHsKLSAgICAgICAgcmVzb2x2ZShw
cm9taXNlLCB2YWx1ZSk7Ci0gICAgICB9IGVsc2UgaWYgKGZhaWxlZCkgewotICAgICAgICByZWpl
Y3QocHJvbWlzZSwgZXJyb3IpOwotICAgICAgfSBlbHNlIGlmIChzZXR0bGVkID09PSBGVUxGSUxM
RUQpIHsKLSAgICAgICAgZnVsZmlsbChwcm9taXNlLCB2YWx1ZSk7Ci0gICAgICB9IGVsc2UgaWYg
KHNldHRsZWQgPT09IFJFSkVDVEVEKSB7Ci0gICAgICAgIHJlamVjdChwcm9taXNlLCB2YWx1ZSk7
Ci0gICAgICB9Ci0gIH0KLQotICBmdW5jdGlvbiBpbml0aWFsaXplUHJvbWlzZShwcm9taXNlLCBy
ZXNvbHZlcikgewotICAgIHZhciByZXNvbHZlZCA9IGZhbHNlOwotICAgIHRyeSB7Ci0gICAgICBy
ZXNvbHZlcihmdW5jdGlvbiByZXNvbHZlUHJvbWlzZSh2YWx1ZSkgewotICAgICAgICBpZiAocmVz
b2x2ZWQpIHsKLSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgcmVzb2x2ZWQg
PSB0cnVlOwotICAgICAgICByZXNvbHZlKHByb21pc2UsIHZhbHVlKTsKLSAgICAgIH0sIGZ1bmN0
aW9uIHJlamVjdFByb21pc2UocmVhc29uKSB7Ci0gICAgICAgIGlmIChyZXNvbHZlZCkgewotICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICByZXNvbHZlZCA9IHRydWU7Ci0gICAg
ICAgIHJlamVjdChwcm9taXNlLCByZWFzb24pOwotICAgICAgfSk7Ci0gICAgfSBjYXRjaCAoZSkg
ewotICAgICAgcmVqZWN0KHByb21pc2UsIGUpOwotICAgIH0KLSAgfQotCi0gIGV4cG9ydHMubm9v
cCA9IG5vb3A7Ci0gIGV4cG9ydHMucmVzb2x2ZSA9IHJlc29sdmU7Ci0gIGV4cG9ydHMucmVqZWN0
ID0gcmVqZWN0OwotICBleHBvcnRzLmZ1bGZpbGwgPSBmdWxmaWxsOwotICBleHBvcnRzLnN1YnNj
cmliZSA9IHN1YnNjcmliZTsKLSAgZXhwb3J0cy5wdWJsaXNoID0gcHVibGlzaDsKLSAgZXhwb3J0
cy5wdWJsaXNoUmVqZWN0aW9uID0gcHVibGlzaFJlamVjdGlvbjsKLSAgZXhwb3J0cy5pbml0aWFs
aXplUHJvbWlzZSA9IGluaXRpYWxpemVQcm9taXNlOwotICBleHBvcnRzLmludm9rZUNhbGxiYWNr
ID0gaW52b2tlQ2FsbGJhY2s7Ci0gIGV4cG9ydHMuRlVMRklMTEVEID0gRlVMRklMTEVEOwotICBl
eHBvcnRzLlJFSkVDVEVEID0gUkVKRUNURUQ7Ci0gIGV4cG9ydHMuUEVORElORyA9IFBFTkRJTkc7
Ci19KTsKLWVuaWZlZCgncnN2cC9hbGwtc2V0dGxlZCcsIFsnZXhwb3J0cycsICdyc3ZwL2VudW1l
cmF0b3InLCAncnN2cC9wcm9taXNlJywgJ3JzdnAvdXRpbHMnXSwgZnVuY3Rpb24gKGV4cG9ydHMs
IF9yc3ZwRW51bWVyYXRvciwgX3JzdnBQcm9taXNlLCBfcnN2cFV0aWxzKSB7Ci0gICd1c2Ugc3Ry
aWN0JzsKLQotICBleHBvcnRzLmRlZmF1bHQgPSBhbGxTZXR0bGVkOwotCi0gIGZ1bmN0aW9uIEFs
bFNldHRsZWQoQ29uc3RydWN0b3IsIGVudHJpZXMsIGxhYmVsKSB7Ci0gICAgdGhpcy5fc3VwZXJD
b25zdHJ1Y3RvcihDb25zdHJ1Y3RvciwgZW50cmllcywgZmFsc2UsIC8qIGRvbid0IGFib3J0IG9u
IHJlamVjdCAqL2xhYmVsKTsKLSAgfQotCi0gIEFsbFNldHRsZWQucHJvdG90eXBlID0gX3JzdnBV
dGlscy5vX2NyZWF0ZShfcnN2cEVudW1lcmF0b3IuZGVmYXVsdC5wcm90b3R5cGUpOwotICBBbGxT
ZXR0bGVkLnByb3RvdHlwZS5fc3VwZXJDb25zdHJ1Y3RvciA9IF9yc3ZwRW51bWVyYXRvci5kZWZh
dWx0OwotICBBbGxTZXR0bGVkLnByb3RvdHlwZS5fbWFrZVJlc3VsdCA9IF9yc3ZwRW51bWVyYXRv
ci5tYWtlU2V0dGxlZFJlc3VsdDsKLSAgQWxsU2V0dGxlZC5wcm90b3R5cGUuX3ZhbGlkYXRpb25F
cnJvciA9IGZ1bmN0aW9uICgpIHsKLSAgICByZXR1cm4gbmV3IEVycm9yKCdhbGxTZXR0bGVkIG11
c3QgYmUgY2FsbGVkIHdpdGggYW4gYXJyYXknKTsKLSAgfTsKLQotICAvKioKLSAgICBgUlNWUC5h
bGxTZXR0bGVkYCBpcyBzaW1pbGFyIHRvIGBSU1ZQLmFsbGAsIGJ1dCBpbnN0ZWFkIG9mIGltcGxl
bWVudGluZwotICAgIGEgZmFpbC1mYXN0IG1ldGhvZCwgaXQgd2FpdHMgdW50aWwgYWxsIHRoZSBw
cm9taXNlcyBoYXZlIHJldHVybmVkIGFuZAotICAgIHNob3dzIHlvdSBhbGwgdGhlIHJlc3VsdHMu
IFRoaXMgaXMgdXNlZnVsIGlmIHlvdSB3YW50IHRvIGhhbmRsZSBtdWx0aXBsZQotICAgIHByb21p
c2VzJyBmYWlsdXJlIHN0YXRlcyB0b2dldGhlciBhcyBhIHNldC4KLSAgCi0gICAgUmV0dXJucyBh
IHByb21pc2UgdGhhdCBpcyBmdWxmaWxsZWQgd2hlbiBhbGwgdGhlIGdpdmVuIHByb21pc2VzIGhh
dmUgYmVlbgotICAgIHNldHRsZWQuIFRoZSByZXR1cm4gcHJvbWlzZSBpcyBmdWxmaWxsZWQgd2l0
aCBhbiBhcnJheSBvZiB0aGUgc3RhdGVzIG9mCi0gICAgdGhlIHByb21pc2VzIHBhc3NlZCBpbnRv
IHRoZSBgcHJvbWlzZXNgIGFycmF5IGFyZ3VtZW50LgotICAKLSAgICBFYWNoIHN0YXRlIG9iamVj
dCB3aWxsIGVpdGhlciBpbmRpY2F0ZSBmdWxmaWxsbWVudCBvciByZWplY3Rpb24sIGFuZAotICAg
IHByb3ZpZGUgdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUgb3IgcmVhc29uLiBUaGUgc3RhdGVzIHdp
bGwgdGFrZSBvbmUgb2YKLSAgICB0aGUgZm9sbG93aW5nIGZvcm1hdHM6Ci0gIAotICAgIGBgYGph
dmFzY3JpcHQKLSAgICB7IHN0YXRlOiAnZnVsZmlsbGVkJywgdmFsdWU6IHZhbHVlIH0KLSAgICAg
IG9yCi0gICAgeyBzdGF0ZTogJ3JlamVjdGVkJywgcmVhc29uOiByZWFzb24gfQotICAgIGBgYAot
ICAKLSAgICBFeGFtcGxlOgotICAKLSAgICBgYGBqYXZhc2NyaXB0Ci0gICAgdmFyIHByb21pc2Ux
ID0gUlNWUC5Qcm9taXNlLnJlc29sdmUoMSk7Ci0gICAgdmFyIHByb21pc2UyID0gUlNWUC5Qcm9t
aXNlLnJlamVjdChuZXcgRXJyb3IoJzInKSk7Ci0gICAgdmFyIHByb21pc2UzID0gUlNWUC5Qcm9t
aXNlLnJlamVjdChuZXcgRXJyb3IoJzMnKSk7Ci0gICAgdmFyIHByb21pc2VzID0gWyBwcm9taXNl
MSwgcHJvbWlzZTIsIHByb21pc2UzIF07Ci0gIAotICAgIFJTVlAuYWxsU2V0dGxlZChwcm9taXNl
cykudGhlbihmdW5jdGlvbihhcnJheSl7Ci0gICAgICAvLyBhcnJheSA9PSBbCi0gICAgICAvLyAg
IHsgc3RhdGU6ICdmdWxmaWxsZWQnLCB2YWx1ZTogMSB9LAotICAgICAgLy8gICB7IHN0YXRlOiAn
cmVqZWN0ZWQnLCByZWFzb246IEVycm9yIH0sCi0gICAgICAvLyAgIHsgc3RhdGU6ICdyZWplY3Rl
ZCcsIHJlYXNvbjogRXJyb3IgfQotICAgICAgLy8gXQotICAgICAgLy8gTm90ZSB0aGF0IGZvciB0
aGUgc2Vjb25kIGl0ZW0sIHJlYXNvbi5tZXNzYWdlIHdpbGwgYmUgJzInLCBhbmQgZm9yIHRoZQot
ICAgICAgLy8gdGhpcmQgaXRlbSwgcmVhc29uLm1lc3NhZ2Ugd2lsbCBiZSAnMycuCi0gICAgfSwg
ZnVuY3Rpb24oZXJyb3IpIHsKLSAgICAgIC8vIE5vdCBydW4uIChUaGlzIGJsb2NrIHdvdWxkIG9u
bHkgYmUgY2FsbGVkIGlmIGFsbFNldHRsZWQgaGFkIGZhaWxlZCwKLSAgICAgIC8vIGZvciBpbnN0
YW5jZSBpZiBwYXNzZWQgYW4gaW5jb3JyZWN0IGFyZ3VtZW50IHR5cGUuKQotICAgIH0pOwotICAg
IGBgYAotICAKLSAgICBAbWV0aG9kIGFsbFNldHRsZWQKLSAgICBAc3RhdGljCi0gICAgQGZvciBS
U1ZQCi0gICAgQHBhcmFtIHtBcnJheX0gZW50cmllcwotICAgIEBwYXJhbSB7U3RyaW5nfSBsYWJl
bCAtIG9wdGlvbmFsIHN0cmluZyB0aGF0IGRlc2NyaWJlcyB0aGUgcHJvbWlzZS4KLSAgICBVc2Vm
dWwgZm9yIHRvb2xpbmcuCi0gICAgQHJldHVybiB7UHJvbWlzZX0gcHJvbWlzZSB0aGF0IGlzIGZ1
bGZpbGxlZCB3aXRoIGFuIGFycmF5IG9mIHRoZSBzZXR0bGVkCi0gICAgc3RhdGVzIG9mIHRoZSBj
b25zdGl0dWVudCBwcm9taXNlcy4KLSAgKi8KLQotICBmdW5jdGlvbiBhbGxTZXR0bGVkKGVudHJp
ZXMsIGxhYmVsKSB7Ci0gICAgcmV0dXJuIG5ldyBBbGxTZXR0bGVkKF9yc3ZwUHJvbWlzZS5kZWZh
dWx0LCBlbnRyaWVzLCBsYWJlbCkucHJvbWlzZTsKLSAgfQotfSk7Ci1lbmlmZWQoInJzdnAvYWxs
IiwgWyJleHBvcnRzIiwgInJzdnAvcHJvbWlzZSJdLCBmdW5jdGlvbiAoZXhwb3J0cywgX3JzdnBQ
cm9taXNlKSB7Ci0gICJ1c2Ugc3RyaWN0IjsKLQotICBleHBvcnRzLmRlZmF1bHQgPSBhbGw7Ci0K
LSAgLyoqCi0gICAgVGhpcyBpcyBhIGNvbnZlbmllbnQgYWxpYXMgZm9yIGBSU1ZQLlByb21pc2Uu
YWxsYC4KLSAgCi0gICAgQG1ldGhvZCBhbGwKLSAgICBAc3RhdGljCi0gICAgQGZvciBSU1ZQCi0g
ICAgQHBhcmFtIHtBcnJheX0gYXJyYXkgQXJyYXkgb2YgcHJvbWlzZXMuCi0gICAgQHBhcmFtIHtT
dHJpbmd9IGxhYmVsIEFuIG9wdGlvbmFsIGxhYmVsLiBUaGlzIGlzIHVzZWZ1bAotICAgIGZvciB0
b29saW5nLgotICAqLwotCi0gIGZ1bmN0aW9uIGFsbChhcnJheSwgbGFiZWwpIHsKLSAgICByZXR1
cm4gX3JzdnBQcm9taXNlLmRlZmF1bHQuYWxsKGFycmF5LCBsYWJlbCk7Ci0gIH0KLX0pOwotZW5p
ZmVkKCdyc3ZwL2FzYXAnLCBbJ2V4cG9ydHMnXSwgZnVuY3Rpb24gKGV4cG9ydHMpIHsKLSAgJ3Vz
ZSBzdHJpY3QnOwotCi0gIGV4cG9ydHMuZGVmYXVsdCA9IGFzYXA7Ci0gIHZhciBsZW4gPSAwOwot
ICB2YXIgdG9TdHJpbmcgPSAoe30pLnRvU3RyaW5nOwotICB2YXIgdmVydHhOZXh0OwotCi0gIGZ1
bmN0aW9uIGFzYXAoY2FsbGJhY2ssIGFyZykgewotICAgIHF1ZXVlW2xlbl0gPSBjYWxsYmFjazsK
LSAgICBxdWV1ZVtsZW4gKyAxXSA9IGFyZzsKLSAgICBsZW4gKz0gMjsKLSAgICBpZiAobGVuID09
PSAyKSB7Ci0gICAgICAvLyBJZiBsZW4gaXMgMSwgdGhhdCBtZWFucyB0aGF0IHdlIG5lZWQgdG8g
c2NoZWR1bGUgYW4gYXN5bmMgZmx1c2guCi0gICAgICAvLyBJZiBhZGRpdGlvbmFsIGNhbGxiYWNr
cyBhcmUgcXVldWVkIGJlZm9yZSB0aGUgcXVldWUgaXMgZmx1c2hlZCwgdGhleQotICAgICAgLy8g
d2lsbCBiZSBwcm9jZXNzZWQgYnkgdGhpcyBmbHVzaCB0aGF0IHdlIGFyZSBzY2hlZHVsaW5nLgot
ICAgICAgc2NoZWR1bGVGbHVzaCgpOwotICAgIH0KLSAgfQotCi0gIHZhciBicm93c2VyV2luZG93
ID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cgOiB1bmRlZmluZWQ7Ci0g
IHZhciBicm93c2VyR2xvYmFsID0gYnJvd3NlcldpbmRvdyB8fCB7fTsKLSAgdmFyIEJyb3dzZXJN
dXRhdGlvbk9ic2VydmVyID0gYnJvd3Nlckdsb2JhbC5NdXRhdGlvbk9ic2VydmVyIHx8IGJyb3dz
ZXJHbG9iYWwuV2ViS2l0TXV0YXRpb25PYnNlcnZlcjsKLSAgdmFyIGlzTm9kZSA9IHR5cGVvZiB3
aW5kb3cgPT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAm
JiAoe30pLnRvU3RyaW5nLmNhbGwocHJvY2VzcykgPT09ICdbb2JqZWN0IHByb2Nlc3NdJzsKLQot
ICAvLyB0ZXN0IGZvciB3ZWIgd29ya2VyIGJ1dCBub3QgaW4gSUUxMAotICB2YXIgaXNXb3JrZXIg
PSB0eXBlb2YgVWludDhDbGFtcGVkQXJyYXkgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBpbXBv
cnRTY3JpcHRzICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgTWVzc2FnZUNoYW5uZWwgIT09ICd1
bmRlZmluZWQnOwotCi0gIC8vIG5vZGUKLSAgZnVuY3Rpb24gdXNlTmV4dFRpY2soKSB7Ci0gICAg
dmFyIG5leHRUaWNrID0gcHJvY2Vzcy5uZXh0VGljazsKLSAgICAvLyBub2RlIHZlcnNpb24gMC4x
MC54IGRpc3BsYXlzIGEgZGVwcmVjYXRpb24gd2FybmluZyB3aGVuIG5leHRUaWNrIGlzIHVzZWQg
cmVjdXJzaXZlbHkKLSAgICAvLyBzZXRJbW1lZGlhdGUgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZCBp
bnN0ZWFkCi0gICAgdmFyIHZlcnNpb24gPSBwcm9jZXNzLnZlcnNpb25zLm5vZGUubWF0Y2goL14o
PzooXGQrKVwuKT8oPzooXGQrKVwuKT8oXCp8XGQrKSQvKTsKLSAgICBpZiAoQXJyYXkuaXNBcnJh
eSh2ZXJzaW9uKSAmJiB2ZXJzaW9uWzFdID09PSAnMCcgJiYgdmVyc2lvblsyXSA9PT0gJzEwJykg
ewotICAgICAgbmV4dFRpY2sgPSBzZXRJbW1lZGlhdGU7Ci0gICAgfQotICAgIHJldHVybiBmdW5j
dGlvbiAoKSB7Ci0gICAgICBuZXh0VGljayhmbHVzaCk7Ci0gICAgfTsKLSAgfQotCi0gIC8vIHZl
cnR4Ci0gIGZ1bmN0aW9uIHVzZVZlcnR4VGltZXIoKSB7Ci0gICAgcmV0dXJuIGZ1bmN0aW9uICgp
IHsKLSAgICAgIHZlcnR4TmV4dChmbHVzaCk7Ci0gICAgfTsKLSAgfQotCi0gIGZ1bmN0aW9uIHVz
ZU11dGF0aW9uT2JzZXJ2ZXIoKSB7Ci0gICAgdmFyIGl0ZXJhdGlvbnMgPSAwOwotICAgIHZhciBv
YnNlcnZlciA9IG5ldyBCcm93c2VyTXV0YXRpb25PYnNlcnZlcihmbHVzaCk7Ci0gICAgdmFyIG5v
ZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnJyk7Ci0gICAgb2JzZXJ2ZXIub2JzZXJ2ZShu
b2RlLCB7IGNoYXJhY3RlckRhdGE6IHRydWUgfSk7Ci0KLSAgICByZXR1cm4gZnVuY3Rpb24gKCkg
ewotICAgICAgbm9kZS5kYXRhID0gaXRlcmF0aW9ucyA9ICsraXRlcmF0aW9ucyAlIDI7Ci0gICAg
fTsKLSAgfQotCi0gIC8vIHdlYiB3b3JrZXIKLSAgZnVuY3Rpb24gdXNlTWVzc2FnZUNoYW5uZWwo
KSB7Ci0gICAgdmFyIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTsKLSAgICBjaGFubmVs
LnBvcnQxLm9ubWVzc2FnZSA9IGZsdXNoOwotICAgIHJldHVybiBmdW5jdGlvbiAoKSB7Ci0gICAg
ICBjaGFubmVsLnBvcnQyLnBvc3RNZXNzYWdlKDApOwotICAgIH07Ci0gIH0KLQotICBmdW5jdGlv
biB1c2VTZXRUaW1lb3V0KCkgewotICAgIHJldHVybiBmdW5jdGlvbiAoKSB7Ci0gICAgICBzZXRU
aW1lb3V0KGZsdXNoLCAxKTsKLSAgICB9OwotICB9Ci0KLSAgdmFyIHF1ZXVlID0gbmV3IEFycmF5
KDEwMDApOwotICBmdW5jdGlvbiBmbHVzaCgpIHsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxl
bjsgaSArPSAyKSB7Ci0gICAgICB2YXIgY2FsbGJhY2sgPSBxdWV1ZVtpXTsKLSAgICAgIHZhciBh
cmcgPSBxdWV1ZVtpICsgMV07Ci0KLSAgICAgIGNhbGxiYWNrKGFyZyk7Ci0KLSAgICAgIHF1ZXVl
W2ldID0gdW5kZWZpbmVkOwotICAgICAgcXVldWVbaSArIDFdID0gdW5kZWZpbmVkOwotICAgIH0K
LQotICAgIGxlbiA9IDA7Ci0gIH0KLQotICBmdW5jdGlvbiBhdHRlbXB0VmVydGV4KCkgewotICAg
IHRyeSB7Ci0gICAgICB2YXIgciA9IHJlcXVpcmU7Ci0gICAgICB2YXIgdmVydHggPSByKCd2ZXJ0
eCcpOwotICAgICAgdmVydHhOZXh0ID0gdmVydHgucnVuT25Mb29wIHx8IHZlcnR4LnJ1bk9uQ29u
dGV4dDsKLSAgICAgIHJldHVybiB1c2VWZXJ0eFRpbWVyKCk7Ci0gICAgfSBjYXRjaCAoZSkgewot
ICAgICAgcmV0dXJuIHVzZVNldFRpbWVvdXQoKTsKLSAgICB9Ci0gIH0KLQotICB2YXIgc2NoZWR1
bGVGbHVzaDsKLSAgLy8gRGVjaWRlIHdoYXQgYXN5bmMgbWV0aG9kIHRvIHVzZSB0byB0cmlnZ2Vy
aW5nIHByb2Nlc3Npbmcgb2YgcXVldWVkIGNhbGxiYWNrczoKLSAgaWYgKGlzTm9kZSkgewotICAg
IHNjaGVkdWxlRmx1c2ggPSB1c2VOZXh0VGljaygpOwotICB9IGVsc2UgaWYgKEJyb3dzZXJNdXRh
dGlvbk9ic2VydmVyKSB7Ci0gICAgc2NoZWR1bGVGbHVzaCA9IHVzZU11dGF0aW9uT2JzZXJ2ZXIo
KTsKLSAgfSBlbHNlIGlmIChpc1dvcmtlcikgewotICAgIHNjaGVkdWxlRmx1c2ggPSB1c2VNZXNz
YWdlQ2hhbm5lbCgpOwotICB9IGVsc2UgaWYgKGJyb3dzZXJXaW5kb3cgPT09IHVuZGVmaW5lZCAm
JiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJykgewotICAgIHNjaGVkdWxlRmx1c2ggPSBh
dHRlbXB0VmVydGV4KCk7Ci0gIH0gZWxzZSB7Ci0gICAgc2NoZWR1bGVGbHVzaCA9IHVzZVNldFRp
bWVvdXQoKTsKLSAgfQotfSk7Ci1lbmlmZWQoJ3JzdnAvY29uZmlnJywgWydleHBvcnRzJywgJ3Jz
dnAvZXZlbnRzJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfcnN2cEV2ZW50cykgewotICAndXNlIHN0
cmljdCc7Ci0KLSAgdmFyIGNvbmZpZyA9IHsKLSAgICBpbnN0cnVtZW50OiBmYWxzZQotICB9Owot
Ci0gIF9yc3ZwRXZlbnRzLmRlZmF1bHRbJ21peGluJ10oY29uZmlnKTsKLQotICBmdW5jdGlvbiBj
b25maWd1cmUobmFtZSwgdmFsdWUpIHsKLSAgICBpZiAobmFtZSA9PT0gJ29uZXJyb3InKSB7Ci0g
ICAgICAvLyBoYW5kbGUgZm9yIGxlZ2FjeSB1c2VycyB0aGF0IGV4cGVjdCB0aGUgYWN0dWFsCi0g
ICAgICAvLyBlcnJvciB0byBiZSBwYXNzZWQgdG8gdGhlaXIgZnVuY3Rpb24gYWRkZWQgdmlhCi0g
ICAgICAvLyBgUlNWUC5jb25maWd1cmUoJ29uZXJyb3InLCBzb21lRnVuY3Rpb25IZXJlKTtgCi0g
ICAgICBjb25maWdbJ29uJ10oJ2Vycm9yJywgdmFsdWUpOwotICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7Ci0gICAgICBjb25maWdbbmFtZV0g
PSB2YWx1ZTsKLSAgICB9IGVsc2UgewotICAgICAgcmV0dXJuIGNvbmZpZ1tuYW1lXTsKLSAgICB9
Ci0gIH0KLQotICBleHBvcnRzLmNvbmZpZyA9IGNvbmZpZzsKLSAgZXhwb3J0cy5jb25maWd1cmUg
PSBjb25maWd1cmU7Ci19KTsKLWVuaWZlZCgncnN2cC9kZWZlcicsIFsnZXhwb3J0cycsICdyc3Zw
L3Byb21pc2UnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9yc3ZwUHJvbWlzZSkgewotICAndXNlIHN0
cmljdCc7Ci0KLSAgZXhwb3J0cy5kZWZhdWx0ID0gZGVmZXI7Ci0KLSAgLyoqCi0gICAgYFJTVlAu
ZGVmZXJgIHJldHVybnMgYW4gb2JqZWN0IHNpbWlsYXIgdG8galF1ZXJ5J3MgYCQuRGVmZXJyZWRg
LgotICAgIGBSU1ZQLmRlZmVyYCBzaG91bGQgYmUgdXNlZCB3aGVuIHBvcnRpbmcgb3ZlciBjb2Rl
IHJlbGlhbnQgb24gYCQuRGVmZXJyZWRgJ3MKLSAgICBpbnRlcmZhY2UuIE5ldyBjb2RlIHNob3Vs
ZCB1c2UgdGhlIGBSU1ZQLlByb21pc2VgIGNvbnN0cnVjdG9yIGluc3RlYWQuCi0gIAotICAgIFRo
ZSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgUlNWUC5kZWZlcmAgaXMgYSBwbGFpbiBvYmplY3Qgd2l0
aCB0aHJlZSBwcm9wZXJ0aWVzOgotICAKLSAgICAqIHByb21pc2UgLSBhbiBgUlNWUC5Qcm9taXNl
YC4KLSAgICAqIHJlamVjdCAtIGEgZnVuY3Rpb24gdGhhdCBjYXVzZXMgdGhlIGBwcm9taXNlYCBw
cm9wZXJ0eSBvbiB0aGlzIG9iamVjdCB0bwotICAgICAgYmVjb21lIHJlamVjdGVkCi0gICAgKiBy
ZXNvbHZlIC0gYSBmdW5jdGlvbiB0aGF0IGNhdXNlcyB0aGUgYHByb21pc2VgIHByb3BlcnR5IG9u
IHRoaXMgb2JqZWN0IHRvCi0gICAgICBiZWNvbWUgZnVsZmlsbGVkLgotICAKLSAgICBFeGFtcGxl
OgotICAKLSAgICAgYGBgamF2YXNjcmlwdAotICAgICB2YXIgZGVmZXJyZWQgPSBSU1ZQLmRlZmVy
KCk7Ci0gIAotICAgICBkZWZlcnJlZC5yZXNvbHZlKCJTdWNjZXNzISIpOwotICAKLSAgICAgZGVm
ZXJyZWQucHJvbWlzZS50aGVuKGZ1bmN0aW9uKHZhbHVlKXsKLSAgICAgICAvLyB2YWx1ZSBoZXJl
IGlzICJTdWNjZXNzISIKLSAgICAgfSk7Ci0gICAgIGBgYAotICAKLSAgICBAbWV0aG9kIGRlZmVy
Ci0gICAgQHN0YXRpYwotICAgIEBmb3IgUlNWUAotICAgIEBwYXJhbSB7U3RyaW5nfSBsYWJlbCBv
cHRpb25hbCBzdHJpbmcgZm9yIGxhYmVsaW5nIHRoZSBwcm9taXNlLgotICAgIFVzZWZ1bCBmb3Ig
dG9vbGluZy4KLSAgICBAcmV0dXJuIHtPYmplY3R9Ci0gICAqLwotCi0gIGZ1bmN0aW9uIGRlZmVy
KGxhYmVsKSB7Ci0gICAgdmFyIGRlZmVycmVkID0ge307Ci0KLSAgICBkZWZlcnJlZFsncHJvbWlz
ZSddID0gbmV3IF9yc3ZwUHJvbWlzZS5kZWZhdWx0KGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3Qp
IHsKLSAgICAgIGRlZmVycmVkWydyZXNvbHZlJ10gPSByZXNvbHZlOwotICAgICAgZGVmZXJyZWRb
J3JlamVjdCddID0gcmVqZWN0OwotICAgIH0sIGxhYmVsKTsKLQotICAgIHJldHVybiBkZWZlcnJl
ZDsKLSAgfQotfSk7Ci1lbmlmZWQoJ3JzdnAvZW51bWVyYXRvcicsIFsnZXhwb3J0cycsICdyc3Zw
L3V0aWxzJywgJ3JzdnAvLWludGVybmFsJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfcnN2cFV0aWxz
LCBfcnN2cEludGVybmFsKSB7Ci0gICd1c2Ugc3RyaWN0JzsKLQotICBleHBvcnRzLm1ha2VTZXR0
bGVkUmVzdWx0ID0gbWFrZVNldHRsZWRSZXN1bHQ7Ci0KLSAgZnVuY3Rpb24gbWFrZVNldHRsZWRS
ZXN1bHQoc3RhdGUsIHBvc2l0aW9uLCB2YWx1ZSkgewotICAgIGlmIChzdGF0ZSA9PT0gX3JzdnBJ
bnRlcm5hbC5GVUxGSUxMRUQpIHsKLSAgICAgIHJldHVybiB7Ci0gICAgICAgIHN0YXRlOiAnZnVs
ZmlsbGVkJywKLSAgICAgICAgdmFsdWU6IHZhbHVlCi0gICAgICB9OwotICAgIH0gZWxzZSB7Ci0g
ICAgICByZXR1cm4gewotICAgICAgICBzdGF0ZTogJ3JlamVjdGVkJywKLSAgICAgICAgcmVhc29u
OiB2YWx1ZQotICAgICAgfTsKLSAgICB9Ci0gIH0KLQotICBmdW5jdGlvbiBFbnVtZXJhdG9yKENv
bnN0cnVjdG9yLCBpbnB1dCwgYWJvcnRPblJlamVjdCwgbGFiZWwpIHsKLSAgICB2YXIgZW51bWVy
YXRvciA9IHRoaXM7Ci0KLSAgICBlbnVtZXJhdG9yLl9pbnN0YW5jZUNvbnN0cnVjdG9yID0gQ29u
c3RydWN0b3I7Ci0gICAgZW51bWVyYXRvci5wcm9taXNlID0gbmV3IENvbnN0cnVjdG9yKF9yc3Zw
SW50ZXJuYWwubm9vcCwgbGFiZWwpOwotICAgIGVudW1lcmF0b3IuX2Fib3J0T25SZWplY3QgPSBh
Ym9ydE9uUmVqZWN0OwotCi0gICAgaWYgKGVudW1lcmF0b3IuX3ZhbGlkYXRlSW5wdXQoaW5wdXQp
KSB7Ci0gICAgICBlbnVtZXJhdG9yLl9pbnB1dCA9IGlucHV0OwotICAgICAgZW51bWVyYXRvci5s
ZW5ndGggPSBpbnB1dC5sZW5ndGg7Ci0gICAgICBlbnVtZXJhdG9yLl9yZW1haW5pbmcgPSBpbnB1
dC5sZW5ndGg7Ci0KLSAgICAgIGVudW1lcmF0b3IuX2luaXQoKTsKLQotICAgICAgaWYgKGVudW1l
cmF0b3IubGVuZ3RoID09PSAwKSB7Ci0gICAgICAgIF9yc3ZwSW50ZXJuYWwuZnVsZmlsbChlbnVt
ZXJhdG9yLnByb21pc2UsIGVudW1lcmF0b3IuX3Jlc3VsdCk7Ci0gICAgICB9IGVsc2UgewotICAg
ICAgICBlbnVtZXJhdG9yLmxlbmd0aCA9IGVudW1lcmF0b3IubGVuZ3RoIHx8IDA7Ci0gICAgICAg
IGVudW1lcmF0b3IuX2VudW1lcmF0ZSgpOwotICAgICAgICBpZiAoZW51bWVyYXRvci5fcmVtYWlu
aW5nID09PSAwKSB7Ci0gICAgICAgICAgX3JzdnBJbnRlcm5hbC5mdWxmaWxsKGVudW1lcmF0b3Iu
cHJvbWlzZSwgZW51bWVyYXRvci5fcmVzdWx0KTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0g
ZWxzZSB7Ci0gICAgICBfcnN2cEludGVybmFsLnJlamVjdChlbnVtZXJhdG9yLnByb21pc2UsIGVu
dW1lcmF0b3IuX3ZhbGlkYXRpb25FcnJvcigpKTsKLSAgICB9Ci0gIH0KLQotICBleHBvcnRzLmRl
ZmF1bHQgPSBFbnVtZXJhdG9yOwotCi0gIEVudW1lcmF0b3IucHJvdG90eXBlLl92YWxpZGF0ZUlu
cHV0ID0gZnVuY3Rpb24gKGlucHV0KSB7Ci0gICAgcmV0dXJuIF9yc3ZwVXRpbHMuaXNBcnJheShp
bnB1dCk7Ci0gIH07Ci0KLSAgRW51bWVyYXRvci5wcm90b3R5cGUuX3ZhbGlkYXRpb25FcnJvciA9
IGZ1bmN0aW9uICgpIHsKLSAgICByZXR1cm4gbmV3IEVycm9yKCdBcnJheSBNZXRob2RzIG11c3Qg
YmUgcHJvdmlkZWQgYW4gQXJyYXknKTsKLSAgfTsKLQotICBFbnVtZXJhdG9yLnByb3RvdHlwZS5f
aW5pdCA9IGZ1bmN0aW9uICgpIHsKLSAgICB0aGlzLl9yZXN1bHQgPSBuZXcgQXJyYXkodGhpcy5s
ZW5ndGgpOwotICB9OwotCi0gIEVudW1lcmF0b3IucHJvdG90eXBlLl9lbnVtZXJhdGUgPSBmdW5j
dGlvbiAoKSB7Ci0gICAgdmFyIGVudW1lcmF0b3IgPSB0aGlzOwotICAgIHZhciBsZW5ndGggPSBl
bnVtZXJhdG9yLmxlbmd0aDsKLSAgICB2YXIgcHJvbWlzZSA9IGVudW1lcmF0b3IucHJvbWlzZTsK
LSAgICB2YXIgaW5wdXQgPSBlbnVtZXJhdG9yLl9pbnB1dDsKLQotICAgIGZvciAodmFyIGkgPSAw
OyBwcm9taXNlLl9zdGF0ZSA9PT0gX3JzdnBJbnRlcm5hbC5QRU5ESU5HICYmIGkgPCBsZW5ndGg7
IGkrKykgewotICAgICAgZW51bWVyYXRvci5fZWFjaEVudHJ5KGlucHV0W2ldLCBpKTsKLSAgICB9
Ci0gIH07Ci0KLSAgRW51bWVyYXRvci5wcm90b3R5cGUuX2VhY2hFbnRyeSA9IGZ1bmN0aW9uIChl
bnRyeSwgaSkgewotICAgIHZhciBlbnVtZXJhdG9yID0gdGhpczsKLSAgICB2YXIgYyA9IGVudW1l
cmF0b3IuX2luc3RhbmNlQ29uc3RydWN0b3I7Ci0gICAgaWYgKF9yc3ZwVXRpbHMuaXNNYXliZVRo
ZW5hYmxlKGVudHJ5KSkgewotICAgICAgaWYgKGVudHJ5LmNvbnN0cnVjdG9yID09PSBjICYmIGVu
dHJ5Ll9zdGF0ZSAhPT0gX3JzdnBJbnRlcm5hbC5QRU5ESU5HKSB7Ci0gICAgICAgIGVudHJ5Ll9v
bkVycm9yID0gbnVsbDsKLSAgICAgICAgZW51bWVyYXRvci5fc2V0dGxlZEF0KGVudHJ5Ll9zdGF0
ZSwgaSwgZW50cnkuX3Jlc3VsdCk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBlbnVtZXJhdG9y
Ll93aWxsU2V0dGxlQXQoYy5yZXNvbHZlKGVudHJ5KSwgaSk7Ci0gICAgICB9Ci0gICAgfSBlbHNl
IHsKLSAgICAgIGVudW1lcmF0b3IuX3JlbWFpbmluZy0tOwotICAgICAgZW51bWVyYXRvci5fcmVz
dWx0W2ldID0gZW51bWVyYXRvci5fbWFrZVJlc3VsdChfcnN2cEludGVybmFsLkZVTEZJTExFRCwg
aSwgZW50cnkpOwotICAgIH0KLSAgfTsKLQotICBFbnVtZXJhdG9yLnByb3RvdHlwZS5fc2V0dGxl
ZEF0ID0gZnVuY3Rpb24gKHN0YXRlLCBpLCB2YWx1ZSkgewotICAgIHZhciBlbnVtZXJhdG9yID0g
dGhpczsKLSAgICB2YXIgcHJvbWlzZSA9IGVudW1lcmF0b3IucHJvbWlzZTsKLQotICAgIGlmIChw
cm9taXNlLl9zdGF0ZSA9PT0gX3JzdnBJbnRlcm5hbC5QRU5ESU5HKSB7Ci0gICAgICBlbnVtZXJh
dG9yLl9yZW1haW5pbmctLTsKLQotICAgICAgaWYgKGVudW1lcmF0b3IuX2Fib3J0T25SZWplY3Qg
JiYgc3RhdGUgPT09IF9yc3ZwSW50ZXJuYWwuUkVKRUNURUQpIHsKLSAgICAgICAgX3JzdnBJbnRl
cm5hbC5yZWplY3QocHJvbWlzZSwgdmFsdWUpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgZW51
bWVyYXRvci5fcmVzdWx0W2ldID0gZW51bWVyYXRvci5fbWFrZVJlc3VsdChzdGF0ZSwgaSwgdmFs
dWUpOwotICAgICAgfQotICAgIH0KLQotICAgIGlmIChlbnVtZXJhdG9yLl9yZW1haW5pbmcgPT09
IDApIHsKLSAgICAgIF9yc3ZwSW50ZXJuYWwuZnVsZmlsbChwcm9taXNlLCBlbnVtZXJhdG9yLl9y
ZXN1bHQpOwotICAgIH0KLSAgfTsKLQotICBFbnVtZXJhdG9yLnByb3RvdHlwZS5fbWFrZVJlc3Vs
dCA9IGZ1bmN0aW9uIChzdGF0ZSwgaSwgdmFsdWUpIHsKLSAgICByZXR1cm4gdmFsdWU7Ci0gIH07
Ci0KLSAgRW51bWVyYXRvci5wcm90b3R5cGUuX3dpbGxTZXR0bGVBdCA9IGZ1bmN0aW9uIChwcm9t
aXNlLCBpKSB7Ci0gICAgdmFyIGVudW1lcmF0b3IgPSB0aGlzOwotCi0gICAgX3JzdnBJbnRlcm5h
bC5zdWJzY3JpYmUocHJvbWlzZSwgdW5kZWZpbmVkLCBmdW5jdGlvbiAodmFsdWUpIHsKLSAgICAg
IGVudW1lcmF0b3IuX3NldHRsZWRBdChfcnN2cEludGVybmFsLkZVTEZJTExFRCwgaSwgdmFsdWUp
OwotICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHsKLSAgICAgIGVudW1lcmF0b3IuX3NldHRsZWRB
dChfcnN2cEludGVybmFsLlJFSkVDVEVELCBpLCByZWFzb24pOwotICAgIH0pOwotICB9OwotfSk7
Ci1lbmlmZWQoJ3JzdnAvZXZlbnRzJywgWydleHBvcnRzJ10sIGZ1bmN0aW9uIChleHBvcnRzKSB7
Ci0gICd1c2Ugc3RyaWN0JzsKLQotICBmdW5jdGlvbiBpbmRleE9mKGNhbGxiYWNrcywgY2FsbGJh
Y2spIHsKLSAgICBmb3IgKHZhciBpID0gMCwgbCA9IGNhbGxiYWNrcy5sZW5ndGg7IGkgPCBsOyBp
KyspIHsKLSAgICAgIGlmIChjYWxsYmFja3NbaV0gPT09IGNhbGxiYWNrKSB7Ci0gICAgICAgIHJl
dHVybiBpOwotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiAtMTsKLSAgfQotCi0gIGZ1bmN0
aW9uIGNhbGxiYWNrc0ZvcihvYmplY3QpIHsKLSAgICB2YXIgY2FsbGJhY2tzID0gb2JqZWN0Ll9w
cm9taXNlQ2FsbGJhY2tzOwotCi0gICAgaWYgKCFjYWxsYmFja3MpIHsKLSAgICAgIGNhbGxiYWNr
cyA9IG9iamVjdC5fcHJvbWlzZUNhbGxiYWNrcyA9IHt9OwotICAgIH0KLQotICAgIHJldHVybiBj
YWxsYmFja3M7Ci0gIH0KLQotICAvKioKLSAgICBAY2xhc3MgUlNWUC5FdmVudFRhcmdldAotICAq
LwotICBleHBvcnRzLmRlZmF1bHQgPSB7Ci0KLSAgICAvKioKLSAgICAgIGBSU1ZQLkV2ZW50VGFy
Z2V0Lm1peGluYCBleHRlbmRzIGFuIG9iamVjdCB3aXRoIEV2ZW50VGFyZ2V0IG1ldGhvZHMuIEZv
cgotICAgICAgRXhhbXBsZToKLSAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICB2YXIgb2JqZWN0
ID0ge307Ci0gICAgICAgUlNWUC5FdmVudFRhcmdldC5taXhpbihvYmplY3QpOwotICAgICAgIG9i
amVjdC5vbignZmluaXNoZWQnLCBmdW5jdGlvbihldmVudCkgewotICAgICAgICAvLyBoYW5kbGUg
ZXZlbnQKLSAgICAgIH0pOwotICAgICAgIG9iamVjdC50cmlnZ2VyKCdmaW5pc2hlZCcsIHsgZGV0
YWlsOiB2YWx1ZSB9KTsKLSAgICAgIGBgYAotICAgICAgIGBFdmVudFRhcmdldC5taXhpbmAgYWxz
byB3b3JrcyB3aXRoIHByb3RvdHlwZXM6Ci0gICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgdmFy
IFBlcnNvbiA9IGZ1bmN0aW9uKCkge307Ci0gICAgICBSU1ZQLkV2ZW50VGFyZ2V0Lm1peGluKFBl
cnNvbi5wcm90b3R5cGUpOwotICAgICAgIHZhciB5ZWh1ZGEgPSBuZXcgUGVyc29uKCk7Ci0gICAg
ICB2YXIgdG9tID0gbmV3IFBlcnNvbigpOwotICAgICAgIHllaHVkYS5vbigncG9rZScsIGZ1bmN0
aW9uKGV2ZW50KSB7Ci0gICAgICAgIGNvbnNvbGUubG9nKCdZZWh1ZGEgc2F5cyBPVycpOwotICAg
ICAgfSk7Ci0gICAgICAgdG9tLm9uKCdwb2tlJywgZnVuY3Rpb24oZXZlbnQpIHsKLSAgICAgICAg
Y29uc29sZS5sb2coJ1RvbSBzYXlzIE9XJyk7Ci0gICAgICB9KTsKLSAgICAgICB5ZWh1ZGEudHJp
Z2dlcigncG9rZScpOwotICAgICAgdG9tLnRyaWdnZXIoJ3Bva2UnKTsKLSAgICAgIGBgYAotICAg
ICAgIEBtZXRob2QgbWl4aW4KLSAgICAgIEBmb3IgUlNWUC5FdmVudFRhcmdldAotICAgICAgQHBy
aXZhdGUKLSAgICAgIEBwYXJhbSB7T2JqZWN0fSBvYmplY3Qgb2JqZWN0IHRvIGV4dGVuZCB3aXRo
IEV2ZW50VGFyZ2V0IG1ldGhvZHMKLSAgICAqLwotICAgICdtaXhpbic6IGZ1bmN0aW9uIChvYmpl
Y3QpIHsKLSAgICAgIG9iamVjdFsnb24nXSA9IHRoaXNbJ29uJ107Ci0gICAgICBvYmplY3RbJ29m
ZiddID0gdGhpc1snb2ZmJ107Ci0gICAgICBvYmplY3RbJ3RyaWdnZXInXSA9IHRoaXNbJ3RyaWdn
ZXInXTsKLSAgICAgIG9iamVjdC5fcHJvbWlzZUNhbGxiYWNrcyA9IHVuZGVmaW5lZDsKLSAgICAg
IHJldHVybiBvYmplY3Q7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAgUmVnaXN0ZXJzIGEgY2Fs
bGJhY2sgdG8gYmUgZXhlY3V0ZWQgd2hlbiBgZXZlbnROYW1lYCBpcyB0cmlnZ2VyZWQKLSAgICAg
ICBgYGBqYXZhc2NyaXB0Ci0gICAgICBvYmplY3Qub24oJ2V2ZW50JywgZnVuY3Rpb24oZXZlbnRJ
bmZvKXsKLSAgICAgICAgLy8gaGFuZGxlIHRoZSBldmVudAotICAgICAgfSk7Ci0gICAgICAgb2Jq
ZWN0LnRyaWdnZXIoJ2V2ZW50Jyk7Ci0gICAgICBgYGAKLSAgICAgICBAbWV0aG9kIG9uCi0gICAg
ICBAZm9yIFJTVlAuRXZlbnRUYXJnZXQKLSAgICAgIEBwcml2YXRlCi0gICAgICBAcGFyYW0ge1N0
cmluZ30gZXZlbnROYW1lIG5hbWUgb2YgdGhlIGV2ZW50IHRvIGxpc3RlbiBmb3IKLSAgICAgIEBw
YXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBl
dmVudCBpcyB0cmlnZ2VyZWQuCi0gICAgKi8KLSAgICAnb24nOiBmdW5jdGlvbiAoZXZlbnROYW1l
LCBjYWxsYmFjaykgewotICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykg
ewotICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rp
b24nKTsKLSAgICAgIH0KLQotICAgICAgdmFyIGFsbENhbGxiYWNrcyA9IGNhbGxiYWNrc0Zvcih0
aGlzKSwKLSAgICAgICAgICBjYWxsYmFja3M7Ci0KLSAgICAgIGNhbGxiYWNrcyA9IGFsbENhbGxi
YWNrc1tldmVudE5hbWVdOwotCi0gICAgICBpZiAoIWNhbGxiYWNrcykgewotICAgICAgICBjYWxs
YmFja3MgPSBhbGxDYWxsYmFja3NbZXZlbnROYW1lXSA9IFtdOwotICAgICAgfQotCi0gICAgICBp
ZiAoaW5kZXhPZihjYWxsYmFja3MsIGNhbGxiYWNrKSA9PT0gLTEpIHsKLSAgICAgICAgY2FsbGJh
Y2tzLnB1c2goY2FsbGJhY2spOwotICAgICAgfQotICAgIH0sCi0KLSAgICAvKioKLSAgICAgIFlv
dSBjYW4gdXNlIGBvZmZgIHRvIHN0b3AgZmlyaW5nIGEgcGFydGljdWxhciBjYWxsYmFjayBmb3Ig
YW4gZXZlbnQ6Ci0gICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgZnVuY3Rpb24gZG9TdHVmZigp
IHsgLy8gZG8gc3R1ZmYhIH0KLSAgICAgIG9iamVjdC5vbignc3R1ZmYnLCBkb1N0dWZmKTsKLSAg
ICAgICBvYmplY3QudHJpZ2dlcignc3R1ZmYnKTsgLy8gZG9TdHVmZiB3aWxsIGJlIGNhbGxlZAot
ICAgICAgIC8vIFVucmVnaXN0ZXIgT05MWSB0aGUgZG9TdHVmZiBjYWxsYmFjawotICAgICAgb2Jq
ZWN0Lm9mZignc3R1ZmYnLCBkb1N0dWZmKTsKLSAgICAgIG9iamVjdC50cmlnZ2VyKCdzdHVmZicp
OyAvLyBkb1N0dWZmIHdpbGwgTk9UIGJlIGNhbGxlZAotICAgICAgYGBgCi0gICAgICAgSWYgeW91
IGRvbid0IHBhc3MgYSBgY2FsbGJhY2tgIGFyZ3VtZW50IHRvIGBvZmZgLCBBTEwgY2FsbGJhY2tz
IGZvciB0aGUKLSAgICAgIGV2ZW50IHdpbGwgbm90IGJlIGV4ZWN1dGVkIHdoZW4gdGhlIGV2ZW50
IGZpcmVzLiBGb3IgZXhhbXBsZToKLSAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICB2YXIgY2Fs
bGJhY2sxID0gZnVuY3Rpb24oKXt9OwotICAgICAgdmFyIGNhbGxiYWNrMiA9IGZ1bmN0aW9uKCl7
fTsKLSAgICAgICBvYmplY3Qub24oJ3N0dWZmJywgY2FsbGJhY2sxKTsKLSAgICAgIG9iamVjdC5v
bignc3R1ZmYnLCBjYWxsYmFjazIpOwotICAgICAgIG9iamVjdC50cmlnZ2VyKCdzdHVmZicpOyAv
LyBjYWxsYmFjazEgYW5kIGNhbGxiYWNrMiB3aWxsIGJlIGV4ZWN1dGVkLgotICAgICAgIG9iamVj
dC5vZmYoJ3N0dWZmJyk7Ci0gICAgICBvYmplY3QudHJpZ2dlcignc3R1ZmYnKTsgLy8gY2FsbGJh
Y2sxIGFuZCBjYWxsYmFjazIgd2lsbCBub3QgYmUgZXhlY3V0ZWQhCi0gICAgICBgYGAKLSAgICAg
ICBAbWV0aG9kIG9mZgotICAgICAgQGZvciBSU1ZQLkV2ZW50VGFyZ2V0Ci0gICAgICBAcHJpdmF0
ZQotICAgICAgQHBhcmFtIHtTdHJpbmd9IGV2ZW50TmFtZSBldmVudCB0byBzdG9wIGxpc3Rlbmlu
ZyB0bwotICAgICAgQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgb3B0aW9uYWwgYXJndW1lbnQu
IElmIGdpdmVuLCBvbmx5IHRoZSBmdW5jdGlvbgotICAgICAgZ2l2ZW4gd2lsbCBiZSByZW1vdmVk
IGZyb20gdGhlIGV2ZW50J3MgY2FsbGJhY2sgcXVldWUuIElmIG5vIGBjYWxsYmFja2AKLSAgICAg
IGFyZ3VtZW50IGlzIGdpdmVuLCBhbGwgY2FsbGJhY2tzIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRo
ZSBldmVudCdzIGNhbGxiYWNrCi0gICAgICBxdWV1ZS4KLSAgICAqLwotICAgICdvZmYnOiBmdW5j
dGlvbiAoZXZlbnROYW1lLCBjYWxsYmFjaykgewotICAgICAgdmFyIGFsbENhbGxiYWNrcyA9IGNh
bGxiYWNrc0Zvcih0aGlzKSwKLSAgICAgICAgICBjYWxsYmFja3MsCi0gICAgICAgICAgaW5kZXg7
Ci0KLSAgICAgIGlmICghY2FsbGJhY2spIHsKLSAgICAgICAgYWxsQ2FsbGJhY2tzW2V2ZW50TmFt
ZV0gPSBbXTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotCi0gICAgICBjYWxsYmFja3MgPSBh
bGxDYWxsYmFja3NbZXZlbnROYW1lXTsKLQotICAgICAgaW5kZXggPSBpbmRleE9mKGNhbGxiYWNr
cywgY2FsbGJhY2spOwotCi0gICAgICBpZiAoaW5kZXggIT09IC0xKSB7Ci0gICAgICAgIGNhbGxi
YWNrcy5zcGxpY2UoaW5kZXgsIDEpOwotICAgICAgfQotICAgIH0sCi0KLSAgICAvKioKLSAgICAg
IFVzZSBgdHJpZ2dlcmAgdG8gZmlyZSBjdXN0b20gZXZlbnRzLiBGb3IgZXhhbXBsZToKLSAgICAg
ICBgYGBqYXZhc2NyaXB0Ci0gICAgICBvYmplY3Qub24oJ2ZvbycsIGZ1bmN0aW9uKCl7Ci0gICAg
ICAgIGNvbnNvbGUubG9nKCdmb28gZXZlbnQgaGFwcGVuZWQhJyk7Ci0gICAgICB9KTsKLSAgICAg
IG9iamVjdC50cmlnZ2VyKCdmb28nKTsKLSAgICAgIC8vICdmb28gZXZlbnQgaGFwcGVuZWQhJyBs
b2dnZWQgdG8gdGhlIGNvbnNvbGUKLSAgICAgIGBgYAotICAgICAgIFlvdSBjYW4gYWxzbyBwYXNz
IGEgdmFsdWUgYXMgYSBzZWNvbmQgYXJndW1lbnQgdG8gYHRyaWdnZXJgIHRoYXQgd2lsbCBiZQot
ICAgICAgcGFzc2VkIGFzIGFuIGFyZ3VtZW50IHRvIGFsbCBldmVudCBsaXN0ZW5lcnMgZm9yIHRo
ZSBldmVudDoKLSAgICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICBvYmplY3Qub24oJ2ZvbycsIGZ1
bmN0aW9uKHZhbHVlKXsKLSAgICAgICAgY29uc29sZS5sb2codmFsdWUubmFtZSk7Ci0gICAgICB9
KTsKLSAgICAgICBvYmplY3QudHJpZ2dlcignZm9vJywgeyBuYW1lOiAnYmFyJyB9KTsKLSAgICAg
IC8vICdiYXInIGxvZ2dlZCB0byB0aGUgY29uc29sZQotICAgICAgYGBgCi0gICAgICAgQG1ldGhv
ZCB0cmlnZ2VyCi0gICAgICBAZm9yIFJTVlAuRXZlbnRUYXJnZXQKLSAgICAgIEBwcml2YXRlCi0g
ICAgICBAcGFyYW0ge1N0cmluZ30gZXZlbnROYW1lIG5hbWUgb2YgdGhlIGV2ZW50IHRvIGJlIHRy
aWdnZXJlZAotICAgICAgQHBhcmFtIHsqfSBvcHRpb25zIG9wdGlvbmFsIHZhbHVlIHRvIGJlIHBh
c3NlZCB0byBhbnkgZXZlbnQgaGFuZGxlcnMgZm9yCi0gICAgICB0aGUgZ2l2ZW4gYGV2ZW50TmFt
ZWAKLSAgICAqLwotICAgICd0cmlnZ2VyJzogZnVuY3Rpb24gKGV2ZW50TmFtZSwgb3B0aW9ucykg
ewotICAgICAgdmFyIGFsbENhbGxiYWNrcyA9IGNhbGxiYWNrc0Zvcih0aGlzKSwKLSAgICAgICAg
ICBjYWxsYmFja3MsCi0gICAgICAgICAgY2FsbGJhY2s7Ci0KLSAgICAgIGlmIChjYWxsYmFja3Mg
PSBhbGxDYWxsYmFja3NbZXZlbnROYW1lXSkgewotICAgICAgICAvLyBEb24ndCBjYWNoZSB0aGUg
Y2FsbGJhY2tzLmxlbmd0aCBzaW5jZSBpdCBtYXkgZ3JvdwotICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IGNhbGxiYWNrcy5sZW5ndGg7IGkrKykgewotICAgICAgICAgIGNhbGxiYWNrID0gY2Fs
bGJhY2tzW2ldOwotCi0gICAgICAgICAgY2FsbGJhY2sob3B0aW9ucyk7Ci0gICAgICAgIH0KLSAg
ICAgIH0KLSAgICB9Ci0gIH07Ci19KTsKLWVuaWZlZCgncnN2cC9maWx0ZXInLCBbJ2V4cG9ydHMn
LCAncnN2cC9wcm9taXNlJywgJ3JzdnAvdXRpbHMnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9yc3Zw
UHJvbWlzZSwgX3JzdnBVdGlscykgewotICAndXNlIHN0cmljdCc7Ci0KLSAgZXhwb3J0cy5kZWZh
dWx0ID0gZmlsdGVyOwotCi0gIC8qKgotICAgYFJTVlAuZmlsdGVyYCBpcyBzaW1pbGFyIHRvIEph
dmFTY3JpcHQncyBuYXRpdmUgYGZpbHRlcmAgbWV0aG9kLCBleGNlcHQgdGhhdCBpdAotICAgIHdh
aXRzIGZvciBhbGwgcHJvbWlzZXMgdG8gYmVjb21lIGZ1bGZpbGxlZCBiZWZvcmUgcnVubmluZyB0
aGUgYGZpbHRlckZuYCBvbgotICAgIGVhY2ggaXRlbSBpbiBnaXZlbiB0byBgcHJvbWlzZXNgLiBg
UlNWUC5maWx0ZXJgIHJldHVybnMgYSBwcm9taXNlIHRoYXQgd2lsbAotICAgIGJlY29tZSBmdWxm
aWxsZWQgd2l0aCB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgYGZpbHRlckZuYCBvbiB0aGUgdmFsdWVz
IHRoZQotICAgIHByb21pc2VzIGJlY29tZSBmdWxmaWxsZWQgd2l0aC4KLSAgCi0gICAgRm9yIGV4
YW1wbGU6Ci0gIAotICAgIGBgYGphdmFzY3JpcHQKLSAgCi0gICAgdmFyIHByb21pc2UxID0gUlNW
UC5yZXNvbHZlKDEpOwotICAgIHZhciBwcm9taXNlMiA9IFJTVlAucmVzb2x2ZSgyKTsKLSAgICB2
YXIgcHJvbWlzZTMgPSBSU1ZQLnJlc29sdmUoMyk7Ci0gIAotICAgIHZhciBwcm9taXNlcyA9IFtw
cm9taXNlMSwgcHJvbWlzZTIsIHByb21pc2UzXTsKLSAgCi0gICAgdmFyIGZpbHRlckZuID0gZnVu
Y3Rpb24oaXRlbSl7Ci0gICAgICByZXR1cm4gaXRlbSA+IDE7Ci0gICAgfTsKLSAgCi0gICAgUlNW
UC5maWx0ZXIocHJvbWlzZXMsIGZpbHRlckZuKS50aGVuKGZ1bmN0aW9uKHJlc3VsdCl7Ci0gICAg
ICAvLyByZXN1bHQgaXMgWyAyLCAzIF0KLSAgICB9KTsKLSAgICBgYGAKLSAgCi0gICAgSWYgYW55
IG9mIHRoZSBgcHJvbWlzZXNgIGdpdmVuIHRvIGBSU1ZQLmZpbHRlcmAgYXJlIHJlamVjdGVkLCB0
aGUgZmlyc3QgcHJvbWlzZQotICAgIHRoYXQgaXMgcmVqZWN0ZWQgd2lsbCBiZSBnaXZlbiBhcyBh
biBhcmd1bWVudCB0byB0aGUgcmV0dXJuZWQgcHJvbWlzZSdzCi0gICAgcmVqZWN0aW9uIGhhbmRs
ZXIuIEZvciBleGFtcGxlOgotICAKLSAgICBgYGBqYXZhc2NyaXB0Ci0gICAgdmFyIHByb21pc2Ux
ID0gUlNWUC5yZXNvbHZlKDEpOwotICAgIHZhciBwcm9taXNlMiA9IFJTVlAucmVqZWN0KG5ldyBF
cnJvcignMicpKTsKLSAgICB2YXIgcHJvbWlzZTMgPSBSU1ZQLnJlamVjdChuZXcgRXJyb3IoJzMn
KSk7Ci0gICAgdmFyIHByb21pc2VzID0gWyBwcm9taXNlMSwgcHJvbWlzZTIsIHByb21pc2UzIF07
Ci0gIAotICAgIHZhciBmaWx0ZXJGbiA9IGZ1bmN0aW9uKGl0ZW0pewotICAgICAgcmV0dXJuIGl0
ZW0gPiAxOwotICAgIH07Ci0gIAotICAgIFJTVlAuZmlsdGVyKHByb21pc2VzLCBmaWx0ZXJGbiku
dGhlbihmdW5jdGlvbihhcnJheSl7Ci0gICAgICAvLyBDb2RlIGhlcmUgbmV2ZXIgcnVucyBiZWNh
dXNlIHRoZXJlIGFyZSByZWplY3RlZCBwcm9taXNlcyEKLSAgICB9LCBmdW5jdGlvbihyZWFzb24p
IHsKLSAgICAgIC8vIHJlYXNvbi5tZXNzYWdlID09PSAnMicKLSAgICB9KTsKLSAgICBgYGAKLSAg
Ci0gICAgYFJTVlAuZmlsdGVyYCB3aWxsIGFsc28gd2FpdCBmb3IgYW55IHByb21pc2VzIHJldHVy
bmVkIGZyb20gYGZpbHRlckZuYC4KLSAgICBGb3IgaW5zdGFuY2UsIHlvdSBtYXkgd2FudCB0byBm
ZXRjaCBhIGxpc3Qgb2YgdXNlcnMgdGhlbiByZXR1cm4gYSBzdWJzZXQKLSAgICBvZiB0aG9zZSB1
c2VycyBiYXNlZCBvbiBzb21lIGFzeW5jaHJvbm91cyBvcGVyYXRpb246Ci0gIAotICAgIGBgYGph
dmFzY3JpcHQKLSAgCi0gICAgdmFyIGFsaWNlID0geyBuYW1lOiAnYWxpY2UnIH07Ci0gICAgdmFy
IGJvYiAgID0geyBuYW1lOiAnYm9iJyB9OwotICAgIHZhciB1c2VycyA9IFsgYWxpY2UsIGJvYiBd
OwotICAKLSAgICB2YXIgcHJvbWlzZXMgPSB1c2Vycy5tYXAoZnVuY3Rpb24odXNlcil7Ci0gICAg
ICByZXR1cm4gUlNWUC5yZXNvbHZlKHVzZXIpOwotICAgIH0pOwotICAKLSAgICB2YXIgZmlsdGVy
Rm4gPSBmdW5jdGlvbih1c2VyKXsKLSAgICAgIC8vIEhlcmUsIEFsaWNlIGhhcyBwZXJtaXNzaW9u
cyB0byBjcmVhdGUgYSBibG9nIHBvc3QsIGJ1dCBCb2IgZG9lcyBub3QuCi0gICAgICByZXR1cm4g
Z2V0UHJpdmlsZWdlc0ZvclVzZXIodXNlcikudGhlbihmdW5jdGlvbihwcml2cyl7Ci0gICAgICAg
IHJldHVybiBwcml2cy5jYW5fY3JlYXRlX2Jsb2dfcG9zdCA9PT0gdHJ1ZTsKLSAgICAgIH0pOwot
ICAgIH07Ci0gICAgUlNWUC5maWx0ZXIocHJvbWlzZXMsIGZpbHRlckZuKS50aGVuKGZ1bmN0aW9u
KHVzZXJzKXsKLSAgICAgIC8vIHRydWUsIGJlY2F1c2UgdGhlIHNlcnZlciB0b2xkIHVzIG9ubHkg
QWxpY2UgY2FuIGNyZWF0ZSBhIGJsb2cgcG9zdC4KLSAgICAgIHVzZXJzLmxlbmd0aCA9PT0gMTsK
LSAgICAgIC8vIGZhbHNlLCBiZWNhdXNlIEFsaWNlIGlzIHRoZSBvbmx5IHVzZXIgcHJlc2VudCBp
biBgdXNlcnNgCi0gICAgICB1c2Vyc1swXSA9PT0gYm9iOwotICAgIH0pOwotICAgIGBgYAotICAK
LSAgICBAbWV0aG9kIGZpbHRlcgotICAgIEBzdGF0aWMKLSAgICBAZm9yIFJTVlAKLSAgICBAcGFy
YW0ge0FycmF5fSBwcm9taXNlcwotICAgIEBwYXJhbSB7RnVuY3Rpb259IGZpbHRlckZuIC0gZnVu
Y3Rpb24gdG8gYmUgY2FsbGVkIG9uIGVhY2ggcmVzb2x2ZWQgdmFsdWUgdG8KLSAgICBmaWx0ZXIg
dGhlIGZpbmFsIHJlc3VsdHMuCi0gICAgQHBhcmFtIHtTdHJpbmd9IGxhYmVsIG9wdGlvbmFsIHN0
cmluZyBkZXNjcmliaW5nIHRoZSBwcm9taXNlLiBVc2VmdWwgZm9yCi0gICAgdG9vbGluZy4KLSAg
ICBAcmV0dXJuIHtQcm9taXNlfQotICAqLwotCi0gIGZ1bmN0aW9uIGZpbHRlcihwcm9taXNlcywg
ZmlsdGVyRm4sIGxhYmVsKSB7Ci0gICAgcmV0dXJuIF9yc3ZwUHJvbWlzZS5kZWZhdWx0LmFsbChw
cm9taXNlcywgbGFiZWwpLnRoZW4oZnVuY3Rpb24gKHZhbHVlcykgewotICAgICAgaWYgKCFfcnN2
cFV0aWxzLmlzRnVuY3Rpb24oZmlsdGVyRm4pKSB7Ci0gICAgICAgIHRocm93IG5ldyBUeXBlRXJy
b3IoIllvdSBtdXN0IHBhc3MgYSBmdW5jdGlvbiBhcyBmaWx0ZXIncyBzZWNvbmQgYXJndW1lbnQu
Iik7Ci0gICAgICB9Ci0KLSAgICAgIHZhciBsZW5ndGggPSB2YWx1ZXMubGVuZ3RoOwotICAgICAg
dmFyIGZpbHRlcmVkID0gbmV3IEFycmF5KGxlbmd0aCk7Ci0KLSAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgZmlsdGVyZWRbaV0gPSBmaWx0ZXJGbih2YWx1
ZXNbaV0pOwotICAgICAgfQotCi0gICAgICByZXR1cm4gX3JzdnBQcm9taXNlLmRlZmF1bHQuYWxs
KGZpbHRlcmVkLCBsYWJlbCkudGhlbihmdW5jdGlvbiAoZmlsdGVyZWQpIHsKLSAgICAgICAgdmFy
IHJlc3VsdHMgPSBuZXcgQXJyYXkobGVuZ3RoKTsKLSAgICAgICAgdmFyIG5ld0xlbmd0aCA9IDA7
Ci0KLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAg
IGlmIChmaWx0ZXJlZFtpXSkgewotICAgICAgICAgICAgcmVzdWx0c1tuZXdMZW5ndGhdID0gdmFs
dWVzW2ldOwotICAgICAgICAgICAgbmV3TGVuZ3RoKys7Ci0gICAgICAgICAgfQotICAgICAgICB9
Ci0KLSAgICAgICAgcmVzdWx0cy5sZW5ndGggPSBuZXdMZW5ndGg7Ci0KLSAgICAgICAgcmV0dXJu
IHJlc3VsdHM7Ci0gICAgICB9KTsKLSAgICB9KTsKLSAgfQotfSk7Ci1lbmlmZWQoJ3JzdnAvaGFz
aC1zZXR0bGVkJywgWydleHBvcnRzJywgJ3JzdnAvcHJvbWlzZScsICdyc3ZwL2VudW1lcmF0b3In
LCAncnN2cC9wcm9taXNlLWhhc2gnLCAncnN2cC91dGlscyddLCBmdW5jdGlvbiAoZXhwb3J0cywg
X3JzdnBQcm9taXNlLCBfcnN2cEVudW1lcmF0b3IsIF9yc3ZwUHJvbWlzZUhhc2gsIF9yc3ZwVXRp
bHMpIHsKLSAgJ3VzZSBzdHJpY3QnOwotCi0gIGV4cG9ydHMuZGVmYXVsdCA9IGhhc2hTZXR0bGVk
OwotCi0gIGZ1bmN0aW9uIEhhc2hTZXR0bGVkKENvbnN0cnVjdG9yLCBvYmplY3QsIGxhYmVsKSB7
Ci0gICAgdGhpcy5fc3VwZXJDb25zdHJ1Y3RvcihDb25zdHJ1Y3Rvciwgb2JqZWN0LCBmYWxzZSwg
bGFiZWwpOwotICB9Ci0KLSAgSGFzaFNldHRsZWQucHJvdG90eXBlID0gX3JzdnBVdGlscy5vX2Ny
ZWF0ZShfcnN2cFByb21pc2VIYXNoLmRlZmF1bHQucHJvdG90eXBlKTsKLSAgSGFzaFNldHRsZWQu
cHJvdG90eXBlLl9zdXBlckNvbnN0cnVjdG9yID0gX3JzdnBFbnVtZXJhdG9yLmRlZmF1bHQ7Ci0g
IEhhc2hTZXR0bGVkLnByb3RvdHlwZS5fbWFrZVJlc3VsdCA9IF9yc3ZwRW51bWVyYXRvci5tYWtl
U2V0dGxlZFJlc3VsdDsKLQotICBIYXNoU2V0dGxlZC5wcm90b3R5cGUuX3ZhbGlkYXRpb25FcnJv
ciA9IGZ1bmN0aW9uICgpIHsKLSAgICByZXR1cm4gbmV3IEVycm9yKCdoYXNoU2V0dGxlZCBtdXN0
IGJlIGNhbGxlZCB3aXRoIGFuIG9iamVjdCcpOwotICB9OwotCi0gIC8qKgotICAgIGBSU1ZQLmhh
c2hTZXR0bGVkYCBpcyBzaW1pbGFyIHRvIGBSU1ZQLmFsbFNldHRsZWRgLCBidXQgdGFrZXMgYW4g
b2JqZWN0Ci0gICAgaW5zdGVhZCBvZiBhbiBhcnJheSBmb3IgaXRzIGBwcm9taXNlc2AgYXJndW1l
bnQuCi0gIAotICAgIFVubGlrZSBgUlNWUC5hbGxgIG9yIGBSU1ZQLmhhc2hgLCB3aGljaCBpbXBs
ZW1lbnQgYSBmYWlsLWZhc3QgbWV0aG9kLAotICAgIGJ1dCBsaWtlIGBSU1ZQLmFsbFNldHRsZWRg
LCBgaGFzaFNldHRsZWRgIHdhaXRzIHVudGlsIGFsbCB0aGUKLSAgICBjb25zdGl0dWVudCBwcm9t
aXNlcyBoYXZlIHJldHVybmVkIGFuZCB0aGVuIHNob3dzIHlvdSBhbGwgdGhlIHJlc3VsdHMKLSAg
ICB3aXRoIHRoZWlyIHN0YXRlcyBhbmQgdmFsdWVzL3JlYXNvbnMuIFRoaXMgaXMgdXNlZnVsIGlm
IHlvdSB3YW50IHRvCi0gICAgaGFuZGxlIG11bHRpcGxlIHByb21pc2VzJyBmYWlsdXJlIHN0YXRl
cyB0b2dldGhlciBhcyBhIHNldC4KLSAgCi0gICAgUmV0dXJucyBhIHByb21pc2UgdGhhdCBpcyBm
dWxmaWxsZWQgd2hlbiBhbGwgdGhlIGdpdmVuIHByb21pc2VzIGhhdmUgYmVlbgotICAgIHNldHRs
ZWQsIG9yIHJlamVjdGVkIGlmIHRoZSBwYXNzZWQgcGFyYW1ldGVycyBhcmUgaW52YWxpZC4KLSAg
Ci0gICAgVGhlIHJldHVybmVkIHByb21pc2UgaXMgZnVsZmlsbGVkIHdpdGggYSBoYXNoIHRoYXQg
aGFzIHRoZSBzYW1lIGtleSBuYW1lcyBhcwotICAgIHRoZSBgcHJvbWlzZXNgIG9iamVjdCBhcmd1
bWVudC4gSWYgYW55IG9mIHRoZSB2YWx1ZXMgaW4gdGhlIG9iamVjdCBhcmUgbm90Ci0gICAgcHJv
bWlzZXMsIHRoZXkgd2lsbCBiZSBjb3BpZWQgb3ZlciB0byB0aGUgZnVsZmlsbGVkIG9iamVjdCBh
bmQgbWFya2VkIHdpdGggc3RhdGUKLSAgICAnZnVsZmlsbGVkJy4KLSAgCi0gICAgRXhhbXBsZToK
LSAgCi0gICAgYGBgamF2YXNjcmlwdAotICAgIHZhciBwcm9taXNlcyA9IHsKLSAgICAgIG15UHJv
bWlzZTogUlNWUC5Qcm9taXNlLnJlc29sdmUoMSksCi0gICAgICB5b3VyUHJvbWlzZTogUlNWUC5Q
cm9taXNlLnJlc29sdmUoMiksCi0gICAgICB0aGVpclByb21pc2U6IFJTVlAuUHJvbWlzZS5yZXNv
bHZlKDMpLAotICAgICAgbm90QVByb21pc2U6IDQKLSAgICB9OwotICAKLSAgICBSU1ZQLmhhc2hT
ZXR0bGVkKHByb21pc2VzKS50aGVuKGZ1bmN0aW9uKGhhc2gpewotICAgICAgLy8gaGFzaCBoZXJl
IGlzIGFuIG9iamVjdCB0aGF0IGxvb2tzIGxpa2U6Ci0gICAgICAvLyB7Ci0gICAgICAvLyAgIG15
UHJvbWlzZTogeyBzdGF0ZTogJ2Z1bGZpbGxlZCcsIHZhbHVlOiAxIH0sCi0gICAgICAvLyAgIHlv
dXJQcm9taXNlOiB7IHN0YXRlOiAnZnVsZmlsbGVkJywgdmFsdWU6IDIgfSwKLSAgICAgIC8vICAg
dGhlaXJQcm9taXNlOiB7IHN0YXRlOiAnZnVsZmlsbGVkJywgdmFsdWU6IDMgfSwKLSAgICAgIC8v
ICAgbm90QVByb21pc2U6IHsgc3RhdGU6ICdmdWxmaWxsZWQnLCB2YWx1ZTogNCB9Ci0gICAgICAv
LyB9Ci0gICAgfSk7Ci0gICAgYGBgCi0gIAotICAgIElmIGFueSBvZiB0aGUgYHByb21pc2VzYCBn
aXZlbiB0byBgUlNWUC5oYXNoYCBhcmUgcmVqZWN0ZWQsIHRoZSBzdGF0ZSB3aWxsCi0gICAgYmUg
c2V0IHRvICdyZWplY3RlZCcgYW5kIHRoZSByZWFzb24gZm9yIHJlamVjdGlvbiBwcm92aWRlZC4K
LSAgCi0gICAgRXhhbXBsZToKLSAgCi0gICAgYGBgamF2YXNjcmlwdAotICAgIHZhciBwcm9taXNl
cyA9IHsKLSAgICAgIG15UHJvbWlzZTogUlNWUC5Qcm9taXNlLnJlc29sdmUoMSksCi0gICAgICBy
ZWplY3RlZFByb21pc2U6IFJTVlAuUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCdyZWplY3Rpb24n
KSksCi0gICAgICBhbm90aGVyUmVqZWN0ZWRQcm9taXNlOiBSU1ZQLlByb21pc2UucmVqZWN0KG5l
dyBFcnJvcignbW9yZSByZWplY3Rpb24nKSksCi0gICAgfTsKLSAgCi0gICAgUlNWUC5oYXNoU2V0
dGxlZChwcm9taXNlcykudGhlbihmdW5jdGlvbihoYXNoKXsKLSAgICAgIC8vIGhhc2ggaGVyZSBp
cyBhbiBvYmplY3QgdGhhdCBsb29rcyBsaWtlOgotICAgICAgLy8gewotICAgICAgLy8gICBteVBy
b21pc2U6ICAgICAgICAgICAgICB7IHN0YXRlOiAnZnVsZmlsbGVkJywgdmFsdWU6IDEgfSwKLSAg
ICAgIC8vICAgcmVqZWN0ZWRQcm9taXNlOiAgICAgICAgeyBzdGF0ZTogJ3JlamVjdGVkJywgcmVh
c29uOiBFcnJvciB9LAotICAgICAgLy8gICBhbm90aGVyUmVqZWN0ZWRQcm9taXNlOiB7IHN0YXRl
OiAncmVqZWN0ZWQnLCByZWFzb246IEVycm9yIH0sCi0gICAgICAvLyB9Ci0gICAgICAvLyBOb3Rl
IHRoYXQgZm9yIHJlamVjdGVkUHJvbWlzZSwgcmVhc29uLm1lc3NhZ2UgPT0gJ3JlamVjdGlvbics
Ci0gICAgICAvLyBhbmQgZm9yIGFub3RoZXJSZWplY3RlZFByb21pc2UsIHJlYXNvbi5tZXNzYWdl
ID09ICdtb3JlIHJlamVjdGlvbicuCi0gICAgfSk7Ci0gICAgYGBgCi0gIAotICAgIEFuIGltcG9y
dGFudCBub3RlOiBgUlNWUC5oYXNoU2V0dGxlZGAgaXMgaW50ZW5kZWQgZm9yIHBsYWluIEphdmFT
Y3JpcHQgb2JqZWN0cyB0aGF0Ci0gICAgYXJlIGp1c3QgYSBzZXQgb2Yga2V5cyBhbmQgdmFsdWVz
LiBgUlNWUC5oYXNoU2V0dGxlZGAgd2lsbCBOT1QgcHJlc2VydmUgcHJvdG90eXBlCi0gICAgY2hh
aW5zLgotICAKLSAgICBFeGFtcGxlOgotICAKLSAgICBgYGBqYXZhc2NyaXB0Ci0gICAgZnVuY3Rp
b24gTXlDb25zdHJ1Y3RvcigpewotICAgICAgdGhpcy5leGFtcGxlID0gUlNWUC5Qcm9taXNlLnJl
c29sdmUoJ0V4YW1wbGUnKTsKLSAgICB9Ci0gIAotICAgIE15Q29uc3RydWN0b3IucHJvdG90eXBl
ID0gewotICAgICAgcHJvdG9Qcm9wZXJ0eTogUlNWUC5Qcm9taXNlLnJlc29sdmUoJ1Byb3RvIFBy
b3BlcnR5JykKLSAgICB9OwotICAKLSAgICB2YXIgbXlPYmplY3QgPSBuZXcgTXlDb25zdHJ1Y3Rv
cigpOwotICAKLSAgICBSU1ZQLmhhc2hTZXR0bGVkKG15T2JqZWN0KS50aGVuKGZ1bmN0aW9uKGhh
c2gpewotICAgICAgLy8gcHJvdG9Qcm9wZXJ0eSB3aWxsIG5vdCBiZSBwcmVzZW50LCBpbnN0ZWFk
IHlvdSB3aWxsIGp1c3QgaGF2ZSBhbgotICAgICAgLy8gb2JqZWN0IHRoYXQgbG9va3MgbGlrZToK
LSAgICAgIC8vIHsKLSAgICAgIC8vICAgZXhhbXBsZTogeyBzdGF0ZTogJ2Z1bGZpbGxlZCcsIHZh
bHVlOiAnRXhhbXBsZScgfQotICAgICAgLy8gfQotICAgICAgLy8KLSAgICAgIC8vIGhhc2guaGFz
T3duUHJvcGVydHkoJ3Byb3RvUHJvcGVydHknKTsgLy8gZmFsc2UKLSAgICAgIC8vICd1bmRlZmlu
ZWQnID09PSB0eXBlb2YgaGFzaC5wcm90b1Byb3BlcnR5Ci0gICAgfSk7Ci0gICAgYGBgCi0gIAot
ICAgIEBtZXRob2QgaGFzaFNldHRsZWQKLSAgICBAZm9yIFJTVlAKLSAgICBAcGFyYW0ge09iamVj
dH0gb2JqZWN0Ci0gICAgQHBhcmFtIHtTdHJpbmd9IGxhYmVsIG9wdGlvbmFsIHN0cmluZyB0aGF0
IGRlc2NyaWJlcyB0aGUgcHJvbWlzZS4KLSAgICBVc2VmdWwgZm9yIHRvb2xpbmcuCi0gICAgQHJl
dHVybiB7UHJvbWlzZX0gcHJvbWlzZSB0aGF0IGlzIGZ1bGZpbGxlZCB3aGVuIHdoZW4gYWxsIHBy
b3BlcnRpZXMgb2YgYHByb21pc2VzYAotICAgIGhhdmUgYmVlbiBzZXR0bGVkLgotICAgIEBzdGF0
aWMKLSAgKi8KLQotICBmdW5jdGlvbiBoYXNoU2V0dGxlZChvYmplY3QsIGxhYmVsKSB7Ci0gICAg
cmV0dXJuIG5ldyBIYXNoU2V0dGxlZChfcnN2cFByb21pc2UuZGVmYXVsdCwgb2JqZWN0LCBsYWJl
bCkucHJvbWlzZTsKLSAgfQotfSk7Ci1lbmlmZWQoJ3JzdnAvaGFzaCcsIFsnZXhwb3J0cycsICdy
c3ZwL3Byb21pc2UnLCAncnN2cC9wcm9taXNlLWhhc2gnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9y
c3ZwUHJvbWlzZSwgX3JzdnBQcm9taXNlSGFzaCkgewotICAndXNlIHN0cmljdCc7Ci0KLSAgZXhw
b3J0cy5kZWZhdWx0ID0gaGFzaDsKLQotICAvKioKLSAgICBgUlNWUC5oYXNoYCBpcyBzaW1pbGFy
IHRvIGBSU1ZQLmFsbGAsIGJ1dCB0YWtlcyBhbiBvYmplY3QgaW5zdGVhZCBvZiBhbiBhcnJheQot
ICAgIGZvciBpdHMgYHByb21pc2VzYCBhcmd1bWVudC4KLSAgCi0gICAgUmV0dXJucyBhIHByb21p
c2UgdGhhdCBpcyBmdWxmaWxsZWQgd2hlbiBhbGwgdGhlIGdpdmVuIHByb21pc2VzIGhhdmUgYmVl
bgotICAgIGZ1bGZpbGxlZCwgb3IgcmVqZWN0ZWQgaWYgYW55IG9mIHRoZW0gYmVjb21lIHJlamVj
dGVkLiBUaGUgcmV0dXJuZWQgcHJvbWlzZQotICAgIGlzIGZ1bGZpbGxlZCB3aXRoIGEgaGFzaCB0
aGF0IGhhcyB0aGUgc2FtZSBrZXkgbmFtZXMgYXMgdGhlIGBwcm9taXNlc2Agb2JqZWN0Ci0gICAg
YXJndW1lbnQuIElmIGFueSBvZiB0aGUgdmFsdWVzIGluIHRoZSBvYmplY3QgYXJlIG5vdCBwcm9t
aXNlcywgdGhleSB3aWxsCi0gICAgc2ltcGx5IGJlIGNvcGllZCBvdmVyIHRvIHRoZSBmdWxmaWxs
ZWQgb2JqZWN0LgotICAKLSAgICBFeGFtcGxlOgotICAKLSAgICBgYGBqYXZhc2NyaXB0Ci0gICAg
dmFyIHByb21pc2VzID0gewotICAgICAgbXlQcm9taXNlOiBSU1ZQLnJlc29sdmUoMSksCi0gICAg
ICB5b3VyUHJvbWlzZTogUlNWUC5yZXNvbHZlKDIpLAotICAgICAgdGhlaXJQcm9taXNlOiBSU1ZQ
LnJlc29sdmUoMyksCi0gICAgICBub3RBUHJvbWlzZTogNAotICAgIH07Ci0gIAotICAgIFJTVlAu
aGFzaChwcm9taXNlcykudGhlbihmdW5jdGlvbihoYXNoKXsKLSAgICAgIC8vIGhhc2ggaGVyZSBp
cyBhbiBvYmplY3QgdGhhdCBsb29rcyBsaWtlOgotICAgICAgLy8gewotICAgICAgLy8gICBteVBy
b21pc2U6IDEsCi0gICAgICAvLyAgIHlvdXJQcm9taXNlOiAyLAotICAgICAgLy8gICB0aGVpclBy
b21pc2U6IDMsCi0gICAgICAvLyAgIG5vdEFQcm9taXNlOiA0Ci0gICAgICAvLyB9Ci0gICAgfSk7
Ci0gICAgYGBgYAotICAKLSAgICBJZiBhbnkgb2YgdGhlIGBwcm9taXNlc2AgZ2l2ZW4gdG8gYFJT
VlAuaGFzaGAgYXJlIHJlamVjdGVkLCB0aGUgZmlyc3QgcHJvbWlzZQotICAgIHRoYXQgaXMgcmVq
ZWN0ZWQgd2lsbCBiZSBnaXZlbiBhcyB0aGUgcmVhc29uIHRvIHRoZSByZWplY3Rpb24gaGFuZGxl
ci4KLSAgCi0gICAgRXhhbXBsZToKLSAgCi0gICAgYGBgamF2YXNjcmlwdAotICAgIHZhciBwcm9t
aXNlcyA9IHsKLSAgICAgIG15UHJvbWlzZTogUlNWUC5yZXNvbHZlKDEpLAotICAgICAgcmVqZWN0
ZWRQcm9taXNlOiBSU1ZQLnJlamVjdChuZXcgRXJyb3IoJ3JlamVjdGVkUHJvbWlzZScpKSwKLSAg
ICAgIGFub3RoZXJSZWplY3RlZFByb21pc2U6IFJTVlAucmVqZWN0KG5ldyBFcnJvcignYW5vdGhl
clJlamVjdGVkUHJvbWlzZScpKSwKLSAgICB9OwotICAKLSAgICBSU1ZQLmhhc2gocHJvbWlzZXMp
LnRoZW4oZnVuY3Rpb24oaGFzaCl7Ci0gICAgICAvLyBDb2RlIGhlcmUgbmV2ZXIgcnVucyBiZWNh
dXNlIHRoZXJlIGFyZSByZWplY3RlZCBwcm9taXNlcyEKLSAgICB9LCBmdW5jdGlvbihyZWFzb24p
IHsKLSAgICAgIC8vIHJlYXNvbi5tZXNzYWdlID09PSAncmVqZWN0ZWRQcm9taXNlJwotICAgIH0p
OwotICAgIGBgYAotICAKLSAgICBBbiBpbXBvcnRhbnQgbm90ZTogYFJTVlAuaGFzaGAgaXMgaW50
ZW5kZWQgZm9yIHBsYWluIEphdmFTY3JpcHQgb2JqZWN0cyB0aGF0Ci0gICAgYXJlIGp1c3QgYSBz
ZXQgb2Yga2V5cyBhbmQgdmFsdWVzLiBgUlNWUC5oYXNoYCB3aWxsIE5PVCBwcmVzZXJ2ZSBwcm90
b3R5cGUKLSAgICBjaGFpbnMuCi0gIAotICAgIEV4YW1wbGU6Ci0gIAotICAgIGBgYGphdmFzY3Jp
cHQKLSAgICBmdW5jdGlvbiBNeUNvbnN0cnVjdG9yKCl7Ci0gICAgICB0aGlzLmV4YW1wbGUgPSBS
U1ZQLnJlc29sdmUoJ0V4YW1wbGUnKTsKLSAgICB9Ci0gIAotICAgIE15Q29uc3RydWN0b3IucHJv
dG90eXBlID0gewotICAgICAgcHJvdG9Qcm9wZXJ0eTogUlNWUC5yZXNvbHZlKCdQcm90byBQcm9w
ZXJ0eScpCi0gICAgfTsKLSAgCi0gICAgdmFyIG15T2JqZWN0ID0gbmV3IE15Q29uc3RydWN0b3Io
KTsKLSAgCi0gICAgUlNWUC5oYXNoKG15T2JqZWN0KS50aGVuKGZ1bmN0aW9uKGhhc2gpewotICAg
ICAgLy8gcHJvdG9Qcm9wZXJ0eSB3aWxsIG5vdCBiZSBwcmVzZW50LCBpbnN0ZWFkIHlvdSB3aWxs
IGp1c3QgaGF2ZSBhbgotICAgICAgLy8gb2JqZWN0IHRoYXQgbG9va3MgbGlrZToKLSAgICAgIC8v
IHsKLSAgICAgIC8vICAgZXhhbXBsZTogJ0V4YW1wbGUnCi0gICAgICAvLyB9Ci0gICAgICAvLwot
ICAgICAgLy8gaGFzaC5oYXNPd25Qcm9wZXJ0eSgncHJvdG9Qcm9wZXJ0eScpOyAvLyBmYWxzZQot
ICAgICAgLy8gJ3VuZGVmaW5lZCcgPT09IHR5cGVvZiBoYXNoLnByb3RvUHJvcGVydHkKLSAgICB9
KTsKLSAgICBgYGAKLSAgCi0gICAgQG1ldGhvZCBoYXNoCi0gICAgQHN0YXRpYwotICAgIEBmb3Ig
UlNWUAotICAgIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QKLSAgICBAcGFyYW0ge1N0cmluZ30gbGFi
ZWwgb3B0aW9uYWwgc3RyaW5nIHRoYXQgZGVzY3JpYmVzIHRoZSBwcm9taXNlLgotICAgIFVzZWZ1
bCBmb3IgdG9vbGluZy4KLSAgICBAcmV0dXJuIHtQcm9taXNlfSBwcm9taXNlIHRoYXQgaXMgZnVs
ZmlsbGVkIHdoZW4gYWxsIHByb3BlcnRpZXMgb2YgYHByb21pc2VzYAotICAgIGhhdmUgYmVlbiBm
dWxmaWxsZWQsIG9yIHJlamVjdGVkIGlmIGFueSBvZiB0aGVtIGJlY29tZSByZWplY3RlZC4KLSAg
Ki8KLQotICBmdW5jdGlvbiBoYXNoKG9iamVjdCwgbGFiZWwpIHsKLSAgICByZXR1cm4gbmV3IF9y
c3ZwUHJvbWlzZUhhc2guZGVmYXVsdChfcnN2cFByb21pc2UuZGVmYXVsdCwgb2JqZWN0LCBsYWJl
bCkucHJvbWlzZTsKLSAgfQotfSk7Ci1lbmlmZWQoJ3JzdnAvaW5zdHJ1bWVudCcsIFsnZXhwb3J0
cycsICdyc3ZwL2NvbmZpZycsICdyc3ZwL3V0aWxzJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfcnN2
cENvbmZpZywgX3JzdnBVdGlscykgewotICAndXNlIHN0cmljdCc7Ci0KLSAgZXhwb3J0cy5kZWZh
dWx0ID0gaW5zdHJ1bWVudDsKLQotICB2YXIgcXVldWUgPSBbXTsKLQotICBmdW5jdGlvbiBzY2hl
ZHVsZUZsdXNoKCkgewotICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewotICAgICAgdmFyIGVu
dHJ5OwotICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWV1ZS5sZW5ndGg7IGkrKykgewotICAg
ICAgICBlbnRyeSA9IHF1ZXVlW2ldOwotCi0gICAgICAgIHZhciBwYXlsb2FkID0gZW50cnkucGF5
bG9hZDsKLQotICAgICAgICBwYXlsb2FkLmd1aWQgPSBwYXlsb2FkLmtleSArIHBheWxvYWQuaWQ7
Ci0gICAgICAgIHBheWxvYWQuY2hpbGRHdWlkID0gcGF5bG9hZC5rZXkgKyBwYXlsb2FkLmNoaWxk
SWQ7Ci0gICAgICAgIGlmIChwYXlsb2FkLmVycm9yKSB7Ci0gICAgICAgICAgcGF5bG9hZC5zdGFj
ayA9IHBheWxvYWQuZXJyb3Iuc3RhY2s7Ci0gICAgICAgIH0KLQotICAgICAgICBfcnN2cENvbmZp
Zy5jb25maWdbJ3RyaWdnZXInXShlbnRyeS5uYW1lLCBlbnRyeS5wYXlsb2FkKTsKLSAgICAgIH0K
LSAgICAgIHF1ZXVlLmxlbmd0aCA9IDA7Ci0gICAgfSwgNTApOwotICB9Ci0KLSAgZnVuY3Rpb24g
aW5zdHJ1bWVudChldmVudE5hbWUsIHByb21pc2UsIGNoaWxkKSB7Ci0gICAgaWYgKDEgPT09IHF1
ZXVlLnB1c2goewotICAgICAgbmFtZTogZXZlbnROYW1lLAotICAgICAgcGF5bG9hZDogewotICAg
ICAgICBrZXk6IHByb21pc2UuX2d1aWRLZXksCi0gICAgICAgIGlkOiBwcm9taXNlLl9pZCwKLSAg
ICAgICAgZXZlbnROYW1lOiBldmVudE5hbWUsCi0gICAgICAgIGRldGFpbDogcHJvbWlzZS5fcmVz
dWx0LAotICAgICAgICBjaGlsZElkOiBjaGlsZCAmJiBjaGlsZC5faWQsCi0gICAgICAgIGxhYmVs
OiBwcm9taXNlLl9sYWJlbCwKLSAgICAgICAgdGltZVN0YW1wOiBfcnN2cFV0aWxzLm5vdygpLAot
ICAgICAgICBlcnJvcjogX3JzdnBDb25maWcuY29uZmlnWyJpbnN0cnVtZW50LXdpdGgtc3RhY2si
XSA/IG5ldyBFcnJvcihwcm9taXNlLl9sYWJlbCkgOiBudWxsCi0gICAgICB9IH0pKSB7Ci0gICAg
ICBzY2hlZHVsZUZsdXNoKCk7Ci0gICAgfQotICB9Ci19KTsKLWVuaWZlZCgncnN2cC9tYXAnLCBb
J2V4cG9ydHMnLCAncnN2cC9wcm9taXNlJywgJ3JzdnAvdXRpbHMnXSwgZnVuY3Rpb24gKGV4cG9y
dHMsIF9yc3ZwUHJvbWlzZSwgX3JzdnBVdGlscykgewotICAndXNlIHN0cmljdCc7Ci0KLSAgZXhw
b3J0cy5kZWZhdWx0ID0gbWFwOwotCi0gIC8qKgotICAgYFJTVlAubWFwYCBpcyBzaW1pbGFyIHRv
IEphdmFTY3JpcHQncyBuYXRpdmUgYG1hcGAgbWV0aG9kLCBleGNlcHQgdGhhdCBpdAotICAgIHdh
aXRzIGZvciBhbGwgcHJvbWlzZXMgdG8gYmVjb21lIGZ1bGZpbGxlZCBiZWZvcmUgcnVubmluZyB0
aGUgYG1hcEZuYCBvbgotICAgIGVhY2ggaXRlbSBpbiBnaXZlbiB0byBgcHJvbWlzZXNgLiBgUlNW
UC5tYXBgIHJldHVybnMgYSBwcm9taXNlIHRoYXQgd2lsbAotICAgIGJlY29tZSBmdWxmaWxsZWQg
d2l0aCB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgYG1hcEZuYCBvbiB0aGUgdmFsdWVzIHRoZSBwcm9t
aXNlcwotICAgIGJlY29tZSBmdWxmaWxsZWQgd2l0aC4KLSAgCi0gICAgRm9yIGV4YW1wbGU6Ci0g
IAotICAgIGBgYGphdmFzY3JpcHQKLSAgCi0gICAgdmFyIHByb21pc2UxID0gUlNWUC5yZXNvbHZl
KDEpOwotICAgIHZhciBwcm9taXNlMiA9IFJTVlAucmVzb2x2ZSgyKTsKLSAgICB2YXIgcHJvbWlz
ZTMgPSBSU1ZQLnJlc29sdmUoMyk7Ci0gICAgdmFyIHByb21pc2VzID0gWyBwcm9taXNlMSwgcHJv
bWlzZTIsIHByb21pc2UzIF07Ci0gIAotICAgIHZhciBtYXBGbiA9IGZ1bmN0aW9uKGl0ZW0pewot
ICAgICAgcmV0dXJuIGl0ZW0gKyAxOwotICAgIH07Ci0gIAotICAgIFJTVlAubWFwKHByb21pc2Vz
LCBtYXBGbikudGhlbihmdW5jdGlvbihyZXN1bHQpewotICAgICAgLy8gcmVzdWx0IGlzIFsgMiwg
MywgNCBdCi0gICAgfSk7Ci0gICAgYGBgCi0gIAotICAgIElmIGFueSBvZiB0aGUgYHByb21pc2Vz
YCBnaXZlbiB0byBgUlNWUC5tYXBgIGFyZSByZWplY3RlZCwgdGhlIGZpcnN0IHByb21pc2UKLSAg
ICB0aGF0IGlzIHJlamVjdGVkIHdpbGwgYmUgZ2l2ZW4gYXMgYW4gYXJndW1lbnQgdG8gdGhlIHJl
dHVybmVkIHByb21pc2UncwotICAgIHJlamVjdGlvbiBoYW5kbGVyLiBGb3IgZXhhbXBsZToKLSAg
Ci0gICAgYGBgamF2YXNjcmlwdAotICAgIHZhciBwcm9taXNlMSA9IFJTVlAucmVzb2x2ZSgxKTsK
LSAgICB2YXIgcHJvbWlzZTIgPSBSU1ZQLnJlamVjdChuZXcgRXJyb3IoJzInKSk7Ci0gICAgdmFy
IHByb21pc2UzID0gUlNWUC5yZWplY3QobmV3IEVycm9yKCczJykpOwotICAgIHZhciBwcm9taXNl
cyA9IFsgcHJvbWlzZTEsIHByb21pc2UyLCBwcm9taXNlMyBdOwotICAKLSAgICB2YXIgbWFwRm4g
PSBmdW5jdGlvbihpdGVtKXsKLSAgICAgIHJldHVybiBpdGVtICsgMTsKLSAgICB9OwotICAKLSAg
ICBSU1ZQLm1hcChwcm9taXNlcywgbWFwRm4pLnRoZW4oZnVuY3Rpb24oYXJyYXkpewotICAgICAg
Ly8gQ29kZSBoZXJlIG5ldmVyIHJ1bnMgYmVjYXVzZSB0aGVyZSBhcmUgcmVqZWN0ZWQgcHJvbWlz
ZXMhCi0gICAgfSwgZnVuY3Rpb24ocmVhc29uKSB7Ci0gICAgICAvLyByZWFzb24ubWVzc2FnZSA9
PT0gJzInCi0gICAgfSk7Ci0gICAgYGBgCi0gIAotICAgIGBSU1ZQLm1hcGAgd2lsbCBhbHNvIHdh
aXQgaWYgYSBwcm9taXNlIGlzIHJldHVybmVkIGZyb20gYG1hcEZuYC4gRm9yIGV4YW1wbGUsCi0g
ICAgc2F5IHlvdSB3YW50IHRvIGdldCBhbGwgY29tbWVudHMgZnJvbSBhIHNldCBvZiBibG9nIHBv
c3RzLCBidXQgeW91IG5lZWQKLSAgICB0aGUgYmxvZyBwb3N0cyBmaXJzdCBiZWNhdXNlIHRoZXkg
Y29udGFpbiBhIHVybCB0byB0aG9zZSBjb21tZW50cy4KLSAgCi0gICAgYGBgamF2c2NyaXB0Ci0g
IAotICAgIHZhciBtYXBGbiA9IGZ1bmN0aW9uKGJsb2dQb3N0KXsKLSAgICAgIC8vIGdldENvbW1l
bnRzIGRvZXMgc29tZSBhamF4IGFuZCByZXR1cm5zIGFuIFJTVlAuUHJvbWlzZSB0aGF0IGlzIGZ1
bGZpbGxlZAotICAgICAgLy8gd2l0aCBzb21lIGNvbW1lbnRzIGRhdGEKLSAgICAgIHJldHVybiBn
ZXRDb21tZW50cyhibG9nUG9zdC5jb21tZW50c191cmwpOwotICAgIH07Ci0gIAotICAgIC8vIGdl
dEJsb2dQb3N0cyBkb2VzIHNvbWUgYWpheCBhbmQgcmV0dXJucyBhbiBSU1ZQLlByb21pc2UgdGhh
dCBpcyBmdWxmaWxsZWQKLSAgICAvLyB3aXRoIHNvbWUgYmxvZyBwb3N0IGRhdGEKLSAgICBSU1ZQ
Lm1hcChnZXRCbG9nUG9zdHMoKSwgbWFwRm4pLnRoZW4oZnVuY3Rpb24oY29tbWVudHMpewotICAg
ICAgLy8gY29tbWVudHMgaXMgdGhlIHJlc3VsdCBvZiBhc2tpbmcgdGhlIHNlcnZlciBmb3IgdGhl
IGNvbW1lbnRzCi0gICAgICAvLyBvZiBhbGwgYmxvZyBwb3N0cyByZXR1cm5lZCBmcm9tIGdldEJs
b2dQb3N0cygpCi0gICAgfSk7Ci0gICAgYGBgCi0gIAotICAgIEBtZXRob2QgbWFwCi0gICAgQHN0
YXRpYwotICAgIEBmb3IgUlNWUAotICAgIEBwYXJhbSB7QXJyYXl9IHByb21pc2VzCi0gICAgQHBh
cmFtIHtGdW5jdGlvbn0gbWFwRm4gZnVuY3Rpb24gdG8gYmUgY2FsbGVkIG9uIGVhY2ggZnVsZmls
bGVkIHByb21pc2UuCi0gICAgQHBhcmFtIHtTdHJpbmd9IGxhYmVsIG9wdGlvbmFsIHN0cmluZyBm
b3IgbGFiZWxpbmcgdGhlIHByb21pc2UuCi0gICAgVXNlZnVsIGZvciB0b29saW5nLgotICAgIEBy
ZXR1cm4ge1Byb21pc2V9IHByb21pc2UgdGhhdCBpcyBmdWxmaWxsZWQgd2l0aCB0aGUgcmVzdWx0
IG9mIGNhbGxpbmcKLSAgICBgbWFwRm5gIG9uIGVhY2ggZnVsZmlsbGVkIHByb21pc2Ugb3IgdmFs
dWUgd2hlbiB0aGV5IGJlY29tZSBmdWxmaWxsZWQuCi0gICAgIFRoZSBwcm9taXNlIHdpbGwgYmUg
cmVqZWN0ZWQgaWYgYW55IG9mIHRoZSBnaXZlbiBgcHJvbWlzZXNgIGJlY29tZSByZWplY3RlZC4K
LSAgICBAc3RhdGljCi0gICovCi0KLSAgZnVuY3Rpb24gbWFwKHByb21pc2VzLCBtYXBGbiwgbGFi
ZWwpIHsKLSAgICByZXR1cm4gX3JzdnBQcm9taXNlLmRlZmF1bHQuYWxsKHByb21pc2VzLCBsYWJl
bCkudGhlbihmdW5jdGlvbiAodmFsdWVzKSB7Ci0gICAgICBpZiAoIV9yc3ZwVXRpbHMuaXNGdW5j
dGlvbihtYXBGbikpIHsKLSAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiWW91IG11c3QgcGFz
cyBhIGZ1bmN0aW9uIGFzIG1hcCdzIHNlY29uZCBhcmd1bWVudC4iKTsKLSAgICAgIH0KLQotICAg
ICAgdmFyIGxlbmd0aCA9IHZhbHVlcy5sZW5ndGg7Ci0gICAgICB2YXIgcmVzdWx0cyA9IG5ldyBB
cnJheShsZW5ndGgpOwotCi0gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7
Ci0gICAgICAgIHJlc3VsdHNbaV0gPSBtYXBGbih2YWx1ZXNbaV0pOwotICAgICAgfQotCi0gICAg
ICByZXR1cm4gX3JzdnBQcm9taXNlLmRlZmF1bHQuYWxsKHJlc3VsdHMsIGxhYmVsKTsKLSAgICB9
KTsKLSAgfQotfSk7Ci1lbmlmZWQoJ3JzdnAvbm9kZScsIFsnZXhwb3J0cycsICdyc3ZwL3Byb21p
c2UnLCAncnN2cC8taW50ZXJuYWwnLCAncnN2cC91dGlscyddLCBmdW5jdGlvbiAoZXhwb3J0cywg
X3JzdnBQcm9taXNlLCBfcnN2cEludGVybmFsLCBfcnN2cFV0aWxzKSB7Ci0gICd1c2Ugc3RyaWN0
JzsKLQotICBleHBvcnRzLmRlZmF1bHQgPSBkZW5vZGVpZnk7Ci0KLSAgZnVuY3Rpb24gX2RlZmF1
bHRzKG9iaiwgZGVmYXVsdHMpIHsgdmFyIGtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1l
cyhkZWZhdWx0cyk7IGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykgeyB2YXIg
a2V5ID0ga2V5c1tpXTsgdmFyIHZhbHVlID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRv
cihkZWZhdWx0cywga2V5KTsgaWYgKHZhbHVlICYmIHZhbHVlLmNvbmZpZ3VyYWJsZSAmJiBvYmpb
a2V5XSA9PT0gdW5kZWZpbmVkKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFs
dWUpOyB9IH0gcmV0dXJuIG9iajsgfQotCi0gIGZ1bmN0aW9uIFJlc3VsdCgpIHsKLSAgICB0aGlz
LnZhbHVlID0gdW5kZWZpbmVkOwotICB9Ci0KLSAgdmFyIEVSUk9SID0gbmV3IFJlc3VsdCgpOwot
ICB2YXIgR0VUX1RIRU5fRVJST1IgPSBuZXcgUmVzdWx0KCk7Ci0KLSAgZnVuY3Rpb24gZ2V0VGhl
bihvYmopIHsKLSAgICB0cnkgewotICAgICAgcmV0dXJuIG9iai50aGVuOwotICAgIH0gY2F0Y2gg
KGVycm9yKSB7Ci0gICAgICBFUlJPUi52YWx1ZSA9IGVycm9yOwotICAgICAgcmV0dXJuIEVSUk9S
OwotICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIHRyeUFwcGx5KGYsIHMsIGEpIHsKLSAgICB0cnkg
ewotICAgICAgZi5hcHBseShzLCBhKTsKLSAgICB9IGNhdGNoIChlcnJvcikgewotICAgICAgRVJS
T1IudmFsdWUgPSBlcnJvcjsKLSAgICAgIHJldHVybiBFUlJPUjsKLSAgICB9Ci0gIH0KLQotICBm
dW5jdGlvbiBtYWtlT2JqZWN0KF8sIGFyZ3VtZW50TmFtZXMpIHsKLSAgICB2YXIgb2JqID0ge307
Ci0gICAgdmFyIG5hbWU7Ci0gICAgdmFyIGk7Ci0gICAgdmFyIGxlbmd0aCA9IF8ubGVuZ3RoOwot
ICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGxlbmd0aCk7Ci0KLSAgICBmb3IgKHZhciB4ID0gMDsg
eCA8IGxlbmd0aDsgeCsrKSB7Ci0gICAgICBhcmdzW3hdID0gX1t4XTsKLSAgICB9Ci0KLSAgICBm
b3IgKGkgPSAwOyBpIDwgYXJndW1lbnROYW1lcy5sZW5ndGg7IGkrKykgewotICAgICAgbmFtZSA9
IGFyZ3VtZW50TmFtZXNbaV07Ci0gICAgICBvYmpbbmFtZV0gPSBhcmdzW2kgKyAxXTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gb2JqOwotICB9Ci0KLSAgZnVuY3Rpb24gYXJyYXlSZXN1bHQoXykgewot
ICAgIHZhciBsZW5ndGggPSBfLmxlbmd0aDsKLSAgICB2YXIgYXJncyA9IG5ldyBBcnJheShsZW5n
dGggLSAxKTsKLQotICAgIGZvciAodmFyIGkgPSAxOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAg
IGFyZ3NbaSAtIDFdID0gX1tpXTsKLSAgICB9Ci0KLSAgICByZXR1cm4gYXJnczsKLSAgfQotCi0g
IGZ1bmN0aW9uIHdyYXBUaGVuYWJsZSh0aGVuLCBwcm9taXNlKSB7Ci0gICAgcmV0dXJuIHsKLSAg
ICAgIHRoZW46IGZ1bmN0aW9uIChvbkZ1bEZpbGxtZW50LCBvblJlamVjdGlvbikgewotICAgICAg
ICByZXR1cm4gdGhlbi5jYWxsKHByb21pc2UsIG9uRnVsRmlsbG1lbnQsIG9uUmVqZWN0aW9uKTsK
LSAgICAgIH0KLSAgICB9OwotICB9Ci0KLSAgLyoqCi0gICAgYFJTVlAuZGVub2RlaWZ5YCB0YWtl
cyBhICdub2RlLXN0eWxlJyBmdW5jdGlvbiBhbmQgcmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQKLSAg
ICB3aWxsIHJldHVybiBhbiBgUlNWUC5Qcm9taXNlYC4gWW91IGNhbiB1c2UgYGRlbm9kZWlmeWAg
aW4gTm9kZS5qcyBvciB0aGUKLSAgICBicm93c2VyIHdoZW4geW91J2QgcHJlZmVyIHRvIHVzZSBw
cm9taXNlcyBvdmVyIHVzaW5nIGNhbGxiYWNrcy4gRm9yIGV4YW1wbGUsCi0gICAgYGRlbm9kZWlm
eWAgdHJhbnNmb3JtcyB0aGUgZm9sbG93aW5nOgotICAKLSAgICBgYGBqYXZhc2NyaXB0Ci0gICAg
dmFyIGZzID0gcmVxdWlyZSgnZnMnKTsKLSAgCi0gICAgZnMucmVhZEZpbGUoJ215ZmlsZS50eHQn
LCBmdW5jdGlvbihlcnIsIGRhdGEpewotICAgICAgaWYgKGVycikgcmV0dXJuIGhhbmRsZUVycm9y
KGVycik7Ci0gICAgICBoYW5kbGVEYXRhKGRhdGEpOwotICAgIH0pOwotICAgIGBgYAotICAKLSAg
ICBpbnRvOgotICAKLSAgICBgYGBqYXZhc2NyaXB0Ci0gICAgdmFyIGZzID0gcmVxdWlyZSgnZnMn
KTsKLSAgICB2YXIgcmVhZEZpbGUgPSBSU1ZQLmRlbm9kZWlmeShmcy5yZWFkRmlsZSk7Ci0gIAot
ICAgIHJlYWRGaWxlKCdteWZpbGUudHh0JykudGhlbihoYW5kbGVEYXRhLCBoYW5kbGVFcnJvcik7
Ci0gICAgYGBgCi0gIAotICAgIElmIHRoZSBub2RlIGZ1bmN0aW9uIGhhcyBtdWx0aXBsZSBzdWNj
ZXNzIHBhcmFtZXRlcnMsIHRoZW4gYGRlbm9kZWlmeWAKLSAgICBqdXN0IHJldHVybnMgdGhlIGZp
cnN0IG9uZToKLSAgCi0gICAgYGBgamF2YXNjcmlwdAotICAgIHZhciByZXF1ZXN0ID0gUlNWUC5k
ZW5vZGVpZnkocmVxdWlyZSgncmVxdWVzdCcpKTsKLSAgCi0gICAgcmVxdWVzdCgnaHR0cDovL2V4
YW1wbGUuY29tJykudGhlbihmdW5jdGlvbihyZXMpIHsKLSAgICAgIC8vIC4uLgotICAgIH0pOwot
ICAgIGBgYAotICAKLSAgICBIb3dldmVyLCBpZiB5b3UgbmVlZCBhbGwgc3VjY2VzcyBwYXJhbWV0
ZXJzLCBzZXR0aW5nIGBkZW5vZGVpZnlgJ3MKLSAgICBzZWNvbmQgcGFyYW1ldGVyIHRvIGB0cnVl
YCBjYXVzZXMgaXQgdG8gcmV0dXJuIGFsbCBzdWNjZXNzIHBhcmFtZXRlcnMKLSAgICBhcyBhbiBh
cnJheToKLSAgCi0gICAgYGBgamF2YXNjcmlwdAotICAgIHZhciByZXF1ZXN0ID0gUlNWUC5kZW5v
ZGVpZnkocmVxdWlyZSgncmVxdWVzdCcpLCB0cnVlKTsKLSAgCi0gICAgcmVxdWVzdCgnaHR0cDov
L2V4YW1wbGUuY29tJykudGhlbihmdW5jdGlvbihyZXN1bHQpIHsKLSAgICAgIC8vIHJlc3VsdFsw
XSAtPiByZXMKLSAgICAgIC8vIHJlc3VsdFsxXSAtPiBib2R5Ci0gICAgfSk7Ci0gICAgYGBgCi0g
IAotICAgIE9yIGlmIHlvdSBwYXNzIGl0IGFuIGFycmF5IHdpdGggbmFtZXMgaXQgcmV0dXJucyB0
aGUgcGFyYW1ldGVycyBhcyBhIGhhc2g6Ci0gIAotICAgIGBgYGphdmFzY3JpcHQKLSAgICB2YXIg
cmVxdWVzdCA9IFJTVlAuZGVub2RlaWZ5KHJlcXVpcmUoJ3JlcXVlc3QnKSwgWydyZXMnLCAnYm9k
eSddKTsKLSAgCi0gICAgcmVxdWVzdCgnaHR0cDovL2V4YW1wbGUuY29tJykudGhlbihmdW5jdGlv
bihyZXN1bHQpIHsKLSAgICAgIC8vIHJlc3VsdC5yZXMKLSAgICAgIC8vIHJlc3VsdC5ib2R5Ci0g
ICAgfSk7Ci0gICAgYGBgCi0gIAotICAgIFNvbWV0aW1lcyB5b3UgbmVlZCB0byByZXRhaW4gdGhl
IGB0aGlzYDoKLSAgCi0gICAgYGBgamF2YXNjcmlwdAotICAgIHZhciBhcHAgPSByZXF1aXJlKCdl
eHByZXNzJykoKTsKLSAgICB2YXIgcmVuZGVyID0gUlNWUC5kZW5vZGVpZnkoYXBwLnJlbmRlci5i
aW5kKGFwcCkpOwotICAgIGBgYAotICAKLSAgICBUaGUgZGVub2RpZmllZCBmdW5jdGlvbiBpbmhl
cml0cyBmcm9tIHRoZSBvcmlnaW5hbCBmdW5jdGlvbi4gSXQgd29ya3MgaW4gYWxsCi0gICAgZW52
aXJvbm1lbnRzLCBleGNlcHQgSUUgMTAgYW5kIGJlbG93LiBDb25zZXF1ZW50bHkgYWxsIHByb3Bl
cnRpZXMgb2YgdGhlIG9yaWdpbmFsCi0gICAgZnVuY3Rpb24gYXJlIGF2YWlsYWJsZSB0byB5b3Uu
IEhvd2V2ZXIsIGFueSBwcm9wZXJ0aWVzIHlvdSBjaGFuZ2Ugb24gdGhlCi0gICAgZGVub2RlaWZp
ZWQgZnVuY3Rpb24gd29uJ3QgYmUgY2hhbmdlZCBvbiB0aGUgb3JpZ2luYWwgZnVuY3Rpb24uIEV4
YW1wbGU6Ci0gIAotICAgIGBgYGphdmFzY3JpcHQKLSAgICB2YXIgcmVxdWVzdCA9IFJTVlAuZGVu
b2RlaWZ5KHJlcXVpcmUoJ3JlcXVlc3QnKSksCi0gICAgICAgIGNvb2tpZUphciA9IHJlcXVlc3Qu
amFyKCk7IC8vIDwtIEluaGVyaXRhbmNlIGlzIHVzZWQgaGVyZQotICAKLSAgICByZXF1ZXN0KCdo
dHRwOi8vZXhhbXBsZS5jb20nLCB7amFyOiBjb29raWVKYXJ9KS50aGVuKGZ1bmN0aW9uKHJlcykg
ewotICAgICAgLy8gY29va2llSmFyLmNvb2tpZXMgaG9sZHMgbm93IHRoZSBjb29raWVzIHJldHVy
bmVkIGJ5IGV4YW1wbGUuY29tCi0gICAgfSk7Ci0gICAgYGBgCi0gIAotICAgIFVzaW5nIGBkZW5v
ZGVpZnlgIG1ha2VzIGl0IGVhc2llciB0byBjb21wb3NlIGFzeW5jaHJvbm91cyBvcGVyYXRpb25z
IGluc3RlYWQKLSAgICBvZiB1c2luZyBjYWxsYmFja3MuIEZvciBleGFtcGxlLCBpbnN0ZWFkIG9m
OgotICAKLSAgICBgYGBqYXZhc2NyaXB0Ci0gICAgdmFyIGZzID0gcmVxdWlyZSgnZnMnKTsKLSAg
Ci0gICAgZnMucmVhZEZpbGUoJ215ZmlsZS50eHQnLCBmdW5jdGlvbihlcnIsIGRhdGEpewotICAg
ICAgaWYgKGVycikgeyAuLi4gfSAvLyBIYW5kbGUgZXJyb3IKLSAgICAgIGZzLndyaXRlRmlsZSgn
bXlmaWxlMi50eHQnLCBkYXRhLCBmdW5jdGlvbihlcnIpewotICAgICAgICBpZiAoZXJyKSB7IC4u
LiB9IC8vIEhhbmRsZSBlcnJvcgotICAgICAgICBjb25zb2xlLmxvZygnZG9uZScpCi0gICAgICB9
KTsKLSAgICB9KTsKLSAgICBgYGAKLSAgCi0gICAgeW91IGNhbiBjaGFpbiB0aGUgb3BlcmF0aW9u
cyB0b2dldGhlciB1c2luZyBgdGhlbmAgZnJvbSB0aGUgcmV0dXJuZWQgcHJvbWlzZToKLSAgCi0g
ICAgYGBgamF2YXNjcmlwdAotICAgIHZhciBmcyA9IHJlcXVpcmUoJ2ZzJyk7Ci0gICAgdmFyIHJl
YWRGaWxlID0gUlNWUC5kZW5vZGVpZnkoZnMucmVhZEZpbGUpOwotICAgIHZhciB3cml0ZUZpbGUg
PSBSU1ZQLmRlbm9kZWlmeShmcy53cml0ZUZpbGUpOwotICAKLSAgICByZWFkRmlsZSgnbXlmaWxl
LnR4dCcpLnRoZW4oZnVuY3Rpb24oZGF0YSl7Ci0gICAgICByZXR1cm4gd3JpdGVGaWxlKCdteWZp
bGUyLnR4dCcsIGRhdGEpOwotICAgIH0pLnRoZW4oZnVuY3Rpb24oKXsKLSAgICAgIGNvbnNvbGUu
bG9nKCdkb25lJykKLSAgICB9KS5jYXRjaChmdW5jdGlvbihlcnJvcil7Ci0gICAgICAvLyBIYW5k
bGUgZXJyb3IKLSAgICB9KTsKLSAgICBgYGAKLSAgCi0gICAgQG1ldGhvZCBkZW5vZGVpZnkKLSAg
ICBAc3RhdGljCi0gICAgQGZvciBSU1ZQCi0gICAgQHBhcmFtIHtGdW5jdGlvbn0gbm9kZUZ1bmMg
YSAnbm9kZS1zdHlsZScgZnVuY3Rpb24gdGhhdCB0YWtlcyBhIGNhbGxiYWNrIGFzCi0gICAgaXRz
IGxhc3QgYXJndW1lbnQuIFRoZSBjYWxsYmFjayBleHBlY3RzIGFuIGVycm9yIHRvIGJlIHBhc3Nl
ZCBhcyBpdHMgZmlyc3QKLSAgICBhcmd1bWVudCAoaWYgYW4gZXJyb3Igb2NjdXJyZWQsIG90aGVy
d2lzZSBudWxsKSwgYW5kIHRoZSB2YWx1ZSBmcm9tIHRoZQotICAgIG9wZXJhdGlvbiBhcyBpdHMg
c2Vjb25kIGFyZ3VtZW50ICgnZnVuY3Rpb24oZXJyLCB2YWx1ZSl7IH0nKS4KLSAgICBAcGFyYW0g
e0Jvb2xlYW58QXJyYXl9IFtvcHRpb25zXSBBbiBvcHRpb25hbCBwYXJhbXRlciB0aGF0IGlmIHNl
dAotICAgIHRvIGB0cnVlYCBjYXVzZXMgdGhlIHByb21pc2UgdG8gZnVsZmlsbCB3aXRoIHRoZSBj
YWxsYmFjaydzIHN1Y2Nlc3MgYXJndW1lbnRzCi0gICAgYXMgYW4gYXJyYXkuIFRoaXMgaXMgdXNl
ZnVsIGlmIHRoZSBub2RlIGZ1bmN0aW9uIGhhcyBtdWx0aXBsZSBzdWNjZXNzCi0gICAgcGFyYW10
ZXJzLiBJZiB5b3Ugc2V0IHRoaXMgcGFyYW10ZXIgdG8gYW4gYXJyYXkgd2l0aCBuYW1lcywgdGhl
IHByb21pc2Ugd2lsbAotICAgIGZ1bGZpbGwgd2l0aCBhIGhhc2ggd2l0aCB0aGVzZSBuYW1lcyBh
cyBrZXlzIGFuZCB0aGUgc3VjY2VzcyBwYXJhbWV0ZXJzIGFzCi0gICAgdmFsdWVzLgotICAgIEBy
ZXR1cm4ge0Z1bmN0aW9ufSBhIGZ1bmN0aW9uIHRoYXQgd3JhcHMgYG5vZGVGdW5jYCB0byByZXR1
cm4gYW4KLSAgICBgUlNWUC5Qcm9taXNlYAotICAgIEBzdGF0aWMKLSAgKi8KLQotICBmdW5jdGlv
biBkZW5vZGVpZnkobm9kZUZ1bmMsIG9wdGlvbnMpIHsKLSAgICB2YXIgZm4gPSBmdW5jdGlvbiAo
KSB7Ci0gICAgICB2YXIgc2VsZiA9IHRoaXM7Ci0gICAgICB2YXIgbCA9IGFyZ3VtZW50cy5sZW5n
dGg7Ci0gICAgICB2YXIgYXJncyA9IG5ldyBBcnJheShsICsgMSk7Ci0gICAgICB2YXIgYXJnOwot
ICAgICAgdmFyIHByb21pc2VJbnB1dCA9IGZhbHNlOwotCi0gICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IGw7ICsraSkgewotICAgICAgICBhcmcgPSBhcmd1bWVudHNbaV07Ci0KLSAgICAgICAgaWYg
KCFwcm9taXNlSW5wdXQpIHsKLSAgICAgICAgICAvLyBUT0RPOiBjbGVhbiB0aGlzIHVwCi0gICAg
ICAgICAgcHJvbWlzZUlucHV0ID0gbmVlZHNQcm9taXNlSW5wdXQoYXJnKTsKLSAgICAgICAgICBp
ZiAocHJvbWlzZUlucHV0ID09PSBHRVRfVEhFTl9FUlJPUikgewotICAgICAgICAgICAgdmFyIHAg
PSBuZXcgX3JzdnBQcm9taXNlLmRlZmF1bHQoX3JzdnBJbnRlcm5hbC5ub29wKTsKLSAgICAgICAg
ICAgIF9yc3ZwSW50ZXJuYWwucmVqZWN0KHAsIEdFVF9USEVOX0VSUk9SLnZhbHVlKTsKLSAgICAg
ICAgICAgIHJldHVybiBwOwotICAgICAgICAgIH0gZWxzZSBpZiAocHJvbWlzZUlucHV0ICYmIHBy
b21pc2VJbnB1dCAhPT0gdHJ1ZSkgewotICAgICAgICAgICAgYXJnID0gd3JhcFRoZW5hYmxlKHBy
b21pc2VJbnB1dCwgYXJnKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYXJnc1tp
XSA9IGFyZzsKLSAgICAgIH0KLQotICAgICAgdmFyIHByb21pc2UgPSBuZXcgX3JzdnBQcm9taXNl
LmRlZmF1bHQoX3JzdnBJbnRlcm5hbC5ub29wKTsKLQotICAgICAgYXJnc1tsXSA9IGZ1bmN0aW9u
IChlcnIsIHZhbCkgewotICAgICAgICBpZiAoZXJyKSBfcnN2cEludGVybmFsLnJlamVjdChwcm9t
aXNlLCBlcnIpO2Vsc2UgaWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZCkgX3JzdnBJbnRlcm5hbC5y
ZXNvbHZlKHByb21pc2UsIHZhbCk7ZWxzZSBpZiAob3B0aW9ucyA9PT0gdHJ1ZSkgX3JzdnBJbnRl
cm5hbC5yZXNvbHZlKHByb21pc2UsIGFycmF5UmVzdWx0KGFyZ3VtZW50cykpO2Vsc2UgaWYgKF9y
c3ZwVXRpbHMuaXNBcnJheShvcHRpb25zKSkgX3JzdnBJbnRlcm5hbC5yZXNvbHZlKHByb21pc2Us
IG1ha2VPYmplY3QoYXJndW1lbnRzLCBvcHRpb25zKSk7ZWxzZSBfcnN2cEludGVybmFsLnJlc29s
dmUocHJvbWlzZSwgdmFsKTsKLSAgICAgIH07Ci0KLSAgICAgIGlmIChwcm9taXNlSW5wdXQpIHsK
LSAgICAgICAgcmV0dXJuIGhhbmRsZVByb21pc2VJbnB1dChwcm9taXNlLCBhcmdzLCBub2RlRnVu
Yywgc2VsZik7Ci0gICAgICB9IGVsc2UgewotICAgICAgICByZXR1cm4gaGFuZGxlVmFsdWVJbnB1
dChwcm9taXNlLCBhcmdzLCBub2RlRnVuYywgc2VsZik7Ci0gICAgICB9Ci0gICAgfTsKLQotICAg
IF9kZWZhdWx0cyhmbiwgbm9kZUZ1bmMpOwotCi0gICAgcmV0dXJuIGZuOwotICB9Ci0KLSAgZnVu
Y3Rpb24gaGFuZGxlVmFsdWVJbnB1dChwcm9taXNlLCBhcmdzLCBub2RlRnVuYywgc2VsZikgewot
ICAgIHZhciByZXN1bHQgPSB0cnlBcHBseShub2RlRnVuYywgc2VsZiwgYXJncyk7Ci0gICAgaWYg
KHJlc3VsdCA9PT0gRVJST1IpIHsKLSAgICAgIF9yc3ZwSW50ZXJuYWwucmVqZWN0KHByb21pc2Us
IHJlc3VsdC52YWx1ZSk7Ci0gICAgfQotICAgIHJldHVybiBwcm9taXNlOwotICB9Ci0KLSAgZnVu
Y3Rpb24gaGFuZGxlUHJvbWlzZUlucHV0KHByb21pc2UsIGFyZ3MsIG5vZGVGdW5jLCBzZWxmKSB7
Ci0gICAgcmV0dXJuIF9yc3ZwUHJvbWlzZS5kZWZhdWx0LmFsbChhcmdzKS50aGVuKGZ1bmN0aW9u
IChhcmdzKSB7Ci0gICAgICB2YXIgcmVzdWx0ID0gdHJ5QXBwbHkobm9kZUZ1bmMsIHNlbGYsIGFy
Z3MpOwotICAgICAgaWYgKHJlc3VsdCA9PT0gRVJST1IpIHsKLSAgICAgICAgX3JzdnBJbnRlcm5h
bC5yZWplY3QocHJvbWlzZSwgcmVzdWx0LnZhbHVlKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBw
cm9taXNlOwotICAgIH0pOwotICB9Ci0KLSAgZnVuY3Rpb24gbmVlZHNQcm9taXNlSW5wdXQoYXJn
KSB7Ci0gICAgaWYgKGFyZyAmJiB0eXBlb2YgYXJnID09PSAnb2JqZWN0JykgewotICAgICAgaWYg
KGFyZy5jb25zdHJ1Y3RvciA9PT0gX3JzdnBQcm9taXNlLmRlZmF1bHQpIHsKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICB9IGVsc2UgewotICAgICAgICByZXR1cm4gZ2V0VGhlbihhcmcpOwot
ICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci19
KTsKLWVuaWZlZCgncnN2cC9wbGF0Zm9ybScsIFsnZXhwb3J0cyddLCBmdW5jdGlvbiAoZXhwb3J0
cykgewotICAndXNlIHN0cmljdCc7Ci0KLSAgdmFyIHBsYXRmb3JtOwotCi0gIC8qIGdsb2JhbCBz
ZWxmICovCi0gIGlmICh0eXBlb2Ygc2VsZiA9PT0gJ29iamVjdCcpIHsKLSAgICBwbGF0Zm9ybSA9
IHNlbGY7Ci0KLSAgICAvKiBnbG9iYWwgZ2xvYmFsICovCi0gIH0gZWxzZSBpZiAodHlwZW9mIGds
b2JhbCA9PT0gJ29iamVjdCcpIHsKLSAgICAgIHBsYXRmb3JtID0gZ2xvYmFsOwotICAgIH0gZWxz
ZSB7Ci0gICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vIGdsb2JhbDogYHNlbGZgIG9yIGBnbG9iYWxg
IGZvdW5kJyk7Ci0gICAgfQotCi0gIGV4cG9ydHMuZGVmYXVsdCA9IHBsYXRmb3JtOwotfSk7Ci1l
bmlmZWQoJ3JzdnAvcHJvbWlzZS1oYXNoJywgWydleHBvcnRzJywgJ3JzdnAvZW51bWVyYXRvcics
ICdyc3ZwLy1pbnRlcm5hbCcsICdyc3ZwL3V0aWxzJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfcnN2
cEVudW1lcmF0b3IsIF9yc3ZwSW50ZXJuYWwsIF9yc3ZwVXRpbHMpIHsKLSAgJ3VzZSBzdHJpY3Qn
OwotCi0gIGZ1bmN0aW9uIFByb21pc2VIYXNoKENvbnN0cnVjdG9yLCBvYmplY3QsIGxhYmVsKSB7
Ci0gICAgdGhpcy5fc3VwZXJDb25zdHJ1Y3RvcihDb25zdHJ1Y3Rvciwgb2JqZWN0LCB0cnVlLCBs
YWJlbCk7Ci0gIH0KLQotICBleHBvcnRzLmRlZmF1bHQgPSBQcm9taXNlSGFzaDsKLQotICBQcm9t
aXNlSGFzaC5wcm90b3R5cGUgPSBfcnN2cFV0aWxzLm9fY3JlYXRlKF9yc3ZwRW51bWVyYXRvci5k
ZWZhdWx0LnByb3RvdHlwZSk7Ci0gIFByb21pc2VIYXNoLnByb3RvdHlwZS5fc3VwZXJDb25zdHJ1
Y3RvciA9IF9yc3ZwRW51bWVyYXRvci5kZWZhdWx0OwotICBQcm9taXNlSGFzaC5wcm90b3R5cGUu
X2luaXQgPSBmdW5jdGlvbiAoKSB7Ci0gICAgdGhpcy5fcmVzdWx0ID0ge307Ci0gIH07Ci0KLSAg
UHJvbWlzZUhhc2gucHJvdG90eXBlLl92YWxpZGF0ZUlucHV0ID0gZnVuY3Rpb24gKGlucHV0KSB7
Ci0gICAgcmV0dXJuIGlucHV0ICYmIHR5cGVvZiBpbnB1dCA9PT0gJ29iamVjdCc7Ci0gIH07Ci0K
LSAgUHJvbWlzZUhhc2gucHJvdG90eXBlLl92YWxpZGF0aW9uRXJyb3IgPSBmdW5jdGlvbiAoKSB7
Ci0gICAgcmV0dXJuIG5ldyBFcnJvcignUHJvbWlzZS5oYXNoIG11c3QgYmUgY2FsbGVkIHdpdGgg
YW4gb2JqZWN0Jyk7Ci0gIH07Ci0KLSAgUHJvbWlzZUhhc2gucHJvdG90eXBlLl9lbnVtZXJhdGUg
PSBmdW5jdGlvbiAoKSB7Ci0gICAgdmFyIGVudW1lcmF0b3IgPSB0aGlzOwotICAgIHZhciBwcm9t
aXNlID0gZW51bWVyYXRvci5wcm9taXNlOwotICAgIHZhciBpbnB1dCA9IGVudW1lcmF0b3IuX2lu
cHV0OwotICAgIHZhciByZXN1bHRzID0gW107Ci0KLSAgICBmb3IgKHZhciBrZXkgaW4gaW5wdXQp
IHsKLSAgICAgIGlmIChwcm9taXNlLl9zdGF0ZSA9PT0gX3JzdnBJbnRlcm5hbC5QRU5ESU5HICYm
IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpbnB1dCwga2V5KSkgewotICAg
ICAgICByZXN1bHRzLnB1c2goewotICAgICAgICAgIHBvc2l0aW9uOiBrZXksCi0gICAgICAgICAg
ZW50cnk6IGlucHV0W2tleV0KLSAgICAgICAgfSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgdmFy
IGxlbmd0aCA9IHJlc3VsdHMubGVuZ3RoOwotICAgIGVudW1lcmF0b3IuX3JlbWFpbmluZyA9IGxl
bmd0aDsKLSAgICB2YXIgcmVzdWx0OwotCi0gICAgZm9yICh2YXIgaSA9IDA7IHByb21pc2UuX3N0
YXRlID09PSBfcnN2cEludGVybmFsLlBFTkRJTkcgJiYgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAg
ICByZXN1bHQgPSByZXN1bHRzW2ldOwotICAgICAgZW51bWVyYXRvci5fZWFjaEVudHJ5KHJlc3Vs
dC5lbnRyeSwgcmVzdWx0LnBvc2l0aW9uKTsKLSAgICB9Ci0gIH07Ci19KTsKLWVuaWZlZCgncnN2
cC9wcm9taXNlJywgWydleHBvcnRzJywgJ3JzdnAvY29uZmlnJywgJ3JzdnAvaW5zdHJ1bWVudCcs
ICdyc3ZwL3V0aWxzJywgJ3JzdnAvLWludGVybmFsJywgJ3JzdnAvcHJvbWlzZS9hbGwnLCAncnN2
cC9wcm9taXNlL3JhY2UnLCAncnN2cC9wcm9taXNlL3Jlc29sdmUnLCAncnN2cC9wcm9taXNlL3Jl
amVjdCddLCBmdW5jdGlvbiAoZXhwb3J0cywgX3JzdnBDb25maWcsIF9yc3ZwSW5zdHJ1bWVudCwg
X3JzdnBVdGlscywgX3JzdnBJbnRlcm5hbCwgX3JzdnBQcm9taXNlQWxsLCBfcnN2cFByb21pc2VS
YWNlLCBfcnN2cFByb21pc2VSZXNvbHZlLCBfcnN2cFByb21pc2VSZWplY3QpIHsKLSAgJ3VzZSBz
dHJpY3QnOwotCi0gIGV4cG9ydHMuZGVmYXVsdCA9IFByb21pc2U7Ci0KLSAgdmFyIGd1aWRLZXkg
PSAncnN2cF8nICsgX3JzdnBVdGlscy5ub3coKSArICctJzsKLSAgdmFyIGNvdW50ZXIgPSAwOwot
Ci0gIGZ1bmN0aW9uIG5lZWRzUmVzb2x2ZXIoKSB7Ci0gICAgdGhyb3cgbmV3IFR5cGVFcnJvcign
WW91IG11c3QgcGFzcyBhIHJlc29sdmVyIGZ1bmN0aW9uIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0
byB0aGUgcHJvbWlzZSBjb25zdHJ1Y3RvcicpOwotICB9Ci0KLSAgZnVuY3Rpb24gbmVlZHNOZXco
KSB7Ci0gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiRmFpbGVkIHRvIGNvbnN0cnVjdCAnUHJvbWlz
ZSc6IFBsZWFzZSB1c2UgdGhlICduZXcnIG9wZXJhdG9yLCB0aGlzIG9iamVjdCBjb25zdHJ1Y3Rv
ciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uIik7Ci0gIH0KLQotICAvKioKLSAgICBQ
cm9taXNlIG9iamVjdHMgcmVwcmVzZW50IHRoZSBldmVudHVhbCByZXN1bHQgb2YgYW4gYXN5bmNo
cm9ub3VzIG9wZXJhdGlvbi4gVGhlCi0gICAgcHJpbWFyeSB3YXkgb2YgaW50ZXJhY3Rpbmcgd2l0
aCBhIHByb21pc2UgaXMgdGhyb3VnaCBpdHMgYHRoZW5gIG1ldGhvZCwgd2hpY2gKLSAgICByZWdp
c3RlcnMgY2FsbGJhY2tzIHRvIHJlY2VpdmUgZWl0aGVyIGEgcHJvbWlzZeKAmXMgZXZlbnR1YWwg
dmFsdWUgb3IgdGhlIHJlYXNvbgotICAgIHdoeSB0aGUgcHJvbWlzZSBjYW5ub3QgYmUgZnVsZmls
bGVkLgotICAKLSAgICBUZXJtaW5vbG9neQotICAgIC0tLS0tLS0tLS0tCi0gIAotICAgIC0gYHBy
b21pc2VgIGlzIGFuIG9iamVjdCBvciBmdW5jdGlvbiB3aXRoIGEgYHRoZW5gIG1ldGhvZCB3aG9z
ZSBiZWhhdmlvciBjb25mb3JtcyB0byB0aGlzIHNwZWNpZmljYXRpb24uCi0gICAgLSBgdGhlbmFi
bGVgIGlzIGFuIG9iamVjdCBvciBmdW5jdGlvbiB0aGF0IGRlZmluZXMgYSBgdGhlbmAgbWV0aG9k
LgotICAgIC0gYHZhbHVlYCBpcyBhbnkgbGVnYWwgSmF2YVNjcmlwdCB2YWx1ZSAoaW5jbHVkaW5n
IHVuZGVmaW5lZCwgYSB0aGVuYWJsZSwgb3IgYSBwcm9taXNlKS4KLSAgICAtIGBleGNlcHRpb25g
IGlzIGEgdmFsdWUgdGhhdCBpcyB0aHJvd24gdXNpbmcgdGhlIHRocm93IHN0YXRlbWVudC4KLSAg
ICAtIGByZWFzb25gIGlzIGEgdmFsdWUgdGhhdCBpbmRpY2F0ZXMgd2h5IGEgcHJvbWlzZSB3YXMg
cmVqZWN0ZWQuCi0gICAgLSBgc2V0dGxlZGAgdGhlIGZpbmFsIHJlc3Rpbmcgc3RhdGUgb2YgYSBw
cm9taXNlLCBmdWxmaWxsZWQgb3IgcmVqZWN0ZWQuCi0gIAotICAgIEEgcHJvbWlzZSBjYW4gYmUg
aW4gb25lIG9mIHRocmVlIHN0YXRlczogcGVuZGluZywgZnVsZmlsbGVkLCBvciByZWplY3RlZC4K
LSAgCi0gICAgUHJvbWlzZXMgdGhhdCBhcmUgZnVsZmlsbGVkIGhhdmUgYSBmdWxmaWxsbWVudCB2
YWx1ZSBhbmQgYXJlIGluIHRoZSBmdWxmaWxsZWQKLSAgICBzdGF0ZS4gIFByb21pc2VzIHRoYXQg
YXJlIHJlamVjdGVkIGhhdmUgYSByZWplY3Rpb24gcmVhc29uIGFuZCBhcmUgaW4gdGhlCi0gICAg
cmVqZWN0ZWQgc3RhdGUuICBBIGZ1bGZpbGxtZW50IHZhbHVlIGlzIG5ldmVyIGEgdGhlbmFibGUu
Ci0gIAotICAgIFByb21pc2VzIGNhbiBhbHNvIGJlIHNhaWQgdG8gKnJlc29sdmUqIGEgdmFsdWUu
ICBJZiB0aGlzIHZhbHVlIGlzIGFsc28gYQotICAgIHByb21pc2UsIHRoZW4gdGhlIG9yaWdpbmFs
IHByb21pc2UncyBzZXR0bGVkIHN0YXRlIHdpbGwgbWF0Y2ggdGhlIHZhbHVlJ3MKLSAgICBzZXR0
bGVkIHN0YXRlLiAgU28gYSBwcm9taXNlIHRoYXQgKnJlc29sdmVzKiBhIHByb21pc2UgdGhhdCBy
ZWplY3RzIHdpbGwKLSAgICBpdHNlbGYgcmVqZWN0LCBhbmQgYSBwcm9taXNlIHRoYXQgKnJlc29s
dmVzKiBhIHByb21pc2UgdGhhdCBmdWxmaWxscyB3aWxsCi0gICAgaXRzZWxmIGZ1bGZpbGwuCi0g
IAotICAKLSAgICBCYXNpYyBVc2FnZToKLSAgICAtLS0tLS0tLS0tLS0KLSAgCi0gICAgYGBganMK
LSAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkg
ewotICAgICAgLy8gb24gc3VjY2VzcwotICAgICAgcmVzb2x2ZSh2YWx1ZSk7Ci0gIAotICAgICAg
Ly8gb24gZmFpbHVyZQotICAgICAgcmVqZWN0KHJlYXNvbik7Ci0gICAgfSk7Ci0gIAotICAgIHBy
b21pc2UudGhlbihmdW5jdGlvbih2YWx1ZSkgewotICAgICAgLy8gb24gZnVsZmlsbG1lbnQKLSAg
ICB9LCBmdW5jdGlvbihyZWFzb24pIHsKLSAgICAgIC8vIG9uIHJlamVjdGlvbgotICAgIH0pOwot
ICAgIGBgYAotICAKLSAgICBBZHZhbmNlZCBVc2FnZToKLSAgICAtLS0tLS0tLS0tLS0tLS0KLSAg
Ci0gICAgUHJvbWlzZXMgc2hpbmUgd2hlbiBhYnN0cmFjdGluZyBhd2F5IGFzeW5jaHJvbm91cyBp
bnRlcmFjdGlvbnMgc3VjaCBhcwotICAgIGBYTUxIdHRwUmVxdWVzdGBzLgotICAKLSAgICBgYGBq
cwotICAgIGZ1bmN0aW9uIGdldEpTT04odXJsKSB7Ci0gICAgICByZXR1cm4gbmV3IFByb21pc2Uo
ZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KXsKLSAgICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRw
UmVxdWVzdCgpOwotICAKLSAgICAgICAgeGhyLm9wZW4oJ0dFVCcsIHVybCk7Ci0gICAgICAgIHho
ci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBoYW5kbGVyOwotICAgICAgICB4aHIucmVzcG9uc2VUeXBl
ID0gJ2pzb24nOwotICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcignQWNjZXB0JywgJ2FwcGxp
Y2F0aW9uL2pzb24nKTsKLSAgICAgICAgeGhyLnNlbmQoKTsKLSAgCi0gICAgICAgIGZ1bmN0aW9u
IGhhbmRsZXIoKSB7Ci0gICAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PT0gdGhpcy5ET05F
KSB7Ci0gICAgICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09IDIwMCkgewotICAgICAgICAgICAg
ICByZXNvbHZlKHRoaXMucmVzcG9uc2UpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgcmVqZWN0KG5ldyBFcnJvcignZ2V0SlNPTjogYCcgKyB1cmwgKyAnYCBmYWlsZWQgd2l0
aCBzdGF0dXM6IFsnICsgdGhpcy5zdGF0dXMgKyAnXScpKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICB9Ci0gICAgICAgIH07Ci0gICAgICB9KTsKLSAgICB9Ci0gIAotICAgIGdldEpTT04oJy9w
b3N0cy5qc29uJykudGhlbihmdW5jdGlvbihqc29uKSB7Ci0gICAgICAvLyBvbiBmdWxmaWxsbWVu
dAotICAgIH0sIGZ1bmN0aW9uKHJlYXNvbikgewotICAgICAgLy8gb24gcmVqZWN0aW9uCi0gICAg
fSk7Ci0gICAgYGBgCi0gIAotICAgIFVubGlrZSBjYWxsYmFja3MsIHByb21pc2VzIGFyZSBncmVh
dCBjb21wb3NhYmxlIHByaW1pdGl2ZXMuCi0gIAotICAgIGBgYGpzCi0gICAgUHJvbWlzZS5hbGwo
WwotICAgICAgZ2V0SlNPTignL3Bvc3RzJyksCi0gICAgICBnZXRKU09OKCcvY29tbWVudHMnKQot
ICAgIF0pLnRoZW4oZnVuY3Rpb24odmFsdWVzKXsKLSAgICAgIHZhbHVlc1swXSAvLyA9PiBwb3N0
c0pTT04KLSAgICAgIHZhbHVlc1sxXSAvLyA9PiBjb21tZW50c0pTT04KLSAgCi0gICAgICByZXR1
cm4gdmFsdWVzOwotICAgIH0pOwotICAgIGBgYAotICAKLSAgICBAY2xhc3MgUlNWUC5Qcm9taXNl
Ci0gICAgQHBhcmFtIHtmdW5jdGlvbn0gcmVzb2x2ZXIKLSAgICBAcGFyYW0ge1N0cmluZ30gbGFi
ZWwgb3B0aW9uYWwgc3RyaW5nIGZvciBsYWJlbGluZyB0aGUgcHJvbWlzZS4KLSAgICBVc2VmdWwg
Zm9yIHRvb2xpbmcuCi0gICAgQGNvbnN0cnVjdG9yCi0gICovCi0KLSAgZnVuY3Rpb24gUHJvbWlz
ZShyZXNvbHZlciwgbGFiZWwpIHsKLSAgICB2YXIgcHJvbWlzZSA9IHRoaXM7Ci0KLSAgICBwcm9t
aXNlLl9pZCA9IGNvdW50ZXIrKzsKLSAgICBwcm9taXNlLl9sYWJlbCA9IGxhYmVsOwotICAgIHBy
b21pc2UuX3N0YXRlID0gdW5kZWZpbmVkOwotICAgIHByb21pc2UuX3Jlc3VsdCA9IHVuZGVmaW5l
ZDsKLSAgICBwcm9taXNlLl9zdWJzY3JpYmVycyA9IFtdOwotCi0gICAgaWYgKF9yc3ZwQ29uZmln
LmNvbmZpZy5pbnN0cnVtZW50KSB7Ci0gICAgICBfcnN2cEluc3RydW1lbnQuZGVmYXVsdCgnY3Jl
YXRlZCcsIHByb21pc2UpOwotICAgIH0KLQotICAgIGlmIChfcnN2cEludGVybmFsLm5vb3AgIT09
IHJlc29sdmVyKSB7Ci0gICAgICBpZiAoIV9yc3ZwVXRpbHMuaXNGdW5jdGlvbihyZXNvbHZlcikp
IHsKLSAgICAgICAgbmVlZHNSZXNvbHZlcigpOwotICAgICAgfQotCi0gICAgICBpZiAoIShwcm9t
aXNlIGluc3RhbmNlb2YgUHJvbWlzZSkpIHsKLSAgICAgICAgbmVlZHNOZXcoKTsKLSAgICAgIH0K
LQotICAgICAgX3JzdnBJbnRlcm5hbC5pbml0aWFsaXplUHJvbWlzZShwcm9taXNlLCByZXNvbHZl
cik7Ci0gICAgfQotICB9Ci0KLSAgUHJvbWlzZS5jYXN0ID0gX3JzdnBQcm9taXNlUmVzb2x2ZS5k
ZWZhdWx0OyAvLyBkZXByZWNhdGVkCi0gIFByb21pc2UuYWxsID0gX3JzdnBQcm9taXNlQWxsLmRl
ZmF1bHQ7Ci0gIFByb21pc2UucmFjZSA9IF9yc3ZwUHJvbWlzZVJhY2UuZGVmYXVsdDsKLSAgUHJv
bWlzZS5yZXNvbHZlID0gX3JzdnBQcm9taXNlUmVzb2x2ZS5kZWZhdWx0OwotICBQcm9taXNlLnJl
amVjdCA9IF9yc3ZwUHJvbWlzZVJlamVjdC5kZWZhdWx0OwotCi0gIFByb21pc2UucHJvdG90eXBl
ID0gewotICAgIGNvbnN0cnVjdG9yOiBQcm9taXNlLAotCi0gICAgX2d1aWRLZXk6IGd1aWRLZXks
Ci0KLSAgICBfb25FcnJvcjogZnVuY3Rpb24gKHJlYXNvbikgewotICAgICAgdmFyIHByb21pc2Ug
PSB0aGlzOwotICAgICAgX3JzdnBDb25maWcuY29uZmlnLmFmdGVyKGZ1bmN0aW9uICgpIHsKLSAg
ICAgICAgaWYgKHByb21pc2UuX29uRXJyb3IpIHsKLSAgICAgICAgICBfcnN2cENvbmZpZy5jb25m
aWdbJ3RyaWdnZXInXSgnZXJyb3InLCByZWFzb24pOwotICAgICAgICB9Ci0gICAgICB9KTsKLSAg
ICB9LAotCi0gICAgLyoqCi0gICAgICBUaGUgcHJpbWFyeSB3YXkgb2YgaW50ZXJhY3Rpbmcgd2l0
aCBhIHByb21pc2UgaXMgdGhyb3VnaCBpdHMgYHRoZW5gIG1ldGhvZCwKLSAgICAgIHdoaWNoIHJl
Z2lzdGVycyBjYWxsYmFja3MgdG8gcmVjZWl2ZSBlaXRoZXIgYSBwcm9taXNlJ3MgZXZlbnR1YWwg
dmFsdWUgb3IgdGhlCi0gICAgICByZWFzb24gd2h5IHRoZSBwcm9taXNlIGNhbm5vdCBiZSBmdWxm
aWxsZWQuCi0gICAgCi0gICAgICBgYGBqcwotICAgICAgZmluZFVzZXIoKS50aGVuKGZ1bmN0aW9u
KHVzZXIpewotICAgICAgICAvLyB1c2VyIGlzIGF2YWlsYWJsZQotICAgICAgfSwgZnVuY3Rpb24o
cmVhc29uKXsKLSAgICAgICAgLy8gdXNlciBpcyB1bmF2YWlsYWJsZSwgYW5kIHlvdSBhcmUgZ2l2
ZW4gdGhlIHJlYXNvbiB3aHkKLSAgICAgIH0pOwotICAgICAgYGBgCi0gICAgCi0gICAgICBDaGFp
bmluZwotICAgICAgLS0tLS0tLS0KLSAgICAKLSAgICAgIFRoZSByZXR1cm4gdmFsdWUgb2YgYHRo
ZW5gIGlzIGl0c2VsZiBhIHByb21pc2UuICBUaGlzIHNlY29uZCwgJ2Rvd25zdHJlYW0nCi0gICAg
ICBwcm9taXNlIGlzIHJlc29sdmVkIHdpdGggdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZmlyc3Qg
cHJvbWlzZSdzIGZ1bGZpbGxtZW50Ci0gICAgICBvciByZWplY3Rpb24gaGFuZGxlciwgb3IgcmVq
ZWN0ZWQgaWYgdGhlIGhhbmRsZXIgdGhyb3dzIGFuIGV4Y2VwdGlvbi4KLSAgICAKLSAgICAgIGBg
YGpzCi0gICAgICBmaW5kVXNlcigpLnRoZW4oZnVuY3Rpb24gKHVzZXIpIHsKLSAgICAgICAgcmV0
dXJuIHVzZXIubmFtZTsKLSAgICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHsKLSAgICAgICAgcmV0
dXJuICdkZWZhdWx0IG5hbWUnOwotICAgICAgfSkudGhlbihmdW5jdGlvbiAodXNlck5hbWUpIHsK
LSAgICAgICAgLy8gSWYgYGZpbmRVc2VyYCBmdWxmaWxsZWQsIGB1c2VyTmFtZWAgd2lsbCBiZSB0
aGUgdXNlcidzIG5hbWUsIG90aGVyd2lzZSBpdAotICAgICAgICAvLyB3aWxsIGJlIGAnZGVmYXVs
dCBuYW1lJ2AKLSAgICAgIH0pOwotICAgIAotICAgICAgZmluZFVzZXIoKS50aGVuKGZ1bmN0aW9u
ICh1c2VyKSB7Ci0gICAgICAgIHRocm93IG5ldyBFcnJvcignRm91bmQgdXNlciwgYnV0IHN0aWxs
IHVuaGFwcHknKTsKLSAgICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHsKLSAgICAgICAgdGhyb3cg
bmV3IEVycm9yKCdgZmluZFVzZXJgIHJlamVjdGVkIGFuZCB3ZSdyZSB1bmhhcHB5Jyk7Ci0gICAg
ICB9KS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkgewotICAgICAgICAvLyBuZXZlciByZWFjaGVkCi0g
ICAgICB9LCBmdW5jdGlvbiAocmVhc29uKSB7Ci0gICAgICAgIC8vIGlmIGBmaW5kVXNlcmAgZnVs
ZmlsbGVkLCBgcmVhc29uYCB3aWxsIGJlICdGb3VuZCB1c2VyLCBidXQgc3RpbGwgdW5oYXBweScu
Ci0gICAgICAgIC8vIElmIGBmaW5kVXNlcmAgcmVqZWN0ZWQsIGByZWFzb25gIHdpbGwgYmUgJ2Bm
aW5kVXNlcmAgcmVqZWN0ZWQgYW5kIHdlJ3JlIHVuaGFwcHknLgotICAgICAgfSk7Ci0gICAgICBg
YGAKLSAgICAgIElmIHRoZSBkb3duc3RyZWFtIHByb21pc2UgZG9lcyBub3Qgc3BlY2lmeSBhIHJl
amVjdGlvbiBoYW5kbGVyLCByZWplY3Rpb24gcmVhc29ucyB3aWxsIGJlIHByb3BhZ2F0ZWQgZnVy
dGhlciBkb3duc3RyZWFtLgotICAgIAotICAgICAgYGBganMKLSAgICAgIGZpbmRVc2VyKCkudGhl
bihmdW5jdGlvbiAodXNlcikgewotICAgICAgICB0aHJvdyBuZXcgUGVkYWdvZ2ljYWxFeGNlcHRp
b24oJ1Vwc3RyZWFtIGVycm9yJyk7Ci0gICAgICB9KS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkgewot
ICAgICAgICAvLyBuZXZlciByZWFjaGVkCi0gICAgICB9KS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkg
ewotICAgICAgICAvLyBuZXZlciByZWFjaGVkCi0gICAgICB9LCBmdW5jdGlvbiAocmVhc29uKSB7
Ci0gICAgICAgIC8vIFRoZSBgUGVkZ2Fnb2NpYWxFeGNlcHRpb25gIGlzIHByb3BhZ2F0ZWQgYWxs
IHRoZSB3YXkgZG93biB0byBoZXJlCi0gICAgICB9KTsKLSAgICAgIGBgYAotICAgIAotICAgICAg
QXNzaW1pbGF0aW9uCi0gICAgICAtLS0tLS0tLS0tLS0KLSAgICAKLSAgICAgIFNvbWV0aW1lcyB0
aGUgdmFsdWUgeW91IHdhbnQgdG8gcHJvcGFnYXRlIHRvIGEgZG93bnN0cmVhbSBwcm9taXNlIGNh
biBvbmx5IGJlCi0gICAgICByZXRyaWV2ZWQgYXN5bmNocm9ub3VzbHkuIFRoaXMgY2FuIGJlIGFj
aGlldmVkIGJ5IHJldHVybmluZyBhIHByb21pc2UgaW4gdGhlCi0gICAgICBmdWxmaWxsbWVudCBv
ciByZWplY3Rpb24gaGFuZGxlci4gVGhlIGRvd25zdHJlYW0gcHJvbWlzZSB3aWxsIHRoZW4gYmUg
cGVuZGluZwotICAgICAgdW50aWwgdGhlIHJldHVybmVkIHByb21pc2UgaXMgc2V0dGxlZC4gVGhp
cyBpcyBjYWxsZWQgKmFzc2ltaWxhdGlvbiouCi0gICAgCi0gICAgICBgYGBqcwotICAgICAgZmlu
ZFVzZXIoKS50aGVuKGZ1bmN0aW9uICh1c2VyKSB7Ci0gICAgICAgIHJldHVybiBmaW5kQ29tbWVu
dHNCeUF1dGhvcih1c2VyKTsKLSAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKGNvbW1lbnRzKSB7Ci0g
ICAgICAgIC8vIFRoZSB1c2VyJ3MgY29tbWVudHMgYXJlIG5vdyBhdmFpbGFibGUKLSAgICAgIH0p
OwotICAgICAgYGBgCi0gICAgCi0gICAgICBJZiB0aGUgYXNzaW1saWF0ZWQgcHJvbWlzZSByZWpl
Y3RzLCB0aGVuIHRoZSBkb3duc3RyZWFtIHByb21pc2Ugd2lsbCBhbHNvIHJlamVjdC4KLSAgICAK
LSAgICAgIGBgYGpzCi0gICAgICBmaW5kVXNlcigpLnRoZW4oZnVuY3Rpb24gKHVzZXIpIHsKLSAg
ICAgICAgcmV0dXJuIGZpbmRDb21tZW50c0J5QXV0aG9yKHVzZXIpOwotICAgICAgfSkudGhlbihm
dW5jdGlvbiAoY29tbWVudHMpIHsKLSAgICAgICAgLy8gSWYgYGZpbmRDb21tZW50c0J5QXV0aG9y
YCBmdWxmaWxscywgd2UnbGwgaGF2ZSB0aGUgdmFsdWUgaGVyZQotICAgICAgfSwgZnVuY3Rpb24g
KHJlYXNvbikgewotICAgICAgICAvLyBJZiBgZmluZENvbW1lbnRzQnlBdXRob3JgIHJlamVjdHMs
IHdlJ2xsIGhhdmUgdGhlIHJlYXNvbiBoZXJlCi0gICAgICB9KTsKLSAgICAgIGBgYAotICAgIAot
ICAgICAgU2ltcGxlIEV4YW1wbGUKLSAgICAgIC0tLS0tLS0tLS0tLS0tCi0gICAgCi0gICAgICBT
eW5jaHJvbm91cyBFeGFtcGxlCi0gICAgCi0gICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICB2YXIg
cmVzdWx0OwotICAgIAotICAgICAgdHJ5IHsKLSAgICAgICAgcmVzdWx0ID0gZmluZFJlc3VsdCgp
OwotICAgICAgICAvLyBzdWNjZXNzCi0gICAgICB9IGNhdGNoKHJlYXNvbikgewotICAgICAgICAv
LyBmYWlsdXJlCi0gICAgICB9Ci0gICAgICBgYGAKLSAgICAKLSAgICAgIEVycmJhY2sgRXhhbXBs
ZQotICAgIAotICAgICAgYGBganMKLSAgICAgIGZpbmRSZXN1bHQoZnVuY3Rpb24ocmVzdWx0LCBl
cnIpewotICAgICAgICBpZiAoZXJyKSB7Ci0gICAgICAgICAgLy8gZmFpbHVyZQotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgIC8vIHN1Y2Nlc3MKLSAgICAgICAgfQotICAgICAgfSk7Ci0gICAg
ICBgYGAKLSAgICAKLSAgICAgIFByb21pc2UgRXhhbXBsZTsKLSAgICAKLSAgICAgIGBgYGphdmFz
Y3JpcHQKLSAgICAgIGZpbmRSZXN1bHQoKS50aGVuKGZ1bmN0aW9uKHJlc3VsdCl7Ci0gICAgICAg
IC8vIHN1Y2Nlc3MKLSAgICAgIH0sIGZ1bmN0aW9uKHJlYXNvbil7Ci0gICAgICAgIC8vIGZhaWx1
cmUKLSAgICAgIH0pOwotICAgICAgYGBgCi0gICAgCi0gICAgICBBZHZhbmNlZCBFeGFtcGxlCi0g
ICAgICAtLS0tLS0tLS0tLS0tLQotICAgIAotICAgICAgU3luY2hyb25vdXMgRXhhbXBsZQotICAg
IAotICAgICAgYGBgamF2YXNjcmlwdAotICAgICAgdmFyIGF1dGhvciwgYm9va3M7Ci0gICAgCi0g
ICAgICB0cnkgewotICAgICAgICBhdXRob3IgPSBmaW5kQXV0aG9yKCk7Ci0gICAgICAgIGJvb2tz
ICA9IGZpbmRCb29rc0J5QXV0aG9yKGF1dGhvcik7Ci0gICAgICAgIC8vIHN1Y2Nlc3MKLSAgICAg
IH0gY2F0Y2gocmVhc29uKSB7Ci0gICAgICAgIC8vIGZhaWx1cmUKLSAgICAgIH0KLSAgICAgIGBg
YAotICAgIAotICAgICAgRXJyYmFjayBFeGFtcGxlCi0gICAgCi0gICAgICBgYGBqcwotICAgIAot
ICAgICAgZnVuY3Rpb24gZm91bmRCb29rcyhib29rcykgewotICAgIAotICAgICAgfQotICAgIAot
ICAgICAgZnVuY3Rpb24gZmFpbHVyZShyZWFzb24pIHsKLSAgICAKLSAgICAgIH0KLSAgICAKLSAg
ICAgIGZpbmRBdXRob3IoZnVuY3Rpb24oYXV0aG9yLCBlcnIpewotICAgICAgICBpZiAoZXJyKSB7
Ci0gICAgICAgICAgZmFpbHVyZShlcnIpOwotICAgICAgICAgIC8vIGZhaWx1cmUKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICB0cnkgewotICAgICAgICAgICAgZmluZEJvb29rc0J5QXV0aG9y
KGF1dGhvciwgZnVuY3Rpb24oYm9va3MsIGVycikgewotICAgICAgICAgICAgICBpZiAoZXJyKSB7
Ci0gICAgICAgICAgICAgICAgZmFpbHVyZShlcnIpOwotICAgICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICBmb3VuZEJvb2tzKGJvb2tz
KTsKLSAgICAgICAgICAgICAgICB9IGNhdGNoKHJlYXNvbikgewotICAgICAgICAgICAgICAgICAg
ZmFpbHVyZShyZWFzb24pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfSk7Ci0gICAgICAgICAgfSBjYXRjaChlcnJvcikgewotICAgICAgICAgICAgZmFp
bHVyZShlcnIpOwotICAgICAgICAgIH0KLSAgICAgICAgICAvLyBzdWNjZXNzCi0gICAgICAgIH0K
LSAgICAgIH0pOwotICAgICAgYGBgCi0gICAgCi0gICAgICBQcm9taXNlIEV4YW1wbGU7Ci0gICAg
Ci0gICAgICBgYGBqYXZhc2NyaXB0Ci0gICAgICBmaW5kQXV0aG9yKCkuCi0gICAgICAgIHRoZW4o
ZmluZEJvb2tzQnlBdXRob3IpLgotICAgICAgICB0aGVuKGZ1bmN0aW9uKGJvb2tzKXsKLSAgICAg
ICAgICAvLyBmb3VuZCBib29rcwotICAgICAgfSkuY2F0Y2goZnVuY3Rpb24ocmVhc29uKXsKLSAg
ICAgICAgLy8gc29tZXRoaW5nIHdlbnQgd3JvbmcKLSAgICAgIH0pOwotICAgICAgYGBgCi0gICAg
Ci0gICAgICBAbWV0aG9kIHRoZW4KLSAgICAgIEBwYXJhbSB7RnVuY3Rpb259IG9uRnVsZmlsbG1l
bnQKLSAgICAgIEBwYXJhbSB7RnVuY3Rpb259IG9uUmVqZWN0aW9uCi0gICAgICBAcGFyYW0ge1N0
cmluZ30gbGFiZWwgb3B0aW9uYWwgc3RyaW5nIGZvciBsYWJlbGluZyB0aGUgcHJvbWlzZS4KLSAg
ICAgIFVzZWZ1bCBmb3IgdG9vbGluZy4KLSAgICAgIEByZXR1cm4ge1Byb21pc2V9Ci0gICAgKi8K
LSAgICB0aGVuOiBmdW5jdGlvbiAob25GdWxmaWxsbWVudCwgb25SZWplY3Rpb24sIGxhYmVsKSB7
Ci0gICAgICB2YXIgcGFyZW50ID0gdGhpczsKLSAgICAgIHZhciBzdGF0ZSA9IHBhcmVudC5fc3Rh
dGU7Ci0KLSAgICAgIGlmIChzdGF0ZSA9PT0gX3JzdnBJbnRlcm5hbC5GVUxGSUxMRUQgJiYgIW9u
RnVsZmlsbG1lbnQgfHwgc3RhdGUgPT09IF9yc3ZwSW50ZXJuYWwuUkVKRUNURUQgJiYgIW9uUmVq
ZWN0aW9uKSB7Ci0gICAgICAgIGlmIChfcnN2cENvbmZpZy5jb25maWcuaW5zdHJ1bWVudCkgewot
ICAgICAgICAgIF9yc3ZwSW5zdHJ1bWVudC5kZWZhdWx0KCdjaGFpbmVkJywgcGFyZW50LCBwYXJl
bnQpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBwYXJlbnQ7Ci0gICAgICB9Ci0KLSAgICAg
IHBhcmVudC5fb25FcnJvciA9IG51bGw7Ci0KLSAgICAgIHZhciBjaGlsZCA9IG5ldyBwYXJlbnQu
Y29uc3RydWN0b3IoX3JzdnBJbnRlcm5hbC5ub29wLCBsYWJlbCk7Ci0gICAgICB2YXIgcmVzdWx0
ID0gcGFyZW50Ll9yZXN1bHQ7Ci0KLSAgICAgIGlmIChfcnN2cENvbmZpZy5jb25maWcuaW5zdHJ1
bWVudCkgewotICAgICAgICBfcnN2cEluc3RydW1lbnQuZGVmYXVsdCgnY2hhaW5lZCcsIHBhcmVu
dCwgY2hpbGQpOwotICAgICAgfQotCi0gICAgICBpZiAoc3RhdGUpIHsKLSAgICAgICAgdmFyIGNh
bGxiYWNrID0gYXJndW1lbnRzW3N0YXRlIC0gMV07Ci0gICAgICAgIF9yc3ZwQ29uZmlnLmNvbmZp
Zy5hc3luYyhmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgX3JzdnBJbnRlcm5hbC5pbnZva2VDYWxs
YmFjayhzdGF0ZSwgY2hpbGQsIGNhbGxiYWNrLCByZXN1bHQpOwotICAgICAgICB9KTsKLSAgICAg
IH0gZWxzZSB7Ci0gICAgICAgIF9yc3ZwSW50ZXJuYWwuc3Vic2NyaWJlKHBhcmVudCwgY2hpbGQs
IG9uRnVsZmlsbG1lbnQsIG9uUmVqZWN0aW9uKTsKLSAgICAgIH0KLQotICAgICAgcmV0dXJuIGNo
aWxkOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgIGBjYXRjaGAgaXMgc2ltcGx5IHN1Z2FyIGZv
ciBgdGhlbih1bmRlZmluZWQsIG9uUmVqZWN0aW9uKWAgd2hpY2ggbWFrZXMgaXQgdGhlIHNhbWUK
LSAgICAgIGFzIHRoZSBjYXRjaCBibG9jayBvZiBhIHRyeS9jYXRjaCBzdGF0ZW1lbnQuCi0gICAg
Ci0gICAgICBgYGBqcwotICAgICAgZnVuY3Rpb24gZmluZEF1dGhvcigpewotICAgICAgICB0aHJv
dyBuZXcgRXJyb3IoJ2NvdWxkbid0IGZpbmQgdGhhdCBhdXRob3InKTsKLSAgICAgIH0KLSAgICAK
LSAgICAgIC8vIHN5bmNocm9ub3VzCi0gICAgICB0cnkgewotICAgICAgICBmaW5kQXV0aG9yKCk7
Ci0gICAgICB9IGNhdGNoKHJlYXNvbikgewotICAgICAgICAvLyBzb21ldGhpbmcgd2VudCB3cm9u
ZwotICAgICAgfQotICAgIAotICAgICAgLy8gYXN5bmMgd2l0aCBwcm9taXNlcwotICAgICAgZmlu
ZEF1dGhvcigpLmNhdGNoKGZ1bmN0aW9uKHJlYXNvbil7Ci0gICAgICAgIC8vIHNvbWV0aGluZyB3
ZW50IHdyb25nCi0gICAgICB9KTsKLSAgICAgIGBgYAotICAgIAotICAgICAgQG1ldGhvZCBjYXRj
aAotICAgICAgQHBhcmFtIHtGdW5jdGlvbn0gb25SZWplY3Rpb24KLSAgICAgIEBwYXJhbSB7U3Ry
aW5nfSBsYWJlbCBvcHRpb25hbCBzdHJpbmcgZm9yIGxhYmVsaW5nIHRoZSBwcm9taXNlLgotICAg
ICAgVXNlZnVsIGZvciB0b29saW5nLgotICAgICAgQHJldHVybiB7UHJvbWlzZX0KLSAgICAqLwot
ICAgICdjYXRjaCc6IGZ1bmN0aW9uIChvblJlamVjdGlvbiwgbGFiZWwpIHsKLSAgICAgIHJldHVy
biB0aGlzLnRoZW4odW5kZWZpbmVkLCBvblJlamVjdGlvbiwgbGFiZWwpOwotICAgIH0sCi0KLSAg
ICAvKioKLSAgICAgIGBmaW5hbGx5YCB3aWxsIGJlIGludm9rZWQgcmVnYXJkbGVzcyBvZiB0aGUg
cHJvbWlzZSdzIGZhdGUganVzdCBhcyBuYXRpdmUKLSAgICAgIHRyeS9jYXRjaC9maW5hbGx5IGJl
aGF2ZXMKLSAgICAKLSAgICAgIFN5bmNocm9ub3VzIGV4YW1wbGU6Ci0gICAgCi0gICAgICBgYGBq
cwotICAgICAgZmluZEF1dGhvcigpIHsKLSAgICAgICAgaWYgKE1hdGgucmFuZG9tKCkgPiAwLjUp
IHsKLSAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1
cm4gbmV3IEF1dGhvcigpOwotICAgICAgfQotICAgIAotICAgICAgdHJ5IHsKLSAgICAgICAgcmV0
dXJuIGZpbmRBdXRob3IoKTsgLy8gc3VjY2VlZCBvciBmYWlsCi0gICAgICB9IGNhdGNoKGVycm9y
KSB7Ci0gICAgICAgIHJldHVybiBmaW5kT3RoZXJBdXRoZXIoKTsKLSAgICAgIH0gZmluYWxseSB7
Ci0gICAgICAgIC8vIGFsd2F5cyBydW5zCi0gICAgICAgIC8vIGRvZXNuJ3QgYWZmZWN0IHRoZSBy
ZXR1cm4gdmFsdWUKLSAgICAgIH0KLSAgICAgIGBgYAotICAgIAotICAgICAgQXN5bmNocm9ub3Vz
IGV4YW1wbGU6Ci0gICAgCi0gICAgICBgYGBqcwotICAgICAgZmluZEF1dGhvcigpLmNhdGNoKGZ1
bmN0aW9uKHJlYXNvbil7Ci0gICAgICAgIHJldHVybiBmaW5kT3RoZXJBdXRoZXIoKTsKLSAgICAg
IH0pLmZpbmFsbHkoZnVuY3Rpb24oKXsKLSAgICAgICAgLy8gYXV0aG9yIHdhcyBlaXRoZXIgZm91
bmQsIG9yIG5vdAotICAgICAgfSk7Ci0gICAgICBgYGAKLSAgICAKLSAgICAgIEBtZXRob2QgZmlu
YWxseQotICAgICAgQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sKLSAgICAgIEBwYXJhbSB7U3Ry
aW5nfSBsYWJlbCBvcHRpb25hbCBzdHJpbmcgZm9yIGxhYmVsaW5nIHRoZSBwcm9taXNlLgotICAg
ICAgVXNlZnVsIGZvciB0b29saW5nLgotICAgICAgQHJldHVybiB7UHJvbWlzZX0KLSAgICAqLwot
ICAgICdmaW5hbGx5JzogZnVuY3Rpb24gKGNhbGxiYWNrLCBsYWJlbCkgewotICAgICAgdmFyIHBy
b21pc2UgPSB0aGlzOwotICAgICAgdmFyIGNvbnN0cnVjdG9yID0gcHJvbWlzZS5jb25zdHJ1Y3Rv
cjsKLQotICAgICAgcmV0dXJuIHByb21pc2UudGhlbihmdW5jdGlvbiAodmFsdWUpIHsKLSAgICAg
ICAgcmV0dXJuIGNvbnN0cnVjdG9yLnJlc29sdmUoY2FsbGJhY2soKSkudGhlbihmdW5jdGlvbiAo
KSB7Ci0gICAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgICAgICB9KTsKLSAgICAgIH0sIGZ1bmN0
aW9uIChyZWFzb24pIHsKLSAgICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yLnJlc29sdmUoY2FsbGJh
Y2soKSkudGhlbihmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgdGhyb3cgcmVhc29uOwotICAgICAg
ICB9KTsKLSAgICAgIH0sIGxhYmVsKTsKLSAgICB9Ci0gIH07Ci19KTsKLWVuaWZlZCgncnN2cC9w
cm9taXNlL2FsbCcsIFsnZXhwb3J0cycsICdyc3ZwL2VudW1lcmF0b3InXSwgZnVuY3Rpb24gKGV4
cG9ydHMsIF9yc3ZwRW51bWVyYXRvcikgewotICAndXNlIHN0cmljdCc7Ci0KLSAgZXhwb3J0cy5k
ZWZhdWx0ID0gYWxsOwotCi0gIC8qKgotICAgIGBSU1ZQLlByb21pc2UuYWxsYCBhY2NlcHRzIGFu
IGFycmF5IG9mIHByb21pc2VzLCBhbmQgcmV0dXJucyBhIG5ldyBwcm9taXNlIHdoaWNoCi0gICAg
aXMgZnVsZmlsbGVkIHdpdGggYW4gYXJyYXkgb2YgZnVsZmlsbG1lbnQgdmFsdWVzIGZvciB0aGUg
cGFzc2VkIHByb21pc2VzLCBvcgotICAgIHJlamVjdGVkIHdpdGggdGhlIHJlYXNvbiBvZiB0aGUg
Zmlyc3QgcGFzc2VkIHByb21pc2UgdG8gYmUgcmVqZWN0ZWQuIEl0IGNhc3RzIGFsbAotICAgIGVs
ZW1lbnRzIG9mIHRoZSBwYXNzZWQgaXRlcmFibGUgdG8gcHJvbWlzZXMgYXMgaXQgcnVucyB0aGlz
IGFsZ29yaXRobS4KLSAgCi0gICAgRXhhbXBsZToKLSAgCi0gICAgYGBgamF2YXNjcmlwdAotICAg
IHZhciBwcm9taXNlMSA9IFJTVlAucmVzb2x2ZSgxKTsKLSAgICB2YXIgcHJvbWlzZTIgPSBSU1ZQ
LnJlc29sdmUoMik7Ci0gICAgdmFyIHByb21pc2UzID0gUlNWUC5yZXNvbHZlKDMpOwotICAgIHZh
ciBwcm9taXNlcyA9IFsgcHJvbWlzZTEsIHByb21pc2UyLCBwcm9taXNlMyBdOwotICAKLSAgICBS
U1ZQLlByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKGZ1bmN0aW9uKGFycmF5KXsKLSAgICAgIC8v
IFRoZSBhcnJheSBoZXJlIHdvdWxkIGJlIFsgMSwgMiwgMyBdOwotICAgIH0pOwotICAgIGBgYAot
ICAKLSAgICBJZiBhbnkgb2YgdGhlIGBwcm9taXNlc2AgZ2l2ZW4gdG8gYFJTVlAuYWxsYCBhcmUg
cmVqZWN0ZWQsIHRoZSBmaXJzdCBwcm9taXNlCi0gICAgdGhhdCBpcyByZWplY3RlZCB3aWxsIGJl
IGdpdmVuIGFzIGFuIGFyZ3VtZW50IHRvIHRoZSByZXR1cm5lZCBwcm9taXNlcydzCi0gICAgcmVq
ZWN0aW9uIGhhbmRsZXIuIEZvciBleGFtcGxlOgotICAKLSAgICBFeGFtcGxlOgotICAKLSAgICBg
YGBqYXZhc2NyaXB0Ci0gICAgdmFyIHByb21pc2UxID0gUlNWUC5yZXNvbHZlKDEpOwotICAgIHZh
ciBwcm9taXNlMiA9IFJTVlAucmVqZWN0KG5ldyBFcnJvcigiMiIpKTsKLSAgICB2YXIgcHJvbWlz
ZTMgPSBSU1ZQLnJlamVjdChuZXcgRXJyb3IoIjMiKSk7Ci0gICAgdmFyIHByb21pc2VzID0gWyBw
cm9taXNlMSwgcHJvbWlzZTIsIHByb21pc2UzIF07Ci0gIAotICAgIFJTVlAuUHJvbWlzZS5hbGwo
cHJvbWlzZXMpLnRoZW4oZnVuY3Rpb24oYXJyYXkpewotICAgICAgLy8gQ29kZSBoZXJlIG5ldmVy
IHJ1bnMgYmVjYXVzZSB0aGVyZSBhcmUgcmVqZWN0ZWQgcHJvbWlzZXMhCi0gICAgfSwgZnVuY3Rp
b24oZXJyb3IpIHsKLSAgICAgIC8vIGVycm9yLm1lc3NhZ2UgPT09ICIyIgotICAgIH0pOwotICAg
IGBgYAotICAKLSAgICBAbWV0aG9kIGFsbAotICAgIEBzdGF0aWMKLSAgICBAcGFyYW0ge0FycmF5
fSBlbnRyaWVzIGFycmF5IG9mIHByb21pc2VzCi0gICAgQHBhcmFtIHtTdHJpbmd9IGxhYmVsIG9w
dGlvbmFsIHN0cmluZyBmb3IgbGFiZWxpbmcgdGhlIHByb21pc2UuCi0gICAgVXNlZnVsIGZvciB0
b29saW5nLgotICAgIEByZXR1cm4ge1Byb21pc2V9IHByb21pc2UgdGhhdCBpcyBmdWxmaWxsZWQg
d2hlbiBhbGwgYHByb21pc2VzYCBoYXZlIGJlZW4KLSAgICBmdWxmaWxsZWQsIG9yIHJlamVjdGVk
IGlmIGFueSBvZiB0aGVtIGJlY29tZSByZWplY3RlZC4KLSAgICBAc3RhdGljCi0gICovCi0KLSAg
ZnVuY3Rpb24gYWxsKGVudHJpZXMsIGxhYmVsKSB7Ci0gICAgcmV0dXJuIG5ldyBfcnN2cEVudW1l
cmF0b3IuZGVmYXVsdCh0aGlzLCBlbnRyaWVzLCB0cnVlLCAvKiBhYm9ydCBvbiByZWplY3QgKi9s
YWJlbCkucHJvbWlzZTsKLSAgfQotfSk7Ci1lbmlmZWQoJ3JzdnAvcHJvbWlzZS9yYWNlJywgWydl
eHBvcnRzJywgJ3JzdnAvdXRpbHMnLCAncnN2cC8taW50ZXJuYWwnXSwgZnVuY3Rpb24gKGV4cG9y
dHMsIF9yc3ZwVXRpbHMsIF9yc3ZwSW50ZXJuYWwpIHsKLSAgJ3VzZSBzdHJpY3QnOwotCi0gIGV4
cG9ydHMuZGVmYXVsdCA9IHJhY2U7Ci0KLSAgLyoqCi0gICAgYFJTVlAuUHJvbWlzZS5yYWNlYCBy
ZXR1cm5zIGEgbmV3IHByb21pc2Ugd2hpY2ggaXMgc2V0dGxlZCBpbiB0aGUgc2FtZSB3YXkgYXMg
dGhlCi0gICAgZmlyc3QgcGFzc2VkIHByb21pc2UgdG8gc2V0dGxlLgotICAKLSAgICBFeGFtcGxl
OgotICAKLSAgICBgYGBqYXZhc2NyaXB0Ci0gICAgdmFyIHByb21pc2UxID0gbmV3IFJTVlAuUHJv
bWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpewotICAgICAgc2V0VGltZW91dChmdW5jdGlv
bigpewotICAgICAgICByZXNvbHZlKCdwcm9taXNlIDEnKTsKLSAgICAgIH0sIDIwMCk7Ci0gICAg
fSk7Ci0gIAotICAgIHZhciBwcm9taXNlMiA9IG5ldyBSU1ZQLlByb21pc2UoZnVuY3Rpb24ocmVz
b2x2ZSwgcmVqZWN0KXsKLSAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXsKLSAgICAgICAgcmVz
b2x2ZSgncHJvbWlzZSAyJyk7Ci0gICAgICB9LCAxMDApOwotICAgIH0pOwotICAKLSAgICBSU1ZQ
LlByb21pc2UucmFjZShbcHJvbWlzZTEsIHByb21pc2UyXSkudGhlbihmdW5jdGlvbihyZXN1bHQp
ewotICAgICAgLy8gcmVzdWx0ID09PSAncHJvbWlzZSAyJyBiZWNhdXNlIGl0IHdhcyByZXNvbHZl
ZCBiZWZvcmUgcHJvbWlzZTEKLSAgICAgIC8vIHdhcyByZXNvbHZlZC4KLSAgICB9KTsKLSAgICBg
YGAKLSAgCi0gICAgYFJTVlAuUHJvbWlzZS5yYWNlYCBpcyBkZXRlcm1pbmlzdGljIGluIHRoYXQg
b25seSB0aGUgc3RhdGUgb2YgdGhlIGZpcnN0Ci0gICAgc2V0dGxlZCBwcm9taXNlIG1hdHRlcnMu
IEZvciBleGFtcGxlLCBldmVuIGlmIG90aGVyIHByb21pc2VzIGdpdmVuIHRvIHRoZQotICAgIGBw
cm9taXNlc2AgYXJyYXkgYXJndW1lbnQgYXJlIHJlc29sdmVkLCBidXQgdGhlIGZpcnN0IHNldHRs
ZWQgcHJvbWlzZSBoYXMKLSAgICBiZWNvbWUgcmVqZWN0ZWQgYmVmb3JlIHRoZSBvdGhlciBwcm9t
aXNlcyBiZWNhbWUgZnVsZmlsbGVkLCB0aGUgcmV0dXJuZWQKLSAgICBwcm9taXNlIHdpbGwgYmVj
b21lIHJlamVjdGVkOgotICAKLSAgICBgYGBqYXZhc2NyaXB0Ci0gICAgdmFyIHByb21pc2UxID0g
bmV3IFJTVlAuUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpewotICAgICAgc2V0VGlt
ZW91dChmdW5jdGlvbigpewotICAgICAgICByZXNvbHZlKCdwcm9taXNlIDEnKTsKLSAgICAgIH0s
IDIwMCk7Ci0gICAgfSk7Ci0gIAotICAgIHZhciBwcm9taXNlMiA9IG5ldyBSU1ZQLlByb21pc2Uo
ZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KXsKLSAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXsK
LSAgICAgICAgcmVqZWN0KG5ldyBFcnJvcigncHJvbWlzZSAyJykpOwotICAgICAgfSwgMTAwKTsK
LSAgICB9KTsKLSAgCi0gICAgUlNWUC5Qcm9taXNlLnJhY2UoW3Byb21pc2UxLCBwcm9taXNlMl0p
LnRoZW4oZnVuY3Rpb24ocmVzdWx0KXsKLSAgICAgIC8vIENvZGUgaGVyZSBuZXZlciBydW5zCi0g
ICAgfSwgZnVuY3Rpb24ocmVhc29uKXsKLSAgICAgIC8vIHJlYXNvbi5tZXNzYWdlID09PSAncHJv
bWlzZSAyJyBiZWNhdXNlIHByb21pc2UgMiBiZWNhbWUgcmVqZWN0ZWQgYmVmb3JlCi0gICAgICAv
LyBwcm9taXNlIDEgYmVjYW1lIGZ1bGZpbGxlZAotICAgIH0pOwotICAgIGBgYAotICAKLSAgICBB
biBleGFtcGxlIHJlYWwtd29ybGQgdXNlIGNhc2UgaXMgaW1wbGVtZW50aW5nIHRpbWVvdXRzOgot
ICAKLSAgICBgYGBqYXZhc2NyaXB0Ci0gICAgUlNWUC5Qcm9taXNlLnJhY2UoW2FqYXgoJ2Zvby5q
c29uJyksIHRpbWVvdXQoNTAwMCldKQotICAgIGBgYAotICAKLSAgICBAbWV0aG9kIHJhY2UKLSAg
ICBAc3RhdGljCi0gICAgQHBhcmFtIHtBcnJheX0gZW50cmllcyBhcnJheSBvZiBwcm9taXNlcyB0
byBvYnNlcnZlCi0gICAgQHBhcmFtIHtTdHJpbmd9IGxhYmVsIG9wdGlvbmFsIHN0cmluZyBmb3Ig
ZGVzY3JpYmluZyB0aGUgcHJvbWlzZSByZXR1cm5lZC4KLSAgICBVc2VmdWwgZm9yIHRvb2xpbmcu
Ci0gICAgQHJldHVybiB7UHJvbWlzZX0gYSBwcm9taXNlIHdoaWNoIHNldHRsZXMgaW4gdGhlIHNh
bWUgd2F5IGFzIHRoZSBmaXJzdCBwYXNzZWQKLSAgICBwcm9taXNlIHRvIHNldHRsZS4KLSAgKi8K
LQotICBmdW5jdGlvbiByYWNlKGVudHJpZXMsIGxhYmVsKSB7Ci0gICAgLypqc2hpbnQgdmFsaWR0
aGlzOnRydWUgKi8KLSAgICB2YXIgQ29uc3RydWN0b3IgPSB0aGlzOwotCi0gICAgdmFyIHByb21p
c2UgPSBuZXcgQ29uc3RydWN0b3IoX3JzdnBJbnRlcm5hbC5ub29wLCBsYWJlbCk7Ci0KLSAgICBp
ZiAoIV9yc3ZwVXRpbHMuaXNBcnJheShlbnRyaWVzKSkgewotICAgICAgX3JzdnBJbnRlcm5hbC5y
ZWplY3QocHJvbWlzZSwgbmV3IFR5cGVFcnJvcignWW91IG11c3QgcGFzcyBhbiBhcnJheSB0byBy
YWNlLicpKTsKLSAgICAgIHJldHVybiBwcm9taXNlOwotICAgIH0KLQotICAgIHZhciBsZW5ndGgg
PSBlbnRyaWVzLmxlbmd0aDsKLQotICAgIGZ1bmN0aW9uIG9uRnVsZmlsbG1lbnQodmFsdWUpIHsK
LSAgICAgIF9yc3ZwSW50ZXJuYWwucmVzb2x2ZShwcm9taXNlLCB2YWx1ZSk7Ci0gICAgfQotCi0g
ICAgZnVuY3Rpb24gb25SZWplY3Rpb24ocmVhc29uKSB7Ci0gICAgICBfcnN2cEludGVybmFsLnJl
amVjdChwcm9taXNlLCByZWFzb24pOwotICAgIH0KLQotICAgIGZvciAodmFyIGkgPSAwOyBwcm9t
aXNlLl9zdGF0ZSA9PT0gX3JzdnBJbnRlcm5hbC5QRU5ESU5HICYmIGkgPCBsZW5ndGg7IGkrKykg
ewotICAgICAgX3JzdnBJbnRlcm5hbC5zdWJzY3JpYmUoQ29uc3RydWN0b3IucmVzb2x2ZShlbnRy
aWVzW2ldKSwgdW5kZWZpbmVkLCBvbkZ1bGZpbGxtZW50LCBvblJlamVjdGlvbik7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIHByb21pc2U7Ci0gIH0KLX0pOwotZW5pZmVkKCdyc3ZwL3Byb21pc2UvcmVq
ZWN0JywgWydleHBvcnRzJywgJ3JzdnAvLWludGVybmFsJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBf
cnN2cEludGVybmFsKSB7Ci0gICd1c2Ugc3RyaWN0JzsKLQotICBleHBvcnRzLmRlZmF1bHQgPSBy
ZWplY3Q7Ci0KLSAgLyoqCi0gICAgYFJTVlAuUHJvbWlzZS5yZWplY3RgIHJldHVybnMgYSBwcm9t
aXNlIHJlamVjdGVkIHdpdGggdGhlIHBhc3NlZCBgcmVhc29uYC4KLSAgICBJdCBpcyBzaG9ydGhh
bmQgZm9yIHRoZSBmb2xsb3dpbmc6Ci0gIAotICAgIGBgYGphdmFzY3JpcHQKLSAgICB2YXIgcHJv
bWlzZSA9IG5ldyBSU1ZQLlByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KXsKLSAgICAg
IHJlamVjdChuZXcgRXJyb3IoJ1dIT09QUycpKTsKLSAgICB9KTsKLSAgCi0gICAgcHJvbWlzZS50
aGVuKGZ1bmN0aW9uKHZhbHVlKXsKLSAgICAgIC8vIENvZGUgaGVyZSBkb2Vzbid0IHJ1biBiZWNh
dXNlIHRoZSBwcm9taXNlIGlzIHJlamVjdGVkIQotICAgIH0sIGZ1bmN0aW9uKHJlYXNvbil7Ci0g
ICAgICAvLyByZWFzb24ubWVzc2FnZSA9PT0gJ1dIT09QUycKLSAgICB9KTsKLSAgICBgYGAKLSAg
Ci0gICAgSW5zdGVhZCBvZiB3cml0aW5nIHRoZSBhYm92ZSwgeW91ciBjb2RlIG5vdyBzaW1wbHkg
YmVjb21lcyB0aGUgZm9sbG93aW5nOgotICAKLSAgICBgYGBqYXZhc2NyaXB0Ci0gICAgdmFyIHBy
b21pc2UgPSBSU1ZQLlByb21pc2UucmVqZWN0KG5ldyBFcnJvcignV0hPT1BTJykpOwotICAKLSAg
ICBwcm9taXNlLnRoZW4oZnVuY3Rpb24odmFsdWUpewotICAgICAgLy8gQ29kZSBoZXJlIGRvZXNu
J3QgcnVuIGJlY2F1c2UgdGhlIHByb21pc2UgaXMgcmVqZWN0ZWQhCi0gICAgfSwgZnVuY3Rpb24o
cmVhc29uKXsKLSAgICAgIC8vIHJlYXNvbi5tZXNzYWdlID09PSAnV0hPT1BTJwotICAgIH0pOwot
ICAgIGBgYAotICAKLSAgICBAbWV0aG9kIHJlamVjdAotICAgIEBzdGF0aWMKLSAgICBAcGFyYW0g
eyp9IHJlYXNvbiB2YWx1ZSB0aGF0IHRoZSByZXR1cm5lZCBwcm9taXNlIHdpbGwgYmUgcmVqZWN0
ZWQgd2l0aC4KLSAgICBAcGFyYW0ge1N0cmluZ30gbGFiZWwgb3B0aW9uYWwgc3RyaW5nIGZvciBp
ZGVudGlmeWluZyB0aGUgcmV0dXJuZWQgcHJvbWlzZS4KLSAgICBVc2VmdWwgZm9yIHRvb2xpbmcu
Ci0gICAgQHJldHVybiB7UHJvbWlzZX0gYSBwcm9taXNlIHJlamVjdGVkIHdpdGggdGhlIGdpdmVu
IGByZWFzb25gLgotICAqLwotCi0gIGZ1bmN0aW9uIHJlamVjdChyZWFzb24sIGxhYmVsKSB7Ci0g
ICAgLypqc2hpbnQgdmFsaWR0aGlzOnRydWUgKi8KLSAgICB2YXIgQ29uc3RydWN0b3IgPSB0aGlz
OwotICAgIHZhciBwcm9taXNlID0gbmV3IENvbnN0cnVjdG9yKF9yc3ZwSW50ZXJuYWwubm9vcCwg
bGFiZWwpOwotICAgIF9yc3ZwSW50ZXJuYWwucmVqZWN0KHByb21pc2UsIHJlYXNvbik7Ci0gICAg
cmV0dXJuIHByb21pc2U7Ci0gIH0KLX0pOwotZW5pZmVkKCdyc3ZwL3Byb21pc2UvcmVzb2x2ZScs
IFsnZXhwb3J0cycsICdyc3ZwLy1pbnRlcm5hbCddLCBmdW5jdGlvbiAoZXhwb3J0cywgX3JzdnBJ
bnRlcm5hbCkgewotICAndXNlIHN0cmljdCc7Ci0KLSAgZXhwb3J0cy5kZWZhdWx0ID0gcmVzb2x2
ZTsKLQotICAvKioKLSAgICBgUlNWUC5Qcm9taXNlLnJlc29sdmVgIHJldHVybnMgYSBwcm9taXNl
IHRoYXQgd2lsbCBiZWNvbWUgcmVzb2x2ZWQgd2l0aCB0aGUKLSAgICBwYXNzZWQgYHZhbHVlYC4g
SXQgaXMgc2hvcnRoYW5kIGZvciB0aGUgZm9sbG93aW5nOgotICAKLSAgICBgYGBqYXZhc2NyaXB0
Ci0gICAgdmFyIHByb21pc2UgPSBuZXcgUlNWUC5Qcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJl
amVjdCl7Ci0gICAgICByZXNvbHZlKDEpOwotICAgIH0pOwotICAKLSAgICBwcm9taXNlLnRoZW4o
ZnVuY3Rpb24odmFsdWUpewotICAgICAgLy8gdmFsdWUgPT09IDEKLSAgICB9KTsKLSAgICBgYGAK
LSAgCi0gICAgSW5zdGVhZCBvZiB3cml0aW5nIHRoZSBhYm92ZSwgeW91ciBjb2RlIG5vdyBzaW1w
bHkgYmVjb21lcyB0aGUgZm9sbG93aW5nOgotICAKLSAgICBgYGBqYXZhc2NyaXB0Ci0gICAgdmFy
IHByb21pc2UgPSBSU1ZQLlByb21pc2UucmVzb2x2ZSgxKTsKLSAgCi0gICAgcHJvbWlzZS50aGVu
KGZ1bmN0aW9uKHZhbHVlKXsKLSAgICAgIC8vIHZhbHVlID09PSAxCi0gICAgfSk7Ci0gICAgYGBg
Ci0gIAotICAgIEBtZXRob2QgcmVzb2x2ZQotICAgIEBzdGF0aWMKLSAgICBAcGFyYW0geyp9IG9i
amVjdCB2YWx1ZSB0aGF0IHRoZSByZXR1cm5lZCBwcm9taXNlIHdpbGwgYmUgcmVzb2x2ZWQgd2l0
aAotICAgIEBwYXJhbSB7U3RyaW5nfSBsYWJlbCBvcHRpb25hbCBzdHJpbmcgZm9yIGlkZW50aWZ5
aW5nIHRoZSByZXR1cm5lZCBwcm9taXNlLgotICAgIFVzZWZ1bCBmb3IgdG9vbGluZy4KLSAgICBA
cmV0dXJuIHtQcm9taXNlfSBhIHByb21pc2UgdGhhdCB3aWxsIGJlY29tZSBmdWxmaWxsZWQgd2l0
aCB0aGUgZ2l2ZW4KLSAgICBgdmFsdWVgCi0gICovCi0KLSAgZnVuY3Rpb24gcmVzb2x2ZShvYmpl
Y3QsIGxhYmVsKSB7Ci0gICAgLypqc2hpbnQgdmFsaWR0aGlzOnRydWUgKi8KLSAgICB2YXIgQ29u
c3RydWN0b3IgPSB0aGlzOwotCi0gICAgaWYgKG9iamVjdCAmJiB0eXBlb2Ygb2JqZWN0ID09PSAn
b2JqZWN0JyAmJiBvYmplY3QuY29uc3RydWN0b3IgPT09IENvbnN0cnVjdG9yKSB7Ci0gICAgICBy
ZXR1cm4gb2JqZWN0OwotICAgIH0KLQotICAgIHZhciBwcm9taXNlID0gbmV3IENvbnN0cnVjdG9y
KF9yc3ZwSW50ZXJuYWwubm9vcCwgbGFiZWwpOwotICAgIF9yc3ZwSW50ZXJuYWwucmVzb2x2ZShw
cm9taXNlLCBvYmplY3QpOwotICAgIHJldHVybiBwcm9taXNlOwotICB9Ci19KTsKLWVuaWZlZCgn
cnN2cC9yYWNlJywgWydleHBvcnRzJywgJ3JzdnAvcHJvbWlzZSddLCBmdW5jdGlvbiAoZXhwb3J0
cywgX3JzdnBQcm9taXNlKSB7Ci0gICd1c2Ugc3RyaWN0JzsKLQotICBleHBvcnRzLmRlZmF1bHQg
PSByYWNlOwotCi0gIC8qKgotICAgIFRoaXMgaXMgYSBjb252ZW5pZW50IGFsaWFzIGZvciBgUlNW
UC5Qcm9taXNlLnJhY2VgLgotICAKLSAgICBAbWV0aG9kIHJhY2UKLSAgICBAc3RhdGljCi0gICAg
QGZvciBSU1ZQCi0gICAgQHBhcmFtIHtBcnJheX0gYXJyYXkgQXJyYXkgb2YgcHJvbWlzZXMuCi0g
ICAgQHBhcmFtIHtTdHJpbmd9IGxhYmVsIEFuIG9wdGlvbmFsIGxhYmVsLiBUaGlzIGlzIHVzZWZ1
bAotICAgIGZvciB0b29saW5nLgotICAgKi8KLQotICBmdW5jdGlvbiByYWNlKGFycmF5LCBsYWJl
bCkgewotICAgIHJldHVybiBfcnN2cFByb21pc2UuZGVmYXVsdC5yYWNlKGFycmF5LCBsYWJlbCk7
Ci0gIH0KLX0pOwotZW5pZmVkKCdyc3ZwL3JlamVjdCcsIFsnZXhwb3J0cycsICdyc3ZwL3Byb21p
c2UnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9yc3ZwUHJvbWlzZSkgewotICAndXNlIHN0cmljdCc7
Ci0KLSAgZXhwb3J0cy5kZWZhdWx0ID0gcmVqZWN0OwotCi0gIC8qKgotICAgIFRoaXMgaXMgYSBj
b252ZW5pZW50IGFsaWFzIGZvciBgUlNWUC5Qcm9taXNlLnJlamVjdGAuCi0gIAotICAgIEBtZXRo
b2QgcmVqZWN0Ci0gICAgQHN0YXRpYwotICAgIEBmb3IgUlNWUAotICAgIEBwYXJhbSB7Kn0gcmVh
c29uIHZhbHVlIHRoYXQgdGhlIHJldHVybmVkIHByb21pc2Ugd2lsbCBiZSByZWplY3RlZCB3aXRo
LgotICAgIEBwYXJhbSB7U3RyaW5nfSBsYWJlbCBvcHRpb25hbCBzdHJpbmcgZm9yIGlkZW50aWZ5
aW5nIHRoZSByZXR1cm5lZCBwcm9taXNlLgotICAgIFVzZWZ1bCBmb3IgdG9vbGluZy4KLSAgICBA
cmV0dXJuIHtQcm9taXNlfSBhIHByb21pc2UgcmVqZWN0ZWQgd2l0aCB0aGUgZ2l2ZW4gYHJlYXNv
bmAuCi0gICovCi0KLSAgZnVuY3Rpb24gcmVqZWN0KHJlYXNvbiwgbGFiZWwpIHsKLSAgICByZXR1
cm4gX3JzdnBQcm9taXNlLmRlZmF1bHQucmVqZWN0KHJlYXNvbiwgbGFiZWwpOwotICB9Ci19KTsK
LWVuaWZlZCgncnN2cC9yZXNvbHZlJywgWydleHBvcnRzJywgJ3JzdnAvcHJvbWlzZSddLCBmdW5j
dGlvbiAoZXhwb3J0cywgX3JzdnBQcm9taXNlKSB7Ci0gICd1c2Ugc3RyaWN0JzsKLQotICBleHBv
cnRzLmRlZmF1bHQgPSByZXNvbHZlOwotCi0gIC8qKgotICAgIFRoaXMgaXMgYSBjb252ZW5pZW50
IGFsaWFzIGZvciBgUlNWUC5Qcm9taXNlLnJlc29sdmVgLgotICAKLSAgICBAbWV0aG9kIHJlc29s
dmUKLSAgICBAc3RhdGljCi0gICAgQGZvciBSU1ZQCi0gICAgQHBhcmFtIHsqfSB2YWx1ZSB2YWx1
ZSB0aGF0IHRoZSByZXR1cm5lZCBwcm9taXNlIHdpbGwgYmUgcmVzb2x2ZWQgd2l0aAotICAgIEBw
YXJhbSB7U3RyaW5nfSBsYWJlbCBvcHRpb25hbCBzdHJpbmcgZm9yIGlkZW50aWZ5aW5nIHRoZSBy
ZXR1cm5lZCBwcm9taXNlLgotICAgIFVzZWZ1bCBmb3IgdG9vbGluZy4KLSAgICBAcmV0dXJuIHtQ
cm9taXNlfSBhIHByb21pc2UgdGhhdCB3aWxsIGJlY29tZSBmdWxmaWxsZWQgd2l0aCB0aGUgZ2l2
ZW4KLSAgICBgdmFsdWVgCi0gICovCi0KLSAgZnVuY3Rpb24gcmVzb2x2ZSh2YWx1ZSwgbGFiZWwp
IHsKLSAgICByZXR1cm4gX3JzdnBQcm9taXNlLmRlZmF1bHQucmVzb2x2ZSh2YWx1ZSwgbGFiZWwp
OwotICB9Ci19KTsKLWVuaWZlZCgicnN2cC9yZXRocm93IiwgWyJleHBvcnRzIl0sIGZ1bmN0aW9u
IChleHBvcnRzKSB7Ci0gIC8qKgotICAgIGBSU1ZQLnJldGhyb3dgIHdpbGwgcmV0aHJvdyBhbiBl
cnJvciBvbiB0aGUgbmV4dCB0dXJuIG9mIHRoZSBKYXZhU2NyaXB0IGV2ZW50Ci0gICAgbG9vcCBp
biBvcmRlciB0byBhaWQgZGVidWdnaW5nLgotICAKLSAgICBQcm9taXNlcyBBKyBzcGVjaWZpZXMg
dGhhdCBhbnkgZXhjZXB0aW9ucyB0aGF0IG9jY3VyIHdpdGggYSBwcm9taXNlIG11c3QgYmUKLSAg
ICBjYXVnaHQgYnkgdGhlIHByb21pc2VzIGltcGxlbWVudGF0aW9uIGFuZCBidWJibGVkIHRvIHRo
ZSBsYXN0IGhhbmRsZXIuIEZvcgotICAgIHRoaXMgcmVhc29uLCBpdCBpcyByZWNvbW1lbmRlZCB0
aGF0IHlvdSBhbHdheXMgc3BlY2lmeSBhIHNlY29uZCByZWplY3Rpb24KLSAgICBoYW5kbGVyIGZ1
bmN0aW9uIHRvIGB0aGVuYC4gSG93ZXZlciwgYFJTVlAucmV0aHJvd2Agd2lsbCB0aHJvdyB0aGUg
ZXhjZXB0aW9uCi0gICAgb3V0c2lkZSBvZiB0aGUgcHJvbWlzZSwgc28gaXQgYnViYmxlcyB1cCB0
byB5b3VyIGNvbnNvbGUgaWYgaW4gdGhlIGJyb3dzZXIsCi0gICAgb3IgZG9tYWluL2NhdXNlIHVu
Y2F1Z2h0IGV4Y2VwdGlvbiBpbiBOb2RlLiBgcmV0aHJvd2Agd2lsbCBhbHNvIHRocm93IHRoZQot
ICAgIGVycm9yIGFnYWluIHNvIHRoZSBlcnJvciBjYW4gYmUgaGFuZGxlZCBieSB0aGUgcHJvbWlz
ZSBwZXIgdGhlIHNwZWMuCi0gIAotICAgIGBgYGphdmFzY3JpcHQKLSAgICBmdW5jdGlvbiB0aHJv
d3MoKXsKLSAgICAgIHRocm93IG5ldyBFcnJvcignV2hvb3BzIScpOwotICAgIH0KLSAgCi0gICAg
dmFyIHByb21pc2UgPSBuZXcgUlNWUC5Qcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCl7
Ci0gICAgICB0aHJvd3MoKTsKLSAgICB9KTsKLSAgCi0gICAgcHJvbWlzZS5jYXRjaChSU1ZQLnJl
dGhyb3cpLnRoZW4oZnVuY3Rpb24oKXsKLSAgICAgIC8vIENvZGUgaGVyZSBkb2Vzbid0IHJ1biBi
ZWNhdXNlIHRoZSBwcm9taXNlIGJlY2FtZSByZWplY3RlZCBkdWUgdG8gYW4KLSAgICAgIC8vIGVy
cm9yIQotICAgIH0sIGZ1bmN0aW9uIChlcnIpewotICAgICAgLy8gaGFuZGxlIHRoZSBlcnJvciBo
ZXJlCi0gICAgfSk7Ci0gICAgYGBgCi0gIAotICAgIFRoZSAnV2hvb3BzJyBlcnJvciB3aWxsIGJl
IHRocm93biBvbiB0aGUgbmV4dCB0dXJuIG9mIHRoZSBldmVudCBsb29wCi0gICAgYW5kIHlvdSBj
YW4gd2F0Y2ggZm9yIGl0IGluIHlvdXIgY29uc29sZS4gWW91IGNhbiBhbHNvIGhhbmRsZSBpdCB1
c2luZyBhCi0gICAgcmVqZWN0aW9uIGhhbmRsZXIgZ2l2ZW4gdG8gYC50aGVuYCBvciBgLmNhdGNo
YCBvbiB0aGUgcmV0dXJuZWQgcHJvbWlzZS4KLSAgCi0gICAgQG1ldGhvZCByZXRocm93Ci0gICAg
QHN0YXRpYwotICAgIEBmb3IgUlNWUAotICAgIEBwYXJhbSB7RXJyb3J9IHJlYXNvbiByZWFzb24g
dGhlIHByb21pc2UgYmVjYW1lIHJlamVjdGVkLgotICAgIEB0aHJvd3MgRXJyb3IKLSAgICBAc3Rh
dGljCi0gICovCi0gICJ1c2Ugc3RyaWN0IjsKLQotICBleHBvcnRzLmRlZmF1bHQgPSByZXRocm93
OwotCi0gIGZ1bmN0aW9uIHJldGhyb3cocmVhc29uKSB7Ci0gICAgc2V0VGltZW91dChmdW5jdGlv
biAoKSB7Ci0gICAgICB0aHJvdyByZWFzb247Ci0gICAgfSk7Ci0gICAgdGhyb3cgcmVhc29uOwot
ICB9Ci19KTsKLWVuaWZlZCgncnN2cC91dGlscycsIFsnZXhwb3J0cyddLCBmdW5jdGlvbiAoZXhw
b3J0cykgewotICAndXNlIHN0cmljdCc7Ci0KLSAgZXhwb3J0cy5vYmplY3RPckZ1bmN0aW9uID0g
b2JqZWN0T3JGdW5jdGlvbjsKLSAgZXhwb3J0cy5pc0Z1bmN0aW9uID0gaXNGdW5jdGlvbjsKLSAg
ZXhwb3J0cy5pc01heWJlVGhlbmFibGUgPSBpc01heWJlVGhlbmFibGU7Ci0KLSAgZnVuY3Rpb24g
b2JqZWN0T3JGdW5jdGlvbih4KSB7Ci0gICAgcmV0dXJuIHR5cGVvZiB4ID09PSAnZnVuY3Rpb24n
IHx8IHR5cGVvZiB4ID09PSAnb2JqZWN0JyAmJiB4ICE9PSBudWxsOwotICB9Ci0KLSAgZnVuY3Rp
b24gaXNGdW5jdGlvbih4KSB7Ci0gICAgcmV0dXJuIHR5cGVvZiB4ID09PSAnZnVuY3Rpb24nOwot
ICB9Ci0KLSAgZnVuY3Rpb24gaXNNYXliZVRoZW5hYmxlKHgpIHsKLSAgICByZXR1cm4gdHlwZW9m
IHggPT09ICdvYmplY3QnICYmIHggIT09IG51bGw7Ci0gIH0KLQotICB2YXIgX2lzQXJyYXk7Ci0g
IGlmICghQXJyYXkuaXNBcnJheSkgewotICAgIF9pc0FycmF5ID0gZnVuY3Rpb24gKHgpIHsKLSAg
ICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeCkgPT09ICdbb2JqZWN0
IEFycmF5XSc7Ci0gICAgfTsKLSAgfSBlbHNlIHsKLSAgICBfaXNBcnJheSA9IEFycmF5LmlzQXJy
YXk7Ci0gIH0KLQotICB2YXIgaXNBcnJheSA9IF9pc0FycmF5OwotCi0gIGV4cG9ydHMuaXNBcnJh
eSA9IGlzQXJyYXk7Ci0gIC8vIERhdGUubm93IGlzIG5vdCBhdmFpbGFibGUgaW4gYnJvd3NlcnMg
PCBJRTkKLSAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIv
SmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvRGF0ZS9ub3cjQ29tcGF0aWJpbGl0
eQotICB2YXIgbm93ID0gRGF0ZS5ub3cgfHwgZnVuY3Rpb24gKCkgewotICAgIHJldHVybiBuZXcg
RGF0ZSgpLmdldFRpbWUoKTsKLSAgfTsKLQotICBleHBvcnRzLm5vdyA9IG5vdzsKLSAgZnVuY3Rp
b24gRigpIHt9Ci0KLSAgdmFyIG9fY3JlYXRlID0gT2JqZWN0LmNyZWF0ZSB8fCBmdW5jdGlvbiAo
bykgewotICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkgewotICAgICAgdGhyb3cgbmV3IEVy
cm9yKCdTZWNvbmQgYXJndW1lbnQgbm90IHN1cHBvcnRlZCcpOwotICAgIH0KLSAgICBpZiAodHlw
ZW9mIG8gIT09ICdvYmplY3QnKSB7Ci0gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVu
dCBtdXN0IGJlIGFuIG9iamVjdCcpOwotICAgIH0KLSAgICBGLnByb3RvdHlwZSA9IG87Ci0gICAg
cmV0dXJuIG5ldyBGKCk7Ci0gIH07Ci0gIGV4cG9ydHMub19jcmVhdGUgPSBvX2NyZWF0ZTsKLX0p
OwotZW5pZmVkKCJ2ZXJ0ZXgiLCBbImV4cG9ydHMiXSwgZnVuY3Rpb24gKGV4cG9ydHMpIHsKLSAg
LyoqCi0gICAqIERBRyBWZXJ0ZXgKLSAgICoKLSAgICogQGNsYXNzIFZlcnRleAotICAgKiBAY29u
c3RydWN0b3IKLSAgICovCi0KLSAgInVzZSBzdHJpY3QiOwotCi0gIGV4cG9ydHMuZGVmYXVsdCA9
IFZlcnRleDsKLQotICBmdW5jdGlvbiBWZXJ0ZXgobmFtZSkgewotICAgIHRoaXMubmFtZSA9IG5h
bWU7Ci0gICAgdGhpcy5pbmNvbWluZyA9IHt9OwotICAgIHRoaXMuaW5jb21pbmdOYW1lcyA9IFtd
OwotICAgIHRoaXMuaGFzT3V0Z29pbmcgPSBmYWxzZTsKLSAgICB0aGlzLnZhbHVlID0gbnVsbDsK
LSAgfQotfSk7Ci1lbmlmZWQoInZpc2l0IiwgWyJleHBvcnRzIl0sIGZ1bmN0aW9uIChleHBvcnRz
KSB7Ci0gICJ1c2Ugc3RyaWN0IjsKLQotICBleHBvcnRzLmRlZmF1bHQgPSB2aXNpdDsKLQotICBm
dW5jdGlvbiB2aXNpdCh2ZXJ0ZXgsIGZuLCB2aXNpdGVkLCBwYXRoKSB7Ci0gICAgdmFyIG5hbWUg
PSB2ZXJ0ZXgubmFtZTsKLSAgICB2YXIgdmVydGljZXMgPSB2ZXJ0ZXguaW5jb21pbmc7Ci0gICAg
dmFyIG5hbWVzID0gdmVydGV4LmluY29taW5nTmFtZXM7Ci0gICAgdmFyIGxlbiA9IG5hbWVzLmxl
bmd0aDsKLSAgICB2YXIgaTsKLQotICAgIGlmICghdmlzaXRlZCkgewotICAgICAgdmlzaXRlZCA9
IHt9OwotICAgIH0KLSAgICBpZiAoIXBhdGgpIHsKLSAgICAgIHBhdGggPSBbXTsKLSAgICB9Ci0g
ICAgaWYgKHZpc2l0ZWQuaGFzT3duUHJvcGVydHkobmFtZSkpIHsKLSAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgcGF0aC5wdXNoKG5hbWUpOwotICAgIHZpc2l0ZWRbbmFtZV0gPSB0cnVlOwotICAg
IGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewotICAgICAgdmlzaXQodmVydGljZXNbbmFtZXNb
aV1dLCBmbiwgdmlzaXRlZCwgcGF0aCk7Ci0gICAgfQotICAgIGZuKHZlcnRleCwgcGF0aCk7Ci0g
ICAgcGF0aC5wb3AoKTsKLSAgfQotfSk7Ci1yZXF1aXJlTW9kdWxlKCJlbWJlciIpOwotCi19KCkp
OwotCi07KGZ1bmN0aW9uKCkgewotLyogZ2xvYmFscyBkZWZpbmUsIEVtYmVyLCBqUXVlcnkgKi8K
LQotICBmdW5jdGlvbiBwcm9jZXNzRW1iZXJTaGltcygpIHsKLSAgICB2YXIgc2hpbXMgPSB7Ci0g
ICAgICAnZW1iZXInOiB7Ci0gICAgICAgICdkZWZhdWx0JzogRW1iZXIKLSAgICAgIH0sCi0gICAg
ICAnZW1iZXItYXBwbGljYXRpb24nOiB7Ci0gICAgICAgICdkZWZhdWx0JzogRW1iZXIuQXBwbGlj
YXRpb24KLSAgICAgIH0sCi0gICAgICAnZW1iZXItYXJyYXknOiB7Ci0gICAgICAgICdkZWZhdWx0
JzogRW1iZXIuQXJyYXkKLSAgICAgIH0sCi0gICAgICAnZW1iZXItYXJyYXkvbXV0YWJsZSc6IHsK
LSAgICAgICAgJ2RlZmF1bHQnOiBFbWJlci5NdXRhYmxlQXJyYXkKLSAgICAgIH0sCi0gICAgICAn
ZW1iZXItYXJyYXkvdXRpbHMnOiB7Ci0gICAgICAgICdBJzogICAgICAgICAgICBFbWJlci5BLAot
ICAgICAgICAnaXNFbWJlckFycmF5JzogRW1iZXIuaXNBcnJheSwKLSAgICAgICAgJ3dyYXAnOiAg
ICAgICAgIEVtYmVyLm1ha2VBcnJheQotICAgICAgfSwKLSAgICAgICdlbWJlci1jb21wb25lbnQn
OiB7Ci0gICAgICAgICdkZWZhdWx0JzogRW1iZXIuQ29tcG9uZW50Ci0gICAgICB9LAotICAgICAg
J2VtYmVyLWNvbXBvbmVudHMvY2hlY2tib3gnOiB7Ci0gICAgICAgICdkZWZhdWx0JzogRW1iZXIu
Q2hlY2tib3gKLSAgICAgIH0sCi0gICAgICAnZW1iZXItY29tcG9uZW50cy90ZXh0LWFyZWEnOiB7
Ci0gICAgICAgICdkZWZhdWx0JzogRW1iZXIuVGV4dEFyZWEKLSAgICAgIH0sCi0gICAgICAnZW1i
ZXItY29tcG9uZW50cy90ZXh0LWZpZWxkJzogewotICAgICAgICAnZGVmYXVsdCc6IEVtYmVyLlRl
eHRGaWVsZAotICAgICAgfSwKLSAgICAgICdlbWJlci1jb250cm9sbGVyJzogewotICAgICAgICAn
ZGVmYXVsdCc6IEVtYmVyLkNvbnRyb2xsZXIKLSAgICAgIH0sCi0gICAgICAnZW1iZXItY29udHJv
bGxlci9pbmplY3QnOiB7Ci0gICAgICAgICdkZWZhdWx0JzogRW1iZXIuaW5qZWN0LmNvbnRyb2xs
ZXIKLSAgICAgIH0sCi0gICAgICAnZW1iZXItY29udHJvbGxlci9wcm94eSc6IHsKLSAgICAgICAg
J2RlZmF1bHQnOiBFbWJlci5BcnJheVByb3h5Ci0gICAgICB9LAotICAgICAgJ2VtYmVyLWNvbnRy
b2xsZXJzL3NvcnRhYmxlJzogewotICAgICAgICAnZGVmYXVsdCc6IEVtYmVyLlNvcnRhYmxlTWl4
aW4KLSAgICAgIH0sCi0gICAgICAnZW1iZXItZGVidWcnOiB7Ci0gICAgICAgICdsb2cnOiAgICAg
IEVtYmVyLmRlYnVnLAotICAgICAgICAnaW5zcGVjdCc6ICBFbWJlci5pbnNwZWN0LAotICAgICAg
ICAncnVuJzogICAgICBFbWJlci5ydW5JbkRlYnVnLAotICAgICAgICAnd2Fybic6ICAgICBFbWJl
ci53YXJuCi0gICAgICB9LAotICAgICAgJ2VtYmVyLWRlYnVnL2NvbnRhaW5lci1kZWJ1Zy1hZGFw
dGVyJzogewotICAgICAgICAnZGVmYXVsdCc6IEVtYmVyLkNvbnRhaW5lckRlYnVnQWRhcHRlcgot
ICAgICAgfSwKLSAgICAgICdlbWJlci1kZWJ1Zy9kYXRhLWFkYXB0ZXInOiB7Ci0gICAgICAgICdk
ZWZhdWx0JzogRW1iZXIuRGF0YUFkYXB0ZXIKLSAgICAgIH0sCi0gICAgICAnZW1iZXItZGVwcmVj
YXRpb25zJzogewotICAgICAgICAnZGVwcmVjYXRlJzogICAgICBFbWJlci5kZXByZWNhdGUsCi0g
ICAgICAgICdkZXByZWNhdGVGdW5jJzogIEVtYmVyLmRlcHJlY2F0ZUZ1bmMKLSAgICAgIH0sCi0g
ICAgICAnZW1iZXItZW51bWVyYWJsZSc6IHsKLSAgICAgICAgJ2RlZmF1bHQnOiBFbWJlci5FbnVt
ZXJhYmxlCi0gICAgICB9LAotICAgICAgJ2VtYmVyLWV2ZW50ZWQnOiB7Ci0gICAgICAgICdkZWZh
dWx0JzogRW1iZXIuRXZlbnRlZAotICAgICAgfSwKLSAgICAgICdlbWJlci1ldmVudGVkL29uJzog
ewotICAgICAgICAnZGVmYXVsdCc6IEVtYmVyLm9uCi0gICAgICB9LAotICAgICAgJ2VtYmVyLWds
b2JhbHMtcmVzb2x2ZXInOiB7Ci0gICAgICAgICdkZWZhdWx0JzogRW1iZXIuRGVmYXVsdFJlc29s
dmVyCi0gICAgICB9LAotICAgICAgJ2VtYmVyLWhlbHBlcic6IHsKLSAgICAgICAgJ2RlZmF1bHQn
OiAgRW1iZXIuSGVscGVyLAotICAgICAgICAnaGVscGVyJzogICBFbWJlci5IZWxwZXIgJiYgRW1i
ZXIuSGVscGVyLmhlbHBlcgotICAgICAgfSwKLSAgICAgICdlbWJlci1pbnN0cnVtZW50YXRpb24n
OiB7Ci0gICAgICAgICdpbnN0cnVtZW50JzogICBFbWJlci5JbnN0cnVtZW50YXRpb24uaW5zdHJ1
bWVudCwKLSAgICAgICAgJ3Jlc2V0JzogICAgICAgIEVtYmVyLkluc3RydW1lbnRhdGlvbi5yZXNl
dCwKLSAgICAgICAgJ3N1YnNjcmliZSc6ICAgIEVtYmVyLkluc3RydW1lbnRhdGlvbi5zdWJzY3Jp
YmUsCi0gICAgICAgICd1bnN1YnNjcmliZSc6ICBFbWJlci5JbnN0cnVtZW50YXRpb24udW5zdWJz
Y3JpYmUKLSAgICAgIH0sCi0gICAgICAnZW1iZXItbG9jYXRpb25zL2hhc2gnOiB7Ci0gICAgICAg
ICdkZWZhdWx0JzogRW1iZXIuSGFzaExvY2F0aW9uCi0gICAgICB9LAotICAgICAgJ2VtYmVyLWxv
Y2F0aW9ucy9oaXN0b3J5JzogewotICAgICAgICAnZGVmYXVsdCc6IEVtYmVyLkhpc3RvcnlMb2Nh
dGlvbgotICAgICAgfSwKLSAgICAgICdlbWJlci1sb2NhdGlvbnMvbm9uZSc6IHsKLSAgICAgICAg
J2RlZmF1bHQnOiBFbWJlci5Ob25lTG9jYXRpb24KLSAgICAgIH0sCi0gICAgICAnZW1iZXItbWFw
JzogewotICAgICAgICAnZGVmYXVsdCc6ICAgICAgRW1iZXIuTWFwLAotICAgICAgICAnd2l0aERl
ZmF1bHQnOiAgRW1iZXIuTWFwV2l0aERlZmF1bHQKLSAgICAgIH0sCi0gICAgICAnZW1iZXItbWV0
YWwvZGVzdHJveSc6IHsKLSAgICAgICAgJ2RlZmF1bHQnOiBFbWJlci5kZXN0cm95Ci0gICAgICB9
LAotICAgICAgJ2VtYmVyLW1ldGFsL2V2ZW50cyc6IHsKLSAgICAgICAgJ2FkZExpc3RlbmVyJzog
ICAgRW1iZXIuYWRkTGlzdGVuZXIsCi0gICAgICAgICdyZW1vdmVMaXN0ZW5lcic6IEVtYmVyLnJl
bW92ZUxpc3RlbmVyLAotICAgICAgICAnc2VuZCc6ICAgICAgICAgICBFbWJlci5zZW5kRXZlbnQK
LSAgICAgIH0sCi0gICAgICAnZW1iZXItbWV0YWwvZ2V0JzogewotICAgICAgICAnZGVmYXVsdCc6
IEVtYmVyLmdldCwKLSAgICAgICAgJ2dldFByb3BlcnRpZXMnOiBFbWJlci5nZXRQcm9wZXJ0aWVz
Ci0gICAgICB9LAotICAgICAgJ2VtYmVyLW1ldGFsL21peGluJzogewotICAgICAgICAnZGVmYXVs
dCc6IEVtYmVyLk1peGluCi0gICAgICB9LAotICAgICAgJ2VtYmVyLW1ldGFsL29ic2VydmVyJzog
ewotICAgICAgICAnZGVmYXVsdCc6ICAgICAgICBFbWJlci5vYnNlcnZlciwKLSAgICAgICAgJ2Fk
ZE9ic2VydmVyJzogICAgRW1iZXIuYWRkT2JzZXJ2ZXIsCi0gICAgICAgICdyZW1vdmVPYnNlcnZl
cic6IEVtYmVyLnJlbW92ZU9ic2VydmVyCi0gICAgICB9LAotICAgICAgJ2VtYmVyLW1ldGFsL29u
LWxvYWQnOiB7Ci0gICAgICAgICdkZWZhdWx0JzogIEVtYmVyLm9uTG9hZCwKLSAgICAgICAgJ3J1
bic6ICAgICAgRW1iZXIucnVuTG9hZEhvb2tzCi0gICAgICB9LAotICAgICAgJ2VtYmVyLW1ldGFs
L3NldCc6IHsKLSAgICAgICAgJ2RlZmF1bHQnOiAgICAgICAgRW1iZXIuc2V0LAotICAgICAgICAn
c2V0UHJvcGVydGllcyc6ICBFbWJlci5zZXRQcm9wZXJ0aWVzLAotICAgICAgICAndHJ5U2V0Jzog
ICAgICAgICBFbWJlci50cnlTZXQKLSAgICAgIH0sCi0gICAgICAnZW1iZXItbWV0YWwvdXRpbHMn
OiB7Ci0gICAgICAgICdhbGlhc01ldGhvZCc6ICBFbWJlci5hbGlhc01ldGhvZCwKLSAgICAgICAg
J2Fzc2VydCc6ICAgICAgIEVtYmVyLmFzc2VydCwKLSAgICAgICAgJ2NhY2hlRm9yJzogICAgIEVt
YmVyLmNhY2hlRm9yLAotICAgICAgICAnY29weSc6ICAgICAgICAgRW1iZXIuY29weSwKLSAgICAg
ICAgJ2d1aWRGb3InOiAgICAgIEVtYmVyLmd1aWRGb3IKLSAgICAgIH0sCi0gICAgICAnZW1iZXIt
b2JqZWN0JzogewotICAgICAgICAnZGVmYXVsdCc6IEVtYmVyLk9iamVjdAotICAgICAgfSwKLSAg
ICAgICdlbWJlci1wbGF0Zm9ybSc6IHsKLSAgICAgICAgJ2Fzc2lnbic6ICAgICAgICAgRW1iZXIu
bWVyZ2UsCi0gICAgICAgICdjcmVhdGUnOiAgICAgICAgIEVtYmVyLmNyZWF0ZSwKLSAgICAgICAg
J2RlZmluZVByb3BlcnR5JzogRW1iZXIucGxhdGZvcm0uZGVmaW5lUHJvcGVydHksCi0gICAgICAg
ICdoYXNBY2Nlc3NvcnMnOiAgIEVtYmVyLnBsYXRmb3JtLmhhc1Byb3BlcnR5QWNjZXNzb3JzLAot
ICAgICAgICAna2V5cyc6ICAgICAgICAgICBFbWJlci5rZXlzCi0gICAgICB9LAotICAgICAgJ2Vt
YmVyLXJvdXRlJzogewotICAgICAgICAnZGVmYXVsdCc6IEVtYmVyLlJvdXRlCi0gICAgICB9LAot
ICAgICAgJ2VtYmVyLXJvdXRlcic6IHsKLSAgICAgICAgJ2RlZmF1bHQnOiBFbWJlci5Sb3V0ZXIK
LSAgICAgIH0sCi0gICAgICAnZW1iZXItcnVubG9vcCc6IHsKLSAgICAgICAgJ2RlZmF1bHQnOiAg
ICAgIEVtYmVyLnJ1biwKLSAgICAgICAgJ2JlZ2luJzogICAgICAgIEVtYmVyLnJ1bi5iZWdpbiwK
LSAgICAgICAgJ2JpbmQnOiAgICAgICAgIEVtYmVyLnJ1bi5iaW5kLAotICAgICAgICAnY2FuY2Vs
JzogICAgICAgRW1iZXIucnVuLmNhbmNlbCwKLSAgICAgICAgJ2RlYm91bmNlJzogICAgIEVtYmVy
LnJ1bi5kZWJvdW5jZSwKLSAgICAgICAgJ2VuZCc6ICAgICAgICAgIEVtYmVyLnJ1bi5lbmQsCi0g
ICAgICAgICdqb2luJzogICAgICAgICBFbWJlci5ydW4uam9pbiwKLSAgICAgICAgJ2xhdGVyJzog
ICAgICAgIEVtYmVyLnJ1bi5sYXRlciwKLSAgICAgICAgJ25leHQnOiAgICAgICAgIEVtYmVyLnJ1
bi5uZXh0LAotICAgICAgICAnb25jZSc6ICAgICAgICAgRW1iZXIucnVuLm9uY2UsCi0gICAgICAg
ICdzY2hlZHVsZSc6ICAgICBFbWJlci5ydW4uc2NoZWR1bGUsCi0gICAgICAgICdzY2hlZHVsZU9u
Y2UnOiBFbWJlci5ydW4uc2NoZWR1bGVPbmNlLAotICAgICAgICAndGhyb3R0bGUnOiAgICAgRW1i
ZXIucnVuLnRocm90dGxlCi0gICAgICB9LAotICAgICAgJ2VtYmVyLXNlcnZpY2UnOiB7Ci0gICAg
ICAgICdkZWZhdWx0JzogRW1iZXIuU2VydmljZQotICAgICAgfSwKLSAgICAgICdlbWJlci1zZXJ2
aWNlL2luamVjdCc6IHsKLSAgICAgICAgJ2RlZmF1bHQnOiBFbWJlci5pbmplY3Quc2VydmljZQot
ICAgICAgfSwKLSAgICAgICdlbWJlci1zZXQvb3JkZXJlZCc6IHsKLSAgICAgICAgJ2RlZmF1bHQn
OiBFbWJlci5PcmRlcmVkU2V0Ci0gICAgICB9LAotICAgICAgJ2VtYmVyLXN0cmluZyc6IHsKLSAg
ICAgICAgJ2NhbWVsaXplJzogICAgIEVtYmVyLlN0cmluZy5jYW1lbGl6ZSwKLSAgICAgICAgJ2Nh
cGl0YWxpemUnOiAgIEVtYmVyLlN0cmluZy5jYXBpdGFsaXplLAotICAgICAgICAnY2xhc3NpZnkn
OiAgICAgRW1iZXIuU3RyaW5nLmNsYXNzaWZ5LAotICAgICAgICAnZGFzaGVyaXplJzogICAgRW1i
ZXIuU3RyaW5nLmRhc2hlcml6ZSwKLSAgICAgICAgJ2RlY2FtZWxpemUnOiAgIEVtYmVyLlN0cmlu
Zy5kZWNhbWVsaXplLAotICAgICAgICAnZm10JzogICAgICAgICAgRW1iZXIuU3RyaW5nLmZtdCwK
LSAgICAgICAgJ2h0bWxTYWZlJzogICAgIEVtYmVyLlN0cmluZy5odG1sU2FmZSwKLSAgICAgICAg
J2xvYyc6ICAgICAgICAgIEVtYmVyLlN0cmluZy5sb2MsCi0gICAgICAgICd1bmRlcnNjb3JlJzog
ICBFbWJlci5TdHJpbmcudW5kZXJzY29yZSwKLSAgICAgICAgJ3cnOiAgICAgICAgICAgIEVtYmVy
LlN0cmluZy53Ci0gICAgICB9LAotICAgICAgJ2VtYmVyLXV0aWxzJzogewotICAgICAgICAnaXNC
bGFuayc6ICAgIEVtYmVyLmlzQmxhbmssCi0gICAgICAgICdpc0VtcHR5JzogICAgRW1iZXIuaXNF
bXB0eSwKLSAgICAgICAgJ2lzTm9uZSc6ICAgICBFbWJlci5pc05vbmUsCi0gICAgICAgICdpc1By
ZXNlbnQnOiAgRW1iZXIuaXNQcmVzZW50LAotICAgICAgICAndHJ5SW52b2tlJzogIEVtYmVyLnRy
eUludm9rZSwKLSAgICAgICAgJ3R5cGVPZic6ICAgICBFbWJlci50eXBlT2YKLSAgICAgIH0KLSAg
ICB9OwotCi0gICAgLy8gcG9wdWxhdGUgYGVtYmVyL2NvbXB1dGVkYCBuYW1lZCBleHBvcnRzCi0g
ICAgc2hpbXNbJ2VtYmVyLWNvbXB1dGVkJ10gPSB7Ci0gICAgICAnZGVmYXVsdCc6IEVtYmVyLmNv
bXB1dGVkCi0gICAgfTsKLSAgICB2YXIgY29tcHV0ZWRNYWNyb3MgPSBbCi0gICAgICAiZW1wdHki
LCJub3RFbXB0eSIsICJub25lIiwgIm5vdCIsICJib29sIiwgIm1hdGNoIiwKLSAgICAgICJlcXVh
bCIsICJndCIsICJndGUiLCAibHQiLCAibHRlIiwgImFsaWFzIiwgIm9uZVdheSIsCi0gICAgICAi
cmVhZHMiLCAicmVhZE9ubHkiLCAiZGVwcmVjYXRpbmdBbGlhcyIsCi0gICAgICAiYW5kIiwgIm9y
IiwgImNvbGxlY3QiLCAic3VtIiwgIm1pbiIsICJtYXgiLAotICAgICAgIm1hcCIsICJzb3J0Iiwg
InNldERpZmYiLCAibWFwQnkiLCAibWFwUHJvcGVydHkiLAotICAgICAgImZpbHRlciIsICJmaWx0
ZXJCeSIsICJmaWx0ZXJQcm9wZXJ0eSIsICJ1bmlxIiwKLSAgICAgICJ1bmlvbiIsICJpbnRlcnNl
Y3QiCi0gICAgXTsKLSAgICBmb3IgKHZhciBpID0gMCwgbCA9IGNvbXB1dGVkTWFjcm9zLmxlbmd0
aDsgaSA8IGw7IGkrKykgewotICAgICAgdmFyIGtleSA9IGNvbXB1dGVkTWFjcm9zW2ldOwotICAg
ICAgc2hpbXNbJ2VtYmVyLWNvbXB1dGVkJ11ba2V5XSA9IEVtYmVyLmNvbXB1dGVkW2tleV07Ci0g
ICAgfQotCi0gICAgZm9yICh2YXIgbW9kdWxlTmFtZSBpbiBzaGltcykgewotICAgICAgZ2VuZXJh
dGVNb2R1bGUobW9kdWxlTmFtZSwgc2hpbXNbbW9kdWxlTmFtZV0pOwotICAgIH0KLSAgfQotCi0g
IGZ1bmN0aW9uIHByb2Nlc3NUZXN0U2hpbXMoKSB7Ci0gICAgaWYgKEVtYmVyLlRlc3QpIHsKLSAg
ICAgIHZhciB0ZXN0U2hpbXMgPSB7Ci0gICAgICAgICdlbWJlci10ZXN0JzogewotICAgICAgICAg
ICdkZWZhdWx0JzogRW1iZXIuVGVzdAotICAgICAgICB9LAotICAgICAgICAnZW1iZXItdGVzdC9h
ZGFwdGVyJzogewotICAgICAgICAgICdkZWZhdWx0JzogRW1iZXIuVGVzdC5BZGFwdGVyCi0gICAg
ICAgIH0sCi0gICAgICAgICdlbWJlci10ZXN0L3F1bml0LWFkYXB0ZXInOiB7Ci0gICAgICAgICAg
J2RlZmF1bHQnOiBFbWJlci5UZXN0LlFVbml0QWRhcHRlcgotICAgICAgICB9Ci0gICAgICB9Owot
Ci0gICAgICBmb3IgKHZhciBtb2R1bGVOYW1lIGluIHRlc3RTaGltcykgewotICAgICAgICBnZW5l
cmF0ZU1vZHVsZShtb2R1bGVOYW1lLCB0ZXN0U2hpbXNbbW9kdWxlTmFtZV0pOwotICAgICAgfQot
ICAgIH0KLSAgfQotCi0gIGZ1bmN0aW9uIGdlbmVyYXRlTW9kdWxlKG5hbWUsIHZhbHVlcykgewot
ICAgIGRlZmluZShuYW1lLCBbXSwgZnVuY3Rpb24oKSB7Ci0gICAgICAndXNlIHN0cmljdCc7Ci0K
LSAgICAgIHJldHVybiB2YWx1ZXM7Ci0gICAgfSk7Ci0gIH0KLQotICBwcm9jZXNzRW1iZXJTaGlt
cygpOwotICBwcm9jZXNzVGVzdFNoaW1zKCk7Ci0gIGdlbmVyYXRlTW9kdWxlKCdqcXVlcnknLCB7
ICdkZWZhdWx0Jzogc2VsZi5qUXVlcnkgfSk7Ci0gIGdlbmVyYXRlTW9kdWxlKCdyc3ZwJywgeyAn
ZGVmYXVsdCc6IEVtYmVyLlJTVlAgfSk7Ci19KSgpOwotCi07LyogZ2xvYmFscyBkZWZpbmUgKi8K
LWRlZmluZSgnZW1iZXIvbG9hZC1pbml0aWFsaXplcnMnLCBbJ2V4cG9ydHMnLCAnZW1iZXItbG9h
ZC1pbml0aWFsaXplcnMnLCAnZW1iZXInXSwgZnVuY3Rpb24oZXhwb3J0cywgbG9hZEluaXRpYWxp
emVycywgRW1iZXIpIHsKLSAgRW1iZXJbJ2RlZmF1bHQnXS5kZXByZWNhdGUoCi0gICAgJ1VzYWdl
IG9mIGAnICsgJ2VtYmVyL2xvYWQtaW5pdGlhbGl6ZXJzJyArICdgIG1vZHVsZSBpcyBkZXByZWNh
dGVkLCBwbGVhc2UgdXBkYXRlIHRvIGBlbWJlci1sb2FkLWluaXRpYWxpemVyc2AuJywKLSAgICBm
YWxzZSwKLSAgICB7IGlkOiAnZW1iZXItbG9hZC1pbml0aWFsaXplcnMubGVnYWN5LXNoaW1zJywg
dW50aWw6ICczLjAuMCcgfQotICApOwotCi0gIGV4cG9ydHNbJ2RlZmF1bHQnXSA9IGxvYWRJbml0
aWFsaXplcnNbJ2RlZmF1bHQnXTsKLX0pOwotCi07LyogZ2xvYmFscyBkZWZpbmUgKi8KLQotZnVu
Y3Rpb24gY3JlYXRlRGVwcmVjYXRlZE1vZHVsZShtb2R1bGVJZCkgewotICBkZWZpbmUobW9kdWxl
SWQsIFsnZXhwb3J0cycsICdlbWJlci1yZXNvbHZlci9yZXNvbHZlcicsICdlbWJlciddLCBmdW5j
dGlvbihleHBvcnRzLCBSZXNvbHZlciwgRW1iZXIpIHsKLSAgICBFbWJlclsnZGVmYXVsdCddLmRl
cHJlY2F0ZSgKLSAgICAgICdVc2FnZSBvZiBgJyArIG1vZHVsZUlkICsgJ2AgbW9kdWxlIGlzIGRl
cHJlY2F0ZWQsIHBsZWFzZSB1cGRhdGUgdG8gYGVtYmVyLXJlc29sdmVyYC4nLAotICAgICAgZmFs
c2UsCi0gICAgICB7IGlkOiAnZW1iZXItcmVzb2x2ZXIubGVnYWN5LXNoaW1zJywgdW50aWw6ICcz
LjAuMCcgfQotICAgICk7Ci0KLSAgICBleHBvcnRzWydkZWZhdWx0J10gPSBSZXNvbHZlclsnZGVm
YXVsdCddOwotICB9KTsKLX0KLQotY3JlYXRlRGVwcmVjYXRlZE1vZHVsZSgnZW1iZXIvcmVzb2x2
ZXInKTsKLWNyZWF0ZURlcHJlY2F0ZWRNb2R1bGUoJ3Jlc29sdmVyJyk7Ci0KLTtkZWZpbmUoJ2Vt
YmVyLWFqYXgvZXJyb3JzJywgWydleHBvcnRzJywgJ2VtYmVyJ10sIGZ1bmN0aW9uIChleHBvcnRz
LCBfZW1iZXIpIHsKLSAgJ3VzZSBzdHJpY3QnOwotCi0gIGV4cG9ydHMuQWpheEVycm9yID0gQWph
eEVycm9yOwotICBleHBvcnRzLkludmFsaWRFcnJvciA9IEludmFsaWRFcnJvcjsKLSAgZXhwb3J0
cy5VbmF1dGhvcml6ZWRFcnJvciA9IFVuYXV0aG9yaXplZEVycm9yOwotICBleHBvcnRzLkZvcmJp
ZGRlbkVycm9yID0gRm9yYmlkZGVuRXJyb3I7Ci0KLSAgdmFyIEVtYmVyRXJyb3IgPSBfZW1iZXJb
J2RlZmF1bHQnXS5FcnJvcjsKLQotICAvKioKLSAgICBAY2xhc3MgQWpheEVycm9yCi0gICAgQG5h
bWVzcGFjZSBEUwotICAqLwotCi0gIGZ1bmN0aW9uIEFqYXhFcnJvcihlcnJvcnMpIHsKLSAgICB2
YXIgbWVzc2FnZSA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMSB8fCBhcmd1bWVudHNbMV0gPT09IHVu
ZGVmaW5lZCA/ICdBamF4IG9wZXJhdGlvbiBmYWlsZWQnIDogYXJndW1lbnRzWzFdOwotCi0gICAg
RW1iZXJFcnJvci5jYWxsKHRoaXMsIG1lc3NhZ2UpOwotCi0gICAgdGhpcy5lcnJvcnMgPSBlcnJv
cnMgfHwgW3sKLSAgICAgIHRpdGxlOiAnQWpheCBFcnJvcicsCi0gICAgICBkZXRhaWw6IG1lc3Nh
Z2UKLSAgICB9XTsKLSAgfQotCi0gIEFqYXhFcnJvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRl
KEVtYmVyRXJyb3IucHJvdG90eXBlKTsKLQotICBmdW5jdGlvbiBJbnZhbGlkRXJyb3IoZXJyb3Jz
KSB7Ci0gICAgQWpheEVycm9yLmNhbGwodGhpcywgZXJyb3JzLCAnUmVxdWVzdCB3YXMgcmVqZWN0
ZWQgYmVjYXVzZSBpdCB3YXMgaW52YWxpZCcpOwotICB9Ci0KLSAgSW52YWxpZEVycm9yLnByb3Rv
dHlwZSA9IE9iamVjdC5jcmVhdGUoQWpheEVycm9yLnByb3RvdHlwZSk7Ci0KLSAgZnVuY3Rpb24g
VW5hdXRob3JpemVkRXJyb3IoZXJyb3JzKSB7Ci0gICAgQWpheEVycm9yLmNhbGwodGhpcywgZXJy
b3JzLCAnQWpheCBhdXRob3JpemF0aW9uIGZhaWxlZCcpOwotICB9Ci0KLSAgVW5hdXRob3JpemVk
RXJyb3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBamF4RXJyb3IucHJvdG90eXBlKTsKLQot
ICBmdW5jdGlvbiBGb3JiaWRkZW5FcnJvcihlcnJvcnMpIHsKLSAgICBBamF4RXJyb3IuY2FsbCh0
aGlzLCBlcnJvcnMsICdSZXF1ZXN0IHdhcyByZWplY3RlZCBiZWNhdXNlIHVzZXIgaXMgbm90IHBl
cm1pdHRlZCB0byBwZXJmb3JtIHRoaXMgb3BlcmF0aW9uLicpOwotICB9Ci0KLSAgRm9yYmlkZGVu
RXJyb3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBamF4RXJyb3IucHJvdG90eXBlKTsKLX0p
OwotZGVmaW5lKCdlbWJlci1hamF4L2luZGV4JywgWydleHBvcnRzJywgJ2VtYmVyLWFqYXgvcmVx
dWVzdCddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyQWpheFJlcXVlc3QpIHsKLSAgJ3VzZSBz
dHJpY3QnOwotCi0gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnZGVmYXVsdCcsIHsK
LSAgICBlbnVtZXJhYmxlOiB0cnVlLAotICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewotICAgICAg
cmV0dXJuIF9lbWJlckFqYXhSZXF1ZXN0WydkZWZhdWx0J107Ci0gICAgfQotICB9KTsKLX0pOwot
ZGVmaW5lKCdlbWJlci1hamF4L21ha2UtcHJvbWlzZScsIFsnZXhwb3J0cycsICdlbWJlciddLCBm
dW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyKSB7Ci0gICd1c2Ugc3RyaWN0JzsKLQotICBleHBvcnRz
WydkZWZhdWx0J10gPSBtYWtlUHJvbWlzZTsKLQotICB2YXIgcnVuID0gX2VtYmVyWydkZWZhdWx0
J10ucnVuOwotICB2YXIgUlNWUCA9IF9lbWJlclsnZGVmYXVsdCddLlJTVlA7Ci0KLSAgZnVuY3Rp
b24gbWFrZVByb21pc2Uoc2V0dGluZ3MpIHsKLSAgICB2YXIgdHlwZSA9IHNldHRpbmdzLnR5cGUg
fHwgJ0dFVCc7Ci0gICAgcmV0dXJuIG5ldyBSU1ZQLlByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUs
IHJlamVjdCkgewotICAgICAgc2V0dGluZ3Muc3VjY2VzcyA9IG1ha2VTdWNjZXNzKHJlc29sdmUp
OwotICAgICAgc2V0dGluZ3MuZXJyb3IgPSBtYWtlRXJyb3IocmVqZWN0KTsKLSAgICAgIF9lbWJl
clsnZGVmYXVsdCddLiQuYWpheChzZXR0aW5ncyk7Ci0gICAgfSwgJ2VtYmVyLWFqYXg6ICcgKyB0
eXBlICsgJyB0byAnICsgc2V0dGluZ3MudXJsKTsKLSAgfQotCi0gIGZ1bmN0aW9uIG1ha2VTdWNj
ZXNzKHJlc29sdmUpIHsKLSAgICByZXR1cm4gZnVuY3Rpb24gc3VjY2VzcyhyZXNwb25zZSwgdGV4
dFN0YXR1cywganFYSFIpIHsKLSAgICAgIHJ1bihudWxsLCByZXNvbHZlLCB7Ci0gICAgICAgIHJl
c3BvbnNlOiByZXNwb25zZSwKLSAgICAgICAgdGV4dFN0YXR1czogdGV4dFN0YXR1cywKLSAgICAg
ICAganFYSFI6IGpxWEhSCi0gICAgICB9KTsKLSAgICB9OwotICB9Ci0KLSAgZnVuY3Rpb24gbWFr
ZUVycm9yKHJlamVjdCkgewotICAgIHJldHVybiBmdW5jdGlvbiBlcnJvcihqcVhIUiwgdGV4dFN0
YXR1cywgZXJyb3JUaHJvd24pIHsKLSAgICAgIHJ1bihudWxsLCByZWplY3QsIHsKLSAgICAgICAg
anFYSFI6IGpxWEhSLAotICAgICAgICB0ZXh0U3RhdHVzOiB0ZXh0U3RhdHVzLAotICAgICAgICBl
cnJvclRocm93bjogZXJyb3JUaHJvd24KLSAgICAgIH0pOwotICAgIH07Ci0gIH0KLX0pOwotZGVm
aW5lKCdlbWJlci1hamF4L3JhdycsIFsnZXhwb3J0cycsICdlbWJlci1hamF4L21ha2UtcHJvbWlz
ZScsICdlbWJlci1hamF4L3V0aWxzL3BhcnNlLWFyZ3MnLCAnZW1iZXInXSwgZnVuY3Rpb24gKGV4
cG9ydHMsIF9lbWJlckFqYXhNYWtlUHJvbWlzZSwgX2VtYmVyQWpheFV0aWxzUGFyc2VBcmdzLCBf
ZW1iZXIpIHsKLSAgJ3VzZSBzdHJpY3QnOwotCi0gIHZhciBfc2xpY2VkVG9BcnJheSA9IChmdW5j
dGlvbiAoKSB7Ci0gICAgZnVuY3Rpb24gc2xpY2VJdGVyYXRvcihhcnIsIGkpIHsKLSAgICAgIHZh
ciBfYXJyID0gW107dmFyIF9uID0gdHJ1ZTt2YXIgX2QgPSBmYWxzZTt2YXIgX2UgPSB1bmRlZmlu
ZWQ7dHJ5IHsKLSAgICAgICAgZm9yICh2YXIgX2kgPSBhcnJbU3ltYm9sLml0ZXJhdG9yXSgpLCBf
czsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkgewotICAgICAgICAg
IF9hcnIucHVzaChfcy52YWx1ZSk7aWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICB9IGNhdGNoIChlcnIpIHsKLSAgICAgICAgX2QgPSB0cnVlO19lID0g
ZXJyOwotICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICBpZiAoIV9u
ICYmIF9pWydyZXR1cm4nXSkgX2lbJ3JldHVybiddKCk7Ci0gICAgICAgIH0gZmluYWxseSB7Ci0g
ICAgICAgICAgaWYgKF9kKSB0aHJvdyBfZTsKLSAgICAgICAgfQotICAgICAgfXJldHVybiBfYXJy
OwotICAgIH1yZXR1cm4gZnVuY3Rpb24gKGFyciwgaSkgewotICAgICAgaWYgKEFycmF5LmlzQXJy
YXkoYXJyKSkgewotICAgICAgICByZXR1cm4gYXJyOwotICAgICAgfSBlbHNlIGlmIChTeW1ib2wu
aXRlcmF0b3IgaW4gT2JqZWN0KGFycikpIHsKLSAgICAgICAgcmV0dXJuIHNsaWNlSXRlcmF0b3Io
YXJyLCBpKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0lu
dmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UnKTsKLSAg
ICAgIH0KLSAgICB9OwotICB9KSgpOwotCi0gIGV4cG9ydHNbJ2RlZmF1bHQnXSA9IHJhdzsKLQot
ICB2YXIgZGVwcmVjYXRlID0gX2VtYmVyWydkZWZhdWx0J10uZGVwcmVjYXRlOwotCi0gIC8qCi0g
ICAqIFNhbWUgYXMgYHJlcXVlc3RgIGV4Y2VwdCBpdCByZXNvbHZlcyBhbiBvYmplY3Qgd2l0aCBg
e3Jlc3BvbnNlLCB0ZXh0U3RhdHVzLAotICAgKiBqcVhIUn1gLCB1c2VmdWwgaWYgeW91IG5lZWQg
YWNjZXNzIHRvIHRoZSBqcVhIUiBvYmplY3QgZm9yIGhlYWRlcnMsIGV0Yy4KLSAgICovCi0gIGZ1
bmN0aW9uIHJhdygpIHsKLSAgICBkZXByZWNhdGUoJ2VtYmVyLWFqYXgvcmF3IGlzIGRlcHJlY2F0
ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBlbWJlci1hamF4QDIuMC4wJywgZmFsc2UsIHsgaWQ6
ICdlbWJlci1hamF4LnJhdycgfSk7Ci0KLSAgICB2YXIgX3BhcnNlQXJncyRhcHBseSA9IF9lbWJl
ckFqYXhVdGlsc1BhcnNlQXJnc1snZGVmYXVsdCddLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7Ci0K
LSAgICB2YXIgX3BhcnNlQXJncyRhcHBseTIgPSBfc2xpY2VkVG9BcnJheShfcGFyc2VBcmdzJGFw
cGx5LCAzKTsKLQotICAgIHZhciB1cmwgPSBfcGFyc2VBcmdzJGFwcGx5MlswXTsKLSAgICB2YXIg
dHlwZSA9IF9wYXJzZUFyZ3MkYXBwbHkyWzFdOwotICAgIHZhciBzZXR0aW5ncyA9IF9wYXJzZUFy
Z3MkYXBwbHkyWzJdOwotCi0gICAgaWYgKCFzZXR0aW5ncykgewotICAgICAgc2V0dGluZ3MgPSB7
fTsKLSAgICB9Ci0gICAgc2V0dGluZ3MudXJsID0gdXJsOwotICAgIHNldHRpbmdzLnR5cGUgPSB0
eXBlOwotICAgIHJldHVybiAoMCwgX2VtYmVyQWpheE1ha2VQcm9taXNlWydkZWZhdWx0J10pKHNl
dHRpbmdzKTsKLSAgfQotfSk7Ci1kZWZpbmUoJ2VtYmVyLWFqYXgvcmVxdWVzdCcsIFsnZXhwb3J0
cycsICdlbWJlci1hamF4L3JhdycsICdlbWJlciddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVy
QWpheFJhdywgX2VtYmVyKSB7Ci0gICd1c2Ugc3RyaWN0JzsKLQotICBleHBvcnRzWydkZWZhdWx0
J10gPSByZXF1ZXN0OwotCi0gIHZhciBkZXByZWNhdGUgPSBfZW1iZXJbJ2RlZmF1bHQnXS5kZXBy
ZWNhdGU7Ci0KLSAgLyoKLSAgICogalF1ZXJ5LmFqYXggd3JhcHBlciwgc3VwcG9ydHMgdGhlIHNh
bWUgc2lnbmF0dXJlIGV4Y2VwdCBwcm92aWRpbmcKLSAgICogYHN1Y2Nlc3NgIGFuZCBgZXJyb3Jg
IGhhbmRsZXJzIHdpbGwgdGhyb3cgYW4gZXJyb3IgKHVzZSBwcm9taXNlcyBpbnN0ZWFkKQotICAg
KiBhbmQgaXQgcmVzb2x2ZXMgb25seSB0aGUgcmVzcG9uc2UgKG5vIGFjY2VzcyB0byBqcVhIUiBv
ciB0ZXh0U3RhdHVzKS4KLSAgICovCi0gIGZ1bmN0aW9uIHJlcXVlc3QoKSB7Ci0gICAgZGVwcmVj
YXRlKCdlbWJlci1hamF4L3JlcXVlc3QgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVk
IGluIGVtYmVyLWFqYXhAMi4wLjAnLCBmYWxzZSwgeyBpZDogJ2VtYmVyLWFqYXgucmF3JyB9KTsK
LSAgICByZXR1cm4gX2VtYmVyQWpheFJhd1snZGVmYXVsdCddLmFwcGx5KHVuZGVmaW5lZCwgYXJn
dW1lbnRzKS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHsKLSAgICAgIHJldHVybiByZXN1bHQucmVz
cG9uc2U7Ci0gICAgfSwgbnVsbCwgJ2VtYmVyLWFqYXg6IHVud3JhcCByYXcgYWpheCByZXNwb25z
ZScpOwotICB9Ci19KTsKLWRlZmluZSgnZW1iZXItYWpheC9zZXJ2aWNlcy9hamF4JywgWydleHBv
cnRzJywgJ2VtYmVyJywgJ2VtYmVyLWFqYXgvZXJyb3JzJywgJ2VtYmVyLWFqYXgvdXRpbHMvcGFy
c2UtcmVzcG9uc2UtaGVhZGVycyddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyLCBfZW1iZXJB
amF4RXJyb3JzLCBfZW1iZXJBamF4VXRpbHNQYXJzZVJlc3BvbnNlSGVhZGVycykgewotICAndXNl
IHN0cmljdCc7Ci0KLSAgdmFyIGRlcHJlY2F0ZSA9IF9lbWJlclsnZGVmYXVsdCddLmRlcHJlY2F0
ZTsKLSAgdmFyIGdldCA9IF9lbWJlclsnZGVmYXVsdCddLmdldDsKLSAgdmFyIGlzQmxhbmsgPSBf
ZW1iZXJbJ2RlZmF1bHQnXS5pc0JsYW5rOwotCi0gIC8qKgotICAgICMjIyBIZWFkZXJzIGN1c3Rv
bWl6YXRpb24KLSAgCi0gICAgU29tZSBBUElzIHJlcXVpcmUgSFRUUCBoZWFkZXJzLCBlLmcuIHRv
IHByb3ZpZGUgYW4gQVBJIGtleS4gQXJiaXRyYXJ5Ci0gICAgaGVhZGVycyBjYW4gYmUgc2V0IGFz
IGtleS92YWx1ZSBwYWlycyBvbiB0aGUgYFJFU1RBZGFwdGVyYCdzIGBoZWFkZXJzYAotICAgIG9i
amVjdCBhbmQgRW1iZXIgRGF0YSB3aWxsIHNlbmQgdGhlbSBhbG9uZyB3aXRoIGVhY2ggYWpheCBy
ZXF1ZXN0LgotICAKLSAgICBgYGBhcHAvc2VydmljZXMvYWpheAotICAgIGltcG9ydCBBamF4U2Vy
dmljZSBmcm9tICdlbWJlci1hamF4L3NlcnZpY2VzL2FqYXgnOwotICAKLSAgICBleHBvcnQgZGVm
YXVsdCBBamF4U2VydmljZS5leHRlbmQoewotICAgICAgaGVhZGVyczogewotICAgICAgICAiQVBJ
X0tFWSI6ICJzZWNyZXQga2V5IiwKLSAgICAgICAgIkFOT1RIRVJfSEVBREVSIjogIlNvbWUgaGVh
ZGVyIHZhbHVlIgotICAgICAgfQotICAgIH0pOwotICAgIGBgYAotICAKLSAgICBgaGVhZGVyc2Ag
Y2FuIGFsc28gYmUgdXNlZCBhcyBhIGNvbXB1dGVkIHByb3BlcnR5IHRvIHN1cHBvcnQgZHluYW1p
YwotICAgIGhlYWRlcnMuCi0gIAotICAgIGBgYGFwcC9zZXJ2aWNlcy9hamF4LmpzCi0gICAgaW1w
b3J0IEVtYmVyIGZyb20gJ2VtYmVyJzsKLSAgICBpbXBvcnQgQWpheFNlcnZpY2UgZnJvbSAnZW1i
ZXItYWpheC9zZXJ2aWNlcy9hamF4JzsKLSAgCi0gICAgZXhwb3J0IGRlZmF1bHQgQWpheFNlcnZp
Y2UuZXh0ZW5kKHsKLSAgICAgIHNlc3Npb246IEVtYmVyLmluamVjdC5zZXJ2aWNlKCksCi0gICAg
ICBoZWFkZXJzOiBFbWJlci5jb21wdXRlZCgic2Vzc2lvbi5hdXRoVG9rZW4iLCBmdW5jdGlvbigp
IHsKLSAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAiQVBJX0tFWSI6IHRoaXMuZ2V0KCJzZXNz
aW9uLmF1dGhUb2tlbiIpLAotICAgICAgICAgICJBTk9USEVSX0hFQURFUiI6ICJTb21lIGhlYWRl
ciB2YWx1ZSIKLSAgICAgICAgfTsKLSAgICAgIH0pCi0gICAgfSk7Ci0gICAgYGBgCi0gIAotICAg
IEluIHNvbWUgY2FzZXMsIHlvdXIgZHluYW1pYyBoZWFkZXJzIG1heSByZXF1aXJlIGRhdGEgZnJv
bSBzb21lCi0gICAgb2JqZWN0IG91dHNpZGUgb2YgRW1iZXIncyBvYnNlcnZlciBzeXN0ZW0gKGZv
ciBleGFtcGxlCi0gICAgYGRvY3VtZW50LmNvb2tpZWApLiBZb3UgY2FuIHVzZSB0aGUKLSAgICBb
dm9sYXRpbGVdKC9hcGkvY2xhc3Nlcy9FbWJlci5Db21wdXRlZFByb3BlcnR5Lmh0bWwjbWV0aG9k
X3ZvbGF0aWxlKQotICAgIGZ1bmN0aW9uIHRvIHNldCB0aGUgcHJvcGVydHkgaW50byBhIG5vbi1j
YWNoZWQgbW9kZSBjYXVzaW5nIHRoZSBoZWFkZXJzIHRvCi0gICAgYmUgcmVjb21wdXRlZCB3aXRo
IGV2ZXJ5IHJlcXVlc3QuCi0gIAotICAgIGBgYGFwcC9zZXJ2aWNlcy9hamF4LmpzCi0gICAgaW1w
b3J0IEVtYmVyIGZyb20gJ2VtYmVyJzsKLSAgICBpbXBvcnQgQWpheFNlcnZpY2UgZnJvbSAnZW1i
ZXItYWpheC9zZXJ2aWNlcy9hamF4JzsKLSAgCi0gICAgZXhwb3J0IGRlZmF1bHQgQWpheFNlcnZp
Y2UuZXh0ZW5kKHsKLSAgICAgIHNlc3Npb246IEVtYmVyLmluamVjdC5zZXJ2aWNlKCksCi0gICAg
ICBoZWFkZXJzOiBFbWJlci5jb21wdXRlZCgic2Vzc2lvbi5hdXRoVG9rZW4iLCBmdW5jdGlvbigp
IHsKLSAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAiQVBJX0tFWSI6IEVtYmVyLmdldChkb2N1
bWVudC5jb29raWUubWF0Y2goL2FwaUtleVw9KFteO10qKS8pLCAiMSIpLAotICAgICAgICAgICJB
Tk9USEVSX0hFQURFUiI6ICJTb21lIGhlYWRlciB2YWx1ZSIKLSAgICAgICAgfTsKLSAgICAgIH0p
LnZvbGF0aWxlKCkKLSAgICB9KTsKLSAgICBgYGAKLSAgCi0gICoqLwotICBleHBvcnRzWydkZWZh
dWx0J10gPSBfZW1iZXJbJ2RlZmF1bHQnXS5TZXJ2aWNlLmV4dGVuZCh7Ci0KLSAgICByZXF1ZXN0
OiBmdW5jdGlvbiByZXF1ZXN0KHVybCwgb3B0aW9ucykgewotICAgICAgdmFyIF90aGlzID0gdGhp
czsKLQotICAgICAgdmFyIG9wdHM7Ci0KLSAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMiB8
fCB0eXBlb2Ygb3B0aW9ucyA9PT0gJ3N0cmluZycpIHsKLSAgICAgICAgZGVwcmVjYXRlKCdlbWJl
ci1hamF4L2FqYXgjcmVxdWVzdCBjYWxsaW5nIHJlcXVlc3Qgd2l0aCBgdHlwZWAgaXMgZGVwcmVj
YXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGVtYmVyLWFqYXhAMS4wLjAuIElmIHlvdSB3YW50
IHRvIHNwZWNpZnkgYSB0eXBlIHBhc3MgYW4gb2JqZWN0IGxpa2Uge3R5cGU6IFwnREVMRVRFXCd9
JywgZmFsc2UsIHsgaWQ6ICdlbWJlci1hamF4LnNlcnZpY2UucmVxdWVzdCcgfSk7Ci0KLSAgICAg
ICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAyKSB7Ci0gICAgICAgICAgb3B0cyA9IGFyZ3VtZW50
c1syXTsKLSAgICAgICAgICBvcHRzLnR5cGUgPSBvcHRpb25zOwotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgIG9wdHMgPSB7IHR5cGU6IG9wdGlvbnMgfTsKLSAgICAgICAgfQotICAgICAgfSBl
bHNlIHsKLSAgICAgICAgb3B0cyA9IG9wdGlvbnM7Ci0gICAgICB9Ci0KLSAgICAgIHZhciBoYXNo
ID0gdGhpcy5vcHRpb25zKHVybCwgb3B0cyk7Ci0KLSAgICAgIHJldHVybiBuZXcgX2VtYmVyWydk
ZWZhdWx0J10uUlNWUC5Qcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsKLQotICAg
ICAgICBoYXNoLnN1Y2Nlc3MgPSBmdW5jdGlvbiAocGF5bG9hZCwgdGV4dFN0YXR1cywganFYSFIp
IHsKLSAgICAgICAgICB2YXIgcmVzcG9uc2UgPSBfdGhpcy5oYW5kbGVSZXNwb25zZShqcVhIUi5z
dGF0dXMsICgwLCBfZW1iZXJBamF4VXRpbHNQYXJzZVJlc3BvbnNlSGVhZGVyc1snZGVmYXVsdCdd
KShqcVhIUi5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSksIHBheWxvYWQpOwotCi0gICAgICAgICAg
aWYgKHJlc3BvbnNlIGluc3RhbmNlb2YgX2VtYmVyQWpheEVycm9ycy5BamF4RXJyb3IpIHsKLSAg
ICAgICAgICAgIHJlamVjdChyZXNwb25zZSk7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIHJlc29sdmUocmVzcG9uc2UpOwotICAgICAgICAgIH0KLSAgICAgICAgfTsKLQotICAgICAg
ICBoYXNoLmVycm9yID0gZnVuY3Rpb24gKGpxWEhSLCB0ZXh0U3RhdHVzLCBlcnJvclRocm93bikg
ewotICAgICAgICAgIHZhciBlcnJvciA9IHVuZGVmaW5lZDsKLQotICAgICAgICAgIGlmICghKGVy
cm9yIGluc3RhbmNlb2YgRXJyb3IpKSB7Ci0gICAgICAgICAgICBpZiAoZXJyb3JUaHJvd24gaW5z
dGFuY2VvZiBFcnJvcikgewotICAgICAgICAgICAgICBlcnJvciA9IGVycm9yVGhyb3duOwotICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgZXJyb3IgPSBfdGhpcy5oYW5kbGVSZXNw
b25zZShqcVhIUi5zdGF0dXMsICgwLCBfZW1iZXJBamF4VXRpbHNQYXJzZVJlc3BvbnNlSGVhZGVy
c1snZGVmYXVsdCddKShqcVhIUi5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSksIF90aGlzLnBhcnNl
RXJyb3JSZXNwb25zZShqcVhIUi5yZXNwb25zZVRleHQpIHx8IGVycm9yVGhyb3duKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgcmVqZWN0KGVycm9yKTsKLSAgICAgICAg
fTsKLQotICAgICAgICBfZW1iZXJbJ2RlZmF1bHQnXS4kLmFqYXgoaGFzaCk7Ci0gICAgICB9LCAn
ZW1iZXItYWpheDogJyArIGhhc2gudHlwZSArICcgdG8gJyArIHVybCk7Ci0gICAgfSwKLQotICAg
IC8vIGNhbGxzIGByZXF1ZXN0KClgIGJ1dCBmb3JjZXMgYG9wdGlvbnMudHlwZWAgdG8gYFBPU1Rg
Ci0gICAgcG9zdDogZnVuY3Rpb24gcG9zdCh1cmwsIG9wdGlvbnMpIHsKLSAgICAgIHJldHVybiB0
aGlzLnJlcXVlc3QodXJsLCB0aGlzLl9hZGRUeXBlVG9PcHRpb25zRm9yKG9wdGlvbnMsICdQT1NU
JykpOwotICAgIH0sCi0KLSAgICAvLyBjYWxscyBgcmVxdWVzdCgpYCBidXQgZm9yY2VzIGBvcHRp
b25zLnR5cGVgIHRvIGBQVVRgCi0gICAgcHV0OiBmdW5jdGlvbiBwdXQodXJsLCBvcHRpb25zKSB7
Ci0gICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KHVybCwgdGhpcy5fYWRkVHlwZVRvT3B0aW9uc0Zv
cihvcHRpb25zLCAnUFVUJykpOwotICAgIH0sCi0KLSAgICAvLyBjYWxscyBgcmVxdWVzdCgpYCBi
dXQgZm9yY2VzIGBvcHRpb25zLnR5cGVgIHRvIGBQQVRDSGAKLSAgICBwYXRjaDogZnVuY3Rpb24g
cGF0Y2godXJsLCBvcHRpb25zKSB7Ci0gICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KHVybCwgdGhp
cy5fYWRkVHlwZVRvT3B0aW9uc0ZvcihvcHRpb25zLCAnUEFUQ0gnKSk7Ci0gICAgfSwKLQotICAg
IC8vIGNhbGxzIGByZXF1ZXN0KClgIGJ1dCBmb3JjZXMgYG9wdGlvbnMudHlwZWAgdG8gYERFTEVU
RWAKLSAgICBkZWw6IGZ1bmN0aW9uIGRlbCh1cmwsIG9wdGlvbnMpIHsKLSAgICAgIHJldHVybiB0
aGlzLnJlcXVlc3QodXJsLCB0aGlzLl9hZGRUeXBlVG9PcHRpb25zRm9yKG9wdGlvbnMsICdERUxF
VEUnKSk7Ci0gICAgfSwKLQotICAgIC8vIGZvcmNpYmx5IG1hbmlwdWxhdGVzIHRoZSBvcHRpb25z
IGhhc2ggdG8gaW5jbHVkZSB0aGUgSFRUUCBtZXRob2Qgb24gdGhlIHR5cGUga2V5Ci0gICAgX2Fk
ZFR5cGVUb09wdGlvbnNGb3I6IGZ1bmN0aW9uIF9hZGRUeXBlVG9PcHRpb25zRm9yKG9wdGlvbnMs
IG1ldGhvZCkgewotICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307Ci0gICAgICBvcHRpb25z
LnR5cGUgPSBtZXRob2Q7Ci0gICAgICByZXR1cm4gb3B0aW9uczsKLSAgICB9LAotCi0gICAgLyoq
Ci0gICAgICBAbWV0aG9kIG9wdGlvbnMKLSAgICAgIEBwcml2YXRlCi0gICAgICBAcGFyYW0ge1N0
cmluZ30gdXJsCi0gICAgICBAcGFyYW0ge09iamVjdH0gb3B0aW9ucwotICAgICAgQHJldHVybiB7
T2JqZWN0fQotICAgICovCi0gICAgb3B0aW9uczogZnVuY3Rpb24gb3B0aW9ucyh1cmwsIF9vcHRp
b25zKSB7Ci0gICAgICB2YXIgaGFzaCA9IF9vcHRpb25zIHx8IHt9OwotICAgICAgaGFzaC51cmwg
PSB0aGlzLl9idWlsZFVSTCh1cmwpOwotICAgICAgaGFzaC50eXBlID0gaGFzaC50eXBlIHx8ICdH
RVQnOwotICAgICAgaGFzaC5kYXRhVHlwZSA9IGhhc2guZGF0YVR5cGUgfHwgJ2pzb24nOwotICAg
ICAgaGFzaC5jb250ZXh0ID0gdGhpczsKLQotICAgICAgdmFyIGhlYWRlcnMgPSBnZXQodGhpcywg
J2hlYWRlcnMnKTsKLSAgICAgIGlmIChoZWFkZXJzICE9PSB1bmRlZmluZWQpIHsKLSAgICAgICAg
aGFzaC5iZWZvcmVTZW5kID0gZnVuY3Rpb24gKHhocikgewotICAgICAgICAgIE9iamVjdC5rZXlz
KGhlYWRlcnMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgewotICAgICAgICAgICAgcmV0dXJuIHho
ci5zZXRSZXF1ZXN0SGVhZGVyKGtleSwgaGVhZGVyc1trZXldKTsKLSAgICAgICAgICB9KTsKLSAg
ICAgICAgfTsKLSAgICAgIH0KLQotICAgICAgcmV0dXJuIGhhc2g7Ci0gICAgfSwKLQotICAgIF9i
dWlsZFVSTDogZnVuY3Rpb24gX2J1aWxkVVJMKHVybCkgewotICAgICAgdmFyIGhvc3QgPSBnZXQo
dGhpcywgJ2hvc3QnKTsKLSAgICAgIGlmIChpc0JsYW5rKGhvc3QpKSB7Ci0gICAgICAgIHJldHVy
biB1cmw7Ci0gICAgICB9Ci0gICAgICB2YXIgc3RhcnRzV2l0aCA9IFN0cmluZy5wcm90b3R5cGUu
c3RhcnRzV2l0aCB8fCBmdW5jdGlvbiAoc2VhcmNoU3RyaW5nLCBwb3NpdGlvbikgewotICAgICAg
ICBwb3NpdGlvbiA9IHBvc2l0aW9uIHx8IDA7Ci0gICAgICAgIHJldHVybiB0aGlzLmluZGV4T2Yo
c2VhcmNoU3RyaW5nLCBwb3NpdGlvbikgPT09IHBvc2l0aW9uOwotICAgICAgfTsKLSAgICAgIGlm
IChzdGFydHNXaXRoLmNhbGwodXJsLCAnLycpKSB7Ci0gICAgICAgIHJldHVybiAnJyArIGhvc3Qg
KyB1cmw7Ci0gICAgICB9IGVsc2UgewotICAgICAgICByZXR1cm4gaG9zdCArICcvJyArIHVybDsK
LSAgICAgIH0KLSAgICB9LAotCi0gICAgLyoqCi0gICAgIFRha2VzIGFuIGFqYXggcmVzcG9uc2Us
IGFuZCByZXR1cm5zIHRoZSBqc29uIHBheWxvYWQgb3IgYW4gZXJyb3IuCi0gICAgICBCeSBkZWZh
dWx0IHRoaXMgaG9vayBqdXN0IHJldHVybnMgdGhlIGpzb24gcGF5bG9hZCBwYXNzZWQgdG8gaXQu
Ci0gICAgIFlvdSBtaWdodCB3YW50IHRvIG92ZXJyaWRlIGl0IGluIHR3byBjYXNlczoKLSAgICAg
IDEuIFlvdXIgQVBJIG1pZ2h0IHJldHVybiB1c2VmdWwgcmVzdWx0cyBpbiB0aGUgcmVzcG9uc2Ug
aGVhZGVycy4KLSAgICAgUmVzcG9uc2UgaGVhZGVycyBhcmUgcGFzc2VkIGluIGFzIHRoZSBzZWNv
bmQgYXJndW1lbnQuCi0gICAgICAyLiBZb3VyIEFQSSBtaWdodCByZXR1cm4gZXJyb3JzIGFzIHN1
Y2Nlc3NmdWwgcmVzcG9uc2VzIHdpdGggc3RhdHVzIGNvZGUKLSAgICAgMjAwIGFuZCBhbiBFcnJv
cnMgdGV4dCBvciBvYmplY3QuCi0gICAgIEBtZXRob2QgaGFuZGxlUmVzcG9uc2UKLSAgICAgQHBh
cmFtICB7TnVtYmVyfSBzdGF0dXMKLSAgICAgQHBhcmFtICB7T2JqZWN0fSBoZWFkZXJzCi0gICAg
IEBwYXJhbSAge09iamVjdH0gcGF5bG9hZAotICAgICBAcmV0dXJuIHtPYmplY3QgfCBEUy5BZGFw
dGVyRXJyb3J9IHJlc3BvbnNlCi0gICAgKi8KLSAgICBoYW5kbGVSZXNwb25zZTogZnVuY3Rpb24g
aGFuZGxlUmVzcG9uc2Uoc3RhdHVzLCBoZWFkZXJzLCBwYXlsb2FkKSB7Ci0gICAgICBpZiAodGhp
cy5pc1N1Y2Nlc3Moc3RhdHVzLCBoZWFkZXJzLCBwYXlsb2FkKSkgewotICAgICAgICByZXR1cm4g
cGF5bG9hZDsKLSAgICAgIH0gZWxzZSBpZiAodGhpcy5pc1VuYXV0aG9yaXplZChzdGF0dXMsIGhl
YWRlcnMsIHBheWxvYWQpKSB7Ci0gICAgICAgIHJldHVybiBuZXcgX2VtYmVyQWpheEVycm9ycy5V
bmF1dGhvcml6ZWRFcnJvcihwYXlsb2FkLmVycm9ycyk7Ci0gICAgICB9IGVsc2UgaWYgKHRoaXMu
aXNGb3JiaWRkZW4oc3RhdHVzLCBoZWFkZXJzLCBwYXlsb2FkKSkgewotICAgICAgICByZXR1cm4g
bmV3IF9lbWJlckFqYXhFcnJvcnMuRm9yYmlkZGVuRXJyb3IocGF5bG9hZC5lcnJvcnMpOwotICAg
ICAgfSBlbHNlIGlmICh0aGlzLmlzSW52YWxpZChzdGF0dXMsIGhlYWRlcnMsIHBheWxvYWQpKSB7
Ci0gICAgICAgIHJldHVybiBuZXcgX2VtYmVyQWpheEVycm9ycy5JbnZhbGlkRXJyb3IocGF5bG9h
ZC5lcnJvcnMpOwotICAgICAgfQotCi0gICAgICB2YXIgZXJyb3JzID0gdGhpcy5ub3JtYWxpemVF
cnJvclJlc3BvbnNlKHN0YXR1cywgaGVhZGVycywgcGF5bG9hZCk7Ci0KLSAgICAgIHJldHVybiBu
ZXcgX2VtYmVyQWpheEVycm9ycy5BamF4RXJyb3IoZXJyb3JzKTsKLSAgICB9LAotCi0gICAgLyoq
Ci0gICAgIERlZmF1bHQgYGhhbmRsZVJlc3BvbnNlYCBpbXBsZW1lbnRhdGlvbiB1c2VzIHRoaXMg
aG9vayB0byBkZWNpZGUgaWYgdGhlCi0gICAgIHJlc3BvbnNlIGlzIGEgYW4gYXV0aG9yaXplZCBl
cnJvci4KLSAgICAgQG1ldGhvZCBpc1VuYXV0aG9yaXplZAotICAgICBAcGFyYW0gIHtOdW1iZXJ9
IHN0YXR1cwotICAgICBAcGFyYW0gIHtPYmplY3R9IGhlYWRlcnMKLSAgICAgQHBhcmFtICB7T2Jq
ZWN0fSBwYXlsb2FkCi0gICAgIEByZXR1cm4ge0Jvb2xlYW59Ci0gICAgKi8KLSAgICBpc1VuYXV0
aG9yaXplZDogZnVuY3Rpb24gaXNVbmF1dGhvcml6ZWQoc3RhdHVzIC8qLCBoZWFkZXJzLCBwYXls
b2FkICovKSB7Ci0gICAgICByZXR1cm4gc3RhdHVzID09PSA0MDE7Ci0gICAgfSwKLQotICAgIC8q
KgotICAgICAgIERlZmF1bHQgYGhhbmRsZVJlc3BvbnNlYCBpbXBsZW1lbnRhdGlvbiB1c2VzIHRo
aXMgaG9vayB0byBkZWNpZGUgaWYgdGhlCi0gICAgICAgcmVzcG9uc2UgaXMgYSBmb3JiaWRkZW4g
ZXJyb3IuCi0gICAgICAgQG1ldGhvZCBpc0ZvcmJpZGRlbgotICAgICAgIEBwYXJhbSAge051bWJl
cn0gc3RhdHVzCi0gICAgICAgQHBhcmFtICB7T2JqZWN0fSBoZWFkZXJzCi0gICAgICAgQHBhcmFt
ICB7T2JqZWN0fSBwYXlsb2FkCi0gICAgICAgQHJldHVybiB7Qm9vbGVhbn0KLSAgICAgKi8KLSAg
ICBpc0ZvcmJpZGRlbjogZnVuY3Rpb24gaXNGb3JiaWRkZW4oc3RhdHVzIC8qLCBoZWFkZXJzLCBw
YXlsb2FkICovKSB7Ci0gICAgICByZXR1cm4gc3RhdHVzID09PSA0MDM7Ci0gICAgfSwKLQotICAg
IC8qKgotICAgICAgRGVmYXVsdCBgaGFuZGxlUmVzcG9uc2VgIGltcGxlbWVudGF0aW9uIHVzZXMg
dGhpcyBob29rIHRvIGRlY2lkZSBpZiB0aGUKLSAgICAgIHJlc3BvbnNlIGlzIGEgYW4gaW52YWxp
ZCBlcnJvci4KLSAgICAgIEBtZXRob2QgaXNJbnZhbGlkCi0gICAgICBAcGFyYW0gIHtOdW1iZXJ9
IHN0YXR1cwotICAgICAgQHBhcmFtICB7T2JqZWN0fSBoZWFkZXJzCi0gICAgICBAcGFyYW0gIHtP
YmplY3R9IHBheWxvYWQKLSAgICAgIEByZXR1cm4ge0Jvb2xlYW59Ci0gICAgKi8KLSAgICBpc0lu
dmFsaWQ6IGZ1bmN0aW9uIGlzSW52YWxpZChzdGF0dXMgLyosIGhlYWRlcnMsIHBheWxvYWQgKi8p
IHsKLSAgICAgIHJldHVybiBzdGF0dXMgPT09IDQyMjsKLSAgICB9LAotCi0gICAgLyoqCi0gICAg
IERlZmF1bHQgYGhhbmRsZVJlc3BvbnNlYCBpbXBsZW1lbnRhdGlvbiB1c2VzIHRoaXMgaG9vayB0
byBkZWNpZGUgaWYgdGhlCi0gICAgIHJlc3BvbnNlIGlzIGEgc3VjY2Vzcy4KLSAgICAgQG1ldGhv
ZCBpc1N1Y2Nlc3MKLSAgICAgQHBhcmFtICB7TnVtYmVyfSBzdGF0dXMKLSAgICAgQHBhcmFtICB7
T2JqZWN0fSBoZWFkZXJzCi0gICAgIEBwYXJhbSAge09iamVjdH0gcGF5bG9hZAotICAgICBAcmV0
dXJuIHtCb29sZWFufQotICAgICovCi0gICAgaXNTdWNjZXNzOiBmdW5jdGlvbiBpc1N1Y2Nlc3Mo
c3RhdHVzIC8qLCBoZWFkZXJzLCBwYXlsb2FkICovKSB7Ci0gICAgICByZXR1cm4gc3RhdHVzID49
IDIwMCAmJiBzdGF0dXMgPCAzMDAgfHwgc3RhdHVzID09PSAzMDQ7Ci0gICAgfSwKLQotICAgIC8q
KgotICAgICAgQG1ldGhvZCBwYXJzZUVycm9yUmVzcG9uc2UKLSAgICAgIEBwcml2YXRlCi0gICAg
ICBAcGFyYW0ge1N0cmluZ30gcmVzcG9uc2VUZXh0Ci0gICAgICBAcmV0dXJuIHtPYmplY3R9Ci0g
ICAgKi8KLSAgICBwYXJzZUVycm9yUmVzcG9uc2U6IGZ1bmN0aW9uIHBhcnNlRXJyb3JSZXNwb25z
ZShyZXNwb25zZVRleHQpIHsKLSAgICAgIHZhciBqc29uID0gcmVzcG9uc2VUZXh0OwotCi0gICAg
ICB0cnkgewotICAgICAgICBqc29uID0gX2VtYmVyWydkZWZhdWx0J10uJC5wYXJzZUpTT04ocmVz
cG9uc2VUZXh0KTsKLSAgICAgIH0gY2F0Y2ggKGUpIHt9Ci0KLSAgICAgIHJldHVybiBqc29uOwot
ICAgIH0sCi0KLSAgICAvKioKLSAgICAgIEBtZXRob2Qgbm9ybWFsaXplRXJyb3JSZXNwb25zZQot
ICAgICAgQHByaXZhdGUKLSAgICAgIEBwYXJhbSAge051bWJlcn0gc3RhdHVzCi0gICAgICBAcGFy
YW0gIHtPYmplY3R9IGhlYWRlcnMKLSAgICAgIEBwYXJhbSAge09iamVjdH0gcGF5bG9hZAotICAg
ICAgQHJldHVybiB7T2JqZWN0fSBlcnJvcnMgcGF5bG9hZAotICAgICovCi0gICAgbm9ybWFsaXpl
RXJyb3JSZXNwb25zZTogZnVuY3Rpb24gbm9ybWFsaXplRXJyb3JSZXNwb25zZShzdGF0dXMsIGhl
YWRlcnMsIHBheWxvYWQpIHsKLSAgICAgIGlmIChwYXlsb2FkICYmIHR5cGVvZiBwYXlsb2FkID09
PSAnb2JqZWN0JyAmJiBwYXlsb2FkLmVycm9ycykgewotICAgICAgICByZXR1cm4gcGF5bG9hZC5l
cnJvcnM7Ci0gICAgICB9IGVsc2UgewotICAgICAgICByZXR1cm4gW3sKLSAgICAgICAgICBzdGF0
dXM6ICcnICsgc3RhdHVzLAotICAgICAgICAgIHRpdGxlOiAiVGhlIGJhY2tlbmQgcmVzcG9uZGVk
IHdpdGggYW4gZXJyb3IiLAotICAgICAgICAgIGRldGFpbDogJycgKyBwYXlsb2FkCi0gICAgICAg
IH1dOwotICAgICAgfQotICAgIH0KLSAgfSk7Ci19KTsKLWRlZmluZSgiZW1iZXItYWpheC91dGls
cy9wYXJzZS1hcmdzIiwgWyJleHBvcnRzIl0sIGZ1bmN0aW9uIChleHBvcnRzKSB7Ci0gICJ1c2Ug
c3RyaWN0IjsKLQotICB2YXIgX3NsaWNlZFRvQXJyYXkgPSAoZnVuY3Rpb24gKCkgewotICAgIGZ1
bmN0aW9uIHNsaWNlSXRlcmF0b3IoYXJyLCBpKSB7Ci0gICAgICB2YXIgX2FyciA9IFtdO3ZhciBf
biA9IHRydWU7dmFyIF9kID0gZmFsc2U7dmFyIF9lID0gdW5kZWZpbmVkO3RyeSB7Ci0gICAgICAg
IGZvciAodmFyIF9pID0gYXJyW1N5bWJvbC5pdGVyYXRvcl0oKSwgX3M7ICEoX24gPSAoX3MgPSBf
aS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHsKLSAgICAgICAgICBfYXJyLnB1c2goX3MudmFs
dWUpO2lmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhazsKLSAgICAgICAgfQotICAgICAg
fSBjYXRjaCAoZXJyKSB7Ci0gICAgICAgIF9kID0gdHJ1ZTtfZSA9IGVycjsKLSAgICAgIH0gZmlu
YWxseSB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgaWYgKCFfbiAmJiBfaVsicmV0dXJuIl0p
IF9pWyJyZXR1cm4iXSgpOwotICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgIGlmIChfZCkg
dGhyb3cgX2U7Ci0gICAgICAgIH0KLSAgICAgIH1yZXR1cm4gX2FycjsKLSAgICB9cmV0dXJuIGZ1
bmN0aW9uIChhcnIsIGkpIHsKLSAgICAgIGlmIChBcnJheS5pc0FycmF5KGFycikpIHsKLSAgICAg
ICAgcmV0dXJuIGFycjsKLSAgICAgIH0gZWxzZSBpZiAoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVj
dChhcnIpKSB7Ci0gICAgICAgIHJldHVybiBzbGljZUl0ZXJhdG9yKGFyciwgaSk7Ci0gICAgICB9
IGVsc2UgewotICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8g
ZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlIik7Ci0gICAgICB9Ci0gICAgfTsKLSAg
fSkoKTsKLQotICBleHBvcnRzWyJkZWZhdWx0Il0gPSBwYXJzZUFyZ3M7Ci0KLSAgZnVuY3Rpb24g
cGFyc2VBcmdzKCkgewotICAgIHZhciBhcmdzID0gW10uc2xpY2UuYXBwbHkoYXJndW1lbnRzKTsK
LSAgICBpZiAoYXJncy5sZW5ndGggPT09IDEpIHsKLSAgICAgIGlmICh0eXBlb2YgYXJnc1swXSA9
PT0gInN0cmluZyIpIHsKLSAgICAgICAgdmFyIF9hcmdzID0gX3NsaWNlZFRvQXJyYXkoYXJncywg
MSk7Ci0KLSAgICAgICAgdmFyIHVybCA9IF9hcmdzWzBdOwotCi0gICAgICAgIHJldHVybiBbdXJs
XTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHZhciBfYXJnczIgPSBfc2xpY2VkVG9BcnJheShh
cmdzLCAxKTsKLQotICAgICAgICB2YXIgb3B0aW9ucyA9IF9hcmdzMlswXTsKLSAgICAgICAgdmFy
IHVybCA9IG9wdGlvbnMudXJsOwotCi0gICAgICAgIGRlbGV0ZSBvcHRpb25zLnVybDsKLSAgICAg
ICAgdmFyIHR5cGUgPSBvcHRpb25zLnR5cGUgfHwgb3B0aW9ucy5tZXRob2Q7Ci0gICAgICAgIGRl
bGV0ZSBvcHRpb25zLnR5cGU7Ci0gICAgICAgIGRlbGV0ZSBvcHRpb25zLm1ldGhvZDsKLSAgICAg
ICAgcmV0dXJuIFt1cmwsIHR5cGUsIG9wdGlvbnNdOwotICAgICAgfQotICAgIH0KLSAgICBpZiAo
YXJncy5sZW5ndGggPT09IDIpIHsKLSAgICAgIHZhciBfYXJnczMgPSBfc2xpY2VkVG9BcnJheShh
cmdzLCAxKTsKLQotICAgICAgdmFyIHVybCA9IF9hcmdzM1swXTsKLQotICAgICAgaWYgKHR5cGVv
ZiBhcmdzWzFdID09PSAnb2JqZWN0JykgewotICAgICAgICB2YXIgb3B0aW9ucyA9IGFyZ3NbMV07
Ci0gICAgICAgIHZhciB0eXBlID0gb3B0aW9ucy50eXBlIHx8IG9wdGlvbnMubWV0aG9kOwotICAg
ICAgICBkZWxldGUgb3B0aW9ucy50eXBlOwotICAgICAgICBkZWxldGUgb3B0aW9ucy5tZXRob2Q7
Ci0gICAgICAgIHJldHVybiBbdXJsLCB0eXBlLCBvcHRpb25zXTsKLSAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgIHZhciB0eXBlID0gYXJnc1sxXTsKLSAgICAgICAgcmV0dXJuIFt1cmwsIHR5cGVdOwot
ICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gYXJnczsKLSAgfQotfSk7Ci1kZWZpbmUoJ2VtYmVy
LWFqYXgvdXRpbHMvcGFyc2UtcmVzcG9uc2UtaGVhZGVycycsIFsnZXhwb3J0cyddLCBmdW5jdGlv
biAoZXhwb3J0cykgewotICAndXNlIHN0cmljdCc7Ci0KLSAgZXhwb3J0c1snZGVmYXVsdCddID0g
cGFyc2VSZXNwb25zZUhlYWRlcnM7Ci0KLSAgZnVuY3Rpb24gcGFyc2VSZXNwb25zZUhlYWRlcnMo
aGVhZGVyU3RyKSB7Ci0gICAgdmFyIGhlYWRlcnMgPSBPYmplY3QuY3JlYXRlKG51bGwpOwotICAg
IGlmICghaGVhZGVyU3RyKSB7Ci0gICAgICByZXR1cm4gaGVhZGVyczsKLSAgICB9Ci0KLSAgICB2
YXIgaGVhZGVyUGFpcnMgPSBoZWFkZXJTdHIuc3BsaXQoJ1xyXG4nKTsKLSAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IGhlYWRlclBhaXJzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICB2YXIgaGVhZGVyUGFp
ciA9IGhlYWRlclBhaXJzW2ldOwotICAgICAgLy8gQ2FuJ3QgdXNlIHNwbGl0KCkgaGVyZSBiZWNh
dXNlIGl0IGRvZXMgdGhlIHdyb25nIHRoaW5nCi0gICAgICAvLyBpZiB0aGUgaGVhZGVyIHZhbHVl
IGhhcyB0aGUgc3RyaW5nICI6ICIgaW4gaXQuCi0gICAgICB2YXIgaW5kZXggPSBoZWFkZXJQYWly
LmluZGV4T2YoJzogJyk7Ci0gICAgICBpZiAoaW5kZXggPiAwKSB7Ci0gICAgICAgIHZhciBrZXkg
PSBoZWFkZXJQYWlyLnN1YnN0cmluZygwLCBpbmRleCk7Ci0gICAgICAgIHZhciB2YWwgPSBoZWFk
ZXJQYWlyLnN1YnN0cmluZyhpbmRleCArIDIpOwotICAgICAgICBoZWFkZXJzW2tleV0gPSB2YWw7
Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGhlYWRlcnM7Ci0gIH0KLX0pOwotZGVmaW5l
KCdlbWJlci1jbGktYXBwLXZlcnNpb24vY29tcG9uZW50cy9hcHAtdmVyc2lvbicsIFsnZXhwb3J0
cycsICdlbWJlcicsICdlbWJlci1jbGktYXBwLXZlcnNpb24vdGVtcGxhdGVzL2FwcC12ZXJzaW9u
J10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXIsIF9lbWJlckNsaUFwcFZlcnNpb25UZW1wbGF0
ZXNBcHBWZXJzaW9uKSB7Ci0gICd1c2Ugc3RyaWN0JzsKLQotICBleHBvcnRzWydkZWZhdWx0J10g
PSBfZW1iZXJbJ2RlZmF1bHQnXS5Db21wb25lbnQuZXh0ZW5kKHsKLSAgICB0YWdOYW1lOiAnc3Bh
bicsCi0gICAgbGF5b3V0OiBfZW1iZXJDbGlBcHBWZXJzaW9uVGVtcGxhdGVzQXBwVmVyc2lvblsn
ZGVmYXVsdCddCi0gIH0pOwotfSk7Ci1kZWZpbmUoJ2VtYmVyLWNsaS1hcHAtdmVyc2lvbi9pbml0
aWFsaXplci1mYWN0b3J5JywgWydleHBvcnRzJywgJ2VtYmVyJ10sIGZ1bmN0aW9uIChleHBvcnRz
LCBfZW1iZXIpIHsKLSAgJ3VzZSBzdHJpY3QnOwotCi0gIGV4cG9ydHNbJ2RlZmF1bHQnXSA9IGlu
aXRpYWxpemVyRmFjdG9yeTsKLQotICB2YXIgY2xhc3NpZnkgPSBfZW1iZXJbJ2RlZmF1bHQnXS5T
dHJpbmcuY2xhc3NpZnk7Ci0KLSAgZnVuY3Rpb24gaW5pdGlhbGl6ZXJGYWN0b3J5KG5hbWUsIHZl
cnNpb24pIHsKLSAgICB2YXIgcmVnaXN0ZXJlZCA9IGZhbHNlOwotCi0gICAgcmV0dXJuIGZ1bmN0
aW9uICgpIHsKLSAgICAgIGlmICghcmVnaXN0ZXJlZCAmJiBuYW1lICYmIHZlcnNpb24pIHsKLSAg
ICAgICAgdmFyIGFwcE5hbWUgPSBjbGFzc2lmeShuYW1lKTsKLSAgICAgICAgX2VtYmVyWydkZWZh
dWx0J10ubGlicmFyaWVzLnJlZ2lzdGVyKGFwcE5hbWUsIHZlcnNpb24pOwotICAgICAgICByZWdp
c3RlcmVkID0gdHJ1ZTsKLSAgICAgIH0KLSAgICB9OwotICB9Ci19KTsKLWRlZmluZSgiZW1iZXIt
Y2xpLWFwcC12ZXJzaW9uL3RlbXBsYXRlcy9hcHAtdmVyc2lvbiIsIFsiZXhwb3J0cyJdLCBmdW5j
dGlvbiAoZXhwb3J0cykgewotICAidXNlIHN0cmljdCI7Ci0KLSAgZXhwb3J0c1siZGVmYXVsdCJd
ID0gRW1iZXIuSFRNTEJhcnMudGVtcGxhdGUoKGZ1bmN0aW9uICgpIHsKLSAgICByZXR1cm4gewot
ICAgICAgbWV0YTogewotICAgICAgICAiZnJhZ21lbnRSZWFzb24iOiB7Ci0gICAgICAgICAgIm5h
bWUiOiAibWlzc2luZy13cmFwcGVyIiwKLSAgICAgICAgICAicHJvYmxlbXMiOiBbIndyb25nLXR5
cGUiXQotICAgICAgICB9LAotICAgICAgICAicmV2aXNpb24iOiAiRW1iZXJAMi42LjIiLAotICAg
ICAgICAibG9jIjogewotICAgICAgICAgICJzb3VyY2UiOiBudWxsLAotICAgICAgICAgICJzdGFy
dCI6IHsKLSAgICAgICAgICAgICJsaW5lIjogMSwKLSAgICAgICAgICAgICJjb2x1bW4iOiAwCi0g
ICAgICAgICAgfSwKLSAgICAgICAgICAiZW5kIjogewotICAgICAgICAgICAgImxpbmUiOiAyLAot
ICAgICAgICAgICAgImNvbHVtbiI6IDAKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAg
ICJtb2R1bGVOYW1lIjogIm1vZHVsZXMvZW1iZXItY2xpLWFwcC12ZXJzaW9uL3RlbXBsYXRlcy9h
cHAtdmVyc2lvbi5oYnMiCi0gICAgICB9LAotICAgICAgaXNFbXB0eTogZmFsc2UsCi0gICAgICBh
cml0eTogMCwKLSAgICAgIGNhY2hlZEZyYWdtZW50OiBudWxsLAotICAgICAgaGFzUmVuZGVyZWQ6
IGZhbHNlLAotICAgICAgYnVpbGRGcmFnbWVudDogZnVuY3Rpb24gYnVpbGRGcmFnbWVudChkb20p
IHsKLSAgICAgICAgdmFyIGVsMCA9IGRvbS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7Ci0gICAg
ICAgIHZhciBlbDEgPSBkb20uY3JlYXRlQ29tbWVudCgiIik7Ci0gICAgICAgIGRvbS5hcHBlbmRD
aGlsZChlbDAsIGVsMSk7Ci0gICAgICAgIHZhciBlbDEgPSBkb20uY3JlYXRlVGV4dE5vZGUoIlxu
Iik7Ci0gICAgICAgIGRvbS5hcHBlbmRDaGlsZChlbDAsIGVsMSk7Ci0gICAgICAgIHJldHVybiBl
bDA7Ci0gICAgICB9LAotICAgICAgYnVpbGRSZW5kZXJOb2RlczogZnVuY3Rpb24gYnVpbGRSZW5k
ZXJOb2Rlcyhkb20sIGZyYWdtZW50LCBjb250ZXh0dWFsRWxlbWVudCkgewotICAgICAgICB2YXIg
bW9ycGhzID0gbmV3IEFycmF5KDEpOwotICAgICAgICBtb3JwaHNbMF0gPSBkb20uY3JlYXRlTW9y
cGhBdChmcmFnbWVudCwgMCwgMCwgY29udGV4dHVhbEVsZW1lbnQpOwotICAgICAgICBkb20uaW5z
ZXJ0Qm91bmRhcnkoZnJhZ21lbnQsIDApOwotICAgICAgICByZXR1cm4gbW9ycGhzOwotICAgICAg
fSwKLSAgICAgIHN0YXRlbWVudHM6IFtbImNvbnRlbnQiLCAidmVyc2lvbiIsIFsibG9jIiwgW251
bGwsIFsxLCAwXSwgWzEsIDExXV1dXV0sCi0gICAgICBsb2NhbHM6IFtdLAotICAgICAgdGVtcGxh
dGVzOiBbXQotICAgIH07Ci0gIH0pKCkpOwotfSk7Ci1kZWZpbmUoImVtYmVyLWluZmxlY3Rvci9p
bmRleCIsIFsiZXhwb3J0cyIsICJlbWJlciIsICJlbWJlci1pbmZsZWN0b3IvbGliL3N5c3RlbSIs
ICJlbWJlci1pbmZsZWN0b3IvbGliL2V4dC9zdHJpbmciXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9l
bWJlciwgX2VtYmVySW5mbGVjdG9yTGliU3lzdGVtLCBfZW1iZXJJbmZsZWN0b3JMaWJFeHRTdHJp
bmcpIHsKLSAgLyogZ2xvYmFsIGRlZmluZSwgbW9kdWxlICovCi0KLSAgInVzZSBzdHJpY3QiOwot
Ci0gIF9lbWJlckluZmxlY3RvckxpYlN5c3RlbS5JbmZsZWN0b3IuZGVmYXVsdFJ1bGVzID0gX2Vt
YmVySW5mbGVjdG9yTGliU3lzdGVtLmRlZmF1bHRSdWxlczsKLSAgX2VtYmVyWyJkZWZhdWx0Il0u
SW5mbGVjdG9yID0gX2VtYmVySW5mbGVjdG9yTGliU3lzdGVtLkluZmxlY3RvcjsKLQotICBfZW1i
ZXJbImRlZmF1bHQiXS5TdHJpbmcucGx1cmFsaXplID0gX2VtYmVySW5mbGVjdG9yTGliU3lzdGVt
LnBsdXJhbGl6ZTsKLSAgX2VtYmVyWyJkZWZhdWx0Il0uU3RyaW5nLnNpbmd1bGFyaXplID0gX2Vt
YmVySW5mbGVjdG9yTGliU3lzdGVtLnNpbmd1bGFyaXplO2V4cG9ydHNbImRlZmF1bHQiXSA9IF9l
bWJlckluZmxlY3RvckxpYlN5c3RlbS5JbmZsZWN0b3I7Ci0gIGV4cG9ydHMucGx1cmFsaXplID0g
X2VtYmVySW5mbGVjdG9yTGliU3lzdGVtLnBsdXJhbGl6ZTsKLSAgZXhwb3J0cy5zaW5ndWxhcml6
ZSA9IF9lbWJlckluZmxlY3RvckxpYlN5c3RlbS5zaW5ndWxhcml6ZTsKLSAgZXhwb3J0cy5kZWZh
dWx0UnVsZXMgPSBfZW1iZXJJbmZsZWN0b3JMaWJTeXN0ZW0uZGVmYXVsdFJ1bGVzOwotCi0gIGlm
ICh0eXBlb2YgZGVmaW5lICE9PSAndW5kZWZpbmVkJyAmJiBkZWZpbmUuYW1kKSB7Ci0gICAgZGVm
aW5lKCdlbWJlci1pbmZsZWN0b3InLCBbJ2V4cG9ydHMnXSwgZnVuY3Rpb24gKF9fZXhwb3J0c19f
KSB7Ci0gICAgICBfX2V4cG9ydHNfX1snZGVmYXVsdCddID0gX2VtYmVySW5mbGVjdG9yTGliU3lz
dGVtLkluZmxlY3RvcjsKLSAgICAgIHJldHVybiBfZW1iZXJJbmZsZWN0b3JMaWJTeXN0ZW0uSW5m
bGVjdG9yOwotICAgIH0pOwotICB9IGVsc2UgaWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmlu
ZWQnICYmIG1vZHVsZVsnZXhwb3J0cyddKSB7Ci0gICAgbW9kdWxlWydleHBvcnRzJ10gPSBfZW1i
ZXJJbmZsZWN0b3JMaWJTeXN0ZW0uSW5mbGVjdG9yOwotICB9Ci19KTsKLWRlZmluZSgnZW1iZXIt
aW5mbGVjdG9yL2xpYi9leHQvc3RyaW5nJywgWydleHBvcnRzJywgJ2VtYmVyJywgJ2VtYmVyLWlu
ZmxlY3Rvci9saWIvc3lzdGVtL3N0cmluZyddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyLCBf
ZW1iZXJJbmZsZWN0b3JMaWJTeXN0ZW1TdHJpbmcpIHsKLSAgJ3VzZSBzdHJpY3QnOwotCi0gIGlm
IChfZW1iZXJbJ2RlZmF1bHQnXS5FWFRFTkRfUFJPVE9UWVBFUyA9PT0gdHJ1ZSB8fCBfZW1iZXJb
J2RlZmF1bHQnXS5FWFRFTkRfUFJPVE9UWVBFUy5TdHJpbmcpIHsKLSAgICAvKioKLSAgICAgIFNl
ZSB7eyNjcm9zc0xpbmsgIkVtYmVyLlN0cmluZy9wbHVyYWxpemUifX17ey9jcm9zc0xpbmt9fQot
ICAgICAgIEBtZXRob2QgcGx1cmFsaXplCi0gICAgICBAZm9yIFN0cmluZwotICAgICovCi0gICAg
U3RyaW5nLnByb3RvdHlwZS5wbHVyYWxpemUgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICByZXR1cm4g
KDAsIF9lbWJlckluZmxlY3RvckxpYlN5c3RlbVN0cmluZy5wbHVyYWxpemUpKHRoaXMpOwotICAg
IH07Ci0KLSAgICAvKioKLSAgICAgIFNlZSB7eyNjcm9zc0xpbmsgIkVtYmVyLlN0cmluZy9zaW5n
dWxhcml6ZSJ9fXt7L2Nyb3NzTGlua319Ci0gICAgICAgQG1ldGhvZCBzaW5ndWxhcml6ZQotICAg
ICAgQGZvciBTdHJpbmcKLSAgICAqLwotICAgIFN0cmluZy5wcm90b3R5cGUuc2luZ3VsYXJpemUg
PSBmdW5jdGlvbiAoKSB7Ci0gICAgICByZXR1cm4gKDAsIF9lbWJlckluZmxlY3RvckxpYlN5c3Rl
bVN0cmluZy5zaW5ndWxhcml6ZSkodGhpcyk7Ci0gICAgfTsKLSAgfQotfSk7Ci1kZWZpbmUoJ2Vt
YmVyLWluZmxlY3Rvci9saWIvaGVscGVycy9wbHVyYWxpemUnLCBbJ2V4cG9ydHMnLCAnZW1iZXIt
aW5mbGVjdG9yJywgJ2VtYmVyLWluZmxlY3Rvci9saWIvdXRpbHMvbWFrZS1oZWxwZXInXSwgZnVu
Y3Rpb24gKGV4cG9ydHMsIF9lbWJlckluZmxlY3RvciwgX2VtYmVySW5mbGVjdG9yTGliVXRpbHNN
YWtlSGVscGVyKSB7Ci0gICd1c2Ugc3RyaWN0JzsKLQotICAvKioKLSAgICoKLSAgICogSWYgeW91
IGhhdmUgRW1iZXIgSW5mbGVjdG9yIChzdWNoIGFzIGlmIEVtYmVyIERhdGEgaXMgcHJlc2VudCks
Ci0gICAqIHBsdXJhbGl6ZSBhIHdvcmQuIEZvciBleGFtcGxlLCB0dXJuICJveCIgaW50byAib3hl
biIuCi0gICAqCi0gICAqIEV4YW1wbGU6Ci0gICAqCi0gICAqIHt7cGx1cmFsaXplIGNvdW50IG15
UHJvcGVydHl9fQotICAgKiB7e3BsdXJhbGl6ZSAxICJveGVuIn19Ci0gICAqIHt7cGx1cmFsaXpl
IG15UHJvcGVydHl9fQotICAgKiB7e3BsdXJhbGl6ZSAib3gifX0KLSAgICoKLSAgICogQGZvciBF
bWJlci5IVE1MQmFycy5oZWxwZXJzCi0gICAqIEBtZXRob2QgcGx1cmFsaXplCi0gICAqIEBwYXJh
bSB7TnVtYmVyfFByb3BlcnR5fSBbY291bnRdIGNvdW50IG9mIG9iamVjdHMKLSAgICogQHBhcmFt
IHtTdHJpbmd8UHJvcGVydHl9IHdvcmQgd29yZCB0byBwbHVyYWxpemUKLSAgKi8KLSAgZXhwb3J0
c1snZGVmYXVsdCddID0gKDAsIF9lbWJlckluZmxlY3RvckxpYlV0aWxzTWFrZUhlbHBlclsnZGVm
YXVsdCddKShmdW5jdGlvbiAocGFyYW1zKSB7Ci0gICAgdmFyIGNvdW50ID0gdW5kZWZpbmVkLAot
ICAgICAgICB3b3JkID0gdW5kZWZpbmVkOwotCi0gICAgaWYgKHBhcmFtcy5sZW5ndGggPT09IDEp
IHsKLSAgICAgIHdvcmQgPSBwYXJhbXNbMF07Ci0gICAgICByZXR1cm4gKDAsIF9lbWJlckluZmxl
Y3Rvci5wbHVyYWxpemUpKHdvcmQpOwotICAgIH0gZWxzZSB7Ci0gICAgICBjb3VudCA9IHBhcmFt
c1swXTsKLSAgICAgIHdvcmQgPSBwYXJhbXNbMV07Ci0KLSAgICAgIGlmIChwYXJzZUZsb2F0KGNv
dW50KSAhPT0gMSkgewotICAgICAgICB3b3JkID0gKDAsIF9lbWJlckluZmxlY3Rvci5wbHVyYWxp
emUpKHdvcmQpOwotICAgICAgfQotCi0gICAgICByZXR1cm4gY291bnQgKyAiICIgKyB3b3JkOwot
ICAgIH0KLSAgfSk7Ci19KTsKLWRlZmluZSgnZW1iZXItaW5mbGVjdG9yL2xpYi9oZWxwZXJzL3Np
bmd1bGFyaXplJywgWydleHBvcnRzJywgJ2VtYmVyLWluZmxlY3RvcicsICdlbWJlci1pbmZsZWN0
b3IvbGliL3V0aWxzL21ha2UtaGVscGVyJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJJbmZs
ZWN0b3IsIF9lbWJlckluZmxlY3RvckxpYlV0aWxzTWFrZUhlbHBlcikgewotICAndXNlIHN0cmlj
dCc7Ci0KLSAgLyoqCi0gICAqCi0gICAqIElmIHlvdSBoYXZlIEVtYmVyIEluZmxlY3RvciAoc3Vj
aCBhcyBpZiBFbWJlciBEYXRhIGlzIHByZXNlbnQpLAotICAgKiBzaW5ndWxhcml6ZSBhIHdvcmQu
IEZvciBleGFtcGxlLCB0dXJuICJveGVuIiBpbnRvICJveCIuCi0gICAqCi0gICAqIEV4YW1wbGU6
Ci0gICAqCi0gICAqIHt7c2luZ3VsYXJpemUgbXlQcm9wZXJ0eX19Ci0gICAqIHt7c2luZ3VsYXJp
emUgIm94ZW4ifX0KLSAgICoKLSAgICogQGZvciBFbWJlci5IVE1MQmFycy5oZWxwZXJzCi0gICAq
IEBtZXRob2Qgc2luZ3VsYXJpemUKLSAgICogQHBhcmFtIHtTdHJpbmd8UHJvcGVydHl9IHdvcmQg
d29yZCB0byBzaW5ndWxhcml6ZQotICAqLwotICBleHBvcnRzWydkZWZhdWx0J10gPSAoMCwgX2Vt
YmVySW5mbGVjdG9yTGliVXRpbHNNYWtlSGVscGVyWydkZWZhdWx0J10pKGZ1bmN0aW9uIChwYXJh
bXMpIHsKLSAgICByZXR1cm4gKDAsIF9lbWJlckluZmxlY3Rvci5zaW5ndWxhcml6ZSkocGFyYW1z
WzBdKTsKLSAgfSk7Ci19KTsKLWRlZmluZSgiZW1iZXItaW5mbGVjdG9yL2xpYi9zeXN0ZW0iLCBb
ImV4cG9ydHMiLCAiZW1iZXItaW5mbGVjdG9yL2xpYi9zeXN0ZW0vaW5mbGVjdG9yIiwgImVtYmVy
LWluZmxlY3Rvci9saWIvc3lzdGVtL3N0cmluZyIsICJlbWJlci1pbmZsZWN0b3IvbGliL3N5c3Rl
bS9pbmZsZWN0aW9ucyJdLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVySW5mbGVjdG9yTGliU3lz
dGVtSW5mbGVjdG9yLCBfZW1iZXJJbmZsZWN0b3JMaWJTeXN0ZW1TdHJpbmcsIF9lbWJlckluZmxl
Y3RvckxpYlN5c3RlbUluZmxlY3Rpb25zKSB7Ci0gICJ1c2Ugc3RyaWN0IjsKLQotICBfZW1iZXJJ
bmZsZWN0b3JMaWJTeXN0ZW1JbmZsZWN0b3JbImRlZmF1bHQiXS5pbmZsZWN0b3IgPSBuZXcgX2Vt
YmVySW5mbGVjdG9yTGliU3lzdGVtSW5mbGVjdG9yWyJkZWZhdWx0Il0oX2VtYmVySW5mbGVjdG9y
TGliU3lzdGVtSW5mbGVjdGlvbnNbImRlZmF1bHQiXSk7Ci0KLSAgZXhwb3J0cy5JbmZsZWN0b3Ig
PSBfZW1iZXJJbmZsZWN0b3JMaWJTeXN0ZW1JbmZsZWN0b3JbImRlZmF1bHQiXTsKLSAgZXhwb3J0
cy5zaW5ndWxhcml6ZSA9IF9lbWJlckluZmxlY3RvckxpYlN5c3RlbVN0cmluZy5zaW5ndWxhcml6
ZTsKLSAgZXhwb3J0cy5wbHVyYWxpemUgPSBfZW1iZXJJbmZsZWN0b3JMaWJTeXN0ZW1TdHJpbmcu
cGx1cmFsaXplOwotICBleHBvcnRzLmRlZmF1bHRSdWxlcyA9IF9lbWJlckluZmxlY3RvckxpYlN5
c3RlbUluZmxlY3Rpb25zWyJkZWZhdWx0Il07Ci19KTsKLWRlZmluZSgnZW1iZXItaW5mbGVjdG9y
L2xpYi9zeXN0ZW0vaW5mbGVjdGlvbnMnLCBbJ2V4cG9ydHMnXSwgZnVuY3Rpb24gKGV4cG9ydHMp
IHsKLSAgJ3VzZSBzdHJpY3QnOwotCi0gIGV4cG9ydHNbJ2RlZmF1bHQnXSA9IHsKLSAgICBwbHVy
YWxzOiBbWy8kLywgJ3MnXSwgWy9zJC9pLCAncyddLCBbL14oYXh8dGVzdClpcyQvaSwgJyQxZXMn
XSwgWy8ob2N0b3B8dmlyKXVzJC9pLCAnJDFpJ10sIFsvKG9jdG9wfHZpcilpJC9pLCAnJDFpJ10s
IFsvKGFsaWFzfHN0YXR1cykkL2ksICckMWVzJ10sIFsvKGJ1KXMkL2ksICckMXNlcyddLCBbLyhi
dWZmYWx8dG9tYXQpbyQvaSwgJyQxb2VzJ10sIFsvKFt0aV0pdW0kL2ksICckMWEnXSwgWy8oW3Rp
XSlhJC9pLCAnJDFhJ10sIFsvc2lzJC9pLCAnc2VzJ10sIFsvKD86KFteZl0pZmV8KFtscl0pZikk
L2ksICckMSQydmVzJ10sIFsvKGhpdmUpJC9pLCAnJDFzJ10sIFsvKFteYWVpb3V5XXxxdSl5JC9p
LCAnJDFpZXMnXSwgWy8oeHxjaHxzc3xzaCkkL2ksICckMWVzJ10sIFsvKG1hdHJ8dmVydHxpbmQp
KD86aXh8ZXgpJC9pLCAnJDFpY2VzJ10sIFsvXihtfGwpb3VzZSQvaSwgJyQxaWNlJ10sIFsvXiht
fGwpaWNlJC9pLCAnJDFpY2UnXSwgWy9eKG94KSQvaSwgJyQxZW4nXSwgWy9eKG94ZW4pJC9pLCAn
JDEnXSwgWy8ocXVpeikkL2ksICckMXplcyddXSwKLQotICAgIHNpbmd1bGFyOiBbWy9zJC9pLCAn
J10sIFsvKHNzKSQvaSwgJyQxJ10sIFsvKG4pZXdzJC9pLCAnJDFld3MnXSwgWy8oW3RpXSlhJC9p
LCAnJDF1bSddLCBbLygoYSluYWx5fChiKWF8KGQpaWFnbm98KHApYXJlbnRoZXwocClyb2dub3wo
cyl5bm9wfCh0KWhlKShzaXN8c2VzKSQvaSwgJyQxc2lzJ10sIFsvKF5hbmFseSkoc2lzfHNlcykk
L2ksICckMXNpcyddLCBbLyhbXmZdKXZlcyQvaSwgJyQxZmUnXSwgWy8oaGl2ZSlzJC9pLCAnJDEn
XSwgWy8odGl2ZSlzJC9pLCAnJDEnXSwgWy8oW2xyXSl2ZXMkL2ksICckMWYnXSwgWy8oW15hZWlv
dXldfHF1KWllcyQvaSwgJyQxeSddLCBbLyhzKWVyaWVzJC9pLCAnJDFlcmllcyddLCBbLyhtKW92
aWVzJC9pLCAnJDFvdmllJ10sIFsvKHh8Y2h8c3N8c2gpZXMkL2ksICckMSddLCBbL14obXxsKWlj
ZSQvaSwgJyQxb3VzZSddLCBbLyhidXMpKGVzKT8kL2ksICckMSddLCBbLyhvKWVzJC9pLCAnJDEn
XSwgWy8oc2hvZSlzJC9pLCAnJDEnXSwgWy8oY3Jpc3x0ZXN0KShpc3xlcykkL2ksICckMWlzJ10s
IFsvXihhKXhbaWVdcyQvaSwgJyQxeGlzJ10sIFsvKG9jdG9wfHZpcikodXN8aSkkL2ksICckMXVz
J10sIFsvKGFsaWFzfHN0YXR1cykoZXMpPyQvaSwgJyQxJ10sIFsvXihveCllbi9pLCAnJDEnXSwg
Wy8odmVydHxpbmQpaWNlcyQvaSwgJyQxZXgnXSwgWy8obWF0cilpY2VzJC9pLCAnJDFpeCddLCBb
LyhxdWl6KXplcyQvaSwgJyQxJ10sIFsvKGRhdGFiYXNlKXMkL2ksICckMSddXSwKLQotICAgIGly
cmVndWxhclBhaXJzOiBbWydwZXJzb24nLCAncGVvcGxlJ10sIFsnbWFuJywgJ21lbiddLCBbJ2No
aWxkJywgJ2NoaWxkcmVuJ10sIFsnc2V4JywgJ3NleGVzJ10sIFsnbW92ZScsICdtb3ZlcyddLCBb
J2NvdycsICdraW5lJ10sIFsnem9tYmllJywgJ3pvbWJpZXMnXV0sCi0KLSAgICB1bmNvdW50YWJs
ZTogWydlcXVpcG1lbnQnLCAnaW5mb3JtYXRpb24nLCAncmljZScsICdtb25leScsICdzcGVjaWVz
JywgJ3NlcmllcycsICdmaXNoJywgJ3NoZWVwJywgJ2plYW5zJywgJ3BvbGljZSddCi0gIH07Ci19
KTsKLWRlZmluZSgnZW1iZXItaW5mbGVjdG9yL2xpYi9zeXN0ZW0vaW5mbGVjdG9yJywgWydleHBv
cnRzJywgJ2VtYmVyJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXIpIHsKLSAgJ3VzZSBzdHJp
Y3QnOwotCi0gIHZhciBjYXBpdGFsaXplID0gX2VtYmVyWydkZWZhdWx0J10uU3RyaW5nLmNhcGl0
YWxpemU7Ci0KLSAgdmFyIEJMQU5LX1JFR0VYID0gL15ccyokLzsKLSAgdmFyIExBU1RfV09SRF9E
QVNIRURfUkVHRVggPSAvKFtcdy8tXStbXy9ccy1dKShbYS16XGRdKyQpLzsKLSAgdmFyIExBU1Rf
V09SRF9DQU1FTElaRURfUkVHRVggPSAvKFtcdy9ccy1dKykoW0EtWl1bYS16XGRdKiQpLzsKLSAg
dmFyIENBTUVMSVpFRF9SRUdFWCA9IC9bQS1aXVthLXpcZF0qJC87Ci0KLSAgZnVuY3Rpb24gbG9h
ZFVuY291bnRhYmxlKHJ1bGVzLCB1bmNvdW50YWJsZSkgewotICAgIGZvciAodmFyIGkgPSAwLCBs
ZW5ndGggPSB1bmNvdW50YWJsZS5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgcnVs
ZXMudW5jb3VudGFibGVbdW5jb3VudGFibGVbaV0udG9Mb3dlckNhc2UoKV0gPSB0cnVlOwotICAg
IH0KLSAgfQotCi0gIGZ1bmN0aW9uIGxvYWRJcnJlZ3VsYXIocnVsZXMsIGlycmVndWxhclBhaXJz
KSB7Ci0gICAgdmFyIHBhaXI7Ci0KLSAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gaXJyZWd1
bGFyUGFpcnMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgIHBhaXIgPSBpcnJlZ3Vs
YXJQYWlyc1tpXTsKLQotICAgICAgLy9wbHVyYWxpemluZwotICAgICAgcnVsZXMuaXJyZWd1bGFy
W3BhaXJbMF0udG9Mb3dlckNhc2UoKV0gPSBwYWlyWzFdOwotICAgICAgcnVsZXMuaXJyZWd1bGFy
W3BhaXJbMV0udG9Mb3dlckNhc2UoKV0gPSBwYWlyWzFdOwotCi0gICAgICAvL3Npbmd1bGFyaXpp
bmcKLSAgICAgIHJ1bGVzLmlycmVndWxhckludmVyc2VbcGFpclsxXS50b0xvd2VyQ2FzZSgpXSA9
IHBhaXJbMF07Ci0gICAgICBydWxlcy5pcnJlZ3VsYXJJbnZlcnNlW3BhaXJbMF0udG9Mb3dlckNh
c2UoKV0gPSBwYWlyWzBdOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgIEluZmxlY3Rvci5FbWJl
ciBwcm92aWRlcyBhIG1lY2hhbmlzbSBmb3Igc3VwcGx5aW5nIGluZmxlY3Rpb24gcnVsZXMgZm9y
IHlvdXIKLSAgICBhcHBsaWNhdGlvbi4gRW1iZXIgaW5jbHVkZXMgYSBkZWZhdWx0IHNldCBvZiBp
bmZsZWN0aW9uIHJ1bGVzLCBhbmQgcHJvdmlkZXMgYW4KLSAgICBBUEkgZm9yIHByb3ZpZGluZyBh
ZGRpdGlvbmFsIHJ1bGVzLgotICAKLSAgICBFeGFtcGxlczoKLSAgCi0gICAgQ3JlYXRpbmcgYW4g
aW5mbGVjdG9yIHdpdGggbm8gcnVsZXMuCi0gIAotICAgIGBgYGpzCi0gICAgdmFyIGluZmxlY3Rv
ciA9IG5ldyBFbWJlci5JbmZsZWN0b3IoKTsKLSAgICBgYGAKLSAgCi0gICAgQ3JlYXRpbmcgYW4g
aW5mbGVjdG9yIHdpdGggdGhlIGRlZmF1bHQgZW1iZXIgcnVsZXNldC4KLSAgCi0gICAgYGBganMK
LSAgICB2YXIgaW5mbGVjdG9yID0gbmV3IEVtYmVyLkluZmxlY3RvcihFbWJlci5JbmZsZWN0b3Iu
ZGVmYXVsdFJ1bGVzKTsKLSAgCi0gICAgaW5mbGVjdG9yLnBsdXJhbGl6ZSgnY293Jyk7IC8vPT4g
J2tpbmUnCi0gICAgaW5mbGVjdG9yLnNpbmd1bGFyaXplKCdraW5lJyk7IC8vPT4gJ2NvdycKLSAg
ICBgYGAKLSAgCi0gICAgQ3JlYXRpbmcgYW4gaW5mbGVjdG9yIGFuZCBhZGRpbmcgcnVsZXMgbGF0
ZXIuCi0gIAotICAgIGBgYGphdmFzY3JpcHQKLSAgICB2YXIgaW5mbGVjdG9yID0gRW1iZXIuSW5m
bGVjdG9yLmluZmxlY3RvcjsKLSAgCi0gICAgaW5mbGVjdG9yLnBsdXJhbGl6ZSgnYWR2aWNlJyk7
IC8vID0+ICdhZHZpY2VzJwotICAgIGluZmxlY3Rvci51bmNvdW50YWJsZSgnYWR2aWNlJyk7Ci0g
ICAgaW5mbGVjdG9yLnBsdXJhbGl6ZSgnYWR2aWNlJyk7IC8vID0+ICdhZHZpY2UnCi0gIAotICAg
IGluZmxlY3Rvci5wbHVyYWxpemUoJ2Zvcm11bGEnKTsgLy8gPT4gJ2Zvcm11bGFzJwotICAgIGlu
ZmxlY3Rvci5pcnJlZ3VsYXIoJ2Zvcm11bGEnLCAnZm9ybXVsYWUnKTsKLSAgICBpbmZsZWN0b3Iu
cGx1cmFsaXplKCdmb3JtdWxhJyk7IC8vID0+ICdmb3JtdWxhZScKLSAgCi0gICAgLy8geW91IHdv
dWxkIG5vdCBuZWVkIHRvIGFkZCB0aGVzZSBhcyB0aGV5IGFyZSB0aGUgZGVmYXVsdCBydWxlcwot
ICAgIGluZmxlY3Rvci5wbHVyYWwoLyQvLCAncycpOwotICAgIGluZmxlY3Rvci5zaW5ndWxhcigv
cyQvaSwgJycpOwotICAgIGBgYAotICAKLSAgICBDcmVhdGluZyBhbiBpbmZsZWN0b3Igd2l0aCBh
IG5vbmRlZmF1bHQgcnVsZXNldC4KLSAgCi0gICAgYGBgamF2YXNjcmlwdAotICAgIHZhciBydWxl
cyA9IHsKLSAgICAgIHBsdXJhbHM6ICBbIC8kLywgJ3MnIF0sCi0gICAgICBzaW5ndWxhcjogWyAv
XHMkLywgJycgXSwKLSAgICAgIGlycmVndWxhclBhaXJzOiBbCi0gICAgICAgIFsgJ2NvdycsICdr
aW5lJyBdCi0gICAgICBdLAotICAgICAgdW5jb3VudGFibGU6IFsgJ2Zpc2gnIF0KLSAgICB9Owot
ICAKLSAgICB2YXIgaW5mbGVjdG9yID0gbmV3IEVtYmVyLkluZmxlY3RvcihydWxlcyk7Ci0gICAg
YGBgCi0gIAotICAgIEBjbGFzcyBJbmZsZWN0b3IKLSAgICBAbmFtZXNwYWNlIEVtYmVyCi0gICov
Ci0gIGZ1bmN0aW9uIEluZmxlY3RvcihydWxlU2V0KSB7Ci0gICAgcnVsZVNldCA9IHJ1bGVTZXQg
fHwge307Ci0gICAgcnVsZVNldC51bmNvdW50YWJsZSA9IHJ1bGVTZXQudW5jb3VudGFibGUgfHwg
bWFrZURpY3Rpb25hcnkoKTsKLSAgICBydWxlU2V0LmlycmVndWxhclBhaXJzID0gcnVsZVNldC5p
cnJlZ3VsYXJQYWlycyB8fCBtYWtlRGljdGlvbmFyeSgpOwotCi0gICAgdmFyIHJ1bGVzID0gdGhp
cy5ydWxlcyA9IHsKLSAgICAgIHBsdXJhbHM6IHJ1bGVTZXQucGx1cmFscyB8fCBbXSwKLSAgICAg
IHNpbmd1bGFyOiBydWxlU2V0LnNpbmd1bGFyIHx8IFtdLAotICAgICAgaXJyZWd1bGFyOiBtYWtl
RGljdGlvbmFyeSgpLAotICAgICAgaXJyZWd1bGFySW52ZXJzZTogbWFrZURpY3Rpb25hcnkoKSwK
LSAgICAgIHVuY291bnRhYmxlOiBtYWtlRGljdGlvbmFyeSgpCi0gICAgfTsKLQotICAgIGxvYWRV
bmNvdW50YWJsZShydWxlcywgcnVsZVNldC51bmNvdW50YWJsZSk7Ci0gICAgbG9hZElycmVndWxh
cihydWxlcywgcnVsZVNldC5pcnJlZ3VsYXJQYWlycyk7Ci0KLSAgICB0aGlzLmVuYWJsZUNhY2hl
KCk7Ci0gIH0KLQotICBpZiAoIU9iamVjdC5jcmVhdGUgJiYgIU9iamVjdC5jcmVhdGUobnVsbCku
aGFzT3duUHJvcGVydHkpIHsKLSAgICB0aHJvdyBuZXcgRXJyb3IoIlRoaXMgYnJvd3NlciBkb2Vz
IG5vdCBzdXBwb3J0IE9iamVjdC5jcmVhdGUobnVsbCksIHBsZWFzZSBwb2x5ZmlsIHdpdGggZXM1
LXNoYW06IGh0dHA6Ly9naXQuaW8veUJVMnJnIik7Ci0gIH0KLQotICBmdW5jdGlvbiBtYWtlRGlj
dGlvbmFyeSgpIHsKLSAgICB2YXIgY2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpOwotICAgIGNh
Y2hlWydfZGljdCddID0gbnVsbDsKLSAgICBkZWxldGUgY2FjaGVbJ19kaWN0J107Ci0gICAgcmV0
dXJuIGNhY2hlOwotICB9Ci0KLSAgSW5mbGVjdG9yLnByb3RvdHlwZSA9IHsKLSAgICAvKioKLSAg
ICAgIEBwdWJsaWMKLSAgICAgICBBcyBpbmZsZWN0aW9ucyBjYW4gYmUgY29zdGx5LCBhbmQgY29t
bW9ubHkgdGhlIHNhbWUgc3Vic2V0IG9mIHdvcmRzIGFyZSByZXBlYXRlZGx5Ci0gICAgICBpbmZs
ZWN0ZWQgYW4gb3B0aW9uYWwgY2FjaGUgaXMgcHJvdmlkZWQuCi0gICAgICAgQG1ldGhvZCBlbmFi
bGVDYWNoZQotICAgICovCi0gICAgZW5hYmxlQ2FjaGU6IGZ1bmN0aW9uIGVuYWJsZUNhY2hlKCkg
ewotICAgICAgdGhpcy5wdXJnZUNhY2hlKCk7Ci0KLSAgICAgIHRoaXMuc2luZ3VsYXJpemUgPSBm
dW5jdGlvbiAod29yZCkgewotICAgICAgICB0aGlzLl9jYWNoZVVzZWQgPSB0cnVlOwotICAgICAg
ICByZXR1cm4gdGhpcy5fc0NhY2hlW3dvcmRdIHx8ICh0aGlzLl9zQ2FjaGVbd29yZF0gPSB0aGlz
Ll9zaW5ndWxhcml6ZSh3b3JkKSk7Ci0gICAgICB9OwotCi0gICAgICB0aGlzLnBsdXJhbGl6ZSA9
IGZ1bmN0aW9uICh3b3JkKSB7Ci0gICAgICAgIHRoaXMuX2NhY2hlVXNlZCA9IHRydWU7Ci0gICAg
ICAgIHJldHVybiB0aGlzLl9wQ2FjaGVbd29yZF0gfHwgKHRoaXMuX3BDYWNoZVt3b3JkXSA9IHRo
aXMuX3BsdXJhbGl6ZSh3b3JkKSk7Ci0gICAgICB9OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAg
IEBwdWJsaWMKLSAgICAgICBAbWV0aG9kIHB1cmdlZENhY2hlCi0gICAgKi8KLSAgICBwdXJnZUNh
Y2hlOiBmdW5jdGlvbiBwdXJnZUNhY2hlKCkgewotICAgICAgdGhpcy5fY2FjaGVVc2VkID0gZmFs
c2U7Ci0gICAgICB0aGlzLl9zQ2FjaGUgPSBtYWtlRGljdGlvbmFyeSgpOwotICAgICAgdGhpcy5f
cENhY2hlID0gbWFrZURpY3Rpb25hcnkoKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICBAcHVi
bGljCi0gICAgICBkaXNhYmxlIGNhY2hpbmcKLSAgICAgICBAbWV0aG9kIGRpc2FibGVDYWNoZTsK
LSAgICAqLwotICAgIGRpc2FibGVDYWNoZTogZnVuY3Rpb24gZGlzYWJsZUNhY2hlKCkgewotICAg
ICAgdGhpcy5fc0NhY2hlID0gbnVsbDsKLSAgICAgIHRoaXMuX3BDYWNoZSA9IG51bGw7Ci0gICAg
ICB0aGlzLnNpbmd1bGFyaXplID0gZnVuY3Rpb24gKHdvcmQpIHsKLSAgICAgICAgcmV0dXJuIHRo
aXMuX3Npbmd1bGFyaXplKHdvcmQpOwotICAgICAgfTsKLQotICAgICAgdGhpcy5wbHVyYWxpemUg
PSBmdW5jdGlvbiAod29yZCkgewotICAgICAgICByZXR1cm4gdGhpcy5fcGx1cmFsaXplKHdvcmQp
OwotICAgICAgfTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICBAbWV0aG9kIHBsdXJhbAotICAg
ICAgQHBhcmFtIHtSZWdFeHB9IHJlZ2V4Ci0gICAgICBAcGFyYW0ge1N0cmluZ30gc3RyaW5nCi0g
ICAgKi8KLSAgICBwbHVyYWw6IGZ1bmN0aW9uIHBsdXJhbChyZWdleCwgc3RyaW5nKSB7Ci0gICAg
ICBpZiAodGhpcy5fY2FjaGVVc2VkKSB7Ci0gICAgICAgIHRoaXMucHVyZ2VDYWNoZSgpOwotICAg
ICAgfQotICAgICAgdGhpcy5ydWxlcy5wbHVyYWxzLnB1c2goW3JlZ2V4LCBzdHJpbmcudG9Mb3dl
ckNhc2UoKV0pOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgIEBtZXRob2Qgc2luZ3VsYXIKLSAg
ICAgIEBwYXJhbSB7UmVnRXhwfSByZWdleAotICAgICAgQHBhcmFtIHtTdHJpbmd9IHN0cmluZwot
ICAgICovCi0gICAgc2luZ3VsYXI6IGZ1bmN0aW9uIHNpbmd1bGFyKHJlZ2V4LCBzdHJpbmcpIHsK
LSAgICAgIGlmICh0aGlzLl9jYWNoZVVzZWQpIHsKLSAgICAgICAgdGhpcy5wdXJnZUNhY2hlKCk7
Ci0gICAgICB9Ci0gICAgICB0aGlzLnJ1bGVzLnNpbmd1bGFyLnB1c2goW3JlZ2V4LCBzdHJpbmcu
dG9Mb3dlckNhc2UoKV0pOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgIEBtZXRob2QgdW5jb3Vu
dGFibGUKLSAgICAgIEBwYXJhbSB7U3RyaW5nfSByZWdleAotICAgICovCi0gICAgdW5jb3VudGFi
bGU6IGZ1bmN0aW9uIHVuY291bnRhYmxlKHN0cmluZykgewotICAgICAgaWYgKHRoaXMuX2NhY2hl
VXNlZCkgewotICAgICAgICB0aGlzLnB1cmdlQ2FjaGUoKTsKLSAgICAgIH0KLSAgICAgIGxvYWRV
bmNvdW50YWJsZSh0aGlzLnJ1bGVzLCBbc3RyaW5nLnRvTG93ZXJDYXNlKCldKTsKLSAgICB9LAot
Ci0gICAgLyoqCi0gICAgICBAbWV0aG9kIGlycmVndWxhcgotICAgICAgQHBhcmFtIHtTdHJpbmd9
IHNpbmd1bGFyCi0gICAgICBAcGFyYW0ge1N0cmluZ30gcGx1cmFsCi0gICAgKi8KLSAgICBpcnJl
Z3VsYXI6IGZ1bmN0aW9uIGlycmVndWxhcihzaW5ndWxhciwgcGx1cmFsKSB7Ci0gICAgICBpZiAo
dGhpcy5fY2FjaGVVc2VkKSB7Ci0gICAgICAgIHRoaXMucHVyZ2VDYWNoZSgpOwotICAgICAgfQot
ICAgICAgbG9hZElycmVndWxhcih0aGlzLnJ1bGVzLCBbW3Npbmd1bGFyLCBwbHVyYWxdXSk7Ci0g
ICAgfSwKLQotICAgIC8qKgotICAgICAgQG1ldGhvZCBwbHVyYWxpemUKLSAgICAgIEBwYXJhbSB7
U3RyaW5nfSB3b3JkCi0gICAgKi8KLSAgICBwbHVyYWxpemU6IGZ1bmN0aW9uIHBsdXJhbGl6ZSh3
b3JkKSB7Ci0gICAgICByZXR1cm4gdGhpcy5fcGx1cmFsaXplKHdvcmQpOwotICAgIH0sCi0KLSAg
ICBfcGx1cmFsaXplOiBmdW5jdGlvbiBfcGx1cmFsaXplKHdvcmQpIHsKLSAgICAgIHJldHVybiB0
aGlzLmluZmxlY3Qod29yZCwgdGhpcy5ydWxlcy5wbHVyYWxzLCB0aGlzLnJ1bGVzLmlycmVndWxh
cik7Ci0gICAgfSwKLSAgICAvKioKLSAgICAgIEBtZXRob2Qgc2luZ3VsYXJpemUKLSAgICAgIEBw
YXJhbSB7U3RyaW5nfSB3b3JkCi0gICAgKi8KLSAgICBzaW5ndWxhcml6ZTogZnVuY3Rpb24gc2lu
Z3VsYXJpemUod29yZCkgewotICAgICAgcmV0dXJuIHRoaXMuX3Npbmd1bGFyaXplKHdvcmQpOwot
ICAgIH0sCi0KLSAgICBfc2luZ3VsYXJpemU6IGZ1bmN0aW9uIF9zaW5ndWxhcml6ZSh3b3JkKSB7
Ci0gICAgICByZXR1cm4gdGhpcy5pbmZsZWN0KHdvcmQsIHRoaXMucnVsZXMuc2luZ3VsYXIsIHRo
aXMucnVsZXMuaXJyZWd1bGFySW52ZXJzZSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAgQHBy
b3RlY3RlZAotICAgICAgIEBtZXRob2QgaW5mbGVjdAotICAgICAgQHBhcmFtIHtTdHJpbmd9IHdv
cmQKLSAgICAgIEBwYXJhbSB7T2JqZWN0fSB0eXBlUnVsZXMKLSAgICAgIEBwYXJhbSB7T2JqZWN0
fSBpcnJlZ3VsYXIKLSAgICAqLwotICAgIGluZmxlY3Q6IGZ1bmN0aW9uIGluZmxlY3Qod29yZCwg
dHlwZVJ1bGVzLCBpcnJlZ3VsYXIpIHsKLSAgICAgIHZhciBpbmZsZWN0aW9uLCBzdWJzdGl0dXRp
b24sIHJlc3VsdCwgbG93ZXJjYXNlLCB3b3JkU3BsaXQsIGZpcnN0UGhyYXNlLCBsYXN0V29yZCwg
aXNCbGFuaywgaXNDYW1lbGl6ZWQsIHJ1bGUsIGlzVW5jb3VudGFibGU7Ci0KLSAgICAgIGlzQmxh
bmsgPSAhd29yZCB8fCBCTEFOS19SRUdFWC50ZXN0KHdvcmQpOwotCi0gICAgICBpc0NhbWVsaXpl
ZCA9IENBTUVMSVpFRF9SRUdFWC50ZXN0KHdvcmQpOwotICAgICAgZmlyc3RQaHJhc2UgPSAiIjsK
LQotICAgICAgaWYgKGlzQmxhbmspIHsKLSAgICAgICAgcmV0dXJuIHdvcmQ7Ci0gICAgICB9Ci0K
LSAgICAgIGxvd2VyY2FzZSA9IHdvcmQudG9Mb3dlckNhc2UoKTsKLSAgICAgIHdvcmRTcGxpdCA9
IExBU1RfV09SRF9EQVNIRURfUkVHRVguZXhlYyh3b3JkKSB8fCBMQVNUX1dPUkRfQ0FNRUxJWkVE
X1JFR0VYLmV4ZWMod29yZCk7Ci0KLSAgICAgIGlmICh3b3JkU3BsaXQpIHsKLSAgICAgICAgZmly
c3RQaHJhc2UgPSB3b3JkU3BsaXRbMV07Ci0gICAgICAgIGxhc3RXb3JkID0gd29yZFNwbGl0WzJd
LnRvTG93ZXJDYXNlKCk7Ci0gICAgICB9Ci0KLSAgICAgIGlzVW5jb3VudGFibGUgPSB0aGlzLnJ1
bGVzLnVuY291bnRhYmxlW2xvd2VyY2FzZV0gfHwgdGhpcy5ydWxlcy51bmNvdW50YWJsZVtsYXN0
V29yZF07Ci0KLSAgICAgIGlmIChpc1VuY291bnRhYmxlKSB7Ci0gICAgICAgIHJldHVybiB3b3Jk
OwotICAgICAgfQotCi0gICAgICBmb3IgKHJ1bGUgaW4gdGhpcy5ydWxlcy5pcnJlZ3VsYXIpIHsK
LSAgICAgICAgaWYgKGxvd2VyY2FzZS5tYXRjaChydWxlICsgIiQiKSkgewotICAgICAgICAgIHN1
YnN0aXR1dGlvbiA9IGlycmVndWxhcltydWxlXTsKLQotICAgICAgICAgIGlmIChpc0NhbWVsaXpl
ZCAmJiBpcnJlZ3VsYXJbbGFzdFdvcmRdKSB7Ci0gICAgICAgICAgICBzdWJzdGl0dXRpb24gPSBj
YXBpdGFsaXplKHN1YnN0aXR1dGlvbik7Ci0gICAgICAgICAgICBydWxlID0gY2FwaXRhbGl6ZShy
dWxlKTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICByZXR1cm4gd29yZC5yZXBsYWNlKHJ1bGUs
IHN1YnN0aXR1dGlvbik7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgZm9yICh2YXIgaSA9
IHR5cGVSdWxlcy5sZW5ndGgsIG1pbiA9IDA7IGkgPiBtaW47IGktLSkgewotICAgICAgICBpbmZs
ZWN0aW9uID0gdHlwZVJ1bGVzW2kgLSAxXTsKLSAgICAgICAgcnVsZSA9IGluZmxlY3Rpb25bMF07
Ci0KLSAgICAgICAgaWYgKHJ1bGUudGVzdCh3b3JkKSkgewotICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGluZmxlY3Rpb24gPSBpbmZsZWN0aW9uIHx8IFtdOwot
Ci0gICAgICBydWxlID0gaW5mbGVjdGlvblswXTsKLSAgICAgIHN1YnN0aXR1dGlvbiA9IGluZmxl
Y3Rpb25bMV07Ci0KLSAgICAgIHJlc3VsdCA9IHdvcmQucmVwbGFjZShydWxlLCBzdWJzdGl0dXRp
b24pOwotCi0gICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgfTsKLQotICBleHBvcnRzWydk
ZWZhdWx0J10gPSBJbmZsZWN0b3I7Ci19KTsKLWRlZmluZSgnZW1iZXItaW5mbGVjdG9yL2xpYi9z
eXN0ZW0vc3RyaW5nJywgWydleHBvcnRzJywgJ2VtYmVyLWluZmxlY3Rvci9saWIvc3lzdGVtL2lu
ZmxlY3RvciddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVySW5mbGVjdG9yTGliU3lzdGVtSW5m
bGVjdG9yKSB7Ci0gICd1c2Ugc3RyaWN0JzsKLQotICBmdW5jdGlvbiBwbHVyYWxpemUod29yZCkg
ewotICAgIHJldHVybiBfZW1iZXJJbmZsZWN0b3JMaWJTeXN0ZW1JbmZsZWN0b3JbJ2RlZmF1bHQn
XS5pbmZsZWN0b3IucGx1cmFsaXplKHdvcmQpOwotICB9Ci0KLSAgZnVuY3Rpb24gc2luZ3VsYXJp
emUod29yZCkgewotICAgIHJldHVybiBfZW1iZXJJbmZsZWN0b3JMaWJTeXN0ZW1JbmZsZWN0b3Jb
J2RlZmF1bHQnXS5pbmZsZWN0b3Iuc2luZ3VsYXJpemUod29yZCk7Ci0gIH0KLQotICBleHBvcnRz
LnBsdXJhbGl6ZSA9IHBsdXJhbGl6ZTsKLSAgZXhwb3J0cy5zaW5ndWxhcml6ZSA9IHNpbmd1bGFy
aXplOwotfSk7Ci1kZWZpbmUoJ2VtYmVyLWluZmxlY3Rvci9saWIvdXRpbHMvbWFrZS1oZWxwZXIn
LCBbJ2V4cG9ydHMnLCAnZW1iZXInXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlcikgewotICAn
dXNlIHN0cmljdCc7Ci0KLSAgZXhwb3J0c1snZGVmYXVsdCddID0gbWFrZUhlbHBlcjsKLQotICBm
dW5jdGlvbiBtYWtlSGVscGVyKGhlbHBlckZ1bmN0aW9uKSB7Ci0gICAgaWYgKF9lbWJlclsnZGVm
YXVsdCddLkhlbHBlcikgewotICAgICAgcmV0dXJuIF9lbWJlclsnZGVmYXVsdCddLkhlbHBlci5o
ZWxwZXIoaGVscGVyRnVuY3Rpb24pOwotICAgIH0KLSAgICBpZiAoX2VtYmVyWydkZWZhdWx0J10u
SFRNTEJhcnMpIHsKLSAgICAgIHJldHVybiBfZW1iZXJbJ2RlZmF1bHQnXS5IVE1MQmFycy5tYWtl
Qm91bmRIZWxwZXIoaGVscGVyRnVuY3Rpb24pOwotICAgIH0KLSAgICByZXR1cm4gX2VtYmVyWydk
ZWZhdWx0J10uSGFuZGxlYmFycy5tYWtlQm91bmRIZWxwZXIoaGVscGVyRnVuY3Rpb24pOwotICB9
Ci19KTsKLWRlZmluZSgnZW1iZXItbG9hZC1pbml0aWFsaXplcnMvaW5kZXgnLCBbJ2V4cG9ydHMn
LCAnZW1iZXInXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlcikgewotICAndXNlIHN0cmljdCc7
Ci0KLSAgZXhwb3J0c1snZGVmYXVsdCddID0gZnVuY3Rpb24gKGFwcCwgcHJlZml4KSB7Ci0gICAg
dmFyIHJlZ2V4ID0gbmV3IFJlZ0V4cCgnXicgKyBwcmVmaXggKyAnXC8oKD86aW5zdGFuY2UtKT9p
bml0aWFsaXplcnMpXC8nKTsKLSAgICB2YXIgZ2V0S2V5cyA9IE9iamVjdC5rZXlzIHx8IF9lbWJl
clsnZGVmYXVsdCddLmtleXM7Ci0KLSAgICBnZXRLZXlzKHJlcXVpcmVqcy5fZWFrX3NlZW4pLm1h
cChmdW5jdGlvbiAobW9kdWxlTmFtZSkgewotICAgICAgcmV0dXJuIHsKLSAgICAgICAgbW9kdWxl
TmFtZTogbW9kdWxlTmFtZSwKLSAgICAgICAgbWF0Y2hlczogcmVnZXguZXhlYyhtb2R1bGVOYW1l
KQotICAgICAgfTsKLSAgICB9KS5maWx0ZXIoZnVuY3Rpb24gKGRlcCkgewotICAgICAgcmV0dXJu
IGRlcC5tYXRjaGVzICYmIGRlcC5tYXRjaGVzLmxlbmd0aCA9PT0gMjsKLSAgICB9KS5mb3JFYWNo
KGZ1bmN0aW9uIChkZXApIHsKLSAgICAgIHZhciBtb2R1bGVOYW1lID0gZGVwLm1vZHVsZU5hbWU7
Ci0KLSAgICAgIHZhciBtb2R1bGUgPSByZXF1aXJlKG1vZHVsZU5hbWUsIG51bGwsIG51bGwsIHRy
dWUpOwotICAgICAgaWYgKCFtb2R1bGUpIHsKLSAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1vZHVs
ZU5hbWUgKyAnIG11c3QgZXhwb3J0IGFuIGluaXRpYWxpemVyLicpOwotICAgICAgfQotCi0gICAg
ICB2YXIgaW5pdGlhbGl6ZXJUeXBlID0gX2VtYmVyWydkZWZhdWx0J10uU3RyaW5nLmNhbWVsaXpl
KGRlcC5tYXRjaGVzWzFdLnN1YnN0cmluZygwLCBkZXAubWF0Y2hlc1sxXS5sZW5ndGggLSAxKSk7
Ci0gICAgICB2YXIgaW5pdGlhbGl6ZXIgPSBtb2R1bGVbJ2RlZmF1bHQnXTsKLSAgICAgIGlmICgh
aW5pdGlhbGl6ZXIubmFtZSkgewotICAgICAgICB2YXIgaW5pdGlhbGl6ZXJOYW1lID0gbW9kdWxl
TmFtZS5tYXRjaCgvW15cL10rXC8/JC8pWzBdOwotICAgICAgICBpbml0aWFsaXplci5uYW1lID0g
aW5pdGlhbGl6ZXJOYW1lOwotICAgICAgfQotCi0gICAgICBpZiAoYXBwW2luaXRpYWxpemVyVHlw
ZV0pIHsKLSAgICAgICAgYXBwW2luaXRpYWxpemVyVHlwZV0oaW5pdGlhbGl6ZXIpOwotICAgICAg
fQotICAgIH0pOwotICB9OwotfSk7Ci1kZWZpbmUoJ2VtYmVyLXJlc29sdmVyL2NvbnRhaW5lci1k
ZWJ1Zy1hZGFwdGVyJywgWydleHBvcnRzJywgJ2VtYmVyJywgJ2VtYmVyLXJlc29sdmVyL3V0aWxz
L21vZHVsZS1yZWdpc3RyeSddLCBmdW5jdGlvbiAoZXhwb3J0cywgX2VtYmVyLCBfZW1iZXJSZXNv
bHZlclV0aWxzTW9kdWxlUmVnaXN0cnkpIHsKLSAgJ3VzZSBzdHJpY3QnOwotCi0gIHZhciBDb250
YWluZXJEZWJ1Z0FkYXB0ZXIgPSBfZW1iZXJbJ2RlZmF1bHQnXS5Db250YWluZXJEZWJ1Z0FkYXB0
ZXI7Ci0KLSAgdmFyIE1vZHVsZXNDb250YWluZXJEZWJ1Z0FkYXB0ZXIgPSBudWxsOwotCi0gIGZ1
bmN0aW9uIGdldFBvZCh0eXBlLCBrZXksIHByZWZpeCkgewotICAgIHZhciBtYXRjaCA9IGtleS5t
YXRjaChuZXcgUmVnRXhwKCdeLz8nICsgcHJlZml4ICsgJy8oLispLycgKyB0eXBlICsgJyQnKSk7
Ci0gICAgaWYgKG1hdGNoKSB7Ci0gICAgICByZXR1cm4gbWF0Y2hbMV07Ci0gICAgfQotICB9Ci0K
LSAgLy8gU3VwcG9ydCBFbWJlciA8IDEuNS1iZXRhLjQKLSAgLy8gVE9ETzogUmVtb3ZlIHRoaXMg
YWZ0ZXIgMS41LjAgaXMgcmVsZWFzZWQKLSAgaWYgKHR5cGVvZiBDb250YWluZXJEZWJ1Z0FkYXB0
ZXIgIT09ICd1bmRlZmluZWQnKSB7Ci0KLSAgICAvKgotICAgICAqIFRoaXMgbW9kdWxlIGRlZmlu
ZXMgYSBzdWJjbGFzcyBvZiBFbWJlci5Db250YWluZXJEZWJ1Z0FkYXB0ZXIgdGhhdCBhZGRzIHR3
bwotICAgICAqIGltcG9ydGFudCBmZWF0dXJlczoKLSAgICAgKgotICAgICAqICAxKSBpcyBhYmxl
IHByb3ZpZGUgaW5qZWN0aW9ucyB0byBjbGFzc2VzIHRoYXQgaW1wbGVtZW50IGBleHRlbmRgCi0g
ICAgICogICAgIChhcyBpcyB0eXBpY2FsIHdpdGggRW1iZXIpLgotICAgICAqLwotCi0gICAgTW9k
dWxlc0NvbnRhaW5lckRlYnVnQWRhcHRlciA9IENvbnRhaW5lckRlYnVnQWRhcHRlci5leHRlbmQo
ewotICAgICAgX21vZHVsZVJlZ2lzdHJ5OiBudWxsLAotCi0gICAgICBpbml0OiBmdW5jdGlvbiBp
bml0KCkgewotICAgICAgICB0aGlzLl9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwotCi0g
ICAgICAgIGlmICghdGhpcy5fbW9kdWxlUmVnaXN0cnkpIHsKLSAgICAgICAgICB0aGlzLl9tb2R1
bGVSZWdpc3RyeSA9IG5ldyBfZW1iZXJSZXNvbHZlclV0aWxzTW9kdWxlUmVnaXN0cnlbJ2RlZmF1
bHQnXSgpOwotICAgICAgICB9Ci0gICAgICB9LAotCi0gICAgICAvKioKLSAgICAgICAgVGhlIGNv
bnRhaW5lciBvZiB0aGUgYXBwbGljYXRpb24gYmVpbmcgZGVidWdnZWQuCi0gICAgICAgIFRoaXMg
cHJvcGVydHkgd2lsbCBiZSBpbmplY3RlZAotICAgICAgICBvbiBjcmVhdGlvbi4KLSAgICAgICAg
IEBwcm9wZXJ0eSBjb250YWluZXIKLSAgICAgICAgQGRlZmF1bHQgbnVsbAotICAgICAgKi8KLQot
ICAgICAgLyoqCi0gICAgICAgIFRoZSByZXNvbHZlciBpbnN0YW5jZSBvZiB0aGUgYXBwbGljYXRp
b24KLSAgICAgICAgYmVpbmcgZGVidWdnZWQuIFRoaXMgcHJvcGVydHkgd2lsbCBiZSBpbmplY3Rl
ZAotICAgICAgICBvbiBjcmVhdGlvbi4KLSAgICAgICAgIEBwcm9wZXJ0eSByZXNvbHZlcgotICAg
ICAgICBAZGVmYXVsdCBudWxsCi0gICAgICAqLwotCi0gICAgICAvKioKLSAgICAgICAgUmV0dXJu
cyB0cnVlIGlmIGl0IGlzIHBvc3NpYmxlIHRvIGNhdGFsb2cgYSBsaXN0IG9mIGF2YWlsYWJsZQot
ICAgICAgICBjbGFzc2VzIGluIHRoZSByZXNvbHZlciBmb3IgYSBnaXZlbiB0eXBlLgotICAgICAg
ICAgQG1ldGhvZCBjYW5DYXRhbG9nRW50cmllc0J5VHlwZQotICAgICAgICBAcGFyYW0ge3N0cmlu
Z30gdHlwZSBUaGUgdHlwZS4gZS5nLiAibW9kZWwiLCAiY29udHJvbGxlciIsICJyb3V0ZSIKLSAg
ICAgICAgQHJldHVybiB7Ym9vbGVhbn0gd2hldGhlciBhIGxpc3QgaXMgYXZhaWxhYmxlIGZvciB0
aGlzIHR5cGUuCi0gICAgICAqLwotICAgICAgY2FuQ2F0YWxvZ0VudHJpZXNCeVR5cGU6IGZ1bmN0
aW9uIGNhbkNhdGFsb2dFbnRyaWVzQnlUeXBlKCkgLyogdHlwZSAqL3sKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICB9LAotCi0gICAgICAvKioKLSAgICAgICAgUmV0dXJucyB0aGUgYXZhaWxh
YmxlIGNsYXNzZXMgYSBnaXZlbiB0eXBlLgotICAgICAgICAgQG1ldGhvZCBjYXRhbG9nRW50cmll
c0J5VHlwZQotICAgICAgICBAcGFyYW0ge3N0cmluZ30gdHlwZSBUaGUgdHlwZS4gZS5nLiAibW9k
ZWwiLCAiY29udHJvbGxlciIsICJyb3V0ZSIKLSAgICAgICAgQHJldHVybiB7QXJyYXl9IEFuIGFy
cmF5IG9mIGNsYXNzZXMuCi0gICAgICAqLwotICAgICAgY2F0YWxvZ0VudHJpZXNCeVR5cGU6IGZ1
bmN0aW9uIGNhdGFsb2dFbnRyaWVzQnlUeXBlKHR5cGUpIHsKLSAgICAgICAgdmFyIG1vZHVsZU5h
bWVzID0gdGhpcy5fbW9kdWxlUmVnaXN0cnkubW9kdWxlTmFtZXMoKTsKLSAgICAgICAgdmFyIHR5
cGVzID0gX2VtYmVyWydkZWZhdWx0J10uQSgpOwotCi0gICAgICAgIHZhciBwcmVmaXggPSB0aGlz
Lm5hbWVzcGFjZS5tb2R1bGVQcmVmaXg7Ci0KLSAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBt
b2R1bGVOYW1lcy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKLSAgICAgICAgICB2YXIga2V5ID0gbW9k
dWxlTmFtZXNbaV07Ci0KLSAgICAgICAgICBpZiAoa2V5LmluZGV4T2YodHlwZSkgIT09IC0xKSB7
Ci0gICAgICAgICAgICAvLyBDaGVjayBpZiBpdCdzIGEgcG9kIG1vZHVsZQotICAgICAgICAgICAg
dmFyIG5hbWUgPSBnZXRQb2QodHlwZSwga2V5LCB0aGlzLm5hbWVzcGFjZS5wb2RNb2R1bGVQcmVm
aXggfHwgcHJlZml4KTsKLSAgICAgICAgICAgIGlmICghbmFtZSkgewotICAgICAgICAgICAgICAv
LyBOb3QgcG9kCi0gICAgICAgICAgICAgIG5hbWUgPSBrZXkuc3BsaXQodHlwZSArICdzLycpLnBv
cCgpOwotCi0gICAgICAgICAgICAgIC8vIFN1cHBvcnQgZm9yIGRpZmZlcmVudCBwcmVmaXggKHN1
Y2ggYXMgZW1iZXItY2xpIGFkZG9ucykuCi0gICAgICAgICAgICAgIC8vIFVuY29tbWVudCB0aGUg
Y29kZSBiZWxvdyB3aGVuCi0gICAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9lbWJl
ci1jbGkvZW1iZXItcmVzb2x2ZXIvcHVsbC84MCBpcyBtZXJnZWQuCi0KLSAgICAgICAgICAgICAg
Ly92YXIgbWF0Y2ggPSBrZXkubWF0Y2goJ14vPyguKykvJyArIHR5cGUpOwotICAgICAgICAgICAg
ICAvL2lmIChtYXRjaCAmJiBtYXRjaFsxXSAhPT0gcHJlZml4KSB7Ci0gICAgICAgICAgICAgIC8v
IERpZmZlcmVudCBwcmVmaXggc3VjaCBhcyBhbiBhZGRvbgotICAgICAgICAgICAgICAvL25hbWUg
PSBtYXRjaFsxXSArICdAJyArIG5hbWU7Ci0gICAgICAgICAgICAgIC8vfQotICAgICAgICAgICAg
fQotICAgICAgICAgICAgdHlwZXMuYWRkT2JqZWN0KG5hbWUpOwotICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgICByZXR1cm4gdHlwZXM7Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICBl
eHBvcnRzWydkZWZhdWx0J10gPSBNb2R1bGVzQ29udGFpbmVyRGVidWdBZGFwdGVyOwotfSk7Ci1k
ZWZpbmUoJ2VtYmVyLXJlc29sdmVyL2luZGV4JywgWydleHBvcnRzJywgJ2VtYmVyLXJlc29sdmVy
L3Jlc29sdmVyJ10sIGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXJSZXNvbHZlclJlc29sdmVyKSB7
Ci0gICd1c2Ugc3RyaWN0JzsKLQotICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ2Rl
ZmF1bHQnLCB7Ci0gICAgZW51bWVyYWJsZTogdHJ1ZSwKLSAgICBnZXQ6IGZ1bmN0aW9uIGdldCgp
IHsKLSAgICAgIHJldHVybiBfZW1iZXJSZXNvbHZlclJlc29sdmVyWydkZWZhdWx0J107Ci0gICAg
fQotICB9KTsKLX0pOwotZGVmaW5lKCdlbWJlci1yZXNvbHZlci9yZXNvbHZlcicsIFsnZXhwb3J0
cycsICdlbWJlcicsICdlbWJlci1yZXNvbHZlci91dGlscy9tb2R1bGUtcmVnaXN0cnknLCAnZW1i
ZXItcmVzb2x2ZXIvdXRpbHMvY2xhc3MtZmFjdG9yeScsICdlbWJlci1yZXNvbHZlci91dGlscy9t
YWtlLWRpY3Rpb25hcnknXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlciwgX2VtYmVyUmVzb2x2
ZXJVdGlsc01vZHVsZVJlZ2lzdHJ5LCBfZW1iZXJSZXNvbHZlclV0aWxzQ2xhc3NGYWN0b3J5LCBf
ZW1iZXJSZXNvbHZlclV0aWxzTWFrZURpY3Rpb25hcnkpIHsKLSAgLypnbG9iYWxzIHJlcXVpcmUg
Ki8KLQotICAndXNlIHN0cmljdCc7Ci0KLSAgLyoKLSAgICogVGhpcyBtb2R1bGUgZGVmaW5lcyBh
IHN1YmNsYXNzIG9mIEVtYmVyLkRlZmF1bHRSZXNvbHZlciB0aGF0IGFkZHMgdHdvCi0gICAqIGlt
cG9ydGFudCBmZWF0dXJlczoKLSAgICoKLSAgICogIDEpIFRoZSByZXNvbHZlciBtYWtlcyB0aGUg
Y29udGFpbmVyIGF3YXJlIG9mIGVzNiBtb2R1bGVzIHZpYSB0aGUgQU1ECi0gICAqICAgICBvdXRw
dXQuIFRoZSBsb2FkZXIncyBfbW9kdWxlRW50cmllcyBpcyBjb25zdWx0ZWQgc28gdGhhdCBjbGFz
c2VzIGNhbiBiZQotICAgKiAgICAgcmVzb2x2ZWQgZGlyZWN0bHkgdmlhIHRoZSBtb2R1bGUgbG9h
ZGVyLCB3aXRob3V0IG5lZWRpbmcgYSBtYW51YWwKLSAgICogICAgIGBpbXBvcnRgLgotICAgKiAg
MikgaXMgYWJsZSB0byBwcm92aWRlIGluamVjdGlvbnMgdG8gY2xhc3NlcyB0aGF0IGltcGxlbWVu
dCBgZXh0ZW5kYAotICAgKiAgICAgKGFzIGlzIHR5cGljYWwgd2l0aCBFbWJlcikuCi0gICAqLwot
Ci0gIHZhciBfRW1iZXIkU3RyaW5nID0gX2VtYmVyWydkZWZhdWx0J10uU3RyaW5nOwotICB2YXIg
dW5kZXJzY29yZSA9IF9FbWJlciRTdHJpbmcudW5kZXJzY29yZTsKLSAgdmFyIGNsYXNzaWZ5ID0g
X0VtYmVyJFN0cmluZy5jbGFzc2lmeTsKLSAgdmFyIGRhc2hlcml6ZSA9IF9FbWJlciRTdHJpbmcu
ZGFzaGVyaXplOwotICB2YXIgZ2V0ID0gX2VtYmVyWydkZWZhdWx0J10uZ2V0OwotICB2YXIgRGVm
YXVsdFJlc29sdmVyID0gX2VtYmVyWydkZWZhdWx0J10uRGVmYXVsdFJlc29sdmVyOwotCi0gIGZ1
bmN0aW9uIHBhcnNlTmFtZShmdWxsTmFtZSkgewotICAgIC8qanNoaW50IHZhbGlkdGhpczp0cnVl
ICovCi0KLSAgICBpZiAoZnVsbE5hbWUucGFyc2VkTmFtZSA9PT0gdHJ1ZSkgewotICAgICAgcmV0
dXJuIGZ1bGxOYW1lOwotICAgIH0KLQotICAgIHZhciBwcmVmaXgsIHR5cGUsIG5hbWU7Ci0gICAg
dmFyIGZ1bGxOYW1lUGFydHMgPSBmdWxsTmFtZS5zcGxpdCgnQCcpOwotCi0gICAgLy8gSFRNTEJh
cnMgdXNlcyBoZWxwZXI6QGNvbnRlbnQtaGVscGVyIHdoaWNoIGNvbGxpZGVzCi0gICAgLy8gd2l0
aCBlbWJlci1jbGkgbmFtZXNwYWNlIGRldGVjdGlvbi4KLSAgICAvLyBUaGlzIHdpbGwgYmUgcmVt
b3ZlZCBpbiBhIGZ1dHVyZSByZWxlYXNlIG9mIEhUTUxCYXJzLgotICAgIGlmIChmdWxsTmFtZSAh
PT0gJ2hlbHBlcjpAY29udGVudC1oZWxwZXInICYmIGZ1bGxOYW1lUGFydHMubGVuZ3RoID09PSAy
KSB7Ci0gICAgICB2YXIgcHJlZml4UGFydHMgPSBmdWxsTmFtZVBhcnRzWzBdLnNwbGl0KCc6Jyk7
Ci0KLSAgICAgIGlmIChwcmVmaXhQYXJ0cy5sZW5ndGggPT09IDIpIHsKLSAgICAgICAgcHJlZml4
ID0gcHJlZml4UGFydHNbMV07Ci0gICAgICAgIHR5cGUgPSBwcmVmaXhQYXJ0c1swXTsKLSAgICAg
ICAgbmFtZSA9IGZ1bGxOYW1lUGFydHNbMV07Ci0gICAgICB9IGVsc2UgewotICAgICAgICB2YXIg
bmFtZVBhcnRzID0gZnVsbE5hbWVQYXJ0c1sxXS5zcGxpdCgnOicpOwotCi0gICAgICAgIHByZWZp
eCA9IGZ1bGxOYW1lUGFydHNbMF07Ci0gICAgICAgIHR5cGUgPSBuYW1lUGFydHNbMF07Ci0gICAg
ICAgIG5hbWUgPSBuYW1lUGFydHNbMV07Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIGZ1
bGxOYW1lUGFydHMgPSBmdWxsTmFtZS5zcGxpdCgnOicpOwotICAgICAgdHlwZSA9IGZ1bGxOYW1l
UGFydHNbMF07Ci0gICAgICBuYW1lID0gZnVsbE5hbWVQYXJ0c1sxXTsKLSAgICB9Ci0KLSAgICB2
YXIgZnVsbE5hbWVXaXRob3V0VHlwZSA9IG5hbWU7Ci0gICAgdmFyIG5hbWVzcGFjZSA9IGdldCh0
aGlzLCAnbmFtZXNwYWNlJyk7Ci0gICAgdmFyIHJvb3QgPSBuYW1lc3BhY2U7Ci0KLSAgICByZXR1
cm4gewotICAgICAgcGFyc2VkTmFtZTogdHJ1ZSwKLSAgICAgIGZ1bGxOYW1lOiBmdWxsTmFtZSwK
LSAgICAgIHByZWZpeDogcHJlZml4IHx8IHRoaXMucHJlZml4KHsgdHlwZTogdHlwZSB9KSwKLSAg
ICAgIHR5cGU6IHR5cGUsCi0gICAgICBmdWxsTmFtZVdpdGhvdXRUeXBlOiBmdWxsTmFtZVdpdGhv
dXRUeXBlLAotICAgICAgbmFtZTogbmFtZSwKLSAgICAgIHJvb3Q6IHJvb3QsCi0gICAgICByZXNv
bHZlTWV0aG9kTmFtZTogInJlc29sdmUiICsgY2xhc3NpZnkodHlwZSkKLSAgICB9OwotICB9Ci0K
LSAgZnVuY3Rpb24gcmVzb2x2ZU90aGVyKHBhcnNlZE5hbWUpIHsKLSAgICAvKmpzaGludCB2YWxp
ZHRoaXM6dHJ1ZSAqLwotCi0gICAgX2VtYmVyWydkZWZhdWx0J10uYXNzZXJ0KCdgbW9kdWxlUHJl
Zml4YCBtdXN0IGJlIGRlZmluZWQnLCB0aGlzLm5hbWVzcGFjZS5tb2R1bGVQcmVmaXgpOwotCi0g
ICAgdmFyIG5vcm1hbGl6ZWRNb2R1bGVOYW1lID0gdGhpcy5maW5kTW9kdWxlTmFtZShwYXJzZWRO
YW1lKTsKLQotICAgIGlmIChub3JtYWxpemVkTW9kdWxlTmFtZSkgewotICAgICAgdmFyIGRlZmF1
bHRFeHBvcnQgPSB0aGlzLl9leHRyYWN0RGVmYXVsdEV4cG9ydChub3JtYWxpemVkTW9kdWxlTmFt
ZSwgcGFyc2VkTmFtZSk7Ci0KLSAgICAgIGlmIChkZWZhdWx0RXhwb3J0ID09PSB1bmRlZmluZWQp
IHsKLSAgICAgICAgdGhyb3cgbmV3IEVycm9yKCIgRXhwZWN0ZWQgdG8gZmluZDogJyIgKyBwYXJz
ZWROYW1lLmZ1bGxOYW1lICsgIicgd2l0aGluICciICsgbm9ybWFsaXplZE1vZHVsZU5hbWUgKyAi
JyBidXQgZ290ICd1bmRlZmluZWQnLiBEaWQgeW91IGZvcmdldCB0byBgZXhwb3J0IGRlZmF1bHRg
IHdpdGhpbiAnIiArIG5vcm1hbGl6ZWRNb2R1bGVOYW1lICsgIic/Iik7Ci0gICAgICB9Ci0KLSAg
ICAgIGlmICh0aGlzLnNob3VsZFdyYXBJbkNsYXNzRmFjdG9yeShkZWZhdWx0RXhwb3J0LCBwYXJz
ZWROYW1lKSkgewotICAgICAgICBkZWZhdWx0RXhwb3J0ID0gKDAsIF9lbWJlclJlc29sdmVyVXRp
bHNDbGFzc0ZhY3RvcnlbJ2RlZmF1bHQnXSkoZGVmYXVsdEV4cG9ydCk7Ci0gICAgICB9Ci0KLSAg
ICAgIHJldHVybiBkZWZhdWx0RXhwb3J0OwotICAgIH0gZWxzZSB7Ci0gICAgICByZXR1cm4gdGhp
cy5fc3VwZXIocGFyc2VkTmFtZSk7Ci0gICAgfQotICB9Ci0KLSAgLy8gRW1iZXIuRGVmYXVsdFJl
c29sdmVyIGRvY3M6Ci0gIC8vICAgaHR0cHM6Ly9naXRodWIuY29tL2VtYmVyanMvZW1iZXIuanMv
YmxvYi9tYXN0ZXIvcGFja2FnZXMvZW1iZXItYXBwbGljYXRpb24vbGliL3N5c3RlbS9yZXNvbHZl
ci5qcwotICB2YXIgUmVzb2x2ZXIgPSBEZWZhdWx0UmVzb2x2ZXIuZXh0ZW5kKHsKLSAgICByZXNv
bHZlT3RoZXI6IHJlc29sdmVPdGhlciwKLSAgICBwYXJzZU5hbWU6IHBhcnNlTmFtZSwKLSAgICBy
ZXNvbHZlVGVtcGxhdGU6IHJlc29sdmVPdGhlciwKLSAgICBwbHVyYWxpemVkVHlwZXM6IG51bGws
Ci0gICAgbW9kdWxlUmVnaXN0cnk6IG51bGwsCi0KLSAgICBtYWtlVG9TdHJpbmc6IGZ1bmN0aW9u
IG1ha2VUb1N0cmluZyhmYWN0b3J5LCBmdWxsTmFtZSkgewotICAgICAgcmV0dXJuICcnICsgdGhp
cy5uYW1lc3BhY2UubW9kdWxlUHJlZml4ICsgJ0AnICsgZnVsbE5hbWUgKyAnOic7Ci0gICAgfSwK
LQotICAgIHNob3VsZFdyYXBJbkNsYXNzRmFjdG9yeTogZnVuY3Rpb24gc2hvdWxkV3JhcEluQ2xh
c3NGYWN0b3J5KCkgLyogbW9kdWxlLCBwYXJzZWROYW1lICovewotICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0sCi0KLSAgICBpbml0OiBmdW5jdGlvbiBpbml0KCkgewotICAgICAgdGhpcy5fc3Vw
ZXIoKTsKLSAgICAgIHRoaXMubW9kdWxlQmFzZWRSZXNvbHZlciA9IHRydWU7Ci0KLSAgICAgIGlm
ICghdGhpcy5fbW9kdWxlUmVnaXN0cnkpIHsKLSAgICAgICAgdGhpcy5fbW9kdWxlUmVnaXN0cnkg
PSBuZXcgX2VtYmVyUmVzb2x2ZXJVdGlsc01vZHVsZVJlZ2lzdHJ5WydkZWZhdWx0J10oKTsKLSAg
ICAgIH0KLQotICAgICAgdGhpcy5fbm9ybWFsaXplQ2FjaGUgPSAoMCwgX2VtYmVyUmVzb2x2ZXJV
dGlsc01ha2VEaWN0aW9uYXJ5WydkZWZhdWx0J10pKCk7Ci0KLSAgICAgIHRoaXMucGx1cmFsaXpl
ZFR5cGVzID0gdGhpcy5wbHVyYWxpemVkVHlwZXMgfHwgKDAsIF9lbWJlclJlc29sdmVyVXRpbHNN
YWtlRGljdGlvbmFyeVsnZGVmYXVsdCddKSgpOwotCi0gICAgICBpZiAoIXRoaXMucGx1cmFsaXpl
ZFR5cGVzLmNvbmZpZykgewotICAgICAgICB0aGlzLnBsdXJhbGl6ZWRUeXBlcy5jb25maWcgPSAn
Y29uZmlnJzsKLSAgICAgIH0KLSAgICAgIHRoaXMuX2RlcHJlY2F0ZWRQb2RNb2R1bGVQcmVmaXgg
PSBmYWxzZTsKLSAgICB9LAotCi0gICAgbm9ybWFsaXplOiBmdW5jdGlvbiBub3JtYWxpemUoZnVs
bE5hbWUpIHsKLSAgICAgIHJldHVybiB0aGlzLl9ub3JtYWxpemVDYWNoZVtmdWxsTmFtZV0gfHwg
KHRoaXMuX25vcm1hbGl6ZUNhY2hlW2Z1bGxOYW1lXSA9IHRoaXMuX25vcm1hbGl6ZShmdWxsTmFt
ZSkpOwotICAgIH0sCi0KLSAgICBfbm9ybWFsaXplOiBmdW5jdGlvbiBfbm9ybWFsaXplKGZ1bGxO
YW1lKSB7Ci0gICAgICAvLyBBKSBDb252ZXJ0IHVuZGVyc2NvcmVzIHRvIGRhc2hlcwotICAgICAg
Ly8gQikgQ29udmVydCBjYW1lbENhc2UgdG8gZGFzaC1jYXNlLCBleGNlcHQgZm9yIGhlbHBlcnMg
d2hlcmUgd2Ugd2FudCB0byBhdm9pZCBzaGFkb3dpbmcgY2FtZWxDYXNlIGV4cHJlc3Npb25zCi0g
ICAgICAvLyBDKSByZXBsYWNlIGAuYCB3aXRoIGAvYCBpbiBvcmRlciB0byBtYWtlIG5lc3RlZCBj
b250cm9sbGVycyB3b3JrIGluIHRoZSBmb2xsb3dpbmcgY2FzZXMKLSAgICAgIC8vICAgICAgMS4g
YG5lZWRzOiBbJ3Bvc3RzL3Bvc3QnXWAKLSAgICAgIC8vICAgICAgMi4gYHt7cmVuZGVyICJwb3N0
cy9wb3N0In19YAotICAgICAgLy8gICAgICAzLiBgdGhpcy5yZW5kZXIoJ3Bvc3RzL3Bvc3QnKWAg
ZnJvbSBSb3V0ZQotCi0gICAgICB2YXIgc3BsaXQgPSBmdWxsTmFtZS5zcGxpdCgnOicpOwotICAg
ICAgaWYgKHNwbGl0Lmxlbmd0aCA+IDEpIHsKLSAgICAgICAgaWYgKHNwbGl0WzBdID09PSAnaGVs
cGVyJykgewotICAgICAgICAgIHJldHVybiBzcGxpdFswXSArICc6JyArIHNwbGl0WzFdLnJlcGxh
Y2UoL18vZywgJy0nKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICByZXR1cm4gc3BsaXRb
MF0gKyAnOicgKyBkYXNoZXJpemUoc3BsaXRbMV0ucmVwbGFjZSgvXC4vZywgJy8nKSk7Ci0gICAg
ICAgIH0KLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVybiBmdWxsTmFtZTsKLSAgICAgIH0K
LSAgICB9LAotCi0gICAgcGx1cmFsaXplOiBmdW5jdGlvbiBwbHVyYWxpemUodHlwZSkgewotICAg
ICAgcmV0dXJuIHRoaXMucGx1cmFsaXplZFR5cGVzW3R5cGVdIHx8ICh0aGlzLnBsdXJhbGl6ZWRU
eXBlc1t0eXBlXSA9IHR5cGUgKyAncycpOwotICAgIH0sCi0KLSAgICBwb2RCYXNlZExvb2t1cFdp
dGhQcmVmaXg6IGZ1bmN0aW9uIHBvZEJhc2VkTG9va3VwV2l0aFByZWZpeChwb2RQcmVmaXgsIHBh
cnNlZE5hbWUpIHsKLSAgICAgIHZhciBmdWxsTmFtZVdpdGhvdXRUeXBlID0gcGFyc2VkTmFtZS5m
dWxsTmFtZVdpdGhvdXRUeXBlOwotCi0gICAgICBpZiAocGFyc2VkTmFtZS50eXBlID09PSAndGVt
cGxhdGUnKSB7Ci0gICAgICAgIGZ1bGxOYW1lV2l0aG91dFR5cGUgPSBmdWxsTmFtZVdpdGhvdXRU
eXBlLnJlcGxhY2UoL15jb21wb25lbnRzXC8vLCAnJyk7Ci0gICAgICB9Ci0KLSAgICAgIHJldHVy
biBwb2RQcmVmaXggKyAnLycgKyBmdWxsTmFtZVdpdGhvdXRUeXBlICsgJy8nICsgcGFyc2VkTmFt
ZS50eXBlOwotICAgIH0sCi0KLSAgICBwb2RCYXNlZE1vZHVsZU5hbWU6IGZ1bmN0aW9uIHBvZEJh
c2VkTW9kdWxlTmFtZShwYXJzZWROYW1lKSB7Ci0gICAgICB2YXIgcG9kUHJlZml4ID0gdGhpcy5u
YW1lc3BhY2UucG9kTW9kdWxlUHJlZml4IHx8IHRoaXMubmFtZXNwYWNlLm1vZHVsZVByZWZpeDsK
LQotICAgICAgcmV0dXJuIHRoaXMucG9kQmFzZWRMb29rdXBXaXRoUHJlZml4KHBvZFByZWZpeCwg
cGFyc2VkTmFtZSk7Ci0gICAgfSwKLQotICAgIHBvZEJhc2VkQ29tcG9uZW50c0luU3ViZGlyOiBm
dW5jdGlvbiBwb2RCYXNlZENvbXBvbmVudHNJblN1YmRpcihwYXJzZWROYW1lKSB7Ci0gICAgICB2
YXIgcG9kUHJlZml4ID0gdGhpcy5uYW1lc3BhY2UucG9kTW9kdWxlUHJlZml4IHx8IHRoaXMubmFt
ZXNwYWNlLm1vZHVsZVByZWZpeDsKLSAgICAgIHBvZFByZWZpeCA9IHBvZFByZWZpeCArICcvY29t
cG9uZW50cyc7Ci0KLSAgICAgIGlmIChwYXJzZWROYW1lLnR5cGUgPT09ICdjb21wb25lbnQnIHx8
IHBhcnNlZE5hbWUuZnVsbE5hbWVXaXRob3V0VHlwZS5tYXRjaCgvXmNvbXBvbmVudHMvKSkgewot
ICAgICAgICByZXR1cm4gdGhpcy5wb2RCYXNlZExvb2t1cFdpdGhQcmVmaXgocG9kUHJlZml4LCBw
YXJzZWROYW1lKTsKLSAgICAgIH0KLSAgICB9LAotCi0gICAgcmVzb2x2ZUVuZ2luZTogZnVuY3Rp
b24gcmVzb2x2ZUVuZ2luZShwYXJzZWROYW1lKSB7Ci0gICAgICB2YXIgZW5naW5lTmFtZSA9IHBh
cnNlZE5hbWUuZnVsbE5hbWVXaXRob3V0VHlwZTsKLSAgICAgIHZhciBlbmdpbmVNb2R1bGUgPSBl
bmdpbmVOYW1lICsgJy9lbmdpbmUnOwotCi0gICAgICBpZiAodGhpcy5fbW9kdWxlUmVnaXN0cnku
aGFzKGVuZ2luZU1vZHVsZSkpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2V4dHJhY3REZWZhdWx0
RXhwb3J0KGVuZ2luZU1vZHVsZSk7Ci0gICAgICB9Ci0gICAgfSwKLQotICAgIHJlc29sdmVSb3V0
ZU1hcDogZnVuY3Rpb24gcmVzb2x2ZVJvdXRlTWFwKHBhcnNlZE5hbWUpIHsKLSAgICAgIHZhciBl
bmdpbmVOYW1lID0gcGFyc2VkTmFtZS5mdWxsTmFtZVdpdGhvdXRUeXBlOwotICAgICAgdmFyIGVu
Z2luZVJvdXRlc01vZHVsZSA9IGVuZ2luZU5hbWUgKyAnL3JvdXRlcyc7Ci0KLSAgICAgIGlmICh0
aGlzLl9tb2R1bGVSZWdpc3RyeS5oYXMoZW5naW5lUm91dGVzTW9kdWxlKSkgewotICAgICAgICB2
YXIgcm91dGVNYXAgPSB0aGlzLl9leHRyYWN0RGVmYXVsdEV4cG9ydChlbmdpbmVSb3V0ZXNNb2R1
bGUpOwotCi0gICAgICAgIF9lbWJlclsnZGVmYXVsdCddLmFzc2VydCgnVGhlIHJvdXRlIG1hcCBm
b3IgJyArIGVuZ2luZU5hbWUgKyAnIHNob3VsZCBiZSB3cmFwcGVkIGJ5IFwnYnVpbGRSb3V0ZXNc
JyBiZWZvcmUgZXhwb3J0aW5nLicsIHJvdXRlTWFwLmlzUm91dGVNYXApOwotCi0gICAgICAgIHJl
dHVybiByb3V0ZU1hcDsKLSAgICAgIH0KLSAgICB9LAotCi0gICAgbWFpbk1vZHVsZU5hbWU6IGZ1
bmN0aW9uIG1haW5Nb2R1bGVOYW1lKHBhcnNlZE5hbWUpIHsKLSAgICAgIC8vIGlmIHJvdXRlcjpt
YWluIG9yIGFkYXB0ZXI6bWFpbiBsb29rIGZvciBhIG1vZHVsZSB3aXRoIGp1c3QgdGhlIHR5cGUg
Zmlyc3QKLSAgICAgIHZhciB0bXBNb2R1bGVOYW1lID0gcGFyc2VkTmFtZS5wcmVmaXggKyAnLycg
KyBwYXJzZWROYW1lLnR5cGU7Ci0KLSAgICAgIGlmIChwYXJzZWROYW1lLmZ1bGxOYW1lV2l0aG91
dFR5cGUgPT09ICdtYWluJykgewotICAgICAgICByZXR1cm4gdG1wTW9kdWxlTmFtZTsKLSAgICAg
IH0KLSAgICB9LAotCi0gICAgZGVmYXVsdE1vZHVsZU5hbWU6IGZ1bmN0aW9uIGRlZmF1bHRNb2R1
bGVOYW1lKHBhcnNlZE5hbWUpIHsKLSAgICAgIHJldHVybiBwYXJzZWROYW1lLnByZWZpeCArICcv
JyArIHRoaXMucGx1cmFsaXplKHBhcnNlZE5hbWUudHlwZSkgKyAnLycgKyBwYXJzZWROYW1lLmZ1
bGxOYW1lV2l0aG91dFR5cGU7Ci0gICAgfSwKLQotICAgIHByZWZpeDogZnVuY3Rpb24gcHJlZml4
KHBhcnNlZE5hbWUpIHsKLSAgICAgIHZhciB0bXBQcmVmaXggPSB0aGlzLm5hbWVzcGFjZS5tb2R1
bGVQcmVmaXg7Ci0KLSAgICAgIGlmICh0aGlzLm5hbWVzcGFjZVtwYXJzZWROYW1lLnR5cGUgKyAn
UHJlZml4J10pIHsKLSAgICAgICAgdG1wUHJlZml4ID0gdGhpcy5uYW1lc3BhY2VbcGFyc2VkTmFt
ZS50eXBlICsgJ1ByZWZpeCddOwotICAgICAgfQotCi0gICAgICByZXR1cm4gdG1wUHJlZml4Owot
ICAgIH0sCi0KLSAgICAvKioKLSAgICAgIEEgbGlzdGluZyBvZiBmdW5jdGlvbnMgdG8gdGVzdCBm
b3IgbW9kdWxlTmFtZSdzIGJhc2VkIG9uIHRoZSBwcm92aWRlZAotICAgICBgcGFyc2VkTmFtZWAu
IFRoaXMgYWxsb3dzIGVhc3kgY3VzdG9taXphdGlvbiBvZiBhZGRpdGlvbmFsIG1vZHVsZSBiYXNl
ZAotICAgICBsb29rdXAgcGF0dGVybnMuCi0gICAgICBAcHJvcGVydHkgbW9kdWxlTmFtZUxvb2t1
cFBhdHRlcm5zCi0gICAgIEByZXR1cm5zIHtFbWJlci5BcnJheX0KLSAgICAgKi8KLSAgICBtb2R1
bGVOYW1lTG9va3VwUGF0dGVybnM6IF9lbWJlclsnZGVmYXVsdCddLmNvbXB1dGVkKGZ1bmN0aW9u
ICgpIHsKLSAgICAgIHJldHVybiBbdGhpcy5wb2RCYXNlZE1vZHVsZU5hbWUsIHRoaXMucG9kQmFz
ZWRDb21wb25lbnRzSW5TdWJkaXIsIHRoaXMubWFpbk1vZHVsZU5hbWUsIHRoaXMuZGVmYXVsdE1v
ZHVsZU5hbWVdOwotICAgIH0pLAotCi0gICAgZmluZE1vZHVsZU5hbWU6IGZ1bmN0aW9uIGZpbmRN
b2R1bGVOYW1lKHBhcnNlZE5hbWUsIGxvZ2dpbmdEaXNhYmxlZCkgewotICAgICAgdmFyIG1vZHVs
ZU5hbWVMb29rdXBQYXR0ZXJucyA9IHRoaXMuZ2V0KCdtb2R1bGVOYW1lTG9va3VwUGF0dGVybnMn
KTsKLSAgICAgIHZhciBtb2R1bGVOYW1lOwotCi0gICAgICBmb3IgKHZhciBpbmRleCA9IDAsIF9s
ZW5ndGggPSBtb2R1bGVOYW1lTG9va3VwUGF0dGVybnMubGVuZ3RoOyBpbmRleCA8IF9sZW5ndGg7
IGluZGV4KyspIHsKLSAgICAgICAgdmFyIGl0ZW0gPSBtb2R1bGVOYW1lTG9va3VwUGF0dGVybnNb
aW5kZXhdOwotCi0gICAgICAgIHZhciB0bXBNb2R1bGVOYW1lID0gaXRlbS5jYWxsKHRoaXMsIHBh
cnNlZE5hbWUpOwotCi0gICAgICAgIC8vIGFsbG93IHRyZWF0IGFsbCBkYXNoZWQgYW5kIGFsbCB1
bmRlcnNjb3JlZCBhcyB0aGUgc2FtZSB0aGluZwotICAgICAgICAvLyBzdXBwb3J0cyBjb21wb25l
bnRzIHdpdGggZGFzaGVzIGFuZCBvdGhlciBzdHVmZiB3aXRoIHVuZGVyc2NvcmVzLgotICAgICAg
ICBpZiAodG1wTW9kdWxlTmFtZSkgewotICAgICAgICAgIHRtcE1vZHVsZU5hbWUgPSB0aGlzLmNo
b29zZU1vZHVsZU5hbWUodG1wTW9kdWxlTmFtZSwgcGFyc2VkTmFtZSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBpZiAodG1wTW9kdWxlTmFtZSAmJiB0aGlzLl9tb2R1bGVSZWdpc3RyeS5oYXModG1w
TW9kdWxlTmFtZSkpIHsKLSAgICAgICAgICBtb2R1bGVOYW1lID0gdG1wTW9kdWxlTmFtZTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmICghbG9nZ2luZ0Rpc2FibGVkKSB7Ci0gICAgICAgICAgdGhp
cy5fbG9nTG9va3VwKG1vZHVsZU5hbWUsIHBhcnNlZE5hbWUsIHRtcE1vZHVsZU5hbWUpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgaWYgKG1vZHVsZU5hbWUpIHsKLSAgICAgICAgICByZXR1cm4gbW9k
dWxlTmFtZTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0KLSAgICBjaG9vc2VNb2R1bGVO
YW1lOiBmdW5jdGlvbiBjaG9vc2VNb2R1bGVOYW1lKG1vZHVsZU5hbWUsIHBhcnNlZE5hbWUpIHsK
LSAgICAgIHZhciBfdGhpcyA9IHRoaXM7Ci0KLSAgICAgIHZhciB1bmRlcnNjb3JlZE1vZHVsZU5h
bWUgPSB1bmRlcnNjb3JlKG1vZHVsZU5hbWUpOwotCi0gICAgICBpZiAobW9kdWxlTmFtZSAhPT0g
dW5kZXJzY29yZWRNb2R1bGVOYW1lICYmIHRoaXMuX21vZHVsZVJlZ2lzdHJ5Lmhhcyhtb2R1bGVO
YW1lKSAmJiB0aGlzLl9tb2R1bGVSZWdpc3RyeS5oYXModW5kZXJzY29yZWRNb2R1bGVOYW1lKSkg
ewotICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJBbWJpZ3VvdXMgbW9kdWxlIG5hbWVzOiBg
IiArIG1vZHVsZU5hbWUgKyAiYCBhbmQgYCIgKyB1bmRlcnNjb3JlZE1vZHVsZU5hbWUgKyAiYCIp
OwotICAgICAgfQotCi0gICAgICBpZiAodGhpcy5fbW9kdWxlUmVnaXN0cnkuaGFzKG1vZHVsZU5h
bWUpKSB7Ci0gICAgICAgIHJldHVybiBtb2R1bGVOYW1lOwotICAgICAgfSBlbHNlIGlmICh0aGlz
Ll9tb2R1bGVSZWdpc3RyeS5oYXModW5kZXJzY29yZWRNb2R1bGVOYW1lKSkgewotICAgICAgICBy
ZXR1cm4gdW5kZXJzY29yZWRNb2R1bGVOYW1lOwotICAgICAgfQotICAgICAgLy8gd29ya2Fyb3Vu
ZCBmb3IgZGFzaGVyaXplZCBwYXJ0aWFsczoKLSAgICAgIC8vIHNvbWV0aGluZy9zb21ldGhpbmcv
LXNvbWV0aGluZyA9PiBzb21ldGhpbmcvc29tZXRoaW5nL19zb21ldGhpbmcKLSAgICAgIHZhciBw
YXJ0aWFsaXplZE1vZHVsZU5hbWUgPSBtb2R1bGVOYW1lLnJlcGxhY2UoL1wvLShbXlwvXSopJC8s
ICcvXyQxJyk7Ci0KLSAgICAgIGlmICh0aGlzLl9tb2R1bGVSZWdpc3RyeS5oYXMocGFydGlhbGl6
ZWRNb2R1bGVOYW1lKSkgewotICAgICAgICBfZW1iZXJbJ2RlZmF1bHQnXS5kZXByZWNhdGUoJ01v
ZHVsZXMgc2hvdWxkIG5vdCBjb250YWluIHVuZGVyc2NvcmVzLiAnICsgJ0F0dGVtcHRlZCB0byBs
b29rdXAgIicgKyBtb2R1bGVOYW1lICsgJyIgd2hpY2ggJyArICd3YXMgbm90IGZvdW5kLiBQbGVh
c2UgcmVuYW1lICInICsgcGFydGlhbGl6ZWRNb2R1bGVOYW1lICsgJyIgJyArICd0byAiJyArIG1v
ZHVsZU5hbWUgKyAnIiBpbnN0ZWFkLicsIGZhbHNlLCB7IGlkOiAnZW1iZXItcmVzb2x2ZXIudW5k
ZXJzY29yZWQtbW9kdWxlcycsIHVudGlsOiAnMy4wLjAnIH0pOwotCi0gICAgICAgIHJldHVybiBw
YXJ0aWFsaXplZE1vZHVsZU5hbWU7Ci0gICAgICB9Ci0gICAgICBfZW1iZXJbJ2RlZmF1bHQnXS5y
dW5JbkRlYnVnKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgdmFyIGlzQ2FtZWxDYXNlSGVscGVyID0g
cGFyc2VkTmFtZS50eXBlID09PSAnaGVscGVyJyAmJiAhIW1vZHVsZU5hbWUubWF0Y2goL1thLXpd
K1tBLVpdKy8pOwotICAgICAgICBpZiAoaXNDYW1lbENhc2VIZWxwZXIpIHsKLSAgICAgICAgICBf
dGhpcy5fY2FtZWxDYXNlSGVscGVyV2FybmVkTmFtZXMgPSBfdGhpcy5fY2FtZWxDYXNlSGVscGVy
V2FybmVkTmFtZXMgfHwgW107Ci0gICAgICAgICAgdmFyIGFscmVhZHlXYXJuZWQgPSBfdGhpcy5f
Y2FtZWxDYXNlSGVscGVyV2FybmVkTmFtZXMuaW5kZXhPZihwYXJzZWROYW1lLmZ1bGxOYW1lKSA+
IC0xOwotICAgICAgICAgIGlmICghYWxyZWFkeVdhcm5lZCAmJiBfdGhpcy5fbW9kdWxlUmVnaXN0
cnkuaGFzKGRhc2hlcml6ZShtb2R1bGVOYW1lKSkpIHsKLSAgICAgICAgICAgIF90aGlzLl9jYW1l
bENhc2VIZWxwZXJXYXJuZWROYW1lcy5wdXNoKHBhcnNlZE5hbWUuZnVsbE5hbWUpOwotICAgICAg
ICAgICAgX2VtYmVyWydkZWZhdWx0J10ud2FybignQXR0ZW1wdGVkIHRvIGxvb2t1cCAiJyArIHBh
cnNlZE5hbWUuZnVsbE5hbWUgKyAnIiB3aGljaCAnICsgJ3dhcyBub3QgZm91bmQuIEluIHByZXZp
b3VzIHZlcnNpb25zIG9mIGVtYmVyLXJlc29sdmVyLCBhIGJ1ZyB3b3VsZCBoYXZlICcgKyAnY2F1
c2VkIHRoZSBtb2R1bGUgYXQgIicgKyBkYXNoZXJpemUobW9kdWxlTmFtZSkgKyAnIiB0byBiZSAn
ICsgJ3JldHVybmVkIGZvciB0aGlzIGNhbWVsIGNhc2UgaGVscGVyIG5hbWUuIFRoaXMgaGFzIGJl
ZW4gZml4ZWQuICcgKyAnVXNlIHRoZSBkYXNoZXJpemVkIG5hbWUgdG8gcmVzb2x2ZSB0aGUgbW9k
dWxlIHRoYXQgd291bGQgaGF2ZSBiZWVuICcgKyAncmV0dXJuZWQgaW4gcHJldmlvdXMgdmVyc2lv
bnMuJywgZmFsc2UsIHsgaWQ6ICdlbWJlci1yZXNvbHZlci5jYW1lbGNhc2UtaGVscGVyLW5hbWVz
JywgdW50aWw6ICczLjAuMCcgfSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9KTsK
LSAgICB9LAotCi0gICAgLy8gdXNlZCBieSBFbWJlci5EZWZhdWx0UmVzb2x2ZXIucHJvdG90eXBl
Ll9sb2dMb29rdXAKLSAgICBsb29rdXBEZXNjcmlwdGlvbjogZnVuY3Rpb24gbG9va3VwRGVzY3Jp
cHRpb24oZnVsbE5hbWUpIHsKLSAgICAgIHZhciBwYXJzZWROYW1lID0gdGhpcy5wYXJzZU5hbWUo
ZnVsbE5hbWUpOwotCi0gICAgICB2YXIgbW9kdWxlTmFtZSA9IHRoaXMuZmluZE1vZHVsZU5hbWUo
cGFyc2VkTmFtZSwgdHJ1ZSk7Ci0KLSAgICAgIHJldHVybiBtb2R1bGVOYW1lOwotICAgIH0sCi0K
LSAgICAvLyBvbmx5IG5lZWRlZCB1bnRpbCAxLjYuMC1iZXRhLjIgY2FuIGJlIHJlcXVpcmVkCi0g
ICAgX2xvZ0xvb2t1cDogZnVuY3Rpb24gX2xvZ0xvb2t1cChmb3VuZCwgcGFyc2VkTmFtZSwgZGVz
Y3JpcHRpb24pIHsKLSAgICAgIGlmICghX2VtYmVyWydkZWZhdWx0J10uRU5WLkxPR19NT0RVTEVf
UkVTT0xWRVIgJiYgIXBhcnNlZE5hbWUucm9vdC5MT0dfUkVTT0xWRVIpIHsKLSAgICAgICAgcmV0
dXJuOwotICAgICAgfQotCi0gICAgICB2YXIgc3ltYm9sLCBwYWRkaW5nOwotCi0gICAgICBpZiAo
Zm91bmQpIHsKLSAgICAgICAgc3ltYm9sID0gJ1vinJNdJzsKLSAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgIHN5bWJvbCA9ICdbIF0nOwotICAgICAgfQotCi0gICAgICBpZiAocGFyc2VkTmFtZS5mdWxs
TmFtZS5sZW5ndGggPiA2MCkgewotICAgICAgICBwYWRkaW5nID0gJy4nOwotICAgICAgfSBlbHNl
IHsKLSAgICAgICAgcGFkZGluZyA9IG5ldyBBcnJheSg2MCAtIHBhcnNlZE5hbWUuZnVsbE5hbWUu
bGVuZ3RoKS5qb2luKCcuJyk7Ci0gICAgICB9Ci0KLSAgICAgIGlmICghZGVzY3JpcHRpb24pIHsK
LSAgICAgICAgZGVzY3JpcHRpb24gPSB0aGlzLmxvb2t1cERlc2NyaXB0aW9uKHBhcnNlZE5hbWUp
OwotICAgICAgfQotCi0gICAgICBfZW1iZXJbJ2RlZmF1bHQnXS5Mb2dnZXIuaW5mbyhzeW1ib2ws
IHBhcnNlZE5hbWUuZnVsbE5hbWUsIHBhZGRpbmcsIGRlc2NyaXB0aW9uKTsKLSAgICB9LAotCi0g
ICAga25vd25Gb3JUeXBlOiBmdW5jdGlvbiBrbm93bkZvclR5cGUodHlwZSkgewotICAgICAgdmFy
IG1vZHVsZUtleXMgPSB0aGlzLl9tb2R1bGVSZWdpc3RyeS5tb2R1bGVOYW1lcygpOwotCi0gICAg
ICB2YXIgaXRlbXMgPSAoMCwgX2VtYmVyUmVzb2x2ZXJVdGlsc01ha2VEaWN0aW9uYXJ5WydkZWZh
dWx0J10pKCk7Ci0gICAgICBmb3IgKHZhciBpbmRleCA9IDAsIGxlbmd0aCA9IG1vZHVsZUtleXMu
bGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykgewotICAgICAgICB2YXIgbW9kdWxlTmFt
ZSA9IG1vZHVsZUtleXNbaW5kZXhdOwotICAgICAgICB2YXIgZnVsbG5hbWUgPSB0aGlzLnRyYW5z
bGF0ZVRvQ29udGFpbmVyRnVsbG5hbWUodHlwZSwgbW9kdWxlTmFtZSk7Ci0KLSAgICAgICAgaWYg
KGZ1bGxuYW1lKSB7Ci0gICAgICAgICAgaXRlbXNbZnVsbG5hbWVdID0gdHJ1ZTsKLSAgICAgICAg
fQotICAgICAgfQotCi0gICAgICByZXR1cm4gaXRlbXM7Ci0gICAgfSwKLQotICAgIHRyYW5zbGF0
ZVRvQ29udGFpbmVyRnVsbG5hbWU6IGZ1bmN0aW9uIHRyYW5zbGF0ZVRvQ29udGFpbmVyRnVsbG5h
bWUodHlwZSwgbW9kdWxlTmFtZSkgewotICAgICAgdmFyIHByZWZpeCA9IHRoaXMucHJlZml4KHsg
dHlwZTogdHlwZSB9KTsKLQotICAgICAgLy8gTm90ZTogdXNpbmcgc3RyaW5nIG1hbmlwdWxhdGlv
biBoZXJlIHJhdGhlciB0aGFuIHJlZ2V4ZXMgZm9yIGJldHRlciBwZXJmb3JtYW5jZS4KLSAgICAg
IC8vIHBvZCBtb2R1bGVzCi0gICAgICAvLyAnXicgKyBwcmVmaXggKyAnLyguKykvJyArIHR5cGUg
KyAnJCcKLSAgICAgIHZhciBwb2RQcmVmaXggPSBwcmVmaXggKyAnLyc7Ci0gICAgICB2YXIgcG9k
U3VmZml4ID0gJy8nICsgdHlwZTsKLSAgICAgIHZhciBzdGFydCA9IG1vZHVsZU5hbWUuaW5kZXhP
Zihwb2RQcmVmaXgpOwotICAgICAgdmFyIGVuZCA9IG1vZHVsZU5hbWUuaW5kZXhPZihwb2RTdWZm
aXgpOwotCi0gICAgICBpZiAoc3RhcnQgPT09IDAgJiYgZW5kID09PSBtb2R1bGVOYW1lLmxlbmd0
aCAtIHBvZFN1ZmZpeC5sZW5ndGggJiYgbW9kdWxlTmFtZS5sZW5ndGggPiBwb2RQcmVmaXgubGVu
Z3RoICsgcG9kU3VmZml4Lmxlbmd0aCkgewotICAgICAgICByZXR1cm4gdHlwZSArICc6JyArIG1v
ZHVsZU5hbWUuc2xpY2Uoc3RhcnQgKyBwb2RQcmVmaXgubGVuZ3RoLCBlbmQpOwotICAgICAgfQot
Ci0gICAgICAvLyBub24tcG9kIG1vZHVsZXMKLSAgICAgIC8vICdeJyArIHByZWZpeCArICcvJyAr
IHBsdXJhbGl6ZWRUeXBlICsgJy8oLispJCcKLSAgICAgIHZhciBwbHVyYWxpemVkVHlwZSA9IHRo
aXMucGx1cmFsaXplKHR5cGUpOwotICAgICAgdmFyIG5vblBvZFByZWZpeCA9IHByZWZpeCArICcv
JyArIHBsdXJhbGl6ZWRUeXBlICsgJy8nOwotCi0gICAgICBpZiAobW9kdWxlTmFtZS5pbmRleE9m
KG5vblBvZFByZWZpeCkgPT09IDAgJiYgbW9kdWxlTmFtZS5sZW5ndGggPiBub25Qb2RQcmVmaXgu
bGVuZ3RoKSB7Ci0gICAgICAgIHJldHVybiB0eXBlICsgJzonICsgbW9kdWxlTmFtZS5zbGljZShu
b25Qb2RQcmVmaXgubGVuZ3RoKTsKLSAgICAgIH0KLSAgICB9LAotCi0gICAgX2V4dHJhY3REZWZh
dWx0RXhwb3J0OiBmdW5jdGlvbiBfZXh0cmFjdERlZmF1bHRFeHBvcnQobm9ybWFsaXplZE1vZHVs
ZU5hbWUpIHsKLSAgICAgIHZhciBtb2R1bGUgPSByZXF1aXJlKG5vcm1hbGl6ZWRNb2R1bGVOYW1l
LCBudWxsLCBudWxsLCB0cnVlIC8qIGZvcmNlIHN5bmMgKi8pOwotCi0gICAgICBpZiAobW9kdWxl
ICYmIG1vZHVsZVsnZGVmYXVsdCddKSB7Ci0gICAgICAgIG1vZHVsZSA9IG1vZHVsZVsnZGVmYXVs
dCddOwotICAgICAgfQotCi0gICAgICByZXR1cm4gbW9kdWxlOwotICAgIH0KLSAgfSk7Ci0KLSAg
UmVzb2x2ZXIucmVvcGVuQ2xhc3MoewotICAgIG1vZHVsZUJhc2VkUmVzb2x2ZXI6IHRydWUKLSAg
fSk7Ci0KLSAgZXhwb3J0c1snZGVmYXVsdCddID0gUmVzb2x2ZXI7Ci19KTsKLWRlZmluZSgnZW1i
ZXItcmVzb2x2ZXIvdXRpbHMvY2xhc3MtZmFjdG9yeScsIFsnZXhwb3J0cyddLCBmdW5jdGlvbiAo
ZXhwb3J0cykgewotICAndXNlIHN0cmljdCc7Ci0KLSAgZXhwb3J0c1snZGVmYXVsdCddID0gY2xh
c3NGYWN0b3J5OwotCi0gIGZ1bmN0aW9uIGNsYXNzRmFjdG9yeShrbGFzcykgewotICAgIHJldHVy
biB7Ci0gICAgICBjcmVhdGU6IGZ1bmN0aW9uIGNyZWF0ZShpbmplY3Rpb25zKSB7Ci0gICAgICAg
IGlmICh0eXBlb2Yga2xhc3MuZXh0ZW5kID09PSAnZnVuY3Rpb24nKSB7Ci0gICAgICAgICAgcmV0
dXJuIGtsYXNzLmV4dGVuZChpbmplY3Rpb25zKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICByZXR1cm4ga2xhc3M7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9OwotICB9Ci19KTsKLWRl
ZmluZSgiZW1iZXItcmVzb2x2ZXIvdXRpbHMvY3JlYXRlIiwgWyJleHBvcnRzIiwgImVtYmVyIl0s
IGZ1bmN0aW9uIChleHBvcnRzLCBfZW1iZXIpIHsKLSAgInVzZSBzdHJpY3QiOwotCi0gIHZhciBj
cmVhdGUgPSBPYmplY3QuY3JlYXRlIHx8IF9lbWJlclsiZGVmYXVsdCJdLmNyZWF0ZTsKLSAgaWYg
KCEoY3JlYXRlICYmICFjcmVhdGUobnVsbCkuaGFzT3duUHJvcGVydHkpKSB7Ci0gICAgdGhyb3cg
bmV3IEVycm9yKCJUaGlzIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBPYmplY3QuY3JlYXRlKG51
bGwpLCBwbGVhc2UgcG9seWZpbCB3aXRoIGVzNS1zaGFtOiBodHRwOi8vZ2l0LmlvL3lCVTJyZyIp
OwotICB9Ci0KLSAgZXhwb3J0c1siZGVmYXVsdCJdID0gY3JlYXRlOwotfSk7Ci1kZWZpbmUoJ2Vt
YmVyLXJlc29sdmVyL3V0aWxzL21ha2UtZGljdGlvbmFyeScsIFsnZXhwb3J0cycsICdlbWJlci1y
ZXNvbHZlci91dGlscy9jcmVhdGUnXSwgZnVuY3Rpb24gKGV4cG9ydHMsIF9lbWJlclJlc29sdmVy
VXRpbHNDcmVhdGUpIHsKLSAgJ3VzZSBzdHJpY3QnOwotCi0gIGV4cG9ydHNbJ2RlZmF1bHQnXSA9
IG1ha2VEaWN0aW9uYXJ5OwotCi0gIGZ1bmN0aW9uIG1ha2VEaWN0aW9uYXJ5KCkgewotICAgIHZh
ciBjYWNoZSA9ICgwLCBfZW1iZXJSZXNvbHZlclV0aWxzQ3JlYXRlWydkZWZhdWx0J10pKG51bGwp
OwotICAgIGNhY2hlWydfZGljdCddID0gbnVsbDsKLSAgICBkZWxldGUgY2FjaGVbJ19kaWN0J107
Ci0gICAgcmV0dXJuIGNhY2hlOwotICB9Ci19KTsKLWRlZmluZSgnZW1iZXItcmVzb2x2ZXIvdXRp
bHMvbW9kdWxlLXJlZ2lzdHJ5JywgWydleHBvcnRzJywgJ2VtYmVyJ10sIGZ1bmN0aW9uIChleHBv
cnRzLCBfZW1iZXIpIHsKLSAgLypnbG9iYWxzIHJlcXVpcmVqcywgcmVxdWlyZSAqLwotCi0gICd1
c2Ugc3RyaWN0JzsKLQotICBpZiAodHlwZW9mIHJlcXVpcmVqcy5lbnRyaWVzID09PSAndW5kZWZp
bmVkJykgewotICAgIHJlcXVpcmVqcy5lbnRyaWVzID0gcmVxdWlyZWpzLl9lYWtfc2VlbjsKLSAg
fQotCi0gIGZ1bmN0aW9uIE1vZHVsZVJlZ2lzdHJ5KGVudHJpZXMpIHsKLSAgICB0aGlzLl9lbnRy
aWVzID0gZW50cmllcyB8fCByZXF1aXJlanMuZW50cmllczsKLSAgfQotCi0gIE1vZHVsZVJlZ2lz
dHJ5LnByb3RvdHlwZS5tb2R1bGVOYW1lcyA9IGZ1bmN0aW9uIE1vZHVsZVJlZ2lzdHJ5X21vZHVs
ZU5hbWVzKCkgewotICAgIHJldHVybiAoT2JqZWN0LmtleXMgfHwgX2VtYmVyWydkZWZhdWx0J10u
a2V5cykodGhpcy5fZW50cmllcyk7Ci0gIH07Ci0KLSAgTW9kdWxlUmVnaXN0cnkucHJvdG90eXBl
LmhhcyA9IGZ1bmN0aW9uIE1vZHVsZVJlZ2lzdHJ5X2hhcyhtb2R1bGVOYW1lKSB7Ci0gICAgcmV0
dXJuIG1vZHVsZU5hbWUgaW4gdGhpcy5fZW50cmllczsKLSAgfTsKLQotICBNb2R1bGVSZWdpc3Ry
eS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gTW9kdWxlUmVnaXN0cnlfZ2V0KG1vZHVsZU5hbWUp
IHsKLSAgICB2YXIgZXhwb3J0TmFtZSA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMSB8fCBhcmd1bWVu
dHNbMV0gPT09IHVuZGVmaW5lZCA/ICdkZWZhdWx0JyA6IGFyZ3VtZW50c1sxXTsKLQotICAgIHZh
ciBtb2R1bGUgPSByZXF1aXJlKG1vZHVsZU5hbWUpOwotICAgIHJldHVybiBtb2R1bGUgJiYgbW9k
dWxlW2V4cG9ydE5hbWVdOwotICB9OwotCi0gIGV4cG9ydHNbJ2RlZmF1bHQnXSA9IE1vZHVsZVJl
Z2lzdHJ5OwotfSk7Ci07LyoganNoaW50IGlnbm9yZTpzdGFydCAqLwotCi0KLQotLyoganNoaW50
IGlnbm9yZTplbmQgKi8KLS8vIyBzb3VyY2VNYXBwaW5nVVJMPXZlbmRvci5tYXAKZGlmZiAtLWdp
dCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0
ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvYm93ZXIuanNvbiBiL1BlcmZvcm1hbmNlVGVzdHMvU3Bl
ZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMv
Ym93ZXIuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNWNlZTE0NWE2MGYxYzg2MTA5ZWYzNWM3MTEwMTlkMWVh
MzVhOTQ2Ci0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9y
ZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy9ib3dlci5qc29u
CkBAIC0wLDAgKzEsNyBAQAoreworICAibmFtZSI6ICJ0b2RvbXZjIiwKKyAgImRlcGVuZGVuY2ll
cyI6IHsKKyAgICAiZW1iZXIiOiAiMi4xNC4xIiwKKyAgICAiZW1iZXItY2xpLXNoaW1zIjogIjAu
MS4zIgorICB9Cit9CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jl
c291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL2NvbmZpZy9lbnZp
cm9ubWVudC5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9t
dmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvY29uZmlnL2Vudmlyb25tZW50LmpzCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjdkMzBkOWI5YzcxYjNhNjQzZDNlZTYyNzE4Y2RiZjRhNjgzYzZkOWYKLS0tIC9k
ZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2Rv
bXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL2NvbmZpZy9lbnZpcm9ubWVudC5qcwpA
QCAtMCwwICsxLDUxIEBACisvKiBqc2hpbnQgbm9kZTogdHJ1ZSAqLworCittb2R1bGUuZXhwb3J0
cyA9IGZ1bmN0aW9uIChlbnZpcm9ubWVudCkgeworICAgIHZhciBFTlYgPSB7CisgICAgICAgIG1v
ZHVsZVByZWZpeDogJ3RvZG9tdmMnLAorICAgICAgICBlbnZpcm9ubWVudDogZW52aXJvbm1lbnQs
CisgICAgICAgIGJhc2VVUkw6IG51bGwsCisgICAgICAgIGxvY2F0aW9uVHlwZTogJ2hhc2gnLAor
ICAgICAgICBFbWJlckVOVjogeworICAgICAgICAgICAgRkVBVFVSRVM6IHsKKyAgICAgICAgICAg
ICAgICAvLyBIZXJlIHlvdSBjYW4gZW5hYmxlIGV4cGVyaW1lbnRhbCBmZWF0dXJlcyBvbiBhbiBl
bWJlciBjYW5hcnkgYnVpbGQKKyAgICAgICAgICAgICAgICAvLyBlLmcuICd3aXRoLWNvbnRyb2xs
ZXInOiB0cnVlCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgRVhURU5EX1BST1RPVFlQRVM6
IHsKKyAgICAgICAgICAgICAgICAvLyBQcmV2ZW50IEVtYmVyIERhdGEgZnJvbSBvdmVycmlkaW5n
IERhdGUucGFyc2UuCisgICAgICAgICAgICAgICAgRGF0ZTogZmFsc2UKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSwKKworICAgICAgICBBUFA6IHsKKyAgICAgICAgICAgIC8vIEhlcmUgeW91IGNh
biBwYXNzIGZsYWdzL29wdGlvbnMgdG8geW91ciBhcHBsaWNhdGlvbiBpbnN0YW5jZQorICAgICAg
ICAgICAgLy8gd2hlbiBpdCBpcyBjcmVhdGVkCisgICAgICAgIH0KKyAgICB9OworCisgICAgLy8g
aWYgKGVudmlyb25tZW50ID09PSAnZGV2ZWxvcG1lbnQnKSB7CisgICAgLy8gICAgIEVOVi5BUFAu
TE9HX1JFU09MVkVSID0gdHJ1ZTsKKyAgICAvLyAgICAgRU5WLkFQUC5MT0dfQUNUSVZFX0dFTkVS
QVRJT04gPSB0cnVlOworICAgIC8vICAgICBFTlYuQVBQLkxPR19UUkFOU0lUSU9OUyA9IHRydWU7
CisgICAgLy8gICAgIEVOVi5BUFAuTE9HX1RSQU5TSVRJT05TX0lOVEVSTkFMID0gdHJ1ZTsKKyAg
ICAvLyAgICAgRU5WLkFQUC5MT0dfVklFV19MT09LVVBTID0gdHJ1ZTsKKyAgICAvLyB9CisKKyAg
ICBpZiAoZW52aXJvbm1lbnQgPT09ICd0ZXN0JykgeworICAgICAgICAvLyBUZXN0ZW0gcHJlZmVy
cyB0aGlzLi4uCisgICAgICAgIEVOVi5yb290VVJMID0gJy8nOworICAgICAgICBFTlYubG9jYXRp
b25UeXBlID0gJ25vbmUnOworCisgICAgICAgIC8vIGtlZXAgdGVzdCBjb25zb2xlIG91dHB1dCBx
dWlldGVyCisgICAgICAgIEVOVi5BUFAuTE9HX0FDVElWRV9HRU5FUkFUSU9OID0gZmFsc2U7Cisg
ICAgICAgIEVOVi5BUFAuTE9HX1ZJRVdfTE9PS1VQUyA9IGZhbHNlOworCisgICAgICAgIEVOVi5B
UFAucm9vdEVsZW1lbnQgPSAnI2VtYmVyLXRlc3RpbmcnOworICAgIH0KKworICAgIC8vIGlmIChl
bnZpcm9ubWVudCA9PT0gJ3Byb2R1Y3Rpb24nKSB7CisKKyAgICAvLyB9CisKKyAgICByZXR1cm4g
RU5WOworfTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3Vy
Y2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvY3Jvc3Nkb21haW4ueG1s
IGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRl
Y3R1cmUtZXhhbXBsZXMvZW1iZXJqcy9jcm9zc2RvbWFpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDBjMTZhN2EwN2IzN2U1ZDVmN2UwZTU2YzgyOWY3MjAwNjc0NTg0MDMuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VU
ZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMv
ZW1iZXJqcy9jcm9zc2RvbWFpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08
P3htbCB2ZXJzaW9uPSIxLjAiPz4KLTwhRE9DVFlQRSBjcm9zcy1kb21haW4tcG9saWN5IFNZU1RF
TSAiaHR0cDovL3d3dy5hZG9iZS5jb20veG1sL2R0ZHMvY3Jvc3MtZG9tYWluLXBvbGljeS5kdGQi
PgotPGNyb3NzLWRvbWFpbi1wb2xpY3k+Ci0gIDwhLS0gUmVhZCB0aGlzOiB3d3cuYWRvYmUuY29t
L2Rldm5ldC9hcnRpY2xlcy9jcm9zc2RvbWFpbl9wb2xpY3lfZmlsZV9zcGVjLmh0bWwgLS0+Ci0K
LSAgPCEtLSBNb3N0IHJlc3RyaWN0aXZlIHBvbGljeTogLS0+Ci0gIDxzaXRlLWNvbnRyb2wgcGVy
bWl0dGVkLWNyb3NzLWRvbWFpbi1wb2xpY2llcz0ibm9uZSIvPgotCi0gIDwhLS0gTGVhc3QgcmVz
dHJpY3RpdmUgcG9saWN5OiAtLT4KLSAgPCEtLQotICA8c2l0ZS1jb250cm9sIHBlcm1pdHRlZC1j
cm9zcy1kb21haW4tcG9saWNpZXM9ImFsbCIvPgotICA8YWxsb3ctYWNjZXNzLWZyb20gZG9tYWlu
PSIqIiB0by1wb3J0cz0iKiIgc2VjdXJlPSJmYWxzZSIvPgotICA8YWxsb3ctaHR0cC1yZXF1ZXN0
LWhlYWRlcnMtZnJvbSBkb21haW49IioiIGhlYWRlcnM9IioiIHNlY3VyZT0iZmFsc2UiLz4KLSAg
LS0+Ci08L2Nyb3NzLWRvbWFpbi1wb2xpY3k+CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJl
cmpzL2Rpc3QvYXNzZXRzL3RvZG9tdmMtNjc3NDkxYmE0MmUxMGI1ZmExNjg3NWQ4YmNhZjFjNmMu
anMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hp
dGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL2Rpc3QvYXNzZXRzL3RvZG9tdmMtNjc3NDkxYmE0MmUx
MGI1ZmExNjg3NWQ4YmNhZjFjNmMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNThiMWY3MTA3ZGM0MThiYjAyZmZk
YWI4MjcwNzc2MDQ0ODE3OWNmMgotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMv
U3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVy
anMvZGlzdC9hc3NldHMvdG9kb212Yy02Nzc0OTFiYTQyZTEwYjVmYTE2ODc1ZDhiY2FmMWM2Yy5q
cwpAQCAtMCwwICsxLDMwIEBACisidXNlIHN0cmljdCIKK2RlZmluZSgidG9kb212Yy9hcHAiLFsi
ZXhwb3J0cyIsImVtYmVyIiwidG9kb212Yy9yZXNvbHZlciIsImVtYmVyLWxvYWQtaW5pdGlhbGl6
ZXJzIiwidG9kb212Yy9jb25maWcvZW52aXJvbm1lbnQiXSxmdW5jdGlvbihlLHQsbyxuLGwpe3Zh
ciBpPXZvaWQgMAordC5kZWZhdWx0Lk1PREVMX0ZBQ1RPUllfSU5KRUNUSU9OUz0hMCxpPXQuZGVm
YXVsdC5BcHBsaWNhdGlvbi5leHRlbmQoe21vZHVsZVByZWZpeDpsLmRlZmF1bHQubW9kdWxlUHJl
Zml4LHBvZE1vZHVsZVByZWZpeDpsLmRlZmF1bHQucG9kTW9kdWxlUHJlZml4LFJlc29sdmVyOm8u
ZGVmYXVsdH0pLCgwLG4uZGVmYXVsdCkoaSxsLmRlZmF1bHQubW9kdWxlUHJlZml4KSxlLmRlZmF1
bHQ9aX0pLGRlZmluZSgidG9kb212Yy9jb21wb25lbnRzL3RvZG8taXRlbSIsWyJleHBvcnRzIiwi
ZW1iZXIiXSxmdW5jdGlvbihlLHQpe2UuZGVmYXVsdD10LmRlZmF1bHQuQ29tcG9uZW50LmV4dGVu
ZCh7cmVwbzp0LmRlZmF1bHQuaW5qZWN0LnNlcnZpY2UoKSx0YWdOYW1lOiJsaSIsZWRpdGluZzoh
MSxjbGFzc05hbWVCaW5kaW5nczpbInRvZG8uY29tcGxldGVkIiwiZWRpdGluZyJdLGFjdGlvbnM6
e3N0YXJ0RWRpdGluZzpmdW5jdGlvbigpe3RoaXMuZ2V0KCJvblN0YXJ0RWRpdCIpKCksdGhpcy5z
ZXQoImVkaXRpbmciLCEwKSx0LmRlZmF1bHQucnVuLnNjaGVkdWxlT25jZSgiYWZ0ZXJSZW5kZXIi
LHRoaXMsImZvY3VzSW5wdXQiKX0sZG9uZUVkaXRpbmc6ZnVuY3Rpb24oZSl7dGhpcy5nZXQoImVk
aXRpbmciKSYmKHQuZGVmYXVsdC5pc0JsYW5rKGUpP3RoaXMuc2VuZCgicmVtb3ZlVG9kbyIpOih0
aGlzLnNldCgidG9kby50aXRsZSIsZS50cmltKCkpLHRoaXMuc2V0KCJlZGl0aW5nIiwhMSksdGhp
cy5nZXQoIm9uRW5kRWRpdCIpKCkpKX0saGFuZGxlS2V5ZG93bjpmdW5jdGlvbihlKXsxMz09PWUu
a2V5Q29kZT9lLnRhcmdldC5ibHVyKCk6Mjc9PT1lLmtleUNvZGUmJnRoaXMuc2V0KCJlZGl0aW5n
IiwhMSl9LHRvZ2dsZUNvbXBsZXRlZDpmdW5jdGlvbihlKXt2YXIgbz10aGlzLmdldCgidG9kbyIp
Cit0LmRlZmF1bHQuc2V0KG8sImNvbXBsZXRlZCIsZS50YXJnZXQuY2hlY2tlZCksdGhpcy5nZXQo
InJlcG8iKS5wZXJzaXN0KCl9LHJlbW92ZVRvZG86ZnVuY3Rpb24oKXt0aGlzLmdldCgicmVwbyIp
LmRlbGV0ZSh0aGlzLmdldCgidG9kbyIpKX19LGZvY3VzSW5wdXQ6ZnVuY3Rpb24oKXt0aGlzLmVs
ZW1lbnQucXVlcnlTZWxlY3RvcigiaW5wdXQuZWRpdCIpLmZvY3VzKCl9fSl9KSxkZWZpbmUoInRv
ZG9tdmMvY29tcG9uZW50cy90b2RvLWxpc3QiLFsiZXhwb3J0cyIsImVtYmVyIl0sZnVuY3Rpb24o
ZSx0KXtlLmRlZmF1bHQ9dC5kZWZhdWx0LkNvbXBvbmVudC5leHRlbmQoe3JlcG86dC5kZWZhdWx0
LmluamVjdC5zZXJ2aWNlKCksdGFnTmFtZToic2VjdGlvbiIsZWxlbWVudElkOiJtYWluIixjYW5U
b2dnbGU6ITAsYWxsQ29tcGxldGVkOnQuZGVmYXVsdC5jb21wdXRlZCgidG9kb3MuQGVhY2guY29t
cGxldGVkIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldCgidG9kb3MiKS5pc0V2ZXJ5KCJjb21w
bGV0ZWQiKX0pLGFjdGlvbnM6e2VuYWJsZVRvZ2dsZTpmdW5jdGlvbigpe3RoaXMuc2V0KCJjYW5U
b2dnbGUiLCEwKX0sZGlzYWJsZVRvZ2dsZTpmdW5jdGlvbigpe3RoaXMuc2V0KCJjYW5Ub2dnbGUi
LCExKX0sdG9nZ2xlQWxsOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nZXQoImFsbENvbXBsZXRlZCIp
Cit0aGlzLmdldCgidG9kb3MiKS5mb3JFYWNoKGZ1bmN0aW9uKG8pe3JldHVybiB0LmRlZmF1bHQu
c2V0KG8sImNvbXBsZXRlZCIsIWUpfSksdGhpcy5nZXQoInJlcG8iKS5wZXJzaXN0KCl9fX0pfSks
ZGVmaW5lKCJ0b2RvbXZjL2NvbnRyb2xsZXJzL2FjdGl2ZSIsWyJleHBvcnRzIiwiZW1iZXIiXSxm
dW5jdGlvbihlLHQpe2UuZGVmYXVsdD10LmRlZmF1bHQuQ29udHJvbGxlci5leHRlbmQoe3RvZG9z
OnQuZGVmYXVsdC5jb21wdXRlZC5maWx0ZXJCeSgibW9kZWwiLCJjb21wbGV0ZWQiLCExKX0pfSks
ZGVmaW5lKCJ0b2RvbXZjL2NvbnRyb2xsZXJzL2FwcGxpY2F0aW9uIixbImV4cG9ydHMiLCJlbWJl
ciJdLGZ1bmN0aW9uKGUsdCl7ZS5kZWZhdWx0PXQuZGVmYXVsdC5Db250cm9sbGVyLmV4dGVuZCh7
cmVwbzp0LmRlZmF1bHQuaW5qZWN0LnNlcnZpY2UoKSxyZW1haW5pbmc6dC5kZWZhdWx0LmNvbXB1
dGVkLmZpbHRlckJ5KCJtb2RlbCIsImNvbXBsZXRlZCIsITEpLGNvbXBsZXRlZDp0LmRlZmF1bHQu
Y29tcHV0ZWQuZmlsdGVyQnkoIm1vZGVsIiwiY29tcGxldGVkIiksYWN0aW9uczp7Y3JlYXRlVG9k
bzpmdW5jdGlvbihlKXsxMyE9PWUua2V5Q29kZXx8dC5kZWZhdWx0LmlzQmxhbmsoZS50YXJnZXQu
dmFsdWUpfHwodGhpcy5nZXQoInJlcG8iKS5hZGQoe3RpdGxlOmUudGFyZ2V0LnZhbHVlLnRyaW0o
KSxjb21wbGV0ZWQ6ITF9KSxlLnRhcmdldC52YWx1ZT0iIil9LGNsZWFyQ29tcGxldGVkOmZ1bmN0
aW9uKCl7dGhpcy5nZXQoIm1vZGVsIikucmVtb3ZlT2JqZWN0cyh0aGlzLmdldCgiY29tcGxldGVk
IikpLHRoaXMuZ2V0KCJyZXBvIikucGVyc2lzdCgpfX19KX0pLGRlZmluZSgidG9kb212Yy9jb250
cm9sbGVycy9jb21wbGV0ZWQiLFsiZXhwb3J0cyIsImVtYmVyIl0sZnVuY3Rpb24oZSx0KXtlLmRl
ZmF1bHQ9dC5kZWZhdWx0LkNvbnRyb2xsZXIuZXh0ZW5kKHt0b2Rvczp0LmRlZmF1bHQuY29tcHV0
ZWQuZmlsdGVyQnkoIm1vZGVsIiwiY29tcGxldGVkIiwhMCl9KX0pLGRlZmluZSgidG9kb212Yy9o
ZWxwZXJzL2FwcC12ZXJzaW9uIixbImV4cG9ydHMiLCJlbWJlciIsInRvZG9tdmMvY29uZmlnL2Vu
dmlyb25tZW50IiwiZW1iZXItY2xpLWFwcC12ZXJzaW9uL3V0aWxzL3JlZ2V4cCJdLGZ1bmN0aW9u
KGUsdCxvLG4pe2Z1bmN0aW9uIGwoZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aDw9MXx8dm9pZCAw
PT09YXJndW1lbnRzWzFdP3t9OmFyZ3VtZW50c1sxXQorcmV0dXJuIHQuaGlkZVNoYT9pLm1hdGNo
KG4udmVyc2lvblJlZ0V4cClbMF06dC5oaWRlVmVyc2lvbj9pLm1hdGNoKG4uc2hhUmVnRXhwKVsw
XTppfWUuYXBwVmVyc2lvbj1sCit2YXIgaT1vLmRlZmF1bHQuQVBQLnZlcnNpb24KK2UuZGVmYXVs
dD10LmRlZmF1bHQuSGVscGVyLmhlbHBlcihsKX0pLGRlZmluZSgidG9kb212Yy9oZWxwZXJzL2d0
IixbImV4cG9ydHMiLCJlbWJlciJdLGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbyhlKXt2YXIgdD1u
KGUsMikKK3JldHVybiB0WzBdPnRbMV19dmFyIG49ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7
dmFyIG89W10sbj0hMCxsPSExLGk9dm9pZCAwCit0cnl7Zm9yKHZhciBhLGQ9ZVtTeW1ib2wuaXRl
cmF0b3JdKCk7IShuPShhPWQubmV4dCgpKS5kb25lKSYmKG8ucHVzaChhLnZhbHVlKSwhdHx8by5s
ZW5ndGghPT10KTtuPSEwKTt9Y2F0Y2goZSl7bD0hMCxpPWV9ZmluYWxseXt0cnl7IW4mJmQucmV0
dXJuJiZkLnJldHVybigpfWZpbmFsbHl7aWYobCl0aHJvdyBpfX1yZXR1cm4gb31yZXR1cm4gZnVu
Y3Rpb24odCxvKXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB0CitpZihTeW1ib2wuaXRlcmF0
b3IgaW4gT2JqZWN0KHQpKXJldHVybiBlKHQsbykKK3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFs
aWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UiKX19KCkKK2Uu
Z3Q9byxlLmRlZmF1bHQ9dC5kZWZhdWx0LkhlbHBlci5oZWxwZXIobyl9KSxkZWZpbmUoInRvZG9t
dmMvaGVscGVycy9wbHVyYWxpemUiLFsiZXhwb3J0cyIsImVtYmVyIiwiZW1iZXItaW5mbGVjdG9y
Il0sZnVuY3Rpb24oZSx0LG8pe2Z1bmN0aW9uIG4oZSl7dmFyIHQ9bChlLDIpLG49dFswXQorcmV0
dXJuIDE9PT10WzFdP246KDAsby5wbHVyYWxpemUpKG4pfXZhciBsPWZ1bmN0aW9uKCl7ZnVuY3Rp
b24gZShlLHQpe3ZhciBvPVtdLG49ITAsbD0hMSxpPXZvaWQgMAordHJ5e2Zvcih2YXIgYSxkPWVb
U3ltYm9sLml0ZXJhdG9yXSgpOyEobj0oYT1kLm5leHQoKSkuZG9uZSkmJihvLnB1c2goYS52YWx1
ZSksIXR8fG8ubGVuZ3RoIT09dCk7bj0hMCk7fWNhdGNoKGUpe2w9ITAsaT1lfWZpbmFsbHl7dHJ5
eyFuJiZkLnJldHVybiYmZC5yZXR1cm4oKX1maW5hbGx5e2lmKGwpdGhyb3cgaX19cmV0dXJuIG99
cmV0dXJuIGZ1bmN0aW9uKHQsbyl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gdAoraWYoU3lt
Ym9sLml0ZXJhdG9yIGluIE9iamVjdCh0KSlyZXR1cm4gZSh0LG8pCit0aHJvdyBuZXcgVHlwZUVy
cm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNl
Iil9fSgpCitlLnBsdXJhbGl6ZUhlbHBlcj1uLGUuZGVmYXVsdD10LmRlZmF1bHQuSGVscGVyLmhl
bHBlcihuKX0pLGRlZmluZSgidG9kb212Yy9oZWxwZXJzL3Npbmd1bGFyaXplIixbImV4cG9ydHMi
LCJlbWJlci1pbmZsZWN0b3IvbGliL2hlbHBlcnMvc2luZ3VsYXJpemUiXSxmdW5jdGlvbihlLHQp
e2UuZGVmYXVsdD10LmRlZmF1bHR9KSxkZWZpbmUoInRvZG9tdmMvaW5pdGlhbGl6ZXJzL2FwcC12
ZXJzaW9uIixbImV4cG9ydHMiLCJlbWJlci1jbGktYXBwLXZlcnNpb24vaW5pdGlhbGl6ZXItZmFj
dG9yeSIsInRvZG9tdmMvY29uZmlnL2Vudmlyb25tZW50Il0sZnVuY3Rpb24oZSx0LG8pe3ZhciBu
PW8uZGVmYXVsdC5BUFAsbD1uLm5hbWUsaT1uLnZlcnNpb24KK2UuZGVmYXVsdD17bmFtZToiQXBw
IFZlcnNpb24iLGluaXRpYWxpemU6KDAsdC5kZWZhdWx0KShsLGkpfX0pLGRlZmluZSgidG9kb212
Yy9pbml0aWFsaXplcnMvY29udGFpbmVyLWRlYnVnLWFkYXB0ZXIiLFsiZXhwb3J0cyIsImVtYmVy
LXJlc29sdmVyL2NvbnRhaW5lci1kZWJ1Zy1hZGFwdGVyIl0sZnVuY3Rpb24oZSx0KXtlLmRlZmF1
bHQ9e25hbWU6ImNvbnRhaW5lci1kZWJ1Zy1hZGFwdGVyIixpbml0aWFsaXplOmZ1bmN0aW9uKCl7
dmFyIGU9YXJndW1lbnRzWzFdfHxhcmd1bWVudHNbMF0KK2UucmVnaXN0ZXIoImNvbnRhaW5lci1k
ZWJ1Zy1hZGFwdGVyOm1haW4iLHQuZGVmYXVsdCksZS5pbmplY3QoImNvbnRhaW5lci1kZWJ1Zy1h
ZGFwdGVyOm1haW4iLCJuYW1lc3BhY2UiLCJhcHBsaWNhdGlvbjptYWluIil9fX0pLGRlZmluZSgi
dG9kb212Yy9pbml0aWFsaXplcnMvZXhwb3J0LWFwcGxpY2F0aW9uLWdsb2JhbCIsWyJleHBvcnRz
IiwiZW1iZXIiLCJ0b2RvbXZjL2NvbmZpZy9lbnZpcm9ubWVudCJdLGZ1bmN0aW9uKGUsdCxvKXtm
dW5jdGlvbiBuKCl7dmFyIGU9YXJndW1lbnRzWzFdfHxhcmd1bWVudHNbMF0KK2lmKCExIT09by5k
ZWZhdWx0LmV4cG9ydEFwcGxpY2F0aW9uR2xvYmFsKXt2YXIgbgoraWYoInVuZGVmaW5lZCIhPXR5
cGVvZiB3aW5kb3cpbj13aW5kb3cKK2Vsc2UgaWYoInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWwp
bj1nbG9iYWwKK2Vsc2V7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBzZWxmKXJldHVybgorbj1zZWxm
fXZhciBsLGk9by5kZWZhdWx0LmV4cG9ydEFwcGxpY2F0aW9uR2xvYmFsCitsPSJzdHJpbmciPT10
eXBlb2YgaT9pOnQuZGVmYXVsdC5TdHJpbmcuY2xhc3NpZnkoby5kZWZhdWx0Lm1vZHVsZVByZWZp
eCksbltsXXx8KG5bbF09ZSxlLnJlb3Blbih7d2lsbERlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLl9z
dXBlci5hcHBseSh0aGlzLGFyZ3VtZW50cyksZGVsZXRlIG5bbF19fSkpfX1lLmluaXRpYWxpemU9
bixlLmRlZmF1bHQ9e25hbWU6ImV4cG9ydC1hcHBsaWNhdGlvbi1nbG9iYWwiLGluaXRpYWxpemU6
bn19KSxkZWZpbmUoInRvZG9tdmMvcmVzb2x2ZXIiLFsiZXhwb3J0cyIsImVtYmVyLXJlc29sdmVy
Il0sZnVuY3Rpb24oZSx0KXtlLmRlZmF1bHQ9dC5kZWZhdWx0fSksZGVmaW5lKCJ0b2RvbXZjL3Jv
dXRlciIsWyJleHBvcnRzIiwiZW1iZXIiLCJ0b2RvbXZjL2NvbmZpZy9lbnZpcm9ubWVudCJdLGZ1
bmN0aW9uKGUsdCxvKXt2YXIgbj10LmRlZmF1bHQuUm91dGVyLmV4dGVuZCh7bG9jYXRpb246by5k
ZWZhdWx0LmxvY2F0aW9uVHlwZSxyb290VVJMOm8uZGVmYXVsdC5yb290VVJMfSkKK24ubWFwKGZ1
bmN0aW9uKCl7dGhpcy5yb3V0ZSgiYWN0aXZlIiksdGhpcy5yb3V0ZSgiY29tcGxldGVkIil9KSxl
LmRlZmF1bHQ9bn0pLGRlZmluZSgidG9kb212Yy9yb3V0ZXMvYXBwbGljYXRpb24iLFsiZXhwb3J0
cyIsImVtYmVyIl0sZnVuY3Rpb24oZSx0KXtlLmRlZmF1bHQ9dC5kZWZhdWx0LlJvdXRlLmV4dGVu
ZCh7cmVwbzp0LmRlZmF1bHQuaW5qZWN0LnNlcnZpY2UoKSxtb2RlbDpmdW5jdGlvbigpe3JldHVy
biB0aGlzLmdldCgicmVwbyIpLmZpbmRBbGwoKX19KX0pLGRlZmluZSgidG9kb212Yy9zZXJ2aWNl
cy9hamF4IixbImV4cG9ydHMiLCJlbWJlci1hamF4L3NlcnZpY2VzL2FqYXgiXSxmdW5jdGlvbihl
LHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJkZWZhdWx0Iix7ZW51bWVyYWJsZTohMCxnZXQ6
ZnVuY3Rpb24oKXtyZXR1cm4gdC5kZWZhdWx0fX0pfSksZGVmaW5lKCJ0b2RvbXZjL3NlcnZpY2Vz
L21lbW9yeSIsWyJleHBvcnRzIl0sZnVuY3Rpb24oZSl7KGZ1bmN0aW9uKGUpe3ZhciB0PXt9LG89
e30KK3QubGVuZ3RoPTAsdC5nZXRJdGVtPWZ1bmN0aW9uKGUpe3JldHVybiBvW2VdfHxudWxsfSx0
LnNldEl0ZW09ZnVuY3Rpb24oZSxuKXt2b2lkIDA9PT1uP3QucmVtb3ZlSXRlbShlKTooby5oYXNP
d25Qcm9wZXJ0eShlKXx8dC5sZW5ndGgrKyxvW2VdPSIiK24pfSx0LnJlbW92ZUl0ZW09ZnVuY3Rp
b24oZSl7by5oYXNPd25Qcm9wZXJ0eShlKSYmKGRlbGV0ZSBvW2VdLHQubGVuZ3RoLS0pfSx0Lmtl
eT1mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmtleXMobylbZV18fG51bGx9LHQuY2xlYXI9ZnVu
Y3Rpb24oKXtvPXt9LHQubGVuZ3RoPTB9LGUubG9jYWxTdG9yYWdlTWVtb3J5PXR9KSh3aW5kb3cp
fSksZGVmaW5lKCJ0b2RvbXZjL3NlcnZpY2VzL3JlcG8iLFsiZXhwb3J0cyIsImVtYmVyIiwidG9k
b212Yy9zZXJ2aWNlcy9tZW1vcnkiXSxmdW5jdGlvbihlLHQsbyl7ZS5kZWZhdWx0PXQuZGVmYXVs
dC5TZXJ2aWNlLmV4dGVuZCh7bGFzdElkOjAsZGF0YTpudWxsLGZpbmRBbGw6ZnVuY3Rpb24oKXty
ZXR1cm4gdGhpcy5nZXQoImRhdGEiKXx8dGhpcy5zZXQoImRhdGEiLEpTT04ucGFyc2Uod2luZG93
LmxvY2FsU3RvcmFnZU1lbW9yeS5nZXRJdGVtKCJ0b2RvcyIpfHwiW10iKSl9LGFkZDpmdW5jdGlv
bihlKXt2YXIgdD1PYmplY3QuYXNzaWduKHtpZDp0aGlzLmluY3JlbWVudFByb3BlcnR5KCJsYXN0
SWQiKX0sZSkKK3JldHVybiB0aGlzLmdldCgiZGF0YSIpLnB1c2hPYmplY3QodCksdGhpcy5wZXJz
aXN0KCksdH0sZGVsZXRlOmZ1bmN0aW9uKGUpe3RoaXMuZ2V0KCJkYXRhIikucmVtb3ZlT2JqZWN0
KGUpLHRoaXMucGVyc2lzdCgpfSxwZXJzaXN0OmZ1bmN0aW9uKCl7d2luZG93LmxvY2FsU3RvcmFn
ZU1lbW9yeS5zZXRJdGVtKCJ0b2RvcyIsSlNPTi5zdHJpbmdpZnkodGhpcy5nZXQoImRhdGEiKSkp
fX0pfSksZGVmaW5lKCJ0b2RvbXZjL3RlbXBsYXRlcy9hY3RpdmUiLFsiZXhwb3J0cyJdLGZ1bmN0
aW9uKGUpe2UuZGVmYXVsdD1FbWJlci5IVE1MQmFycy50ZW1wbGF0ZSh7aWQ6ImFBc2M0THQ4Iixi
bG9jazoneyJzdGF0ZW1lbnRzIjpbWzEsWzMzLFsidG9kby1saXN0Il0sbnVsbCxbWyJ0b2RvcyJd
LFtbMjgsWyJ0b2RvcyJdXV1dXSxmYWxzZV1dLCJsb2NhbHMiOltdLCJuYW1lZCI6W10sInlpZWxk
cyI6W10sImhhc1BhcnRpYWxzIjpmYWxzZX0nLG1ldGE6e21vZHVsZU5hbWU6InRvZG9tdmMvdGVt
cGxhdGVzL2FjdGl2ZS5oYnMifX0pfSksZGVmaW5lKCJ0b2RvbXZjL3RlbXBsYXRlcy9hcHBsaWNh
dGlvbiIsWyJleHBvcnRzIl0sZnVuY3Rpb24oZSl7ZS5kZWZhdWx0PUVtYmVyLkhUTUxCYXJzLnRl
bXBsYXRlKHtpZDoiQllueXo1T04iLGJsb2NrOid7InN0YXRlbWVudHMiOltbMTEsInNlY3Rpb24i
LFtdXSxbMTUsImlkIiwidG9kb2FwcCJdLFsxM10sWzAsIlxcbiAgIl0sWzExLCJoZWFkZXIiLFtd
XSxbMTUsImlkIiwiaGVhZGVyIl0sWzEzXSxbMCwiXFxuICAgICJdLFsxMSwiaDEiLFtdXSxbMTNd
LFswLCJ0b2RvcyJdLFsxNF0sWzAsIlxcbiAgICAiXSxbMTEsImlucHV0IixbXV0sWzE1LCJ0eXBl
IiwidGV4dCJdLFsxNSwiaWQiLCJuZXctdG9kbyJdLFsxNiwib25rZXlkb3duIixbMzMsWyJhY3Rp
b24iXSxbWzI4LFtudWxsXV0sImNyZWF0ZVRvZG8iXSxudWxsXSxudWxsXSxbMTUsInBsYWNlaG9s
ZGVyIiwiV2hhdCBuZWVkcyB0byBiZSBkb25lPyJdLFsxNSwiYXV0b2ZvY3VzIiwiIl0sWzEzXSxb
MTRdLFswLCJcXG4gICJdLFsxNF0sWzAsIlxcbiAgICAiXSxbMSxbMjYsWyJvdXRsZXQiXV0sZmFs
c2VdLFswLCJcXG4iXSxbNixbImlmIl0sW1szMyxbImd0Il0sW1syOCxbIm1vZGVsIiwibGVuZ3Ro
Il1dLDBdLG51bGxdXSxudWxsLHsic3RhdGVtZW50cyI6W1swLCIgICAgICAiXSxbMTEsImZvb3Rl
ciIsW11dLFsxNSwiaWQiLCJmb290ZXIiXSxbMTNdLFswLCJcXG4gICAgICAgICJdLFsxMSwic3Bh
biIsW11dLFsxNSwiaWQiLCJ0b2RvLWNvdW50Il0sWzEzXSxbMTEsInN0cm9uZyIsW11dLFsxM10s
WzEsWzI4LFsicmVtYWluaW5nIiwibGVuZ3RoIl1dLGZhbHNlXSxbMTRdLFswLCIgIl0sWzEsWzMz
LFsicGx1cmFsaXplIl0sWyJpdGVtIixbMjgsWyJyZW1haW5pbmciLCJsZW5ndGgiXV1dLG51bGxd
LGZhbHNlXSxbMCwiIGxlZnQiXSxbMTRdLFswLCJcXG4gICAgICAgICJdLFsxMSwidWwiLFtdXSxb
MTUsImlkIiwiZmlsdGVycyJdLFsxM10sWzAsIlxcbiAgICAgICAgICAiXSxbMTEsImxpIixbXV0s
WzEzXSxbNixbImxpbmstdG8iXSxbImluZGV4Il0sW1siYWN0aXZlQ2xhc3MiXSxbInNlbGVjdGVk
Il1dLHsic3RhdGVtZW50cyI6W1swLCJBbGwiXV0sImxvY2FscyI6W119LG51bGxdLFsxNF0sWzAs
IlxcbiAgICAgICAgICAiXSxbMTEsImxpIixbXV0sWzEzXSxbNixbImxpbmstdG8iXSxbImFjdGl2
ZSJdLFtbImFjdGl2ZUNsYXNzIl0sWyJzZWxlY3RlZCJdXSx7InN0YXRlbWVudHMiOltbMCwiQWN0
aXZlIl1dLCJsb2NhbHMiOltdfSxudWxsXSxbMTRdLFswLCJcXG4gICAgICAgICAgIl0sWzExLCJs
aSIsW11dLFsxM10sWzYsWyJsaW5rLXRvIl0sWyJjb21wbGV0ZWQiXSxbWyJhY3RpdmVDbGFzcyJd
LFsic2VsZWN0ZWQiXV0seyJzdGF0ZW1lbnRzIjpbWzAsIkNvbXBsZXRlZCJdXSwibG9jYWxzIjpb
XX0sbnVsbF0sWzE0XSxbMCwiXFxuICAgICAgICAiXSxbMTRdLFswLCJcXG4iXSxbNixbImlmIl0s
W1syOCxbImNvbXBsZXRlZCIsImxlbmd0aCJdXV0sbnVsbCx7InN0YXRlbWVudHMiOltbMCwiICAg
ICAgICAgICJdLFsxMSwiYnV0dG9uIixbXV0sWzE1LCJpZCIsImNsZWFyLWNvbXBsZXRlZCJdLFsx
Niwib25jbGljayIsWzMzLFsiYWN0aW9uIl0sW1syOCxbbnVsbF1dLCJjbGVhckNvbXBsZXRlZCJd
LG51bGxdLG51bGxdLFsxM10sWzAsIkNsZWFyIGNvbXBsZXRlZCJdLFsxNF0sWzAsIlxcbiJdXSwi
bG9jYWxzIjpbXX0sbnVsbF0sWzAsIiAgICAgICJdLFsxNF0sWzAsIlxcbiJdXSwibG9jYWxzIjpb
XX0sbnVsbF0sWzE0XSxbMCwiXFxuIl0sWzExLCJmb290ZXIiLFtdXSxbMTUsImlkIiwiaW5mbyJd
LFsxM10sWzAsIlxcbiAgIl0sWzExLCJwIixbXV0sWzEzXSxbMCwiRG91YmxlLWNsaWNrIHRvIGVk
aXQgYSB0b2RvIl0sWzE0XSxbMCwiXFxuICAiXSxbMTEsInAiLFtdXSxbMTNdLFswLCJcXG4gICAg
Q3JlYXRlZCBieVxcbiAgICAiXSxbMTEsImEiLFtdXSxbMTUsImhyZWYiLCJodHRwOi8vZ2l0aHVi
LmNvbS9jaWJlcm5veCJdLFsxM10sWzAsIk1pZ3VlbCBDYW1iYSJdLFsxNF0sWzAsIixcXG4gICAg
Il0sWzExLCJhIixbXV0sWzE1LCJocmVmIiwiaHR0cDovL2dpdGh1Yi5jb20vYWRkeW9zbWFuaSJd
LFsxM10sWzAsIkFkZHkgT3NtYW5pIl0sWzE0XSxbMCwiXFxuICAiXSxbMTRdLFswLCJcXG4gICJd
LFsxMSwicCIsW11dLFsxM10sWzAsIlBhcnQgb2YgIl0sWzExLCJhIixbXV0sWzE1LCJocmVmIiwi
aHR0cDovL3RvZG9tdmMuY29tIl0sWzEzXSxbMCwiVG9kb01WQyJdLFsxNF0sWzE0XSxbMCwiXFxu
Il0sWzE0XV0sImxvY2FscyI6W10sIm5hbWVkIjpbXSwieWllbGRzIjpbXSwiaGFzUGFydGlhbHMi
OmZhbHNlfScsbWV0YTp7bW9kdWxlTmFtZToidG9kb212Yy90ZW1wbGF0ZXMvYXBwbGljYXRpb24u
aGJzIn19KX0pLGRlZmluZSgidG9kb212Yy90ZW1wbGF0ZXMvY29tcGxldGVkIixbImV4cG9ydHMi
XSxmdW5jdGlvbihlKXtlLmRlZmF1bHQ9RW1iZXIuSFRNTEJhcnMudGVtcGxhdGUoe2lkOiJGNGxh
OXd0YiIsYmxvY2s6J3sic3RhdGVtZW50cyI6W1sxLFszMyxbInRvZG8tbGlzdCJdLG51bGwsW1si
dG9kb3MiXSxbWzI4LFsidG9kb3MiXV1dXV0sZmFsc2VdXSwibG9jYWxzIjpbXSwibmFtZWQiOltd
LCJ5aWVsZHMiOltdLCJoYXNQYXJ0aWFscyI6ZmFsc2V9JyxtZXRhOnttb2R1bGVOYW1lOiJ0b2Rv
bXZjL3RlbXBsYXRlcy9jb21wbGV0ZWQuaGJzIn19KX0pLGRlZmluZSgidG9kb212Yy90ZW1wbGF0
ZXMvY29tcG9uZW50cy90b2RvLWl0ZW0iLFsiZXhwb3J0cyJdLGZ1bmN0aW9uKGUpe2UuZGVmYXVs
dD1FbWJlci5IVE1MQmFycy50ZW1wbGF0ZSh7aWQ6ImRRMytjSzVFIixibG9jazoneyJzdGF0ZW1l
bnRzIjpbWzExLCJkaXYiLFtdXSxbMTUsImNsYXNzIiwidmlldyJdLFsxM10sWzAsIlxcbiAgIl0s
WzExLCJpbnB1dCIsW11dLFsxNSwidHlwZSIsImNoZWNrYm94Il0sWzE1LCJjbGFzcyIsInRvZ2ds
ZSJdLFsxNiwiY2hlY2tlZCIsWzI4LFsidG9kbyIsImNvbXBsZXRlZCJdXSxudWxsXSxbMTYsIm9u
Y2hhbmdlIixbMzMsWyJhY3Rpb24iXSxbWzI4LFtudWxsXV0sInRvZ2dsZUNvbXBsZXRlZCJdLG51
bGxdLG51bGxdLFsxM10sWzE0XSxbMCwiXFxuICAiXSxbMTEsImxhYmVsIixbXV0sWzE2LCJvbmRi
bGNsaWNrIixbMzMsWyJhY3Rpb24iXSxbWzI4LFtudWxsXV0sInN0YXJ0RWRpdGluZyJdLG51bGxd
LG51bGxdLFsxM10sWzEsWzI4LFsidG9kbyIsInRpdGxlIl1dLGZhbHNlXSxbMTRdLFswLCJcXG4g
ICJdLFsxMSwiYnV0dG9uIixbXV0sWzE2LCJvbmNsaWNrIixbMzMsWyJhY3Rpb24iXSxbWzI4LFtu
dWxsXV0sInJlbW92ZVRvZG8iXSxudWxsXSxudWxsXSxbMTUsImNsYXNzIiwiZGVzdHJveSJdLFsx
M10sWzE0XSxbMCwiXFxuIl0sWzE0XSxbMCwiXFxuIl0sWzExLCJpbnB1dCIsW11dLFsxNSwidHlw
ZSIsInRleHQiXSxbMTUsImNsYXNzIiwiZWRpdCJdLFsxNiwidmFsdWUiLFsyOCxbInRvZG8iLCJ0
aXRsZSJdXSxudWxsXSxbMTYsIm9uYmx1ciIsWzMzLFsiYWN0aW9uIl0sW1syOCxbbnVsbF1dLCJk
b25lRWRpdGluZyJdLFtbInZhbHVlIl0sWyJ0YXJnZXQudmFsdWUiXV1dLG51bGxdLFsxNiwib25r
ZXlkb3duIixbMzMsWyJhY3Rpb24iXSxbWzI4LFtudWxsXV0sImhhbmRsZUtleWRvd24iXSxudWxs
XSxudWxsXSxbMTUsImF1dG9mb2N1cyIsIiJdLFsxM10sWzE0XV0sImxvY2FscyI6W10sIm5hbWVk
IjpbXSwieWllbGRzIjpbXSwiaGFzUGFydGlhbHMiOmZhbHNlfScsbWV0YTp7bW9kdWxlTmFtZToi
dG9kb212Yy90ZW1wbGF0ZXMvY29tcG9uZW50cy90b2RvLWl0ZW0uaGJzIn19KX0pLGRlZmluZSgi
dG9kb212Yy90ZW1wbGF0ZXMvY29tcG9uZW50cy90b2RvLWxpc3QiLFsiZXhwb3J0cyJdLGZ1bmN0
aW9uKGUpe2UuZGVmYXVsdD1FbWJlci5IVE1MQmFycy50ZW1wbGF0ZSh7aWQ6IlhHbVdXRDYzIixi
bG9jazoneyJzdGF0ZW1lbnRzIjpbWzYsWyJpZiJdLFtbMjgsWyJ0b2RvcyIsImxlbmd0aCJdXV0s
bnVsbCx7InN0YXRlbWVudHMiOltbNixbImlmIl0sW1syOCxbImNhblRvZ2dsZSJdXV0sbnVsbCx7
InN0YXRlbWVudHMiOltbMCwiICAgICJdLFsxMSwiaW5wdXQiLFtdXSxbMTUsInR5cGUiLCJjaGVj
a2JveCJdLFsxNSwiaWQiLCJ0b2dnbGUtYWxsIl0sWzE2LCJjaGVja2VkIixbMjYsWyJhbGxDb21w
bGV0ZWQiXV0sbnVsbF0sWzE2LCJvbmNoYW5nZSIsWzMzLFsiYWN0aW9uIl0sW1syOCxbbnVsbF1d
LCJ0b2dnbGVBbGwiXSxudWxsXSxudWxsXSxbMTNdLFsxNF0sWzAsIlxcbiJdXSwibG9jYWxzIjpb
XX0sbnVsbF0sWzAsIiAgIl0sWzExLCJ1bCIsW11dLFsxNSwiaWQiLCJ0b2RvLWxpc3QiXSxbMTUs
ImNsYXNzIiwidG9kby1saXN0Il0sWzEzXSxbMCwiXFxuIl0sWzYsWyJlYWNoIl0sW1syOCxbInRv
ZG9zIl1dXSxudWxsLHsic3RhdGVtZW50cyI6W1swLCIgICAgICAiXSxbMSxbMzMsWyJ0b2RvLWl0
ZW0iXSxudWxsLFtbInRvZG8iLCJvblN0YXJ0RWRpdCIsIm9uRW5kRWRpdCJdLFtbMjgsWyJ0b2Rv
Il1dLFszMyxbImFjdGlvbiJdLFtbMjgsW251bGxdXSwiZGlzYWJsZVRvZ2dsZSJdLG51bGxdLFsz
MyxbImFjdGlvbiJdLFtbMjgsW251bGxdXSwiZW5hYmxlVG9nZ2xlIl0sbnVsbF1dXV0sZmFsc2Vd
LFswLCJcXG4iXV0sImxvY2FscyI6WyJ0b2RvIl19LG51bGxdLFswLCIgICJdLFsxNF0sWzAsIlxc
biJdXSwibG9jYWxzIjpbXX0sbnVsbF1dLCJsb2NhbHMiOltdLCJuYW1lZCI6W10sInlpZWxkcyI6
W10sImhhc1BhcnRpYWxzIjpmYWxzZX0nLG1ldGE6e21vZHVsZU5hbWU6InRvZG9tdmMvdGVtcGxh
dGVzL2NvbXBvbmVudHMvdG9kby1saXN0LmhicyJ9fSl9KSxkZWZpbmUoInRvZG9tdmMvdGVtcGxh
dGVzL2luZGV4IixbImV4cG9ydHMiXSxmdW5jdGlvbihlKXtlLmRlZmF1bHQ9RW1iZXIuSFRNTEJh
cnMudGVtcGxhdGUoe2lkOiJoQmFkTklwbyIsYmxvY2s6J3sic3RhdGVtZW50cyI6W1s2LFsiaWYi
XSxbWzI4LFsibW9kZWwiLCJsZW5ndGgiXV1dLG51bGwseyJzdGF0ZW1lbnRzIjpbWzAsIiAgIl0s
WzEsWzMzLFsidG9kby1saXN0Il0sbnVsbCxbWyJ0b2RvcyJdLFtbMjgsWyJtb2RlbCJdXV1dXSxm
YWxzZV0sWzAsIlxcbiJdXSwibG9jYWxzIjpbXX0sbnVsbF1dLCJsb2NhbHMiOltdLCJuYW1lZCI6
W10sInlpZWxkcyI6W10sImhhc1BhcnRpYWxzIjpmYWxzZX0nLG1ldGE6e21vZHVsZU5hbWU6InRv
ZG9tdmMvdGVtcGxhdGVzL2luZGV4LmhicyJ9fSl9KSxkZWZpbmUoInRvZG9tdmMvY29uZmlnL2Vu
dmlyb25tZW50IixbImVtYmVyIl0sZnVuY3Rpb24oZSl7dHJ5e3ZhciB0PSJ0b2RvbXZjL2NvbmZp
Zy9lbnZpcm9ubWVudCIsbz1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtZXRhW25hbWU9IicrdCsn
Il0nKS5nZXRBdHRyaWJ1dGUoImNvbnRlbnQiKSxuPUpTT04ucGFyc2UodW5lc2NhcGUobykpLGw9
e2RlZmF1bHQ6bn0KK3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkobCwiX19lc01vZHVsZSIs
e3ZhbHVlOiEwfSksbH1jYXRjaChlKXt0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCByZWFkIGNv
bmZpZyBmcm9tIG1ldGEgdGFnIHdpdGggbmFtZSAiJyt0KyciLicpfX0pLHJ1bm5pbmdUZXN0c3x8
cmVxdWlyZSgidG9kb212Yy9hcHAiKS5kZWZhdWx0LmNyZWF0ZSh7bmFtZToidG9kb212YyIsdmVy
c2lvbjoiMC4wLjArNjRhN2NmY2QifSkKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3Bl
ZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMv
ZGlzdC9hc3NldHMvdmVuZG9yLTdiNWM5ODUyMDkxMGFmYTU4ZDc0ZTA1ZWM4NmNkODczLmNzcyBi
L1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0
dXJlLWV4YW1wbGVzL2VtYmVyanMvZGlzdC9hc3NldHMvdmVuZG9yLTdiNWM5ODUyMDkxMGFmYTU4
ZDc0ZTA1ZWM4NmNkODczLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zZjVjZmY5OGNmZGM0OTljNjVlNTgyYzMz
MzViZTNjNDVhODFhZDg3Ci0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVl
ZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy9k
aXN0L2Fzc2V0cy92ZW5kb3ItN2I1Yzk4NTIwOTEwYWZhNThkNzRlMDVlYzg2Y2Q4NzMuY3NzCkBA
IC0wLDAgKzEgQEAKKyNpc3N1ZS1jb3VudCwuaGlkZGVuLGxhYmVsW2Zvcj10b2dnbGUtYWxsXXtk
aXNwbGF5Om5vbmV9I2Zvb3RlciwjaW5mbywjdG9kb2FwcCBoMSwjdG9nZ2xlLWFsbHt0ZXh0LWFs
aWduOmNlbnRlcn1ocnttYXJnaW46MjBweCAwO2JvcmRlcjowO2JvcmRlci10b3A6MXB4IGRhc2hl
ZCAjYzVjNWM1O2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjZjdmN2Y3fS5sZWFybiBhe2ZvbnQt
d2VpZ2h0OjQwMDt0ZXh0LWRlY29yYXRpb246bm9uZTtjb2xvcjojYjgzZjQ1fS5sZWFybiBhOmhv
dmVye3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7Y29sb3I6Izc4N2U3ZX0ubGVhcm4gaDMsLmxl
YXJuIGg0LC5sZWFybiBoNXttYXJnaW46MTBweCAwO2ZvbnQtd2VpZ2h0OjUwMDtsaW5lLWhlaWdo
dDoxLjI7Y29sb3I6IzAwMH0ubGVhcm4gaDN7Zm9udC1zaXplOjI0cHh9LmxlYXJuIGg0e2ZvbnQt
c2l6ZToxOHB4fS5sZWFybiBoNXttYXJnaW4tYm90dG9tOjA7Zm9udC1zaXplOjE0cHh9LmxlYXJu
IHVse3BhZGRpbmc6MDttYXJnaW46MCAwIDMwcHggMjVweH0ubGVhcm4gbGl7bGluZS1oZWlnaHQ6
MjBweH0ubGVhcm4gcHtmb250LXNpemU6MTVweDtmb250LXdlaWdodDozMDA7bGluZS1oZWlnaHQ6
MS4zO21hcmdpbi10b3A6MDttYXJnaW4tYm90dG9tOjB9LnF1b3RlIHA6YWZ0ZXIsLnF1b3RlIHA6
YmVmb3Jle2ZvbnQtc2l6ZTo1MHB4O29wYWNpdHk6LjE1O3Bvc2l0aW9uOmFic29sdXRlfS5xdW90
ZXtib3JkZXI6bm9uZTttYXJnaW46MjBweCAwIDYwcHh9LnF1b3RlIHB7Zm9udC1zdHlsZTppdGFs
aWN9LnF1b3RlIHA6YmVmb3Jle2NvbnRlbnQ6J+KAnCc7dG9wOi0yMHB4O2xlZnQ6M3B4fS5xdW90
ZSBwOmFmdGVye2NvbnRlbnQ6J+KAnSc7Ym90dG9tOi00MnB4O3JpZ2h0OjNweH0ucXVvdGUgZm9v
dGVye3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTotNDBweDtyaWdodDowfS5xdW90ZSBmb290ZXIg
aW1ne2JvcmRlci1yYWRpdXM6M3B4fS5xdW90ZSBmb290ZXIgYXttYXJnaW4tbGVmdDo1cHg7dmVy
dGljYWwtYWxpZ246bWlkZGxlfS5zcGVlY2gtYnViYmxle3Bvc2l0aW9uOnJlbGF0aXZlO3BhZGRp
bmc6MTBweDtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjA0KTtib3JkZXItcmFkaXVzOjVweH0uc3Bl
ZWNoLWJ1YmJsZTphZnRlcntjb250ZW50OicnO3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxMDAlO3Jp
Z2h0OjMwcHg7Ym9yZGVyOjEzcHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXRvcC1jb2xvcjpy
Z2JhKDAsMCwwLC4wNCl9LmxlYXJuLWJhcj4ubGVhcm57cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6
MjcycHg7dG9wOjhweDtsZWZ0Oi0zMDBweDtwYWRkaW5nOjEwcHg7Ym9yZGVyLXJhZGl1czo1cHg7
YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC42KTt0cmFuc2l0aW9uLXByb3BlcnR5
OmxlZnQ7dHJhbnNpdGlvbi1kdXJhdGlvbjouNXN9I21haW4sI25ldy10b2RvLCN0b2RvLWxpc3Qg
bGksI3RvZG9hcHAsLmVkaXR7cG9zaXRpb246cmVsYXRpdmV9QG1lZGlhIChtaW4td2lkdGg6ODk5
cHgpey5sZWFybi1iYXJ7d2lkdGg6YXV0bztwYWRkaW5nLWxlZnQ6MzAwcHh9LmxlYXJuLWJhcj4u
bGVhcm57bGVmdDo4cHh9fWJvZHksYnV0dG9uLGh0bWx7cGFkZGluZzowO21hcmdpbjowfWJ1dHRv
bntib3JkZXI6MDtiYWNrZ3JvdW5kOjAgMDtmb250LXNpemU6MTAwJTt2ZXJ0aWNhbC1hbGlnbjpi
YXNlbGluZTtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtd2VpZ2h0OmluaGVyaXQ7Y29sb3I6aW5o
ZXJpdDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTthcHBlYXJhbmNlOm5vbmU7LXdlYmtpdC1mb250
LXNtb290aGluZzphbnRpYWxpYXNlZDstbW96LWZvbnQtc21vb3RoaW5nOmFudGlhbGlhc2VkO2Zv
bnQtc21vb3RoaW5nOmFudGlhbGlhc2VkfWJvZHl7Zm9udDoxNHB4ICdIZWx2ZXRpY2EgTmV1ZScs
SGVsdmV0aWNhLEFyaWFsLHNhbnMtc2VyaWY7bGluZS1oZWlnaHQ6MS40ZW07YmFja2dyb3VuZDoj
ZjVmNWY1O2NvbG9yOiM0ZDRkNGQ7bWluLXdpZHRoOjIzMHB4O21heC13aWR0aDo1NTBweDttYXJn
aW46MCBhdXRvOy13ZWJraXQtZm9udC1zbW9vdGhpbmc6YW50aWFsaWFzZWQ7LW1vei1mb250LXNt
b290aGluZzphbnRpYWxpYXNlZDtmb250LXNtb290aGluZzphbnRpYWxpYXNlZDtmb250LXdlaWdo
dDozMDB9YnV0dG9uLGlucHV0W3R5cGU9Y2hlY2tib3hde291dGxpbmU6MH0jdG9kb2FwcHtiYWNr
Z3JvdW5kOiNmZmY7bWFyZ2luOjEzMHB4IDAgNDBweDtib3gtc2hhZG93OjAgMnB4IDRweCAwIHJn
YmEoMCwwLDAsLjIpLDAgMjVweCA1MHB4IDAgcmdiYSgwLDAsMCwuMSl9I3RvZG9hcHAgaW5wdXQ6
Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXJ7Zm9udC1zdHlsZTppdGFsaWM7Zm9udC13ZWlnaHQ6
MzAwO2NvbG9yOiNlNmU2ZTZ9I3RvZG9hcHAgaW5wdXQ6Oi1tb3otcGxhY2Vob2xkZXJ7Zm9udC1z
dHlsZTppdGFsaWM7Zm9udC13ZWlnaHQ6MzAwO2NvbG9yOiNlNmU2ZTZ9I3RvZG9hcHAgaW5wdXQ6
OmlucHV0LXBsYWNlaG9sZGVye2ZvbnQtc3R5bGU6aXRhbGljO2ZvbnQtd2VpZ2h0OjMwMDtjb2xv
cjojZTZlNmU2fSN0b2RvYXBwIGgxe3Bvc2l0aW9uOmFic29sdXRlO3RvcDotMTU1cHg7d2lkdGg6
MTAwJTtmb250LXNpemU6MTAwcHg7Zm9udC13ZWlnaHQ6MTAwO2NvbG9yOnJnYmEoMTc1LDQ3LDQ3
LC4xNSk7LXdlYmtpdC10ZXh0LXJlbmRlcmluZzpvcHRpbWl6ZUxlZ2liaWxpdHk7LW1vei10ZXh0
LXJlbmRlcmluZzpvcHRpbWl6ZUxlZ2liaWxpdHk7dGV4dC1yZW5kZXJpbmc6b3B0aW1pemVMZWdp
YmlsaXR5fSNuZXctdG9kbywuZWRpdHttYXJnaW46MDt3aWR0aDoxMDAlO2ZvbnQtc2l6ZToyNHB4
O2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC13ZWlnaHQ6aW5oZXJpdDtsaW5lLWhlaWdodDoxLjRl
bTtvdXRsaW5lOjA7Y29sb3I6aW5oZXJpdDtwYWRkaW5nOjZweDtib3JkZXI6MXB4IHNvbGlkICM5
OTk7Ym94LXNoYWRvdzppbnNldCAwIC0xcHggNXB4IDAgcmdiYSgwLDAsMCwuMik7Ym94LXNpemlu
Zzpib3JkZXItYm94Oy13ZWJraXQtZm9udC1zbW9vdGhpbmc6YW50aWFsaWFzZWQ7LW1vei1mb250
LXNtb290aGluZzphbnRpYWxpYXNlZDtmb250LXNtb290aGluZzphbnRpYWxpYXNlZH0jbmV3LXRv
ZG97cGFkZGluZzoxNnB4IDE2cHggMTZweCA2MHB4O2JvcmRlcjpub25lO2JhY2tncm91bmQ6cmdi
YSgwLDAsMCwuMDAzKTtib3gtc2hhZG93Omluc2V0IDAgLTJweCAxcHggcmdiYSgwLDAsMCwuMDMp
fSNtYWlue3otaW5kZXg6Mjtib3JkZXItdG9wOjFweCBzb2xpZCAjZTZlNmU2fSN0b2dnbGUtYWxs
e3Bvc2l0aW9uOmFic29sdXRlO3RvcDotNTVweDtsZWZ0Oi0xMnB4O3dpZHRoOjYwcHg7aGVpZ2h0
OjM0cHg7Ym9yZGVyOm5vbmV9I3RvZ2dsZS1hbGw6YmVmb3Jle2NvbnRlbnQ6J+Kdryc7Zm9udC1z
aXplOjIycHg7Y29sb3I6I2U2ZTZlNjtwYWRkaW5nOjEwcHggMjdweH0jdG9nZ2xlLWFsbDpjaGVj
a2VkOmJlZm9yZXtjb2xvcjojNzM3MzczfSN0b2RvLWxpc3R7bWFyZ2luOjA7cGFkZGluZzowO2xp
c3Qtc3R5bGU6bm9uZX0jdG9kby1saXN0IGxpe2ZvbnQtc2l6ZToyNHB4O2JvcmRlci1ib3R0b206
MXB4IHNvbGlkICNlZGVkZWR9I3RvZG8tbGlzdCBsaTpsYXN0LWNoaWxke2JvcmRlci1ib3R0b206
bm9uZX0jdG9kby1saXN0IGxpLmVkaXRpbmd7Ym9yZGVyLWJvdHRvbTpub25lO3BhZGRpbmc6MH0j
dG9kby1saXN0IGxpLmVkaXRpbmcgLmVkaXR7ZGlzcGxheTpibG9jazt3aWR0aDo1MDZweDtwYWRk
aW5nOjEzcHggMTdweCAxMnB4O21hcmdpbjowIDAgMCA0M3B4fSN0b2RvLWxpc3QgbGkuZWRpdGlu
ZyAudmlld3tkaXNwbGF5Om5vbmV9I3RvZG8tbGlzdCBsaSAudG9nZ2xle3RleHQtYWxpZ246Y2Vu
dGVyO3dpZHRoOjQwcHg7aGVpZ2h0OmF1dG87cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9t
OjA7bWFyZ2luOmF1dG8gMDtib3JkZXI6bm9uZTstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTthcHBl
YXJhbmNlOm5vbmV9I3RvZG8tbGlzdCBsaSAudG9nZ2xlOmFmdGVye2NvbnRlbnQ6dXJsKCdkYXRh
OmltYWdlL3N2Zyt4bWw7dXRmOCw8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2
ZyIgd2lkdGg9IjQwIiBoZWlnaHQ9IjQwIiB2aWV3Qm94PSItMTAgLTE4IDEwMCAxMzUiPjxjaXJj
bGUgY3g9IjUwIiBjeT0iNTAiIHI9IjUwIiBmaWxsPSJub25lIiBzdHJva2U9IiNlZGVkZWQiIHN0
cm9rZS13aWR0aD0iMyIvPjwvc3ZnPicpfSN0b2RvLWxpc3QgbGkgLnRvZ2dsZTpjaGVja2VkOmFm
dGVye2NvbnRlbnQ6dXJsKCdkYXRhOmltYWdlL3N2Zyt4bWw7dXRmOCw8c3ZnIHhtbG5zPSJodHRw
Oi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjQwIiBoZWlnaHQ9IjQwIiB2aWV3Qm94PSIt
MTAgLTE4IDEwMCAxMzUiPjxjaXJjbGUgY3g9IjUwIiBjeT0iNTAiIHI9IjUwIiBmaWxsPSJub25l
IiBzdHJva2U9IiNiZGRhZDUiIHN0cm9rZS13aWR0aD0iMyIvPjxwYXRoIGZpbGw9IiM1ZGMyYWYi
IGQ9Ik03MiAyNUw0MiA3MSAyNyA1NmwtNCA0IDIwIDIwIDM0LTUyeiIvPjwvc3ZnPicpfSN0b2Rv
LWxpc3QgbGkgbGFiZWx7d2hpdGUtc3BhY2U6cHJlO3dvcmQtYnJlYWs6YnJlYWstd29yZDtwYWRk
aW5nOjE1cHggNjBweCAxNXB4IDE1cHg7bWFyZ2luLWxlZnQ6NDVweDtkaXNwbGF5OmJsb2NrO2xp
bmUtaGVpZ2h0OjEuMjt0cmFuc2l0aW9uOmNvbG9yIC40c30jdG9kby1saXN0IGxpLmNvbXBsZXRl
ZCBsYWJlbHtjb2xvcjojZDlkOWQ5O3RleHQtZGVjb3JhdGlvbjpsaW5lLXRocm91Z2h9I3RvZG8t
bGlzdCBsaSAuZGVzdHJveXtkaXNwbGF5Om5vbmU7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7cmln
aHQ6MTBweDtib3R0b206MDt3aWR0aDo0MHB4O2hlaWdodDo0MHB4O21hcmdpbjphdXRvIDAgMTFw
eDtmb250LXNpemU6MzBweDtjb2xvcjojY2M5YTlhO3RyYW5zaXRpb246Y29sb3IgLjJzIGVhc2Ut
b3V0fSNmaWx0ZXJzLCNmb290ZXI6YmVmb3Jle3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7bGVm
dDowfSN0b2RvLWxpc3QgbGkgLmRlc3Ryb3k6aG92ZXJ7Y29sb3I6I2FmNWI1ZX0jZmlsdGVycyBs
aSBhLCNpbmZvIGF7Y29sb3I6aW5oZXJpdDt0ZXh0LWRlY29yYXRpb246bm9uZX0jdG9kby1saXN0
IGxpIC5kZXN0cm95OmFmdGVye2NvbnRlbnQ6J8OXJ30jdG9kby1saXN0IGxpOmhvdmVyIC5kZXN0
cm95e2Rpc3BsYXk6YmxvY2t9I3RvZG8tbGlzdCBsaSAuZWRpdHtkaXNwbGF5Om5vbmV9I3RvZG8t
bGlzdCBsaS5lZGl0aW5nOmxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTotMXB4fSNmb290ZXJ7Y29s
b3I6Izc3NztwYWRkaW5nOjEwcHggMTVweDtoZWlnaHQ6MjBweDtib3JkZXItdG9wOjFweCBzb2xp
ZCAjZTZlNmU2fSNmb290ZXI6YmVmb3Jle2NvbnRlbnQ6Jyc7Ym90dG9tOjA7aGVpZ2h0OjUwcHg7
b3ZlcmZsb3c6aGlkZGVuO2JveC1zaGFkb3c6MCAxcHggMXB4IHJnYmEoMCwwLDAsLjIpLDAgOHB4
IDAgLTNweCAjZjZmNmY2LDAgOXB4IDFweCAtM3B4IHJnYmEoMCwwLDAsLjIpLDAgMTZweCAwIC02
cHggI2Y2ZjZmNiwwIDE3cHggMnB4IC02cHggcmdiYSgwLDAsMCwuMil9I3RvZG8tY291bnR7Zmxv
YXQ6bGVmdDt0ZXh0LWFsaWduOmxlZnR9I3RvZG8tY291bnQgc3Ryb25ne2ZvbnQtd2VpZ2h0OjMw
MH0jZmlsdGVyc3ttYXJnaW46MDtwYWRkaW5nOjA7bGlzdC1zdHlsZTpub25lfSNmaWx0ZXJzIGxp
e2Rpc3BsYXk6aW5saW5lfSNmaWx0ZXJzIGxpIGF7bWFyZ2luOjNweDtwYWRkaW5nOjNweCA3cHg7
Ym9yZGVyOjFweCBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItcmFkaXVzOjNweH0jZmlsdGVycyBs
aSBhLnNlbGVjdGVkLCNmaWx0ZXJzIGxpIGE6aG92ZXJ7Ym9yZGVyLWNvbG9yOnJnYmEoMTc1LDQ3
LDQ3LC4xKX0jZmlsdGVycyBsaSBhLnNlbGVjdGVke2JvcmRlci1jb2xvcjpyZ2JhKDE3NSw0Nyw0
NywuMil9I2NsZWFyLWNvbXBsZXRlZCxodG1sICNjbGVhci1jb21wbGV0ZWQ6YWN0aXZle2Zsb2F0
OnJpZ2h0O2xpbmUtaGVpZ2h0OjIwcHg7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y3Vyc29yOnBvaW50
ZXI7cG9zaXRpb246cmVsYXRpdmV9I2NsZWFyLWNvbXBsZXRlZDpob3ZlciwjaW5mbyBhOmhvdmVy
e3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmV9I2luZm97bWFyZ2luOjY1cHggYXV0byAwO2NvbG9y
OiNiZmJmYmY7Zm9udC1zaXplOjEwcHg7dGV4dC1zaGFkb3c6MCAxcHggMCByZ2JhKDI1NSwyNTUs
MjU1LC41KX0jaW5mbyBwe2xpbmUtaGVpZ2h0OjF9I2luZm8gYXtmb250LXdlaWdodDo0MDB9QG1l
ZGlhIHNjcmVlbiBhbmQgKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzowKXsjdG9kby1s
aXN0IGxpIC50b2dnbGUsI3RvZ2dsZS1hbGx7YmFja2dyb3VuZDowIDB9I3RvZG8tbGlzdCBsaSAu
dG9nZ2xle2hlaWdodDo0MHB4fSN0b2dnbGUtYWxsey13ZWJraXQtdHJhbnNmb3JtOnJvdGF0ZSg5
MGRlZyk7dHJhbnNmb3JtOnJvdGF0ZSg5MGRlZyk7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7YXBw
ZWFyYW5jZTpub25lfX1AbWVkaWEgKG1heC13aWR0aDo0MzBweCl7I2Zvb3RlcntoZWlnaHQ6NTBw
eH0jZmlsdGVyc3tib3R0b206MTBweH19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZm
IC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9h
cmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy9kaXN0L2Fzc2V0cy92ZW5kb3ItODIwOTE5NTY3
ZWI3YmQ0ZDlmYWMzNThhOTBhNWFhYzQuanMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVy
L3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL2Rpc3QvYXNz
ZXRzL3ZlbmRvci04MjA5MTk1NjdlYjdiZDRkOWZhYzM1OGE5MGE1YWFjNC5qcwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5iOWQ5YjFmNDA1ZmRjNDg2NzkwYjdkNDcxMTViNGY4Yzg0NTM5YjZhCi0tLSAvZGV2L251bGwK
KysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNo
aXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy9kaXN0L2Fzc2V0cy92ZW5kb3ItODIwOTE5NTY3ZWI3
YmQ0ZDlmYWMzNThhOTBhNWFhYzQuanMKQEAgLTAsMCArMSwzMzY0IEBACitmdW5jdGlvbiBjcmVh
dGVEZXByZWNhdGVkTW9kdWxlKGUpe2RlZmluZShlLFsiZXhwb3J0cyIsImVtYmVyLXJlc29sdmVy
L3Jlc29sdmVyIiwiZW1iZXIiXSxmdW5jdGlvbih0LG4scil7ci5kZWZhdWx0LmRlcHJlY2F0ZSgi
VXNhZ2Ugb2YgYCIrZSsiYCBtb2R1bGUgaXMgZGVwcmVjYXRlZCwgcGxlYXNlIHVwZGF0ZSB0byBg
ZW1iZXItcmVzb2x2ZXJgLiIsITEse2lkOiJlbWJlci1yZXNvbHZlci5sZWdhY3ktc2hpbXMiLHVu
dGlsOiIzLjAuMCJ9KSx0LmRlZmF1bHQ9bi5kZWZhdWx0fSl9d2luZG93LkVtYmVyRU5WPXtGRUFU
VVJFUzp7fSxFWFRFTkRfUFJPVE9UWVBFUzp7RGF0ZTohMX19Cit2YXIgcnVubmluZ1Rlc3RzPSEx
LGxvYWRlcixkZWZpbmUscmVxdWlyZU1vZHVsZSxyZXF1aXJlLHJlcXVpcmVqczsoZnVuY3Rpb24o
ZSl7InVzZSBzdHJpY3QiCitmdW5jdGlvbiB0KCl7dmFyIGU9T2JqZWN0LmNyZWF0ZShudWxsKQor
cmV0dXJuIGUuX189dm9pZCAwLGRlbGV0ZSBlLl9fLGV9ZnVuY3Rpb24gbihlKXt0aHJvdyBuZXcg
RXJyb3IoImFuIHVuc3VwcG9ydGVkIG1vZHVsZSB3YXMgZGVmaW5lZCwgZXhwZWN0ZWQgYGRlZmlu
ZShpZCwgZGVwcywgbW9kdWxlKWAgaW5zdGVhZCBnb3Q6IGAiK2UrImAgYXJndW1lbnRzIHRvIGRl
ZmluZWAiKX1mdW5jdGlvbiByKGUsdCxuLHIpe3RoaXMudXVpZD1oKyssdGhpcy5pZD1lLHRoaXMu
ZGVwcz0hdC5sZW5ndGgmJm4ubGVuZ3RoP2Q6dCx0aGlzLm1vZHVsZT17ZXhwb3J0czp7fX0sdGhp
cy5jYWxsYmFjaz1uLHRoaXMuaGFzRXhwb3J0c0FzRGVwPSExLHRoaXMuaXNBbGlhcz1yLHRoaXMu
cmVpZmllZD1uZXcgQXJyYXkodC5sZW5ndGgpLHRoaXMuc3RhdGU9Im5ldyJ9ZnVuY3Rpb24gaSgp
e31mdW5jdGlvbiBvKGUpe3RoaXMuaWQ9ZX1mdW5jdGlvbiBzKGUsdCl7dGhyb3cgbmV3IEVycm9y
KCJDb3VsZCBub3QgZmluZCBtb2R1bGUgYCIrZSsiYCBpbXBvcnRlZCBmcm9tIGAiK3QrImAiKX1m
dW5jdGlvbiBhKGUsdCxuKXtmb3IodmFyIHI9cFtlXXx8cFtlKyIvaW5kZXgiXTtyJiZyLmlzQWxp
YXM7KXI9cFtyLmlkXQorcmV0dXJuIHJ8fHMoZSx0KSxuJiYicGVuZGluZyIhPT1yLnN0YXRlJiYi
ZmluYWxpemVkIiE9PXIuc3RhdGUmJihyLmZpbmREZXBzKG4pLG4ucHVzaChyKSkscn1mdW5jdGlv
biB1KGUsdCl7aWYoIi4iIT09ZS5jaGFyQXQoMCkpcmV0dXJuIGUKK2Zvcih2YXIgbj1lLnNwbGl0
KCIvIikscj10LnNwbGl0KCIvIiksaT1yLnNsaWNlKDAsLTEpLG89MCxzPW4ubGVuZ3RoO288cztv
Kyspe3ZhciBhPW5bb10KK2lmKCIuLiI9PT1hKXtpZigwPT09aS5sZW5ndGgpdGhyb3cgbmV3IEVy
cm9yKCJDYW5ub3QgYWNjZXNzIHBhcmVudCBtb2R1bGUgb2Ygcm9vdCIpCitpLnBvcCgpfWVsc2V7
aWYoIi4iPT09YSljb250aW51ZQoraS5wdXNoKGEpfX1yZXR1cm4gaS5qb2luKCIvIil9ZnVuY3Rp
b24gbChlKXtyZXR1cm4hKCFwW2VdJiYhcFtlKyIvaW5kZXgiXSl9dmFyIGM9e2xvYWRlcjpsb2Fk
ZXIsZGVmaW5lOmRlZmluZSxyZXF1aXJlTW9kdWxlOnJlcXVpcmVNb2R1bGUscmVxdWlyZTpyZXF1
aXJlLHJlcXVpcmVqczpyZXF1aXJlanN9CityZXF1aXJlanM9cmVxdWlyZT1yZXF1aXJlTW9kdWxl
PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxuPWEoZSwiKHJlcXVpcmUpIix0KSxyPXQubGVuZ3Ro
LTE7cj49MDtyLS0pdFtyXS5leHBvcnRzKCkKK3JldHVybiBuLm1vZHVsZS5leHBvcnRzfSxsb2Fk
ZXI9e25vQ29uZmxpY3Q6ZnVuY3Rpb24odCl7dmFyIG4scgorZm9yKG4gaW4gdCl0Lmhhc093blBy
b3BlcnR5KG4pJiZjLmhhc093blByb3BlcnR5KG4pJiYocj10W25dLGVbcl09ZVtuXSxlW25dPWNb
bl0pfSxtYWtlRGVmYXVsdEV4cG9ydDohMH0KK3ZhciBwPXQoKSxmPXQoKSxoPTAsZD1bInJlcXVp
cmUiLCJleHBvcnRzIiwibW9kdWxlIl0KK3IucHJvdG90eXBlLm1ha2VEZWZhdWx0RXhwb3J0PWZ1
bmN0aW9uKCl7dmFyIGU9dGhpcy5tb2R1bGUuZXhwb3J0cworbnVsbD09PWV8fCJvYmplY3QiIT10
eXBlb2YgZSYmImZ1bmN0aW9uIiE9dHlwZW9mIGV8fHZvaWQgMCE9PWUuZGVmYXVsdHx8IU9iamVj
dC5pc0V4dGVuc2libGUoZSl8fChlLmRlZmF1bHQ9ZSl9LHIucHJvdG90eXBlLmV4cG9ydHM9ZnVu
Y3Rpb24oKXtpZigiZmluYWxpemVkIj09PXRoaXMuc3RhdGV8fCJyZWlmeWluZyI9PT10aGlzLnN0
YXRlKXJldHVybiB0aGlzLm1vZHVsZS5leHBvcnRzCitsb2FkZXIud3JhcE1vZHVsZXMmJih0aGlz
LmNhbGxiYWNrPWxvYWRlci53cmFwTW9kdWxlcyh0aGlzLmlkLHRoaXMuY2FsbGJhY2spKSx0aGlz
LnJlaWZ5KCkKK3ZhciBlPXRoaXMuY2FsbGJhY2suYXBwbHkodGhpcyx0aGlzLnJlaWZpZWQpCity
ZXR1cm4gdGhpcy5yZWlmaWVkLmxlbmd0aD0wLHRoaXMuc3RhdGU9ImZpbmFsaXplZCIsdGhpcy5o
YXNFeHBvcnRzQXNEZXAmJnZvaWQgMD09PWV8fCh0aGlzLm1vZHVsZS5leHBvcnRzPWUpLGxvYWRl
ci5tYWtlRGVmYXVsdEV4cG9ydCYmdGhpcy5tYWtlRGVmYXVsdEV4cG9ydCgpLHRoaXMubW9kdWxl
LmV4cG9ydHN9LHIucHJvdG90eXBlLnVuc2VlPWZ1bmN0aW9uKCl7dGhpcy5zdGF0ZT0ibmV3Iix0
aGlzLm1vZHVsZT17ZXhwb3J0czp7fX19LHIucHJvdG90eXBlLnJlaWZ5PWZ1bmN0aW9uKCl7aWYo
InJlaWZpZWQiIT09dGhpcy5zdGF0ZSl7dGhpcy5zdGF0ZT0icmVpZnlpbmciCit0cnl7dGhpcy5y
ZWlmaWVkPXRoaXMuX3JlaWZ5KCksdGhpcy5zdGF0ZT0icmVpZmllZCJ9ZmluYWxseXsicmVpZnlp
bmciPT09dGhpcy5zdGF0ZSYmKHRoaXMuc3RhdGU9ImVycm9yZWQiKX19fSxyLnByb3RvdHlwZS5f
cmVpZnk9ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy5yZWlmaWVkLnNsaWNlKCksdD0wO3Q8ZS5s
ZW5ndGg7dCsrKXt2YXIgbj1lW3RdCitlW3RdPW4uZXhwb3J0cz9uLmV4cG9ydHM6bi5tb2R1bGUu
ZXhwb3J0cygpfXJldHVybiBlfSxyLnByb3RvdHlwZS5maW5kRGVwcz1mdW5jdGlvbihlKXtpZigi
bmV3Ij09PXRoaXMuc3RhdGUpe3RoaXMuc3RhdGU9InBlbmRpbmciCitmb3IodmFyIHQ9dGhpcy5k
ZXBzLG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXSxpPXRoaXMucmVpZmllZFtuXT17ZXhw
b3J0czp2b2lkIDAsbW9kdWxlOnZvaWQgMH0KKyJleHBvcnRzIj09PXI/KHRoaXMuaGFzRXhwb3J0
c0FzRGVwPSEwLGkuZXhwb3J0cz10aGlzLm1vZHVsZS5leHBvcnRzKToicmVxdWlyZSI9PT1yP2ku
ZXhwb3J0cz10aGlzLm1ha2VSZXF1aXJlKCk6Im1vZHVsZSI9PT1yP2kuZXhwb3J0cz10aGlzLm1v
ZHVsZTppLm1vZHVsZT1hKHUocix0aGlzLmlkKSx0aGlzLmlkLGUpfX19LHIucHJvdG90eXBlLm1h
a2VSZXF1aXJlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5pZCx0PWZ1bmN0aW9uKHQpe3JldHVybiBy
ZXF1aXJlKHUodCxlKSl9CityZXR1cm4gdC5kZWZhdWx0PXQsdC5tb2R1bGVJZD1lLHQuaGFzPWZ1
bmN0aW9uKHQpe3JldHVybiBsKHUodCxlKSl9LHR9LGRlZmluZT1mdW5jdGlvbihlLHQsaSl7dmFy
IHM9cFtlXQorcyYmIm5ldyIhPT1zLnN0YXRlfHwoYXJndW1lbnRzLmxlbmd0aDwyJiZuKGFyZ3Vt
ZW50cy5sZW5ndGgpLEFycmF5LmlzQXJyYXkodCl8fChpPXQsdD1bXSkscFtlXT1pIGluc3RhbmNl
b2Ygbz9uZXcgcihpLmlkLHQsaSwhMCk6bmV3IHIoZSx0LGksITEpKX0sZGVmaW5lLmV4cG9ydHM9
ZnVuY3Rpb24oZSx0KXt2YXIgbj1wW2VdCitpZighbnx8Im5ldyI9PT1uLnN0YXRlKXJldHVybiBu
PW5ldyByKGUsW10saSxudWxsKSxuLm1vZHVsZS5leHBvcnRzPXQsbi5zdGF0ZT0iZmluYWxpemVk
IixwW2VdPW4sbn0sZGVmaW5lLmFsaWFzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIDI9PT1hcmd1bWVu
dHMubGVuZ3RoP2RlZmluZSh0LG5ldyBvKGUpKTpuZXcgbyhlKX0scmVxdWlyZWpzLmVudHJpZXM9
cmVxdWlyZWpzLl9lYWtfc2Vlbj1wLHJlcXVpcmVqcy5oYXM9bCxyZXF1aXJlanMudW5zZWU9ZnVu
Y3Rpb24oZSl7YShlLCIodW5zZWUpIiwhMSkudW5zZWUoKX0scmVxdWlyZWpzLmNsZWFyPWZ1bmN0
aW9uKCl7cmVxdWlyZWpzLmVudHJpZXM9cmVxdWlyZWpzLl9lYWtfc2Vlbj1wPXQoKSxmPXQoKX0s
ZGVmaW5lKCJmb28iLGZ1bmN0aW9uKCl7fSksZGVmaW5lKCJmb28vYmFyIixbXSxmdW5jdGlvbigp
e30pLGRlZmluZSgiZm9vL2FzZGYiLFsibW9kdWxlIiwiZXhwb3J0cyIsInJlcXVpcmUiXSxmdW5j
dGlvbihlLHQsbil7bi5oYXMoImZvby9iYXIiKSYmbigiZm9vL2JhciIpfSksZGVmaW5lKCJmb28v
YmF6IixbXSxkZWZpbmUuYWxpYXMoImZvbyIpKSxkZWZpbmUoImZvby9xdXoiLGRlZmluZS5hbGlh
cygiZm9vIikpLGRlZmluZS5hbGlhcygiZm9vIiwiZm9vL3F1eCIpLGRlZmluZSgiZm9vL2JhciIs
WyJmb28iLCIuL3F1eiIsIi4vYmF6IiwiLi9hc2RmIiwiLi9iYXIiLCIuLi9mb28iXSxmdW5jdGlv
bigpe30pLGRlZmluZSgiZm9vL21haW4iLFsiZm9vL2JhciJdLGZ1bmN0aW9uKCl7fSksZGVmaW5l
LmV4cG9ydHMoImZvby9leHBvcnRzIix7fSkscmVxdWlyZSgiZm9vL2V4cG9ydHMiKSxyZXF1aXJl
KCJmb28vbWFpbiIpLHJlcXVpcmUudW5zZWUoImZvby9iYXIiKSxyZXF1aXJlanMuY2xlYXIoKSwi
b2JqZWN0Ij09dHlwZW9mIGV4cG9ydHMmJiJvYmplY3QiPT10eXBlb2YgbW9kdWxlJiZtb2R1bGUu
ZXhwb3J0cyYmKG1vZHVsZS5leHBvcnRzPXtyZXF1aXJlOnJlcXVpcmUsZGVmaW5lOmRlZmluZX0p
fSkodGhpcyksZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCIKKyJvYmplY3QiPT10eXBlb2YgbW9k
dWxlJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZS5leHBvcnRzP21vZHVsZS5leHBvcnRzPWUuZG9j
dW1lbnQ/dChlLCEwKTpmdW5jdGlvbihlKXtpZighZS5kb2N1bWVudCl0aHJvdyBuZXcgRXJyb3Io
ImpRdWVyeSByZXF1aXJlcyBhIHdpbmRvdyB3aXRoIGEgZG9jdW1lbnQiKQorcmV0dXJuIHQoZSl9
OnQoZSl9KCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp0aGlzLGZ1bmN0aW9uKGUs
dCl7InVzZSBzdHJpY3QiCitmdW5jdGlvbiBuKGUsdCl7dD10fHxuZQordmFyIG49dC5jcmVhdGVF
bGVtZW50KCJzY3JpcHQiKQorbi50ZXh0PWUsdC5oZWFkLmFwcGVuZENoaWxkKG4pLnBhcmVudE5v
ZGUucmVtb3ZlQ2hpbGQobil9ZnVuY3Rpb24gcihlKXt2YXIgdD0hIWUmJiJsZW5ndGgiaW4gZSYm
ZS5sZW5ndGgsbj1kZS50eXBlKGUpCityZXR1cm4iZnVuY3Rpb24iIT09biYmIWRlLmlzV2luZG93
KGUpJiYoImFycmF5Ij09PW58fDA9PT10fHwibnVtYmVyIj09dHlwZW9mIHQmJnQ+MCYmdC0xIGlu
IGUpfWZ1bmN0aW9uIGkoZSx0KXtyZXR1cm4gZS5ub2RlTmFtZSYmZS5ub2RlTmFtZS50b0xvd2Vy
Q2FzZSgpPT09dC50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIG8oZSx0LG4pe3JldHVybiBkZS5pc0Z1
bmN0aW9uKHQpP2RlLmdyZXAoZSxmdW5jdGlvbihlLHIpe3JldHVybiEhdC5jYWxsKGUscixlKSE9
PW59KTp0Lm5vZGVUeXBlP2RlLmdyZXAoZSxmdW5jdGlvbihlKXtyZXR1cm4gZT09PXQhPT1ufSk6
InN0cmluZyIhPXR5cGVvZiB0P2RlLmdyZXAoZSxmdW5jdGlvbihlKXtyZXR1cm4gYWUuY2FsbCh0
LGUpPi0xIT09bn0pOkNlLnRlc3QodCk/ZGUuZmlsdGVyKHQsZSxuKToodD1kZS5maWx0ZXIodCxl
KSxkZS5ncmVwKGUsZnVuY3Rpb24oZSl7cmV0dXJuIGFlLmNhbGwodCxlKT4tMSE9PW4mJjE9PT1l
Lm5vZGVUeXBlfSkpfWZ1bmN0aW9uIHMoZSx0KXtmb3IoOyhlPWVbdF0pJiYxIT09ZS5ub2RlVHlw
ZTspO3JldHVybiBlfWZ1bmN0aW9uIGEoZSl7dmFyIHQ9e30KK3JldHVybiBkZS5lYWNoKGUubWF0
Y2goUmUpfHxbXSxmdW5jdGlvbihlLG4pe3Rbbl09ITB9KSx0fWZ1bmN0aW9uIHUoZSl7cmV0dXJu
IGV9ZnVuY3Rpb24gbChlKXt0aHJvdyBlfWZ1bmN0aW9uIGMoZSx0LG4scil7dmFyIGkKK3RyeXtl
JiZkZS5pc0Z1bmN0aW9uKGk9ZS5wcm9taXNlKT9pLmNhbGwoZSkuZG9uZSh0KS5mYWlsKG4pOmUm
JmRlLmlzRnVuY3Rpb24oaT1lLnRoZW4pP2kuY2FsbChlLHQsbik6dC5hcHBseSh2b2lkIDAsW2Vd
LnNsaWNlKHIpKX1jYXRjaChlKXtuLmFwcGx5KHZvaWQgMCxbZV0pfX1mdW5jdGlvbiBwKCl7bmUu
cmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIscCksZS5yZW1vdmVFdmVudExp
c3RlbmVyKCJsb2FkIixwKSxkZS5yZWFkeSgpfWZ1bmN0aW9uIGYoKXt0aGlzLmV4cGFuZG89ZGUu
ZXhwYW5kbytmLnVpZCsrfWZ1bmN0aW9uIGgoZSl7cmV0dXJuInRydWUiPT09ZXx8ImZhbHNlIiE9
PWUmJigibnVsbCI9PT1lP251bGw6ZT09PStlKyIiPytlOkllLnRlc3QoZSk/SlNPTi5wYXJzZShl
KTplKX1mdW5jdGlvbiBkKGUsdCxuKXt2YXIgcgoraWYodm9pZCAwPT09biYmMT09PWUubm9kZVR5
cGUpaWYocj0iZGF0YS0iK3QucmVwbGFjZShNZSwiLSQmIikudG9Mb3dlckNhc2UoKSwic3RyaW5n
Ij09dHlwZW9mKG49ZS5nZXRBdHRyaWJ1dGUocikpKXt0cnl7bj1oKG4pfWNhdGNoKGUpe31MZS5z
ZXQoZSx0LG4pfWVsc2Ugbj12b2lkIDAKK3JldHVybiBufWZ1bmN0aW9uIG0oZSx0LG4scil7dmFy
IGksbz0xLHM9MjAsYT1yP2Z1bmN0aW9uKCl7cmV0dXJuIHIuY3VyKCl9OmZ1bmN0aW9uKCl7cmV0
dXJuIGRlLmNzcyhlLHQsIiIpfSx1PWEoKSxsPW4mJm5bM118fChkZS5jc3NOdW1iZXJbdF0/IiI6
InB4IiksYz0oZGUuY3NzTnVtYmVyW3RdfHwicHgiIT09bCYmK3UpJiZ6ZS5leGVjKGRlLmNzcyhl
LHQpKQoraWYoYyYmY1szXSE9PWwpe2w9bHx8Y1szXSxuPW58fFtdLGM9K3V8fDEKK2Rve289b3x8
Ii41IixjLz1vLGRlLnN0eWxlKGUsdCxjK2wpfXdoaWxlKG8hPT0obz1hKCkvdSkmJjEhPT1vJiYt
LXMpfXJldHVybiBuJiYoYz0rY3x8K3V8fDAsaT1uWzFdP2MrKG5bMV0rMSkqblsyXTorblsyXSxy
JiYoci51bml0PWwsci5zdGFydD1jLHIuZW5kPWkpKSxpfWZ1bmN0aW9uIGcoZSl7dmFyIHQsbj1l
Lm93bmVyRG9jdW1lbnQscj1lLm5vZGVOYW1lLGk9SGVbcl0KK3JldHVybiBpfHwodD1uLmJvZHku
YXBwZW5kQ2hpbGQobi5jcmVhdGVFbGVtZW50KHIpKSxpPWRlLmNzcyh0LCJkaXNwbGF5IiksdC5w
YXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpLCJub25lIj09PWkmJihpPSJibG9jayIpLEhlW3JdPWks
aSl9ZnVuY3Rpb24geShlLHQpe2Zvcih2YXIgbixyLGk9W10sbz0wLHM9ZS5sZW5ndGg7bzxzO28r
KylyPWVbb10sci5zdHlsZSYmKG49ci5zdHlsZS5kaXNwbGF5LHQ/KCJub25lIj09PW4mJihpW29d
PURlLmdldChyLCJkaXNwbGF5Iil8fG51bGwsaVtvXXx8KHIuc3R5bGUuZGlzcGxheT0iIikpLCIi
PT09ci5zdHlsZS5kaXNwbGF5JiZCZShyKSYmKGlbb109ZyhyKSkpOiJub25lIiE9PW4mJihpW29d
PSJub25lIixEZS5zZXQociwiZGlzcGxheSIsbikpKQorZm9yKG89MDtvPHM7bysrKW51bGwhPWlb
b10mJihlW29dLnN0eWxlLmRpc3BsYXk9aVtvXSkKK3JldHVybiBlfWZ1bmN0aW9uIHYoZSx0KXt2
YXIgbgorcmV0dXJuIG49dm9pZCAwIT09ZS5nZXRFbGVtZW50c0J5VGFnTmFtZT9lLmdldEVsZW1l
bnRzQnlUYWdOYW1lKHR8fCIqIik6dm9pZCAwIT09ZS5xdWVyeVNlbGVjdG9yQWxsP2UucXVlcnlT
ZWxlY3RvckFsbCh0fHwiKiIpOltdLHZvaWQgMD09PXR8fHQmJmkoZSx0KT9kZS5tZXJnZShbZV0s
bik6bn1mdW5jdGlvbiBiKGUsdCl7Zm9yKHZhciBuPTAscj1lLmxlbmd0aDtuPHI7bisrKURlLnNl
dChlW25dLCJnbG9iYWxFdmFsIiwhdHx8RGUuZ2V0KHRbbl0sImdsb2JhbEV2YWwiKSl9ZnVuY3Rp
b24gXyhlLHQsbixyLGkpe2Zvcih2YXIgbyxzLGEsdSxsLGMscD10LmNyZWF0ZURvY3VtZW50RnJh
Z21lbnQoKSxmPVtdLGg9MCxkPWUubGVuZ3RoO2g8ZDtoKyspaWYoKG89ZVtoXSl8fDA9PT1vKWlm
KCJvYmplY3QiPT09ZGUudHlwZShvKSlkZS5tZXJnZShmLG8ubm9kZVR5cGU/W29dOm8pCitlbHNl
IGlmKEtlLnRlc3Qobykpe2ZvcihzPXN8fHAuYXBwZW5kQ2hpbGQodC5jcmVhdGVFbGVtZW50KCJk
aXYiKSksYT0oV2UuZXhlYyhvKXx8WyIiLCIiXSlbMV0udG9Mb3dlckNhc2UoKSx1PUdlW2FdfHxH
ZS5fZGVmYXVsdCxzLmlubmVySFRNTD11WzFdK2RlLmh0bWxQcmVmaWx0ZXIobykrdVsyXSxjPXVb
MF07Yy0tOylzPXMubGFzdENoaWxkCitkZS5tZXJnZShmLHMuY2hpbGROb2Rlcykscz1wLmZpcnN0
Q2hpbGQscy50ZXh0Q29udGVudD0iIn1lbHNlIGYucHVzaCh0LmNyZWF0ZVRleHROb2RlKG8pKQor
Zm9yKHAudGV4dENvbnRlbnQ9IiIsaD0wO289ZltoKytdOylpZihyJiZkZS5pbkFycmF5KG8scik+
LTEpaSYmaS5wdXNoKG8pCitlbHNlIGlmKGw9ZGUuY29udGFpbnMoby5vd25lckRvY3VtZW50LG8p
LHM9dihwLmFwcGVuZENoaWxkKG8pLCJzY3JpcHQiKSxsJiZiKHMpLG4pZm9yKGM9MDtvPXNbYysr
XTspJGUudGVzdChvLnR5cGV8fCIiKSYmbi5wdXNoKG8pCityZXR1cm4gcH1mdW5jdGlvbiB3KCl7
cmV0dXJuITB9ZnVuY3Rpb24gRSgpe3JldHVybiExfWZ1bmN0aW9uIHgoKXt0cnl7cmV0dXJuIG5l
LmFjdGl2ZUVsZW1lbnR9Y2F0Y2goZSl7fX1mdW5jdGlvbiBDKGUsdCxuLHIsaSxvKXt2YXIgcyxh
CitpZigib2JqZWN0Ij09dHlwZW9mIHQpeyJzdHJpbmciIT10eXBlb2YgbiYmKHI9cnx8bixuPXZv
aWQgMCkKK2ZvcihhIGluIHQpQyhlLGEsbixyLHRbYV0sbykKK3JldHVybiBlfWlmKG51bGw9PXIm
Jm51bGw9PWk/KGk9bixyPW49dm9pZCAwKTpudWxsPT1pJiYoInN0cmluZyI9PXR5cGVvZiBuPyhp
PXIscj12b2lkIDApOihpPXIscj1uLG49dm9pZCAwKSksITE9PT1pKWk9RQorZWxzZSBpZighaSly
ZXR1cm4gZQorcmV0dXJuIDE9PT1vJiYocz1pLGk9ZnVuY3Rpb24oZSl7cmV0dXJuIGRlKCkub2Zm
KGUpLHMuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxpLmd1aWQ9cy5ndWlkfHwocy5ndWlkPWRlLmd1
aWQrKykpLGUuZWFjaChmdW5jdGlvbigpe2RlLmV2ZW50LmFkZCh0aGlzLHQsaSxyLG4pfSl9ZnVu
Y3Rpb24gTyhlLHQpe3JldHVybiBpKGUsInRhYmxlIikmJmkoMTEhPT10Lm5vZGVUeXBlP3Q6dC5m
aXJzdENoaWxkLCJ0ciIpP2RlKCI+dGJvZHkiLGUpWzBdfHxlOmV9ZnVuY3Rpb24gQShlKXtyZXR1
cm4gZS50eXBlPShudWxsIT09ZS5nZXRBdHRyaWJ1dGUoInR5cGUiKSkrIi8iK2UudHlwZSxlfWZ1
bmN0aW9uIFQoZSl7dmFyIHQ9bnQuZXhlYyhlLnR5cGUpCityZXR1cm4gdD9lLnR5cGU9dFsxXTpl
LnJlbW92ZUF0dHJpYnV0ZSgidHlwZSIpLGV9ZnVuY3Rpb24gUyhlLHQpe3ZhciBuLHIsaSxvLHMs
YSx1LGwKK2lmKDE9PT10Lm5vZGVUeXBlKXtpZihEZS5oYXNEYXRhKGUpJiYobz1EZS5hY2Nlc3Mo
ZSkscz1EZS5zZXQodCxvKSxsPW8uZXZlbnRzKSl7ZGVsZXRlIHMuaGFuZGxlLHMuZXZlbnRzPXt9
Citmb3IoaSBpbiBsKWZvcihuPTAscj1sW2ldLmxlbmd0aDtuPHI7bisrKWRlLmV2ZW50LmFkZCh0
LGksbFtpXVtuXSl9TGUuaGFzRGF0YShlKSYmKGE9TGUuYWNjZXNzKGUpLHU9ZGUuZXh0ZW5kKHt9
LGEpLExlLnNldCh0LHUpKX19ZnVuY3Rpb24gUihlLHQpe3ZhciBuPXQubm9kZU5hbWUudG9Mb3dl
ckNhc2UoKQorImlucHV0Ij09PW4mJlZlLnRlc3QoZS50eXBlKT90LmNoZWNrZWQ9ZS5jaGVja2Vk
OiJpbnB1dCIhPT1uJiYidGV4dGFyZWEiIT09bnx8KHQuZGVmYXVsdFZhbHVlPWUuZGVmYXVsdFZh
bHVlKX1mdW5jdGlvbiBrKGUsdCxyLGkpe3Q9b2UuYXBwbHkoW10sdCkKK3ZhciBvLHMsYSx1LGws
YyxwPTAsZj1lLmxlbmd0aCxoPWYtMSxkPXRbMF0sbT1kZS5pc0Z1bmN0aW9uKGQpCitpZihtfHxm
PjEmJiJzdHJpbmciPT10eXBlb2YgZCYmIWhlLmNoZWNrQ2xvbmUmJnR0LnRlc3QoZCkpcmV0dXJu
IGUuZWFjaChmdW5jdGlvbihuKXt2YXIgbz1lLmVxKG4pCittJiYodFswXT1kLmNhbGwodGhpcyxu
LG8uaHRtbCgpKSksayhvLHQscixpKX0pCitpZihmJiYobz1fKHQsZVswXS5vd25lckRvY3VtZW50
LCExLGUsaSkscz1vLmZpcnN0Q2hpbGQsMT09PW8uY2hpbGROb2Rlcy5sZW5ndGgmJihvPXMpLHN8
fGkpKXtmb3IoYT1kZS5tYXAodihvLCJzY3JpcHQiKSxBKSx1PWEubGVuZ3RoO3A8ZjtwKyspbD1v
LHAhPT1oJiYobD1kZS5jbG9uZShsLCEwLCEwKSx1JiZkZS5tZXJnZShhLHYobCwic2NyaXB0Iikp
KSxyLmNhbGwoZVtwXSxsLHApCitpZih1KWZvcihjPWFbYS5sZW5ndGgtMV0ub3duZXJEb2N1bWVu
dCxkZS5tYXAoYSxUKSxwPTA7cDx1O3ArKylsPWFbcF0sJGUudGVzdChsLnR5cGV8fCIiKSYmIURl
LmFjY2VzcyhsLCJnbG9iYWxFdmFsIikmJmRlLmNvbnRhaW5zKGMsbCkmJihsLnNyYz9kZS5fZXZh
bFVybCYmZGUuX2V2YWxVcmwobC5zcmMpOm4obC50ZXh0Q29udGVudC5yZXBsYWNlKHJ0LCIiKSxj
KSl9cmV0dXJuIGV9ZnVuY3Rpb24gTihlLHQsbil7Zm9yKHZhciByLGk9dD9kZS5maWx0ZXIodCxl
KTplLG89MDtudWxsIT0ocj1pW29dKTtvKyspbnx8MSE9PXIubm9kZVR5cGV8fGRlLmNsZWFuRGF0
YSh2KHIpKSxyLnBhcmVudE5vZGUmJihuJiZkZS5jb250YWlucyhyLm93bmVyRG9jdW1lbnQscikm
JmIodihyLCJzY3JpcHQiKSksci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHIpKQorcmV0dXJuIGV9
ZnVuY3Rpb24gUChlLHQsbil7dmFyIHIsaSxvLHMsYT1lLnN0eWxlCityZXR1cm4gbj1ufHxzdChl
KSxuJiYocz1uLmdldFByb3BlcnR5VmFsdWUodCl8fG5bdF0sIiIhPT1zfHxkZS5jb250YWlucyhl
Lm93bmVyRG9jdW1lbnQsZSl8fChzPWRlLnN0eWxlKGUsdCkpLCFoZS5waXhlbE1hcmdpblJpZ2h0
KCkmJm90LnRlc3QocykmJml0LnRlc3QodCkmJihyPWEud2lkdGgsaT1hLm1pbldpZHRoLG89YS5t
YXhXaWR0aCxhLm1pbldpZHRoPWEubWF4V2lkdGg9YS53aWR0aD1zLHM9bi53aWR0aCxhLndpZHRo
PXIsYS5taW5XaWR0aD1pLGEubWF4V2lkdGg9bykpLHZvaWQgMCE9PXM/cysiIjpzfWZ1bmN0aW9u
IGooZSx0KXtyZXR1cm57Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGUoKT92b2lkIGRlbGV0ZSB0aGlz
LmdldDoodGhpcy5nZXQ9dCkuYXBwbHkodGhpcyxhcmd1bWVudHMpfX19ZnVuY3Rpb24gRChlKXtp
ZihlIGluIGZ0KXJldHVybiBlCitmb3IodmFyIHQ9ZVswXS50b1VwcGVyQ2FzZSgpK2Uuc2xpY2Uo
MSksbj1wdC5sZW5ndGg7bi0tOylpZigoZT1wdFtuXSt0KWluIGZ0KXJldHVybiBlfWZ1bmN0aW9u
IEwoZSl7dmFyIHQ9ZGUuY3NzUHJvcHNbZV0KK3JldHVybiB0fHwodD1kZS5jc3NQcm9wc1tlXT1E
KGUpfHxlKSx0fWZ1bmN0aW9uIEkoZSx0LG4pe3ZhciByPXplLmV4ZWModCkKK3JldHVybiByP01h
dGgubWF4KDAsclsyXS0obnx8MCkpKyhyWzNdfHwicHgiKTp0fWZ1bmN0aW9uIE0oZSx0LG4scixp
KXt2YXIgbyxzPTAKK2ZvcihvPW49PT0ocj8iYm9yZGVyIjoiY29udGVudCIpPzQ6IndpZHRoIj09
PXQ/MTowO288NDtvKz0yKSJtYXJnaW4iPT09biYmKHMrPWRlLmNzcyhlLG4rVWVbb10sITAsaSkp
LHI/KCJjb250ZW50Ij09PW4mJihzLT1kZS5jc3MoZSwicGFkZGluZyIrVWVbb10sITAsaSkpLCJt
YXJnaW4iIT09biYmKHMtPWRlLmNzcyhlLCJib3JkZXIiK1VlW29dKyJXaWR0aCIsITAsaSkpKToo
cys9ZGUuY3NzKGUsInBhZGRpbmciK1VlW29dLCEwLGkpLCJwYWRkaW5nIiE9PW4mJihzKz1kZS5j
c3MoZSwiYm9yZGVyIitVZVtvXSsiV2lkdGgiLCEwLGkpKSkKK3JldHVybiBzfWZ1bmN0aW9uIEYo
ZSx0LG4pe3ZhciByLGk9c3QoZSksbz1QKGUsdCxpKSxzPSJib3JkZXItYm94Ij09PWRlLmNzcyhl
LCJib3hTaXppbmciLCExLGkpCityZXR1cm4gb3QudGVzdChvKT9vOihyPXMmJihoZS5ib3hTaXpp
bmdSZWxpYWJsZSgpfHxvPT09ZS5zdHlsZVt0XSksImF1dG8iPT09byYmKG89ZVsib2Zmc2V0Iit0
WzBdLnRvVXBwZXJDYXNlKCkrdC5zbGljZSgxKV0pLChvPXBhcnNlRmxvYXQobyl8fDApK00oZSx0
LG58fChzPyJib3JkZXIiOiJjb250ZW50IikscixpKSsicHgiKX1mdW5jdGlvbiB6KGUsdCxuLHIs
aSl7cmV0dXJuIG5ldyB6LnByb3RvdHlwZS5pbml0KGUsdCxuLHIsaSl9ZnVuY3Rpb24gVSgpe2R0
JiYoITE9PT1uZS5oaWRkZW4mJmUucmVxdWVzdEFuaW1hdGlvbkZyYW1lP2UucmVxdWVzdEFuaW1h
dGlvbkZyYW1lKFUpOmUuc2V0VGltZW91dChVLGRlLmZ4LmludGVydmFsKSxkZS5meC50aWNrKCkp
fWZ1bmN0aW9uIEIoKXtyZXR1cm4gZS5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aHQ9dm9pZCAwfSks
aHQ9ZGUubm93KCl9ZnVuY3Rpb24gcShlLHQpe3ZhciBuLHI9MCxpPXtoZWlnaHQ6ZX0KK2Zvcih0
PXQ/MTowO3I8NDtyKz0yLXQpbj1VZVtyXSxpWyJtYXJnaW4iK25dPWlbInBhZGRpbmciK25dPWUK
K3JldHVybiB0JiYoaS5vcGFjaXR5PWkud2lkdGg9ZSksaX1mdW5jdGlvbiBIKGUsdCxuKXtmb3Io
dmFyIHIsaT0oJC50d2VlbmVyc1t0XXx8W10pLmNvbmNhdCgkLnR3ZWVuZXJzWyIqIl0pLG89MCxz
PWkubGVuZ3RoO288cztvKyspaWYocj1pW29dLmNhbGwobix0LGUpKXJldHVybiByfWZ1bmN0aW9u
IFYoZSx0LG4pe3ZhciByLGksbyxzLGEsdSxsLGMscD0id2lkdGgiaW4gdHx8ImhlaWdodCJpbiB0
LGY9dGhpcyxoPXt9LGQ9ZS5zdHlsZSxtPWUubm9kZVR5cGUmJkJlKGUpLGc9RGUuZ2V0KGUsImZ4
c2hvdyIpCituLnF1ZXVlfHwocz1kZS5fcXVldWVIb29rcyhlLCJmeCIpLG51bGw9PXMudW5xdWV1
ZWQmJihzLnVucXVldWVkPTAsYT1zLmVtcHR5LmZpcmUscy5lbXB0eS5maXJlPWZ1bmN0aW9uKCl7
cy51bnF1ZXVlZHx8YSgpfSkscy51bnF1ZXVlZCsrLGYuYWx3YXlzKGZ1bmN0aW9uKCl7Zi5hbHdh
eXMoZnVuY3Rpb24oKXtzLnVucXVldWVkLS0sZGUucXVldWUoZSwiZngiKS5sZW5ndGh8fHMuZW1w
dHkuZmlyZSgpfSl9KSkKK2ZvcihyIGluIHQpaWYoaT10W3JdLG10LnRlc3QoaSkpe2lmKGRlbGV0
ZSB0W3JdLG89b3x8InRvZ2dsZSI9PT1pLGk9PT0obT8iaGlkZSI6InNob3ciKSl7aWYoInNob3ci
IT09aXx8IWd8fHZvaWQgMD09PWdbcl0pY29udGludWUKK209ITB9aFtyXT1nJiZnW3JdfHxkZS5z
dHlsZShlLHIpfWlmKCh1PSFkZS5pc0VtcHR5T2JqZWN0KHQpKXx8IWRlLmlzRW1wdHlPYmplY3Qo
aCkpe3AmJjE9PT1lLm5vZGVUeXBlJiYobi5vdmVyZmxvdz1bZC5vdmVyZmxvdyxkLm92ZXJmbG93
WCxkLm92ZXJmbG93WV0sbD1nJiZnLmRpc3BsYXksbnVsbD09bCYmKGw9RGUuZ2V0KGUsImRpc3Bs
YXkiKSksYz1kZS5jc3MoZSwiZGlzcGxheSIpLCJub25lIj09PWMmJihsP2M9bDooeShbZV0sITAp
LGw9ZS5zdHlsZS5kaXNwbGF5fHxsLGM9ZGUuY3NzKGUsImRpc3BsYXkiKSx5KFtlXSkpKSwoImlu
bGluZSI9PT1jfHwiaW5saW5lLWJsb2NrIj09PWMmJm51bGwhPWwpJiYibm9uZSI9PT1kZS5jc3Mo
ZSwiZmxvYXQiKSYmKHV8fChmLmRvbmUoZnVuY3Rpb24oKXtkLmRpc3BsYXk9bH0pLG51bGw9PWwm
JihjPWQuZGlzcGxheSxsPSJub25lIj09PWM/IiI6YykpLGQuZGlzcGxheT0iaW5saW5lLWJsb2Nr
IikpLG4ub3ZlcmZsb3cmJihkLm92ZXJmbG93PSJoaWRkZW4iLGYuYWx3YXlzKGZ1bmN0aW9uKCl7
ZC5vdmVyZmxvdz1uLm92ZXJmbG93WzBdLGQub3ZlcmZsb3dYPW4ub3ZlcmZsb3dbMV0sZC5vdmVy
Zmxvd1k9bi5vdmVyZmxvd1syXX0pKSx1PSExCitmb3IociBpbiBoKXV8fChnPyJoaWRkZW4iaW4g
ZyYmKG09Zy5oaWRkZW4pOmc9RGUuYWNjZXNzKGUsImZ4c2hvdyIse2Rpc3BsYXk6bH0pLG8mJihn
LmhpZGRlbj0hbSksbSYmeShbZV0sITApLGYuZG9uZShmdW5jdGlvbigpe218fHkoW2VdKSxEZS5y
ZW1vdmUoZSwiZnhzaG93IikKK2ZvcihyIGluIGgpZGUuc3R5bGUoZSxyLGhbcl0pfSkpLHU9SCht
P2dbcl06MCxyLGYpLHIgaW4gZ3x8KGdbcl09dS5zdGFydCxtJiYodS5lbmQ9dS5zdGFydCx1LnN0
YXJ0PTApKX19ZnVuY3Rpb24gVyhlLHQpe3ZhciBuLHIsaSxvLHMKK2ZvcihuIGluIGUpaWYocj1k
ZS5jYW1lbENhc2UobiksaT10W3JdLG89ZVtuXSxBcnJheS5pc0FycmF5KG8pJiYoaT1vWzFdLG89
ZVtuXT1vWzBdKSxuIT09ciYmKGVbcl09byxkZWxldGUgZVtuXSksKHM9ZGUuY3NzSG9va3Nbcl0p
JiYiZXhwYW5kImluIHMpe289cy5leHBhbmQobyksZGVsZXRlIGVbcl0KK2ZvcihuIGluIG8pbiBp
biBlfHwoZVtuXT1vW25dLHRbbl09aSl9ZWxzZSB0W3JdPWl9ZnVuY3Rpb24gJChlLHQsbil7dmFy
IHIsaSxvPTAscz0kLnByZWZpbHRlcnMubGVuZ3RoLGE9ZGUuRGVmZXJyZWQoKS5hbHdheXMoZnVu
Y3Rpb24oKXtkZWxldGUgdS5lbGVtfSksdT1mdW5jdGlvbigpe2lmKGkpcmV0dXJuITEKK2Zvcih2
YXIgdD1odHx8QigpLG49TWF0aC5tYXgoMCxsLnN0YXJ0VGltZStsLmR1cmF0aW9uLXQpLHI9bi9s
LmR1cmF0aW9ufHwwLG89MS1yLHM9MCx1PWwudHdlZW5zLmxlbmd0aDtzPHU7cysrKWwudHdlZW5z
W3NdLnJ1bihvKQorcmV0dXJuIGEubm90aWZ5V2l0aChlLFtsLG8sbl0pLG88MSYmdT9uOih1fHxh
Lm5vdGlmeVdpdGgoZSxbbCwxLDBdKSxhLnJlc29sdmVXaXRoKGUsW2xdKSwhMSl9LGw9YS5wcm9t
aXNlKHtlbGVtOmUscHJvcHM6ZGUuZXh0ZW5kKHt9LHQpLG9wdHM6ZGUuZXh0ZW5kKCEwLHtzcGVj
aWFsRWFzaW5nOnt9LGVhc2luZzpkZS5lYXNpbmcuX2RlZmF1bHR9LG4pLG9yaWdpbmFsUHJvcGVy
dGllczp0LG9yaWdpbmFsT3B0aW9uczpuLHN0YXJ0VGltZTpodHx8QigpLGR1cmF0aW9uOm4uZHVy
YXRpb24sdHdlZW5zOltdLGNyZWF0ZVR3ZWVuOmZ1bmN0aW9uKHQsbil7dmFyIHI9ZGUuVHdlZW4o
ZSxsLm9wdHMsdCxuLGwub3B0cy5zcGVjaWFsRWFzaW5nW3RdfHxsLm9wdHMuZWFzaW5nKQorcmV0
dXJuIGwudHdlZW5zLnB1c2gocikscn0sc3RvcDpmdW5jdGlvbih0KXt2YXIgbj0wLHI9dD9sLnR3
ZWVucy5sZW5ndGg6MAoraWYoaSlyZXR1cm4gdGhpcworZm9yKGk9ITA7bjxyO24rKylsLnR3ZWVu
c1tuXS5ydW4oMSkKK3JldHVybiB0PyhhLm5vdGlmeVdpdGgoZSxbbCwxLDBdKSxhLnJlc29sdmVX
aXRoKGUsW2wsdF0pKTphLnJlamVjdFdpdGgoZSxbbCx0XSksdGhpc319KSxjPWwucHJvcHMKK2Zv
cihXKGMsbC5vcHRzLnNwZWNpYWxFYXNpbmcpO288cztvKyspaWYocj0kLnByZWZpbHRlcnNbb10u
Y2FsbChsLGUsYyxsLm9wdHMpKXJldHVybiBkZS5pc0Z1bmN0aW9uKHIuc3RvcCkmJihkZS5fcXVl
dWVIb29rcyhsLmVsZW0sbC5vcHRzLnF1ZXVlKS5zdG9wPWRlLnByb3h5KHIuc3RvcCxyKSkscgor
cmV0dXJuIGRlLm1hcChjLEgsbCksZGUuaXNGdW5jdGlvbihsLm9wdHMuc3RhcnQpJiZsLm9wdHMu
c3RhcnQuY2FsbChlLGwpLGwucHJvZ3Jlc3MobC5vcHRzLnByb2dyZXNzKS5kb25lKGwub3B0cy5k
b25lLGwub3B0cy5jb21wbGV0ZSkuZmFpbChsLm9wdHMuZmFpbCkuYWx3YXlzKGwub3B0cy5hbHdh
eXMpLGRlLmZ4LnRpbWVyKGRlLmV4dGVuZCh1LHtlbGVtOmUsYW5pbTpsLHF1ZXVlOmwub3B0cy5x
dWV1ZX0pKSxsfWZ1bmN0aW9uIEcoZSl7cmV0dXJuKGUubWF0Y2goUmUpfHxbXSkuam9pbigiICIp
fWZ1bmN0aW9uIEsoZSl7cmV0dXJuIGUuZ2V0QXR0cmlidXRlJiZlLmdldEF0dHJpYnV0ZSgiY2xh
c3MiKXx8IiJ9ZnVuY3Rpb24gUShlLHQsbixyKXt2YXIgaQoraWYoQXJyYXkuaXNBcnJheSh0KSlk
ZS5lYWNoKHQsZnVuY3Rpb24odCxpKXtufHxBdC50ZXN0KGUpP3IoZSxpKTpRKGUrIlsiKygib2Jq
ZWN0Ij09dHlwZW9mIGkmJm51bGwhPWk/dDoiIikrIl0iLGksbixyKX0pCitlbHNlIGlmKG58fCJv
YmplY3QiIT09ZGUudHlwZSh0KSlyKGUsdCkKK2Vsc2UgZm9yKGkgaW4gdClRKGUrIlsiK2krIl0i
LHRbaV0sbixyKX1mdW5jdGlvbiBZKGUpe3JldHVybiBmdW5jdGlvbih0LG4peyJzdHJpbmciIT10
eXBlb2YgdCYmKG49dCx0PSIqIikKK3ZhciByLGk9MCxvPXQudG9Mb3dlckNhc2UoKS5tYXRjaChS
ZSl8fFtdCitpZihkZS5pc0Z1bmN0aW9uKG4pKWZvcig7cj1vW2krK107KSIrIj09PXJbMF0/KHI9
ci5zbGljZSgxKXx8IioiLChlW3JdPWVbcl18fFtdKS51bnNoaWZ0KG4pKTooZVtyXT1lW3JdfHxb
XSkucHVzaChuKX19ZnVuY3Rpb24gSihlLHQsbixyKXtmdW5jdGlvbiBpKGEpe3ZhciB1CityZXR1
cm4gb1thXT0hMCxkZS5lYWNoKGVbYV18fFtdLGZ1bmN0aW9uKGUsYSl7dmFyIGw9YSh0LG4scikK
K3JldHVybiJzdHJpbmciIT10eXBlb2YgbHx8c3x8b1tsXT9zPyEodT1sKTp2b2lkIDA6KHQuZGF0
YVR5cGVzLnVuc2hpZnQobCksaShsKSwhMSl9KSx1fXZhciBvPXt9LHM9ZT09PUZ0CityZXR1cm4g
aSh0LmRhdGFUeXBlc1swXSl8fCFvWyIqIl0mJmkoIioiKX1mdW5jdGlvbiBYKGUsdCl7dmFyIG4s
cixpPWRlLmFqYXhTZXR0aW5ncy5mbGF0T3B0aW9uc3x8e30KK2ZvcihuIGluIHQpdm9pZCAwIT09
dFtuXSYmKChpW25dP2U6cnx8KHI9e30pKVtuXT10W25dKQorcmV0dXJuIHImJmRlLmV4dGVuZCgh
MCxlLHIpLGV9ZnVuY3Rpb24gWihlLHQsbil7Zm9yKHZhciByLGksbyxzLGE9ZS5jb250ZW50cyx1
PWUuZGF0YVR5cGVzOyIqIj09PXVbMF07KXUuc2hpZnQoKSx2b2lkIDA9PT1yJiYocj1lLm1pbWVU
eXBlfHx0LmdldFJlc3BvbnNlSGVhZGVyKCJDb250ZW50LVR5cGUiKSkKK2lmKHIpZm9yKGkgaW4g
YSlpZihhW2ldJiZhW2ldLnRlc3Qocikpe3UudW5zaGlmdChpKQorYnJlYWt9aWYodVswXWluIG4p
bz11WzBdCitlbHNle2ZvcihpIGluIG4pe2lmKCF1WzBdfHxlLmNvbnZlcnRlcnNbaSsiICIrdVsw
XV0pe289aQorYnJlYWt9c3x8KHM9aSl9bz1vfHxzfWlmKG8pcmV0dXJuIG8hPT11WzBdJiZ1LnVu
c2hpZnQobyksbltvXX1mdW5jdGlvbiBlZShlLHQsbixyKXt2YXIgaSxvLHMsYSx1LGw9e30sYz1l
LmRhdGFUeXBlcy5zbGljZSgpCitpZihjWzFdKWZvcihzIGluIGUuY29udmVydGVycylsW3MudG9M
b3dlckNhc2UoKV09ZS5jb252ZXJ0ZXJzW3NdCitmb3Iobz1jLnNoaWZ0KCk7bzspaWYoZS5yZXNw
b25zZUZpZWxkc1tvXSYmKG5bZS5yZXNwb25zZUZpZWxkc1tvXV09dCksIXUmJnImJmUuZGF0YUZp
bHRlciYmKHQ9ZS5kYXRhRmlsdGVyKHQsZS5kYXRhVHlwZSkpLHU9byxvPWMuc2hpZnQoKSlpZigi
KiI9PT1vKW89dQorZWxzZSBpZigiKiIhPT11JiZ1IT09byl7aWYoIShzPWxbdSsiICIrb118fGxb
IiogIitvXSkpZm9yKGkgaW4gbClpZihhPWkuc3BsaXQoIiAiKSxhWzFdPT09byYmKHM9bFt1KyIg
IithWzBdXXx8bFsiKiAiK2FbMF1dKSl7ITA9PT1zP3M9bFtpXTohMCE9PWxbaV0mJihvPWFbMF0s
Yy51bnNoaWZ0KGFbMV0pKQorYnJlYWt9aWYoITAhPT1zKWlmKHMmJmUudGhyb3dzKXQ9cyh0KQor
ZWxzZSB0cnl7dD1zKHQpfWNhdGNoKGUpe3JldHVybntzdGF0ZToicGFyc2VyZXJyb3IiLGVycm9y
OnM/ZToiTm8gY29udmVyc2lvbiBmcm9tICIrdSsiIHRvICIrb319fXJldHVybntzdGF0ZToic3Vj
Y2VzcyIsZGF0YTp0fX12YXIgdGU9W10sbmU9ZS5kb2N1bWVudCxyZT1PYmplY3QuZ2V0UHJvdG90
eXBlT2YsaWU9dGUuc2xpY2Usb2U9dGUuY29uY2F0LHNlPXRlLnB1c2gsYWU9dGUuaW5kZXhPZix1
ZT17fSxsZT11ZS50b1N0cmluZyxjZT11ZS5oYXNPd25Qcm9wZXJ0eSxwZT1jZS50b1N0cmluZyxm
ZT1wZS5jYWxsKE9iamVjdCksaGU9e30sZGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbmV3IGRlLmZu
LmluaXQoZSx0KX0sbWU9L15bXHNcdUZFRkZceEEwXSt8W1xzXHVGRUZGXHhBMF0rJC9nLGdlPS9e
LW1zLS8seWU9Ly0oW2Etel0pL2csdmU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC50b1VwcGVyQ2Fz
ZSgpfQorZGUuZm49ZGUucHJvdG90eXBlPXtqcXVlcnk6IjMuMi4xIixjb25zdHJ1Y3RvcjpkZSxs
ZW5ndGg6MCx0b0FycmF5OmZ1bmN0aW9uKCl7cmV0dXJuIGllLmNhbGwodGhpcyl9LGdldDpmdW5j
dGlvbihlKXtyZXR1cm4gbnVsbD09ZT9pZS5jYWxsKHRoaXMpOmU8MD90aGlzW2UrdGhpcy5sZW5n
dGhdOnRoaXNbZV19LHB1c2hTdGFjazpmdW5jdGlvbihlKXt2YXIgdD1kZS5tZXJnZSh0aGlzLmNv
bnN0cnVjdG9yKCksZSkKK3JldHVybiB0LnByZXZPYmplY3Q9dGhpcyx0fSxlYWNoOmZ1bmN0aW9u
KGUpe3JldHVybiBkZS5lYWNoKHRoaXMsZSl9LG1hcDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5w
dXNoU3RhY2soZGUubWFwKHRoaXMsZnVuY3Rpb24odCxuKXtyZXR1cm4gZS5jYWxsKHQsbix0KX0p
KX0sc2xpY2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soaWUuYXBwbHkodGhpcyxh
cmd1bWVudHMpKX0sZmlyc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lcSgwKX0sbGFzdDpmdW5j
dGlvbigpe3JldHVybiB0aGlzLmVxKC0xKX0sZXE6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5sZW5n
dGgsbj0rZSsoZTwwP3Q6MCkKK3JldHVybiB0aGlzLnB1c2hTdGFjayhuPj0wJiZuPHQ/W3RoaXNb
bl1dOltdKX0sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJldk9iamVjdHx8dGhpcy5jb25z
dHJ1Y3RvcigpfSxwdXNoOnNlLHNvcnQ6dGUuc29ydCxzcGxpY2U6dGUuc3BsaWNlfSxkZS5leHRl
bmQ9ZGUuZm4uZXh0ZW5kPWZ1bmN0aW9uKCl7dmFyIGUsdCxuLHIsaSxvLHM9YXJndW1lbnRzWzBd
fHx7fSxhPTEsdT1hcmd1bWVudHMubGVuZ3RoLGw9ITEKK2ZvcigiYm9vbGVhbiI9PXR5cGVvZiBz
JiYobD1zLHM9YXJndW1lbnRzW2FdfHx7fSxhKyspLCJvYmplY3QiPT10eXBlb2Ygc3x8ZGUuaXNG
dW5jdGlvbihzKXx8KHM9e30pLGE9PT11JiYocz10aGlzLGEtLSk7YTx1O2ErKylpZihudWxsIT0o
ZT1hcmd1bWVudHNbYV0pKWZvcih0IGluIGUpbj1zW3RdLHI9ZVt0XSxzIT09ciYmKGwmJnImJihk
ZS5pc1BsYWluT2JqZWN0KHIpfHwoaT1BcnJheS5pc0FycmF5KHIpKSk/KGk/KGk9ITEsbz1uJiZB
cnJheS5pc0FycmF5KG4pP246W10pOm89biYmZGUuaXNQbGFpbk9iamVjdChuKT9uOnt9LHNbdF09
ZGUuZXh0ZW5kKGwsbyxyKSk6dm9pZCAwIT09ciYmKHNbdF09cikpCityZXR1cm4gc30sZGUuZXh0
ZW5kKHtleHBhbmRvOiJqUXVlcnkiKygiMy4yLjEiK01hdGgucmFuZG9tKCkpLnJlcGxhY2UoL1xE
L2csIiIpLGlzUmVhZHk6ITAsZXJyb3I6ZnVuY3Rpb24oZSl7dGhyb3cgbmV3IEVycm9yKGUpfSxu
b29wOmZ1bmN0aW9uKCl7fSxpc0Z1bmN0aW9uOmZ1bmN0aW9uKGUpe3JldHVybiJmdW5jdGlvbiI9
PT1kZS50eXBlKGUpfSxpc1dpbmRvdzpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9ZSYmZT09PWUu
d2luZG93fSxpc051bWVyaWM6ZnVuY3Rpb24oZSl7dmFyIHQ9ZGUudHlwZShlKQorcmV0dXJuKCJu
dW1iZXIiPT09dHx8InN0cmluZyI9PT10KSYmIWlzTmFOKGUtcGFyc2VGbG9hdChlKSl9LGlzUGxh
aW5PYmplY3Q6ZnVuY3Rpb24oZSl7dmFyIHQsbgorcmV0dXJuISghZXx8IltvYmplY3QgT2JqZWN0
XSIhPT1sZS5jYWxsKGUpKSYmKCEodD1yZShlKSl8fCJmdW5jdGlvbiI9PXR5cGVvZihuPWNlLmNh
bGwodCwiY29uc3RydWN0b3IiKSYmdC5jb25zdHJ1Y3RvcikmJnBlLmNhbGwobik9PT1mZSl9LGlz
RW1wdHlPYmplY3Q6ZnVuY3Rpb24oZSl7dmFyIHQKK2Zvcih0IGluIGUpcmV0dXJuITEKK3JldHVy
biEwfSx0eXBlOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP2UrIiI6Im9iamVjdCI9PXR5cGVv
ZiBlfHwiZnVuY3Rpb24iPT10eXBlb2YgZT91ZVtsZS5jYWxsKGUpXXx8Im9iamVjdCI6dHlwZW9m
IGV9LGdsb2JhbEV2YWw6ZnVuY3Rpb24oZSl7bihlKX0sY2FtZWxDYXNlOmZ1bmN0aW9uKGUpe3Jl
dHVybiBlLnJlcGxhY2UoZ2UsIm1zLSIpLnJlcGxhY2UoeWUsdmUpfSxlYWNoOmZ1bmN0aW9uKGUs
dCl7dmFyIG4saT0wCitpZihyKGUpKWZvcihuPWUubGVuZ3RoO2k8biYmITEhPT10LmNhbGwoZVtp
XSxpLGVbaV0pO2krKyk7ZWxzZSBmb3IoaSBpbiBlKWlmKCExPT09dC5jYWxsKGVbaV0saSxlW2ld
KSlicmVhaworcmV0dXJuIGV9LHRyaW06ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWU/IiI6KGUr
IiIpLnJlcGxhY2UobWUsIiIpfSxtYWtlQXJyYXk6ZnVuY3Rpb24oZSx0KXt2YXIgbj10fHxbXQor
cmV0dXJuIG51bGwhPWUmJihyKE9iamVjdChlKSk/ZGUubWVyZ2Uobiwic3RyaW5nIj09dHlwZW9m
IGU/W2VdOmUpOnNlLmNhbGwobixlKSksbn0saW5BcnJheTpmdW5jdGlvbihlLHQsbil7cmV0dXJu
IG51bGw9PXQ/LTE6YWUuY2FsbCh0LGUsbil9LG1lcmdlOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBu
PSt0Lmxlbmd0aCxyPTAsaT1lLmxlbmd0aDtyPG47cisrKWVbaSsrXT10W3JdCityZXR1cm4gZS5s
ZW5ndGg9aSxlfSxncmVwOmZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9W10saT0wLG89ZS5sZW5n
dGgscz0hbjtpPG87aSsrKSF0KGVbaV0saSkhPT1zJiZyLnB1c2goZVtpXSkKK3JldHVybiByfSxt
YXA6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpLG8scz0wLGE9W10KK2lmKHIoZSkpZm9yKGk9ZS5sZW5n
dGg7czxpO3MrKyludWxsIT0obz10KGVbc10scyxuKSkmJmEucHVzaChvKQorZWxzZSBmb3IocyBp
biBlKW51bGwhPShvPXQoZVtzXSxzLG4pKSYmYS5wdXNoKG8pCityZXR1cm4gb2UuYXBwbHkoW10s
YSl9LGd1aWQ6MSxwcm94eTpmdW5jdGlvbihlLHQpe3ZhciBuLHIsaQoraWYoInN0cmluZyI9PXR5
cGVvZiB0JiYobj1lW3RdLHQ9ZSxlPW4pLGRlLmlzRnVuY3Rpb24oZSkpcmV0dXJuIHI9aWUuY2Fs
bChhcmd1bWVudHMsMiksaT1mdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHR8fHRoaXMsci5jb25j
YXQoaWUuY2FsbChhcmd1bWVudHMpKSl9LGkuZ3VpZD1lLmd1aWQ9ZS5ndWlkfHxkZS5ndWlkKyss
aX0sbm93OkRhdGUubm93LHN1cHBvcnQ6aGV9KSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYo
ZGUuZm5bU3ltYm9sLml0ZXJhdG9yXT10ZVtTeW1ib2wuaXRlcmF0b3JdKSxkZS5lYWNoKCJCb29s
ZWFuIE51bWJlciBTdHJpbmcgRnVuY3Rpb24gQXJyYXkgRGF0ZSBSZWdFeHAgT2JqZWN0IEVycm9y
IFN5bWJvbCIuc3BsaXQoIiAiKSxmdW5jdGlvbihlLHQpe3VlWyJbb2JqZWN0ICIrdCsiXSJdPXQu
dG9Mb3dlckNhc2UoKX0pCit2YXIgYmU9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlLHQsbixyKXt2
YXIgaSxvLHMsYSx1LGMsZixoPXQmJnQub3duZXJEb2N1bWVudCxkPXQ/dC5ub2RlVHlwZTo5Citp
ZihuPW58fFtdLCJzdHJpbmciIT10eXBlb2YgZXx8IWV8fDEhPT1kJiY5IT09ZCYmMTEhPT1kKXJl
dHVybiBuCitpZighciYmKCh0P3Qub3duZXJEb2N1bWVudHx8dDp6KSE9PU4mJmsodCksdD10fHxO
LGopKXtpZigxMSE9PWQmJih1PW1lLmV4ZWMoZSkpKWlmKGk9dVsxXSl7aWYoOT09PWQpe2lmKCEo
cz10LmdldEVsZW1lbnRCeUlkKGkpKSlyZXR1cm4gbgoraWYocy5pZD09PWkpcmV0dXJuIG4ucHVz
aChzKSxufWVsc2UgaWYoaCYmKHM9aC5nZXRFbGVtZW50QnlJZChpKSkmJk0odCxzKSYmcy5pZD09
PWkpcmV0dXJuIG4ucHVzaChzKSxufWVsc2V7aWYodVsyXSlyZXR1cm4gWS5hcHBseShuLHQuZ2V0
RWxlbWVudHNCeVRhZ05hbWUoZSkpLG4KK2lmKChpPXVbM10pJiZfLmdldEVsZW1lbnRzQnlDbGFz
c05hbWUmJnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSlyZXR1cm4gWS5hcHBseShuLHQuZ2V0RWxl
bWVudHNCeUNsYXNzTmFtZShpKSksbn1pZihfLnFzYSYmIVZbZSsiICJdJiYoIUR8fCFELnRlc3Qo
ZSkpKXtpZigxIT09ZCloPXQsZj1lCitlbHNlIGlmKCJvYmplY3QiIT09dC5ub2RlTmFtZS50b0xv
d2VyQ2FzZSgpKXtmb3IoKGE9dC5nZXRBdHRyaWJ1dGUoImlkIikpP2E9YS5yZXBsYWNlKGJlLF9l
KTp0LnNldEF0dHJpYnV0ZSgiaWQiLGE9RiksYz1DKGUpLG89Yy5sZW5ndGg7by0tOyljW29dPSIj
IithKyIgIitwKGNbb10pCitmPWMuam9pbigiLCIpLGg9Z2UudGVzdChlKSYmbCh0LnBhcmVudE5v
ZGUpfHx0fWlmKGYpdHJ5e3JldHVybiBZLmFwcGx5KG4saC5xdWVyeVNlbGVjdG9yQWxsKGYpKSxu
fWNhdGNoKGUpe31maW5hbGx5e2E9PT1GJiZ0LnJlbW92ZUF0dHJpYnV0ZSgiaWQiKX19fXJldHVy
biBBKGUucmVwbGFjZShvZSwiJDEiKSx0LG4scil9ZnVuY3Rpb24gbigpe2Z1bmN0aW9uIGUobixy
KXtyZXR1cm4gdC5wdXNoKG4rIiAiKT53LmNhY2hlTGVuZ3RoJiZkZWxldGUgZVt0LnNoaWZ0KCld
LGVbbisiICJdPXJ9dmFyIHQ9W10KK3JldHVybiBlfWZ1bmN0aW9uIHIoZSl7cmV0dXJuIGVbRl09
ITAsZX1mdW5jdGlvbiBpKGUpe3ZhciB0PU4uY3JlYXRlRWxlbWVudCgiZmllbGRzZXQiKQordHJ5
e3JldHVybiEhZSh0KX1jYXRjaChlKXtyZXR1cm4hMX1maW5hbGx5e3QucGFyZW50Tm9kZSYmdC5w
YXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpLHQ9bnVsbH19ZnVuY3Rpb24gbyhlLHQpe2Zvcih2YXIg
bj1lLnNwbGl0KCJ8Iikscj1uLmxlbmd0aDtyLS07KXcuYXR0ckhhbmRsZVtuW3JdXT10fWZ1bmN0
aW9uIHMoZSx0KXt2YXIgbj10JiZlLHI9biYmMT09PWUubm9kZVR5cGUmJjE9PT10Lm5vZGVUeXBl
JiZlLnNvdXJjZUluZGV4LXQuc291cmNlSW5kZXgKK2lmKHIpcmV0dXJuIHIKK2lmKG4pZm9yKDtu
PW4ubmV4dFNpYmxpbmc7KWlmKG49PT10KXJldHVybi0xCityZXR1cm4gZT8xOi0xfWZ1bmN0aW9u
IGEoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiJmb3JtImluIHQ/dC5wYXJlbnROb2RlJiYh
MT09PXQuZGlzYWJsZWQ/ImxhYmVsImluIHQ/ImxhYmVsImluIHQucGFyZW50Tm9kZT90LnBhcmVu
dE5vZGUuZGlzYWJsZWQ9PT1lOnQuZGlzYWJsZWQ9PT1lOnQuaXNEaXNhYmxlZD09PWV8fHQuaXNE
aXNhYmxlZCE9PSFlJiZFZSh0KT09PWU6dC5kaXNhYmxlZD09PWU6ImxhYmVsImluIHQmJnQuZGlz
YWJsZWQ9PT1lfX1mdW5jdGlvbiB1KGUpe3JldHVybiByKGZ1bmN0aW9uKHQpe3JldHVybiB0PSt0
LHIoZnVuY3Rpb24obixyKXtmb3IodmFyIGksbz1lKFtdLG4ubGVuZ3RoLHQpLHM9by5sZW5ndGg7
cy0tOyluW2k9b1tzXV0mJihuW2ldPSEocltpXT1uW2ldKSl9KX0pfWZ1bmN0aW9uIGwoZSl7cmV0
dXJuIGUmJnZvaWQgMCE9PWUuZ2V0RWxlbWVudHNCeVRhZ05hbWUmJmV9ZnVuY3Rpb24gYygpe31m
dW5jdGlvbiBwKGUpe2Zvcih2YXIgdD0wLG49ZS5sZW5ndGgscj0iIjt0PG47dCsrKXIrPWVbdF0u
dmFsdWUKK3JldHVybiByfWZ1bmN0aW9uIGYoZSx0LG4pe3ZhciByPXQuZGlyLGk9dC5uZXh0LG89
aXx8cixzPW4mJiJwYXJlbnROb2RlIj09PW8sYT1CKysKK3JldHVybiB0LmZpcnN0P2Z1bmN0aW9u
KHQsbixpKXtmb3IoO3Q9dFtyXTspaWYoMT09PXQubm9kZVR5cGV8fHMpcmV0dXJuIGUodCxuLGkp
CityZXR1cm4hMX06ZnVuY3Rpb24odCxuLHUpe3ZhciBsLGMscCxmPVtVLGFdCitpZih1KXtmb3Io
O3Q9dFtyXTspaWYoKDE9PT10Lm5vZGVUeXBlfHxzKSYmZSh0LG4sdSkpcmV0dXJuITB9ZWxzZSBm
b3IoO3Q9dFtyXTspaWYoMT09PXQubm9kZVR5cGV8fHMpaWYocD10W0ZdfHwodFtGXT17fSksYz1w
W3QudW5pcXVlSURdfHwocFt0LnVuaXF1ZUlEXT17fSksaSYmaT09PXQubm9kZU5hbWUudG9Mb3dl
ckNhc2UoKSl0PXRbcl18fHQKK2Vsc2V7aWYoKGw9Y1tvXSkmJmxbMF09PT1VJiZsWzFdPT09YSly
ZXR1cm4gZlsyXT1sWzJdCitpZihjW29dPWYsZlsyXT1lKHQsbix1KSlyZXR1cm4hMH1yZXR1cm4h
MX19ZnVuY3Rpb24gaChlKXtyZXR1cm4gZS5sZW5ndGg+MT9mdW5jdGlvbih0LG4scil7Zm9yKHZh
ciBpPWUubGVuZ3RoO2ktLTspaWYoIWVbaV0odCxuLHIpKXJldHVybiExCityZXR1cm4hMH06ZVsw
XX1mdW5jdGlvbiBkKGUsbixyKXtmb3IodmFyIGk9MCxvPW4ubGVuZ3RoO2k8bztpKyspdChlLG5b
aV0scikKK3JldHVybiByfWZ1bmN0aW9uIG0oZSx0LG4scixpKXtmb3IodmFyIG8scz1bXSxhPTAs
dT1lLmxlbmd0aCxsPW51bGwhPXQ7YTx1O2ErKykobz1lW2FdKSYmKG4mJiFuKG8scixpKXx8KHMu
cHVzaChvKSxsJiZ0LnB1c2goYSkpKQorcmV0dXJuIHN9ZnVuY3Rpb24gZyhlLHQsbixpLG8scyl7
cmV0dXJuIGkmJiFpW0ZdJiYoaT1nKGkpKSxvJiYhb1tGXSYmKG89ZyhvLHMpKSxyKGZ1bmN0aW9u
KHIscyxhLHUpe3ZhciBsLGMscCxmPVtdLGg9W10sZz1zLmxlbmd0aCx5PXJ8fGQodHx8IioiLGEu
bm9kZVR5cGU/W2FdOmEsW10pLHY9IWV8fCFyJiZ0P3k6bSh5LGYsZSxhLHUpLGI9bj9vfHwocj9l
Omd8fGkpP1tdOnM6dgoraWYobiYmbih2LGIsYSx1KSxpKWZvcihsPW0oYixoKSxpKGwsW10sYSx1
KSxjPWwubGVuZ3RoO2MtLTspKHA9bFtjXSkmJihiW2hbY11dPSEodltoW2NdXT1wKSkKK2lmKHIp
e2lmKG98fGUpe2lmKG8pe2ZvcihsPVtdLGM9Yi5sZW5ndGg7Yy0tOykocD1iW2NdKSYmbC5wdXNo
KHZbY109cCkKK28obnVsbCxiPVtdLGwsdSl9Zm9yKGM9Yi5sZW5ndGg7Yy0tOykocD1iW2NdKSYm
KGw9bz9YKHIscCk6ZltjXSk+LTEmJihyW2xdPSEoc1tsXT1wKSl9fWVsc2UgYj1tKGI9PT1zP2Iu
c3BsaWNlKGcsYi5sZW5ndGgpOmIpLG8/byhudWxsLHMsYix1KTpZLmFwcGx5KHMsYil9KX1mdW5j
dGlvbiB5KGUpe2Zvcih2YXIgdCxuLHIsaT1lLmxlbmd0aCxvPXcucmVsYXRpdmVbZVswXS50eXBl
XSxzPW98fHcucmVsYXRpdmVbIiAiXSxhPW8/MTowLHU9ZihmdW5jdGlvbihlKXtyZXR1cm4gZT09
PXR9LHMsITApLGw9ZihmdW5jdGlvbihlKXtyZXR1cm4gWCh0LGUpPi0xfSxzLCEwKSxjPVtmdW5j
dGlvbihlLG4scil7dmFyIGk9IW8mJihyfHxuIT09VCl8fCgodD1uKS5ub2RlVHlwZT91KGUsbixy
KTpsKGUsbixyKSkKK3JldHVybiB0PW51bGwsaX1dO2E8aTthKyspaWYobj13LnJlbGF0aXZlW2Vb
YV0udHlwZV0pYz1bZihoKGMpLG4pXQorZWxzZXtpZihuPXcuZmlsdGVyW2VbYV0udHlwZV0uYXBw
bHkobnVsbCxlW2FdLm1hdGNoZXMpLG5bRl0pe2ZvcihyPSsrYTtyPGkmJiF3LnJlbGF0aXZlW2Vb
cl0udHlwZV07cisrKTtyZXR1cm4gZyhhPjEmJmgoYyksYT4xJiZwKGUuc2xpY2UoMCxhLTEpLmNv
bmNhdCh7dmFsdWU6IiAiPT09ZVthLTJdLnR5cGU/IioiOiIifSkpLnJlcGxhY2Uob2UsIiQxIiks
bixhPHImJnkoZS5zbGljZShhLHIpKSxyPGkmJnkoZT1lLnNsaWNlKHIpKSxyPGkmJnAoZSkpfWMu
cHVzaChuKX1yZXR1cm4gaChjKX1mdW5jdGlvbiB2KGUsbil7dmFyIGk9bi5sZW5ndGg+MCxvPWUu
bGVuZ3RoPjAscz1mdW5jdGlvbihyLHMsYSx1LGwpe3ZhciBjLHAsZixoPTAsZD0iMCIsZz1yJiZb
XSx5PVtdLHY9VCxiPXJ8fG8mJncuZmluZC5UQUcoIioiLGwpLF89VSs9bnVsbD09dj8xOk1hdGgu
cmFuZG9tKCl8fC4xLEU9Yi5sZW5ndGgKK2ZvcihsJiYoVD1zPT09Tnx8c3x8bCk7ZCE9PUUmJm51
bGwhPShjPWJbZF0pO2QrKyl7aWYobyYmYyl7Zm9yKHA9MCxzfHxjLm93bmVyRG9jdW1lbnQ9PT1O
fHwoayhjKSxhPSFqKTtmPWVbcCsrXTspaWYoZihjLHN8fE4sYSkpe3UucHVzaChjKQorYnJlYWt9
bCYmKFU9Xyl9aSYmKChjPSFmJiZjKSYmaC0tLHImJmcucHVzaChjKSl9aWYoaCs9ZCxpJiZkIT09
aCl7Zm9yKHA9MDtmPW5bcCsrXTspZihnLHkscyxhKQoraWYocil7aWYoaD4wKWZvcig7ZC0tOyln
W2RdfHx5W2RdfHwoeVtkXT1LLmNhbGwodSkpCit5PW0oeSl9WS5hcHBseSh1LHkpLGwmJiFyJiZ5
Lmxlbmd0aD4wJiZoK24ubGVuZ3RoPjEmJnQudW5pcXVlU29ydCh1KX1yZXR1cm4gbCYmKFU9XyxU
PXYpLGd9CityZXR1cm4gaT9yKHMpOnN9dmFyIGIsXyx3LEUseCxDLE8sQSxULFMsUixrLE4sUCxq
LEQsTCxJLE0sRj0ic2l6emxlIisxKm5ldyBEYXRlLHo9ZS5kb2N1bWVudCxVPTAsQj0wLHE9bigp
LEg9bigpLFY9bigpLFc9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09PXQmJihSPSEwKSwwfSwkPXt9
Lmhhc093blByb3BlcnR5LEc9W10sSz1HLnBvcCxRPUcucHVzaCxZPUcucHVzaCxKPUcuc2xpY2Us
WD1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wLHI9ZS5sZW5ndGg7bjxyO24rKylpZihlW25dPT09
dClyZXR1cm4gbgorcmV0dXJuLTF9LFo9ImNoZWNrZWR8c2VsZWN0ZWR8YXN5bmN8YXV0b2ZvY3Vz
fGF1dG9wbGF5fGNvbnRyb2xzfGRlZmVyfGRpc2FibGVkfGhpZGRlbnxpc21hcHxsb29wfG11bHRp
cGxlfG9wZW58cmVhZG9ubHl8cmVxdWlyZWR8c2NvcGVkIixlZT0iW1xceDIwXFx0XFxyXFxuXFxm
XSIsdGU9Iig/OlxcXFwufFtcXHctXXxbXlwwLVxceGEwXSkrIixuZT0iXFxbIitlZSsiKigiK3Rl
KyIpKD86IitlZSsiKihbKl4kfCF+XT89KSIrZWUrIiooPzonKCg/OlxcXFwufFteXFxcXCddKSop
J3xcIigoPzpcXFxcLnxbXlxcXFxcIl0pKilcInwoIit0ZSsiKSl8KSIrZWUrIipcXF0iLHJlPSI6
KCIrdGUrIikoPzpcXCgoKCcoKD86XFxcXC58W15cXFxcJ10pKiknfFwiKCg/OlxcXFwufFteXFxc
XFwiXSkqKVwiKXwoKD86XFxcXC58W15cXFxcKClbXFxdXXwiK25lKyIpKil8LiopXFwpfCkiLGll
PW5ldyBSZWdFeHAoZWUrIisiLCJnIiksb2U9bmV3IFJlZ0V4cCgiXiIrZWUrIit8KCg/Ol58W15c
XFxcXSkoPzpcXFxcLikqKSIrZWUrIiskIiwiZyIpLHNlPW5ldyBSZWdFeHAoIl4iK2VlKyIqLCIr
ZWUrIioiKSxhZT1uZXcgUmVnRXhwKCJeIitlZSsiKihbPit+XXwiK2VlKyIpIitlZSsiKiIpLHVl
PW5ldyBSZWdFeHAoIj0iK2VlKyIqKFteXFxdJ1wiXSo/KSIrZWUrIipcXF0iLCJnIiksbGU9bmV3
IFJlZ0V4cChyZSksY2U9bmV3IFJlZ0V4cCgiXiIrdGUrIiQiKSxwZT17SUQ6bmV3IFJlZ0V4cCgi
XiMoIit0ZSsiKSIpLENMQVNTOm5ldyBSZWdFeHAoIl5cXC4oIit0ZSsiKSIpLFRBRzpuZXcgUmVn
RXhwKCJeKCIrdGUrInxbKl0pIiksQVRUUjpuZXcgUmVnRXhwKCJeIituZSksUFNFVURPOm5ldyBS
ZWdFeHAoIl4iK3JlKSxDSElMRDpuZXcgUmVnRXhwKCJeOihvbmx5fGZpcnN0fGxhc3R8bnRofG50
aC1sYXN0KS0oY2hpbGR8b2YtdHlwZSkoPzpcXCgiK2VlKyIqKGV2ZW58b2RkfCgoWystXXwpKFxc
ZCopbnwpIitlZSsiKig/OihbKy1dfCkiK2VlKyIqKFxcZCspfCkpIitlZSsiKlxcKXwpIiwiaSIp
LGJvb2w6bmV3IFJlZ0V4cCgiXig/OiIrWisiKSQiLCJpIiksbmVlZHNDb250ZXh0Om5ldyBSZWdF
eHAoIl4iK2VlKyIqWz4rfl18OihldmVufG9kZHxlcXxndHxsdHxudGh8Zmlyc3R8bGFzdCkoPzpc
XCgiK2VlKyIqKCg/Oi1cXGQpP1xcZCopIitlZSsiKlxcKXwpKD89W14tXXwkKSIsImkiKX0sZmU9
L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSxoZT0vXmhcZCQvaSxkZT0vXlte
e10rXHtccypcW25hdGl2ZSBcdy8sbWU9L14oPzojKFtcdy1dKyl8KFx3Kyl8XC4oW1x3LV0rKSkk
LyxnZT0vWyt+XS8seWU9bmV3IFJlZ0V4cCgiXFxcXChbXFxkYS1mXXsxLDZ9IitlZSsiP3woIitl
ZSsiKXwuKSIsImlnIiksdmU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPSIweCIrdC02NTUzNgorcmV0
dXJuIHIhPT1yfHxuP3Q6cjwwP1N0cmluZy5mcm9tQ2hhckNvZGUocis2NTUzNik6U3RyaW5nLmZy
b21DaGFyQ29kZShyPj4xMHw1NTI5NiwxMDIzJnJ8NTYzMjApfSxiZT0vKFtcMC1ceDFmXHg3Zl18
Xi0/XGQpfF4tJHxbXlwwLVx4MWZceDdmLVx1RkZGRlx3LV0vZyxfZT1mdW5jdGlvbihlLHQpe3Jl
dHVybiB0PyJcMCI9PT1lPyLvv70iOmUuc2xpY2UoMCwtMSkrIlxcIitlLmNoYXJDb2RlQXQoZS5s
ZW5ndGgtMSkudG9TdHJpbmcoMTYpKyIgIjoiXFwiK2V9LHdlPWZ1bmN0aW9uKCl7aygpfSxFZT1m
KGZ1bmN0aW9uKGUpe3JldHVybiEwPT09ZS5kaXNhYmxlZCYmKCJmb3JtImluIGV8fCJsYWJlbCJp
biBlKX0se2RpcjoicGFyZW50Tm9kZSIsbmV4dDoibGVnZW5kIn0pCit0cnl7WS5hcHBseShHPUou
Y2FsbCh6LmNoaWxkTm9kZXMpLHouY2hpbGROb2RlcyksR1t6LmNoaWxkTm9kZXMubGVuZ3RoXS5u
b2RlVHlwZX1jYXRjaChlKXtZPXthcHBseTpHLmxlbmd0aD9mdW5jdGlvbihlLHQpe1EuYXBwbHko
ZSxKLmNhbGwodCkpfTpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1lLmxlbmd0aCxyPTA7ZVtuKytd
PXRbcisrXTspO2UubGVuZ3RoPW4tMX19fV89dC5zdXBwb3J0PXt9LHg9dC5pc1hNTD1mdW5jdGlv
bihlKXt2YXIgdD1lJiYoZS5vd25lckRvY3VtZW50fHxlKS5kb2N1bWVudEVsZW1lbnQKK3JldHVy
biEhdCYmIkhUTUwiIT09dC5ub2RlTmFtZX0saz10LnNldERvY3VtZW50PWZ1bmN0aW9uKGUpe3Zh
ciB0LG4scj1lP2Uub3duZXJEb2N1bWVudHx8ZTp6CityZXR1cm4gciE9PU4mJjk9PT1yLm5vZGVU
eXBlJiZyLmRvY3VtZW50RWxlbWVudD8oTj1yLFA9Ti5kb2N1bWVudEVsZW1lbnQsaj0heChOKSx6
IT09TiYmKG49Ti5kZWZhdWx0VmlldykmJm4udG9wIT09biYmKG4uYWRkRXZlbnRMaXN0ZW5lcj9u
LmFkZEV2ZW50TGlzdGVuZXIoInVubG9hZCIsd2UsITEpOm4uYXR0YWNoRXZlbnQmJm4uYXR0YWNo
RXZlbnQoIm9udW5sb2FkIix3ZSkpLF8uYXR0cmlidXRlcz1pKGZ1bmN0aW9uKGUpe3JldHVybiBl
LmNsYXNzTmFtZT0iaSIsIWUuZ2V0QXR0cmlidXRlKCJjbGFzc05hbWUiKX0pLF8uZ2V0RWxlbWVu
dHNCeVRhZ05hbWU9aShmdW5jdGlvbihlKXtyZXR1cm4gZS5hcHBlbmRDaGlsZChOLmNyZWF0ZUNv
bW1lbnQoIiIpKSwhZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpLmxlbmd0aH0pLF8uZ2V0RWxl
bWVudHNCeUNsYXNzTmFtZT1kZS50ZXN0KE4uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSksXy5nZXRC
eUlkPWkoZnVuY3Rpb24oZSl7cmV0dXJuIFAuYXBwZW5kQ2hpbGQoZSkuaWQ9RiwhTi5nZXRFbGVt
ZW50c0J5TmFtZXx8IU4uZ2V0RWxlbWVudHNCeU5hbWUoRikubGVuZ3RofSksXy5nZXRCeUlkPyh3
LmZpbHRlci5JRD1mdW5jdGlvbihlKXt2YXIgdD1lLnJlcGxhY2UoeWUsdmUpCityZXR1cm4gZnVu
Y3Rpb24oZSl7cmV0dXJuIGUuZ2V0QXR0cmlidXRlKCJpZCIpPT09dH19LHcuZmluZC5JRD1mdW5j
dGlvbihlLHQpe2lmKHZvaWQgMCE9PXQuZ2V0RWxlbWVudEJ5SWQmJmope3ZhciBuPXQuZ2V0RWxl
bWVudEJ5SWQoZSkKK3JldHVybiBuP1tuXTpbXX19KToody5maWx0ZXIuSUQ9ZnVuY3Rpb24oZSl7
dmFyIHQ9ZS5yZXBsYWNlKHllLHZlKQorcmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuPXZvaWQgMCE9
PWUuZ2V0QXR0cmlidXRlTm9kZSYmZS5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpCityZXR1cm4gbiYm
bi52YWx1ZT09PXR9fSx3LmZpbmQuSUQ9ZnVuY3Rpb24oZSx0KXtpZih2b2lkIDAhPT10LmdldEVs
ZW1lbnRCeUlkJiZqKXt2YXIgbixyLGksbz10LmdldEVsZW1lbnRCeUlkKGUpCitpZihvKXtpZigo
bj1vLmdldEF0dHJpYnV0ZU5vZGUoImlkIikpJiZuLnZhbHVlPT09ZSlyZXR1cm5bb10KK2Zvcihp
PXQuZ2V0RWxlbWVudHNCeU5hbWUoZSkscj0wO289aVtyKytdOylpZigobj1vLmdldEF0dHJpYnV0
ZU5vZGUoImlkIikpJiZuLnZhbHVlPT09ZSlyZXR1cm5bb119cmV0dXJuW119fSksdy5maW5kLlRB
Rz1fLmdldEVsZW1lbnRzQnlUYWdOYW1lP2Z1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMCE9PXQu
Z2V0RWxlbWVudHNCeVRhZ05hbWU/dC5nZXRFbGVtZW50c0J5VGFnTmFtZShlKTpfLnFzYT90LnF1
ZXJ5U2VsZWN0b3JBbGwoZSk6dm9pZCAwfTpmdW5jdGlvbihlLHQpe3ZhciBuLHI9W10saT0wLG89
dC5nZXRFbGVtZW50c0J5VGFnTmFtZShlKQoraWYoIioiPT09ZSl7Zm9yKDtuPW9baSsrXTspMT09
PW4ubm9kZVR5cGUmJnIucHVzaChuKQorcmV0dXJuIHJ9cmV0dXJuIG99LHcuZmluZC5DTEFTUz1f
LmdldEVsZW1lbnRzQnlDbGFzc05hbWUmJmZ1bmN0aW9uKGUsdCl7aWYodm9pZCAwIT09dC5nZXRF
bGVtZW50c0J5Q2xhc3NOYW1lJiZqKXJldHVybiB0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoZSl9
LEw9W10sRD1bXSwoXy5xc2E9ZGUudGVzdChOLnF1ZXJ5U2VsZWN0b3JBbGwpKSYmKGkoZnVuY3Rp
b24oZSl7UC5hcHBlbmRDaGlsZChlKS5pbm5lckhUTUw9IjxhIGlkPSciK0YrIic+PC9hPjxzZWxl
Y3QgaWQ9JyIrRisiLVxyXFwnIG1zYWxsb3djYXB0dXJlPScnPjxvcHRpb24gc2VsZWN0ZWQ9Jyc+
PC9vcHRpb24+PC9zZWxlY3Q+IixlLnF1ZXJ5U2VsZWN0b3JBbGwoIlttc2FsbG93Y2FwdHVyZV49
JyddIikubGVuZ3RoJiZELnB1c2goIlsqXiRdPSIrZWUrIiooPzonJ3xcIlwiKSIpLGUucXVlcnlT
ZWxlY3RvckFsbCgiW3NlbGVjdGVkXSIpLmxlbmd0aHx8RC5wdXNoKCJcXFsiK2VlKyIqKD86dmFs
dWV8IitaKyIpIiksZS5xdWVyeVNlbGVjdG9yQWxsKCJbaWR+PSIrRisiLV0iKS5sZW5ndGh8fEQu
cHVzaCgifj0iKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoIjpjaGVja2VkIikubGVuZ3RofHxELnB1c2go
IjpjaGVja2VkIiksZS5xdWVyeVNlbGVjdG9yQWxsKCJhIyIrRisiKyoiKS5sZW5ndGh8fEQucHVz
aCgiLiMuK1srfl0iKX0pLGkoZnVuY3Rpb24oZSl7ZS5pbm5lckhUTUw9IjxhIGhyZWY9JycgZGlz
YWJsZWQ9J2Rpc2FibGVkJz48L2E+PHNlbGVjdCBkaXNhYmxlZD0nZGlzYWJsZWQnPjxvcHRpb24v
Pjwvc2VsZWN0PiIKK3ZhciB0PU4uY3JlYXRlRWxlbWVudCgiaW5wdXQiKQordC5zZXRBdHRyaWJ1
dGUoInR5cGUiLCJoaWRkZW4iKSxlLmFwcGVuZENoaWxkKHQpLnNldEF0dHJpYnV0ZSgibmFtZSIs
IkQiKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoIltuYW1lPWRdIikubGVuZ3RoJiZELnB1c2goIm5hbWUi
K2VlKyIqWypeJHwhfl0/PSIpLDIhPT1lLnF1ZXJ5U2VsZWN0b3JBbGwoIjplbmFibGVkIikubGVu
Z3RoJiZELnB1c2goIjplbmFibGVkIiwiOmRpc2FibGVkIiksUC5hcHBlbmRDaGlsZChlKS5kaXNh
YmxlZD0hMCwyIT09ZS5xdWVyeVNlbGVjdG9yQWxsKCI6ZGlzYWJsZWQiKS5sZW5ndGgmJkQucHVz
aCgiOmVuYWJsZWQiLCI6ZGlzYWJsZWQiKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoIiosOngiKSxELnB1
c2goIiwuKjoiKX0pKSwoXy5tYXRjaGVzU2VsZWN0b3I9ZGUudGVzdChJPVAubWF0Y2hlc3x8UC53
ZWJraXRNYXRjaGVzU2VsZWN0b3J8fFAubW96TWF0Y2hlc1NlbGVjdG9yfHxQLm9NYXRjaGVzU2Vs
ZWN0b3J8fFAubXNNYXRjaGVzU2VsZWN0b3IpKSYmaShmdW5jdGlvbihlKXtfLmRpc2Nvbm5lY3Rl
ZE1hdGNoPUkuY2FsbChlLCIqIiksSS5jYWxsKGUsIltzIT0nJ106eCIpLEwucHVzaCgiIT0iLHJl
KX0pLEQ9RC5sZW5ndGgmJm5ldyBSZWdFeHAoRC5qb2luKCJ8IikpLEw9TC5sZW5ndGgmJm5ldyBS
ZWdFeHAoTC5qb2luKCJ8IikpLHQ9ZGUudGVzdChQLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKSxN
PXR8fGRlLnRlc3QoUC5jb250YWlucyk/ZnVuY3Rpb24oZSx0KXt2YXIgbj05PT09ZS5ub2RlVHlw
ZT9lLmRvY3VtZW50RWxlbWVudDplLHI9dCYmdC5wYXJlbnROb2RlCityZXR1cm4gZT09PXJ8fCEo
IXJ8fDEhPT1yLm5vZGVUeXBlfHwhKG4uY29udGFpbnM/bi5jb250YWlucyhyKTplLmNvbXBhcmVE
b2N1bWVudFBvc2l0aW9uJiYxNiZlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHIpKSl9OmZ1bmN0
aW9uKGUsdCl7aWYodClmb3IoO3Q9dC5wYXJlbnROb2RlOylpZih0PT09ZSlyZXR1cm4hMAorcmV0
dXJuITF9LFc9dD9mdW5jdGlvbihlLHQpe2lmKGU9PT10KXJldHVybiBSPSEwLDAKK3ZhciBuPSFl
LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uLSF0LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uCityZXR1
cm4gbnx8KG49KGUub3duZXJEb2N1bWVudHx8ZSk9PT0odC5vd25lckRvY3VtZW50fHx0KT9lLmNv
bXBhcmVEb2N1bWVudFBvc2l0aW9uKHQpOjEsMSZufHwhXy5zb3J0RGV0YWNoZWQmJnQuY29tcGFy
ZURvY3VtZW50UG9zaXRpb24oZSk9PT1uP2U9PT1OfHxlLm93bmVyRG9jdW1lbnQ9PT16JiZNKHos
ZSk/LTE6dD09PU58fHQub3duZXJEb2N1bWVudD09PXomJk0oeix0KT8xOlM/WChTLGUpLVgoUyx0
KTowOjQmbj8tMToxKX06ZnVuY3Rpb24oZSx0KXtpZihlPT09dClyZXR1cm4gUj0hMCwwCit2YXIg
bixyPTAsaT1lLnBhcmVudE5vZGUsbz10LnBhcmVudE5vZGUsYT1bZV0sdT1bdF0KK2lmKCFpfHwh
bylyZXR1cm4gZT09PU4/LTE6dD09PU4/MTppPy0xOm8/MTpTP1goUyxlKS1YKFMsdCk6MAoraWYo
aT09PW8pcmV0dXJuIHMoZSx0KQorZm9yKG49ZTtuPW4ucGFyZW50Tm9kZTspYS51bnNoaWZ0KG4p
Citmb3Iobj10O249bi5wYXJlbnROb2RlOyl1LnVuc2hpZnQobikKK2Zvcig7YVtyXT09PXVbcl07
KXIrKworcmV0dXJuIHI/cyhhW3JdLHVbcl0pOmFbcl09PT16Py0xOnVbcl09PT16PzE6MH0sTik6
Tn0sdC5tYXRjaGVzPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHQoZSxudWxsLG51bGwsbil9LHQubWF0
Y2hlc1NlbGVjdG9yPWZ1bmN0aW9uKGUsbil7aWYoKGUub3duZXJEb2N1bWVudHx8ZSkhPT1OJiZr
KGUpLG49bi5yZXBsYWNlKHVlLCI9JyQxJ10iKSxfLm1hdGNoZXNTZWxlY3RvciYmaiYmIVZbbisi
ICJdJiYoIUx8fCFMLnRlc3QobikpJiYoIUR8fCFELnRlc3QobikpKXRyeXt2YXIgcj1JLmNhbGwo
ZSxuKQoraWYocnx8Xy5kaXNjb25uZWN0ZWRNYXRjaHx8ZS5kb2N1bWVudCYmMTEhPT1lLmRvY3Vt
ZW50Lm5vZGVUeXBlKXJldHVybiByfWNhdGNoKGUpe31yZXR1cm4gdChuLE4sbnVsbCxbZV0pLmxl
bmd0aD4wfSx0LmNvbnRhaW5zPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKGUub3duZXJEb2N1bWVudHx8
ZSkhPT1OJiZrKGUpLE0oZSx0KX0sdC5hdHRyPWZ1bmN0aW9uKGUsdCl7KGUub3duZXJEb2N1bWVu
dHx8ZSkhPT1OJiZrKGUpCit2YXIgbj13LmF0dHJIYW5kbGVbdC50b0xvd2VyQ2FzZSgpXSxyPW4m
JiQuY2FsbCh3LmF0dHJIYW5kbGUsdC50b0xvd2VyQ2FzZSgpKT9uKGUsdCwhaik6dm9pZCAwCity
ZXR1cm4gdm9pZCAwIT09cj9yOl8uYXR0cmlidXRlc3x8IWo/ZS5nZXRBdHRyaWJ1dGUodCk6KHI9
ZS5nZXRBdHRyaWJ1dGVOb2RlKHQpKSYmci5zcGVjaWZpZWQ/ci52YWx1ZTpudWxsfSx0LmVzY2Fw
ZT1mdW5jdGlvbihlKXtyZXR1cm4oZSsiIikucmVwbGFjZShiZSxfZSl9LHQuZXJyb3I9ZnVuY3Rp
b24oZSl7dGhyb3cgbmV3IEVycm9yKCJTeW50YXggZXJyb3IsIHVucmVjb2duaXplZCBleHByZXNz
aW9uOiAiK2UpfSx0LnVuaXF1ZVNvcnQ9ZnVuY3Rpb24oZSl7dmFyIHQsbj1bXSxyPTAsaT0wCitp
ZihSPSFfLmRldGVjdER1cGxpY2F0ZXMsUz0hXy5zb3J0U3RhYmxlJiZlLnNsaWNlKDApLGUuc29y
dChXKSxSKXtmb3IoO3Q9ZVtpKytdOyl0PT09ZVtpXSYmKHI9bi5wdXNoKGkpKQorZm9yKDtyLS07
KWUuc3BsaWNlKG5bcl0sMSl9cmV0dXJuIFM9bnVsbCxlfSxFPXQuZ2V0VGV4dD1mdW5jdGlvbihl
KXt2YXIgdCxuPSIiLHI9MCxpPWUubm9kZVR5cGUKK2lmKGkpe2lmKDE9PT1pfHw5PT09aXx8MTE9
PT1pKXtpZigic3RyaW5nIj09dHlwZW9mIGUudGV4dENvbnRlbnQpcmV0dXJuIGUudGV4dENvbnRl
bnQKK2ZvcihlPWUuZmlyc3RDaGlsZDtlO2U9ZS5uZXh0U2libGluZyluKz1FKGUpfWVsc2UgaWYo
Mz09PWl8fDQ9PT1pKXJldHVybiBlLm5vZGVWYWx1ZX1lbHNlIGZvcig7dD1lW3IrK107KW4rPUUo
dCkKK3JldHVybiBufSx3PXQuc2VsZWN0b3JzPXtjYWNoZUxlbmd0aDo1MCxjcmVhdGVQc2V1ZG86
cixtYXRjaDpwZSxhdHRySGFuZGxlOnt9LGZpbmQ6e30scmVsYXRpdmU6eyI+Ijp7ZGlyOiJwYXJl
bnROb2RlIixmaXJzdDohMH0sIiAiOntkaXI6InBhcmVudE5vZGUifSwiKyI6e2RpcjoicHJldmlv
dXNTaWJsaW5nIixmaXJzdDohMH0sIn4iOntkaXI6InByZXZpb3VzU2libGluZyJ9fSxwcmVGaWx0
ZXI6e0FUVFI6ZnVuY3Rpb24oZSl7cmV0dXJuIGVbMV09ZVsxXS5yZXBsYWNlKHllLHZlKSxlWzNd
PShlWzNdfHxlWzRdfHxlWzVdfHwiIikucmVwbGFjZSh5ZSx2ZSksIn49Ij09PWVbMl0mJihlWzNd
PSIgIitlWzNdKyIgIiksZS5zbGljZSgwLDQpfSxDSElMRDpmdW5jdGlvbihlKXtyZXR1cm4gZVsx
XT1lWzFdLnRvTG93ZXJDYXNlKCksIm50aCI9PT1lWzFdLnNsaWNlKDAsMyk/KGVbM118fHQuZXJy
b3IoZVswXSksZVs0XT0rKGVbNF0/ZVs1XSsoZVs2XXx8MSk6MiooImV2ZW4iPT09ZVszXXx8Im9k
ZCI9PT1lWzNdKSksZVs1XT0rKGVbN10rZVs4XXx8Im9kZCI9PT1lWzNdKSk6ZVszXSYmdC5lcnJv
cihlWzBdKSxlfSxQU0VVRE86ZnVuY3Rpb24oZSl7dmFyIHQsbj0hZVs2XSYmZVsyXQorcmV0dXJu
IHBlLkNISUxELnRlc3QoZVswXSk/bnVsbDooZVszXT9lWzJdPWVbNF18fGVbNV18fCIiOm4mJmxl
LnRlc3QobikmJih0PUMobiwhMCkpJiYodD1uLmluZGV4T2YoIikiLG4ubGVuZ3RoLXQpLW4ubGVu
Z3RoKSYmKGVbMF09ZVswXS5zbGljZSgwLHQpLGVbMl09bi5zbGljZSgwLHQpKSxlLnNsaWNlKDAs
MykpfX0sZmlsdGVyOntUQUc6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yZXBsYWNlKHllLHZlKS50b0xv
d2VyQ2FzZSgpCityZXR1cm4iKiI9PT1lP2Z1bmN0aW9uKCl7cmV0dXJuITB9OmZ1bmN0aW9uKGUp
e3JldHVybiBlLm5vZGVOYW1lJiZlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT10fX0sQ0xBU1M6
ZnVuY3Rpb24oZSl7dmFyIHQ9cVtlKyIgIl0KK3JldHVybiB0fHwodD1uZXcgUmVnRXhwKCIoXnwi
K2VlKyIpIitlKyIoIitlZSsifCQpIikpJiZxKGUsZnVuY3Rpb24oZSl7cmV0dXJuIHQudGVzdCgi
c3RyaW5nIj09dHlwZW9mIGUuY2xhc3NOYW1lJiZlLmNsYXNzTmFtZXx8dm9pZCAwIT09ZS5nZXRB
dHRyaWJ1dGUmJmUuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9KX0sQVRUUjpmdW5jdGlvbihl
LG4scil7cmV0dXJuIGZ1bmN0aW9uKGkpe3ZhciBvPXQuYXR0cihpLGUpCityZXR1cm4gbnVsbD09
bz8iIT0iPT09bjohbnx8KG8rPSIiLCI9Ij09PW4/bz09PXI6IiE9Ij09PW4/byE9PXI6Il49Ij09
PW4/ciYmMD09PW8uaW5kZXhPZihyKToiKj0iPT09bj9yJiZvLmluZGV4T2Yocik+LTE6IiQ9Ij09
PW4/ciYmby5zbGljZSgtci5sZW5ndGgpPT09cjoifj0iPT09bj8oIiAiK28ucmVwbGFjZShpZSwi
ICIpKyIgIikuaW5kZXhPZihyKT4tMToifD0iPT09biYmKG89PT1yfHxvLnNsaWNlKDAsci5sZW5n
dGgrMSk9PT1yKyItIikpfX0sQ0hJTEQ6ZnVuY3Rpb24oZSx0LG4scixpKXt2YXIgbz0ibnRoIiE9
PWUuc2xpY2UoMCwzKSxzPSJsYXN0IiE9PWUuc2xpY2UoLTQpLGE9Im9mLXR5cGUiPT09dAorcmV0
dXJuIDE9PT1yJiYwPT09aT9mdW5jdGlvbihlKXtyZXR1cm4hIWUucGFyZW50Tm9kZX06ZnVuY3Rp
b24odCxuLHUpe3ZhciBsLGMscCxmLGgsZCxtPW8hPT1zPyJuZXh0U2libGluZyI6InByZXZpb3Vz
U2libGluZyIsZz10LnBhcmVudE5vZGUseT1hJiZ0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksdj0h
dSYmIWEsYj0hMQoraWYoZyl7aWYobyl7Zm9yKDttOyl7Zm9yKGY9dDtmPWZbbV07KWlmKGE/Zi5u
b2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09eToxPT09Zi5ub2RlVHlwZSlyZXR1cm4hMQorZD1tPSJv
bmx5Ij09PWUmJiFkJiYibmV4dFNpYmxpbmcifXJldHVybiEwfWlmKGQ9W3M/Zy5maXJzdENoaWxk
OmcubGFzdENoaWxkXSxzJiZ2KXtmb3IoZj1nLHA9ZltGXXx8KGZbRl09e30pLGM9cFtmLnVuaXF1
ZUlEXXx8KHBbZi51bmlxdWVJRF09e30pLGw9Y1tlXXx8W10saD1sWzBdPT09VSYmbFsxXSxiPWgm
JmxbMl0sZj1oJiZnLmNoaWxkTm9kZXNbaF07Zj0rK2gmJmYmJmZbbV18fChiPWg9MCl8fGQucG9w
KCk7KWlmKDE9PT1mLm5vZGVUeXBlJiYrK2ImJmY9PT10KXtjW2VdPVtVLGgsYl0KK2JyZWFrfX1l
bHNlIGlmKHYmJihmPXQscD1mW0ZdfHwoZltGXT17fSksYz1wW2YudW5pcXVlSURdfHwocFtmLnVu
aXF1ZUlEXT17fSksbD1jW2VdfHxbXSxoPWxbMF09PT1VJiZsWzFdLGI9aCksITE9PT1iKWZvcig7
KGY9KytoJiZmJiZmW21dfHwoYj1oPTApfHxkLnBvcCgpKSYmKChhP2Yubm9kZU5hbWUudG9Mb3dl
ckNhc2UoKSE9PXk6MSE9PWYubm9kZVR5cGUpfHwhKytifHwodiYmKHA9ZltGXXx8KGZbRl09e30p
LGM9cFtmLnVuaXF1ZUlEXXx8KHBbZi51bmlxdWVJRF09e30pLGNbZV09W1UsYl0pLGYhPT10KSk7
KTtyZXR1cm4oYi09aSk9PT1yfHxiJXI9PTAmJmIvcj49MH19fSxQU0VVRE86ZnVuY3Rpb24oZSxu
KXt2YXIgaSxvPXcucHNldWRvc1tlXXx8dy5zZXRGaWx0ZXJzW2UudG9Mb3dlckNhc2UoKV18fHQu
ZXJyb3IoInVuc3VwcG9ydGVkIHBzZXVkbzogIitlKQorcmV0dXJuIG9bRl0/byhuKTpvLmxlbmd0
aD4xPyhpPVtlLGUsIiIsbl0sdy5zZXRGaWx0ZXJzLmhhc093blByb3BlcnR5KGUudG9Mb3dlckNh
c2UoKSk/cihmdW5jdGlvbihlLHQpe2Zvcih2YXIgcixpPW8oZSxuKSxzPWkubGVuZ3RoO3MtLTsp
cj1YKGUsaVtzXSksZVtyXT0hKHRbcl09aVtzXSl9KTpmdW5jdGlvbihlKXtyZXR1cm4gbyhlLDAs
aSl9KTpvfX0scHNldWRvczp7bm90OnIoZnVuY3Rpb24oZSl7dmFyIHQ9W10sbj1bXSxpPU8oZS5y
ZXBsYWNlKG9lLCIkMSIpKQorcmV0dXJuIGlbRl0/cihmdW5jdGlvbihlLHQsbixyKXtmb3IodmFy
IG8scz1pKGUsbnVsbCxyLFtdKSxhPWUubGVuZ3RoO2EtLTspKG89c1thXSkmJihlW2FdPSEodFth
XT1vKSl9KTpmdW5jdGlvbihlLHIsbyl7cmV0dXJuIHRbMF09ZSxpKHQsbnVsbCxvLG4pLHRbMF09
bnVsbCwhbi5wb3AoKX19KSxoYXM6cihmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0
dXJuIHQoZSxuKS5sZW5ndGg+MH19KSxjb250YWluczpyKGZ1bmN0aW9uKGUpe3JldHVybiBlPWUu
cmVwbGFjZSh5ZSx2ZSksZnVuY3Rpb24odCl7cmV0dXJuKHQudGV4dENvbnRlbnR8fHQuaW5uZXJU
ZXh0fHxFKHQpKS5pbmRleE9mKGUpPi0xfX0pLGxhbmc6cihmdW5jdGlvbihlKXtyZXR1cm4gY2Uu
dGVzdChlfHwiIil8fHQuZXJyb3IoInVuc3VwcG9ydGVkIGxhbmc6ICIrZSksZT1lLnJlcGxhY2Uo
eWUsdmUpLnRvTG93ZXJDYXNlKCksZnVuY3Rpb24odCl7dmFyIG4KK2Rve2lmKG49aj90Lmxhbmc6
dC5nZXRBdHRyaWJ1dGUoInhtbDpsYW5nIil8fHQuZ2V0QXR0cmlidXRlKCJsYW5nIikpcmV0dXJu
KG49bi50b0xvd2VyQ2FzZSgpKT09PWV8fDA9PT1uLmluZGV4T2YoZSsiLSIpfXdoaWxlKCh0PXQu
cGFyZW50Tm9kZSkmJjE9PT10Lm5vZGVUeXBlKQorcmV0dXJuITF9fSksdGFyZ2V0OmZ1bmN0aW9u
KHQpe3ZhciBuPWUubG9jYXRpb24mJmUubG9jYXRpb24uaGFzaAorcmV0dXJuIG4mJm4uc2xpY2Uo
MSk9PT10LmlkfSxyb290OmZ1bmN0aW9uKGUpe3JldHVybiBlPT09UH0sZm9jdXM6ZnVuY3Rpb24o
ZSl7cmV0dXJuIGU9PT1OLmFjdGl2ZUVsZW1lbnQmJighTi5oYXNGb2N1c3x8Ti5oYXNGb2N1cygp
KSYmISEoZS50eXBlfHxlLmhyZWZ8fH5lLnRhYkluZGV4KX0sZW5hYmxlZDphKCExKSxkaXNhYmxl
ZDphKCEwKSxjaGVja2VkOmZ1bmN0aW9uKGUpe3ZhciB0PWUubm9kZU5hbWUudG9Mb3dlckNhc2Uo
KQorcmV0dXJuImlucHV0Ij09PXQmJiEhZS5jaGVja2VkfHwib3B0aW9uIj09PXQmJiEhZS5zZWxl
Y3RlZH0sc2VsZWN0ZWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucGFyZW50Tm9kZSYmZS5wYXJlbnRO
b2RlLnNlbGVjdGVkSW5kZXgsITA9PT1lLnNlbGVjdGVkfSxlbXB0eTpmdW5jdGlvbihlKXtmb3Io
ZT1lLmZpcnN0Q2hpbGQ7ZTtlPWUubmV4dFNpYmxpbmcpaWYoZS5ub2RlVHlwZTw2KXJldHVybiEx
CityZXR1cm4hMH0scGFyZW50OmZ1bmN0aW9uKGUpe3JldHVybiF3LnBzZXVkb3MuZW1wdHkoZSl9
LGhlYWRlcjpmdW5jdGlvbihlKXtyZXR1cm4gaGUudGVzdChlLm5vZGVOYW1lKX0saW5wdXQ6ZnVu
Y3Rpb24oZSl7cmV0dXJuIGZlLnRlc3QoZS5ub2RlTmFtZSl9LGJ1dHRvbjpmdW5jdGlvbihlKXt2
YXIgdD1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkKK3JldHVybiJpbnB1dCI9PT10JiYiYnV0dG9u
Ij09PWUudHlwZXx8ImJ1dHRvbiI9PT10fSx0ZXh0OmZ1bmN0aW9uKGUpe3ZhciB0CityZXR1cm4i
aW5wdXQiPT09ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpJiYidGV4dCI9PT1lLnR5cGUmJihudWxs
PT0odD1lLmdldEF0dHJpYnV0ZSgidHlwZSIpKXx8InRleHQiPT09dC50b0xvd2VyQ2FzZSgpKX0s
Zmlyc3Q6dShmdW5jdGlvbigpe3JldHVyblswXX0pLGxhc3Q6dShmdW5jdGlvbihlLHQpe3JldHVy
blt0LTFdfSksZXE6dShmdW5jdGlvbihlLHQsbil7cmV0dXJuW248MD9uK3Q6bl19KSxldmVuOnUo
ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MDtuPHQ7bis9MillLnB1c2gobikKK3JldHVybiBlfSks
b2RkOnUoZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MTtuPHQ7bis9MillLnB1c2gobikKK3JldHVy
biBlfSksbHQ6dShmdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPW48MD9uK3Q6bjstLXI+PTA7KWUu
cHVzaChyKQorcmV0dXJuIGV9KSxndDp1KGZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9bjwwP24r
dDpuOysrcjx0OyllLnB1c2gocikKK3JldHVybiBlfSl9fSx3LnBzZXVkb3MubnRoPXcucHNldWRv
cy5lcQorZm9yKGIgaW57cmFkaW86ITAsY2hlY2tib3g6ITAsZmlsZTohMCxwYXNzd29yZDohMCxp
bWFnZTohMH0pdy5wc2V1ZG9zW2JdPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1
cm4iaW5wdXQiPT09dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpJiZ0LnR5cGU9PT1lfX0oYikKK2Zv
cihiIGlue3N1Ym1pdDohMCxyZXNldDohMH0pdy5wc2V1ZG9zW2JdPWZ1bmN0aW9uKGUpe3JldHVy
biBmdW5jdGlvbih0KXt2YXIgbj10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkKK3JldHVybigiaW5w
dXQiPT09bnx8ImJ1dHRvbiI9PT1uKSYmdC50eXBlPT09ZX19KGIpCityZXR1cm4gYy5wcm90b3R5
cGU9dy5maWx0ZXJzPXcucHNldWRvcyx3LnNldEZpbHRlcnM9bmV3IGMsQz10LnRva2VuaXplPWZ1
bmN0aW9uKGUsbil7dmFyIHIsaSxvLHMsYSx1LGwsYz1IW2UrIiAiXQoraWYoYylyZXR1cm4gbj8w
OmMuc2xpY2UoMCkKK2ZvcihhPWUsdT1bXSxsPXcucHJlRmlsdGVyO2E7KXtyJiYhKGk9c2UuZXhl
YyhhKSl8fChpJiYoYT1hLnNsaWNlKGlbMF0ubGVuZ3RoKXx8YSksdS5wdXNoKG89W10pKSxyPSEx
LChpPWFlLmV4ZWMoYSkpJiYocj1pLnNoaWZ0KCksby5wdXNoKHt2YWx1ZTpyLHR5cGU6aVswXS5y
ZXBsYWNlKG9lLCIgIil9KSxhPWEuc2xpY2Uoci5sZW5ndGgpKQorZm9yKHMgaW4gdy5maWx0ZXIp
IShpPXBlW3NdLmV4ZWMoYSkpfHxsW3NdJiYhKGk9bFtzXShpKSl8fChyPWkuc2hpZnQoKSxvLnB1
c2goe3ZhbHVlOnIsdHlwZTpzLG1hdGNoZXM6aX0pLGE9YS5zbGljZShyLmxlbmd0aCkpCitpZigh
cilicmVha31yZXR1cm4gbj9hLmxlbmd0aDphP3QuZXJyb3IoZSk6SChlLHUpLnNsaWNlKDApfSxP
PXQuY29tcGlsZT1mdW5jdGlvbihlLHQpe3ZhciBuLHI9W10saT1bXSxvPVZbZSsiICJdCitpZigh
byl7Zm9yKHR8fCh0PUMoZSkpLG49dC5sZW5ndGg7bi0tOylvPXkodFtuXSksb1tGXT9yLnB1c2go
byk6aS5wdXNoKG8pCitvPVYoZSx2KGkscikpLG8uc2VsZWN0b3I9ZX1yZXR1cm4gb30sQT10LnNl
bGVjdD1mdW5jdGlvbihlLHQsbixyKXt2YXIgaSxvLHMsYSx1LGM9ImZ1bmN0aW9uIj09dHlwZW9m
IGUmJmUsZj0hciYmQyhlPWMuc2VsZWN0b3J8fGUpCitpZihuPW58fFtdLDE9PT1mLmxlbmd0aCl7
aWYobz1mWzBdPWZbMF0uc2xpY2UoMCksby5sZW5ndGg+MiYmIklEIj09PShzPW9bMF0pLnR5cGUm
Jjk9PT10Lm5vZGVUeXBlJiZqJiZ3LnJlbGF0aXZlW29bMV0udHlwZV0pe2lmKCEodD0ody5maW5k
LklEKHMubWF0Y2hlc1swXS5yZXBsYWNlKHllLHZlKSx0KXx8W10pWzBdKSlyZXR1cm4gbgorYyYm
KHQ9dC5wYXJlbnROb2RlKSxlPWUuc2xpY2Uoby5zaGlmdCgpLnZhbHVlLmxlbmd0aCl9Zm9yKGk9
cGUubmVlZHNDb250ZXh0LnRlc3QoZSk/MDpvLmxlbmd0aDtpLS0mJihzPW9baV0sIXcucmVsYXRp
dmVbYT1zLnR5cGVdKTspaWYoKHU9dy5maW5kW2FdKSYmKHI9dShzLm1hdGNoZXNbMF0ucmVwbGFj
ZSh5ZSx2ZSksZ2UudGVzdChvWzBdLnR5cGUpJiZsKHQucGFyZW50Tm9kZSl8fHQpKSl7aWYoby5z
cGxpY2UoaSwxKSwhKGU9ci5sZW5ndGgmJnAobykpKXJldHVybiBZLmFwcGx5KG4sciksbgorYnJl
YWt9fXJldHVybihjfHxPKGUsZikpKHIsdCwhaixuLCF0fHxnZS50ZXN0KGUpJiZsKHQucGFyZW50
Tm9kZSl8fHQpLG59LF8uc29ydFN0YWJsZT1GLnNwbGl0KCIiKS5zb3J0KFcpLmpvaW4oIiIpPT09
RixfLmRldGVjdER1cGxpY2F0ZXM9ISFSLGsoKSxfLnNvcnREZXRhY2hlZD1pKGZ1bmN0aW9uKGUp
e3JldHVybiAxJmUuY29tcGFyZURvY3VtZW50UG9zaXRpb24oTi5jcmVhdGVFbGVtZW50KCJmaWVs
ZHNldCIpKX0pLGkoZnVuY3Rpb24oZSl7cmV0dXJuIGUuaW5uZXJIVE1MPSI8YSBocmVmPScjJz48
L2E+IiwiIyI9PT1lLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJocmVmIil9KXx8bygidHlwZXxo
cmVmfGhlaWdodHx3aWR0aCIsZnVuY3Rpb24oZSx0LG4pe2lmKCFuKXJldHVybiBlLmdldEF0dHJp
YnV0ZSh0LCJ0eXBlIj09PXQudG9Mb3dlckNhc2UoKT8xOjIpfSksXy5hdHRyaWJ1dGVzJiZpKGZ1
bmN0aW9uKGUpe3JldHVybiBlLmlubmVySFRNTD0iPGlucHV0Lz4iLGUuZmlyc3RDaGlsZC5zZXRB
dHRyaWJ1dGUoInZhbHVlIiwiIiksIiI9PT1lLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJ2YWx1
ZSIpfSl8fG8oInZhbHVlIixmdW5jdGlvbihlLHQsbil7aWYoIW4mJiJpbnB1dCI9PT1lLm5vZGVO
YW1lLnRvTG93ZXJDYXNlKCkpcmV0dXJuIGUuZGVmYXVsdFZhbHVlfSksaShmdW5jdGlvbihlKXty
ZXR1cm4gbnVsbD09ZS5nZXRBdHRyaWJ1dGUoImRpc2FibGVkIil9KXx8byhaLGZ1bmN0aW9uKGUs
dCxuKXt2YXIgcgoraWYoIW4pcmV0dXJuITA9PT1lW3RdP3QudG9Mb3dlckNhc2UoKToocj1lLmdl
dEF0dHJpYnV0ZU5vZGUodCkpJiZyLnNwZWNpZmllZD9yLnZhbHVlOm51bGx9KSx0fShlKQorZGUu
ZmluZD1iZSxkZS5leHByPWJlLnNlbGVjdG9ycyxkZS5leHByWyI6Il09ZGUuZXhwci5wc2V1ZG9z
LGRlLnVuaXF1ZVNvcnQ9ZGUudW5pcXVlPWJlLnVuaXF1ZVNvcnQsZGUudGV4dD1iZS5nZXRUZXh0
LGRlLmlzWE1MRG9jPWJlLmlzWE1MLGRlLmNvbnRhaW5zPWJlLmNvbnRhaW5zLGRlLmVzY2FwZVNl
bGVjdG9yPWJlLmVzY2FwZQordmFyIF9lPWZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9W10saT12
b2lkIDAhPT1uOyhlPWVbdF0pJiY5IT09ZS5ub2RlVHlwZTspaWYoMT09PWUubm9kZVR5cGUpe2lm
KGkmJmRlKGUpLmlzKG4pKWJyZWFrCityLnB1c2goZSl9cmV0dXJuIHJ9LHdlPWZ1bmN0aW9uKGUs
dCl7Zm9yKHZhciBuPVtdO2U7ZT1lLm5leHRTaWJsaW5nKTE9PT1lLm5vZGVUeXBlJiZlIT09dCYm
bi5wdXNoKGUpCityZXR1cm4gbn0sRWU9ZGUuZXhwci5tYXRjaC5uZWVkc0NvbnRleHQseGU9L148
KFthLXpdW15cL1wwPjpceDIwXHRcclxuXGZdKilbXHgyMFx0XHJcblxmXSpcLz8+KD86PFwvXDE+
fCkkL2ksQ2U9L14uW146I1xbXC4sXSokLworZGUuZmlsdGVyPWZ1bmN0aW9uKGUsdCxuKXt2YXIg
cj10WzBdCityZXR1cm4gbiYmKGU9Ijpub3QoIitlKyIpIiksMT09PXQubGVuZ3RoJiYxPT09ci5u
b2RlVHlwZT9kZS5maW5kLm1hdGNoZXNTZWxlY3RvcihyLGUpP1tyXTpbXTpkZS5maW5kLm1hdGNo
ZXMoZSxkZS5ncmVwKHQsZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lLm5vZGVUeXBlfSkpfSxkZS5m
bi5leHRlbmQoe2ZpbmQ6ZnVuY3Rpb24oZSl7dmFyIHQsbixyPXRoaXMubGVuZ3RoLGk9dGhpcwor
aWYoInN0cmluZyIhPXR5cGVvZiBlKXJldHVybiB0aGlzLnB1c2hTdGFjayhkZShlKS5maWx0ZXIo
ZnVuY3Rpb24oKXtmb3IodD0wO3Q8cjt0KyspaWYoZGUuY29udGFpbnMoaVt0XSx0aGlzKSlyZXR1
cm4hMH0pKQorZm9yKG49dGhpcy5wdXNoU3RhY2soW10pLHQ9MDt0PHI7dCsrKWRlLmZpbmQoZSxp
W3RdLG4pCityZXR1cm4gcj4xP2RlLnVuaXF1ZVNvcnQobik6bn0sZmlsdGVyOmZ1bmN0aW9uKGUp
e3JldHVybiB0aGlzLnB1c2hTdGFjayhvKHRoaXMsZXx8W10sITEpKX0sbm90OmZ1bmN0aW9uKGUp
e3JldHVybiB0aGlzLnB1c2hTdGFjayhvKHRoaXMsZXx8W10sITApKX0saXM6ZnVuY3Rpb24oZSl7
cmV0dXJuISFvKHRoaXMsInN0cmluZyI9PXR5cGVvZiBlJiZFZS50ZXN0KGUpP2RlKGUpOmV8fFtd
LCExKS5sZW5ndGh9fSkKK3ZhciBPZSxBZT0vXig/OlxzKig8W1x3XFddKz4pW14+XSp8IyhbXHct
XSspKSQvOyhkZS5mbi5pbml0PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpCitpZighZSlyZXR1cm4g
dGhpcworaWYobj1ufHxPZSwic3RyaW5nIj09dHlwZW9mIGUpe2lmKCEocj0iPCI9PT1lWzBdJiYi
PiI9PT1lW2UubGVuZ3RoLTFdJiZlLmxlbmd0aD49Mz9bbnVsbCxlLG51bGxdOkFlLmV4ZWMoZSkp
fHwhclsxXSYmdClyZXR1cm4hdHx8dC5qcXVlcnk/KHR8fG4pLmZpbmQoZSk6dGhpcy5jb25zdHJ1
Y3Rvcih0KS5maW5kKGUpCitpZihyWzFdKXtpZih0PXQgaW5zdGFuY2VvZiBkZT90WzBdOnQsZGUu
bWVyZ2UodGhpcyxkZS5wYXJzZUhUTUwoclsxXSx0JiZ0Lm5vZGVUeXBlP3Qub3duZXJEb2N1bWVu
dHx8dDpuZSwhMCkpLHhlLnRlc3QoclsxXSkmJmRlLmlzUGxhaW5PYmplY3QodCkpZm9yKHIgaW4g
dClkZS5pc0Z1bmN0aW9uKHRoaXNbcl0pP3RoaXNbcl0odFtyXSk6dGhpcy5hdHRyKHIsdFtyXSkK
K3JldHVybiB0aGlzfXJldHVybiBpPW5lLmdldEVsZW1lbnRCeUlkKHJbMl0pLGkmJih0aGlzWzBd
PWksdGhpcy5sZW5ndGg9MSksdGhpc31yZXR1cm4gZS5ub2RlVHlwZT8odGhpc1swXT1lLHRoaXMu
bGVuZ3RoPTEsdGhpcyk6ZGUuaXNGdW5jdGlvbihlKT92b2lkIDAhPT1uLnJlYWR5P24ucmVhZHko
ZSk6ZShkZSk6ZGUubWFrZUFycmF5KGUsdGhpcyl9KS5wcm90b3R5cGU9ZGUuZm4sT2U9ZGUobmUp
Cit2YXIgVGU9L14oPzpwYXJlbnRzfHByZXYoPzpVbnRpbHxBbGwpKS8sU2U9e2NoaWxkcmVuOiEw
LGNvbnRlbnRzOiEwLG5leHQ6ITAscHJldjohMH0KK2RlLmZuLmV4dGVuZCh7aGFzOmZ1bmN0aW9u
KGUpe3ZhciB0PWRlKGUsdGhpcyksbj10Lmxlbmd0aAorcmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0
aW9uKCl7Zm9yKHZhciBlPTA7ZTxuO2UrKylpZihkZS5jb250YWlucyh0aGlzLHRbZV0pKXJldHVy
biEwfSl9LGNsb3Nlc3Q6ZnVuY3Rpb24oZSx0KXt2YXIgbixyPTAsaT10aGlzLmxlbmd0aCxvPVtd
LHM9InN0cmluZyIhPXR5cGVvZiBlJiZkZShlKQoraWYoIUVlLnRlc3QoZSkpZm9yKDtyPGk7cisr
KWZvcihuPXRoaXNbcl07biYmbiE9PXQ7bj1uLnBhcmVudE5vZGUpaWYobi5ub2RlVHlwZTwxMSYm
KHM/cy5pbmRleChuKT4tMToxPT09bi5ub2RlVHlwZSYmZGUuZmluZC5tYXRjaGVzU2VsZWN0b3Io
bixlKSkpe28ucHVzaChuKQorYnJlYWt9cmV0dXJuIHRoaXMucHVzaFN0YWNrKG8ubGVuZ3RoPjE/
ZGUudW5pcXVlU29ydChvKTpvKX0saW5kZXg6ZnVuY3Rpb24oZSl7cmV0dXJuIGU/InN0cmluZyI9
PXR5cGVvZiBlP2FlLmNhbGwoZGUoZSksdGhpc1swXSk6YWUuY2FsbCh0aGlzLGUuanF1ZXJ5P2Vb
MF06ZSk6dGhpc1swXSYmdGhpc1swXS5wYXJlbnROb2RlP3RoaXMuZmlyc3QoKS5wcmV2QWxsKCku
bGVuZ3RoOi0xfSxhZGQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soZGUudW5p
cXVlU29ydChkZS5tZXJnZSh0aGlzLmdldCgpLGRlKGUsdCkpKSl9LGFkZEJhY2s6ZnVuY3Rpb24o
ZSl7cmV0dXJuIHRoaXMuYWRkKG51bGw9PWU/dGhpcy5wcmV2T2JqZWN0OnRoaXMucHJldk9iamVj
dC5maWx0ZXIoZSkpfX0pLGRlLmVhY2goe3BhcmVudDpmdW5jdGlvbihlKXt2YXIgdD1lLnBhcmVu
dE5vZGUKK3JldHVybiB0JiYxMSE9PXQubm9kZVR5cGU/dDpudWxsfSxwYXJlbnRzOmZ1bmN0aW9u
KGUpe3JldHVybiBfZShlLCJwYXJlbnROb2RlIil9LHBhcmVudHNVbnRpbDpmdW5jdGlvbihlLHQs
bil7cmV0dXJuIF9lKGUsInBhcmVudE5vZGUiLG4pfSxuZXh0OmZ1bmN0aW9uKGUpe3JldHVybiBz
KGUsIm5leHRTaWJsaW5nIil9LHByZXY6ZnVuY3Rpb24oZSl7cmV0dXJuIHMoZSwicHJldmlvdXNT
aWJsaW5nIil9LG5leHRBbGw6ZnVuY3Rpb24oZSl7cmV0dXJuIF9lKGUsIm5leHRTaWJsaW5nIil9
LHByZXZBbGw6ZnVuY3Rpb24oZSl7cmV0dXJuIF9lKGUsInByZXZpb3VzU2libGluZyIpfSxuZXh0
VW50aWw6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBfZShlLCJuZXh0U2libGluZyIsbil9LHByZXZV
bnRpbDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIF9lKGUsInByZXZpb3VzU2libGluZyIsbil9LHNp
YmxpbmdzOmZ1bmN0aW9uKGUpe3JldHVybiB3ZSgoZS5wYXJlbnROb2RlfHx7fSkuZmlyc3RDaGls
ZCxlKX0sY2hpbGRyZW46ZnVuY3Rpb24oZSl7cmV0dXJuIHdlKGUuZmlyc3RDaGlsZCl9LGNvbnRl
bnRzOmZ1bmN0aW9uKGUpe3JldHVybiBpKGUsImlmcmFtZSIpP2UuY29udGVudERvY3VtZW50Oihp
KGUsInRlbXBsYXRlIikmJihlPWUuY29udGVudHx8ZSksZGUubWVyZ2UoW10sZS5jaGlsZE5vZGVz
KSl9fSxmdW5jdGlvbihlLHQpe2RlLmZuW2VdPWZ1bmN0aW9uKG4scil7dmFyIGk9ZGUubWFwKHRo
aXMsdCxuKQorcmV0dXJuIlVudGlsIiE9PWUuc2xpY2UoLTUpJiYocj1uKSxyJiYic3RyaW5nIj09
dHlwZW9mIHImJihpPWRlLmZpbHRlcihyLGkpKSx0aGlzLmxlbmd0aD4xJiYoU2VbZV18fGRlLnVu
aXF1ZVNvcnQoaSksVGUudGVzdChlKSYmaS5yZXZlcnNlKCkpLHRoaXMucHVzaFN0YWNrKGkpfX0p
Cit2YXIgUmU9L1teXHgyMFx0XHJcblxmXSsvZworZGUuQ2FsbGJhY2tzPWZ1bmN0aW9uKGUpe2U9
InN0cmluZyI9PXR5cGVvZiBlP2EoZSk6ZGUuZXh0ZW5kKHt9LGUpCit2YXIgdCxuLHIsaSxvPVtd
LHM9W10sdT0tMSxsPWZ1bmN0aW9uKCl7Zm9yKGk9aXx8ZS5vbmNlLHI9dD0hMDtzLmxlbmd0aDt1
PS0xKWZvcihuPXMuc2hpZnQoKTsrK3U8by5sZW5ndGg7KSExPT09b1t1XS5hcHBseShuWzBdLG5b
MV0pJiZlLnN0b3BPbkZhbHNlJiYodT1vLmxlbmd0aCxuPSExKQorZS5tZW1vcnl8fChuPSExKSx0
PSExLGkmJihvPW4/W106IiIpfSxjPXthZGQ6ZnVuY3Rpb24oKXtyZXR1cm4gbyYmKG4mJiF0JiYo
dT1vLmxlbmd0aC0xLHMucHVzaChuKSksZnVuY3Rpb24gdChuKXtkZS5lYWNoKG4sZnVuY3Rpb24o
bixyKXtkZS5pc0Z1bmN0aW9uKHIpP2UudW5pcXVlJiZjLmhhcyhyKXx8by5wdXNoKHIpOnImJnIu
bGVuZ3RoJiYic3RyaW5nIiE9PWRlLnR5cGUocikmJnQocil9KX0oYXJndW1lbnRzKSxuJiYhdCYm
bCgpKSx0aGlzfSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gZGUuZWFjaChhcmd1bWVudHMsZnVu
Y3Rpb24oZSx0KXtmb3IodmFyIG47KG49ZGUuaW5BcnJheSh0LG8sbikpPi0xOylvLnNwbGljZShu
LDEpLG48PXUmJnUtLX0pLHRoaXN9LGhhczpmdW5jdGlvbihlKXtyZXR1cm4gZT9kZS5pbkFycmF5
KGUsbyk+LTE6by5sZW5ndGg+MH0sZW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4gbyYmKG89W10pLHRo
aXN9LGRpc2FibGU6ZnVuY3Rpb24oKXtyZXR1cm4gaT1zPVtdLG89bj0iIix0aGlzfSxkaXNhYmxl
ZDpmdW5jdGlvbigpe3JldHVybiFvfSxsb2NrOmZ1bmN0aW9uKCl7cmV0dXJuIGk9cz1bXSxufHx0
fHwobz1uPSIiKSx0aGlzfSxsb2NrZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hIWl9LGZpcmVXaXRoOmZ1
bmN0aW9uKGUsbil7cmV0dXJuIGl8fChuPW58fFtdLG49W2Usbi5zbGljZT9uLnNsaWNlKCk6bl0s
cy5wdXNoKG4pLHR8fGwoKSksdGhpc30sZmlyZTpmdW5jdGlvbigpe3JldHVybiBjLmZpcmVXaXRo
KHRoaXMsYXJndW1lbnRzKSx0aGlzfSxmaXJlZDpmdW5jdGlvbigpe3JldHVybiEhcn19CityZXR1
cm4gY30sZGUuZXh0ZW5kKHtEZWZlcnJlZDpmdW5jdGlvbih0KXt2YXIgbj1bWyJub3RpZnkiLCJw
cm9ncmVzcyIsZGUuQ2FsbGJhY2tzKCJtZW1vcnkiKSxkZS5DYWxsYmFja3MoIm1lbW9yeSIpLDJd
LFsicmVzb2x2ZSIsImRvbmUiLGRlLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSxkZS5DYWxsYmFj
a3MoIm9uY2UgbWVtb3J5IiksMCwicmVzb2x2ZWQiXSxbInJlamVjdCIsImZhaWwiLGRlLkNhbGxi
YWNrcygib25jZSBtZW1vcnkiKSxkZS5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksMSwicmVqZWN0
ZWQiXV0scj0icGVuZGluZyIsaT17c3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gcn0sYWx3YXlzOmZ1
bmN0aW9uKCl7cmV0dXJuIG8uZG9uZShhcmd1bWVudHMpLmZhaWwoYXJndW1lbnRzKSx0aGlzfSxj
YXRjaDpmdW5jdGlvbihlKXtyZXR1cm4gaS50aGVuKG51bGwsZSl9LHBpcGU6ZnVuY3Rpb24oKXt2
YXIgZT1hcmd1bWVudHMKK3JldHVybiBkZS5EZWZlcnJlZChmdW5jdGlvbih0KXtkZS5lYWNoKG4s
ZnVuY3Rpb24obixyKXt2YXIgaT1kZS5pc0Z1bmN0aW9uKGVbcls0XV0pJiZlW3JbNF1dCitvW3Jb
MV1dKGZ1bmN0aW9uKCl7dmFyIGU9aSYmaS5hcHBseSh0aGlzLGFyZ3VtZW50cykKK2UmJmRlLmlz
RnVuY3Rpb24oZS5wcm9taXNlKT9lLnByb21pc2UoKS5wcm9ncmVzcyh0Lm5vdGlmeSkuZG9uZSh0
LnJlc29sdmUpLmZhaWwodC5yZWplY3QpOnRbclswXSsiV2l0aCJdKHRoaXMsaT9bZV06YXJndW1l
bnRzKX0pfSksZT1udWxsfSkucHJvbWlzZSgpfSx0aGVuOmZ1bmN0aW9uKHQscixpKXtmdW5jdGlv
biBvKHQsbixyLGkpe3JldHVybiBmdW5jdGlvbigpe3ZhciBhPXRoaXMsYz1hcmd1bWVudHMscD1m
dW5jdGlvbigpe3ZhciBlLHAKK2lmKCEodDxzKSl7aWYoKGU9ci5hcHBseShhLGMpKT09PW4ucHJv
bWlzZSgpKXRocm93IG5ldyBUeXBlRXJyb3IoIlRoZW5hYmxlIHNlbGYtcmVzb2x1dGlvbiIpCitw
PWUmJigib2JqZWN0Ij09dHlwZW9mIGV8fCJmdW5jdGlvbiI9PXR5cGVvZiBlKSYmZS50aGVuLGRl
LmlzRnVuY3Rpb24ocCk/aT9wLmNhbGwoZSxvKHMsbix1LGkpLG8ocyxuLGwsaSkpOihzKysscC5j
YWxsKGUsbyhzLG4sdSxpKSxvKHMsbixsLGkpLG8ocyxuLHUsbi5ub3RpZnlXaXRoKSkpOihyIT09
dSYmKGE9dm9pZCAwLGM9W2VdKSwoaXx8bi5yZXNvbHZlV2l0aCkoYSxjKSl9fSxmPWk/cDpmdW5j
dGlvbigpe3RyeXtwKCl9Y2F0Y2goZSl7ZGUuRGVmZXJyZWQuZXhjZXB0aW9uSG9vayYmZGUuRGVm
ZXJyZWQuZXhjZXB0aW9uSG9vayhlLGYuc3RhY2tUcmFjZSksdCsxPj1zJiYociE9PWwmJihhPXZv
aWQgMCxjPVtlXSksbi5yZWplY3RXaXRoKGEsYykpfX0KK3Q/ZigpOihkZS5EZWZlcnJlZC5nZXRT
dGFja0hvb2smJihmLnN0YWNrVHJhY2U9ZGUuRGVmZXJyZWQuZ2V0U3RhY2tIb29rKCkpLGUuc2V0
VGltZW91dChmKSl9fXZhciBzPTAKK3JldHVybiBkZS5EZWZlcnJlZChmdW5jdGlvbihlKXtuWzBd
WzNdLmFkZChvKDAsZSxkZS5pc0Z1bmN0aW9uKGkpP2k6dSxlLm5vdGlmeVdpdGgpKSxuWzFdWzNd
LmFkZChvKDAsZSxkZS5pc0Z1bmN0aW9uKHQpP3Q6dSkpLG5bMl1bM10uYWRkKG8oMCxlLGRlLmlz
RnVuY3Rpb24ocik/cjpsKSl9KS5wcm9taXNlKCl9LHByb21pc2U6ZnVuY3Rpb24oZSl7cmV0dXJu
IG51bGwhPWU/ZGUuZXh0ZW5kKGUsaSk6aX19LG89e30KK3JldHVybiBkZS5lYWNoKG4sZnVuY3Rp
b24oZSx0KXt2YXIgcz10WzJdLGE9dFs1XQoraVt0WzFdXT1zLmFkZCxhJiZzLmFkZChmdW5jdGlv
bigpe3I9YX0sblszLWVdWzJdLmRpc2FibGUsblswXVsyXS5sb2NrKSxzLmFkZCh0WzNdLmZpcmUp
LG9bdFswXV09ZnVuY3Rpb24oKXtyZXR1cm4gb1t0WzBdKyJXaXRoIl0odGhpcz09PW8/dm9pZCAw
OnRoaXMsYXJndW1lbnRzKSx0aGlzfSxvW3RbMF0rIldpdGgiXT1zLmZpcmVXaXRofSksaS5wcm9t
aXNlKG8pLHQmJnQuY2FsbChvLG8pLG99LHdoZW46ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRz
Lmxlbmd0aCxuPXQscj1BcnJheShuKSxpPWllLmNhbGwoYXJndW1lbnRzKSxvPWRlLkRlZmVycmVk
KCkscz1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24obil7cltlXT10aGlzLGlbZV09YXJndW1l
bnRzLmxlbmd0aD4xP2llLmNhbGwoYXJndW1lbnRzKTpuLC0tdHx8by5yZXNvbHZlV2l0aChyLGkp
fX0KK2lmKHQ8PTEmJihjKGUsby5kb25lKHMobikpLnJlc29sdmUsby5yZWplY3QsIXQpLCJwZW5k
aW5nIj09PW8uc3RhdGUoKXx8ZGUuaXNGdW5jdGlvbihpW25dJiZpW25dLnRoZW4pKSlyZXR1cm4g
by50aGVuKCkKK2Zvcig7bi0tOyljKGlbbl0scyhuKSxvLnJlamVjdCkKK3JldHVybiBvLnByb21p
c2UoKX19KQordmFyIGtlPS9eKEV2YWx8SW50ZXJuYWx8UmFuZ2V8UmVmZXJlbmNlfFN5bnRheHxU
eXBlfFVSSSlFcnJvciQvCitkZS5EZWZlcnJlZC5leGNlcHRpb25Ib29rPWZ1bmN0aW9uKHQsbil7
ZS5jb25zb2xlJiZlLmNvbnNvbGUud2FybiYmdCYma2UudGVzdCh0Lm5hbWUpJiZlLmNvbnNvbGUu
d2FybigialF1ZXJ5LkRlZmVycmVkIGV4Y2VwdGlvbjogIit0Lm1lc3NhZ2UsdC5zdGFjayxuKX0s
ZGUucmVhZHlFeGNlcHRpb249ZnVuY3Rpb24odCl7ZS5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhy
b3cgdH0pfQordmFyIE5lPWRlLkRlZmVycmVkKCkKK2RlLmZuLnJlYWR5PWZ1bmN0aW9uKGUpe3Jl
dHVybiBOZS50aGVuKGUpLmNhdGNoKGZ1bmN0aW9uKGUpe2RlLnJlYWR5RXhjZXB0aW9uKGUpfSks
dGhpc30sZGUuZXh0ZW5kKHtpc1JlYWR5OiExLHJlYWR5V2FpdDoxLHJlYWR5OmZ1bmN0aW9uKGUp
eyghMD09PWU/LS1kZS5yZWFkeVdhaXQ6ZGUuaXNSZWFkeSl8fChkZS5pc1JlYWR5PSEwLCEwIT09
ZSYmLS1kZS5yZWFkeVdhaXQ+MHx8TmUucmVzb2x2ZVdpdGgobmUsW2RlXSkpfX0pLGRlLnJlYWR5
LnRoZW49TmUudGhlbiwiY29tcGxldGUiPT09bmUucmVhZHlTdGF0ZXx8ImxvYWRpbmciIT09bmUu
cmVhZHlTdGF0ZSYmIW5lLmRvY3VtZW50RWxlbWVudC5kb1Njcm9sbD9lLnNldFRpbWVvdXQoZGUu
cmVhZHkpOihuZS5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixwKSxlLmFkZEV2
ZW50TGlzdGVuZXIoImxvYWQiLHApKQordmFyIFBlPWZ1bmN0aW9uKGUsdCxuLHIsaSxvLHMpe3Zh
ciBhPTAsdT1lLmxlbmd0aCxsPW51bGw9PW4KK2lmKCJvYmplY3QiPT09ZGUudHlwZShuKSl7aT0h
MAorZm9yKGEgaW4gbilQZShlLHQsYSxuW2FdLCEwLG8scyl9ZWxzZSBpZih2b2lkIDAhPT1yJiYo
aT0hMCxkZS5pc0Z1bmN0aW9uKHIpfHwocz0hMCksbCYmKHM/KHQuY2FsbChlLHIpLHQ9bnVsbCk6
KGw9dCx0PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbC5jYWxsKGRlKGUpLG4pfSkpLHQpKWZvcig7
YTx1O2ErKyl0KGVbYV0sbixzP3I6ci5jYWxsKGVbYV0sYSx0KGVbYV0sbikpKQorcmV0dXJuIGk/
ZTpsP3QuY2FsbChlKTp1P3QoZVswXSxuKTpvfSxqZT1mdW5jdGlvbihlKXtyZXR1cm4gMT09PWUu
bm9kZVR5cGV8fDk9PT1lLm5vZGVUeXBlfHwhK2Uubm9kZVR5cGV9CitmLnVpZD0xLGYucHJvdG90
eXBlPXtjYWNoZTpmdW5jdGlvbihlKXt2YXIgdD1lW3RoaXMuZXhwYW5kb10KK3JldHVybiB0fHwo
dD17fSxqZShlKSYmKGUubm9kZVR5cGU/ZVt0aGlzLmV4cGFuZG9dPXQ6T2JqZWN0LmRlZmluZVBy
b3BlcnR5KGUsdGhpcy5leHBhbmRvLHt2YWx1ZTp0LGNvbmZpZ3VyYWJsZTohMH0pKSksdH0sc2V0
OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpPXRoaXMuY2FjaGUoZSkKK2lmKCJzdHJpbmciPT10eXBl
b2YgdClpW2RlLmNhbWVsQ2FzZSh0KV09bgorZWxzZSBmb3IociBpbiB0KWlbZGUuY2FtZWxDYXNl
KHIpXT10W3JdCityZXR1cm4gaX0sZ2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQ/
dGhpcy5jYWNoZShlKTplW3RoaXMuZXhwYW5kb10mJmVbdGhpcy5leHBhbmRvXVtkZS5jYW1lbENh
c2UodCldfSxhY2Nlc3M6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB2b2lkIDA9PT10fHx0JiYic3Ry
aW5nIj09dHlwZW9mIHQmJnZvaWQgMD09PW4/dGhpcy5nZXQoZSx0KToodGhpcy5zZXQoZSx0LG4p
LHZvaWQgMCE9PW4/bjp0KX0scmVtb3ZlOmZ1bmN0aW9uKGUsdCl7dmFyIG4scj1lW3RoaXMuZXhw
YW5kb10KK2lmKHZvaWQgMCE9PXIpe2lmKHZvaWQgMCE9PXQpe0FycmF5LmlzQXJyYXkodCk/dD10
Lm1hcChkZS5jYW1lbENhc2UpOih0PWRlLmNhbWVsQ2FzZSh0KSx0PXQgaW4gcj9bdF06dC5tYXRj
aChSZSl8fFtdKSxuPXQubGVuZ3RoCitmb3IoO24tLTspZGVsZXRlIHJbdFtuXV19KHZvaWQgMD09
PXR8fGRlLmlzRW1wdHlPYmplY3QocikpJiYoZS5ub2RlVHlwZT9lW3RoaXMuZXhwYW5kb109dm9p
ZCAwOmRlbGV0ZSBlW3RoaXMuZXhwYW5kb10pfX0saGFzRGF0YTpmdW5jdGlvbihlKXt2YXIgdD1l
W3RoaXMuZXhwYW5kb10KK3JldHVybiB2b2lkIDAhPT10JiYhZGUuaXNFbXB0eU9iamVjdCh0KX19
Cit2YXIgRGU9bmV3IGYsTGU9bmV3IGYsSWU9L14oPzpce1tcd1xXXSpcfXxcW1tcd1xXXSpcXSkk
LyxNZT0vW0EtWl0vZworZGUuZXh0ZW5kKHtoYXNEYXRhOmZ1bmN0aW9uKGUpe3JldHVybiBMZS5o
YXNEYXRhKGUpfHxEZS5oYXNEYXRhKGUpfSxkYXRhOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gTGUu
YWNjZXNzKGUsdCxuKX0scmVtb3ZlRGF0YTpmdW5jdGlvbihlLHQpe0xlLnJlbW92ZShlLHQpfSxf
ZGF0YTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIERlLmFjY2VzcyhlLHQsbil9LF9yZW1vdmVEYXRh
OmZ1bmN0aW9uKGUsdCl7RGUucmVtb3ZlKGUsdCl9fSksZGUuZm4uZXh0ZW5kKHtkYXRhOmZ1bmN0
aW9uKGUsdCl7dmFyIG4scixpLG89dGhpc1swXSxzPW8mJm8uYXR0cmlidXRlcworaWYodm9pZCAw
PT09ZSl7aWYodGhpcy5sZW5ndGgmJihpPUxlLmdldChvKSwxPT09by5ub2RlVHlwZSYmIURlLmdl
dChvLCJoYXNEYXRhQXR0cnMiKSkpe2ZvcihuPXMubGVuZ3RoO24tLTspc1tuXSYmKHI9c1tuXS5u
YW1lLDA9PT1yLmluZGV4T2YoImRhdGEtIikmJihyPWRlLmNhbWVsQ2FzZShyLnNsaWNlKDUpKSxk
KG8scixpW3JdKSkpCitEZS5zZXQobywiaGFzRGF0YUF0dHJzIiwhMCl9cmV0dXJuIGl9cmV0dXJu
Im9iamVjdCI9PXR5cGVvZiBlP3RoaXMuZWFjaChmdW5jdGlvbigpe0xlLnNldCh0aGlzLGUpfSk6
UGUodGhpcyxmdW5jdGlvbih0KXt2YXIgbgoraWYobyYmdm9pZCAwPT09dCl7aWYodm9pZCAwIT09
KG49TGUuZ2V0KG8sZSkpKXJldHVybiBuCitpZih2b2lkIDAhPT0obj1kKG8sZSkpKXJldHVybiBu
fWVsc2UgdGhpcy5lYWNoKGZ1bmN0aW9uKCl7TGUuc2V0KHRoaXMsZSx0KX0pfSxudWxsLHQsYXJn
dW1lbnRzLmxlbmd0aD4xLG51bGwsITApfSxyZW1vdmVEYXRhOmZ1bmN0aW9uKGUpe3JldHVybiB0
aGlzLmVhY2goZnVuY3Rpb24oKXtMZS5yZW1vdmUodGhpcyxlKX0pfX0pLGRlLmV4dGVuZCh7cXVl
dWU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByCitpZihlKXJldHVybiB0PSh0fHwiZngiKSsicXVldWUi
LHI9RGUuZ2V0KGUsdCksbiYmKCFyfHxBcnJheS5pc0FycmF5KG4pP3I9RGUuYWNjZXNzKGUsdCxk
ZS5tYWtlQXJyYXkobikpOnIucHVzaChuKSkscnx8W119LGRlcXVldWU6ZnVuY3Rpb24oZSx0KXt0
PXR8fCJmeCIKK3ZhciBuPWRlLnF1ZXVlKGUsdCkscj1uLmxlbmd0aCxpPW4uc2hpZnQoKSxvPWRl
Ll9xdWV1ZUhvb2tzKGUsdCkscz1mdW5jdGlvbigpe2RlLmRlcXVldWUoZSx0KX0KKyJpbnByb2dy
ZXNzIj09PWkmJihpPW4uc2hpZnQoKSxyLS0pLGkmJigiZngiPT09dCYmbi51bnNoaWZ0KCJpbnBy
b2dyZXNzIiksZGVsZXRlIG8uc3RvcCxpLmNhbGwoZSxzLG8pKSwhciYmbyYmby5lbXB0eS5maXJl
KCl9LF9xdWV1ZUhvb2tzOmZ1bmN0aW9uKGUsdCl7dmFyIG49dCsicXVldWVIb29rcyIKK3JldHVy
biBEZS5nZXQoZSxuKXx8RGUuYWNjZXNzKGUsbix7ZW1wdHk6ZGUuQ2FsbGJhY2tzKCJvbmNlIG1l
bW9yeSIpLmFkZChmdW5jdGlvbigpe0RlLnJlbW92ZShlLFt0KyJxdWV1ZSIsbl0pfSl9KX19KSxk
ZS5mbi5leHRlbmQoe3F1ZXVlOmZ1bmN0aW9uKGUsdCl7dmFyIG49MgorcmV0dXJuInN0cmluZyIh
PXR5cGVvZiBlJiYodD1lLGU9ImZ4IixuLS0pLGFyZ3VtZW50cy5sZW5ndGg8bj9kZS5xdWV1ZSh0
aGlzWzBdLGUpOnZvaWQgMD09PXQ/dGhpczp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgbj1kZS5x
dWV1ZSh0aGlzLGUsdCkKK2RlLl9xdWV1ZUhvb2tzKHRoaXMsZSksImZ4Ij09PWUmJiJpbnByb2dy
ZXNzIiE9PW5bMF0mJmRlLmRlcXVldWUodGhpcyxlKX0pfSxkZXF1ZXVlOmZ1bmN0aW9uKGUpe3Jl
dHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtkZS5kZXF1ZXVlKHRoaXMsZSl9KX0sY2xlYXJRdWV1
ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5xdWV1ZShlfHwiZngiLFtdKX0scHJvbWlzZTpmdW5j
dGlvbihlLHQpe3ZhciBuLHI9MSxpPWRlLkRlZmVycmVkKCksbz10aGlzLHM9dGhpcy5sZW5ndGgs
YT1mdW5jdGlvbigpey0tcnx8aS5yZXNvbHZlV2l0aChvLFtvXSl9Citmb3IoInN0cmluZyIhPXR5
cGVvZiBlJiYodD1lLGU9dm9pZCAwKSxlPWV8fCJmeCI7cy0tOykobj1EZS5nZXQob1tzXSxlKyJx
dWV1ZUhvb2tzIikpJiZuLmVtcHR5JiYocisrLG4uZW1wdHkuYWRkKGEpKQorcmV0dXJuIGEoKSxp
LnByb21pc2UodCl9fSkKK3ZhciBGZT0vWystXT8oPzpcZCpcLnwpXGQrKD86W2VFXVsrLV0/XGQr
fCkvLnNvdXJjZSx6ZT1uZXcgUmVnRXhwKCJeKD86KFsrLV0pPXwpKCIrRmUrIikoW2EteiVdKikk
IiwiaSIpLFVlPVsiVG9wIiwiUmlnaHQiLCJCb3R0b20iLCJMZWZ0Il0sQmU9ZnVuY3Rpb24oZSx0
KXtyZXR1cm4gZT10fHxlLCJub25lIj09PWUuc3R5bGUuZGlzcGxheXx8IiI9PT1lLnN0eWxlLmRp
c3BsYXkmJmRlLmNvbnRhaW5zKGUub3duZXJEb2N1bWVudCxlKSYmIm5vbmUiPT09ZGUuY3NzKGUs
ImRpc3BsYXkiKX0scWU9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksbyxzPXt9Citmb3IobyBpbiB0
KXNbb109ZS5zdHlsZVtvXSxlLnN0eWxlW29dPXRbb10KK2k9bi5hcHBseShlLHJ8fFtdKQorZm9y
KG8gaW4gdCllLnN0eWxlW29dPXNbb10KK3JldHVybiBpfSxIZT17fQorZGUuZm4uZXh0ZW5kKHtz
aG93OmZ1bmN0aW9uKCl7cmV0dXJuIHkodGhpcywhMCl9LGhpZGU6ZnVuY3Rpb24oKXtyZXR1cm4g
eSh0aGlzKX0sdG9nZ2xlOmZ1bmN0aW9uKGUpe3JldHVybiJib29sZWFuIj09dHlwZW9mIGU/ZT90
aGlzLnNob3coKTp0aGlzLmhpZGUoKTp0aGlzLmVhY2goZnVuY3Rpb24oKXtCZSh0aGlzKT9kZSh0
aGlzKS5zaG93KCk6ZGUodGhpcykuaGlkZSgpfSl9fSkKK3ZhciBWZT0vXig/OmNoZWNrYm94fHJh
ZGlvKSQvaSxXZT0vPChbYS16XVteXC9cMD5ceDIwXHRcclxuXGZdKykvaSwkZT0vXiR8XC8oPzpq
YXZhfGVjbWEpc2NyaXB0L2ksR2U9e29wdGlvbjpbMSwiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlw
bGUnPiIsIjwvc2VsZWN0PiJdLHRoZWFkOlsxLCI8dGFibGU+IiwiPC90YWJsZT4iXSxjb2w6WzIs
Ijx0YWJsZT48Y29sZ3JvdXA+IiwiPC9jb2xncm91cD48L3RhYmxlPiJdLHRyOlsyLCI8dGFibGU+
PHRib2R5PiIsIjwvdGJvZHk+PC90YWJsZT4iXSx0ZDpbMywiPHRhYmxlPjx0Ym9keT48dHI+Iiwi
PC90cj48L3Rib2R5PjwvdGFibGU+Il0sX2RlZmF1bHQ6WzAsIiIsIiJdfQorR2Uub3B0Z3JvdXA9
R2Uub3B0aW9uLEdlLnRib2R5PUdlLnRmb290PUdlLmNvbGdyb3VwPUdlLmNhcHRpb249R2UudGhl
YWQsR2UudGg9R2UudGQKK3ZhciBLZT0vPHwmIz9cdys7LzsoZnVuY3Rpb24oKXt2YXIgZT1uZS5j
cmVhdGVEb2N1bWVudEZyYWdtZW50KCksdD1lLmFwcGVuZENoaWxkKG5lLmNyZWF0ZUVsZW1lbnQo
ImRpdiIpKSxuPW5lLmNyZWF0ZUVsZW1lbnQoImlucHV0IikKK24uc2V0QXR0cmlidXRlKCJ0eXBl
IiwicmFkaW8iKSxuLnNldEF0dHJpYnV0ZSgiY2hlY2tlZCIsImNoZWNrZWQiKSxuLnNldEF0dHJp
YnV0ZSgibmFtZSIsInQiKSx0LmFwcGVuZENoaWxkKG4pLGhlLmNoZWNrQ2xvbmU9dC5jbG9uZU5v
ZGUoITApLmNsb25lTm9kZSghMCkubGFzdENoaWxkLmNoZWNrZWQsdC5pbm5lckhUTUw9Ijx0ZXh0
YXJlYT54PC90ZXh0YXJlYT4iLGhlLm5vQ2xvbmVDaGVja2VkPSEhdC5jbG9uZU5vZGUoITApLmxh
c3RDaGlsZC5kZWZhdWx0VmFsdWV9KSgpCit2YXIgUWU9bmUuZG9jdW1lbnRFbGVtZW50LFllPS9e
a2V5LyxKZT0vXig/Om1vdXNlfHBvaW50ZXJ8Y29udGV4dG1lbnV8ZHJhZ3xkcm9wKXxjbGljay8s
WGU9L14oW14uXSopKD86XC4oLispfCkvCitkZS5ldmVudD17Z2xvYmFsOnt9LGFkZDpmdW5jdGlv
bihlLHQsbixyLGkpe3ZhciBvLHMsYSx1LGwsYyxwLGYsaCxkLG0sZz1EZS5nZXQoZSkKK2lmKGcp
Zm9yKG4uaGFuZGxlciYmKG89bixuPW8uaGFuZGxlcixpPW8uc2VsZWN0b3IpLGkmJmRlLmZpbmQu
bWF0Y2hlc1NlbGVjdG9yKFFlLGkpLG4uZ3VpZHx8KG4uZ3VpZD1kZS5ndWlkKyspLCh1PWcuZXZl
bnRzKXx8KHU9Zy5ldmVudHM9e30pLChzPWcuaGFuZGxlKXx8KHM9Zy5oYW5kbGU9ZnVuY3Rpb24o
dCl7cmV0dXJuIHZvaWQgMCE9PWRlJiZkZS5ldmVudC50cmlnZ2VyZWQhPT10LnR5cGU/ZGUuZXZl
bnQuZGlzcGF0Y2guYXBwbHkoZSxhcmd1bWVudHMpOnZvaWQgMH0pLHQ9KHR8fCIiKS5tYXRjaChS
ZSl8fFsiIl0sbD10Lmxlbmd0aDtsLS07KWE9WGUuZXhlYyh0W2xdKXx8W10saD1tPWFbMV0sZD0o
YVsyXXx8IiIpLnNwbGl0KCIuIikuc29ydCgpLGgmJihwPWRlLmV2ZW50LnNwZWNpYWxbaF18fHt9
LGg9KGk/cC5kZWxlZ2F0ZVR5cGU6cC5iaW5kVHlwZSl8fGgscD1kZS5ldmVudC5zcGVjaWFsW2hd
fHx7fSxjPWRlLmV4dGVuZCh7dHlwZTpoLG9yaWdUeXBlOm0sZGF0YTpyLGhhbmRsZXI6bixndWlk
Om4uZ3VpZCxzZWxlY3RvcjppLG5lZWRzQ29udGV4dDppJiZkZS5leHByLm1hdGNoLm5lZWRzQ29u
dGV4dC50ZXN0KGkpLG5hbWVzcGFjZTpkLmpvaW4oIi4iKX0sbyksKGY9dVtoXSl8fChmPXVbaF09
W10sZi5kZWxlZ2F0ZUNvdW50PTAscC5zZXR1cCYmITEhPT1wLnNldHVwLmNhbGwoZSxyLGQscyl8
fGUuYWRkRXZlbnRMaXN0ZW5lciYmZS5hZGRFdmVudExpc3RlbmVyKGgscykpLHAuYWRkJiYocC5h
ZGQuY2FsbChlLGMpLGMuaGFuZGxlci5ndWlkfHwoYy5oYW5kbGVyLmd1aWQ9bi5ndWlkKSksaT9m
LnNwbGljZShmLmRlbGVnYXRlQ291bnQrKywwLGMpOmYucHVzaChjKSxkZS5ldmVudC5nbG9iYWxb
aF09ITApfSxyZW1vdmU6ZnVuY3Rpb24oZSx0LG4scixpKXt2YXIgbyxzLGEsdSxsLGMscCxmLGgs
ZCxtLGc9RGUuaGFzRGF0YShlKSYmRGUuZ2V0KGUpCitpZihnJiYodT1nLmV2ZW50cykpe2Zvcih0
PSh0fHwiIikubWF0Y2goUmUpfHxbIiJdLGw9dC5sZW5ndGg7bC0tOylpZihhPVhlLmV4ZWModFts
XSl8fFtdLGg9bT1hWzFdLGQ9KGFbMl18fCIiKS5zcGxpdCgiLiIpLnNvcnQoKSxoKXtmb3IocD1k
ZS5ldmVudC5zcGVjaWFsW2hdfHx7fSxoPShyP3AuZGVsZWdhdGVUeXBlOnAuYmluZFR5cGUpfHxo
LGY9dVtoXXx8W10sYT1hWzJdJiZuZXcgUmVnRXhwKCIoXnxcXC4pIitkLmpvaW4oIlxcLig/Oi4q
XFwufCkiKSsiKFxcLnwkKSIpLHM9bz1mLmxlbmd0aDtvLS07KWM9ZltvXSwhaSYmbSE9PWMub3Jp
Z1R5cGV8fG4mJm4uZ3VpZCE9PWMuZ3VpZHx8YSYmIWEudGVzdChjLm5hbWVzcGFjZSl8fHImJnIh
PT1jLnNlbGVjdG9yJiYoIioqIiE9PXJ8fCFjLnNlbGVjdG9yKXx8KGYuc3BsaWNlKG8sMSksYy5z
ZWxlY3RvciYmZi5kZWxlZ2F0ZUNvdW50LS0scC5yZW1vdmUmJnAucmVtb3ZlLmNhbGwoZSxjKSkK
K3MmJiFmLmxlbmd0aCYmKHAudGVhcmRvd24mJiExIT09cC50ZWFyZG93bi5jYWxsKGUsZCxnLmhh
bmRsZSl8fGRlLnJlbW92ZUV2ZW50KGUsaCxnLmhhbmRsZSksZGVsZXRlIHVbaF0pfWVsc2UgZm9y
KGggaW4gdSlkZS5ldmVudC5yZW1vdmUoZSxoK3RbbF0sbixyLCEwKQorZGUuaXNFbXB0eU9iamVj
dCh1KSYmRGUucmVtb3ZlKGUsImhhbmRsZSBldmVudHMiKX19LGRpc3BhdGNoOmZ1bmN0aW9uKGUp
e3ZhciB0LG4scixpLG8scyxhPWRlLmV2ZW50LmZpeChlKSx1PW5ldyBBcnJheShhcmd1bWVudHMu
bGVuZ3RoKSxsPShEZS5nZXQodGhpcywiZXZlbnRzIil8fHt9KVthLnR5cGVdfHxbXSxjPWRlLmV2
ZW50LnNwZWNpYWxbYS50eXBlXXx8e30KK2Zvcih1WzBdPWEsdD0xO3Q8YXJndW1lbnRzLmxlbmd0
aDt0KyspdVt0XT1hcmd1bWVudHNbdF0KK2lmKGEuZGVsZWdhdGVUYXJnZXQ9dGhpcywhYy5wcmVE
aXNwYXRjaHx8ITEhPT1jLnByZURpc3BhdGNoLmNhbGwodGhpcyxhKSl7Zm9yKHM9ZGUuZXZlbnQu
aGFuZGxlcnMuY2FsbCh0aGlzLGEsbCksdD0wOyhpPXNbdCsrXSkmJiFhLmlzUHJvcGFnYXRpb25T
dG9wcGVkKCk7KWZvcihhLmN1cnJlbnRUYXJnZXQ9aS5lbGVtLG49MDsobz1pLmhhbmRsZXJzW24r
K10pJiYhYS5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpOylhLnJuYW1lc3BhY2UmJiFh
LnJuYW1lc3BhY2UudGVzdChvLm5hbWVzcGFjZSl8fChhLmhhbmRsZU9iaj1vLGEuZGF0YT1vLmRh
dGEsdm9pZCAwIT09KHI9KChkZS5ldmVudC5zcGVjaWFsW28ub3JpZ1R5cGVdfHx7fSkuaGFuZGxl
fHxvLmhhbmRsZXIpLmFwcGx5KGkuZWxlbSx1KSkmJiExPT09KGEucmVzdWx0PXIpJiYoYS5wcmV2
ZW50RGVmYXVsdCgpLGEuc3RvcFByb3BhZ2F0aW9uKCkpKQorcmV0dXJuIGMucG9zdERpc3BhdGNo
JiZjLnBvc3REaXNwYXRjaC5jYWxsKHRoaXMsYSksYS5yZXN1bHR9fSxoYW5kbGVyczpmdW5jdGlv
bihlLHQpe3ZhciBuLHIsaSxvLHMsYT1bXSx1PXQuZGVsZWdhdGVDb3VudCxsPWUudGFyZ2V0Citp
Zih1JiZsLm5vZGVUeXBlJiYhKCJjbGljayI9PT1lLnR5cGUmJmUuYnV0dG9uPj0xKSlmb3IoO2wh
PT10aGlzO2w9bC5wYXJlbnROb2RlfHx0aGlzKWlmKDE9PT1sLm5vZGVUeXBlJiYoImNsaWNrIiE9
PWUudHlwZXx8ITAhPT1sLmRpc2FibGVkKSl7Zm9yKG89W10scz17fSxuPTA7bjx1O24rKylyPXRb
bl0saT1yLnNlbGVjdG9yKyIgIix2b2lkIDA9PT1zW2ldJiYoc1tpXT1yLm5lZWRzQ29udGV4dD9k
ZShpLHRoaXMpLmluZGV4KGwpPi0xOmRlLmZpbmQoaSx0aGlzLG51bGwsW2xdKS5sZW5ndGgpLHNb
aV0mJm8ucHVzaChyKQorby5sZW5ndGgmJmEucHVzaCh7ZWxlbTpsLGhhbmRsZXJzOm99KX1yZXR1
cm4gbD10aGlzLHU8dC5sZW5ndGgmJmEucHVzaCh7ZWxlbTpsLGhhbmRsZXJzOnQuc2xpY2UodSl9
KSxhfSxhZGRQcm9wOmZ1bmN0aW9uKGUsdCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGRlLkV2ZW50
LnByb3RvdHlwZSxlLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZGUuaXNGdW5j
dGlvbih0KT9mdW5jdGlvbigpe2lmKHRoaXMub3JpZ2luYWxFdmVudClyZXR1cm4gdCh0aGlzLm9y
aWdpbmFsRXZlbnQpfTpmdW5jdGlvbigpe2lmKHRoaXMub3JpZ2luYWxFdmVudClyZXR1cm4gdGhp
cy5vcmlnaW5hbEV2ZW50W2VdfSxzZXQ6ZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5
KHRoaXMsZSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6
dH0pfX0pfSxmaXg6ZnVuY3Rpb24oZSl7cmV0dXJuIGVbZGUuZXhwYW5kb10/ZTpuZXcgZGUuRXZl
bnQoZSl9LHNwZWNpYWw6e2xvYWQ6e25vQnViYmxlOiEwfSxmb2N1czp7dHJpZ2dlcjpmdW5jdGlv
bigpe2lmKHRoaXMhPT14KCkmJnRoaXMuZm9jdXMpcmV0dXJuIHRoaXMuZm9jdXMoKSwhMX0sZGVs
ZWdhdGVUeXBlOiJmb2N1c2luIn0sYmx1cjp7dHJpZ2dlcjpmdW5jdGlvbigpe2lmKHRoaXM9PT14
KCkmJnRoaXMuYmx1cilyZXR1cm4gdGhpcy5ibHVyKCksITF9LGRlbGVnYXRlVHlwZToiZm9jdXNv
dXQifSxjbGljazp7dHJpZ2dlcjpmdW5jdGlvbigpe2lmKCJjaGVja2JveCI9PT10aGlzLnR5cGUm
JnRoaXMuY2xpY2smJmkodGhpcywiaW5wdXQiKSlyZXR1cm4gdGhpcy5jbGljaygpLCExfSxfZGVm
YXVsdDpmdW5jdGlvbihlKXtyZXR1cm4gaShlLnRhcmdldCwiYSIpfX0sYmVmb3JldW5sb2FkOntw
b3N0RGlzcGF0Y2g6ZnVuY3Rpb24oZSl7dm9pZCAwIT09ZS5yZXN1bHQmJmUub3JpZ2luYWxFdmVu
dCYmKGUub3JpZ2luYWxFdmVudC5yZXR1cm5WYWx1ZT1lLnJlc3VsdCl9fX19LGRlLnJlbW92ZUV2
ZW50PWZ1bmN0aW9uKGUsdCxuKXtlLnJlbW92ZUV2ZW50TGlzdGVuZXImJmUucmVtb3ZlRXZlbnRM
aXN0ZW5lcih0LG4pfSxkZS5FdmVudD1mdW5jdGlvbihlLHQpe2lmKCEodGhpcyBpbnN0YW5jZW9m
IGRlLkV2ZW50KSlyZXR1cm4gbmV3IGRlLkV2ZW50KGUsdCkKK2UmJmUudHlwZT8odGhpcy5vcmln
aW5hbEV2ZW50PWUsdGhpcy50eXBlPWUudHlwZSx0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1lLmRl
ZmF1bHRQcmV2ZW50ZWR8fHZvaWQgMD09PWUuZGVmYXVsdFByZXZlbnRlZCYmITE9PT1lLnJldHVy
blZhbHVlP3c6RSx0aGlzLnRhcmdldD1lLnRhcmdldCYmMz09PWUudGFyZ2V0Lm5vZGVUeXBlP2Uu
dGFyZ2V0LnBhcmVudE5vZGU6ZS50YXJnZXQsdGhpcy5jdXJyZW50VGFyZ2V0PWUuY3VycmVudFRh
cmdldCx0aGlzLnJlbGF0ZWRUYXJnZXQ9ZS5yZWxhdGVkVGFyZ2V0KTp0aGlzLnR5cGU9ZSx0JiZk
ZS5leHRlbmQodGhpcyx0KSx0aGlzLnRpbWVTdGFtcD1lJiZlLnRpbWVTdGFtcHx8ZGUubm93KCks
dGhpc1tkZS5leHBhbmRvXT0hMH0sZGUuRXZlbnQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpkZS5F
dmVudCxpc0RlZmF1bHRQcmV2ZW50ZWQ6RSxpc1Byb3BhZ2F0aW9uU3RvcHBlZDpFLGlzSW1tZWRp
YXRlUHJvcGFnYXRpb25TdG9wcGVkOkUsaXNTaW11bGF0ZWQ6ITEscHJldmVudERlZmF1bHQ6ZnVu
Y3Rpb24oKXt2YXIgZT10aGlzLm9yaWdpbmFsRXZlbnQKK3RoaXMuaXNEZWZhdWx0UHJldmVudGVk
PXcsZSYmIXRoaXMuaXNTaW11bGF0ZWQmJmUucHJldmVudERlZmF1bHQoKX0sc3RvcFByb3BhZ2F0
aW9uOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcmlnaW5hbEV2ZW50Cit0aGlzLmlzUHJvcGFnYXRp
b25TdG9wcGVkPXcsZSYmIXRoaXMuaXNTaW11bGF0ZWQmJmUuc3RvcFByb3BhZ2F0aW9uKCl9LHN0
b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3JpZ2luYWxFdmVu
dAordGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZD13LGUmJiF0aGlzLmlzU2ltdWxh
dGVkJiZlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpLHRoaXMuc3RvcFByb3BhZ2F0aW9uKCl9
fSxkZS5lYWNoKHthbHRLZXk6ITAsYnViYmxlczohMCxjYW5jZWxhYmxlOiEwLGNoYW5nZWRUb3Vj
aGVzOiEwLGN0cmxLZXk6ITAsZGV0YWlsOiEwLGV2ZW50UGhhc2U6ITAsbWV0YUtleTohMCxwYWdl
WDohMCxwYWdlWTohMCxzaGlmdEtleTohMCx2aWV3OiEwLGNoYXI6ITAsY2hhckNvZGU6ITAsa2V5
OiEwLGtleUNvZGU6ITAsYnV0dG9uOiEwLGJ1dHRvbnM6ITAsY2xpZW50WDohMCxjbGllbnRZOiEw
LG9mZnNldFg6ITAsb2Zmc2V0WTohMCxwb2ludGVySWQ6ITAscG9pbnRlclR5cGU6ITAsc2NyZWVu
WDohMCxzY3JlZW5ZOiEwLHRhcmdldFRvdWNoZXM6ITAsdG9FbGVtZW50OiEwLHRvdWNoZXM6ITAs
d2hpY2g6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5idXR0b24KK3JldHVybiBudWxsPT1lLndoaWNoJiZZ
ZS50ZXN0KGUudHlwZSk/bnVsbCE9ZS5jaGFyQ29kZT9lLmNoYXJDb2RlOmUua2V5Q29kZTohZS53
aGljaCYmdm9pZCAwIT09dCYmSmUudGVzdChlLnR5cGUpPzEmdD8xOjImdD8zOjQmdD8yOjA6ZS53
aGljaH19LGRlLmV2ZW50LmFkZFByb3ApLGRlLmVhY2goe21vdXNlZW50ZXI6Im1vdXNlb3ZlciIs
bW91c2VsZWF2ZToibW91c2VvdXQiLHBvaW50ZXJlbnRlcjoicG9pbnRlcm92ZXIiLHBvaW50ZXJs
ZWF2ZToicG9pbnRlcm91dCJ9LGZ1bmN0aW9uKGUsdCl7ZGUuZXZlbnQuc3BlY2lhbFtlXT17ZGVs
ZWdhdGVUeXBlOnQsYmluZFR5cGU6dCxoYW5kbGU6ZnVuY3Rpb24oZSl7dmFyIG4scj10aGlzLGk9
ZS5yZWxhdGVkVGFyZ2V0LG89ZS5oYW5kbGVPYmoKK3JldHVybiBpJiYoaT09PXJ8fGRlLmNvbnRh
aW5zKHIsaSkpfHwoZS50eXBlPW8ub3JpZ1R5cGUsbj1vLmhhbmRsZXIuYXBwbHkodGhpcyxhcmd1
bWVudHMpLGUudHlwZT10KSxufX19KSxkZS5mbi5leHRlbmQoe29uOmZ1bmN0aW9uKGUsdCxuLHIp
e3JldHVybiBDKHRoaXMsZSx0LG4scil9LG9uZTpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gQyh0
aGlzLGUsdCxuLHIsMSl9LG9mZjpmdW5jdGlvbihlLHQsbil7dmFyIHIsaQoraWYoZSYmZS5wcmV2
ZW50RGVmYXVsdCYmZS5oYW5kbGVPYmopcmV0dXJuIHI9ZS5oYW5kbGVPYmosZGUoZS5kZWxlZ2F0
ZVRhcmdldCkub2ZmKHIubmFtZXNwYWNlP3Iub3JpZ1R5cGUrIi4iK3IubmFtZXNwYWNlOnIub3Jp
Z1R5cGUsci5zZWxlY3RvcixyLmhhbmRsZXIpLHRoaXMKK2lmKCJvYmplY3QiPT10eXBlb2YgZSl7
Zm9yKGkgaW4gZSl0aGlzLm9mZihpLHQsZVtpXSkKK3JldHVybiB0aGlzfXJldHVybiExIT09dCYm
ImZ1bmN0aW9uIiE9dHlwZW9mIHR8fChuPXQsdD12b2lkIDApLCExPT09biYmKG49RSksdGhpcy5l
YWNoKGZ1bmN0aW9uKCl7ZGUuZXZlbnQucmVtb3ZlKHRoaXMsZSxuLHQpfSl9fSkKK3ZhciBaZT0v
PCg/IWFyZWF8YnJ8Y29sfGVtYmVkfGhyfGltZ3xpbnB1dHxsaW5rfG1ldGF8cGFyYW0pKChbYS16
XVteXC9cMD5ceDIwXHRcclxuXGZdKilbXj5dKilcLz4vZ2ksZXQ9LzxzY3JpcHR8PHN0eWxlfDxs
aW5rL2ksdHQ9L2NoZWNrZWRccyooPzpbXj1dfD1ccyouY2hlY2tlZC4pL2ksbnQ9L150cnVlXC8o
LiopLyxydD0vXlxzKjwhKD86XFtDREFUQVxbfC0tKXwoPzpcXVxdfC0tKT5ccyokL2cKK2RlLmV4
dGVuZCh7aHRtbFByZWZpbHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKFplLCI8JDE+
PC8kMj4iKX0sY2xvbmU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbyxzLGE9ZS5jbG9uZU5vZGUo
ITApLHU9ZGUuY29udGFpbnMoZS5vd25lckRvY3VtZW50LGUpCitpZighKGhlLm5vQ2xvbmVDaGVj
a2VkfHwxIT09ZS5ub2RlVHlwZSYmMTEhPT1lLm5vZGVUeXBlfHxkZS5pc1hNTERvYyhlKSkpZm9y
KHM9dihhKSxvPXYoZSkscj0wLGk9by5sZW5ndGg7cjxpO3IrKylSKG9bcl0sc1tyXSkKK2lmKHQp
aWYobilmb3Iobz1vfHx2KGUpLHM9c3x8dihhKSxyPTAsaT1vLmxlbmd0aDtyPGk7cisrKVMob1ty
XSxzW3JdKQorZWxzZSBTKGUsYSkKK3JldHVybiBzPXYoYSwic2NyaXB0Iikscy5sZW5ndGg+MCYm
YihzLCF1JiZ2KGUsInNjcmlwdCIpKSxhfSxjbGVhbkRhdGE6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0
LG4scixpPWRlLmV2ZW50LnNwZWNpYWwsbz0wO3ZvaWQgMCE9PShuPWVbb10pO28rKylpZihqZShu
KSl7aWYodD1uW0RlLmV4cGFuZG9dKXtpZih0LmV2ZW50cylmb3IociBpbiB0LmV2ZW50cylpW3Jd
P2RlLmV2ZW50LnJlbW92ZShuLHIpOmRlLnJlbW92ZUV2ZW50KG4scix0LmhhbmRsZSkKK25bRGUu
ZXhwYW5kb109dm9pZCAwfW5bTGUuZXhwYW5kb10mJihuW0xlLmV4cGFuZG9dPXZvaWQgMCl9fX0p
LGRlLmZuLmV4dGVuZCh7ZGV0YWNoOmZ1bmN0aW9uKGUpe3JldHVybiBOKHRoaXMsZSwhMCl9LHJl
bW92ZTpmdW5jdGlvbihlKXtyZXR1cm4gTih0aGlzLGUpfSx0ZXh0OmZ1bmN0aW9uKGUpe3JldHVy
biBQZSh0aGlzLGZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDA9PT1lP2RlLnRleHQodGhpcyk6dGhp
cy5lbXB0eSgpLmVhY2goZnVuY3Rpb24oKXsxIT09dGhpcy5ub2RlVHlwZSYmMTEhPT10aGlzLm5v
ZGVUeXBlJiY5IT09dGhpcy5ub2RlVHlwZXx8KHRoaXMudGV4dENvbnRlbnQ9ZSl9KX0sbnVsbCxl
LGFyZ3VtZW50cy5sZW5ndGgpfSxhcHBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gayh0aGlzLGFyZ3Vt
ZW50cyxmdW5jdGlvbihlKXtpZigxPT09dGhpcy5ub2RlVHlwZXx8MTE9PT10aGlzLm5vZGVUeXBl
fHw5PT09dGhpcy5ub2RlVHlwZSl7Tyh0aGlzLGUpLmFwcGVuZENoaWxkKGUpfX0pfSxwcmVwZW5k
OmZ1bmN0aW9uKCl7cmV0dXJuIGsodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24oZSl7aWYoMT09PXRo
aXMubm9kZVR5cGV8fDExPT09dGhpcy5ub2RlVHlwZXx8OT09PXRoaXMubm9kZVR5cGUpe3ZhciB0
PU8odGhpcyxlKQordC5pbnNlcnRCZWZvcmUoZSx0LmZpcnN0Q2hpbGQpfX0pfSxiZWZvcmU6ZnVu
Y3Rpb24oKXtyZXR1cm4gayh0aGlzLGFyZ3VtZW50cyxmdW5jdGlvbihlKXt0aGlzLnBhcmVudE5v
ZGUmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZSx0aGlzKX0pfSxhZnRlcjpmdW5jdGlv
bigpe3JldHVybiBrKHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKGUpe3RoaXMucGFyZW50Tm9kZSYm
dGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlLHRoaXMubmV4dFNpYmxpbmcpfSl9LGVtcHR5
OmZ1bmN0aW9uKCl7Zm9yKHZhciBlLHQ9MDtudWxsIT0oZT10aGlzW3RdKTt0KyspMT09PWUubm9k
ZVR5cGUmJihkZS5jbGVhbkRhdGEodihlLCExKSksZS50ZXh0Q29udGVudD0iIikKK3JldHVybiB0
aGlzfSxjbG9uZTpmdW5jdGlvbihlLHQpe3JldHVybiBlPW51bGwhPWUmJmUsdD1udWxsPT10P2U6
dCx0aGlzLm1hcChmdW5jdGlvbigpe3JldHVybiBkZS5jbG9uZSh0aGlzLGUsdCl9KX0saHRtbDpm
dW5jdGlvbihlKXtyZXR1cm4gUGUodGhpcyxmdW5jdGlvbihlKXt2YXIgdD10aGlzWzBdfHx7fSxu
PTAscj10aGlzLmxlbmd0aAoraWYodm9pZCAwPT09ZSYmMT09PXQubm9kZVR5cGUpcmV0dXJuIHQu
aW5uZXJIVE1MCitpZigic3RyaW5nIj09dHlwZW9mIGUmJiFldC50ZXN0KGUpJiYhR2VbKFdlLmV4
ZWMoZSl8fFsiIiwiIl0pWzFdLnRvTG93ZXJDYXNlKCldKXtlPWRlLmh0bWxQcmVmaWx0ZXIoZSkK
K3RyeXtmb3IoO248cjtuKyspdD10aGlzW25dfHx7fSwxPT09dC5ub2RlVHlwZSYmKGRlLmNsZWFu
RGF0YSh2KHQsITEpKSx0LmlubmVySFRNTD1lKQordD0wfWNhdGNoKGUpe319dCYmdGhpcy5lbXB0
eSgpLmFwcGVuZChlKX0sbnVsbCxlLGFyZ3VtZW50cy5sZW5ndGgpfSxyZXBsYWNlV2l0aDpmdW5j
dGlvbigpe3ZhciBlPVtdCityZXR1cm4gayh0aGlzLGFyZ3VtZW50cyxmdW5jdGlvbih0KXt2YXIg
bj10aGlzLnBhcmVudE5vZGUKK2RlLmluQXJyYXkodGhpcyxlKTwwJiYoZGUuY2xlYW5EYXRhKHYo
dGhpcykpLG4mJm4ucmVwbGFjZUNoaWxkKHQsdGhpcykpfSxlKX19KSxkZS5lYWNoKHthcHBlbmRU
bzoiYXBwZW5kIixwcmVwZW5kVG86InByZXBlbmQiLGluc2VydEJlZm9yZToiYmVmb3JlIixpbnNl
cnRBZnRlcjoiYWZ0ZXIiLHJlcGxhY2VBbGw6InJlcGxhY2VXaXRoIn0sZnVuY3Rpb24oZSx0KXtk
ZS5mbltlXT1mdW5jdGlvbihlKXtmb3IodmFyIG4scj1bXSxpPWRlKGUpLG89aS5sZW5ndGgtMSxz
PTA7czw9bztzKyspbj1zPT09bz90aGlzOnRoaXMuY2xvbmUoITApLGRlKGlbc10pW3RdKG4pLHNl
LmFwcGx5KHIsbi5nZXQoKSkKK3JldHVybiB0aGlzLnB1c2hTdGFjayhyKX19KQordmFyIGl0PS9e
bWFyZ2luLyxvdD1uZXcgUmVnRXhwKCJeKCIrRmUrIikoPyFweClbYS16JV0rJCIsImkiKSxzdD1m
dW5jdGlvbih0KXt2YXIgbj10Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcKK3JldHVybiBuJiZu
Lm9wZW5lcnx8KG49ZSksbi5nZXRDb21wdXRlZFN0eWxlKHQpfTsoZnVuY3Rpb24oKXtmdW5jdGlv
biB0KCl7aWYoYSl7YS5zdHlsZS5jc3NUZXh0PSJib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9zaXRp
b246cmVsYXRpdmU7ZGlzcGxheTpibG9jazttYXJnaW46YXV0bztib3JkZXI6MXB4O3BhZGRpbmc6
MXB4O3RvcDoxJTt3aWR0aDo1MCUiLGEuaW5uZXJIVE1MPSIiLFFlLmFwcGVuZENoaWxkKHMpCit2
YXIgdD1lLmdldENvbXB1dGVkU3R5bGUoYSkKK249IjElIiE9PXQudG9wLG89IjJweCI9PT10Lm1h
cmdpbkxlZnQscj0iNHB4Ij09PXQud2lkdGgsYS5zdHlsZS5tYXJnaW5SaWdodD0iNTAlIixpPSI0
cHgiPT09dC5tYXJnaW5SaWdodCxRZS5yZW1vdmVDaGlsZChzKSxhPW51bGx9fXZhciBuLHIsaSxv
LHM9bmUuY3JlYXRlRWxlbWVudCgiZGl2IiksYT1uZS5jcmVhdGVFbGVtZW50KCJkaXYiKQorYS5z
dHlsZSYmKGEuc3R5bGUuYmFja2dyb3VuZENsaXA9ImNvbnRlbnQtYm94IixhLmNsb25lTm9kZSgh
MCkuc3R5bGUuYmFja2dyb3VuZENsaXA9IiIsaGUuY2xlYXJDbG9uZVN0eWxlPSJjb250ZW50LWJv
eCI9PT1hLnN0eWxlLmJhY2tncm91bmRDbGlwLHMuc3R5bGUuY3NzVGV4dD0iYm9yZGVyOjA7d2lk
dGg6OHB4O2hlaWdodDowO3RvcDowO2xlZnQ6LTk5OTlweDtwYWRkaW5nOjA7bWFyZ2luLXRvcDox
cHg7cG9zaXRpb246YWJzb2x1dGUiLHMuYXBwZW5kQ2hpbGQoYSksZGUuZXh0ZW5kKGhlLHtwaXhl
bFBvc2l0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIHQoKSxufSxib3hTaXppbmdSZWxpYWJsZTpmdW5j
dGlvbigpe3JldHVybiB0KCkscn0scGl4ZWxNYXJnaW5SaWdodDpmdW5jdGlvbigpe3JldHVybiB0
KCksaX0scmVsaWFibGVNYXJnaW5MZWZ0OmZ1bmN0aW9uKCl7cmV0dXJuIHQoKSxvfX0pKX0pKCkK
K3ZhciBhdD0vXihub25lfHRhYmxlKD8hLWNbZWFdKS4rKS8sdXQ9L14tLS8sbHQ9e3Bvc2l0aW9u
OiJhYnNvbHV0ZSIsdmlzaWJpbGl0eToiaGlkZGVuIixkaXNwbGF5OiJibG9jayJ9LGN0PXtsZXR0
ZXJTcGFjaW5nOiIwIixmb250V2VpZ2h0OiI0MDAifSxwdD1bIldlYmtpdCIsIk1veiIsIm1zIl0s
ZnQ9bmUuY3JlYXRlRWxlbWVudCgiZGl2Iikuc3R5bGUKK2RlLmV4dGVuZCh7Y3NzSG9va3M6e29w
YWNpdHk6e2dldDpmdW5jdGlvbihlLHQpe2lmKHQpe3ZhciBuPVAoZSwib3BhY2l0eSIpCityZXR1
cm4iIj09PW4/IjEiOm59fX19LGNzc051bWJlcjp7YW5pbWF0aW9uSXRlcmF0aW9uQ291bnQ6ITAs
Y29sdW1uQ291bnQ6ITAsZmlsbE9wYWNpdHk6ITAsZmxleEdyb3c6ITAsZmxleFNocmluazohMCxm
b250V2VpZ2h0OiEwLGxpbmVIZWlnaHQ6ITAsb3BhY2l0eTohMCxvcmRlcjohMCxvcnBoYW5zOiEw
LHdpZG93czohMCx6SW5kZXg6ITAsem9vbTohMH0sY3NzUHJvcHM6e2Zsb2F0OiJjc3NGbG9hdCJ9
LHN0eWxlOmZ1bmN0aW9uKGUsdCxuLHIpe2lmKGUmJjMhPT1lLm5vZGVUeXBlJiY4IT09ZS5ub2Rl
VHlwZSYmZS5zdHlsZSl7dmFyIGksbyxzLGE9ZGUuY2FtZWxDYXNlKHQpLHU9dXQudGVzdCh0KSxs
PWUuc3R5bGUKK2lmKHV8fCh0PUwoYSkpLHM9ZGUuY3NzSG9va3NbdF18fGRlLmNzc0hvb2tzW2Fd
LHZvaWQgMD09PW4pcmV0dXJuIHMmJiJnZXQiaW4gcyYmdm9pZCAwIT09KGk9cy5nZXQoZSwhMSxy
KSk/aTpsW3RdCitvPXR5cGVvZiBuLCJzdHJpbmciPT09byYmKGk9emUuZXhlYyhuKSkmJmlbMV0m
JihuPW0oZSx0LGkpLG89Im51bWJlciIpLG51bGwhPW4mJm49PT1uJiYoIm51bWJlciI9PT1vJiYo
bis9aSYmaVszXXx8KGRlLmNzc051bWJlclthXT8iIjoicHgiKSksaGUuY2xlYXJDbG9uZVN0eWxl
fHwiIiE9PW58fDAhPT10LmluZGV4T2YoImJhY2tncm91bmQiKXx8KGxbdF09ImluaGVyaXQiKSxz
JiYic2V0ImluIHMmJnZvaWQgMD09PShuPXMuc2V0KGUsbixyKSl8fCh1P2wuc2V0UHJvcGVydHko
dCxuKTpsW3RdPW4pKX19LGNzczpmdW5jdGlvbihlLHQsbixyKXt2YXIgaSxvLHMsYT1kZS5jYW1l
bENhc2UodCkKK3JldHVybiB1dC50ZXN0KHQpfHwodD1MKGEpKSxzPWRlLmNzc0hvb2tzW3RdfHxk
ZS5jc3NIb29rc1thXSxzJiYiZ2V0ImluIHMmJihpPXMuZ2V0KGUsITAsbikpLHZvaWQgMD09PWkm
JihpPVAoZSx0LHIpKSwibm9ybWFsIj09PWkmJnQgaW4gY3QmJihpPWN0W3RdKSwiIj09PW58fG4/
KG89cGFyc2VGbG9hdChpKSwhMD09PW58fGlzRmluaXRlKG8pP298fDA6aSk6aX19KSxkZS5lYWNo
KFsiaGVpZ2h0Iiwid2lkdGgiXSxmdW5jdGlvbihlLHQpe2RlLmNzc0hvb2tzW3RdPXtnZXQ6ZnVu
Y3Rpb24oZSxuLHIpe2lmKG4pcmV0dXJuIWF0LnRlc3QoZGUuY3NzKGUsImRpc3BsYXkiKSl8fGUu
Z2V0Q2xpZW50UmVjdHMoKS5sZW5ndGgmJmUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg/
RihlLHQscik6cWUoZSxsdCxmdW5jdGlvbigpe3JldHVybiBGKGUsdCxyKX0pfSxzZXQ6ZnVuY3Rp
b24oZSxuLHIpe3ZhciBpLG89ciYmc3QoZSkscz1yJiZNKGUsdCxyLCJib3JkZXItYm94Ij09PWRl
LmNzcyhlLCJib3hTaXppbmciLCExLG8pLG8pCityZXR1cm4gcyYmKGk9emUuZXhlYyhuKSkmJiJw
eCIhPT0oaVszXXx8InB4IikmJihlLnN0eWxlW3RdPW4sbj1kZS5jc3MoZSx0KSksSShlLG4scyl9
fX0pLGRlLmNzc0hvb2tzLm1hcmdpbkxlZnQ9aihoZS5yZWxpYWJsZU1hcmdpbkxlZnQsZnVuY3Rp
b24oZSx0KXtpZih0KXJldHVybihwYXJzZUZsb2F0KFAoZSwibWFyZ2luTGVmdCIpKXx8ZS5nZXRC
b3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0LXFlKGUse21hcmdpbkxlZnQ6MH0sZnVuY3Rpb24oKXty
ZXR1cm4gZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0fSkpKyJweCJ9KSxkZS5lYWNoKHtt
YXJnaW46IiIscGFkZGluZzoiIixib3JkZXI6IldpZHRoIn0sZnVuY3Rpb24oZSx0KXtkZS5jc3NI
b29rc1tlK3RdPXtleHBhbmQ6ZnVuY3Rpb24obil7Zm9yKHZhciByPTAsaT17fSxvPSJzdHJpbmci
PT10eXBlb2Ygbj9uLnNwbGl0KCIgIik6W25dO3I8NDtyKyspaVtlK1VlW3JdK3RdPW9bcl18fG9b
ci0yXXx8b1swXQorcmV0dXJuIGl9fSxpdC50ZXN0KGUpfHwoZGUuY3NzSG9va3NbZSt0XS5zZXQ9
SSl9KSxkZS5mbi5leHRlbmQoe2NzczpmdW5jdGlvbihlLHQpe3JldHVybiBQZSh0aGlzLGZ1bmN0
aW9uKGUsdCxuKXt2YXIgcixpLG89e30scz0wCitpZihBcnJheS5pc0FycmF5KHQpKXtmb3Iocj1z
dChlKSxpPXQubGVuZ3RoO3M8aTtzKyspb1t0W3NdXT1kZS5jc3MoZSx0W3NdLCExLHIpCityZXR1
cm4gb31yZXR1cm4gdm9pZCAwIT09bj9kZS5zdHlsZShlLHQsbik6ZGUuY3NzKGUsdCl9LGUsdCxh
cmd1bWVudHMubGVuZ3RoPjEpfX0pLGRlLlR3ZWVuPXosei5wcm90b3R5cGU9e2NvbnN0cnVjdG9y
OnosaW5pdDpmdW5jdGlvbihlLHQsbixyLGksbyl7dGhpcy5lbGVtPWUsdGhpcy5wcm9wPW4sdGhp
cy5lYXNpbmc9aXx8ZGUuZWFzaW5nLl9kZWZhdWx0LHRoaXMub3B0aW9ucz10LHRoaXMuc3RhcnQ9
dGhpcy5ub3c9dGhpcy5jdXIoKSx0aGlzLmVuZD1yLHRoaXMudW5pdD1vfHwoZGUuY3NzTnVtYmVy
W25dPyIiOiJweCIpfSxjdXI6ZnVuY3Rpb24oKXt2YXIgZT16LnByb3BIb29rc1t0aGlzLnByb3Bd
CityZXR1cm4gZSYmZS5nZXQ/ZS5nZXQodGhpcyk6ei5wcm9wSG9va3MuX2RlZmF1bHQuZ2V0KHRo
aXMpfSxydW46ZnVuY3Rpb24oZSl7dmFyIHQsbj16LnByb3BIb29rc1t0aGlzLnByb3BdCityZXR1
cm4gdGhpcy5vcHRpb25zLmR1cmF0aW9uP3RoaXMucG9zPXQ9ZGUuZWFzaW5nW3RoaXMuZWFzaW5n
XShlLHRoaXMub3B0aW9ucy5kdXJhdGlvbiplLDAsMSx0aGlzLm9wdGlvbnMuZHVyYXRpb24pOnRo
aXMucG9zPXQ9ZSx0aGlzLm5vdz0odGhpcy5lbmQtdGhpcy5zdGFydCkqdCt0aGlzLnN0YXJ0LHRo
aXMub3B0aW9ucy5zdGVwJiZ0aGlzLm9wdGlvbnMuc3RlcC5jYWxsKHRoaXMuZWxlbSx0aGlzLm5v
dyx0aGlzKSxuJiZuLnNldD9uLnNldCh0aGlzKTp6LnByb3BIb29rcy5fZGVmYXVsdC5zZXQodGhp
cyksdGhpc319LHoucHJvdG90eXBlLmluaXQucHJvdG90eXBlPXoucHJvdG90eXBlLHoucHJvcEhv
b2tzPXtfZGVmYXVsdDp7Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0CityZXR1cm4gMSE9PWUuZWxlbS5u
b2RlVHlwZXx8bnVsbCE9ZS5lbGVtW2UucHJvcF0mJm51bGw9PWUuZWxlbS5zdHlsZVtlLnByb3Bd
P2UuZWxlbVtlLnByb3BdOih0PWRlLmNzcyhlLmVsZW0sZS5wcm9wLCIiKSx0JiYiYXV0byIhPT10
P3Q6MCl9LHNldDpmdW5jdGlvbihlKXtkZS5meC5zdGVwW2UucHJvcF0/ZGUuZnguc3RlcFtlLnBy
b3BdKGUpOjEhPT1lLmVsZW0ubm9kZVR5cGV8fG51bGw9PWUuZWxlbS5zdHlsZVtkZS5jc3NQcm9w
c1tlLnByb3BdXSYmIWRlLmNzc0hvb2tzW2UucHJvcF0/ZS5lbGVtW2UucHJvcF09ZS5ub3c6ZGUu
c3R5bGUoZS5lbGVtLGUucHJvcCxlLm5vdytlLnVuaXQpfX19LHoucHJvcEhvb2tzLnNjcm9sbFRv
cD16LnByb3BIb29rcy5zY3JvbGxMZWZ0PXtzZXQ6ZnVuY3Rpb24oZSl7ZS5lbGVtLm5vZGVUeXBl
JiZlLmVsZW0ucGFyZW50Tm9kZSYmKGUuZWxlbVtlLnByb3BdPWUubm93KX19LGRlLmVhc2luZz17
bGluZWFyOmZ1bmN0aW9uKGUpe3JldHVybiBlfSxzd2luZzpmdW5jdGlvbihlKXtyZXR1cm4uNS1N
YXRoLmNvcyhlKk1hdGguUEkpLzJ9LF9kZWZhdWx0OiJzd2luZyJ9LGRlLmZ4PXoucHJvdG90eXBl
LmluaXQsZGUuZnguc3RlcD17fQordmFyIGh0LGR0LG10PS9eKD86dG9nZ2xlfHNob3d8aGlkZSkk
LyxndD0vcXVldWVIb29rcyQvCitkZS5BbmltYXRpb249ZGUuZXh0ZW5kKCQse3R3ZWVuZXJzOnsi
KiI6W2Z1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5jcmVhdGVUd2VlbihlLHQpCityZXR1cm4gbShu
LmVsZW0sZSx6ZS5leGVjKHQpLG4pLG59XX0sdHdlZW5lcjpmdW5jdGlvbihlLHQpe2RlLmlzRnVu
Y3Rpb24oZSk/KHQ9ZSxlPVsiKiJdKTplPWUubWF0Y2goUmUpCitmb3IodmFyIG4scj0wLGk9ZS5s
ZW5ndGg7cjxpO3IrKyluPWVbcl0sJC50d2VlbmVyc1tuXT0kLnR3ZWVuZXJzW25dfHxbXSwkLnR3
ZWVuZXJzW25dLnVuc2hpZnQodCl9LHByZWZpbHRlcnM6W1ZdLHByZWZpbHRlcjpmdW5jdGlvbihl
LHQpe3Q/JC5wcmVmaWx0ZXJzLnVuc2hpZnQoZSk6JC5wcmVmaWx0ZXJzLnB1c2goZSl9fSksZGUu
c3BlZWQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUmJiJvYmplY3QiPT10eXBlb2YgZT9kZS5leHRl
bmQoe30sZSk6e2NvbXBsZXRlOm58fCFuJiZ0fHxkZS5pc0Z1bmN0aW9uKGUpJiZlLGR1cmF0aW9u
OmUsZWFzaW5nOm4mJnR8fHQmJiFkZS5pc0Z1bmN0aW9uKHQpJiZ0fQorcmV0dXJuIGRlLmZ4Lm9m
Zj9yLmR1cmF0aW9uPTA6Im51bWJlciIhPXR5cGVvZiByLmR1cmF0aW9uJiYoci5kdXJhdGlvbiBp
biBkZS5meC5zcGVlZHM/ci5kdXJhdGlvbj1kZS5meC5zcGVlZHNbci5kdXJhdGlvbl06ci5kdXJh
dGlvbj1kZS5meC5zcGVlZHMuX2RlZmF1bHQpLG51bGwhPXIucXVldWUmJiEwIT09ci5xdWV1ZXx8
KHIucXVldWU9ImZ4Iiksci5vbGQ9ci5jb21wbGV0ZSxyLmNvbXBsZXRlPWZ1bmN0aW9uKCl7ZGUu
aXNGdW5jdGlvbihyLm9sZCkmJnIub2xkLmNhbGwodGhpcyksci5xdWV1ZSYmZGUuZGVxdWV1ZSh0
aGlzLHIucXVldWUpfSxyfSxkZS5mbi5leHRlbmQoe2ZhZGVUbzpmdW5jdGlvbihlLHQsbixyKXty
ZXR1cm4gdGhpcy5maWx0ZXIoQmUpLmNzcygib3BhY2l0eSIsMCkuc2hvdygpLmVuZCgpLmFuaW1h
dGUoe29wYWNpdHk6dH0sZSxuLHIpfSxhbmltYXRlOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPWRl
LmlzRW1wdHlPYmplY3QoZSksbz1kZS5zcGVlZCh0LG4scikscz1mdW5jdGlvbigpe3ZhciB0PSQo
dGhpcyxkZS5leHRlbmQoe30sZSksbyk7KGl8fERlLmdldCh0aGlzLCJmaW5pc2giKSkmJnQuc3Rv
cCghMCl9CityZXR1cm4gcy5maW5pc2g9cyxpfHwhMT09PW8ucXVldWU/dGhpcy5lYWNoKHMpOnRo
aXMucXVldWUoby5xdWV1ZSxzKX0sc3RvcDpmdW5jdGlvbihlLHQsbil7dmFyIHI9ZnVuY3Rpb24o
ZSl7dmFyIHQ9ZS5zdG9wCitkZWxldGUgZS5zdG9wLHQobil9CityZXR1cm4ic3RyaW5nIiE9dHlw
ZW9mIGUmJihuPXQsdD1lLGU9dm9pZCAwKSx0JiYhMSE9PWUmJnRoaXMucXVldWUoZXx8ImZ4Iixb
XSksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9ITAsaT1udWxsIT1lJiZlKyJxdWV1ZUhvb2tz
IixvPWRlLnRpbWVycyxzPURlLmdldCh0aGlzKQoraWYoaSlzW2ldJiZzW2ldLnN0b3AmJnIoc1tp
XSkKK2Vsc2UgZm9yKGkgaW4gcylzW2ldJiZzW2ldLnN0b3AmJmd0LnRlc3QoaSkmJnIoc1tpXSkK
K2ZvcihpPW8ubGVuZ3RoO2ktLTspb1tpXS5lbGVtIT09dGhpc3x8bnVsbCE9ZSYmb1tpXS5xdWV1
ZSE9PWV8fChvW2ldLmFuaW0uc3RvcChuKSx0PSExLG8uc3BsaWNlKGksMSkpCishdCYmbnx8ZGUu
ZGVxdWV1ZSh0aGlzLGUpfSl9LGZpbmlzaDpmdW5jdGlvbihlKXtyZXR1cm4hMSE9PWUmJihlPWV8
fCJmeCIpLHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciB0LG49RGUuZ2V0KHRoaXMpLHI9bltlKyJx
dWV1ZSJdLGk9bltlKyJxdWV1ZUhvb2tzIl0sbz1kZS50aW1lcnMscz1yP3IubGVuZ3RoOjAKK2Zv
cihuLmZpbmlzaD0hMCxkZS5xdWV1ZSh0aGlzLGUsW10pLGkmJmkuc3RvcCYmaS5zdG9wLmNhbGwo
dGhpcywhMCksdD1vLmxlbmd0aDt0LS07KW9bdF0uZWxlbT09PXRoaXMmJm9bdF0ucXVldWU9PT1l
JiYob1t0XS5hbmltLnN0b3AoITApLG8uc3BsaWNlKHQsMSkpCitmb3IodD0wO3Q8czt0Kyspclt0
XSYmclt0XS5maW5pc2gmJnJbdF0uZmluaXNoLmNhbGwodGhpcykKK2RlbGV0ZSBuLmZpbmlzaH0p
fX0pLGRlLmVhY2goWyJ0b2dnbGUiLCJzaG93IiwiaGlkZSJdLGZ1bmN0aW9uKGUsdCl7dmFyIG49
ZGUuZm5bdF0KK2RlLmZuW3RdPWZ1bmN0aW9uKGUscixpKXtyZXR1cm4gbnVsbD09ZXx8ImJvb2xl
YW4iPT10eXBlb2YgZT9uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTp0aGlzLmFuaW1hdGUocSh0LCEw
KSxlLHIsaSl9fSksZGUuZWFjaCh7c2xpZGVEb3duOnEoInNob3ciKSxzbGlkZVVwOnEoImhpZGUi
KSxzbGlkZVRvZ2dsZTpxKCJ0b2dnbGUiKSxmYWRlSW46e29wYWNpdHk6InNob3cifSxmYWRlT3V0
OntvcGFjaXR5OiJoaWRlIn0sZmFkZVRvZ2dsZTp7b3BhY2l0eToidG9nZ2xlIn19LGZ1bmN0aW9u
KGUsdCl7ZGUuZm5bZV09ZnVuY3Rpb24oZSxuLHIpe3JldHVybiB0aGlzLmFuaW1hdGUodCxlLG4s
cil9fSksZGUudGltZXJzPVtdLGRlLmZ4LnRpY2s9ZnVuY3Rpb24oKXt2YXIgZSx0PTAsbj1kZS50
aW1lcnMKK2ZvcihodD1kZS5ub3coKTt0PG4ubGVuZ3RoO3QrKykoZT1uW3RdKSgpfHxuW3RdIT09
ZXx8bi5zcGxpY2UodC0tLDEpCituLmxlbmd0aHx8ZGUuZnguc3RvcCgpLGh0PXZvaWQgMH0sZGUu
ZngudGltZXI9ZnVuY3Rpb24oZSl7ZGUudGltZXJzLnB1c2goZSksZGUuZnguc3RhcnQoKX0sZGUu
ZnguaW50ZXJ2YWw9MTMsZGUuZnguc3RhcnQ9ZnVuY3Rpb24oKXtkdHx8KGR0PSEwLFUoKSl9LGRl
LmZ4LnN0b3A9ZnVuY3Rpb24oKXtkdD1udWxsfSxkZS5meC5zcGVlZHM9e3Nsb3c6NjAwLGZhc3Q6
MjAwLF9kZWZhdWx0OjQwMH0sZGUuZm4uZGVsYXk9ZnVuY3Rpb24odCxuKXtyZXR1cm4gdD1kZS5m
eD9kZS5meC5zcGVlZHNbdF18fHQ6dCxuPW58fCJmeCIsdGhpcy5xdWV1ZShuLGZ1bmN0aW9uKG4s
cil7dmFyIGk9ZS5zZXRUaW1lb3V0KG4sdCkKK3Iuc3RvcD1mdW5jdGlvbigpe2UuY2xlYXJUaW1l
b3V0KGkpfX0pfSxmdW5jdGlvbigpe3ZhciBlPW5lLmNyZWF0ZUVsZW1lbnQoImlucHV0IiksdD1u
ZS5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKSxuPXQuYXBwZW5kQ2hpbGQobmUuY3JlYXRlRWxlbWVu
dCgib3B0aW9uIikpCitlLnR5cGU9ImNoZWNrYm94IixoZS5jaGVja09uPSIiIT09ZS52YWx1ZSxo
ZS5vcHRTZWxlY3RlZD1uLnNlbGVjdGVkLGU9bmUuY3JlYXRlRWxlbWVudCgiaW5wdXQiKSxlLnZh
bHVlPSJ0IixlLnR5cGU9InJhZGlvIixoZS5yYWRpb1ZhbHVlPSJ0Ij09PWUudmFsdWV9KCkKK3Zh
ciB5dCx2dD1kZS5leHByLmF0dHJIYW5kbGUKK2RlLmZuLmV4dGVuZCh7YXR0cjpmdW5jdGlvbihl
LHQpe3JldHVybiBQZSh0aGlzLGRlLmF0dHIsZSx0LGFyZ3VtZW50cy5sZW5ndGg+MSl9LHJlbW92
ZUF0dHI6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2RlLnJlbW92ZUF0
dHIodGhpcyxlKX0pfX0pLGRlLmV4dGVuZCh7YXR0cjpmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxv
PWUubm9kZVR5cGUKK2lmKDMhPT1vJiY4IT09byYmMiE9PW8pcmV0dXJuIHZvaWQgMD09PWUuZ2V0
QXR0cmlidXRlP2RlLnByb3AoZSx0LG4pOigxPT09byYmZGUuaXNYTUxEb2MoZSl8fChpPWRlLmF0
dHJIb29rc1t0LnRvTG93ZXJDYXNlKCldfHwoZGUuZXhwci5tYXRjaC5ib29sLnRlc3QodCk/eXQ6
dm9pZCAwKSksdm9pZCAwIT09bj9udWxsPT09bj92b2lkIGRlLnJlbW92ZUF0dHIoZSx0KTppJiYi
c2V0ImluIGkmJnZvaWQgMCE9PShyPWkuc2V0KGUsbix0KSk/cjooZS5zZXRBdHRyaWJ1dGUodCxu
KyIiKSxuKTppJiYiZ2V0ImluIGkmJm51bGwhPT0ocj1pLmdldChlLHQpKT9yOihyPWRlLmZpbmQu
YXR0cihlLHQpLG51bGw9PXI/dm9pZCAwOnIpKX0sYXR0ckhvb2tzOnt0eXBlOntzZXQ6ZnVuY3Rp
b24oZSx0KXtpZighaGUucmFkaW9WYWx1ZSYmInJhZGlvIj09PXQmJmkoZSwiaW5wdXQiKSl7dmFy
IG49ZS52YWx1ZQorcmV0dXJuIGUuc2V0QXR0cmlidXRlKCJ0eXBlIix0KSxuJiYoZS52YWx1ZT1u
KSx0fX19fSxyZW1vdmVBdHRyOmZ1bmN0aW9uKGUsdCl7dmFyIG4scj0wLGk9dCYmdC5tYXRjaChS
ZSkKK2lmKGkmJjE9PT1lLm5vZGVUeXBlKWZvcig7bj1pW3IrK107KWUucmVtb3ZlQXR0cmlidXRl
KG4pfX0pLHl0PXtzZXQ6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiExPT09dD9kZS5yZW1vdmVBdHRy
KGUsbik6ZS5zZXRBdHRyaWJ1dGUobixuKSxufX0sZGUuZWFjaChkZS5leHByLm1hdGNoLmJvb2wu
c291cmNlLm1hdGNoKC9cdysvZyksZnVuY3Rpb24oZSx0KXt2YXIgbj12dFt0XXx8ZGUuZmluZC5h
dHRyCit2dFt0XT1mdW5jdGlvbihlLHQscil7dmFyIGksbyxzPXQudG9Mb3dlckNhc2UoKQorcmV0
dXJuIHJ8fChvPXZ0W3NdLHZ0W3NdPWksaT1udWxsIT1uKGUsdCxyKT9zOm51bGwsdnRbc109byks
aX19KQordmFyIGJ0PS9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbikkL2ksX3Q9L14o
PzphfGFyZWEpJC9pCitkZS5mbi5leHRlbmQoe3Byb3A6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gUGUo
dGhpcyxkZS5wcm9wLGUsdCxhcmd1bWVudHMubGVuZ3RoPjEpfSxyZW1vdmVQcm9wOmZ1bmN0aW9u
KGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtkZWxldGUgdGhpc1tkZS5wcm9wRml4W2Vd
fHxlXX0pfX0pLGRlLmV4dGVuZCh7cHJvcDpmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvPWUubm9k
ZVR5cGUKK2lmKDMhPT1vJiY4IT09byYmMiE9PW8pcmV0dXJuIDE9PT1vJiZkZS5pc1hNTERvYyhl
KXx8KHQ9ZGUucHJvcEZpeFt0XXx8dCxpPWRlLnByb3BIb29rc1t0XSksdm9pZCAwIT09bj9pJiYi
c2V0ImluIGkmJnZvaWQgMCE9PShyPWkuc2V0KGUsbix0KSk/cjplW3RdPW46aSYmImdldCJpbiBp
JiZudWxsIT09KHI9aS5nZXQoZSx0KSk/cjplW3RdfSxwcm9wSG9va3M6e3RhYkluZGV4OntnZXQ6
ZnVuY3Rpb24oZSl7dmFyIHQ9ZGUuZmluZC5hdHRyKGUsInRhYmluZGV4IikKK3JldHVybiB0P3Bh
cnNlSW50KHQsMTApOmJ0LnRlc3QoZS5ub2RlTmFtZSl8fF90LnRlc3QoZS5ub2RlTmFtZSkmJmUu
aHJlZj8wOi0xfX19LHByb3BGaXg6e2ZvcjoiaHRtbEZvciIsY2xhc3M6ImNsYXNzTmFtZSJ9fSks
aGUub3B0U2VsZWN0ZWR8fChkZS5wcm9wSG9va3Muc2VsZWN0ZWQ9e2dldDpmdW5jdGlvbihlKXt2
YXIgdD1lLnBhcmVudE5vZGUKK3JldHVybiB0JiZ0LnBhcmVudE5vZGUmJnQucGFyZW50Tm9kZS5z
ZWxlY3RlZEluZGV4LG51bGx9LHNldDpmdW5jdGlvbihlKXt2YXIgdD1lLnBhcmVudE5vZGUKK3Qm
Jih0LnNlbGVjdGVkSW5kZXgsdC5wYXJlbnROb2RlJiZ0LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRl
eCl9fSksZGUuZWFjaChbInRhYkluZGV4IiwicmVhZE9ubHkiLCJtYXhMZW5ndGgiLCJjZWxsU3Bh
Y2luZyIsImNlbGxQYWRkaW5nIiwicm93U3BhbiIsImNvbFNwYW4iLCJ1c2VNYXAiLCJmcmFtZUJv
cmRlciIsImNvbnRlbnRFZGl0YWJsZSJdLGZ1bmN0aW9uKCl7ZGUucHJvcEZpeFt0aGlzLnRvTG93
ZXJDYXNlKCldPXRoaXN9KSxkZS5mbi5leHRlbmQoe2FkZENsYXNzOmZ1bmN0aW9uKGUpe3ZhciB0
LG4scixpLG8scyxhLHU9MAoraWYoZGUuaXNGdW5jdGlvbihlKSlyZXR1cm4gdGhpcy5lYWNoKGZ1
bmN0aW9uKHQpe2RlKHRoaXMpLmFkZENsYXNzKGUuY2FsbCh0aGlzLHQsSyh0aGlzKSkpfSkKK2lm
KCJzdHJpbmciPT10eXBlb2YgZSYmZSlmb3IodD1lLm1hdGNoKFJlKXx8W107bj10aGlzW3UrK107
KWlmKGk9SyhuKSxyPTE9PT1uLm5vZGVUeXBlJiYiICIrRyhpKSsiICIpe2ZvcihzPTA7bz10W3Mr
K107KXIuaW5kZXhPZigiICIrbysiICIpPDAmJihyKz1vKyIgIikKK2E9RyhyKSxpIT09YSYmbi5z
ZXRBdHRyaWJ1dGUoImNsYXNzIixhKX1yZXR1cm4gdGhpc30scmVtb3ZlQ2xhc3M6ZnVuY3Rpb24o
ZSl7dmFyIHQsbixyLGksbyxzLGEsdT0wCitpZihkZS5pc0Z1bmN0aW9uKGUpKXJldHVybiB0aGlz
LmVhY2goZnVuY3Rpb24odCl7ZGUodGhpcykucmVtb3ZlQ2xhc3MoZS5jYWxsKHRoaXMsdCxLKHRo
aXMpKSl9KQoraWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHRoaXMuYXR0cigiY2xhc3MiLCIi
KQoraWYoInN0cmluZyI9PXR5cGVvZiBlJiZlKWZvcih0PWUubWF0Y2goUmUpfHxbXTtuPXRoaXNb
dSsrXTspaWYoaT1LKG4pLHI9MT09PW4ubm9kZVR5cGUmJiIgIitHKGkpKyIgIil7Zm9yKHM9MDtv
PXRbcysrXTspZm9yKDtyLmluZGV4T2YoIiAiK28rIiAiKT4tMTspcj1yLnJlcGxhY2UoIiAiK28r
IiAiLCIgIikKK2E9RyhyKSxpIT09YSYmbi5zZXRBdHRyaWJ1dGUoImNsYXNzIixhKX1yZXR1cm4g
dGhpc30sdG9nZ2xlQ2xhc3M6ZnVuY3Rpb24oZSx0KXt2YXIgbj10eXBlb2YgZQorcmV0dXJuImJv
b2xlYW4iPT10eXBlb2YgdCYmInN0cmluZyI9PT1uP3Q/dGhpcy5hZGRDbGFzcyhlKTp0aGlzLnJl
bW92ZUNsYXNzKGUpOmRlLmlzRnVuY3Rpb24oZSk/dGhpcy5lYWNoKGZ1bmN0aW9uKG4pe2RlKHRo
aXMpLnRvZ2dsZUNsYXNzKGUuY2FsbCh0aGlzLG4sSyh0aGlzKSx0KSx0KX0pOnRoaXMuZWFjaChm
dW5jdGlvbigpe3ZhciB0LHIsaSxvCitpZigic3RyaW5nIj09PW4pZm9yKHI9MCxpPWRlKHRoaXMp
LG89ZS5tYXRjaChSZSl8fFtdO3Q9b1tyKytdOylpLmhhc0NsYXNzKHQpP2kucmVtb3ZlQ2xhc3Mo
dCk6aS5hZGRDbGFzcyh0KQorZWxzZSB2b2lkIDAhPT1lJiYiYm9vbGVhbiIhPT1ufHwodD1LKHRo
aXMpLHQmJkRlLnNldCh0aGlzLCJfX2NsYXNzTmFtZV9fIix0KSx0aGlzLnNldEF0dHJpYnV0ZSYm
dGhpcy5zZXRBdHRyaWJ1dGUoImNsYXNzIix0fHwhMT09PWU/IiI6RGUuZ2V0KHRoaXMsIl9fY2xh
c3NOYW1lX18iKXx8IiIpKX0pfSxoYXNDbGFzczpmdW5jdGlvbihlKXt2YXIgdCxuLHI9MAorZm9y
KHQ9IiAiK2UrIiAiO249dGhpc1tyKytdOylpZigxPT09bi5ub2RlVHlwZSYmKCIgIitHKEsobikp
KyIgIikuaW5kZXhPZih0KT4tMSlyZXR1cm4hMAorcmV0dXJuITF9fSkKK3ZhciB3dD0vXHIvZwor
ZGUuZm4uZXh0ZW5kKHt2YWw6ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGk9dGhpc1swXQore2lmKGFy
Z3VtZW50cy5sZW5ndGgpcmV0dXJuIHI9ZGUuaXNGdW5jdGlvbihlKSx0aGlzLmVhY2goZnVuY3Rp
b24obil7dmFyIGkKKzE9PT10aGlzLm5vZGVUeXBlJiYoaT1yP2UuY2FsbCh0aGlzLG4sZGUodGhp
cykudmFsKCkpOmUsbnVsbD09aT9pPSIiOiJudW1iZXIiPT10eXBlb2YgaT9pKz0iIjpBcnJheS5p
c0FycmF5KGkpJiYoaT1kZS5tYXAoaSxmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT8iIjplKyIi
fSkpLCh0PWRlLnZhbEhvb2tzW3RoaXMudHlwZV18fGRlLnZhbEhvb2tzW3RoaXMubm9kZU5hbWUu
dG9Mb3dlckNhc2UoKV0pJiYic2V0ImluIHQmJnZvaWQgMCE9PXQuc2V0KHRoaXMsaSwidmFsdWUi
KXx8KHRoaXMudmFsdWU9aSkpfSkKK2lmKGkpcmV0dXJuKHQ9ZGUudmFsSG9va3NbaS50eXBlXXx8
ZGUudmFsSG9va3NbaS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXSkmJiJnZXQiaW4gdCYmdm9pZCAw
IT09KG49dC5nZXQoaSwidmFsdWUiKSk/bjoobj1pLnZhbHVlLCJzdHJpbmciPT10eXBlb2Ygbj9u
LnJlcGxhY2Uod3QsIiIpOm51bGw9PW4/IiI6bil9fX0pLGRlLmV4dGVuZCh7dmFsSG9va3M6e29w
dGlvbjp7Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0PWRlLmZpbmQuYXR0cihlLCJ2YWx1ZSIpCityZXR1
cm4gbnVsbCE9dD90OkcoZGUudGV4dChlKSl9fSxzZWxlY3Q6e2dldDpmdW5jdGlvbihlKXt2YXIg
dCxuLHIsbz1lLm9wdGlvbnMscz1lLnNlbGVjdGVkSW5kZXgsYT0ic2VsZWN0LW9uZSI9PT1lLnR5
cGUsdT1hP251bGw6W10sbD1hP3MrMTpvLmxlbmd0aAorZm9yKHI9czwwP2w6YT9zOjA7cjxsO3Ir
KylpZihuPW9bcl0sKG4uc2VsZWN0ZWR8fHI9PT1zKSYmIW4uZGlzYWJsZWQmJighbi5wYXJlbnRO
b2RlLmRpc2FibGVkfHwhaShuLnBhcmVudE5vZGUsIm9wdGdyb3VwIikpKXtpZih0PWRlKG4pLnZh
bCgpLGEpcmV0dXJuIHQKK3UucHVzaCh0KX1yZXR1cm4gdX0sc2V0OmZ1bmN0aW9uKGUsdCl7Zm9y
KHZhciBuLHIsaT1lLm9wdGlvbnMsbz1kZS5tYWtlQXJyYXkodCkscz1pLmxlbmd0aDtzLS07KXI9
aVtzXSwoci5zZWxlY3RlZD1kZS5pbkFycmF5KGRlLnZhbEhvb2tzLm9wdGlvbi5nZXQociksbyk+
LTEpJiYobj0hMCkKK3JldHVybiBufHwoZS5zZWxlY3RlZEluZGV4PS0xKSxvfX19fSksZGUuZWFj
aChbInJhZGlvIiwiY2hlY2tib3giXSxmdW5jdGlvbigpe2RlLnZhbEhvb2tzW3RoaXNdPXtzZXQ6
ZnVuY3Rpb24oZSx0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiBlLmNoZWNrZWQ9ZGUuaW5B
cnJheShkZShlKS52YWwoKSx0KT4tMX19LGhlLmNoZWNrT258fChkZS52YWxIb29rc1t0aGlzXS5n
ZXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PT1lLmdldEF0dHJpYnV0ZSgidmFsdWUiKT8ib24i
OmUudmFsdWV9KX0pCit2YXIgRXQ9L14oPzpmb2N1c2luZm9jdXN8Zm9jdXNvdXRibHVyKSQvCitk
ZS5leHRlbmQoZGUuZXZlbnQse3RyaWdnZXI6ZnVuY3Rpb24odCxuLHIsaSl7dmFyIG8scyxhLHUs
bCxjLHAsZj1bcnx8bmVdLGg9Y2UuY2FsbCh0LCJ0eXBlIik/dC50eXBlOnQsZD1jZS5jYWxsKHQs
Im5hbWVzcGFjZSIpP3QubmFtZXNwYWNlLnNwbGl0KCIuIik6W10KK2lmKHM9YT1yPXJ8fG5lLDMh
PT1yLm5vZGVUeXBlJiY4IT09ci5ub2RlVHlwZSYmIUV0LnRlc3QoaCtkZS5ldmVudC50cmlnZ2Vy
ZWQpJiYoaC5pbmRleE9mKCIuIik+LTEmJihkPWguc3BsaXQoIi4iKSxoPWQuc2hpZnQoKSxkLnNv
cnQoKSksbD1oLmluZGV4T2YoIjoiKTwwJiYib24iK2gsdD10W2RlLmV4cGFuZG9dP3Q6bmV3IGRl
LkV2ZW50KGgsIm9iamVjdCI9PXR5cGVvZiB0JiZ0KSx0LmlzVHJpZ2dlcj1pPzI6Myx0Lm5hbWVz
cGFjZT1kLmpvaW4oIi4iKSx0LnJuYW1lc3BhY2U9dC5uYW1lc3BhY2U/bmV3IFJlZ0V4cCgiKF58
XFwuKSIrZC5qb2luKCJcXC4oPzouKlxcLnwpIikrIihcXC58JCkiKTpudWxsLHQucmVzdWx0PXZv
aWQgMCx0LnRhcmdldHx8KHQudGFyZ2V0PXIpLG49bnVsbD09bj9bdF06ZGUubWFrZUFycmF5KG4s
W3RdKSxwPWRlLmV2ZW50LnNwZWNpYWxbaF18fHt9LGl8fCFwLnRyaWdnZXJ8fCExIT09cC50cmln
Z2VyLmFwcGx5KHIsbikpKXtpZighaSYmIXAubm9CdWJibGUmJiFkZS5pc1dpbmRvdyhyKSl7Zm9y
KHU9cC5kZWxlZ2F0ZVR5cGV8fGgsRXQudGVzdCh1K2gpfHwocz1zLnBhcmVudE5vZGUpO3M7cz1z
LnBhcmVudE5vZGUpZi5wdXNoKHMpLGE9cworYT09PShyLm93bmVyRG9jdW1lbnR8fG5lKSYmZi5w
dXNoKGEuZGVmYXVsdFZpZXd8fGEucGFyZW50V2luZG93fHxlKX1mb3Iobz0wOyhzPWZbbysrXSkm
JiF0LmlzUHJvcGFnYXRpb25TdG9wcGVkKCk7KXQudHlwZT1vPjE/dTpwLmJpbmRUeXBlfHxoLGM9
KERlLmdldChzLCJldmVudHMiKXx8e30pW3QudHlwZV0mJkRlLmdldChzLCJoYW5kbGUiKSxjJiZj
LmFwcGx5KHMsbiksKGM9bCYmc1tsXSkmJmMuYXBwbHkmJmplKHMpJiYodC5yZXN1bHQ9Yy5hcHBs
eShzLG4pLCExPT09dC5yZXN1bHQmJnQucHJldmVudERlZmF1bHQoKSkKK3JldHVybiB0LnR5cGU9
aCxpfHx0LmlzRGVmYXVsdFByZXZlbnRlZCgpfHxwLl9kZWZhdWx0JiYhMSE9PXAuX2RlZmF1bHQu
YXBwbHkoZi5wb3AoKSxuKXx8IWplKHIpfHxsJiZkZS5pc0Z1bmN0aW9uKHJbaF0pJiYhZGUuaXNX
aW5kb3cocikmJihhPXJbbF0sYSYmKHJbbF09bnVsbCksZGUuZXZlbnQudHJpZ2dlcmVkPWgsclto
XSgpLGRlLmV2ZW50LnRyaWdnZXJlZD12b2lkIDAsYSYmKHJbbF09YSkpLHQucmVzdWx0fX0sc2lt
dWxhdGU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWRlLmV4dGVuZChuZXcgZGUuRXZlbnQsbix7dHlw
ZTplLGlzU2ltdWxhdGVkOiEwfSkKK2RlLmV2ZW50LnRyaWdnZXIocixudWxsLHQpfX0pLGRlLmZu
LmV4dGVuZCh7dHJpZ2dlcjpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24o
KXtkZS5ldmVudC50cmlnZ2VyKGUsdCx0aGlzKX0pfSx0cmlnZ2VySGFuZGxlcjpmdW5jdGlvbihl
LHQpe3ZhciBuPXRoaXNbMF0KK2lmKG4pcmV0dXJuIGRlLmV2ZW50LnRyaWdnZXIoZSx0LG4sITAp
fX0pLGRlLmVhY2goImJsdXIgZm9jdXMgZm9jdXNpbiBmb2N1c291dCByZXNpemUgc2Nyb2xsIGNs
aWNrIGRibGNsaWNrIG1vdXNlZG93biBtb3VzZXVwIG1vdXNlbW92ZSBtb3VzZW92ZXIgbW91c2Vv
dXQgbW91c2VlbnRlciBtb3VzZWxlYXZlIGNoYW5nZSBzZWxlY3Qgc3VibWl0IGtleWRvd24ga2V5
cHJlc3Mga2V5dXAgY29udGV4dG1lbnUiLnNwbGl0KCIgIiksZnVuY3Rpb24oZSx0KXtkZS5mblt0
XT1mdW5jdGlvbihlLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjA/dGhpcy5vbih0LG51bGws
ZSxuKTp0aGlzLnRyaWdnZXIodCl9fSksZGUuZm4uZXh0ZW5kKHtob3ZlcjpmdW5jdGlvbihlLHQp
e3JldHVybiB0aGlzLm1vdXNlZW50ZXIoZSkubW91c2VsZWF2ZSh0fHxlKX19KSxoZS5mb2N1c2lu
PSJvbmZvY3VzaW4iaW4gZSxoZS5mb2N1c2lufHxkZS5lYWNoKHtmb2N1czoiZm9jdXNpbiIsYmx1
cjoiZm9jdXNvdXQifSxmdW5jdGlvbihlLHQpe3ZhciBuPWZ1bmN0aW9uKGUpe2RlLmV2ZW50LnNp
bXVsYXRlKHQsZS50YXJnZXQsZGUuZXZlbnQuZml4KGUpKX0KK2RlLmV2ZW50LnNwZWNpYWxbdF09
e3NldHVwOmZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5vd25lckRvY3VtZW50fHx0aGlzLGk9RGUuYWNj
ZXNzKHIsdCkKK2l8fHIuYWRkRXZlbnRMaXN0ZW5lcihlLG4sITApLERlLmFjY2VzcyhyLHQsKGl8
fDApKzEpfSx0ZWFyZG93bjpmdW5jdGlvbigpe3ZhciByPXRoaXMub3duZXJEb2N1bWVudHx8dGhp
cyxpPURlLmFjY2VzcyhyLHQpLTEKK2k/RGUuYWNjZXNzKHIsdCxpKTooci5yZW1vdmVFdmVudExp
c3RlbmVyKGUsbiwhMCksRGUucmVtb3ZlKHIsdCkpfX19KQordmFyIHh0PWUubG9jYXRpb24sQ3Q9
ZGUubm93KCksT3Q9L1w/LworZGUucGFyc2VYTUw9ZnVuY3Rpb24odCl7dmFyIG4KK2lmKCF0fHwi
c3RyaW5nIiE9dHlwZW9mIHQpcmV0dXJuIG51bGwKK3RyeXtuPShuZXcgZS5ET01QYXJzZXIpLnBh
cnNlRnJvbVN0cmluZyh0LCJ0ZXh0L3htbCIpfWNhdGNoKGUpe249dm9pZCAwfXJldHVybiBuJiYh
bi5nZXRFbGVtZW50c0J5VGFnTmFtZSgicGFyc2VyZXJyb3IiKS5sZW5ndGh8fGRlLmVycm9yKCJJ
bnZhbGlkIFhNTDogIit0KSxufQordmFyIEF0PS9cW1xdJC8sVHQ9L1xyP1xuL2csU3Q9L14oPzpz
dWJtaXR8YnV0dG9ufGltYWdlfHJlc2V0fGZpbGUpJC9pLFJ0PS9eKD86aW5wdXR8c2VsZWN0fHRl
eHRhcmVhfGtleWdlbikvaQorZGUucGFyYW09ZnVuY3Rpb24oZSx0KXt2YXIgbixyPVtdLGk9ZnVu
Y3Rpb24oZSx0KXt2YXIgbj1kZS5pc0Z1bmN0aW9uKHQpP3QoKTp0CityW3IubGVuZ3RoXT1lbmNv
ZGVVUklDb21wb25lbnQoZSkrIj0iK2VuY29kZVVSSUNvbXBvbmVudChudWxsPT1uPyIiOm4pfQor
aWYoQXJyYXkuaXNBcnJheShlKXx8ZS5qcXVlcnkmJiFkZS5pc1BsYWluT2JqZWN0KGUpKWRlLmVh
Y2goZSxmdW5jdGlvbigpe2kodGhpcy5uYW1lLHRoaXMudmFsdWUpfSkKK2Vsc2UgZm9yKG4gaW4g
ZSlRKG4sZVtuXSx0LGkpCityZXR1cm4gci5qb2luKCImIil9LGRlLmZuLmV4dGVuZCh7c2VyaWFs
aXplOmZ1bmN0aW9uKCl7cmV0dXJuIGRlLnBhcmFtKHRoaXMuc2VyaWFsaXplQXJyYXkoKSl9LHNl
cmlhbGl6ZUFycmF5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCl7dmFyIGU9
ZGUucHJvcCh0aGlzLCJlbGVtZW50cyIpCityZXR1cm4gZT9kZS5tYWtlQXJyYXkoZSk6dGhpc30p
LmZpbHRlcihmdW5jdGlvbigpe3ZhciBlPXRoaXMudHlwZQorcmV0dXJuIHRoaXMubmFtZSYmIWRl
KHRoaXMpLmlzKCI6ZGlzYWJsZWQiKSYmUnQudGVzdCh0aGlzLm5vZGVOYW1lKSYmIVN0LnRlc3Qo
ZSkmJih0aGlzLmNoZWNrZWR8fCFWZS50ZXN0KGUpKX0pLm1hcChmdW5jdGlvbihlLHQpe3ZhciBu
PWRlKHRoaXMpLnZhbCgpCityZXR1cm4gbnVsbD09bj9udWxsOkFycmF5LmlzQXJyYXkobik/ZGUu
bWFwKG4sZnVuY3Rpb24oZSl7cmV0dXJue25hbWU6dC5uYW1lLHZhbHVlOmUucmVwbGFjZShUdCwi
XHJcbiIpfX0pOntuYW1lOnQubmFtZSx2YWx1ZTpuLnJlcGxhY2UoVHQsIlxyXG4iKX19KS5nZXQo
KX19KQordmFyIGt0PS8lMjAvZyxOdD0vIy4qJC8sUHQ9LyhbPyZdKV89W14mXSovLGp0PS9eKC4q
Pyk6WyBcdF0qKFteXHJcbl0qKSQvZ20sRHQ9L14oPzphYm91dHxhcHB8YXBwLXN0b3JhZ2V8List
ZXh0ZW5zaW9ufGZpbGV8cmVzfHdpZGdldCk6JC8sTHQ9L14oPzpHRVR8SEVBRCkkLyxJdD0vXlwv
XC8vLE10PXt9LEZ0PXt9LHp0PSIqLyIuY29uY2F0KCIqIiksVXQ9bmUuY3JlYXRlRWxlbWVudCgi
YSIpCitVdC5ocmVmPXh0LmhyZWYsZGUuZXh0ZW5kKHthY3RpdmU6MCxsYXN0TW9kaWZpZWQ6e30s
ZXRhZzp7fSxhamF4U2V0dGluZ3M6e3VybDp4dC5ocmVmLHR5cGU6IkdFVCIsaXNMb2NhbDpEdC50
ZXN0KHh0LnByb3RvY29sKSxnbG9iYWw6ITAscHJvY2Vzc0RhdGE6ITAsYXN5bmM6ITAsY29udGVu
dFR5cGU6ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDsgY2hhcnNldD1VVEYtOCIs
YWNjZXB0czp7IioiOnp0LHRleHQ6InRleHQvcGxhaW4iLGh0bWw6InRleHQvaHRtbCIseG1sOiJh
cHBsaWNhdGlvbi94bWwsIHRleHQveG1sIixqc29uOiJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L2ph
dmFzY3JpcHQifSxjb250ZW50czp7eG1sOi9cYnhtbFxiLyxodG1sOi9cYmh0bWwvLGpzb246L1xi
anNvblxiL30scmVzcG9uc2VGaWVsZHM6e3htbDoicmVzcG9uc2VYTUwiLHRleHQ6InJlc3BvbnNl
VGV4dCIsanNvbjoicmVzcG9uc2VKU09OIn0sY29udmVydGVyczp7IiogdGV4dCI6U3RyaW5nLCJ0
ZXh0IGh0bWwiOiEwLCJ0ZXh0IGpzb24iOkpTT04ucGFyc2UsInRleHQgeG1sIjpkZS5wYXJzZVhN
TH0sZmxhdE9wdGlvbnM6e3VybDohMCxjb250ZXh0OiEwfX0sYWpheFNldHVwOmZ1bmN0aW9uKGUs
dCl7cmV0dXJuIHQ/WChYKGUsZGUuYWpheFNldHRpbmdzKSx0KTpYKGRlLmFqYXhTZXR0aW5ncyxl
KX0sYWpheFByZWZpbHRlcjpZKE10KSxhamF4VHJhbnNwb3J0OlkoRnQpLGFqYXg6ZnVuY3Rpb24o
dCxuKXtmdW5jdGlvbiByKHQsbixyLGEpe3ZhciBsLGYsaCxfLHcsRT1uCitjfHwoYz0hMCx1JiZl
LmNsZWFyVGltZW91dCh1KSxpPXZvaWQgMCxzPWF8fCIiLHgucmVhZHlTdGF0ZT10PjA/NDowLGw9
dD49MjAwJiZ0PDMwMHx8MzA0PT09dCxyJiYoXz1aKGQseCxyKSksXz1lZShkLF8seCxsKSxsPyhk
LmlmTW9kaWZpZWQmJih3PXguZ2V0UmVzcG9uc2VIZWFkZXIoIkxhc3QtTW9kaWZpZWQiKSx3JiYo
ZGUubGFzdE1vZGlmaWVkW29dPXcpLCh3PXguZ2V0UmVzcG9uc2VIZWFkZXIoImV0YWciKSkmJihk
ZS5ldGFnW29dPXcpKSwyMDQ9PT10fHwiSEVBRCI9PT1kLnR5cGU/RT0ibm9jb250ZW50IjozMDQ9
PT10P0U9Im5vdG1vZGlmaWVkIjooRT1fLnN0YXRlLGY9Xy5kYXRhLGg9Xy5lcnJvcixsPSFoKSk6
KGg9RSwhdCYmRXx8KEU9ImVycm9yIix0PDAmJih0PTApKSkseC5zdGF0dXM9dCx4LnN0YXR1c1Rl
eHQ9KG58fEUpKyIiLGw/eS5yZXNvbHZlV2l0aChtLFtmLEUseF0pOnkucmVqZWN0V2l0aChtLFt4
LEUsaF0pLHguc3RhdHVzQ29kZShiKSxiPXZvaWQgMCxwJiZnLnRyaWdnZXIobD8iYWpheFN1Y2Nl
c3MiOiJhamF4RXJyb3IiLFt4LGQsbD9mOmhdKSx2LmZpcmVXaXRoKG0sW3gsRV0pLHAmJihnLnRy
aWdnZXIoImFqYXhDb21wbGV0ZSIsW3gsZF0pLC0tZGUuYWN0aXZlfHxkZS5ldmVudC50cmlnZ2Vy
KCJhamF4U3RvcCIpKSl9Im9iamVjdCI9PXR5cGVvZiB0JiYobj10LHQ9dm9pZCAwKSxuPW58fHt9
Cit2YXIgaSxvLHMsYSx1LGwsYyxwLGYsaCxkPWRlLmFqYXhTZXR1cCh7fSxuKSxtPWQuY29udGV4
dHx8ZCxnPWQuY29udGV4dCYmKG0ubm9kZVR5cGV8fG0uanF1ZXJ5KT9kZShtKTpkZS5ldmVudCx5
PWRlLkRlZmVycmVkKCksdj1kZS5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksYj1kLnN0YXR1c0Nv
ZGV8fHt9LF89e30sdz17fSxFPSJjYW5jZWxlZCIseD17cmVhZHlTdGF0ZTowLGdldFJlc3BvbnNl
SGVhZGVyOmZ1bmN0aW9uKGUpe3ZhciB0CitpZihjKXtpZighYSlmb3IoYT17fTt0PWp0LmV4ZWMo
cyk7KWFbdFsxXS50b0xvd2VyQ2FzZSgpXT10WzJdCit0PWFbZS50b0xvd2VyQ2FzZSgpXX1yZXR1
cm4gbnVsbD09dD9udWxsOnR9LGdldEFsbFJlc3BvbnNlSGVhZGVyczpmdW5jdGlvbigpe3JldHVy
biBjP3M6bnVsbH0sc2V0UmVxdWVzdEhlYWRlcjpmdW5jdGlvbihlLHQpe3JldHVybiBudWxsPT1j
JiYoZT13W2UudG9Mb3dlckNhc2UoKV09d1tlLnRvTG93ZXJDYXNlKCldfHxlLF9bZV09dCksdGhp
c30sb3ZlcnJpZGVNaW1lVHlwZTpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09YyYmKGQubWltZVR5
cGU9ZSksdGhpc30sc3RhdHVzQ29kZTpmdW5jdGlvbihlKXt2YXIgdAoraWYoZSlpZihjKXguYWx3
YXlzKGVbeC5zdGF0dXNdKQorZWxzZSBmb3IodCBpbiBlKWJbdF09W2JbdF0sZVt0XV0KK3JldHVy
biB0aGlzfSxhYm9ydDpmdW5jdGlvbihlKXt2YXIgdD1lfHxFCityZXR1cm4gaSYmaS5hYm9ydCh0
KSxyKDAsdCksdGhpc319CitpZih5LnByb21pc2UoeCksZC51cmw9KCh0fHxkLnVybHx8eHQuaHJl
ZikrIiIpLnJlcGxhY2UoSXQseHQucHJvdG9jb2wrIi8vIiksZC50eXBlPW4ubWV0aG9kfHxuLnR5
cGV8fGQubWV0aG9kfHxkLnR5cGUsZC5kYXRhVHlwZXM9KGQuZGF0YVR5cGV8fCIqIikudG9Mb3dl
ckNhc2UoKS5tYXRjaChSZSl8fFsiIl0sbnVsbD09ZC5jcm9zc0RvbWFpbil7bD1uZS5jcmVhdGVF
bGVtZW50KCJhIikKK3RyeXtsLmhyZWY9ZC51cmwsbC5ocmVmPWwuaHJlZixkLmNyb3NzRG9tYWlu
PVV0LnByb3RvY29sKyIvLyIrVXQuaG9zdCE9bC5wcm90b2NvbCsiLy8iK2wuaG9zdH1jYXRjaChl
KXtkLmNyb3NzRG9tYWluPSEwfX1pZihkLmRhdGEmJmQucHJvY2Vzc0RhdGEmJiJzdHJpbmciIT10
eXBlb2YgZC5kYXRhJiYoZC5kYXRhPWRlLnBhcmFtKGQuZGF0YSxkLnRyYWRpdGlvbmFsKSksSihN
dCxkLG4seCksYylyZXR1cm4geAorcD1kZS5ldmVudCYmZC5nbG9iYWwscCYmMD09ZGUuYWN0aXZl
KysmJmRlLmV2ZW50LnRyaWdnZXIoImFqYXhTdGFydCIpLGQudHlwZT1kLnR5cGUudG9VcHBlckNh
c2UoKSxkLmhhc0NvbnRlbnQ9IUx0LnRlc3QoZC50eXBlKSxvPWQudXJsLnJlcGxhY2UoTnQsIiIp
LGQuaGFzQ29udGVudD9kLmRhdGEmJmQucHJvY2Vzc0RhdGEmJjA9PT0oZC5jb250ZW50VHlwZXx8
IiIpLmluZGV4T2YoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpJiYoZC5kYXRh
PWQuZGF0YS5yZXBsYWNlKGt0LCIrIikpOihoPWQudXJsLnNsaWNlKG8ubGVuZ3RoKSxkLmRhdGEm
JihvKz0oT3QudGVzdChvKT8iJiI6Ij8iKStkLmRhdGEsZGVsZXRlIGQuZGF0YSksITE9PT1kLmNh
Y2hlJiYobz1vLnJlcGxhY2UoUHQsIiQxIiksaD0oT3QudGVzdChvKT8iJiI6Ij8iKSsiXz0iK0N0
KysraCksZC51cmw9bytoKSxkLmlmTW9kaWZpZWQmJihkZS5sYXN0TW9kaWZpZWRbb10mJnguc2V0
UmVxdWVzdEhlYWRlcigiSWYtTW9kaWZpZWQtU2luY2UiLGRlLmxhc3RNb2RpZmllZFtvXSksZGUu
ZXRhZ1tvXSYmeC5zZXRSZXF1ZXN0SGVhZGVyKCJJZi1Ob25lLU1hdGNoIixkZS5ldGFnW29dKSks
KGQuZGF0YSYmZC5oYXNDb250ZW50JiYhMSE9PWQuY29udGVudFR5cGV8fG4uY29udGVudFR5cGUp
JiZ4LnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtVHlwZSIsZC5jb250ZW50VHlwZSkseC5zZXRS
ZXF1ZXN0SGVhZGVyKCJBY2NlcHQiLGQuZGF0YVR5cGVzWzBdJiZkLmFjY2VwdHNbZC5kYXRhVHlw
ZXNbMF1dP2QuYWNjZXB0c1tkLmRhdGFUeXBlc1swXV0rKCIqIiE9PWQuZGF0YVR5cGVzWzBdPyIs
ICIrenQrIjsgcT0wLjAxIjoiIik6ZC5hY2NlcHRzWyIqIl0pCitmb3IoZiBpbiBkLmhlYWRlcnMp
eC5zZXRSZXF1ZXN0SGVhZGVyKGYsZC5oZWFkZXJzW2ZdKQoraWYoZC5iZWZvcmVTZW5kJiYoITE9
PT1kLmJlZm9yZVNlbmQuY2FsbChtLHgsZCl8fGMpKXJldHVybiB4LmFib3J0KCkKK2lmKEU9ImFi
b3J0Iix2LmFkZChkLmNvbXBsZXRlKSx4LmRvbmUoZC5zdWNjZXNzKSx4LmZhaWwoZC5lcnJvciks
aT1KKEZ0LGQsbix4KSl7aWYoeC5yZWFkeVN0YXRlPTEscCYmZy50cmlnZ2VyKCJhamF4U2VuZCIs
W3gsZF0pLGMpcmV0dXJuIHgKK2QuYXN5bmMmJmQudGltZW91dD4wJiYodT1lLnNldFRpbWVvdXQo
ZnVuY3Rpb24oKXt4LmFib3J0KCJ0aW1lb3V0Iil9LGQudGltZW91dCkpCit0cnl7Yz0hMSxpLnNl
bmQoXyxyKX1jYXRjaChlKXtpZihjKXRocm93IGUKK3IoLTEsZSl9fWVsc2UgcigtMSwiTm8gVHJh
bnNwb3J0IikKK3JldHVybiB4fSxnZXRKU09OOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZGUuZ2V0
KGUsdCxuLCJqc29uIil9LGdldFNjcmlwdDpmdW5jdGlvbihlLHQpe3JldHVybiBkZS5nZXQoZSx2
b2lkIDAsdCwic2NyaXB0Iil9fSksZGUuZWFjaChbImdldCIsInBvc3QiXSxmdW5jdGlvbihlLHQp
e2RlW3RdPWZ1bmN0aW9uKGUsbixyLGkpe3JldHVybiBkZS5pc0Z1bmN0aW9uKG4pJiYoaT1pfHxy
LHI9bixuPXZvaWQgMCksZGUuYWpheChkZS5leHRlbmQoe3VybDplLHR5cGU6dCxkYXRhVHlwZTpp
LGRhdGE6bixzdWNjZXNzOnJ9LGRlLmlzUGxhaW5PYmplY3QoZSkmJmUpKX19KSxkZS5fZXZhbFVy
bD1mdW5jdGlvbihlKXtyZXR1cm4gZGUuYWpheCh7dXJsOmUsdHlwZToiR0VUIixkYXRhVHlwZToi
c2NyaXB0IixjYWNoZTohMCxhc3luYzohMSxnbG9iYWw6ITEsdGhyb3dzOiEwfSl9LGRlLmZuLmV4
dGVuZCh7d3JhcEFsbDpmdW5jdGlvbihlKXt2YXIgdAorcmV0dXJuIHRoaXNbMF0mJihkZS5pc0Z1
bmN0aW9uKGUpJiYoZT1lLmNhbGwodGhpc1swXSkpLHQ9ZGUoZSx0aGlzWzBdLm93bmVyRG9jdW1l
bnQpLmVxKDApLmNsb25lKCEwKSx0aGlzWzBdLnBhcmVudE5vZGUmJnQuaW5zZXJ0QmVmb3JlKHRo
aXNbMF0pLHQubWFwKGZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXM7ZS5maXJzdEVsZW1lbnRDaGls
ZDspZT1lLmZpcnN0RWxlbWVudENoaWxkCityZXR1cm4gZX0pLmFwcGVuZCh0aGlzKSksdGhpc30s
d3JhcElubmVyOmZ1bmN0aW9uKGUpe3JldHVybiBkZS5pc0Z1bmN0aW9uKGUpP3RoaXMuZWFjaChm
dW5jdGlvbih0KXtkZSh0aGlzKS53cmFwSW5uZXIoZS5jYWxsKHRoaXMsdCkpfSk6dGhpcy5lYWNo
KGZ1bmN0aW9uKCl7dmFyIHQ9ZGUodGhpcyksbj10LmNvbnRlbnRzKCkKK24ubGVuZ3RoP24ud3Jh
cEFsbChlKTp0LmFwcGVuZChlKX0pfSx3cmFwOmZ1bmN0aW9uKGUpe3ZhciB0PWRlLmlzRnVuY3Rp
b24oZSkKK3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24obil7ZGUodGhpcykud3JhcEFsbCh0P2Uu
Y2FsbCh0aGlzLG4pOmUpfSl9LHVud3JhcDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wYXJlbnQo
ZSkubm90KCJib2R5IikuZWFjaChmdW5jdGlvbigpe2RlKHRoaXMpLnJlcGxhY2VXaXRoKHRoaXMu
Y2hpbGROb2Rlcyl9KSx0aGlzfX0pLGRlLmV4cHIucHNldWRvcy5oaWRkZW49ZnVuY3Rpb24oZSl7
cmV0dXJuIWRlLmV4cHIucHNldWRvcy52aXNpYmxlKGUpfSxkZS5leHByLnBzZXVkb3MudmlzaWJs
ZT1mdW5jdGlvbihlKXtyZXR1cm4hIShlLm9mZnNldFdpZHRofHxlLm9mZnNldEhlaWdodHx8ZS5n
ZXRDbGllbnRSZWN0cygpLmxlbmd0aCl9LGRlLmFqYXhTZXR0aW5ncy54aHI9ZnVuY3Rpb24oKXt0
cnl7cmV0dXJuIG5ldyBlLlhNTEh0dHBSZXF1ZXN0fWNhdGNoKGUpe319Cit2YXIgQnQ9ezA6MjAw
LDEyMjM6MjA0fSxxdD1kZS5hamF4U2V0dGluZ3MueGhyKCkKK2hlLmNvcnM9ISFxdCYmIndpdGhD
cmVkZW50aWFscyJpbiBxdCxoZS5hamF4PXF0PSEhcXQsZGUuYWpheFRyYW5zcG9ydChmdW5jdGlv
bih0KXt2YXIgbixyCitpZihoZS5jb3JzfHxxdCYmIXQuY3Jvc3NEb21haW4pcmV0dXJue3NlbmQ6
ZnVuY3Rpb24oaSxvKXt2YXIgcyxhPXQueGhyKCkKK2lmKGEub3Blbih0LnR5cGUsdC51cmwsdC5h
c3luYyx0LnVzZXJuYW1lLHQucGFzc3dvcmQpLHQueGhyRmllbGRzKWZvcihzIGluIHQueGhyRmll
bGRzKWFbc109dC54aHJGaWVsZHNbc10KK3QubWltZVR5cGUmJmEub3ZlcnJpZGVNaW1lVHlwZSYm
YS5vdmVycmlkZU1pbWVUeXBlKHQubWltZVR5cGUpLHQuY3Jvc3NEb21haW58fGlbIlgtUmVxdWVz
dGVkLVdpdGgiXXx8KGlbIlgtUmVxdWVzdGVkLVdpdGgiXT0iWE1MSHR0cFJlcXVlc3QiKQorZm9y
KHMgaW4gaSlhLnNldFJlcXVlc3RIZWFkZXIocyxpW3NdKQorbj1mdW5jdGlvbihlKXtyZXR1cm4g
ZnVuY3Rpb24oKXtuJiYobj1yPWEub25sb2FkPWEub25lcnJvcj1hLm9uYWJvcnQ9YS5vbnJlYWR5
c3RhdGVjaGFuZ2U9bnVsbCwiYWJvcnQiPT09ZT9hLmFib3J0KCk6ImVycm9yIj09PWU/Im51bWJl
ciIhPXR5cGVvZiBhLnN0YXR1cz9vKDAsImVycm9yIik6byhhLnN0YXR1cyxhLnN0YXR1c1RleHQp
Om8oQnRbYS5zdGF0dXNdfHxhLnN0YXR1cyxhLnN0YXR1c1RleHQsInRleHQiIT09KGEucmVzcG9u
c2VUeXBlfHwidGV4dCIpfHwic3RyaW5nIiE9dHlwZW9mIGEucmVzcG9uc2VUZXh0P3tiaW5hcnk6
YS5yZXNwb25zZX06e3RleHQ6YS5yZXNwb25zZVRleHR9LGEuZ2V0QWxsUmVzcG9uc2VIZWFkZXJz
KCkpKX19LGEub25sb2FkPW4oKSxyPWEub25lcnJvcj1uKCJlcnJvciIpLHZvaWQgMCE9PWEub25h
Ym9ydD9hLm9uYWJvcnQ9cjphLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpezQ9PT1hLnJl
YWR5U3RhdGUmJmUuc2V0VGltZW91dChmdW5jdGlvbigpe24mJnIoKX0pfSxuPW4oImFib3J0IikK
K3RyeXthLnNlbmQodC5oYXNDb250ZW50JiZ0LmRhdGF8fG51bGwpfWNhdGNoKGUpe2lmKG4pdGhy
b3cgZX19LGFib3J0OmZ1bmN0aW9uKCl7biYmbigpfX19KSxkZS5hamF4UHJlZmlsdGVyKGZ1bmN0
aW9uKGUpe2UuY3Jvc3NEb21haW4mJihlLmNvbnRlbnRzLnNjcmlwdD0hMSl9KSxkZS5hamF4U2V0
dXAoe2FjY2VwdHM6e3NjcmlwdDoidGV4dC9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9qYXZhc2Ny
aXB0LCBhcHBsaWNhdGlvbi9lY21hc2NyaXB0LCBhcHBsaWNhdGlvbi94LWVjbWFzY3JpcHQifSxj
b250ZW50czp7c2NyaXB0Oi9cYig/OmphdmF8ZWNtYSlzY3JpcHRcYi99LGNvbnZlcnRlcnM6eyJ0
ZXh0IHNjcmlwdCI6ZnVuY3Rpb24oZSl7cmV0dXJuIGRlLmdsb2JhbEV2YWwoZSksZX19fSksZGUu
YWpheFByZWZpbHRlcigic2NyaXB0IixmdW5jdGlvbihlKXt2b2lkIDA9PT1lLmNhY2hlJiYoZS5j
YWNoZT0hMSksZS5jcm9zc0RvbWFpbiYmKGUudHlwZT0iR0VUIil9KSxkZS5hamF4VHJhbnNwb3J0
KCJzY3JpcHQiLGZ1bmN0aW9uKGUpe2lmKGUuY3Jvc3NEb21haW4pe3ZhciB0LG4KK3JldHVybntz
ZW5kOmZ1bmN0aW9uKHIsaSl7dD1kZSgiPHNjcmlwdD4iKS5wcm9wKHtjaGFyc2V0OmUuc2NyaXB0
Q2hhcnNldCxzcmM6ZS51cmx9KS5vbigibG9hZCBlcnJvciIsbj1mdW5jdGlvbihlKXt0LnJlbW92
ZSgpLG49bnVsbCxlJiZpKCJlcnJvciI9PT1lLnR5cGU/NDA0OjIwMCxlLnR5cGUpfSksbmUuaGVh
ZC5hcHBlbmRDaGlsZCh0WzBdKX0sYWJvcnQ6ZnVuY3Rpb24oKXtuJiZuKCl9fX19KQordmFyIEh0
PVtdLFZ0PS8oPSlcPyg/PSZ8JCl8XD9cPy8KK2RlLmFqYXhTZXR1cCh7anNvbnA6ImNhbGxiYWNr
Iixqc29ucENhbGxiYWNrOmZ1bmN0aW9uKCl7dmFyIGU9SHQucG9wKCl8fGRlLmV4cGFuZG8rIl8i
K0N0KysKK3JldHVybiB0aGlzW2VdPSEwLGV9fSksZGUuYWpheFByZWZpbHRlcigianNvbiBqc29u
cCIsZnVuY3Rpb24odCxuLHIpe3ZhciBpLG8scyxhPSExIT09dC5qc29ucCYmKFZ0LnRlc3QodC51
cmwpPyJ1cmwiOiJzdHJpbmciPT10eXBlb2YgdC5kYXRhJiYwPT09KHQuY29udGVudFR5cGV8fCIi
KS5pbmRleE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKSYmVnQudGVzdCh0
LmRhdGEpJiYiZGF0YSIpCitpZihhfHwianNvbnAiPT09dC5kYXRhVHlwZXNbMF0pcmV0dXJuIGk9
dC5qc29ucENhbGxiYWNrPWRlLmlzRnVuY3Rpb24odC5qc29ucENhbGxiYWNrKT90Lmpzb25wQ2Fs
bGJhY2soKTp0Lmpzb25wQ2FsbGJhY2ssYT90W2FdPXRbYV0ucmVwbGFjZShWdCwiJDEiK2kpOiEx
IT09dC5qc29ucCYmKHQudXJsKz0oT3QudGVzdCh0LnVybCk/IiYiOiI/IikrdC5qc29ucCsiPSIr
aSksdC5jb252ZXJ0ZXJzWyJzY3JpcHQganNvbiJdPWZ1bmN0aW9uKCl7cmV0dXJuIHN8fGRlLmVy
cm9yKGkrIiB3YXMgbm90IGNhbGxlZCIpLHNbMF19LHQuZGF0YVR5cGVzWzBdPSJqc29uIixvPWVb
aV0sZVtpXT1mdW5jdGlvbigpe3M9YXJndW1lbnRzfSxyLmFsd2F5cyhmdW5jdGlvbigpe3ZvaWQg
MD09PW8/ZGUoZSkucmVtb3ZlUHJvcChpKTplW2ldPW8sdFtpXSYmKHQuanNvbnBDYWxsYmFjaz1u
Lmpzb25wQ2FsbGJhY2ssSHQucHVzaChpKSkscyYmZGUuaXNGdW5jdGlvbihvKSYmbyhzWzBdKSxz
PW89dm9pZCAwfSksInNjcmlwdCJ9KSxoZS5jcmVhdGVIVE1MRG9jdW1lbnQ9ZnVuY3Rpb24oKXt2
YXIgZT1uZS5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoIiIpLmJvZHkKK3JldHVy
biBlLmlubmVySFRNTD0iPGZvcm0+PC9mb3JtPjxmb3JtPjwvZm9ybT4iLDI9PT1lLmNoaWxkTm9k
ZXMubGVuZ3RofSgpLGRlLnBhcnNlSFRNTD1mdW5jdGlvbihlLHQsbil7aWYoInN0cmluZyIhPXR5
cGVvZiBlKXJldHVybltdCisiYm9vbGVhbiI9PXR5cGVvZiB0JiYobj10LHQ9ITEpCit2YXIgcixp
LG8KK3JldHVybiB0fHwoaGUuY3JlYXRlSFRNTERvY3VtZW50Pyh0PW5lLmltcGxlbWVudGF0aW9u
LmNyZWF0ZUhUTUxEb2N1bWVudCgiIikscj10LmNyZWF0ZUVsZW1lbnQoImJhc2UiKSxyLmhyZWY9
bmUubG9jYXRpb24uaHJlZix0LmhlYWQuYXBwZW5kQ2hpbGQocikpOnQ9bmUpLGk9eGUuZXhlYyhl
KSxvPSFuJiZbXSxpP1t0LmNyZWF0ZUVsZW1lbnQoaVsxXSldOihpPV8oW2VdLHQsbyksbyYmby5s
ZW5ndGgmJmRlKG8pLnJlbW92ZSgpLGRlLm1lcmdlKFtdLGkuY2hpbGROb2RlcykpfSxkZS5mbi5s
b2FkPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8scz10aGlzLGE9ZS5pbmRleE9mKCIgIikKK3Jl
dHVybiBhPi0xJiYocj1HKGUuc2xpY2UoYSkpLGU9ZS5zbGljZSgwLGEpKSxkZS5pc0Z1bmN0aW9u
KHQpPyhuPXQsdD12b2lkIDApOnQmJiJvYmplY3QiPT10eXBlb2YgdCYmKGk9IlBPU1QiKSxzLmxl
bmd0aD4wJiZkZS5hamF4KHt1cmw6ZSx0eXBlOml8fCJHRVQiLGRhdGFUeXBlOiJodG1sIixkYXRh
OnR9KS5kb25lKGZ1bmN0aW9uKGUpe289YXJndW1lbnRzLHMuaHRtbChyP2RlKCI8ZGl2PiIpLmFw
cGVuZChkZS5wYXJzZUhUTUwoZSkpLmZpbmQocik6ZSl9KS5hbHdheXMobiYmZnVuY3Rpb24oZSx0
KXtzLmVhY2goZnVuY3Rpb24oKXtuLmFwcGx5KHRoaXMsb3x8W2UucmVzcG9uc2VUZXh0LHQsZV0p
fSl9KSx0aGlzfSxkZS5lYWNoKFsiYWpheFN0YXJ0IiwiYWpheFN0b3AiLCJhamF4Q29tcGxldGUi
LCJhamF4RXJyb3IiLCJhamF4U3VjY2VzcyIsImFqYXhTZW5kIl0sZnVuY3Rpb24oZSx0KXtkZS5m
blt0XT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vbih0LGUpfX0pLGRlLmV4cHIucHNldWRvcy5h
bmltYXRlZD1mdW5jdGlvbihlKXtyZXR1cm4gZGUuZ3JlcChkZS50aW1lcnMsZnVuY3Rpb24odCl7
cmV0dXJuIGU9PT10LmVsZW19KS5sZW5ndGh9LGRlLm9mZnNldD17c2V0T2Zmc2V0OmZ1bmN0aW9u
KGUsdCxuKXt2YXIgcixpLG8scyxhLHUsbCxjPWRlLmNzcyhlLCJwb3NpdGlvbiIpLHA9ZGUoZSks
Zj17fQorInN0YXRpYyI9PT1jJiYoZS5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiKSxhPXAub2Zm
c2V0KCksbz1kZS5jc3MoZSwidG9wIiksdT1kZS5jc3MoZSwibGVmdCIpLGw9KCJhYnNvbHV0ZSI9
PT1jfHwiZml4ZWQiPT09YykmJihvK3UpLmluZGV4T2YoImF1dG8iKT4tMSxsPyhyPXAucG9zaXRp
b24oKSxzPXIudG9wLGk9ci5sZWZ0KToocz1wYXJzZUZsb2F0KG8pfHwwLGk9cGFyc2VGbG9hdCh1
KXx8MCksZGUuaXNGdW5jdGlvbih0KSYmKHQ9dC5jYWxsKGUsbixkZS5leHRlbmQoe30sYSkpKSxu
dWxsIT10LnRvcCYmKGYudG9wPXQudG9wLWEudG9wK3MpLG51bGwhPXQubGVmdCYmKGYubGVmdD10
LmxlZnQtYS5sZWZ0K2kpLCJ1c2luZyJpbiB0P3QudXNpbmcuY2FsbChlLGYpOnAuY3NzKGYpfX0s
ZGUuZm4uZXh0ZW5kKHtvZmZzZXQ6ZnVuY3Rpb24oZSl7aWYoYXJndW1lbnRzLmxlbmd0aClyZXR1
cm4gdm9pZCAwPT09ZT90aGlzOnRoaXMuZWFjaChmdW5jdGlvbih0KXtkZS5vZmZzZXQuc2V0T2Zm
c2V0KHRoaXMsZSx0KX0pCit2YXIgdCxuLHIsaSxvPXRoaXNbMF0KK2lmKG8pcmV0dXJuIG8uZ2V0
Q2xpZW50UmVjdHMoKS5sZW5ndGg/KHI9by5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0PW8ub3du
ZXJEb2N1bWVudCxuPXQuZG9jdW1lbnRFbGVtZW50LGk9dC5kZWZhdWx0Vmlldyx7dG9wOnIudG9w
K2kucGFnZVlPZmZzZXQtbi5jbGllbnRUb3AsbGVmdDpyLmxlZnQraS5wYWdlWE9mZnNldC1uLmNs
aWVudExlZnR9KTp7dG9wOjAsbGVmdDowfX0scG9zaXRpb246ZnVuY3Rpb24oKXtpZih0aGlzWzBd
KXt2YXIgZSx0LG49dGhpc1swXSxyPXt0b3A6MCxsZWZ0OjB9CityZXR1cm4iZml4ZWQiPT09ZGUu
Y3NzKG4sInBvc2l0aW9uIik/dD1uLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOihlPXRoaXMub2Zm
c2V0UGFyZW50KCksdD10aGlzLm9mZnNldCgpLGkoZVswXSwiaHRtbCIpfHwocj1lLm9mZnNldCgp
KSxyPXt0b3A6ci50b3ArZGUuY3NzKGVbMF0sImJvcmRlclRvcFdpZHRoIiwhMCksbGVmdDpyLmxl
ZnQrZGUuY3NzKGVbMF0sImJvcmRlckxlZnRXaWR0aCIsITApfSkse3RvcDp0LnRvcC1yLnRvcC1k
ZS5jc3MobiwibWFyZ2luVG9wIiwhMCksbGVmdDp0LmxlZnQtci5sZWZ0LWRlLmNzcyhuLCJtYXJn
aW5MZWZ0IiwhMCl9fX0sb2Zmc2V0UGFyZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwKGZ1
bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMub2Zmc2V0UGFyZW50O2UmJiJzdGF0aWMiPT09ZGUuY3Nz
KGUsInBvc2l0aW9uIik7KWU9ZS5vZmZzZXRQYXJlbnQKK3JldHVybiBlfHxRZX0pfX0pLGRlLmVh
Y2goe3Njcm9sbExlZnQ6InBhZ2VYT2Zmc2V0IixzY3JvbGxUb3A6InBhZ2VZT2Zmc2V0In0sZnVu
Y3Rpb24oZSx0KXt2YXIgbj0icGFnZVlPZmZzZXQiPT09dAorZGUuZm5bZV09ZnVuY3Rpb24ocil7
cmV0dXJuIFBlKHRoaXMsZnVuY3Rpb24oZSxyLGkpe3ZhciBvCitpZihkZS5pc1dpbmRvdyhlKT9v
PWU6OT09PWUubm9kZVR5cGUmJihvPWUuZGVmYXVsdFZpZXcpLHZvaWQgMD09PWkpcmV0dXJuIG8/
b1t0XTplW3JdCitvP28uc2Nyb2xsVG8obj9vLnBhZ2VYT2Zmc2V0Omksbj9pOm8ucGFnZVlPZmZz
ZXQpOmVbcl09aX0sZSxyLGFyZ3VtZW50cy5sZW5ndGgpfX0pLGRlLmVhY2goWyJ0b3AiLCJsZWZ0
Il0sZnVuY3Rpb24oZSx0KXtkZS5jc3NIb29rc1t0XT1qKGhlLnBpeGVsUG9zaXRpb24sZnVuY3Rp
b24oZSxuKXtpZihuKXJldHVybiBuPVAoZSx0KSxvdC50ZXN0KG4pP2RlKGUpLnBvc2l0aW9uKClb
dF0rInB4IjpufSl9KSxkZS5lYWNoKHtIZWlnaHQ6ImhlaWdodCIsV2lkdGg6IndpZHRoIn0sZnVu
Y3Rpb24oZSx0KXtkZS5lYWNoKHtwYWRkaW5nOiJpbm5lciIrZSxjb250ZW50OnQsIiI6Im91dGVy
IitlfSxmdW5jdGlvbihuLHIpe2RlLmZuW3JdPWZ1bmN0aW9uKGksbyl7dmFyIHM9YXJndW1lbnRz
Lmxlbmd0aCYmKG58fCJib29sZWFuIiE9dHlwZW9mIGkpLGE9bnx8KCEwPT09aXx8ITA9PT1vPyJt
YXJnaW4iOiJib3JkZXIiKQorcmV0dXJuIFBlKHRoaXMsZnVuY3Rpb24odCxuLGkpe3ZhciBvCity
ZXR1cm4gZGUuaXNXaW5kb3codCk/MD09PXIuaW5kZXhPZigib3V0ZXIiKT90WyJpbm5lciIrZV06
dC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbImNsaWVudCIrZV06OT09PXQubm9kZVR5cGU/KG89
dC5kb2N1bWVudEVsZW1lbnQsTWF0aC5tYXgodC5ib2R5WyJzY3JvbGwiK2VdLG9bInNjcm9sbCIr
ZV0sdC5ib2R5WyJvZmZzZXQiK2VdLG9bIm9mZnNldCIrZV0sb1siY2xpZW50IitlXSkpOnZvaWQg
MD09PWk/ZGUuY3NzKHQsbixhKTpkZS5zdHlsZSh0LG4saSxhKX0sdCxzP2k6dm9pZCAwLHMpfX0p
fSksZGUuZm4uZXh0ZW5kKHtiaW5kOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdGhpcy5vbihlLG51
bGwsdCxuKX0sdW5iaW5kOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMub2ZmKGUsbnVsbCx0KX0s
ZGVsZWdhdGU6ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHRoaXMub24odCxlLG4scil9LHVuZGVs
ZWdhdGU6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD90aGlzLm9m
ZihlLCIqKiIpOnRoaXMub2ZmKHQsZXx8IioqIixuKX19KSxkZS5ob2xkUmVhZHk9ZnVuY3Rpb24o
ZSl7ZT9kZS5yZWFkeVdhaXQrKzpkZS5yZWFkeSghMCl9LGRlLmlzQXJyYXk9QXJyYXkuaXNBcnJh
eSxkZS5wYXJzZUpTT049SlNPTi5wYXJzZSxkZS5ub2RlTmFtZT1pLCJmdW5jdGlvbiI9PXR5cGVv
ZiBkZWZpbmUmJmRlZmluZS5hbWQmJmRlZmluZSgianF1ZXJ5IixbXSxmdW5jdGlvbigpe3JldHVy
biBkZX0pCit2YXIgV3Q9ZS5qUXVlcnksJHQ9ZS4kCityZXR1cm4gZGUubm9Db25mbGljdD1mdW5j
dGlvbih0KXtyZXR1cm4gZS4kPT09ZGUmJihlLiQ9JHQpLHQmJmUualF1ZXJ5PT09ZGUmJihlLmpR
dWVyeT1XdCksZGV9LHR8fChlLmpRdWVyeT1lLiQ9ZGUpLGRlfSksZnVuY3Rpb24oKXt2YXIgZSx0
LG4scj10aGlzOyhmdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSx0KXt0aHJvdyB0P25ldyBFcnJvcigi
Q291bGQgbm90IGZpbmQgbW9kdWxlICIrZSsiIHJlcXVpcmVkIGJ5OiAiK3QpOm5ldyBFcnJvcigi
Q291bGQgbm90IGZpbmQgbW9kdWxlICIrZSl9ZnVuY3Rpb24gaShlLG4pe3ZhciBhPWUsdT1vW2Fd
Cit1fHwoYSs9Ii9pbmRleCIsdT1vW2FdKQordmFyIGw9c1thXQoraWYodm9pZCAwIT09bClyZXR1
cm4gbAorbD1zW2FdPXt9LHV8fHIoZSxuKQorZm9yKHZhciBjPXUuZGVwcyxwPXUuY2FsbGJhY2ss
Zj1uZXcgQXJyYXkoYy5sZW5ndGgpLGg9MDtoPGMubGVuZ3RoO2grKykiZXhwb3J0cyI9PT1jW2hd
P2ZbaF09bDoicmVxdWlyZSI9PT1jW2hdP2ZbaF09dDpmW2hdPWkoY1toXSxhKQorcmV0dXJuIHAu
YXBwbHkodGhpcyxmKSxsfWlmKCJ1bmRlZmluZWQiPT10eXBlb2Ygd2luZG93JiYidW5kZWZpbmVk
IiE9dHlwZW9mIHByb2Nlc3MmJiJbb2JqZWN0IHByb2Nlc3NdIj09PXt9LnRvU3RyaW5nLmNhbGwo
cHJvY2Vzcyl8fChuPXRoaXMuRW1iZXI9dGhpcy5FbWJlcnx8e30pLHZvaWQgMD09PW4mJihuPXt9
KSx2b2lkIDA9PT1uLl9fbG9hZGVyKXt2YXIgbz17fSxzPXt9CitlPWZ1bmN0aW9uKGUsdCxuKXt2
YXIgcj17fQorbj8oci5kZXBzPXQsci5jYWxsYmFjaz1uKTooci5kZXBzPVtdLHIuY2FsbGJhY2s9
dCksb1tlXT1yfSx0PWZ1bmN0aW9uKGUpe3JldHVybiBpKGUsbnVsbCl9LHQuZGVmYXVsdD10LHQu
aGFzPWZ1bmN0aW9uKGUpe3JldHVybiEhb1tlXXx8ISFvW2UrIi9pbmRleCJdfSx0Ll9lYWtfc2Vl
bj1vLG4uX19sb2FkZXI9e2RlZmluZTplLHJlcXVpcmU6dCxyZWdpc3RyeTpvfX1lbHNlIGU9bi5f
X2xvYWRlci5kZWZpbmUsdD1uLl9fbG9hZGVyLnJlcXVpcmV9KSgpLGUoIkBnbGltbWVyL25vZGUi
LFsiZXhwb3J0cyIsImVtYmVyLWJhYmVsIiwiQGdsaW1tZXIvcnVudGltZSJdLGZ1bmN0aW9uKGUs
dCxuKXsidXNlIHN0cmljdCIKK2UuTm9kZURPTVRyZWVDb25zdHJ1Y3Rpb249dm9pZCAwCit2YXIg
cj1mdW5jdGlvbihlKXtmdW5jdGlvbiByKG4pe3JldHVybigwLHQucG9zc2libGVDb25zdHJ1Y3Rv
clJldHVybikodGhpcyxlLmNhbGwodGhpcyxuKSl9cmV0dXJuKDAsdC5pbmhlcml0cykocixlKSxy
LnByb3RvdHlwZS5zZXR1cFVzZWxlc3NFbGVtZW50PWZ1bmN0aW9uKCl7fSxyLnByb3RvdHlwZS5p
bnNlcnRIVE1MQmVmb3JlPWZ1bmN0aW9uKGUsdCxyKXt2YXIgaT1yP3IucHJldmlvdXNTaWJsaW5n
OmUubGFzdENoaWxkLG89dGhpcy5kb2N1bWVudC5jcmVhdGVSYXdIVE1MU2VjdGlvbih0KQorZS5p
bnNlcnRCZWZvcmUobyxyKQordmFyIHM9aT9pLm5leHRTaWJsaW5nOmUuZmlyc3RDaGlsZCxhPXI/
ci5wcmV2aW91c1NpYmxpbmc6ZS5sYXN0Q2hpbGQKK3JldHVybiBuZXcgbi5Db25jcmV0ZUJvdW5k
cyhlLHMsYSl9LHIucHJvdG90eXBlLmNyZWF0ZUVsZW1lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRo
aXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudChlKX0sci5wcm90b3R5cGUuc2V0QXR0cmlidXRlPWZ1
bmN0aW9uKGUsdCxuKXtlLnNldEF0dHJpYnV0ZSh0LG4pfSxyfShuLkRPTVRyZWVDb25zdHJ1Y3Rp
b24pCitlLk5vZGVET01UcmVlQ29uc3RydWN0aW9uPXJ9KSxlKCJAZ2xpbW1lci9yZWZlcmVuY2Ui
LFsiZXhwb3J0cyIsImVtYmVyLWJhYmVsIiwiQGdsaW1tZXIvdXRpbCJdLGZ1bmN0aW9uKGUsdCxu
KXsidXNlIHN0cmljdCIKK2Z1bmN0aW9uIHIoZSl7c3dpdGNoKGUubGVuZ3RoKXtjYXNlIDA6cmV0
dXJuIGgKK2Nhc2UgMTpyZXR1cm4gZVswXQorY2FzZSAyOnJldHVybiBuZXcgYyhlWzBdLGVbMV0p
CitkZWZhdWx0OnJldHVybiBuZXcgcChlKX19ZS5pc01vZGlmaWVkPWUuUmVmZXJlbmNlQ2FjaGU9
ZS5tYXA9ZS5DYWNoZWRSZWZlcmVuY2U9ZS5DVVJSRU5UX1RBRz1lLlZPTEFUSUxFX1RBRz1lLkNP
TlNUQU5UX1RBRz1lLlVwZGF0YWJsZVRhZz1lLkNhY2hlZFRhZz1lLmNvbWJpbmU9ZS5jb21iaW5l
U2xpY2U9ZS5jb21iaW5lVGFnZ2VkPWUuRGlydHlhYmxlVGFnPWUuUmV2aXNpb25UYWc9ZS5WT0xB
VElMRT1lLklOSVRJQUw9ZS5DT05TVEFOVD1lLkl0ZXJhdG9yU3luY2hyb25pemVyPWUuUmVmZXJl
bmNlSXRlcmF0b3I9ZS5JdGVyYXRpb25BcnRpZmFjdHM9ZS5yZWZlcmVuY2VGcm9tUGFydHM9ZS5M
aXN0SXRlbT1lLmlzQ29uc3Q9ZS5Db25zdFJlZmVyZW5jZT12b2lkIDAKK3ZhciBpLG89MSxzPWZ1
bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe31yZXR1cm4gZS5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rp
b24oZSl7cmV0dXJuIHRoaXMudmFsdWUoKT09PWV9LGV9KCksYT1vLHU9ZnVuY3Rpb24oZSl7ZnVu
Y3Rpb24gbigpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBd
P2FyZ3VtZW50c1swXTphLHI9KDAsdC5wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKSh0aGlzLGUu
Y2FsbCh0aGlzKSkKK3JldHVybiByLnJldmlzaW9uPW4scn1yZXR1cm4oMCx0LmluaGVyaXRzKShu
LGUpLG4ucHJvdG90eXBlLnZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmV2aXNpb259LG4u
cHJvdG90eXBlLmRpcnR5PWZ1bmN0aW9uKCl7dGhpcy5yZXZpc2lvbj0rK2F9LG59KHMpLGw9ZnVu
Y3Rpb24oZSl7ZnVuY3Rpb24gbigpe3ZhciBuPSgwLHQucG9zc2libGVDb25zdHJ1Y3RvclJldHVy
bikodGhpcyxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkKK3JldHVybiBuLmxhc3RDaGVja2VkPW51
bGwsbi5sYXN0VmFsdWU9bnVsbCxufXJldHVybigwLHQuaW5oZXJpdHMpKG4sZSksbi5wcm90b3R5
cGUudmFsdWU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmxhc3RDaGVja2VkCit0aGlzLmxhc3RWYWx1
ZQorcmV0dXJuIGUhPT1hJiYodGhpcy5sYXN0Q2hlY2tlZD1hLHRoaXMubGFzdFZhbHVlPXRoaXMu
Y29tcHV0ZSgpKSx0aGlzLmxhc3RWYWx1ZX0sbi5wcm90b3R5cGUuaW52YWxpZGF0ZT1mdW5jdGlv
bigpe3RoaXMubGFzdENoZWNrZWQ9bnVsbH0sbn0ocyksYz1mdW5jdGlvbihlKXtmdW5jdGlvbiBu
KG4scil7dmFyIGk9KDAsdC5wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKSh0aGlzLGUuY2FsbCh0
aGlzKSkKK3JldHVybiBpLmZpcnN0PW4saS5zZWNvbmQ9cixpfXJldHVybigwLHQuaW5oZXJpdHMp
KG4sZSksbi5wcm90b3R5cGUuY29tcHV0ZT1mdW5jdGlvbigpe3JldHVybiBNYXRoLm1heCh0aGlz
LmZpcnN0LnZhbHVlKCksdGhpcy5zZWNvbmQudmFsdWUoKSl9LG59KGwpLHA9ZnVuY3Rpb24oZSl7
ZnVuY3Rpb24gbihuKXt2YXIgcj0oMCx0LnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4pKHRoaXMs
ZS5jYWxsKHRoaXMpKQorcmV0dXJuIHIudGFncz1uLHJ9cmV0dXJuKDAsdC5pbmhlcml0cykobixl
KSxuLnByb3RvdHlwZS5jb21wdXRlPWZ1bmN0aW9uKCl7dmFyIGUsdCxuPXRoaXMudGFncyxyPS0x
Citmb3IoZT0wO2U8bi5sZW5ndGg7ZSsrKXQ9bltlXS52YWx1ZSgpLHI9TWF0aC5tYXgodCxyKQor
cmV0dXJuIHJ9LG59KGwpLGY9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbihuKXt2YXIgcj0oMCx0LnBv
c3NpYmxlQ29uc3RydWN0b3JSZXR1cm4pKHRoaXMsZS5jYWxsKHRoaXMpKQorcmV0dXJuIHIudGFn
PW4sci5sYXN0VXBkYXRlZD1vLHJ9cmV0dXJuKDAsdC5pbmhlcml0cykobixlKSxuLnByb3RvdHlw
ZS5jb21wdXRlPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgubWF4KHRoaXMubGFzdFVwZGF0ZWQsdGhp
cy50YWcudmFsdWUoKSl9LG4ucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihlKXtlIT09dGhpcy50
YWcmJih0aGlzLnRhZz1lLHRoaXMubGFzdFVwZGF0ZWQ9YSx0aGlzLmludmFsaWRhdGUoKSl9LG59
KGwpLGg9bmV3KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4oKXtyZXR1cm4oMCx0LnBvc3NpYmxlQ29u
c3RydWN0b3JSZXR1cm4pKHRoaXMsZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXJldHVybigwLHQu
aW5oZXJpdHMpKG4sZSksbi5wcm90b3R5cGUudmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gMH0sbn0o
cykpLGQ9bmV3KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4oKXtyZXR1cm4oMCx0LnBvc3NpYmxlQ29u
c3RydWN0b3JSZXR1cm4pKHRoaXMsZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXJldHVybigwLHQu
aW5oZXJpdHMpKG4sZSksbi5wcm90b3R5cGUudmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gTmFOfSxu
fShzKSksbT1uZXcoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbigpe3JldHVybigwLHQucG9zc2libGVD
b25zdHJ1Y3RvclJldHVybikodGhpcyxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9cmV0dXJuKDAs
dC5pbmhlcml0cykobixlKSxuLnByb3RvdHlwZS52YWx1ZT1mdW5jdGlvbigpe3JldHVybiBhfSxu
fSh1KSksZz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLmxhc3RSZXZpc2lvbj1udWxsLHRo
aXMubGFzdFZhbHVlPW51bGx9cmV0dXJuIGUucHJvdG90eXBlLnZhbHVlPWZ1bmN0aW9uKCl7dmFy
IGU9dGhpcy50YWcsdD10aGlzLmxhc3RSZXZpc2lvbixuPXRoaXMubGFzdFZhbHVlCityZXR1cm4g
dCYmZS52YWxpZGF0ZSh0KXx8KG49dGhpcy5sYXN0VmFsdWU9dGhpcy5jb21wdXRlKCksdGhpcy5s
YXN0UmV2aXNpb249ZS52YWx1ZSgpKSxufSxlLnByb3RvdHlwZS5pbnZhbGlkYXRlPWZ1bmN0aW9u
KCl7dGhpcy5sYXN0UmV2aXNpb249bnVsbH0sZX0oKSx5PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4o
bixyKXt2YXIgaT0oMCx0LnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4pKHRoaXMsZS5jYWxsKHRo
aXMpKQorcmV0dXJuIGkudGFnPW4udGFnLGkucmVmZXJlbmNlPW4saS5tYXBwZXI9cixpfXJldHVy
bigwLHQuaW5oZXJpdHMpKG4sZSksbi5wcm90b3R5cGUuY29tcHV0ZT1mdW5jdGlvbigpe3ZhciBl
PXRoaXMucmVmZXJlbmNlCityZXR1cm4oMCx0aGlzLm1hcHBlcikoZS52YWx1ZSgpKX0sbn0oZyks
dj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5sYXN0VmFsdWU9bnVsbCx0aGlzLmxhc3RS
ZXZpc2lvbj1udWxsLHRoaXMuaW5pdGlhbGl6ZWQ9ITEsdGhpcy50YWc9ZS50YWcsdGhpcy5yZWZl
cmVuY2U9ZX1yZXR1cm4gZS5wcm90b3R5cGUucGVlaz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlu
aXRpYWxpemVkP3RoaXMubGFzdFZhbHVlOnRoaXMuaW5pdGlhbGl6ZSgpfSxlLnByb3RvdHlwZS5y
ZXZhbGlkYXRlPWZ1bmN0aW9uKCl7aWYoIXRoaXMuaW5pdGlhbGl6ZWQpcmV0dXJuIHRoaXMuaW5p
dGlhbGl6ZSgpCit2YXIgZT10aGlzLnJlZmVyZW5jZSx0PXRoaXMubGFzdFJldmlzaW9uLG49ZS50
YWcKK2lmKG4udmFsaWRhdGUodCkpcmV0dXJuIGIKK3RoaXMubGFzdFJldmlzaW9uPW4udmFsdWUo
KQordmFyIHI9dGhpcy5sYXN0VmFsdWUsaT1lLnZhbHVlKCkKK3JldHVybiBpPT09cj9iOih0aGlz
Lmxhc3RWYWx1ZT1pLGkpfSxlLnByb3RvdHlwZS5pbml0aWFsaXplPWZ1bmN0aW9uKCl7dmFyIGU9
dGhpcy5yZWZlcmVuY2UsdD10aGlzLmxhc3RWYWx1ZT1lLnZhbHVlKCkKK3JldHVybiB0aGlzLmxh
c3RSZXZpc2lvbj1lLnRhZy52YWx1ZSgpLHRoaXMuaW5pdGlhbGl6ZWQ9ITAsdH0sZX0oKSxiPSJh
ZGIzYjc4ZS0zZDIyLTRlNGItODc3YS02MzE3YzJjNWMxNDUiLF89ZnVuY3Rpb24oKXtmdW5jdGlv
biBlKGUpe3RoaXMuaW5uZXI9ZSx0aGlzLnRhZz1ofXJldHVybiBlLnByb3RvdHlwZS52YWx1ZT1m
dW5jdGlvbigpe3JldHVybiB0aGlzLmlubmVyfSxlfSgpLHc9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24g
bihuLHIpe3ZhciBpPSgwLHQucG9zc2libGVDb25zdHJ1Y3RvclJldHVybikodGhpcyxlLmNhbGwo
dGhpcyxuLnZhbHVlUmVmZXJlbmNlRm9yKHIpKSkKK3JldHVybiBpLnJldGFpbmVkPSExLGkuc2Vl
bj0hMSxpLmtleT1yLmtleSxpLml0ZXJhYmxlPW4saS5tZW1vPW4ubWVtb1JlZmVyZW5jZUZvcihy
KSxpfXJldHVybigwLHQuaW5oZXJpdHMpKG4sZSksbi5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9u
KGUpe3RoaXMucmV0YWluZWQ9ITAsdGhpcy5pdGVyYWJsZS51cGRhdGVWYWx1ZVJlZmVyZW5jZSh0
aGlzLnZhbHVlLGUpLHRoaXMuaXRlcmFibGUudXBkYXRlTWVtb1JlZmVyZW5jZSh0aGlzLm1lbW8s
ZSl9LG4ucHJvdG90eXBlLnNob3VsZFJlbW92ZT1mdW5jdGlvbigpe3JldHVybiF0aGlzLnJldGFp
bmVkfSxuLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMucmV0YWluZWQ9ITEsdGhpcy5z
ZWVuPSExfSxufShuLkxpc3ROb2RlKSxFPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLm1h
cD0oMCxuLmRpY3QpKCksdGhpcy5saXN0PW5ldyBuLkxpbmtlZExpc3QsdGhpcy50YWc9ZS50YWcs
dGhpcy5pdGVyYWJsZT1lfXJldHVybiBlLnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0
dXJuKHRoaXMuaXRlcmF0b3I9dGhpcy5pdGVyYWJsZS5pdGVyYXRlKCkpLmlzRW1wdHkoKX0sZS5w
cm90b3R5cGUuaXRlcmF0ZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuaXRlcmF0b3J8fHRoaXMuaXRl
cmFibGUuaXRlcmF0ZSgpCityZXR1cm4gdGhpcy5pdGVyYXRvcj1udWxsLGV9LGUucHJvdG90eXBl
Lmhhcz1mdW5jdGlvbihlKXtyZXR1cm4hIXRoaXMubWFwW2VdfSxlLnByb3RvdHlwZS5nZXQ9ZnVu
Y3Rpb24oZSl7cmV0dXJuIHRoaXMubWFwW2VdfSxlLnByb3RvdHlwZS53YXNTZWVuPWZ1bmN0aW9u
KGUpe3ZhciB0PXRoaXMubWFwW2VdCityZXR1cm4gdCYmdC5zZWVufSxlLnByb3RvdHlwZS5hcHBl
bmQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5tYXAsbj10aGlzLmxpc3Qscj10aGlzLml0ZXJhYmxl
LGk9dFtlLmtleV09bmV3IHcocixlKQorcmV0dXJuIG4uYXBwZW5kKGkpLGl9LGUucHJvdG90eXBl
Lmluc2VydEJlZm9yZT1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMubWFwLHI9dGhpcy5saXN0LGk9
dGhpcy5pdGVyYWJsZSxvPW5bZS5rZXldPW5ldyB3KGksZSkKK3JldHVybiBvLnJldGFpbmVkPSEw
LHIuaW5zZXJ0QmVmb3JlKG8sdCksb30sZS5wcm90b3R5cGUubW92ZT1mdW5jdGlvbihlLHQpe3Zh
ciBuPXRoaXMubGlzdAorZS5yZXRhaW5lZD0hMCxuLnJlbW92ZShlKSxuLmluc2VydEJlZm9yZShl
LHQpfSxlLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oZSl7dGhpcy5saXN0LnJlbW92ZShlKSxk
ZWxldGUgdGhpcy5tYXBbZS5rZXldfSxlLnByb3RvdHlwZS5uZXh0Tm9kZT1mdW5jdGlvbihlKXty
ZXR1cm4gdGhpcy5saXN0Lm5leHROb2RlKGUpfSxlLnByb3RvdHlwZS5oZWFkPWZ1bmN0aW9uKCl7
cmV0dXJuIHRoaXMubGlzdC5oZWFkKCl9LGV9KCkseD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7
dGhpcy5pdGVyYXRvcj1udWxsCit2YXIgdD1uZXcgRShlKQordGhpcy5hcnRpZmFjdHM9dH1yZXR1
cm4gZS5wcm90b3R5cGUubmV4dD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuYXJ0aWZhY3RzLHQ9dGhp
cy5pdGVyYXRvcj10aGlzLml0ZXJhdG9yfHxlLml0ZXJhdGUoKSxuPXQubmV4dCgpCityZXR1cm4g
bj9lLmFwcGVuZChuKTpudWxsfSxlfSgpOyhmdW5jdGlvbihlKXtlW2UuQXBwZW5kPTBdPSJBcHBl
bmQiLGVbZS5QcnVuZT0xXT0iUHJ1bmUiLGVbZS5Eb25lPTJdPSJEb25lIn0pKGl8fChpPXt9KSkK
K3ZhciBDPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt2YXIgdD1lLnRhcmdldCxuPWUuYXJ0aWZh
Y3RzCit0aGlzLnRhcmdldD10LHRoaXMuYXJ0aWZhY3RzPW4sdGhpcy5pdGVyYXRvcj1uLml0ZXJh
dGUoKSx0aGlzLmN1cnJlbnQ9bi5oZWFkKCl9cmV0dXJuIGUucHJvdG90eXBlLnN5bmM9ZnVuY3Rp
b24oKXtmb3IodmFyIGU9aS5BcHBlbmQ7Oylzd2l0Y2goZSl7Y2FzZSBpLkFwcGVuZDplPXRoaXMu
bmV4dEFwcGVuZCgpCiticmVhaworY2FzZSBpLlBydW5lOmU9dGhpcy5uZXh0UHJ1bmUoKQorYnJl
YWsKK2Nhc2UgaS5Eb25lOnJldHVybiB2b2lkIHRoaXMubmV4dERvbmUoKX19LGUucHJvdG90eXBl
LmFkdmFuY2VUb0tleT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy5jdXJyZW50LG49dGhpcy5h
cnRpZmFjdHMscj10O3ImJnIua2V5IT09ZTspci5zZWVuPSEwLHI9bi5uZXh0Tm9kZShyKQordGhp
cy5jdXJyZW50PXImJm4ubmV4dE5vZGUocil9LGUucHJvdG90eXBlLm5leHRBcHBlbmQ9ZnVuY3Rp
b24oKXt2YXIgZT10aGlzLml0ZXJhdG9yLHQ9dGhpcy5jdXJyZW50LG49dGhpcy5hcnRpZmFjdHMs
cj1lLm5leHQoKQoraWYobnVsbD09PXIpcmV0dXJuIHRoaXMuc3RhcnRQcnVuZSgpCit2YXIgbz1y
LmtleQorcmV0dXJuIHQmJnQua2V5PT09bz90aGlzLm5leHRSZXRhaW4ocik6bi5oYXMobyk/dGhp
cy5uZXh0TW92ZShyKTp0aGlzLm5leHRJbnNlcnQociksaS5BcHBlbmR9LGUucHJvdG90eXBlLm5l
eHRSZXRhaW49ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5hcnRpZmFjdHMscj10aGlzLmN1cnJlbnQK
K3I9KDAsbi5leHBlY3QpKHIsIkJVRzogY3VycmVudCBpcyBlbXB0eSIpLHIudXBkYXRlKGUpLHRo
aXMuY3VycmVudD10Lm5leHROb2RlKHIpLHRoaXMudGFyZ2V0LnJldGFpbihlLmtleSxyLnZhbHVl
LHIubWVtbyl9LGUucHJvdG90eXBlLm5leHRNb3ZlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuY3Vy
cmVudCxuPXRoaXMuYXJ0aWZhY3RzLHI9dGhpcy50YXJnZXQsaT1lLmtleSxvPW4uZ2V0KGUua2V5
KQorby51cGRhdGUoZSksbi53YXNTZWVuKGUua2V5KT8obi5tb3ZlKG8sdCksci5tb3ZlKG8ua2V5
LG8udmFsdWUsby5tZW1vLHQ/dC5rZXk6bnVsbCkpOnRoaXMuYWR2YW5jZVRvS2V5KGkpfSxlLnBy
b3RvdHlwZS5uZXh0SW5zZXJ0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuYXJ0aWZhY3RzLG49dGhp
cy50YXJnZXQscj10aGlzLmN1cnJlbnQsaT10Lmluc2VydEJlZm9yZShlLHIpCituLmluc2VydChp
LmtleSxpLnZhbHVlLGkubWVtbyxyP3Iua2V5Om51bGwpfSxlLnByb3RvdHlwZS5zdGFydFBydW5l
PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudD10aGlzLmFydGlmYWN0cy5oZWFkKCksaS5Q
cnVuZX0sZS5wcm90b3R5cGUubmV4dFBydW5lPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5hcnRpZmFj
dHMsdD10aGlzLnRhcmdldCxuPXRoaXMuY3VycmVudAoraWYobnVsbD09PW4pcmV0dXJuIGkuRG9u
ZQordmFyIHI9bgorcmV0dXJuIHRoaXMuY3VycmVudD1lLm5leHROb2RlKHIpLHIuc2hvdWxkUmVt
b3ZlKCk/KGUucmVtb3ZlKHIpLHQuZGVsZXRlKHIua2V5KSk6ci5yZXNldCgpLGkuUHJ1bmV9LGUu
cHJvdG90eXBlLm5leHREb25lPWZ1bmN0aW9uKCl7dGhpcy50YXJnZXQuZG9uZSgpfSxlfSgpCitl
LkNvbnN0UmVmZXJlbmNlPV8sZS5pc0NvbnN0PWZ1bmN0aW9uKGUpe3JldHVybiBlLnRhZz09PWh9
LGUuTGlzdEl0ZW09dyxlLnJlZmVyZW5jZUZyb21QYXJ0cz1mdW5jdGlvbihlLHQpe3ZhciBuLHI9
ZQorZm9yKG49MDtuPHQubGVuZ3RoO24rKylyPXIuZ2V0KHRbbl0pCityZXR1cm4gcn0sZS5JdGVy
YXRpb25BcnRpZmFjdHM9RSxlLlJlZmVyZW5jZUl0ZXJhdG9yPXgsZS5JdGVyYXRvclN5bmNocm9u
aXplcj1DLGUuQ09OU1RBTlQ9MCxlLklOSVRJQUw9byxlLlZPTEFUSUxFPU5hTixlLlJldmlzaW9u
VGFnPXMsZS5EaXJ0eWFibGVUYWc9dSxlLmNvbWJpbmVUYWdnZWQ9ZnVuY3Rpb24oZSl7dmFyIHQs
bixpLG89W10KK2Zvcih0PTAsbj1lLmxlbmd0aDt0PG47dCsrKXtpZigoaT1lW3RdLnRhZyk9PT1k
KXJldHVybiBkCitpIT09aCYmby5wdXNoKGkpfXJldHVybiByKG8pfSxlLmNvbWJpbmVTbGljZT1m
dW5jdGlvbihlKXtmb3IodmFyIHQsbj1bXSxpPWUuaGVhZCgpO251bGwhPT1pOyl7aWYoKHQ9aS50
YWcpPT09ZClyZXR1cm4gZAordCE9PWgmJm4ucHVzaCh0KSxpPWUubmV4dE5vZGUoaSl9cmV0dXJu
IHIobil9LGUuY29tYmluZT1mdW5jdGlvbihlKXt2YXIgdCxuLGksbz1bXQorZm9yKHQ9MCxuPWUu
bGVuZ3RoO3Q8bjt0Kyspe2lmKChpPWVbdF0pPT09ZClyZXR1cm4gZAoraSE9PWgmJm8ucHVzaChp
KX1yZXR1cm4gcihvKX0sZS5DYWNoZWRUYWc9bCxlLlVwZGF0YWJsZVRhZz1mLGUuQ09OU1RBTlRf
VEFHPWgsZS5WT0xBVElMRV9UQUc9ZCxlLkNVUlJFTlRfVEFHPW0sZS5DYWNoZWRSZWZlcmVuY2U9
ZyxlLm1hcD1mdW5jdGlvbihlLHQpe3JldHVybiBuZXcgeShlLHQpfSxlLlJlZmVyZW5jZUNhY2hl
PXYsZS5pc01vZGlmaWVkPWZ1bmN0aW9uKGUpe3JldHVybiBlIT09Yn19KSxlKCJAZ2xpbW1lci9y
dW50aW1lIixbImV4cG9ydHMiLCJlbWJlci1iYWJlbCIsIkBnbGltbWVyL3V0aWwiLCJAZ2xpbW1l
ci9yZWZlcmVuY2UiLCJAZ2xpbW1lci93aXJlLWZvcm1hdCJdLGZ1bmN0aW9uKGUsdCxuLHIsaSl7
InVzZSBzdHJpY3QiCitmdW5jdGlvbiBvKGUsdCl7cmV0dXJuIG5ldyBKZShlLHQpfWZ1bmN0aW9u
IHMoZSx0KXtmb3IodmFyIG4scj1lLnBhcmVudEVsZW1lbnQoKSxpPWUuZmlyc3ROb2RlKCksbz1l
Lmxhc3ROb2RlKCkscz1pO3M7KXtpZihuPXMubmV4dFNpYmxpbmcsci5pbnNlcnRCZWZvcmUocyx0
KSxzPT09bylyZXR1cm4gbgorcz1ufXJldHVybiBudWxsfWZ1bmN0aW9uIGEoZSl7Zm9yKHZhciB0
LG49ZS5wYXJlbnRFbGVtZW50KCkscj1lLmZpcnN0Tm9kZSgpLGk9ZS5sYXN0Tm9kZSgpLG89cjtv
Oyl7aWYodD1vLm5leHRTaWJsaW5nLG4ucmVtb3ZlQ2hpbGQobyksbz09PWkpcmV0dXJuIHQKK289
dH1yZXR1cm4gbnVsbH1mdW5jdGlvbiB1KGUpe3JldHVybiEhZSYmImZ1bmN0aW9uIj09dHlwZW9m
IGUudG9IVE1MfWZ1bmN0aW9uIGwoZSl7cmV0dXJuIG51bGwhPT1lJiYib2JqZWN0Ij09dHlwZW9m
IGUmJiJudW1iZXIiPT10eXBlb2YgZS5ub2RlVHlwZX1mdW5jdGlvbiBjKGUpe3JldHVybiJzdHJp
bmciPT10eXBlb2YgZX1mdW5jdGlvbiBwKGUsdCxyKXtpZihjKHIpKXJldHVybiBaZS5pbnNlcnQo
ZSx0LHIpCitpZih1KHIpKXJldHVybiB0dC5pbnNlcnQoZSx0LHIpCitpZihsKHIpKXJldHVybiBu
dC5pbnNlcnQoZSx0LHIpCit0aHJvdygwLG4udW5yZWFjaGFibGUpKCl9ZnVuY3Rpb24gZihlLHQs
cil7aWYoYyhyKSlyZXR1cm4gZXQuaW5zZXJ0KGUsdCxyKQoraWYobChyKSlyZXR1cm4gbnQuaW5z
ZXJ0KGUsdCxyKQordGhyb3coMCxuLnVucmVhY2hhYmxlKSgpfWZ1bmN0aW9uIGgoZSl7cmV0dXJu
Im9iamVjdCI9PXR5cGVvZiBlJiZlJiZlW3J0XX1mdW5jdGlvbiBkKGUpe3ZhciB0LG4scj1bXQor
Zm9yKHQ9MDt0PGUubGVuZ3RoO3QrKykhMSE9PShuPWVbdF0udmFsdWUoKSkmJm51bGwhPT1uJiZ2
b2lkIDAhPT1uJiZyLnB1c2gobikKK3JldHVybiAwPT09ci5sZW5ndGg/bnVsbDpyLmpvaW4oIiAi
KX1mdW5jdGlvbiBtKGUpe3JldHVybiBKU09OLnN0cmluZ2lmeSgiPCIrZS50YWdOYW1lLnRvTG93
ZXJDYXNlKCkrIiAvPiIpfWZ1bmN0aW9uIGcoZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVv
ZiBlLmNvbXBpbGV9ZnVuY3Rpb24geShlKXt2YXIgdD1lWzBdCityZXR1cm4gdD09PWkuT3BzLk9w
ZW5FbGVtZW50fHx0PT09aS5PcHMuT3BlblByaW1pdGl2ZUVsZW1lbnR9ZnVuY3Rpb24gdihlLHQp
e3JldHVybiBuZXcga3QodCxlKX1mdW5jdGlvbiBiKGUpe3JldHVybiBuZXcgTXQoZSl9ZnVuY3Rp
b24gXyhlLHQsbixyKXt2YXIgaT1FKHQsbixyKSxvPWkubmFtZWQscz1pLnlpZWxkcyxhPWkucGFy
dGlhbFN5bWJvbCx1PWkuc2l6ZQorcmV0dXJuIG5ldyBNdChlLG8scyxhLHUpfWZ1bmN0aW9uIHco
ZSx0KXt2YXIgcixpPW51bGwsbz1lLnByb2dyYW0KK3JldHVybiAwIT09dC5sZW5ndGgmJihyPWk9
KDAsbi5kaWN0KSgpLHQuZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gcltlXT1vLnNpemUrK30p
KSxuZXcgRnQoZSxvLGkpfWZ1bmN0aW9uIEUoZSx0LHIpe3ZhciBpLG8scz1udWxsLGE9bnVsbCx1
PTEKK3JldHVybiAwIT09dC5sZW5ndGgmJihpPXM9KDAsbi5kaWN0KSgpLHQuZm9yRWFjaChmdW5j
dGlvbihlKXtyZXR1cm4gaVtlXT11Kyt9KSksMCE9PWUubGVuZ3RoJiYobz1hPSgwLG4uZGljdCko
KSxlLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIG9bZV09dSsrfSkpLHtuYW1lZDphLHlpZWxk
czpzLHBhcnRpYWxTeW1ib2w6cj91Kys6bnVsbCxzaXplOnV9fWZ1bmN0aW9uIHgoZSx0KXt2YXIg
bj1VdC5zcGVjaWFsaXplKGUsdC5zeW1ib2xUYWJsZSkKK2RuLmNvbXBpbGUobix0KX1mdW5jdGlv
biBDKGUsdCxuKXt2YXIgcj1lLnN0YXRlbWVudHMKK3JldHVybiBuZXcgSnQobix0LHIpLnNjYW4o
KX1mdW5jdGlvbiBPKGUpe3JldHVybiJmdW5jdGlvbiIhPXR5cGVvZiBlLnRvU3RyaW5nPyIiOlN0
cmluZyhlKX1mdW5jdGlvbiBBKGUsdCl7cmV0dXJuIGNvbnNvbGUuaW5mbygiVXNlIGBjb250ZXh0
YCwgYW5kIGBnZXQoPHBhdGg+KWAgdG8gZGVidWcgdGhpcyB0ZW1wbGF0ZS4iKSx7Y29udGV4dDpl
LGdldDp0fX1mdW5jdGlvbiBUKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciByPW4uc3BsaXQo
Ii4iKQorcmV0dXJuInRoaXMiPT09clswXSYmKHJbMF09bnVsbCksRChyLHQpLmV2YWx1YXRlKGUp
fX1mdW5jdGlvbiBTKGUsdCl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/bW4uY29tcGlsZShlLHQp
Om5ldyB3dChlKX1mdW5jdGlvbiBSKGUsdCxuKXt2YXIgcj1QKGUsbiksaT1qKHQsbikKK3JldHVy
biBIZS5jcmVhdGUocixpLHFlKX1mdW5jdGlvbiBrKGUsdCxuLHIpe3ZhciBpPVAoZSxyKSxvPWoo
dCxyKQorcmV0dXJuIEhlLmNyZWF0ZShpLG8sbil9ZnVuY3Rpb24gTihlLHQpe3ZhciBuPWVbMF0s
cj1lWzFdLGk9ZVsyXSxvPWVbM10KK3JldHVybiBIZS5jcmVhdGUoUChuLHQpLGoocix0KSx7ZGVm
YXVsdDppLGludmVyc2U6b30pfWZ1bmN0aW9uIFAoZSx0KXtpZighZXx8MD09PWUubGVuZ3RoKXJl
dHVybiBMZQordmFyIG4scj1uZXcgQXJyYXkoZS5sZW5ndGgpCitmb3Iobj0wO248ZS5sZW5ndGg7
bisrKXJbbl09UyhlW25dLHQpCityZXR1cm4gRGUuY3JlYXRlKHIpfWZ1bmN0aW9uIGooZSx0KXtp
ZighZSlyZXR1cm4gemUKK3ZhciBuLHI9ZVswXSxpPWVbMV0KK2lmKDA9PT1yLmxlbmd0aClyZXR1
cm4gemUKK3ZhciBvPW5ldyBBcnJheShpLmxlbmd0aCkKK2ZvcihuPTA7bjxpLmxlbmd0aDtuKysp
b1tuXT1TKGlbbl0sdCkKK3JldHVybiBuZXcgRmUocixvKX1mdW5jdGlvbiBEKGUsdCl7dmFyIG4s
cixpLG8scyxhPWVbMF0sdT12b2lkIDAKK3JldHVybiBudWxsPT09YT8obj1uZXcgWnQscj1lLnNs
aWNlKDEpLFh0LmNyZWF0ZShuLHIpKToodT10LnN5bWJvbFRhYmxlLmdldFN5bWJvbCgibG9jYWwi
LGEpKT8oaT1lLnNsaWNlKDEpLG89bmV3IGVuKHUsYSksWHQuY3JlYXRlKG8saSkpOihzPW5ldyBa
dCxYdC5jcmVhdGUocyxlKSl9ZnVuY3Rpb24gTCgpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYm
dm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpuZXcgZ24sdD1hcmd1bWVudHMubGVu
Z3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bmV3IHZuCityZXR1cm4g
ZS5hZGQoImlmIixmdW5jdGlvbihlLHQpe3ZhciByPWVbMl0saT1lWzNdLG89ZVs0XSxzPWVbNV0s
YT1SKHIsaSx0KQordC5wdXRBcmdzKGEpLHQudGVzdCgiZW52aXJvbm1lbnQiKSx0LmxhYmVsbGVk
KG51bGwsZnVuY3Rpb24oZSl7aWYobyYmcyllLmp1bXBVbmxlc3MoIkVMU0UiKSxlLmV2YWx1YXRl
KG8pLGUuanVtcCgiRU5EIiksZS5sYWJlbCgiRUxTRSIpLGUuZXZhbHVhdGUocykKK2Vsc2V7aWYo
IW8pdGhyb3coMCxuLnVucmVhY2hhYmxlKSgpCitlLmp1bXBVbmxlc3MoIkVORCIpLGUuZXZhbHVh
dGUobyl9fSl9KSxlLmFkZCgiLWluLWVsZW1lbnQiLGZ1bmN0aW9uKGUsdCl7dmFyIHI9dW4oZSks
aT1SKGxuKGUpLG51bGwsdCkKK3QucHV0QXJncyhpKSx0LnRlc3QoInNpbXBsZSIpLHQubGFiZWxs
ZWQobnVsbCxmdW5jdGlvbihlKXtlLmp1bXBVbmxlc3MoIkVORCIpLGUucHVzaFJlbW90ZUVsZW1l
bnQoKSxlLmV2YWx1YXRlKCgwLG4udW53cmFwKShyKSksZS5wb3BSZW1vdGVFbGVtZW50KCl9KX0p
LGUuYWRkKCItd2l0aC1keW5hbWljLXZhcnMiLGZ1bmN0aW9uKGUsdCl7dmFyIHI9dW4oZSksaT1S
KGxuKGUpLGNuKGUpLHQpCit0LnVuaXQoZnVuY3Rpb24oZSl7ZS5wdXRBcmdzKGkpLGUucHVzaER5
bmFtaWNTY29wZSgpLGUuYmluZER5bmFtaWNTY29wZShpLm5hbWVkLmtleXMpLGUuZXZhbHVhdGUo
KDAsbi51bndyYXApKHIpKSxlLnBvcER5bmFtaWNTY29wZSgpfSl9KSxlLmFkZCgidW5sZXNzIixm
dW5jdGlvbihlLHQpe3ZhciByPWVbMl0saT1lWzNdLG89ZVs0XSxzPWVbNV0sYT1SKHIsaSx0KQor
dC5wdXRBcmdzKGEpLHQudGVzdCgiZW52aXJvbm1lbnQiKSx0LmxhYmVsbGVkKG51bGwsZnVuY3Rp
b24oZSl7aWYobyYmcyllLmp1bXBJZigiRUxTRSIpLGUuZXZhbHVhdGUobyksZS5qdW1wKCJFTkQi
KSxlLmxhYmVsKCJFTFNFIiksZS5ldmFsdWF0ZShzKQorZWxzZXtpZighbyl0aHJvdygwLG4udW5y
ZWFjaGFibGUpKCkKK2UuanVtcElmKCJFTkQiKSxlLmV2YWx1YXRlKG8pfX0pfSksZS5hZGQoIndp
dGgiLGZ1bmN0aW9uKGUsdCl7dmFyIHI9ZVsyXSxpPWVbM10sbz1lWzRdLHM9ZVs1XSxhPVIocixp
LHQpCit0LnB1dEFyZ3MoYSksdC50ZXN0KCJlbnZpcm9ubWVudCIpLHQubGFiZWxsZWQobnVsbCxm
dW5jdGlvbihlKXtpZihvJiZzKWUuanVtcFVubGVzcygiRUxTRSIpLGUuZXZhbHVhdGUobyksZS5q
dW1wKCJFTkQiKSxlLmxhYmVsKCJFTFNFIiksZS5ldmFsdWF0ZShzKQorZWxzZXtpZighbyl0aHJv
dygwLG4udW5yZWFjaGFibGUpKCkKK2UuanVtcFVubGVzcygiRU5EIiksZS5ldmFsdWF0ZShvKX19
KX0pLGUuYWRkKCJlYWNoIixmdW5jdGlvbihlLHQpe3ZhciByPWVbMl0saT1lWzNdLG89ZVs0XSxz
PWVbNV0sYT1SKHIsaSx0KQordC5sYWJlbGxlZChhLGZ1bmN0aW9uKGUpe2UucHV0SXRlcmF0b3Io
KSxzP2UuanVtcFVubGVzcygiRUxTRSIpOmUuanVtcFVubGVzcygiRU5EIiksZS5pdGVyKGZ1bmN0
aW9uKGUpe2UuZXZhbHVhdGUoKDAsbi51bndyYXApKG8pKX0pLHMmJihlLmp1bXAoIkVORCIpLGUu
bGFiZWwoIkVMU0UiKSxlLmV2YWx1YXRlKHMpKX0pfSkse2Jsb2NrczplLGlubGluZXM6dH19ZnVu
Y3Rpb24gSShlLHQpe3JldHVybi0xIT09ZS5pbmRleE9mKHQpfWZ1bmN0aW9uIE0oZSx0KXtyZXR1
cm4obnVsbD09PWV8fEkoX24sZSkpJiZJKEVuLHQpfWZ1bmN0aW9uIEYoZSx0KXtyZXR1cm4gbnVs
bCE9PWUmJihJKHduLGUpJiZJKHhuLHQpKX1mdW5jdGlvbiB6KGUsdCl7cmV0dXJuIE0oZSx0KXx8
RihlLHQpfWZ1bmN0aW9uIFUoZSx0LG4scil7dmFyIGksbz1udWxsCitpZihudWxsPT09cnx8dm9p
ZCAwPT09cilyZXR1cm4gcgoraWYodShyKSlyZXR1cm4gci50b0hUTUwoKQorbz10P3QudGFnTmFt
ZS50b1VwcGVyQ2FzZSgpOm51bGwKK3ZhciBzPXVlKHIpCityZXR1cm4gTShvLG4pJiYoaT1lLnBy
b3RvY29sRm9yVVJMKHMpLEkoYm4saSkpPyJ1bnNhZmU6IitzOkYobyxuKT8idW5zYWZlOiIrczpz
fWZ1bmN0aW9uIEIoZSx0KXt2YXIgbixyPXZvaWQgMCxpPXZvaWQgMAorcmV0dXJuIHQgaW4gZT8o
aT10LHI9InByb3AiKToobj10LnRvTG93ZXJDYXNlKCksbiBpbiBlPyhyPSJwcm9wIixpPW4pOihy
PSJhdHRyIixpPXQpKSwicHJvcCIhPT1yfHwic3R5bGUiIT09aS50b0xvd2VyQ2FzZSgpJiYhcShl
LnRhZ05hbWUsaSl8fChyPSJhdHRyIikse25vcm1hbGl6ZWQ6aSx0eXBlOnJ9fWZ1bmN0aW9uIHEo
ZSx0KXt2YXIgbj1DbltlLnRvVXBwZXJDYXNlKCldCityZXR1cm4gbiYmblt0LnRvTG93ZXJDYXNl
KCldfHwhMX1mdW5jdGlvbiBIKGUsbil7aWYoIWUpcmV0dXJuIG4KK2lmKCFXKGUpKXJldHVybiBu
Cit2YXIgcj1lLmNyZWF0ZUVsZW1lbnQoImRpdiIpCityZXR1cm4gZnVuY3Rpb24oZSl7ZnVuY3Rp
b24gbigpe3JldHVybigwLHQucG9zc2libGVDb25zdHJ1Y3RvclJldHVybikodGhpcyxlLmFwcGx5
KHRoaXMsYXJndW1lbnRzKSl9cmV0dXJuKDAsdC5pbmhlcml0cykobixlKSxuLnByb3RvdHlwZS5p
bnNlcnRIVE1MQmVmb3JlPWZ1bmN0aW9uKHQsbixpKXtpZihudWxsPT09bnx8IiI9PT1uKXJldHVy
biBlLnByb3RvdHlwZS5pbnNlcnRIVE1MQmVmb3JlLmNhbGwodGhpcyx0LG4saSkKK3ZhciBvPXQu
dGFnTmFtZS50b0xvd2VyQ2FzZSgpLHM9T25bb10KK3JldHVybiB2b2lkIDA9PT1zP2UucHJvdG90
eXBlLmluc2VydEhUTUxCZWZvcmUuY2FsbCh0aGlzLHQsbixpKTpWKHQscyxyLG4saSl9LG59KG4p
fWZ1bmN0aW9uIFYoZSx0LG4scixpKXt2YXIgbyxzPXQuYmVmb3JlK3IrdC5hZnRlcgorbi5pbm5l
ckhUTUw9cwordmFyIGE9bgorZm9yKG89MDtvPHQuZGVwdGg7bysrKWE9YS5jaGlsZE5vZGVzWzBd
Cit2YXIgdT1KKGEsZSxpKSxsPXVbMF0sYz11WzFdCityZXR1cm4gbmV3IFllKGUsbCxjKX1mdW5j
dGlvbiBXKGUpe3ZhciB0PWUuY3JlYXRlRWxlbWVudCgidGFibGUiKQordHJ5e3QuaW5uZXJIVE1M
PSI8dGJvZHk+PC90Ym9keT4ifWNhdGNoKGUpe31maW5hbGx5e2lmKDAhPT10LmNoaWxkTm9kZXMu
bGVuZ3RoKXJldHVybiExfXJldHVybiEwfWZ1bmN0aW9uICQoZSxuLHIpe2lmKCFlKXJldHVybiBu
CitpZighSyhlLHIpKXJldHVybiBuCit2YXIgaT1lLmNyZWF0ZUVsZW1lbnQoImRpdiIpCityZXR1
cm4gZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbigpe3JldHVybigwLHQucG9zc2libGVDb25zdHJ1Y3Rv
clJldHVybikodGhpcyxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9cmV0dXJuKDAsdC5pbmhlcml0
cykobixlKSxuLnByb3RvdHlwZS5pbnNlcnRIVE1MQmVmb3JlPWZ1bmN0aW9uKHQsbixvKXtyZXR1
cm4gbnVsbD09PW58fCIiPT09bj9lLnByb3RvdHlwZS5pbnNlcnRIVE1MQmVmb3JlLmNhbGwodGhp
cyx0LG4sbyk6dC5uYW1lc3BhY2VVUkkhPT1yP2UucHJvdG90eXBlLmluc2VydEhUTUxCZWZvcmUu
Y2FsbCh0aGlzLHQsbixvKTpHKHQsaSxuLG8pfSxufShuKX1mdW5jdGlvbiBHKGUsdCxuLHIpe3Qu
aW5uZXJIVE1MPSI8c3ZnPiIrbisiPC9zdmc+IgordmFyIGk9Sih0LmZpcnN0Q2hpbGQsZSxyKSxv
PWlbMF0scz1pWzFdCityZXR1cm4gbmV3IFllKGUsbyxzKX1mdW5jdGlvbiBLKGUsdCl7dmFyIHI9
ZS5jcmVhdGVFbGVtZW50TlModCwic3ZnIikKK3RyeXtyLmluc2VydEFkamFjZW50SFRNTCgiYmVm
b3JlRW5kIiwiPGNpcmNsZT48L2NpcmNsZT4iKX1jYXRjaChlKXt9ZmluYWxseXtyZXR1cm4gMSE9
PXIuY2hpbGROb2Rlcy5sZW5ndGh8fCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIhPT0oMCxu
LnVud3JhcCkoci5maXJzdENoaWxkKS5uYW1lc3BhY2VVUkl9fWZ1bmN0aW9uIFEoZSxuKXtyZXR1
cm4gZSYmWShlKT9mdW5jdGlvbihlKXtmdW5jdGlvbiBuKG4pe3ZhciByPSgwLHQucG9zc2libGVD
b25zdHJ1Y3RvclJldHVybikodGhpcyxlLmNhbGwodGhpcyxuKSkKK3JldHVybiByLnVzZWxlc3ND
b21tZW50PXIuY3JlYXRlQ29tbWVudCgiIikscn1yZXR1cm4oMCx0LmluaGVyaXRzKShuLGUpLG4u
cHJvdG90eXBlLmluc2VydEhUTUxCZWZvcmU9ZnVuY3Rpb24odCxuLHIpe2lmKG51bGw9PT1uKXJl
dHVybiBlLnByb3RvdHlwZS5pbnNlcnRIVE1MQmVmb3JlLmNhbGwodGhpcyx0LG4scikKK3ZhciBp
PSExLG89cj9yLnByZXZpb3VzU2libGluZzp0Lmxhc3RDaGlsZAorbyYmbyBpbnN0YW5jZW9mIFRl
eHQmJihpPSEwLHQuaW5zZXJ0QmVmb3JlKHRoaXMudXNlbGVzc0NvbW1lbnQscikpCit2YXIgcz1l
LnByb3RvdHlwZS5pbnNlcnRIVE1MQmVmb3JlLmNhbGwodGhpcyx0LG4scikKK3JldHVybiBpJiZ0
LnJlbW92ZUNoaWxkKHRoaXMudXNlbGVzc0NvbW1lbnQpLHN9LG59KG4pOm59ZnVuY3Rpb24gWShl
KXt2YXIgdD1lLmNyZWF0ZUVsZW1lbnQoImRpdiIpCityZXR1cm4gdC5pbm5lckhUTUw9ImZpcnN0
Iix0Lmluc2VydEFkamFjZW50SFRNTCgiYmVmb3JlRW5kIiwic2Vjb25kIiksMiE9PXQuY2hpbGRO
b2Rlcy5sZW5ndGh9ZnVuY3Rpb24gSihlLHQsbil7Zm9yKHZhciByPWUuZmlyc3RDaGlsZCxpPW51
bGwsbz1yO287KWk9byxvPW8ubmV4dFNpYmxpbmcsdC5pbnNlcnRCZWZvcmUoaSxuKQorcmV0dXJu
W3IsaV19ZnVuY3Rpb24gWChlLHQsbixyKXt2YXIgaT10LG89ZSxzPW4sYT1zP3MucHJldmlvdXNT
aWJsaW5nOmkubGFzdENoaWxkLHU9dm9pZCAwCitpZihudWxsPT09cnx8IiI9PT1yKXJldHVybiBu
ZXcgWWUoaSxudWxsLG51bGwpCitudWxsPT09cz8oaS5pbnNlcnRBZGphY2VudEhUTUwoImJlZm9y
ZUVuZCIsciksdT1pLmxhc3RDaGlsZCk6cyBpbnN0YW5jZW9mIEhUTUxFbGVtZW50PyhzLmluc2Vy
dEFkamFjZW50SFRNTCgiYmVmb3JlQmVnaW4iLHIpLHU9cy5wcmV2aW91c1NpYmxpbmcpOihpLmlu
c2VydEJlZm9yZShvLHMpLG8uaW5zZXJ0QWRqYWNlbnRIVE1MKCJiZWZvcmVCZWdpbiIsciksdT1v
LnByZXZpb3VzU2libGluZyxpLnJlbW92ZUNoaWxkKG8pKQordmFyIGw9YT9hLm5leHRTaWJsaW5n
OmkuZmlyc3RDaGlsZAorcmV0dXJuIG5ldyBZZShpLGwsdSl9ZnVuY3Rpb24gWihlKXtyZXR1cm4g
ZS5ub2RlVHlwZT09PU5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERX1mdW5jdGlvbiBlZShlLHQp
e3ZhciBuPWUudGFnTmFtZQoraWYoZS5uYW1lc3BhY2VVUkk9PT1BbilyZXR1cm4gbmUobix0KQor
dmFyIHI9QihlLHQpLGk9ci50eXBlLG89ci5ub3JtYWxpemVkCityZXR1cm4iYXR0ciI9PT1pP25l
KG4sbyk6dGUobixvKX1mdW5jdGlvbiB0ZShlLHQpe3JldHVybiB6KGUsdCk/bmV3IEZuKHQpOm9l
KGUsdCk/VW46c2UoZSx0KT9xbjpuZXcgTW4odCl9ZnVuY3Rpb24gbmUoZSx0KXtyZXR1cm4geihl
LHQpP25ldyBIbih0KTpuZXcgSW4odCl9ZnVuY3Rpb24gcmUoZSl7cmV0dXJuITE9PT1lfHx2b2lk
IDA9PT1lfHxudWxsPT09ZT9udWxsOiEwPT09ZT8iIjoiZnVuY3Rpb24iPT10eXBlb2YgZT9udWxs
OlN0cmluZyhlKX1mdW5jdGlvbiBpZShlKXtyZXR1cm4gbnVsbD09PWV8fHZvaWQgMD09PWV9ZnVu
Y3Rpb24gb2UoZSx0KXtyZXR1cm4oIklOUFVUIj09PWV8fCJURVhUQVJFQSI9PT1lKSYmInZhbHVl
Ij09PXR9ZnVuY3Rpb24gc2UoZSx0KXtyZXR1cm4iT1BUSU9OIj09PWUmJiJzZWxlY3RlZCI9PT10
fWZ1bmN0aW9uIGFlKGUpe3JldHVybiBudWxsPT09ZXx8dm9pZCAwPT09ZXx8ImZ1bmN0aW9uIiE9
dHlwZW9mIGUudG9TdHJpbmd9ZnVuY3Rpb24gdWUoZSl7cmV0dXJuIGFlKGUpPyIiOlN0cmluZyhl
KX1mdW5jdGlvbiBsZShlKXtyZXR1cm4gYWUoZSk/IiI6YyhlKT9lOnUoZSk/ZS50b0hUTUwoKTps
KGUpP2U6U3RyaW5nKGUpfWZ1bmN0aW9uIGNlKGUpe3JldHVybiBhZShlKT8iIjpjKGUpP2U6dShl
KXx8bChlKT9lOlN0cmluZyhlKX1mdW5jdGlvbiBwZShlLHQsbixyKXt2YXIgaT1uZXcgUXQoZSxu
LHIpLG89dm9pZCAwLHM9ZnVuY3Rpb24oKXtyZXR1cm4gb3x8KG89aS5zY2FuRW50cnlQb2ludCgp
KSxvfSxhPXZvaWQgMAorcmV0dXJue2lkOnQsbWV0YTpuLF9ibG9jazplLGFzRW50cnlQb2ludDpz
LGFzTGF5b3V0OmZ1bmN0aW9uKCl7cmV0dXJuIGF8fChhPWkuc2NhbkxheW91dCgpKSxhfSxhc1Bh
cnRpYWw6ZnVuY3Rpb24oZSl7cmV0dXJuIGkuc2NhblBhcnRpYWwoZSl9LHJlbmRlcjpmdW5jdGlv
bihlLHQsbil7dmFyIGk9Z3QuZm9ySW5pdGlhbFJlbmRlcihyLHQsbnVsbCksbz1zKCkuY29tcGls
ZShyKSxhPVpuLmluaXRpYWwocixlLG4saSxvKQorcmV0dXJuIG5ldyB4cihhKX19fWUuQ29uY3Jl
dGVCb3VuZHM9ZS5FbGVtZW50U3RhY2s9ZS5pbnNlcnRIVE1MQmVmb3JlPWUuaXNXaGl0ZXNwYWNl
PWUuRE9NVHJlZUNvbnN0cnVjdGlvbj1lLklET01DaGFuZ2VzPWUuRE9NQ2hhbmdlcz1lLmlzQ29t
cG9uZW50RGVmaW5pdGlvbj1lLkNvbXBvbmVudERlZmluaXRpb249ZS5QYXJ0aWFsRGVmaW5pdGlv
bj1lLkVudmlyb25tZW50PWUuU2NvcGU9ZS5pc1NhZmVTdHJpbmc9ZS5SZW5kZXJSZXN1bHQ9ZS5V
cGRhdGluZ1ZNPWUuTGF5b3V0PWUuQmFzZWxpbmVTeW50YXg9ZS5yZXNldERlYnVnZ2VyQ2FsbGJh
Y2s9ZS5zZXREZWJ1Z2dlckNhbGxiYWNrPWUuY29tcGlsZUFyZ3M9ZS5JbmxpbmVNYWNyb3M9ZS5C
bG9ja01hY3Jvcz1lLmdldER5bmFtaWNWYXI9ZS5FdmFsdWF0ZWRQb3NpdGlvbmFsQXJncz1lLkV2
YWx1YXRlZE5hbWVkQXJncz1lLkV2YWx1YXRlZEFyZ3M9ZS5Db21waWxlZFBvc2l0aW9uYWxBcmdz
PWUuQ29tcGlsZWROYW1lZEFyZ3M9ZS5Db21waWxlZEFyZ3M9ZS5Db21waWxlZEV4cHJlc3Npb249
ZS5ub3JtYWxpemVUZXh0VmFsdWU9ZS5yZWFkRE9NQXR0cj1lLmRlZmF1bHRQcm9wZXJ0eU1hbmFn
ZXJzPWUuZGVmYXVsdEF0dHJpYnV0ZU1hbmFnZXJzPWUuZGVmYXVsdE1hbmFnZXJzPWUuSU5QVVRf
VkFMVUVfUFJPUEVSVFlfTUFOQUdFUj1lLlByb3BlcnR5TWFuYWdlcj1lLkF0dHJpYnV0ZU1hbmFn
ZXI9ZS5JQXR0cmlidXRlTWFuYWdlcj1lLkNvbXBpbGVkUHJvZ3JhbT1lLkNvbXBpbGVkQmxvY2s9
ZS5jb21waWxlTGF5b3V0PWUuT3Bjb2RlQnVpbGRlckRTTD1lLkNvbmRpdGlvbmFsUmVmZXJlbmNl
PWUuUHJpbWl0aXZlUmVmZXJlbmNlPWUuVU5ERUZJTkVEX1JFRkVSRU5DRT1lLk5VTExfUkVGRVJF
TkNFPWUudGVtcGxhdGVGYWN0b3J5PWUuU2ltcGxlPXZvaWQgMAordmFyIGZlPWZ1bmN0aW9uKGUp
e2Z1bmN0aW9uIG4obil7cmV0dXJuKDAsdC5wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKSh0aGlz
LGUuY2FsbCh0aGlzLG4pKX1yZXR1cm4oMCx0LmluaGVyaXRzKShuLGUpLG4uY3JlYXRlPWZ1bmN0
aW9uKGUpe3JldHVybiB2b2lkIDA9PT1lP21lOm51bGw9PT1lP2dlOiEwPT09ZT95ZTohMT09PWU/
dmU6Im51bWJlciI9PXR5cGVvZiBlP25ldyBkZShlKTpuZXcgaGUoZSl9LG4ucHJvdG90eXBlLmdl
dD1mdW5jdGlvbigpe3JldHVybiBtZX0sbn0oci5Db25zdFJlZmVyZW5jZSksaGU9ZnVuY3Rpb24o
ZSl7ZnVuY3Rpb24gbigpe3ZhciBuPSgwLHQucG9zc2libGVDb25zdHJ1Y3RvclJldHVybikodGhp
cyxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkKK3JldHVybiBuLmxlbmd0aFJlZmVyZW5jZT1udWxs
LG59cmV0dXJuKDAsdC5pbmhlcml0cykobixlKSxuLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7
dmFyIG4KK3JldHVybiJsZW5ndGgiPT09dD8obj10aGlzLmxlbmd0aFJlZmVyZW5jZSxudWxsPT09
biYmKG49dGhpcy5sZW5ndGhSZWZlcmVuY2U9bmV3IGRlKHRoaXMuaW5uZXIubGVuZ3RoKSksbik6
ZS5wcm90b3R5cGUuZ2V0LmNhbGwodGhpcyx0KX0sbn0oZmUpLGRlPWZ1bmN0aW9uKGUpe2Z1bmN0
aW9uIG4obil7cmV0dXJuKDAsdC5wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKSh0aGlzLGUuY2Fs
bCh0aGlzLG4pKX1yZXR1cm4oMCx0LmluaGVyaXRzKShuLGUpLG59KGZlKSxtZT1uZXcgZGUodm9p
ZCAwKSxnZT1uZXcgZGUobnVsbCkseWU9bmV3IGRlKCEwKSx2ZT1uZXcgZGUoITEpLGJlPWZ1bmN0
aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLmlubmVyPWUsdGhpcy50YWc9ZS50YWd9cmV0dXJuIGUu
cHJvdG90eXBlLnZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9Cb29sKHRoaXMuaW5uZXIu
dmFsdWUoKSl9LGUucHJvdG90eXBlLnRvQm9vbD1mdW5jdGlvbihlKXtyZXR1cm4hIWV9LGV9KCks
X2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5yZWZlcmVuY2VzPVtdLHRoaXMuc3RyaW5n
cz1bXSx0aGlzLmV4cHJlc3Npb25zPVtdLHRoaXMuYXJyYXlzPVtdLHRoaXMuYmxvY2tzPVtdLHRo
aXMuZnVuY3Rpb25zPVtdLHRoaXMub3RoZXJzPVtdLHRoaXMuTlVMTF9SRUZFUkVOQ0U9dGhpcy5y
ZWZlcmVuY2UoZ2UpLHRoaXMuVU5ERUZJTkVEX1JFRkVSRU5DRT10aGlzLnJlZmVyZW5jZShtZSl9
cmV0dXJuIGUucHJvdG90eXBlLmdldFJlZmVyZW5jZT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5y
ZWZlcmVuY2VzW2UtMV19LGUucHJvdG90eXBlLnJlZmVyZW5jZT1mdW5jdGlvbihlKXt2YXIgdD10
aGlzLnJlZmVyZW5jZXMubGVuZ3RoCityZXR1cm4gdGhpcy5yZWZlcmVuY2VzLnB1c2goZSksdCsx
fSxlLnByb3RvdHlwZS5nZXRTdHJpbmc9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuc3RyaW5nc1tl
LTFdfSxlLnByb3RvdHlwZS5zdHJpbmc9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5zdHJpbmdzLmxl
bmd0aAorcmV0dXJuIHRoaXMuc3RyaW5ncy5wdXNoKGUpLHQrMX0sZS5wcm90b3R5cGUuZ2V0RXhw
cmVzc2lvbj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5leHByZXNzaW9uc1tlLTFdfSxlLnByb3Rv
dHlwZS5leHByZXNzaW9uPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZXhwcmVzc2lvbnMubGVuZ3Ro
CityZXR1cm4gdGhpcy5leHByZXNzaW9ucy5wdXNoKGUpLHQrMX0sZS5wcm90b3R5cGUuZ2V0QXJy
YXk9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYXJyYXlzW2UtMV19LGUucHJvdG90eXBlLmFycmF5
PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuYXJyYXlzLmxlbmd0aAorcmV0dXJuIHRoaXMuYXJyYXlz
LnB1c2goZSksdCsxfSxlLnByb3RvdHlwZS5nZXRCbG9jaz1mdW5jdGlvbihlKXtyZXR1cm4gdGhp
cy5ibG9ja3NbZS0xXX0sZS5wcm90b3R5cGUuYmxvY2s9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5i
bG9ja3MubGVuZ3RoCityZXR1cm4gdGhpcy5ibG9ja3MucHVzaChlKSx0KzF9LGUucHJvdG90eXBl
LmdldEZ1bmN0aW9uPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmZ1bmN0aW9uc1tlLTFdfSxlLnBy
b3RvdHlwZS5mdW5jdGlvbj1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmZ1bmN0aW9ucy5sZW5ndGgK
K3JldHVybiB0aGlzLmZ1bmN0aW9ucy5wdXNoKGUpLHQrMX0sZS5wcm90b3R5cGUuZ2V0T3RoZXI9
ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub3RoZXJzW2UtMV19LGUucHJvdG90eXBlLm90aGVyPWZ1
bmN0aW9uKGUpe3ZhciB0PXRoaXMub3RoZXJzLmxlbmd0aAorcmV0dXJuIHRoaXMub3RoZXJzLnB1
c2goZSksdCsxfSxlfSgpLHdlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMuZXZhbHVhdGVP
cGNvZGU9KDAsbi5maWxsTnVsbHMpKDUyKX1yZXR1cm4gZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9u
KGUsdCl7dGhpcy5ldmFsdWF0ZU9wY29kZVtlXT10fSxlLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5j
dGlvbihlLHQpeygwLHRoaXMuZXZhbHVhdGVPcGNvZGVbdC50eXBlXSkoZSx0KX0sZX0oKSxFZT1u
ZXcgd2UseGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7KDAsbi5pbml0aWFsaXplR3VpZCkodGhp
cyl9cmV0dXJuIGUucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybntndWlkOnRoaXMu
X2d1aWQsdHlwZTp0aGlzLnR5cGV9fSxlfSgpLENlPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4oKXt2
YXIgbj0oMCx0LnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4pKHRoaXMsZS5hcHBseSh0aGlzLGFy
Z3VtZW50cykpCityZXR1cm4gbi5uZXh0PW51bGwsbi5wcmV2PW51bGwsbn1yZXR1cm4oMCx0Lmlu
aGVyaXRzKShuLGUpLG59KHhlKQorRWUuYWRkKDIwLGZ1bmN0aW9uKGUsdCl7dmFyIG49dC5vcDEs
cj10Lm9wMixpPWUuY29uc3RhbnRzLmdldE90aGVyKG4pLG89ZS5jb25zdGFudHMuZ2V0RXhwcmVz
c2lvbihyKSxzPW51bGwsYT1pLmV2YWx1YXRlKGUpCithJiYocz1vLmV2YWx1YXRlKGUpKSxlLnB1
c2hDYWxsZXJTY29wZSgpLGEmJmUuaW52b2tlQmxvY2soYSxzfHxudWxsKX0pLEVlLmFkZCgyMSxm
dW5jdGlvbihlKXtyZXR1cm4gZS5wb3BTY29wZSgpfSksRWUuYWRkKDAsZnVuY3Rpb24oZSl7cmV0
dXJuIGUucHVzaENoaWxkU2NvcGUoKX0pLEVlLmFkZCgxLGZ1bmN0aW9uKGUpe3JldHVybiBlLnBv
cFNjb3BlKCl9KSxFZS5hZGQoMixmdW5jdGlvbihlKXtyZXR1cm4gZS5wdXNoRHluYW1pY1Njb3Bl
KCl9KSxFZS5hZGQoMyxmdW5jdGlvbihlKXtyZXR1cm4gZS5wb3BEeW5hbWljU2NvcGUoKX0pLEVl
LmFkZCg0LGZ1bmN0aW9uKGUsdCl7dmFyIG49dC5vcDEKK2UuZnJhbWUuc2V0T3BlcmFuZChlLmNv
bnN0YW50cy5nZXRSZWZlcmVuY2UobikpfSksRWUuYWRkKDUsZnVuY3Rpb24oZSx0KXt2YXIgbj10
Lm9wMSxyPWUuY29uc3RhbnRzLmdldEV4cHJlc3Npb24obikKK2UuZXZhbHVhdGVPcGVyYW5kKHIp
fSksRWUuYWRkKDYsZnVuY3Rpb24oZSx0KXt2YXIgbj10Lm9wMQorZS5ldmFsdWF0ZUFyZ3MoZS5j
b25zdGFudHMuZ2V0RXhwcmVzc2lvbihuKSl9KSxFZS5hZGQoNyxmdW5jdGlvbihlLHQpe3ZhciBu
PXQub3AxLHI9ZS5jb25zdGFudHMuZ2V0QXJyYXkobikKK2UuYmluZFBvc2l0aW9uYWxBcmdzKHIp
fSksRWUuYWRkKDgsZnVuY3Rpb24oZSx0KXt2YXIgbj10Lm9wMSxyPXQub3AyLGk9ZS5jb25zdGFu
dHMuZ2V0QXJyYXkobiksbz1lLmNvbnN0YW50cy5nZXRBcnJheShyKQorZS5iaW5kTmFtZWRBcmdz
KGksbyl9KSxFZS5hZGQoOSxmdW5jdGlvbihlLHQpe3ZhciBuPXQub3AxLHI9dC5vcDIsaT1lLmNv
bnN0YW50cy5nZXRBcnJheShuKSxvPWUuY29uc3RhbnRzLmdldEFycmF5KHIpCitlLmJpbmRCbG9j
a3MoaSxvKX0pLEVlLmFkZCgxMCxmdW5jdGlvbihlLHQpe3ZhciBuPXQub3AxCitlLmJpbmRQYXJ0
aWFsQXJncyhuKX0pLEVlLmFkZCgxMSxmdW5jdGlvbihlKXtyZXR1cm4gZS5iaW5kQ2FsbGVyU2Nv
cGUoKX0pLEVlLmFkZCgxMixmdW5jdGlvbihlLHQpe3ZhciBuPXQub3AxLHI9ZS5jb25zdGFudHMu
Z2V0QXJyYXkobikKK2UuYmluZER5bmFtaWNTY29wZShyKX0pLEVlLmFkZCgxMyxmdW5jdGlvbihl
LHQpe3ZhciBuPXQub3AxLHI9dC5vcDIKK3JldHVybiBlLmVudGVyKG4scil9KSxFZS5hZGQoMTQs
ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZXhpdCgpfSksRWUuYWRkKDE1LGZ1bmN0aW9uKGUsdCl7dmFy
IG49dC5vcDEscj1lLmNvbnN0YW50cy5nZXRCbG9jayhuKSxpPWUuZnJhbWUuZ2V0QXJncygpCitl
Lmludm9rZUJsb2NrKHIsaSl9KSxFZS5hZGQoMTYsZnVuY3Rpb24oZSx0KXt2YXIgbj10Lm9wMQor
cmV0dXJuIGUuZ290byhuKX0pLEVlLmFkZCgxNyxmdW5jdGlvbihlLHQpe3ZhciBuLGk9dC5vcDEs
bz1lLmZyYW1lLmdldENvbmRpdGlvbigpOygwLHIuaXNDb25zdCkobyk/by52YWx1ZSgpJiZlLmdv
dG8oaSk6KG49bmV3IHIuUmVmZXJlbmNlQ2FjaGUobyksbi5wZWVrKCkmJmUuZ290byhpKSxlLnVw
ZGF0ZVdpdGgobmV3IFNlKG4pKSl9KSxFZS5hZGQoMTgsZnVuY3Rpb24oZSx0KXt2YXIgbixpPXQu
b3AxLG89ZS5mcmFtZS5nZXRDb25kaXRpb24oKTsoMCxyLmlzQ29uc3QpKG8pP28udmFsdWUoKXx8
ZS5nb3RvKGkpOihuPW5ldyByLlJlZmVyZW5jZUNhY2hlKG8pLG4ucGVlaygpfHxlLmdvdG8oaSks
ZS51cGRhdGVXaXRoKG5ldyBTZShuKSkpfSkKK3ZhciBPZT1mdW5jdGlvbihlKXtyZXR1cm4gbmV3
IHIuQ29uc3RSZWZlcmVuY2UoISFlLnZhbHVlKCkpfSxBZT1mdW5jdGlvbihlKXtyZXR1cm4gZX0s
VGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC50b0NvbmRpdGlvbmFsUmVmZXJlbmNlKGUpfQorRWUu
YWRkKDE5LGZ1bmN0aW9uKGUsdCl7dmFyIG49dC5vcDEscj1lLmZyYW1lLmdldE9wZXJhbmQoKSxp
PWUuY29uc3RhbnRzLmdldEZ1bmN0aW9uKG4pCitlLmZyYW1lLnNldENvbmRpdGlvbihpKHIsZS5l
bnYpKX0pCit2YXIgU2U9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbihuKXt2YXIgcj0oMCx0LnBvc3Np
YmxlQ29uc3RydWN0b3JSZXR1cm4pKHRoaXMsZS5jYWxsKHRoaXMpKQorcmV0dXJuIHIudHlwZT0i
YXNzZXJ0IixyLnRhZz1uLnRhZyxyLmNhY2hlPW4scn1yZXR1cm4oMCx0LmluaGVyaXRzKShuLGUp
LG4ucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuY2FjaGU7KDAsci5p
c01vZGlmaWVkKSh0LnJldmFsaWRhdGUoKSkmJmUudGhyb3coKX0sbi5wcm90b3R5cGUudG9KU09O
PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy50eXBlLHQ9dGhpcy5fZ3VpZCxuPXRoaXMuY2FjaGUscj12
b2lkIDAKK3RyeXtyPUpTT04uc3RyaW5naWZ5KG4ucGVlaygpKX1jYXRjaChlKXtyPVN0cmluZyhu
LnBlZWsoKSl9cmV0dXJue2d1aWQ6dCx0eXBlOmUsYXJnczpbXSxkZXRhaWxzOntleHBlY3RlZDpy
fX19LG59KENlKSxSZT1mdW5jdGlvbihlKXtmdW5jdGlvbiBuKG4scil7dmFyIGk9KDAsdC5wb3Nz
aWJsZUNvbnN0cnVjdG9yUmV0dXJuKSh0aGlzLGUuY2FsbCh0aGlzKSkKK3JldHVybiBpLnRhcmdl
dD1yLGkudHlwZT0ianVtcC1pZi1ub3QtbW9kaWZpZWQiLGkudGFnPW4saS5sYXN0UmV2aXNpb249
bi52YWx1ZSgpLGl9cmV0dXJuKDAsdC5pbmhlcml0cykobixlKSxuLnByb3RvdHlwZS5ldmFsdWF0
ZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLnRhZyxuPXRoaXMudGFyZ2V0LHI9dGhpcy5sYXN0UmV2
aXNpb24KKyFlLmFsd2F5c1JldmFsaWRhdGUmJnQudmFsaWRhdGUocikmJmUuZ290byhuKX0sbi5w
cm90b3R5cGUuZGlkTW9kaWZ5PWZ1bmN0aW9uKCl7dGhpcy5sYXN0UmV2aXNpb249dGhpcy50YWcu
dmFsdWUoKX0sbi5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJue2d1aWQ6dGhpcy5f
Z3VpZCx0eXBlOnRoaXMudHlwZSxhcmdzOltKU09OLnN0cmluZ2lmeSh0aGlzLnRhcmdldC5pbnNw
ZWN0KCkpXX19LG59KENlKSxrZT1mdW5jdGlvbihlKXtmdW5jdGlvbiBuKG4pe3ZhciBpPSgwLHQu
cG9zc2libGVDb25zdHJ1Y3RvclJldHVybikodGhpcyxlLmNhbGwodGhpcykpCityZXR1cm4gaS50
YXJnZXQ9bixpLnR5cGU9ImRpZC1tb2RpZnkiLGkudGFnPXIuQ09OU1RBTlRfVEFHLGl9cmV0dXJu
KDAsdC5pbmhlcml0cykobixlKSxuLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbigpe3RoaXMu
dGFyZ2V0LmRpZE1vZGlmeSgpfSxufShDZSksTmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3Ro
aXMudGFnPXIuQ09OU1RBTlRfVEFHLHRoaXMudHlwZT0ibGFiZWwiLHRoaXMubGFiZWw9bnVsbCx0
aGlzLnByZXY9bnVsbCx0aGlzLm5leHQ9bnVsbCwoMCxuLmluaXRpYWxpemVHdWlkKSh0aGlzKSxl
JiYodGhpcy5sYWJlbD1lKX1yZXR1cm4gZS5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24oKXt9
LGUucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sYWJlbCsiIFsiK3Ro
aXMuX2d1aWQrIl0ifSxlLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57Z3VpZDp0
aGlzLl9ndWlkLHR5cGU6dGhpcy50eXBlLGFyZ3M6W0pTT04uc3RyaW5naWZ5KHRoaXMuaW5zcGVj
dCgpKV19fSxlfSgpLFBlPW4uSEFTX05BVElWRV9XRUFLTUFQP09iamVjdC5mcmVlemUoW10pOltd
LGplPW4uSEFTX05BVElWRV9XRUFLTUFQP09iamVjdC5mcmVlemUoKDAsbi5kaWN0KSgpKTooMCxu
LmRpY3QpKCksRGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMudmFsdWVzPWUsdGhpcy5s
ZW5ndGg9ZS5sZW5ndGh9cmV0dXJuIGUuY3JlYXRlPWZ1bmN0aW9uKGUpe3JldHVybiBlLmxlbmd0
aD9uZXcgdGhpcyhlKTpMZX0sZS5lbXB0eT1mdW5jdGlvbigpe3JldHVybiBMZX0sZS5wcm90b3R5
cGUuZXZhbHVhdGU9ZnVuY3Rpb24oZSl7dmFyIHQsbj10aGlzLnZhbHVlcyxyPXRoaXMubGVuZ3Ro
LGk9bmV3IEFycmF5KHIpCitmb3IodD0wO3Q8cjt0KyspaVt0XT1uW3RdLmV2YWx1YXRlKGUpCity
ZXR1cm4gSWUuY3JlYXRlKGkpfSxlLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4i
WyIrdGhpcy52YWx1ZXMubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnRvSlNPTigpfSkuam9pbigi
LCAiKSsiXSJ9LGV9KCksTGU9bmV3KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4oKXtyZXR1cm4oMCx0
LnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4pKHRoaXMsZS5jYWxsKHRoaXMsUGUpKX1yZXR1cm4o
MCx0LmluaGVyaXRzKShuLGUpLG4ucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKCl7cmV0dXJu
IE1lfSxuLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4iPEVNUFRZPiJ9LG59KERl
KSksSWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMudmFsdWVzPWUsdGhpcy50YWc9KDAs
ci5jb21iaW5lVGFnZ2VkKShlKSx0aGlzLmxlbmd0aD1lLmxlbmd0aH1yZXR1cm4gZS5jcmVhdGU9
ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB0aGlzKGUpfSxlLmVtcHR5PWZ1bmN0aW9uKCl7cmV0dXJu
IE1lfSxlLnByb3RvdHlwZS5hdD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLnZhbHVlcworcmV0dXJu
IGU8dGhpcy5sZW5ndGg/dFtlXTptZX0sZS5wcm90b3R5cGUudmFsdWU9ZnVuY3Rpb24oKXt2YXIg
ZSx0PXRoaXMudmFsdWVzLG49dGhpcy5sZW5ndGgscj1uZXcgQXJyYXkobikKK2ZvcihlPTA7ZTxu
O2UrKylyW2VdPXRbZV0udmFsdWUoKQorcmV0dXJuIHJ9LGV9KCksTWU9bmV3KGZ1bmN0aW9uKGUp
e2Z1bmN0aW9uIG4oKXtyZXR1cm4oMCx0LnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4pKHRoaXMs
ZS5jYWxsKHRoaXMsUGUpKX1yZXR1cm4oMCx0LmluaGVyaXRzKShuLGUpLG4ucHJvdG90eXBlLmF0
PWZ1bmN0aW9uKCl7cmV0dXJuIG1lfSxuLnByb3RvdHlwZS52YWx1ZT1mdW5jdGlvbigpe3JldHVy
biB0aGlzLnZhbHVlc30sbn0oSWUpKSxGZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlz
LmtleXM9ZSx0aGlzLnZhbHVlcz10LHRoaXMubGVuZ3RoPWUubGVuZ3RoLCgwLG4uYXNzZXJ0KShl
Lmxlbmd0aD09PXQubGVuZ3RoLCJLZXlzIGFuZCB2YWx1ZXMgZG8gbm90IGhhdmUgdGhlIHNhbWUg
bGVuZ3RoIil9cmV0dXJuIGUuZW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4gemV9LGUuY3JlYXRlPWZ1
bmN0aW9uKGUpe3ZhciB0LG4scj1PYmplY3Qua2V5cyhlKSxpPXIubGVuZ3RoCitpZihpPjApe2Zv
cih0PVtdLG49MDtuPGk7bisrKXRbbl09ZVtyW25dXQorcmV0dXJuIG5ldyB0aGlzKHIsdCl9cmV0
dXJuIHplfSxlLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbihlKXt2YXIgdCxuPXRoaXMua2V5
cyxyPXRoaXMudmFsdWVzLGk9dGhpcy5sZW5ndGgsbz1uZXcgQXJyYXkoaSkKK2Zvcih0PTA7dDxp
O3QrKylvW3RdPXJbdF0uZXZhbHVhdGUoZSkKK3JldHVybiBuZXcgVWUobixvKX0sZS5wcm90b3R5
cGUudG9KU09OPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5rZXlzLHQ9dGhpcy52YWx1ZXMKK3JldHVy
biJ7IitlLm1hcChmdW5jdGlvbihlLG4pe3JldHVybiBlKyI6ICIrdFtuXS50b0pTT04oKX0pLmpv
aW4oIiwgIikrIn0ifSxlfSgpLHplPW5ldyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKCl7cmV0dXJu
KDAsdC5wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKSh0aGlzLGUuY2FsbCh0aGlzLFBlLFBlKSl9
cmV0dXJuKDAsdC5pbmhlcml0cykobixlKSxuLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbigp
e3JldHVybiBCZX0sbi5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIjxFTVBUWT4i
fSxufShGZSkpLFVlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3ZhciBpPWFyZ3VtZW50cy5s
ZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpudWxsCit0aGlzLmtl
eXM9ZSx0aGlzLnZhbHVlcz10LHRoaXMuX21hcD1pLHRoaXMudGFnPSgwLHIuY29tYmluZVRhZ2dl
ZCkodCksdGhpcy5sZW5ndGg9ZS5sZW5ndGgsKDAsbi5hc3NlcnQpKGUubGVuZ3RoPT09dC5sZW5n
dGgsIktleXMgYW5kIHZhbHVlcyBkbyBub3QgaGF2ZSB0aGUgc2FtZSBsZW5ndGgiKX1yZXR1cm4g
ZS5jcmVhdGU9ZnVuY3Rpb24oZSl7dmFyIHQsbixyPU9iamVjdC5rZXlzKGUpLGk9ci5sZW5ndGgK
K2lmKGk+MCl7Zm9yKHQ9bmV3IEFycmF5KGkpLG49MDtuPGk7bisrKXRbbl09ZVtyW25dXQorcmV0
dXJuIG5ldyB0aGlzKHIsdCxlKX1yZXR1cm4gQmV9LGUuZW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4g
QmV9LGUucHJvdG90eXBlLmdldD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmtleXMsbj10aGlzLnZh
bHVlcyxyPXQuaW5kZXhPZihlKQorcmV0dXJuLTE9PT1yP21lOm5bcl19LGUucHJvdG90eXBlLmhh
cz1mdW5jdGlvbihlKXtyZXR1cm4tMSE9PXRoaXMua2V5cy5pbmRleE9mKGUpfSxlLnByb3RvdHlw
ZS52YWx1ZT1mdW5jdGlvbigpe3ZhciBlLHQscixpPXRoaXMua2V5cyxvPXRoaXMudmFsdWVzLHM9
KDAsbi5kaWN0KSgpCitmb3IoZT0wO2U8aS5sZW5ndGg7ZSsrKXQ9aVtlXSxyPW9bZV0sc1t0XT1y
LnZhbHVlKCkKK3JldHVybiBzfSwoMCx0LmNyZWF0ZUNsYXNzKShlLFt7a2V5OiJtYXAiLGdldDpm
dW5jdGlvbigpe3ZhciBlLHQ9dGhpcy5fbWFwCitpZih0KXJldHVybiB0Cit0PXRoaXMuX21hcD0o
MCxuLmRpY3QpKCkKK3ZhciByPXRoaXMua2V5cyxpPXRoaXMudmFsdWVzLG89dGhpcy5sZW5ndGgK
K2ZvcihlPTA7ZTxvO2UrKyl0W3JbZV1dPWlbZV0KK3JldHVybiB0fX1dKSxlfSgpLEJlPW5ldyhm
dW5jdGlvbihlKXtmdW5jdGlvbiBuKCl7cmV0dXJuKDAsdC5wb3NzaWJsZUNvbnN0cnVjdG9yUmV0
dXJuKSh0aGlzLGUuY2FsbCh0aGlzLFBlLFBlLGplKSl9cmV0dXJuKDAsdC5pbmhlcml0cykobixl
KSxuLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gbWV9LG4ucHJvdG90eXBlLmhhcz1m
dW5jdGlvbigpe3JldHVybiExfSxuLnByb3RvdHlwZS52YWx1ZT1mdW5jdGlvbigpe3JldHVybiBq
ZX0sbn0oVWUpKSxxZT17ZGVmYXVsdDpudWxsLGludmVyc2U6bnVsbH0sSGU9ZnVuY3Rpb24oKXtm
dW5jdGlvbiBlKGUsdCxuKXt0aGlzLnBvc2l0aW9uYWw9ZSx0aGlzLm5hbWVkPXQsdGhpcy5ibG9j
a3M9bix0aGlzLnR5cGU9ImNvbXBpbGVkLWFyZ3MifXJldHVybiBlLmNyZWF0ZT1mdW5jdGlvbihl
LHQsbil7cmV0dXJuIGU9PT1MZSYmdD09PXplJiZuPT09cWU/dGhpcy5lbXB0eSgpOm5ldyB0aGlz
KGUsdCxuKX0sZS5lbXB0eT1mdW5jdGlvbigpe3JldHVybiBWZX0sZS5wcm90b3R5cGUuZXZhbHVh
dGU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5wb3NpdGlvbmFsLG49dGhpcy5uYW1lZCxyPXRoaXMu
YmxvY2tzCityZXR1cm4gV2UuY3JlYXRlKHQuZXZhbHVhdGUoZSksbi5ldmFsdWF0ZShlKSxyKX0s
ZX0oKSxWZT1uZXcoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbigpe3JldHVybigwLHQucG9zc2libGVD
b25zdHJ1Y3RvclJldHVybikodGhpcyxlLmNhbGwodGhpcyxMZSx6ZSxxZSkpfXJldHVybigwLHQu
aW5oZXJpdHMpKG4sZSksbi5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gJGV9
LG59KEhlKSksV2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuKXt0aGlzLnBvc2l0aW9uYWw9
ZSx0aGlzLm5hbWVkPXQsdGhpcy5ibG9ja3M9bix0aGlzLnRhZz0oMCxyLmNvbWJpbmVUYWdnZWQp
KFtlLHRdKX1yZXR1cm4gZS5lbXB0eT1mdW5jdGlvbigpe3JldHVybiAkZX0sZS5jcmVhdGU9ZnVu
Y3Rpb24oZSx0LG4pe3JldHVybiBuZXcgdGhpcyhlLHQsbil9LGUucG9zaXRpb25hbD1mdW5jdGlv
bihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1
bWVudHNbMV06cWUKK3JldHVybiBuZXcgdGhpcyhJZS5jcmVhdGUoZSksQmUsdCl9LGUubmFtZWQ9
ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNb
MV0/YXJndW1lbnRzWzFdOnFlCityZXR1cm4gbmV3IHRoaXMoTWUsVWUuY3JlYXRlKGUpLHQpfSxl
fSgpLCRlPW5ldyBXZShNZSxCZSxxZSkKK0VlLmFkZCgyMixmdW5jdGlvbihlKXt2YXIgdD1lLmZy
YW1lLmdldE9wZXJhbmQoKSxuPSgwLHIuaXNDb25zdCkodCk/dm9pZCAwOm5ldyByLlJlZmVyZW5j
ZUNhY2hlKHQpLGk9bj9uLnBlZWsoKTp0LnZhbHVlKCkKK2UuZnJhbWUuc2V0SW1tZWRpYXRlKGkp
LG4mJmUudXBkYXRlV2l0aChuZXcgU2UobikpfSksRWUuYWRkKDIzLGZ1bmN0aW9uKGUsdCl7dmFy
IG49dC5vcDEscj1lLmNvbnN0YW50cy5nZXRPdGhlcihuKQorZS5mcmFtZS5zZXRJbW1lZGlhdGUo
cil9KSxFZS5hZGQoMjQsZnVuY3Rpb24oZSx0KXt2YXIgbj10Lm9wMSxyPXQub3AyLGk9ZS5jb25z
dGFudHMuZ2V0RXhwcmVzc2lvbihuKSxvPWUuY29uc3RhbnRzLmdldEJsb2NrKHIpLHM9ZS5mcmFt
ZS5nZXRJbW1lZGlhdGUoKSxhPWUucHVzaER5bmFtaWNTY29wZSgpLHU9ZS5zY29wZSgpLGw9cy5t
YW5hZ2VyLGM9bC5wcmVwYXJlQXJncyhzLGkuZXZhbHVhdGUoZSksYSkscD0hIWMuYmxvY2tzLmRl
ZmF1bHQsZj1sLmNyZWF0ZShlLmVudixzLGMsYSxlLmdldFNlbGYoKSxwKSxoPWwuZ2V0RGVzdHJ1
Y3RvcihmKQoraCYmZS5uZXdEZXN0cm95YWJsZShoKQordmFyIGQ9bC5sYXlvdXRGb3IocyxmLGUu
ZW52KSxtPWwuZ2V0U2VsZihmKQorZS5iZWdpbkNhY2hlR3JvdXAoKSxlLnN0YWNrKCkucHVzaFNp
bXBsZUJsb2NrKCksZS5wdXNoUm9vdFNjb3BlKG0sZC5zeW1ib2xzKSxlLmludm9rZUxheW91dChj
LGQsdSxmLGwsbyksZS51cGRhdGVXaXRoKG5ldyBHZShzLm5hbWUsZixsLGMsYSkpfSksRWUuYWRk
KDI1LGZ1bmN0aW9uKGUpe3ZhciB0PWUuZnJhbWUuZ2V0TWFuYWdlcigpLG49ZS5mcmFtZS5nZXRD
b21wb25lbnQoKSxyPSJEaWRDcmVhdGVFbGVtZW50T3Bjb2RlI2V2YWx1YXRlIgordC5kaWRDcmVh
dGVFbGVtZW50KG4sZS5zdGFjaygpLmV4cGVjdENvbnN0cnVjdGluZyhyKSxlLnN0YWNrKCkuZXhw
ZWN0T3BlcmF0aW9ucyhyKSl9KSxFZS5hZGQoMjYsZnVuY3Rpb24oZSl7dmFyIHQ9ZS5mcmFtZS5n
ZXRTaGFkb3coKQorZS5wdXNoQ2FsbGVyU2NvcGUoKSx0JiZlLmludm9rZUJsb2NrKHQsV2UuZW1w
dHkoKSl9KSxFZS5hZGQoMjcsZnVuY3Rpb24oZSl7dmFyIHQ9ZS5mcmFtZS5nZXRNYW5hZ2VyKCks
bj1lLmZyYW1lLmdldENvbXBvbmVudCgpLHI9ZS5zdGFjaygpLnBvcEJsb2NrKCkKK3QuZGlkUmVu
ZGVyTGF5b3V0KG4sciksZS5lbnYuZGlkQ3JlYXRlKG4sdCksZS51cGRhdGVXaXRoKG5ldyBLZSh0
LG4scikpfSksRWUuYWRkKDI4LGZ1bmN0aW9uKGUpe2UucG9wU2NvcGUoKSxlLnBvcER5bmFtaWNT
Y29wZSgpLGUuY29tbWl0Q2FjaGVHcm91cCgpfSkKK3ZhciBHZT1mdW5jdGlvbihlKXtmdW5jdGlv
biBuKG4saSxvLHMsYSl7dmFyIHU9KDAsdC5wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKSh0aGlz
LGUuY2FsbCh0aGlzKSkKK3UubmFtZT1uLHUuY29tcG9uZW50PWksdS5tYW5hZ2VyPW8sdS5hcmdz
PXMsdS5keW5hbWljU2NvcGU9YSx1LnR5cGU9InVwZGF0ZS1jb21wb25lbnQiCit2YXIgbD1vLmdl
dFRhZyhpKQorcmV0dXJuIHUudGFnPWw/KDAsci5jb21iaW5lKShbcy50YWcsbF0pOnMudGFnLHV9
cmV0dXJuKDAsdC5pbmhlcml0cykobixlKSxuLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbigp
e3ZhciBlPXRoaXMuY29tcG9uZW50LHQ9dGhpcy5tYW5hZ2VyLG49dGhpcy5hcmdzLHI9dGhpcy5k
eW5hbWljU2NvcGUKK3QudXBkYXRlKGUsbixyKX0sbi5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9u
KCl7cmV0dXJue2d1aWQ6dGhpcy5fZ3VpZCx0eXBlOnRoaXMudHlwZSxhcmdzOltKU09OLnN0cmlu
Z2lmeSh0aGlzLm5hbWUpXX19LG59KENlKSxLZT1mdW5jdGlvbihlKXtmdW5jdGlvbiBuKG4saSxv
KXt2YXIgcz0oMCx0LnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4pKHRoaXMsZS5jYWxsKHRoaXMp
KQorcmV0dXJuIHMubWFuYWdlcj1uLHMuY29tcG9uZW50PWkscy5ib3VuZHM9byxzLnR5cGU9ImRp
ZC11cGRhdGUtbGF5b3V0IixzLnRhZz1yLkNPTlNUQU5UX1RBRyxzfXJldHVybigwLHQuaW5oZXJp
dHMpKG4sZSksbi5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5tYW5h
Z2VyLG49dGhpcy5jb21wb25lbnQscj10aGlzLmJvdW5kcwordC5kaWRVcGRhdGVMYXlvdXQobixy
KSxlLmVudi5kaWRVcGRhdGUobix0KX0sbn0oQ2UpLFFlPWZ1bmN0aW9uKGUsdCl7dGhpcy5lbGVt
ZW50PWUsdGhpcy5uZXh0U2libGluZz10fSxZZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG4p
e3RoaXMucGFyZW50Tm9kZT1lLHRoaXMuZmlyc3Q9dCx0aGlzLmxhc3Q9bn1yZXR1cm4gZS5wcm90
b3R5cGUucGFyZW50RWxlbWVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcmVudE5vZGV9LGUu
cHJvdG90eXBlLmZpcnN0Tm9kZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZpcnN0fSxlLnByb3Rv
dHlwZS5sYXN0Tm9kZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxhc3R9LGV9KCksSmU9ZnVuY3Rp
b24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5wYXJlbnROb2RlPWUsdGhpcy5ub2RlPXR9cmV0dXJu
IGUucHJvdG90eXBlLnBhcmVudEVsZW1lbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJlbnRO
b2RlfSxlLnByb3RvdHlwZS5maXJzdE5vZGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlfSxl
LnByb3RvdHlwZS5sYXN0Tm9kZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGV9LGV9KCksWGU9
ZnVuY3Rpb24oZSl7dGhpcy5ib3VuZHM9ZX0sWmU9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbihuLHIp
e3ZhciBpPSgwLHQucG9zc2libGVDb25zdHJ1Y3RvclJldHVybikodGhpcyxlLmNhbGwodGhpcyxu
KSkKK3JldHVybiBpLnRleHROb2RlPXIsaX1yZXR1cm4oMCx0LmluaGVyaXRzKShuLGUpLG4uaW5z
ZXJ0PWZ1bmN0aW9uKGUsdCxyKXt2YXIgaT1lLmNyZWF0ZVRleHROb2RlKHIpCityZXR1cm4gZS5p
bnNlcnRCZWZvcmUodC5lbGVtZW50LGksdC5uZXh0U2libGluZyksbmV3IG4obmV3IEplKHQuZWxl
bWVudCxpKSxpKX0sbi5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGUsdCl7dmFyIG4KK3JldHVy
biEhYyh0KSYmKG49dGhpcy50ZXh0Tm9kZSxuLm5vZGVWYWx1ZT10LCEwKX0sbn0oWGUpLGV0PWZ1
bmN0aW9uKGUpe2Z1bmN0aW9uIG4oKXtyZXR1cm4oMCx0LnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1
cm4pKHRoaXMsZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXJldHVybigwLHQuaW5oZXJpdHMpKG4s
ZSksbi5pbnNlcnQ9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBuZXcgbihlLmluc2VydEhUTUxCZWZv
cmUodC5lbGVtZW50LHIsdC5uZXh0U2libGluZykpfSxuLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rp
b24oZSx0KXt2YXIgbixyLGkKK3JldHVybiEhYyh0KSYmKG49dGhpcy5ib3VuZHMscj1uLnBhcmVu
dEVsZW1lbnQoKSxpPWEobiksdGhpcy5ib3VuZHM9ZS5pbnNlcnRIVE1MQmVmb3JlKHIsaSx0KSwh
MCl9LG59KFhlKSx0dD1mdW5jdGlvbihlKXtmdW5jdGlvbiBuKG4scil7dmFyIGk9KDAsdC5wb3Nz
aWJsZUNvbnN0cnVjdG9yUmV0dXJuKSh0aGlzLGUuY2FsbCh0aGlzLG4pKQorcmV0dXJuIGkubGFz
dFN0cmluZ1ZhbHVlPXIsaX1yZXR1cm4oMCx0LmluaGVyaXRzKShuLGUpLG4uaW5zZXJ0PWZ1bmN0
aW9uKGUsdCxyKXt2YXIgaT1yLnRvSFRNTCgpCityZXR1cm4gbmV3IG4oZS5pbnNlcnRIVE1MQmVm
b3JlKHQuZWxlbWVudCxpLHQubmV4dFNpYmxpbmcpLGkpfSxuLnByb3RvdHlwZS51cGRhdGU9ZnVu
Y3Rpb24oZSx0KXt2YXIgbixyLGksbworcmV0dXJuISF1KHQpJiYobj10LnRvSFRNTCgpLG4hPT10
aGlzLmxhc3RTdHJpbmdWYWx1ZSYmKHI9dGhpcy5ib3VuZHMsaT1yLnBhcmVudEVsZW1lbnQoKSxv
PWEociksdGhpcy5ib3VuZHM9ZS5pbnNlcnRIVE1MQmVmb3JlKGksbyxuKSx0aGlzLmxhc3RTdHJp
bmdWYWx1ZT1uKSwhMCl9LG59KFhlKSxudD1mdW5jdGlvbihlKXtmdW5jdGlvbiBuKCl7cmV0dXJu
KDAsdC5wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKSh0aGlzLGUuYXBwbHkodGhpcyxhcmd1bWVu
dHMpKX1yZXR1cm4oMCx0LmluaGVyaXRzKShuLGUpLG4uaW5zZXJ0PWZ1bmN0aW9uKGUsdCxyKXty
ZXR1cm4gZS5pbnNlcnRCZWZvcmUodC5lbGVtZW50LHIsdC5uZXh0U2libGluZyksbmV3IG4obyh0
LmVsZW1lbnQscikpfSxuLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGkK
K3JldHVybiEhbCh0KSYmKG49dGhpcy5ib3VuZHMscj1uLnBhcmVudEVsZW1lbnQoKSxpPWEobiks
dGhpcy5ib3VuZHM9ZS5pbnNlcnROb2RlQmVmb3JlKHIsdCxpKSwhMCl9LG59KFhlKSxydD0iQ09N
UE9ORU5UIERFRklOSVRJT04gW2lkPWU1OWM3NTRlLTYxZWItNDM5Mi04YzRhLTJjMGFjNzJiZmNk
NF0iLGl0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe31yZXR1cm4gZS5wcm90b3R5cGUudG9KU09O
PWZ1bmN0aW9uKCl7cmV0dXJuIlVOSU1QTDogIit0aGlzLnR5cGUudG9VcHBlckNhc2UoKX0sZX0o
KQorRWUuYWRkKDI5LGZ1bmN0aW9uKGUsdCl7dmFyIG49dC5vcDEKK2Uuc3RhY2soKS5hcHBlbmRU
ZXh0KGUuY29uc3RhbnRzLmdldFN0cmluZyhuKSl9KSxFZS5hZGQoMzAsZnVuY3Rpb24oZSx0KXt2
YXIgbj10Lm9wMQorZS5zdGFjaygpLmFwcGVuZENvbW1lbnQoZS5jb25zdGFudHMuZ2V0U3RyaW5n
KG4pKX0pLEVlLmFkZCgzMixmdW5jdGlvbihlLHQpe3ZhciBuPXQub3AxCitlLnN0YWNrKCkub3Bl
bkVsZW1lbnQoZS5jb25zdGFudHMuZ2V0U3RyaW5nKG4pKX0pLEVlLmFkZCgzMyxmdW5jdGlvbihl
KXt2YXIgdD1lLmZyYW1lLmdldE9wZXJhbmQoKSxuPSgwLHIuaXNDb25zdCkodCk/dm9pZCAwOm5l
dyByLlJlZmVyZW5jZUNhY2hlKHQpLGk9bj9uLnBlZWsoKTp0LnZhbHVlKCkKK2Uuc3RhY2soKS5w
dXNoUmVtb3RlRWxlbWVudChpKSxuJiZlLnVwZGF0ZVdpdGgobmV3IFNlKG4pKX0pLEVlLmFkZCgz
NCxmdW5jdGlvbihlKXtyZXR1cm4gZS5zdGFjaygpLnBvcFJlbW90ZUVsZW1lbnQoKX0pLEVlLmFk
ZCgzNSxmdW5jdGlvbihlLHQpe3ZhciBuPXQub3AxLHI9ZS5jb25zdGFudHMuZ2V0U3RyaW5nKG4p
CitlLnN0YWNrKCkub3BlbkVsZW1lbnQocixuZXcgdXQoZS5lbnYpKX0pLEVlLmFkZCgzNixmdW5j
dGlvbihlKXt2YXIgdD1lLmZyYW1lLmdldE9wZXJhbmQoKS52YWx1ZSgpCitlLnN0YWNrKCkub3Bl
bkVsZW1lbnQodCl9KQordmFyIG90PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMubGlzdD1u
dWxsLHRoaXMuaXNDb25zdD0hMH1yZXR1cm4gZS5wcm90b3R5cGUuYXBwZW5kPWZ1bmN0aW9uKGUp
e3ZhciB0PXRoaXMubGlzdCxuPXRoaXMuaXNDb25zdAorbnVsbD09PXQmJih0PXRoaXMubGlzdD1b
XSksdC5wdXNoKGUpLHRoaXMuaXNDb25zdD1uJiYoMCxyLmlzQ29uc3QpKGUpfSxlLnByb3RvdHlw
ZS50b1JlZmVyZW5jZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMubGlzdCx0PXRoaXMuaXNDb25zdAor
cmV0dXJuIGU/dD9mZS5jcmVhdGUoZChlKSk6bmV3IHN0KGUpOmdlfSxlfSgpLHN0PWZ1bmN0aW9u
KGUpe2Z1bmN0aW9uIG4obil7dmFyIGk9KDAsdC5wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKSh0
aGlzLGUuY2FsbCh0aGlzKSkKK3JldHVybiBpLmxpc3Q9W10saS50YWc9KDAsci5jb21iaW5lVGFn
Z2VkKShuKSxpLmxpc3Q9bixpfXJldHVybigwLHQuaW5oZXJpdHMpKG4sZSksbi5wcm90b3R5cGUu
Y29tcHV0ZT1mdW5jdGlvbigpe3JldHVybiBkKHRoaXMubGlzdCl9LG59KHIuQ2FjaGVkUmVmZXJl
bmNlKSxhdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5lbnY9ZSx0aGlzLm9wY29kZXM9
bnVsbCx0aGlzLmNsYXNzTGlzdD1udWxsfXJldHVybiBlLnByb3RvdHlwZS5hZGRTdGF0aWNBdHRy
aWJ1dGU9ZnVuY3Rpb24oZSx0LG4peyJjbGFzcyI9PT10P3RoaXMuYWRkQ2xhc3MoZmUuY3JlYXRl
KG4pKTp0aGlzLmVudi5nZXRBcHBlbmRPcGVyYXRpb25zKCkuc2V0QXR0cmlidXRlKGUsdCxuKX0s
ZS5wcm90b3R5cGUuYWRkU3RhdGljQXR0cmlidXRlTlM9ZnVuY3Rpb24oZSx0LG4scil7dGhpcy5l
bnYuZ2V0QXBwZW5kT3BlcmF0aW9ucygpLnNldEF0dHJpYnV0ZShlLG4scix0KX0sZS5wcm90b3R5
cGUuYWRkRHluYW1pY0F0dHJpYnV0ZT1mdW5jdGlvbihlLHQsbixyKXt2YXIgaSxvCisiY2xhc3Mi
PT09dD90aGlzLmFkZENsYXNzKG4pOihpPXRoaXMuZW52LmF0dHJpYnV0ZUZvcihlLHQsciksbz1u
ZXcgcHQoZSxpLHQsbiksdGhpcy5hZGRBdHRyaWJ1dGUobykpfSxlLnByb3RvdHlwZS5hZGREeW5h
bWljQXR0cmlidXRlTlM9ZnVuY3Rpb24oZSx0LG4scixpKXt2YXIgbz10aGlzLmVudi5hdHRyaWJ1
dGVGb3IoZSxuLGksdCkscz1uZXcgcHQoZSxvLG4scix0KQordGhpcy5hZGRBdHRyaWJ1dGUocyl9
LGUucHJvdG90eXBlLmZsdXNoPWZ1bmN0aW9uKGUsdCl7dmFyIG4scixpLG8scz10LmVudixhPXRo
aXMub3Bjb2Rlcyx1PXRoaXMuY2xhc3NMaXN0Citmb3Iobj0wO2EmJm48YS5sZW5ndGg7bisrKXQu
dXBkYXRlV2l0aChhW25dKQordSYmKHI9cy5hdHRyaWJ1dGVGb3IoZSwiY2xhc3MiLCExKSxpPW5l
dyBwdChlLHIsImNsYXNzIix1LnRvUmVmZXJlbmNlKCkpLChvPWkuZmx1c2gocykpJiZ0LnVwZGF0
ZVdpdGgobykpLHRoaXMub3Bjb2Rlcz1udWxsLHRoaXMuY2xhc3NMaXN0PW51bGx9LGUucHJvdG90
eXBlLmFkZENsYXNzPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuY2xhc3NMaXN0Cit0fHwodD10aGlz
LmNsYXNzTGlzdD1uZXcgb3QpLHQuYXBwZW5kKGUpfSxlLnByb3RvdHlwZS5hZGRBdHRyaWJ1dGU9
ZnVuY3Rpb24oZSl7dmFyIHQsbj1lLmZsdXNoKHRoaXMuZW52KQorbiYmKHQ9dGhpcy5vcGNvZGVz
LHR8fCh0PXRoaXMub3Bjb2Rlcz1bXSksdC5wdXNoKG4pKX0sZX0oKSx1dD1mdW5jdGlvbigpe2Z1
bmN0aW9uIGUoZSl7dGhpcy5lbnY9ZSx0aGlzLmF0dHJpYnV0ZU5hbWVzPW51bGwsdGhpcy5hdHRy
aWJ1dGVzPW51bGwsdGhpcy5jbGFzc0xpc3Q9bnVsbH1yZXR1cm4gZS5wcm90b3R5cGUuYWRkU3Rh
dGljQXR0cmlidXRlPWZ1bmN0aW9uKGUsdCxuKXsiY2xhc3MiPT09dD90aGlzLmFkZENsYXNzKGZl
LmNyZWF0ZShuKSk6dGhpcy5zaG91bGRBZGRBdHRyaWJ1dGUodCkmJnRoaXMuYWRkQXR0cmlidXRl
KHQsbmV3IGN0KGUsdCxuKSl9LGUucHJvdG90eXBlLmFkZFN0YXRpY0F0dHJpYnV0ZU5TPWZ1bmN0
aW9uKGUsdCxuLHIpe3RoaXMuc2hvdWxkQWRkQXR0cmlidXRlKG4pJiZ0aGlzLmFkZEF0dHJpYnV0
ZShuLG5ldyBjdChlLG4scix0KSl9LGUucHJvdG90eXBlLmFkZER5bmFtaWNBdHRyaWJ1dGU9ZnVu
Y3Rpb24oZSx0LG4scil7dmFyIGksbworImNsYXNzIj09PXQ/dGhpcy5hZGRDbGFzcyhuKTp0aGlz
LnNob3VsZEFkZEF0dHJpYnV0ZSh0KSYmKGk9dGhpcy5lbnYuYXR0cmlidXRlRm9yKGUsdCxyKSxv
PW5ldyBwdChlLGksdCxuKSx0aGlzLmFkZEF0dHJpYnV0ZSh0LG8pKX0sZS5wcm90b3R5cGUuYWRk
RHluYW1pY0F0dHJpYnV0ZU5TPWZ1bmN0aW9uKGUsdCxuLHIsaSl7dmFyIG8scwordGhpcy5zaG91
bGRBZGRBdHRyaWJ1dGUobikmJihvPXRoaXMuZW52LmF0dHJpYnV0ZUZvcihlLG4saSx0KSxzPW5l
dyBwdChlLG8sbixyLHQpLHRoaXMuYWRkQXR0cmlidXRlKG4scykpfSxlLnByb3RvdHlwZS5mbHVz
aD1mdW5jdGlvbihlLHQpe3ZhciBuLHIsaSxvLHMsYT10aGlzLmVudix1PXRoaXMuYXR0cmlidXRl
cyxsPXRoaXMuY2xhc3NMaXN0Citmb3Iobj0wO3UmJm48dS5sZW5ndGg7bisrKShyPXVbbl0uZmx1
c2goYSkpJiZ0LnVwZGF0ZVdpdGgocikKK2wmJihpPWEuYXR0cmlidXRlRm9yKGUsImNsYXNzIiwh
MSksbz1uZXcgcHQoZSxpLCJjbGFzcyIsbC50b1JlZmVyZW5jZSgpKSwocz1vLmZsdXNoKGEpKSYm
dC51cGRhdGVXaXRoKHMpKX0sZS5wcm90b3R5cGUuc2hvdWxkQWRkQXR0cmlidXRlPWZ1bmN0aW9u
KGUpe3JldHVybiF0aGlzLmF0dHJpYnV0ZU5hbWVzfHwtMT09PXRoaXMuYXR0cmlidXRlTmFtZXMu
aW5kZXhPZihlKX0sZS5wcm90b3R5cGUuYWRkQ2xhc3M9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5j
bGFzc0xpc3QKK3R8fCh0PXRoaXMuY2xhc3NMaXN0PW5ldyBvdCksdC5hcHBlbmQoZSl9LGUucHJv
dG90eXBlLmFkZEF0dHJpYnV0ZT1mdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuYXR0cmlidXRlTmFt
ZXMsaT10aGlzLmF0dHJpYnV0ZXMKK3J8fChyPXRoaXMuYXR0cmlidXRlTmFtZXM9W10saT10aGlz
LmF0dHJpYnV0ZXM9W10pLHIucHVzaChlKSwoMCxuLnVud3JhcCkoaSkucHVzaCh0KX0sZX0oKQor
RWUuYWRkKDM3LGZ1bmN0aW9uKGUpe3ZhciB0PWUuc3RhY2soKSxuPSJGbHVzaEVsZW1lbnRPcGNv
ZGUjZXZhbHVhdGUiCit0LmV4cGVjdE9wZXJhdGlvbnMobikuZmx1c2godC5leHBlY3RDb25zdHJ1
Y3RpbmcobiksZSksdC5mbHVzaEVsZW1lbnQoKX0pLEVlLmFkZCgzOCxmdW5jdGlvbihlKXtyZXR1
cm4gZS5zdGFjaygpLmNsb3NlRWxlbWVudCgpfSksRWUuYWRkKDM5LGZ1bmN0aW9uKGUpe3JldHVy
biBlLnN0YWNrKCkucG9wRWxlbWVudCgpfSksRWUuYWRkKDQwLGZ1bmN0aW9uKGUsdCl7dmFyIG4s
cj10Lm9wMSxpPXQub3AyLG89dC5vcDMscz1lLmNvbnN0YW50cy5nZXRTdHJpbmcociksYT1lLmNv
bnN0YW50cy5nZXRTdHJpbmcoaSkKK28/KG49ZS5jb25zdGFudHMuZ2V0U3RyaW5nKG8pLGUuc3Rh
Y2soKS5zZXRTdGF0aWNBdHRyaWJ1dGVOUyhuLHMsYSkpOmUuc3RhY2soKS5zZXRTdGF0aWNBdHRy
aWJ1dGUocyxhKX0pLEVlLmFkZCg0MSxmdW5jdGlvbihlLHQpe3ZhciBuPSh0Lm9wMSx0Lm9wMiks
cj10Lm9wMyxpPWUuY29uc3RhbnRzLmdldE90aGVyKG4pLG89ZS5jb25zdGFudHMuZ2V0RXhwcmVz
c2lvbihyKSxzPWUuc3RhY2soKSxhPXMuY29uc3RydWN0aW5nLHU9cy51cGRhdGVPcGVyYXRpb25z
LGw9by5ldmFsdWF0ZShlKSxjPWUuZHluYW1pY1Njb3BlKCkscD1pLmNyZWF0ZShhLGwsYyx1KQor
ZS5lbnYuc2NoZWR1bGVJbnN0YWxsTW9kaWZpZXIocCxpKQordmFyIGY9aS5nZXREZXN0cnVjdG9y
KHApCitmJiZlLm5ld0Rlc3Ryb3lhYmxlKGYpLGUudXBkYXRlV2l0aChuZXcgbHQoaSxwLGwpKX0p
Cit2YXIgbHQ9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbihuLHIsaSl7dmFyIG89KDAsdC5wb3NzaWJs
ZUNvbnN0cnVjdG9yUmV0dXJuKSh0aGlzLGUuY2FsbCh0aGlzKSkKK3JldHVybiBvLm1hbmFnZXI9
bixvLm1vZGlmaWVyPXIsby5hcmdzPWksby50eXBlPSJ1cGRhdGUtbW9kaWZpZXIiLG8udGFnPWku
dGFnLG8ubGFzdFVwZGF0ZWQ9aS50YWcudmFsdWUoKSxvfXJldHVybigwLHQuaW5oZXJpdHMpKG4s
ZSksbi5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5tYW5hZ2VyLG49
dGhpcy5tb2RpZmllcixyPXRoaXMudGFnLGk9dGhpcy5sYXN0VXBkYXRlZAorci52YWxpZGF0ZShp
KXx8KGUuZW52LnNjaGVkdWxlVXBkYXRlTW9kaWZpZXIobix0KSx0aGlzLmxhc3RVcGRhdGVkPXIu
dmFsdWUoKSl9LG4ucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybntndWlkOnRoaXMu
X2d1aWQsdHlwZTp0aGlzLnR5cGUsYXJnczpbSlNPTi5zdHJpbmdpZnkodGhpcy5hcmdzKV19fSxu
fShDZSksY3Q9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuLHIpe3RoaXMuZWxlbWVudD1lLHRo
aXMubmFtZT10LHRoaXMudmFsdWU9bix0aGlzLm5hbWVzcGFjZT1yfXJldHVybiBlLnByb3RvdHlw
ZS5mbHVzaD1mdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRBcHBlbmRPcGVyYXRpb25zKCkuc2V0QXR0
cmlidXRlKHRoaXMuZWxlbWVudCx0aGlzLm5hbWUsdGhpcy52YWx1ZSx0aGlzLm5hbWVzcGFjZSks
bnVsbH0sZX0oKSxwdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG4scixpKXt0aGlzLmVsZW1l
bnQ9ZSx0aGlzLmF0dHJpYnV0ZU1hbmFnZXI9dCx0aGlzLm5hbWU9bix0aGlzLnJlZmVyZW5jZT1y
LHRoaXMubmFtZXNwYWNlPWksdGhpcy5jYWNoZT1udWxsLHRoaXMudGFnPXIudGFnfXJldHVybiBl
LnByb3RvdHlwZS5wYXRjaD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmVsZW1lbnQsaT10aGlzLmNh
Y2hlLG89KDAsbi5leHBlY3QpKGksIm11c3QgcGF0Y2ggYWZ0ZXIgZmx1c2giKS5yZXZhbGlkYXRl
KCk7KDAsci5pc01vZGlmaWVkKShvKSYmdGhpcy5hdHRyaWJ1dGVNYW5hZ2VyLnVwZGF0ZUF0dHJp
YnV0ZShlLHQsbyx0aGlzLm5hbWVzcGFjZSl9LGUucHJvdG90eXBlLmZsdXNoPWZ1bmN0aW9uKGUp
e3ZhciB0LG4saSxvPXRoaXMucmVmZXJlbmNlLHM9dGhpcy5lbGVtZW50CityZXR1cm4oMCxyLmlz
Q29uc3QpKG8pPyh0PW8udmFsdWUoKSx0aGlzLmF0dHJpYnV0ZU1hbmFnZXIuc2V0QXR0cmlidXRl
KGUscyx0LHRoaXMubmFtZXNwYWNlKSxudWxsKToobj10aGlzLmNhY2hlPW5ldyByLlJlZmVyZW5j
ZUNhY2hlKG8pLGk9bi5wZWVrKCksdGhpcy5hdHRyaWJ1dGVNYW5hZ2VyLnNldEF0dHJpYnV0ZShl
LHMsaSx0aGlzLm5hbWVzcGFjZSksbmV3IGZ0KHRoaXMpKX0sZS5wcm90b3R5cGUudG9KU09OPWZ1
bmN0aW9uKCl7dmFyIGU9dGhpcy5lbGVtZW50LHQ9dGhpcy5uYW1lc3BhY2Uscj10aGlzLm5hbWUs
aT10aGlzLmNhY2hlLG89bShlKSxzPSgwLG4uZXhwZWN0KShpLCJtdXN0IHNlcmlhbGl6ZSBhZnRl
ciBmbHVzaCIpLnBlZWsoKQorcmV0dXJuIHQ/e2VsZW1lbnQ6byx0eXBlOiJhdHRyaWJ1dGUiLG5h
bWVzcGFjZTp0LG5hbWU6cixsYXN0VmFsdWU6c306e2VsZW1lbnQ6byx0eXBlOiJhdHRyaWJ1dGUi
LG5hbWVzcGFjZTp2b2lkIDA9PT10P251bGw6dCxuYW1lOnIsbGFzdFZhbHVlOnN9fSxlfSgpCitF
ZS5hZGQoNDIsZnVuY3Rpb24oZSx0KXt2YXIgbj10Lm9wMSxyPXQub3AyLGk9dC5vcDMsbz1lLmNv
bnN0YW50cy5nZXRTdHJpbmcobikscz1lLmNvbnN0YW50cy5nZXRTdHJpbmcociksYT1lLmZyYW1l
LmdldE9wZXJhbmQoKQorZS5zdGFjaygpLnNldER5bmFtaWNBdHRyaWJ1dGVOUyhzLG8sYSwhIWkp
fSksRWUuYWRkKDQzLGZ1bmN0aW9uKGUsdCl7dmFyIG49dC5vcDEscj10Lm9wMixpPWUuY29uc3Rh
bnRzLmdldFN0cmluZyhuKSxvPWUuZnJhbWUuZ2V0T3BlcmFuZCgpCitlLnN0YWNrKCkuc2V0RHlu
YW1pY0F0dHJpYnV0ZShpLG8sISFyKX0pCit2YXIgZnQ9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbihu
KXt2YXIgcj0oMCx0LnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4pKHRoaXMsZS5jYWxsKHRoaXMp
KQorcmV0dXJuIHIudHlwZT0icGF0Y2gtZWxlbWVudCIsci50YWc9bi50YWcsci5vcGVyYXRpb249
bixyfXJldHVybigwLHQuaW5oZXJpdHMpKG4sZSksbi5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rp
b24oZSl7dGhpcy5vcGVyYXRpb24ucGF0Y2goZS5lbnYpfSxuLnByb3RvdHlwZS50b0pTT049ZnVu
Y3Rpb24oKXtyZXR1cm57Z3VpZDp0aGlzLl9ndWlkLHR5cGU6dGhpcy50eXBlLGRldGFpbHM6dGhp
cy5vcGVyYXRpb24udG9KU09OKCl9fSxufShDZSksaHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUp
e3RoaXMubm9kZT1lfXJldHVybiBlLnByb3RvdHlwZS5maXJzdE5vZGU9ZnVuY3Rpb24oKXtyZXR1
cm4gdGhpcy5ub2RlfSxlfSgpLGR0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLm5vZGU9
ZX1yZXR1cm4gZS5wcm90b3R5cGUubGFzdE5vZGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2Rl
fSxlfSgpLG10PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLmJvdW5kcz1lfXJldHVybiBl
LnByb3RvdHlwZS5wYXJlbnRFbGVtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYm91bmRzLnBh
cmVudEVsZW1lbnQoKX0sZS5wcm90b3R5cGUuZmlyc3ROb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIHRo
aXMuYm91bmRzLmZpcnN0Tm9kZSgpfSxlLnByb3RvdHlwZS5sYXN0Tm9kZT1mdW5jdGlvbigpe3Jl
dHVybiB0aGlzLmJvdW5kcy5sYXN0Tm9kZSgpfSxlLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24o
ZSl7dGhpcy5ib3VuZHM9ZX0sZX0oKSxndD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LHIpe3Ro
aXMuY29uc3RydWN0aW5nPW51bGwsdGhpcy5vcGVyYXRpb25zPW51bGwsdGhpcy5lbGVtZW50U3Rh
Y2s9bmV3IG4uU3RhY2ssdGhpcy5uZXh0U2libGluZ1N0YWNrPW5ldyBuLlN0YWNrLHRoaXMuYmxv
Y2tTdGFjaz1uZXcgbi5TdGFjayx0aGlzLmVudj1lLHRoaXMuZG9tPWUuZ2V0QXBwZW5kT3BlcmF0
aW9ucygpLHRoaXMudXBkYXRlT3BlcmF0aW9ucz1lLmdldERPTSgpLHRoaXMuZWxlbWVudD10LHRo
aXMubmV4dFNpYmxpbmc9cix0aGlzLmRlZmF1bHRPcGVyYXRpb25zPW5ldyBhdChlKSx0aGlzLmVs
ZW1lbnRTdGFjay5wdXNoKHRoaXMuZWxlbWVudCksdGhpcy5uZXh0U2libGluZ1N0YWNrLnB1c2go
dGhpcy5uZXh0U2libGluZyl9cmV0dXJuIGUuZm9ySW5pdGlhbFJlbmRlcj1mdW5jdGlvbih0LG4s
cil7cmV0dXJuIG5ldyBlKHQsbixyKX0sZS5yZXN1bWU9ZnVuY3Rpb24odCxuLHIpe3ZhciBpPW4u
cGFyZW50RWxlbWVudCgpLG89bmV3IGUodCxpLHIpCityZXR1cm4gby5wdXNoQmxvY2tUcmFja2Vy
KG4pLG99LGUucHJvdG90eXBlLmV4cGVjdENvbnN0cnVjdGluZz1mdW5jdGlvbihlKXtyZXR1cm4o
MCxuLmV4cGVjdCkodGhpcy5jb25zdHJ1Y3RpbmcsZSsiIHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3
aGlsZSBjb25zdHJ1Y3RpbmcgYW4gZWxlbWVudCIpfSxlLnByb3RvdHlwZS5leHBlY3RPcGVyYXRp
b25zPWZ1bmN0aW9uKGUpe3JldHVybigwLG4uZXhwZWN0KSh0aGlzLm9wZXJhdGlvbnMsZSsiIHNo
b3VsZCBvbmx5IGJlIGNhbGxlZCB3aGlsZSBjb25zdHJ1Y3RpbmcgYW4gZWxlbWVudCIpfSxlLnBy
b3RvdHlwZS5ibG9jaz1mdW5jdGlvbigpe3JldHVybigwLG4uZXhwZWN0KSh0aGlzLmJsb2NrU3Rh
Y2suY3VycmVudCwiRXhwZWN0ZWQgYSBjdXJyZW50IGJsb2NrIHRyYWNrZXIiKX0sZS5wcm90b3R5
cGUucG9wRWxlbWVudD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuZWxlbWVudFN0YWNrLHQ9dGhpcy5u
ZXh0U2libGluZ1N0YWNrLHI9ZS5wb3AoKQorcmV0dXJuIHQucG9wKCksdGhpcy5lbGVtZW50PSgw
LG4uZXhwZWN0KShlLmN1cnJlbnQsImNhbid0IHBvcCBwYXN0IHRoZSBsYXN0IGVsZW1lbnQiKSx0
aGlzLm5leHRTaWJsaW5nPXQuY3VycmVudCxyfSxlLnByb3RvdHlwZS5wdXNoU2ltcGxlQmxvY2s9
ZnVuY3Rpb24oKXt2YXIgZT1uZXcgeXQodGhpcy5lbGVtZW50KQorcmV0dXJuIHRoaXMucHVzaEJs
b2NrVHJhY2tlcihlKSxlfSxlLnByb3RvdHlwZS5wdXNoVXBkYXRhYmxlQmxvY2s9ZnVuY3Rpb24o
KXt2YXIgZT1uZXcgYnQodGhpcy5lbGVtZW50KQorcmV0dXJuIHRoaXMucHVzaEJsb2NrVHJhY2tl
cihlKSxlfSxlLnByb3RvdHlwZS5wdXNoQmxvY2tUcmFja2VyPWZ1bmN0aW9uKGUpe3ZhciB0PWFy
Z3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV0sbj10
aGlzLmJsb2NrU3RhY2suY3VycmVudAorcmV0dXJuIG51bGwhPT1uJiYobi5uZXdEZXN0cm95YWJs
ZShlKSx0fHxuLm5ld0JvdW5kcyhlKSksdGhpcy5ibG9ja1N0YWNrLnB1c2goZSksZX0sZS5wcm90
b3R5cGUucHVzaEJsb2NrTGlzdD1mdW5jdGlvbihlKXt2YXIgdD1uZXcgX3QodGhpcy5lbGVtZW50
LGUpLG49dGhpcy5ibG9ja1N0YWNrLmN1cnJlbnQKK3JldHVybiBudWxsIT09biYmKG4ubmV3RGVz
dHJveWFibGUodCksbi5uZXdCb3VuZHModCkpLHRoaXMuYmxvY2tTdGFjay5wdXNoKHQpLHR9LGUu
cHJvdG90eXBlLnBvcEJsb2NrPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYmxvY2soKS5maW5hbGl6
ZSh0aGlzKSwoMCxuLmV4cGVjdCkodGhpcy5ibG9ja1N0YWNrLnBvcCgpLCJFeHBlY3RlZCBwb3BC
bG9jayB0byByZXR1cm4gYSBibG9jayIpfSxlLnByb3RvdHlwZS5vcGVuRWxlbWVudD1mdW5jdGlv
bihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1
bWVudHNbMV06dGhpcy5kZWZhdWx0T3BlcmF0aW9ucyxuPXRoaXMuZG9tLmNyZWF0ZUVsZW1lbnQo
ZSx0aGlzLmVsZW1lbnQpCityZXR1cm4gdGhpcy5jb25zdHJ1Y3Rpbmc9bix0aGlzLm9wZXJhdGlv
bnM9dCxufSxlLnByb3RvdHlwZS5mbHVzaEVsZW1lbnQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmVs
ZW1lbnQsdD0oMCxuLmV4cGVjdCkodGhpcy5jb25zdHJ1Y3RpbmcsImZsdXNoRWxlbWVudCBzaG91
bGQgb25seSBiZSBjYWxsZWQgd2hlbiBjb25zdHJ1Y3RpbmcgYW4gZWxlbWVudCIpCit0aGlzLmRv
bS5pbnNlcnRCZWZvcmUoZSx0LHRoaXMubmV4dFNpYmxpbmcpLHRoaXMuY29uc3RydWN0aW5nPW51
bGwsdGhpcy5vcGVyYXRpb25zPW51bGwsdGhpcy5wdXNoRWxlbWVudCh0KSx0aGlzLmJsb2NrKCku
b3BlbkVsZW1lbnQodCl9LGUucHJvdG90eXBlLnB1c2hSZW1vdGVFbGVtZW50PWZ1bmN0aW9uKGUp
e3RoaXMucHVzaEVsZW1lbnQoZSkKK3ZhciB0PW5ldyB2dChlKQordGhpcy5wdXNoQmxvY2tUcmFj
a2VyKHQsITApfSxlLnByb3RvdHlwZS5wb3BSZW1vdGVFbGVtZW50PWZ1bmN0aW9uKCl7dGhpcy5w
b3BCbG9jaygpLHRoaXMucG9wRWxlbWVudCgpfSxlLnByb3RvdHlwZS5wdXNoRWxlbWVudD1mdW5j
dGlvbihlKXt0aGlzLmVsZW1lbnQ9ZSx0aGlzLmVsZW1lbnRTdGFjay5wdXNoKGUpLHRoaXMubmV4
dFNpYmxpbmc9bnVsbCx0aGlzLm5leHRTaWJsaW5nU3RhY2sucHVzaChudWxsKX0sZS5wcm90b3R5
cGUubmV3RGVzdHJveWFibGU9ZnVuY3Rpb24oZSl7dGhpcy5ibG9jaygpLm5ld0Rlc3Ryb3lhYmxl
KGUpfSxlLnByb3RvdHlwZS5uZXdCb3VuZHM9ZnVuY3Rpb24oZSl7dGhpcy5ibG9jaygpLm5ld0Jv
dW5kcyhlKX0sZS5wcm90b3R5cGUuYXBwZW5kVGV4dD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmRv
bSxuPXQuY3JlYXRlVGV4dE5vZGUoZSkKK3JldHVybiB0Lmluc2VydEJlZm9yZSh0aGlzLmVsZW1l
bnQsbix0aGlzLm5leHRTaWJsaW5nKSx0aGlzLmJsb2NrKCkubmV3Tm9kZShuKSxufSxlLnByb3Rv
dHlwZS5hcHBlbmRDb21tZW50PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZG9tLG49dC5jcmVhdGVD
b21tZW50KGUpCityZXR1cm4gdC5pbnNlcnRCZWZvcmUodGhpcy5lbGVtZW50LG4sdGhpcy5uZXh0
U2libGluZyksdGhpcy5ibG9jaygpLm5ld05vZGUobiksbn0sZS5wcm90b3R5cGUuc2V0U3RhdGlj
QXR0cmlidXRlPWZ1bmN0aW9uKGUsdCl7dGhpcy5leHBlY3RPcGVyYXRpb25zKCJzZXRTdGF0aWNB
dHRyaWJ1dGUiKS5hZGRTdGF0aWNBdHRyaWJ1dGUodGhpcy5leHBlY3RDb25zdHJ1Y3RpbmcoInNl
dFN0YXRpY0F0dHJpYnV0ZSIpLGUsdCl9LGUucHJvdG90eXBlLnNldFN0YXRpY0F0dHJpYnV0ZU5T
PWZ1bmN0aW9uKGUsdCxuKXt0aGlzLmV4cGVjdE9wZXJhdGlvbnMoInNldFN0YXRpY0F0dHJpYnV0
ZU5TIikuYWRkU3RhdGljQXR0cmlidXRlTlModGhpcy5leHBlY3RDb25zdHJ1Y3RpbmcoInNldFN0
YXRpY0F0dHJpYnV0ZU5TIiksZSx0LG4pfSxlLnByb3RvdHlwZS5zZXREeW5hbWljQXR0cmlidXRl
PWZ1bmN0aW9uKGUsdCxuKXt0aGlzLmV4cGVjdE9wZXJhdGlvbnMoInNldER5bmFtaWNBdHRyaWJ1
dGUiKS5hZGREeW5hbWljQXR0cmlidXRlKHRoaXMuZXhwZWN0Q29uc3RydWN0aW5nKCJzZXREeW5h
bWljQXR0cmlidXRlIiksZSx0LG4pfSxlLnByb3RvdHlwZS5zZXREeW5hbWljQXR0cmlidXRlTlM9
ZnVuY3Rpb24oZSx0LG4scil7dGhpcy5leHBlY3RPcGVyYXRpb25zKCJzZXREeW5hbWljQXR0cmli
dXRlTlMiKS5hZGREeW5hbWljQXR0cmlidXRlTlModGhpcy5leHBlY3RDb25zdHJ1Y3RpbmcoInNl
dER5bmFtaWNBdHRyaWJ1dGVOUyIpLGUsdCxuLHIpfSxlLnByb3RvdHlwZS5jbG9zZUVsZW1lbnQ9
ZnVuY3Rpb24oKXt0aGlzLmJsb2NrKCkuY2xvc2VFbGVtZW50KCksdGhpcy5wb3BFbGVtZW50KCl9
LGV9KCkseXQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMucGFyZW50PWUsdGhpcy5maXJz
dD1udWxsLHRoaXMubGFzdD1udWxsLHRoaXMuZGVzdHJveWFibGVzPW51bGwsdGhpcy5uZXN0aW5n
PTB9cmV0dXJuIGUucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgZSx0PXRoaXMuZGVz
dHJveWFibGVzCitpZih0JiZ0Lmxlbmd0aClmb3IoZT0wO2U8dC5sZW5ndGg7ZSsrKXRbZV0uZGVz
dHJveSgpfSxlLnByb3RvdHlwZS5wYXJlbnRFbGVtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMu
cGFyZW50fSxlLnByb3RvdHlwZS5maXJzdE5vZGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maXJz
dCYmdGhpcy5maXJzdC5maXJzdE5vZGUoKX0sZS5wcm90b3R5cGUubGFzdE5vZGU9ZnVuY3Rpb24o
KXtyZXR1cm4gdGhpcy5sYXN0JiZ0aGlzLmxhc3QubGFzdE5vZGUoKX0sZS5wcm90b3R5cGUub3Bl
bkVsZW1lbnQ9ZnVuY3Rpb24oZSl7dGhpcy5uZXdOb2RlKGUpLHRoaXMubmVzdGluZysrfSxlLnBy
b3RvdHlwZS5jbG9zZUVsZW1lbnQ9ZnVuY3Rpb24oKXt0aGlzLm5lc3RpbmctLX0sZS5wcm90b3R5
cGUubmV3Tm9kZT1mdW5jdGlvbihlKXswPT09dGhpcy5uZXN0aW5nJiYodGhpcy5maXJzdHx8KHRo
aXMuZmlyc3Q9bmV3IGh0KGUpKSx0aGlzLmxhc3Q9bmV3IGR0KGUpKX0sZS5wcm90b3R5cGUubmV3
Qm91bmRzPWZ1bmN0aW9uKGUpezA9PT10aGlzLm5lc3RpbmcmJih0aGlzLmZpcnN0fHwodGhpcy5m
aXJzdD1lKSx0aGlzLmxhc3Q9ZSl9LGUucHJvdG90eXBlLm5ld0Rlc3Ryb3lhYmxlPWZ1bmN0aW9u
KGUpe3RoaXMuZGVzdHJveWFibGVzPXRoaXMuZGVzdHJveWFibGVzfHxbXSx0aGlzLmRlc3Ryb3lh
Ymxlcy5wdXNoKGUpfSxlLnByb3RvdHlwZS5maW5hbGl6ZT1mdW5jdGlvbihlKXt0aGlzLmZpcnN0
fHxlLmFwcGVuZENvbW1lbnQoIiIpfSxlfSgpLHZ0PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4oKXty
ZXR1cm4oMCx0LnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4pKHRoaXMsZS5hcHBseSh0aGlzLGFy
Z3VtZW50cykpfXJldHVybigwLHQuaW5oZXJpdHMpKG4sZSksbi5wcm90b3R5cGUuZGVzdHJveT1m
dW5jdGlvbigpe2UucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKSxhKHRoaXMpfSxufSh5dCks
YnQ9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbigpe3JldHVybigwLHQucG9zc2libGVDb25zdHJ1Y3Rv
clJldHVybikodGhpcyxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9cmV0dXJuKDAsdC5pbmhlcml0
cykobixlKSxuLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbihlKXt2YXIgdCxuPXRoaXMuZGVzdHJv
eWFibGVzCitpZihuJiZuLmxlbmd0aClmb3IodD0wO3Q8bi5sZW5ndGg7dCsrKWUuZGlkRGVzdHJv
eShuW3RdKQordmFyIHI9YSh0aGlzKQorcmV0dXJuIHRoaXMuZGVzdHJveWFibGVzPW51bGwsdGhp
cy5maXJzdD1udWxsLHRoaXMubGFzdD1udWxsLHJ9LG59KHl0KSxfdD1mdW5jdGlvbigpe2Z1bmN0
aW9uIGUoZSx0KXt0aGlzLnBhcmVudD1lLHRoaXMuYm91bmRMaXN0PXQsdGhpcy5wYXJlbnQ9ZSx0
aGlzLmJvdW5kTGlzdD10fXJldHVybiBlLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhp
cy5ib3VuZExpc3QuZm9yRWFjaE5vZGUoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZGVzdHJveSgpfSl9
LGUucHJvdG90eXBlLnBhcmVudEVsZW1lbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJlbnR9
LGUucHJvdG90eXBlLmZpcnN0Tm9kZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuYm91bmRMaXN0Lmhl
YWQoKQorcmV0dXJuIGUmJmUuZmlyc3ROb2RlKCl9LGUucHJvdG90eXBlLmxhc3ROb2RlPWZ1bmN0
aW9uKCl7dmFyIGU9dGhpcy5ib3VuZExpc3QudGFpbCgpCityZXR1cm4gZSYmZS5sYXN0Tm9kZSgp
fSxlLnByb3RvdHlwZS5vcGVuRWxlbWVudD1mdW5jdGlvbigpeygwLG4uYXNzZXJ0KSghMSwiQ2Fu
bm90IG9wZW5FbGVtZW50IGRpcmVjdGx5IGluc2lkZSBhIGJsb2NrIGxpc3QiKX0sZS5wcm90b3R5
cGUuY2xvc2VFbGVtZW50PWZ1bmN0aW9uKCl7KDAsbi5hc3NlcnQpKCExLCJDYW5ub3QgY2xvc2VF
bGVtZW50IGRpcmVjdGx5IGluc2lkZSBhIGJsb2NrIGxpc3QiKX0sZS5wcm90b3R5cGUubmV3Tm9k
ZT1mdW5jdGlvbigpeygwLG4uYXNzZXJ0KSghMSwiQ2Fubm90IGNyZWF0ZSBhIG5ldyBub2RlIGRp
cmVjdGx5IGluc2lkZSBhIGJsb2NrIGxpc3QiKX0sZS5wcm90b3R5cGUubmV3Qm91bmRzPWZ1bmN0
aW9uKCl7fSxlLnByb3RvdHlwZS5uZXdEZXN0cm95YWJsZT1mdW5jdGlvbigpe30sZS5wcm90b3R5
cGUuZmluYWxpemU9ZnVuY3Rpb24oKXt9LGV9KCksd3Q9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbihu
KXt2YXIgcj0oMCx0LnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4pKHRoaXMsZS5jYWxsKHRoaXMp
KQorcmV0dXJuIHIudHlwZT0idmFsdWUiLHIucmVmZXJlbmNlPWZlLmNyZWF0ZShuKSxyfXJldHVy
bigwLHQuaW5oZXJpdHMpKG4sZSksbi5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24oKXtyZXR1
cm4gdGhpcy5yZWZlcmVuY2V9LG4ucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiBK
U09OLnN0cmluZ2lmeSh0aGlzLnJlZmVyZW5jZS52YWx1ZSgpKX0sbn0oaXQpLEV0PWZ1bmN0aW9u
KGUpe2Z1bmN0aW9uIG4obil7dmFyIHI9KDAsdC5wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKSh0
aGlzLGUuY2FsbCh0aGlzKSkKK3JldHVybiByLmlubmVyPW4sci50eXBlPSJoYXMtYmxvY2siLHJ9
cmV0dXJuKDAsdC5pbmhlcml0cykobixlKSxuLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbihl
KXt2YXIgdD10aGlzLmlubmVyLmV2YWx1YXRlKGUpCityZXR1cm4gZmUuY3JlYXRlKCEhdCl9LG4u
cHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiJoYXMtYmxvY2soIit0aGlzLmlubmVy
LnRvSlNPTigpKyIpIn0sbn0oaXQpLHh0PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4obil7dmFyIHI9
KDAsdC5wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKSh0aGlzLGUuY2FsbCh0aGlzKSkKK3JldHVy
biByLmlubmVyPW4sci50eXBlPSJoYXMtYmxvY2stcGFyYW1zIixyfXJldHVybigwLHQuaW5oZXJp
dHMpKG4sZSksbi5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5pbm5l
ci5ldmFsdWF0ZShlKSxuPXQmJnQuc3ltYm9sVGFibGUuZ2V0U3ltYm9scygpLmxvY2FscworcmV0
dXJuIGZlLmNyZWF0ZSghIW4pfSxuLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4i
aGFzLWJsb2NrLXBhcmFtcygiK3RoaXMuaW5uZXIudG9KU09OKCkrIikifSxufShpdCksQ3Q9ZnVu
Y3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5zeW1ib2w9ZSx0aGlzLmRlYnVnPXR9cmV0dXJu
IGUucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKGUpe3JldHVybiBlLnNjb3BlKCkuZ2V0Qmxv
Y2sodGhpcy5zeW1ib2wpfSxlLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4iZ2V0
LWJsb2NrKCQiK3RoaXMuc3ltYm9sKyIoIit0aGlzLmRlYnVnKyIpKSJ9LGV9KCksT3Q9ZnVuY3Rp
b24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5zeW1ib2w9ZSx0aGlzLm5hbWU9dH1yZXR1cm4gZS5w
cm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5zeW1ib2wsbj10aGlzLm5h
bWUKK3JldHVybiBlLnNjb3BlKCkuZ2V0UGFydGlhbEFyZ3ModCkuYmxvY2tzW25dfSxlLnByb3Rv
dHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4iZ2V0LWJsb2NrKCQiK3RoaXMuc3ltYm9sKyIo
JEFSR1MpLiIrdGhpcy5uYW1lKyIpKSJ9LGV9KCksQXQ9ZnVuY3Rpb24oZSx0KXt0aGlzLnN0YXJ0
PWUsdGhpcy5lbmQ9dH0sVHQ9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbihuLHIsaSl7dmFyIG89KDAs
dC5wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKSh0aGlzLGUuY2FsbCh0aGlzLG4scikpCityZXR1
cm4gby5zeW1ib2xzPWksb31yZXR1cm4oMCx0LmluaGVyaXRzKShuLGUpLG59KEF0KSxTdD1mdW5j
dGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLmxhYmVscz0oMCxuLmRpY3QpKCksdGhpcy5qdW1wcz1b
XSx0aGlzLnJhbmdlcz1bXX1yZXR1cm4gZS5wcm90b3R5cGUubGFiZWw9ZnVuY3Rpb24oZSx0KXt0
aGlzLmxhYmVsc1tlXT10fSxlLnByb3RvdHlwZS5qdW1wPWZ1bmN0aW9uKGUsdCxuKXt0aGlzLmp1
bXBzLnB1c2goe2F0OmUsdGFyZ2V0Om4sVGFyZ2V0OnR9KX0sZS5wcm90b3R5cGUucmFuZ2U9ZnVu
Y3Rpb24oZSx0LG4scil7dGhpcy5yYW5nZXMucHVzaCh7YXQ6ZSxzdGFydDpuLGVuZDpyLFJhbmdl
OnR9KX0sZS5wcm90b3R5cGUucGF0Y2g9ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGksbyxzLHIsYSx1
LGwsYworZm9yKHQ9MDt0PHRoaXMuanVtcHMubGVuZ3RoO3QrKyluPXRoaXMuanVtcHNbdF0scj1u
LmF0LGk9bi50YXJnZXQsbz1uLlRhcmdldCxlLnNldChyLG8sdGhpcy5sYWJlbHNbaV0pCitmb3Io
Yz0wO2M8dGhpcy5yYW5nZXMubGVuZ3RoO2MrKylzPXRoaXMucmFuZ2VzW2NdLHI9cy5hdCxhPXMu
c3RhcnQsdT1zLmVuZCxsPXMuUmFuZ2UsZS5zZXQocixsLHRoaXMubGFiZWxzW2FdLHRoaXMubGFi
ZWxzW3VdLTEpfSxlfSgpLFJ0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQscil7dGhpcy5zeW1i
b2xUYWJsZT1lLHRoaXMuZW52PXQsdGhpcy5wcm9ncmFtPXIsdGhpcy5sYWJlbHNTdGFjaz1uZXcg
bi5TdGFjayx0aGlzLmNvbnN0YW50cz10LmNvbnN0YW50cyx0aGlzLnN0YXJ0PXIubmV4dH1yZXR1
cm4gZS5wcm90b3R5cGUub3Bjb2RlPWZ1bmN0aW9uKGUsdCxuLHIpe3RoaXMucHVzaChlLHQsbixy
KX0sZS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEm
JnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MCxuPWFyZ3VtZW50cy5sZW5ndGg+
MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTowLHI9YXJndW1lbnRzLmxlbmd0
aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOjAKK3RoaXMucHJvZ3JhbS5w
dXNoKGUsdCxuLHIpfSxlLnByb3RvdHlwZS5zdGFydExhYmVscz1mdW5jdGlvbigpe3RoaXMubGFi
ZWxzU3RhY2sucHVzaChuZXcgU3QpfSxlLnByb3RvdHlwZS5zdG9wTGFiZWxzPWZ1bmN0aW9uKCl7
KDAsbi5leHBlY3QpKHRoaXMubGFiZWxzU3RhY2sucG9wKCksInVuYmFsYW5jZWQgcHVzaCBhbmQg
cG9wIGxhYmVscyIpLnBhdGNoKHRoaXMucHJvZ3JhbSl9LGUucHJvdG90eXBlLnB1dFBhcnRpYWxE
ZWZpbml0aW9uPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuY29uc3RhbnRzLm90aGVyKGUpCit0aGlz
Lm9wY29kZSg1MCx0KX0sZS5wcm90b3R5cGUucHV0RHluYW1pY1BhcnRpYWxEZWZpbml0aW9uPWZ1
bmN0aW9uKCl7dGhpcy5vcGNvZGUoNDksdGhpcy5jb25zdGFudHMub3RoZXIodGhpcy5zeW1ib2xU
YWJsZSkpfSxlLnByb3RvdHlwZS5ldmFsdWF0ZVBhcnRpYWw9ZnVuY3Rpb24oKXt0aGlzLm9wY29k
ZSg1MSx0aGlzLmNvbnN0YW50cy5vdGhlcih0aGlzLnN5bWJvbFRhYmxlKSx0aGlzLmNvbnN0YW50
cy5vdGhlcigoMCxuLmRpY3QpKCkpKX0sZS5wcm90b3R5cGUucHV0Q29tcG9uZW50RGVmaW5pdGlv
bj1mdW5jdGlvbihlKXt0aGlzLm9wY29kZSgyMyx0aGlzLm90aGVyKGUpKX0sZS5wcm90b3R5cGUu
cHV0RHluYW1pY0NvbXBvbmVudERlZmluaXRpb249ZnVuY3Rpb24oKXt0aGlzLm9wY29kZSgyMil9
LGUucHJvdG90eXBlLm9wZW5Db21wb25lbnQ9ZnVuY3Rpb24oZSx0KXt0aGlzLm9wY29kZSgyNCx0
aGlzLmFyZ3MoZSksdD90aGlzLmJsb2NrKHQpOjApfSxlLnByb3RvdHlwZS5kaWRDcmVhdGVFbGVt
ZW50PWZ1bmN0aW9uKCl7dGhpcy5vcGNvZGUoMjUpfSxlLnByb3RvdHlwZS5zaGFkb3dBdHRyaWJ1
dGVzPWZ1bmN0aW9uKCl7dGhpcy5vcGNvZGUoMjYpLHRoaXMub3Bjb2RlKDIxKX0sZS5wcm90b3R5
cGUuZGlkUmVuZGVyTGF5b3V0PWZ1bmN0aW9uKCl7dGhpcy5vcGNvZGUoMjcpfSxlLnByb3RvdHlw
ZS5jbG9zZUNvbXBvbmVudD1mdW5jdGlvbigpe3RoaXMub3Bjb2RlKDI4KX0sZS5wcm90b3R5cGUu
ZHluYW1pY0NvbnRlbnQ9ZnVuY3Rpb24oZSl7dGhpcy5vcGNvZGUoMzEsdGhpcy5vdGhlcihlKSl9
LGUucHJvdG90eXBlLmNhdXRpb3VzQXBwZW5kPWZ1bmN0aW9uKCl7dGhpcy5keW5hbWljQ29udGVu
dChuZXcgcHIpfSxlLnByb3RvdHlwZS50cnVzdGluZ0FwcGVuZD1mdW5jdGlvbigpe3RoaXMuZHlu
YW1pY0NvbnRlbnQobmV3IG1yKX0sZS5wcm90b3R5cGUuZ3VhcmRlZENhdXRpb3VzQXBwZW5kPWZ1
bmN0aW9uKGUpe3RoaXMuZHluYW1pY0NvbnRlbnQobmV3IGhyKHRoaXMuY29tcGlsZUV4cHJlc3Np
b24oZSksdGhpcy5zeW1ib2xUYWJsZSkpfSxlLnByb3RvdHlwZS5ndWFyZGVkVHJ1c3RpbmdBcHBl
bmQ9ZnVuY3Rpb24oZSl7dGhpcy5keW5hbWljQ29udGVudChuZXcgeXIodGhpcy5jb21waWxlRXhw
cmVzc2lvbihlKSx0aGlzLnN5bWJvbFRhYmxlKSl9LGUucHJvdG90eXBlLnRleHQ9ZnVuY3Rpb24o
ZSl7dGhpcy5vcGNvZGUoMjksdGhpcy5jb25zdGFudHMuc3RyaW5nKGUpKX0sZS5wcm90b3R5cGUu
b3BlblByaW1pdGl2ZUVsZW1lbnQ9ZnVuY3Rpb24oZSl7dGhpcy5vcGNvZGUoMzIsdGhpcy5jb25z
dGFudHMuc3RyaW5nKGUpKX0sZS5wcm90b3R5cGUub3BlbkNvbXBvbmVudEVsZW1lbnQ9ZnVuY3Rp
b24oZSl7dGhpcy5vcGNvZGUoMzUsdGhpcy5jb25zdGFudHMuc3RyaW5nKGUpKX0sZS5wcm90b3R5
cGUub3BlbkR5bmFtaWNQcmltaXRpdmVFbGVtZW50PWZ1bmN0aW9uKCl7dGhpcy5vcGNvZGUoMzYp
fSxlLnByb3RvdHlwZS5mbHVzaEVsZW1lbnQ9ZnVuY3Rpb24oKXt0aGlzLm9wY29kZSgzNyl9LGUu
cHJvdG90eXBlLmNsb3NlRWxlbWVudD1mdW5jdGlvbigpe3RoaXMub3Bjb2RlKDM4KX0sZS5wcm90
b3R5cGUuc3RhdGljQXR0cj1mdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcy5jb25zdGFudHMuc3Ry
aW5nKGUpLGk9dD90aGlzLmNvbnN0YW50cy5zdHJpbmcodCk6MCxvPXRoaXMuY29uc3RhbnRzLnN0
cmluZyhuKQordGhpcy5vcGNvZGUoNDAscixvLGkpfSxlLnByb3RvdHlwZS5keW5hbWljQXR0ck5T
PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzLmNvbnN0YW50cy5zdHJpbmcoZSksaT10aGlzLmNv
bnN0YW50cy5zdHJpbmcodCkKK3RoaXMub3Bjb2RlKDQyLHIsaSwwfG4pfSxlLnByb3RvdHlwZS5k
eW5hbWljQXR0cj1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuY29uc3RhbnRzLnN0cmluZyhlKQor
dGhpcy5vcGNvZGUoNDMsbiwwfHQpfSxlLnByb3RvdHlwZS5jb21tZW50PWZ1bmN0aW9uKGUpe3Zh
ciB0PXRoaXMuY29uc3RhbnRzLnN0cmluZyhlKQordGhpcy5vcGNvZGUoMzAsdCl9LGUucHJvdG90
eXBlLm1vZGlmaWVyPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5jb25zdGFudHMuZXhwcmVzc2lv
bih0aGlzLmNvbXBpbGUodCkpLHI9dGhpcy5lbnYubG9va3VwTW9kaWZpZXIoZSx0aGlzLnN5bWJv
bFRhYmxlKSxpPXRoaXMuY29uc3RhbnRzLm90aGVyKHIpLG89dGhpcy5jb25zdGFudHMuc3RyaW5n
KGUpCit0aGlzLm9wY29kZSg0MSxvLGksbil9LGUucHJvdG90eXBlLnB1dEl0ZXJhdG9yPWZ1bmN0
aW9uKCl7dGhpcy5vcGNvZGUoNDQpfSxlLnByb3RvdHlwZS5lbnRlckxpc3Q9ZnVuY3Rpb24oZSx0
KXt0aGlzLnB1c2goNDUpLHRoaXMubGFiZWxzLnJhbmdlKHRoaXMucG9zLDQ1LGUsdCl9LGUucHJv
dG90eXBlLmV4aXRMaXN0PWZ1bmN0aW9uKCl7dGhpcy5vcGNvZGUoNDYpfSxlLnByb3RvdHlwZS5l
bnRlcldpdGhLZXk9ZnVuY3Rpb24oZSx0KXt0aGlzLnB1c2goNDcpLHRoaXMubGFiZWxzLnJhbmdl
KHRoaXMucG9zLDQ3LGUsdCl9LGUucHJvdG90eXBlLm5leHRJdGVyPWZ1bmN0aW9uKGUpe3RoaXMu
cHVzaCg0OCksdGhpcy5sYWJlbHMuanVtcCh0aGlzLnBvcyw0OCxlKX0sZS5wcm90b3R5cGUub3Bl
bkJsb2NrPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5jb25zdGFudHMuZXhwcmVzc2lvbih0aGlz
LmNvbXBpbGUoZSkpLHI9dGhpcy5jb25zdGFudHMub3RoZXIodCkKK3RoaXMub3Bjb2RlKDIwLHIs
bil9LGUucHJvdG90eXBlLmNsb3NlQmxvY2s9ZnVuY3Rpb24oKXt0aGlzLm9wY29kZSgyMSl9LGUu
cHJvdG90eXBlLnB1c2hSZW1vdGVFbGVtZW50PWZ1bmN0aW9uKCl7dGhpcy5vcGNvZGUoMzMpfSxl
LnByb3RvdHlwZS5wb3BSZW1vdGVFbGVtZW50PWZ1bmN0aW9uKCl7dGhpcy5vcGNvZGUoMzQpfSxl
LnByb3RvdHlwZS5wb3BFbGVtZW50PWZ1bmN0aW9uKCl7dGhpcy5vcGNvZGUoMzkpfSxlLnByb3Rv
dHlwZS5sYWJlbD1mdW5jdGlvbihlKXt0aGlzLmxhYmVscy5sYWJlbChlLHRoaXMubmV4dFBvcyl9
LGUucHJvdG90eXBlLnB1c2hDaGlsZFNjb3BlPWZ1bmN0aW9uKCl7dGhpcy5vcGNvZGUoMCl9LGUu
cHJvdG90eXBlLnBvcFNjb3BlPWZ1bmN0aW9uKCl7dGhpcy5vcGNvZGUoMSl9LGUucHJvdG90eXBl
LnB1c2hEeW5hbWljU2NvcGU9ZnVuY3Rpb24oKXt0aGlzLm9wY29kZSgyKX0sZS5wcm90b3R5cGUu
cG9wRHluYW1pY1Njb3BlPWZ1bmN0aW9uKCl7dGhpcy5vcGNvZGUoMyl9LGUucHJvdG90eXBlLnB1
dE51bGw9ZnVuY3Rpb24oKXt0aGlzLm9wY29kZSg0LHRoaXMuY29uc3RhbnRzLk5VTExfUkVGRVJF
TkNFKX0sZS5wcm90b3R5cGUucHV0VmFsdWU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5jb25zdGFu
dHMuZXhwcmVzc2lvbih0aGlzLmNvbXBpbGVFeHByZXNzaW9uKGUpKQordGhpcy5vcGNvZGUoNSx0
KX0sZS5wcm90b3R5cGUucHV0QXJncz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmNvbnN0YW50cy5l
eHByZXNzaW9uKHRoaXMuY29tcGlsZShlKSkKK3RoaXMub3Bjb2RlKDYsdCl9LGUucHJvdG90eXBl
LmJpbmREeW5hbWljU2NvcGU9ZnVuY3Rpb24oZSl7dGhpcy5vcGNvZGUoMTIsdGhpcy5uYW1lcyhl
KSl9LGUucHJvdG90eXBlLmJpbmRQb3NpdGlvbmFsQXJncz1mdW5jdGlvbihlLHQpe3RoaXMub3Bj
b2RlKDcsdGhpcy5uYW1lcyhlKSx0aGlzLnN5bWJvbHModCkpfSxlLnByb3RvdHlwZS5iaW5kTmFt
ZWRBcmdzPWZ1bmN0aW9uKGUsdCl7dGhpcy5vcGNvZGUoOCx0aGlzLm5hbWVzKGUpLHRoaXMuc3lt
Ym9scyh0KSl9LGUucHJvdG90eXBlLmJpbmRCbG9ja3M9ZnVuY3Rpb24oZSx0KXt0aGlzLm9wY29k
ZSg5LHRoaXMubmFtZXMoZSksdGhpcy5zeW1ib2xzKHQpKX0sZS5wcm90b3R5cGUuZW50ZXI9ZnVu
Y3Rpb24oZSx0KXt0aGlzLnB1c2goMTMpLHRoaXMubGFiZWxzLnJhbmdlKHRoaXMucG9zLDEzLGUs
dCl9LGUucHJvdG90eXBlLmV4aXQ9ZnVuY3Rpb24oKXt0aGlzLm9wY29kZSgxNCl9LGUucHJvdG90
eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuY29uc3RhbnRzLmJsb2NrKGUpCit0
aGlzLm9wY29kZSgxNSx0KX0sZS5wcm90b3R5cGUudGVzdD1mdW5jdGlvbihlKXt2YXIgdD12b2lk
IDAKK2lmKCJjb25zdCI9PT1lKXQ9T2UKK2Vsc2UgaWYoInNpbXBsZSI9PT1lKXQ9QWUKK2Vsc2Ug
aWYoImVudmlyb25tZW50Ij09PWUpdD1UZQorZWxzZXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0
aHJvdyBuZXcgRXJyb3IoInVucmVhY2hhYmxlIikKK3Q9ZX12YXIgbj10aGlzLmNvbnN0YW50cy5m
dW5jdGlvbih0KQordGhpcy5vcGNvZGUoMTksbil9LGUucHJvdG90eXBlLmp1bXA9ZnVuY3Rpb24o
ZSl7dGhpcy5wdXNoKDE2KSx0aGlzLmxhYmVscy5qdW1wKHRoaXMucG9zLDE2LGUpfSxlLnByb3Rv
dHlwZS5qdW1wSWY9ZnVuY3Rpb24oZSl7dGhpcy5wdXNoKDE3KSx0aGlzLmxhYmVscy5qdW1wKHRo
aXMucG9zLDE3LGUpfSxlLnByb3RvdHlwZS5qdW1wVW5sZXNzPWZ1bmN0aW9uKGUpe3RoaXMucHVz
aCgxOCksdGhpcy5sYWJlbHMuanVtcCh0aGlzLnBvcywxOCxlKX0sZS5wcm90b3R5cGUubmFtZXM9
ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPWUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiB0LmNvbnN0
YW50cy5zdHJpbmcoZSl9KQorcmV0dXJuIHRoaXMuY29uc3RhbnRzLmFycmF5KG4pfSxlLnByb3Rv
dHlwZS5zeW1ib2xzPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmNvbnN0YW50cy5hcnJheShlKX0s
ZS5wcm90b3R5cGUub3RoZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuY29uc3RhbnRzLm90aGVy
KGUpfSxlLnByb3RvdHlwZS5hcmdzPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmNvbnN0YW50cy5l
eHByZXNzaW9uKHRoaXMuY29tcGlsZShlKSl9LGUucHJvdG90eXBlLmJsb2NrPWZ1bmN0aW9uKGUp
e3JldHVybiB0aGlzLmNvbnN0YW50cy5ibG9jayhlKX0sKDAsdC5jcmVhdGVDbGFzcykoZSxbe2tl
eToiZW5kIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcm9ncmFtLm5leHR9fSx7a2V5OiJw
b3MiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByb2dyYW0uY3VycmVudH19LHtrZXk6Im5l
eHRQb3MiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByb2dyYW0ubmV4dH19LHtrZXk6Imxh
YmVscyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsbi5leHBlY3QpKHRoaXMubGFiZWxzU3RhY2su
Y3VycmVudCwiYnVnOiBub3QgaW4gYSBsYWJlbCBzdGFjayIpfX1dKSxlfSgpLGt0PWZ1bmN0aW9u
KGUpe2Z1bmN0aW9uIG4obixyKXt2YXIgaT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFy
Z3VtZW50c1syXT9hcmd1bWVudHNbMl06ci5wcm9ncmFtLG89KDAsdC5wb3NzaWJsZUNvbnN0cnVj
dG9yUmV0dXJuKSh0aGlzLGUuY2FsbCh0aGlzLG4scixpKSkKK3JldHVybiBvLmNvbXBvbmVudD1u
ZXcgSXQobyksb31yZXR1cm4oMCx0LmluaGVyaXRzKShuLGUpLG4ucHJvdG90eXBlLmNvbXBpbGU9
ZnVuY3Rpb24oZSl7cmV0dXJuIGcoZSk/ZS5jb21waWxlKHRoaXMpOmV9LG4ucHJvdG90eXBlLmNv
bXBpbGVFeHByZXNzaW9uPWZ1bmN0aW9uKGUpe3JldHVybiBlIGluc3RhbmNlb2YgaXQ/ZTpTKGUs
dGhpcyl9LG4ucHJvdG90eXBlLmJpbmRQb3NpdGlvbmFsQXJnc0ZvckxvY2Fscz1mdW5jdGlvbihl
KXt2YXIgdCxuPU9iamVjdC5rZXlzKGUpLHI9bmV3IEFycmF5KG4ubGVuZ3RoKQorZm9yKHQ9MDt0
PG4ubGVuZ3RoO3QrKylyW3RdPWVbblt0XV0KK3RoaXMub3Bjb2RlKDcsdGhpcy5zeW1ib2xzKHIp
KX0sbi5wcm90b3R5cGUucHJlbHVkZUZvckxheW91dD1mdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxv
LHMsYT1lLnN5bWJvbFRhYmxlLmdldFN5bWJvbHMoKQorYS5uYW1lZCYmKHQ9YS5uYW1lZCxuPU9i
amVjdC5rZXlzKHQpLHI9bi5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19KSx0aGlzLm9wY29k
ZSg4LHRoaXMubmFtZXMobiksdGhpcy5zeW1ib2xzKHIpKSksdGhpcy5vcGNvZGUoMTEpLGEueWll
bGRzJiYoaT1hLnlpZWxkcyxvPU9iamVjdC5rZXlzKGkpLHM9by5tYXAoZnVuY3Rpb24oZSl7cmV0
dXJuIGlbZV19KSx0aGlzLm9wY29kZSg5LHRoaXMubmFtZXMobyksdGhpcy5zeW1ib2xzKHMpKSks
YS5wYXJ0aWFsQXJncyYmdGhpcy5vcGNvZGUoMTAsYS5wYXJ0aWFsQXJncyl9LG4ucHJvdG90eXBl
LnlpZWxkPWZ1bmN0aW9uKGUsdCl7dmFyIG49dm9pZCAwLHI9dm9pZCAwLGk9dm9pZCAwCitpZihu
PXRoaXMuc3ltYm9sVGFibGUuZ2V0U3ltYm9sKCJ5aWVsZHMiLHQpKWk9bmV3IEN0KG4sdCkKK2Vs
c2V7aWYoIShyPXRoaXMuc3ltYm9sVGFibGUuZ2V0UGFydGlhbEFyZ3MoKSkpdGhyb3cgbmV3IEVy
cm9yKCJbQlVHXSAke3RvfSBpcyBub3QgYSB2YWxpZCBibG9jayBuYW1lLiIpCitpPW5ldyBPdChy
LHQpfXRoaXMub3BlbkJsb2NrKGUsaSksdGhpcy5jbG9zZUJsb2NrKCl9LG4ucHJvdG90eXBlLmxh
YmVsbGVkPWZ1bmN0aW9uKGUsdCl7ZSYmdGhpcy5wdXRBcmdzKGUpLHRoaXMuc3RhcnRMYWJlbHMo
KSx0aGlzLmVudGVyKCJCRUdJTiIsIkVORCIpLHRoaXMubGFiZWwoIkJFR0lOIiksdCh0aGlzLCJC
RUdJTiIsIkVORCIpLHRoaXMubGFiZWwoIkVORCIpLHRoaXMuZXhpdCgpLHRoaXMuc3RvcExhYmVs
cygpfSxuLnByb3RvdHlwZS5pdGVyPWZ1bmN0aW9uKGUpe3RoaXMuc3RhcnRMYWJlbHMoKSx0aGlz
LmVudGVyTGlzdCgiQkVHSU4iLCJFTkQiKSx0aGlzLmxhYmVsKCJJVEVSIiksdGhpcy5uZXh0SXRl
cigiQlJFQUsiKSx0aGlzLmVudGVyV2l0aEtleSgiQkVHSU4iLCJFTkQiKSx0aGlzLmxhYmVsKCJC
RUdJTiIpLGUodGhpcywiQkVHSU4iLCJFTkQiKSx0aGlzLmxhYmVsKCJFTkQiKSx0aGlzLmV4aXQo
KSx0aGlzLmp1bXAoIklURVIiKSx0aGlzLmxhYmVsKCJCUkVBSyIpLHRoaXMuZXhpdExpc3QoKSx0
aGlzLnN0b3BMYWJlbHMoKX0sbi5wcm90b3R5cGUudW5pdD1mdW5jdGlvbihlKXt0aGlzLnN0YXJ0
TGFiZWxzKCksZSh0aGlzKSx0aGlzLnN0b3BMYWJlbHMoKX0sbn0oUnQpLE50PWZ1bmN0aW9uKCl7
ZnVuY3Rpb24gZShlKXt0aGlzLmVudj1lfXJldHVybiBlLnByb3RvdHlwZS53cmFwTGF5b3V0PWZ1
bmN0aW9uKGUpe3RoaXMuaW5uZXI9bmV3IFB0KHRoaXMuZW52LGUpfSxlLnByb3RvdHlwZS5mcm9t
TGF5b3V0PWZ1bmN0aW9uKGUpe3RoaXMuaW5uZXI9bmV3IGp0KHRoaXMuZW52LGUpfSxlLnByb3Rv
dHlwZS5jb21waWxlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5uZXIuY29tcGlsZSgpfSwoMCx0
LmNyZWF0ZUNsYXNzKShlLFt7a2V5OiJ0YWciLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmlu
bmVyLnRhZ319LHtrZXk6ImF0dHJzIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbm5lci5h
dHRyc319XSksZX0oKSxQdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLmVudj1lLHRo
aXMubGF5b3V0PXQsdGhpcy50YWc9bmV3IER0LHRoaXMuYXR0cnM9bmV3IEx0fXJldHVybiBlLnBy
b3RvdHlwZS5jb21waWxlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5lbnYsdD10aGlzLmxheW91dCxu
PXQuc3ltYm9sVGFibGUscj12KGUsdC5zeW1ib2xUYWJsZSkKK3Iuc3RhcnRMYWJlbHMoKQordmFy
IGk9dGhpcy50YWcuZ2V0RHluYW1pYygpLG89dm9pZCAwCityZXR1cm4gaT8oci5wdXRWYWx1ZShp
KSxyLnRlc3QoInNpbXBsZSIpLHIuanVtcFVubGVzcygiQk9EWSIpLHIub3BlbkR5bmFtaWNQcmlt
aXRpdmVFbGVtZW50KCksci5kaWRDcmVhdGVFbGVtZW50KCksdGhpcy5hdHRycy5idWZmZXIuZm9y
RWFjaChmdW5jdGlvbihlKXtyZXR1cm4geChlLHIpfSksci5mbHVzaEVsZW1lbnQoKSxyLmxhYmVs
KCJCT0RZIikpOihvPXRoaXMudGFnLmdldFN0YXRpYygpKSYmKHIub3BlblByaW1pdGl2ZUVsZW1l
bnQobyksci5kaWRDcmVhdGVFbGVtZW50KCksdGhpcy5hdHRycy5idWZmZXIuZm9yRWFjaChmdW5j
dGlvbihlKXtyZXR1cm4geChlLHIpfSksci5mbHVzaEVsZW1lbnQoKSksci5wcmVsdWRlRm9yTGF5
b3V0KHQpLHQuc3RhdGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiB4KGUscil9KSxp
PyhyLnB1dFZhbHVlKGkpLHIudGVzdCgic2ltcGxlIiksci5qdW1wVW5sZXNzKCJFTkQiKSxyLmNs
b3NlRWxlbWVudCgpLHIubGFiZWwoIkVORCIpKTpvJiZyLmNsb3NlRWxlbWVudCgpLHIuZGlkUmVu
ZGVyTGF5b3V0KCksci5zdG9wTGFiZWxzKCksbmV3IFR0KHIuc3RhcnQsci5lbmQsbi5zaXplKX0s
ZX0oKSxqdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLmVudj1lLHRoaXMubGF5b3V0
PXQsdGhpcy5hdHRycz1uZXcgTHR9cmV0dXJuIGUucHJvdG90eXBlLmNvbXBpbGU9ZnVuY3Rpb24o
KXt2YXIgZSx0LG49dGhpcy5lbnYscj10aGlzLmxheW91dCxpPXYobixyLnN5bWJvbFRhYmxlKQor
aS5zdGFydExhYmVscygpLGkucHJlbHVkZUZvckxheW91dChyKQordmFyIG89dGhpcy5hdHRycy5i
dWZmZXIscz0hMQorZm9yKGU9MDtlPHIuc3RhdGVtZW50cy5sZW5ndGg7ZSsrKXQ9ci5zdGF0ZW1l
bnRzW2VdLCFzJiZ5KHQpPyhpLm9wZW5Db21wb25lbnRFbGVtZW50KHRbMV0pLGkuZGlkQ3JlYXRl
RWxlbWVudCgpLGkuc2hhZG93QXR0cmlidXRlcygpLG8uZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1
cm4geChlLGkpfSkscz0hMCk6eCh0LGkpCityZXR1cm4gaS5kaWRSZW5kZXJMYXlvdXQoKSxpLnN0
b3BMYWJlbHMoKSxuZXcgVHQoaS5zdGFydCxpLmVuZCxyLnN5bWJvbFRhYmxlLnNpemUpfSwoMCx0
LmNyZWF0ZUNsYXNzKShlLFt7a2V5OiJ0YWciLGdldDpmdW5jdGlvbigpe3Rocm93IG5ldyBFcnJv
cigiQlVHOiBDYW5ub3QgY2FsbCBgdGFnYCBvbiBhbiBVbndyYXBwZWRCdWlsZGVyIil9fV0pLGV9
KCksRHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5pc0R5bmFtaWM9bnVsbCx0aGlzLmlz
U3RhdGljPW51bGwsdGhpcy5zdGF0aWNUYWdOYW1lPW51bGwsdGhpcy5keW5hbWljVGFnTmFtZT1u
dWxsfXJldHVybiBlLnByb3RvdHlwZS5nZXREeW5hbWljPWZ1bmN0aW9uKCl7aWYodGhpcy5pc0R5
bmFtaWMpcmV0dXJuIHRoaXMuZHluYW1pY1RhZ05hbWV9LGUucHJvdG90eXBlLmdldFN0YXRpYz1m
dW5jdGlvbigpe2lmKHRoaXMuaXNTdGF0aWMpcmV0dXJuIHRoaXMuc3RhdGljVGFnTmFtZX0sZS5w
cm90b3R5cGUuc3RhdGljPWZ1bmN0aW9uKGUpe3RoaXMuaXNTdGF0aWM9ITAsdGhpcy5zdGF0aWNU
YWdOYW1lPWV9LGUucHJvdG90eXBlLmR5bmFtaWM9ZnVuY3Rpb24oZSl7dGhpcy5pc0R5bmFtaWM9
ITAsdGhpcy5keW5hbWljVGFnTmFtZT1baS5PcHMuRnVuY3Rpb24sZV19LGV9KCksTHQ9ZnVuY3Rp
b24oKXtmdW5jdGlvbiBlKCl7dGhpcy5idWZmZXI9W119cmV0dXJuIGUucHJvdG90eXBlLnN0YXRp
Yz1mdW5jdGlvbihlLHQpe3RoaXMuYnVmZmVyLnB1c2goW2kuT3BzLlN0YXRpY0F0dHIsZSx0LG51
bGxdKX0sZS5wcm90b3R5cGUuZHluYW1pYz1mdW5jdGlvbihlLHQpe3RoaXMuYnVmZmVyLnB1c2go
W2kuT3BzLkR5bmFtaWNBdHRyLGUsW2kuT3BzLkZ1bmN0aW9uLHRdLG51bGxdKX0sZX0oKSxJdD1m
dW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5idWlsZGVyPWUsdGhpcy5lbnY9ZS5lbnZ9cmV0
dXJuIGUucHJvdG90eXBlLnN0YXRpYz1mdW5jdGlvbihlLHQsbixyKXt0aGlzLmJ1aWxkZXIudW5p
dChmdW5jdGlvbihuKXtuLnB1dENvbXBvbmVudERlZmluaXRpb24oZSksbi5vcGVuQ29tcG9uZW50
KE4odCxuKSxyKSxuLmNsb3NlQ29tcG9uZW50KCl9KX0sZS5wcm90b3R5cGUuZHluYW1pYz1mdW5j
dGlvbihlLHQsbixyLG8pe3RoaXMuYnVpbGRlci51bml0KGZ1bmN0aW9uKHIpe3IucHV0QXJncyhS
KGVbMF0sZVsxXSxyKSksci5wdXRWYWx1ZShbaS5PcHMuRnVuY3Rpb24sdF0pLHIudGVzdCgic2lt
cGxlIiksci5lbnRlcigiQkVHSU4iLCJFTkQiKSxyLmxhYmVsKCJCRUdJTiIpLHIuanVtcFVubGVz
cygiRU5EIiksci5wdXREeW5hbWljQ29tcG9uZW50RGVmaW5pdGlvbigpLHIub3BlbkNvbXBvbmVu
dChOKG4sciksbyksci5jbG9zZUNvbXBvbmVudCgpLHIubGFiZWwoIkVORCIpLHIuZXhpdCgpfSl9
LGV9KCksTXQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+
MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpudWxsLG49YXJndW1lbnRzLmxl
bmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOm51bGwscj1hcmd1bWVu
dHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106bnVsbCxpPWFy
Z3VtZW50cy5sZW5ndGg+NCYmdm9pZCAwIT09YXJndW1lbnRzWzRdP2FyZ3VtZW50c1s0XToxCit0
aGlzLm1ldGE9ZSx0aGlzLm5hbWVkPXQsdGhpcy55aWVsZHM9bix0aGlzLnBhcnRpYWxBcmdzPXIs
dGhpcy5zaXplPWksdGhpcy5wcm9ncmFtPXRoaXN9cmV0dXJuIGUucHJvdG90eXBlLmdldE1ldGE9
ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZXRhfSxlLnByb3RvdHlwZS5nZXRTeW1ib2xzPWZ1bmN0
aW9uKCl7cmV0dXJue25hbWVkOnRoaXMubmFtZWQseWllbGRzOnRoaXMueWllbGRzLGxvY2Fsczpu
dWxsLHBhcnRpYWxBcmdzOnRoaXMucGFydGlhbEFyZ3N9fSxlLnByb3RvdHlwZS5nZXRTeW1ib2w9
ZnVuY3Rpb24oZSx0KXtyZXR1cm4ibG9jYWwiPT09ZT9udWxsOnRoaXNbZV0mJnRoaXNbZV1bdF19
LGUucHJvdG90eXBlLmdldFBhcnRpYWxBcmdzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFydGlh
bEFyZ3N8fDB9LGV9KCksRnQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuKXt0aGlzLnBhcmVu
dD1lLHRoaXMucHJvZ3JhbT10LHRoaXMubG9jYWxzPW59cmV0dXJuIGUucHJvdG90eXBlLmdldE1l
dGE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcm9ncmFtLmdldE1ldGEoKX0sZS5wcm90b3R5cGUu
Z2V0U3ltYm9scz1mdW5jdGlvbigpe3JldHVybntuYW1lZDpudWxsLHlpZWxkczpudWxsLGxvY2Fs
czp0aGlzLmxvY2FscyxwYXJ0aWFsQXJnczpudWxsfX0sZS5wcm90b3R5cGUuZ2V0U3ltYm9sPWZ1
bmN0aW9uKGUsdCl7cmV0dXJuImxvY2FsIj09PWU/dGhpcy5nZXRMb2NhbCh0KTp0aGlzLnByb2dy
YW0uZ2V0U3ltYm9sKGUsdCl9LGUucHJvdG90eXBlLmdldExvY2FsPWZ1bmN0aW9uKGUpe3ZhciB0
PXRoaXMubG9jYWxzLG49dGhpcy5wYXJlbnQscj10JiZ0W2VdCityZXR1cm4hciYmbiYmKHI9bi5n
ZXRTeW1ib2woImxvY2FsIixlKSkscn0sZS5wcm90b3R5cGUuZ2V0UGFydGlhbEFyZ3M9ZnVuY3Rp
b24oKXtyZXR1cm4gdGhpcy5wcm9ncmFtLmdldFBhcnRpYWxBcmdzKCl9LGV9KCksenQ9ZnVuY3Rp
b24oKXtmdW5jdGlvbiBlKCl7dGhpcy5uYW1lcz0oMCxuLmRpY3QpKCksdGhpcy5mdW5jcz1bXX1y
ZXR1cm4gZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGUsdCl7dGhpcy5mdW5jcy5wdXNoKHQpLHRo
aXMubmFtZXNbZV09dGhpcy5mdW5jcy5sZW5ndGgtMX0sZS5wcm90b3R5cGUuc3BlY2lhbGl6ZT1m
dW5jdGlvbihlLHQpe3ZhciByPWVbMF0saT10aGlzLm5hbWVzW3JdCitpZih2b2lkIDA9PT1pKXJl
dHVybiBlCit2YXIgbz10aGlzLmZ1bmNzW2ldCityZXR1cm4oMCxuLmFzc2VydCkoISFvLCJleHBl
Y3RlZCBhIHNwZWNpYWxpemF0aW9uIGZvciAiK2VbMF0pLG8oZSx0KX0sZX0oKSxVdD1uZXcgenQs
QnQ9aS5FeHByZXNzaW9ucyxxdD1pLk9wcworVXQuYWRkKHF0LkFwcGVuZCxmdW5jdGlvbihlKXt2
YXIgdCxuPWVbMV0KK3JldHVybiBBcnJheS5pc0FycmF5KG4pJiZCdC5pc0dldChuKSYmKHQ9blsx
XSwxIT09dC5sZW5ndGgpP1txdC5Vbm9wdGltaXplZEFwcGVuZCxlWzFdLGVbMl1dOltxdC5PcHRp
bWl6ZWRBcHBlbmQsZVsxXSxlWzJdXX0pLFV0LmFkZChxdC5EeW5hbWljQXR0cixmdW5jdGlvbihl
KXtyZXR1cm5bcXQuQW55RHluYW1pY0F0dHIsZVsxXSxlWzJdLGVbM10sITFdfSksVXQuYWRkKHF0
LlRydXN0aW5nQXR0cixmdW5jdGlvbihlKXtyZXR1cm5bcXQuQW55RHluYW1pY0F0dHIsZVsxXSxl
WzJdLGVbM10sITBdfSksVXQuYWRkKHF0LlBhcnRpYWwsZnVuY3Rpb24oZSl7dmFyIHQ9ZVsxXQor
cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P1txdC5TdGF0aWNQYXJ0aWFsLHRdOltxdC5EeW5hbWlj
UGFydGlhbCx0XX0pCit2YXIgSHQsVnQ9ZnVuY3Rpb24oZSx0KXt0aGlzLnN0YXRlbWVudHM9ZSx0
aGlzLnN5bWJvbFRhYmxlPXR9LFd0PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4oKXtyZXR1cm4oMCx0
LnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4pKHRoaXMsZS5hcHBseSh0aGlzLGFyZ3VtZW50cykp
fXJldHVybigwLHQuaW5oZXJpdHMpKG4sZSksbn0oVnQpLCR0PWZ1bmN0aW9uKGUpe2Z1bmN0aW9u
IG4oKXt2YXIgbj0oMCx0LnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4pKHRoaXMsZS5hcHBseSh0
aGlzLGFyZ3VtZW50cykpCityZXR1cm4gbi5jb21waWxlZD1udWxsLG59cmV0dXJuKDAsdC5pbmhl
cml0cykobixlKSxuLnByb3RvdHlwZS5jb21waWxlPWZ1bmN0aW9uKGUpe3ZhciB0LG4scixpLG8s
cz10aGlzLmNvbXBpbGVkCitpZighcyl7Zm9yKHQ9dGhpcy5zeW1ib2xUYWJsZSxuPXYoZSx0KSxy
PTA7cjx0aGlzLnN0YXRlbWVudHMubGVuZ3RoO3IrKylpPXRoaXMuc3RhdGVtZW50c1tyXSxvPVV0
LnNwZWNpYWxpemUoaSx0KSxkbi5jb21waWxlKG8sbikKK3M9dGhpcy5jb21waWxlZD1uZXcgVHQo
bi5zdGFydCxuLmVuZCx0aGlzLnN5bWJvbFRhYmxlLnNpemUpfXJldHVybiBzfSxufShWdCksR3Q9
ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbigpe3ZhciBuPSgwLHQucG9zc2libGVDb25zdHJ1Y3RvclJl
dHVybikodGhpcyxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkKK3JldHVybiBuLmNvbXBpbGVkPW51
bGwsbn1yZXR1cm4oMCx0LmluaGVyaXRzKShuLGUpLG4ucHJvdG90eXBlLnNwbGF0PWZ1bmN0aW9u
KGUpe3ZhciB0LG4scixpPWUuc3ltYm9sVGFibGUsbz1pLmdldFN5bWJvbHMoKS5sb2NhbHMKK2Zv
cihvJiYoZS5wdXNoQ2hpbGRTY29wZSgpLGUuYmluZFBvc2l0aW9uYWxBcmdzRm9yTG9jYWxzKG8p
KSx0PTA7dDx0aGlzLnN0YXRlbWVudHMubGVuZ3RoO3QrKyluPXRoaXMuc3RhdGVtZW50c1t0XSxy
PVV0LnNwZWNpYWxpemUobixpKSxkbi5jb21waWxlKHIsZSkKK28mJmUucG9wU2NvcGUoKX0sbi5w
cm90b3R5cGUuY29tcGlsZT1mdW5jdGlvbihlKXt2YXIgdCxuLHI9dGhpcy5jb21waWxlZAorcmV0
dXJuIHJ8fCh0PXRoaXMuc3ltYm9sVGFibGUsbj12KGUsdCksdGhpcy5zcGxhdChuKSxyPXRoaXMu
Y29tcGlsZWQ9bmV3IEF0KG4uc3RhcnQsbi5lbmQpKSxyfSxufShWdCksS3Q9ZnVuY3Rpb24oZSl7
ZnVuY3Rpb24gbigpe3ZhciBuPSgwLHQucG9zc2libGVDb25zdHJ1Y3RvclJldHVybikodGhpcyxl
LmFwcGx5KHRoaXMsYXJndW1lbnRzKSkKK3JldHVybiBuLmNvbXBpbGVkPW51bGwsbn1yZXR1cm4o
MCx0LmluaGVyaXRzKShuLGUpLG4ucHJvdG90eXBlLmNvbXBpbGU9ZnVuY3Rpb24oZSl7dmFyIHQs
bixyLGksbyxzPXRoaXMuY29tcGlsZWQKK2lmKCFzKXtmb3IodD10aGlzLnN5bWJvbFRhYmxlLG49
dihlLHQpLHI9MDtyPHRoaXMuc3RhdGVtZW50cy5sZW5ndGg7cisrKWk9dGhpcy5zdGF0ZW1lbnRz
W3JdLG89VXQuc3BlY2lhbGl6ZShpLHQpLGRuLmNvbXBpbGUobyxuKQorcz10aGlzLmNvbXBpbGVk
PW5ldyBUdChuLnN0YXJ0LG4uZW5kLHQuc2l6ZSl9cmV0dXJuIHN9LG59KFZ0KSxRdD1mdW5jdGlv
bigpe2Z1bmN0aW9uIGUoZSx0LG4pe3RoaXMuYmxvY2s9ZSx0aGlzLm1ldGE9dCx0aGlzLmVudj1u
fXJldHVybiBlLnByb3RvdHlwZS5zY2FuRW50cnlQb2ludD1mdW5jdGlvbigpe3ZhciBlPXRoaXMu
YmxvY2ssdD10aGlzLm1ldGEsbj1iKHQpLHI9QyhlLG4sdGhpcy5lbnYpCityZXR1cm4gbmV3ICR0
KHIuc3RhdGVtZW50cyxuKX0sZS5wcm90b3R5cGUuc2NhbkxheW91dD1mdW5jdGlvbigpe3ZhciBl
PXRoaXMuYmxvY2ssdD10aGlzLm1ldGEsbj1lLm5hbWVkLHI9ZS55aWVsZHMsaT1lLmhhc1BhcnRp
YWxzLG89Xyh0LG4scixpKSxzPUMoZSxvLHRoaXMuZW52KQorcmV0dXJuIG5ldyBXdChzLnN0YXRl
bWVudHMsbyl9LGUucHJvdG90eXBlLnNjYW5QYXJ0aWFsPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMu
YmxvY2ssbj1DKHQsZSx0aGlzLmVudikKK3JldHVybiBuZXcgS3Qobi5zdGF0ZW1lbnRzLGUpfSxl
fSgpOyhmdW5jdGlvbihlKXt2YXIgdD1pLk9wcworZS5pc1NjYW5uZWRDb21wb25lbnQ9KDAsaS5p
cykodC5TY2FubmVkQ29tcG9uZW50KSxlLmlzUHJpbWl0aXZlRWxlbWVudD0oMCxpLmlzKSh0Lk9w
ZW5QcmltaXRpdmVFbGVtZW50KSxlLmlzT3B0aW1pemVkQXBwZW5kPSgwLGkuaXMpKHQuT3B0aW1p
emVkQXBwZW5kKSxlLmlzVW5vcHRpbWl6ZWRBcHBlbmQ9KDAsaS5pcykodC5Vbm9wdGltaXplZEFw
cGVuZCksZS5pc0FueUF0dHI9KDAsaS5pcykodC5BbnlEeW5hbWljQXR0ciksZS5pc1N0YXRpY1Bh
cnRpYWw9KDAsaS5pcykodC5TdGF0aWNQYXJ0aWFsKSxlLmlzRHluYW1pY1BhcnRpYWw9KDAsaS5p
cykodC5EeW5hbWljUGFydGlhbCksZS5pc0Z1bmN0aW9uRXhwcmVzc2lvbj0oMCxpLmlzKSh0LkZ1
bmN0aW9uKSxlLmlzTmVzdGVkQmxvY2s9KDAsaS5pcykodC5OZXN0ZWRCbG9jayksZS5pc1NjYW5u
ZWRCbG9jaz0oMCxpLmlzKSh0LlNjYW5uZWRCbG9jayksZS5pc0RlYnVnZ2VyPSgwLGkuaXMpKHQu
RGVidWdnZXIpOyhmdW5jdGlvbihlKXtlLmRlZmF1bHRCbG9jaz1mdW5jdGlvbihlKXtyZXR1cm4g
ZVs0XX0sZS5pbnZlcnNlQmxvY2s9ZnVuY3Rpb24oZSl7cmV0dXJuIGVbNV19LGUucGFyYW1zPWZ1
bmN0aW9uKGUpe3JldHVybiBlWzJdfSxlLmhhc2g9ZnVuY3Rpb24oZSl7cmV0dXJuIGVbM119fSko
ZS5OZXN0ZWRCbG9ja3x8KGUuTmVzdGVkQmxvY2s9e30pKX0pKEh0fHwoZS5CYXNlbGluZVN5bnRh
eD1IdD17fSkpCit2YXIgWXQ9aS5PcHMsSnQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuKXt0
aGlzLmVudj1lLHRoaXMudGFibGU9dCx0aGlzLnN0YXRlbWVudHM9bn1yZXR1cm4gZS5wcm90b3R5
cGUuc2Nhbj1mdW5jdGlvbigpe3ZhciBlPVtdCityZXR1cm4gdGhpcy5zcGVjaWFsaXplU3RhdGVt
ZW50cyh0aGlzLnN0YXRlbWVudHMsZSksbmV3IEd0KGUsdGhpcy50YWJsZSl9LGUucHJvdG90eXBl
LnNwZWNpYWxpemVTdGF0ZW1lbnRzPWZ1bmN0aW9uKGUsdCl7dmFyIG4scgorZm9yKG49MDtuPGUu
bGVuZ3RoO24rKylyPWVbbl0sdGhpcy5zcGVjaWFsaXplU3RhdGVtZW50KHIsdCl9LGUucHJvdG90
eXBlLnNwZWNpYWxpemVTdGF0ZW1lbnQ9ZnVuY3Rpb24oZSx0KXtpLlN0YXRlbWVudHMuaXNCbG9j
ayhlKT90LnB1c2godGhpcy5zcGVjaWFsaXplQmxvY2soZSkpOmkuU3RhdGVtZW50cy5pc0NvbXBv
bmVudChlKT90LnB1c2guYXBwbHkodCx0aGlzLnNwZWNpYWxpemVDb21wb25lbnQoZSkpOnQucHVz
aChlKX0sZS5wcm90b3R5cGUuc3BlY2lhbGl6ZUJsb2NrPWZ1bmN0aW9uKGUpe3ZhciB0PWVbMV0s
bj1lWzJdLHI9ZVszXSxpPWVbNF0sbz1lWzVdCityZXR1cm5bWXQuU2Nhbm5lZEJsb2NrLHQsbixy
LHRoaXMuY2hpbGQoaSksdGhpcy5jaGlsZChvKV19LGUucHJvdG90eXBlLnNwZWNpYWxpemVDb21w
b25lbnQ9ZnVuY3Rpb24odCl7dmFyIG4scixpLG89dFsxXSxzPXRbMl0KK3JldHVybiB0aGlzLmVu
di5oYXNDb21wb25lbnREZWZpbml0aW9uKG8sdGhpcy50YWJsZSk/KG49dGhpcy5jaGlsZChzKSxy
PW5ldyBlKHRoaXMuZW52LHRoaXMudGFibGUscy5hdHRycyksW1tZdC5TY2FubmVkQ29tcG9uZW50
LG8scixzLmFyZ3Msbl1dKTooaT1bXSxpLnB1c2goW1l0Lk9wZW5FbGVtZW50LG8sW11dKSx0aGlz
LnNwZWNpYWxpemVTdGF0ZW1lbnRzKHMuYXR0cnMsaSksaS5wdXNoKFtZdC5GbHVzaEVsZW1lbnRd
KSx0aGlzLnNwZWNpYWxpemVTdGF0ZW1lbnRzKHMuc3RhdGVtZW50cyxpKSxpLnB1c2goW1l0LkNs
b3NlRWxlbWVudF0pLGkpfSxlLnByb3RvdHlwZS5jaGlsZD1mdW5jdGlvbih0KXtpZighdClyZXR1
cm4gbnVsbAordmFyIG49dyh0aGlzLnRhYmxlLHQubG9jYWxzKQorcmV0dXJuIG5ldyBlKHRoaXMu
ZW52LG4sdC5zdGF0ZW1lbnRzKX0sZX0oKSxYdD1mdW5jdGlvbihlKXtmdW5jdGlvbiBuKG4scil7
dmFyIGk9KDAsdC5wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKSh0aGlzLGUuY2FsbCh0aGlzKSkK
K3JldHVybiBpLmJhc2U9bixpLnBhdGg9cixpLnR5cGU9Imxvb2t1cCIsaX1yZXR1cm4oMCx0Lmlu
aGVyaXRzKShuLGUpLG4uY3JlYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIDA9PT10Lmxlbmd0aD9l
Om5ldyB0aGlzKGUsdCl9LG4ucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKGUpe3ZhciB0PXRo
aXMuYmFzZSxuPXRoaXMucGF0aAorcmV0dXJuKDAsci5yZWZlcmVuY2VGcm9tUGFydHMpKHQuZXZh
bHVhdGUoZSksbil9LG4ucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJh
c2UudG9KU09OKCkrIi4iK3RoaXMucGF0aC5qb2luKCIuIil9LG59KGl0KSxadD1mdW5jdGlvbihl
KXtmdW5jdGlvbiBuKCl7cmV0dXJuKDAsdC5wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKSh0aGlz
LGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4oMCx0LmluaGVyaXRzKShuLGUpLG4ucHJv
dG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFNlbGYoKX0sbi5wcm90b3R5
cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuInNlbGYifSxufShpdCksZW49ZnVuY3Rpb24oZSl7
ZnVuY3Rpb24gbihuLHIpe3ZhciBpPSgwLHQucG9zc2libGVDb25zdHJ1Y3RvclJldHVybikodGhp
cyxlLmNhbGwodGhpcykpCityZXR1cm4gaS5zeW1ib2w9bixpLmRlYnVnPXIsaX1yZXR1cm4oMCx0
LmluaGVyaXRzKShuLGUpLG4ucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKGUpe3JldHVybiBl
LnJlZmVyZW5jZUZvclN5bWJvbCh0aGlzLnN5bWJvbCl9LG4ucHJvdG90eXBlLnRvSlNPTj1mdW5j
dGlvbigpe3JldHVybiIkIit0aGlzLnN5bWJvbCsiKCIrdGhpcy5kZWJ1ZysiKSJ9LG59KGl0KSx0
bj1mdW5jdGlvbihlKXtmdW5jdGlvbiBuKG4scil7dmFyIGk9KDAsdC5wb3NzaWJsZUNvbnN0cnVj
dG9yUmV0dXJuKSh0aGlzLGUuY2FsbCh0aGlzKSkKK3JldHVybiBpLnN5bWJvbD1uLGkubmFtZT1y
LGl9cmV0dXJuKDAsdC5pbmhlcml0cykobixlKSxuLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlv
bihlKXt2YXIgdD10aGlzLnN5bWJvbCxuPXRoaXMubmFtZQorcmV0dXJuIGUuc2NvcGUoKS5nZXRQ
YXJ0aWFsQXJncyh0KS5uYW1lZC5nZXQobil9LG4ucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigp
e3JldHVybiIkIit0aGlzLnN5bWJvbCsiKCRBUkdTKS4iK3RoaXMubmFtZX0sbn0oaXQpLG5uPWZ1
bmN0aW9uKGUpe2Z1bmN0aW9uIG4obixyLGksbyl7dmFyIHM9KDAsdC5wb3NzaWJsZUNvbnN0cnVj
dG9yUmV0dXJuKSh0aGlzLGUuY2FsbCh0aGlzKSkKK3JldHVybiBzLm5hbWU9bixzLmhlbHBlcj1y
LHMuYXJncz1pLHMuc3ltYm9sVGFibGU9byxzLnR5cGU9ImhlbHBlciIsc31yZXR1cm4oMCx0Lmlu
aGVyaXRzKShuLGUpLG4ucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKGUpe3JldHVybigwLHRo
aXMuaGVscGVyKShlLHRoaXMuYXJncy5ldmFsdWF0ZShlKSx0aGlzLnN5bWJvbFRhYmxlKX0sbi5w
cm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuImAiK3RoaXMubmFtZSsiKCRBUkdTKWAi
fSxufShpdCkscm49ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMucGFydHM9ZSx0aGlzLnR5
cGU9ImNvbmNhdCJ9cmV0dXJuIGUucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKGUpe3ZhciB0
LG49bmV3IEFycmF5KHRoaXMucGFydHMubGVuZ3RoKQorZm9yKHQ9MDt0PHRoaXMucGFydHMubGVu
Z3RoO3QrKyluW3RdPXRoaXMucGFydHNbdF0uZXZhbHVhdGUoZSkKK3JldHVybiBuZXcgb24obil9
LGUucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiJjb25jYXQoIit0aGlzLnBhcnRz
Lm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS50b0pTT04oKX0pLmpvaW4oIiwgIikrIikifSxlfSgp
LG9uPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4obil7dmFyIGk9KDAsdC5wb3NzaWJsZUNvbnN0cnVj
dG9yUmV0dXJuKSh0aGlzLGUuY2FsbCh0aGlzKSkKK3JldHVybiBpLnBhcnRzPW4saS50YWc9KDAs
ci5jb21iaW5lVGFnZ2VkKShuKSxpfXJldHVybigwLHQuaW5oZXJpdHMpKG4sZSksbi5wcm90b3R5
cGUuY29tcHV0ZT1mdW5jdGlvbigpe3ZhciBlLHQsbj1uZXcgQXJyYXkKK2ZvcihlPTA7ZTx0aGlz
LnBhcnRzLmxlbmd0aDtlKyspbnVsbCE9PSh0PXRoaXMucGFydHNbZV0udmFsdWUoKSkmJnZvaWQg
MCE9PXQmJihuW2VdPU8odCkpCityZXR1cm4gbi5sZW5ndGg+MD9uLmpvaW4oIiIpOm51bGx9LG59
KHIuQ2FjaGVkUmVmZXJlbmNlKSxzbj1mdW5jdGlvbihlKXtmdW5jdGlvbiBuKG4scil7dmFyIGk9
KDAsdC5wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKSh0aGlzLGUuY2FsbCh0aGlzKSkKK3JldHVy
biBpLmZ1bmM9bixpLnN5bWJvbFRhYmxlPXIsaS50eXBlPSJmdW5jdGlvbiIsaS5mdW5jPW4saX1y
ZXR1cm4oMCx0LmluaGVyaXRzKShuLGUpLG4ucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKGUp
e3JldHVybigwLHRoaXMuZnVuYykoZSx0aGlzLnN5bWJvbFRhYmxlKX0sbi5wcm90b3R5cGUudG9K
U09OPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5mdW5jCityZXR1cm4gZS5uYW1lPyJgIitlLm5hbWUr
IiguLi4pYCI6ImBmdW5jKC4uLilgIn0sbn0oaXQpLGFuPUh0Lk5lc3RlZEJsb2NrLHVuPWFuLmRl
ZmF1bHRCbG9jayxsbj1hbi5wYXJhbXMsY249YW4uaGFzaCxwbj1BLGZuPWZ1bmN0aW9uKCl7ZnVu
Y3Rpb24gZSgpe3RoaXMubmFtZXM9KDAsbi5kaWN0KSgpLHRoaXMuZnVuY3M9W119cmV0dXJuIGUu
cHJvdG90eXBlLmFkZD1mdW5jdGlvbihlLHQpe3RoaXMuZnVuY3MucHVzaCh0KSx0aGlzLm5hbWVz
W2VdPXRoaXMuZnVuY3MubGVuZ3RoLTF9LGUucHJvdG90eXBlLmNvbXBpbGU9ZnVuY3Rpb24oZSx0
KXt2YXIgcj1lWzBdLGk9dGhpcy5uYW1lc1tyXSxvPXRoaXMuZnVuY3NbaV0KK3JldHVybigwLG4u
YXNzZXJ0KSghIW8sImV4cGVjdGVkIGFuIGltcGxlbWVudGF0aW9uIGZvciAiK2VbMF0pLG8oZSx0
KX0sZX0oKSxobj1pLk9wcyxkbj1uZXcgZm4KK2RuLmFkZChobi5UZXh0LGZ1bmN0aW9uKGUsdCl7
dC50ZXh0KGVbMV0pfSksZG4uYWRkKGhuLkNvbW1lbnQsZnVuY3Rpb24oZSx0KXt0LmNvbW1lbnQo
ZVsxXSl9KSxkbi5hZGQoaG4uQ2xvc2VFbGVtZW50LGZ1bmN0aW9uKGUsdCl7bi5MT0dHRVIudHJh
Y2UoImNsb3NlLWVsZW1lbnQgc3RhdGVtZW50IiksdC5jbG9zZUVsZW1lbnQoKX0pLGRuLmFkZCho
bi5GbHVzaEVsZW1lbnQsZnVuY3Rpb24oZSx0KXt0LmZsdXNoRWxlbWVudCgpfSksZG4uYWRkKGhu
Lk1vZGlmaWVyLGZ1bmN0aW9uKGUsdCl7dmFyIG49ZVsxXSxyPWVbMl0saT1lWzNdLG89UihyLGks
dCkKK2lmKCF0LmVudi5oYXNNb2RpZmllcihuWzBdLHQuc3ltYm9sVGFibGUpKXRocm93IG5ldyBF
cnJvcigiQ29tcGlsZSBFcnJvciAiK24uam9pbigiLiIpKyIgaXMgbm90IGEgbW9kaWZpZXI6IEhl
bHBlcnMgbWF5IG5vdCBiZSB1c2VkIGluIHRoZSBlbGVtZW50IGZvcm0uIikKK3QubW9kaWZpZXIo
blswXSxvKX0pLGRuLmFkZChobi5TdGF0aWNBdHRyLGZ1bmN0aW9uKGUsdCl7dmFyIG49ZVsxXSxy
PWVbMl0saT1lWzNdCit0LnN0YXRpY0F0dHIobixpLHIpfSksZG4uYWRkKGhuLkFueUR5bmFtaWNB
dHRyLGZ1bmN0aW9uKGUsdCl7dmFyIG49ZVsxXSxyPWVbMl0saT1lWzNdLG89ZVs0XQordC5wdXRW
YWx1ZShyKSxpP3QuZHluYW1pY0F0dHJOUyhuLGksbyk6dC5keW5hbWljQXR0cihuLG8pfSksZG4u
YWRkKGhuLk9wZW5FbGVtZW50LGZ1bmN0aW9uKGUsdCl7bi5MT0dHRVIudHJhY2UoIm9wZW4tZWxl
bWVudCBzdGF0ZW1lbnQiKSx0Lm9wZW5QcmltaXRpdmVFbGVtZW50KGVbMV0pfSksZG4uYWRkKGhu
Lk9wdGltaXplZEFwcGVuZCxmdW5jdGlvbihlLHQpe3ZhciBuPWVbMV0scj1lWzJdLGk9dC5lbnYu
bWFjcm9zKCksbz1pLmlubGluZXMscz1vLmNvbXBpbGUoZSx0KXx8bgorITAhPT1zJiYodC5wdXRW
YWx1ZShzWzFdKSxyP3QudHJ1c3RpbmdBcHBlbmQoKTp0LmNhdXRpb3VzQXBwZW5kKCkpfSksZG4u
YWRkKGhuLlVub3B0aW1pemVkQXBwZW5kLGZ1bmN0aW9uKGUsdCl7dmFyIG49ZVsxXSxyPWVbMl0s
aT10LmVudi5tYWNyb3MoKSxvPWkuaW5saW5lcyxzPW8uY29tcGlsZShlLHQpfHxuCishMCE9PXMm
JihyP3QuZ3VhcmRlZFRydXN0aW5nQXBwZW5kKHNbMV0pOnQuZ3VhcmRlZENhdXRpb3VzQXBwZW5k
KHNbMV0pKX0pLGRuLmFkZChobi5OZXN0ZWRCbG9jayxmdW5jdGlvbihlLHQpe3QuZW52Lm1hY3Jv
cygpLmJsb2Nrcy5jb21waWxlKGUsdCl9KSxkbi5hZGQoaG4uU2Nhbm5lZEJsb2NrLGZ1bmN0aW9u
KGUsdCl7dmFyIG49ZVsxXSxyPWVbMl0saT1lWzNdLG89ZVs0XSxzPWVbNV0sYT1vJiZvLnNjYW4o
KSx1PXMmJnMuc2NhbigpCit0LmVudi5tYWNyb3MoKS5ibG9ja3MuY29tcGlsZShbaG4uTmVzdGVk
QmxvY2ssbixyLGksYSx1XSx0KX0pLGRuLmFkZChobi5TY2FubmVkQ29tcG9uZW50LGZ1bmN0aW9u
KGUsdCl7dmFyIG49ZVsxXSxyPWVbMl0saT1lWzNdLG89ZVs0XSxzPW8mJm8uc2NhbigpLGE9ayhu
dWxsLGkse2RlZmF1bHQ6cyxpbnZlcnNlOm51bGx9LHQpLHU9dC5lbnYuZ2V0Q29tcG9uZW50RGVm
aW5pdGlvbihuLHQuc3ltYm9sVGFibGUpCit0LnB1dENvbXBvbmVudERlZmluaXRpb24odSksdC5v
cGVuQ29tcG9uZW50KGEsci5zY2FuKCkpLHQuY2xvc2VDb21wb25lbnQoKX0pLGRuLmFkZChobi5T
dGF0aWNQYXJ0aWFsLGZ1bmN0aW9uKGUsdCl7dmFyIG49ZVsxXQoraWYoIXQuZW52Lmhhc1BhcnRp
YWwobix0LnN5bWJvbFRhYmxlKSl0aHJvdyBuZXcgRXJyb3IoJ0NvbXBpbGUgRXJyb3I6IENvdWxk
IG5vdCBmaW5kIGEgcGFydGlhbCBuYW1lZCAiJytuKyciJykKK3ZhciByPXQuZW52Lmxvb2t1cFBh
cnRpYWwobix0LnN5bWJvbFRhYmxlKQordC5wdXRQYXJ0aWFsRGVmaW5pdGlvbihyKSx0LmV2YWx1
YXRlUGFydGlhbCgpfSksZG4uYWRkKGhuLkR5bmFtaWNQYXJ0aWFsLGZ1bmN0aW9uKGUsdCl7dmFy
IG49ZVsxXQordC5zdGFydExhYmVscygpLHQucHV0VmFsdWUobiksdC50ZXN0KCJzaW1wbGUiKSx0
LmVudGVyKCJCRUdJTiIsIkVORCIpLHQubGFiZWwoIkJFR0lOIiksdC5qdW1wVW5sZXNzKCJFTkQi
KSx0LnB1dER5bmFtaWNQYXJ0aWFsRGVmaW5pdGlvbigpLHQuZXZhbHVhdGVQYXJ0aWFsKCksdC5s
YWJlbCgiRU5EIiksdC5leGl0KCksdC5zdG9wTGFiZWxzKCl9KSxkbi5hZGQoaG4uWWllbGQsZnVu
Y3Rpb24oZSx0KXt2YXIgbj1lWzFdLHI9ZVsyXSxpPVIocixudWxsLHQpCit0LnlpZWxkKGksbil9
KSxkbi5hZGQoaG4uRGVidWdnZXIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5wdXRWYWx1ZShbaG4u
RnVuY3Rpb24sZnVuY3Rpb24oZSl7dmFyIG49ZS5nZXRTZWxmKCkudmFsdWUoKQorcG4obixmdW5j
dGlvbihuKXtyZXR1cm4gVChlLHQpKG4pLnZhbHVlKCl9KX1dKSxlfSkKK3ZhciBtbj1uZXcgZm4K
K21uLmFkZChobi5Vbmtub3duLGZ1bmN0aW9uKGUsdCl7dmFyIG49ZVsxXSxyPW5bMF0KK3JldHVy
biB0LmVudi5oYXNIZWxwZXIocix0LnN5bWJvbFRhYmxlKT9uZXcgbm4ocix0LmVudi5sb29rdXBI
ZWxwZXIocix0LnN5bWJvbFRhYmxlKSxIZS5lbXB0eSgpLHQuc3ltYm9sVGFibGUpOkQobix0KX0p
LG1uLmFkZChobi5Db25jYXQsZnVuY3Rpb24oZSx0KXt2YXIgbj1lWzFdLm1hcChmdW5jdGlvbihl
KXtyZXR1cm4gUyhlLHQpfSkKK3JldHVybiBuZXcgcm4obil9KSxtbi5hZGQoaG4uRnVuY3Rpb24s
ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbmV3IHNuKGVbMV0sdC5zeW1ib2xUYWJsZSl9KSxtbi5hZGQo
aG4uSGVscGVyLGZ1bmN0aW9uKGUsdCl7dmFyIG4scj10LmVudixpPXQuc3ltYm9sVGFibGUsbz1l
WzFdLHM9b1swXSxhPWVbMl0sdT1lWzNdCitpZihyLmhhc0hlbHBlcihzLGkpKXJldHVybiBuPVIo
YSx1LHQpLG5ldyBubihzLHIubG9va3VwSGVscGVyKHMsaSksbixpKQordGhyb3cgbmV3IEVycm9y
KCJDb21waWxlIEVycm9yOiAiK3MrIiBpcyBub3QgYSBoZWxwZXIiKX0pLG1uLmFkZChobi5HZXQs
ZnVuY3Rpb24oZSx0KXtyZXR1cm4gRChlWzFdLHQpfSksbW4uYWRkKGhuLlVuZGVmaW5lZCxmdW5j
dGlvbigpe3JldHVybiBuZXcgd3Qodm9pZCAwKX0pLG1uLmFkZChobi5BcmcsZnVuY3Rpb24oZSx0
KXt2YXIgbixyLGksbyxzPWVbMV0sYT1zWzBdLHU9dm9pZCAwLGw9dm9pZCAwCitpZih1PXQuc3lt
Ym9sVGFibGUuZ2V0U3ltYm9sKCJuYW1lZCIsYSkpcmV0dXJuIG49cy5zbGljZSgxKSxyPW5ldyBl
bih1LGEpLFh0LmNyZWF0ZShyLG4pCitpZihsPXQuc3ltYm9sVGFibGUuZ2V0UGFydGlhbEFyZ3Mo
KSlyZXR1cm4gaT1zLnNsaWNlKDEpLG89bmV3IHRuKGwsYSksWHQuY3JlYXRlKG8saSkKK3Rocm93
IG5ldyBFcnJvcigiW0JVR10gQCIrcy5qb2luKCIuIikrIiBpcyBub3QgYSB2YWxpZCBsb29rdXAg
cGF0aC4iKX0pLG1uLmFkZChobi5IYXNCbG9jayxmdW5jdGlvbihlLHQpe3ZhciBuLHIsaT1lWzFd
LG89dm9pZCAwLHM9dm9pZCAwCitpZihvPXQuc3ltYm9sVGFibGUuZ2V0U3ltYm9sKCJ5aWVsZHMi
LGkpKXJldHVybiBuPW5ldyBDdChvLGkpLG5ldyBFdChuKQoraWYocz10LnN5bWJvbFRhYmxlLmdl
dFBhcnRpYWxBcmdzKCkpcmV0dXJuIHI9bmV3IE90KHMsaSksbmV3IEV0KHIpCit0aHJvdyBuZXcg
RXJyb3IoIltCVUddICR7YmxvY2tOYW1lfSBpcyBub3QgYSB2YWxpZCBibG9jayBuYW1lLiIpfSks
bW4uYWRkKGhuLkhhc0Jsb2NrUGFyYW1zLGZ1bmN0aW9uKGUsdCl7dmFyIG4scixpPWVbMV0sbz12
b2lkIDAscz12b2lkIDAKK2lmKG89dC5zeW1ib2xUYWJsZS5nZXRTeW1ib2woInlpZWxkcyIsaSkp
cmV0dXJuIG49bmV3IEN0KG8saSksbmV3IHh0KG4pCitpZihzPXQuc3ltYm9sVGFibGUuZ2V0UGFy
dGlhbEFyZ3MoKSlyZXR1cm4gcj1uZXcgT3QocyxpKSxuZXcgeHQocikKK3Rocm93IG5ldyBFcnJv
cigiW0JVR10gJHtibG9ja05hbWV9IGlzIG5vdCBhIHZhbGlkIGJsb2NrIG5hbWUuIil9KQordmFy
IGduPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMubmFtZXM9KDAsbi5kaWN0KSgpLHRoaXMu
ZnVuY3M9W119cmV0dXJuIGUucHJvdG90eXBlLmFkZD1mdW5jdGlvbihlLHQpe3RoaXMuZnVuY3Mu
cHVzaCh0KSx0aGlzLm5hbWVzW2VdPXRoaXMuZnVuY3MubGVuZ3RoLTF9LGUucHJvdG90eXBlLmFk
ZE1pc3Npbmc9ZnVuY3Rpb24oZSl7dGhpcy5taXNzaW5nPWV9LGUucHJvdG90eXBlLmNvbXBpbGU9
ZnVuY3Rpb24oZSx0KXt2YXIgcixpLG89ZVsxXVswXSxzPXRoaXMubmFtZXNbb10KK3ZvaWQgMD09
PXM/KCgwLG4uYXNzZXJ0KSghIXRoaXMubWlzc2luZyxvKyIgbm90IGZvdW5kLCBhbmQgbm8gY2F0
Y2gtYWxsIGJsb2NrIGhhbmRsZXIgd2FzIHJlZ2lzdGVyZWQiKSxyPXRoaXMubWlzc2luZyxpPXIo
ZSx0KSwoMCxuLmFzc2VydCkoISFpLG8rIiBub3QgZm91bmQsIGFuZCB0aGUgY2F0Y2gtYWxsIGJs
b2NrIGhhbmRsZXIgZGlkbid0IGhhbmRsZSBpdCIpKTooMCx0aGlzLmZ1bmNzW3NdKShlLHQpfSxl
fSgpLHluPW5ldyBnbix2bj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLm5hbWVzPSgwLG4u
ZGljdCkoKSx0aGlzLmZ1bmNzPVtdfXJldHVybiBlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSx0
KXt0aGlzLmZ1bmNzLnB1c2godCksdGhpcy5uYW1lc1tlXT10aGlzLmZ1bmNzLmxlbmd0aC0xfSxl
LnByb3RvdHlwZS5hZGRNaXNzaW5nPWZ1bmN0aW9uKGUpe3RoaXMubWlzc2luZz1lfSxlLnByb3Rv
dHlwZS5jb21waWxlPWZ1bmN0aW9uKGUsdCl7dmFyIG4scixpLG8scz1lWzFdCitpZighQXJyYXku
aXNBcnJheShzKSlyZXR1cm5bImV4cHIiLHNdCit2YXIgYT12b2lkIDAsdT12b2lkIDAsbD12b2lk
IDAKK2lmKHNbMF09PT1obi5IZWxwZXIpYT1zWzFdLHU9c1syXSxsPXNbM10KK2Vsc2V7aWYoc1sw
XSE9PWhuLlVua25vd24pcmV0dXJuWyJleHByIixzXQorYT1zWzFdLHU9bD1udWxsfWlmKGEubGVu
Z3RoPjEmJiF1JiYhbClyZXR1cm5bImV4cHIiLHNdCit2YXIgYz1hWzBdLHA9dGhpcy5uYW1lc1tj
XQorcmV0dXJuIHZvaWQgMD09PXAmJnRoaXMubWlzc2luZz8obj10aGlzLm1pc3Npbmcscj1uKGEs
dSxsLHQpLCExPT09cj9bImV4cHIiLHNdOnIpOnZvaWQgMCE9PXA/KGk9dGhpcy5mdW5jc1twXSxv
PWkoYSx1LGwsdCksITE9PT1vP1siZXhwciIsc106byk6WyJleHByIixzXX0sZX0oKQorTCh5bixu
ZXcgdm4pCit2YXIgYm49WyJqYXZhc2NyaXB0OiIsInZic2NyaXB0OiJdLF9uPVsiQSIsIkJPRFki
LCJMSU5LIiwiSU1HIiwiSUZSQU1FIiwiQkFTRSIsIkZPUk0iXSx3bj1bIkVNQkVEIl0sRW49WyJo
cmVmIiwic3JjIiwiYmFja2dyb3VuZCIsImFjdGlvbiJdLHhuPVsic3JjIl0sQ249e0JVVFRPTjp7
dHlwZTohMCxmb3JtOiEwfSxJTlBVVDp7dHlwZTohMCxmb3JtOiEwLGF1dG9jb3JyZWN0OiEwLGxp
c3Q6ITB9LFNFTEVDVDp7Zm9ybTohMH0sT1BUSU9OOntmb3JtOiEwfSxURVhUQVJFQTp7Zm9ybToh
MH0sTEFCRUw6e2Zvcm06ITB9LEZJRUxEU0VUOntmb3JtOiEwfSxMRUdFTkQ6e2Zvcm06ITB9LE9C
SkVDVDp7Zm9ybTohMH19LE9uPXtjb2xncm91cDp7ZGVwdGg6MixiZWZvcmU6Ijx0YWJsZT48Y29s
Z3JvdXA+IixhZnRlcjoiPC9jb2xncm91cD48L3RhYmxlPiJ9LHRhYmxlOntkZXB0aDoxLGJlZm9y
ZToiPHRhYmxlPiIsYWZ0ZXI6IjwvdGFibGU+In0sdGJvZHk6e2RlcHRoOjIsYmVmb3JlOiI8dGFi
bGU+PHRib2R5PiIsYWZ0ZXI6IjwvdGJvZHk+PC90YWJsZT4ifSx0Zm9vdDp7ZGVwdGg6MixiZWZv
cmU6Ijx0YWJsZT48dGZvb3Q+IixhZnRlcjoiPC90Zm9vdD48L3RhYmxlPiJ9LHRoZWFkOntkZXB0
aDoyLGJlZm9yZToiPHRhYmxlPjx0aGVhZD4iLGFmdGVyOiI8L3RoZWFkPjwvdGFibGU+In0sdHI6
e2RlcHRoOjMsYmVmb3JlOiI8dGFibGU+PHRib2R5Pjx0cj4iLGFmdGVyOiI8L3RyPjwvdGJvZHk+
PC90YWJsZT4ifX0sQW49Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixUbj17Zm9yZWlnbk9i
amVjdDoxLGRlc2M6MSx0aXRsZToxfSxTbj1PYmplY3QuY3JlYXRlKG51bGwpO1siYiIsImJpZyIs
ImJsb2NrcXVvdGUiLCJib2R5IiwiYnIiLCJjZW50ZXIiLCJjb2RlIiwiZGQiLCJkaXYiLCJkbCIs
ImR0IiwiZW0iLCJlbWJlZCIsImgxIiwiaDIiLCJoMyIsImg0IiwiaDUiLCJoNiIsImhlYWQiLCJo
ciIsImkiLCJpbWciLCJsaSIsImxpc3RpbmciLCJtYWluIiwibWV0YSIsIm5vYnIiLCJvbCIsInAi
LCJwcmUiLCJydWJ5IiwicyIsInNtYWxsIiwic3BhbiIsInN0cm9uZyIsInN0cmlrZSIsInN1YiIs
InN1cCIsInRhYmxlIiwidHQiLCJ1IiwidWwiLCJ2YXIiXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3Jl
dHVybiBTbltlXT0xfSkKK3ZhciBSbixrbj0vW1x0LVxyIFx4QTBcdTE2ODBcdTE4MEVcdTIwMDAt
XHUyMDBBXHUyMDI4XHUyMDI5XHUyMDJGXHUyMDVGXHUzMDAwXHVGRUZGXS8sTm49InVuZGVmaW5l
ZCI9PXR5cGVvZiBkb2N1bWVudD9udWxsOmRvY3VtZW50OyhmdW5jdGlvbihlKXt2YXIgdD1mdW5j
dGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5kb2N1bWVudD1lLHRoaXMuc2V0dXBVc2VsZXNzRWxl
bWVudCgpfXJldHVybiBlLnByb3RvdHlwZS5zZXR1cFVzZWxlc3NFbGVtZW50PWZ1bmN0aW9uKCl7
dGhpcy51c2VsZXNzRWxlbWVudD10aGlzLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpfSxl
LnByb3RvdHlwZS5jcmVhdGVFbGVtZW50PWZ1bmN0aW9uKGUsdCl7dmFyIG49dm9pZCAwLHI9dm9p
ZCAwCitpZih0PyhuPXQubmFtZXNwYWNlVVJJPT09QW58fCJzdmciPT09ZSxyPVRuW3QudGFnTmFt
ZV0pOihuPSJzdmciPT09ZSxyPSExKSxuJiYhcil7aWYoU25bZV0pdGhyb3cgbmV3IEVycm9yKCJD
YW5ub3QgY3JlYXRlIGEgIitlKyIgaW5zaWRlIGFuIFNWRyBjb250ZXh0IikKK3JldHVybiB0aGlz
LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhBbixlKX1yZXR1cm4gdGhpcy5kb2N1bWVudC5jcmVh
dGVFbGVtZW50KGUpfSxlLnByb3RvdHlwZS5jcmVhdGVFbGVtZW50TlM9ZnVuY3Rpb24oZSx0KXty
ZXR1cm4gdGhpcy5kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoZSx0KX0sZS5wcm90b3R5cGUuc2V0
QXR0cmlidXRlPWZ1bmN0aW9uKGUsdCxuLHIpe3I/ZS5zZXRBdHRyaWJ1dGVOUyhyLHQsbik6ZS5z
ZXRBdHRyaWJ1dGUodCxuKX0sZS5wcm90b3R5cGUuY3JlYXRlVGV4dE5vZGU9ZnVuY3Rpb24oZSl7
cmV0dXJuIHRoaXMuZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZSl9LGUucHJvdG90eXBlLmNyZWF0
ZUNvbW1lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZG9jdW1lbnQuY3JlYXRlQ29tbWVudChl
KX0sZS5wcm90b3R5cGUuaW5zZXJ0QmVmb3JlPWZ1bmN0aW9uKGUsdCxuKXtlLmluc2VydEJlZm9y
ZSh0LG4pfSxlLnByb3RvdHlwZS5pbnNlcnRIVE1MQmVmb3JlPWZ1bmN0aW9uKGUsdCxuKXtyZXR1
cm4gWCh0aGlzLnVzZWxlc3NFbGVtZW50LGUsbix0KX0sZX0oKQorZS5UcmVlQ29uc3RydWN0aW9u
PXQKK3ZhciBuPXQKK249UShObixuKSxuPUgoTm4sbiksbj0kKE5uLG4sQW4pLGUuRE9NVHJlZUNv
bnN0cnVjdGlvbj1ufSkoUm58fChSbj17fSkpCit2YXIgUG49ZnVuY3Rpb24oKXtmdW5jdGlvbiBl
KGUpe3RoaXMuZG9jdW1lbnQ9ZSx0aGlzLm5hbWVzcGFjZT1udWxsLHRoaXMudXNlbGVzc0VsZW1l
bnQ9dGhpcy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKX1yZXR1cm4gZS5wcm90b3R5cGUu
c2V0QXR0cmlidXRlPWZ1bmN0aW9uKGUsdCxuKXtlLnNldEF0dHJpYnV0ZSh0LG4pfSxlLnByb3Rv
dHlwZS5zZXRBdHRyaWJ1dGVOUz1mdW5jdGlvbihlLHQsbixyKXtlLnNldEF0dHJpYnV0ZU5TKHQs
bixyKX0sZS5wcm90b3R5cGUucmVtb3ZlQXR0cmlidXRlPWZ1bmN0aW9uKGUsdCl7ZS5yZW1vdmVB
dHRyaWJ1dGUodCl9LGUucHJvdG90eXBlLnJlbW92ZUF0dHJpYnV0ZU5TPWZ1bmN0aW9uKGUsdCxu
KXtlLnJlbW92ZUF0dHJpYnV0ZU5TKHQsbil9LGUucHJvdG90eXBlLmNyZWF0ZVRleHROb2RlPWZ1
bmN0aW9uKGUpe3JldHVybiB0aGlzLmRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGUpfSxlLnByb3Rv
dHlwZS5jcmVhdGVDb21tZW50PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmRvY3VtZW50LmNyZWF0
ZUNvbW1lbnQoZSl9LGUucHJvdG90eXBlLmNyZWF0ZUVsZW1lbnQ9ZnVuY3Rpb24oZSx0KXt2YXIg
bj12b2lkIDAscj12b2lkIDAKK2lmKHQ/KG49dC5uYW1lc3BhY2VVUkk9PT1Bbnx8InN2ZyI9PT1l
LHI9VG5bdC50YWdOYW1lXSk6KG49InN2ZyI9PT1lLHI9ITEpLG4mJiFyKXtpZihTbltlXSl0aHJv
dyBuZXcgRXJyb3IoIkNhbm5vdCBjcmVhdGUgYSAiK2UrIiBpbnNpZGUgYW4gU1ZHIGNvbnRleHQi
KQorcmV0dXJuIHRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKEFuLGUpfXJldHVybiB0aGlz
LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZSl9LGUucHJvdG90eXBlLmluc2VydEhUTUxCZWZvcmU9
ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBYKHRoaXMudXNlbGVzc0VsZW1lbnQsZSx0LG4pfSxlLnBy
b3RvdHlwZS5pbnNlcnROb2RlQmVmb3JlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpCityZXR1cm4g
Wih0KT8ocj10LmZpcnN0Q2hpbGQsaT10Lmxhc3RDaGlsZCx0aGlzLmluc2VydEJlZm9yZShlLHQs
biksbmV3IFllKGUscixpKSk6KHRoaXMuaW5zZXJ0QmVmb3JlKGUsdCxuKSxuZXcgSmUoZSx0KSl9
LGUucHJvdG90eXBlLmluc2VydFRleHRCZWZvcmU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMu
Y3JlYXRlVGV4dE5vZGUobikKK3JldHVybiB0aGlzLmluc2VydEJlZm9yZShlLHIsdCkscn0sZS5w
cm90b3R5cGUuaW5zZXJ0QmVmb3JlPWZ1bmN0aW9uKGUsdCxuKXtlLmluc2VydEJlZm9yZSh0LG4p
fSxlLnByb3RvdHlwZS5pbnNlcnRBZnRlcj1mdW5jdGlvbihlLHQsbil7dGhpcy5pbnNlcnRCZWZv
cmUoZSx0LG4ubmV4dFNpYmxpbmcpfSxlfSgpLGpuPVBuCitqbj1mdW5jdGlvbihlLG4pe3JldHVy
biBlJiZZKGUpP2Z1bmN0aW9uKGUpe2Z1bmN0aW9uIG4obil7dmFyIHI9KDAsdC5wb3NzaWJsZUNv
bnN0cnVjdG9yUmV0dXJuKSh0aGlzLGUuY2FsbCh0aGlzLG4pKQorcmV0dXJuIHIudXNlbGVzc0Nv
bW1lbnQ9bi5jcmVhdGVDb21tZW50KCIiKSxyfXJldHVybigwLHQuaW5oZXJpdHMpKG4sZSksbi5w
cm90b3R5cGUuaW5zZXJ0SFRNTEJlZm9yZT1mdW5jdGlvbih0LG4scil7aWYobnVsbD09PXIpcmV0
dXJuIGUucHJvdG90eXBlLmluc2VydEhUTUxCZWZvcmUuY2FsbCh0aGlzLHQsbixyKQordmFyIGk9
ITEsbz1uP24ucHJldmlvdXNTaWJsaW5nOnQubGFzdENoaWxkCitvJiZvIGluc3RhbmNlb2YgVGV4
dCYmKGk9ITAsdC5pbnNlcnRCZWZvcmUodGhpcy51c2VsZXNzQ29tbWVudCxuKSkKK3ZhciBzPWUu
cHJvdG90eXBlLmluc2VydEhUTUxCZWZvcmUuY2FsbCh0aGlzLHQsbixyKQorcmV0dXJuIGkmJnQu
cmVtb3ZlQ2hpbGQodGhpcy51c2VsZXNzQ29tbWVudCksc30sbn0obik6bn0oTm4sam4pLGpuPWZ1
bmN0aW9uKGUsbil7aWYoIWUpcmV0dXJuIG4KK2lmKCFXKGUpKXJldHVybiBuCit2YXIgcj1lLmNy
ZWF0ZUVsZW1lbnQoImRpdiIpCityZXR1cm4gZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbigpe3JldHVy
bigwLHQucG9zc2libGVDb25zdHJ1Y3RvclJldHVybikodGhpcyxlLmFwcGx5KHRoaXMsYXJndW1l
bnRzKSl9cmV0dXJuKDAsdC5pbmhlcml0cykobixlKSxuLnByb3RvdHlwZS5pbnNlcnRIVE1MQmVm
b3JlPWZ1bmN0aW9uKHQsbixpKXtpZihudWxsPT09aXx8IiI9PT1pKXJldHVybiBlLnByb3RvdHlw
ZS5pbnNlcnRIVE1MQmVmb3JlLmNhbGwodGhpcyx0LG4saSkKK3ZhciBvPXQudGFnTmFtZS50b0xv
d2VyQ2FzZSgpLHM9T25bb10KK3JldHVybiB2b2lkIDA9PT1zP2UucHJvdG90eXBlLmluc2VydEhU
TUxCZWZvcmUuY2FsbCh0aGlzLHQsbixpKTpWKHQscyxyLGksbil9LG59KG4pfShObixqbiksam49
ZnVuY3Rpb24oZSxuLHIpe2lmKCFlKXJldHVybiBuCitpZighSyhlLHIpKXJldHVybiBuCit2YXIg
aT1lLmNyZWF0ZUVsZW1lbnQoImRpdiIpCityZXR1cm4gZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbigp
e3JldHVybigwLHQucG9zc2libGVDb25zdHJ1Y3RvclJldHVybikodGhpcyxlLmFwcGx5KHRoaXMs
YXJndW1lbnRzKSl9cmV0dXJuKDAsdC5pbmhlcml0cykobixlKSxuLnByb3RvdHlwZS5pbnNlcnRI
VE1MQmVmb3JlPWZ1bmN0aW9uKHQsbixvKXtyZXR1cm4gbnVsbD09PW98fCIiPT09bz9lLnByb3Rv
dHlwZS5pbnNlcnRIVE1MQmVmb3JlLmNhbGwodGhpcyx0LG4sbyk6dC5uYW1lc3BhY2VVUkkhPT1y
P2UucHJvdG90eXBlLmluc2VydEhUTUxCZWZvcmUuY2FsbCh0aGlzLHQsbixvKTpHKHQsaSxvLG4p
fSxufShuKX0oTm4sam4sQW4pCit2YXIgRG49am4sTG49Um4uRE9NVHJlZUNvbnN0cnVjdGlvbixJ
bj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5hdHRyPWV9cmV0dXJuIGUucHJvdG90eXBl
LnNldEF0dHJpYnV0ZT1mdW5jdGlvbihlLHQsbixyKXt2YXIgaT1lLmdldEFwcGVuZE9wZXJhdGlv
bnMoKSxvPXJlKG4pCitpZShvKXx8aS5zZXRBdHRyaWJ1dGUodCx0aGlzLmF0dHIsbyxyKX0sZS5w
cm90b3R5cGUudXBkYXRlQXR0cmlidXRlPWZ1bmN0aW9uKGUsdCxuLHIpe251bGw9PT1ufHx2b2lk
IDA9PT1ufHwhMT09PW4/cj9lLmdldERPTSgpLnJlbW92ZUF0dHJpYnV0ZU5TKHQscix0aGlzLmF0
dHIpOmUuZ2V0RE9NKCkucmVtb3ZlQXR0cmlidXRlKHQsdGhpcy5hdHRyKTp0aGlzLnNldEF0dHJp
YnV0ZShlLHQsbil9LGV9KCksTW49ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbigpe3JldHVybigwLHQu
cG9zc2libGVDb25zdHJ1Y3RvclJldHVybikodGhpcyxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9
cmV0dXJuKDAsdC5pbmhlcml0cykobixlKSxuLnByb3RvdHlwZS5zZXRBdHRyaWJ1dGU9ZnVuY3Rp
b24oZSx0LG4pe2llKG4pfHwodFt0aGlzLmF0dHJdPW4pfSxuLnByb3RvdHlwZS5yZW1vdmVBdHRy
aWJ1dGU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMuYXR0cgorbj9lLmdldERPTSgpLnJlbW92
ZUF0dHJpYnV0ZU5TKHQsbixyKTplLmdldERPTSgpLnJlbW92ZUF0dHJpYnV0ZSh0LHIpfSxuLnBy
b3RvdHlwZS51cGRhdGVBdHRyaWJ1dGU9ZnVuY3Rpb24oZSx0LG4scil7dFt0aGlzLmF0dHJdPW4s
aWUobikmJnRoaXMucmVtb3ZlQXR0cmlidXRlKGUsdCxyKX0sbn0oSW4pLEZuPWZ1bmN0aW9uKGUp
e2Z1bmN0aW9uIG4oKXtyZXR1cm4oMCx0LnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4pKHRoaXMs
ZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXJldHVybigwLHQuaW5oZXJpdHMpKG4sZSksbi5wcm90
b3R5cGUuc2V0QXR0cmlidXRlPWZ1bmN0aW9uKHQsbixyKXtlLnByb3RvdHlwZS5zZXRBdHRyaWJ1
dGUuY2FsbCh0aGlzLHQsbixVKHQsbix0aGlzLmF0dHIscikpfSxuLnByb3RvdHlwZS51cGRhdGVB
dHRyaWJ1dGU9ZnVuY3Rpb24odCxuLHIpe2UucHJvdG90eXBlLnVwZGF0ZUF0dHJpYnV0ZS5jYWxs
KHRoaXMsdCxuLFUodCxuLHRoaXMuYXR0cixyKSl9LG59KE1uKSx6bj1mdW5jdGlvbihlKXtmdW5j
dGlvbiBuKCl7cmV0dXJuKDAsdC5wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKSh0aGlzLGUuYXBw
bHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4oMCx0LmluaGVyaXRzKShuLGUpLG4ucHJvdG90eXBl
LnNldEF0dHJpYnV0ZT1mdW5jdGlvbihlLHQsbil7dC52YWx1ZT11ZShuKX0sbi5wcm90b3R5cGUu
dXBkYXRlQXR0cmlidXRlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10LGk9ci52YWx1ZSxvPXVlKG4p
CitpIT09byYmKHIudmFsdWU9byl9LG59KEluKSxVbj1uZXcgem4oInZhbHVlIiksQm49ZnVuY3Rp
b24oZSl7ZnVuY3Rpb24gbigpe3JldHVybigwLHQucG9zc2libGVDb25zdHJ1Y3RvclJldHVybiko
dGhpcyxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9cmV0dXJuKDAsdC5pbmhlcml0cykobixlKSxu
LnByb3RvdHlwZS5zZXRBdHRyaWJ1dGU9ZnVuY3Rpb24oZSx0LG4pe251bGwhPT1uJiZ2b2lkIDAh
PT1uJiYhMSE9PW4mJih0LnNlbGVjdGVkPSEwKX0sbi5wcm90b3R5cGUudXBkYXRlQXR0cmlidXRl
PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10CityLnNlbGVjdGVkPSEhbn0sbn0oTW4pLHFuPW5ldyBC
bigic2VsZWN0ZWQiKSxIbj1mdW5jdGlvbihlKXtmdW5jdGlvbiBuKCl7cmV0dXJuKDAsdC5wb3Nz
aWJsZUNvbnN0cnVjdG9yUmV0dXJuKSh0aGlzLGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1yZXR1
cm4oMCx0LmluaGVyaXRzKShuLGUpLG4ucHJvdG90eXBlLnNldEF0dHJpYnV0ZT1mdW5jdGlvbih0
LG4scil7ZS5wcm90b3R5cGUuc2V0QXR0cmlidXRlLmNhbGwodGhpcyx0LG4sVSh0LG4sdGhpcy5h
dHRyLHIpKX0sbi5wcm90b3R5cGUudXBkYXRlQXR0cmlidXRlPWZ1bmN0aW9uKHQsbixyKXtlLnBy
b3RvdHlwZS51cGRhdGVBdHRyaWJ1dGUuY2FsbCh0aGlzLHQsbixVKHQsbix0aGlzLmF0dHIscikp
fSxufShJbiksVm49ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5n
dGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpudWxsCit0aGlzLmNhbGxl
clNjb3BlPW51bGwsdGhpcy5zbG90cz1lLHRoaXMuY2FsbGVyU2NvcGU9dH1yZXR1cm4gZS5yb290
PWZ1bmN0aW9uKHQpe3ZhciBuLHI9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVu
dHNbMV0/YXJndW1lbnRzWzFdOjAsaT1uZXcgQXJyYXkocisxKQorZm9yKG49MDtuPD1yO24rKylp
W25dPW1lCityZXR1cm4gbmV3IGUoaSkuaW5pdCh7c2VsZjp0fSl9LGUucHJvdG90eXBlLmluaXQ9
ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zZWxmCityZXR1cm4gdGhpcy5zbG90c1swXT10LHRoaXN9LGUu
cHJvdG90eXBlLmdldFNlbGY9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zbG90c1swXX0sZS5wcm90
b3R5cGUuZ2V0U3ltYm9sPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnNsb3RzW2VdfSxlLnByb3Rv
dHlwZS5nZXRCbG9jaz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5zbG90c1tlXX0sZS5wcm90b3R5
cGUuZ2V0UGFydGlhbEFyZ3M9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuc2xvdHNbZV19LGUucHJv
dG90eXBlLmJpbmRTeW1ib2w9ZnVuY3Rpb24oZSx0KXt0aGlzLnNsb3RzW2VdPXR9LGUucHJvdG90
eXBlLmJpbmRCbG9jaz1mdW5jdGlvbihlLHQpe3RoaXMuc2xvdHNbZV09dH0sZS5wcm90b3R5cGUu
YmluZFBhcnRpYWxBcmdzPWZ1bmN0aW9uKGUsdCl7dGhpcy5zbG90c1tlXT10fSxlLnByb3RvdHlw
ZS5iaW5kQ2FsbGVyU2NvcGU9ZnVuY3Rpb24oZSl7dGhpcy5jYWxsZXJTY29wZT1lfSxlLnByb3Rv
dHlwZS5nZXRDYWxsZXJTY29wZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNhbGxlclNjb3BlfSxl
LnByb3RvdHlwZS5jaGlsZD1mdW5jdGlvbigpe3JldHVybiBuZXcgZSh0aGlzLnNsb3RzLnNsaWNl
KCksdGhpcy5jYWxsZXJTY29wZSl9LGV9KCksV249ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhp
cy5zY2hlZHVsZWRJbnN0YWxsTWFuYWdlcnM9W10sdGhpcy5zY2hlZHVsZWRJbnN0YWxsTW9kaWZp
ZXJzPVtdLHRoaXMuc2NoZWR1bGVkVXBkYXRlTW9kaWZpZXJNYW5hZ2Vycz1bXSx0aGlzLnNjaGVk
dWxlZFVwZGF0ZU1vZGlmaWVycz1bXSx0aGlzLmNyZWF0ZWRDb21wb25lbnRzPVtdLHRoaXMuY3Jl
YXRlZE1hbmFnZXJzPVtdLHRoaXMudXBkYXRlZENvbXBvbmVudHM9W10sdGhpcy51cGRhdGVkTWFu
YWdlcnM9W10sdGhpcy5kZXN0cnVjdG9ycz1bXX1yZXR1cm4gZS5wcm90b3R5cGUuZGlkQ3JlYXRl
PWZ1bmN0aW9uKGUsdCl7dGhpcy5jcmVhdGVkQ29tcG9uZW50cy5wdXNoKGUpLHRoaXMuY3JlYXRl
ZE1hbmFnZXJzLnB1c2godCl9LGUucHJvdG90eXBlLmRpZFVwZGF0ZT1mdW5jdGlvbihlLHQpe3Ro
aXMudXBkYXRlZENvbXBvbmVudHMucHVzaChlKSx0aGlzLnVwZGF0ZWRNYW5hZ2Vycy5wdXNoKHQp
fSxlLnByb3RvdHlwZS5zY2hlZHVsZUluc3RhbGxNb2RpZmllcj1mdW5jdGlvbihlLHQpe3RoaXMu
c2NoZWR1bGVkSW5zdGFsbE1hbmFnZXJzLnB1c2godCksdGhpcy5zY2hlZHVsZWRJbnN0YWxsTW9k
aWZpZXJzLnB1c2goZSl9LGUucHJvdG90eXBlLnNjaGVkdWxlVXBkYXRlTW9kaWZpZXI9ZnVuY3Rp
b24oZSx0KXt0aGlzLnNjaGVkdWxlZFVwZGF0ZU1vZGlmaWVyTWFuYWdlcnMucHVzaCh0KSx0aGlz
LnNjaGVkdWxlZFVwZGF0ZU1vZGlmaWVycy5wdXNoKGUpfSxlLnByb3RvdHlwZS5kaWREZXN0cm95
PWZ1bmN0aW9uKGUpe3RoaXMuZGVzdHJ1Y3RvcnMucHVzaChlKX0sZS5wcm90b3R5cGUuY29tbWl0
PWZ1bmN0aW9uKCl7dmFyIGUsdCxuLHIsaSxvLHMsYSx1LGwsYyxwLGYsaD10aGlzLmNyZWF0ZWRD
b21wb25lbnRzLGQ9dGhpcy5jcmVhdGVkTWFuYWdlcnMKK2ZvcihlPTA7ZTxoLmxlbmd0aDtlKysp
dD1oW2VdLG49ZFtlXSxuLmRpZENyZWF0ZSh0KQordmFyIG09dGhpcy51cGRhdGVkQ29tcG9uZW50
cyxnPXRoaXMudXBkYXRlZE1hbmFnZXJzCitmb3Iocj0wO3I8bS5sZW5ndGg7cisrKWk9bVtyXSxv
PWdbcl0sby5kaWRVcGRhdGUoaSkKK3ZhciB5PXRoaXMuZGVzdHJ1Y3RvcnMKK2ZvcihzPTA7czx5
Lmxlbmd0aDtzKyspeVtzXS5kZXN0cm95KCkKK3ZhciB2PXRoaXMuc2NoZWR1bGVkSW5zdGFsbE1h
bmFnZXJzLGI9dGhpcy5zY2hlZHVsZWRJbnN0YWxsTW9kaWZpZXJzCitmb3IoYT0wO2E8di5sZW5n
dGg7YSsrKXU9dlthXSxsPWJbYV0sdS5pbnN0YWxsKGwpCit2YXIgXz10aGlzLnNjaGVkdWxlZFVw
ZGF0ZU1vZGlmaWVyTWFuYWdlcnMsdz10aGlzLnNjaGVkdWxlZFVwZGF0ZU1vZGlmaWVycworZm9y
KGM9MDtjPF8ubGVuZ3RoO2MrKylwPV9bY10sZj13W2NdLHAudXBkYXRlKGYpfSxlfSgpLCRuPWZ1
bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLmFycmF5PWUsdGhpcy5vZmZzZXQ9MH1yZXR1cm4o
MCx0LmNyZWF0ZUNsYXNzKShlLFt7a2V5OiJ0eXBlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhp
cy5hcnJheVt0aGlzLm9mZnNldF19fSx7a2V5OiJvcDEiLGdldDpmdW5jdGlvbigpe3JldHVybiB0
aGlzLmFycmF5W3RoaXMub2Zmc2V0KzFdfX0se2tleToib3AyIixnZXQ6ZnVuY3Rpb24oKXtyZXR1
cm4gdGhpcy5hcnJheVt0aGlzLm9mZnNldCsyXX19LHtrZXk6Im9wMyIsZ2V0OmZ1bmN0aW9uKCl7
cmV0dXJuIHRoaXMuYXJyYXlbdGhpcy5vZmZzZXQrM119fV0pLGV9KCksR249ZnVuY3Rpb24oKXtm
dW5jdGlvbiBlKCl7dGhpcy5vcGNvZGVzPVtdLHRoaXMuX29mZnNldD0wLHRoaXMuX29wY29kZT1u
ZXcgJG4odGhpcy5vcGNvZGVzKX1yZXR1cm4gZS5wcm90b3R5cGUub3Bjb2RlPWZ1bmN0aW9uKGUp
e3JldHVybiB0aGlzLl9vcGNvZGUub2Zmc2V0PWUsdGhpcy5fb3Bjb2RlfSxlLnByb3RvdHlwZS5z
ZXQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3Vt
ZW50c1syXT9hcmd1bWVudHNbMl06MCxyPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJn
dW1lbnRzWzNdP2FyZ3VtZW50c1szXTowLGk9YXJndW1lbnRzLmxlbmd0aD40JiZ2b2lkIDAhPT1h
cmd1bWVudHNbNF0/YXJndW1lbnRzWzRdOjAKK3RoaXMub3Bjb2Rlc1tlXT10LHRoaXMub3Bjb2Rl
c1tlKzFdPW4sdGhpcy5vcGNvZGVzW2UrMl09cix0aGlzLm9wY29kZXNbZSszXT1pfSxlLnByb3Rv
dHlwZS5wdXNoPWZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09
YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowLG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAh
PT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOjAscj1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQg
MCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106MCxpPXRoaXMuX29mZnNldAorcmV0dXJuIHRo
aXMub3Bjb2Rlc1t0aGlzLl9vZmZzZXQrK109ZSx0aGlzLm9wY29kZXNbdGhpcy5fb2Zmc2V0Kytd
PXQsdGhpcy5vcGNvZGVzW3RoaXMuX29mZnNldCsrXT1uLHRoaXMub3Bjb2Rlc1t0aGlzLl9vZmZz
ZXQrK109cixpfSwoMCx0LmNyZWF0ZUNsYXNzKShlLFt7a2V5OiJuZXh0IixnZXQ6ZnVuY3Rpb24o
KXtyZXR1cm4gdGhpcy5fb2Zmc2V0fX0se2tleToiY3VycmVudCIsZ2V0OmZ1bmN0aW9uKCl7cmV0
dXJuIHRoaXMuX29mZnNldC00fX1dKSxlfSgpLEtuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt2
YXIgdD1lLmFwcGVuZE9wZXJhdGlvbnMsbj1lLnVwZGF0ZU9wZXJhdGlvbnMKK3RoaXMuX21hY3Jv
cz1udWxsLHRoaXMuX3RyYW5zYWN0aW9uPW51bGwsdGhpcy5jb25zdGFudHM9bmV3IF9lLHRoaXMu
cHJvZ3JhbT1uZXcgR24sdGhpcy5hcHBlbmRPcGVyYXRpb25zPXQsdGhpcy51cGRhdGVPcGVyYXRp
b25zPW59cmV0dXJuIGUucHJvdG90eXBlLnRvQ29uZGl0aW9uYWxSZWZlcmVuY2U9ZnVuY3Rpb24o
ZSl7cmV0dXJuIG5ldyBiZShlKX0sZS5wcm90b3R5cGUuZ2V0QXBwZW5kT3BlcmF0aW9ucz1mdW5j
dGlvbigpe3JldHVybiB0aGlzLmFwcGVuZE9wZXJhdGlvbnN9LGUucHJvdG90eXBlLmdldERPTT1m
dW5jdGlvbigpe3JldHVybiB0aGlzLnVwZGF0ZU9wZXJhdGlvbnN9LGUucHJvdG90eXBlLmdldElk
ZW50aXR5PWZ1bmN0aW9uKGUpe3JldHVybigwLG4uZW5zdXJlR3VpZCkoZSkrIiJ9LGUucHJvdG90
eXBlLmJlZ2luPWZ1bmN0aW9uKCl7dGhpcy5fdHJhbnNhY3Rpb249bmV3IFdufSxlLnByb3RvdHlw
ZS5kaWRDcmVhdGU9ZnVuY3Rpb24oZSx0KXt0aGlzLnRyYW5zYWN0aW9uLmRpZENyZWF0ZShlLHQp
fSxlLnByb3RvdHlwZS5kaWRVcGRhdGU9ZnVuY3Rpb24oZSx0KXt0aGlzLnRyYW5zYWN0aW9uLmRp
ZFVwZGF0ZShlLHQpfSxlLnByb3RvdHlwZS5zY2hlZHVsZUluc3RhbGxNb2RpZmllcj1mdW5jdGlv
bihlLHQpe3RoaXMudHJhbnNhY3Rpb24uc2NoZWR1bGVJbnN0YWxsTW9kaWZpZXIoZSx0KX0sZS5w
cm90b3R5cGUuc2NoZWR1bGVVcGRhdGVNb2RpZmllcj1mdW5jdGlvbihlLHQpe3RoaXMudHJhbnNh
Y3Rpb24uc2NoZWR1bGVVcGRhdGVNb2RpZmllcihlLHQpfSxlLnByb3RvdHlwZS5kaWREZXN0cm95
PWZ1bmN0aW9uKGUpe3RoaXMudHJhbnNhY3Rpb24uZGlkRGVzdHJveShlKX0sZS5wcm90b3R5cGUu
Y29tbWl0PWZ1bmN0aW9uKCl7dGhpcy50cmFuc2FjdGlvbi5jb21taXQoKSx0aGlzLl90cmFuc2Fj
dGlvbj1udWxsfSxlLnByb3RvdHlwZS5hdHRyaWJ1dGVGb3I9ZnVuY3Rpb24oZSx0LG4scil7cmV0
dXJuIGVlKGUsdCl9LGUucHJvdG90eXBlLm1hY3Jvcz1mdW5jdGlvbigpe3ZhciBlPXRoaXMuX21h
Y3JvcworcmV0dXJuIGV8fCh0aGlzLl9tYWNyb3M9ZT1MKCkpLGV9LCgwLHQuY3JlYXRlQ2xhc3Mp
KGUsW3trZXk6InRyYW5zYWN0aW9uIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxuLmV4cGVjdCko
dGhpcy5fdHJhbnNhY3Rpb24sIm11c3QgYmUgaW4gYSB0cmFuc2FjdGlvbiIpfX1dKSxlfSgpLFFu
PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbil7dGhpcy5lbnY9ZSx0aGlzLnVwZGF0aW5nPXQs
dGhpcy5ib3VuZHM9bn1yZXR1cm4gZS5wcm90b3R5cGUucmVyZW5kZXI9ZnVuY3Rpb24oKXt2YXIg
ZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06
e2Fsd2F5c1JldmFsaWRhdGU6ITF9LHQ9ZS5hbHdheXNSZXZhbGlkYXRlLG49dm9pZCAwIT09dCYm
dCxyPXRoaXMuZW52LGk9dGhpcy51cGRhdGluZworbmV3IGVyKHIse2Fsd2F5c1JldmFsaWRhdGU6
bn0pLmV4ZWN1dGUoaSx0aGlzKX0sZS5wcm90b3R5cGUucGFyZW50RWxlbWVudD1mdW5jdGlvbigp
e3JldHVybiB0aGlzLmJvdW5kcy5wYXJlbnRFbGVtZW50KCl9LGUucHJvdG90eXBlLmZpcnN0Tm9k
ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmJvdW5kcy5maXJzdE5vZGUoKX0sZS5wcm90b3R5cGUu
bGFzdE5vZGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ib3VuZHMubGFzdE5vZGUoKX0sZS5wcm90
b3R5cGUub3Bjb2Rlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnVwZGF0aW5nfSxlLnByb3RvdHlw
ZS5oYW5kbGVFeGNlcHRpb249ZnVuY3Rpb24oKXt0aHJvdyJ0aGlzIHNob3VsZCBuZXZlciBoYXBw
ZW4ifSxlLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5ib3VuZHMuZGVzdHJveSgp
LGEodGhpcy5ib3VuZHMpfSxlfSgpLFluPWZ1bmN0aW9uKGUsdCxuKXt0aGlzLm9wZXJhbmQ9ZSx0
aGlzLmFyZ3M9dCx0aGlzLmNvbmRpdGlvbj1ufSxKbj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0
KXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVu
dHNbMl06bnVsbCxyPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2Fy
Z3VtZW50c1szXTpudWxsLGk9YXJndW1lbnRzLmxlbmd0aD40JiZ2b2lkIDAhPT1hcmd1bWVudHNb
NF0/YXJndW1lbnRzWzRdOm51bGwKK3RoaXMuc3RhcnQ9ZSx0aGlzLmVuZD10LHRoaXMuY29tcG9u
ZW50PW4sdGhpcy5tYW5hZ2VyPXIsdGhpcy5zaGFkb3c9aSx0aGlzLm9wZXJhbmQ9bnVsbCx0aGlz
LmltbWVkaWF0ZT1udWxsLHRoaXMuYXJncz1udWxsLHRoaXMuY2FsbGVyU2NvcGU9bnVsbCx0aGlz
LmJsb2Nrcz1udWxsLHRoaXMuY29uZGl0aW9uPW51bGwsdGhpcy5pdGVyYXRvcj1udWxsLHRoaXMu
a2V5PW51bGwsdGhpcy5pcD1lfXJldHVybiBlLnByb3RvdHlwZS5jYXB0dXJlPWZ1bmN0aW9uKCl7
cmV0dXJuIG5ldyBZbih0aGlzLm9wZXJhbmQsdGhpcy5hcmdzLHRoaXMuY29uZGl0aW9uKX0sZS5w
cm90b3R5cGUucmVzdG9yZT1mdW5jdGlvbihlKXt0aGlzLm9wZXJhbmQ9ZS5vcGVyYW5kLHRoaXMu
YXJncz1lLmFyZ3MsdGhpcy5jb25kaXRpb249ZS5jb25kaXRpb259LGV9KCksWG49ZnVuY3Rpb24o
KXtmdW5jdGlvbiBlKCl7dGhpcy5mcmFtZXM9W10sdGhpcy5mcmFtZT0tMX1yZXR1cm4gZS5wcm90
b3R5cGUucHVzaD1mdW5jdGlvbihlLHQpe3ZhciBuLHI9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lk
IDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOm51bGwsaT1hcmd1bWVudHMubGVuZ3RoPjMm
JnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106bnVsbCxvPWFyZ3VtZW50cy5sZW5n
dGg+NCYmdm9pZCAwIT09YXJndW1lbnRzWzRdP2FyZ3VtZW50c1s0XTpudWxsLHM9Kyt0aGlzLmZy
YW1lCitzPHRoaXMuZnJhbWVzLmxlbmd0aD8obj10aGlzLmZyYW1lc1tzXSxuLnN0YXJ0PW4uaXA9
ZSxuLmVuZD10LG4uY29tcG9uZW50PXIsbi5tYW5hZ2VyPWksbi5zaGFkb3c9byxuLm9wZXJhbmQ9
bnVsbCxuLmltbWVkaWF0ZT1udWxsLG4uYXJncz1udWxsLG4uY2FsbGVyU2NvcGU9bnVsbCxuLmJs
b2Nrcz1udWxsLG4uY29uZGl0aW9uPW51bGwsbi5pdGVyYXRvcj1udWxsLG4ua2V5PW51bGwpOnRo
aXMuZnJhbWVzW3NdPW5ldyBKbihlLHQscixpLG8pfSxlLnByb3RvdHlwZS5wb3A9ZnVuY3Rpb24o
KXt0aGlzLmZyYW1lLS19LGUucHJvdG90eXBlLmNhcHR1cmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhp
cy5jdXJyZW50RnJhbWUuY2FwdHVyZSgpfSxlLnByb3RvdHlwZS5yZXN0b3JlPWZ1bmN0aW9uKGUp
e3RoaXMuY3VycmVudEZyYW1lLnJlc3RvcmUoZSl9LGUucHJvdG90eXBlLmdldFN0YXJ0PWZ1bmN0
aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudEZyYW1lLnN0YXJ0fSxlLnByb3RvdHlwZS5nZXRFbmQ9
ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50RnJhbWUuZW5kfSxlLnByb3RvdHlwZS5nZXRD
dXJyZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudEZyYW1lLmlwfSxlLnByb3RvdHlw
ZS5zZXRDdXJyZW50PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmN1cnJlbnRGcmFtZS5pcD1lfSxl
LnByb3RvdHlwZS5nZXRPcGVyYW5kPWZ1bmN0aW9uKCl7cmV0dXJuKDAsbi51bndyYXApKHRoaXMu
Y3VycmVudEZyYW1lLm9wZXJhbmQpfSxlLnByb3RvdHlwZS5zZXRPcGVyYW5kPWZ1bmN0aW9uKGUp
e3JldHVybiB0aGlzLmN1cnJlbnRGcmFtZS5vcGVyYW5kPWV9LGUucHJvdG90eXBlLmdldEltbWVk
aWF0ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnRGcmFtZS5pbW1lZGlhdGV9LGUucHJv
dG90eXBlLnNldEltbWVkaWF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5jdXJyZW50RnJhbWUu
aW1tZWRpYXRlPWV9LGUucHJvdG90eXBlLmdldEFyZ3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5j
dXJyZW50RnJhbWUuYXJnc30sZS5wcm90b3R5cGUuc2V0QXJncz1mdW5jdGlvbihlKXtyZXR1cm4g
dGhpcy5jdXJyZW50RnJhbWUuYXJncz1lfSxlLnByb3RvdHlwZS5nZXRDb25kaXRpb249ZnVuY3Rp
b24oKXtyZXR1cm4oMCxuLnVud3JhcCkodGhpcy5jdXJyZW50RnJhbWUuY29uZGl0aW9uKX0sZS5w
cm90b3R5cGUuc2V0Q29uZGl0aW9uPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmN1cnJlbnRGcmFt
ZS5jb25kaXRpb249ZX0sZS5wcm90b3R5cGUuZ2V0SXRlcmF0b3I9ZnVuY3Rpb24oKXtyZXR1cm4o
MCxuLnVud3JhcCkodGhpcy5jdXJyZW50RnJhbWUuaXRlcmF0b3IpfSxlLnByb3RvdHlwZS5zZXRJ
dGVyYXRvcj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5jdXJyZW50RnJhbWUuaXRlcmF0b3I9ZX0s
ZS5wcm90b3R5cGUuZ2V0S2V5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudEZyYW1lLmtl
eX0sZS5wcm90b3R5cGUuc2V0S2V5PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmN1cnJlbnRGcmFt
ZS5rZXk9ZX0sZS5wcm90b3R5cGUuZ2V0QmxvY2tzPWZ1bmN0aW9uKCl7cmV0dXJuKDAsbi51bndy
YXApKHRoaXMuY3VycmVudEZyYW1lLmJsb2Nrcyl9LGUucHJvdG90eXBlLnNldEJsb2Nrcz1mdW5j
dGlvbihlKXtyZXR1cm4gdGhpcy5jdXJyZW50RnJhbWUuYmxvY2tzPWV9LGUucHJvdG90eXBlLmdl
dENhbGxlclNjb3BlPWZ1bmN0aW9uKCl7cmV0dXJuKDAsbi51bndyYXApKHRoaXMuY3VycmVudEZy
YW1lLmNhbGxlclNjb3BlKX0sZS5wcm90b3R5cGUuc2V0Q2FsbGVyU2NvcGU9ZnVuY3Rpb24oZSl7
cmV0dXJuIHRoaXMuY3VycmVudEZyYW1lLmNhbGxlclNjb3BlPWV9LGUucHJvdG90eXBlLmdldENv
bXBvbmVudD1mdW5jdGlvbigpe3JldHVybigwLG4udW53cmFwKSh0aGlzLmN1cnJlbnRGcmFtZS5j
b21wb25lbnQpfSxlLnByb3RvdHlwZS5nZXRNYW5hZ2VyPWZ1bmN0aW9uKCl7cmV0dXJuKDAsbi51
bndyYXApKHRoaXMuY3VycmVudEZyYW1lLm1hbmFnZXIpfSxlLnByb3RvdHlwZS5nZXRTaGFkb3c9
ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50RnJhbWUuc2hhZG93fSxlLnByb3RvdHlwZS5n
b3RvPWZ1bmN0aW9uKGUpe3RoaXMuc2V0Q3VycmVudChlKX0sZS5wcm90b3R5cGUubmV4dFN0YXRl
bWVudD1mdW5jdGlvbihlKXtmb3IodmFyIHQsbixyLGk7LTEhPT10aGlzLmZyYW1lOyl7aWYodD10
aGlzLmZyYW1lc1t0aGlzLmZyYW1lXSxuPXQuaXAscj10LmVuZCxuPHIpcmV0dXJuIGk9ZS5wcm9n
cmFtLHQuaXArPTQsaS5vcGNvZGUobikKK3RoaXMucG9wKCl9cmV0dXJuIG51bGx9LCgwLHQuY3Jl
YXRlQ2xhc3MpKGUsW3trZXk6ImN1cnJlbnRGcmFtZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRo
aXMuZnJhbWVzW3RoaXMuZnJhbWVdfX1dKSxlfSgpLFpuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShl
LHQscixpKXt0aGlzLmVudj1lLHRoaXMuZWxlbWVudFN0YWNrPWksdGhpcy5keW5hbWljU2NvcGVT
dGFjaz1uZXcgbi5TdGFjayx0aGlzLnNjb3BlU3RhY2s9bmV3IG4uU3RhY2ssdGhpcy51cGRhdGlu
Z09wY29kZVN0YWNrPW5ldyBuLlN0YWNrLHRoaXMuY2FjaGVHcm91cHM9bmV3IG4uU3RhY2ssdGhp
cy5saXN0QmxvY2tTdGFjaz1uZXcgbi5TdGFjayx0aGlzLmZyYW1lPW5ldyBYbix0aGlzLmVudj1l
LHRoaXMuY29uc3RhbnRzPWUuY29uc3RhbnRzLHRoaXMuZWxlbWVudFN0YWNrPWksdGhpcy5zY29w
ZVN0YWNrLnB1c2godCksdGhpcy5keW5hbWljU2NvcGVTdGFjay5wdXNoKHIpfXJldHVybiBlLmlu
aXRpYWw9ZnVuY3Rpb24odCxuLHIsaSxvKXt2YXIgcz1vLnN5bWJvbHMsYT1vLnN0YXJ0LHU9by5l
bmQsbD1Wbi5yb290KG4scyksYz1uZXcgZSh0LGwscixpKQorcmV0dXJuIGMucHJlcGFyZShhLHUp
LGN9LGUucHJvdG90eXBlLmNhcHR1cmU9ZnVuY3Rpb24oKXtyZXR1cm57ZW52OnRoaXMuZW52LHNj
b3BlOnRoaXMuc2NvcGUoKSxkeW5hbWljU2NvcGU6dGhpcy5keW5hbWljU2NvcGUoKSxmcmFtZTp0
aGlzLmZyYW1lLmNhcHR1cmUoKX19LGUucHJvdG90eXBlLmdvdG89ZnVuY3Rpb24oZSl7dGhpcy5m
cmFtZS5nb3RvKGUpfSxlLnByb3RvdHlwZS5iZWdpbkNhY2hlR3JvdXA9ZnVuY3Rpb24oKXt0aGlz
LmNhY2hlR3JvdXBzLnB1c2godGhpcy51cGRhdGluZygpLnRhaWwoKSl9LGUucHJvdG90eXBlLmNv
bW1pdENhY2hlR3JvdXA9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgTmUoIkVORCIpLHQ9dGhpcy51cGRh
dGluZygpLGk9dGhpcy5jYWNoZUdyb3Vwcy5wb3AoKSxvPWk/dC5uZXh0Tm9kZShpKTp0LmhlYWQo
KSxzPXQudGFpbCgpLGE9KDAsci5jb21iaW5lU2xpY2UpKG5ldyBuLkxpc3RTbGljZShvLHMpKSx1
PW5ldyBSZShhLGUpCit0Lmluc2VydEJlZm9yZSh1LG8pLHQuYXBwZW5kKG5ldyBrZSh1KSksdC5h
cHBlbmQoZSl9LGUucHJvdG90eXBlLmVudGVyPWZ1bmN0aW9uKGUsdCl7dmFyIHI9bmV3IG4uTGlu
a2VkTGlzdCxpPXRoaXMuc3RhY2soKS5wdXNoVXBkYXRhYmxlQmxvY2soKSxvPXRoaXMuY2FwdHVy
ZSgpLHM9bmV3IG5yKGUsdCxvLGkscikKK3RoaXMuZGlkRW50ZXIocyxyKX0sZS5wcm90b3R5cGUu
ZW50ZXJXaXRoS2V5PWZ1bmN0aW9uKGUsdCxyKXt2YXIgaT1uZXcgbi5MaW5rZWRMaXN0LG89dGhp
cy5zdGFjaygpLnB1c2hVcGRhdGFibGVCbG9jaygpLHM9dGhpcy5jYXB0dXJlKCksYT1uZXcgbnIo
dCxyLHMsbyxpKQordGhpcy5saXN0QmxvY2soKS5tYXBbZV09YSx0aGlzLmRpZEVudGVyKGEsaSl9
LGUucHJvdG90eXBlLmVudGVyTGlzdD1mdW5jdGlvbihlLHQpe3ZhciByPW5ldyBuLkxpbmtlZExp
c3QsaT10aGlzLnN0YWNrKCkucHVzaEJsb2NrTGlzdChyKSxvPXRoaXMuY2FwdHVyZSgpLHM9dGhp
cy5mcmFtZS5nZXRJdGVyYXRvcigpLmFydGlmYWN0cyxhPW5ldyBpcihlLHQsbyxpLHIscykKK3Ro
aXMubGlzdEJsb2NrU3RhY2sucHVzaChhKSx0aGlzLmRpZEVudGVyKGEscil9LGUucHJvdG90eXBl
LmRpZEVudGVyPWZ1bmN0aW9uKGUsdCl7dGhpcy51cGRhdGVXaXRoKGUpLHRoaXMudXBkYXRpbmdP
cGNvZGVTdGFjay5wdXNoKHQpfSxlLnByb3RvdHlwZS5leGl0PWZ1bmN0aW9uKCl7dGhpcy5zdGFj
aygpLnBvcEJsb2NrKCksdGhpcy51cGRhdGluZ09wY29kZVN0YWNrLnBvcCgpLHRoaXMudXBkYXRp
bmcoKS50YWlsKCkuZGlkSW5pdGlhbGl6ZUNoaWxkcmVuKCl9LGUucHJvdG90eXBlLmV4aXRMaXN0
PWZ1bmN0aW9uKCl7dGhpcy5leGl0KCksdGhpcy5saXN0QmxvY2tTdGFjay5wb3AoKX0sZS5wcm90
b3R5cGUudXBkYXRlV2l0aD1mdW5jdGlvbihlKXt0aGlzLnVwZGF0aW5nKCkuYXBwZW5kKGUpfSxl
LnByb3RvdHlwZS5saXN0QmxvY2s9ZnVuY3Rpb24oKXtyZXR1cm4oMCxuLmV4cGVjdCkodGhpcy5s
aXN0QmxvY2tTdGFjay5jdXJyZW50LCJleHBlY3RlZCBhIGxpc3QgYmxvY2siKX0sZS5wcm90b3R5
cGUudXBkYXRpbmc9ZnVuY3Rpb24oKXtyZXR1cm4oMCxuLmV4cGVjdCkodGhpcy51cGRhdGluZ09w
Y29kZVN0YWNrLmN1cnJlbnQsImV4cGVjdGVkIHVwZGF0aW5nIG9wY29kZSBvbiB0aGUgdXBkYXRp
bmcgb3Bjb2RlIHN0YWNrIil9LGUucHJvdG90eXBlLnN0YWNrPWZ1bmN0aW9uKCl7cmV0dXJuIHRo
aXMuZWxlbWVudFN0YWNrfSxlLnByb3RvdHlwZS5zY29wZT1mdW5jdGlvbigpe3JldHVybigwLG4u
ZXhwZWN0KSh0aGlzLnNjb3BlU3RhY2suY3VycmVudCwiZXhwZWN0ZWQgc2NvcGUgb24gdGhlIHNj
b3BlIHN0YWNrIil9LGUucHJvdG90eXBlLmR5bmFtaWNTY29wZT1mdW5jdGlvbigpe3JldHVybigw
LG4uZXhwZWN0KSh0aGlzLmR5bmFtaWNTY29wZVN0YWNrLmN1cnJlbnQsImV4cGVjdGVkIGR5bmFt
aWMgc2NvcGUgb24gdGhlIGR5bmFtaWMgc2NvcGUgc3RhY2siKX0sZS5wcm90b3R5cGUucHVzaEZy
YW1lPWZ1bmN0aW9uKGUsdCxuKXt0aGlzLmZyYW1lLnB1c2goZS5zdGFydCxlLmVuZCksdCYmdGhp
cy5mcmFtZS5zZXRBcmdzKHQpLHQmJnQuYmxvY2tzJiZ0aGlzLmZyYW1lLnNldEJsb2Nrcyh0LmJs
b2NrcyksbiYmdGhpcy5mcmFtZS5zZXRDYWxsZXJTY29wZShuKX0sZS5wcm90b3R5cGUucHVzaENv
bXBvbmVudEZyYW1lPWZ1bmN0aW9uKGUsdCxuLHIsaSxvKXt0aGlzLmZyYW1lLnB1c2goZS5zdGFy
dCxlLmVuZCxyLGksbyksdCYmdGhpcy5mcmFtZS5zZXRBcmdzKHQpLHQmJnQuYmxvY2tzJiZ0aGlz
LmZyYW1lLnNldEJsb2Nrcyh0LmJsb2NrcyksbiYmdGhpcy5mcmFtZS5zZXRDYWxsZXJTY29wZShu
KX0sZS5wcm90b3R5cGUucHVzaEV2YWxGcmFtZT1mdW5jdGlvbihlLHQpe3RoaXMuZnJhbWUucHVz
aChlLHQpfSxlLnByb3RvdHlwZS5wdXNoQ2hpbGRTY29wZT1mdW5jdGlvbigpe3RoaXMuc2NvcGVT
dGFjay5wdXNoKHRoaXMuc2NvcGUoKS5jaGlsZCgpKX0sZS5wcm90b3R5cGUucHVzaENhbGxlclNj
b3BlPWZ1bmN0aW9uKCl7dGhpcy5zY29wZVN0YWNrLnB1c2goKDAsbi5leHBlY3QpKHRoaXMuc2Nv
cGUoKS5nZXRDYWxsZXJTY29wZSgpLCJwdXNoQ2FsbGVyU2NvcGUgaXMgY2FsbGVkIHdoZW4gYSBj
YWxsZXIgc2NvcGUgaXMgcHJlc2VudCIpKX0sZS5wcm90b3R5cGUucHVzaER5bmFtaWNTY29wZT1m
dW5jdGlvbigpe3ZhciBlPXRoaXMuZHluYW1pY1Njb3BlKCkuY2hpbGQoKQorcmV0dXJuIHRoaXMu
ZHluYW1pY1Njb3BlU3RhY2sucHVzaChlKSxlfSxlLnByb3RvdHlwZS5wdXNoUm9vdFNjb3BlPWZ1
bmN0aW9uKGUsdCl7dmFyIG49Vm4ucm9vdChlLHQpCityZXR1cm4gdGhpcy5zY29wZVN0YWNrLnB1
c2gobiksbn0sZS5wcm90b3R5cGUucG9wU2NvcGU9ZnVuY3Rpb24oKXt0aGlzLnNjb3BlU3RhY2su
cG9wKCl9LGUucHJvdG90eXBlLnBvcER5bmFtaWNTY29wZT1mdW5jdGlvbigpe3RoaXMuZHluYW1p
Y1Njb3BlU3RhY2sucG9wKCl9LGUucHJvdG90eXBlLm5ld0Rlc3Ryb3lhYmxlPWZ1bmN0aW9uKGUp
e3RoaXMuc3RhY2soKS5uZXdEZXN0cm95YWJsZShlKX0sZS5wcm90b3R5cGUuZ2V0U2VsZj1mdW5j
dGlvbigpe3JldHVybiB0aGlzLnNjb3BlKCkuZ2V0U2VsZigpfSxlLnByb3RvdHlwZS5yZWZlcmVu
Y2VGb3JTeW1ib2w9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuc2NvcGUoKS5nZXRTeW1ib2woZSl9
LGUucHJvdG90eXBlLmdldEFyZ3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mcmFtZS5nZXRBcmdz
KCl9LGUucHJvdG90eXBlLnJlc3VtZT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHRoaXMuZXhlY3V0
ZShlLHQsZnVuY3Rpb24oZSl7cmV0dXJuIGUuZnJhbWUucmVzdG9yZShuKX0pfSxlLnByb3RvdHlw
ZS5leGVjdXRlPWZ1bmN0aW9uKGUsdCxuKXt0aGlzLnByZXBhcmUoZSx0LG4pCitmb3IodmFyIHI9
dm9pZCAwOzspaWYocj10aGlzLm5leHQoKSxyLmRvbmUpYnJlYWsKK3JldHVybiByLnZhbHVlfSxl
LnByb3RvdHlwZS5wcmVwYXJlPWZ1bmN0aW9uKGUsdCxyKXt2YXIgaT10aGlzLmVsZW1lbnRTdGFj
ayxvPXRoaXMuZnJhbWUscz10aGlzLnVwZGF0aW5nT3Bjb2RlU3RhY2sKK2kucHVzaFNpbXBsZUJs
b2NrKCkscy5wdXNoKG5ldyBuLkxpbmtlZExpc3QpLG8ucHVzaChlLHQpLHImJnIodGhpcyl9LGUu
cHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmZyYW1lLHQ9dGhpcy5lbnYscj10
aGlzLnVwZGF0aW5nT3Bjb2RlU3RhY2ssaT10aGlzLmVsZW1lbnRTdGFjayxvPXZvaWQgMAorcmV0
dXJuKG89ZS5uZXh0U3RhdGVtZW50KHQpKT8oRWUuZXZhbHVhdGUodGhpcyxvKSx7ZG9uZTohMSx2
YWx1ZTpudWxsfSk6e2RvbmU6ITAsdmFsdWU6bmV3IFFuKHQsKDAsbi5leHBlY3QpKHIucG9wKCks
InRoZXJlIHNob3VsZCBiZSBhIGZpbmFsIHVwZGF0aW5nIG9wY29kZSBzdGFjayIpLGkucG9wQmxv
Y2soKSl9fSxlLnByb3RvdHlwZS5ldmFsdWF0ZU9wY29kZT1mdW5jdGlvbihlKXtFZS5ldmFsdWF0
ZSh0aGlzLGUpfSxlLnByb3RvdHlwZS5pbnZva2VCbG9jaz1mdW5jdGlvbihlLHQpe3ZhciBuPWUu
Y29tcGlsZSh0aGlzLmVudikKK3RoaXMucHVzaEZyYW1lKG4sdCl9LGUucHJvdG90eXBlLmludm9r
ZVBhcnRpYWw9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb21waWxlKHRoaXMuZW52KQordGhpcy5wdXNo
RnJhbWUodCl9LGUucHJvdG90eXBlLmludm9rZUxheW91dD1mdW5jdGlvbihlLHQsbixyLGksbyl7
dGhpcy5wdXNoQ29tcG9uZW50RnJhbWUodCxlLG4scixpLG8pfSxlLnByb3RvdHlwZS5ldmFsdWF0
ZU9wZXJhbmQ9ZnVuY3Rpb24oZSl7dGhpcy5mcmFtZS5zZXRPcGVyYW5kKGUuZXZhbHVhdGUodGhp
cykpfSxlLnByb3RvdHlwZS5ldmFsdWF0ZUFyZ3M9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5mcmFt
ZS5zZXRBcmdzKGUuZXZhbHVhdGUodGhpcykpCit0aGlzLmZyYW1lLnNldE9wZXJhbmQodC5wb3Np
dGlvbmFsLmF0KDApKX0sZS5wcm90b3R5cGUuYmluZFBvc2l0aW9uYWxBcmdzPWZ1bmN0aW9uKGUp
e3ZhciB0LHI9KDAsbi5leHBlY3QpKHRoaXMuZnJhbWUuZ2V0QXJncygpLCJiaW5kUG9zaXRpb25h
bEFyZ3MgYXNzdW1lcyBhIHByZXZpb3VzIHNldEFyZ3MiKSxpPXIucG9zaXRpb25hbCxvPXRoaXMu
c2NvcGUoKQorZm9yKHQ9MDt0PGUubGVuZ3RoO3QrKylvLmJpbmRTeW1ib2woZVt0XSxpLmF0KHQp
KX0sZS5wcm90b3R5cGUuYmluZE5hbWVkQXJncz1mdW5jdGlvbihlLHQpe3ZhciByLGksbz0oMCxu
LmV4cGVjdCkodGhpcy5mcmFtZS5nZXRBcmdzKCksImJpbmROYW1lZEFyZ3MgYXNzdW1lcyBhIHBy
ZXZpb3VzIHNldEFyZ3MiKSxzPXRoaXMuc2NvcGUoKSxhPW8ubmFtZWQKK2ZvcihyPTA7cjxlLmxl
bmd0aDtyKyspaT10aGlzLmNvbnN0YW50cy5nZXRTdHJpbmcoZVtyXSkscy5iaW5kU3ltYm9sKHRb
cl0sYS5nZXQoaSkpfSxlLnByb3RvdHlwZS5iaW5kQmxvY2tzPWZ1bmN0aW9uKGUsdCl7dmFyIG4s
cixpPXRoaXMuZnJhbWUuZ2V0QmxvY2tzKCksbz10aGlzLnNjb3BlKCkKK2ZvcihuPTA7bjxlLmxl
bmd0aDtuKyspcj10aGlzLmNvbnN0YW50cy5nZXRTdHJpbmcoZVtuXSksby5iaW5kQmxvY2sodFtu
XSxpJiZpW3JdfHxudWxsKX0sZS5wcm90b3R5cGUuYmluZFBhcnRpYWxBcmdzPWZ1bmN0aW9uKGUp
e3ZhciB0PSgwLG4uZXhwZWN0KSh0aGlzLmZyYW1lLmdldEFyZ3MoKSwiYmluZFBhcnRpYWxBcmdz
IGFzc3VtZXMgYSBwcmV2aW91cyBzZXRBcmdzIikscj10aGlzLnNjb3BlKCk7KDAsbi5hc3NlcnQp
KHQsIkNhbm5vdCBiaW5kIG5hbWVkIGFyZ3MiKSxyLmJpbmRQYXJ0aWFsQXJncyhlLHQpfSxlLnBy
b3RvdHlwZS5iaW5kQ2FsbGVyU2NvcGU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmZyYW1lLmdldENh
bGxlclNjb3BlKCksdD10aGlzLnNjb3BlKCk7KDAsbi5hc3NlcnQpKGUsIkNhbm5vdCBiaW5kIGNh
bGxlciBzY29wZSIpLHQuYmluZENhbGxlclNjb3BlKGUpfSxlLnByb3RvdHlwZS5iaW5kRHluYW1p
Y1Njb3BlPWZ1bmN0aW9uKGUpe3ZhciB0LHIsaT0oMCxuLmV4cGVjdCkodGhpcy5mcmFtZS5nZXRB
cmdzKCksImJpbmREeW5hbWljU2NvcGUgYXNzdW1lcyBhIHByZXZpb3VzIHNldEFyZ3MiKSxvPXRo
aXMuZHluYW1pY1Njb3BlKCkKK2ZvcigoMCxuLmFzc2VydCkoaSwiQ2Fubm90IGJpbmQgZHluYW1p
YyBzY29wZSIpLHQ9MDt0PGUubGVuZ3RoO3QrKylyPXRoaXMuY29uc3RhbnRzLmdldFN0cmluZyhl
W3RdKSxvLnNldChyLGkubmFtZWQuZ2V0KHIpKX0sZX0oKSxlcj1mdW5jdGlvbigpe2Z1bmN0aW9u
IGUoZSx0KXt2YXIgcj10LmFsd2F5c1JldmFsaWRhdGUsaT12b2lkIDAhPT1yJiZyCit0aGlzLmZy
YW1lU3RhY2s9bmV3IG4uU3RhY2ssdGhpcy5lbnY9ZSx0aGlzLmNvbnN0YW50cz1lLmNvbnN0YW50
cyx0aGlzLmRvbT1lLmdldERPTSgpLHRoaXMuYWx3YXlzUmV2YWxpZGF0ZT1pfXJldHVybiBlLnBy
b3RvdHlwZS5leGVjdXRlPWZ1bmN0aW9uKGUsdCl7dmFyIG4scj10aGlzLmZyYW1lU3RhY2sKK2Zv
cih0aGlzLnRyeShlLHQpOzspe2lmKHIuaXNFbXB0eSgpKWJyZWFrCituPXRoaXMuZnJhbWUubmV4
dFN0YXRlbWVudCgpLG51bGwhPT1uP24uZXZhbHVhdGUodGhpcyk6dGhpcy5mcmFtZVN0YWNrLnBv
cCgpfX0sZS5wcm90b3R5cGUuZ290bz1mdW5jdGlvbihlKXt0aGlzLmZyYW1lLmdvdG8oZSl9LGUu
cHJvdG90eXBlLnRyeT1mdW5jdGlvbihlLHQpe3RoaXMuZnJhbWVTdGFjay5wdXNoKG5ldyBvcih0
aGlzLGUsdCkpfSxlLnByb3RvdHlwZS50aHJvdz1mdW5jdGlvbigpe3RoaXMuZnJhbWUuaGFuZGxl
RXhjZXB0aW9uKCksdGhpcy5mcmFtZVN0YWNrLnBvcCgpfSxlLnByb3RvdHlwZS5ldmFsdWF0ZU9w
Y29kZT1mdW5jdGlvbihlKXtlLmV2YWx1YXRlKHRoaXMpfSwoMCx0LmNyZWF0ZUNsYXNzKShlLFt7
a2V5OiJmcmFtZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsbi5leHBlY3QpKHRoaXMuZnJhbWVT
dGFjay5jdXJyZW50LCJidWc6IGV4cGVjdGVkIGEgZnJhbWUiKX19XSksZX0oKSx0cj1mdW5jdGlv
bihlKXtmdW5jdGlvbiByKG4scixpLG8scyl7dmFyIGE9KDAsdC5wb3NzaWJsZUNvbnN0cnVjdG9y
UmV0dXJuKSh0aGlzLGUuY2FsbCh0aGlzKSkKK2Euc3RhcnQ9bixhLmVuZD1yLGEudHlwZT0iYmxv
Y2siLGEubmV4dD1udWxsLGEucHJldj1udWxsCit2YXIgdT1pLmVudixsPWkuc2NvcGUsYz1pLmR5
bmFtaWNTY29wZSxwPWkuZnJhbWUKK3JldHVybiBhLmNoaWxkcmVuPXMsYS5lbnY9dSxhLnNjb3Bl
PWwsYS5keW5hbWljU2NvcGU9YyxhLmZyYW1lPXAsYS5ib3VuZHM9byxhfXJldHVybigwLHQuaW5o
ZXJpdHMpKHIsZSksci5wcm90b3R5cGUucGFyZW50RWxlbWVudD1mdW5jdGlvbigpe3JldHVybiB0
aGlzLmJvdW5kcy5wYXJlbnRFbGVtZW50KCl9LHIucHJvdG90eXBlLmZpcnN0Tm9kZT1mdW5jdGlv
bigpe3JldHVybiB0aGlzLmJvdW5kcy5maXJzdE5vZGUoKX0sci5wcm90b3R5cGUubGFzdE5vZGU9
ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ib3VuZHMubGFzdE5vZGUoKX0sci5wcm90b3R5cGUuZXZh
bHVhdGU9ZnVuY3Rpb24oZSl7ZS50cnkodGhpcy5jaGlsZHJlbixudWxsKX0sci5wcm90b3R5cGUu
ZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuYm91bmRzLmRlc3Ryb3koKX0sci5wcm90b3R5cGUuZGlk
RGVzdHJveT1mdW5jdGlvbigpe3RoaXMuZW52LmRpZERlc3Ryb3kodGhpcy5ib3VuZHMpfSxyLnBy
b3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXt2YXIgZT0oMCxuLmRpY3QpKCkKK3JldHVybiBlLmd1
aWQ9IiIrdGhpcy5fZ3VpZCx7Z3VpZDp0aGlzLl9ndWlkLHR5cGU6dGhpcy50eXBlLGRldGFpbHM6
ZSxjaGlsZHJlbjp0aGlzLmNoaWxkcmVuLnRvQXJyYXkoKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJu
IGUudG9KU09OKCl9KX19LHJ9KENlKSxucj1mdW5jdGlvbihlKXtmdW5jdGlvbiBuKG4saSxvLHMs
YSl7dmFyIHU9KDAsdC5wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKSh0aGlzLGUuY2FsbCh0aGlz
LG4saSxvLHMsYSkpCityZXR1cm4gdS50eXBlPSJ0cnkiLHUudGFnPXUuX3RhZz1uZXcgci5VcGRh
dGFibGVUYWcoci5DT05TVEFOVF9UQUcpLHV9cmV0dXJuKDAsdC5pbmhlcml0cykobixlKSxuLnBy
b3RvdHlwZS5kaWRJbml0aWFsaXplQ2hpbGRyZW49ZnVuY3Rpb24oKXt0aGlzLl90YWcudXBkYXRl
KCgwLHIuY29tYmluZVNsaWNlKSh0aGlzLmNoaWxkcmVuKSl9LG4ucHJvdG90eXBlLmV2YWx1YXRl
PWZ1bmN0aW9uKGUpe2UudHJ5KHRoaXMuY2hpbGRyZW4sdGhpcyl9LG4ucHJvdG90eXBlLmhhbmRs
ZUV4Y2VwdGlvbj1mdW5jdGlvbigpe3ZhciBlPXRoaXMuZW52LHQ9dGhpcy5zY29wZSxuPXRoaXMu
c3RhcnQscj10aGlzLmVuZCxpPXRoaXMuZHluYW1pY1Njb3BlLG89dGhpcy5mcmFtZSxzPWd0LnJl
c3VtZSh0aGlzLmVudix0aGlzLmJvdW5kcyx0aGlzLmJvdW5kcy5yZXNldChlKSksYT1uZXcgWm4o
ZSx0LGkscyksdT1hLnJlc3VtZShuLHIsbykKK3RoaXMuY2hpbGRyZW49dS5vcGNvZGVzKCksdGhp
cy5kaWRJbml0aWFsaXplQ2hpbGRyZW4oKX0sbi5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7
dmFyIHQ9ZS5wcm90b3R5cGUudG9KU09OLmNhbGwodGhpcyksbj10LmRldGFpbHMKK3JldHVybiBu
fHwobj10LmRldGFpbHM9e30pLGUucHJvdG90eXBlLnRvSlNPTi5jYWxsKHRoaXMpfSxufSh0ciks
cnI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5vcGNvZGU9ZSx0aGlzLm1hcmtlcj10
LHRoaXMuZGlkSW5zZXJ0PSExLHRoaXMuZGlkRGVsZXRlPSExLHRoaXMubWFwPWUubWFwLHRoaXMu
dXBkYXRpbmc9ZS5jaGlsZHJlbn1yZXR1cm4gZS5wcm90b3R5cGUuaW5zZXJ0PWZ1bmN0aW9uKGUs
dCxuLGkpe3ZhciBvPXRoaXMubWFwLHM9dGhpcy5vcGNvZGUsYT10aGlzLnVwZGF0aW5nLHU9bnVs
bCxsPW51bGwKK2k/KGw9b1tpXSx1PWwuYm91bmRzLmZpcnN0Tm9kZSgpKTp1PXRoaXMubWFya2Vy
Cit2YXIgYz1zLnZtRm9ySW5zZXJ0aW9uKHUpLHA9bnVsbAorYy5leGVjdXRlKHMuc3RhcnQscy5l
bmQsZnVuY3Rpb24oaSl7aS5mcmFtZS5zZXRBcmdzKFdlLnBvc2l0aW9uYWwoW3Qsbl0pKSxpLmZy
YW1lLnNldE9wZXJhbmQodCksaS5mcmFtZS5zZXRDb25kaXRpb24obmV3IHIuQ29uc3RSZWZlcmVu
Y2UoITApKSxpLmZyYW1lLnNldEtleShlKQordmFyIG89aS5jYXB0dXJlKCksYT1pLnN0YWNrKCku
cHVzaFVwZGF0YWJsZUJsb2NrKCkKK3A9bmV3IG5yKHMuc3RhcnQscy5lbmQsbyxhLGkudXBkYXRp
bmcoKSl9KSxwLmRpZEluaXRpYWxpemVDaGlsZHJlbigpLGEuaW5zZXJ0QmVmb3JlKHAsbCksb1tl
XT1wLHRoaXMuZGlkSW5zZXJ0PSEwfSxlLnByb3RvdHlwZS5yZXRhaW49ZnVuY3Rpb24oKXt9LGUu
cHJvdG90eXBlLm1vdmU9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9dGhpcy5tYXAsbz10aGlzLnVw
ZGF0aW5nLGE9aVtlXSx1PWlbcl18fG51bGwKK3I/cyhhLHUuZmlyc3ROb2RlKCkpOnMoYSx0aGlz
Lm1hcmtlciksby5yZW1vdmUoYSksby5pbnNlcnRCZWZvcmUoYSx1KX0sZS5wcm90b3R5cGUuZGVs
ZXRlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMubWFwLG49dFtlXQorbi5kaWREZXN0cm95KCksYShu
KSx0aGlzLnVwZGF0aW5nLnJlbW92ZShuKSxkZWxldGUgdFtlXSx0aGlzLmRpZERlbGV0ZT0hMH0s
ZS5wcm90b3R5cGUuZG9uZT1mdW5jdGlvbigpe3RoaXMub3Bjb2RlLmRpZEluaXRpYWxpemVDaGls
ZHJlbih0aGlzLmRpZEluc2VydHx8dGhpcy5kaWREZWxldGUpfSxlfSgpLGlyPWZ1bmN0aW9uKGUp
e2Z1bmN0aW9uIGkoaSxvLHMsYSx1LGwpe3ZhciBjPSgwLHQucG9zc2libGVDb25zdHJ1Y3RvclJl
dHVybikodGhpcyxlLmNhbGwodGhpcyxpLG8scyxhLHUpKQorYy50eXBlPSJsaXN0LWJsb2NrIixj
Lm1hcD0oMCxuLmRpY3QpKCksYy5sYXN0SXRlcmF0ZWQ9ci5JTklUSUFMLGMuYXJ0aWZhY3RzPWwK
K3ZhciBwPWMuX3RhZz1uZXcgci5VcGRhdGFibGVUYWcoci5DT05TVEFOVF9UQUcpCityZXR1cm4g
Yy50YWc9KDAsci5jb21iaW5lKShbbC50YWcscF0pLGN9cmV0dXJuKDAsdC5pbmhlcml0cykoaSxl
KSxpLnByb3RvdHlwZS5kaWRJbml0aWFsaXplQ2hpbGRyZW49ZnVuY3Rpb24oKXt2YXIgZT0hKGFy
Z3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdKXx8YXJndW1lbnRzWzBdCit0
aGlzLmxhc3RJdGVyYXRlZD10aGlzLmFydGlmYWN0cy50YWcudmFsdWUoKSxlJiZ0aGlzLl90YWcu
dXBkYXRlKCgwLHIuY29tYmluZVNsaWNlKSh0aGlzLmNoaWxkcmVuKSl9LGkucHJvdG90eXBlLmV2
YWx1YXRlPWZ1bmN0aW9uKHQpe3ZhciBpLG8scyxhLHUsbD10aGlzLmFydGlmYWN0cyxjPXRoaXMu
bGFzdEl0ZXJhdGVkCitsLnRhZy52YWxpZGF0ZShjKXx8KGk9dGhpcy5ib3VuZHMsbz10LmRvbSxz
PW8uY3JlYXRlQ29tbWVudCgiIiksby5pbnNlcnRBZnRlcihpLnBhcmVudEVsZW1lbnQoKSxzLCgw
LG4uZXhwZWN0KShpLmxhc3ROb2RlKCksImNhbid0IGluc2VydCBhZnRlciBhbiBlbXB0eSBib3Vu
ZHMiKSksYT1uZXcgcnIodGhpcyxzKSx1PW5ldyByLkl0ZXJhdG9yU3luY2hyb25pemVyKHt0YXJn
ZXQ6YSxhcnRpZmFjdHM6bH0pLHUuc3luYygpLHRoaXMucGFyZW50RWxlbWVudCgpLnJlbW92ZUNo
aWxkKHMpKSxlLnByb3RvdHlwZS5ldmFsdWF0ZS5jYWxsKHRoaXMsdCl9LGkucHJvdG90eXBlLnZt
Rm9ySW5zZXJ0aW9uPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZW52LG49dGhpcy5zY29wZSxyPXRo
aXMuZHluYW1pY1Njb3BlLGk9Z3QuZm9ySW5pdGlhbFJlbmRlcih0aGlzLmVudix0aGlzLmJvdW5k
cy5wYXJlbnRFbGVtZW50KCksZSkKK3JldHVybiBuZXcgWm4odCxuLHIsaSl9LGkucHJvdG90eXBl
LnRvSlNPTj1mdW5jdGlvbigpe3ZhciB0PWUucHJvdG90eXBlLnRvSlNPTi5jYWxsKHRoaXMpLG49
dGhpcy5tYXAscj1PYmplY3Qua2V5cyhuKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIEpTT04uc3Ry
aW5naWZ5KGUpKyI6ICIrbltlXS5fZ3VpZH0pLmpvaW4oIiwgIiksaT10LmRldGFpbHMKK3JldHVy
biBpfHwoaT10LmRldGFpbHM9e30pLGkubWFwPSJ7IityKyJ9Iix0fSxpfSh0ciksb3I9ZnVuY3Rp
b24oKXtmdW5jdGlvbiBlKGUsdCxuKXt0aGlzLnZtPWUsdGhpcy5vcHM9dCx0aGlzLmV4Y2VwdGlv
bkhhbmRsZXI9bix0aGlzLnZtPWUsdGhpcy5vcHM9dCx0aGlzLmN1cnJlbnQ9dC5oZWFkKCl9cmV0
dXJuIGUucHJvdG90eXBlLmdvdG89ZnVuY3Rpb24oZSl7dGhpcy5jdXJyZW50PWV9LGUucHJvdG90
eXBlLm5leHRTdGF0ZW1lbnQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmN1cnJlbnQsdD10aGlzLm9w
cworcmV0dXJuIGUmJih0aGlzLmN1cnJlbnQ9dC5uZXh0Tm9kZShlKSksZX0sZS5wcm90b3R5cGUu
aGFuZGxlRXhjZXB0aW9uPWZ1bmN0aW9uKCl7dGhpcy5leGNlcHRpb25IYW5kbGVyJiZ0aGlzLmV4
Y2VwdGlvbkhhbmRsZXIuaGFuZGxlRXhjZXB0aW9uKCl9LGV9KCkKK0VlLmFkZCgzMSxmdW5jdGlv
bihlLHQpe3ZhciBuPXQub3AxCitlLmNvbnN0YW50cy5nZXRPdGhlcihuKS5ldmFsdWF0ZShlKX0p
Cit2YXIgc3I9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLnByb3RvdHlwZS5ldmFs
dWF0ZT1mdW5jdGlvbihlKXt2YXIgdD1lLmZyYW1lLmdldE9wZXJhbmQoKSxuPXRoaXMubm9ybWFs
aXplKHQpLGk9dm9pZCAwLG89dm9pZCAwOygwLHIuaXNDb25zdCkodCk/aT1uLnZhbHVlKCk6KG89
bmV3IHIuUmVmZXJlbmNlQ2FjaGUobiksaT1vLnBlZWsoKSkKK3ZhciBzPWUuc3RhY2soKSxhPXRo
aXMuaW5zZXJ0KGUuZW52LmdldEFwcGVuZE9wZXJhdGlvbnMoKSxzLGkpLHU9bmV3IG10KGEuYm91
bmRzKQorcy5uZXdCb3VuZHModSksbyYmZS51cGRhdGVXaXRoKHRoaXMudXBkYXRlV2l0aChlLHQs
byx1LGEpKX0sZX0oKSxhcj1mdW5jdGlvbihlKXtmdW5jdGlvbiBuKG4scil7dmFyIGk9KDAsdC5w
b3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKSh0aGlzLGUuY2FsbCh0aGlzKSkKK3JldHVybiBpLmV4
cHJlc3Npb249bixpLnN5bWJvbFRhYmxlPXIsaS5zdGFydD0tMSxpLmVuZD0tMSxpfXJldHVybigw
LHQuaW5oZXJpdHMpKG4sZSksbi5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7dmFyIG47
LTE9PT10aGlzLnN0YXJ0Pyh0LmV2YWx1YXRlT3BlcmFuZCh0aGlzLmV4cHJlc3Npb24pLG49dC5m
cmFtZS5nZXRPcGVyYW5kKCkudmFsdWUoKSxoKG4pPyh0aGlzLmRlb3B0KHQuZW52KSx0LnB1c2hF
dmFsRnJhbWUodGhpcy5zdGFydCx0aGlzLmVuZCkpOmUucHJvdG90eXBlLmV2YWx1YXRlLmNhbGwo
dGhpcyx0KSk6dC5wdXNoRXZhbEZyYW1lKHRoaXMuc3RhcnQsdGhpcy5lbmQpfSxuLnByb3RvdHlw
ZS5kZW9wdD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLG49bmV3IGt0KHRoaXMuc3ltYm9sVGFibGUs
ZSkKK3JldHVybiBuLnB1dFZhbHVlKHRoaXMuZXhwcmVzc2lvbiksbi50ZXN0KHVyLmNyZWF0ZSks
bi5sYWJlbGxlZChudWxsLGZ1bmN0aW9uKGUsbixyKXtlLmp1bXBVbmxlc3MoIlZBTFVFIiksZS5w
dXREeW5hbWljQ29tcG9uZW50RGVmaW5pdGlvbigpLGUub3BlbkNvbXBvbmVudChIZS5lbXB0eSgp
KSxlLmNsb3NlQ29tcG9uZW50KCksZS5qdW1wKHIpLGUubGFiZWwoIlZBTFVFIiksZS5keW5hbWlj
Q29udGVudChuZXcgdC5BcHBlbmRPcGNvZGUpfSksdGhpcy5zdGFydD1uLnN0YXJ0LHRoaXMuZW5k
PW4uZW5kLHRoaXMuZXhwcmVzc2lvbj1udWxsLG4uc3RhcnR9LG59KHNyKSx1cj1mdW5jdGlvbihl
KXtmdW5jdGlvbiBuKCl7cmV0dXJuKDAsdC5wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKSh0aGlz
LGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4oMCx0LmluaGVyaXRzKShuLGUpLG4uY3Jl
YXRlPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgbihlKX0sbi5wcm90b3R5cGUudG9Cb29sPWZ1bmN0
aW9uKGUpe3JldHVybiBoKGUpfSxufShiZSksbHI9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbihuLHIs
aSl7dmFyIG89KDAsdC5wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKSh0aGlzLGUuY2FsbCh0aGlz
KSkKK3JldHVybiBvLmNhY2hlPW4sby5ib3VuZHM9cixvLnVwc2VydD1pLG8udGFnPW4udGFnLG99
cmV0dXJuKDAsdC5pbmhlcml0cykobixlKSxuLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbihl
KXt2YXIgdCxuLGksbyxzPXRoaXMuY2FjaGUucmV2YWxpZGF0ZSgpOygwLHIuaXNNb2RpZmllZCko
cykmJih0PXRoaXMuYm91bmRzLG49dGhpcy51cHNlcnQsaT1lLmRvbSx0aGlzLnVwc2VydC51cGRh
dGUoaSxzKXx8KG89bmV3IFFlKHQucGFyZW50RWxlbWVudCgpLGEodCkpLG49dGhpcy51cHNlcnQ9
dGhpcy5pbnNlcnQoZS5lbnYuZ2V0QXBwZW5kT3BlcmF0aW9ucygpLG8scykpLHQudXBkYXRlKG4u
Ym91bmRzKSl9LG4ucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3ZhciBlPXRoaXMuX2d1aWQs
dD10aGlzLnR5cGUsbj10aGlzLmNhY2hlCityZXR1cm57Z3VpZDplLHR5cGU6dCxkZXRhaWxzOnts
YXN0VmFsdWU6SlNPTi5zdHJpbmdpZnkobi5wZWVrKCkpfX19LG59KENlKSxjcj1mdW5jdGlvbihl
KXtmdW5jdGlvbiBpKG4saSxvLHMsYSx1KXt2YXIgbD0oMCx0LnBvc3NpYmxlQ29uc3RydWN0b3JS
ZXR1cm4pKHRoaXMsZS5jYWxsKHRoaXMsaSxvLHMpKQorcmV0dXJuIGwucmVmZXJlbmNlPW4sbC5h
cHBlbmRPcGNvZGU9YSxsLnN0YXRlPXUsbC5kZW9wdGVkPW51bGwsbC50YWc9bC5fdGFnPW5ldyBy
LlVwZGF0YWJsZVRhZyhsLnRhZyksbH1yZXR1cm4oMCx0LmluaGVyaXRzKShpLGUpLGkucHJvdG90
eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe3RoaXMuZGVvcHRlZD90LmV2YWx1YXRlT3Bjb2RlKHRo
aXMuZGVvcHRlZCk6aCh0aGlzLnJlZmVyZW5jZS52YWx1ZSgpKT90aGlzLmxhenlEZW9wdCh0KTpl
LnByb3RvdHlwZS5ldmFsdWF0ZS5jYWxsKHRoaXMsdCl9LGkucHJvdG90eXBlLmxhenlEZW9wdD1m
dW5jdGlvbihlKXt2YXIgdD10aGlzLmJvdW5kcyxyPXRoaXMuYXBwZW5kT3Bjb2RlLGk9dGhpcy5z
dGF0ZSxvPWUuZW52LHM9ci5kZW9wdChvKSxhPSgwLG4uZXhwZWN0KShvLnByb2dyYW0ub3Bjb2Rl
KHMrOCksImhhcmRjb2RlZCBkZW9wdCBsb2NhdGlvbiIpLHU9YS5vcDEsbD1hLm9wMixjPW5ldyBi
dCh0LnBhcmVudEVsZW1lbnQoKSkKK2MubmV3Qm91bmRzKHRoaXMuYm91bmRzKQordmFyIHA9bmV3
IG4uTGlua2VkTGlzdAoraS5mcmFtZS5jb25kaXRpb249dXIuY3JlYXRlKCgwLG4uZXhwZWN0KShp
LmZyYW1lLm9wZXJhbmQsIm9wZXJhbmQgc2hvdWxkIGJlIHBvcHVsYXRlZCIpKQordmFyIGY9dGhp
cy5kZW9wdGVkPW5ldyBucih1LGwsaSxjLHApCit0aGlzLl90YWcudXBkYXRlKGYudGFnKSxlLmV2
YWx1YXRlT3Bjb2RlKGYpLGUudGhyb3coKSx0aGlzLl90YWc9bnVsbCx0aGlzLnJlZmVyZW5jZT1u
dWxsLHRoaXMuY2FjaGU9bnVsbCx0aGlzLmJvdW5kcz1udWxsLHRoaXMudXBzZXJ0PW51bGwsdGhp
cy5hcHBlbmRPcGNvZGU9bnVsbCx0aGlzLnN0YXRlPW51bGx9LGkucHJvdG90eXBlLnRvSlNPTj1m
dW5jdGlvbigpe3ZhciB0PXRoaXMuX2d1aWQsbj10aGlzLnR5cGUscj10aGlzLmRlb3B0ZWQKK3Jl
dHVybiByP3tndWlkOnQsdHlwZTpuLGRlb3B0ZWQ6ITAsY2hpbGRyZW46W3IudG9KU09OKCldfTpl
LnByb3RvdHlwZS50b0pTT04uY2FsbCh0aGlzKX0saX0obHIpLHByPWZ1bmN0aW9uKGUpe2Z1bmN0
aW9uIG4oKXt2YXIgbj0oMCx0LnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4pKHRoaXMsZS5hcHBs
eSh0aGlzLGFyZ3VtZW50cykpCityZXR1cm4gbi50eXBlPSJvcHRpbWl6ZWQtY2F1dGlvdXMtYXBw
ZW5kIixufXJldHVybigwLHQuaW5oZXJpdHMpKG4sZSksbi5wcm90b3R5cGUubm9ybWFsaXplPWZ1
bmN0aW9uKGUpe3JldHVybigwLHIubWFwKShlLGNlKX0sbi5wcm90b3R5cGUuaW5zZXJ0PWZ1bmN0
aW9uKGUsdCxuKXtyZXR1cm4gcChlLHQsbil9LG4ucHJvdG90eXBlLnVwZGF0ZVdpdGg9ZnVuY3Rp
b24oZSx0LG4scixpKXtyZXR1cm4gbmV3IGZyKG4scixpKX0sbn0oc3IpLGZyPWZ1bmN0aW9uKGUp
e2Z1bmN0aW9uIG4oKXt2YXIgbj0oMCx0LnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4pKHRoaXMs
ZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpCityZXR1cm4gbi50eXBlPSJvcHRpbWl6ZWQtY2F1dGlv
dXMtdXBkYXRlIixufXJldHVybigwLHQuaW5oZXJpdHMpKG4sZSksbi5wcm90b3R5cGUuaW5zZXJ0
PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gcChlLHQsbil9LG59KGxyKSxocj1mdW5jdGlvbihlKXtm
dW5jdGlvbiBuKCl7dmFyIG49KDAsdC5wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKSh0aGlzLGUu
YXBwbHkodGhpcyxhcmd1bWVudHMpKQorcmV0dXJuIG4udHlwZT0iZ3VhcmRlZC1jYXV0aW91cy1h
cHBlbmQiLG4uQXBwZW5kT3Bjb2RlPXByLG59cmV0dXJuKDAsdC5pbmhlcml0cykobixlKSxuLnBy
b3RvdHlwZS5ub3JtYWxpemU9ZnVuY3Rpb24oZSl7cmV0dXJuKDAsci5tYXApKGUsY2UpfSxuLnBy
b3RvdHlwZS5pbnNlcnQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBwKGUsdCxuKX0sbi5wcm90b3R5
cGUudXBkYXRlV2l0aD1mdW5jdGlvbihlLHQsbixyLGkpe3JldHVybiBuZXcgZHIodCxuLHIsaSx0
aGlzLGUuY2FwdHVyZSgpKX0sbn0oYXIpLGRyPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4oKXt2YXIg
bj0oMCx0LnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4pKHRoaXMsZS5hcHBseSh0aGlzLGFyZ3Vt
ZW50cykpCityZXR1cm4gbi50eXBlPSJndWFyZGVkLWNhdXRpb3VzLXVwZGF0ZSIsbn1yZXR1cm4o
MCx0LmluaGVyaXRzKShuLGUpLG4ucHJvdG90eXBlLmluc2VydD1mdW5jdGlvbihlLHQsbil7cmV0
dXJuIHAoZSx0LG4pfSxufShjciksbXI9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbigpe3ZhciBuPSgw
LHQucG9zc2libGVDb25zdHJ1Y3RvclJldHVybikodGhpcyxlLmFwcGx5KHRoaXMsYXJndW1lbnRz
KSkKK3JldHVybiBuLnR5cGU9Im9wdGltaXplZC10cnVzdGluZy1hcHBlbmQiLG59cmV0dXJuKDAs
dC5pbmhlcml0cykobixlKSxuLnByb3RvdHlwZS5ub3JtYWxpemU9ZnVuY3Rpb24oZSl7cmV0dXJu
KDAsci5tYXApKGUsbGUpfSxuLnByb3RvdHlwZS5pbnNlcnQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVy
biBmKGUsdCxuKX0sbi5wcm90b3R5cGUudXBkYXRlV2l0aD1mdW5jdGlvbihlLHQsbixyLGkpe3Jl
dHVybiBuZXcgZ3IobixyLGkpfSxufShzciksZ3I9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbigpe3Zh
ciBuPSgwLHQucG9zc2libGVDb25zdHJ1Y3RvclJldHVybikodGhpcyxlLmFwcGx5KHRoaXMsYXJn
dW1lbnRzKSkKK3JldHVybiBuLnR5cGU9Im9wdGltaXplZC10cnVzdGluZy11cGRhdGUiLG59cmV0
dXJuKDAsdC5pbmhlcml0cykobixlKSxuLnByb3RvdHlwZS5pbnNlcnQ9ZnVuY3Rpb24oZSx0LG4p
e3JldHVybiBmKGUsdCxuKX0sbn0obHIpLHlyPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4oKXt2YXIg
bj0oMCx0LnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4pKHRoaXMsZS5hcHBseSh0aGlzLGFyZ3Vt
ZW50cykpCityZXR1cm4gbi50eXBlPSJndWFyZGVkLXRydXN0aW5nLWFwcGVuZCIsbi5BcHBlbmRP
cGNvZGU9bXIsbn1yZXR1cm4oMCx0LmluaGVyaXRzKShuLGUpLG4ucHJvdG90eXBlLm5vcm1hbGl6
ZT1mdW5jdGlvbihlKXtyZXR1cm4oMCxyLm1hcCkoZSxsZSl9LG4ucHJvdG90eXBlLmluc2VydD1m
dW5jdGlvbihlLHQsbil7cmV0dXJuIGYoZSx0LG4pfSxuLnByb3RvdHlwZS51cGRhdGVXaXRoPWZ1
bmN0aW9uKGUsdCxuLHIsaSl7cmV0dXJuIG5ldyB2cih0LG4scixpLHRoaXMsZS5jYXB0dXJlKCkp
fSxufShhciksdnI9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbigpe3ZhciBuPSgwLHQucG9zc2libGVD
b25zdHJ1Y3RvclJldHVybikodGhpcyxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkKK3JldHVybiBu
LnR5cGU9InRydXN0aW5nLXVwZGF0ZSIsbn1yZXR1cm4oMCx0LmluaGVyaXRzKShuLGUpLG4ucHJv
dG90eXBlLmluc2VydD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGYoZSx0LG4pfSxufShjcikKK0Vl
LmFkZCg0OSxmdW5jdGlvbihlLHQpe3ZhciBuPXQub3AxLGk9ZS5lbnYsbz1lLmNvbnN0YW50cy5n
ZXRPdGhlcihuKSxzPSgwLHIubWFwKShlLmZyYW1lLmdldE9wZXJhbmQoKSxmdW5jdGlvbihlKXt2
YXIgdD1TdHJpbmcoZSkKK2lmKCFpLmhhc1BhcnRpYWwodCxvKSl0aHJvdyBuZXcgRXJyb3IoJ0Nv
dWxkIG5vdCBmaW5kIGEgcGFydGlhbCBuYW1lZCAiJyt0KyciJykKK3JldHVybiBpLmxvb2t1cFBh
cnRpYWwodCxvKX0pLGE9KDAsci5pc0NvbnN0KShzKT92b2lkIDA6bmV3IHIuUmVmZXJlbmNlQ2Fj
aGUocyksdT1hP2EucGVlaygpOnMudmFsdWUoKQorZS5mcmFtZS5zZXRJbW1lZGlhdGUodSksYSYm
ZS51cGRhdGVXaXRoKG5ldyBTZShhKSl9KSxFZS5hZGQoNTAsZnVuY3Rpb24oZSx0KXt2YXIgbj10
Lm9wMSxyPWUuY29uc3RhbnRzLmdldE90aGVyKG4pCitlLmZyYW1lLnNldEltbWVkaWF0ZShyKX0p
LEVlLmFkZCg1MSxmdW5jdGlvbihlLHQpe3ZhciBuPXQub3AxLHI9dC5vcDIsaT1lLmNvbnN0YW50
cy5nZXRPdGhlcihuKSxvPWUuY29uc3RhbnRzLmdldE90aGVyKHIpLHM9ZS5mcmFtZS5nZXRJbW1l
ZGlhdGUoKSxhPXMudGVtcGxhdGUsdT1vW2EuaWRdCit1fHwodT1hLmFzUGFydGlhbChpKSksZS5p
bnZva2VQYXJ0aWFsKHUpfSkKK3ZhciBicj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy50
YWc9ZS50YWcsdGhpcy5hcnRpZmFjdHM9ZX1yZXR1cm4gZS5wcm90b3R5cGUudmFsdWU9ZnVuY3Rp
b24oKXtyZXR1cm4hdGhpcy5hcnRpZmFjdHMuaXNFbXB0eSgpfSxlfSgpCitFZS5hZGQoNDQsZnVu
Y3Rpb24oZSl7dmFyIHQ9ZS5mcmFtZS5nZXRPcGVyYW5kKCksaT0oMCxuLmV4cGVjdCkoZS5mcmFt
ZS5nZXRBcmdzKCksIlB1dEl0ZXJhdG9yT3Bjb2RlIGV4cGVjdHMgYSBwb3B1bGF0ZWQgYXJncyBy
ZWdpc3RlciIpLG89ZS5lbnYuaXRlcmFibGVGb3IodCxpKSxzPW5ldyByLlJlZmVyZW5jZUl0ZXJh
dG9yKG8pCitlLmZyYW1lLnNldEl0ZXJhdG9yKHMpLGUuZnJhbWUuc2V0Q29uZGl0aW9uKG5ldyBi
cihzLmFydGlmYWN0cykpfSksRWUuYWRkKDQ1LGZ1bmN0aW9uKGUsdCl7dmFyIG49dC5vcDEscj10
Lm9wMgorZS5lbnRlckxpc3QobixyKX0pLEVlLmFkZCg0NixmdW5jdGlvbihlKXtyZXR1cm4gZS5l
eGl0TGlzdCgpfSksRWUuYWRkKDQ3LGZ1bmN0aW9uKGUsdCl7dmFyIHI9dC5vcDEsaT10Lm9wMixv
PSgwLG4uZXhwZWN0KShlLmZyYW1lLmdldEtleSgpLCJFbnRlcldpdGhLZXlPcGNvZGUgZXhwZWN0
cyBhIHBvcHVsYXRlZCBrZXkgcmVnaXN0ZXIiKQorZS5lbnRlcldpdGhLZXkobyxyLGkpfSkKK3Zh
ciBfcj1uZXcgci5Db25zdFJlZmVyZW5jZSghMCksd3I9bmV3IHIuQ29uc3RSZWZlcmVuY2UoITEp
CitFZS5hZGQoNDgsZnVuY3Rpb24oZSx0KXt2YXIgbj10Lm9wMSxyPWUuZnJhbWUuZ2V0SXRlcmF0
b3IoKS5uZXh0KCkKK3I/KGUuZnJhbWUuc2V0Q29uZGl0aW9uKF9yKSxlLmZyYW1lLnNldEtleShy
LmtleSksZS5mcmFtZS5zZXRPcGVyYW5kKHIudmFsdWUpLGUuZnJhbWUuc2V0QXJncyhXZS5wb3Np
dGlvbmFsKFtyLnZhbHVlLHIubWVtb10pKSk6KGUuZnJhbWUuc2V0Q29uZGl0aW9uKHdyKSxlLmdv
dG8obikpfSkKK3ZhciBFcix4cj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy52bT1lfXJl
dHVybiBlLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudm0ubmV4dCgpfSxl
fSgpLENyPTAsT3I9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5zY29wZT1lLHRoaXMu
bmFtZVJlZj10Cit2YXIgbj10aGlzLnZhclRhZz1uZXcgci5VcGRhdGFibGVUYWcoci5DT05TVEFO
VF9UQUcpCit0aGlzLnRhZz0oMCxyLmNvbWJpbmUpKFt0LnRhZyxuXSl9cmV0dXJuIGUucHJvdG90
eXBlLnZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0VmFyKCkudmFsdWUoKX0sZS5wcm90
b3R5cGUuZ2V0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmdldFZhcigpLmdldChlKX0sZS5wcm90
b3R5cGUuZ2V0VmFyPWZ1bmN0aW9uKCl7dmFyIGU9U3RyaW5nKHRoaXMubmFtZVJlZi52YWx1ZSgp
KSx0PXRoaXMuc2NvcGUuZ2V0KGUpCityZXR1cm4gdGhpcy52YXJUYWcudXBkYXRlKHQudGFnKSx0
fSxlfSgpOyhmdW5jdGlvbihlKXtlW2UuRWxlbWVudD0wXT0iRWxlbWVudCIsZVtlLkF0dHJpYnV0
ZT0xXT0iQXR0cmlidXRlIixlW2UuVGV4dD0yXT0iVGV4dCIsZVtlLkNkYXRhU2VjdGlvbj0zXT0i
Q2RhdGFTZWN0aW9uIixlW2UuRW50aXR5UmVmZXJlbmNlPTRdPSJFbnRpdHlSZWZlcmVuY2UiLGVb
ZS5FbnRpdHk9NV09IkVudGl0eSIsZVtlLlByb2Nlc3NpbmdJbnN0cnVjdGlvbj02XT0iUHJvY2Vz
c2luZ0luc3RydWN0aW9uIixlW2UuQ29tbWVudD03XT0iQ29tbWVudCIsZVtlLkRvY3VtZW50PThd
PSJEb2N1bWVudCIsZVtlLkRvY3VtZW50VHlwZT05XT0iRG9jdW1lbnRUeXBlIixlW2UuRG9jdW1l
bnRGcmFnbWVudD0xMF09IkRvY3VtZW50RnJhZ21lbnQiLGVbZS5Ob3RhdGlvbj0xMV09Ik5vdGF0
aW9uIn0pKEVyfHwoRXI9e30pKQordmFyIEFyPU9iamVjdC5mcmVlemUoe2dldCBOb2RlVHlwZSgp
e3JldHVybiBFcn19KQorZS5TaW1wbGU9QXIsZS50ZW1wbGF0ZUZhY3Rvcnk9ZnVuY3Rpb24oZSl7
dmFyIHQ9ZS5pZCxyPWUubWV0YSxpPWUuYmxvY2ssbz12b2lkIDAscz10fHwiY2xpZW50LSIrQ3Ir
KworcmV0dXJue2lkOnMsbWV0YTpyLGNyZWF0ZTpmdW5jdGlvbihlLHQpe3ZhciBhPXQ/KDAsbi5h
c3NpZ24pKHt9LHQscik6cgorcmV0dXJuIG98fChvPUpTT04ucGFyc2UoaSkpLHBlKG8scyxhLGUp
fX19LGUuTlVMTF9SRUZFUkVOQ0U9Z2UsZS5VTkRFRklORURfUkVGRVJFTkNFPW1lLGUuUHJpbWl0
aXZlUmVmZXJlbmNlPWZlLGUuQ29uZGl0aW9uYWxSZWZlcmVuY2U9YmUsZS5PcGNvZGVCdWlsZGVy
RFNMPWt0LGUuY29tcGlsZUxheW91dD1mdW5jdGlvbihlLHQpe3ZhciBuPW5ldyBOdCh0KQorcmV0
dXJuIGUuY29tcGlsZShuKSxuLmNvbXBpbGUoKX0sZS5Db21waWxlZEJsb2NrPUF0LGUuQ29tcGls
ZWRQcm9ncmFtPVR0LGUuSUF0dHJpYnV0ZU1hbmFnZXI9SW4sZS5BdHRyaWJ1dGVNYW5hZ2VyPUlu
LGUuUHJvcGVydHlNYW5hZ2VyPU1uLGUuSU5QVVRfVkFMVUVfUFJPUEVSVFlfTUFOQUdFUj1Vbixl
LmRlZmF1bHRNYW5hZ2Vycz1lZSxlLmRlZmF1bHRBdHRyaWJ1dGVNYW5hZ2Vycz1uZSxlLmRlZmF1
bHRQcm9wZXJ0eU1hbmFnZXJzPXRlLGUucmVhZERPTUF0dHI9ZnVuY3Rpb24oZSx0KXt2YXIgbj1l
Lm5hbWVzcGFjZVVSST09PUFuLHI9QihlLHQpLGk9ci50eXBlLG89ci5ub3JtYWxpemVkCityZXR1
cm4gbj9lLmdldEF0dHJpYnV0ZShvKToiYXR0ciI9PT1pP2UuZ2V0QXR0cmlidXRlKG8pOmVbb119
LGUubm9ybWFsaXplVGV4dFZhbHVlPXVlLGUuQ29tcGlsZWRFeHByZXNzaW9uPWl0LGUuQ29tcGls
ZWRBcmdzPUhlLGUuQ29tcGlsZWROYW1lZEFyZ3M9RmUsZS5Db21waWxlZFBvc2l0aW9uYWxBcmdz
PURlLGUuRXZhbHVhdGVkQXJncz1XZSxlLkV2YWx1YXRlZE5hbWVkQXJncz1VZSxlLkV2YWx1YXRl
ZFBvc2l0aW9uYWxBcmdzPUllLGUuZ2V0RHluYW1pY1Zhcj1mdW5jdGlvbihlLHQpe3ZhciBuPWUu
ZHluYW1pY1Njb3BlKCkscj10LnBvc2l0aW9uYWwuYXQoMCkKK3JldHVybiBuZXcgT3IobixyKX0s
ZS5CbG9ja01hY3Jvcz1nbixlLklubGluZU1hY3Jvcz12bixlLmNvbXBpbGVBcmdzPVIKK2Uuc2V0
RGVidWdnZXJDYWxsYmFjaz1mdW5jdGlvbihlKXtwbj1lfSxlLnJlc2V0RGVidWdnZXJDYWxsYmFj
az1mdW5jdGlvbigpe3BuPUF9LGUuQmFzZWxpbmVTeW50YXg9SHQsZS5MYXlvdXQ9V3QsZS5VcGRh
dGluZ1ZNPWVyLGUuUmVuZGVyUmVzdWx0PVFuLGUuaXNTYWZlU3RyaW5nPXUsZS5TY29wZT1Wbixl
LkVudmlyb25tZW50PUtuLGUuUGFydGlhbERlZmluaXRpb249ZnVuY3Rpb24oZSx0KXt0aGlzLm5h
bWU9ZSx0aGlzLnRlbXBsYXRlPXR9LGUuQ29tcG9uZW50RGVmaW5pdGlvbj1mdW5jdGlvbihlLHQs
bil7dGhpc1tydF09ITAsdGhpcy5uYW1lPWUsdGhpcy5tYW5hZ2VyPXQsdGhpcy5Db21wb25lbnRD
bGFzcz1ufSxlLmlzQ29tcG9uZW50RGVmaW5pdGlvbj1oLGUuRE9NQ2hhbmdlcz1EbixlLklET01D
aGFuZ2VzPVBuLGUuRE9NVHJlZUNvbnN0cnVjdGlvbj1MbixlLmlzV2hpdGVzcGFjZT1mdW5jdGlv
bihlKXtyZXR1cm4ga24udGVzdChlKX0sZS5pbnNlcnRIVE1MQmVmb3JlPVgsZS5FbGVtZW50U3Rh
Y2s9Z3QsZS5Db25jcmV0ZUJvdW5kcz1ZZX0pLGUoIkBnbGltbWVyL3V0aWwiLFsiZXhwb3J0cyJd
LGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IgorZnVuY3Rpb24gdChlKXtyZXR1cm4gZS5fZ3VpZD0r
K3l9ZnVuY3Rpb24gbihlKXtyZXR1cm4gZS5fZ3VpZHx8dChlKX1mdW5jdGlvbiByKCl7fWZ1bmN0
aW9uIGkoKXtyZXR1cm4gbmV3IHJ9ZS51bnJlYWNoYWJsZT1lLmV4cGVjdD1lLnVud3JhcD1lLkhB
U19OQVRJVkVfV0VBS01BUD1lLkE9ZS5MaXN0U2xpY2U9ZS5MaXN0Tm9kZT1lLkxpbmtlZExpc3Q9
ZS5FTVBUWV9TTElDRT1lLmRpY3Q9ZS5EaWN0U2V0PWUuU3RhY2s9ZS5pbml0aWFsaXplR3VpZD1l
LmVuc3VyZUd1aWQ9ZS5maWxsTnVsbHM9ZS5hc3NpZ249ZS5Mb2dMZXZlbD1lLkxvZ2dlcj1lLkxP
R0dFUj1lLmFzc2VydD1lLmdldEF0dHJOYW1lc3BhY2U9dm9pZCAwCit2YXIgbyxzPSJodHRwOi8v
d3d3LnczLm9yZy8xOTk5L3hsaW5rIixhPSJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1l
c3BhY2UiLHU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIixsPXsieGxpbms6YWN0dWF0
ZSI6cywieGxpbms6YXJjcm9sZSI6cywieGxpbms6aHJlZiI6cywieGxpbms6cm9sZSI6cywieGxp
bms6c2hvdyI6cywieGxpbms6dGl0bGUiOnMsInhsaW5rOnR5cGUiOnMsInhtbDpiYXNlIjphLCJ4
bWw6bGFuZyI6YSwieG1sOnNwYWNlIjphLHhtbG5zOnUsInhtbG5zOnhsaW5rIjp1fTsoZnVuY3Rp
b24oZSl7ZVtlLlRyYWNlPTBdPSJUcmFjZSIsZVtlLkRlYnVnPTFdPSJEZWJ1ZyIsZVtlLldhcm49
Ml09Ildhcm4iLGVbZS5FcnJvcj0zXT0iRXJyb3IifSkob3x8KGUuTG9nTGV2ZWw9bz17fSkpCit2
YXIgYz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt9cmV0dXJuIGUucHJvdG90eXBlLmxvZz1mdW5j
dGlvbigpe30sZS5wcm90b3R5cGUud2Fybj1mdW5jdGlvbigpe30sZS5wcm90b3R5cGUuZXJyb3I9
ZnVuY3Rpb24oKXt9LGUucHJvdG90eXBlLnRyYWNlPWZ1bmN0aW9uKCl7fSxlfSgpLHA9dm9pZCAw
LGY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3ZhciB0PWUuY29uc29sZSxuPWUubGV2ZWwKK3Ro
aXMuZj1wLHRoaXMuZm9yY2U9cCx0aGlzLmNvbnNvbGU9dCx0aGlzLmxldmVsPW59cmV0dXJuIGUu
cHJvdG90eXBlLnNraXBwZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGU8dGhpcy5sZXZlbH0sZS5wcm90
b3R5cGUudHJhY2U9ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAh
PT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9LG49dC5zdGFja1RyYWNlLHI9dm9pZCAwIT09
biYmbgordGhpcy5za2lwcGVkKG8uVHJhY2UpfHwodGhpcy5jb25zb2xlLmxvZyhlKSxyJiZ0aGlz
LmNvbnNvbGUudHJhY2UoKSl9LGUucHJvdG90eXBlLmRlYnVnPWZ1bmN0aW9uKGUpe3ZhciB0PWFy
Z3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSxu
PXQuc3RhY2tUcmFjZSxyPXZvaWQgMCE9PW4mJm4KK3RoaXMuc2tpcHBlZChvLkRlYnVnKXx8KHRo
aXMuY29uc29sZS5sb2coZSksciYmdGhpcy5jb25zb2xlLnRyYWNlKCkpfSxlLnByb3RvdHlwZS53
YXJuPWZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1l
bnRzWzFdP2FyZ3VtZW50c1sxXTp7fSxuPXQuc3RhY2tUcmFjZSxyPXZvaWQgMCE9PW4mJm4KK3Ro
aXMuc2tpcHBlZChvLldhcm4pfHwodGhpcy5jb25zb2xlLndhcm4oZSksciYmdGhpcy5jb25zb2xl
LnRyYWNlKCkpfSxlLnByb3RvdHlwZS5lcnJvcj1mdW5jdGlvbihlKXt0aGlzLnNraXBwZWQoby5F
cnJvcil8fHRoaXMuY29uc29sZS5lcnJvcihlKX0sZX0oKSxoPSJ1bmRlZmluZWQiPT10eXBlb2Yg
Y29uc29sZT9uZXcgYzpjb25zb2xlCitwPW5ldyBmKHtjb25zb2xlOmgsbGV2ZWw6by5UcmFjZX0p
Cit2YXIgZD1vLldhcm4sbT1uZXcgZih7Y29uc29sZTpoLGxldmVsOmR9KSxnPU9iamVjdC5rZXlz
LHk9MCx2PU9iamVjdC5jcmVhdGUobnVsbCx7Y29uc3RydWN0b3I6e3ZhbHVlOnZvaWQgMCxlbnVt
ZXJhYmxlOiExLHdyaXRhYmxlOiEwfX0pCityLnByb3RvdHlwZT12Cit2YXIgYj1mdW5jdGlvbigp
e2Z1bmN0aW9uIGUoKXt0aGlzLmRpY3Q9aSgpfXJldHVybiBlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rp
b24oZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlP3RoaXMuZGljdFtlXT1lOnRoaXMuZGljdFtu
KGUpXT1lLHRoaXN9LGUucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihlKXsic3RyaW5nIj09dHlw
ZW9mIGU/ZGVsZXRlIHRoaXMuZGljdFtlXTplLl9ndWlkJiZkZWxldGUgdGhpcy5kaWN0W2UuX2d1
aWRdfSxlLnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZGljdAorT2Jq
ZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihuKXtyZXR1cm4gZSh0W25dKX0pfSxlLnByb3Rv
dHlwZS50b0FycmF5PWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuZGljdCl9LGV9
KCksXz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLnN0YWNrPVtdLHRoaXMuY3VycmVudD1u
dWxsfXJldHVybiBlLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3Rh
Y2t9LGUucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oZSl7dGhpcy5jdXJyZW50PWUsdGhpcy5zdGFj
ay5wdXNoKGUpfSxlLnByb3RvdHlwZS5wb3A9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnN0YWNrLnBv
cCgpLHQ9dGhpcy5zdGFjay5sZW5ndGgKK3JldHVybiB0aGlzLmN1cnJlbnQ9MD09PXQ/bnVsbDp0
aGlzLnN0YWNrW3QtMV0sdm9pZCAwPT09ZT9udWxsOmV9LGUucHJvdG90eXBlLmlzRW1wdHk9ZnVu
Y3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuc3RhY2subGVuZ3RofSxlfSgpLHc9ZnVuY3Rpb24oKXtm
dW5jdGlvbiBlKCl7dGhpcy5jbGVhcigpfXJldHVybiBlLmZyb21TbGljZT1mdW5jdGlvbih0KXt2
YXIgbj1uZXcgZQorcmV0dXJuIHQuZm9yRWFjaE5vZGUoZnVuY3Rpb24oZSl7cmV0dXJuIG4uYXBw
ZW5kKGUuY2xvbmUoKSl9KSxufSxlLnByb3RvdHlwZS5oZWFkPWZ1bmN0aW9uKCl7cmV0dXJuIHRo
aXMuX2hlYWR9LGUucHJvdG90eXBlLnRhaWw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdGFpbH0s
ZS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLl9oZWFkPXRoaXMuX3RhaWw9bnVsbH0s
ZS5wcm90b3R5cGUuaXNFbXB0eT1mdW5jdGlvbigpe3JldHVybiBudWxsPT09dGhpcy5faGVhZH0s
ZS5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbigpe3ZhciBlPVtdCityZXR1cm4gdGhpcy5mb3JF
YWNoTm9kZShmdW5jdGlvbih0KXtyZXR1cm4gZS5wdXNoKHQpfSksZX0sZS5wcm90b3R5cGUuc3Bs
aWNlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj12b2lkIDAKK251bGw9PT1uPyhyPXRoaXMuX3RhaWws
dGhpcy5fdGFpbD10KToocj1uLnByZXYsdC5uZXh0PW4sbi5wcmV2PXQpLHImJihyLm5leHQ9ZSxl
LnByZXY9cil9LGUucHJvdG90eXBlLm5leHROb2RlPWZ1bmN0aW9uKGUpe3JldHVybiBlLm5leHR9
LGUucHJvdG90eXBlLnByZXZOb2RlPWZ1bmN0aW9uKGUpe3JldHVybiBlLnByZXZ9LGUucHJvdG90
eXBlLmZvckVhY2hOb2RlPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLl9oZWFkO251bGwhPT10
OyllKHQpLHQ9dC5uZXh0fSxlLnByb3RvdHlwZS5jb250YWlucz1mdW5jdGlvbihlKXtmb3IodmFy
IHQ9dGhpcy5faGVhZDtudWxsIT09dDspe2lmKHQ9PT1lKXJldHVybiEwCit0PXQubmV4dH1yZXR1
cm4hMX0sZS5wcm90b3R5cGUuaW5zZXJ0QmVmb3JlPWZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50
cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpudWxsCityZXR1
cm4gbnVsbD09PXQ/dGhpcy5hcHBlbmQoZSk6KHQucHJldj90LnByZXYubmV4dD1lOnRoaXMuX2hl
YWQ9ZSxlLnByZXY9dC5wcmV2LGUubmV4dD10LHQucHJldj1lLGUpfSxlLnByb3RvdHlwZS5hcHBl
bmQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fdGFpbAorcmV0dXJuIHQ/KHQubmV4dD1lLGUucHJl
dj10LGUubmV4dD1udWxsKTp0aGlzLl9oZWFkPWUsdGhpcy5fdGFpbD1lfSxlLnByb3RvdHlwZS5w
b3A9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdGFpbD90aGlzLnJlbW92ZSh0aGlzLl90YWlsKTpu
dWxsfSxlLnByb3RvdHlwZS5wcmVwZW5kPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9oZWFkP3Ro
aXMuaW5zZXJ0QmVmb3JlKGUsdGhpcy5faGVhZCk6dGhpcy5faGVhZD10aGlzLl90YWlsPWV9LGUu
cHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbihlKXtyZXR1cm4gZS5wcmV2P2UucHJldi5uZXh0PWUu
bmV4dDp0aGlzLl9oZWFkPWUubmV4dCxlLm5leHQ/ZS5uZXh0LnByZXY9ZS5wcmV2OnRoaXMuX3Rh
aWw9ZS5wcmV2LGV9LGV9KCksRT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLl9oZWFk
PWUsdGhpcy5fdGFpbD10fXJldHVybiBlLnRvTGlzdD1mdW5jdGlvbihlKXt2YXIgdD1uZXcgdwor
cmV0dXJuIGUuZm9yRWFjaE5vZGUoZnVuY3Rpb24oZSl7cmV0dXJuIHQuYXBwZW5kKGUuY2xvbmUo
KSl9KSx0fSxlLnByb3RvdHlwZS5mb3JFYWNoTm9kZT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhp
cy5faGVhZDtudWxsIT09dDspZSh0KSx0PXRoaXMubmV4dE5vZGUodCl9LGUucHJvdG90eXBlLmNv
bnRhaW5zPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLl9oZWFkO251bGwhPT10Oyl7aWYodD09
PWUpcmV0dXJuITAKK3Q9dC5uZXh0fXJldHVybiExfSxlLnByb3RvdHlwZS5oZWFkPWZ1bmN0aW9u
KCl7cmV0dXJuIHRoaXMuX2hlYWR9LGUucHJvdG90eXBlLnRhaWw9ZnVuY3Rpb24oKXtyZXR1cm4g
dGhpcy5fdGFpbH0sZS5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbigpe3ZhciBlPVtdCityZXR1
cm4gdGhpcy5mb3JFYWNoTm9kZShmdW5jdGlvbih0KXtyZXR1cm4gZS5wdXNoKHQpfSksZX0sZS5w
cm90b3R5cGUubmV4dE5vZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT10aGlzLl90YWlsP251bGw6
ZS5uZXh0fSxlLnByb3RvdHlwZS5wcmV2Tm9kZT1mdW5jdGlvbihlKXtyZXR1cm4gZT09PXRoaXMu
X2hlYWQ/bnVsbDplLnByZXZ9LGUucHJvdG90eXBlLmlzRW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4h
MX0sZX0oKSx4PW5ldyBFKG51bGwsbnVsbCksQz0idW5kZWZpbmVkIiE9dHlwZW9mIFVpbnQzMkFy
cmF5LE89dm9pZCAwCitPPUM/VWludDMyQXJyYXk6QXJyYXkKK3ZhciBBPU8sVD1mdW5jdGlvbigp
e2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBXZWFrTWFwKXJldHVybiExCit2YXIgZT1uZXcgV2Vha01h
cAorcmV0dXJuIltvYmplY3QgV2Vha01hcF0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5j
YWxsKGUpfSgpCitlLmdldEF0dHJOYW1lc3BhY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGxbZV18fG51
bGx9LGUuYXNzZXJ0PWZ1bmN0aW9uKGUsdCl7aWYoIWUpdGhyb3cgbmV3IEVycm9yKHR8fCJhc3Nl
cnRpb24gZmFpbHVyZSIpfSxlLkxPR0dFUj1tLGUuTG9nZ2VyPWYsZS5Mb2dMZXZlbD1vLGUuYXNz
aWduPWZ1bmN0aW9uKGUpe3ZhciB0LG4scixpLG8KK2Zvcih0PTE7dDxhcmd1bWVudHMubGVuZ3Ro
O3QrKylpZihudWxsIT09KG49YXJndW1lbnRzW3RdKSYmIm9iamVjdCI9PXR5cGVvZiBuKWZvcihy
PWcobiksaT0wO2k8ci5sZW5ndGg7aSsrKW89cltpXSxlW29dPW5bb10KK3JldHVybiBlfSxlLmZp
bGxOdWxscz1mdW5jdGlvbihlKXt2YXIgdCxuPW5ldyBBcnJheShlKQorZm9yKHQ9MDt0PGU7dCsr
KW5bdF09bnVsbAorcmV0dXJuIG59LGUuZW5zdXJlR3VpZD1uLGUuaW5pdGlhbGl6ZUd1aWQ9dCxl
LlN0YWNrPV8sZS5EaWN0U2V0PWIsZS5kaWN0PWksZS5FTVBUWV9TTElDRT14LGUuTGlua2VkTGlz
dD13LGUuTGlzdE5vZGU9ZnVuY3Rpb24oZSl7dGhpcy5uZXh0PW51bGwsdGhpcy5wcmV2PW51bGws
dGhpcy52YWx1ZT1lfSxlLkxpc3RTbGljZT1FLGUuQT1BLGUuSEFTX05BVElWRV9XRUFLTUFQPVQs
ZS51bndyYXA9ZnVuY3Rpb24oZSl7aWYobnVsbD09PWV8fHZvaWQgMD09PWUpdGhyb3cgbmV3IEVy
cm9yKCJFeHBlY3RlZCB2YWx1ZSB0byBiZSBwcmVzZW50IikKK3JldHVybiBlfSxlLmV4cGVjdD1m
dW5jdGlvbihlLHQpe2lmKG51bGw9PT1lfHx2b2lkIDA9PT1lKXRocm93IG5ldyBFcnJvcih0KQor
cmV0dXJuIGV9LGUudW5yZWFjaGFibGU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEVycm9yKCJ1bnJl
YWNoYWJsZSIpfX0pLGUoIkBnbGltbWVyL3dpcmUtZm9ybWF0IixbImV4cG9ydHMiXSxmdW5jdGlv
bihlKXsidXNlIHN0cmljdCIKK2Z1bmN0aW9uIHQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVy
biB0WzBdPT09ZX19dmFyIG47KGZ1bmN0aW9uKGUpe2VbZS5UZXh0PTBdPSJUZXh0IixlW2UuQXBw
ZW5kPTFdPSJBcHBlbmQiLGVbZS5Vbm9wdGltaXplZEFwcGVuZD0yXT0iVW5vcHRpbWl6ZWRBcHBl
bmQiLGVbZS5PcHRpbWl6ZWRBcHBlbmQ9M109Ik9wdGltaXplZEFwcGVuZCIsZVtlLkNvbW1lbnQ9
NF09IkNvbW1lbnQiLGVbZS5Nb2RpZmllcj01XT0iTW9kaWZpZXIiLGVbZS5CbG9jaz02XT0iQmxv
Y2siLGVbZS5TY2FubmVkQmxvY2s9N109IlNjYW5uZWRCbG9jayIsZVtlLk5lc3RlZEJsb2NrPThd
PSJOZXN0ZWRCbG9jayIsZVtlLkNvbXBvbmVudD05XT0iQ29tcG9uZW50IixlW2UuU2Nhbm5lZENv
bXBvbmVudD0xMF09IlNjYW5uZWRDb21wb25lbnQiLGVbZS5PcGVuRWxlbWVudD0xMV09Ik9wZW5F
bGVtZW50IixlW2UuT3BlblByaW1pdGl2ZUVsZW1lbnQ9MTJdPSJPcGVuUHJpbWl0aXZlRWxlbWVu
dCIsZVtlLkZsdXNoRWxlbWVudD0xM109IkZsdXNoRWxlbWVudCIsZVtlLkNsb3NlRWxlbWVudD0x
NF09IkNsb3NlRWxlbWVudCIsZVtlLlN0YXRpY0F0dHI9MTVdPSJTdGF0aWNBdHRyIixlW2UuRHlu
YW1pY0F0dHI9MTZdPSJEeW5hbWljQXR0ciIsZVtlLkFueUR5bmFtaWNBdHRyPTE3XT0iQW55RHlu
YW1pY0F0dHIiLGVbZS5ZaWVsZD0xOF09IllpZWxkIixlW2UuUGFydGlhbD0xOV09IlBhcnRpYWwi
LGVbZS5TdGF0aWNQYXJ0aWFsPTIwXT0iU3RhdGljUGFydGlhbCIsZVtlLkR5bmFtaWNQYXJ0aWFs
PTIxXT0iRHluYW1pY1BhcnRpYWwiLGVbZS5EeW5hbWljQXJnPTIyXT0iRHluYW1pY0FyZyIsZVtl
LlN0YXRpY0FyZz0yM109IlN0YXRpY0FyZyIsZVtlLlRydXN0aW5nQXR0cj0yNF09IlRydXN0aW5n
QXR0ciIsZVtlLkRlYnVnZ2VyPTI1XT0iRGVidWdnZXIiLGVbZS5Vbmtub3duPTI2XT0iVW5rbm93
biIsZVtlLkFyZz0yN109IkFyZyIsZVtlLkdldD0yOF09IkdldCIsZVtlLkhhc0Jsb2NrPTI5XT0i
SGFzQmxvY2siCitlW2UuSGFzQmxvY2tQYXJhbXM9MzBdPSJIYXNCbG9ja1BhcmFtcyIsZVtlLlVu
ZGVmaW5lZD0zMV09IlVuZGVmaW5lZCIsZVtlLkZ1bmN0aW9uPTMyXT0iRnVuY3Rpb24iLGVbZS5I
ZWxwZXI9MzNdPSJIZWxwZXIiLGVbZS5Db25jYXQ9MzRdPSJDb25jYXQifSkobnx8KGUuT3BzPW49
e30pKQordmFyIHI7KGZ1bmN0aW9uKGUpe2UuaXNVbmtub3duPXQobi5Vbmtub3duKSxlLmlzQXJn
PXQobi5BcmcpLGUuaXNHZXQ9dChuLkdldCksZS5pc0NvbmNhdD10KG4uQ29uY2F0KSxlLmlzSGVs
cGVyPXQobi5IZWxwZXIpLGUuaXNIYXNCbG9jaz10KG4uSGFzQmxvY2spLGUuaXNIYXNCbG9ja1Bh
cmFtcz10KG4uSGFzQmxvY2tQYXJhbXMpLGUuaXNVbmRlZmluZWQ9dChuLlVuZGVmaW5lZCksZS5p
c1ByaW1pdGl2ZVZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT09ZXx8Im9iamVjdCIhPXR5
cGVvZiBlfX0pKHJ8fChlLkV4cHJlc3Npb25zPXI9e30pKQordmFyIGk7KGZ1bmN0aW9uKGUpe2Z1
bmN0aW9uIHIoZSl7cmV0dXJuIGVbMF09PT1uLlN0YXRpY0F0dHJ8fGVbMF09PT1uLkR5bmFtaWNB
dHRyfWZ1bmN0aW9uIGkoZSl7cmV0dXJuIGVbMF09PT1uLlN0YXRpY0FyZ3x8ZVswXT09PW4uRHlu
YW1pY0FyZ31lLmlzVGV4dD10KG4uVGV4dCksZS5pc0FwcGVuZD10KG4uQXBwZW5kKSxlLmlzQ29t
bWVudD10KG4uQ29tbWVudCksZS5pc01vZGlmaWVyPXQobi5Nb2RpZmllciksZS5pc0Jsb2NrPXQo
bi5CbG9jayksZS5pc0NvbXBvbmVudD10KG4uQ29tcG9uZW50KSxlLmlzT3BlbkVsZW1lbnQ9dChu
Lk9wZW5FbGVtZW50KSxlLmlzRmx1c2hFbGVtZW50PXQobi5GbHVzaEVsZW1lbnQpLGUuaXNDbG9z
ZUVsZW1lbnQ9dChuLkNsb3NlRWxlbWVudCksZS5pc1N0YXRpY0F0dHI9dChuLlN0YXRpY0F0dHIp
LGUuaXNEeW5hbWljQXR0cj10KG4uRHluYW1pY0F0dHIpLGUuaXNZaWVsZD10KG4uWWllbGQpLGUu
aXNQYXJ0aWFsPXQobi5QYXJ0aWFsKSxlLmlzRHluYW1pY0FyZz10KG4uRHluYW1pY0FyZyksZS5p
c1N0YXRpY0FyZz10KG4uU3RhdGljQXJnKSxlLmlzVHJ1c3RpbmdBdHRyPXQobi5UcnVzdGluZ0F0
dHIpLGUuaXNEZWJ1Z2dlcj10KG4uRGVidWdnZXIpLGUuaXNBdHRyaWJ1dGU9cixlLmlzQXJndW1l
bnQ9aSxlLmlzUGFyYW1ldGVyPWZ1bmN0aW9uKGUpe3JldHVybiByKGUpfHxpKGUpfSxlLmdldFBh
cmFtZXRlck5hbWU9ZnVuY3Rpb24oZSl7cmV0dXJuIGVbMV19fSkoaXx8KGUuU3RhdGVtZW50cz1p
PXt9KSksZS5pcz10LGUuRXhwcmVzc2lvbnM9cixlLlN0YXRlbWVudHM9aSxlLk9wcz1ufSksZSgi
YmFja2J1cm5lciIsWyJleHBvcnRzIl0sZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiCitmdW5jdGlv
biB0KGUsdCl7dmFyIG4KK2ZvcihuPTA7bjxlLmxlbmd0aDtuKyspdChlW25dKX1mdW5jdGlvbiBu
KGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZX1mdW5jdGlvbiByKGUpe3JldHVybiJmdW5jdGlv
biI9PXR5cGVvZiBlfWZ1bmN0aW9uIGkoZSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBlfWZ1bmN0
aW9uIG8oZSl7cmV0dXJuIGkoZSl8fGgudGVzdChlKX1mdW5jdGlvbiBzKGUpe3Rocm93IG5ldyBF
cnJvcigiWW91IGF0dGVtcHRlZCB0byBzY2hlZHVsZSBhbiBhY3Rpb24gaW4gYSBxdWV1ZSAoIitl
KyIpIHRoYXQgZG9lc24ndCBleGlzdCIpfWZ1bmN0aW9uIGEoZSl7dGhyb3cgbmV3IEVycm9yKCJZ
b3UgYXR0ZW1wdGVkIHRvIHNjaGVkdWxlIGFuIGFjdGlvbiBpbiBhIHF1ZXVlICgiK2UrIikgZm9y
IGEgbWV0aG9kIHRoYXQgZG9lc24ndCBleGlzdCIpfWZ1bmN0aW9uIHUoZSl7cmV0dXJuIGUub25F
cnJvcnx8ZS5vbkVycm9yVGFyZ2V0JiZlLm9uRXJyb3JUYXJnZXRbZS5vbkVycm9yTWV0aG9kXX1m
dW5jdGlvbiBsKGUsdCxuKXtyZXR1cm4gcChlLHQsbil9ZnVuY3Rpb24gYyhlLHQsbil7cmV0dXJu
IHAoZSx0LG4pfWZ1bmN0aW9uIHAoZSx0LG4pe3ZhciByLGksbz12b2lkIDAscz0tMQorZm9yKHI9
MCxpPW4ubGVuZ3RoO3I8aTtyKyspaWYobz1uW3JdLG9bMF09PT1lJiZvWzFdPT09dCl7cz1yCiti
cmVha31yZXR1cm4gc31mdW5jdGlvbiBmKGUsdCl7Zm9yKHZhciBuPTAscj10Lmxlbmd0aC0yLGk9
dm9pZCAwLG89dm9pZCAwO248cjspbz0oci1uKS8yLGk9bitvLW8lMixlPj10W2ldP249aSsyOnI9
aQorcmV0dXJuIGU+PXRbbl0/bisyOm59dmFyIGg9L1xkKy8sZD1EYXRlLm5vdyxtPWZ1bmN0aW9u
KCl7ZnVuY3Rpb24gZShlLHQsbil7dGhpcy5uYW1lPWUsdGhpcy5nbG9iYWxPcHRpb25zPW58fHt9
LHRoaXMub3B0aW9ucz10LHRoaXMuX3F1ZXVlPVtdLHRoaXMudGFyZ2V0UXVldWVzPXt9LHRoaXMu
X3F1ZXVlQmVpbmdGbHVzaGVkPXZvaWQgMH1yZXR1cm4gZS5wcm90b3R5cGUucHVzaD1mdW5jdGlv
bihlLHQsbixyKXtyZXR1cm4gdGhpcy5fcXVldWUucHVzaChlLHQsbixyKSx7cXVldWU6dGhpcyx0
YXJnZXQ6ZSxtZXRob2Q6dH19LGUucHJvdG90eXBlLnB1c2hVbmlxdWU9ZnVuY3Rpb24oZSx0LG4s
cil7dmFyIGksbz10aGlzLmdsb2JhbE9wdGlvbnMuR1VJRF9LRVkKK3JldHVybiBlJiZvJiYoaT1l
W29dKT90aGlzLnB1c2hVbmlxdWVXaXRoR3VpZChpLGUsdCxuLHIpOih0aGlzLnB1c2hVbmlxdWVX
aXRob3V0R3VpZChlLHQsbixyKSx7cXVldWU6dGhpcyx0YXJnZXQ6ZSxtZXRob2Q6dH0pfSxlLnBy
b3RvdHlwZS5mbHVzaD1mdW5jdGlvbihlKXt2YXIgdCxyPXRoaXMuX3F1ZXVlLGk9ci5sZW5ndGgK
K2lmKDAhPT1pKXt2YXIgbz10aGlzLmdsb2JhbE9wdGlvbnMscz10aGlzLm9wdGlvbnMsYT1zJiZz
LmJlZm9yZSx1PXMmJnMuYWZ0ZXIsbD1vLm9uRXJyb3J8fG8ub25FcnJvclRhcmdldCYmby5vbkVy
cm9yVGFyZ2V0W28ub25FcnJvck1ldGhvZF0sYz12b2lkIDAscD12b2lkIDAsZj12b2lkIDAsaD12
b2lkIDAsZD1sP3RoaXMuaW52b2tlV2l0aE9uRXJyb3I6dGhpcy5pbnZva2UKK3RoaXMudGFyZ2V0
UXVldWVzPU9iamVjdC5jcmVhdGUobnVsbCkKK3ZhciBtPXRoaXMuX3F1ZXVlQmVpbmdGbHVzaGVk
PXRoaXMuX3F1ZXVlCitmb3IodGhpcy5fcXVldWU9W10sYSYmYSgpLHQ9MDt0PGk7dCs9NCljPW1b
dF0scD1tW3QrMV0sZj1tW3QrMl0saD1tW3QrM10sbihwKSYmKHA9Y1twXSkscCYmZChjLHAsZixs
LGgpCit1JiZ1KCksdGhpcy5fcXVldWVCZWluZ0ZsdXNoZWQ9dm9pZCAwLCExIT09ZSYmdGhpcy5f
cXVldWUubGVuZ3RoPjAmJnRoaXMuZmx1c2goITApfX0sZS5wcm90b3R5cGUuY2FuY2VsPWZ1bmN0
aW9uKGUpe3ZhciB0LG49dGhpcy5fcXVldWUscj12b2lkIDAsaT12b2lkIDAsbz12b2lkIDAscz12
b2lkIDAsYT1lLnRhcmdldCx1PWUubWV0aG9kLGw9dGhpcy5nbG9iYWxPcHRpb25zLkdVSURfS0VZ
CitpZihsJiZ0aGlzLnRhcmdldFF1ZXVlcyYmYSYmKHQ9dGhpcy50YXJnZXRRdWV1ZXNbYVtsXV0p
KWZvcihvPTAscz10Lmxlbmd0aDtvPHM7bysrKXRbb109PT11JiZ0LnNwbGljZShvLDEpCitmb3Io
bz0wLHM9bi5sZW5ndGg7bzxzO28rPTQpaWYocj1uW29dLGk9bltvKzFdLHI9PT1hJiZpPT09dSly
ZXR1cm4gbi5zcGxpY2Uobyw0KSwhMAoraWYobj10aGlzLl9xdWV1ZUJlaW5nRmx1c2hlZClmb3Io
bz0wLHM9bi5sZW5ndGg7bzxzO28rPTQpaWYocj1uW29dLGk9bltvKzFdLHI9PT1hJiZpPT09dSly
ZXR1cm4gbltvKzFdPW51bGwsITB9LGUucHJvdG90eXBlLnB1c2hVbmlxdWVXaXRob3V0R3VpZD1m
dW5jdGlvbihlLHQsbixyKXt2YXIgaSxvLHMsYSx1PXRoaXMuX3F1ZXVlCitmb3IoaT0wLG89dS5s
ZW5ndGg7aTxvO2krPTQpaWYocz11W2ldLGE9dVtpKzFdLHM9PT1lJiZhPT09dClyZXR1cm4gdVtp
KzJdPW4sdm9pZCh1W2krM109cikKK3UucHVzaChlLHQsbixyKX0sZS5wcm90b3R5cGUudGFyZ2V0
UXVldWU9ZnVuY3Rpb24oZSx0LG4scixpKXt2YXIgbyxzLGEsdSxsPXRoaXMuX3F1ZXVlCitmb3Io
bz0wLHM9ZS5sZW5ndGg7bzxzO28rPTIpaWYoYT1lW29dLHU9ZVtvKzFdLGE9PT1uKXJldHVybiBs
W3UrMl09cix2b2lkKGxbdSszXT1pKQorZS5wdXNoKG4sbC5wdXNoKHQsbixyLGkpLTQpfSxlLnBy
b3RvdHlwZS5wdXNoVW5pcXVlV2l0aEd1aWQ9ZnVuY3Rpb24oZSx0LG4scixpKXt2YXIgbz10aGlz
LnRhcmdldFF1ZXVlc1tlXQorcmV0dXJuIG8/dGhpcy50YXJnZXRRdWV1ZShvLHQsbixyLGkpOnRo
aXMudGFyZ2V0UXVldWVzW2VdPVtuLHRoaXMuX3F1ZXVlLnB1c2godCxuLHIsaSktNF0se3F1ZXVl
OnRoaXMsdGFyZ2V0OnQsbWV0aG9kOm59fSxlLnByb3RvdHlwZS5pbnZva2U9ZnVuY3Rpb24oZSx0
LG4pe24mJm4ubGVuZ3RoPjA/dC5hcHBseShlLG4pOnQuY2FsbChlKX0sZS5wcm90b3R5cGUuaW52
b2tlV2l0aE9uRXJyb3I9ZnVuY3Rpb24oZSx0LG4scixpKXt0cnl7biYmbi5sZW5ndGg+MD90LmFw
cGx5KGUsbik6dC5jYWxsKGUpfWNhdGNoKGUpe3IoZSxpKX19LGV9KCksZz1mdW5jdGlvbigpe2Z1
bmN0aW9uIGUoZSxuKXt2YXIgcj10aGlzLnF1ZXVlcz17fQordGhpcy5xdWV1ZU5hbWVzPWU9ZXx8
W10sdGhpcy5vcHRpb25zPW4sdChlLGZ1bmN0aW9uKGUpe3JbZV09bmV3IG0oZSxuW2VdLG4pfSl9
cmV0dXJuIGUucHJvdG90eXBlLnNjaGVkdWxlPWZ1bmN0aW9uKGUsdCxuLHIsaSxvKXt2YXIgdT10
aGlzLnF1ZXVlcyxsPXVbZV0KK3JldHVybiBsfHxzKGUpLG58fGEoZSksaT9sLnB1c2hVbmlxdWUo
dCxuLHIsbyk6bC5wdXNoKHQsbixyLG8pfSxlLnByb3RvdHlwZS5mbHVzaD1mdW5jdGlvbigpe2Zv
cih2YXIgZT12b2lkIDAsdD12b2lkIDAsbj0wLHI9dGhpcy5xdWV1ZU5hbWVzLmxlbmd0aDtuPHI7
KXQ9dGhpcy5xdWV1ZU5hbWVzW25dLGU9dGhpcy5xdWV1ZXNbdF0sMD09PWUuX3F1ZXVlLmxlbmd0
aD9uKys6KGUuZmx1c2goITEpLG49MCl9LGV9KCkseT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0
KXt2YXIgbj10aGlzCit0aGlzLkRFQlVHPSExLHRoaXMuX2F1dG9ydW49bnVsbCx0aGlzLnF1ZXVl
TmFtZXM9ZSx0aGlzLm9wdGlvbnM9dHx8e30sdGhpcy5vcHRpb25zLmRlZmF1bHRRdWV1ZXx8KHRo
aXMub3B0aW9ucy5kZWZhdWx0UXVldWU9ZVswXSksdGhpcy5jdXJyZW50SW5zdGFuY2U9bnVsbCx0
aGlzLmluc3RhbmNlU3RhY2s9W10sdGhpcy5fZGVib3VuY2Vlcz1bXSx0aGlzLl90aHJvdHRsZXJz
PVtdLHRoaXMuX2V2ZW50Q2FsbGJhY2tzPXtlbmQ6W10sYmVnaW46W119LHRoaXMuX2JvdW5kQ2xl
YXJJdGVtcz1mdW5jdGlvbihlKXtuLl9wbGF0Zm9ybS5jbGVhclRpbWVvdXQoZVsyXSl9LHRoaXMu
X3RpbWVyVGltZW91dElkPXZvaWQgMCx0aGlzLl90aW1lcnM9W10sdGhpcy5fcGxhdGZvcm09dGhp
cy5vcHRpb25zLl9wbGF0Zm9ybXx8e3NldFRpbWVvdXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gc2V0
VGltZW91dChlLHQpfSxjbGVhclRpbWVvdXQ6ZnVuY3Rpb24oZSl7Y2xlYXJUaW1lb3V0KGUpfX0s
dGhpcy5fYm91bmRSdW5FeHBpcmVkVGltZXJzPWZ1bmN0aW9uKCl7bi5fcnVuRXhwaXJlZFRpbWVy
cygpfSx0aGlzLl9ib3VuZEF1dG9ydW5FbmQ9ZnVuY3Rpb24oKXtuLl9hdXRvcnVuPW51bGwsbi5l
bmQoKX19cmV0dXJuIGUucHJvdG90eXBlLmJlZ2luPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcHRp
b25zLHQ9ZSYmZS5vbkJlZ2luLG49dGhpcy5jdXJyZW50SW5zdGFuY2UKK24mJnRoaXMuaW5zdGFu
Y2VTdGFjay5wdXNoKG4pCit2YXIgcj10aGlzLmN1cnJlbnRJbnN0YW5jZT1uZXcgZyh0aGlzLnF1
ZXVlTmFtZXMsZSkKK3JldHVybiB0aGlzLl90cmlnZ2VyKCJiZWdpbiIscixuKSx0JiZ0KHIsbiks
cn0sZS5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcHRpb25zLHQ9ZSYmZS5v
bkVuZCxuPXRoaXMuY3VycmVudEluc3RhbmNlLHI9bnVsbAoraWYoIW4pdGhyb3cgbmV3IEVycm9y
KCJlbmQgY2FsbGVkIHdpdGhvdXQgYmVnaW4iKQordmFyIGk9ITEKK3RyeXtuLmZsdXNoKCl9Zmlu
YWxseXtpfHwoaT0hMCx0aGlzLmN1cnJlbnRJbnN0YW5jZT1udWxsLHRoaXMuaW5zdGFuY2VTdGFj
ay5sZW5ndGgmJihyPXRoaXMuaW5zdGFuY2VTdGFjay5wb3AoKSx0aGlzLmN1cnJlbnRJbnN0YW5j
ZT1yKSx0aGlzLl90cmlnZ2VyKCJlbmQiLG4sciksdCYmdChuLHIpKX19LGUucHJvdG90eXBlLm9u
PWZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJv
cigiQ2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uIikKK3ZhciBuPXRoaXMuX2V2ZW50Q2FsbGJh
Y2tzW2VdCitpZighbil0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3Qgb24oKSBldmVudCAiK2Ur
IiBiZWNhdXNlIGl0IGRvZXMgbm90IGV4aXN0IikKK24ucHVzaCh0KX0sZS5wcm90b3R5cGUub2Zm
PWZ1bmN0aW9uKGUsdCl7dmFyIG4scixpCitpZighZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5u
b3Qgb2ZmKCkgZXZlbnQgIitlKyIgYmVjYXVzZSBpdCBkb2VzIG5vdCBleGlzdCIpCitpZihuPXRo
aXMuX2V2ZW50Q2FsbGJhY2tzW2VdLHI9ITEsbil7aWYodClmb3IoaT0wO2k8bi5sZW5ndGg7aSsr
KW5baV09PT10JiYocj0hMCxuLnNwbGljZShpLDEpLGktLSkKK2lmKCFyKXRocm93IG5ldyBUeXBl
RXJyb3IoIkNhbm5vdCBvZmYoKSBjYWxsYmFjayB0aGF0IGRvZXMgbm90IGV4aXN0Iil9fSxlLnBy
b3RvdHlwZS5ydW49ZnVuY3Rpb24oZSx0KXtmb3Iocj1hcmd1bWVudHMubGVuZ3RoLGk9QXJyYXko
cj4yP3ItMjowKSxvPTI7bzxyO28rKylpW28tMl09YXJndW1lbnRzW29dCit2YXIgcixpLG8scz1h
cmd1bWVudHMubGVuZ3RoLGE9dm9pZCAwLGw9dm9pZCAwCisxPT09cz8oYT1lLGw9bnVsbCk6KGw9
ZSxhPXQpLG4oYSkmJihhPWxbYV0pCit2YXIgYz11KHRoaXMub3B0aW9ucykKK2lmKHRoaXMuYmVn
aW4oKSxjKXRyeXtyZXR1cm4gYS5hcHBseShsLGkpfWNhdGNoKGUpe2MoZSl9ZmluYWxseXt0aGlz
LmVuZCgpfWVsc2UgdHJ5e3JldHVybiBhLmFwcGx5KGwsaSl9ZmluYWxseXt0aGlzLmVuZCgpfX0s
ZS5wcm90b3R5cGUuam9pbj1mdW5jdGlvbigpe2lmKCF0aGlzLmN1cnJlbnRJbnN0YW5jZSlyZXR1
cm4gdGhpcy5ydW4uYXBwbHkodGhpcyxhcmd1bWVudHMpCit2YXIgZSx0LHI9YXJndW1lbnRzLmxl
bmd0aCxpPXZvaWQgMCxvPXZvaWQgMAoraWYoMT09PXI/KGk9YXJndW1lbnRzWzBdLG89bnVsbCk6
KG89YXJndW1lbnRzWzBdLGk9YXJndW1lbnRzWzFdKSxuKGkpJiYoaT1vW2ldKSwxPT09cilyZXR1
cm4gaSgpCitpZigyPT09cilyZXR1cm4gaS5jYWxsKG8pCitmb3IoZT1uZXcgQXJyYXkoci0yKSx0
PTA7dDxyLTI7dCsrKWVbdF09YXJndW1lbnRzW3QrMl0KK3JldHVybiBpLmFwcGx5KG8sZSl9LGUu
cHJvdG90eXBlLmRlZmVyPWZ1bmN0aW9uKGUpe3ZhciB0LHI9YXJndW1lbnRzLmxlbmd0aCxpPXZv
aWQgMCxvPXZvaWQgMCxzPXZvaWQgMAorMj09PXI/KGk9YXJndW1lbnRzWzFdLG89bnVsbCk6KG89
YXJndW1lbnRzWzFdLGk9YXJndW1lbnRzWzJdKSxuKGkpJiYoaT1vW2ldKQordmFyIGE9dGhpcy5E
RUJVRz9uZXcgRXJyb3I6dm9pZCAwCitpZihyPjMpZm9yKHM9bmV3IEFycmF5KHItMyksdD0zO3Q8
cjt0Kyspc1t0LTNdPWFyZ3VtZW50c1t0XQorZWxzZSBzPXZvaWQgMAorcmV0dXJuIHRoaXMuX2Vu
c3VyZUluc3RhbmNlKCkuc2NoZWR1bGUoZSxvLGkscywhMSxhKX0sZS5wcm90b3R5cGUuZGVmZXJP
bmNlPWZ1bmN0aW9uKGUpe3ZhciB0LHI9YXJndW1lbnRzLmxlbmd0aCxpPXZvaWQgMCxvPXZvaWQg
MCxzPXZvaWQgMAorMj09PXI/KGk9YXJndW1lbnRzWzFdLG89bnVsbCk6KG89YXJndW1lbnRzWzFd
LGk9YXJndW1lbnRzWzJdKSxuKGkpJiYoaT1vW2ldKQordmFyIGE9dGhpcy5ERUJVRz9uZXcgRXJy
b3I6dm9pZCAwCitpZihyPjMpZm9yKHM9bmV3IEFycmF5KHItMyksdD0zO3Q8cjt0Kyspc1t0LTNd
PWFyZ3VtZW50c1t0XQorZWxzZSBzPXZvaWQgMAorcmV0dXJuIHRoaXMuX2Vuc3VyZUluc3RhbmNl
KCkuc2NoZWR1bGUoZSxvLGkscywhMCxhKX0sZS5wcm90b3R5cGUuc2V0VGltZW91dD1mdW5jdGlv
bigpe3ZhciBlLHQsaT1hcmd1bWVudHMubGVuZ3RoLHM9bmV3IEFycmF5KGkpCitmb3IoZT0wO2U8
aTtlKyspc1tlXT1hcmd1bWVudHNbZV0KK3ZhciBhPXMubGVuZ3RoLGw9dm9pZCAwLGM9dm9pZCAw
LHA9dm9pZCAwLGY9dm9pZCAwLGg9dm9pZCAwLG09dm9pZCAwCitpZigwIT09YSl7MT09PWE/KGw9
cy5zaGlmdCgpLGM9MCk6Mj09PWE/KGY9c1swXSxoPXNbMV0scihoKXx8cihmW2hdKT8ocD1zLnNo
aWZ0KCksbD1zLnNoaWZ0KCksYz0wKTpvKGgpPyhsPXMuc2hpZnQoKSxjPXMuc2hpZnQoKSk6KGw9
cy5zaGlmdCgpLGM9MCkpOih0PXNbcy5sZW5ndGgtMV0sYz1vKHQpP3MucG9wKCk6MCxmPXNbMF0s
bT1zWzFdLHIobSl8fG4obSkmJm51bGwhPT1mJiZtIGluIGY/KHA9cy5zaGlmdCgpLGw9cy5zaGlm
dCgpKTpsPXMuc2hpZnQoKSkKK3ZhciBnPWQoKStwYXJzZUludChjIT09Yz8wOmMsMTApCituKGwp
JiYobD1wW2xdKQordmFyIHk9dSh0aGlzLm9wdGlvbnMpCityZXR1cm4gdGhpcy5fc2V0VGltZW91
dChmdW5jdGlvbigpe2lmKHkpdHJ5e2wuYXBwbHkocCxzKX1jYXRjaChlKXt5KGUpfWVsc2UgbC5h
cHBseShwLHMpfSxnKX19LGUucHJvdG90eXBlLnRocm90dGxlPWZ1bmN0aW9uKGUsdCl7dmFyIHIs
bz10aGlzLHM9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpCitmb3Iocj0wO3I8YXJndW1lbnRz
Lmxlbmd0aDtyKyspc1tyXT1hcmd1bWVudHNbcl0KK3ZhciBhPXMucG9wKCksdT12b2lkIDAsbD12
b2lkIDAscD12b2lkIDAsZj12b2lkIDAKK3JldHVybiBpKGEpfHxuKGEpPyh1PWEsYT0hMCk6dT1z
LnBvcCgpLHU9cGFyc2VJbnQodSwxMCksKHA9YyhlLHQsdGhpcy5fdGhyb3R0bGVycykpPi0xP3Ro
aXMuX3Rocm90dGxlcnNbcF06KGY9dGhpcy5fcGxhdGZvcm0uc2V0VGltZW91dChmdW5jdGlvbigp
e2F8fG8ucnVuLmFwcGx5KG8scyksKHA9YyhlLHQsby5fdGhyb3R0bGVycykpPi0xJiZvLl90aHJv
dHRsZXJzLnNwbGljZShwLDEpfSx1KSxhJiZ0aGlzLmpvaW4uYXBwbHkodGhpcyxzKSxsPVtlLHQs
Zl0sdGhpcy5fdGhyb3R0bGVycy5wdXNoKGwpLGwpfSxlLnByb3RvdHlwZS5kZWJvdW5jZT1mdW5j
dGlvbihlLHQpe3ZhciByLG89dGhpcyxzPW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKQorZm9y
KHI9MDtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKXNbcl09YXJndW1lbnRzW3JdCit2YXIgYT1zLnBv
cCgpLHU9dm9pZCAwLGM9dm9pZCAwLHA9dm9pZCAwLGY9dm9pZCAwCityZXR1cm4gaShhKXx8bihh
KT8odT1hLGE9ITEpOnU9cy5wb3AoKSx1PXBhcnNlSW50KHUsMTApLGM9bChlLHQsdGhpcy5fZGVi
b3VuY2VlcyksYz4tMSYmKHA9dGhpcy5fZGVib3VuY2Vlc1tjXSx0aGlzLl9kZWJvdW5jZWVzLnNw
bGljZShjLDEpLHRoaXMuX3BsYXRmb3JtLmNsZWFyVGltZW91dChwWzJdKSksZj10aGlzLl9wbGF0
Zm9ybS5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7YXx8by5ydW4uYXBwbHkobyxzKSwoYz1sKGUsdCxv
Ll9kZWJvdW5jZWVzKSk+LTEmJm8uX2RlYm91bmNlZXMuc3BsaWNlKGMsMSl9LHUpLGEmJi0xPT09
YyYmby5ydW4uYXBwbHkobyxzKSxwPVtlLHQsZl0sby5fZGVib3VuY2Vlcy5wdXNoKHApLHB9LGUu
cHJvdG90eXBlLmNhbmNlbFRpbWVycz1mdW5jdGlvbigpe3QodGhpcy5fdGhyb3R0bGVycyx0aGlz
Ll9ib3VuZENsZWFySXRlbXMpLHRoaXMuX3Rocm90dGxlcnM9W10sdCh0aGlzLl9kZWJvdW5jZWVz
LHRoaXMuX2JvdW5kQ2xlYXJJdGVtcyksdGhpcy5fZGVib3VuY2Vlcz1bXSx0aGlzLl9jbGVhclRp
bWVyVGltZW91dCgpLHRoaXMuX3RpbWVycz1bXSx0aGlzLl9hdXRvcnVuJiYodGhpcy5fcGxhdGZv
cm0uY2xlYXJUaW1lb3V0KHRoaXMuX2F1dG9ydW4pLHRoaXMuX2F1dG9ydW49bnVsbCl9LGUucHJv
dG90eXBlLmhhc1RpbWVycz1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5fdGltZXJzLmxlbmd0aHx8
ISF0aGlzLl9kZWJvdW5jZWVzLmxlbmd0aHx8ISF0aGlzLl90aHJvdHRsZXJzLmxlbmd0aHx8dGhp
cy5fYXV0b3J1bn0sZS5wcm90b3R5cGUuY2FuY2VsPWZ1bmN0aW9uKGUpe3ZhciB0LG4scj10eXBl
b2YgZQoraWYoZSYmIm9iamVjdCI9PT1yJiZlLnF1ZXVlJiZlLm1ldGhvZClyZXR1cm4gZS5xdWV1
ZS5jYW5jZWwoZSkKK2lmKCJmdW5jdGlvbiI9PT1yKXtmb3IodD0wLG49dGhpcy5fdGltZXJzLmxl
bmd0aDt0PG47dCs9MilpZih0aGlzLl90aW1lcnNbdCsxXT09PWUpcmV0dXJuIHRoaXMuX3RpbWVy
cy5zcGxpY2UodCwyKSwwPT09dCYmdGhpcy5fcmVpbnN0YWxsVGltZXJUaW1lb3V0KCksITB9ZWxz
ZSBpZigiW29iamVjdCBBcnJheV0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUp
KXJldHVybiB0aGlzLl9jYW5jZWxJdGVtKGMsdGhpcy5fdGhyb3R0bGVycyxlKXx8dGhpcy5fY2Fu
Y2VsSXRlbShsLHRoaXMuX2RlYm91bmNlZXMsZSl9LGUucHJvdG90eXBlLl9zZXRUaW1lb3V0PWZ1
bmN0aW9uKGUsdCl7aWYoMD09PXRoaXMuX3RpbWVycy5sZW5ndGgpcmV0dXJuIHRoaXMuX3RpbWVy
cy5wdXNoKHQsZSksdGhpcy5faW5zdGFsbFRpbWVyVGltZW91dCgpLGUKK3ZhciBuPWYodCx0aGlz
Ll90aW1lcnMpCityZXR1cm4gdGhpcy5fdGltZXJzLnNwbGljZShuLDAsdCxlKSwwPT09biYmdGhp
cy5fcmVpbnN0YWxsVGltZXJUaW1lb3V0KCksZX0sZS5wcm90b3R5cGUuX2NhbmNlbEl0ZW09ZnVu
Y3Rpb24oZSx0LG4pe3ZhciByPXZvaWQgMCxpPXZvaWQgMAorcmV0dXJuIShuLmxlbmd0aDwzKSYm
KChpPWUoblswXSxuWzFdLHQpKT4tMSYmKHI9dFtpXSxyWzJdPT09blsyXSkmJih0LnNwbGljZShp
LDEpLHRoaXMuX3BsYXRmb3JtLmNsZWFyVGltZW91dChuWzJdKSwhMCkpfSxlLnByb3RvdHlwZS5f
dHJpZ2dlcj1mdW5jdGlvbihlLHQsbil7dmFyIHIsaT10aGlzLl9ldmVudENhbGxiYWNrc1tlXQor
aWYoaSlmb3Iocj0wO3I8aS5sZW5ndGg7cisrKWlbcl0odCxuKX0sZS5wcm90b3R5cGUuX3J1bkV4
cGlyZWRUaW1lcnM9ZnVuY3Rpb24oKXt0aGlzLl90aW1lclRpbWVvdXRJZD12b2lkIDAsdGhpcy5y
dW4odGhpcyx0aGlzLl9zY2hlZHVsZUV4cGlyZWRUaW1lcnMpfSxlLnByb3RvdHlwZS5fc2NoZWR1
bGVFeHBpcmVkVGltZXJzPWZ1bmN0aW9uKCl7Zm9yKHZhciBlLHQsbj1kKCkscj10aGlzLl90aW1l
cnMsaT0wLG89ci5sZW5ndGg7aTxvJiYoZT1yW2ldLHQ9cltpKzFdLGU8PW4pO2krPTIpdGhpcy5k
ZWZlcih0aGlzLm9wdGlvbnMuZGVmYXVsdFF1ZXVlLG51bGwsdCkKK3Iuc3BsaWNlKDAsaSksdGhp
cy5faW5zdGFsbFRpbWVyVGltZW91dCgpfSxlLnByb3RvdHlwZS5fcmVpbnN0YWxsVGltZXJUaW1l
b3V0PWZ1bmN0aW9uKCl7dGhpcy5fY2xlYXJUaW1lclRpbWVvdXQoKSx0aGlzLl9pbnN0YWxsVGlt
ZXJUaW1lb3V0KCl9LGUucHJvdG90eXBlLl9jbGVhclRpbWVyVGltZW91dD1mdW5jdGlvbigpe3Ro
aXMuX3RpbWVyVGltZW91dElkJiYodGhpcy5fcGxhdGZvcm0uY2xlYXJUaW1lb3V0KHRoaXMuX3Rp
bWVyVGltZW91dElkKSx0aGlzLl90aW1lclRpbWVvdXRJZD12b2lkIDApfSxlLnByb3RvdHlwZS5f
aW5zdGFsbFRpbWVyVGltZW91dD1mdW5jdGlvbigpe2lmKHRoaXMuX3RpbWVycy5sZW5ndGgpe3Zh
ciBlPXRoaXMuX3RpbWVyc1swXSx0PWQoKSxuPU1hdGgubWF4KDAsZS10KQordGhpcy5fdGltZXJU
aW1lb3V0SWQ9dGhpcy5fcGxhdGZvcm0uc2V0VGltZW91dCh0aGlzLl9ib3VuZFJ1bkV4cGlyZWRU
aW1lcnMsbil9fSxlLnByb3RvdHlwZS5fZW5zdXJlSW5zdGFuY2U9ZnVuY3Rpb24oKXt2YXIgZSx0
PXRoaXMuY3VycmVudEluc3RhbmNlCityZXR1cm4gdHx8KGU9dGhpcy5fcGxhdGZvcm0uc2V0VGlt
ZW91dCx0PXRoaXMuYmVnaW4oKSx0aGlzLl9hdXRvcnVuPWUodGhpcy5fYm91bmRBdXRvcnVuRW5k
LDApKSx0fSxlfSgpCit5LlF1ZXVlPW0seS5wcm90b3R5cGUuc2NoZWR1bGU9eS5wcm90b3R5cGUu
ZGVmZXIseS5wcm90b3R5cGUuc2NoZWR1bGVPbmNlPXkucHJvdG90eXBlLmRlZmVyT25jZSx5LnBy
b3RvdHlwZS5sYXRlcj15LnByb3RvdHlwZS5zZXRUaW1lb3V0LGUuZGVmYXVsdD15fSksZSgiY29u
dGFpbmVyIixbImV4cG9ydHMiLCJlbWJlci11dGlscyIsImVtYmVyLWRlYnVnIiwiZW1iZXItZW52
aXJvbm1lbnQiXSxmdW5jdGlvbihlLHQsbixyKXsidXNlIHN0cmljdCIKK2Z1bmN0aW9uIGkoZSxu
KXt0aGlzLnJlZ2lzdHJ5PWUsdGhpcy5vd25lcj1uJiZuLm93bmVyP24ub3duZXI6bnVsbCx0aGlz
LmNhY2hlPSgwLHQuZGljdGlvbmFyeSkobiYmbi5jYWNoZT9uLmNhY2hlOm51bGwpLHRoaXMuZmFj
dG9yeUNhY2hlPSgwLHQuZGljdGlvbmFyeSkobiYmbi5mYWN0b3J5Q2FjaGU/bi5mYWN0b3J5Q2Fj
aGU6bnVsbCksdGhpcy5mYWN0b3J5TWFuYWdlckNhY2hlPSgwLHQuZGljdGlvbmFyeSkobiYmbi5m
YWN0b3J5TWFuYWdlckNhY2hlP24uZmFjdG9yeU1hbmFnZXJDYWNoZTpudWxsKSx0aGlzLnZhbGlk
YXRpb25DYWNoZT0oMCx0LmRpY3Rpb25hcnkpKG4mJm4udmFsaWRhdGlvbkNhY2hlP24udmFsaWRh
dGlvbkNhY2hlOm51bGwpLHRoaXMuX2Zha2VDb250YWluZXJUb0luamVjdD14KHRoaXMpLHRoaXNb
a109dm9pZCAwLHRoaXMuaXNEZXN0cm95ZWQ9ITF9ZnVuY3Rpb24gbyhlLHQpe3JldHVybiExIT09
ZS5yZWdpc3RyeS5nZXRPcHRpb24odCwic2luZ2xldG9uIil9ZnVuY3Rpb24gcyhlLHQpe3JldHVy
biExIT09ZS5yZWdpc3RyeS5nZXRPcHRpb24odCwiaW5zdGFudGlhdGUiKX1mdW5jdGlvbiBhKGUs
dCl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1l
bnRzWzJdOnt9CitpZighbi5zb3VyY2V8fCh0PWUucmVnaXN0cnkuZXhwYW5kTG9jYWxMb29rdXAo
dCxuKSkpcmV0dXJuIHZvaWQgMCE9PWUuY2FjaGVbdF0mJiExIT09bi5zaW5nbGV0b24/ZS5jYWNo
ZVt0XTpmKGUsdCxuKX1mdW5jdGlvbiB1KGUsdCxuKXt2YXIgcj1uLmluc3RhbnRpYXRlCityZXR1
cm4hMSE9PW4uc2luZ2xldG9uJiZvKGUsdCkmJiFyJiYhcyhlLHQpfWZ1bmN0aW9uIGwoZSx0LG4p
e3ZhciByPW4uaW5zdGFudGlhdGUKK3JldHVybiExIT09bi5zaW5nbGV0b24mJm8oZSx0KSYmITEh
PT1yJiZzKGUsdCl9ZnVuY3Rpb24gYyhlLHQsbil7dmFyIHI9bi5pbnN0YW50aWF0ZQorcmV0dXJu
ISghMSE9PW4uc2luZ2xldG9uJiZvKGUsdCl8fCExIT09cnx8cyhlLHQpKX1mdW5jdGlvbiBwKGUs
dCxuKXt2YXIgcj1uLmluc3RhbnRpYXRlCityZXR1cm4oITEhPT1uLnNpbmdsZXRvbnx8byhlLHQp
KSYmITEhPT1yJiZzKGUsdCl9ZnVuY3Rpb24gZihlLHQsbil7dmFyIHI9ZS5mYWN0b3J5Rm9yKHQp
CitpZih2b2lkIDAhPT1yKXtpZihsKGUsdCxuKSlyZXR1cm4gZS5jYWNoZVt0XT1yLmNyZWF0ZSgp
CitpZihwKGUsdCxuKSlyZXR1cm4gci5jcmVhdGUoKQoraWYodShlLHQsbil8fGMoZSx0LG4pKXJl
dHVybiByLmNsYXNzCit0aHJvdyBuZXcgRXJyb3IoIkNvdWxkIG5vdCBjcmVhdGUgZmFjdG9yeSIp
fX1mdW5jdGlvbiBoKGUpe2UuX2R5bmFtaWM9ITB9ZnVuY3Rpb24gZChlKXtyZXR1cm4hIWUuX2R5
bmFtaWN9ZnVuY3Rpb24gbSgpe3ZhciBlLHQsbixyLGkscyx1PXt9CitpZihhcmd1bWVudHMubGVu
Z3RoPjEpe2ZvcihlPWFyZ3VtZW50c1swXSx0PVtdLG49dm9pZCAwLHI9MTtyPGFyZ3VtZW50cy5s
ZW5ndGg7cisrKWFyZ3VtZW50c1tyXSYmKHQ9dC5jb25jYXQoYXJndW1lbnRzW3JdKSkKK2Zvcihp
PSExLHM9MDtzPHQubGVuZ3RoO3MrKyluPXRbc10sdVtuLnByb3BlcnR5XT1hKGUsbi5mdWxsTmFt
ZSksaXx8KGk9IW8oZSxuLmZ1bGxOYW1lKSkKK2kmJmgodSl9cmV0dXJuIHV9ZnVuY3Rpb24gZyhl
LG4pe3ZhciBpLG8scyxhLHU9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNb
Ml0/YXJndW1lbnRzWzJdOnt9LGw9ZS5yZWdpc3RyeQoraWYoIXUuc291cmNlfHwobj1sLmV4cGFu
ZExvY2FsTG9va3VwKG4sdSkpKXt2YXIgYz1lLmZhY3RvcnlDYWNoZQoraWYoY1tuXSlyZXR1cm4g
Y1tuXQordmFyIHA9bC5yZXNvbHZlKG4pCitpZih2b2lkIDAhPT1wKXt2YXIgZj1uLnNwbGl0KCI6
IilbMF0KK3JldHVybiFwfHwiZnVuY3Rpb24iIT10eXBlb2YgcC5leHRlbmR8fCFyLkVOVi5NT0RF
TF9GQUNUT1JZX0lOSkVDVElPTlMmJiJtb2RlbCI9PT1mPyhwJiYiZnVuY3Rpb24iPT10eXBlb2Yg
cC5fb25Mb29rdXAmJnAuX29uTG9va3VwKG4pLGNbbl09cCxwKTooaT15KGUsbiksbz12KGUsbiks
cz0hZChpKSYmIWQobyksb1t0Lk5BTUVfS0VZXT1sLm1ha2VUb1N0cmluZyhwLG4pLGkuX2RlYnVn
Q29udGFpbmVyS2V5PW4sKDAsdC5zZXRPd25lcikoaSxlLm93bmVyKSxhPXAuZXh0ZW5kKGkpLGIo
YS5wcm90b3R5cGUpLGEucmVvcGVuQ2xhc3MobykscCYmImZ1bmN0aW9uIj09dHlwZW9mIHAuX29u
TG9va3VwJiZwLl9vbkxvb2t1cChuKSxzJiYoY1tuXT1hKSxhKX19fWZ1bmN0aW9uIHkoZSx0KXt2
YXIgbj1lLnJlZ2lzdHJ5LHI9dC5zcGxpdCgiOiIpLGk9clswXQorcmV0dXJuIG0oZSxuLmdldFR5
cGVJbmplY3Rpb25zKGkpLG4uZ2V0SW5qZWN0aW9ucyh0KSl9ZnVuY3Rpb24gdihlLHQpe3ZhciBu
PWUucmVnaXN0cnkscj10LnNwbGl0KCI6IiksaT1yWzBdLG89bShlLG4uZ2V0RmFjdG9yeVR5cGVJ
bmplY3Rpb25zKGkpLG4uZ2V0RmFjdG9yeUluamVjdGlvbnModCkpCityZXR1cm4gby5fZGVidWdD
b250YWluZXJLZXk9dCxvfWZ1bmN0aW9uIGIoZSl7ImNvbnRhaW5lciJpbiBlfHxPYmplY3QuZGVm
aW5lUHJvcGVydHkoZSwiY29udGFpbmVyIixOKX1mdW5jdGlvbiBfKGUpe3ZhciB0LG4scixpPWUu
Y2FjaGUsbz1PYmplY3Qua2V5cyhpKQorZm9yKHQ9MDt0PG8ubGVuZ3RoO3QrKyluPW9bdF0scj1p
W25dLHMoZSxuKSYmci5kZXN0cm95JiZyLmRlc3Ryb3koKX1mdW5jdGlvbiB3KGUpe18oZSksZS5j
YWNoZS5kaWN0PSgwLHQuZGljdGlvbmFyeSkobnVsbCl9ZnVuY3Rpb24gRShlLHQpe3ZhciBuPWUu
Y2FjaGVbdF0KK2RlbGV0ZSBlLmZhY3RvcnlDYWNoZVt0XSxuJiYoZGVsZXRlIGUuY2FjaGVbdF0s
bi5kZXN0cm95JiZuLmRlc3Ryb3koKSl9ZnVuY3Rpb24geChlKXt2YXIgdD17fSxuPXtsb29rdXA6
Imxvb2t1cCIsbG9va3VwRmFjdG9yeToiX2xvb2t1cEZhY3RvcnkifQorZm9yKHZhciByIGluIG4p
dFtyXT1DKGUscixuW3JdKQorcmV0dXJuIHR9ZnVuY3Rpb24gQyhlLHQsbil7cmV0dXJuIGZ1bmN0
aW9uKCl7cmV0dXJuIGVbdF0uYXBwbHkoZSxhcmd1bWVudHMpfX1mdW5jdGlvbiBPKGUpe3RoaXMu
ZmFsbGJhY2s9ZSYmZS5mYWxsYmFjaz9lLmZhbGxiYWNrOm51bGwsZSYmZS5yZXNvbHZlciYmKHRo
aXMucmVzb2x2ZXI9ZS5yZXNvbHZlciwiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5yZXNvbHZlciYm
QSh0aGlzKSksdGhpcy5yZWdpc3RyYXRpb25zPSgwLHQuZGljdGlvbmFyeSkoZSYmZS5yZWdpc3Ry
YXRpb25zP2UucmVnaXN0cmF0aW9uczpudWxsKSx0aGlzLl90eXBlSW5qZWN0aW9ucz0oMCx0LmRp
Y3Rpb25hcnkpKG51bGwpLHRoaXMuX2luamVjdGlvbnM9KDAsdC5kaWN0aW9uYXJ5KShudWxsKSx0
aGlzLl9mYWN0b3J5VHlwZUluamVjdGlvbnM9KDAsdC5kaWN0aW9uYXJ5KShudWxsKSx0aGlzLl9m
YWN0b3J5SW5qZWN0aW9ucz0oMCx0LmRpY3Rpb25hcnkpKG51bGwpLHRoaXMuX2xvY2FsTG9va3Vw
Q2FjaGU9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9ub3JtYWxpemVDYWNoZT0oMCx0LmRpY3Rp
b25hcnkpKG51bGwpLHRoaXMuX3Jlc29sdmVDYWNoZT0oMCx0LmRpY3Rpb25hcnkpKG51bGwpLHRo
aXMuX2ZhaWxDYWNoZT0oMCx0LmRpY3Rpb25hcnkpKG51bGwpLHRoaXMuX29wdGlvbnM9KDAsdC5k
aWN0aW9uYXJ5KShudWxsKSx0aGlzLl90eXBlT3B0aW9ucz0oMCx0LmRpY3Rpb25hcnkpKG51bGwp
fWZ1bmN0aW9uIEEoZSl7ZS5yZXNvbHZlcj17cmVzb2x2ZTplLnJlc29sdmVyfX1mdW5jdGlvbiBU
KGUsdCxuKXt2YXIgcj1lLl9sb2NhbExvb2t1cENhY2hlLGk9clt0XQoraXx8KGk9clt0XT1PYmpl
Y3QuY3JlYXRlKG51bGwpKQordmFyIG89aVtuXQoraWYodm9pZCAwIT09bylyZXR1cm4gbwordmFy
IHM9ZS5yZXNvbHZlci5leHBhbmRMb2NhbExvb2t1cCh0LG4pCityZXR1cm4gaVtuXT1zfWZ1bmN0
aW9uIFMoZSx0LG4pe2lmKCFufHwhbi5zb3VyY2V8fCh0PWUuZXhwYW5kTG9jYWxMb29rdXAodCxu
KSkpe3ZhciByPWUuX3Jlc29sdmVDYWNoZVt0XQoraWYodm9pZCAwIT09cilyZXR1cm4gcgoraWYo
IWUuX2ZhaWxDYWNoZVt0XSl7dmFyIGk9dm9pZCAwCityZXR1cm4gZS5yZXNvbHZlciYmKGk9ZS5y
ZXNvbHZlci5yZXNvbHZlKHQpKSx2b2lkIDA9PT1pJiYoaT1lLnJlZ2lzdHJhdGlvbnNbdF0pLHZv
aWQgMD09PWk/ZS5fZmFpbENhY2hlW3RdPSEwOmUuX3Jlc29sdmVDYWNoZVt0XT1pLGl9fX1mdW5j
dGlvbiBSKGUsdCxuKXtyZXR1cm4gdm9pZCAwIT09ZS5yZXNvbHZlKHQse3NvdXJjZTpufSl9ZS5i
dWlsZEZha2VDb250YWluZXJXaXRoRGVwcmVjYXRpb25zPWUuQ29udGFpbmVyPWUucHJpdmF0aXpl
PWUuUmVnaXN0cnk9dm9pZCAwCit2YXIgaz0oMCx0LnN5bWJvbCkoIkNPTlRBSU5FUl9PVkVSUklE
RSIpCitpLnByb3RvdHlwZT17bG9va3VwOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGEodGhpcyx0aGlz
LnJlZ2lzdHJ5Lm5vcm1hbGl6ZShlKSx0KX0sbG9va3VwRmFjdG9yeTpmdW5jdGlvbihlLHQpe3Jl
dHVybiBnKHRoaXMsdGhpcy5yZWdpc3RyeS5ub3JtYWxpemUoZSksdCl9LGRlc3Ryb3k6ZnVuY3Rp
b24oKXtfKHRoaXMpLHRoaXMuaXNEZXN0cm95ZWQ9ITB9LHJlc2V0OmZ1bmN0aW9uKGUpe2FyZ3Vt
ZW50cy5sZW5ndGg+MD9FKHRoaXMsdGhpcy5yZWdpc3RyeS5ub3JtYWxpemUoZSkpOncodGhpcyl9
LG93bmVySW5qZWN0aW9uOmZ1bmN0aW9uKCl7dmFyIGUKK3JldHVybiBlPXt9LGVbdC5PV05FUl09
dGhpcy5vd25lcixlfSxmYWN0b3J5Rm9yOmZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5n
dGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSxuPXRoaXMucmVnaXN0
cnkubm9ybWFsaXplKGUpCitpZighdC5zb3VyY2V8fChuPXRoaXMucmVnaXN0cnkuZXhwYW5kTG9j
YWxMb29rdXAoZSx0KSkpe3ZhciByPXRoaXMuZmFjdG9yeU1hbmFnZXJDYWNoZVtuXQoraWYocily
ZXR1cm4gcgordmFyIGk9dGhpcy5yZWdpc3RyeS5yZXNvbHZlKG4pCitpZih2b2lkIDAhPT1pKXt2
YXIgbz1uZXcgUCh0aGlzLGksZSxuKQorcmV0dXJuIHRoaXMuZmFjdG9yeU1hbmFnZXJDYWNoZVtu
XT1vLG99fX19Cit2YXIgTj17Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsZ2V0OmZ1bmN0
aW9uKCl7cmV0dXJuIHRoaXNba118fCgwLHQuZ2V0T3duZXIpKHRoaXMpLl9fY29udGFpbmVyX199
LHNldDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpc1trXT1lLGV9fSxQPWZ1bmN0aW9uKCl7ZnVuY3Rp
b24gZShlLHQsbixyKXt0aGlzLmNvbnRhaW5lcj1lLHRoaXMub3duZXI9ZS5vd25lcix0aGlzLmNs
YXNzPXQsdGhpcy5mdWxsTmFtZT1uLHRoaXMubm9ybWFsaXplZE5hbWU9cix0aGlzLm1hZGVUb1N0
cmluZz12b2lkIDAsdGhpcy5pbmplY3Rpb25zPXZvaWQgMH1yZXR1cm4gZS5wcm90b3R5cGUudG9T
dHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYWRlVG9TdHJpbmd8fCh0aGlzLm1hZGVUb1N0
cmluZz10aGlzLmNvbnRhaW5lci5yZWdpc3RyeS5tYWtlVG9TdHJpbmcodGhpcy5jbGFzcyx0aGlz
LmZ1bGxOYW1lKSksdGhpcy5tYWRlVG9TdHJpbmd9LGUucHJvdG90eXBlLmNyZWF0ZT1mdW5jdGlv
bigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3Vt
ZW50c1swXTp7fSxuPXRoaXMuaW5qZWN0aW9ucwordm9pZCAwPT09biYmKG49eSh0aGlzLmNvbnRh
aW5lcix0aGlzLm5vcm1hbGl6ZWROYW1lKSwhMT09PWQobikmJih0aGlzLmluamVjdGlvbnM9bikp
Cit2YXIgcj0oMCx0LmFzc2lnbikoe30sbixlKQoraWYoIXRoaXMuY2xhc3MuY3JlYXRlKXRocm93
IG5ldyBFcnJvcigiRmFpbGVkIHRvIGNyZWF0ZSBhbiBpbnN0YW5jZSBvZiAnIit0aGlzLm5vcm1h
bGl6ZWROYW1lKyInLiBNb3N0IGxpa2VseSBhbiBpbXByb3Blcmx5IGRlZmluZWQgY2xhc3Mgb3Ig
YW4gaW52YWxpZCBtb2R1bGUgZXhwb3J0LiIpCit2YXIgaT10aGlzLmNsYXNzLnByb3RvdHlwZQor
cmV0dXJuIGkmJmIoaSx0aGlzLmNvbnRhaW5lciksImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuY2xh
c3MuX2luaXRGYWN0b3J5P3RoaXMuY2xhc3MuX2luaXRGYWN0b3J5KHRoaXMpOigwLHQuc2V0T3du
ZXIpKHIsdGhpcy5vd25lciksdGhpcy5jbGFzcy5jcmVhdGUocil9LGV9KCksaj0vXlteOl0rOlte
Ol0rJC8KK08ucHJvdG90eXBlPXtmYWxsYmFjazpudWxsLHJlc29sdmVyOm51bGwscmVnaXN0cmF0
aW9uczpudWxsLF90eXBlSW5qZWN0aW9uczpudWxsLF9pbmplY3Rpb25zOm51bGwsX2ZhY3RvcnlU
eXBlSW5qZWN0aW9uczpudWxsLF9mYWN0b3J5SW5qZWN0aW9uczpudWxsLF9ub3JtYWxpemVDYWNo
ZTpudWxsLF9yZXNvbHZlQ2FjaGU6bnVsbCxfb3B0aW9uczpudWxsLF90eXBlT3B0aW9uczpudWxs
LGNvbnRhaW5lcjpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGkodGhpcyxlKX0scmVnaXN0ZXI6ZnVu
Y3Rpb24oZSx0KXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1sy
XT9hcmd1bWVudHNbMl06e30KK2lmKHZvaWQgMD09PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXR0
ZW1wdGluZyB0byByZWdpc3RlciBhbiB1bmtub3duIGZhY3Rvcnk6ICciK2UrIiciKQordmFyIHI9
dGhpcy5ub3JtYWxpemUoZSkKK2lmKHRoaXMuX3Jlc29sdmVDYWNoZVtyXSl0aHJvdyBuZXcgRXJy
b3IoIkNhbm5vdCByZS1yZWdpc3RlcjogJyIrZSsiJywgYXMgaXQgaGFzIGFscmVhZHkgYmVlbiBy
ZXNvbHZlZC4iKQorZGVsZXRlIHRoaXMuX2ZhaWxDYWNoZVtyXSx0aGlzLnJlZ2lzdHJhdGlvbnNb
cl09dCx0aGlzLl9vcHRpb25zW3JdPW59LHVucmVnaXN0ZXI6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhp
cy5ub3JtYWxpemUoZSkKK3RoaXMuX2xvY2FsTG9va3VwQ2FjaGU9T2JqZWN0LmNyZWF0ZShudWxs
KSxkZWxldGUgdGhpcy5yZWdpc3RyYXRpb25zW3RdLGRlbGV0ZSB0aGlzLl9yZXNvbHZlQ2FjaGVb
dF0sZGVsZXRlIHRoaXMuX2ZhaWxDYWNoZVt0XSxkZWxldGUgdGhpcy5fb3B0aW9uc1t0XX0scmVz
b2x2ZTpmdW5jdGlvbihlLHQpe3ZhciBuLHI9Uyh0aGlzLHRoaXMubm9ybWFsaXplKGUpLHQpCity
ZXR1cm4gdm9pZCAwPT09ciYmdGhpcy5mYWxsYmFjayYmKHI9KG49dGhpcy5mYWxsYmFjaykucmVz
b2x2ZS5hcHBseShuLGFyZ3VtZW50cykpLHJ9LGRlc2NyaWJlOmZ1bmN0aW9uKGUpe3JldHVybiB0
aGlzLnJlc29sdmVyJiZ0aGlzLnJlc29sdmVyLmxvb2t1cERlc2NyaXB0aW9uP3RoaXMucmVzb2x2
ZXIubG9va3VwRGVzY3JpcHRpb24oZSk6dGhpcy5mYWxsYmFjaz90aGlzLmZhbGxiYWNrLmRlc2Ny
aWJlKGUpOmV9LG5vcm1hbGl6ZUZ1bGxOYW1lOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnJlc29s
dmVyJiZ0aGlzLnJlc29sdmVyLm5vcm1hbGl6ZT90aGlzLnJlc29sdmVyLm5vcm1hbGl6ZShlKTp0
aGlzLmZhbGxiYWNrP3RoaXMuZmFsbGJhY2subm9ybWFsaXplRnVsbE5hbWUoZSk6ZX0sbm9ybWFs
aXplOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9ub3JtYWxpemVDYWNoZVtlXXx8KHRoaXMuX25v
cm1hbGl6ZUNhY2hlW2VdPXRoaXMubm9ybWFsaXplRnVsbE5hbWUoZSkpfSxtYWtlVG9TdHJpbmc6
ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5yZXNvbHZlciYmdGhpcy5yZXNvbHZlci5tYWtlVG9T
dHJpbmc/dGhpcy5yZXNvbHZlci5tYWtlVG9TdHJpbmcoZSx0KTp0aGlzLmZhbGxiYWNrP3RoaXMu
ZmFsbGJhY2subWFrZVRvU3RyaW5nKGUsdCk6ZS50b1N0cmluZygpfSxoYXM6ZnVuY3Rpb24oZSx0
KXtpZighdGhpcy5pc1ZhbGlkRnVsbE5hbWUoZSkpcmV0dXJuITEKK3ZhciBuPXQmJnQuc291cmNl
JiZ0aGlzLm5vcm1hbGl6ZSh0LnNvdXJjZSkKK3JldHVybiBSKHRoaXMsdGhpcy5ub3JtYWxpemUo
ZSksbil9LG9wdGlvbnNGb3JUeXBlOmZ1bmN0aW9uKGUsdCl7dGhpcy5fdHlwZU9wdGlvbnNbZV09
dH0sZ2V0T3B0aW9uc0ZvclR5cGU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fdHlwZU9wdGlvbnNb
ZV0KK3JldHVybiB2b2lkIDA9PT10JiZ0aGlzLmZhbGxiYWNrJiYodD10aGlzLmZhbGxiYWNrLmdl
dE9wdGlvbnNGb3JUeXBlKGUpKSx0fSxvcHRpb25zOmZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50
cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSxuPXRoaXMu
bm9ybWFsaXplKGUpCit0aGlzLl9vcHRpb25zW25dPXR9LGdldE9wdGlvbnM6ZnVuY3Rpb24oZSl7
dmFyIHQ9dGhpcy5ub3JtYWxpemUoZSksbj10aGlzLl9vcHRpb25zW3RdCityZXR1cm4gdm9pZCAw
PT09biYmdGhpcy5mYWxsYmFjayYmKG49dGhpcy5mYWxsYmFjay5nZXRPcHRpb25zKGUpKSxufSxn
ZXRPcHRpb246ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl9vcHRpb25zW2VdCitpZihuJiZ2b2lk
IDAhPT1uW3RdKXJldHVybiBuW3RdCit2YXIgcj1lLnNwbGl0KCI6IilbMF0KK3JldHVybiBuPXRo
aXMuX3R5cGVPcHRpb25zW3JdLG4mJnZvaWQgMCE9PW5bdF0/blt0XTp0aGlzLmZhbGxiYWNrP3Ro
aXMuZmFsbGJhY2suZ2V0T3B0aW9uKGUsdCk6dm9pZCAwfSx0eXBlSW5qZWN0aW9uOmZ1bmN0aW9u
KGUsdCxuKXtpZihuLnNwbGl0KCI6IilbMF09PT1lKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGlu
amVjdCBhICciK24rIicgb24gb3RoZXIgIitlKyIocykuIik7KHRoaXMuX3R5cGVJbmplY3Rpb25z
W2VdfHwodGhpcy5fdHlwZUluamVjdGlvbnNbZV09W10pKS5wdXNoKHtwcm9wZXJ0eTp0LGZ1bGxO
YW1lOm59KX0saW5qZWN0aW9uOmZ1bmN0aW9uKGUsdCxuKXt0aGlzLnZhbGlkYXRlRnVsbE5hbWUo
bikKK3ZhciByPXRoaXMubm9ybWFsaXplKG4pCitpZigtMT09PWUuaW5kZXhPZigiOiIpKXJldHVy
biB0aGlzLnR5cGVJbmplY3Rpb24oZSx0LHIpCit2YXIgaT10aGlzLm5vcm1hbGl6ZShlKTsodGhp
cy5faW5qZWN0aW9uc1tpXXx8KHRoaXMuX2luamVjdGlvbnNbaV09W10pKS5wdXNoKHtwcm9wZXJ0
eTp0LGZ1bGxOYW1lOnJ9KX0sZmFjdG9yeVR5cGVJbmplY3Rpb246ZnVuY3Rpb24oZSx0LG4peyh0
aGlzLl9mYWN0b3J5VHlwZUluamVjdGlvbnNbZV18fCh0aGlzLl9mYWN0b3J5VHlwZUluamVjdGlv
bnNbZV09W10pKS5wdXNoKHtwcm9wZXJ0eTp0LGZ1bGxOYW1lOnRoaXMubm9ybWFsaXplKG4pfSl9
LGZhY3RvcnlJbmplY3Rpb246ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMubm9ybWFsaXplKGUp
LGk9dGhpcy5ub3JtYWxpemUobikKK2lmKHRoaXMudmFsaWRhdGVGdWxsTmFtZShuKSwtMT09PWUu
aW5kZXhPZigiOiIpKXJldHVybiB0aGlzLmZhY3RvcnlUeXBlSW5qZWN0aW9uKHIsdCxpKTsodGhp
cy5fZmFjdG9yeUluamVjdGlvbnNbcl18fCh0aGlzLl9mYWN0b3J5SW5qZWN0aW9uc1tyXT1bXSkp
LnB1c2goe3Byb3BlcnR5OnQsZnVsbE5hbWU6aX0pfSxrbm93bkZvclR5cGU6ZnVuY3Rpb24oZSl7
dmFyIG4scixpPXZvaWQgMCxvPXZvaWQgMCxzPSgwLHQuZGljdGlvbmFyeSkobnVsbCksYT1PYmpl
Y3Qua2V5cyh0aGlzLnJlZ2lzdHJhdGlvbnMpCitmb3Iobj0wO248YS5sZW5ndGg7bisrKXI9YVtu
XSxyLnNwbGl0KCI6IilbMF09PT1lJiYoc1tyXT0hMCkKK3JldHVybiB0aGlzLmZhbGxiYWNrJiYo
aT10aGlzLmZhbGxiYWNrLmtub3duRm9yVHlwZShlKSksdGhpcy5yZXNvbHZlciYmdGhpcy5yZXNv
bHZlci5rbm93bkZvclR5cGUmJihvPXRoaXMucmVzb2x2ZXIua25vd25Gb3JUeXBlKGUpKSwoMCx0
LmFzc2lnbikoe30saSxzLG8pfSx2YWxpZGF0ZUZ1bGxOYW1lOmZ1bmN0aW9uKGUpe2lmKCF0aGlz
LmlzVmFsaWRGdWxsTmFtZShlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIEZ1bGxuYW1l
LCBleHBlY3RlZDogJ3R5cGU6bmFtZScgZ290OiAiK2UpCityZXR1cm4hMH0saXNWYWxpZEZ1bGxO
YW1lOmZ1bmN0aW9uKGUpe3JldHVybiEhai50ZXN0KGUpfSx2YWxpZGF0ZUluamVjdGlvbnM6ZnVu
Y3Rpb24oZSl7aWYoZSl7dmFyIHQKK2Zvcih0PTA7dDxlLmxlbmd0aDt0KyspZVt0XS5mdWxsTmFt
ZX19LG5vcm1hbGl6ZUluamVjdGlvbnNIYXNoOmZ1bmN0aW9uKGUpe3ZhciB0PVtdCitmb3IodmFy
IG4gaW4gZSllLmhhc093blByb3BlcnR5KG4pJiZ0LnB1c2goe3Byb3BlcnR5Om4sZnVsbE5hbWU6
ZVtuXX0pCityZXR1cm4gdH0sZ2V0SW5qZWN0aW9uczpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9p
bmplY3Rpb25zW2VdfHxbXQorcmV0dXJuIHRoaXMuZmFsbGJhY2smJih0PXQuY29uY2F0KHRoaXMu
ZmFsbGJhY2suZ2V0SW5qZWN0aW9ucyhlKSkpLHR9LGdldFR5cGVJbmplY3Rpb25zOmZ1bmN0aW9u
KGUpe3ZhciB0PXRoaXMuX3R5cGVJbmplY3Rpb25zW2VdfHxbXQorcmV0dXJuIHRoaXMuZmFsbGJh
Y2smJih0PXQuY29uY2F0KHRoaXMuZmFsbGJhY2suZ2V0VHlwZUluamVjdGlvbnMoZSkpKSx0fSxn
ZXRGYWN0b3J5SW5qZWN0aW9uczpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9mYWN0b3J5SW5qZWN0
aW9uc1tlXXx8W10KK3JldHVybiB0aGlzLmZhbGxiYWNrJiYodD10LmNvbmNhdCh0aGlzLmZhbGxi
YWNrLmdldEZhY3RvcnlJbmplY3Rpb25zKGUpKSksdH0sZ2V0RmFjdG9yeVR5cGVJbmplY3Rpb25z
OmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2ZhY3RvcnlUeXBlSW5qZWN0aW9uc1tlXXx8W10KK3Jl
dHVybiB0aGlzLmZhbGxiYWNrJiYodD10LmNvbmNhdCh0aGlzLmZhbGxiYWNrLmdldEZhY3RvcnlU
eXBlSW5qZWN0aW9ucyhlKSkpLHR9fSxPLnByb3RvdHlwZS5leHBhbmRMb2NhbExvb2t1cD1mdW5j
dGlvbihlLHQpe3ZhciBuLHIKK3JldHVybiB0aGlzLnJlc29sdmVyJiZ0aGlzLnJlc29sdmVyLmV4
cGFuZExvY2FsTG9va3VwPyhuPXRoaXMubm9ybWFsaXplKGUpLHI9dGhpcy5ub3JtYWxpemUodC5z
b3VyY2UpLFQodGhpcyxuLHIpKTp0aGlzLmZhbGxiYWNrP3RoaXMuZmFsbGJhY2suZXhwYW5kTG9j
YWxMb29rdXAoZSx0KTpudWxsfQordmFyIEQ9KDAsdC5kaWN0aW9uYXJ5KShudWxsKSxMPSIiK01h
dGgucmFuZG9tKCkrRGF0ZS5ub3coKQorZS5SZWdpc3RyeT1PLGUucHJpdmF0aXplPWZ1bmN0aW9u
KGUpe3ZhciBuPWVbMF0scj1EW25dCitpZihyKXJldHVybiByCit2YXIgaT1uLnNwbGl0KCI6Iiks
bz1pWzBdLHM9aVsxXQorcmV0dXJuIERbbl09KDAsdC5pbnRlcm4pKG8rIjoiK3MrIi0iK0wpfSxl
LkNvbnRhaW5lcj1pLGUuYnVpbGRGYWtlQ29udGFpbmVyV2l0aERlcHJlY2F0aW9ucz14fSksZSgi
ZGFnLW1hcCIsWyJleHBvcnRzIl0sZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiCit2YXIgdD1mdW5j
dGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLl92ZXJ0aWNlcz1uZXcgbn1yZXR1cm4gZS5wcm90b3R5
cGUuYWRkPWZ1bmN0aW9uKGUsdCxuLHIpe2lmKCFlKXRocm93IG5ldyBFcnJvcigiYXJndW1lbnQg
YGtleWAgaXMgcmVxdWlyZWQiKQordmFyIGksbz10aGlzLl92ZXJ0aWNlcyxzPW8uYWRkKGUpCitp
ZihzLnZhbD10LG4paWYoInN0cmluZyI9PXR5cGVvZiBuKW8uYWRkRWRnZShzLG8uYWRkKG4pKQor
ZWxzZSBmb3IodmFyIGk9MDtpPG4ubGVuZ3RoO2krKylvLmFkZEVkZ2UocyxvLmFkZChuW2ldKSkK
K2lmKHIpaWYoInN0cmluZyI9PXR5cGVvZiByKW8uYWRkRWRnZShvLmFkZChyKSxzKQorZWxzZSBm
b3IoaT0wO2k8ci5sZW5ndGg7aSsrKW8uYWRkRWRnZShvLmFkZChyW2ldKSxzKX0sZS5wcm90b3R5
cGUuYWRkRWRnZXM9ZnVuY3Rpb24oZSx0LG4scil7dGhpcy5hZGQoZSx0LG4scil9LGUucHJvdG90
eXBlLmVhY2g9ZnVuY3Rpb24oZSl7dGhpcy5fdmVydGljZXMud2FsayhlKX0sZS5wcm90b3R5cGUu
dG9wc29ydD1mdW5jdGlvbihlKXt0aGlzLmVhY2goZSl9LGV9KCkKK2UuZGVmYXVsdD10Cit2YXIg
bj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLmxlbmd0aD0wLHRoaXMuc3RhY2s9bmV3IHIs
dGhpcy5wYXRoPW5ldyByLHRoaXMucmVzdWx0PW5ldyByfXJldHVybiBlLnByb3RvdHlwZS5hZGQ9
ZnVuY3Rpb24oZSl7aWYoIWUpdGhyb3cgbmV3IEVycm9yKCJtaXNzaW5nIGtleSIpCit2YXIgdCxu
LHI9MHx0aGlzLmxlbmd0aAorZm9yKHQ9MDt0PHI7dCsrKWlmKG49dGhpc1t0XSxuLmtleT09PWUp
cmV0dXJuIG4KK3JldHVybiB0aGlzLmxlbmd0aD1yKzEsdGhpc1tyXT17aWR4OnIsa2V5OmUsdmFs
OnZvaWQgMCxvdXQ6ITEsZmxhZzohMSxsZW5ndGg6MH19LGUucHJvdG90eXBlLmFkZEVkZ2U9ZnVu
Y3Rpb24oZSx0KXt0aGlzLmNoZWNrKGUsdC5rZXkpCit2YXIgbixyPTB8dC5sZW5ndGgKK2Zvcihu
PTA7bjxyO24rKylpZih0W25dPT09ZS5pZHgpcmV0dXJuCit0Lmxlbmd0aD1yKzEsdFtyXT1lLmlk
eCxlLm91dD0hMH0sZS5wcm90b3R5cGUud2Fsaz1mdW5jdGlvbihlKXt2YXIgdCxuCitmb3IodGhp
cy5yZXNldCgpLHQ9MDt0PHRoaXMubGVuZ3RoO3QrKyluPXRoaXNbdF0sbi5vdXR8fHRoaXMudmlz
aXQobiwiIikKK3RoaXMuZWFjaCh0aGlzLnJlc3VsdCxlKX0sZS5wcm90b3R5cGUuY2hlY2s9ZnVu
Y3Rpb24oZSx0KXt2YXIgbixyCitpZihlLmtleT09PXQpdGhyb3cgbmV3IEVycm9yKCJjeWNsZSBk
ZXRlY3RlZDogIit0KyIgPC0gIit0KQoraWYoMCE9PWUubGVuZ3RoKXtmb3Iobj0wO248ZS5sZW5n
dGg7bisrKWlmKHRoaXNbZVtuXV0ua2V5PT09dCl0aHJvdyBuZXcgRXJyb3IoImN5Y2xlIGRldGVj
dGVkOiAiK3QrIiA8LSAiK2Uua2V5KyIgPC0gIit0KQoraWYodGhpcy5yZXNldCgpLHRoaXMudmlz
aXQoZSx0KSx0aGlzLnBhdGgubGVuZ3RoPjApdGhyb3cgcj0iY3ljbGUgZGV0ZWN0ZWQ6ICIrdCx0
aGlzLmVhY2godGhpcy5wYXRoLGZ1bmN0aW9uKGUpe3IrPSIgPC0gIitlfSksbmV3IEVycm9yKHIp
fX0sZS5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt2YXIgZSx0Citmb3IodGhpcy5zdGFjay5s
ZW5ndGg9MCx0aGlzLnBhdGgubGVuZ3RoPTAsdGhpcy5yZXN1bHQubGVuZ3RoPTAsZT0wLHQ9dGhp
cy5sZW5ndGg7ZTx0O2UrKyl0aGlzW2VdLmZsYWc9ITF9LGUucHJvdG90eXBlLnZpc2l0PWZ1bmN0
aW9uKGUsdCl7dmFyIG4scixpPXRoaXMsbz1pLnN0YWNrLHM9aS5wYXRoLGE9aS5yZXN1bHQKK2Zv
cihvLnB1c2goZS5pZHgpO28ubGVuZ3RoOylpZigobj0wfG8ucG9wKCkpPj0wKXtpZihyPXRoaXNb
bl0sci5mbGFnKWNvbnRpbnVlCitpZihyLmZsYWc9ITAscy5wdXNoKG4pLHQ9PT1yLmtleSlicmVh
aworby5wdXNoKH5uKSx0aGlzLnB1c2hJbmNvbWluZyhyKX1lbHNlIHMucG9wKCksYS5wdXNoKH5u
KX0sZS5wcm90b3R5cGUucHVzaEluY29taW5nPWZ1bmN0aW9uKGUpe3ZhciB0LG4scj10aGlzLnN0
YWNrCitmb3IodD1lLmxlbmd0aC0xO3Q+PTA7dC0tKW49ZVt0XSx0aGlzW25dLmZsYWd8fHIucHVz
aChuKX0sZS5wcm90b3R5cGUuZWFjaD1mdW5jdGlvbihlLHQpe3ZhciBuLHIsaQorZm9yKG49MCxy
PWUubGVuZ3RoO248cjtuKyspaT10aGlzW2Vbbl1dLHQoaS5rZXksaS52YWwpfSxlfSgpLHI9ZnVu
Y3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5sZW5ndGg9MH1yZXR1cm4gZS5wcm90b3R5cGUucHVz
aD1mdW5jdGlvbihlKXt0aGlzW3RoaXMubGVuZ3RoKytdPTB8ZX0sZS5wcm90b3R5cGUucG9wPWZ1
bmN0aW9uKCl7cmV0dXJuIDB8dGhpc1stLXRoaXMubGVuZ3RoXX0sZX0oKX0pLGUoImVtYmVyLWFw
cGxpY2F0aW9uL2luZGV4IixbImV4cG9ydHMiLCJlbWJlci1hcHBsaWNhdGlvbi9zeXN0ZW0vYXBw
bGljYXRpb24iLCJlbWJlci1hcHBsaWNhdGlvbi9zeXN0ZW0vYXBwbGljYXRpb24taW5zdGFuY2Ui
LCJlbWJlci1hcHBsaWNhdGlvbi9zeXN0ZW0vcmVzb2x2ZXIiLCJlbWJlci1hcHBsaWNhdGlvbi9z
eXN0ZW0vZW5naW5lIiwiZW1iZXItYXBwbGljYXRpb24vc3lzdGVtL2VuZ2luZS1pbnN0YW5jZSIs
ImVtYmVyLWFwcGxpY2F0aW9uL3N5c3RlbS9lbmdpbmUtcGFyZW50IiwiZW1iZXItYXBwbGljYXRp
b24vaW5pdGlhbGl6ZXJzL2RvbS10ZW1wbGF0ZXMiXSxmdW5jdGlvbihlLHQsbixyLGksbyxzKXsi
dXNlIHN0cmljdCIKK2Uuc2V0RW5naW5lUGFyZW50PWUuZ2V0RW5naW5lUGFyZW50PWUuRW5naW5l
SW5zdGFuY2U9ZS5FbmdpbmU9ZS5SZXNvbHZlcj1lLkFwcGxpY2F0aW9uSW5zdGFuY2U9ZS5BcHBs
aWNhdGlvbj12b2lkIDAsT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIkFwcGxpY2F0aW9uIix7ZW51
bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdC5kZWZhdWx0fX0pLE9iamVjdC5kZWZp
bmVQcm9wZXJ0eShlLCJBcHBsaWNhdGlvbkluc3RhbmNlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVu
Y3Rpb24oKXtyZXR1cm4gbi5kZWZhdWx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJSZXNv
bHZlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuZGVmYXVsdH19KSxP
YmplY3QuZGVmaW5lUHJvcGVydHkoZSwiRW5naW5lIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rp
b24oKXtyZXR1cm4gaS5kZWZhdWx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJFbmdpbmVJ
bnN0YW5jZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uZGVmYXVsdH19
KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiZ2V0RW5naW5lUGFyZW50Iix7ZW51bWVyYWJsZToh
MCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcy5nZXRFbmdpbmVQYXJlbnR9fSksT2JqZWN0LmRlZmlu
ZVByb3BlcnR5KGUsInNldEVuZ2luZVBhcmVudCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9u
KCl7cmV0dXJuIHMuc2V0RW5naW5lUGFyZW50fX0pfSksZSgiZW1iZXItYXBwbGljYXRpb24vaW5p
dGlhbGl6ZXJzL2RvbS10ZW1wbGF0ZXMiLFsicmVxdWlyZSIsImVtYmVyLWdsaW1tZXIiLCJlbWJl
ci1lbnZpcm9ubWVudCIsImVtYmVyLWFwcGxpY2F0aW9uL3N5c3RlbS9hcHBsaWNhdGlvbiJdLGZ1
bmN0aW9uKGUsdCxuLHIpeyJ1c2Ugc3RyaWN0IgordmFyIGk9ZnVuY3Rpb24oKXt9CityLmRlZmF1
bHQuaW5pdGlhbGl6ZXIoe25hbWU6ImRvbVRlbXBsYXRlcyIsaW5pdGlhbGl6ZTpmdW5jdGlvbigp
e3ZhciByPXZvaWQgMAorbi5lbnZpcm9ubWVudC5oYXNET00mJigwLGUuaGFzKSgiZW1iZXItdGVt
cGxhdGUtY29tcGlsZXIvc3lzdGVtL2Jvb3RzdHJhcCIpJiYoaT0oMCxlLmRlZmF1bHQpKCJlbWJl
ci10ZW1wbGF0ZS1jb21waWxlci9zeXN0ZW0vYm9vdHN0cmFwIikuZGVmYXVsdCxyPWRvY3VtZW50
KSxpKHtjb250ZXh0OnIsaGFzVGVtcGxhdGU6dC5oYXNUZW1wbGF0ZSxzZXRUZW1wbGF0ZTp0LnNl
dFRlbXBsYXRlfSl9fSl9KSxlKCJlbWJlci1hcHBsaWNhdGlvbi9zeXN0ZW0vYXBwbGljYXRpb24t
aW5zdGFuY2UiLFsiZXhwb3J0cyIsImVtYmVyLXV0aWxzIiwiZW1iZXItZGVidWciLCJlbWJlci1t
ZXRhbCIsImVtYmVyLXJ1bnRpbWUiLCJlbWJlci1lbnZpcm9ubWVudCIsImVtYmVyLXZpZXdzIiwi
ZW1iZXItYXBwbGljYXRpb24vc3lzdGVtL2VuZ2luZS1pbnN0YW5jZSJdLGZ1bmN0aW9uKGUsdCxu
LHIsaSxvLHMsYSl7InVzZSBzdHJpY3QiCit2YXIgdT12b2lkIDAsbD1hLmRlZmF1bHQuZXh0ZW5k
KHthcHBsaWNhdGlvbjpudWxsLGN1c3RvbUV2ZW50czpudWxsLHJvb3RFbGVtZW50Om51bGwsaW5p
dDpmdW5jdGlvbigpe3RoaXMuX3N1cGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLnJlZ2lz
dGVyKCItYXBwbGljYXRpb24taW5zdGFuY2U6bWFpbiIsdGhpcyx7aW5zdGFudGlhdGU6ITF9KX0s
X2Jvb3RTeW5jOmZ1bmN0aW9uKGUpe3ZhciB0CityZXR1cm4gdGhpcy5fYm9vdGVkP3RoaXM6KGU9
bmV3IHUoZSksdGhpcy5zZXR1cFJlZ2lzdHJ5KGUpLGUucm9vdEVsZW1lbnQ/dGhpcy5yb290RWxl
bWVudD1lLnJvb3RFbGVtZW50OnRoaXMucm9vdEVsZW1lbnQ9dGhpcy5hcHBsaWNhdGlvbi5yb290
RWxlbWVudCxlLmxvY2F0aW9uJiYodD0oMCxyLmdldCkodGhpcywicm91dGVyIiksKDAsci5zZXQp
KHQsImxvY2F0aW9uIixlLmxvY2F0aW9uKSksdGhpcy5hcHBsaWNhdGlvbi5ydW5JbnN0YW5jZUlu
aXRpYWxpemVycyh0aGlzKSxlLmlzSW50ZXJhY3RpdmUmJnRoaXMuc2V0dXBFdmVudERpc3BhdGNo
ZXIoKSx0aGlzLl9ib290ZWQ9ITAsdGhpcyl9LHNldHVwUmVnaXN0cnk6ZnVuY3Rpb24oZSl7dGhp
cy5jb25zdHJ1Y3Rvci5zZXR1cFJlZ2lzdHJ5KHRoaXMuX19yZWdpc3RyeV9fLGUpfSxyb3V0ZXI6
KDAsci5jb21wdXRlZCkoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sb29rdXAoInJvdXRlcjptYWlu
Iil9KS5yZWFkT25seSgpLGRpZENyZWF0ZVJvb3RWaWV3OmZ1bmN0aW9uKGUpe2UuYXBwZW5kVG8o
dGhpcy5yb290RWxlbWVudCl9LHN0YXJ0Um91dGluZzpmdW5jdGlvbigpeygwLHIuZ2V0KSh0aGlz
LCJyb3V0ZXIiKS5zdGFydFJvdXRpbmcoKSx0aGlzLl9kaWRTZXR1cFJvdXRlcj0hMH0sc2V0dXBS
b3V0ZXI6ZnVuY3Rpb24oKXtpZighdGhpcy5fZGlkU2V0dXBSb3V0ZXIpe3RoaXMuX2RpZFNldHVw
Um91dGVyPSEwOygwLHIuZ2V0KSh0aGlzLCJyb3V0ZXIiKS5zZXR1cFJvdXRlcigpfX0saGFuZGxl
VVJMOmZ1bmN0aW9uKGUpe3ZhciB0PSgwLHIuZ2V0KSh0aGlzLCJyb3V0ZXIiKQorcmV0dXJuIHRo
aXMuc2V0dXBSb3V0ZXIoKSx0LmhhbmRsZVVSTChlKX0sc2V0dXBFdmVudERpc3BhdGNoZXI6ZnVu
Y3Rpb24oKXt2YXIgZT10aGlzLmxvb2t1cCgiZXZlbnRfZGlzcGF0Y2hlcjptYWluIiksbj0oMCxy
LmdldCkodGhpcy5hcHBsaWNhdGlvbiwiY3VzdG9tRXZlbnRzIiksaT0oMCxyLmdldCkodGhpcywi
Y3VzdG9tRXZlbnRzIiksbz0oMCx0LmFzc2lnbikoe30sbixpKQorcmV0dXJuIGUuc2V0dXAobyx0
aGlzLnJvb3RFbGVtZW50KSxlfSxnZXRVUkw6ZnVuY3Rpb24oKXt2YXIgZT0oMCxyLmdldCkodGhp
cywicm91dGVyIikKK3JldHVybigwLHIuZ2V0KShlLCJ1cmwiKX0sdmlzaXQ6ZnVuY3Rpb24oZSl7
dmFyIHQ9dGhpcwordGhpcy5zZXR1cFJvdXRlcigpCit2YXIgbj10aGlzLl9fY29udGFpbmVyX18u
bG9va3VwKCItZW52aXJvbm1lbnQ6bWFpbiIpLG89KDAsci5nZXQpKHRoaXMsInJvdXRlciIpLHM9
ZnVuY3Rpb24oKXtyZXR1cm4gbi5vcHRpb25zLnNob3VsZFJlbmRlcj9uZXcgaS5SU1ZQLlByb21p
c2UoZnVuY3Rpb24oZSl7ci5ydW4uc2NoZWR1bGUoImFmdGVyUmVuZGVyIixudWxsLGUsdCl9KTp0
fSxhPWZ1bmN0aW9uKGUpe2lmKGUuZXJyb3IpdGhyb3cgZS5lcnJvcgoraWYoIlRyYW5zaXRpb25B
Ym9ydGVkIj09PWUubmFtZSYmby5fcm91dGVyTWljcm9saWIuYWN0aXZlVHJhbnNpdGlvbilyZXR1
cm4gby5fcm91dGVyTWljcm9saWIuYWN0aXZlVHJhbnNpdGlvbi50aGVuKHMsYSkKK3Rocm93IlRy
YW5zaXRpb25BYm9ydGVkIj09PWUubmFtZT9uZXcgRXJyb3IoZS5tZXNzYWdlKTplfSx1PSgwLHIu
Z2V0KShvLCJsb2NhdGlvbiIpCityZXR1cm4gdS5zZXRVUkwoZSksby5oYW5kbGVVUkwodS5nZXRV
UkwoKSkudGhlbihzLGEpfX0pCitsLnJlb3BlbkNsYXNzKHtzZXR1cFJlZ2lzdHJ5OmZ1bmN0aW9u
KGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3Vt
ZW50c1sxXTp7fQordC50b0Vudmlyb25tZW50fHwodD1uZXcgdSh0KSksZS5yZWdpc3RlcigiLWVu
dmlyb25tZW50Om1haW4iLHQudG9FbnZpcm9ubWVudCgpLHtpbnN0YW50aWF0ZTohMX0pLGUucmVn
aXN0ZXIoInNlcnZpY2U6LWRvY3VtZW50Iix0LmRvY3VtZW50LHtpbnN0YW50aWF0ZTohMX0pLHRo
aXMuX3N1cGVyKGUsdCl9fSksdT1mdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYm
dm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fQordGhpcy5qUXVlcnk9cy5qUXVl
cnksdGhpcy5pc0ludGVyYWN0aXZlPW8uZW52aXJvbm1lbnQuaGFzRE9NLHZvaWQgMCE9PWUuaXNC
cm93c2VyP3RoaXMuaXNCcm93c2VyPSEhZS5pc0Jyb3dzZXI6dGhpcy5pc0Jyb3dzZXI9by5lbnZp
cm9ubWVudC5oYXNET00sdGhpcy5pc0Jyb3dzZXJ8fCh0aGlzLmpRdWVyeT1udWxsLHRoaXMuaXNJ
bnRlcmFjdGl2ZT0hMSx0aGlzLmxvY2F0aW9uPSJub25lIiksdm9pZCAwIT09ZS5zaG91bGRSZW5k
ZXI/dGhpcy5zaG91bGRSZW5kZXI9ISFlLnNob3VsZFJlbmRlcjp0aGlzLnNob3VsZFJlbmRlcj0h
MCx0aGlzLnNob3VsZFJlbmRlcnx8KHRoaXMualF1ZXJ5PW51bGwsdGhpcy5pc0ludGVyYWN0aXZl
PSExKSxlLmRvY3VtZW50P3RoaXMuZG9jdW1lbnQ9ZS5kb2N1bWVudDp0aGlzLmRvY3VtZW50PSJ1
bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQ/ZG9jdW1lbnQ6bnVsbCxlLnJvb3RFbGVtZW50JiYo
dGhpcy5yb290RWxlbWVudD1lLnJvb3RFbGVtZW50KSx2b2lkIDAhPT1lLmxvY2F0aW9uJiYodGhp
cy5sb2NhdGlvbj1lLmxvY2F0aW9uKSx2b2lkIDAhPT1lLmpRdWVyeSYmKHRoaXMualF1ZXJ5PWUu
alF1ZXJ5KSx2b2lkIDAhPT1lLmlzSW50ZXJhY3RpdmUmJih0aGlzLmlzSW50ZXJhY3RpdmU9ISFl
LmlzSW50ZXJhY3RpdmUpfSx1LnByb3RvdHlwZS50b0Vudmlyb25tZW50PWZ1bmN0aW9uKCl7dmFy
IGU9KDAsdC5hc3NpZ24pKHt9LG8uZW52aXJvbm1lbnQpCityZXR1cm4gZS5oYXNET009dGhpcy5p
c0Jyb3dzZXIsZS5pc0ludGVyYWN0aXZlPXRoaXMuaXNJbnRlcmFjdGl2ZSxlLm9wdGlvbnM9dGhp
cyxlfSxPYmplY3QuZGVmaW5lUHJvcGVydHkobC5wcm90b3R5cGUsImNvbnRhaW5lciIse2NvbmZp
Z3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMKK3JldHVy
bntsb29rdXA6ZnVuY3Rpb24oKXtyZXR1cm4gZS5sb29rdXAuYXBwbHkoZSxhcmd1bWVudHMpfX19
fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwucHJvdG90eXBlLCJyZWdpc3RyeSIse2NvbmZpZ3Vy
YWJsZTohMCxlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybigwLGkuYnVpbGRGYWtl
UmVnaXN0cnlXaXRoRGVwcmVjYXRpb25zKSh0aGlzLCJBcHBsaWNhdGlvbkluc3RhbmNlIil9fSks
ZS5kZWZhdWx0PWx9KSxlKCJlbWJlci1hcHBsaWNhdGlvbi9zeXN0ZW0vYXBwbGljYXRpb24iLFsi
ZXhwb3J0cyIsImVtYmVyLWJhYmVsIiwiZW1iZXItdXRpbHMiLCJlbWJlci1lbnZpcm9ubWVudCIs
ImVtYmVyLWRlYnVnIiwiZW1iZXItbWV0YWwiLCJlbWJlci1ydW50aW1lIiwiZW1iZXItdmlld3Mi
LCJlbWJlci1yb3V0aW5nIiwiZW1iZXItYXBwbGljYXRpb24vc3lzdGVtL2FwcGxpY2F0aW9uLWlu
c3RhbmNlIiwiY29udGFpbmVyIiwiZW1iZXItYXBwbGljYXRpb24vc3lzdGVtL2VuZ2luZSIsImVt
YmVyLWdsaW1tZXIiXSxmdW5jdGlvbihlLHQsbixyLGksbyxzLGEsdSxsLGMscCxmKXsidXNlIHN0
cmljdCIKK2Z1bmN0aW9uIGgoZSl7ZS5yZWdpc3Rlcigicm91dGVyOm1haW4iLHUuUm91dGVyKSxl
LnJlZ2lzdGVyKCItdmlldy1yZWdpc3RyeTptYWluIix7Y3JlYXRlOmZ1bmN0aW9uKCl7cmV0dXJu
KDAsbi5kaWN0aW9uYXJ5KShudWxsKX19KSxlLnJlZ2lzdGVyKCJyb3V0ZTpiYXNpYyIsdS5Sb3V0
ZSksZS5yZWdpc3RlcigiZXZlbnRfZGlzcGF0Y2hlcjptYWluIixhLkV2ZW50RGlzcGF0Y2hlciks
ZS5pbmplY3Rpb24oInJvdXRlcjptYWluIiwibmFtZXNwYWNlIiwiYXBwbGljYXRpb246bWFpbiIp
LGUucmVnaXN0ZXIoImxvY2F0aW9uOmF1dG8iLHUuQXV0b0xvY2F0aW9uKSxlLnJlZ2lzdGVyKCJs
b2NhdGlvbjpoYXNoIix1Lkhhc2hMb2NhdGlvbiksZS5yZWdpc3RlcigibG9jYXRpb246aGlzdG9y
eSIsdS5IaXN0b3J5TG9jYXRpb24pLGUucmVnaXN0ZXIoImxvY2F0aW9uOm5vbmUiLHUuTm9uZUxv
Y2F0aW9uKSxlLnJlZ2lzdGVyKCgwLGMucHJpdmF0aXplKShtKSx1LkJ1Y2tldENhY2hlKX1mdW5j
dGlvbiBkKCl7Z3x8KGc9ITAsci5lbnZpcm9ubWVudC5oYXNET00mJiJmdW5jdGlvbiI9PXR5cGVv
ZiBhLmpRdWVyeSYmby5saWJyYXJpZXMucmVnaXN0ZXJDb3JlTGlicmFyeSgialF1ZXJ5IiwoMCxh
LmpRdWVyeSkoKS5qcXVlcnkpKX12YXIgbT0oMCx0LnRhZ2dlZFRlbXBsYXRlTGl0ZXJhbExvb3Nl
KShbIi1idWNrZXQtY2FjaGU6bWFpbiJdLFsiLWJ1Y2tldC1jYWNoZTptYWluIl0pLGc9ITEseT1w
LmRlZmF1bHQuZXh0ZW5kKHtyb290RWxlbWVudDoiYm9keSIsZXZlbnREaXNwYXRjaGVyOm51bGws
Y3VzdG9tRXZlbnRzOm51bGwsYXV0b2Jvb3Q6ITAsX2dsb2JhbHNNb2RlOiEwLGluaXQ6ZnVuY3Rp
b24oKXt0aGlzLl9zdXBlci5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy4kfHwodGhpcy4kPWEu
alF1ZXJ5KSxkKCksdGhpcy5fcmVhZGluZXNzRGVmZXJyYWxzPTEsdGhpcy5fYm9vdGVkPSExLHRo
aXMuYXV0b2Jvb3Q9dGhpcy5fZ2xvYmFsc01vZGU9ISF0aGlzLmF1dG9ib290LHRoaXMuX2dsb2Jh
bHNNb2RlJiZ0aGlzLl9wcmVwYXJlRm9yR2xvYmFsc01vZGUoKSx0aGlzLmF1dG9ib290JiZ0aGlz
LndhaXRGb3JET01SZWFkeSgpfSxidWlsZEluc3RhbmNlOmZ1bmN0aW9uKCl7dmFyIGU9YXJndW1l
bnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9CityZXR1
cm4gZS5iYXNlPXRoaXMsZS5hcHBsaWNhdGlvbj10aGlzLGwuZGVmYXVsdC5jcmVhdGUoZSl9LF9w
cmVwYXJlRm9yR2xvYmFsc01vZGU6ZnVuY3Rpb24oKXt0aGlzLlJvdXRlcj0odGhpcy5Sb3V0ZXJ8
fHUuUm91dGVyKS5leHRlbmQoKSx0aGlzLl9idWlsZERlcHJlY2F0ZWRJbnN0YW5jZSgpfSxfYnVp
bGREZXByZWNhdGVkSW5zdGFuY2U6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmJ1aWxkSW5zdGFuY2Uo
KQordGhpcy5fX2RlcHJlY2F0ZWRJbnN0YW5jZV9fPWUsdGhpcy5fX2NvbnRhaW5lcl9fPWUuX19j
b250YWluZXJfX30sd2FpdEZvckRPTVJlYWR5OmZ1bmN0aW9uKCl7IXRoaXMuJHx8dGhpcy4kLmlz
UmVhZHk/by5ydW4uc2NoZWR1bGUoImFjdGlvbnMiLHRoaXMsImRvbVJlYWR5Iik6dGhpcy4kKCku
cmVhZHkoby5ydW4uYmluZCh0aGlzLCJkb21SZWFkeSIpKX0sZG9tUmVhZHk6ZnVuY3Rpb24oKXt0
aGlzLmlzRGVzdHJveWVkfHx0aGlzLl9ib290U3luYygpfSxkZWZlclJlYWRpbmVzczpmdW5jdGlv
bigpe3RoaXMuX3JlYWRpbmVzc0RlZmVycmFscysrfSxhZHZhbmNlUmVhZGluZXNzOmZ1bmN0aW9u
KCl7MD09PS0tdGhpcy5fcmVhZGluZXNzRGVmZXJyYWxzJiZvLnJ1bi5vbmNlKHRoaXMsdGhpcy5k
aWRCZWNvbWVSZWFkeSl9LGJvb3Q6ZnVuY3Rpb24oKXtpZih0aGlzLl9ib290UHJvbWlzZSlyZXR1
cm4gdGhpcy5fYm9vdFByb21pc2UKK3RyeXt0aGlzLl9ib290U3luYygpfWNhdGNoKGUpe31yZXR1
cm4gdGhpcy5fYm9vdFByb21pc2V9LF9ib290U3luYzpmdW5jdGlvbigpe2lmKCF0aGlzLl9ib290
ZWQpe3ZhciBlPXRoaXMuX2Jvb3RSZXNvbHZlcj1uZXcgcy5SU1ZQLmRlZmVyCit0aGlzLl9ib290
UHJvbWlzZT1lLnByb21pc2UKK3RyeXt0aGlzLnJ1bkluaXRpYWxpemVycygpLCgwLHMucnVuTG9h
ZEhvb2tzKSgiYXBwbGljYXRpb24iLHRoaXMpLHRoaXMuYWR2YW5jZVJlYWRpbmVzcygpfWNhdGNo
KHQpe3Rocm93IGUucmVqZWN0KHQpLHR9fX0scmVzZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9f
ZGVwcmVjYXRlZEluc3RhbmNlX18KK3RoaXMuX3JlYWRpbmVzc0RlZmVycmFscz0xLHRoaXMuX2Jv
b3RQcm9taXNlPW51bGwsdGhpcy5fYm9vdFJlc29sdmVyPW51bGwsdGhpcy5fYm9vdGVkPSExLG8u
cnVuLmpvaW4odGhpcyxmdW5jdGlvbigpeygwLG8ucnVuKShlLCJkZXN0cm95IiksdGhpcy5fYnVp
bGREZXByZWNhdGVkSW5zdGFuY2UoKSxvLnJ1bi5zY2hlZHVsZSgiYWN0aW9ucyIsdGhpcywiX2Jv
b3RTeW5jIil9KX0sZGlkQmVjb21lUmVhZHk6ZnVuY3Rpb24oKXt2YXIgZQordHJ5eygwLGkuaXNU
ZXN0aW5nKSgpfHwocy5OYW1lc3BhY2UucHJvY2Vzc0FsbCgpLCgwLHMuc2V0TmFtZXNwYWNlU2Vh
cmNoRGlzYWJsZWQpKCEwKSksdGhpcy5hdXRvYm9vdCYmKGU9dm9pZCAwLGU9dGhpcy5fZ2xvYmFs
c01vZGU/dGhpcy5fX2RlcHJlY2F0ZWRJbnN0YW5jZV9fOnRoaXMuYnVpbGRJbnN0YW5jZSgpLGUu
X2Jvb3RTeW5jKCksdGhpcy5yZWFkeSgpLGUuc3RhcnRSb3V0aW5nKCkpLHRoaXMuX2Jvb3RSZXNv
bHZlci5yZXNvbHZlKHRoaXMpLHRoaXMuX2Jvb3RlZD0hMH1jYXRjaChlKXt0aHJvdyB0aGlzLl9i
b290UmVzb2x2ZXIucmVqZWN0KGUpLGV9fSxyZWFkeTpmdW5jdGlvbigpe3JldHVybiB0aGlzfSx3
aWxsRGVzdHJveTpmdW5jdGlvbigpe3RoaXMuX3N1cGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSwo
MCxzLnNldE5hbWVzcGFjZVNlYXJjaERpc2FibGVkKSghMSksdGhpcy5fYm9vdGVkPSExLHRoaXMu
X2Jvb3RQcm9taXNlPW51bGwsdGhpcy5fYm9vdFJlc29sdmVyPW51bGwscy5fbG9hZGVkLmFwcGxp
Y2F0aW9uPT09dGhpcyYmKHMuX2xvYWRlZC5hcHBsaWNhdGlvbj12b2lkIDApLHRoaXMuX2dsb2Jh
bHNNb2RlJiZ0aGlzLl9fZGVwcmVjYXRlZEluc3RhbmNlX18mJnRoaXMuX19kZXByZWNhdGVkSW5z
dGFuY2VfXy5kZXN0cm95KCl9LHZpc2l0OmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcworcmV0dXJu
IHRoaXMuYm9vdCgpLnRoZW4oZnVuY3Rpb24oKXt2YXIgcj1uLmJ1aWxkSW5zdGFuY2UoKQorcmV0
dXJuIHIuYm9vdCh0KS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIHIudmlzaXQoZSl9KS5jYXRjaChm
dW5jdGlvbihlKXt0aHJvdygwLG8ucnVuKShyLCJkZXN0cm95IiksZX0pfSl9fSkKK09iamVjdC5k
ZWZpbmVQcm9wZXJ0eSh5LnByb3RvdHlwZSwicmVnaXN0cnkiLHtjb25maWd1cmFibGU6ITAsZW51
bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxzLmJ1aWxkRmFrZVJlZ2lzdHJ5V2l0
aERlcHJlY2F0aW9ucykodGhpcywiQXBwbGljYXRpb24iKX19KSx5LnJlb3BlbkNsYXNzKHtidWls
ZFJlZ2lzdHJ5OmZ1bmN0aW9uKCl7YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVu
dHNbMV0mJmFyZ3VtZW50c1sxXQordmFyIGU9dGhpcy5fc3VwZXIuYXBwbHkodGhpcyxhcmd1bWVu
dHMpCityZXR1cm4gaChlKSwoMCxmLnNldHVwQXBwbGljYXRpb25SZWdpc3RyeSkoZSksZX19KSxl
LmRlZmF1bHQ9eX0pLGUoImVtYmVyLWFwcGxpY2F0aW9uL3N5c3RlbS9lbmdpbmUtaW5zdGFuY2Ui
LFsiZXhwb3J0cyIsImVtYmVyLWJhYmVsIiwiZW1iZXItdXRpbHMiLCJlbWJlci1ydW50aW1lIiwi
ZW1iZXItZGVidWciLCJlbWJlci1tZXRhbCIsImNvbnRhaW5lciIsImVtYmVyLWFwcGxpY2F0aW9u
L3N5c3RlbS9lbmdpbmUtcGFyZW50Il0sZnVuY3Rpb24oZSx0LG4scixpLG8scyxhKXsidXNlIHN0
cmljdCIKK3ZhciB1PSgwLHQudGFnZ2VkVGVtcGxhdGVMaXRlcmFsTG9vc2UpKFsiLWJ1Y2tldC1j
YWNoZTptYWluIl0sWyItYnVja2V0LWNhY2hlOm1haW4iXSksbD1yLk9iamVjdC5leHRlbmQoci5S
ZWdpc3RyeVByb3h5TWl4aW4sci5Db250YWluZXJQcm94eU1peGluLHtiYXNlOm51bGwsaW5pdDpm
dW5jdGlvbigpe3RoaXMuX3N1cGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSwoMCxuLmd1aWRGb3Ip
KHRoaXMpCit2YXIgZT10aGlzLmJhc2UKK2V8fChlPXRoaXMuYXBwbGljYXRpb24sdGhpcy5iYXNl
PWUpCit2YXIgdD10aGlzLl9fcmVnaXN0cnlfXz1uZXcgcy5SZWdpc3RyeSh7ZmFsbGJhY2s6ZS5f
X3JlZ2lzdHJ5X199KQordGhpcy5fX2NvbnRhaW5lcl9fPXQuY29udGFpbmVyKHtvd25lcjp0aGlz
fSksdGhpcy5fYm9vdGVkPSExfSxib290OmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMKK3JldHVybiB0
aGlzLl9ib290UHJvbWlzZT90aGlzLl9ib290UHJvbWlzZToodGhpcy5fYm9vdFByb21pc2U9bmV3
IHIuUlNWUC5Qcm9taXNlKGZ1bmN0aW9uKG4pe3JldHVybiBuKHQuX2Jvb3RTeW5jKGUpKX0pLHRo
aXMuX2Jvb3RQcm9taXNlKX0sX2Jvb3RTeW5jOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9ib290
ZWQ/dGhpczoodGhpcy5jbG9uZVBhcmVudERlcGVuZGVuY2llcygpLHRoaXMuc2V0dXBSZWdpc3Ry
eShlKSx0aGlzLmJhc2UucnVuSW5zdGFuY2VJbml0aWFsaXplcnModGhpcyksdGhpcy5fYm9vdGVk
PSEwLHRoaXMpfSxzZXR1cFJlZ2lzdHJ5OmZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0
aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXMuX19jb250YWluZXJf
Xy5sb29rdXAoIi1lbnZpcm9ubWVudDptYWluIikKK3RoaXMuY29uc3RydWN0b3Iuc2V0dXBSZWdp
c3RyeSh0aGlzLl9fcmVnaXN0cnlfXyxlKX0sdW5yZWdpc3RlcjpmdW5jdGlvbihlKXt0aGlzLl9f
Y29udGFpbmVyX18ucmVzZXQoZSksdGhpcy5fc3VwZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxi
dWlsZENoaWxkRW5naW5lSW5zdGFuY2U6ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0
aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9LG49dGhpcy5sb29rdXAo
ImVuZ2luZToiK2UpCitpZighbil0aHJvdyBuZXcgaS5FcnJvcigiWW91IGF0dGVtcHRlZCB0byBt
b3VudCB0aGUgZW5naW5lICciK2UrIicsIGJ1dCBpdCBpcyBub3QgcmVnaXN0ZXJlZCB3aXRoIGl0
cyBwYXJlbnQuIikKK3ZhciByPW4uYnVpbGRJbnN0YW5jZSh0KQorcmV0dXJuKDAsYS5zZXRFbmdp
bmVQYXJlbnQpKHIsdGhpcykscn0sY2xvbmVQYXJlbnREZXBlbmRlbmNpZXM6ZnVuY3Rpb24oKXt2
YXIgZT10aGlzLHQ9KDAsYS5nZXRFbmdpbmVQYXJlbnQpKHRoaXMpO1sicm91dGU6YmFzaWMiLCJz
ZXJ2aWNlOi1yb3V0aW5nIiwic2VydmljZTotZ2xpbW1lci1lbnZpcm9ubWVudCJdLmZvckVhY2go
ZnVuY3Rpb24obil7cmV0dXJuIGUucmVnaXN0ZXIobix0LnJlc29sdmVSZWdpc3RyYXRpb24obikp
fSkKK3ZhciBuPXQubG9va3VwKCItZW52aXJvbm1lbnQ6bWFpbiIpCit0aGlzLnJlZ2lzdGVyKCIt
ZW52aXJvbm1lbnQ6bWFpbiIsbix7aW5zdGFudGlhdGU6ITF9KSxbInJvdXRlcjptYWluIiwoMCxz
LnByaXZhdGl6ZSkodSksIi12aWV3LXJlZ2lzdHJ5Om1haW4iLCJyZW5kZXJlcjotIisobi5pc0lu
dGVyYWN0aXZlPyJkb20iOiJpbmVydCIpLCJzZXJ2aWNlOi1kb2N1bWVudCIsImV2ZW50X2Rpc3Bh
dGNoZXI6bWFpbiJdLmZvckVhY2goZnVuY3Rpb24obil7cmV0dXJuIGUucmVnaXN0ZXIobix0Lmxv
b2t1cChuKSx7aW5zdGFudGlhdGU6ITF9KX0pLHRoaXMuaW5qZWN0KCJ2aWV3IiwiX2Vudmlyb25t
ZW50IiwiLWVudmlyb25tZW50Om1haW4iKSx0aGlzLmluamVjdCgicm91dGUiLCJfZW52aXJvbm1l
bnQiLCItZW52aXJvbm1lbnQ6bWFpbiIpfX0pCitsLnJlb3BlbkNsYXNzKHtzZXR1cFJlZ2lzdHJ5
OmZ1bmN0aW9uKGUsdCl7dCYmKGUuaW5qZWN0aW9uKCJ2aWV3IiwiX2Vudmlyb25tZW50IiwiLWVu
dmlyb25tZW50Om1haW4iKSxlLmluamVjdGlvbigicm91dGUiLCJfZW52aXJvbm1lbnQiLCItZW52
aXJvbm1lbnQ6bWFpbiIpLHQuaXNJbnRlcmFjdGl2ZT8oZS5pbmplY3Rpb24oInZpZXciLCJyZW5k
ZXJlciIsInJlbmRlcmVyOi1kb20iKSxlLmluamVjdGlvbigiY29tcG9uZW50IiwicmVuZGVyZXIi
LCJyZW5kZXJlcjotZG9tIikpOihlLmluamVjdGlvbigidmlldyIsInJlbmRlcmVyIiwicmVuZGVy
ZXI6LWluZXJ0IiksZS5pbmplY3Rpb24oImNvbXBvbmVudCIsInJlbmRlcmVyIiwicmVuZGVyZXI6
LWluZXJ0IikpKX19KSxlLmRlZmF1bHQ9bH0pLGUoImVtYmVyLWFwcGxpY2F0aW9uL3N5c3RlbS9l
bmdpbmUtcGFyZW50IixbImV4cG9ydHMiLCJlbWJlci11dGlscyJdLGZ1bmN0aW9uKGUsdCl7InVz
ZSBzdHJpY3QiCitlLkVOR0lORV9QQVJFTlQ9dm9pZCAwLGUuZ2V0RW5naW5lUGFyZW50PWZ1bmN0
aW9uKGUpe3JldHVybiBlW25dfSxlLnNldEVuZ2luZVBhcmVudD1mdW5jdGlvbihlLHQpe2Vbbl09
dH0KK3ZhciBuPWUuRU5HSU5FX1BBUkVOVD0oMCx0LnN5bWJvbCkoIkVOR0lORV9QQVJFTlQiKX0p
LGUoImVtYmVyLWFwcGxpY2F0aW9uL3N5c3RlbS9lbmdpbmUiLFsiZXhwb3J0cyIsImVtYmVyLWJh
YmVsIiwiZW1iZXItdXRpbHMiLCJlbWJlci1ydW50aW1lIiwiY29udGFpbmVyIiwiZGFnLW1hcCIs
ImVtYmVyLWRlYnVnIiwiZW1iZXItbWV0YWwiLCJlbWJlci1hcHBsaWNhdGlvbi9zeXN0ZW0vcmVz
b2x2ZXIiLCJlbWJlci1hcHBsaWNhdGlvbi9zeXN0ZW0vZW5naW5lLWluc3RhbmNlIiwiZW1iZXIt
cm91dGluZyIsImVtYmVyLWV4dGVuc2lvbi1zdXBwb3J0IiwiZW1iZXItdmlld3MiLCJlbWJlci1n
bGltbWVyIl0sZnVuY3Rpb24oZSx0LG4scixpLG8scyxhLHUsbCxjLHAsZixoKXsidXNlIHN0cmlj
dCIKK2Z1bmN0aW9uIGQoZSl7dmFyIHQ9W10KK2Zvcih2YXIgbiBpbiBlKXQucHVzaChuKQorcmV0
dXJuIHR9ZnVuY3Rpb24gbShlKXtyZXR1cm4oZS5nZXQoIlJlc29sdmVyIil8fHUuZGVmYXVsdCku
Y3JlYXRlKHtuYW1lc3BhY2U6ZX0pfWZ1bmN0aW9uIGcoZSx0KXtyZXR1cm4gZnVuY3Rpb24odCl7
dmFyIG4KK3ZvaWQgMCE9PXRoaXMuc3VwZXJjbGFzc1tlXSYmdGhpcy5zdXBlcmNsYXNzW2VdPT09
dGhpc1tlXSYmKG49e30sbltlXT1PYmplY3QuY3JlYXRlKHRoaXNbZV0pLHRoaXMucmVvcGVuQ2xh
c3MobikpLHRoaXNbZV1bdC5uYW1lXT10fX1mdW5jdGlvbiB5KGUpe2Uub3B0aW9uc0ZvclR5cGUo
ImNvbXBvbmVudCIse3NpbmdsZXRvbjohMX0pLGUub3B0aW9uc0ZvclR5cGUoInZpZXciLHtzaW5n
bGV0b246ITF9KSxlLnJlZ2lzdGVyKCJjb250cm9sbGVyOmJhc2ljIixyLkNvbnRyb2xsZXIse2lu
c3RhbnRpYXRlOiExfSksZS5pbmplY3Rpb24oInZpZXciLCJfdmlld1JlZ2lzdHJ5IiwiLXZpZXct
cmVnaXN0cnk6bWFpbiIpLGUuaW5qZWN0aW9uKCJyZW5kZXJlciIsIl92aWV3UmVnaXN0cnkiLCIt
dmlldy1yZWdpc3RyeTptYWluIiksZS5pbmplY3Rpb24oImV2ZW50X2Rpc3BhdGNoZXI6bWFpbiIs
Il92aWV3UmVnaXN0cnkiLCItdmlldy1yZWdpc3RyeTptYWluIiksZS5pbmplY3Rpb24oInJvdXRl
IiwiX3RvcExldmVsVmlld1RlbXBsYXRlIiwidGVtcGxhdGU6LW91dGxldCIpLGUuaW5qZWN0aW9u
KCJ2aWV3Oi1vdXRsZXQiLCJuYW1lc3BhY2UiLCJhcHBsaWNhdGlvbjptYWluIiksZS5pbmplY3Rp
b24oImNvbnRyb2xsZXIiLCJ0YXJnZXQiLCJyb3V0ZXI6bWFpbiIpLGUuaW5qZWN0aW9uKCJjb250
cm9sbGVyIiwibmFtZXNwYWNlIiwiYXBwbGljYXRpb246bWFpbiIpLGUuaW5qZWN0aW9uKCJyb3V0
ZXIiLCJfYnVja2V0Q2FjaGUiLCgwLGkucHJpdmF0aXplKSh2KSksZS5pbmplY3Rpb24oInJvdXRl
IiwiX2J1Y2tldENhY2hlIiwoMCxpLnByaXZhdGl6ZSkodikpLGUuaW5qZWN0aW9uKCJyb3V0ZSIs
InJvdXRlciIsInJvdXRlcjptYWluIiksZS5yZWdpc3Rlcigic2VydmljZTotcm91dGluZyIsYy5S
b3V0aW5nU2VydmljZSksZS5pbmplY3Rpb24oInNlcnZpY2U6LXJvdXRpbmciLCJyb3V0ZXIiLCJy
b3V0ZXI6bWFpbiIpLGUucmVnaXN0ZXIoInJlc29sdmVyLWZvci1kZWJ1Z2dpbmc6bWFpbiIsZS5y
ZXNvbHZlcix7aW5zdGFudGlhdGU6ITF9KSxlLmluamVjdGlvbigiY29udGFpbmVyLWRlYnVnLWFk
YXB0ZXI6bWFpbiIsInJlc29sdmVyIiwicmVzb2x2ZXItZm9yLWRlYnVnZ2luZzptYWluIiksZS5p
bmplY3Rpb24oImRhdGEtYWRhcHRlcjptYWluIiwiY29udGFpbmVyRGVidWdBZGFwdGVyIiwiY29u
dGFpbmVyLWRlYnVnLWFkYXB0ZXI6bWFpbiIpLGUucmVnaXN0ZXIoImNvbnRhaW5lci1kZWJ1Zy1h
ZGFwdGVyOm1haW4iLHAuQ29udGFpbmVyRGVidWdBZGFwdGVyKSxlLnJlZ2lzdGVyKCJjb21wb25l
bnQtbG9va3VwOm1haW4iLGYuQ29tcG9uZW50TG9va3VwKX12YXIgdj0oMCx0LnRhZ2dlZFRlbXBs
YXRlTGl0ZXJhbExvb3NlKShbIi1idWNrZXQtY2FjaGU6bWFpbiJdLFsiLWJ1Y2tldC1jYWNoZTpt
YWluIl0pLGI9ci5OYW1lc3BhY2UuZXh0ZW5kKHIuUmVnaXN0cnlQcm94eU1peGluLHtpbml0OmZ1
bmN0aW9uKCl7dGhpcy5fc3VwZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMuYnVpbGRSZWdp
c3RyeSgpfSxfaW5pdGlhbGl6ZXJzUmFuOiExLGVuc3VyZUluaXRpYWxpemVyczpmdW5jdGlvbigp
e3RoaXMuX2luaXRpYWxpemVyc1Jhbnx8KHRoaXMucnVuSW5pdGlhbGl6ZXJzKCksdGhpcy5faW5p
dGlhbGl6ZXJzUmFuPSEwKX0sYnVpbGRJbnN0YW5jZTpmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50
cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fQorcmV0dXJu
IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZXJzKCksZS5iYXNlPXRoaXMsbC5kZWZhdWx0LmNyZWF0ZShl
KX0sYnVpbGRSZWdpc3RyeTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fcmVnaXN0cnlfXz10aGlz
LmNvbnN0cnVjdG9yLmJ1aWxkUmVnaXN0cnkodGhpcyl9LGluaXRpYWxpemVyOmZ1bmN0aW9uKGUp
e3RoaXMuY29uc3RydWN0b3IuaW5pdGlhbGl6ZXIoZSl9LGluc3RhbmNlSW5pdGlhbGl6ZXI6ZnVu
Y3Rpb24oZSl7dGhpcy5jb25zdHJ1Y3Rvci5pbnN0YW5jZUluaXRpYWxpemVyKGUpfSxydW5Jbml0
aWFsaXplcnM6ZnVuY3Rpb24oKXt2YXIgZT10aGlzCit0aGlzLl9ydW5Jbml0aWFsaXplcigiaW5p
dGlhbGl6ZXJzIixmdW5jdGlvbih0LG4pezI9PT1uLmluaXRpYWxpemUubGVuZ3RoP24uaW5pdGlh
bGl6ZShlLl9fcmVnaXN0cnlfXyxlKTpuLmluaXRpYWxpemUoZSl9KX0scnVuSW5zdGFuY2VJbml0
aWFsaXplcnM6ZnVuY3Rpb24oZSl7dGhpcy5fcnVuSW5pdGlhbGl6ZXIoImluc3RhbmNlSW5pdGlh
bGl6ZXJzIixmdW5jdGlvbih0LG4pe24uaW5pdGlhbGl6ZShlKX0pfSxfcnVuSW5pdGlhbGl6ZXI6
ZnVuY3Rpb24oZSx0KXt2YXIgbixyPSgwLGEuZ2V0KSh0aGlzLmNvbnN0cnVjdG9yLGUpLGk9ZChy
KSxzPW5ldyBvLmRlZmF1bHQsdT12b2lkIDAKK2ZvcihuPTA7bjxpLmxlbmd0aDtuKyspdT1yW2lb
bl1dLHMuYWRkKHUubmFtZSx1LHUuYmVmb3JlLHUuYWZ0ZXIpCitzLnRvcHNvcnQodCl9fSkKK2Iu
cmVvcGVuQ2xhc3Moe2luaXRpYWxpemVyczpPYmplY3QuY3JlYXRlKG51bGwpLGluc3RhbmNlSW5p
dGlhbGl6ZXJzOk9iamVjdC5jcmVhdGUobnVsbCksaW5pdGlhbGl6ZXI6ZygiaW5pdGlhbGl6ZXJz
IiwiaW5pdGlhbGl6ZXIiKSxpbnN0YW5jZUluaXRpYWxpemVyOmcoImluc3RhbmNlSW5pdGlhbGl6
ZXJzIiwiaW5zdGFuY2UgaW5pdGlhbGl6ZXIiKSxidWlsZFJlZ2lzdHJ5OmZ1bmN0aW9uKGUpe2Fy
Z3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV0KK3Zh
ciB0PW5ldyBpLlJlZ2lzdHJ5KHtyZXNvbHZlcjptKGUpfSkKK3JldHVybiB0LnNldD1hLnNldCx0
LnJlZ2lzdGVyKCJhcHBsaWNhdGlvbjptYWluIixlLHtpbnN0YW50aWF0ZTohMX0pLHkodCksKDAs
aC5zZXR1cEVuZ2luZVJlZ2lzdHJ5KSh0KSx0fSxyZXNvbHZlcjpudWxsLFJlc29sdmVyOm51bGx9
KSxlLmRlZmF1bHQ9Yn0pLGUoImVtYmVyLWFwcGxpY2F0aW9uL3N5c3RlbS9yZXNvbHZlciIsWyJl
eHBvcnRzIiwiZW1iZXItdXRpbHMiLCJlbWJlci1tZXRhbCIsImVtYmVyLWRlYnVnIiwiZW1iZXIt
cnVudGltZSIsImVtYmVyLWFwcGxpY2F0aW9uL3V0aWxzL3ZhbGlkYXRlLXR5cGUiLCJlbWJlci1n
bGltbWVyIl0sZnVuY3Rpb24oZSx0LG4scixpLG8scyl7InVzZSBzdHJpY3QiCitlLlJlc29sdmVy
PXZvaWQgMCxlLlJlc29sdmVyPWkuT2JqZWN0LmV4dGVuZCh7bmFtZXNwYWNlOm51bGwsbm9ybWFs
aXplOm51bGwscmVzb2x2ZTpudWxsLHBhcnNlTmFtZTpudWxsLGxvb2t1cERlc2NyaXB0aW9uOm51
bGwsbWFrZVRvU3RyaW5nOm51bGwscmVzb2x2ZU90aGVyOm51bGwsX2xvZ0xvb2t1cDpudWxsfSks
ZS5kZWZhdWx0PWkuT2JqZWN0LmV4dGVuZCh7bmFtZXNwYWNlOm51bGwsaW5pdDpmdW5jdGlvbigp
e3RoaXMuX3BhcnNlTmFtZUNhY2hlPSgwLHQuZGljdGlvbmFyeSkobnVsbCl9LG5vcm1hbGl6ZTpm
dW5jdGlvbihlKXt2YXIgdCxuPWUuc3BsaXQoIjoiLDIpLHI9blswXSxpPW5bMV0KK3JldHVybiJ0
ZW1wbGF0ZSIhPT1yPyh0PWksdC5pbmRleE9mKCIuIik+LTEmJih0PXQucmVwbGFjZSgvXC4oLikv
ZyxmdW5jdGlvbihlKXtyZXR1cm4gZS5jaGFyQXQoMSkudG9VcHBlckNhc2UoKX0pKSxpLmluZGV4
T2YoIl8iKT4tMSYmKHQ9dC5yZXBsYWNlKC9fKC4pL2csZnVuY3Rpb24oZSl7cmV0dXJuIGUuY2hh
ckF0KDEpLnRvVXBwZXJDYXNlKCl9KSksaS5pbmRleE9mKCItIik+LTEmJih0PXQucmVwbGFjZSgv
LSguKS9nLGZ1bmN0aW9uKGUpe3JldHVybiBlLmNoYXJBdCgxKS50b1VwcGVyQ2FzZSgpfSkpLHIr
IjoiK3QpOmV9LHJlc29sdmU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5wYXJzZU5hbWUoZSksbj10
LnJlc29sdmVNZXRob2ROYW1lLHI9dm9pZCAwCityZXR1cm4gdGhpc1tuXSYmKHI9dGhpc1tuXSh0
KSkscj1yfHx0aGlzLnJlc29sdmVPdGhlcih0KSxyJiYoMCxvLmRlZmF1bHQpKHIsdCkscn0scGFy
c2VOYW1lOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9wYXJzZU5hbWVDYWNoZVtlXXx8KHRoaXMu
X3BhcnNlTmFtZUNhY2hlW2VdPXRoaXMuX3BhcnNlTmFtZShlKSl9LF9wYXJzZU5hbWU6ZnVuY3Rp
b24oZSl7dmFyIHQscixvPWUuc3BsaXQoIjoiKSxzPW9bMF0sYT1vWzFdLHU9YSxsPSgwLG4uZ2V0
KSh0aGlzLCJuYW1lc3BhY2UiKSxjPWwscD11Lmxhc3RJbmRleE9mKCIvIiksZj0tMSE9PXA/dS5z
bGljZSgwLHApOm51bGwKKyJ0ZW1wbGF0ZSIhPT1zJiYtMSE9PXAmJih0PXUuc3BsaXQoIi8iKSx1
PXRbdC5sZW5ndGgtMV0scj1pLlN0cmluZy5jYXBpdGFsaXplKHQuc2xpY2UoMCwtMSkuam9pbigi
LiIpKSxjPWkuTmFtZXNwYWNlLmJ5TmFtZShyKSkKK3ZhciBoPSJtYWluIj09PWE/Ik1haW4iOmku
U3RyaW5nLmNsYXNzaWZ5KHMpCitpZighdXx8IXMpdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxp
ZCBmdWxsTmFtZTogYCIrZSsiYCwgbXVzdCBiZSBvZiB0aGUgZm9ybSBgdHlwZTpuYW1lYCAiKQor
cmV0dXJue2Z1bGxOYW1lOmUsdHlwZTpzLGZ1bGxOYW1lV2l0aG91dFR5cGU6YSxkaXJuYW1lOmYs
bmFtZTp1LHJvb3Q6YyxyZXNvbHZlTWV0aG9kTmFtZToicmVzb2x2ZSIraH19LGxvb2t1cERlc2Ny
aXB0aW9uOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucGFyc2VOYW1lKGUpLG49dm9pZCAwCityZXR1
cm4idGVtcGxhdGUiPT09dC50eXBlPyJ0ZW1wbGF0ZSBhdCAiK3QuZnVsbE5hbWVXaXRob3V0VHlw
ZS5yZXBsYWNlKC9cLi9nLCIvIik6KG49dC5yb290KyIuIitpLlN0cmluZy5jbGFzc2lmeSh0Lm5h
bWUpLnJlcGxhY2UoL1wuL2csIiIpLCJtb2RlbCIhPT10LnR5cGUmJihuKz1pLlN0cmluZy5jbGFz
c2lmeSh0LnR5cGUpKSxuKX0sbWFrZVRvU3RyaW5nOmZ1bmN0aW9uKGUpe3JldHVybiBlLnRvU3Ry
aW5nKCl9LHVzZVJvdXRlck5hbWluZzpmdW5jdGlvbihlKXtlLm5hbWU9ZS5uYW1lLnJlcGxhY2Uo
L1wuL2csIl8iKSwiYmFzaWMiPT09ZS5uYW1lJiYoZS5uYW1lPSIiKX0scmVzb2x2ZVRlbXBsYXRl
OmZ1bmN0aW9uKGUpe3ZhciB0PWUuZnVsbE5hbWVXaXRob3V0VHlwZS5yZXBsYWNlKC9cLi9nLCIv
IikKK3JldHVybigwLHMuZ2V0VGVtcGxhdGUpKHQpfHwoMCxzLmdldFRlbXBsYXRlKShpLlN0cmlu
Zy5kZWNhbWVsaXplKHQpKX0scmVzb2x2ZVZpZXc6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMudXNl
Um91dGVyTmFtaW5nKGUpLHRoaXMucmVzb2x2ZU90aGVyKGUpfSxyZXNvbHZlQ29udHJvbGxlcjpm
dW5jdGlvbihlKXtyZXR1cm4gdGhpcy51c2VSb3V0ZXJOYW1pbmcoZSksdGhpcy5yZXNvbHZlT3Ro
ZXIoZSl9LHJlc29sdmVSb3V0ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy51c2VSb3V0ZXJOYW1p
bmcoZSksdGhpcy5yZXNvbHZlT3RoZXIoZSl9LHJlc29sdmVNb2RlbDpmdW5jdGlvbihlKXt2YXIg
dD1pLlN0cmluZy5jbGFzc2lmeShlLm5hbWUpCityZXR1cm4oMCxuLmdldCkoZS5yb290LHQpfSxy
ZXNvbHZlSGVscGVyOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnJlc29sdmVPdGhlcihlKX0scmVz
b2x2ZU90aGVyOmZ1bmN0aW9uKGUpe3ZhciB0PWkuU3RyaW5nLmNsYXNzaWZ5KGUubmFtZSkraS5T
dHJpbmcuY2xhc3NpZnkoZS50eXBlKQorcmV0dXJuKDAsbi5nZXQpKGUucm9vdCx0KX0scmVzb2x2
ZU1haW46ZnVuY3Rpb24oZSl7dmFyIHQ9aS5TdHJpbmcuY2xhc3NpZnkoZS50eXBlKQorcmV0dXJu
KDAsbi5nZXQpKGUucm9vdCx0KX0sX2xvZ0xvb2t1cDpmdW5jdGlvbihlLHQpe3ZhciBuPXZvaWQg
MCxpPXZvaWQgMAorbj1lPyJb4pyTXSI6IlsgXSIsaT10LmZ1bGxOYW1lLmxlbmd0aD42MD8iLiI6
bmV3IEFycmF5KDYwLXQuZnVsbE5hbWUubGVuZ3RoKS5qb2luKCIuIiksKDAsci5pbmZvKShuLHQu
ZnVsbE5hbWUsaSx0aGlzLmxvb2t1cERlc2NyaXB0aW9uKHQuZnVsbE5hbWUpKX0sa25vd25Gb3JU
eXBlOmZ1bmN0aW9uKGUpe3ZhciByLG8scyxhPSgwLG4uZ2V0KSh0aGlzLCJuYW1lc3BhY2UiKSx1
PWkuU3RyaW5nLmNsYXNzaWZ5KGUpLGw9bmV3IFJlZ0V4cCh1KyIkIiksYz0oMCx0LmRpY3Rpb25h
cnkpKG51bGwpLHA9T2JqZWN0LmtleXMoYSkKK2ZvcihyPTA7cjxwLmxlbmd0aDtyKyspbz1wW3Jd
LGwudGVzdChvKSYmKHM9dGhpcy50cmFuc2xhdGVUb0NvbnRhaW5lckZ1bGxuYW1lKGUsbyksY1tz
XT0hMCkKK3JldHVybiBjfSx0cmFuc2xhdGVUb0NvbnRhaW5lckZ1bGxuYW1lOmZ1bmN0aW9uKGUs
dCl7dmFyIG49aS5TdHJpbmcuY2xhc3NpZnkoZSkscj10LnNsaWNlKDAsLTEqbi5sZW5ndGgpCity
ZXR1cm4gZSsiOiIraS5TdHJpbmcuZGFzaGVyaXplKHIpfX0pfSksZSgiZW1iZXItYXBwbGljYXRp
b24vdXRpbHMvdmFsaWRhdGUtdHlwZSIsWyJleHBvcnRzIiwiZW1iZXItZGVidWciXSxmdW5jdGlv
bihlLHQpeyJ1c2Ugc3RyaWN0IgorZS5kZWZhdWx0PWZ1bmN0aW9uKGUsdCl7dmFyIHI9blt0LnR5
cGVdCitpZihyKXtyWzBdLHJbMV0sclsyXX19Cit2YXIgbj17cm91dGU6WyJhc3NlcnQiLCJpc1Jv
dXRlRmFjdG9yeSIsIkVtYmVyLlJvdXRlIl0sY29tcG9uZW50OlsiZGVwcmVjYXRlIiwiaXNDb21w
b25lbnRGYWN0b3J5IiwiRW1iZXIuQ29tcG9uZW50Il0sdmlldzpbImRlcHJlY2F0ZSIsImlzVmll
d0ZhY3RvcnkiLCJFbWJlci5WaWV3Il0sc2VydmljZTpbImRlcHJlY2F0ZSIsImlzU2VydmljZUZh
Y3RvcnkiLCJFbWJlci5TZXJ2aWNlIl19fSksZSgiZW1iZXItYmFiZWwiLFsiZXhwb3J0cyJdLGZ1
bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IgorZnVuY3Rpb24gdChlLHQpe2UucHJvdG90eXBlPU9iamVj
dC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLGVudW1lcmFibGU6
ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJihPYmplY3Quc2V0UHJvdG90eXBl
T2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUsdCk6byhlLHQpKX1mdW5jdGlvbiBuKGUsdCl7cmV0
dXJuIGUucmF3PXQsZX1mdW5jdGlvbiByKGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKysp
e3ZhciByPXRbbl0KK3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxl
PSEwLCJ2YWx1ZSJpbiByJiYoci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUs
ci5rZXkscil9fWZ1bmN0aW9uIGkoZSx0LG4pe3JldHVybiB0JiZyKGUucHJvdG90eXBlLHQpLG4m
JnIoZSxuKSxlfWZ1bmN0aW9uIG8oZSx0KXtmb3IodmFyIG49T2JqZWN0LmdldE93blByb3BlcnR5
TmFtZXModCkscj0wO3I8bi5sZW5ndGg7cisrKXt2YXIgaT1uW3JdLG89T2JqZWN0LmdldE93blBy
b3BlcnR5RGVzY3JpcHRvcih0LGkpCitvJiZvLmNvbmZpZ3VyYWJsZSYmdm9pZCAwPT09ZVtpXSYm
T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsaSxvKX1yZXR1cm4gZX1lLmluaGVyaXRzPXQsZS50YWdn
ZWRUZW1wbGF0ZUxpdGVyYWxMb29zZT1uLGUuY3JlYXRlQ2xhc3M9aSxlLmRlZmF1bHRzPW8KK2Uu
cG9zc2libGVDb25zdHJ1Y3RvclJldHVybj1mdW5jdGlvbihlLHQpe3JldHVybiF0fHwib2JqZWN0
IiE9dHlwZW9mIHQmJiJmdW5jdGlvbiIhPXR5cGVvZiB0P2U6dH0sZS5zbGljZT1BcnJheS5wcm90
b3R5cGUuc2xpY2V9KSxlKCJlbWJlci1jb25zb2xlIixbImV4cG9ydHMiLCJlbWJlci1lbnZpcm9u
bWVudCJdLGZ1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiCitmdW5jdGlvbiBuKCl7fWZ1bmN0aW9u
IHIoZSl7dmFyIG49dm9pZCAwCit0LmNvbnRleHQuaW1wb3J0cy5jb25zb2xlP249dC5jb250ZXh0
LmltcG9ydHMuY29uc29sZToidW5kZWZpbmVkIiE9dHlwZW9mIGNvbnNvbGUmJihuPWNvbnNvbGUp
Cit2YXIgcj0ib2JqZWN0Ij09dHlwZW9mIG4/bltlXTpudWxsCitpZigiZnVuY3Rpb24iPT10eXBl
b2YgcilyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygci5iaW5kP3IuYmluZChuKTpmdW5jdGlvbigp
e3IuYXBwbHkobixhcmd1bWVudHMpfX12YXIgaT17bG9nOnIoImxvZyIpfHxuLHdhcm46cigid2Fy
biIpfHxuLGVycm9yOnIoImVycm9yIil8fG4saW5mbzpyKCJpbmZvIil8fG4sZGVidWc6cigiZGVi
dWciKXx8cigiaW5mbyIpfHxuLGFzc2VydDpyKCJhc3NlcnQiKXx8ZnVuY3Rpb24oZSx0KXtpZigh
ZSl0cnl7dGhyb3cgbmV3IEVycm9yKCJhc3NlcnRpb24gZmFpbGVkOiAiK3QpfWNhdGNoKGUpe3Nl
dFRpbWVvdXQoZnVuY3Rpb24oKXt0aHJvdyBlfSwwKX19fQorZS5kZWZhdWx0PWl9KSxlKCJlbWJl
ci1kZWJ1Zy9kZXByZWNhdGUiLFsiZXhwb3J0cyIsImVtYmVyLWRlYnVnL2Vycm9yIiwiZW1iZXIt
Y29uc29sZSIsImVtYmVyLWVudmlyb25tZW50IiwiZW1iZXItZGVidWcvaGFuZGxlcnMiXSxmdW5j
dGlvbihlKXsidXNlIHN0cmljdCIKK2UubWlzc2luZ09wdGlvbnNVbnRpbERlcHJlY2F0aW9uPWUu
bWlzc2luZ09wdGlvbnNJZERlcHJlY2F0aW9uPWUubWlzc2luZ09wdGlvbnNEZXByZWNhdGlvbj1l
LnJlZ2lzdGVySGFuZGxlcj12b2lkIDAsZS5kZWZhdWx0PXZvaWQgMCxlLnJlZ2lzdGVySGFuZGxl
cj1mdW5jdGlvbigpe30sZS5taXNzaW5nT3B0aW9uc0RlcHJlY2F0aW9uPXZvaWQgMCxlLm1pc3Np
bmdPcHRpb25zSWREZXByZWNhdGlvbj12b2lkIDAsZS5taXNzaW5nT3B0aW9uc1VudGlsRGVwcmVj
YXRpb249dm9pZCAwfSksZSgiZW1iZXItZGVidWcvZXJyb3IiLFsiZXhwb3J0cyIsImVtYmVyLWJh
YmVsIl0sZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCIKK3ZhciBuPWZ1bmN0aW9uKGUpe2Z1bmN0
aW9uIG4ocil7dmFyIGksbz0oMCx0LnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4pKHRoaXMsZS5j
YWxsKHRoaXMpKQoraWYoIShvIGluc3RhbmNlb2YgbikpcmV0dXJuIGk9bmV3IG4ociksKDAsdC5w
b3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKShvLGkpCit2YXIgcz1FcnJvci5jYWxsKG8scikKK3Jl
dHVybiBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZShvLG4p
Om8uc3RhY2s9cy5zdGFjayxvLmRlc2NyaXB0aW9uPXMuZGVzY3JpcHRpb24sby5maWxlTmFtZT1z
LmZpbGVOYW1lLG8ubGluZU51bWJlcj1zLmxpbmVOdW1iZXIsby5tZXNzYWdlPXMubWVzc2FnZSxv
Lm5hbWU9cy5uYW1lLG8ubnVtYmVyPXMubnVtYmVyLG8uY29kZT1zLmNvZGUsb31yZXR1cm4oMCx0
LmluaGVyaXRzKShuLGUpLG59KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtlLmFwcGx5KHRoaXMs
YXJndW1lbnRzKX1yZXR1cm4gdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlLnByb3RvdHlwZSks
dC5wcm90b3R5cGUuY29uc3RydWN0b3I9dCx0fShFcnJvcikpCitlLmRlZmF1bHQ9bn0pLGUoImVt
YmVyLWRlYnVnL2ZlYXR1cmVzIixbImV4cG9ydHMiLCJlbWJlci1lbnZpcm9ubWVudCIsImVtYmVy
L2ZlYXR1cmVzIl0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IgorZS5kZWZhdWx0PWZ1bmN0
aW9uKGUpe3ZhciBuPXJbZV0KK3JldHVybiEwPT09bnx8ITE9PT1ufHx2b2lkIDA9PT1uP246ISF0
LkVOVi5FTkFCTEVfT1BUSU9OQUxfRkVBVFVSRVN9Cit2YXIgcj1uLkZFQVRVUkVTfSksZSgiZW1i
ZXItZGVidWcvaGFuZGxlcnMiLFsiZXhwb3J0cyJdLGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0Igor
ZS5IQU5ETEVSUz17fSxlLnJlZ2lzdGVySGFuZGxlcj1mdW5jdGlvbigpe30sZS5pbnZva2U9ZnVu
Y3Rpb24oKXt9fSksZSgiZW1iZXItZGVidWcvaW5kZXgiLFsiZXhwb3J0cyIsImVtYmVyLWRlYnVn
L3dhcm4iLCJlbWJlci1kZWJ1Zy9kZXByZWNhdGUiLCJlbWJlci1kZWJ1Zy9mZWF0dXJlcyIsImVt
YmVyLWRlYnVnL2Vycm9yIiwiZW1iZXItZGVidWcvdGVzdGluZyIsImVtYmVyLWVudmlyb25tZW50
IiwiZW1iZXItY29uc29sZSIsImVtYmVyL2ZlYXR1cmVzIl0sZnVuY3Rpb24oZSx0LG4scixpLG8s
cyxhLHUpeyJ1c2Ugc3RyaWN0IgorZS5fd2FybklmVXNpbmdTdHJpcHBlZEZlYXR1cmVGbGFncz1l
LmdldERlYnVnRnVuY3Rpb249ZS5zZXREZWJ1Z0Z1bmN0aW9uPWUuZGVwcmVjYXRlRnVuYz1lLnJ1
bkluRGVidWc9ZS5kZWJ1Z0ZyZWV6ZT1lLmRlYnVnU2VhbD1lLmRlcHJlY2F0ZT1lLmRlYnVnPWUu
d2Fybj1lLmluZm89ZS5hc3NlcnQ9ZS5zZXRUZXN0aW5nPWUuaXNUZXN0aW5nPWUuRXJyb3I9ZS5p
c0ZlYXR1cmVFbmFibGVkPWUucmVnaXN0ZXJEZXByZWNhdGlvbkhhbmRsZXI9ZS5yZWdpc3Rlcldh
cm5IYW5kbGVyPXZvaWQgMCxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicmVnaXN0ZXJXYXJuSGFu
ZGxlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHQucmVnaXN0ZXJIYW5k
bGVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJyZWdpc3RlckRlcHJlY2F0aW9uSGFuZGxl
ciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG4ucmVnaXN0ZXJIYW5kbGVy
fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJpc0ZlYXR1cmVFbmFibGVkIix7ZW51bWVyYWJs
ZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5kZWZhdWx0fX0pLE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShlLCJFcnJvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkuZGVm
YXVsdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiaXNUZXN0aW5nIix7ZW51bWVyYWJsZToh
MCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5pc1Rlc3Rpbmd9fSksT2JqZWN0LmRlZmluZVByb3Bl
cnR5KGUsInNldFRlc3RpbmciLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBv
LnNldFRlc3Rpbmd9fSkKK3UuREVGQVVMVF9GRUFUVVJFUyx1LkZFQVRVUkVTCitlLmFzc2VydD1m
dW5jdGlvbigpe30sZS5pbmZvPWZ1bmN0aW9uKCl7fSxlLndhcm49ZnVuY3Rpb24oKXt9LGUuZGVi
dWc9ZnVuY3Rpb24oKXt9LGUuZGVwcmVjYXRlPWZ1bmN0aW9uKCl7fSxlLmRlYnVnU2VhbD1mdW5j
dGlvbigpe30sZS5kZWJ1Z0ZyZWV6ZT1mdW5jdGlvbigpe30sZS5ydW5JbkRlYnVnPWZ1bmN0aW9u
KCl7fSxlLmRlcHJlY2F0ZUZ1bmM9ZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzW2FyZ3VtZW50
cy5sZW5ndGgtMV19LGUuc2V0RGVidWdGdW5jdGlvbj1mdW5jdGlvbigpe30sZS5nZXREZWJ1Z0Z1
bmN0aW9uPWZ1bmN0aW9uKCl7fSxlLl93YXJuSWZVc2luZ1N0cmlwcGVkRmVhdHVyZUZsYWdzPXZv
aWQgMH0pLGUoImVtYmVyLWRlYnVnL3Rlc3RpbmciLFsiZXhwb3J0cyJdLGZ1bmN0aW9uKGUpeyJ1
c2Ugc3RyaWN0IgorZS5pc1Rlc3Rpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sZS5zZXRUZXN0aW5n
PWZ1bmN0aW9uKGUpe3Q9ISFlfQordmFyIHQ9ITF9KSxlKCJlbWJlci1kZWJ1Zy93YXJuIixbImV4
cG9ydHMiLCJlbWJlci1jb25zb2xlIiwiZW1iZXItZGVidWcvZGVwcmVjYXRlIiwiZW1iZXItZGVi
dWcvaGFuZGxlcnMiXSxmdW5jdGlvbihlKXsidXNlIHN0cmljdCIKK2UubWlzc2luZ09wdGlvbnNE
ZXByZWNhdGlvbj1lLm1pc3NpbmdPcHRpb25zSWREZXByZWNhdGlvbj1lLnJlZ2lzdGVySGFuZGxl
cj12b2lkIDAsZS5kZWZhdWx0PWZ1bmN0aW9uKCl7fSxlLnJlZ2lzdGVySGFuZGxlcj1mdW5jdGlv
bigpe30sZS5taXNzaW5nT3B0aW9uc0lkRGVwcmVjYXRpb249dm9pZCAwLGUubWlzc2luZ09wdGlv
bnNEZXByZWNhdGlvbj12b2lkIDB9KSxlKCJlbWJlci1lbnZpcm9ubWVudCIsWyJleHBvcnRzIl0s
ZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiCitmdW5jdGlvbiB0KGUpe3JldHVybiBlJiZlLk9iamVj
dD09PU9iamVjdD9lOnZvaWQgMH1mdW5jdGlvbiBuKGUpe3JldHVybiExIT09ZX1mdW5jdGlvbiBp
KGUpe3JldHVybiEwPT09ZX12YXIgbz10KGZ1bmN0aW9uKGUpe3JldHVybiBlJiZ2b2lkIDA9PT1l
Lm5vZGVUeXBlP2U6dm9pZCAwfSgib2JqZWN0Ij09dHlwZW9mIGdsb2JhbCYmZ2xvYmFsKSl8fHQo
Im9iamVjdCI9PXR5cGVvZiBzZWxmJiZzZWxmKXx8dCgib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYm
d2luZG93KXx8cnx8bmV3IEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCkscz0ib2JqZWN0Ij09dHlw
ZW9mIG8uRW1iZXJFTlYmJm8uRW1iZXJFTlZ8fCJvYmplY3QiPT10eXBlb2Ygby5FTlYmJm8uRU5W
fHx7fQorcy5FTkFCTEVfQUxMX0ZFQVRVUkVTJiYocy5FTkFCTEVfT1BUSU9OQUxfRkVBVFVSRVM9
ITApLHMuRVhURU5EX1BST1RPVFlQRVM9ZnVuY3Rpb24oZSl7cmV0dXJuITE9PT1lP3tTdHJpbmc6
ITEsQXJyYXk6ITEsRnVuY3Rpb246ITF9OmUmJiEwIT09ZT97U3RyaW5nOm4oZS5TdHJpbmcpLEFy
cmF5Om4oZS5BcnJheSksRnVuY3Rpb246bihlLkZ1bmN0aW9uKX06e1N0cmluZzohMCxBcnJheToh
MCxGdW5jdGlvbjohMH19KHMuRVhURU5EX1BST1RPVFlQRVMpLHMuTE9HX1NUQUNLVFJBQ0VfT05f
REVQUkVDQVRJT049bihzLkxPR19TVEFDS1RSQUNFX09OX0RFUFJFQ0FUSU9OKSxzLkxPR19WRVJT
SU9OPW4ocy5MT0dfVkVSU0lPTikscy5MT0dfQklORElOR1M9aShzLkxPR19CSU5ESU5HUykscy5S
QUlTRV9PTl9ERVBSRUNBVElPTj1pKHMuUkFJU0VfT05fREVQUkVDQVRJT04pCit2YXIgYT0idW5k
ZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmd2luZG93PT09byYmd2luZG93LmRvY3VtZW50JiZ3aW5k
b3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCYmIXMuZGlzYWJsZUJyb3dzZXJFbnZpcm9ubWVudCx1
PW8uRW1iZXJ8fHt9LGw9e2ltcG9ydHM6dS5pbXBvcnRzfHxvLGV4cG9ydHM6dS5leHBvcnRzfHxv
LGxvb2t1cDp1Lmxvb2t1cHx8b30sYz1hP3toYXNET006ITAsaXNDaHJvbWU6ISF3aW5kb3cuY2hy
b21lJiYhd2luZG93Lm9wZXJhLGlzRmlyZWZveDoidW5kZWZpbmVkIiE9dHlwZW9mIEluc3RhbGxU
cmlnZ2VyLGlzUGhhbnRvbTohIXdpbmRvdy5jYWxsUGhhbnRvbSxsb2NhdGlvbjp3aW5kb3cubG9j
YXRpb24saGlzdG9yeTp3aW5kb3cuaGlzdG9yeSx1c2VyQWdlbnQ6d2luZG93Lm5hdmlnYXRvci51
c2VyQWdlbnQsd2luZG93OndpbmRvd306e2hhc0RPTTohMSxpc0Nocm9tZTohMSxpc0ZpcmVmb3g6
ITEsaXNQaGFudG9tOiExLGxvY2F0aW9uOm51bGwsaGlzdG9yeTpudWxsLHVzZXJBZ2VudDoiTHlu
eCAodGV4dG1vZGUpIix3aW5kb3c6bnVsbH0KK2UuRU5WPXMsZS5jb250ZXh0PWwsZS5lbnZpcm9u
bWVudD1jfSksZSgiZW1iZXItZXh0ZW5zaW9uLXN1cHBvcnQvY29udGFpbmVyX2RlYnVnX2FkYXB0
ZXIiLFsiZXhwb3J0cyIsImVtYmVyLW1ldGFsIiwiZW1iZXItcnVudGltZSJdLGZ1bmN0aW9uKGUs
dCxuKXsidXNlIHN0cmljdCIKK2UuZGVmYXVsdD1uLk9iamVjdC5leHRlbmQoe3Jlc29sdmVyOm51
bGwsY2FuQ2F0YWxvZ0VudHJpZXNCeVR5cGU6ZnVuY3Rpb24oZSl7cmV0dXJuIm1vZGVsIiE9PWUm
JiJ0ZW1wbGF0ZSIhPT1lfSxjYXRhbG9nRW50cmllc0J5VHlwZTpmdW5jdGlvbihlKXt2YXIgcj0o
MCxuLkEpKG4uTmFtZXNwYWNlLk5BTUVTUEFDRVMpLGk9KDAsbi5BKSgpLG89bmV3IFJlZ0V4cChu
LlN0cmluZy5jbGFzc2lmeShlKSsiJCIpCityZXR1cm4gci5mb3JFYWNoKGZ1bmN0aW9uKGUpe3Zh
ciByCitpZihlIT09dC5kZWZhdWx0KWZvcih2YXIgcyBpbiBlKWUuaGFzT3duUHJvcGVydHkocykm
Jm8udGVzdChzKSYmKHI9ZVtzXSwiY2xhc3MiPT09KDAsbi50eXBlT2YpKHIpJiZpLnB1c2gobi5T
dHJpbmcuZGFzaGVyaXplKHMucmVwbGFjZShvLCIiKSkpKX0pLGl9fSl9KSxlKCJlbWJlci1leHRl
bnNpb24tc3VwcG9ydC9kYXRhX2FkYXB0ZXIiLFsiZXhwb3J0cyIsImVtYmVyLXV0aWxzIiwiZW1i
ZXItbWV0YWwiLCJlbWJlci1ydW50aW1lIl0sZnVuY3Rpb24oZSx0LG4scil7InVzZSBzdHJpY3Qi
CitlLmRlZmF1bHQ9ci5PYmplY3QuZXh0ZW5kKHtpbml0OmZ1bmN0aW9uKCl7dGhpcy5fc3VwZXIu
YXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMucmVsZWFzZU1ldGhvZHM9KDAsci5BKSgpfSxjb250
YWluZXJEZWJ1Z0FkYXB0ZXI6dm9pZCAwLGF0dHJpYnV0ZUxpbWl0OjMsYWNjZXB0c01vZGVsTmFt
ZTohMCxyZWxlYXNlTWV0aG9kczooMCxyLkEpKCksZ2V0RmlsdGVyczpmdW5jdGlvbigpe3JldHVy
bigwLHIuQSkoKX0sd2F0Y2hNb2RlbFR5cGVzOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcyxpPXRo
aXMuZ2V0TW9kZWxUeXBlcygpLG89KDAsci5BKSgpLHM9dm9pZCAwCitzPWkubWFwKGZ1bmN0aW9u
KGUpe3ZhciByPWUua2xhc3MsaT1uLndyYXBNb2RlbFR5cGUocixlLm5hbWUpCityZXR1cm4gby5w
dXNoKG4ub2JzZXJ2ZU1vZGVsVHlwZShlLm5hbWUsdCkpLGl9KSxlKHMpCit2YXIgYT1mdW5jdGlv
bigpe28uZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gZSgpfSksbi5yZWxlYXNlTWV0aG9kcy5y
ZW1vdmVPYmplY3QoYSl9CityZXR1cm4gdGhpcy5yZWxlYXNlTWV0aG9kcy5wdXNoT2JqZWN0KGEp
LGF9LF9uYW1lVG9DbGFzczpmdW5jdGlvbihlKXt2YXIgbixyCityZXR1cm4ic3RyaW5nIj09dHlw
ZW9mIGUmJihuPSgwLHQuZ2V0T3duZXIpKHRoaXMpLHI9bi5mYWN0b3J5Rm9yKCJtb2RlbDoiK2Up
LGU9ciYmci5jbGFzcyksZX0sd2F0Y2hSZWNvcmRzOmZ1bmN0aW9uKGUsdCxuLGkpe2Z1bmN0aW9u
IG8oZSl7bihbZV0pfXZhciBzPXRoaXMsYT0oMCxyLkEpKCksdT10aGlzLl9uYW1lVG9DbGFzcyhl
KSxsPXRoaXMuZ2V0UmVjb3Jkcyh1LGUpLGM9dm9pZCAwLHA9bC5tYXAoZnVuY3Rpb24oZSl7cmV0
dXJuIGEucHVzaChzLm9ic2VydmVSZWNvcmQoZSxvKSkscy53cmFwUmVjb3JkKGUpfSksZj17ZGlk
Q2hhbmdlOmZ1bmN0aW9uKGUsbix1LGwpe3ZhciBjLHAsZgorZm9yKGM9bjtjPG4rbDtjKyspcD0o
MCxyLm9iamVjdEF0KShlLGMpLGY9cy53cmFwUmVjb3JkKHApLGEucHVzaChzLm9ic2VydmVSZWNv
cmQocCxvKSksdChbZl0pCit1JiZpKG4sdSl9LHdpbGxDaGFuZ2U6ZnVuY3Rpb24oKXtyZXR1cm4g
dGhpc319CityZXR1cm4oMCxyLmFkZEFycmF5T2JzZXJ2ZXIpKGwsdGhpcyxmKSxjPWZ1bmN0aW9u
KCl7YS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiBlKCl9KSwoMCxyLnJlbW92ZUFycmF5T2Jz
ZXJ2ZXIpKGwscyxmKSxzLnJlbGVhc2VNZXRob2RzLnJlbW92ZU9iamVjdChjKX0sdChwKSx0aGlz
LnJlbGVhc2VNZXRob2RzLnB1c2hPYmplY3QoYyksY30sd2lsbERlc3Ryb3k6ZnVuY3Rpb24oKXt0
aGlzLl9zdXBlci5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5yZWxlYXNlTWV0aG9kcy5mb3JF
YWNoKGZ1bmN0aW9uKGUpe3JldHVybiBlKCl9KX0sZGV0ZWN0OmZ1bmN0aW9uKCl7cmV0dXJuITF9
LGNvbHVtbnNGb3JUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuKDAsci5BKSgpfSxvYnNlcnZlTW9kZWxU
eXBlOmZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gaSgpe3QoW3RoaXMud3JhcE1vZGVsVHlwZShzLGUp
XSl9dmFyIG89dGhpcyxzPXRoaXMuX25hbWVUb0NsYXNzKGUpLGE9dGhpcy5nZXRSZWNvcmRzKHMs
ZSksdT17ZGlkQ2hhbmdlOmZ1bmN0aW9uKCl7bi5ydW4uc2NoZWR1bGVPbmNlKCJhY3Rpb25zIix0
aGlzLGkpfSx3aWxsQ2hhbmdlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9fQorcmV0dXJuKDAsci5h
ZGRBcnJheU9ic2VydmVyKShhLHRoaXMsdSksZnVuY3Rpb24oKXtyZXR1cm4oMCxyLnJlbW92ZUFy
cmF5T2JzZXJ2ZXIpKGEsbyx1KX19LHdyYXBNb2RlbFR5cGU6ZnVuY3Rpb24oZSx0KXt2YXIgcj10
aGlzLmdldFJlY29yZHMoZSx0KQorcmV0dXJue25hbWU6dCxjb3VudDooMCxuLmdldCkociwibGVu
Z3RoIiksY29sdW1uczp0aGlzLmNvbHVtbnNGb3JUeXBlKGUpLG9iamVjdDplfX0sZ2V0TW9kZWxU
eXBlczpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzLmdldCgiY29udGFpbmVyRGVidWdBZGFw
dGVyIiksbj12b2lkIDAKK3JldHVybiBuPXQuY2FuQ2F0YWxvZ0VudHJpZXNCeVR5cGUoIm1vZGVs
Iik/dC5jYXRhbG9nRW50cmllc0J5VHlwZSgibW9kZWwiKTp0aGlzLl9nZXRPYmplY3RzT25OYW1l
c3BhY2VzKCksbj0oMCxyLkEpKG4pLm1hcChmdW5jdGlvbih0KXtyZXR1cm57a2xhc3M6ZS5fbmFt
ZVRvQ2xhc3ModCksbmFtZTp0fX0pLG49KDAsci5BKShuKS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0
dXJuIGUuZGV0ZWN0KHQua2xhc3MpfSksKDAsci5BKShuKX0sX2dldE9iamVjdHNPbk5hbWVzcGFj
ZXM6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9KDAsci5BKShyLk5hbWVzcGFjZS5OQU1FU1BBQ0VT
KSxuPSgwLHIuQSkoKQorcmV0dXJuIHQuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgaQorZm9yKHZh
ciBvIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShvKSYmZS5kZXRlY3QodFtvXSkmJihpPXIuU3RyaW5n
LmRhc2hlcml6ZShvKSxuLnB1c2goaSkpfSksbn0sZ2V0UmVjb3JkczpmdW5jdGlvbigpe3JldHVy
bigwLHIuQSkoKX0sd3JhcFJlY29yZDpmdW5jdGlvbihlKXt2YXIgdD17b2JqZWN0OmV9CityZXR1
cm4gdC5jb2x1bW5WYWx1ZXM9dGhpcy5nZXRSZWNvcmRDb2x1bW5WYWx1ZXMoZSksdC5zZWFyY2hL
ZXl3b3Jkcz10aGlzLmdldFJlY29yZEtleXdvcmRzKGUpLHQuZmlsdGVyVmFsdWVzPXRoaXMuZ2V0
UmVjb3JkRmlsdGVyVmFsdWVzKGUpLHQuY29sb3I9dGhpcy5nZXRSZWNvcmRDb2xvcihlKSx0fSxn
ZXRSZWNvcmRDb2x1bW5WYWx1ZXM6ZnVuY3Rpb24oKXtyZXR1cm57fX0sZ2V0UmVjb3JkS2V5d29y
ZHM6ZnVuY3Rpb24oKXtyZXR1cm4oMCxyLkEpKCl9LGdldFJlY29yZEZpbHRlclZhbHVlczpmdW5j
dGlvbigpe3JldHVybnt9fSxnZXRSZWNvcmRDb2xvcjpmdW5jdGlvbigpe3JldHVybiBudWxsfSxv
YnNlcnZlUmVjb3JkOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKCl7fX19KX0pCitlKCJlbWJl
ci1leHRlbnNpb24tc3VwcG9ydC9pbmRleCIsWyJleHBvcnRzIiwiZW1iZXItZXh0ZW5zaW9uLXN1
cHBvcnQvZGF0YV9hZGFwdGVyIiwiZW1iZXItZXh0ZW5zaW9uLXN1cHBvcnQvY29udGFpbmVyX2Rl
YnVnX2FkYXB0ZXIiXSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiCitPYmplY3QuZGVmaW5l
UHJvcGVydHkoZSwiRGF0YUFkYXB0ZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3Jl
dHVybiB0LmRlZmF1bHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIkNvbnRhaW5lckRlYnVn
QWRhcHRlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG4uZGVmYXVsdH19
KX0pLGUoImVtYmVyLWdsaW1tZXIvY29tcG9uZW50IixbImV4cG9ydHMiLCJlbWJlci11dGlscyIs
ImVtYmVyLXZpZXdzIiwiZW1iZXItcnVudGltZSIsImVtYmVyLWRlYnVnIiwiZW1iZXItbWV0YWwi
LCJlbWJlci1nbGltbWVyL3V0aWxzL3JlZmVyZW5jZXMiLCJAZ2xpbW1lci9yZWZlcmVuY2UiLCJA
Z2xpbW1lci9ydW50aW1lIl0sZnVuY3Rpb24oZSx0LG4scixpLG8scyxhLHUpeyJ1c2Ugc3RyaWN0
IgorZS5CT1VORFM9ZS5IQVNfQkxPQ0s9ZS5JU19ESVNQQVRDSElOR19BVFRSUz1lLlJPT1RfUkVG
PWUuQVJHUz1lLkRJUlRZX1RBRz12b2lkIDAKK3ZhciBsLGM9ZS5ESVJUWV9UQUc9KDAsdC5zeW1i
b2wpKCJESVJUWV9UQUciKSxwPWUuQVJHUz0oMCx0LnN5bWJvbCkoIkFSR1MiKSxmPWUuUk9PVF9S
RUY9KDAsdC5zeW1ib2wpKCJST09UX1JFRiIpLGg9ZS5JU19ESVNQQVRDSElOR19BVFRSUz0oMCx0
LnN5bWJvbCkoIklTX0RJU1BBVENISU5HX0FUVFJTIikKK2UuSEFTX0JMT0NLPSgwLHQuc3ltYm9s
KSgiSEFTX0JMT0NLIikKK3ZhciBkPWUuQk9VTkRTPSgwLHQuc3ltYm9sKSgiQk9VTkRTIiksbT1u
LkNvcmVWaWV3LmV4dGVuZChuLkNoaWxkVmlld3NTdXBwb3J0LG4uVmlld1N0YXRlU3VwcG9ydCxu
LkNsYXNzTmFtZXNTdXBwb3J0LHIuVGFyZ2V0QWN0aW9uU3VwcG9ydCxuLkFjdGlvblN1cHBvcnQs
bi5WaWV3TWl4aW4sKGw9e2lzQ29tcG9uZW50OiEwLGluaXQ6ZnVuY3Rpb24oKXt0aGlzLl9zdXBl
ci5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpc1toXT0hMSx0aGlzW2NdPW5ldyBhLkRpcnR5YWJs
ZVRhZyx0aGlzW2ZdPW5ldyBzLlJvb3RSZWZlcmVuY2UodGhpcyksdGhpc1tkXT1udWxsLHRoaXMu
ZGVmYXVsdExheW91dCYmIXRoaXMubGF5b3V0JiYodGhpcy5sYXlvdXQ9dGhpcy5kZWZhdWx0TGF5
b3V0KX0scmVyZW5kZXI6ZnVuY3Rpb24oKXt0aGlzW2NdLmRpcnR5KCksdGhpcy5fc3VwZXIoKX0s
X19kZWZpbmVOb25FbnVtZXJhYmxlOmZ1bmN0aW9uKGUpe3RoaXNbZS5uYW1lXT1lLmRlc2NyaXB0
b3IudmFsdWV9fSxsW28uUFJPUEVSVFlfRElEX0NIQU5HRV09ZnVuY3Rpb24oZSl7aWYoIXRoaXNb
aF0pe3ZhciB0PXZvaWQgMCxuPXZvaWQgMDsodD10aGlzW3BdKSYmKG49dFtlXSkmJm5bcy5VUERB
VEVdJiZuW3MuVVBEQVRFXSgoMCxvLmdldCkodGhpcyxlKSl9fSxsLmdldEF0dHI9ZnVuY3Rpb24o
ZSl7cmV0dXJuIHRoaXMuZ2V0KGUpfSxsLnJlYWRET01BdHRyPWZ1bmN0aW9uKGUpe3ZhciB0PSgw
LG4uZ2V0Vmlld0VsZW1lbnQpKHRoaXMpCityZXR1cm4oMCx1LnJlYWRET01BdHRyKSh0LGUpfSxs
KSkKK21bdC5OQU1FX0tFWV09IkVtYmVyLkNvbXBvbmVudCIsbS5yZW9wZW5DbGFzcyh7aXNDb21w
b25lbnRGYWN0b3J5OiEwLHBvc2l0aW9uYWxQYXJhbXM6W119KSxlLmRlZmF1bHQ9bX0pLGUoImVt
YmVyLWdsaW1tZXIvY29tcG9uZW50cy9jaGVja2JveCIsWyJleHBvcnRzIiwiZW1iZXItbWV0YWwi
LCJlbWJlci1nbGltbWVyL2NvbXBvbmVudCIsImVtYmVyLWdsaW1tZXIvdGVtcGxhdGVzL2VtcHR5
Il0sZnVuY3Rpb24oZSx0LG4scil7InVzZSBzdHJpY3QiCitlLmRlZmF1bHQ9bi5kZWZhdWx0LmV4
dGVuZCh7bGF5b3V0OnIuZGVmYXVsdCxjbGFzc05hbWVzOlsiZW1iZXItY2hlY2tib3giXSx0YWdO
YW1lOiJpbnB1dCIsYXR0cmlidXRlQmluZGluZ3M6WyJ0eXBlIiwiY2hlY2tlZCIsImluZGV0ZXJt
aW5hdGUiLCJkaXNhYmxlZCIsInRhYmluZGV4IiwibmFtZSIsImF1dG9mb2N1cyIsInJlcXVpcmVk
IiwiZm9ybSJdLHR5cGU6ImNoZWNrYm94IixkaXNhYmxlZDohMSxpbmRldGVybWluYXRlOiExLGRp
ZEluc2VydEVsZW1lbnQ6ZnVuY3Rpb24oKXt0aGlzLl9zdXBlci5hcHBseSh0aGlzLGFyZ3VtZW50
cyksKDAsdC5nZXQpKHRoaXMsImVsZW1lbnQiKS5pbmRldGVybWluYXRlPSEhKDAsdC5nZXQpKHRo
aXMsImluZGV0ZXJtaW5hdGUiKX0sY2hhbmdlOmZ1bmN0aW9uKCl7KDAsdC5zZXQpKHRoaXMsImNo
ZWNrZWQiLHRoaXMuJCgpLnByb3AoImNoZWNrZWQiKSl9fSl9KSxlKCJlbWJlci1nbGltbWVyL2Nv
bXBvbmVudHMvbGluay10byIsWyJleHBvcnRzIiwiZW1iZXItY29uc29sZSIsImVtYmVyLWRlYnVn
IiwiZW1iZXItbWV0YWwiLCJlbWJlci1ydW50aW1lIiwiZW1iZXItdmlld3MiLCJlbWJlci1nbGlt
bWVyL3RlbXBsYXRlcy9saW5rLXRvIiwiZW1iZXItZ2xpbW1lci9jb21wb25lbnQiXSxmdW5jdGlv
bihlLHQsbixyLGksbyxzLGEpeyJ1c2Ugc3RyaWN0IgordmFyIHU9YS5kZWZhdWx0LmV4dGVuZCh7
bGF5b3V0OnMuZGVmYXVsdCx0YWdOYW1lOiJhIixjdXJyZW50V2hlbjooMCxpLmRlcHJlY2F0aW5n
QWxpYXMpKCJjdXJyZW50LXdoZW4iLHtpZDoiZW1iZXItcm91dGluZy12aWV3LmRlcHJlY2F0ZWQt
Y3VycmVudC13aGVuIix1bnRpbDoiMy4wLjAifSksImN1cnJlbnQtd2hlbiI6bnVsbCx0aXRsZTpu
dWxsLHJlbDpudWxsLHRhYmluZGV4Om51bGwsdGFyZ2V0Om51bGwsYWN0aXZlQ2xhc3M6ImFjdGl2
ZSIsbG9hZGluZ0NsYXNzOiJsb2FkaW5nIixkaXNhYmxlZENsYXNzOiJkaXNhYmxlZCIsX2lzRGlz
YWJsZWQ6ITEscmVwbGFjZTohMSxhdHRyaWJ1dGVCaW5kaW5nczpbImhyZWYiLCJ0aXRsZSIsInJl
bCIsInRhYmluZGV4IiwidGFyZ2V0Il0sY2xhc3NOYW1lQmluZGluZ3M6WyJhY3RpdmUiLCJsb2Fk
aW5nIiwiZGlzYWJsZWQiLCJ0cmFuc2l0aW9uaW5nSW4iLCJ0cmFuc2l0aW9uaW5nT3V0Il0sZXZl
bnROYW1lOiJjbGljayIsaW5pdDpmdW5jdGlvbigpe3RoaXMuX3N1cGVyLmFwcGx5KHRoaXMsYXJn
dW1lbnRzKQordmFyIGU9KDAsci5nZXQpKHRoaXMsImV2ZW50TmFtZSIpCit0aGlzLm9uKGUsdGhp
cyx0aGlzLl9pbnZva2UpfSxfcm91dGluZzppLmluamVjdC5zZXJ2aWNlKCItcm91dGluZyIpLGRp
c2FibGVkOigwLHIuY29tcHV0ZWQpKHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hMX0sc2V0OmZ1bmN0
aW9uKGUsdCl7cmV0dXJuIHZvaWQgMCE9PXQmJnRoaXMuc2V0KCJfaXNEaXNhYmxlZCIsdCksISF0
JiYoMCxyLmdldCkodGhpcywiZGlzYWJsZWRDbGFzcyIpfX0pLF9jb21wdXRlQWN0aXZlOmZ1bmN0
aW9uKGUpe2lmKCgwLHIuZ2V0KSh0aGlzLCJsb2FkaW5nIikpcmV0dXJuITEKK3ZhciB0LG49KDAs
ci5nZXQpKHRoaXMsIl9yb3V0aW5nIiksaT0oMCxyLmdldCkodGhpcywibW9kZWxzIiksbz0oMCxy
LmdldCkodGhpcywicmVzb2x2ZWRRdWVyeVBhcmFtcyIpLHM9KDAsci5nZXQpKHRoaXMsImN1cnJl
bnQtd2hlbiIpLGE9ISFzCitmb3Iocz1zfHwoMCxyLmdldCkodGhpcywicXVhbGlmaWVkUm91dGVO
YW1lIikscz1zLnNwbGl0KCIgIiksdD0wO3Q8cy5sZW5ndGg7dCsrKWlmKG4uaXNBY3RpdmVGb3JS
b3V0ZShpLG8sc1t0XSxlLGEpKXJldHVybigwLHIuZ2V0KSh0aGlzLCJhY3RpdmVDbGFzcyIpCity
ZXR1cm4hMX0sYWN0aXZlOigwLHIuY29tcHV0ZWQpKCJhdHRycy5wYXJhbXMiLCJfcm91dGluZy5j
dXJyZW50U3RhdGUiLGZ1bmN0aW9uKCl7dmFyIGU9KDAsci5nZXQpKHRoaXMsIl9yb3V0aW5nLmN1
cnJlbnRTdGF0ZSIpCityZXR1cm4hIWUmJnRoaXMuX2NvbXB1dGVBY3RpdmUoZSl9KSx3aWxsQmVB
Y3RpdmU6KDAsci5jb21wdXRlZCkoIl9yb3V0aW5nLnRhcmdldFN0YXRlIixmdW5jdGlvbigpe3Zh
ciBlPSgwLHIuZ2V0KSh0aGlzLCJfcm91dGluZyIpLHQ9KDAsci5nZXQpKGUsInRhcmdldFN0YXRl
IikKK2lmKCgwLHIuZ2V0KShlLCJjdXJyZW50U3RhdGUiKSE9PXQpcmV0dXJuISF0aGlzLl9jb21w
dXRlQWN0aXZlKHQpfSksdHJhbnNpdGlvbmluZ0luOigwLHIuY29tcHV0ZWQpKCJhY3RpdmUiLCJ3
aWxsQmVBY3RpdmUiLGZ1bmN0aW9uKCl7dmFyIGU9KDAsci5nZXQpKHRoaXMsIndpbGxCZUFjdGl2
ZSIpCityZXR1cm4gdm9pZCAwIT09ZSYmKCEoMCxyLmdldCkodGhpcywiYWN0aXZlIikmJmUmJiJl
bWJlci10cmFuc2l0aW9uaW5nLWluIil9KSx0cmFuc2l0aW9uaW5nT3V0OigwLHIuY29tcHV0ZWQp
KCJhY3RpdmUiLCJ3aWxsQmVBY3RpdmUiLGZ1bmN0aW9uKCl7dmFyIGU9KDAsci5nZXQpKHRoaXMs
IndpbGxCZUFjdGl2ZSIpCityZXR1cm4gdm9pZCAwIT09ZSYmKCgwLHIuZ2V0KSh0aGlzLCJhY3Rp
dmUiKSYmIWUmJiJlbWJlci10cmFuc2l0aW9uaW5nLW91dCIpfSksX2ludm9rZTpmdW5jdGlvbihl
KXtpZighKDAsby5pc1NpbXBsZUNsaWNrKShlKSlyZXR1cm4hMAordmFyIG49KDAsci5nZXQpKHRo
aXMsInByZXZlbnREZWZhdWx0IiksaT0oMCxyLmdldCkodGhpcywidGFyZ2V0IikKK2lmKCExIT09
biYmKGkmJiJfc2VsZiIhPT1pfHxlLnByZXZlbnREZWZhdWx0KCkpLCExPT09KDAsci5nZXQpKHRo
aXMsImJ1YmJsZXMiKSYmZS5zdG9wUHJvcGFnYXRpb24oKSwoMCxyLmdldCkodGhpcywiX2lzRGlz
YWJsZWQiKSlyZXR1cm4hMQoraWYoKDAsci5nZXQpKHRoaXMsImxvYWRpbmciKSlyZXR1cm4gdC5k
ZWZhdWx0Lndhcm4oIlRoaXMgbGluay10byBpcyBpbiBhbiBpbmFjdGl2ZSBsb2FkaW5nIHN0YXRl
IGJlY2F1c2UgYXQgbGVhc3Qgb25lIG9mIGl0cyBwYXJhbWV0ZXJzIHByZXNlbnRseSBoYXMgYSBu
dWxsL3VuZGVmaW5lZCB2YWx1ZSwgb3IgdGhlIHByb3ZpZGVkIHJvdXRlIG5hbWUgaXMgaW52YWxp
ZC4iKSwhMQoraWYoaSYmIl9zZWxmIiE9PWkpcmV0dXJuITEKK3ZhciBzPSgwLHIuZ2V0KSh0aGlz
LCJxdWFsaWZpZWRSb3V0ZU5hbWUiKSxhPSgwLHIuZ2V0KSh0aGlzLCJtb2RlbHMiKSx1PSgwLHIu
Z2V0KSh0aGlzLCJxdWVyeVBhcmFtcy52YWx1ZXMiKSxsPSgwLHIuZ2V0KSh0aGlzLCJyZXBsYWNl
IiksYz17cXVlcnlQYXJhbXM6dSxyb3V0ZU5hbWU6c307KDAsci5mbGFnZ2VkSW5zdHJ1bWVudCko
ImludGVyYWN0aW9uLmxpbmstdG8iLGMsdGhpcy5fZ2VuZXJhdGVUcmFuc2l0aW9uKGMscyxhLHUs
bCkpfSxfZ2VuZXJhdGVUcmFuc2l0aW9uOmZ1bmN0aW9uKGUsdCxuLGksbyl7dmFyIHM9KDAsci5n
ZXQpKHRoaXMsIl9yb3V0aW5nIikKK3JldHVybiBmdW5jdGlvbigpe2UudHJhbnNpdGlvbj1zLnRy
YW5zaXRpb25Ubyh0LG4saSxvKX19LHF1ZXJ5UGFyYW1zOm51bGwscXVhbGlmaWVkUm91dGVOYW1l
OigwLHIuY29tcHV0ZWQpKCJ0YXJnZXRSb3V0ZU5hbWUiLCJfcm91dGluZy5jdXJyZW50U3RhdGUi
LGZ1bmN0aW9uKCl7dmFyIGU9KDAsci5nZXQpKHRoaXMsInBhcmFtcyIpLnNsaWNlKCksdD1lW2Uu
bGVuZ3RoLTFdCityZXR1cm4gdCYmdC5pc1F1ZXJ5UGFyYW1zJiZlLnBvcCgpLCh0aGlzW2EuSEFT
X0JMT0NLXT8wPT09ZS5sZW5ndGg6MT09PWUubGVuZ3RoKT8oMCxyLmdldCkodGhpcywiX3JvdXRp
bmcuY3VycmVudFJvdXRlTmFtZSIpOigwLHIuZ2V0KSh0aGlzLCJ0YXJnZXRSb3V0ZU5hbWUiKX0p
LHJlc29sdmVkUXVlcnlQYXJhbXM6KDAsci5jb21wdXRlZCkoInF1ZXJ5UGFyYW1zIixmdW5jdGlv
bigpe3ZhciBlPXt9LHQ9KDAsci5nZXQpKHRoaXMsInF1ZXJ5UGFyYW1zIikKK2lmKCF0KXJldHVy
biBlCit2YXIgbj10LnZhbHVlcworZm9yKHZhciBpIGluIG4pbi5oYXNPd25Qcm9wZXJ0eShpKSYm
KGVbaV09bltpXSkKK3JldHVybiBlfSksaHJlZjooMCxyLmNvbXB1dGVkKSgibW9kZWxzIiwicXVh
bGlmaWVkUm91dGVOYW1lIixmdW5jdGlvbigpe2lmKCJhIj09PSgwLHIuZ2V0KSh0aGlzLCJ0YWdO
YW1lIikpe3ZhciBlPSgwLHIuZ2V0KSh0aGlzLCJxdWFsaWZpZWRSb3V0ZU5hbWUiKSx0PSgwLHIu
Z2V0KSh0aGlzLCJtb2RlbHMiKQoraWYoKDAsci5nZXQpKHRoaXMsImxvYWRpbmciKSlyZXR1cm4o
MCxyLmdldCkodGhpcywibG9hZGluZ0hyZWYiKQordmFyIG49KDAsci5nZXQpKHRoaXMsIl9yb3V0
aW5nIiksaT0oMCxyLmdldCkodGhpcywicXVlcnlQYXJhbXMudmFsdWVzIikKK3JldHVybiBuLmdl
bmVyYXRlVVJMKGUsdCxpKX19KSxsb2FkaW5nOigwLHIuY29tcHV0ZWQpKCJfbW9kZWxzQXJlTG9h
ZGVkIiwicXVhbGlmaWVkUm91dGVOYW1lIixmdW5jdGlvbigpe3ZhciBlPSgwLHIuZ2V0KSh0aGlz
LCJxdWFsaWZpZWRSb3V0ZU5hbWUiKQoraWYoISgwLHIuZ2V0KSh0aGlzLCJfbW9kZWxzQXJlTG9h
ZGVkIil8fG51bGw9PWUpcmV0dXJuKDAsci5nZXQpKHRoaXMsImxvYWRpbmdDbGFzcyIpfSksX21v
ZGVsc0FyZUxvYWRlZDooMCxyLmNvbXB1dGVkKSgibW9kZWxzIixmdW5jdGlvbigpe3ZhciBlLHQ9
KDAsci5nZXQpKHRoaXMsIm1vZGVscyIpCitmb3IoZT0wO2U8dC5sZW5ndGg7ZSsrKWlmKG51bGw9
PXRbZV0pcmV0dXJuITEKK3JldHVybiEwfSksX2dldE1vZGVsczpmdW5jdGlvbihlKXt2YXIgdCxu
LHI9ZS5sZW5ndGgtMSxvPW5ldyBBcnJheShyKQorZm9yKHQ9MDt0PHI7dCsrKXtmb3Iobj1lW3Qr
MV07aS5Db250cm9sbGVyTWl4aW4uZGV0ZWN0KG4pOyluPW4uZ2V0KCJtb2RlbCIpCitvW3RdPW59
cmV0dXJuIG99LGxvYWRpbmdIcmVmOiIjIixkaWRSZWNlaXZlQXR0cnM6ZnVuY3Rpb24oKXt2YXIg
ZT12b2lkIDAsdD0oMCxyLmdldCkodGhpcywicGFyYW1zIikKK3QmJih0PXQuc2xpY2UoKSkKK3Zh
ciBuPSgwLHIuZ2V0KSh0aGlzLCJkaXNhYmxlZFdoZW4iKQordm9pZCAwIT09biYmdGhpcy5zZXQo
ImRpc2FibGVkIixuKSx0aGlzW2EuSEFTX0JMT0NLXXx8dGhpcy5zZXQoImxpbmtUaXRsZSIsdC5z
aGlmdCgpKSx0aGlzLnNldCgidGFyZ2V0Um91dGVOYW1lIix0WzBdKQordmFyIGk9dFt0Lmxlbmd0
aC0xXQorZT1pJiZpLmlzUXVlcnlQYXJhbXM/dC5wb3AoKTp7dmFsdWVzOnt9fSx0aGlzLnNldCgi
cXVlcnlQYXJhbXMiLGUpLHQubGVuZ3RoPjE/dGhpcy5zZXQoIm1vZGVscyIsdGhpcy5fZ2V0TW9k
ZWxzKHQpKTp0aGlzLnNldCgibW9kZWxzIixbXSl9fSkKK3UudG9TdHJpbmc9ZnVuY3Rpb24oKXty
ZXR1cm4iTGlua0NvbXBvbmVudCJ9LHUucmVvcGVuQ2xhc3Moe3Bvc2l0aW9uYWxQYXJhbXM6InBh
cmFtcyJ9KSxlLmRlZmF1bHQ9dX0pLGUoImVtYmVyLWdsaW1tZXIvY29tcG9uZW50cy90ZXh0X2Fy
ZWEiLFsiZXhwb3J0cyIsImVtYmVyLWdsaW1tZXIvY29tcG9uZW50IiwiZW1iZXItdmlld3MiLCJl
bWJlci1nbGltbWVyL3RlbXBsYXRlcy9lbXB0eSJdLGZ1bmN0aW9uKGUsdCxuLHIpeyJ1c2Ugc3Ry
aWN0IgorZS5kZWZhdWx0PXQuZGVmYXVsdC5leHRlbmQobi5UZXh0U3VwcG9ydCx7Y2xhc3NOYW1l
czpbImVtYmVyLXRleHQtYXJlYSJdLGxheW91dDpyLmRlZmF1bHQsdGFnTmFtZToidGV4dGFyZWEi
LGF0dHJpYnV0ZUJpbmRpbmdzOlsicm93cyIsImNvbHMiLCJuYW1lIiwic2VsZWN0aW9uRW5kIiwi
c2VsZWN0aW9uU3RhcnQiLCJ3cmFwIiwibGFuZyIsImRpciIsInZhbHVlIl0scm93czpudWxsLGNv
bHM6bnVsbH0pfSksZSgiZW1iZXItZ2xpbW1lci9jb21wb25lbnRzL3RleHRfZmllbGQiLFsiZXhw
b3J0cyIsImVtYmVyLW1ldGFsIiwiZW1iZXItZW52aXJvbm1lbnQiLCJlbWJlci1nbGltbWVyL2Nv
bXBvbmVudCIsImVtYmVyLWdsaW1tZXIvdGVtcGxhdGVzL2VtcHR5IiwiZW1iZXItdmlld3MiXSxm
dW5jdGlvbihlLHQsbixyLGksbyl7InVzZSBzdHJpY3QiCitmdW5jdGlvbiBzKGUpe2lmKGUgaW4g
dSlyZXR1cm4gdVtlXQoraWYoIW4uZW52aXJvbm1lbnQuaGFzRE9NKXJldHVybiB1W2VdPWUsZQor
YXx8KGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKSkKK3RyeXthLnR5cGU9ZX1jYXRj
aChlKXt9cmV0dXJuIHVbZV09YS50eXBlPT09ZX12YXIgYT12b2lkIDAsdT1PYmplY3QuY3JlYXRl
KG51bGwpCitlLmRlZmF1bHQ9ci5kZWZhdWx0LmV4dGVuZChvLlRleHRTdXBwb3J0LHtsYXlvdXQ6
aS5kZWZhdWx0LGNsYXNzTmFtZXM6WyJlbWJlci10ZXh0LWZpZWxkIl0sdGFnTmFtZToiaW5wdXQi
LGF0dHJpYnV0ZUJpbmRpbmdzOlsiYWNjZXB0IiwiYXV0b2NvbXBsZXRlIiwiYXV0b3NhdmUiLCJk
aXIiLCJmb3JtYWN0aW9uIiwiZm9ybWVuY3R5cGUiLCJmb3JtbWV0aG9kIiwiZm9ybW5vdmFsaWRh
dGUiLCJmb3JtdGFyZ2V0IiwiaGVpZ2h0IiwiaW5wdXRtb2RlIiwibGFuZyIsImxpc3QiLCJtYXgi
LCJtaW4iLCJtdWx0aXBsZSIsIm5hbWUiLCJwYXR0ZXJuIiwic2l6ZSIsInN0ZXAiLCJ0eXBlIiwi
dmFsdWUiLCJ3aWR0aCJdLHZhbHVlOiIiLHR5cGU6KDAsdC5jb21wdXRlZCkoe2dldDpmdW5jdGlv
bigpe3JldHVybiJ0ZXh0In0sc2V0OmZ1bmN0aW9uKGUsdCl7dmFyIG49InRleHQiCityZXR1cm4g
cyh0KSYmKG49dCksbn19KSxzaXplOm51bGwscGF0dGVybjpudWxsLG1pbjpudWxsLG1heDpudWxs
fSl9KSxlKCJlbWJlci1nbGltbWVyL2RvbSIsWyJleHBvcnRzIiwiQGdsaW1tZXIvcnVudGltZSIs
IkBnbGltbWVyL25vZGUiXSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiCitPYmplY3QuZGVm
aW5lUHJvcGVydHkoZSwiRE9NQ2hhbmdlcyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7
cmV0dXJuIHQuRE9NQ2hhbmdlc319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiRE9NVHJlZUNv
bnN0cnVjdGlvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHQuRE9NVHJl
ZUNvbnN0cnVjdGlvbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiTm9kZURPTVRyZWVDb25z
dHJ1Y3Rpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBuLk5vZGVET01U
cmVlQ29uc3RydWN0aW9ufX0pfSksZSgiZW1iZXItZ2xpbW1lci9lbnZpcm9ubWVudCIsWyJleHBv
cnRzIiwiZW1iZXItYmFiZWwiLCJlbWJlci11dGlscyIsImVtYmVyLW1ldGFsIiwiZW1iZXItZGVi
dWciLCJlbWJlci12aWV3cyIsIkBnbGltbWVyL3J1bnRpbWUiLCJlbWJlci1nbGltbWVyL3N5bnRh
eC9jdXJseS1jb21wb25lbnQiLCJlbWJlci1nbGltbWVyL3N5bnRheCIsImVtYmVyLWdsaW1tZXIv
dXRpbHMvaXRlcmFibGUiLCJlbWJlci1nbGltbWVyL3V0aWxzL3JlZmVyZW5jZXMiLCJlbWJlci1n
bGltbWVyL3V0aWxzL2RlYnVnLXN0YWNrIiwiZW1iZXItZ2xpbW1lci9oZWxwZXJzL2lmLXVubGVz
cyIsImVtYmVyLWdsaW1tZXIvaGVscGVycy9hY3Rpb24iLCJlbWJlci1nbGltbWVyL2hlbHBlcnMv
Y29tcG9uZW50IiwiZW1iZXItZ2xpbW1lci9oZWxwZXJzL2NvbmNhdCIsImVtYmVyLWdsaW1tZXIv
aGVscGVycy9nZXQiLCJlbWJlci1nbGltbWVyL2hlbHBlcnMvaGFzaCIsImVtYmVyLWdsaW1tZXIv
aGVscGVycy9sb2MiLCJlbWJlci1nbGltbWVyL2hlbHBlcnMvbG9nIiwiZW1iZXItZ2xpbW1lci9o
ZWxwZXJzL211dCIsImVtYmVyLWdsaW1tZXIvaGVscGVycy9yZWFkb25seSIsImVtYmVyLWdsaW1t
ZXIvaGVscGVycy91bmJvdW5kIiwiZW1iZXItZ2xpbW1lci9oZWxwZXJzLy1jbGFzcyIsImVtYmVy
LWdsaW1tZXIvaGVscGVycy8taW5wdXQtdHlwZSIsImVtYmVyLWdsaW1tZXIvaGVscGVycy9xdWVy
eS1wYXJhbSIsImVtYmVyLWdsaW1tZXIvaGVscGVycy9lYWNoLWluIiwiZW1iZXItZ2xpbW1lci9o
ZWxwZXJzLy1ub3JtYWxpemUtY2xhc3MiLCJlbWJlci1nbGltbWVyL2hlbHBlcnMvLWh0bWwtc2Fm
ZSIsImVtYmVyLWdsaW1tZXIvcHJvdG9jb2wtZm9yLXVybCIsImVtYmVyLWdsaW1tZXIvbW9kaWZp
ZXJzL2FjdGlvbiJdLGZ1bmN0aW9uKGUsdCxuLHIsaSxvLHMsYSx1LGwsYyxwLGYsaCxkLG0sZyx5
LHYsYixfLHcsRSx4LEMsTyxBLFQsUyxSLGspeyJ1c2Ugc3RyaWN0IgorZnVuY3Rpb24gTihlKXty
ZXR1cm57b2JqZWN0OiJjb21wb25lbnQ6IitlfX12YXIgUD1mdW5jdGlvbihlKXtmdW5jdGlvbiBp
KGkpe3ZhciB1PWlbbi5PV05FUl0sbD0oMCx0LnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4pKHRo
aXMsZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpCityZXR1cm4gbC5vd25lcj11LGwuaXNJbnRlcmFj
dGl2ZT11Lmxvb2t1cCgiLWVudmlyb25tZW50Om1haW4iKS5pc0ludGVyYWN0aXZlLGwuZGVzdHJv
eWVkQ29tcG9uZW50cz1bXSwoMCxSLmRlZmF1bHQpKGwpLGwuX2RlZmluaXRpb25DYWNoZT1uZXcg
ci5DYWNoZSgyZTMsZnVuY3Rpb24oZSl7dmFyIHQ9ZS5uYW1lLG49ZS5zb3VyY2Uscj1lLm93bmVy
LGk9KDAsby5sb29rdXBDb21wb25lbnQpKHIsdCx7c291cmNlOm59KSxzPWkuY29tcG9uZW50LHU9
aS5sYXlvdXQKK2lmKHN8fHUpcmV0dXJuIG5ldyBhLkN1cmx5Q29tcG9uZW50RGVmaW5pdGlvbih0
LHMsdSl9LGZ1bmN0aW9uKGUpe3ZhciB0PWUubmFtZSxyPWUuc291cmNlLGk9ZS5vd25lcixvPXIm
JmkuX3Jlc29sdmVMb2NhbExvb2t1cE5hbWUodCxyKXx8dAorcmV0dXJuKDAsbi5ndWlkRm9yKShp
KSsifCIrb30pLGwuX3RlbXBsYXRlQ2FjaGU9bmV3IHIuQ2FjaGUoMWUzLGZ1bmN0aW9uKGUpe3Zh
ciB0LHI9ZS5UZW1wbGF0ZSxpPWUub3duZXIKK3JldHVybiByLmNyZWF0ZT9yLmNyZWF0ZSgodD17
ZW52Omx9LHRbbi5PV05FUl09aSx0KSk6cn0sZnVuY3Rpb24oZSl7dmFyIHQ9ZS5UZW1wbGF0ZSxy
PWUub3duZXIKK3JldHVybigwLG4uZ3VpZEZvcikocikrInwiK3QuaWR9KSxsLl9jb21waWxlckNh
Y2hlPW5ldyByLkNhY2hlKDEwLGZ1bmN0aW9uKGUpe3JldHVybiBuZXcgci5DYWNoZSgyZTMsZnVu
Y3Rpb24odCl7dmFyIG49bmV3IGUodCkKK3JldHVybigwLHMuY29tcGlsZUxheW91dCkobixsKX0s
ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5tZXRhLm93bmVyCityZXR1cm4oMCxuLmd1aWRGb3IpKHQpKyJ8
IitlLmlkfSl9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmlkfSksbC5idWlsdEluTW9kaWZpZXJzPXth
Y3Rpb246bmV3IGsuZGVmYXVsdH0sbC5idWlsdEluSGVscGVycz17aWY6Zi5pbmxpbmVJZixhY3Rp
b246aC5kZWZhdWx0LGNvbXBvbmVudDpkLmRlZmF1bHQsY29uY2F0Om0uZGVmYXVsdCxnZXQ6Zy5k
ZWZhdWx0LGhhc2g6eS5kZWZhdWx0LGxvYzp2LmRlZmF1bHQsbG9nOmIuZGVmYXVsdCxtdXQ6Xy5k
ZWZhdWx0LCJxdWVyeS1wYXJhbXMiOk8uZGVmYXVsdCxyZWFkb25seTp3LmRlZmF1bHQsdW5ib3Vu
ZDpFLmRlZmF1bHQsdW5sZXNzOmYuaW5saW5lVW5sZXNzLCItY2xhc3MiOnguZGVmYXVsdCwiLWVh
Y2gtaW4iOkEuZGVmYXVsdCwiLWlucHV0LXR5cGUiOkMuZGVmYXVsdCwiLW5vcm1hbGl6ZS1jbGFz
cyI6VC5kZWZhdWx0LCItaHRtbC1zYWZlIjpTLmRlZmF1bHQsIi1nZXQtZHluYW1pYy12YXIiOnMu
Z2V0RHluYW1pY1Zhcn0sbH1yZXR1cm4oMCx0LmluaGVyaXRzKShpLGUpLGkuY3JlYXRlPWZ1bmN0
aW9uKGUpe3JldHVybiBuZXcgaShlKX0saS5wcm90b3R5cGUubWFjcm9zPWZ1bmN0aW9uKCl7dmFy
IHQ9ZS5wcm90b3R5cGUubWFjcm9zLmNhbGwodGhpcykKK3JldHVybigwLHUucG9wdWxhdGVNYWNy
b3MpKHQuYmxvY2tzLHQuaW5saW5lcyksdH0saS5wcm90b3R5cGUuaGFzQ29tcG9uZW50RGVmaW5p
dGlvbj1mdW5jdGlvbigpe3JldHVybiExfSxpLnByb3RvdHlwZS5nZXRDb21wb25lbnREZWZpbml0
aW9uPWZ1bmN0aW9uKGUsdCl7dmFyIG49ZVswXSxpPSgwLHIuX2luc3RydW1lbnRTdGFydCkoInJl
bmRlci5nZXRDb21wb25lbnREZWZpbml0aW9uIixOLG4pLG89dC5nZXRNZXRhKCkscz1vLm93bmVy
LGE9by5tb2R1bGVOYW1lJiYidGVtcGxhdGU6IitvLm1vZHVsZU5hbWUsdT10aGlzLl9kZWZpbml0
aW9uQ2FjaGUuZ2V0KHtuYW1lOm4sc291cmNlOmEsb3duZXI6c30pCityZXR1cm4gaSgpLHV9LGku
cHJvdG90eXBlLmdldFRlbXBsYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX3RlbXBsYXRl
Q2FjaGUuZ2V0KHtUZW1wbGF0ZTplLG93bmVyOnR9KX0saS5wcm90b3R5cGUuZ2V0Q29tcGlsZWRC
bG9jaz1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLl9jb21waWxlckNhY2hlLmdldChlKS5nZXQo
dCl9LGkucHJvdG90eXBlLmhhc1BhcnRpYWw9ZnVuY3Rpb24oZSx0KXt2YXIgbj10LmdldE1ldGEo
KSxyPW4ub3duZXIKK3JldHVybigwLG8uaGFzUGFydGlhbCkoZSxyKX0saS5wcm90b3R5cGUubG9v
a3VwUGFydGlhbD1mdW5jdGlvbihlLHQpe3ZhciBuPXQuZ2V0TWV0YSgpLHI9bi5vd25lcixpPXt0
ZW1wbGF0ZTooMCxvLmxvb2t1cFBhcnRpYWwpKGUscil9CitpZihpLnRlbXBsYXRlKXJldHVybiBp
Cit0aHJvdyBuZXcgRXJyb3IoZSsiIGlzIG5vdCBhIHBhcnRpYWwiKX0saS5wcm90b3R5cGUuaGFz
SGVscGVyPWZ1bmN0aW9uKGUsdCl7aWYodGhpcy5idWlsdEluSGVscGVyc1tlXSlyZXR1cm4hMAor
dmFyIG49dC5nZXRNZXRhKCkscj1uLm93bmVyLGk9e3NvdXJjZToidGVtcGxhdGU6IituLm1vZHVs
ZU5hbWV9CityZXR1cm4gci5oYXNSZWdpc3RyYXRpb24oImhlbHBlcjoiK2UsaSl8fHIuaGFzUmVn
aXN0cmF0aW9uKCJoZWxwZXI6IitlKX0saS5wcm90b3R5cGUubG9va3VwSGVscGVyPWZ1bmN0aW9u
KGUsdCl7dmFyIG49dGhpcy5idWlsdEluSGVscGVyc1tlXQoraWYobilyZXR1cm4gbgordmFyIHI9
dC5nZXRNZXRhKCksaT1yLm93bmVyLG89ci5tb2R1bGVOYW1lJiZ7c291cmNlOiJ0ZW1wbGF0ZToi
K3IubW9kdWxlTmFtZX18fHt9LHM9aS5mYWN0b3J5Rm9yKCJoZWxwZXI6IitlLG8pfHxpLmZhY3Rv
cnlGb3IoImhlbHBlcjoiK2UpCitpZihzLmNsYXNzLmlzSGVscGVySW5zdGFuY2UpcmV0dXJuIGZ1
bmN0aW9uKGUsdCl7cmV0dXJuIGMuU2ltcGxlSGVscGVyUmVmZXJlbmNlLmNyZWF0ZShzLmNsYXNz
LmNvbXB1dGUsdCl9CitpZihzLmNsYXNzLmlzSGVscGVyRmFjdG9yeSlyZXR1cm4gZnVuY3Rpb24o
ZSx0KXtyZXR1cm4gYy5DbGFzc0Jhc2VkSGVscGVyUmVmZXJlbmNlLmNyZWF0ZShzLGUsdCl9Cit0
aHJvdyBuZXcgRXJyb3IoZSsiIGlzIG5vdCBhIGhlbHBlciIpfSxpLnByb3RvdHlwZS5oYXNNb2Rp
Zmllcj1mdW5jdGlvbihlKXtyZXR1cm4hIXRoaXMuYnVpbHRJbk1vZGlmaWVyc1tlXX0saS5wcm90
b3R5cGUubG9va3VwTW9kaWZpZXI9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5idWlsdEluTW9kaWZp
ZXJzW2VdCitpZih0KXJldHVybiB0Cit0aHJvdyBuZXcgRXJyb3IoZSsiIGlzIG5vdCBhIG1vZGlm
aWVyIil9LGkucHJvdG90eXBlLnRvQ29uZGl0aW9uYWxSZWZlcmVuY2U9ZnVuY3Rpb24oZSl7cmV0
dXJuIGMuQ29uZGl0aW9uYWxSZWZlcmVuY2UuY3JlYXRlKGUpfSxpLnByb3RvdHlwZS5pdGVyYWJs
ZUZvcj1mdW5jdGlvbihlLHQpe3ZhciBuPXQubmFtZWQuZ2V0KCJrZXkiKS52YWx1ZSgpCityZXR1
cm4oMCxsLmRlZmF1bHQpKGUsbil9LGkucHJvdG90eXBlLnNjaGVkdWxlSW5zdGFsbE1vZGlmaWVy
PWZ1bmN0aW9uKCl7dmFyIHQKK3RoaXMuaXNJbnRlcmFjdGl2ZSYmKHQ9ZS5wcm90b3R5cGUuc2No
ZWR1bGVJbnN0YWxsTW9kaWZpZXIpLmNhbGwuYXBwbHkodCxbdGhpc10uY29uY2F0KEFycmF5LnBy
b3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpKX0saS5wcm90b3R5cGUuc2NoZWR1bGVVcGRh
dGVNb2RpZmllcj1mdW5jdGlvbigpe3ZhciB0Cit0aGlzLmlzSW50ZXJhY3RpdmUmJih0PWUucHJv
dG90eXBlLnNjaGVkdWxlVXBkYXRlTW9kaWZpZXIpLmNhbGwuYXBwbHkodCxbdGhpc10uY29uY2F0
KEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpKX0saS5wcm90b3R5cGUuZGlk
RGVzdHJveT1mdW5jdGlvbihlKXtlLmRlc3Ryb3koKX0saS5wcm90b3R5cGUuYmVnaW49ZnVuY3Rp
b24oKXt0aGlzLmluVHJhbnNhY3Rpb249ITAsZS5wcm90b3R5cGUuYmVnaW4uY2FsbCh0aGlzKX0s
aS5wcm90b3R5cGUuY29tbWl0PWZ1bmN0aW9uKCl7dmFyIHQsbj10aGlzLmRlc3Ryb3llZENvbXBv
bmVudHMKK2Zvcih0aGlzLmRlc3Ryb3llZENvbXBvbmVudHM9W10sdD0wO3Q8bi5sZW5ndGg7dCsr
KW5bdF0uZGVzdHJveSgpCitlLnByb3RvdHlwZS5jb21taXQuY2FsbCh0aGlzKSx0aGlzLmluVHJh
bnNhY3Rpb249ITF9LGl9KHMuRW52aXJvbm1lbnQpCitlLmRlZmF1bHQ9UH0pLGUoImVtYmVyLWds
aW1tZXIvaGVscGVyIixbImV4cG9ydHMiLCJlbWJlci11dGlscyIsImVtYmVyLXJ1bnRpbWUiLCJA
Z2xpbW1lci9yZWZlcmVuY2UiXSxmdW5jdGlvbihlLHQsbixyKXsidXNlIHN0cmljdCIKK2UuUkVD
T01QVVRFX1RBRz12b2lkIDAsZS5oZWxwZXI9ZnVuY3Rpb24oZSl7cmV0dXJue2lzSGVscGVySW5z
dGFuY2U6ITAsY29tcHV0ZTplfX0KK3ZhciBpPWUuUkVDT01QVVRFX1RBRz0oMCx0LnN5bWJvbCko
IlJFQ09NUFVURV9UQUciKSxvPW4uRnJhbWV3b3JrT2JqZWN0LmV4dGVuZCh7aXNIZWxwZXJJbnN0
YW5jZTohMCxpbml0OmZ1bmN0aW9uKCl7dGhpcy5fc3VwZXIuYXBwbHkodGhpcyxhcmd1bWVudHMp
LHRoaXNbaV09bmV3IHIuRGlydHlhYmxlVGFnfSxyZWNvbXB1dGU6ZnVuY3Rpb24oKXt0aGlzW2ld
LmRpcnR5KCl9fSkKK28ucmVvcGVuQ2xhc3Moe2lzSGVscGVyRmFjdG9yeTohMH0pLGUuZGVmYXVs
dD1vfSksZSgiZW1iZXItZ2xpbW1lci9oZWxwZXJzLy1jbGFzcyIsWyJleHBvcnRzIiwiZW1iZXIt
Z2xpbW1lci91dGlscy9yZWZlcmVuY2VzIiwiZW1iZXItcnVudGltZSJdLGZ1bmN0aW9uKGUsdCxu
KXsidXNlIHN0cmljdCIKK2Z1bmN0aW9uIHIoZSl7dmFyIHQ9ZS5wb3NpdGlvbmFsLHI9dC5hdCgw
KSxpPXQubGVuZ3RoLG89ci52YWx1ZSgpCityZXR1cm4hMD09PW8/aT4xP24uU3RyaW5nLmRhc2hl
cml6ZSh0LmF0KDEpLnZhbHVlKCkpOm51bGw6ITE9PT1vP2k+Mj9uLlN0cmluZy5kYXNoZXJpemUo
dC5hdCgyKS52YWx1ZSgpKTpudWxsOm99ZS5kZWZhdWx0PWZ1bmN0aW9uKGUsbil7cmV0dXJuIG5l
dyB0LkludGVybmFsSGVscGVyUmVmZXJlbmNlKHIsbil9fSksZSgiZW1iZXItZ2xpbW1lci9oZWxw
ZXJzLy1odG1sLXNhZmUiLFsiZXhwb3J0cyIsImVtYmVyLWdsaW1tZXIvdXRpbHMvcmVmZXJlbmNl
cyIsImVtYmVyLWdsaW1tZXIvdXRpbHMvc3RyaW5nIl0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3Ry
aWN0IgorZnVuY3Rpb24gcihlKXt2YXIgdD1lLnBvc2l0aW9uYWwscj10LmF0KDApCityZXR1cm4g
bmV3IG4uU2FmZVN0cmluZyhyLnZhbHVlKCkpfWUuZGVmYXVsdD1mdW5jdGlvbihlLG4pe3JldHVy
biBuZXcgdC5JbnRlcm5hbEhlbHBlclJlZmVyZW5jZShyLG4pfX0pLGUoImVtYmVyLWdsaW1tZXIv
aGVscGVycy8taW5wdXQtdHlwZSIsWyJleHBvcnRzIiwiZW1iZXItZ2xpbW1lci91dGlscy9yZWZl
cmVuY2VzIl0sZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCIKK2Z1bmN0aW9uIG4oZSl7dmFyIHQ9
ZS5wb3NpdGlvbmFsCitlLm5hbWVkCityZXR1cm4iY2hlY2tib3giPT09dC5hdCgwKS52YWx1ZSgp
PyItY2hlY2tib3giOiItdGV4dC1maWVsZCJ9ZS5kZWZhdWx0PWZ1bmN0aW9uKGUscil7cmV0dXJu
IG5ldyB0LkludGVybmFsSGVscGVyUmVmZXJlbmNlKG4scil9fSksZSgiZW1iZXItZ2xpbW1lci9o
ZWxwZXJzLy1ub3JtYWxpemUtY2xhc3MiLFsiZXhwb3J0cyIsImVtYmVyLWdsaW1tZXIvdXRpbHMv
cmVmZXJlbmNlcyIsImVtYmVyLXJ1bnRpbWUiXSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3Qi
CitmdW5jdGlvbiByKGUpe3ZhciB0PWUucG9zaXRpb25hbCxyPShlLm5hbWVkLHQuYXQoMCkudmFs
dWUoKS5zcGxpdCgiLiIpKSxpPXJbci5sZW5ndGgtMV0sbz10LmF0KDEpLnZhbHVlKCkKK3JldHVy
biEwPT09bz9uLlN0cmluZy5kYXNoZXJpemUoaSk6b3x8MD09PW8/U3RyaW5nKG8pOiIifWUuZGVm
YXVsdD1mdW5jdGlvbihlLG4pe3JldHVybiBuZXcgdC5JbnRlcm5hbEhlbHBlclJlZmVyZW5jZShy
LG4pfX0pLGUoImVtYmVyLWdsaW1tZXIvaGVscGVycy9hY3Rpb24iLFsiZXhwb3J0cyIsImVtYmVy
LXV0aWxzIiwiZW1iZXItbWV0YWwiLCJlbWJlci1nbGltbWVyL3V0aWxzL3JlZmVyZW5jZXMiLCJA
Z2xpbW1lci9ydW50aW1lIiwiQGdsaW1tZXIvcmVmZXJlbmNlIiwiZW1iZXItZGVidWciXSxmdW5j
dGlvbihlLHQsbixyLGksbyxzKXsidXNlIHN0cmljdCIKK2Z1bmN0aW9uIGEoZSl7cmV0dXJuIGV9
ZnVuY3Rpb24gdShlLHQpe3ZhciByPW51bGwKK3QubGVuZ3RoPjAmJihyPWZ1bmN0aW9uKGUpe3Jl
dHVybiB0LnZhbHVlKCkuY29uY2F0KGUpfSkKK3ZhciBpPW51bGwKK3JldHVybiBlJiYoaT1mdW5j
dGlvbih0KXt2YXIgcj1lLnZhbHVlKCkKK3JldHVybiByJiZ0Lmxlbmd0aD4wJiYodFswXT0oMCxu
LmdldCkodFswXSxyKSksdH0pLHImJmk/ZnVuY3Rpb24oZSl7cmV0dXJuIGkocihlKSl9OnJ8fGl8
fGF9ZnVuY3Rpb24gbChlLHQsbixyLGkpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBjKGUsdC52
YWx1ZSgpLG4udmFsdWUoKSxyLGkpLmFwcGx5KHZvaWQgMCxhcmd1bWVudHMpfX1mdW5jdGlvbiBj
KGUsdCxyLGksbyl7dmFyIHMsYT12b2lkIDAsdT12b2lkIDAKK3JldHVybiJmdW5jdGlvbiI9PXR5
cGVvZiByW3BdPyhhPXIsdT1yW3BdKToocz10eXBlb2Ygciwic3RyaW5nIj09PXM/KGE9dCx1PXQu
YWN0aW9ucyYmdC5hY3Rpb25zW3JdKToiZnVuY3Rpb24iPT09cyYmKGE9ZSx1PXIpKSxmdW5jdGlv
bigpe2ZvcihlPWFyZ3VtZW50cy5sZW5ndGgsdD1BcnJheShlKSxyPTA7cjxlO3IrKyl0W3JdPWFy
Z3VtZW50c1tyXQordmFyIGUsdCxyLG89e3RhcmdldDphLGFyZ3M6dCxsYWJlbDoiQGdsaW1tZXIv
Y2xvc3VyZS1hY3Rpb24ifQorcmV0dXJuKDAsbi5mbGFnZ2VkSW5zdHJ1bWVudCkoImludGVyYWN0
aW9uLmVtYmVyLWFjdGlvbiIsbyxmdW5jdGlvbigpe3JldHVybiBuLnJ1bi5qb2luLmFwcGx5KG4u
cnVuLFthLHVdLmNvbmNhdChpKHQpKSl9KX19ZS5BQ1RJT049ZS5JTlZPS0U9dm9pZCAwLGUuZGVm
YXVsdD1mdW5jdGlvbihlLHQpe3ZhciBuPXQubmFtZWQscz10LnBvc2l0aW9uYWwsYT1zLmF0KDAp
LGg9cy5hdCgxKSxkPWguX3Byb3BlcnR5S2V5LG09dm9pZCAwCittPTI9PT1zLmxlbmd0aD9pLkV2
YWx1YXRlZFBvc2l0aW9uYWxBcmdzLmVtcHR5KCk6aS5FdmFsdWF0ZWRQb3NpdGlvbmFsQXJncy5j
cmVhdGUocy52YWx1ZXMuc2xpY2UoMikpCit2YXIgZz1uLmhhcygidGFyZ2V0Iik/bi5nZXQoInRh
cmdldCIpOmEseT11KG4uaGFzKCJ2YWx1ZSIpJiZuLmdldCgidmFsdWUiKSxtKSx2PXZvaWQgMAor
cmV0dXJuIHY9ImZ1bmN0aW9uIj09dHlwZW9mIGhbcF0/YyhoLGgsaFtwXSx5LGQpOigwLG8uaXND
b25zdCkoZykmJigwLG8uaXNDb25zdCkoaCk/YyhhLnZhbHVlKCksZy52YWx1ZSgpLGgudmFsdWUo
KSx5LGQpOmwoYS52YWx1ZSgpLGcsaCx5LGQpLHZbZl09ITAsbmV3IHIuVW5ib3VuZFJlZmVyZW5j
ZSh2KX0KK3ZhciBwPWUuSU5WT0tFPSgwLHQuc3ltYm9sKSgiSU5WT0tFIiksZj1lLkFDVElPTj0o
MCx0LnN5bWJvbCkoIkFDVElPTiIpfSksZSgiZW1iZXItZ2xpbW1lci9oZWxwZXJzL2NvbXBvbmVu
dCIsWyJleHBvcnRzIiwiZW1iZXItYmFiZWwiLCJlbWJlci11dGlscyIsImVtYmVyLWdsaW1tZXIv
dXRpbHMvcmVmZXJlbmNlcyIsImVtYmVyLWdsaW1tZXIvc3ludGF4L2N1cmx5LWNvbXBvbmVudCIs
IkBnbGltbWVyL3J1bnRpbWUiLCJlbWJlci1kZWJ1ZyJdLGZ1bmN0aW9uKGUsdCxuLHIsaSxvLHMp
eyJ1c2Ugc3RyaWN0IgorZnVuY3Rpb24gYShlLHQpe3ZhciBuPXUoZSx0KQorcmV0dXJuIG5ldyBp
LkN1cmx5Q29tcG9uZW50RGVmaW5pdGlvbihlLm5hbWUsZS5Db21wb25lbnRDbGFzcyxlLnRlbXBs
YXRlLG4pfWZ1bmN0aW9uIHUoZSx0KXt2YXIgcixzLGEsdT1lLmFyZ3MsbD1lLkNvbXBvbmVudENs
YXNzLHA9bC5jbGFzcy5wb3NpdGlvbmFsUGFyYW1zLGY9dC5wb3NpdGlvbmFsLnZhbHVlcyxoPWYu
c2xpY2UoMSkKK3AmJmgubGVuZ3RoJiYoMCxpLnZhbGlkYXRlUG9zaXRpb25hbFBhcmFtZXRlcnMp
KHQubmFtZWQsaCxwKQordmFyIGQ9e30KK2lmKCJzdHJpbmciIT10eXBlb2YgcCYmcCYmcC5sZW5n
dGg+MCl7Zm9yKHI9TWF0aC5taW4ocC5sZW5ndGgsaC5sZW5ndGgpLHM9MDtzPHI7cysrKWE9cFtz
XSxkW2FdPWhbc10KK2gubGVuZ3RoPTB9dmFyIG09dSYmdS5uYW1lZCYmdS5uYW1lZC5tYXB8fHt9
LGc9dSYmdS5wb3NpdGlvbmFsJiZ1LnBvc2l0aW9uYWwudmFsdWVzfHxbXSx5PW5ldyBBcnJheShN
YXRoLm1heChnLmxlbmd0aCxoLmxlbmd0aCkpCit5LnNwbGljZS5hcHBseSh5LFswLGcubGVuZ3Ro
XS5jb25jYXQoZykpLHkuc3BsaWNlLmFwcGx5KHksWzAsaC5sZW5ndGhdLmNvbmNhdChoKSkKK3Zh
ciB2PSgwLG4uYXNzaWduKSh7fSxtLGQsdC5uYW1lZC5tYXApCityZXR1cm4gby5FdmFsdWF0ZWRB
cmdzLmNyZWF0ZShvLkV2YWx1YXRlZFBvc2l0aW9uYWxBcmdzLmNyZWF0ZSh5KSxvLkV2YWx1YXRl
ZE5hbWVkQXJncy5jcmVhdGUodiksYyl9ZS5DbG9zdXJlQ29tcG9uZW50UmVmZXJlbmNlPXZvaWQg
MCxlLmRlZmF1bHQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBsLmNyZWF0ZSh0LG4sZS5lbnYpfQor
dmFyIGw9ZS5DbG9zdXJlQ29tcG9uZW50UmVmZXJlbmNlPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4o
bixyLGkpe3ZhciBvPSgwLHQucG9zc2libGVDb25zdHJ1Y3RvclJldHVybikodGhpcyxlLmNhbGwo
dGhpcykpLHM9bi5wb3NpdGlvbmFsLmF0KDApCityZXR1cm4gby5kZWZSZWY9cyxvLnRhZz1zLnRh
ZyxvLmVudj1pLG8uc3ltYm9sVGFibGU9cixvLmFyZ3M9bixvLmxhc3REZWZpbml0aW9uPXZvaWQg
MCxvLmxhc3ROYW1lPXZvaWQgMCxvfXJldHVybigwLHQuaW5oZXJpdHMpKG4sZSksbi5jcmVhdGU9
ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBuZXcgbihlLHQscil9LG4ucHJvdG90eXBlLmNvbXB1dGU9
ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmFyZ3MsdD10aGlzLmRlZlJlZixuPXRoaXMuZW52LHI9dGhp
cy5zeW1ib2xUYWJsZSxpPXRoaXMubGFzdERlZmluaXRpb24scz10aGlzLmxhc3ROYW1lLHU9dC52
YWx1ZSgpLGw9bnVsbAoraWYodSYmdT09PXMpcmV0dXJuIGkKK2lmKHRoaXMubGFzdE5hbWU9dSwi
c3RyaW5nIj09dHlwZW9mIHUpbD1uLmdldENvbXBvbmVudERlZmluaXRpb24oW3VdLHIpCitlbHNl
e2lmKCEoMCxvLmlzQ29tcG9uZW50RGVmaW5pdGlvbikodSkpcmV0dXJuIG51bGwKK2w9dX12YXIg
Yz1hKGwsZSkKK3JldHVybiB0aGlzLmxhc3REZWZpbml0aW9uPWMsY30sbn0oci5DYWNoZWRSZWZl
cmVuY2UpLGM9e2RlZmF1bHQ6bnVsbCxpbnZlcnNlOm51bGx9fSksZSgiZW1iZXItZ2xpbW1lci9o
ZWxwZXJzL2NvbmNhdCIsWyJleHBvcnRzIiwiZW1iZXItZ2xpbW1lci91dGlscy9yZWZlcmVuY2Vz
IiwiQGdsaW1tZXIvcnVudGltZSJdLGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCIKK2Z1bmN0
aW9uIHIoZSl7cmV0dXJuIGUucG9zaXRpb25hbC52YWx1ZSgpLm1hcChuLm5vcm1hbGl6ZVRleHRW
YWx1ZSkuam9pbigiIil9ZS5kZWZhdWx0PWZ1bmN0aW9uKGUsbil7cmV0dXJuIG5ldyB0LkludGVy
bmFsSGVscGVyUmVmZXJlbmNlKHIsbil9fSksZSgiZW1iZXItZ2xpbW1lci9oZWxwZXJzL2VhY2gt
aW4iLFsiZXhwb3J0cyIsImVtYmVyLXV0aWxzIl0sZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCIK
K2UuaXNFYWNoSW49ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmVbbl19LGUuZGVmYXVsdD1mdW5jdGlv
bihlLHQpe3ZhciByPU9iamVjdC5jcmVhdGUodC5wb3NpdGlvbmFsLmF0KDApKQorcmV0dXJuIHJb
bl09ITAscn0KK3ZhciBuPSgwLHQuc3ltYm9sKSgiRUFDSF9JTiIpfSksZSgiZW1iZXItZ2xpbW1l
ci9oZWxwZXJzL2dldCIsWyJleHBvcnRzIiwiZW1iZXItYmFiZWwiLCJlbWJlci1tZXRhbCIsImVt
YmVyLWdsaW1tZXIvdXRpbHMvcmVmZXJlbmNlcyIsIkBnbGltbWVyL3JlZmVyZW5jZSJdLGZ1bmN0
aW9uKGUsdCxuLHIsaSl7InVzZSBzdHJpY3QiCitlLmRlZmF1bHQ9ZnVuY3Rpb24oZSx0KXtyZXR1
cm4gby5jcmVhdGUodC5wb3NpdGlvbmFsLmF0KDApLHQucG9zaXRpb25hbC5hdCgxKSl9Cit2YXIg
bz1mdW5jdGlvbihlKXtmdW5jdGlvbiBvKG4scil7dmFyIG89KDAsdC5wb3NzaWJsZUNvbnN0cnVj
dG9yUmV0dXJuKSh0aGlzLGUuY2FsbCh0aGlzKSkKK28uc291cmNlUmVmZXJlbmNlPW4sby5wYXRo
UmVmZXJlbmNlPXIsby5sYXN0UGF0aD1udWxsLG8uaW5uZXJSZWZlcmVuY2U9bnVsbAordmFyIHM9
by5pbm5lclRhZz1uZXcgaS5VcGRhdGFibGVUYWcoaS5DT05TVEFOVF9UQUcpCityZXR1cm4gby50
YWc9KDAsaS5jb21iaW5lKShbbi50YWcsci50YWcsc10pLG99cmV0dXJuKDAsdC5pbmhlcml0cyko
byxlKSxvLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3ZhciBuCityZXR1cm4oMCxpLmlzQ29uc3QpKHQp
PyhuPXQudmFsdWUoKS5zcGxpdCgiLiIpLCgwLGkucmVmZXJlbmNlRnJvbVBhcnRzKShlLG4pKTpu
ZXcgbyhlLHQpfSxvLnByb3RvdHlwZS5jb21wdXRlPWZ1bmN0aW9uKCl7dmFyIGUsdD10aGlzLmxh
c3RQYXRoLG49dGhpcy5pbm5lclJlZmVyZW5jZSxyPXRoaXMuaW5uZXJUYWcsbz10aGlzLmxhc3RQ
YXRoPXRoaXMucGF0aFJlZmVyZW5jZS52YWx1ZSgpCityZXR1cm4gbyE9PXQmJihvPyhlPXR5cGVv
ZiBvLCJzdHJpbmciPT09ZT9uPXRoaXMuaW5uZXJSZWZlcmVuY2U9KDAsaS5yZWZlcmVuY2VGcm9t
UGFydHMpKHRoaXMuc291cmNlUmVmZXJlbmNlLG8uc3BsaXQoIi4iKSk6Im51bWJlciI9PT1lJiYo
bj10aGlzLmlubmVyUmVmZXJlbmNlPXRoaXMuc291cmNlUmVmZXJlbmNlLmdldCgiIitvKSksci51
cGRhdGUobi50YWcpKToobj10aGlzLmlubmVyUmVmZXJlbmNlPW51bGwsci51cGRhdGUoaS5DT05T
VEFOVF9UQUcpKSksbj9uLnZhbHVlKCk6bnVsbH0sby5wcm90b3R5cGVbci5VUERBVEVdPWZ1bmN0
aW9uKGUpeygwLG4uc2V0KSh0aGlzLnNvdXJjZVJlZmVyZW5jZS52YWx1ZSgpLHRoaXMucGF0aFJl
ZmVyZW5jZS52YWx1ZSgpLGUpfSxvfShyLkNhY2hlZFJlZmVyZW5jZSl9KSxlKCJlbWJlci1nbGlt
bWVyL2hlbHBlcnMvaGFzaCIsWyJleHBvcnRzIl0sZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiCitl
LmRlZmF1bHQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5uYW1lZH19KSxlKCJlbWJlci1nbGltbWVy
L2hlbHBlcnMvaWYtdW5sZXNzIixbImV4cG9ydHMiLCJlbWJlci1iYWJlbCIsImVtYmVyLWRlYnVn
IiwiZW1iZXItZ2xpbW1lci91dGlscy9yZWZlcmVuY2VzIiwiQGdsaW1tZXIvcmVmZXJlbmNlIl0s
ZnVuY3Rpb24oZSx0LG4scixpKXsidXNlIHN0cmljdCIKK2UuaW5saW5lSWY9ZnVuY3Rpb24oZSx0
KXt2YXIgbj10LnBvc2l0aW9uYWwKK3N3aXRjaChuLmxlbmd0aCl7Y2FzZSAyOnJldHVybiBvLmNy
ZWF0ZShuLmF0KDApLG4uYXQoMSksbnVsbCkKK2Nhc2UgMzpyZXR1cm4gby5jcmVhdGUobi5hdCgw
KSxuLmF0KDEpLG4uYXQoMikpfX0sZS5pbmxpbmVVbmxlc3M9ZnVuY3Rpb24oZSx0KXt2YXIgbj10
LnBvc2l0aW9uYWwKK3N3aXRjaChuLmxlbmd0aCl7Y2FzZSAyOnJldHVybiBvLmNyZWF0ZShuLmF0
KDApLG51bGwsbi5hdCgxKSkKK2Nhc2UgMzpyZXR1cm4gby5jcmVhdGUobi5hdCgwKSxuLmF0KDIp
LG4uYXQoMSkpfX0KK3ZhciBvPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4obixyLG8pe3ZhciBzPSgw
LHQucG9zc2libGVDb25zdHJ1Y3RvclJldHVybikodGhpcyxlLmNhbGwodGhpcykpCityZXR1cm4g
cy5icmFuY2hUYWc9bmV3IGkuVXBkYXRhYmxlVGFnKGkuQ09OU1RBTlRfVEFHKSxzLnRhZz0oMCxp
LmNvbWJpbmUpKFtuLnRhZyxzLmJyYW5jaFRhZ10pLHMuY29uZD1uLHMudHJ1dGh5PXIscy5mYWxz
eT1vLHN9cmV0dXJuKDAsdC5pbmhlcml0cykobixlKSxuLmNyZWF0ZT1mdW5jdGlvbihlLHQsbyl7
dmFyIHM9ci5Db25kaXRpb25hbFJlZmVyZW5jZS5jcmVhdGUoZSksYT10fHxyLlVOREVGSU5FRF9S
RUZFUkVOQ0UsdT1vfHxyLlVOREVGSU5FRF9SRUZFUkVOQ0UKK3JldHVybigwLGkuaXNDb25zdCko
cyk/cy52YWx1ZSgpP2E6dTpuZXcgbihzLGEsdSl9LG4ucHJvdG90eXBlLmNvbXB1dGU9ZnVuY3Rp
b24oKXt2YXIgZT10aGlzLmNvbmQsdD10aGlzLnRydXRoeSxuPXRoaXMuZmFsc3kscj1lLnZhbHVl
KCk/dDpuCityZXR1cm4gdGhpcy5icmFuY2hUYWcudXBkYXRlKHIudGFnKSxyLnZhbHVlKCl9LG59
KHIuQ2FjaGVkUmVmZXJlbmNlKX0pLGUoImVtYmVyLWdsaW1tZXIvaGVscGVycy9sb2MiLFsiZXhw
b3J0cyIsImVtYmVyLWdsaW1tZXIvdXRpbHMvcmVmZXJlbmNlcyIsImVtYmVyLXJ1bnRpbWUiXSxm
dW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiCitmdW5jdGlvbiByKGUpe3ZhciB0PWUucG9zaXRp
b25hbAorcmV0dXJuIG4uU3RyaW5nLmxvYy5hcHBseShudWxsLHQudmFsdWUoKSl9ZS5kZWZhdWx0
PWZ1bmN0aW9uKGUsbil7cmV0dXJuIG5ldyB0LkludGVybmFsSGVscGVyUmVmZXJlbmNlKHIsbil9
fSksZSgiZW1iZXItZ2xpbW1lci9oZWxwZXJzL2xvZyIsWyJleHBvcnRzIiwiZW1iZXItZ2xpbW1l
ci91dGlscy9yZWZlcmVuY2VzIiwiZW1iZXItY29uc29sZSJdLGZ1bmN0aW9uKGUsdCxuKXsidXNl
IHN0cmljdCIKK2Z1bmN0aW9uIHIoZSl7dmFyIHQ9ZS5wb3NpdGlvbmFsCituLmRlZmF1bHQubG9n
LmFwcGx5KG51bGwsdC52YWx1ZSgpKX1lLmRlZmF1bHQ9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbmV3
IHQuSW50ZXJuYWxIZWxwZXJSZWZlcmVuY2UocixuKX19KSxlKCJlbWJlci1nbGltbWVyL2hlbHBl
cnMvbXV0IixbImV4cG9ydHMiLCJlbWJlci11dGlscyIsImVtYmVyLWRlYnVnIiwiZW1iZXItZ2xp
bW1lci91dGlscy9yZWZlcmVuY2VzIiwiZW1iZXItZ2xpbW1lci9oZWxwZXJzL2FjdGlvbiJdLGZ1
bmN0aW9uKGUsdCxuLHIsaSl7InVzZSBzdHJpY3QiCitmdW5jdGlvbiBvKGUpe3JldHVybiBlJiZl
W3NdfWUuaXNNdXQ9byxlLnVuTXV0PWZ1bmN0aW9uKGUpe3JldHVybiBlW2FdfHxlfSxlLmRlZmF1
bHQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj10LnBvc2l0aW9uYWwuYXQoMCkKK2lmKG8obikpcmV0dXJu
IG4KK3ZhciB1PU9iamVjdC5jcmVhdGUobikKK3JldHVybiB1W2FdPW4sdVtpLklOVk9LRV09blty
LlVQREFURV0sdVtzXT0hMCx1fQordmFyIHM9KDAsdC5zeW1ib2wpKCJNVVQiKSxhPSgwLHQuc3lt
Ym9sKSgiU09VUkNFIil9KSxlKCJlbWJlci1nbGltbWVyL2hlbHBlcnMvcXVlcnktcGFyYW0iLFsi
ZXhwb3J0cyIsImVtYmVyLXV0aWxzIiwiZW1iZXItZ2xpbW1lci91dGlscy9yZWZlcmVuY2VzIiwi
ZW1iZXItZGVidWciLCJlbWJlci1yb3V0aW5nIl0sZnVuY3Rpb24oZSx0LG4scixpKXsidXNlIHN0
cmljdCIKK2Z1bmN0aW9uIG8oZSl7dmFyIG49KGUucG9zaXRpb25hbCxlLm5hbWVkKQorcmV0dXJu
IGkuUXVlcnlQYXJhbXMuY3JlYXRlKHt2YWx1ZXM6KDAsdC5hc3NpZ24pKHt9LG4udmFsdWUoKSl9
KX1lLmRlZmF1bHQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbmV3IG4uSW50ZXJuYWxIZWxwZXJSZWZl
cmVuY2Uobyx0KX19KSxlKCJlbWJlci1nbGltbWVyL2hlbHBlcnMvcmVhZG9ubHkiLFsiZXhwb3J0
cyIsImVtYmVyLWdsaW1tZXIvdXRpbHMvcmVmZXJlbmNlcyIsImVtYmVyLWdsaW1tZXIvaGVscGVy
cy9tdXQiXSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiCitlLmRlZmF1bHQ9ZnVuY3Rpb24o
ZSxyKXt2YXIgaT0oMCxuLnVuTXV0KShyLnBvc2l0aW9uYWwuYXQoMCkpLG89T2JqZWN0LmNyZWF0
ZShpKQorcmV0dXJuIG9bdC5VUERBVEVdPXZvaWQgMCxvfX0pLGUoImVtYmVyLWdsaW1tZXIvaGVs
cGVycy91bmJvdW5kIixbImV4cG9ydHMiLCJlbWJlci1kZWJ1ZyIsImVtYmVyLWdsaW1tZXIvdXRp
bHMvcmVmZXJlbmNlcyJdLGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCIKK2UuZGVmYXVsdD1m
dW5jdGlvbihlLHQpe3JldHVybiBuLlVuYm91bmRSZWZlcmVuY2UuY3JlYXRlKHQucG9zaXRpb25h
bC5hdCgwKS52YWx1ZSgpKX19KSxlKCJlbWJlci1nbGltbWVyL2luZGV4IixbImV4cG9ydHMiLCJl
bWJlci1nbGltbWVyL2hlbHBlcnMvYWN0aW9uIiwiZW1iZXItZ2xpbW1lci90ZW1wbGF0ZXMvcm9v
dCIsImVtYmVyLWdsaW1tZXIvdGVtcGxhdGUiLCJlbWJlci1nbGltbWVyL2NvbXBvbmVudHMvY2hl
Y2tib3giLCJlbWJlci1nbGltbWVyL2NvbXBvbmVudHMvdGV4dF9maWVsZCIsImVtYmVyLWdsaW1t
ZXIvY29tcG9uZW50cy90ZXh0X2FyZWEiLCJlbWJlci1nbGltbWVyL2NvbXBvbmVudHMvbGluay10
byIsImVtYmVyLWdsaW1tZXIvY29tcG9uZW50IiwiZW1iZXItZ2xpbW1lci9oZWxwZXIiLCJlbWJl
ci1nbGltbWVyL2Vudmlyb25tZW50IiwiZW1iZXItZ2xpbW1lci91dGlscy9zdHJpbmciLCJlbWJl
ci1nbGltbWVyL3JlbmRlcmVyIiwiZW1iZXItZ2xpbW1lci90ZW1wbGF0ZV9yZWdpc3RyeSIsImVt
YmVyLWdsaW1tZXIvc2V0dXAtcmVnaXN0cnkiLCJlbWJlci1nbGltbWVyL2RvbSIsImVtYmVyLWds
aW1tZXIvc3ludGF4Il0sZnVuY3Rpb24oZSx0LG4scixpLG8scyxhLHUsbCxjLHAsZixoLGQsbSxn
KXsidXNlIHN0cmljdCIKK09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJJTlZPS0UiLHtlbnVtZXJh
YmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0LklOVk9LRX19KSxPYmplY3QuZGVmaW5lUHJv
cGVydHkoZSwiUm9vdFRlbXBsYXRlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1
cm4gbi5kZWZhdWx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJ0ZW1wbGF0ZSIse2VudW1l
cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuZGVmYXVsdH19KSxPYmplY3QuZGVmaW5l
UHJvcGVydHkoZSwiQ2hlY2tib3giLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVy
biBpLmRlZmF1bHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIlRleHRGaWVsZCIse2VudW1l
cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uZGVmYXVsdH19KSxPYmplY3QuZGVmaW5l
UHJvcGVydHkoZSwiVGV4dEFyZWEiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVy
biBzLmRlZmF1bHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIkxpbmtDb21wb25lbnQiLHtl
bnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBhLmRlZmF1bHR9fSksT2JqZWN0LmRl
ZmluZVByb3BlcnR5KGUsIkNvbXBvbmVudCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7
cmV0dXJuIHUuZGVmYXVsdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiSGVscGVyIix7ZW51
bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbC5kZWZhdWx0fX0pLE9iamVjdC5kZWZp
bmVQcm9wZXJ0eShlLCJoZWxwZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVy
biBsLmhlbHBlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiRW52aXJvbm1lbnQiLHtlbnVt
ZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBjLmRlZmF1bHR9fSksT2JqZWN0LmRlZmlu
ZVByb3BlcnR5KGUsIlNhZmVTdHJpbmciLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3Jl
dHVybiBwLlNhZmVTdHJpbmd9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImVzY2FwZUV4cHJl
c3Npb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBwLmVzY2FwZUV4cHJl
c3Npb259fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImh0bWxTYWZlIix7ZW51bWVyYWJsZToh
MCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcC5odG1sU2FmZX19KSxPYmplY3QuZGVmaW5lUHJvcGVy
dHkoZSwiaXNIVE1MU2FmZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHAu
aXNIVE1MU2FmZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX2dldFNhZmVTdHJpbmciLHtl
bnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBwLmdldFNhZmVTdHJpbmd9fSksT2Jq
ZWN0LmRlZmluZVByb3BlcnR5KGUsIlJlbmRlcmVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rp
b24oKXtyZXR1cm4gZi5SZW5kZXJlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiSW5lcnRS
ZW5kZXJlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGYuSW5lcnRSZW5k
ZXJlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiSW50ZXJhY3RpdmVSZW5kZXJlciIse2Vu
dW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGYuSW50ZXJhY3RpdmVSZW5kZXJlcn19
KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiZ2V0VGVtcGxhdGUiLHtlbnVtZXJhYmxlOiEwLGdl
dDpmdW5jdGlvbigpe3JldHVybiBoLmdldFRlbXBsYXRlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0
eShlLCJzZXRUZW1wbGF0ZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGgu
c2V0VGVtcGxhdGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImhhc1RlbXBsYXRlIix7ZW51
bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaC5oYXNUZW1wbGF0ZX19KSxPYmplY3Qu
ZGVmaW5lUHJvcGVydHkoZSwiZ2V0VGVtcGxhdGVzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rp
b24oKXtyZXR1cm4gaC5nZXRUZW1wbGF0ZXN9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInNl
dFRlbXBsYXRlcyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGguc2V0VGVt
cGxhdGVzfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJzZXR1cEVuZ2luZVJlZ2lzdHJ5Iix7
ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZC5zZXR1cEVuZ2luZVJlZ2lzdHJ5
fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJzZXR1cEFwcGxpY2F0aW9uUmVnaXN0cnkiLHtl
bnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBkLnNldHVwQXBwbGljYXRpb25SZWdp
c3RyeX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiRE9NQ2hhbmdlcyIse2VudW1lcmFibGU6
ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG0uRE9NQ2hhbmdlc319KSxPYmplY3QuZGVmaW5lUHJv
cGVydHkoZSwiTm9kZURPTVRyZWVDb25zdHJ1Y3Rpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5j
dGlvbigpe3JldHVybiBtLk5vZGVET01UcmVlQ29uc3RydWN0aW9ufX0pLE9iamVjdC5kZWZpbmVQ
cm9wZXJ0eShlLCJET01UcmVlQ29uc3RydWN0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rp
b24oKXtyZXR1cm4gbS5ET01UcmVlQ29uc3RydWN0aW9ufX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0
eShlLCJfcmVnaXN0ZXJNYWNyb3MiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVy
biBnLnJlZ2lzdGVyTWFjcm9zfX0pCitPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX2V4cGVyaW1l
bnRhbE1hY3JvcyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcuZXhwZXJp
bWVudGFsTWFjcm9zfX0pfSksZSgiZW1iZXItZ2xpbW1lci9tb2RpZmllcnMvYWN0aW9uIixbImV4
cG9ydHMiLCJlbWJlci11dGlscyIsImVtYmVyLW1ldGFsIiwiZW1iZXItZGVidWciLCJlbWJlci12
aWV3cyIsImVtYmVyLWdsaW1tZXIvaGVscGVycy9hY3Rpb24iXSxmdW5jdGlvbihlLHQsbixyLGks
byl7InVzZSBzdHJpY3QiCitmdW5jdGlvbiBzKGUsdCl7dmFyIG4KK2lmKG51bGw9PT10fHx2b2lk
IDA9PT10KXtpZih1LnRlc3QoZS50eXBlKSlyZXR1cm4oMCxpLmlzU2ltcGxlQ2xpY2spKGUpCit0
PSIifWlmKHQuaW5kZXhPZigiYW55Iik+PTApcmV0dXJuITAKK2ZvcihuPTA7bjxhLmxlbmd0aDtu
KyspaWYoZVthW25dKyJLZXkiXSYmLTE9PT10LmluZGV4T2YoYVtuXSkpcmV0dXJuITEKK3JldHVy
biEwfWUuQWN0aW9uU3RhdGU9ZS5BY3Rpb25IZWxwZXI9dm9pZCAwCit2YXIgYT1bImFsdCIsInNo
aWZ0IiwibWV0YSIsImN0cmwiXSx1PS9eY2xpY2t8bW91c2V8dG91Y2gvLGw9ZS5BY3Rpb25IZWxw
ZXI9e3JlZ2lzdGVyZWRBY3Rpb25zOmkuQWN0aW9uTWFuYWdlci5yZWdpc3RlcmVkQWN0aW9ucyxy
ZWdpc3RlckFjdGlvbjpmdW5jdGlvbihlKXt2YXIgdD1lLmFjdGlvbklkCityZXR1cm4gaS5BY3Rp
b25NYW5hZ2VyLnJlZ2lzdGVyZWRBY3Rpb25zW3RdPWUsdH0sdW5yZWdpc3RlckFjdGlvbjpmdW5j
dGlvbihlKXt2YXIgdD1lLmFjdGlvbklkCitkZWxldGUgaS5BY3Rpb25NYW5hZ2VyLnJlZ2lzdGVy
ZWRBY3Rpb25zW3RdfX0sYz1lLkFjdGlvblN0YXRlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQs
bixyLGksbyxzLGEpe3RoaXMuZWxlbWVudD1lLHRoaXMuYWN0aW9uSWQ9dCx0aGlzLmFjdGlvbk5h
bWU9bix0aGlzLmFjdGlvbkFyZ3M9cix0aGlzLm5hbWVkQXJncz1pLHRoaXMucG9zaXRpb25hbD1v
LHRoaXMuaW1wbGljaXRUYXJnZXQ9cyx0aGlzLmRvbT1hLHRoaXMuZXZlbnROYW1lPXRoaXMuZ2V0
RXZlbnROYW1lKCl9cmV0dXJuIGUucHJvdG90eXBlLmdldEV2ZW50TmFtZT1mdW5jdGlvbigpe3Jl
dHVybiB0aGlzLm5hbWVkQXJncy5nZXQoIm9uIikudmFsdWUoKXx8ImNsaWNrIn0sZS5wcm90b3R5
cGUuZ2V0QWN0aW9uQXJncz1mdW5jdGlvbigpe3ZhciBlLHQ9bmV3IEFycmF5KHRoaXMuYWN0aW9u
QXJncy5sZW5ndGgpCitmb3IoZT0wO2U8dGhpcy5hY3Rpb25BcmdzLmxlbmd0aDtlKyspdFtlXT10
aGlzLmFjdGlvbkFyZ3NbZV0udmFsdWUoKQorcmV0dXJuIHR9LGUucHJvdG90eXBlLmdldFRhcmdl
dD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuaW1wbGljaXRUYXJnZXQsdD10aGlzLm5hbWVkQXJncwor
cmV0dXJuIHQuaGFzKCJ0YXJnZXQiKT90LmdldCgidGFyZ2V0IikudmFsdWUoKTplLnZhbHVlKCl9
LGUucHJvdG90eXBlLmhhbmRsZXI9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxyPXRoaXMuYWN0aW9u
TmFtZSxpPXRoaXMubmFtZWRBcmdzLGE9aS5nZXQoImJ1YmJsZXMiKSx1PWkuZ2V0KCJwcmV2ZW50
RGVmYXVsdCIpLGw9aS5nZXQoImFsbG93ZWRLZXlzIiksYz10aGlzLmdldFRhcmdldCgpCitpZigh
cyhlLGwudmFsdWUoKSkpcmV0dXJuITAKKyExIT09dS52YWx1ZSgpJiZlLnByZXZlbnREZWZhdWx0
KCksITE9PT1hLnZhbHVlKCkmJmUuc3RvcFByb3BhZ2F0aW9uKCksKDAsbi5ydW4pKGZ1bmN0aW9u
KCl7dmFyIGU9dC5nZXRBY3Rpb25BcmdzKCksaT17YXJnczplLHRhcmdldDpjfQorcmV0dXJuImZ1
bmN0aW9uIj09dHlwZW9mIHJbby5JTlZPS0VdP3ZvaWQoMCxuLmZsYWdnZWRJbnN0cnVtZW50KSgi
aW50ZXJhY3Rpb24uZW1iZXItYWN0aW9uIixpLGZ1bmN0aW9uKCl7cltvLklOVk9LRV0uYXBwbHko
cixlKX0pOiJmdW5jdGlvbiI9PXR5cGVvZiByP3ZvaWQoMCxuLmZsYWdnZWRJbnN0cnVtZW50KSgi
aW50ZXJhY3Rpb24uZW1iZXItYWN0aW9uIixpLGZ1bmN0aW9uKCl7ci5hcHBseShjLGUpfSk6KGku
bmFtZT1yLHZvaWQoYy5zZW5kPygwLG4uZmxhZ2dlZEluc3RydW1lbnQpKCJpbnRlcmFjdGlvbi5l
bWJlci1hY3Rpb24iLGksZnVuY3Rpb24oKXtjLnNlbmQuYXBwbHkoYyxbcl0uY29uY2F0KGUpKX0p
OigwLG4uZmxhZ2dlZEluc3RydW1lbnQpKCJpbnRlcmFjdGlvbi5lbWJlci1hY3Rpb24iLGksZnVu
Y3Rpb24oKXtjW3JdLmFwcGx5KGMsZSl9KSkpfSl9LGUucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rp
b24oKXtsLnVucmVnaXN0ZXJBY3Rpb24odGhpcyl9LGV9KCkscD1mdW5jdGlvbigpe2Z1bmN0aW9u
IGUoKXt9cmV0dXJuIGUucHJvdG90eXBlLmNyZWF0ZT1mdW5jdGlvbihlLG4scixpKXt2YXIgcyxh
PW4ubmFtZWQsdT1uLnBvc2l0aW9uYWwsbD12b2lkIDAscD12b2lkIDAsZj12b2lkIDAKK3UubGVu
Z3RoPjEmJihsPXUuYXQoMCksZj11LmF0KDEpLGZbby5JTlZPS0VdP3A9ZjooZi5fcHJvcGVydHlL
ZXkscD1mLnZhbHVlKCkpKQordmFyIGg9W10KK2ZvcihzPTI7czx1Lmxlbmd0aDtzKyspaC5wdXNo
KHUuYXQocykpCit2YXIgZD0oMCx0LnV1aWQpKCkKK3JldHVybiBuZXcgYyhlLGQscCxoLGEsdSxs
LGkpfSxlLnByb3RvdHlwZS5pbnN0YWxsPWZ1bmN0aW9uKGUpe3ZhciB0PWUuZG9tLG49ZS5lbGVt
ZW50LHI9ZS5hY3Rpb25JZAorbC5yZWdpc3RlckFjdGlvbihlKSx0LnNldEF0dHJpYnV0ZShuLCJk
YXRhLWVtYmVyLWFjdGlvbiIsIiIpLHQuc2V0QXR0cmlidXRlKG4sImRhdGEtZW1iZXItYWN0aW9u
LSIrcixyKX0sZS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGUpe3ZhciB0PWUucG9zaXRpb25h
bCxuPXQuYXQoMSkKK25bby5JTlZPS0VdfHwoZS5hY3Rpb25OYW1lPW4udmFsdWUoKSksZS5ldmVu
dE5hbWU9ZS5nZXRFdmVudE5hbWUoKX0sZS5wcm90b3R5cGUuZ2V0RGVzdHJ1Y3Rvcj1mdW5jdGlv
bihlKXtyZXR1cm4gZX0sZX0oKQorZS5kZWZhdWx0PXB9KSxlKCJlbWJlci1nbGltbWVyL3Byb3Rv
Y29sLWZvci11cmwiLFsiZXhwb3J0cyIsImVtYmVyLWVudmlyb25tZW50Iiwibm9kZS1tb2R1bGUi
XSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiCitmdW5jdGlvbiByKGUpe3JldHVybiBzfHwo
cz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIikpLHMuaHJlZj1lLHMucHJvdG9jb2x9ZnVuY3Rp
b24gaShlKXt2YXIgdD1udWxsCityZXR1cm4ic3RyaW5nIj09dHlwZW9mIGUmJih0PW8ucGFyc2Uo
ZSkucHJvdG9jb2wpLG51bGw9PT10PyI6Ijp0fWUuZGVmYXVsdD1mdW5jdGlvbihlKXt2YXIgcz12
b2lkIDAKK2lmKHQuZW52aXJvbm1lbnQuaGFzRE9NJiYocz1yLmNhbGwoZSwiZm9vYmFyOmJheiIp
KSwiZm9vYmFyOiI9PT1zKWUucHJvdG9jb2xGb3JVUkw9cgorZWxzZSBpZigib2JqZWN0Ij09dHlw
ZW9mIFVSTClvPVVSTCxlLnByb3RvY29sRm9yVVJMPWkKK2Vsc2V7aWYoIW4uSVNfTk9ERSl0aHJv
dyBuZXcgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIHZhbGlkIFVSTCBwYXJzaW5nIG1lY2hhbmlzbSBm
b3IgVVJMIFNhbml0aXphdGlvbiIpCitvPSgwLG4ucmVxdWlyZSkoInVybCIpLGUucHJvdG9jb2xG
b3JVUkw9aX19Cit2YXIgbz12b2lkIDAscz12b2lkIDB9KSxlKCJlbWJlci1nbGltbWVyL3JlbmRl
cmVyIixbImV4cG9ydHMiLCJlbWJlci1iYWJlbCIsImVtYmVyLWdsaW1tZXIvdXRpbHMvcmVmZXJl
bmNlcyIsImVtYmVyLW1ldGFsIiwiQGdsaW1tZXIvcmVmZXJlbmNlIiwiZW1iZXItdmlld3MiLCJl
bWJlci1nbGltbWVyL2NvbXBvbmVudCIsImVtYmVyLWdsaW1tZXIvc3ludGF4L2N1cmx5LWNvbXBv
bmVudCIsImVtYmVyLWdsaW1tZXIvc3ludGF4L291dGxldCIsImVtYmVyLWRlYnVnIl0sZnVuY3Rp
b24oZSx0LG4scixpLG8scyxhLHUsbCl7InVzZSBzdHJpY3QiCitmdW5jdGlvbiBjKGUpe2cucHVz
aChlKX1mdW5jdGlvbiBwKGUpe3ZhciB0PWcuaW5kZXhPZihlKQorZy5zcGxpY2UodCwxKX1mdW5j
dGlvbiBmKCl7fWUuSW50ZXJhY3RpdmVSZW5kZXJlcj1lLkluZXJ0UmVuZGVyZXI9dm9pZCAwCit2
YXIgaD1yLnJ1bi5iYWNrYnVybmVyLGQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuKXt0aGlz
LnZpZXc9ZSx0aGlzLm91dGxldFN0YXRlPXQsdGhpcy5yb290T3V0bGV0U3RhdGU9bn1yZXR1cm4g
ZS5wcm90b3R5cGUuY2hpbGQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGUodGhpcy52aWV3LHRoaXMu
b3V0bGV0U3RhdGUsdGhpcy5yb290T3V0bGV0U3RhdGUpfSxlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rp
b24oZSl7cmV0dXJuIHRoaXMub3V0bGV0U3RhdGV9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbihl
LHQpe3JldHVybiB0aGlzLm91dGxldFN0YXRlPXQsdH0sZX0oKSxtPWZ1bmN0aW9uKCl7ZnVuY3Rp
b24gZShlLHQsbixyLGkscyl7dmFyIGE9dGhpcwordGhpcy5pZD0oMCxvLmdldFZpZXdJZCkoZSks
dGhpcy5lbnY9dCx0aGlzLnJvb3Q9ZSx0aGlzLnJlc3VsdD12b2lkIDAsdGhpcy5zaG91bGRSZWZs
dXNoPSExLHRoaXMuZGVzdHJveWVkPSExLHRoaXMuX3JlbW92aW5nPSExCit2YXIgdT10aGlzLm9w
dGlvbnM9e2Fsd2F5c1JldmFsaWRhdGU6ITF9Cit0aGlzLnJlbmRlcj1mdW5jdGlvbigpe3ZhciBl
PW4ucmVuZGVyKHIsaSxzKSx0PXZvaWQgMAorZG97dD1lLm5leHQoKX13aGlsZSghdC5kb25lKQor
dmFyIG89YS5yZXN1bHQ9dC52YWx1ZQorYS5yZW5kZXI9ZnVuY3Rpb24oKXtvLnJlcmVuZGVyKHUp
fX19cmV0dXJuIGUucHJvdG90eXBlLmlzRm9yPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnJvb3Q9
PT1lfSxlLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dmFyIGUsdD10aGlzLnJlc3VsdCxu
PXRoaXMuZW52Cit0aGlzLmRlc3Ryb3llZD0hMCx0aGlzLmVudj1udWxsLHRoaXMucm9vdD1udWxs
LHRoaXMucmVzdWx0PW51bGwsdGhpcy5yZW5kZXI9bnVsbCx0JiYoZT0hbi5pblRyYW5zYWN0aW9u
LGUmJm4uYmVnaW4oKSx0LmRlc3Ryb3koKSxlJiZuLmNvbW1pdCgpKX0sZX0oKSxnPVtdOygwLHIu
c2V0SGFzVmlld3MpKGZ1bmN0aW9uKCl7cmV0dXJuIGcubGVuZ3RoPjB9KQordmFyIHk9MAoraC5v
bigiYmVnaW4iLGZ1bmN0aW9uKCl7dmFyIGUKK2ZvcihlPTA7ZTxnLmxlbmd0aDtlKyspZ1tlXS5f
c2NoZWR1bGVSZXZhbGlkYXRlKCl9KSxoLm9uKCJlbmQiLGZ1bmN0aW9uKCl7dmFyIGUKK2Zvcihl
PTA7ZTxnLmxlbmd0aDtlKyspaWYoIWdbZV0uX2lzVmFsaWQoKSl7aWYoeT4xMCl0aHJvdyB5PTAs
Z1tlXS5kZXN0cm95KCksbmV3IEVycm9yKCJpbmZpbml0ZSByZW5kZXJpbmcgaW52YWxpZGF0aW9u
IGRldGVjdGVkIikKK3JldHVybiB5KyssaC5qb2luKG51bGwsZil9eT0wfSkKK3ZhciB2PWZ1bmN0
aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09
YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpvLmZhbGxiYWNrVmlld1JlZ2lzdHJ5LHI9YXJndW1l
bnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10mJmFyZ3VtZW50c1szXQordGhpcy5f
ZW52PWUsdGhpcy5fcm9vdFRlbXBsYXRlPXQsdGhpcy5fdmlld1JlZ2lzdHJ5PW4sdGhpcy5fZGVz
dGluZWRGb3JET009cix0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fcm9vdHM9W10sdGhpcy5fbGFz
dFJldmlzaW9uPW51bGwsdGhpcy5faXNSZW5kZXJpbmdSb290cz0hMSx0aGlzLl9yZW1vdmVkUm9v
dHM9W119cmV0dXJuIGUucHJvdG90eXBlLmFwcGVuZE91dGxldFZpZXc9ZnVuY3Rpb24oZSx0KXt2
YXIgbj1uZXcgdS5Ub3BMZXZlbE91dGxldENvbXBvbmVudERlZmluaXRpb24oZSkscj1lLnRvUmVm
ZXJlbmNlKCksaT1lLm91dGxldFN0YXRlLnJlbmRlci5jb250cm9sbGVyCit0aGlzLl9hcHBlbmRE
ZWZpbml0aW9uKGUsbix0LHIsaSl9LGUucHJvdG90eXBlLmFwcGVuZFRvPWZ1bmN0aW9uKGUsdCl7
dmFyIG49bmV3IGEuUm9vdENvbXBvbmVudERlZmluaXRpb24oZSkKK3RoaXMuX2FwcGVuZERlZmlu
aXRpb24oZSxuLHQpfSxlLnByb3RvdHlwZS5fYXBwZW5kRGVmaW5pdGlvbj1mdW5jdGlvbihlLHQs
cil7dmFyIG89YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1l
bnRzWzNdOmkuVU5ERUZJTkVEX1JFRkVSRU5DRSxzPWFyZ3VtZW50cy5sZW5ndGg+NCYmdm9pZCAw
IT09YXJndW1lbnRzWzRdP2FyZ3VtZW50c1s0XTpudWxsLGE9bmV3IG4uUm9vdFJlZmVyZW5jZSh0
KSx1PW5ldyBkKG51bGwsbyxvLCEwLHMpLGw9bmV3IG0oZSx0aGlzLl9lbnYsdGhpcy5fcm9vdFRl
bXBsYXRlLGEscix1KQordGhpcy5fcmVuZGVyUm9vdChsKX0sZS5wcm90b3R5cGUucmVyZW5kZXI9
ZnVuY3Rpb24oKXt0aGlzLl9zY2hlZHVsZVJldmFsaWRhdGUoKX0sZS5wcm90b3R5cGUucmVnaXN0
ZXI9ZnVuY3Rpb24oZSl7dmFyIHQ9KDAsby5nZXRWaWV3SWQpKGUpCit0aGlzLl92aWV3UmVnaXN0
cnlbdF09ZX0sZS5wcm90b3R5cGUudW5yZWdpc3Rlcj1mdW5jdGlvbihlKXtkZWxldGUgdGhpcy5f
dmlld1JlZ2lzdHJ5WygwLG8uZ2V0Vmlld0lkKShlKV19LGUucHJvdG90eXBlLnJlbW92ZT1mdW5j
dGlvbihlKXtlLl90cmFuc2l0aW9uVG8oImRlc3Ryb3lpbmciKSx0aGlzLmNsZWFudXBSb290Rm9y
KGUpLCgwLG8uc2V0Vmlld0VsZW1lbnQpKGUsbnVsbCksdGhpcy5fZGVzdGluZWRGb3JET00mJmUu
dHJpZ2dlcigiZGlkRGVzdHJveUVsZW1lbnQiKSxlLmlzRGVzdHJveWluZ3x8ZS5kZXN0cm95KCl9
LGUucHJvdG90eXBlLmNsZWFudXBSb290Rm9yPWZ1bmN0aW9uKGUpe2lmKCF0aGlzLl9kZXN0cm95
ZWQpZm9yKHZhciB0LG49dGhpcy5fcm9vdHMscj10aGlzLl9yb290cy5sZW5ndGg7ci0tOyl0PW5b
cl0sdC5pc0ZvcihlKSYmdC5kZXN0cm95KCl9LGUucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24o
KXt0aGlzLl9kZXN0cm95ZWR8fCh0aGlzLl9kZXN0cm95ZWQ9ITAsdGhpcy5fY2xlYXJBbGxSb290
cygpKX0sZS5wcm90b3R5cGUuZ2V0RWxlbWVudD1mdW5jdGlvbigpe30sZS5wcm90b3R5cGUuZ2V0
Qm91bmRzPWZ1bmN0aW9uKGUpe3ZhciB0PWVbcy5CT1VORFNdCityZXR1cm57cGFyZW50RWxlbWVu
dDp0LnBhcmVudEVsZW1lbnQoKSxmaXJzdE5vZGU6dC5maXJzdE5vZGUoKSxsYXN0Tm9kZTp0Lmxh
c3ROb2RlKCl9fSxlLnByb3RvdHlwZS5jcmVhdGVFbGVtZW50PWZ1bmN0aW9uKGUpe3JldHVybiB0
aGlzLl9lbnYuZ2V0QXBwZW5kT3BlcmF0aW9ucygpLmNyZWF0ZUVsZW1lbnQoZSl9LGUucHJvdG90
eXBlLl9yZW5kZXJSb290PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX3Jvb3RzCit0LnB1c2goZSks
MT09PXQubGVuZ3RoJiZjKHRoaXMpLHRoaXMuX3JlbmRlclJvb3RzVHJhbnNhY3Rpb24oKX0sZS5w
cm90b3R5cGUuX3JlbmRlclJvb3RzPWZ1bmN0aW9uKCl7dmFyIGUsdCxuLG8scyxhPXRoaXMuX3Jv
b3RzLHU9dGhpcy5fZW52LGw9dGhpcy5fcmVtb3ZlZFJvb3RzLGM9dm9pZCAwLGY9dm9pZCAwCitk
b3tmb3IodS5iZWdpbigpLGY9YS5sZW5ndGgsYz0hMSxlPTA7ZTxhLmxlbmd0aDtlKyspdD1hW2Vd
LHQuZGVzdHJveWVkP2wucHVzaCh0KToobj10LnNob3VsZFJlZmx1c2gsZT49ZiYmIW58fCh0Lm9w
dGlvbnMuYWx3YXlzUmV2YWxpZGF0ZT1uLG49dC5zaG91bGRSZWZsdXNoPSgwLHIucnVuSW5UcmFu
c2FjdGlvbikodCwicmVuZGVyIiksYz1jfHxuKSkKK3RoaXMuX2xhc3RSZXZpc2lvbj1pLkNVUlJF
TlRfVEFHLnZhbHVlKCksdS5jb21taXQoKX13aGlsZShjfHxhLmxlbmd0aD5mKQorZm9yKDtsLmxl
bmd0aDspbz1sLnBvcCgpLHM9YS5pbmRleE9mKG8pLGEuc3BsaWNlKHMsMSkKKzA9PT10aGlzLl9y
b290cy5sZW5ndGgmJnAodGhpcyl9LGUucHJvdG90eXBlLl9yZW5kZXJSb290c1RyYW5zYWN0aW9u
PWZ1bmN0aW9uKCl7aWYoIXRoaXMuX2lzUmVuZGVyaW5nUm9vdHMpe3RoaXMuX2lzUmVuZGVyaW5n
Um9vdHM9ITAKK3ZhciBlPSExCit0cnl7dGhpcy5fcmVuZGVyUm9vdHMoKSxlPSEwfWZpbmFsbHl7
ZXx8KHRoaXMuX2xhc3RSZXZpc2lvbj1pLkNVUlJFTlRfVEFHLnZhbHVlKCkpLHRoaXMuX2lzUmVu
ZGVyaW5nUm9vdHM9ITF9fX0sZS5wcm90b3R5cGUuX2NsZWFyQWxsUm9vdHM9ZnVuY3Rpb24oKXt2
YXIgZSx0LG49dGhpcy5fcm9vdHMKK2ZvcihlPTA7ZTxuLmxlbmd0aDtlKyspdD1uW2VdLHQuZGVz
dHJveSgpCit0aGlzLl9yZW1vdmVkUm9vdHMubGVuZ3RoPTAsdGhpcy5fcm9vdHM9bnVsbCxuLmxl
bmd0aCYmcCh0aGlzKX0sZS5wcm90b3R5cGUuX3NjaGVkdWxlUmV2YWxpZGF0ZT1mdW5jdGlvbigp
e2guc2NoZWR1bGVPbmNlKCJyZW5kZXIiLHRoaXMsdGhpcy5fcmV2YWxpZGF0ZSl9LGUucHJvdG90
eXBlLl9pc1ZhbGlkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Rlc3Ryb3llZHx8MD09PXRoaXMu
X3Jvb3RzLmxlbmd0aHx8aS5DVVJSRU5UX1RBRy52YWxpZGF0ZSh0aGlzLl9sYXN0UmV2aXNpb24p
fSxlLnByb3RvdHlwZS5fcmV2YWxpZGF0ZT1mdW5jdGlvbigpe3RoaXMuX2lzVmFsaWQoKXx8dGhp
cy5fcmVuZGVyUm9vdHNUcmFuc2FjdGlvbigpfSxlfSgpCitlLkluZXJ0UmVuZGVyZXI9ZnVuY3Rp
b24oZSl7ZnVuY3Rpb24gbigpe3JldHVybigwLHQucG9zc2libGVDb25zdHJ1Y3RvclJldHVybiko
dGhpcyxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9cmV0dXJuKDAsdC5pbmhlcml0cykobixlKSxu
LmNyZWF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IHRoaXMoZS5lbnYsZS5yb290VGVtcGxhdGUs
ZS5fdmlld1JlZ2lzdHJ5LCExKX0sbi5wcm90b3R5cGUuZ2V0RWxlbWVudD1mdW5jdGlvbigpe3Ro
cm93IG5ldyBFcnJvcigiQWNjZXNzaW5nIGB0aGlzLmVsZW1lbnRgIGlzIG5vdCBhbGxvd2VkIGlu
IG5vbi1pbnRlcmFjdGl2ZSBlbnZpcm9ubWVudHMgKHN1Y2ggYXMgRmFzdEJvb3QpLiIpfSxufSh2
KSxlLkludGVyYWN0aXZlUmVuZGVyZXI9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbigpe3JldHVybigw
LHQucG9zc2libGVDb25zdHJ1Y3RvclJldHVybikodGhpcyxlLmFwcGx5KHRoaXMsYXJndW1lbnRz
KSl9cmV0dXJuKDAsdC5pbmhlcml0cykobixlKSxuLmNyZWF0ZT1mdW5jdGlvbihlKXtyZXR1cm4g
bmV3IHRoaXMoZS5lbnYsZS5yb290VGVtcGxhdGUsZS5fdmlld1JlZ2lzdHJ5LCEwKX0sbi5wcm90
b3R5cGUuZ2V0RWxlbWVudD1mdW5jdGlvbihlKXtyZXR1cm4oMCxvLmdldFZpZXdFbGVtZW50KShl
KX0sbn0odil9KQorZSgiZW1iZXItZ2xpbW1lci9zZXR1cC1yZWdpc3RyeSIsWyJleHBvcnRzIiwi
ZW1iZXItYmFiZWwiLCJlbWJlci1lbnZpcm9ubWVudCIsImNvbnRhaW5lciIsImVtYmVyLWdsaW1t
ZXIvcmVuZGVyZXIiLCJlbWJlci1nbGltbWVyL2RvbSIsImVtYmVyLWdsaW1tZXIvdmlld3Mvb3V0
bGV0IiwiZW1iZXItZ2xpbW1lci9jb21wb25lbnRzL3RleHRfZmllbGQiLCJlbWJlci1nbGltbWVy
L2NvbXBvbmVudHMvdGV4dF9hcmVhIiwiZW1iZXItZ2xpbW1lci9jb21wb25lbnRzL2NoZWNrYm94
IiwiZW1iZXItZ2xpbW1lci9jb21wb25lbnRzL2xpbmstdG8iLCJlbWJlci1nbGltbWVyL2NvbXBv
bmVudCIsImVtYmVyLWdsaW1tZXIvdGVtcGxhdGVzL2NvbXBvbmVudCIsImVtYmVyLWdsaW1tZXIv
dGVtcGxhdGVzL3Jvb3QiLCJlbWJlci1nbGltbWVyL3RlbXBsYXRlcy9vdXRsZXQiLCJlbWJlci1n
bGltbWVyL2Vudmlyb25tZW50Il0sZnVuY3Rpb24oZSx0LG4scixpLG8scyxhLHUsbCxjLHAsZixo
LGQsbSl7InVzZSBzdHJpY3QiCitlLnNldHVwQXBwbGljYXRpb25SZWdpc3RyeT1mdW5jdGlvbihl
KXtlLmluamVjdGlvbigic2VydmljZTotZ2xpbW1lci1lbnZpcm9ubWVudCIsImFwcGVuZE9wZXJh
dGlvbnMiLCJzZXJ2aWNlOi1kb20tdHJlZS1jb25zdHJ1Y3Rpb24iKSxlLmluamVjdGlvbigicmVu
ZGVyZXIiLCJlbnYiLCJzZXJ2aWNlOi1nbGltbWVyLWVudmlyb25tZW50IiksZS5yZWdpc3Rlcigo
MCxyLnByaXZhdGl6ZSkoZyksaC5kZWZhdWx0KSxlLmluamVjdGlvbigicmVuZGVyZXIiLCJyb290
VGVtcGxhdGUiLCgwLHIucHJpdmF0aXplKShnKSksZS5yZWdpc3RlcigicmVuZGVyZXI6LWRvbSIs
aS5JbnRlcmFjdGl2ZVJlbmRlcmVyKSxlLnJlZ2lzdGVyKCJyZW5kZXJlcjotaW5lcnQiLGkuSW5l
cnRSZW5kZXJlciksbi5lbnZpcm9ubWVudC5oYXNET00mJmUuaW5qZWN0aW9uKCJzZXJ2aWNlOi1n
bGltbWVyLWVudmlyb25tZW50IiwidXBkYXRlT3BlcmF0aW9ucyIsInNlcnZpY2U6LWRvbS1jaGFu
Z2VzIiksZS5yZWdpc3Rlcigic2VydmljZTotZG9tLWNoYW5nZXMiLHtjcmVhdGU6ZnVuY3Rpb24o
ZSl7dmFyIHQ9ZS5kb2N1bWVudAorcmV0dXJuIG5ldyBvLkRPTUNoYW5nZXModCl9fSksZS5yZWdp
c3Rlcigic2VydmljZTotZG9tLXRyZWUtY29uc3RydWN0aW9uIix7Y3JlYXRlOmZ1bmN0aW9uKGUp
e3ZhciB0PWUuZG9jdW1lbnQKK3JldHVybiBuZXcobi5lbnZpcm9ubWVudC5oYXNET00/by5ET01U
cmVlQ29uc3RydWN0aW9uOm8uTm9kZURPTVRyZWVDb25zdHJ1Y3Rpb24pKHQpfX0pfSxlLnNldHVw
RW5naW5lUmVnaXN0cnk9ZnVuY3Rpb24oZSl7ZS5yZWdpc3Rlcigidmlldzotb3V0bGV0IixzLmRl
ZmF1bHQpLGUucmVnaXN0ZXIoInRlbXBsYXRlOi1vdXRsZXQiLGQuZGVmYXVsdCksZS5pbmplY3Rp
b24oInZpZXc6LW91dGxldCIsInRlbXBsYXRlIiwidGVtcGxhdGU6LW91dGxldCIpLGUuaW5qZWN0
aW9uKCJzZXJ2aWNlOi1kb20tY2hhbmdlcyIsImRvY3VtZW50Iiwic2VydmljZTotZG9jdW1lbnQi
KSxlLmluamVjdGlvbigic2VydmljZTotZG9tLXRyZWUtY29uc3RydWN0aW9uIiwiZG9jdW1lbnQi
LCJzZXJ2aWNlOi1kb2N1bWVudCIpLGUucmVnaXN0ZXIoKDAsci5wcml2YXRpemUpKHkpLGYuZGVm
YXVsdCksZS5yZWdpc3Rlcigic2VydmljZTotZ2xpbW1lci1lbnZpcm9ubWVudCIsbS5kZWZhdWx0
KSxlLmluamVjdGlvbigidGVtcGxhdGUiLCJlbnYiLCJzZXJ2aWNlOi1nbGltbWVyLWVudmlyb25t
ZW50IiksZS5vcHRpb25zRm9yVHlwZSgiaGVscGVyIix7aW5zdGFudGlhdGU6ITF9KSxlLnJlZ2lz
dGVyKCJjb21wb25lbnQ6LXRleHQtZmllbGQiLGEuZGVmYXVsdCksZS5yZWdpc3RlcigiY29tcG9u
ZW50Oi10ZXh0LWFyZWEiLHUuZGVmYXVsdCksZS5yZWdpc3RlcigiY29tcG9uZW50Oi1jaGVja2Jv
eCIsbC5kZWZhdWx0KSxlLnJlZ2lzdGVyKCJjb21wb25lbnQ6bGluay10byIsYy5kZWZhdWx0KSxl
LnJlZ2lzdGVyKCgwLHIucHJpdmF0aXplKSh2KSxwLmRlZmF1bHQpfQordmFyIGc9KDAsdC50YWdn
ZWRUZW1wbGF0ZUxpdGVyYWxMb29zZSkoWyJ0ZW1wbGF0ZTotcm9vdCJdLFsidGVtcGxhdGU6LXJv
b3QiXSkseT0oMCx0LnRhZ2dlZFRlbXBsYXRlTGl0ZXJhbExvb3NlKShbInRlbXBsYXRlOmNvbXBv
bmVudHMvLWRlZmF1bHQiXSxbInRlbXBsYXRlOmNvbXBvbmVudHMvLWRlZmF1bHQiXSksdj0oMCx0
LnRhZ2dlZFRlbXBsYXRlTGl0ZXJhbExvb3NlKShbImNvbXBvbmVudDotZGVmYXVsdCJdLFsiY29t
cG9uZW50Oi1kZWZhdWx0Il0pfSksZSgiZW1iZXItZ2xpbW1lci9zeW50YXgiLFsiZXhwb3J0cyIs
ImVtYmVyLWdsaW1tZXIvc3ludGF4L3JlbmRlciIsImVtYmVyLWdsaW1tZXIvc3ludGF4L291dGxl
dCIsImVtYmVyLWdsaW1tZXIvc3ludGF4L21vdW50IiwiZW1iZXItZ2xpbW1lci9zeW50YXgvZHlu
YW1pYy1jb21wb25lbnQiLCJlbWJlci1nbGltbWVyL3V0aWxzL2JpbmRpbmdzIiwiZW1iZXItZ2xp
bW1lci9zeW50YXgvLXdpdGgtZHluYW1pYy12YXJzIiwiZW1iZXItZ2xpbW1lci9zeW50YXgvLWlu
LWVsZW1lbnQiLCJlbWJlci1nbGltbWVyL3N5bnRheC9pbnB1dCIsImVtYmVyLWdsaW1tZXIvc3lu
dGF4Ly10ZXh0LWFyZWEiLCJlbWJlci1kZWJ1ZyJdLGZ1bmN0aW9uKGUsdCxuLHIsaSxvLHMsYSx1
LGwsYyl7InVzZSBzdHJpY3QiCitmdW5jdGlvbiBwKGUsdCxuLHIpe3ZhciBzPWVbMF0KK2lmKGUu
bGVuZ3RoPjEpcmV0dXJuKDAsaS5jbG9zdXJlQ29tcG9uZW50TWFjcm8pKGUsdCxuLG51bGwsbnVs
bCxyKQordmFyIGE9ci5zeW1ib2xUYWJsZSx1PXZvaWQgMAorcmV0dXJuIHMuaW5kZXhPZigiLSIp
Pi0xJiYodT1yLmVudi5nZXRDb21wb25lbnREZWZpbml0aW9uKGUsYSkpLCEhdSYmKCgwLG8ud3Jh
cENvbXBvbmVudENsYXNzQXR0cmlidXRlKShuKSxyLmNvbXBvbmVudC5zdGF0aWModSxbdCxuLG51
bGwsbnVsbF0sYSksITApfWZ1bmN0aW9uIGYoZSx0KXt2YXIgbj1lWzFdLHI9ZVsyXSxzPWVbM10s
YT1lWzRdLHU9ZVs1XSxsPW5bMF0KK2lmKG4ubGVuZ3RoPjEpcmV0dXJuKDAsaS5jbG9zdXJlQ29t
cG9uZW50TWFjcm8pKG4scixzLGEsdSx0KQoraWYoLTE9PT1sLmluZGV4T2YoIi0iKSlyZXR1cm4h
MQordmFyIGM9dC5zeW1ib2xUYWJsZSxwPXZvaWQgMAorcmV0dXJuIGwuaW5kZXhPZigiLSIpPi0x
JiYocD10LmVudi5nZXRDb21wb25lbnREZWZpbml0aW9uKG4sYykpLCEhcCYmKCgwLG8ud3JhcENv
bXBvbmVudENsYXNzQXR0cmlidXRlKShzKSx0LmNvbXBvbmVudC5zdGF0aWMocCxbcixzLGEsdV0s
YyksITApfWUuZXhwZXJpbWVudGFsTWFjcm9zPXZvaWQgMCxlLnJlZ2lzdGVyTWFjcm9zPWZ1bmN0
aW9uKGUpe2gucHVzaChlKX0sZS5wb3B1bGF0ZU1hY3Jvcz1mdW5jdGlvbihlLG8pe3ZhciBjCitm
b3Ioby5hZGQoIm91dGxldCIsbi5vdXRsZXRNYWNybyksby5hZGQoImNvbXBvbmVudCIsaS5pbmxp
bmVDb21wb25lbnRNYWNybyksby5hZGQoInJlbmRlciIsdC5yZW5kZXJNYWNybyksby5hZGQoIm1v
dW50IixyLm1vdW50TWFjcm8pLG8uYWRkKCJpbnB1dCIsdS5pbnB1dE1hY3JvKSxvLmFkZCgidGV4
dGFyZWEiLGwudGV4dEFyZWFNYWNybyksby5hZGRNaXNzaW5nKHApLGUuYWRkKCJjb21wb25lbnQi
LGkuYmxvY2tDb21wb25lbnRNYWNybyksZS5hZGQoIi13aXRoLWR5bmFtaWMtdmFycyIscy5fd2l0
aER5bmFtaWNWYXJzTWFjcm8pLGUuYWRkKCItaW4tZWxlbWVudCIsYS5faW5FbGVtZW50TWFjcm8p
LGUuYWRkTWlzc2luZyhmKSxjPTA7YzxoLmxlbmd0aDtjKyspKDAsaFtjXSkoZSxvKQorcmV0dXJu
e2Jsb2NrczplLGlubGluZXM6b319Cit2YXIgaD1lLmV4cGVyaW1lbnRhbE1hY3Jvcz1bXX0pLGUo
ImVtYmVyLWdsaW1tZXIvc3ludGF4Ly1pbi1lbGVtZW50IixbImV4cG9ydHMiLCJAZ2xpbW1lci9y
dW50aW1lIiwiQGdsaW1tZXIvdXRpbCJdLGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCIKK2Uu
X2luRWxlbWVudE1hY3JvPWZ1bmN0aW9uKGUscil7dmFyIGE9aShlKSx1PSgwLHQuY29tcGlsZUFy
Z3MpKG8oZSkscyhlKSxyKQorci5wdXRBcmdzKHUpLHIudGVzdCgic2ltcGxlIiksci5sYWJlbGxl
ZChudWxsLGZ1bmN0aW9uKGUpe2UuanVtcFVubGVzcygiRU5EIiksZS5wdXNoUmVtb3RlRWxlbWVu
dCgpLGUuZXZhbHVhdGUoKDAsbi51bndyYXApKGEpKSxlLnBvcFJlbW90ZUVsZW1lbnQoKX0pfQor
dmFyIHI9dC5CYXNlbGluZVN5bnRheC5OZXN0ZWRCbG9jayxpPXIuZGVmYXVsdEJsb2NrLG89ci5w
YXJhbXMscz1yLmhhc2h9KSxlKCJlbWJlci1nbGltbWVyL3N5bnRheC8tdGV4dC1hcmVhIixbImV4
cG9ydHMiLCJlbWJlci1nbGltbWVyL3V0aWxzL2JpbmRpbmdzIl0sZnVuY3Rpb24oZSx0KXsidXNl
IHN0cmljdCIKK2UudGV4dEFyZWFNYWNybz1mdW5jdGlvbihlLG4scixpKXt2YXIgbz1pLmVudi5n
ZXRDb21wb25lbnREZWZpbml0aW9uKFsiLXRleHQtYXJlYSJdLGkuc3ltYm9sVGFibGUpCityZXR1
cm4oMCx0LndyYXBDb21wb25lbnRDbGFzc0F0dHJpYnV0ZSkociksaS5jb21wb25lbnQuc3RhdGlj
KG8sW24scixudWxsLG51bGxdLGkuc3ltYm9sVGFibGUpLCEwfX0pLGUoImVtYmVyLWdsaW1tZXIv
c3ludGF4Ly13aXRoLWR5bmFtaWMtdmFycyIsWyJleHBvcnRzIiwiQGdsaW1tZXIvcnVudGltZSIs
IkBnbGltbWVyL3V0aWwiXSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiCitlLl93aXRoRHlu
YW1pY1ZhcnNNYWNybz1mdW5jdGlvbihlLHIpe3ZhciBhPWkoZSksdT0oMCx0LmNvbXBpbGVBcmdz
KShvKGUpLHMoZSkscikKK3IudW5pdChmdW5jdGlvbihlKXtlLnB1dEFyZ3ModSksZS5wdXNoRHlu
YW1pY1Njb3BlKCksZS5iaW5kRHluYW1pY1Njb3BlKHUubmFtZWQua2V5cyksZS5ldmFsdWF0ZSgo
MCxuLnVud3JhcCkoYSkpLGUucG9wRHluYW1pY1Njb3BlKCl9KX0KK3ZhciByPXQuQmFzZWxpbmVT
eW50YXguTmVzdGVkQmxvY2ssaT1yLmRlZmF1bHRCbG9jayxvPXIucGFyYW1zLHM9ci5oYXNofSks
ZSgiZW1iZXItZ2xpbW1lci9zeW50YXgvYWJzdHJhY3QtbWFuYWdlciIsWyJleHBvcnRzIl0sZnVu
Y3Rpb24oZSl7InVzZSBzdHJpY3QiCitlLmRlZmF1bHQ9ZnVuY3Rpb24oKXt9fSksZSgiZW1iZXIt
Z2xpbW1lci9zeW50YXgvY3VybHktY29tcG9uZW50IixbImV4cG9ydHMiLCJlbWJlci1iYWJlbCIs
ImVtYmVyLXV0aWxzIiwiQGdsaW1tZXIvcnVudGltZSIsImVtYmVyLWdsaW1tZXIvdXRpbHMvYmlu
ZGluZ3MiLCJlbWJlci1nbGltbWVyL2NvbXBvbmVudCIsImVtYmVyLW1ldGFsIiwiZW1iZXItZGVi
dWciLCJlbWJlci12aWV3cyIsImVtYmVyLWdsaW1tZXIvdXRpbHMvcHJvY2Vzcy1hcmdzIiwiY29u
dGFpbmVyIiwiZW1iZXItZ2xpbW1lci9zeW50YXgvYWJzdHJhY3QtbWFuYWdlciJdLGZ1bmN0aW9u
KGUsdCxuLHIsaSxvLHMsYSx1LGwsYyxwKXsidXNlIHN0cmljdCIKK2Z1bmN0aW9uIGYoKXt9ZnVu
Y3Rpb24gaChlLHQpe2UubmFtZWQuaGFzKCJpZCIpJiYodC5lbGVtZW50SWQ9dC5pZCl9ZnVuY3Rp
b24gZChlLHQsbixyKXtmb3IodmFyIG8scyxhLHU9W10sbD10Lmxlbmd0aC0xOy0xIT09bDspbz10
W2xdLHM9aS5BdHRyaWJ1dGVCaW5kaW5nLnBhcnNlKG8pLGE9c1sxXSwtMT09PXUuaW5kZXhPZihh
KSYmKHUucHVzaChhKSxpLkF0dHJpYnV0ZUJpbmRpbmcuaW5zdGFsbChlLG4scyxyKSksbC0tOy0x
PT09dS5pbmRleE9mKCJpZCIpJiZyLmFkZFN0YXRpY0F0dHJpYnV0ZShlLCJpZCIsbi5lbGVtZW50
SWQpLC0xPT09dS5pbmRleE9mKCJzdHlsZSIpJiZpLklzVmlzaWJsZUJpbmRpbmcuaW5zdGFsbChl
LG4scil9ZnVuY3Rpb24gbSgpe31mdW5jdGlvbiBnKGUpe3JldHVybiBlLmluc3RydW1lbnREZXRh
aWxzKHtpbml0aWFsUmVuZGVyOiEwfSl9ZnVuY3Rpb24geShlKXtyZXR1cm4gZS5pbnN0cnVtZW50
RGV0YWlscyh7aW5pdGlhbFJlbmRlcjohMX0pfWZ1bmN0aW9uIHYoZSl7dmFyIHQ9ZS5keW5hbWlj
U2NvcGUoKS52aWV3LnRhZ05hbWUKK3JldHVybiByLlByaW1pdGl2ZVJlZmVyZW5jZS5jcmVhdGUo
IiI9PT10P251bGw6dHx8ImRpdiIpfWZ1bmN0aW9uIGIoZSl7cmV0dXJuIGUuZ2V0U2VsZigpLmdl
dCgiYXJpYVJvbGUiKX1lLlJvb3RDb21wb25lbnREZWZpbml0aW9uPWUuQ3VybHlDb21wb25lbnRE
ZWZpbml0aW9uPXZvaWQgMCxlLnZhbGlkYXRlUG9zaXRpb25hbFBhcmFtZXRlcnM9ZgordmFyIF89
KDAsdC50YWdnZWRUZW1wbGF0ZUxpdGVyYWxMb29zZSkoWyJ0ZW1wbGF0ZTpjb21wb25lbnRzLy1k
ZWZhdWx0Il0sWyJ0ZW1wbGF0ZTpjb21wb25lbnRzLy1kZWZhdWx0Il0pLHc9KDAsYy5wcml2YXRp
emUpKF8pLEU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuLHIpe3RoaXMuZW52aXJvbm1lbnQ9
ZSx0aGlzLmNvbXBvbmVudD10LHRoaXMuY2xhc3NSZWY9bnVsbCx0aGlzLmFyZ3M9bix0aGlzLmFy
Z3NSZXZpc2lvbj1uLnRhZy52YWx1ZSgpLHRoaXMuZmluYWxpemVyPXJ9cmV0dXJuIGUucHJvdG90
eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNvbXBvbmVudCx0PXRoaXMuZW52aXJv
bm1lbnQKK3QuaXNJbnRlcmFjdGl2ZSYmKGUudHJpZ2dlcigid2lsbERlc3Ryb3lFbGVtZW50Iiks
ZS50cmlnZ2VyKCJ3aWxsQ2xlYXJSZW5kZXIiKSksdC5kZXN0cm95ZWRDb21wb25lbnRzLnB1c2go
ZSl9LGUucHJvdG90eXBlLmZpbmFsaXplPWZ1bmN0aW9uKCl7KDAsdGhpcy5maW5hbGl6ZXIpKCks
dGhpcy5maW5hbGl6ZXI9bX0sZX0oKSx4PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoKXtyZXR1cm4o
MCx0LnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4pKHRoaXMsZS5hcHBseSh0aGlzLGFyZ3VtZW50
cykpfXJldHVybigwLHQuaW5oZXJpdHMpKHIsZSksci5wcm90b3R5cGUucHJlcGFyZUFyZ3M9ZnVu
Y3Rpb24oZSx0KXtyZXR1cm4gZS5Db21wb25lbnRDbGFzcyYmKHQubmFtZWQsdC5wb3NpdGlvbmFs
LnZhbHVlcyxlLkNvbXBvbmVudENsYXNzLmNsYXNzLnBvc2l0aW9uYWxQYXJhbXMpLCgwLGwuZ2F0
aGVyQXJncykodCxlKX0sci5wcm90b3R5cGUuY3JlYXRlPWZ1bmN0aW9uKGUsdCxuLHIsaSxhKXt2
YXIgdT1yLnZpZXcsYz10LkNvbXBvbmVudENsYXNzLHA9bC5Db21wb25lbnRBcmdzLmNyZWF0ZShu
KSxmPXAudmFsdWUoKSxkPWYucHJvcHMKK2gobixkKSxkLnBhcmVudFZpZXc9dSxkW28uSEFTX0JM
T0NLXT1hLGQuX3RhcmdldE9iamVjdD1pLnZhbHVlKCkKK3ZhciBtPWMuY3JlYXRlKGQpLHk9KDAs
cy5faW5zdHJ1bWVudFN0YXJ0KSgicmVuZGVyLmNvbXBvbmVudCIsZyxtKQorci52aWV3PW0sbnVs
bCE9PXUmJnUuYXBwZW5kQ2hpbGQobSksIiI9PT1tLnRhZ05hbWUmJihlLmlzSW50ZXJhY3RpdmUm
Jm0udHJpZ2dlcigid2lsbFJlbmRlciIpLG0uX3RyYW5zaXRpb25UbygiaGFzRWxlbWVudCIpLGUu
aXNJbnRlcmFjdGl2ZSYmbS50cmlnZ2VyKCJ3aWxsSW5zZXJ0RWxlbWVudCIpKQordmFyIHY9bmV3
IEUoZSxtLHAseSkKK3JldHVybiBuLm5hbWVkLmhhcygiY2xhc3MiKSYmKHYuY2xhc3NSZWY9bi5u
YW1lZC5nZXQoImNsYXNzIikpLGUuaXNJbnRlcmFjdGl2ZSYmIiIhPT1tLnRhZ05hbWUmJm0udHJp
Z2dlcigid2lsbFJlbmRlciIpLHZ9LHIucHJvdG90eXBlLmxheW91dEZvcj1mdW5jdGlvbihlLHQs
bil7dmFyIHIsaT1lLnRlbXBsYXRlCityZXR1cm4gaXx8KHI9dC5jb21wb25lbnQsaT10aGlzLnRl
bXBsYXRlRm9yKHIsbikpLG4uZ2V0Q29tcGlsZWRCbG9jayhULGkpfSxyLnByb3RvdHlwZS50ZW1w
bGF0ZUZvcj1mdW5jdGlvbihlLHQpe3ZhciByLGk9KDAscy5nZXQpKGUsImxheW91dCIpLG89ZVtu
Lk9XTkVSXQoraWYoaSlyZXR1cm4gdC5nZXRUZW1wbGF0ZShpLG8pCit2YXIgYT0oMCxzLmdldCko
ZSwibGF5b3V0TmFtZSIpCityZXR1cm4gYSYmKHI9by5sb29rdXAoInRlbXBsYXRlOiIrYSkpP3I6
by5sb29rdXAodyl9LHIucHJvdG90eXBlLmdldFNlbGY9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuY29t
cG9uZW50W28uUk9PVF9SRUZdfSxyLnByb3RvdHlwZS5kaWRDcmVhdGVFbGVtZW50PWZ1bmN0aW9u
KGUsdCxuKXt2YXIgcj1lLmNvbXBvbmVudCxvPWUuY2xhc3NSZWYscz1lLmVudmlyb25tZW50Oygw
LHUuc2V0Vmlld0VsZW1lbnQpKHIsdCkKK3ZhciBhPXIuYXR0cmlidXRlQmluZGluZ3MsbD1yLmNs
YXNzTmFtZXMsYz1yLmNsYXNzTmFtZUJpbmRpbmdzCithJiZhLmxlbmd0aD9kKHQsYSxyLG4pOihu
LmFkZFN0YXRpY0F0dHJpYnV0ZSh0LCJpZCIsci5lbGVtZW50SWQpLGkuSXNWaXNpYmxlQmluZGlu
Zy5pbnN0YWxsKHQscixuKSksbyYmbi5hZGREeW5hbWljQXR0cmlidXRlKHQsImNsYXNzIixvKSxs
JiZsLmxlbmd0aCYmbC5mb3JFYWNoKGZ1bmN0aW9uKGUpe24uYWRkU3RhdGljQXR0cmlidXRlKHQs
ImNsYXNzIixlKX0pLGMmJmMubGVuZ3RoJiZjLmZvckVhY2goZnVuY3Rpb24oZSl7aS5DbGFzc05h
bWVCaW5kaW5nLmluc3RhbGwodCxyLGUsbil9KSxyLl90cmFuc2l0aW9uVG8oImhhc0VsZW1lbnQi
KSxzLmlzSW50ZXJhY3RpdmUmJnIudHJpZ2dlcigid2lsbEluc2VydEVsZW1lbnQiKX0sci5wcm90
b3R5cGUuZGlkUmVuZGVyTGF5b3V0PWZ1bmN0aW9uKGUsdCl7ZS5jb21wb25lbnRbby5CT1VORFNd
PXQsZS5maW5hbGl6ZSgpfSxyLnByb3RvdHlwZS5nZXRUYWc9ZnVuY3Rpb24oZSl7cmV0dXJuIGUu
Y29tcG9uZW50W28uRElSVFlfVEFHXX0sci5wcm90b3R5cGUuZGlkQ3JlYXRlPWZ1bmN0aW9uKGUp
e3ZhciB0PWUuY29tcG9uZW50CitlLmVudmlyb25tZW50LmlzSW50ZXJhY3RpdmUmJih0Ll90cmFu
c2l0aW9uVG8oImluRE9NIiksdC50cmlnZ2VyKCJkaWRJbnNlcnRFbGVtZW50IiksdC50cmlnZ2Vy
KCJkaWRSZW5kZXIiKSl9LHIucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihlKXt2YXIgdCxuLHIs
aSxhLGw9ZS5jb21wb25lbnQsYz1lLmFyZ3MscD1lLmFyZ3NSZXZpc2lvbixmPWUuZW52aXJvbm1l
bnQKK2UuZmluYWxpemVyPSgwLHMuX2luc3RydW1lbnRTdGFydCkoInJlbmRlci5jb21wb25lbnQi
LHksbCksYy50YWcudmFsaWRhdGUocCl8fCh0PWMudmFsdWUoKSxuPXQuYXR0cnMscj10LnByb3Bz
LGUuYXJnc1JldmlzaW9uPWMudGFnLnZhbHVlKCksaT1sLmF0dHJzLGE9bixsW28uSVNfRElTUEFU
Q0hJTkdfQVRUUlNdPSEwLGwuc2V0UHJvcGVydGllcyhyKSxsW28uSVNfRElTUEFUQ0hJTkdfQVRU
UlNdPSExLCgwLHUuZGlzcGF0Y2hMaWZlQ3ljbGVIb29rKShsLCJkaWRVcGRhdGVBdHRycyIsaSxh
KSwoMCx1LmRpc3BhdGNoTGlmZUN5Y2xlSG9vaykobCwiZGlkUmVjZWl2ZUF0dHJzIixpLGEpKSxm
LmlzSW50ZXJhY3RpdmUmJihsLnRyaWdnZXIoIndpbGxVcGRhdGUiKSxsLnRyaWdnZXIoIndpbGxS
ZW5kZXIiKSl9LHIucHJvdG90eXBlLmRpZFVwZGF0ZUxheW91dD1mdW5jdGlvbihlKXtlLmZpbmFs
aXplKCl9LHIucHJvdG90eXBlLmRpZFVwZGF0ZT1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbXBvbmVu
dAorZS5lbnZpcm9ubWVudC5pc0ludGVyYWN0aXZlJiYodC50cmlnZ2VyKCJkaWRVcGRhdGUiKSx0
LnRyaWdnZXIoImRpZFJlbmRlciIpKX0sci5wcm90b3R5cGUuZ2V0RGVzdHJ1Y3Rvcj1mdW5jdGlv
bihlKXtyZXR1cm4gZX0scn0ocC5kZWZhdWx0KSxDPW5ldyB4LE89ZnVuY3Rpb24oZSl7ZnVuY3Rp
b24gbigpe3JldHVybigwLHQucG9zc2libGVDb25zdHJ1Y3RvclJldHVybikodGhpcyxlLmFwcGx5
KHRoaXMsYXJndW1lbnRzKSl9cmV0dXJuKDAsdC5pbmhlcml0cykobixlKSxuLnByb3RvdHlwZS5j
cmVhdGU9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9dC5Db21wb25lbnRDbGFzcy5jcmVhdGUoKSxv
PSgwLHMuX2luc3RydW1lbnRTdGFydCkoInJlbmRlci5jb21wb25lbnQiLGcsaSkKK3JldHVybiBy
LnZpZXc9aSwiIj09PWkudGFnTmFtZSYmKGUuaXNJbnRlcmFjdGl2ZSYmaS50cmlnZ2VyKCJ3aWxs
UmVuZGVyIiksaS5fdHJhbnNpdGlvblRvKCJoYXNFbGVtZW50IiksZS5pc0ludGVyYWN0aXZlJiZp
LnRyaWdnZXIoIndpbGxJbnNlcnRFbGVtZW50IikpLG5ldyBFKGUsaSxuLG8pfSxufSh4KSxBPW5l
dyBPCitlLkN1cmx5Q29tcG9uZW50RGVmaW5pdGlvbj1mdW5jdGlvbihlKXtmdW5jdGlvbiBuKG4s
cixpLG8pe3ZhciBzPSgwLHQucG9zc2libGVDb25zdHJ1Y3RvclJldHVybikodGhpcyxlLmNhbGwo
dGhpcyxuLEMscikpCityZXR1cm4gcy50ZW1wbGF0ZT1pLHMuYXJncz1vLHN9cmV0dXJuKDAsdC5p
bmhlcml0cykobixlKSxufShyLkNvbXBvbmVudERlZmluaXRpb24pLGUuUm9vdENvbXBvbmVudERl
ZmluaXRpb249ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbihuKXt2YXIgcj0oMCx0LnBvc3NpYmxlQ29u
c3RydWN0b3JSZXR1cm4pKHRoaXMsZS5jYWxsKHRoaXMsIi1yb290IixBLHtjbGFzczpuLmNvbnN0
cnVjdG9yLGNyZWF0ZTpmdW5jdGlvbigpe3JldHVybiBufX0pKQorcmV0dXJuIHIudGVtcGxhdGU9
dm9pZCAwLHIuYXJncz12b2lkIDAscn1yZXR1cm4oMCx0LmluaGVyaXRzKShuLGUpLG59KHIuQ29t
cG9uZW50RGVmaW5pdGlvbikKK3ZhciBUPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLnRl
bXBsYXRlPWV9cmV0dXJuIGUucHJvdG90eXBlLmNvbXBpbGU9ZnVuY3Rpb24oZSl7ZS53cmFwTGF5
b3V0KHRoaXMudGVtcGxhdGUuYXNMYXlvdXQoKSksZS50YWcuZHluYW1pYyh2KSxlLmF0dHJzLmR5
bmFtaWMoInJvbGUiLGIpLGUuYXR0cnMuc3RhdGljKCJjbGFzcyIsImVtYmVyLXZpZXciKX0sZX0o
KQorVC5pZD0iY3VybHkifSksZSgiZW1iZXItZ2xpbW1lci9zeW50YXgvZHluYW1pYy1jb21wb25l
bnQiLFsiZXhwb3J0cyIsIkBnbGltbWVyL3J1bnRpbWUiLCJAZ2xpbW1lci9yZWZlcmVuY2UiLCJl
bWJlci1kZWJ1ZyJdLGZ1bmN0aW9uKGUsdCxuLHIpeyJ1c2Ugc3RyaWN0IgorZnVuY3Rpb24gaShl
LHQpe3ZhciBuPWUuZW52LHI9ZS5nZXRBcmdzKCksaT1yLnBvc2l0aW9uYWwuYXQoMCkKK3JldHVy
biBuZXcgbyh7bmFtZVJlZjppLGVudjpuLHN5bWJvbFRhYmxlOnR9KX1lLmNsb3N1cmVDb21wb25l
bnRNYWNybz1mdW5jdGlvbihlLHQsbixyLG8scyl7cmV0dXJuIHMuY29tcG9uZW50LmR5bmFtaWMo
W1tbImdldCIsZV1dLG4scixvXSxpLFt0LG4scixvXSxzLnN5bWJvbFRhYmxlKSwhMH0sZS5keW5h
bWljQ29tcG9uZW50TWFjcm89ZnVuY3Rpb24oZSx0LG4scixvKXt2YXIgcz1bZS5zbGljZSgwLDEp
LG51bGwsbnVsbCxudWxsXSxhPVtlLnNsaWNlKDEpLHQsbnVsbCxudWxsXQorcmV0dXJuIG8uY29t
cG9uZW50LmR5bmFtaWMocyxpLGEsby5zeW1ib2xUYWJsZSksITB9LGUuYmxvY2tDb21wb25lbnRN
YWNybz1mdW5jdGlvbihlLHQpe3ZhciBuPWVbMl0scj1lWzNdLG89ZVs0XSxzPWVbNV0sYT1bbi5z
bGljZSgwLDEpLG51bGwsbnVsbCxudWxsXSx1PVtuLnNsaWNlKDEpLHIsbyxzXQorcmV0dXJuIHQu
Y29tcG9uZW50LmR5bmFtaWMoYSxpLHUsdC5zeW1ib2xUYWJsZSksITB9LGUuaW5saW5lQ29tcG9u
ZW50TWFjcm89ZnVuY3Rpb24oZSx0LG4scil7dmFyIG89W3Quc2xpY2UoMCwxKSxudWxsLG51bGws
bnVsbF0scz1bdC5zbGljZSgxKSxuLG51bGwsbnVsbF0KK3JldHVybiByLmNvbXBvbmVudC5keW5h
bWljKG8saSxzLHIuc3ltYm9sVGFibGUpLCEwfQordmFyIG89ZnVuY3Rpb24oKXtmdW5jdGlvbiBl
KGUpe3ZhciB0PWUubmFtZVJlZixuPWUuZW52LHI9ZS5zeW1ib2xUYWJsZSxpPWUuYXJncwordGhp
cy50YWc9dC50YWcsdGhpcy5uYW1lUmVmPXQsdGhpcy5lbnY9bix0aGlzLnN5bWJvbFRhYmxlPXIs
dGhpcy5hcmdzPWl9cmV0dXJuIGUucHJvdG90eXBlLnZhbHVlPWZ1bmN0aW9uKCl7dmFyIGU9dGhp
cy5lbnYsbj10aGlzLm5hbWVSZWYscj10aGlzLnN5bWJvbFRhYmxlLGk9bi52YWx1ZSgpCityZXR1
cm4ic3RyaW5nIj09dHlwZW9mIGk/ZS5nZXRDb21wb25lbnREZWZpbml0aW9uKFtpXSxyKTooMCx0
LmlzQ29tcG9uZW50RGVmaW5pdGlvbikoaSk/aTpudWxsfSxlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rp
b24oKXtyZXR1cm4gbi5VTkRFRklORURfUkVGRVJFTkNFfSxlfSgpfSksZSgiZW1iZXItZ2xpbW1l
ci9zeW50YXgvaW5wdXQiLFsiZXhwb3J0cyIsImVtYmVyLWRlYnVnIiwiZW1iZXItZ2xpbW1lci91
dGlscy9iaW5kaW5ncyIsImVtYmVyLWdsaW1tZXIvc3ludGF4L2R5bmFtaWMtY29tcG9uZW50Il0s
ZnVuY3Rpb24oZSx0LG4scil7InVzZSBzdHJpY3QiCitmdW5jdGlvbiBpKGUsdCxuKXt2YXIgcj1u
LmVudi5nZXRDb21wb25lbnREZWZpbml0aW9uKFsiLXRleHQtZmllbGQiXSxuLnN5bWJvbFRhYmxl
KQorcmV0dXJuIG4uY29tcG9uZW50LnN0YXRpYyhyLFtlLHQsbnVsbCxudWxsXSxuLnN5bWJvbFRh
YmxlKSwhMH1lLmlucHV0TWFjcm89ZnVuY3Rpb24oZSx0LG8scyl7dmFyIGEsdSxsPXZvaWQgMCxj
PXZvaWQgMCxwPS0xCityZXR1cm4gbyYmKGw9b1swXSxjPW9bMV0scD1sLmluZGV4T2YoInR5cGUi
KSxsLmluZGV4T2YoInZhbHVlIikpLHR8fCh0PVtdKSxwPi0xPyhhPWNbcF0sQXJyYXkuaXNBcnJh
eShhKT8oMCxyLmR5bmFtaWNDb21wb25lbnRNYWNybykodCxvLG51bGwsbnVsbCxzKToiY2hlY2ti
b3giPT09YT8oKDAsbi53cmFwQ29tcG9uZW50Q2xhc3NBdHRyaWJ1dGUpKG8pLHU9cy5lbnYuZ2V0
Q29tcG9uZW50RGVmaW5pdGlvbihbIi1jaGVja2JveCJdLHMuc3ltYm9sVGFibGUpLHMuY29tcG9u
ZW50LnN0YXRpYyh1LFt0LG8sbnVsbCxudWxsXSxzLnN5bWJvbFRhYmxlKSwhMCk6aSh0LG8scykp
OmkodCxvLHMpfX0pLGUoImVtYmVyLWdsaW1tZXIvc3ludGF4L21vdW50IixbImV4cG9ydHMiLCJl
bWJlci1iYWJlbCIsIkBnbGltbWVyL3J1bnRpbWUiLCJAZ2xpbW1lci9yZWZlcmVuY2UiLCJlbWJl
ci1kZWJ1ZyIsImVtYmVyLWdsaW1tZXIvdXRpbHMvcmVmZXJlbmNlcyIsImVtYmVyLXJvdXRpbmci
LCJlbWJlci1nbGltbWVyL3N5bnRheC9vdXRsZXQiLCJlbWJlci1nbGltbWVyL3N5bnRheC9hYnN0
cmFjdC1tYW5hZ2VyIl0sZnVuY3Rpb24oZSx0LG4scixpLG8scyxhLHUpeyJ1c2Ugc3RyaWN0Igor
ZnVuY3Rpb24gbChlLHQpe3ZhciBuPWUuZW52LHI9ZS5nZXRBcmdzKCksaT1yLnBvc2l0aW9uYWwu
YXQoMCkKK3JldHVybiBuZXcgYyh7bmFtZVJlZjppLGVudjpuLHN5bWJvbFRhYmxlOnR9KX1lLm1v
dW50TWFjcm89ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9W3Quc2xpY2UoMCwxKSxudWxsLG51bGws
bnVsbF0KK3JldHVybiByLmNvbXBvbmVudC5keW5hbWljKGksbCxbbnVsbCxudWxsLG51bGwsbnVs
bF0sci5zeW1ib2xUYWJsZSksITB9Cit2YXIgYz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dmFy
IHQ9ZS5uYW1lUmVmLG49ZS5lbnYscj1lLnN5bWJvbFRhYmxlCitlLmFyZ3MKK3RoaXMudGFnPXQu
dGFnLHRoaXMubmFtZVJlZj10LHRoaXMuZW52PW4sdGhpcy5zeW1ib2xUYWJsZT1yLHRoaXMuX2xh
c3ROYW1lPXZvaWQgMCx0aGlzLl9sYXN0RGVmPXZvaWQgMH1yZXR1cm4gZS5wcm90b3R5cGUudmFs
dWU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmVudix0PXRoaXMubmFtZVJlZixuPXQudmFsdWUoKQor
cmV0dXJuInN0cmluZyI9PXR5cGVvZiBuP3RoaXMuX2xhc3ROYW1lPT09bj90aGlzLl9sYXN0RGVm
OmUub3duZXIuaGFzUmVnaXN0cmF0aW9uKCJlbmdpbmU6IituKT8odGhpcy5fbGFzdE5hbWU9bix0
aGlzLl9sYXN0RGVmPW5ldyBoKG4pLHRoaXMuX2xhc3REZWYpOm51bGw6bnVsbH0sZX0oKSxwPWZ1
bmN0aW9uKGUpe2Z1bmN0aW9uIG4oKXtyZXR1cm4oMCx0LnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1
cm4pKHRoaXMsZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXJldHVybigwLHQuaW5oZXJpdHMpKG4s
ZSksbi5wcm90b3R5cGUucHJlcGFyZUFyZ3M9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdH0sbi5wcm90
b3R5cGUuY3JlYXRlPWZ1bmN0aW9uKGUsdCxuLGkpe3ZhciBvPXQubmFtZQoraS5vdXRsZXRTdGF0
ZT1yLlVOREVGSU5FRF9SRUZFUkVOQ0UKK3ZhciBzPWUub3duZXIuYnVpbGRDaGlsZEVuZ2luZUlu
c3RhbmNlKG8pCityZXR1cm4gcy5ib290KCksc30sbi5wcm90b3R5cGUubGF5b3V0Rm9yPWZ1bmN0
aW9uKGUsdCxuKXt2YXIgcj10Lmxvb2t1cCgidGVtcGxhdGU6YXBwbGljYXRpb24iKQorcmV0dXJu
IG4uZ2V0Q29tcGlsZWRCbG9jayhhLk91dGxldExheW91dENvbXBpbGVyLHIpfSxuLnByb3RvdHlw
ZS5nZXRTZWxmPWZ1bmN0aW9uKGUpe3ZhciB0PWUuZmFjdG9yeUZvcigiY29udHJvbGxlcjphcHBs
aWNhdGlvbiIpLG49dHx8KDAscy5nZW5lcmF0ZUNvbnRyb2xsZXJGYWN0b3J5KShlLCJhcHBsaWNh
dGlvbiIpCityZXR1cm4gbmV3IG8uUm9vdFJlZmVyZW5jZShuLmNyZWF0ZSgpKX0sbi5wcm90b3R5
cGUuZ2V0VGFnPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LG4ucHJvdG90eXBlLmdldERlc3RydWN0
b3I9ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LG4ucHJvdG90eXBlLmRpZENyZWF0ZUVsZW1lbnQ9ZnVu
Y3Rpb24oKXt9LG4ucHJvdG90eXBlLmRpZFJlbmRlckxheW91dD1mdW5jdGlvbigpe30sbi5wcm90
b3R5cGUuZGlkQ3JlYXRlPWZ1bmN0aW9uKCl7fSxuLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24o
KXt9LG4ucHJvdG90eXBlLmRpZFVwZGF0ZUxheW91dD1mdW5jdGlvbigpe30sbi5wcm90b3R5cGUu
ZGlkVXBkYXRlPWZ1bmN0aW9uKCl7fSxufSh1LmRlZmF1bHQpLGY9bmV3IHAsaD1mdW5jdGlvbihl
KXtmdW5jdGlvbiBuKG4pe3JldHVybigwLHQucG9zc2libGVDb25zdHJ1Y3RvclJldHVybikodGhp
cyxlLmNhbGwodGhpcyxuLGYsbnVsbCkpfXJldHVybigwLHQuaW5oZXJpdHMpKG4sZSksbn0obi5D
b21wb25lbnREZWZpbml0aW9uKX0pLGUoImVtYmVyLWdsaW1tZXIvc3ludGF4L291dGxldCIsWyJl
eHBvcnRzIiwiZW1iZXItYmFiZWwiLCJlbWJlci11dGlscyIsIkBnbGltbWVyL3J1bnRpbWUiLCJl
bWJlci1tZXRhbCIsImVtYmVyLWdsaW1tZXIvdXRpbHMvcmVmZXJlbmNlcyIsImVtYmVyLWdsaW1t
ZXIvc3ludGF4L2Fic3RyYWN0LW1hbmFnZXIiLCJAZ2xpbW1lci9yZWZlcmVuY2UiXSxmdW5jdGlv
bihlLHQsbixyLGksbyxzLGEpeyJ1c2Ugc3RyaWN0IgorZnVuY3Rpb24gdShlKXt2YXIgdD1lLmR5
bmFtaWNTY29wZSgpLG49dC5vdXRsZXRTdGF0ZSxyPWUuZ2V0QXJncygpLGk9dm9pZCAwCityZXR1
cm4gaT0wPT09ci5wb3NpdGlvbmFsLmxlbmd0aD9uZXcgYS5Db25zdFJlZmVyZW5jZSgibWFpbiIp
OnIucG9zaXRpb25hbC5hdCgwKSxuZXcgZihpLG4pfWZ1bmN0aW9uIGwoZSx0LG4pe3JldHVybiB0
fHxuPyF0JiZufHx0JiYhbj9udWxsOm4ucmVuZGVyLnRlbXBsYXRlPT09dC5yZW5kZXIudGVtcGxh
dGUmJm4ucmVuZGVyLmNvbnRyb2xsZXI9PT10LnJlbmRlci5jb250cm9sbGVyP2U6bnVsbDplfWZ1
bmN0aW9uIGMoZSl7dmFyIHQ9ZS5yZW5kZXIKK3JldHVybntvYmplY3Q6dC5uYW1lKyI6Iit0Lm91
dGxldH19ZnVuY3Rpb24gcCgpe31lLk91dGxldExheW91dENvbXBpbGVyPWUuVG9wTGV2ZWxPdXRs
ZXRDb21wb25lbnREZWZpbml0aW9uPXZvaWQgMCxlLm91dGxldE1hY3JvPWZ1bmN0aW9uKGUsdCxu
LGkpe3R8fCh0PVtdKQordmFyIG89W3Quc2xpY2UoMCwxKSxudWxsLG51bGwsbnVsbF0KK3JldHVy
biBpLmNvbXBvbmVudC5keW5hbWljKG8sdSxyLkNvbXBpbGVkQXJncy5lbXB0eSgpLGkuc3ltYm9s
VGFibGUsbnVsbCksITB9Cit2YXIgZj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLm91
dGxldE5hbWVSZWY9ZSx0aGlzLnBhcmVudE91dGxldFN0YXRlUmVmPXQsdGhpcy5kZWZpbml0aW9u
PW51bGwsdGhpcy5sYXN0U3RhdGU9bnVsbAordmFyIG49dGhpcy5vdXRsZXRTdGF0ZVRhZz1uZXcg
YS5VcGRhdGFibGVUYWcodC50YWcpCit0aGlzLnRhZz0oMCxhLmNvbWJpbmUpKFtuLnRhZyxlLnRh
Z10pfXJldHVybiBlLnByb3RvdHlwZS52YWx1ZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMub3V0bGV0
TmFtZVJlZix0PXRoaXMucGFyZW50T3V0bGV0U3RhdGVSZWYsbj10aGlzLmRlZmluaXRpb24scj10
aGlzLmxhc3RTdGF0ZSxpPWUudmFsdWUoKSxvPXQuZ2V0KCJvdXRsZXRzIikuZ2V0KGkpLHM9dGhp
cy5sYXN0U3RhdGU9by52YWx1ZSgpCit0aGlzLm91dGxldFN0YXRlVGFnLnVwZGF0ZShvLnRhZyks
bj1sKG4scixzKQordmFyIGE9cyYmcy5yZW5kZXIudGVtcGxhdGUKK3JldHVybiBufHwodGhpcy5k
ZWZpbml0aW9uPWE/bmV3IGIoaSxzLnJlbmRlci50ZW1wbGF0ZSk6bnVsbCl9LGV9KCksaD1mdW5j
dGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5vdXRsZXRTdGF0ZT1lLHRoaXMuaW5zdHJ1bWVudCgp
fXJldHVybiBlLnByb3RvdHlwZS5pbnN0cnVtZW50PWZ1bmN0aW9uKCl7dGhpcy5maW5hbGl6ZXI9
KDAsaS5faW5zdHJ1bWVudFN0YXJ0KSgicmVuZGVyLm91dGxldCIsYyx0aGlzLm91dGxldFN0YXRl
KX0sZS5wcm90b3R5cGUuZmluYWxpemU9ZnVuY3Rpb24oKXsoMCx0aGlzLmZpbmFsaXplcikoKSx0
aGlzLmZpbmFsaXplcj1wfSxlfSgpLGQ9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbigpe3JldHVybigw
LHQucG9zc2libGVDb25zdHJ1Y3RvclJldHVybikodGhpcyxlLmFwcGx5KHRoaXMsYXJndW1lbnRz
KSl9cmV0dXJuKDAsdC5pbmhlcml0cykobixlKSxuLnByb3RvdHlwZS5wcmVwYXJlQXJncz1mdW5j
dGlvbihlLHQpe3JldHVybiB0fSxuLnByb3RvdHlwZS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4scil7
dmFyIGk9ci5vdXRsZXRTdGF0ZT1yLm91dGxldFN0YXRlLmdldCgib3V0bGV0cyIpLmdldCh0Lm91
dGxldE5hbWUpLG89aS52YWx1ZSgpCityZXR1cm4gbmV3IGgobyl9LG4ucHJvdG90eXBlLmxheW91
dEZvcj1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG4uZ2V0Q29tcGlsZWRCbG9jayhfLGUudGVtcGxh
dGUpfSxuLnByb3RvdHlwZS5nZXRTZWxmPWZ1bmN0aW9uKGUpe3ZhciB0PWUub3V0bGV0U3RhdGUK
K3JldHVybiBuZXcgby5Sb290UmVmZXJlbmNlKHQucmVuZGVyLmNvbnRyb2xsZXIpfSxuLnByb3Rv
dHlwZS5nZXRUYWc9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sbi5wcm90b3R5cGUuZ2V0RGVzdHJ1
Y3Rvcj1mdW5jdGlvbigpe3JldHVybiBudWxsfSxuLnByb3RvdHlwZS5kaWRSZW5kZXJMYXlvdXQ9
ZnVuY3Rpb24oZSl7ZS5maW5hbGl6ZSgpfSxuLnByb3RvdHlwZS5kaWRDcmVhdGVFbGVtZW50PWZ1
bmN0aW9uKCl7fSxuLnByb3RvdHlwZS5kaWRDcmVhdGU9ZnVuY3Rpb24oKXt9LG4ucHJvdG90eXBl
LnVwZGF0ZT1mdW5jdGlvbigpe30sbi5wcm90b3R5cGUuZGlkVXBkYXRlTGF5b3V0PWZ1bmN0aW9u
KCl7fSxuLnByb3RvdHlwZS5kaWRVcGRhdGU9ZnVuY3Rpb24oKXt9LG59KHMuZGVmYXVsdCksbT1u
ZXcgZCxnPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4oKXtyZXR1cm4oMCx0LnBvc3NpYmxlQ29uc3Ry
dWN0b3JSZXR1cm4pKHRoaXMsZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXJldHVybigwLHQuaW5o
ZXJpdHMpKG4sZSksbi5wcm90b3R5cGUuY3JlYXRlPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBu
ZXcgaChyLm91dGxldFN0YXRlLnZhbHVlKCkpfSxuLnByb3RvdHlwZS5sYXlvdXRGb3I9ZnVuY3Rp
b24oZSx0LG4pe3JldHVybiBuLmdldENvbXBpbGVkQmxvY2sodixlLnRlbXBsYXRlKX0sbn0oZCks
eT1uZXcgZworZS5Ub3BMZXZlbE91dGxldENvbXBvbmVudERlZmluaXRpb249ZnVuY3Rpb24oZSl7
ZnVuY3Rpb24gcihyKXt2YXIgaT0oMCx0LnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4pKHRoaXMs
ZS5jYWxsKHRoaXMsIm91dGxldCIseSxyKSkKK3JldHVybiBpLnRlbXBsYXRlPXIudGVtcGxhdGUs
KDAsbi5nZW5lcmF0ZUd1aWQpKGkpLGl9cmV0dXJuKDAsdC5pbmhlcml0cykocixlKSxyfShyLkNv
bXBvbmVudERlZmluaXRpb24pCit2YXIgdj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy50
ZW1wbGF0ZT1lfXJldHVybiBlLnByb3RvdHlwZS5jb21waWxlPWZ1bmN0aW9uKGUpe2Uud3JhcExh
eW91dCh0aGlzLnRlbXBsYXRlLmFzTGF5b3V0KCkpLGUudGFnLnN0YXRpYygiZGl2IiksZS5hdHRy
cy5zdGF0aWMoImlkIiwoMCxuLmd1aWRGb3IpKHRoaXMpKSxlLmF0dHJzLnN0YXRpYygiY2xhc3Mi
LCJlbWJlci12aWV3Iil9LGV9KCkKK3YuaWQ9InRvcC1sZXZlbC1vdXRsZXQiCit2YXIgYj1mdW5j
dGlvbihlKXtmdW5jdGlvbiByKHIsaSl7dmFyIG89KDAsdC5wb3NzaWJsZUNvbnN0cnVjdG9yUmV0
dXJuKSh0aGlzLGUuY2FsbCh0aGlzLCJvdXRsZXQiLG0sbnVsbCkpCityZXR1cm4gby5vdXRsZXRO
YW1lPXIsby50ZW1wbGF0ZT1pLCgwLG4uZ2VuZXJhdGVHdWlkKShvKSxvfXJldHVybigwLHQuaW5o
ZXJpdHMpKHIsZSkscn0oci5Db21wb25lbnREZWZpbml0aW9uKSxfPWUuT3V0bGV0TGF5b3V0Q29t
cGlsZXI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMudGVtcGxhdGU9ZX1yZXR1cm4gZS5w
cm90b3R5cGUuY29tcGlsZT1mdW5jdGlvbihlKXtlLndyYXBMYXlvdXQodGhpcy50ZW1wbGF0ZS5h
c0xheW91dCgpKX0sZX0oKQorXy5pZD0ib3V0bGV0In0pLGUoImVtYmVyLWdsaW1tZXIvc3ludGF4
L3JlbmRlciIsWyJleHBvcnRzIiwiZW1iZXItYmFiZWwiLCJAZ2xpbW1lci9ydW50aW1lIiwiQGds
aW1tZXIvcmVmZXJlbmNlIiwiZW1iZXItZGVidWciLCJlbWJlci1nbGltbWVyL3V0aWxzL3JlZmVy
ZW5jZXMiLCJlbWJlci1yb3V0aW5nIiwiZW1iZXItZ2xpbW1lci9zeW50YXgvb3V0bGV0IiwiZW1i
ZXItZ2xpbW1lci9zeW50YXgvYWJzdHJhY3QtbWFuYWdlciJdLGZ1bmN0aW9uKGUsdCxuLHIsaSxv
LHMsYSx1KXsidXNlIHN0cmljdCIKK2Z1bmN0aW9uIGwoZSl7dmFyIHQsbj1lLmVudixpPWUuZ2V0
QXJncygpLG89aS5wb3NpdGlvbmFsLmF0KDApLHM9by52YWx1ZSgpLGE9bi5vd25lci5sb29rdXAo
InRlbXBsYXRlOiIrcyksdT12b2lkIDAKK3JldHVybiBpLm5hbWVkLmhhcygiY29udHJvbGxlciIp
Pyh0PWkubmFtZWQuZ2V0KCJjb250cm9sbGVyIiksdT10LnZhbHVlKCkpOnU9cywxPT09aS5wb3Np
dGlvbmFsLmxlbmd0aD9uZXcgci5Db25zdFJlZmVyZW5jZShuZXcgbSh1LGEsbixmKSk6bmV3IHIu
Q29uc3RSZWZlcmVuY2UobmV3IG0odSxhLG4sZCkpfWUucmVuZGVyTWFjcm89ZnVuY3Rpb24oZSx0
LG4scil7dHx8KHQ9W10pCit2YXIgaT1bdC5zbGljZSgwKSxuLG51bGwsbnVsbF0sbz1bdC5zbGlj
ZSgxKSxuLG51bGwsbnVsbF0KK3JldHVybiByLmNvbXBvbmVudC5keW5hbWljKGksbCxvLHIuc3lt
Ym9sVGFibGUpLCEwfQordmFyIGM9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbigpe3JldHVybigwLHQu
cG9zc2libGVDb25zdHJ1Y3RvclJldHVybikodGhpcyxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9
cmV0dXJuKDAsdC5pbmhlcml0cykobixlKSxuLnByb3RvdHlwZS5wcmVwYXJlQXJncz1mdW5jdGlv
bihlLHQpe3JldHVybiB0fSxuLnByb3RvdHlwZS5sYXlvdXRGb3I9ZnVuY3Rpb24oZSx0LG4pe3Jl
dHVybiBuLmdldENvbXBpbGVkQmxvY2soYS5PdXRsZXRMYXlvdXRDb21waWxlcixlLnRlbXBsYXRl
KX0sbi5wcm90b3R5cGUuZ2V0U2VsZj1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbnRyb2xsZXIKK3Jl
dHVybiBuZXcgby5Sb290UmVmZXJlbmNlKHQpfSxuLnByb3RvdHlwZS5nZXRUYWc9ZnVuY3Rpb24o
KXtyZXR1cm4gbnVsbH0sbi5wcm90b3R5cGUuZ2V0RGVzdHJ1Y3Rvcj1mdW5jdGlvbigpe3JldHVy
biBudWxsfSxuLnByb3RvdHlwZS5kaWRDcmVhdGVFbGVtZW50PWZ1bmN0aW9uKCl7fSxuLnByb3Rv
dHlwZS5kaWRSZW5kZXJMYXlvdXQ9ZnVuY3Rpb24oKXt9LG4ucHJvdG90eXBlLmRpZENyZWF0ZT1m
dW5jdGlvbigpe30sbi5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKCl7fSxuLnByb3RvdHlwZS5k
aWRVcGRhdGVMYXlvdXQ9ZnVuY3Rpb24oKXt9LG4ucHJvdG90eXBlLmRpZFVwZGF0ZT1mdW5jdGlv
bigpe30sbn0odS5kZWZhdWx0KSxwPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4oKXtyZXR1cm4oMCx0
LnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4pKHRoaXMsZS5hcHBseSh0aGlzLGFyZ3VtZW50cykp
fXJldHVybigwLHQuaW5oZXJpdHMpKG4sZSksbi5wcm90b3R5cGUuY3JlYXRlPWZ1bmN0aW9uKGUs
dCxuLHIpe3ZhciBpPXQubmFtZSxvPXQuZW52LGE9by5vd25lci5sb29rdXAoImNvbnRyb2xsZXI6
IitpKXx8KDAscy5nZW5lcmF0ZUNvbnRyb2xsZXIpKG8ub3duZXIsaSkKK3JldHVybiByLnJvb3RP
dXRsZXRTdGF0ZSYmKHIub3V0bGV0U3RhdGU9ci5yb290T3V0bGV0U3RhdGUuZ2V0T3JwaGFuKGkp
KSx7Y29udHJvbGxlcjphfX0sbn0oYyksZj1uZXcgcCxoPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4o
KXtyZXR1cm4oMCx0LnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4pKHRoaXMsZS5hcHBseSh0aGlz
LGFyZ3VtZW50cykpfXJldHVybigwLHQuaW5oZXJpdHMpKG4sZSksbi5wcm90b3R5cGUuY3JlYXRl
PWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPXQubmFtZSxvPXQuZW52LGE9bi5wb3NpdGlvbmFsLmF0
KDApLHU9by5vd25lci5mYWN0b3J5Rm9yKCJjb250cm9sbGVyOiIraSksbD11fHwoMCxzLmdlbmVy
YXRlQ29udHJvbGxlckZhY3RvcnkpKG8ub3duZXIsaSksYz1sLmNyZWF0ZSh7bW9kZWw6YS52YWx1
ZSgpfSkKK3JldHVybiByLnJvb3RPdXRsZXRTdGF0ZSYmKHIub3V0bGV0U3RhdGU9ci5yb290T3V0
bGV0U3RhdGUuZ2V0T3JwaGFuKGkpKSx7Y29udHJvbGxlcjpjfX0sbi5wcm90b3R5cGUudXBkYXRl
PWZ1bmN0aW9uKGUsdCl7ZS5jb250cm9sbGVyLnNldCgibW9kZWwiLHQucG9zaXRpb25hbC5hdCgw
KS52YWx1ZSgpKX0sbi5wcm90b3R5cGUuZ2V0RGVzdHJ1Y3Rvcj1mdW5jdGlvbihlKXtyZXR1cm4g
ZS5jb250cm9sbGVyfSxufShjKSxkPW5ldyBoLG09ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbihuLHIs
aSxvKXt2YXIgcz0oMCx0LnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4pKHRoaXMsZS5jYWxsKHRo
aXMsInJlbmRlciIsbyxudWxsKSkKK3JldHVybiBzLm5hbWU9bixzLnRlbXBsYXRlPXIscy5lbnY9
aSxzfXJldHVybigwLHQuaW5oZXJpdHMpKG4sZSksbn0obi5Db21wb25lbnREZWZpbml0aW9uKX0p
LGUoImVtYmVyLWdsaW1tZXIvdGVtcGxhdGUiLFsiZXhwb3J0cyIsImVtYmVyLXV0aWxzIiwiQGds
aW1tZXIvcnVudGltZSJdLGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCIKK2UuZGVmYXVsdD1m
dW5jdGlvbihlKXt2YXIgcj0oMCxuLnRlbXBsYXRlRmFjdG9yeSkoZSkKK3JldHVybntpZDpyLmlk
LG1ldGE6ci5tZXRhLGNyZWF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gci5jcmVhdGUoZS5lbnYse293
bmVyOmVbdC5PV05FUl19KX19fX0pLGUoImVtYmVyLWdsaW1tZXIvdGVtcGxhdGVfcmVnaXN0cnki
LFsiZXhwb3J0cyJdLGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IgorZS5zZXRUZW1wbGF0ZXM9ZnVu
Y3Rpb24oZSl7dD1lfSxlLmdldFRlbXBsYXRlcz1mdW5jdGlvbigpe3JldHVybiB0fSxlLmdldFRl
bXBsYXRlPWZ1bmN0aW9uKGUpe2lmKHQuaGFzT3duUHJvcGVydHkoZSkpcmV0dXJuIHRbZV19LGUu
aGFzVGVtcGxhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHQuaGFzT3duUHJvcGVydHkoZSl9LGUuc2V0
VGVtcGxhdGU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdFtlXT1ufQordmFyIHQ9e319KSxlKCJlbWJl
ci1nbGltbWVyL3RlbXBsYXRlcy9jb21wb25lbnQiLFsiZXhwb3J0cyIsImVtYmVyLWdsaW1tZXIv
dGVtcGxhdGUiXSxmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0IgorZS5kZWZhdWx0PSgwLHQuZGVm
YXVsdCkoe2lkOiJuKzNtS1NuQiIsYmxvY2s6J3sic3RhdGVtZW50cyI6W1sxOCwiZGVmYXVsdCJd
XSwibG9jYWxzIjpbXSwibmFtZWQiOltdLCJ5aWVsZHMiOlsiZGVmYXVsdCJdLCJoYXNQYXJ0aWFs
cyI6ZmFsc2V9JyxtZXRhOnttb2R1bGVOYW1lOiJlbWJlci1nbGltbWVyL3RlbXBsYXRlcy9jb21w
b25lbnQuaGJzIn19KX0pLGUoImVtYmVyLWdsaW1tZXIvdGVtcGxhdGVzL2VtcHR5IixbImV4cG9y
dHMiLCJlbWJlci1nbGltbWVyL3RlbXBsYXRlIl0sZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCIK
K2UuZGVmYXVsdD0oMCx0LmRlZmF1bHQpKHtpZDoiNVFKSmpuaU0iLGJsb2NrOid7InN0YXRlbWVu
dHMiOltdLCJsb2NhbHMiOltdLCJuYW1lZCI6W10sInlpZWxkcyI6W10sImhhc1BhcnRpYWxzIjpm
YWxzZX0nLG1ldGE6e21vZHVsZU5hbWU6ImVtYmVyLWdsaW1tZXIvdGVtcGxhdGVzL2VtcHR5Lmhi
cyJ9fSl9KSxlKCJlbWJlci1nbGltbWVyL3RlbXBsYXRlcy9saW5rLXRvIixbImV4cG9ydHMiLCJl
bWJlci1nbGltbWVyL3RlbXBsYXRlIl0sZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCIKK2UuZGVm
YXVsdD0oMCx0LmRlZmF1bHQpKHtpZDoiWVV3SElDQWsiLGJsb2NrOid7InN0YXRlbWVudHMiOltb
NixbImlmIl0sW1syOCxbImxpbmtUaXRsZSJdXV0sbnVsbCx7InN0YXRlbWVudHMiOltbMSxbMjYs
WyJsaW5rVGl0bGUiXV0sZmFsc2VdXSwibG9jYWxzIjpbXX0seyJzdGF0ZW1lbnRzIjpbWzE4LCJk
ZWZhdWx0Il1dLCJsb2NhbHMiOltdfV1dLCJsb2NhbHMiOltdLCJuYW1lZCI6W10sInlpZWxkcyI6
WyJkZWZhdWx0Il0sImhhc1BhcnRpYWxzIjpmYWxzZX0nLG1ldGE6e21vZHVsZU5hbWU6ImVtYmVy
LWdsaW1tZXIvdGVtcGxhdGVzL2xpbmstdG8uaGJzIn19KX0pLGUoImVtYmVyLWdsaW1tZXIvdGVt
cGxhdGVzL291dGxldCIsWyJleHBvcnRzIiwiZW1iZXItZ2xpbW1lci90ZW1wbGF0ZSJdLGZ1bmN0
aW9uKGUsdCl7InVzZSBzdHJpY3QiCitlLmRlZmF1bHQ9KDAsdC5kZWZhdWx0KSh7aWQ6ImJWUDFX
VkxSIixibG9jazoneyJzdGF0ZW1lbnRzIjpbWzEsWzI2LFsib3V0bGV0Il1dLGZhbHNlXV0sImxv
Y2FscyI6W10sIm5hbWVkIjpbXSwieWllbGRzIjpbXSwiaGFzUGFydGlhbHMiOmZhbHNlfScsbWV0
YTp7bW9kdWxlTmFtZToiZW1iZXItZ2xpbW1lci90ZW1wbGF0ZXMvb3V0bGV0LmhicyJ9fSl9KSxl
KCJlbWJlci1nbGltbWVyL3RlbXBsYXRlcy9yb290IixbImV4cG9ydHMiLCJlbWJlci1nbGltbWVy
L3RlbXBsYXRlIl0sZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCIKK2UuZGVmYXVsdD0oMCx0LmRl
ZmF1bHQpKHtpZDoiQ2prMnZTMTAiLGJsb2NrOid7InN0YXRlbWVudHMiOltbMSxbMzMsWyJjb21w
b25lbnQiXSxbWzI4LFtudWxsXV1dLG51bGxdLGZhbHNlXV0sImxvY2FscyI6W10sIm5hbWVkIjpb
XSwieWllbGRzIjpbXSwiaGFzUGFydGlhbHMiOmZhbHNlfScsbWV0YTp7bW9kdWxlTmFtZToiZW1i
ZXItZ2xpbW1lci90ZW1wbGF0ZXMvcm9vdC5oYnMifX0pfSksZSgiZW1iZXItZ2xpbW1lci91dGls
cy9iaW5kaW5ncyIsWyJleHBvcnRzIiwiZW1iZXItYmFiZWwiLCJAZ2xpbW1lci9yZWZlcmVuY2Ui
LCJAZ2xpbW1lci93aXJlLWZvcm1hdCIsImVtYmVyLWRlYnVnIiwiZW1iZXItbWV0YWwiLCJlbWJl
ci1ydW50aW1lIiwiZW1iZXItZ2xpbW1lci9jb21wb25lbnQiLCJlbWJlci1nbGltbWVyL3V0aWxz
L3N0cmluZyJdLGZ1bmN0aW9uKGUsdCxuLHIsaSxvLHMsYSx1KXsidXNlIHN0cmljdCIKK2Z1bmN0
aW9uIGwoZSx0KXtyZXR1cm4gZVthLlJPT1RfUkVGXS5nZXQodCl9ZnVuY3Rpb24gYyhlLHQpe3Jl
dHVybiJhdHRycyI9PT10WzBdJiYodC5zaGlmdCgpLDE9PT10Lmxlbmd0aCk/bChlLHRbMF0pOigw
LG4ucmVmZXJlbmNlRnJvbVBhcnRzKShlW2EuUk9PVF9SRUZdLHQpfWUuQ2xhc3NOYW1lQmluZGlu
Zz1lLklzVmlzaWJsZUJpbmRpbmc9ZS5BdHRyaWJ1dGVCaW5kaW5nPXZvaWQgMCxlLndyYXBDb21w
b25lbnRDbGFzc0F0dHJpYnV0ZT1mdW5jdGlvbihlKXtpZighZSlyZXR1cm4gZQordmFyIHQsbixp
LG8scyxhPWVbMF0sdT1lWzFdLGw9YS5pbmRleE9mKCJjbGFzcyIpCityZXR1cm4tMSE9PWwmJih0
PXVbbF0sbj10WzBdLG49PT1yLk9wcy5HZXQmJihpPXVbbF0sbz1pWzFdLHM9b1tvLmxlbmd0aC0x
XSxlWzFdW2xdPVtyLk9wcy5IZWxwZXIsWyItY2xhc3MiXSxbaSxzXV0pKSxlfSxlLkF0dHJpYnV0
ZUJpbmRpbmc9e3BhcnNlOmZ1bmN0aW9uKGUpe3ZhciB0LG4scj1lLmluZGV4T2YoIjoiKQorcmV0
dXJuLTE9PT1yP1tlLGUsITBdOih0PWUuc3Vic3RyaW5nKDAsciksbj1lLnN1YnN0cmluZyhyKzEp
LFt0LG4sITFdKX0saW5zdGFsbDpmdW5jdGlvbihlLHQsbixyKXt2YXIgaSxzPW5bMF0sYT1uWzFd
CituWzJdCitpZigiaWQiPT09YSlyZXR1cm4gaT0oMCxvLmdldCkodCxzKSx2b2lkIDAhPT1pJiZu
dWxsIT09aXx8KGk9dC5lbGVtZW50SWQpLHZvaWQgci5hZGRTdGF0aWNBdHRyaWJ1dGUoZSwiaWQi
LGkpCit2YXIgdT1zLmluZGV4T2YoIi4iKT4tMSxwPXU/Yyh0LHMuc3BsaXQoIi4iKSk6bCh0LHMp
Cisic3R5bGUiPT09YSYmKHA9bmV3IGYocCxsKHQsImlzVmlzaWJsZSIpKSksci5hZGREeW5hbWlj
QXR0cmlidXRlKGUsYSxwKX19Cit2YXIgcD0oMCx1Lmh0bWxTYWZlKSgiZGlzcGxheTogbm9uZTsi
KSxmPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIocixpKXt2YXIgbz0oMCx0LnBvc3NpYmxlQ29uc3Ry
dWN0b3JSZXR1cm4pKHRoaXMsZS5jYWxsKHRoaXMpKQorcmV0dXJuIG8udGFnPSgwLG4uY29tYmlu
ZSkoW3IudGFnLGkudGFnXSksby5pbm5lcj1yLG8uaXNWaXNpYmxlPWksb31yZXR1cm4oMCx0Lmlu
aGVyaXRzKShyLGUpLHIucHJvdG90eXBlLmNvbXB1dGU9ZnVuY3Rpb24oKXt2YXIgZSx0PXRoaXMu
aW5uZXIudmFsdWUoKQorcmV0dXJuITEhPT10aGlzLmlzVmlzaWJsZS52YWx1ZSgpP3Q6dHx8MD09
PXQ/KGU9dCsiIGRpc3BsYXk6IG5vbmU7IiwoMCx1LmlzSFRNTFNhZmUpKHQpPygwLHUuaHRtbFNh
ZmUpKGUpOmUpOnB9LHJ9KG4uQ2FjaGVkUmVmZXJlbmNlKQorZS5Jc1Zpc2libGVCaW5kaW5nPXtp
bnN0YWxsOmZ1bmN0aW9uKGUsdCxyKXtyLmFkZER5bmFtaWNBdHRyaWJ1dGUoZSwic3R5bGUiLCgw
LG4ubWFwKShsKHQsImlzVmlzaWJsZSIpLHRoaXMubWFwU3R5bGVWYWx1ZSkpfSxtYXBTdHlsZVZh
bHVlOmZ1bmN0aW9uKGUpe3JldHVybiExPT09ZT9wOm51bGx9fSxlLkNsYXNzTmFtZUJpbmRpbmc9
e2luc3RhbGw6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksbyxzLGEsdT1uLnNwbGl0KCI6IikscD11
WzBdLGY9dVsxXSxtPXVbMl0KKyIiPT09cD9yLmFkZFN0YXRpY0F0dHJpYnV0ZShlLCJjbGFzcyIs
Zik6KGk9cC5pbmRleE9mKCIuIik+LTEsbz1pJiZwLnNwbGl0KCIuIikscz1pP2ModCxvKTpsKHQs
cCksYT12b2lkIDAsYT12b2lkIDA9PT1mP25ldyBoKHMsaT9vW28ubGVuZ3RoLTFdOnApOm5ldyBk
KHMsZixtKSxyLmFkZER5bmFtaWNBdHRyaWJ1dGUoZSwiY2xhc3MiLGEpKX19Cit2YXIgaD1mdW5j
dGlvbihlKXtmdW5jdGlvbiBuKG4scil7dmFyIGk9KDAsdC5wb3NzaWJsZUNvbnN0cnVjdG9yUmV0
dXJuKSh0aGlzLGUuY2FsbCh0aGlzKSkKK3JldHVybiBpLnRhZz1uLnRhZyxpLmlubmVyPW4saS5w
YXRoPXIsaS5kYXNoZXJpemVkUGF0aD1udWxsLGl9cmV0dXJuKDAsdC5pbmhlcml0cykobixlKSxu
LnByb3RvdHlwZS5jb21wdXRlPWZ1bmN0aW9uKCl7dmFyIGUsdD10aGlzLmlubmVyLnZhbHVlKCkK
K3JldHVybiEwPT09dD8oZT10aGlzLnBhdGgsdGhpcy5kYXNoZXJpemVkUGF0aHx8KHRoaXMuZGFz
aGVyaXplZFBhdGg9cy5TdHJpbmcuZGFzaGVyaXplKGUpKSk6dHx8MD09PXQ/dDpudWxsfSxufShu
LkNhY2hlZFJlZmVyZW5jZSksZD1mdW5jdGlvbihlKXtmdW5jdGlvbiBuKG4scixpKXt2YXIgbz0o
MCx0LnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4pKHRoaXMsZS5jYWxsKHRoaXMpKQorcmV0dXJu
IG8udGFnPW4udGFnLG8uaW5uZXI9bixvLnRydXRoeT1yfHxudWxsLG8uZmFsc3k9aXx8bnVsbCxv
fXJldHVybigwLHQuaW5oZXJpdHMpKG4sZSksbi5wcm90b3R5cGUuY29tcHV0ZT1mdW5jdGlvbigp
e3ZhciBlPXRoaXMuaW5uZXIsdD10aGlzLnRydXRoeSxuPXRoaXMuZmFsc3kKK3JldHVybiBlLnZh
bHVlKCk/dDpufSxufShuLkNhY2hlZFJlZmVyZW5jZSl9KSxlKCJlbWJlci1nbGltbWVyL3V0aWxz
L2RlYnVnLXN0YWNrIixbImV4cG9ydHMiXSxmdW5jdGlvbihlKXsidXNlIHN0cmljdCIKK2UuZGVm
YXVsdD12b2lkIDB9KSxlKCJlbWJlci1nbGltbWVyL3V0aWxzL2l0ZXJhYmxlIixbImV4cG9ydHMi
LCJlbWJlci11dGlscyIsImVtYmVyLW1ldGFsIiwiZW1iZXItcnVudGltZSIsImVtYmVyLWdsaW1t
ZXIvdXRpbHMvcmVmZXJlbmNlcyIsImVtYmVyLWdsaW1tZXIvaGVscGVycy9lYWNoLWluIiwiQGds
aW1tZXIvcmVmZXJlbmNlIl0sZnVuY3Rpb24oZSx0LG4scixpLG8scyl7InVzZSBzdHJpY3QiCitm
dW5jdGlvbiBhKGUpe3N3aXRjaChlKXtjYXNlIkBpbmRleCI6Y2FzZSB2b2lkIDA6Y2FzZSBudWxs
OnJldHVybiBsCitjYXNlIkBpZGVudGl0eSI6cmV0dXJuIGMKK2RlZmF1bHQ6cmV0dXJuIGZ1bmN0
aW9uKHQpe3JldHVybigwLG4uZ2V0KSh0LGUpfX19ZnVuY3Rpb24gdShlKXtzd2l0Y2goZSl7Y2Fz
ZSJAaW5kZXgiOnJldHVybiBsCitjYXNlIkBpZGVudGl0eSI6Y2FzZSB2b2lkIDA6Y2FzZSBudWxs
OnJldHVybiBjCitkZWZhdWx0OnJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4oMCxuLmdldCkodCxl
KX19fWZ1bmN0aW9uIGwoZSx0KXtyZXR1cm4gU3RyaW5nKHQpfWZ1bmN0aW9uIGMoZSl7c3dpdGNo
KHR5cGVvZiBlKXtjYXNlInN0cmluZyI6Y2FzZSJudW1iZXIiOnJldHVybiBTdHJpbmcoZSkKK2Rl
ZmF1bHQ6cmV0dXJuKDAsdC5ndWlkRm9yKShlKX19ZnVuY3Rpb24gcChlLHQpe3ZhciBuPWVbdF0K
K3JldHVybiBuPyhlW3RdKyssdCsiYmUyNzc3NTctYmJiZS00NjIwLTlmY2ItMjEzZWY0MzNjY2Ey
IituKTooZVt0XT0xLHQpfWUuZGVmYXVsdD1mdW5jdGlvbihlLHQpe3JldHVybigwLG8uaXNFYWNo
SW4pKGUpP25ldyB5KGUsYSh0KSk6bmV3IHYoZSx1KHQpKX0KK3ZhciBmPWZ1bmN0aW9uKCl7ZnVu
Y3Rpb24gZShlLHQpe3RoaXMuYXJyYXk9ZSx0aGlzLmxlbmd0aD1lLmxlbmd0aCx0aGlzLmtleUZv
cj10LHRoaXMucG9zaXRpb249MCx0aGlzLnNlZW49T2JqZWN0LmNyZWF0ZShudWxsKX1yZXR1cm4g
ZS5wcm90b3R5cGUuaXNFbXB0eT1mdW5jdGlvbigpe3JldHVybiExfSxlLnByb3RvdHlwZS5uZXh0
PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5hcnJheSx0PXRoaXMubGVuZ3RoLG49dGhpcy5rZXlGb3Is
cj10aGlzLnBvc2l0aW9uLGk9dGhpcy5zZWVuCitpZihyPj10KXJldHVybiBudWxsCit2YXIgbz1l
W3JdLHM9cixhPXAoaSxuKG8scykpCityZXR1cm4gdGhpcy5wb3NpdGlvbisrLHtrZXk6YSx2YWx1
ZTpvLG1lbW86c319LGV9KCksaD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLmFycmF5
PWUsdGhpcy5sZW5ndGg9KDAsbi5nZXQpKGUsImxlbmd0aCIpLHRoaXMua2V5Rm9yPXQsdGhpcy5w
b3NpdGlvbj0wLHRoaXMuc2Vlbj1PYmplY3QuY3JlYXRlKG51bGwpfXJldHVybiBlLnByb3RvdHlw
ZS5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLmxlbmd0aH0sZS5wcm90b3R5cGUu
bmV4dD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuYXJyYXksdD10aGlzLmxlbmd0aCxuPXRoaXMua2V5
Rm9yLGk9dGhpcy5wb3NpdGlvbixvPXRoaXMuc2VlbgoraWYoaT49dClyZXR1cm4gbnVsbAordmFy
IHM9KDAsci5vYmplY3RBdCkoZSxpKSxhPWksdT1wKG8sbihzLGEpKQorcmV0dXJuIHRoaXMucG9z
aXRpb24rKyx7a2V5OnUsdmFsdWU6cyxtZW1vOmF9fSxlfSgpLGQ9ZnVuY3Rpb24oKXtmdW5jdGlv
biBlKGUsdCxuKXt0aGlzLmtleXM9ZSx0aGlzLnZhbHVlcz10LHRoaXMua2V5Rm9yPW4sdGhpcy5w
b3NpdGlvbj0wLHRoaXMuc2Vlbj1PYmplY3QuY3JlYXRlKG51bGwpfXJldHVybiBlLnByb3RvdHlw
ZS5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLmtleXMubGVuZ3RofSxlLnByb3Rv
dHlwZS5uZXh0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5rZXlzLHQ9dGhpcy52YWx1ZXMsbj10aGlz
LmtleUZvcixyPXRoaXMucG9zaXRpb24saT10aGlzLnNlZW4KK2lmKHI+PWUubGVuZ3RoKXJldHVy
biBudWxsCit2YXIgbz10W3JdLHM9ZVtyXSxhPXAoaSxuKG8scykpCityZXR1cm4gdGhpcy5wb3Np
dGlvbisrLHtrZXk6YSx2YWx1ZTpvLG1lbW86c319LGV9KCksbT1mdW5jdGlvbigpe2Z1bmN0aW9u
IGUoKXt9cmV0dXJuIGUucHJvdG90eXBlLmlzRW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sZS5w
cm90b3R5cGUubmV4dD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiQ2Fubm90IGNhbGwgbmV4
dCgpIG9uIGFuIGVtcHR5IGl0ZXJhdG9yIil9LGV9KCksZz1uZXcgbSx5PWZ1bmN0aW9uKCl7ZnVu
Y3Rpb24gZShlLHQpe3RoaXMucmVmPWUsdGhpcy5rZXlGb3I9dAordmFyIG49dGhpcy52YWx1ZVRh
Zz1uZXcgcy5VcGRhdGFibGVUYWcocy5DT05TVEFOVF9UQUcpCit0aGlzLnRhZz0oMCxzLmNvbWJp
bmUpKFtlLnRhZyxuXSl9cmV0dXJuIGUucHJvdG90eXBlLml0ZXJhdGU9ZnVuY3Rpb24oKXt2YXIg
ZSx0LHI9dGhpcy5yZWYsaT10aGlzLmtleUZvcixvPXRoaXMudmFsdWVUYWcscz1yLnZhbHVlKCkK
K28udXBkYXRlKCgwLG4udGFnRm9yKShzKSksKDAsbi5pc1Byb3h5KShzKSYmKHM9KDAsbi5nZXQp
KHMsImNvbnRlbnQiKSkKK3ZhciBhPXR5cGVvZiBzCityZXR1cm4hc3x8Im9iamVjdCIhPT1hJiYi
ZnVuY3Rpb24iIT09YT9nOihlPU9iamVjdC5rZXlzKHMpLHQ9ZS5tYXAoZnVuY3Rpb24oZSl7cmV0
dXJuIHNbZV19KSxlLmxlbmd0aD4wP25ldyBkKGUsdCxpKTpnKX0sZS5wcm90b3R5cGUudmFsdWVS
ZWZlcmVuY2VGb3I9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBpLlVwZGF0YWJsZVByaW1pdGl2ZVJl
ZmVyZW5jZShlLm1lbW8pfSxlLnByb3RvdHlwZS51cGRhdGVWYWx1ZVJlZmVyZW5jZT1mdW5jdGlv
bihlLHQpe2UudXBkYXRlKHQubWVtbyl9LGUucHJvdG90eXBlLm1lbW9SZWZlcmVuY2VGb3I9ZnVu
Y3Rpb24oZSl7cmV0dXJuIG5ldyBpLlVwZGF0YWJsZVJlZmVyZW5jZShlLnZhbHVlKX0sZS5wcm90
b3R5cGUudXBkYXRlTWVtb1JlZmVyZW5jZT1mdW5jdGlvbihlLHQpe2UudXBkYXRlKHQudmFsdWUp
fSxlfSgpLHY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5yZWY9ZSx0aGlzLmtleUZv
cj10Cit2YXIgbj10aGlzLnZhbHVlVGFnPW5ldyBzLlVwZGF0YWJsZVRhZyhzLkNPTlNUQU5UX1RB
RykKK3RoaXMudGFnPSgwLHMuY29tYmluZSkoW2UudGFnLG5dKX1yZXR1cm4gZS5wcm90b3R5cGUu
aXRlcmF0ZT1mdW5jdGlvbigpe3ZhciBlLHQ9dGhpcy5yZWYsaT10aGlzLmtleUZvcixvPXRoaXMu
dmFsdWVUYWcscz10LnZhbHVlKCkKK3JldHVybiBvLnVwZGF0ZSgoMCxuLnRhZ0ZvclByb3BlcnR5
KShzLCJbXSIpKSxzJiYib2JqZWN0Ij09dHlwZW9mIHM/QXJyYXkuaXNBcnJheShzKT9zLmxlbmd0
aD4wP25ldyBmKHMsaSk6ZzooMCxyLmlzRW1iZXJBcnJheSkocyk/KDAsbi5nZXQpKHMsImxlbmd0
aCIpPjA/bmV3IGgocyxpKTpnOiJmdW5jdGlvbiI9PXR5cGVvZiBzLmZvckVhY2g/KGU9W10scy5m
b3JFYWNoKGZ1bmN0aW9uKHQpe2UucHVzaCh0KX0pLGUubGVuZ3RoPjA/bmV3IGYoZSxpKTpnKTpn
Omd9LGUucHJvdG90eXBlLnZhbHVlUmVmZXJlbmNlRm9yPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcg
aS5VcGRhdGFibGVSZWZlcmVuY2UoZS52YWx1ZSl9LGUucHJvdG90eXBlLnVwZGF0ZVZhbHVlUmVm
ZXJlbmNlPWZ1bmN0aW9uKGUsdCl7ZS51cGRhdGUodC52YWx1ZSl9LGUucHJvdG90eXBlLm1lbW9S
ZWZlcmVuY2VGb3I9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBpLlVwZGF0YWJsZVByaW1pdGl2ZVJl
ZmVyZW5jZShlLm1lbW8pfSxlLnByb3RvdHlwZS51cGRhdGVNZW1vUmVmZXJlbmNlPWZ1bmN0aW9u
KGUsdCl7ZS51cGRhdGUodC5tZW1vKX0sZX0oKX0pLGUoImVtYmVyLWdsaW1tZXIvdXRpbHMvcHJv
Y2Vzcy1hcmdzIixbImV4cG9ydHMiLCJlbWJlci11dGlscyIsIkBnbGltbWVyL3JlZmVyZW5jZSIs
ImVtYmVyLWdsaW1tZXIvY29tcG9uZW50IiwiZW1iZXItZ2xpbW1lci91dGlscy9yZWZlcmVuY2Vz
IiwiZW1iZXItdmlld3MiLCJlbWJlci1nbGltbWVyL2hlbHBlcnMvYWN0aW9uIiwiQGdsaW1tZXIv
cnVudGltZSJdLGZ1bmN0aW9uKGUsdCxuLHIsaSxvLHMsYSl7InVzZSBzdHJpY3QiCitmdW5jdGlv
biB1KGUsbil7dmFyIHI9ZS5uYW1lZC5tYXAKK3JldHVybiBuLmFyZ3M/KDAsdC5hc3NpZ24pKHt9
LG4uYXJncy5uYW1lZC5tYXAscik6cn1mdW5jdGlvbiBsKGUsdCl7dmFyIG4scixpPWUucG9zaXRp
b25hbC52YWx1ZXMKK3JldHVybiB0LmFyZ3M/KG49dC5hcmdzLnBvc2l0aW9uYWwudmFsdWVzLHI9
W10sci5wdXNoLmFwcGx5KHIsbiksci5zcGxpY2UuYXBwbHkocixbMCxpLmxlbmd0aF0uY29uY2F0
KGkpKSxyKTppfWZ1bmN0aW9uIGMoZSx0LG4scil7dmFyIGk9ci5wb3NpdGlvbmFsUGFyYW1zCity
ZXR1cm4gaSYmaS5sZW5ndGg+MCYmdC5sZW5ndGg+MCYmKGU9InN0cmluZyI9PXR5cGVvZiBpP3Ao
ZSx0LGkpOmYoZSx0LGkpKSxhLkV2YWx1YXRlZEFyZ3MubmFtZWQoZSxuKX1mdW5jdGlvbiBwKGUs
bixyKXt2YXIgaT0oMCx0LmFzc2lnbikoe30sZSkKK3JldHVybiBpW3JdPWEuRXZhbHVhdGVkUG9z
aXRpb25hbEFyZ3MuY3JlYXRlKG4pLGl9ZnVuY3Rpb24gZihlLG4scil7dmFyIGksbyxzPSgwLHQu
YXNzaWduKSh7fSxlKSxhPU1hdGgubWluKG4ubGVuZ3RoLHIubGVuZ3RoKQorZm9yKGk9MDtpPGE7
aSsrKW89cltpXSxzW29dPW5baV0KK3JldHVybiBzfWUuQ29tcG9uZW50QXJncz12b2lkIDAsZS5n
YXRoZXJBcmdzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGModShlLHQpLGwoZSx0KSxlLmJsb2Nrcyx0
LkNvbXBvbmVudENsYXNzLmNsYXNzKX0KK3ZhciBoPXt0YWc6bi5DT05TVEFOVF9UQUcsdmFsdWU6
ZnVuY3Rpb24oKXt2YXIgZQorcmV0dXJue2F0dHJzOnt9LHByb3BzOihlPXthdHRyczp7fX0sZVty
LkFSR1NdPXt9LGUpfX19CitlLkNvbXBvbmVudEFyZ3M9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUp
e3RoaXMudGFnPWUudGFnLHRoaXMubmFtZWRBcmdzPWV9cmV0dXJuIGUuY3JlYXRlPWZ1bmN0aW9u
KHQpe3JldHVybiAwPT09dC5uYW1lZC5rZXlzLmxlbmd0aD9oOm5ldyBlKHQubmFtZWQpfSxlLnBy
b3RvdHlwZS52YWx1ZT1mdW5jdGlvbigpe3ZhciBlLHQsbixvLGEsdT10aGlzLm5hbWVkQXJncyxs
PXUua2V5cyxjPXUudmFsdWUoKSxwPU9iamVjdC5jcmVhdGUobnVsbCksZj1PYmplY3QuY3JlYXRl
KG51bGwpCitmb3IocFtyLkFSR1NdPWYsdD0wLG49bC5sZW5ndGg7dDxuO3QrKylvPWxbdF0sYT11
LmdldChvKSxlPWNbb10sImZ1bmN0aW9uIj09dHlwZW9mIGUmJmVbcy5BQ1RJT05dP2Nbb109ZTph
W2kuVVBEQVRFXSYmKGNbb109bmV3IG0oYSxlKSksZltvXT1hLHBbb109ZQorcmV0dXJuIHAuYXR0
cnM9Yyx7YXR0cnM6Yyxwcm9wczpwfX0sZX0oKQordmFyIGQ9KDAsdC5zeW1ib2wpKCJSRUYiKSxt
PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXNbby5NVVRBQkxFX0NFTExdPSEwLHRoaXNb
ZF09ZSx0aGlzLnZhbHVlPXR9cmV0dXJuIGUucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihlKXt0
aGlzW2RdW2kuVVBEQVRFXShlKX0sZX0oKX0pLGUoImVtYmVyLWdsaW1tZXIvdXRpbHMvcmVmZXJl
bmNlcyIsWyJleHBvcnRzIiwiQGdsaW1tZXIvcnVudGltZSIsImVtYmVyLWJhYmVsIiwiZW1iZXIt
dXRpbHMiLCJlbWJlci1tZXRhbCIsIkBnbGltbWVyL3JlZmVyZW5jZSIsImVtYmVyLWdsaW1tZXIv
dXRpbHMvdG8tYm9vbCIsImVtYmVyLWdsaW1tZXIvaGVscGVyIl0sZnVuY3Rpb24oZSx0LG4scixp
LG8scyxhKXsidXNlIHN0cmljdCIKK2UuVW5ib3VuZFJlZmVyZW5jZT1lLkludGVybmFsSGVscGVy
UmVmZXJlbmNlPWUuQ2xhc3NCYXNlZEhlbHBlclJlZmVyZW5jZT1lLlNpbXBsZUhlbHBlclJlZmVy
ZW5jZT1lLkNvbmRpdGlvbmFsUmVmZXJlbmNlPWUuVXBkYXRhYmxlUHJpbWl0aXZlUmVmZXJlbmNl
PWUuVXBkYXRhYmxlUmVmZXJlbmNlPWUuTmVzdGVkUHJvcGVydHlSZWZlcmVuY2U9ZS5Sb290UHJv
cGVydHlSZWZlcmVuY2U9ZS5Qcm9wZXJ0eVJlZmVyZW5jZT1lLlJvb3RSZWZlcmVuY2U9ZS5DYWNo
ZWRSZWZlcmVuY2U9ZS5VTkRFRklORURfUkVGRVJFTkNFPWUuTlVMTF9SRUZFUkVOQ0U9ZS5VUERB
VEU9dm9pZCAwLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJOVUxMX1JFRkVSRU5DRSIse2VudW1l
cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHQuTlVMTF9SRUZFUkVOQ0V9fSksT2JqZWN0
LmRlZmluZVByb3BlcnR5KGUsIlVOREVGSU5FRF9SRUZFUkVOQ0UiLHtlbnVtZXJhYmxlOiEwLGdl
dDpmdW5jdGlvbigpe3JldHVybiB0LlVOREVGSU5FRF9SRUZFUkVOQ0V9fSkKK3ZhciB1PWUuVVBE
QVRFPSgwLHIuc3ltYm9sKSgiVVBEQVRFIiksbD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt9cmV0
dXJuIGUucHJvdG90eXBlLmdldD1mdW5jdGlvbihlKXtyZXR1cm4gZi5jcmVhdGUodGhpcyxlKX0s
ZX0oKSxjPWUuQ2FjaGVkUmVmZXJlbmNlPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgdD0o
MCxuLnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4pKHRoaXMsZS5jYWxsKHRoaXMpKQorcmV0dXJu
IHQuX2xhc3RSZXZpc2lvbj1udWxsLHQuX2xhc3RWYWx1ZT1udWxsLHR9cmV0dXJuKDAsbi5pbmhl
cml0cykodCxlKSx0LnByb3RvdHlwZS52YWx1ZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMudGFnLHQ9
dGhpcy5fbGFzdFJldmlzaW9uLG49dGhpcy5fbGFzdFZhbHVlCityZXR1cm4gdCYmZS52YWxpZGF0
ZSh0KXx8KG49dGhpcy5fbGFzdFZhbHVlPXRoaXMuY29tcHV0ZSgpLHRoaXMuX2xhc3RSZXZpc2lv
bj1lLnZhbHVlKCkpLG59LHR9KGwpLHA9ZS5Sb290UmVmZXJlbmNlPWZ1bmN0aW9uKGUpe2Z1bmN0
aW9uIHQodCl7dmFyIHI9KDAsbi5wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKSh0aGlzLGUuY2Fs
bCh0aGlzLHQpKQorcmV0dXJuIHIuY2hpbGRyZW49T2JqZWN0LmNyZWF0ZShudWxsKSxyfXJldHVy
bigwLG4uaW5oZXJpdHMpKHQsZSksdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUpe3ZhciB0PXRo
aXMuY2hpbGRyZW5bZV0KK3JldHVybiB0fHwodD10aGlzLmNoaWxkcmVuW2VdPW5ldyBoKHRoaXMu
aW5uZXIsZSkpLHR9LHR9KG8uQ29uc3RSZWZlcmVuY2UpLGY9ZS5Qcm9wZXJ0eVJlZmVyZW5jZT1m
dW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuKDAsbi5wb3NzaWJsZUNvbnN0cnVjdG9yUmV0
dXJuKSh0aGlzLGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4oMCxuLmluaGVyaXRzKSh0
LGUpLHQuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKDAsby5pc0NvbnN0KShlKT9uZXcgaChl
LnZhbHVlKCksdCk6bmV3IGQoZSx0KX0sdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUpe3JldHVy
biBuZXcgZCh0aGlzLGUpfSx0fShjKSxoPWUuUm9vdFByb3BlcnR5UmVmZXJlbmNlPWZ1bmN0aW9u
KGUpe2Z1bmN0aW9uIHQodCxyKXt2YXIgbz0oMCxuLnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4p
KHRoaXMsZS5jYWxsKHRoaXMpKQorcmV0dXJuIG8uX3BhcmVudFZhbHVlPXQsby5fcHJvcGVydHlL
ZXk9cixvLnRhZz0oMCxpLnRhZ0ZvclByb3BlcnR5KSh0LHIpLG99cmV0dXJuKDAsbi5pbmhlcml0
cykodCxlKSx0LnByb3RvdHlwZS5jb21wdXRlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fcGFyZW50
VmFsdWUsdD10aGlzLl9wcm9wZXJ0eUtleQorcmV0dXJuKDAsaS5nZXQpKGUsdCl9LHQucHJvdG90
eXBlW3VdPWZ1bmN0aW9uKGUpeygwLGkuc2V0KSh0aGlzLl9wYXJlbnRWYWx1ZSx0aGlzLl9wcm9w
ZXJ0eUtleSxlKX0sdH0oZiksZD1lLk5lc3RlZFByb3BlcnR5UmVmZXJlbmNlPWZ1bmN0aW9uKGUp
e2Z1bmN0aW9uIHQodCxyKXt2YXIgaT0oMCxuLnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4pKHRo
aXMsZS5jYWxsKHRoaXMpKSxzPXQudGFnLGE9bmV3IG8uVXBkYXRhYmxlVGFnKG8uQ09OU1RBTlRf
VEFHKQorcmV0dXJuIGkuX3BhcmVudFJlZmVyZW5jZT10LGkuX3BhcmVudE9iamVjdFRhZz1hLGku
X3Byb3BlcnR5S2V5PXIsaS50YWc9KDAsby5jb21iaW5lKShbcyxhXSksaX1yZXR1cm4oMCxuLmlu
aGVyaXRzKSh0LGUpLHQucHJvdG90eXBlLmNvbXB1dGU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9w
YXJlbnRSZWZlcmVuY2UsdD10aGlzLl9wYXJlbnRPYmplY3RUYWcsbj10aGlzLl9wcm9wZXJ0eUtl
eSxyPWUudmFsdWUoKQorcmV0dXJuIHQudXBkYXRlKCgwLGkudGFnRm9yUHJvcGVydHkpKHIsbikp
LCJzdHJpbmciPT10eXBlb2YgciYmImxlbmd0aCI9PT1uP3IubGVuZ3RoOiJvYmplY3QiPT10eXBl
b2YgciYmcj8oMCxpLmdldCkocixuKTp2b2lkIDB9LHQucHJvdG90eXBlW3VdPWZ1bmN0aW9uKGUp
e3ZhciB0PXRoaXMuX3BhcmVudFJlZmVyZW5jZS52YWx1ZSgpOygwLGkuc2V0KSh0LHRoaXMuX3By
b3BlcnR5S2V5LGUpfSx0fShmKSxtPWUuVXBkYXRhYmxlUmVmZXJlbmNlPWZ1bmN0aW9uKGUpe2Z1
bmN0aW9uIHQodCl7dmFyIHI9KDAsbi5wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKSh0aGlzLGUu
Y2FsbCh0aGlzKSkKK3JldHVybiByLnRhZz1uZXcgby5EaXJ0eWFibGVUYWcsci5fdmFsdWU9dCxy
fXJldHVybigwLG4uaW5oZXJpdHMpKHQsZSksdC5wcm90b3R5cGUudmFsdWU9ZnVuY3Rpb24oKXty
ZXR1cm4gdGhpcy5fdmFsdWV9LHQucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihlKXtlIT09dGhp
cy5fdmFsdWUmJih0aGlzLnRhZy5kaXJ0eSgpLHRoaXMuX3ZhbHVlPWUpfSx0fShsKQorZS5VcGRh
dGFibGVQcmltaXRpdmVSZWZlcmVuY2U9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcigpe3JldHVybigw
LG4ucG9zc2libGVDb25zdHJ1Y3RvclJldHVybikodGhpcyxlLmFwcGx5KHRoaXMsYXJndW1lbnRz
KSl9cmV0dXJuKDAsbi5pbmhlcml0cykocixlKSxyLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXty
ZXR1cm4gdC5VTkRFRklORURfUkVGRVJFTkNFfSxyfShtKSxlLkNvbmRpdGlvbmFsUmVmZXJlbmNl
PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIodCl7dmFyIHI9KDAsbi5wb3NzaWJsZUNvbnN0cnVjdG9y
UmV0dXJuKSh0aGlzLGUuY2FsbCh0aGlzLHQpKQorcmV0dXJuIHIub2JqZWN0VGFnPW5ldyBvLlVw
ZGF0YWJsZVRhZyhvLkNPTlNUQU5UX1RBRyksci50YWc9KDAsby5jb21iaW5lKShbdC50YWcsci5v
YmplY3RUYWddKSxyfXJldHVybigwLG4uaW5oZXJpdHMpKHIsZSksci5jcmVhdGU9ZnVuY3Rpb24o
ZSl7dmFyIG4KK3JldHVybigwLG8uaXNDb25zdCkoZSk/KG49ZS52YWx1ZSgpLCgwLGkuaXNQcm94
eSkobik/bmV3IGgobiwiaXNUcnV0aHkiKTp0LlByaW1pdGl2ZVJlZmVyZW5jZS5jcmVhdGUoKDAs
cy5kZWZhdWx0KShuKSkpOm5ldyByKGUpfSxyLnByb3RvdHlwZS50b0Jvb2w9ZnVuY3Rpb24oZSl7
cmV0dXJuKDAsaS5pc1Byb3h5KShlKT8odGhpcy5vYmplY3RUYWcudXBkYXRlKCgwLGkudGFnRm9y
UHJvcGVydHkpKGUsImlzVHJ1dGh5IikpLCgwLGkuZ2V0KShlLCJpc1RydXRoeSIpKToodGhpcy5v
YmplY3RUYWcudXBkYXRlKCgwLGkudGFnRm9yKShlKSksKDAscy5kZWZhdWx0KShlKSl9LHJ9KHQu
Q29uZGl0aW9uYWxSZWZlcmVuY2UpLGUuU2ltcGxlSGVscGVyUmVmZXJlbmNlPWZ1bmN0aW9uKGUp
e2Z1bmN0aW9uIHIodCxyKXt2YXIgaT0oMCxuLnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4pKHRo
aXMsZS5jYWxsKHRoaXMpKQorcmV0dXJuIGkudGFnPXIudGFnLGkuaGVscGVyPXQsaS5hcmdzPXIs
aX1yZXR1cm4oMCxuLmluaGVyaXRzKShyLGUpLHIuY3JlYXRlPWZ1bmN0aW9uKGUsbil7dmFyIGks
cyxhLHUsbAorcmV0dXJuKDAsby5pc0NvbnN0KShuKT8oaT1uLnBvc2l0aW9uYWwscz1uLm5hbWVk
LGE9aS52YWx1ZSgpLHU9cy52YWx1ZSgpLGw9ZShhLHUpLG51bGw9PT1sP3QuTlVMTF9SRUZFUkVO
Q0U6dm9pZCAwPT09bD90LlVOREVGSU5FRF9SRUZFUkVOQ0U6Im9iamVjdCI9PXR5cGVvZiBsP25l
dyBwKGwpOnQuUHJpbWl0aXZlUmVmZXJlbmNlLmNyZWF0ZShsKSk6bmV3IHIoZSxuKX0sci5wcm90
b3R5cGUuY29tcHV0ZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuaGVscGVyLHQ9dGhpcy5hcmdzLG49
dC5wb3NpdGlvbmFsLHI9dC5uYW1lZAorcmV0dXJuIGUobi52YWx1ZSgpLHIudmFsdWUoKSl9LHJ9
KGMpLGUuQ2xhc3NCYXNlZEhlbHBlclJlZmVyZW5jZT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQs
cil7dmFyIGk9KDAsbi5wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKSh0aGlzLGUuY2FsbCh0aGlz
KSkKK3JldHVybiBpLnRhZz0oMCxvLmNvbWJpbmUpKFt0W2EuUkVDT01QVVRFX1RBR10sci50YWdd
KSxpLmluc3RhbmNlPXQsaS5hcmdzPXIsaX1yZXR1cm4oMCxuLmluaGVyaXRzKSh0LGUpLHQuY3Jl
YXRlPWZ1bmN0aW9uKGUsbixyKXt2YXIgaT1lLmNyZWF0ZSgpCityZXR1cm4gbi5uZXdEZXN0cm95
YWJsZShpKSxuZXcgdChpLHIpfSx0LnByb3RvdHlwZS5jb21wdXRlPWZ1bmN0aW9uKCl7dmFyIGU9
dGhpcy5pbnN0YW5jZSx0PXRoaXMuYXJncyxuPXQucG9zaXRpb25hbCxyPXQubmFtZWQsaT1uLnZh
bHVlKCksbz1yLnZhbHVlKCkKK3JldHVybiBlLmNvbXB1dGUoaSxvKX0sdH0oYyksZS5JbnRlcm5h
bEhlbHBlclJlZmVyZW5jZT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQscil7dmFyIGk9KDAsbi5w
b3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKSh0aGlzLGUuY2FsbCh0aGlzKSkKK3JldHVybiBpLnRh
Zz1yLnRhZyxpLmhlbHBlcj10LGkuYXJncz1yLGl9cmV0dXJuKDAsbi5pbmhlcml0cykodCxlKSx0
LnByb3RvdHlwZS5jb21wdXRlPWZ1bmN0aW9uKCl7cmV0dXJuKDAsdGhpcy5oZWxwZXIpKHRoaXMu
YXJncyl9LHR9KGMpLGUuVW5ib3VuZFJlZmVyZW5jZT1mdW5jdGlvbihlKXtmdW5jdGlvbiByKCl7
cmV0dXJuKDAsbi5wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKSh0aGlzLGUuYXBwbHkodGhpcyxh
cmd1bWVudHMpKX1yZXR1cm4oMCxuLmluaGVyaXRzKShyLGUpLHIuY3JlYXRlPWZ1bmN0aW9uKGUp
e3JldHVybiBudWxsPT09ZT90Lk5VTExfUkVGRVJFTkNFOnZvaWQgMD09PWU/dC5VTkRFRklORURf
UkVGRVJFTkNFOiJvYmplY3QiPT10eXBlb2YgZT9uZXcgcihlKTp0LlByaW1pdGl2ZVJlZmVyZW5j
ZS5jcmVhdGUoZSl9LHIucHJvdG90eXBlLmdldD1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IHIoKDAs
aS5nZXQpKHRoaXMuaW5uZXIsZSkpfSxyfShvLkNvbnN0UmVmZXJlbmNlKX0pLGUoImVtYmVyLWds
aW1tZXIvdXRpbHMvc3RyaW5nIixbImV4cG9ydHMiLCJlbWJlci1kZWJ1ZyJdLGZ1bmN0aW9uKGUs
dCl7InVzZSBzdHJpY3QiCitmdW5jdGlvbiBuKGUpe3JldHVybiBpW2VdfWUuU2FmZVN0cmluZz12
b2lkIDAsZS5nZXRTYWZlU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHJ9LGUuZXNjYXBlRXhwcmVz
c2lvbj1mdW5jdGlvbihlKXtpZigic3RyaW5nIiE9dHlwZW9mIGUpe2lmKGUmJmUudG9IVE1MKXJl
dHVybiBlLnRvSFRNTCgpCitpZihudWxsPT1lKXJldHVybiIiCitpZighZSlyZXR1cm4gZSsiIgor
ZT0iIitlfXJldHVybiBvLnRlc3QoZSk/ZS5yZXBsYWNlKHMsbik6ZX0sZS5odG1sU2FmZT1mdW5j
dGlvbihlKXtyZXR1cm4gbnVsbD09PWV8fHZvaWQgMD09PWU/ZT0iIjoic3RyaW5nIiE9dHlwZW9m
IGUmJihlPSIiK2UpLG5ldyByKGUpfSxlLmlzSFRNTFNhZmU9ZnVuY3Rpb24oZSl7cmV0dXJuIGUm
JiJmdW5jdGlvbiI9PXR5cGVvZiBlLnRvSFRNTH0KK3ZhciByPWUuU2FmZVN0cmluZz1mdW5jdGlv
bigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5zdHJpbmc9ZX1yZXR1cm4gZS5wcm90b3R5cGUudG9TdHJp
bmc9ZnVuY3Rpb24oKXtyZXR1cm4iIit0aGlzLnN0cmluZ30sZS5wcm90b3R5cGUudG9IVE1MPWZ1
bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoKX0sZX0oKSxpPXsiJiI6IiZhbXA7IiwiPCI6
IiZsdDsiLCI+IjoiJmd0OyIsJyInOiImcXVvdDsiLCInIjoiJiN4Mjc7IiwiYCI6IiYjeDYwOyIs
Ij0iOiImI3gzRDsifSxvPS9bJjw+IidgPV0vLHM9L1smPD4iJ2A9XS9nfSksZSgiZW1iZXItZ2xp
bW1lci91dGlscy90by1ib29sIixbImV4cG9ydHMiLCJlbWJlci1ydW50aW1lIiwiZW1iZXItbWV0
YWwiXSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiCitlLmRlZmF1bHQ9ZnVuY3Rpb24oZSl7
cmV0dXJuISFlJiYoITA9PT1lfHwoISgwLHQuaXNBcnJheSkoZSl8fDAhPT0oMCxuLmdldCkoZSwi
bGVuZ3RoIikpKX19KSxlKCJlbWJlci1nbGltbWVyL3ZpZXdzL291dGxldCIsWyJleHBvcnRzIiwi
ZW1iZXItYmFiZWwiLCJlbWJlci11dGlscyIsIkBnbGltbWVyL3JlZmVyZW5jZSIsImVtYmVyLWVu
dmlyb25tZW50IiwiZW1iZXItbWV0YWwiXSxmdW5jdGlvbihlLHQsbixyLGksbyl7InVzZSBzdHJp
Y3QiCit2YXIgcz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5vdXRsZXRWaWV3PWUsdGhp
cy50YWc9ZS5fdGFnfXJldHVybiBlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG5l
dyB1KHRoaXMsZSl9LGUucHJvdG90eXBlLnZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3V0
bGV0Vmlldy5vdXRsZXRTdGF0ZX0sZS5wcm90b3R5cGUuZ2V0T3JwaGFuPWZ1bmN0aW9uKGUpe3Jl
dHVybiBuZXcgYSh0aGlzLGUpfSxlLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oZSl7dGhpcy5v
dXRsZXRWaWV3LnNldE91dGxldFN0YXRlKGUpfSxlfSgpLGE9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24g
bihuLHIpe3ZhciBpPSgwLHQucG9zc2libGVDb25zdHJ1Y3RvclJldHVybikodGhpcyxlLmNhbGwo
dGhpcyxuLm91dGxldFZpZXcpKQorcmV0dXJuIGkucm9vdD1uLGkubmFtZT1yLGl9cmV0dXJuKDAs
dC5pbmhlcml0cykobixlKSxuLnByb3RvdHlwZS52YWx1ZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMu
cm9vdC52YWx1ZSgpLHQ9ZS5vdXRsZXRzLm1haW4ub3V0bGV0cy5fX2VtYmVyX29ycGhhbnNfXwor
aWYoIXQpcmV0dXJuIG51bGwKK3ZhciBuPXQub3V0bGV0c1t0aGlzLm5hbWVdCitpZighbilyZXR1
cm4gbnVsbAordmFyIHI9T2JqZWN0LmNyZWF0ZShudWxsKQorcmV0dXJuIHJbbi5yZW5kZXIub3V0
bGV0XT1uLG4ud2FzVXNlZD0hMCx7b3V0bGV0czpyfX0sbn0ocyksdT1mdW5jdGlvbigpe2Z1bmN0
aW9uIGUoZSx0KXt0aGlzLnBhcmVudD1lLHRoaXMua2V5PXQsdGhpcy50YWc9ZS50YWd9cmV0dXJu
IGUucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGUodGhpcyx0KX0sZS5wcm90
b3R5cGUudmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJlbnQudmFsdWUoKVt0aGlzLmtl
eV19LGV9KCksbD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG4saSl7dGhpcy5fZW52aXJvbm1l
bnQ9ZSx0aGlzLnJlbmRlcmVyPXQsdGhpcy5vd25lcj1uLHRoaXMudGVtcGxhdGU9aSx0aGlzLm91
dGxldFN0YXRlPW51bGwsdGhpcy5fdGFnPW5ldyByLkRpcnR5YWJsZVRhZ31yZXR1cm4gZS5leHRl
bmQ9ZnVuY3Rpb24ocil7cmV0dXJuIGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIGkoKXtyZXR1cm4oMCx0
LnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4pKHRoaXMsZS5hcHBseSh0aGlzLGFyZ3VtZW50cykp
fXJldHVybigwLHQuaW5oZXJpdHMpKGksZSksaS5jcmVhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQ/
ZS5jcmVhdGUuY2FsbCh0aGlzLCgwLG4uYXNzaWduKSh7fSxyLHQpKTplLmNyZWF0ZS5jYWxsKHRo
aXMscil9LGl9KGUpfSxlLnJlb3BlbkNsYXNzPWZ1bmN0aW9uKGUpeygwLG4uYXNzaWduKSh0aGlz
LGUpfSxlLmNyZWF0ZT1mdW5jdGlvbih0KXt2YXIgcj10Ll9lbnZpcm9ubWVudCxpPXQucmVuZGVy
ZXIsbz10LnRlbXBsYXRlCityZXR1cm4gbmV3IGUocixpLHRbbi5PV05FUl0sbyl9LGUucHJvdG90
eXBlLmFwcGVuZFRvPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2Vudmlyb25tZW50fHxpLmVudmly
b25tZW50LG49dm9pZCAwCituPXQuaGFzRE9NJiYic3RyaW5nIj09dHlwZW9mIGU/ZG9jdW1lbnQu
cXVlcnlTZWxlY3RvcihlKTplLG8ucnVuLnNjaGVkdWxlKCJyZW5kZXIiLHRoaXMucmVuZGVyZXIs
ImFwcGVuZE91dGxldFZpZXciLHRoaXMsbil9LGUucHJvdG90eXBlLnJlcmVuZGVyPWZ1bmN0aW9u
KCl7fSxlLnByb3RvdHlwZS5zZXRPdXRsZXRTdGF0ZT1mdW5jdGlvbihlKXt0aGlzLm91dGxldFN0
YXRlPXtvdXRsZXRzOnttYWluOmV9LHJlbmRlcjp7b3duZXI6dm9pZCAwLGludG86dm9pZCAwLG91
dGxldDoibWFpbiIsbmFtZToiLXRvcC1sZXZlbCIsY29udHJvbGxlcjp2b2lkIDAsVmlld0NsYXNz
OnZvaWQgMCx0ZW1wbGF0ZTp2b2lkIDB9fSx0aGlzLl90YWcuZGlydHkoKX0sZS5wcm90b3R5cGUu
dG9SZWZlcmVuY2U9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHModGhpcyl9LGUucHJvdG90eXBlLmRl
c3Ryb3k9ZnVuY3Rpb24oKXt9LGV9KCkKK2UuZGVmYXVsdD1sfSksZSgiZW1iZXItbWV0YWwiLFsi
ZXhwb3J0cyIsImVtYmVyLWVudmlyb25tZW50IiwiZW1iZXItdXRpbHMiLCJlbWJlci1kZWJ1ZyIs
ImVtYmVyLWJhYmVsIiwiQGdsaW1tZXIvcmVmZXJlbmNlIiwicmVxdWlyZSIsImVtYmVyLWNvbnNv
bGUiLCJiYWNrYnVybmVyIl0sZnVuY3Rpb24oZSx0LG4scixpLG8scyxhLHUpeyJ1c2Ugc3RyaWN0
IgorZnVuY3Rpb24gbChlLHQsbil7dmFyIHIsaT10W24rMV0sbz10W24rMl0KK2ZvcihyPTA7cjxl
Lmxlbmd0aC0yO3IrPTMpaWYoZVtyXT09PWkmJmVbcisxXT09PW8pcmV0dXJuCitlLnB1c2goaSxv
LHRbbiszXSl9ZnVuY3Rpb24gYyhlLHQsbil7dmFyIHIsaT0tMQorZm9yKHI9ZS5sZW5ndGgtMzty
Pj0wO3ItPTMpaWYodD09PWVbcl0mJm49PT1lW3IrMV0pe2k9cgorYnJlYWt9cmV0dXJuIGl9ZnVu
Y3Rpb24gcCh0LG4scil7dmFyIGksbyxzLGEsdT1lLnBlZWtNZXRhKHQpCitpZih1KXt2YXIgbD11
Lm1hdGNoaW5nTGlzdGVuZXJzKG4pCitpZih2b2lkIDAhPT1sKXt2YXIgcD1bXQorZm9yKGk9bC5s
ZW5ndGgtMztpPj0wO2ktPTMpbz1sW2ldLHM9bFtpKzFdLGE9bFtpKzJdLC0xPT09YyhyLG8scykm
JihyLnB1c2gobyxzLGEpLHAucHVzaChvLHMsYSkpCityZXR1cm4gcH19fWZ1bmN0aW9uIGYoZSx0
LG4scixpKXtyfHwiZnVuY3Rpb24iIT10eXBlb2Ygbnx8KHI9bixuPW51bGwpCit2YXIgbz0wCitp
JiYob3w9Q3QpLGllKGUpLmFkZFRvTGlzdGVuZXJzKHQsbixyLG8pLCJmdW5jdGlvbiI9PXR5cGVv
ZiBlLmRpZEFkZExpc3RlbmVyJiZlLmRpZEFkZExpc3RlbmVyKHQsbixyKX1mdW5jdGlvbiBoKGUs
dCxuLHIpe3J8fCJmdW5jdGlvbiIhPXR5cGVvZiBufHwocj1uLG49bnVsbCksaWUoZSkucmVtb3Zl
RnJvbUxpc3RlbmVycyh0LG4scixmdW5jdGlvbigpeyJmdW5jdGlvbiI9PXR5cGVvZiBlLmRpZFJl
bW92ZUxpc3RlbmVyJiZlLmRpZFJlbW92ZUxpc3RlbmVyLmFwcGx5KGUsYXJndW1lbnRzKX0pfWZ1
bmN0aW9uIGQoZSx0LG4scixpKXtyZXR1cm4gbShlLFt0XSxuLHIsaSl9ZnVuY3Rpb24gbShlLHQs
bixyLGkpe3JldHVybiByfHwiZnVuY3Rpb24iIT10eXBlb2Ygbnx8KHI9bixuPW51bGwpLGllKGUp
LnN1c3BlbmRMaXN0ZW5lcnModCxuLHIsaSl9ZnVuY3Rpb24gZyh0LHIsaSxvLHMpe3ZhciBhLHUs
bCxjLHAKK2lmKHZvaWQgMD09PW8mJihhPXN8fGUucGVla01ldGEodCksbz0ib2JqZWN0Ij09dHlw
ZW9mIGEmJm51bGwhPT1hJiZhLm1hdGNoaW5nTGlzdGVuZXJzKHIpKSx2b2lkIDAhPT1vJiYwIT09
by5sZW5ndGgpe2Zvcih1PW8ubGVuZ3RoLTM7dT49MDt1LT0zKWw9b1t1XSxjPW9bdSsxXSxwPW9b
dSsyXSxjJiYocCZPdHx8KHAmQ3QmJmgodCxyLGwsYyksbHx8KGw9dCksInN0cmluZyI9PXR5cGVv
ZiBjP2k/bi5hcHBseVN0cihsLGMsaSk6bFtjXSgpOmk/Yy5hcHBseShsLGkpOmMuY2FsbChsKSkp
CityZXR1cm4hMH19ZnVuY3Rpb24geSh0LG4pe3ZhciByLGksbyxzPVtdLGE9ZS5wZWVrTWV0YSh0
KSx1PWEmJmEubWF0Y2hpbmdMaXN0ZW5lcnMobikKK2lmKCF1KXJldHVybiBzCitmb3Iocj0wO3I8
dS5sZW5ndGg7cis9MylpPXVbcl0sbz11W3IrMV0scy5wdXNoKFtpLG9dKQorcmV0dXJuIHN9ZnVu
Y3Rpb24gdigpe3JldHVybiBuZXcgby5EaXJ0eWFibGVUYWd9ZnVuY3Rpb24gYihlLHQpe3ZhciBu
CityZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGUmJmU/KG49dHx8aWUoZSksbi53cml0YWJsZVRhZyh2
KSk6by5DT05TVEFOVF9UQUd9ZnVuY3Rpb24gXyhlLHQpe3ZhciBuPWUucmVhZGFibGVUYWcoKQor
biYmbi5kaXJ0eSgpCit2YXIgcj1lLnJlYWRhYmxlVGFncygpLGk9ciYmclt0XQoraSYmaS5kaXJ0
eSgpLCJjb250ZW50Ij09PXQmJmUuaXNQcm94eSgpJiZlLmdldFRhZygpLmNvbnRlbnREaWRDaGFu
Z2UoKSwobnx8aSkmJkUoKX1mdW5jdGlvbiB3KCl7fWZ1bmN0aW9uIEUoKXtTdHx8KFN0PUV0KCJl
bWJlci1tZXRhbCIpLnJ1biksVHQoKSYmIVN0LmJhY2tidXJuZXIuY3VycmVudEluc3RhbmNlJiZT
dC5zY2hlZHVsZSgiYWN0aW9ucyIsdyl9ZnVuY3Rpb24geCh0LG4scil7dmFyIGk9cnx8ZS5wZWVr
TWV0YSh0KQoraWYoIWl8fGkuaXNJbml0aWFsaXplZCh0KSl7dmFyIG89aSYmaS5wZWVrV2F0Y2hp
bmcobik+MCxzPXRbbl0sYT1udWxsIT09cyYmIm9iamVjdCI9PXR5cGVvZiBzJiZzLmlzRGVzY3Jp
cHRvcj9zOnZvaWQgMAorYSYmYS53aWxsQ2hhbmdlJiZhLndpbGxDaGFuZ2UodCxuKSxvJiYoTyh0
LG4saSksUyh0LG4saSksRCh0LG4saSkpfX1mdW5jdGlvbiBDKHQsbixyKXt2YXIgaT1yfHxlLnBl
ZWtNZXRhKHQpLG89ISFpCitpZighb3x8aS5pc0luaXRpYWxpemVkKHQpKXt2YXIgcz10W25dLGE9
bnVsbCE9PXMmJiJvYmplY3QiPT10eXBlb2YgcyYmcy5pc0Rlc2NyaXB0b3I/czp2b2lkIDAKK2lm
KGEmJmEuZGlkQ2hhbmdlJiZhLmRpZENoYW5nZSh0LG4pLG8mJmkucGVla1dhdGNoaW5nKG4pPjAm
JihpLmhhc0RlcHMobikmJiFpLmlzU291cmNlRGVzdHJveWluZygpJiZBKHQsbixpKSxSKHQsbixp
KSxMKHQsbixpKSksdFtrdF0mJnRba3RdKG4pLG8pe2lmKGkuaXNTb3VyY2VEZXN0cm95aW5nKCkp
cmV0dXJuCitfKGksbil9fX1mdW5jdGlvbiBPKGUsdCxuKXt2YXIgcixpCituLmlzU291cmNlRGVz
dHJveWluZygpfHxuLmhhc0RlcHModCkmJihyPUR0LGk9IXIsaSYmKHI9RHQ9e30pLFQoeCxlLHQs
cixuKSxpJiYoRHQ9bnVsbCkpfWZ1bmN0aW9uIEEoZSx0LG4pe3ZhciByPUx0LGk9IXIKK2kmJihy
PUx0PXt9KSxUKEMsZSx0LHIsbiksaSYmKEx0PW51bGwpfWZ1bmN0aW9uIFQoZSx0LHIsaSxvKXt2
YXIgcz12b2lkIDAsYT12b2lkIDAsdT1uLmd1aWRGb3IodCksbD1pW3VdCitsfHwobD1pW3VdPXt9
KSxsW3JdfHwobFtyXT0hMCxvLmZvckVhY2hJbkRlcHMocixmdW5jdGlvbihuLHIpe3ImJihzPXRb
bl0sKGE9bnVsbCE9PXMmJiJvYmplY3QiPT10eXBlb2YgcyYmcy5pc0Rlc2NyaXB0b3I/czp2b2lk
IDApJiZhLl9zdXNwZW5kZWQ9PT10fHxlKHQsbixvKSl9KSl9ZnVuY3Rpb24gUyhlLHQsbil7dmFy
IHI9bi5yZWFkYWJsZUNoYWluV2F0Y2hlcnMoKQorciYmci5ub3RpZnkodCwhMSx4KX1mdW5jdGlv
biBSKGUsdCxuKXt2YXIgcj1uLnJlYWRhYmxlQ2hhaW5XYXRjaGVycygpCityJiZyLm5vdGlmeSh0
LCEwLEMpfWZ1bmN0aW9uIGsoZSx0LG4pe3ZhciByPW4ucmVhZGFibGVDaGFpbldhdGNoZXJzKCkK
K3ImJnIucmV2YWxpZGF0ZSh0KX1mdW5jdGlvbiBOKCl7anQrK31mdW5jdGlvbiBQKCl7LS1qdDw9
MCYmKE50LmNsZWFyKCksUHQuZmx1c2goKSl9ZnVuY3Rpb24gaihlLHQpe04oKQordHJ5e2UuY2Fs
bCh0KX1maW5hbGx5e1AuY2FsbCh0KX19ZnVuY3Rpb24gRChlLHQsbil7aWYoIW4uaXNTb3VyY2VE
ZXN0cm95aW5nKCkpe3ZhciByPXQrIjpiZWZvcmUiLGk9dm9pZCAwLG89dm9pZCAwCitqdD8oaT1O
dC5hZGQoZSx0LHIpLG89cChlLHIsaSksZyhlLHIsW2UsdF0sbykpOmcoZSxyLFtlLHRdKX19ZnVu
Y3Rpb24gTChlLHQsbil7aWYoIW4uaXNTb3VyY2VEZXN0cm95aW5nKCkpe3ZhciByPXQrIjpjaGFu
Z2UiLGk9dm9pZCAwCitqdD8oaT1QdC5hZGQoZSx0LHIpLHAoZSxyLGkpKTpnKGUscixbZSx0XSl9
fWZ1bmN0aW9uIEkoKXt0aGlzLmlzRGVzY3JpcHRvcj0hMH1mdW5jdGlvbiBNKGUsdCxuLHIsaSl7
aXx8KGk9aWUoZSkpCit2YXIgbz1pLnBlZWtXYXRjaGluZyh0KSxzPWVbdF0sYT1udWxsIT09cyYm
Im9iamVjdCI9PXR5cGVvZiBzJiZzLmlzRGVzY3JpcHRvcj9zOnZvaWQgMCx1PXZvaWQgMCE9PW8m
Jm8+MAorYSYmYS50ZWFyZG93bihlLHQpCit2YXIgbD12b2lkIDAKK3JldHVybiBuIGluc3RhbmNl
b2YgST8obD1uLGVbdF09bCxGKGUuY29uc3RydWN0b3IpLCJmdW5jdGlvbiI9PXR5cGVvZiBuLnNl
dHVwJiZuLnNldHVwKGUsdCkpOm51bGw9PW4/KGw9cixlW3RdPXIpOihsPW4sT2JqZWN0LmRlZmlu
ZVByb3BlcnR5KGUsdCxuKSksdSYmayhlLHQsaSksImZ1bmN0aW9uIj09dHlwZW9mIGUuZGlkRGVm
aW5lUHJvcGVydHkmJmUuZGlkRGVmaW5lUHJvcGVydHkoZSx0LGwpLHRoaXN9ZnVuY3Rpb24gRihl
KXtpZighMSE9PUl0KXt2YXIgdD1pZShlKS5yZWFkYWJsZUNhY2hlKCkKK3QmJnZvaWQgMCE9PXQu
X2NvbXB1dGVkUHJvcGVydGllcyYmKHQuX2NvbXB1dGVkUHJvcGVydGllcz12b2lkIDApfX1mdW5j
dGlvbiB6KGUsdCxuKXtpZigib2JqZWN0Ij09dHlwZW9mIGUmJm51bGwhPT1lKXt2YXIgcixpLG89
bnx8aWUoZSkKK28ucGVla1dhdGNoaW5nKHQpP28ud3JpdGVXYXRjaGluZyh0LChvLnBlZWtXYXRj
aGluZyh0KXx8MCkrMSk6KG8ud3JpdGVXYXRjaGluZyh0LDEpLHI9ZVt0XSxpPW51bGwhPT1yJiYi
b2JqZWN0Ij09dHlwZW9mIHImJnIuaXNEZXNjcmlwdG9yP3I6dm9pZCAwLGkmJmkud2lsbFdhdGNo
JiZpLndpbGxXYXRjaChlLHQpLCJmdW5jdGlvbiI9PXR5cGVvZiBlLndpbGxXYXRjaFByb3BlcnR5
JiZlLndpbGxXYXRjaFByb3BlcnR5KHQpKX19ZnVuY3Rpb24gVShlLHQsbil7aWYoIm9iamVjdCI9
PXR5cGVvZiBlJiZudWxsIT09ZSl7dmFyIHIsaSxvPW58fGllKGUpCitpZighby5pc1NvdXJjZURl
c3Ryb3llZCgpKXt2YXIgcz1vLnBlZWtXYXRjaGluZyh0KQorMT09PXM/KG8ud3JpdGVXYXRjaGlu
Zyh0LDApLHI9ZVt0XSxpPW51bGwhPT1yJiYib2JqZWN0Ij09dHlwZW9mIHImJnIuaXNEZXNjcmlw
dG9yP3I6dm9pZCAwLGkmJmkuZGlkVW53YXRjaCYmaS5kaWRVbndhdGNoKGUsdCksImZ1bmN0aW9u
Ij09dHlwZW9mIGUuZGlkVW53YXRjaFByb3BlcnR5JiZlLmRpZFVud2F0Y2hQcm9wZXJ0eSh0KSk6
cz4xJiZvLndyaXRlV2F0Y2hpbmcodCxzLTEpfX19ZnVuY3Rpb24gQihlLHQpe3JldHVybih0fHxp
ZShlKSkud3JpdGFibGVDaGFpbnMocSl9ZnVuY3Rpb24gcShlKXtyZXR1cm4gbmV3IHp0KG51bGws
bnVsbCxlKX1mdW5jdGlvbiBIKGUsdCxuKXtpZigib2JqZWN0Ij09dHlwZW9mIGUmJm51bGwhPT1l
KXt2YXIgcj1ufHxpZShlKSxpPXIucGVla1dhdGNoaW5nKHQpfHwwCitpP3Iud3JpdGVXYXRjaGlu
Zyh0LGkrMSk6KHIud3JpdGVXYXRjaGluZyh0LDEpLEIoZSxyKS5hZGQodCkpfX1mdW5jdGlvbiBW
KGUsdCxuKXtpZigib2JqZWN0Ij09dHlwZW9mIGUmJm51bGwhPT1lKXt2YXIgcj1ufHxpZShlKSxp
PXIucGVla1dhdGNoaW5nKHQpfHwwCisxPT09aT8oci53cml0ZVdhdGNoaW5nKHQsMCksQihlLHIp
LnJlbW92ZSh0KSk6aT4xJiZyLndyaXRlV2F0Y2hpbmcodCxpLTEpfX1mdW5jdGlvbiBXKGUpe3Jl
dHVybiBlLm1hdGNoKE10KVswXX1mdW5jdGlvbiAkKGUpe3JldHVybiJvYmplY3QiPT10eXBlb2Yg
ZSYmZX1mdW5jdGlvbiBHKGUpe3JldHVybiEoJChlKSYmZS5pc0Rlc2NyaXB0b3ImJiExPT09ZS5f
dm9sYXRpbGUpfWZ1bmN0aW9uIEsoKXtyZXR1cm4gbmV3IEZ0fWZ1bmN0aW9uIFEoZSx0LG4pe3Zh
ciByPWllKGUpCityLndyaXRhYmxlQ2hhaW5XYXRjaGVycyhLKS5hZGQodCxuKSx6KGUsdCxyKX1m
dW5jdGlvbiBZKHQsbixyLGkpe2lmKCQodCkpe3ZhciBvPWl8fGUucGVla01ldGEodCkKK28mJm8u
cmVhZGFibGVDaGFpbldhdGNoZXJzKCkmJihvPWllKHQpLG8ucmVhZGFibGVDaGFpbldhdGNoZXJz
KCkucmVtb3ZlKG4sciksVSh0LG4sbykpfX1mdW5jdGlvbiBKKHQsbil7aWYoJCh0KSl7dmFyIHIs
aT1lLnBlZWtNZXRhKHQpCitpZih2b2lkIDA9PT1pfHxpLnByb3RvIT09dClyZXR1cm4hMD09PUco
dFtuXSk/bGUodCxuKToocj1pLnJlYWRhYmxlQ2FjaGUoKSk/RWUuZ2V0KHIsbik6dm9pZCAwfX1m
dW5jdGlvbiBYKGUsdCl7dmFyIG49dGUoZSkscj1uZShlKQordC5wcm90b3R5cGVbIndyaXRhYmxl
IityXT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9nZXRPckNyZWF0ZU93bk1hcChuKX0sdC5wcm90
b3R5cGVbInJlYWRhYmxlIityXT1mdW5jdGlvbigpe3JldHVybiB0aGlzW25dfX1mdW5jdGlvbiBa
KGUsdCl7dmFyIG49dGUoZSkscj1uZShlKQordC5wcm90b3R5cGVbIndyaXRlIityXT1mdW5jdGlv
bihlLHQpe3RoaXMuX2dldE9yQ3JlYXRlT3duTWFwKG4pW2VdPXR9LHQucHJvdG90eXBlWyJwZWVr
IityXT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fZmluZEluaGVyaXRlZChuLGUpfSx0LnByb3Rv
dHlwZVsiZm9yRWFjaCIrcl09ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LHI9dGhpcyxpPXZvaWQgMDt2
b2lkIDAhPT1yOyl7aWYodm9pZCAwIT09KHQ9cltuXSkpZm9yKHZhciBvIGluIHQpaT1pfHxPYmpl
Y3QuY3JlYXRlKG51bGwpLHZvaWQgMD09PWlbb10mJihpW29dPSEwLGUobyx0W29dKSkKK3I9ci5w
YXJlbnR9fSx0LnByb3RvdHlwZVsiY2xlYXIiK3JdPWZ1bmN0aW9uKCl7dGhpc1tuXT12b2lkIDB9
LHQucHJvdG90eXBlWyJkZWxldGVGcm9tIityXT1mdW5jdGlvbihlKXtkZWxldGUgdGhpcy5fZ2V0
T3JDcmVhdGVPd25NYXAobilbZV19LHQucHJvdG90eXBlWyJoYXNJbiIrcl09ZnVuY3Rpb24oZSl7
cmV0dXJuIHZvaWQgMCE9PXRoaXMuX2ZpbmRJbmhlcml0ZWQobixlKX19ZnVuY3Rpb24gZWUoZSx0
KXt2YXIgbj10ZShlKSxyPW5lKGUpCit0LnByb3RvdHlwZVsid3JpdGFibGUiK3JdPWZ1bmN0aW9u
KGUpe3ZhciB0PXRoaXNbbl0KK3JldHVybiB2b2lkIDA9PT10JiYodD10aGlzW25dPWUodGhpcy5z
b3VyY2UpKSx0fSx0LnByb3RvdHlwZVsicmVhZGFibGUiK3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRo
aXNbbl19fWZ1bmN0aW9uIHRlKGUpe3JldHVybiJfIitlfWZ1bmN0aW9uIG5lKGUpe3JldHVybiBl
LnJlcGxhY2UoL15cdy8sZnVuY3Rpb24oZSl7cmV0dXJuIGUudG9VcHBlckNhc2UoKX0pfWZ1bmN0
aW9uIHJlKHQpe3ZhciBuPWUucGVla01ldGEodCkKK3ZvaWQgMCE9PW4mJm4uZGVzdHJveSgpfWZ1
bmN0aW9uIGllKHQpe3ZhciBuPWUucGVla01ldGEodCkscj12b2lkIDAKK2lmKHZvaWQgMCE9PW4p
e2lmKG4uc291cmNlPT09dClyZXR1cm4gbgorcj1ufXZhciBpPW5ldyBxdCh0LHIpCityZXR1cm4g
S3QodCxpKSxpfWZ1bmN0aW9uIG9lKGUpe3JldHVybiBadC5nZXQoZSl9ZnVuY3Rpb24gc2UoZSl7
cmV0dXJuLTEhPT1lbi5nZXQoZSl9ZnVuY3Rpb24gYWUoZSl7cmV0dXJuIHRuLmdldChlKX1mdW5j
dGlvbiB1ZShlKXtyZXR1cm4gbm4uZ2V0KGUpfWZ1bmN0aW9uIGxlKGUsdCl7dmFyIG49ZVt0XSxy
PW51bGwhPT1uJiYib2JqZWN0Ij09dHlwZW9mIG4mJm4uaXNEZXNjcmlwdG9yP246dm9pZCAwLGk9
dm9pZCAwCityZXR1cm4gdm9pZCAwPT09ciYmc2UodCk/Y2UoZSx0KTpyP3IuZ2V0KGUsdCk6KGk9
bix2b2lkIDAhPT1pfHwib2JqZWN0IiE9dHlwZW9mIGV8fHQgaW4gZXx8ImZ1bmN0aW9uIiE9dHlw
ZW9mIGUudW5rbm93blByb3BlcnR5P2k6ZS51bmtub3duUHJvcGVydHkodCkpfWZ1bmN0aW9uIGNl
KGUsdCl7dmFyIG4scj1lLGk9dC5zcGxpdCgiLiIpCitmb3Iobj0wO248aS5sZW5ndGg7bisrKXtp
ZighcGUocikpcmV0dXJuCitpZigocj1sZShyLGlbbl0pKSYmci5pc0Rlc3Ryb3llZClyZXR1cm59
cmV0dXJuIHJ9ZnVuY3Rpb24gcGUoZSl7cmV0dXJuIG51bGwhPWUmJnJuW3R5cGVvZiBlXX1mdW5j
dGlvbiBmZSh0LG4scixpKXtpZihzZShuKSlyZXR1cm4gaGUodCxuLHIsaSkKK3ZhciBvPWUucGVl
a01ldGEodCkscz10W25dLGE9dm9pZCAwLHU9dm9pZCAwCitpZihudWxsIT09cyYmIm9iamVjdCI9
PXR5cGVvZiBzJiZzLmlzRGVzY3JpcHRvcj9hPXM6dT1zLGEpYS5zZXQodCxuLHIpCitlbHNlIGlm
KCF0LnNldFVua25vd25Qcm9wZXJ0eXx8dm9pZCAwIT09dXx8biBpbiB0KXtpZih1PT09cilyZXR1
cm4gcgoreCh0LG4sbyksdFtuXT1yLEModCxuLG8pfWVsc2UgdC5zZXRVbmtub3duUHJvcGVydHko
bixyKQorcmV0dXJuIHJ9ZnVuY3Rpb24gaGUoZSx0LG4saSl7dmFyIG89dC5zbGljZSh0Lmxhc3RJ
bmRleE9mKCIuIikrMSkKK2lmKHQ9dD09PW8/bzp0LnNsaWNlKDAsdC5sZW5ndGgtKG8ubGVuZ3Ro
KzEpKSwidGhpcyIhPT10JiYoZT1jZShlLHQpKSwhb3x8MD09PW8ubGVuZ3RoKXRocm93IG5ldyBy
LkVycm9yKCJQcm9wZXJ0eSBzZXQgZmFpbGVkOiBZb3UgcGFzc2VkIGFuIGVtcHR5IHBhdGgiKQor
aWYoIWUpe2lmKGkpcmV0dXJuCit0aHJvdyBuZXcgci5FcnJvcignUHJvcGVydHkgc2V0IGZhaWxl
ZDogb2JqZWN0IGluIHBhdGggIicrdCsnIiBjb3VsZCBub3QgYmUgZm91bmQgb3Igd2FzIGRlc3Ry
b3llZC4nKX1yZXR1cm4gZmUoZSxvLG4pfWZ1bmN0aW9uIGRlKGUsdCxuKXtyZXR1cm4gZmUoZSx0
LG4sITApfWZ1bmN0aW9uIG1lKGUsdCl7dmFyIG49ZS5pbmRleE9mKCJ7IikKK248MD90KGUucmVw
bGFjZShvbiwiLltdIikpOmdlKCIiLGUsbix0KX1mdW5jdGlvbiBnZShlLHQsbixyKXt2YXIgaT10
LmluZGV4T2YoIn0iKSxvPTAscz12b2lkIDAsYT12b2lkIDAsdT10LnN1YnN0cmluZyhuKzEsaSku
c3BsaXQoIiwiKSxsPXQuc3Vic3RyaW5nKGkrMSkKK2ZvcihlKz10LnN1YnN0cmluZygwLG4pLGE9
dS5sZW5ndGg7bzxhOylzPWwuaW5kZXhPZigieyIpLHM8MD9yKChlK3VbbysrXStsKS5yZXBsYWNl
KG9uLCIuW10iKSk6Z2UoZSt1W28rK10sbCxzLHIpfWZ1bmN0aW9uIHllKGUsdCxuKXtzZSh0KT9I
KGUsdCxuKTp6KGUsdCxuKX1mdW5jdGlvbiB2ZShlLHQsbil7c2UodCk/VihlLHQsbik6VShlLHQs
bil9ZnVuY3Rpb24gYmUoZSx0LG4scil7dmFyIGk9dm9pZCAwLG89dm9pZCAwLHM9ZS5fZGVwZW5k
ZW50S2V5cworaWYocylmb3IoaT0wO2k8cy5sZW5ndGg7aSsrKW89c1tpXSxyLndyaXRlRGVwcyhv
LG4sKHIucGVla0RlcHMobyxuKXx8MCkrMSkseWUodCxvLHIpfWZ1bmN0aW9uIF9lKGUsdCxuLHIp
e3ZhciBpLG8scz1lLl9kZXBlbmRlbnRLZXlzCitpZihzKWZvcihpPTA7aTxzLmxlbmd0aDtpKysp
bz1zW2ldLHIud3JpdGVEZXBzKG8sbiwoci5wZWVrRGVwcyhvLG4pfHwwKS0xKSx2ZSh0LG8scil9
ZnVuY3Rpb24gd2UoZSx0KXt0aGlzLmlzRGVzY3JpcHRvcj0hMCwiZnVuY3Rpb24iPT10eXBlb2Yg
ZT90aGlzLl9nZXR0ZXI9ZToodGhpcy5fZ2V0dGVyPWUuZ2V0LHRoaXMuX3NldHRlcj1lLnNldCks
dGhpcy5fZGVwZW5kZW50S2V5cz12b2lkIDAsdGhpcy5fc3VzcGVuZGVkPXZvaWQgMCx0aGlzLl9t
ZXRhPXZvaWQgMCx0aGlzLl92b2xhdGlsZT0hMSx0aGlzLl9kZXBlbmRlbnRLZXlzPXQmJnQuZGVw
ZW5kZW50S2V5cyx0aGlzLl9yZWFkT25seT0hMX1mdW5jdGlvbiBFZSh0LG4pe3ZhciByPWUucGVl
a01ldGEodCksaT1yJiZyLnNvdXJjZT09PXQmJnIucmVhZGFibGVDYWNoZSgpLG89aSYmaVtuXQor
aWYobyE9PVd0KXJldHVybiBvfWZ1bmN0aW9uIHhlKGUsdCl7dGhyb3cgbmV3IHIuRXJyb3IoIkNh
bm5vdCBzZXQgcmVhZC1vbmx5IHByb3BlcnR5ICciK3QrIicgb24gb2JqZWN0OiAiK24uaW5zcGVj
dChlKSl9ZnVuY3Rpb24gQ2UoZSx0LG4pe3JldHVybiBNKGUsdCxudWxsKSxmZShlLHQsbil9ZnVu
Y3Rpb24gT2UoZSl7dmFyIHQsbj1bXSxyPXZvaWQgMAorZm9yKHQ9MDt0PGxuLmxlbmd0aDt0Kysp
cj1sblt0XSxyLnJlZ2V4LnRlc3QoZSkmJm4ucHVzaChyLm9iamVjdCkKK3JldHVybiBjbltlXT1u
LG59ZnVuY3Rpb24gQWUoZSx0LG4scil7dmFyIGk9dm9pZCAwCit0cnl7aT1lLmNhbGwocil9Y2F0
Y2goZSl7bi5leGNlcHRpb249ZSxpPW59ZmluYWxseXt0KCl9cmV0dXJuIGl9ZnVuY3Rpb24gVGUo
KXt9ZnVuY3Rpb24gU2UoZSxuLHIpe2lmKDA9PT1sbi5sZW5ndGgpcmV0dXJuIFRlCit2YXIgaT1j
bltlXQoraWYoaXx8KGk9T2UoZSkpLDA9PT1pLmxlbmd0aClyZXR1cm4gVGUKK3ZhciBvPW4ociks
cz10LkVOVi5TVFJVQ1RVUkVEX1BST0ZJTEUsYT12b2lkIDAKK3MmJihhPWUrIjogIitvLm9iamVj
dCxjb25zb2xlLnRpbWUoYSkpCit2YXIgdT1uZXcgQXJyYXkoaS5sZW5ndGgpLGw9dm9pZCAwLGM9
dm9pZCAwLHA9cG4oKQorZm9yKGw9MDtsPGkubGVuZ3RoO2wrKyljPWlbbF0sdVtsXT1jLmJlZm9y
ZShlLHAsbykKK3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXZvaWQgMCxuPXZvaWQgMCxyPXBuKCkK
K2Zvcih0PTA7dDxpLmxlbmd0aDt0Kyspbj1pW3RdLCJmdW5jdGlvbiI9PXR5cGVvZiBuLmFmdGVy
JiZuLmFmdGVyKGUscixvLHVbdF0pCitzJiZjb25zb2xlLnRpbWVFbmQoYSl9fWZ1bmN0aW9uIFJl
KGUpe2huPWV9ZnVuY3Rpb24ga2UoZSl7ZG4/ZG4oZSk6TmUoZSl9ZnVuY3Rpb24gTmUoZSl7aWYo
ci5pc1Rlc3RpbmcoKSl0aHJvdyBlCitobj9obihlKTphLmVycm9yKGZuKGUpKX1mdW5jdGlvbiBQ
ZShlKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGUmJm51bGwhPT1lfHwiZnVuY3Rpb24iPT10eXBl
b2YgZX1mdW5jdGlvbiBqZShlKXt2YXIgdCxyLGksbworaWYoISh0aGlzIGluc3RhbmNlb2YgamUp
KXRocm93IG5ldyBUeXBlRXJyb3IoIkNvbnN0cnVjdG9yIFdlYWtNYXAgcmVxdWlyZXMgJ25ldyci
KQoraWYodGhpcy5faWQ9bi5HVUlEX0tFWSttbisrLG51bGw9PT1lfHx2b2lkIDA9PT1lKTtlbHNl
e2lmKCFBcnJheS5pc0FycmF5KGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIlRoZSB3ZWFrIG1hcCBj
b25zdHJ1Y3RvciBwb2x5ZmlsbCBvbmx5IHN1cHBvcnRzIGFuIGFycmF5IGFyZ3VtZW50IikKK2Zv
cih0PTA7dDxlLmxlbmd0aDt0Kyspcj1lW3RdLGk9clswXSxvPXJbMV0sdGhpcy5zZXQoaSxvKX19
ZnVuY3Rpb24gRGUoZSl7cmV0dXJuIG51bGw9PT1lfHx2b2lkIDA9PT1lfWZ1bmN0aW9uIExlKGUp
e3ZhciB0LG4scj1EZShlKQoraWYocilyZXR1cm4gcgoraWYoIm51bWJlciI9PXR5cGVvZiBlLnNp
emUpcmV0dXJuIWUuc2l6ZQordmFyIGk9dHlwZW9mIGUKK3JldHVybiJvYmplY3QiPT09aSYmIm51
bWJlciI9PXR5cGVvZih0PWxlKGUsInNpemUiKSk/IXQ6Im51bWJlciI9PXR5cGVvZiBlLmxlbmd0
aCYmImZ1bmN0aW9uIiE9PWk/IWUubGVuZ3RoOiJvYmplY3QiPT09aSYmIm51bWJlciI9PXR5cGVv
ZihuPWxlKGUsImxlbmd0aCIpKSYmIW59ZnVuY3Rpb24gSWUoZSl7cmV0dXJuIExlKGUpfHwic3Ry
aW5nIj09dHlwZW9mIGUmJm51bGw9PT1lLm1hdGNoKC9cUy8pfWZ1bmN0aW9uIE1lKCl7cmV0dXJu
IHluLnJ1bi5hcHBseSh5bixhcmd1bWVudHMpfWZ1bmN0aW9uIEZlKGUpe3Rocm93IG5ldyBUeXBl
RXJyb3IoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpKyIgaXMgbm90IGEgZnVuY3Rp
b24iKX1mdW5jdGlvbiB6ZShlKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJDb25zdHJ1Y3RvciAiK2Ur
IiByZXF1aXJlcyAnbmV3JyIpfWZ1bmN0aW9uIFVlKGUpe3ZhciB0PU9iamVjdC5jcmVhdGUobnVs
bCkKK2Zvcih2YXIgbiBpbiBlKXRbbl09ZVtuXQorcmV0dXJuIHR9ZnVuY3Rpb24gQmUoZSx0KXt2
YXIgbj1lLl9rZXlzLmNvcHkoKSxyPVVlKGUuX3ZhbHVlcykKK3JldHVybiB0Ll9rZXlzPW4sdC5f
dmFsdWVzPXIsdC5zaXplPWUuc2l6ZSx0fWZ1bmN0aW9uIHFlKCl7dGhpcyBpbnN0YW5jZW9mIHFl
P3RoaXMuY2xlYXIoKTp6ZSgiT3JkZXJlZFNldCIpfWZ1bmN0aW9uIEhlKCl7dGhpcyBpbnN0YW5j
ZW9mIEhlPyh0aGlzLl9rZXlzPXFlLmNyZWF0ZSgpLHRoaXMuX3ZhbHVlcz1PYmplY3QuY3JlYXRl
KG51bGwpLHRoaXMuc2l6ZT0wKTp6ZSgiTWFwIil9ZnVuY3Rpb24gVmUoZSl7dGhpcy5fc3VwZXIk
Y29uc3RydWN0b3IoKSx0aGlzLmRlZmF1bHRWYWx1ZT1lLmRlZmF1bHRWYWx1ZX1mdW5jdGlvbiBX
ZShlKXtyZXR1cm4gZSsiOmNoYW5nZSJ9ZnVuY3Rpb24gJGUoZSl7cmV0dXJuIGUrIjpiZWZvcmUi
fWZ1bmN0aW9uIEdlKGUsdCxuLHIpe3JldHVybiBmKGUsV2UodCksbixyKSx5ZShlLHQpLHRoaXN9
ZnVuY3Rpb24gS2UoZSx0LG4scil7cmV0dXJuIHZlKGUsdCksaChlLFdlKHQpLG4sciksdGhpc31m
dW5jdGlvbiBRZShlLHQsbixyKXtyZXR1cm4gZihlLCRlKHQpLG4scikseWUoZSx0KSx0aGlzfWZ1
bmN0aW9uIFllKGUsdCxuLHIsaSl7cmV0dXJuIGQoZSxXZSh0KSxuLHIsaSl9ZnVuY3Rpb24gSmUo
ZSx0LG4scil7cmV0dXJuIHZlKGUsdCksaChlLCRlKHQpLG4sciksdGhpc31mdW5jdGlvbiBYZShl
KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZSYmITEhPT1lLmlzTWV0aG9kJiZlIT09Qm9vbGVh
biYmZSE9PU9iamVjdCYmZSE9PU51bWJlciYmZSE9PUFycmF5JiZlIT09RGF0ZSYmZSE9PVN0cmlu
Z31mdW5jdGlvbiBaZShlLHQpe3ZhciByPXZvaWQgMAorcmV0dXJuIHQgaW5zdGFuY2VvZiBDbj8o
cj1uLmd1aWRGb3IodCksZS5wZWVrTWl4aW5zKHIpP3huOihlLndyaXRlTWl4aW5zKHIsdCksdC5w
cm9wZXJ0aWVzKSk6dH1mdW5jdGlvbiBldChlLHQsbixyKXt2YXIgaT1uW2VdfHxyW2VdCityZXR1
cm4gdFtlXSYmKGk9aT93bi5jYWxsKGksdFtlXSk6dFtlXSksaX1mdW5jdGlvbiB0dChlLHQscixp
LG8scyl7dmFyIGEsdSxsPXZvaWQgMAorcmV0dXJuIHZvaWQgMD09PWlbdF0mJihsPW9bdF0pLGx8
fChhPXNbdF0sdT1udWxsIT09YSYmIm9iamVjdCI9PXR5cGVvZiBhJiZhLmlzRGVzY3JpcHRvcj9h
OnZvaWQgMCxsPXUpLHZvaWQgMCE9PWwmJmwgaW5zdGFuY2VvZiB3ZT8ocj1PYmplY3QuY3JlYXRl
KHIpLHIuX2dldHRlcj1uLndyYXAoci5fZ2V0dGVyLGwuX2dldHRlciksbC5fc2V0dGVyJiYoci5f
c2V0dGVyP3IuX3NldHRlcj1uLndyYXAoci5fc2V0dGVyLGwuX3NldHRlcik6ci5fc2V0dGVyPWwu
X3NldHRlcikscik6cn1mdW5jdGlvbiBudChlLHQscixpLG8pe3ZhciBzPXZvaWQgMAorcmV0dXJu
IHZvaWQgMD09PW9bdF0mJihzPWlbdF0pLHM9c3x8ZVt0XSx2b2lkIDA9PT1zfHwiZnVuY3Rpb24i
IT10eXBlb2Ygcz9yOm4ud3JhcChyLHMpfWZ1bmN0aW9uIHJ0KGUsdCxyLGkpe3ZhciBvPWlbdF18
fGVbdF0KK3JldHVybiBudWxsPT09b3x8dm9pZCAwPT09bz9uLm1ha2VBcnJheShyKTpFbihvKT9u
dWxsPT09cnx8dm9pZCAwPT09cj9vOnduLmNhbGwobyxyKTp3bi5jYWxsKG4ubWFrZUFycmF5KG8p
LHIpfWZ1bmN0aW9uIGl0KGUsdCxyLGkpe3ZhciBvLHM9aVt0XXx8ZVt0XQoraWYoIXMpcmV0dXJu
IHIKK3ZhciBhPW4uYXNzaWduKHt9LHMpLHU9ITEKK2Zvcih2YXIgbCBpbiByKXIuaGFzT3duUHJv
cGVydHkobCkmJihvPXJbbF0sWGUobyk/KHU9ITAsYVtsXT1udChlLGwsbyxzLHt9KSk6YVtsXT1v
KQorcmV0dXJuIHUmJihhLl9zdXBlcj1uLlJPT1QpLGF9ZnVuY3Rpb24gb3QoZSx0LG4scixpLG8s
cyxhKXtpZihuIGluc3RhbmNlb2YgSSl7aWYobj09PVRuJiZpW3RdKXJldHVybiB4bgorbi5fZ2V0
dGVyJiYobj10dChyLHQsbixvLGksZSkpLGlbdF09bixvW3RdPXZvaWQgMH1lbHNlIHMmJnMuaW5k
ZXhPZih0KT49MHx8ImNvbmNhdGVuYXRlZFByb3BlcnRpZXMiPT09dHx8Im1lcmdlZFByb3BlcnRp
ZXMiPT09dD9uPXJ0KGUsdCxuLG8pOmEmJmEuaW5kZXhPZih0KT49MD9uPWl0KGUsdCxuLG8pOlhl
KG4pJiYobj1udChlLHQsbixvLGkpKSxpW3RdPXZvaWQgMCxvW3RdPW59ZnVuY3Rpb24gc3QoZSx0
LG4scixpLG8pe2Z1bmN0aW9uIHMoZSl7ZGVsZXRlIG5bZV0sZGVsZXRlIHJbZV19dmFyIGEsdT12
b2lkIDAsbD12b2lkIDAsYz12b2lkIDAscD12b2lkIDAsZj12b2lkIDAKK2ZvcihhPTA7YTxlLmxl
bmd0aDthKyspaWYodT1lW2FdLChsPVplKHQsdSkpIT09eG4paWYobCl7aS53aWxsTWVyZ2VNaXhp
biYmaS53aWxsTWVyZ2VNaXhpbihsKSxwPWV0KCJjb25jYXRlbmF0ZWRQcm9wZXJ0aWVzIixsLHIs
aSksZj1ldCgibWVyZ2VkUHJvcGVydGllcyIsbCxyLGkpCitmb3IoYyBpbiBsKWwuaGFzT3duUHJv
cGVydHkoYykmJihvLnB1c2goYyksb3QoaSxjLGxbY10sdCxuLHIscCxmKSkKK2wuaGFzT3duUHJv
cGVydHkoInRvU3RyaW5nIikmJihpLnRvU3RyaW5nPWwudG9TdHJpbmcpfWVsc2UgdS5taXhpbnMm
JihzdCh1Lm1peGlucyx0LG4scixpLG8pLHUuX3dpdGhvdXQmJnUuX3dpdGhvdXQuZm9yRWFjaChz
KSl9ZnVuY3Rpb24gYXQoZSl7dmFyIHQ9ZS5sZW5ndGgKK3JldHVybiB0PjcmJjY2PT09ZS5jaGFy
Q29kZUF0KHQtNykmJi0xIT09ZS5pbmRleE9mKCJpbmRpbmciLHQtNil9ZnVuY3Rpb24gdXQoZSx0
KXt0LmZvckVhY2hCaW5kaW5ncyhmdW5jdGlvbih0LG4pe3ZhciByCituJiYocj10LnNsaWNlKDAs
LTcpLG4gaW5zdGFuY2VvZiBfbj8obj1uLmNvcHkoKSxuLnRvKHIpKTpuPW5ldyBfbihyLG4pLG4u
Y29ubmVjdChlKSxlW3RdPW4pfSksdC5jbGVhckJpbmRpbmdzKCl9ZnVuY3Rpb24gbHQoZSx0KXty
ZXR1cm4gdXQoZSx0fHxpZShlKSksZX1mdW5jdGlvbiBjdChlLHQsbixyKXt2YXIgaT10Lm1ldGhv
ZE5hbWUsbz12b2lkIDAscz12b2lkIDAKK3JldHVybiBuW2ldfHxyW2ldPyhvPXJbaV0sdD1uW2ld
KToocz1lW2ldKSYmbnVsbCE9PXMmJiJvYmplY3QiPT10eXBlb2YgcyYmcy5pc0Rlc2NyaXB0b3I/
KHQ9cyxvPXZvaWQgMCk6KHQ9dm9pZCAwLG89ZVtpXSkse2Rlc2M6dCx2YWx1ZTpvfX1mdW5jdGlv
biBwdChlLHQsbixyLGkpe3ZhciBvLHM9bltyXQoraWYocylmb3Iobz0wO288cy5sZW5ndGg7bysr
KWkoZSxzW29dLG51bGwsdCl9ZnVuY3Rpb24gZnQoZSx0LG4pe3ZhciByPWVbdF0KKyJmdW5jdGlv
biI9PXR5cGVvZiByJiYocHQoZSx0LHIsIl9fZW1iZXJfb2JzZXJ2ZXNCZWZvcmVfXyIsSmUpLHB0
KGUsdCxyLCJfX2VtYmVyX29ic2VydmVzX18iLEtlKSxwdChlLHQsciwiX19lbWJlcl9saXN0ZW5z
X18iLGgpKSwiZnVuY3Rpb24iPT10eXBlb2YgbiYmKHB0KGUsdCxuLCJfX2VtYmVyX29ic2VydmVz
QmVmb3JlX18iLFFlKSxwdChlLHQsbiwiX19lbWJlcl9vYnNlcnZlc19fIixHZSkscHQoZSx0LG4s
Il9fZW1iZXJfbGlzdGVuc19fIixmKSl9ZnVuY3Rpb24gaHQoZSx0LHIpe3ZhciBpLG8scz17fSxh
PXt9LHU9aWUoZSksbD1bXSxjPXZvaWQgMCxwPXZvaWQgMCxmPXZvaWQgMAorZm9yKGUuX3N1cGVy
PW4uUk9PVCxzdCh0LHUscyxhLGUsbCksaT0wO2k8bC5sZW5ndGg7aSsrKWlmKCJjb25zdHJ1Y3Rv
ciIhPT0oYz1sW2ldKSYmYS5oYXNPd25Qcm9wZXJ0eShjKSYmKGY9c1tjXSxwPWFbY10sZiE9PVRu
KSl7Zm9yKDtmJiZmIGluc3RhbmNlb2YgZ3Q7KW89Y3QoZSxmLHMsYSksZj1vLmRlc2MscD1vLnZh
bHVlCit2b2lkIDA9PT1mJiZ2b2lkIDA9PT1wfHwoZnQoZSxjLHApLGF0KGMpJiZ1LndyaXRlQmlu
ZGluZ3MoYyxwKSxNKGUsYyxmLHAsdSkpfXJldHVybiByfHxsdChlLHUpLGV9ZnVuY3Rpb24gZHQo
ZSx0LHIpe3ZhciBpPW4uZ3VpZEZvcihlKQoraWYocltpXSlyZXR1cm4hMQoraWYocltpXT0hMCxl
PT09dClyZXR1cm4hMAorZm9yKHZhciBvPWUubWl4aW5zLHM9bz9vLmxlbmd0aDowOy0tcz49MDsp
aWYoZHQob1tzXSx0LHIpKXJldHVybiEwCityZXR1cm4hMX1mdW5jdGlvbiBtdChlLHQscil7dmFy
IGksbyxzCitpZighcltuLmd1aWRGb3IodCldKWlmKHJbbi5ndWlkRm9yKHQpXT0hMCx0LnByb3Bl
cnRpZXMpZm9yKGk9T2JqZWN0LmtleXModC5wcm9wZXJ0aWVzKSxvPTA7bzxpLmxlbmd0aDtvKysp
cz1pW29dLGVbc109ITAKK2Vsc2UgdC5taXhpbnMmJnQubWl4aW5zLmZvckVhY2goZnVuY3Rpb24o
dCl7cmV0dXJuIG10KGUsdCxyKX0pfWZ1bmN0aW9uIGd0KGUpe3RoaXMuaXNEZXNjcmlwdG9yPSEw
LHRoaXMubWV0aG9kTmFtZT1lfWZ1bmN0aW9uIHl0KCl7Zm9yKGU9YXJndW1lbnRzLmxlbmd0aCx0
PUFycmF5KGUpLG49MDtuPGU7bisrKXRbbl09YXJndW1lbnRzW25dCit2YXIgZSx0LG4saSxvPXQu
c2xpY2UoLTEpWzBdLHM9dm9pZCAwLGE9ZnVuY3Rpb24oZSl7cy5wdXNoKGUpfSx1PXQuc2xpY2Uo
MCwtMSkKK2ZvcigiZnVuY3Rpb24iIT10eXBlb2YgbyYmKG89dFswXSx1PXQuc2xpY2UoMSkpLHM9
W10saT0wO2k8dS5sZW5ndGg7KytpKW1lKHVbaV0sYSkKK2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBv
KXRocm93IG5ldyByLkVtYmVyRXJyb3IoIkVtYmVyLm9ic2VydmVyIGNhbGxlZCB3aXRob3V0IGEg
ZnVuY3Rpb24iKQorcmV0dXJuIG8uX19lbWJlcl9vYnNlcnZlc19fPXMsb31mdW5jdGlvbiB2dChl
LHQpe3RoaXMudHlwZT1lLHRoaXMubmFtZT10LHRoaXMuX3N1cGVyJENvbnN0cnVjdG9yKGJ0KSxr
bi5vbmVXYXkuY2FsbCh0aGlzKX1mdW5jdGlvbiBidChlKXt2YXIgdD10aGlzW2VdLHI9bi5nZXRP
d25lcih0aGlzKXx8dGhpcy5jb250YWluZXIKK3JldHVybiByLmxvb2t1cCh0LnR5cGUrIjoiKyh0
Lm5hbWV8fGUpKX12YXIgX3Qsd3QsRXQ9ImRlZmF1bHQiaW4gcz9zLmRlZmF1bHQ6cworYT0iZGVm
YXVsdCJpbiBhP2EuZGVmYXVsdDphLHU9ImRlZmF1bHQiaW4gdT91LmRlZmF1bHQ6dQordmFyIHh0
PSJvYmplY3QiPT10eXBlb2YgdC5jb250ZXh0LmltcG9ydHMuRW1iZXImJnQuY29udGV4dC5pbXBv
cnRzLkVtYmVyfHx7fQoreHQuaXNOYW1lc3BhY2U9ITAseHQudG9TdHJpbmc9ZnVuY3Rpb24oKXty
ZXR1cm4iRW1iZXIifQordmFyIEN0PTEsT3Q9MixBdD17YWRkVG9MaXN0ZW5lcnM6ZnVuY3Rpb24o
ZSx0LG4scil7dGhpcy5fbGlzdGVuZXJzfHwodGhpcy5fbGlzdGVuZXJzPVtdKSx0aGlzLl9saXN0
ZW5lcnMucHVzaChlLHQsbixyKX0sX2ZpbmFsaXplTGlzdGVuZXJzOmZ1bmN0aW9uKCl7aWYoIXRo
aXMuX2xpc3RlbmVyc0ZpbmFsaXplZCl7dGhpcy5fbGlzdGVuZXJzfHwodGhpcy5fbGlzdGVuZXJz
PVtdKQorZm9yKHZhciBlLHQ9dGhpcy5wYXJlbnQ7dCYmKGU9dC5fbGlzdGVuZXJzLGUmJih0aGlz
Ll9saXN0ZW5lcnM9dGhpcy5fbGlzdGVuZXJzLmNvbmNhdChlKSksIXQuX2xpc3RlbmVyc0ZpbmFs
aXplZCk7KXQ9dC5wYXJlbnQKK3RoaXMuX2xpc3RlbmVyc0ZpbmFsaXplZD0hMH19LHJlbW92ZUZy
b21MaXN0ZW5lcnM6ZnVuY3Rpb24oZSx0LG4scil7Zm9yKHZhciBpLG8scz10aGlzO3M7KXtpZihp
PXMuX2xpc3RlbmVycylmb3Iobz1pLmxlbmd0aC00O28+PTA7by09NClpZihpW29dPT09ZSYmKCFu
fHxpW28rMV09PT10JiZpW28rMl09PT1uKSl7aWYocyE9PXRoaXMpcmV0dXJuIHRoaXMuX2ZpbmFs
aXplTGlzdGVuZXJzKCksdGhpcy5yZW1vdmVGcm9tTGlzdGVuZXJzKGUsdCxuKQorImZ1bmN0aW9u
Ij09dHlwZW9mIHImJnIoZSx0LGlbbysyXSksaS5zcGxpY2Uobyw0KX1pZihzLl9saXN0ZW5lcnNG
aW5hbGl6ZWQpYnJlYWsKK3M9cy5wYXJlbnR9fSxtYXRjaGluZ0xpc3RlbmVyczpmdW5jdGlvbihl
KXtmb3IodmFyIHQsbixyLGksbz10aGlzLHM9dm9pZCAwO3ZvaWQgMCE9PW87KXtpZih2b2lkIDAh
PT0odD1vLl9saXN0ZW5lcnMpKWZvcihuPTA7bjx0Lmxlbmd0aC0zO24rPTQpdFtuXT09PWUmJihz
PXN8fFtdLGwocyx0LG4pKQoraWYoITA9PT1vLl9saXN0ZW5lcnNGaW5hbGl6ZWQpYnJlYWsKK289
by5wYXJlbnR9dmFyIGE9dGhpcy5fc3VzcGVuZGVkTGlzdGVuZXJzCitpZih2b2lkIDAhPT1hJiZ2
b2lkIDAhPT1zKWZvcihyPTA7cjxhLmxlbmd0aC0yO3IrPTMpaWYoZT09PWFbcl0pZm9yKGk9MDtp
PHMubGVuZ3RoLTI7aSs9MylzW2ldPT09YVtyKzFdJiZzW2krMV09PT1hW3IrMl0mJihzW2krMl18
PU90KQorcmV0dXJuIHN9LHN1c3BlbmRMaXN0ZW5lcnM6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGks
byxzPXRoaXMuX3N1c3BlbmRlZExpc3RlbmVycworZm9yKHN8fChzPXRoaXMuX3N1c3BlbmRlZExp
c3RlbmVycz1bXSksaT0wO2k8ZS5sZW5ndGg7aSsrKXMucHVzaChlW2ldLHQsbikKK3RyeXtyZXR1
cm4gci5jYWxsKHQpfWZpbmFsbHl7aWYocy5sZW5ndGg9PT1lLmxlbmd0aCl0aGlzLl9zdXNwZW5k
ZWRMaXN0ZW5lcnM9dm9pZCAwCitlbHNlIGZvcihvPXMubGVuZ3RoLTM7bz49MDtvLT0zKXNbbysx
XT09PXQmJnNbbysyXT09PW4mJi0xIT09ZS5pbmRleE9mKHNbb10pJiZzLnNwbGljZShvLDMpfX0s
d2F0Y2hlZEV2ZW50czpmdW5jdGlvbigpe2Zvcih2YXIgZSx0LG49dGhpcyxyPXt9O247KXtpZihl
PW4uX2xpc3RlbmVycylmb3IodD0wO3Q8ZS5sZW5ndGgtMzt0Kz00KXJbZVt0XV09ITAKK2lmKG4u
X2xpc3RlbmVyc0ZpbmFsaXplZClicmVhaworbj1uLnBhcmVudH1yZXR1cm4gT2JqZWN0LmtleXMo
cil9LF9pbml0aWFsaXplTGlzdGVuZXJzOmZ1bmN0aW9uKCl7dGhpcy5fbGlzdGVuZXJzPXZvaWQg
MCx0aGlzLl9saXN0ZW5lcnNGaW5hbGl6ZWQ9dm9pZCAwLHRoaXMuX3N1c3BlbmRlZExpc3RlbmVy
cz12b2lkIDB9fSxUdD1mdW5jdGlvbigpe3JldHVybiExfSxTdD12b2lkIDAsUnQ9ZnVuY3Rpb24o
KXtmdW5jdGlvbiBlKCl7dGhpcy5jbGVhcigpfXJldHVybiBlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rp
b24oZSx0LHIpe3ZhciBpPXRoaXMub2JzZXJ2ZXJTZXQsbz10aGlzLm9ic2VydmVycyxzPW4uZ3Vp
ZEZvcihlKSxhPWlbc10sdT12b2lkIDAKK3JldHVybiBhfHwoaVtzXT1hPXt9KSx1PWFbdF0sdm9p
ZCAwPT09dSYmKHU9by5wdXNoKHtzZW5kZXI6ZSxrZXlOYW1lOnQsZXZlbnROYW1lOnIsbGlzdGVu
ZXJzOltdfSktMSxhW3RdPXUpLG9bdV0ubGlzdGVuZXJzfSxlLnByb3RvdHlwZS5mbHVzaD1mdW5j
dGlvbigpe3ZhciBlPXRoaXMub2JzZXJ2ZXJzLHQ9dm9pZCAwLG49dm9pZCAwLHI9dm9pZCAwCitm
b3IodGhpcy5jbGVhcigpLHQ9MDt0PGUubGVuZ3RoOysrdCluPWVbdF0scj1uLnNlbmRlcixyLmlz
RGVzdHJveWluZ3x8ci5pc0Rlc3Ryb3llZHx8ZyhyLG4uZXZlbnROYW1lLFtyLG4ua2V5TmFtZV0s
bi5saXN0ZW5lcnMpfSxlLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMub2JzZXJ2ZXJT
ZXQ9e30sdGhpcy5vYnNlcnZlcnM9W119LGV9KCkKK2UucnVuSW5UcmFuc2FjdGlvbj12b2lkIDAs
ZS5ydW5JblRyYW5zYWN0aW9uPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdF0oKSwhMX0KK3ZhciBr
dD1uLnN5bWJvbCgiUFJPUEVSVFlfRElEX0NIQU5HRSIpLE50PW5ldyBSdCxQdD1uZXcgUnQsanQ9
MCxEdD12b2lkIDAsTHQ9dm9pZCAwOyhmdW5jdGlvbigpe3ZhciBlPU9iamVjdC5jcmVhdGUoT2Jq
ZWN0LnByb3RvdHlwZSx7cHJvcDp7Y29uZmlndXJhYmxlOiEwLHZhbHVlOjF9fSkKK09iamVjdC5k
ZWZpbmVQcm9wZXJ0eShlLCJwcm9wIix7Y29uZmlndXJhYmxlOiEwLHZhbHVlOjJ9KSxlLnByb3B9
KSgpCit2YXIgSXQ9ITEsTXQ9L14oW15cLl0rKS8sRnQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7
dGhpcy5jaGFpbnM9T2JqZWN0LmNyZWF0ZShudWxsKX1yZXR1cm4gZS5wcm90b3R5cGUuYWRkPWZ1
bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5jaGFpbnNbZV0KK3ZvaWQgMD09PW4/dGhpcy5jaGFpbnNb
ZV09W3RdOm4ucHVzaCh0KX0sZS5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKGUsdCl7dmFyIG4s
cj10aGlzLmNoYWluc1tlXQoraWYocilmb3Iobj0wO248ci5sZW5ndGg7bisrKWlmKHJbbl09PT10
KXtyLnNwbGljZShuLDEpCiticmVha319LGUucHJvdG90eXBlLmhhcz1mdW5jdGlvbihlLHQpe3Zh
ciBuLHI9dGhpcy5jaGFpbnNbZV0KK2lmKHIpZm9yKG49MDtuPHIubGVuZ3RoO24rKylpZihyW25d
PT09dClyZXR1cm4hMAorcmV0dXJuITF9LGUucHJvdG90eXBlLnJldmFsaWRhdGVBbGw9ZnVuY3Rp
b24oKXtmb3IodmFyIGUgaW4gdGhpcy5jaGFpbnMpdGhpcy5ub3RpZnkoZSwhMCx2b2lkIDApfSxl
LnByb3RvdHlwZS5yZXZhbGlkYXRlPWZ1bmN0aW9uKGUpe3RoaXMubm90aWZ5KGUsITAsdm9pZCAw
KX0sZS5wcm90b3R5cGUubm90aWZ5PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8scyxhPXRoaXMu
Y2hhaW5zW2VdCitpZih2b2lkIDAhPT1hJiYwIT09YS5sZW5ndGgpe3ZhciB1PXZvaWQgMAorZm9y
KG4mJih1PVtdKSxyPTA7cjxhLmxlbmd0aDtyKyspYVtyXS5ub3RpZnkodCx1KQoraWYodm9pZCAw
IT09bilmb3IoaT0wO2k8dS5sZW5ndGg7aSs9MilvPXVbaV0scz11W2krMV0sbihvLHMpfX0sZX0o
KSx6dD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG4pe3RoaXMuX3BhcmVudD1lLHRoaXMuX2tl
eT10Cit2YXIgcixpPXRoaXMuX3dhdGNoaW5nPXZvaWQgMD09PW4KK2lmKHRoaXMuX2NoYWlucz12
b2lkIDAsdGhpcy5fb2JqZWN0PXZvaWQgMCx0aGlzLmNvdW50PTAsdGhpcy5fdmFsdWU9bix0aGlz
Ll9wYXRocz12b2lkIDAsITA9PT1pKXtpZihyPWUudmFsdWUoKSwhMD09ISQocikpcmV0dXJuCit0
aGlzLl9vYmplY3Q9cixRKHRoaXMuX29iamVjdCx0aGlzLl9rZXksdGhpcyl9fXJldHVybiBlLnBy
b3RvdHlwZS52YWx1ZT1mdW5jdGlvbigpe3ZhciBlCityZXR1cm4gdm9pZCAwPT09dGhpcy5fdmFs
dWUmJiEwPT09dGhpcy5fd2F0Y2hpbmcmJihlPXRoaXMuX3BhcmVudC52YWx1ZSgpLHRoaXMuX3Zh
bHVlPUooZSx0aGlzLl9rZXkpKSx0aGlzLl92YWx1ZX0sZS5wcm90b3R5cGUuZGVzdHJveT1mdW5j
dGlvbigpe3ZhciBlCishMD09PXRoaXMuX3dhdGNoaW5nJiYoZT10aGlzLl9vYmplY3QsZSYmWShl
LHRoaXMuX2tleSx0aGlzKSx0aGlzLl93YXRjaGluZz0hMSl9LGUucHJvdG90eXBlLmNvcHk9ZnVu
Y3Rpb24odCl7dmFyIG49bmV3IGUobnVsbCxudWxsLHQpLHI9dGhpcy5fcGF0aHMsaT12b2lkIDAK
K2lmKHZvaWQgMCE9PXIpZm9yKGkgaW4gcilyW2ldPD0wfHxuLmFkZChpKQorcmV0dXJuIG59LGUu
cHJvdG90eXBlLmFkZD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9wYXRoc3x8KHRoaXMuX3BhdGhz
PXt9KQordFtlXT0odFtlXXx8MCkrMQordmFyIG49VyhlKSxyPWUuc2xpY2Uobi5sZW5ndGgrMSkK
K3RoaXMuY2hhaW4obixyKX0sZS5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKGUpe3ZhciB0PXRo
aXMuX3BhdGhzCitpZih2b2lkIDAhPT10KXt0W2VdPjAmJnRbZV0tLQordmFyIG49VyhlKSxyPWUu
c2xpY2Uobi5sZW5ndGgrMSkKK3RoaXMudW5jaGFpbihuLHIpfX0sZS5wcm90b3R5cGUuY2hhaW49
ZnVuY3Rpb24odCxuKXt2YXIgcj10aGlzLl9jaGFpbnMsaT12b2lkIDAKK3ZvaWQgMD09PXI/cj10
aGlzLl9jaGFpbnM9T2JqZWN0LmNyZWF0ZShudWxsKTppPXJbdF0sdm9pZCAwPT09aSYmKGk9clt0
XT1uZXcgZSh0aGlzLHQsdm9pZCAwKSksaS5jb3VudCsrLG4mJih0PVcobiksbj1uLnNsaWNlKHQu
bGVuZ3RoKzEpLGkuY2hhaW4odCxuKSl9LGUucHJvdG90eXBlLnVuY2hhaW49ZnVuY3Rpb24oZSx0
KXt2YXIgbixyLGk9dGhpcy5fY2hhaW5zLG89aVtlXQordCYmdC5sZW5ndGg+MSYmKG49Vyh0KSxy
PXQuc2xpY2Uobi5sZW5ndGgrMSksby51bmNoYWluKG4scikpLC0tby5jb3VudDw9MCYmKGlbby5f
a2V5XT12b2lkIDAsby5kZXN0cm95KCkpfSxlLnByb3RvdHlwZS5ub3RpZnk9ZnVuY3Rpb24oZSx0
KXtlJiYhMD09PXRoaXMuX3dhdGNoaW5nJiYobj10aGlzLl9wYXJlbnQudmFsdWUoKSxuIT09dGhp
cy5fb2JqZWN0JiYodm9pZCAwIT09dGhpcy5fb2JqZWN0JiZZKHRoaXMuX29iamVjdCx0aGlzLl9r
ZXksdGhpcyksJChuKT8odGhpcy5fb2JqZWN0PW4sUShuLHRoaXMuX2tleSx0aGlzKSk6dGhpcy5f
b2JqZWN0PXZvaWQgMCksdGhpcy5fdmFsdWU9dm9pZCAwKQordmFyIG4scj10aGlzLl9jaGFpbnMs
aT12b2lkIDAKK2lmKHZvaWQgMCE9PXIpZm9yKHZhciBvIGluIHIpdm9pZCAwIT09KGk9cltvXSkm
Jmkubm90aWZ5KGUsdCkKK3QmJnRoaXMuX3BhcmVudCYmdGhpcy5fcGFyZW50LnBvcHVsYXRlQWZm
ZWN0ZWQodGhpcy5fa2V5LDEsdCl9LGUucHJvdG90eXBlLnBvcHVsYXRlQWZmZWN0ZWQ9ZnVuY3Rp
b24oZSx0LG4pe3RoaXMuX2tleSYmKGU9dGhpcy5fa2V5KyIuIitlKSx0aGlzLl9wYXJlbnQ/dGhp
cy5fcGFyZW50LnBvcHVsYXRlQWZmZWN0ZWQoZSx0KzEsbik6dD4xJiZuLnB1c2godGhpcy52YWx1
ZSgpLGUpfSxlfSgpLFV0PXtjYWNoZTpYLHdlYWs6WCx3YXRjaGluZzpaLG1peGluczpaLGJpbmRp
bmdzOlosdmFsdWVzOlosY2hhaW5XYXRjaGVyczplZSxjaGFpbnM6ZnVuY3Rpb24oZSx0KXt2YXIg
bj10ZShlKSxyPW5lKGUpCit0LnByb3RvdHlwZVsid3JpdGFibGUiK3JdPWZ1bmN0aW9uKGUpe3Zh
ciB0PXRoaXNbbl0KK3JldHVybiB2b2lkIDA9PT10JiYodD10aGlzLnBhcmVudD90aGlzW25dPXRo
aXMucGFyZW50WyJ3cml0YWJsZSIrcl0oZSkuY29weSh0aGlzLnNvdXJjZSk6dGhpc1tuXT1lKHRo
aXMuc291cmNlKSksdH0sdC5wcm90b3R5cGVbInJlYWRhYmxlIityXT1mdW5jdGlvbigpe3JldHVy
biB0aGlzLl9nZXRJbmhlcml0ZWQobil9fSx0YWc6ZWUsdGFnczpYfSxCdD1PYmplY3Qua2V5cyhV
dCkscXQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUsdCl7dGhpcy5fY2FjaGU9dm9pZCAwLHRoaXMu
X3dlYWs9dm9pZCAwLHRoaXMuX3dhdGNoaW5nPXZvaWQgMCx0aGlzLl9taXhpbnM9dm9pZCAwLHRo
aXMuX2JpbmRpbmdzPXZvaWQgMCx0aGlzLl92YWx1ZXM9dm9pZCAwLHRoaXMuX2RlcHM9dm9pZCAw
LHRoaXMuX2NoYWluV2F0Y2hlcnM9dm9pZCAwLHRoaXMuX2NoYWlucz12b2lkIDAsdGhpcy5fdGFn
PXZvaWQgMCx0aGlzLl90YWdzPXZvaWQgMCx0aGlzLl9mYWN0b3J5PXZvaWQgMCx0aGlzLl9mbGFn
cz0wLHRoaXMuc291cmNlPWUsdGhpcy5wcm90bz12b2lkIDAsdGhpcy5wYXJlbnQ9dCx0aGlzLl9p
bml0aWFsaXplTGlzdGVuZXJzKCl9cmV0dXJuIHQucHJvdG90eXBlLmlzSW5pdGlhbGl6ZWQ9ZnVu
Y3Rpb24oZSl7cmV0dXJuIHRoaXMucHJvdG8hPT1lfSx0LnByb3RvdHlwZS5zZXRUYWc9ZnVuY3Rp
b24oZSl7dGhpcy5fdGFnPWV9LHQucHJvdG90eXBlLmdldFRhZz1mdW5jdGlvbigpe3JldHVybiB0
aGlzLl90YWd9LHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtpZighdGhpcy5pc01ldGFE
ZXN0cm95ZWQoKSl7dmFyIHQsbj12b2lkIDAscj12b2lkIDAsaT12b2lkIDAsbz10aGlzLnJlYWRh
YmxlQ2hhaW5zKCkKK2lmKG8pZm9yKEh0LnB1c2gobyk7SHQubGVuZ3RoPjA7KXtpZihvPUh0LnBv
cCgpLG49by5fY2hhaW5zKWZvcihyIGluIG4pdm9pZCAwIT09bltyXSYmSHQucHVzaChuW3JdKQor
by5fd2F0Y2hpbmcmJihpPW8uX29iamVjdCkmJih0PWUucGVla01ldGEoaSkpJiYhdC5pc1NvdXJj
ZURlc3Ryb3lpbmcoKSYmWShpLG8uX2tleSxvLHQpfXRoaXMuc2V0TWV0YURlc3Ryb3llZCgpfX0s
dC5wcm90b3R5cGUuaXNTb3VyY2VEZXN0cm95aW5nPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPSgyJnRo
aXMuX2ZsYWdzKX0sdC5wcm90b3R5cGUuc2V0U291cmNlRGVzdHJveWluZz1mdW5jdGlvbigpe3Ro
aXMuX2ZsYWdzfD0yfSx0LnByb3RvdHlwZS5pc1NvdXJjZURlc3Ryb3llZD1mdW5jdGlvbigpe3Jl
dHVybiAwIT0oNCZ0aGlzLl9mbGFncyl9LHQucHJvdG90eXBlLnNldFNvdXJjZURlc3Ryb3llZD1m
dW5jdGlvbigpe3RoaXMuX2ZsYWdzfD00fSx0LnByb3RvdHlwZS5pc01ldGFEZXN0cm95ZWQ9ZnVu
Y3Rpb24oKXtyZXR1cm4gMCE9KDgmdGhpcy5fZmxhZ3MpfSx0LnByb3RvdHlwZS5zZXRNZXRhRGVz
dHJveWVkPWZ1bmN0aW9uKCl7dGhpcy5fZmxhZ3N8PTh9LHQucHJvdG90eXBlLmlzUHJveHk9ZnVu
Y3Rpb24oKXtyZXR1cm4gMCE9KDE2JnRoaXMuX2ZsYWdzKX0sdC5wcm90b3R5cGUuc2V0UHJveHk9
ZnVuY3Rpb24oKXt0aGlzLl9mbGFnc3w9MTZ9LHQucHJvdG90eXBlLl9nZXRPckNyZWF0ZU93bk1h
cD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpc1tlXXx8KHRoaXNbZV09T2JqZWN0LmNyZWF0ZShudWxs
KSl9LHQucHJvdG90eXBlLl9nZXRJbmhlcml0ZWQ9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG49dGhp
czt2b2lkIDAhPT1uOyl7aWYodm9pZCAwIT09KHQ9bltlXSkpcmV0dXJuIHQKK249bi5wYXJlbnR9
fSx0LnByb3RvdHlwZS5fZmluZEluaGVyaXRlZD1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbixyLGk9
dGhpczt2b2lkIDAhPT1pOyl7aWYodm9pZCAwIT09KG49aVtlXSkmJnZvaWQgMCE9PShyPW5bdF0p
KXJldHVybiByCitpPWkucGFyZW50fX0sdC5wcm90b3R5cGUud3JpdGVEZXBzPWZ1bmN0aW9uKGUs
dCxuKXt2YXIgcj10aGlzLl9nZXRPckNyZWF0ZU93bk1hcCgiX2RlcHMiKSxpPXJbZV0KK3ZvaWQg
MD09PWkmJihpPXJbZV09T2JqZWN0LmNyZWF0ZShudWxsKSksaVt0XT1ufSx0LnByb3RvdHlwZS5w
ZWVrRGVwcz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbixyLGksbz10aGlzO3ZvaWQgMCE9PW87KXtp
Zih2b2lkIDAhPT0obj1vLl9kZXBzKSYmdm9pZCAwIT09KHI9bltlXSkmJnZvaWQgMCE9PShpPXJb
dF0pKXJldHVybiBpCitvPW8ucGFyZW50fX0sdC5wcm90b3R5cGUuaGFzRGVwcz1mdW5jdGlvbihl
KXtmb3IodmFyIHQsbj10aGlzO3ZvaWQgMCE9PW47KXtpZih2b2lkIDAhPT0odD1uLl9kZXBzKSYm
dm9pZCAwIT09dFtlXSlyZXR1cm4hMAorbj1uLnBhcmVudH1yZXR1cm4hMX0sdC5wcm90b3R5cGUu
Zm9yRWFjaEluRGVwcz1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLl9mb3JFYWNoSW4oIl9kZXBz
IixlLHQpfSx0LnByb3RvdHlwZS5fZm9yRWFjaEluPWZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHIs
aSxvLHMsYSx1LGw9dGhpcyxjPXZvaWQgMCxwPXZvaWQgMDt2b2lkIDAhPT1sOyl7aWYodm9pZCAw
IT09KHI9bFtlXSkmJnZvaWQgMCE9PShpPXJbdF0pKWZvcih2YXIgZiBpbiBpKWM9Y3x8T2JqZWN0
LmNyZWF0ZShudWxsKSx2b2lkIDA9PT1jW2ZdJiYoY1tmXT0hMCxwPXB8fFtdLHAucHVzaChbZixp
W2ZdXSkpCitsPWwucGFyZW50fWlmKHZvaWQgMCE9PXApZm9yKG89MDtvPHAubGVuZ3RoO28rKylz
PXBbb10sYT1zWzBdLHU9c1sxXSxuKGEsdSl9LHQucHJvdG90eXBlLnJlYWRJbmhlcml0ZWRWYWx1
ZT1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbixyLGk9dGhpczt2b2lkIDAhPT1pOyl7aWYodm9pZCAw
IT09KG49aVsiXyIrZV0pJiYodm9pZCAwIT09KHI9blt0XSl8fHQgaW4gbikpcmV0dXJuIHIKK2k9
aS5wYXJlbnR9cmV0dXJuIFd0fSx0LnByb3RvdHlwZS53cml0ZVZhbHVlPWZ1bmN0aW9uKGUsdCxy
KXt2YXIgaT1uLmxvb2t1cERlc2NyaXB0b3IoZSx0KQordm9pZCAwIT09aSYmaS5zZXQmJmkuc2V0
LmlzTWFuZGF0b3J5U2V0dGVyP3RoaXMud3JpdGVWYWx1ZXModCxyKTplW3RdPXJ9LGkuY3JlYXRl
Q2xhc3ModCxbe2tleToiZmFjdG9yeSIsc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX2ZhY3Rvcnk9ZX0s
Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZhY3Rvcnl9fV0pLHR9KCksSHQ9W10KK2Zvcih2
YXIgVnQgaW4gQXQpcXQucHJvdG90eXBlW1Z0XT1BdFtWdF0KK0J0LmZvckVhY2goZnVuY3Rpb24o
ZSl7cmV0dXJuIFV0W2VdKGUscXQpfSkKK3ZhciBXdD1uLnN5bWJvbCgidW5kZWZpbmVkIiksJHQ9
e3dyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHZhbHVlOm51bGx9LEd0
PXtuYW1lOiJfX2VtYmVyX21ldGFfXyIsZGVzY3JpcHRvcjokdH0sS3Q9dm9pZCAwCitlLnBlZWtN
ZXRhPXZvaWQgMCxuLkhBU19OQVRJVkVfV0VBS01BUD8oX3Q9T2JqZWN0LmdldFByb3RvdHlwZU9m
LHd0PW5ldyBXZWFrTWFwLEt0PWZ1bmN0aW9uKGUsdCl7d3Quc2V0KGUsdCl9LGUucGVla01ldGE9
ZnVuY3Rpb24oZSl7cmV0dXJuIHd0LmdldChlKX0sZS5wZWVrTWV0YT1mdW5jdGlvbihlKXtmb3Io
dmFyIHQ9ZSxuPXZvaWQgMDt2b2lkIDAhPT10JiZudWxsIT09dDspe2lmKHZvaWQgMCE9PShuPXd0
LmdldCh0KSkpcmV0dXJuIG4KK3Q9X3QodCl9fSk6KEt0PWZ1bmN0aW9uKGUsdCl7ZS5fX2RlZmlu
ZU5vbkVudW1lcmFibGU/ZS5fX2RlZmluZU5vbkVudW1lcmFibGUoR3QpOk9iamVjdC5kZWZpbmVQ
cm9wZXJ0eShlLCJfX2VtYmVyX21ldGFfXyIsJHQpLGUuX19lbWJlcl9tZXRhX189dH0sZS5wZWVr
TWV0YT1mdW5jdGlvbihlKXtyZXR1cm4gZS5fX2VtYmVyX21ldGFfX30pCit2YXIgUXQ9ZnVuY3Rp
b24oKXtmdW5jdGlvbiBlKGUsdCxuLHIpe3RoaXMuc2l6ZT0wLHRoaXMubWlzc2VzPTAsdGhpcy5o
aXRzPTAsdGhpcy5saW1pdD1lLHRoaXMuZnVuYz10LHRoaXMua2V5PW4sdGhpcy5zdG9yZT1yfHxu
ZXcgWXR9cmV0dXJuIGUucHJvdG90eXBlLmdldD1mdW5jdGlvbihlKXt2YXIgdD12b2lkIDA9PT10
aGlzLmtleT9lOnRoaXMua2V5KGUpLG49dGhpcy5zdG9yZS5nZXQodCkKK3JldHVybiB2b2lkIDA9
PT1uPyh0aGlzLm1pc3NlcysrLG49dGhpcy5fc2V0KHQsdGhpcy5mdW5jKGUpKSk6bj09PVd0Pyh0
aGlzLmhpdHMrKyxuPXZvaWQgMCk6dGhpcy5oaXRzKyssbn0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0
aW9uKGUsdCl7dmFyIG49dm9pZCAwPT09dGhpcy5rZXk/ZTp0aGlzLmtleShlKQorcmV0dXJuIHRo
aXMuX3NldChuLHQpfSxlLnByb3RvdHlwZS5fc2V0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMu
bGltaXQ+dGhpcy5zaXplJiYodGhpcy5zaXplKyssdm9pZCAwPT09dD90aGlzLnN0b3JlLnNldChl
LFd0KTp0aGlzLnN0b3JlLnNldChlLHQpKSx0fSxlLnByb3RvdHlwZS5wdXJnZT1mdW5jdGlvbigp
e3RoaXMuc3RvcmUuY2xlYXIoKSx0aGlzLnNpemU9MCx0aGlzLmhpdHM9MCx0aGlzLm1pc3Nlcz0w
fSxlfSgpLFl0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMuZGF0YT1PYmplY3QuY3JlYXRl
KG51bGwpfXJldHVybiBlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZGF0
YVtlXX0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGUsdCl7dGhpcy5kYXRhW2VdPXR9LGUucHJv
dG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5kYXRhPU9iamVjdC5jcmVhdGUobnVsbCl9LGV9
KCksSnQ9L15bQS1aJF0vLFh0PS9eW0EtWiRdLipbXC5dLworbmV3IFF0KDFlMyxmdW5jdGlvbihl
KXtyZXR1cm4gSnQudGVzdChlKX0pCit2YXIgWnQ9bmV3IFF0KDFlMyxmdW5jdGlvbihlKXtyZXR1
cm4gWHQudGVzdChlKX0pLGVuPShuZXcgUXQoMWUzLGZ1bmN0aW9uKGUpe3JldHVybiAwPT09ZS5s
YXN0SW5kZXhPZigidGhpcy4iLDApfSksbmV3IFF0KDFlMyxmdW5jdGlvbihlKXtyZXR1cm4gZS5p
bmRleE9mKCIuIil9KSksdG49bmV3IFF0KDFlMyxmdW5jdGlvbihlKXt2YXIgdD1lbi5nZXQoZSkK
K3JldHVybi0xPT09dD9lOmUuc2xpY2UoMCx0KX0pLG5uPW5ldyBRdCgxZTMsZnVuY3Rpb24oZSl7
dmFyIHQ9ZW4uZ2V0KGUpCitpZigtMSE9PXQpcmV0dXJuIGUuc2xpY2UodCsxKX0pLHJuPXtvYmpl
Y3Q6ITAsZnVuY3Rpb246ITAsc3RyaW5nOiEwfSxvbj0vXC5AZWFjaCQvCit3ZS5wcm90b3R5cGU9
bmV3IEksd2UucHJvdG90eXBlLmNvbnN0cnVjdG9yPXdlCit2YXIgc249d2UucHJvdG90eXBlCitz
bi52b2xhdGlsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl92b2xhdGlsZT0hMCx0aGlzfSxzbi5y
ZWFkT25seT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkT25seT0hMCx0aGlzfSxzbi5wcm9w
ZXJ0eT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7bi5wdXNoKGUpfXZhciB0LG49W10KK2Zvcih0
PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyltZShhcmd1bWVudHNbdF0sZSkKK3JldHVybiB0aGlz
Ll9kZXBlbmRlbnRLZXlzPW4sdGhpc30sc24ubWV0YT1mdW5jdGlvbihlKXtyZXR1cm4gMD09PWFy
Z3VtZW50cy5sZW5ndGg/dGhpcy5fbWV0YXx8e306KHRoaXMuX21ldGE9ZSx0aGlzKX0sc24uZGlk
Q2hhbmdlPWZ1bmN0aW9uKHQsbil7aWYoIXRoaXMuX3ZvbGF0aWxlJiZ0aGlzLl9zdXNwZW5kZWQh
PT10KXt2YXIgcj1lLnBlZWtNZXRhKHQpCitpZihyJiZyLnNvdXJjZT09PXQpe3ZhciBpPXIucmVh
ZGFibGVDYWNoZSgpCitpJiZ2b2lkIDAhPT1pW25dJiYoaVtuXT12b2lkIDAsX2UodGhpcyx0LG4s
cikpfX19LHNuLmdldD1mdW5jdGlvbihlLHQpe2lmKHRoaXMuX3ZvbGF0aWxlKXJldHVybiB0aGlz
Ll9nZXR0ZXIuY2FsbChlLHQpCit2YXIgbj1pZShlKSxyPW4ud3JpdGFibGVDYWNoZSgpLGk9clt0
XQoraWYoaSE9PVd0KXtpZih2b2lkIDAhPT1pKXJldHVybiBpCit2YXIgbz10aGlzLl9nZXR0ZXIu
Y2FsbChlLHQpCityW3RdPXZvaWQgMD09PW8/V3Q6bwordmFyIHM9bi5yZWFkYWJsZUNoYWluV2F0
Y2hlcnMoKQorcmV0dXJuIHMmJnMucmV2YWxpZGF0ZSh0KSxiZSh0aGlzLGUsdCxuKSxvfX0sc24u
c2V0PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdGhpcy5fcmVhZE9ubHkmJnRoaXMuX3Rocm93UmVh
ZE9ubHlFcnJvcihlLHQpLHRoaXMuX3NldHRlcj90aGlzLl92b2xhdGlsZT90aGlzLnZvbGF0aWxl
U2V0KGUsdCxuKTp0aGlzLnNldFdpdGhTdXNwZW5kKGUsdCxuKTp0aGlzLmNsb2JiZXJTZXQoZSx0
LG4pfSxzbi5fdGhyb3dSZWFkT25seUVycm9yPWZ1bmN0aW9uKGUsdCl7dGhyb3cgbmV3IHIuRXJy
b3IoJ0Nhbm5vdCBzZXQgcmVhZC1vbmx5IHByb3BlcnR5ICInK3QrJyIgb24gb2JqZWN0OiAnK24u
aW5zcGVjdChlKSl9LHNuLmNsb2JiZXJTZXQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBNKGUsdCxu
dWxsLEVlKGUsdCkpLGZlKGUsdCxuKSxufSxzbi52b2xhdGlsZVNldD1mdW5jdGlvbihlLHQsbil7
cmV0dXJuIHRoaXMuX3NldHRlci5jYWxsKGUsdCxuKX0sc24uc2V0V2l0aFN1c3BlbmQ9ZnVuY3Rp
b24oZSx0LG4pe3ZhciByPXRoaXMuX3N1c3BlbmRlZAordGhpcy5fc3VzcGVuZGVkPWUKK3RyeXty
ZXR1cm4gdGhpcy5fc2V0KGUsdCxuKX1maW5hbGx5e3RoaXMuX3N1c3BlbmRlZD1yfX0sc24uX3Nl
dD1mdW5jdGlvbihlLHQsbil7dmFyIHI9aWUoZSksaT1yLndyaXRhYmxlQ2FjaGUoKSxvPSExLHM9
dm9pZCAwCit2b2lkIDAhPT1pW3RdJiYoaVt0XSE9PVd0JiYocz1pW3RdKSxvPSEwKQordmFyIGE9
dGhpcy5fc2V0dGVyLmNhbGwoZSx0LG4scykKK3JldHVybiBvJiZzPT09YT9hOih4KGUsdCxyKSxv
JiYoaVt0XT12b2lkIDApLG98fGJlKHRoaXMsZSx0LHIpLGlbdF09dm9pZCAwPT09YT9XdDphLEMo
ZSx0LHIpLGEpfSxzbi50ZWFyZG93bj1mdW5jdGlvbihlLHQpe2lmKCF0aGlzLl92b2xhdGlsZSl7
dmFyIG49aWUoZSkscj1uLnJlYWRhYmxlQ2FjaGUoKQorciYmdm9pZCAwIT09clt0XSYmKF9lKHRo
aXMsZSx0LG4pLHJbdF09dm9pZCAwKX19LEVlLnNldD1mdW5jdGlvbihlLHQsbil7ZVt0XT12b2lk
IDA9PT1uP1d0Om59LEVlLmdldD1mdW5jdGlvbihlLHQpe3ZhciBuPWVbdF0KK2lmKG4hPT1XdCly
ZXR1cm4gbn0sRWUucmVtb3ZlPWZ1bmN0aW9uKGUsdCl7ZVt0XT12b2lkIDB9Cit2YXIgYW49e30s
dW49ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCh0KXt2YXIgbj1pLnBvc3NpYmxlQ29uc3RydWN0b3JS
ZXR1cm4odGhpcyxlLmNhbGwodGhpcykpCityZXR1cm4gbi5pc0Rlc2NyaXB0b3I9ITAsbi5hbHRL
ZXk9dCxuLl9kZXBlbmRlbnRLZXlzPVt0XSxufXJldHVybiBpLmluaGVyaXRzKHQsZSksdC5wcm90
b3R5cGUuc2V0dXA9ZnVuY3Rpb24oZSx0KXt2YXIgbj1pZShlKQorbi5wZWVrV2F0Y2hpbmcodCkm
JmJlKHRoaXMsZSx0LG4pfSx0LnByb3RvdHlwZS50ZWFyZG93bj1mdW5jdGlvbihlLHQpe3ZhciBu
PWllKGUpCituLnBlZWtXYXRjaGluZyh0KSYmX2UodGhpcyxlLHQsbil9LHQucHJvdG90eXBlLndp
bGxXYXRjaD1mdW5jdGlvbihlLHQpe2JlKHRoaXMsZSx0LGllKGUpKX0sdC5wcm90b3R5cGUuZGlk
VW53YXRjaD1mdW5jdGlvbihlLHQpe19lKHRoaXMsZSx0LGllKGUpKX0sdC5wcm90b3R5cGUuZ2V0
PWZ1bmN0aW9uKGUsdCl7dmFyIG49bGUoZSx0aGlzLmFsdEtleSkscj1pZShlKSxpPXIud3JpdGFi
bGVDYWNoZSgpCityZXR1cm4gaVt0XSE9PWFuJiYoaVt0XT1hbixiZSh0aGlzLGUsdCxyKSksbn0s
dC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZmUoZSx0aGlzLmFsdEtleSxu
KX0sdC5wcm90b3R5cGUucmVhZE9ubHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXQ9eGUsdGhp
c30sdC5wcm90b3R5cGUub25lV2F5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0PUNlLHRoaXN9
LHR9KEkpCit1bi5wcm90b3R5cGUuX21ldGE9dm9pZCAwLHVuLnByb3RvdHlwZS5tZXRhPXdlLnBy
b3RvdHlwZS5tZXRhCit2YXIgbG49W10sY249e30scG49ZnVuY3Rpb24oKXt2YXIgZT0idW5kZWZp
bmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3cucGVyZm9ybWFuY2V8fHt9Ont9LHQ9ZS5ub3d8fGUu
bW96Tm93fHxlLndlYmtpdE5vd3x8ZS5tc05vd3x8ZS5vTm93CityZXR1cm4gdD90LmJpbmQoZSk6
ZnVuY3Rpb24oKXtyZXR1cm4rbmV3IERhdGV9fSgpCitlLmZsYWdnZWRJbnN0cnVtZW50PXZvaWQg
MCxlLmZsYWdnZWRJbnN0cnVtZW50PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbigpfQordmFyIGZu
PWZ1bmN0aW9uKGUpe3ZhciB0PWUuc3RhY2ssbj1lLm1lc3NhZ2UKK3JldHVybiB0JiYtMT09PXQu
aW5kZXhPZihuKSYmKHQ9bisiXG4iK3QpLHR9LGhuPXZvaWQgMCxkbj12b2lkIDAsbW49MAoramUu
cHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtpZihQZSh0KSl7dmFyIG4scj1lLnBlZWtNZXRhKHQp
CitpZihyJiYobj1yLnJlYWRhYmxlV2VhaygpKSl7aWYoblt0aGlzLl9pZF09PT1XdClyZXR1cm4K
K3JldHVybiBuW3RoaXMuX2lkXX19fSxqZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGUsdCl7aWYo
IVBlKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgdmFsdWUgdXNlZCBhcyB3ZWFrIG1h
cCBrZXkiKQorcmV0dXJuIHZvaWQgMD09PXQmJih0PVd0KSxpZShlKS53cml0YWJsZVdlYWsoKVt0
aGlzLl9pZF09dCx0aGlzfSxqZS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe2lmKCFQZSh0KSly
ZXR1cm4hMQordmFyIG4scj1lLnBlZWtNZXRhKHQpCityZXR1cm4hKCFyfHwhKG49ci5yZWFkYWJs
ZVdlYWsoKSkpJiZ2b2lkIDAhPT1uW3RoaXMuX2lkXX0samUucHJvdG90eXBlLmRlbGV0ZT1mdW5j
dGlvbihlKXtyZXR1cm4hIXRoaXMuaGFzKGUpJiYoZGVsZXRlIGllKGUpLndyaXRhYmxlV2Vhaygp
W3RoaXMuX2lkXSwhMCl9LGplLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJb
b2JqZWN0IFdlYWtNYXBdIn0KK3ZhciBnbj17Z2V0IG9uZXJyb3IoKXtyZXR1cm4ga2V9LHNldCBv
bmVycm9yKGUpe3JldHVybiBSZShlKX19LHluPW5ldyB1KFsic3luYyIsImFjdGlvbnMiLCJkZXN0
cm95Il0se0dVSURfS0VZOm4uR1VJRF9LRVksc3luYzp7YmVmb3JlOk4sYWZ0ZXI6UH0sZGVmYXVs
dFF1ZXVlOiJhY3Rpb25zIixvbkJlZ2luOmZ1bmN0aW9uKGUpe01lLmN1cnJlbnRSdW5Mb29wPWV9
LG9uRW5kOmZ1bmN0aW9uKGUsdCl7TWUuY3VycmVudFJ1bkxvb3A9dH0sb25FcnJvclRhcmdldDpn
bixvbkVycm9yTWV0aG9kOiJvbmVycm9yIn0pCitNZS5qb2luPWZ1bmN0aW9uKCl7cmV0dXJuIHlu
LmpvaW4uYXBwbHkoeW4sYXJndW1lbnRzKX0sTWUuYmluZD1mdW5jdGlvbigpe3ZhciBlLHQsbgor
Zm9yKGU9YXJndW1lbnRzLmxlbmd0aCx0PUFycmF5KGUpLG49MDtuPGU7bisrKXRbbl09YXJndW1l
bnRzW25dCityZXR1cm4gZnVuY3Rpb24oKXt2YXIgZSxuLHIKK2ZvcihlPWFyZ3VtZW50cy5sZW5n
dGgsbj1BcnJheShlKSxyPTA7cjxlO3IrKyluW3JdPWFyZ3VtZW50c1tyXQorcmV0dXJuIE1lLmpv
aW4uYXBwbHkoTWUsdC5jb25jYXQobikpfX0sTWUuYmFja2J1cm5lcj15bixNZS5jdXJyZW50UnVu
TG9vcD1udWxsLE1lLnF1ZXVlcz15bi5xdWV1ZU5hbWVzLE1lLmJlZ2luPWZ1bmN0aW9uKCl7eW4u
YmVnaW4oKX0sTWUuZW5kPWZ1bmN0aW9uKCl7eW4uZW5kKCl9LE1lLnNjaGVkdWxlPWZ1bmN0aW9u
KCl7cmV0dXJuIHluLnNjaGVkdWxlLmFwcGx5KHluLGFyZ3VtZW50cyl9LE1lLmhhc1NjaGVkdWxl
ZFRpbWVycz1mdW5jdGlvbigpe3JldHVybiB5bi5oYXNUaW1lcnMoKX0sTWUuY2FuY2VsVGltZXJz
PWZ1bmN0aW9uKCl7eW4uY2FuY2VsVGltZXJzKCl9LE1lLnN5bmM9ZnVuY3Rpb24oKXt5bi5jdXJy
ZW50SW5zdGFuY2UmJnluLmN1cnJlbnRJbnN0YW5jZS5xdWV1ZXMuc3luYy5mbHVzaCgpfSxNZS5s
YXRlcj1mdW5jdGlvbigpe3JldHVybiB5bi5sYXRlci5hcHBseSh5bixhcmd1bWVudHMpfSxNZS5v
bmNlPWZ1bmN0aW9uKCl7dmFyIGUsdCxuCitmb3IoZT1hcmd1bWVudHMubGVuZ3RoLHQ9QXJyYXko
ZSksbj0wO248ZTtuKyspdFtuXT1hcmd1bWVudHNbbl0KK3JldHVybiB0LnVuc2hpZnQoImFjdGlv
bnMiKSx5bi5zY2hlZHVsZU9uY2UuYXBwbHkoeW4sdCl9LE1lLnNjaGVkdWxlT25jZT1mdW5jdGlv
bigpe3JldHVybiB5bi5zY2hlZHVsZU9uY2UuYXBwbHkoeW4sYXJndW1lbnRzKX0sTWUubmV4dD1m
dW5jdGlvbigpe3ZhciBlLHQsbgorZm9yKGU9YXJndW1lbnRzLmxlbmd0aCx0PUFycmF5KGUpLG49
MDtuPGU7bisrKXRbbl09YXJndW1lbnRzW25dCityZXR1cm4gdC5wdXNoKDEpLHluLmxhdGVyLmFw
cGx5KHluLHQpfSxNZS5jYW5jZWw9ZnVuY3Rpb24oZSl7cmV0dXJuIHluLmNhbmNlbChlKX0sTWUu
ZGVib3VuY2U9ZnVuY3Rpb24oKXtyZXR1cm4geW4uZGVib3VuY2UuYXBwbHkoeW4sYXJndW1lbnRz
KX0sTWUudGhyb3R0bGU9ZnVuY3Rpb24oKXtyZXR1cm4geW4udGhyb3R0bGUuYXBwbHkoeW4sYXJn
dW1lbnRzKX0sTWUuX2FkZFF1ZXVlPWZ1bmN0aW9uKGUsdCl7LTE9PT1NZS5xdWV1ZXMuaW5kZXhP
ZihlKSYmTWUucXVldWVzLnNwbGljZShNZS5xdWV1ZXMuaW5kZXhPZih0KSsxLDAsZSl9Cit2YXIg
dm49ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5fcmVnaXN0cnk9W10sdGhpcy5fY29yZUxp
YkluZGV4PTB9cmV0dXJuIGUucHJvdG90eXBlLmlzUmVnaXN0ZXJlZD1mdW5jdGlvbihlKXtyZXR1
cm4hIXRoaXMuX2dldExpYnJhcnlCeU5hbWUoZSl9LGV9KCkKK3ZuLnByb3RvdHlwZT17Y29uc3Ry
dWN0b3I6dm4sX2dldExpYnJhcnlCeU5hbWU6ZnVuY3Rpb24oZSl7dmFyIHQsbj10aGlzLl9yZWdp
c3RyeSxyPW4ubGVuZ3RoCitmb3IodD0wO3Q8cjt0KyspaWYoblt0XS5uYW1lPT09ZSlyZXR1cm4g
blt0XX0scmVnaXN0ZXI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMuX3JlZ2lzdHJ5Lmxlbmd0
aAordGhpcy5fZ2V0TGlicmFyeUJ5TmFtZShlKXx8KG4mJihyPXRoaXMuX2NvcmVMaWJJbmRleCsr
KSx0aGlzLl9yZWdpc3RyeS5zcGxpY2UociwwLHtuYW1lOmUsdmVyc2lvbjp0fSkpfSxyZWdpc3Rl
ckNvcmVMaWJyYXJ5OmZ1bmN0aW9uKGUsdCl7dGhpcy5yZWdpc3RlcihlLHQsITApfSxkZVJlZ2lz
dGVyOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2dldExpYnJhcnlCeU5hbWUoZSksbj12b2lkIDAK
K3QmJihuPXRoaXMuX3JlZ2lzdHJ5LmluZGV4T2YodCksdGhpcy5fcmVnaXN0cnkuc3BsaWNlKG4s
MSkpfX0KK3ZhciBibj1uZXcgdm4KK3FlLmNyZWF0ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgdGhp
c30scWUucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpxZSxjbGVhcjpmdW5jdGlvbigpe3RoaXMucHJl
c2VuY2VTZXQ9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLmxpc3Q9W10sdGhpcy5zaXplPTB9LGFk
ZDpmdW5jdGlvbihlLHQpe3ZhciByPXR8fG4uZ3VpZEZvcihlKSxpPXRoaXMucHJlc2VuY2VTZXQs
bz10aGlzLmxpc3QKK3JldHVybiEwIT09aVtyXSYmKGlbcl09ITAsdGhpcy5zaXplPW8ucHVzaChl
KSksdGhpc30sZGVsZXRlOmZ1bmN0aW9uKGUsdCl7dmFyIHIsaT10fHxuLmd1aWRGb3IoZSksbz10
aGlzLnByZXNlbmNlU2V0LHM9dGhpcy5saXN0CityZXR1cm4hMD09PW9baV0mJihkZWxldGUgb1tp
XSxyPXMuaW5kZXhPZihlKSxyPi0xJiZzLnNwbGljZShyLDEpLHRoaXMuc2l6ZT1zLmxlbmd0aCwh
MCl9LGlzRW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuc2l6ZX0saGFzOmZ1bmN0aW9u
KGUpe2lmKDA9PT10aGlzLnNpemUpcmV0dXJuITEKK3ZhciB0PW4uZ3VpZEZvcihlKQorcmV0dXJu
ITA9PT10aGlzLnByZXNlbmNlU2V0W3RdfSxmb3JFYWNoOmZ1bmN0aW9uKGUpe2lmKCJmdW5jdGlv
biIhPXR5cGVvZiBlJiZGZShlKSwwIT09dGhpcy5zaXplKXt2YXIgdCxuLHI9dGhpcy5saXN0Citp
ZigyPT09YXJndW1lbnRzLmxlbmd0aClmb3IodD0wO3Q8ci5sZW5ndGg7dCsrKWUuY2FsbChhcmd1
bWVudHNbMV0sclt0XSkKK2Vsc2UgZm9yKG49MDtuPHIubGVuZ3RoO24rKyllKHJbbl0pfX0sdG9B
cnJheTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxpc3Quc2xpY2UoKX0sY29weTpmdW5jdGlvbigp
e3ZhciBlPXRoaXMuY29uc3RydWN0b3IsdD1uZXcgZQorcmV0dXJuIHQucHJlc2VuY2VTZXQ9VWUo
dGhpcy5wcmVzZW5jZVNldCksdC5saXN0PXRoaXMudG9BcnJheSgpLHQuc2l6ZT10aGlzLnNpemUs
dH19LEhlLmNyZWF0ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgdGhpc30sSGUucHJvdG90eXBlPXtj
b25zdHJ1Y3RvcjpIZSxzaXplOjAsZ2V0OmZ1bmN0aW9uKGUpe2lmKDAhPT10aGlzLnNpemUpe3Jl
dHVybiB0aGlzLl92YWx1ZXNbbi5ndWlkRm9yKGUpXX19LHNldDpmdW5jdGlvbihlLHQpe3ZhciBy
PXRoaXMuX2tleXMsaT10aGlzLl92YWx1ZXMsbz1uLmd1aWRGb3IoZSkscz0tMD09PWU/MDplCity
ZXR1cm4gci5hZGQocyxvKSxpW29dPXQsdGhpcy5zaXplPXIuc2l6ZSx0aGlzfSxkZWxldGU6ZnVu
Y3Rpb24oZSl7aWYoMD09PXRoaXMuc2l6ZSlyZXR1cm4hMQordmFyIHQ9dGhpcy5fa2V5cyxyPXRo
aXMuX3ZhbHVlcyxpPW4uZ3VpZEZvcihlKQorcmV0dXJuISF0LmRlbGV0ZShlLGkpJiYoZGVsZXRl
IHJbaV0sdGhpcy5zaXplPXQuc2l6ZSwhMCl9LGhhczpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5f
a2V5cy5oYXMoZSl9LGZvckVhY2g6ZnVuY3Rpb24oZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUm
JkZlKGUpLDAhPT10aGlzLnNpemUpe3ZhciB0PXRoaXMsbj12b2lkIDAscj12b2lkIDAKKzI9PT1h
cmd1bWVudHMubGVuZ3RoPyhyPWFyZ3VtZW50c1sxXSxuPWZ1bmN0aW9uKG4pe3JldHVybiBlLmNh
bGwocix0LmdldChuKSxuLHQpfSk6bj1mdW5jdGlvbihuKXtyZXR1cm4gZSh0LmdldChuKSxuLHQp
fSx0aGlzLl9rZXlzLmZvckVhY2gobil9fSxjbGVhcjpmdW5jdGlvbigpe3RoaXMuX2tleXMuY2xl
YXIoKSx0aGlzLl92YWx1ZXM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLnNpemU9MH0sY29weTpm
dW5jdGlvbigpe3JldHVybiBCZSh0aGlzLG5ldyBIZSl9fSxWZS5jcmVhdGU9ZnVuY3Rpb24oZSl7
cmV0dXJuIGU/bmV3IFZlKGUpOm5ldyBIZX0sVmUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoSGUu
cHJvdG90eXBlKSxWZS5wcm90b3R5cGUuY29uc3RydWN0b3I9VmUsVmUucHJvdG90eXBlLl9zdXBl
ciRjb25zdHJ1Y3Rvcj1IZSxWZS5wcm90b3R5cGUuX3N1cGVyJGdldD1IZS5wcm90b3R5cGUuZ2V0
LFZlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSl7dmFyIHQsbj10aGlzLmhhcyhlKQorcmV0dXJu
IG4/dGhpcy5fc3VwZXIkZ2V0KGUpOih0PXRoaXMuZGVmYXVsdFZhbHVlKGUpLHRoaXMuc2V0KGUs
dCksdCl9LFZlLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEJlKHRoaXMsbmV3KDAs
dGhpcy5jb25zdHJ1Y3Rvcikoe2RlZmF1bHRWYWx1ZTp0aGlzLmRlZmF1bHRWYWx1ZX0pKX0KK3Zh
ciBfbj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLl9mcm9tPXQsdGhpcy5fdG89ZSx0
aGlzLl9vbmVXYXk9dm9pZCAwLHRoaXMuX2RpcmVjdGlvbj12b2lkIDAsdGhpcy5fcmVhZHlUb1N5
bmM9dm9pZCAwLHRoaXMuX2Zyb21PYmo9dm9pZCAwLHRoaXMuX2Zyb21QYXRoPXZvaWQgMCx0aGlz
Ll90b09iaj12b2lkIDB9cmV0dXJuIGUucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oKXt2YXIgdD1u
ZXcgZSh0aGlzLl90byx0aGlzLl9mcm9tKQorcmV0dXJuIHRoaXMuX29uZVdheSYmKHQuX29uZVdh
eT0hMCksdH0sZS5wcm90b3R5cGUuZnJvbT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fZnJvbT1l
LHRoaXN9LGUucHJvdG90eXBlLnRvPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl90bz1lLHRoaXN9
LGUucHJvdG90eXBlLm9uZVdheT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9vbmVXYXk9ITAsdGhp
c30sZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9vbmVXYXk/Iltv
bmVXYXldIjoiIgorcmV0dXJuIkVtYmVyLkJpbmRpbmc8IituLmd1aWRGb3IodGhpcykrIj4oIit0
aGlzLl9mcm9tKyIgLT4gIit0aGlzLl90bysiKSIrZX0sZS5wcm90b3R5cGUuY29ubmVjdD1mdW5j
dGlvbihlKXt2YXIgbixyPXZvaWQgMCxpPXZvaWQgMCxvPXZvaWQgMAorcmV0dXJuIG9lKHRoaXMu
X2Zyb20pJiYobj1hZSh0aGlzLl9mcm9tKSwobz10LmNvbnRleHQubG9va3VwW25dKSYmKHI9byxp
PXVlKHRoaXMuX2Zyb20pKSksdm9pZCAwPT09ciYmKHI9ZSxpPXRoaXMuX2Zyb20pLGRlKGUsdGhp
cy5fdG8sbGUocixpKSksR2UocixpLHRoaXMsImZyb21EaWRDaGFuZ2UiKSx0aGlzLl9vbmVXYXl8
fEdlKGUsdGhpcy5fdG8sdGhpcywidG9EaWRDaGFuZ2UiKSxmKGUsIndpbGxEZXN0cm95Iix0aGlz
LCJkaXNjb25uZWN0IiksdGhpcy5fdG8sdGhpcy5fZnJvbSx0aGlzLl9vbmVXYXksIW8mJnRoaXMu
X29uZVdheSx0aGlzLl9yZWFkeVRvU3luYz0hMCx0aGlzLl9mcm9tT2JqPXIsdGhpcy5fZnJvbVBh
dGg9aSx0aGlzLl90b09iaj1lLHRoaXN9LGUucHJvdG90eXBlLmRpc2Nvbm5lY3Q9ZnVuY3Rpb24o
KXtyZXR1cm4gS2UodGhpcy5fZnJvbU9iaix0aGlzLl9mcm9tUGF0aCx0aGlzLCJmcm9tRGlkQ2hh
bmdlIiksdGhpcy5fb25lV2F5fHxLZSh0aGlzLl90b09iaix0aGlzLl90byx0aGlzLCJ0b0RpZENo
YW5nZSIpLHRoaXMuX3JlYWR5VG9TeW5jPSExLHRoaXN9LGUucHJvdG90eXBlLmZyb21EaWRDaGFu
Z2U9ZnVuY3Rpb24oKXt0aGlzLl9zY2hlZHVsZVN5bmMoImZ3ZCIpfSxlLnByb3RvdHlwZS50b0Rp
ZENoYW5nZT1mdW5jdGlvbigpe3RoaXMuX3NjaGVkdWxlU3luYygiYmFjayIpfSxlLnByb3RvdHlw
ZS5fc2NoZWR1bGVTeW5jPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2RpcmVjdGlvbgordm9pZCAw
PT09dCYmKE1lLnNjaGVkdWxlKCJzeW5jIix0aGlzLCJfc3luYyIpLHRoaXMuX2RpcmVjdGlvbj1l
KSwiYmFjayI9PT10JiYiZndkIj09PWUmJih0aGlzLl9kaXJlY3Rpb249ImZ3ZCIpfSxlLnByb3Rv
dHlwZS5fc3luYz1mdW5jdGlvbigpe3ZhciBlLG4scj10LkVOVi5MT0dfQklORElOR1MsaT10aGlz
Ll90b09iagoraWYoIWkuaXNEZXN0cm95ZWQmJnRoaXMuX3JlYWR5VG9TeW5jKXt2YXIgbz10aGlz
Ll9kaXJlY3Rpb24scz10aGlzLl9mcm9tT2JqLHU9dGhpcy5fZnJvbVBhdGgKK3RoaXMuX2RpcmVj
dGlvbj12b2lkIDAsImZ3ZCI9PT1vPyhlPWxlKHMsdSksciYmYS5sb2coIiAiLHRoaXMudG9TdHJp
bmcoKSwiLT4iLGUscyksdGhpcy5fb25lV2F5P2RlKGksdGhpcy5fdG8sZSk6WWUoaSx0aGlzLl90
byx0aGlzLCJ0b0RpZENoYW5nZSIsZnVuY3Rpb24oKXtkZShpLHRoaXMuX3RvLGUpfSkpOiJiYWNr
Ij09PW8mJihuPWxlKGksdGhpcy5fdG8pLHImJmEubG9nKCIgIix0aGlzLnRvU3RyaW5nKCksIjwt
IixuLGkpLFllKHMsdSx0aGlzLCJmcm9tRGlkQ2hhbmdlIixmdW5jdGlvbigpe2RlKHMsdSxuKX0p
KX19LGV9KCk7KGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShu
KSYmKGVbbl09dFtuXSl9KShfbix7ZnJvbTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHRoaXModm9p
ZCAwLGUpfSx0bzpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHRoaXMoZSx2b2lkIDApfX0pCit2YXIg
d249QXJyYXkucHJvdG90eXBlLmNvbmNhdCxFbj1BcnJheS5pc0FycmF5LHhuPXt9CithdCgibm90
Ym91bmQiKSxhdCgiZm9vQmluZGluZyIpCit2YXIgQ249ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUs
aSl7dGhpcy5wcm9wZXJ0aWVzPWkKK3ZhciBvLHMsYSx1PWUmJmUubGVuZ3RoCitpZih1PjApe2Zv
cihvPW5ldyBBcnJheSh1KSxzPTA7czx1O3MrKylhPWVbc10sb1tzXT1hIGluc3RhbmNlb2YgdD9h
Om5ldyB0KHZvaWQgMCxhKQordGhpcy5taXhpbnM9b31lbHNlIHRoaXMubWl4aW5zPXZvaWQgMAor
dGhpcy5vd25lckNvbnN0cnVjdG9yPXZvaWQgMCx0aGlzLl93aXRob3V0PXZvaWQgMCx0aGlzW24u
R1VJRF9LRVldPW51bGwsdGhpc1tuLk5BTUVfS0VZXT1udWxsLHIuZGVidWdTZWFsKHRoaXMpfXJl
dHVybiB0LmFwcGx5UGFydGlhbD1mdW5jdGlvbihlKXt2YXIgdCxuLHIKK2Zvcih0PWFyZ3VtZW50
cy5sZW5ndGgsbj1BcnJheSh0PjE/dC0xOjApLHI9MTtyPHQ7cisrKW5bci0xXT1hcmd1bWVudHNb
cl0KK3JldHVybiBodChlLG4sITApfSx0LmNyZWF0ZT1mdW5jdGlvbigpe09uPSEwCit2YXIgZSx0
LG4scj10aGlzCitmb3IoZT1hcmd1bWVudHMubGVuZ3RoLHQ9QXJyYXkoZSksbj0wO248ZTtuKysp
dFtuXT1hcmd1bWVudHNbbl0KK3JldHVybiBuZXcgcih0LHZvaWQgMCl9LHQubWl4aW5zPWZ1bmN0
aW9uKHQpe3ZhciBuPWUucGVla01ldGEodCkscj1bXQorcmV0dXJuIG4/KG4uZm9yRWFjaE1peGlu
cyhmdW5jdGlvbihlLHQpe3QucHJvcGVydGllc3x8ci5wdXNoKHQpfSkscik6cn0sdH0oKQorQ24u
X2FwcGx5PWh0LENuLmZpbmlzaFBhcnRpYWw9bHQKK3ZhciBPbj0hMSxBbj1Dbi5wcm90b3R5cGUK
K0FuLnJlb3Blbj1mdW5jdGlvbigpe3ZhciBlPXZvaWQgMAordGhpcy5wcm9wZXJ0aWVzPyhlPW5l
dyBDbih2b2lkIDAsdGhpcy5wcm9wZXJ0aWVzKSx0aGlzLnByb3BlcnRpZXM9dm9pZCAwLHRoaXMu
bWl4aW5zPVtlXSk6dGhpcy5taXhpbnN8fCh0aGlzLm1peGlucz1bXSkKK3ZhciB0PXRoaXMubWl4
aW5zLG49dm9pZCAwCitmb3Iobj0wO248YXJndW1lbnRzLmxlbmd0aDtuKyspZT1hcmd1bWVudHNb
bl0sZSBpbnN0YW5jZW9mIENuP3QucHVzaChlKTp0LnB1c2gobmV3IENuKHZvaWQgMCxlKSkKK3Jl
dHVybiB0aGlzfSxBbi5hcHBseT1mdW5jdGlvbihlKXtyZXR1cm4gaHQoZSxbdGhpc10sITEpfSxB
bi5hcHBseVBhcnRpYWw9ZnVuY3Rpb24oZSl7cmV0dXJuIGh0KGUsW3RoaXNdLCEwKX0sQW4udG9T
dHJpbmc9T2JqZWN0LnRvU3RyaW5nLEFuLmRldGVjdD1mdW5jdGlvbih0KXtpZigib2JqZWN0IiE9
dHlwZW9mIHR8fG51bGw9PT10KXJldHVybiExCitpZih0IGluc3RhbmNlb2YgQ24pcmV0dXJuIGR0
KHQsdGhpcyx7fSkKK3ZhciByPWUucGVla01ldGEodCkKK3JldHVybiEhciYmISFyLnBlZWtNaXhp
bnMobi5ndWlkRm9yKHRoaXMpKX0sQW4ud2l0aG91dD1mdW5jdGlvbigpe3ZhciBlLHQsbixyPW5l
dyBDbihbdGhpc10pCitmb3IoZT1hcmd1bWVudHMubGVuZ3RoLHQ9QXJyYXkoZSksbj0wO248ZTtu
KyspdFtuXT1hcmd1bWVudHNbbl0KK3JldHVybiByLl93aXRob3V0PXQscn0sQW4ua2V5cz1mdW5j
dGlvbigpe3ZhciBlPXt9CityZXR1cm4gbXQoZSx0aGlzLHt9KSxPYmplY3Qua2V5cyhlKX0sci5k
ZWJ1Z1NlYWwoQW4pCit2YXIgVG49bmV3IEkKK1RuLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJu
IihSZXF1aXJlZCBQcm9wZXJ0eSkifSxndC5wcm90b3R5cGU9bmV3IEksdnQucHJvdG90eXBlPU9i
amVjdC5jcmVhdGUoSS5wcm90b3R5cGUpCit2YXIgU249dnQucHJvdG90eXBlLFJuPXdlLnByb3Rv
dHlwZSxrbj11bi5wcm90b3R5cGUKK1NuLl9zdXBlciRDb25zdHJ1Y3Rvcj13ZSxTbi5nZXQ9Um4u
Z2V0LFNuLnJlYWRPbmx5PVJuLnJlYWRPbmx5LFNuLnRlYXJkb3duPVJuLnRlYXJkb3duCit2YXIg
Tm49QXJyYXkucHJvdG90eXBlLnNwbGljZSxQbj1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQpe3Zh
ciBuPWkucG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLGUuY2FsbCh0aGlzKSkKK3JldHVy
biBuLmRlc2M9dCxufXJldHVybiBpLmluaGVyaXRzKHQsZSksdC5wcm90b3R5cGUuc2V0dXA9ZnVu
Y3Rpb24oZSx0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHRoaXMuZGVzYyl9LHQucHJvdG90
eXBlLnRlYXJkb3duPWZ1bmN0aW9uKCl7fSx0fShJKQorZS5kZWZhdWx0PXh0LGUuY29tcHV0ZWQ9
ZnVuY3Rpb24oZSl7dmFyIHQ9dm9pZCAwCithcmd1bWVudHMubGVuZ3RoPjEmJih0PVtdLnNsaWNl
LmNhbGwoYXJndW1lbnRzKSxlPXQucG9wKCkpCit2YXIgbj1uZXcgd2UoZSkKK3JldHVybiB0JiZu
LnByb3BlcnR5LmFwcGx5KG4sdCksbn0sZS5jYWNoZUZvcj1FZSxlLkNvbXB1dGVkUHJvcGVydHk9
d2UsZS5hbGlhcz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IHVuKGUpfSxlLm1lcmdlPWZ1bmN0aW9u
KGUsdCl7aWYoIXR8fCJvYmplY3QiIT10eXBlb2YgdClyZXR1cm4gZQordmFyIG4scj1PYmplY3Qu
a2V5cyh0KSxpPXZvaWQgMAorZm9yKG49MDtuPHIubGVuZ3RoO24rKylpPXJbbl0sZVtpXT10W2ld
CityZXR1cm4gZX0sZS5kZXByZWNhdGVQcm9wZXJ0eT1mdW5jdGlvbihlLHQsbixyKXtPYmplY3Qu
ZGVmaW5lUHJvcGVydHkoZSx0LHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSxzZXQ6ZnVu
Y3Rpb24oZSl7ZmUodGhpcyxuLGUpfSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbGUodGhpcyxuKX19
KX0sZS5pbnN0cnVtZW50PWZ1bmN0aW9uKGUsdCxuLHIpe2lmKGFyZ3VtZW50cy5sZW5ndGg8PTMm
JiJmdW5jdGlvbiI9PXR5cGVvZiB0JiYocj1uLG49dCx0PXZvaWQgMCksMD09PWxuLmxlbmd0aCly
ZXR1cm4gbi5jYWxsKHIpCit2YXIgaT10fHx7fSxvPVNlKGUsZnVuY3Rpb24oKXtyZXR1cm4gaX0p
CityZXR1cm4gbz9BZShuLG8saSxyKTpuLmNhbGwocil9LGUuX2luc3RydW1lbnRTdGFydD1TZSxl
Lmluc3RydW1lbnRhdGlvblJlc2V0PWZ1bmN0aW9uKCl7bG4ubGVuZ3RoPTAsY249e319LGUuaW5z
dHJ1bWVudGF0aW9uU3Vic2NyaWJlPWZ1bmN0aW9uKGUsdCl7dmFyIG4scj1lLnNwbGl0KCIuIiks
aT12b2lkIDAsbz1bXQorZm9yKG49MDtuPHIubGVuZ3RoO24rKylpPXJbbl0sIioiPT09aT9vLnB1
c2goIlteXFwuXSoiKTpvLnB1c2goaSkKK289by5qb2luKCJcXC4iKSxvKz0iKFxcLi4qKT8iCit2
YXIgcz17cGF0dGVybjplLHJlZ2V4Om5ldyBSZWdFeHAoIl4iK28rIiQiKSxvYmplY3Q6dH0KK3Jl
dHVybiBsbi5wdXNoKHMpLGNuPXt9LHN9LGUuaW5zdHJ1bWVudGF0aW9uVW5zdWJzY3JpYmU9ZnVu
Y3Rpb24oZSl7dmFyIHQsbj12b2lkIDAKK2Zvcih0PTA7dDxsbi5sZW5ndGg7dCsrKWxuW3RdPT09
ZSYmKG49dCkKK2xuLnNwbGljZShuLDEpLGNuPXt9fSxlLmdldE9uZXJyb3I9ZnVuY3Rpb24oKXty
ZXR1cm4gaG59LGUuc2V0T25lcnJvcj1SZSxlLmRpc3BhdGNoRXJyb3I9a2UsZS5zZXREaXNwYXRj
aE92ZXJyaWRlPWZ1bmN0aW9uKGUpe2RuPWV9LGUuZ2V0RGlzcGF0Y2hPdmVycmlkZT1mdW5jdGlv
bigpe3JldHVybiBkbn0sZS5NRVRBX0RFU0M9JHQsZS5tZXRhPWllLGUuQ2FjaGU9UXQsZS5fZ2V0
UGF0aD1jZSxlLmdldD1sZSxlLmdldFdpdGhEZWZhdWx0PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1s
ZShlLHQpCityZXR1cm4gdm9pZCAwPT09cj9uOnJ9LGUuc2V0PWZlLGUudHJ5U2V0PWRlLGUuV2Vh
a01hcD1qZSxlLmFjY3VtdWxhdGVMaXN0ZW5lcnM9cCxlLmFkZExpc3RlbmVyPWYsZS5oYXNMaXN0
ZW5lcnM9ZnVuY3Rpb24odCxuKXt2YXIgcj1lLnBlZWtNZXRhKHQpCitpZighcilyZXR1cm4hMQor
dmFyIGk9ci5tYXRjaGluZ0xpc3RlbmVycyhuKQorcmV0dXJuIHZvaWQgMCE9PWkmJmkubGVuZ3Ro
PjB9LGUubGlzdGVuZXJzRm9yPXkKK2Uub249ZnVuY3Rpb24oKXtmb3IoZT1hcmd1bWVudHMubGVu
Z3RoLHQ9QXJyYXkoZSksbj0wO248ZTtuKyspdFtuXT1hcmd1bWVudHNbbl0KK3ZhciBlLHQsbixy
PXQucG9wKCkKK3JldHVybiByLl9fZW1iZXJfbGlzdGVuc19fPXQscn0sZS5yZW1vdmVMaXN0ZW5l
cj1oLGUuc2VuZEV2ZW50PWcsZS5zdXNwZW5kTGlzdGVuZXI9ZCxlLnN1c3BlbmRMaXN0ZW5lcnM9
bSxlLndhdGNoZWRFdmVudHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGllKGUpLndhdGNoZWRFdmVudHMo
KX0sZS5pc05vbmU9RGUsZS5pc0VtcHR5PUxlLGUuaXNCbGFuaz1JZSxlLmlzUHJlc2VudD1mdW5j
dGlvbihlKXtyZXR1cm4hSWUoZSl9LGUucnVuPU1lLGUuT2JzZXJ2ZXJTZXQ9UnQsZS5iZWdpblBy
b3BlcnR5Q2hhbmdlcz1OLGUuY2hhbmdlUHJvcGVydGllcz1qLGUuZW5kUHJvcGVydHlDaGFuZ2Vz
PVAsZS5vdmVycmlkZUNoYWlucz1rLGUucHJvcGVydHlEaWRDaGFuZ2U9QyxlLnByb3BlcnR5V2ls
bENoYW5nZT14LGUuUFJPUEVSVFlfRElEX0NIQU5HRT1rdCxlLmRlZmluZVByb3BlcnR5PU0sZS5E
ZXNjcmlwdG9yPUksZS5faGFzQ2FjaGVkQ29tcHV0ZWRQcm9wZXJ0aWVzPWZ1bmN0aW9uKCl7SXQ9
ITB9LGUud2F0Y2hLZXk9eixlLnVud2F0Y2hLZXk9VSxlLkNoYWluTm9kZT16dCxlLmZpbmlzaENo
YWlucz1mdW5jdGlvbihlKXt2YXIgdD1lLnJlYWRhYmxlQ2hhaW5XYXRjaGVycygpCit2b2lkIDAh
PT10JiZ0LnJldmFsaWRhdGVBbGwoKSx2b2lkIDAhPT1lLnJlYWRhYmxlQ2hhaW5zKCkmJmUud3Jp
dGFibGVDaGFpbnMocSl9LGUucmVtb3ZlQ2hhaW5XYXRjaGVyPVksZS53YXRjaFBhdGg9SCxlLnVu
d2F0Y2hQYXRoPVYsZS5kZXN0cm95PWZ1bmN0aW9uKGUpe3JlKGUpfQorZS5pc1dhdGNoaW5nPWZ1
bmN0aW9uKHQsbil7aWYoIm9iamVjdCIhPXR5cGVvZiB0fHxudWxsPT09dClyZXR1cm4hMQordmFy
IHI9ZS5wZWVrTWV0YSh0KQorcmV0dXJuKHImJnIucGVla1dhdGNoaW5nKG4pKT4wfSxlLnVud2F0
Y2g9dmUsZS53YXRjaD15ZSxlLndhdGNoZXJDb3VudD1mdW5jdGlvbih0LG4pe3ZhciByPWUucGVl
a01ldGEodCkKK3JldHVybiByJiZyLnBlZWtXYXRjaGluZyhuKXx8MH0sZS5saWJyYXJpZXM9Ym4s
ZS5MaWJyYXJpZXM9dm4sZS5NYXA9SGUsZS5NYXBXaXRoRGVmYXVsdD1WZSxlLk9yZGVyZWRTZXQ9
cWUsZS5nZXRQcm9wZXJ0aWVzPWZ1bmN0aW9uKGUpe3ZhciB0PXt9LG49YXJndW1lbnRzLHI9MQor
Zm9yKDI9PT1hcmd1bWVudHMubGVuZ3RoJiZBcnJheS5pc0FycmF5KGFyZ3VtZW50c1sxXSkmJihy
PTAsbj1hcmd1bWVudHNbMV0pO3I8bi5sZW5ndGg7cisrKXRbbltyXV09bGUoZSxuW3JdKQorcmV0
dXJuIHR9LGUuc2V0UHJvcGVydGllcz1mdW5jdGlvbihlLHQpe3JldHVybiB0JiYib2JqZWN0Ij09
dHlwZW9mIHQ/KGooZnVuY3Rpb24oKXt2YXIgbixyPU9iamVjdC5rZXlzKHQpLGk9dm9pZCAwCitm
b3Iobj0wO248ci5sZW5ndGg7bisrKWk9cltuXSxmZShlLGksdFtpXSl9KSx0KTp0fSxlLmV4cGFu
ZFByb3BlcnRpZXM9bWUsZS5fc3VzcGVuZE9ic2VydmVyPVllLGUuX3N1c3BlbmRPYnNlcnZlcnM9
ZnVuY3Rpb24oZSx0LG4scixpKXtyZXR1cm4gbShlLHQubWFwKFdlKSxuLHIsaSl9LGUuYWRkT2Jz
ZXJ2ZXI9R2UsZS5vYnNlcnZlcnNGb3I9ZnVuY3Rpb24oZSx0KXtyZXR1cm4geShlLFdlKHQpKX0s
ZS5yZW1vdmVPYnNlcnZlcj1LZSxlLl9hZGRCZWZvcmVPYnNlcnZlcj1RZSxlLl9yZW1vdmVCZWZv
cmVPYnNlcnZlcj1KZSxlLk1peGluPUNuLGUuYWxpYXNNZXRob2Q9ZnVuY3Rpb24oZSl7cmV0dXJu
IG5ldyBndChlKX0sZS5faW1tZWRpYXRlT2JzZXJ2ZXI9ZnVuY3Rpb24oKXt2YXIgZQorZm9yKGU9
MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKWFyZ3VtZW50c1tlXQorcmV0dXJuIHl0LmFwcGx5KHRo
aXMsYXJndW1lbnRzKX0sZS5fYmVmb3JlT2JzZXJ2ZXI9ZnVuY3Rpb24oKXtmb3IoZT1hcmd1bWVu
dHMubGVuZ3RoLHQ9QXJyYXkoZSksbj0wO248ZTtuKyspdFtuXT1hcmd1bWVudHNbbl0KK3ZhciBl
LHQsbixpLG89dC5zbGljZSgtMSlbMF0scz12b2lkIDAsYT1mdW5jdGlvbihlKXtzLnB1c2goZSl9
LHU9dC5zbGljZSgwLC0xKQorZm9yKCJmdW5jdGlvbiIhPXR5cGVvZiBvJiYobz10WzBdLHU9dC5z
bGljZSgxKSkscz1bXSxpPTA7aTx1Lmxlbmd0aDsrK2kpbWUodVtpXSxhKQoraWYoImZ1bmN0aW9u
IiE9dHlwZW9mIG8pdGhyb3cgbmV3IHIuRW1iZXJFcnJvcigiX2JlZm9yZU9ic2VydmVyIGNhbGxl
ZCB3aXRob3V0IGEgZnVuY3Rpb24iKQorcmV0dXJuIG8uX19lbWJlcl9vYnNlcnZlc0JlZm9yZV9f
PXMsb30sZS5taXhpbj1mdW5jdGlvbihlKXt2YXIgdCxuLHIKK2Zvcih0PWFyZ3VtZW50cy5sZW5n
dGgsbj1BcnJheSh0PjE/dC0xOjApLHI9MTtyPHQ7cisrKW5bci0xXT1hcmd1bWVudHNbcl0KK3Jl
dHVybiBodChlLG4sITEpLGV9LGUub2JzZXJ2ZXI9eXQsZS5yZXF1aXJlZD1mdW5jdGlvbigpe3Jl
dHVybiBUbn0sZS5SRVFVSVJFRD1UbixlLmhhc1VucHJvY2Vzc2VkTWl4aW5zPWZ1bmN0aW9uKCl7
cmV0dXJuIE9ufSxlLmNsZWFyVW5wcm9jZXNzZWRNaXhpbnM9ZnVuY3Rpb24oKXtPbj0hMX0sZS5k
ZXRlY3RCaW5kaW5nPWF0CitlLkJpbmRpbmc9X24sZS5iaW5kPWZ1bmN0aW9uKGUsdCxuKXtyZXR1
cm4gbmV3IF9uKHQsbikuY29ubmVjdChlKX0sZS5pc0dsb2JhbFBhdGg9b2UsZS5JbmplY3RlZFBy
b3BlcnR5PXZ0LGUuc2V0SGFzVmlld3M9ZnVuY3Rpb24oZSl7VHQ9ZX0sZS50YWdGb3JQcm9wZXJ0
eT1mdW5jdGlvbihlLHQsbil7aWYoIm9iamVjdCIhPXR5cGVvZiBlfHxudWxsPT09ZSlyZXR1cm4g
by5DT05TVEFOVF9UQUcKK3ZhciByPW58fGllKGUpCitpZihyLmlzUHJveHkoKSlyZXR1cm4gYihl
LHIpCit2YXIgaT1yLndyaXRhYmxlVGFncygpLHM9aVt0XQorcmV0dXJuIHN8fChpW3RdPXYoKSl9
LGUudGFnRm9yPWIsZS5tYXJrT2JqZWN0QXNEaXJ0eT1fLGUucmVwbGFjZT1mdW5jdGlvbihlLHQs
bixyKXtmb3IodmFyIGk9W10uY29uY2F0KHIpLG89W10scz10LGE9bix1PXZvaWQgMCxsPXZvaWQg
MDtpLmxlbmd0aDspdT1hPjZlND82ZTQ6YSx1PD0wJiYodT0wKSxsPWkuc3BsaWNlKDAsNmU0KSxs
PVtzLHVdLmNvbmNhdChsKSxzKz02ZTQsYS09dSxvPW8uY29uY2F0KE5uLmFwcGx5KGUsbCkpCity
ZXR1cm4gb30sZS5kaWRSZW5kZXI9dm9pZCAwLGUuYXNzZXJ0Tm90UmVuZGVyZWQ9dm9pZCAwLGUu
aXNQcm94eT1mdW5jdGlvbih0KXt2YXIgbgorcmV0dXJuISgib2JqZWN0IiE9dHlwZW9mIHR8fCF0
KSYmKChuPWUucGVla01ldGEodCkpJiZuLmlzUHJveHkoKSl9LGUuZGVzY3JpcHRvcj1mdW5jdGlv
bihlKXtyZXR1cm4gbmV3IFBuKGUpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVs
ZSIse3ZhbHVlOiEwfSl9KSxlKCJlbWJlci1yb3V0aW5nL2V4dC9jb250cm9sbGVyIixbImV4cG9y
dHMiLCJlbWJlci1tZXRhbCIsImVtYmVyLXJ1bnRpbWUiLCJlbWJlci1yb3V0aW5nL3V0aWxzIl0s
ZnVuY3Rpb24oZSx0LG4scil7InVzZSBzdHJpY3QiCituLkNvbnRyb2xsZXJNaXhpbi5yZW9wZW4o
e2NvbmNhdGVuYXRlZFByb3BlcnRpZXM6WyJxdWVyeVBhcmFtcyJdLHF1ZXJ5UGFyYW1zOm51bGws
X3FwRGVsZWdhdGU6bnVsbCxfcXBDaGFuZ2VkOmZ1bmN0aW9uKGUsbil7dmFyIHI9bi5zdWJzdHIo
MCxuLmxlbmd0aC0zKTsoMCxlLl9xcERlbGVnYXRlKShyLCgwLHQuZ2V0KShlLHIpKX0sdHJhbnNp
dGlvblRvUm91dGU6ZnVuY3Rpb24oKXt2YXIgZSxuLGksbz0oMCx0LmdldCkodGhpcywidGFyZ2V0
Iikscz1vLnRyYW5zaXRpb25Ub1JvdXRlfHxvLnRyYW5zaXRpb25UbworZm9yKGU9YXJndW1lbnRz
Lmxlbmd0aCxuPUFycmF5KGUpLGk9MDtpPGU7aSsrKW5baV09YXJndW1lbnRzW2ldCityZXR1cm4g
cy5hcHBseShvLCgwLHIucHJlZml4Um91dGVOYW1lQXJnKSh0aGlzLG4pKX0scmVwbGFjZVJvdXRl
OmZ1bmN0aW9uKCl7dmFyIGUsbixpLG89KDAsdC5nZXQpKHRoaXMsInRhcmdldCIpLHM9by5yZXBs
YWNlUm91dGV8fG8ucmVwbGFjZVdpdGgKK2ZvcihlPWFyZ3VtZW50cy5sZW5ndGgsbj1BcnJheShl
KSxpPTA7aTxlO2krKyluW2ldPWFyZ3VtZW50c1tpXQorcmV0dXJuIHMuYXBwbHkobywoMCxyLnBy
ZWZpeFJvdXRlTmFtZUFyZykobyxuKSl9fSksZS5kZWZhdWx0PW4uQ29udHJvbGxlck1peGlufSks
ZSgiZW1iZXItcm91dGluZy9leHQvcnVuX2xvb3AiLFsiZW1iZXItbWV0YWwiXSxmdW5jdGlvbihl
KXsidXNlIHN0cmljdCIKK2UucnVuLl9hZGRRdWV1ZSgicm91dGVyVHJhbnNpdGlvbnMiLCJhY3Rp
b25zIil9KQorZSgiZW1iZXItcm91dGluZy9pbmRleCIsWyJleHBvcnRzIiwiZW1iZXItcm91dGlu
Zy9sb2NhdGlvbi9hcGkiLCJlbWJlci1yb3V0aW5nL2xvY2F0aW9uL25vbmVfbG9jYXRpb24iLCJl
bWJlci1yb3V0aW5nL2xvY2F0aW9uL2hhc2hfbG9jYXRpb24iLCJlbWJlci1yb3V0aW5nL2xvY2F0
aW9uL2hpc3RvcnlfbG9jYXRpb24iLCJlbWJlci1yb3V0aW5nL2xvY2F0aW9uL2F1dG9fbG9jYXRp
b24iLCJlbWJlci1yb3V0aW5nL3N5c3RlbS9nZW5lcmF0ZV9jb250cm9sbGVyIiwiZW1iZXItcm91
dGluZy9zeXN0ZW0vY29udHJvbGxlcl9mb3IiLCJlbWJlci1yb3V0aW5nL3N5c3RlbS9kc2wiLCJl
bWJlci1yb3V0aW5nL3N5c3RlbS9yb3V0ZXIiLCJlbWJlci1yb3V0aW5nL3N5c3RlbS9yb3V0ZSIs
ImVtYmVyLXJvdXRpbmcvc3lzdGVtL3F1ZXJ5X3BhcmFtcyIsImVtYmVyLXJvdXRpbmcvc2Vydmlj
ZXMvcm91dGluZyIsImVtYmVyLXJvdXRpbmcvc2VydmljZXMvcm91dGVyIiwiZW1iZXItcm91dGlu
Zy9zeXN0ZW0vY2FjaGUiLCJlbWJlci1yb3V0aW5nL2V4dC9ydW5fbG9vcCIsImVtYmVyLXJvdXRp
bmcvZXh0L2NvbnRyb2xsZXIiXSxmdW5jdGlvbihlLHQsbixyLGksbyxzLGEsdSxsLGMscCxmLGgs
ZCl7InVzZSBzdHJpY3QiCitlLkJ1Y2tldENhY2hlPWUuUm91dGVyU2VydmljZT1lLlJvdXRpbmdT
ZXJ2aWNlPWUuUXVlcnlQYXJhbXM9ZS5Sb3V0ZT1lLlJvdXRlcj1lLlJvdXRlckRTTD1lLmNvbnRy
b2xsZXJGb3I9ZS5nZW5lcmF0ZUNvbnRyb2xsZXJGYWN0b3J5PWUuZ2VuZXJhdGVDb250cm9sbGVy
PWUuQXV0b0xvY2F0aW9uPWUuSGlzdG9yeUxvY2F0aW9uPWUuSGFzaExvY2F0aW9uPWUuTm9uZUxv
Y2F0aW9uPWUuTG9jYXRpb249dm9pZCAwLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJMb2NhdGlv
biIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHQuZGVmYXVsdH19KSxPYmpl
Y3QuZGVmaW5lUHJvcGVydHkoZSwiTm9uZUxvY2F0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVu
Y3Rpb24oKXtyZXR1cm4gbi5kZWZhdWx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJIYXNo
TG9jYXRpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLmRlZmF1bHR9
fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIkhpc3RvcnlMb2NhdGlvbiIse2VudW1lcmFibGU6
ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkuZGVmYXVsdH19KSxPYmplY3QuZGVmaW5lUHJvcGVy
dHkoZSwiQXV0b0xvY2F0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4g
by5kZWZhdWx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJnZW5lcmF0ZUNvbnRyb2xsZXIi
LHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLmRlZmF1bHR9fSksT2JqZWN0
LmRlZmluZVByb3BlcnR5KGUsImdlbmVyYXRlQ29udHJvbGxlckZhY3RvcnkiLHtlbnVtZXJhYmxl
OiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLmdlbmVyYXRlQ29udHJvbGxlckZhY3Rvcnl9fSks
T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImNvbnRyb2xsZXJGb3IiLHtlbnVtZXJhYmxlOiEwLGdl
dDpmdW5jdGlvbigpe3JldHVybiBhLmRlZmF1bHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUs
IlJvdXRlckRTTCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHUuZGVmYXVs
dH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiUm91dGVyIix7ZW51bWVyYWJsZTohMCxnZXQ6
ZnVuY3Rpb24oKXtyZXR1cm4gbC5kZWZhdWx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJS
b3V0ZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGMuZGVmYXVsdH19KSxP
YmplY3QuZGVmaW5lUHJvcGVydHkoZSwiUXVlcnlQYXJhbXMiLHtlbnVtZXJhYmxlOiEwLGdldDpm
dW5jdGlvbigpe3JldHVybiBwLmRlZmF1bHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIlJv
dXRpbmdTZXJ2aWNlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZi5kZWZh
dWx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJSb3V0ZXJTZXJ2aWNlIix7ZW51bWVyYWJs
ZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaC5kZWZhdWx0fX0pLE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShlLCJCdWNrZXRDYWNoZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJu
IGQuZGVmYXVsdH19KX0pLGUoImVtYmVyLXJvdXRpbmcvbG9jYXRpb24vYXBpIixbImV4cG9ydHMi
LCJlbWJlci1kZWJ1ZyIsImVtYmVyLWVudmlyb25tZW50IiwiZW1iZXItcm91dGluZy9sb2NhdGlv
bi91dGlsIl0sZnVuY3Rpb24oZSx0LG4scil7InVzZSBzdHJpY3QiCitlLmRlZmF1bHQ9e2NyZWF0
ZTpmdW5jdGlvbihlKXt2YXIgdD1lJiZlLmltcGxlbWVudGF0aW9uLG49dGhpcy5pbXBsZW1lbnRh
dGlvbnNbdF0KK3JldHVybiBuLmNyZWF0ZS5hcHBseShuLGFyZ3VtZW50cyl9LGltcGxlbWVudGF0
aW9uczp7fSxfbG9jYXRpb246bi5lbnZpcm9ubWVudC5sb2NhdGlvbixfZ2V0SGFzaDpmdW5jdGlv
bigpe3JldHVybigwLHIuZ2V0SGFzaCkodGhpcy5sb2NhdGlvbil9fX0pLGUoImVtYmVyLXJvdXRp
bmcvbG9jYXRpb24vYXV0b19sb2NhdGlvbiIsWyJleHBvcnRzIiwiZW1iZXItdXRpbHMiLCJlbWJl
ci1tZXRhbCIsImVtYmVyLWRlYnVnIiwiZW1iZXItcnVudGltZSIsImVtYmVyLWVudmlyb25tZW50
IiwiZW1iZXItcm91dGluZy9sb2NhdGlvbi91dGlsIl0sZnVuY3Rpb24oZSx0LG4scixpLG8scyl7
InVzZSBzdHJpY3QiCitmdW5jdGlvbiBhKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciByLGksbyxz
PSgwLG4uZ2V0KSh0aGlzLCJjb25jcmV0ZUltcGxlbWVudGF0aW9uIikKK2ZvcihyPWFyZ3VtZW50
cy5sZW5ndGgsaT1BcnJheShyKSxvPTA7bzxyO28rKylpW29dPWFyZ3VtZW50c1tvXQorcmV0dXJu
KDAsdC50cnlJbnZva2UpKHMsZSxpKX19ZnVuY3Rpb24gdShlKXt2YXIgdCxuLHI9ZS5sb2NhdGlv
bixpPWUudXNlckFnZW50LG89ZS5oaXN0b3J5LGE9ZS5kb2N1bWVudE1vZGUsdT1lLmdsb2JhbCxw
PWUucm9vdFVSTCxmPSJub25lIixoPSExLGQ9KDAscy5nZXRGdWxsUGF0aCkocikKK2lmKCgwLHMu
c3VwcG9ydHNIaXN0b3J5KShpLG8pKXtpZih0PWwocCxyKSxkPT09dClyZXR1cm4iaGlzdG9yeSIK
KyIvIyI9PT1kLnN1YnN0cigwLDIpPyhvLnJlcGxhY2VTdGF0ZSh7cGF0aDp0fSxudWxsLHQpLGY9
Imhpc3RvcnkiKTooaD0hMCwoMCxzLnJlcGxhY2VQYXRoKShyLHQpKX1lbHNlKDAscy5zdXBwb3J0
c0hhc2hDaGFuZ2UpKGEsdSkmJihuPWMocCxyKSxkPT09bnx8Ii8iPT09ZCYmIi8jLyI9PT1uP2Y9
Imhhc2giOihoPSEwLCgwLHMucmVwbGFjZVBhdGgpKHIsbikpKQorcmV0dXJuIWgmJmZ9ZnVuY3Rp
b24gbChlLHQpe3ZhciBuPSgwLHMuZ2V0UGF0aCkodCkscj0oMCxzLmdldEhhc2gpKHQpLGk9KDAs
cy5nZXRRdWVyeSkodCksbz0obi5pbmRleE9mKGUpLHZvaWQgMCksYT12b2lkIDAKK3JldHVybiIj
LyI9PT1yLnN1YnN0cigwLDIpPyhhPXIuc3Vic3RyKDEpLnNwbGl0KCIjIiksbz1hLnNoaWZ0KCks
Ii8iPT09bi5jaGFyQXQobi5sZW5ndGgtMSkmJihvPW8uc3Vic3RyKDEpKSxuKz1vK2ksYS5sZW5n
dGgmJihuKz0iIyIrYS5qb2luKCIjIikpKTpuKz1pK3Isbn1mdW5jdGlvbiBjKGUsdCl7dmFyIG49
ZSxyPWwoZSx0KSxpPXIuc3Vic3RyKGUubGVuZ3RoKQorcmV0dXJuIiIhPT1pJiYoIi8iIT09aVsw
XSYmKGk9Ii8iK2kpLG4rPSIjIitpKSxufWUuZ2V0SGlzdG9yeVBhdGg9bCxlLmdldEhhc2hQYXRo
PWMsZS5kZWZhdWx0PWkuT2JqZWN0LmV4dGVuZCh7bG9jYXRpb246by5lbnZpcm9ubWVudC5sb2Nh
dGlvbixoaXN0b3J5Om8uZW52aXJvbm1lbnQuaGlzdG9yeSxnbG9iYWw6by5lbnZpcm9ubWVudC53
aW5kb3csdXNlckFnZW50Om8uZW52aXJvbm1lbnQudXNlckFnZW50LGNhbmNlbFJvdXRlclNldHVw
OiExLHJvb3RVUkw6Ii8iLGRldGVjdDpmdW5jdGlvbigpe3ZhciBlPXRoaXMucm9vdFVSTCxyPXUo
e2xvY2F0aW9uOnRoaXMubG9jYXRpb24saGlzdG9yeTp0aGlzLmhpc3RvcnksdXNlckFnZW50OnRo
aXMudXNlckFnZW50LHJvb3RVUkw6ZSxkb2N1bWVudE1vZGU6dGhpcy5kb2N1bWVudE1vZGUsZ2xv
YmFsOnRoaXMuZ2xvYmFsfSkKKyExPT09ciYmKCgwLG4uc2V0KSh0aGlzLCJjYW5jZWxSb3V0ZXJT
ZXR1cCIsITApLHI9Im5vbmUiKQordmFyIGk9KDAsdC5nZXRPd25lcikodGhpcykubG9va3VwKCJs
b2NhdGlvbjoiK3IpOygwLG4uc2V0KShpLCJyb290VVJMIixlKSwoMCxuLnNldCkodGhpcywiY29u
Y3JldGVJbXBsZW1lbnRhdGlvbiIsaSl9LGluaXRTdGF0ZTphKCJpbml0U3RhdGUiKSxnZXRVUkw6
YSgiZ2V0VVJMIiksc2V0VVJMOmEoInNldFVSTCIpLHJlcGxhY2VVUkw6YSgicmVwbGFjZVVSTCIp
LG9uVXBkYXRlVVJMOmEoIm9uVXBkYXRlVVJMIiksZm9ybWF0VVJMOmEoImZvcm1hdFVSTCIpLHdp
bGxEZXN0cm95OmZ1bmN0aW9uKCl7dmFyIGU9KDAsbi5nZXQpKHRoaXMsImNvbmNyZXRlSW1wbGVt
ZW50YXRpb24iKQorZSYmZS5kZXN0cm95KCl9fSl9KSxlKCJlbWJlci1yb3V0aW5nL2xvY2F0aW9u
L2hhc2hfbG9jYXRpb24iLFsiZXhwb3J0cyIsImVtYmVyLW1ldGFsIiwiZW1iZXItcnVudGltZSIs
ImVtYmVyLXJvdXRpbmcvbG9jYXRpb24vYXBpIl0sZnVuY3Rpb24oZSx0LG4scil7InVzZSBzdHJp
Y3QiCitlLmRlZmF1bHQ9bi5PYmplY3QuZXh0ZW5kKHtpbXBsZW1lbnRhdGlvbjoiaGFzaCIsaW5p
dDpmdW5jdGlvbigpeygwLHQuc2V0KSh0aGlzLCJsb2NhdGlvbiIsKDAsdC5nZXQpKHRoaXMsIl9s
b2NhdGlvbiIpfHx3aW5kb3cubG9jYXRpb24pLHRoaXMuX2hhc2hjaGFuZ2VIYW5kbGVyPXZvaWQg
MH0sZ2V0SGFzaDpyLmRlZmF1bHQuX2dldEhhc2gsZ2V0VVJMOmZ1bmN0aW9uKCl7dmFyIGU9dGhp
cy5nZXRIYXNoKCkuc3Vic3RyKDEpLHQ9ZQorcmV0dXJuIi8iIT09dFswXSYmKHQ9Ii8iLGUmJih0
Kz0iIyIrZSkpLHR9LHNldFVSTDpmdW5jdGlvbihlKXsoMCx0LmdldCkodGhpcywibG9jYXRpb24i
KS5oYXNoPWUsKDAsdC5zZXQpKHRoaXMsImxhc3RTZXRVUkwiLGUpfSxyZXBsYWNlVVJMOmZ1bmN0
aW9uKGUpeygwLHQuZ2V0KSh0aGlzLCJsb2NhdGlvbiIpLnJlcGxhY2UoIiMiK2UpLCgwLHQuc2V0
KSh0aGlzLCJsYXN0U2V0VVJMIixlKX0sb25VcGRhdGVVUkw6ZnVuY3Rpb24oZSl7dmFyIG49dGhp
cwordGhpcy5fcmVtb3ZlRXZlbnRMaXN0ZW5lcigpLHRoaXMuX2hhc2hjaGFuZ2VIYW5kbGVyPWZ1
bmN0aW9uKCl7KDAsdC5ydW4pKGZ1bmN0aW9uKCl7dmFyIHI9bi5nZXRVUkwoKTsoMCx0LmdldCko
biwibGFzdFNldFVSTCIpIT09ciYmKCgwLHQuc2V0KShuLCJsYXN0U2V0VVJMIixudWxsKSxlKHIp
KX0pfSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiaGFzaGNoYW5nZSIsdGhpcy5faGFzaGNoYW5n
ZUhhbmRsZXIpfSxmb3JtYXRVUkw6ZnVuY3Rpb24oZSl7cmV0dXJuIiMiK2V9LHdpbGxEZXN0cm95
OmZ1bmN0aW9uKCl7dGhpcy5fcmVtb3ZlRXZlbnRMaXN0ZW5lcigpfSxfcmVtb3ZlRXZlbnRMaXN0
ZW5lcjpmdW5jdGlvbigpe3RoaXMuX2hhc2hjaGFuZ2VIYW5kbGVyJiZ3aW5kb3cucmVtb3ZlRXZl
bnRMaXN0ZW5lcigiaGFzaGNoYW5nZSIsdGhpcy5faGFzaGNoYW5nZUhhbmRsZXIpfX0pfSksZSgi
ZW1iZXItcm91dGluZy9sb2NhdGlvbi9oaXN0b3J5X2xvY2F0aW9uIixbImV4cG9ydHMiLCJlbWJl
ci1tZXRhbCIsImVtYmVyLXJ1bnRpbWUiLCJlbWJlci1yb3V0aW5nL2xvY2F0aW9uL2FwaSJdLGZ1
bmN0aW9uKGUsdCxuLHIpeyJ1c2Ugc3RyaWN0IgorZnVuY3Rpb24gaSgpe3JldHVybiJ4eHh4eHh4
eC14eHh4LTR4eHgteXh4eC14eHh4eHh4eHh4eHgiLnJlcGxhY2UoL1t4eV0vZyxmdW5jdGlvbihl
KXt2YXIgdCxuCityZXR1cm4gdD0xNipNYXRoLnJhbmRvbSgpfDAsbj0ieCI9PT1lP3Q6MyZ0fDgs
bi50b1N0cmluZygxNil9KX12YXIgbz0hMQorZS5kZWZhdWx0PW4uT2JqZWN0LmV4dGVuZCh7aW1w
bGVtZW50YXRpb246Imhpc3RvcnkiLGluaXQ6ZnVuY3Rpb24oKXt0aGlzLl9zdXBlci5hcHBseSh0
aGlzLGFyZ3VtZW50cykKK3ZhciBlPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImJhc2UiKSxuPSIi
CitlJiYobj1lLmdldEF0dHJpYnV0ZSgiaHJlZiIpKSwoMCx0LnNldCkodGhpcywiYmFzZVVSTCIs
biksKDAsdC5zZXQpKHRoaXMsImxvY2F0aW9uIiwoMCx0LmdldCkodGhpcywibG9jYXRpb24iKXx8
d2luZG93LmxvY2F0aW9uKSx0aGlzLl9wb3BzdGF0ZUhhbmRsZXI9dm9pZCAwfSxpbml0U3RhdGU6
ZnVuY3Rpb24oKXt2YXIgZT0oMCx0LmdldCkodGhpcywiaGlzdG9yeSIpfHx3aW5kb3cuaGlzdG9y
eTsoMCx0LnNldCkodGhpcywiaGlzdG9yeSIsZSksZSYmInN0YXRlImluIGUmJih0aGlzLnN1cHBv
cnRzSGlzdG9yeT0hMCksdGhpcy5yZXBsYWNlU3RhdGUodGhpcy5mb3JtYXRVUkwodGhpcy5nZXRV
UkwoKSkpfSxyb290VVJMOiIvIixnZXRVUkw6ZnVuY3Rpb24oKXt2YXIgZT0oMCx0LmdldCkodGhp
cywibG9jYXRpb24iKSxuPWUucGF0aG5hbWUscj0oMCx0LmdldCkodGhpcywicm9vdFVSTCIpLGk9
KDAsdC5nZXQpKHRoaXMsImJhc2VVUkwiKQorcj1yLnJlcGxhY2UoL1wvJC8sIiIpLGk9aS5yZXBs
YWNlKC9cLyQvLCIiKQordmFyIG89bi5yZXBsYWNlKG5ldyBSZWdFeHAoIl4iK2krIig/PS98JCki
KSwiIikucmVwbGFjZShuZXcgUmVnRXhwKCJeIityKyIoPz0vfCQpIiksIiIpLnJlcGxhY2UoL1wv
XC8kL2csIi8iKQorcmV0dXJuIG8rPShlLnNlYXJjaHx8IiIpK3RoaXMuZ2V0SGFzaCgpfSxzZXRV
Ukw6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nZXRTdGF0ZSgpCitlPXRoaXMuZm9ybWF0VVJMKGUp
LHQmJnQucGF0aD09PWV8fHRoaXMucHVzaFN0YXRlKGUpfSxyZXBsYWNlVVJMOmZ1bmN0aW9uKGUp
e3ZhciB0PXRoaXMuZ2V0U3RhdGUoKQorZT10aGlzLmZvcm1hdFVSTChlKSx0JiZ0LnBhdGg9PT1l
fHx0aGlzLnJlcGxhY2VTdGF0ZShlKX0sZ2V0U3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5z
dXBwb3J0c0hpc3Rvcnk/KDAsdC5nZXQpKHRoaXMsImhpc3RvcnkiKS5zdGF0ZTp0aGlzLl9oaXN0
b3J5U3RhdGV9LHB1c2hTdGF0ZTpmdW5jdGlvbihlKXt2YXIgbj17cGF0aDplLHV1aWQ6aSgpfTso
MCx0LmdldCkodGhpcywiaGlzdG9yeSIpLnB1c2hTdGF0ZShuLG51bGwsZSksdGhpcy5faGlzdG9y
eVN0YXRlPW4sdGhpcy5fcHJldmlvdXNVUkw9dGhpcy5nZXRVUkwoKX0scmVwbGFjZVN0YXRlOmZ1
bmN0aW9uKGUpe3ZhciBuPXtwYXRoOmUsdXVpZDppKCl9OygwLHQuZ2V0KSh0aGlzLCJoaXN0b3J5
IikucmVwbGFjZVN0YXRlKG4sbnVsbCxlKSx0aGlzLl9oaXN0b3J5U3RhdGU9bix0aGlzLl9wcmV2
aW91c1VSTD10aGlzLmdldFVSTCgpfSxvblVwZGF0ZVVSTDpmdW5jdGlvbihlKXt2YXIgdD10aGlz
Cit0aGlzLl9yZW1vdmVFdmVudExpc3RlbmVyKCksdGhpcy5fcG9wc3RhdGVIYW5kbGVyPWZ1bmN0
aW9uKCl7KG98fChvPSEwLHQuZ2V0VVJMKCkhPT10Ll9wcmV2aW91c1VSTCkpJiZlKHQuZ2V0VVJM
KCkpfSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicG9wc3RhdGUiLHRoaXMuX3BvcHN0YXRlSGFu
ZGxlcil9LGZvcm1hdFVSTDpmdW5jdGlvbihlKXt2YXIgbj0oMCx0LmdldCkodGhpcywicm9vdFVS
TCIpLHI9KDAsdC5nZXQpKHRoaXMsImJhc2VVUkwiKQorcmV0dXJuIiIhPT1lPyhuPW4ucmVwbGFj
ZSgvXC8kLywiIikscj1yLnJlcGxhY2UoL1wvJC8sIiIpKToiLyI9PT1yWzBdJiYiLyI9PT1uWzBd
JiYocj1yLnJlcGxhY2UoL1wvJC8sIiIpKSxyK24rZX0sd2lsbERlc3Ryb3k6ZnVuY3Rpb24oKXt0
aGlzLl9yZW1vdmVFdmVudExpc3RlbmVyKCl9LGdldEhhc2g6ci5kZWZhdWx0Ll9nZXRIYXNoLF9y
ZW1vdmVFdmVudExpc3RlbmVyOmZ1bmN0aW9uKCl7dGhpcy5fcG9wc3RhdGVIYW5kbGVyJiZ3aW5k
b3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9wc3RhdGUiLHRoaXMuX3BvcHN0YXRlSGFuZGxlcil9
fSl9KSxlKCJlbWJlci1yb3V0aW5nL2xvY2F0aW9uL25vbmVfbG9jYXRpb24iLFsiZXhwb3J0cyIs
ImVtYmVyLW1ldGFsIiwiZW1iZXItZGVidWciLCJlbWJlci1ydW50aW1lIl0sZnVuY3Rpb24oZSx0
LG4scil7InVzZSBzdHJpY3QiCitlLmRlZmF1bHQ9ci5PYmplY3QuZXh0ZW5kKHtpbXBsZW1lbnRh
dGlvbjoibm9uZSIscGF0aDoiIixkZXRlY3Q6ZnVuY3Rpb24oKXt0aGlzLnJvb3RVUkx9LHJvb3RV
Ukw6Ii8iLGdldFVSTDpmdW5jdGlvbigpe3ZhciBlPSgwLHQuZ2V0KSh0aGlzLCJwYXRoIiksbj0o
MCx0LmdldCkodGhpcywicm9vdFVSTCIpCityZXR1cm4gbj1uLnJlcGxhY2UoL1wvJC8sIiIpLGUu
cmVwbGFjZShuZXcgUmVnRXhwKCJeIituKyIoPz0vfCQpIiksIiIpfSxzZXRVUkw6ZnVuY3Rpb24o
ZSl7KDAsdC5zZXQpKHRoaXMsInBhdGgiLGUpfSxvblVwZGF0ZVVSTDpmdW5jdGlvbihlKXt0aGlz
LnVwZGF0ZUNhbGxiYWNrPWV9LGhhbmRsZVVSTDpmdW5jdGlvbihlKXsoMCx0LnNldCkodGhpcywi
cGF0aCIsZSksdGhpcy51cGRhdGVDYWxsYmFjayhlKX0sZm9ybWF0VVJMOmZ1bmN0aW9uKGUpe3Zh
ciBuPSgwLHQuZ2V0KSh0aGlzLCJyb290VVJMIikKK3JldHVybiIiIT09ZSYmKG49bi5yZXBsYWNl
KC9cLyQvLCIiKSksbitlfX0pfSksZSgiZW1iZXItcm91dGluZy9sb2NhdGlvbi91dGlsIixbImV4
cG9ydHMiXSxmdW5jdGlvbihlKXsidXNlIHN0cmljdCIKK2Z1bmN0aW9uIHQoZSl7dmFyIHQ9ZS5w
YXRobmFtZQorcmV0dXJuIi8iIT09dFswXSYmKHQ9Ii8iK3QpLHR9ZnVuY3Rpb24gbihlKXtyZXR1
cm4gZS5zZWFyY2h9ZnVuY3Rpb24gcihlKXt2YXIgdD1lLmhyZWYsbj10LmluZGV4T2YoIiMiKQor
cmV0dXJuLTE9PT1uPyIiOnQuc3Vic3RyKG4pfWZ1bmN0aW9uIGkoZSl7dmFyIHQ9ZS5vcmlnaW4K
K3JldHVybiB0fHwodD1lLnByb3RvY29sKyIvLyIrZS5ob3N0bmFtZSxlLnBvcnQmJih0Kz0iOiIr
ZS5wb3J0KSksdH1lLmdldFBhdGg9dCxlLmdldFF1ZXJ5PW4sZS5nZXRIYXNoPXIsZS5nZXRGdWxs
UGF0aD1mdW5jdGlvbihlKXtyZXR1cm4gdChlKStuKGUpK3IoZSl9LGUuZ2V0T3JpZ2luPWksZS5z
dXBwb3J0c0hhc2hDaGFuZ2U9ZnVuY3Rpb24oZSx0KXtyZXR1cm4ib25oYXNoY2hhbmdlImluIHQm
Jih2b2lkIDA9PT1lfHxlPjcpfSxlLnN1cHBvcnRzSGlzdG9yeT1mdW5jdGlvbihlLHQpe3JldHVy
bigtMT09PWUuaW5kZXhPZigiQW5kcm9pZCAyLiIpJiYtMT09PWUuaW5kZXhPZigiQW5kcm9pZCA0
LjAiKXx8LTE9PT1lLmluZGV4T2YoIk1vYmlsZSBTYWZhcmkiKXx8LTEhPT1lLmluZGV4T2YoIkNo
cm9tZSIpfHwtMSE9PWUuaW5kZXhPZigiV2luZG93cyBQaG9uZSIpKSYmISEodCYmInB1c2hTdGF0
ZSJpbiB0KX0sZS5yZXBsYWNlUGF0aD1mdW5jdGlvbihlLHQpe2UucmVwbGFjZShpKGUpK3QpfX0p
LGUoImVtYmVyLXJvdXRpbmcvc2VydmljZXMvcm91dGVyIixbImV4cG9ydHMiLCJlbWJlci1ydW50
aW1lIl0sZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCIKK3ZhciBuPXQuU2VydmljZS5leHRlbmQo
e2N1cnJlbnRSb3V0ZU5hbWU6KDAsdC5yZWFkT25seSkoInJvdXRlci5jdXJyZW50Um91dGVOYW1l
IiksY3VycmVudFVSTDooMCx0LnJlYWRPbmx5KSgicm91dGVyLmN1cnJlbnRVUkwiKSxsb2NhdGlv
bjooMCx0LnJlYWRPbmx5KSgicm91dGVyLmxvY2F0aW9uIikscm9vdFVSTDooMCx0LnJlYWRPbmx5
KSgicm91dGVyLnJvb3RVUkwiKSxyb3V0ZXI6bnVsbCx0cmFuc2l0aW9uVG86ZnVuY3Rpb24oKXt2
YXIgZQorcmV0dXJuKGU9dGhpcy5yb3V0ZXIpLnRyYW5zaXRpb25Uby5hcHBseShlLGFyZ3VtZW50
cyl9LHJlcGxhY2VXaXRoOmZ1bmN0aW9uKCl7dmFyIGUKK3JldHVybihlPXRoaXMucm91dGVyKS5y
ZXBsYWNlV2l0aC5hcHBseShlLGFyZ3VtZW50cyl9LHVybEZvcjpmdW5jdGlvbigpe3ZhciBlCity
ZXR1cm4oZT10aGlzLnJvdXRlcikuZ2VuZXJhdGUuYXBwbHkoZSxhcmd1bWVudHMpfX0pCitlLmRl
ZmF1bHQ9bn0pLGUoImVtYmVyLXJvdXRpbmcvc2VydmljZXMvcm91dGluZyIsWyJleHBvcnRzIiwi
ZW1iZXItdXRpbHMiLCJlbWJlci1ydW50aW1lIiwiZW1iZXItbWV0YWwiLCJlbWJlci1yb3V0aW5n
L3V0aWxzIl0sZnVuY3Rpb24oZSx0LG4scixpKXsidXNlIHN0cmljdCIKK2Z1bmN0aW9uIG8oZSx0
KXt2YXIgbixyPTAKK2ZvcihuPTA7bjx0Lmxlbmd0aCYmKHIrPXRbbl0ubmFtZXMubGVuZ3RoLHRb
bl0uaGFuZGxlciE9PWUpO24rKyk7cmV0dXJuIHJ9ZS5kZWZhdWx0PW4uU2VydmljZS5leHRlbmQo
e3JvdXRlcjpudWxsLHRhcmdldFN0YXRlOigwLG4ucmVhZE9ubHkpKCJyb3V0ZXIudGFyZ2V0U3Rh
dGUiKSxjdXJyZW50U3RhdGU6KDAsbi5yZWFkT25seSkoInJvdXRlci5jdXJyZW50U3RhdGUiKSxj
dXJyZW50Um91dGVOYW1lOigwLG4ucmVhZE9ubHkpKCJyb3V0ZXIuY3VycmVudFJvdXRlTmFtZSIp
LGN1cnJlbnRQYXRoOigwLG4ucmVhZE9ubHkpKCJyb3V0ZXIuY3VycmVudFBhdGgiKSxhdmFpbGFi
bGVSb3V0ZXM6ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXMoKDAsci5nZXQpKHRoaXMsInJv
dXRlciIpLnJvdXRlci5yZWNvZ25pemVyLm5hbWVzKX0saGFzUm91dGU6ZnVuY3Rpb24oZSl7cmV0
dXJuKDAsci5nZXQpKHRoaXMsInJvdXRlciIpLmhhc1JvdXRlKGUpfSx0cmFuc2l0aW9uVG86ZnVu
Y3Rpb24oZSx0LG4saSl7dmFyIG89KDAsci5nZXQpKHRoaXMsInJvdXRlciIpLHM9by5fZG9UcmFu
c2l0aW9uKGUsdCxuKQorcmV0dXJuIGkmJnMubWV0aG9kKCJyZXBsYWNlIiksc30sbm9ybWFsaXpl
UXVlcnlQYXJhbXM6ZnVuY3Rpb24oZSx0LG4peygwLHIuZ2V0KSh0aGlzLCJyb3V0ZXIiKS5fcHJl
cGFyZVF1ZXJ5UGFyYW1zKGUsdCxuKX0sZ2VuZXJhdGVVUkw6ZnVuY3Rpb24oZSxuLG8pe3ZhciBz
PSgwLHIuZ2V0KSh0aGlzLCJyb3V0ZXIiKQoraWYocy5fcm91dGVyTWljcm9saWIpe3ZhciBhPXt9
OygwLHQuYXNzaWduKShhLG8pLHRoaXMubm9ybWFsaXplUXVlcnlQYXJhbXMoZSxuLGEpCit2YXIg
dT0oMCxpLnJvdXRlQXJncykoZSxuLGEpCityZXR1cm4gcy5nZW5lcmF0ZS5hcHBseShzLHUpfX0s
aXNBY3RpdmVGb3JSb3V0ZTpmdW5jdGlvbihlLHQsbixpLHMpe3ZhciBhPSgwLHIuZ2V0KSh0aGlz
LCJyb3V0ZXIiKSx1PWEuX3JvdXRlck1pY3JvbGliLnJlY29nbml6ZXIuaGFuZGxlcnNGb3Iobiks
bD11W3UubGVuZ3RoLTFdLmhhbmRsZXIsYz1vKG4sdSkKK3JldHVybiBlLmxlbmd0aD5jJiYobj1s
KSxpLmlzQWN0aXZlSW50ZW50KG4sZSx0LCFzKX19KX0pLGUoImVtYmVyLXJvdXRpbmcvc3lzdGVt
L2NhY2hlIixbImV4cG9ydHMiLCJlbWJlci1ydW50aW1lIl0sZnVuY3Rpb24oZSx0KXsidXNlIHN0
cmljdCIKK2UuZGVmYXVsdD10Lk9iamVjdC5leHRlbmQoe2luaXQ6ZnVuY3Rpb24oKXt0aGlzLmNh
Y2hlPU9iamVjdC5jcmVhdGUobnVsbCl9LGhhczpmdW5jdGlvbihlKXtyZXR1cm4hIXRoaXMuY2Fj
aGVbZV19LHN0YXNoOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzLmNhY2hlW2VdCityfHwocj10
aGlzLmNhY2hlW2VdPU9iamVjdC5jcmVhdGUobnVsbCkpLHJbdF09bn0sbG9va3VwOmZ1bmN0aW9u
KGUsdCxuKXt2YXIgcj10aGlzLmNhY2hlCitpZighdGhpcy5oYXMoZSkpcmV0dXJuIG4KK3ZhciBp
PXJbZV0KK3JldHVybiB0IGluIGkmJnZvaWQgMCE9PWlbdF0/aVt0XTpufX0pfSksZSgiZW1iZXIt
cm91dGluZy9zeXN0ZW0vY29udHJvbGxlcl9mb3IiLFsiZXhwb3J0cyJdLGZ1bmN0aW9uKGUpeyJ1
c2Ugc3RyaWN0IgorZS5kZWZhdWx0PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZS5sb29rdXAoImNv
bnRyb2xsZXI6Iit0LG4pfX0pLGUoImVtYmVyLXJvdXRpbmcvc3lzdGVtL2RzbCIsWyJleHBvcnRz
IiwiZW1iZXItdXRpbHMiLCJlbWJlci1kZWJ1ZyJdLGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmlj
dCIKK2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUucGFyZW50JiYiYXBwbGljYXRpb24iIT09ZS5wYXJl
bnR9ZnVuY3Rpb24gaShlLHQsbil7cmV0dXJuIHIoZSkmJiEwIT09bj9lLnBhcmVudCsiLiIrdDp0
fWZ1bmN0aW9uIG8oZSx0KXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3Vt
ZW50c1syXT9hcmd1bWVudHNbMl06e30scj1hcmd1bWVudHNbM10sbz1pKGUsdCxuLnJlc2V0TmFt
ZXNwYWNlKQorInN0cmluZyIhPXR5cGVvZiBuLnBhdGgmJihuLnBhdGg9Ii8iK3QpLGUucHVzaChu
LnBhdGgsbyxyLG4uc2VyaWFsaXplKX12YXIgcz0wLGE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUs
dCl7dGhpcy5wYXJlbnQ9ZSx0aGlzLmVuYWJsZUxvYWRpbmdTdWJzdGF0ZXM9dCYmdC5lbmFibGVM
b2FkaW5nU3Vic3RhdGVzLHRoaXMubWF0Y2hlcz1bXSx0aGlzLmV4cGxpY2l0SW5kZXg9dm9pZCAw
LHRoaXMub3B0aW9ucz10fXJldHVybiBlLnByb3RvdHlwZS5yb3V0ZT1mdW5jdGlvbih0KXt2YXIg
bixyLHM9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRz
WzFdOnt9LGE9YXJndW1lbnRzWzJdLHU9Ii9fdW51c2VkX2R1bW15X2Vycm9yX3BhdGhfcm91dGVf
Iit0KyIvOmVycm9yIgorMj09PWFyZ3VtZW50cy5sZW5ndGgmJiJmdW5jdGlvbiI9PXR5cGVvZiBz
JiYoYT1zLHM9e30pLHRoaXMuZW5hYmxlTG9hZGluZ1N1YnN0YXRlcyYmKG8odGhpcyx0KyJfbG9h
ZGluZyIse3Jlc2V0TmFtZXNwYWNlOnMucmVzZXROYW1lc3BhY2V9KSxvKHRoaXMsdCsiX2Vycm9y
Iix7cmVzZXROYW1lc3BhY2U6cy5yZXNldE5hbWVzcGFjZSxwYXRoOnV9KSksYT8obj1pKHRoaXMs
dCxzLnJlc2V0TmFtZXNwYWNlKSxyPW5ldyBlKG4sdGhpcy5vcHRpb25zKSxvKHIsImxvYWRpbmci
KSxvKHIsImVycm9yIix7cGF0aDp1fSksYS5jYWxsKHIpLG8odGhpcyx0LHMsci5nZW5lcmF0ZSgp
KSk6byh0aGlzLHQscyl9LGUucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oZSxuLHIsaSl7dmFyIG8s
cyxhPW4uc3BsaXQoIi4iKQoraWYodGhpcy5vcHRpb25zLmVuZ2luZUluZm8pbz1uLnNsaWNlKHRo
aXMub3B0aW9ucy5lbmdpbmVJbmZvLmZ1bGxOYW1lLmxlbmd0aCsxKSxzPSgwLHQuYXNzaWduKSh7
bG9jYWxGdWxsTmFtZTpvfSx0aGlzLm9wdGlvbnMuZW5naW5lSW5mbyksaSYmKHMuc2VyaWFsaXpl
TWV0aG9kPWkpLHRoaXMub3B0aW9ucy5hZGRSb3V0ZUZvckVuZ2luZShuLHMpCitlbHNlIGlmKGkp
dGhyb3cgbmV3IEVycm9yKCJEZWZpbmluZyBhIHJvdXRlIHNlcmlhbGl6ZXIgb24gcm91dGUgJyIr
bisiJyBvdXRzaWRlIGFuIEVuZ2luZSBpcyBub3QgYWxsb3dlZC4iKQorIiIhPT1lJiYiLyIhPT1l
JiYiaW5kZXgiIT09YVthLmxlbmd0aC0xXXx8KHRoaXMuZXhwbGljaXRJbmRleD0hMCksdGhpcy5t
YXRjaGVzLnB1c2goW2UsbixyXSl9LGUucHJvdG90eXBlLnJlc291cmNlPWZ1bmN0aW9uKGUpe3Zh
ciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sx
XTp7fSxuPWFyZ3VtZW50c1syXQorMj09PWFyZ3VtZW50cy5sZW5ndGgmJiJmdW5jdGlvbiI9PXR5
cGVvZiB0JiYobj10LHQ9e30pLHQucmVzZXROYW1lc3BhY2U9ITAsdGhpcy5yb3V0ZShlLHQsbil9
LGUucHJvdG90eXBlLmdlbmVyYXRlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5tYXRjaGVzCityZXR1
cm4gdGhpcy5leHBsaWNpdEluZGV4fHx0aGlzLnJvdXRlKCJpbmRleCIse3BhdGg6Ii8ifSksZnVu
Y3Rpb24odCl7dmFyIG4scgorZm9yKG49MDtuPGUubGVuZ3RoO24rKylyPWVbbl0sdChyWzBdKS50
byhyWzFdLHJbMl0pfX0sZS5wcm90b3R5cGUubW91bnQ9ZnVuY3Rpb24obil7dmFyIHIsYSx1LGws
YyxwLGYsaD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVu
dHNbMV06e30sZD10aGlzLm9wdGlvbnMucmVzb2x2ZVJvdXRlTWFwKG4pLG09bgoraC5hcyYmKG09
aC5hcykKK3ZhciBnPWkodGhpcyxtLGgucmVzZXROYW1lc3BhY2UpLHk9e25hbWU6bixpbnN0YW5j
ZUlkOnMrKyxtb3VudFBvaW50OmcsZnVsbE5hbWU6Z30sdj1oLnBhdGgKKyJzdHJpbmciIT10eXBl
b2YgdiYmKHY9Ii8iK20pCit2YXIgYj12b2lkIDAsXz0iL191bnVzZWRfZHVtbXlfZXJyb3JfcGF0
aF9yb3V0ZV8iK20rIi86ZXJyb3IiCitkJiYocj0hMSxhPXRoaXMub3B0aW9ucy5lbmdpbmVJbmZv
LGEmJihyPSEwLHRoaXMub3B0aW9ucy5lbmdpbmVJbmZvPXkpLHU9KDAsdC5hc3NpZ24pKHtlbmdp
bmVJbmZvOnl9LHRoaXMub3B0aW9ucyksbD1uZXcgZShnLHUpLG8obCwibG9hZGluZyIpLG8obCwi
ZXJyb3IiLHtwYXRoOl99KSxkLmNsYXNzLmNhbGwobCksYj1sLmdlbmVyYXRlKCksciYmKHRoaXMu
b3B0aW9ucy5lbmdpbmVJbmZvPWEpKQordmFyIHc9KDAsdC5hc3NpZ24pKHtsb2NhbEZ1bGxOYW1l
OiJhcHBsaWNhdGlvbiJ9LHkpCit0aGlzLmVuYWJsZUxvYWRpbmdTdWJzdGF0ZXMmJihjPW0rIl9s
b2FkaW5nIixwPSJhcHBsaWNhdGlvbl9sb2FkaW5nIixmPSgwLHQuYXNzaWduKSh7bG9jYWxGdWxs
TmFtZTpwfSx5KSxvKHRoaXMsYyx7cmVzZXROYW1lc3BhY2U6aC5yZXNldE5hbWVzcGFjZX0pLHRo
aXMub3B0aW9ucy5hZGRSb3V0ZUZvckVuZ2luZShjLGYpLGM9bSsiX2Vycm9yIixwPSJhcHBsaWNh
dGlvbl9lcnJvciIsZj0oMCx0LmFzc2lnbikoe2xvY2FsRnVsbE5hbWU6cH0seSksbyh0aGlzLGMs
e3Jlc2V0TmFtZXNwYWNlOmgucmVzZXROYW1lc3BhY2UscGF0aDpffSksdGhpcy5vcHRpb25zLmFk
ZFJvdXRlRm9yRW5naW5lKGMsZikpLHRoaXMub3B0aW9ucy5hZGRSb3V0ZUZvckVuZ2luZShnLHcp
LHRoaXMucHVzaCh2LGcsYil9LGV9KCkKK2UuZGVmYXVsdD1hLGEubWFwPWZ1bmN0aW9uKGUpe3Zh
ciB0PW5ldyBhCityZXR1cm4gZS5jYWxsKHQpLHR9fSksZSgiZW1iZXItcm91dGluZy9zeXN0ZW0v
Z2VuZXJhdGVfY29udHJvbGxlciIsWyJleHBvcnRzIiwiZW1iZXItbWV0YWwiLCJlbWJlci1kZWJ1
ZyJdLGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IgorZnVuY3Rpb24gdChlLHQpe3ZhciBuPWUuZmFj
dG9yeUZvcigiY29udHJvbGxlcjpiYXNpYyIpLmNsYXNzCityZXR1cm4gbj1uLmV4dGVuZCh7dG9T
dHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iKGdlbmVyYXRlZCAiK3QrIiBjb250cm9sbGVyKSJ9fSks
ZS5yZWdpc3RlcigiY29udHJvbGxlcjoiK3Qsbiksbn1lLmdlbmVyYXRlQ29udHJvbGxlckZhY3Rv
cnk9dCxlLmRlZmF1bHQ9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdChlLG4pLGUubG9va3VwKCJjb250
cm9sbGVyOiIrbil9fSksZSgiZW1iZXItcm91dGluZy9zeXN0ZW0vcXVlcnlfcGFyYW1zIixbImV4
cG9ydHMiLCJlbWJlci1ydW50aW1lIl0sZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCIKK2UuZGVm
YXVsdD10Lk9iamVjdC5leHRlbmQoe2lzUXVlcnlQYXJhbXM6ITAsdmFsdWVzOm51bGx9KX0pLGUo
ImVtYmVyLXJvdXRpbmcvc3lzdGVtL3JvdXRlIixbImV4cG9ydHMiLCJlbWJlci11dGlscyIsImVt
YmVyLW1ldGFsIiwiZW1iZXItZGVidWciLCJlbWJlci1ydW50aW1lIiwiZW1iZXItcm91dGluZy9z
eXN0ZW0vZ2VuZXJhdGVfY29udHJvbGxlciIsImVtYmVyLXJvdXRpbmcvdXRpbHMiXSxmdW5jdGlv
bihlLHQsbixyLGksbyxzKXsidXNlIHN0cmljdCIKK2Z1bmN0aW9uIGEoKXtyZXR1cm4gdGhpc31m
dW5jdGlvbiB1KGUsdCl7aWYoISh0Lmxlbmd0aDwxKSYmZSl7dmFyIHI9dFswXSxpPXt9CityZXR1
cm4gMT09PXQubGVuZ3RoP3IgaW4gZT9pW3JdPSgwLG4uZ2V0KShlLHIpOi9faWQkLy50ZXN0KHIp
JiYoaVtyXT0oMCxuLmdldCkoZSwiaWQiKSk6aT0oMCxuLmdldFByb3BlcnRpZXMpKGUsdCksaX19
ZnVuY3Rpb24gbChlKXt2YXIgdD1jKGUsZS5yb3V0ZXIuX3JvdXRlck1pY3JvbGliLnN0YXRlLmhh
bmRsZXJJbmZvcywtMSkKK3JldHVybiB0JiZ0LmhhbmRsZXJ9ZnVuY3Rpb24gYyhlLHQpe3ZhciBu
LHI9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJd
OjAKK2lmKHQpe2ZvcihuPTA7bjx0Lmxlbmd0aDtuKyspaWYodFtuXS5oYW5kbGVyPT09ZSlyZXR1
cm4gdFtuK3JdfX1mdW5jdGlvbiBwKGUsbixpLG8scyl7dmFyIGEsdT1zJiZzLmludG8mJnMuaW50
by5yZXBsYWNlKC9cLy9nLCIuIiksYz1zJiZzLm91dGxldHx8Im1haW4iLHA9dm9pZCAwLGY9dm9p
ZCAwCitvPyhwPW8ucmVwbGFjZSgvXC8vZywiLiIpLGY9cCk6KHA9ZS5yb3V0ZU5hbWUsZj1lLnRl
bXBsYXRlTmFtZXx8cCkKK3ZhciBoPSgwLHQuZ2V0T3duZXIpKGUpLGQ9cyYmcy5jb250cm9sbGVy
CitpZihkfHwoZD1uP2gubG9va3VwKCJjb250cm9sbGVyOiIrcCl8fGUuY29udHJvbGxlck5hbWV8
fGUucm91dGVOYW1lOmUuY29udHJvbGxlck5hbWV8fGgubG9va3VwKCJjb250cm9sbGVyOiIrcCkp
LCJzdHJpbmciPT10eXBlb2YgZCYmKGE9ZCwhKGQ9aC5sb29rdXAoImNvbnRyb2xsZXI6IithKSkp
KXRocm93IG5ldyByLkVycm9yKCJZb3UgcGFzc2VkIGBjb250cm9sbGVyOiAnIithKyInYCBpbnRv
IHRoZSBgcmVuZGVyYCBtZXRob2QsIGJ1dCBubyBzdWNoIGNvbnRyb2xsZXIgY291bGQgYmUgZm91
bmQuIikKK2lmKHMmJi0xIT09T2JqZWN0LmtleXMocykuaW5kZXhPZigib3V0bGV0IikmJnZvaWQg
MD09PXMub3V0bGV0KXRocm93IG5ldyByLkVycm9yKCJZb3UgcGFzc2VkIHVuZGVmaW5lZCBhcyB0
aGUgb3V0bGV0IG5hbWUuIikKK3MmJnMubW9kZWwmJmQuc2V0KCJtb2RlbCIscy5tb2RlbCkKK3Zh
ciBtPWgubG9va3VwKCJ0ZW1wbGF0ZToiK2YpLGc9dm9pZCAwCityZXR1cm4gdSYmKGc9bChlKSkm
JnU9PT1nLnJvdXRlTmFtZSYmKHU9dm9pZCAwKSx7b3duZXI6aCxpbnRvOnUsb3V0bGV0OmMsbmFt
ZTpwLGNvbnRyb2xsZXI6ZCx0ZW1wbGF0ZTptfHxlLl90b3BMZXZlbFZpZXdUZW1wbGF0ZSxWaWV3
Q2xhc3M6dm9pZCAwfX1mdW5jdGlvbiBmKGUsbil7cmV0dXJuIG4uZnVsbFF1ZXJ5UGFyYW1zP24u
ZnVsbFF1ZXJ5UGFyYW1zOihuLmZ1bGxRdWVyeVBhcmFtcz17fSwoMCx0LmFzc2lnbikobi5mdWxs
UXVlcnlQYXJhbXMsbi5xdWVyeVBhcmFtcyksZS5fZGVzZXJpYWxpemVRdWVyeVBhcmFtcyhuLmhh
bmRsZXJJbmZvcyxuLmZ1bGxRdWVyeVBhcmFtcyksbi5mdWxsUXVlcnlQYXJhbXMpfWZ1bmN0aW9u
IGgoZSx0KXt0LnF1ZXJ5UGFyYW1zRm9yPXQucXVlcnlQYXJhbXNGb3J8fHt9Cit2YXIgcixpLG8s
cz1lLmZ1bGxSb3V0ZU5hbWUKK2lmKHQucXVlcnlQYXJhbXNGb3Jbc10pcmV0dXJuIHQucXVlcnlQ
YXJhbXNGb3Jbc10KK3ZhciBhPWYoZS5yb3V0ZXIsdCksdT10LnF1ZXJ5UGFyYW1zRm9yW3NdPXt9
LGw9KDAsbi5nZXQpKGUsIl9xcCIpLGM9bC5xcHMKK2ZvcihyPTA7cjxjLmxlbmd0aDsrK3IpaT1j
W3JdLG89aS5wcm9wIGluIGEsdVtpLnByb3BdPW8/YVtpLnByb3BdOmQoaS5kZWZhdWx0VmFsdWUp
CityZXR1cm4gdX1mdW5jdGlvbiBkKGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpPygwLGkuQSko
ZS5zbGljZSgpKTplfWZ1bmN0aW9uIG0oZSxuKXt2YXIgcixpLG89dm9pZCAwLHM9e30KK289e2Rl
ZmF1bHRWYWx1ZTohMCx0eXBlOiEwLHNjb3BlOiEwLGFzOiEwfQorZm9yKHZhciBhIGluIGUpZS5o
YXNPd25Qcm9wZXJ0eShhKSYmKHI9e30sKDAsdC5hc3NpZ24pKHIsZVthXSksKDAsdC5hc3NpZ24p
KHIsblthXSksc1thXT1yLG9bYV09ITApCitmb3IodmFyIHUgaW4gbiluLmhhc093blByb3BlcnR5
KHUpJiYhb1t1XSYmKGk9e30sKDAsdC5hc3NpZ24pKGksblt1XSxlW3VdKSxzW3VdPWkpCityZXR1
cm4gc31mdW5jdGlvbiBnKGUsdCl7dC5mb3JFYWNoKGZ1bmN0aW9uKHQpe2UuYWRkT2JzZXJ2ZXIo
dCsiLltdIixlLGUuX3FwQ2hhbmdlZCl9KX1mdW5jdGlvbiB5KGUsdCl7dmFyIG4KK3JldHVybiBl
LnJvdXRhYmxlPyhuPWUubW91bnRQb2ludCwiYXBwbGljYXRpb24iPT09dD9uOm4rIi4iK3QpOnR9
ZS5kZWZhdWx0U2VyaWFsaXplPXUsZS5oYXNEZWZhdWx0U2VyaWFsaXplPWZ1bmN0aW9uKGUpe3Jl
dHVybiEhZS5zZXJpYWxpemVbYl19Cit2YXIgdj1BcnJheS5wcm90b3R5cGUuc2xpY2UsYj0oMCx0
LnN5bWJvbCkoIkRFRkFVTFRfU0VSSUFMSVpFIikKK3VbYl09ITAKK3ZhciBfPWkuT2JqZWN0LmV4
dGVuZChpLkFjdGlvbkhhbmRsZXIsaS5FdmVudGVkLHtxdWVyeVBhcmFtczp7fSxfc2V0Um91dGVO
YW1lOmZ1bmN0aW9uKGUpe3RoaXMucm91dGVOYW1lPWUsdGhpcy5mdWxsUm91dGVOYW1lPXkoKDAs
dC5nZXRPd25lcikodGhpcyksZSl9LF9xcDooMCxuLmNvbXB1dGVkKShmdW5jdGlvbigpe3ZhciBl
LHIsYSx1LGwsYyxwLGYsaCxkLGcseT10aGlzLHY9dm9pZCAwLGI9dGhpcy5jb250cm9sbGVyTmFt
ZXx8dGhpcy5yb3V0ZU5hbWUsXz0oMCx0LmdldE93bmVyKSh0aGlzKSx3PV8ubG9va3VwKCJjb250
cm9sbGVyOiIrYiksRT0oMCxuLmdldCkodGhpcywicXVlcnlQYXJhbXMiKSx4PSEhT2JqZWN0Lmtl
eXMoRSkubGVuZ3RoCit3PyhlPSgwLG4uZ2V0KSh3LCJxdWVyeVBhcmFtcyIpfHx7fSxyPSgwLHMu
bm9ybWFsaXplQ29udHJvbGxlclF1ZXJ5UGFyYW1zKShlKSx2PW0ocixFKSk6eCYmKHc9KDAsby5k
ZWZhdWx0KSgoMCx0LmdldE93bmVyKSh0aGlzKSxiKSx2PUUpCit2YXIgQz1bXSxPPXt9LEE9W10K
K2Zvcih2YXIgVCBpbiB2KXYuaGFzT3duUHJvcGVydHkoVCkmJiJ1bmtub3duUHJvcGVydHkiIT09
VCYmIl9zdXBlciIhPT1UJiYoYT12W1RdLHU9YS5zY29wZXx8Im1vZGVsIixsPXZvaWQgMCwiY29u
dHJvbGxlciI9PT11JiYobD1bXSksYz1hLmFzfHx0aGlzLnNlcmlhbGl6ZVF1ZXJ5UGFyYW1LZXko
VCkscD0oMCxuLmdldCkodyxUKSxBcnJheS5pc0FycmF5KHApJiYocD0oMCxpLkEpKHAuc2xpY2Uo
KSkpLGY9YS50eXBlfHwoMCxpLnR5cGVPZikocCksaD10aGlzLnNlcmlhbGl6ZVF1ZXJ5UGFyYW0o
cCxjLGYpLGQ9YisiOiIrVCxnPXt1bmRlY29yYXRlZERlZmF1bHRWYWx1ZTooMCxuLmdldCkodyxU
KSxkZWZhdWx0VmFsdWU6cCxzZXJpYWxpemVkRGVmYXVsdFZhbHVlOmgsc2VyaWFsaXplZFZhbHVl
OmgsdHlwZTpmLHVybEtleTpjLHByb3A6VCxzY29wZWRQcm9wZXJ0eU5hbWU6ZCxjb250cm9sbGVy
TmFtZTpiLHJvdXRlOnRoaXMscGFydHM6bCx2YWx1ZXM6bnVsbCxzY29wZTp1fSxPW1RdPU9bY109
T1tkXT1nLEMucHVzaChnKSxBLnB1c2goVCkpCityZXR1cm57cXBzOkMsbWFwOk8scHJvcGVydHlO
YW1lczpBLHN0YXRlczp7aW5hY3RpdmU6ZnVuY3Rpb24oZSx0KXt2YXIgbj1PW2VdCit5Ll9xcENo
YW5nZWQoZSx0LG4pfSxhY3RpdmU6ZnVuY3Rpb24oZSx0KXt2YXIgbj1PW2VdCityZXR1cm4geS5f
cXBDaGFuZ2VkKGUsdCxuKSx5Ll9hY3RpdmVRUENoYW5nZWQoT1tlXSx0KX0sYWxsb3dPdmVycmlk
ZXM6ZnVuY3Rpb24oZSx0KXt2YXIgbj1PW2VdCityZXR1cm4geS5fcXBDaGFuZ2VkKGUsdCxuKSx5
Ll91cGRhdGluZ1FQQ2hhbmdlZChPW2VdKX19fX0pLF9uYW1lczpudWxsLF9zdGFzaE5hbWVzOmZ1
bmN0aW9uKGUsdCl7aWYoIXRoaXMuX25hbWVzKXt2YXIgcixpLG8scz10aGlzLl9uYW1lcz1lLl9u
YW1lcworcy5sZW5ndGh8fChlPXQscz1lJiZlLl9uYW1lc3x8W10pCit2YXIgYT0oMCxuLmdldCko
dGhpcywiX3FwLnFwcyIpLHU9bmV3IEFycmF5KHMubGVuZ3RoKQorZm9yKHI9MDtyPHMubGVuZ3Ro
Oysrcil1W3JdPWUubmFtZSsiLiIrc1tyXQorZm9yKGk9MDtpPGEubGVuZ3RoOysraSlvPWFbaV0s
Im1vZGVsIj09PW8uc2NvcGUmJihvLnBhcnRzPXUpfX0sX2FjdGl2ZVFQQ2hhbmdlZDpmdW5jdGlv
bihlLHQpe3RoaXMucm91dGVyLl9hY3RpdmVRUENoYW5nZWQoZS5zY29wZWRQcm9wZXJ0eU5hbWUs
dCl9LF91cGRhdGluZ1FQQ2hhbmdlZDpmdW5jdGlvbihlKXt0aGlzLnJvdXRlci5fdXBkYXRpbmdR
UENoYW5nZWQoZS51cmxLZXkpfSxtZXJnZWRQcm9wZXJ0aWVzOlsicXVlcnlQYXJhbXMiXSxwYXJh
bXNGb3I6ZnVuY3Rpb24oZSl7dmFyIG49KDAsdC5nZXRPd25lcikodGhpcykubG9va3VwKCJyb3V0
ZToiK2UpCitpZighbilyZXR1cm57fQordmFyIHI9dGhpcy5yb3V0ZXIuX3JvdXRlck1pY3JvbGli
LmFjdGl2ZVRyYW5zaXRpb24saT1yP3Iuc3RhdGU6dGhpcy5yb3V0ZXIuX3JvdXRlck1pY3JvbGli
LnN0YXRlLG89bi5mdWxsUm91dGVOYW1lLHM9KDAsdC5hc3NpZ24pKHt9LGkucGFyYW1zW29dKSxh
PWgobixpKQorcmV0dXJuIE9iamVjdC5rZXlzKGEpLnJlZHVjZShmdW5jdGlvbihlLHQpe3JldHVy
biBlW3RdPWFbdF0sZX0scyl9LHNlcmlhbGl6ZVF1ZXJ5UGFyYW1LZXk6ZnVuY3Rpb24oZSl7cmV0
dXJuIGV9LHNlcmlhbGl6ZVF1ZXJ5UGFyYW06ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0aGlzLnJv
dXRlci5fc2VyaWFsaXplUXVlcnlQYXJhbShlLG4pfSxkZXNlcmlhbGl6ZVF1ZXJ5UGFyYW06ZnVu
Y3Rpb24oZSx0LG4pe3JldHVybiB0aGlzLnJvdXRlci5fZGVzZXJpYWxpemVRdWVyeVBhcmFtKGUs
bil9LF9vcHRpb25zRm9yUXVlcnlQYXJhbTpmdW5jdGlvbihlKXtyZXR1cm4oMCxuLmdldCkodGhp
cywicXVlcnlQYXJhbXMuIitlLnVybEtleSl8fCgwLG4uZ2V0KSh0aGlzLCJxdWVyeVBhcmFtcy4i
K2UucHJvcCl8fHt9fSxyZXNldENvbnRyb2xsZXI6YSxleGl0OmZ1bmN0aW9uKCl7dGhpcy5kZWFj
dGl2YXRlKCksdGhpcy50cmlnZ2VyKCJkZWFjdGl2YXRlIiksdGhpcy50ZWFyZG93blZpZXdzKCl9
LF9yZXNldDpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuY29udHJvbGxlcgorci5fcXBEZWxlZ2F0
ZT0oMCxuLmdldCkodGhpcywiX3FwLnN0YXRlcy5pbmFjdGl2ZSIpLHRoaXMucmVzZXRDb250cm9s
bGVyKHIsZSx0KX0sZW50ZXI6ZnVuY3Rpb24oKXt0aGlzLmNvbm5lY3Rpb25zPVtdLHRoaXMuYWN0
aXZhdGUoKSx0aGlzLnRyaWdnZXIoImFjdGl2YXRlIil9LHRlbXBsYXRlTmFtZTpudWxsLGNvbnRy
b2xsZXJOYW1lOm51bGwsYWN0aW9uczp7cXVlcnlQYXJhbXNEaWRDaGFuZ2U6ZnVuY3Rpb24oZSx0
LHIpe3ZhciBpLG8scz0oMCxuLmdldCkodGhpcywiX3FwIikubWFwLGE9T2JqZWN0LmtleXMoZSku
Y29uY2F0KE9iamVjdC5rZXlzKHIpKQorZm9yKGk9MDtpPGEubGVuZ3RoOysraSlpZigobz1zW2Fb
aV1dKSYmKDAsbi5nZXQpKHRoaXMuX29wdGlvbnNGb3JRdWVyeVBhcmFtKG8pLCJyZWZyZXNoTW9k
ZWwiKSYmdGhpcy5yb3V0ZXIuY3VycmVudFN0YXRlKXt0aGlzLnJlZnJlc2goKQorYnJlYWt9cmV0
dXJuITB9LGZpbmFsaXplUXVlcnlQYXJhbUNoYW5nZTpmdW5jdGlvbihlLHQscil7aWYoImFwcGxp
Y2F0aW9uIiE9PXRoaXMuZnVsbFJvdXRlTmFtZSlyZXR1cm4hMAoraWYocil7dmFyIGksbyxhLHUs
bCxjLHAsZixoLG0sZz1yLnN0YXRlLmhhbmRsZXJJbmZvcyx5PXRoaXMucm91dGVyLHY9eS5fcXVl
cnlQYXJhbXNGb3IoZyksYj15Ll9xcFVwZGF0ZXMsXz12b2lkIDAKK2ZvcigoMCxzLnN0YXNoUGFy
YW1OYW1lcykoeSxnKSxpPTA7aTx2LnFwcy5sZW5ndGg7KytpKW89di5xcHNbaV0sYT1vLnJvdXRl
LHU9YS5jb250cm9sbGVyLGw9by51cmxLZXkgaW4gZSYmby51cmxLZXksYz12b2lkIDAscD12b2lk
IDAsYiYmby51cmxLZXkgaW4gYj8oYz0oMCxuLmdldCkodSxvLnByb3ApLHA9YS5zZXJpYWxpemVR
dWVyeVBhcmFtKGMsby51cmxLZXksby50eXBlKSk6bD8ocD1lW2xdLGM9YS5kZXNlcmlhbGl6ZVF1
ZXJ5UGFyYW0ocCxvLnVybEtleSxvLnR5cGUpKToocD1vLnNlcmlhbGl6ZWREZWZhdWx0VmFsdWUs
Yz1kKG8uZGVmYXVsdFZhbHVlKSksdS5fcXBEZWxlZ2F0ZT0oMCxuLmdldCkoYSwiX3FwLnN0YXRl
cy5pbmFjdGl2ZSIpLGY9cCE9PW8uc2VyaWFsaXplZFZhbHVlLGYmJihyLnF1ZXJ5UGFyYW1zT25s
eSYmITEhPT1fJiYoaD1hLl9vcHRpb25zRm9yUXVlcnlQYXJhbShvKSxtPSgwLG4uZ2V0KShoLCJy
ZXBsYWNlIiksbT9fPSEwOiExPT09bSYmKF89ITEpKSwoMCxuLnNldCkodSxvLnByb3AsYykpLG8u
c2VyaWFsaXplZFZhbHVlPXAsby5zZXJpYWxpemVkRGVmYXVsdFZhbHVlPT09cHx8dC5wdXNoKHt2
YWx1ZTpwLHZpc2libGU6ITAsa2V5Omx8fG8udXJsS2V5fSkKK18mJnIubWV0aG9kKCJyZXBsYWNl
Iiksdi5xcHMuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD0oMCxuLmdldCkoZS5yb3V0ZSwiX3Fw
IikKK2Uucm91dGUuY29udHJvbGxlci5fcXBEZWxlZ2F0ZT0oMCxuLmdldCkodCwic3RhdGVzLmFj
dGl2ZSIpfSkseS5fcXBVcGRhdGVzPW51bGx9fX0sZGVhY3RpdmF0ZTphLGFjdGl2YXRlOmEsdHJh
bnNpdGlvblRvOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5yb3V0ZXIKK3JldHVybiBlLnRyYW5zaXRp
b25Uby5hcHBseShlLCgwLHMucHJlZml4Um91dGVOYW1lQXJnKSh0aGlzLGFyZ3VtZW50cykpfSxp
bnRlcm1lZGlhdGVUcmFuc2l0aW9uVG86ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnJvdXRlcgorZS5p
bnRlcm1lZGlhdGVUcmFuc2l0aW9uVG8uYXBwbHkoZSwoMCxzLnByZWZpeFJvdXRlTmFtZUFyZyko
dGhpcyxhcmd1bWVudHMpKX0scmVmcmVzaDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJvdXRlci5f
cm91dGVyTWljcm9saWIucmVmcmVzaCh0aGlzKX0scmVwbGFjZVdpdGg6ZnVuY3Rpb24oKXt2YXIg
ZT10aGlzLnJvdXRlcgorcmV0dXJuIGUucmVwbGFjZVdpdGguYXBwbHkoZSwoMCxzLnByZWZpeFJv
dXRlTmFtZUFyZykodGhpcyxhcmd1bWVudHMpKX0sc2VuZDpmdW5jdGlvbigpe3ZhciBlLHQsbixp
LG8KK2ZvcihlPWFyZ3VtZW50cy5sZW5ndGgsdD1BcnJheShlKSxuPTA7bjxlO24rKyl0W25dPWFy
Z3VtZW50c1tuXQoraWYodGhpcy5yb3V0ZXImJnRoaXMucm91dGVyLl9yb3V0ZXJNaWNyb2xpYnx8
ISgwLHIuaXNUZXN0aW5nKSgpKShpPXRoaXMucm91dGVyKS5zZW5kLmFwcGx5KGksdCkKK2Vsc2Ug
aWYobz10WzBdLHQ9di5jYWxsKHQsMSksdGhpcy5hY3Rpb25zW29dKXJldHVybiB0aGlzLmFjdGlv
bnNbb10uYXBwbHkodGhpcyx0KX0sc2V0dXA6ZnVuY3Rpb24oZSx0KXt2YXIgcixpLG8sYSx1LGw9
dm9pZCAwLGM9dGhpcy5jb250cm9sbGVyTmFtZXx8dGhpcy5yb3V0ZU5hbWUscD10aGlzLmNvbnRy
b2xsZXJGb3IoYywhMCkKK2w9cHx8dGhpcy5nZW5lcmF0ZUNvbnRyb2xsZXIoYyksdGhpcy5jb250
cm9sbGVyfHwocj0oMCxuLmdldCkodGhpcywiX3FwLnByb3BlcnR5TmFtZXMiKSxnKGwsciksdGhp
cy5jb250cm9sbGVyPWwpCit2YXIgZj0oMCxuLmdldCkodGhpcywiX3FwIiksZD1mLnN0YXRlcwor
bC5fcXBEZWxlZ2F0ZT1kLmFsbG93T3ZlcnJpZGVzLHQmJigoMCxzLnN0YXNoUGFyYW1OYW1lcyko
dGhpcy5yb3V0ZXIsdC5zdGF0ZS5oYW5kbGVySW5mb3MpLGk9dC5wYXJhbXMsbz1mLnByb3BlcnR5
TmFtZXMsYT10aGlzLl9idWNrZXRDYWNoZSxvLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQscj1m
Lm1hcFtlXQorci52YWx1ZXM9aQordmFyIG89KDAscy5jYWxjdWxhdGVDYWNoZUtleSkoci5yb3V0
ZS5mdWxsUm91dGVOYW1lLHIucGFydHMsci52YWx1ZXMpCithJiYodD1hLmxvb2t1cChvLGUsci51
bmRlY29yYXRlZERlZmF1bHRWYWx1ZSksKDAsbi5zZXQpKGwsZSx0KSl9KSksdCYmKHU9aCh0aGlz
LHQuc3RhdGUpLCgwLG4uc2V0UHJvcGVydGllcykobCx1KSksdGhpcy5zZXR1cENvbnRyb2xsZXIo
bCxlLHQpLHRoaXMuX2Vudmlyb25tZW50Lm9wdGlvbnMuc2hvdWxkUmVuZGVyJiZ0aGlzLnJlbmRl
clRlbXBsYXRlKGwsZSl9LF9xcENoYW5nZWQ6ZnVuY3Rpb24oZSx0LG4pe2lmKG4pe3ZhciByPSgw
LHMuY2FsY3VsYXRlQ2FjaGVLZXkpKG4ucm91dGUuZnVsbFJvdXRlTmFtZSxuLnBhcnRzLG4udmFs
dWVzKSxpPXRoaXMuX2J1Y2tldENhY2hlCitpJiZpLnN0YXNoKHIsZSx0KX19LGJlZm9yZU1vZGVs
OmEsYWZ0ZXJNb2RlbDphLHJlZGlyZWN0OmEsY29udGV4dERpZENoYW5nZTpmdW5jdGlvbigpe3Ro
aXMuY3VycmVudE1vZGVsPXRoaXMuY29udGV4dH0sbW9kZWw6ZnVuY3Rpb24oZSx0KXt2YXIgcixv
PXZvaWQgMCxzPXZvaWQgMCxhPXZvaWQgMCx1PSgwLG4uZ2V0KSh0aGlzLCJfcXAubWFwIikKK2Zv
cih2YXIgbCBpbiBlKSJxdWVyeVBhcmFtcyI9PT1sfHx1JiZsIGluIHV8fChyPWwubWF0Y2goL14o
LiopX2lkJC8pLHImJihvPXJbMV0sYT1lW2xdKSxzPSEwKQoraWYoIW8mJnMpcmV0dXJuKDAsaS5j
b3B5KShlKQoraWYoIW8pe2lmKHQucmVzb2x2ZUluZGV4PDEpcmV0dXJuCityZXR1cm4gdC5zdGF0
ZS5oYW5kbGVySW5mb3NbdC5yZXNvbHZlSW5kZXgtMV0uY29udGV4dH1yZXR1cm4gdGhpcy5maW5k
TW9kZWwobyxhKX0sZGVzZXJpYWxpemU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5tb2RlbCh0
aGlzLnBhcmFtc0Zvcih0aGlzLnJvdXRlTmFtZSksdCl9LGZpbmRNb2RlbDpmdW5jdGlvbigpe3Zh
ciBlPSgwLG4uZ2V0KSh0aGlzLCJzdG9yZSIpCityZXR1cm4gZS5maW5kLmFwcGx5KGUsYXJndW1l
bnRzKX0sc3RvcmU6KDAsbi5jb21wdXRlZCkoZnVuY3Rpb24oKXt2YXIgZT0oMCx0LmdldE93bmVy
KSh0aGlzKQordGhpcy5yb3V0ZU5hbWUsKDAsbi5nZXQpKHRoaXMsInJvdXRlci5uYW1lc3BhY2Ui
KQorcmV0dXJue2ZpbmQ6ZnVuY3Rpb24odCxuKXt2YXIgcj1lLmZhY3RvcnlGb3IoIm1vZGVsOiIr
dCkKK2lmKHIpcmV0dXJuIHI9ci5jbGFzcyxyLmZpbmQobil9fX0pLHNlcmlhbGl6ZTp1LHNldHVw
Q29udHJvbGxlcjpmdW5jdGlvbihlLHQpe2UmJnZvaWQgMCE9PXQmJigwLG4uc2V0KShlLCJtb2Rl
bCIsdCl9LGNvbnRyb2xsZXJGb3I6ZnVuY3Rpb24oZSxuKXt2YXIgcj0oMCx0LmdldE93bmVyKSh0
aGlzKSxpPXIubG9va3VwKCJyb3V0ZToiK2UpCityZXR1cm4gaSYmaS5jb250cm9sbGVyTmFtZSYm
KGU9aS5jb250cm9sbGVyTmFtZSksci5sb29rdXAoImNvbnRyb2xsZXI6IitlKX0sZ2VuZXJhdGVD
b250cm9sbGVyOmZ1bmN0aW9uKGUpe3ZhciBuPSgwLHQuZ2V0T3duZXIpKHRoaXMpCityZXR1cm4o
MCxvLmRlZmF1bHQpKG4sZSl9LG1vZGVsRm9yOmZ1bmN0aW9uKGUpe3ZhciBuLHI9dm9pZCAwLGk9
KDAsdC5nZXRPd25lcikodGhpcykKK3I9aS5yb3V0YWJsZSYmdGhpcy5yb3V0ZXImJnRoaXMucm91
dGVyLl9yb3V0ZXJNaWNyb2xpYi5hY3RpdmVUcmFuc2l0aW9uP3koaSxlKTplCit2YXIgbz0oMCx0
LmdldE93bmVyKSh0aGlzKS5sb29rdXAoInJvdXRlOiIrcikscz10aGlzLnJvdXRlcj90aGlzLnJv
dXRlci5fcm91dGVyTWljcm9saWIuYWN0aXZlVHJhbnNpdGlvbjpudWxsCityZXR1cm4gcyYmKG49
byYmby5yb3V0ZU5hbWV8fHIscy5yZXNvbHZlZE1vZGVscy5oYXNPd25Qcm9wZXJ0eShuKSk/cy5y
ZXNvbHZlZE1vZGVsc1tuXTpvJiZvLmN1cnJlbnRNb2RlbH0scmVuZGVyVGVtcGxhdGU6ZnVuY3Rp
b24oKXt0aGlzLnJlbmRlcigpfSxyZW5kZXI6ZnVuY3Rpb24oZSx0KXt2YXIgcj0wPT09YXJndW1l
bnRzLmxlbmd0aHx8KDAsbi5pc0VtcHR5KShhcmd1bWVudHNbMF0pLGk9dm9pZCAwCisib2JqZWN0
IiE9dHlwZW9mIGV8fHQ/aT1lOihpPXRoaXMudGVtcGxhdGVOYW1lfHx0aGlzLnJvdXRlTmFtZSx0
PWUpCit2YXIgbz1wKHRoaXMsInN0cmluZyI9PXR5cGVvZiBlJiYhIWUscixpLHQpCit0aGlzLmNv
bm5lY3Rpb25zLnB1c2gobyksbi5ydW4ub25jZSh0aGlzLnJvdXRlciwiX3NldE91dGxldHMiKX0s
ZGlzY29ubmVjdE91dGxldDpmdW5jdGlvbihlKXt2YXIgdCxuPXZvaWQgMCxpPXZvaWQgMAoraWYo
ZSYmInN0cmluZyIhPXR5cGVvZiBlKXtpZihuPWUub3V0bGV0LGk9ZS5wYXJlbnRWaWV3LGUmJi0x
IT09T2JqZWN0LmtleXMoZSkuaW5kZXhPZigib3V0bGV0IikmJnZvaWQgMD09PWUub3V0bGV0KXRo
cm93IG5ldyByLkVycm9yKCJZb3UgcGFzc2VkIHVuZGVmaW5lZCBhcyB0aGUgb3V0bGV0IG5hbWUu
Iil9ZWxzZSBuPWUKK2ZvcihpPWkmJmkucmVwbGFjZSgvXC8vZywiLiIpLG49bnx8Im1haW4iLHRo
aXMuX2Rpc2Nvbm5lY3RPdXRsZXQobixpKSx0PTA7dDx0aGlzLnJvdXRlci5fcm91dGVyTWljcm9s
aWIuY3VycmVudEhhbmRsZXJJbmZvcy5sZW5ndGg7dCsrKXRoaXMucm91dGVyLl9yb3V0ZXJNaWNy
b2xpYi5jdXJyZW50SGFuZGxlckluZm9zW3RdLmhhbmRsZXIuX2Rpc2Nvbm5lY3RPdXRsZXQobixp
KX0sX2Rpc2Nvbm5lY3RPdXRsZXQ6ZnVuY3Rpb24oZSx0KXt2YXIgcixpLG89bCh0aGlzKQorZm9y
KG8mJnQ9PT1vLnJvdXRlTmFtZSYmKHQ9dm9pZCAwKSxyPTA7cjx0aGlzLmNvbm5lY3Rpb25zLmxl
bmd0aDtyKyspaT10aGlzLmNvbm5lY3Rpb25zW3JdLGkub3V0bGV0PT09ZSYmaS5pbnRvPT09dCYm
KHRoaXMuY29ubmVjdGlvbnNbcl09e293bmVyOmkub3duZXIsaW50bzppLmludG8sb3V0bGV0Omku
b3V0bGV0LG5hbWU6aS5uYW1lLGNvbnRyb2xsZXI6dm9pZCAwLHRlbXBsYXRlOnZvaWQgMCxWaWV3
Q2xhc3M6dm9pZCAwfSxuLnJ1bi5vbmNlKHRoaXMucm91dGVyLCJfc2V0T3V0bGV0cyIpKX0sd2ls
bERlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLnRlYXJkb3duVmlld3MoKX0sdGVhcmRvd25WaWV3czpm
dW5jdGlvbigpe3RoaXMuY29ubmVjdGlvbnMmJnRoaXMuY29ubmVjdGlvbnMubGVuZ3RoPjAmJih0
aGlzLmNvbm5lY3Rpb25zPVtdLG4ucnVuLm9uY2UodGhpcy5yb3V0ZXIsIl9zZXRPdXRsZXRzIikp
fX0pOygwLGkuZGVwcmVjYXRlVW5kZXJzY29yZUFjdGlvbnMpKF8pLF8ucmVvcGVuQ2xhc3Moe2lz
Um91dGVGYWN0b3J5OiEwfSksZS5kZWZhdWx0PV99KSxlKCJlbWJlci1yb3V0aW5nL3N5c3RlbS9y
b3V0ZXIiLFsiZXhwb3J0cyIsImVtYmVyLXV0aWxzIiwiZW1iZXItY29uc29sZSIsImVtYmVyLW1l
dGFsIiwiZW1iZXItZGVidWciLCJlbWJlci1ydW50aW1lIiwiZW1iZXItcm91dGluZy9zeXN0ZW0v
cm91dGUiLCJlbWJlci1yb3V0aW5nL3N5c3RlbS9kc2wiLCJlbWJlci1yb3V0aW5nL2xvY2F0aW9u
L2FwaSIsImVtYmVyLXJvdXRpbmcvdXRpbHMiLCJlbWJlci1yb3V0aW5nL3N5c3RlbS9yb3V0ZXJf
c3RhdGUiLCJyb3V0ZXIiXSxmdW5jdGlvbihlLHQsbixyLGksbyxzLGEsdSxsLGMscCl7InVzZSBz
dHJpY3QiCitmdW5jdGlvbiBmKCl7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gaChlLHQsbil7dmFyIHIs
aSxvLHM9ITEKK2ZvcihyPXQubGVuZ3RoLTE7cj49MDstLXIpaWYoaT10W3JdLG89aS5oYW5kbGVy
LGU9PT1vJiYocz0hMCkscyYmITAhPT1uKG8pKXJldHVybn1mdW5jdGlvbiBkKGUsdCl7dmFyIHI9
W10saT12b2lkIDAKK2k9ZSYmIm9iamVjdCI9PXR5cGVvZiBlJiYib2JqZWN0Ij09dHlwZW9mIGUu
ZXJyb3JUaHJvd24/ZS5lcnJvclRocm93bjplLHQmJnIucHVzaCh0KSxpJiYoaS5tZXNzYWdlJiZy
LnB1c2goaS5tZXNzYWdlKSxpLnN0YWNrJiZyLnB1c2goaS5zdGFjayksInN0cmluZyI9PXR5cGVv
ZiBpJiZyLnB1c2goaSkpLG4uZGVmYXVsdC5lcnJvci5hcHBseSh0aGlzLHIpfWZ1bmN0aW9uIG0o
ZSxuKXt2YXIgcj1lLnJvdXRlcixpPSgwLHQuZ2V0T3duZXIpKGUpLG89ZS5yb3V0ZU5hbWUscz1l
LmZ1bGxSb3V0ZU5hbWUsYT1zKyJfIituCityZXR1cm4geShpLHIsbysiXyIrbixhKT9hOiIifWZ1
bmN0aW9uIGcoZSxuKXt2YXIgcj1lLnJvdXRlcixpPSgwLHQuZ2V0T3duZXIpKGUpLG89ZS5yb3V0
ZU5hbWUscz0iYXBwbGljYXRpb24iPT09bz9uOm8rIi4iK24sYT1lLmZ1bGxSb3V0ZU5hbWUsdT0i
YXBwbGljYXRpb24iPT09YT9uOmErIi4iK24KK3JldHVybiB5KGkscixzLHUpP3U6IiJ9ZnVuY3Rp
b24geShlLHQsbixyKXt2YXIgaT10Lmhhc1JvdXRlKHIpLG89ZS5oYXNSZWdpc3RyYXRpb24oInRl
bXBsYXRlOiIrbil8fGUuaGFzUmVnaXN0cmF0aW9uKCJyb3V0ZToiK24pCityZXR1cm4gaSYmb31m
dW5jdGlvbiB2KGUsbixyKXt2YXIgbyxzLGE9ci5zaGlmdCgpCitpZighZSl7aWYobilyZXR1cm4K
K3Rocm93IG5ldyBpLkVycm9yKCJDYW4ndCB0cmlnZ2VyIGFjdGlvbiAnIithKyInIGJlY2F1c2Ug
eW91ciBhcHAgaGFzbid0IGZpbmlzaGVkIHRyYW5zaXRpb25pbmcgaW50byBpdHMgZmlyc3Qgcm91
dGUuIFRvIHRyaWdnZXIgYW4gYWN0aW9uIG9uIGRlc3RpbmF0aW9uIHJvdXRlcyBkdXJpbmcgYSB0
cmFuc2l0aW9uLCB5b3UgY2FuIGNhbGwgYC5zZW5kKClgIG9uIHRoZSBgVHJhbnNpdGlvbmAgb2Jq
ZWN0IHBhc3NlZCB0byB0aGUgYG1vZGVsL2JlZm9yZU1vZGVsL2FmdGVyTW9kZWxgIGhvb2tzLiIp
fXZhciB1PSExLGw9dm9pZCAwLGM9dm9pZCAwCitmb3Iobz1lLmxlbmd0aC0xO28+PTA7by0tKWlm
KGw9ZVtvXSwoYz1sLmhhbmRsZXIpJiZjLmFjdGlvbnMmJmMuYWN0aW9uc1thXSl7aWYoITAhPT1j
LmFjdGlvbnNbYV0uYXBwbHkoYyxyKSlyZXR1cm4gdm9pZCgiZXJyb3IiPT09YSYmKHM9KDAsdC5n
dWlkRm9yKShyWzBdKSxjLnJvdXRlci5fbWFya0Vycm9yQXNIYW5kbGVkKHMpKSkKK3U9ITB9aWYo
a1thXSlyZXR1cm4gdm9pZCBrW2FdLmFwcGx5KG51bGwscikKK2lmKCF1JiYhbil0aHJvdyBuZXcg
aS5FcnJvcigiTm90aGluZyBoYW5kbGVkIHRoZSBhY3Rpb24gJyIrYSsiJy4gSWYgeW91IGRpZCBo
YW5kbGUgdGhlIGFjdGlvbiwgdGhpcyBlcnJvciBjYW4gYmUgY2F1c2VkIGJ5IHJldHVybmluZyB0
cnVlIGZyb20gYW4gYWN0aW9uIGhhbmRsZXIgaW4gYSBjb250cm9sbGVyLCBjYXVzaW5nIHRoZSBh
Y3Rpb24gdG8gYnViYmxlLiIpfWZ1bmN0aW9uIGIoZSx0LG4pe3ZhciByLGksbz1lLl9yb3V0ZXJN
aWNyb2xpYixzPW8uYXBwbHlJbnRlbnQodCxuKSxhPXMuaGFuZGxlckluZm9zLHU9cy5wYXJhbXMK
K2ZvcihyPTA7cjxhLmxlbmd0aDsrK3IpaT1hW3JdLGkuaXNSZXNvbHZlZD91W2kubmFtZV09aS5w
YXJhbXM6dVtpLm5hbWVdPWkuc2VyaWFsaXplKGkuY29udGV4dCkKK3JldHVybiBzfWZ1bmN0aW9u
IF8oZSl7dmFyIG49ZS5fcm91dGVyTWljcm9saWIuY3VycmVudEhhbmRsZXJJbmZvcworaWYoMCE9
PW4ubGVuZ3RoKXt2YXIgaT1SLl9yb3V0ZVBhdGgobiksbz1uW24ubGVuZ3RoLTFdLm5hbWUscz1l
LmdldCgibG9jYXRpb24iKS5nZXRVUkwoKTsoMCxyLnNldCkoZSwiY3VycmVudFBhdGgiLGkpLCgw
LHIuc2V0KShlLCJjdXJyZW50Um91dGVOYW1lIixvKSwoMCxyLnNldCkoZSwiY3VycmVudFVSTCIs
cykKK3ZhciBhPSgwLHQuZ2V0T3duZXIpKGUpLmxvb2t1cCgiY29udHJvbGxlcjphcHBsaWNhdGlv
biIpCithJiYoImN1cnJlbnRQYXRoImluIGF8fCgwLHIuZGVmaW5lUHJvcGVydHkpKGEsImN1cnJl
bnRQYXRoIiksKDAsci5zZXQpKGEsImN1cnJlbnRQYXRoIixpKSwiY3VycmVudFJvdXRlTmFtZSJp
biBhfHwoMCxyLmRlZmluZVByb3BlcnR5KShhLCJjdXJyZW50Um91dGVOYW1lIiksKDAsci5zZXQp
KGEsImN1cnJlbnRSb3V0ZU5hbWUiLG8pKX19ZnVuY3Rpb24gdyhlLG4pe3ZhciByPWMuZGVmYXVs
dC5jcmVhdGUoe2VtYmVyUm91dGVyOm4scm91dGVySnM6bi5fcm91dGVyTWljcm9saWIscm91dGVy
SnNTdGF0ZTplLnN0YXRlfSkKK24uY3VycmVudFN0YXRlfHxuLnNldCgiY3VycmVudFN0YXRlIixy
KSxuLnNldCgidGFyZ2V0U3RhdGUiLHIpLGUucHJvbWlzZT1lLmNhdGNoKGZ1bmN0aW9uKGUpe3Zh
ciByPSgwLHQuZ3VpZEZvcikoZSkKK2lmKCFuLl9pc0Vycm9ySGFuZGxlZChyKSl0aHJvdyBlCitu
Ll9jbGVhckhhbmRsZWRFcnJvcihyKX0pfWZ1bmN0aW9uIEUoZSl7cmV0dXJuInN0cmluZyI9PXR5
cGVvZiBlJiYoIiI9PT1lfHwiLyI9PT1lWzBdKX1mdW5jdGlvbiB4KGUsdCxuLHIpe3ZhciBpLG8s
cz1lLl9xdWVyeVBhcmFtc0Zvcih0KQorZm9yKHZhciBhIGluIG4pbi5oYXNPd25Qcm9wZXJ0eShh
KSYmKGk9blthXSxvPXMubWFwW2FdLHIoYSxpLG8pKX1mdW5jdGlvbiBDKGUsdCl7aWYoZSlmb3Io
dmFyIG4scixpPVtlXTtpLmxlbmd0aD4wOyl7aWYobj1pLnNoaWZ0KCksbi5yZW5kZXIubmFtZT09
PXQpcmV0dXJuIG4KK3I9bi5vdXRsZXRzCitmb3IodmFyIG8gaW4gcilpLnB1c2gocltvXSl9fWZ1
bmN0aW9uIE8oZSx0LG4pe3ZhciBpPXZvaWQgMCxvPXtyZW5kZXI6bixvdXRsZXRzOk9iamVjdC5j
cmVhdGUobnVsbCksd2FzVXNlZDohMX0KK3JldHVybiBpPW4uaW50bz9DKGUsbi5pbnRvKTp0LGk/
KDAsci5zZXQpKGkub3V0bGV0cyxuLm91dGxldCxvKTpuLmludG8/QShlLG4uaW50byxvKTplPW8s
e2xpdmVSb3V0ZXM6ZSxvd25TdGF0ZTpvfX1mdW5jdGlvbiBBKGUsdCxuKXtlLm91dGxldHMuX19l
bWJlcl9vcnBoYW5zX198fChlLm91dGxldHMuX19lbWJlcl9vcnBoYW5zX189e3JlbmRlcjp7bmFt
ZToiX19lbWJlcl9vcnBoYW5zX18ifSxvdXRsZXRzOk9iamVjdC5jcmVhdGUobnVsbCl9KSxlLm91
dGxldHMuX19lbWJlcl9vcnBoYW5zX18ub3V0bGV0c1t0XT1uLHIucnVuLnNjaGVkdWxlKCJhZnRl
clJlbmRlciIsZnVuY3Rpb24oKXt9KX1mdW5jdGlvbiBUKGUsdCxuKXt2YXIgcj1DKGUsbi5yb3V0
ZU5hbWUpCityZXR1cm4gcnx8KHQub3V0bGV0cy5tYWluPXtyZW5kZXI6e25hbWU6bi5yb3V0ZU5h
bWUsb3V0bGV0OiJtYWluIn0sb3V0bGV0czp7fX0sdCl9ZS50cmlnZ2VyRXZlbnQ9dgordmFyIFM9
QXJyYXkucHJvdG90eXBlLnNsaWNlLFI9by5PYmplY3QuZXh0ZW5kKG8uRXZlbnRlZCx7bG9jYXRp
b246Imhhc2giLHJvb3RVUkw6Ii8iLF9pbml0Um91dGVySnM6ZnVuY3Rpb24oKXt2YXIgZT10aGlz
Ll9yb3V0ZXJNaWNyb2xpYj1uZXcgcC5kZWZhdWx0CitlLnRyaWdnZXJFdmVudD12LGUuX3RyaWdn
ZXJXaWxsQ2hhbmdlQ29udGV4dD1mLGUuX3RyaWdnZXJXaWxsTGVhdmU9ZgordmFyIHQ9dGhpcy5j
b25zdHJ1Y3Rvci5kc2xDYWxsYmFja3N8fFtmXSxuPXRoaXMuX2J1aWxkRFNMKCkKK24ucm91dGUo
ImFwcGxpY2F0aW9uIix7cGF0aDoiLyIscmVzZXROYW1lc3BhY2U6ITAsb3ZlcnJpZGVOYW1lQXNz
ZXJ0aW9uOiEwfSxmdW5jdGlvbigpe3ZhciBlCitmb3IoZT0wO2U8dC5sZW5ndGg7ZSsrKXRbZV0u
Y2FsbCh0aGlzKX0pLGUubWFwKG4uZ2VuZXJhdGUoKSl9LF9idWlsZERTTDpmdW5jdGlvbigpe3Zh
ciBlPXRoaXMuX2hhc01vZHVsZUJhc2VkUmVzb2x2ZXIoKSxuPXtlbmFibGVMb2FkaW5nU3Vic3Rh
dGVzOiEhZX0scj0oMCx0LmdldE93bmVyKSh0aGlzKSxpPXRoaXMKK3JldHVybiBuLnJlc29sdmVS
b3V0ZU1hcD1mdW5jdGlvbihlKXtyZXR1cm4gci5mYWN0b3J5Rm9yKCJyb3V0ZS1tYXA6IitlKX0s
bi5hZGRSb3V0ZUZvckVuZ2luZT1mdW5jdGlvbihlLHQpe2kuX2VuZ2luZUluZm9CeVJvdXRlW2Vd
fHwoaS5fZW5naW5lSW5mb0J5Um91dGVbZV09dCl9LG5ldyBhLmRlZmF1bHQobnVsbCxuKX0saW5p
dDpmdW5jdGlvbigpe3RoaXMuX3N1cGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLmN1cnJl
bnRVUkw9bnVsbCx0aGlzLmN1cnJlbnRSb3V0ZU5hbWU9bnVsbCx0aGlzLmN1cnJlbnRQYXRoPW51
bGwsdGhpcy5fcXBDYWNoZT1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX3Jlc2V0UXVldWVkUXVl
cnlQYXJhbWV0ZXJDaGFuZ2VzKCksdGhpcy5faGFuZGxlZEVycm9ycz0oMCx0LmRpY3Rpb25hcnkp
KG51bGwpLHRoaXMuX2VuZ2luZUluc3RhbmNlcz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2Vu
Z2luZUluZm9CeVJvdXRlPU9iamVjdC5jcmVhdGUobnVsbCl9LF9yZXNldFF1ZXVlZFF1ZXJ5UGFy
YW1ldGVyQ2hhbmdlczpmdW5jdGlvbigpe3RoaXMuX3F1ZXVlZFFQQ2hhbmdlcz17fX0sdXJsOigw
LHIuY29tcHV0ZWQpKGZ1bmN0aW9uKCl7cmV0dXJuKDAsci5nZXQpKHRoaXMsImxvY2F0aW9uIiku
Z2V0VVJMKCl9KSxfaGFzTW9kdWxlQmFzZWRSZXNvbHZlcjpmdW5jdGlvbigpe3ZhciBlPSgwLHQu
Z2V0T3duZXIpKHRoaXMpCitpZighZSlyZXR1cm4hMQordmFyIG49ZS5hcHBsaWNhdGlvbiYmZS5h
cHBsaWNhdGlvbi5fX3JlZ2lzdHJ5X18mJmUuYXBwbGljYXRpb24uX19yZWdpc3RyeV9fLnJlc29s
dmVyCityZXR1cm4hIW4mJiEhbi5tb2R1bGVCYXNlZFJlc29sdmVyfSxzdGFydFJvdXRpbmc6ZnVu
Y3Rpb24oKXt2YXIgZSx0PSgwLHIuZ2V0KSh0aGlzLCJpbml0aWFsVVJMIikKK2lmKHRoaXMuc2V0
dXBSb3V0ZXIoKSYmKHZvaWQgMD09PXQmJih0PSgwLHIuZ2V0KSh0aGlzLCJsb2NhdGlvbiIpLmdl
dFVSTCgpKSwoZT10aGlzLmhhbmRsZVVSTCh0KSkmJmUuZXJyb3IpKXRocm93IGUuZXJyb3J9LHNl
dHVwUm91dGVyOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcwordGhpcy5faW5pdFJvdXRlckpzKCksdGhp
cy5fc2V0dXBMb2NhdGlvbigpCit2YXIgdD0oMCxyLmdldCkodGhpcywibG9jYXRpb24iKQorcmV0
dXJuISgwLHIuZ2V0KSh0LCJjYW5jZWxSb3V0ZXJTZXR1cCIpJiYodGhpcy5fc2V0dXBSb3V0ZXIo
dCksdC5vblVwZGF0ZVVSTChmdW5jdGlvbih0KXtlLmhhbmRsZVVSTCh0KX0pLCEwKX0sZGlkVHJh
bnNpdGlvbjpmdW5jdGlvbigpe18odGhpcyksdGhpcy5fY2FuY2VsU2xvd1RyYW5zaXRpb25UaW1l
cigpLHRoaXMubm90aWZ5UHJvcGVydHlDaGFuZ2UoInVybCIpLHRoaXMuc2V0KCJjdXJyZW50U3Rh
dGUiLHRoaXMudGFyZ2V0U3RhdGUpLHIucnVuLm9uY2UodGhpcyx0aGlzLnRyaWdnZXIsImRpZFRy
YW5zaXRpb24iKX0sX3NldE91dGxldHM6ZnVuY3Rpb24oKXtpZighdGhpcy5pc0Rlc3Ryb3lpbmcm
JiF0aGlzLmlzRGVzdHJveWVkKXt2YXIgZSxuLHIsaSxvLHMsYSx1LGw9dGhpcy5fcm91dGVyTWlj
cm9saWIuY3VycmVudEhhbmRsZXJJbmZvcyxjPXZvaWQgMCxwPXZvaWQgMCxmPW51bGwKK2lmKGwp
e2ZvcihlPTA7ZTxsLmxlbmd0aDtlKyspe2ZvcihjPWxbZV0uaGFuZGxlcixuPWMuY29ubmVjdGlv
bnMscj12b2lkIDAsaT0wO2k8bi5sZW5ndGg7aSsrKW89TyhmLHAsbltpXSksZj1vLmxpdmVSb3V0
ZXMsby5vd25TdGF0ZS5yZW5kZXIubmFtZSE9PWMucm91dGVOYW1lJiYibWFpbiIhPT1vLm93blN0
YXRlLnJlbmRlci5vdXRsZXR8fChyPW8ub3duU3RhdGUpCiswPT09bi5sZW5ndGgmJihyPVQoZixw
LGMpKSxwPXJ9ZiYmKHRoaXMuX3RvcGxldmVsVmlldz90aGlzLl90b3BsZXZlbFZpZXcuc2V0T3V0
bGV0U3RhdGUoZik6KHM9KDAsdC5nZXRPd25lcikodGhpcyksYT1zLmZhY3RvcnlGb3IoInZpZXc6
LW91dGxldCIpLHRoaXMuX3RvcGxldmVsVmlldz1hLmNyZWF0ZSgpLHRoaXMuX3RvcGxldmVsVmll
dy5zZXRPdXRsZXRTdGF0ZShmKSx1PXMubG9va3VwKCItYXBwbGljYXRpb24taW5zdGFuY2U6bWFp
biIpLHUuZGlkQ3JlYXRlUm9vdFZpZXcodGhpcy5fdG9wbGV2ZWxWaWV3KSkpfX19LHdpbGxUcmFu
c2l0aW9uOmZ1bmN0aW9uKGUsdCxuKXtyLnJ1bi5vbmNlKHRoaXMsdGhpcy50cmlnZ2VyLCJ3aWxs
VHJhbnNpdGlvbiIsbil9LGhhbmRsZVVSTDpmdW5jdGlvbihlKXtyZXR1cm4gZT1lLnNwbGl0KC8j
KC4rKT8vKVswXSx0aGlzLl9kb1VSTFRyYW5zaXRpb24oImhhbmRsZVVSTCIsZSl9LF9kb1VSTFRy
YW5zaXRpb246ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl9yb3V0ZXJNaWNyb2xpYltlXSh0fHwi
LyIpCityZXR1cm4gdyhuLHRoaXMpLG59LHRyYW5zaXRpb25UbzpmdW5jdGlvbigpe3ZhciBlLHQs
bixyPXZvaWQgMAorZm9yKGU9YXJndW1lbnRzLmxlbmd0aCx0PUFycmF5KGUpLG49MDtuPGU7bisr
KXRbbl09YXJndW1lbnRzW25dCitpZihFKHRbMF0pKXJldHVybiB0aGlzLl9kb1VSTFRyYW5zaXRp
b24oInRyYW5zaXRpb25UbyIsdFswXSkKK3ZhciBpPXRbdC5sZW5ndGgtMV0KK3I9aSYmaS5oYXNP
d25Qcm9wZXJ0eSgicXVlcnlQYXJhbXMiKT90LnBvcCgpLnF1ZXJ5UGFyYW1zOnt9Cit2YXIgbz10
LnNoaWZ0KCkKK3JldHVybiB0aGlzLl9kb1RyYW5zaXRpb24obyx0LHIpfSxpbnRlcm1lZGlhdGVU
cmFuc2l0aW9uVG86ZnVuY3Rpb24oKXt2YXIgZTsoZT10aGlzLl9yb3V0ZXJNaWNyb2xpYikuaW50
ZXJtZWRpYXRlVHJhbnNpdGlvblRvLmFwcGx5KGUsYXJndW1lbnRzKSxfKHRoaXMpfSxyZXBsYWNl
V2l0aDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRyYW5zaXRpb25Uby5hcHBseSh0aGlzLGFyZ3Vt
ZW50cykubWV0aG9kKCJyZXBsYWNlIil9LGdlbmVyYXRlOmZ1bmN0aW9uKCl7dmFyIGUsdD0oZT10
aGlzLl9yb3V0ZXJNaWNyb2xpYikuZ2VuZXJhdGUuYXBwbHkoZSxhcmd1bWVudHMpCityZXR1cm4g
dGhpcy5sb2NhdGlvbi5mb3JtYXRVUkwodCl9LGlzQWN0aXZlOmZ1bmN0aW9uKCl7dmFyIGUKK3Jl
dHVybihlPXRoaXMuX3JvdXRlck1pY3JvbGliKS5pc0FjdGl2ZS5hcHBseShlLGFyZ3VtZW50cyl9
LGlzQWN0aXZlSW50ZW50OmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdGhpcy5jdXJyZW50U3RhdGUu
aXNBY3RpdmVJbnRlbnQoZSx0LG4pfSxzZW5kOmZ1bmN0aW9uKCl7dmFyIGU7KGU9dGhpcy5fcm91
dGVyTWljcm9saWIpLnRyaWdnZXIuYXBwbHkoZSxhcmd1bWVudHMpfSxoYXNSb3V0ZTpmdW5jdGlv
bihlKXtyZXR1cm4gdGhpcy5fcm91dGVyTWljcm9saWIuaGFzUm91dGUoZSl9LHJlc2V0OmZ1bmN0
aW9uKCl7dGhpcy5fcm91dGVyTWljcm9saWImJnRoaXMuX3JvdXRlck1pY3JvbGliLnJlc2V0KCl9
LHdpbGxEZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5fdG9wbGV2ZWxWaWV3JiYodGhpcy5fdG9wbGV2
ZWxWaWV3LmRlc3Ryb3koKSx0aGlzLl90b3BsZXZlbFZpZXc9bnVsbCksdGhpcy5fc3VwZXIuYXBw
bHkodGhpcyxhcmd1bWVudHMpLHRoaXMucmVzZXQoKQordmFyIGU9dGhpcy5fZW5naW5lSW5zdGFu
Y2VzCitmb3IodmFyIHQgaW4gZSlmb3IodmFyIG4gaW4gZVt0XSkoMCxyLnJ1bikoZVt0XVtuXSwi
ZGVzdHJveSIpfSxfYWN0aXZlUVBDaGFuZ2VkOmZ1bmN0aW9uKGUsdCl7dGhpcy5fcXVldWVkUVBD
aGFuZ2VzW2VdPXQsci5ydW4ub25jZSh0aGlzLHRoaXMuX2ZpcmVRdWVyeVBhcmFtVHJhbnNpdGlv
bil9LF91cGRhdGluZ1FQQ2hhbmdlZDpmdW5jdGlvbihlKXt0aGlzLl9xcFVwZGF0ZXN8fCh0aGlz
Ll9xcFVwZGF0ZXM9e30pLHRoaXMuX3FwVXBkYXRlc1tlXT0hMH0sX2ZpcmVRdWVyeVBhcmFtVHJh
bnNpdGlvbjpmdW5jdGlvbigpe3RoaXMudHJhbnNpdGlvblRvKHtxdWVyeVBhcmFtczp0aGlzLl9x
dWV1ZWRRUENoYW5nZXN9KSx0aGlzLl9yZXNldFF1ZXVlZFF1ZXJ5UGFyYW1ldGVyQ2hhbmdlcygp
fSxfc2V0dXBMb2NhdGlvbjpmdW5jdGlvbigpe3ZhciBlLG4saT0oMCxyLmdldCkodGhpcywibG9j
YXRpb24iKSxvPSgwLHIuZ2V0KSh0aGlzLCJyb290VVJMIikscz0oMCx0LmdldE93bmVyKSh0aGlz
KQorInN0cmluZyI9PXR5cGVvZiBpJiZzJiYoZT1zLmxvb2t1cCgibG9jYXRpb246IitpKSx2b2lk
IDAhPT1lP2k9KDAsci5zZXQpKHRoaXMsImxvY2F0aW9uIixlKToobj17aW1wbGVtZW50YXRpb246
aX0saT0oMCxyLnNldCkodGhpcywibG9jYXRpb24iLHUuZGVmYXVsdC5jcmVhdGUobikpKSksbnVs
bCE9PWkmJiJvYmplY3QiPT10eXBlb2YgaSYmKG8mJigwLHIuc2V0KShpLCJyb290VVJMIixvKSwi
ZnVuY3Rpb24iPT10eXBlb2YgaS5kZXRlY3QmJmkuZGV0ZWN0KCksImZ1bmN0aW9uIj09dHlwZW9m
IGkuaW5pdFN0YXRlJiZpLmluaXRTdGF0ZSgpKX0sX2dldEhhbmRsZXJGdW5jdGlvbjpmdW5jdGlv
bigpe3ZhciBlPXRoaXMsbj1PYmplY3QuY3JlYXRlKG51bGwpLHI9KDAsdC5nZXRPd25lcikodGhp
cykKK3JldHVybiBmdW5jdGlvbih0KXt2YXIgaSxvLGE9dCx1PXIsbD1lLl9lbmdpbmVJbmZvQnlS
b3V0ZVthXQorbCYmKGk9ZS5fZ2V0RW5naW5lSW5zdGFuY2UobCksdT1pLGE9bC5sb2NhbEZ1bGxO
YW1lKQordmFyIGM9InJvdXRlOiIrYSxwPXUubG9va3VwKGMpCitpZihuW3RdKXJldHVybiBwCitp
ZihuW3RdPSEwLHB8fChvPXUuZmFjdG9yeUZvcigicm91dGU6YmFzaWMiKS5jbGFzcyx1LnJlZ2lz
dGVyKGMsby5leHRlbmQoKSkscD11Lmxvb2t1cChjKSkscC5fc2V0Um91dGVOYW1lKGEpLGwmJiEo
MCxzLmhhc0RlZmF1bHRTZXJpYWxpemUpKHApKXRocm93IG5ldyBFcnJvcigiRGVmaW5pbmcgYSBj
dXN0b20gc2VyaWFsaXplIG1ldGhvZCBvbiBhbiBFbmdpbmUgcm91dGUgaXMgbm90IHN1cHBvcnRl
ZC4iKQorcmV0dXJuIHB9fSxfZ2V0U2VyaWFsaXplckZ1bmN0aW9uOmZ1bmN0aW9uKCl7dmFyIGU9
dGhpcworcmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBuPWUuX2VuZ2luZUluZm9CeVJvdXRlW3RdCitp
ZihuKXJldHVybiBuLnNlcmlhbGl6ZU1ldGhvZHx8cy5kZWZhdWx0U2VyaWFsaXplfX0sX3NldHVw
Um91dGVyOmZ1bmN0aW9uKGUpe3ZhciB0LG49dm9pZCAwLGk9dGhpcyxvPXRoaXMuX3JvdXRlck1p
Y3JvbGliCitvLmdldEhhbmRsZXI9dGhpcy5fZ2V0SGFuZGxlckZ1bmN0aW9uKCksby5nZXRTZXJp
YWxpemVyPXRoaXMuX2dldFNlcmlhbGl6ZXJGdW5jdGlvbigpCit2YXIgcz1mdW5jdGlvbigpe2Uu
c2V0VVJMKG4pLCgwLHIuc2V0KShpLCJjdXJyZW50VVJMIixuKX0KK28udXBkYXRlVVJMPWZ1bmN0
aW9uKGUpe249ZSxyLnJ1bi5vbmNlKHMpfSxlLnJlcGxhY2VVUkwmJih0PWZ1bmN0aW9uKCl7ZS5y
ZXBsYWNlVVJMKG4pLCgwLHIuc2V0KShpLCJjdXJyZW50VVJMIixuKX0sby5yZXBsYWNlVVJMPWZ1
bmN0aW9uKGUpe249ZSxyLnJ1bi5vbmNlKHQpfSksby5kaWRUcmFuc2l0aW9uPWZ1bmN0aW9uKGUp
e2kuZGlkVHJhbnNpdGlvbihlKX0sby53aWxsVHJhbnNpdGlvbj1mdW5jdGlvbihlLHQsbil7aS53
aWxsVHJhbnNpdGlvbihlLHQsbil9fSxfc2VyaWFsaXplUXVlcnlQYXJhbXM6ZnVuY3Rpb24oZSx0
KXt2YXIgbj10aGlzCit4KHRoaXMsZSx0LGZ1bmN0aW9uKGUscixpKXtpPyhkZWxldGUgdFtlXSx0
W2kudXJsS2V5XT1pLnJvdXRlLnNlcmlhbGl6ZVF1ZXJ5UGFyYW0ocixpLnVybEtleSxpLnR5cGUp
KTp2b2lkIDA9PT1yfHwodFtlXT1uLl9zZXJpYWxpemVRdWVyeVBhcmFtKHIsKDAsby50eXBlT2Yp
KHIpKSl9KX0sX3NlcmlhbGl6ZVF1ZXJ5UGFyYW06ZnVuY3Rpb24oZSx0KXtyZXR1cm4iYXJyYXki
PT09dD9KU09OLnN0cmluZ2lmeShlKToiIitlfSxfZGVzZXJpYWxpemVRdWVyeVBhcmFtczpmdW5j
dGlvbihlLHQpe3godGhpcyxlLHQsZnVuY3Rpb24oZSxuLHIpe3ImJihkZWxldGUgdFtlXSx0W3Iu
cHJvcF09ci5yb3V0ZS5kZXNlcmlhbGl6ZVF1ZXJ5UGFyYW0obixyLnVybEtleSxyLnR5cGUpKX0p
fSxfZGVzZXJpYWxpemVRdWVyeVBhcmFtOmZ1bmN0aW9uKGUsdCl7cmV0dXJuImJvb2xlYW4iPT09
dD8idHJ1ZSI9PT1lOiJudW1iZXIiPT09dD9OdW1iZXIoZSkudmFsdWVPZigpOiJhcnJheSI9PT10
PygwLG8uQSkoSlNPTi5wYXJzZShlKSk6ZX0sX3BydW5lRGVmYXVsdFF1ZXJ5UGFyYW1WYWx1ZXM6
ZnVuY3Rpb24oZSx0KXt2YXIgbixyPXRoaXMuX3F1ZXJ5UGFyYW1zRm9yKGUpCitmb3IodmFyIGkg
aW4gdCkobj1yLm1hcFtpXSkmJm4uc2VyaWFsaXplZERlZmF1bHRWYWx1ZT09PXRbaV0mJmRlbGV0
ZSB0W2ldfSxfZG9UcmFuc2l0aW9uOmZ1bmN0aW9uKGUsbixyKXt2YXIgaSxvPWV8fCgwLGwuZ2V0
QWN0aXZlVGFyZ2V0TmFtZSkodGhpcy5fcm91dGVyTWljcm9saWIpLHM9e30KK3RoaXMuX3Byb2Nl
c3NBY3RpdmVUcmFuc2l0aW9uUXVlcnlQYXJhbXMobyxuLHMsciksKDAsdC5hc3NpZ24pKHMsciks
dGhpcy5fcHJlcGFyZVF1ZXJ5UGFyYW1zKG8sbixzKQordmFyIGE9KDAsbC5yb3V0ZUFyZ3MpKG8s
bixzKSx1PShpPXRoaXMuX3JvdXRlck1pY3JvbGliKS50cmFuc2l0aW9uVG8uYXBwbHkoaSxhKQor
cmV0dXJuIHcodSx0aGlzKSx1fSxfcHJvY2Vzc0FjdGl2ZVRyYW5zaXRpb25RdWVyeVBhcmFtczpm
dW5jdGlvbihlLG4scixpKXtpZih0aGlzLl9yb3V0ZXJNaWNyb2xpYi5hY3RpdmVUcmFuc2l0aW9u
KXt2YXIgbz17fSxzPXRoaXMuX3FwVXBkYXRlc3x8e30KK2Zvcih2YXIgYSBpbiB0aGlzLl9yb3V0
ZXJNaWNyb2xpYi5hY3RpdmVUcmFuc2l0aW9uLnF1ZXJ5UGFyYW1zKXNbYV18fChvW2FdPXRoaXMu
X3JvdXRlck1pY3JvbGliLmFjdGl2ZVRyYW5zaXRpb24ucXVlcnlQYXJhbXNbYV0pCit0aGlzLl9m
dWxseVNjb3BlUXVlcnlQYXJhbXMoZSxuLGkpLHRoaXMuX2Z1bGx5U2NvcGVRdWVyeVBhcmFtcyhl
LG4sbyksKDAsdC5hc3NpZ24pKHIsbyl9fSxfcHJlcGFyZVF1ZXJ5UGFyYW1zOmZ1bmN0aW9uKGUs
dCxuKXt2YXIgcj1iKHRoaXMsZSx0KQordGhpcy5faHlkcmF0ZVVuc3VwcGxpZWRRdWVyeVBhcmFt
cyhyLG4pLHRoaXMuX3NlcmlhbGl6ZVF1ZXJ5UGFyYW1zKHIuaGFuZGxlckluZm9zLG4pLHRoaXMu
X3BydW5lRGVmYXVsdFF1ZXJ5UGFyYW1WYWx1ZXMoci5oYW5kbGVySW5mb3Msbil9LF9nZXRRUE1l
dGE6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5oYW5kbGVyCityZXR1cm4gdCYmKDAsci5nZXQpKHQsIl9x
cCIpfSxfcXVlcnlQYXJhbXNGb3I6ZnVuY3Rpb24oZSl7dmFyIG4scixpLG8scyxhLHU9ZVtlLmxl
bmd0aC0xXS5uYW1lCitpZih0aGlzLl9xcENhY2hlW3VdKXJldHVybiB0aGlzLl9xcENhY2hlW3Vd
Cit2YXIgbD0hMCxjPXt9LHA9e30sZj1bXQorZm9yKG49MDtuPGUubGVuZ3RoOysrbilpZihyPXRo
aXMuX2dldFFQTWV0YShlW25dKSl7Zm9yKGk9MDtpPHIucXBzLmxlbmd0aDtpKyspbz1yLnFwc1tp
XSxzPW8udXJsS2V5LGE9Y1tzXSxhJiZhLmNvbnRyb2xsZXJOYW1lIT09by5jb250cm9sbGVyTmFt
ZSYmY1tzXSxjW3NdPW8sZi5wdXNoKG8pOygwLHQuYXNzaWduKShwLHIubWFwKX1lbHNlIGw9ITEK
K3ZhciBoPXtxcHM6ZixtYXA6cH0KK3JldHVybiBsJiYodGhpcy5fcXBDYWNoZVt1XT1oKSxofSxf
ZnVsbHlTY29wZVF1ZXJ5UGFyYW1zOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8scyxhLHUsbCxj
PWIodGhpcyxlLHQpLHA9Yy5oYW5kbGVySW5mb3MKK2ZvcihyPTAsaT1wLmxlbmd0aDtyPGk7Kyty
KWlmKG89dGhpcy5fZ2V0UVBNZXRhKHBbcl0pKWZvcihzPTAsYT1vLnFwcy5sZW5ndGg7czxhOysr
cyl1PW8ucXBzW3NdLChsPXUucHJvcCBpbiBuJiZ1LnByb3B8fHUuc2NvcGVkUHJvcGVydHlOYW1l
IGluIG4mJnUuc2NvcGVkUHJvcGVydHlOYW1lfHx1LnVybEtleSBpbiBuJiZ1LnVybEtleSkmJmwh
PT11LnNjb3BlZFByb3BlcnR5TmFtZSYmKG5bdS5zY29wZWRQcm9wZXJ0eU5hbWVdPW5bbF0sZGVs
ZXRlIG5bbF0pfSxfaHlkcmF0ZVVuc3VwcGxpZWRRdWVyeVBhcmFtczpmdW5jdGlvbihlLHQpe3Zh
ciBuLHIsaSxvLHMsYSx1LGM9ZS5oYW5kbGVySW5mb3MscD10aGlzLl9idWNrZXRDYWNoZQorZm9y
KG49MDtuPGMubGVuZ3RoOysrbilpZihyPXRoaXMuX2dldFFQTWV0YShjW25dKSlmb3IoaT0wLG89
ci5xcHMubGVuZ3RoO2k8bzsrK2kpcz1yLnFwc1tpXSxhPXMucHJvcCBpbiB0JiZzLnByb3B8fHMu
c2NvcGVkUHJvcGVydHlOYW1lIGluIHQmJnMuc2NvcGVkUHJvcGVydHlOYW1lfHxzLnVybEtleSBp
biB0JiZzLnVybEtleSxhP2EhPT1zLnNjb3BlZFByb3BlcnR5TmFtZSYmKHRbcy5zY29wZWRQcm9w
ZXJ0eU5hbWVdPXRbYV0sZGVsZXRlIHRbYV0pOih1PSgwLGwuY2FsY3VsYXRlQ2FjaGVLZXkpKHMu
cm91dGUuZnVsbFJvdXRlTmFtZSxzLnBhcnRzLGUucGFyYW1zKSx0W3Muc2NvcGVkUHJvcGVydHlO
YW1lXT1wLmxvb2t1cCh1LHMucHJvcCxzLmRlZmF1bHRWYWx1ZSkpfSxfc2NoZWR1bGVMb2FkaW5n
RXZlbnQ6ZnVuY3Rpb24oZSx0KXt0aGlzLl9jYW5jZWxTbG93VHJhbnNpdGlvblRpbWVyKCksdGhp
cy5fc2xvd1RyYW5zaXRpb25UaW1lcj1yLnJ1bi5zY2hlZHVsZU9uY2UoInJvdXRlclRyYW5zaXRp
b25zIix0aGlzLCJfaGFuZGxlU2xvd1RyYW5zaXRpb24iLGUsdCl9LGN1cnJlbnRTdGF0ZTpudWxs
LHRhcmdldFN0YXRlOm51bGwsX2hhbmRsZVNsb3dUcmFuc2l0aW9uOmZ1bmN0aW9uKGUsdCl7dGhp
cy5fcm91dGVyTWljcm9saWIuYWN0aXZlVHJhbnNpdGlvbiYmKHRoaXMuc2V0KCJ0YXJnZXRTdGF0
ZSIsYy5kZWZhdWx0LmNyZWF0ZSh7ZW1iZXJSb3V0ZXI6dGhpcyxyb3V0ZXJKczp0aGlzLl9yb3V0
ZXJNaWNyb2xpYixyb3V0ZXJKc1N0YXRlOnRoaXMuX3JvdXRlck1pY3JvbGliLmFjdGl2ZVRyYW5z
aXRpb24uc3RhdGV9KSksZS50cmlnZ2VyKCEwLCJsb2FkaW5nIixlLHQpKX0sX2NhbmNlbFNsb3dU
cmFuc2l0aW9uVGltZXI6ZnVuY3Rpb24oKXt0aGlzLl9zbG93VHJhbnNpdGlvblRpbWVyJiZyLnJ1
bi5jYW5jZWwodGhpcy5fc2xvd1RyYW5zaXRpb25UaW1lciksdGhpcy5fc2xvd1RyYW5zaXRpb25U
aW1lcj1udWxsfSxfbWFya0Vycm9yQXNIYW5kbGVkOmZ1bmN0aW9uKGUpe3RoaXMuX2hhbmRsZWRF
cnJvcnNbZV09ITB9LF9pc0Vycm9ySGFuZGxlZDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5faGFu
ZGxlZEVycm9yc1tlXX0sX2NsZWFySGFuZGxlZEVycm9yOmZ1bmN0aW9uKGUpe2RlbGV0ZSB0aGlz
Ll9oYW5kbGVkRXJyb3JzW2VdfSxfZ2V0RW5naW5lSW5zdGFuY2U6ZnVuY3Rpb24oZSl7dmFyIG4s
cj1lLm5hbWUsaT1lLmluc3RhbmNlSWQsbz1lLm1vdW50UG9pbnQscz10aGlzLl9lbmdpbmVJbnN0
YW5jZXMKK3Nbcl18fChzW3JdPU9iamVjdC5jcmVhdGUobnVsbCkpCit2YXIgYT1zW3JdW2ldCity
ZXR1cm4gYXx8KG49KDAsdC5nZXRPd25lcikodGhpcyksYT1uLmJ1aWxkQ2hpbGRFbmdpbmVJbnN0
YW5jZShyLHtyb3V0YWJsZTohMCxtb3VudFBvaW50Om99KSxhLmJvb3QoKSxzW3JdW2ldPWEpLGF9
fSksaz17d2lsbFJlc29sdmVNb2RlbDpmdW5jdGlvbihlLHQpe3Qucm91dGVyLl9zY2hlZHVsZUxv
YWRpbmdFdmVudChlLHQpfSxlcnJvcjpmdW5jdGlvbihlLHQsbil7dmFyIHI9dC5zdGF0ZS5oYW5k
bGVySW5mb3MsaT1uLnJvdXRlcgoraChuLHIsZnVuY3Rpb24odCl7aWYobiE9PXQmJihyPWcodCwi
ZXJyb3IiKSkpcmV0dXJuIGkuaW50ZXJtZWRpYXRlVHJhbnNpdGlvblRvKHIsZSksITEKK3ZhciBy
LG89bSh0LCJlcnJvciIpCityZXR1cm4hb3x8KGkuaW50ZXJtZWRpYXRlVHJhbnNpdGlvblRvKG8s
ZSksITEpfSksZChlLCJFcnJvciB3aGlsZSBwcm9jZXNzaW5nIHJvdXRlOiAiK3QudGFyZ2V0TmFt
ZSl9LGxvYWRpbmc6ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLnN0YXRlLmhhbmRsZXJJbmZvcyxyPXQu
cm91dGVyCitoKHQsbixmdW5jdGlvbihuKXtpZih0IT09biYmKGk9ZyhuLCJsb2FkaW5nIikpKXJl
dHVybiByLmludGVybWVkaWF0ZVRyYW5zaXRpb25UbyhpKSwhMQordmFyIGksbz1tKG4sImxvYWRp
bmciKQorcmV0dXJuIG8/KHIuaW50ZXJtZWRpYXRlVHJhbnNpdGlvblRvKG8pLCExKTplLnBpdm90
SGFuZGxlciE9PW59KX19CitSLnJlb3BlbkNsYXNzKHtyb3V0ZXI6bnVsbCxtYXA6ZnVuY3Rpb24o
ZSl7cmV0dXJuIHRoaXMuZHNsQ2FsbGJhY2tzfHwodGhpcy5kc2xDYWxsYmFja3M9W10sdGhpcy5y
ZW9wZW5DbGFzcyh7ZHNsQ2FsbGJhY2tzOnRoaXMuZHNsQ2FsbGJhY2tzfSkpLHRoaXMuZHNsQ2Fs
bGJhY2tzLnB1c2goZSksdGhpc30sX3JvdXRlUGF0aDpmdW5jdGlvbihlKXt2YXIgdCxuPVtdLHI9
dm9pZCAwLGk9dm9pZCAwLG89dm9pZCAwCitmb3IodD0xO3Q8ZS5sZW5ndGg7dCsrKXtmb3Iocj1l
W3RdLm5hbWUsaT1yLnNwbGl0KCIuIiksbz1TLmNhbGwobik7by5sZW5ndGgmJiFmdW5jdGlvbihl
LHQpe3ZhciBuCitmb3Iobj0wO248ZS5sZW5ndGg7KytuKWlmKGVbbl0hPT10W25dKXJldHVybiEx
CityZXR1cm4hMH0obyxpKTspby5zaGlmdCgpCituLnB1c2guYXBwbHkobixpLnNsaWNlKG8ubGVu
Z3RoKSl9cmV0dXJuIG4uam9pbigiLiIpfX0pLCgwLHIuZGVwcmVjYXRlUHJvcGVydHkpKFIucHJv
dG90eXBlLCJyb3V0ZXIiLCJfcm91dGVyTWljcm9saWIiLHtpZDoiZW1iZXItcm91dGVyLnJvdXRl
ciIsdW50aWw6IjIuMTYiLHVybDoiaHR0cDovL2VtYmVyanMuY29tL2RlcHJlY2F0aW9ucy92Mi54
LyN0b2NfZW1iZXItcm91dGVyLXJvdXRlci1yZW5hbWVkLXRvLWVtYmVyLXJvdXRlci1fcm91dGVy
bWljcm9saWIifSksZS5kZWZhdWx0PVJ9KSxlKCJlbWJlci1yb3V0aW5nL3N5c3RlbS9yb3V0ZXJf
c3RhdGUiLFsiZXhwb3J0cyIsImVtYmVyLXV0aWxzIiwiZW1iZXItbWV0YWwiLCJlbWJlci1ydW50
aW1lIl0sZnVuY3Rpb24oZSx0LG4scil7InVzZSBzdHJpY3QiCitmdW5jdGlvbiBpKGUsdCl7dmFy
IG49dm9pZCAwCitmb3IobiBpbiBlKWlmKGUuaGFzT3duUHJvcGVydHkobikmJmVbbl0hPT10W25d
KXJldHVybiExCitmb3IobiBpbiB0KWlmKHQuaGFzT3duUHJvcGVydHkobikmJmVbbl0hPT10W25d
KXJldHVybiExCityZXR1cm4hMH1lLmRlZmF1bHQ9ci5PYmplY3QuZXh0ZW5kKHtlbWJlclJvdXRl
cjpudWxsLHJvdXRlckpzOm51bGwscm91dGVySnNTdGF0ZTpudWxsLGlzQWN0aXZlSW50ZW50OmZ1
bmN0aW9uKGUscixvLHMpe3ZhciBhLHU9dGhpcy5yb3V0ZXJKc1N0YXRlCitpZighdGhpcy5yb3V0
ZXJKcy5pc0FjdGl2ZUludGVudChlLHIsbnVsbCx1KSlyZXR1cm4hMQordmFyIGw9KDAsbi5pc0Vt
cHR5KShPYmplY3Qua2V5cyhvKSkKK3JldHVybiEocyYmIWwpfHwoYT17fSwoMCx0LmFzc2lnbiko
YSxvKSx0aGlzLmVtYmVyUm91dGVyLl9wcmVwYXJlUXVlcnlQYXJhbXMoZSxyLGEpLGkoYSx1LnF1
ZXJ5UGFyYW1zKSl9fSl9KSxlKCJlbWJlci1yb3V0aW5nL3V0aWxzIixbImV4cG9ydHMiLCJlbWJl
ci11dGlscyIsImVtYmVyLW1ldGFsIiwiZW1iZXItZGVidWciXSxmdW5jdGlvbihlLHQsbixyKXsi
dXNlIHN0cmljdCIKK2Z1bmN0aW9uIGkoZSx0KXt2YXIgbixyLGk9ZS5zcGxpdCgiLiIpLG89IiIK
K2ZvcihuPTA7bjxpLmxlbmd0aCYmKHI9aS5zbGljZSgwLG4rMSkuam9pbigiLiIpLDA9PT10Lmlu
ZGV4T2YocikpO24rKylvPXIKK3JldHVybiBvfWZ1bmN0aW9uIG8oZSxuKXt2YXIgcixpPWUsbz12
b2lkIDAKKyJzdHJpbmciPT10eXBlb2YgaSYmKG89e30sb1tpXT17YXM6bnVsbH0saT1vKQorZm9y
KHZhciBzIGluIGkpe2lmKCFpLmhhc093blByb3BlcnR5KHMpKXJldHVybgorcj1pW3NdLCJzdHJp
bmciPT10eXBlb2YgciYmKHI9e2FzOnJ9KSxvPW5bc118fHthczpudWxsLHNjb3BlOiJtb2RlbCJ9
LCgwLHQuYXNzaWduKShvLHIpLG5bc109b319ZnVuY3Rpb24gcyhlKXtyZXR1cm4ic3RyaW5nIj09
dHlwZW9mIGUmJigiIj09PWV8fCIvIj09PWUuY2hhckF0KDApKX1lLnJvdXRlQXJncz1mdW5jdGlv
bihlLHQsbil7dmFyIHI9W10KK3JldHVybiJzdHJpbmciPT10eXBlb2YgZSYmci5wdXNoKCIiK2Up
LHIucHVzaC5hcHBseShyLHQpLHIucHVzaCh7cXVlcnlQYXJhbXM6bn0pLHJ9LGUuZ2V0QWN0aXZl
VGFyZ2V0TmFtZT1mdW5jdGlvbihlKXt2YXIgdD1lLmFjdGl2ZVRyYW5zaXRpb24/ZS5hY3RpdmVU
cmFuc2l0aW9uLnN0YXRlLmhhbmRsZXJJbmZvczplLnN0YXRlLmhhbmRsZXJJbmZvcworcmV0dXJu
IHRbdC5sZW5ndGgtMV0ubmFtZX0sZS5zdGFzaFBhcmFtTmFtZXM9ZnVuY3Rpb24oZSx0KXtpZigh
dC5fbmFtZXNTdGFzaGVkKXt2YXIgbixyLGksbyxzPXRbdC5sZW5ndGgtMV0ubmFtZSxhPWUuX3Jv
dXRlck1pY3JvbGliLnJlY29nbml6ZXIuaGFuZGxlcnNGb3IocyksdT1udWxsCitmb3Iobj0wO248
dC5sZW5ndGg7KytuKXI9dFtuXSxpPWFbbl0ubmFtZXMsaS5sZW5ndGgmJih1PXIpLHIuX25hbWVz
PWksbz1yLmhhbmRsZXIsby5fc3Rhc2hOYW1lcyhyLHUpCit0Ll9uYW1lc1N0YXNoZWQ9ITB9fSxl
LmNhbGN1bGF0ZUNhY2hlS2V5PWZ1bmN0aW9uKGUpe3ZhciB0LHIsbyxzLHUsbD1hcmd1bWVudHMu
bGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06W10sYz1hcmd1bWVu
dHNbMl0scD0iIgorZm9yKHQ9MDt0PGwubGVuZ3RoOysrdClyPWxbdF0sbz1pKGUscikscz12b2lk
IDAsYyYmKG8mJm8gaW4gYz8odT0wPT09ci5pbmRleE9mKG8pP3Iuc3Vic3RyKG8ubGVuZ3RoKzEp
OnIscz0oMCxuLmdldCkoY1tvXSx1KSk6cz0oMCxuLmdldCkoYyxyKSkscCs9Ijo6IityKyI6Iitz
CityZXR1cm4gZStwLnJlcGxhY2UoYSwiLSIpfSxlLm5vcm1hbGl6ZUNvbnRyb2xsZXJRdWVyeVBh
cmFtcz1mdW5jdGlvbihlKXt2YXIgdCxuPXt9Citmb3IodD0wO3Q8ZS5sZW5ndGg7Kyt0KW8oZVt0
XSxuKQorcmV0dXJuIG59LGUucHJlZml4Um91dGVOYW1lQXJnPWZ1bmN0aW9uKGUsbil7dmFyIGk9
blswXSxvPSgwLHQuZ2V0T3duZXIpKGUpLGE9by5tb3VudFBvaW50CitpZihvLnJvdXRhYmxlJiYi
c3RyaW5nIj09dHlwZW9mIGkpe2lmKHMoaSkpdGhyb3cgbmV3IHIuRXJyb3IoIlByb2dyYW1tYXRp
YyB0cmFuc2l0aW9ucyBieSBVUkwgY2Fubm90IGJlIHVzZWQgd2l0aGluIGFuIEVuZ2luZS4gUGxl
YXNlIHVzZSB0aGUgcm91dGUgbmFtZSBpbnN0ZWFkLiIpCitpPWErIi4iK2ksblswXT1pfXJldHVy
biBufQordmFyIGE9L1wuL2d9KSxlKCJlbWJlci1ydW50aW1lL2NvbXBhcmUiLFsiZXhwb3J0cyIs
ImVtYmVyLXJ1bnRpbWUvdXRpbHMiLCJlbWJlci1ydW50aW1lL21peGlucy9jb21wYXJhYmxlIl0s
ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IgorZnVuY3Rpb24gcihlLHQpe3ZhciBuPWUtdAor
cmV0dXJuKG4+MCktKG48MCl9ZnVuY3Rpb24gaShlLHMpe2lmKGU9PT1zKXJldHVybiAwCit2YXIg
YSx1LGwsYyxwLGY9KDAsdC50eXBlT2YpKGUpLGg9KDAsdC50eXBlT2YpKHMpCitpZihuLmRlZmF1
bHQpe2lmKCJpbnN0YW5jZSI9PT1mJiZuLmRlZmF1bHQuZGV0ZWN0KGUpJiZlLmNvbnN0cnVjdG9y
LmNvbXBhcmUpcmV0dXJuIGUuY29uc3RydWN0b3IuY29tcGFyZShlLHMpCitpZigiaW5zdGFuY2Ui
PT09aCYmbi5kZWZhdWx0LmRldGVjdChzKSYmcy5jb25zdHJ1Y3Rvci5jb21wYXJlKXJldHVybi0x
KnMuY29uc3RydWN0b3IuY29tcGFyZShzLGUpfXZhciBkPXIob1tmXSxvW2hdKQoraWYoMCE9PWQp
cmV0dXJuIGQKK3N3aXRjaChmKXtjYXNlImJvb2xlYW4iOmNhc2UibnVtYmVyIjpyZXR1cm4gcihl
LHMpCitjYXNlInN0cmluZyI6cmV0dXJuIHIoZS5sb2NhbGVDb21wYXJlKHMpLDApCitjYXNlImFy
cmF5Ijpmb3IoYT1lLmxlbmd0aCx1PXMubGVuZ3RoLGw9TWF0aC5taW4oYSx1KSxjPTA7YzxsO2Mr
KylpZigwIT09KHA9aShlW2NdLHNbY10pKSlyZXR1cm4gcAorcmV0dXJuIHIoYSx1KQorY2FzZSJp
bnN0YW5jZSI6cmV0dXJuIG4uZGVmYXVsdCYmbi5kZWZhdWx0LmRldGVjdChlKT9lLmNvbXBhcmUo
ZSxzKTowCitjYXNlImRhdGUiOnJldHVybiByKGUuZ2V0VGltZSgpLHMuZ2V0VGltZSgpKQorZGVm
YXVsdDpyZXR1cm4gMH19ZS5kZWZhdWx0PWkKK3ZhciBvPXt1bmRlZmluZWQ6MCxudWxsOjEsYm9v
bGVhbjoyLG51bWJlcjozLHN0cmluZzo0LGFycmF5OjUsb2JqZWN0OjYsaW5zdGFuY2U6NyxmdW5j
dGlvbjo4LGNsYXNzOjksZGF0ZToxMH19KSxlKCJlbWJlci1ydW50aW1lL2NvbXB1dGVkL2NvbXB1
dGVkX21hY3JvcyIsWyJleHBvcnRzIiwiZW1iZXItbWV0YWwiLCJlbWJlci1kZWJ1ZyJdLGZ1bmN0
aW9uKGUsdCxuKXsidXNlIHN0cmljdCIKK2Z1bmN0aW9uIHIoZSxuKXtmdW5jdGlvbiByKGUpe3Mu
cHVzaChlKX12YXIgaSxvLHM9W10KK2ZvcihpPTA7aTxuLmxlbmd0aDtpKyspbz1uW2ldLCgwLHQu
ZXhwYW5kUHJvcGVydGllcykobyxyKQorcmV0dXJuIHN9ZnVuY3Rpb24gaShlLG4pe3JldHVybiBm
dW5jdGlvbigpe2ZvcihpPWFyZ3VtZW50cy5sZW5ndGgsbz1BcnJheShpKSxzPTA7czxpO3MrKylv
W3NdPWFyZ3VtZW50c1tzXQordmFyIGksbyxzLGE9cihlLG8pLHU9KDAsdC5jb21wdXRlZCkoZnVu
Y3Rpb24oKXt2YXIgZSxyLGk9YS5sZW5ndGgtMQorZm9yKGU9MDtlPGk7ZSsrKWlmKHI9KDAsdC5n
ZXQpKHRoaXMsYVtlXSksIW4ocikpcmV0dXJuIHIKK3JldHVybigwLHQuZ2V0KSh0aGlzLGFbaV0p
fSkKK3JldHVybiB1LnByb3BlcnR5LmFwcGx5KHUsYSl9fWUub3I9ZS5hbmQ9dm9pZCAwLGUuZW1w
dHk9ZnVuY3Rpb24oZSl7cmV0dXJuKDAsdC5jb21wdXRlZCkoZSsiLmxlbmd0aCIsZnVuY3Rpb24o
KXtyZXR1cm4oMCx0LmlzRW1wdHkpKCgwLHQuZ2V0KSh0aGlzLGUpKX0pfSxlLm5vdEVtcHR5PWZ1
bmN0aW9uKGUpe3JldHVybigwLHQuY29tcHV0ZWQpKGUrIi5sZW5ndGgiLGZ1bmN0aW9uKCl7cmV0
dXJuISgwLHQuaXNFbXB0eSkoKDAsdC5nZXQpKHRoaXMsZSkpfSl9LGUubm9uZT1mdW5jdGlvbihl
KXtyZXR1cm4oMCx0LmNvbXB1dGVkKShlLGZ1bmN0aW9uKCl7cmV0dXJuKDAsdC5pc05vbmUpKCgw
LHQuZ2V0KSh0aGlzLGUpKX0pfSxlLm5vdD1mdW5jdGlvbihlKXtyZXR1cm4oMCx0LmNvbXB1dGVk
KShlLGZ1bmN0aW9uKCl7cmV0dXJuISgwLHQuZ2V0KSh0aGlzLGUpfSl9LGUuYm9vbD1mdW5jdGlv
bihlKXtyZXR1cm4oMCx0LmNvbXB1dGVkKShlLGZ1bmN0aW9uKCl7cmV0dXJuISEoMCx0LmdldCko
dGhpcyxlKX0pfSxlLm1hdGNoPWZ1bmN0aW9uKGUsbil7cmV0dXJuKDAsdC5jb21wdXRlZCkoZSxm
dW5jdGlvbigpe3ZhciByPSgwLHQuZ2V0KSh0aGlzLGUpCityZXR1cm4ic3RyaW5nIj09dHlwZW9m
IHImJm4udGVzdChyKX0pfSxlLmVxdWFsPWZ1bmN0aW9uKGUsbil7cmV0dXJuKDAsdC5jb21wdXRl
ZCkoZSxmdW5jdGlvbigpe3JldHVybigwLHQuZ2V0KSh0aGlzLGUpPT09bn0pfSxlLmd0PWZ1bmN0
aW9uKGUsbil7cmV0dXJuKDAsdC5jb21wdXRlZCkoZSxmdW5jdGlvbigpe3JldHVybigwLHQuZ2V0
KSh0aGlzLGUpPm59KX0sZS5ndGU9ZnVuY3Rpb24oZSxuKXtyZXR1cm4oMCx0LmNvbXB1dGVkKShl
LGZ1bmN0aW9uKCl7cmV0dXJuKDAsdC5nZXQpKHRoaXMsZSk+PW59KX0sZS5sdD1mdW5jdGlvbihl
LG4pe3JldHVybigwLHQuY29tcHV0ZWQpKGUsZnVuY3Rpb24oKXtyZXR1cm4oMCx0LmdldCkodGhp
cyxlKTxufSl9LGUubHRlPWZ1bmN0aW9uKGUsbil7cmV0dXJuKDAsdC5jb21wdXRlZCkoZSxmdW5j
dGlvbigpe3JldHVybigwLHQuZ2V0KSh0aGlzLGUpPD1ufSl9LGUub25lV2F5PWZ1bmN0aW9uKGUp
e3JldHVybigwLHQuYWxpYXMpKGUpLm9uZVdheSgpfSxlLnJlYWRPbmx5PWZ1bmN0aW9uKGUpe3Jl
dHVybigwLHQuYWxpYXMpKGUpLnJlYWRPbmx5KCl9LGUuZGVwcmVjYXRpbmdBbGlhcz1mdW5jdGlv
bihlLG4pe3JldHVybigwLHQuY29tcHV0ZWQpKGUse2dldDpmdW5jdGlvbihuKXtyZXR1cm4oMCx0
LmdldCkodGhpcyxlKX0sc2V0OmZ1bmN0aW9uKG4scil7cmV0dXJuKDAsdC5zZXQpKHRoaXMsZSxy
KSxyfX0pfSxlLmFuZD1pKCJhbmQiLGZ1bmN0aW9uKGUpe3JldHVybiBlfSksZS5vcj1pKCJvciIs
ZnVuY3Rpb24oZSl7cmV0dXJuIWV9KX0pLGUoImVtYmVyLXJ1bnRpbWUvY29tcHV0ZWQvcmVkdWNl
X2NvbXB1dGVkX21hY3JvcyIsWyJleHBvcnRzIiwiZW1iZXItdXRpbHMiLCJlbWJlci1kZWJ1ZyIs
ImVtYmVyLW1ldGFsIiwiZW1iZXItcnVudGltZS9jb21wYXJlIiwiZW1iZXItcnVudGltZS91dGls
cyIsImVtYmVyLXJ1bnRpbWUvc3lzdGVtL25hdGl2ZV9hcnJheSJdLGZ1bmN0aW9uKGUsdCxuLHIs
aSxvLHMpeyJ1c2Ugc3RyaWN0IgorZnVuY3Rpb24gYShlLHQsbil7cmV0dXJuKDAsci5jb21wdXRl
ZCkoZSsiLltdIixmdW5jdGlvbigpe3ZhciBpPXRoaXMsbz0oMCxyLmdldCkodGhpcyxlKQorcmV0
dXJuIG51bGw9PT1vfHwib2JqZWN0IiE9dHlwZW9mIG8/bjpvLnJlZHVjZShmdW5jdGlvbihlLG4s
cixvKXtyZXR1cm4gdC5jYWxsKGksZSxuLHIsbyl9LG4pfSkucmVhZE9ubHkoKX1mdW5jdGlvbiB1
KGUsdCl7dmFyIG49dm9pZCAwCityZXR1cm4vQGVhY2gvLnRlc3QoZSk/bj1lLnJlcGxhY2UoL1wu
QGVhY2guKiQvLCIiKToobj1lLGUrPSIuW10iKSwoMCxyLmNvbXB1dGVkKShlLGZ1bmN0aW9uKCl7
dmFyIGU9KDAsci5nZXQpKHRoaXMsbikKK3JldHVybigwLG8uaXNBcnJheSkoZSk/KDAscy5BKSh0
LmNhbGwodGhpcyxlKSk6KDAscy5BKSgpfSkucmVhZE9ubHkoKX1mdW5jdGlvbiBsKGUsdCl7dmFy
IG49ZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUrIi5bXSJ9KQorcmV0dXJuIG4ucHVzaChmdW5j
dGlvbigpe3JldHVybigwLHMuQSkodC5jYWxsKHRoaXMsZSkpfSksci5jb21wdXRlZC5hcHBseSh0
aGlzLG4pLnJlYWRPbmx5KCl9ZnVuY3Rpb24gYyhlLHQpe3JldHVybiB1KGUsZnVuY3Rpb24oZSl7
cmV0dXJuIGUubWFwKHQsdGhpcyl9KX1mdW5jdGlvbiBwKGUsdCl7cmV0dXJuIHUoZSxmdW5jdGlv
bihlKXtyZXR1cm4gZS5maWx0ZXIodCx0aGlzKX0pfWZ1bmN0aW9uIGYoKXt2YXIgZSx0LG4KK2Zv
cihlPWFyZ3VtZW50cy5sZW5ndGgsdD1BcnJheShlKSxuPTA7bjxlO24rKyl0W25dPWFyZ3VtZW50
c1tuXQorcmV0dXJuIGwodCxmdW5jdGlvbihlKXt2YXIgdD10aGlzLG49KDAscy5BKSgpCityZXR1
cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciBpPSgwLHIuZ2V0KSh0LGUpOygwLG8uaXNBcnJh
eSkoaSkmJmkuZm9yRWFjaChmdW5jdGlvbihlKXstMT09PW4uaW5kZXhPZihlKSYmbi5wdXNoKGUp
fSl9KSxufSl9ZnVuY3Rpb24gaChlLHQpe3JldHVybiB1KGUsZnVuY3Rpb24oZSl7dmFyIG49dGhp
cworcmV0dXJuIGUuc2xpY2UoKS5zb3J0KGZ1bmN0aW9uKGUscil7cmV0dXJuIHQuY2FsbChuLGUs
cil9KX0pfWZ1bmN0aW9uIGQoZSx0KXt2YXIgbj1uZXcgci5Db21wdXRlZFByb3BlcnR5KGZ1bmN0
aW9uKGkpe2Z1bmN0aW9uIGEoKXt0aGlzLm5vdGlmeVByb3BlcnR5Q2hhbmdlKGkpfXZhciB1PXRo
aXMsbD0iQHRoaXMiPT09ZSxjPSgwLHIuZ2V0KSh0aGlzLHQpLHA9bShjKSxmPW4uX2FjdGl2ZU9i
c2VydmVyTWFwfHwobi5fYWN0aXZlT2JzZXJ2ZXJNYXA9bmV3IHIuV2Vha01hcCksaD1mLmdldCh0
aGlzKQoraCYmaC5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiByLnJlbW92ZU9ic2VydmVyLmFw
cGx5KHZvaWQgMCxlKX0pLGg9cC5tYXAoZnVuY3Rpb24odCl7dmFyIG49dFswXSxpPWw/IkBlYWNo
LiIrbjplKyIuQGVhY2guIituLG89W3UsaSxhXQorcmV0dXJuIHIuYWRkT2JzZXJ2ZXIuYXBwbHko
dm9pZCAwLG8pLG99KSxmLnNldCh0aGlzLGgpCit2YXIgZD1sP3RoaXM6KDAsci5nZXQpKHRoaXMs
ZSkKK3JldHVybigwLG8uaXNBcnJheSkoZCk/ZyhkLHApOigwLHMuQSkoKX0pCityZXR1cm4gbi5f
YWN0aXZlT2JzZXJ2ZXJNYXA9dm9pZCAwLG4ucHJvcGVydHkodCsiLltdIikucmVhZE9ubHkoKX1m
dW5jdGlvbiBtKGUpe3JldHVybiBlLm1hcChmdW5jdGlvbihlKXt2YXIgdD1lLnNwbGl0KCI6Iiks
bj10WzBdLHI9dFsxXQorcmV0dXJuIHI9cnx8ImFzYyIsW24scl19KX1mdW5jdGlvbiBnKGUsdCl7
cmV0dXJuKDAscy5BKShlLnNsaWNlKCkuc29ydChmdW5jdGlvbihlLG4pe3ZhciBvLHMsYSx1LGwK
K2ZvcihvPTA7bzx0Lmxlbmd0aDtvKyspaWYocz10W29dLGE9c1swXSx1PXNbMV0sMCE9PShsPSgw
LGkuZGVmYXVsdCkoKDAsci5nZXQpKGUsYSksKDAsci5nZXQpKG4sYSkpKSlyZXR1cm4iZGVzYyI9
PT11Py0xKmw6bAorcmV0dXJuIDB9KSl9ZS51bmlvbj12b2lkIDAsZS5zdW09ZnVuY3Rpb24oZSl7
cmV0dXJuIGEoZSxmdW5jdGlvbihlLHQpe3JldHVybiBlK3R9LDApfSxlLm1heD1mdW5jdGlvbihl
KXtyZXR1cm4gYShlLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIE1hdGgubWF4KGUsdCl9LC0xLzApfSxl
Lm1pbj1mdW5jdGlvbihlKXtyZXR1cm4gYShlLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIE1hdGgubWlu
KGUsdCl9LDEvMCl9LGUubWFwPWMsZS5tYXBCeT1mdW5jdGlvbihlLHQpe3JldHVybiBjKGUrIi5A
ZWFjaC4iK3QsZnVuY3Rpb24oZSl7cmV0dXJuKDAsci5nZXQpKGUsdCl9KX0sZS5maWx0ZXI9cCxl
LmZpbHRlckJ5PWZ1bmN0aW9uKGUsdCxuKXt2YXIgaT12b2lkIDAKK3JldHVybiBpPTI9PT1hcmd1
bWVudHMubGVuZ3RoP2Z1bmN0aW9uKGUpe3JldHVybigwLHIuZ2V0KShlLHQpfTpmdW5jdGlvbihl
KXtyZXR1cm4oMCxyLmdldCkoZSx0KT09PW59LHAoZSsiLkBlYWNoLiIrdCxpKX0sZS51bmlxPWYs
ZS51bmlxQnk9ZnVuY3Rpb24oZSxuKXtyZXR1cm4oMCxyLmNvbXB1dGVkKShlKyIuW10iLGZ1bmN0
aW9uKCl7dmFyIGk9KDAscy5BKSgpLGE9T2JqZWN0LmNyZWF0ZShudWxsKSx1PSgwLHIuZ2V0KSh0
aGlzLGUpCityZXR1cm4oMCxvLmlzQXJyYXkpKHUpJiZ1LmZvckVhY2goZnVuY3Rpb24oZSl7dmFy
IG89KDAsdC5ndWlkRm9yKSgoMCxyLmdldCkoZSxuKSkKK28gaW4gYXx8KGFbb109ITAsaS5wdXNo
KGUpKX0pLGl9KS5yZWFkT25seSgpfSxlLmludGVyc2VjdD1mdW5jdGlvbigpe3ZhciBlLHQsbgor
Zm9yKGU9YXJndW1lbnRzLmxlbmd0aCx0PUFycmF5KGUpLG49MDtuPGU7bisrKXRbbl09YXJndW1l
bnRzW25dCityZXR1cm4gbCh0LGZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj1lLm1hcChmdW5jdGlv
bihlKXt2YXIgbj0oMCxyLmdldCkodCxlKQorcmV0dXJuKDAsby5pc0FycmF5KShuKT9uOltdfSks
aT1uLnBvcCgpLmZpbHRlcihmdW5jdGlvbihlKXt2YXIgdCxyLGksbworZm9yKHQ9MDt0PG4ubGVu
Z3RoO3QrKyl7Zm9yKHI9ITEsaT1uW3RdLG89MDtvPGkubGVuZ3RoO28rKylpZihpW29dPT09ZSl7
cj0hMAorYnJlYWt9aWYoITE9PT1yKXJldHVybiExfXJldHVybiEwfSkKK3JldHVybigwLHMuQSko
aSl9KX0sZS5zZXREaWZmPWZ1bmN0aW9uKGUsdCl7aWYoMiE9PWFyZ3VtZW50cy5sZW5ndGgpdGhy
b3cgbmV3IG4uRXJyb3IoInNldERpZmYgcmVxdWlyZXMgZXhhY3RseSB0d28gZGVwZW5kZW50IGFy
cmF5cy4iKQorcmV0dXJuKDAsci5jb21wdXRlZCkoZSsiLltdIix0KyIuW10iLGZ1bmN0aW9uKCl7
dmFyIG49dGhpcy5nZXQoZSkscj10aGlzLmdldCh0KQorcmV0dXJuKDAsby5pc0FycmF5KShuKT8o
MCxvLmlzQXJyYXkpKHIpP24uZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybi0xPT09ci5pbmRleE9m
KGUpfSk6KDAscy5BKShuKTooMCxzLkEpKCl9KS5yZWFkT25seSgpfSxlLmNvbGxlY3Q9ZnVuY3Rp
b24oKXt2YXIgZSx0LG4KK2ZvcihlPWFyZ3VtZW50cy5sZW5ndGgsdD1BcnJheShlKSxuPTA7bjxl
O24rKyl0W25dPWFyZ3VtZW50c1tuXQorcmV0dXJuIGwodCxmdW5jdGlvbigpe3ZhciBlPSgwLHIu
Z2V0UHJvcGVydGllcykodGhpcyx0KSxuPSgwLHMuQSkoKQorZm9yKHZhciBpIGluIGUpZS5oYXNP
d25Qcm9wZXJ0eShpKSYmKCgwLHIuaXNOb25lKShlW2ldKT9uLnB1c2gobnVsbCk6bi5wdXNoKGVb
aV0pKQorcmV0dXJuIG59KX0sZS5zb3J0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuImZ1bmN0aW9uIj09
dHlwZW9mIHQ/aChlLHQpOmQoZSx0KX0sZS51bmlvbj1mfSksZSgiZW1iZXItcnVudGltZS9jb250
cm9sbGVycy9jb250cm9sbGVyIixbImV4cG9ydHMiLCJlbWJlci1kZWJ1ZyIsImVtYmVyLXJ1bnRp
bWUvc3lzdGVtL29iamVjdCIsImVtYmVyLXJ1bnRpbWUvbWl4aW5zL2NvbnRyb2xsZXIiLCJlbWJl
ci1ydW50aW1lL2luamVjdCIsImVtYmVyLXJ1bnRpbWUvbWl4aW5zL2FjdGlvbl9oYW5kbGVyIl0s
ZnVuY3Rpb24oZSx0LG4scixpLG8peyJ1c2Ugc3RyaWN0IgordmFyIHM9bi5kZWZhdWx0LmV4dGVu
ZChyLmRlZmF1bHQpOygwLG8uZGVwcmVjYXRlVW5kZXJzY29yZUFjdGlvbnMpKHMpLCgwLGkuY3Jl
YXRlSW5qZWN0aW9uSGVscGVyKSgiY29udHJvbGxlciIsZnVuY3Rpb24oZSl7fSksZS5kZWZhdWx0
PXN9KSxlKCJlbWJlci1ydW50aW1lL2NvcHkiLFsiZXhwb3J0cyIsImVtYmVyLWRlYnVnIiwiZW1i
ZXItcnVudGltZS9zeXN0ZW0vb2JqZWN0IiwiZW1iZXItcnVudGltZS9taXhpbnMvY29weWFibGUi
XSxmdW5jdGlvbihlLHQsbixyKXsidXNlIHN0cmljdCIKK2Z1bmN0aW9uIGkoZSx0LG4sbyl7dmFy
IHM9dm9pZCAwLGE9dm9pZCAwLHU9dm9pZCAwCitpZigib2JqZWN0IiE9dHlwZW9mIGV8fG51bGw9
PT1lKXJldHVybiBlCitpZih0JiYoYT1uLmluZGV4T2YoZSkpPj0wKXJldHVybiBvW2FdCitpZihB
cnJheS5pc0FycmF5KGUpKXtpZihzPWUuc2xpY2UoKSx0KWZvcihhPXMubGVuZ3RoOy0tYT49MDsp
c1thXT1pKHNbYV0sdCxuLG8pfWVsc2UgaWYoci5kZWZhdWx0JiZyLmRlZmF1bHQuZGV0ZWN0KGUp
KXM9ZS5jb3B5KHQsbixvKQorZWxzZSBpZihlIGluc3RhbmNlb2YgRGF0ZSlzPW5ldyBEYXRlKGUu
Z2V0VGltZSgpKQorZWxzZXtzPXt9Citmb3IodSBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3du
UHJvcGVydHkuY2FsbChlLHUpJiYiX18iIT09dS5zdWJzdHJpbmcoMCwyKSYmKHNbdV09dD9pKGVb
dV0sdCxuLG8pOmVbdV0pfXJldHVybiB0JiYobi5wdXNoKGUpLG8ucHVzaChzKSksc31lLmRlZmF1
bHQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4ib2JqZWN0IiE9dHlwZW9mIGV8fG51bGw9PT1lP2U6ci5k
ZWZhdWx0JiZyLmRlZmF1bHQuZGV0ZWN0KGUpP2UuY29weSh0KTppKGUsdCx0P1tdOm51bGwsdD9b
XTpudWxsKX19KSxlKCJlbWJlci1ydW50aW1lL2V4dC9mdW5jdGlvbiIsWyJlbWJlci1lbnZpcm9u
bWVudCIsImVtYmVyLW1ldGFsIiwiZW1iZXItZGVidWciXSxmdW5jdGlvbihlLHQsbil7InVzZSBz
dHJpY3QiCit2YXIgcj1BcnJheS5wcm90b3R5cGUuc2xpY2UsaT1GdW5jdGlvbi5wcm90b3R5cGUK
K2UuRU5WLkVYVEVORF9QUk9UT1RZUEVTLkZ1bmN0aW9uJiYoaS5wcm9wZXJ0eT1mdW5jdGlvbigp
e3ZhciBlPSgwLHQuY29tcHV0ZWQpKHRoaXMpCityZXR1cm4gZS5wcm9wZXJ0eS5hcHBseShlLGFy
Z3VtZW50cyl9LGkub2JzZXJ2ZXM9ZnVuY3Rpb24oKXt2YXIgZSxuLHIKK2ZvcihlPWFyZ3VtZW50
cy5sZW5ndGgsbj1BcnJheShlKSxyPTA7cjxlO3IrKyluW3JdPWFyZ3VtZW50c1tyXQorcmV0dXJu
IG4ucHVzaCh0aGlzKSx0Lm9ic2VydmVyLmFwcGx5KHRoaXMsbil9LGkuX29ic2VydmVzSW1tZWRp
YXRlbHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vYnNlcnZlcy5hcHBseSh0aGlzLGFyZ3VtZW50
cyl9LGkub2JzZXJ2ZXNJbW1lZGlhdGVseT0oMCxuLmRlcHJlY2F0ZUZ1bmMpKCJGdW5jdGlvbiNv
YnNlcnZlc0ltbWVkaWF0ZWx5IGlzIGRlcHJlY2F0ZWQuIFVzZSBGdW5jdGlvbiNvYnNlcnZlcyBp
bnN0ZWFkIix7aWQ6ImVtYmVyLXJ1bnRpbWUuZXh0LWZ1bmN0aW9uIix1bnRpbDoiMy4wLjAifSxp
Ll9vYnNlcnZlc0ltbWVkaWF0ZWx5KSxpLm9uPWZ1bmN0aW9uKCl7dmFyIGU9ci5jYWxsKGFyZ3Vt
ZW50cykKK3JldHVybiB0aGlzLl9fZW1iZXJfbGlzdGVuc19fPWUsdGhpc30pfSksZSgiZW1iZXIt
cnVudGltZS9leHQvcnN2cCIsWyJleHBvcnRzIiwicnN2cCIsImVtYmVyLW1ldGFsIiwiZW1iZXIt
ZGVidWciXSxmdW5jdGlvbihlLHQsbixyKXsidXNlIHN0cmljdCIKK2Z1bmN0aW9uIGkoZSl7dmFy
IHQ9byhlKQordCYmKDAsbi5kaXNwYXRjaEVycm9yKSh0KX1mdW5jdGlvbiBvKGUpe2lmKGUpe2lm
KGUuZXJyb3JUaHJvd24pcmV0dXJuIHMoZSkKK2lmKCJVbnJlY29nbml6ZWRVUkxFcnJvciIhPT1l
Lm5hbWUmJiJUcmFuc2l0aW9uQWJvcnRlZCIhPT1lLm5hbWUpcmV0dXJuIGV9fWZ1bmN0aW9uIHMo
ZSl7dmFyIHQ9ZS5lcnJvclRocm93bgorcmV0dXJuInN0cmluZyI9PXR5cGVvZiB0JiYodD1uZXcg
RXJyb3IodCkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX3JlYXNvbl93aXRoX2Vycm9yX3Ro
cm93bl9fIix7dmFsdWU6ZSxlbnVtZXJhYmxlOiExfSksdH1lLm9uZXJyb3JEZWZhdWx0PWkKK3Zh
ciBhPW4ucnVuLmJhY2tidXJuZXIKK24ucnVuLl9hZGRRdWV1ZSgicnN2cEFmdGVyIiwiZGVzdHJv
eSIpLHQuY29uZmlndXJlKCJhc3luYyIsZnVuY3Rpb24oZSx0KXthLnNjaGVkdWxlKCJhY3Rpb25z
IixudWxsLGUsdCl9KSx0LmNvbmZpZ3VyZSgiYWZ0ZXIiLGZ1bmN0aW9uKGUpe2Euc2NoZWR1bGUo
InJzdnBBZnRlciIsbnVsbCxlKX0pLHQub24oImVycm9yIixpKSxlLmRlZmF1bHQ9dH0pLGUoImVt
YmVyLXJ1bnRpbWUvZXh0L3N0cmluZyIsWyJlbWJlci1lbnZpcm9ubWVudCIsImVtYmVyLXJ1bnRp
bWUvc3lzdGVtL3N0cmluZyJdLGZ1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiCit2YXIgbj1TdHJp
bmcucHJvdG90eXBlCitlLkVOVi5FWFRFTkRfUFJPVE9UWVBFUy5TdHJpbmcmJihuLmZtdD1mdW5j
dGlvbigpe3ZhciBlLG4scgorZm9yKGU9YXJndW1lbnRzLmxlbmd0aCxuPUFycmF5KGUpLHI9MDty
PGU7cisrKW5bcl09YXJndW1lbnRzW3JdCityZXR1cm4oMCx0LmZtdCkodGhpcyxuKX0sbi53PWZ1
bmN0aW9uKCl7cmV0dXJuKDAsdC53KSh0aGlzKX0sbi5sb2M9ZnVuY3Rpb24oKXt2YXIgZSxuLHIK
K2ZvcihlPWFyZ3VtZW50cy5sZW5ndGgsbj1BcnJheShlKSxyPTA7cjxlO3IrKyluW3JdPWFyZ3Vt
ZW50c1tyXQorcmV0dXJuKDAsdC5sb2MpKHRoaXMsbil9LG4uY2FtZWxpemU9ZnVuY3Rpb24oKXty
ZXR1cm4oMCx0LmNhbWVsaXplKSh0aGlzKX0sbi5kZWNhbWVsaXplPWZ1bmN0aW9uKCl7cmV0dXJu
KDAsdC5kZWNhbWVsaXplKSh0aGlzKX0sbi5kYXNoZXJpemU9ZnVuY3Rpb24oKXtyZXR1cm4oMCx0
LmRhc2hlcml6ZSkodGhpcyl9LG4udW5kZXJzY29yZT1mdW5jdGlvbigpe3JldHVybigwLHQudW5k
ZXJzY29yZSkodGhpcyl9LG4uY2xhc3NpZnk9ZnVuY3Rpb24oKXtyZXR1cm4oMCx0LmNsYXNzaWZ5
KSh0aGlzKX0sbi5jYXBpdGFsaXplPWZ1bmN0aW9uKCl7cmV0dXJuKDAsdC5jYXBpdGFsaXplKSh0
aGlzKX0pfSksZSgiZW1iZXItcnVudGltZS9pbmRleCIsWyJleHBvcnRzIiwiZW1iZXItcnVudGlt
ZS9zeXN0ZW0vb2JqZWN0IiwiZW1iZXItcnVudGltZS9zeXN0ZW0vc3RyaW5nIiwiZW1iZXItcnVu
dGltZS9taXhpbnMvcmVnaXN0cnlfcHJveHkiLCJlbWJlci1ydW50aW1lL21peGlucy9jb250YWlu
ZXJfcHJveHkiLCJlbWJlci1ydW50aW1lL2NvcHkiLCJlbWJlci1ydW50aW1lL2luamVjdCIsImVt
YmVyLXJ1bnRpbWUvY29tcGFyZSIsImVtYmVyLXJ1bnRpbWUvaXMtZXF1YWwiLCJlbWJlci1ydW50
aW1lL21peGlucy9hcnJheSIsImVtYmVyLXJ1bnRpbWUvbWl4aW5zL2NvbXBhcmFibGUiLCJlbWJl
ci1ydW50aW1lL3N5c3RlbS9uYW1lc3BhY2UiLCJlbWJlci1ydW50aW1lL3N5c3RlbS9hcnJheV9w
cm94eSIsImVtYmVyLXJ1bnRpbWUvc3lzdGVtL29iamVjdF9wcm94eSIsImVtYmVyLXJ1bnRpbWUv
c3lzdGVtL2NvcmVfb2JqZWN0IiwiZW1iZXItcnVudGltZS9zeXN0ZW0vbmF0aXZlX2FycmF5Iiwi
ZW1iZXItcnVudGltZS9taXhpbnMvYWN0aW9uX2hhbmRsZXIiLCJlbWJlci1ydW50aW1lL21peGlu
cy9jb3B5YWJsZSIsImVtYmVyLXJ1bnRpbWUvbWl4aW5zL2VudW1lcmFibGUiLCJlbWJlci1ydW50
aW1lL21peGlucy9mcmVlemFibGUiLCJlbWJlci1ydW50aW1lL21peGlucy8tcHJveHkiLCJlbWJl
ci1ydW50aW1lL3N5c3RlbS9sYXp5X2xvYWQiLCJlbWJlci1ydW50aW1lL21peGlucy9vYnNlcnZh
YmxlIiwiZW1iZXItcnVudGltZS9taXhpbnMvbXV0YWJsZV9lbnVtZXJhYmxlIiwiZW1iZXItcnVu
dGltZS9taXhpbnMvbXV0YWJsZV9hcnJheSIsImVtYmVyLXJ1bnRpbWUvbWl4aW5zL3RhcmdldF9h
Y3Rpb25fc3VwcG9ydCIsImVtYmVyLXJ1bnRpbWUvbWl4aW5zL2V2ZW50ZWQiLCJlbWJlci1ydW50
aW1lL21peGlucy9wcm9taXNlX3Byb3h5IiwiZW1iZXItcnVudGltZS9jb21wdXRlZC9jb21wdXRl
ZF9tYWNyb3MiLCJlbWJlci1ydW50aW1lL2NvbXB1dGVkL3JlZHVjZV9jb21wdXRlZF9tYWNyb3Mi
LCJlbWJlci1ydW50aW1lL2NvbnRyb2xsZXJzL2NvbnRyb2xsZXIiLCJlbWJlci1ydW50aW1lL21p
eGlucy9jb250cm9sbGVyIiwiZW1iZXItcnVudGltZS9zeXN0ZW0vc2VydmljZSIsImVtYmVyLXJ1
bnRpbWUvZXh0L3JzdnAiLCJlbWJlci1ydW50aW1lL3V0aWxzIiwiZW1iZXItcnVudGltZS9zdHJp
bmdfcmVnaXN0cnkiLCJlbWJlci1ydW50aW1lL2V4dC9zdHJpbmciLCJlbWJlci1ydW50aW1lL2V4
dC9mdW5jdGlvbiJdLGZ1bmN0aW9uKGUsdCxuLHIsaSxvLHMsYSx1LGwsYyxwLGYsaCxkLG0sZyx5
LHYsYixfLHcsRSx4LEMsTyxBLFQsUyxSLGssTixQLGosRCxMKXsidXNlIHN0cmljdCIKK2Uuc2V0
U3RyaW5ncz1lLmdldFN0cmluZ3M9ZS50eXBlT2Y9ZS5pc0FycmF5PWUub25lcnJvckRlZmF1bHQ9
ZS5SU1ZQPWUuU2VydmljZT1lLkNvbnRyb2xsZXJNaXhpbj1lLkNvbnRyb2xsZXI9ZS5jb2xsZWN0
PWUuaW50ZXJzZWN0PWUudW5pb249ZS51bmlxQnk9ZS51bmlxPWUuZmlsdGVyQnk9ZS5maWx0ZXI9
ZS5tYXBCeT1lLnNldERpZmY9ZS5zb3J0PWUubWFwPWUubWF4PWUubWluPWUuc3VtPWUub3I9ZS5h
bmQ9ZS5kZXByZWNhdGluZ0FsaWFzPWUucmVhZE9ubHk9ZS5vbmVXYXk9ZS5sdGU9ZS5sdD1lLmd0
ZT1lLmd0PWUuZXF1YWw9ZS5tYXRjaD1lLmJvb2w9ZS5ub3Q9ZS5ub25lPWUubm90RW1wdHk9ZS5l
bXB0eT1lLlByb21pc2VQcm94eU1peGluPWUuRXZlbnRlZD1lLlRhcmdldEFjdGlvblN1cHBvcnQ9
ZS5yZW1vdmVBdD1lLk11dGFibGVBcnJheT1lLk11dGFibGVFbnVtZXJhYmxlPWUuT2JzZXJ2YWJs
ZT1lLl9sb2FkZWQ9ZS5ydW5Mb2FkSG9va3M9ZS5vbkxvYWQ9ZS5fUHJveHlNaXhpbj1lLkZST1pF
Tl9FUlJPUj1lLkZyZWV6YWJsZT1lLkVudW1lcmFibGU9ZS5Db3B5YWJsZT1lLmRlcHJlY2F0ZVVu
ZGVyc2NvcmVBY3Rpb25zPWUuQWN0aW9uSGFuZGxlcj1lLkE9ZS5OYXRpdmVBcnJheT1lLkNvcmVP
YmplY3Q9ZS5PYmplY3RQcm94eT1lLkFycmF5UHJveHk9ZS5zZXROYW1lc3BhY2VTZWFyY2hEaXNh
YmxlZD1lLmlzTmFtZXNwYWNlU2VhcmNoRGlzYWJsZWQ9ZS5OYW1lc3BhY2U9ZS5Db21wYXJhYmxl
PWUucmVtb3ZlQXJyYXlPYnNlcnZlcj1lLmFkZEFycmF5T2JzZXJ2ZXI9ZS5pc0VtYmVyQXJyYXk9
ZS5vYmplY3RBdD1lLkFycmF5PWUuaXNFcXVhbD1lLmNvbXBhcmU9ZS5pbmplY3Q9ZS5jb3B5PWUu
Q29udGFpbmVyUHJveHlNaXhpbj1lLmJ1aWxkRmFrZVJlZ2lzdHJ5V2l0aERlcHJlY2F0aW9ucz1l
LlJlZ2lzdHJ5UHJveHlNaXhpbj1lLlN0cmluZz1lLkZyYW1ld29ya09iamVjdD1lLk9iamVjdD12
b2lkIDAsT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIk9iamVjdCIse2VudW1lcmFibGU6ITAsZ2V0
OmZ1bmN0aW9uKCl7cmV0dXJuIHQuZGVmYXVsdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwi
RnJhbWV3b3JrT2JqZWN0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdC5G
cmFtZXdvcmtPYmplY3R9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIlN0cmluZyIse2VudW1l
cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG4uZGVmYXVsdH19KSxPYmplY3QuZGVmaW5l
UHJvcGVydHkoZSwiUmVnaXN0cnlQcm94eU1peGluIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rp
b24oKXtyZXR1cm4gci5kZWZhdWx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJidWlsZEZh
a2VSZWdpc3RyeVdpdGhEZXByZWNhdGlvbnMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigp
e3JldHVybiByLmJ1aWxkRmFrZVJlZ2lzdHJ5V2l0aERlcHJlY2F0aW9uc319KSxPYmplY3QuZGVm
aW5lUHJvcGVydHkoZSwiQ29udGFpbmVyUHJveHlNaXhpbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1
bmN0aW9uKCl7cmV0dXJuIGkuZGVmYXVsdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiY29w
eSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uZGVmYXVsdH19KSxPYmpl
Y3QuZGVmaW5lUHJvcGVydHkoZSwiaW5qZWN0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24o
KXtyZXR1cm4gcy5kZWZhdWx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJjb21wYXJlIix7
ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYS5kZWZhdWx0fX0pLE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eShlLCJpc0VxdWFsIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXty
ZXR1cm4gdS5kZWZhdWx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJBcnJheSIse2VudW1l
cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGwuZGVmYXVsdH19KSxPYmplY3QuZGVmaW5l
UHJvcGVydHkoZSwib2JqZWN0QXQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVy
biBsLm9iamVjdEF0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJpc0VtYmVyQXJyYXkiLHtl
bnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBsLmlzRW1iZXJBcnJheX19KSxPYmpl
Y3QuZGVmaW5lUHJvcGVydHkoZSwiYWRkQXJyYXlPYnNlcnZlciIse2VudW1lcmFibGU6ITAsZ2V0
OmZ1bmN0aW9uKCl7cmV0dXJuIGwuYWRkQXJyYXlPYnNlcnZlcn19KSxPYmplY3QuZGVmaW5lUHJv
cGVydHkoZSwicmVtb3ZlQXJyYXlPYnNlcnZlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9u
KCl7cmV0dXJuIGwucmVtb3ZlQXJyYXlPYnNlcnZlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHko
ZSwiQ29tcGFyYWJsZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGMuZGVm
YXVsdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiTmFtZXNwYWNlIix7ZW51bWVyYWJsZToh
MCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcC5kZWZhdWx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0
eShlLCJpc05hbWVzcGFjZVNlYXJjaERpc2FibGVkIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rp
b24oKXtyZXR1cm4gcC5pc1NlYXJjaERpc2FibGVkfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShl
LCJzZXROYW1lc3BhY2VTZWFyY2hEaXNhYmxlZCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9u
KCl7cmV0dXJuIHAuc2V0U2VhcmNoRGlzYWJsZWR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUs
IkFycmF5UHJveHkiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBmLmRlZmF1
bHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIk9iamVjdFByb3h5Iix7ZW51bWVyYWJsZToh
MCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaC5kZWZhdWx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0
eShlLCJDb3JlT2JqZWN0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZC5k
ZWZhdWx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJOYXRpdmVBcnJheSIse2VudW1lcmFi
bGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG0uZGVmYXVsdH19KSxPYmplY3QuZGVmaW5lUHJv
cGVydHkoZSwiQSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG0uQX19KSxP
YmplY3QuZGVmaW5lUHJvcGVydHkoZSwiQWN0aW9uSGFuZGxlciIse2VudW1lcmFibGU6ITAsZ2V0
OmZ1bmN0aW9uKCl7cmV0dXJuIGcuZGVmYXVsdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwi
ZGVwcmVjYXRlVW5kZXJzY29yZUFjdGlvbnMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigp
e3JldHVybiBnLmRlcHJlY2F0ZVVuZGVyc2NvcmVBY3Rpb25zfX0pLE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShlLCJDb3B5YWJsZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHku
ZGVmYXVsdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiRW51bWVyYWJsZSIse2VudW1lcmFi
bGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHYuZGVmYXVsdH19KSxPYmplY3QuZGVmaW5lUHJv
cGVydHkoZSwiRnJlZXphYmxlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4g
Yi5GcmVlemFibGV9fSkKK09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJGUk9aRU5fRVJST1IiLHtl
bnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBiLkZST1pFTl9FUlJPUn19KSxPYmpl
Y3QuZGVmaW5lUHJvcGVydHkoZSwiX1Byb3h5TWl4aW4iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5j
dGlvbigpe3JldHVybiBfLmRlZmF1bHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIm9uTG9h
ZCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHcub25Mb2FkfX0pLE9iamVj
dC5kZWZpbmVQcm9wZXJ0eShlLCJydW5Mb2FkSG9va3MiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5j
dGlvbigpe3JldHVybiB3LnJ1bkxvYWRIb29rc319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwi
X2xvYWRlZCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHcuX2xvYWRlZH19
KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiT2JzZXJ2YWJsZSIse2VudW1lcmFibGU6ITAsZ2V0
OmZ1bmN0aW9uKCl7cmV0dXJuIEUuZGVmYXVsdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwi
TXV0YWJsZUVudW1lcmFibGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB4
LmRlZmF1bHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIk11dGFibGVBcnJheSIse2VudW1l
cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEMuZGVmYXVsdH19KSxPYmplY3QuZGVmaW5l
UHJvcGVydHkoZSwicmVtb3ZlQXQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVy
biBDLnJlbW92ZUF0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJUYXJnZXRBY3Rpb25TdXBw
b3J0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gTy5kZWZhdWx0fX0pLE9i
amVjdC5kZWZpbmVQcm9wZXJ0eShlLCJFdmVudGVkIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rp
b24oKXtyZXR1cm4gQS5kZWZhdWx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJQcm9taXNl
UHJveHlNaXhpbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFQuZGVmYXVs
dH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiZW1wdHkiLHtlbnVtZXJhYmxlOiEwLGdldDpm
dW5jdGlvbigpe3JldHVybiBTLmVtcHR5fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJub3RF
bXB0eSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFMubm90RW1wdHl9fSks
T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIm5vbmUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlv
bigpe3JldHVybiBTLm5vbmV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIm5vdCIse2VudW1l
cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFMubm90fX0pLE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShlLCJib29sIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gUy5ib29s
fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJtYXRjaCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1
bmN0aW9uKCl7cmV0dXJuIFMubWF0Y2h9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImVxdWFs
Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gUy5lcXVhbH19KSxPYmplY3Qu
ZGVmaW5lUHJvcGVydHkoZSwiZ3QiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVy
biBTLmd0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJndGUiLHtlbnVtZXJhYmxlOiEwLGdl
dDpmdW5jdGlvbigpe3JldHVybiBTLmd0ZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwibHQi
LHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBTLmx0fX0pLE9iamVjdC5kZWZp
bmVQcm9wZXJ0eShlLCJsdGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBT
Lmx0ZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwib25lV2F5Iix7ZW51bWVyYWJsZTohMCxn
ZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gUy5vbmVXYXl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUs
InJlYWRPbmx5Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gUy5yZWFkT25s
eX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiZGVwcmVjYXRpbmdBbGlhcyIse2VudW1lcmFi
bGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFMuZGVwcmVjYXRpbmdBbGlhc319KSxPYmplY3Qu
ZGVmaW5lUHJvcGVydHkoZSwiYW5kIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1
cm4gUy5hbmR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIm9yIix7ZW51bWVyYWJsZTohMCxn
ZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gUy5vcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwic3Vt
Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gUi5zdW19fSksT2JqZWN0LmRl
ZmluZVByb3BlcnR5KGUsIm1pbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJu
IFIubWlufX0pCitPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwibWF4Iix7ZW51bWVyYWJsZTohMCxn
ZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gUi5tYXh9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIm1h
cCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFIubWFwfX0pLE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eShlLCJzb3J0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1
cm4gUi5zb3J0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJzZXREaWZmIix7ZW51bWVyYWJs
ZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gUi5zZXREaWZmfX0pLE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShlLCJtYXBCeSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFIubWFw
Qnl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImZpbHRlciIse2VudW1lcmFibGU6ITAsZ2V0
OmZ1bmN0aW9uKCl7cmV0dXJuIFIuZmlsdGVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJm
aWx0ZXJCeSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFIuZmlsdGVyQnl9
fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInVuaXEiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5j
dGlvbigpe3JldHVybiBSLnVuaXF9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInVuaXFCeSIs
e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFIudW5pcUJ5fX0pLE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eShlLCJ1bmlvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0
dXJuIFIudW5pb259fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImludGVyc2VjdCIse2VudW1l
cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFIuaW50ZXJzZWN0fX0pLE9iamVjdC5kZWZp
bmVQcm9wZXJ0eShlLCJjb2xsZWN0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1
cm4gUi5jb2xsZWN0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJDb250cm9sbGVyIix7ZW51
bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gay5kZWZhdWx0fX0pLE9iamVjdC5kZWZp
bmVQcm9wZXJ0eShlLCJDb250cm9sbGVyTWl4aW4iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlv
bigpe3JldHVybiBOLmRlZmF1bHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIlNlcnZpY2Ui
LHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBQLmRlZmF1bHR9fSksT2JqZWN0
LmRlZmluZVByb3BlcnR5KGUsIlJTVlAiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3Jl
dHVybiBqLmRlZmF1bHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIm9uZXJyb3JEZWZhdWx0
Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gai5vbmVycm9yRGVmYXVsdH19
KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiaXNBcnJheSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1
bmN0aW9uKCl7cmV0dXJuIEQuaXNBcnJheX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwidHlw
ZU9mIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gRC50eXBlT2Z9fSksT2Jq
ZWN0LmRlZmluZVByb3BlcnR5KGUsImdldFN0cmluZ3MiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5j
dGlvbigpe3JldHVybiBMLmdldFN0cmluZ3N9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInNl
dFN0cmluZ3MiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBMLnNldFN0cmlu
Z3N9fSl9KSxlKCJlbWJlci1ydW50aW1lL2luamVjdCIsWyJleHBvcnRzIiwiZW1iZXItbWV0YWwi
LCJlbWJlci1kZWJ1ZyJdLGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCIKK2Z1bmN0aW9uIHIo
KXt9ZS5kZWZhdWx0PXIsZS5jcmVhdGVJbmplY3Rpb25IZWxwZXI9ZnVuY3Rpb24oZSxuKXtpW2Vd
PW4scltlXT1mdW5jdGlvbihuKXtyZXR1cm4gbmV3IHQuSW5qZWN0ZWRQcm9wZXJ0eShlLG4pfX0s
ZS52YWxpZGF0ZVByb3BlcnR5SW5qZWN0aW9ucz1mdW5jdGlvbihlKXt2YXIgbixyLG8scz1lLnBy
b3RvKCksYT1bXQorZm9yKHZhciB1IGluIHMpKG49c1t1XSlpbnN0YW5jZW9mIHQuSW5qZWN0ZWRQ
cm9wZXJ0eSYmLTE9PT1hLmluZGV4T2Yobi50eXBlKSYmYS5wdXNoKG4udHlwZSkKK2lmKGEubGVu
Z3RoKWZvcihyPTA7cjxhLmxlbmd0aDtyKyspImZ1bmN0aW9uIj09dHlwZW9mKG89aVthW3JdXSkm
Jm8oZSkKK3JldHVybiEwfQordmFyIGk9e319KSxlKCJlbWJlci1ydW50aW1lL2lzLWVxdWFsIixb
ImV4cG9ydHMiXSxmdW5jdGlvbihlKXsidXNlIHN0cmljdCIKK2UuZGVmYXVsdD1mdW5jdGlvbihl
LHQpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5pc0VxdWFsP2UuaXNFcXVhbCh0KTpl
IGluc3RhbmNlb2YgRGF0ZSYmdCBpbnN0YW5jZW9mIERhdGU/ZS5nZXRUaW1lKCk9PT10LmdldFRp
bWUoKTplPT09dH19KSxlKCJlbWJlci1ydW50aW1lL21peGlucy8tcHJveHkiLFsiZXhwb3J0cyIs
ImVtYmVyLWJhYmVsIiwiQGdsaW1tZXIvcmVmZXJlbmNlIiwiZW1iZXItbWV0YWwiLCJlbWJlci1k
ZWJ1ZyIsImVtYmVyLXJ1bnRpbWUvY29tcHV0ZWQvY29tcHV0ZWRfbWFjcm9zIl0sZnVuY3Rpb24o
ZSx0LG4scixpLG8peyJ1c2Ugc3RyaWN0IgorZnVuY3Rpb24gcyhlLHQpe3ZhciBuPXQuc2xpY2Uo
OCkKK24gaW4gdGhpc3x8KDAsci5wcm9wZXJ0eVdpbGxDaGFuZ2UpKHRoaXMsbil9ZnVuY3Rpb24g
YShlLHQpe3ZhciBuPXQuc2xpY2UoOCkKK24gaW4gdGhpc3x8KDAsci5wcm9wZXJ0eURpZENoYW5n
ZSkodGhpcyxuKX12YXIgdT1mdW5jdGlvbihlKXtmdW5jdGlvbiBpKGkpe3ZhciBvPSgwLHQucG9z
c2libGVDb25zdHJ1Y3RvclJldHVybikodGhpcyxlLmNhbGwodGhpcykpLHM9KDAsci5nZXQpKGks
ImNvbnRlbnQiKQorcmV0dXJuIG8ucHJveHk9aSxvLnByb3h5V3JhcHBlclRhZz1uZXcgbi5EaXJ0
eWFibGVUYWcsby5wcm94eUNvbnRlbnRUYWc9bmV3IG4uVXBkYXRhYmxlVGFnKCgwLHIudGFnRm9y
KShzKSksb31yZXR1cm4oMCx0LmluaGVyaXRzKShpLGUpLGkucHJvdG90eXBlLmNvbXB1dGU9ZnVu
Y3Rpb24oKXtyZXR1cm4gTWF0aC5tYXgodGhpcy5wcm94eVdyYXBwZXJUYWcudmFsdWUoKSx0aGlz
LnByb3h5Q29udGVudFRhZy52YWx1ZSgpKX0saS5wcm90b3R5cGUuZGlydHk9ZnVuY3Rpb24oKXt0
aGlzLnByb3h5V3JhcHBlclRhZy5kaXJ0eSgpfSxpLnByb3RvdHlwZS5jb250ZW50RGlkQ2hhbmdl
PWZ1bmN0aW9uKCl7dmFyIGU9KDAsci5nZXQpKHRoaXMucHJveHksImNvbnRlbnQiKQordGhpcy5w
cm94eUNvbnRlbnRUYWcudXBkYXRlKCgwLHIudGFnRm9yKShlKSl9LGl9KG4uQ2FjaGVkVGFnKQor
ZS5kZWZhdWx0PXIuTWl4aW4uY3JlYXRlKHtjb250ZW50Om51bGwsaW5pdDpmdW5jdGlvbigpe3Ro
aXMuX3N1cGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKQordmFyIGU9KDAsci5tZXRhKSh0aGlzKQor
ZS5zZXRQcm94eSgpLGUuc2V0VGFnKG5ldyB1KHRoaXMpKX0saXNUcnV0aHk6KDAsby5ib29sKSgi
Y29udGVudCIpLHdpbGxXYXRjaFByb3BlcnR5OmZ1bmN0aW9uKGUpe3ZhciB0PSJjb250ZW50LiIr
ZTsoMCxyLl9hZGRCZWZvcmVPYnNlcnZlcikodGhpcyx0LG51bGwscyksKDAsci5hZGRPYnNlcnZl
cikodGhpcyx0LG51bGwsYSl9LGRpZFVud2F0Y2hQcm9wZXJ0eTpmdW5jdGlvbihlKXt2YXIgdD0i
Y29udGVudC4iK2U7KDAsci5fcmVtb3ZlQmVmb3JlT2JzZXJ2ZXIpKHRoaXMsdCxudWxsLHMpLCgw
LHIucmVtb3ZlT2JzZXJ2ZXIpKHRoaXMsdCxudWxsLGEpfSx1bmtub3duUHJvcGVydHk6ZnVuY3Rp
b24oZSl7dmFyIHQ9KDAsci5nZXQpKHRoaXMsImNvbnRlbnQiKQoraWYodClyZXR1cm4oMCxyLmdl
dCkodCxlKX0sc2V0VW5rbm93blByb3BlcnR5OmZ1bmN0aW9uKGUsdCl7aWYoKDAsci5tZXRhKSh0
aGlzKS5wcm90bz09PXRoaXMpcmV0dXJuKDAsci5kZWZpbmVQcm9wZXJ0eSkodGhpcyxlLG51bGws
dCksdAordmFyIG49KDAsci5nZXQpKHRoaXMsImNvbnRlbnQiKQorcmV0dXJuKDAsci5zZXQpKG4s
ZSx0KX19KX0pCitlKCJlbWJlci1ydW50aW1lL21peGlucy9hY3Rpb25faGFuZGxlciIsWyJleHBv
cnRzIiwiZW1iZXItbWV0YWwiLCJlbWJlci1kZWJ1ZyJdLGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0
cmljdCIKK2UuZGVwcmVjYXRlVW5kZXJzY29yZUFjdGlvbnM9ZnVuY3Rpb24oZSl7T2JqZWN0LmRl
ZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJfYWN0aW9ucyIse2NvbmZpZ3VyYWJsZTohMCxlbnVt
ZXJhYmxlOiExLHNldDpmdW5jdGlvbigpe30sZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsdC5nZXQp
KHRoaXMsImFjdGlvbnMiKX19KX0KK3ZhciByPXQuTWl4aW4uY3JlYXRlKHttZXJnZWRQcm9wZXJ0
aWVzOlsiYWN0aW9ucyJdLHNlbmQ6ZnVuY3Rpb24oZSl7Zm9yKG49YXJndW1lbnRzLmxlbmd0aCxy
PUFycmF5KG4+MT9uLTE6MCksaT0xO2k8bjtpKyspcltpLTFdPWFyZ3VtZW50c1tpXQoraWYoIXRo
aXMuYWN0aW9uc3x8IXRoaXMuYWN0aW9uc1tlXXx8ITA9PT10aGlzLmFjdGlvbnNbZV0uYXBwbHko
dGhpcyxyKSl7dmFyIG4scixpLG89KDAsdC5nZXQpKHRoaXMsInRhcmdldCIpCitvJiZvLnNlbmQu
YXBwbHkobyxhcmd1bWVudHMpfX0sd2lsbE1lcmdlTWl4aW46ZnVuY3Rpb24oZSl7ZS5fYWN0aW9u
cyYmKGUuYWN0aW9ucz1lLl9hY3Rpb25zLGRlbGV0ZSBlLl9hY3Rpb25zKX19KQorZS5kZWZhdWx0
PXJ9KSxlKCJlbWJlci1ydW50aW1lL21peGlucy9hcnJheSIsWyJleHBvcnRzIiwiZW1iZXItdXRp
bHMiLCJlbWJlci1tZXRhbCIsImVtYmVyLWRlYnVnIiwiZW1iZXItcnVudGltZS9taXhpbnMvZW51
bWVyYWJsZSJdLGZ1bmN0aW9uKGUsdCxuLHIsaSl7InVzZSBzdHJpY3QiCitmdW5jdGlvbiBvKGUs
dCxyLGksbyl7dmFyIHM9ciYmci53aWxsQ2hhbmdlfHwiYXJyYXlXaWxsQ2hhbmdlIixhPXImJnIu
ZGlkQ2hhbmdlfHwiYXJyYXlEaWRDaGFuZ2UiLHU9KDAsbi5nZXQpKGUsImhhc0FycmF5T2JzZXJ2
ZXJzIikKK3JldHVybiB1PT09byYmKDAsbi5wcm9wZXJ0eVdpbGxDaGFuZ2UpKGUsImhhc0FycmF5
T2JzZXJ2ZXJzIiksaShlLCJAYXJyYXk6YmVmb3JlIix0LHMpLGkoZSwiQGFycmF5OmNoYW5nZSIs
dCxhKSx1PT09byYmKDAsbi5wcm9wZXJ0eURpZENoYW5nZSkoZSwiaGFzQXJyYXlPYnNlcnZlcnMi
KSxlfWZ1bmN0aW9uIHMoZSx0LHIpe3JldHVybiBvKGUsdCxyLG4uYWRkTGlzdGVuZXIsITEpfWZ1
bmN0aW9uIGEoZSx0LHIpe3JldHVybiBvKGUsdCxyLG4ucmVtb3ZlTGlzdGVuZXIsITApfWZ1bmN0
aW9uIHUoZSx0KXtyZXR1cm4gZS5vYmplY3RBdD9lLm9iamVjdEF0KHQpOmVbdF19ZnVuY3Rpb24g
bChlLHQscixpKXt2YXIgbyxzPXZvaWQgMCxhPXZvaWQgMAoraWYodm9pZCAwPT09dD8odD0wLHI9
aT0tMSk6KHZvaWQgMD09PXImJihyPS0xKSx2b2lkIDA9PT1pJiYoaT0tMSkpLGUuX19lYWNoJiZl
Ll9fZWFjaC5hcnJheVdpbGxDaGFuZ2UoZSx0LHIsaSksKDAsbi5zZW5kRXZlbnQpKGUsIkBhcnJh
eTpiZWZvcmUiLFtlLHQscixpXSksdD49MCYmcj49MCYmKDAsbi5nZXQpKGUsImhhc0VudW1lcmFi
bGVPYnNlcnZlcnMiKSlmb3Iocz1bXSxhPXQrcixvPXQ7bzxhO28rKylzLnB1c2godShlLG8pKQor
ZWxzZSBzPXIKK3JldHVybiBlLmVudW1lcmFibGVDb250ZW50V2lsbENoYW5nZShzLGkpLGV9ZnVu
Y3Rpb24gYyhlLHQscixpKXt2b2lkIDA9PT10Pyh0PTAscj1pPS0xKToodm9pZCAwPT09ciYmKHI9
LTEpLHZvaWQgMD09PWkmJihpPS0xKSkKK3ZhciBvLHMsYT12b2lkIDAKK2lmKHQ+PTAmJmk+PTAm
JigwLG4uZ2V0KShlLCJoYXNFbnVtZXJhYmxlT2JzZXJ2ZXJzIikpZm9yKGE9W10sbz10K2kscz10
O3M8bztzKyspYS5wdXNoKHUoZSxzKSkKK2Vsc2UgYT1pCitlLmVudW1lcmFibGVDb250ZW50RGlk
Q2hhbmdlKHIsYSksZS5fX2VhY2gmJmUuX19lYWNoLmFycmF5RGlkQ2hhbmdlKGUsdCxyLGkpLCgw
LG4uc2VuZEV2ZW50KShlLCJAYXJyYXk6Y2hhbmdlIixbZSx0LHIsaV0pCit2YXIgbD0oMCxuLnBl
ZWtNZXRhKShlKSxjPWwmJmwucmVhZGFibGVDYWNoZSgpCityZXR1cm4gYyYmKHZvaWQgMCE9PWMu
Zmlyc3RPYmplY3QmJnUoZSwwKSE9PW4uY2FjaGVGb3IuZ2V0KGMsImZpcnN0T2JqZWN0IikmJigo
MCxuLnByb3BlcnR5V2lsbENoYW5nZSkoZSwiZmlyc3RPYmplY3QiLGwpLCgwLG4ucHJvcGVydHlE
aWRDaGFuZ2UpKGUsImZpcnN0T2JqZWN0IixsKSksdm9pZCAwIT09Yy5sYXN0T2JqZWN0JiZ1KGUs
KDAsbi5nZXQpKGUsImxlbmd0aCIpLTEpIT09bi5jYWNoZUZvci5nZXQoYywibGFzdE9iamVjdCIp
JiYoKDAsbi5wcm9wZXJ0eVdpbGxDaGFuZ2UpKGUsImxhc3RPYmplY3QiLGwpLCgwLG4ucHJvcGVy
dHlEaWRDaGFuZ2UpKGUsImxhc3RPYmplY3QiLGwpKSksZX1mdW5jdGlvbiBwKGUpe3RoaXMuX2Nv
bnRlbnQ9ZSx0aGlzLl9rZXlzPXZvaWQgMCwoMCxuLm1ldGEpKHRoaXMpfWZ1bmN0aW9uIGYoZSx0
LHIsaSxvKXtmb3IodmFyIHM7LS1vPj1pOykocz11KGUsbykpJiYoKDAsbi5fYWRkQmVmb3JlT2Jz
ZXJ2ZXIpKHMsdCxyLCJjb250ZW50S2V5V2lsbENoYW5nZSIpLCgwLG4uYWRkT2JzZXJ2ZXIpKHMs
dCxyLCJjb250ZW50S2V5RGlkQ2hhbmdlIikpfWZ1bmN0aW9uIGgoZSx0LHIsaSxvKXtmb3IodmFy
IHM7LS1vPj1pOykocz11KGUsbykpJiYoKDAsbi5fcmVtb3ZlQmVmb3JlT2JzZXJ2ZXIpKHMsdCxy
LCJjb250ZW50S2V5V2lsbENoYW5nZSIpLCgwLG4ucmVtb3ZlT2JzZXJ2ZXIpKHMsdCxyLCJjb250
ZW50S2V5RGlkQ2hhbmdlIikpfWUuYWRkQXJyYXlPYnNlcnZlcj1zLGUucmVtb3ZlQXJyYXlPYnNl
cnZlcj1hLGUub2JqZWN0QXQ9dSxlLmFycmF5Q29udGVudFdpbGxDaGFuZ2U9bCxlLmFycmF5Q29u
dGVudERpZENoYW5nZT1jLGUuaXNFbWJlckFycmF5PWZ1bmN0aW9uKGUpe3JldHVybiBlJiYhIWVb
bV19Cit2YXIgZCxtPSgwLHQuc3ltYm9sKSgiRU1CRVJfQVJSQVkiKSxnPW4uTWl4aW4uY3JlYXRl
KGkuZGVmYXVsdCwoZD17fSxkW21dPSEwLGQubGVuZ3RoPW51bGwsZC5vYmplY3RBdD1mdW5jdGlv
bihlKXtpZighKGU8MHx8ZT49KDAsbi5nZXQpKHRoaXMsImxlbmd0aCIpKSlyZXR1cm4oMCxuLmdl
dCkodGhpcyxlKX0sZC5vYmplY3RzQXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcworcmV0dXJuIGUu
bWFwKGZ1bmN0aW9uKGUpe3JldHVybiB1KHQsZSl9KX0sZC5uZXh0T2JqZWN0PWZ1bmN0aW9uKGUp
e3JldHVybiB1KHRoaXMsZSl9LGRbIltdIl09KDAsbi5jb21wdXRlZCkoe2dldDpmdW5jdGlvbigp
e3JldHVybiB0aGlzfSxzZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5yZXBsYWNlKDAsKDAs
bi5nZXQpKHRoaXMsImxlbmd0aCIpLHQpLHRoaXN9fSksZC5maXJzdE9iamVjdD0oMCxuLmNvbXB1
dGVkKShmdW5jdGlvbigpe3JldHVybiB1KHRoaXMsMCl9KS5yZWFkT25seSgpLGQubGFzdE9iamVj
dD0oMCxuLmNvbXB1dGVkKShmdW5jdGlvbigpe3JldHVybiB1KHRoaXMsKDAsbi5nZXQpKHRoaXMs
Imxlbmd0aCIpLTEpfSkucmVhZE9ubHkoKSxkLmNvbnRhaW5zPWZ1bmN0aW9uKGUpe3JldHVybiB0
aGlzLmluZGV4T2YoZSk+PTB9LGQuc2xpY2U9ZnVuY3Rpb24oZSx0KXt2YXIgcj1uLmRlZmF1bHQu
QSgpLGk9KDAsbi5nZXQpKHRoaXMsImxlbmd0aCIpCitmb3IoKDAsbi5pc05vbmUpKGUpJiYoZT0w
KSwoKDAsbi5pc05vbmUpKHQpfHx0PmkpJiYodD1pKSxlPDAmJihlPWkrZSksdDwwJiYodD1pK3Qp
O2U8dDspcltyLmxlbmd0aF09dSh0aGlzLGUrKykKK3JldHVybiByfSxkLmluZGV4T2Y9ZnVuY3Rp
b24oZSx0KXt2YXIgcixpPSgwLG4uZ2V0KSh0aGlzLCJsZW5ndGgiKQorZm9yKHZvaWQgMD09PXQm
Jih0PTApLHQ8MCYmKHQrPWkpLHI9dDtyPGk7cisrKWlmKHUodGhpcyxyKT09PWUpcmV0dXJuIHIK
K3JldHVybi0xfSxkLmxhc3RJbmRleE9mPWZ1bmN0aW9uKGUsdCl7dmFyIHIsaT0oMCxuLmdldCko
dGhpcywibGVuZ3RoIikKK2Zvcigodm9pZCAwPT09dHx8dD49aSkmJih0PWktMSksdDwwJiYodCs9
aSkscj10O3I+PTA7ci0tKWlmKHUodGhpcyxyKT09PWUpcmV0dXJuIHIKK3JldHVybi0xfSxkLmFk
ZEFycmF5T2JzZXJ2ZXI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcyh0aGlzLGUsdCl9LGQucmVtb3Zl
QXJyYXlPYnNlcnZlcj1mdW5jdGlvbihlLHQpe3JldHVybiBhKHRoaXMsZSx0KX0sZC5oYXNBcnJh
eU9ic2VydmVycz0oMCxuLmNvbXB1dGVkKShmdW5jdGlvbigpe3JldHVybigwLG4uaGFzTGlzdGVu
ZXJzKSh0aGlzLCJAYXJyYXk6Y2hhbmdlIil8fCgwLG4uaGFzTGlzdGVuZXJzKSh0aGlzLCJAYXJy
YXk6YmVmb3JlIil9KSxkLmFycmF5Q29udGVudFdpbGxDaGFuZ2U9ZnVuY3Rpb24oZSx0LG4pe3Jl
dHVybiBsKHRoaXMsZSx0LG4pfSxkLmFycmF5Q29udGVudERpZENoYW5nZT1mdW5jdGlvbihlLHQs
bil7cmV0dXJuIGModGhpcyxlLHQsbil9LGQuaW5jbHVkZXM9ZnVuY3Rpb24oZSx0KXt2YXIgcixp
LG89KDAsbi5nZXQpKHRoaXMsImxlbmd0aCIpCitmb3Iodm9pZCAwPT09dCYmKHQ9MCksdDwwJiYo
dCs9bykscj10O3I8bztyKyspaWYoaT11KHRoaXMsciksZT09PWl8fGUhPT1lJiZpIT09aSlyZXR1
cm4hMAorcmV0dXJuITF9LGRbIkBlYWNoIl09KDAsbi5jb21wdXRlZCkoZnVuY3Rpb24oKXtyZXR1
cm4gdGhpcy5fX2VhY2h8fCh0aGlzLl9fZWFjaD1uZXcgcCh0aGlzKSksdGhpcy5fX2VhY2h9KS52
b2xhdGlsZSgpLnJlYWRPbmx5KCksZCkpCitwLnByb3RvdHlwZT17X19kZWZpbmVOb25FbnVtZXJh
YmxlOmZ1bmN0aW9uKGUpe3RoaXNbZS5uYW1lXT1lLmRlc2NyaXB0b3IudmFsdWV9LGFycmF5V2ls
bENoYW5nZTpmdW5jdGlvbihlLHQscil7dmFyIGk9dGhpcy5fa2V5cyxvPXI+MD90K3I6LTEscz12
b2lkIDAKK2Zvcih2YXIgYSBpbiBpKXM9c3x8KDAsbi5wZWVrTWV0YSkodGhpcyksbz4wJiZoKGUs
YSx0aGlzLHQsbyksKDAsbi5wcm9wZXJ0eVdpbGxDaGFuZ2UpKHRoaXMsYSxzKX0sYXJyYXlEaWRD
aGFuZ2U6ZnVuY3Rpb24oZSx0LHIsaSl7dmFyIG89dGhpcy5fa2V5cyxzPWk+MD90K2k6LTEsYT12
b2lkIDAKK2Zvcih2YXIgdSBpbiBvKWE9YXx8KDAsbi5wZWVrTWV0YSkodGhpcykscz4wJiZmKGUs
dSx0aGlzLHQscyksKDAsbi5wcm9wZXJ0eURpZENoYW5nZSkodGhpcyx1LGEpfSx3aWxsV2F0Y2hQ
cm9wZXJ0eTpmdW5jdGlvbihlKXt0aGlzLmJlZ2luT2JzZXJ2aW5nQ29udGVudEtleShlKX0sZGlk
VW53YXRjaFByb3BlcnR5OmZ1bmN0aW9uKGUpe3RoaXMuc3RvcE9ic2VydmluZ0NvbnRlbnRLZXko
ZSl9LGJlZ2luT2JzZXJ2aW5nQ29udGVudEtleTpmdW5jdGlvbihlKXt2YXIgdCxyLGk9dGhpcy5f
a2V5cworaXx8KGk9dGhpcy5fa2V5cz1PYmplY3QuY3JlYXRlKG51bGwpKSxpW2VdP2lbZV0rKzoo
aVtlXT0xLHQ9dGhpcy5fY29udGVudCxyPSgwLG4uZ2V0KSh0LCJsZW5ndGgiKSxmKHQsZSx0aGlz
LDAscikpfSxzdG9wT2JzZXJ2aW5nQ29udGVudEtleTpmdW5jdGlvbihlKXt2YXIgdCxyLGk9dGhp
cy5fa2V5cworaSYmaVtlXT4wJiYtLWlbZV08PTAmJih0PXRoaXMuX2NvbnRlbnQscj0oMCxuLmdl
dCkodCwibGVuZ3RoIiksaCh0LGUsdGhpcywwLHIpKX0sY29udGVudEtleVdpbGxDaGFuZ2U6ZnVu
Y3Rpb24oZSx0KXsoMCxuLnByb3BlcnR5V2lsbENoYW5nZSkodGhpcyx0KX0sY29udGVudEtleURp
ZENoYW5nZTpmdW5jdGlvbihlLHQpeygwLG4ucHJvcGVydHlEaWRDaGFuZ2UpKHRoaXMsdCl9fSxl
LmRlZmF1bHQ9Z30pLGUoImVtYmVyLXJ1bnRpbWUvbWl4aW5zL2NvbXBhcmFibGUiLFsiZXhwb3J0
cyIsImVtYmVyLW1ldGFsIl0sZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCIKK2UuZGVmYXVsdD10
Lk1peGluLmNyZWF0ZSh7Y29tcGFyZTpudWxsfSl9KSxlKCJlbWJlci1ydW50aW1lL21peGlucy9j
b250YWluZXJfcHJveHkiLFsiZXhwb3J0cyIsImVtYmVyLW1ldGFsIl0sZnVuY3Rpb24oZSx0KXsi
dXNlIHN0cmljdCIKK2UuZGVmYXVsdD10Lk1peGluLmNyZWF0ZSh7X19jb250YWluZXJfXzpudWxs
LG93bmVySW5qZWN0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19jb250YWluZXJfXy5vd25l
ckluamVjdGlvbigpfSxsb29rdXA6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fX2NvbnRhaW5l
cl9fLmxvb2t1cChlLHQpfSxfbG9va3VwRmFjdG9yeTpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlz
Ll9fY29udGFpbmVyX18ubG9va3VwRmFjdG9yeShlLHQpfSxfcmVzb2x2ZUxvY2FsTG9va3VwTmFt
ZTpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLl9fY29udGFpbmVyX18ucmVnaXN0cnkuZXhwYW5k
TG9jYWxMb29rdXAoImNvbXBvbmVudDoiK2Use3NvdXJjZTp0fSl9LHdpbGxEZXN0cm95OmZ1bmN0
aW9uKCl7dGhpcy5fc3VwZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMuX19jb250YWluZXJf
XyYmKDAsdC5ydW4pKHRoaXMuX19jb250YWluZXJfXywiZGVzdHJveSIpfSxmYWN0b3J5Rm9yOmZ1
bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFd
P2FyZ3VtZW50c1sxXTp7fQorcmV0dXJuIHRoaXMuX19jb250YWluZXJfXy5mYWN0b3J5Rm9yKGUs
dCl9fSl9KSxlKCJlbWJlci1ydW50aW1lL21peGlucy9jb250cm9sbGVyIixbImV4cG9ydHMiLCJl
bWJlci1tZXRhbCIsImVtYmVyLXJ1bnRpbWUvbWl4aW5zL2FjdGlvbl9oYW5kbGVyIiwiZW1iZXIt
cnVudGltZS9taXhpbnMvY29udHJvbGxlcl9jb250ZW50X21vZGVsX2FsaWFzX2RlcHJlY2F0aW9u
Il0sZnVuY3Rpb24oZSx0LG4scil7InVzZSBzdHJpY3QiCitlLmRlZmF1bHQ9dC5NaXhpbi5jcmVh
dGUobi5kZWZhdWx0LHIuZGVmYXVsdCx7aXNDb250cm9sbGVyOiEwLHRhcmdldDpudWxsLHN0b3Jl
Om51bGwsbW9kZWw6bnVsbCxjb250ZW50OigwLHQuYWxpYXMpKCJtb2RlbCIpfSl9KSxlKCJlbWJl
ci1ydW50aW1lL21peGlucy9jb250cm9sbGVyX2NvbnRlbnRfbW9kZWxfYWxpYXNfZGVwcmVjYXRp
b24iLFsiZXhwb3J0cyIsImVtYmVyLW1ldGFsIiwiZW1iZXItZGVidWciXSxmdW5jdGlvbihlLHQs
bil7InVzZSBzdHJpY3QiCitlLmRlZmF1bHQ9dC5NaXhpbi5jcmVhdGUoe3dpbGxNZXJnZU1peGlu
OmZ1bmN0aW9uKGUpe3RoaXMuX3N1cGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKQordmFyIHQ9ISFl
Lm1vZGVsCitlLmNvbnRlbnQmJiF0JiYoZS5tb2RlbD1lLmNvbnRlbnQsZGVsZXRlIGUuY29udGVu
dCl9fSl9KSxlKCJlbWJlci1ydW50aW1lL21peGlucy9jb3B5YWJsZSIsWyJleHBvcnRzIiwiZW1i
ZXItbWV0YWwiLCJlbWJlci1kZWJ1ZyIsImVtYmVyLXJ1bnRpbWUvbWl4aW5zL2ZyZWV6YWJsZSJd
LGZ1bmN0aW9uKGUsdCxuLHIpeyJ1c2Ugc3RyaWN0IgorZS5kZWZhdWx0PXQuTWl4aW4uY3JlYXRl
KHtjb3B5Om51bGwsZnJvemVuQ29weTpmdW5jdGlvbigpe2lmKHIuRnJlZXphYmxlJiZyLkZyZWV6
YWJsZS5kZXRlY3QodGhpcykpcmV0dXJuKDAsdC5nZXQpKHRoaXMsImlzRnJvemVuIik/dGhpczp0
aGlzLmNvcHkoKS5mcmVlemUoKQordGhyb3cgbmV3IG4uRXJyb3IodGhpcysiIGRvZXMgbm90IHN1
cHBvcnQgZnJlZXppbmciKX19KX0pLGUoImVtYmVyLXJ1bnRpbWUvbWl4aW5zL2VudW1lcmFibGUi
LFsiZXhwb3J0cyIsImVtYmVyLXV0aWxzIiwiZW1iZXItbWV0YWwiLCJlbWJlci1kZWJ1ZyIsImVt
YmVyLXJ1bnRpbWUvY29tcGFyZSIsInJlcXVpcmUiXSxmdW5jdGlvbihlLHQsbixyLGksbyl7InVz
ZSBzdHJpY3QiCitmdW5jdGlvbiBzKCl7cmV0dXJuKGN8fChjPSgwLG8uZGVmYXVsdCkoImVtYmVy
LXJ1bnRpbWUvc3lzdGVtL25hdGl2ZV9hcnJheSIpLkEpKSgpfWZ1bmN0aW9uIGEoKXtyZXR1cm4g
MD09PXAubGVuZ3RoP3t9OnAucG9wKCl9ZnVuY3Rpb24gdShlKXtyZXR1cm4gcC5wdXNoKGUpLG51
bGx9ZnVuY3Rpb24gbChlLHQpe3ZhciByPTI9PT1hcmd1bWVudHMubGVuZ3RoCityZXR1cm4gZnVu
Y3Rpb24oaSl7dmFyIG89KDAsbi5nZXQpKGksZSkKK3JldHVybiByP3Q9PT1vOiEhb319dmFyIGM9
dm9pZCAwLHA9W10sZj1uLk1peGluLmNyZWF0ZSh7bmV4dE9iamVjdDpudWxsLGZpcnN0T2JqZWN0
OigwLG4uY29tcHV0ZWQpKCJbXSIsZnVuY3Rpb24oKXtpZigwIT09KDAsbi5nZXQpKHRoaXMsImxl
bmd0aCIpKXt2YXIgZT1hKCksdD10aGlzLm5leHRPYmplY3QoMCxudWxsLGUpCityZXR1cm4gdShl
KSx0fX0pLnJlYWRPbmx5KCksbGFzdE9iamVjdDooMCxuLmNvbXB1dGVkKSgiW10iLGZ1bmN0aW9u
KCl7aWYoMCE9PSgwLG4uZ2V0KSh0aGlzLCJsZW5ndGgiKSl7dmFyIGU9YSgpLHQ9MCxyPW51bGws
aT12b2lkIDAKK2Rve3I9aSxpPXRoaXMubmV4dE9iamVjdCh0KysscixlKX13aGlsZSh2b2lkIDAh
PT1pKQorcmV0dXJuIHUoZSkscn19KS5yZWFkT25seSgpLGNvbnRhaW5zOmZ1bmN0aW9uKGUpe3Jl
dHVybiB2b2lkIDAhPT10aGlzLmZpbmQoZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT1lfSl9LGZvckVh
Y2g6ZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVy
cm9yCit2YXIgcixpLG89YSgpLHM9KDAsbi5nZXQpKHRoaXMsImxlbmd0aCIpLGw9bnVsbAorZm9y
KHZvaWQgMD09PXQmJih0PW51bGwpLHI9MDtyPHM7cisrKWk9dGhpcy5uZXh0T2JqZWN0KHIsbCxv
KSxlLmNhbGwodCxpLHIsdGhpcyksbD1pCityZXR1cm4gbD1udWxsLG89dShvKSx0aGlzfSxnZXRF
YWNoOigwLG4uYWxpYXNNZXRob2QpKCJtYXBCeSIpLHNldEVhY2g6ZnVuY3Rpb24oZSx0KXtyZXR1
cm4gdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHIpe3JldHVybigwLG4uc2V0KShyLGUsdCl9KX0sbWFw
OmZ1bmN0aW9uKGUsdCl7dmFyIG49cygpCityZXR1cm4gdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHIs
aSxvKXtyZXR1cm4gbltpXT1lLmNhbGwodCxyLGksbyl9KSxufSxtYXBCeTpmdW5jdGlvbihlKXty
ZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuKDAsbi5nZXQpKHQsZSl9KX0sZmlsdGVy
OmZ1bmN0aW9uKGUsdCl7dmFyIG49cygpCityZXR1cm4gdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHIs
aSxvKXtlLmNhbGwodCxyLGksbykmJm4ucHVzaChyKX0pLG59LHJlamVjdDpmdW5jdGlvbihlLHQp
e3JldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiFlLmFwcGx5KHQsYXJndW1lbnRz
KX0pfSxmaWx0ZXJCeTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZpbHRlcihsLmFwcGx5KHRoaXMs
YXJndW1lbnRzKSl9LHJlamVjdEJ5OmZ1bmN0aW9uKGUsdCl7dmFyIHI9Mj09PWFyZ3VtZW50cy5s
ZW5ndGg/ZnVuY3Rpb24ocil7cmV0dXJuKDAsbi5nZXQpKHIsZSk9PT10fTpmdW5jdGlvbih0KXty
ZXR1cm4hISgwLG4uZ2V0KSh0LGUpfQorcmV0dXJuIHRoaXMucmVqZWN0KHIpfSxmaW5kOmZ1bmN0
aW9uKGUsdCl7dmFyIHIsaT0oMCxuLmdldCkodGhpcywibGVuZ3RoIikKK3ZvaWQgMD09PXQmJih0
PW51bGwpCit2YXIgbz1hKCkscz0hMSxsPW51bGwsYz12b2lkIDAscD12b2lkIDAKK2ZvcihyPTA7
cjxpJiYhcztyKyspYz10aGlzLm5leHRPYmplY3QocixsLG8pLHM9ZS5jYWxsKHQsYyxyLHRoaXMp
LHMmJihwPWMpLGw9YworcmV0dXJuIGM9bD1udWxsLG89dShvKSxwfSxmaW5kQnk6ZnVuY3Rpb24o
KXtyZXR1cm4gdGhpcy5maW5kKGwuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0sZXZlcnk6ZnVuY3Rp
b24oZSx0KXtyZXR1cm4hdGhpcy5maW5kKGZ1bmN0aW9uKG4scixpKXtyZXR1cm4hZS5jYWxsKHQs
bixyLGkpfSl9LGlzRXZlcnk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ldmVyeShsLmFwcGx5KHRo
aXMsYXJndW1lbnRzKSl9LGFueTpmdW5jdGlvbihlLHQpe3ZhciByLGk9KDAsbi5nZXQpKHRoaXMs
Imxlbmd0aCIpLG89YSgpLHM9ITEsbD1udWxsLGM9dm9pZCAwCitmb3Iodm9pZCAwPT09dCYmKHQ9
bnVsbCkscj0wO3I8aSYmIXM7cisrKWM9dGhpcy5uZXh0T2JqZWN0KHIsbCxvKSxzPWUuY2FsbCh0
LGMscix0aGlzKSxsPWMKK3JldHVybiBjPWw9bnVsbCxvPXUobyksc30saXNBbnk6ZnVuY3Rpb24o
KXtyZXR1cm4gdGhpcy5hbnkobC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSxyZWR1Y2U6ZnVuY3Rp
b24oZSx0LG4pe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IKK3Zh
ciByPXQKK3JldHVybiB0aGlzLmZvckVhY2goZnVuY3Rpb24odCxpKXtyPWUocix0LGksdGhpcyxu
KX0sdGhpcykscn0saW52b2tlOmZ1bmN0aW9uKGUpe2Zvcih0PWFyZ3VtZW50cy5sZW5ndGgsbj1B
cnJheSh0PjE/dC0xOjApLHI9MTtyPHQ7cisrKW5bci0xXT1hcmd1bWVudHNbcl0KK3ZhciB0LG4s
cixpPXMoKQorcmV0dXJuIHRoaXMuZm9yRWFjaChmdW5jdGlvbih0LHIpe3ZhciBvPXQmJnRbZV0K
KyJmdW5jdGlvbiI9PXR5cGVvZiBvJiYoaVtyXT1uP28uYXBwbHkodCxuKTp0W2VdKCkpfSx0aGlz
KSxpfSx0b0FycmF5OmZ1bmN0aW9uKCl7dmFyIGU9cygpCityZXR1cm4gdGhpcy5mb3JFYWNoKGZ1
bmN0aW9uKHQsbil7cmV0dXJuIGVbbl09dH0pLGV9LGNvbXBhY3Q6ZnVuY3Rpb24oKXtyZXR1cm4g
dGhpcy5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPWV9KX0sd2l0aG91dDpmdW5jdGlv
bihlKXtpZighdGhpcy5pbmNsdWRlcyhlKSlyZXR1cm4gdGhpcwordmFyIHQ9cygpCityZXR1cm4g
dGhpcy5mb3JFYWNoKGZ1bmN0aW9uKG4pe249PT1lfHxuIT09biYmZSE9PWV8fCh0W3QubGVuZ3Ro
XT1uKX0pLHR9LHVuaXE6ZnVuY3Rpb24oKXt2YXIgZT1zKCkKK3JldHVybiB0aGlzLmZvckVhY2go
ZnVuY3Rpb24odCl7ZS5pbmRleE9mKHQpPDAmJmUucHVzaCh0KX0pLGV9LCJbXSI6KDAsbi5jb21w
dXRlZCkoe2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzfX0pLGFkZEVudW1lcmFibGVPYnNlcnZl
cjpmdW5jdGlvbihlLHQpe3ZhciByPXQmJnQud2lsbENoYW5nZXx8ImVudW1lcmFibGVXaWxsQ2hh
bmdlIixpPXQmJnQuZGlkQ2hhbmdlfHwiZW51bWVyYWJsZURpZENoYW5nZSIsbz0oMCxuLmdldCko
dGhpcywiaGFzRW51bWVyYWJsZU9ic2VydmVycyIpCityZXR1cm4gb3x8KDAsbi5wcm9wZXJ0eVdp
bGxDaGFuZ2UpKHRoaXMsImhhc0VudW1lcmFibGVPYnNlcnZlcnMiKSwoMCxuLmFkZExpc3RlbmVy
KSh0aGlzLCJAZW51bWVyYWJsZTpiZWZvcmUiLGUsciksKDAsbi5hZGRMaXN0ZW5lcikodGhpcywi
QGVudW1lcmFibGU6Y2hhbmdlIixlLGkpLG98fCgwLG4ucHJvcGVydHlEaWRDaGFuZ2UpKHRoaXMs
Imhhc0VudW1lcmFibGVPYnNlcnZlcnMiKSx0aGlzfSxyZW1vdmVFbnVtZXJhYmxlT2JzZXJ2ZXI6
ZnVuY3Rpb24oZSx0KXt2YXIgcj10JiZ0LndpbGxDaGFuZ2V8fCJlbnVtZXJhYmxlV2lsbENoYW5n
ZSIsaT10JiZ0LmRpZENoYW5nZXx8ImVudW1lcmFibGVEaWRDaGFuZ2UiLG89KDAsbi5nZXQpKHRo
aXMsImhhc0VudW1lcmFibGVPYnNlcnZlcnMiKQorcmV0dXJuIG8mJigwLG4ucHJvcGVydHlXaWxs
Q2hhbmdlKSh0aGlzLCJoYXNFbnVtZXJhYmxlT2JzZXJ2ZXJzIiksKDAsbi5yZW1vdmVMaXN0ZW5l
cikodGhpcywiQGVudW1lcmFibGU6YmVmb3JlIixlLHIpLCgwLG4ucmVtb3ZlTGlzdGVuZXIpKHRo
aXMsIkBlbnVtZXJhYmxlOmNoYW5nZSIsZSxpKSxvJiYoMCxuLnByb3BlcnR5RGlkQ2hhbmdlKSh0
aGlzLCJoYXNFbnVtZXJhYmxlT2JzZXJ2ZXJzIiksdGhpc30saGFzRW51bWVyYWJsZU9ic2VydmVy
czooMCxuLmNvbXB1dGVkKShmdW5jdGlvbigpe3JldHVybigwLG4uaGFzTGlzdGVuZXJzKSh0aGlz
LCJAZW51bWVyYWJsZTpjaGFuZ2UiKXx8KDAsbi5oYXNMaXN0ZW5lcnMpKHRoaXMsIkBlbnVtZXJh
YmxlOmJlZm9yZSIpfSksZW51bWVyYWJsZUNvbnRlbnRXaWxsQ2hhbmdlOmZ1bmN0aW9uKGUsdCl7
dmFyIHI9dm9pZCAwLGk9dm9pZCAwLG89dm9pZCAwCityZXR1cm4gcj0ibnVtYmVyIj09dHlwZW9m
IGU/ZTplPygwLG4uZ2V0KShlLCJsZW5ndGgiKTplPS0xLGk9Im51bWJlciI9PXR5cGVvZiB0P3Q6
dD8oMCxuLmdldCkodCwibGVuZ3RoIik6dD0tMSxvPWk8MHx8cjwwfHxpLXIhPTAsLTE9PT1lJiYo
ZT1udWxsKSwtMT09PXQmJih0PW51bGwpLCgwLG4ucHJvcGVydHlXaWxsQ2hhbmdlKSh0aGlzLCJb
XSIpLG8mJigwLG4ucHJvcGVydHlXaWxsQ2hhbmdlKSh0aGlzLCJsZW5ndGgiKSwoMCxuLnNlbmRF
dmVudCkodGhpcywiQGVudW1lcmFibGU6YmVmb3JlIixbdGhpcyxlLHRdKSx0aGlzfSxlbnVtZXJh
YmxlQ29udGVudERpZENoYW5nZTpmdW5jdGlvbihlLHQpe3ZhciByPXZvaWQgMCxpPXZvaWQgMCxv
PXZvaWQgMAorcmV0dXJuIHI9Im51bWJlciI9PXR5cGVvZiBlP2U6ZT8oMCxuLmdldCkoZSwibGVu
Z3RoIik6ZT0tMSxpPSJudW1iZXIiPT10eXBlb2YgdD90OnQ/KDAsbi5nZXQpKHQsImxlbmd0aCIp
OnQ9LTEsbz1pPDB8fHI8MHx8aS1yIT0wLC0xPT09ZSYmKGU9bnVsbCksLTE9PT10JiYodD1udWxs
KSwoMCxuLnNlbmRFdmVudCkodGhpcywiQGVudW1lcmFibGU6Y2hhbmdlIixbdGhpcyxlLHRdKSxv
JiYoMCxuLnByb3BlcnR5RGlkQ2hhbmdlKSh0aGlzLCJsZW5ndGgiKSwoMCxuLnByb3BlcnR5RGlk
Q2hhbmdlKSh0aGlzLCJbXSIpLHRoaXN9LHNvcnRCeTpmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50
cworcmV0dXJuIHRoaXMudG9BcnJheSgpLnNvcnQoZnVuY3Rpb24odCxyKXt2YXIgbyxzLGEsdSxs
Citmb3Iobz0wO288ZS5sZW5ndGg7bysrKWlmKHM9ZVtvXSxhPSgwLG4uZ2V0KSh0LHMpLHU9KDAs
bi5nZXQpKHIscyksbD0oMCxpLmRlZmF1bHQpKGEsdSkpcmV0dXJuIGwKK3JldHVybiAwfSl9LHVu
aXFCeTpmdW5jdGlvbihlKXt2YXIgcj1zKCksaT1PYmplY3QuY3JlYXRlKG51bGwpCityZXR1cm4g
dGhpcy5mb3JFYWNoKGZ1bmN0aW9uKG8pe3ZhciBzPSgwLHQuZ3VpZEZvcikoKDAsbi5nZXQpKG8s
ZSkpCitzIGluIGl8fChpW3NdPSEwLHIucHVzaChvKSl9KSxyfSxpbmNsdWRlczpmdW5jdGlvbihl
KXt2YXIgdD0oMCxuLmdldCkodGhpcywibGVuZ3RoIikscj12b2lkIDAsaT12b2lkIDAsbz1udWxs
LHM9ITEsbD1hKCkKK2ZvcihyPTA7cjx0JiYhcztyKyspaT10aGlzLm5leHRPYmplY3QocixvLGwp
LHM9ZT09PWl8fGUhPT1lJiZpIT09aSxvPWkKK3JldHVybiBpPW89bnVsbCxsPXUobCksc319KQor
ZS5kZWZhdWx0PWZ9KSxlKCJlbWJlci1ydW50aW1lL21peGlucy9ldmVudGVkIixbImV4cG9ydHMi
LCJlbWJlci1tZXRhbCJdLGZ1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiCitlLmRlZmF1bHQ9dC5N
aXhpbi5jcmVhdGUoe29uOmZ1bmN0aW9uKGUsbixyKXtyZXR1cm4oMCx0LmFkZExpc3RlbmVyKSh0
aGlzLGUsbixyKSx0aGlzfSxvbmU6ZnVuY3Rpb24oZSxuLHIpe3JldHVybiByfHwocj1uLG49bnVs
bCksKDAsdC5hZGRMaXN0ZW5lcikodGhpcyxlLG4sciwhMCksdGhpc30sdHJpZ2dlcjpmdW5jdGlv
bihlKXt2YXIgbixyLGkKK2ZvcihuPWFyZ3VtZW50cy5sZW5ndGgscj1BcnJheShuPjE/bi0xOjAp
LGk9MTtpPG47aSsrKXJbaS0xXT1hcmd1bWVudHNbaV07KDAsdC5zZW5kRXZlbnQpKHRoaXMsZSxy
KX0sb2ZmOmZ1bmN0aW9uKGUsbixyKXtyZXR1cm4oMCx0LnJlbW92ZUxpc3RlbmVyKSh0aGlzLGUs
bixyKSx0aGlzfSxoYXM6ZnVuY3Rpb24oZSl7cmV0dXJuKDAsdC5oYXNMaXN0ZW5lcnMpKHRoaXMs
ZSl9fSl9KSxlKCJlbWJlci1ydW50aW1lL21peGlucy9mcmVlemFibGUiLFsiZXhwb3J0cyIsImVt
YmVyLW1ldGFsIiwiZW1iZXItZGVidWciXSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiCitl
LkZST1pFTl9FUlJPUj1lLkZyZWV6YWJsZT12b2lkIDAsZS5GcmVlemFibGU9dC5NaXhpbi5jcmVh
dGUoe2luaXQ6ZnVuY3Rpb24oKXt0aGlzLl9zdXBlci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGlz
RnJvemVuOiExLGZyZWV6ZTpmdW5jdGlvbigpe3JldHVybigwLHQuZ2V0KSh0aGlzLCJpc0Zyb3pl
biIpP3RoaXM6KCgwLHQuc2V0KSh0aGlzLCJpc0Zyb3plbiIsITApLHRoaXMpfX0pLGUuRlJPWkVO
X0VSUk9SPSJGcm96ZW4gb2JqZWN0IGNhbm5vdCBiZSBtb2RpZmllZC4ifSksZSgiZW1iZXItcnVu
dGltZS9taXhpbnMvbXV0YWJsZV9hcnJheSIsWyJleHBvcnRzIiwiZW1iZXItbWV0YWwiLCJlbWJl
ci1ydW50aW1lL21peGlucy9hcnJheSIsImVtYmVyLXJ1bnRpbWUvbWl4aW5zL211dGFibGVfZW51
bWVyYWJsZSIsImVtYmVyLXJ1bnRpbWUvbWl4aW5zL2VudW1lcmFibGUiLCJlbWJlci1kZWJ1ZyJd
LGZ1bmN0aW9uKGUsdCxuLHIsaSxvKXsidXNlIHN0cmljdCIKK2Z1bmN0aW9uIHMoZSxuLHIpe2lm
KCJudW1iZXIiPT10eXBlb2Ygbil7aWYobjwwfHxuPj0oMCx0LmdldCkoZSwibGVuZ3RoIikpdGhy
b3cgbmV3IG8uRXJyb3IoYSkKK3ZvaWQgMD09PXImJihyPTEpLGUucmVwbGFjZShuLHIsdSl9cmV0
dXJuIGV9ZS5yZW1vdmVBdD1zCit2YXIgYT0iSW5kZXggb3V0IG9mIHJhbmdlIix1PVtdCitlLmRl
ZmF1bHQ9dC5NaXhpbi5jcmVhdGUobi5kZWZhdWx0LHIuZGVmYXVsdCx7cmVwbGFjZTpudWxsLGNs
ZWFyOmZ1bmN0aW9uKCl7dmFyIGU9KDAsdC5nZXQpKHRoaXMsImxlbmd0aCIpCityZXR1cm4gMD09
PWU/dGhpczoodGhpcy5yZXBsYWNlKDAsZSx1KSx0aGlzKX0saW5zZXJ0QXQ6ZnVuY3Rpb24oZSxu
KXtpZihlPigwLHQuZ2V0KSh0aGlzLCJsZW5ndGgiKSl0aHJvdyBuZXcgby5FcnJvcihhKQorcmV0
dXJuIHRoaXMucmVwbGFjZShlLDAsW25dKSx0aGlzfSxyZW1vdmVBdDpmdW5jdGlvbihlLHQpe3Jl
dHVybiBzKHRoaXMsZSx0KX0scHVzaE9iamVjdDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5pbnNl
cnRBdCgoMCx0LmdldCkodGhpcywibGVuZ3RoIiksZSksZX0scHVzaE9iamVjdHM6ZnVuY3Rpb24o
ZSl7aWYoIWkuZGVmYXVsdC5kZXRlY3QoZSkmJiFBcnJheS5pc0FycmF5KGUpKXRocm93IG5ldyBU
eXBlRXJyb3IoIk11c3QgcGFzcyBFbWJlci5FbnVtZXJhYmxlIHRvIEVtYmVyLk11dGFibGVBcnJh
eSNwdXNoT2JqZWN0cyIpCityZXR1cm4gdGhpcy5yZXBsYWNlKCgwLHQuZ2V0KSh0aGlzLCJsZW5n
dGgiKSwwLGUpLHRoaXN9LHBvcE9iamVjdDpmdW5jdGlvbigpe3ZhciBlPSgwLHQuZ2V0KSh0aGlz
LCJsZW5ndGgiKQoraWYoMD09PWUpcmV0dXJuIG51bGwKK3ZhciByPSgwLG4ub2JqZWN0QXQpKHRo
aXMsZS0xKQorcmV0dXJuIHRoaXMucmVtb3ZlQXQoZS0xLDEpLHJ9LHNoaWZ0T2JqZWN0OmZ1bmN0
aW9uKCl7aWYoMD09PSgwLHQuZ2V0KSh0aGlzLCJsZW5ndGgiKSlyZXR1cm4gbnVsbAordmFyIGU9
KDAsbi5vYmplY3RBdCkodGhpcywwKQorcmV0dXJuIHRoaXMucmVtb3ZlQXQoMCksZX0sdW5zaGlm
dE9iamVjdDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5pbnNlcnRBdCgwLGUpLGV9LHVuc2hpZnRP
YmplY3RzOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnJlcGxhY2UoMCwwLGUpLHRoaXN9LHJldmVy
c2VPYmplY3RzOmZ1bmN0aW9uKCl7dmFyIGU9KDAsdC5nZXQpKHRoaXMsImxlbmd0aCIpCitpZigw
PT09ZSlyZXR1cm4gdGhpcwordmFyIG49dGhpcy50b0FycmF5KCkucmV2ZXJzZSgpCityZXR1cm4g
dGhpcy5yZXBsYWNlKDAsZSxuKSx0aGlzfSxzZXRPYmplY3RzOmZ1bmN0aW9uKGUpe2lmKDA9PT1l
Lmxlbmd0aClyZXR1cm4gdGhpcy5jbGVhcigpCit2YXIgbj0oMCx0LmdldCkodGhpcywibGVuZ3Ro
IikKK3JldHVybiB0aGlzLnJlcGxhY2UoMCxuLGUpLHRoaXN9LHJlbW92ZU9iamVjdDpmdW5jdGlv
bihlKXtmb3IodmFyIHI9KDAsdC5nZXQpKHRoaXMsImxlbmd0aCIpfHwwOy0tcj49MDspKDAsbi5v
YmplY3RBdCkodGhpcyxyKT09PWUmJnRoaXMucmVtb3ZlQXQocikKK3JldHVybiB0aGlzfSxhZGRP
YmplY3Q6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuaW5jbHVkZXMoZSl8fHRoaXMucHVzaE9iamVj
dChlKSx0aGlzfX0pfSksZSgiZW1iZXItcnVudGltZS9taXhpbnMvbXV0YWJsZV9lbnVtZXJhYmxl
IixbImV4cG9ydHMiLCJlbWJlci1ydW50aW1lL21peGlucy9lbnVtZXJhYmxlIiwiZW1iZXItbWV0
YWwiXSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiCitlLmRlZmF1bHQ9bi5NaXhpbi5jcmVh
dGUodC5kZWZhdWx0LHthZGRPYmplY3Q6bnVsbCxhZGRPYmplY3RzOmZ1bmN0aW9uKGUpe3ZhciB0
PXRoaXMKK3JldHVybigwLG4uYmVnaW5Qcm9wZXJ0eUNoYW5nZXMpKHRoaXMpLGUuZm9yRWFjaChm
dW5jdGlvbihlKXtyZXR1cm4gdC5hZGRPYmplY3QoZSl9KSwoMCxuLmVuZFByb3BlcnR5Q2hhbmdl
cykodGhpcyksdGhpc30scmVtb3ZlT2JqZWN0Om51bGwscmVtb3ZlT2JqZWN0czpmdW5jdGlvbihl
KXt2YXIgdAorZm9yKCgwLG4uYmVnaW5Qcm9wZXJ0eUNoYW5nZXMpKHRoaXMpLHQ9ZS5sZW5ndGgt
MTt0Pj0wO3QtLSl0aGlzLnJlbW92ZU9iamVjdChlW3RdKQorcmV0dXJuKDAsbi5lbmRQcm9wZXJ0
eUNoYW5nZXMpKHRoaXMpLHRoaXN9fSl9KSxlKCJlbWJlci1ydW50aW1lL21peGlucy9vYnNlcnZh
YmxlIixbImV4cG9ydHMiLCJlbWJlci1tZXRhbCIsImVtYmVyLWRlYnVnIl0sZnVuY3Rpb24oZSx0
LG4peyJ1c2Ugc3RyaWN0IgorZS5kZWZhdWx0PXQuTWl4aW4uY3JlYXRlKHtnZXQ6ZnVuY3Rpb24o
ZSl7cmV0dXJuKDAsdC5nZXQpKHRoaXMsZSl9LGdldFByb3BlcnRpZXM6ZnVuY3Rpb24oKXt2YXIg
ZSxuLHIKK2ZvcihlPWFyZ3VtZW50cy5sZW5ndGgsbj1BcnJheShlKSxyPTA7cjxlO3IrKyluW3Jd
PWFyZ3VtZW50c1tyXQorcmV0dXJuIHQuZ2V0UHJvcGVydGllcy5hcHBseSh2b2lkIDAsW3RoaXNd
LmNvbmNhdChuKSl9LHNldDpmdW5jdGlvbihlLG4pe3JldHVybigwLHQuc2V0KSh0aGlzLGUsbil9
LHNldFByb3BlcnRpZXM6ZnVuY3Rpb24oZSl7cmV0dXJuKDAsdC5zZXRQcm9wZXJ0aWVzKSh0aGlz
LGUpfSxiZWdpblByb3BlcnR5Q2hhbmdlczpmdW5jdGlvbigpe3JldHVybigwLHQuYmVnaW5Qcm9w
ZXJ0eUNoYW5nZXMpKCksdGhpc30sZW5kUHJvcGVydHlDaGFuZ2VzOmZ1bmN0aW9uKCl7cmV0dXJu
KDAsdC5lbmRQcm9wZXJ0eUNoYW5nZXMpKCksdGhpc30scHJvcGVydHlXaWxsQ2hhbmdlOmZ1bmN0
aW9uKGUpe3JldHVybigwLHQucHJvcGVydHlXaWxsQ2hhbmdlKSh0aGlzLGUpLHRoaXN9LHByb3Bl
cnR5RGlkQ2hhbmdlOmZ1bmN0aW9uKGUpe3JldHVybigwLHQucHJvcGVydHlEaWRDaGFuZ2UpKHRo
aXMsZSksdGhpc30sbm90aWZ5UHJvcGVydHlDaGFuZ2U6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMu
cHJvcGVydHlXaWxsQ2hhbmdlKGUpLHRoaXMucHJvcGVydHlEaWRDaGFuZ2UoZSksdGhpc30sYWRk
T2JzZXJ2ZXI6ZnVuY3Rpb24oZSxuLHIpeygwLHQuYWRkT2JzZXJ2ZXIpKHRoaXMsZSxuLHIpfSxy
ZW1vdmVPYnNlcnZlcjpmdW5jdGlvbihlLG4scil7KDAsdC5yZW1vdmVPYnNlcnZlcikodGhpcyxl
LG4scil9LGhhc09ic2VydmVyRm9yOmZ1bmN0aW9uKGUpe3JldHVybigwLHQuaGFzTGlzdGVuZXJz
KSh0aGlzLGUrIjpjaGFuZ2UiKX0sZ2V0V2l0aERlZmF1bHQ6ZnVuY3Rpb24oZSxuKXtyZXR1cm4o
MCx0LmdldFdpdGhEZWZhdWx0KSh0aGlzLGUsbil9LGluY3JlbWVudFByb3BlcnR5OmZ1bmN0aW9u
KGUsbil7cmV0dXJuKDAsdC5pc05vbmUpKG4pJiYobj0xKSwoMCx0LnNldCkodGhpcyxlLChwYXJz
ZUZsb2F0KCgwLHQuZ2V0KSh0aGlzLGUpKXx8MCkrbil9LGRlY3JlbWVudFByb3BlcnR5OmZ1bmN0
aW9uKGUsbil7cmV0dXJuKDAsdC5pc05vbmUpKG4pJiYobj0xKSwoMCx0LnNldCkodGhpcyxlLCgo
MCx0LmdldCkodGhpcyxlKXx8MCktbil9LHRvZ2dsZVByb3BlcnR5OmZ1bmN0aW9uKGUpe3JldHVy
bigwLHQuc2V0KSh0aGlzLGUsISgwLHQuZ2V0KSh0aGlzLGUpKX0sY2FjaGVGb3I6ZnVuY3Rpb24o
ZSl7cmV0dXJuKDAsdC5jYWNoZUZvcikodGhpcyxlKX0sb2JzZXJ2ZXJzRm9yS2V5OmZ1bmN0aW9u
KGUpe3JldHVybigwLHQub2JzZXJ2ZXJzRm9yKSh0aGlzLGUpfX0pfSksZSgiZW1iZXItcnVudGlt
ZS9taXhpbnMvcHJvbWlzZV9wcm94eSIsWyJleHBvcnRzIiwiZW1iZXItbWV0YWwiLCJlbWJlci1k
ZWJ1ZyIsImVtYmVyLXJ1bnRpbWUvY29tcHV0ZWQvY29tcHV0ZWRfbWFjcm9zIl0sZnVuY3Rpb24o
ZSx0LG4scil7InVzZSBzdHJpY3QiCitmdW5jdGlvbiBpKGUsbil7cmV0dXJuKDAsdC5zZXRQcm9w
ZXJ0aWVzKShlLHtpc0Z1bGZpbGxlZDohMSxpc1JlamVjdGVkOiExfSksbi50aGVuKGZ1bmN0aW9u
KG4pe3JldHVybiBlLmlzRGVzdHJveWVkfHxlLmlzRGVzdHJveWluZ3x8KDAsdC5zZXRQcm9wZXJ0
aWVzKShlLHtjb250ZW50Om4saXNGdWxmaWxsZWQ6ITB9KSxufSxmdW5jdGlvbihuKXt0aHJvdyBl
LmlzRGVzdHJveWVkfHxlLmlzRGVzdHJveWluZ3x8KDAsdC5zZXRQcm9wZXJ0aWVzKShlLHtyZWFz
b246bixpc1JlamVjdGVkOiEwfSksbn0sIkVtYmVyOiBQcm9taXNlUHJveHkiKX1mdW5jdGlvbiBv
KGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPSgwLHQuZ2V0KSh0aGlzLCJwcm9taXNlIikKK3Jl
dHVybiBuW2VdLmFwcGx5KG4sYXJndW1lbnRzKX19ZS5kZWZhdWx0PXQuTWl4aW4uY3JlYXRlKHty
ZWFzb246bnVsbCxpc1BlbmRpbmc6KDAsci5ub3QpKCJpc1NldHRsZWQiKS5yZWFkT25seSgpLGlz
U2V0dGxlZDooMCxyLm9yKSgiaXNSZWplY3RlZCIsImlzRnVsZmlsbGVkIikucmVhZE9ubHkoKSxp
c1JlamVjdGVkOiExLGlzRnVsZmlsbGVkOiExLHByb21pc2U6KDAsdC5jb21wdXRlZCkoe2dldDpm
dW5jdGlvbigpe3Rocm93IG5ldyBuLkVycm9yKCJQcm9taXNlUHJveHkncyBwcm9taXNlIG11c3Qg
YmUgc2V0Iil9LHNldDpmdW5jdGlvbihlLHQpe3JldHVybiBpKHRoaXMsdCl9fSksdGhlbjpvKCJ0
aGVuIiksY2F0Y2g6bygiY2F0Y2giKSxmaW5hbGx5Om8oImZpbmFsbHkiKX0pfSksZSgiZW1iZXIt
cnVudGltZS9taXhpbnMvcmVnaXN0cnlfcHJveHkiLFsiZXhwb3J0cyIsImVtYmVyLW1ldGFsIiwi
ZW1iZXItZGVidWciXSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiCitmdW5jdGlvbiByKGUp
e3JldHVybiBmdW5jdGlvbigpe3ZhciB0CityZXR1cm4odD10aGlzLl9fcmVnaXN0cnlfXylbZV0u
YXBwbHkodCxhcmd1bWVudHMpfX1mdW5jdGlvbiBpKGUsdCxuLHIpe3JldHVybiBmdW5jdGlvbigp
e3JldHVybiBlW3JdLmFwcGx5KGUsYXJndW1lbnRzKX19ZS5idWlsZEZha2VSZWdpc3RyeVdpdGhE
ZXByZWNhdGlvbnM9ZnVuY3Rpb24oZSx0KXt2YXIgbj17fSxyPXtyZXNvbHZlOiJyZXNvbHZlUmVn
aXN0cmF0aW9uIixyZWdpc3RlcjoicmVnaXN0ZXIiLHVucmVnaXN0ZXI6InVucmVnaXN0ZXIiLGhh
czoiaGFzUmVnaXN0cmF0aW9uIixvcHRpb246InJlZ2lzdGVyT3B0aW9uIixvcHRpb25zOiJyZWdp
c3Rlck9wdGlvbnMiLGdldE9wdGlvbnM6InJlZ2lzdGVyZWRPcHRpb25zIixvcHRpb25zRm9yVHlw
ZToicmVnaXN0ZXJPcHRpb25zRm9yVHlwZSIsZ2V0T3B0aW9uc0ZvclR5cGU6InJlZ2lzdGVyZWRP
cHRpb25zRm9yVHlwZSIsaW5qZWN0aW9uOiJpbmplY3QifQorZm9yKHZhciBvIGluIHIpbltvXT1p
KGUsdCxvLHJbb10pCityZXR1cm4gbn0sZS5kZWZhdWx0PXQuTWl4aW4uY3JlYXRlKHtfX3JlZ2lz
dHJ5X186bnVsbCxyZXNvbHZlUmVnaXN0cmF0aW9uOnIoInJlc29sdmUiKSxyZWdpc3RlcjpyKCJy
ZWdpc3RlciIpLHVucmVnaXN0ZXI6cigidW5yZWdpc3RlciIpLGhhc1JlZ2lzdHJhdGlvbjpyKCJo
YXMiKSxyZWdpc3Rlck9wdGlvbjpyKCJvcHRpb24iKSxyZWdpc3RlcmVkT3B0aW9uOnIoImdldE9w
dGlvbiIpLHJlZ2lzdGVyT3B0aW9uczpyKCJvcHRpb25zIikscmVnaXN0ZXJlZE9wdGlvbnM6cigi
Z2V0T3B0aW9ucyIpLHJlZ2lzdGVyT3B0aW9uc0ZvclR5cGU6cigib3B0aW9uc0ZvclR5cGUiKSxy
ZWdpc3RlcmVkT3B0aW9uc0ZvclR5cGU6cigiZ2V0T3B0aW9uc0ZvclR5cGUiKSxpbmplY3Q6cigi
aW5qZWN0aW9uIil9KX0pLGUoImVtYmVyLXJ1bnRpbWUvbWl4aW5zL3RhcmdldF9hY3Rpb25fc3Vw
cG9ydCIsWyJleHBvcnRzIiwiZW1iZXItZW52aXJvbm1lbnQiLCJlbWJlci1tZXRhbCIsImVtYmVy
LWRlYnVnIl0sZnVuY3Rpb24oZSx0LG4scil7InVzZSBzdHJpY3QiCitmdW5jdGlvbiBpKGUpe3Zh
ciByLGk9KDAsbi5nZXQpKGUsInRhcmdldE9iamVjdCIpCityZXR1cm4gaXx8KGUuX3RhcmdldE9i
amVjdD9lLl90YXJnZXRPYmplY3Q6KGk9KDAsbi5nZXQpKGUsInRhcmdldCIpLGk/InN0cmluZyI9
PXR5cGVvZiBpPyhyPSgwLG4uZ2V0KShlLGkpLHZvaWQgMD09PXImJihyPSgwLG4uZ2V0KSh0LmNv
bnRleHQubG9va3VwLGkpKSxyKTppOm51bGwpKX1lLmRlZmF1bHQ9bi5NaXhpbi5jcmVhdGUoe3Rh
cmdldDpudWxsLGFjdGlvbjpudWxsLGFjdGlvbkNvbnRleHQ6bnVsbCxhY3Rpb25Db250ZXh0T2Jq
ZWN0OigwLG4uY29tcHV0ZWQpKCJhY3Rpb25Db250ZXh0IixmdW5jdGlvbigpe3ZhciBlLHI9KDAs
bi5nZXQpKHRoaXMsImFjdGlvbkNvbnRleHQiKQorcmV0dXJuInN0cmluZyI9PXR5cGVvZiByPyhl
PSgwLG4uZ2V0KSh0aGlzLHIpLHZvaWQgMD09PWUmJihlPSgwLG4uZ2V0KSh0LmNvbnRleHQubG9v
a3VwLHIpKSxlKTpyfSksdHJpZ2dlckFjdGlvbjpmdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt2
YXIgbj1bXQorcmV0dXJuIHQmJm4ucHVzaCh0KSxuLmNvbmNhdChlKX12YXIgdCxyLG8scz1hcmd1
bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30sYT1z
LmFjdGlvbnx8KDAsbi5nZXQpKHRoaXMsImFjdGlvbiIpLHU9cy50YXJnZXQKK3V8fCh1PWkodGhp
cykpCit2YXIgbD1zLmFjdGlvbkNvbnRleHQKK3JldHVybiB2b2lkIDA9PT1sJiYobD0oMCxuLmdl
dCkodGhpcywiYWN0aW9uQ29udGV4dE9iamVjdCIpfHx0aGlzKSwhKCF1fHwhYSkmJih0PXZvaWQg
MCx0PXUuc2VuZD8ocj11KS5zZW5kLmFwcGx5KHIsZShsLGEpKToobz11KVthXS5hcHBseShvLGUo
bCkpLCExIT09dCYmKHQ9ITApLHQpfX0pfSksZSgiZW1iZXItcnVudGltZS9zdHJpbmdfcmVnaXN0
cnkiLFsiZXhwb3J0cyJdLGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IgorZS5zZXRTdHJpbmdzPWZ1
bmN0aW9uKGUpe3Q9ZX0sZS5nZXRTdHJpbmdzPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LGUuZ2V0PWZ1
bmN0aW9uKGUpe3JldHVybiB0W2VdfQordmFyIHQ9e319KSxlKCJlbWJlci1ydW50aW1lL3N5c3Rl
bS9hcHBsaWNhdGlvbiIsWyJleHBvcnRzIiwiZW1iZXItcnVudGltZS9zeXN0ZW0vbmFtZXNwYWNl
Il0sZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCIKK2UuZGVmYXVsdD10LmRlZmF1bHQuZXh0ZW5k
KCl9KSxlKCJlbWJlci1ydW50aW1lL3N5c3RlbS9hcnJheV9wcm94eSIsWyJleHBvcnRzIiwiZW1i
ZXItbWV0YWwiLCJlbWJlci1ydW50aW1lL3V0aWxzIiwiZW1iZXItcnVudGltZS9zeXN0ZW0vb2Jq
ZWN0IiwiZW1iZXItcnVudGltZS9taXhpbnMvbXV0YWJsZV9hcnJheSIsImVtYmVyLXJ1bnRpbWUv
bWl4aW5zL2VudW1lcmFibGUiLCJlbWJlci1ydW50aW1lL21peGlucy9hcnJheSIsImVtYmVyLWRl
YnVnIl0sZnVuY3Rpb24oZSx0LG4scixpLG8scyxhKXsidXNlIHN0cmljdCIKK2Z1bmN0aW9uIHUo
KXtyZXR1cm4gdGhpc312YXIgbD1bXQorZS5kZWZhdWx0PXIuZGVmYXVsdC5leHRlbmQoaS5kZWZh
dWx0LHtjb250ZW50Om51bGwsYXJyYW5nZWRDb250ZW50OigwLHQuYWxpYXMpKCJjb250ZW50Iiks
b2JqZWN0QXRDb250ZW50OmZ1bmN0aW9uKGUpe3JldHVybigwLHMub2JqZWN0QXQpKCgwLHQuZ2V0
KSh0aGlzLCJhcnJhbmdlZENvbnRlbnQiKSxlKX0scmVwbGFjZUNvbnRlbnQ6ZnVuY3Rpb24oZSxu
LHIpeygwLHQuZ2V0KSh0aGlzLCJjb250ZW50IikucmVwbGFjZShlLG4scil9LF9jb250ZW50V2ls
bENoYW5nZTooMCx0Ll9iZWZvcmVPYnNlcnZlcikoImNvbnRlbnQiLGZ1bmN0aW9uKCl7dGhpcy5f
dGVhcmRvd25Db250ZW50KCl9KSxfdGVhcmRvd25Db250ZW50OmZ1bmN0aW9uKCl7dmFyIGU9KDAs
dC5nZXQpKHRoaXMsImNvbnRlbnQiKQorZSYmKDAscy5yZW1vdmVBcnJheU9ic2VydmVyKShlLHRo
aXMse3dpbGxDaGFuZ2U6ImNvbnRlbnRBcnJheVdpbGxDaGFuZ2UiLGRpZENoYW5nZToiY29udGVu
dEFycmF5RGlkQ2hhbmdlIn0pfSxjb250ZW50QXJyYXlXaWxsQ2hhbmdlOnUsY29udGVudEFycmF5
RGlkQ2hhbmdlOnUsX2NvbnRlbnREaWRDaGFuZ2U6KDAsdC5vYnNlcnZlcikoImNvbnRlbnQiLGZ1
bmN0aW9uKCl7KDAsdC5nZXQpKHRoaXMsImNvbnRlbnQiKQordGhpcy5fc2V0dXBDb250ZW50KCl9
KSxfc2V0dXBDb250ZW50OmZ1bmN0aW9uKCl7dmFyIGU9KDAsdC5nZXQpKHRoaXMsImNvbnRlbnQi
KQorZSYmKDAscy5hZGRBcnJheU9ic2VydmVyKShlLHRoaXMse3dpbGxDaGFuZ2U6ImNvbnRlbnRB
cnJheVdpbGxDaGFuZ2UiLGRpZENoYW5nZToiY29udGVudEFycmF5RGlkQ2hhbmdlIn0pfSxfYXJy
YW5nZWRDb250ZW50V2lsbENoYW5nZTooMCx0Ll9iZWZvcmVPYnNlcnZlcikoImFycmFuZ2VkQ29u
dGVudCIsZnVuY3Rpb24oKXt2YXIgZT0oMCx0LmdldCkodGhpcywiYXJyYW5nZWRDb250ZW50Iiks
bj1lPygwLHQuZ2V0KShlLCJsZW5ndGgiKTowCit0aGlzLmFycmFuZ2VkQ29udGVudEFycmF5V2ls
bENoYW5nZSh0aGlzLDAsbix2b2lkIDApLHRoaXMuYXJyYW5nZWRDb250ZW50V2lsbENoYW5nZSh0
aGlzKSx0aGlzLl90ZWFyZG93bkFycmFuZ2VkQ29udGVudChlKX0pLF9hcnJhbmdlZENvbnRlbnRE
aWRDaGFuZ2U6KDAsdC5vYnNlcnZlcikoImFycmFuZ2VkQ29udGVudCIsZnVuY3Rpb24oKXt2YXIg
ZT0oMCx0LmdldCkodGhpcywiYXJyYW5nZWRDb250ZW50Iiksbj1lPygwLHQuZ2V0KShlLCJsZW5n
dGgiKTowCit0aGlzLl9zZXR1cEFycmFuZ2VkQ29udGVudCgpLHRoaXMuYXJyYW5nZWRDb250ZW50
RGlkQ2hhbmdlKHRoaXMpLHRoaXMuYXJyYW5nZWRDb250ZW50QXJyYXlEaWRDaGFuZ2UodGhpcyww
LHZvaWQgMCxuKX0pLF9zZXR1cEFycmFuZ2VkQ29udGVudDpmdW5jdGlvbigpe3ZhciBlPSgwLHQu
Z2V0KSh0aGlzLCJhcnJhbmdlZENvbnRlbnQiKQorZSYmKDAscy5hZGRBcnJheU9ic2VydmVyKShl
LHRoaXMse3dpbGxDaGFuZ2U6ImFycmFuZ2VkQ29udGVudEFycmF5V2lsbENoYW5nZSIsZGlkQ2hh
bmdlOiJhcnJhbmdlZENvbnRlbnRBcnJheURpZENoYW5nZSJ9KX0sX3RlYXJkb3duQXJyYW5nZWRD
b250ZW50OmZ1bmN0aW9uKCl7dmFyIGU9KDAsdC5nZXQpKHRoaXMsImFycmFuZ2VkQ29udGVudCIp
CitlJiYoMCxzLnJlbW92ZUFycmF5T2JzZXJ2ZXIpKGUsdGhpcyx7d2lsbENoYW5nZToiYXJyYW5n
ZWRDb250ZW50QXJyYXlXaWxsQ2hhbmdlIixkaWRDaGFuZ2U6ImFycmFuZ2VkQ29udGVudEFycmF5
RGlkQ2hhbmdlIn0pfSxhcnJhbmdlZENvbnRlbnRXaWxsQ2hhbmdlOnUsYXJyYW5nZWRDb250ZW50
RGlkQ2hhbmdlOnUsb2JqZWN0QXQ6ZnVuY3Rpb24oZSl7cmV0dXJuKDAsdC5nZXQpKHRoaXMsImNv
bnRlbnQiKSYmdGhpcy5vYmplY3RBdENvbnRlbnQoZSl9LGxlbmd0aDooMCx0LmNvbXB1dGVkKShm
dW5jdGlvbigpe3ZhciBlPSgwLHQuZ2V0KSh0aGlzLCJhcnJhbmdlZENvbnRlbnQiKQorcmV0dXJu
IGU/KDAsdC5nZXQpKGUsImxlbmd0aCIpOjB9KSxfcmVwbGFjZTpmdW5jdGlvbihlLG4scil7dmFy
IGk9KDAsdC5nZXQpKHRoaXMsImNvbnRlbnQiKQorcmV0dXJuIGkmJnRoaXMucmVwbGFjZUNvbnRl
bnQoZSxuLHIpLHRoaXN9LHJlcGxhY2U6ZnVuY3Rpb24oKXtpZigoMCx0LmdldCkodGhpcywiYXJy
YW5nZWRDb250ZW50IikhPT0oMCx0LmdldCkodGhpcywiY29udGVudCIpKXRocm93IG5ldyBhLkVy
cm9yKCJVc2luZyByZXBsYWNlIG9uIGFuIGFycmFuZ2VkIEFycmF5UHJveHkgaXMgbm90IGFsbG93
ZWQuIikKK3RoaXMuX3JlcGxhY2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxfaW5zZXJ0QXQ6ZnVu
Y3Rpb24oZSxuKXtpZihlPigwLHQuZ2V0KSh0aGlzLCJjb250ZW50Lmxlbmd0aCIpKXRocm93IG5l
dyBhLkVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKQorcmV0dXJuIHRoaXMuX3JlcGxhY2UoZSww
LFtuXSksdGhpc30saW5zZXJ0QXQ6ZnVuY3Rpb24oZSxuKXtpZigoMCx0LmdldCkodGhpcywiYXJy
YW5nZWRDb250ZW50Iik9PT0oMCx0LmdldCkodGhpcywiY29udGVudCIpKXJldHVybiB0aGlzLl9p
bnNlcnRBdChlLG4pCit0aHJvdyBuZXcgYS5FcnJvcigiVXNpbmcgaW5zZXJ0QXQgb24gYW4gYXJy
YW5nZWQgQXJyYXlQcm94eSBpcyBub3QgYWxsb3dlZC4iKX0scmVtb3ZlQXQ6ZnVuY3Rpb24oZSxu
KXt2YXIgcixpLG8sdSxjCitpZigibnVtYmVyIj09dHlwZW9mIGUpe2lmKHI9KDAsdC5nZXQpKHRo
aXMsImNvbnRlbnQiKSxpPSgwLHQuZ2V0KSh0aGlzLCJhcnJhbmdlZENvbnRlbnQiKSxvPVtdLGU8
MHx8ZT49KDAsdC5nZXQpKHRoaXMsImxlbmd0aCIpKXRocm93IG5ldyBhLkVycm9yKCJJbmRleCBv
dXQgb2YgcmFuZ2UiKQorZm9yKHZvaWQgMD09PW4mJihuPTEpLHU9ZTt1PGUrbjt1Kyspby5wdXNo
KHIuaW5kZXhPZigoMCxzLm9iamVjdEF0KShpLHUpKSkKK2ZvcihvLnNvcnQoZnVuY3Rpb24oZSx0
KXtyZXR1cm4gdC1lfSksKDAsdC5iZWdpblByb3BlcnR5Q2hhbmdlcykoKSxjPTA7YzxvLmxlbmd0
aDtjKyspdGhpcy5fcmVwbGFjZShvW2NdLDEsbCk7KDAsdC5lbmRQcm9wZXJ0eUNoYW5nZXMpKCl9
cmV0dXJuIHRoaXN9LHB1c2hPYmplY3Q6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2luc2VydEF0
KCgwLHQuZ2V0KSh0aGlzLCJjb250ZW50Lmxlbmd0aCIpLGUpLGV9LHB1c2hPYmplY3RzOmZ1bmN0
aW9uKGUpe2lmKCFvLmRlZmF1bHQuZGV0ZWN0KGUpJiYhKDAsbi5pc0FycmF5KShlKSl0aHJvdyBu
ZXcgVHlwZUVycm9yKCJNdXN0IHBhc3MgRW1iZXIuRW51bWVyYWJsZSB0byBFbWJlci5NdXRhYmxl
QXJyYXkjcHVzaE9iamVjdHMiKQorcmV0dXJuIHRoaXMuX3JlcGxhY2UoKDAsdC5nZXQpKHRoaXMs
Imxlbmd0aCIpLDAsZSksdGhpc30sc2V0T2JqZWN0czpmdW5jdGlvbihlKXtpZigwPT09ZS5sZW5n
dGgpcmV0dXJuIHRoaXMuY2xlYXIoKQordmFyIG49KDAsdC5nZXQpKHRoaXMsImxlbmd0aCIpCity
ZXR1cm4gdGhpcy5fcmVwbGFjZSgwLG4sZSksdGhpc30sdW5zaGlmdE9iamVjdDpmdW5jdGlvbihl
KXtyZXR1cm4gdGhpcy5faW5zZXJ0QXQoMCxlKSxlfSx1bnNoaWZ0T2JqZWN0czpmdW5jdGlvbihl
KXtyZXR1cm4gdGhpcy5fcmVwbGFjZSgwLDAsZSksdGhpc30sc2xpY2U6ZnVuY3Rpb24oKXt2YXIg
ZT10aGlzLnRvQXJyYXkoKQorcmV0dXJuIGUuc2xpY2UuYXBwbHkoZSxhcmd1bWVudHMpfSxhcnJh
bmdlZENvbnRlbnRBcnJheVdpbGxDaGFuZ2U6ZnVuY3Rpb24oZSx0LG4scil7dGhpcy5hcnJheUNv
bnRlbnRXaWxsQ2hhbmdlKHQsbixyKX0sYXJyYW5nZWRDb250ZW50QXJyYXlEaWRDaGFuZ2U6ZnVu
Y3Rpb24oZSx0LG4scil7dGhpcy5hcnJheUNvbnRlbnREaWRDaGFuZ2UodCxuLHIpfSxpbml0OmZ1
bmN0aW9uKCl7dGhpcy5fc3VwZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMuX3NldHVwQ29u
dGVudCgpLHRoaXMuX3NldHVwQXJyYW5nZWRDb250ZW50KCl9LHdpbGxEZXN0cm95OmZ1bmN0aW9u
KCl7dGhpcy5fdGVhcmRvd25BcnJhbmdlZENvbnRlbnQoKSx0aGlzLl90ZWFyZG93bkNvbnRlbnQo
KX19KX0pLGUoImVtYmVyLXJ1bnRpbWUvc3lzdGVtL2NvcmVfb2JqZWN0IixbImV4cG9ydHMiLCJl
bWJlci1iYWJlbCIsImVtYmVyLXV0aWxzIiwiZW1iZXItbWV0YWwiLCJlbWJlci1ydW50aW1lL21p
eGlucy9hY3Rpb25faGFuZGxlciIsImVtYmVyLXJ1bnRpbWUvaW5qZWN0IiwiZW1iZXItZGVidWci
XSxmdW5jdGlvbihlLHQsbixyLGksbyxzKXsidXNlIHN0cmljdCIKK2Z1bmN0aW9uIGEoKXt2YXIg
ZT0hMSx0PXZvaWQgMCxpPXZvaWQgMCxvPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbygpe2V8fG8ucHJv
dG8oKSxhcmd1bWVudHMubGVuZ3RoPjAmJih0PVthcmd1bWVudHNbMF1dKSx0aGlzLl9fZGVmaW5l
Tm9uRW51bWVyYWJsZShuLkdVSURfS0VZX1BST1BFUlRZKQordmFyIGEsdSxsLGMscCxoLG0sZyx5
LHYsYixfLHcsRT0oMCxyLm1ldGEpKHRoaXMpLHg9RS5wcm90bworaWYoRS5wcm90bz10aGlzLGkm
JihFLmZhY3Rvcnk9aSxpPW51bGwpLHQpZm9yKGE9dCx0PW51bGwsdT10aGlzLmNvbmNhdGVuYXRl
ZFByb3BlcnRpZXMsbD10aGlzLm1lcmdlZFByb3BlcnRpZXMsYz0wO2M8YS5sZW5ndGg7YysrKXtp
Zigib2JqZWN0IiE9dHlwZW9mKHA9YVtjXSkmJnZvaWQgMCE9PXApdGhyb3cgbmV3IHMuRXJyb3Io
IkVtYmVyLk9iamVjdC5jcmVhdGUgb25seSBhY2NlcHRzIG9iamVjdHMuIikKK2lmKHApZm9yKGg9
T2JqZWN0LmtleXMocCksbT0wO208aC5sZW5ndGg7bSsrKWc9aFttXSx5PXBbZ10sKDAsci5kZXRl
Y3RCaW5kaW5nKShnKSYmRS53cml0ZUJpbmRpbmdzKGcseSksdj10aGlzW2ddLGI9bnVsbCE9PXYm
JiJvYmplY3QiPT10eXBlb2YgdiYmdi5pc0Rlc2NyaXB0b3I/djp2b2lkIDAsdSYmdS5sZW5ndGg+
MCYmdS5pbmRleE9mKGcpPj0wJiYoXz10aGlzW2ddLHk9Xz8iZnVuY3Rpb24iPT10eXBlb2YgXy5j
b25jYXQ/Xy5jb25jYXQoeSk6KDAsbi5tYWtlQXJyYXkpKF8pLmNvbmNhdCh5KTooMCxuLm1ha2VB
cnJheSkoeSkpLGwmJmwubGVuZ3RoJiZsLmluZGV4T2YoZyk+PTAmJih3PXRoaXNbZ10seT0oMCxu
LmFzc2lnbikoe30sdyx5KSksYj9iLnNldCh0aGlzLGcseSk6ImZ1bmN0aW9uIiE9dHlwZW9mIHRo
aXMuc2V0VW5rbm93blByb3BlcnR5fHxnIGluIHRoaXM/dGhpc1tnXT15OnRoaXMuc2V0VW5rbm93
blByb3BlcnR5KGcseSl9Zih0aGlzLEUpLHRoaXMuaW5pdC5hcHBseSh0aGlzLGFyZ3VtZW50cyks
dGhpc1tkXSgpLEUucHJvdG89eCwoMCxyLmZpbmlzaENoYWlucykoRSksKDAsci5zZW5kRXZlbnQp
KHRoaXMsImluaXQiLHZvaWQgMCx2b2lkIDAsdm9pZCAwLEUpfXJldHVybiBvLndpbGxSZW9wZW49
ZnVuY3Rpb24oKXtlJiYoby5Qcm90b3R5cGVNaXhpbj1yLk1peGluLmNyZWF0ZShvLlByb3RvdHlw
ZU1peGluKSksZT0hMX0sby5faW5pdFByb3BlcnRpZXM9ZnVuY3Rpb24oZSl7dD1lfSxvLl9pbml0
RmFjdG9yeT1mdW5jdGlvbihlKXtpPWV9LG8ucHJvdG89ZnVuY3Rpb24oKXt2YXIgdD1vLnN1cGVy
Y2xhc3MKK3JldHVybiB0JiZ0LnByb3RvKCksZXx8KGU9ITAsby5Qcm90b3R5cGVNaXhpbi5hcHBs
eVBhcnRpYWwoby5wcm90b3R5cGUpKSx0aGlzLnByb3RvdHlwZX0sb30oKQorcmV0dXJuIG8udG9T
dHJpbmc9ci5NaXhpbi5wcm90b3R5cGUudG9TdHJpbmcsb31lLlBPU1RfSU5JVD12b2lkIDAKK3Zh
ciB1LGwsYz0oKDAsdC50YWdnZWRUZW1wbGF0ZUxpdGVyYWxMb29zZSkoWyIuIl0sWyIuIl0pLHIu
cnVuLnNjaGVkdWxlKSxwPXIuTWl4aW4uX2FwcGx5LGY9ci5NaXhpbi5maW5pc2hQYXJ0aWFsLGg9
ci5NaXhpbi5wcm90b3R5cGUucmVvcGVuLGQ9ZS5QT1NUX0lOSVQ9KDAsbi5zeW1ib2wpKCJQT1NU
X0lOSVQiKSxtPWEoKQorbS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJFbWJlci5Db3JlT2Jq
ZWN0In0sbS5Qcm90b3R5cGVNaXhpbj1yLk1peGluLmNyZWF0ZSgodT17cmVvcGVuOmZ1bmN0aW9u
KCl7dmFyIGUsdCxuCitmb3IoZT1hcmd1bWVudHMubGVuZ3RoLHQ9QXJyYXkoZSksbj0wO248ZTtu
KyspdFtuXT1hcmd1bWVudHNbbl0KK3JldHVybiBwKHRoaXMsdCwhMCksdGhpc30saW5pdDpmdW5j
dGlvbigpe319LHVbZF09ZnVuY3Rpb24oKXt9LHUuX19kZWZpbmVOb25FbnVtZXJhYmxlPWZ1bmN0
aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLGUubmFtZSxlLmRlc2NyaXB0b3IpfSx1
LmNvbmNhdGVuYXRlZFByb3BlcnRpZXM9bnVsbCx1Lm1lcmdlZFByb3BlcnRpZXM9bnVsbCx1Lmlz
RGVzdHJveWVkPSgwLHIuZGVzY3JpcHRvcikoe2dldDpmdW5jdGlvbigpe3JldHVybigwLHIubWV0
YSkodGhpcykuaXNTb3VyY2VEZXN0cm95ZWQoKX0sc2V0OmZ1bmN0aW9uKGUpeyJvYmplY3QiPT10
eXBlb2YgZSYmbnVsbCE9PWUmJmUuaXNEZXNjcmlwdG9yfX0pLHUuaXNEZXN0cm95aW5nPSgwLHIu
ZGVzY3JpcHRvcikoe2dldDpmdW5jdGlvbigpe3JldHVybigwLHIubWV0YSkodGhpcykuaXNTb3Vy
Y2VEZXN0cm95aW5nKCl9LHNldDpmdW5jdGlvbihlKXsib2JqZWN0Ij09dHlwZW9mIGUmJm51bGwh
PT1lJiZlLmlzRGVzY3JpcHRvcn19KSx1LmRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgZT0oMCxyLm1l
dGEpKHRoaXMpCitpZighZS5pc1NvdXJjZURlc3Ryb3lpbmcoKSlyZXR1cm4gZS5zZXRTb3VyY2VE
ZXN0cm95aW5nKCksYygiYWN0aW9ucyIsdGhpcyx0aGlzLndpbGxEZXN0cm95KSxjKCJkZXN0cm95
Iix0aGlzLHRoaXMuX3NjaGVkdWxlZERlc3Ryb3ksZSksdGhpc30sdS53aWxsRGVzdHJveT1mdW5j
dGlvbigpe30sdS5fc2NoZWR1bGVkRGVzdHJveT1mdW5jdGlvbihlKXtlLmlzU291cmNlRGVzdHJv
eWVkKCl8fCgoMCxyLmRlc3Ryb3kpKHRoaXMpLGUuc2V0U291cmNlRGVzdHJveWVkKCkpfSx1LmJp
bmQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIHIuQmluZGluZ3x8KHQ9ci5CaW5k
aW5nLmZyb20odCkpLHQudG8oZSkuY29ubmVjdCh0aGlzKSx0fSx1LnRvU3RyaW5nPWZ1bmN0aW9u
KCl7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMudG9TdHJpbmdFeHRlbnNpb24sdD1lPyI6
Iit0aGlzLnRvU3RyaW5nRXh0ZW5zaW9uKCk6IiIKK3JldHVybiI8IisodGhpc1tuLk5BTUVfS0VZ
XXx8KDAsci5tZXRhKSh0aGlzKS5mYWN0b3J5fHx0aGlzLmNvbnN0cnVjdG9yLnRvU3RyaW5nKCkp
KyI6IisoMCxuLmd1aWRGb3IpKHRoaXMpK3QrIj4ifSx1KSksbS5Qcm90b3R5cGVNaXhpbi5vd25l
ckNvbnN0cnVjdG9yPW0sbS5fX3N1cGVyX189bnVsbAordmFyIGc9KGw9e0NsYXNzTWl4aW46ci5S
RVFVSVJFRCxQcm90b3R5cGVNaXhpbjpyLlJFUVVJUkVELGlzQ2xhc3M6ITAsaXNNZXRob2Q6ITF9
LGxbbi5OQU1FX0tFWV09bnVsbCxsW24uR1VJRF9LRVldPW51bGwsbC5leHRlbmQ9ZnVuY3Rpb24o
KXt2YXIgZT1hKCksdD12b2lkIDAKK3JldHVybiBlLkNsYXNzTWl4aW49ci5NaXhpbi5jcmVhdGUo
dGhpcy5DbGFzc01peGluKSxlLlByb3RvdHlwZU1peGluPXIuTWl4aW4uY3JlYXRlKHRoaXMuUHJv
dG90eXBlTWl4aW4pLGUuQ2xhc3NNaXhpbi5vd25lckNvbnN0cnVjdG9yPWUsZS5Qcm90b3R5cGVN
aXhpbi5vd25lckNvbnN0cnVjdG9yPWUsaC5hcHBseShlLlByb3RvdHlwZU1peGluLGFyZ3VtZW50
cyksZS5zdXBlcmNsYXNzPXRoaXMsZS5fX3N1cGVyX189dGhpcy5wcm90b3R5cGUsdD1lLnByb3Rv
dHlwZT1PYmplY3QuY3JlYXRlKHRoaXMucHJvdG90eXBlKSx0LmNvbnN0cnVjdG9yPWUsKDAsbi5n
ZW5lcmF0ZUd1aWQpKHQpLCgwLHIubWV0YSkodCkucHJvdG89dCxlLkNsYXNzTWl4aW4uYXBwbHko
ZSksZX0sbC5jcmVhdGU9ZnVuY3Rpb24oKXt2YXIgZSx0LG4scj10aGlzCitmb3IoZT1hcmd1bWVu
dHMubGVuZ3RoLHQ9QXJyYXkoZSksbj0wO248ZTtuKyspdFtuXT1hcmd1bWVudHNbbl0KK3JldHVy
biB0Lmxlbmd0aD4wJiZ0aGlzLl9pbml0UHJvcGVydGllcyh0KSxuZXcgcn0sbC5yZW9wZW49ZnVu
Y3Rpb24oKXtyZXR1cm4gdGhpcy53aWxsUmVvcGVuKCksaC5hcHBseSh0aGlzLlByb3RvdHlwZU1p
eGluLGFyZ3VtZW50cyksdGhpc30sbC5yZW9wZW5DbGFzcz1mdW5jdGlvbigpe3JldHVybiBoLmFw
cGx5KHRoaXMuQ2xhc3NNaXhpbixhcmd1bWVudHMpLHAodGhpcyxhcmd1bWVudHMsITEpLHRoaXN9
LGwuZGV0ZWN0PWZ1bmN0aW9uKGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXJldHVybiExCitm
b3IoO2U7KXtpZihlPT09dGhpcylyZXR1cm4hMAorZT1lLnN1cGVyY2xhc3N9cmV0dXJuITF9LGwu
ZGV0ZWN0SW5zdGFuY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiB0aGlzfSxsLm1l
dGFGb3JQcm9wZXJ0eT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLnByb3RvKCksbj10W2VdLHI9bnVs
bCE9PW4mJiJvYmplY3QiPT10eXBlb2YgbiYmbi5pc0Rlc2NyaXB0b3I/bjp2b2lkIDAKK3JldHVy
biByLl9tZXRhfHx7fX0sbC5fY29tcHV0ZWRQcm9wZXJ0aWVzPSgwLHIuY29tcHV0ZWQpKGZ1bmN0
aW9uKCl7KDAsci5faGFzQ2FjaGVkQ29tcHV0ZWRQcm9wZXJ0aWVzKSgpCit2YXIgZT10aGlzLnBy
b3RvKCksdD12b2lkIDAsbj1bXQorZm9yKHZhciBpIGluIGUpKHQ9ZVtpXSkmJnQuaXNEZXNjcmlw
dG9yJiZuLnB1c2goe25hbWU6aSxtZXRhOnQuX21ldGF9KQorcmV0dXJuIG59KS5yZWFkT25seSgp
LGwuZWFjaENvbXB1dGVkUHJvcGVydHk9ZnVuY3Rpb24oZSx0KXt2YXIgbixpPXZvaWQgMCxvPXt9
LHM9KDAsci5nZXQpKHRoaXMsIl9jb21wdXRlZFByb3BlcnRpZXMiKQorZm9yKG49MDtuPHMubGVu
Z3RoO24rKylpPXNbbl0sZS5jYWxsKHR8fHRoaXMsaS5uYW1lLGkubWV0YXx8byl9LGwpCitnLl9s
YXp5SW5qZWN0aW9ucz1mdW5jdGlvbigpe3ZhciBlPXt9LHQ9dGhpcy5wcm90bygpLG49dm9pZCAw
LGk9dm9pZCAwCitmb3IobiBpbiB0KShpPXRbbl0paW5zdGFuY2VvZiByLkluamVjdGVkUHJvcGVy
dHkmJihlW25dPWkudHlwZSsiOiIrKGkubmFtZXx8bikpCityZXR1cm4gZX0KK3ZhciB5PXIuTWl4
aW4uY3JlYXRlKGcpCit5Lm93bmVyQ29uc3RydWN0b3I9bSxtLkNsYXNzTWl4aW49eSx5LmFwcGx5
KG0pLGUuZGVmYXVsdD1tfSksZSgiZW1iZXItcnVudGltZS9zeXN0ZW0vbGF6eV9sb2FkIixbImV4
cG9ydHMiLCJlbWJlci1lbnZpcm9ubWVudCJdLGZ1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiCitl
Ll9sb2FkZWQ9dm9pZCAwLGUub25Mb2FkPWZ1bmN0aW9uKGUsdCl7dmFyIGk9cltlXQorbltlXT1u
W2VdfHxbXSxuW2VdLnB1c2godCksaSYmdChpKX0sZS5ydW5Mb2FkSG9va3M9ZnVuY3Rpb24oZSxp
KXtyW2VdPWkKK3ZhciBvLHM9dC5lbnZpcm9ubWVudC53aW5kb3cKK3MmJiJmdW5jdGlvbiI9PXR5
cGVvZiBDdXN0b21FdmVudCYmKG89bmV3IEN1c3RvbUV2ZW50KGUse2RldGFpbDppLG5hbWU6ZX0p
LHMuZGlzcGF0Y2hFdmVudChvKSksbltlXSYmbltlXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVy
biBlKGkpfSl9Cit2YXIgbj10LkVOVi5FTUJFUl9MT0FEX0hPT0tTfHx7fSxyPXt9CitlLl9sb2Fk
ZWQ9cn0pLGUoImVtYmVyLXJ1bnRpbWUvc3lzdGVtL25hbWVzcGFjZSIsWyJleHBvcnRzIiwiZW1i
ZXItdXRpbHMiLCJlbWJlci1tZXRhbCIsImVtYmVyLWVudmlyb25tZW50IiwiZW1iZXItcnVudGlt
ZS9zeXN0ZW0vb2JqZWN0Il0sZnVuY3Rpb24oZSx0LG4scixpKXsidXNlIHN0cmljdCIKK2Z1bmN0
aW9uIG8oZSxuLHIpe3ZhciBpLHM9ZS5sZW5ndGgKK21bZS5qb2luKCIuIildPW4KK2Zvcih2YXIg
YSBpbiBuKWlmKGcuY2FsbChuLGEpKWlmKGk9blthXSxlW3NdPWEsaSYmaS50b1N0cmluZz09PXAm
JiFpW3QuTkFNRV9LRVldKWlbdC5OQU1FX0tFWV09ZS5qb2luKCIuIikKK2Vsc2UgaWYoaSYmaS5p
c05hbWVzcGFjZSl7aWYoclsoMCx0Lmd1aWRGb3IpKGkpXSljb250aW51ZQorclsoMCx0Lmd1aWRG
b3IpKGkpXT0hMCxvKGUsaSxyKX1lLmxlbmd0aD1zfWZ1bmN0aW9uIHMoZSl7cmV0dXJuIGU+PTY1
JiZlPD05MH1mdW5jdGlvbiBhKGUsdCl7dmFyIG4KK3RyeXtyZXR1cm4obj1lW3RdKSYmbi5pc05h
bWVzcGFjZSYmbn1jYXRjaChlKXt9fWZ1bmN0aW9uIHUoKXtpZighZC5QUk9DRVNTRUQpe3ZhciBl
LG4saSxvPXIuY29udGV4dC5sb29rdXAsdT1PYmplY3Qua2V5cyhvKQorZm9yKGU9MDtlPHUubGVu
Z3RoO2UrKyluPXVbZV0scyhuLmNoYXJDb2RlQXQoMCkpJiYoaT1hKG8sbikpJiYoaVt0Lk5BTUVf
S0VZXT1uKX19ZnVuY3Rpb24gbChlKXt2YXIgbj1lLnN1cGVyY2xhc3MKK2lmKG4pcmV0dXJuIG5b
dC5OQU1FX0tFWV0/blt0Lk5BTUVfS0VZXTpsKG4pfWZ1bmN0aW9uIGMoZSl7dmFyIG49dm9pZCAw
CitpZighaCl7aWYoZigpLG49ZVt0Lk5BTUVfS0VZXSlyZXR1cm4gbgorbj1sKGUpLG49bj8iKHN1
YmNsYXNzIG9mICIrbisiKSI6bn1yZXR1cm4gbnx8Iih1bmtub3duIG1peGluKSJ9ZnVuY3Rpb24g
cCgpe3ZhciBlPXRoaXNbdC5OQU1FX0tFWV0KK3JldHVybiBlfHwodGhpc1t0Lk5BTUVfS0VZXT1j
KHRoaXMpKX1mdW5jdGlvbiBmKCl7dmFyIGUsdCxyLGk9IWQuUFJPQ0VTU0VELHM9KDAsbi5oYXNV
bnByb2Nlc3NlZE1peGlucykoKQoraWYoaSYmKHUoKSxkLlBST0NFU1NFRD0hMCksaXx8cyl7Zm9y
KGU9ZC5OQU1FU1BBQ0VTLHQ9dm9pZCAwLHI9MDtyPGUubGVuZ3RoO3IrKyl0PWVbcl0sbyhbdC50
b1N0cmluZygpXSx0LHt9KTsoMCxuLmNsZWFyVW5wcm9jZXNzZWRNaXhpbnMpKCl9fWUuaXNTZWFy
Y2hEaXNhYmxlZD1mdW5jdGlvbigpe3JldHVybiBofSxlLnNldFNlYXJjaERpc2FibGVkPWZ1bmN0
aW9uKGUpe2g9ISFlfQordmFyIGg9ITEsZD1pLmRlZmF1bHQuZXh0ZW5kKHtpc05hbWVzcGFjZToh
MCxpbml0OmZ1bmN0aW9uKCl7ZC5OQU1FU1BBQ0VTLnB1c2godGhpcyksZC5QUk9DRVNTRUQ9ITF9
LHRvU3RyaW5nOmZ1bmN0aW9uKCl7dmFyIGU9KDAsbi5nZXQpKHRoaXMsIm5hbWUiKXx8KDAsbi5n
ZXQpKHRoaXMsIm1vZHVsZVByZWZpeCIpCityZXR1cm4gZXx8KHUoKSx0aGlzW3QuTkFNRV9LRVld
KX0sbmFtZUNsYXNzZXM6ZnVuY3Rpb24oKXtvKFt0aGlzLnRvU3RyaW5nKCldLHRoaXMse30pfSxk
ZXN0cm95OmZ1bmN0aW9uKCl7dmFyIGU9ZC5OQU1FU1BBQ0VTLHQ9dGhpcy50b1N0cmluZygpCit0
JiYoci5jb250ZXh0Lmxvb2t1cFt0XT12b2lkIDAsZGVsZXRlIGQuTkFNRVNQQUNFU19CWV9JRFt0
XSksZS5zcGxpY2UoZS5pbmRleE9mKHRoaXMpLDEpLHRoaXMuX3N1cGVyLmFwcGx5KHRoaXMsYXJn
dW1lbnRzKX19KQorZC5yZW9wZW5DbGFzcyh7TkFNRVNQQUNFUzpbbi5kZWZhdWx0XSxOQU1FU1BB
Q0VTX0JZX0lEOntFbWJlcjpuLmRlZmF1bHR9LFBST0NFU1NFRDohMSxwcm9jZXNzQWxsOmYsYnlO
YW1lOmZ1bmN0aW9uKGUpe3JldHVybiBofHxmKCksbVtlXX19KQordmFyIG09ZC5OQU1FU1BBQ0VT
X0JZX0lELGc9e30uaGFzT3duUHJvcGVydHkKK24uTWl4aW4ucHJvdG90eXBlLnRvU3RyaW5nPXAs
ZS5kZWZhdWx0PWR9KSxlKCJlbWJlci1ydW50aW1lL3N5c3RlbS9uYXRpdmVfYXJyYXkiLFsiZXhw
b3J0cyIsImVtYmVyLW1ldGFsIiwiZW1iZXItZW52aXJvbm1lbnQiLCJlbWJlci1ydW50aW1lL21p
eGlucy9hcnJheSIsImVtYmVyLXJ1bnRpbWUvbWl4aW5zL211dGFibGVfYXJyYXkiLCJlbWJlci1y
dW50aW1lL21peGlucy9vYnNlcnZhYmxlIiwiZW1iZXItcnVudGltZS9taXhpbnMvY29weWFibGUi
LCJlbWJlci1ydW50aW1lL21peGlucy9mcmVlemFibGUiLCJlbWJlci1ydW50aW1lL2NvcHkiXSxm
dW5jdGlvbihlLHQsbixyLGksbyxzLGEsdSl7InVzZSBzdHJpY3QiCitlLk5hdGl2ZUFycmF5PWUu
QT12b2lkIDAKK3ZhciBsLGM9dC5NaXhpbi5jcmVhdGUoaS5kZWZhdWx0LG8uZGVmYXVsdCxzLmRl
ZmF1bHQse2dldDpmdW5jdGlvbihlKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGU/dGhpc1tlXTp0
aGlzLl9zdXBlcihlKX0sb2JqZWN0QXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXNbZV19LHJlcGxh
Y2U6ZnVuY3Rpb24oZSxuLGkpe2lmKHRoaXMuaXNGcm96ZW4pdGhyb3cgYS5GUk9aRU5fRVJST1IK
K3ZhciBvPWk/KDAsdC5nZXQpKGksImxlbmd0aCIpOjAKK3JldHVybigwLHIuYXJyYXlDb250ZW50
V2lsbENoYW5nZSkodGhpcyxlLG4sbyksMD09PW8/dGhpcy5zcGxpY2UoZSxuKTooMCx0LnJlcGxh
Y2UpKHRoaXMsZSxuLGkpLCgwLHIuYXJyYXlDb250ZW50RGlkQ2hhbmdlKSh0aGlzLGUsbixvKSx0
aGlzfSx1bmtub3duUHJvcGVydHk6ZnVuY3Rpb24oZSx0KXt2YXIgbj12b2lkIDAKK3JldHVybiB2
b2lkIDAhPT10JiZ2b2lkIDA9PT1uJiYobj10aGlzW2VdPXQpLG59LGluZGV4T2Y6QXJyYXkucHJv
dG90eXBlLmluZGV4T2YsbGFzdEluZGV4T2Y6QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLGNv
cHk6ZnVuY3Rpb24oZSl7cmV0dXJuIGU/dGhpcy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuKDAsdS5k
ZWZhdWx0KShlLCEwKX0pOnRoaXMuc2xpY2UoKX19KSxwPVsibGVuZ3RoIl0KK2Mua2V5cygpLmZv
ckVhY2goZnVuY3Rpb24oZSl7QXJyYXkucHJvdG90eXBlW2VdJiZwLnB1c2goZSl9KSxlLk5hdGl2
ZUFycmF5PWM9KGw9Yykud2l0aG91dC5hcHBseShsLHApCit2YXIgZj12b2lkIDAKK24uRU5WLkVY
VEVORF9QUk9UT1RZUEVTLkFycmF5PyhjLmFwcGx5KEFycmF5LnByb3RvdHlwZSksZS5BPWY9ZnVu
Y3Rpb24oZSl7cmV0dXJuIGV8fFtdfSk6ZS5BPWY9ZnVuY3Rpb24oZSl7cmV0dXJuIGV8fChlPVtd
KSxyLmRlZmF1bHQuZGV0ZWN0KGUpP2U6Yy5hcHBseShlKX0sdC5kZWZhdWx0LkE9ZixlLkE9Zixl
Lk5hdGl2ZUFycmF5PWMsZS5kZWZhdWx0PWN9KSxlKCJlbWJlci1ydW50aW1lL3N5c3RlbS9vYmpl
Y3QiLFsiZXhwb3J0cyIsImVtYmVyLXV0aWxzIiwiZW1iZXItbWV0YWwiLCJlbWJlci1ydW50aW1l
L3N5c3RlbS9jb3JlX29iamVjdCIsImVtYmVyLXJ1bnRpbWUvbWl4aW5zL29ic2VydmFibGUiLCJl
bWJlci1kZWJ1ZyJdLGZ1bmN0aW9uKGUsdCxuLHIsaSl7InVzZSBzdHJpY3QiCitlLkZyYW1ld29y
a09iamVjdD12b2lkIDAKK3ZhciBvLHM9KDAsdC5zeW1ib2wpKCJPVkVSUklERV9DT05UQUlORVJf
S0VZIiksYT0oMCx0LnN5bWJvbCkoIk9WRVJSSURFX09XTkVSIiksdT1yLmRlZmF1bHQuZXh0ZW5k
KGkuZGVmYXVsdCwobz17X2RlYnVnQ29udGFpbmVyS2V5OigwLG4uZGVzY3JpcHRvcikoe2VudW1l
cmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7aWYodGhpc1tzXSlyZXR1cm4gdGhpc1tzXQordmFyIGU9
KDAsbi5tZXRhKSh0aGlzKSx0PWUuZmFjdG9yeQorcmV0dXJuIHQmJnQuZnVsbE5hbWV9LHNldDpm
dW5jdGlvbihlKXt0aGlzW3NdPWV9fSl9LG9bdC5PV05FUl09KDAsbi5kZXNjcmlwdG9yKSh7ZW51
bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtpZih0aGlzW2FdKXJldHVybiB0aGlzW2FdCit2YXIg
ZT0oMCxuLm1ldGEpKHRoaXMpLHQ9ZS5mYWN0b3J5CityZXR1cm4gdCYmdC5vd25lcn0sc2V0OmZ1
bmN0aW9uKGUpe3RoaXNbYV09ZX19KSxvKSkKK3UudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4i
RW1iZXIuT2JqZWN0In0sZS5GcmFtZXdvcmtPYmplY3Q9dSxlLmRlZmF1bHQ9dX0pLGUoImVtYmVy
LXJ1bnRpbWUvc3lzdGVtL29iamVjdF9wcm94eSIsWyJleHBvcnRzIiwiZW1iZXItcnVudGltZS9z
eXN0ZW0vb2JqZWN0IiwiZW1iZXItcnVudGltZS9taXhpbnMvLXByb3h5Il0sZnVuY3Rpb24oZSx0
LG4peyJ1c2Ugc3RyaWN0IgorZS5kZWZhdWx0PXQuZGVmYXVsdC5leHRlbmQobi5kZWZhdWx0KX0p
LGUoImVtYmVyLXJ1bnRpbWUvc3lzdGVtL3NlcnZpY2UiLFsiZXhwb3J0cyIsImVtYmVyLXJ1bnRp
bWUvc3lzdGVtL29iamVjdCIsImVtYmVyLXJ1bnRpbWUvaW5qZWN0Il0sZnVuY3Rpb24oZSx0LG4p
eyJ1c2Ugc3RyaWN0IjsoMCxuLmNyZWF0ZUluamVjdGlvbkhlbHBlcikoInNlcnZpY2UiKQordmFy
IHI9dC5kZWZhdWx0LmV4dGVuZCgpCityLnJlb3BlbkNsYXNzKHtpc1NlcnZpY2VGYWN0b3J5OiEw
fSksZS5kZWZhdWx0PXJ9KSxlKCJlbWJlci1ydW50aW1lL3N5c3RlbS9zdHJpbmciLFsiZXhwb3J0
cyIsImVtYmVyLW1ldGFsIiwiZW1iZXItZGVidWciLCJlbWJlci11dGlscyIsImVtYmVyLXJ1bnRp
bWUvdXRpbHMiLCJlbWJlci1ydW50aW1lL3N0cmluZ19yZWdpc3RyeSJdLGZ1bmN0aW9uKGUsdCxu
LHIsaSxvKXsidXNlIHN0cmljdCIKK2Z1bmN0aW9uIHMoZSx0KXt2YXIgbixvPXQKK2lmKCEoMCxp
LmlzQXJyYXkpKG8pfHxhcmd1bWVudHMubGVuZ3RoPjIpZm9yKG89bmV3IEFycmF5KGFyZ3VtZW50
cy5sZW5ndGgtMSksbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspb1tuLTFdPWFyZ3VtZW50c1tu
XQordmFyIHM9MAorcmV0dXJuIGUucmVwbGFjZSgvJUAoWzAtOV0rKT8vZyxmdW5jdGlvbihlLHQp
e3JldHVybiB0PXQ/cGFyc2VJbnQodCwxMCktMTpzKyssZT1vW3RdLG51bGw9PT1lPyIobnVsbCki
OnZvaWQgMD09PWU/IiI6KDAsci5pbnNwZWN0KShlKX0pfWZ1bmN0aW9uIGEoKXtyZXR1cm4gcy5h
cHBseSh2b2lkIDAsYXJndW1lbnRzKX1mdW5jdGlvbiB1KGUsdCl7cmV0dXJuKCEoMCxpLmlzQXJy
YXkpKHQpfHxhcmd1bWVudHMubGVuZ3RoPjIpJiYodD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2Fs
bChhcmd1bWVudHMsMSkpLGU9KDAsby5nZXQpKGUpfHxlLHMoZSx0KX1mdW5jdGlvbiBsKGUpe3Jl
dHVybiBlLnNwbGl0KC9ccysvKX1mdW5jdGlvbiBjKGUpe3JldHVybiBOLmdldChlKX1mdW5jdGlv
biBwKGUpe3JldHVybiB5LmdldChlKX1mdW5jdGlvbiBmKGUpe3JldHVybiBfLmdldChlKX1mdW5j
dGlvbiBoKGUpe3JldHVybiBDLmdldChlKX1mdW5jdGlvbiBkKGUpe3JldHVybiBULmdldChlKX1m
dW5jdGlvbiBtKGUpe3JldHVybiBSLmdldChlKX1lLmNhcGl0YWxpemU9ZS51bmRlcnNjb3JlPWUu
Y2xhc3NpZnk9ZS5jYW1lbGl6ZT1lLmRhc2hlcml6ZT1lLmRlY2FtZWxpemU9ZS53PWUubG9jPWUu
Zm10PXZvaWQgMAordmFyIGc9L1sgX10vZyx5PW5ldyB0LkNhY2hlKDFlMyxmdW5jdGlvbihlKXty
ZXR1cm4gYyhlKS5yZXBsYWNlKGcsIi0iKX0pLHY9LyhcLXxcX3xcLnxccykrKC4pPy9nLGI9Lyhe
fFwvKShbQS1aXSkvZyxfPW5ldyB0LkNhY2hlKDFlMyxmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBs
YWNlKHYsZnVuY3Rpb24oZSx0LG4pe3JldHVybiBuP24udG9VcHBlckNhc2UoKToiIn0pLnJlcGxh
Y2UoYixmdW5jdGlvbihlKXtyZXR1cm4gZS50b0xvd2VyQ2FzZSgpfSl9KSx3PS9eKFwtfF8pKygu
KT8vLEU9LyguKShcLXxcX3xcLnxccykrKC4pPy9nLHg9LyhefFwvfFwuKShbYS16XSkvZyxDPW5l
dyB0LkNhY2hlKDFlMyxmdW5jdGlvbihlKXt2YXIgdCxuPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4g
bj8iXyIrbi50b1VwcGVyQ2FzZSgpOiIifSxyPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiB0Kyhy
P3IudG9VcHBlckNhc2UoKToiIil9LGk9ZS5zcGxpdCgiLyIpCitmb3IodD0wO3Q8aS5sZW5ndGg7
dCsrKWlbdF09aVt0XS5yZXBsYWNlKHcsbikucmVwbGFjZShFLHIpCityZXR1cm4gaS5qb2luKCIv
IikucmVwbGFjZSh4LGZ1bmN0aW9uKGUpe3JldHVybiBlLnRvVXBwZXJDYXNlKCl9KX0pLE89Lyhb
YS16XGRdKShbQS1aXSspL2csQT0vXC18XHMrL2csVD1uZXcgdC5DYWNoZSgxZTMsZnVuY3Rpb24o
ZSl7cmV0dXJuIGUucmVwbGFjZShPLCIkMV8kMiIpLnJlcGxhY2UoQSwiXyIpLnRvTG93ZXJDYXNl
KCl9KSxTPS8oXnxcLykoW2Etel0pL2csUj1uZXcgdC5DYWNoZSgxZTMsZnVuY3Rpb24oZSl7cmV0
dXJuIGUucmVwbGFjZShTLGZ1bmN0aW9uKGUpe3JldHVybiBlLnRvVXBwZXJDYXNlKCl9KX0pLGs9
LyhbYS16XGRdKShbQS1aXSkvZyxOPW5ldyB0LkNhY2hlKDFlMyxmdW5jdGlvbihlKXtyZXR1cm4g
ZS5yZXBsYWNlKGssIiQxXyQyIikudG9Mb3dlckNhc2UoKX0pCitlLmRlZmF1bHQ9e2ZtdDphLGxv
Yzp1LHc6bCxkZWNhbWVsaXplOmMsZGFzaGVyaXplOnAsY2FtZWxpemU6ZixjbGFzc2lmeTpoLHVu
ZGVyc2NvcmU6ZCxjYXBpdGFsaXplOm19LGUuZm10PWEsZS5sb2M9dSxlLnc9bCxlLmRlY2FtZWxp
emU9YyxlLmRhc2hlcml6ZT1wLGUuY2FtZWxpemU9ZixlLmNsYXNzaWZ5PWgsZS51bmRlcnNjb3Jl
PWQsZS5jYXBpdGFsaXplPW19KSxlKCJlbWJlci1ydW50aW1lL3V0aWxzIixbImV4cG9ydHMiLCJl
bWJlci1ydW50aW1lL21peGlucy9hcnJheSIsImVtYmVyLXJ1bnRpbWUvc3lzdGVtL29iamVjdCJd
LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCIKK2Z1bmN0aW9uIHIoZSl7aWYobnVsbD09PWUp
cmV0dXJuIm51bGwiCitpZih2b2lkIDA9PT1lKXJldHVybiJ1bmRlZmluZWQiCit2YXIgdD1pW28u
Y2FsbChlKV18fCJvYmplY3QiCityZXR1cm4iZnVuY3Rpb24iPT09dD9uLmRlZmF1bHQuZGV0ZWN0
KGUpJiYodD0iY2xhc3MiKToib2JqZWN0Ij09PXQmJihlIGluc3RhbmNlb2YgRXJyb3I/dD0iZXJy
b3IiOmUgaW5zdGFuY2VvZiBuLmRlZmF1bHQ/dD0iaW5zdGFuY2UiOmUgaW5zdGFuY2VvZiBEYXRl
JiYodD0iZGF0ZSIpKSx0fWUuaXNBcnJheT1mdW5jdGlvbihlKXtpZighZXx8ZS5zZXRJbnRlcnZh
bClyZXR1cm4hMQoraWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4hMAoraWYodC5kZWZhdWx0LmRl
dGVjdChlKSlyZXR1cm4hMAordmFyIG49cihlKQoraWYoImFycmF5Ij09PW4pcmV0dXJuITAKK3Zh
ciBpPWUubGVuZ3RoCityZXR1cm4ibnVtYmVyIj09dHlwZW9mIGkmJmk9PT1pJiYib2JqZWN0Ij09
PW59LGUudHlwZU9mPXIKK3ZhciBpPXsiW29iamVjdCBCb29sZWFuXSI6ImJvb2xlYW4iLCJbb2Jq
ZWN0IE51bWJlcl0iOiJudW1iZXIiLCJbb2JqZWN0IFN0cmluZ10iOiJzdHJpbmciLCJbb2JqZWN0
IEZ1bmN0aW9uXSI6ImZ1bmN0aW9uIiwiW29iamVjdCBBcnJheV0iOiJhcnJheSIsIltvYmplY3Qg
RGF0ZV0iOiJkYXRlIiwiW29iamVjdCBSZWdFeHBdIjoicmVnZXhwIiwiW29iamVjdCBPYmplY3Rd
Ijoib2JqZWN0IiwiW29iamVjdCBGaWxlTGlzdF0iOiJmaWxlbGlzdCJ9LG89T2JqZWN0LnByb3Rv
dHlwZS50b1N0cmluZ30pLGUoImVtYmVyLXV0aWxzIixbImV4cG9ydHMiXSxmdW5jdGlvbihlKXsi
dXNlIHN0cmljdCIKK2Z1bmN0aW9uIHQoZSl7dmFyIHQ9e30KK3RbZV09MQorZm9yKHZhciBuIGlu
IHQpaWYobj09PWUpcmV0dXJuIG4KK3JldHVybiBlfWZ1bmN0aW9uIG4oKXtyZXR1cm4rK2Z9ZnVu
Y3Rpb24gcihlKXtyZXR1cm4gdCgiX18iK2UrIl9fIFtpZD0iKyhtK01hdGguZmxvb3IoTWF0aC5y
YW5kb20oKSpuZXcgRGF0ZSkpKyJdIil9ZnVuY3Rpb24gaShlKXt2YXIgdCxuLHIsaSxvCitmb3Io
dD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspaWYobj1hcmd1bWVudHNbdF0pZm9yKHI9T2JqZWN0
LmtleXMobiksaT0wO2k8ci5sZW5ndGg7aSsrKW89cltpXSxlW29dPW5bb10KK3JldHVybiBlfWZ1
bmN0aW9uIG8oKXt9ZnVuY3Rpb24gcyhlKXtyZXR1cm4gdm9pZCAwPT09ZS5fX2hhc1N1cGVyJiYo
ZS5fX2hhc1N1cGVyPUUoZSkpLGUuX19oYXNTdXBlcn1mdW5jdGlvbiBhKGUsdCl7ZnVuY3Rpb24g
bigpe3ZhciBuPXRoaXMuX3N1cGVyCit0aGlzLl9zdXBlcj10Cit2YXIgcj1lLmFwcGx5KHRoaXMs
YXJndW1lbnRzKQorcmV0dXJuIHRoaXMuX3N1cGVyPW4scn1yZXR1cm4gbi53cmFwcGVkRnVuY3Rp
b249ZSxuLl9fZW1iZXJfb2JzZXJ2ZXNfXz1lLl9fZW1iZXJfb2JzZXJ2ZXNfXyxuLl9fZW1iZXJf
b2JzZXJ2ZXNCZWZvcmVfXz1lLl9fZW1iZXJfb2JzZXJ2ZXNCZWZvcmVfXyxuLl9fZW1iZXJfbGlz
dGVuc19fPWUuX19lbWJlcl9saXN0ZW5zX18sbn1mdW5jdGlvbiB1KGUsdCxuKXt2YXIgcj1uJiZu
Lmxlbmd0aAoraWYoIW58fCFyKXJldHVybiBlW3RdKCkKK3N3aXRjaChyKXtjYXNlIDE6cmV0dXJu
IGVbdF0oblswXSkKK2Nhc2UgMjpyZXR1cm4gZVt0XShuWzBdLG5bMV0pCitjYXNlIDM6cmV0dXJu
IGVbdF0oblswXSxuWzFdLG5bMl0pCitjYXNlIDQ6cmV0dXJuIGVbdF0oblswXSxuWzFdLG5bMl0s
blszXSkKK2Nhc2UgNTpyZXR1cm4gZVt0XShuWzBdLG5bMV0sblsyXSxuWzNdLG5bNF0pCitkZWZh
dWx0OnJldHVybiBlW3RdLmFwcGx5KGUsbil9fWZ1bmN0aW9uIGwoZSx0KXtyZXR1cm4hKCFlfHwi
ZnVuY3Rpb24iIT10eXBlb2YgZVt0XSl9ZnVuY3Rpb24gYyhlKXtyZXR1cm4gbnVsbD09PWV8fHZv
aWQgMD09PWV9ZnVuY3Rpb24gcChlKXt2YXIgdCxuLHIKK2lmKCJzdHJpbmciPT10eXBlb2YgZSly
ZXR1cm4gZQoraWYoQXJyYXkuaXNBcnJheShlKSl7Zm9yKHQ9ZS5sZW5ndGgsbj0iIixyPTA7cjx0
O3IrKylyPjAmJihuKz0iLCIpLGMoZVtyXSl8fChuKz1wKGVbcl0pKQorcmV0dXJuIG59cmV0dXJu
IG51bGwhPWUmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLnRvU3RyaW5nP2UudG9TdHJpbmcoKTpBLmNh
bGwoZSl9dmFyIGY9MCxoPVtdLGQ9e30sbT10KCJfX2VtYmVyIisgK25ldyBEYXRlKSxnPXt3cml0
YWJsZTohMCxjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx2YWx1ZTpudWxsfSx5PXtuYW1l
Om0sZGVzY3JpcHRvcjp7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLGVudW1lcmFibGU6ITEs
dmFsdWU6bnVsbH19LHY9cigiT1dORVIiKSxiPU9iamVjdC5hc3NpZ258fGksXz0vXC4oX3N1cGVy
fGNhbGxcKHRoaXN8YXBwbHlcKHRoaXMpLyx3PUZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZyxF
PWZ1bmN0aW9uKCl7cmV0dXJuIHcuY2FsbChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkuaW5kZXhP
ZigicmV0dXJuIHRoaXMiKT4tMT9mdW5jdGlvbihlKXtyZXR1cm4gXy50ZXN0KHcuY2FsbChlKSl9
OmZ1bmN0aW9uKCl7cmV0dXJuITB9fSgpCitvLl9faGFzU3VwZXI9ITEKK3ZhciB4PU9iamVjdC5w
cm90b3R5cGUudG9TdHJpbmcsQz1BcnJheS5pc0FycmF5LE89cigiTkFNRV9LRVkiKSxBPU9iamVj
dC5wcm90b3R5cGUudG9TdHJpbmcsVD1mdW5jdGlvbigpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBX
ZWFrTWFwKXJldHVybiExCit2YXIgZT1uZXcgV2Vha01hcAorcmV0dXJuIltvYmplY3QgV2Vha01h
cF0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpfSgpLFM9ImZ1bmN0aW9uIj09
dHlwZW9mIFByb3h5CitlLnN5bWJvbD1yLGUuZ2V0T3duZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIGVb
dl19LGUuc2V0T3duZXI9ZnVuY3Rpb24oZSx0KXtlW3ZdPXR9LGUuT1dORVI9dixlLmFzc2lnbj1i
LGUuYXNzaWduUG9seWZpbGw9aSxlLmRpY3Rpb25hcnk9ZnVuY3Rpb24oZSl7dmFyIHQ9T2JqZWN0
LmNyZWF0ZShlKQorcmV0dXJuIHQuX2RpY3Q9bnVsbCxkZWxldGUgdC5fZGljdCx0fSxlLnV1aWQ9
bixlLkdVSURfS0VZPW0sZS5HVUlEX0RFU0M9ZyxlLkdVSURfS0VZX1BST1BFUlRZPXksZS5nZW5l
cmF0ZUd1aWQ9ZnVuY3Rpb24oZSx0KXt0fHwodD0iZW1iZXIiKQordmFyIHI9dCtuKCkKK3JldHVy
biBlJiYobnVsbD09PWVbbV0/ZVttXT1yOihnLnZhbHVlPXIsZS5fX2RlZmluZU5vbkVudW1lcmFi
bGU/ZS5fX2RlZmluZU5vbkVudW1lcmFibGUoeSk6T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbSxn
KSkpLHJ9LGUuZ3VpZEZvcj1mdW5jdGlvbihlKXt2YXIgdD10eXBlb2YgZQoraWYoKCJvYmplY3Qi
PT09dCYmbnVsbCE9PWV8fCJmdW5jdGlvbiI9PT10KSYmZVttXSlyZXR1cm4gZVttXQoraWYodm9p
ZCAwPT09ZSlyZXR1cm4iKHVuZGVmaW5lZCkiCitpZihudWxsPT09ZSlyZXR1cm4iKG51bGwpIgor
dmFyIHI9dm9pZCAwCitzd2l0Y2godCl7Y2FzZSJudW1iZXIiOnJldHVybiByPWhbZV0scnx8KHI9
aFtlXT0ibnUiK2UpLHIKK2Nhc2Uic3RyaW5nIjpyZXR1cm4gcj1kW2VdLHJ8fChyPWRbZV09InN0
IituKCkpLHIKK2Nhc2UiYm9vbGVhbiI6cmV0dXJuIGU/Iih0cnVlKSI6IihmYWxzZSkiCitkZWZh
dWx0OnJldHVybiBlPT09T2JqZWN0PyIoT2JqZWN0KSI6ZT09PUFycmF5PyIoQXJyYXkpIjoocj0i
ZW1iZXIiK24oKSxudWxsPT09ZVttXT9lW21dPXI6KGcudmFsdWU9cixlLl9fZGVmaW5lTm9uRW51
bWVyYWJsZT9lLl9fZGVmaW5lTm9uRW51bWVyYWJsZSh5KTpPYmplY3QuZGVmaW5lUHJvcGVydHko
ZSxtLGcpKSxyKX19LGUuaW50ZXJuPXQsZS5jaGVja0hhc1N1cGVyPUUsZS5ST09UPW8sZS53cmFw
PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHMoZSk/IXQud3JhcHBlZEZ1bmN0aW9uJiZzKHQpP2EoZSxh
KHQsbykpOmEoZSx0KTplfSxlLmluc3BlY3Q9ZnVuY3Rpb24oZSl7aWYobnVsbD09PWUpcmV0dXJu
Im51bGwiCitpZih2b2lkIDA9PT1lKXJldHVybiJ1bmRlZmluZWQiCitpZihBcnJheS5pc0FycmF5
KGUpKXJldHVybiJbIitlKyJdIgordmFyIHQ9dHlwZW9mIGUKK2lmKCJvYmplY3QiIT09dCYmInN5
bWJvbCIhPT10KXJldHVybiIiK2UKK2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBlLnRvU3RyaW5nJiZl
LnRvU3RyaW5nIT09eClyZXR1cm4gZS50b1N0cmluZygpCit2YXIgbj12b2lkIDAscj1bXQorZm9y
KHZhciBpIGluIGUpaWYoZS5oYXNPd25Qcm9wZXJ0eShpKSl7aWYoInRvU3RyaW5nIj09PShuPWVb
aV0pKWNvbnRpbnVlCisiZnVuY3Rpb24iPT10eXBlb2YgbiYmKG49ImZ1bmN0aW9uKCkgeyAuLi4g
fSIpLG4mJiJmdW5jdGlvbiIhPXR5cGVvZiBuLnRvU3RyaW5nP3IucHVzaChpKyI6ICIreC5jYWxs
KG4pKTpyLnB1c2goaSsiOiAiK24pfXJldHVybiJ7IityLmpvaW4oIiwgIikrIn0ifSxlLmxvb2t1
cERlc2NyaXB0b3I9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4scj1lO3I7KXtpZihuPU9iamVjdC5n
ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iocix0KSlyZXR1cm4gbgorcj1PYmplY3QuZ2V0UHJvdG90
eXBlT2Yocil9cmV0dXJuIG51bGx9LGUuY2FuSW52b2tlPWwsZS50cnlJbnZva2U9ZnVuY3Rpb24o
ZSx0LG4pe2lmKGwoZSx0KSlyZXR1cm4gbj91KGUsdCxuKTp1KGUsdCl9LGUubWFrZUFycmF5PWZ1
bmN0aW9uKGUpe3JldHVybiBudWxsPT09ZXx8dm9pZCAwPT09ZT9bXTpDKGUpP2U6W2VdfSxlLmFw
cGx5U3RyPXUsZS5OQU1FX0tFWT1PLGUudG9TdHJpbmc9cCxlLkhBU19OQVRJVkVfV0VBS01BUD1U
LGUuSEFTX05BVElWRV9QUk9YWT1TfSksZSgiZW1iZXItdmlld3MvY29tcGF0L2F0dHJzIixbImV4
cG9ydHMiLCJlbWJlci11dGlscyJdLGZ1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiCitlLk1VVEFC
TEVfQ0VMTD12b2lkIDAsZS5NVVRBQkxFX0NFTEw9KDAsdC5zeW1ib2wpKCJNVVRBQkxFX0NFTEwi
KX0pCitlKCJlbWJlci12aWV3cy9jb21wYXQvZmFsbGJhY2stdmlldy1yZWdpc3RyeSIsWyJleHBv
cnRzIiwiZW1iZXItdXRpbHMiXSxmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0IgorZS5kZWZhdWx0
PSgwLHQuZGljdGlvbmFyeSkobnVsbCl9KSxlKCJlbWJlci12aWV3cy9jb21wb25lbnRfbG9va3Vw
IixbImV4cG9ydHMiLCJlbWJlci1kZWJ1ZyIsImVtYmVyLXJ1bnRpbWUiXSxmdW5jdGlvbihlLHQs
bil7InVzZSBzdHJpY3QiCitlLmRlZmF1bHQ9bi5PYmplY3QuZXh0ZW5kKHtjb21wb25lbnRGb3I6
ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0LmZhY3RvcnlGb3IoImNvbXBvbmVudDoiK2Usbil9LGxh
eW91dEZvcjpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHQubG9va3VwKCJ0ZW1wbGF0ZTpjb21wb25l
bnRzLyIrZSxuKX19KX0pLGUoImVtYmVyLXZpZXdzL2luZGV4IixbImV4cG9ydHMiLCJlbWJlci12
aWV3cy9zeXN0ZW0vanF1ZXJ5IiwiZW1iZXItdmlld3Mvc3lzdGVtL3V0aWxzIiwiZW1iZXItdmll
d3Mvc3lzdGVtL2V2ZW50X2Rpc3BhdGNoZXIiLCJlbWJlci12aWV3cy9jb21wb25lbnRfbG9va3Vw
IiwiZW1iZXItdmlld3MvbWl4aW5zL3RleHRfc3VwcG9ydCIsImVtYmVyLXZpZXdzL3ZpZXdzL2Nv
cmVfdmlldyIsImVtYmVyLXZpZXdzL21peGlucy9jbGFzc19uYW1lc19zdXBwb3J0IiwiZW1iZXIt
dmlld3MvbWl4aW5zL2NoaWxkX3ZpZXdzX3N1cHBvcnQiLCJlbWJlci12aWV3cy9taXhpbnMvdmll
d19zdGF0ZV9zdXBwb3J0IiwiZW1iZXItdmlld3MvbWl4aW5zL3ZpZXdfc3VwcG9ydCIsImVtYmVy
LXZpZXdzL21peGlucy9hY3Rpb25fc3VwcG9ydCIsImVtYmVyLXZpZXdzL2NvbXBhdC9hdHRycyIs
ImVtYmVyLXZpZXdzL3N5c3RlbS9sb29rdXBfcGFydGlhbCIsImVtYmVyLXZpZXdzL3V0aWxzL2xv
b2t1cC1jb21wb25lbnQiLCJlbWJlci12aWV3cy9zeXN0ZW0vYWN0aW9uX21hbmFnZXIiLCJlbWJl
ci12aWV3cy9jb21wYXQvZmFsbGJhY2stdmlldy1yZWdpc3RyeSIsImVtYmVyLXZpZXdzL3N5c3Rl
bS9leHQiXSxmdW5jdGlvbihlLHQsbixyLGksbyxzLGEsdSxsLGMscCxmLGgsZCxtLGcpeyJ1c2Ug
c3RyaWN0IgorZS5mYWxsYmFja1ZpZXdSZWdpc3RyeT1lLkFjdGlvbk1hbmFnZXI9ZS5sb29rdXBD
b21wb25lbnQ9ZS5oYXNQYXJ0aWFsPWUubG9va3VwUGFydGlhbD1lLk1VVEFCTEVfQ0VMTD1lLkFj
dGlvblN1cHBvcnQ9ZS5kaXNwYXRjaExpZmVDeWNsZUhvb2s9ZS5WaWV3TWl4aW49ZS5WaWV3U3Rh
dGVTdXBwb3J0PWUuQ2hpbGRWaWV3c1N1cHBvcnQ9ZS5DbGFzc05hbWVzU3VwcG9ydD1lLkNvcmVW
aWV3PWUuVGV4dFN1cHBvcnQ9ZS5Db21wb25lbnRMb29rdXA9ZS5FdmVudERpc3BhdGNoZXI9ZS5j
b25zdHJ1Y3RTdHlsZURlcHJlY2F0aW9uTWVzc2FnZT1lLnNldFZpZXdFbGVtZW50PWUuZ2V0Vmll
d0VsZW1lbnQ9ZS5nZXRWaWV3SWQ9ZS5nZXRDaGlsZFZpZXdzPWUuZ2V0Um9vdFZpZXdzPWUuZ2V0
Vmlld0JvdW5kaW5nQ2xpZW50UmVjdD1lLmdldFZpZXdDbGllbnRSZWN0cz1lLmdldFZpZXdCb3Vu
ZHM9ZS5pc1NpbXBsZUNsaWNrPWUualF1ZXJ5PXZvaWQgMCxPYmplY3QuZGVmaW5lUHJvcGVydHko
ZSwialF1ZXJ5Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdC5kZWZhdWx0
fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJpc1NpbXBsZUNsaWNrIix7ZW51bWVyYWJsZToh
MCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbi5pc1NpbXBsZUNsaWNrfX0pLE9iamVjdC5kZWZpbmVQ
cm9wZXJ0eShlLCJnZXRWaWV3Qm91bmRzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXty
ZXR1cm4gbi5nZXRWaWV3Qm91bmRzfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJnZXRWaWV3
Q2xpZW50UmVjdHMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBuLmdldFZp
ZXdDbGllbnRSZWN0c319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiZ2V0Vmlld0JvdW5kaW5n
Q2xpZW50UmVjdCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG4uZ2V0Vmll
d0JvdW5kaW5nQ2xpZW50UmVjdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiZ2V0Um9vdFZp
ZXdzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbi5nZXRSb290Vmlld3N9
fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImdldENoaWxkVmlld3MiLHtlbnVtZXJhYmxlOiEw
LGdldDpmdW5jdGlvbigpe3JldHVybiBuLmdldENoaWxkVmlld3N9fSksT2JqZWN0LmRlZmluZVBy
b3BlcnR5KGUsImdldFZpZXdJZCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJu
IG4uZ2V0Vmlld0lkfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJnZXRWaWV3RWxlbWVudCIs
e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG4uZ2V0Vmlld0VsZW1lbnR9fSks
T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInNldFZpZXdFbGVtZW50Iix7ZW51bWVyYWJsZTohMCxn
ZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbi5zZXRWaWV3RWxlbWVudH19KSxPYmplY3QuZGVmaW5lUHJv
cGVydHkoZSwiY29uc3RydWN0U3R5bGVEZXByZWNhdGlvbk1lc3NhZ2UiLHtlbnVtZXJhYmxlOiEw
LGdldDpmdW5jdGlvbigpe3JldHVybiBuLmNvbnN0cnVjdFN0eWxlRGVwcmVjYXRpb25NZXNzYWdl
fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJFdmVudERpc3BhdGNoZXIiLHtlbnVtZXJhYmxl
OiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLmRlZmF1bHR9fSksT2JqZWN0LmRlZmluZVByb3Bl
cnR5KGUsIkNvbXBvbmVudExvb2t1cCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0
dXJuIGkuZGVmYXVsdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiVGV4dFN1cHBvcnQiLHtl
bnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvLmRlZmF1bHR9fSksT2JqZWN0LmRl
ZmluZVByb3BlcnR5KGUsIkNvcmVWaWV3Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXty
ZXR1cm4gcy5kZWZhdWx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJDbGFzc05hbWVzU3Vw
cG9ydCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGEuZGVmYXVsdH19KSxP
YmplY3QuZGVmaW5lUHJvcGVydHkoZSwiQ2hpbGRWaWV3c1N1cHBvcnQiLHtlbnVtZXJhYmxlOiEw
LGdldDpmdW5jdGlvbigpe3JldHVybiB1LmRlZmF1bHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5
KGUsIlZpZXdTdGF0ZVN1cHBvcnQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVy
biBsLmRlZmF1bHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIlZpZXdNaXhpbiIse2VudW1l
cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGMuZGVmYXVsdH19KSxPYmplY3QuZGVmaW5l
UHJvcGVydHkoZSwiZGlzcGF0Y2hMaWZlQ3ljbGVIb29rIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVu
Y3Rpb24oKXtyZXR1cm4gYy5kaXNwYXRjaExpZmVDeWNsZUhvb2t9fSksT2JqZWN0LmRlZmluZVBy
b3BlcnR5KGUsIkFjdGlvblN1cHBvcnQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3Jl
dHVybiBwLmRlZmF1bHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIk1VVEFCTEVfQ0VMTCIs
e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGYuTVVUQUJMRV9DRUxMfX0pLE9i
amVjdC5kZWZpbmVQcm9wZXJ0eShlLCJsb29rdXBQYXJ0aWFsIix7ZW51bWVyYWJsZTohMCxnZXQ6
ZnVuY3Rpb24oKXtyZXR1cm4gaC5kZWZhdWx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJo
YXNQYXJ0aWFsIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaC5oYXNQYXJ0
aWFsfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJsb29rdXBDb21wb25lbnQiLHtlbnVtZXJh
YmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBkLmRlZmF1bHR9fSksT2JqZWN0LmRlZmluZVBy
b3BlcnR5KGUsIkFjdGlvbk1hbmFnZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3Jl
dHVybiBtLmRlZmF1bHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImZhbGxiYWNrVmlld1Jl
Z2lzdHJ5Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5kZWZhdWx0fX0p
fSksZSgiZW1iZXItdmlld3MvbWl4aW5zL2FjdGlvbl9zdXBwb3J0IixbImV4cG9ydHMiLCJlbWJl
ci11dGlscyIsImVtYmVyLW1ldGFsIiwiZW1iZXItZGVidWciLCJlbWJlci12aWV3cy9jb21wYXQv
YXR0cnMiXSxmdW5jdGlvbihlLHQsbixyLGkpeyJ1c2Ugc3RyaWN0IgorZnVuY3Rpb24gbyhlLHQp
e3JldHVybiB0JiZ0W2kuTVVUQUJMRV9DRUxMXSYmKHQ9dC52YWx1ZSksdH1lLmRlZmF1bHQ9bi5N
aXhpbi5jcmVhdGUoe3NlbmRBY3Rpb246ZnVuY3Rpb24oZSl7Zm9yKHQ9YXJndW1lbnRzLmxlbmd0
aCxyPUFycmF5KHQ+MT90LTE6MCksaT0xO2k8dDtpKyspcltpLTFdPWFyZ3VtZW50c1tpXQordmFy
IHQscixpLHM9dm9pZCAwCit2b2lkIDA9PT1lJiYoZT0iYWN0aW9uIikscz0oMCxuLmdldCkodGhp
cywiYXR0cnMuIitlKXx8KDAsbi5nZXQpKHRoaXMsZSksdm9pZCAwIT09KHM9byh0aGlzLHMpKSYm
KCJmdW5jdGlvbiI9PXR5cGVvZiBzP3MuYXBwbHkodm9pZCAwLHIpOnRoaXMudHJpZ2dlckFjdGlv
bih7YWN0aW9uOnMsYWN0aW9uQ29udGV4dDpyfSkpfSxzZW5kOmZ1bmN0aW9uKGUpe2Zvcih0PWFy
Z3VtZW50cy5sZW5ndGgscj1BcnJheSh0PjE/dC0xOjApLGk9MTtpPHQ7aSsrKXJbaS0xXT1hcmd1
bWVudHNbaV0KK3ZhciB0LHIsaSxvPXRoaXMuYWN0aW9ucyYmdGhpcy5hY3Rpb25zW2VdCitpZigh
b3x8ITA9PT1vLmFwcGx5KHRoaXMscikpe3ZhciBzPSgwLG4uZ2V0KSh0aGlzLCJ0YXJnZXQiKQor
cyYmcy5zZW5kLmFwcGx5KHMsYXJndW1lbnRzKX19fSl9KSxlKCJlbWJlci12aWV3cy9taXhpbnMv
Y2hpbGRfdmlld3Nfc3VwcG9ydCIsWyJleHBvcnRzIiwiZW1iZXItdXRpbHMiLCJlbWJlci1tZXRh
bCIsImVtYmVyLXZpZXdzL3N5c3RlbS91dGlscyJdLGZ1bmN0aW9uKGUsdCxuLHIpeyJ1c2Ugc3Ry
aWN0IgorZS5kZWZhdWx0PW4uTWl4aW4uY3JlYXRlKHtpbml0OmZ1bmN0aW9uKCl7dGhpcy5fc3Vw
ZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpLCgwLHIuaW5pdENoaWxkVmlld3MpKHRoaXMpfSxjaGls
ZFZpZXdzOigwLG4uZGVzY3JpcHRvcikoe2NvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiExLGdl
dDpmdW5jdGlvbigpe3JldHVybigwLHIuZ2V0Q2hpbGRWaWV3cykodGhpcyl9fSksYXBwZW5kQ2hp
bGQ6ZnVuY3Rpb24oZSl7dGhpcy5saW5rQ2hpbGQoZSksKDAsci5hZGRDaGlsZFZpZXcpKHRoaXMs
ZSl9LGxpbmtDaGlsZDpmdW5jdGlvbihlKXsoMCx0LmdldE93bmVyKShlKXx8KDAsdC5zZXRPd25l
cikoZSwoMCx0LmdldE93bmVyKSh0aGlzKSl9fSl9KSxlKCJlbWJlci12aWV3cy9taXhpbnMvY2xh
c3NfbmFtZXNfc3VwcG9ydCIsWyJleHBvcnRzIiwiZW1iZXItbWV0YWwiLCJlbWJlci1kZWJ1ZyJd
LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCIKK3ZhciByPU9iamVjdC5mcmVlemUoW10pCitl
LmRlZmF1bHQ9dC5NaXhpbi5jcmVhdGUoe2NvbmNhdGVuYXRlZFByb3BlcnRpZXM6WyJjbGFzc05h
bWVzIiwiY2xhc3NOYW1lQmluZGluZ3MiXSxpbml0OmZ1bmN0aW9uKCl7dGhpcy5fc3VwZXIuYXBw
bHkodGhpcyxhcmd1bWVudHMpfSxjbGFzc05hbWVzOnIsY2xhc3NOYW1lQmluZGluZ3M6cn0pfSks
ZSgiZW1iZXItdmlld3MvbWl4aW5zL3RleHRfc3VwcG9ydCIsWyJleHBvcnRzIiwiZW1iZXItbWV0
YWwiLCJlbWJlci1ydW50aW1lIl0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IgorZnVuY3Rp
b24gcihlLG4scil7dmFyIGk9KDAsdC5nZXQpKG4sImF0dHJzLiIrZSl8fCgwLHQuZ2V0KShuLGUp
LG89KDAsdC5nZXQpKG4sIm9uRXZlbnQiKSxzPSgwLHQuZ2V0KShuLCJ2YWx1ZSIpOyhvPT09ZXx8
ImtleVByZXNzIj09PW8mJiJrZXktcHJlc3MiPT09ZSkmJm4uc2VuZEFjdGlvbigiYWN0aW9uIixz
KSxuLnNlbmRBY3Rpb24oZSxzKSwoaXx8bz09PWUpJiYoKDAsdC5nZXQpKG4sImJ1YmJsZXMiKXx8
ci5zdG9wUHJvcGFnYXRpb24oKSl9dmFyIGk9ezEzOiJpbnNlcnROZXdsaW5lIiwyNzoiY2FuY2Vs
In0KK2UuZGVmYXVsdD10Lk1peGluLmNyZWF0ZShuLlRhcmdldEFjdGlvblN1cHBvcnQse3ZhbHVl
OiIiLGF0dHJpYnV0ZUJpbmRpbmdzOlsiYXV0b2NhcGl0YWxpemUiLCJhdXRvY29ycmVjdCIsImF1
dG9mb2N1cyIsImRpc2FibGVkIiwiZm9ybSIsIm1heGxlbmd0aCIsIm1pbmxlbmd0aCIsInBsYWNl
aG9sZGVyIiwicmVhZG9ubHkiLCJyZXF1aXJlZCIsInNlbGVjdGlvbkRpcmVjdGlvbiIsInNwZWxs
Y2hlY2siLCJ0YWJpbmRleCIsInRpdGxlIl0scGxhY2Vob2xkZXI6bnVsbCxkaXNhYmxlZDohMSxt
YXhsZW5ndGg6bnVsbCxpbml0OmZ1bmN0aW9uKCl7dGhpcy5fc3VwZXIuYXBwbHkodGhpcyxhcmd1
bWVudHMpLHRoaXMub24oInBhc3RlIix0aGlzLHRoaXMuX2VsZW1lbnRWYWx1ZURpZENoYW5nZSks
dGhpcy5vbigiY3V0Iix0aGlzLHRoaXMuX2VsZW1lbnRWYWx1ZURpZENoYW5nZSksdGhpcy5vbigi
aW5wdXQiLHRoaXMsdGhpcy5fZWxlbWVudFZhbHVlRGlkQ2hhbmdlKX0sYWN0aW9uOm51bGwsb25F
dmVudDoiZW50ZXIiLGJ1YmJsZXM6ITEsaW50ZXJwcmV0S2V5RXZlbnRzOmZ1bmN0aW9uKGUpe3Zh
ciB0PWlbZS5rZXlDb2RlXQoraWYodGhpcy5fZWxlbWVudFZhbHVlRGlkQ2hhbmdlKCksdClyZXR1
cm4gdGhpc1t0XShlKX0sX2VsZW1lbnRWYWx1ZURpZENoYW5nZTpmdW5jdGlvbigpeygwLHQuc2V0
KSh0aGlzLCJ2YWx1ZSIsdGhpcy5lbGVtZW50LnZhbHVlKX0sY2hhbmdlOmZ1bmN0aW9uKGUpe3Ro
aXMuX2VsZW1lbnRWYWx1ZURpZENoYW5nZShlKX0saW5zZXJ0TmV3bGluZTpmdW5jdGlvbihlKXty
KCJlbnRlciIsdGhpcyxlKSxyKCJpbnNlcnQtbmV3bGluZSIsdGhpcyxlKX0sY2FuY2VsOmZ1bmN0
aW9uKGUpe3IoImVzY2FwZS1wcmVzcyIsdGhpcyxlKX0sZm9jdXNJbjpmdW5jdGlvbihlKXtyKCJm
b2N1cy1pbiIsdGhpcyxlKX0sZm9jdXNPdXQ6ZnVuY3Rpb24oZSl7dGhpcy5fZWxlbWVudFZhbHVl
RGlkQ2hhbmdlKGUpLHIoImZvY3VzLW91dCIsdGhpcyxlKX0sa2V5UHJlc3M6ZnVuY3Rpb24oZSl7
cigia2V5LXByZXNzIix0aGlzLGUpfSxrZXlVcDpmdW5jdGlvbihlKXt0aGlzLmludGVycHJldEtl
eUV2ZW50cyhlKSx0aGlzLnNlbmRBY3Rpb24oImtleS11cCIsKDAsdC5nZXQpKHRoaXMsInZhbHVl
IiksZSl9LGtleURvd246ZnVuY3Rpb24oZSl7dGhpcy5zZW5kQWN0aW9uKCJrZXktZG93biIsKDAs
dC5nZXQpKHRoaXMsInZhbHVlIiksZSl9fSl9KSxlKCJlbWJlci12aWV3cy9taXhpbnMvdmlld19z
dGF0ZV9zdXBwb3J0IixbImV4cG9ydHMiLCJlbWJlci1tZXRhbCJdLGZ1bmN0aW9uKGUsdCl7InVz
ZSBzdHJpY3QiCitlLmRlZmF1bHQ9dC5NaXhpbi5jcmVhdGUoe190cmFuc2l0aW9uVG86ZnVuY3Rp
b24oZSl7dmFyIHQ9dGhpcy5fY3VycmVudFN0YXRlLG49dGhpcy5fY3VycmVudFN0YXRlPXRoaXMu
X3N0YXRlc1tlXQordGhpcy5fc3RhdGU9ZSx0JiZ0LmV4aXQmJnQuZXhpdCh0aGlzKSxuLmVudGVy
JiZuLmVudGVyKHRoaXMpfX0pfSksZSgiZW1iZXItdmlld3MvbWl4aW5zL3ZpZXdfc3VwcG9ydCIs
WyJleHBvcnRzIiwiZW1iZXItdXRpbHMiLCJlbWJlci1tZXRhbCIsImVtYmVyLWRlYnVnIiwiZW1i
ZXItZW52aXJvbm1lbnQiLCJlbWJlci12aWV3cy9zeXN0ZW0vdXRpbHMiLCJlbWJlci1ydW50aW1l
L3N5c3RlbS9jb3JlX29iamVjdCIsImVtYmVyLXZpZXdzL3N5c3RlbS9qcXVlcnkiXSxmdW5jdGlv
bihlLHQsbixyLGksbyxzLGEpeyJ1c2Ugc3RyaWN0IgorZnVuY3Rpb24gdSgpe3JldHVybiB0aGlz
fWUuZGlzcGF0Y2hMaWZlQ3ljbGVIb29rPXZvaWQgMAordmFyIGwsYz1lLmRpc3BhdGNoTGlmZUN5
Y2xlSG9vaz1mdW5jdGlvbihlLHQsbixyKXtlLnRyaWdnZXIodCx7YXR0cnM6cixvbGRBdHRyczpu
LG5ld0F0dHJzOnJ9KX0KK2UuZGVmYXVsdD1uLk1peGluLmNyZWF0ZSgobD17Y29uY2F0ZW5hdGVk
UHJvcGVydGllczpbImF0dHJpYnV0ZUJpbmRpbmdzIl19LGxbcy5QT1NUX0lOSVRdPWZ1bmN0aW9u
KCl7Yyh0aGlzLCJkaWRJbml0QXR0cnMiLHZvaWQgMCx0aGlzLmF0dHJzKSxjKHRoaXMsImRpZFJl
Y2VpdmVBdHRycyIsdm9pZCAwLHRoaXMuYXR0cnMpfSxsLm5lYXJlc3RPZlR5cGU9ZnVuY3Rpb24o
ZSl7Zm9yKHZhciB0PXRoaXMucGFyZW50VmlldyxyPWUgaW5zdGFuY2VvZiBuLk1peGluP2Z1bmN0
aW9uKHQpe3JldHVybiBlLmRldGVjdCh0KX06ZnVuY3Rpb24odCl7cmV0dXJuIGUuZGV0ZWN0KHQu
Y29uc3RydWN0b3IpfTt0Oyl7aWYocih0KSlyZXR1cm4gdAordD10LnBhcmVudFZpZXd9fSxsLm5l
YXJlc3RXaXRoUHJvcGVydHk9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMucGFyZW50Vmlldzt0
Oyl7aWYoZSBpbiB0KXJldHVybiB0Cit0PXQucGFyZW50Vmlld319LGwucmVyZW5kZXI9ZnVuY3Rp
b24oKXtyZXR1cm4gdGhpcy5fY3VycmVudFN0YXRlLnJlcmVuZGVyKHRoaXMpfSxsLmVsZW1lbnQ9
KDAsbi5kZXNjcmlwdG9yKSh7Y29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITEsZ2V0OmZ1bmN0
aW9uKCl7cmV0dXJuIHRoaXMucmVuZGVyZXIuZ2V0RWxlbWVudCh0aGlzKX19KSxsLiQ9ZnVuY3Rp
b24oZSl7aWYodGhpcy5lbGVtZW50KXJldHVybiBlPygwLGEuZGVmYXVsdCkoZSx0aGlzLmVsZW1l
bnQpOigwLGEuZGVmYXVsdCkodGhpcy5lbGVtZW50KX0sbC5hcHBlbmRUbz1mdW5jdGlvbihlKXt2
YXIgdD10aGlzLl9lbnZpcm9ubWVudHx8aS5lbnZpcm9ubWVudCxuPXZvaWQgMAorcmV0dXJuIG49
dC5oYXNET00mJiJzdHJpbmciPT10eXBlb2YgZT9kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGUpOmUs
dGhpcy5yZW5kZXJlci5hcHBlbmRUbyh0aGlzLG4pLHRoaXN9LGwucmVuZGVyVG9FbGVtZW50PWZ1
bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/
YXJndW1lbnRzWzBdOiJib2R5Iix0PXRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudChlKQorcmV0
dXJuIHRoaXMucmVuZGVyZXIuYXBwZW5kVG8odGhpcyx0KSx0fSxsLmFwcGVuZD1mdW5jdGlvbigp
e3JldHVybiB0aGlzLmFwcGVuZFRvKGRvY3VtZW50LmJvZHkpfSxsLmVsZW1lbnRJZD1udWxsLGwu
ZmluZEVsZW1lbnRJblBhcmVudEVsZW1lbnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9IiMiK3RoaXMuZWxl
bWVudElkCityZXR1cm4oMCxhLmRlZmF1bHQpKHQpWzBdfHwoMCxhLmRlZmF1bHQpKHQsZSlbMF19
LGwud2lsbEluc2VydEVsZW1lbnQ9dSxsLmRpZEluc2VydEVsZW1lbnQ9dSxsLndpbGxDbGVhclJl
bmRlcj11LGwuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX3N1cGVyLmFwcGx5KHRoaXMsYXJndW1l
bnRzKSx0aGlzLl9jdXJyZW50U3RhdGUuZGVzdHJveSh0aGlzKX0sbC53aWxsRGVzdHJveUVsZW1l
bnQ9dSxsLnBhcmVudFZpZXdEaWRDaGFuZ2U9dSxsLnRhZ05hbWU9bnVsbCxsLmluaXQ9ZnVuY3Rp
b24oKXt2YXIgZSxuCit0aGlzLl9zdXBlci5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5lbGVt
ZW50SWR8fCIiPT09dGhpcy50YWdOYW1lfHwodGhpcy5lbGVtZW50SWQ9KDAsdC5ndWlkRm9yKSh0
aGlzKSksdGhpcy5ldmVudE1hbmFnZXImJihlPSgwLHQuZ2V0T3duZXIpKHRoaXMpLCEobj1lJiZl
Lmxvb2t1cCgiZXZlbnRfZGlzcGF0Y2hlcjptYWluIikpfHwiY2FuRGlzcGF0Y2hUb0V2ZW50TWFu
YWdlciJpbiBufHwobi5jYW5EaXNwYXRjaFRvRXZlbnRNYW5hZ2VyPSEwKSl9LGwuX19kZWZpbmVO
b25FbnVtZXJhYmxlPWZ1bmN0aW9uKGUpe3RoaXNbZS5uYW1lXT1lLmRlc2NyaXB0b3IudmFsdWV9
LGwuaGFuZGxlRXZlbnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fY3VycmVudFN0YXRlLmhh
bmRsZUV2ZW50KHRoaXMsZSx0KX0sbCkpfSksZSgiZW1iZXItdmlld3Mvc3lzdGVtL2FjdGlvbl9t
YW5hZ2VyIixbImV4cG9ydHMiXSxmdW5jdGlvbihlKXsidXNlIHN0cmljdCIKK2Z1bmN0aW9uIHQo
KXt9ZS5kZWZhdWx0PXQsdC5yZWdpc3RlcmVkQWN0aW9ucz17fX0pLGUoImVtYmVyLXZpZXdzL3N5
c3RlbS9ldmVudF9kaXNwYXRjaGVyIixbImV4cG9ydHMiLCJlbWJlci11dGlscyIsImVtYmVyLWRl
YnVnIiwiZW1iZXItbWV0YWwiLCJlbWJlci1ydW50aW1lIiwiZW1iZXItdmlld3Mvc3lzdGVtL2px
dWVyeSIsImVtYmVyLXZpZXdzL3N5c3RlbS9hY3Rpb25fbWFuYWdlciIsImVtYmVyLWVudmlyb25t
ZW50IiwiZW1iZXItdmlld3MvY29tcGF0L2ZhbGxiYWNrLXZpZXctcmVnaXN0cnkiXSxmdW5jdGlv
bihlLHQsbixyLGksbyxzLGEsdSl7InVzZSBzdHJpY3QiCitlLmRlZmF1bHQ9aS5PYmplY3QuZXh0
ZW5kKHtldmVudHM6e3RvdWNoc3RhcnQ6InRvdWNoU3RhcnQiLHRvdWNobW92ZToidG91Y2hNb3Zl
Iix0b3VjaGVuZDoidG91Y2hFbmQiLHRvdWNoY2FuY2VsOiJ0b3VjaENhbmNlbCIsa2V5ZG93bjoi
a2V5RG93biIsa2V5dXA6ImtleVVwIixrZXlwcmVzczoia2V5UHJlc3MiLG1vdXNlZG93bjoibW91
c2VEb3duIixtb3VzZXVwOiJtb3VzZVVwIixjb250ZXh0bWVudToiY29udGV4dE1lbnUiLGNsaWNr
OiJjbGljayIsZGJsY2xpY2s6ImRvdWJsZUNsaWNrIixtb3VzZW1vdmU6Im1vdXNlTW92ZSIsZm9j
dXNpbjoiZm9jdXNJbiIsZm9jdXNvdXQ6ImZvY3VzT3V0Iixtb3VzZWVudGVyOiJtb3VzZUVudGVy
Iixtb3VzZWxlYXZlOiJtb3VzZUxlYXZlIixzdWJtaXQ6InN1Ym1pdCIsaW5wdXQ6ImlucHV0Iixj
aGFuZ2U6ImNoYW5nZSIsZHJhZ3N0YXJ0OiJkcmFnU3RhcnQiLGRyYWc6ImRyYWciLGRyYWdlbnRl
cjoiZHJhZ0VudGVyIixkcmFnbGVhdmU6ImRyYWdMZWF2ZSIsZHJhZ292ZXI6ImRyYWdPdmVyIixk
cm9wOiJkcm9wIixkcmFnZW5kOiJkcmFnRW5kIn0scm9vdEVsZW1lbnQ6ImJvZHkiLGluaXQ6ZnVu
Y3Rpb24oKXt0aGlzLl9zdXBlcigpfSxzZXR1cDpmdW5jdGlvbihlLG4pe3ZhciBpPXZvaWQgMCxz
PXRoaXMuX2ZpbmFsRXZlbnRzPSgwLHQuYXNzaWduKSh7fSwoMCxyLmdldCkodGhpcywiZXZlbnRz
IiksZSkKK2lmKCgwLHIuaXNOb25lKShuKT9uPSgwLHIuZ2V0KSh0aGlzLCJyb290RWxlbWVudCIp
OigwLHIuc2V0KSh0aGlzLCJyb290RWxlbWVudCIsbiksbj0oMCxvLmRlZmF1bHQpKG4pLG4uYWRk
Q2xhc3MoImVtYmVyLWFwcGxpY2F0aW9uIiksIW4uaXMoIi5lbWJlci1hcHBsaWNhdGlvbiIpKXRo
cm93IG5ldyBUeXBlRXJyb3IoIlVuYWJsZSB0byBhZGQgJ2VtYmVyLWFwcGxpY2F0aW9uJyBjbGFz
cyB0byByb290IGVsZW1lbnQgKCIrKG4uc2VsZWN0b3J8fG5bMF0udGFnTmFtZSkrIikuIE1ha2Ug
c3VyZSB5b3Ugc2V0IHJvb3RFbGVtZW50IHRvIHRoZSBib2R5IG9yIGFuIGVsZW1lbnQgaW4gdGhl
IGJvZHkuIikKK3ZhciBhPXRoaXMuX2dldFZpZXdSZWdpc3RyeSgpCitmb3IoaSBpbiBzKXMuaGFz
T3duUHJvcGVydHkoaSkmJnRoaXMuc2V0dXBIYW5kbGVyKG4saSxzW2ldLGEpfSxzZXR1cEhhbmRs
ZXI6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9dGhpcworbnVsbCE9PW4mJihlLm9uKHQrIi5lbWJl
ciIsIi5lbWJlci12aWV3IixmdW5jdGlvbihlLHQpe3ZhciBvPXJbdGhpcy5pZF0scz0hMCxhPWku
Y2FuRGlzcGF0Y2hUb0V2ZW50TWFuYWdlcj9pLl9maW5kTmVhcmVzdEV2ZW50TWFuYWdlcihvLG4p
Om51bGwKK3JldHVybiBhJiZhIT09dD9zPWkuX2Rpc3BhdGNoRXZlbnQoYSxlLG4sbyk6byYmKHM9
aS5fYnViYmxlRXZlbnQobyxlLG4pKSxzfSksZS5vbih0KyIuZW1iZXIiLCJbZGF0YS1lbWJlci1h
Y3Rpb25dIixmdW5jdGlvbihlKXt2YXIgdCxyLGksbyxhPWUuY3VycmVudFRhcmdldC5hdHRyaWJ1
dGVzLHU9W10KK2Zvcih0PTA7dDxhLmxlbmd0aDt0Kyspcj1hLml0ZW0odCksaT1yLm5hbWUsLTEh
PT1pLmxhc3RJbmRleE9mKCJkYXRhLWVtYmVyLWFjdGlvbi0iLDApJiYobz1zLmRlZmF1bHQucmVn
aXN0ZXJlZEFjdGlvbnNbci52YWx1ZV0pJiZvLmV2ZW50TmFtZT09PW4mJi0xPT09dS5pbmRleE9m
KG8pJiYoby5oYW5kbGVyKGUpLHUucHVzaChvKSl9KSl9LF9nZXRWaWV3UmVnaXN0cnk6ZnVuY3Rp
b24oKXt2YXIgZT0oMCx0LmdldE93bmVyKSh0aGlzKQorcmV0dXJuIGUmJmUubG9va3VwKCItdmll
dy1yZWdpc3RyeTptYWluIil8fHUuZGVmYXVsdH0sX2ZpbmROZWFyZXN0RXZlbnRNYW5hZ2VyOmZ1
bmN0aW9uKGUsdCl7Zm9yKHZhciBuPW51bGw7ZSYmKCEobj0oMCxyLmdldCkoZSwiZXZlbnRNYW5h
Z2VyIikpfHwhblt0XSk7KWU9KDAsci5nZXQpKGUsInBhcmVudFZpZXciKQorcmV0dXJuIG59LF9k
aXNwYXRjaEV2ZW50OmZ1bmN0aW9uKGUsdCxuLGkpe3ZhciBvPSEwLHM9ZVtuXQorcmV0dXJuImZ1
bmN0aW9uIj09dHlwZW9mIHM/KG89KDAsci5ydW4pKGUscyx0LGkpLHQuc3RvcFByb3BhZ2F0aW9u
KCkpOm89dGhpcy5fYnViYmxlRXZlbnQoaSx0LG4pLG99LF9idWJibGVFdmVudDpmdW5jdGlvbihl
LHQsbil7cmV0dXJuIGUuaGFuZGxlRXZlbnQobix0KX0sZGVzdHJveTpmdW5jdGlvbigpe3ZhciBl
PSgwLHIuZ2V0KSh0aGlzLCJyb290RWxlbWVudCIpCityZXR1cm4oMCxvLmRlZmF1bHQpKGUpLm9m
ZigiLmVtYmVyIiwiKioiKS5yZW1vdmVDbGFzcygiZW1iZXItYXBwbGljYXRpb24iKSx0aGlzLl9z
dXBlci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIihF
dmVudERpc3BhdGNoZXIpIn19KX0pLGUoImVtYmVyLXZpZXdzL3N5c3RlbS9leHQiLFsiZW1iZXIt
bWV0YWwiXSxmdW5jdGlvbihlKXsidXNlIHN0cmljdCIKK2UucnVuLl9hZGRRdWV1ZSgicmVuZGVy
IiwiYWN0aW9ucyIpLGUucnVuLl9hZGRRdWV1ZSgiYWZ0ZXJSZW5kZXIiLCJyZW5kZXIiKX0pLGUo
ImVtYmVyLXZpZXdzL3N5c3RlbS9qcXVlcnkiLFsiZXhwb3J0cyIsImVtYmVyLWVudmlyb25tZW50
Il0sZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCIKK3ZhciBuPXZvaWQgMAordC5lbnZpcm9ubWVu
dC5oYXNET00mJihuPXQuY29udGV4dC5pbXBvcnRzLmpRdWVyeSkmJihuLmV2ZW50LmFkZFByb3A/
bi5ldmVudC5hZGRQcm9wKCJkYXRhVHJhbnNmZXIiKTpbImRyYWdzdGFydCIsImRyYWciLCJkcmFn
ZW50ZXIiLCJkcmFnbGVhdmUiLCJkcmFnb3ZlciIsImRyb3AiLCJkcmFnZW5kIl0uZm9yRWFjaChm
dW5jdGlvbihlKXtuLmV2ZW50LmZpeEhvb2tzW2VdPXtwcm9wczpbImRhdGFUcmFuc2ZlciJdfX0p
KSxlLmRlZmF1bHQ9bn0pLGUoImVtYmVyLXZpZXdzL3N5c3RlbS9sb29rdXBfcGFydGlhbCIsWyJl
eHBvcnRzIiwiZW1iZXItZGVidWciXSxmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0IgorZnVuY3Rp
b24gbihlKXt2YXIgdD1lLnNwbGl0KCIvIiksbj10W3QubGVuZ3RoLTFdCityZXR1cm4gdFt0Lmxl
bmd0aC0xXT0iXyIrbix0LmpvaW4oIi8iKX1mdW5jdGlvbiByKGUsbixyKXtpZihyKXtpZighZSl0
aHJvdyBuZXcgdC5FcnJvcigiQ29udGFpbmVyIHdhcyBub3QgZm91bmQgd2hlbiBsb29raW5nIHVw
IGEgdmlld3MgdGVtcGxhdGUuIFRoaXMgaXMgbW9zdCBsaWtlbHkgZHVlIHRvIG1hbnVhbGx5IGlu
c3RhbnRpYXRpbmcgYW4gRW1iZXIuVmlldy4gU2VlOiBodHRwOi8vZ2l0LmlvL0VLUHBuQSIpCity
ZXR1cm4gZS5sb29rdXAoInRlbXBsYXRlOiIrbil8fGUubG9va3VwKCJ0ZW1wbGF0ZToiK3IpfX1l
LmRlZmF1bHQ9ZnVuY3Rpb24oZSx0KXtpZihudWxsIT1lKXt2YXIgaT1yKHQsbihlKSxlKQorcmV0
dXJuIGl9fSxlLmhhc1BhcnRpYWw9ZnVuY3Rpb24oZSxyKXtpZighcil0aHJvdyBuZXcgdC5FcnJv
cigiQ29udGFpbmVyIHdhcyBub3QgZm91bmQgd2hlbiBsb29raW5nIHVwIGEgdmlld3MgdGVtcGxh
dGUuIFRoaXMgaXMgbW9zdCBsaWtlbHkgZHVlIHRvIG1hbnVhbGx5IGluc3RhbnRpYXRpbmcgYW4g
RW1iZXIuVmlldy4gU2VlOiBodHRwOi8vZ2l0LmlvL0VLUHBuQSIpCityZXR1cm4gci5oYXNSZWdp
c3RyYXRpb24oInRlbXBsYXRlOiIrbihlKSl8fHIuaGFzUmVnaXN0cmF0aW9uKCJ0ZW1wbGF0ZToi
K2UpfX0pLGUoImVtYmVyLXZpZXdzL3N5c3RlbS91dGlscyIsWyJleHBvcnRzIiwiZW1iZXItdXRp
bHMiXSxmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0IgorZnVuY3Rpb24gbihlKXtyZXR1cm4iIj09
PWUudGFnTmFtZT8oMCx0Lmd1aWRGb3IpKGUpOmUuZWxlbWVudElkfHwoMCx0Lmd1aWRGb3IpKGUp
fWZ1bmN0aW9uIHIoZSx0KXt2YXIgbj1bXSxyPVtdCityZXR1cm4gZVthXS5mb3JFYWNoKGZ1bmN0
aW9uKGUpe3ZhciBpPXRbZV0KKyFpfHxpLmlzRGVzdHJveWluZ3x8aS5pc0Rlc3Ryb3llZHx8LTEh
PT1uLmluZGV4T2YoZSl8fChuLnB1c2goZSksci5wdXNoKGkpKX0pLGVbYV09bixyfWZ1bmN0aW9u
IGkoZSl7cmV0dXJuIGUucmVuZGVyZXIuZ2V0Qm91bmRzKGUpfWZ1bmN0aW9uIG8oZSl7dmFyIHQ9
aShlKSxuPWRvY3VtZW50LmNyZWF0ZVJhbmdlKCkKK3JldHVybiBuLnNldFN0YXJ0QmVmb3JlKHQu
Zmlyc3ROb2RlKSxuLnNldEVuZEFmdGVyKHQubGFzdE5vZGUpLG59ZS5lbE1hdGNoZXM9dm9pZCAw
LGUuaXNTaW1wbGVDbGljaz1mdW5jdGlvbihlKXt2YXIgdD1lLnNoaWZ0S2V5fHxlLm1ldGFLZXl8
fGUuYWx0S2V5fHxlLmN0cmxLZXksbj1lLndoaWNoPjEKK3JldHVybiF0JiYhbn0sZS5jb25zdHJ1
Y3RTdHlsZURlcHJlY2F0aW9uTWVzc2FnZT1mdW5jdGlvbihlKXtyZXR1cm4nQmluZGluZyBzdHls
ZSBhdHRyaWJ1dGVzIG1heSBpbnRyb2R1Y2UgY3Jvc3Mtc2l0ZSBzY3JpcHRpbmcgdnVsbmVyYWJp
bGl0aWVzOyBwbGVhc2UgZW5zdXJlIHRoYXQgdmFsdWVzIGJlaW5nIGJvdW5kIGFyZSBwcm9wZXJs
eSBlc2NhcGVkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgaW5jbHVkaW5nIGhvdyB0byBkaXNhYmxl
IHRoaXMgd2FybmluZywgc2VlIGh0dHA6Ly9lbWJlcmpzLmNvbS9kZXByZWNhdGlvbnMvdjEueC8j
dG9jX2JpbmRpbmctc3R5bGUtYXR0cmlidXRlcy4gU3R5bGUgYWZmZWN0ZWQ6ICInK2UrJyInfSxl
LmdldFJvb3RWaWV3cz1mdW5jdGlvbihlKXt2YXIgdD1lLmxvb2t1cCgiLXZpZXctcmVnaXN0cnk6
bWFpbiIpLG49W10KK3JldHVybiBPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3Zh
ciByPXRbZV0KK251bGw9PT1yLnBhcmVudFZpZXcmJm4ucHVzaChyKX0pLG59LGUuZ2V0Vmlld0lk
PW4sZS5nZXRWaWV3RWxlbWVudD1mdW5jdGlvbihlKXtyZXR1cm4gZVtzXX0sZS5pbml0Vmlld0Vs
ZW1lbnQ9ZnVuY3Rpb24oZSl7ZVtzXT1udWxsfSxlLnNldFZpZXdFbGVtZW50PWZ1bmN0aW9uKGUs
dCl7cmV0dXJuIGVbc109dH0sZS5nZXRDaGlsZFZpZXdzPWZ1bmN0aW9uKGUpe3JldHVybiByKGUs
KDAsdC5nZXRPd25lcikoZSkubG9va3VwKCItdmlldy1yZWdpc3RyeTptYWluIikpfSxlLmluaXRD
aGlsZFZpZXdzPWZ1bmN0aW9uKGUpe2VbYV09W119LGUuYWRkQ2hpbGRWaWV3PWZ1bmN0aW9uKGUs
dCl7ZVthXS5wdXNoKG4odCkpfSxlLmNvbGxlY3RDaGlsZFZpZXdzPXIsZS5nZXRWaWV3Qm91bmRz
PWksZS5nZXRWaWV3UmFuZ2U9byxlLmdldFZpZXdDbGllbnRSZWN0cz1mdW5jdGlvbihlKXtyZXR1
cm4gbyhlKS5nZXRDbGllbnRSZWN0cygpfSxlLmdldFZpZXdCb3VuZGluZ0NsaWVudFJlY3Q9ZnVu
Y3Rpb24oZSl7cmV0dXJuIG8oZSkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9LGUubWF0Y2hlcz1m
dW5jdGlvbihlLHQpe3JldHVybiB1LmNhbGwoZSx0KX0KK3ZhciBzPSgwLHQuc3ltYm9sKSgiVklF
V19FTEVNRU5UIiksYT0oMCx0LnN5bWJvbCkoIkNISUxEX1ZJRVdfSURTIiksdT1lLmVsTWF0Y2hl
cz0idW5kZWZpbmVkIiE9dHlwZW9mIEVsZW1lbnQmJihFbGVtZW50LnByb3RvdHlwZS5tYXRjaGVz
fHxFbGVtZW50LnByb3RvdHlwZS5tYXRjaGVzU2VsZWN0b3J8fEVsZW1lbnQucHJvdG90eXBlLm1v
ek1hdGNoZXNTZWxlY3Rvcnx8RWxlbWVudC5wcm90b3R5cGUubXNNYXRjaGVzU2VsZWN0b3J8fEVs
ZW1lbnQucHJvdG90eXBlLm9NYXRjaGVzU2VsZWN0b3J8fEVsZW1lbnQucHJvdG90eXBlLndlYmtp
dE1hdGNoZXNTZWxlY3Rvcil9KSxlKCJlbWJlci12aWV3cy91dGlscy9sb29rdXAtY29tcG9uZW50
IixbImV4cG9ydHMiLCJlbWJlci1iYWJlbCIsImNvbnRhaW5lciJdLGZ1bmN0aW9uKGUsdCxuKXsi
dXNlIHN0cmljdCIKK2Z1bmN0aW9uIHIoZSx0LHIsbyl7dmFyIHM9ZS5jb21wb25lbnRGb3Iocix0
LG8pLGE9ZS5sYXlvdXRGb3Iocix0LG8pLHU9e2xheW91dDphLGNvbXBvbmVudDpzfQorcmV0dXJu
IGEmJiFzJiYodS5jb21wb25lbnQ9dC5mYWN0b3J5Rm9yKCgwLG4ucHJpdmF0aXplKShpKSkpLHV9
ZS5kZWZhdWx0PWZ1bmN0aW9uKGUsdCxuKXt2YXIgaSxvPWUubG9va3VwKCJjb21wb25lbnQtbG9v
a3VwOm1haW4iKQorcmV0dXJuIG4mJm4uc291cmNlJiYoaT1yKG8sZSx0LG4pLGkuY29tcG9uZW50
fHxpLmxheW91dCk/aTpyKG8sZSx0KX0KK3ZhciBpPSgwLHQudGFnZ2VkVGVtcGxhdGVMaXRlcmFs
TG9vc2UpKFsiY29tcG9uZW50Oi1kZWZhdWx0Il0sWyJjb21wb25lbnQ6LWRlZmF1bHQiXSl9KSxl
KCJlbWJlci12aWV3cy92aWV3cy9jb3JlX3ZpZXciLFsiZXhwb3J0cyIsImVtYmVyLXJ1bnRpbWUi
LCJlbWJlci12aWV3cy9zeXN0ZW0vdXRpbHMiLCJlbWJlci12aWV3cy92aWV3cy9zdGF0ZXMiXSxm
dW5jdGlvbihlLHQsbixyKXsidXNlIHN0cmljdCIKK3ZhciBpPXQuRnJhbWV3b3JrT2JqZWN0LmV4
dGVuZCh0LkV2ZW50ZWQsdC5BY3Rpb25IYW5kbGVyLHtpc1ZpZXc6ITAsX3N0YXRlczooMCxyLmNs
b25lU3RhdGVzKShyLnN0YXRlcyksaW5pdDpmdW5jdGlvbigpe2lmKHRoaXMuX3N1cGVyLmFwcGx5
KHRoaXMsYXJndW1lbnRzKSx0aGlzLl9zdGF0ZT0icHJlUmVuZGVyIix0aGlzLl9jdXJyZW50U3Rh
dGU9dGhpcy5fc3RhdGVzLnByZVJlbmRlciwoMCxuLmluaXRWaWV3RWxlbWVudCkodGhpcyksIXRo
aXMucmVuZGVyZXIpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgaW5zdGFudGlhdGUgYSBjb21wb25l
bnQgd2l0aG91dCBhIHJlbmRlcmVyLiBQbGVhc2UgZW5zdXJlIHRoYXQgeW91IGFyZSBjcmVhdGlu
ZyAiK3RoaXMrIiB3aXRoIGEgcHJvcGVyIGNvbnRhaW5lci9yZWdpc3RyeS4iKX0scGFyZW50Vmll
dzpudWxsLGluc3RydW1lbnREZXRhaWxzOmZ1bmN0aW9uKGUpe3JldHVybiBlLm9iamVjdD10aGlz
LnRvU3RyaW5nKCksZS5jb250YWluZXJLZXk9dGhpcy5fZGVidWdDb250YWluZXJLZXksZS52aWV3
PXRoaXMsZX0sdHJpZ2dlcjpmdW5jdGlvbigpe3RoaXMuX3N1cGVyLmFwcGx5KHRoaXMsYXJndW1l
bnRzKQordmFyIGUsdCxuPWFyZ3VtZW50c1swXSxyPXRoaXNbbl0KK2lmKCJmdW5jdGlvbiI9PXR5
cGVvZiByKXtmb3IoZT1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aC0xKSx0PTE7dDxhcmd1bWVu
dHMubGVuZ3RoO3QrKyllW3QtMV09YXJndW1lbnRzW3RdCityZXR1cm4gci5hcHBseSh0aGlzLGUp
fX0saGFzOmZ1bmN0aW9uKGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzW2VdfHx0aGlz
Ll9zdXBlcihlKX19KTsoMCx0LmRlcHJlY2F0ZVVuZGVyc2NvcmVBY3Rpb25zKShpKSxpLnJlb3Bl
bkNsYXNzKHtpc1ZpZXdGYWN0b3J5OiEwfSksZS5kZWZhdWx0PWl9KSxlKCJlbWJlci12aWV3cy92
aWV3cy9zdGF0ZXMiLFsiZXhwb3J0cyIsImVtYmVyLXV0aWxzIiwiZW1iZXItdmlld3Mvdmlld3Mv
c3RhdGVzL2RlZmF1bHQiLCJlbWJlci12aWV3cy92aWV3cy9zdGF0ZXMvcHJlX3JlbmRlciIsImVt
YmVyLXZpZXdzL3ZpZXdzL3N0YXRlcy9oYXNfZWxlbWVudCIsImVtYmVyLXZpZXdzL3ZpZXdzL3N0
YXRlcy9pbl9kb20iLCJlbWJlci12aWV3cy92aWV3cy9zdGF0ZXMvZGVzdHJveWluZyJdLGZ1bmN0
aW9uKGUsdCxuLHIsaSxvLHMpeyJ1c2Ugc3RyaWN0IgorZS5zdGF0ZXM9dm9pZCAwLGUuY2xvbmVT
dGF0ZXM9ZnVuY3Rpb24oZSl7dmFyIG49e30KK24uX2RlZmF1bHQ9e30sbi5wcmVSZW5kZXI9T2Jq
ZWN0LmNyZWF0ZShuLl9kZWZhdWx0KSxuLmRlc3Ryb3lpbmc9T2JqZWN0LmNyZWF0ZShuLl9kZWZh
dWx0KSxuLmhhc0VsZW1lbnQ9T2JqZWN0LmNyZWF0ZShuLl9kZWZhdWx0KSxuLmluRE9NPU9iamVj
dC5jcmVhdGUobi5oYXNFbGVtZW50KQorZm9yKHZhciByIGluIGUpZS5oYXNPd25Qcm9wZXJ0eShy
KSYmKDAsdC5hc3NpZ24pKG5bcl0sZVtyXSkKK3JldHVybiBufSxlLnN0YXRlcz17X2RlZmF1bHQ6
bi5kZWZhdWx0LHByZVJlbmRlcjpyLmRlZmF1bHQsaW5ET006by5kZWZhdWx0LGhhc0VsZW1lbnQ6
aS5kZWZhdWx0LGRlc3Ryb3lpbmc6cy5kZWZhdWx0fX0pLGUoImVtYmVyLXZpZXdzL3ZpZXdzL3N0
YXRlcy9kZWZhdWx0IixbImV4cG9ydHMiLCJlbWJlci1kZWJ1ZyJdLGZ1bmN0aW9uKGUsdCl7InVz
ZSBzdHJpY3QiCitlLmRlZmF1bHQ9e2FwcGVuZENoaWxkOmZ1bmN0aW9uKCl7dGhyb3cgbmV3IHQu
RW1iZXJFcnJvcigiWW91IGNhbid0IHVzZSBhcHBlbmRDaGlsZCBvdXRzaWRlIG9mIHRoZSByZW5k
ZXJpbmcgcHJvY2VzcyIpfSxoYW5kbGVFdmVudDpmdW5jdGlvbigpe3JldHVybiEwfSxyZXJlbmRl
cjpmdW5jdGlvbigpe30sZGVzdHJveTpmdW5jdGlvbigpe319fSksZSgiZW1iZXItdmlld3Mvdmll
d3Mvc3RhdGVzL2Rlc3Ryb3lpbmciLFsiZXhwb3J0cyIsImVtYmVyLXV0aWxzIiwiZW1iZXItZGVi
dWciLCJlbWJlci12aWV3cy92aWV3cy9zdGF0ZXMvZGVmYXVsdCJdLGZ1bmN0aW9uKGUsdCxuLHIp
eyJ1c2Ugc3RyaWN0IgordmFyIGk9T2JqZWN0LmNyZWF0ZShyLmRlZmF1bHQpOygwLHQuYXNzaWdu
KShpLHthcHBlbmRDaGlsZDpmdW5jdGlvbigpe3Rocm93IG5ldyBuLkVycm9yKCJZb3UgY2FuJ3Qg
Y2FsbCBhcHBlbmRDaGlsZCBvbiBhIHZpZXcgYmVpbmcgZGVzdHJveWVkIil9LHJlcmVuZGVyOmZ1
bmN0aW9uKCl7dGhyb3cgbmV3IG4uRXJyb3IoIllvdSBjYW4ndCBjYWxsIHJlcmVuZGVyIG9uIGEg
dmlldyBiZWluZyBkZXN0cm95ZWQiKX19KSxlLmRlZmF1bHQ9aX0pLGUoImVtYmVyLXZpZXdzL3Zp
ZXdzL3N0YXRlcy9oYXNfZWxlbWVudCIsWyJleHBvcnRzIiwiZW1iZXItdXRpbHMiLCJlbWJlci12
aWV3cy92aWV3cy9zdGF0ZXMvZGVmYXVsdCIsImVtYmVyLW1ldGFsIl0sZnVuY3Rpb24oZSx0LG4s
cil7InVzZSBzdHJpY3QiCit2YXIgaT1PYmplY3QuY3JlYXRlKG4uZGVmYXVsdCk7KDAsdC5hc3Np
Z24pKGkse3JlcmVuZGVyOmZ1bmN0aW9uKGUpe2UucmVuZGVyZXIucmVyZW5kZXIoZSl9LGRlc3Ry
b3k6ZnVuY3Rpb24oZSl7ZS5yZW5kZXJlci5yZW1vdmUoZSl9LGhhbmRsZUV2ZW50OmZ1bmN0aW9u
KGUsdCxuKXtyZXR1cm4hZS5oYXModCl8fCgwLHIuZmxhZ2dlZEluc3RydW1lbnQpKCJpbnRlcmFj
dGlvbi4iK3Qse2V2ZW50Om4sdmlldzplfSxmdW5jdGlvbigpe3JldHVybiByLnJ1bi5qb2luKGUs
ZS50cmlnZ2VyLHQsbil9KX19KSxlLmRlZmF1bHQ9aX0pLGUoImVtYmVyLXZpZXdzL3ZpZXdzL3N0
YXRlcy9pbl9kb20iLFsiZXhwb3J0cyIsImVtYmVyLXV0aWxzIiwiZW1iZXItbWV0YWwiLCJlbWJl
ci1kZWJ1ZyIsImVtYmVyLXZpZXdzL3ZpZXdzL3N0YXRlcy9oYXNfZWxlbWVudCJdLGZ1bmN0aW9u
KGUsdCxuLHIsaSl7InVzZSBzdHJpY3QiCit2YXIgbz1PYmplY3QuY3JlYXRlKGkuZGVmYXVsdCk7
KDAsdC5hc3NpZ24pKG8se2VudGVyOmZ1bmN0aW9uKGUpe2UucmVuZGVyZXIucmVnaXN0ZXIoZSl9
LGV4aXQ6ZnVuY3Rpb24oZSl7ZS5yZW5kZXJlci51bnJlZ2lzdGVyKGUpfX0pLGUuZGVmYXVsdD1v
fSksZSgiZW1iZXItdmlld3Mvdmlld3Mvc3RhdGVzL3ByZV9yZW5kZXIiLFsiZXhwb3J0cyIsImVt
YmVyLXZpZXdzL3ZpZXdzL3N0YXRlcy9kZWZhdWx0Il0sZnVuY3Rpb24oZSx0KXsidXNlIHN0cmlj
dCIKK2UuZGVmYXVsdD1PYmplY3QuY3JlYXRlKHQuZGVmYXVsdCl9KSxlKCJlbWJlci9mZWF0dXJl
cyIsWyJleHBvcnRzIiwiZW1iZXItZW52aXJvbm1lbnQiLCJlbWJlci11dGlscyJdLGZ1bmN0aW9u
KGUsdCxuKXsidXNlIHN0cmljdCIKK2UuRU1CRVJfR0xJTU1FUl9ERVRFQ1RfQkFDS1RSQUNLSU5H
X1JFUkVOREVSPWUuTUFOREFUT1JZX1NFVFRFUj1lLkVNQkVSX1JPVVRJTkdfUk9VVEVSX1NFUlZJ
Q0U9ZS5FTUJFUl9HTElNTUVSX0FMTE9XX0JBQ0tUUkFDS0lOR19SRVJFTkRFUj1lLkVNQkVSX01F
VEFMX1dFQUtNQVA9ZS5FTUJFUl9JTVBST1ZFRF9JTlNUUlVNRU5UQVRJT049ZS5FTUJFUl9MSUJS
QVJJRVNfSVNSRUdJU1RFUkVEPWUuRkVBVFVSRVNfU1RSSVBQRURfVEVTVD1lLkZFQVRVUkVTPWUu
REVGQVVMVF9GRUFUVVJFUz12b2lkIDAKK3ZhciByPWUuREVGQVVMVF9GRUFUVVJFUz17ImZlYXR1
cmVzLXN0cmlwcGVkLXRlc3QiOiExLCJlbWJlci1saWJyYXJpZXMtaXNyZWdpc3RlcmVkIjohMSwi
ZW1iZXItaW1wcm92ZWQtaW5zdHJ1bWVudGF0aW9uIjohMSwiZW1iZXItbWV0YWwtd2Vha21hcCI6
ITEsImVtYmVyLWdsaW1tZXItYWxsb3ctYmFja3RyYWNraW5nLXJlcmVuZGVyIjohMSwiZW1iZXIt
cm91dGluZy1yb3V0ZXItc2VydmljZSI6ITEsIm1hbmRhdG9yeS1zZXR0ZXIiOiExLCJlbWJlci1n
bGltbWVyLWRldGVjdC1iYWNrdHJhY2tpbmctcmVyZW5kZXIiOiExfSxpPWUuRkVBVFVSRVM9KDAs
bi5hc3NpZ24pKHIsdC5FTlYuRkVBVFVSRVMpCitlLkZFQVRVUkVTX1NUUklQUEVEX1RFU1Q9aVsi
ZmVhdHVyZXMtc3RyaXBwZWQtdGVzdCJdLGUuRU1CRVJfTElCUkFSSUVTX0lTUkVHSVNURVJFRD1p
WyJlbWJlci1saWJyYXJpZXMtaXNyZWdpc3RlcmVkIl0sZS5FTUJFUl9JTVBST1ZFRF9JTlNUUlVN
RU5UQVRJT049aVsiZW1iZXItaW1wcm92ZWQtaW5zdHJ1bWVudGF0aW9uIl0sZS5FTUJFUl9NRVRB
TF9XRUFLTUFQPWlbImVtYmVyLW1ldGFsLXdlYWttYXAiXSxlLkVNQkVSX0dMSU1NRVJfQUxMT1df
QkFDS1RSQUNLSU5HX1JFUkVOREVSPWlbImVtYmVyLWdsaW1tZXItYWxsb3ctYmFja3RyYWNraW5n
LXJlcmVuZGVyIl0sZS5FTUJFUl9ST1VUSU5HX1JPVVRFUl9TRVJWSUNFPWlbImVtYmVyLXJvdXRp
bmctcm91dGVyLXNlcnZpY2UiXSxlLk1BTkRBVE9SWV9TRVRURVI9aVsibWFuZGF0b3J5LXNldHRl
ciJdLGUuRU1CRVJfR0xJTU1FUl9ERVRFQ1RfQkFDS1RSQUNLSU5HX1JFUkVOREVSPWlbImVtYmVy
LWdsaW1tZXItZGV0ZWN0LWJhY2t0cmFja2luZy1yZXJlbmRlciJdfSksZSgiZW1iZXIvaW5kZXgi
LFsiZXhwb3J0cyIsInJlcXVpcmUiLCJlbWJlci1lbnZpcm9ubWVudCIsIm5vZGUtbW9kdWxlIiwi
ZW1iZXItdXRpbHMiLCJjb250YWluZXIiLCJlbWJlci1tZXRhbCIsImVtYmVyL2ZlYXR1cmVzIiwi
ZW1iZXItZGVidWciLCJiYWNrYnVybmVyIiwiZW1iZXItY29uc29sZSIsImVtYmVyLXJ1bnRpbWUi
LCJlbWJlci1nbGltbWVyIiwiZW1iZXIvdmVyc2lvbiIsImVtYmVyLXZpZXdzIiwiZW1iZXItcm91
dGluZyIsImVtYmVyLWFwcGxpY2F0aW9uIiwiZW1iZXItZXh0ZW5zaW9uLXN1cHBvcnQiXSxmdW5j
dGlvbihlLHQsbixyLGksbyxzLGEsdSxsLGMscCxmLGgsZCxtLGcseSl7InVzZSBzdHJpY3QiCitm
dW5jdGlvbiB2KCl7cmV0dXJuIHRoaXN9ZS5WRVJTSU9OPXZvaWQgMCxzLmRlZmF1bHQuZ2V0T3du
ZXI9aS5nZXRPd25lcixzLmRlZmF1bHQuc2V0T3duZXI9aS5zZXRPd25lcixzLmRlZmF1bHQuZ2Vu
ZXJhdGVHdWlkPWkuZ2VuZXJhdGVHdWlkLHMuZGVmYXVsdC5HVUlEX0tFWT1pLkdVSURfS0VZLHMu
ZGVmYXVsdC5ndWlkRm9yPWkuZ3VpZEZvcixzLmRlZmF1bHQuaW5zcGVjdD1pLmluc3BlY3Qscy5k
ZWZhdWx0Lm1ha2VBcnJheT1pLm1ha2VBcnJheSxzLmRlZmF1bHQuY2FuSW52b2tlPWkuY2FuSW52
b2tlLHMuZGVmYXVsdC50cnlJbnZva2U9aS50cnlJbnZva2Uscy5kZWZhdWx0LndyYXA9aS53cmFw
LHMuZGVmYXVsdC5hcHBseVN0cj1pLmFwcGx5U3RyLHMuZGVmYXVsdC51dWlkPWkudXVpZCxzLmRl
ZmF1bHQuYXNzaWduPWkuYXNzaWduLHMuZGVmYXVsdC5Db250YWluZXI9by5Db250YWluZXIscy5k
ZWZhdWx0LlJlZ2lzdHJ5PW8uUmVnaXN0cnkKK3ZhciBiLF89cy5jb21wdXRlZAorXy5hbGlhcz1z
LmFsaWFzLHMuZGVmYXVsdC5jb21wdXRlZD1fLHMuZGVmYXVsdC5Db21wdXRlZFByb3BlcnR5PXMu
Q29tcHV0ZWRQcm9wZXJ0eSxzLmRlZmF1bHQuY2FjaGVGb3I9cy5jYWNoZUZvcixzLmRlZmF1bHQu
YXNzZXJ0PXUuYXNzZXJ0LHMuZGVmYXVsdC53YXJuPXUud2FybixzLmRlZmF1bHQuZGVidWc9dS5k
ZWJ1ZyxzLmRlZmF1bHQuZGVwcmVjYXRlPXUuZGVwcmVjYXRlLHMuZGVmYXVsdC5kZXByZWNhdGVG
dW5jPXUuZGVwcmVjYXRlRnVuYyxzLmRlZmF1bHQucnVuSW5EZWJ1Zz11LnJ1bkluRGVidWcscy5k
ZWZhdWx0LkRlYnVnPXtyZWdpc3RlckRlcHJlY2F0aW9uSGFuZGxlcjp1LnJlZ2lzdGVyRGVwcmVj
YXRpb25IYW5kbGVyLHJlZ2lzdGVyV2FybkhhbmRsZXI6dS5yZWdpc3Rlcldhcm5IYW5kbGVyfSxz
LmRlZmF1bHQubWVyZ2U9cy5tZXJnZSxzLmRlZmF1bHQuaW5zdHJ1bWVudD1zLmluc3RydW1lbnQs
cy5kZWZhdWx0LnN1YnNjcmliZT1zLmluc3RydW1lbnRhdGlvblN1YnNjcmliZSxzLmRlZmF1bHQu
SW5zdHJ1bWVudGF0aW9uPXtpbnN0cnVtZW50OnMuaW5zdHJ1bWVudCxzdWJzY3JpYmU6cy5pbnN0
cnVtZW50YXRpb25TdWJzY3JpYmUsdW5zdWJzY3JpYmU6cy5pbnN0cnVtZW50YXRpb25VbnN1YnNj
cmliZSxyZXNldDpzLmluc3RydW1lbnRhdGlvblJlc2V0fSxzLmRlZmF1bHQuRXJyb3I9dS5FcnJv
cixzLmRlZmF1bHQuTUVUQV9ERVNDPXMuTUVUQV9ERVNDLHMuZGVmYXVsdC5tZXRhPXMubWV0YSxz
LmRlZmF1bHQuZ2V0PXMuZ2V0LHMuZGVmYXVsdC5nZXRXaXRoRGVmYXVsdD1zLmdldFdpdGhEZWZh
dWx0LHMuZGVmYXVsdC5fZ2V0UGF0aD1zLl9nZXRQYXRoLHMuZGVmYXVsdC5zZXQ9cy5zZXQscy5k
ZWZhdWx0LnRyeVNldD1zLnRyeVNldCxzLmRlZmF1bHQuRkVBVFVSRVM9YS5GRUFUVVJFUyxzLmRl
ZmF1bHQuRkVBVFVSRVMuaXNFbmFibGVkPXUuaXNGZWF0dXJlRW5hYmxlZCxzLmRlZmF1bHQuX0Nh
Y2hlPXMuQ2FjaGUscy5kZWZhdWx0Lm9uPXMub24scy5kZWZhdWx0LmFkZExpc3RlbmVyPXMuYWRk
TGlzdGVuZXIscy5kZWZhdWx0LnJlbW92ZUxpc3RlbmVyPXMucmVtb3ZlTGlzdGVuZXIscy5kZWZh
dWx0Ll9zdXNwZW5kTGlzdGVuZXI9cy5zdXNwZW5kTGlzdGVuZXIKK3MuZGVmYXVsdC5fc3VzcGVu
ZExpc3RlbmVycz1zLnN1c3BlbmRMaXN0ZW5lcnMscy5kZWZhdWx0LnNlbmRFdmVudD1zLnNlbmRF
dmVudCxzLmRlZmF1bHQuaGFzTGlzdGVuZXJzPXMuaGFzTGlzdGVuZXJzLHMuZGVmYXVsdC53YXRj
aGVkRXZlbnRzPXMud2F0Y2hlZEV2ZW50cyxzLmRlZmF1bHQubGlzdGVuZXJzRm9yPXMubGlzdGVu
ZXJzRm9yLHMuZGVmYXVsdC5hY2N1bXVsYXRlTGlzdGVuZXJzPXMuYWNjdW11bGF0ZUxpc3RlbmVy
cyxzLmRlZmF1bHQuaXNOb25lPXMuaXNOb25lLHMuZGVmYXVsdC5pc0VtcHR5PXMuaXNFbXB0eSxz
LmRlZmF1bHQuaXNCbGFuaz1zLmlzQmxhbmsscy5kZWZhdWx0LmlzUHJlc2VudD1zLmlzUHJlc2Vu
dCxzLmRlZmF1bHQucnVuPXMucnVuLHMuZGVmYXVsdC5fT2JzZXJ2ZXJTZXQ9cy5PYnNlcnZlclNl
dCxzLmRlZmF1bHQucHJvcGVydHlXaWxsQ2hhbmdlPXMucHJvcGVydHlXaWxsQ2hhbmdlLHMuZGVm
YXVsdC5wcm9wZXJ0eURpZENoYW5nZT1zLnByb3BlcnR5RGlkQ2hhbmdlLHMuZGVmYXVsdC5vdmVy
cmlkZUNoYWlucz1zLm92ZXJyaWRlQ2hhaW5zLHMuZGVmYXVsdC5iZWdpblByb3BlcnR5Q2hhbmdl
cz1zLmJlZ2luUHJvcGVydHlDaGFuZ2VzLHMuZGVmYXVsdC5lbmRQcm9wZXJ0eUNoYW5nZXM9cy5l
bmRQcm9wZXJ0eUNoYW5nZXMscy5kZWZhdWx0LmNoYW5nZVByb3BlcnRpZXM9cy5jaGFuZ2VQcm9w
ZXJ0aWVzLHMuZGVmYXVsdC5wbGF0Zm9ybT17ZGVmaW5lUHJvcGVydHk6ITAsaGFzUHJvcGVydHlB
Y2Nlc3NvcnM6ITB9LHMuZGVmYXVsdC5kZWZpbmVQcm9wZXJ0eT1zLmRlZmluZVByb3BlcnR5LHMu
ZGVmYXVsdC53YXRjaEtleT1zLndhdGNoS2V5LHMuZGVmYXVsdC51bndhdGNoS2V5PXMudW53YXRj
aEtleSxzLmRlZmF1bHQucmVtb3ZlQ2hhaW5XYXRjaGVyPXMucmVtb3ZlQ2hhaW5XYXRjaGVyLHMu
ZGVmYXVsdC5fQ2hhaW5Ob2RlPXMuQ2hhaW5Ob2RlLHMuZGVmYXVsdC5maW5pc2hDaGFpbnM9cy5m
aW5pc2hDaGFpbnMscy5kZWZhdWx0LndhdGNoUGF0aD1zLndhdGNoUGF0aCxzLmRlZmF1bHQudW53
YXRjaFBhdGg9cy51bndhdGNoUGF0aCxzLmRlZmF1bHQud2F0Y2g9cy53YXRjaCxzLmRlZmF1bHQu
aXNXYXRjaGluZz1zLmlzV2F0Y2hpbmcscy5kZWZhdWx0LnVud2F0Y2g9cy51bndhdGNoCitzLmRl
ZmF1bHQuZGVzdHJveT1zLmRlc3Ryb3kscy5kZWZhdWx0LmxpYnJhcmllcz1zLmxpYnJhcmllcyxz
LmRlZmF1bHQuT3JkZXJlZFNldD1zLk9yZGVyZWRTZXQscy5kZWZhdWx0Lk1hcD1zLk1hcCxzLmRl
ZmF1bHQuTWFwV2l0aERlZmF1bHQ9cy5NYXBXaXRoRGVmYXVsdCxzLmRlZmF1bHQuZ2V0UHJvcGVy
dGllcz1zLmdldFByb3BlcnRpZXMscy5kZWZhdWx0LnNldFByb3BlcnRpZXM9cy5zZXRQcm9wZXJ0
aWVzLHMuZGVmYXVsdC5leHBhbmRQcm9wZXJ0aWVzPXMuZXhwYW5kUHJvcGVydGllcyxzLmRlZmF1
bHQuTkFNRV9LRVk9aS5OQU1FX0tFWSxzLmRlZmF1bHQuYWRkT2JzZXJ2ZXI9cy5hZGRPYnNlcnZl
cixzLmRlZmF1bHQub2JzZXJ2ZXJzRm9yPXMub2JzZXJ2ZXJzRm9yLHMuZGVmYXVsdC5yZW1vdmVP
YnNlcnZlcj1zLnJlbW92ZU9ic2VydmVyLHMuZGVmYXVsdC5fc3VzcGVuZE9ic2VydmVyPXMuX3N1
c3BlbmRPYnNlcnZlcixzLmRlZmF1bHQuX3N1c3BlbmRPYnNlcnZlcnM9cy5fc3VzcGVuZE9ic2Vy
dmVycyxzLmRlZmF1bHQucmVxdWlyZWQ9cy5yZXF1aXJlZCxzLmRlZmF1bHQuYWxpYXNNZXRob2Q9
cy5hbGlhc01ldGhvZCxzLmRlZmF1bHQub2JzZXJ2ZXI9cy5vYnNlcnZlcixzLmRlZmF1bHQuaW1t
ZWRpYXRlT2JzZXJ2ZXI9cy5faW1tZWRpYXRlT2JzZXJ2ZXIscy5kZWZhdWx0Lm1peGluPXMubWl4
aW4scy5kZWZhdWx0Lk1peGluPXMuTWl4aW4scy5kZWZhdWx0LmJpbmQ9cy5iaW5kLHMuZGVmYXVs
dC5CaW5kaW5nPXMuQmluZGluZyxzLmRlZmF1bHQuaXNHbG9iYWxQYXRoPXMuaXNHbG9iYWxQYXRo
LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzLmRlZmF1bHQsIkVOViIse2dldDpmdW5jdGlvbigpe3Jl
dHVybiBuLkVOVn0sZW51bWVyYWJsZTohMX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzLmRlZmF1
bHQsImxvb2t1cCIse2dldDpmdW5jdGlvbigpe3JldHVybiBuLmNvbnRleHQubG9va3VwfSxzZXQ6
ZnVuY3Rpb24oZSl7bi5jb250ZXh0Lmxvb2t1cD1lfSxlbnVtZXJhYmxlOiExfSkscy5kZWZhdWx0
LkVYVEVORF9QUk9UT1RZUEVTPW4uRU5WLkVYVEVORF9QUk9UT1RZUEVTLE9iamVjdC5kZWZpbmVQ
cm9wZXJ0eShzLmRlZmF1bHQsIkxPR19TVEFDS1RSQUNFX09OX0RFUFJFQ0FUSU9OIix7Z2V0OmZ1
bmN0aW9uKCl7cmV0dXJuIG4uRU5WLkxPR19TVEFDS1RSQUNFX09OX0RFUFJFQ0FUSU9OfSxzZXQ6
ZnVuY3Rpb24oZSl7bi5FTlYuTE9HX1NUQUNLVFJBQ0VfT05fREVQUkVDQVRJT049ISFlfSxlbnVt
ZXJhYmxlOiExfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHMuZGVmYXVsdCwiTE9HX1ZFUlNJT04i
LHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbi5FTlYuTE9HX1ZFUlNJT059LHNldDpmdW5jdGlvbihl
KXtuLkVOVi5MT0dfVkVSU0lPTj0hIWV9LGVudW1lcmFibGU6ITF9KSxPYmplY3QuZGVmaW5lUHJv
cGVydHkocy5kZWZhdWx0LCJMT0dfQklORElOR1MiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbi5F
TlYuTE9HX0JJTkRJTkdTfSxzZXQ6ZnVuY3Rpb24oZSl7bi5FTlYuTE9HX0JJTkRJTkdTPSEhZX0s
ZW51bWVyYWJsZTohMX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzLmRlZmF1bHQsIm9uZXJyb3Ii
LHtnZXQ6cy5nZXRPbmVycm9yLHNldDpzLnNldE9uZXJyb3IsZW51bWVyYWJsZTohMX0pCitPYmpl
Y3QuZGVmaW5lUHJvcGVydHkocy5kZWZhdWx0LCJLIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZ9
fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHMuZGVmYXVsdCwidGVzdGluZyIse2dldDp1LmlzVGVz
dGluZyxzZXQ6dS5zZXRUZXN0aW5nLGVudW1lcmFibGU6ITF9KSxzLmRlZmF1bHQuQmFja2J1cm5l
cj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7cmV0dXJuIGwuZGVmYXVsdC5hcHBseSh0aGlzLGUp
fXJldHVybiBlLnByb3RvdHlwZT1sLmRlZmF1bHQucHJvdG90eXBlLG5ldyBlKGFyZ3VtZW50cyl9
LHMuZGVmYXVsdC5fQmFja2J1cm5lcj1sLmRlZmF1bHQscy5kZWZhdWx0LkxvZ2dlcj1jLmRlZmF1
bHQscy5kZWZhdWx0LlN0cmluZz1wLlN0cmluZyxzLmRlZmF1bHQuT2JqZWN0PXAuT2JqZWN0LHMu
ZGVmYXVsdC5fUmVnaXN0cnlQcm94eU1peGluPXAuUmVnaXN0cnlQcm94eU1peGluLHMuZGVmYXVs
dC5fQ29udGFpbmVyUHJveHlNaXhpbj1wLkNvbnRhaW5lclByb3h5TWl4aW4scy5kZWZhdWx0LmNv
bXBhcmU9cC5jb21wYXJlLHMuZGVmYXVsdC5jb3B5PXAuY29weSxzLmRlZmF1bHQuaXNFcXVhbD1w
LmlzRXF1YWwscy5kZWZhdWx0LmluamVjdD1wLmluamVjdCxzLmRlZmF1bHQuQXJyYXk9cC5BcnJh
eSxzLmRlZmF1bHQuQ29tcGFyYWJsZT1wLkNvbXBhcmFibGUscy5kZWZhdWx0LkVudW1lcmFibGU9
cC5FbnVtZXJhYmxlLHMuZGVmYXVsdC5BcnJheVByb3h5PXAuQXJyYXlQcm94eSxzLmRlZmF1bHQu
T2JqZWN0UHJveHk9cC5PYmplY3RQcm94eSxzLmRlZmF1bHQuQWN0aW9uSGFuZGxlcj1wLkFjdGlv
bkhhbmRsZXIscy5kZWZhdWx0LkNvcmVPYmplY3Q9cC5Db3JlT2JqZWN0LHMuZGVmYXVsdC5OYXRp
dmVBcnJheT1wLk5hdGl2ZUFycmF5LHMuZGVmYXVsdC5Db3B5YWJsZT1wLkNvcHlhYmxlLHMuZGVm
YXVsdC5GcmVlemFibGU9cC5GcmVlemFibGUscy5kZWZhdWx0LkZST1pFTl9FUlJPUj1wLkZST1pF
Tl9FUlJPUixzLmRlZmF1bHQuTXV0YWJsZUVudW1lcmFibGU9cC5NdXRhYmxlRW51bWVyYWJsZSxz
LmRlZmF1bHQuTXV0YWJsZUFycmF5PXAuTXV0YWJsZUFycmF5LHMuZGVmYXVsdC5UYXJnZXRBY3Rp
b25TdXBwb3J0PXAuVGFyZ2V0QWN0aW9uU3VwcG9ydCxzLmRlZmF1bHQuRXZlbnRlZD1wLkV2ZW50
ZWQscy5kZWZhdWx0LlByb21pc2VQcm94eU1peGluPXAuUHJvbWlzZVByb3h5TWl4aW4scy5kZWZh
dWx0Lk9ic2VydmFibGU9cC5PYnNlcnZhYmxlCitzLmRlZmF1bHQudHlwZU9mPXAudHlwZU9mLHMu
ZGVmYXVsdC5pc0FycmF5PXAuaXNBcnJheSxzLmRlZmF1bHQuT2JqZWN0PXAuT2JqZWN0LHMuZGVm
YXVsdC5vbkxvYWQ9cC5vbkxvYWQscy5kZWZhdWx0LnJ1bkxvYWRIb29rcz1wLnJ1bkxvYWRIb29r
cyxzLmRlZmF1bHQuQ29udHJvbGxlcj1wLkNvbnRyb2xsZXIscy5kZWZhdWx0LkNvbnRyb2xsZXJN
aXhpbj1wLkNvbnRyb2xsZXJNaXhpbixzLmRlZmF1bHQuU2VydmljZT1wLlNlcnZpY2Uscy5kZWZh
dWx0Ll9Qcm94eU1peGluPXAuX1Byb3h5TWl4aW4scy5kZWZhdWx0LlJTVlA9cC5SU1ZQLHMuZGVm
YXVsdC5OYW1lc3BhY2U9cC5OYW1lc3BhY2UsXy5lbXB0eT1wLmVtcHR5LF8ubm90RW1wdHk9cC5u
b3RFbXB0eSxfLm5vbmU9cC5ub25lLF8ubm90PXAubm90LF8uYm9vbD1wLmJvb2wsXy5tYXRjaD1w
Lm1hdGNoLF8uZXF1YWw9cC5lcXVhbCxfLmd0PXAuZ3QsXy5ndGU9cC5ndGUsXy5sdD1wLmx0LF8u
bHRlPXAubHRlLF8ub25lV2F5PXAub25lV2F5LF8ucmVhZHM9cC5vbmVXYXksXy5yZWFkT25seT1w
LnJlYWRPbmx5LF8uZGVwcmVjYXRpbmdBbGlhcz1wLmRlcHJlY2F0aW5nQWxpYXMsXy5hbmQ9cC5h
bmQsXy5vcj1wLm9yLF8uYW55PXAuYW55LF8uc3VtPXAuc3VtCitfLm1pbj1wLm1pbixfLm1heD1w
Lm1heCxfLm1hcD1wLm1hcCxfLnNvcnQ9cC5zb3J0LF8uc2V0RGlmZj1wLnNldERpZmYsXy5tYXBC
eT1wLm1hcEJ5LF8uZmlsdGVyPXAuZmlsdGVyLF8uZmlsdGVyQnk9cC5maWx0ZXJCeSxfLnVuaXE9
cC51bmlxLF8udW5pcUJ5PXAudW5pcUJ5LF8udW5pb249cC51bmlvbixfLmludGVyc2VjdD1wLmlu
dGVyc2VjdCxfLmNvbGxlY3Q9cC5jb2xsZWN0LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzLmRlZmF1
bHQsIlNUUklOR1MiLHtjb25maWd1cmFibGU6ITEsZ2V0OnAuZ2V0U3RyaW5ncyxzZXQ6cC5zZXRT
dHJpbmdzfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHMuZGVmYXVsdCwiQk9PVEVEIix7Y29uZmln
dXJhYmxlOiExLGVudW1lcmFibGU6ITEsZ2V0OnAuaXNOYW1lc3BhY2VTZWFyY2hEaXNhYmxlZCxz
ZXQ6cC5zZXROYW1lc3BhY2VTZWFyY2hEaXNhYmxlZH0pLHMuZGVmYXVsdC5Db21wb25lbnQ9Zi5D
b21wb25lbnQsZi5IZWxwZXIuaGVscGVyPWYuaGVscGVyLHMuZGVmYXVsdC5IZWxwZXI9Zi5IZWxw
ZXIscy5kZWZhdWx0LkNoZWNrYm94PWYuQ2hlY2tib3gscy5kZWZhdWx0LlRleHRGaWVsZD1mLlRl
eHRGaWVsZCxzLmRlZmF1bHQuVGV4dEFyZWE9Zi5UZXh0QXJlYSxzLmRlZmF1bHQuTGlua0NvbXBv
bmVudD1mLkxpbmtDb21wb25lbnQsbi5FTlYuRVhURU5EX1BST1RPVFlQRVMuU3RyaW5nJiYoU3Ry
aW5nLnByb3RvdHlwZS5odG1sU2FmZT1mdW5jdGlvbigpe3JldHVybigwLGYuaHRtbFNhZmUpKHRo
aXMpfSkKK3ZhciB3PXMuZGVmYXVsdC5IYW5kbGViYXJzPXMuZGVmYXVsdC5IYW5kbGViYXJzfHx7
fSxFPXMuZGVmYXVsdC5IVE1MQmFycz1zLmRlZmF1bHQuSFRNTEJhcnN8fHt9LHg9dy5VdGlscz13
LlV0aWxzfHx7fQorT2JqZWN0LmRlZmluZVByb3BlcnR5KHcsIlNhZmVTdHJpbmciLHtnZXQ6Zi5f
Z2V0U2FmZVN0cmluZ30pLEUudGVtcGxhdGU9dy50ZW1wbGF0ZT1mLnRlbXBsYXRlLHguZXNjYXBl
RXhwcmVzc2lvbj1mLmVzY2FwZUV4cHJlc3Npb24scC5TdHJpbmcuaHRtbFNhZmU9Zi5odG1sU2Fm
ZSxwLlN0cmluZy5pc0hUTUxTYWZlPWYuaXNIVE1MU2FmZSxPYmplY3QuZGVmaW5lUHJvcGVydHko
cy5kZWZhdWx0LCJURU1QTEFURVMiLHtnZXQ6Zi5nZXRUZW1wbGF0ZXMsc2V0OmYuc2V0VGVtcGxh
dGVzLGNvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiExfSksZS5WRVJTSU9OPWguZGVmYXVsdCxz
LmRlZmF1bHQuVkVSU0lPTj1oLmRlZmF1bHQscy5saWJyYXJpZXMucmVnaXN0ZXJDb3JlTGlicmFy
eSgiRW1iZXIiLGguZGVmYXVsdCkscy5kZWZhdWx0LiQ9ZC5qUXVlcnkscy5kZWZhdWx0LlZpZXdU
YXJnZXRBY3Rpb25TdXBwb3J0PWQuVmlld1RhcmdldEFjdGlvblN1cHBvcnQscy5kZWZhdWx0LlZp
ZXdVdGlscz17aXNTaW1wbGVDbGljazpkLmlzU2ltcGxlQ2xpY2ssZ2V0Vmlld0VsZW1lbnQ6ZC5n
ZXRWaWV3RWxlbWVudCxnZXRWaWV3Qm91bmRzOmQuZ2V0Vmlld0JvdW5kcyxnZXRWaWV3Q2xpZW50
UmVjdHM6ZC5nZXRWaWV3Q2xpZW50UmVjdHMsZ2V0Vmlld0JvdW5kaW5nQ2xpZW50UmVjdDpkLmdl
dFZpZXdCb3VuZGluZ0NsaWVudFJlY3QsZ2V0Um9vdFZpZXdzOmQuZ2V0Um9vdFZpZXdzLGdldENo
aWxkVmlld3M6ZC5nZXRDaGlsZFZpZXdzfSxzLmRlZmF1bHQuVGV4dFN1cHBvcnQ9ZC5UZXh0U3Vw
cG9ydCxzLmRlZmF1bHQuQ29tcG9uZW50TG9va3VwPWQuQ29tcG9uZW50TG9va3VwLHMuZGVmYXVs
dC5FdmVudERpc3BhdGNoZXI9ZC5FdmVudERpc3BhdGNoZXIscy5kZWZhdWx0LkxvY2F0aW9uPW0u
TG9jYXRpb24scy5kZWZhdWx0LkF1dG9Mb2NhdGlvbj1tLkF1dG9Mb2NhdGlvbixzLmRlZmF1bHQu
SGFzaExvY2F0aW9uPW0uSGFzaExvY2F0aW9uLHMuZGVmYXVsdC5IaXN0b3J5TG9jYXRpb249bS5I
aXN0b3J5TG9jYXRpb24scy5kZWZhdWx0Lk5vbmVMb2NhdGlvbj1tLk5vbmVMb2NhdGlvbixzLmRl
ZmF1bHQuY29udHJvbGxlckZvcj1tLmNvbnRyb2xsZXJGb3Iscy5kZWZhdWx0LmdlbmVyYXRlQ29u
dHJvbGxlckZhY3Rvcnk9bS5nZW5lcmF0ZUNvbnRyb2xsZXJGYWN0b3J5LHMuZGVmYXVsdC5nZW5l
cmF0ZUNvbnRyb2xsZXI9bS5nZW5lcmF0ZUNvbnRyb2xsZXIscy5kZWZhdWx0LlJvdXRlckRTTD1t
LlJvdXRlckRTTCxzLmRlZmF1bHQuUm91dGVyPW0uUm91dGVyLHMuZGVmYXVsdC5Sb3V0ZT1tLlJv
dXRlLHMuZGVmYXVsdC5BcHBsaWNhdGlvbj1nLkFwcGxpY2F0aW9uLHMuZGVmYXVsdC5BcHBsaWNh
dGlvbkluc3RhbmNlPWcuQXBwbGljYXRpb25JbnN0YW5jZSxzLmRlZmF1bHQuRW5naW5lPWcuRW5n
aW5lLHMuZGVmYXVsdC5FbmdpbmVJbnN0YW5jZT1nLkVuZ2luZUluc3RhbmNlCitzLmRlZmF1bHQu
RGVmYXVsdFJlc29sdmVyPXMuZGVmYXVsdC5SZXNvbHZlcj1nLlJlc29sdmVyLCgwLHAucnVuTG9h
ZEhvb2tzKSgiRW1iZXIuQXBwbGljYXRpb24iLGcuQXBwbGljYXRpb24pLHMuZGVmYXVsdC5EYXRh
QWRhcHRlcj15LkRhdGFBZGFwdGVyLHMuZGVmYXVsdC5Db250YWluZXJEZWJ1Z0FkYXB0ZXI9eS5D
b250YWluZXJEZWJ1Z0FkYXB0ZXIsKDAsdC5oYXMpKCJlbWJlci10ZW1wbGF0ZS1jb21waWxlciIp
JiYoMCx0LmRlZmF1bHQpKCJlbWJlci10ZW1wbGF0ZS1jb21waWxlciIpLCgwLHQuaGFzKSgiZW1i
ZXItdGVzdGluZyIpJiYoYj0oMCx0LmRlZmF1bHQpKCJlbWJlci10ZXN0aW5nIikscy5kZWZhdWx0
LlRlc3Q9Yi5UZXN0LHMuZGVmYXVsdC5UZXN0LkFkYXB0ZXI9Yi5BZGFwdGVyLHMuZGVmYXVsdC5U
ZXN0LlFVbml0QWRhcHRlcj1iLlFVbml0QWRhcHRlcixzLmRlZmF1bHQuc2V0dXBGb3JUZXN0aW5n
PWIuc2V0dXBGb3JUZXN0aW5nKSwoMCxwLnJ1bkxvYWRIb29rcykoIkVtYmVyIiksZS5kZWZhdWx0
PXMuZGVmYXVsdCxyLklTX05PREU/ci5tb2R1bGUuZXhwb3J0cz1zLmRlZmF1bHQ6bi5jb250ZXh0
LmV4cG9ydHMuRW1iZXI9bi5jb250ZXh0LmV4cG9ydHMuRW09cy5kZWZhdWx0fSksZSgiZW1iZXIv
dmVyc2lvbiIsWyJleHBvcnRzIl0sZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiCitlLmRlZmF1bHQ9
IjIuMTQuMSJ9KSxlKCJub2RlLW1vZHVsZSIsWyJleHBvcnRzIl0sZnVuY3Rpb24oZSl7dmFyIHQ9
Im9iamVjdCI9PXR5cGVvZiBtb2R1bGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBtb2R1bGUucmVxdWly
ZQordD8oZS5yZXF1aXJlPW1vZHVsZS5yZXF1aXJlLGUubW9kdWxlPW1vZHVsZSxlLklTX05PREU9
dCk6KGUucmVxdWlyZT1udWxsLGUubW9kdWxlPW51bGwsZS5JU19OT0RFPXQpfSksZSgicm91dGUt
cmVjb2duaXplciIsWyJleHBvcnRzIl0sZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiCitmdW5jdGlv
biB0KCl7dmFyIGU9ZyhudWxsKQorcmV0dXJuIGUuX189dm9pZCAwLGRlbGV0ZSBlLl9fLGV9ZnVu
Y3Rpb24gbihlLHQscil7cmV0dXJuIGZ1bmN0aW9uKGksbyl7dmFyIHM9ZStpCitpZighbylyZXR1
cm4gbmV3IHkocyx0LHIpCitvKG4ocyx0LHIpKX19ZnVuY3Rpb24gcihlLHQsbil7dmFyIHIsaT0w
Citmb3Iocj0wO3I8ZS5sZW5ndGg7cisrKWkrPWVbcl0ucGF0aC5sZW5ndGgKK3Q9dC5zdWJzdHIo
aSkKK3ZhciBvPXtwYXRoOnQsaGFuZGxlcjpufQorZS5wdXNoKG8pfWZ1bmN0aW9uIGkoZSx0LG4s
byl7dmFyIHMsYSx1LGwsYz10LnJvdXRlcyxwPU9iamVjdC5rZXlzKGMpCitmb3Iocz0wO3M8cC5s
ZW5ndGg7cysrKWE9cFtzXSx1PWUuc2xpY2UoKSxyKHUsYSxjW2FdKSxsPXQuY2hpbGRyZW5bYV0s
bD9pKHUsbCxuLG8pOm4uY2FsbChvLHUpfWZ1bmN0aW9uIG8oZSl7cmV0dXJuIGUuc3BsaXQoIi8i
KS5tYXAocykuam9pbigiLyIpfWZ1bmN0aW9uIHMoZSl7cmV0dXJuIGUubGVuZ3RoPDN8fC0xPT09
ZS5pbmRleE9mKCIlIik/ZTpkZWNvZGVVUklDb21wb25lbnQoZSkucmVwbGFjZShiLGVuY29kZVVS
SUNvbXBvbmVudCl9ZnVuY3Rpb24gYShlKXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KGUpLnJl
cGxhY2UoXyxkZWNvZGVVUklDb21wb25lbnQpfWZ1bmN0aW9uIHUoZSx0KXtpZigib2JqZWN0IiE9
dHlwZW9mIGV8fG51bGw9PT1lKXRocm93IG5ldyBFcnJvcigiWW91IG11c3QgcGFzcyBhbiBvYmpl
Y3QgYXMgdGhlIHNlY29uZCBhcmd1bWVudCB0byBgZ2VuZXJhdGVgLiIpCitpZigheC5jYWxsKGUs
dCkpdGhyb3cgbmV3IEVycm9yKCJZb3UgbXVzdCBwcm92aWRlIHBhcmFtIGAiK3QrImAgdG8gYGdl
bmVyYXRlYC4iKQordmFyIG49ZVt0XSxyPSJzdHJpbmciPT10eXBlb2Ygbj9uOiIiK24KK2lmKDA9
PT1yLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIllvdSBtdXN0IHByb3ZpZGUgYSBwYXJhbSBgIit0
KyJgLiIpCityZXR1cm4gcn1mdW5jdGlvbiBsKGUsdCxuKXt0Lmxlbmd0aD4wJiY0Nz09PXQuY2hh
ckNvZGVBdCgwKSYmKHQ9dC5zdWJzdHIoMSkpCit2YXIgcixpLG8sYSx1PXQuc3BsaXQoIi8iKSxs
PXZvaWQgMCxjPXZvaWQgMAorZm9yKHI9MDtyPHUubGVuZ3RoO3IrKylpPXVbcl0sbz0wLGE9MCxh
PSIiPT09aT80OjU4PT09aS5jaGFyQ29kZUF0KDApPzE6NDI9PT1pLmNoYXJDb2RlQXQoMCk/Mjow
LG89Mjw8YSwxMiZvJiYoaT1pLnNsaWNlKDEpLGw9bHx8W10sbC5wdXNoKGkpLGM9Y3x8W10sYy5w
dXNoKDAhPSg0Jm8pKSksMTQmbyYmblthXSsrLGUucHVzaCh7dHlwZTphLHZhbHVlOnMoaSl9KQor
cmV0dXJue25hbWVzOmx8fFMsc2hvdWxkRGVjb2RlczpjfHxTfX1mdW5jdGlvbiBjKGUsdCxuKXty
ZXR1cm4gZS5jaGFyPT09dCYmZS5uZWdhdGU9PT1ufWZ1bmN0aW9uIHAoZSx0KXtyZXR1cm4gZS5u
ZWdhdGU/ZS5jaGFyIT09dCYmLTEhPT1lLmNoYXI6ZS5jaGFyPT09dHx8LTE9PT1lLmNoYXJ9ZnVu
Y3Rpb24gZihlKXtyZXR1cm4gZS5zb3J0KGZ1bmN0aW9uKGUsdCl7dmFyIG49ZS50eXBlc3x8WzAs
MCwwXSxyPW5bMF0saT1uWzFdLG89blsyXSxzPXQudHlwZXN8fFswLDAsMF0sYT1zWzBdLHU9c1sx
XSxsPXNbMl0KK2lmKG8hPT1sKXJldHVybiBvLWwKK2lmKG8pe2lmKHIhPT1hKXJldHVybiBhLXIK
K2lmKGkhPT11KXJldHVybiB1LWl9cmV0dXJuIGkhPT11P2ktdTpyIT09YT9hLXI6MH0pfWZ1bmN0
aW9uIGgoZSx0KXt2YXIgbixyLGksbz1bXQorZm9yKG49MCxyPWUubGVuZ3RoO248cjtuKyspaT1l
W25dLG89by5jb25jYXQoaS5tYXRjaCh0KSkKK3JldHVybiBvfWZ1bmN0aW9uIGQoZSx0LG4pe3Zh
ciByLGksbyxzLGEsdSxsLGMscCxmPWUuaGFuZGxlcnMsaD1lLnJlZ2V4KCkKK2lmKCFofHwhZil0
aHJvdyBuZXcgRXJyb3IoInN0YXRlIG5vdCBpbml0aWFsaXplZCIpCit2YXIgZD10Lm1hdGNoKGgp
LG09MSxnPW5ldyBrKG4pCitmb3IoZy5sZW5ndGg9Zi5sZW5ndGgscj0wO3I8Zi5sZW5ndGg7cisr
KXtpZihpPWZbcl0sbz1pLm5hbWVzLHM9aS5zaG91bGREZWNvZGVzLGE9VCx1PSExLG8hPT1TJiZz
IT09Uylmb3IobD0wO2w8by5sZW5ndGg7bCsrKXU9ITAsYz1vW2xdLHA9ZCYmZFttKytdLGE9PT1U
JiYoYT17fSksTi5FTkNPREVfQU5EX0RFQ09ERV9QQVRIX1NFR01FTlRTJiZzW2xdP2FbY109cCYm
ZGVjb2RlVVJJQ29tcG9uZW50KHApOmFbY109cAorZ1tyXT17aGFuZGxlcjppLmhhbmRsZXIscGFy
YW1zOmEsaXNEeW5hbWljOnV9fXJldHVybiBnfWZ1bmN0aW9uIG0oZSl7ZT1lLnJlcGxhY2UoL1wr
L2dtLCIlMjAiKQordmFyIHQKK3RyeXt0PWRlY29kZVVSSUNvbXBvbmVudChlKX1jYXRjaChlKXt0
PSIifXJldHVybiB0fXZhciBnPU9iamVjdC5jcmVhdGUseT1mdW5jdGlvbihlLHQsbil7dGhpcy5w
YXRoPWUsdGhpcy5tYXRjaGVyPXQsdGhpcy5kZWxlZ2F0ZT1ufQoreS5wcm90b3R5cGUudG89ZnVu
Y3Rpb24oZSx0KXt2YXIgbj10aGlzLmRlbGVnYXRlCitpZihuJiZuLndpbGxBZGRSb3V0ZSYmKGU9
bi53aWxsQWRkUm91dGUodGhpcy5tYXRjaGVyLnRhcmdldCxlKSksdGhpcy5tYXRjaGVyLmFkZCh0
aGlzLnBhdGgsZSksdCl7aWYoMD09PXQubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiWW91IG11c3Qg
aGF2ZSBhbiBhcmd1bWVudCBpbiB0aGUgZnVuY3Rpb24gcGFzc2VkIHRvIGB0b2AiKQordGhpcy5t
YXRjaGVyLmFkZENoaWxkKHRoaXMucGF0aCxlLHQsdGhpcy5kZWxlZ2F0ZSl9fQordmFyIHY9ZnVu
Y3Rpb24oZSl7dGhpcy5yb3V0ZXM9dCgpLHRoaXMuY2hpbGRyZW49dCgpLHRoaXMudGFyZ2V0PWV9
Cit2LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSx0KXt0aGlzLnJvdXRlc1tlXT10fSx2LnByb3Rv
dHlwZS5hZGRDaGlsZD1mdW5jdGlvbihlLHQscixpKXt2YXIgbz1uZXcgdih0KQordGhpcy5jaGls
ZHJlbltlXT1vCit2YXIgcz1uKGUsbyxpKQoraSYmaS5jb250ZXh0RW50ZXJlZCYmaS5jb250ZXh0
RW50ZXJlZCh0LHMpLHIocyl9Cit2YXIgYj0vJXxcLy9nLF89LyUoPzoyKD86NHw2fEJ8Qyl8Myg/
OkJ8RHxBKXw0MCkvZyx3PS8oXC98XC58XCp8XCt8XD98XHx8XCh8XCl8XFt8XF18XHt8XH18XFwp
L2csRT1BcnJheS5pc0FycmF5LHg9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxDPVtd
CitDWzBdPWZ1bmN0aW9uKGUsdCl7dmFyIG4scixpPXQsbz1lLnZhbHVlCitmb3Iobj0wO248by5s
ZW5ndGg7bisrKXI9by5jaGFyQ29kZUF0KG4pLGk9aS5wdXQociwhMSwhMSkKK3JldHVybiBpfSxD
WzFdPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQucHV0KDQ3LCEwLCEwKX0sQ1syXT1mdW5jdGlvbihl
LHQpe3JldHVybiB0LnB1dCgtMSwhMSwhMCl9LENbNF09ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdH0K
K3ZhciBPPVtdCitPWzBdPWZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlLnJlcGxhY2UodywiXFwk
MSIpfSxPWzFdPWZ1bmN0aW9uKCl7cmV0dXJuIihbXi9dKykifSxPWzJdPWZ1bmN0aW9uKCl7cmV0
dXJuIiguKykifSxPWzRdPWZ1bmN0aW9uKCl7cmV0dXJuIiJ9Cit2YXIgQT1bXQorQVswXT1mdW5j
dGlvbihlKXtyZXR1cm4gZS52YWx1ZX0sQVsxXT1mdW5jdGlvbihlLHQpe3ZhciBuPXUodCxlLnZh
bHVlKQorcmV0dXJuIE4uRU5DT0RFX0FORF9ERUNPREVfUEFUSF9TRUdNRU5UUz9hKG4pOm59LEFb
Ml09ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdSh0LGUudmFsdWUpfSxBWzRdPWZ1bmN0aW9uKCl7cmV0
dXJuIiJ9Cit2YXIgVD1PYmplY3QuZnJlZXplKHt9KSxTPU9iamVjdC5mcmVlemUoW10pLFI9ZnVu
Y3Rpb24oZSx0LG4scixpKXt0aGlzLnN0YXRlcz1lLHRoaXMuaWQ9dCx0aGlzLmNoYXI9bix0aGlz
Lm5lZ2F0ZT1yLHRoaXMubmV4dFN0YXRlcz1pP3Q6bnVsbCx0aGlzLnBhdHRlcm49IiIsdGhpcy5f
cmVnZXg9dm9pZCAwLHRoaXMuaGFuZGxlcnM9dm9pZCAwLHRoaXMudHlwZXM9dm9pZCAwfQorUi5w
cm90b3R5cGUucmVnZXg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVnZXh8fCh0aGlzLl9yZWdl
eD1uZXcgUmVnRXhwKHRoaXMucGF0dGVybikpLHRoaXMuX3JlZ2V4fSxSLnByb3RvdHlwZS5nZXQ9
ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGksbz10aGlzLHM9dGhpcy5uZXh0U3RhdGVzCitpZihudWxs
IT09cylpZihFKHMpKXtmb3Iobj0wO248cy5sZW5ndGg7bisrKWlmKHI9by5zdGF0ZXNbc1tuXV0s
YyhyLGUsdCkpcmV0dXJuIHJ9ZWxzZSBpZihpPXRoaXMuc3RhdGVzW3NdLGMoaSxlLHQpKXJldHVy
biBpfSxSLnByb3RvdHlwZS5wdXQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByCitpZihyPXRoaXMuZ2V0
KGUsdCkpcmV0dXJuIHIKK3ZhciBpPXRoaXMuc3RhdGVzCityZXR1cm4gcj1uZXcgUihpLGkubGVu
Z3RoLGUsdCxuKSxpW2kubGVuZ3RoXT1yLG51bGw9PXRoaXMubmV4dFN0YXRlcz90aGlzLm5leHRT
dGF0ZXM9ci5pZDpFKHRoaXMubmV4dFN0YXRlcyk/dGhpcy5uZXh0U3RhdGVzLnB1c2goci5pZCk6
dGhpcy5uZXh0U3RhdGVzPVt0aGlzLm5leHRTdGF0ZXMsci5pZF0scn0sUi5wcm90b3R5cGUubWF0
Y2g9ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGk9dGhpcyxvPXRoaXMubmV4dFN0YXRlcworaWYoIW8p
cmV0dXJuW10KK3ZhciBzPVtdCitpZihFKG8pKWZvcih0PTA7dDxvLmxlbmd0aDt0Kyspbj1pLnN0
YXRlc1tvW3RdXSxwKG4sZSkmJnMucHVzaChuKQorZWxzZSByPXRoaXMuc3RhdGVzW29dLHAocixl
KSYmcy5wdXNoKHIpCityZXR1cm4gc30KK3ZhciBrPWZ1bmN0aW9uKGUpe3RoaXMubGVuZ3RoPTAs
dGhpcy5xdWVyeVBhcmFtcz1lfHx7fX0KK2sucHJvdG90eXBlLnNwbGljZT1BcnJheS5wcm90b3R5
cGUuc3BsaWNlLGsucHJvdG90eXBlLnNsaWNlPUFycmF5LnByb3RvdHlwZS5zbGljZSxrLnByb3Rv
dHlwZS5wdXNoPUFycmF5LnByb3RvdHlwZS5wdXNoCit2YXIgTj1mdW5jdGlvbigpe3RoaXMubmFt
ZXM9dCgpCit2YXIgZT1bXSxuPW5ldyBSKGUsMCwtMSwhMCwhMSkKK2VbMF09bix0aGlzLnN0YXRl
cz1lLHRoaXMucm9vdFN0YXRlPW59CitOLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSx0KXt2YXIg
bixyLGksbyxzLGEsdT10aGlzLnJvb3RTdGF0ZSxjPSJeIixwPVswLDAsMF0sZj1uZXcgQXJyYXko
ZS5sZW5ndGgpLGg9W10sZD0hMCxtPTAKK2ZvcihuPTA7bjxlLmxlbmd0aDtuKyspe2ZvcihyPWVb
bl0saT1sKGgsci5wYXRoLHApLG89aS5uYW1lcyxzPWkuc2hvdWxkRGVjb2RlczttPGgubGVuZ3Ro
O20rKylhPWhbbV0sNCE9PWEudHlwZSYmKGQ9ITEsdT11LnB1dCg0NywhMSwhMSksYys9Ii8iLHU9
Q1thLnR5cGVdKGEsdSksYys9T1thLnR5cGVdKGEpKQorZltuXT17aGFuZGxlcjpyLmhhbmRsZXIs
bmFtZXM6byxzaG91bGREZWNvZGVzOnN9fWQmJih1PXUucHV0KDQ3LCExLCExKSxjKz0iLyIpLHUu
aGFuZGxlcnM9Zix1LnBhdHRlcm49YysiJCIsdS50eXBlcz1wCit2YXIgZworIm9iamVjdCI9PXR5
cGVvZiB0JiZudWxsIT09dCYmdC5hcyYmKGc9dC5hcyksZyYmKHRoaXMubmFtZXNbZ109e3NlZ21l
bnRzOmgsaGFuZGxlcnM6Zn0pfSxOLnByb3RvdHlwZS5oYW5kbGVyc0Zvcj1mdW5jdGlvbihlKXt2
YXIgdCxuLHI9dGhpcy5uYW1lc1tlXQoraWYoIXIpdGhyb3cgbmV3IEVycm9yKCJUaGVyZSBpcyBu
byByb3V0ZSBuYW1lZCAiK2UpCit2YXIgaT1uZXcgQXJyYXkoci5oYW5kbGVycy5sZW5ndGgpCitm
b3IodD0wO3Q8ci5oYW5kbGVycy5sZW5ndGg7dCsrKW49ci5oYW5kbGVyc1t0XSxpW3RdPW4KK3Jl
dHVybiBpfSxOLnByb3RvdHlwZS5oYXNSb3V0ZT1mdW5jdGlvbihlKXtyZXR1cm4hIXRoaXMubmFt
ZXNbZV19LE4ucHJvdG90eXBlLmdlbmVyYXRlPWZ1bmN0aW9uKGUsdCl7dmFyIG4scixpPXRoaXMu
bmFtZXNbZV0sbz0iIgoraWYoIWkpdGhyb3cgbmV3IEVycm9yKCJUaGVyZSBpcyBubyByb3V0ZSBu
YW1lZCAiK2UpCit2YXIgcz1pLnNlZ21lbnRzCitmb3Iobj0wO248cy5sZW5ndGg7bisrKXI9c1tu
XSw0IT09ci50eXBlJiYobys9Ii8iLG8rPUFbci50eXBlXShyLHQpKQorcmV0dXJuIi8iIT09by5j
aGFyQXQoMCkmJihvPSIvIitvKSx0JiZ0LnF1ZXJ5UGFyYW1zJiYobys9dGhpcy5nZW5lcmF0ZVF1
ZXJ5U3RyaW5nKHQucXVlcnlQYXJhbXMpKSxvfSxOLnByb3RvdHlwZS5nZW5lcmF0ZVF1ZXJ5U3Ry
aW5nPWZ1bmN0aW9uKGUpe3ZhciB0LG4scixpLG8scyxhPVtdLHU9T2JqZWN0LmtleXMoZSkKK2Zv
cih1LnNvcnQoKSx0PTA7dDx1Lmxlbmd0aDt0KyspaWYobj11W3RdLG51bGwhPShyPWVbbl0pKWlm
KGk9ZW5jb2RlVVJJQ29tcG9uZW50KG4pLEUocikpZm9yKG89MDtvPHIubGVuZ3RoO28rKylzPW4r
IltdPSIrZW5jb2RlVVJJQ29tcG9uZW50KHJbb10pLGEucHVzaChzKQorZWxzZSBpKz0iPSIrZW5j
b2RlVVJJQ29tcG9uZW50KHIpLGEucHVzaChpKQorcmV0dXJuIDA9PT1hLmxlbmd0aD8iIjoiPyIr
YS5qb2luKCImIil9LE4ucHJvdG90eXBlLnBhcnNlUXVlcnlTdHJpbmc9ZnVuY3Rpb24oZSl7dmFy
IHQsbixyLGksbyxzLGE9ZS5zcGxpdCgiJiIpLHU9e30KK2Zvcih0PTA7dDxhLmxlbmd0aDt0Kysp
bj1hW3RdLnNwbGl0KCI9Iikscj1tKG5bMF0pLGk9ci5sZW5ndGgsbz0hMSxzPXZvaWQgMCwxPT09
bi5sZW5ndGg/cz0idHJ1ZSI6KGk+MiYmIltdIj09PXIuc2xpY2UoaS0yKSYmKG89ITAscj1yLnNs
aWNlKDAsaS0yKSx1W3JdfHwodVtyXT1bXSkpLHM9blsxXT9tKG5bMV0pOiIiKSxvP3Vbcl0ucHVz
aChzKTp1W3JdPXMKK3JldHVybiB1fSxOLnByb3RvdHlwZS5yZWNvZ25pemU9ZnVuY3Rpb24oZSl7
dmFyIHQsbixyLGkscz1bdGhpcy5yb290U3RhdGVdLGE9e30sdT0hMSxsPWUuaW5kZXhPZigiIyIp
Oy0xIT09bCYmKGU9ZS5zdWJzdHIoMCxsKSkKK3ZhciBjPWUuaW5kZXhPZigiPyIpOy0xIT09YyYm
KG49ZS5zdWJzdHIoYysxLGUubGVuZ3RoKSxlPWUuc3Vic3RyKDAsYyksYT10aGlzLnBhcnNlUXVl
cnlTdHJpbmcobikpLCIvIiE9PWUuY2hhckF0KDApJiYoZT0iLyIrZSkKK3ZhciBwPWUKK04uRU5D
T0RFX0FORF9ERUNPREVfUEFUSF9TRUdNRU5UUz9lPW8oZSk6KGU9ZGVjb2RlVVJJKGUpLHA9ZGVj
b2RlVVJJKHApKQordmFyIG09ZS5sZW5ndGgKK2ZvcihtPjEmJiIvIj09PWUuY2hhckF0KG0tMSkm
JihlPWUuc3Vic3RyKDAsbS0xKSxwPXAuc3Vic3RyKDAscC5sZW5ndGgtMSksdT0hMCkscj0wO3I8
ZS5sZW5ndGgmJihzPWgocyxlLmNoYXJDb2RlQXQocikpLHMubGVuZ3RoKTtyKyspO3ZhciBnPVtd
Citmb3IoaT0wO2k8cy5sZW5ndGg7aSsrKXNbaV0uaGFuZGxlcnMmJmcucHVzaChzW2ldKQorcz1m
KGcpCit2YXIgeT1nWzBdCityZXR1cm4geSYmeS5oYW5kbGVycyYmKHUmJnkucGF0dGVybiYmIigu
KykkIj09PXkucGF0dGVybi5zbGljZSgtNSkmJihwKz0iLyIpLHQ9ZCh5LHAsYSkpLHR9LE4uVkVS
U0lPTj0iMC4zLjMiLE4uRU5DT0RFX0FORF9ERUNPREVfUEFUSF9TRUdNRU5UUz0hMCxOLk5vcm1h
bGl6ZXI9e25vcm1hbGl6ZVNlZ21lbnQ6cyxub3JtYWxpemVQYXRoOm8sZW5jb2RlUGF0aFNlZ21l
bnQ6YX0sTi5wcm90b3R5cGUubWFwPWZ1bmN0aW9uKGUsdCl7dmFyIHI9bmV3IHYKK2UobigiIixy
LHRoaXMuZGVsZWdhdGUpKSxpKFtdLHIsZnVuY3Rpb24oZSl7dD90KHRoaXMsZSk6dGhpcy5hZGQo
ZSl9LHRoaXMpfSxlLmRlZmF1bHQ9Tn0pLGUoInJvdXRlciIsWyJleHBvcnRzIiwicm91dGUtcmVj
b2duaXplciIsInJzdnAiXSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiCitmdW5jdGlvbiBy
KGUpe3JldHVybigib2JqZWN0Ij09dHlwZW9mIGUmJm51bGwhPT1lfHwiZnVuY3Rpb24iPT10eXBl
b2YgZSkmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLnRoZW59ZnVuY3Rpb24gaShlLHQpe2Zvcih2YXIg
biBpbiB0KXQuaGFzT3duUHJvcGVydHkobikmJihlW25dPXRbbl0pfWZ1bmN0aW9uIG8oZSl7dmFy
IHQsbixyPWUmJmUubGVuZ3RoCityZXR1cm4gciYmcj4wJiZlW3ItMV0mJmVbci0xXS5oYXNPd25Q
cm9wZXJ0eSgicXVlcnlQYXJhbXMiKT8obj1lW3ItMV0ucXVlcnlQYXJhbXMsdD1ILmNhbGwoZSww
LHItMSksW3Qsbl0pOltlLG51bGxdfWZ1bmN0aW9uIHMoZSl7dmFyIHQsbgorZm9yKHZhciByIGlu
IGUpaWYoIm51bWJlciI9PXR5cGVvZiBlW3JdKWVbcl09IiIrZVtyXQorZWxzZSBpZihWKGVbcl0p
KWZvcih0PTAsbj1lW3JdLmxlbmd0aDt0PG47dCsrKWVbcl1bdF09IiIrZVtyXVt0XX1mdW5jdGlv
biBhKGUsdCxuKXtlLmxvZyYmKDM9PT1hcmd1bWVudHMubGVuZ3RoP2UubG9nKCJUcmFuc2l0aW9u
ICMiK3QrIjogIituKToobj10LGUubG9nKG4pKSl9ZnVuY3Rpb24gdShlLHQpe3ZhciBuPWFyZ3Vt
ZW50cworcmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBpPUguY2FsbChuLDIpCityZXR1cm4gaS5wdXNo
KHIpLHQuYXBwbHkoZSxpKX19ZnVuY3Rpb24gbChlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGV8
fGUgaW5zdGFuY2VvZiBTdHJpbmd8fCJudW1iZXIiPT10eXBlb2YgZXx8ZSBpbnN0YW5jZW9mIE51
bWJlcn1mdW5jdGlvbiBjKGUsdCl7dmFyIG4scgorZm9yKG49MCxyPWUubGVuZ3RoO248ciYmITEh
PT10KGVbbl0pO24rKyk7fWZ1bmN0aW9uIHAoZSx0LG4scil7ZnVuY3Rpb24gaShlLHQsbil7bi5l
dmVudHNbZV0uYXBwbHkobix0KX1pZihlLnRyaWdnZXJFdmVudClyZXR1cm4gdm9pZCBlLnRyaWdn
ZXJFdmVudCh0LG4scikKK3ZhciBvLHMsYSxsPXIuc2hpZnQoKQoraWYoIXQpe2lmKG4pcmV0dXJu
Cit0aHJvdyBuZXcgRXJyb3IoIkNvdWxkIG5vdCB0cmlnZ2VyIGV2ZW50ICciK2wrIicuIFRoZXJl
IGFyZSBubyBhY3RpdmUgaGFuZGxlcnMiKX12YXIgYz0hMQorZm9yKG89dC5sZW5ndGgtMTtvPj0w
O28tLSlpZihzPXRbb10sYT1zLmhhbmRsZXIpe2lmKGEuZXZlbnRzJiZhLmV2ZW50c1tsXSl7aWYo
ITAhPT1hLmV2ZW50c1tsXS5hcHBseShhLHIpKXJldHVybgorYz0hMH19ZWxzZSBzLmhhbmRsZXJQ
cm9taXNlLnRoZW4odShudWxsLGksbCxyKSkKK2lmKCJlcnJvciI9PT1sJiYiVW5yZWNvZ25pemVk
VVJMRXJyb3IiPT09clswXS5uYW1lKXRocm93IHJbMF0KK2lmKCFjJiYhbil0aHJvdyBuZXcgRXJy
b3IoIk5vdGhpbmcgaGFuZGxlZCB0aGUgZXZlbnQgJyIrbCsiJy4iKX1mdW5jdGlvbiBmKGUsdCl7
dmFyIG4scixvPXthbGw6e30sY2hhbmdlZDp7fSxyZW1vdmVkOnt9fQoraShvLmFsbCx0KQordmFy
IGE9ITEKK3MoZSkscyh0KQorZm9yKHZhciB1IGluIGUpZS5oYXNPd25Qcm9wZXJ0eSh1KSYmKHQu
aGFzT3duUHJvcGVydHkodSl8fChhPSEwLG8ucmVtb3ZlZFt1XT1lW3VdKSkKK2Zvcih1IGluIHQp
aWYodC5oYXNPd25Qcm9wZXJ0eSh1KSlpZihWKGVbdV0pJiZWKHRbdV0pKWlmKGVbdV0ubGVuZ3Ro
IT09dFt1XS5sZW5ndGgpby5jaGFuZ2VkW3VdPXRbdV0sYT0hMAorZWxzZSBmb3Iobj0wLHI9ZVt1
XS5sZW5ndGg7bjxyO24rKyllW3VdW25dIT09dFt1XVtuXSYmKG8uY2hhbmdlZFt1XT10W3VdLGE9
ITApCitlbHNlIGVbdV0hPT10W3VdJiYoby5jaGFuZ2VkW3VdPXRbdV0sYT0hMCkKK3JldHVybiBh
JiZvfWZ1bmN0aW9uIGgoZSl7cmV0dXJuIlJvdXRlcjogIitlfWZ1bmN0aW9uIGQoZSx0KXtmdW5j
dGlvbiBuKHQpe2UuY2FsbCh0aGlzLHR8fHt9KX1yZXR1cm4gbi5wcm90b3R5cGU9VyhlLnByb3Rv
dHlwZSksaShuLnByb3RvdHlwZSx0KSxufWZ1bmN0aW9uIG0oZSx0KXtpZihlKXt2YXIgbj0iXyIr
dAorcmV0dXJuIGVbbl0mJm58fGVbdF0mJnR9fWZ1bmN0aW9uIGcoZSx0LG4scil7dmFyIGk9bShl
LHQpCityZXR1cm4gaSYmZVtpXS5jYWxsKGUsbixyKX1mdW5jdGlvbiB5KGUsdCxuKXt2YXIgcj1t
KGUsdCkKK2lmKHIpcmV0dXJuIDA9PT1uLmxlbmd0aD9lW3JdLmNhbGwoZSk6MT09PW4ubGVuZ3Ro
P2Vbcl0uY2FsbChlLG5bMF0pOjI9PT1uLmxlbmd0aD9lW3JdLmNhbGwoZSxuWzBdLG5bMV0pOmVb
cl0uYXBwbHkoZSxuKX1mdW5jdGlvbiB2KCl7dGhpcy5oYW5kbGVySW5mb3M9W10sdGhpcy5xdWVy
eVBhcmFtcz17fSx0aGlzLnBhcmFtcz17fX1mdW5jdGlvbiBiKGUpe2lmKCEodGhpcyBpbnN0YW5j
ZW9mIGIpKXJldHVybiBuZXcgYihlKQordmFyIHQ9RXJyb3IuY2FsbCh0aGlzLGUpCitFcnJvci5j
YXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLGIpOnRoaXMuc3Rh
Y2s9dC5zdGFjayx0aGlzLmRlc2NyaXB0aW9uPXQuZGVzY3JpcHRpb24sdGhpcy5maWxlTmFtZT10
LmZpbGVOYW1lLHRoaXMubGluZU51bWJlcj10LmxpbmVOdW1iZXIsdGhpcy5tZXNzYWdlPXQubWVz
c2FnZXx8IlRyYW5zaXRpb25BYm9ydGVkIix0aGlzLm5hbWU9IlRyYW5zaXRpb25BYm9ydGVkIix0
aGlzLm51bWJlcj10Lm51bWJlcix0aGlzLmNvZGU9dC5jb2RlfWZ1bmN0aW9uIF8oZSx0LHIsaSxv
KXtmdW5jdGlvbiBzKCl7aWYoYy5pc0Fib3J0ZWQpcmV0dXJuIG4uUHJvbWlzZS5yZWplY3Qodm9p
ZCAwLGgoIlRyYW5zaXRpb24gYWJvcnRlZCAtIHJlamVjdCIpKX12YXIgYSx1LGwsYz10aGlzCitp
Zih0aGlzLnN0YXRlPXJ8fGUuc3RhdGUsdGhpcy5pbnRlbnQ9dCx0aGlzLnJvdXRlcj1lLHRoaXMu
ZGF0YT10aGlzLmludGVudCYmdGhpcy5pbnRlbnQuZGF0YXx8e30sdGhpcy5yZXNvbHZlZE1vZGVs
cz17fSx0aGlzLnF1ZXJ5UGFyYW1zPXt9LHRoaXMucHJvbWlzZT12b2lkIDAsdGhpcy5lcnJvcj12
b2lkIDAsdGhpcy5wYXJhbXM9dm9pZCAwLHRoaXMuaGFuZGxlckluZm9zPXZvaWQgMCx0aGlzLnRh
cmdldE5hbWU9dm9pZCAwLHRoaXMucGl2b3RIYW5kbGVyPXZvaWQgMCx0aGlzLnNlcXVlbmNlPXZv
aWQgMCx0aGlzLmlzQWJvcnRlZD0hMSx0aGlzLmlzQWN0aXZlPSEwLGkpcmV0dXJuIHRoaXMucHJv
bWlzZT1uLlByb21pc2UucmVqZWN0KGkpLHZvaWQodGhpcy5lcnJvcj1pKQoraWYodGhpcy5pc0Nh
dXNlZEJ5QWJvcnRpbmdUcmFuc2l0aW9uPSEhbyx0aGlzLmlzQ2F1c2VkQnlJbml0aWFsVHJhbnNp
dGlvbj1vJiYoby5pc0NhdXNlZEJ5SW5pdGlhbFRyYW5zaXRpb258fDA9PT1vLnNlcXVlbmNlKSxy
KXtmb3IodGhpcy5wYXJhbXM9ci5wYXJhbXMsdGhpcy5xdWVyeVBhcmFtcz1yLnF1ZXJ5UGFyYW1z
LHRoaXMuaGFuZGxlckluZm9zPXIuaGFuZGxlckluZm9zLGE9ci5oYW5kbGVySW5mb3MubGVuZ3Ro
LGEmJih0aGlzLnRhcmdldE5hbWU9ci5oYW5kbGVySW5mb3NbYS0xXS5uYW1lKSx1PTA7dTxhJiYo
bD1yLmhhbmRsZXJJbmZvc1t1XSxsLmlzUmVzb2x2ZWQpOysrdSl0aGlzLnBpdm90SGFuZGxlcj1s
LmhhbmRsZXIKK3RoaXMuc2VxdWVuY2U9ZS5jdXJyZW50U2VxdWVuY2UrKyx0aGlzLnByb21pc2U9
ci5yZXNvbHZlKHMsdGhpcykuY2F0Y2godyhjKSxoKCJIYW5kbGUgQWJvcnQiKSl9ZWxzZSB0aGlz
LnByb21pc2U9bi5Qcm9taXNlLnJlc29sdmUodGhpcy5zdGF0ZSksdGhpcy5wYXJhbXM9e319ZnVu
Y3Rpb24gdyhlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQud2FzQWJvcnRlZHx8ZS5pc0Fi
b3J0ZWQ/bi5Qcm9taXNlLnJlamVjdChFKGUpKTooZS50cmlnZ2VyKCJlcnJvciIsdC5lcnJvcixl
LHQuaGFuZGxlcldpdGhFcnJvciksZS5hYm9ydCgpLG4uUHJvbWlzZS5yZWplY3QodC5lcnJvcikp
fX1mdW5jdGlvbiBFKGUpe3JldHVybiBhKGUucm91dGVyLGUuc2VxdWVuY2UsImRldGVjdGVkIGFi
b3J0LiIpLG5ldyBifWZ1bmN0aW9uIHgoZSl7dGhpcy5pbml0aWFsaXplKGUpLHRoaXMuZGF0YT10
aGlzLmRhdGF8fHt9fWZ1bmN0aW9uIEMoZSl7dmFyIHQsbz1lfHx7fQordGhpcy5faGFuZGxlcj0k
LG8uaGFuZGxlciYmKHQ9by5uYW1lLHRoaXMuaGFuZGxlclByb21pc2U9bi5Qcm9taXNlLnJlc29s
dmUoby5oYW5kbGVyKSxyKG8uaGFuZGxlcik/KHRoaXMuaGFuZGxlclByb21pc2U9dGhpcy5oYW5k
bGVyUHJvbWlzZS50aGVuKHUodGhpcyx0aGlzLnVwZGF0ZUhhbmRsZXIpKSxvLmhhbmRsZXI9dm9p
ZCAwKTpvLmhhbmRsZXImJihvLmhhbmRsZXIuX2hhbmRsZXJOYW1lPXQpKSxpKHRoaXMsbyksdGhp
cy5pbml0aWFsaXplKG8pfWZ1bmN0aW9uIE8oZSx0KXtpZighZV4hdClyZXR1cm4hMQoraWYoIWUp
cmV0dXJuITAKK2Zvcih2YXIgbiBpbiBlKWlmKGUuaGFzT3duUHJvcGVydHkobikmJmVbbl0hPT10
W25dKXJldHVybiExCityZXR1cm4hMH1mdW5jdGlvbiBBKGUsdCl7dmFyIG49QS5rbGFzc2VzW2Vd
LHI9bmV3IG4odHx8e30pCityZXR1cm4gci5mYWN0b3J5PUEscn1mdW5jdGlvbiBUKGUpe2lmKCEo
dGhpcyBpbnN0YW5jZW9mIFQpKXJldHVybiBuZXcgVChlKQordmFyIHQ9RXJyb3IuY2FsbCh0aGlz
LGUpCitFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlz
LFQpOnRoaXMuc3RhY2s9dC5zdGFjayx0aGlzLmRlc2NyaXB0aW9uPXQuZGVzY3JpcHRpb24sdGhp
cy5maWxlTmFtZT10LmZpbGVOYW1lLHRoaXMubGluZU51bWJlcj10LmxpbmVOdW1iZXIsdGhpcy5t
ZXNzYWdlPXQubWVzc2FnZXx8IlVucmVjb2duaXplZFVSTCIsdGhpcy5uYW1lPSJVbnJlY29nbml6
ZWRVUkxFcnJvciIsdGhpcy5udW1iZXI9dC5udW1iZXIsdGhpcy5jb2RlPXQuY29kZX1mdW5jdGlv
biBTKGUpe3ZhciBuPWV8fHt9Cit0aGlzLmdldEhhbmRsZXI9bi5nZXRIYW5kbGVyfHx0aGlzLmdl
dEhhbmRsZXIsdGhpcy5nZXRTZXJpYWxpemVyPW4uZ2V0U2VyaWFsaXplcnx8dGhpcy5nZXRTZXJp
YWxpemVyLHRoaXMudXBkYXRlVVJMPW4udXBkYXRlVVJMfHx0aGlzLnVwZGF0ZVVSTCx0aGlzLnJl
cGxhY2VVUkw9bi5yZXBsYWNlVVJMfHx0aGlzLnJlcGxhY2VVUkwsdGhpcy5kaWRUcmFuc2l0aW9u
PW4uZGlkVHJhbnNpdGlvbnx8dGhpcy5kaWRUcmFuc2l0aW9uLHRoaXMud2lsbFRyYW5zaXRpb249
bi53aWxsVHJhbnNpdGlvbnx8dGhpcy53aWxsVHJhbnNpdGlvbix0aGlzLmRlbGVnYXRlPW4uZGVs
ZWdhdGV8fHRoaXMuZGVsZWdhdGUsdGhpcy50cmlnZ2VyRXZlbnQ9bi50cmlnZ2VyRXZlbnR8fHRo
aXMudHJpZ2dlckV2ZW50LHRoaXMubG9nPW4ubG9nfHx0aGlzLmxvZyx0aGlzLmRzbENhbGxCYWNr
cz1bXSx0aGlzLnN0YXRlPXZvaWQgMCx0aGlzLmFjdGl2ZVRyYW5zaXRpb249dm9pZCAwLHRoaXMu
X2NoYW5nZWRRdWVyeVBhcmFtcz12b2lkIDAsdGhpcy5vbGRTdGF0ZT12b2lkIDAsdGhpcy5jdXJy
ZW50SGFuZGxlckluZm9zPXZvaWQgMCx0aGlzLnN0YXRlPXZvaWQgMCx0aGlzLmN1cnJlbnRTZXF1
ZW5jZT0wLHRoaXMucmVjb2duaXplcj1uZXcgdC5kZWZhdWx0LHRoaXMucmVzZXQoKX1mdW5jdGlv
biBSKGUsdCl7dmFyIG4scj0hIXRoaXMuYWN0aXZlVHJhbnNpdGlvbixpPXI/dGhpcy5hY3RpdmVU
cmFuc2l0aW9uLnN0YXRlOnRoaXMuc3RhdGUsbz1lLmFwcGx5VG9TdGF0ZShpLHRoaXMucmVjb2du
aXplcix0aGlzLmdldEhhbmRsZXIsdCx0aGlzLmdldFNlcmlhbGl6ZXIpLHM9ZihpLnF1ZXJ5UGFy
YW1zLG8ucXVlcnlQYXJhbXMpCityZXR1cm4gTShvLmhhbmRsZXJJbmZvcyxpLmhhbmRsZXJJbmZv
cyk/cyYmKG49dGhpcy5xdWVyeVBhcmFtc1RyYW5zaXRpb24ocyxyLGksbykpPyhuLnF1ZXJ5UGFy
YW1zT25seT0hMCxuKTp0aGlzLmFjdGl2ZVRyYW5zaXRpb258fG5ldyBfKHRoaXMpOnQ/dm9pZCBO
KHRoaXMsbyk6KG49bmV3IF8odGhpcyxlLG8sdm9pZCAwLHRoaXMuYWN0aXZlVHJhbnNpdGlvbiks
RihvLmhhbmRsZXJJbmZvcyxpLmhhbmRsZXJJbmZvcykmJihuLnF1ZXJ5UGFyYW1zT25seT0hMCks
dGhpcy5hY3RpdmVUcmFuc2l0aW9uJiZ0aGlzLmFjdGl2ZVRyYW5zaXRpb24uYWJvcnQoKSx0aGlz
LmFjdGl2ZVRyYW5zaXRpb249bixuLnByb21pc2U9bi5wcm9taXNlLnRoZW4oZnVuY3Rpb24oZSl7
cmV0dXJuIEwobixlLnN0YXRlKX0sbnVsbCxoKCJTZXR0bGUgdHJhbnNpdGlvbiBwcm9taXNlIHdo
ZW4gdHJhbnNpdGlvbiBpcyBmaW5hbGl6ZWQiKSkscnx8Qih0aGlzLG8sbiksayh0aGlzLG8scyks
bil9ZnVuY3Rpb24gayhlLHQsbil7biYmKGUuX2NoYW5nZWRRdWVyeVBhcmFtcz1uLmFsbCxwKGUs
dC5oYW5kbGVySW5mb3MsITAsWyJxdWVyeVBhcmFtc0RpZENoYW5nZSIsbi5jaGFuZ2VkLG4uYWxs
LG4ucmVtb3ZlZF0pLGUuX2NoYW5nZWRRdWVyeVBhcmFtcz1udWxsKX1mdW5jdGlvbiBOKGUsdCxu
KXt2YXIgcixpLG8scz1qKGUuc3RhdGUsdCkKK2ZvcihyPTAsaT1zLmV4aXRlZC5sZW5ndGg7cjxp
O3IrKylvPXMuZXhpdGVkW3JdLmhhbmRsZXIsZGVsZXRlIG8uY29udGV4dCxnKG8sInJlc2V0Iiwh
MCxuKSxnKG8sImV4aXQiLG4pCit2YXIgYT1lLm9sZFN0YXRlPWUuc3RhdGUKK2Uuc3RhdGU9dAor
dmFyIHU9ZS5jdXJyZW50SGFuZGxlckluZm9zPXMudW5jaGFuZ2VkLnNsaWNlKCkKK3RyeXtmb3Io
cj0wLGk9cy5yZXNldC5sZW5ndGg7cjxpO3IrKylvPXMucmVzZXRbcl0uaGFuZGxlcixnKG8sInJl
c2V0IiwhMSxuKQorZm9yKHI9MCxpPXMudXBkYXRlZENvbnRleHQubGVuZ3RoO3I8aTtyKyspUCh1
LHMudXBkYXRlZENvbnRleHRbcl0sITEsbikKK2ZvcihyPTAsaT1zLmVudGVyZWQubGVuZ3RoO3I8
aTtyKyspUCh1LHMuZW50ZXJlZFtyXSwhMCxuKX1jYXRjaCh0KXt0aHJvdyBlLnN0YXRlPWEsZS5j
dXJyZW50SGFuZGxlckluZm9zPWEuaGFuZGxlckluZm9zLHR9ZS5zdGF0ZS5xdWVyeVBhcmFtcz1V
KGUsdSx0LnF1ZXJ5UGFyYW1zLG4pfWZ1bmN0aW9uIFAoZSx0LG4scil7ZnVuY3Rpb24gaShpKXtp
ZihuJiZnKGksImVudGVyIixyKSxyJiZyLmlzQWJvcnRlZCl0aHJvdyBuZXcgYgoraWYoaS5jb250
ZXh0PXMsZyhpLCJjb250ZXh0RGlkQ2hhbmdlIiksZyhpLCJzZXR1cCIscyxyKSxyJiZyLmlzQWJv
cnRlZCl0aHJvdyBuZXcgYgorZS5wdXNoKHQpfXZhciBvPXQuaGFuZGxlcixzPXQuY29udGV4dAor
cmV0dXJuIG8/aShvKTp0LmhhbmRsZXJQcm9taXNlPXQuaGFuZGxlclByb21pc2UudGhlbihpKSwh
MH1mdW5jdGlvbiBqKGUsdCl7dmFyIG4scixpLG8scyxhPWUuaGFuZGxlckluZm9zLHU9dC5oYW5k
bGVySW5mb3MsbD17dXBkYXRlZENvbnRleHQ6W10sZXhpdGVkOltdLGVudGVyZWQ6W10sdW5jaGFu
Z2VkOltdLHJlc2V0OnZvaWQgMH0sYz0hMQorZm9yKG89MCxzPXUubGVuZ3RoO288cztvKyspbj1h
W29dLHI9dVtvXSxuJiZuLmhhbmRsZXI9PT1yLmhhbmRsZXJ8fChpPSEwKSxpPyhsLmVudGVyZWQu
cHVzaChyKSxuJiZsLmV4aXRlZC51bnNoaWZ0KG4pKTpjfHxuLmNvbnRleHQhPT1yLmNvbnRleHQ/
KGM9ITAsbC51cGRhdGVkQ29udGV4dC5wdXNoKHIpKTpsLnVuY2hhbmdlZC5wdXNoKG4pCitmb3Io
bz11Lmxlbmd0aCxzPWEubGVuZ3RoO288cztvKyspbC5leGl0ZWQudW5zaGlmdChhW29dKQorcmV0
dXJuIGwucmVzZXQ9bC51cGRhdGVkQ29udGV4dC5zbGljZSgpLGwucmVzZXQucmV2ZXJzZSgpLGx9
ZnVuY3Rpb24gRChlLHQpe3ZhciBuLHIsbyxzLGEsdSxsPWUudXJsTWV0aG9kCitpZihsKXt2YXIg
Yz1lLnJvdXRlcixwPXQuaGFuZGxlckluZm9zLGY9cFtwLmxlbmd0aC0xXS5uYW1lLGg9e30KK2Zv
cihuPXAubGVuZ3RoLTE7bj49MDstLW4pcj1wW25dLGkoaCxyLnBhcmFtcyksci5oYW5kbGVyLmlu
YWNjZXNzaWJsZUJ5VVJMJiYobD1udWxsKQorbCYmKGgucXVlcnlQYXJhbXM9ZS5fdmlzaWJsZVF1
ZXJ5UGFyYW1zfHx0LnF1ZXJ5UGFyYW1zLG89Yy5yZWNvZ25pemVyLmdlbmVyYXRlKGYsaCkscz1l
LmlzQ2F1c2VkQnlJbml0aWFsVHJhbnNpdGlvbixhPSJyZXBsYWNlIj09PWwmJiFlLmlzQ2F1c2Vk
QnlBYm9ydGluZ1RyYW5zaXRpb24sdT1lLnF1ZXJ5UGFyYW1zT25seSYmInJlcGxhY2UiPT09bCxz
fHxhfHx1P2MucmVwbGFjZVVSTChvKTpjLnVwZGF0ZVVSTChvKSl9fWZ1bmN0aW9uIEwoZSx0KXt2
YXIgcixpLG8KK3RyeXtyZXR1cm4gYShlLnJvdXRlcixlLnNlcXVlbmNlLCJSZXNvbHZlZCBhbGwg
bW9kZWxzIG9uIGRlc3RpbmF0aW9uIHJvdXRlOyBmaW5hbGl6aW5nIHRyYW5zaXRpb24uIiksKHI9
ZS5yb3V0ZXIsaT10LmhhbmRsZXJJbmZvcyxOKHIsdCxlKSxlLmlzQWJvcnRlZCk/KHIuc3RhdGUu
aGFuZGxlckluZm9zPXIuY3VycmVudEhhbmRsZXJJbmZvcyxuLlByb21pc2UucmVqZWN0KEUoZSkp
KTooRChlLHQsZS5pbnRlbnQudXJsKSxlLmlzQWN0aXZlPSExLHIuYWN0aXZlVHJhbnNpdGlvbj1u
dWxsLHAocixyLmN1cnJlbnRIYW5kbGVySW5mb3MsITAsWyJkaWRUcmFuc2l0aW9uIl0pLHIuZGlk
VHJhbnNpdGlvbiYmci5kaWRUcmFuc2l0aW9uKHIuY3VycmVudEhhbmRsZXJJbmZvcyksYShyLGUu
c2VxdWVuY2UsIlRSQU5TSVRJT04gQ09NUExFVEUuIiksaVtpLmxlbmd0aC0xXS5oYW5kbGVyKX1j
YXRjaCh0KXt0aHJvdyB0IGluc3RhbmNlb2YgYnx8KG89ZS5zdGF0ZS5oYW5kbGVySW5mb3MsZS50
cmlnZ2VyKCEwLCJlcnJvciIsdCxlLG9bby5sZW5ndGgtMV0uaGFuZGxlciksZS5hYm9ydCgpKSx0
fX1mdW5jdGlvbiBJKGUsdCxuKXt2YXIgcixpPXRbMF18fCIvIixvPXRbdC5sZW5ndGgtMV0scz17
fQorbyYmby5oYXNPd25Qcm9wZXJ0eSgicXVlcnlQYXJhbXMiKSYmKHM9WC5jYWxsKHQpLnF1ZXJ5
UGFyYW1zKQordmFyIHUKK3JldHVybiAwPT09dC5sZW5ndGg/KGEoZSwiVXBkYXRpbmcgcXVlcnkg
cGFyYW1zIikscj1lLnN0YXRlLmhhbmRsZXJJbmZvcyx1PW5ldyBZKHtuYW1lOnJbci5sZW5ndGgt
MV0ubmFtZSxjb250ZXh0czpbXSxxdWVyeVBhcmFtczpzfSkpOiIvIj09PWkuY2hhckF0KDApPyhh
KGUsIkF0dGVtcHRpbmcgVVJMIHRyYW5zaXRpb24gdG8gIitpKSx1PW5ldyBKKHt1cmw6aX0pKToo
YShlLCJBdHRlbXB0aW5nIHRyYW5zaXRpb24gdG8gIitpKSx1PW5ldyBZKHtuYW1lOnRbMF0sY29u
dGV4dHM6SC5jYWxsKHQsMSkscXVlcnlQYXJhbXM6c30pKSxlLnRyYW5zaXRpb25CeUludGVudCh1
LG4pfWZ1bmN0aW9uIE0oZSx0KXt2YXIgbixyCitpZihlLmxlbmd0aCE9PXQubGVuZ3RoKXJldHVy
biExCitmb3Iobj0wLHI9ZS5sZW5ndGg7bjxyOysrbilpZihlW25dIT09dFtuXSlyZXR1cm4hMQor
cmV0dXJuITB9ZnVuY3Rpb24gRihlLHQpe3ZhciBuLHIKK2lmKGUubGVuZ3RoIT09dC5sZW5ndGgp
cmV0dXJuITEKK2ZvcihuPTAscj1lLmxlbmd0aDtuPHI7KytuKXtpZihlW25dLm5hbWUhPT10W25d
Lm5hbWUpcmV0dXJuITEKK2lmKCF6KGVbbl0ucGFyYW1zLHRbbl0ucGFyYW1zKSlyZXR1cm4hMX1y
ZXR1cm4hMH1mdW5jdGlvbiB6KGUsdCl7aWYoIWUmJiF0KXJldHVybiEwCitpZighZSYmdHx8ZSYm
IXQpcmV0dXJuITEKK3ZhciBuLHIsaSxvPU9iamVjdC5rZXlzKGUpLHM9T2JqZWN0LmtleXModCkK
K2lmKG8ubGVuZ3RoIT09cy5sZW5ndGgpcmV0dXJuITEKK2ZvcihuPTAscj1vLmxlbmd0aDtuPHI7
KytuKWlmKGk9b1tuXSxlW2ldIT09dFtpXSlyZXR1cm4hMQorcmV0dXJuITB9ZnVuY3Rpb24gVShl
LHQsbixyKXtmb3IodmFyIGkgaW4gbiluLmhhc093blByb3BlcnR5KGkpJiZudWxsPT09bltpXSYm
ZGVsZXRlIG5baV0KK3ZhciBvLHMsYSx1PVtdCitwKGUsdCwhMCxbImZpbmFsaXplUXVlcnlQYXJh
bUNoYW5nZSIsbix1LHJdKSxyJiYoci5fdmlzaWJsZVF1ZXJ5UGFyYW1zPXt9KQordmFyIGw9e30K
K2ZvcihvPTAscz11Lmxlbmd0aDtvPHM7KytvKWE9dVtvXSxsW2Eua2V5XT1hLnZhbHVlLHImJiEx
IT09YS52aXNpYmxlJiYoci5fdmlzaWJsZVF1ZXJ5UGFyYW1zW2Eua2V5XT1hLnZhbHVlKQorcmV0
dXJuIGx9ZnVuY3Rpb24gQihlLHQsbil7dmFyIHIsaSxvLHMsYT1lLnN0YXRlLmhhbmRsZXJJbmZv
cyx1PVtdLGw9bnVsbAorZm9yKGk9YS5sZW5ndGgscj0wO3I8aTtyKyspe2lmKG89YVtyXSwhKHM9
dC5oYW5kbGVySW5mb3Nbcl0pfHxvLm5hbWUhPT1zLm5hbWUpe2w9cgorYnJlYWt9cy5pc1Jlc29s
dmVkfHx1LnB1c2gobyl9bnVsbCE9PWwmJmEuc2xpY2UobCxpKSxwKGUsYSwhMCxbIndpbGxUcmFu
c2l0aW9uIixuXSksZS53aWxsVHJhbnNpdGlvbiYmZS53aWxsVHJhbnNpdGlvbihhLHQuaGFuZGxl
ckluZm9zLG4pfWUuVHJhbnNpdGlvbj12b2lkIDAKK3ZhciBxLEg9QXJyYXkucHJvdG90eXBlLnNs
aWNlCitxPUFycmF5LmlzQXJyYXk/QXJyYXkuaXNBcnJheTpmdW5jdGlvbihlKXtyZXR1cm4iW29i
amVjdCBBcnJheV0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpfQordmFyIFY9
cSxXPU9iamVjdC5jcmVhdGV8fGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJv
dG90eXBlPWUsbmV3IHR9Cit2LnByb3RvdHlwZT17cHJvbWlzZUxhYmVsOmZ1bmN0aW9uKGUpe3Zh
ciB0PSIiCityZXR1cm4gYyh0aGlzLmhhbmRsZXJJbmZvcyxmdW5jdGlvbihlKXsiIiE9PXQmJih0
Kz0iLiIpLHQrPWUubmFtZX0pLGgoIiciK3QrIic6ICIrZSl9LHJlc29sdmU6ZnVuY3Rpb24oZSx0
KXtmdW5jdGlvbiByKCl7cmV0dXJuIG4uUHJvbWlzZS5yZXNvbHZlKGUoKSxhLnByb21pc2VMYWJl
bCgiQ2hlY2sgaWYgc2hvdWxkIGNvbnRpbnVlIikpLmNhdGNoKGZ1bmN0aW9uKGUpe3JldHVybiB1
PSEwLG4uUHJvbWlzZS5yZWplY3QoZSl9LGEucHJvbWlzZUxhYmVsKCJIYW5kbGUgYWJvcnQiKSl9
ZnVuY3Rpb24gaShlKXt2YXIgbixpPWEuaGFuZGxlckluZm9zW3QucmVzb2x2ZUluZGV4XS5pc1Jl
c29sdmVkCityZXR1cm4gYS5oYW5kbGVySW5mb3NbdC5yZXNvbHZlSW5kZXgrK109ZSxpfHwobj1l
LmhhbmRsZXIsZyhuLCJyZWRpcmVjdCIsZS5jb250ZXh0LHQpKSxyKCkudGhlbihvLG51bGwsYS5w
cm9taXNlTGFiZWwoIlJlc29sdmUgaGFuZGxlciIpKX1mdW5jdGlvbiBvKCl7cmV0dXJuIHQucmVz
b2x2ZUluZGV4PT09YS5oYW5kbGVySW5mb3MubGVuZ3RoP3tlcnJvcjpudWxsLHN0YXRlOmF9OmEu
aGFuZGxlckluZm9zW3QucmVzb2x2ZUluZGV4XS5yZXNvbHZlKHIsdCkudGhlbihpLG51bGwsYS5w
cm9taXNlTGFiZWwoIlByb2NlZWQiKSl9dmFyIHM9dGhpcy5wYXJhbXMKK2ModGhpcy5oYW5kbGVy
SW5mb3MsZnVuY3Rpb24oZSl7c1tlLm5hbWVdPWUucGFyYW1zfHx7fX0pLHQ9dHx8e30sdC5yZXNv
bHZlSW5kZXg9MAordmFyIGE9dGhpcyx1PSExCityZXR1cm4gbi5Qcm9taXNlLnJlc29sdmUobnVs
bCx0aGlzLnByb21pc2VMYWJlbCgiU3RhcnQgdHJhbnNpdGlvbiIpKS50aGVuKG8sbnVsbCx0aGlz
LnByb21pc2VMYWJlbCgiUmVzb2x2ZSBoYW5kbGVyIikpLmNhdGNoKGZ1bmN0aW9uKGUpe3ZhciBy
PWEuaGFuZGxlckluZm9zLGk9dC5yZXNvbHZlSW5kZXg+PXIubGVuZ3RoP3IubGVuZ3RoLTE6dC5y
ZXNvbHZlSW5kZXgKK3JldHVybiBuLlByb21pc2UucmVqZWN0KHtlcnJvcjplLGhhbmRsZXJXaXRo
RXJyb3I6YS5oYW5kbGVySW5mb3NbaV0uaGFuZGxlcix3YXNBYm9ydGVkOnUsc3RhdGU6YX0pfSx0
aGlzLnByb21pc2VMYWJlbCgiSGFuZGxlIGVycm9yIikpfX0sYi5wcm90b3R5cGU9VyhFcnJvci5w
cm90b3R5cGUpLF8ucHJvdG90eXBlPXt0YXJnZXROYW1lOm51bGwsdXJsTWV0aG9kOiJ1cGRhdGUi
LGludGVudDpudWxsLHBpdm90SGFuZGxlcjpudWxsLHJlc29sdmVJbmRleDowLHJlc29sdmVkTW9k
ZWxzOm51bGwsc3RhdGU6bnVsbCxxdWVyeVBhcmFtc09ubHk6ITEsaXNUcmFuc2l0aW9uOiEwLGlz
RXhpdGluZzpmdW5jdGlvbihlKXt2YXIgdCxuLHIsaT10aGlzLmhhbmRsZXJJbmZvcworZm9yKHQ9
MCxuPWkubGVuZ3RoO3Q8bjsrK3QpaWYocj1pW3RdLHIubmFtZT09PWV8fHIuaGFuZGxlcj09PWUp
cmV0dXJuITEKK3JldHVybiEwfSxwcm9taXNlOm51bGwsZGF0YTpudWxsLHRoZW46ZnVuY3Rpb24o
ZSx0LG4pe3JldHVybiB0aGlzLnByb21pc2UudGhlbihlLHQsbil9LGNhdGNoOmZ1bmN0aW9uKGUs
dCl7cmV0dXJuIHRoaXMucHJvbWlzZS5jYXRjaChlLHQpfSxmaW5hbGx5OmZ1bmN0aW9uKGUsdCl7
cmV0dXJuIHRoaXMucHJvbWlzZS5maW5hbGx5KGUsdCl9LGFib3J0OmZ1bmN0aW9uKCl7cmV0dXJu
IHRoaXMuaXNBYm9ydGVkP3RoaXM6KGEodGhpcy5yb3V0ZXIsdGhpcy5zZXF1ZW5jZSx0aGlzLnRh
cmdldE5hbWUrIjogdHJhbnNpdGlvbiB3YXMgYWJvcnRlZCIpLHRoaXMuaW50ZW50LnByZVRyYW5z
aXRpb25TdGF0ZT10aGlzLnJvdXRlci5zdGF0ZSx0aGlzLmlzQWJvcnRlZD0hMCx0aGlzLmlzQWN0
aXZlPSExLHRoaXMucm91dGVyLmFjdGl2ZVRyYW5zaXRpb249bnVsbCx0aGlzKX0scmV0cnk6ZnVu
Y3Rpb24oKXt0aGlzLmFib3J0KCkKK3ZhciBlPXRoaXMucm91dGVyLnRyYW5zaXRpb25CeUludGVu
dCh0aGlzLmludGVudCwhMSkKK3JldHVybiBudWxsIT09dGhpcy51cmxNZXRob2QmJmUubWV0aG9k
KHRoaXMudXJsTWV0aG9kKSxlfSxtZXRob2Q6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMudXJsTWV0
aG9kPWUsdGhpc30sdHJpZ2dlcjpmdW5jdGlvbihlKXt2YXIgdD1ILmNhbGwoYXJndW1lbnRzKQor
ImJvb2xlYW4iPT10eXBlb2YgZT90LnNoaWZ0KCk6ZT0hMSxwKHRoaXMucm91dGVyLHRoaXMuc3Rh
dGUuaGFuZGxlckluZm9zLnNsaWNlKDAsdGhpcy5yZXNvbHZlSW5kZXgrMSksZSx0KX0sZm9sbG93
UmVkaXJlY3RzOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5yb3V0ZXIKK3JldHVybiB0aGlzLnByb21p
c2UuY2F0Y2goZnVuY3Rpb24odCl7cmV0dXJuIGUuYWN0aXZlVHJhbnNpdGlvbj9lLmFjdGl2ZVRy
YW5zaXRpb24uZm9sbG93UmVkaXJlY3RzKCk6bi5Qcm9taXNlLnJlamVjdCh0KX0pfSx0b1N0cmlu
ZzpmdW5jdGlvbigpe3JldHVybiJUcmFuc2l0aW9uIChzZXF1ZW5jZSAiK3RoaXMuc2VxdWVuY2Ur
IikifSxsb2c6ZnVuY3Rpb24oZSl7YSh0aGlzLnJvdXRlcix0aGlzLnNlcXVlbmNlLGUpfX0sXy5w
cm90b3R5cGUuc2VuZD1fLnByb3RvdHlwZS50cmlnZ2VyLHgucHJvdG90eXBlPXtpbml0aWFsaXpl
Om51bGwsYXBwbHlUb1N0YXRlOm51bGx9Cit2YXIgJD1PYmplY3QuZnJlZXplKHt9KQorQy5wcm90
b3R5cGU9e25hbWU6bnVsbCxnZXRIYW5kbGVyOmZ1bmN0aW9uKCl7fSxmZXRjaEhhbmRsZXI6ZnVu
Y3Rpb24oKXt2YXIgZT10aGlzLmdldEhhbmRsZXIodGhpcy5uYW1lKQoraWYodGhpcy5oYW5kbGVy
UHJvbWlzZT1uLlByb21pc2UucmVzb2x2ZShlKSxyKGUpKXRoaXMuaGFuZGxlclByb21pc2U9dGhp
cy5oYW5kbGVyUHJvbWlzZS50aGVuKHUodGhpcyx0aGlzLnVwZGF0ZUhhbmRsZXIpKQorZWxzZSBp
ZihlKXJldHVybiBlLl9oYW5kbGVyTmFtZT10aGlzLm5hbWUsdGhpcy5oYW5kbGVyPWUKK3JldHVy
biB0aGlzLmhhbmRsZXI9dm9pZCAwfSxfaGFuZGxlclByb21pc2U6dm9pZCAwLHBhcmFtczpudWxs
LGNvbnRleHQ6bnVsbCxmYWN0b3J5Om51bGwsaW5pdGlhbGl6ZTpmdW5jdGlvbigpe30sbG9nOmZ1
bmN0aW9uKGUsdCl7ZS5sb2cmJmUubG9nKHRoaXMubmFtZSsiOiAiK3QpfSxwcm9taXNlTGFiZWw6
ZnVuY3Rpb24oZSl7cmV0dXJuIGgoIiciK3RoaXMubmFtZSsiJyAiK2UpfSxnZXRVbnJlc29sdmVk
OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LHNlcmlhbGl6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlz
LnBhcmFtc3x8e319LHVwZGF0ZUhhbmRsZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX2hhbmRsZXJO
YW1lPXRoaXMubmFtZSx0aGlzLmhhbmRsZXI9ZX0scmVzb2x2ZTpmdW5jdGlvbihlLHQpe3ZhciBy
PXUodGhpcyx0aGlzLmNoZWNrRm9yQWJvcnQsZSksaT11KHRoaXMsdGhpcy5ydW5CZWZvcmVNb2Rl
bEhvb2ssdCksbz11KHRoaXMsdGhpcy5nZXRNb2RlbCx0KSxzPXUodGhpcyx0aGlzLnJ1bkFmdGVy
TW9kZWxIb29rLHQpLGE9dSh0aGlzLHRoaXMuYmVjb21lUmVzb2x2ZWQsdCksbD10aGlzCityZXR1
cm4gbi5Qcm9taXNlLnJlc29sdmUodGhpcy5oYW5kbGVyUHJvbWlzZSx0aGlzLnByb21pc2VMYWJl
bCgiU3RhcnQgaGFuZGxlciIpKS50aGVuKGZ1bmN0aW9uKGUpe3JldHVybiBuLlByb21pc2UucmVz
b2x2ZShlKS50aGVuKHIsbnVsbCxsLnByb21pc2VMYWJlbCgiQ2hlY2sgZm9yIGFib3J0IikpLnRo
ZW4oaSxudWxsLGwucHJvbWlzZUxhYmVsKCJCZWZvcmUgbW9kZWwiKSkudGhlbihyLG51bGwsbC5w
cm9taXNlTGFiZWwoIkNoZWNrIGlmIGFib3J0ZWQgZHVyaW5nICdiZWZvcmVNb2RlbCcgaG9vayIp
KS50aGVuKG8sbnVsbCxsLnByb21pc2VMYWJlbCgiTW9kZWwiKSkudGhlbihyLG51bGwsbC5wcm9t
aXNlTGFiZWwoIkNoZWNrIGlmIGFib3J0ZWQgaW4gJ21vZGVsJyBob29rIikpLnRoZW4ocyxudWxs
LGwucHJvbWlzZUxhYmVsKCJBZnRlciBtb2RlbCIpKS50aGVuKHIsbnVsbCxsLnByb21pc2VMYWJl
bCgiQ2hlY2sgaWYgYWJvcnRlZCBpbiAnYWZ0ZXJNb2RlbCcgaG9vayIpKS50aGVuKGEsbnVsbCxs
LnByb21pc2VMYWJlbCgiQmVjb21lIHJlc29sdmVkIikpfSxmdW5jdGlvbihlKXt0aHJvdyBlfSl9
LHJ1bkJlZm9yZU1vZGVsSG9vazpmdW5jdGlvbihlKXtyZXR1cm4gZS50cmlnZ2VyJiZlLnRyaWdn
ZXIoITAsIndpbGxSZXNvbHZlTW9kZWwiLGUsdGhpcy5oYW5kbGVyKSx0aGlzLnJ1blNoYXJlZE1v
ZGVsSG9vayhlLCJiZWZvcmVNb2RlbCIsW10pfSxydW5BZnRlck1vZGVsSG9vazpmdW5jdGlvbihl
LHQpe3ZhciBuPXRoaXMubmFtZQorcmV0dXJuIHRoaXMuc3Rhc2hSZXNvbHZlZE1vZGVsKGUsdCks
dGhpcy5ydW5TaGFyZWRNb2RlbEhvb2soZSwiYWZ0ZXJNb2RlbCIsW3RdKS50aGVuKGZ1bmN0aW9u
KCl7cmV0dXJuIGUucmVzb2x2ZWRNb2RlbHNbbl19LG51bGwsdGhpcy5wcm9taXNlTGFiZWwoIkln
bm9yZSBmdWxmaWxsbWVudCB2YWx1ZSBhbmQgcmV0dXJuIG1vZGVsIHZhbHVlIikpfSxydW5TaGFy
ZWRNb2RlbEhvb2s6ZnVuY3Rpb24oZSx0LHIpe3RoaXMubG9nKGUsImNhbGxpbmcgIit0KyIgaG9v
ayIpLHRoaXMucXVlcnlQYXJhbXMmJnIucHVzaCh0aGlzLnF1ZXJ5UGFyYW1zKSxyLnB1c2goZSkK
K3ZhciBpPXkodGhpcy5oYW5kbGVyLHQscikKK3JldHVybiBpJiZpLmlzVHJhbnNpdGlvbiYmKGk9
bnVsbCksbi5Qcm9taXNlLnJlc29sdmUoaSx0aGlzLnByb21pc2VMYWJlbCgiUmVzb2x2ZSB2YWx1
ZSByZXR1cm5lZCBmcm9tIG9uZSBvZiB0aGUgbW9kZWwgaG9va3MiKSl9LGdldE1vZGVsOm51bGws
Y2hlY2tGb3JBYm9ydDpmdW5jdGlvbihlLHQpe3JldHVybiBuLlByb21pc2UucmVzb2x2ZShlKCks
dGhpcy5wcm9taXNlTGFiZWwoIkNoZWNrIGZvciBhYm9ydCIpKS50aGVuKGZ1bmN0aW9uKCl7cmV0
dXJuIHR9LG51bGwsdGhpcy5wcm9taXNlTGFiZWwoIklnbm9yZSBmdWxmaWxsbWVudCB2YWx1ZSBh
bmQgY29udGludWUiKSl9LHN0YXNoUmVzb2x2ZWRNb2RlbDpmdW5jdGlvbihlLHQpe2UucmVzb2x2
ZWRNb2RlbHM9ZS5yZXNvbHZlZE1vZGVsc3x8e30sZS5yZXNvbHZlZE1vZGVsc1t0aGlzLm5hbWVd
PXR9LGJlY29tZVJlc29sdmVkOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5zZXJpYWxpemUodCkK
K3JldHVybiBlJiYodGhpcy5zdGFzaFJlc29sdmVkTW9kZWwoZSx0KSxlLnBhcmFtcz1lLnBhcmFt
c3x8e30sZS5wYXJhbXNbdGhpcy5uYW1lXT1uKSx0aGlzLmZhY3RvcnkoInJlc29sdmVkIix7Y29u
dGV4dDp0LG5hbWU6dGhpcy5uYW1lLGhhbmRsZXI6dGhpcy5oYW5kbGVyLHBhcmFtczpufSl9LHNo
b3VsZFN1cGVyY2VkZTpmdW5jdGlvbihlKXtpZighZSlyZXR1cm4hMAordmFyIHQ9ZS5jb250ZXh0
PT09dGhpcy5jb250ZXh0CityZXR1cm4gZS5uYW1lIT09dGhpcy5uYW1lfHx0aGlzLmhhc093blBy
b3BlcnR5KCJjb250ZXh0IikmJiF0fHx0aGlzLmhhc093blByb3BlcnR5KCJwYXJhbXMiKSYmIU8o
dGhpcy5wYXJhbXMsZS5wYXJhbXMpfX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KEMucHJvdG90eXBl
LCJoYW5kbGVyIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2hhbmRsZXIhPT0kP3RoaXMu
X2hhbmRsZXI6dGhpcy5mZXRjaEhhbmRsZXIoKX0sc2V0OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlz
Ll9oYW5kbGVyPWV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEMucHJvdG90eXBlLCJoYW5kbGVy
UHJvbWlzZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9oYW5kbGVyUHJvbWlzZT90aGlz
Ll9oYW5kbGVyUHJvbWlzZToodGhpcy5mZXRjaEhhbmRsZXIoKSx0aGlzLl9oYW5kbGVyUHJvbWlz
ZSl9LHNldDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5faGFuZGxlclByb21pc2U9ZX19KQordmFy
IEc9ZChDLHtyZXNvbHZlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQmJnQucmVzb2x2ZWRNb2RlbHMm
Jih0LnJlc29sdmVkTW9kZWxzW3RoaXMubmFtZV09dGhpcy5jb250ZXh0KSxuLlByb21pc2UucmVz
b2x2ZSh0aGlzLHRoaXMucHJvbWlzZUxhYmVsKCJSZXNvbHZlIikpfSxnZXRVbnJlc29sdmVkOmZ1
bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmFjdG9yeSgicGFyYW0iLHtuYW1lOnRoaXMubmFtZSxoYW5k
bGVyOnRoaXMuaGFuZGxlcixwYXJhbXM6dGhpcy5wYXJhbXN9KX0saXNSZXNvbHZlZDohMH0pLEs9
ZChDLHtnZXRNb2RlbDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5sb2coZSx0aGlzLm5hbWUrIjog
cmVzb2x2aW5nIHByb3ZpZGVkIG1vZGVsIiksbi5Qcm9taXNlLnJlc29sdmUodGhpcy5jb250ZXh0
KX0saW5pdGlhbGl6ZTpmdW5jdGlvbihlKXt0aGlzLm5hbWVzPWUubmFtZXN8fFtdLHRoaXMuY29u
dGV4dD1lLmNvbnRleHR9LHNlcmlhbGl6ZTpmdW5jdGlvbihlKXt2YXIgdD1lfHx0aGlzLmNvbnRl
eHQsbj10aGlzLm5hbWVzLHI9dGhpcy5zZXJpYWxpemVyfHx0aGlzLmhhbmRsZXImJnRoaXMuaGFu
ZGxlci5zZXJpYWxpemUsaT17fQoraWYobCh0KSlyZXR1cm4gaVtuWzBdXT10LGkKK2lmKHIpcmV0
dXJuIHIodCxuKQoraWYoMT09PW4ubGVuZ3RoKXt2YXIgbz1uWzBdCityZXR1cm4vX2lkJC8udGVz
dChvKT9pW29dPXQuaWQ6aVtvXT10LGl9fX0pLFE9ZChDLHtpbml0aWFsaXplOmZ1bmN0aW9uKGUp
e3RoaXMucGFyYW1zPWUucGFyYW1zfHx7fX0sZ2V0TW9kZWw6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhp
cy5wYXJhbXMKK2UmJmUucXVlcnlQYXJhbXMmJih0PXt9LGkodCx0aGlzLnBhcmFtcyksdC5xdWVy
eVBhcmFtcz1lLnF1ZXJ5UGFyYW1zKQordmFyIG49dGhpcy5oYW5kbGVyLHI9bShuLCJkZXNlcmlh
bGl6ZSIpfHxtKG4sIm1vZGVsIikKK3JldHVybiB0aGlzLnJ1blNoYXJlZE1vZGVsSG9vayhlLHIs
W3RdKX19KQorQS5rbGFzc2VzPXtyZXNvbHZlZDpHLHBhcmFtOlEsb2JqZWN0Okt9Cit2YXIgWT1k
KHgse25hbWU6bnVsbCxwaXZvdEhhbmRsZXI6bnVsbCxjb250ZXh0czpudWxsLHF1ZXJ5UGFyYW1z
Om51bGwsaW5pdGlhbGl6ZTpmdW5jdGlvbihlKXt0aGlzLm5hbWU9ZS5uYW1lLHRoaXMucGl2b3RI
YW5kbGVyPWUucGl2b3RIYW5kbGVyLHRoaXMuY29udGV4dHM9ZS5jb250ZXh0c3x8W10sdGhpcy5x
dWVyeVBhcmFtcz1lLnF1ZXJ5UGFyYW1zfSxhcHBseVRvU3RhdGU6ZnVuY3Rpb24oZSx0LG4scixp
KXt2YXIgcz1vKFt0aGlzLm5hbWVdLmNvbmNhdCh0aGlzLmNvbnRleHRzKSksYT1zWzBdLHU9dC5o
YW5kbGVyc0ZvcihhWzBdKSxsPXVbdS5sZW5ndGgtMV0uaGFuZGxlcgorcmV0dXJuIHRoaXMuYXBw
bHlUb0hhbmRsZXJzKGUsdSxuLGwscixudWxsLGkpfSxhcHBseVRvSGFuZGxlcnM6ZnVuY3Rpb24o
ZSx0LG4scixvLHMsYSl7dmFyIHUsbCxjLHAsZixoLGQsbSxnLHk9bmV3IHYsYj10aGlzLmNvbnRl
eHRzLnNsaWNlKDApLF89dC5sZW5ndGgKK2lmKHRoaXMucGl2b3RIYW5kbGVyKWZvcih1PTAsbD10
Lmxlbmd0aDt1PGw7Kyt1KWlmKHRbdV0uaGFuZGxlcj09PXRoaXMucGl2b3RIYW5kbGVyLl9oYW5k
bGVyTmFtZSl7Xz11CiticmVha31mb3IodT10Lmxlbmd0aC0xO3U+PTA7LS11KWM9dFt1XSxwPWMu
aGFuZGxlcixmPWUuaGFuZGxlckluZm9zW3VdLGg9bnVsbCxjLm5hbWVzLmxlbmd0aD4wP3U+PV8/
aD10aGlzLmNyZWF0ZVBhcmFtSGFuZGxlckluZm8ocCxuLGMubmFtZXMsYixmKTooZD1hKHApLGg9
dGhpcy5nZXRIYW5kbGVySW5mb0ZvckR5bmFtaWNTZWdtZW50KHAsbixjLm5hbWVzLGIsZixyLHUs
ZCkpOmg9dGhpcy5jcmVhdGVQYXJhbUhhbmRsZXJJbmZvKHAsbixjLm5hbWVzLGIsZikscyYmKGg9
aC5iZWNvbWVSZXNvbHZlZChudWxsLGguY29udGV4dCksbT1mJiZmLmNvbnRleHQsYy5uYW1lcy5s
ZW5ndGg+MCYmaC5jb250ZXh0PT09bSYmKGgucGFyYW1zPWYmJmYucGFyYW1zKSxoLmNvbnRleHQ9
bSksZz1mLCh1Pj1ffHxoLnNob3VsZFN1cGVyY2VkZShmKSkmJihfPU1hdGgubWluKHUsXyksZz1o
KSxvJiYhcyYmKGc9Zy5iZWNvbWVSZXNvbHZlZChudWxsLGcuY29udGV4dCkpLHkuaGFuZGxlcklu
Zm9zLnVuc2hpZnQoZykKK2lmKGIubGVuZ3RoPjApdGhyb3cgbmV3IEVycm9yKCJNb3JlIGNvbnRl
eHQgb2JqZWN0cyB3ZXJlIHBhc3NlZCB0aGFuIHRoZXJlIGFyZSBkeW5hbWljIHNlZ21lbnRzIGZv
ciB0aGUgcm91dGU6ICIrcikKK3JldHVybiBvfHx0aGlzLmludmFsaWRhdGVDaGlsZHJlbih5Lmhh
bmRsZXJJbmZvcyxfKSxpKHkucXVlcnlQYXJhbXMsdGhpcy5xdWVyeVBhcmFtc3x8e30pLHl9LGlu
dmFsaWRhdGVDaGlsZHJlbjpmdW5jdGlvbihlLHQpe3ZhciBuLHIsaQorZm9yKG49dCxyPWUubGVu
Z3RoO248cjsrK24paT1lW25dLGVbbl09aS5nZXRVbnJlc29sdmVkKCl9LGdldEhhbmRsZXJJbmZv
Rm9yRHluYW1pY1NlZ21lbnQ6ZnVuY3Rpb24oZSx0LG4scixpLG8scyxhKXt2YXIgdSxjCitpZihy
Lmxlbmd0aD4wKXtpZih1PXJbci5sZW5ndGgtMV0sbCh1KSlyZXR1cm4gdGhpcy5jcmVhdGVQYXJh
bUhhbmRsZXJJbmZvKGUsdCxuLHIsaSkKK3IucG9wKCl9ZWxzZXtpZihpJiZpLm5hbWU9PT1lKXJl
dHVybiBpCitpZighdGhpcy5wcmVUcmFuc2l0aW9uU3RhdGUpcmV0dXJuIGkKK2M9dGhpcy5wcmVU
cmFuc2l0aW9uU3RhdGUuaGFuZGxlckluZm9zW3NdLHU9YyYmYy5jb250ZXh0fXJldHVybiBBKCJv
YmplY3QiLHtuYW1lOmUsZ2V0SGFuZGxlcjp0LHNlcmlhbGl6ZXI6YSxjb250ZXh0OnUsbmFtZXM6
bn0pfSxjcmVhdGVQYXJhbUhhbmRsZXJJbmZvOmZ1bmN0aW9uKGUsdCxuLHIsaSl7Zm9yKHZhciBv
LHMsYSx1PXt9LGM9bi5sZW5ndGg7Yy0tOylpZihvPWkmJmU9PT1pLm5hbWUmJmkucGFyYW1zfHx7
fSxzPXJbci5sZW5ndGgtMV0sYT1uW2NdLGwocykpdVthXT0iIityLnBvcCgpCitlbHNle2lmKCFv
Lmhhc093blByb3BlcnR5KGEpKXRocm93IG5ldyBFcnJvcigiWW91IGRpZG4ndCBwcm92aWRlIGVu
b3VnaCBzdHJpbmcvbnVtZXJpYyBwYXJhbWV0ZXJzIHRvIHNhdGlzZnkgYWxsIG9mIHRoZSBkeW5h
bWljIHNlZ21lbnRzIGZvciByb3V0ZSAiK2UpCit1W2FdPW9bYV19cmV0dXJuIEEoInBhcmFtIix7
bmFtZTplLGdldEhhbmRsZXI6dCxwYXJhbXM6dX0pfX0pCitULnByb3RvdHlwZT1XKEVycm9yLnBy
b3RvdHlwZSkKK3ZhciBKPWQoeCx7dXJsOm51bGwsaW5pdGlhbGl6ZTpmdW5jdGlvbihlKXt0aGlz
LnVybD1lLnVybH0sYXBwbHlUb1N0YXRlOmZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiByKGUpe2lm
KGUmJmUuaW5hY2Nlc3NpYmxlQnlVUkwpdGhyb3cgbmV3IFQobSkKK3JldHVybiBlfXZhciBvLHMs
YSx1LGwsYyxwLGY9bmV3IHYsaD10LnJlY29nbml6ZSh0aGlzLnVybCkKK2lmKCFoKXRocm93IG5l
dyBUKHRoaXMudXJsKQordmFyIGQ9ITEsbT10aGlzLnVybAorZm9yKGM9MCxwPWgubGVuZ3RoO2M8
cDsrK2Mpbz1oW2NdLHM9by5oYW5kbGVyLGE9QSgicGFyYW0iLHtuYW1lOnMsZ2V0SGFuZGxlcjpu
LHBhcmFtczpvLnBhcmFtc30pLHU9YS5oYW5kbGVyLHU/cih1KTphLmhhbmRsZXJQcm9taXNlPWEu
aGFuZGxlclByb21pc2UudGhlbihyKSxsPWUuaGFuZGxlckluZm9zW2NdLGR8fGEuc2hvdWxkU3Vw
ZXJjZWRlKGwpPyhkPSEwLGYuaGFuZGxlckluZm9zW2NdPWEpOmYuaGFuZGxlckluZm9zW2NdPWwK
K3JldHVybiBpKGYucXVlcnlQYXJhbXMsaC5xdWVyeVBhcmFtcyksZn19KSxYPUFycmF5LnByb3Rv
dHlwZS5wb3AKK1MucHJvdG90eXBlPXttYXA6ZnVuY3Rpb24oZSl7dGhpcy5yZWNvZ25pemVyLmRl
bGVnYXRlPXRoaXMuZGVsZWdhdGUsdGhpcy5yZWNvZ25pemVyLm1hcChlLGZ1bmN0aW9uKGUsdCl7
dmFyIG4scixpCitmb3Iobj10Lmxlbmd0aC0xLHI9ITA7bj49MCYmcjstLW4paT10W25dLGUuYWRk
KHQse2FzOmkuaGFuZGxlcn0pLHI9Ii8iPT09aS5wYXRofHwiIj09PWkucGF0aHx8Ii5pbmRleCI9
PT1pLmhhbmRsZXIuc2xpY2UoLTYpfSl9LGhhc1JvdXRlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlz
LnJlY29nbml6ZXIuaGFzUm91dGUoZSl9LGdldEhhbmRsZXI6ZnVuY3Rpb24oKXt9LGdldFNlcmlh
bGl6ZXI6ZnVuY3Rpb24oKXt9LHF1ZXJ5UGFyYW1zVHJhbnNpdGlvbjpmdW5jdGlvbihlLHQsbixy
KXt2YXIgaSxvPXRoaXMKK3JldHVybiBrKHRoaXMscixlKSwhdCYmdGhpcy5hY3RpdmVUcmFuc2l0
aW9uP3RoaXMuYWN0aXZlVHJhbnNpdGlvbjooaT1uZXcgXyh0aGlzKSxpLnF1ZXJ5UGFyYW1zT25s
eT0hMCxuLnF1ZXJ5UGFyYW1zPVUodGhpcyxyLmhhbmRsZXJJbmZvcyxyLnF1ZXJ5UGFyYW1zLGkp
LGkucHJvbWlzZT1pLnByb21pc2UudGhlbihmdW5jdGlvbihlKXtyZXR1cm4gRChpLG4sITApLG8u
ZGlkVHJhbnNpdGlvbiYmby5kaWRUcmFuc2l0aW9uKG8uY3VycmVudEhhbmRsZXJJbmZvcyksZX0s
bnVsbCxoKCJUcmFuc2l0aW9uIGNvbXBsZXRlIikpLGkpfSx0cmFuc2l0aW9uQnlJbnRlbnQ6ZnVu
Y3Rpb24oZSl7dHJ5e3JldHVybiBSLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1jYXRjaCh0KXtyZXR1
cm4gbmV3IF8odGhpcyxlLG51bGwsdCl9fSxyZXNldDpmdW5jdGlvbigpe3RoaXMuc3RhdGUmJmMo
dGhpcy5zdGF0ZS5oYW5kbGVySW5mb3Muc2xpY2UoKS5yZXZlcnNlKCksZnVuY3Rpb24oZSl7Zyhl
LmhhbmRsZXIsImV4aXQiKX0pLHRoaXMub2xkU3RhdGU9dm9pZCAwLHRoaXMuc3RhdGU9bmV3IHYs
dGhpcy5jdXJyZW50SGFuZGxlckluZm9zPW51bGx9LGFjdGl2ZVRyYW5zaXRpb246bnVsbCxoYW5k
bGVVUkw6ZnVuY3Rpb24oZSl7dmFyIHQ9SC5jYWxsKGFyZ3VtZW50cykKK3JldHVybiIvIiE9PWUu
Y2hhckF0KDApJiYodFswXT0iLyIrZSksSSh0aGlzLHQpLm1ldGhvZChudWxsKX0sdXBkYXRlVVJM
OmZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJ1cGRhdGVVUkwgaXMgbm90IGltcGxlbWVudGVk
Iil9LHJlcGxhY2VVUkw6ZnVuY3Rpb24oZSl7dGhpcy51cGRhdGVVUkwoZSl9LHRyYW5zaXRpb25U
bzpmdW5jdGlvbigpe3JldHVybiBJKHRoaXMsYXJndW1lbnRzKX0saW50ZXJtZWRpYXRlVHJhbnNp
dGlvblRvOmZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyxhcmd1bWVudHMsITApfSxyZWZyZXNoOmZ1
bmN0aW9uKGUpe3ZhciB0LG4scixpPXRoaXMuYWN0aXZlVHJhbnNpdGlvbixvPWk/aS5zdGF0ZTp0
aGlzLnN0YXRlLHM9by5oYW5kbGVySW5mb3MsdT17fQorZm9yKHQ9MCxuPXMubGVuZ3RoO3Q8bjsr
K3Qpcj1zW3RdLHVbci5uYW1lXT1yLnBhcmFtc3x8e30KK2EodGhpcywiU3RhcnRpbmcgYSByZWZy
ZXNoIHRyYW5zaXRpb24iKQordmFyIGw9bmV3IFkoe25hbWU6c1tzLmxlbmd0aC0xXS5uYW1lLHBp
dm90SGFuZGxlcjplfHxzWzBdLmhhbmRsZXIsY29udGV4dHM6W10scXVlcnlQYXJhbXM6dGhpcy5f
Y2hhbmdlZFF1ZXJ5UGFyYW1zfHxvLnF1ZXJ5UGFyYW1zfHx7fX0pLGM9dGhpcy50cmFuc2l0aW9u
QnlJbnRlbnQobCwhMSkKK3JldHVybiBpJiYicmVwbGFjZSI9PT1pLnVybE1ldGhvZCYmYy5tZXRo
b2QoaS51cmxNZXRob2QpLGN9LHJlcGxhY2VXaXRoOmZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyxh
cmd1bWVudHMpLm1ldGhvZCgicmVwbGFjZSIpfSxnZW5lcmF0ZTpmdW5jdGlvbihlKXt2YXIgdCxu
LHIscyxhPW8oSC5jYWxsKGFyZ3VtZW50cywxKSksdT1hWzBdLGw9YVsxXSxjPW5ldyBZKHtuYW1l
OmUsY29udGV4dHM6dX0pLHA9Yy5hcHBseVRvU3RhdGUodGhpcy5zdGF0ZSx0aGlzLnJlY29nbml6
ZXIsdGhpcy5nZXRIYW5kbGVyLG51bGwsdGhpcy5nZXRTZXJpYWxpemVyKSxmPXt9Citmb3IodD0w
LG49cC5oYW5kbGVySW5mb3MubGVuZ3RoO3Q8bjsrK3Qpcj1wLmhhbmRsZXJJbmZvc1t0XSxzPXIu
c2VyaWFsaXplKCksaShmLHMpCityZXR1cm4gZi5xdWVyeVBhcmFtcz1sLHRoaXMucmVjb2duaXpl
ci5nZW5lcmF0ZShlLGYpfSxhcHBseUludGVudDpmdW5jdGlvbihlLHQpe3ZhciBuPW5ldyBZKHtu
YW1lOmUsY29udGV4dHM6dH0pLHI9dGhpcy5hY3RpdmVUcmFuc2l0aW9uJiZ0aGlzLmFjdGl2ZVRy
YW5zaXRpb24uc3RhdGV8fHRoaXMuc3RhdGUKK3JldHVybiBuLmFwcGx5VG9TdGF0ZShyLHRoaXMu
cmVjb2duaXplcix0aGlzLmdldEhhbmRsZXIsbnVsbCx0aGlzLmdldFNlcmlhbGl6ZXIpfSxpc0Fj
dGl2ZUludGVudDpmdW5jdGlvbihlLHQsbixyKXt2YXIgbyxzLGE9cnx8dGhpcy5zdGF0ZSx1PWEu
aGFuZGxlckluZm9zCitpZighdS5sZW5ndGgpcmV0dXJuITEKK3ZhciBsPXVbdS5sZW5ndGgtMV0u
bmFtZSxjPXRoaXMucmVjb2duaXplci5oYW5kbGVyc0ZvcihsKSxwPTAKK2ZvcihzPWMubGVuZ3Ro
O3A8cyYmKG89dVtwXSxvLm5hbWUhPT1lKTsrK3ApO2lmKHA9PT1jLmxlbmd0aClyZXR1cm4hMQor
dmFyIGg9bmV3IHYKK2guaGFuZGxlckluZm9zPXUuc2xpY2UoMCxwKzEpLGM9Yy5zbGljZSgwLHAr
MSkKK3ZhciBkPW5ldyBZKHtuYW1lOmwsY29udGV4dHM6dH0pLG09ZC5hcHBseVRvSGFuZGxlcnMo
aCxjLHRoaXMuZ2V0SGFuZGxlcixsLCEwLCEwLHRoaXMuZ2V0U2VyaWFsaXplciksZz1NKG0uaGFu
ZGxlckluZm9zLGguaGFuZGxlckluZm9zKQoraWYoIW58fCFnKXJldHVybiBnCit2YXIgeT17fQor
aSh5LG4pCit2YXIgYj1hLnF1ZXJ5UGFyYW1zCitmb3IodmFyIF8gaW4gYiliLmhhc093blByb3Bl
cnR5KF8pJiZ5Lmhhc093blByb3BlcnR5KF8pJiYoeVtfXT1iW19dKQorcmV0dXJuIGcmJiFmKHks
bil9LGlzQWN0aXZlOmZ1bmN0aW9uKGUpe3ZhciB0PW8oSC5jYWxsKGFyZ3VtZW50cywxKSkKK3Jl
dHVybiB0aGlzLmlzQWN0aXZlSW50ZW50KGUsdFswXSx0WzFdKX0sdHJpZ2dlcjpmdW5jdGlvbigp
e3ZhciBlPUguY2FsbChhcmd1bWVudHMpCitwKHRoaXMsdGhpcy5jdXJyZW50SGFuZGxlckluZm9z
LCExLGUpfSxsb2c6bnVsbH0sZS5UcmFuc2l0aW9uPV8sZS5kZWZhdWx0PVN9KSxlKCJyc3ZwIixb
ImV4cG9ydHMiLCJlbWJlci1iYWJlbCIsIm5vZGUtbW9kdWxlIl0sZnVuY3Rpb24oZSx0LG4peyJ1
c2Ugc3RyaWN0IgorZnVuY3Rpb24gcihlLHQpe2Zvcih2YXIgbj0wLHI9ZS5sZW5ndGg7bjxyO24r
KylpZihlW25dPT09dClyZXR1cm4gbgorcmV0dXJuLTF9ZnVuY3Rpb24gaShlKXt2YXIgdD1lLl9w
cm9taXNlQ2FsbGJhY2tzCityZXR1cm4gdHx8KHQ9ZS5fcHJvbWlzZUNhbGxiYWNrcz17fSksdH1m
dW5jdGlvbiBvKGUsdCl7cmV0dXJuIm9uZXJyb3IiPT09ZT92b2lkIGJlLm9uKCJlcnJvciIsdCk6
MiE9PWFyZ3VtZW50cy5sZW5ndGg/YmVbZV06dm9pZChiZVtlXT10KX1mdW5jdGlvbiBzKGUpe3Jl
dHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlfHwib2JqZWN0Ij09dHlwZW9mIGUmJm51bGwhPT1lfWZ1
bmN0aW9uIGEoZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGV9ZnVuY3Rpb24gdShlKXtyZXR1
cm4ib2JqZWN0Ij09dHlwZW9mIGUmJm51bGwhPT1lfWZ1bmN0aW9uIGwoKXt9ZnVuY3Rpb24gYygp
e3NldFRpbWVvdXQoZnVuY3Rpb24oKXtmb3IodmFyIGU9MDtlPENlLmxlbmd0aDtlKyspe3ZhciB0
PUNlW2VdLG49dC5wYXlsb2FkCituLmd1aWQ9bi5rZXkrbi5pZCxuLmNoaWxkR3VpZD1uLmtleStu
LmNoaWxkSWQsbi5lcnJvciYmKG4uc3RhY2s9bi5lcnJvci5zdGFjayksYmUudHJpZ2dlcih0Lm5h
bWUsdC5wYXlsb2FkKX1DZS5sZW5ndGg9MH0sNTApfWZ1bmN0aW9uIHAoZSx0LG4pezE9PT1DZS5w
dXNoKHtuYW1lOmUscGF5bG9hZDp7a2V5OnQuX2d1aWRLZXksaWQ6dC5faWQsZXZlbnROYW1lOmUs
ZGV0YWlsOnQuX3Jlc3VsdCxjaGlsZElkOm4mJm4uX2lkLGxhYmVsOnQuX2xhYmVsLHRpbWVTdGFt
cDpFZSgpLGVycm9yOmJlWyJpbnN0cnVtZW50LXdpdGgtc3RhY2siXT9uZXcgRXJyb3IodC5fbGFi
ZWwpOm51bGx9fSkmJmMoKX1mdW5jdGlvbiBmKGUsdCl7dmFyIG49dGhpcworaWYoZSYmIm9iamVj
dCI9PXR5cGVvZiBlJiZlLmNvbnN0cnVjdG9yPT09bilyZXR1cm4gZQordmFyIHI9bmV3IG4oZCx0
KQorcmV0dXJuIF8ocixlKSxyfWZ1bmN0aW9uIGgoKXtyZXR1cm4gbmV3IFR5cGVFcnJvcigiQSBw
cm9taXNlcyBjYWxsYmFjayBjYW5ub3QgcmV0dXJuIHRoYXQgc2FtZSBwcm9taXNlLiIpfWZ1bmN0
aW9uIGQoKXt9ZnVuY3Rpb24gbShlKXt0cnl7cmV0dXJuIGUudGhlbn1jYXRjaChlKXtyZXR1cm4g
U2UuZXJyb3I9ZSxTZX19ZnVuY3Rpb24gZyhlLHQsbixyKXt0cnl7ZS5jYWxsKHQsbixyKX1jYXRj
aChlKXtyZXR1cm4gZX19ZnVuY3Rpb24geShlLHQsbil7YmUuYXN5bmMoZnVuY3Rpb24oZSl7dmFy
IHI9ITEsaT1nKG4sdCxmdW5jdGlvbihuKXtyfHwocj0hMCx0IT09bj9fKGUsbix2b2lkIDApOkUo
ZSxuKSl9LGZ1bmN0aW9uKHQpe3J8fChyPSEwLHgoZSx0KSl9LCJTZXR0bGU6ICIrKGUuX2xhYmVs
fHwiIHVua25vd24gcHJvbWlzZSIpKQorIXImJmkmJihyPSEwLHgoZSxpKSl9LGUpfWZ1bmN0aW9u
IHYoZSx0KXt0Ll9zdGF0ZT09PUFlP0UoZSx0Ll9yZXN1bHQpOnQuX3N0YXRlPT09VGU/KHQuX29u
RXJyb3I9bnVsbCx4KGUsdC5fcmVzdWx0KSk6Qyh0LHZvaWQgMCxmdW5jdGlvbihuKXt0IT09bj9f
KGUsbix2b2lkIDApOkUoZSxuKX0sZnVuY3Rpb24odCl7cmV0dXJuIHgoZSx0KX0pfWZ1bmN0aW9u
IGIoZSx0LG4pe3QuY29uc3RydWN0b3I9PT1lLmNvbnN0cnVjdG9yJiZuPT09ayYmZS5jb25zdHJ1
Y3Rvci5yZXNvbHZlPT09Zj92KGUsdCk6bj09PVNlPyh4KGUsU2UuZXJyb3IpLFNlLmVycm9yPW51
bGwpOnZvaWQgMD09PW4/RShlLHQpOmEobik/eShlLHQsbik6RShlLHQpfWZ1bmN0aW9uIF8oZSx0
KXtlPT09dD9FKGUsdCk6cyh0KT9iKGUsdCxtKHQpKTpFKGUsdCl9ZnVuY3Rpb24gdyhlKXtlLl9v
bkVycm9yJiZlLl9vbkVycm9yKGUuX3Jlc3VsdCksTyhlKX1mdW5jdGlvbiBFKGUsdCl7ZS5fc3Rh
dGU9PT1PZSYmKGUuX3Jlc3VsdD10LGUuX3N0YXRlPUFlLDA9PT1lLl9zdWJzY3JpYmVycy5sZW5n
dGg/YmUuaW5zdHJ1bWVudCYmcCgiZnVsZmlsbGVkIixlKTpiZS5hc3luYyhPLGUpKX1mdW5jdGlv
biB4KGUsdCl7ZS5fc3RhdGU9PT1PZSYmKGUuX3N0YXRlPVRlLGUuX3Jlc3VsdD10LGJlLmFzeW5j
KHcsZSkpfWZ1bmN0aW9uIEMoZSx0LG4scil7dmFyIGk9ZS5fc3Vic2NyaWJlcnMsbz1pLmxlbmd0
aAorZS5fb25FcnJvcj1udWxsLGlbb109dCxpW28rQWVdPW4saVtvK1RlXT1yLDA9PT1vJiZlLl9z
dGF0ZSYmYmUuYXN5bmMoTyxlKX1mdW5jdGlvbiBPKGUpe3ZhciB0PWUuX3N1YnNjcmliZXJzLG49
ZS5fc3RhdGUKK2lmKGJlLmluc3RydW1lbnQmJnAobj09PUFlPyJmdWxmaWxsZWQiOiJyZWplY3Rl
ZCIsZSksMCE9PXQubGVuZ3RoKXtmb3IodmFyIHI9dm9pZCAwLGk9dm9pZCAwLG89ZS5fcmVzdWx0
LHM9MDtzPHQubGVuZ3RoO3MrPTMpcj10W3NdLGk9dFtzK25dLHI/UyhuLHIsaSxvKTppKG8pCitl
Ll9zdWJzY3JpYmVycy5sZW5ndGg9MH19ZnVuY3Rpb24gQSgpe3RoaXMuZXJyb3I9bnVsbH1mdW5j
dGlvbiBUKGUsdCl7dHJ5e3JldHVybiBlKHQpfWNhdGNoKGUpe3JldHVybiBSZS5lcnJvcj1lLFJl
fX1mdW5jdGlvbiBTKGUsdCxuLHIpe3ZhciBpPWEobiksbz12b2lkIDAscz12b2lkIDAsdT12b2lk
IDAsbD12b2lkIDAKK2lmKGkpe2lmKG89VChuLHIpLG89PT1SZT8obD0hMCxzPW8uZXJyb3Isby5l
cnJvcj1udWxsKTp1PSEwLHQ9PT1vKXJldHVybiB2b2lkIHgodCxoKCkpfWVsc2Ugbz1yLHU9ITAK
K3QuX3N0YXRlIT09T2V8fChpJiZ1P18odCxvKTpsP3godCxzKTplPT09QWU/RSh0LG8pOmU9PT1U
ZSYmeCh0LG8pKX1mdW5jdGlvbiBSKGUsdCl7dmFyIG49ITEKK3RyeXt0KGZ1bmN0aW9uKHQpe258
fChuPSEwLF8oZSx0KSl9LGZ1bmN0aW9uKHQpe258fChuPSEwLHgoZSx0KSl9KX1jYXRjaCh0KXt4
KGUsdCl9fWZ1bmN0aW9uIGsoZSx0LG4pe3ZhciByPXRoaXMsaT1yLl9zdGF0ZQoraWYoaT09PUFl
JiYhZXx8aT09PVRlJiYhdClyZXR1cm4gYmUuaW5zdHJ1bWVudCYmcCgiY2hhaW5lZCIscixyKSxy
CityLl9vbkVycm9yPW51bGwKK3ZhciBvPW5ldyByLmNvbnN0cnVjdG9yKGQsbikscz1yLl9yZXN1
bHQKK2lmKGJlLmluc3RydW1lbnQmJnAoImNoYWluZWQiLHIsbyksaSl7dmFyIGE9YXJndW1lbnRz
W2ktMV0KK2JlLmFzeW5jKGZ1bmN0aW9uKCl7cmV0dXJuIFMoaSxvLGEscyl9KX1lbHNlIEMocixv
LGUsdCkKK3JldHVybiBvfWZ1bmN0aW9uIE4oZSx0LG4pe3JldHVybiBlPT09QWU/e3N0YXRlOiJm
dWxmaWxsZWQiLHZhbHVlOm59OntzdGF0ZToicmVqZWN0ZWQiLHJlYXNvbjpufX1mdW5jdGlvbiBQ
KGUsdCxuLHIpe3RoaXMuX2luc3RhbmNlQ29uc3RydWN0b3I9ZSx0aGlzLnByb21pc2U9bmV3IGUo
ZCxyKSx0aGlzLl9hYm9ydE9uUmVqZWN0PW4sdGhpcy5fdmFsaWRhdGVJbnB1dCh0KT8odGhpcy5f
aW5wdXQ9dCx0aGlzLmxlbmd0aD10Lmxlbmd0aCx0aGlzLl9yZW1haW5pbmc9dC5sZW5ndGgsdGhp
cy5faW5pdCgpLDA9PT10aGlzLmxlbmd0aD9FKHRoaXMucHJvbWlzZSx0aGlzLl9yZXN1bHQpOih0
aGlzLmxlbmd0aD10aGlzLmxlbmd0aHx8MCx0aGlzLl9lbnVtZXJhdGUoKSwwPT09dGhpcy5fcmVt
YWluaW5nJiZFKHRoaXMucHJvbWlzZSx0aGlzLl9yZXN1bHQpKSk6eCh0aGlzLnByb21pc2UsdGhp
cy5fdmFsaWRhdGlvbkVycm9yKCkpfWZ1bmN0aW9uIGooZSx0KXtyZXR1cm4gbmV3IFAodGhpcyxl
LCEwLHQpLnByb21pc2V9ZnVuY3Rpb24gRChlLHQpe3ZhciBuPXRoaXMscj1uZXcgbihkLHQpCitp
Zighd2UoZSkpcmV0dXJuIHgocixuZXcgVHlwZUVycm9yKCJZb3UgbXVzdCBwYXNzIGFuIGFycmF5
IHRvIHJhY2UuIikpLHIKK2Zvcih2YXIgaT0wO3IuX3N0YXRlPT09T2UmJmk8ZS5sZW5ndGg7aSsr
KUMobi5yZXNvbHZlKGVbaV0pLHZvaWQgMCxmdW5jdGlvbihlKXtyZXR1cm4gXyhyLGUpfSxmdW5j
dGlvbihlKXtyZXR1cm4geChyLGUpfSkKK3JldHVybiByfWZ1bmN0aW9uIEwoZSx0KXt2YXIgbj10
aGlzLHI9bmV3IG4oZCx0KQorcmV0dXJuIHgocixlKSxyfWZ1bmN0aW9uIEkoKXt0aHJvdyBuZXcg
VHlwZUVycm9yKCJZb3UgbXVzdCBwYXNzIGEgcmVzb2x2ZXIgZnVuY3Rpb24gYXMgdGhlIGZpcnN0
IGFyZ3VtZW50IHRvIHRoZSBwcm9taXNlIGNvbnN0cnVjdG9yIil9ZnVuY3Rpb24gTSgpe3Rocm93
IG5ldyBUeXBlRXJyb3IoIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ1Byb21pc2UnOiBQbGVhc2UgdXNl
IHRoZSAnbmV3JyBvcGVyYXRvciwgdGhpcyBvYmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNh
bGxlZCBhcyBhIGZ1bmN0aW9uLiIpfWZ1bmN0aW9uIEYoZSx0KXt0aGlzLl9pZD1OZSsrLHRoaXMu
X2xhYmVsPXQsdGhpcy5fc3RhdGU9dm9pZCAwLHRoaXMuX3Jlc3VsdD12b2lkIDAsdGhpcy5fc3Vi
c2NyaWJlcnM9W10sYmUuaW5zdHJ1bWVudCYmcCgiY3JlYXRlZCIsdGhpcyksZCE9PWUmJigiZnVu
Y3Rpb24iIT10eXBlb2YgZSYmSSgpLHRoaXMgaW5zdGFuY2VvZiBGP1IodGhpcyxlKTpNKCkpfWZ1
bmN0aW9uIHooKXt0aGlzLnZhbHVlPXZvaWQgMH1mdW5jdGlvbiBVKGUpe3RyeXtyZXR1cm4gZS50
aGVufWNhdGNoKGUpe3JldHVybiBQZS52YWx1ZT1lLFBlfX1mdW5jdGlvbiBCKGUsdCxuKXt0cnl7
ZS5hcHBseSh0LG4pfWNhdGNoKGUpe3JldHVybiBQZS52YWx1ZT1lLFBlfX1mdW5jdGlvbiBxKGUs
dCl7Zm9yKHZhciBuPXt9LHI9ZS5sZW5ndGgsaT1uZXcgQXJyYXkociksbz0wO288cjtvKyspaVtv
XT1lW29dCitmb3IodmFyIHM9MDtzPHQubGVuZ3RoO3MrKyl7blt0W3NdXT1pW3MrMV19cmV0dXJu
IG59ZnVuY3Rpb24gSChlKXtmb3IodmFyIHQ9ZS5sZW5ndGgsbj1uZXcgQXJyYXkodC0xKSxyPTE7
cjx0O3IrKyluW3ItMV09ZVtyXQorcmV0dXJuIG59ZnVuY3Rpb24gVihlLHQpe3JldHVybnt0aGVu
OmZ1bmN0aW9uKG4scil7cmV0dXJuIGUuY2FsbCh0LG4scil9fX1mdW5jdGlvbiBXKGUsbil7dmFy
IHI9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcyxyPWFyZ3VtZW50cy5sZW5ndGgsaT1uZXcgQXJy
YXkocisxKSxvPSExLHM9MDtzPHI7KytzKXt2YXIgYT1hcmd1bWVudHNbc10KK2lmKCFvKXtpZigo
bz1LKGEpKT09PWplKXt2YXIgdT1uZXcgRihkKQorcmV0dXJuIHgodSxqZS52YWx1ZSksdX1vJiYh
MCE9PW8mJihhPVYobyxhKSl9aVtzXT1hfXZhciBsPW5ldyBGKGQpCityZXR1cm4gaVtyXT1mdW5j
dGlvbihlLHQpe2U/eChsLGUpOnZvaWQgMD09PW4/XyhsLHQpOiEwPT09bj9fKGwsSChhcmd1bWVu
dHMpKTp3ZShuKT9fKGwscShhcmd1bWVudHMsbikpOl8obCx0KX0sbz9HKGwsaSxlLHQpOiQobCxp
LGUsdCl9CityZXR1cm4oMCx0LmRlZmF1bHRzKShyLGUpLHJ9ZnVuY3Rpb24gJChlLHQsbixyKXt2
YXIgaT1CKG4scix0KQorcmV0dXJuIGk9PT1QZSYmeChlLGkudmFsdWUpLGV9ZnVuY3Rpb24gRyhl
LHQsbixyKXtyZXR1cm4gRi5hbGwodCkudGhlbihmdW5jdGlvbih0KXt2YXIgaT1CKG4scix0KQor
cmV0dXJuIGk9PT1QZSYmeChlLGkudmFsdWUpLGV9KX1mdW5jdGlvbiBLKGUpe3JldHVybiEoIWV8
fCJvYmplY3QiIT10eXBlb2YgZSkmJihlLmNvbnN0cnVjdG9yPT09Rnx8VShlKSl9ZnVuY3Rpb24g
UShlLHQpe3JldHVybiBGLmFsbChlLHQpfWZ1bmN0aW9uIFkoZSx0LG4pe3RoaXMuX3N1cGVyQ29u
c3RydWN0b3IoZSx0LCExLG4pfWZ1bmN0aW9uIEooZSx0KXtyZXR1cm4gbmV3IFkoRixlLHQpLnBy
b21pc2V9ZnVuY3Rpb24gWChlLHQpe3JldHVybiBGLnJhY2UoZSx0KX1mdW5jdGlvbiBaKGUsdCxu
KXt0aGlzLl9zdXBlckNvbnN0cnVjdG9yKGUsdCwhMCxuKX1mdW5jdGlvbiBlZShlLHQpe3JldHVy
biBuZXcgWihGLGUsdCkucHJvbWlzZX1mdW5jdGlvbiB0ZShlLHQsbil7dGhpcy5fc3VwZXJDb25z
dHJ1Y3RvcihlLHQsITEsbil9ZnVuY3Rpb24gbmUoZSx0KXtyZXR1cm4gbmV3IHRlKEYsZSx0KS5w
cm9taXNlfWZ1bmN0aW9uIHJlKGUpe3Rocm93IHNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aHJvdyBl
fSksZX1mdW5jdGlvbiBpZShlKXt2YXIgdD17cmVzb2x2ZTp2b2lkIDAscmVqZWN0OnZvaWQgMH0K
K3JldHVybiB0LnByb21pc2U9bmV3IEYoZnVuY3Rpb24oZSxuKXt0LnJlc29sdmU9ZSx0LnJlamVj
dD1ufSxlKSx0fWZ1bmN0aW9uIG9lKGUsdCxuKXtyZXR1cm4gRi5hbGwoZSxuKS50aGVuKGZ1bmN0
aW9uKGUpe2lmKCFhKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIllvdSBtdXN0IHBhc3MgYSBmdW5j
dGlvbiBhcyBtYXAncyBzZWNvbmQgYXJndW1lbnQuIikKK2Zvcih2YXIgcj1lLmxlbmd0aCxpPW5l
dyBBcnJheShyKSxvPTA7bzxyO28rKylpW29dPXQoZVtvXSkKK3JldHVybiBGLmFsbChpLG4pfSl9
ZnVuY3Rpb24gc2UoZSx0KXtyZXR1cm4gRi5yZXNvbHZlKGUsdCl9ZnVuY3Rpb24gYWUoZSx0KXty
ZXR1cm4gRi5yZWplY3QoZSx0KX1mdW5jdGlvbiB1ZShlLHQpe3JldHVybiBGLmFsbChlLHQpfWZ1
bmN0aW9uIGxlKGUsdCl7cmV0dXJuIEYucmVzb2x2ZShlLHQpLnRoZW4oZnVuY3Rpb24oZSl7cmV0
dXJuIHVlKGUsdCl9KX1mdW5jdGlvbiBjZShlLHQsbil7cmV0dXJuKHdlKGUpP3VlKGUsbik6bGUo
ZSxuKSkudGhlbihmdW5jdGlvbihlKXtpZighYSh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJZb3Ug
bXVzdCBwYXNzIGEgZnVuY3Rpb24gYXMgZmlsdGVyJ3Mgc2Vjb25kIGFyZ3VtZW50LiIpCitmb3Io
dmFyIHI9ZS5sZW5ndGgsaT1uZXcgQXJyYXkociksbz0wO288cjtvKyspaVtvXT10KGVbb10pCity
ZXR1cm4gdWUoaSxuKS50aGVuKGZ1bmN0aW9uKHQpe2Zvcih2YXIgbj1uZXcgQXJyYXkociksaT0w
LG89MDtvPHI7bysrKXRbb10mJihuW2ldPWVbb10saSsrKQorcmV0dXJuIG4ubGVuZ3RoPWksbn0p
fSl9ZnVuY3Rpb24gcGUoZSx0KXtCZVtEZV09ZSxCZVtEZSsxXT10LDI9PT0oRGUrPTIpJiZxZSgp
fWZ1bmN0aW9uIGZlKCl7cmV0dXJuIHZvaWQgMCE9PUxlP2Z1bmN0aW9uKCl7TGUoZGUpfTpoZSgp
fWZ1bmN0aW9uIGhlKCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHNldFRpbWVvdXQoZGUsMSl9
fWZ1bmN0aW9uIGRlKCl7Zm9yKHZhciBlPTA7ZTxEZTtlKz0yKXsoMCxCZVtlXSkoQmVbZSsxXSks
QmVbZV09dm9pZCAwLEJlW2UrMV09dm9pZCAwfURlPTB9ZnVuY3Rpb24gbWUoKXtiZS5vbi5hcHBs
eShiZSxhcmd1bWVudHMpfWZ1bmN0aW9uIGdlKCl7YmUub2ZmLmFwcGx5KGJlLGFyZ3VtZW50cyl9
ZS5maWx0ZXI9ZS5hc3luYz1lLm1hcD1lLnJlamVjdD1lLnJlc29sdmU9ZS5vZmY9ZS5vbj1lLmNv
bmZpZ3VyZT1lLmRlbm9kZWlmeT1lLmRlZmVyPWUucmV0aHJvdz1lLmhhc2hTZXR0bGVkPWUuaGFz
aD1lLnJhY2U9ZS5hbGxTZXR0bGVkPWUuYWxsPWUuRXZlbnRUYXJnZXQ9ZS5Qcm9taXNlPWUuY2Fz
dD1lLmFzYXA9dm9pZCAwCit2YXIgeWUsdmU9e21peGluOmZ1bmN0aW9uKGUpe3JldHVybiBlLm9u
PXRoaXMub24sZS5vZmY9dGhpcy5vZmYsZS50cmlnZ2VyPXRoaXMudHJpZ2dlcixlLl9wcm9taXNl
Q2FsbGJhY2tzPXZvaWQgMCxlfSxvbjpmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVv
ZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbGxiYWNrIG11c3QgYmUgYSBmdW5jdGlvbiIpCit2
YXIgbj1pKHRoaXMpLG89dm9pZCAwCitvPW5bZV0sb3x8KG89bltlXT1bXSksLTE9PT1yKG8sdCkm
Jm8ucHVzaCh0KX0sb2ZmOmZ1bmN0aW9uKGUsdCl7dmFyIG49aSh0aGlzKSxvPXZvaWQgMCxzPXZv
aWQgMAoraWYoIXQpcmV0dXJuIHZvaWQobltlXT1bXSkKK289bltlXSwtMSE9PShzPXIobyx0KSkm
Jm8uc3BsaWNlKHMsMSl9LHRyaWdnZXI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWkodGhpcyksbz12
b2lkIDAKK2lmKG89cltlXSlmb3IodmFyIHM9MDtzPG8ubGVuZ3RoO3MrKykoMCxvW3NdKSh0LG4p
fX0sYmU9e2luc3RydW1lbnQ6ITF9Cit2ZS5taXhpbihiZSkKK3ZhciBfZT12b2lkIDAKK19lPUFy
cmF5LmlzQXJyYXk/QXJyYXkuaXNBcnJheTpmdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBBcnJh
eV0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpfQordmFyIHdlPV9lLEVlPURh
dGUubm93fHxmdW5jdGlvbigpe3JldHVybihuZXcgRGF0ZSkuZ2V0VGltZSgpfSx4ZT1PYmplY3Qu
Y3JlYXRlfHxmdW5jdGlvbihlKXtpZihhcmd1bWVudHMubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9y
KCJTZWNvbmQgYXJndW1lbnQgbm90IHN1cHBvcnRlZCIpCitpZigib2JqZWN0IiE9dHlwZW9mIGUp
dGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhbiBvYmplY3QiKQorcmV0dXJu
IGwucHJvdG90eXBlPWUsbmV3IGx9LENlPVtdLE9lPXZvaWQgMCxBZT0xLFRlPTIsU2U9bmV3IEEs
UmU9bmV3IEEKK1AucHJvdG90eXBlLl92YWxpZGF0ZUlucHV0PWZ1bmN0aW9uKGUpe3JldHVybiB3
ZShlKX0sUC5wcm90b3R5cGUuX3ZhbGlkYXRpb25FcnJvcj1mdW5jdGlvbigpe3JldHVybiBuZXcg
RXJyb3IoIkFycmF5IE1ldGhvZHMgbXVzdCBiZSBwcm92aWRlZCBhbiBBcnJheSIpfSxQLnByb3Rv
dHlwZS5faW5pdD1mdW5jdGlvbigpe3RoaXMuX3Jlc3VsdD1uZXcgQXJyYXkodGhpcy5sZW5ndGgp
fSxQLnByb3RvdHlwZS5fZW51bWVyYXRlPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMubGVuZ3Ro
LHQ9dGhpcy5wcm9taXNlLG49dGhpcy5faW5wdXQscj0wO3QuX3N0YXRlPT09T2UmJnI8ZTtyKysp
dGhpcy5fZWFjaEVudHJ5KG5bcl0scil9LFAucHJvdG90eXBlLl9zZXR0bGVNYXliZVRoZW5hYmxl
PWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5faW5zdGFuY2VDb25zdHJ1Y3RvcixyPW4ucmVzb2x2
ZQoraWYocj09PWYpe3ZhciBpPW0oZSkKK2lmKGk9PT1rJiZlLl9zdGF0ZSE9PU9lKWUuX29uRXJy
b3I9bnVsbCx0aGlzLl9zZXR0bGVkQXQoZS5fc3RhdGUsdCxlLl9yZXN1bHQpCitlbHNlIGlmKCJm
dW5jdGlvbiIhPXR5cGVvZiBpKXRoaXMuX3JlbWFpbmluZy0tLHRoaXMuX3Jlc3VsdFt0XT10aGlz
Ll9tYWtlUmVzdWx0KEFlLHQsZSkKK2Vsc2UgaWYobj09PUYpe3ZhciBvPW5ldyBuKGQpCitiKG8s
ZSxpKSx0aGlzLl93aWxsU2V0dGxlQXQobyx0KX1lbHNlIHRoaXMuX3dpbGxTZXR0bGVBdChuZXcg
bihmdW5jdGlvbih0KXtyZXR1cm4gdChlKX0pLHQpfWVsc2UgdGhpcy5fd2lsbFNldHRsZUF0KHIo
ZSksdCl9LFAucHJvdG90eXBlLl9lYWNoRW50cnk9ZnVuY3Rpb24oZSx0KXt1KGUpP3RoaXMuX3Nl
dHRsZU1heWJlVGhlbmFibGUoZSx0KToodGhpcy5fcmVtYWluaW5nLS0sdGhpcy5fcmVzdWx0W3Rd
PXRoaXMuX21ha2VSZXN1bHQoQWUsdCxlKSl9LFAucHJvdG90eXBlLl9zZXR0bGVkQXQ9ZnVuY3Rp
b24oZSx0LG4pe3ZhciByPXRoaXMucHJvbWlzZQorci5fc3RhdGU9PT1PZSYmKHRoaXMuX3JlbWFp
bmluZy0tLHRoaXMuX2Fib3J0T25SZWplY3QmJmU9PT1UZT94KHIsbik6dGhpcy5fcmVzdWx0W3Rd
PXRoaXMuX21ha2VSZXN1bHQoZSx0LG4pKSwwPT09dGhpcy5fcmVtYWluaW5nJiZFKHIsdGhpcy5f
cmVzdWx0KX0sUC5wcm90b3R5cGUuX21ha2VSZXN1bHQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBu
fSxQLnByb3RvdHlwZS5fd2lsbFNldHRsZUF0PWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcworQyhl
LHZvaWQgMCxmdW5jdGlvbihlKXtyZXR1cm4gbi5fc2V0dGxlZEF0KEFlLHQsZSl9LGZ1bmN0aW9u
KGUpe3JldHVybiBuLl9zZXR0bGVkQXQoVGUsdCxlKX0pfQordmFyIGtlPSJyc3ZwXyIrRWUoKSsi
LSIsTmU9MAorRi5jYXN0PWYsRi5hbGw9aixGLnJhY2U9RCxGLnJlc29sdmU9ZixGLnJlamVjdD1M
LEYucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpGLF9ndWlkS2V5OmtlLF9vbkVycm9yOmZ1bmN0aW9u
KGUpe3ZhciB0PXRoaXMKK2JlLmFmdGVyKGZ1bmN0aW9uKCl7dC5fb25FcnJvciYmYmUudHJpZ2dl
cigiZXJyb3IiLGUsdC5fbGFiZWwpfSl9LHRoZW46ayxjYXRjaDpmdW5jdGlvbihlLHQpe3JldHVy
biB0aGlzLnRoZW4odm9pZCAwLGUsdCl9LGZpbmFsbHk6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlz
LHI9bi5jb25zdHJ1Y3RvcgorcmV0dXJuIG4udGhlbihmdW5jdGlvbih0KXtyZXR1cm4gci5yZXNv
bHZlKGUoKSkudGhlbihmdW5jdGlvbigpe3JldHVybiB0fSl9LGZ1bmN0aW9uKHQpe3JldHVybiBy
LnJlc29sdmUoZSgpKS50aGVuKGZ1bmN0aW9uKCl7dGhyb3cgdH0pfSx0KX19Cit2YXIgUGU9bmV3
IHosamU9bmV3IHoKK1kucHJvdG90eXBlPXhlKFAucHJvdG90eXBlKSxZLnByb3RvdHlwZS5fc3Vw
ZXJDb25zdHJ1Y3Rvcj1QLFkucHJvdG90eXBlLl9tYWtlUmVzdWx0PU4sWS5wcm90b3R5cGUuX3Zh
bGlkYXRpb25FcnJvcj1mdW5jdGlvbigpe3JldHVybiBuZXcgRXJyb3IoImFsbFNldHRsZWQgbXVz
dCBiZSBjYWxsZWQgd2l0aCBhbiBhcnJheSIpfSxaLnByb3RvdHlwZT14ZShQLnByb3RvdHlwZSks
Wi5wcm90b3R5cGUuX3N1cGVyQ29uc3RydWN0b3I9UCxaLnByb3RvdHlwZS5faW5pdD1mdW5jdGlv
bigpe3RoaXMuX3Jlc3VsdD17fX0sWi5wcm90b3R5cGUuX3ZhbGlkYXRlSW5wdXQ9ZnVuY3Rpb24o
ZSl7cmV0dXJuIGUmJiJvYmplY3QiPT10eXBlb2YgZX0sWi5wcm90b3R5cGUuX3ZhbGlkYXRpb25F
cnJvcj1mdW5jdGlvbigpe3JldHVybiBuZXcgRXJyb3IoIlByb21pc2UuaGFzaCBtdXN0IGJlIGNh
bGxlZCB3aXRoIGFuIG9iamVjdCIpfSxaLnByb3RvdHlwZS5fZW51bWVyYXRlPWZ1bmN0aW9uKCl7
dmFyIGU9dGhpcyx0PWUucHJvbWlzZSxuPWUuX2lucHV0LHI9W10KK2Zvcih2YXIgaSBpbiBuKXQu
X3N0YXRlPT09T2UmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLGkpJiZy
LnB1c2goe3Bvc2l0aW9uOmksZW50cnk6bltpXX0pCit2YXIgbz1yLmxlbmd0aAorZS5fcmVtYWlu
aW5nPW8KK2Zvcih2YXIgcz12b2lkIDAsYT0wO3QuX3N0YXRlPT09T2UmJmE8bzthKyspcz1yW2Fd
LGUuX2VhY2hFbnRyeShzLmVudHJ5LHMucG9zaXRpb24pfSx0ZS5wcm90b3R5cGU9eGUoWi5wcm90
b3R5cGUpLHRlLnByb3RvdHlwZS5fc3VwZXJDb25zdHJ1Y3Rvcj1QLHRlLnByb3RvdHlwZS5fbWFr
ZVJlc3VsdD1OLHRlLnByb3RvdHlwZS5fdmFsaWRhdGlvbkVycm9yPWZ1bmN0aW9uKCl7cmV0dXJu
IG5ldyBFcnJvcigiaGFzaFNldHRsZWQgbXVzdCBiZSBjYWxsZWQgd2l0aCBhbiBvYmplY3QiKX0K
K3ZhciBEZT0wLExlPXZvaWQgMCxJZT0idW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6
dm9pZCAwLE1lPUllfHx7fSxGZT1NZS5NdXRhdGlvbk9ic2VydmVyfHxNZS5XZWJLaXRNdXRhdGlv
bk9ic2VydmVyLHplPSJ1bmRlZmluZWQiPT10eXBlb2Ygc2VsZiYmInVuZGVmaW5lZCIhPXR5cGVv
ZiBwcm9jZXNzJiYiW29iamVjdCBwcm9jZXNzXSI9PT17fS50b1N0cmluZy5jYWxsKHByb2Nlc3Mp
LFVlPSJ1bmRlZmluZWQiIT10eXBlb2YgVWludDhDbGFtcGVkQXJyYXkmJiJ1bmRlZmluZWQiIT10
eXBlb2YgaW1wb3J0U2NyaXB0cyYmInVuZGVmaW5lZCIhPXR5cGVvZiBNZXNzYWdlQ2hhbm5lbCxC
ZT1uZXcgQXJyYXkoMWUzKSxxZT12b2lkIDAKK3FlPXplP2Z1bmN0aW9uKCl7dmFyIGU9cHJvY2Vz
cy5uZXh0VGljayx0PXByb2Nlc3MudmVyc2lvbnMubm9kZS5tYXRjaCgvXig/OihcZCspXC4pPyg/
OihcZCspXC4pPyhcKnxcZCspJC8pCityZXR1cm4gQXJyYXkuaXNBcnJheSh0KSYmIjAiPT09dFsx
XSYmIjEwIj09PXRbMl0mJihlPXNldEltbWVkaWF0ZSksZnVuY3Rpb24oKXtyZXR1cm4gZShkZSl9
fSgpOkZlP2Z1bmN0aW9uKCl7dmFyIGU9MCx0PW5ldyBGZShkZSksbj1kb2N1bWVudC5jcmVhdGVU
ZXh0Tm9kZSgiIikKK3JldHVybiB0Lm9ic2VydmUobix7Y2hhcmFjdGVyRGF0YTohMH0pLGZ1bmN0
aW9uKCl7cmV0dXJuIG4uZGF0YT1lPSsrZSUyfX0oKTpVZT9mdW5jdGlvbigpe3ZhciBlPW5ldyBN
ZXNzYWdlQ2hhbm5lbAorcmV0dXJuIGUucG9ydDEub25tZXNzYWdlPWRlLGZ1bmN0aW9uKCl7cmV0
dXJuIGUucG9ydDIucG9zdE1lc3NhZ2UoMCl9fSgpOnZvaWQgMD09PUllJiYiZnVuY3Rpb24iPT10
eXBlb2Ygbi5yZXF1aXJlP2Z1bmN0aW9uKCl7dHJ5e3ZhciBlPW4ucmVxdWlyZSx0PWUoInZlcnR4
IikKK3JldHVybiBMZT10LnJ1bk9uTG9vcHx8dC5ydW5PbkNvbnRleHQsZmUoKX1jYXRjaChlKXty
ZXR1cm4gaGUoKX19KCk6aGUoKQoraWYoIm9iamVjdCI9PXR5cGVvZiBzZWxmKXNlbGYKK2Vsc2V7
aWYoIm9iamVjdCIhPXR5cGVvZiBnbG9iYWwpdGhyb3cgbmV3IEVycm9yKCJubyBnbG9iYWw6IGBz
ZWxmYCBvciBgZ2xvYmFsYCBmb3VuZCIpCitnbG9iYWx9YmUuYXN5bmM9cGUsYmUuYWZ0ZXI9ZnVu
Y3Rpb24oZSl7cmV0dXJuIHNldFRpbWVvdXQoZSwwKX0KK3ZhciBIZT1zZSxWZT1mdW5jdGlvbihl
LHQpe3JldHVybiBiZS5hc3luYyhlLHQpfQoraWYoInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cm
JiJvYmplY3QiPT10eXBlb2Ygd2luZG93Ll9fUFJPTUlTRV9JTlNUUlVNRU5UQVRJT05fXyl7dmFy
IFdlPXdpbmRvdy5fX1BST01JU0VfSU5TVFJVTUVOVEFUSU9OX18KK28oImluc3RydW1lbnQiLCEw
KQorZm9yKHZhciAkZSBpbiBXZSlXZS5oYXNPd25Qcm9wZXJ0eSgkZSkmJm1lKCRlLFdlWyRlXSl9
dmFyIEdlPSh5ZT17YXNhcDpwZSxjYXN0OkhlLFByb21pc2U6RixFdmVudFRhcmdldDp2ZSxhbGw6
USxhbGxTZXR0bGVkOkoscmFjZTpYLGhhc2g6ZWUsaGFzaFNldHRsZWQ6bmUscmV0aHJvdzpyZSxk
ZWZlcjppZSxkZW5vZGVpZnk6Vyxjb25maWd1cmU6byxvbjptZSxvZmY6Z2UscmVzb2x2ZTpzZSxy
ZWplY3Q6YWUsbWFwOm9lfSx5ZS5hc3luYz1WZSx5ZS5maWx0ZXI9Y2UseWUpCitlLmFzYXA9cGUs
ZS5jYXN0PUhlLGUuUHJvbWlzZT1GLGUuRXZlbnRUYXJnZXQ9dmUsZS5hbGw9USxlLmFsbFNldHRs
ZWQ9SixlLnJhY2U9WCxlLmhhc2g9ZWUsZS5oYXNoU2V0dGxlZD1uZSxlLnJldGhyb3c9cmUsZS5k
ZWZlcj1pZSxlLmRlbm9kZWlmeT1XLGUuY29uZmlndXJlPW8sZS5vbj1tZSxlLm9mZj1nZSxlLnJl
c29sdmU9c2UsZS5yZWplY3Q9YWUsZS5tYXA9b2UsZS5hc3luYz1WZSxlLmZpbHRlcj1jZSxlLmRl
ZmF1bHQ9R2V9KQordCgiZW1iZXIiKX0oKSxmdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXtkZWZp
bmUoZSxbXSxmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IgorcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0fSl9KGZ1bmN0aW9uKCl7dmFyIHQ9e2Vt
YmVyOntkZWZhdWx0OkVtYmVyfSwiZW1iZXItYXBwbGljYXRpb24iOntkZWZhdWx0OkVtYmVyLkFw
cGxpY2F0aW9ufSwiZW1iZXItYXJyYXkiOntkZWZhdWx0OkVtYmVyLkFycmF5fSwiZW1iZXItYXJy
YXkvbXV0YWJsZSI6e2RlZmF1bHQ6RW1iZXIuTXV0YWJsZUFycmF5fSwiZW1iZXItYXJyYXkvdXRp
bHMiOntBOkVtYmVyLkEsaXNFbWJlckFycmF5OkVtYmVyLmlzQXJyYXksd3JhcDpFbWJlci5tYWtl
QXJyYXl9LCJlbWJlci1jb21wb25lbnQiOntkZWZhdWx0OkVtYmVyLkNvbXBvbmVudH0sImVtYmVy
LWNvbXBvbmVudHMvY2hlY2tib3giOntkZWZhdWx0OkVtYmVyLkNoZWNrYm94fSwiZW1iZXItY29t
cG9uZW50cy90ZXh0LWFyZWEiOntkZWZhdWx0OkVtYmVyLlRleHRBcmVhfSwiZW1iZXItY29tcG9u
ZW50cy90ZXh0LWZpZWxkIjp7ZGVmYXVsdDpFbWJlci5UZXh0RmllbGR9LCJlbWJlci1jb250cm9s
bGVyIjp7ZGVmYXVsdDpFbWJlci5Db250cm9sbGVyfSwiZW1iZXItY29udHJvbGxlci9pbmplY3Qi
OntkZWZhdWx0OkVtYmVyLmluamVjdC5jb250cm9sbGVyfSwiZW1iZXItY29udHJvbGxlci9wcm94
eSI6e2RlZmF1bHQ6RW1iZXIuQXJyYXlQcm94eX0sImVtYmVyLWNvbnRyb2xsZXJzL3NvcnRhYmxl
Ijp7ZGVmYXVsdDpFbWJlci5Tb3J0YWJsZU1peGlufSwiZW1iZXItZGVidWciOntsb2c6RW1iZXIu
ZGVidWcsaW5zcGVjdDpFbWJlci5pbnNwZWN0LHJ1bjpFbWJlci5ydW5JbkRlYnVnLHdhcm46RW1i
ZXIud2Fybn0sImVtYmVyLWRlYnVnL2NvbnRhaW5lci1kZWJ1Zy1hZGFwdGVyIjp7ZGVmYXVsdDpF
bWJlci5Db250YWluZXJEZWJ1Z0FkYXB0ZXJ9LCJlbWJlci1kZWJ1Zy9kYXRhLWFkYXB0ZXIiOntk
ZWZhdWx0OkVtYmVyLkRhdGFBZGFwdGVyfSwiZW1iZXItZGVwcmVjYXRpb25zIjp7ZGVwcmVjYXRl
OkVtYmVyLmRlcHJlY2F0ZSxkZXByZWNhdGVGdW5jOkVtYmVyLmRlcHJlY2F0ZUZ1bmN9LCJlbWJl
ci1lbnVtZXJhYmxlIjp7ZGVmYXVsdDpFbWJlci5FbnVtZXJhYmxlfSwiZW1iZXItZXZlbnRlZCI6
e2RlZmF1bHQ6RW1iZXIuRXZlbnRlZH0sImVtYmVyLWV2ZW50ZWQvb24iOntkZWZhdWx0OkVtYmVy
Lm9ufSwiZW1iZXItZ2xvYmFscy1yZXNvbHZlciI6e2RlZmF1bHQ6RW1iZXIuRGVmYXVsdFJlc29s
dmVyfSwiZW1iZXItaGVscGVyIjp7ZGVmYXVsdDpFbWJlci5IZWxwZXIsaGVscGVyOkVtYmVyLkhl
bHBlciYmRW1iZXIuSGVscGVyLmhlbHBlcn0sImVtYmVyLWluc3RydW1lbnRhdGlvbiI6e2luc3Ry
dW1lbnQ6RW1iZXIuSW5zdHJ1bWVudGF0aW9uLmluc3RydW1lbnQscmVzZXQ6RW1iZXIuSW5zdHJ1
bWVudGF0aW9uLnJlc2V0LHN1YnNjcmliZTpFbWJlci5JbnN0cnVtZW50YXRpb24uc3Vic2NyaWJl
LHVuc3Vic2NyaWJlOkVtYmVyLkluc3RydW1lbnRhdGlvbi51bnN1YnNjcmliZX0sImVtYmVyLWxv
Y2F0aW9ucy9oYXNoIjp7ZGVmYXVsdDpFbWJlci5IYXNoTG9jYXRpb259LCJlbWJlci1sb2NhdGlv
bnMvaGlzdG9yeSI6e2RlZmF1bHQ6RW1iZXIuSGlzdG9yeUxvY2F0aW9ufSwiZW1iZXItbG9jYXRp
b25zL25vbmUiOntkZWZhdWx0OkVtYmVyLk5vbmVMb2NhdGlvbn0sImVtYmVyLW1hcCI6e2RlZmF1
bHQ6RW1iZXIuTWFwLHdpdGhEZWZhdWx0OkVtYmVyLk1hcFdpdGhEZWZhdWx0fSwiZW1iZXItbWV0
YWwvZGVzdHJveSI6e2RlZmF1bHQ6RW1iZXIuZGVzdHJveX0sImVtYmVyLW1ldGFsL2V2ZW50cyI6
e2FkZExpc3RlbmVyOkVtYmVyLmFkZExpc3RlbmVyLHJlbW92ZUxpc3RlbmVyOkVtYmVyLnJlbW92
ZUxpc3RlbmVyLHNlbmQ6RW1iZXIuc2VuZEV2ZW50fSwiZW1iZXItbWV0YWwvZ2V0Ijp7ZGVmYXVs
dDpFbWJlci5nZXQsZ2V0UHJvcGVydGllczpFbWJlci5nZXRQcm9wZXJ0aWVzfSwiZW1iZXItbWV0
YWwvbWl4aW4iOntkZWZhdWx0OkVtYmVyLk1peGlufSwiZW1iZXItbWV0YWwvb2JzZXJ2ZXIiOntk
ZWZhdWx0OkVtYmVyLm9ic2VydmVyLGFkZE9ic2VydmVyOkVtYmVyLmFkZE9ic2VydmVyLHJlbW92
ZU9ic2VydmVyOkVtYmVyLnJlbW92ZU9ic2VydmVyfSwiZW1iZXItbWV0YWwvb24tbG9hZCI6e2Rl
ZmF1bHQ6RW1iZXIub25Mb2FkLHJ1bjpFbWJlci5ydW5Mb2FkSG9va3N9LCJlbWJlci1tZXRhbC9z
ZXQiOntkZWZhdWx0OkVtYmVyLnNldCxzZXRQcm9wZXJ0aWVzOkVtYmVyLnNldFByb3BlcnRpZXMs
dHJ5U2V0OkVtYmVyLnRyeVNldH0sImVtYmVyLW1ldGFsL3V0aWxzIjp7YWxpYXNNZXRob2Q6RW1i
ZXIuYWxpYXNNZXRob2QsYXNzZXJ0OkVtYmVyLmFzc2VydCxjYWNoZUZvcjpFbWJlci5jYWNoZUZv
cixjb3B5OkVtYmVyLmNvcHksZ3VpZEZvcjpFbWJlci5ndWlkRm9yfSwiZW1iZXItb2JqZWN0Ijp7
ZGVmYXVsdDpFbWJlci5PYmplY3R9LCJlbWJlci1vd25lci9nZXQiOntkZWZhdWx0OkVtYmVyLmdl
dE93bmVyfSwiZW1iZXItb3duZXIvc2V0Ijp7ZGVmYXVsdDpFbWJlci5zZXRPd25lcn0sImVtYmVy
LXBsYXRmb3JtIjp7YXNzaWduOkVtYmVyLmFzc2lnbnx8RW1iZXIubWVyZ2UsY3JlYXRlOkVtYmVy
LmNyZWF0ZSxkZWZpbmVQcm9wZXJ0eTpFbWJlci5wbGF0Zm9ybS5kZWZpbmVQcm9wZXJ0eSxoYXNB
Y2Nlc3NvcnM6RW1iZXIucGxhdGZvcm0uaGFzUHJvcGVydHlBY2Nlc3NvcnMsa2V5czpFbWJlci5r
ZXlzfSwiZW1iZXItcm91dGUiOntkZWZhdWx0OkVtYmVyLlJvdXRlfSwiZW1iZXItcm91dGVyIjp7
ZGVmYXVsdDpFbWJlci5Sb3V0ZXJ9LCJlbWJlci1ydW5sb29wIjp7ZGVmYXVsdDpFbWJlci5ydW4s
YmVnaW46RW1iZXIucnVuLmJlZ2luLGJpbmQ6RW1iZXIucnVuLmJpbmQsY2FuY2VsOkVtYmVyLnJ1
bi5jYW5jZWwsZGVib3VuY2U6RW1iZXIucnVuLmRlYm91bmNlLGVuZDpFbWJlci5ydW4uZW5kLGpv
aW46RW1iZXIucnVuLmpvaW4sbGF0ZXI6RW1iZXIucnVuLmxhdGVyLG5leHQ6RW1iZXIucnVuLm5l
eHQsb25jZTpFbWJlci5ydW4ub25jZSxzY2hlZHVsZTpFbWJlci5ydW4uc2NoZWR1bGUsc2NoZWR1
bGVPbmNlOkVtYmVyLnJ1bi5zY2hlZHVsZU9uY2UsdGhyb3R0bGU6RW1iZXIucnVuLnRocm90dGxl
fSwiZW1iZXItc2VydmljZSI6e2RlZmF1bHQ6RW1iZXIuU2VydmljZX0sImVtYmVyLXNlcnZpY2Uv
aW5qZWN0Ijp7ZGVmYXVsdDpFbWJlci5pbmplY3Quc2VydmljZX0sImVtYmVyLXNldC9vcmRlcmVk
Ijp7ZGVmYXVsdDpFbWJlci5PcmRlcmVkU2V0fSwiZW1iZXItc3RyaW5nIjp7Y2FtZWxpemU6RW1i
ZXIuU3RyaW5nLmNhbWVsaXplLGNhcGl0YWxpemU6RW1iZXIuU3RyaW5nLmNhcGl0YWxpemUsY2xh
c3NpZnk6RW1iZXIuU3RyaW5nLmNsYXNzaWZ5LGRhc2hlcml6ZTpFbWJlci5TdHJpbmcuZGFzaGVy
aXplLGRlY2FtZWxpemU6RW1iZXIuU3RyaW5nLmRlY2FtZWxpemUsZm10OkVtYmVyLlN0cmluZy5m
bXQsaHRtbFNhZmU6RW1iZXIuU3RyaW5nLmh0bWxTYWZlLGxvYzpFbWJlci5TdHJpbmcubG9jLHVu
ZGVyc2NvcmU6RW1iZXIuU3RyaW5nLnVuZGVyc2NvcmUsdzpFbWJlci5TdHJpbmcud30sImVtYmVy
LXV0aWxzIjp7aXNCbGFuazpFbWJlci5pc0JsYW5rLGlzRW1wdHk6RW1iZXIuaXNFbXB0eSxpc05v
bmU6RW1iZXIuaXNOb25lLGlzUHJlc2VudDpFbWJlci5pc1ByZXNlbnQsdHJ5SW52b2tlOkVtYmVy
LnRyeUludm9rZSx0eXBlT2Y6RW1iZXIudHlwZU9mfX0KK3RbImVtYmVyLWNvbXB1dGVkIl09e2Rl
ZmF1bHQ6RW1iZXIuY29tcHV0ZWR9Citmb3IodmFyIG49WyJlbXB0eSIsIm5vdEVtcHR5Iiwibm9u
ZSIsIm5vdCIsImJvb2wiLCJtYXRjaCIsImVxdWFsIiwiZ3QiLCJndGUiLCJsdCIsImx0ZSIsImFs
aWFzIiwib25lV2F5IiwicmVhZHMiLCJyZWFkT25seSIsImRlcHJlY2F0aW5nQWxpYXMiLCJhbmQi
LCJvciIsImNvbGxlY3QiLCJzdW0iLCJtaW4iLCJtYXgiLCJtYXAiLCJzb3J0Iiwic2V0RGlmZiIs
Im1hcEJ5IiwibWFwUHJvcGVydHkiLCJmaWx0ZXIiLCJmaWx0ZXJCeSIsImZpbHRlclByb3BlcnR5
IiwidW5pcSIsInVuaW9uIiwiaW50ZXJzZWN0Il0scj0wLGk9bi5sZW5ndGg7cjxpO3IrKyl7dmFy
IG89bltyXQordFsiZW1iZXItY29tcHV0ZWQiXVtvXT1FbWJlci5jb21wdXRlZFtvXX1mb3IodmFy
IHMgaW4gdCllKHMsdFtzXSl9KSgpLGZ1bmN0aW9uKCl7aWYoRW1iZXIuVGVzdCl7dmFyIHQ9eyJl
bWJlci10ZXN0Ijp7ZGVmYXVsdDpFbWJlci5UZXN0fSwiZW1iZXItdGVzdC9hZGFwdGVyIjp7ZGVm
YXVsdDpFbWJlci5UZXN0LkFkYXB0ZXJ9LCJlbWJlci10ZXN0L3F1bml0LWFkYXB0ZXIiOntkZWZh
dWx0OkVtYmVyLlRlc3QuUVVuaXRBZGFwdGVyfX0KK2Zvcih2YXIgbiBpbiB0KWUobix0W25dKX19
KCksZSgianF1ZXJ5Iix7ZGVmYXVsdDpzZWxmLmpRdWVyeX0pLGUoInJzdnAiLHtkZWZhdWx0OkVt
YmVyLlJTVlB9KX0oKSxkZWZpbmUoImVtYmVyL2xvYWQtaW5pdGlhbGl6ZXJzIixbImV4cG9ydHMi
LCJlbWJlci1sb2FkLWluaXRpYWxpemVycyIsImVtYmVyIl0sZnVuY3Rpb24oZSx0LG4pe24uZGVm
YXVsdC5kZXByZWNhdGUoIlVzYWdlIG9mIGBlbWJlci9sb2FkLWluaXRpYWxpemVyc2AgbW9kdWxl
IGlzIGRlcHJlY2F0ZWQsIHBsZWFzZSB1cGRhdGUgdG8gYGVtYmVyLWxvYWQtaW5pdGlhbGl6ZXJz
YC4iLCExLHtpZDoiZW1iZXItbG9hZC1pbml0aWFsaXplcnMubGVnYWN5LXNoaW1zIix1bnRpbDoi
My4wLjAifSksZS5kZWZhdWx0PXQuZGVmYXVsdH0pLGNyZWF0ZURlcHJlY2F0ZWRNb2R1bGUoImVt
YmVyL3Jlc29sdmVyIiksY3JlYXRlRGVwcmVjYXRlZE1vZHVsZSgicmVzb2x2ZXIiKSxkZWZpbmUo
ImVtYmVyLWFqYXgvYWpheC1yZXF1ZXN0IixbImV4cG9ydHMiLCJlbWJlciIsImVtYmVyLWFqYXgv
bWl4aW5zL2FqYXgtcmVxdWVzdCJdLGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10LmRlZmF1bHQuT2Jq
ZWN0CitlLmRlZmF1bHQ9ci5leHRlbmQobi5kZWZhdWx0KX0pLGRlZmluZSgiZW1iZXItYWpheC9l
cnJvcnMiLFsiZXhwb3J0cyIsImVtYmVyIl0sZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKGUpe3Zh
ciB0PWFyZ3VtZW50cy5sZW5ndGg8PTF8fHZvaWQgMD09PWFyZ3VtZW50c1sxXT8iQWpheCBvcGVy
YXRpb24gZmFpbGVkIjphcmd1bWVudHNbMV0KK3guY2FsbCh0aGlzLHQpLHRoaXMuZXJyb3JzPWV8
fFt7dGl0bGU6IkFqYXggRXJyb3IiLGRldGFpbDp0fV19ZnVuY3Rpb24gcihlKXtuLmNhbGwodGhp
cyxlLCJSZXF1ZXN0IHdhcyByZWplY3RlZCBiZWNhdXNlIGl0IHdhcyBpbnZhbGlkIil9ZnVuY3Rp
b24gaShlKXtuLmNhbGwodGhpcyxlLCJBamF4IGF1dGhvcml6YXRpb24gZmFpbGVkIil9ZnVuY3Rp
b24gbyhlKXtuLmNhbGwodGhpcyxlLCJSZXF1ZXN0IHdhcyByZWplY3RlZCBiZWNhdXNlIHVzZXIg
aXMgbm90IHBlcm1pdHRlZCB0byBwZXJmb3JtIHRoaXMgb3BlcmF0aW9uLiIpfWZ1bmN0aW9uIHMo
ZSl7bi5jYWxsKHRoaXMsZSwiUmVxdWVzdCB3YXMgZm9ybWF0dGVkIGluY29ycmVjdGx5LiIpfWZ1
bmN0aW9uIGEoZSl7bi5jYWxsKHRoaXMsZSwiUmVzb3VyY2Ugd2FzIG5vdCBmb3VuZC4iKX1mdW5j
dGlvbiB1KCl7bi5jYWxsKHRoaXMsbnVsbCwiVGhlIGFqYXggb3BlcmF0aW9uIHRpbWVkIG91dCIp
fWZ1bmN0aW9uIGwoKXtuLmNhbGwodGhpcyxudWxsLCJUaGUgYWpheCBvcGVyYXRpb24gd2FzIGFi
b3J0ZWQiKX1mdW5jdGlvbiBjKGUpe24uY2FsbCh0aGlzLGUsIlRoZSBhamF4IG9wZXJhdGlvbiBm
YWlsZWQgZHVlIHRvIGEgY29uZmxpY3QiKX1mdW5jdGlvbiBwKGUpe24uY2FsbCh0aGlzLGUsIlJl
cXVlc3Qgd2FzIHJlamVjdGVkIGR1ZSB0byBzZXJ2ZXIgZXJyb3IiKX1mdW5jdGlvbiBmKGUpe3Jl
dHVybiBlIGluc3RhbmNlb2Ygbn1mdW5jdGlvbiBoKGUpe3JldHVybiBmKGUpP2UgaW5zdGFuY2Vv
ZiBpOjQwMT09PWV9ZnVuY3Rpb24gZChlKXtyZXR1cm4gZihlKT9lIGluc3RhbmNlb2Ygbzo0MDM9
PT1lfWZ1bmN0aW9uIG0oZSl7cmV0dXJuIGYoZSk/ZSBpbnN0YW5jZW9mIHI6NDIyPT09ZX1mdW5j
dGlvbiBnKGUpe3JldHVybiBmKGUpP2UgaW5zdGFuY2VvZiBzOjQwMD09PWV9ZnVuY3Rpb24geShl
KXtyZXR1cm4gZihlKT9lIGluc3RhbmNlb2YgYTo0MDQ9PT1lfWZ1bmN0aW9uIHYoZSl7cmV0dXJu
IGUgaW5zdGFuY2VvZiB1fWZ1bmN0aW9uIGIoZSl7cmV0dXJuIGYoZSk/ZSBpbnN0YW5jZW9mIGw6
MD09PWV9ZnVuY3Rpb24gXyhlKXtyZXR1cm4gZihlKT9lIGluc3RhbmNlb2YgYzo0MDk9PT1lfWZ1
bmN0aW9uIHcoZSl7cmV0dXJuIGYoZSk/ZSBpbnN0YW5jZW9mIHA6ZT49NTAwJiZlPDYwMH1mdW5j
dGlvbiBFKGUpe3ZhciB0PXBhcnNlSW50KGUsMTApCityZXR1cm4gdD49MjAwJiZ0PDMwMHx8MzA0
PT09dH1lLkFqYXhFcnJvcj1uLGUuSW52YWxpZEVycm9yPXIsZS5VbmF1dGhvcml6ZWRFcnJvcj1p
LGUuRm9yYmlkZGVuRXJyb3I9byxlLkJhZFJlcXVlc3RFcnJvcj1zLGUuTm90Rm91bmRFcnJvcj1h
LGUuVGltZW91dEVycm9yPXUsZS5BYm9ydEVycm9yPWwsZS5Db25mbGljdEVycm9yPWMsZS5TZXJ2
ZXJFcnJvcj1wLGUuaXNBamF4RXJyb3I9ZixlLmlzVW5hdXRob3JpemVkRXJyb3I9aCxlLmlzRm9y
YmlkZGVuRXJyb3I9ZCxlLmlzSW52YWxpZEVycm9yPW0sZS5pc0JhZFJlcXVlc3RFcnJvcj1nLGUu
aXNOb3RGb3VuZEVycm9yPXksZS5pc1RpbWVvdXRFcnJvcj12LGUuaXNBYm9ydEVycm9yPWIsZS5p
c0NvbmZsaWN0RXJyb3I9XyxlLmlzU2VydmVyRXJyb3I9dyxlLmlzU3VjY2Vzcz1FCit2YXIgeD10
LmRlZmF1bHQuRXJyb3IKK24ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoeC5wcm90b3R5cGUpLHIu
cHJvdG90eXBlPU9iamVjdC5jcmVhdGUobi5wcm90b3R5cGUpLGkucHJvdG90eXBlPU9iamVjdC5j
cmVhdGUobi5wcm90b3R5cGUpLG8ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobi5wcm90b3R5cGUp
LHMucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobi5wcm90b3R5cGUpLGEucHJvdG90eXBlPU9iamVj
dC5jcmVhdGUobi5wcm90b3R5cGUpLHUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobi5wcm90b3R5
cGUpLGwucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobi5wcm90b3R5cGUpLGMucHJvdG90eXBlPU9i
amVjdC5jcmVhdGUobi5wcm90b3R5cGUpLHAucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobi5wcm90
b3R5cGUpfSksZGVmaW5lKCJlbWJlci1hamF4L2luZGV4IixbImV4cG9ydHMiLCJlbWJlci1hamF4
L3JlcXVlc3QiXSxmdW5jdGlvbihlLHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJkZWZhdWx0
Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdC5kZWZhdWx0fX0pfSksZGVm
aW5lKCJlbWJlci1hamF4L21peGlucy9hamF4LXJlcXVlc3QiLFsiZXhwb3J0cyIsImVtYmVyIiwi
ZW1iZXItYWpheC9lcnJvcnMiLCJlbWJlci1hamF4L3V0aWxzL3BhcnNlLXJlc3BvbnNlLWhlYWRl
cnMiLCJlbWJlci1hamF4L3V0aWxzL2dldC1oZWFkZXIiLCJlbWJlci1hamF4L3V0aWxzL3VybC1o
ZWxwZXJzIiwiZW1iZXItYWpheC91dGlscy9hamF4Il0sZnVuY3Rpb24oZSx0LG4scixpLG8scyl7
ZnVuY3Rpb24gYShlKXtyZXR1cm4hRShlKSYmISFlLm1hdGNoKFMpfWZ1bmN0aW9uIHUoZSl7cmV0
dXJuIi8iPT09ZS5jaGFyQXQoMCl9ZnVuY3Rpb24gbChlKXtyZXR1cm4iLyI9PT1lLmNoYXJBdChl
Lmxlbmd0aC0xKX1mdW5jdGlvbiBjKGUpe3JldHVybiB1KGUpJiYoZT1lLnN1YnN0cmluZygxKSks
bChlKSYmKGU9ZS5zbGljZSgwLC0xKSksZX1mdW5jdGlvbiBwKGUpe3JldHVybiJvYmplY3QiPT10
eXBlb2YgZX1mdW5jdGlvbiBmKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZX12YXIgaD0odC5k
ZWZhdWx0LiQsdC5kZWZhdWx0LkEpLGQ9dC5kZWZhdWx0LkVycm9yLG09dC5kZWZhdWx0LkxvZ2dl
cixnPXQuZGVmYXVsdC5NaXhpbix5PXQuZGVmYXVsdC5SU1ZQLlByb21pc2Usdj10LmRlZmF1bHQu
VGVzdCxiPXQuZGVmYXVsdC5nZXQsXz10LmRlZmF1bHQuaXNBcnJheSx3PXQuZGVmYXVsdC5pc0Vt
cHR5LEU9dC5kZWZhdWx0LmlzTm9uZSx4PXQuZGVmYXVsdC5tZXJnZSxDPXQuZGVmYXVsdC5ydW4s
Tz10LmRlZmF1bHQucnVuSW5EZWJ1ZyxBPXQuZGVmYXVsdC50ZXN0aW5nLFQ9dC5kZWZhdWx0Lndh
cm4sUz0vXmFwcGxpY2F0aW9uXC92bmRcLmFwaVwranNvbi9pLFI9MAorQSYmdi5yZWdpc3Rlcldh
aXRlcihmdW5jdGlvbigpe3JldHVybiAwPT09Un0pLGUuZGVmYXVsdD1nLmNyZWF0ZSh7Y29udGVu
dFR5cGU6ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDsgY2hhcnNldD1VVEYtOCIs
aGVhZGVyczp7fSxyZXF1ZXN0OmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcyxyPXRoaXMub3B0aW9u
cyhlLHQpCityZXR1cm4gbmV3IHkoZnVuY3Rpb24oZSx0KXtuLl9tYWtlUmVxdWVzdChyKS50aGVu
KGZ1bmN0aW9uKHQpe3ZhciBuPXQucmVzcG9uc2UKK2Uobil9KS5jYXRjaChmdW5jdGlvbihlKXt2
YXIgbj1lLnJlc3BvbnNlCit0KG4pfSl9LCJlbWJlci1hamF4OiAiK3IudHlwZSsiICIrci51cmwr
IiByZXNwb25zZSIpfSxyYXc6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLm9wdGlvbnMoZSx0KQor
cmV0dXJuIHRoaXMuX21ha2VSZXF1ZXN0KG4pfSxfbWFrZVJlcXVlc3Q6ZnVuY3Rpb24oZSl7dmFy
IHQ9dGhpcyxvPWUubWV0aG9kfHxlLnR5cGV8fCJHRVQiLHU9e21ldGhvZDpvLHR5cGU6byx1cmw6
ZS51cmx9CityZXR1cm4gYSgoMCxpLmRlZmF1bHQpKGUuaGVhZGVycywiQ29udGVudC1UeXBlIikp
JiYiR0VUIiE9PXUudHlwZSYmIm9iamVjdCI9PXR5cGVvZiBlLmRhdGEmJihlLmRhdGE9SlNPTi5z
dHJpbmdpZnkoZS5kYXRhKSksbmV3IHkoZnVuY3Rpb24oaSxvKXtlLnN1Y2Nlc3M9ZnVuY3Rpb24o
ZSxzLGEpe3ZhciBsPXQuaGFuZGxlUmVzcG9uc2UoYS5zdGF0dXMsKDAsci5kZWZhdWx0KShhLmdl
dEFsbFJlc3BvbnNlSGVhZGVycygpKSxlLHUpCitSLT0xLCgwLG4uaXNBamF4RXJyb3IpKGwpP0Mu
am9pbihudWxsLG8se3BheWxvYWQ6ZSx0ZXh0U3RhdHVzOnMsanFYSFI6YSxyZXNwb25zZTpsfSk6
Qy5qb2luKG51bGwsaSx7cGF5bG9hZDplLHRleHRTdGF0dXM6cyxqcVhIUjphLHJlc3BvbnNlOmx9
KX0sZS5lcnJvcj1mdW5jdGlvbihlLGkscyl7TyhmdW5jdGlvbigpe3ZhciB0PSJUaGUgc2VydmVy
IHJldHVybmVkIGFuIGVtcHR5IHN0cmluZyBmb3IgIit1LnR5cGUrIiAiK3UudXJsKyIsIHdoaWNo
IGNhbm5vdCBiZSBwYXJzZWQgaW50byBhIHZhbGlkIEpTT04uIFJldHVybiBlaXRoZXIgbnVsbCBv
ciB7fS4iLG49ISgicGFyc2VyZXJyb3IiPT09aSYmIiI9PT1lLnJlc3BvbnNlVGV4dCkKK1QodCxu
LHtpZDoiZHMuYWRhcHRlci5yZXR1cm5lZC1lbXB0eS1zdHJpbmctYXMtSlNPTiJ9KX0pCit2YXIg
YT10LnBhcnNlRXJyb3JSZXNwb25zZShlLnJlc3BvbnNlVGV4dCl8fHMsbD12b2lkIDAKK2w9cyBp
bnN0YW5jZW9mIEVycm9yP3M6InRpbWVvdXQiPT09aT9uZXcgbi5UaW1lb3V0RXJyb3I6ImFib3J0
Ij09PWk/bmV3IG4uQWJvcnRFcnJvcjp0LmhhbmRsZVJlc3BvbnNlKGUuc3RhdHVzLCgwLHIuZGVm
YXVsdCkoZS5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSksYSx1KSxSLT0xLEMuam9pbihudWxsLG8s
e3BheWxvYWQ6YSx0ZXh0U3RhdHVzOmksanFYSFI6ZSxlcnJvclRocm93bjpzLHJlc3BvbnNlOmx9
KX0sUis9MSwoMCxzLmRlZmF1bHQpKGUpfSwiZW1iZXItYWpheDogIitlLnR5cGUrIiAiK2UudXJs
KX0scG9zdDpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLnJlcXVlc3QoZSx0aGlzLl9hZGRUeXBl
VG9PcHRpb25zRm9yKHQsIlBPU1QiKSl9LHB1dDpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLnJl
cXVlc3QoZSx0aGlzLl9hZGRUeXBlVG9PcHRpb25zRm9yKHQsIlBVVCIpKX0scGF0Y2g6ZnVuY3Rp
b24oZSx0KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KGUsdGhpcy5fYWRkVHlwZVRvT3B0aW9uc0Zvcih0
LCJQQVRDSCIpKX0sZGVsOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMucmVxdWVzdChlLHRoaXMu
X2FkZFR5cGVUb09wdGlvbnNGb3IodCwiREVMRVRFIikpfSxkZWxldGU6ZnVuY3Rpb24oKXtyZXR1
cm4gdGhpcy5kZWwuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxnZXQ6ZnVuY3Rpb24oZSl7aWYoYXJn
dW1lbnRzLmxlbmd0aD4xfHwiLyI9PT1lLmNoYXJBdCgwKSl0aHJvdyBuZXcgZCgiSXQgc2VlbXMg
eW91IHRyaWVkIHRvIHVzZSBgLmdldGAgdG8gbWFrZSBhIHJlcXVlc3QhIFVzZSB0aGUgYC5yZXF1
ZXN0YCBtZXRob2QgaW5zdGVhZC4iKQorcmV0dXJuIHRoaXMuX3N1cGVyLmFwcGx5KHRoaXMsYXJn
dW1lbnRzKX0sX2FkZFR5cGVUb09wdGlvbnNGb3I6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT1lfHx7
fSxlLnR5cGU9dCxlfSxfZ2V0RnVsbEhlYWRlcnNIYXNoOmZ1bmN0aW9uKGUpe3ZhciB0PWIodGhp
cywiaGVhZGVycyIpLG49eCh7fSx0KQorcmV0dXJuIHgobixlKX0sb3B0aW9uczpmdW5jdGlvbihl
KXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPD0xfHx2b2lkIDA9PT1hcmd1bWVudHNbMV0/e306YXJn
dW1lbnRzWzFdCityZXR1cm4gdD14KHt9LHQpLHQudXJsPXRoaXMuX2J1aWxkVVJMKGUsdCksdC50
eXBlPXQudHlwZXx8IkdFVCIsdC5kYXRhVHlwZT10LmRhdGFUeXBlfHwianNvbiIsdC5jb250ZW50
VHlwZT13KHQuY29udGVudFR5cGUpP2IodGhpcywiY29udGVudFR5cGUiKTp0LmNvbnRlbnRUeXBl
LHRoaXMuX3Nob3VsZFNlbmRIZWFkZXJzKHQpP3QuaGVhZGVycz10aGlzLl9nZXRGdWxsSGVhZGVy
c0hhc2godC5oZWFkZXJzKTp0LmhlYWRlcnM9dC5oZWFkZXJzfHx7fSx0fSxfYnVpbGRVUkw6ZnVu
Y3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aDw9MXx8dm9pZCAwPT09YXJndW1lbnRzWzFd
P3t9OmFyZ3VtZW50c1sxXSxuPW5ldyBvLlJlcXVlc3RVUkwoZSkKK2lmKG4uaXNDb21wbGV0ZSly
ZXR1cm4gbi5ocmVmCit2YXIgcj10Lmhvc3R8fGIodGhpcywiaG9zdCIpLGk9dC5uYW1lc3BhY2V8
fGIodGhpcywibmFtZXNwYWNlIikKK2lmKGkmJihpPWMoaSkpLG5ldyBSZWdFeHAoIl4oLyk/Iitp
KS50ZXN0KGUpKXJldHVybiBlCit2YXIgcz0iIgorcmV0dXJuIHImJihzKz1yKSxpJiYobChzKXx8
KHMrPSIvIikscys9aSksZSYmKHUoZSl8fChzKz0iLyIpLHMrPWUpLHN9LGhhbmRsZVJlc3BvbnNl
OmZ1bmN0aW9uKGUsdCxyLGkpe3I9bnVsbD09PXJ8fHZvaWQgMD09PXI/e306cgordmFyIG89dGhp
cy5ub3JtYWxpemVFcnJvclJlc3BvbnNlKGUsdCxyKQoraWYodGhpcy5pc1N1Y2Nlc3MoZSx0LHIp
KXJldHVybiByCitpZih0aGlzLmlzVW5hdXRob3JpemVkRXJyb3IoZSx0LHIpKXJldHVybiBuZXcg
bi5VbmF1dGhvcml6ZWRFcnJvcihvKQoraWYodGhpcy5pc0ZvcmJpZGRlbkVycm9yKGUsdCxyKSly
ZXR1cm4gbmV3IG4uRm9yYmlkZGVuRXJyb3IobykKK2lmKHRoaXMuaXNJbnZhbGlkRXJyb3IoZSx0
LHIpKXJldHVybiBuZXcgbi5JbnZhbGlkRXJyb3IobykKK2lmKHRoaXMuaXNCYWRSZXF1ZXN0RXJy
b3IoZSx0LHIpKXJldHVybiBuZXcgbi5CYWRSZXF1ZXN0RXJyb3IobykKK2lmKHRoaXMuaXNOb3RG
b3VuZEVycm9yKGUsdCxyKSlyZXR1cm4gbmV3IG4uTm90Rm91bmRFcnJvcihvKQoraWYodGhpcy5p
c0Fib3J0RXJyb3IoZSx0LHIpKXJldHVybiBuZXcgbi5BYm9ydEVycm9yKG8pCitpZih0aGlzLmlz
Q29uZmxpY3RFcnJvcihlLHQscikpcmV0dXJuIG5ldyBuLkNvbmZsaWN0RXJyb3IobykKK2lmKHRo
aXMuaXNTZXJ2ZXJFcnJvcihlLHQscikpcmV0dXJuIG5ldyBuLlNlcnZlckVycm9yKG8pCit2YXIg
cz10aGlzLmdlbmVyYXRlRGV0YWlsZWRNZXNzYWdlKGUsdCxyLGkpCityZXR1cm4gbmV3IG4uQWph
eEVycm9yKG8scyl9LF9tYXRjaEhvc3RzOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQuY29uc3RydWN0
b3I9PT1SZWdFeHA/dC50ZXN0KGUpOiJzdHJpbmciPT10eXBlb2YgdD90PT09ZToobS53YXJuKCJ0
cnVzdGVkSG9zdHMgb25seSBoYW5kbGVzIHN0cmluZ3Mgb3IgcmVnZXhlcy4iLHQsImlzIG5laXRo
ZXIuIiksITEpfSxfc2hvdWxkU2VuZEhlYWRlcnM6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPWUu
dXJsLHI9ZS5ob3N0CituPW58fCIiLHI9cnx8Yih0aGlzLCJob3N0Iil8fCIiCit2YXIgaT1uZXcg
by5SZXF1ZXN0VVJMKG4pLHM9Yih0aGlzLCJ0cnVzdGVkSG9zdHMiKXx8aCgpCitpZighaS5pc0Nv
bXBsZXRlKXJldHVybiEwCitpZihzLmZpbmQoZnVuY3Rpb24oZSl7cmV0dXJuIHQuX21hdGNoSG9z
dHMoaS5ob3N0bmFtZSxlKX0pKXJldHVybiEwCit2YXIgYT1uZXcgby5SZXF1ZXN0VVJMKHIpCity
ZXR1cm4gaS5zYW1lSG9zdChhKX0sZ2VuZXJhdGVEZXRhaWxlZE1lc3NhZ2U6ZnVuY3Rpb24oZSx0
LG4scil7dmFyIG89dm9pZCAwLHM9KDAsaS5kZWZhdWx0KSh0LCJDb250ZW50LVR5cGUiKXx8IkVt
cHR5IENvbnRlbnQtVHlwZSIKK3JldHVybiBvPSJ0ZXh0L2h0bWwiPT09cy50b0xvd2VyQ2FzZSgp
JiZuLmxlbmd0aD4yNTA/IltPbWl0dGVkIExlbmd0aHkgSFRNTF0iOkpTT04uc3RyaW5naWZ5KG4p
LFsiRW1iZXIgQUpBWCBSZXF1ZXN0ICIrci50eXBlKyIgIityLnVybCsiIHJldHVybmVkIGEgIitl
LCJQYXlsb2FkICgiK3MrIikiLG9dLmpvaW4oIlxuIil9LGlzVW5hdXRob3JpemVkRXJyb3I6ZnVu
Y3Rpb24oZSl7cmV0dXJuKDAsbi5pc1VuYXV0aG9yaXplZEVycm9yKShlKX0saXNGb3JiaWRkZW5F
cnJvcjpmdW5jdGlvbihlKXtyZXR1cm4oMCxuLmlzRm9yYmlkZGVuRXJyb3IpKGUpfSxpc0ludmFs
aWRFcnJvcjpmdW5jdGlvbihlKXtyZXR1cm4oMCxuLmlzSW52YWxpZEVycm9yKShlKX0saXNCYWRS
ZXF1ZXN0RXJyb3I6ZnVuY3Rpb24oZSl7cmV0dXJuKDAsbi5pc0JhZFJlcXVlc3RFcnJvcikoZSl9
LGlzTm90Rm91bmRFcnJvcjpmdW5jdGlvbihlKXtyZXR1cm4oMCxuLmlzTm90Rm91bmRFcnJvciko
ZSl9LGlzQWJvcnRFcnJvcjpmdW5jdGlvbihlKXtyZXR1cm4oMCxuLmlzQWJvcnRFcnJvcikoZSl9
LGlzQ29uZmxpY3RFcnJvcjpmdW5jdGlvbihlKXtyZXR1cm4oMCxuLmlzQ29uZmxpY3RFcnJvciko
ZSl9LGlzU2VydmVyRXJyb3I6ZnVuY3Rpb24oZSl7cmV0dXJuKDAsbi5pc1NlcnZlckVycm9yKShl
KX0saXNTdWNjZXNzOmZ1bmN0aW9uKGUpe3JldHVybigwLG4uaXNTdWNjZXNzKShlKX0scGFyc2VF
cnJvclJlc3BvbnNlOmZ1bmN0aW9uKGUpe3RyeXtyZXR1cm4gSlNPTi5wYXJzZShlKX1jYXRjaCh0
KXtyZXR1cm4gZX19LG5vcm1hbGl6ZUVycm9yUmVzcG9uc2U6ZnVuY3Rpb24oZSx0LG4pe3JldHVy
biBfKG4uZXJyb3JzKT9uLmVycm9ycy5tYXAoZnVuY3Rpb24odCl7aWYocCh0KSl7dmFyIG49eCh7
fSx0KQorcmV0dXJuIG4uc3RhdHVzPSIiK3Quc3RhdHVzLG59cmV0dXJue3N0YXR1czoiIitlLHRp
dGxlOnR9fSk6XyhuKT9uLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gcCh0KT97c3RhdHVzOiIiK2Us
dGl0bGU6dC50aXRsZXx8IlRoZSBiYWNrZW5kIHJlc3BvbmRlZCB3aXRoIGFuIGVycm9yIixkZXRh
aWw6dH06e3N0YXR1czoiIitlLHRpdGxlOiIiK3R9fSk6ZihuKT9be3N0YXR1czoiIitlLHRpdGxl
Om59XTpbe3N0YXR1czoiIitlLHRpdGxlOm4udGl0bGV8fCJUaGUgYmFja2VuZCByZXNwb25kZWQg
d2l0aCBhbiBlcnJvciIsZGV0YWlsOm59XX19KX0pLGRlZmluZSgiZW1iZXItYWpheC9taXhpbnMv
YWpheC1zdXBwb3J0IixbImV4cG9ydHMiLCJlbWJlciJdLGZ1bmN0aW9uKGUsdCl7dmFyIG49dC5k
ZWZhdWx0Lk1peGluLHI9dC5kZWZhdWx0LmluamVjdC5zZXJ2aWNlLGk9dC5kZWZhdWx0LmNvbXB1
dGVkLmFsaWFzCitlLmRlZmF1bHQ9bi5jcmVhdGUoe2FqYXhTZXJ2aWNlOnIoImFqYXgiKSxob3N0
OmkoImFqYXhTZXJ2aWNlLmhvc3QiKSxuYW1lc3BhY2U6aSgiYWpheFNlcnZpY2UubmFtZXNwYWNl
IiksaGVhZGVyczppKCJhamF4U2VydmljZS5oZWFkZXJzIiksYWpheDpmdW5jdGlvbihlLHQpe3Zh
ciBuPShhcmd1bWVudHMubGVuZ3RoPD0yfHx2b2lkIDA9PT1hcmd1bWVudHNbMl18fGFyZ3VtZW50
c1syXSx0aGlzLmFqYXhPcHRpb25zLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkKK3JldHVybiB0aGlz
LmdldCgiYWpheFNlcnZpY2UiKS5yZXF1ZXN0KGUsbil9fSl9KSxkZWZpbmUoImVtYmVyLWFqYXgv
cmF3IixbImV4cG9ydHMiLCJlbWJlci1hamF4L2FqYXgtcmVxdWVzdCJdLGZ1bmN0aW9uKGUsdCl7
ZnVuY3Rpb24gbigpe3ZhciBlPW5ldyB0LmRlZmF1bHQKK3JldHVybiBlLnJhdy5hcHBseShlLGFy
Z3VtZW50cyl9ZS5kZWZhdWx0PW59KSxkZWZpbmUoImVtYmVyLWFqYXgvcmVxdWVzdCIsWyJleHBv
cnRzIiwiZW1iZXItYWpheC9hamF4LXJlcXVlc3QiXSxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4o
KXt2YXIgZT1uZXcgdC5kZWZhdWx0CityZXR1cm4gZS5yZXF1ZXN0LmFwcGx5KGUsYXJndW1lbnRz
KX1lLmRlZmF1bHQ9bn0pLGRlZmluZSgiZW1iZXItYWpheC9zZXJ2aWNlcy9hamF4IixbImV4cG9y
dHMiLCJlbWJlciIsImVtYmVyLWFqYXgvbWl4aW5zL2FqYXgtcmVxdWVzdCJdLGZ1bmN0aW9uKGUs
dCxuKXt2YXIgcj10LmRlZmF1bHQuU2VydmljZQorZS5kZWZhdWx0PXIuZXh0ZW5kKG4uZGVmYXVs
dCl9KSxkZWZpbmUoImVtYmVyLWFqYXgvdXRpbHMvYWpheCIsWyJleHBvcnRzIiwiZW1iZXIiLCJl
bWJlci1hamF4L3V0aWxzL2lzLWZhc3Rib290Il0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPXQuZGVm
YXVsdC4kCitlLmRlZmF1bHQ9bi5kZWZhdWx0P25hamF4OnIuYWpheH0pLGRlZmluZSgiZW1iZXIt
YWpheC91dGlscy9nZXQtaGVhZGVyIixbImV4cG9ydHMiLCJlbWJlciJdLGZ1bmN0aW9uKGUsdCl7
ZnVuY3Rpb24gbihlLHQpe2lmKCFpKGUpJiYhaSh0KSl7cmV0dXJuIGVbcihPYmplY3Qua2V5cyhl
KSkuZmluZChmdW5jdGlvbihlKXtyZXR1cm4gZS50b0xvd2VyQ2FzZSgpPT09dC50b0xvd2VyQ2Fz
ZSgpfSldfX1lLmRlZmF1bHQ9bgordmFyIHI9dC5kZWZhdWx0LkEsaT10LmRlZmF1bHQuaXNOb25l
fSksZGVmaW5lKCJlbWJlci1hamF4L3V0aWxzL2lzLWZhc3Rib290IixbImV4cG9ydHMiXSxmdW5j
dGlvbihlKXt2YXIgdD0idW5kZWZpbmVkIiE9dHlwZW9mIEZhc3RCb290CitlLmRlZmF1bHQ9dH0p
LGRlZmluZSgiZW1iZXItYWpheC91dGlscy9wYXJzZS1yZXNwb25zZS1oZWFkZXJzIixbImV4cG9y
dHMiXSxmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpP2U6
QXJyYXkuZnJvbShlKX1mdW5jdGlvbiBuKGUpe3ZhciBuPXt9CityZXR1cm4gZT8oZS5zcGxpdChy
KS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciByPWUuc3BsaXQoIjoiKSxpPXQociksbz1pWzBdLHM9
aS5zbGljZSgxKQorbz1vLnRyaW0oKSwocz1zLmpvaW4oIjoiKS50cmltKCkpJiYobltvXT1zKX0p
LG4pOm59ZS5kZWZhdWx0PW4KK3ZhciByPSJcclxuIn0pLGRlZmluZSgiZW1iZXItYWpheC91dGls
cy91cmwtaGVscGVycyIsWyJleHBvcnRzIiwiZW1iZXItYWpheC91dGlscy9pcy1mYXN0Ym9vdCJd
LGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93
IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0
aW9uIHIoZSl7dmFyIG49dm9pZCAwCitzfHx0LmRlZmF1bHQ/bj1hLnBhcnNlKGUpOihhLmhyZWY9
ZSxuPWEpCit2YXIgcj17fQorcmV0dXJuIHIuaHJlZj1uLmhyZWYsci5wcm90b2NvbD1uLnByb3Rv
Y29sLHIuaG9zdG5hbWU9bi5ob3N0bmFtZSxyLnBvcnQ9bi5wb3J0LHIucGF0aG5hbWU9bi5wYXRo
bmFtZSxyLnNlYXJjaD1uLnNlYXJjaCxyLmhhc2g9bi5oYXNoLHJ9dmFyIGk9ZnVuY3Rpb24oKXtm
dW5jdGlvbiBlKGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl0KK3Iu
ZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBy
JiYoci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsci5rZXkscil9fXJldHVy
biBmdW5jdGlvbih0LG4scil7cmV0dXJuIG4mJmUodC5wcm90b3R5cGUsbiksciYmZSh0LHIpLHR9
fSgpLG89L14oaHR0cHxodHRwcykvLHM9Im9iamVjdCI9PXR5cGVvZiBtb2R1bGUmJm1vZHVsZS5l
eHBvcnRzLGE9ZnVuY3Rpb24oKXtyZXR1cm4gdC5kZWZhdWx0P1VSTDpzP3JlcXVpcmUoInVybCIp
OmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKX0oKSx1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0
KXtuKHRoaXMsZSksdGhpcy51cmw9dH1yZXR1cm4gaShlLFt7a2V5OiJzYW1lSG9zdCIsdmFsdWU6
ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcworcmV0dXJuWyJwcm90b2NvbCIsImhvc3RuYW1lIiwicG9y
dCJdLnJlZHVjZShmdW5jdGlvbihuLHIpe3JldHVybiBuJiZ0W3JdPT09ZVtyXX0sITApfX0se2tl
eToidXJsIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdXJsfSxzZXQ6ZnVuY3Rpb24oZSl7
dGhpcy5fdXJsPWUKK3ZhciB0PXIoZSkKK2Zvcih2YXIgbiBpbiB0KSh7fSkuaGFzT3duUHJvcGVy
dHkuY2FsbCh0LG4pJiYodGhpc1tuXT10W25dKQorcmV0dXJuIHRoaXMuX3VybH19LHtrZXk6Imlz
Q29tcGxldGUiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnVybC5tYXRjaChvKX19XSksZX0o
KQorZS5SZXF1ZXN0VVJMPXV9KSxkZWZpbmUoImVtYmVyLWNsaS1hcHAtdmVyc2lvbi9pbml0aWFs
aXplci1mYWN0b3J5IixbImV4cG9ydHMiLCJlbWJlciJdLGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24g
bihlLHQpe3ZhciBuPSExCityZXR1cm4gZnVuY3Rpb24oKXtpZighbiYmZSYmdCl7dmFyIG89cihl
KQoraS5yZWdpc3RlcihvLHQpLG49ITB9fX1lLmRlZmF1bHQ9bgordmFyIHI9dC5kZWZhdWx0LlN0
cmluZy5jbGFzc2lmeSxpPXQuZGVmYXVsdC5saWJyYXJpZXN9KSxkZWZpbmUoImVtYmVyLWNsaS1h
cHAtdmVyc2lvbi91dGlscy9yZWdleHAiLFsiZXhwb3J0cyJdLGZ1bmN0aW9uKGUpe3ZhciB0PS9c
ZFsuXVxkWy5dXGQvCitlLnZlcnNpb25SZWdFeHA9dAordmFyIG49L1thLXpcZF17OH0vCitlLnNo
YVJlZ0V4cD1ufSksZGVmaW5lKCJlbWJlci1pbmZsZWN0b3IvaW5kZXgiLFsiZXhwb3J0cyIsImVt
YmVyIiwiZW1iZXItaW5mbGVjdG9yL2xpYi9zeXN0ZW0iLCJlbWJlci1pbmZsZWN0b3IvbGliL2V4
dC9zdHJpbmciXSxmdW5jdGlvbihlLHQsbixyKXtuLkluZmxlY3Rvci5kZWZhdWx0UnVsZXM9bi5k
ZWZhdWx0UnVsZXMsdC5kZWZhdWx0LkluZmxlY3Rvcj1uLkluZmxlY3Rvcix0LmRlZmF1bHQuU3Ry
aW5nLnBsdXJhbGl6ZT1uLnBsdXJhbGl6ZSx0LmRlZmF1bHQuU3RyaW5nLnNpbmd1bGFyaXplPW4u
c2luZ3VsYXJpemUsZS5kZWZhdWx0PW4uSW5mbGVjdG9yLGUucGx1cmFsaXplPW4ucGx1cmFsaXpl
LGUuc2luZ3VsYXJpemU9bi5zaW5ndWxhcml6ZSxlLmRlZmF1bHRSdWxlcz1uLmRlZmF1bHRSdWxl
cyx2b2lkIDAhPT1kZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKCJlbWJlci1pbmZsZWN0b3IiLFsi
ZXhwb3J0cyJdLGZ1bmN0aW9uKGUpe3JldHVybiBlLmRlZmF1bHQ9bi5JbmZsZWN0b3Isbi5JbmZs
ZWN0b3J9KToidW5kZWZpbmVkIiE9dHlwZW9mIG1vZHVsZSYmbW9kdWxlLmV4cG9ydHMmJihtb2R1
bGUuZXhwb3J0cz1uLkluZmxlY3Rvcil9KSxkZWZpbmUoImVtYmVyLWluZmxlY3Rvci9saWIvZXh0
L3N0cmluZyIsWyJleHBvcnRzIiwiZW1iZXIiLCJlbWJlci1pbmZsZWN0b3IvbGliL3N5c3RlbS9z
dHJpbmciXSxmdW5jdGlvbihlLHQsbil7KCEwPT09dC5kZWZhdWx0LkVYVEVORF9QUk9UT1RZUEVT
fHx0LmRlZmF1bHQuRVhURU5EX1BST1RPVFlQRVMuU3RyaW5nKSYmKFN0cmluZy5wcm90b3R5cGUu
cGx1cmFsaXplPWZ1bmN0aW9uKCl7cmV0dXJuKDAsbi5wbHVyYWxpemUpKHRoaXMpfSxTdHJpbmcu
cHJvdG90eXBlLnNpbmd1bGFyaXplPWZ1bmN0aW9uKCl7cmV0dXJuKDAsbi5zaW5ndWxhcml6ZSko
dGhpcyl9KX0pLGRlZmluZSgiZW1iZXItaW5mbGVjdG9yL2xpYi9oZWxwZXJzL3BsdXJhbGl6ZSIs
WyJleHBvcnRzIiwiZW1iZXItaW5mbGVjdG9yIiwiZW1iZXItaW5mbGVjdG9yL2xpYi91dGlscy9t
YWtlLWhlbHBlciJdLGZ1bmN0aW9uKGUsdCxuKXtlLmRlZmF1bHQ9KDAsbi5kZWZhdWx0KShmdW5j
dGlvbihlKXt2YXIgbj12b2lkIDAscj12b2lkIDAKK3JldHVybiAxPT09ZS5sZW5ndGg/KHI9ZVsw
XSwoMCx0LnBsdXJhbGl6ZSkocikpOihuPWVbMF0scj1lWzFdLDEhPT1wYXJzZUZsb2F0KG4pJiYo
cj0oMCx0LnBsdXJhbGl6ZSkocikpLG4rIiAiK3IpfSl9KSxkZWZpbmUoImVtYmVyLWluZmxlY3Rv
ci9saWIvaGVscGVycy9zaW5ndWxhcml6ZSIsWyJleHBvcnRzIiwiZW1iZXItaW5mbGVjdG9yIiwi
ZW1iZXItaW5mbGVjdG9yL2xpYi91dGlscy9tYWtlLWhlbHBlciJdLGZ1bmN0aW9uKGUsdCxuKXtl
LmRlZmF1bHQ9KDAsbi5kZWZhdWx0KShmdW5jdGlvbihlKXtyZXR1cm4oMCx0LnNpbmd1bGFyaXpl
KShlWzBdKX0pfSksZGVmaW5lKCJlbWJlci1pbmZsZWN0b3IvbGliL3N5c3RlbSIsWyJleHBvcnRz
IiwiZW1iZXItaW5mbGVjdG9yL2xpYi9zeXN0ZW0vaW5mbGVjdG9yIiwiZW1iZXItaW5mbGVjdG9y
L2xpYi9zeXN0ZW0vc3RyaW5nIiwiZW1iZXItaW5mbGVjdG9yL2xpYi9zeXN0ZW0vaW5mbGVjdGlv
bnMiXSxmdW5jdGlvbihlLHQsbixyKXt0LmRlZmF1bHQuaW5mbGVjdG9yPW5ldyB0LmRlZmF1bHQo
ci5kZWZhdWx0KSxlLkluZmxlY3Rvcj10LmRlZmF1bHQsZS5zaW5ndWxhcml6ZT1uLnNpbmd1bGFy
aXplLGUucGx1cmFsaXplPW4ucGx1cmFsaXplLGUuZGVmYXVsdFJ1bGVzPXIuZGVmYXVsdH0pLGRl
ZmluZSgiZW1iZXItaW5mbGVjdG9yL2xpYi9zeXN0ZW0vaW5mbGVjdGlvbnMiLFsiZXhwb3J0cyJd
LGZ1bmN0aW9uKGUpe2UuZGVmYXVsdD17cGx1cmFsczpbWy8kLywicyJdLFsvcyQvaSwicyJdLFsv
XihheHx0ZXN0KWlzJC9pLCIkMWVzIl0sWy8ob2N0b3B8dmlyKXVzJC9pLCIkMWkiXSxbLyhvY3Rv
cHx2aXIpaSQvaSwiJDFpIl0sWy8oYWxpYXN8c3RhdHVzfGJvbnVzKSQvaSwiJDFlcyJdLFsvKGJ1
KXMkL2ksIiQxc2VzIl0sWy8oYnVmZmFsfHRvbWF0KW8kL2ksIiQxb2VzIl0sWy8oW3RpXSl1bSQv
aSwiJDFhIl0sWy8oW3RpXSlhJC9pLCIkMWEiXSxbL3NpcyQvaSwic2VzIl0sWy8oPzooW15mXSlm
ZXwoW2xyXSlmKSQvaSwiJDEkMnZlcyJdLFsvKGhpdmUpJC9pLCIkMXMiXSxbLyhbXmFlaW91eV18
cXUpeSQvaSwiJDFpZXMiXSxbLyh4fGNofHNzfHNoKSQvaSwiJDFlcyJdLFsvKG1hdHJ8dmVydHxp
bmQpKD86aXh8ZXgpJC9pLCIkMWljZXMiXSxbL14obXxsKW91c2UkL2ksIiQxaWNlIl0sWy9eKG18
bClpY2UkL2ksIiQxaWNlIl0sWy9eKG94KSQvaSwiJDFlbiJdLFsvXihveGVuKSQvaSwiJDEiXSxb
LyhxdWl6KSQvaSwiJDF6ZXMiXV0sc2luZ3VsYXI6W1svcyQvaSwiIl0sWy8oc3MpJC9pLCIkMSJd
LFsvKG4pZXdzJC9pLCIkMWV3cyJdLFsvKFt0aV0pYSQvaSwiJDF1bSJdLFsvKChhKW5hbHl8KGIp
YXwoZClpYWdub3wocClhcmVudGhlfChwKXJvZ25vfChzKXlub3B8KHQpaGUpKHNpc3xzZXMpJC9p
LCIkMXNpcyJdLFsvKF5hbmFseSkoc2lzfHNlcykkL2ksIiQxc2lzIl0sWy8oW15mXSl2ZXMkL2ks
IiQxZmUiXSxbLyhoaXZlKXMkL2ksIiQxIl0sWy8odGl2ZSlzJC9pLCIkMSJdLFsvKFtscl0pdmVz
JC9pLCIkMWYiXSxbLyhbXmFlaW91eV18cXUpaWVzJC9pLCIkMXkiXSxbLyhzKWVyaWVzJC9pLCIk
MWVyaWVzIl0sWy8obSlvdmllcyQvaSwiJDFvdmllIl0sWy8oeHxjaHxzc3xzaCllcyQvaSwiJDEi
XSxbL14obXxsKWljZSQvaSwiJDFvdXNlIl0sWy8oYnVzKShlcyk/JC9pLCIkMSJdLFsvKG8pZXMk
L2ksIiQxIl0sWy8oc2hvZSlzJC9pLCIkMSJdLFsvKGNyaXN8dGVzdCkoaXN8ZXMpJC9pLCIkMWlz
Il0sWy9eKGEpeFtpZV1zJC9pLCIkMXhpcyJdLFsvKG9jdG9wfHZpcikodXN8aSkkL2ksIiQxdXMi
XSxbLyhhbGlhc3xzdGF0dXN8Ym9udXMpKGVzKT8kL2ksIiQxIl0sWy9eKG94KWVuL2ksIiQxIl0s
Wy8odmVydHxpbmQpaWNlcyQvaSwiJDFleCJdLFsvKG1hdHIpaWNlcyQvaSwiJDFpeCJdLFsvKHF1
aXopemVzJC9pLCIkMSJdLFsvKGRhdGFiYXNlKXMkL2ksIiQxIl1dLGlycmVndWxhclBhaXJzOltb
InBlcnNvbiIsInBlb3BsZSJdLFsibWFuIiwibWVuIl0sWyJjaGlsZCIsImNoaWxkcmVuIl0sWyJz
ZXgiLCJzZXhlcyJdLFsibW92ZSIsIm1vdmVzIl0sWyJjb3ciLCJraW5lIl0sWyJ6b21iaWUiLCJ6
b21iaWVzIl1dLHVuY291bnRhYmxlOlsiZXF1aXBtZW50IiwiaW5mb3JtYXRpb24iLCJyaWNlIiwi
bW9uZXkiLCJzcGVjaWVzIiwic2VyaWVzIiwiZmlzaCIsInNoZWVwIiwiamVhbnMiLCJwb2xpY2Ui
XX19KSxkZWZpbmUoImVtYmVyLWluZmxlY3Rvci9saWIvc3lzdGVtL2luZmxlY3RvciIsWyJleHBv
cnRzIiwiZW1iZXIiXSxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSx0KXtmb3IodmFyIG49MCxy
PXQubGVuZ3RoO248cjtuKyspZS51bmNvdW50YWJsZVt0W25dLnRvTG93ZXJDYXNlKCldPSEwfWZ1
bmN0aW9uIHIoZSx0KXtmb3IodmFyIG4scj0wLGk9dC5sZW5ndGg7cjxpO3IrKyluPXRbcl0sZS5p
cnJlZ3VsYXJbblswXS50b0xvd2VyQ2FzZSgpXT1uWzFdLGUuaXJyZWd1bGFyW25bMV0udG9Mb3dl
ckNhc2UoKV09blsxXSxlLmlycmVndWxhckludmVyc2VbblsxXS50b0xvd2VyQ2FzZSgpXT1uWzBd
LGUuaXJyZWd1bGFySW52ZXJzZVtuWzBdLnRvTG93ZXJDYXNlKCldPW5bMF19ZnVuY3Rpb24gaShl
KXtlPWV8fHt9LGUudW5jb3VudGFibGU9ZS51bmNvdW50YWJsZXx8bygpLGUuaXJyZWd1bGFyUGFp
cnM9ZS5pcnJlZ3VsYXJQYWlyc3x8bygpCit2YXIgdD10aGlzLnJ1bGVzPXtwbHVyYWxzOmUucGx1
cmFsc3x8W10sc2luZ3VsYXI6ZS5zaW5ndWxhcnx8W10saXJyZWd1bGFyOm8oKSxpcnJlZ3VsYXJJ
bnZlcnNlOm8oKSx1bmNvdW50YWJsZTpvKCl9CituKHQsZS51bmNvdW50YWJsZSkscih0LGUuaXJy
ZWd1bGFyUGFpcnMpLHRoaXMuZW5hYmxlQ2FjaGUoKX1mdW5jdGlvbiBvKCl7dmFyIGU9T2JqZWN0
LmNyZWF0ZShudWxsKQorcmV0dXJuIGUuX2RpY3Q9bnVsbCxkZWxldGUgZS5fZGljdCxlfXZhciBz
PXQuZGVmYXVsdC5TdHJpbmcuY2FwaXRhbGl6ZSxhPS9eXHMqJC8sdT0vKFtcd1wvLV0rW19cL1xz
LV0pKFthLXpcZF0rJCkvLGw9LyhbXHdcL1xzLV0rKShbQS1aXVthLXpcZF0qJCkvLGM9L1tBLVpd
W2EtelxkXSokLworaWYoIU9iamVjdC5jcmVhdGUmJiFPYmplY3QuY3JlYXRlKG51bGwpLmhhc093
blByb3BlcnR5KXRocm93IG5ldyBFcnJvcigiVGhpcyBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQg
T2JqZWN0LmNyZWF0ZShudWxsKSwgcGxlYXNlIHBvbHlmaWwgd2l0aCBlczUtc2hhbTogaHR0cDov
L2dpdC5pby95QlUycmciKQoraS5wcm90b3R5cGU9e2VuYWJsZUNhY2hlOmZ1bmN0aW9uKCl7dGhp
cy5wdXJnZUNhY2hlKCksdGhpcy5zaW5ndWxhcml6ZT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5f
Y2FjaGVVc2VkPSEwLHRoaXMuX3NDYWNoZVtlXXx8KHRoaXMuX3NDYWNoZVtlXT10aGlzLl9zaW5n
dWxhcml6ZShlKSl9LHRoaXMucGx1cmFsaXplPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9jYWNo
ZVVzZWQ9ITAsdGhpcy5fcENhY2hlW2VdfHwodGhpcy5fcENhY2hlW2VdPXRoaXMuX3BsdXJhbGl6
ZShlKSl9fSxwdXJnZUNhY2hlOmZ1bmN0aW9uKCl7dGhpcy5fY2FjaGVVc2VkPSExLHRoaXMuX3ND
YWNoZT1vKCksdGhpcy5fcENhY2hlPW8oKX0sZGlzYWJsZUNhY2hlOmZ1bmN0aW9uKCl7dGhpcy5f
c0NhY2hlPW51bGwsdGhpcy5fcENhY2hlPW51bGwsdGhpcy5zaW5ndWxhcml6ZT1mdW5jdGlvbihl
KXtyZXR1cm4gdGhpcy5fc2luZ3VsYXJpemUoZSl9LHRoaXMucGx1cmFsaXplPWZ1bmN0aW9uKGUp
e3JldHVybiB0aGlzLl9wbHVyYWxpemUoZSl9fSxwbHVyYWw6ZnVuY3Rpb24oZSx0KXt0aGlzLl9j
YWNoZVVzZWQmJnRoaXMucHVyZ2VDYWNoZSgpLHRoaXMucnVsZXMucGx1cmFscy5wdXNoKFtlLHQu
dG9Mb3dlckNhc2UoKV0pfSxzaW5ndWxhcjpmdW5jdGlvbihlLHQpe3RoaXMuX2NhY2hlVXNlZCYm
dGhpcy5wdXJnZUNhY2hlKCksdGhpcy5ydWxlcy5zaW5ndWxhci5wdXNoKFtlLHQudG9Mb3dlckNh
c2UoKV0pfSx1bmNvdW50YWJsZTpmdW5jdGlvbihlKXt0aGlzLl9jYWNoZVVzZWQmJnRoaXMucHVy
Z2VDYWNoZSgpLG4odGhpcy5ydWxlcyxbZS50b0xvd2VyQ2FzZSgpXSl9LGlycmVndWxhcjpmdW5j
dGlvbihlLHQpe3RoaXMuX2NhY2hlVXNlZCYmdGhpcy5wdXJnZUNhY2hlKCkscih0aGlzLnJ1bGVz
LFtbZSx0XV0pfSxwbHVyYWxpemU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3BsdXJhbGl6ZShl
KX0sX3BsdXJhbGl6ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5pbmZsZWN0KGUsdGhpcy5ydWxl
cy5wbHVyYWxzLHRoaXMucnVsZXMuaXJyZWd1bGFyKX0sc2luZ3VsYXJpemU6ZnVuY3Rpb24oZSl7
cmV0dXJuIHRoaXMuX3Npbmd1bGFyaXplKGUpfSxfc2luZ3VsYXJpemU6ZnVuY3Rpb24oZSl7cmV0
dXJuIHRoaXMuaW5mbGVjdChlLHRoaXMucnVsZXMuc2luZ3VsYXIsdGhpcy5ydWxlcy5pcnJlZ3Vs
YXJJbnZlcnNlKX0saW5mbGVjdDpmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvLHAsZixoLGQsbQor
aWYoaD0hZXx8YS50ZXN0KGUpLGQ9Yy50ZXN0KGUpLCIiLGgpcmV0dXJuIGUKK2lmKG89ZS50b0xv
d2VyQ2FzZSgpLHA9dS5leGVjKGUpfHxsLmV4ZWMoZSkscCYmKHBbMV0sZj1wWzJdLnRvTG93ZXJD
YXNlKCkpLHRoaXMucnVsZXMudW5jb3VudGFibGVbb118fHRoaXMucnVsZXMudW5jb3VudGFibGVb
Zl0pcmV0dXJuIGUKK2ZvcihtIGluIG4paWYoby5tYXRjaChtKyIkIikpcmV0dXJuIGk9blttXSxk
JiZuW2ZdJiYoaT1zKGkpLG09cyhtKSksZS5yZXBsYWNlKG5ldyBSZWdFeHAobSwiaSIpLGkpCitm
b3IodmFyIGc9dC5sZW5ndGg7Zz4wJiYocj10W2ctMV0sbT1yWzBdLCFtLnRlc3QoZSkpO2ctLSk7
cmV0dXJuIHI9cnx8W10sbT1yWzBdLGk9clsxXSxlLnJlcGxhY2UobSxpKX19LGUuZGVmYXVsdD1p
fSksZGVmaW5lKCJlbWJlci1pbmZsZWN0b3IvbGliL3N5c3RlbS9zdHJpbmciLFsiZXhwb3J0cyIs
ImVtYmVyLWluZmxlY3Rvci9saWIvc3lzdGVtL2luZmxlY3RvciJdLGZ1bmN0aW9uKGUsdCl7ZnVu
Y3Rpb24gbihlKXtyZXR1cm4gdC5kZWZhdWx0LmluZmxlY3Rvci5wbHVyYWxpemUoZSl9ZnVuY3Rp
b24gcihlKXtyZXR1cm4gdC5kZWZhdWx0LmluZmxlY3Rvci5zaW5ndWxhcml6ZShlKX1lLnBsdXJh
bGl6ZT1uLGUuc2luZ3VsYXJpemU9cn0pCitkZWZpbmUoImVtYmVyLWluZmxlY3Rvci9saWIvdXRp
bHMvbWFrZS1oZWxwZXIiLFsiZXhwb3J0cyIsImVtYmVyIl0sZnVuY3Rpb24oZSx0KXtmdW5jdGlv
biBuKGUpe3JldHVybiB0LmRlZmF1bHQuSGVscGVyP3QuZGVmYXVsdC5IZWxwZXIuaGVscGVyKGUp
OnQuZGVmYXVsdC5IVE1MQmFycz90LmRlZmF1bHQuSFRNTEJhcnMubWFrZUJvdW5kSGVscGVyKGUp
OnQuZGVmYXVsdC5IYW5kbGViYXJzLm1ha2VCb3VuZEhlbHBlcihlKX1lLmRlZmF1bHQ9bn0pLGRl
ZmluZSgiZW1iZXItbG9hZC1pbml0aWFsaXplcnMvaW5kZXgiLFsiZXhwb3J0cyIsImVtYmVyIl0s
ZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCIKK2UuX19lc01vZHVsZT0hMCxlLmRlZmF1bHQ9ZnVu
Y3Rpb24oZSxuKXt2YXIgcj1uZXcgUmVnRXhwKCJeIituKyIvKCg/Omluc3RhbmNlLSk/aW5pdGlh
bGl6ZXJzKS8iKTsoT2JqZWN0LmtleXN8fHQuZGVmYXVsdC5rZXlzKShyZXF1aXJlanMuX2Vha19z
ZWVuKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJue21vZHVsZU5hbWU6ZSxtYXRjaGVzOnIuZXhlYyhl
KX19KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUubWF0Y2hlcyYmMj09PWUubWF0Y2hlcy5s
ZW5ndGh9KS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciByPW4ubW9kdWxlTmFtZSxpPXJlcXVpcmUo
cixudWxsLG51bGwsITApCitpZighaSl0aHJvdyBuZXcgRXJyb3IocisiIG11c3QgZXhwb3J0IGFu
IGluaXRpYWxpemVyLiIpCit2YXIgbz10LmRlZmF1bHQuU3RyaW5nLmNhbWVsaXplKG4ubWF0Y2hl
c1sxXS5zdWJzdHJpbmcoMCxuLm1hdGNoZXNbMV0ubGVuZ3RoLTEpKSxzPWkuZGVmYXVsdAoraWYo
IXMubmFtZSl7dmFyIGE9ci5tYXRjaCgvW15cL10rXC8/JC8pWzBdCitzLm5hbWU9YX1lW29dJiZl
W29dKHMpfSl9fSksZGVmaW5lKCJlbWJlci1yZXNvbHZlci9jb250YWluZXItZGVidWctYWRhcHRl
ciIsWyJleHBvcnRzIiwiZW1iZXIiLCJlbWJlci1yZXNvbHZlci91dGlscy9tb2R1bGUtcmVnaXN0
cnkiXSxmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gcihlLHQsbil7dmFyIHI9dC5tYXRjaChuZXcg
UmVnRXhwKCJeLz8iK24rIi8oLispLyIrZSsiJCIpKQoraWYocilyZXR1cm4gclsxXX12YXIgaT10
LmRlZmF1bHQuQ29udGFpbmVyRGVidWdBZGFwdGVyLG89bnVsbAordm9pZCAwIT09aSYmKG89aS5l
eHRlbmQoe19tb2R1bGVSZWdpc3RyeTpudWxsLGluaXQ6ZnVuY3Rpb24oKXt0aGlzLl9zdXBlci5h
cHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5fbW9kdWxlUmVnaXN0cnl8fCh0aGlzLl9tb2R1bGVS
ZWdpc3RyeT1uZXcgbi5kZWZhdWx0KX0sY2FuQ2F0YWxvZ0VudHJpZXNCeVR5cGU6ZnVuY3Rpb24o
KXtyZXR1cm4hMH0sY2F0YWxvZ0VudHJpZXNCeVR5cGU6ZnVuY3Rpb24oZSl7Zm9yKHZhciBuPXRo
aXMuX21vZHVsZVJlZ2lzdHJ5Lm1vZHVsZU5hbWVzKCksaT10LmRlZmF1bHQuQSgpLG89dGhpcy5u
YW1lc3BhY2UubW9kdWxlUHJlZml4LHM9MCxhPW4ubGVuZ3RoO3M8YTtzKyspe3ZhciB1PW5bc10K
K2lmKC0xIT09dS5pbmRleE9mKGUpKXt2YXIgbD1yKGUsdSx0aGlzLm5hbWVzcGFjZS5wb2RNb2R1
bGVQcmVmaXh8fG8pCitsfHwobD11LnNwbGl0KGUrInMvIikucG9wKCkpLGkuYWRkT2JqZWN0KGwp
fX1yZXR1cm4gaX19KSksZS5kZWZhdWx0PW99KSxkZWZpbmUoImVtYmVyLXJlc29sdmVyL2luZGV4
IixbImV4cG9ydHMiLCJlbWJlci1yZXNvbHZlci9yZXNvbHZlciJdLGZ1bmN0aW9uKGUsdCl7T2Jq
ZWN0LmRlZmluZVByb3BlcnR5KGUsImRlZmF1bHQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlv
bigpe3JldHVybiB0LmRlZmF1bHR9fSl9KSxkZWZpbmUoImVtYmVyLXJlc29sdmVyL3Jlc29sdmVy
IixbImV4cG9ydHMiLCJlbWJlciIsImVtYmVyLXJlc29sdmVyL3V0aWxzL21vZHVsZS1yZWdpc3Ry
eSIsImVtYmVyLXJlc29sdmVyL3V0aWxzL2NsYXNzLWZhY3RvcnkiLCJlbWJlci1yZXNvbHZlci91
dGlscy9tYWtlLWRpY3Rpb25hcnkiXSxmdW5jdGlvbihlLHQsbixyLGkpe2Z1bmN0aW9uIG8oZSl7
aWYoITA9PT1lLnBhcnNlZE5hbWUpcmV0dXJuIGUKK3ZhciB0LG4scixpPWUuc3BsaXQoIkAiKQor
aWYoImhlbHBlcjpAY29udGVudC1oZWxwZXIiIT09ZSYmMj09PWkubGVuZ3RoKXt2YXIgbz1pWzBd
LnNwbGl0KCI6IikKK2lmKDI9PT1vLmxlbmd0aCl0PW9bMV0sbj1vWzBdLHI9aVsxXQorZWxzZXt2
YXIgcz1pWzFdLnNwbGl0KCI6IikKK3Q9aVswXSxuPXNbMF0scj1zWzFdfX1lbHNlIGk9ZS5zcGxp
dCgiOiIpLG49aVswXSxyPWlbMV0KK3ZhciBhPXIsdT1wKHRoaXMsIm5hbWVzcGFjZSIpLGM9dQor
cmV0dXJue3BhcnNlZE5hbWU6ITAsZnVsbE5hbWU6ZSxwcmVmaXg6dHx8dGhpcy5wcmVmaXgoe3R5
cGU6bn0pLHR5cGU6bixmdWxsTmFtZVdpdGhvdXRUeXBlOmEsbmFtZTpyLHJvb3Q6YyxyZXNvbHZl
TWV0aG9kTmFtZToicmVzb2x2ZSIrbChuKX19ZnVuY3Rpb24gcyhlKXt0LmRlZmF1bHQuYXNzZXJ0
KCJgbW9kdWxlUHJlZml4YCBtdXN0IGJlIGRlZmluZWQiLHRoaXMubmFtZXNwYWNlLm1vZHVsZVBy
ZWZpeCkKK3ZhciBuPXRoaXMuZmluZE1vZHVsZU5hbWUoZSkKK2lmKG4pe3ZhciBpPXRoaXMuX2V4
dHJhY3REZWZhdWx0RXhwb3J0KG4sZSkKK2lmKHZvaWQgMD09PWkpdGhyb3cgbmV3IEVycm9yKCIg
RXhwZWN0ZWQgdG8gZmluZDogJyIrZS5mdWxsTmFtZSsiJyB3aXRoaW4gJyIrbisiJyBidXQgZ290
ICd1bmRlZmluZWQnLiBEaWQgeW91IGZvcmdldCB0byBgZXhwb3J0IGRlZmF1bHRgIHdpdGhpbiAn
IituKyInPyIpCityZXR1cm4gdGhpcy5zaG91bGRXcmFwSW5DbGFzc0ZhY3RvcnkoaSxlKSYmKGk9
KDAsci5kZWZhdWx0KShpKSksaX1yZXR1cm4gdGhpcy5fc3VwZXIoZSl9dmFyIGE9dC5kZWZhdWx0
LlN0cmluZyx1PWEudW5kZXJzY29yZSxsPWEuY2xhc3NpZnksYz1hLmRhc2hlcml6ZSxwPXQuZGVm
YXVsdC5nZXQsZj10LmRlZmF1bHQuRGVmYXVsdFJlc29sdmVyLGg9Zi5leHRlbmQoe3Jlc29sdmVP
dGhlcjpzLHBhcnNlTmFtZTpvLHJlc29sdmVUZW1wbGF0ZTpzLHBsdXJhbGl6ZWRUeXBlczpudWxs
LG1vZHVsZVJlZ2lzdHJ5Om51bGwsbWFrZVRvU3RyaW5nOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRo
aXMubmFtZXNwYWNlLm1vZHVsZVByZWZpeCsiQCIrdCsiOiJ9LHNob3VsZFdyYXBJbkNsYXNzRmFj
dG9yeTpmdW5jdGlvbigpe3JldHVybiExfSxpbml0OmZ1bmN0aW9uKCl7dGhpcy5fc3VwZXIoKSx0
aGlzLm1vZHVsZUJhc2VkUmVzb2x2ZXI9ITAsdGhpcy5fbW9kdWxlUmVnaXN0cnl8fCh0aGlzLl9t
b2R1bGVSZWdpc3RyeT1uZXcgbi5kZWZhdWx0KSx0aGlzLl9ub3JtYWxpemVDYWNoZT0oMCxpLmRl
ZmF1bHQpKCksdGhpcy5wbHVyYWxpemVkVHlwZXM9dGhpcy5wbHVyYWxpemVkVHlwZXN8fCgwLGku
ZGVmYXVsdCkoKSx0aGlzLnBsdXJhbGl6ZWRUeXBlcy5jb25maWd8fCh0aGlzLnBsdXJhbGl6ZWRU
eXBlcy5jb25maWc9ImNvbmZpZyIpLHRoaXMuX2RlcHJlY2F0ZWRQb2RNb2R1bGVQcmVmaXg9ITF9
LG5vcm1hbGl6ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fbm9ybWFsaXplQ2FjaGVbZV18fCh0
aGlzLl9ub3JtYWxpemVDYWNoZVtlXT10aGlzLl9ub3JtYWxpemUoZSkpfSxfbm9ybWFsaXplOmZ1
bmN0aW9uKGUpe3ZhciB0PWUuc3BsaXQoIjoiKQorcmV0dXJuIHQubGVuZ3RoPjE/ImhlbHBlciI9
PT10WzBdP3RbMF0rIjoiK3RbMV0ucmVwbGFjZSgvXy9nLCItIik6dFswXSsiOiIrYyh0WzFdLnJl
cGxhY2UoL1wuL2csIi8iKSk6ZX0scGx1cmFsaXplOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnBs
dXJhbGl6ZWRUeXBlc1tlXXx8KHRoaXMucGx1cmFsaXplZFR5cGVzW2VdPWUrInMiKX0scG9kQmFz
ZWRMb29rdXBXaXRoUHJlZml4OmZ1bmN0aW9uKGUsdCl7dmFyIG49dC5mdWxsTmFtZVdpdGhvdXRU
eXBlCityZXR1cm4idGVtcGxhdGUiPT09dC50eXBlJiYobj1uLnJlcGxhY2UoL15jb21wb25lbnRz
XC8vLCIiKSksZSsiLyIrbisiLyIrdC50eXBlfSxwb2RCYXNlZE1vZHVsZU5hbWU6ZnVuY3Rpb24o
ZSl7dmFyIHQ9dGhpcy5uYW1lc3BhY2UucG9kTW9kdWxlUHJlZml4fHx0aGlzLm5hbWVzcGFjZS5t
b2R1bGVQcmVmaXgKK3JldHVybiB0aGlzLnBvZEJhc2VkTG9va3VwV2l0aFByZWZpeCh0LGUpfSxw
b2RCYXNlZENvbXBvbmVudHNJblN1YmRpcjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLm5hbWVzcGFj
ZS5wb2RNb2R1bGVQcmVmaXh8fHRoaXMubmFtZXNwYWNlLm1vZHVsZVByZWZpeAoraWYodCs9Ii9j
b21wb25lbnRzIiwiY29tcG9uZW50Ij09PWUudHlwZXx8ZS5mdWxsTmFtZVdpdGhvdXRUeXBlLm1h
dGNoKC9eY29tcG9uZW50cy8pKXJldHVybiB0aGlzLnBvZEJhc2VkTG9va3VwV2l0aFByZWZpeCh0
LGUpfSxyZXNvbHZlRW5naW5lOmZ1bmN0aW9uKGUpe3ZhciB0PWUuZnVsbE5hbWVXaXRob3V0VHlw
ZSxuPXQrIi9lbmdpbmUiCitpZih0aGlzLl9tb2R1bGVSZWdpc3RyeS5oYXMobikpcmV0dXJuIHRo
aXMuX2V4dHJhY3REZWZhdWx0RXhwb3J0KG4pfSxyZXNvbHZlUm91dGVNYXA6ZnVuY3Rpb24oZSl7
dmFyIG49ZS5mdWxsTmFtZVdpdGhvdXRUeXBlLHI9bisiL3JvdXRlcyIKK2lmKHRoaXMuX21vZHVs
ZVJlZ2lzdHJ5LmhhcyhyKSl7dmFyIGk9dGhpcy5fZXh0cmFjdERlZmF1bHRFeHBvcnQocikKK3Jl
dHVybiB0LmRlZmF1bHQuYXNzZXJ0KCJUaGUgcm91dGUgbWFwIGZvciAiK24rIiBzaG91bGQgYmUg
d3JhcHBlZCBieSAnYnVpbGRSb3V0ZXMnIGJlZm9yZSBleHBvcnRpbmcuIixpLmlzUm91dGVNYXAp
LGl9fSxtYWluTW9kdWxlTmFtZTpmdW5jdGlvbihlKXt2YXIgdD1lLnByZWZpeCsiLyIrZS50eXBl
CitpZigibWFpbiI9PT1lLmZ1bGxOYW1lV2l0aG91dFR5cGUpcmV0dXJuIHR9LGRlZmF1bHRNb2R1
bGVOYW1lOmZ1bmN0aW9uKGUpe3JldHVybiBlLnByZWZpeCsiLyIrdGhpcy5wbHVyYWxpemUoZS50
eXBlKSsiLyIrZS5mdWxsTmFtZVdpdGhvdXRUeXBlfSxwcmVmaXg6ZnVuY3Rpb24oZSl7dmFyIHQ9
dGhpcy5uYW1lc3BhY2UubW9kdWxlUHJlZml4CityZXR1cm4gdGhpcy5uYW1lc3BhY2VbZS50eXBl
KyJQcmVmaXgiXSYmKHQ9dGhpcy5uYW1lc3BhY2VbZS50eXBlKyJQcmVmaXgiXSksdH0sbW9kdWxl
TmFtZUxvb2t1cFBhdHRlcm5zOnQuZGVmYXVsdC5jb21wdXRlZChmdW5jdGlvbigpe3JldHVyblt0
aGlzLnBvZEJhc2VkTW9kdWxlTmFtZSx0aGlzLnBvZEJhc2VkQ29tcG9uZW50c0luU3ViZGlyLHRo
aXMubWFpbk1vZHVsZU5hbWUsdGhpcy5kZWZhdWx0TW9kdWxlTmFtZV19KSxmaW5kTW9kdWxlTmFt
ZTpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbixyPXRoaXMuZ2V0KCJtb2R1bGVOYW1lTG9va3VwUGF0
dGVybnMiKSxpPTAsbz1yLmxlbmd0aDtpPG87aSsrKXt2YXIgcz1yW2ldLGE9cy5jYWxsKHRoaXMs
ZSkKK2lmKGEmJihhPXRoaXMuY2hvb3NlTW9kdWxlTmFtZShhLGUpKSxhJiZ0aGlzLl9tb2R1bGVS
ZWdpc3RyeS5oYXMoYSkmJihuPWEpLHR8fHRoaXMuX2xvZ0xvb2t1cChuLGUsYSksbilyZXR1cm4g
bn19LGNob29zZU1vZHVsZU5hbWU6ZnVuY3Rpb24oZSxuKXt2YXIgcj10aGlzLGk9dShlKQoraWYo
ZSE9PWkmJnRoaXMuX21vZHVsZVJlZ2lzdHJ5LmhhcyhlKSYmdGhpcy5fbW9kdWxlUmVnaXN0cnku
aGFzKGkpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFtYmlndW91cyBtb2R1bGUgbmFtZXM6IGAiK2Ur
ImAgYW5kIGAiK2krImAiKQoraWYodGhpcy5fbW9kdWxlUmVnaXN0cnkuaGFzKGUpKXJldHVybiBl
CitpZih0aGlzLl9tb2R1bGVSZWdpc3RyeS5oYXMoaSkpcmV0dXJuIGkKK3ZhciBvPWUucmVwbGFj
ZSgvXC8tKFteXC9dKikkLywiL18kMSIpCitpZih0aGlzLl9tb2R1bGVSZWdpc3RyeS5oYXMobykp
cmV0dXJuIHQuZGVmYXVsdC5kZXByZWNhdGUoJ01vZHVsZXMgc2hvdWxkIG5vdCBjb250YWluIHVu
ZGVyc2NvcmVzLiBBdHRlbXB0ZWQgdG8gbG9va3VwICInK2UrJyIgd2hpY2ggd2FzIG5vdCBmb3Vu
ZC4gUGxlYXNlIHJlbmFtZSAiJytvKyciIHRvICInK2UrJyIgaW5zdGVhZC4nLCExLHtpZDoiZW1i
ZXItcmVzb2x2ZXIudW5kZXJzY29yZWQtbW9kdWxlcyIsdW50aWw6IjMuMC4wIn0pLG8KK3QuZGVm
YXVsdC5ydW5JbkRlYnVnKGZ1bmN0aW9uKCl7ImhlbHBlciIhPT1uLnR5cGV8fCFlLm1hdGNoKC9b
YS16XStbQS1aXSsvKXx8KHIuX2NhbWVsQ2FzZUhlbHBlcldhcm5lZE5hbWVzPXIuX2NhbWVsQ2Fz
ZUhlbHBlcldhcm5lZE5hbWVzfHxbXSwhKHIuX2NhbWVsQ2FzZUhlbHBlcldhcm5lZE5hbWVzLmlu
ZGV4T2Yobi5mdWxsTmFtZSk+LTEpJiZyLl9tb2R1bGVSZWdpc3RyeS5oYXMoYyhlKSkmJihyLl9j
YW1lbENhc2VIZWxwZXJXYXJuZWROYW1lcy5wdXNoKG4uZnVsbE5hbWUpLHQuZGVmYXVsdC53YXJu
KCdBdHRlbXB0ZWQgdG8gbG9va3VwICInK24uZnVsbE5hbWUrJyIgd2hpY2ggd2FzIG5vdCBmb3Vu
ZC4gSW4gcHJldmlvdXMgdmVyc2lvbnMgb2YgZW1iZXItcmVzb2x2ZXIsIGEgYnVnIHdvdWxkIGhh
dmUgY2F1c2VkIHRoZSBtb2R1bGUgYXQgIicrYyhlKSsnIiB0byBiZSByZXR1cm5lZCBmb3IgdGhp
cyBjYW1lbCBjYXNlIGhlbHBlciBuYW1lLiBUaGlzIGhhcyBiZWVuIGZpeGVkLiBVc2UgdGhlIGRh
c2hlcml6ZWQgbmFtZSB0byByZXNvbHZlIHRoZSBtb2R1bGUgdGhhdCB3b3VsZCBoYXZlIGJlZW4g
cmV0dXJuZWQgaW4gcHJldmlvdXMgdmVyc2lvbnMuJywhMSx7aWQ6ImVtYmVyLXJlc29sdmVyLmNh
bWVsY2FzZS1oZWxwZXItbmFtZXMiLHVudGlsOiIzLjAuMCJ9KSkpfSl9LGxvb2t1cERlc2NyaXB0
aW9uOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucGFyc2VOYW1lKGUpCityZXR1cm4gdGhpcy5maW5k
TW9kdWxlTmFtZSh0LCEwKX0sX2xvZ0xvb2t1cDpmdW5jdGlvbihlLG4scil7aWYodC5kZWZhdWx0
LkVOVi5MT0dfTU9EVUxFX1JFU09MVkVSfHxuLnJvb3QuTE9HX1JFU09MVkVSKXt2YXIgaSxvCitp
PWU/IlvinJNdIjoiWyBdIixvPW4uZnVsbE5hbWUubGVuZ3RoPjYwPyIuIjpuZXcgQXJyYXkoNjAt
bi5mdWxsTmFtZS5sZW5ndGgpLmpvaW4oIi4iKSxyfHwocj10aGlzLmxvb2t1cERlc2NyaXB0aW9u
KG4pKSx0LmRlZmF1bHQuTG9nZ2VyLmluZm8oaSxuLmZ1bGxOYW1lLG8scil9fSxrbm93bkZvclR5
cGU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMuX21vZHVsZVJlZ2lzdHJ5Lm1vZHVsZU5hbWVz
KCksbj0oMCxpLmRlZmF1bHQpKCkscj0wLG89dC5sZW5ndGg7cjxvO3IrKyl7dmFyIHM9dFtyXSxh
PXRoaXMudHJhbnNsYXRlVG9Db250YWluZXJGdWxsbmFtZShlLHMpCithJiYoblthXT0hMCl9cmV0
dXJuIG59LHRyYW5zbGF0ZVRvQ29udGFpbmVyRnVsbG5hbWU6ZnVuY3Rpb24oZSx0KXt2YXIgbj10
aGlzLnByZWZpeCh7dHlwZTplfSkscj1uKyIvIixpPSIvIitlLG89dC5pbmRleE9mKHIpLHM9dC5p
bmRleE9mKGkpCitpZigwPT09byYmcz09PXQubGVuZ3RoLWkubGVuZ3RoJiZ0Lmxlbmd0aD5yLmxl
bmd0aCtpLmxlbmd0aClyZXR1cm4gZSsiOiIrdC5zbGljZShvK3IubGVuZ3RoLHMpCit2YXIgYT10
aGlzLnBsdXJhbGl6ZShlKSx1PW4rIi8iK2ErIi8iCityZXR1cm4gMD09PXQuaW5kZXhPZih1KSYm
dC5sZW5ndGg+dS5sZW5ndGg/ZSsiOiIrdC5zbGljZSh1Lmxlbmd0aCk6dm9pZCAwfSxfZXh0cmFj
dERlZmF1bHRFeHBvcnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9cmVxdWlyZShlLG51bGwsbnVsbCwhMCkK
K3JldHVybiB0JiZ0LmRlZmF1bHQmJih0PXQuZGVmYXVsdCksdH19KQoraC5yZW9wZW5DbGFzcyh7
bW9kdWxlQmFzZWRSZXNvbHZlcjohMH0pLGUuZGVmYXVsdD1ofSksZGVmaW5lKCJlbWJlci1yZXNv
bHZlci91dGlscy9jbGFzcy1mYWN0b3J5IixbImV4cG9ydHMiXSxmdW5jdGlvbihlKXtmdW5jdGlv
biB0KGUpe3JldHVybntjcmVhdGU6ZnVuY3Rpb24odCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9m
IGUuZXh0ZW5kP2UuZXh0ZW5kKHQpOmV9fX1lLmRlZmF1bHQ9dH0pLGRlZmluZSgiZW1iZXItcmVz
b2x2ZXIvdXRpbHMvY3JlYXRlIixbImV4cG9ydHMiLCJlbWJlciJdLGZ1bmN0aW9uKGUsdCl7dmFy
IG49T2JqZWN0LmNyZWF0ZXx8dC5kZWZhdWx0LmNyZWF0ZQoraWYoIW58fG4obnVsbCkuaGFzT3du
UHJvcGVydHkpdGhyb3cgbmV3IEVycm9yKCJUaGlzIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBP
YmplY3QuY3JlYXRlKG51bGwpLCBwbGVhc2UgcG9seWZpbCB3aXRoIGVzNS1zaGFtOiBodHRwOi8v
Z2l0LmlvL3lCVTJyZyIpCitlLmRlZmF1bHQ9bn0pLGRlZmluZSgiZW1iZXItcmVzb2x2ZXIvdXRp
bHMvbWFrZS1kaWN0aW9uYXJ5IixbImV4cG9ydHMiLCJlbWJlci1yZXNvbHZlci91dGlscy9jcmVh
dGUiXSxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oKXt2YXIgZT0oMCx0LmRlZmF1bHQpKG51bGwp
CityZXR1cm4gZS5fZGljdD1udWxsLGRlbGV0ZSBlLl9kaWN0LGV9ZS5kZWZhdWx0PW59KSxkZWZp
bmUoImVtYmVyLXJlc29sdmVyL3V0aWxzL21vZHVsZS1yZWdpc3RyeSIsWyJleHBvcnRzIiwiZW1i
ZXIiXSxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSl7dGhpcy5fZW50cmllcz1lfHxyZXF1aXJl
anMuZW50cmllc312b2lkIDA9PT1yZXF1aXJlanMuZW50cmllcyYmKHJlcXVpcmVqcy5lbnRyaWVz
PXJlcXVpcmVqcy5fZWFrX3NlZW4pLG4ucHJvdG90eXBlLm1vZHVsZU5hbWVzPWZ1bmN0aW9uKCl7
cmV0dXJuKE9iamVjdC5rZXlzfHx0LmRlZmF1bHQua2V5cykodGhpcy5fZW50cmllcyl9LG4ucHJv
dG90eXBlLmhhcz1mdW5jdGlvbihlKXtyZXR1cm4gZSBpbiB0aGlzLl9lbnRyaWVzfSxuLnByb3Rv
dHlwZS5nZXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aDw9MXx8dm9pZCAwPT09
YXJndW1lbnRzWzFdPyJkZWZhdWx0Ijphcmd1bWVudHNbMV0sbj1yZXF1aXJlKGUpCityZXR1cm4g
biYmblt0XX0sZS5kZWZhdWx0PW59KQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVl
ZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy9k
aXN0L2Nyb3NzZG9tYWluLnhtbCBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3Vy
Y2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvZGlzdC9jcm9zc2RvbWFp
bi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMGMxNmE3YTA3YjM3ZTVkNWY3ZTBlNTZjODI5ZjcyMDA2NzQ1ODQw
MwotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3Vy
Y2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvZGlzdC9jcm9zc2RvbWFp
bi54bWwKQEAgLTAsMCArMSwxNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUg
Y3Jvc3MtZG9tYWluLXBvbGljeSBTWVNURU0gImh0dHA6Ly93d3cuYWRvYmUuY29tL3htbC9kdGRz
L2Nyb3NzLWRvbWFpbi1wb2xpY3kuZHRkIj4KKzxjcm9zcy1kb21haW4tcG9saWN5PgorICA8IS0t
IFJlYWQgdGhpczogd3d3LmFkb2JlLmNvbS9kZXZuZXQvYXJ0aWNsZXMvY3Jvc3Nkb21haW5fcG9s
aWN5X2ZpbGVfc3BlYy5odG1sIC0tPgorCisgIDwhLS0gTW9zdCByZXN0cmljdGl2ZSBwb2xpY3k6
IC0tPgorICA8c2l0ZS1jb250cm9sIHBlcm1pdHRlZC1jcm9zcy1kb21haW4tcG9saWNpZXM9Im5v
bmUiLz4KKworICA8IS0tIExlYXN0IHJlc3RyaWN0aXZlIHBvbGljeTogLS0+CisgIDwhLS0KKyAg
PHNpdGUtY29udHJvbCBwZXJtaXR0ZWQtY3Jvc3MtZG9tYWluLXBvbGljaWVzPSJhbGwiLz4KKyAg
PGFsbG93LWFjY2Vzcy1mcm9tIGRvbWFpbj0iKiIgdG8tcG9ydHM9IioiIHNlY3VyZT0iZmFsc2Ui
Lz4KKyAgPGFsbG93LWh0dHAtcmVxdWVzdC1oZWFkZXJzLWZyb20gZG9tYWluPSIqIiBoZWFkZXJz
PSIqIiBzZWN1cmU9ImZhbHNlIi8+CisgIC0tPgorPC9jcm9zcy1kb21haW4tcG9saWN5PgpkaWZm
IC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9h
cmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy9kaXN0L2luZGV4Lmh0bWwgYi9QZXJmb3JtYW5j
ZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxl
cy9lbWJlcmpzL2Rpc3QvaW5kZXguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NTZkMTk4Y2NjNTYyN2VkMzY4
MDg2ZTMwZTRlZGUxMTNiYTRmZTUyCi0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0
cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1i
ZXJqcy9kaXN0L2luZGV4Lmh0bWwKQEAgLTAsMCArMSwyMCBAQAorPCFET0NUWVBFIGh0bWw+Cis8
aHRtbD4KKyAgPGhlYWQ+CisgICAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgorICAgIDxtZXRhIGh0
dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iSUU9ZWRnZSI+CisgICAgPHRpdGxl
PkVtYmVyLmpzIFRvZG9NVkMgZXhhbXBsZTwvdGl0bGU+CisgICAgPG1ldGEgbmFtZT0iZGVzY3Jp
cHRpb24iIGNvbnRlbnQ9IiI+CisgICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9Indp
ZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xIj4KKyAgICAKKzxtZXRhIG5hbWU9InRv
ZG9tdmMvY29uZmlnL2Vudmlyb25tZW50IiBjb250ZW50PSIlN0IlMjJtb2R1bGVQcmVmaXglMjIl
M0ElMjJ0b2RvbXZjJTIyJTJDJTIyZW52aXJvbm1lbnQlMjIlM0ElMjJwcm9kdWN0aW9uJTIyJTJD
JTIyYmFzZVVSTCUyMiUzQW51bGwlMkMlMjJsb2NhdGlvblR5cGUlMjIlM0ElMjJoYXNoJTIyJTJD
JTIyRW1iZXJFTlYlMjIlM0ElN0IlMjJGRUFUVVJFUyUyMiUzQSU3QiU3RCUyQyUyMkVYVEVORF9Q
Uk9UT1RZUEVTJTIyJTNBJTdCJTIyRGF0ZSUyMiUzQWZhbHNlJTdEJTdEJTJDJTIyQVBQJTIyJTNB
JTdCJTIybmFtZSUyMiUzQSUyMnRvZG9tdmMlMjIlMkMlMjJ2ZXJzaW9uJTIyJTNBJTIyMC4wLjAr
NjRhN2NmY2QlMjIlN0QlMkMlMjJleHBvcnRBcHBsaWNhdGlvbkdsb2JhbCUyMiUzQWZhbHNlJTdE
IiAvPgorICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iYXNzZXRzL3ZlbmRvci03YjVj
OTg1MjA5MTBhZmE1OGQ3NGUwNWVjODZjZDg3My5jc3MiIGludGVncml0eT0ic2hhMjU2LWJzYWdH
SGR1aGF5OVFQTFVGcGRkY1pGcTdLbXIyU2NNM1ZLbldoZFg4b009IHNoYTUxMi1lTnNHTjJhTGVj
V1B2b3FOVkg4b1hLOG8vSUo3ck81dGkwemdTOGxGOExpd21LVUhkRUl1RmR1d2NETDFWTEF0MnIr
M1lqZ0R6b1NOWUs2YzU3cEp6dz09IiA+CisgICAgCisgIDwvaGVhZD4KKyAgPGJvZHk+CisgICAg
CisgICAgPHNjcmlwdCBzcmM9ImFzc2V0cy92ZW5kb3ItODIwOTE5NTY3ZWI3YmQ0ZDlmYWMzNThh
OTBhNWFhYzQuanMiIGludGVncml0eT0ic2hhMjU2LUJaSEJiZjFVMjEra2dQWW1vSUs3Z0xrcUh1
ODh2NWN3RVZGZndVUFhvanM9IHNoYTUxMi0yWVdyQWJSNDVwOGZrMy95NFFoYm9rL0tVZkxFL3Y2
eU1TVXFJV25jVG1XcWZKYnlKajArQWlUa0pMMDNrMG9QVU1aYkZZeVF4OVN1TDZYb1hwNHNnZz09
IiA+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9ImFzc2V0cy90b2RvbXZjLTY3NzQ5MWJhNDJl
MTBiNWZhMTY4NzVkOGJjYWYxYzZjLmpzIiBpbnRlZ3JpdHk9InNoYTI1Ni1Hc2hubUlCMmtRQXVq
SFBoQjQ0UDVRYkVIRVJCVHlidUJyblV1VFo0K2hvPSBzaGE1MTItenpBRmZMS0xYTFphekpCQnpu
T3p6UW9ZU0pFdGRMWVkremVXeGtiSDMrbEN3bzA3RGJwTlQzN2ZzcHErT1FyZ0Nwck9sMmpkUHZl
clN4Z3IydmQ3NUE9PSIgPjwvc2NyaXB0PgorICAgIAorICA8L2JvZHk+Cis8L2h0bWw+CmRpZmYg
LS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2Fy
Y2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL2Rpc3Qvcm9ib3RzLnR4dCBiL1BlcmZvcm1hbmNl
VGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVz
L2VtYmVyanMvZGlzdC9yb2JvdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY1OTE2NDUyZTVmZjZjOGI0M2Q2
ZDdjNzNkMDAxNTNkMzRhYzM1ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3Rz
L1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJl
cmpzL2Rpc3Qvcm9ib3RzLnR4dApAQCAtMCwwICsxLDMgQEAKKyMgaHR0cDovL3d3dy5yb2JvdHN0
eHQub3JnCitVc2VyLWFnZW50OiAqCitEaXNhbGxvdzoKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNl
VGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVz
L2VtYmVyanMvZW1iZXItY2xpLWJ1aWxkLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRl
ci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy9lbWJlci1j
bGktYnVpbGQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjFkYmY1OTE4Y2I4MTA5OGM4MzBiZjM4NWIxYmM1ZDk0
NGNlMDk1YwotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIv
cmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvZW1iZXItY2xp
LWJ1aWxkLmpzCkBAIC0wLDAgKzEsMjYgQEAKKy8qanNoaW50IG5vZGU6dHJ1ZSovCisvKiBnbG9i
YWwgcmVxdWlyZSwgbW9kdWxlICovCit2YXIgRW1iZXJBcHAgPSByZXF1aXJlKCdlbWJlci1jbGkv
bGliL2Jyb2Njb2xpL2VtYmVyLWFwcCcpOworCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChk
ZWZhdWx0cykgeworICAgIHZhciBhcHAgPSBuZXcgRW1iZXJBcHAoZGVmYXVsdHMsIHsKKyAgICAg
ICAgLy8gQWRkIG9wdGlvbnMgaGVyZQorICAgIH0pOworCisgICAgYXBwLmltcG9ydCgndmVuZG9y
L2Jhc2UuY3NzJyk7CisgICAgYXBwLmltcG9ydCgndmVuZG9yL2luZGV4LmNzcycpOworICAgIC8v
IFVzZSBgYXBwLmltcG9ydGAgdG8gYWRkIGFkZGl0aW9uYWwgbGlicmFyaWVzIHRvIHRoZSBnZW5l
cmF0ZWQKKyAgICAvLyBvdXRwdXQgZmlsZXMuCisgICAgLy8KKyAgICAvLyBJZiB5b3UgbmVlZCB0
byB1c2UgZGlmZmVyZW50IGFzc2V0cyBpbiBkaWZmZXJlbnQKKyAgICAvLyBlbnZpcm9ubWVudHMs
IHNwZWNpZnkgYW4gb2JqZWN0IGFzIHRoZSBmaXJzdCBwYXJhbWV0ZXIuIFRoYXQKKyAgICAvLyBv
YmplY3QncyBrZXlzIHNob3VsZCBiZSB0aGUgZW52aXJvbm1lbnQgbmFtZSBhbmQgdGhlIHZhbHVl
cworICAgIC8vIHNob3VsZCBiZSB0aGUgYXNzZXQgdG8gdXNlIGluIHRoYXQgZW52aXJvbm1lbnQu
CisgICAgLy8KKyAgICAvLyBJZiB0aGUgbGlicmFyeSB0aGF0IHlvdSBhcmUgaW5jbHVkaW5nIGNv
bnRhaW5zIEFNRCBvciBFUzYKKyAgICAvLyBtb2R1bGVzIHRoYXQgeW91IHdvdWxkIGxpa2UgdG8g
aW1wb3J0IGludG8geW91ciBhcHBsaWNhdGlvbgorICAgIC8vIHBsZWFzZSBzcGVjaWZ5IGFuIG9i
amVjdCB3aXRoIHRoZSBsaXN0IG9mIG1vZHVsZXMgYXMga2V5cworICAgIC8vIGFsb25nIHdpdGgg
dGhlIGV4cG9ydHMgb2YgZWFjaCBtb2R1bGUgYXMgaXRzIHZhbHVlLgorCisgICAgcmV0dXJuIGFw
cC50b1RyZWUoKTsKK307CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVy
L3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL2luZGV4Lmh0
bWwgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hp
dGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL2luZGV4Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDJkNDY1NmRmZmRhYjg5MjMyNWFlN2JkOGEzYmY3ZTIxNTI0MGQxZjkuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0
cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1i
ZXJqcy9pbmRleC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPCFET0NUWVBF
IGh0bWw+Ci08aHRtbD4KLSAgPGhlYWQ+Ci0gICAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgotICAg
IDxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iSUU9ZWRnZSI+Ci0g
ICAgPHRpdGxlPkVtYmVyLmpzIFRvZG9NVkMgZXhhbXBsZTwvdGl0bGU+Ci0gICAgPG1ldGEgbmFt
ZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IiI+Ci0gICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNv
bnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xIj4KLSAgICA8bWV0YSBu
YW1lPSJ0b2RvbXZjL2NvbmZpZy9lbnZpcm9ubWVudCIgY29udGVudD0iJTdCJTIybW9kdWxlUHJl
Zml4JTIyJTNBJTIydG9kb212YyUyMiUyQyUyMmVudmlyb25tZW50JTIyJTNBJTIyZGV2ZWxvcG1l
bnQlMjIlMkMlMjJiYXNlVVJMJTIyJTNBbnVsbCUyQyUyMmxvY2F0aW9uVHlwZSUyMiUzQSUyMmhh
c2glMjIlMkMlMjJFbWJlckVOViUyMiUzQSU3QiUyMkZFQVRVUkVTJTIyJTNBJTdCJTdEJTJDJTIy
RVhURU5EX1BST1RPVFlQRVMlMjIlM0ElN0IlMjJEYXRlJTIyJTNBZmFsc2UlN0QlN0QlMkMlMjJB
UFAlMjIlM0ElN0IlMjJuYW1lJTIyJTNBJTIydG9kb212YyUyMiUyQyUyMnZlcnNpb24lMjIlM0El
MjIwLjAuMCszMmE4NTFmMSUyMiU3RCUyQyUyMmV4cG9ydEFwcGxpY2F0aW9uR2xvYmFsJTIyJTNB
dHJ1ZSU3RCIgLz4KLSAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImFzc2V0cy92ZW5k
b3IuY3NzIj4KLSAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImFzc2V0cy90b2RvbXZj
LmNzcyI+Ci0gIDwvaGVhZD4KLSAgPGJvZHk+Ci0gICAgPHNjcmlwdCBzcmM9ImFzc2V0cy92ZW5k
b3IuanMiPjwvc2NyaXB0PgotICAgIDxzY3JpcHQgc3JjPSJhc3NldHMvdG9kb212Yy5qcyI+PC9z
Y3JpcHQ+Ci0gIDwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMv
U3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVy
anMvcGFja2FnZS1sb2NrLmpzb24gYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291
cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL3BhY2thZ2UtbG9jay5q
c29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmEzMDZjYjQxMDBkYWVjZDExYTI0MWQyY2I3ZjE3MzdlMzY4ODI3NGMK
LS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNl
cy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL3BhY2thZ2UtbG9jay5qc29u
CkBAIC0wLDAgKzEsNzYwOSBAQAoreworICAibmFtZSI6ICJ0b2RvbXZjIiwKKyAgInZlcnNpb24i
OiAiMC4wLjAiLAorICAibG9ja2ZpbGVWZXJzaW9uIjogMSwKKyAgInJlcXVpcmVzIjogdHJ1ZSwK
KyAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAiYWJicmV2IjogeworICAgICAgInZlcnNpb24iOiAi
MS4xLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Fi
YnJldi8tL2FiYnJldi0xLjEuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLTBGVk1J
bFpqYmk5VzU4TGxyUmcvaFpRbzJCOD0iLAorICAgICAgImRldiI6IHRydWUKKyAgICB9LAorICAg
ICJhY2NlcHRzIjogeworICAgICAgInZlcnNpb24iOiAiMS4zLjMiLAorICAgICAgInJlc29sdmVk
IjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2FjY2VwdHMvLS9hY2NlcHRzLTEuMy4zLnRn
eiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtdzhwME5KT0dTTVBnMmNIaktOMW90aUxDaE1v
PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAgIm1p
bWUtdHlwZXMiOiAiMi4xLjE2IiwKKyAgICAgICAgIm5lZ290aWF0b3IiOiAiMC42LjEiCisgICAg
ICB9CisgICAgfSwKKyAgICAiYWNvcm4iOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjAuMTMiLAor
ICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Fjb3JuLy0vYWNv
cm4tNC4wLjEzLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtRUZTVnJsTmgxcGU5R1Z5
Q1VaTGhyWDhsTjRjPSIsCisgICAgICAiZGV2IjogdHJ1ZQorICAgIH0sCisgICAgImFmdGVyIjog
eworICAgICAgInZlcnNpb24iOiAiMC44LjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8v
cmVnaXN0cnkubnBtanMub3JnL2FmdGVyLy0vYWZ0ZXItMC44LjEudGd6IiwKKyAgICAgICJpbnRl
Z3JpdHkiOiAic2hhMS1xMTFQdUlQMWxvRnROUlg0OTVIQXIwaHQxaWM9IiwKKyAgICAgICJkZXYi
OiB0cnVlCisgICAgfSwKKyAgICAiYWxpZ24tdGV4dCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAu
MS40IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hbGln
bi10ZXh0Ly0vYWxpZ24tdGV4dC0wLjEuNC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGEx
LUROa0tWaENUODEwS21TVnNJcmNHbERQNjBSYz0iLAorICAgICAgImRldiI6IHRydWUsCisgICAg
ICAicmVxdWlyZXMiOiB7CisgICAgICAgICJraW5kLW9mIjogIjMuMi4yIiwKKyAgICAgICAgImxv
bmdlc3QiOiAiMS4wLjEiLAorICAgICAgICAicmVwZWF0LXN0cmluZyI6ICIxLjYuMSIKKyAgICAg
IH0KKyAgICB9LAorICAgICJhbHRlciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuMi4wIiwKKyAg
ICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hbHRlci8tL2FsdGVy
LTAuMi4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEteDFpSUNHRjFjZ05Lcm1KSUN2
SnJIVTBjczgwPSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJyZXF1aXJlcyI6IHsKKyAg
ICAgICAgInN0YWJsZSI6ICIwLjEuNiIKKyAgICAgIH0KKyAgICB9LAorICAgICJhbWQtbmFtZS1y
ZXNvbHZlciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuMC42IiwKKyAgICAgICJyZXNvbHZlZCI6
ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hbWQtbmFtZS1yZXNvbHZlci8tL2FtZC1uYW1l
LXJlc29sdmVyLTAuMC42LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtMCtTNkxmeXFz
ZGdnd2I2ZDZVZkdlQ2pQNVpVPSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJyZXF1aXJl
cyI6IHsKKyAgICAgICAgImVuc3VyZS1wb3NpeC1wYXRoIjogIjEuMC4yIgorICAgICAgfQorICAg
IH0sCisgICAgImFtZGVmaW5lIjogeworICAgICAgInZlcnNpb24iOiAiMS4wLjEiLAorICAgICAg
InJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2FtZGVmaW5lLy0vYW1kZWZp
bmUtMS4wLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1TbEtDckJaSEtlazJHYno5
T3RGUitCZk9rZlU9IiwKKyAgICAgICJkZXYiOiB0cnVlCisgICAgfSwKKyAgICAiYW5zaS1lc2Nh
cGVzIjogeworICAgICAgInZlcnNpb24iOiAiMS40LjAiLAorICAgICAgInJlc29sdmVkIjogImh0
dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Fuc2ktZXNjYXBlcy8tL2Fuc2ktZXNjYXBlcy0xLjQu
MC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLTA2aW9PekdhcG5lVFppc1Q1MkhIa1JR
aU1HND0iLAorICAgICAgImRldiI6IHRydWUKKyAgICB9LAorICAgICJhbnNpLXJlZ2V4Ijogewor
ICAgICAgInZlcnNpb24iOiAiMi4xLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVn
aXN0cnkubnBtanMub3JnL2Fuc2ktcmVnZXgvLS9hbnNpLXJlZ2V4LTIuMS4xLnRneiIsCisgICAg
ICAiaW50ZWdyaXR5IjogInNoYTEtdzdNNnRlNDJEWWJnNWlqd1Jvcm43eWZXVk44PSIsCisgICAg
ICAiZGV2IjogdHJ1ZQorICAgIH0sCisgICAgImFuc2ktc3R5bGVzIjogeworICAgICAgInZlcnNp
b24iOiAiMi4yLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMu
b3JnL2Fuc2ktc3R5bGVzLy0vYW5zaS1zdHlsZXMtMi4yLjEudGd6IiwKKyAgICAgICJpbnRlZ3Jp
dHkiOiAic2hhMS10RExkTTFpMk5NOTE0ZVJtUTJna0JUUEIzYjQ9IiwKKyAgICAgICJkZXYiOiB0
cnVlCisgICAgfSwKKyAgICAiYW5zaWNvbG9ycyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuMi4x
IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hbnNpY29s
b3JzLy0vYW5zaWNvbG9ycy0wLjIuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLXZn
aVZtUWw3ZEtYSnhLaEtETnZOdGl2WWV1OD0iLAorICAgICAgImRldiI6IHRydWUKKyAgICB9LAor
ICAgICJhbnltYXRjaCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMy4yIiwKKyAgICAgICJyZXNv
bHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hbnltYXRjaC8tL2FueW1hdGNoLTEu
My4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0wWE5heUM4bFRIUTJPSThhbGpO
Q04zc1N4Nmhzci8xK3JsY0RBb3RYSlI3QzFvWlpIQ05zZnBiS3dNalJBM1VxYjV0RjFSYWUyb2xv
VHI0eHBxK1dqQT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgInJlcXVpcmVzIjogewor
ICAgICAgICAibWljcm9tYXRjaCI6ICIyLjMuMTEiLAorICAgICAgICAibm9ybWFsaXplLXBhdGgi
OiAiMi4xLjEiCisgICAgICB9CisgICAgfSwKKyAgICAiYXByb2JhIjogeworICAgICAgInZlcnNp
b24iOiAiMS4xLjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMu
b3JnL2Fwcm9iYS8tL2Fwcm9iYS0xLjEuMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1
MTItWnBZYWpJZk8wajJjT0ZUTzk1NUtVTUlLTm1qNnpoWDhrVnp0TUF4RnNEYU13eis5WjlTVjB1
b3UycEM5SEpxY2ZwZmZPc2puYnJETXZrTnkrOVJYUHc9PSIsCisgICAgICAiZGV2IjogdHJ1ZQor
ICAgIH0sCisgICAgImFyZS13ZS10aGVyZS15ZXQiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjEu
NCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYXJlLXdl
LXRoZXJlLXlldC8tL2FyZS13ZS10aGVyZS15ZXQtMS4xLjQudGd6IiwKKyAgICAgICJpbnRlZ3Jp
dHkiOiAic2hhMS11MTNLT0N1NVR3WGhVWlEzUFJiOU82SEtFUTA9IiwKKyAgICAgICJkZXYiOiB0
cnVlLAorICAgICAgInJlcXVpcmVzIjogeworICAgICAgICAiZGVsZWdhdGVzIjogIjEuMC4wIiwK
KyAgICAgICAgInJlYWRhYmxlLXN0cmVhbSI6ICIyLjMuMyIKKyAgICAgIH0sCisgICAgICAiZGVw
ZW5kZW5jaWVzIjogeworICAgICAgICAicmVhZGFibGUtc3RyZWFtIjogeworICAgICAgICAgICJ2
ZXJzaW9uIjogIjIuMy4zIiwKKyAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3Ry
eS5ucG1qcy5vcmcvcmVhZGFibGUtc3RyZWFtLy0vcmVhZGFibGUtc3RyZWFtLTIuMy4zLnRneiIs
CisgICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItbStxenpjbjdLVXhFbWQxZ01iY2hGK1ky
ZUlVYmllVWF4a1d0cHR5SHl3clgwckU4UUVZcVBDMDdWdXk0V20zMi94RTE2TmNkQmN0YjhTMFhl
LzVJZVE9PSIsCisgICAgICAgICAgImRldiI6IHRydWUsCisgICAgICAgICAgInJlcXVpcmVzIjog
eworICAgICAgICAgICAgImNvcmUtdXRpbC1pcyI6ICIxLjAuMiIsCisgICAgICAgICAgICAiaW5o
ZXJpdHMiOiAiMi4wLjMiLAorICAgICAgICAgICAgImlzYXJyYXkiOiAiMS4wLjAiLAorICAgICAg
ICAgICAgInByb2Nlc3MtbmV4dGljay1hcmdzIjogIjEuMC43IiwKKyAgICAgICAgICAgICJzYWZl
LWJ1ZmZlciI6ICI1LjEuMSIsCisgICAgICAgICAgICAic3RyaW5nX2RlY29kZXIiOiAiMS4wLjMi
LAorICAgICAgICAgICAgInV0aWwtZGVwcmVjYXRlIjogIjEuMC4yIgorICAgICAgICAgIH0KKyAg
ICAgICAgfSwKKyAgICAgICAgInN0cmluZ19kZWNvZGVyIjogeworICAgICAgICAgICJ2ZXJzaW9u
IjogIjEuMC4zIiwKKyAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1q
cy5vcmcvc3RyaW5nX2RlY29kZXIvLS9zdHJpbmdfZGVjb2Rlci0xLjAuMy50Z3oiLAorICAgICAg
ICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTRBSDZaNWZ6Tk5CY0grNlhETWZBL0JUdDg3c2t4cUps
TzBsQWgzRGtlcjV6VGhjQXhHNm1LeitpR3UzMDhVS29QUFE4RGNxeC80Smh1anpsdFJhK2hRPT0i
LAorICAgICAgICAgICJkZXYiOiB0cnVlLAorICAgICAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAg
ICAgICAgICJzYWZlLWJ1ZmZlciI6ICI1LjEuMSIKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgIH0KKyAgICB9LAorICAgICJhcmdwYXJzZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMC45
IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hcmdwYXJz
ZS8tL2FyZ3BhcnNlLTEuMC45LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtYzlnN3dt
UDRicGY0ekU5cnJoc09rS2ZTTElZPSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJyZXF1
aXJlcyI6IHsKKyAgICAgICAgInNwcmludGYtanMiOiAiMS4wLjMiCisgICAgICB9LAorICAgICAg
ImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgInNwcmludGYtanMiOiB7CisgICAgICAgICAgInZl
cnNpb24iOiAiMS4wLjMiLAorICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5
Lm5wbWpzLm9yZy9zcHJpbnRmLWpzLy0vc3ByaW50Zi1qcy0xLjAuMy50Z3oiLAorICAgICAgICAg
ICJpbnRlZ3JpdHkiOiAic2hhMS1CT2FTYjJZb2xUVlBQZEFWSURZenVGY3BmaXc9IiwKKyAgICAg
ICAgICAiZGV2IjogdHJ1ZQorICAgICAgICB9CisgICAgICB9CisgICAgfSwKKyAgICAiYXJyLWRp
ZmYiOiB7CisgICAgICAidmVyc2lvbiI6ICIyLjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0
cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYXJyLWRpZmYvLS9hcnItZGlmZi0yLjAuMC50Z3oiLAor
ICAgICAgImludGVncml0eSI6ICJzaGExLWp6dUNmNVZhaTlacGFYNUtRbGFzUE9yalZzOD0iLAor
ICAgICAgImRldiI6IHRydWUsCisgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICJhcnItZmxh
dHRlbiI6ICIxLjEuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJhcnItZmxhdHRlbiI6IHsKKyAg
ICAgICJ2ZXJzaW9uIjogIjEuMS4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lz
dHJ5Lm5wbWpzLm9yZy9hcnItZmxhdHRlbi8tL2Fyci1mbGF0dGVuLTEuMS4wLnRneiIsCisgICAg
ICAiaW50ZWdyaXR5IjogInNoYTUxMi1MM2hLVjVSL3A1bzgxUjdPMDJJR253cERta3A2RTk4Mlho
dGJ1d1NlM080cU90TU1NdG9kaWNBU0ExQ255MlUrYUNYY05wbWwrbTRkUHN2c0ozamF0Zz09IiwK
KyAgICAgICJkZXYiOiB0cnVlCisgICAgfSwKKyAgICAiYXJyYXktZXF1YWwiOiB7CisgICAgICAi
dmVyc2lvbiI6ICIxLjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5u
cG1qcy5vcmcvYXJyYXktZXF1YWwvLS9hcnJheS1lcXVhbC0xLjAuMC50Z3oiLAorICAgICAgImlu
dGVncml0eSI6ICJzaGExLWpDcGU4a2N2MmVwMEt3VEhlblVKTzZKMWZKTT0iLAorICAgICAgImRl
diI6IHRydWUKKyAgICB9LAorICAgICJhcnJheS1mbGF0dGVuIjogeworICAgICAgInZlcnNpb24i
OiAiMS4xLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3Jn
L2FycmF5LWZsYXR0ZW4vLS9hcnJheS1mbGF0dGVuLTEuMS4xLnRneiIsCisgICAgICAiaW50ZWdy
aXR5IjogInNoYTEtbWw5cGtGR3g1d2N6S1BLZ0NKYUxaT29wVmRJPSIsCisgICAgICAiZGV2Ijog
dHJ1ZQorICAgIH0sCisgICAgImFycmF5LXRvLWVycm9yIjogeworICAgICAgInZlcnNpb24iOiAi
MS4xLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Fy
cmF5LXRvLWVycm9yLy0vYXJyYXktdG8tZXJyb3ItMS4xLjEudGd6IiwKKyAgICAgICJpbnRlZ3Jp
dHkiOiAic2hhMS0xb2dTa20wVUNYb2dWWG1tWis2dkdGYWtUQWM9IiwKKyAgICAgICJkZXYiOiB0
cnVlLAorICAgICAgInJlcXVpcmVzIjogeworICAgICAgICAiYXJyYXktdG8tc2VudGVuY2UiOiAi
MS4xLjAiCisgICAgICB9CisgICAgfSwKKyAgICAiYXJyYXktdG8tc2VudGVuY2UiOiB7CisgICAg
ICAidmVyc2lvbiI6ICIxLjEuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3Ry
eS5ucG1qcy5vcmcvYXJyYXktdG8tc2VudGVuY2UvLS9hcnJheS10by1zZW50ZW5jZS0xLjEuMC50
Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLXlBU1ZiYStsTWpKSld5QmFsRkoxT2lXTk9m
dz0iLAorICAgICAgImRldiI6IHRydWUKKyAgICB9LAorICAgICJhcnJheS11bmlxdWUiOiB7Cisg
ICAgICAidmVyc2lvbiI6ICIwLjIuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdp
c3RyeS5ucG1qcy5vcmcvYXJyYXktdW5pcXVlLy0vYXJyYXktdW5pcXVlLTAuMi4xLnRneiIsCisg
ICAgICAiaW50ZWdyaXR5IjogInNoYTEtb2RsOHl2eThKaVhNY1ByYzZ6YWxERml3R2xNPSIsCisg
ICAgICAiZGV2IjogdHJ1ZQorICAgIH0sCisgICAgImFycmF5YnVmZmVyLnNsaWNlIjogeworICAg
ICAgInZlcnNpb24iOiAiMC4wLjYiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0
cnkubnBtanMub3JnL2FycmF5YnVmZmVyLnNsaWNlLy0vYXJyYXlidWZmZXIuc2xpY2UtMC4wLjYu
dGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS04enNoV2ZCVEtqOHhCNkp5d016NzBhMHBl
Y289IiwKKyAgICAgICJkZXYiOiB0cnVlCisgICAgfSwKKyAgICAiYXN0LXRyYXZlcnNlIjogewor
ICAgICAgInZlcnNpb24iOiAiMC4xLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVn
aXN0cnkubnBtanMub3JnL2FzdC10cmF2ZXJzZS8tL2FzdC10cmF2ZXJzZS0wLjEuMS50Z3oiLAor
ICAgICAgImludGVncml0eSI6ICJzaGExLWFjOHJnNGJ4bmMyaHV4NEYxby9qV2RpSmZlWT0iLAor
ICAgICAgImRldiI6IHRydWUKKyAgICB9LAorICAgICJhc3QtdHlwZXMiOiB7CisgICAgICAidmVy
c2lvbiI6ICIwLjkuNiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1q
cy5vcmcvYXN0LXR5cGVzLy0vYXN0LXR5cGVzLTAuOS42LnRneiIsCisgICAgICAiaW50ZWdyaXR5
IjogInNoYTEtRUN5ZW5wQUYwK2ZqZ3B2d3hQb2s3b1l1NmJrPSIsCisgICAgICAiZGV2IjogdHJ1
ZQorICAgIH0sCisgICAgImFzeW5jIjogeworICAgICAgInZlcnNpb24iOiAiMi41LjAiLAorICAg
ICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2FzeW5jLy0vYXN5bmMt
Mi41LjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWUrbEpBSmVOV3VQQ055eFpL
T0JkYUpHeUxHSHVnWFZRdHJBd3R1QWUydmh4VFl4RlRLRTczcDhKdVRtZEgwcWRRWnREdkk0ZGhK
d2paYzV6c2ZJc1l3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAicmVxdWlyZXMiOiB7
CisgICAgICAgICJsb2Rhc2giOiAiNC4xNy40IgorICAgICAgfSwKKyAgICAgICJkZXBlbmRlbmNp
ZXMiOiB7CisgICAgICAgICJsb2Rhc2giOiB7CisgICAgICAgICAgInZlcnNpb24iOiAiNC4xNy40
IiwKKyAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbG9k
YXNoLy0vbG9kYXNoLTQuMTcuNC50Z3oiLAorICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1l
Q0E2VFJ3eWl1SFliY3BrWU9OcHRYOUFWYTQ9IiwKKyAgICAgICAgICAiZGV2IjogdHJ1ZQorICAg
ICAgICB9CisgICAgICB9CisgICAgfSwKKyAgICAiYXN5bmMtZGlzay1jYWNoZSI6IHsKKyAgICAg
ICJ2ZXJzaW9uIjogIjEuMy4yIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5
Lm5wbWpzLm9yZy9hc3luYy1kaXNrLWNhY2hlLy0vYXN5bmMtZGlzay1jYWNoZS0xLjMuMi50Z3oi
LAorICAgICAgImludGVncml0eSI6ICJzaGExLXJGUFdGU2hEM3lBc2xBYmlqWGREWW1DTmROMD0i
LAorICAgICAgImRldiI6IHRydWUsCisgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICJkZWJ1
ZyI6ICIyLjYuOCIsCisgICAgICAgICJoZWltZGFsbGpzIjogIjAuMi41IiwKKyAgICAgICAgImlz
dGV4dG9yYmluYXJ5IjogIjIuMS4wIiwKKyAgICAgICAgIm1rZGlycCI6ICIwLjUuMSIsCisgICAg
ICAgICJyaW1yYWYiOiAiMi42LjEiLAorICAgICAgICAicnN2cCI6ICIzLjYuMiIsCisgICAgICAg
ICJ1c2VybmFtZS1zeW5jIjogIjEuMC4xIgorICAgICAgfQorICAgIH0sCisgICAgImFzeW5jLWVh
Y2giOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjAuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0
cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYXN5bmMtZWFjaC8tL2FzeW5jLWVhY2gtMS4wLjEudGd6
IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1HZE9Hb2RudHh1ZkJ5RjA0aXUyOHhXMHpZQzA9
IiwKKyAgICAgICJkZXYiOiB0cnVlCisgICAgfSwKKyAgICAiYXN5bmMtcHJvbWlzZS1xdWV1ZSI6
IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMC40IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczov
L3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hc3luYy1wcm9taXNlLXF1ZXVlLy0vYXN5bmMtcHJvbWlzZS1x
dWV1ZS0xLjAuNC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItR1E1WDNEVCtUZWZZ
dUZQSGR2SVBYRlRsS25oMzlVN2R3dGwrYVVCR2VLak1lYTluQnB2M2M5MURYZ2V5QlFtWTA3dlE5
N2YzU3I5WEhxa2FtRWFtZVE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJyZXF1aXJl
cyI6IHsKKyAgICAgICAgImFzeW5jIjogIjIuNS4wIiwKKyAgICAgICAgImRlYnVnIjogIjIuNi44
IgorICAgICAgfQorICAgIH0sCisgICAgImJhYmVsLWNvZGUtZnJhbWUiOiB7CisgICAgICAidmVy
c2lvbiI6ICI2LjIyLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBt
anMub3JnL2JhYmVsLWNvZGUtZnJhbWUvLS9iYWJlbC1jb2RlLWZyYW1lLTYuMjIuMC50Z3oiLAor
ICAgICAgImludGVncml0eSI6ICJzaGExLUFuWWd2dVZucUl3eVZoVjA1LzBJQWRNeEdPUT0iLAor
ICAgICAgImRldiI6IHRydWUsCisgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICJjaGFsayI6
ICIxLjEuMyIsCisgICAgICAgICJlc3V0aWxzIjogIjIuMC4yIiwKKyAgICAgICAgImpzLXRva2Vu
cyI6ICIzLjAuMiIKKyAgICAgIH0sCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAi
anMtdG9rZW5zIjogeworICAgICAgICAgICJ2ZXJzaW9uIjogIjMuMC4yIiwKKyAgICAgICAgICAi
cmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvanMtdG9rZW5zLy0vanMtdG9r
ZW5zLTMuMC4yLnRneiIsCisgICAgICAgICAgImludGVncml0eSI6ICJzaGExLW1HYmZPVkVDRXc0
NDkvbVd2T3RsUkRJSndscz0iLAorICAgICAgICAgICJkZXYiOiB0cnVlCisgICAgICAgIH0KKyAg
ICAgIH0KKyAgICB9LAorICAgICJiYWJlbC1jb3JlIjogeworICAgICAgInZlcnNpb24iOiAiNS44
LjM4IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9iYWJl
bC1jb3JlLy0vYmFiZWwtY29yZS01LjguMzgudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hh
MS1IOHJ1ZWRmbUczVUxBTGpsVDIzOG5RcjRaVmc9IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAg
ICAgInJlcXVpcmVzIjogeworICAgICAgICAiYmFiZWwtcGx1Z2luLWNvbnN0YW50LWZvbGRpbmci
OiAiMS4wLjEiLAorICAgICAgICAiYmFiZWwtcGx1Z2luLWRlYWQtY29kZS1lbGltaW5hdGlvbiI6
ICIxLjAuMiIsCisgICAgICAgICJiYWJlbC1wbHVnaW4tZXZhbCI6ICIxLjAuMSIsCisgICAgICAg
ICJiYWJlbC1wbHVnaW4taW5saW5lLWVudmlyb25tZW50LXZhcmlhYmxlcyI6ICIxLjAuMSIsCisg
ICAgICAgICJiYWJlbC1wbHVnaW4tanNjcmlwdCI6ICIxLjAuNCIsCisgICAgICAgICJiYWJlbC1w
bHVnaW4tbWVtYmVyLWV4cHJlc3Npb24tbGl0ZXJhbHMiOiAiMS4wLjEiLAorICAgICAgICAiYmFi
ZWwtcGx1Z2luLXByb3BlcnR5LWxpdGVyYWxzIjogIjEuMC4xIiwKKyAgICAgICAgImJhYmVsLXBs
dWdpbi1wcm90by10by1hc3NpZ24iOiAiMS4wLjQiLAorICAgICAgICAiYmFiZWwtcGx1Z2luLXJl
YWN0LWNvbnN0YW50LWVsZW1lbnRzIjogIjEuMC4zIiwKKyAgICAgICAgImJhYmVsLXBsdWdpbi1y
ZWFjdC1kaXNwbGF5LW5hbWUiOiAiMS4wLjMiLAorICAgICAgICAiYmFiZWwtcGx1Z2luLXJlbW92
ZS1jb25zb2xlIjogIjEuMC4xIiwKKyAgICAgICAgImJhYmVsLXBsdWdpbi1yZW1vdmUtZGVidWdn
ZXIiOiAiMS4wLjEiLAorICAgICAgICAiYmFiZWwtcGx1Z2luLXJ1bnRpbWUiOiAiMS4wLjciLAor
ICAgICAgICAiYmFiZWwtcGx1Z2luLXVuZGVjbGFyZWQtdmFyaWFibGVzLWNoZWNrIjogIjEuMC4y
IiwKKyAgICAgICAgImJhYmVsLXBsdWdpbi11bmRlZmluZWQtdG8tdm9pZCI6ICIxLjEuNiIsCisg
ICAgICAgICJiYWJ5bG9uIjogIjUuOC4zOCIsCisgICAgICAgICJibHVlYmlyZCI6ICIyLjExLjAi
LAorICAgICAgICAiY2hhbGsiOiAiMS4xLjMiLAorICAgICAgICAiY29udmVydC1zb3VyY2UtbWFw
IjogIjEuNS4wIiwKKyAgICAgICAgImNvcmUtanMiOiAiMS4yLjciLAorICAgICAgICAiZGVidWci
OiAiMi42LjgiLAorICAgICAgICAiZGV0ZWN0LWluZGVudCI6ICIzLjAuMSIsCisgICAgICAgICJl
c3V0aWxzIjogIjIuMC4yIiwKKyAgICAgICAgImZzLXJlYWRkaXItcmVjdXJzaXZlIjogIjAuMS4y
IiwKKyAgICAgICAgImdsb2JhbHMiOiAiNi40LjEiLAorICAgICAgICAiaG9tZS1vci10bXAiOiAi
MS4wLjAiLAorICAgICAgICAiaXMtaW50ZWdlciI6ICIxLjAuNyIsCisgICAgICAgICJqcy10b2tl
bnMiOiAiMS4wLjEiLAorICAgICAgICAianNvbjUiOiAiMC40LjAiLAorICAgICAgICAibG9kYXNo
IjogIjMuMTAuMSIsCisgICAgICAgICJtaW5pbWF0Y2giOiAiMi4wLjEwIiwKKyAgICAgICAgIm91
dHB1dC1maWxlLXN5bmMiOiAiMS4xLjIiLAorICAgICAgICAicGF0aC1leGlzdHMiOiAiMS4wLjAi
LAorICAgICAgICAicGF0aC1pcy1hYnNvbHV0ZSI6ICIxLjAuMSIsCisgICAgICAgICJwcml2YXRl
IjogIjAuMS43IiwKKyAgICAgICAgInJlZ2VuZXJhdG9yIjogIjAuOC40MCIsCisgICAgICAgICJy
ZWdleHB1IjogIjEuMy4wIiwKKyAgICAgICAgInJlcGVhdGluZyI6ICIxLjEuMyIsCisgICAgICAg
ICJyZXNvbHZlIjogIjEuNC4wIiwKKyAgICAgICAgInNoZWJhbmctcmVnZXgiOiAiMS4wLjAiLAor
ICAgICAgICAic2xhc2giOiAiMS4wLjAiLAorICAgICAgICAic291cmNlLW1hcCI6ICIwLjUuNiIs
CisgICAgICAgICJzb3VyY2UtbWFwLXN1cHBvcnQiOiAiMC4yLjEwIiwKKyAgICAgICAgInRvLWZh
c3QtcHJvcGVydGllcyI6ICIxLjAuMyIsCisgICAgICAgICJ0cmltLXJpZ2h0IjogIjEuMC4xIiwK
KyAgICAgICAgInRyeS1yZXNvbHZlIjogIjEuMC4xIgorICAgICAgfSwKKyAgICAgICJkZXBlbmRl
bmNpZXMiOiB7CisgICAgICAgICJtaW5pbWF0Y2giOiB7CisgICAgICAgICAgInZlcnNpb24iOiAi
Mi4wLjEwIiwKKyAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5v
cmcvbWluaW1hdGNoLy0vbWluaW1hdGNoLTIuMC4xMC50Z3oiLAorICAgICAgICAgICJpbnRlZ3Jp
dHkiOiAic2hhMS1qUWg4T2NhempBQWJsL3luem0wT0hvQ3Z1c2M9IiwKKyAgICAgICAgICAiZGV2
IjogdHJ1ZSwKKyAgICAgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICAgICAiYnJhY2UtZXhw
YW5zaW9uIjogIjEuMS44IgorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0s
CisgICAgImJhYmVsLWdlbmVyYXRvciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjYuMjUuMCIsCisg
ICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYmFiZWwtZ2VuZXJh
dG9yLy0vYmFiZWwtZ2VuZXJhdG9yLTYuMjUuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJz
aGExLU02R3ZjTlh5aVFyclJscEtkNVBCMzJxZXFmdz0iLAorICAgICAgImRldiI6IHRydWUsCisg
ICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICJiYWJlbC1tZXNzYWdlcyI6ICI2LjIzLjAiLAor
ICAgICAgICAiYmFiZWwtcnVudGltZSI6ICI2LjI1LjAiLAorICAgICAgICAiYmFiZWwtdHlwZXMi
OiAiNi4yNS4wIiwKKyAgICAgICAgImRldGVjdC1pbmRlbnQiOiAiNC4wLjAiLAorICAgICAgICAi
anNlc2MiOiAiMS4zLjAiLAorICAgICAgICAibG9kYXNoIjogIjQuMTcuNCIsCisgICAgICAgICJz
b3VyY2UtbWFwIjogIjAuNS42IiwKKyAgICAgICAgInRyaW0tcmlnaHQiOiAiMS4wLjEiCisgICAg
ICB9LAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImRldGVjdC1pbmRlbnQiOiB7
CisgICAgICAgICAgInZlcnNpb24iOiAiNC4wLjAiLAorICAgICAgICAgICJyZXNvbHZlZCI6ICJo
dHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kZXRlY3QtaW5kZW50Ly0vZGV0ZWN0LWluZGVudC00
LjAuMC50Z3oiLAorICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS05MjBHUTFMTjlEb2N0czVo
bkU3anFVZGQ0Z2c9IiwKKyAgICAgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICAgICAicmVxdWly
ZXMiOiB7CisgICAgICAgICAgICAicmVwZWF0aW5nIjogIjIuMC4xIgorICAgICAgICAgIH0KKyAg
ICAgICAgfSwKKyAgICAgICAgImpzZXNjIjogeworICAgICAgICAgICJ2ZXJzaW9uIjogIjEuMy4w
IiwKKyAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvanNl
c2MvLS9qc2VzYy0xLjMuMC50Z3oiLAorICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1Sc1Ar
eU1HSkt4S3dnejI1dkhZaUYyMjZzMHM9IiwKKyAgICAgICAgICAiZGV2IjogdHJ1ZQorICAgICAg
ICB9LAorICAgICAgICAibG9kYXNoIjogeworICAgICAgICAgICJ2ZXJzaW9uIjogIjQuMTcuNCIs
CisgICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2xvZGFz
aC8tL2xvZGFzaC00LjE3LjQudGd6IiwKKyAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTEtZUNB
NlRSd3lpdUhZYmNwa1lPTnB0WDlBVmE0PSIsCisgICAgICAgICAgImRldiI6IHRydWUKKyAgICAg
ICAgfSwKKyAgICAgICAgInJlcGVhdGluZyI6IHsKKyAgICAgICAgICAidmVyc2lvbiI6ICIyLjAu
MSIsCisgICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Jl
cGVhdGluZy8tL3JlcGVhdGluZy0yLjAuMS50Z3oiLAorICAgICAgICAgICJpbnRlZ3JpdHkiOiAi
c2hhMS1VaFRGT3BKdE5WSndkU2Y3cTBGZHZBalFiZG89IiwKKyAgICAgICAgICAiZGV2IjogdHJ1
ZSwKKyAgICAgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICAgICAiaXMtZmluaXRlIjogIjEu
MC4yIgorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0sCisgICAgImJhYmVs
LWhlbHBlcnMiOiB7CisgICAgICAidmVyc2lvbiI6ICI2LjI0LjEiLAorICAgICAgInJlc29sdmVk
IjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2JhYmVsLWhlbHBlcnMvLS9iYWJlbC1oZWxw
ZXJzLTYuMjQuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLU5ISGVuSzdEaU9YSVVP
V1g1WW9tM2ZOMkFyST0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAicmVxdWlyZXMiOiB7
CisgICAgICAgICJiYWJlbC1ydW50aW1lIjogIjYuMjUuMCIsCisgICAgICAgICJiYWJlbC10ZW1w
bGF0ZSI6ICI2LjI1LjAiCisgICAgICB9CisgICAgfSwKKyAgICAiYmFiZWwtbWVzc2FnZXMiOiB7
CisgICAgICAidmVyc2lvbiI6ICI2LjIzLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8v
cmVnaXN0cnkubnBtanMub3JnL2JhYmVsLW1lc3NhZ2VzLy0vYmFiZWwtbWVzc2FnZXMtNi4yMy4w
LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtODgzMGNEaFlBMXNxS1ZIRzdGN2ZiR0x5
WXc0PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAg
ImJhYmVsLXJ1bnRpbWUiOiAiNi4yNS4wIgorICAgICAgfQorICAgIH0sCisgICAgImJhYmVsLXBs
dWdpbi1jb25zdGFudC1mb2xkaW5nIjogeworICAgICAgInZlcnNpb24iOiAiMS4wLjEiLAorICAg
ICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2JhYmVsLXBsdWdpbi1j
b25zdGFudC1mb2xkaW5nLy0vYmFiZWwtcGx1Z2luLWNvbnN0YW50LWZvbGRpbmctMS4wLjEudGd6
IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1nMkhUWk1tT1JKdzJrcjI2VWUvd2hFS1FxbzQ9
IiwKKyAgICAgICJkZXYiOiB0cnVlCisgICAgfSwKKyAgICAiYmFiZWwtcGx1Z2luLWRlYWQtY29k
ZS1lbGltaW5hdGlvbiI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMC4yIiwKKyAgICAgICJyZXNv
bHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9iYWJlbC1wbHVnaW4tZGVhZC1jb2Rl
LWVsaW1pbmF0aW9uLy0vYmFiZWwtcGx1Z2luLWRlYWQtY29kZS1lbGltaW5hdGlvbi0xLjAuMi50
Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLVgzeEZFblRjMTh6TnY3cytDNFhkS0JJZkQy
VT0iLAorICAgICAgImRldiI6IHRydWUKKyAgICB9LAorICAgICJiYWJlbC1wbHVnaW4tZXZhbCI6
IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMC4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczov
L3JlZ2lzdHJ5Lm5wbWpzLm9yZy9iYWJlbC1wbHVnaW4tZXZhbC8tL2JhYmVsLXBsdWdpbi1ldmFs
LTEuMC4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtb3ZydEpjNXI1cHJlUy83Q1kv
Y0JhUmxaVU5vPSIsCisgICAgICAiZGV2IjogdHJ1ZQorICAgIH0sCisgICAgImJhYmVsLXBsdWdp
bi1odG1sYmFycy1pbmxpbmUtcHJlY29tcGlsZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuMS4x
IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9iYWJlbC1w
bHVnaW4taHRtbGJhcnMtaW5saW5lLXByZWNvbXBpbGUvLS9iYWJlbC1wbHVnaW4taHRtbGJhcnMt
aW5saW5lLXByZWNvbXBpbGUtMC4xLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEy
LXVHNVFOQlNtVk9Yd2dPS28xcEhYeFRTNDdHcHBvbEM5Rk96cGlBY1U1QmJEL1AvU3JKMDhYVVk2
UEJ0dHVsNER2Zm15aGRZZGg2Y1RDQnhEVEI3RXR3PT0iLAorICAgICAgImRldiI6IHRydWUKKyAg
ICB9LAorICAgICJiYWJlbC1wbHVnaW4taW5saW5lLWVudmlyb25tZW50LXZhcmlhYmxlcyI6IHsK
KyAgICAgICJ2ZXJzaW9uIjogIjEuMC4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3Jl
Z2lzdHJ5Lm5wbWpzLm9yZy9iYWJlbC1wbHVnaW4taW5saW5lLWVudmlyb25tZW50LXZhcmlhYmxl
cy8tL2JhYmVsLXBsdWdpbi1pbmxpbmUtZW52aXJvbm1lbnQtdmFyaWFibGVzLTEuMC4xLnRneiIs
CisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtSDFqT2tTQjYxcWdtcUw5a1g2L21qL1grUC80PSIs
CisgICAgICAiZGV2IjogdHJ1ZQorICAgIH0sCisgICAgImJhYmVsLXBsdWdpbi1qc2NyaXB0Ijog
eworICAgICAgInZlcnNpb24iOiAiMS4wLjQiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8v
cmVnaXN0cnkubnBtanMub3JnL2JhYmVsLXBsdWdpbi1qc2NyaXB0Ly0vYmFiZWwtcGx1Z2luLWpz
Y3JpcHQtMS4wLjQudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1qelFzT0NkdWg2UjlY
NkNvdlQxZXRzeXRqOHc9IiwKKyAgICAgICJkZXYiOiB0cnVlCisgICAgfSwKKyAgICAiYmFiZWwt
cGx1Z2luLW1lbWJlci1leHByZXNzaW9uLWxpdGVyYWxzIjogeworICAgICAgInZlcnNpb24iOiAi
MS4wLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Jh
YmVsLXBsdWdpbi1tZW1iZXItZXhwcmVzc2lvbi1saXRlcmFscy8tL2JhYmVsLXBsdWdpbi1tZW1i
ZXItZXhwcmVzc2lvbi1saXRlcmFscy0xLjAuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJz
aGExLXpGN2JENnFOeVNjWERuVFcwY0FrUUFJV0pOTT0iLAorICAgICAgImRldiI6IHRydWUKKyAg
ICB9LAorICAgICJiYWJlbC1wbHVnaW4tcHJvcGVydHktbGl0ZXJhbHMiOiB7CisgICAgICAidmVy
c2lvbiI6ICIxLjAuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1q
cy5vcmcvYmFiZWwtcGx1Z2luLXByb3BlcnR5LWxpdGVyYWxzLy0vYmFiZWwtcGx1Z2luLXByb3Bl
cnR5LWxpdGVyYWxzLTEuMC4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtQWxJd0dR
QVpLWUN4d1JqdjZrak9rNnE0TXpZPSIsCisgICAgICAiZGV2IjogdHJ1ZQorICAgIH0sCisgICAg
ImJhYmVsLXBsdWdpbi1wcm90by10by1hc3NpZ24iOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjAu
NCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYmFiZWwt
cGx1Z2luLXByb3RvLXRvLWFzc2lnbi8tL2JhYmVsLXBsdWdpbi1wcm90by10by1hc3NpZ24tMS4w
LjQudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS14SjU2L1FMMWQ3eE5vRjZpM3dBaVVN
OTgwU009IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgInJlcXVpcmVzIjogeworICAgICAg
ICAibG9kYXNoIjogIjMuMTAuMSIKKyAgICAgIH0KKyAgICB9LAorICAgICJiYWJlbC1wbHVnaW4t
cmVhY3QtY29uc3RhbnQtZWxlbWVudHMiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjAuMyIsCisg
ICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYmFiZWwtcGx1Z2lu
LXJlYWN0LWNvbnN0YW50LWVsZW1lbnRzLy0vYmFiZWwtcGx1Z2luLXJlYWN0LWNvbnN0YW50LWVs
ZW1lbnRzLTEuMC4zLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtbEdjMjZEZUVLY3ZE
U2R6L1l2VWNGRHMwNDFvPSIsCisgICAgICAiZGV2IjogdHJ1ZQorICAgIH0sCisgICAgImJhYmVs
LXBsdWdpbi1yZWFjdC1kaXNwbGF5LW5hbWUiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjAuMyIs
CisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYmFiZWwtcGx1
Z2luLXJlYWN0LWRpc3BsYXktbmFtZS8tL2JhYmVsLXBsdWdpbi1yZWFjdC1kaXNwbGF5LW5hbWUt
MS4wLjMudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1kVS9qaVNib1FrcE9leFdyYnFZ
VG5lNEZGUHc9IiwKKyAgICAgICJkZXYiOiB0cnVlCisgICAgfSwKKyAgICAiYmFiZWwtcGx1Z2lu
LXJlbW92ZS1jb25zb2xlIjogeworICAgICAgInZlcnNpb24iOiAiMS4wLjEiLAorICAgICAgInJl
c29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2JhYmVsLXBsdWdpbi1yZW1vdmUt
Y29uc29sZS8tL2JhYmVsLXBsdWdpbi1yZW1vdmUtY29uc29sZS0xLjAuMS50Z3oiLAorICAgICAg
ImludGVncml0eSI6ICJzaGExLTJQSkZWc09nVUFYVUtxcXYwbmVIOVQvd0U2Yz0iLAorICAgICAg
ImRldiI6IHRydWUKKyAgICB9LAorICAgICJiYWJlbC1wbHVnaW4tcmVtb3ZlLWRlYnVnZ2VyIjog
eworICAgICAgInZlcnNpb24iOiAiMS4wLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8v
cmVnaXN0cnkubnBtanMub3JnL2JhYmVsLXBsdWdpbi1yZW1vdmUtZGVidWdnZXIvLS9iYWJlbC1w
bHVnaW4tcmVtb3ZlLWRlYnVnZ2VyLTEuMC4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNo
YTEtL1M2anpXR2tLSzBmTzV5SmlDLzBLVDZNRk1jPSIsCisgICAgICAiZGV2IjogdHJ1ZQorICAg
IH0sCisgICAgImJhYmVsLXBsdWdpbi1ydW50aW1lIjogeworICAgICAgInZlcnNpb24iOiAiMS4w
LjciLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2JhYmVs
LXBsdWdpbi1ydW50aW1lLy0vYmFiZWwtcGx1Z2luLXJ1bnRpbWUtMS4wLjcudGd6IiwKKyAgICAg
ICJpbnRlZ3JpdHkiOiAic2hhMS12M3g5bG0zVmJzMWNGL29jc2xQSnJMZmxTcTg9IiwKKyAgICAg
ICJkZXYiOiB0cnVlCisgICAgfSwKKyAgICAiYmFiZWwtcGx1Z2luLXRyYW5zZm9ybS1lczIwMTUt
bW9kdWxlcy1hbWQiOiB7CisgICAgICAidmVyc2lvbiI6ICI2LjI0LjEiLAorICAgICAgInJlc29s
dmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2JhYmVsLXBsdWdpbi10cmFuc2Zvcm0t
ZXMyMDE1LW1vZHVsZXMtYW1kLy0vYmFiZWwtcGx1Z2luLXRyYW5zZm9ybS1lczIwMTUtbW9kdWxl
cy1hbWQtNi4yNC4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtT3o1VUFYSTVoQzF0
R2NNQkhFdlM4QW9BMFZRPSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJyZXF1aXJlcyI6
IHsKKyAgICAgICAgImJhYmVsLXBsdWdpbi10cmFuc2Zvcm0tZXMyMDE1LW1vZHVsZXMtY29tbW9u
anMiOiAiNi4yNC4xIiwKKyAgICAgICAgImJhYmVsLXJ1bnRpbWUiOiAiNi4yNS4wIiwKKyAgICAg
ICAgImJhYmVsLXRlbXBsYXRlIjogIjYuMjUuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJiYWJl
bC1wbHVnaW4tdHJhbnNmb3JtLWVzMjAxNS1tb2R1bGVzLWNvbW1vbmpzIjogeworICAgICAgInZl
cnNpb24iOiAiNi4yNC4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5w
bWpzLm9yZy9iYWJlbC1wbHVnaW4tdHJhbnNmb3JtLWVzMjAxNS1tb2R1bGVzLWNvbW1vbmpzLy0v
YmFiZWwtcGx1Z2luLXRyYW5zZm9ybS1lczIwMTUtbW9kdWxlcy1jb21tb25qcy02LjI0LjEudGd6
IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS0wK01RdEE3MlpLTm1JaUFBbDhiVVFDbVBLLzQ9
IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgInJlcXVpcmVzIjogeworICAgICAgICAiYmFi
ZWwtcGx1Z2luLXRyYW5zZm9ybS1zdHJpY3QtbW9kZSI6ICI2LjI0LjEiLAorICAgICAgICAiYmFi
ZWwtcnVudGltZSI6ICI2LjI1LjAiLAorICAgICAgICAiYmFiZWwtdGVtcGxhdGUiOiAiNi4yNS4w
IiwKKyAgICAgICAgImJhYmVsLXR5cGVzIjogIjYuMjUuMCIKKyAgICAgIH0KKyAgICB9LAorICAg
ICJiYWJlbC1wbHVnaW4tdHJhbnNmb3JtLXN0cmljdC1tb2RlIjogeworICAgICAgInZlcnNpb24i
OiAiNi4yNC4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9y
Zy9iYWJlbC1wbHVnaW4tdHJhbnNmb3JtLXN0cmljdC1tb2RlLy0vYmFiZWwtcGx1Z2luLXRyYW5z
Zm9ybS1zdHJpY3QtbW9kZS02LjI0LjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS0x
ZnIzcWxlS1pidmxrYzllMnVCS0RHY0NCMWc9IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAg
InJlcXVpcmVzIjogeworICAgICAgICAiYmFiZWwtcnVudGltZSI6ICI2LjI1LjAiLAorICAgICAg
ICAiYmFiZWwtdHlwZXMiOiAiNi4yNS4wIgorICAgICAgfQorICAgIH0sCisgICAgImJhYmVsLXBs
dWdpbi11bmRlY2xhcmVkLXZhcmlhYmxlcy1jaGVjayI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEu
MC4yIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9iYWJl
bC1wbHVnaW4tdW5kZWNsYXJlZC12YXJpYWJsZXMtY2hlY2svLS9iYWJlbC1wbHVnaW4tdW5kZWNs
YXJlZC12YXJpYWJsZXMtY2hlY2stMS4wLjIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hh
MS1YUEdxVTUyQlAvWk9tV1FTa0s5aUNXWDJYZTQ9IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAg
ICAgInJlcXVpcmVzIjogeworICAgICAgICAibGV2ZW4iOiAiMS4wLjIiCisgICAgICB9CisgICAg
fSwKKyAgICAiYmFiZWwtcGx1Z2luLXVuZGVmaW5lZC10by12b2lkIjogeworICAgICAgInZlcnNp
b24iOiAiMS4xLjYiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMu
b3JnL2JhYmVsLXBsdWdpbi11bmRlZmluZWQtdG8tdm9pZC8tL2JhYmVsLXBsdWdpbi11bmRlZmlu
ZWQtdG8tdm9pZC0xLjEuNi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLWYxZU8rTGVO
K3VZQU00WFlRWHBoN2FCdUw0RT0iLAorICAgICAgImRldiI6IHRydWUKKyAgICB9LAorICAgICJi
YWJlbC1yZWdpc3RlciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjYuMjQuMSIsCisgICAgICAicmVz
b2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYmFiZWwtcmVnaXN0ZXIvLS9iYWJl
bC1yZWdpc3Rlci02LjI0LjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1maERoT2k5
eEJsdmZyVm9YaDdwRnZLYmUxMTg9IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgInJlcXVp
cmVzIjogeworICAgICAgICAiYmFiZWwtY29yZSI6ICI2LjI1LjAiLAorICAgICAgICAiYmFiZWwt
cnVudGltZSI6ICI2LjI1LjAiLAorICAgICAgICAiY29yZS1qcyI6ICIyLjUuMCIsCisgICAgICAg
ICJob21lLW9yLXRtcCI6ICIyLjAuMCIsCisgICAgICAgICJsb2Rhc2giOiAiNC4xNy40IiwKKyAg
ICAgICAgIm1rZGlycCI6ICIwLjUuMSIsCisgICAgICAgICJzb3VyY2UtbWFwLXN1cHBvcnQiOiAi
MC40LjE1IgorICAgICAgfSwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJiYWJl
bC1jb3JlIjogeworICAgICAgICAgICJ2ZXJzaW9uIjogIjYuMjUuMCIsCisgICAgICAgICAgInJl
c29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2JhYmVsLWNvcmUvLS9iYWJlbC1j
b3JlLTYuMjUuMC50Z3oiLAorICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1mZFFyQkdQSFF1
blZLVzNyUHNaNmt5TGExeWs9IiwKKyAgICAgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICAgICAi
cmVxdWlyZXMiOiB7CisgICAgICAgICAgICAiYmFiZWwtY29kZS1mcmFtZSI6ICI2LjIyLjAiLAor
ICAgICAgICAgICAgImJhYmVsLWdlbmVyYXRvciI6ICI2LjI1LjAiLAorICAgICAgICAgICAgImJh
YmVsLWhlbHBlcnMiOiAiNi4yNC4xIiwKKyAgICAgICAgICAgICJiYWJlbC1tZXNzYWdlcyI6ICI2
LjIzLjAiLAorICAgICAgICAgICAgImJhYmVsLXJlZ2lzdGVyIjogIjYuMjQuMSIsCisgICAgICAg
ICAgICAiYmFiZWwtcnVudGltZSI6ICI2LjI1LjAiLAorICAgICAgICAgICAgImJhYmVsLXRlbXBs
YXRlIjogIjYuMjUuMCIsCisgICAgICAgICAgICAiYmFiZWwtdHJhdmVyc2UiOiAiNi4yNS4wIiwK
KyAgICAgICAgICAgICJiYWJlbC10eXBlcyI6ICI2LjI1LjAiLAorICAgICAgICAgICAgImJhYnls
b24iOiAiNi4xNy40IiwKKyAgICAgICAgICAgICJjb252ZXJ0LXNvdXJjZS1tYXAiOiAiMS41LjAi
LAorICAgICAgICAgICAgImRlYnVnIjogIjIuNi44IiwKKyAgICAgICAgICAgICJqc29uNSI6ICIw
LjUuMSIsCisgICAgICAgICAgICAibG9kYXNoIjogIjQuMTcuNCIsCisgICAgICAgICAgICAibWlu
aW1hdGNoIjogIjMuMC40IiwKKyAgICAgICAgICAgICJwYXRoLWlzLWFic29sdXRlIjogIjEuMC4x
IiwKKyAgICAgICAgICAgICJwcml2YXRlIjogIjAuMS43IiwKKyAgICAgICAgICAgICJzbGFzaCI6
ICIxLjAuMCIsCisgICAgICAgICAgICAic291cmNlLW1hcCI6ICIwLjUuNiIKKyAgICAgICAgICB9
CisgICAgICAgIH0sCisgICAgICAgICJiYWJ5bG9uIjogeworICAgICAgICAgICJ2ZXJzaW9uIjog
IjYuMTcuNCIsCisgICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMu
b3JnL2JhYnlsb24vLS9iYWJ5bG9uLTYuMTcuNC50Z3oiLAorICAgICAgICAgICJpbnRlZ3JpdHki
OiAic2hhNTEyLWtDaGxWKzBTWGtqRTB2VW45T1o3cEJNV1JGZDh1cTNtWmU4eDFLNmpodU5jQUZB
dEVuamNoRkFxQitkWUVYS3lkK0pwVDZlcHBSUjc4UUFyNWdUc1V3PT0iLAorICAgICAgICAgICJk
ZXYiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgICJjb3JlLWpzIjogeworICAgICAgICAgICJ2
ZXJzaW9uIjogIjIuNS4wIiwKKyAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3Ry
eS5ucG1qcy5vcmcvY29yZS1qcy8tL2NvcmUtanMtMi41LjAudGd6IiwKKyAgICAgICAgICAiaW50
ZWdyaXR5IjogInNoYTEtVnB3RkNSaStaSWF6ZzNWU0FvcmdSbXR4Y0lZPSIsCisgICAgICAgICAg
ImRldiI6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgImhvbWUtb3ItdG1wIjogeworICAgICAg
ICAgICJ2ZXJzaW9uIjogIjIuMC4wIiwKKyAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9y
ZWdpc3RyeS5ucG1qcy5vcmcvaG9tZS1vci10bXAvLS9ob21lLW9yLXRtcC0yLjAuMC50Z3oiLAor
ICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS00MncvTFN5dWZYUnFoWDQ0MFkxZk1xZUlMYmc9
IiwKKyAgICAgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICAgICAicmVxdWlyZXMiOiB7CisgICAg
ICAgICAgICAib3MtaG9tZWRpciI6ICIxLjAuMiIsCisgICAgICAgICAgICAib3MtdG1wZGlyIjog
IjEuMC4yIgorICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgImpzb241IjogeworICAg
ICAgICAgICJ2ZXJzaW9uIjogIjAuNS4xIiwKKyAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6
Ly9yZWdpc3RyeS5ucG1qcy5vcmcvanNvbjUvLS9qc29uNS0wLjUuMS50Z3oiLAorICAgICAgICAg
ICJpbnRlZ3JpdHkiOiAic2hhMS1IcTNuck1BU0EwcllUaU9XZG42dG42VkpXQ0U9IiwKKyAgICAg
ICAgICAiZGV2IjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICAibG9kYXNoIjogeworICAgICAg
ICAgICJ2ZXJzaW9uIjogIjQuMTcuNCIsCisgICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8v
cmVnaXN0cnkubnBtanMub3JnL2xvZGFzaC8tL2xvZGFzaC00LjE3LjQudGd6IiwKKyAgICAgICAg
ICAiaW50ZWdyaXR5IjogInNoYTEtZUNBNlRSd3lpdUhZYmNwa1lPTnB0WDlBVmE0PSIsCisgICAg
ICAgICAgImRldiI6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgInNvdXJjZS1tYXAtc3VwcG9y
dCI6IHsKKyAgICAgICAgICAidmVyc2lvbiI6ICIwLjQuMTUiLAorICAgICAgICAgICJyZXNvbHZl
ZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zb3VyY2UtbWFwLXN1cHBvcnQvLS9zb3Vy
Y2UtbWFwLXN1cHBvcnQtMC40LjE1LnRneiIsCisgICAgICAgICAgImludGVncml0eSI6ICJzaGEx
LUF5QXQ5bHdHMHIyTWZzSTJLaGt3VnY3NDA3RT0iLAorICAgICAgICAgICJkZXYiOiB0cnVlLAor
ICAgICAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAgICAgICJzb3VyY2UtbWFwIjogIjAuNS42
IgorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0sCisgICAgImJhYmVsLXJ1
bnRpbWUiOiB7CisgICAgICAidmVyc2lvbiI6ICI2LjI1LjAiLAorICAgICAgInJlc29sdmVkIjog
Imh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2JhYmVsLXJ1bnRpbWUvLS9iYWJlbC1ydW50aW1l
LTYuMjUuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLU03bU9xbDFJSzdBYWpScW10
RGV0S3dHdXhCdz0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAicmVxdWlyZXMiOiB7Cisg
ICAgICAgICJjb3JlLWpzIjogIjIuNS4wIiwKKyAgICAgICAgInJlZ2VuZXJhdG9yLXJ1bnRpbWUi
OiAiMC4xMC41IgorICAgICAgfSwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJj
b3JlLWpzIjogeworICAgICAgICAgICJ2ZXJzaW9uIjogIjIuNS4wIiwKKyAgICAgICAgICAicmVz
b2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29yZS1qcy8tL2NvcmUtanMtMi41
LjAudGd6IiwKKyAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTEtVnB3RkNSaStaSWF6ZzNWU0Fv
cmdSbXR4Y0lZPSIsCisgICAgICAgICAgImRldiI6IHRydWUKKyAgICAgICAgfQorICAgICAgfQor
ICAgIH0sCisgICAgImJhYmVsLXRlbXBsYXRlIjogeworICAgICAgInZlcnNpb24iOiAiNi4yNS4w
IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9iYWJlbC10
ZW1wbGF0ZS8tL2JhYmVsLXRlbXBsYXRlLTYuMjUuMC50Z3oiLAorICAgICAgImludGVncml0eSI6
ICJzaGExLVpsSkJGbXQ4S3FUR0dkY2VHU2xwVlNzUXdIRT0iLAorICAgICAgImRldiI6IHRydWUs
CisgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICJiYWJlbC1ydW50aW1lIjogIjYuMjUuMCIs
CisgICAgICAgICJiYWJlbC10cmF2ZXJzZSI6ICI2LjI1LjAiLAorICAgICAgICAiYmFiZWwtdHlw
ZXMiOiAiNi4yNS4wIiwKKyAgICAgICAgImJhYnlsb24iOiAiNi4xNy40IiwKKyAgICAgICAgImxv
ZGFzaCI6ICI0LjE3LjQiCisgICAgICB9LAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAg
ICAgImJhYnlsb24iOiB7CisgICAgICAgICAgInZlcnNpb24iOiAiNi4xNy40IiwKKyAgICAgICAg
ICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYmFieWxvbi8tL2JhYnls
b24tNi4xNy40LnRneiIsCisgICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTIta0NobFYrMFNY
a2pFMHZVbjlPWjdwQk1XUkZkOHVxM21aZTh4MUs2amh1TmNBRkF0RW5qY2hGQXFCK2RZRVhLeWQr
SnBUNmVwcFJSNzhRQXI1Z1RzVXc9PSIsCisgICAgICAgICAgImRldiI6IHRydWUKKyAgICAgICAg
fSwKKyAgICAgICAgImxvZGFzaCI6IHsKKyAgICAgICAgICAidmVyc2lvbiI6ICI0LjE3LjQiLAor
ICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9sb2Rhc2gv
LS9sb2Rhc2gtNC4xNy40LnRneiIsCisgICAgICAgICAgImludGVncml0eSI6ICJzaGExLWVDQTZU
Und5aXVIWWJjcGtZT05wdFg5QVZhND0iLAorICAgICAgICAgICJkZXYiOiB0cnVlCisgICAgICAg
IH0KKyAgICAgIH0KKyAgICB9LAorICAgICJiYWJlbC10cmF2ZXJzZSI6IHsKKyAgICAgICJ2ZXJz
aW9uIjogIjYuMjUuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1q
cy5vcmcvYmFiZWwtdHJhdmVyc2UvLS9iYWJlbC10cmF2ZXJzZS02LjI1LjAudGd6IiwKKyAgICAg
ICJpbnRlZ3JpdHkiOiAic2hhMS1JbGRKZmkvTkdiaWUzQlBFeVJPQitWRWtsdkU9IiwKKyAgICAg
ICJkZXYiOiB0cnVlLAorICAgICAgInJlcXVpcmVzIjogeworICAgICAgICAiYmFiZWwtY29kZS1m
cmFtZSI6ICI2LjIyLjAiLAorICAgICAgICAiYmFiZWwtbWVzc2FnZXMiOiAiNi4yMy4wIiwKKyAg
ICAgICAgImJhYmVsLXJ1bnRpbWUiOiAiNi4yNS4wIiwKKyAgICAgICAgImJhYmVsLXR5cGVzIjog
IjYuMjUuMCIsCisgICAgICAgICJiYWJ5bG9uIjogIjYuMTcuNCIsCisgICAgICAgICJkZWJ1ZyI6
ICIyLjYuOCIsCisgICAgICAgICJnbG9iYWxzIjogIjkuMTguMCIsCisgICAgICAgICJpbnZhcmlh
bnQiOiAiMi4yLjIiLAorICAgICAgICAibG9kYXNoIjogIjQuMTcuNCIKKyAgICAgIH0sCisgICAg
ICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiYmFieWxvbiI6IHsKKyAgICAgICAgICAidmVy
c2lvbiI6ICI2LjE3LjQiLAorICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5
Lm5wbWpzLm9yZy9iYWJ5bG9uLy0vYmFieWxvbi02LjE3LjQudGd6IiwKKyAgICAgICAgICAiaW50
ZWdyaXR5IjogInNoYTUxMi1rQ2hsViswU1hrakUwdlVuOU9aN3BCTVdSRmQ4dXEzbVplOHgxSzZq
aHVOY0FGQXRFbmpjaEZBcUIrZFlFWEt5ZCtKcFQ2ZXBwUlI3OFFBcjVnVHNVdz09IiwKKyAgICAg
ICAgICAiZGV2IjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICAiZ2xvYmFscyI6IHsKKyAgICAg
ICAgICAidmVyc2lvbiI6ICI5LjE4LjAiLAorICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczov
L3JlZ2lzdHJ5Lm5wbWpzLm9yZy9nbG9iYWxzLy0vZ2xvYmFscy05LjE4LjAudGd6IiwKKyAgICAg
ICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1TMG5HM0NMRVFpWS9JTHhxdHp0VFdILzNpUlJkeUJM
dzZLTUR4bktNY2hydGJqMk9GbWVoVmgwV1VDZlczRFVySWd4L3FGckpQSUNycTRaNHNUUjlVUT09
IiwKKyAgICAgICAgICAiZGV2IjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICAibG9kYXNoIjog
eworICAgICAgICAgICJ2ZXJzaW9uIjogIjQuMTcuNCIsCisgICAgICAgICAgInJlc29sdmVkIjog
Imh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2xvZGFzaC8tL2xvZGFzaC00LjE3LjQudGd6IiwK
KyAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTEtZUNBNlRSd3lpdUhZYmNwa1lPTnB0WDlBVmE0
PSIsCisgICAgICAgICAgImRldiI6IHRydWUKKyAgICAgICAgfQorICAgICAgfQorICAgIH0sCisg
ICAgImJhYmVsLXR5cGVzIjogeworICAgICAgInZlcnNpb24iOiAiNi4yNS4wIiwKKyAgICAgICJy
ZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9iYWJlbC10eXBlcy8tL2JhYmVs
LXR5cGVzLTYuMjUuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLWNLK3lTTlZtRGww
WStCSFpISU1EdFVFMG9ZND0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAicmVxdWlyZXMi
OiB7CisgICAgICAgICJiYWJlbC1ydW50aW1lIjogIjYuMjUuMCIsCisgICAgICAgICJlc3V0aWxz
IjogIjIuMC4yIiwKKyAgICAgICAgImxvZGFzaCI6ICI0LjE3LjQiLAorICAgICAgICAidG8tZmFz
dC1wcm9wZXJ0aWVzIjogIjEuMC4zIgorICAgICAgfSwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7
CisgICAgICAgICJsb2Rhc2giOiB7CisgICAgICAgICAgInZlcnNpb24iOiAiNC4xNy40IiwKKyAg
ICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbG9kYXNoLy0v
bG9kYXNoLTQuMTcuNC50Z3oiLAorICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1lQ0E2VFJ3
eWl1SFliY3BrWU9OcHRYOUFWYTQ9IiwKKyAgICAgICAgICAiZGV2IjogdHJ1ZQorICAgICAgICB9
CisgICAgICB9CisgICAgfSwKKyAgICAiYmFieWxvbiI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjUu
OC4zOCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYmFi
eWxvbi8tL2JhYnlsb24tNS44LjM4LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtN0pz
U0N4Ry9iTTFCYzZHTDhoZm1DM21Gbi8wPSIsCisgICAgICAiZGV2IjogdHJ1ZQorICAgIH0sCisg
ICAgImJhY2tib25lIjogeworICAgICAgInZlcnNpb24iOiAiMS4zLjMiLAorICAgICAgInJlc29s
dmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2JhY2tib25lLy0vYmFja2JvbmUtMS4z
LjMudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1UTWdPcDhzV01heEhTSW5PUVBMNHZH
ZzdLWms9IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgInJlcXVpcmVzIjogeworICAgICAg
ICAidW5kZXJzY29yZSI6ICIxLjguMyIKKyAgICAgIH0KKyAgICB9LAorICAgICJiYWNrbzIiOiB7
CisgICAgICAidmVyc2lvbiI6ICIxLjAuMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9y
ZWdpc3RyeS5ucG1qcy5vcmcvYmFja28yLy0vYmFja28yLTEuMC4yLnRneiIsCisgICAgICAiaW50
ZWdyaXR5IjogInNoYTEtTWFzYXlMRXBOalJqNDFzK3UybjAzOCs2ZVVjPSIsCisgICAgICAiZGV2
IjogdHJ1ZQorICAgIH0sCisgICAgImJhbGFuY2VkLW1hdGNoIjogeworICAgICAgInZlcnNpb24i
OiAiMS4wLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3Jn
L2JhbGFuY2VkLW1hdGNoLy0vYmFsYW5jZWQtbWF0Y2gtMS4wLjAudGd6IiwKKyAgICAgICJpbnRl
Z3JpdHkiOiAic2hhMS1pYlRSbWFzcjdrbmVGazZnSzRuT1JpMXh0MmM9IiwKKyAgICAgICJkZXYi
OiB0cnVlCisgICAgfSwKKyAgICAiYmFzZTY0LWFycmF5YnVmZmVyIjogeworICAgICAgInZlcnNp
b24iOiAiMC4xLjUiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMu
b3JnL2Jhc2U2NC1hcnJheWJ1ZmZlci8tL2Jhc2U2NC1hcnJheWJ1ZmZlci0wLjEuNS50Z3oiLAor
ICAgICAgImludGVncml0eSI6ICJzaGExLWM1Sm5jWkk3V2hsMGV0Wm1xbHpVdjV4dW5PZz0iLAor
ICAgICAgImRldiI6IHRydWUKKyAgICB9LAorICAgICJiYXNlNjRpZCI6IHsKKyAgICAgICJ2ZXJz
aW9uIjogIjAuMS4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpz
Lm9yZy9iYXNlNjRpZC8tL2Jhc2U2NGlkLTAuMS4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5Ijog
InNoYTEtQXM0UDN1NE03MDlBQ0E0ZWMrZzA4TEcvemo4PSIsCisgICAgICAiZGV2IjogdHJ1ZQor
ICAgIH0sCisgICAgImJhc2ljLWF1dGgiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjEuMCIsCisg
ICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYmFzaWMtYXV0aC8t
L2Jhc2ljLWF1dGgtMS4xLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1SU0llNUNu
MzdoNVFOYjQvVVZNL0hOL1NtSVE9IiwKKyAgICAgICJkZXYiOiB0cnVlCisgICAgfSwKKyAgICAi
YmV0dGVyLWFzc2VydCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMC4yIiwKKyAgICAgICJyZXNv
bHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9iZXR0ZXItYXNzZXJ0Ly0vYmV0dGVy
LWFzc2VydC0xLjAuMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLVFJWnJuaHVlQzFX
MGdZbERFZWFQci9ycnhTST0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAicmVxdWlyZXMi
OiB7CisgICAgICAgICJjYWxsc2l0ZSI6ICIxLjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJi
aW5hcnktZXh0ZW5zaW9ucyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuOS4wIiwKKyAgICAgICJy
ZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9iaW5hcnktZXh0ZW5zaW9ucy8t
L2JpbmFyeS1leHRlbnNpb25zLTEuOS4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEt
WmxCc0ZzNXZUV2tvcGJQTmFqUEtRZWxCNDNzPSIsCisgICAgICAiZGV2IjogdHJ1ZQorICAgIH0s
CisgICAgImJpbmFyeWV4dGVuc2lvbnMiOiB7CisgICAgICAidmVyc2lvbiI6ICIyLjAuMCIsCisg
ICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYmluYXJ5ZXh0ZW5z
aW9ucy8tL2JpbmFyeWV4dGVuc2lvbnMtMi4wLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAi
c2hhMS01WmZScDZhalZZb3RISEpCb1d5WmxsNXFwQTg9IiwKKyAgICAgICJkZXYiOiB0cnVlCisg
ICAgfSwKKyAgICAiYmxhbmstb2JqZWN0IjogeworICAgICAgInZlcnNpb24iOiAiMS4wLjIiLAor
ICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2JsYW5rLW9iamVj
dC8tL2JsYW5rLW9iamVjdC0xLjAuMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLSta
QjVQNzZhakkzUUUvc3lHVUlMN0lIVjlMaz0iLAorICAgICAgImRldiI6IHRydWUKKyAgICB9LAor
ICAgICJibG9iIjogeworICAgICAgInZlcnNpb24iOiAiMC4wLjQiLAorICAgICAgInJlc29sdmVk
IjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Jsb2IvLS9ibG9iLTAuMC40LnRneiIsCisg
ICAgICAiaW50ZWdyaXR5IjogInNoYTEtdlBFd1VzcFVSajh3K2Z4K2xibWtkakNwU1NFPSIsCisg
ICAgICAiZGV2IjogdHJ1ZQorICAgIH0sCisgICAgImJsdWViaXJkIjogeworICAgICAgInZlcnNp
b24iOiAiMi4xMS4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpz
Lm9yZy9ibHVlYmlyZC8tL2JsdWViaXJkLTIuMTEuMC50Z3oiLAorICAgICAgImludGVncml0eSI6
ICJzaGExLVUwdVFNOEFpeVZlY1ZybzdQbHBjcXZ1MlVPRT0iLAorICAgICAgImRldiI6IHRydWUK
KyAgICB9LAorICAgICJib2R5IjogeworICAgICAgInZlcnNpb24iOiAiNS4xLjAiLAorICAgICAg
InJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2JvZHkvLS9ib2R5LTUuMS4w
LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtNUxvTTVCQ2thVFl5TTJkZ25zdE9aVk1T
VUdrPSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAg
ImNvbnRpbnVhYmxlLWNhY2hlIjogIjAuMy4xIiwKKyAgICAgICAgImVycm9yIjogIjcuMC4yIiwK
KyAgICAgICAgInJhdy1ib2R5IjogIjEuMS43IiwKKyAgICAgICAgInNhZmUtanNvbi1wYXJzZSI6
ICIxLjAuMSIKKyAgICAgIH0KKyAgICB9LAorICAgICJib3dlci1jb25maWciOiB7CisgICAgICAi
dmVyc2lvbiI6ICIxLjQuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5u
cG1qcy5vcmcvYm93ZXItY29uZmlnLy0vYm93ZXItY29uZmlnLTEuNC4wLnRneiIsCisgICAgICAi
aW50ZWdyaXR5IjogInNoYTEtRnNPTUVUWDRCeHdaOGxrNDFoc05qTDhZMC9FPSIsCisgICAgICAi
ZGV2IjogdHJ1ZSwKKyAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAgImdyYWNlZnVsLWZzIjog
IjQuMS4xMSIsCisgICAgICAgICJtb3V0IjogIjEuMC4wIiwKKyAgICAgICAgIm9wdGltaXN0Ijog
IjAuNi4xIiwKKyAgICAgICAgIm9zZW52IjogIjAuMS40IiwKKyAgICAgICAgInVudGlsZGlmeSI6
ICIyLjEuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJib3dlci1lbmRwb2ludC1wYXJzZXIiOiB7
CisgICAgICAidmVyc2lvbiI6ICIwLjIuMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9y
ZWdpc3RyeS5ucG1qcy5vcmcvYm93ZXItZW5kcG9pbnQtcGFyc2VyLy0vYm93ZXItZW5kcG9pbnQt
cGFyc2VyLTAuMi4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtQUxWbHJiK3JieTAx
cmQzcGQrbDVZcXk4cy9ZPSIsCisgICAgICAiZGV2IjogdHJ1ZQorICAgIH0sCisgICAgImJyYWNl
LWV4cGFuc2lvbiI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMS44IiwKKyAgICAgICJyZXNvbHZl
ZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9icmFjZS1leHBhbnNpb24vLS9icmFjZS1l
eHBhbnNpb24tMS4xLjgudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS13SHNoSEh5Vkxz
SDQ3OVVhZCs4TkhUbVFvcEk9IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgInJlcXVpcmVz
IjogeworICAgICAgICAiYmFsYW5jZWQtbWF0Y2giOiAiMS4wLjAiLAorICAgICAgICAiY29uY2F0
LW1hcCI6ICIwLjAuMSIKKyAgICAgIH0KKyAgICB9LAorICAgICJicmFjZXMiOiB7CisgICAgICAi
dmVyc2lvbiI6ICIxLjguNSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5u
cG1qcy5vcmcvYnJhY2VzLy0vYnJhY2VzLTEuOC41LnRneiIsCisgICAgICAiaW50ZWdyaXR5Ijog
InNoYTEtdW5lV0xoTGYrV25XdDJjUjZSUzNONFY3OXFjPSIsCisgICAgICAiZGV2IjogdHJ1ZSwK
KyAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAgImV4cGFuZC1yYW5nZSI6ICIxLjguMiIsCisg
ICAgICAgICJwcmVzZXJ2ZSI6ICIwLjIuMCIsCisgICAgICAgICJyZXBlYXQtZWxlbWVudCI6ICIx
LjEuMiIKKyAgICAgIH0KKyAgICB9LAorICAgICJicmVha2FibGUiOiB7CisgICAgICAidmVyc2lv
biI6ICIxLjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5v
cmcvYnJlYWthYmxlLy0vYnJlYWthYmxlLTEuMC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5Ijog
InNoYTEtZUVwNWVSV2pqcTBudXRSV3RWY3N0THVxZU1FPSIsCisgICAgICAiZGV2IjogdHJ1ZQor
ICAgIH0sCisgICAgImJyb2Njb2xpLWFzc2V0LXJldiI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIu
NS4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9icm9j
Y29saS1hc3NldC1yZXYvLS9icm9jY29saS1hc3NldC1yZXYtMi41LjAudGd6IiwKKyAgICAgICJp
bnRlZ3JpdHkiOiAic2hhMS05Zlp1ckpZcitmQ0dLR2toOE9ycXEyMEEyQms9IiwKKyAgICAgICJk
ZXYiOiB0cnVlLAorICAgICAgInJlcXVpcmVzIjogeworICAgICAgICAiYnJvY2NvbGktYXNzZXQt
cmV3cml0ZSI6ICIxLjEuMCIsCisgICAgICAgICJicm9jY29saS1maWx0ZXIiOiAiMS4yLjQiLAor
ICAgICAgICAianNvbi1zdGFibGUtc3RyaW5naWZ5IjogIjEuMC4xIiwKKyAgICAgICAgIm1hdGNo
ZXItY29sbGVjdGlvbiI6ICIxLjAuNCIsCisgICAgICAgICJyc3ZwIjogIjMuNi4yIgorICAgICAg
fQorICAgIH0sCisgICAgImJyb2Njb2xpLWFzc2V0LXJld3JpdGUiOiB7CisgICAgICAidmVyc2lv
biI6ICIxLjEuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5v
cmcvYnJvY2NvbGktYXNzZXQtcmV3cml0ZS8tL2Jyb2Njb2xpLWFzc2V0LXJld3JpdGUtMS4xLjAu
dGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1kNlhhVmhWNm94akZrUk1rWG91dnRHRi9p
REE9IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgInJlcXVpcmVzIjogeworICAgICAgICAi
YnJvY2NvbGktZmlsdGVyIjogIjEuMi40IgorICAgICAgfQorICAgIH0sCisgICAgImJyb2Njb2xp
LWJhYmVsLXRyYW5zcGlsZXIiOiB7CisgICAgICAidmVyc2lvbiI6ICI1LjcuMiIsCisgICAgICAi
cmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYnJvY2NvbGktYmFiZWwtdHJh
bnNwaWxlci8tL2Jyb2Njb2xpLWJhYmVsLXRyYW5zcGlsZXItNS43LjIudGd6IiwKKyAgICAgICJp
bnRlZ3JpdHkiOiAic2hhNTEyLXZGUSthU1I5SjgxZm0zTVhYUUdnRHhzd1lJTkhsMnA1ZHVMdlJM
Vm5wbWdQRE5kcGRzYTMwZ2gzeG5taHpSL0d3V0ZCZlVObGU3YVl4dGhsZ3ZzTjB3PT0iLAorICAg
ICAgImRldiI6IHRydWUsCisgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICJiYWJlbC1jb3Jl
IjogIjUuOC4zOCIsCisgICAgICAgICJicm9jY29saS1mdW5uZWwiOiAiMS4yLjAiLAorICAgICAg
ICAiYnJvY2NvbGktbWVyZ2UtdHJlZXMiOiAiMS4yLjQiLAorICAgICAgICAiYnJvY2NvbGktcGVy
c2lzdGVudC1maWx0ZXIiOiAiMS40LjIiLAorICAgICAgICAiY2xvbmUiOiAiMC4yLjAiLAorICAg
ICAgICAiaGFzaC1mb3ItZGVwIjogIjEuMi4wIiwKKyAgICAgICAgImhlaW1kYWxsanMtbG9nZ2Vy
IjogIjAuMS45IiwKKyAgICAgICAgImpzb24tc3RhYmxlLXN0cmluZ2lmeSI6ICIxLjAuMSIsCisg
ICAgICAgICJyc3ZwIjogIjMuNi4yIiwKKyAgICAgICAgIndvcmtlcnBvb2wiOiAiMi4yLjIiCisg
ICAgICB9LAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImNsb25lIjogeworICAg
ICAgICAgICJ2ZXJzaW9uIjogIjAuMi4wIiwKKyAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6
Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY2xvbmUvLS9jbG9uZS0wLjIuMC50Z3oiLAorICAgICAgICAg
ICJpbnRlZ3JpdHkiOiAic2hhMS14aEpxa0sxUGN0djFyTnNrUE1OM0pQNlQvQjg9IiwKKyAgICAg
ICAgICAiZGV2IjogdHJ1ZQorICAgICAgICB9CisgICAgICB9CisgICAgfSwKKyAgICAiYnJvY2Nv
bGktYnJvY2ZpbGUtbG9hZGVyIjogeworICAgICAgInZlcnNpb24iOiAiMC4xOC4wIiwKKyAgICAg
ICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9icm9jY29saS1icm9jZmls
ZS1sb2FkZXIvLS9icm9jY29saS1icm9jZmlsZS1sb2FkZXItMC4xOC4wLnRneiIsCisgICAgICAi
aW50ZWdyaXR5IjogInNoYTEtTG9ZQ0hJQmNOUC9JMHBvdnR5SFBKejZCbmtzPSIsCisgICAgICAi
ZGV2IjogdHJ1ZSwKKyAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAgImZpbmR1cC1zeW5jIjog
IjAuNC4zIgorICAgICAgfQorICAgIH0sCisgICAgImJyb2Njb2xpLWJ1aWxkZXIiOiB7CisgICAg
ICAidmVyc2lvbiI6ICIwLjE4LjgiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0
cnkubnBtanMub3JnL2Jyb2Njb2xpLWJ1aWxkZXIvLS9icm9jY29saS1idWlsZGVyLTAuMTguOC50
Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLS9sUnBUVlJNUE4vYkFRS09nQzdzcGxkSnFI
az0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICJo
ZWltZGFsbGpzIjogIjAuMi41IiwKKyAgICAgICAgInByb21pc2UtbWFwLXNlcmllcyI6ICIwLjIu
MyIsCisgICAgICAgICJxdWljay10ZW1wIjogIjAuMS44IiwKKyAgICAgICAgInJpbXJhZiI6ICIy
LjYuMSIsCisgICAgICAgICJyc3ZwIjogIjMuNi4yIiwKKyAgICAgICAgInNpbGVudC1lcnJvciI6
ICIxLjEuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJicm9jY29saS1jYWNoaW5nLXdyaXRlciI6
IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMuMC4zIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczov
L3JlZ2lzdHJ5Lm5wbWpzLm9yZy9icm9jY29saS1jYWNoaW5nLXdyaXRlci8tL2Jyb2Njb2xpLWNh
Y2hpbmctd3JpdGVyLTMuMC4zLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtQzlMSmFw
YzQxcWFyV1E4SHVqWEZGWDE5dEhZPSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJyZXF1
aXJlcyI6IHsKKyAgICAgICAgImJyb2Njb2xpLWtpdGNoZW4tc2luay1oZWxwZXJzIjogIjAuMy4x
IiwKKyAgICAgICAgImJyb2Njb2xpLXBsdWdpbiI6ICIxLjMuMCIsCisgICAgICAgICJkZWJ1ZyI6
ICIyLjYuOCIsCisgICAgICAgICJyaW1yYWYiOiAiMi42LjEiLAorICAgICAgICAicnN2cCI6ICIz
LjYuMiIsCisgICAgICAgICJ3YWxrLXN5bmMiOiAiMC4zLjIiCisgICAgICB9CisgICAgfSwKKyAg
ICAiYnJvY2NvbGktY2xlYW4tY3NzIjogeworICAgICAgInZlcnNpb24iOiAiMS4xLjAiLAorICAg
ICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Jyb2Njb2xpLWNsZWFu
LWNzcy8tL2Jyb2Njb2xpLWNsZWFuLWNzcy0xLjEuMC50Z3oiLAorICAgICAgImludGVncml0eSI6
ICJzaGExLW5iRkQyYTkrQ3VlY0p1T3NXcHV5MXlEcUdmbz0iLAorICAgICAgImRldiI6IHRydWUs
CisgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICJicm9jY29saS1wZXJzaXN0ZW50LWZpbHRl
ciI6ICIxLjQuMiIsCisgICAgICAgICJjbGVhbi1jc3MtcHJvbWlzZSI6ICIwLjEuMSIsCisgICAg
ICAgICJpbmxpbmUtc291cmNlLW1hcC1jb21tZW50IjogIjEuMC41IiwKKyAgICAgICAgImpzb24t
c3RhYmxlLXN0cmluZ2lmeSI6ICIxLjAuMSIKKyAgICAgIH0KKyAgICB9LAorICAgICJicm9jY29s
aS1jb25jYXQiOiB7CisgICAgICAidmVyc2lvbiI6ICIzLjIuMiIsCisgICAgICAicmVzb2x2ZWQi
OiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYnJvY2NvbGktY29uY2F0Ly0vYnJvY2NvbGkt
Y29uY2F0LTMuMi4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtaHYvY1VtQnV0WkM2
bjJ1SlRGN0hvQmIxdDdrPSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJyZXF1aXJlcyI6
IHsKKyAgICAgICAgImJyb2Njb2xpLWtpdGNoZW4tc2luay1oZWxwZXJzIjogIjAuMy4xIiwKKyAg
ICAgICAgImJyb2Njb2xpLXBsdWdpbiI6ICIxLjMuMCIsCisgICAgICAgICJicm9jY29saS1zdGV3
IjogIjEuNS4wIiwKKyAgICAgICAgImVuc3VyZS1wb3NpeC1wYXRoIjogIjEuMC4yIiwKKyAgICAg
ICAgImZhc3Qtc291cmNlbWFwLWNvbmNhdCI6ICIxLjIuMCIsCisgICAgICAgICJmaW5kLWluZGV4
IjogIjEuMS4wIiwKKyAgICAgICAgImZzLWV4dHJhIjogIjEuMC4wIiwKKyAgICAgICAgImZzLXRy
ZWUtZGlmZiI6ICIwLjUuNiIsCisgICAgICAgICJsb2Rhc2gubWVyZ2UiOiAiNC42LjAiLAorICAg
ICAgICAibG9kYXNoLm9taXQiOiAiNC41LjAiLAorICAgICAgICAibG9kYXNoLnVuaXEiOiAiNC41
LjAiLAorICAgICAgICAid2Fsay1zeW5jIjogIjAuMy4yIgorICAgICAgfSwKKyAgICAgICJkZXBl
bmRlbmNpZXMiOiB7CisgICAgICAgICJmcy1leHRyYSI6IHsKKyAgICAgICAgICAidmVyc2lvbiI6
ICIxLjAuMCIsCisgICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMu
b3JnL2ZzLWV4dHJhLy0vZnMtZXh0cmEtMS4wLjAudGd6IiwKKyAgICAgICAgICAiaW50ZWdyaXR5
IjogInNoYTEtelR6bDkrZkxZVVdJUDhyakdSNllkL2hZZVZBPSIsCisgICAgICAgICAgImRldiI6
IHRydWUsCisgICAgICAgICAgInJlcXVpcmVzIjogeworICAgICAgICAgICAgImdyYWNlZnVsLWZz
IjogIjQuMS4xMSIsCisgICAgICAgICAgICAianNvbmZpbGUiOiAiMi40LjAiLAorICAgICAgICAg
ICAgImtsYXciOiAiMS4zLjEiCisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAg
fSwKKyAgICAiYnJvY2NvbGktY29uZmlnLWxvYWRlciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEu
MC4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9icm9j
Y29saS1jb25maWctbG9hZGVyLy0vYnJvY2NvbGktY29uZmlnLWxvYWRlci0xLjAuMS50Z3oiLAor
ICAgICAgImludGVncml0eSI6ICJzaGE1MTItTURLWVE1MHJ4aG4rZzE3RFlkZnpmRU05RGpUdVNH
dTQyRGIzN0E4VFFIUWU4Z2VZRWNVWjRTUXFaUmd6ZEFJM2FSUU5sQTF5QkhKZk9lR21PamhMSWc9
PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAgImJy
b2Njb2xpLWNhY2hpbmctd3JpdGVyIjogIjMuMC4zIgorICAgICAgfQorICAgIH0sCisgICAgImJy
b2Njb2xpLWNvbmZpZy1yZXBsYWNlIjogeworICAgICAgInZlcnNpb24iOiAiMS4xLjIiLAorICAg
ICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Jyb2Njb2xpLWNvbmZp
Zy1yZXBsYWNlLy0vYnJvY2NvbGktY29uZmlnLXJlcGxhY2UtMS4xLjIudGd6IiwKKyAgICAgICJp
bnRlZ3JpdHkiOiAic2hhMS1icWg1MlNwYnJXTk5FVEtiVWZ4ZlNxL2FuQUE9IiwKKyAgICAgICJk
ZXYiOiB0cnVlLAorICAgICAgInJlcXVpcmVzIjogeworICAgICAgICAiYnJvY2NvbGkta2l0Y2hl
bi1zaW5rLWhlbHBlcnMiOiAiMC4zLjEiLAorICAgICAgICAiYnJvY2NvbGktcGx1Z2luIjogIjEu
My4wIiwKKyAgICAgICAgImRlYnVnIjogIjIuNi44IiwKKyAgICAgICAgImZzLWV4dHJhIjogIjAu
MjQuMCIKKyAgICAgIH0sCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiZnMtZXh0
cmEiOiB7CisgICAgICAgICAgInZlcnNpb24iOiAiMC4yNC4wIiwKKyAgICAgICAgICAicmVzb2x2
ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZnMtZXh0cmEvLS9mcy1leHRyYS0wLjI0
LjAudGd6IiwKKyAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTEtMU9RMEtwWm5YTGVFWmpPbUNa
SkpNeXRUbVZJPSIsCisgICAgICAgICAgImRldiI6IHRydWUsCisgICAgICAgICAgInJlcXVpcmVz
IjogeworICAgICAgICAgICAgImdyYWNlZnVsLWZzIjogIjQuMS4xMSIsCisgICAgICAgICAgICAi
anNvbmZpbGUiOiAiMi40LjAiLAorICAgICAgICAgICAgInBhdGgtaXMtYWJzb2x1dGUiOiAiMS4w
LjEiLAorICAgICAgICAgICAgInJpbXJhZiI6ICIyLjYuMSIKKyAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgIH0KKyAgICB9LAorICAgICJicm9jY29saS1kZWJ1ZyI6IHsKKyAgICAgICJ2ZXJz
aW9uIjogIjAuNi4zIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpz
Lm9yZy9icm9jY29saS1kZWJ1Zy8tL2Jyb2Njb2xpLWRlYnVnLTAuNi4zLnRneiIsCisgICAgICAi
aW50ZWdyaXR5IjogInNoYTUxMi1ZcXBNSDJRUEhOdEdvYXVWT2o3MTVkcURmdXJKYTlPMmFuZDFV
dXhmenpHcE0zQTltQnJYZWVMZFdwVHQ4aGovWTh1OFdhRy9MMVVCWllmZlB2VEhWdz09IiwKKyAg
ICAgICJkZXYiOiB0cnVlLAorICAgICAgInJlcXVpcmVzIjogeworICAgICAgICAiYnJvY2NvbGkt
cGx1Z2luIjogIjEuMy4wIiwKKyAgICAgICAgImZzLXRyZWUtZGlmZiI6ICIwLjUuNiIsCisgICAg
ICAgICJoZWltZGFsbGpzIjogIjAuMi41IiwKKyAgICAgICAgImhlaW1kYWxsanMtbG9nZ2VyIjog
IjAuMS45IiwKKyAgICAgICAgIm1pbmltYXRjaCI6ICIzLjAuNCIsCisgICAgICAgICJzeW1saW5r
LW9yLWNvcHkiOiAiMS4xLjgiLAorICAgICAgICAidHJlZS1zeW5jIjogIjEuMi4yIgorICAgICAg
fQorICAgIH0sCisgICAgImJyb2Njb2xpLWZpbHRlciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEu
Mi40IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9icm9j
Y29saS1maWx0ZXIvLS9icm9jY29saS1maWx0ZXItMS4yLjQudGd6IiwKKyAgICAgICJpbnRlZ3Jp
dHkiOiAic2hhMS1RSnI3bExtanB0cWZySUUwNlI0Z1gwRE1jekE9IiwKKyAgICAgICJkZXYiOiB0
cnVlLAorICAgICAgInJlcXVpcmVzIjogeworICAgICAgICAiYnJvY2NvbGkta2l0Y2hlbi1zaW5r
LWhlbHBlcnMiOiAiMC4zLjEiLAorICAgICAgICAiYnJvY2NvbGktcGx1Z2luIjogIjEuMy4wIiwK
KyAgICAgICAgImNvcHktZGVyZWZlcmVuY2UiOiAiMS4wLjAiLAorICAgICAgICAiZGVidWciOiAi
Mi42LjgiLAorICAgICAgICAibWtkaXJwIjogIjAuNS4xIiwKKyAgICAgICAgInByb21pc2UtbWFw
LXNlcmllcyI6ICIwLjIuMyIsCisgICAgICAgICJyc3ZwIjogIjMuNi4yIiwKKyAgICAgICAgInN5
bWxpbmstb3ItY29weSI6ICIxLjEuOCIsCisgICAgICAgICJ3YWxrLXN5bmMiOiAiMC4zLjIiCisg
ICAgICB9CisgICAgfSwKKyAgICAiYnJvY2NvbGktZnVubmVsIjogeworICAgICAgInZlcnNpb24i
OiAiMS4yLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3Jn
L2Jyb2Njb2xpLWZ1bm5lbC8tL2Jyb2Njb2xpLWZ1bm5lbC0xLjIuMC50Z3oiLAorICAgICAgImlu
dGVncml0eSI6ICJzaGExLXpkdzYvRi94YUZxQUkwaVAvM1RPYjdXbEVwWT0iLAorICAgICAgImRl
diI6IHRydWUsCisgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICJhcnJheS1lcXVhbCI6ICIx
LjAuMCIsCisgICAgICAgICJibGFuay1vYmplY3QiOiAiMS4wLjIiLAorICAgICAgICAiYnJvY2Nv
bGktcGx1Z2luIjogIjEuMy4wIiwKKyAgICAgICAgImRlYnVnIjogIjIuNi44IiwKKyAgICAgICAg
ImV4aXN0cy1zeW5jIjogIjAuMC40IiwKKyAgICAgICAgImZhc3Qtb3JkZXJlZC1zZXQiOiAiMS4w
LjMiLAorICAgICAgICAiZnMtdHJlZS1kaWZmIjogIjAuNS42IiwKKyAgICAgICAgImhlaW1kYWxs
anMiOiAiMC4yLjUiLAorICAgICAgICAibWluaW1hdGNoIjogIjMuMC40IiwKKyAgICAgICAgIm1r
ZGlycCI6ICIwLjUuMSIsCisgICAgICAgICJwYXRoLXBvc2l4IjogIjEuMC4wIiwKKyAgICAgICAg
InJpbXJhZiI6ICIyLjYuMSIsCisgICAgICAgICJzeW1saW5rLW9yLWNvcHkiOiAiMS4xLjgiLAor
ICAgICAgICAid2Fsay1zeW5jIjogIjAuMy4yIgorICAgICAgfQorICAgIH0sCisgICAgImJyb2Nj
b2xpLWZ1bm5lbC1yZWR1Y2VyIjogeworICAgICAgInZlcnNpb24iOiAiMS4wLjAiLAorICAgICAg
InJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Jyb2Njb2xpLWZ1bm5lbC1y
ZWR1Y2VyLy0vYnJvY2NvbGktZnVubmVsLXJlZHVjZXItMS4wLjAudGd6IiwKKyAgICAgICJpbnRl
Z3JpdHkiOiAic2hhMS1FVFpiS25oYTdKc1hseW8yMzRmdThreGN3T289IiwKKyAgICAgICJkZXYi
OiB0cnVlCisgICAgfSwKKyAgICAiYnJvY2NvbGktanNoaW50IjogeworICAgICAgInZlcnNpb24i
OiAiMi4xLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3Jn
L2Jyb2Njb2xpLWpzaGludC8tL2Jyb2Njb2xpLWpzaGludC0yLjEuMC50Z3oiLAorICAgICAgImlu
dGVncml0eSI6ICJzaGExLTJhNjJRbzUyVjlDK3YwNTVJT1ZmZ29RR0FlWT0iLAorICAgICAgImRl
diI6IHRydWUsCisgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICJicm9jY29saS1wZXJzaXN0
ZW50LWZpbHRlciI6ICIxLjQuMiIsCisgICAgICAgICJjaGFsayI6ICIwLjQuMCIsCisgICAgICAg
ICJmaW5kdXAtc3luYyI6ICIwLjMuMCIsCisgICAgICAgICJqc2hpbnQiOiAiMi45LjUiLAorICAg
ICAgICAianNvbi1zdGFibGUtc3RyaW5naWZ5IjogIjEuMC4xIiwKKyAgICAgICAgIm1rZGlycCI6
ICIwLjQuMiIKKyAgICAgIH0sCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiYW5z
aS1zdHlsZXMiOiB7CisgICAgICAgICAgInZlcnNpb24iOiAiMS4wLjAiLAorICAgICAgICAgICJy
ZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hbnNpLXN0eWxlcy8tL2Fuc2kt
c3R5bGVzLTEuMC4wLnRneiIsCisgICAgICAgICAgImludGVncml0eSI6ICJzaGExLXl4QXQ4Y1Z2
VVNQcXVMWjgxN21BSjZBbmtYZz0iLAorICAgICAgICAgICJkZXYiOiB0cnVlCisgICAgICAgIH0s
CisgICAgICAgICJjaGFsayI6IHsKKyAgICAgICAgICAidmVyc2lvbiI6ICIwLjQuMCIsCisgICAg
ICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NoYWxrLy0vY2hh
bGstMC40LjAudGd6IiwKKyAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTEtVVptajNjME1IdjRq
dkFqQnNDZXdZWGJneGs4PSIsCisgICAgICAgICAgImRldiI6IHRydWUsCisgICAgICAgICAgInJl
cXVpcmVzIjogeworICAgICAgICAgICAgImFuc2ktc3R5bGVzIjogIjEuMC4wIiwKKyAgICAgICAg
ICAgICJoYXMtY29sb3IiOiAiMC4xLjciLAorICAgICAgICAgICAgInN0cmlwLWFuc2kiOiAiMC4x
LjEiCisgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICAiZmluZHVwLXN5bmMiOiB7Cisg
ICAgICAgICAgInZlcnNpb24iOiAiMC4zLjAiLAorICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRw
czovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9maW5kdXAtc3luYy8tL2ZpbmR1cC1zeW5jLTAuMy4wLnRn
eiIsCisgICAgICAgICAgImludGVncml0eSI6ICJzaGExLU41TUtwZGdXdDNmQU5FWGhsbXpHZVFw
TUN4WT0iLAorICAgICAgICAgICJkZXYiOiB0cnVlLAorICAgICAgICAgICJyZXF1aXJlcyI6IHsK
KyAgICAgICAgICAgICJnbG9iIjogIjUuMC4xNSIKKyAgICAgICAgICB9CisgICAgICAgIH0sCisg
ICAgICAgICJta2RpcnAiOiB7CisgICAgICAgICAgInZlcnNpb24iOiAiMC40LjIiLAorICAgICAg
ICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9ta2RpcnAvLS9ta2Rp
cnAtMC40LjIudGd6IiwKKyAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTEtUW55TUdPemptTGt5
OXZabTlPSGx0M1FPZU1nPSIsCisgICAgICAgICAgImRldiI6IHRydWUsCisgICAgICAgICAgInJl
cXVpcmVzIjogeworICAgICAgICAgICAgIm1pbmltaXN0IjogIjAuMC44IgorICAgICAgICAgIH0K
KyAgICAgICAgfSwKKyAgICAgICAgInN0cmlwLWFuc2kiOiB7CisgICAgICAgICAgInZlcnNpb24i
OiAiMC4xLjEiLAorICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpz
Lm9yZy9zdHJpcC1hbnNpLy0vc3RyaXAtYW5zaS0wLjEuMS50Z3oiLAorICAgICAgICAgICJpbnRl
Z3JpdHkiOiAic2hhMS1PZWlwalFSTkZRWmdxK1NtZ0lyUGNMdDd5WkU9IiwKKyAgICAgICAgICAi
ZGV2IjogdHJ1ZQorICAgICAgICB9CisgICAgICB9CisgICAgfSwKKyAgICAiYnJvY2NvbGkta2l0
Y2hlbi1zaW5rLWhlbHBlcnMiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjMuMSIsCisgICAgICAi
cmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYnJvY2NvbGkta2l0Y2hlbi1z
aW5rLWhlbHBlcnMvLS9icm9jY29saS1raXRjaGVuLXNpbmstaGVscGVycy0wLjMuMS50Z3oiLAor
ICAgICAgImludGVncml0eSI6ICJzaGExLWQ4ZkJnWlM1WmtGajdFL080bmswUkpKdURBWT0iLAor
ICAgICAgImRldiI6IHRydWUsCisgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICJnbG9iIjog
IjUuMC4xNSIsCisgICAgICAgICJta2RpcnAiOiAiMC41LjEiCisgICAgICB9CisgICAgfSwKKyAg
ICAiYnJvY2NvbGktbWVyZ2UtdHJlZXMiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjIuNCIsCisg
ICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYnJvY2NvbGktbWVy
Z2UtdHJlZXMvLS9icm9jY29saS1tZXJnZS10cmVlcy0xLjIuNC50Z3oiLAorICAgICAgImludGVn
cml0eSI6ICJzaGExLW9BRlJtN1VHZndaWW5aR3ZvcFFrUmFMUS9iVT0iLAorICAgICAgImRldiI6
IHRydWUsCisgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICJicm9jY29saS1wbHVnaW4iOiAi
MS4zLjAiLAorICAgICAgICAiY2FuLXN5bWxpbmsiOiAiMS4wLjAiLAorICAgICAgICAiZmFzdC1v
cmRlcmVkLXNldCI6ICIxLjAuMyIsCisgICAgICAgICJmcy10cmVlLWRpZmYiOiAiMC41LjYiLAor
ICAgICAgICAiaGVpbWRhbGxqcyI6ICIwLjIuNSIsCisgICAgICAgICJoZWltZGFsbGpzLWxvZ2dl
ciI6ICIwLjEuOSIsCisgICAgICAgICJyaW1yYWYiOiAiMi42LjEiLAorICAgICAgICAic3ltbGlu
ay1vci1jb3B5IjogIjEuMS44IgorICAgICAgfQorICAgIH0sCisgICAgImJyb2Njb2xpLW1pZGRs
ZXdhcmUiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAi
aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYnJvY2NvbGktbWlkZGxld2FyZS8tL2Jyb2Njb2xp
LW1pZGRsZXdhcmUtMS4wLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1rdlRoKzVw
NUhxbUdKRnB3ZC9OY3hramFzSmM9IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgInJlcXVp
cmVzIjogeworICAgICAgICAiaGFuZGxlYmFycyI6ICI0LjAuMTAiLAorICAgICAgICAibWltZSI6
ICIxLjMuNiIKKyAgICAgIH0KKyAgICB9LAorICAgICJicm9jY29saS1wZXJzaXN0ZW50LWZpbHRl
ciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuNC4yIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRw
czovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9icm9jY29saS1wZXJzaXN0ZW50LWZpbHRlci8tL2Jyb2Nj
b2xpLXBlcnNpc3RlbnQtZmlsdGVyLTEuNC4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNo
YTEtRjY4U2VLSmY4bFZ2blgwajRSV3N6NjA2Zk9jPSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAg
ICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAgImFzeW5jLWRpc2stY2FjaGUiOiAiMS4zLjIiLAor
ICAgICAgICAiYXN5bmMtcHJvbWlzZS1xdWV1ZSI6ICIxLjAuNCIsCisgICAgICAgICJicm9jY29s
aS1wbHVnaW4iOiAiMS4zLjAiLAorICAgICAgICAiY3J5cHRvIjogIjAuMC4zIiwKKyAgICAgICAg
ImZzLXRyZWUtZGlmZiI6ICIwLjUuNiIsCisgICAgICAgICJoYXNoLWZvci1kZXAiOiAiMS4yLjAi
LAorICAgICAgICAiaGVpbWRhbGxqcyI6ICIwLjIuNSIsCisgICAgICAgICJoZWltZGFsbGpzLWxv
Z2dlciI6ICIwLjEuOSIsCisgICAgICAgICJta2RpcnAiOiAiMC41LjEiLAorICAgICAgICAicHJv
bWlzZS1tYXAtc2VyaWVzIjogIjAuMi4zIiwKKyAgICAgICAgInJpbXJhZiI6ICIyLjYuMSIsCisg
ICAgICAgICJyc3ZwIjogIjMuNi4yIiwKKyAgICAgICAgInN5bWxpbmstb3ItY29weSI6ICIxLjEu
OCIsCisgICAgICAgICJ3YWxrLXN5bmMiOiAiMC4zLjIiCisgICAgICB9CisgICAgfSwKKyAgICAi
YnJvY2NvbGktcGx1Z2luIjogeworICAgICAgInZlcnNpb24iOiAiMS4zLjAiLAorICAgICAgInJl
c29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Jyb2Njb2xpLXBsdWdpbi8tL2Jy
b2Njb2xpLXBsdWdpbi0xLjMuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLXZ1Y0Vx
T1F0b0l5MWpsRTZxa051KzM4TzhlND0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAicmVx
dWlyZXMiOiB7CisgICAgICAgICJwcm9taXNlLW1hcC1zZXJpZXMiOiAiMC4yLjMiLAorICAgICAg
ICAicXVpY2stdGVtcCI6ICIwLjEuOCIsCisgICAgICAgICJyaW1yYWYiOiAiMi42LjEiLAorICAg
ICAgICAic3ltbGluay1vci1jb3B5IjogIjEuMS44IgorICAgICAgfQorICAgIH0sCisgICAgImJy
b2Njb2xpLXNsb3ctdHJlZXMiOiB7CisgICAgICAidmVyc2lvbiI6ICIzLjAuMSIsCisgICAgICAi
cmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYnJvY2NvbGktc2xvdy10cmVl
cy8tL2Jyb2Njb2xpLXNsb3ctdHJlZXMtMy4wLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAi
c2hhMS1tL0twNHZqclB0T2o4cXZkNllqYVEzek55YlE9IiwKKyAgICAgICJkZXYiOiB0cnVlLAor
ICAgICAgInJlcXVpcmVzIjogeworICAgICAgICAiaGVpbWRhbGxqcyI6ICIwLjIuNSIKKyAgICAg
IH0KKyAgICB9LAorICAgICJicm9jY29saS1zb3VyY2UiOiB7CisgICAgICAidmVyc2lvbiI6ICIx
LjEuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYnJv
Y2NvbGktc291cmNlLy0vYnJvY2NvbGktc291cmNlLTEuMS4wLnRneiIsCisgICAgICAiaW50ZWdy
aXR5IjogInNoYTEtVlBEb0xJdHo5R1dBeTd4UFY0OExNdnlvK0FrPSIsCisgICAgICAiZGV2Ijog
dHJ1ZQorICAgIH0sCisgICAgImJyb2Njb2xpLXNyaS1oYXNoIjogeworICAgICAgInZlcnNpb24i
OiAiMi4xLjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3Jn
L2Jyb2Njb2xpLXNyaS1oYXNoLy0vYnJvY2NvbGktc3JpLWhhc2gtMi4xLjIudGd6IiwKKyAgICAg
ICJpbnRlZ3JpdHkiOiAic2hhMS12R21RWHRlamdhMHlYTURRTGUwSEV5anI4L009IiwKKyAgICAg
ICJkZXYiOiB0cnVlLAorICAgICAgInJlcXVpcmVzIjogeworICAgICAgICAiYnJvY2NvbGktY2Fj
aGluZy13cml0ZXIiOiAiMi4zLjEiLAorICAgICAgICAibWtkaXJwIjogIjAuNS4xIiwKKyAgICAg
ICAgInJzdnAiOiAiMy42LjIiLAorICAgICAgICAic3JpLXRvb2xib3giOiAiMC4yLjAiLAorICAg
ICAgICAic3ltbGluay1vci1jb3B5IjogIjEuMS44IgorICAgICAgfSwKKyAgICAgICJkZXBlbmRl
bmNpZXMiOiB7CisgICAgICAgICJicm9jY29saS1jYWNoaW5nLXdyaXRlciI6IHsKKyAgICAgICAg
ICAidmVyc2lvbiI6ICIyLjMuMSIsCisgICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVn
aXN0cnkubnBtanMub3JnL2Jyb2Njb2xpLWNhY2hpbmctd3JpdGVyLy0vYnJvY2NvbGktY2FjaGlu
Zy13cml0ZXItMi4zLjEudGd6IiwKKyAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTEtdVR6MWo1
Sms4QU1IV0dqYkJYZFBUbjhsdlFjPSIsCisgICAgICAgICAgImRldiI6IHRydWUsCisgICAgICAg
ICAgInJlcXVpcmVzIjogeworICAgICAgICAgICAgImJyb2Njb2xpLWtpdGNoZW4tc2luay1oZWxw
ZXJzIjogIjAuMi45IiwKKyAgICAgICAgICAgICJicm9jY29saS1wbHVnaW4iOiAiMS4xLjAiLAor
ICAgICAgICAgICAgImRlYnVnIjogIjIuNi44IiwKKyAgICAgICAgICAgICJyaW1yYWYiOiAiMi42
LjEiLAorICAgICAgICAgICAgInJzdnAiOiAiMy42LjIiLAorICAgICAgICAgICAgIndhbGstc3lu
YyI6ICIwLjIuNyIKKyAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgICJicm9jY29saS1r
aXRjaGVuLXNpbmstaGVscGVycyI6IHsKKyAgICAgICAgICAidmVyc2lvbiI6ICIwLjIuOSIsCisg
ICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Jyb2Njb2xp
LWtpdGNoZW4tc2luay1oZWxwZXJzLy0vYnJvY2NvbGkta2l0Y2hlbi1zaW5rLWhlbHBlcnMtMC4y
LjkudGd6IiwKKyAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTEtcGVDWWJ0alhiN1dZUzJqRDhF
VU5PcGJqYnN3PSIsCisgICAgICAgICAgImRldiI6IHRydWUsCisgICAgICAgICAgInJlcXVpcmVz
IjogeworICAgICAgICAgICAgImdsb2IiOiAiNS4wLjE1IiwKKyAgICAgICAgICAgICJta2RpcnAi
OiAiMC41LjEiCisgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICAiYnJvY2NvbGktcGx1
Z2luIjogeworICAgICAgICAgICJ2ZXJzaW9uIjogIjEuMS4wIiwKKyAgICAgICAgICAicmVzb2x2
ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYnJvY2NvbGktcGx1Z2luLy0vYnJvY2Nv
bGktcGx1Z2luLTEuMS4wLnRneiIsCisgICAgICAgICAgImludGVncml0eSI6ICJzaGExLWMrTFBv
RitPb2VQOEZDREVERDJlZmNja3Z3ST0iLAorICAgICAgICAgICJkZXYiOiB0cnVlLAorICAgICAg
ICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAgICAgICJwcm9taXNlLW1hcC1zZXJpZXMiOiAiMC4y
LjMiLAorICAgICAgICAgICAgInF1aWNrLXRlbXAiOiAiMC4xLjgiLAorICAgICAgICAgICAgInJp
bXJhZiI6ICIyLjYuMSIsCisgICAgICAgICAgICAic3ltbGluay1vci1jb3B5IjogIjEuMS44Igor
ICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgIndhbGstc3luYyI6IHsKKyAgICAgICAg
ICAidmVyc2lvbiI6ICIwLjIuNyIsCisgICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVn
aXN0cnkubnBtanMub3JnL3dhbGstc3luYy8tL3dhbGstc3luYy0wLjIuNy50Z3oiLAorICAgICAg
ICAgICJpbnRlZ3JpdHkiOiAic2hhMS10SnZrN21oblpYcnJjMmw0dFdvcDBRK2ptV2s9IiwKKyAg
ICAgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICAg
ICAiZW5zdXJlLXBvc2l4LXBhdGgiOiAiMS4wLjIiLAorICAgICAgICAgICAgIm1hdGNoZXItY29s
bGVjdGlvbiI6ICIxLjAuNCIKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9
LAorICAgICJicm9jY29saS1zdGV3IjogeworICAgICAgInZlcnNpb24iOiAiMS41LjAiLAorICAg
ICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Jyb2Njb2xpLXN0ZXcv
LS9icm9jY29saS1zdGV3LTEuNS4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtMTYr
TUdGRWR6bEVPU2RNSXBpNVpkL1JoaUR3PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJy
ZXF1aXJlcyI6IHsKKyAgICAgICAgImJyb2Njb2xpLWRlYnVnIjogIjAuNi4zIiwKKyAgICAgICAg
ImJyb2Njb2xpLWZ1bm5lbCI6ICIxLjIuMCIsCisgICAgICAgICJicm9jY29saS1tZXJnZS10cmVl
cyI6ICIxLjIuNCIsCisgICAgICAgICJicm9jY29saS1wZXJzaXN0ZW50LWZpbHRlciI6ICIxLjQu
MiIsCisgICAgICAgICJicm9jY29saS1wbHVnaW4iOiAiMS4zLjAiLAorICAgICAgICAiY2hhbGsi
OiAiMS4xLjMiLAorICAgICAgICAiZGVidWciOiAiMi42LjgiLAorICAgICAgICAiZW5zdXJlLXBv
c2l4LXBhdGgiOiAiMS4wLjIiLAorICAgICAgICAiZnMtZXh0cmEiOiAiMi4xLjIiLAorICAgICAg
ICAibWluaW1hdGNoIjogIjMuMC40IiwKKyAgICAgICAgInJlc29sdmUiOiAiMS40LjAiLAorICAg
ICAgICAicnN2cCI6ICIzLjYuMiIsCisgICAgICAgICJzeW1saW5rLW9yLWNvcHkiOiAiMS4xLjgi
LAorICAgICAgICAid2Fsay1zeW5jIjogIjAuMy4yIgorICAgICAgfSwKKyAgICAgICJkZXBlbmRl
bmNpZXMiOiB7CisgICAgICAgICJmcy1leHRyYSI6IHsKKyAgICAgICAgICAidmVyc2lvbiI6ICIy
LjEuMiIsCisgICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3Jn
L2ZzLWV4dHJhLy0vZnMtZXh0cmEtMi4xLjIudGd6IiwKKyAgICAgICAgICAiaW50ZWdyaXR5Ijog
InNoYTEtQkd4d0ZqenZtcTFHc09TbitrWi9zaTF4M2pVPSIsCisgICAgICAgICAgImRldiI6IHRy
dWUsCisgICAgICAgICAgInJlcXVpcmVzIjogeworICAgICAgICAgICAgImdyYWNlZnVsLWZzIjog
IjQuMS4xMSIsCisgICAgICAgICAgICAianNvbmZpbGUiOiAiMi40LjAiCisgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICB9CisgICAgfSwKKyAgICAiYnJvY2NvbGktdWdsaWZ5LXNvdXJjZW1h
cCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuNS4yIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRw
czovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9icm9jY29saS11Z2xpZnktc291cmNlbWFwLy0vYnJvY2Nv
bGktdWdsaWZ5LXNvdXJjZW1hcC0xLjUuMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGEx
LUJQaEtzTnRUa0RINmhvelBwV1BKa3kxUXp0cz0iLAorICAgICAgImRldiI6IHRydWUsCisgICAg
ICAicmVxdWlyZXMiOiB7CisgICAgICAgICJicm9jY29saS1wbHVnaW4iOiAiMS4zLjAiLAorICAg
ICAgICAiZGVidWciOiAiMi42LjgiLAorICAgICAgICAibG9kYXNoLm1lcmdlIjogIjQuNi4wIiwK
KyAgICAgICAgIm1hdGNoZXItY29sbGVjdGlvbiI6ICIxLjAuNCIsCisgICAgICAgICJta2RpcnAi
OiAiMC41LjEiLAorICAgICAgICAic291cmNlLW1hcC11cmwiOiAiMC4zLjAiLAorICAgICAgICAi
c3ltbGluay1vci1jb3B5IjogIjEuMS44IiwKKyAgICAgICAgInVnbGlmeS1qcyI6ICIyLjguMjki
LAorICAgICAgICAid2Fsay1zeW5jIjogIjAuMS4zIgorICAgICAgfSwKKyAgICAgICJkZXBlbmRl
bmNpZXMiOiB7CisgICAgICAgICJ3YWxrLXN5bmMiOiB7CisgICAgICAgICAgInZlcnNpb24iOiAi
MC4xLjMiLAorICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9y
Zy93YWxrLXN5bmMvLS93YWxrLXN5bmMtMC4xLjMudGd6IiwKKyAgICAgICAgICAiaW50ZWdyaXR5
IjogInNoYTEtaWdjbUdnQzlwcyt4dmlYcDhRRDYxWFZHOVlNPSIsCisgICAgICAgICAgImRldiI6
IHRydWUKKyAgICAgICAgfQorICAgICAgfQorICAgIH0sCisgICAgImJzZXIiOiB7CisgICAgICAi
dmVyc2lvbiI6ICIyLjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5u
cG1qcy5vcmcvYnNlci8tL2JzZXItMi4wLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hh
MS1tc2VOUHRYWkZZQlAySHJMRll2SGx4UjZGeGs9IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAg
ICAgInJlcXVpcmVzIjogeworICAgICAgICAibm9kZS1pbnQ2NCI6ICIwLjQuMCIKKyAgICAgIH0K
KyAgICB9LAorICAgICJidWlsdGlucyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMC4zIiwKKyAg
ICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9idWlsdGlucy8tL2J1
aWx0aW5zLTEuMC4zLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEteTVUNjYySElhV1JS
MnpaVFRoUWkrVThLN29nPSIsCisgICAgICAiZGV2IjogdHJ1ZQorICAgIH0sCisgICAgImJ5dGVz
IjogeworICAgICAgInZlcnNpb24iOiAiMi41LjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBz
Oi8vcmVnaXN0cnkubnBtanMub3JnL2J5dGVzLy0vYnl0ZXMtMi41LjAudGd6IiwKKyAgICAgICJp
bnRlZ3JpdHkiOiAic2hhMS1USlFqNmkwbExDY01RYks5NysvNXUydGl3R289IiwKKyAgICAgICJk
ZXYiOiB0cnVlCisgICAgfSwKKyAgICAiY2FsY3VsYXRlLWNhY2hlLWtleS1mb3ItdHJlZSI6IHsK
KyAgICAgICJ2ZXJzaW9uIjogIjEuMS4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3Jl
Z2lzdHJ5Lm5wbWpzLm9yZy9jYWxjdWxhdGUtY2FjaGUta2V5LWZvci10cmVlLy0vY2FsY3VsYXRl
LWNhY2hlLWtleS1mb3ItdHJlZS0xLjEuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGEx
LURENUN5Y0UwODhuZVUxakE4V2VUWW42cGR0WT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAg
ICAicmVxdWlyZXMiOiB7CisgICAgICAgICJqc29uLXN0YWJsZS1zdHJpbmdpZnkiOiAiMS4wLjEi
CisgICAgICB9CisgICAgfSwKKyAgICAiY2FsbHNpdGUiOiB7CisgICAgICAidmVyc2lvbiI6ICIx
LjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY2Fs
bHNpdGUvLS9jYWxsc2l0ZS0xLjAuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLUtB
T1k1ZFprdlhRRGkyOEpCUlUrYm9yeHZDQT0iLAorICAgICAgImRldiI6IHRydWUKKyAgICB9LAor
ICAgICJjYW1lbGNhc2UiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjIuMSIsCisgICAgICAicmVz
b2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY2FtZWxjYXNlLy0vY2FtZWxjYXNl
LTEuMi4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtbTdVd1RTNExWbW1MTEhXTENL
UHFxZHFsaWprPSIsCisgICAgICAiZGV2IjogdHJ1ZQorICAgIH0sCisgICAgImNhbi1zeW1saW5r
IjogeworICAgICAgInZlcnNpb24iOiAiMS4wLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBz
Oi8vcmVnaXN0cnkubnBtanMub3JnL2Nhbi1zeW1saW5rLy0vY2FuLXN5bWxpbmstMS4wLjAudGd6
IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1sN1lIMktoTHRzYmlLTGtDMkdUc3RaUzUwaGs9
IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgInJlcXVpcmVzIjogeworICAgICAgICAidG1w
IjogIjAuMC4yOCIKKyAgICAgIH0KKyAgICB9LAorICAgICJjYXB0dXJlLWV4aXQiOiB7CisgICAg
ICAidmVyc2lvbiI6ICIxLjIuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3Ry
eS5ucG1qcy5vcmcvY2FwdHVyZS1leGl0Ly0vY2FwdHVyZS1leGl0LTEuMi4wLnRneiIsCisgICAg
ICAiaW50ZWdyaXR5IjogInNoYTEtSEYvTVNKL1Fxd0RVOGF4NjRRY3VNWFA3cTI4PSIsCisgICAg
ICAiZGV2IjogdHJ1ZSwKKyAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAgInJzdnAiOiAiMy42
LjIiCisgICAgICB9CisgICAgfSwKKyAgICAiY2FyZGluYWwiOiB7CisgICAgICAidmVyc2lvbiI6
ICIxLjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcv
Y2FyZGluYWwvLS9jYXJkaW5hbC0xLjAuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGEx
LVVPSWNHd3FqZHluNU4zM3ZHV3Rhbk95VEx1az0iLAorICAgICAgImRldiI6IHRydWUsCisgICAg
ICAicmVxdWlyZXMiOiB7CisgICAgICAgICJhbnNpY29sb3JzIjogIjAuMi4xIiwKKyAgICAgICAg
InJlZGV5ZWQiOiAiMS4wLjEiCisgICAgICB9CisgICAgfSwKKyAgICAiY2VudGVyLWFsaWduIjog
eworICAgICAgInZlcnNpb24iOiAiMC4xLjMiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8v
cmVnaXN0cnkubnBtanMub3JnL2NlbnRlci1hbGlnbi8tL2NlbnRlci1hbGlnbi0wLjEuMy50Z3oi
LAorICAgICAgImludGVncml0eSI6ICJzaGExLXFnMHlZcHR1NlhJZ0JCSEwxRVlja0h2Q3Q2MD0i
LAorICAgICAgImRldiI6IHRydWUsCisgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICJhbGln
bi10ZXh0IjogIjAuMS40IiwKKyAgICAgICAgImxhenktY2FjaGUiOiAiMS4wLjQiCisgICAgICB9
CisgICAgfSwKKyAgICAiY2hhbGsiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjEuMyIsCisgICAg
ICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY2hhbGsvLS9jaGFsay0x
LjEuMy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLXFCRmNWZVNuQXY1TkZRcTlPSEtD
S240Si9KZz0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAicmVxdWlyZXMiOiB7CisgICAg
ICAgICJhbnNpLXN0eWxlcyI6ICIyLjIuMSIsCisgICAgICAgICJlc2NhcGUtc3RyaW5nLXJlZ2V4
cCI6ICIxLjAuNSIsCisgICAgICAgICJoYXMtYW5zaSI6ICIyLjAuMCIsCisgICAgICAgICJzdHJp
cC1hbnNpIjogIjMuMC4xIiwKKyAgICAgICAgInN1cHBvcnRzLWNvbG9yIjogIjIuMC4wIgorICAg
ICAgfQorICAgIH0sCisgICAgImNoYXJtIjogeworICAgICAgInZlcnNpb24iOiAiMS4wLjIiLAor
ICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NoYXJtLy0vY2hh
cm0tMS4wLjIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1pdDAyY1ZPbTJhV0JNeEJT
eEFrSmtkcVpYalU9IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgInJlcXVpcmVzIjogewor
ICAgICAgICAiaW5oZXJpdHMiOiAiMi4wLjMiCisgICAgICB9CisgICAgfSwKKyAgICAiY2hva2lk
YXIiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjYuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0
cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY2hva2lkYXIvLS9jaG9raWRhci0xLjYuMS50Z3oiLAor
ICAgICAgImludGVncml0eSI6ICJzaGExLUwwUkhxMTZXNVErejE0bjlrTlRITGc1TWNNST0iLAor
ICAgICAgImRldiI6IHRydWUsCisgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICJhbnltYXRj
aCI6ICIxLjMuMiIsCisgICAgICAgICJhc3luYy1lYWNoIjogIjEuMC4xIiwKKyAgICAgICAgImZz
ZXZlbnRzIjogIjEuMS4yIiwKKyAgICAgICAgImdsb2ItcGFyZW50IjogIjIuMC4wIiwKKyAgICAg
ICAgImluaGVyaXRzIjogIjIuMC4zIiwKKyAgICAgICAgImlzLWJpbmFyeS1wYXRoIjogIjEuMC4x
IiwKKyAgICAgICAgImlzLWdsb2IiOiAiMi4wLjEiLAorICAgICAgICAicGF0aC1pcy1hYnNvbHV0
ZSI6ICIxLjAuMSIsCisgICAgICAgICJyZWFkZGlycCI6ICIyLjEuMCIKKyAgICAgIH0KKyAgICB9
LAorICAgICJjbGVhbi1iYXNlLXVybCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMC4wIiwKKyAg
ICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jbGVhbi1iYXNlLXVy
bC8tL2NsZWFuLWJhc2UtdXJsLTEuMC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEt
eVFIUENpQzVja05iRHN6VkxRVm9KS1ExRzNzPSIsCisgICAgICAiZGV2IjogdHJ1ZQorICAgIH0s
CisgICAgImNsZWFuLWNzcyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMuNC4yOCIsCisgICAgICAi
cmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY2xlYW4tY3NzLy0vY2xlYW4t
Y3NzLTMuNC4yOC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLXZ4bEY2Qy9JQ1BWV2xl
YmQ2dXdCUUE3OUEvOD0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAicmVxdWlyZXMiOiB7
CisgICAgICAgICJjb21tYW5kZXIiOiAiMi44LjEiLAorICAgICAgICAic291cmNlLW1hcCI6ICIw
LjQuNCIKKyAgICAgIH0sCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiY29tbWFu
ZGVyIjogeworICAgICAgICAgICJ2ZXJzaW9uIjogIjIuOC4xIiwKKyAgICAgICAgICAicmVzb2x2
ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29tbWFuZGVyLy0vY29tbWFuZGVyLTIu
OC4xLnRneiIsCisgICAgICAgICAgImludGVncml0eSI6ICJzaGExLUJyNDJmK3Y5b01Nd3FoNHFC
eTA5eVhZa0pkUT0iLAorICAgICAgICAgICJkZXYiOiB0cnVlLAorICAgICAgICAgICJyZXF1aXJl
cyI6IHsKKyAgICAgICAgICAgICJncmFjZWZ1bC1yZWFkbGluayI6ICIxLjAuMSIKKyAgICAgICAg
ICB9CisgICAgICAgIH0sCisgICAgICAgICJzb3VyY2UtbWFwIjogeworICAgICAgICAgICJ2ZXJz
aW9uIjogIjAuNC40IiwKKyAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5u
cG1qcy5vcmcvc291cmNlLW1hcC8tL3NvdXJjZS1tYXAtMC40LjQudGd6IiwKKyAgICAgICAgICAi
aW50ZWdyaXR5IjogInNoYTEtNjZUMTJwd055Wm5lYUFNdGkwOTJGelpTQTJzPSIsCisgICAgICAg
ICAgImRldiI6IHRydWUsCisgICAgICAgICAgInJlcXVpcmVzIjogeworICAgICAgICAgICAgImFt
ZGVmaW5lIjogIjEuMC4xIgorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0s
CisgICAgImNsZWFuLWNzcy1wcm9taXNlIjogeworICAgICAgInZlcnNpb24iOiAiMC4xLjEiLAor
ICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NsZWFuLWNzcy1w
cm9taXNlLy0vY2xlYW4tY3NzLXByb21pc2UtMC4xLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHki
OiAic2hhMS1RL1BTeU4vTEsvQnhTQkpTelp0MlF6d0k3c3M9IiwKKyAgICAgICJkZXYiOiB0cnVl
LAorICAgICAgInJlcXVpcmVzIjogeworICAgICAgICAiYXJyYXktdG8tZXJyb3IiOiAiMS4xLjEi
LAorICAgICAgICAiY2xlYW4tY3NzIjogIjMuNC4yOCIsCisgICAgICAgICJwaW5raWUtcHJvbWlz
ZSI6ICIyLjAuMSIKKyAgICAgIH0KKyAgICB9LAorICAgICJjbGkiOiB7CisgICAgICAidmVyc2lv
biI6ICIxLjAuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5v
cmcvY2xpLy0vY2xpLTEuMC4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtSW9GMU5Q
Skwra2xRdzAxVExVanN2R0liakJRPSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJyZXF1
aXJlcyI6IHsKKyAgICAgICAgImV4aXQiOiAiMC4xLjIiLAorICAgICAgICAiZ2xvYiI6ICI3LjEu
MiIKKyAgICAgIH0sCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiZ2xvYiI6IHsK
KyAgICAgICAgICAidmVyc2lvbiI6ICI3LjEuMiIsCisgICAgICAgICAgInJlc29sdmVkIjogImh0
dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2dsb2IvLS9nbG9iLTcuMS4yLnRneiIsCisgICAgICAg
ICAgImludGVncml0eSI6ICJzaGE1MTItTUpUVWcxa2p1TGVRQ0orY2NFNFZwYTZrS1ZYa1BZSjJt
T0NReVV1S0xjTFFzZHJNQ3BCUFVpOHFWRTYrWXVhSmtvemVBOU51c1RBdzNoTHI4WGU1RVE9PSIs
CisgICAgICAgICAgImRldiI6IHRydWUsCisgICAgICAgICAgInJlcXVpcmVzIjogeworICAgICAg
ICAgICAgImZzLnJlYWxwYXRoIjogIjEuMC4wIiwKKyAgICAgICAgICAgICJpbmZsaWdodCI6ICIx
LjAuNiIsCisgICAgICAgICAgICAiaW5oZXJpdHMiOiAiMi4wLjMiLAorICAgICAgICAgICAgIm1p
bmltYXRjaCI6ICIzLjAuNCIsCisgICAgICAgICAgICAib25jZSI6ICIxLjQuMCIsCisgICAgICAg
ICAgICAicGF0aC1pcy1hYnNvbHV0ZSI6ICIxLjAuMSIKKyAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgIH0KKyAgICB9LAorICAgICJjbGktY3Vyc29yIjogeworICAgICAgInZlcnNpb24iOiAi
MS4wLjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Ns
aS1jdXJzb3IvLS9jbGktY3Vyc29yLTEuMC4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNo
YTEtWk5vL2ZWYWxSQkxsbDVTOVl0dzFLVjZQS1ljPSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAg
ICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAgInJlc3RvcmUtY3Vyc29yIjogIjEuMC4xIgorICAg
ICAgfQorICAgIH0sCisgICAgImNsaS1zcGlubmVycyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAu
MS4yIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jbGkt
c3Bpbm5lcnMvLS9jbGktc3Bpbm5lcnMtMC4xLjIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAi
c2hhMS11M1pOaU9HRis1NGVhaW9mR1hjakdQWUY0eHc9IiwKKyAgICAgICJkZXYiOiB0cnVlCisg
ICAgfSwKKyAgICAiY2xpLXRhYmxlIjogeworICAgICAgInZlcnNpb24iOiAiMC4zLjEiLAorICAg
ICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NsaS10YWJsZS8tL2Ns
aS10YWJsZS0wLjMuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLTlUc0ZKbXFMR2d1
VFN6MElJZWJpM0ZrVXJpTT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAicmVxdWlyZXMi
OiB7CisgICAgICAgICJjb2xvcnMiOiAiMS4wLjMiCisgICAgICB9LAorICAgICAgImRlcGVuZGVu
Y2llcyI6IHsKKyAgICAgICAgImNvbG9ycyI6IHsKKyAgICAgICAgICAidmVyc2lvbiI6ICIxLjAu
MyIsCisgICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Nv
bG9ycy8tL2NvbG9ycy0xLjAuMy50Z3oiLAorICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1C
RFAwVFlDV2dQM3JZTzBtRHhzTUppNkNwQXM9IiwKKyAgICAgICAgICAiZGV2IjogdHJ1ZQorICAg
ICAgICB9CisgICAgICB9CisgICAgfSwKKyAgICAiY2xpLXRhYmxlMiI6IHsKKyAgICAgICJ2ZXJz
aW9uIjogIjAuMi4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpz
Lm9yZy9jbGktdGFibGUyLy0vY2xpLXRhYmxlMi0wLjIuMC50Z3oiLAorICAgICAgImludGVncml0
eSI6ICJzaGExLUxSNzM4aGlnNTRiaUZGUUZZdFM5RjMvakxaYz0iLAorICAgICAgImRldiI6IHRy
dWUsCisgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICJjb2xvcnMiOiAiMS4xLjIiLAorICAg
ICAgICAibG9kYXNoIjogIjMuMTAuMSIsCisgICAgICAgICJzdHJpbmctd2lkdGgiOiAiMS4wLjIi
CisgICAgICB9CisgICAgfSwKKyAgICAiY2xpLXdpZHRoIjogeworICAgICAgInZlcnNpb24iOiAi
Mi4xLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Ns
aS13aWR0aC8tL2NsaS13aWR0aC0yLjEuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGEx
LXNqVEtJSnNwNzJiOFVZMmJtTldFZXdEdDhBbz0iLAorICAgICAgImRldiI6IHRydWUKKyAgICB9
LAorICAgICJjbGl1aSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuMS4wIiwKKyAgICAgICJyZXNv
bHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jbGl1aS8tL2NsaXVpLTIuMS4wLnRn
eiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtUzBkWFlQK0FKa3gyTERvWEdRTXVrY2Yrb05F
PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAgImNl
bnRlci1hbGlnbiI6ICIwLjEuMyIsCisgICAgICAgICJyaWdodC1hbGlnbiI6ICIwLjEuMyIsCisg
ICAgICAgICJ3b3Jkd3JhcCI6ICIwLjAuMiIKKyAgICAgIH0KKyAgICB9LAorICAgICJjbG9uZSI6
IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuMS4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczov
L3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jbG9uZS8tL2Nsb25lLTIuMS4xLnRneiIsCisgICAgICAiaW50
ZWdyaXR5IjogInNoYTEtMGhmUjZXRVJqanJKcExpN295aFZVNzlrZk5zPSIsCisgICAgICAiZGV2
IjogdHJ1ZQorICAgIH0sCisgICAgImNvZGUtcG9pbnQtYXQiOiB7CisgICAgICAidmVyc2lvbiI6
ICIxLjEuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcv
Y29kZS1wb2ludC1hdC8tL2NvZGUtcG9pbnQtYXQtMS4xLjAudGd6IiwKKyAgICAgICJpbnRlZ3Jp
dHkiOiAic2hhMS1EUWNMVFFRNlcrb3pvdkdrRGk3YlBacE16M2M9IiwKKyAgICAgICJkZXYiOiB0
cnVlCisgICAgfSwKKyAgICAiY29sb3ItY29udmVydCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEu
OS4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jb2xv
ci1jb252ZXJ0Ly0vY29sb3ItY29udmVydC0xLjkuMC50Z3oiLAorICAgICAgImludGVncml0eSI6
ICJzaGExLUdzejVmZGM1dVlPL21VMVcvc2o1V0ZOa0czbz0iLAorICAgICAgImRldiI6IHRydWUs
CisgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICJjb2xvci1uYW1lIjogIjEuMS4zIgorICAg
ICAgfQorICAgIH0sCisgICAgImNvbG9yLW5hbWUiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjEu
MyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29sb3It
bmFtZS8tL2NvbG9yLW5hbWUtMS4xLjMudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1w
OUJWaTlpY1F2ZVYzVUl5ajNRSU1jcFR2Q1U9IiwKKyAgICAgICJkZXYiOiB0cnVlCisgICAgfSwK
KyAgICAiY29sb3JzIjogeworICAgICAgInZlcnNpb24iOiAiMS4xLjIiLAorICAgICAgInJlc29s
dmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NvbG9ycy8tL2NvbG9ycy0xLjEuMi50
Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLUZvcEhBWFZyYW45Um9Temd5WHY2S01DRTdX
TT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAib3B0aW9uYWwiOiB0cnVlCisgICAgfSwK
KyAgICAiY29tbWFuZGVyIjogeworICAgICAgInZlcnNpb24iOiAiMi4xMS4wIiwKKyAgICAgICJy
ZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jb21tYW5kZXIvLS9jb21tYW5k
ZXItMi4xMS4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1iMDU1M3VZQTVZQUVH
Z3lZSUdZUk96S1E3WDVSQXFlZGtmamlaeHdpMGtMMWczYk9hQk5OWmZZa3p0L0NMMHVtZ0Q1d2M5
SmVjMkZiQjk4Q2prTVJ2UT09IiwKKyAgICAgICJkZXYiOiB0cnVlCisgICAgfSwKKyAgICAiY29t
bW9uZXIiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjEwLjgiLAorICAgICAgInJlc29sdmVkIjog
Imh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NvbW1vbmVyLy0vY29tbW9uZXItMC4xMC44LnRn
eiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtTlB3MmNzMGtPVDZMdEg1d3lxQXBPQkgwOHNV
PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAgImNv
bW1hbmRlciI6ICIyLjExLjAiLAorICAgICAgICAiZGV0ZWN0aXZlIjogIjQuNS4wIiwKKyAgICAg
ICAgImdsb2IiOiAiNS4wLjE1IiwKKyAgICAgICAgImdyYWNlZnVsLWZzIjogIjQuMS4xMSIsCisg
ICAgICAgICJpY29udi1saXRlIjogIjAuNC4xOCIsCisgICAgICAgICJta2RpcnAiOiAiMC41LjEi
LAorICAgICAgICAicHJpdmF0ZSI6ICIwLjEuNyIsCisgICAgICAgICJxIjogIjEuNS4wIiwKKyAg
ICAgICAgInJlY2FzdCI6ICIwLjExLjIzIgorICAgICAgfSwKKyAgICAgICJkZXBlbmRlbmNpZXMi
OiB7CisgICAgICAgICJlc3ByaW1hIjogeworICAgICAgICAgICJ2ZXJzaW9uIjogIjMuMS4zIiwK
KyAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXNwcmlt
YS8tL2VzcHJpbWEtMy4xLjMudGd6IiwKKyAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTEtL2Nw
Unp1WVRPSlhqeUkxVFhPU2R2L1lxUmpNPSIsCisgICAgICAgICAgImRldiI6IHRydWUKKyAgICAg
ICAgfSwKKyAgICAgICAgInJlY2FzdCI6IHsKKyAgICAgICAgICAidmVyc2lvbiI6ICIwLjExLjIz
IiwKKyAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcmVj
YXN0Ly0vcmVjYXN0LTAuMTEuMjMudGd6IiwKKyAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTEt
UlIvVEFFcXg1TitiVGt0bU4yc3FJWkVrWXRNPSIsCisgICAgICAgICAgImRldiI6IHRydWUsCisg
ICAgICAgICAgInJlcXVpcmVzIjogeworICAgICAgICAgICAgImFzdC10eXBlcyI6ICIwLjkuNiIs
CisgICAgICAgICAgICAiZXNwcmltYSI6ICIzLjEuMyIsCisgICAgICAgICAgICAicHJpdmF0ZSI6
ICIwLjEuNyIsCisgICAgICAgICAgICAic291cmNlLW1hcCI6ICIwLjUuNiIKKyAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9LAorICAgICJjb21wb25lbnQtYmluZCI6IHsKKyAg
ICAgICJ2ZXJzaW9uIjogIjEuMC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lz
dHJ5Lm5wbWpzLm9yZy9jb21wb25lbnQtYmluZC8tL2NvbXBvbmVudC1iaW5kLTEuMC4wLnRneiIs
CisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtQU1ZSXEzM05rNGw4QUFsbEd4MDZqaDV6dTlFPSIs
CisgICAgICAiZGV2IjogdHJ1ZQorICAgIH0sCisgICAgImNvbXBvbmVudC1lbWl0dGVyIjogewor
ICAgICAgInZlcnNpb24iOiAiMS4xLjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVn
aXN0cnkubnBtanMub3JnL2NvbXBvbmVudC1lbWl0dGVyLy0vY29tcG9uZW50LWVtaXR0ZXItMS4x
LjIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1LV1dVOG5VOXFtT1piU3J3alJXcFVS
Ykpyc009IiwKKyAgICAgICJkZXYiOiB0cnVlCisgICAgfSwKKyAgICAiY29tcG9uZW50LWluaGVy
aXQiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjAuMyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0
cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29tcG9uZW50LWluaGVyaXQvLS9jb21wb25lbnQtaW5o
ZXJpdC0wLjAuMy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLVpGL0VyZldMY3JaSjFj
cm1VVFZobmJKdjhVTT0iLAorICAgICAgImRldiI6IHRydWUKKyAgICB9LAorICAgICJjb21wcmVz
c2libGUiOiB7CisgICAgICAidmVyc2lvbiI6ICIyLjAuMTEiLAorICAgICAgInJlc29sdmVkIjog
Imh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NvbXByZXNzaWJsZS8tL2NvbXByZXNzaWJsZS0y
LjAuMTEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1GbkdLZGQ0b1B0am1CQVFXSmFJ
R1JZWjVmWW89IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgInJlcXVpcmVzIjogeworICAg
ICAgICAibWltZS1kYiI6ICIxLjI5LjAiCisgICAgICB9CisgICAgfSwKKyAgICAiY29tcHJlc3Np
b24iOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjcuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0
cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29tcHJlc3Npb24vLS9jb21wcmVzc2lvbi0xLjcuMC50
Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLUF3eWZHWThXUTZCWDEzYW5PT2tpMmtOekFT
MD0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICJh
Y2NlcHRzIjogIjEuMy4zIiwKKyAgICAgICAgImJ5dGVzIjogIjIuNS4wIiwKKyAgICAgICAgImNv
bXByZXNzaWJsZSI6ICIyLjAuMTEiLAorICAgICAgICAiZGVidWciOiAiMi42LjgiLAorICAgICAg
ICAib24taGVhZGVycyI6ICIxLjAuMSIsCisgICAgICAgICJzYWZlLWJ1ZmZlciI6ICI1LjEuMSIs
CisgICAgICAgICJ2YXJ5IjogIjEuMS4xIgorICAgICAgfQorICAgIH0sCisgICAgImNvbmNhdC1t
YXAiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjAuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0
cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29uY2F0LW1hcC8tL2NvbmNhdC1tYXAtMC4wLjEudGd6
IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS0yS2xyMTMvV2pmZDVPbk1EYWp1ZzFVQmRSM3M9
IiwKKyAgICAgICJkZXYiOiB0cnVlCisgICAgfSwKKyAgICAiY29uY2F0LXN0cmVhbSI6IHsKKyAg
ICAgICJ2ZXJzaW9uIjogIjEuNi4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lz
dHJ5Lm5wbWpzLm9yZy9jb25jYXQtc3RyZWFtLy0vY29uY2F0LXN0cmVhbS0xLjYuMC50Z3oiLAor
ICAgICAgImludGVncml0eSI6ICJzaGExLUNxeG1MOVVyNTRsazFWTXZhVWVFNXdFUXJQYz0iLAor
ICAgICAgImRldiI6IHRydWUsCisgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICJpbmhlcml0
cyI6ICIyLjAuMyIsCisgICAgICAgICJyZWFkYWJsZS1zdHJlYW0iOiAiMi4zLjMiLAorICAgICAg
ICAidHlwZWRhcnJheSI6ICIwLjAuNiIKKyAgICAgIH0sCisgICAgICAiZGVwZW5kZW5jaWVzIjog
eworICAgICAgICAicmVhZGFibGUtc3RyZWFtIjogeworICAgICAgICAgICJ2ZXJzaW9uIjogIjIu
My4zIiwKKyAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcv
cmVhZGFibGUtc3RyZWFtLy0vcmVhZGFibGUtc3RyZWFtLTIuMy4zLnRneiIsCisgICAgICAgICAg
ImludGVncml0eSI6ICJzaGE1MTItbStxenpjbjdLVXhFbWQxZ01iY2hGK1kyZUlVYmllVWF4a1d0
cHR5SHl3clgwckU4UUVZcVBDMDdWdXk0V20zMi94RTE2TmNkQmN0YjhTMFhlLzVJZVE9PSIsCisg
ICAgICAgICAgImRldiI6IHRydWUsCisgICAgICAgICAgInJlcXVpcmVzIjogeworICAgICAgICAg
ICAgImNvcmUtdXRpbC1pcyI6ICIxLjAuMiIsCisgICAgICAgICAgICAiaW5oZXJpdHMiOiAiMi4w
LjMiLAorICAgICAgICAgICAgImlzYXJyYXkiOiAiMS4wLjAiLAorICAgICAgICAgICAgInByb2Nl
c3MtbmV4dGljay1hcmdzIjogIjEuMC43IiwKKyAgICAgICAgICAgICJzYWZlLWJ1ZmZlciI6ICI1
LjEuMSIsCisgICAgICAgICAgICAic3RyaW5nX2RlY29kZXIiOiAiMS4wLjMiLAorICAgICAgICAg
ICAgInV0aWwtZGVwcmVjYXRlIjogIjEuMC4yIgorICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAg
ICAgICAgInN0cmluZ19kZWNvZGVyIjogeworICAgICAgICAgICJ2ZXJzaW9uIjogIjEuMC4zIiwK
KyAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3RyaW5n
X2RlY29kZXIvLS9zdHJpbmdfZGVjb2Rlci0xLjAuMy50Z3oiLAorICAgICAgICAgICJpbnRlZ3Jp
dHkiOiAic2hhNTEyLTRBSDZaNWZ6Tk5CY0grNlhETWZBL0JUdDg3c2t4cUpsTzBsQWgzRGtlcjV6
VGhjQXhHNm1LeitpR3UzMDhVS29QUFE4RGNxeC80Smh1anpsdFJhK2hRPT0iLAorICAgICAgICAg
ICJkZXYiOiB0cnVlLAorICAgICAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAgICAgICJzYWZl
LWJ1ZmZlciI6ICI1LjEuMSIKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9
LAorICAgICJjb25maWdzdG9yZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMuMS4xIiwKKyAgICAg
ICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jb25maWdzdG9yZS8tL2Nv
bmZpZ3N0b3JlLTMuMS4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi01b05rRC9M
KytsME82eEdYeGIxRVdTN1NpdnRqZkdRbFJ5eEpzWWdFMFo0OTUvTDgxZTJoNC9kM3I5Njlob1BY
dUZJdHpOT0tNdHNYZ1lHNGM3ZFl2dz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgInJl
cXVpcmVzIjogeworICAgICAgICAiZG90LXByb3AiOiAiNC4yLjAiLAorICAgICAgICAiZ3JhY2Vm
dWwtZnMiOiAiNC4xLjExIiwKKyAgICAgICAgIm1ha2UtZGlyIjogIjEuMC4wIiwKKyAgICAgICAg
InVuaXF1ZS1zdHJpbmciOiAiMS4wLjAiLAorICAgICAgICAid3JpdGUtZmlsZS1hdG9taWMiOiAi
Mi4xLjAiLAorICAgICAgICAieGRnLWJhc2VkaXIiOiAiMy4wLjAiCisgICAgICB9CisgICAgfSwK
KyAgICAiY29uc29sZS1icm93c2VyaWZ5IjogeworICAgICAgInZlcnNpb24iOiAiMS4xLjAiLAor
ICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NvbnNvbGUtYnJv
d3NlcmlmeS8tL2NvbnNvbGUtYnJvd3NlcmlmeS0xLjEuMC50Z3oiLAorICAgICAgImludGVncml0
eSI6ICJzaGExLThDUWNSWE1LbjhZeU95QnR2emp0eDBIUXV4QT0iLAorICAgICAgImRldiI6IHRy
dWUsCisgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICJkYXRlLW5vdyI6ICIwLjEuNCIKKyAg
ICAgIH0KKyAgICB9LAorICAgICJjb25zb2xlLWNvbnRyb2wtc3RyaW5ncyI6IHsKKyAgICAgICJ2
ZXJzaW9uIjogIjEuMS4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5w
bWpzLm9yZy9jb25zb2xlLWNvbnRyb2wtc3RyaW5ncy8tL2NvbnNvbGUtY29udHJvbC1zdHJpbmdz
LTEuMS4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtUFh6MFJrMjJSRzZtUkw5TE9W
Qi9tRkVBam80PSIsCisgICAgICAiZGV2IjogdHJ1ZQorICAgIH0sCisgICAgImNvbnNvbGUtdWki
OiB7CisgICAgICAidmVyc2lvbiI6ICIxLjAuMyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6
Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29uc29sZS11aS8tL2NvbnNvbGUtdWktMS4wLjMudGd6IiwK
KyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1NY1VrUmh0alFpZHArZWljRnpTVjJST1RjaHc9IiwK
KyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgInJlcXVpcmVzIjogeworICAgICAgICAiY2hhbGsi
OiAiMS4xLjMiLAorICAgICAgICAiaW5xdWlyZXIiOiAiMS4yLjMiLAorICAgICAgICAib3JhIjog
IjAuMi4zIiwKKyAgICAgICAgInRocm91Z2giOiAiMi4zLjgiCisgICAgICB9CisgICAgfSwKKyAg
ICAiY29uc29saWRhdGUiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjE0LjUiLAorICAgICAgInJl
c29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NvbnNvbGlkYXRlLy0vY29uc29s
aWRhdGUtMC4xNC41LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtV2lVRWU4ZHZjd2Nt
WjhqTFVzbUppSTlKVEdNPSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJyZXF1aXJlcyI6
IHsKKyAgICAgICAgImJsdWViaXJkIjogIjMuNS4wIgorICAgICAgfSwKKyAgICAgICJkZXBlbmRl
bmNpZXMiOiB7CisgICAgICAgICJibHVlYmlyZCI6IHsKKyAgICAgICAgICAidmVyc2lvbiI6ICIz
LjUuMCIsCisgICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3Jn
L2JsdWViaXJkLy0vYmx1ZWJpcmQtMy41LjAudGd6IiwKKyAgICAgICAgICAiaW50ZWdyaXR5Ijog
InNoYTEtZVJRZzEvVlI3cUtKZEZPb3AzWlQrV1lHMW53PSIsCisgICAgICAgICAgImRldiI6IHRy
dWUKKyAgICAgICAgfQorICAgICAgfQorICAgIH0sCisgICAgImNvbnRlbnQtZGlzcG9zaXRpb24i
OiB7CisgICAgICAidmVyc2lvbiI6ICIwLjUuMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6
Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29udGVudC1kaXNwb3NpdGlvbi8tL2NvbnRlbnQtZGlzcG9z
aXRpb24tMC41LjIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1EUGFMdWQzMThyNTVZ
Y09vVVhqTGhkdW5qTFE9IiwKKyAgICAgICJkZXYiOiB0cnVlCisgICAgfSwKKyAgICAiY29udGVu
dC10eXBlIjogeworICAgICAgInZlcnNpb24iOiAiMS4wLjIiLAorICAgICAgInJlc29sdmVkIjog
Imh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NvbnRlbnQtdHlwZS8tL2NvbnRlbnQtdHlwZS0x
LjAuMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLXQ5RVRydWVvM1NlOUlSTThUY0pT
bmZGeUh1MD0iLAorICAgICAgImRldiI6IHRydWUKKyAgICB9LAorICAgICJjb250aW51YWJsZS1j
YWNoZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuMy4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJo
dHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jb250aW51YWJsZS1jYWNoZS8tL2NvbnRpbnVhYmxl
LWNhY2hlLTAuMy4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtdlhKNmY2N1hmbkgv
T1lXc2t6VWFrU2N6clE4PSIsCisgICAgICAiZGV2IjogdHJ1ZQorICAgIH0sCisgICAgImNvbnZl
cnQtc291cmNlLW1hcCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuNS4wIiwKKyAgICAgICJyZXNv
bHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jb252ZXJ0LXNvdXJjZS1tYXAvLS9j
b252ZXJ0LXNvdXJjZS1tYXAtMS41LjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1t
czF3aFJ4dFhmM1pQWktDNWUzNVNnUC9SclU9IiwKKyAgICAgICJkZXYiOiB0cnVlCisgICAgfSwK
KyAgICAiY29va2llIjogeworICAgICAgInZlcnNpb24iOiAiMC4zLjEiLAorICAgICAgInJlc29s
dmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Nvb2tpZS8tL2Nvb2tpZS0wLjMuMS50
Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLTUrQ2grZTlEdE1pNmtseGNXcGJvQnRGb2M3
cz0iLAorICAgICAgImRldiI6IHRydWUKKyAgICB9LAorICAgICJjb29raWUtc2lnbmF0dXJlIjog
eworICAgICAgInZlcnNpb24iOiAiMS4wLjYiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8v
cmVnaXN0cnkubnBtanMub3JnL2Nvb2tpZS1zaWduYXR1cmUvLS9jb29raWUtc2lnbmF0dXJlLTEu
MC42LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtNHdPb2dyTkN6RDdveWxFNmVabVhO
TnF6cml3PSIsCisgICAgICAiZGV2IjogdHJ1ZQorICAgIH0sCisgICAgImNvcHktZGVyZWZlcmVu
Y2UiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0
cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29weS1kZXJlZmVyZW5jZS8tL2NvcHktZGVyZWZlcmVu
Y2UtMS4wLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1heE1ZWlVJUDJCdEJPNm1V
dEUwMlZURVJVclk9IiwKKyAgICAgICJkZXYiOiB0cnVlCisgICAgfSwKKyAgICAiY29yZS1qcyI6
IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMi43IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczov
L3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jb3JlLWpzLy0vY29yZS1qcy0xLjIuNy50Z3oiLAorICAgICAg
ImludGVncml0eSI6ICJzaGExLVpTS1V3VVpSMnlqNms3MHRYL0tZT2s4SXhqWT0iLAorICAgICAg
ImRldiI6IHRydWUKKyAgICB9LAorICAgICJjb3JlLW9iamVjdCI6IHsKKyAgICAgICJ2ZXJzaW9u
IjogIjMuMS40IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9y
Zy9jb3JlLW9iamVjdC8tL2NvcmUtb2JqZWN0LTMuMS40LnRneiIsCisgICAgICAiaW50ZWdyaXR5
IjogInNoYTEtYmZRQjZGZ1NTK24zVnk5TVNqVEdGUWxTMUxZPSIsCisgICAgICAiZGV2IjogdHJ1
ZSwKKyAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAgImNoYWxrIjogIjIuMS4wIgorICAgICAg
fSwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJhbnNpLXN0eWxlcyI6IHsKKyAg
ICAgICAgICAidmVyc2lvbiI6ICIzLjIuMCIsCisgICAgICAgICAgInJlc29sdmVkIjogImh0dHBz
Oi8vcmVnaXN0cnkubnBtanMub3JnL2Fuc2ktc3R5bGVzLy0vYW5zaS1zdHlsZXMtMy4yLjAudGd6
IiwKKyAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1OblNPbU1FWXRWUjJKVk1JR1R6eW5S
a2theHRpcTF4bkZCY2RRRC9Ebk5DWVBvRVBzVkpoTTk4QkR5YW9OT1FJaTdwNG9rZGkzRTI3ZU43
R1Fic1V1Zz09IiwKKyAgICAgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICAgICAicmVxdWlyZXMi
OiB7CisgICAgICAgICAgICAiY29sb3ItY29udmVydCI6ICIxLjkuMCIKKyAgICAgICAgICB9Cisg
ICAgICAgIH0sCisgICAgICAgICJjaGFsayI6IHsKKyAgICAgICAgICAidmVyc2lvbiI6ICIyLjEu
MCIsCisgICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2No
YWxrLy0vY2hhbGstMi4xLjAudGd6IiwKKyAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1M
VUhHUy9kZ2U0dWpiWE1Kcm5paFlNY0w0QW9Pd2VHbnc5VHAza1F1cXkxS3g1YzFxS2pxdk1KWjZu
VkpQTVdKdEtDVE43MlpvZ0gzb2VTTzlnOXJYUT09IiwKKyAgICAgICAgICAiZGV2IjogdHJ1ZSwK
KyAgICAgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICAgICAiYW5zaS1zdHlsZXMiOiAiMy4y
LjAiLAorICAgICAgICAgICAgImVzY2FwZS1zdHJpbmctcmVnZXhwIjogIjEuMC41IiwKKyAgICAg
ICAgICAgICJzdXBwb3J0cy1jb2xvciI6ICI0LjIuMSIKKyAgICAgICAgICB9CisgICAgICAgIH0s
CisgICAgICAgICJzdXBwb3J0cy1jb2xvciI6IHsKKyAgICAgICAgICAidmVyc2lvbiI6ICI0LjIu
MSIsCisgICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N1
cHBvcnRzLWNvbG9yLy0vc3VwcG9ydHMtY29sb3ItNC4yLjEudGd6IiwKKyAgICAgICAgICAiaW50
ZWdyaXR5IjogInNoYTUxMi1xeHpZc29iM3l2NlUreE16UHJ2MTcweThBd0dQN2k3NGcrcGJpeENm
RDZyZ3NvOEJzY0xUMnFYSXV6NlRwT2FpSlozbUZnVDVPOWx5VDluTVU0TGZhQT09IiwKKyAgICAg
ICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICAgICAi
aGFzLWZsYWciOiAiMi4wLjAiCisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAg
fSwKKyAgICAiY29yZS11dGlsLWlzIjogeworICAgICAgInZlcnNpb24iOiAiMS4wLjIiLAorICAg
ICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NvcmUtdXRpbC1pcy8t
L2NvcmUtdXRpbC1pcy0xLjAuMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLXRmMVVJ
Z3FpdkZxMWVxdHhRTWxBZFVVRHdhYz0iLAorICAgICAgImRldiI6IHRydWUKKyAgICB9LAorICAg
ICJjcm9zcy1zcGF3biI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjUuMS4wIiwKKyAgICAgICJyZXNv
bHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jcm9zcy1zcGF3bi8tL2Nyb3NzLXNw
YXduLTUuMS4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtNkwwTy91V1B6L2I0K1VV
UW9LVlV1L29qVkVrPSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJyZXF1aXJlcyI6IHsK
KyAgICAgICAgImxydS1jYWNoZSI6ICI0LjEuMSIsCisgICAgICAgICJzaGViYW5nLWNvbW1hbmQi
OiAiMS4yLjAiLAorICAgICAgICAid2hpY2giOiAiMS4zLjAiCisgICAgICB9CisgICAgfSwKKyAg
ICAiY3J5cHRvIjogeworICAgICAgInZlcnNpb24iOiAiMC4wLjMiLAorICAgICAgInJlc29sdmVk
IjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NyeXB0by8tL2NyeXB0by0wLjAuMy50Z3oi
LAorICAgICAgImludGVncml0eSI6ICJzaGExLVJ3cUJ1R3ZreGU0WHJNZ2dlaDlURmE0ZzI3QT0i
LAorICAgICAgImRldiI6IHRydWUKKyAgICB9LAorICAgICJjcnlwdG8tcmFuZG9tLXN0cmluZyI6
IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczov
L3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jcnlwdG8tcmFuZG9tLXN0cmluZy8tL2NyeXB0by1yYW5kb20t
c3RyaW5nLTEuMC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtb2pEMlQxYURFT0ZK
Z0FtVUI1RHNtVlJieW40PSIsCisgICAgICAiZGV2IjogdHJ1ZQorICAgIH0sCisgICAgImRhZy1t
YXAiOiB7CisgICAgICAidmVyc2lvbiI6ICIyLjAuMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0
cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZGFnLW1hcC8tL2RhZy1tYXAtMi4wLjIudGd6IiwKKyAg
ICAgICJpbnRlZ3JpdHkiOiAic2hhMS1seFMwY3Q2Q29ZUTk0dnVwdG9kcE9NcTBUR2c9IiwKKyAg
ICAgICJkZXYiOiB0cnVlCisgICAgfSwKKyAgICAiZGF0ZS1ub3ciOiB7CisgICAgICAidmVyc2lv
biI6ICIwLjEuNCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5v
cmcvZGF0ZS1ub3cvLS9kYXRlLW5vdy0wLjEuNC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJz
aGExLTZ2UTUvVTFJU0sxMDVjeDl2dklBWnl1ZU5Gcz0iLAorICAgICAgImRldiI6IHRydWUKKyAg
ICB9LAorICAgICJkZWJ1ZyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuNi44IiwKKyAgICAgICJy
ZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kZWJ1Zy8tL2RlYnVnLTIuNi44
LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtNXpGVEhLTHQ0bjBZZ2lKQ2ZhRjRJZGFQ
OVB3PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAg
Im1zIjogIjIuMC4wIgorICAgICAgfQorICAgIH0sCisgICAgImRlY2FtZWxpemUiOiB7CisgICAg
ICAidmVyc2lvbiI6ICIxLjIuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3Ry
eS5ucG1qcy5vcmcvZGVjYW1lbGl6ZS8tL2RlY2FtZWxpemUtMS4yLjAudGd6IiwKKyAgICAgICJp
bnRlZ3JpdHkiOiAic2hhMS05bE5ORlJTQ2FiSURVdWUrNG05UUg1b1pFcEE9IiwKKyAgICAgICJk
ZXYiOiB0cnVlCisgICAgfSwKKyAgICAiZGVmaW5lZCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEu
MC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kZWZp
bmVkLy0vZGVmaW5lZC0xLjAuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLXlZMmJ6
dmRXZEJpT0VRbHBGUkdaNDVzZnBwTT0iLAorICAgICAgImRldiI6IHRydWUKKyAgICB9LAorICAg
ICJkZWZzIjogeworICAgICAgInZlcnNpb24iOiAiMS4xLjEiLAorICAgICAgInJlc29sdmVkIjog
Imh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RlZnMvLS9kZWZzLTEuMS4xLnRneiIsCisgICAg
ICAiaW50ZWdyaXR5IjogInNoYTEtc2lZSjhzZWhHNmVqMnhGb0JjRTVzY3IvcWRJPSIsCisgICAg
ICAiZGV2IjogdHJ1ZSwKKyAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAgImFsdGVyIjogIjAu
Mi4wIiwKKyAgICAgICAgImFzdC10cmF2ZXJzZSI6ICIwLjEuMSIsCisgICAgICAgICJicmVha2Fi
bGUiOiAiMS4wLjAiLAorICAgICAgICAiZXNwcmltYS1mYiI6ICIxNTAwMS4xMDAxLjAtZGV2LWhh
cm1vbnktZmIiLAorICAgICAgICAic2ltcGxlLWZtdCI6ICIwLjEuMCIsCisgICAgICAgICJzaW1w
bGUtaXMiOiAiMC4yLjAiLAorICAgICAgICAic3RyaW5nbWFwIjogIjAuMi4yIiwKKyAgICAgICAg
InN0cmluZ3NldCI6ICIwLjIuMSIsCisgICAgICAgICJ0cnlvciI6ICIwLjEuMiIsCisgICAgICAg
ICJ5YXJncyI6ICIzLjI3LjAiCisgICAgICB9CisgICAgfSwKKyAgICAiZGVsZWdhdGVzIjogewor
ICAgICAgInZlcnNpb24iOiAiMS4wLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVn
aXN0cnkubnBtanMub3JnL2RlbGVnYXRlcy8tL2RlbGVnYXRlcy0xLjAuMC50Z3oiLAorICAgICAg
ImludGVncml0eSI6ICJzaGExLWhNYmhXYmdaQlAzS1dhRHZSTTJIRFRFbEQ1bz0iLAorICAgICAg
ImRldiI6IHRydWUKKyAgICB9LAorICAgICJkZXBkIjogeworICAgICAgInZlcnNpb24iOiAiMS4x
LjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RlcGQv
LS9kZXBkLTEuMS4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtVjRPMDRjUlo4Ryts
eWlmNWtmUFFibm94QTFrPSIsCisgICAgICAiZGV2IjogdHJ1ZQorICAgIH0sCisgICAgImRlc3Ry
b3kiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjAuNCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0
cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZGVzdHJveS8tL2Rlc3Ryb3ktMS4wLjQudGd6IiwKKyAg
ICAgICJpbnRlZ3JpdHkiOiAic2hhMS1sNGhYUkN4RWRKNUNCbUUrTjVSaUJZSnF2WUE9IiwKKyAg
ICAgICJkZXYiOiB0cnVlCisgICAgfSwKKyAgICAiZGV0ZWN0LWZpbGUiOiB7CisgICAgICAidmVy
c2lvbiI6ICIwLjEuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1q
cy5vcmcvZGV0ZWN0LWZpbGUvLS9kZXRlY3QtZmlsZS0wLjEuMC50Z3oiLAorICAgICAgImludGVn
cml0eSI6ICJzaGExLVNUWGUzOWxJaGtqZ0JyQVNsV2JwT0djUjZtTT0iLAorICAgICAgImRldiI6
IHRydWUsCisgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICJmcy1leGlzdHMtc3luYyI6ICIw
LjEuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJkZXRlY3QtaW5kZW50IjogeworICAgICAgInZl
cnNpb24iOiAiMy4wLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBt
anMub3JnL2RldGVjdC1pbmRlbnQvLS9kZXRlY3QtaW5kZW50LTMuMC4xLnRneiIsCisgICAgICAi
aW50ZWdyaXR5IjogInNoYTEtbmNYbDNienUrREpYWkxsRkd3SzhiVlFJVDNVPSIsCisgICAgICAi
ZGV2IjogdHJ1ZSwKKyAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAgImdldC1zdGRpbiI6ICI0
LjAuMSIsCisgICAgICAgICJtaW5pbWlzdCI6ICIxLjIuMCIsCisgICAgICAgICJyZXBlYXRpbmci
OiAiMS4xLjMiCisgICAgICB9LAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIm1p
bmltaXN0IjogeworICAgICAgICAgICJ2ZXJzaW9uIjogIjEuMi4wIiwKKyAgICAgICAgICAicmVz
b2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWluaW1pc3QvLS9taW5pbWlzdC0x
LjIuMC50Z3oiLAorICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1vMUFJc2c5Qk9EN3NIN2tV
OU0xZDk1b21Rb1E9IiwKKyAgICAgICAgICAiZGV2IjogdHJ1ZQorICAgICAgICB9CisgICAgICB9
CisgICAgfSwKKyAgICAiZGV0ZWN0aXZlIjogeworICAgICAgInZlcnNpb24iOiAiNC41LjAiLAor
ICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RldGVjdGl2ZS8t
L2RldGVjdGl2ZS00LjUuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLWJscU1heWJt
eDZKVXNjYTIxMGtObU95UjdkRT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAicmVxdWly
ZXMiOiB7CisgICAgICAgICJhY29ybiI6ICI0LjAuMTMiLAorICAgICAgICAiZGVmaW5lZCI6ICIx
LjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJkaWZmIjogeworICAgICAgInZlcnNpb24iOiAi
My4zLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Rp
ZmYvLS9kaWZmLTMuMy4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi13MFhadWJG
V24wQWRsc2FwajlFQVdYMEZxV2RPNHR6OGtjM1JpWWRXTGg0ay9WOFBUYjZpMFNNZ1h0MHZSTTN6
eUtuVDh0S083bVVsaWVSUUhJak1OZz09IiwKKyAgICAgICJkZXYiOiB0cnVlCisgICAgfSwKKyAg
ICAiZG9tLXNlcmlhbGl6ZXIiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjEuMCIsCisgICAgICAi
cmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZG9tLXNlcmlhbGl6ZXIvLS9k
b20tc2VyaWFsaXplci0wLjEuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLUJ6eHBk
VWJPQjRET0k3NUtLT0tUNUF2RERJST0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAicmVx
dWlyZXMiOiB7CisgICAgICAgICJkb21lbGVtZW50dHlwZSI6ICIxLjEuMyIsCisgICAgICAgICJl
bnRpdGllcyI6ICIxLjEuMSIKKyAgICAgIH0sCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAg
ICAgICAiZG9tZWxlbWVudHR5cGUiOiB7CisgICAgICAgICAgInZlcnNpb24iOiAiMS4xLjMiLAor
ICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kb21lbGVt
ZW50dHlwZS8tL2RvbWVsZW1lbnR0eXBlLTEuMS4zLnRneiIsCisgICAgICAgICAgImludGVncml0
eSI6ICJzaGExLXZTaDNQaVpDaUJyc1VWUkpKQ21jWE5naUdGcz0iLAorICAgICAgICAgICJkZXYi
OiB0cnVlCisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9LAorICAgICJkb21lbGVtZW50dHlwZSI6
IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMy4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczov
L3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kb21lbGVtZW50dHlwZS8tL2RvbWVsZW1lbnR0eXBlLTEuMy4w
LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtc1hydGd1aXJXZVV0MmNHYkYxYmcvQmh5
Qk1JPSIsCisgICAgICAiZGV2IjogdHJ1ZQorICAgIH0sCisgICAgImRvbWhhbmRsZXIiOiB7Cisg
ICAgICAidmVyc2lvbiI6ICIyLjMuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdp
c3RyeS5ucG1qcy5vcmcvZG9taGFuZGxlci8tL2RvbWhhbmRsZXItMi4zLjAudGd6IiwKKyAgICAg
ICJpbnRlZ3JpdHkiOiAic2hhMS1MZVdhQ0NMVkFuK3IvMjhETENzbG9xaXI1emc9IiwKKyAgICAg
ICJkZXYiOiB0cnVlLAorICAgICAgInJlcXVpcmVzIjogeworICAgICAgICAiZG9tZWxlbWVudHR5
cGUiOiAiMS4zLjAiCisgICAgICB9CisgICAgfSwKKyAgICAiZG9tdXRpbHMiOiB7CisgICAgICAi
dmVyc2lvbiI6ICIxLjUuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5u
cG1qcy5vcmcvZG9tdXRpbHMvLS9kb211dGlscy0xLjUuMS50Z3oiLAorICAgICAgImludGVncml0
eSI6ICJzaGExLTNOaElpaWIxWTlZUWVlU01uM3QrTWpjMmdzOD0iLAorICAgICAgImRldiI6IHRy
dWUsCisgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICJkb20tc2VyaWFsaXplciI6ICIwLjEu
MCIsCisgICAgICAgICJkb21lbGVtZW50dHlwZSI6ICIxLjMuMCIKKyAgICAgIH0KKyAgICB9LAor
ICAgICJkb3QtcHJvcCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuMi4wIiwKKyAgICAgICJyZXNv
bHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kb3QtcHJvcC8tL2RvdC1wcm9wLTQu
Mi4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi10VU1YcnhsRXhTVzZVMkVYaWlL
R1NCVmRZZ3RWOHFsSEwrQzEwVHNXNFBVUlkvaWMrZWF5c25Ta3dCNGtBL21CbEN5eS9JS0RKK0xj
M3diV2VhWHR1UT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgInJlcXVpcmVzIjogewor
ICAgICAgICAiaXMtb2JqIjogIjEuMC4xIgorICAgICAgfQorICAgIH0sCisgICAgImVkaXRpb25z
IjogeworICAgICAgInZlcnNpb24iOiAiMS4zLjMiLAorICAgICAgInJlc29sdmVkIjogImh0dHBz
Oi8vcmVnaXN0cnkubnBtanMub3JnL2VkaXRpb25zLy0vZWRpdGlvbnMtMS4zLjMudGd6IiwKKyAg
ICAgICJpbnRlZ3JpdHkiOiAic2hhMS1DUWNRRzkyaUQ2dzh2ak5NSjh2UWFJM0ptbHM9IiwKKyAg
ICAgICJkZXYiOiB0cnVlCisgICAgfSwKKyAgICAiZWUtZmlyc3QiOiB7CisgICAgICAidmVyc2lv
biI6ICIxLjEuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5v
cmcvZWUtZmlyc3QvLS9lZS1maXJzdC0xLjEuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJz
aGExLVdReGhGV3NLNHZUd0pWY3lvVml5WnJ4V3NoMD0iLAorICAgICAgImRldiI6IHRydWUKKyAg
ICB9LAorICAgICJlbWJlci1hamF4IjogeworICAgICAgInZlcnNpb24iOiAiMi41LjYiLAorICAg
ICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VtYmVyLWFqYXgvLS9l
bWJlci1hamF4LTIuNS42LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtcDE5MFBNOGJs
ZWw1cGMrV0FUczl1byttSmVRPSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJyZXF1aXJl
cyI6IHsKKyAgICAgICAgImVtYmVyLWNsaS1iYWJlbCI6ICI1LjIuNCIKKyAgICAgIH0KKyAgICB9
LAorICAgICJlbWJlci1jbGkiOiB7CisgICAgICAidmVyc2lvbiI6ICIyLjE0LjIiLAorICAgICAg
InJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VtYmVyLWNsaS8tL2VtYmVy
LWNsaS0yLjE0LjIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS04c2pIWFVoczVzeHJm
L3ZDTHI3NHN5dXlRcmM9IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgInJlcXVpcmVzIjog
eworICAgICAgICAiYW1kLW5hbWUtcmVzb2x2ZXIiOiAiMC4wLjYiLAorICAgICAgICAiYmFiZWwt
cGx1Z2luLXRyYW5zZm9ybS1lczIwMTUtbW9kdWxlcy1hbWQiOiAiNi4yNC4xIiwKKyAgICAgICAg
ImJvd2VyLWNvbmZpZyI6ICIxLjQuMCIsCisgICAgICAgICJib3dlci1lbmRwb2ludC1wYXJzZXIi
OiAiMC4yLjIiLAorICAgICAgICAiYnJvY2NvbGktYmFiZWwtdHJhbnNwaWxlciI6ICI2LjEuMiIs
CisgICAgICAgICJicm9jY29saS1icm9jZmlsZS1sb2FkZXIiOiAiMC4xOC4wIiwKKyAgICAgICAg
ImJyb2Njb2xpLWJ1aWxkZXIiOiAiMC4xOC44IiwKKyAgICAgICAgImJyb2Njb2xpLWNvbmNhdCI6
ICIzLjIuMiIsCisgICAgICAgICJicm9jY29saS1jb25maWctbG9hZGVyIjogIjEuMC4xIiwKKyAg
ICAgICAgImJyb2Njb2xpLWNvbmZpZy1yZXBsYWNlIjogIjEuMS4yIiwKKyAgICAgICAgImJyb2Nj
b2xpLWZ1bm5lbCI6ICIxLjIuMCIsCisgICAgICAgICJicm9jY29saS1mdW5uZWwtcmVkdWNlciI6
ICIxLjAuMCIsCisgICAgICAgICJicm9jY29saS1tZXJnZS10cmVlcyI6ICIyLjAuMCIsCisgICAg
ICAgICJicm9jY29saS1taWRkbGV3YXJlIjogIjEuMC4wIiwKKyAgICAgICAgImJyb2Njb2xpLXNv
dXJjZSI6ICIxLjEuMCIsCisgICAgICAgICJicm9jY29saS1zdGV3IjogIjEuNS4wIiwKKyAgICAg
ICAgImNhbGN1bGF0ZS1jYWNoZS1rZXktZm9yLXRyZWUiOiAiMS4xLjAiLAorICAgICAgICAiY2Fw
dHVyZS1leGl0IjogIjEuMi4wIiwKKyAgICAgICAgImNoYWxrIjogIjEuMS4zIiwKKyAgICAgICAg
ImNsZWFuLWJhc2UtdXJsIjogIjEuMC4wIiwKKyAgICAgICAgImNvbXByZXNzaW9uIjogIjEuNy4w
IiwKKyAgICAgICAgImNvbmZpZ3N0b3JlIjogIjMuMS4xIiwKKyAgICAgICAgImNvbnNvbGUtdWki
OiAiMS4wLjMiLAorICAgICAgICAiY29yZS1vYmplY3QiOiAiMy4xLjQiLAorICAgICAgICAiZGFn
LW1hcCI6ICIyLjAuMiIsCisgICAgICAgICJkaWZmIjogIjMuMy4wIiwKKyAgICAgICAgImVtYmVy
LWNsaS1icm9jY29saS1zYW5lLXdhdGNoZXIiOiAiMi4wLjQiLAorICAgICAgICAiZW1iZXItY2xp
LWdldC1jb21wb25lbnQtcGF0aC1vcHRpb24iOiAiMS4wLjAiLAorICAgICAgICAiZW1iZXItY2xp
LWlzLXBhY2thZ2UtbWlzc2luZyI6ICIxLjAuMCIsCisgICAgICAgICJlbWJlci1jbGktbGVnYWN5
LWJsdWVwcmludHMiOiAiMC4xLjUiLAorICAgICAgICAiZW1iZXItY2xpLWxvZGFzaC1zdWJzZXQi
OiAiMS4wLjEyIiwKKyAgICAgICAgImVtYmVyLWNsaS1ub3JtYWxpemUtZW50aXR5LW5hbWUiOiAi
MS4wLjAiLAorICAgICAgICAiZW1iZXItY2xpLXByZXByb2Nlc3MtcmVnaXN0cnkiOiAiMy4xLjEi
LAorICAgICAgICAiZW1iZXItY2xpLXN0cmluZy11dGlscyI6ICIxLjEuMCIsCisgICAgICAgICJl
bWJlci10cnkiOiAiMC4yLjE2IiwKKyAgICAgICAgImVuc3VyZS1wb3NpeC1wYXRoIjogIjEuMC4y
IiwKKyAgICAgICAgImVzY2FwZS1zdHJpbmctcmVnZXhwIjogIjEuMC41IiwKKyAgICAgICAgImV4
ZWNhIjogIjAuNi4zIiwKKyAgICAgICAgImV4aXN0cy1zeW5jIjogIjAuMC40IiwKKyAgICAgICAg
ImV4aXQiOiAiMC4xLjIiLAorICAgICAgICAiZXhwcmVzcyI6ICI0LjE1LjQiLAorICAgICAgICAi
ZmlsZXNpemUiOiAiMy41LjEwIiwKKyAgICAgICAgImZpbmQtdXAiOiAiMi4xLjAiLAorICAgICAg
ICAiZnMtZXh0cmEiOiAiMy4wLjEiLAorICAgICAgICAiZnMtdHJlZS1kaWZmIjogIjAuNS42IiwK
KyAgICAgICAgImdldC1jYWxsZXItZmlsZSI6ICIxLjAuMiIsCisgICAgICAgICJnaXQtcmVwby1p
bmZvIjogIjEuNC4xIiwKKyAgICAgICAgImdsb2IiOiAiNy4xLjEiLAorICAgICAgICAiaGVpbWRh
bGxqcyI6ICIwLjIuNSIsCisgICAgICAgICJoZWltZGFsbGpzLWZzLW1vbml0b3IiOiAiMC4xLjAi
LAorICAgICAgICAiaGVpbWRhbGxqcy1ncmFwaCI6ICIwLjMuMyIsCisgICAgICAgICJoZWltZGFs
bGpzLWxvZ2dlciI6ICIwLjEuOSIsCisgICAgICAgICJodHRwLXByb3h5IjogIjEuMTYuMiIsCisg
ICAgICAgICJpbmZsZWN0aW9uIjogIjEuMTIuMCIsCisgICAgICAgICJpcy1naXQtdXJsIjogIjAu
Mi4zIiwKKyAgICAgICAgImlzYmluYXJ5ZmlsZSI6ICIzLjAuMiIsCisgICAgICAgICJqcy15YW1s
IjogIjMuOS4xIiwKKyAgICAgICAgImpzb24tc3RhYmxlLXN0cmluZ2lmeSI6ICIxLjAuMSIsCisg
ICAgICAgICJsZWVrIjogIjAuMC4yNCIsCisgICAgICAgICJsb2Rhc2gudGVtcGxhdGUiOiAiNC40
LjAiLAorICAgICAgICAibWFya2Rvd24taXQiOiAiOC4zLjIiLAorICAgICAgICAibWFya2Rvd24t
aXQtdGVybWluYWwiOiAiMC4xLjAiLAorICAgICAgICAibWluaW1hdGNoIjogIjMuMC40IiwKKyAg
ICAgICAgIm1vcmdhbiI6ICIxLjguMiIsCisgICAgICAgICJub2RlLW1vZHVsZXMtcGF0aCI6ICIx
LjAuMSIsCisgICAgICAgICJub3B0IjogIjMuMC42IiwKKyAgICAgICAgIm5wbS1wYWNrYWdlLWFy
ZyI6ICI0LjIuMSIsCisgICAgICAgICJwb3J0ZmluZGVyIjogIjEuMC4xMyIsCisgICAgICAgICJw
cm9taXNlLW1hcC1zZXJpZXMiOiAiMC4yLjMiLAorICAgICAgICAicXVpY2stdGVtcCI6ICIwLjEu
OCIsCisgICAgICAgICJyZXNvbHZlIjogIjEuNC4wIiwKKyAgICAgICAgInJzdnAiOiAiMy42LjIi
LAorICAgICAgICAic2FuZSI6ICIxLjcuMCIsCisgICAgICAgICJzZW12ZXIiOiAiNS40LjEiLAor
ICAgICAgICAic2lsZW50LWVycm9yIjogIjEuMS4wIiwKKyAgICAgICAgInNvcnQtcGFja2FnZS1q
c29uIjogIjEuNy4wIiwKKyAgICAgICAgInN5bWxpbmstb3ItY29weSI6ICIxLjEuOCIsCisgICAg
ICAgICJ0ZW1wIjogIjAuOC4zIiwKKyAgICAgICAgInRlc3RlbSI6ICIxLjE4LjEiLAorICAgICAg
ICAidGlueS1sciI6ICIxLjAuNSIsCisgICAgICAgICJ0cmVlLXN5bmMiOiAiMS4yLjIiLAorICAg
ICAgICAidXVpZCI6ICIzLjEuMCIsCisgICAgICAgICJ2YWxpZGF0ZS1ucG0tcGFja2FnZS1uYW1l
IjogIjMuMC4wIiwKKyAgICAgICAgIndhbGstc3luYyI6ICIwLjMuMiIsCisgICAgICAgICJ5YW0i
OiAiMC4wLjIyIgorICAgICAgfSwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJi
YWJlbC1jb3JlIjogeworICAgICAgICAgICJ2ZXJzaW9uIjogIjYuMjUuMCIsCisgICAgICAgICAg
InJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2JhYmVsLWNvcmUvLS9iYWJl
bC1jb3JlLTYuMjUuMC50Z3oiLAorICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1mZFFyQkdQ
SFF1blZLVzNyUHNaNmt5TGExeWs9IiwKKyAgICAgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICAg
ICAicmVxdWlyZXMiOiB7CisgICAgICAgICAgICAiYmFiZWwtY29kZS1mcmFtZSI6ICI2LjIyLjAi
LAorICAgICAgICAgICAgImJhYmVsLWdlbmVyYXRvciI6ICI2LjI1LjAiLAorICAgICAgICAgICAg
ImJhYmVsLWhlbHBlcnMiOiAiNi4yNC4xIiwKKyAgICAgICAgICAgICJiYWJlbC1tZXNzYWdlcyI6
ICI2LjIzLjAiLAorICAgICAgICAgICAgImJhYmVsLXJlZ2lzdGVyIjogIjYuMjQuMSIsCisgICAg
ICAgICAgICAiYmFiZWwtcnVudGltZSI6ICI2LjI1LjAiLAorICAgICAgICAgICAgImJhYmVsLXRl
bXBsYXRlIjogIjYuMjUuMCIsCisgICAgICAgICAgICAiYmFiZWwtdHJhdmVyc2UiOiAiNi4yNS4w
IiwKKyAgICAgICAgICAgICJiYWJlbC10eXBlcyI6ICI2LjI1LjAiLAorICAgICAgICAgICAgImJh
Ynlsb24iOiAiNi4xNy40IiwKKyAgICAgICAgICAgICJjb252ZXJ0LXNvdXJjZS1tYXAiOiAiMS41
LjAiLAorICAgICAgICAgICAgImRlYnVnIjogIjIuNi44IiwKKyAgICAgICAgICAgICJqc29uNSI6
ICIwLjUuMSIsCisgICAgICAgICAgICAibG9kYXNoIjogIjQuMTcuNCIsCisgICAgICAgICAgICAi
bWluaW1hdGNoIjogIjMuMC40IiwKKyAgICAgICAgICAgICJwYXRoLWlzLWFic29sdXRlIjogIjEu
MC4xIiwKKyAgICAgICAgICAgICJwcml2YXRlIjogIjAuMS43IiwKKyAgICAgICAgICAgICJzbGFz
aCI6ICIxLjAuMCIsCisgICAgICAgICAgICAic291cmNlLW1hcCI6ICIwLjUuNiIKKyAgICAgICAg
ICB9CisgICAgICAgIH0sCisgICAgICAgICJiYWJ5bG9uIjogeworICAgICAgICAgICJ2ZXJzaW9u
IjogIjYuMTcuNCIsCisgICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBt
anMub3JnL2JhYnlsb24vLS9iYWJ5bG9uLTYuMTcuNC50Z3oiLAorICAgICAgICAgICJpbnRlZ3Jp
dHkiOiAic2hhNTEyLWtDaGxWKzBTWGtqRTB2VW45T1o3cEJNV1JGZDh1cTNtWmU4eDFLNmpodU5j
QUZBdEVuamNoRkFxQitkWUVYS3lkK0pwVDZlcHBSUjc4UUFyNWdUc1V3PT0iLAorICAgICAgICAg
ICJkZXYiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgICJicm9jY29saS1iYWJlbC10cmFuc3Bp
bGVyIjogeworICAgICAgICAgICJ2ZXJzaW9uIjogIjYuMS4yIiwKKyAgICAgICAgICAicmVzb2x2
ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYnJvY2NvbGktYmFiZWwtdHJhbnNwaWxl
ci8tL2Jyb2Njb2xpLWJhYmVsLXRyYW5zcGlsZXItNi4xLjIudGd6IiwKKyAgICAgICAgICAiaW50
ZWdyaXR5IjogInNoYTUxMi1vMU9VZTVSWjVFUDUrUUlDRW1STnZXbGhNdkljaU1pc1ZBQ0h1NnFV
UHQ2ZEUwUTBVbkk1bFVwV1RtdVhnL1grUXV6bnFEL3MxUEFwSXBhaHYvUU1adz09IiwKKyAgICAg
ICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICAgICAi
YmFiZWwtY29yZSI6ICI2LjI1LjAiLAorICAgICAgICAgICAgImJyb2Njb2xpLWZ1bm5lbCI6ICIx
LjIuMCIsCisgICAgICAgICAgICAiYnJvY2NvbGktbWVyZ2UtdHJlZXMiOiAiMS4yLjQiLAorICAg
ICAgICAgICAgImJyb2Njb2xpLXBlcnNpc3RlbnQtZmlsdGVyIjogIjEuNC4yIiwKKyAgICAgICAg
ICAgICJjbG9uZSI6ICIyLjEuMSIsCisgICAgICAgICAgICAiaGFzaC1mb3ItZGVwIjogIjEuMi4w
IiwKKyAgICAgICAgICAgICJoZWltZGFsbGpzLWxvZ2dlciI6ICIwLjEuOSIsCisgICAgICAgICAg
ICAianNvbi1zdGFibGUtc3RyaW5naWZ5IjogIjEuMC4xIiwKKyAgICAgICAgICAgICJyc3ZwIjog
IjMuNi4yIiwKKyAgICAgICAgICAgICJ3b3JrZXJwb29sIjogIjIuMi4yIgorICAgICAgICAgIH0s
CisgICAgICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgICAgICJicm9jY29saS1tZXJn
ZS10cmVlcyI6IHsKKyAgICAgICAgICAgICAgInZlcnNpb24iOiAiMS4yLjQiLAorICAgICAgICAg
ICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYnJvY2NvbGktbWVy
Z2UtdHJlZXMvLS9icm9jY29saS1tZXJnZS10cmVlcy0xLjIuNC50Z3oiLAorICAgICAgICAgICAg
ICAiaW50ZWdyaXR5IjogInNoYTEtb0FGUm03VUdmd1pZblpHdm9wUWtSYUxRL2JVPSIsCisgICAg
ICAgICAgICAgICJkZXYiOiB0cnVlLAorICAgICAgICAgICAgICAicmVxdWlyZXMiOiB7CisgICAg
ICAgICAgICAgICAgImJyb2Njb2xpLXBsdWdpbiI6ICIxLjMuMCIsCisgICAgICAgICAgICAgICAg
ImNhbi1zeW1saW5rIjogIjEuMC4wIiwKKyAgICAgICAgICAgICAgICAiZmFzdC1vcmRlcmVkLXNl
dCI6ICIxLjAuMyIsCisgICAgICAgICAgICAgICAgImZzLXRyZWUtZGlmZiI6ICIwLjUuNiIsCisg
ICAgICAgICAgICAgICAgImhlaW1kYWxsanMiOiAiMC4yLjUiLAorICAgICAgICAgICAgICAgICJo
ZWltZGFsbGpzLWxvZ2dlciI6ICIwLjEuOSIsCisgICAgICAgICAgICAgICAgInJpbXJhZiI6ICIy
LjYuMSIsCisgICAgICAgICAgICAgICAgInN5bWxpbmstb3ItY29weSI6ICIxLjEuOCIKKyAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAg
ICAgImJyb2Njb2xpLW1lcmdlLXRyZWVzIjogeworICAgICAgICAgICJ2ZXJzaW9uIjogIjIuMC4w
IiwKKyAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYnJv
Y2NvbGktbWVyZ2UtdHJlZXMvLS9icm9jY29saS1tZXJnZS10cmVlcy0yLjAuMC50Z3oiLAorICAg
ICAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1FSzZrYmRYT3ZNaTQ5OVdsVHdxRXBQQzdrTGs9IiwK
KyAgICAgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAg
ICAgICAiYnJvY2NvbGktcGx1Z2luIjogIjEuMy4wIiwKKyAgICAgICAgICAgICJtZXJnZS10cmVl
cyI6ICIxLjAuMSIKKyAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgICJnbG9iIjogewor
ICAgICAgICAgICJ2ZXJzaW9uIjogIjcuMS4xIiwKKyAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0
cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZ2xvYi8tL2dsb2ItNy4xLjEudGd6IiwKKyAgICAgICAg
ICAiaW50ZWdyaXR5IjogInNoYTEtZ0ZJUjN3VDZyeHhqbzJBREJzMzFyZVVMTHNnPSIsCisgICAg
ICAgICAgImRldiI6IHRydWUsCisgICAgICAgICAgInJlcXVpcmVzIjogeworICAgICAgICAgICAg
ImZzLnJlYWxwYXRoIjogIjEuMC4wIiwKKyAgICAgICAgICAgICJpbmZsaWdodCI6ICIxLjAuNiIs
CisgICAgICAgICAgICAiaW5oZXJpdHMiOiAiMi4wLjMiLAorICAgICAgICAgICAgIm1pbmltYXRj
aCI6ICIzLjAuNCIsCisgICAgICAgICAgICAib25jZSI6ICIxLjQuMCIsCisgICAgICAgICAgICAi
cGF0aC1pcy1hYnNvbHV0ZSI6ICIxLjAuMSIKKyAgICAgICAgICB9CisgICAgICAgIH0sCisgICAg
ICAgICJqc29uNSI6IHsKKyAgICAgICAgICAidmVyc2lvbiI6ICIwLjUuMSIsCisgICAgICAgICAg
InJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2pzb241Ly0vanNvbjUtMC41
LjEudGd6IiwKKyAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTEtSHEzbnJNQVNBMHJZVGlPV2Ru
NnRuNlZKV0NFPSIsCisgICAgICAgICAgImRldiI6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAg
ImxvZGFzaCI6IHsKKyAgICAgICAgICAidmVyc2lvbiI6ICI0LjE3LjQiLAorICAgICAgICAgICJy
ZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9sb2Rhc2gvLS9sb2Rhc2gtNC4x
Ny40LnRneiIsCisgICAgICAgICAgImludGVncml0eSI6ICJzaGExLWVDQTZUUnd5aXVIWWJjcGtZ
T05wdFg5QVZhND0iLAorICAgICAgICAgICJkZXYiOiB0cnVlCisgICAgICAgIH0KKyAgICAgIH0K
KyAgICB9LAorICAgICJlbWJlci1jbGktYXBwLXZlcnNpb24iOiB7CisgICAgICAidmVyc2lvbiI6
ICIyLjAuMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcv
ZW1iZXItY2xpLWFwcC12ZXJzaW9uLy0vZW1iZXItY2xpLWFwcC12ZXJzaW9uLTIuMC4yLnRneiIs
CisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtcXU3ZVlJNlMrdWJDNFI5ajBvbzNQQnpEOEhBPSIs
CisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAgImVtYmVy
LWNsaS1iYWJlbCI6ICI1LjIuNCIsCisgICAgICAgICJlbWJlci1jbGktaHRtbGJhcnMiOiAiMS4z
LjQiLAorICAgICAgICAiZ2l0LXJlcG8tdmVyc2lvbiI6ICIwLjQuMSIKKyAgICAgIH0KKyAgICB9
LAorICAgICJlbWJlci1jbGktYmFiZWwiOiB7CisgICAgICAidmVyc2lvbiI6ICI1LjIuNCIsCisg
ICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZW1iZXItY2xpLWJh
YmVsLy0vZW1iZXItY2xpLWJhYmVsLTUuMi40LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNo
YTEtWE9UMGF3anRiMjBoNkhoaG43YUpjWjF1amhNPSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAg
ICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAgImJyb2Njb2xpLWJhYmVsLXRyYW5zcGlsZXIiOiAi
NS43LjIiLAorICAgICAgICAiYnJvY2NvbGktZnVubmVsIjogIjEuMi4wIiwKKyAgICAgICAgImNs
b25lIjogIjIuMS4xIiwKKyAgICAgICAgImVtYmVyLWNsaS12ZXJzaW9uLWNoZWNrZXIiOiAiMS4z
LjEiLAorICAgICAgICAicmVzb2x2ZSI6ICIxLjQuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJl
bWJlci1jbGktYnJvY2NvbGktc2FuZS13YXRjaGVyIjogeworICAgICAgInZlcnNpb24iOiAiMi4w
LjQiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VtYmVy
LWNsaS1icm9jY29saS1zYW5lLXdhdGNoZXIvLS9lbWJlci1jbGktYnJvY2NvbGktc2FuZS13YXRj
aGVyLTIuMC40LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtOUQ5QzkxdDFDY0lTKzVK
czJhNm9hdUdTWk1ZPSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJyZXF1aXJlcyI6IHsK
KyAgICAgICAgImJyb2Njb2xpLXNsb3ctdHJlZXMiOiAiMy4wLjEiLAorICAgICAgICAiaGVpbWRh
bGxqcyI6ICIwLjIuNSIsCisgICAgICAgICJoZWltZGFsbGpzLWxvZ2dlciI6ICIwLjEuOSIsCisg
ICAgICAgICJyc3ZwIjogIjMuNi4yIiwKKyAgICAgICAgInNhbmUiOiAiMS43LjAiCisgICAgICB9
CisgICAgfSwKKyAgICAiZW1iZXItY2xpLWRlcGVuZGVuY3ktY2hlY2tlciI6IHsKKyAgICAgICJ2
ZXJzaW9uIjogIjEuNC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5w
bWpzLm9yZy9lbWJlci1jbGktZGVwZW5kZW5jeS1jaGVja2VyLy0vZW1iZXItY2xpLWRlcGVuZGVu
Y3ktY2hlY2tlci0xLjQuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLUt4UDVkK0h1
cUVQOEdpR2dBYjVzcGRUdkdVST0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAicmVxdWly
ZXMiOiB7CisgICAgICAgICJjaGFsayI6ICIwLjUuMSIsCisgICAgICAgICJpcy1naXQtdXJsIjog
IjAuMi4zIiwKKyAgICAgICAgInNlbXZlciI6ICI0LjMuNiIKKyAgICAgIH0sCisgICAgICAiZGVw
ZW5kZW5jaWVzIjogeworICAgICAgICAiYW5zaS1yZWdleCI6IHsKKyAgICAgICAgICAidmVyc2lv
biI6ICIwLjIuMSIsCisgICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBt
anMub3JnL2Fuc2ktcmVnZXgvLS9hbnNpLXJlZ2V4LTAuMi4xLnRneiIsCisgICAgICAgICAgImlu
dGVncml0eSI6ICJzaGExLURZNlVhV2VqMkJRL2srSk9LWVVsL0JzaU5maz0iLAorICAgICAgICAg
ICJkZXYiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgICJhbnNpLXN0eWxlcyI6IHsKKyAgICAg
ICAgICAidmVyc2lvbiI6ICIxLjEuMCIsCisgICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8v
cmVnaXN0cnkubnBtanMub3JnL2Fuc2ktc3R5bGVzLy0vYW5zaS1zdHlsZXMtMS4xLjAudGd6IiwK
KyAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTEtNnV5L1pzMXdhSUoyQ3k5R2tWZ3JqMVhYcDk0
PSIsCisgICAgICAgICAgImRldiI6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgImNoYWxrIjog
eworICAgICAgICAgICJ2ZXJzaW9uIjogIjAuNS4xIiwKKyAgICAgICAgICAicmVzb2x2ZWQiOiAi
aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY2hhbGsvLS9jaGFsay0wLjUuMS50Z3oiLAorICAg
ICAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1aanM2Wkl0b3RWMEVhUTFKRm5xb040V1BJWFE9IiwK
KyAgICAgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAg
ICAgICAiYW5zaS1zdHlsZXMiOiAiMS4xLjAiLAorICAgICAgICAgICAgImVzY2FwZS1zdHJpbmct
cmVnZXhwIjogIjEuMC41IiwKKyAgICAgICAgICAgICJoYXMtYW5zaSI6ICIwLjEuMCIsCisgICAg
ICAgICAgICAic3RyaXAtYW5zaSI6ICIwLjMuMCIsCisgICAgICAgICAgICAic3VwcG9ydHMtY29s
b3IiOiAiMC4yLjAiCisgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICAiaGFzLWFuc2ki
OiB7CisgICAgICAgICAgInZlcnNpb24iOiAiMC4xLjAiLAorICAgICAgICAgICJyZXNvbHZlZCI6
ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9oYXMtYW5zaS8tL2hhcy1hbnNpLTAuMS4wLnRn
eiIsCisgICAgICAgICAgImludGVncml0eSI6ICJzaGExLWhQSmxxdWpBNXFpS0V0Y0NLSlMzVm9p
VXhpND0iLAorICAgICAgICAgICJkZXYiOiB0cnVlLAorICAgICAgICAgICJyZXF1aXJlcyI6IHsK
KyAgICAgICAgICAgICJhbnNpLXJlZ2V4IjogIjAuMi4xIgorICAgICAgICAgIH0KKyAgICAgICAg
fSwKKyAgICAgICAgInNlbXZlciI6IHsKKyAgICAgICAgICAidmVyc2lvbiI6ICI0LjMuNiIsCisg
ICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NlbXZlci8t
L3NlbXZlci00LjMuNi50Z3oiLAorICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1NQXZHNE9o
amRQZTZZUWFMV3g3TlYveGxNdG89IiwKKyAgICAgICAgICAiZGV2IjogdHJ1ZQorICAgICAgICB9
LAorICAgICAgICAic3RyaXAtYW5zaSI6IHsKKyAgICAgICAgICAidmVyc2lvbiI6ICIwLjMuMCIs
CisgICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N0cmlw
LWFuc2kvLS9zdHJpcC1hbnNpLTAuMy4wLnRneiIsCisgICAgICAgICAgImludGVncml0eSI6ICJz
aGExLUpmU09vaXlua1lmekYwcE51SFdUUjdzU1lpQT0iLAorICAgICAgICAgICJkZXYiOiB0cnVl
LAorICAgICAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAgICAgICJhbnNpLXJlZ2V4IjogIjAu
Mi4xIgorICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgInN1cHBvcnRzLWNvbG9yIjog
eworICAgICAgICAgICJ2ZXJzaW9uIjogIjAuMi4wIiwKKyAgICAgICAgICAicmVzb2x2ZWQiOiAi
aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3VwcG9ydHMtY29sb3IvLS9zdXBwb3J0cy1jb2xv
ci0wLjIuMC50Z3oiLAorICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS0yUzNpYVU2ejluTWps
ejE2NDlpMVcwd2lHUW89IiwKKyAgICAgICAgICAiZGV2IjogdHJ1ZQorICAgICAgICB9CisgICAg
ICB9CisgICAgfSwKKyAgICAiZW1iZXItY2xpLWdldC1jb21wb25lbnQtcGF0aC1vcHRpb24iOiB7
CisgICAgICAidmVyc2lvbiI6ICIxLjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9y
ZWdpc3RyeS5ucG1qcy5vcmcvZW1iZXItY2xpLWdldC1jb21wb25lbnQtcGF0aC1vcHRpb24vLS9l
bWJlci1jbGktZ2V0LWNvbXBvbmVudC1wYXRoLW9wdGlvbi0xLjAuMC50Z3oiLAorICAgICAgImlu
dGVncml0eSI6ICJzaGExLURYdFpWVm5pK1FVS3Z0Z0U4ZGp2OGJDTHgzRT0iLAorICAgICAgImRl
diI6IHRydWUKKyAgICB9LAorICAgICJlbWJlci1jbGktZ2V0LWRlcGVuZGVuY3ktZGVwdGgiOiB7
CisgICAgICAidmVyc2lvbiI6ICIxLjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9y
ZWdpc3RyeS5ucG1qcy5vcmcvZW1iZXItY2xpLWdldC1kZXBlbmRlbmN5LWRlcHRoLy0vZW1iZXIt
Y2xpLWdldC1kZXBlbmRlbmN5LWRlcHRoLTEuMC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5Ijog
InNoYTEtNEsvcytDb3RVdkFQS0t0R2dwVW9HdXcyalJFPSIsCisgICAgICAiZGV2IjogdHJ1ZQor
ICAgIH0sCisgICAgImVtYmVyLWNsaS1odG1sYmFycyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEu
My40IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lbWJl
ci1jbGktaHRtbGJhcnMvLS9lbWJlci1jbGktaHRtbGJhcnMtMS4zLjQudGd6IiwKKyAgICAgICJp
bnRlZ3JpdHkiOiAic2hhNTEyLTVseWNHNnozNVFIcjNXWkYxT2tWdlQrTi9HR0FWdWVtdE02bThO
VWdCV29lQTJUcU9nUEZSY0kwZVJxb0xBMEhBZmUwUjJNUmVLbU1JN3kxTEVNMSt3PT0iLAorICAg
ICAgImRldiI6IHRydWUsCisgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICJicm9jY29saS1w
ZXJzaXN0ZW50LWZpbHRlciI6ICIxLjQuMiIsCisgICAgICAgICJlbWJlci1jbGktdmVyc2lvbi1j
aGVja2VyIjogIjEuMy4xIiwKKyAgICAgICAgImhhc2gtZm9yLWRlcCI6ICIxLjIuMCIsCisgICAg
ICAgICJqc29uLXN0YWJsZS1zdHJpbmdpZnkiOiAiMS4wLjEiLAorICAgICAgICAic3RyaXAtYm9t
IjogIjIuMC4wIgorICAgICAgfQorICAgIH0sCisgICAgImVtYmVyLWNsaS1odG1sYmFycy1pbmxp
bmUtcHJlY29tcGlsZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuMy4xMyIsCisgICAgICAicmVz
b2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZW1iZXItY2xpLWh0bWxiYXJzLWlu
bGluZS1wcmVjb21waWxlLy0vZW1iZXItY2xpLWh0bWxiYXJzLWlubGluZS1wcmVjb21waWxlLTAu
My4xMy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItT2ZqTS8wdlg3QzFGQVp2eWli
a2JoN29HSHhEVlJhTG1Fa0lIY0NMdDRDTHEvQWJZcHRVWUlMMmR4RlJlRlVmTERSeHM5Mi8rWVAy
dGpQOWp0a1c0MEE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJyZXF1aXJlcyI6IHsK
KyAgICAgICAgImJhYmVsLXBsdWdpbi1odG1sYmFycy1pbmxpbmUtcHJlY29tcGlsZSI6ICIwLjEu
MSIsCisgICAgICAgICJlbWJlci1jbGktYmFiZWwiOiAiNS4yLjQiLAorICAgICAgICAiZW1iZXIt
Y2xpLWh0bWxiYXJzIjogIjEuMy40IiwKKyAgICAgICAgImhhc2gtZm9yLWRlcCI6ICIxLjIuMCIs
CisgICAgICAgICJoZWltZGFsbGpzLWxvZ2dlciI6ICIwLjEuOSIsCisgICAgICAgICJyZXNvbHZl
IjogIjEuNC4wIiwKKyAgICAgICAgInNlbXZlciI6ICI1LjQuMSIsCisgICAgICAgICJzaWxlbnQt
ZXJyb3IiOiAiMS4xLjAiCisgICAgICB9CisgICAgfSwKKyAgICAiZW1iZXItY2xpLWluamVjdC1s
aXZlLXJlbG9hZCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuNy4wIiwKKyAgICAgICJyZXNvbHZl
ZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lbWJlci1jbGktaW5qZWN0LWxpdmUtcmVs
b2FkLy0vZW1iZXItY2xpLWluamVjdC1saXZlLXJlbG9hZC0xLjcuMC50Z3oiLAorICAgICAgImlu
dGVncml0eSI6ICJzaGE1MTItKzB6T3dKbGY0aVI1TmN2eWVVN0U3eFUxcURmbmlQLyttWGZOVGZB
RWhITzJlRTlzalF2YXNLVjg0TzFzSUl5TGsyTE1JakZQYkd0N3V2NWZRY0lHd2c9PSIsCisgICAg
ICAiZGV2IjogdHJ1ZQorICAgIH0sCisgICAgImVtYmVyLWNsaS1pcy1wYWNrYWdlLW1pc3Npbmci
OiB7CisgICAgICAidmVyc2lvbiI6ICIxLjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6
Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZW1iZXItY2xpLWlzLXBhY2thZ2UtbWlzc2luZy8tL2VtYmVy
LWNsaS1pcy1wYWNrYWdlLW1pc3NpbmctMS4wLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAi
c2hhMS1ibUdFeXZ1U1kxM1pQS2JKUnJFRUtTMU9NNUE9IiwKKyAgICAgICJkZXYiOiB0cnVlCisg
ICAgfSwKKyAgICAiZW1iZXItY2xpLWpzaGludCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuMC4x
IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lbWJlci1j
bGktanNoaW50Ly0vZW1iZXItY2xpLWpzaGludC0yLjAuMS50Z3oiLAorICAgICAgImludGVncml0
eSI6ICJzaGExLUFCd09rMFlGa1h1UnplMXBTYldFaGJPSzhYMD0iLAorICAgICAgImRldiI6IHRy
dWUsCisgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICJicm9jY29saS1qc2hpbnQiOiAiMi4x
LjAiCisgICAgICB9CisgICAgfSwKKyAgICAiZW1iZXItY2xpLWxlZ2FjeS1ibHVlcHJpbnRzIjog
eworICAgICAgInZlcnNpb24iOiAiMC4xLjUiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8v
cmVnaXN0cnkubnBtanMub3JnL2VtYmVyLWNsaS1sZWdhY3ktYmx1ZXByaW50cy8tL2VtYmVyLWNs
aS1sZWdhY3ktYmx1ZXByaW50cy0wLjEuNS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGEx
LWs4RmNva0xzVVFmV0tvcjM3REQyckZPUE90az0iLAorICAgICAgImRldiI6IHRydWUsCisgICAg
ICAicmVxdWlyZXMiOiB7CisgICAgICAgICJjaGFsayI6ICIxLjEuMyIsCisgICAgICAgICJlbWJl
ci1jbGktZ2V0LWNvbXBvbmVudC1wYXRoLW9wdGlvbiI6ICIxLjAuMCIsCisgICAgICAgICJlbWJl
ci1jbGktZ2V0LWRlcGVuZGVuY3ktZGVwdGgiOiAiMS4wLjAiLAorICAgICAgICAiZW1iZXItY2xp
LWlzLXBhY2thZ2UtbWlzc2luZyI6ICIxLjAuMCIsCisgICAgICAgICJlbWJlci1jbGktbG9kYXNo
LXN1YnNldCI6ICIxLjAuMTIiLAorICAgICAgICAiZW1iZXItY2xpLW5vcm1hbGl6ZS1lbnRpdHkt
bmFtZSI6ICIxLjAuMCIsCisgICAgICAgICJlbWJlci1jbGktcGF0aC11dGlscyI6ICIxLjAuMCIs
CisgICAgICAgICJlbWJlci1jbGktc3RyaW5nLXV0aWxzIjogIjEuMS4wIiwKKyAgICAgICAgImVt
YmVyLWNsaS10ZXN0LWluZm8iOiAiMS4wLjAiLAorICAgICAgICAiZW1iZXItY2xpLXZhbGlkLWNv
bXBvbmVudC1uYW1lIjogIjEuMC4wIiwKKyAgICAgICAgImVtYmVyLWNsaS12ZXJzaW9uLWNoZWNr
ZXIiOiAiMS4zLjEiLAorICAgICAgICAiZW1iZXItcm91dGVyLWdlbmVyYXRvciI6ICIxLjIuMyIs
CisgICAgICAgICJleGlzdHMtc3luYyI6ICIwLjAuMyIsCisgICAgICAgICJmcy1leHRyYSI6ICIw
LjI0LjAiLAorICAgICAgICAiaW5mbGVjdGlvbiI6ICIxLjEyLjAiLAorICAgICAgICAicnN2cCI6
ICIzLjYuMiIsCisgICAgICAgICJzaWxlbnQtZXJyb3IiOiAiMS4xLjAiCisgICAgICB9LAorICAg
ICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImV4aXN0cy1zeW5jIjogeworICAgICAgICAg
ICJ2ZXJzaW9uIjogIjAuMC4zIiwKKyAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdp
c3RyeS5ucG1qcy5vcmcvZXhpc3RzLXN5bmMvLS9leGlzdHMtc3luYy0wLjAuMy50Z3oiLAorICAg
ICAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS11UkFBQysyN0VUczNpNEwxOWFkamdRZGlMYzg9IiwK
KyAgICAgICAgICAiZGV2IjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICAiZnMtZXh0cmEiOiB7
CisgICAgICAgICAgInZlcnNpb24iOiAiMC4yNC4wIiwKKyAgICAgICAgICAicmVzb2x2ZWQiOiAi
aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZnMtZXh0cmEvLS9mcy1leHRyYS0wLjI0LjAudGd6
IiwKKyAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTEtMU9RMEtwWm5YTGVFWmpPbUNaSkpNeXRU
bVZJPSIsCisgICAgICAgICAgImRldiI6IHRydWUsCisgICAgICAgICAgInJlcXVpcmVzIjogewor
ICAgICAgICAgICAgImdyYWNlZnVsLWZzIjogIjQuMS4xMSIsCisgICAgICAgICAgICAianNvbmZp
bGUiOiAiMi40LjAiLAorICAgICAgICAgICAgInBhdGgtaXMtYWJzb2x1dGUiOiAiMS4wLjEiLAor
ICAgICAgICAgICAgInJpbXJhZiI6ICIyLjYuMSIKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgIH0KKyAgICB9LAorICAgICJlbWJlci1jbGktbG9kYXNoLXN1YnNldCI6IHsKKyAgICAgICJ2
ZXJzaW9uIjogIjEuMC4xMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5u
cG1qcy5vcmcvZW1iZXItY2xpLWxvZGFzaC1zdWJzZXQvLS9lbWJlci1jbGktbG9kYXNoLXN1YnNl
dC0xLjAuMTIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1yeTUzNjZYY3NOZC9Nd2pU
cHYxOU5GRDI1VGM9IiwKKyAgICAgICJkZXYiOiB0cnVlCisgICAgfSwKKyAgICAiZW1iZXItY2xp
LW5vcm1hbGl6ZS1lbnRpdHktbmFtZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMC4wIiwKKyAg
ICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lbWJlci1jbGktbm9y
bWFsaXplLWVudGl0eS1uYW1lLy0vZW1iZXItY2xpLW5vcm1hbGl6ZS1lbnRpdHktbmFtZS0xLjAu
MC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLUN4VDN2THhabXFFWHRmM2NnZVQ5QThT
NjFiYz0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAg
ICJzaWxlbnQtZXJyb3IiOiAiMS4xLjAiCisgICAgICB9CisgICAgfSwKKyAgICAiZW1iZXItY2xp
LXBhdGgtdXRpbHMiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjAuMCIsCisgICAgICAicmVzb2x2
ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZW1iZXItY2xpLXBhdGgtdXRpbHMvLS9l
bWJlci1jbGktcGF0aC11dGlscy0xLjAuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGEx
LVRqbXZpMVV3SE4zRkFYYzV0M3FBVDdvZ2NlMD0iLAorICAgICAgImRldiI6IHRydWUKKyAgICB9
LAorICAgICJlbWJlci1jbGktcHJlcHJvY2Vzcy1yZWdpc3RyeSI6IHsKKyAgICAgICJ2ZXJzaW9u
IjogIjMuMS4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9y
Zy9lbWJlci1jbGktcHJlcHJvY2Vzcy1yZWdpc3RyeS8tL2VtYmVyLWNsaS1wcmVwcm9jZXNzLXJl
Z2lzdHJ5LTMuMS4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtT0VWc0ljVFN0a2xG
aFF6NTdHamJhNmRwS0lvPSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJyZXF1aXJlcyI6
IHsKKyAgICAgICAgImJyb2Njb2xpLWNsZWFuLWNzcyI6ICIxLjEuMCIsCisgICAgICAgICJicm9j
Y29saS1mdW5uZWwiOiAiMS4yLjAiLAorICAgICAgICAiYnJvY2NvbGktbWVyZ2UtdHJlZXMiOiAi
MS4yLjQiLAorICAgICAgICAiZGVidWciOiAiMi42LjgiLAorICAgICAgICAiZW1iZXItY2xpLWxv
ZGFzaC1zdWJzZXQiOiAiMS4wLjEyIiwKKyAgICAgICAgImV4aXN0cy1zeW5jIjogIjAuMC4zIiwK
KyAgICAgICAgInByb2Nlc3MtcmVsYXRpdmUtcmVxdWlyZSI6ICIxLjAuMCIsCisgICAgICAgICJz
aWxlbnQtZXJyb3IiOiAiMS4xLjAiCisgICAgICB9LAorICAgICAgImRlcGVuZGVuY2llcyI6IHsK
KyAgICAgICAgImV4aXN0cy1zeW5jIjogeworICAgICAgICAgICJ2ZXJzaW9uIjogIjAuMC4zIiwK
KyAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXhpc3Rz
LXN5bmMvLS9leGlzdHMtc3luYy0wLjAuMy50Z3oiLAorICAgICAgICAgICJpbnRlZ3JpdHkiOiAi
c2hhMS11UkFBQysyN0VUczNpNEwxOWFkamdRZGlMYzg9IiwKKyAgICAgICAgICAiZGV2IjogdHJ1
ZQorICAgICAgICB9CisgICAgICB9CisgICAgfSwKKyAgICAiZW1iZXItY2xpLXF1bml0Ijogewor
ICAgICAgInZlcnNpb24iOiAiMy4xLjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVn
aXN0cnkubnBtanMub3JnL2VtYmVyLWNsaS1xdW5pdC8tL2VtYmVyLWNsaS1xdW5pdC0zLjEuMi50
Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLTlIQmpyV3J3eHB6WFptSE0vdjFGT2hEWHFU
cz0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICJi
cm9jY29saS1iYWJlbC10cmFuc3BpbGVyIjogIjUuNy4yIiwKKyAgICAgICAgImJyb2Njb2xpLWZ1
bm5lbCI6ICIxLjIuMCIsCisgICAgICAgICJicm9jY29saS1tZXJnZS10cmVlcyI6ICIxLjIuNCIs
CisgICAgICAgICJlbWJlci1jbGktYmFiZWwiOiAiNS4yLjQiLAorICAgICAgICAiZW1iZXItY2xp
LXRlc3QtbG9hZGVyIjogIjEuMS4xIiwKKyAgICAgICAgImVtYmVyLWNsaS12ZXJzaW9uLWNoZWNr
ZXIiOiAiMS4zLjEiLAorICAgICAgICAiZW1iZXItcXVuaXQiOiAiMi4yLjAiLAorICAgICAgICAi
cXVuaXQtbm90aWZpY2F0aW9ucyI6ICIwLjEuMSIsCisgICAgICAgICJxdW5pdGpzIjogIjIuNC4w
IiwKKyAgICAgICAgInJlc29sdmUiOiAiMS40LjAiLAorICAgICAgICAic2lsZW50LWVycm9yIjog
IjEuMS4wIgorICAgICAgfQorICAgIH0sCisgICAgImVtYmVyLWNsaS1yZWxlYXNlIjogeworICAg
ICAgInZlcnNpb24iOiAiMC4yLjkiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0
cnkubnBtanMub3JnL2VtYmVyLWNsaS1yZWxlYXNlLy0vZW1iZXItY2xpLXJlbGVhc2UtMC4yLjku
dGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1YbzNqMERUR1ZaZVROMGdDTUZoSERzRWpH
dHM9IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgInJlcXVpcmVzIjogeworICAgICAgICAi
Y2hhbGsiOiAiMS4xLjMiLAorICAgICAgICAiZ2l0LXRvb2xzIjogIjAuMS40IiwKKyAgICAgICAg
Im1ha2UtYXJyYXkiOiAiMC4xLjIiLAorICAgICAgICAibWVyZ2UiOiAiMS4yLjAiLAorICAgICAg
ICAibW9tZW50LXRpbWV6b25lIjogIjAuMy4xIiwKKyAgICAgICAgIm5vcHQiOiAiMy4wLjYiLAor
ICAgICAgICAicnN2cCI6ICIzLjYuMiIsCisgICAgICAgICJzZW12ZXIiOiAiNC4zLjYiLAorICAg
ICAgICAic2lsZW50LWVycm9yIjogIjEuMS4wIgorICAgICAgfSwKKyAgICAgICJkZXBlbmRlbmNp
ZXMiOiB7CisgICAgICAgICJzZW12ZXIiOiB7CisgICAgICAgICAgInZlcnNpb24iOiAiNC4zLjYi
LAorICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zZW12
ZXIvLS9zZW12ZXItNC4zLjYudGd6IiwKKyAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTEtTUF2
RzRPaGpkUGU2WVFhTFd4N05WL3hsTXRvPSIsCisgICAgICAgICAgImRldiI6IHRydWUKKyAgICAg
ICAgfQorICAgICAgfQorICAgIH0sCisgICAgImVtYmVyLWNsaS1zcmkiOiB7CisgICAgICAidmVy
c2lvbiI6ICIyLjEuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1q
cy5vcmcvZW1iZXItY2xpLXNyaS8tL2VtYmVyLWNsaS1zcmktMi4xLjEudGd6IiwKKyAgICAgICJp
bnRlZ3JpdHkiOiAic2hhMS1seFlnazBwTGtZUFBlU1BNQStGNHVEcXBCLzA9IiwKKyAgICAgICJk
ZXYiOiB0cnVlLAorICAgICAgInJlcXVpcmVzIjogeworICAgICAgICAiYnJvY2NvbGktc3JpLWhh
c2giOiAiMi4xLjIiCisgICAgICB9CisgICAgfSwKKyAgICAiZW1iZXItY2xpLXN0cmluZy11dGls
cyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMS4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRw
czovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lbWJlci1jbGktc3RyaW5nLXV0aWxzLy0vZW1iZXItY2xp
LXN0cmluZy11dGlscy0xLjEuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLU9iWjMv
Q2dGOVZGemMxTjIvTzhuanFwRVVxRT0iLAorICAgICAgImRldiI6IHRydWUKKyAgICB9LAorICAg
ICJlbWJlci1jbGktdGVzdC1pbmZvIjogeworICAgICAgInZlcnNpb24iOiAiMS4wLjAiLAorICAg
ICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VtYmVyLWNsaS10ZXN0
LWluZm8vLS9lbWJlci1jbGktdGVzdC1pbmZvLTEuMC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5
IjogInNoYTEtN1U2V0R5U2VsMUk4K0pIa3J0SUhMT2hGZDdRPSIsCisgICAgICAiZGV2IjogdHJ1
ZSwKKyAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAgImVtYmVyLWNsaS1zdHJpbmctdXRpbHMi
OiAiMS4xLjAiCisgICAgICB9CisgICAgfSwKKyAgICAiZW1iZXItY2xpLXRlc3QtbG9hZGVyIjog
eworICAgICAgInZlcnNpb24iOiAiMS4xLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8v
cmVnaXN0cnkubnBtanMub3JnL2VtYmVyLWNsaS10ZXN0LWxvYWRlci8tL2VtYmVyLWNsaS10ZXN0
LWxvYWRlci0xLjEuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLU16TVJJSnNZR0Yw
T0RwWDVHRFNkb1F5czhMRT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAicmVxdWlyZXMi
OiB7CisgICAgICAgICJlbWJlci1jbGktYmFiZWwiOiAiNS4yLjQiCisgICAgICB9CisgICAgfSwK
KyAgICAiZW1iZXItY2xpLXVnbGlmeSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMi4wIiwKKyAg
ICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lbWJlci1jbGktdWds
aWZ5Ly0vZW1iZXItY2xpLXVnbGlmeS0xLjIuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJz
aGExLU1nakRLMVM4SjRNRmJvdXcxYy9wdTY4WC83ST0iLAorICAgICAgImRldiI6IHRydWUsCisg
ICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICJicm9jY29saS11Z2xpZnktc291cmNlbWFwIjog
IjEuNS4yIgorICAgICAgfQorICAgIH0sCisgICAgImVtYmVyLWNsaS12YWxpZC1jb21wb25lbnQt
bmFtZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJo
dHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lbWJlci1jbGktdmFsaWQtY29tcG9uZW50LW5hbWUv
LS9lbWJlci1jbGktdmFsaWQtY29tcG9uZW50LW5hbWUtMS4wLjAudGd6IiwKKyAgICAgICJpbnRl
Z3JpdHkiOiAic2hhMS1jVlVNNDRmZ0l6Qmw4d3N3c1ZFS290KytoKzg9IiwKKyAgICAgICJkZXYi
OiB0cnVlLAorICAgICAgInJlcXVpcmVzIjogeworICAgICAgICAic2lsZW50LWVycm9yIjogIjEu
MS4wIgorICAgICAgfQorICAgIH0sCisgICAgImVtYmVyLWNsaS12ZXJzaW9uLWNoZWNrZXIiOiB7
CisgICAgICAidmVyc2lvbiI6ICIxLjMuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9y
ZWdpc3RyeS5ucG1qcy5vcmcvZW1iZXItY2xpLXZlcnNpb24tY2hlY2tlci8tL2VtYmVyLWNsaS12
ZXJzaW9uLWNoZWNrZXItMS4zLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1DOExS
Tk1nd0ZDMm1TL2xpZWc3ZTBRdGhybkk9IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgInJl
cXVpcmVzIjogeworICAgICAgICAic2VtdmVyIjogIjUuNC4xIgorICAgICAgfQorICAgIH0sCisg
ICAgImVtYmVyLWV4cG9ydC1hcHBsaWNhdGlvbi1nbG9iYWwiOiB7CisgICAgICAidmVyc2lvbiI6
ICIxLjEuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcv
ZW1iZXItZXhwb3J0LWFwcGxpY2F0aW9uLWdsb2JhbC8tL2VtYmVyLWV4cG9ydC1hcHBsaWNhdGlv
bi1nbG9iYWwtMS4xLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS04bGZWSnhKb2t5
cUoxemttZWM1TnVKMXhWSzg9IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgInJlcXVpcmVz
IjogeworICAgICAgICAiZW1iZXItY2xpLWJhYmVsIjogIjUuMi40IgorICAgICAgfQorICAgIH0s
CisgICAgImVtYmVyLWluZmxlY3RvciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuOS42IiwKKyAg
ICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lbWJlci1pbmZsZWN0
b3IvLS9lbWJlci1pbmZsZWN0b3ItMS45LjYudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hh
MS1WMHNKTm1TdDVzWnVoQmhkZUk3Sm50S1hRYTg9IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAg
ICAgInJlcXVpcmVzIjogeworICAgICAgICAiZW1iZXItY2xpLWJhYmVsIjogIjUuMi40IgorICAg
ICAgfQorICAgIH0sCisgICAgImVtYmVyLWxvYWQtaW5pdGlhbGl6ZXJzIjogeworICAgICAgInZl
cnNpb24iOiAiMC41LjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBt
anMub3JnL2VtYmVyLWxvYWQtaW5pdGlhbGl6ZXJzLy0vZW1iZXItbG9hZC1pbml0aWFsaXplcnMt
MC41LjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1kdVBiSThFUjI5elRybTlvY0Rh
L0MxYStETDQ9IiwKKyAgICAgICJkZXYiOiB0cnVlCisgICAgfSwKKyAgICAiZW1iZXItcXVuaXQi
OiB7CisgICAgICAidmVyc2lvbiI6ICIyLjIuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6
Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZW1iZXItcXVuaXQvLS9lbWJlci1xdW5pdC0yLjIuMC50Z3oi
LAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItaU1RVDFaQ2dTUXBpSy9WVGJKamVRV056c2k0
NzQyd21QZTA4cHpnRUFmOWxDcnV5OXMzdG12aXo0ZkY5OGpEbFBkVjh3NUxNSWtrWFFYN0wyZVRw
Nmc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAg
ImVtYmVyLXRlc3QtaGVscGVycyI6ICIwLjYuMyIKKyAgICAgIH0KKyAgICB9LAorICAgICJlbWJl
ci1yZXNvbHZlciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuMS4xIiwKKyAgICAgICJyZXNvbHZl
ZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lbWJlci1yZXNvbHZlci8tL2VtYmVyLXJl
c29sdmVyLTIuMS4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtWGt3Zi8rbjE5SS9D
R1VyWFdTSjA3UXpYVDNJPSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJyZXF1aXJlcyI6
IHsKKyAgICAgICAgImVtYmVyLWNsaS1iYWJlbCI6ICI1LjIuNCIsCisgICAgICAgICJlbWJlci1j
bGktdmVyc2lvbi1jaGVja2VyIjogIjEuMy4xIgorICAgICAgfQorICAgIH0sCisgICAgImVtYmVy
LXJvdXRlci1nZW5lcmF0b3IiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjIuMyIsCisgICAgICAi
cmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZW1iZXItcm91dGVyLWdlbmVy
YXRvci8tL2VtYmVyLXJvdXRlci1nZW5lcmF0b3ItMS4yLjMudGd6IiwKKyAgICAgICJpbnRlZ3Jp
dHkiOiAic2hhMS1qdExLaHY4eU0yTVNEOEZDZUJrZW5vOFRGZTQ9IiwKKyAgICAgICJkZXYiOiB0
cnVlLAorICAgICAgInJlcXVpcmVzIjogeworICAgICAgICAicmVjYXN0IjogIjAuMTEuMjMiCisg
ICAgICB9LAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImVzcHJpbWEiOiB7Cisg
ICAgICAgICAgInZlcnNpb24iOiAiMy4xLjMiLAorICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRw
czovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lc3ByaW1hLy0vZXNwcmltYS0zLjEuMy50Z3oiLAorICAg
ICAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS0vY3BSenVZVE9KWGp5STFUWE9TZHYvWXFSak09IiwK
KyAgICAgICAgICAiZGV2IjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICAicmVjYXN0Ijogewor
ICAgICAgICAgICJ2ZXJzaW9uIjogIjAuMTEuMjMiLAorICAgICAgICAgICJyZXNvbHZlZCI6ICJo
dHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZWNhc3QvLS9yZWNhc3QtMC4xMS4yMy50Z3oiLAor
ICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1SUi9UQUVxeDVOK2JUa3RtTjJzcUlaRWtZdE09
IiwKKyAgICAgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICAgICAicmVxdWlyZXMiOiB7CisgICAg
ICAgICAgICAiYXN0LXR5cGVzIjogIjAuOS42IiwKKyAgICAgICAgICAgICJlc3ByaW1hIjogIjMu
MS4zIiwKKyAgICAgICAgICAgICJwcml2YXRlIjogIjAuMS43IiwKKyAgICAgICAgICAgICJzb3Vy
Y2UtbWFwIjogIjAuNS42IgorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0s
CisgICAgImVtYmVyLXRlc3QtaGVscGVycyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuNi4zIiwK
KyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lbWJlci10ZXN0
LWhlbHBlcnMvLS9lbWJlci10ZXN0LWhlbHBlcnMtMC42LjMudGd6IiwKKyAgICAgICJpbnRlZ3Jp
dHkiOiAic2hhMS0rR1ROOXZUblh6K0hhTlpUZDRXMXEyNkMyUWM9IiwKKyAgICAgICJkZXYiOiB0
cnVlCisgICAgfSwKKyAgICAiZW1iZXItdHJ5IjogeworICAgICAgInZlcnNpb24iOiAiMC4yLjE2
IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lbWJlci10
cnkvLS9lbWJlci10cnktMC4yLjE2LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1B
UVpFd012NkJJclZxL3lzUmNXVUx2dzV0cjZSUXRVZlNZdUNwdnRkeHhKV2hvNzRkMTZZS2hHeVdB
ZElEK1FTbVdIclZWR3grTzFrRGdqZjdZS3U5QT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAg
ICAgInJlcXVpcmVzIjogeworICAgICAgICAiY2hhbGsiOiAiMS4xLjMiLAorICAgICAgICAiY2xp
LXRhYmxlMiI6ICIwLjIuMCIsCisgICAgICAgICJjb3JlLW9iamVjdCI6ICIxLjEuMCIsCisgICAg
ICAgICJkZWJ1ZyI6ICIyLjYuOCIsCisgICAgICAgICJlbWJlci1jbGktdmVyc2lvbi1jaGVja2Vy
IjogIjEuMy4xIiwKKyAgICAgICAgImVtYmVyLXRyeS1jb25maWciOiAiMi4xLjAiLAorICAgICAg
ICAiZXh0ZW5kIjogIjMuMC4xIiwKKyAgICAgICAgImZzLWV4dHJhIjogIjAuMjYuNyIsCisgICAg
ICAgICJwcm9taXNlLW1hcC1zZXJpZXMiOiAiMC4yLjMiLAorICAgICAgICAicmVzb2x2ZSI6ICIx
LjQuMCIsCisgICAgICAgICJyaW1yYWYiOiAiMi42LjEiLAorICAgICAgICAicnN2cCI6ICIzLjYu
MiIsCisgICAgICAgICJzZW12ZXIiOiAiNS40LjEiCisgICAgICB9LAorICAgICAgImRlcGVuZGVu
Y2llcyI6IHsKKyAgICAgICAgImNvcmUtb2JqZWN0IjogeworICAgICAgICAgICJ2ZXJzaW9uIjog
IjEuMS4wIiwKKyAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5v
cmcvY29yZS1vYmplY3QvLS9jb3JlLW9iamVjdC0xLjEuMC50Z3oiLAorICAgICAgICAgICJpbnRl
Z3JpdHkiOiAic2hhMS1odFk1R0hNOCtkb2FXcTV5bm1MQXFJNW1yUW89IiwKKyAgICAgICAgICAi
ZGV2IjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICAiZnMtZXh0cmEiOiB7CisgICAgICAgICAg
InZlcnNpb24iOiAiMC4yNi43IiwKKyAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdp
c3RyeS5ucG1qcy5vcmcvZnMtZXh0cmEvLS9mcy1leHRyYS0wLjI2LjcudGd6IiwKKyAgICAgICAg
ICAiaW50ZWdyaXR5IjogInNoYTEtbXVIOTJVaVhlWTdhdDIwSkdNOUMwTU1ZVDZrPSIsCisgICAg
ICAgICAgImRldiI6IHRydWUsCisgICAgICAgICAgInJlcXVpcmVzIjogeworICAgICAgICAgICAg
ImdyYWNlZnVsLWZzIjogIjQuMS4xMSIsCisgICAgICAgICAgICAianNvbmZpbGUiOiAiMi40LjAi
LAorICAgICAgICAgICAgImtsYXciOiAiMS4zLjEiLAorICAgICAgICAgICAgInBhdGgtaXMtYWJz
b2x1dGUiOiAiMS4wLjEiLAorICAgICAgICAgICAgInJpbXJhZiI6ICIyLjYuMSIKKyAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9LAorICAgICJlbWJlci10cnktY29uZmlnIjog
eworICAgICAgInZlcnNpb24iOiAiMi4xLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8v
cmVnaXN0cnkubnBtanMub3JnL2VtYmVyLXRyeS1jb25maWcvLS9lbWJlci10cnktY29uZmlnLTIu
MS4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtNE9GV0lwcFVJMGFsanViMnJXQlJC
TW1PMytBPSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAg
ICAgImxvZGFzaCI6ICI0LjE3LjQiLAorICAgICAgICAibm9kZS1mZXRjaCI6ICIxLjcuMSIsCisg
ICAgICAgICJyc3ZwIjogIjMuNi4yIiwKKyAgICAgICAgInNlbXZlciI6ICI1LjQuMSIKKyAgICAg
IH0sCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAibG9kYXNoIjogeworICAgICAg
ICAgICJ2ZXJzaW9uIjogIjQuMTcuNCIsCisgICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8v
cmVnaXN0cnkubnBtanMub3JnL2xvZGFzaC8tL2xvZGFzaC00LjE3LjQudGd6IiwKKyAgICAgICAg
ICAiaW50ZWdyaXR5IjogInNoYTEtZUNBNlRSd3lpdUhZYmNwa1lPTnB0WDlBVmE0PSIsCisgICAg
ICAgICAgImRldiI6IHRydWUKKyAgICAgICAgfQorICAgICAgfQorICAgIH0sCisgICAgImVuY29k
ZXVybCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMC4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJo
dHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lbmNvZGV1cmwvLS9lbmNvZGV1cmwtMS4wLjEudGd6
IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1lZVBWaGxVMGFRbitidzlGcGQ1b0VEc3BUU0E9
IiwKKyAgICAgICJkZXYiOiB0cnVlCisgICAgfSwKKyAgICAiZW5jb2RpbmciOiB7CisgICAgICAi
dmVyc2lvbiI6ICIwLjEuMTIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnku
bnBtanMub3JnL2VuY29kaW5nLy0vZW5jb2RpbmctMC4xLjEyLnRneiIsCisgICAgICAiaW50ZWdy
aXR5IjogInNoYTEtVTR0bTgrNWl6UnExSHNNamdwMGZsSURIUytzPSIsCisgICAgICAiZGV2Ijog
dHJ1ZSwKKyAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAgImljb252LWxpdGUiOiAiMC40LjE4
IgorICAgICAgfQorICAgIH0sCisgICAgImVuZ2luZS5pbyI6IHsKKyAgICAgICJ2ZXJzaW9uIjog
IjEuOC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9l
bmdpbmUuaW8vLS9lbmdpbmUuaW8tMS44LjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hh
MS1QdXRmSmt5M1hidnNHNnJxSnRZZldrNnM0cW89IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAg
ICAgInJlcXVpcmVzIjogeworICAgICAgICAiYWNjZXB0cyI6ICIxLjMuMyIsCisgICAgICAgICJi
YXNlNjRpZCI6ICIwLjEuMCIsCisgICAgICAgICJjb29raWUiOiAiMC4zLjEiLAorICAgICAgICAi
ZGVidWciOiAiMi4zLjMiLAorICAgICAgICAiZW5naW5lLmlvLXBhcnNlciI6ICIxLjMuMSIsCisg
ICAgICAgICJ3cyI6ICIxLjEuMSIKKyAgICAgIH0sCisgICAgICAiZGVwZW5kZW5jaWVzIjogewor
ICAgICAgICAiZGVidWciOiB7CisgICAgICAgICAgInZlcnNpb24iOiAiMi4zLjMiLAorICAgICAg
ICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kZWJ1Zy8tL2RlYnVn
LTIuMy4zLnRneiIsCisgICAgICAgICAgImludGVncml0eSI6ICJzaGExLVFNUlQ1bjV1RThrQjNl
d3hldmlZYk5xZS80dz0iLAorICAgICAgICAgICJkZXYiOiB0cnVlLAorICAgICAgICAgICJyZXF1
aXJlcyI6IHsKKyAgICAgICAgICAgICJtcyI6ICIwLjcuMiIKKyAgICAgICAgICB9CisgICAgICAg
IH0sCisgICAgICAgICJtcyI6IHsKKyAgICAgICAgICAidmVyc2lvbiI6ICIwLjcuMiIsCisgICAg
ICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21zLy0vbXMtMC43
LjIudGd6IiwKKyAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTEtcmlYUEpSS3ppRm9kbGRmd040
YU5oREVTUjJVPSIsCisgICAgICAgICAgImRldiI6IHRydWUKKyAgICAgICAgfQorICAgICAgfQor
ICAgIH0sCisgICAgImVuZ2luZS5pby1jbGllbnQiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjgu
MCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZW5naW5l
LmlvLWNsaWVudC8tL2VuZ2luZS5pby1jbGllbnQtMS44LjAudGd6IiwKKyAgICAgICJpbnRlZ3Jp
dHkiOiAic2hhMS1lM01PUVNkQlFJZFpiWnZqeUkwcnhmMjJ6MXc9IiwKKyAgICAgICJkZXYiOiB0
cnVlLAorICAgICAgInJlcXVpcmVzIjogeworICAgICAgICAiY29tcG9uZW50LWVtaXR0ZXIiOiAi
MS4yLjEiLAorICAgICAgICAiY29tcG9uZW50LWluaGVyaXQiOiAiMC4wLjMiLAorICAgICAgICAi
ZGVidWciOiAiMi4zLjMiLAorICAgICAgICAiZW5naW5lLmlvLXBhcnNlciI6ICIxLjMuMSIsCisg
ICAgICAgICJoYXMtY29ycyI6ICIxLjEuMCIsCisgICAgICAgICJpbmRleG9mIjogIjAuMC4xIiwK
KyAgICAgICAgInBhcnNlanNvbiI6ICIwLjAuMyIsCisgICAgICAgICJwYXJzZXFzIjogIjAuMC41
IiwKKyAgICAgICAgInBhcnNldXJpIjogIjAuMC41IiwKKyAgICAgICAgIndzIjogIjEuMS4xIiwK
KyAgICAgICAgInhtbGh0dHByZXF1ZXN0LXNzbCI6ICIxLjUuMyIsCisgICAgICAgICJ5ZWFzdCI6
ICIwLjEuMiIKKyAgICAgIH0sCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiY29t
cG9uZW50LWVtaXR0ZXIiOiB7CisgICAgICAgICAgInZlcnNpb24iOiAiMS4yLjEiLAorICAgICAg
ICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jb21wb25lbnQtZW1p
dHRlci8tL2NvbXBvbmVudC1lbWl0dGVyLTEuMi4xLnRneiIsCisgICAgICAgICAgImludGVncml0
eSI6ICJzaGExLUUza1kxdGVDZy9mZmVtdDhXbVBoUU9hVUplWT0iLAorICAgICAgICAgICJkZXYi
OiB0cnVlCisgICAgICAgIH0sCisgICAgICAgICJkZWJ1ZyI6IHsKKyAgICAgICAgICAidmVyc2lv
biI6ICIyLjMuMyIsCisgICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBt
anMub3JnL2RlYnVnLy0vZGVidWctMi4zLjMudGd6IiwKKyAgICAgICAgICAiaW50ZWdyaXR5Ijog
InNoYTEtUU1SVDVuNXVFOGtCM2V3eGV2aVliTnFlLzR3PSIsCisgICAgICAgICAgImRldiI6IHRy
dWUsCisgICAgICAgICAgInJlcXVpcmVzIjogeworICAgICAgICAgICAgIm1zIjogIjAuNy4yIgor
ICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgIm1zIjogeworICAgICAgICAgICJ2ZXJz
aW9uIjogIjAuNy4yIiwKKyAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5u
cG1qcy5vcmcvbXMvLS9tcy0wLjcuMi50Z3oiLAorICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hh
MS1yaVhQSlJLemlGb2RsZGZ3TjRhTmhERVNSMlU9IiwKKyAgICAgICAgICAiZGV2IjogdHJ1ZQor
ICAgICAgICB9CisgICAgICB9CisgICAgfSwKKyAgICAiZW5naW5lLmlvLXBhcnNlciI6IHsKKyAg
ICAgICJ2ZXJzaW9uIjogIjEuMy4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lz
dHJ5Lm5wbWpzLm9yZy9lbmdpbmUuaW8tcGFyc2VyLy0vZW5naW5lLmlvLXBhcnNlci0xLjMuMS50
Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLWxWVHhyak1RZlcrOUZ3eWxSbTB2Z3o5cUI4
OD0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICJh
ZnRlciI6ICIwLjguMSIsCisgICAgICAgICJhcnJheWJ1ZmZlci5zbGljZSI6ICIwLjAuNiIsCisg
ICAgICAgICJiYXNlNjQtYXJyYXlidWZmZXIiOiAiMC4xLjUiLAorICAgICAgICAiYmxvYiI6ICIw
LjAuNCIsCisgICAgICAgICJoYXMtYmluYXJ5IjogIjAuMS42IiwKKyAgICAgICAgInd0Zi04Ijog
IjEuMC4wIgorICAgICAgfSwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJoYXMt
YmluYXJ5IjogeworICAgICAgICAgICJ2ZXJzaW9uIjogIjAuMS42IiwKKyAgICAgICAgICAicmVz
b2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaGFzLWJpbmFyeS8tL2hhcy1iaW5h
cnktMC4xLjYudGd6IiwKKyAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTEtSlRKdk9jK2s5aGF0
aDRlSlRqcnl6N3g3YmhBPSIsCisgICAgICAgICAgImRldiI6IHRydWUsCisgICAgICAgICAgInJl
cXVpcmVzIjogeworICAgICAgICAgICAgImlzYXJyYXkiOiAiMC4wLjEiCisgICAgICAgICAgfQor
ICAgICAgICB9LAorICAgICAgICAiaXNhcnJheSI6IHsKKyAgICAgICAgICAidmVyc2lvbiI6ICIw
LjAuMSIsCisgICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3Jn
L2lzYXJyYXkvLS9pc2FycmF5LTAuMC4xLnRneiIsCisgICAgICAgICAgImludGVncml0eSI6ICJz
aGExLWloaXMvS21vOUJkK0NhdjhZRGlUbXdYUjd0OD0iLAorICAgICAgICAgICJkZXYiOiB0cnVl
CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9LAorICAgICJlbnN1cmUtcG9zaXgtcGF0aCI6IHsK
KyAgICAgICJ2ZXJzaW9uIjogIjEuMC4yIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3Jl
Z2lzdHJ5Lm5wbWpzLm9yZy9lbnN1cmUtcG9zaXgtcGF0aC8tL2Vuc3VyZS1wb3NpeC1wYXRoLTEu
MC4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtcGxzK1F0QzNIUHhZWHJkMCtaUThq
WnVSc01JPSIsCisgICAgICAiZGV2IjogdHJ1ZQorICAgIH0sCisgICAgImVudGl0aWVzIjogewor
ICAgICAgInZlcnNpb24iOiAiMS4xLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVn
aXN0cnkubnBtanMub3JnL2VudGl0aWVzLy0vZW50aXRpZXMtMS4xLjEudGd6IiwKKyAgICAgICJp
bnRlZ3JpdHkiOiAic2hhMS1ibHd0Q2xZaHRkcmE3TytBdVE3ZnRjMTNjdkE9IiwKKyAgICAgICJk
ZXYiOiB0cnVlCisgICAgfSwKKyAgICAiZXJyb3IiOiB7CisgICAgICAidmVyc2lvbiI6ICI3LjAu
MiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXJyb3Iv
LS9lcnJvci03LjAuMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLXBmZGYvMDJaSmhK
dDJzRHFYY09PYUpGVHl3ST0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAicmVxdWlyZXMi
OiB7CisgICAgICAgICJzdHJpbmctdGVtcGxhdGUiOiAiMC4yLjEiLAorICAgICAgICAieHRlbmQi
OiAiNC4wLjEiCisgICAgICB9CisgICAgfSwKKyAgICAiZXNjYXBlLWh0bWwiOiB7CisgICAgICAi
dmVyc2lvbiI6ICIxLjAuMyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5u
cG1qcy5vcmcvZXNjYXBlLWh0bWwvLS9lc2NhcGUtaHRtbC0xLjAuMy50Z3oiLAorICAgICAgImlu
dGVncml0eSI6ICJzaGExLUFsanE1TlBRd0pkTjRjRnBHSTd3QlIwZEdZZz0iLAorICAgICAgImRl
diI6IHRydWUKKyAgICB9LAorICAgICJlc2NhcGUtc3RyaW5nLXJlZ2V4cCI6IHsKKyAgICAgICJ2
ZXJzaW9uIjogIjEuMC41IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5w
bWpzLm9yZy9lc2NhcGUtc3RyaW5nLXJlZ2V4cC8tL2VzY2FwZS1zdHJpbmctcmVnZXhwLTEuMC41
LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtRzJIQVZpR1FxTi8ycmp1eXp3SUF5aE1M
aHRRPSIsCisgICAgICAiZGV2IjogdHJ1ZQorICAgIH0sCisgICAgImVzcHJpbWEtZmIiOiB7Cisg
ICAgICAidmVyc2lvbiI6ICIxNTAwMS4xMDAxLjAtZGV2LWhhcm1vbnktZmIiLAorICAgICAgInJl
c29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VzcHJpbWEtZmIvLS9lc3ByaW1h
LWZiLTE1MDAxLjEwMDEuMC1kZXYtaGFybW9ueS1mYi50Z3oiLAorICAgICAgImludGVncml0eSI6
ICJzaGExLVE3NjFmc0p1alBJMzA5MkxNK1FsTTFkL0psaz0iLAorICAgICAgImRldiI6IHRydWUK
KyAgICB9LAorICAgICJlc3V0aWxzIjogeworICAgICAgInZlcnNpb24iOiAiMi4wLjIiLAorICAg
ICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VzdXRpbHMvLS9lc3V0
aWxzLTIuMC4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtQ3I5UEhLcGJ5eDk2blly
TWJlcFBxcUJMckpzPSIsCisgICAgICAiZGV2IjogdHJ1ZQorICAgIH0sCisgICAgImV0YWciOiB7
CisgICAgICAidmVyc2lvbiI6ICIxLjguMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9y
ZWdpc3RyeS5ucG1qcy5vcmcvZXRhZy8tL2V0YWctMS44LjAudGd6IiwKKyAgICAgICJpbnRlZ3Jp
dHkiOiAic2hhMS1iMk1hN3pOdGJFWTJLMUYyUUVUT0lXdmp3RkU9IiwKKyAgICAgICJkZXYiOiB0
cnVlCisgICAgfSwKKyAgICAiZXZlbnRlbWl0dGVyMyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEu
Mi4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9ldmVu
dGVtaXR0ZXIzLy0vZXZlbnRlbWl0dGVyMy0xLjIuMC50Z3oiLAorICAgICAgImludGVncml0eSI6
ICJzaGExLUhJYVpIWUZxMGVVRWRRNXpoMElrN1BPK3hRZz0iLAorICAgICAgImRldiI6IHRydWUK
KyAgICB9LAorICAgICJldmVudHMtdG8tYXJyYXkiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjEu
MiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXZlbnRz
LXRvLWFycmF5Ly0vZXZlbnRzLXRvLWFycmF5LTEuMS4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5
IjogInNoYTEtTFVIMVkrSCtRQTdVbGkvaHBOWEdwMU9kOS9ZPSIsCisgICAgICAiZGV2IjogdHJ1
ZQorICAgIH0sCisgICAgImV4ZWMtc2giOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjIuMCIsCisg
ICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXhlYy1zaC8tL2V4
ZWMtc2gtMC4yLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1GUGRkNC9JTktHNzVN
d21iTE9VS2tEV2M3eEE9IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgInJlcXVpcmVzIjog
eworICAgICAgICAibWVyZ2UiOiAiMS4yLjAiCisgICAgICB9CisgICAgfSwKKyAgICAiZXhlY2Ei
OiB7CisgICAgICAidmVyc2lvbiI6ICIwLjYuMyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6
Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXhlY2EvLS9leGVjYS0wLjYuMy50Z3oiLAorICAgICAgImlu
dGVncml0eSI6ICJzaGExLVY3YWFXVThJRjFuR25sTnc4TkY3bkxFV1dQND0iLAorICAgICAgImRl
diI6IHRydWUsCisgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICJjcm9zcy1zcGF3biI6ICI1
LjEuMCIsCisgICAgICAgICJnZXQtc3RyZWFtIjogIjMuMC4wIiwKKyAgICAgICAgImlzLXN0cmVh
bSI6ICIxLjEuMCIsCisgICAgICAgICJucG0tcnVuLXBhdGgiOiAiMi4wLjIiLAorICAgICAgICAi
cC1maW5hbGx5IjogIjEuMC4wIiwKKyAgICAgICAgInNpZ25hbC1leGl0IjogIjMuMC4yIiwKKyAg
ICAgICAgInN0cmlwLWVvZiI6ICIxLjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJleGlzdHMt
c3RhdCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJo
dHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9leGlzdHMtc3RhdC8tL2V4aXN0cy1zdGF0LTEuMC4w
LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtQm1EalVsb3VpZG5rUmhLVVFNSnk3Zm9r
dFNrPSIsCisgICAgICAiZGV2IjogdHJ1ZQorICAgIH0sCisgICAgImV4aXN0cy1zeW5jIjogewor
ICAgICAgInZlcnNpb24iOiAiMC4wLjQiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVn
aXN0cnkubnBtanMub3JnL2V4aXN0cy1zeW5jLy0vZXhpc3RzLXN5bmMtMC4wLjQudGd6IiwKKyAg
ICAgICJpbnRlZ3JpdHkiOiAic2hhMS1sMFRDeENqTUE3QVFZTnRGVFVzUzhPODhpSGs9IiwKKyAg
ICAgICJkZXYiOiB0cnVlCisgICAgfSwKKyAgICAiZXhpdCI6IHsKKyAgICAgICJ2ZXJzaW9uIjog
IjAuMS4yIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9l
eGl0Ly0vZXhpdC0wLjEuMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLUJqSmpqNDJI
Zk1naEI5TUtELzhhRjh1aHpRdz0iLAorICAgICAgImRldiI6IHRydWUKKyAgICB9LAorICAgICJl
eGl0LWhvb2siOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjEuMSIsCisgICAgICAicmVzb2x2ZWQi
OiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXhpdC1ob29rLy0vZXhpdC1ob29rLTEuMS4x
LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtOEZ5aU03U01CZFZQL3dkMlhmaFFmcFhB
TC9nPSIsCisgICAgICAiZGV2IjogdHJ1ZQorICAgIH0sCisgICAgImV4cGFuZC1icmFja2V0cyI6
IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuMS41IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczov
L3JlZ2lzdHJ5Lm5wbWpzLm9yZy9leHBhbmQtYnJhY2tldHMvLS9leHBhbmQtYnJhY2tldHMtMC4x
LjUudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS0zd2NvVGpRcWdIelhNNnhhOXlRUjVZ
SFJGM3M9IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgInJlcXVpcmVzIjogeworICAgICAg
ICAiaXMtcG9zaXgtYnJhY2tldCI6ICIwLjEuMSIKKyAgICAgIH0KKyAgICB9LAorICAgICJleHBh
bmQtcmFuZ2UiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjguMiIsCisgICAgICAicmVzb2x2ZWQi
OiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXhwYW5kLXJhbmdlLy0vZXhwYW5kLXJhbmdl
LTEuOC4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtb3Budi9UTmY0bklldXVqaVYr
eDVaRS9JVXpjPSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJyZXF1aXJlcyI6IHsKKyAg
ICAgICAgImZpbGwtcmFuZ2UiOiAiMi4yLjMiCisgICAgICB9CisgICAgfSwKKyAgICAiZXhwYW5k
LXRpbGRlIjogeworICAgICAgInZlcnNpb24iOiAiMS4yLjIiLAorICAgICAgInJlc29sdmVkIjog
Imh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2V4cGFuZC10aWxkZS8tL2V4cGFuZC10aWxkZS0x
LjIuMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLUM0SHJxSmZsbzlNZEhEMFFMNDhC
UkI1VmxFaz0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAicmVxdWlyZXMiOiB7CisgICAg
ICAgICJvcy1ob21lZGlyIjogIjEuMC4yIgorICAgICAgfQorICAgIH0sCisgICAgImV4cHJlc3Mi
OiB7CisgICAgICAidmVyc2lvbiI6ICI0LjE1LjQiLAorICAgICAgInJlc29sdmVkIjogImh0dHBz
Oi8vcmVnaXN0cnkubnBtanMub3JnL2V4cHJlc3MvLS9leHByZXNzLTQuMTUuNC50Z3oiLAorICAg
ICAgImludGVncml0eSI6ICJzaGExLUF5NGlVMGljK1B6Z0ptYSt5ajBSN1hvdHJ0RT0iLAorICAg
ICAgImRldiI6IHRydWUsCisgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICJhY2NlcHRzIjog
IjEuMy4zIiwKKyAgICAgICAgImFycmF5LWZsYXR0ZW4iOiAiMS4xLjEiLAorICAgICAgICAiY29u
dGVudC1kaXNwb3NpdGlvbiI6ICIwLjUuMiIsCisgICAgICAgICJjb250ZW50LXR5cGUiOiAiMS4w
LjIiLAorICAgICAgICAiY29va2llIjogIjAuMy4xIiwKKyAgICAgICAgImNvb2tpZS1zaWduYXR1
cmUiOiAiMS4wLjYiLAorICAgICAgICAiZGVidWciOiAiMi42LjgiLAorICAgICAgICAiZGVwZCI6
ICIxLjEuMSIsCisgICAgICAgICJlbmNvZGV1cmwiOiAiMS4wLjEiLAorICAgICAgICAiZXNjYXBl
LWh0bWwiOiAiMS4wLjMiLAorICAgICAgICAiZXRhZyI6ICIxLjguMCIsCisgICAgICAgICJmaW5h
bGhhbmRsZXIiOiAiMS4wLjQiLAorICAgICAgICAiZnJlc2giOiAiMC41LjAiLAorICAgICAgICAi
bWVyZ2UtZGVzY3JpcHRvcnMiOiAiMS4wLjEiLAorICAgICAgICAibWV0aG9kcyI6ICIxLjEuMiIs
CisgICAgICAgICJvbi1maW5pc2hlZCI6ICIyLjMuMCIsCisgICAgICAgICJwYXJzZXVybCI6ICIx
LjMuMSIsCisgICAgICAgICJwYXRoLXRvLXJlZ2V4cCI6ICIwLjEuNyIsCisgICAgICAgICJwcm94
eS1hZGRyIjogIjEuMS41IiwKKyAgICAgICAgInFzIjogIjYuNS4wIiwKKyAgICAgICAgInJhbmdl
LXBhcnNlciI6ICIxLjIuMCIsCisgICAgICAgICJzZW5kIjogIjAuMTUuNCIsCisgICAgICAgICJz
ZXJ2ZS1zdGF0aWMiOiAiMS4xMi40IiwKKyAgICAgICAgInNldHByb3RvdHlwZW9mIjogIjEuMC4z
IiwKKyAgICAgICAgInN0YXR1c2VzIjogIjEuMy4xIiwKKyAgICAgICAgInR5cGUtaXMiOiAiMS42
LjE1IiwKKyAgICAgICAgInV0aWxzLW1lcmdlIjogIjEuMC4wIiwKKyAgICAgICAgInZhcnkiOiAi
MS4xLjEiCisgICAgICB9CisgICAgfSwKKyAgICAiZXh0ZW5kIjogeworICAgICAgInZlcnNpb24i
OiAiMy4wLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3Jn
L2V4dGVuZC8tL2V4dGVuZC0zLjAuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLXAx
WHFlOEd0L01XakhPZm5ZdHVxM0Y1alpFUT0iLAorICAgICAgImRldiI6IHRydWUKKyAgICB9LAor
ICAgICJleHRlcm5hbC1lZGl0b3IiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjEuMSIsCisgICAg
ICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXh0ZXJuYWwtZWRpdG9y
Ly0vZXh0ZXJuYWwtZWRpdG9yLTEuMS4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEt
RXRldzI0VVBmL2ZuQ0J1dlFBVndBR0RFWUFzPSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAg
ICJyZXF1aXJlcyI6IHsKKyAgICAgICAgImV4dGVuZCI6ICIzLjAuMSIsCisgICAgICAgICJzcGF3
bi1zeW5jIjogIjEuMC4xNSIsCisgICAgICAgICJ0bXAiOiAiMC4wLjI5IgorICAgICAgfSwKKyAg
ICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJ0bXAiOiB7CisgICAgICAgICAgInZlcnNp
b24iOiAiMC4wLjI5IiwKKyAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5u
cG1qcy5vcmcvdG1wLy0vdG1wLTAuMC4yOS50Z3oiLAorICAgICAgICAgICJpbnRlZ3JpdHkiOiAi
c2hhMS04bEVsL3czWjJqekxEQzNUY2U0U2lMdVJLTUE9IiwKKyAgICAgICAgICAiZGV2IjogdHJ1
ZSwKKyAgICAgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICAgICAib3MtdG1wZGlyIjogIjEu
MC4yIgorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0sCisgICAgImV4dGds
b2IiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjMuMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0
cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXh0Z2xvYi8tL2V4dGdsb2ItMC4zLjIudGd6IiwKKyAg
ICAgICJpbnRlZ3JpdHkiOiAic2hhMS1MaGovUFM5SnF5ZGx6c2tDUHdFZHFvMkRTYUU9IiwKKyAg
ICAgICJkZXYiOiB0cnVlLAorICAgICAgInJlcXVpcmVzIjogeworICAgICAgICAiaXMtZXh0Z2xv
YiI6ICIxLjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJmYXN0LW9yZGVyZWQtc2V0Ijogewor
ICAgICAgInZlcnNpb24iOiAiMS4wLjMiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVn
aXN0cnkubnBtanMub3JnL2Zhc3Qtb3JkZXJlZC1zZXQvLS9mYXN0LW9yZGVyZWQtc2V0LTEuMC4z
LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtUDdzMlkwOTc1NTVQZnR2YlNqVjk3aVhS
aE9zPSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAg
ImJsYW5rLW9iamVjdCI6ICIxLjAuMiIKKyAgICAgIH0KKyAgICB9LAorICAgICJmYXN0LXNvdXJj
ZW1hcC1jb25jYXQiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjIuMCIsCisgICAgICAicmVzb2x2
ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZmFzdC1zb3VyY2VtYXAtY29uY2F0Ly0v
ZmFzdC1zb3VyY2VtYXAtY29uY2F0LTEuMi4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNo
YTEtZUp4ZzRGbUhPbFpjdHVxbGlEYnhzdEVVY2pBPSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAg
ICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAgImNoYWxrIjogIjAuNS4xIiwKKyAgICAgICAgImRl
YnVnIjogIjIuNi44IiwKKyAgICAgICAgImZzLWV4dHJhIjogIjAuMzAuMCIsCisgICAgICAgICJt
ZW1vcnktc3RyZWFtcyI6ICIwLjEuMiIsCisgICAgICAgICJta2RpcnAiOiAiMC41LjEiLAorICAg
ICAgICAicnN2cCI6ICIzLjYuMiIsCisgICAgICAgICJzb3VyY2UtbWFwIjogIjAuNC40IiwKKyAg
ICAgICAgInNvdXJjZS1tYXAtdXJsIjogIjAuMy4wIgorICAgICAgfSwKKyAgICAgICJkZXBlbmRl
bmNpZXMiOiB7CisgICAgICAgICJhbnNpLXJlZ2V4IjogeworICAgICAgICAgICJ2ZXJzaW9uIjog
IjAuMi4xIiwKKyAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5v
cmcvYW5zaS1yZWdleC8tL2Fuc2ktcmVnZXgtMC4yLjEudGd6IiwKKyAgICAgICAgICAiaW50ZWdy
aXR5IjogInNoYTEtRFk2VWFXZWoyQlEvaytKT0tZVWwvQnNpTmZrPSIsCisgICAgICAgICAgImRl
diI6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgImFuc2ktc3R5bGVzIjogeworICAgICAgICAg
ICJ2ZXJzaW9uIjogIjEuMS4wIiwKKyAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdp
c3RyeS5ucG1qcy5vcmcvYW5zaS1zdHlsZXMvLS9hbnNpLXN0eWxlcy0xLjEuMC50Z3oiLAorICAg
ICAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS02dXkvWnMxd2FJSjJDeTlHa1ZncmoxWFhwOTQ9IiwK
KyAgICAgICAgICAiZGV2IjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICAiY2hhbGsiOiB7Cisg
ICAgICAgICAgInZlcnNpb24iOiAiMC41LjEiLAorICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRw
czovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jaGFsay8tL2NoYWxrLTAuNS4xLnRneiIsCisgICAgICAg
ICAgImludGVncml0eSI6ICJzaGExLVpqczZaSXRvdFYwRWFRMUpGbnFvTjRXUElYUT0iLAorICAg
ICAgICAgICJkZXYiOiB0cnVlLAorICAgICAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAgICAg
ICJhbnNpLXN0eWxlcyI6ICIxLjEuMCIsCisgICAgICAgICAgICAiZXNjYXBlLXN0cmluZy1yZWdl
eHAiOiAiMS4wLjUiLAorICAgICAgICAgICAgImhhcy1hbnNpIjogIjAuMS4wIiwKKyAgICAgICAg
ICAgICJzdHJpcC1hbnNpIjogIjAuMy4wIiwKKyAgICAgICAgICAgICJzdXBwb3J0cy1jb2xvciI6
ICIwLjIuMCIKKyAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgICJmcy1leHRyYSI6IHsK
KyAgICAgICAgICAidmVyc2lvbiI6ICIwLjMwLjAiLAorICAgICAgICAgICJyZXNvbHZlZCI6ICJo
dHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9mcy1leHRyYS8tL2ZzLWV4dHJhLTAuMzAuMC50Z3oi
LAorICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS04alAvekFqVTJuMURMYXBFbDNhWW5iSGZr
L0E9IiwKKyAgICAgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICAgICAicmVxdWlyZXMiOiB7Cisg
ICAgICAgICAgICAiZ3JhY2VmdWwtZnMiOiAiNC4xLjExIiwKKyAgICAgICAgICAgICJqc29uZmls
ZSI6ICIyLjQuMCIsCisgICAgICAgICAgICAia2xhdyI6ICIxLjMuMSIsCisgICAgICAgICAgICAi
cGF0aC1pcy1hYnNvbHV0ZSI6ICIxLjAuMSIsCisgICAgICAgICAgICAicmltcmFmIjogIjIuNi4x
IgorICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgImhhcy1hbnNpIjogeworICAgICAg
ICAgICJ2ZXJzaW9uIjogIjAuMS4wIiwKKyAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9y
ZWdpc3RyeS5ucG1qcy5vcmcvaGFzLWFuc2kvLS9oYXMtYW5zaS0wLjEuMC50Z3oiLAorICAgICAg
ICAgICJpbnRlZ3JpdHkiOiAic2hhMS1oUEpscXVqQTVxaUtFdGNDS0pTM1ZvaVV4aTQ9IiwKKyAg
ICAgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICAg
ICAiYW5zaS1yZWdleCI6ICIwLjIuMSIKKyAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAg
ICJzb3VyY2UtbWFwIjogeworICAgICAgICAgICJ2ZXJzaW9uIjogIjAuNC40IiwKKyAgICAgICAg
ICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc291cmNlLW1hcC8tL3Nv
dXJjZS1tYXAtMC40LjQudGd6IiwKKyAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTEtNjZUMTJw
d055Wm5lYUFNdGkwOTJGelpTQTJzPSIsCisgICAgICAgICAgImRldiI6IHRydWUsCisgICAgICAg
ICAgInJlcXVpcmVzIjogeworICAgICAgICAgICAgImFtZGVmaW5lIjogIjEuMC4xIgorICAgICAg
ICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgInN0cmlwLWFuc2kiOiB7CisgICAgICAgICAgInZl
cnNpb24iOiAiMC4zLjAiLAorICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5
Lm5wbWpzLm9yZy9zdHJpcC1hbnNpLy0vc3RyaXAtYW5zaS0wLjMuMC50Z3oiLAorICAgICAgICAg
ICJpbnRlZ3JpdHkiOiAic2hhMS1KZlNPb2l5bmtZZnpGMHBOdUhXVFI3c1NZaUE9IiwKKyAgICAg
ICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICAgICAi
YW5zaS1yZWdleCI6ICIwLjIuMSIKKyAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgICJz
dXBwb3J0cy1jb2xvciI6IHsKKyAgICAgICAgICAidmVyc2lvbiI6ICIwLjIuMCIsCisgICAgICAg
ICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N1cHBvcnRzLWNvbG9y
Ly0vc3VwcG9ydHMtY29sb3ItMC4yLjAudGd6IiwKKyAgICAgICAgICAiaW50ZWdyaXR5IjogInNo
YTEtMlMzaWFVNno5bk1qbHoxNjQ5aTFXMHdpR1FvPSIsCisgICAgICAgICAgImRldiI6IHRydWUK
KyAgICAgICAgfQorICAgICAgfQorICAgIH0sCisgICAgImZheWUtd2Vic29ja2V0IjogeworICAg
ICAgInZlcnNpb24iOiAiMC4xMC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lz
dHJ5Lm5wbWpzLm9yZy9mYXllLXdlYnNvY2tldC8tL2ZheWUtd2Vic29ja2V0LTAuMTAuMC50Z3oi
LAorICAgICAgImludGVncml0eSI6ICJzaGExLVRra3ZqUVRmdHZpUUExQi9idHZ5MVFIbnh2UT0i
LAorICAgICAgImRldiI6IHRydWUsCisgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICJ3ZWJz
b2NrZXQtZHJpdmVyIjogIjAuNi41IgorICAgICAgfQorICAgIH0sCisgICAgImZiLXdhdGNobWFu
IjogeworICAgICAgInZlcnNpb24iOiAiMi4wLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBz
Oi8vcmVnaXN0cnkubnBtanMub3JnL2ZiLXdhdGNobWFuLy0vZmItd2F0Y2htYW4tMi4wLjAudGd6
IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1WT21yOTkraThtelpzV05zV0l3YS9BWGVYVmc9
IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgInJlcXVpcmVzIjogeworICAgICAgICAiYnNl
ciI6ICIyLjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJmaWd1cmVzIjogeworICAgICAgInZl
cnNpb24iOiAiMS43LjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBt
anMub3JnL2ZpZ3VyZXMvLS9maWd1cmVzLTEuNy4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5Ijog
InNoYTEteStIanIvenh6VVM0REszKzBvM0hrNmx3SFM0PSIsCisgICAgICAiZGV2IjogdHJ1ZSwK
KyAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAgImVzY2FwZS1zdHJpbmctcmVnZXhwIjogIjEu
MC41IiwKKyAgICAgICAgIm9iamVjdC1hc3NpZ24iOiAiNC4xLjEiCisgICAgICB9CisgICAgfSwK
KyAgICAiZmlsZW5hbWUtcmVnZXgiOiB7CisgICAgICAidmVyc2lvbiI6ICIyLjAuMSIsCisgICAg
ICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZmlsZW5hbWUtcmVnZXgv
LS9maWxlbmFtZS1yZWdleC0yLjAuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLXdj
UzV2dVBnbHlYZHNRYTNYQjR3SCtMeGl5WT0iLAorICAgICAgImRldiI6IHRydWUKKyAgICB9LAor
ICAgICJmaWxlc2l6ZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMuNS4xMCIsCisgICAgICAicmVz
b2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZmlsZXNpemUvLS9maWxlc2l6ZS0z
LjUuMTAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS0vSStpUGR0TytlWGdxMjRlWlBa
NW9rcFdkaDg9IiwKKyAgICAgICJkZXYiOiB0cnVlCisgICAgfSwKKyAgICAiZmlsbC1yYW5nZSI6
IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuMi4zIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczov
L3JlZ2lzdHJ5Lm5wbWpzLm9yZy9maWxsLXJhbmdlLy0vZmlsbC1yYW5nZS0yLjIuMy50Z3oiLAor
ICAgICAgImludGVncml0eSI6ICJzaGExLVVMZDkvWDVHbThkSkpIQ1dOcG4rZW9TRnB5TT0iLAor
ICAgICAgImRldiI6IHRydWUsCisgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICJpcy1udW1i
ZXIiOiAiMi4xLjAiLAorICAgICAgICAiaXNvYmplY3QiOiAiMi4xLjAiLAorICAgICAgICAicmFu
ZG9tYXRpYyI6ICIxLjEuNyIsCisgICAgICAgICJyZXBlYXQtZWxlbWVudCI6ICIxLjEuMiIsCisg
ICAgICAgICJyZXBlYXQtc3RyaW5nIjogIjEuNi4xIgorICAgICAgfQorICAgIH0sCisgICAgImZp
bmFsaGFuZGxlciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMC40IiwKKyAgICAgICJyZXNvbHZl
ZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9maW5hbGhhbmRsZXIvLS9maW5hbGhhbmRs
ZXItMS4wLjQudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTE2bC9yOFJnemxYS21G
T2hacEhCenR2eWUrbEFoQzVTVTdoWGF2bmVyQzlVZlpxWnh4WGwzQnpMOE1oZmZQVDNrRjYxbGo5
T2F2MkxLRXpoMGVpN3RnPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAicmVxdWlyZXMi
OiB7CisgICAgICAgICJkZWJ1ZyI6ICIyLjYuOCIsCisgICAgICAgICJlbmNvZGV1cmwiOiAiMS4w
LjEiLAorICAgICAgICAiZXNjYXBlLWh0bWwiOiAiMS4wLjMiLAorICAgICAgICAib24tZmluaXNo
ZWQiOiAiMi4zLjAiLAorICAgICAgICAicGFyc2V1cmwiOiAiMS4zLjEiLAorICAgICAgICAic3Rh
dHVzZXMiOiAiMS4zLjEiLAorICAgICAgICAidW5waXBlIjogIjEuMC4wIgorICAgICAgfQorICAg
IH0sCisgICAgImZpbmQtaW5kZXgiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjEuMCIsCisgICAg
ICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZmluZC1pbmRleC8tL2Zp
bmQtaW5kZXgtMS4xLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1Vd0I4ZWMwd0JB
MW9GdGVVV09pRGZWeFhCZTg9IiwKKyAgICAgICJkZXYiOiB0cnVlCisgICAgfSwKKyAgICAiZmlu
ZC11cCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuMS4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJo
dHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9maW5kLXVwLy0vZmluZC11cC0yLjEuMC50Z3oiLAor
ICAgICAgImludGVncml0eSI6ICJzaGExLVJkRzM1UWJIRjkzVWduZGFLM2VTQ2p3TVY2Yz0iLAor
ICAgICAgImRldiI6IHRydWUsCisgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICJsb2NhdGUt
cGF0aCI6ICIyLjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJmaW5kdXAtc3luYyI6IHsKKyAg
ICAgICJ2ZXJzaW9uIjogIjAuNC4zIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lz
dHJ5Lm5wbWpzLm9yZy9maW5kdXAtc3luYy8tL2ZpbmR1cC1zeW5jLTAuNC4zLnRneiIsCisgICAg
ICAiaW50ZWdyaXR5IjogInNoYTEtUUFRNUtlZThZSzN3dC9TQ2ZFeHVkYURleWhJPSIsCisgICAg
ICAiZGV2IjogdHJ1ZSwKKyAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAgImRldGVjdC1maWxl
IjogIjAuMS4wIiwKKyAgICAgICAgImlzLWdsb2IiOiAiMi4wLjEiLAorICAgICAgICAibWljcm9t
YXRjaCI6ICIyLjMuMTEiLAorICAgICAgICAicmVzb2x2ZS1kaXIiOiAiMC4xLjEiCisgICAgICB9
CisgICAgfSwKKyAgICAiZmlyZXdvcm0iOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjcuMSIsCisg
ICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZmlyZXdvcm0vLS9m
aXJld29ybS0wLjcuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLXpQSVBlVUh4Q0ln
L3pkdVpPRDIrYmhoaHgxZz0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAicmVxdWlyZXMi
OiB7CisgICAgICAgICJhc3luYyI6ICIwLjIuMTAiLAorICAgICAgICAiaXMtdHlwZSI6ICIwLjAu
MSIsCisgICAgICAgICJsb2Rhc2guZGVib3VuY2UiOiAiMy4xLjEiLAorICAgICAgICAibG9kYXNo
LmZsYXR0ZW4iOiAiMy4wLjIiLAorICAgICAgICAibWluaW1hdGNoIjogIjMuMC40IgorICAgICAg
fSwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJhc3luYyI6IHsKKyAgICAgICAg
ICAidmVyc2lvbiI6ICIwLjIuMTAiLAorICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3Jl
Z2lzdHJ5Lm5wbWpzLm9yZy9hc3luYy8tL2FzeW5jLTAuMi4xMC50Z3oiLAorICAgICAgICAgICJp
bnRlZ3JpdHkiOiAic2hhMS10cnZnc0dkTG5YR1hDTW80M293amZMVW13OUU9IiwKKyAgICAgICAg
ICAiZGV2IjogdHJ1ZQorICAgICAgICB9CisgICAgICB9CisgICAgfSwKKyAgICAiZm9yLWluIjog
eworICAgICAgInZlcnNpb24iOiAiMS4wLjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8v
cmVnaXN0cnkubnBtanMub3JnL2Zvci1pbi8tL2Zvci1pbi0xLjAuMi50Z3oiLAorICAgICAgImlu
dGVncml0eSI6ICJzaGExLWdRYU5LVnFCUXV3S3h5Ykc0aUFNTVB0dFhvQT0iLAorICAgICAgImRl
diI6IHRydWUKKyAgICB9LAorICAgICJmb3Itb3duIjogeworICAgICAgInZlcnNpb24iOiAiMC4x
LjUiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Zvci1v
d24vLS9mb3Itb3duLTAuMS41LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtVW1YR2dh
VHlsTnE3OFh5VkNiWjJPcWhGRU00PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJyZXF1
aXJlcyI6IHsKKyAgICAgICAgImZvci1pbiI6ICIxLjAuMiIKKyAgICAgIH0KKyAgICB9LAorICAg
ICJmb3J3YXJkZWQiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjEuMCIsCisgICAgICAicmVzb2x2
ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZm9yd2FyZGVkLy0vZm9yd2FyZGVkLTAu
MS4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtR2UrWWRNU3VIQ2w3endlUDNtT2dt
MmFvUTJNPSIsCisgICAgICAiZGV2IjogdHJ1ZQorICAgIH0sCisgICAgImZyZXNoIjogeworICAg
ICAgInZlcnNpb24iOiAiMC41LjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0
cnkubnBtanMub3JnL2ZyZXNoLy0vZnJlc2gtMC41LjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHki
OiAic2hhMS05SFRLWG1xU1J0YjlqZ2xUejZtNXlBV3ZwNDQ9IiwKKyAgICAgICJkZXYiOiB0cnVl
CisgICAgfSwKKyAgICAiZnMtZXhpc3RzLXN5bmMiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjEu
MCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZnMtZXhp
c3RzLXN5bmMvLS9mcy1leGlzdHMtc3luYy0wLjEuMC50Z3oiLAorICAgICAgImludGVncml0eSI6
ICJzaGExLW1DMW9rNitSam5MUWpleWVoblAvSzFxTmF0MD0iLAorICAgICAgImRldiI6IHRydWUK
KyAgICB9LAorICAgICJmcy1leHRyYSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMuMC4xIiwKKyAg
ICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9mcy1leHRyYS8tL2Zz
LWV4dHJhLTMuMC4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtTjVUemVNV0xOQzZu
MjdzakNWRUp4TE8ySXBFPSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJyZXF1aXJlcyI6
IHsKKyAgICAgICAgImdyYWNlZnVsLWZzIjogIjQuMS4xMSIsCisgICAgICAgICJqc29uZmlsZSI6
ICIzLjAuMSIsCisgICAgICAgICJ1bml2ZXJzYWxpZnkiOiAiMC4xLjEiCisgICAgICB9LAorICAg
ICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImpzb25maWxlIjogeworICAgICAgICAgICJ2
ZXJzaW9uIjogIjMuMC4xIiwKKyAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3Ry
eS5ucG1qcy5vcmcvanNvbmZpbGUvLS9qc29uZmlsZS0zLjAuMS50Z3oiLAorICAgICAgICAgICJp
bnRlZ3JpdHkiOiAic2hhMS1wZXpHOWw5VDltTEVRVngyZGFBekhRbVM3R1k9IiwKKyAgICAgICAg
ICAiZGV2IjogdHJ1ZSwKKyAgICAgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICAgICAiZ3Jh
Y2VmdWwtZnMiOiAiNC4xLjExIgorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAg
IH0sCisgICAgImZzLXJlYWRkaXItcmVjdXJzaXZlIjogeworICAgICAgInZlcnNpb24iOiAiMC4x
LjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2ZzLXJl
YWRkaXItcmVjdXJzaXZlLy0vZnMtcmVhZGRpci1yZWN1cnNpdmUtMC4xLjIudGd6IiwKKyAgICAg
ICJpbnRlZ3JpdHkiOiAic2hhMS1NVnRQdU1IS1c0eEgzdjd6R2RCejJ0TldnRms9IiwKKyAgICAg
ICJkZXYiOiB0cnVlCisgICAgfSwKKyAgICAiZnMtdHJlZS1kaWZmIjogeworICAgICAgInZlcnNp
b24iOiAiMC41LjYiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMu
b3JnL2ZzLXRyZWUtZGlmZi8tL2ZzLXRyZWUtZGlmZi0wLjUuNi50Z3oiLAorICAgICAgImludGVn
cml0eSI6ICJzaGExLU5DWmxkSjZOeWtCb0FMWnlKb3lQVUhQejVpTT0iLAorICAgICAgImRldiI6
IHRydWUsCisgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICJoZWltZGFsbGpzLWxvZ2dlciI6
ICIwLjEuOSIsCisgICAgICAgICJvYmplY3QtYXNzaWduIjogIjQuMS4xIiwKKyAgICAgICAgInBh
dGgtcG9zaXgiOiAiMS4wLjAiLAorICAgICAgICAic3ltbGluay1vci1jb3B5IjogIjEuMS44Igor
ICAgICAgfQorICAgIH0sCisgICAgImZzLnJlYWxwYXRoIjogeworICAgICAgInZlcnNpb24iOiAi
MS4wLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Zz
LnJlYWxwYXRoLy0vZnMucmVhbHBhdGgtMS4wLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAi
c2hhMS1GUVN0SlNNVmpLcEEyMG9uaDhzQlFSbVU2azg9IiwKKyAgICAgICJkZXYiOiB0cnVlCisg
ICAgfSwKKyAgICAiZnNldmVudHMiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjEuMiIsCisgICAg
ICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZnNldmVudHMvLS9mc2V2
ZW50cy0xLjEuMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItU240NEU1d1FXNGJU
SFh2UW12U0h3cWJ1aVh0ZHVENlJyam0yWnRVRUdieXJpZytuVUgzdC9RRDRNNC9aWFZpWTU1NlRC
cFJnWmtITER4M0p4UHd4aXc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJvcHRpb25h
bCI6IHRydWUsCisgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICJuYW4iOiAiMi42LjIiLAor
ICAgICAgICAibm9kZS1wcmUtZ3lwIjogIjAuNi4zNiIKKyAgICAgIH0sCisgICAgICAiZGVwZW5k
ZW5jaWVzIjogeworICAgICAgICAiYWJicmV2IjogeworICAgICAgICAgICJ2ZXJzaW9uIjogIjEu
MS4wIiwKKyAgICAgICAgICAiYnVuZGxlZCI6IHRydWUsCisgICAgICAgICAgImRldiI6IHRydWUs
CisgICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICAiYWp2Ijog
eworICAgICAgICAgICJ2ZXJzaW9uIjogIjQuMTEuOCIsCisgICAgICAgICAgImJ1bmRsZWQiOiB0
cnVlLAorICAgICAgICAgICJkZXYiOiB0cnVlLAorICAgICAgICAgICJvcHRpb25hbCI6IHRydWUs
CisgICAgICAgICAgInJlcXVpcmVzIjogeworICAgICAgICAgICAgImNvIjogIjQuNi4wIiwKKyAg
ICAgICAgICAgICJqc29uLXN0YWJsZS1zdHJpbmdpZnkiOiAiMS4wLjEiCisgICAgICAgICAgfQor
ICAgICAgICB9LAorICAgICAgICAiYW5zaS1yZWdleCI6IHsKKyAgICAgICAgICAidmVyc2lvbiI6
ICIyLjEuMSIsCisgICAgICAgICAgImJ1bmRsZWQiOiB0cnVlLAorICAgICAgICAgICJkZXYiOiB0
cnVlCisgICAgICAgIH0sCisgICAgICAgICJhcHJvYmEiOiB7CisgICAgICAgICAgInZlcnNpb24i
OiAiMS4xLjEiLAorICAgICAgICAgICJidW5kbGVkIjogdHJ1ZSwKKyAgICAgICAgICAiZGV2Ijog
dHJ1ZSwKKyAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgICJh
cmUtd2UtdGhlcmUteWV0IjogeworICAgICAgICAgICJ2ZXJzaW9uIjogIjEuMS40IiwKKyAgICAg
ICAgICAiYnVuZGxlZCI6IHRydWUsCisgICAgICAgICAgImRldiI6IHRydWUsCisgICAgICAgICAg
Im9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICAgICAi
ZGVsZWdhdGVzIjogIjEuMC4wIiwKKyAgICAgICAgICAgICJyZWFkYWJsZS1zdHJlYW0iOiAiMi4y
LjkiCisgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICAiYXNuMSI6IHsKKyAgICAgICAg
ICAidmVyc2lvbiI6ICIwLjIuMyIsCisgICAgICAgICAgImJ1bmRsZWQiOiB0cnVlLAorICAgICAg
ICAgICJkZXYiOiB0cnVlLAorICAgICAgICAgICJvcHRpb25hbCI6IHRydWUKKyAgICAgICAgfSwK
KyAgICAgICAgImFzc2VydC1wbHVzIjogeworICAgICAgICAgICJ2ZXJzaW9uIjogIjAuMi4wIiwK
KyAgICAgICAgICAiYnVuZGxlZCI6IHRydWUsCisgICAgICAgICAgImRldiI6IHRydWUsCisgICAg
ICAgICAgIm9wdGlvbmFsIjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICAiYXN5bmNraXQiOiB7
CisgICAgICAgICAgInZlcnNpb24iOiAiMC40LjAiLAorICAgICAgICAgICJidW5kbGVkIjogdHJ1
ZSwKKyAgICAgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCisg
ICAgICAgIH0sCisgICAgICAgICJhd3Mtc2lnbjIiOiB7CisgICAgICAgICAgInZlcnNpb24iOiAi
MC42LjAiLAorICAgICAgICAgICJidW5kbGVkIjogdHJ1ZSwKKyAgICAgICAgICAiZGV2IjogdHJ1
ZSwKKyAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgICJhd3M0
IjogeworICAgICAgICAgICJ2ZXJzaW9uIjogIjEuNi4wIiwKKyAgICAgICAgICAiYnVuZGxlZCI6
IHRydWUsCisgICAgICAgICAgImRldiI6IHRydWUsCisgICAgICAgICAgIm9wdGlvbmFsIjogdHJ1
ZQorICAgICAgICB9LAorICAgICAgICAiYmFsYW5jZWQtbWF0Y2giOiB7CisgICAgICAgICAgInZl
cnNpb24iOiAiMC40LjIiLAorICAgICAgICAgICJidW5kbGVkIjogdHJ1ZSwKKyAgICAgICAgICAi
ZGV2IjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICAiYmNyeXB0LXBia2RmIjogeworICAgICAg
ICAgICJ2ZXJzaW9uIjogIjEuMC4xIiwKKyAgICAgICAgICAiYnVuZGxlZCI6IHRydWUsCisgICAg
ICAgICAgImRldiI6IHRydWUsCisgICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICAg
ICAicmVxdWlyZXMiOiB7CisgICAgICAgICAgICAidHdlZXRuYWNsIjogIjAuMTQuNSIKKyAgICAg
ICAgICB9CisgICAgICAgIH0sCisgICAgICAgICJibG9jay1zdHJlYW0iOiB7CisgICAgICAgICAg
InZlcnNpb24iOiAiMC4wLjkiLAorICAgICAgICAgICJidW5kbGVkIjogdHJ1ZSwKKyAgICAgICAg
ICAiZGV2IjogdHJ1ZSwKKyAgICAgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICAgICAiaW5o
ZXJpdHMiOiAiMi4wLjMiCisgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICAiYm9vbSI6
IHsKKyAgICAgICAgICAidmVyc2lvbiI6ICIyLjEwLjEiLAorICAgICAgICAgICJidW5kbGVkIjog
dHJ1ZSwKKyAgICAgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICAgICAicmVxdWlyZXMiOiB7Cisg
ICAgICAgICAgICAiaG9layI6ICIyLjE2LjMiCisgICAgICAgICAgfQorICAgICAgICB9LAorICAg
ICAgICAiYnJhY2UtZXhwYW5zaW9uIjogeworICAgICAgICAgICJ2ZXJzaW9uIjogIjEuMS43IiwK
KyAgICAgICAgICAiYnVuZGxlZCI6IHRydWUsCisgICAgICAgICAgImRldiI6IHRydWUsCisgICAg
ICAgICAgInJlcXVpcmVzIjogeworICAgICAgICAgICAgImJhbGFuY2VkLW1hdGNoIjogIjAuNC4y
IiwKKyAgICAgICAgICAgICJjb25jYXQtbWFwIjogIjAuMC4xIgorICAgICAgICAgIH0KKyAgICAg
ICAgfSwKKyAgICAgICAgImJ1ZmZlci1zaGltcyI6IHsKKyAgICAgICAgICAidmVyc2lvbiI6ICIx
LjAuMCIsCisgICAgICAgICAgImJ1bmRsZWQiOiB0cnVlLAorICAgICAgICAgICJkZXYiOiB0cnVl
CisgICAgICAgIH0sCisgICAgICAgICJjYXNlbGVzcyI6IHsKKyAgICAgICAgICAidmVyc2lvbiI6
ICIwLjEyLjAiLAorICAgICAgICAgICJidW5kbGVkIjogdHJ1ZSwKKyAgICAgICAgICAiZGV2Ijog
dHJ1ZSwKKyAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgICJj
byI6IHsKKyAgICAgICAgICAidmVyc2lvbiI6ICI0LjYuMCIsCisgICAgICAgICAgImJ1bmRsZWQi
OiB0cnVlLAorICAgICAgICAgICJkZXYiOiB0cnVlLAorICAgICAgICAgICJvcHRpb25hbCI6IHRy
dWUKKyAgICAgICAgfSwKKyAgICAgICAgImNvZGUtcG9pbnQtYXQiOiB7CisgICAgICAgICAgInZl
cnNpb24iOiAiMS4xLjAiLAorICAgICAgICAgICJidW5kbGVkIjogdHJ1ZSwKKyAgICAgICAgICAi
ZGV2IjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICAiY29tYmluZWQtc3RyZWFtIjogeworICAg
ICAgICAgICJ2ZXJzaW9uIjogIjEuMC41IiwKKyAgICAgICAgICAiYnVuZGxlZCI6IHRydWUsCisg
ICAgICAgICAgImRldiI6IHRydWUsCisgICAgICAgICAgInJlcXVpcmVzIjogeworICAgICAgICAg
ICAgImRlbGF5ZWQtc3RyZWFtIjogIjEuMC4wIgorICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAg
ICAgICAgImNvbmNhdC1tYXAiOiB7CisgICAgICAgICAgInZlcnNpb24iOiAiMC4wLjEiLAorICAg
ICAgICAgICJidW5kbGVkIjogdHJ1ZSwKKyAgICAgICAgICAiZGV2IjogdHJ1ZQorICAgICAgICB9
LAorICAgICAgICAiY29uc29sZS1jb250cm9sLXN0cmluZ3MiOiB7CisgICAgICAgICAgInZlcnNp
b24iOiAiMS4xLjAiLAorICAgICAgICAgICJidW5kbGVkIjogdHJ1ZSwKKyAgICAgICAgICAiZGV2
IjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICAiY29yZS11dGlsLWlzIjogeworICAgICAgICAg
ICJ2ZXJzaW9uIjogIjEuMC4yIiwKKyAgICAgICAgICAiYnVuZGxlZCI6IHRydWUsCisgICAgICAg
ICAgImRldiI6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgImNyeXB0aWxlcyI6IHsKKyAgICAg
ICAgICAidmVyc2lvbiI6ICIyLjAuNSIsCisgICAgICAgICAgImJ1bmRsZWQiOiB0cnVlLAorICAg
ICAgICAgICJkZXYiOiB0cnVlLAorICAgICAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAg
ICAgInJlcXVpcmVzIjogeworICAgICAgICAgICAgImJvb20iOiAiMi4xMC4xIgorICAgICAgICAg
IH0KKyAgICAgICAgfSwKKyAgICAgICAgImRhc2hkYXNoIjogeworICAgICAgICAgICJ2ZXJzaW9u
IjogIjEuMTQuMSIsCisgICAgICAgICAgImJ1bmRsZWQiOiB0cnVlLAorICAgICAgICAgICJkZXYi
OiB0cnVlLAorICAgICAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAgICAgInJlcXVpcmVz
IjogeworICAgICAgICAgICAgImFzc2VydC1wbHVzIjogIjEuMC4wIgorICAgICAgICAgIH0sCisg
ICAgICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgICAgICJhc3NlcnQtcGx1cyI6IHsK
KyAgICAgICAgICAgICAgInZlcnNpb24iOiAiMS4wLjAiLAorICAgICAgICAgICAgICAiYnVuZGxl
ZCI6IHRydWUsCisgICAgICAgICAgICAgICJkZXYiOiB0cnVlLAorICAgICAgICAgICAgICAib3B0
aW9uYWwiOiB0cnVlCisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9LAorICAg
ICAgICAiZGVidWciOiB7CisgICAgICAgICAgInZlcnNpb24iOiAiMi42LjgiLAorICAgICAgICAg
ICJidW5kbGVkIjogdHJ1ZSwKKyAgICAgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICAgICAib3B0
aW9uYWwiOiB0cnVlLAorICAgICAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAgICAgICJtcyI6
ICIyLjAuMCIKKyAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgICJkZWVwLWV4dGVuZCI6
IHsKKyAgICAgICAgICAidmVyc2lvbiI6ICIwLjQuMiIsCisgICAgICAgICAgImJ1bmRsZWQiOiB0
cnVlLAorICAgICAgICAgICJkZXYiOiB0cnVlLAorICAgICAgICAgICJvcHRpb25hbCI6IHRydWUK
KyAgICAgICAgfSwKKyAgICAgICAgImRlbGF5ZWQtc3RyZWFtIjogeworICAgICAgICAgICJ2ZXJz
aW9uIjogIjEuMC4wIiwKKyAgICAgICAgICAiYnVuZGxlZCI6IHRydWUsCisgICAgICAgICAgImRl
diI6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgImRlbGVnYXRlcyI6IHsKKyAgICAgICAgICAi
dmVyc2lvbiI6ICIxLjAuMCIsCisgICAgICAgICAgImJ1bmRsZWQiOiB0cnVlLAorICAgICAgICAg
ICJkZXYiOiB0cnVlLAorICAgICAgICAgICJvcHRpb25hbCI6IHRydWUKKyAgICAgICAgfSwKKyAg
ICAgICAgImVjYy1qc2JuIjogeworICAgICAgICAgICJ2ZXJzaW9uIjogIjAuMS4xIiwKKyAgICAg
ICAgICAiYnVuZGxlZCI6IHRydWUsCisgICAgICAgICAgImRldiI6IHRydWUsCisgICAgICAgICAg
Im9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICAgICAi
anNibiI6ICIwLjEuMSIKKyAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgICJleHRlbmQi
OiB7CisgICAgICAgICAgInZlcnNpb24iOiAiMy4wLjEiLAorICAgICAgICAgICJidW5kbGVkIjog
dHJ1ZSwKKyAgICAgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICAgICAib3B0aW9uYWwiOiB0cnVl
CisgICAgICAgIH0sCisgICAgICAgICJleHRzcHJpbnRmIjogeworICAgICAgICAgICJ2ZXJzaW9u
IjogIjEuMC4yIiwKKyAgICAgICAgICAiYnVuZGxlZCI6IHRydWUsCisgICAgICAgICAgImRldiI6
IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgImZvcmV2ZXItYWdlbnQiOiB7CisgICAgICAgICAg
InZlcnNpb24iOiAiMC42LjEiLAorICAgICAgICAgICJidW5kbGVkIjogdHJ1ZSwKKyAgICAgICAg
ICAiZGV2IjogdHJ1ZSwKKyAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCisgICAgICAgIH0sCisg
ICAgICAgICJmb3JtLWRhdGEiOiB7CisgICAgICAgICAgInZlcnNpb24iOiAiMi4xLjQiLAorICAg
ICAgICAgICJidW5kbGVkIjogdHJ1ZSwKKyAgICAgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICAg
ICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAgICAg
ICJhc3luY2tpdCI6ICIwLjQuMCIsCisgICAgICAgICAgICAiY29tYmluZWQtc3RyZWFtIjogIjEu
MC41IiwKKyAgICAgICAgICAgICJtaW1lLXR5cGVzIjogIjIuMS4xNSIKKyAgICAgICAgICB9Cisg
ICAgICAgIH0sCisgICAgICAgICJmcy5yZWFscGF0aCI6IHsKKyAgICAgICAgICAidmVyc2lvbiI6
ICIxLjAuMCIsCisgICAgICAgICAgImJ1bmRsZWQiOiB0cnVlLAorICAgICAgICAgICJkZXYiOiB0
cnVlCisgICAgICAgIH0sCisgICAgICAgICJmc3RyZWFtIjogeworICAgICAgICAgICJ2ZXJzaW9u
IjogIjEuMC4xMSIsCisgICAgICAgICAgImJ1bmRsZWQiOiB0cnVlLAorICAgICAgICAgICJkZXYi
OiB0cnVlLAorICAgICAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAgICAgICJncmFjZWZ1bC1m
cyI6ICI0LjEuMTEiLAorICAgICAgICAgICAgImluaGVyaXRzIjogIjIuMC4zIiwKKyAgICAgICAg
ICAgICJta2RpcnAiOiAiMC41LjEiLAorICAgICAgICAgICAgInJpbXJhZiI6ICIyLjYuMSIKKyAg
ICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgICJmc3RyZWFtLWlnbm9yZSI6IHsKKyAgICAg
ICAgICAidmVyc2lvbiI6ICIxLjAuNSIsCisgICAgICAgICAgImJ1bmRsZWQiOiB0cnVlLAorICAg
ICAgICAgICJkZXYiOiB0cnVlLAorICAgICAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAg
ICAgInJlcXVpcmVzIjogeworICAgICAgICAgICAgImZzdHJlYW0iOiAiMS4wLjExIiwKKyAgICAg
ICAgICAgICJpbmhlcml0cyI6ICIyLjAuMyIsCisgICAgICAgICAgICAibWluaW1hdGNoIjogIjMu
MC40IgorICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgImdhdWdlIjogeworICAgICAg
ICAgICJ2ZXJzaW9uIjogIjIuNy40IiwKKyAgICAgICAgICAiYnVuZGxlZCI6IHRydWUsCisgICAg
ICAgICAgImRldiI6IHRydWUsCisgICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICAg
ICAicmVxdWlyZXMiOiB7CisgICAgICAgICAgICAiYXByb2JhIjogIjEuMS4xIiwKKyAgICAgICAg
ICAgICJjb25zb2xlLWNvbnRyb2wtc3RyaW5ncyI6ICIxLjEuMCIsCisgICAgICAgICAgICAiaGFz
LXVuaWNvZGUiOiAiMi4wLjEiLAorICAgICAgICAgICAgIm9iamVjdC1hc3NpZ24iOiAiNC4xLjEi
LAorICAgICAgICAgICAgInNpZ25hbC1leGl0IjogIjMuMC4yIiwKKyAgICAgICAgICAgICJzdHJp
bmctd2lkdGgiOiAiMS4wLjIiLAorICAgICAgICAgICAgInN0cmlwLWFuc2kiOiAiMy4wLjEiLAor
ICAgICAgICAgICAgIndpZGUtYWxpZ24iOiAiMS4xLjIiCisgICAgICAgICAgfQorICAgICAgICB9
LAorICAgICAgICAiZ2V0cGFzcyI6IHsKKyAgICAgICAgICAidmVyc2lvbiI6ICIwLjEuNyIsCisg
ICAgICAgICAgImJ1bmRsZWQiOiB0cnVlLAorICAgICAgICAgICJkZXYiOiB0cnVlLAorICAgICAg
ICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAgICAgInJlcXVpcmVzIjogeworICAgICAgICAg
ICAgImFzc2VydC1wbHVzIjogIjEuMC4wIgorICAgICAgICAgIH0sCisgICAgICAgICAgImRlcGVu
ZGVuY2llcyI6IHsKKyAgICAgICAgICAgICJhc3NlcnQtcGx1cyI6IHsKKyAgICAgICAgICAgICAg
InZlcnNpb24iOiAiMS4wLjAiLAorICAgICAgICAgICAgICAiYnVuZGxlZCI6IHRydWUsCisgICAg
ICAgICAgICAgICJkZXYiOiB0cnVlLAorICAgICAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCisg
ICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICAiZ2xvYiI6IHsK
KyAgICAgICAgICAidmVyc2lvbiI6ICI3LjEuMiIsCisgICAgICAgICAgImJ1bmRsZWQiOiB0cnVl
LAorICAgICAgICAgICJkZXYiOiB0cnVlLAorICAgICAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAg
ICAgICAgICJmcy5yZWFscGF0aCI6ICIxLjAuMCIsCisgICAgICAgICAgICAiaW5mbGlnaHQiOiAi
MS4wLjYiLAorICAgICAgICAgICAgImluaGVyaXRzIjogIjIuMC4zIiwKKyAgICAgICAgICAgICJt
aW5pbWF0Y2giOiAiMy4wLjQiLAorICAgICAgICAgICAgIm9uY2UiOiAiMS40LjAiLAorICAgICAg
ICAgICAgInBhdGgtaXMtYWJzb2x1dGUiOiAiMS4wLjEiCisgICAgICAgICAgfQorICAgICAgICB9
LAorICAgICAgICAiZ3JhY2VmdWwtZnMiOiB7CisgICAgICAgICAgInZlcnNpb24iOiAiNC4xLjEx
IiwKKyAgICAgICAgICAiYnVuZGxlZCI6IHRydWUsCisgICAgICAgICAgImRldiI6IHRydWUKKyAg
ICAgICAgfSwKKyAgICAgICAgImhhci1zY2hlbWEiOiB7CisgICAgICAgICAgInZlcnNpb24iOiAi
MS4wLjUiLAorICAgICAgICAgICJidW5kbGVkIjogdHJ1ZSwKKyAgICAgICAgICAiZGV2IjogdHJ1
ZSwKKyAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgICJoYXIt
dmFsaWRhdG9yIjogeworICAgICAgICAgICJ2ZXJzaW9uIjogIjQuMi4xIiwKKyAgICAgICAgICAi
YnVuZGxlZCI6IHRydWUsCisgICAgICAgICAgImRldiI6IHRydWUsCisgICAgICAgICAgIm9wdGlv
bmFsIjogdHJ1ZSwKKyAgICAgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICAgICAiYWp2Ijog
IjQuMTEuOCIsCisgICAgICAgICAgICAiaGFyLXNjaGVtYSI6ICIxLjAuNSIKKyAgICAgICAgICB9
CisgICAgICAgIH0sCisgICAgICAgICJoYXMtdW5pY29kZSI6IHsKKyAgICAgICAgICAidmVyc2lv
biI6ICIyLjAuMSIsCisgICAgICAgICAgImJ1bmRsZWQiOiB0cnVlLAorICAgICAgICAgICJkZXYi
OiB0cnVlLAorICAgICAgICAgICJvcHRpb25hbCI6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAg
Imhhd2siOiB7CisgICAgICAgICAgInZlcnNpb24iOiAiMy4xLjMiLAorICAgICAgICAgICJidW5k
bGVkIjogdHJ1ZSwKKyAgICAgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICAgICAib3B0aW9uYWwi
OiB0cnVlLAorICAgICAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAgICAgICJib29tIjogIjIu
MTAuMSIsCisgICAgICAgICAgICAiY3J5cHRpbGVzIjogIjIuMC41IiwKKyAgICAgICAgICAgICJo
b2VrIjogIjIuMTYuMyIsCisgICAgICAgICAgICAic250cCI6ICIxLjAuOSIKKyAgICAgICAgICB9
CisgICAgICAgIH0sCisgICAgICAgICJob2VrIjogeworICAgICAgICAgICJ2ZXJzaW9uIjogIjIu
MTYuMyIsCisgICAgICAgICAgImJ1bmRsZWQiOiB0cnVlLAorICAgICAgICAgICJkZXYiOiB0cnVl
CisgICAgICAgIH0sCisgICAgICAgICJodHRwLXNpZ25hdHVyZSI6IHsKKyAgICAgICAgICAidmVy
c2lvbiI6ICIxLjEuMSIsCisgICAgICAgICAgImJ1bmRsZWQiOiB0cnVlLAorICAgICAgICAgICJk
ZXYiOiB0cnVlLAorICAgICAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAgICAgInJlcXVp
cmVzIjogeworICAgICAgICAgICAgImFzc2VydC1wbHVzIjogIjAuMi4wIiwKKyAgICAgICAgICAg
ICJqc3ByaW0iOiAiMS40LjAiLAorICAgICAgICAgICAgInNzaHBrIjogIjEuMTMuMCIKKyAgICAg
ICAgICB9CisgICAgICAgIH0sCisgICAgICAgICJpbmZsaWdodCI6IHsKKyAgICAgICAgICAidmVy
c2lvbiI6ICIxLjAuNiIsCisgICAgICAgICAgImJ1bmRsZWQiOiB0cnVlLAorICAgICAgICAgICJk
ZXYiOiB0cnVlLAorICAgICAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAgICAgICJvbmNlIjog
IjEuNC4wIiwKKyAgICAgICAgICAgICJ3cmFwcHkiOiAiMS4wLjIiCisgICAgICAgICAgfQorICAg
ICAgICB9LAorICAgICAgICAiaW5oZXJpdHMiOiB7CisgICAgICAgICAgInZlcnNpb24iOiAiMi4w
LjMiLAorICAgICAgICAgICJidW5kbGVkIjogdHJ1ZSwKKyAgICAgICAgICAiZGV2IjogdHJ1ZQor
ICAgICAgICB9LAorICAgICAgICAiaW5pIjogeworICAgICAgICAgICJ2ZXJzaW9uIjogIjEuMy40
IiwKKyAgICAgICAgICAiYnVuZGxlZCI6IHRydWUsCisgICAgICAgICAgImRldiI6IHRydWUsCisg
ICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICAiaXMtZnVsbHdp
ZHRoLWNvZGUtcG9pbnQiOiB7CisgICAgICAgICAgInZlcnNpb24iOiAiMS4wLjAiLAorICAgICAg
ICAgICJidW5kbGVkIjogdHJ1ZSwKKyAgICAgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICAgICAi
cmVxdWlyZXMiOiB7CisgICAgICAgICAgICAibnVtYmVyLWlzLW5hbiI6ICIxLjAuMSIKKyAgICAg
ICAgICB9CisgICAgICAgIH0sCisgICAgICAgICJpcy10eXBlZGFycmF5IjogeworICAgICAgICAg
ICJ2ZXJzaW9uIjogIjEuMC4wIiwKKyAgICAgICAgICAiYnVuZGxlZCI6IHRydWUsCisgICAgICAg
ICAgImRldiI6IHRydWUsCisgICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZQorICAgICAgICB9LAor
ICAgICAgICAiaXNhcnJheSI6IHsKKyAgICAgICAgICAidmVyc2lvbiI6ICIxLjAuMCIsCisgICAg
ICAgICAgImJ1bmRsZWQiOiB0cnVlLAorICAgICAgICAgICJkZXYiOiB0cnVlCisgICAgICAgIH0s
CisgICAgICAgICJpc3N0cmVhbSI6IHsKKyAgICAgICAgICAidmVyc2lvbiI6ICIwLjEuMiIsCisg
ICAgICAgICAgImJ1bmRsZWQiOiB0cnVlLAorICAgICAgICAgICJkZXYiOiB0cnVlLAorICAgICAg
ICAgICJvcHRpb25hbCI6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgImpvZGlkMjU1MTkiOiB7
CisgICAgICAgICAgInZlcnNpb24iOiAiMS4wLjIiLAorICAgICAgICAgICJidW5kbGVkIjogdHJ1
ZSwKKyAgICAgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlLAor
ICAgICAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAgICAgICJqc2JuIjogIjAuMS4xIgorICAg
ICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgImpzYm4iOiB7CisgICAgICAgICAgInZlcnNp
b24iOiAiMC4xLjEiLAorICAgICAgICAgICJidW5kbGVkIjogdHJ1ZSwKKyAgICAgICAgICAiZGV2
IjogdHJ1ZSwKKyAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAg
ICJqc29uLXNjaGVtYSI6IHsKKyAgICAgICAgICAidmVyc2lvbiI6ICIwLjIuMyIsCisgICAgICAg
ICAgImJ1bmRsZWQiOiB0cnVlLAorICAgICAgICAgICJkZXYiOiB0cnVlLAorICAgICAgICAgICJv
cHRpb25hbCI6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgImpzb24tc3RhYmxlLXN0cmluZ2lm
eSI6IHsKKyAgICAgICAgICAidmVyc2lvbiI6ICIxLjAuMSIsCisgICAgICAgICAgImJ1bmRsZWQi
OiB0cnVlLAorICAgICAgICAgICJkZXYiOiB0cnVlLAorICAgICAgICAgICJvcHRpb25hbCI6IHRy
dWUsCisgICAgICAgICAgInJlcXVpcmVzIjogeworICAgICAgICAgICAgImpzb25pZnkiOiAiMC4w
LjAiCisgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICAianNvbi1zdHJpbmdpZnktc2Fm
ZSI6IHsKKyAgICAgICAgICAidmVyc2lvbiI6ICI1LjAuMSIsCisgICAgICAgICAgImJ1bmRsZWQi
OiB0cnVlLAorICAgICAgICAgICJkZXYiOiB0cnVlLAorICAgICAgICAgICJvcHRpb25hbCI6IHRy
dWUKKyAgICAgICAgfSwKKyAgICAgICAgImpzb25pZnkiOiB7CisgICAgICAgICAgInZlcnNpb24i
OiAiMC4wLjAiLAorICAgICAgICAgICJidW5kbGVkIjogdHJ1ZSwKKyAgICAgICAgICAiZGV2Ijog
dHJ1ZSwKKyAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgICJq
c3ByaW0iOiB7CisgICAgICAgICAgInZlcnNpb24iOiAiMS40LjAiLAorICAgICAgICAgICJidW5k
bGVkIjogdHJ1ZSwKKyAgICAgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICAgICAib3B0aW9uYWwi
OiB0cnVlLAorICAgICAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAgICAgICJhc3NlcnQtcGx1
cyI6ICIxLjAuMCIsCisgICAgICAgICAgICAiZXh0c3ByaW50ZiI6ICIxLjAuMiIsCisgICAgICAg
ICAgICAianNvbi1zY2hlbWEiOiAiMC4yLjMiLAorICAgICAgICAgICAgInZlcnJvciI6ICIxLjMu
NiIKKyAgICAgICAgICB9LAorICAgICAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICAg
ICAiYXNzZXJ0LXBsdXMiOiB7CisgICAgICAgICAgICAgICJ2ZXJzaW9uIjogIjEuMC4wIiwKKyAg
ICAgICAgICAgICAgImJ1bmRsZWQiOiB0cnVlLAorICAgICAgICAgICAgICAiZGV2IjogdHJ1ZSwK
KyAgICAgICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZQorICAgICAgICAgICAgfQorICAgICAgICAg
IH0KKyAgICAgICAgfSwKKyAgICAgICAgIm1pbWUtZGIiOiB7CisgICAgICAgICAgInZlcnNpb24i
OiAiMS4yNy4wIiwKKyAgICAgICAgICAiYnVuZGxlZCI6IHRydWUsCisgICAgICAgICAgImRldiI6
IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgIm1pbWUtdHlwZXMiOiB7CisgICAgICAgICAgInZl
cnNpb24iOiAiMi4xLjE1IiwKKyAgICAgICAgICAiYnVuZGxlZCI6IHRydWUsCisgICAgICAgICAg
ImRldiI6IHRydWUsCisgICAgICAgICAgInJlcXVpcmVzIjogeworICAgICAgICAgICAgIm1pbWUt
ZGIiOiAiMS4yNy4wIgorICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgIm1pbmltYXRj
aCI6IHsKKyAgICAgICAgICAidmVyc2lvbiI6ICIzLjAuNCIsCisgICAgICAgICAgImJ1bmRsZWQi
OiB0cnVlLAorICAgICAgICAgICJkZXYiOiB0cnVlLAorICAgICAgICAgICJyZXF1aXJlcyI6IHsK
KyAgICAgICAgICAgICJicmFjZS1leHBhbnNpb24iOiAiMS4xLjciCisgICAgICAgICAgfQorICAg
ICAgICB9LAorICAgICAgICAibWluaW1pc3QiOiB7CisgICAgICAgICAgInZlcnNpb24iOiAiMC4w
LjgiLAorICAgICAgICAgICJidW5kbGVkIjogdHJ1ZSwKKyAgICAgICAgICAiZGV2IjogdHJ1ZQor
ICAgICAgICB9LAorICAgICAgICAibWtkaXJwIjogeworICAgICAgICAgICJ2ZXJzaW9uIjogIjAu
NS4xIiwKKyAgICAgICAgICAiYnVuZGxlZCI6IHRydWUsCisgICAgICAgICAgImRldiI6IHRydWUs
CisgICAgICAgICAgInJlcXVpcmVzIjogeworICAgICAgICAgICAgIm1pbmltaXN0IjogIjAuMC44
IgorICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgIm1zIjogeworICAgICAgICAgICJ2
ZXJzaW9uIjogIjIuMC4wIiwKKyAgICAgICAgICAiYnVuZGxlZCI6IHRydWUsCisgICAgICAgICAg
ImRldiI6IHRydWUsCisgICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZQorICAgICAgICB9LAorICAg
ICAgICAibm9kZS1wcmUtZ3lwIjogeworICAgICAgICAgICJ2ZXJzaW9uIjogIjAuNi4zNiIsCisg
ICAgICAgICAgImJ1bmRsZWQiOiB0cnVlLAorICAgICAgICAgICJkZXYiOiB0cnVlLAorICAgICAg
ICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAgICAgInJlcXVpcmVzIjogeworICAgICAgICAg
ICAgIm1rZGlycCI6ICIwLjUuMSIsCisgICAgICAgICAgICAibm9wdCI6ICI0LjAuMSIsCisgICAg
ICAgICAgICAibnBtbG9nIjogIjQuMS4wIiwKKyAgICAgICAgICAgICJyYyI6ICIxLjIuMSIsCisg
ICAgICAgICAgICAicmVxdWVzdCI6ICIyLjgxLjAiLAorICAgICAgICAgICAgInJpbXJhZiI6ICIy
LjYuMSIsCisgICAgICAgICAgICAic2VtdmVyIjogIjUuMy4wIiwKKyAgICAgICAgICAgICJ0YXIi
OiAiMi4yLjEiLAorICAgICAgICAgICAgInRhci1wYWNrIjogIjMuNC4wIgorICAgICAgICAgIH0K
KyAgICAgICAgfSwKKyAgICAgICAgIm5vcHQiOiB7CisgICAgICAgICAgInZlcnNpb24iOiAiNC4w
LjEiLAorICAgICAgICAgICJidW5kbGVkIjogdHJ1ZSwKKyAgICAgICAgICAiZGV2IjogdHJ1ZSwK
KyAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgICAgICJyZXF1aXJlcyI6IHsKKyAg
ICAgICAgICAgICJhYmJyZXYiOiAiMS4xLjAiLAorICAgICAgICAgICAgIm9zZW52IjogIjAuMS40
IgorICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgIm5wbWxvZyI6IHsKKyAgICAgICAg
ICAidmVyc2lvbiI6ICI0LjEuMCIsCisgICAgICAgICAgImJ1bmRsZWQiOiB0cnVlLAorICAgICAg
ICAgICJkZXYiOiB0cnVlLAorICAgICAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAgICAg
InJlcXVpcmVzIjogeworICAgICAgICAgICAgImFyZS13ZS10aGVyZS15ZXQiOiAiMS4xLjQiLAor
ICAgICAgICAgICAgImNvbnNvbGUtY29udHJvbC1zdHJpbmdzIjogIjEuMS4wIiwKKyAgICAgICAg
ICAgICJnYXVnZSI6ICIyLjcuNCIsCisgICAgICAgICAgICAic2V0LWJsb2NraW5nIjogIjIuMC4w
IgorICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgIm51bWJlci1pcy1uYW4iOiB7Cisg
ICAgICAgICAgInZlcnNpb24iOiAiMS4wLjEiLAorICAgICAgICAgICJidW5kbGVkIjogdHJ1ZSwK
KyAgICAgICAgICAiZGV2IjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICAib2F1dGgtc2lnbiI6
IHsKKyAgICAgICAgICAidmVyc2lvbiI6ICIwLjguMiIsCisgICAgICAgICAgImJ1bmRsZWQiOiB0
cnVlLAorICAgICAgICAgICJkZXYiOiB0cnVlLAorICAgICAgICAgICJvcHRpb25hbCI6IHRydWUK
KyAgICAgICAgfSwKKyAgICAgICAgIm9iamVjdC1hc3NpZ24iOiB7CisgICAgICAgICAgInZlcnNp
b24iOiAiNC4xLjEiLAorICAgICAgICAgICJidW5kbGVkIjogdHJ1ZSwKKyAgICAgICAgICAiZGV2
IjogdHJ1ZSwKKyAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAg
ICJvbmNlIjogeworICAgICAgICAgICJ2ZXJzaW9uIjogIjEuNC4wIiwKKyAgICAgICAgICAiYnVu
ZGxlZCI6IHRydWUsCisgICAgICAgICAgImRldiI6IHRydWUsCisgICAgICAgICAgInJlcXVpcmVz
IjogeworICAgICAgICAgICAgIndyYXBweSI6ICIxLjAuMiIKKyAgICAgICAgICB9CisgICAgICAg
IH0sCisgICAgICAgICJvcy1ob21lZGlyIjogeworICAgICAgICAgICJ2ZXJzaW9uIjogIjEuMC4y
IiwKKyAgICAgICAgICAiYnVuZGxlZCI6IHRydWUsCisgICAgICAgICAgImRldiI6IHRydWUsCisg
ICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICAib3MtdG1wZGly
IjogeworICAgICAgICAgICJ2ZXJzaW9uIjogIjEuMC4yIiwKKyAgICAgICAgICAiYnVuZGxlZCI6
IHRydWUsCisgICAgICAgICAgImRldiI6IHRydWUsCisgICAgICAgICAgIm9wdGlvbmFsIjogdHJ1
ZQorICAgICAgICB9LAorICAgICAgICAib3NlbnYiOiB7CisgICAgICAgICAgInZlcnNpb24iOiAi
MC4xLjQiLAorICAgICAgICAgICJidW5kbGVkIjogdHJ1ZSwKKyAgICAgICAgICAiZGV2IjogdHJ1
ZSwKKyAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgICAgICJyZXF1aXJlcyI6IHsK
KyAgICAgICAgICAgICJvcy1ob21lZGlyIjogIjEuMC4yIiwKKyAgICAgICAgICAgICJvcy10bXBk
aXIiOiAiMS4wLjIiCisgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICAicGF0aC1pcy1h
YnNvbHV0ZSI6IHsKKyAgICAgICAgICAidmVyc2lvbiI6ICIxLjAuMSIsCisgICAgICAgICAgImJ1
bmRsZWQiOiB0cnVlLAorICAgICAgICAgICJkZXYiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAg
ICJwZXJmb3JtYW5jZS1ub3ciOiB7CisgICAgICAgICAgInZlcnNpb24iOiAiMC4yLjAiLAorICAg
ICAgICAgICJidW5kbGVkIjogdHJ1ZSwKKyAgICAgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICAg
ICAib3B0aW9uYWwiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgICJwcm9jZXNzLW5leHRpY2st
YXJncyI6IHsKKyAgICAgICAgICAidmVyc2lvbiI6ICIxLjAuNyIsCisgICAgICAgICAgImJ1bmRs
ZWQiOiB0cnVlLAorICAgICAgICAgICJkZXYiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgICJw
dW55Y29kZSI6IHsKKyAgICAgICAgICAidmVyc2lvbiI6ICIxLjQuMSIsCisgICAgICAgICAgImJ1
bmRsZWQiOiB0cnVlLAorICAgICAgICAgICJkZXYiOiB0cnVlLAorICAgICAgICAgICJvcHRpb25h
bCI6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgInFzIjogeworICAgICAgICAgICJ2ZXJzaW9u
IjogIjYuNC4wIiwKKyAgICAgICAgICAiYnVuZGxlZCI6IHRydWUsCisgICAgICAgICAgImRldiI6
IHRydWUsCisgICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICAi
cmMiOiB7CisgICAgICAgICAgInZlcnNpb24iOiAiMS4yLjEiLAorICAgICAgICAgICJidW5kbGVk
IjogdHJ1ZSwKKyAgICAgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICAgICAib3B0aW9uYWwiOiB0
cnVlLAorICAgICAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAgICAgICJkZWVwLWV4dGVuZCI6
ICIwLjQuMiIsCisgICAgICAgICAgICAiaW5pIjogIjEuMy40IiwKKyAgICAgICAgICAgICJtaW5p
bWlzdCI6ICIxLjIuMCIsCisgICAgICAgICAgICAic3RyaXAtanNvbi1jb21tZW50cyI6ICIyLjAu
MSIKKyAgICAgICAgICB9LAorICAgICAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICAg
ICAibWluaW1pc3QiOiB7CisgICAgICAgICAgICAgICJ2ZXJzaW9uIjogIjEuMi4wIiwKKyAgICAg
ICAgICAgICAgImJ1bmRsZWQiOiB0cnVlLAorICAgICAgICAgICAgICAiZGV2IjogdHJ1ZSwKKyAg
ICAgICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZQorICAgICAgICAgICAgfQorICAgICAgICAgIH0K
KyAgICAgICAgfSwKKyAgICAgICAgInJlYWRhYmxlLXN0cmVhbSI6IHsKKyAgICAgICAgICAidmVy
c2lvbiI6ICIyLjIuOSIsCisgICAgICAgICAgImJ1bmRsZWQiOiB0cnVlLAorICAgICAgICAgICJk
ZXYiOiB0cnVlLAorICAgICAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAgICAgICJidWZmZXIt
c2hpbXMiOiAiMS4wLjAiLAorICAgICAgICAgICAgImNvcmUtdXRpbC1pcyI6ICIxLjAuMiIsCisg
ICAgICAgICAgICAiaW5oZXJpdHMiOiAiMi4wLjMiLAorICAgICAgICAgICAgImlzYXJyYXkiOiAi
MS4wLjAiLAorICAgICAgICAgICAgInByb2Nlc3MtbmV4dGljay1hcmdzIjogIjEuMC43IiwKKyAg
ICAgICAgICAgICJzdHJpbmdfZGVjb2RlciI6ICIxLjAuMSIsCisgICAgICAgICAgICAidXRpbC1k
ZXByZWNhdGUiOiAiMS4wLjIiCisgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICAicmVx
dWVzdCI6IHsKKyAgICAgICAgICAidmVyc2lvbiI6ICIyLjgxLjAiLAorICAgICAgICAgICJidW5k
bGVkIjogdHJ1ZSwKKyAgICAgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICAgICAib3B0aW9uYWwi
OiB0cnVlLAorICAgICAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAgICAgICJhd3Mtc2lnbjIi
OiAiMC42LjAiLAorICAgICAgICAgICAgImF3czQiOiAiMS42LjAiLAorICAgICAgICAgICAgImNh
c2VsZXNzIjogIjAuMTIuMCIsCisgICAgICAgICAgICAiY29tYmluZWQtc3RyZWFtIjogIjEuMC41
IiwKKyAgICAgICAgICAgICJleHRlbmQiOiAiMy4wLjEiLAorICAgICAgICAgICAgImZvcmV2ZXIt
YWdlbnQiOiAiMC42LjEiLAorICAgICAgICAgICAgImZvcm0tZGF0YSI6ICIyLjEuNCIsCisgICAg
ICAgICAgICAiaGFyLXZhbGlkYXRvciI6ICI0LjIuMSIsCisgICAgICAgICAgICAiaGF3ayI6ICIz
LjEuMyIsCisgICAgICAgICAgICAiaHR0cC1zaWduYXR1cmUiOiAiMS4xLjEiLAorICAgICAgICAg
ICAgImlzLXR5cGVkYXJyYXkiOiAiMS4wLjAiLAorICAgICAgICAgICAgImlzc3RyZWFtIjogIjAu
MS4yIiwKKyAgICAgICAgICAgICJqc29uLXN0cmluZ2lmeS1zYWZlIjogIjUuMC4xIiwKKyAgICAg
ICAgICAgICJtaW1lLXR5cGVzIjogIjIuMS4xNSIsCisgICAgICAgICAgICAib2F1dGgtc2lnbiI6
ICIwLjguMiIsCisgICAgICAgICAgICAicGVyZm9ybWFuY2Utbm93IjogIjAuMi4wIiwKKyAgICAg
ICAgICAgICJxcyI6ICI2LjQuMCIsCisgICAgICAgICAgICAic2FmZS1idWZmZXIiOiAiNS4wLjEi
LAorICAgICAgICAgICAgInN0cmluZ3N0cmVhbSI6ICIwLjAuNSIsCisgICAgICAgICAgICAidG91
Z2gtY29va2llIjogIjIuMy4yIiwKKyAgICAgICAgICAgICJ0dW5uZWwtYWdlbnQiOiAiMC42LjAi
LAorICAgICAgICAgICAgInV1aWQiOiAiMy4wLjEiCisgICAgICAgICAgfQorICAgICAgICB9LAor
ICAgICAgICAicmltcmFmIjogeworICAgICAgICAgICJ2ZXJzaW9uIjogIjIuNi4xIiwKKyAgICAg
ICAgICAiYnVuZGxlZCI6IHRydWUsCisgICAgICAgICAgImRldiI6IHRydWUsCisgICAgICAgICAg
InJlcXVpcmVzIjogeworICAgICAgICAgICAgImdsb2IiOiAiNy4xLjIiCisgICAgICAgICAgfQor
ICAgICAgICB9LAorICAgICAgICAic2FmZS1idWZmZXIiOiB7CisgICAgICAgICAgInZlcnNpb24i
OiAiNS4wLjEiLAorICAgICAgICAgICJidW5kbGVkIjogdHJ1ZSwKKyAgICAgICAgICAiZGV2Ijog
dHJ1ZQorICAgICAgICB9LAorICAgICAgICAic2VtdmVyIjogeworICAgICAgICAgICJ2ZXJzaW9u
IjogIjUuMy4wIiwKKyAgICAgICAgICAiYnVuZGxlZCI6IHRydWUsCisgICAgICAgICAgImRldiI6
IHRydWUsCisgICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICAi
c2V0LWJsb2NraW5nIjogeworICAgICAgICAgICJ2ZXJzaW9uIjogIjIuMC4wIiwKKyAgICAgICAg
ICAiYnVuZGxlZCI6IHRydWUsCisgICAgICAgICAgImRldiI6IHRydWUsCisgICAgICAgICAgIm9w
dGlvbmFsIjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICAic2lnbmFsLWV4aXQiOiB7CisgICAg
ICAgICAgInZlcnNpb24iOiAiMy4wLjIiLAorICAgICAgICAgICJidW5kbGVkIjogdHJ1ZSwKKyAg
ICAgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCisgICAgICAg
IH0sCisgICAgICAgICJzbnRwIjogeworICAgICAgICAgICJ2ZXJzaW9uIjogIjEuMC45IiwKKyAg
ICAgICAgICAiYnVuZGxlZCI6IHRydWUsCisgICAgICAgICAgImRldiI6IHRydWUsCisgICAgICAg
ICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICAg
ICAiaG9layI6ICIyLjE2LjMiCisgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICAic3No
cGsiOiB7CisgICAgICAgICAgInZlcnNpb24iOiAiMS4xMy4wIiwKKyAgICAgICAgICAiYnVuZGxl
ZCI6IHRydWUsCisgICAgICAgICAgImRldiI6IHRydWUsCisgICAgICAgICAgIm9wdGlvbmFsIjog
dHJ1ZSwKKyAgICAgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICAgICAiYXNuMSI6ICIwLjIu
MyIsCisgICAgICAgICAgICAiYXNzZXJ0LXBsdXMiOiAiMS4wLjAiLAorICAgICAgICAgICAgImJj
cnlwdC1wYmtkZiI6ICIxLjAuMSIsCisgICAgICAgICAgICAiZGFzaGRhc2giOiAiMS4xNC4xIiwK
KyAgICAgICAgICAgICJlY2MtanNibiI6ICIwLjEuMSIsCisgICAgICAgICAgICAiZ2V0cGFzcyI6
ICIwLjEuNyIsCisgICAgICAgICAgICAiam9kaWQyNTUxOSI6ICIxLjAuMiIsCisgICAgICAgICAg
ICAianNibiI6ICIwLjEuMSIsCisgICAgICAgICAgICAidHdlZXRuYWNsIjogIjAuMTQuNSIKKyAg
ICAgICAgICB9LAorICAgICAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICAgICAiYXNz
ZXJ0LXBsdXMiOiB7CisgICAgICAgICAgICAgICJ2ZXJzaW9uIjogIjEuMC4wIiwKKyAgICAgICAg
ICAgICAgImJ1bmRsZWQiOiB0cnVlLAorICAgICAgICAgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAg
ICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZQorICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAg
ICAgICAgfSwKKyAgICAgICAgInN0cmluZ19kZWNvZGVyIjogeworICAgICAgICAgICJ2ZXJzaW9u
IjogIjEuMC4xIiwKKyAgICAgICAgICAiYnVuZGxlZCI6IHRydWUsCisgICAgICAgICAgImRldiI6
IHRydWUsCisgICAgICAgICAgInJlcXVpcmVzIjogeworICAgICAgICAgICAgInNhZmUtYnVmZmVy
IjogIjUuMC4xIgorICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgInN0cmluZy13aWR0
aCI6IHsKKyAgICAgICAgICAidmVyc2lvbiI6ICIxLjAuMiIsCisgICAgICAgICAgImJ1bmRsZWQi
OiB0cnVlLAorICAgICAgICAgICJkZXYiOiB0cnVlLAorICAgICAgICAgICJyZXF1aXJlcyI6IHsK
KyAgICAgICAgICAgICJjb2RlLXBvaW50LWF0IjogIjEuMS4wIiwKKyAgICAgICAgICAgICJpcy1m
dWxsd2lkdGgtY29kZS1wb2ludCI6ICIxLjAuMCIsCisgICAgICAgICAgICAic3RyaXAtYW5zaSI6
ICIzLjAuMSIKKyAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgICJzdHJpbmdzdHJlYW0i
OiB7CisgICAgICAgICAgInZlcnNpb24iOiAiMC4wLjUiLAorICAgICAgICAgICJidW5kbGVkIjog
dHJ1ZSwKKyAgICAgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICAgICAib3B0aW9uYWwiOiB0cnVl
CisgICAgICAgIH0sCisgICAgICAgICJzdHJpcC1hbnNpIjogeworICAgICAgICAgICJ2ZXJzaW9u
IjogIjMuMC4xIiwKKyAgICAgICAgICAiYnVuZGxlZCI6IHRydWUsCisgICAgICAgICAgImRldiI6
IHRydWUsCisgICAgICAgICAgInJlcXVpcmVzIjogeworICAgICAgICAgICAgImFuc2ktcmVnZXgi
OiAiMi4xLjEiCisgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICAic3RyaXAtanNvbi1j
b21tZW50cyI6IHsKKyAgICAgICAgICAidmVyc2lvbiI6ICIyLjAuMSIsCisgICAgICAgICAgImJ1
bmRsZWQiOiB0cnVlLAorICAgICAgICAgICJkZXYiOiB0cnVlLAorICAgICAgICAgICJvcHRpb25h
bCI6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgInRhciI6IHsKKyAgICAgICAgICAidmVyc2lv
biI6ICIyLjIuMSIsCisgICAgICAgICAgImJ1bmRsZWQiOiB0cnVlLAorICAgICAgICAgICJkZXYi
OiB0cnVlLAorICAgICAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAgICAgICJibG9jay1zdHJl
YW0iOiAiMC4wLjkiLAorICAgICAgICAgICAgImZzdHJlYW0iOiAiMS4wLjExIiwKKyAgICAgICAg
ICAgICJpbmhlcml0cyI6ICIyLjAuMyIKKyAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAg
ICJ0YXItcGFjayI6IHsKKyAgICAgICAgICAidmVyc2lvbiI6ICIzLjQuMCIsCisgICAgICAgICAg
ImJ1bmRsZWQiOiB0cnVlLAorICAgICAgICAgICJkZXYiOiB0cnVlLAorICAgICAgICAgICJvcHRp
b25hbCI6IHRydWUsCisgICAgICAgICAgInJlcXVpcmVzIjogeworICAgICAgICAgICAgImRlYnVn
IjogIjIuNi44IiwKKyAgICAgICAgICAgICJmc3RyZWFtIjogIjEuMC4xMSIsCisgICAgICAgICAg
ICAiZnN0cmVhbS1pZ25vcmUiOiAiMS4wLjUiLAorICAgICAgICAgICAgIm9uY2UiOiAiMS40LjAi
LAorICAgICAgICAgICAgInJlYWRhYmxlLXN0cmVhbSI6ICIyLjIuOSIsCisgICAgICAgICAgICAi
cmltcmFmIjogIjIuNi4xIiwKKyAgICAgICAgICAgICJ0YXIiOiAiMi4yLjEiLAorICAgICAgICAg
ICAgInVpZC1udW1iZXIiOiAiMC4wLjYiCisgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAg
ICAidG91Z2gtY29va2llIjogeworICAgICAgICAgICJ2ZXJzaW9uIjogIjIuMy4yIiwKKyAgICAg
ICAgICAiYnVuZGxlZCI6IHRydWUsCisgICAgICAgICAgImRldiI6IHRydWUsCisgICAgICAgICAg
Im9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICAgICAi
cHVueWNvZGUiOiAiMS40LjEiCisgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICAidHVu
bmVsLWFnZW50IjogeworICAgICAgICAgICJ2ZXJzaW9uIjogIjAuNi4wIiwKKyAgICAgICAgICAi
YnVuZGxlZCI6IHRydWUsCisgICAgICAgICAgImRldiI6IHRydWUsCisgICAgICAgICAgIm9wdGlv
bmFsIjogdHJ1ZSwKKyAgICAgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICAgICAic2FmZS1i
dWZmZXIiOiAiNS4wLjEiCisgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICAidHdlZXRu
YWNsIjogeworICAgICAgICAgICJ2ZXJzaW9uIjogIjAuMTQuNSIsCisgICAgICAgICAgImJ1bmRs
ZWQiOiB0cnVlLAorICAgICAgICAgICJkZXYiOiB0cnVlLAorICAgICAgICAgICJvcHRpb25hbCI6
IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgInVpZC1udW1iZXIiOiB7CisgICAgICAgICAgInZl
cnNpb24iOiAiMC4wLjYiLAorICAgICAgICAgICJidW5kbGVkIjogdHJ1ZSwKKyAgICAgICAgICAi
ZGV2IjogdHJ1ZSwKKyAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCisgICAgICAgIH0sCisgICAg
ICAgICJ1dGlsLWRlcHJlY2F0ZSI6IHsKKyAgICAgICAgICAidmVyc2lvbiI6ICIxLjAuMiIsCisg
ICAgICAgICAgImJ1bmRsZWQiOiB0cnVlLAorICAgICAgICAgICJkZXYiOiB0cnVlCisgICAgICAg
IH0sCisgICAgICAgICJ1dWlkIjogeworICAgICAgICAgICJ2ZXJzaW9uIjogIjMuMC4xIiwKKyAg
ICAgICAgICAiYnVuZGxlZCI6IHRydWUsCisgICAgICAgICAgImRldiI6IHRydWUsCisgICAgICAg
ICAgIm9wdGlvbmFsIjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICAidmVycm9yIjogeworICAg
ICAgICAgICJ2ZXJzaW9uIjogIjEuMy42IiwKKyAgICAgICAgICAiYnVuZGxlZCI6IHRydWUsCisg
ICAgICAgICAgImRldiI6IHRydWUsCisgICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAg
ICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICAgICAiZXh0c3ByaW50ZiI6ICIxLjAuMiIKKyAg
ICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgICJ3aWRlLWFsaWduIjogeworICAgICAgICAg
ICJ2ZXJzaW9uIjogIjEuMS4yIiwKKyAgICAgICAgICAiYnVuZGxlZCI6IHRydWUsCisgICAgICAg
ICAgImRldiI6IHRydWUsCisgICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICAgICAi
cmVxdWlyZXMiOiB7CisgICAgICAgICAgICAic3RyaW5nLXdpZHRoIjogIjEuMC4yIgorICAgICAg
ICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgIndyYXBweSI6IHsKKyAgICAgICAgICAidmVyc2lv
biI6ICIxLjAuMiIsCisgICAgICAgICAgImJ1bmRsZWQiOiB0cnVlLAorICAgICAgICAgICJkZXYi
OiB0cnVlCisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9LAorICAgICJnYXVnZSI6IHsKKyAgICAg
ICJ2ZXJzaW9uIjogIjIuNy40IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5
Lm5wbWpzLm9yZy9nYXVnZS8tL2dhdWdlLTIuNy40LnRneiIsCisgICAgICAiaW50ZWdyaXR5Ijog
InNoYTEtTEFOQVhIVTR3NTErczNzeGNDTGpKZnNCaS9jPSIsCisgICAgICAiZGV2IjogdHJ1ZSwK
KyAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAgImFwcm9iYSI6ICIxLjEuMiIsCisgICAgICAg
ICJjb25zb2xlLWNvbnRyb2wtc3RyaW5ncyI6ICIxLjEuMCIsCisgICAgICAgICJoYXMtdW5pY29k
ZSI6ICIyLjAuMSIsCisgICAgICAgICJvYmplY3QtYXNzaWduIjogIjQuMS4xIiwKKyAgICAgICAg
InNpZ25hbC1leGl0IjogIjMuMC4yIiwKKyAgICAgICAgInN0cmluZy13aWR0aCI6ICIxLjAuMiIs
CisgICAgICAgICJzdHJpcC1hbnNpIjogIjMuMC4xIiwKKyAgICAgICAgIndpZGUtYWxpZ24iOiAi
MS4xLjIiCisgICAgICB9CisgICAgfSwKKyAgICAiZ2V0LWNhbGxlci1maWxlIjogeworICAgICAg
InZlcnNpb24iOiAiMS4wLjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnku
bnBtanMub3JnL2dldC1jYWxsZXItZmlsZS8tL2dldC1jYWxsZXItZmlsZS0xLjAuMi50Z3oiLAor
ICAgICAgImludGVncml0eSI6ICJzaGExLTl3TG1NU2ZuNGpIQllLZ01GVlNzdHcxUVIrVT0iLAor
ICAgICAgImRldiI6IHRydWUKKyAgICB9LAorICAgICJnZXQtc3RkaW4iOiB7CisgICAgICAidmVy
c2lvbiI6ICI0LjAuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1q
cy5vcmcvZ2V0LXN0ZGluLy0vZ2V0LXN0ZGluLTQuMC4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5
IjogInNoYTEtdVdqR3NLQkRoREpKQXVpL0dsM3pKWG1rVVA0PSIsCisgICAgICAiZGV2IjogdHJ1
ZQorICAgIH0sCisgICAgImdldC1zdHJlYW0iOiB7CisgICAgICAidmVyc2lvbiI6ICIzLjAuMCIs
CisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZ2V0LXN0cmVh
bS8tL2dldC1zdHJlYW0tMy4wLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1qcFE5
RTFqY04xVlFWT3krTHRzRnFoZE8zaFE9IiwKKyAgICAgICJkZXYiOiB0cnVlCisgICAgfSwKKyAg
ICAiZ2l0LXJlcG8taW5mbyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuNC4xIiwKKyAgICAgICJy
ZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9naXQtcmVwby1pbmZvLy0vZ2l0
LXJlcG8taW5mby0xLjQuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLUtnY29JeVZL
cjJMODhIWmdCOWUyWlJ2VUdVTT0iLAorICAgICAgImRldiI6IHRydWUKKyAgICB9LAorICAgICJn
aXQtcmVwby12ZXJzaW9uIjogeworICAgICAgInZlcnNpb24iOiAiMC40LjEiLAorICAgICAgInJl
c29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2dpdC1yZXBvLXZlcnNpb24vLS9n
aXQtcmVwby12ZXJzaW9uLTAuNC4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtZGZx
NW9LVHNoSEIxV3c3cWY5cW0rZFFVVTc4PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJy
ZXF1aXJlcyI6IHsKKyAgICAgICAgImdpdC1yZXBvLWluZm8iOiAiMS4yLjAiCisgICAgICB9LAor
ICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImdpdC1yZXBvLWluZm8iOiB7CisgICAg
ICAgICAgInZlcnNpb24iOiAiMS4yLjAiLAorICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczov
L3JlZ2lzdHJ5Lm5wbWpzLm9yZy9naXQtcmVwby1pbmZvLy0vZ2l0LXJlcG8taW5mby0xLjIuMC50
Z3oiLAorICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1ROWhSUGdTaVRkUkJNd292ZkdaVnB3
bjl1dkk9IiwKKyAgICAgICAgICAiZGV2IjogdHJ1ZQorICAgICAgICB9CisgICAgICB9CisgICAg
fSwKKyAgICAiZ2l0LXRvb2xzIjogeworICAgICAgInZlcnNpb24iOiAiMC4xLjQiLAorICAgICAg
InJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2dpdC10b29scy8tL2dpdC10
b29scy0wLjEuNC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLVhrUGxsRU80cGQ3Yk9k
dW1ZOXBKNTUrVU9YZz0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAicmVxdWlyZXMiOiB7
CisgICAgICAgICJzcGF3bmJhY2siOiAiMS4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAiZ2xv
YiI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjUuMC4xNSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0
cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZ2xvYi8tL2dsb2ItNS4wLjE1LnRneiIsCisgICAgICAi
aW50ZWdyaXR5IjogInNoYTEtRzhrMnVlQXZTbUEvekNJdXozWXowd3VMazdFPSIsCisgICAgICAi
ZGV2IjogdHJ1ZSwKKyAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAgImluZmxpZ2h0IjogIjEu
MC42IiwKKyAgICAgICAgImluaGVyaXRzIjogIjIuMC4zIiwKKyAgICAgICAgIm1pbmltYXRjaCI6
ICIzLjAuNCIsCisgICAgICAgICJvbmNlIjogIjEuNC4wIiwKKyAgICAgICAgInBhdGgtaXMtYWJz
b2x1dGUiOiAiMS4wLjEiCisgICAgICB9CisgICAgfSwKKyAgICAiZ2xvYi1iYXNlIjogeworICAg
ICAgInZlcnNpb24iOiAiMC4zLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0
cnkubnBtanMub3JnL2dsb2ItYmFzZS8tL2dsb2ItYmFzZS0wLjMuMC50Z3oiLAorICAgICAgImlu
dGVncml0eSI6ICJzaGExLTI3Rms5aUliSEFzY3o0S3VveWkwbDk4T284UT0iLAorICAgICAgImRl
diI6IHRydWUsCisgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICJnbG9iLXBhcmVudCI6ICIy
LjAuMCIsCisgICAgICAgICJpcy1nbG9iIjogIjIuMC4xIgorICAgICAgfQorICAgIH0sCisgICAg
Imdsb2ItcGFyZW50IjogeworICAgICAgInZlcnNpb24iOiAiMi4wLjAiLAorICAgICAgInJlc29s
dmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2dsb2ItcGFyZW50Ly0vZ2xvYi1wYXJl
bnQtMi4wLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1nVGc5Y3RzRlQ4elBVemJh
cVFMeGd2YnR1eWc9IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgInJlcXVpcmVzIjogewor
ICAgICAgICAiaXMtZ2xvYiI6ICIyLjAuMSIKKyAgICAgIH0KKyAgICB9LAorICAgICJnbG9iYWwt
bW9kdWxlcyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuMi4zIiwKKyAgICAgICJyZXNvbHZlZCI6
ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9nbG9iYWwtbW9kdWxlcy8tL2dsb2JhbC1tb2R1
bGVzLTAuMi4zLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtNmxvNzdVTEcxczZaV2sr
S0VtbTEydUlqZ28wPSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJyZXF1aXJlcyI6IHsK
KyAgICAgICAgImdsb2JhbC1wcmVmaXgiOiAiMC4xLjUiLAorICAgICAgICAiaXMtd2luZG93cyI6
ICIwLjIuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJnbG9iYWwtcHJlZml4IjogeworICAgICAg
InZlcnNpb24iOiAiMC4xLjUiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnku
bnBtanMub3JnL2dsb2JhbC1wcmVmaXgvLS9nbG9iYWwtcHJlZml4LTAuMS41LnRneiIsCisgICAg
ICAiaW50ZWdyaXR5IjogInNoYTEtalR2R3VObzhxQkVxRmcyTlNXL3dSaXYrOTQ4PSIsCisgICAg
ICAiZGV2IjogdHJ1ZSwKKyAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAgImhvbWVkaXItcG9s
eWZpbGwiOiAiMS4wLjEiLAorICAgICAgICAiaW5pIjogIjEuMy40IiwKKyAgICAgICAgImlzLXdp
bmRvd3MiOiAiMC4yLjAiLAorICAgICAgICAid2hpY2giOiAiMS4zLjAiCisgICAgICB9CisgICAg
fSwKKyAgICAiZ2xvYmFscyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjYuNC4xIiwKKyAgICAgICJy
ZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9nbG9iYWxzLy0vZ2xvYmFscy02
LjQuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLWhKZ0RLenR0SE1nZTY4WDNscERZ
L2luNnYwOD0iLAorICAgICAgImRldiI6IHRydWUKKyAgICB9LAorICAgICJncmFjZWZ1bC1mcyI6
IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuMS4xMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6
Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZ3JhY2VmdWwtZnMvLS9ncmFjZWZ1bC1mcy00LjEuMTEudGd6
IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1Eb3ZmNU5IZHVJVk5aT0JPcDhBT0tnSnVWbGc9
IiwKKyAgICAgICJkZXYiOiB0cnVlCisgICAgfSwKKyAgICAiZ3JhY2VmdWwtcmVhZGxpbmsiOiB7
CisgICAgICAidmVyc2lvbiI6ICIxLjAuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9y
ZWdpc3RyeS5ucG1qcy5vcmcvZ3JhY2VmdWwtcmVhZGxpbmsvLS9ncmFjZWZ1bC1yZWFkbGluay0x
LjAuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLVRLK3RkcnhpOEMrZ09iTDVUcG85
MDZPUnB5VT0iLAorICAgICAgImRldiI6IHRydWUKKyAgICB9LAorICAgICJncm93bHkiOiB7Cisg
ICAgICAidmVyc2lvbiI6ICIxLjMuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdp
c3RyeS5ucG1qcy5vcmcvZ3Jvd2x5Ly0vZ3Jvd2x5LTEuMy4wLnRneiIsCisgICAgICAiaW50ZWdy
aXR5IjogInNoYTEtOFFkSXkrZHErV1MzeVd5VHhyekNpdkVnd0lFPSIsCisgICAgICAiZGV2Ijog
dHJ1ZQorICAgIH0sCisgICAgImhhbmRsZWJhcnMiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjAu
MTAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2hhbmRs
ZWJhcnMvLS9oYW5kbGViYXJzLTQuMC4xMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGEx
LVBUREhHTENhUFpieVBxVE1IMEE4VFR1cC8wOD0iLAorICAgICAgImRldiI6IHRydWUsCisgICAg
ICAicmVxdWlyZXMiOiB7CisgICAgICAgICJhc3luYyI6ICIxLjUuMiIsCisgICAgICAgICJvcHRp
bWlzdCI6ICIwLjYuMSIsCisgICAgICAgICJzb3VyY2UtbWFwIjogIjAuNC40IiwKKyAgICAgICAg
InVnbGlmeS1qcyI6ICIyLjguMjkiCisgICAgICB9LAorICAgICAgImRlcGVuZGVuY2llcyI6IHsK
KyAgICAgICAgImFzeW5jIjogeworICAgICAgICAgICJ2ZXJzaW9uIjogIjEuNS4yIiwKKyAgICAg
ICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYXN5bmMvLS9hc3lu
Yy0xLjUuMi50Z3oiLAorICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS03R3BocmxaSURBdzhz
a0hKVmhqaUNKTDVaeW89IiwKKyAgICAgICAgICAiZGV2IjogdHJ1ZQorICAgICAgICB9LAorICAg
ICAgICAic291cmNlLW1hcCI6IHsKKyAgICAgICAgICAidmVyc2lvbiI6ICIwLjQuNCIsCisgICAg
ICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NvdXJjZS1tYXAv
LS9zb3VyY2UtbWFwLTAuNC40LnRneiIsCisgICAgICAgICAgImludGVncml0eSI6ICJzaGExLTY2
VDEycHdOeVpuZWFBTXRpMDkyRnpaU0Eycz0iLAorICAgICAgICAgICJkZXYiOiB0cnVlLAorICAg
ICAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAgICAgICJhbWRlZmluZSI6ICIxLjAuMSIKKyAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9LAorICAgICJoYXMtYW5zaSI6IHsK
KyAgICAgICJ2ZXJzaW9uIjogIjIuMC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3Jl
Z2lzdHJ5Lm5wbWpzLm9yZy9oYXMtYW5zaS8tL2hhcy1hbnNpLTIuMC4wLnRneiIsCisgICAgICAi
aW50ZWdyaXR5IjogInNoYTEtTlBVRW5PSHMzeXNHU2E4KzhrNUY3VFZCYlpFPSIsCisgICAgICAi
ZGV2IjogdHJ1ZSwKKyAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAgImFuc2ktcmVnZXgiOiAi
Mi4xLjEiCisgICAgICB9CisgICAgfSwKKyAgICAiaGFzLWJpbmFyeSI6IHsKKyAgICAgICJ2ZXJz
aW9uIjogIjAuMS43IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpz
Lm9yZy9oYXMtYmluYXJ5Ly0vaGFzLWJpbmFyeS0wLjEuNy50Z3oiLAorICAgICAgImludGVncml0
eSI6ICJzaGExLWFPWWVzV0lReVZSYUNsek9CcWh6a1MvaDVvdz0iLAorICAgICAgImRldiI6IHRy
dWUsCisgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICJpc2FycmF5IjogIjAuMC4xIgorICAg
ICAgfSwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJpc2FycmF5IjogeworICAg
ICAgICAgICJ2ZXJzaW9uIjogIjAuMC4xIiwKKyAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6
Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXNhcnJheS8tL2lzYXJyYXktMC4wLjEudGd6IiwKKyAgICAg
ICAgICAiaW50ZWdyaXR5IjogInNoYTEtaWhpcy9LbW85QmQrQ2F2OFlEaVRtd1hSN3Q4PSIsCisg
ICAgICAgICAgImRldiI6IHRydWUKKyAgICAgICAgfQorICAgICAgfQorICAgIH0sCisgICAgImhh
cy1jb2xvciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuMS43IiwKKyAgICAgICJyZXNvbHZlZCI6
ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9oYXMtY29sb3IvLS9oYXMtY29sb3ItMC4xLjcu
dGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1aeFJLVW1ERFQ4UE1wbmZRUWRyMUwrZTNp
eTg9IiwKKyAgICAgICJkZXYiOiB0cnVlCisgICAgfSwKKyAgICAiaGFzLWNvcnMiOiB7CisgICAg
ICAidmVyc2lvbiI6ICIxLjEuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3Ry
eS5ucG1qcy5vcmcvaGFzLWNvcnMvLS9oYXMtY29ycy0xLjEuMC50Z3oiLAorICAgICAgImludGVn
cml0eSI6ICJzaGExLVhrZEhrL2ZxbUVQUnU1bkNQdTlKL3hKdi96az0iLAorICAgICAgImRldiI6
IHRydWUKKyAgICB9LAorICAgICJoYXMtZmxhZyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuMC4w
IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9oYXMtZmxh
Zy8tL2hhcy1mbGFnLTIuMC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtNkNCNjhj
eDdNTlJHekhDM05MWG92aGo0alZFPSIsCisgICAgICAiZGV2IjogdHJ1ZQorICAgIH0sCisgICAg
Imhhcy11bmljb2RlIjogeworICAgICAgInZlcnNpb24iOiAiMi4wLjEiLAorICAgICAgInJlc29s
dmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2hhcy11bmljb2RlLy0vaGFzLXVuaWNv
ZGUtMi4wLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS00T2IrYWlqUFVST0lWZUNH
MFdrZWR4M2lxTGs9IiwKKyAgICAgICJkZXYiOiB0cnVlCisgICAgfSwKKyAgICAiaGFzaC1mb3It
ZGVwIjogeworICAgICAgInZlcnNpb24iOiAiMS4yLjAiLAorICAgICAgInJlc29sdmVkIjogImh0
dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2hhc2gtZm9yLWRlcC8tL2hhc2gtZm9yLWRlcC0xLjIu
MC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItblRBTXY0RkVxU21WL3UvTG5Qbncw
WVpKUDBRdmU3bEx2NUQ4cTVadTQ0MWdJL2xCWkNxM0J3bm9aamxPbi9IQkxvSzlEZ3lZK3FWaEN6
eGIxZEFBaUE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJyZXF1aXJlcyI6IHsKKyAg
ICAgICAgImJyb2Njb2xpLWtpdGNoZW4tc2luay1oZWxwZXJzIjogIjAuMy4xIiwKKyAgICAgICAg
ImhlaW1kYWxsanMiOiAiMC4yLjUiLAorICAgICAgICAiaGVpbWRhbGxqcy1sb2dnZXIiOiAiMC4x
LjkiLAorICAgICAgICAicmVzb2x2ZSI6ICIxLjQuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJo
ZWltZGFsbGpzIjogeworICAgICAgInZlcnNpb24iOiAiMC4yLjUiLAorICAgICAgInJlc29sdmVk
IjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2hlaW1kYWxsanMvLS9oZWltZGFsbGpzLTAu
Mi41LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtYXFWRENPN25rN1pDei9uUGxIZ1VS
Zk4zTUt3PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAg
ICAgInJzdnAiOiAiMy4yLjEiCisgICAgICB9LAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAg
ICAgICAgInJzdnAiOiB7CisgICAgICAgICAgInZlcnNpb24iOiAiMy4yLjEiLAorICAgICAgICAg
ICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yc3ZwLy0vcnN2cC0zLjIu
MS50Z3oiLAorICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1COHRLWGZKYTNaNkNicnhuM01u
OWlkc24yRW89IiwKKyAgICAgICAgICAiZGV2IjogdHJ1ZQorICAgICAgICB9CisgICAgICB9Cisg
ICAgfSwKKyAgICAiaGVpbWRhbGxqcy1mcy1tb25pdG9yIjogeworICAgICAgInZlcnNpb24iOiAi
MC4xLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2hl
aW1kYWxsanMtZnMtbW9uaXRvci8tL2hlaW1kYWxsanMtZnMtbW9uaXRvci0wLjEuMC50Z3oiLAor
ICAgICAgImludGVncml0eSI6ICJzaGExLTFBU21Wb2pHY1V4SVZHbnROSlhhU0ZORUFuST0iLAor
ICAgICAgImRldiI6IHRydWUsCisgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICJoZWltZGFs
bGpzIjogIjAuMi41IiwKKyAgICAgICAgImhlaW1kYWxsanMtbG9nZ2VyIjogIjAuMS45IgorICAg
ICAgfQorICAgIH0sCisgICAgImhlaW1kYWxsanMtZ3JhcGgiOiB7CisgICAgICAidmVyc2lvbiI6
ICIwLjMuMyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcv
aGVpbWRhbGxqcy1ncmFwaC8tL2hlaW1kYWxsanMtZ3JhcGgtMC4zLjMudGd6IiwKKyAgICAgICJp
bnRlZ3JpdHkiOiAic2hhMS02b0FkdTZaWnlOVWkvaHk0T3kxZ1Z5YmtrWTg9IiwKKyAgICAgICJk
ZXYiOiB0cnVlCisgICAgfSwKKyAgICAiaGVpbWRhbGxqcy1sb2dnZXIiOiB7CisgICAgICAidmVy
c2lvbiI6ICIwLjEuOSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1q
cy5vcmcvaGVpbWRhbGxqcy1sb2dnZXIvLS9oZWltZGFsbGpzLWxvZ2dlci0wLjEuOS50Z3oiLAor
ICAgICAgImludGVncml0eSI6ICJzaGExLTEycmFUa1czdTI5NGI4bkFFS2FPc3VMNjhYWT0iLAor
ICAgICAgImRldiI6IHRydWUsCisgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICJkZWJ1ZyI6
ICIyLjYuOCIsCisgICAgICAgICJoZWltZGFsbGpzIjogIjAuMi41IgorICAgICAgfQorICAgIH0s
CisgICAgImhvbWUtb3ItdG1wIjogeworICAgICAgInZlcnNpb24iOiAiMS4wLjAiLAorICAgICAg
InJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2hvbWUtb3ItdG1wLy0vaG9t
ZS1vci10bXAtMS4wLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1TNThlUUlBTVBs
REd3bjk0Rm5hdnpPY2ZPWVU9IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgInJlcXVpcmVz
IjogeworICAgICAgICAib3MtdG1wZGlyIjogIjEuMC4yIiwKKyAgICAgICAgInVzZXItaG9tZSI6
ICIxLjEuMSIKKyAgICAgIH0KKyAgICB9LAorICAgICJob21lZGlyLXBvbHlmaWxsIjogeworICAg
ICAgInZlcnNpb24iOiAiMS4wLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0
cnkubnBtanMub3JnL2hvbWVkaXItcG9seWZpbGwvLS9ob21lZGlyLXBvbHlmaWxsLTEuMC4xLnRn
eiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtVEN1OGluV0ptUDdyOWUxb1dBOTIxR2RvdEx3
PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAgInBh
cnNlLXBhc3N3ZCI6ICIxLjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJob3N0ZWQtZ2l0LWlu
Zm8iOiB7CisgICAgICAidmVyc2lvbiI6ICIyLjUuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0
cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaG9zdGVkLWdpdC1pbmZvLy0vaG9zdGVkLWdpdC1pbmZv
LTIuNS4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1wTmdiVVJTdWFiOTBLYlRx
dlJQc3NlYVR4T0pDWkJEMGE3dCtoYVNOMzNwaVA5Y0NNNGwwQ3FkekFpZjJoVXFtNzE2VW92S0Iy
Uk9taWFiR0FLVlh5Zz09IiwKKyAgICAgICJkZXYiOiB0cnVlCisgICAgfSwKKyAgICAiaHRtbHBh
cnNlcjIiOiB7CisgICAgICAidmVyc2lvbiI6ICIzLjguMyIsCisgICAgICAicmVzb2x2ZWQiOiAi
aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaHRtbHBhcnNlcjIvLS9odG1scGFyc2VyMi0zLjgu
My50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLW1Xd29zWkZSYW92b1pRR24xNWRYNWNj
TUVHZz0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAg
ICJkb21lbGVtZW50dHlwZSI6ICIxLjMuMCIsCisgICAgICAgICJkb21oYW5kbGVyIjogIjIuMy4w
IiwKKyAgICAgICAgImRvbXV0aWxzIjogIjEuNS4xIiwKKyAgICAgICAgImVudGl0aWVzIjogIjEu
MC4wIiwKKyAgICAgICAgInJlYWRhYmxlLXN0cmVhbSI6ICIxLjEuMTQiCisgICAgICB9LAorICAg
ICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImVudGl0aWVzIjogeworICAgICAgICAgICJ2
ZXJzaW9uIjogIjEuMC4wIiwKKyAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3Ry
eS5ucG1qcy5vcmcvZW50aXRpZXMvLS9lbnRpdGllcy0xLjAuMC50Z3oiLAorICAgICAgICAgICJp
bnRlZ3JpdHkiOiAic2hhMS1zcGg2bzRJVFIvemVaQ3NrL2Z5ZVQ3Y1N2eVk9IiwKKyAgICAgICAg
ICAiZGV2IjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICAiaXNhcnJheSI6IHsKKyAgICAgICAg
ICAidmVyc2lvbiI6ICIwLjAuMSIsCisgICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVn
aXN0cnkubnBtanMub3JnL2lzYXJyYXkvLS9pc2FycmF5LTAuMC4xLnRneiIsCisgICAgICAgICAg
ImludGVncml0eSI6ICJzaGExLWloaXMvS21vOUJkK0NhdjhZRGlUbXdYUjd0OD0iLAorICAgICAg
ICAgICJkZXYiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgICJyZWFkYWJsZS1zdHJlYW0iOiB7
CisgICAgICAgICAgInZlcnNpb24iOiAiMS4xLjE0IiwKKyAgICAgICAgICAicmVzb2x2ZWQiOiAi
aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcmVhZGFibGUtc3RyZWFtLy0vcmVhZGFibGUtc3Ry
ZWFtLTEuMS4xNC50Z3oiLAorICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1mUFRGVHZaSTQ0
RXdoTVkyM1NCNTRXYkFnZGs9IiwKKyAgICAgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICAgICAi
cmVxdWlyZXMiOiB7CisgICAgICAgICAgICAiY29yZS11dGlsLWlzIjogIjEuMC4yIiwKKyAgICAg
ICAgICAgICJpbmhlcml0cyI6ICIyLjAuMyIsCisgICAgICAgICAgICAiaXNhcnJheSI6ICIwLjAu
MSIsCisgICAgICAgICAgICAic3RyaW5nX2RlY29kZXIiOiAiMC4xMC4zMSIKKyAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9LAorICAgICJodHRwLWVycm9ycyI6IHsKKyAgICAg
ICJ2ZXJzaW9uIjogIjEuNi4yIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5
Lm5wbWpzLm9yZy9odHRwLWVycm9ycy8tL2h0dHAtZXJyb3JzLTEuNi4yLnRneiIsCisgICAgICAi
aW50ZWdyaXR5IjogInNoYTEtQ2dBc3lGY0hHU3ArZVViTzdjRVJWZllPeHpZPSIsCisgICAgICAi
ZGV2IjogdHJ1ZSwKKyAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAgImRlcGQiOiAiMS4xLjEi
LAorICAgICAgICAiaW5oZXJpdHMiOiAiMi4wLjMiLAorICAgICAgICAic2V0cHJvdG90eXBlb2Yi
OiAiMS4wLjMiLAorICAgICAgICAic3RhdHVzZXMiOiAiMS4zLjEiCisgICAgICB9CisgICAgfSwK
KyAgICAiaHR0cC1wcm94eSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMTYuMiIsCisgICAgICAi
cmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaHR0cC1wcm94eS8tL2h0dHAt
cHJveHktMS4xNi4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtQnQveWtwVXI5azIr
aEhINm5mY3dadFR6ZDBJPSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJyZXF1aXJlcyI6
IHsKKyAgICAgICAgImV2ZW50ZW1pdHRlcjMiOiAiMS4yLjAiLAorICAgICAgICAicmVxdWlyZXMt
cG9ydCI6ICIxLjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJpY29udi1saXRlIjogeworICAg
ICAgInZlcnNpb24iOiAiMC40LjE4IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lz
dHJ5Lm5wbWpzLm9yZy9pY29udi1saXRlLy0vaWNvbnYtbGl0ZS0wLjQuMTgudGd6IiwKKyAgICAg
ICJpbnRlZ3JpdHkiOiAic2hhNTEyLXNyMVpRcGgzVXdIVFIwWGZ0U2JLODVPdkJieGUvYWJMR3pF
blBFTkNRd21IZjdzY2s4T3l1NG9iM0xnQnhXV3hSb00rUXN6ZVV5bDdqYnFhcHUyVHFBPT0iLAor
ICAgICAgImRldiI6IHRydWUKKyAgICB9LAorICAgICJpbXVybXVyaGFzaCI6IHsKKyAgICAgICJ2
ZXJzaW9uIjogIjAuMS40IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5w
bWpzLm9yZy9pbXVybXVyaGFzaC8tL2ltdXJtdXJoYXNoLTAuMS40LnRneiIsCisgICAgICAiaW50
ZWdyaXR5IjogInNoYTEta2hpNXNya29vaml4UGNUN2EyMVhieU1VVStvPSIsCisgICAgICAiZGV2
IjogdHJ1ZQorICAgIH0sCisgICAgImluZGV4b2YiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjAu
MSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaW5kZXhv
Zi8tL2luZGV4b2YtMC4wLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1ndHd6YlNN
cmtHSVhuUVdyTXBPbVlGbjlRMTA9IiwKKyAgICAgICJkZXYiOiB0cnVlCisgICAgfSwKKyAgICAi
aW5mbGVjdGlvbiI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMTIuMCIsCisgICAgICAicmVzb2x2
ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaW5mbGVjdGlvbi8tL2luZmxlY3Rpb24t
MS4xMi4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtb2dDVFZsYlc5ZmE4VGNkUUxo
cnN0d01paEJZPSIsCisgICAgICAiZGV2IjogdHJ1ZQorICAgIH0sCisgICAgImluZmxpZ2h0Ijog
eworICAgICAgInZlcnNpb24iOiAiMS4wLjYiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8v
cmVnaXN0cnkubnBtanMub3JnL2luZmxpZ2h0Ly0vaW5mbGlnaHQtMS4wLjYudGd6IiwKKyAgICAg
ICJpbnRlZ3JpdHkiOiAic2hhMS1TYjFqTWRmUUxRd0p2SkVLRUhXNmdXVzFiZms9IiwKKyAgICAg
ICJkZXYiOiB0cnVlLAorICAgICAgInJlcXVpcmVzIjogeworICAgICAgICAib25jZSI6ICIxLjQu
MCIsCisgICAgICAgICJ3cmFwcHkiOiAiMS4wLjIiCisgICAgICB9CisgICAgfSwKKyAgICAiaW5o
ZXJpdHMiOiB7CisgICAgICAidmVyc2lvbiI6ICIyLjAuMyIsCisgICAgICAicmVzb2x2ZWQiOiAi
aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaW5oZXJpdHMvLS9pbmhlcml0cy0yLjAuMy50Z3oi
LAorICAgICAgImludGVncml0eSI6ICJzaGExLVl6d3NnK1BhUXFVQzlTUm1BaVNBOUNDQ1lkND0i
LAorICAgICAgImRldiI6IHRydWUKKyAgICB9LAorICAgICJpbmkiOiB7CisgICAgICAidmVyc2lv
biI6ICIxLjMuNCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5v
cmcvaW5pLy0vaW5pLTEuMy40LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtQlRmTGVk
cjFtMW1ocFJmZjl3Yklic0E1Rmk0PSIsCisgICAgICAiZGV2IjogdHJ1ZQorICAgIH0sCisgICAg
ImlubGluZS1zb3VyY2UtbWFwLWNvbW1lbnQiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjAuNSIs
CisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaW5saW5lLXNv
dXJjZS1tYXAtY29tbWVudC8tL2lubGluZS1zb3VyY2UtbWFwLWNvbW1lbnQtMS4wLjUudGd6IiwK
KyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1VS2lrVENwNURmckVRYlhKVHN6VlJpWTErdlk9IiwK
KyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgInJlcXVpcmVzIjogeworICAgICAgICAiY2hhbGsi
OiAiMS4xLjMiLAorICAgICAgICAiZ2V0LXN0ZGluIjogIjQuMC4xIiwKKyAgICAgICAgIm1pbmlt
aXN0IjogIjEuMi4wIiwKKyAgICAgICAgInN1bS11cCI6ICIxLjAuMyIsCisgICAgICAgICJ4dGVu
ZCI6ICI0LjAuMSIKKyAgICAgIH0sCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAi
bWluaW1pc3QiOiB7CisgICAgICAgICAgInZlcnNpb24iOiAiMS4yLjAiLAorICAgICAgICAgICJy
ZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9taW5pbWlzdC8tL21pbmltaXN0
LTEuMi4wLnRneiIsCisgICAgICAgICAgImludGVncml0eSI6ICJzaGExLW8xQUlzZzlCT0Q3c0g3
a1U5TTFkOTVvbVFvUT0iLAorICAgICAgICAgICJkZXYiOiB0cnVlCisgICAgICAgIH0KKyAgICAg
IH0KKyAgICB9LAorICAgICJpbnF1aXJlciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMi4zIiwK
KyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pbnF1aXJlci8t
L2lucXVpcmVyLTEuMi4zLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtVGV4dk12Tis5
N3NMTHRQeDBhWEQ5VVVIU1JnPSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJyZXF1aXJl
cyI6IHsKKyAgICAgICAgImFuc2ktZXNjYXBlcyI6ICIxLjQuMCIsCisgICAgICAgICJjaGFsayI6
ICIxLjEuMyIsCisgICAgICAgICJjbGktY3Vyc29yIjogIjEuMC4yIiwKKyAgICAgICAgImNsaS13
aWR0aCI6ICIyLjEuMCIsCisgICAgICAgICJleHRlcm5hbC1lZGl0b3IiOiAiMS4xLjEiLAorICAg
ICAgICAiZmlndXJlcyI6ICIxLjcuMCIsCisgICAgICAgICJsb2Rhc2giOiAiNC4xNy40IiwKKyAg
ICAgICAgIm11dGUtc3RyZWFtIjogIjAuMC42IiwKKyAgICAgICAgInBpbmtpZS1wcm9taXNlIjog
IjIuMC4xIiwKKyAgICAgICAgInJ1bi1hc3luYyI6ICIyLjMuMCIsCisgICAgICAgICJyeCI6ICI0
LjEuMCIsCisgICAgICAgICJzdHJpbmctd2lkdGgiOiAiMS4wLjIiLAorICAgICAgICAic3RyaXAt
YW5zaSI6ICIzLjAuMSIsCisgICAgICAgICJ0aHJvdWdoIjogIjIuMy44IgorICAgICAgfSwKKyAg
ICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJsb2Rhc2giOiB7CisgICAgICAgICAgInZl
cnNpb24iOiAiNC4xNy40IiwKKyAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3Ry
eS5ucG1qcy5vcmcvbG9kYXNoLy0vbG9kYXNoLTQuMTcuNC50Z3oiLAorICAgICAgICAgICJpbnRl
Z3JpdHkiOiAic2hhMS1lQ0E2VFJ3eWl1SFliY3BrWU9OcHRYOUFWYTQ9IiwKKyAgICAgICAgICAi
ZGV2IjogdHJ1ZQorICAgICAgICB9CisgICAgICB9CisgICAgfSwKKyAgICAiaW52YXJpYW50Ijog
eworICAgICAgInZlcnNpb24iOiAiMi4yLjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8v
cmVnaXN0cnkubnBtanMub3JnL2ludmFyaWFudC8tL2ludmFyaWFudC0yLjIuMi50Z3oiLAorICAg
ICAgImludGVncml0eSI6ICJzaGExLW5oOVdyQXJOdHI4d013YnpPTDQ3SUVybUEyQT0iLAorICAg
ICAgImRldiI6IHRydWUsCisgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICJsb29zZS1lbnZp
ZnkiOiAiMS4zLjEiCisgICAgICB9CisgICAgfSwKKyAgICAiaW52ZXJ0LWt2IjogeworICAgICAg
InZlcnNpb24iOiAiMS4wLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnku
bnBtanMub3JnL2ludmVydC1rdi8tL2ludmVydC1rdi0xLjAuMC50Z3oiLAorICAgICAgImludGVn
cml0eSI6ICJzaGExLUVFcU9TcXltMDlqTkZYcU8rTCtyTFhvLy9iWT0iLAorICAgICAgImRldiI6
IHRydWUKKyAgICB9LAorICAgICJpcGFkZHIuanMiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjQu
MCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXBhZGRy
LmpzLy0vaXBhZGRyLmpzLTEuNC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtS1dy
S2g0cUNHQmJsdUYwS0tGcVp2UDlGZ3ZBPSIsCisgICAgICAiZGV2IjogdHJ1ZQorICAgIH0sCisg
ICAgImlzLWJpbmFyeS1wYXRoIjogeworICAgICAgInZlcnNpb24iOiAiMS4wLjEiLAorICAgICAg
InJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLWJpbmFyeS1wYXRoLy0v
aXMtYmluYXJ5LXBhdGgtMS4wLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1kZkZt
UXJTQThZZW5FY2dVRmgvVHBLZGxXSmc9IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgInJl
cXVpcmVzIjogeworICAgICAgICAiYmluYXJ5LWV4dGVuc2lvbnMiOiAiMS45LjAiCisgICAgICB9
CisgICAgfSwKKyAgICAiaXMtYnVmZmVyIjogeworICAgICAgInZlcnNpb24iOiAiMS4xLjUiLAor
ICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLWJ1ZmZlci8t
L2lzLWJ1ZmZlci0xLjEuNS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLUh6c203MkU3
SVV1SXk4b2p6R3dCMkhsaDdzdz0iLAorICAgICAgImRldiI6IHRydWUKKyAgICB9LAorICAgICJp
cy1kb3RmaWxlIjogeworICAgICAgInZlcnNpb24iOiAiMS4wLjMiLAorICAgICAgInJlc29sdmVk
IjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLWRvdGZpbGUvLS9pcy1kb3RmaWxlLTEu
MC4zLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtcHFMekwvMHQrd1QxeWlYczBQYTRQ
UGVZb2VFPSIsCisgICAgICAiZGV2IjogdHJ1ZQorICAgIH0sCisgICAgImlzLWVxdWFsLXNoYWxs
b3ciOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjEuMyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0
cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtZXF1YWwtc2hhbGxvdy8tL2lzLWVxdWFsLXNoYWxs
b3ctMC4xLjMudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1JamdKajhJaDNndlBwZG5x
eE1SZFk0cWh4VFE9IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgInJlcXVpcmVzIjogewor
ICAgICAgICAiaXMtcHJpbWl0aXZlIjogIjIuMC4wIgorICAgICAgfQorICAgIH0sCisgICAgImlz
LWV4dGVuZGFibGUiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjEuMSIsCisgICAgICAicmVzb2x2
ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtZXh0ZW5kYWJsZS8tL2lzLWV4dGVu
ZGFibGUtMC4xLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1ZckVRNG9ta2NVR09Q
c05xWVgxSExqQWQvSWs9IiwKKyAgICAgICJkZXYiOiB0cnVlCisgICAgfSwKKyAgICAiaXMtZXh0
Z2xvYiI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJo
dHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pcy1leHRnbG9iLy0vaXMtZXh0Z2xvYi0xLjAuMC50
Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLXJFYUJkOFNVTkFXZ2t2eVBLWFlNYi94aUJz
QT0iLAorICAgICAgImRldiI6IHRydWUKKyAgICB9LAorICAgICJpcy1maW5pdGUiOiB7CisgICAg
ICAidmVyc2lvbiI6ICIxLjAuMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3Ry
eS5ucG1qcy5vcmcvaXMtZmluaXRlLy0vaXMtZmluaXRlLTEuMC4yLnRneiIsCisgICAgICAiaW50
ZWdyaXR5IjogInNoYTEtekdaM2FWWUN2bFVPOFI2TFNxWXdVMEsyMEtvPSIsCisgICAgICAiZGV2
IjogdHJ1ZSwKKyAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAgIm51bWJlci1pcy1uYW4iOiAi
MS4wLjEiCisgICAgICB9CisgICAgfSwKKyAgICAiaXMtZnVsbHdpZHRoLWNvZGUtcG9pbnQiOiB7
CisgICAgICAidmVyc2lvbiI6ICIxLjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9y
ZWdpc3RyeS5ucG1qcy5vcmcvaXMtZnVsbHdpZHRoLWNvZGUtcG9pbnQvLS9pcy1mdWxsd2lkdGgt
Y29kZS1wb2ludC0xLjAuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLTc1NHhPRzhE
R244TlpEcjRMOTVReEZmdkFNcz0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAicmVxdWly
ZXMiOiB7CisgICAgICAgICJudW1iZXItaXMtbmFuIjogIjEuMC4xIgorICAgICAgfQorICAgIH0s
CisgICAgImlzLWdpdC11cmwiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjIuMyIsCisgICAgICAi
cmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtZ2l0LXVybC8tL2lzLWdp
dC11cmwtMC4yLjMudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1SRklBMXZ2VzJnS1B0
ZUFVUU5tdnlUODh5MlE9IiwKKyAgICAgICJkZXYiOiB0cnVlCisgICAgfSwKKyAgICAiaXMtZ2xv
YiI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuMC4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRw
czovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pcy1nbG9iLy0vaXMtZ2xvYi0yLjAuMS50Z3oiLAorICAg
ICAgImludGVncml0eSI6ICJzaGExLTBKYjVKcVBlMVdBUFA5L1pFWmpMQ0lqQzJHTT0iLAorICAg
ICAgImRldiI6IHRydWUsCisgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICJpcy1leHRnbG9i
IjogIjEuMC4wIgorICAgICAgfQorICAgIH0sCisgICAgImlzLWludGVnZXIiOiB7CisgICAgICAi
dmVyc2lvbiI6ICIxLjAuNyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5u
cG1qcy5vcmcvaXMtaW50ZWdlci8tL2lzLWludGVnZXItMS4wLjcudGd6IiwKKyAgICAgICJpbnRl
Z3JpdHkiOiAic2hhMS1hOTZCcXMzZmVMWlp0bUtkWXB5dHhScUliVnc9IiwKKyAgICAgICJkZXYi
OiB0cnVlLAorICAgICAgInJlcXVpcmVzIjogeworICAgICAgICAiaXMtZmluaXRlIjogIjEuMC4y
IgorICAgICAgfQorICAgIH0sCisgICAgImlzLW51bWJlciI6IHsKKyAgICAgICJ2ZXJzaW9uIjog
IjIuMS4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9p
cy1udW1iZXIvLS9pcy1udW1iZXItMi4xLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hh
MS1BZnk3czVOR09sU1BMMFpzemhiZXprbmJrSTg9IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAg
ICAgInJlcXVpcmVzIjogeworICAgICAgICAia2luZC1vZiI6ICIzLjIuMiIKKyAgICAgIH0KKyAg
ICB9LAorICAgICJpcy1vYmoiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjAuMSIsCisgICAgICAi
cmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtb2JqLy0vaXMtb2JqLTEu
MC4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtUGtjcHJCOWYzZ0pjMTlnNmlXMnJu
MDluMnc4PSIsCisgICAgICAiZGV2IjogdHJ1ZQorICAgIH0sCisgICAgImlzLXBvc2l4LWJyYWNr
ZXQiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjEuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0
cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtcG9zaXgtYnJhY2tldC8tL2lzLXBvc2l4LWJyYWNr
ZXQtMC4xLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1NelRjZVhkRGFPa3ZBVzV2
dkFxSTljMXVhOFE9IiwKKyAgICAgICJkZXYiOiB0cnVlCisgICAgfSwKKyAgICAiaXMtcHJpbWl0
aXZlIjogeworICAgICAgInZlcnNpb24iOiAiMi4wLjAiLAorICAgICAgInJlc29sdmVkIjogImh0
dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLXByaW1pdGl2ZS8tL2lzLXByaW1pdGl2ZS0yLjAu
MC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLUlIdXJrV09FbWNCN0t0OGtDa0dvY2hB
RFJYVT0iLAorICAgICAgImRldiI6IHRydWUKKyAgICB9LAorICAgICJpcy1wcm9taXNlIjogewor
ICAgICAgInZlcnNpb24iOiAiMi4xLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVn
aXN0cnkubnBtanMub3JnL2lzLXByb21pc2UvLS9pcy1wcm9taXNlLTIuMS4wLnRneiIsCisgICAg
ICAiaW50ZWdyaXR5IjogInNoYTEtZWFLcDdPZndsdWdQTnRLeTg3d1d3ZjlMOC9vPSIsCisgICAg
ICAiZGV2IjogdHJ1ZQorICAgIH0sCisgICAgImlzLXN0cmVhbSI6IHsKKyAgICAgICJ2ZXJzaW9u
IjogIjEuMS4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9y
Zy9pcy1zdHJlYW0vLS9pcy1zdHJlYW0tMS4xLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAi
c2hhMS1FdFNqM1U1bzRMZWM2NDI4aEJjNjZBMlJ5a1E9IiwKKyAgICAgICJkZXYiOiB0cnVlCisg
ICAgfSwKKyAgICAiaXMtdHlwZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuMC4xIiwKKyAgICAg
ICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pcy10eXBlLy0vaXMtdHlw
ZS0wLjAuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLTlsSFlYRFpkUkpWZEZLVWRq
WEJoOC9hMGQ1dz0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAicmVxdWlyZXMiOiB7Cisg
ICAgICAgICJjb3JlLXV0aWwtaXMiOiAiMS4wLjIiCisgICAgICB9CisgICAgfSwKKyAgICAiaXMt
dXRmOCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuMi4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJo
dHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pcy11dGY4Ly0vaXMtdXRmOC0wLjIuMS50Z3oiLAor
ICAgICAgImludGVncml0eSI6ICJzaGExLVN3MmhSQ0VFMGJNMk5BNkFlWDZHWFBPZmZYST0iLAor
ICAgICAgImRldiI6IHRydWUKKyAgICB9LAorICAgICJpcy13aW5kb3dzIjogeworICAgICAgInZl
cnNpb24iOiAiMC4yLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBt
anMub3JnL2lzLXdpbmRvd3MvLS9pcy13aW5kb3dzLTAuMi4wLnRneiIsCisgICAgICAiaW50ZWdy
aXR5IjogInNoYTEtM2hxbTFqNmluZEpJYzN0cDhmK0xnQUxTRUl3PSIsCisgICAgICAiZGV2Ijog
dHJ1ZQorICAgIH0sCisgICAgImlzYXJyYXkiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjAuMCIs
CisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXNhcnJheS8t
L2lzYXJyYXktMS4wLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS11NU5kU0Znc3Vo
YU1Cb05KVjZWS1BnY1NUeEU9IiwKKyAgICAgICJkZXYiOiB0cnVlCisgICAgfSwKKyAgICAiaXNi
aW5hcnlmaWxlIjogeworICAgICAgInZlcnNpb24iOiAiMy4wLjIiLAorICAgICAgInJlc29sdmVk
IjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzYmluYXJ5ZmlsZS8tL2lzYmluYXJ5Zmls
ZS0zLjAuMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLVNqNlhUc0RMcVFCTlA4Yk41
eUNlcHBOb3BpRT0iLAorICAgICAgImRldiI6IHRydWUKKyAgICB9LAorICAgICJpc2V4ZSI6IHsK
KyAgICAgICJ2ZXJzaW9uIjogIjIuMC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3Jl
Z2lzdHJ5Lm5wbWpzLm9yZy9pc2V4ZS8tL2lzZXhlLTIuMC4wLnRneiIsCisgICAgICAiaW50ZWdy
aXR5IjogInNoYTEtNlB2emROeFZiL2lVZWhEY3NGY3RZejhzK2hBPSIsCisgICAgICAiZGV2Ijog
dHJ1ZQorICAgIH0sCisgICAgImlzb2JqZWN0IjogeworICAgICAgInZlcnNpb24iOiAiMi4xLjAi
LAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzb2JqZWN0
Ly0vaXNvYmplY3QtMi4xLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS04R1ZXRUph
ajhkb3U5R0p5K0JYSVFOaCtESWs9IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgInJlcXVp
cmVzIjogeworICAgICAgICAiaXNhcnJheSI6ICIxLjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAg
ICJpc3RleHRvcmJpbmFyeSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuMS4wIiwKKyAgICAgICJy
ZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pc3RleHRvcmJpbmFyeS8tL2lz
dGV4dG9yYmluYXJ5LTIuMS4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtMiswcWIx
RytMM1IxdG8rSlJsZ1JGQnQxaUhRPSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJyZXF1
aXJlcyI6IHsKKyAgICAgICAgImJpbmFyeWV4dGVuc2lvbnMiOiAiMi4wLjAiLAorICAgICAgICAi
ZWRpdGlvbnMiOiAiMS4zLjMiLAorICAgICAgICAidGV4dGV4dGVuc2lvbnMiOiAiMi4xLjAiCisg
ICAgICB9CisgICAgfSwKKyAgICAianMtcmVwb3J0ZXJzIjogeworICAgICAgInZlcnNpb24iOiAi
MS4yLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2pz
LXJlcG9ydGVycy8tL2pzLXJlcG9ydGVycy0xLjIuMC50Z3oiLAorICAgICAgImludGVncml0eSI6
ICJzaGExLWZQTExhWUdXYUVlUU5RME1US0IvU3UyZXdYND0iLAorICAgICAgImRldiI6IHRydWUK
KyAgICB9LAorICAgICJqcy10b2tlbnMiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjAuMSIsCisg
ICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvanMtdG9rZW5zLy0v
anMtdG9rZW5zLTEuMC4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtekVOYVhJdVVy
UldzdDVneFFQeUFHQ3lKcnE0PSIsCisgICAgICAiZGV2IjogdHJ1ZQorICAgIH0sCisgICAgImpz
LXlhbWwiOiB7CisgICAgICAidmVyc2lvbiI6ICIzLjkuMSIsCisgICAgICAicmVzb2x2ZWQiOiAi
aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvanMteWFtbC8tL2pzLXlhbWwtMy45LjEudGd6IiwK
KyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUNiY0czNzlMMWUrbVdCbkx2SFdXZUxzOEd5Vi9F
TXc4NjJ1TEkzYytHeFZ5REhXWmNqWmlud3VCZDNpVzJwZ3hnSWxrc1cvMXZOSmE0dG8rUnZET3d3
PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICJh
cmdwYXJzZSI6ICIxLjAuOSIsCisgICAgICAgICJlc3ByaW1hIjogIjQuMC4wIgorICAgICAgfSwK
KyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJlc3ByaW1hIjogeworICAgICAgICAg
ICJ2ZXJzaW9uIjogIjQuMC4wIiwKKyAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdp
c3RyeS5ucG1qcy5vcmcvZXNwcmltYS8tL2VzcHJpbWEtNC4wLjAudGd6IiwKKyAgICAgICAgICAi
aW50ZWdyaXR5IjogInNoYTUxMi1vZnRUY2FNdS9FR3JFSXU5MDRtV3RlS0l2OHZNdU9nR1lvN0Vo
VkpKTjAwUi9FRUQ5REN1YS94eEhSZFluS3RjRUN6Vmc3eE9XaGZsdkpNbnFjRlpqdz09IiwKKyAg
ICAgICAgICAiZGV2IjogdHJ1ZQorICAgICAgICB9CisgICAgICB9CisgICAgfSwKKyAgICAianNl
c2MiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjUuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0
cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvanNlc2MvLS9qc2VzYy0wLjUuMC50Z3oiLAorICAgICAg
ImludGVncml0eSI6ICJzaGExLTU5N21ialhXL0JiM0VQNlIxYzlwOXc4SWtSMD0iLAorICAgICAg
ImRldiI6IHRydWUKKyAgICB9LAorICAgICJqc2hpbnQiOiB7CisgICAgICAidmVyc2lvbiI6ICIy
LjkuNSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvanNo
aW50Ly0vanNoaW50LTIuOS41LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtSG5KU2tW
em1nYlFJSis0VUpJeEcwMDZhcGl3PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJyZXF1
aXJlcyI6IHsKKyAgICAgICAgImNsaSI6ICIxLjAuMSIsCisgICAgICAgICJjb25zb2xlLWJyb3dz
ZXJpZnkiOiAiMS4xLjAiLAorICAgICAgICAiZXhpdCI6ICIwLjEuMiIsCisgICAgICAgICJodG1s
cGFyc2VyMiI6ICIzLjguMyIsCisgICAgICAgICJsb2Rhc2giOiAiMy43LjAiLAorICAgICAgICAi
bWluaW1hdGNoIjogIjMuMC40IiwKKyAgICAgICAgInNoZWxsanMiOiAiMC4zLjAiLAorICAgICAg
ICAic3RyaXAtanNvbi1jb21tZW50cyI6ICIxLjAuNCIKKyAgICAgIH0sCisgICAgICAiZGVwZW5k
ZW5jaWVzIjogeworICAgICAgICAibG9kYXNoIjogeworICAgICAgICAgICJ2ZXJzaW9uIjogIjMu
Ny4wIiwKKyAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcv
bG9kYXNoLy0vbG9kYXNoLTMuNy4wLnRneiIsCisgICAgICAgICAgImludGVncml0eSI6ICJzaGEx
LU5uaTlpcm1WQlh3SHJlZzI3Uzd3aDlxQkhVVT0iLAorICAgICAgICAgICJkZXYiOiB0cnVlCisg
ICAgICAgIH0KKyAgICAgIH0KKyAgICB9LAorICAgICJqc29uLXN0YWJsZS1zdHJpbmdpZnkiOiB7
CisgICAgICAidmVyc2lvbiI6ICIxLjAuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9y
ZWdpc3RyeS5ucG1qcy5vcmcvanNvbi1zdGFibGUtc3RyaW5naWZ5Ly0vanNvbi1zdGFibGUtc3Ry
aW5naWZ5LTEuMC4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtbW5XZE9jWHkvMUEv
MVRBR1J1MUVYNGpFK2E4PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJyZXF1aXJlcyI6
IHsKKyAgICAgICAgImpzb25pZnkiOiAiMC4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAianNv
bjMiOiB7CisgICAgICAidmVyc2lvbiI6ICIzLjMuMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0
cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvanNvbjMvLS9qc29uMy0zLjMuMi50Z3oiLAorICAgICAg
ImludGVncml0eSI6ICJzaGExLVBBUTBkRDM1UGk5Y1FxN25zWnZMU0RWMTlPRT0iLAorICAgICAg
ImRldiI6IHRydWUKKyAgICB9LAorICAgICJqc29uNSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAu
NC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qc29u
NS8tL2pzb241LTAuNC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtQlVOUzVNVElE
SWJBa2poMzFFbmVGMnB6TEkwPSIsCisgICAgICAiZGV2IjogdHJ1ZQorICAgIH0sCisgICAgImpz
b25maWxlIjogeworICAgICAgInZlcnNpb24iOiAiMi40LjAiLAorICAgICAgInJlc29sdmVkIjog
Imh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2pzb25maWxlLy0vanNvbmZpbGUtMi40LjAudGd6
IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1OemFpdENpNGU3Mmd6SU8xUDZQV002TmNLdWc9
IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgInJlcXVpcmVzIjogeworICAgICAgICAiZ3Jh
Y2VmdWwtZnMiOiAiNC4xLjExIgorICAgICAgfQorICAgIH0sCisgICAgImpzb25pZnkiOiB7Cisg
ICAgICAidmVyc2lvbiI6ICIwLjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdp
c3RyeS5ucG1qcy5vcmcvanNvbmlmeS8tL2pzb25pZnktMC4wLjAudGd6IiwKKyAgICAgICJpbnRl
Z3JpdHkiOiAic2hhMS1MSFMyN2tIWlBLVWJlMXF1NlBVRFl4MGxLbk09IiwKKyAgICAgICJkZXYi
OiB0cnVlCisgICAgfSwKKyAgICAia2luZC1vZiI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMuMi4y
IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9raW5kLW9m
Ly0va2luZC1vZi0zLjIuMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLU1lb2hwelM2
dWJ1dzh5Um0ySk91cFI1S1BHUT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAicmVxdWly
ZXMiOiB7CisgICAgICAgICJpcy1idWZmZXIiOiAiMS4xLjUiCisgICAgICB9CisgICAgfSwKKyAg
ICAia2xhdyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMy4xIiwKKyAgICAgICJyZXNvbHZlZCI6
ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9rbGF3Ly0va2xhdy0xLjMuMS50Z3oiLAorICAg
ICAgImludGVncml0eSI6ICJzaGExLVFJaERPMGF6c2JvbG5YaDRYWTZXOXp1Z0pEaz0iLAorICAg
ICAgImRldiI6IHRydWUsCisgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICJncmFjZWZ1bC1m
cyI6ICI0LjEuMTEiCisgICAgICB9CisgICAgfSwKKyAgICAibGF6eS1jYWNoZSI6IHsKKyAgICAg
ICJ2ZXJzaW9uIjogIjEuMC40IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5
Lm5wbWpzLm9yZy9sYXp5LWNhY2hlLy0vbGF6eS1jYWNoZS0xLjAuNC50Z3oiLAorICAgICAgImlu
dGVncml0eSI6ICJzaGExLW9kZVB3NlVFZE11QWhGMDdPMjRkcEpwRWJvND0iLAorICAgICAgImRl
diI6IHRydWUKKyAgICB9LAorICAgICJsY2lkIjogeworICAgICAgInZlcnNpb24iOiAiMS4wLjAi
LAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2xjaWQvLS9s
Y2lkLTEuMC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtTUlyTXI2QzhTRG80WjdT
MjhybFFZbEhSdURVPSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJyZXF1aXJlcyI6IHsK
KyAgICAgICAgImludmVydC1rdiI6ICIxLjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJsZWVr
IjogeworICAgICAgInZlcnNpb24iOiAiMC4wLjI0IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRw
czovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9sZWVrLy0vbGVlay0wLjAuMjQudGd6IiwKKyAgICAgICJp
bnRlZ3JpdHkiOiAic2hhMS01QURsZnc1ZzJPOHIxTkJvM0VLS1ZEUmR2Tm89IiwKKyAgICAgICJk
ZXYiOiB0cnVlLAorICAgICAgInJlcXVpcmVzIjogeworICAgICAgICAiZGVidWciOiAiMi42Ljgi
LAorICAgICAgICAibG9kYXNoLmFzc2lnbiI6ICIzLjIuMCIsCisgICAgICAgICJyc3ZwIjogIjMu
Ni4yIgorICAgICAgfQorICAgIH0sCisgICAgImxldmVuIjogeworICAgICAgInZlcnNpb24iOiAi
MS4wLjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2xl
dmVuLy0vbGV2ZW4tMS4wLjIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1rVVMyN3J5
bDhkQm9BV254cG5jTnpxWUxkY009IiwKKyAgICAgICJkZXYiOiB0cnVlCisgICAgfSwKKyAgICAi
bGlua2lmeS1pdCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuMC4zIiwKKyAgICAgICJyZXNvbHZl
ZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9saW5raWZ5LWl0Ly0vbGlua2lmeS1pdC0y
LjAuMy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLTJVcEdTUG14d1huV1Q2bHlrU2FM
MjJ6cFEwOD0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAicmVxdWlyZXMiOiB7CisgICAg
ICAgICJ1Yy5taWNybyI6ICIxLjAuMyIKKyAgICAgIH0KKyAgICB9LAorICAgICJsaXZlcmVsb2Fk
LWpzIjogeworICAgICAgInZlcnNpb24iOiAiMi4yLjIiLAorICAgICAgInJlc29sdmVkIjogImh0
dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2xpdmVyZWxvYWQtanMvLS9saXZlcmVsb2FkLWpzLTIu
Mi4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtYkljbGZtU0t0SFc4Sk9vbGRGZnR6
QitOQzhJPSIsCisgICAgICAiZGV2IjogdHJ1ZQorICAgIH0sCisgICAgImxvYWRlci5qcyI6IHsK
KyAgICAgICJ2ZXJzaW9uIjogIjQuNi4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3Jl
Z2lzdHJ5Lm5wbWpzLm9yZy9sb2FkZXIuanMvLS9sb2FkZXIuanMtNC42LjAudGd6IiwKKyAgICAg
ICJpbnRlZ3JpdHkiOiAic2hhNTEyLU5qQW56TXEvQk0yVmxYQTllcjBOeDFSdW5vY2dpK2hFVTUz
RU5oQ3RUeDgyR1g2L2w5Tlh3ZklxZzgxb202UXZtaFVsdjJ6SCs0UitOK3dPb2VYeXRRPT0iLAor
ICAgICAgImRldiI6IHRydWUKKyAgICB9LAorICAgICJsb2NhdGUtcGF0aCI6IHsKKyAgICAgICJ2
ZXJzaW9uIjogIjIuMC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5w
bWpzLm9yZy9sb2NhdGUtcGF0aC8tL2xvY2F0ZS1wYXRoLTIuMC4wLnRneiIsCisgICAgICAiaW50
ZWdyaXR5IjogInNoYTEtSzFhTEpsN3NsRXh0bkEzcHc5dTd5Z05Velk0PSIsCisgICAgICAiZGV2
IjogdHJ1ZSwKKyAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAgInAtbG9jYXRlIjogIjIuMC4w
IiwKKyAgICAgICAgInBhdGgtZXhpc3RzIjogIjMuMC4wIgorICAgICAgfSwKKyAgICAgICJkZXBl
bmRlbmNpZXMiOiB7CisgICAgICAgICJwYXRoLWV4aXN0cyI6IHsKKyAgICAgICAgICAidmVyc2lv
biI6ICIzLjAuMCIsCisgICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBt
anMub3JnL3BhdGgtZXhpc3RzLy0vcGF0aC1leGlzdHMtMy4wLjAudGd6IiwKKyAgICAgICAgICAi
aW50ZWdyaXR5IjogInNoYTEtemc2K3FsOTR5eGlTWHFmWUVOZTFtd0VQMVJVPSIsCisgICAgICAg
ICAgImRldiI6IHRydWUKKyAgICAgICAgfQorICAgICAgfQorICAgIH0sCisgICAgImxvZGFzaCI6
IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMuMTAuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6
Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbG9kYXNoLy0vbG9kYXNoLTMuMTAuMS50Z3oiLAorICAgICAg
ImludGVncml0eSI6ICJzaGExLVcvUmVqa202UVluaGZVZ25pZC9SVzlGQXQ3WT0iLAorICAgICAg
ImRldiI6IHRydWUKKyAgICB9LAorICAgICJsb2Rhc2guX2Jhc2Vhc3NpZ24iOiB7CisgICAgICAi
dmVyc2lvbiI6ICIzLjIuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5u
cG1qcy5vcmcvbG9kYXNoLl9iYXNlYXNzaWduLy0vbG9kYXNoLl9iYXNlYXNzaWduLTMuMi4wLnRn
eiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtakRpZ21WQVBJVnJRbmxueGNpL1F4U3YrQ2s0
PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAgImxv
ZGFzaC5fYmFzZWNvcHkiOiAiMy4wLjEiLAorICAgICAgICAibG9kYXNoLmtleXMiOiAiMy4xLjIi
CisgICAgICB9CisgICAgfSwKKyAgICAibG9kYXNoLl9iYXNlY29weSI6IHsKKyAgICAgICJ2ZXJz
aW9uIjogIjMuMC4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpz
Lm9yZy9sb2Rhc2guX2Jhc2Vjb3B5Ly0vbG9kYXNoLl9iYXNlY29weS0zLjAuMS50Z3oiLAorICAg
ICAgImludGVncml0eSI6ICJzaGExLWphRG1xSGJQTkV3SzJLVklnaEVkMDhYSHlqWT0iLAorICAg
ICAgImRldiI6IHRydWUKKyAgICB9LAorICAgICJsb2Rhc2guX2Jhc2VmbGF0dGVuIjogeworICAg
ICAgInZlcnNpb24iOiAiMy4xLjQiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0
cnkubnBtanMub3JnL2xvZGFzaC5fYmFzZWZsYXR0ZW4vLS9sb2Rhc2guX2Jhc2VmbGF0dGVuLTMu
MS40LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtQjNEL2dCTWE5dU5QTzFFWGxxZTZV
aFRtWC9jPSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAg
ICAgImxvZGFzaC5pc2FyZ3VtZW50cyI6ICIzLjEuMCIsCisgICAgICAgICJsb2Rhc2guaXNhcnJh
eSI6ICIzLjAuNCIKKyAgICAgIH0KKyAgICB9LAorICAgICJsb2Rhc2guX2JpbmRjYWxsYmFjayI6
IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMuMC4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczov
L3JlZ2lzdHJ5Lm5wbWpzLm9yZy9sb2Rhc2guX2JpbmRjYWxsYmFjay8tL2xvZGFzaC5fYmluZGNh
bGxiYWNrLTMuMC4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtNVRIQ2RrVFBpMWVw
bmhmdGxiTmNkSWVKT1M0PSIsCisgICAgICAiZGV2IjogdHJ1ZQorICAgIH0sCisgICAgImxvZGFz
aC5fY3JlYXRlYXNzaWduZXIiOiB7CisgICAgICAidmVyc2lvbiI6ICIzLjEuMSIsCisgICAgICAi
cmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbG9kYXNoLl9jcmVhdGVhc3Np
Z25lci8tL2xvZGFzaC5fY3JlYXRlYXNzaWduZXItMy4xLjEudGd6IiwKKyAgICAgICJpbnRlZ3Jp
dHkiOiAic2hhMS1nNHBicmkvYXltT3NJdDdvNForazV0YVhDeEU9IiwKKyAgICAgICJkZXYiOiB0
cnVlLAorICAgICAgInJlcXVpcmVzIjogeworICAgICAgICAibG9kYXNoLl9iaW5kY2FsbGJhY2si
OiAiMy4wLjEiLAorICAgICAgICAibG9kYXNoLl9pc2l0ZXJhdGVlY2FsbCI6ICIzLjAuOSIsCisg
ICAgICAgICJsb2Rhc2gucmVzdHBhcmFtIjogIjMuNi4xIgorICAgICAgfQorICAgIH0sCisgICAg
ImxvZGFzaC5fZ2V0bmF0aXZlIjogeworICAgICAgInZlcnNpb24iOiAiMy45LjEiLAorICAgICAg
InJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2xvZGFzaC5fZ2V0bmF0aXZl
Ly0vbG9kYXNoLl9nZXRuYXRpdmUtMy45LjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hh
MS1Wd3ZIM3Q1RzFoemMzbWg5WmRQdXk2bzZyL1U9IiwKKyAgICAgICJkZXYiOiB0cnVlCisgICAg
fSwKKyAgICAibG9kYXNoLl9pc2l0ZXJhdGVlY2FsbCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMu
MC45IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9sb2Rh
c2guX2lzaXRlcmF0ZWVjYWxsLy0vbG9kYXNoLl9pc2l0ZXJhdGVlY2FsbC0zLjAuOS50Z3oiLAor
ICAgICAgImludGVncml0eSI6ICJzaGExLVVnT3RlNlFsK3VoQ1JnNXBiYm5QUG1xc0JYdz0iLAor
ICAgICAgImRldiI6IHRydWUKKyAgICB9LAorICAgICJsb2Rhc2guX3JlaW50ZXJwb2xhdGUiOiB7
CisgICAgICAidmVyc2lvbiI6ICIzLjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9y
ZWdpc3RyeS5ucG1qcy5vcmcvbG9kYXNoLl9yZWludGVycG9sYXRlLy0vbG9kYXNoLl9yZWludGVy
cG9sYXRlLTMuMC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtRE04dGlSWnE4RHMy
WThlV1U0dDFyRzRSVFowPSIsCisgICAgICAiZGV2IjogdHJ1ZQorICAgIH0sCisgICAgImxvZGFz
aC5hc3NpZ24iOiB7CisgICAgICAidmVyc2lvbiI6ICIzLjIuMCIsCisgICAgICAicmVzb2x2ZWQi
OiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbG9kYXNoLmFzc2lnbi8tL2xvZGFzaC5hc3Np
Z24tMy4yLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1QT253STB0TElpUGlscmo2
Q3NIKzZPdktaUG89IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgInJlcXVpcmVzIjogewor
ICAgICAgICAibG9kYXNoLl9iYXNlYXNzaWduIjogIjMuMi4wIiwKKyAgICAgICAgImxvZGFzaC5f
Y3JlYXRlYXNzaWduZXIiOiAiMy4xLjEiLAorICAgICAgICAibG9kYXNoLmtleXMiOiAiMy4xLjIi
CisgICAgICB9CisgICAgfSwKKyAgICAibG9kYXNoLmFzc2lnbmluIjogeworICAgICAgInZlcnNp
b24iOiAiNC4yLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMu
b3JnL2xvZGFzaC5hc3NpZ25pbi8tL2xvZGFzaC5hc3NpZ25pbi00LjIuMC50Z3oiLAorICAgICAg
ImludGVncml0eSI6ICJzaGExLXVvMzErNFFlc0tQb0JFSXlzT0pqcU54cUtLST0iLAorICAgICAg
ImRldiI6IHRydWUKKyAgICB9LAorICAgICJsb2Rhc2guY2xvbmVkZWVwIjogeworICAgICAgInZl
cnNpb24iOiAiNC41LjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBt
anMub3JnL2xvZGFzaC5jbG9uZWRlZXAvLS9sb2Rhc2guY2xvbmVkZWVwLTQuNS4wLnRneiIsCisg
ICAgICAiaW50ZWdyaXR5IjogInNoYTEtNGo4L25FK1B2ZDZISlNuQkJ4aFhvSWJsek84PSIsCisg
ICAgICAiZGV2IjogdHJ1ZQorICAgIH0sCisgICAgImxvZGFzaC5kZWJvdW5jZSI6IHsKKyAgICAg
ICJ2ZXJzaW9uIjogIjMuMS4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5
Lm5wbWpzLm9yZy9sb2Rhc2guZGVib3VuY2UvLS9sb2Rhc2guZGVib3VuY2UtMy4xLjEudGd6IiwK
KyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1nU0lSdzNpcFRNS2RXcVRqTkd6d3Y4NDZmZlU9IiwK
KyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgInJlcXVpcmVzIjogeworICAgICAgICAibG9kYXNo
Ll9nZXRuYXRpdmUiOiAiMy45LjEiCisgICAgICB9CisgICAgfSwKKyAgICAibG9kYXNoLmZpbmQi
OiB7CisgICAgICAidmVyc2lvbiI6ICI0LjYuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6
Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbG9kYXNoLmZpbmQvLS9sb2Rhc2guZmluZC00LjYuMC50Z3oi
LAorICAgICAgImludGVncml0eSI6ICJzaGExLXl3Y0UxSHEzRjRuL29ONkxsOTJTYjdpTEU3RT0i
LAorICAgICAgImRldiI6IHRydWUKKyAgICB9LAorICAgICJsb2Rhc2guZmxhdHRlbiI6IHsKKyAg
ICAgICJ2ZXJzaW9uIjogIjMuMC4yIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lz
dHJ5Lm5wbWpzLm9yZy9sb2Rhc2guZmxhdHRlbi8tL2xvZGFzaC5mbGF0dGVuLTMuMC4yLnRneiIs
CisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtM2h6MWQxajQ5RWVUR2ROY1BwekdERVVCazR3PSIs
CisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAgImxvZGFz
aC5fYmFzZWZsYXR0ZW4iOiAiMy4xLjQiLAorICAgICAgICAibG9kYXNoLl9pc2l0ZXJhdGVlY2Fs
bCI6ICIzLjAuOSIKKyAgICAgIH0KKyAgICB9LAorICAgICJsb2Rhc2guaXNhcmd1bWVudHMiOiB7
CisgICAgICAidmVyc2lvbiI6ICIzLjEuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9y
ZWdpc3RyeS5ucG1qcy5vcmcvbG9kYXNoLmlzYXJndW1lbnRzLy0vbG9kYXNoLmlzYXJndW1lbnRz
LTMuMS4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtTDFjOWhjYWlRb24vQUdZN1NS
d2RNNC96UllvPSIsCisgICAgICAiZGV2IjogdHJ1ZQorICAgIH0sCisgICAgImxvZGFzaC5pc2Fy
cmF5IjogeworICAgICAgInZlcnNpb24iOiAiMy4wLjQiLAorICAgICAgInJlc29sdmVkIjogImh0
dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2xvZGFzaC5pc2FycmF5Ly0vbG9kYXNoLmlzYXJyYXkt
My4wLjQudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1lZVRyaU1OcWdTS3ZodmhFcXB2
TmhSdGZ1MVU9IiwKKyAgICAgICJkZXYiOiB0cnVlCisgICAgfSwKKyAgICAibG9kYXNoLmtleXMi
OiB7CisgICAgICAidmVyc2lvbiI6ICIzLjEuMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6
Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbG9kYXNoLmtleXMvLS9sb2Rhc2gua2V5cy0zLjEuMi50Z3oi
LAorICAgICAgImludGVncml0eSI6ICJzaGExLVRid0VjckZXdmxDZ3NvYUZYUnZRc01aV0NZbz0i
LAorICAgICAgImRldiI6IHRydWUsCisgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICJsb2Rh
c2guX2dldG5hdGl2ZSI6ICIzLjkuMSIsCisgICAgICAgICJsb2Rhc2guaXNhcmd1bWVudHMiOiAi
My4xLjAiLAorICAgICAgICAibG9kYXNoLmlzYXJyYXkiOiAiMy4wLjQiCisgICAgICB9CisgICAg
fSwKKyAgICAibG9kYXNoLm1lcmdlIjogeworICAgICAgInZlcnNpb24iOiAiNC42LjAiLAorICAg
ICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2xvZGFzaC5tZXJnZS8t
L2xvZGFzaC5tZXJnZS00LjYuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLWFZaExv
VVNzTS81cGx6ZW1DRzN2K3QwUGljVT0iLAorICAgICAgImRldiI6IHRydWUKKyAgICB9LAorICAg
ICJsb2Rhc2gub21pdCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuNS4wIiwKKyAgICAgICJyZXNv
bHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9sb2Rhc2gub21pdC8tL2xvZGFzaC5v
bWl0LTQuNS4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtYnJHYTVhSHVIZG5mQzVh
ZVpzNExmNk1MWG1BPSIsCisgICAgICAiZGV2IjogdHJ1ZQorICAgIH0sCisgICAgImxvZGFzaC5y
ZXN0cGFyYW0iOiB7CisgICAgICAidmVyc2lvbiI6ICIzLjYuMSIsCisgICAgICAicmVzb2x2ZWQi
OiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbG9kYXNoLnJlc3RwYXJhbS8tL2xvZGFzaC5y
ZXN0cGFyYW0tMy42LjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1rMnBPTUo3ek1L
ZGtYdFFVV1liSVd1V3lDQVU9IiwKKyAgICAgICJkZXYiOiB0cnVlCisgICAgfSwKKyAgICAibG9k
YXNoLnRlbXBsYXRlIjogeworICAgICAgInZlcnNpb24iOiAiNC40LjAiLAorICAgICAgInJlc29s
dmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2xvZGFzaC50ZW1wbGF0ZS8tL2xvZGFz
aC50ZW1wbGF0ZS00LjQuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLTV6b0RoY2cx
VlpGMGJnSUxtV2VjYVE1bys2QT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAicmVxdWly
ZXMiOiB7CisgICAgICAgICJsb2Rhc2guX3JlaW50ZXJwb2xhdGUiOiAiMy4wLjAiLAorICAgICAg
ICAibG9kYXNoLnRlbXBsYXRlc2V0dGluZ3MiOiAiNC4xLjAiCisgICAgICB9CisgICAgfSwKKyAg
ICAibG9kYXNoLnRlbXBsYXRlc2V0dGluZ3MiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjEuMCIs
CisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbG9kYXNoLnRl
bXBsYXRlc2V0dGluZ3MvLS9sb2Rhc2gudGVtcGxhdGVzZXR0aW5ncy00LjEuMC50Z3oiLAorICAg
ICAgImludGVncml0eSI6ICJzaGExLUswMU9sYnBFRFpGZjhJdkltZVJWTm1aeE14WT0iLAorICAg
ICAgImRldiI6IHRydWUsCisgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICJsb2Rhc2guX3Jl
aW50ZXJwb2xhdGUiOiAiMy4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibG9kYXNoLnVuaXEi
OiB7CisgICAgICAidmVyc2lvbiI6ICI0LjUuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6
Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbG9kYXNoLnVuaXEvLS9sb2Rhc2gudW5pcS00LjUuMC50Z3oi
LAorICAgICAgImludGVncml0eSI6ICJzaGExLTBDSlRjNjYyVXEzQnZJTGtsRk01cUVKMVIzTT0i
LAorICAgICAgImRldiI6IHRydWUKKyAgICB9LAorICAgICJsb2Rhc2gudW5pcWJ5IjogeworICAg
ICAgInZlcnNpb24iOiAiNC43LjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0
cnkubnBtanMub3JnL2xvZGFzaC51bmlxYnkvLS9sb2Rhc2gudW5pcWJ5LTQuNy4wLnRneiIsCisg
ICAgICAiaW50ZWdyaXR5IjogInNoYTEtMlp3SHBtbnA1dEpPRTJMZjRtYkdkaGF2RXdJPSIsCisg
ICAgICAiZGV2IjogdHJ1ZQorICAgIH0sCisgICAgImxvbmdlc3QiOiB7CisgICAgICAidmVyc2lv
biI6ICIxLjAuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5v
cmcvbG9uZ2VzdC8tL2xvbmdlc3QtMS4wLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hh
MS1NS0N5MmpqM04zRG9LVW9OSXVaaVh0ZDlBSmM9IiwKKyAgICAgICJkZXYiOiB0cnVlCisgICAg
fSwKKyAgICAibG9vc2UtZW52aWZ5IjogeworICAgICAgInZlcnNpb24iOiAiMS4zLjEiLAorICAg
ICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2xvb3NlLWVudmlmeS8t
L2xvb3NlLWVudmlmeS0xLjMuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLTBhaXRN
L3FjNE9jVDFsL2RDc2kzU05SNHlFZz0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAicmVx
dWlyZXMiOiB7CisgICAgICAgICJqcy10b2tlbnMiOiAiMy4wLjIiCisgICAgICB9LAorICAgICAg
ImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImpzLXRva2VucyI6IHsKKyAgICAgICAgICAidmVy
c2lvbiI6ICIzLjAuMiIsCisgICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnku
bnBtanMub3JnL2pzLXRva2Vucy8tL2pzLXRva2Vucy0zLjAuMi50Z3oiLAorICAgICAgICAgICJp
bnRlZ3JpdHkiOiAic2hhMS1tR2JmT1ZFQ0V3NDQ5L21Xdk90bFJESUp3bHM9IiwKKyAgICAgICAg
ICAiZGV2IjogdHJ1ZQorICAgICAgICB9CisgICAgICB9CisgICAgfSwKKyAgICAibHJ1LWNhY2hl
IjogeworICAgICAgInZlcnNpb24iOiAiNC4xLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBz
Oi8vcmVnaXN0cnkubnBtanMub3JnL2xydS1jYWNoZS8tL2xydS1jYWNoZS00LjEuMS50Z3oiLAor
ICAgICAgImludGVncml0eSI6ICJzaGE1MTItcTRzcGU0S1Rmc0FTMVNVSExPMHd6OFFpeWYxK3ZN
SUFncFJZaW9GWURNTnFLZkhRYmcrQVZESDNpNGZ2cGw3MS9QMUwwZEJsK2ZRaStQMzdVWWYwZXc9
PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAgInBz
ZXVkb21hcCI6ICIxLjAuMiIsCisgICAgICAgICJ5YWxsaXN0IjogIjIuMS4yIgorICAgICAgfQor
ICAgIH0sCisgICAgIm1ha2UtYXJyYXkiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjEuMiIsCisg
ICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWFrZS1hcnJheS8t
L21ha2UtYXJyYXktMC4xLjIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1NMTQyNjdE
RnBERlUwaElUb2V5dXJpb2JzKzg9IiwKKyAgICAgICJkZXYiOiB0cnVlCisgICAgfSwKKyAgICAi
bWFrZS1kaXIiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjAuMCIsCisgICAgICAicmVzb2x2ZWQi
OiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWFrZS1kaXIvLS9tYWtlLWRpci0xLjAuMC50
Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLWw2QVJkUjZSM1lmUHJlOVlneTY3QkpOdDZY
Zz0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICJw
aWZ5IjogIjIuMy4wIgorICAgICAgfQorICAgIH0sCisgICAgIm1ha2VlcnJvciI6IHsKKyAgICAg
ICJ2ZXJzaW9uIjogIjEuMC4xMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3Ry
eS5ucG1qcy5vcmcvbWFrZWVycm9yLy0vbWFrZWVycm9yLTEuMC4xMS50Z3oiLAorICAgICAgImlu
dGVncml0eSI6ICJzaGExLTRCcGNrUW55cjNsbURrNkxsWWQ1QVlUMXFXdz0iLAorICAgICAgImRl
diI6IHRydWUsCisgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICJ0bXBsIjogIjEuMC40Igor
ICAgICAgfQorICAgIH0sCisgICAgIm1hcmtkb3duLWl0IjogeworICAgICAgInZlcnNpb24iOiAi
OC4zLjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21h
cmtkb3duLWl0Ly0vbWFya2Rvd24taXQtOC4zLjIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAi
c2hhNTEyLTRKOTJJaEpxMWtHb3lYZGR3enpmanI5Y0VLR2V4QmZGc1pvb0tZTWhNTExsV2E0K2Rs
U1BEVVVQN3kreFFPQ2ViSWo2MWFMbUtsb3dnLy9ZY2RQUDF3PT0iLAorICAgICAgImRldiI6IHRy
dWUsCisgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICJhcmdwYXJzZSI6ICIxLjAuOSIsCisg
ICAgICAgICJlbnRpdGllcyI6ICIxLjEuMSIsCisgICAgICAgICJsaW5raWZ5LWl0IjogIjIuMC4z
IiwKKyAgICAgICAgIm1kdXJsIjogIjEuMC4xIiwKKyAgICAgICAgInVjLm1pY3JvIjogIjEuMC4z
IgorICAgICAgfQorICAgIH0sCisgICAgIm1hcmtkb3duLWl0LXRlcm1pbmFsIjogeworICAgICAg
InZlcnNpb24iOiAiMC4xLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnku
bnBtanMub3JnL21hcmtkb3duLWl0LXRlcm1pbmFsLy0vbWFya2Rvd24taXQtdGVybWluYWwtMC4x
LjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1WRnE5amRBY1BXSTFPL3pxY2R0WUMx
SFNLOWs9IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgInJlcXVpcmVzIjogeworICAgICAg
ICAiYW5zaS1zdHlsZXMiOiAiMy4yLjAiLAorICAgICAgICAiY2FyZGluYWwiOiAiMS4wLjAiLAor
ICAgICAgICAiY2xpLXRhYmxlIjogIjAuMy4xIiwKKyAgICAgICAgImxvZGFzaC5tZXJnZSI6ICI0
LjYuMCIsCisgICAgICAgICJtYXJrZG93bi1pdCI6ICI4LjMuMiIKKyAgICAgIH0sCisgICAgICAi
ZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiYW5zaS1zdHlsZXMiOiB7CisgICAgICAgICAgInZl
cnNpb24iOiAiMy4yLjAiLAorICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5
Lm5wbWpzLm9yZy9hbnNpLXN0eWxlcy8tL2Fuc2ktc3R5bGVzLTMuMi4wLnRneiIsCisgICAgICAg
ICAgImludGVncml0eSI6ICJzaGE1MTItTm5TT21NRVl0VlIySlZNSUdUenluUmtrYXh0aXExeG5G
QmNkUUQvRG5OQ1lQb0VQc1ZKaE05OEJEeWFvTk9RSWk3cDRva2RpM0UyN2VON0dRYnNVdWc9PSIs
CisgICAgICAgICAgImRldiI6IHRydWUsCisgICAgICAgICAgInJlcXVpcmVzIjogeworICAgICAg
ICAgICAgImNvbG9yLWNvbnZlcnQiOiAiMS45LjAiCisgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICB9CisgICAgfSwKKyAgICAibWF0Y2hlci1jb2xsZWN0aW9uIjogeworICAgICAgInZlcnNp
b24iOiAiMS4wLjQiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMu
b3JnL21hdGNoZXItY29sbGVjdGlvbi8tL21hdGNoZXItY29sbGVjdGlvbi0xLjAuNC50Z3oiLAor
ICAgICAgImludGVncml0eSI6ICJzaGExLUwyYXVDR21aYnlua1BRdGl5RDNSMUQ1WUYxVT0iLAor
ICAgICAgImRldiI6IHRydWUsCisgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICJtaW5pbWF0
Y2giOiAiMy4wLjQiCisgICAgICB9CisgICAgfSwKKyAgICAibWR1cmwiOiB7CisgICAgICAidmVy
c2lvbiI6ICIxLjAuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1q
cy5vcmcvbWR1cmwvLS9tZHVybC0xLjAuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGEx
LS9vV3k3SFdsa0RmeXJmN0JBUDFzWUJkaEZTND0iLAorICAgICAgImRldiI6IHRydWUKKyAgICB9
LAorICAgICJtZWRpYS10eXBlciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuMy4wIiwKKyAgICAg
ICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9tZWRpYS10eXBlci8tL21l
ZGlhLXR5cGVyLTAuMy4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtaHhEWHJ3cW1K
dmovK2h6Z0FXaFVVbU1sVjBnPSIsCisgICAgICAiZGV2IjogdHJ1ZQorICAgIH0sCisgICAgIm1l
bW9yeS1zdHJlYW1zIjogeworICAgICAgInZlcnNpb24iOiAiMC4xLjIiLAorICAgICAgInJlc29s
dmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21lbW9yeS1zdHJlYW1zLy0vbWVtb3J5
LXN0cmVhbXMtMC4xLjIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1Kei8zZDZ0Zy9z
V1pzUlkxVWxVb0xNb3NVTUk9IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgInJlcXVpcmVz
IjogeworICAgICAgICAicmVhZGFibGUtc3RyZWFtIjogIjEuMC4zNCIKKyAgICAgIH0KKyAgICB9
LAorICAgICJtZXJnZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMi4wIiwKKyAgICAgICJyZXNv
bHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9tZXJnZS8tL21lcmdlLTEuMi4wLnRn
eiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtZFRIam5VbEp3b0dtYTR4YWJnSmw2TEJZbE5v
PSIsCisgICAgICAiZGV2IjogdHJ1ZQorICAgIH0sCisgICAgIm1lcmdlLWRlc2NyaXB0b3JzIjog
eworICAgICAgInZlcnNpb24iOiAiMS4wLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8v
cmVnaXN0cnkubnBtanMub3JnL21lcmdlLWRlc2NyaXB0b3JzLy0vbWVyZ2UtZGVzY3JpcHRvcnMt
MS4wLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1zQXFxVlczWXRFVm9GUTdKMGJs
VDgva011MkU9IiwKKyAgICAgICJkZXYiOiB0cnVlCisgICAgfSwKKyAgICAibWVyZ2UtdHJlZXMi
OiB7CisgICAgICAidmVyc2lvbiI6ICIxLjAuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6
Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWVyZ2UtdHJlZXMvLS9tZXJnZS10cmVlcy0xLjAuMS50Z3oi
LAorICAgICAgImludGVncml0eSI6ICJzaGExLXpMNW5SV2w0ZjUzdkYvMUc1bEpmVndDNzBqND0i
LAorICAgICAgImRldiI6IHRydWUsCisgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICJjYW4t
c3ltbGluayI6ICIxLjAuMCIsCisgICAgICAgICJmcy10cmVlLWRpZmYiOiAiMC41LjYiLAorICAg
ICAgICAiaGVpbWRhbGxqcyI6ICIwLjIuNSIsCisgICAgICAgICJoZWltZGFsbGpzLWxvZ2dlciI6
ICIwLjEuOSIsCisgICAgICAgICJyaW1yYWYiOiAiMi42LjEiLAorICAgICAgICAic3ltbGluay1v
ci1jb3B5IjogIjEuMS44IgorICAgICAgfQorICAgIH0sCisgICAgIm1ldGhvZHMiOiB7CisgICAg
ICAidmVyc2lvbiI6ICIxLjEuMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3Ry
eS5ucG1qcy5vcmcvbWV0aG9kcy8tL21ldGhvZHMtMS4xLjIudGd6IiwKKyAgICAgICJpbnRlZ3Jp
dHkiOiAic2hhMS1WU21rMW5aVUUwN2N4U1ptVm9OYkQ0VWEvTzQ9IiwKKyAgICAgICJkZXYiOiB0
cnVlCisgICAgfSwKKyAgICAibWljcm9tYXRjaCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuMy4x
MSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWljcm9t
YXRjaC8tL21pY3JvbWF0Y2gtMi4zLjExLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEt
aG1kOGw5RnlDelkwTWRCTkRSVXBPOU9NRldVPSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAg
ICJyZXF1aXJlcyI6IHsKKyAgICAgICAgImFyci1kaWZmIjogIjIuMC4wIiwKKyAgICAgICAgImFy
cmF5LXVuaXF1ZSI6ICIwLjIuMSIsCisgICAgICAgICJicmFjZXMiOiAiMS44LjUiLAorICAgICAg
ICAiZXhwYW5kLWJyYWNrZXRzIjogIjAuMS41IiwKKyAgICAgICAgImV4dGdsb2IiOiAiMC4zLjIi
LAorICAgICAgICAiZmlsZW5hbWUtcmVnZXgiOiAiMi4wLjEiLAorICAgICAgICAiaXMtZXh0Z2xv
YiI6ICIxLjAuMCIsCisgICAgICAgICJpcy1nbG9iIjogIjIuMC4xIiwKKyAgICAgICAgImtpbmQt
b2YiOiAiMy4yLjIiLAorICAgICAgICAibm9ybWFsaXplLXBhdGgiOiAiMi4xLjEiLAorICAgICAg
ICAib2JqZWN0Lm9taXQiOiAiMi4wLjEiLAorICAgICAgICAicGFyc2UtZ2xvYiI6ICIzLjAuNCIs
CisgICAgICAgICJyZWdleC1jYWNoZSI6ICIwLjQuMyIKKyAgICAgIH0KKyAgICB9LAorICAgICJt
aW1lIjogeworICAgICAgInZlcnNpb24iOiAiMS4zLjYiLAorICAgICAgInJlc29sdmVkIjogImh0
dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21pbWUvLS9taW1lLTEuMy42LnRneiIsCisgICAgICAi
aW50ZWdyaXR5IjogInNoYTEtV1IyRTAyVTZhd3RLTzUzNDNscW9FSTV5NWVBPSIsCisgICAgICAi
ZGV2IjogdHJ1ZQorICAgIH0sCisgICAgIm1pbWUtZGIiOiB7CisgICAgICAidmVyc2lvbiI6ICIx
LjI5LjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21p
bWUtZGIvLS9taW1lLWRiLTEuMjkuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLVNO
SnRJMVdKWlJjRXJGa1d5Z1lBR1JRbWFIZz0iLAorICAgICAgImRldiI6IHRydWUKKyAgICB9LAor
ICAgICJtaW1lLXR5cGVzIjogeworICAgICAgInZlcnNpb24iOiAiMi4xLjE2IiwKKyAgICAgICJy
ZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9taW1lLXR5cGVzLy0vbWltZS10
eXBlcy0yLjEuMTYudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1LNFdLVXVYczFSYmJp
WHJDdm9kSWVEQnBqaU09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgInJlcXVpcmVzIjog
eworICAgICAgICAibWltZS1kYiI6ICIxLjI5LjAiCisgICAgICB9CisgICAgfSwKKyAgICAibWlu
aW1hdGNoIjogeworICAgICAgInZlcnNpb24iOiAiMy4wLjQiLAorICAgICAgInJlc29sdmVkIjog
Imh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21pbmltYXRjaC8tL21pbmltYXRjaC0zLjAuNC50
Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTIteUpIVlFFaHlxUExVVGd0OUI4M1BYdTZX
M3J4NE12dkh2U1V2VG9vZ3B3b0dET1VRK3lEclIwSFJvdCt5T0NkQ083dTRoWDNwV2Z0NmtXQkJj
cWgwVUE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAg
ICAgImJyYWNlLWV4cGFuc2lvbiI6ICIxLjEuOCIKKyAgICAgIH0KKyAgICB9LAorICAgICJtaW5p
bWlzdCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuMC44IiwKKyAgICAgICJyZXNvbHZlZCI6ICJo
dHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9taW5pbWlzdC8tL21pbmltaXN0LTAuMC44LnRneiIs
CisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtaFgvS3Y4TTVmU1lsdUNLQ1l1aHFwNkFSc0YwPSIs
CisgICAgICAiZGV2IjogdHJ1ZQorICAgIH0sCisgICAgIm1rZGlycCI6IHsKKyAgICAgICJ2ZXJz
aW9uIjogIjAuNS4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpz
Lm9yZy9ta2RpcnAvLS9ta2RpcnAtMC41LjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hh
MS1NQVYwT09yR3ozK01SMmZ6aGtqV2FYMTF5UU09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAg
ICAgInJlcXVpcmVzIjogeworICAgICAgICAibWluaW1pc3QiOiAiMC4wLjgiCisgICAgICB9Cisg
ICAgfSwKKyAgICAibWt0ZW1wIjogeworICAgICAgInZlcnNpb24iOiAiMC40LjAiLAorICAgICAg
InJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21rdGVtcC8tL21rdGVtcC0w
LjQuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLWJRVVZZUnlLaklUa2hLb2dBQkti
bU9tQi93cz0iLAorICAgICAgImRldiI6IHRydWUKKyAgICB9LAorICAgICJtb21lbnQiOiB7Cisg
ICAgICAidmVyc2lvbiI6ICIyLjE4LjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVn
aXN0cnkubnBtanMub3JnL21vbWVudC8tL21vbWVudC0yLjE4LjEudGd6IiwKKyAgICAgICJpbnRl
Z3JpdHkiOiAic2hhMS13MkdUM1R6aHd1N1NyYmZJQXR1OGQ2Z2JIQTg9IiwKKyAgICAgICJkZXYi
OiB0cnVlCisgICAgfSwKKyAgICAibW9tZW50LXRpbWV6b25lIjogeworICAgICAgInZlcnNpb24i
OiAiMC4zLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3Jn
L21vbWVudC10aW1lem9uZS8tL21vbWVudC10aW1lem9uZS0wLjMuMS50Z3oiLAorICAgICAgImlu
dGVncml0eSI6ICJzaGExLVB2UjRWckF0VTdjWW9RcGV3Z0k2b3BuZ2UvVT0iLAorICAgICAgImRl
diI6IHRydWUsCisgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICJtb21lbnQiOiAiMi4xOC4x
IgorICAgICAgfQorICAgIH0sCisgICAgIm1vcmdhbiI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEu
OC4yIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9tb3Jn
YW4vLS9tb3JnYW4tMS44LjIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1lRXJIYzA1
S1JUcWNibTZHZ0treWtuWEl0b2M9IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgInJlcXVp
cmVzIjogeworICAgICAgICAiYmFzaWMtYXV0aCI6ICIxLjEuMCIsCisgICAgICAgICJkZWJ1ZyI6
ICIyLjYuOCIsCisgICAgICAgICJkZXBkIjogIjEuMS4xIiwKKyAgICAgICAgIm9uLWZpbmlzaGVk
IjogIjIuMy4wIiwKKyAgICAgICAgIm9uLWhlYWRlcnMiOiAiMS4wLjEiCisgICAgICB9CisgICAg
fSwKKyAgICAibW91dCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMC4wIiwKKyAgICAgICJyZXNv
bHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9tb3V0Ly0vbW91dC0xLjAuMC50Z3oi
LAorICAgICAgImludGVncml0eSI6ICJzaGExLW05OGRTdlY5WnRSOHMxT21NMW95Z1FtT0ZRRT0i
LAorICAgICAgImRldiI6IHRydWUKKyAgICB9LAorICAgICJtcyI6IHsKKyAgICAgICJ2ZXJzaW9u
IjogIjIuMC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9y
Zy9tcy8tL21zLTIuMC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtVmdpdXJmd0F2
bXdwQWQ5Zm1HRjRqZURWbDhnPSIsCisgICAgICAiZGV2IjogdHJ1ZQorICAgIH0sCisgICAgIm11
c3RhY2hlIjogeworICAgICAgInZlcnNpb24iOiAiMi4zLjAiLAorICAgICAgInJlc29sdmVkIjog
Imh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL211c3RhY2hlLy0vbXVzdGFjaGUtMi4zLjAudGd6
IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1RQ2ozZDRzWGNJcEltVENtNVNyRHZLRGFRZEE9
IiwKKyAgICAgICJkZXYiOiB0cnVlCisgICAgfSwKKyAgICAibXV0ZS1zdHJlYW0iOiB7CisgICAg
ICAidmVyc2lvbiI6ICIwLjAuNiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3Ry
eS5ucG1qcy5vcmcvbXV0ZS1zdHJlYW0vLS9tdXRlLXN0cmVhbS0wLjAuNi50Z3oiLAorICAgICAg
ImludGVncml0eSI6ICJzaGExLVNKWXJHZUZwL1IzOEpBcy9Ibk1YWW51OFI5cz0iLAorICAgICAg
ImRldiI6IHRydWUKKyAgICB9LAorICAgICJuYW4iOiB7CisgICAgICAidmVyc2lvbiI6ICIyLjYu
MiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbmFuLy0v
bmFuLTIuNi4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtNVA4MDVzbGYzN1d1ekFq
ZVpaYjBOZ1duMjBVPSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJvcHRpb25hbCI6IHRy
dWUKKyAgICB9LAorICAgICJuZWdvdGlhdG9yIjogeworICAgICAgInZlcnNpb24iOiAiMC42LjEi
LAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL25lZ290aWF0
b3IvLS9uZWdvdGlhdG9yLTAuNi4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtS3pK
eGhPaVpJUUVYZXloV1A3WG5FQ3JOREtrPSIsCisgICAgICAiZGV2IjogdHJ1ZQorICAgIH0sCisg
ICAgIm5vZGUtZmV0Y2giOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjcuMSIsCisgICAgICAicmVz
b2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbm9kZS1mZXRjaC8tL25vZGUtZmV0
Y2gtMS43LjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWo4WHNGR0NMdzc5dldY
a1p0TVNtbUxhT2s5ejVTUTliVi90a2JaVkNxdmd3enJqQUdxNjZpZ29iTG9mSHRGNjNOdk1UcDJX
anl0cHNOVEdLYStYUklRPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAicmVxdWlyZXMi
OiB7CisgICAgICAgICJlbmNvZGluZyI6ICIwLjEuMTIiLAorICAgICAgICAiaXMtc3RyZWFtIjog
IjEuMS4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGUtaW50NjQiOiB7CisgICAgICAidmVy
c2lvbiI6ICIwLjQuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1q
cy5vcmcvbm9kZS1pbnQ2NC8tL25vZGUtaW50NjQtMC40LjAudGd6IiwKKyAgICAgICJpbnRlZ3Jp
dHkiOiAic2hhMS1oNmtHWE5zMVhUR0MyUGxNNFJHSXVDWEdpanM9IiwKKyAgICAgICJkZXYiOiB0
cnVlCisgICAgfSwKKyAgICAibm9kZS1tb2R1bGVzLXBhdGgiOiB7CisgICAgICAidmVyc2lvbiI6
ICIxLjAuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcv
bm9kZS1tb2R1bGVzLXBhdGgvLS9ub2RlLW1vZHVsZXMtcGF0aC0xLjAuMS50Z3oiLAorICAgICAg
ImludGVncml0eSI6ICJzaGExLVFBbHJDTTU2ME9vVWFBaGpyMFNjZkhXbDBjZz0iLAorICAgICAg
ImRldiI6IHRydWUKKyAgICB9LAorICAgICJub2RlLW5vdGlmaWVyIjogeworICAgICAgInZlcnNp
b24iOiAiNS4xLjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMu
b3JnL25vZGUtbm90aWZpZXIvLS9ub2RlLW5vdGlmaWVyLTUuMS4yLnRneiIsCisgICAgICAiaW50
ZWdyaXR5IjogInNoYTEtTDZuaEpnWDZFQUNkUkZTZGI4MktZOTNnNVA4PSIsCisgICAgICAiZGV2
IjogdHJ1ZSwKKyAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAgImdyb3dseSI6ICIxLjMuMCIs
CisgICAgICAgICJzZW12ZXIiOiAiNS40LjEiLAorICAgICAgICAic2hlbGx3b3JkcyI6ICIwLjEu
MCIsCisgICAgICAgICJ3aGljaCI6ICIxLjMuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub3B0
IjogeworICAgICAgInZlcnNpb24iOiAiMy4wLjYiLAorICAgICAgInJlc29sdmVkIjogImh0dHBz
Oi8vcmVnaXN0cnkubnBtanMub3JnL25vcHQvLS9ub3B0LTMuMC42LnRneiIsCisgICAgICAiaW50
ZWdyaXR5IjogInNoYTEteGtaZHZ3aXJ6VTJ6V1RGL2VheG9wa2F5ai9rPSIsCisgICAgICAiZGV2
IjogdHJ1ZSwKKyAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAgImFiYnJldiI6ICIxLjEuMCIK
KyAgICAgIH0KKyAgICB9LAorICAgICJub3JtYWxpemUtcGF0aCI6IHsKKyAgICAgICJ2ZXJzaW9u
IjogIjIuMS4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9y
Zy9ub3JtYWxpemUtcGF0aC8tL25vcm1hbGl6ZS1wYXRoLTIuMS4xLnRneiIsCisgICAgICAiaW50
ZWdyaXR5IjogInNoYTEtR3JLTFZXNFpnMk9vd2FiMzV2b2dFMy9tcnRrPSIsCisgICAgICAiZGV2
IjogdHJ1ZSwKKyAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAgInJlbW92ZS10cmFpbGluZy1z
ZXBhcmF0b3IiOiAiMS4wLjIiCisgICAgICB9CisgICAgfSwKKyAgICAibnBtLXBhY2thZ2UtYXJn
IjogeworICAgICAgInZlcnNpb24iOiAiNC4yLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBz
Oi8vcmVnaXN0cnkubnBtanMub3JnL25wbS1wYWNrYWdlLWFyZy8tL25wbS1wYWNrYWdlLWFyZy00
LjIuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLVdUTUQvZXFGOThRaWQxOFgrZXQy
Y1BhQTQrdz0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAicmVxdWlyZXMiOiB7CisgICAg
ICAgICJob3N0ZWQtZ2l0LWluZm8iOiAiMi41LjAiLAorICAgICAgICAic2VtdmVyIjogIjUuNC4x
IgorICAgICAgfQorICAgIH0sCisgICAgIm5wbS1ydW4tcGF0aCI6IHsKKyAgICAgICJ2ZXJzaW9u
IjogIjIuMC4yIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9y
Zy9ucG0tcnVuLXBhdGgvLS9ucG0tcnVuLXBhdGgtMi4wLjIudGd6IiwKKyAgICAgICJpbnRlZ3Jp
dHkiOiAic2hhMS1OYWtqTGZvMTF3WjdUTExkOGpWN0dIRlRiRjg9IiwKKyAgICAgICJkZXYiOiB0
cnVlLAorICAgICAgInJlcXVpcmVzIjogeworICAgICAgICAicGF0aC1rZXkiOiAiMi4wLjEiCisg
ICAgICB9CisgICAgfSwKKyAgICAibnBtbG9nIjogeworICAgICAgInZlcnNpb24iOiAiNC4xLjIi
LAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL25wbWxvZy8t
L25wbWxvZy00LjEuMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItMnVVcWF6dUts
VGFTSS9kQzhBemljVWNrNytJckVhT25OL2UwamQzWHR0MUtjR3B3eDMwdjUwbUw3b1B5ci9oOWJM
M0U0YVpjY1Z3cHdQKzVXOVZqa2c9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJyZXF1
aXJlcyI6IHsKKyAgICAgICAgImFyZS13ZS10aGVyZS15ZXQiOiAiMS4xLjQiLAorICAgICAgICAi
Y29uc29sZS1jb250cm9sLXN0cmluZ3MiOiAiMS4xLjAiLAorICAgICAgICAiZ2F1Z2UiOiAiMi43
LjQiLAorICAgICAgICAic2V0LWJsb2NraW5nIjogIjIuMC4wIgorICAgICAgfQorICAgIH0sCisg
ICAgIm51bWJlci1pcy1uYW4iOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjAuMSIsCisgICAgICAi
cmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbnVtYmVyLWlzLW5hbi8tL251
bWJlci1pcy1uYW4tMS4wLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1DWHRnSzFO
Q0tsSXNHdnVIa0RHRE5wUWFBUjA9IiwKKyAgICAgICJkZXYiOiB0cnVlCisgICAgfSwKKyAgICAi
b2JqZWN0LWFzc2lnbiI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuMS4xIiwKKyAgICAgICJyZXNv
bHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9vYmplY3QtYXNzaWduLy0vb2JqZWN0
LWFzc2lnbi00LjEuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLUlRbXR4NVpZaDgv
QVhMdlVRc3JJdjdzMkNHTT0iLAorICAgICAgImRldiI6IHRydWUKKyAgICB9LAorICAgICJvYmpl
Y3QtY29tcG9uZW50IjogeworICAgICAgInZlcnNpb24iOiAiMC4wLjMiLAorICAgICAgInJlc29s
dmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL29iamVjdC1jb21wb25lbnQvLS9vYmpl
Y3QtY29tcG9uZW50LTAuMC4zLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtOE1hYXBR
NzhsYmhtd1liMEFLTTNhY3N2RXBFPSIsCisgICAgICAiZGV2IjogdHJ1ZQorICAgIH0sCisgICAg
Im9iamVjdC5vbWl0IjogeworICAgICAgInZlcnNpb24iOiAiMi4wLjEiLAorICAgICAgInJlc29s
dmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL29iamVjdC5vbWl0Ly0vb2JqZWN0Lm9t
aXQtMi4wLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1HcHgwU0Nuem5idUZqSGJL
TlhtdUtsVHIwZm89IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgInJlcXVpcmVzIjogewor
ICAgICAgICAiZm9yLW93biI6ICIwLjEuNSIsCisgICAgICAgICJpcy1leHRlbmRhYmxlIjogIjAu
MS4xIgorICAgICAgfQorICAgIH0sCisgICAgIm9uLWZpbmlzaGVkIjogeworICAgICAgInZlcnNp
b24iOiAiMi4zLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMu
b3JnL29uLWZpbmlzaGVkLy0vb24tZmluaXNoZWQtMi4zLjAudGd6IiwKKyAgICAgICJpbnRlZ3Jp
dHkiOiAic2hhMS1JUEV6WklHd2c4MTFNM21Tb1dseHFpMlFhVWM9IiwKKyAgICAgICJkZXYiOiB0
cnVlLAorICAgICAgInJlcXVpcmVzIjogeworICAgICAgICAiZWUtZmlyc3QiOiAiMS4xLjEiCisg
ICAgICB9CisgICAgfSwKKyAgICAib24taGVhZGVycyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEu
MC4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9vbi1o
ZWFkZXJzLy0vb24taGVhZGVycy0xLjAuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGEx
LWtvOWREMGNOU1RRbVVlcG5sTENGZkJBR2svYz0iLAorICAgICAgImRldiI6IHRydWUKKyAgICB9
LAorICAgICJvbmNlIjogeworICAgICAgInZlcnNpb24iOiAiMS40LjAiLAorICAgICAgInJlc29s
dmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL29uY2UvLS9vbmNlLTEuNC4wLnRneiIs
CisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtV0RzYXAzV1dIVXNST3NGOW5GQzY3NTNYYTlFPSIs
CisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAgIndyYXBw
eSI6ICIxLjAuMiIKKyAgICAgIH0KKyAgICB9LAorICAgICJvbmV0aW1lIjogeworICAgICAgInZl
cnNpb24iOiAiMS4xLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBt
anMub3JnL29uZXRpbWUvLS9vbmV0aW1lLTEuMS4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5Ijog
InNoYTEtb2ZlRGo0TVV4UmJ3WHM3OHZFelA0RXRPMTRrPSIsCisgICAgICAiZGV2IjogdHJ1ZQor
ICAgIH0sCisgICAgIm9wdGltaXN0IjogeworICAgICAgInZlcnNpb24iOiAiMC42LjEiLAorICAg
ICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL29wdGltaXN0Ly0vb3B0
aW1pc3QtMC42LjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS0yajZuUm9iNklhR2FF
Und5YnBEckZhQVpab1k9IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgInJlcXVpcmVzIjog
eworICAgICAgICAibWluaW1pc3QiOiAiMC4wLjgiLAorICAgICAgICAid29yZHdyYXAiOiAiMC4w
LjIiCisgICAgICB9CisgICAgfSwKKyAgICAib3B0aW9ucyI6IHsKKyAgICAgICJ2ZXJzaW9uIjog
IjAuMC42IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9v
cHRpb25zLy0vb3B0aW9ucy0wLjAuNi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLTdD
TFRFb0JydFQ1ekYzUG56YTc4OGNaREVvOD0iLAorICAgICAgImRldiI6IHRydWUKKyAgICB9LAor
ICAgICJvcmEiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjIuMyIsCisgICAgICAicmVzb2x2ZWQi
OiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvb3JhLy0vb3JhLTAuMi4zLnRneiIsCisgICAg
ICAiaW50ZWdyaXR5IjogInNoYTEtTjFKOUlncmMxVHc1dHpWeDExUVZiVjIyVjZRPSIsCisgICAg
ICAiZGV2IjogdHJ1ZSwKKyAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAgImNoYWxrIjogIjEu
MS4zIiwKKyAgICAgICAgImNsaS1jdXJzb3IiOiAiMS4wLjIiLAorICAgICAgICAiY2xpLXNwaW5u
ZXJzIjogIjAuMS4yIiwKKyAgICAgICAgIm9iamVjdC1hc3NpZ24iOiAiNC4xLjEiCisgICAgICB9
CisgICAgfSwKKyAgICAib3MtaG9tZWRpciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMC4yIiwK
KyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9vcy1ob21lZGly
Ly0vb3MtaG9tZWRpci0xLjAuMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLS83eEpp
RE51RG9NOTRNRm94KzhWSVNHcWY3TT0iLAorICAgICAgImRldiI6IHRydWUKKyAgICB9LAorICAg
ICJvcy1sb2NhbGUiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjQuMCIsCisgICAgICAicmVzb2x2
ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvb3MtbG9jYWxlLy0vb3MtbG9jYWxlLTEu
NC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtSVBueGV1S2UwMFhvdmVXRHNUMGdD
WUE4Rk5rPSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAg
ICAgImxjaWQiOiAiMS4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAib3Mtc2hpbSI6IHsKKyAg
ICAgICJ2ZXJzaW9uIjogIjAuMS4zIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lz
dHJ5Lm5wbWpzLm9yZy9vcy1zaGltLy0vb3Mtc2hpbS0wLjEuMy50Z3oiLAorICAgICAgImludGVn
cml0eSI6ICJzaGExLWEyTERlUnoza0o2alh0UnVGMldMdEJmTE9SYz0iLAorICAgICAgImRldiI6
IHRydWUKKyAgICB9LAorICAgICJvcy10bXBkaXIiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjAu
MiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvb3MtdG1w
ZGlyLy0vb3MtdG1wZGlyLTEuMC4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtdSta
MEJzZWFxRnhjL3NkbS9sYzBWVjM2RW5RPSIsCisgICAgICAiZGV2IjogdHJ1ZQorICAgIH0sCisg
ICAgIm9zZW52IjogeworICAgICAgInZlcnNpb24iOiAiMC4xLjQiLAorICAgICAgInJlc29sdmVk
IjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL29zZW52Ly0vb3NlbnYtMC4xLjQudGd6IiwK
KyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1RdjV0V1ZQZkJzZ0dTK2J4ZHNQUVdxcWpSa1E9IiwK
KyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgInJlcXVpcmVzIjogeworICAgICAgICAib3MtaG9t
ZWRpciI6ICIxLjAuMiIsCisgICAgICAgICJvcy10bXBkaXIiOiAiMS4wLjIiCisgICAgICB9Cisg
ICAgfSwKKyAgICAib3V0cHV0LWZpbGUtc3luYyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMS4y
IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9vdXRwdXQt
ZmlsZS1zeW5jLy0vb3V0cHV0LWZpbGUtc3luYy0xLjEuMi50Z3oiLAorICAgICAgImludGVncml0
eSI6ICJzaGExLTBLTSs3K1lhSUYrc3VRQ1M2Q1paalZKRnpuWT0iLAorICAgICAgImRldiI6IHRy
dWUsCisgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICJncmFjZWZ1bC1mcyI6ICI0LjEuMTEi
LAorICAgICAgICAibWtkaXJwIjogIjAuNS4xIiwKKyAgICAgICAgIm9iamVjdC1hc3NpZ24iOiAi
NC4xLjEiCisgICAgICB9CisgICAgfSwKKyAgICAicC1maW5hbGx5IjogeworICAgICAgInZlcnNp
b24iOiAiMS4wLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMu
b3JnL3AtZmluYWxseS8tL3AtZmluYWxseS0xLjAuMC50Z3oiLAorICAgICAgImludGVncml0eSI6
ICJzaGExLVA3ejdGYmlacEVFanMwdHR6QmkzSkROcUxLND0iLAorICAgICAgImRldiI6IHRydWUK
KyAgICB9LAorICAgICJwLWxpbWl0IjogeworICAgICAgInZlcnNpb24iOiAiMS4xLjAiLAorICAg
ICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3AtbGltaXQvLS9wLWxp
bWl0LTEuMS4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtc0gveTJhWFlpK3lBWURX
SldpdXJacUo1aUx3PSIsCisgICAgICAiZGV2IjogdHJ1ZQorICAgIH0sCisgICAgInAtbG9jYXRl
IjogeworICAgICAgInZlcnNpb24iOiAiMi4wLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBz
Oi8vcmVnaXN0cnkubnBtanMub3JnL3AtbG9jYXRlLy0vcC1sb2NhdGUtMi4wLjAudGd6IiwKKyAg
ICAgICJpbnRlZ3JpdHkiOiAic2hhMS1JS0FRT3lJcWNNajlPY3d1V0FhQTg5M2w3RU09IiwKKyAg
ICAgICJkZXYiOiB0cnVlLAorICAgICAgInJlcXVpcmVzIjogeworICAgICAgICAicC1saW1pdCI6
ICIxLjEuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJwYXJzZS1nbG9iIjogeworICAgICAgInZl
cnNpb24iOiAiMy4wLjQiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBt
anMub3JnL3BhcnNlLWdsb2IvLS9wYXJzZS1nbG9iLTMuMC40LnRneiIsCisgICAgICAiaW50ZWdy
aXR5IjogInNoYTEtc3NOMno3RWZOVkU3cmRGejd3dTI0Nk9JT1J3PSIsCisgICAgICAiZGV2Ijog
dHJ1ZSwKKyAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAgImdsb2ItYmFzZSI6ICIwLjMuMCIs
CisgICAgICAgICJpcy1kb3RmaWxlIjogIjEuMC4zIiwKKyAgICAgICAgImlzLWV4dGdsb2IiOiAi
MS4wLjAiLAorICAgICAgICAiaXMtZ2xvYiI6ICIyLjAuMSIKKyAgICAgIH0KKyAgICB9LAorICAg
ICJwYXJzZS1wYXNzd2QiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjAuMCIsCisgICAgICAicmVz
b2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcGFyc2UtcGFzc3dkLy0vcGFyc2Ut
cGFzc3dkLTEuMC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtYlZ1VFNrVnBrN0k5
Ti9RS09DMXZGbWFvNWNZPSIsCisgICAgICAiZGV2IjogdHJ1ZQorICAgIH0sCisgICAgInBhcnNl
anNvbiI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuMC4zIiwKKyAgICAgICJyZXNvbHZlZCI6ICJo
dHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wYXJzZWpzb24vLS9wYXJzZWpzb24tMC4wLjMudGd6
IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1xMzQzV2ZJSjdPbVVONWMvZlE4ZlpLNE9aS3M9
IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgInJlcXVpcmVzIjogeworICAgICAgICAiYmV0
dGVyLWFzc2VydCI6ICIxLjAuMiIKKyAgICAgIH0KKyAgICB9LAorICAgICJwYXJzZXFzIjogewor
ICAgICAgInZlcnNpb24iOiAiMC4wLjUiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVn
aXN0cnkubnBtanMub3JnL3BhcnNlcXMvLS9wYXJzZXFzLTAuMC41LnRneiIsCisgICAgICAiaW50
ZWdyaXR5IjogInNoYTEtMVNDS056amtaMmJpa2JvdW9YTm9TU0dvdUowPSIsCisgICAgICAiZGV2
IjogdHJ1ZSwKKyAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAgImJldHRlci1hc3NlcnQiOiAi
MS4wLjIiCisgICAgICB9CisgICAgfSwKKyAgICAicGFyc2V1cmkiOiB7CisgICAgICAidmVyc2lv
biI6ICIwLjAuNSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5v
cmcvcGFyc2V1cmkvLS9wYXJzZXVyaS0wLjAuNS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJz
aGExLWdDQktVTlRidDNtLzNHNitKM2paRGt2T01nbz0iLAorICAgICAgImRldiI6IHRydWUsCisg
ICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICJiZXR0ZXItYXNzZXJ0IjogIjEuMC4yIgorICAg
ICAgfQorICAgIH0sCisgICAgInBhcnNldXJsIjogeworICAgICAgInZlcnNpb24iOiAiMS4zLjEi
LAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3BhcnNldXJs
Ly0vcGFyc2V1cmwtMS4zLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS15S3VNa2lP
Nk5JaUtwa29wZXlpRk8rd1kybFk9IiwKKyAgICAgICJkZXYiOiB0cnVlCisgICAgfSwKKyAgICAi
cGF0aC1leGlzdHMiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjAuMCIsCisgICAgICAicmVzb2x2
ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcGF0aC1leGlzdHMvLS9wYXRoLWV4aXN0
cy0xLjAuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLTFhaVpqcmNlODNwMHcwNncy
ZXVtNkhqdW9JRT0iLAorICAgICAgImRldiI6IHRydWUKKyAgICB9LAorICAgICJwYXRoLWlzLWFi
c29sdXRlIjogeworICAgICAgInZlcnNpb24iOiAiMS4wLjEiLAorICAgICAgInJlc29sdmVkIjog
Imh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3BhdGgtaXMtYWJzb2x1dGUvLS9wYXRoLWlzLWFi
c29sdXRlLTEuMC4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtRjB1U2FITlZOUCs4
ZXM1cjlUcGFuaHRjWDE4PSIsCisgICAgICAiZGV2IjogdHJ1ZQorICAgIH0sCisgICAgInBhdGgt
a2V5IjogeworICAgICAgInZlcnNpb24iOiAiMi4wLjEiLAorICAgICAgInJlc29sdmVkIjogImh0
dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3BhdGgta2V5Ly0vcGF0aC1rZXktMi4wLjEudGd6IiwK
KyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1RUnl0dFhURm9VRFRwTEdSRFVEWURNbjBDMEE9IiwK
KyAgICAgICJkZXYiOiB0cnVlCisgICAgfSwKKyAgICAicGF0aC1wYXJzZSI6IHsKKyAgICAgICJ2
ZXJzaW9uIjogIjEuMC41IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5w
bWpzLm9yZy9wYXRoLXBhcnNlLy0vcGF0aC1wYXJzZS0xLjAuNS50Z3oiLAorICAgICAgImludGVn
cml0eSI6ICJzaGExLVBCcmZoeDZweld5VU1iYnFLOWRLRC9CVnhNRT0iLAorICAgICAgImRldiI6
IHRydWUKKyAgICB9LAorICAgICJwYXRoLXBvc2l4IjogeworICAgICAgInZlcnNpb24iOiAiMS4w
LjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3BhdGgt
cG9zaXgvLS9wYXRoLXBvc2l4LTEuMC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEt
QnJKaEUvVnI2ckJDVkZvanY2aUFBOHlzSmc4PSIsCisgICAgICAiZGV2IjogdHJ1ZQorICAgIH0s
CisgICAgInBhdGgtdG8tcmVnZXhwIjogeworICAgICAgInZlcnNpb24iOiAiMC4xLjciLAorICAg
ICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3BhdGgtdG8tcmVnZXhw
Ly0vcGF0aC10by1yZWdleHAtMC4xLjcudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS0z
MkJCZUFCZlVpOFY2MFNRNXlSNkcvcW1mNHc9IiwKKyAgICAgICJkZXYiOiB0cnVlCisgICAgfSwK
KyAgICAicGlmeSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuMy4wIiwKKyAgICAgICJyZXNvbHZl
ZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9waWZ5Ly0vcGlmeS0yLjMuMC50Z3oiLAor
ICAgICAgImludGVncml0eSI6ICJzaGExLTdSUWFhc0JEcUVucVdJU1k1OXlvc1ZNdzZRdz0iLAor
ICAgICAgImRldiI6IHRydWUKKyAgICB9LAorICAgICJwaW5raWUiOiB7CisgICAgICAidmVyc2lv
biI6ICIyLjAuNCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5v
cmcvcGlua2llLy0vcGlua2llLTIuMC40LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEt
Y2xWcmdNK2cxSXFYVG9EbmNram9EdFQzK0hBPSIsCisgICAgICAiZGV2IjogdHJ1ZQorICAgIH0s
CisgICAgInBpbmtpZS1wcm9taXNlIjogeworICAgICAgInZlcnNpb24iOiAiMi4wLjEiLAorICAg
ICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3BpbmtpZS1wcm9taXNl
Ly0vcGlua2llLXByb21pc2UtMi4wLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1J
VFhXMzZlaldNQnBySnNYaDNZb2dpaEZEL289IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAg
InJlcXVpcmVzIjogeworICAgICAgICAicGlua2llIjogIjIuMC40IgorICAgICAgfQorICAgIH0s
CisgICAgInBvcnRmaW5kZXIiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjAuMTMiLAorICAgICAg
InJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3BvcnRmaW5kZXIvLS9wb3J0
ZmluZGVyLTEuMC4xMy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLXV6THMySHduRUVy
bTdrUzFvOHkvRHJzYTdlaz0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAicmVxdWlyZXMi
OiB7CisgICAgICAgICJhc3luYyI6ICIxLjUuMiIsCisgICAgICAgICJkZWJ1ZyI6ICIyLjYuOCIs
CisgICAgICAgICJta2RpcnAiOiAiMC41LjEiCisgICAgICB9LAorICAgICAgImRlcGVuZGVuY2ll
cyI6IHsKKyAgICAgICAgImFzeW5jIjogeworICAgICAgICAgICJ2ZXJzaW9uIjogIjEuNS4yIiwK
KyAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYXN5bmMv
LS9hc3luYy0xLjUuMi50Z3oiLAorICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS03R3Bocmxa
SURBdzhza0hKVmhqaUNKTDVaeW89IiwKKyAgICAgICAgICAiZGV2IjogdHJ1ZQorICAgICAgICB9
CisgICAgICB9CisgICAgfSwKKyAgICAicHJlc2VydmUiOiB7CisgICAgICAidmVyc2lvbiI6ICIw
LjIuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcHJl
c2VydmUvLS9wcmVzZXJ2ZS0wLjIuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLWdW
N1I5dXZHV1NiNFpiTVF3SEU3eXpNVnprcz0iLAorICAgICAgImRldiI6IHRydWUKKyAgICB9LAor
ICAgICJwcmludGYiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjIuNSIsCisgICAgICAicmVzb2x2
ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcHJpbnRmLy0vcHJpbnRmLTAuMi41LnRn
eiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEteERqS0xLTStPU2RuSGJTcmFjRGxMNU5xVHc4
PSIsCisgICAgICAiZGV2IjogdHJ1ZQorICAgIH0sCisgICAgInByaXZhdGUiOiB7CisgICAgICAi
dmVyc2lvbiI6ICIwLjEuNyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5u
cG1qcy5vcmcvcHJpdmF0ZS8tL3ByaXZhdGUtMC4xLjcudGd6IiwKKyAgICAgICJpbnRlZ3JpdHki
OiAic2hhMS1hTTVlaWg3d29qdTFjTXdvVTN0VE1xdW1QdkU9IiwKKyAgICAgICJkZXYiOiB0cnVl
CisgICAgfSwKKyAgICAicHJvY2Vzcy1uZXh0aWNrLWFyZ3MiOiB7CisgICAgICAidmVyc2lvbiI6
ICIxLjAuNyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcv
cHJvY2Vzcy1uZXh0aWNrLWFyZ3MvLS9wcm9jZXNzLW5leHRpY2stYXJncy0xLjAuNy50Z3oiLAor
ICAgICAgImludGVncml0eSI6ICJzaGExLUZRNGd0MVpaQ3RQNUVKUHlXazhxMkwvekM2TT0iLAor
ICAgICAgImRldiI6IHRydWUKKyAgICB9LAorICAgICJwcm9jZXNzLXJlbGF0aXZlLXJlcXVpcmUi
OiB7CisgICAgICAidmVyc2lvbiI6ICIxLjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6
Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcHJvY2Vzcy1yZWxhdGl2ZS1yZXF1aXJlLy0vcHJvY2Vzcy1y
ZWxhdGl2ZS1yZXF1aXJlLTEuMC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtRlpE
ZnoxdVBLWU82VStPWVJHdG9KQXRNeG9vPSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJy
ZXF1aXJlcyI6IHsKKyAgICAgICAgIm5vZGUtbW9kdWxlcy1wYXRoIjogIjEuMC4xIgorICAgICAg
fQorICAgIH0sCisgICAgInByb21pc2UtbWFwLXNlcmllcyI6IHsKKyAgICAgICJ2ZXJzaW9uIjog
IjAuMi4zIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9w
cm9taXNlLW1hcC1zZXJpZXMvLS9wcm9taXNlLW1hcC1zZXJpZXMtMC4yLjMudGd6IiwKKyAgICAg
ICJpbnRlZ3JpdHkiOiAic2hhMS13dE4zcjhreVUvYTlBOXUzZDFYcmlLc2dxRWM9IiwKKyAgICAg
ICJkZXYiOiB0cnVlLAorICAgICAgInJlcXVpcmVzIjogeworICAgICAgICAicnN2cCI6ICIzLjYu
MiIKKyAgICAgIH0KKyAgICB9LAorICAgICJwcm94eS1hZGRyIjogeworICAgICAgInZlcnNpb24i
OiAiMS4xLjUiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3Jn
L3Byb3h5LWFkZHIvLS9wcm94eS1hZGRyLTEuMS41LnRneiIsCisgICAgICAiaW50ZWdyaXR5Ijog
InNoYTEtY2NEdU94QXQ0L0lDODdaUFlJMFhQOHVocVJnPSIsCisgICAgICAiZGV2IjogdHJ1ZSwK
KyAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAgImZvcndhcmRlZCI6ICIwLjEuMCIsCisgICAg
ICAgICJpcGFkZHIuanMiOiAiMS40LjAiCisgICAgICB9CisgICAgfSwKKyAgICAicHNldWRvbWFw
IjogeworICAgICAgInZlcnNpb24iOiAiMS4wLjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBz
Oi8vcmVnaXN0cnkubnBtanMub3JnL3BzZXVkb21hcC8tL3BzZXVkb21hcC0xLjAuMi50Z3oiLAor
ICAgICAgImludGVncml0eSI6ICJzaGExLThGS2lqYWNPWVlrWDd3cUt3MHdhNWFhQ2hyTT0iLAor
ICAgICAgImRldiI6IHRydWUKKyAgICB9LAorICAgICJxIjogeworICAgICAgInZlcnNpb24iOiAi
MS41LjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Ev
LS9xLTEuNS4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtM1FHNnlkQnRNT2J5R2E3
TGdsUHVucjNEQ1BFPSIsCisgICAgICAiZGV2IjogdHJ1ZQorICAgIH0sCisgICAgInFzIjogewor
ICAgICAgInZlcnNpb24iOiAiNi41LjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVn
aXN0cnkubnBtanMub3JnL3FzLy0vcXMtNi41LjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAi
c2hhNTEyLWZqVkZqVzl5aHFNaFZHd1JFeENYTGhKS3JMbGtZU2F4TldkeWM5cm1IbHJWWmJrMzVZ
SEgzMTJkRmQ3MTkxdVFlWGtJM21LTFpUSWJTdkllRndGZW1nPT0iLAorICAgICAgImRldiI6IHRy
dWUKKyAgICB9LAorICAgICJxdWljay10ZW1wIjogeworICAgICAgInZlcnNpb24iOiAiMC4xLjgi
LAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3F1aWNrLXRl
bXAvLS9xdWljay10ZW1wLTAuMS44LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtdXJB
cUpDcTQrdzNYV0tQSmQyc3krYVhaUkFnPSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJy
ZXF1aXJlcyI6IHsKKyAgICAgICAgIm1rdGVtcCI6ICIwLjQuMCIsCisgICAgICAgICJyaW1yYWYi
OiAiMi42LjEiLAorICAgICAgICAidW5kZXJzY29yZS5zdHJpbmciOiAiMy4zLjQiCisgICAgICB9
CisgICAgfSwKKyAgICAicXVuaXQtbm90aWZpY2F0aW9ucyI6IHsKKyAgICAgICJ2ZXJzaW9uIjog
IjAuMS4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9x
dW5pdC1ub3RpZmljYXRpb25zLy0vcXVuaXQtbm90aWZpY2F0aW9ucy0wLjEuMS50Z3oiLAorICAg
ICAgImludGVncml0eSI6ICJzaGExLU1BR3Z4cWFuZmZ2WllzeTgzZDRTM3NVb2JBaz0iLAorICAg
ICAgImRldiI6IHRydWUKKyAgICB9LAorICAgICJxdW5pdGpzIjogeworICAgICAgInZlcnNpb24i
OiAiMi40LjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3Jn
L3F1bml0anMvLS9xdW5pdGpzLTIuNC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEt
V1BPb0hvUm1oL0xuOWpmRnZ0eWNKbitJY21FPSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAg
ICJyZXF1aXJlcyI6IHsKKyAgICAgICAgImNob2tpZGFyIjogIjEuNi4xIiwKKyAgICAgICAgImNv
bW1hbmRlciI6ICIyLjkuMCIsCisgICAgICAgICJleGlzdHMtc3RhdCI6ICIxLjAuMCIsCisgICAg
ICAgICJmaW5kdXAtc3luYyI6ICIwLjQuMyIsCisgICAgICAgICJqcy1yZXBvcnRlcnMiOiAiMS4y
LjAiLAorICAgICAgICAicmVzb2x2ZSI6ICIxLjMuMiIsCisgICAgICAgICJ3YWxrLXN5bmMiOiAi
MC4zLjEiCisgICAgICB9LAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImNvbW1h
bmRlciI6IHsKKyAgICAgICAgICAidmVyc2lvbiI6ICIyLjkuMCIsCisgICAgICAgICAgInJlc29s
dmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NvbW1hbmRlci8tL2NvbW1hbmRlci0y
LjkuMC50Z3oiLAorICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1uSmtKUVhiaElrRExJdGJG
RkdDWVFBL2c5OVE9IiwKKyAgICAgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICAgICAicmVxdWly
ZXMiOiB7CisgICAgICAgICAgICAiZ3JhY2VmdWwtcmVhZGxpbmsiOiAiMS4wLjEiCisgICAgICAg
ICAgfQorICAgICAgICB9LAorICAgICAgICAicmVzb2x2ZSI6IHsKKyAgICAgICAgICAidmVyc2lv
biI6ICIxLjMuMiIsCisgICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBt
anMub3JnL3Jlc29sdmUvLS9yZXNvbHZlLTEuMy4yLnRneiIsCisgICAgICAgICAgImludGVncml0
eSI6ICJzaGExLUh3UkN5ZURMdUJOdWg3a3dYNU12UnNmeWdqVT0iLAorICAgICAgICAgICJkZXYi
OiB0cnVlLAorICAgICAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAgICAgICJwYXRoLXBhcnNl
IjogIjEuMC41IgorICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgIndhbGstc3luYyI6
IHsKKyAgICAgICAgICAidmVyc2lvbiI6ICIwLjMuMSIsCisgICAgICAgICAgInJlc29sdmVkIjog
Imh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3dhbGstc3luYy8tL3dhbGstc3luYy0wLjMuMS50
Z3oiLAorICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1WWW9XcnF5TURiV2NBb3R6eG04NWRv
VHM1R1U9IiwKKyAgICAgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICAgICAicmVxdWlyZXMiOiB7
CisgICAgICAgICAgICAiZW5zdXJlLXBvc2l4LXBhdGgiOiAiMS4wLjIiLAorICAgICAgICAgICAg
Im1hdGNoZXItY29sbGVjdGlvbiI6ICIxLjAuNCIKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgIH0KKyAgICB9LAorICAgICJyYW5kb21hdGljIjogeworICAgICAgInZlcnNpb24iOiAiMS4x
LjciLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3JhbmRv
bWF0aWMvLS9yYW5kb21hdGljLTEuMS43LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUx
Mi1ENUpValB5SmJhSkRrdUFhenBWblNmVmtMbHBlTzN3RGxQUk9UTUxHS0cxek1GTkZSZ3JjaUtv
MWx0ei9Bek5Ua3FFMEh6RHg2NTVRT0w1MU4wNmhvdz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAor
ICAgICAgInJlcXVpcmVzIjogeworICAgICAgICAiaXMtbnVtYmVyIjogIjMuMC4wIiwKKyAgICAg
ICAgImtpbmQtb2YiOiAiNC4wLjAiCisgICAgICB9LAorICAgICAgImRlcGVuZGVuY2llcyI6IHsK
KyAgICAgICAgImlzLW51bWJlciI6IHsKKyAgICAgICAgICAidmVyc2lvbiI6ICIzLjAuMCIsCisg
ICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLW51bWJl
ci8tL2lzLW51bWJlci0zLjAuMC50Z3oiLAorICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1K
UDFpQWFSNExQVUZZY2dRSjJyOGZSTFhFWlU9IiwKKyAgICAgICAgICAiZGV2IjogdHJ1ZSwKKyAg
ICAgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICAgICAia2luZC1vZiI6ICIzLjIuMiIKKyAg
ICAgICAgICB9LAorICAgICAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICAgICAia2lu
ZC1vZiI6IHsKKyAgICAgICAgICAgICAgInZlcnNpb24iOiAiMy4yLjIiLAorICAgICAgICAgICAg
ICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcva2luZC1vZi8tL2tpbmQt
b2YtMy4yLjIudGd6IiwKKyAgICAgICAgICAgICAgImludGVncml0eSI6ICJzaGExLU1lb2hwelM2
dWJ1dzh5Um0ySk91cFI1S1BHUT0iLAorICAgICAgICAgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAg
ICAgICAgICAgInJlcXVpcmVzIjogeworICAgICAgICAgICAgICAgICJpcy1idWZmZXIiOiAiMS4x
LjUiCisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAg
IH0sCisgICAgICAgICJraW5kLW9mIjogeworICAgICAgICAgICJ2ZXJzaW9uIjogIjQuMC4wIiwK
KyAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcva2luZC1v
Zi8tL2tpbmQtb2YtNC4wLjAudGd6IiwKKyAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTEtSUlF
OTg5Y1Nrb3NnYzNocEdrVUdiNjV5M1ZjPSIsCisgICAgICAgICAgImRldiI6IHRydWUsCisgICAg
ICAgICAgInJlcXVpcmVzIjogeworICAgICAgICAgICAgImlzLWJ1ZmZlciI6ICIxLjEuNSIKKyAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9LAorICAgICJyYW5nZS1wYXJzZXIi
OiB7CisgICAgICAidmVyc2lvbiI6ICIxLjIuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6
Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcmFuZ2UtcGFyc2VyLy0vcmFuZ2UtcGFyc2VyLTEuMi4wLnRn
eiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtOUp2bXRJZUpUZHhBM01sS01pOWhFSkxnRFY0
PSIsCisgICAgICAiZGV2IjogdHJ1ZQorICAgIH0sCisgICAgInJhdy1ib2R5IjogeworICAgICAg
InZlcnNpb24iOiAiMS4xLjciLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnku
bnBtanMub3JnL3Jhdy1ib2R5Ly0vcmF3LWJvZHktMS4xLjcudGd6IiwKKyAgICAgICJpbnRlZ3Jp
dHkiOiAic2hhMS1IUUo4Sy9vUmFzeG1JN3lvOEFBV1Z5cUgxQ1U9IiwKKyAgICAgICJkZXYiOiB0
cnVlLAorICAgICAgInJlcXVpcmVzIjogeworICAgICAgICAiYnl0ZXMiOiAiMS4wLjAiLAorICAg
ICAgICAic3RyaW5nX2RlY29kZXIiOiAiMC4xMC4zMSIKKyAgICAgIH0sCisgICAgICAiZGVwZW5k
ZW5jaWVzIjogeworICAgICAgICAiYnl0ZXMiOiB7CisgICAgICAgICAgInZlcnNpb24iOiAiMS4w
LjAiLAorICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9i
eXRlcy8tL2J5dGVzLTEuMC4wLnRneiIsCisgICAgICAgICAgImludGVncml0eSI6ICJzaGExLU5X
bnQ2TG8wTVYrcm1jUHBMTEJNY2lEZUg2Zz0iLAorICAgICAgICAgICJkZXYiOiB0cnVlCisgICAg
ICAgIH0KKyAgICAgIH0KKyAgICB9LAorICAgICJyZWFkYWJsZS1zdHJlYW0iOiB7CisgICAgICAi
dmVyc2lvbiI6ICIxLjAuMzQiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnku
bnBtanMub3JnL3JlYWRhYmxlLXN0cmVhbS8tL3JlYWRhYmxlLXN0cmVhbS0xLjAuMzQudGd6IiwK
KyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1FbGdnNDB2SVF0THlxcSt2NU1LUmJ1TXNGWHc9IiwK
KyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgInJlcXVpcmVzIjogeworICAgICAgICAiY29yZS11
dGlsLWlzIjogIjEuMC4yIiwKKyAgICAgICAgImluaGVyaXRzIjogIjIuMC4zIiwKKyAgICAgICAg
ImlzYXJyYXkiOiAiMC4wLjEiLAorICAgICAgICAic3RyaW5nX2RlY29kZXIiOiAiMC4xMC4zMSIK
KyAgICAgIH0sCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiaXNhcnJheSI6IHsK
KyAgICAgICAgICAidmVyc2lvbiI6ICIwLjAuMSIsCisgICAgICAgICAgInJlc29sdmVkIjogImh0
dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzYXJyYXkvLS9pc2FycmF5LTAuMC4xLnRneiIsCisg
ICAgICAgICAgImludGVncml0eSI6ICJzaGExLWloaXMvS21vOUJkK0NhdjhZRGlUbXdYUjd0OD0i
LAorICAgICAgICAgICJkZXYiOiB0cnVlCisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9LAorICAg
ICJyZWFkZGlycCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuMS4wIiwKKyAgICAgICJyZXNvbHZl
ZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZWFkZGlycC8tL3JlYWRkaXJwLTIuMS4w
LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtVHRDdEJnM3pCek1BeElSQU56OXkwY3hr
TFhnPSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAg
ImdyYWNlZnVsLWZzIjogIjQuMS4xMSIsCisgICAgICAgICJtaW5pbWF0Y2giOiAiMy4wLjQiLAor
ICAgICAgICAicmVhZGFibGUtc3RyZWFtIjogIjIuMy4zIiwKKyAgICAgICAgInNldC1pbW1lZGlh
dGUtc2hpbSI6ICIxLjAuMSIKKyAgICAgIH0sCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAg
ICAgICAicmVhZGFibGUtc3RyZWFtIjogeworICAgICAgICAgICJ2ZXJzaW9uIjogIjIuMy4zIiwK
KyAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcmVhZGFi
bGUtc3RyZWFtLy0vcmVhZGFibGUtc3RyZWFtLTIuMy4zLnRneiIsCisgICAgICAgICAgImludGVn
cml0eSI6ICJzaGE1MTItbStxenpjbjdLVXhFbWQxZ01iY2hGK1kyZUlVYmllVWF4a1d0cHR5SHl3
clgwckU4UUVZcVBDMDdWdXk0V20zMi94RTE2TmNkQmN0YjhTMFhlLzVJZVE9PSIsCisgICAgICAg
ICAgImRldiI6IHRydWUsCisgICAgICAgICAgInJlcXVpcmVzIjogeworICAgICAgICAgICAgImNv
cmUtdXRpbC1pcyI6ICIxLjAuMiIsCisgICAgICAgICAgICAiaW5oZXJpdHMiOiAiMi4wLjMiLAor
ICAgICAgICAgICAgImlzYXJyYXkiOiAiMS4wLjAiLAorICAgICAgICAgICAgInByb2Nlc3MtbmV4
dGljay1hcmdzIjogIjEuMC43IiwKKyAgICAgICAgICAgICJzYWZlLWJ1ZmZlciI6ICI1LjEuMSIs
CisgICAgICAgICAgICAic3RyaW5nX2RlY29kZXIiOiAiMS4wLjMiLAorICAgICAgICAgICAgInV0
aWwtZGVwcmVjYXRlIjogIjEuMC4yIgorICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAg
InN0cmluZ19kZWNvZGVyIjogeworICAgICAgICAgICJ2ZXJzaW9uIjogIjEuMC4zIiwKKyAgICAg
ICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3RyaW5nX2RlY29k
ZXIvLS9zdHJpbmdfZGVjb2Rlci0xLjAuMy50Z3oiLAorICAgICAgICAgICJpbnRlZ3JpdHkiOiAi
c2hhNTEyLTRBSDZaNWZ6Tk5CY0grNlhETWZBL0JUdDg3c2t4cUpsTzBsQWgzRGtlcjV6VGhjQXhH
Nm1LeitpR3UzMDhVS29QUFE4RGNxeC80Smh1anpsdFJhK2hRPT0iLAorICAgICAgICAgICJkZXYi
OiB0cnVlLAorICAgICAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAgICAgICJzYWZlLWJ1ZmZl
ciI6ICI1LjEuMSIKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9LAorICAg
ICJyZWNhc3QiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjEwLjMzIiwKKyAgICAgICJyZXNvbHZl
ZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZWNhc3QvLS9yZWNhc3QtMC4xMC4zMy50
Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLWxDZ0k5Nm9CYngrbkZDeEdIWDVYQktxbzFw
Yz0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICJh
c3QtdHlwZXMiOiAiMC44LjEyIiwKKyAgICAgICAgImVzcHJpbWEtZmIiOiAiMTUwMDEuMTAwMS4w
LWRldi1oYXJtb255LWZiIiwKKyAgICAgICAgInByaXZhdGUiOiAiMC4xLjciLAorICAgICAgICAi
c291cmNlLW1hcCI6ICIwLjUuNiIKKyAgICAgIH0sCisgICAgICAiZGVwZW5kZW5jaWVzIjogewor
ICAgICAgICAiYXN0LXR5cGVzIjogeworICAgICAgICAgICJ2ZXJzaW9uIjogIjAuOC4xMiIsCisg
ICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2FzdC10eXBl
cy8tL2FzdC10eXBlcy0wLjguMTIudGd6IiwKKyAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTEt
b05rT1ExRzdpSGNXeUQvV04rdjRHSzlLMzh3PSIsCisgICAgICAgICAgImRldiI6IHRydWUKKyAg
ICAgICAgfQorICAgICAgfQorICAgIH0sCisgICAgInJlZGV5ZWQiOiB7CisgICAgICAidmVyc2lv
biI6ICIxLjAuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5v
cmcvcmVkZXllZC8tL3JlZGV5ZWQtMS4wLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hh
MS02V3daTzBEQWdXc0Fyc2hDYVk1aEdGNVZTWW89IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAg
ICAgInJlcXVpcmVzIjogeworICAgICAgICAiZXNwcmltYSI6ICIzLjAuMCIKKyAgICAgIH0sCisg
ICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiZXNwcmltYSI6IHsKKyAgICAgICAgICAi
dmVyc2lvbiI6ICIzLjAuMCIsCisgICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0
cnkubnBtanMub3JnL2VzcHJpbWEvLS9lc3ByaW1hLTMuMC4wLnRneiIsCisgICAgICAgICAgImlu
dGVncml0eSI6ICJzaGExLVU4OGtlczJuY3hQbFVjT3FMbk0wTFQrMDk5az0iLAorICAgICAgICAg
ICJkZXYiOiB0cnVlCisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9LAorICAgICJyZWdlbmVyYXRl
IjogeworICAgICAgInZlcnNpb24iOiAiMS4zLjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBz
Oi8vcmVnaXN0cnkubnBtanMub3JnL3JlZ2VuZXJhdGUvLS9yZWdlbmVyYXRlLTEuMy4yLnRneiIs
CisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtMFpRY1o3clVOK0crZGtNNjNWczRYNVd4a21BPSIs
CisgICAgICAiZGV2IjogdHJ1ZQorICAgIH0sCisgICAgInJlZ2VuZXJhdG9yIjogeworICAgICAg
InZlcnNpb24iOiAiMC44LjQwIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5
Lm5wbWpzLm9yZy9yZWdlbmVyYXRvci8tL3JlZ2VuZXJhdG9yLTAuOC40MC50Z3oiLAorICAgICAg
ImludGVncml0eSI6ICJzaGExLW9PUlh4WTY5dXVWMXlmak5kUkorazNWa05kZz0iLAorICAgICAg
ImRldiI6IHRydWUsCisgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICJjb21tb25lciI6ICIw
LjEwLjgiLAorICAgICAgICAiZGVmcyI6ICIxLjEuMSIsCisgICAgICAgICJlc3ByaW1hLWZiIjog
IjE1MDAxLjEwMDEuMC1kZXYtaGFybW9ueS1mYiIsCisgICAgICAgICJwcml2YXRlIjogIjAuMS43
IiwKKyAgICAgICAgInJlY2FzdCI6ICIwLjEwLjMzIiwKKyAgICAgICAgInRocm91Z2giOiAiMi4z
LjgiCisgICAgICB9CisgICAgfSwKKyAgICAicmVnZW5lcmF0b3ItcnVudGltZSI6IHsKKyAgICAg
ICJ2ZXJzaW9uIjogIjAuMTAuNSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3Ry
eS5ucG1qcy5vcmcvcmVnZW5lcmF0b3ItcnVudGltZS8tL3JlZ2VuZXJhdG9yLXJ1bnRpbWUtMC4x
MC41LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtTTJ3Ky9CSWdyYzdkb3NuNnRudGFl
VldqTmxnPSIsCisgICAgICAiZGV2IjogdHJ1ZQorICAgIH0sCisgICAgInJlZ2V4LWNhY2hlIjog
eworICAgICAgInZlcnNpb24iOiAiMC40LjMiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8v
cmVnaXN0cnkubnBtanMub3JnL3JlZ2V4LWNhY2hlLy0vcmVnZXgtY2FjaGUtMC40LjMudGd6IiwK
KyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1teHBzTmRUUTM4NzFjUnJtVWVqcDA5Y1JRVVU9IiwK
KyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgInJlcXVpcmVzIjogeworICAgICAgICAiaXMtZXF1
YWwtc2hhbGxvdyI6ICIwLjEuMyIsCisgICAgICAgICJpcy1wcmltaXRpdmUiOiAiMi4wLjAiCisg
ICAgICB9CisgICAgfSwKKyAgICAicmVnZXhwdSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMy4w
IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZWdleHB1
Ly0vcmVnZXhwdS0xLjMuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLTVUVGNtUnFl
V0VZRkRKamViWDNVcFZ5ZW9XMD0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAicmVxdWly
ZXMiOiB7CisgICAgICAgICJlc3ByaW1hIjogIjIuNy4zIiwKKyAgICAgICAgInJlY2FzdCI6ICIw
LjEwLjMzIiwKKyAgICAgICAgInJlZ2VuZXJhdGUiOiAiMS4zLjIiLAorICAgICAgICAicmVnanNn
ZW4iOiAiMC4yLjAiLAorICAgICAgICAicmVnanNwYXJzZXIiOiAiMC4xLjUiCisgICAgICB9LAor
ICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImVzcHJpbWEiOiB7CisgICAgICAgICAg
InZlcnNpb24iOiAiMi43LjMiLAorICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lz
dHJ5Lm5wbWpzLm9yZy9lc3ByaW1hLy0vZXNwcmltYS0yLjcuMy50Z3oiLAorICAgICAgICAgICJp
bnRlZ3JpdHkiOiAic2hhMS1sdU8zRFZkNTlxMUp6UU1tYzlIREVuWjdwWUU9IiwKKyAgICAgICAg
ICAiZGV2IjogdHJ1ZQorICAgICAgICB9CisgICAgICB9CisgICAgfSwKKyAgICAicmVnanNnZW4i
OiB7CisgICAgICAidmVyc2lvbiI6ICIwLjIuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6
Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcmVnanNnZW4vLS9yZWdqc2dlbi0wLjIuMC50Z3oiLAorICAg
ICAgImludGVncml0eSI6ICJzaGExLWJBRnEzcXhWVDNXQ1ArTjZ3RnVTMWFUdHNmYz0iLAorICAg
ICAgImRldiI6IHRydWUKKyAgICB9LAorICAgICJyZWdqc3BhcnNlciI6IHsKKyAgICAgICJ2ZXJz
aW9uIjogIjAuMS41IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpz
Lm9yZy9yZWdqc3BhcnNlci8tL3JlZ2pzcGFyc2VyLTAuMS41LnRneiIsCisgICAgICAiaW50ZWdy
aXR5IjogInNoYTEtZnVqNFRjYjZlUzAvMEs0aWpTUzlsSjZ0SUZ3PSIsCisgICAgICAiZGV2Ijog
dHJ1ZSwKKyAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAgImpzZXNjIjogIjAuNS4wIgorICAg
ICAgfQorICAgIH0sCisgICAgInJlbW92ZS10cmFpbGluZy1zZXBhcmF0b3IiOiB7CisgICAgICAi
dmVyc2lvbiI6ICIxLjAuMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5u
cG1qcy5vcmcvcmVtb3ZlLXRyYWlsaW5nLXNlcGFyYXRvci8tL3JlbW92ZS10cmFpbGluZy1zZXBh
cmF0b3ItMS4wLjIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1hYkJpMlhoeWV0Rk54
clZycEt0M0w5alhCUkU9IiwKKyAgICAgICJkZXYiOiB0cnVlCisgICAgfSwKKyAgICAicmVwZWF0
LWVsZW1lbnQiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjEuMiIsCisgICAgICAicmVzb2x2ZWQi
OiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcmVwZWF0LWVsZW1lbnQvLS9yZXBlYXQtZWxl
bWVudC0xLjEuMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLTd3aWFGNDBVZzdxdVRa
UHJtTFQ1NU9FZG1Rbz0iLAorICAgICAgImRldiI6IHRydWUKKyAgICB9LAorICAgICJyZXBlYXQt
c3RyaW5nIjogeworICAgICAgInZlcnNpb24iOiAiMS42LjEiLAorICAgICAgInJlc29sdmVkIjog
Imh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3JlcGVhdC1zdHJpbmcvLS9yZXBlYXQtc3RyaW5n
LTEuNi4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtamNya2NPSElpcnd0WUEvL1Nu
ZGlodHAxNWpjPSIsCisgICAgICAiZGV2IjogdHJ1ZQorICAgIH0sCisgICAgInJlcGVhdGluZyI6
IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMS4zIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczov
L3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZXBlYXRpbmcvLS9yZXBlYXRpbmctMS4xLjMudGd6IiwKKyAg
ICAgICJpbnRlZ3JpdHkiOiAic2hhMS1QVUVVSVloM1UzU1UrWDkzK1hoZnE0RVBwS3c9IiwKKyAg
ICAgICJkZXYiOiB0cnVlLAorICAgICAgInJlcXVpcmVzIjogeworICAgICAgICAiaXMtZmluaXRl
IjogIjEuMC4yIgorICAgICAgfQorICAgIH0sCisgICAgInJlcXVpcmVzLXBvcnQiOiB7CisgICAg
ICAidmVyc2lvbiI6ICIxLjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3Ry
eS5ucG1qcy5vcmcvcmVxdWlyZXMtcG9ydC8tL3JlcXVpcmVzLXBvcnQtMS4wLjAudGd6IiwKKyAg
ICAgICJpbnRlZ3JpdHkiOiAic2hhMS1rbDBtQWRPYXhJWGdrYzhOcGNibWxOdzl5djg9IiwKKyAg
ICAgICJkZXYiOiB0cnVlCisgICAgfSwKKyAgICAicmVzb2x2ZSI6IHsKKyAgICAgICJ2ZXJzaW9u
IjogIjEuNC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9y
Zy9yZXNvbHZlLy0vcmVzb2x2ZS0xLjQuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1
MTItYVc3c1ZLUHVmeUhxT215eUx6Zy9KKzg2MDZ2NW5ldkJnYWxpSWxWN25VcFZNc0Rub0JHVi9j
YlNMTmpaQWc5cTBDZmQvK2Vhc0tWS1E4dk91OGZuMVE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwK
KyAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAgInBhdGgtcGFyc2UiOiAiMS4wLjUiCisgICAg
ICB9CisgICAgfSwKKyAgICAicmVzb2x2ZS1kaXIiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjEu
MSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcmVzb2x2
ZS1kaXIvLS9yZXNvbHZlLWRpci0wLjEuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGEx
LXNoa2xtbFlDK3NYRnhKYXRpVXB1ak1Rd0poND0iLAorICAgICAgImRldiI6IHRydWUsCisgICAg
ICAicmVxdWlyZXMiOiB7CisgICAgICAgICJleHBhbmQtdGlsZGUiOiAiMS4yLjIiLAorICAgICAg
ICAiZ2xvYmFsLW1vZHVsZXMiOiAiMC4yLjMiCisgICAgICB9CisgICAgfSwKKyAgICAicmVzdG9y
ZS1jdXJzb3IiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjAuMSIsCisgICAgICAicmVzb2x2ZWQi
OiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcmVzdG9yZS1jdXJzb3IvLS9yZXN0b3JlLWN1
cnNvci0xLjAuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLU5HWWZSb2hqSi83U21S
UjVGU0pTMzVMYXBVRT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAicmVxdWlyZXMiOiB7
CisgICAgICAgICJleGl0LWhvb2siOiAiMS4xLjEiLAorICAgICAgICAib25ldGltZSI6ICIxLjEu
MCIKKyAgICAgIH0KKyAgICB9LAorICAgICJyaWdodC1hbGlnbiI6IHsKKyAgICAgICJ2ZXJzaW9u
IjogIjAuMS4zIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9y
Zy9yaWdodC1hbGlnbi8tL3JpZ2h0LWFsaWduLTAuMS4zLnRneiIsCisgICAgICAiaW50ZWdyaXR5
IjogInNoYTEtWVRPYmNpL21vMUZXaVNFTkpPRk1saFNHRSs4PSIsCisgICAgICAiZGV2IjogdHJ1
ZSwKKyAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAgImFsaWduLXRleHQiOiAiMC4xLjQiCisg
ICAgICB9CisgICAgfSwKKyAgICAicmltcmFmIjogeworICAgICAgInZlcnNpb24iOiAiMi42LjEi
LAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3JpbXJhZi8t
L3JpbXJhZi0yLjYuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLXdqT094a1BmZWh0
LzVjVlBxRzlYUW9wVjh6MD0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAicmVxdWlyZXMi
OiB7CisgICAgICAgICJnbG9iIjogIjcuMS4yIgorICAgICAgfSwKKyAgICAgICJkZXBlbmRlbmNp
ZXMiOiB7CisgICAgICAgICJnbG9iIjogeworICAgICAgICAgICJ2ZXJzaW9uIjogIjcuMS4yIiwK
KyAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZ2xvYi8t
L2dsb2ItNy4xLjIudGd6IiwKKyAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1NSlRVZzFr
anVMZVFDSitjY0U0VnBhNmtLVlhrUFlKMm1PQ1F5VXVLTGNMUXNkck1DcEJQVWk4cVZFNitZdWFK
a296ZUE5TnVzVEF3M2hMcjhYZTVFUT09IiwKKyAgICAgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAg
ICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICAgICAiZnMucmVhbHBhdGgiOiAiMS4wLjAiLAor
ICAgICAgICAgICAgImluZmxpZ2h0IjogIjEuMC42IiwKKyAgICAgICAgICAgICJpbmhlcml0cyI6
ICIyLjAuMyIsCisgICAgICAgICAgICAibWluaW1hdGNoIjogIjMuMC40IiwKKyAgICAgICAgICAg
ICJvbmNlIjogIjEuNC4wIiwKKyAgICAgICAgICAgICJwYXRoLWlzLWFic29sdXRlIjogIjEuMC4x
IgorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0sCisgICAgInJzdnAiOiB7
CisgICAgICAidmVyc2lvbiI6ICIzLjYuMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9y
ZWdpc3RyeS5ucG1qcy5vcmcvcnN2cC8tL3JzdnAtMy42LjIudGd6IiwKKyAgICAgICJpbnRlZ3Jp
dHkiOiAic2hhNTEyLU9mV0dRVGI5dm53Ump3dEEyUXdwRzJJQ2NsSEMzcGdYWk81eHQ4SDJFZmdE
cXVPMHFWZFNiNVQ4OEw0cUpWQUV1Z2JTNTZwQXVWNFhaTTU4VVg4dWx3PT0iLAorICAgICAgImRl
diI6IHRydWUKKyAgICB9LAorICAgICJydW4tYXN5bmMiOiB7CisgICAgICAidmVyc2lvbiI6ICIy
LjMuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcnVu
LWFzeW5jLy0vcnVuLWFzeW5jLTIuMy4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEt
QTNHclN1QzkxeURVRm0xOS9hWlA5NlJGcHNBPSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAg
ICJyZXF1aXJlcyI6IHsKKyAgICAgICAgImlzLXByb21pc2UiOiAiMi4xLjAiCisgICAgICB9Cisg
ICAgfSwKKyAgICAicngiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjEuMCIsCisgICAgICAicmVz
b2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcngvLS9yeC00LjEuMC50Z3oiLAor
ICAgICAgImludGVncml0eSI6ICJzaGExLXBmRS85NTd6dDBEK01LcUFQN0NmbUlCZFI0ST0iLAor
ICAgICAgImRldiI6IHRydWUKKyAgICB9LAorICAgICJzYWZlLWJ1ZmZlciI6IHsKKyAgICAgICJ2
ZXJzaW9uIjogIjUuMS4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5w
bWpzLm9yZy9zYWZlLWJ1ZmZlci8tL3NhZmUtYnVmZmVyLTUuMS4xLnRneiIsCisgICAgICAiaW50
ZWdyaXR5IjogInNoYTUxMi1rS3ZOSm42TW05M2dBY3pXVkpnN3dIK3dHWVdOckRIZFd2cFVtSHlF
c2dDdEl3d28zYnFQdFY0dFI1dHVQYVVoVE9vL2t2aFZ3ZDhYd3dPbGxHWWtiZz09IiwKKyAgICAg
ICJkZXYiOiB0cnVlCisgICAgfSwKKyAgICAic2FmZS1qc29uLXBhcnNlIjogeworICAgICAgInZl
cnNpb24iOiAiMS4wLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBt
anMub3JnL3NhZmUtanNvbi1wYXJzZS8tL3NhZmUtanNvbi1wYXJzZS0xLjAuMS50Z3oiLAorICAg
ICAgImludGVncml0eSI6ICJzaGExLVBuWnlQampmM2FFOG14MHBvZUIvL3VTekMxYz0iLAorICAg
ICAgImRldiI6IHRydWUKKyAgICB9LAorICAgICJzYW5lIjogeworICAgICAgInZlcnNpb24iOiAi
MS43LjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Nh
bmUvLS9zYW5lLTEuNy4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtczFlYnpMUmNs
TThnTlZ6SUVTU1pEZjAwYmpBPSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJyZXF1aXJl
cyI6IHsKKyAgICAgICAgImFueW1hdGNoIjogIjEuMy4yIiwKKyAgICAgICAgImV4ZWMtc2giOiAi
MC4yLjAiLAorICAgICAgICAiZmItd2F0Y2htYW4iOiAiMi4wLjAiLAorICAgICAgICAibWluaW1h
dGNoIjogIjMuMC40IiwKKyAgICAgICAgIm1pbmltaXN0IjogIjEuMi4wIiwKKyAgICAgICAgIndh
bGtlciI6ICIxLjAuNyIsCisgICAgICAgICJ3YXRjaCI6ICIwLjEwLjAiCisgICAgICB9LAorICAg
ICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIm1pbmltaXN0IjogeworICAgICAgICAgICJ2
ZXJzaW9uIjogIjEuMi4wIiwKKyAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3Ry
eS5ucG1qcy5vcmcvbWluaW1pc3QvLS9taW5pbWlzdC0xLjIuMC50Z3oiLAorICAgICAgICAgICJp
bnRlZ3JpdHkiOiAic2hhMS1vMUFJc2c5Qk9EN3NIN2tVOU0xZDk1b21Rb1E9IiwKKyAgICAgICAg
ICAiZGV2IjogdHJ1ZQorICAgICAgICB9CisgICAgICB9CisgICAgfSwKKyAgICAic2VtdmVyIjog
eworICAgICAgInZlcnNpb24iOiAiNS40LjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8v
cmVnaXN0cnkubnBtanMub3JnL3NlbXZlci8tL3NlbXZlci01LjQuMS50Z3oiLAorICAgICAgImlu
dGVncml0eSI6ICJzaGE1MTItV2ZHL1g5K29BVGg4MVh0bGxJby9JOGdPaVk5RVhSZHYxY1FkeXlr
ZVhLMTdZY1VXM0VYVUFpMlRvNHBjSDZuWnRKUHI3Wk9wTTVPTXlXSlptKzhSc2c9PSIsCisgICAg
ICAiZGV2IjogdHJ1ZQorICAgIH0sCisgICAgInNlbmQiOiB7CisgICAgICAidmVyc2lvbiI6ICIw
LjE1LjQiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Nl
bmQvLS9zZW5kLTAuMTUuNC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLW1GK3FQaWhM
QW5QSGt6WktOY1p6ZTlrNUJiaz0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAicmVxdWly
ZXMiOiB7CisgICAgICAgICJkZWJ1ZyI6ICIyLjYuOCIsCisgICAgICAgICJkZXBkIjogIjEuMS4x
IiwKKyAgICAgICAgImRlc3Ryb3kiOiAiMS4wLjQiLAorICAgICAgICAiZW5jb2RldXJsIjogIjEu
MC4xIiwKKyAgICAgICAgImVzY2FwZS1odG1sIjogIjEuMC4zIiwKKyAgICAgICAgImV0YWciOiAi
MS44LjAiLAorICAgICAgICAiZnJlc2giOiAiMC41LjAiLAorICAgICAgICAiaHR0cC1lcnJvcnMi
OiAiMS42LjIiLAorICAgICAgICAibWltZSI6ICIxLjMuNCIsCisgICAgICAgICJtcyI6ICIyLjAu
MCIsCisgICAgICAgICJvbi1maW5pc2hlZCI6ICIyLjMuMCIsCisgICAgICAgICJyYW5nZS1wYXJz
ZXIiOiAiMS4yLjAiLAorICAgICAgICAic3RhdHVzZXMiOiAiMS4zLjEiCisgICAgICB9LAorICAg
ICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIm1pbWUiOiB7CisgICAgICAgICAgInZlcnNp
b24iOiAiMS4zLjQiLAorICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5w
bWpzLm9yZy9taW1lLy0vbWltZS0xLjMuNC50Z3oiLAorICAgICAgICAgICJpbnRlZ3JpdHkiOiAi
c2hhMS1FVitlTzJzOXJ5bFptRHl6anhTYUxVRHJYVk09IiwKKyAgICAgICAgICAiZGV2IjogdHJ1
ZQorICAgICAgICB9CisgICAgICB9CisgICAgfSwKKyAgICAic2VydmUtc3RhdGljIjogeworICAg
ICAgInZlcnNpb24iOiAiMS4xMi40IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lz
dHJ5Lm5wbWpzLm9yZy9zZXJ2ZS1zdGF0aWMvLS9zZXJ2ZS1zdGF0aWMtMS4xMi40LnRneiIsCisg
ICAgICAiaW50ZWdyaXR5IjogInNoYTEtbTJxcGp1dHlVOFR1M0V3ZmI5dktZSmtCcVdFPSIsCisg
ICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAgImVuY29kZXVy
bCI6ICIxLjAuMSIsCisgICAgICAgICJlc2NhcGUtaHRtbCI6ICIxLjAuMyIsCisgICAgICAgICJw
YXJzZXVybCI6ICIxLjMuMSIsCisgICAgICAgICJzZW5kIjogIjAuMTUuNCIKKyAgICAgIH0KKyAg
ICB9LAorICAgICJzZXQtYmxvY2tpbmciOiB7CisgICAgICAidmVyc2lvbiI6ICIyLjAuMCIsCisg
ICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2V0LWJsb2NraW5n
Ly0vc2V0LWJsb2NraW5nLTIuMC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtQkYr
WGd0QVJycHBvQTkzVGdySkRrclBZa1BjPSIsCisgICAgICAiZGV2IjogdHJ1ZQorICAgIH0sCisg
ICAgInNldC1pbW1lZGlhdGUtc2hpbSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMC4xIiwKKyAg
ICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zZXQtaW1tZWRpYXRl
LXNoaW0vLS9zZXQtaW1tZWRpYXRlLXNoaW0tMS4wLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHki
OiAic2hhMS1TeXNiSit1QWlwK056RWdhV09YbGIxbWZQMkU9IiwKKyAgICAgICJkZXYiOiB0cnVl
CisgICAgfSwKKyAgICAic2V0cHJvdG90eXBlb2YiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjAu
MyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2V0cHJv
dG90eXBlb2YvLS9zZXRwcm90b3R5cGVvZi0xLjAuMy50Z3oiLAorICAgICAgImludGVncml0eSI6
ICJzaGExLVpsWitOd1ErNjA4RTJSdldXTURMNzdWYmpnUT0iLAorICAgICAgImRldiI6IHRydWUK
KyAgICB9LAorICAgICJzaGViYW5nLWNvbW1hbmQiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjIu
MCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2hlYmFu
Zy1jb21tYW5kLy0vc2hlYmFuZy1jb21tYW5kLTEuMi4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5
IjogInNoYTEtUktyR1cybGJBem1KYU1PZk5qL3VYZXI5OGVvPSIsCisgICAgICAiZGV2IjogdHJ1
ZSwKKyAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAgInNoZWJhbmctcmVnZXgiOiAiMS4wLjAi
CisgICAgICB9CisgICAgfSwKKyAgICAic2hlYmFuZy1yZWdleCI6IHsKKyAgICAgICJ2ZXJzaW9u
IjogIjEuMC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9y
Zy9zaGViYW5nLXJlZ2V4Ly0vc2hlYmFuZy1yZWdleC0xLjAuMC50Z3oiLAorICAgICAgImludGVn
cml0eSI6ICJzaGExLTJrTDBsMERBdEMyeXlwY29WeHl4a01tTy9xTT0iLAorICAgICAgImRldiI6
IHRydWUKKyAgICB9LAorICAgICJzaGVsbGpzIjogeworICAgICAgInZlcnNpb24iOiAiMC4zLjAi
LAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NoZWxsanMv
LS9zaGVsbGpzLTAuMy4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtTlpibU1IcDRG
VVQxa2ZOOXBoZzJEekhiVjdFPSIsCisgICAgICAiZGV2IjogdHJ1ZQorICAgIH0sCisgICAgInNo
ZWxsd29yZHMiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjEuMCIsCisgICAgICAicmVzb2x2ZWQi
OiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2hlbGx3b3Jkcy8tL3NoZWxsd29yZHMtMC4x
LjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1acS9VZTJvU2t5MlFjY3Y5bUtVdWVG
elF1aFE9IiwKKyAgICAgICJkZXYiOiB0cnVlCisgICAgfSwKKyAgICAic2lnbmFsLWV4aXQiOiB7
CisgICAgICAidmVyc2lvbiI6ICIzLjAuMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9y
ZWdpc3RyeS5ucG1qcy5vcmcvc2lnbmFsLWV4aXQvLS9zaWduYWwtZXhpdC0zLjAuMi50Z3oiLAor
ICAgICAgImludGVncml0eSI6ICJzaGExLXRmM0FqeEtINmhGNFlvNUJYaVVUSzNOa2JHMD0iLAor
ICAgICAgImRldiI6IHRydWUKKyAgICB9LAorICAgICJzaWxlbnQtZXJyb3IiOiB7CisgICAgICAi
dmVyc2lvbiI6ICIxLjEuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5u
cG1qcy5vcmcvc2lsZW50LWVycm9yLy0vc2lsZW50LWVycm9yLTEuMS4wLnRneiIsCisgICAgICAi
aW50ZWdyaXR5IjogInNoYTEtSWdsd2J4eUZDcDhkRU5EWVFKR0xSdkp1RzhrPSIsCisgICAgICAi
ZGV2IjogdHJ1ZSwKKyAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAgImRlYnVnIjogIjIuNi44
IgorICAgICAgfQorICAgIH0sCisgICAgInNpbXBsZS1mbXQiOiB7CisgICAgICAidmVyc2lvbiI6
ICIwLjEuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcv
c2ltcGxlLWZtdC8tL3NpbXBsZS1mbXQtMC4xLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAi
c2hhMS1HUnYxWnFXZVpUQklMTEphdFR0S2pjaGNPbXM9IiwKKyAgICAgICJkZXYiOiB0cnVlCisg
ICAgfSwKKyAgICAic2ltcGxlLWlzIjogeworICAgICAgInZlcnNpb24iOiAiMC4yLjAiLAorICAg
ICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NpbXBsZS1pcy8tL3Np
bXBsZS1pcy0wLjIuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLUtydDFxdDQ1M3JY
TWdWemhEbUdSRmtoUXV2QT0iLAorICAgICAgImRldiI6IHRydWUKKyAgICB9LAorICAgICJzbGFz
aCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRw
czovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zbGFzaC8tL3NsYXNoLTEuMC4wLnRneiIsCisgICAgICAi
aW50ZWdyaXR5IjogInNoYTEteEI4dmJEbjhGdEhORjYxTFhZbGhGSzVIRFZVPSIsCisgICAgICAi
ZGV2IjogdHJ1ZQorICAgIH0sCisgICAgInNsaWRlIjogeworICAgICAgInZlcnNpb24iOiAiMS4x
LjYiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NsaWRl
Ly0vc2xpZGUtMS4xLjYudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1WdXNDZldXMDB0
em15eTR0TXNUVXI4bmgxd2M9IiwKKyAgICAgICJkZXYiOiB0cnVlCisgICAgfSwKKyAgICAic29j
a2V0LmlvIjogeworICAgICAgInZlcnNpb24iOiAiMS42LjAiLAorICAgICAgInJlc29sdmVkIjog
Imh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NvY2tldC5pby8tL3NvY2tldC5pby0xLjYuMC50
Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLVBrRFpNbU4rYTlram1Cc2x5dmZGUG9PMjR1
RT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICJk
ZWJ1ZyI6ICIyLjMuMyIsCisgICAgICAgICJlbmdpbmUuaW8iOiAiMS44LjAiLAorICAgICAgICAi
aGFzLWJpbmFyeSI6ICIwLjEuNyIsCisgICAgICAgICJvYmplY3QtYXNzaWduIjogIjQuMS4wIiwK
KyAgICAgICAgInNvY2tldC5pby1hZGFwdGVyIjogIjAuNS4wIiwKKyAgICAgICAgInNvY2tldC5p
by1jbGllbnQiOiAiMS42LjAiLAorICAgICAgICAic29ja2V0LmlvLXBhcnNlciI6ICIyLjMuMSIK
KyAgICAgIH0sCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiZGVidWciOiB7Cisg
ICAgICAgICAgInZlcnNpb24iOiAiMi4zLjMiLAorICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRw
czovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kZWJ1Zy8tL2RlYnVnLTIuMy4zLnRneiIsCisgICAgICAg
ICAgImludGVncml0eSI6ICJzaGExLVFNUlQ1bjV1RThrQjNld3hldmlZYk5xZS80dz0iLAorICAg
ICAgICAgICJkZXYiOiB0cnVlLAorICAgICAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAgICAg
ICJtcyI6ICIwLjcuMiIKKyAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgICJtcyI6IHsK
KyAgICAgICAgICAidmVyc2lvbiI6ICIwLjcuMiIsCisgICAgICAgICAgInJlc29sdmVkIjogImh0
dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21zLy0vbXMtMC43LjIudGd6IiwKKyAgICAgICAgICAi
aW50ZWdyaXR5IjogInNoYTEtcmlYUEpSS3ppRm9kbGRmd040YU5oREVTUjJVPSIsCisgICAgICAg
ICAgImRldiI6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgIm9iamVjdC1hc3NpZ24iOiB7Cisg
ICAgICAgICAgInZlcnNpb24iOiAiNC4xLjAiLAorICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRw
czovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9vYmplY3QtYXNzaWduLy0vb2JqZWN0LWFzc2lnbi00LjEu
MC50Z3oiLAorICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1lanM5RHBnR1BVUDB3RDh1aXVi
TlVhaG9nNkE9IiwKKyAgICAgICAgICAiZGV2IjogdHJ1ZQorICAgICAgICB9CisgICAgICB9Cisg
ICAgfSwKKyAgICAic29ja2V0LmlvLWFkYXB0ZXIiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjUu
MCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc29ja2V0
LmlvLWFkYXB0ZXIvLS9zb2NrZXQuaW8tYWRhcHRlci0wLjUuMC50Z3oiLAorICAgICAgImludGVn
cml0eSI6ICJzaGExLXkyMUx1TDdJSGhCNHVaWjMrYzdRQkdCbXU0cz0iLAorICAgICAgImRldiI6
IHRydWUsCisgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICJkZWJ1ZyI6ICIyLjMuMyIsCisg
ICAgICAgICJzb2NrZXQuaW8tcGFyc2VyIjogIjIuMy4xIgorICAgICAgfSwKKyAgICAgICJkZXBl
bmRlbmNpZXMiOiB7CisgICAgICAgICJkZWJ1ZyI6IHsKKyAgICAgICAgICAidmVyc2lvbiI6ICIy
LjMuMyIsCisgICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3Jn
L2RlYnVnLy0vZGVidWctMi4zLjMudGd6IiwKKyAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTEt
UU1SVDVuNXVFOGtCM2V3eGV2aVliTnFlLzR3PSIsCisgICAgICAgICAgImRldiI6IHRydWUsCisg
ICAgICAgICAgInJlcXVpcmVzIjogeworICAgICAgICAgICAgIm1zIjogIjAuNy4yIgorICAgICAg
ICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgIm1zIjogeworICAgICAgICAgICJ2ZXJzaW9uIjog
IjAuNy4yIiwKKyAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5v
cmcvbXMvLS9tcy0wLjcuMi50Z3oiLAorICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1yaVhQ
SlJLemlGb2RsZGZ3TjRhTmhERVNSMlU9IiwKKyAgICAgICAgICAiZGV2IjogdHJ1ZQorICAgICAg
ICB9CisgICAgICB9CisgICAgfSwKKyAgICAic29ja2V0LmlvLWNsaWVudCI6IHsKKyAgICAgICJ2
ZXJzaW9uIjogIjEuNi4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5w
bWpzLm9yZy9zb2NrZXQuaW8tY2xpZW50Ly0vc29ja2V0LmlvLWNsaWVudC0xLjYuMC50Z3oiLAor
ICAgICAgImludGVncml0eSI6ICJzaGExLVcyYVBUM2NUQk4vdTBYa0dSd2c0YjZaeGVGTT0iLAor
ICAgICAgImRldiI6IHRydWUsCisgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICJiYWNrbzIi
OiAiMS4wLjIiLAorICAgICAgICAiY29tcG9uZW50LWJpbmQiOiAiMS4wLjAiLAorICAgICAgICAi
Y29tcG9uZW50LWVtaXR0ZXIiOiAiMS4yLjEiLAorICAgICAgICAiZGVidWciOiAiMi4zLjMiLAor
ICAgICAgICAiZW5naW5lLmlvLWNsaWVudCI6ICIxLjguMCIsCisgICAgICAgICJoYXMtYmluYXJ5
IjogIjAuMS43IiwKKyAgICAgICAgImluZGV4b2YiOiAiMC4wLjEiLAorICAgICAgICAib2JqZWN0
LWNvbXBvbmVudCI6ICIwLjAuMyIsCisgICAgICAgICJwYXJzZXVyaSI6ICIwLjAuNSIsCisgICAg
ICAgICJzb2NrZXQuaW8tcGFyc2VyIjogIjIuMy4xIiwKKyAgICAgICAgInRvLWFycmF5IjogIjAu
MS40IgorICAgICAgfSwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJjb21wb25l
bnQtZW1pdHRlciI6IHsKKyAgICAgICAgICAidmVyc2lvbiI6ICIxLjIuMSIsCisgICAgICAgICAg
InJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NvbXBvbmVudC1lbWl0dGVy
Ly0vY29tcG9uZW50LWVtaXR0ZXItMS4yLjEudGd6IiwKKyAgICAgICAgICAiaW50ZWdyaXR5Ijog
InNoYTEtRTNrWTF0ZUNnL2ZmZW10OFdtUGhRT2FVSmVZPSIsCisgICAgICAgICAgImRldiI6IHRy
dWUKKyAgICAgICAgfSwKKyAgICAgICAgImRlYnVnIjogeworICAgICAgICAgICJ2ZXJzaW9uIjog
IjIuMy4zIiwKKyAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5v
cmcvZGVidWcvLS9kZWJ1Zy0yLjMuMy50Z3oiLAorICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hh
MS1RTVJUNW41dUU4a0IzZXd4ZXZpWWJOcWUvNHc9IiwKKyAgICAgICAgICAiZGV2IjogdHJ1ZSwK
KyAgICAgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICAgICAibXMiOiAiMC43LjIiCisgICAg
ICAgICAgfQorICAgICAgICB9LAorICAgICAgICAibXMiOiB7CisgICAgICAgICAgInZlcnNpb24i
OiAiMC43LjIiLAorICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpz
Lm9yZy9tcy8tL21zLTAuNy4yLnRneiIsCisgICAgICAgICAgImludGVncml0eSI6ICJzaGExLXJp
WFBKUkt6aUZvZGxkZndONGFOaERFU1IyVT0iLAorICAgICAgICAgICJkZXYiOiB0cnVlCisgICAg
ICAgIH0KKyAgICAgIH0KKyAgICB9LAorICAgICJzb2NrZXQuaW8tcGFyc2VyIjogeworICAgICAg
InZlcnNpb24iOiAiMi4zLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnku
bnBtanMub3JnL3NvY2tldC5pby1wYXJzZXIvLS9zb2NrZXQuaW8tcGFyc2VyLTIuMy4xLnRneiIs
CisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtM1ZNZ0pSQTg1Q2xwY3lhKy9XUUFYOC9sdEtBPSIs
CisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAgImNvbXBv
bmVudC1lbWl0dGVyIjogIjEuMS4yIiwKKyAgICAgICAgImRlYnVnIjogIjIuMi4wIiwKKyAgICAg
ICAgImlzYXJyYXkiOiAiMC4wLjEiLAorICAgICAgICAianNvbjMiOiAiMy4zLjIiCisgICAgICB9
LAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImRlYnVnIjogeworICAgICAgICAg
ICJ2ZXJzaW9uIjogIjIuMi4wIiwKKyAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdp
c3RyeS5ucG1qcy5vcmcvZGVidWcvLS9kZWJ1Zy0yLjIuMC50Z3oiLAorICAgICAgICAgICJpbnRl
Z3JpdHkiOiAic2hhMS0rSEJYNlpXeG9mYXVha2xnWmtFM3ZGYndPZG89IiwKKyAgICAgICAgICAi
ZGV2IjogdHJ1ZSwKKyAgICAgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICAgICAibXMiOiAi
MC43LjEiCisgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICAiaXNhcnJheSI6IHsKKyAg
ICAgICAgICAidmVyc2lvbiI6ICIwLjAuMSIsCisgICAgICAgICAgInJlc29sdmVkIjogImh0dHBz
Oi8vcmVnaXN0cnkubnBtanMub3JnL2lzYXJyYXkvLS9pc2FycmF5LTAuMC4xLnRneiIsCisgICAg
ICAgICAgImludGVncml0eSI6ICJzaGExLWloaXMvS21vOUJkK0NhdjhZRGlUbXdYUjd0OD0iLAor
ICAgICAgICAgICJkZXYiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgICJtcyI6IHsKKyAgICAg
ICAgICAidmVyc2lvbiI6ICIwLjcuMSIsCisgICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8v
cmVnaXN0cnkubnBtanMub3JnL21zLy0vbXMtMC43LjEudGd6IiwKKyAgICAgICAgICAiaW50ZWdy
aXR5IjogInNoYTEtbk5FOEE2Mi84bHRsNy8zbnpvWk82VklCY0pnPSIsCisgICAgICAgICAgImRl
diI6IHRydWUKKyAgICAgICAgfQorICAgICAgfQorICAgIH0sCisgICAgInNvcnQtb2JqZWN0LWtl
eXMiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjEuMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0
cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc29ydC1vYmplY3Qta2V5cy8tL3NvcnQtb2JqZWN0LWtl
eXMtMS4xLjIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS0wNmJFamNLc2wrYThsRFoy
bHVBL2JRblRlVkk9IiwKKyAgICAgICJkZXYiOiB0cnVlCisgICAgfSwKKyAgICAic29ydC1wYWNr
YWdlLWpzb24iOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjcuMCIsCisgICAgICAicmVzb2x2ZWQi
OiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc29ydC1wYWNrYWdlLWpzb24vLS9zb3J0LXBh
Y2thZ2UtanNvbi0xLjcuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLUU3TmkvMlFB
eGJUcXFib2lENTZudzlaa1MxOD0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAicmVxdWly
ZXMiOiB7CisgICAgICAgICJzb3J0LW9iamVjdC1rZXlzIjogIjEuMS4yIgorICAgICAgfQorICAg
IH0sCisgICAgInNvdXJjZS1tYXAiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjUuNiIsCisgICAg
ICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc291cmNlLW1hcC8tL3Nv
dXJjZS1tYXAtMC41LjYudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1kYzQ0OVN2d2N6
eGFmd3dSallFelNpdTE5Qkk9IiwKKyAgICAgICJkZXYiOiB0cnVlCisgICAgfSwKKyAgICAic291
cmNlLW1hcC1zdXBwb3J0IjogeworICAgICAgInZlcnNpb24iOiAiMC4yLjEwIiwKKyAgICAgICJy
ZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zb3VyY2UtbWFwLXN1cHBvcnQv
LS9zb3VyY2UtbWFwLXN1cHBvcnQtMC4yLjEwLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNo
YTEtNmxvNUFLSEJ5eVVKYWdyb3pGd3JTeERlMDl3PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAg
ICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAgInNvdXJjZS1tYXAiOiAiMC4xLjMyIgorICAgICAg
fSwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJzb3VyY2UtbWFwIjogeworICAg
ICAgICAgICJ2ZXJzaW9uIjogIjAuMS4zMiIsCisgICAgICAgICAgInJlc29sdmVkIjogImh0dHBz
Oi8vcmVnaXN0cnkubnBtanMub3JnL3NvdXJjZS1tYXAvLS9zb3VyY2UtbWFwLTAuMS4zMi50Z3oi
LAorICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS15TGJCWjNsN3BIUUtqcU15VWhZdjhJV1Jz
bVk9IiwKKyAgICAgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICAgICAicmVxdWlyZXMiOiB7Cisg
ICAgICAgICAgICAiYW1kZWZpbmUiOiAiMS4wLjEiCisgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICB9CisgICAgfSwKKyAgICAic291cmNlLW1hcC11cmwiOiB7CisgICAgICAidmVyc2lvbiI6
ICIwLjMuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcv
c291cmNlLW1hcC11cmwvLS9zb3VyY2UtbWFwLXVybC0wLjMuMC50Z3oiLAorICAgICAgImludGVn
cml0eSI6ICJzaGExLWZzcnhPMWU4MEoyb3BBeGRKcDJ6TjVuVXF2az0iLAorICAgICAgImRldiI6
IHRydWUKKyAgICB9LAorICAgICJzcGF3bi1hcmdzIjogeworICAgICAgInZlcnNpb24iOiAiMC4y
LjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NwYXdu
LWFyZ3MvLS9zcGF3bi1hcmdzLTAuMi4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEt
KzMwTDBkY1AxREZyMmVQZXc0bm1YNTFqWWJzPSIsCisgICAgICAiZGV2IjogdHJ1ZQorICAgIH0s
CisgICAgInNwYXduLXN5bmMiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjAuMTUiLAorICAgICAg
InJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NwYXduLXN5bmMvLS9zcGF3
bi1zeW5jLTEuMC4xNS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLXNBZVpWWDYzK3d5
RGRzS2RST2loNm1mbGRIWT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAicmVxdWlyZXMi
OiB7CisgICAgICAgICJjb25jYXQtc3RyZWFtIjogIjEuNi4wIiwKKyAgICAgICAgIm9zLXNoaW0i
OiAiMC4xLjMiCisgICAgICB9CisgICAgfSwKKyAgICAic3Bhd25iYWNrIjogeworICAgICAgInZl
cnNpb24iOiAiMS4wLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBt
anMub3JnL3NwYXduYmFjay8tL3NwYXduYmFjay0xLjAuMC50Z3oiLAorICAgICAgImludGVncml0
eSI6ICJzaGExLTl6Wmk5K1ZObFRaK3luVFdRbXhuZmRmcWFHOD0iLAorICAgICAgImRldiI6IHRy
dWUKKyAgICB9LAorICAgICJzcHJpbnRmLWpzIjogeworICAgICAgInZlcnNpb24iOiAiMS4xLjEi
LAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NwcmludGYt
anMvLS9zcHJpbnRmLWpzLTEuMS4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtTnI1
NE1ncitXQUgyenFQdWVMYmxxcmxBNmd3PSIsCisgICAgICAiZGV2IjogdHJ1ZQorICAgIH0sCisg
ICAgInNyaS10b29sYm94IjogeworICAgICAgInZlcnNpb24iOiAiMC4yLjAiLAorICAgICAgInJl
c29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NyaS10b29sYm94Ly0vc3JpLXRv
b2xib3gtMC4yLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1wLzZsdy8zbFhtZGM4
Y2pBYno2N1hDazFnMTQ9IiwKKyAgICAgICJkZXYiOiB0cnVlCisgICAgfSwKKyAgICAic3RhYmxl
IjogeworICAgICAgInZlcnNpb24iOiAiMC4xLjYiLAorICAgICAgInJlc29sdmVkIjogImh0dHBz
Oi8vcmVnaXN0cnkubnBtanMub3JnL3N0YWJsZS8tL3N0YWJsZS0wLjEuNi50Z3oiLAorICAgICAg
ImludGVncml0eSI6ICJzaGExLWtROWRLdTE3VWd4dWQzU1p3Zk11RTUvZXl4QT0iLAorICAgICAg
ImRldiI6IHRydWUKKyAgICB9LAorICAgICJzdGF0dXNlcyI6IHsKKyAgICAgICJ2ZXJzaW9uIjog
IjEuMy4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9z
dGF0dXNlcy8tL3N0YXR1c2VzLTEuMy4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEt
K3ZVYm5yZEtydk96clBTdFgyR3I4a3kzdVQ0PSIsCisgICAgICAiZGV2IjogdHJ1ZQorICAgIH0s
CisgICAgInN0cmluZ19kZWNvZGVyIjogeworICAgICAgInZlcnNpb24iOiAiMC4xMC4zMSIsCisg
ICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3RyaW5nX2RlY29k
ZXIvLS9zdHJpbmdfZGVjb2Rlci0wLjEwLjMxLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNo
YTEtWXVJRHZFRjJiR3dveWZ5RU1CMnJIRk1RK3BRPSIsCisgICAgICAiZGV2IjogdHJ1ZQorICAg
IH0sCisgICAgInN0cmluZy10ZW1wbGF0ZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuMi4xIiwK
KyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zdHJpbmctdGVt
cGxhdGUvLS9zdHJpbmctdGVtcGxhdGUtMC4yLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAi
c2hhMS1RcE11V1lvMUxRSDhJdXd6WjluWVR1eHNtdDA9IiwKKyAgICAgICJkZXYiOiB0cnVlCisg
ICAgfSwKKyAgICAic3RyaW5nLXdpZHRoIjogeworICAgICAgInZlcnNpb24iOiAiMS4wLjIiLAor
ICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N0cmluZy13aWR0
aC8tL3N0cmluZy13aWR0aC0xLjAuMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLUVZ
dmZXNHpjVWFLbjV3MGhIZ2Zpc0xteEI5TT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAi
cmVxdWlyZXMiOiB7CisgICAgICAgICJjb2RlLXBvaW50LWF0IjogIjEuMS4wIiwKKyAgICAgICAg
ImlzLWZ1bGx3aWR0aC1jb2RlLXBvaW50IjogIjEuMC4wIiwKKyAgICAgICAgInN0cmlwLWFuc2ki
OiAiMy4wLjEiCisgICAgICB9CisgICAgfSwKKyAgICAic3RyaW5nbWFwIjogeworICAgICAgInZl
cnNpb24iOiAiMC4yLjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBt
anMub3JnL3N0cmluZ21hcC8tL3N0cmluZ21hcC0wLjIuMi50Z3oiLAorICAgICAgImludGVncml0
eSI6ICJzaGExLVZXd1RleVdQbEN1SGR2V3k3MWdxb0duWDBiRT0iLAorICAgICAgImRldiI6IHRy
dWUKKyAgICB9LAorICAgICJzdHJpbmdzZXQiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjIuMSIs
CisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3RyaW5nc2V0
Ly0vc3RyaW5nc2V0LTAuMi4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtN3lXY1Rq
U1RSRGQvelJ5UlBkTG9TTW5BUXJVPSIsCisgICAgICAiZGV2IjogdHJ1ZQorICAgIH0sCisgICAg
InN0cmlwLWFuc2kiOiB7CisgICAgICAidmVyc2lvbiI6ICIzLjAuMSIsCisgICAgICAicmVzb2x2
ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3RyaXAtYW5zaS8tL3N0cmlwLWFuc2kt
My4wLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1hamhmdUlVOWxTMWY4RjBPaXEr
VUo0M0dQYzg9IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgInJlcXVpcmVzIjogeworICAg
ICAgICAiYW5zaS1yZWdleCI6ICIyLjEuMSIKKyAgICAgIH0KKyAgICB9LAorICAgICJzdHJpcC1i
b20iOiB7CisgICAgICAidmVyc2lvbiI6ICIyLjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0
cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3RyaXAtYm9tLy0vc3RyaXAtYm9tLTIuMC4wLnRneiIs
CisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtWWhtb1ZoWlNCSkh6VjRpOXZ4UkhxWngrYXc0PSIs
CisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAgImlzLXV0
ZjgiOiAiMC4yLjEiCisgICAgICB9CisgICAgfSwKKyAgICAic3RyaXAtZW9mIjogeworICAgICAg
InZlcnNpb24iOiAiMS4wLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnku
bnBtanMub3JnL3N0cmlwLWVvZi8tL3N0cmlwLWVvZi0xLjAuMC50Z3oiLAorICAgICAgImludGVn
cml0eSI6ICJzaGExLXUwUC9WWmltNndYWW0xbjgwU25KZ3pFMkJyOD0iLAorICAgICAgImRldiI6
IHRydWUKKyAgICB9LAorICAgICJzdHJpcC1qc29uLWNvbW1lbnRzIjogeworICAgICAgInZlcnNp
b24iOiAiMS4wLjQiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMu
b3JnL3N0cmlwLWpzb24tY29tbWVudHMvLS9zdHJpcC1qc29uLWNvbW1lbnRzLTEuMC40LnRneiIs
CisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtSGhYN3lzbDlQdW1iOHRjN1RHVnJDQ3U2KzVFPSIs
CisgICAgICAiZGV2IjogdHJ1ZQorICAgIH0sCisgICAgInN0eWxlZF9zdHJpbmciOiB7CisgICAg
ICAidmVyc2lvbiI6ICIwLjAuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3Ry
eS5ucG1qcy5vcmcvc3R5bGVkX3N0cmluZy8tL3N0eWxlZF9zdHJpbmctMC4wLjEudGd6IiwKKyAg
ICAgICJpbnRlZ3JpdHkiOiAic2hhMS0waWVDdllFcFZGbThUeDN4akV1dGpwVGRFa289IiwKKyAg
ICAgICJkZXYiOiB0cnVlCisgICAgfSwKKyAgICAic3VtLXVwIjogeworICAgICAgInZlcnNpb24i
OiAiMS4wLjMiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3Jn
L3N1bS11cC8tL3N1bS11cC0xLjAuMy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLUhH
WWZabkJYOWp2TGVIV3FGRGk4RmlVbEZXND0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAi
cmVxdWlyZXMiOiB7CisgICAgICAgICJjaGFsayI6ICIxLjEuMyIKKyAgICAgIH0KKyAgICB9LAor
ICAgICJzdXBwb3J0cy1jb2xvciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuMC4wIiwKKyAgICAg
ICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zdXBwb3J0cy1jb2xvci8t
L3N1cHBvcnRzLWNvbG9yLTIuMC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtVTEw
RVhPYTJOaitrQVJjSVJpbVpYcDN6Sk1jPSIsCisgICAgICAiZGV2IjogdHJ1ZQorICAgIH0sCisg
ICAgInN5bWxpbmstb3ItY29weSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMS44IiwKKyAgICAg
ICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zeW1saW5rLW9yLWNvcHkv
LS9zeW1saW5rLW9yLWNvcHktMS4xLjgudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS15
cjVoNEFFTUhBSThGenNsN2xFSXMzOUxTcU09IiwKKyAgICAgICJkZXYiOiB0cnVlCisgICAgfSwK
KyAgICAidGFwLXBhcnNlciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjUuNC4wIiwKKyAgICAgICJy
ZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90YXAtcGFyc2VyLy0vdGFwLXBh
cnNlci01LjQuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItQklzSWFHcXY3dVRR
Z1RXMUtMVE1OUFNFUWY0ekREUGdZT0JSZGdPZnVCK0pGT0xSQmZFdTZjTGEvS3ZNdm1xZ2d1MUZL
WERmaXRqTHdzcTQ4MjdSdkE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJyZXF1aXJl
cyI6IHsKKyAgICAgICAgImV2ZW50cy10by1hcnJheSI6ICIxLjEuMiIsCisgICAgICAgICJqcy15
YW1sIjogIjMuOS4xIiwKKyAgICAgICAgInJlYWRhYmxlLXN0cmVhbSI6ICIyLjMuMyIKKyAgICAg
IH0sCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAicmVhZGFibGUtc3RyZWFtIjog
eworICAgICAgICAgICJ2ZXJzaW9uIjogIjIuMy4zIiwKKyAgICAgICAgICAicmVzb2x2ZWQiOiAi
aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcmVhZGFibGUtc3RyZWFtLy0vcmVhZGFibGUtc3Ry
ZWFtLTIuMy4zLnRneiIsCisgICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItbStxenpjbjdL
VXhFbWQxZ01iY2hGK1kyZUlVYmllVWF4a1d0cHR5SHl3clgwckU4UUVZcVBDMDdWdXk0V20zMi94
RTE2TmNkQmN0YjhTMFhlLzVJZVE9PSIsCisgICAgICAgICAgImRldiI6IHRydWUsCisgICAgICAg
ICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICAg
ICAiY29yZS11dGlsLWlzIjogIjEuMC4yIiwKKyAgICAgICAgICAgICJpbmhlcml0cyI6ICIyLjAu
MyIsCisgICAgICAgICAgICAiaXNhcnJheSI6ICIxLjAuMCIsCisgICAgICAgICAgICAicHJvY2Vz
cy1uZXh0aWNrLWFyZ3MiOiAiMS4wLjciLAorICAgICAgICAgICAgInNhZmUtYnVmZmVyIjogIjUu
MS4xIiwKKyAgICAgICAgICAgICJzdHJpbmdfZGVjb2RlciI6ICIxLjAuMyIsCisgICAgICAgICAg
ICAidXRpbC1kZXByZWNhdGUiOiAiMS4wLjIiCisgICAgICAgICAgfQorICAgICAgICB9LAorICAg
ICAgICAic3RyaW5nX2RlY29kZXIiOiB7CisgICAgICAgICAgInZlcnNpb24iOiAiMS4wLjMiLAor
ICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zdHJpbmdf
ZGVjb2Rlci8tL3N0cmluZ19kZWNvZGVyLTEuMC4zLnRneiIsCisgICAgICAgICAgImludGVncml0
eSI6ICJzaGE1MTItNEFINlo1ZnpOTkJjSCs2WERNZkEvQlR0ODdza3hxSmxPMGxBaDNEa2VyNXpU
aGNBeEc2bUt6K2lHdTMwOFVLb1BQUThEY3F4LzRKaHVqemx0UmEraFE9PSIsCisgICAgICAgICAg
ImRldiI6IHRydWUsCisgICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICAgICAicmVx
dWlyZXMiOiB7CisgICAgICAgICAgICAic2FmZS1idWZmZXIiOiAiNS4xLjEiCisgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICB9CisgICAgfSwKKyAgICAidGVtcCI6IHsKKyAgICAgICJ2ZXJz
aW9uIjogIjAuOC4zIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpz
Lm9yZy90ZW1wLy0vdGVtcC0wLjguMy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLTRN
YThUU2E1QXhKRUVPVCsyQkVEQVUzOEgxaz0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAi
cmVxdWlyZXMiOiB7CisgICAgICAgICJvcy10bXBkaXIiOiAiMS4wLjIiLAorICAgICAgICAicmlt
cmFmIjogIjIuMi44IgorICAgICAgfSwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAg
ICJyaW1yYWYiOiB7CisgICAgICAgICAgInZlcnNpb24iOiAiMi4yLjgiLAorICAgICAgICAgICJy
ZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yaW1yYWYvLS9yaW1yYWYtMi4y
LjgudGd6IiwKKyAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTEtNURtK0txN2pKeklaVW5NUG1h
aVNuay9GQllJPSIsCisgICAgICAgICAgImRldiI6IHRydWUKKyAgICAgICAgfQorICAgICAgfQor
ICAgIH0sCisgICAgInRlc3RlbSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMTguMSIsCisgICAg
ICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdGVzdGVtLy0vdGVzdGVt
LTEuMTguMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLUNNS2lmR1RBQTV6WXRraDN0
L3ZFa2JJcjRVVT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAicmVxdWlyZXMiOiB7Cisg
ICAgICAgICJiYWNrYm9uZSI6ICIxLjMuMyIsCisgICAgICAgICJibHVlYmlyZCI6ICIzLjUuMCIs
CisgICAgICAgICJjaGFybSI6ICIxLjAuMiIsCisgICAgICAgICJjb21tYW5kZXIiOiAiMi4xMS4w
IiwKKyAgICAgICAgImNvbnNvbGlkYXRlIjogIjAuMTQuNSIsCisgICAgICAgICJjcm9zcy1zcGF3
biI6ICI1LjEuMCIsCisgICAgICAgICJleHByZXNzIjogIjQuMTUuNCIsCisgICAgICAgICJmaXJl
d29ybSI6ICIwLjcuMSIsCisgICAgICAgICJnbG9iIjogIjcuMS4yIiwKKyAgICAgICAgImh0dHAt
cHJveHkiOiAiMS4xNi4yIiwKKyAgICAgICAgImpzLXlhbWwiOiAiMy45LjEiLAorICAgICAgICAi
bG9kYXNoLmFzc2lnbmluIjogIjQuMi4wIiwKKyAgICAgICAgImxvZGFzaC5jbG9uZWRlZXAiOiAi
NC41LjAiLAorICAgICAgICAibG9kYXNoLmZpbmQiOiAiNC42LjAiLAorICAgICAgICAibG9kYXNo
LnVuaXFieSI6ICI0LjcuMCIsCisgICAgICAgICJta2RpcnAiOiAiMC41LjEiLAorICAgICAgICAi
bXVzdGFjaGUiOiAiMi4zLjAiLAorICAgICAgICAibm9kZS1ub3RpZmllciI6ICI1LjEuMiIsCisg
ICAgICAgICJucG1sb2ciOiAiNC4xLjIiLAorICAgICAgICAicHJpbnRmIjogIjAuMi41IiwKKyAg
ICAgICAgInJpbXJhZiI6ICIyLjYuMSIsCisgICAgICAgICJzb2NrZXQuaW8iOiAiMS42LjAiLAor
ICAgICAgICAic3Bhd24tYXJncyI6ICIwLjIuMCIsCisgICAgICAgICJzdHlsZWRfc3RyaW5nIjog
IjAuMC4xIiwKKyAgICAgICAgInRhcC1wYXJzZXIiOiAiNS40LjAiLAorICAgICAgICAieG1sZG9t
IjogIjAuMS4yNyIKKyAgICAgIH0sCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAi
Ymx1ZWJpcmQiOiB7CisgICAgICAgICAgInZlcnNpb24iOiAiMy41LjAiLAorICAgICAgICAgICJy
ZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9ibHVlYmlyZC8tL2JsdWViaXJk
LTMuNS4wLnRneiIsCisgICAgICAgICAgImludGVncml0eSI6ICJzaGExLWVSUWcxL1ZSN3FLSmRG
T29wM1pUK1dZRzFudz0iLAorICAgICAgICAgICJkZXYiOiB0cnVlCisgICAgICAgIH0sCisgICAg
ICAgICJnbG9iIjogeworICAgICAgICAgICJ2ZXJzaW9uIjogIjcuMS4yIiwKKyAgICAgICAgICAi
cmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZ2xvYi8tL2dsb2ItNy4xLjIu
dGd6IiwKKyAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1NSlRVZzFranVMZVFDSitjY0U0
VnBhNmtLVlhrUFlKMm1PQ1F5VXVLTGNMUXNkck1DcEJQVWk4cVZFNitZdWFKa296ZUE5TnVzVEF3
M2hMcjhYZTVFUT09IiwKKyAgICAgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICAgICAicmVxdWly
ZXMiOiB7CisgICAgICAgICAgICAiZnMucmVhbHBhdGgiOiAiMS4wLjAiLAorICAgICAgICAgICAg
ImluZmxpZ2h0IjogIjEuMC42IiwKKyAgICAgICAgICAgICJpbmhlcml0cyI6ICIyLjAuMyIsCisg
ICAgICAgICAgICAibWluaW1hdGNoIjogIjMuMC40IiwKKyAgICAgICAgICAgICJvbmNlIjogIjEu
NC4wIiwKKyAgICAgICAgICAgICJwYXRoLWlzLWFic29sdXRlIjogIjEuMC4xIgorICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0sCisgICAgInRleHRleHRlbnNpb25zIjogewor
ICAgICAgInZlcnNpb24iOiAiMi4xLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVn
aXN0cnkubnBtanMub3JnL3RleHRleHRlbnNpb25zLy0vdGV4dGV4dGVuc2lvbnMtMi4xLjAudGd6
IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1HK0RjS2czQ1JOUkw2S0NhOXFoYSs1UEUyOE09
IiwKKyAgICAgICJkZXYiOiB0cnVlCisgICAgfSwKKyAgICAidGhyb3VnaCI6IHsKKyAgICAgICJ2
ZXJzaW9uIjogIjIuMy44IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5w
bWpzLm9yZy90aHJvdWdoLy0vdGhyb3VnaC0yLjMuOC50Z3oiLAorICAgICAgImludGVncml0eSI6
ICJzaGExLURkVEovNnE4TlhsZ3NiY2tFVjErRG9haTRmVT0iLAorICAgICAgImRldiI6IHRydWUK
KyAgICB9LAorICAgICJ0aW55LWxyIjogeworICAgICAgInZlcnNpb24iOiAiMS4wLjUiLAorICAg
ICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3RpbnktbHIvLS90aW55
LWxyLTEuMC41LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ZcnhVU2lNZ09WaDNQ
bkFxdGRBVVF1VVZFVlJucWNSQ3hKM0JIcmwvYWFXVjJmcGxLS0I2MG9DbE0wR0gyR2lvMmhjWHZr
eE1VeHNDL3ZYWnJRZVBsZz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgInJlcXVpcmVz
IjogeworICAgICAgICAiYm9keSI6ICI1LjEuMCIsCisgICAgICAgICJkZWJ1ZyI6ICIyLjYuOCIs
CisgICAgICAgICJmYXllLXdlYnNvY2tldCI6ICIwLjEwLjAiLAorICAgICAgICAibGl2ZXJlbG9h
ZC1qcyI6ICIyLjIuMiIsCisgICAgICAgICJvYmplY3QtYXNzaWduIjogIjQuMS4xIiwKKyAgICAg
ICAgInFzIjogIjYuNS4wIgorICAgICAgfQorICAgIH0sCisgICAgInRtcCI6IHsKKyAgICAgICJ2
ZXJzaW9uIjogIjAuMC4yOCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5u
cG1qcy5vcmcvdG1wLy0vdG1wLTAuMC4yOC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGEx
LUZ5YzF0L1lVNm5yemxtVDZoTThONU9VVjBTQT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAg
ICAicmVxdWlyZXMiOiB7CisgICAgICAgICJvcy10bXBkaXIiOiAiMS4wLjIiCisgICAgICB9Cisg
ICAgfSwKKyAgICAidG1wbCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMC40IiwKKyAgICAgICJy
ZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90bXBsLy0vdG1wbC0xLjAuNC50
Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLUkyUU4xN1F0QUVNNUVSUUlJT1hQUkE1U0hk
RT0iLAorICAgICAgImRldiI6IHRydWUKKyAgICB9LAorICAgICJ0by1hcnJheSI6IHsKKyAgICAg
ICJ2ZXJzaW9uIjogIjAuMS40IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5
Lm5wbWpzLm9yZy90by1hcnJheS8tL3RvLWFycmF5LTAuMS40LnRneiIsCisgICAgICAiaW50ZWdy
aXR5IjogInNoYTEtRitiQkgzUGRUejEwemFlay96STQ2YTJiK0pBPSIsCisgICAgICAiZGV2Ijog
dHJ1ZQorICAgIH0sCisgICAgInRvLWZhc3QtcHJvcGVydGllcyI6IHsKKyAgICAgICJ2ZXJzaW9u
IjogIjEuMC4zIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9y
Zy90by1mYXN0LXByb3BlcnRpZXMvLS90by1mYXN0LXByb3BlcnRpZXMtMS4wLjMudGd6IiwKKyAg
ICAgICJpbnRlZ3JpdHkiOiAic2hhMS11RFZ4K2syTUpiZ3VJeHNHNDZNRlhlVEtHa2M9IiwKKyAg
ICAgICJkZXYiOiB0cnVlCisgICAgfSwKKyAgICAidHJlZS1zeW5jIjogeworICAgICAgInZlcnNp
b24iOiAiMS4yLjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMu
b3JnL3RyZWUtc3luYy8tL3RyZWUtc3luYy0xLjIuMi50Z3oiLAorICAgICAgImludGVncml0eSI6
ICJzaGExLUxQZHJoWW4xbi83YldOdGFPc2ZMQVQwQldMYz0iLAorICAgICAgImRldiI6IHRydWUs
CisgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICJkZWJ1ZyI6ICIyLjYuOCIsCisgICAgICAg
ICJmcy10cmVlLWRpZmYiOiAiMC41LjYiLAorICAgICAgICAibWtkaXJwIjogIjAuNS4xIiwKKyAg
ICAgICAgInF1aWNrLXRlbXAiOiAiMC4xLjgiLAorICAgICAgICAid2Fsay1zeW5jIjogIjAuMi43
IgorICAgICAgfSwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJ3YWxrLXN5bmMi
OiB7CisgICAgICAgICAgInZlcnNpb24iOiAiMC4yLjciLAorICAgICAgICAgICJyZXNvbHZlZCI6
ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy93YWxrLXN5bmMvLS93YWxrLXN5bmMtMC4yLjcu
dGd6IiwKKyAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTEtdEp2azdtaG5aWHJyYzJsNHRXb3Aw
UStqbVdrPSIsCisgICAgICAgICAgImRldiI6IHRydWUsCisgICAgICAgICAgInJlcXVpcmVzIjog
eworICAgICAgICAgICAgImVuc3VyZS1wb3NpeC1wYXRoIjogIjEuMC4yIiwKKyAgICAgICAgICAg
ICJtYXRjaGVyLWNvbGxlY3Rpb24iOiAiMS4wLjQiCisgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICB9CisgICAgfSwKKyAgICAidHJpbS1yaWdodCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEu
MC4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90cmlt
LXJpZ2h0Ly0vdHJpbS1yaWdodC0xLjAuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGEx
LXl5NFNBd1orREkzaDloUUpTNS9rVndUcVlBTT0iLAorICAgICAgImRldiI6IHRydWUKKyAgICB9
LAorICAgICJ0cnktcmVzb2x2ZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMC4xIiwKKyAgICAg
ICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90cnktcmVzb2x2ZS8tL3Ry
eS1yZXNvbHZlLTEuMC4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtejk1dnE5Y3RZ
K1Y1ZlBxcmh6cTc2T2NBNlJJPSIsCisgICAgICAiZGV2IjogdHJ1ZQorICAgIH0sCisgICAgInRy
eW9yIjogeworICAgICAgInZlcnNpb24iOiAiMC4xLjIiLAorICAgICAgInJlc29sdmVkIjogImh0
dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3RyeW9yLy0vdHJ5b3ItMC4xLjIudGd6IiwKKyAgICAg
ICJpbnRlZ3JpdHkiOiAic2hhMS1nVVhreW55djlBck40OHo1UnVpNHUzVzBGeXM9IiwKKyAgICAg
ICJkZXYiOiB0cnVlCisgICAgfSwKKyAgICAidHlwZS1pcyI6IHsKKyAgICAgICJ2ZXJzaW9uIjog
IjEuNi4xNSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcv
dHlwZS1pcy8tL3R5cGUtaXMtMS42LjE1LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEt
eXJFUHRKQ2VSQnlDaEM2djRhMWtiSUdBUkJBPSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAg
ICJyZXF1aXJlcyI6IHsKKyAgICAgICAgIm1lZGlhLXR5cGVyIjogIjAuMy4wIiwKKyAgICAgICAg
Im1pbWUtdHlwZXMiOiAiMi4xLjE2IgorICAgICAgfQorICAgIH0sCisgICAgInR5cGVkYXJyYXki
OiB7CisgICAgICAidmVyc2lvbiI6ICIwLjAuNiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6
Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdHlwZWRhcnJheS8tL3R5cGVkYXJyYXktMC4wLjYudGd6IiwK
KyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1obnJIVGpoa0dIc2RQVWZabHFlT3hjaURCM2M9IiwK
KyAgICAgICJkZXYiOiB0cnVlCisgICAgfSwKKyAgICAidWMubWljcm8iOiB7CisgICAgICAidmVy
c2lvbiI6ICIxLjAuMyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1q
cy5vcmcvdWMubWljcm8vLS91Yy5taWNyby0xLjAuMy50Z3oiLAorICAgICAgImludGVncml0eSI6
ICJzaGExLWZ0VU5YZythbjdDbGN6ZVNXZktuZEZqVkFaST0iLAorICAgICAgImRldiI6IHRydWUK
KyAgICB9LAorICAgICJ1Z2xpZnktanMiOiB7CisgICAgICAidmVyc2lvbiI6ICIyLjguMjkiLAor
ICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3VnbGlmeS1qcy8t
L3VnbGlmeS1qcy0yLjguMjkudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1LY1Z6TVVn
RmU3VGg5MTN6VzNxY3R5NXFXZDA9IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgInJlcXVp
cmVzIjogeworICAgICAgICAic291cmNlLW1hcCI6ICIwLjUuNiIsCisgICAgICAgICJ1Z2xpZnkt
dG8tYnJvd3NlcmlmeSI6ICIxLjAuMiIsCisgICAgICAgICJ5YXJncyI6ICIzLjEwLjAiCisgICAg
ICB9LAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIndpbmRvdy1zaXplIjogewor
ICAgICAgICAgICJ2ZXJzaW9uIjogIjAuMS4wIiwKKyAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0
cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd2luZG93LXNpemUvLS93aW5kb3ctc2l6ZS0wLjEuMC50
Z3oiLAorICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1WRGpOTHFrN0lDNzZPaG4raUlldTU4
bFBuSjA9IiwKKyAgICAgICAgICAiZGV2IjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICAieWFy
Z3MiOiB7CisgICAgICAgICAgInZlcnNpb24iOiAiMy4xMC4wIiwKKyAgICAgICAgICAicmVzb2x2
ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcveWFyZ3MvLS95YXJncy0zLjEwLjAudGd6
IiwKKyAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTEtOSs1NzJGZmRmQjB0T01EblR2dldnZEZE
SDlFPSIsCisgICAgICAgICAgImRldiI6IHRydWUsCisgICAgICAgICAgInJlcXVpcmVzIjogewor
ICAgICAgICAgICAgImNhbWVsY2FzZSI6ICIxLjIuMSIsCisgICAgICAgICAgICAiY2xpdWkiOiAi
Mi4xLjAiLAorICAgICAgICAgICAgImRlY2FtZWxpemUiOiAiMS4yLjAiLAorICAgICAgICAgICAg
IndpbmRvdy1zaXplIjogIjAuMS4wIgorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQor
ICAgIH0sCisgICAgInVnbGlmeS10by1icm93c2VyaWZ5IjogeworICAgICAgInZlcnNpb24iOiAi
MS4wLjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Vn
bGlmeS10by1icm93c2VyaWZ5Ly0vdWdsaWZ5LXRvLWJyb3dzZXJpZnktMS4wLjIudGd6IiwKKyAg
ICAgICJpbnRlZ3JpdHkiOiAic2hhMS1iZ2trMXIybXRhL2pTZU9hYldNb1VLRDRncmM9IiwKKyAg
ICAgICJkZXYiOiB0cnVlLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZQorICAgIH0sCisgICAgInVs
dHJvbiI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMC4yIiwKKyAgICAgICJyZXNvbHZlZCI6ICJo
dHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy91bHRyb24vLS91bHRyb24tMS4wLjIudGd6IiwKKyAg
ICAgICJpbnRlZ3JpdHkiOiAic2hhMS1yT0VXcTFWODBaYzRhazZJOUdoVGVNaXk1UG89IiwKKyAg
ICAgICJkZXYiOiB0cnVlCisgICAgfSwKKyAgICAidW5kZXJzY29yZSI6IHsKKyAgICAgICJ2ZXJz
aW9uIjogIjEuOC4zIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpz
Lm9yZy91bmRlcnNjb3JlLy0vdW5kZXJzY29yZS0xLjguMy50Z3oiLAorICAgICAgImludGVncml0
eSI6ICJzaGExLVR6KzFPeEJ1WUpmOCtjdEJDZktsNmIzNlVDST0iLAorICAgICAgImRldiI6IHRy
dWUKKyAgICB9LAorICAgICJ1bmRlcnNjb3JlLnN0cmluZyI6IHsKKyAgICAgICJ2ZXJzaW9uIjog
IjMuMy40IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy91
bmRlcnNjb3JlLnN0cmluZy8tL3VuZGVyc2NvcmUuc3RyaW5nLTMuMy40LnRneiIsCisgICAgICAi
aW50ZWdyaXR5IjogInNoYTEtTENvL240UG1SMkw5eEY1czZzWlJRb1pDRTlzPSIsCisgICAgICAi
ZGV2IjogdHJ1ZSwKKyAgICAgICJyZXF1aXJlcyI6IHsKKyAgICAgICAgInNwcmludGYtanMiOiAi
MS4xLjEiLAorICAgICAgICAidXRpbC1kZXByZWNhdGUiOiAiMS4wLjIiCisgICAgICB9CisgICAg
fSwKKyAgICAidW5pcXVlLXN0cmluZyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMC4wIiwKKyAg
ICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy91bmlxdWUtc3RyaW5n
Ly0vdW5pcXVlLXN0cmluZy0xLjAuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLW5o
Qlh6S2hScTdrem1QaXpPdUdIdVp5dXdSbz0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAi
cmVxdWlyZXMiOiB7CisgICAgICAgICJjcnlwdG8tcmFuZG9tLXN0cmluZyI6ICIxLjAuMCIKKyAg
ICAgIH0KKyAgICB9LAorICAgICJ1bml2ZXJzYWxpZnkiOiB7CisgICAgICAidmVyc2lvbiI6ICIw
LjEuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdW5p
dmVyc2FsaWZ5Ly0vdW5pdmVyc2FsaWZ5LTAuMS4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5Ijog
InNoYTEtK25HNjNVUTNyMHdVaUVIanM3RmwrZW5sa0xjPSIsCisgICAgICAiZGV2IjogdHJ1ZQor
ICAgIH0sCisgICAgInVucGlwZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMC4wIiwKKyAgICAg
ICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy91bnBpcGUvLS91bnBpcGUt
MS4wLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1zcjlPNkZGS3JtRmx0SUY0S2RJ
Ykx2U1pCT3c9IiwKKyAgICAgICJkZXYiOiB0cnVlCisgICAgfSwKKyAgICAidW50aWxkaWZ5Ijog
eworICAgICAgInZlcnNpb24iOiAiMi4xLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8v
cmVnaXN0cnkubnBtanMub3JnL3VudGlsZGlmeS8tL3VudGlsZGlmeS0yLjEuMC50Z3oiLAorICAg
ICAgImludGVncml0eSI6ICJzaGExLUYrc29CNWgvZHBVdW5BU0YvREVkQnFnbW91QT0iLAorICAg
ICAgImRldiI6IHRydWUsCisgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICJvcy1ob21lZGly
IjogIjEuMC4yIgorICAgICAgfQorICAgIH0sCisgICAgInVzZXItaG9tZSI6IHsKKyAgICAgICJ2
ZXJzaW9uIjogIjEuMS4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5w
bWpzLm9yZy91c2VyLWhvbWUvLS91c2VyLWhvbWUtMS4xLjEudGd6IiwKKyAgICAgICJpbnRlZ3Jp
dHkiOiAic2hhMS1LMXZpT2pLMk9ueWQ2NDBQS05TRmNrbzk4WkE9IiwKKyAgICAgICJkZXYiOiB0
cnVlCisgICAgfSwKKyAgICAidXNlcm5hbWUtc3luYyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEu
MC4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy91c2Vy
bmFtZS1zeW5jLy0vdXNlcm5hbWUtc3luYy0xLjAuMS50Z3oiLAorICAgICAgImludGVncml0eSI6
ICJzaGExLUhONkg3dno1UzRnaW1FMlRpNkszbDBKdHJoOD0iLAorICAgICAgImRldiI6IHRydWUK
KyAgICB9LAorICAgICJ1dGlsLWRlcHJlY2F0ZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMC4y
IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy91dGlsLWRl
cHJlY2F0ZS8tL3V0aWwtZGVwcmVjYXRlLTEuMC4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5Ijog
InNoYTEtUlExTnlmcHczbk1uWXZ2UzFLS0pnVUdhRE04PSIsCisgICAgICAiZGV2IjogdHJ1ZQor
ICAgIH0sCisgICAgInV0aWxzLW1lcmdlIjogeworICAgICAgInZlcnNpb24iOiAiMS4wLjAiLAor
ICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3V0aWxzLW1lcmdl
Ly0vdXRpbHMtbWVyZ2UtMS4wLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1BcFQ3
a2l1NU4xRlRWQnhQY0pZakh5aDhpdmc9IiwKKyAgICAgICJkZXYiOiB0cnVlCisgICAgfSwKKyAg
ICAidXVpZCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMuMS4wIiwKKyAgICAgICJyZXNvbHZlZCI6
ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy91dWlkLy0vdXVpZC0zLjEuMC50Z3oiLAorICAg
ICAgImludGVncml0eSI6ICJzaGE1MTItRElXdHpVa3cwNE00azNiZjFJY3BTMnRuZ1hFTDI2WVVE
Mk0wdE1EVXBuVXJ6MmhnelVCbEQ1NWE0RmpkTEdQdmZIeFM2dWx1R1d2YVZFcWdCY1ZhK2c9PSIs
CisgICAgICAiZGV2IjogdHJ1ZQorICAgIH0sCisgICAgInZhbGlkYXRlLW5wbS1wYWNrYWdlLW5h
bWUiOiB7CisgICAgICAidmVyc2lvbiI6ICIzLjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0
cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdmFsaWRhdGUtbnBtLXBhY2thZ2UtbmFtZS8tL3ZhbGlk
YXRlLW5wbS1wYWNrYWdlLW5hbWUtMy4wLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hh
MS1YNmtTMkI2MzBNZEsvQlFONXpGL0RLZmZRMzQ9IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAg
ICAgInJlcXVpcmVzIjogeworICAgICAgICAiYnVpbHRpbnMiOiAiMS4wLjMiCisgICAgICB9Cisg
ICAgfSwKKyAgICAidmFyeSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMS4xIiwKKyAgICAgICJy
ZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy92YXJ5Ly0vdmFyeS0xLjEuMS50
Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLVoxTmV1MmxNSFZJbGRGZVlSbVV5UDFoK2pU
Yz0iLAorICAgICAgImRldiI6IHRydWUKKyAgICB9LAorICAgICJ3YWxrLXN5bmMiOiB7CisgICAg
ICAidmVyc2lvbiI6ICIwLjMuMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3Ry
eS5ucG1qcy5vcmcvd2Fsay1zeW5jLy0vd2Fsay1zeW5jLTAuMy4yLnRneiIsCisgICAgICAiaW50
ZWdyaXR5IjogInNoYTUxMi1GTUI1VnFwTHFPQ2NxcnpBOW9rWkZjMHdxMFFibWRtMzk2cUp4dlFa
aERweXUwVzk1RzlKQ21wNzR0eDdpeVlueU9jQnRVdUtKc2dJS0Fxam96dm1tUT09IiwKKyAgICAg
ICJkZXYiOiB0cnVlLAorICAgICAgInJlcXVpcmVzIjogeworICAgICAgICAiZW5zdXJlLXBvc2l4
LXBhdGgiOiAiMS4wLjIiLAorICAgICAgICAibWF0Y2hlci1jb2xsZWN0aW9uIjogIjEuMC40Igor
ICAgICAgfQorICAgIH0sCisgICAgIndhbGtlciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMC43
IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy93YWxrZXIv
LS93YWxrZXItMS4wLjcudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1MMytiajlFTloz
SmlzWXFJVGlqUmxoamdLUHM9IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgInJlcXVpcmVz
IjogeworICAgICAgICAibWFrZWVycm9yIjogIjEuMC4xMSIKKyAgICAgIH0KKyAgICB9LAorICAg
ICJ3YXRjaCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuMTAuMCIsCisgICAgICAicmVzb2x2ZWQi
OiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd2F0Y2gvLS93YXRjaC0wLjEwLjAudGd6IiwK
KyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1kM21MTGFENWtRMVpYeHJPV3d3aVdGSWZJZHc9IiwK
KyAgICAgICJkZXYiOiB0cnVlCisgICAgfSwKKyAgICAid2Vic29ja2V0LWRyaXZlciI6IHsKKyAg
ICAgICJ2ZXJzaW9uIjogIjAuNi41IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lz
dHJ5Lm5wbWpzLm9yZy93ZWJzb2NrZXQtZHJpdmVyLy0vd2Vic29ja2V0LWRyaXZlci0wLjYuNS50
Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLVhMSlZiT3VGOURjOGJZSTRxbWtjaEZUaE9q
WT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICJ3
ZWJzb2NrZXQtZXh0ZW5zaW9ucyI6ICIwLjEuMSIKKyAgICAgIH0KKyAgICB9LAorICAgICJ3ZWJz
b2NrZXQtZXh0ZW5zaW9ucyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuMS4xIiwKKyAgICAgICJy
ZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy93ZWJzb2NrZXQtZXh0ZW5zaW9u
cy8tL3dlYnNvY2tldC1leHRlbnNpb25zLTAuMS4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5Ijog
InNoYTEtZG9tVW1jR0V0dTkxUTNmQzI3RE5iTFZkS2VjPSIsCisgICAgICAiZGV2IjogdHJ1ZQor
ICAgIH0sCisgICAgIndoaWNoIjogeworICAgICAgInZlcnNpb24iOiAiMS4zLjAiLAorICAgICAg
InJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3doaWNoLy0vd2hpY2gtMS4z
LjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXhjSnBvcGRhbVR1WTVkdUMvS25U
VE5CcmFQSzU0WXdwZW5QNGx6eFU4SDkxR3VkV3BGdjM4dTBDS2pjbEUxV2kyRUgyRUR6NUxSY0hj
S2JDSXpxR3lnPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAicmVxdWlyZXMiOiB7Cisg
ICAgICAgICJpc2V4ZSI6ICIyLjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJ3aWRlLWFsaWdu
IjogeworICAgICAgInZlcnNpb24iOiAiMS4xLjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBz
Oi8vcmVnaXN0cnkubnBtanMub3JnL3dpZGUtYWxpZ24vLS93aWRlLWFsaWduLTEuMS4yLnRneiIs
CisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1pakRMbHlRN3M2eDFKZ0NMdXI1M29zam0vVVhV
WUQ5KzBQYllLckJzWWlzWVh6Q3hOK0hDM21ZRE55L2RXZG1mM0F3cXdVM0NYd0RDdnNOZ0dLMVMw
dz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgInJlcXVpcmVzIjogeworICAgICAgICAi
c3RyaW5nLXdpZHRoIjogIjEuMC4yIgorICAgICAgfQorICAgIH0sCisgICAgIndpbmRvdy1zaXpl
IjogeworICAgICAgInZlcnNpb24iOiAiMC4xLjQiLAorICAgICAgInJlc29sdmVkIjogImh0dHBz
Oi8vcmVnaXN0cnkubnBtanMub3JnL3dpbmRvdy1zaXplLy0vd2luZG93LXNpemUtMC4xLjQudGd6
IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS0rT0dxSHVXbFBzVy9GUi82Q1hRcWF0ZHBlSFk9
IiwKKyAgICAgICJkZXYiOiB0cnVlCisgICAgfSwKKyAgICAid29yZHdyYXAiOiB7CisgICAgICAi
dmVyc2lvbiI6ICIwLjAuMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5u
cG1qcy5vcmcvd29yZHdyYXAvLS93b3Jkd3JhcC0wLjAuMi50Z3oiLAorICAgICAgImludGVncml0
eSI6ICJzaGExLXQ1WnB1MExzdEFuNFBWZzhyVkxLRitxaFpEOD0iLAorICAgICAgImRldiI6IHRy
dWUKKyAgICB9LAorICAgICJ3b3JrZXJwb29sIjogeworICAgICAgInZlcnNpb24iOiAiMi4yLjIi
LAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3dvcmtlcnBv
b2wvLS93b3JrZXJwb29sLTIuMi4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtSFBV
N3JLL1pqS1hZQ1A5VXpITHovc3RlSFZZPSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJy
ZXF1aXJlcyI6IHsKKyAgICAgICAgIm9iamVjdC1hc3NpZ24iOiAiNC4xLjEiCisgICAgICB9Cisg
ICAgfSwKKyAgICAid3JhcHB5IjogeworICAgICAgInZlcnNpb24iOiAiMS4wLjIiLAorICAgICAg
InJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3dyYXBweS8tL3dyYXBweS0x
LjAuMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLXRTUTlqejdCcWpYeE5rWUZ2QTBR
TnVNS3RwOD0iLAorICAgICAgImRldiI6IHRydWUKKyAgICB9LAorICAgICJ3cml0ZS1maWxlLWF0
b21pYyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuMS4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJo
dHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy93cml0ZS1maWxlLWF0b21pYy8tL3dyaXRlLWZpbGUt
YXRvbWljLTIuMS4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0wVFoyMGEreGNJ
bDR1MCtNajV4REgyeU9XZG1RaVhsS2Y5SG0rVGdEWGpUTXNFWWIrZ0RybWI4ZThVTkF6TUNpdFg4
TkJxRzRaL0ZVUUl5enYvUjFKUT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgInJlcXVp
cmVzIjogeworICAgICAgICAiZ3JhY2VmdWwtZnMiOiAiNC4xLjExIiwKKyAgICAgICAgImltdXJt
dXJoYXNoIjogIjAuMS40IiwKKyAgICAgICAgInNsaWRlIjogIjEuMS42IgorICAgICAgfQorICAg
IH0sCisgICAgIndzIjogeworICAgICAgInZlcnNpb24iOiAiMS4xLjEiLAorICAgICAgInJlc29s
dmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3dzLy0vd3MtMS4xLjEudGd6IiwKKyAg
ICAgICJpbnRlZ3JpdHkiOiAic2hhMS1DQzNiYkdRZWhkUzdSUjhEMVM4RzZyMng4Qmc9IiwKKyAg
ICAgICJkZXYiOiB0cnVlLAorICAgICAgInJlcXVpcmVzIjogeworICAgICAgICAib3B0aW9ucyI6
ICIwLjAuNiIsCisgICAgICAgICJ1bHRyb24iOiAiMS4wLjIiCisgICAgICB9CisgICAgfSwKKyAg
ICAid3RmLTgiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjAuMCIsCisgICAgICAicmVzb2x2ZWQi
OiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd3RmLTgvLS93dGYtOC0xLjAuMC50Z3oiLAor
ICAgICAgImludGVncml0eSI6ICJzaGExLU9TMkxvdER4dzAwZTR0WXc4VjBPKzJqaEJJbz0iLAor
ICAgICAgImRldiI6IHRydWUKKyAgICB9LAorICAgICJ4ZGctYmFzZWRpciI6IHsKKyAgICAgICJ2
ZXJzaW9uIjogIjMuMC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5w
bWpzLm9yZy94ZGctYmFzZWRpci8tL3hkZy1iYXNlZGlyLTMuMC4wLnRneiIsCisgICAgICAiaW50
ZWdyaXR5IjogInNoYTEtU1dzc3dRbnNxTnVzL2kzSEsyQThGOFdIQ3RRPSIsCisgICAgICAiZGV2
IjogdHJ1ZQorICAgIH0sCisgICAgInhtbGRvbSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuMS4y
NyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcveG1sZG9t
Ly0veG1sZG9tLTAuMS4yNy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLTFRSDVlenZi
UURyNDc1N01JRmN4aDZyYXdPaz0iLAorICAgICAgImRldiI6IHRydWUKKyAgICB9LAorICAgICJ4
bWxodHRwcmVxdWVzdC1zc2wiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjUuMyIsCisgICAgICAi
cmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcveG1saHR0cHJlcXVlc3Qtc3Ns
Ly0veG1saHR0cHJlcXVlc3Qtc3NsLTEuNS4zLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNo
YTEtR0ZxSWpBVHNwR3crUUhEWm4zdEozalVvbVMwPSIsCisgICAgICAiZGV2IjogdHJ1ZQorICAg
IH0sCisgICAgInh0ZW5kIjogeworICAgICAgInZlcnNpb24iOiAiNC4wLjEiLAorICAgICAgInJl
c29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3h0ZW5kLy0veHRlbmQtNC4wLjEu
dGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1wY2JWTXI1bGJpUGJnZzc3bERvZkJKbU5Z
Njg9IiwKKyAgICAgICJkZXYiOiB0cnVlCisgICAgfSwKKyAgICAieTE4biI6IHsKKyAgICAgICJ2
ZXJzaW9uIjogIjMuMi4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5w
bWpzLm9yZy95MThuLy0veTE4bi0zLjIuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGEx
LWJSWDdxSVRBaG5uQTEzNkk1M1dlZ1I0SCtrRT0iLAorICAgICAgImRldiI6IHRydWUKKyAgICB9
LAorICAgICJ5YWxsaXN0IjogeworICAgICAgInZlcnNpb24iOiAiMi4xLjIiLAorICAgICAgInJl
c29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3lhbGxpc3QvLS95YWxsaXN0LTIu
MS4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtSEJINUlZOEhZSW1rZmRVUytUeG1t
YWFvSFZJPSIsCisgICAgICAiZGV2IjogdHJ1ZQorICAgIH0sCisgICAgInlhbSI6IHsKKyAgICAg
ICJ2ZXJzaW9uIjogIjAuMC4yMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3Ry
eS5ucG1qcy5vcmcveWFtLy0veWFtLTAuMC4yMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJz
aGExLU9LZHN0NW9aS0UyU0J1MUpBeDQxbWhOQXZRWT0iLAorICAgICAgImRldiI6IHRydWUsCisg
ICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICJmcy1leHRyYSI6ICIwLjMwLjAiLAorICAgICAg
ICAibG9kYXNoLm1lcmdlIjogIjQuNi4wIgorICAgICAgfSwKKyAgICAgICJkZXBlbmRlbmNpZXMi
OiB7CisgICAgICAgICJmcy1leHRyYSI6IHsKKyAgICAgICAgICAidmVyc2lvbiI6ICIwLjMwLjAi
LAorICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9mcy1l
eHRyYS8tL2ZzLWV4dHJhLTAuMzAuMC50Z3oiLAorICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hh
MS04alAvekFqVTJuMURMYXBFbDNhWW5iSGZrL0E9IiwKKyAgICAgICAgICAiZGV2IjogdHJ1ZSwK
KyAgICAgICAgICAicmVxdWlyZXMiOiB7CisgICAgICAgICAgICAiZ3JhY2VmdWwtZnMiOiAiNC4x
LjExIiwKKyAgICAgICAgICAgICJqc29uZmlsZSI6ICIyLjQuMCIsCisgICAgICAgICAgICAia2xh
dyI6ICIxLjMuMSIsCisgICAgICAgICAgICAicGF0aC1pcy1hYnNvbHV0ZSI6ICIxLjAuMSIsCisg
ICAgICAgICAgICAicmltcmFmIjogIjIuNi4xIgorICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgfQorICAgIH0sCisgICAgInlhcmdzIjogeworICAgICAgInZlcnNpb24iOiAiMy4yNy4wIiwK
KyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy95YXJncy8tL3lh
cmdzLTMuMjcuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGExLUlTQlVhVEZ1azVFeDFa
OHRvTWJYK1lJaDZrQT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAicmVxdWlyZXMiOiB7
CisgICAgICAgICJjYW1lbGNhc2UiOiAiMS4yLjEiLAorICAgICAgICAiY2xpdWkiOiAiMi4xLjAi
LAorICAgICAgICAiZGVjYW1lbGl6ZSI6ICIxLjIuMCIsCisgICAgICAgICJvcy1sb2NhbGUiOiAi
MS40LjAiLAorICAgICAgICAid2luZG93LXNpemUiOiAiMC4xLjQiLAorICAgICAgICAieTE4biI6
ICIzLjIuMSIKKyAgICAgIH0KKyAgICB9LAorICAgICJ5ZWFzdCI6IHsKKyAgICAgICJ2ZXJzaW9u
IjogIjAuMS4yIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9y
Zy95ZWFzdC8tL3llYXN0LTAuMS4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTEtQUk0
RzJBbERJTU55MjhMNDdYYWd5bXlLeEJrPSIsCisgICAgICAiZGV2IjogdHJ1ZQorICAgIH0KKyAg
fQorfQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMv
dG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy9wYWNrYWdlLmpzb24gYi9QZXJm
b3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1l
eGFtcGxlcy9lbWJlcmpzL3BhY2thZ2UuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZjgwODAyOTQ5YmY0NjY3
ZDc1YTJjOWNmZTQwYmZjY2ZlN2QwYTQ1Ci0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VU
ZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMv
ZW1iZXJqcy9wYWNrYWdlLmpzb24KQEAgLTAsMCArMSw0MyBAQAoreworICAibmFtZSI6ICJ0b2Rv
bXZjIiwKKyAgInZlcnNpb24iOiAiMC4wLjAiLAorICAiZGVzY3JpcHRpb24iOiAiU21hbGwgZGVz
Y3JpcHRpb24gZm9yIHRvZG9tdmMgZ29lcyBoZXJlIiwKKyAgImxpY2Vuc2UiOiAiTUlUIiwKKyAg
ImF1dGhvciI6ICJNaWd1ZWwgQ2FtYmEiLAorICAiZGlyZWN0b3JpZXMiOiB7CisgICAgImRvYyI6
ICJkb2MiLAorICAgICJ0ZXN0IjogInRlc3RzIgorICB9LAorICAicmVwb3NpdG9yeSI6ICIiLAor
ICAic2NyaXB0cyI6IHsKKyAgICAiYnVpbGQiOiAiZW1iZXIgYnVpbGQgLS1lbnZpcm9ubWVudD1w
cm9kdWN0aW9uIiwKKyAgICAic3RhcnQiOiAiZW1iZXIgc2VydmVyIiwKKyAgICAidGVzdCI6ICJl
bWJlciB0ZXN0IgorICB9LAorICAiZGV2RGVwZW5kZW5jaWVzIjogeworICAgICJicm9jY29saS1h
c3NldC1yZXYiOiAiXjIuNC41IiwKKyAgICAiZW1iZXItYWpheCI6ICJeMi40LjEiLAorICAgICJl
bWJlci1jbGkiOiAiXjIuMTQuMiIsCisgICAgImVtYmVyLWNsaS1hcHAtdmVyc2lvbiI6ICJeMi4w
LjAiLAorICAgICJlbWJlci1jbGktYmFiZWwiOiAiXjUuMS43IiwKKyAgICAiZW1iZXItY2xpLWRl
cGVuZGVuY3ktY2hlY2tlciI6ICJeMS4zLjAiLAorICAgICJlbWJlci1jbGktaHRtbGJhcnMiOiAi
XjEuMC4xMCIsCisgICAgImVtYmVyLWNsaS1odG1sYmFycy1pbmxpbmUtcHJlY29tcGlsZSI6ICJe
MC4zLjMiLAorICAgICJlbWJlci1jbGktaW5qZWN0LWxpdmUtcmVsb2FkIjogIl4xLjQuMSIsCisg
ICAgImVtYmVyLWNsaS1qc2hpbnQiOiAiXjIuMC4xIiwKKyAgICAiZW1iZXItY2xpLXF1bml0Ijog
Il4zLjAuMSIsCisgICAgImVtYmVyLWNsaS1yZWxlYXNlIjogIl4wLjIuOSIsCisgICAgImVtYmVy
LWNsaS1zcmkiOiAiXjIuMS4wIiwKKyAgICAiZW1iZXItY2xpLXRlc3QtbG9hZGVyIjogIl4xLjEu
MCIsCisgICAgImVtYmVyLWNsaS11Z2xpZnkiOiAiXjEuMi4wIiwKKyAgICAiZW1iZXItZXhwb3J0
LWFwcGxpY2F0aW9uLWdsb2JhbCI6ICJeMS4wLjUiLAorICAgICJlbWJlci1pbmZsZWN0b3IiOiAi
MS45LjYiLAorICAgICJlbWJlci1sb2FkLWluaXRpYWxpemVycyI6ICJeMC41LjEiLAorICAgICJl
bWJlci1yZXNvbHZlciI6ICJeMi4wLjMiLAorICAgICJsb2FkZXIuanMiOiAiXjQuMC4xMCIKKyAg
fSwKKyAgImVuZ2luZXMiOiB7CisgICAgIm5vZGUiOiAiPj0gMC4xMi4wIgorICB9LAorICAicHJp
dmF0ZSI6IHRydWUKK30KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIv
cmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvcHVibGljL2Ny
b3NzZG9tYWluLnhtbCBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3Rv
ZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvcHVibGljL2Nyb3NzZG9tYWluLnht
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4wYzE2YTdhMDdiMzdlNWQ1ZjdlMGU1NmM4MjlmNzIwMDY3NDU4NDAzCi0t
LSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMv
dG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy9wdWJsaWMvY3Jvc3Nkb21haW4u
eG1sCkBAIC0wLDAgKzEsMTUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIGNy
b3NzLWRvbWFpbi1wb2xpY3kgU1lTVEVNICJodHRwOi8vd3d3LmFkb2JlLmNvbS94bWwvZHRkcy9j
cm9zcy1kb21haW4tcG9saWN5LmR0ZCI+Cis8Y3Jvc3MtZG9tYWluLXBvbGljeT4KKyAgPCEtLSBS
ZWFkIHRoaXM6IHd3dy5hZG9iZS5jb20vZGV2bmV0L2FydGljbGVzL2Nyb3NzZG9tYWluX3BvbGlj
eV9maWxlX3NwZWMuaHRtbCAtLT4KKworICA8IS0tIE1vc3QgcmVzdHJpY3RpdmUgcG9saWN5OiAt
LT4KKyAgPHNpdGUtY29udHJvbCBwZXJtaXR0ZWQtY3Jvc3MtZG9tYWluLXBvbGljaWVzPSJub25l
Ii8+CisKKyAgPCEtLSBMZWFzdCByZXN0cmljdGl2ZSBwb2xpY3k6IC0tPgorICA8IS0tCisgIDxz
aXRlLWNvbnRyb2wgcGVybWl0dGVkLWNyb3NzLWRvbWFpbi1wb2xpY2llcz0iYWxsIi8+CisgIDxh
bGxvdy1hY2Nlc3MtZnJvbSBkb21haW49IioiIHRvLXBvcnRzPSIqIiBzZWN1cmU9ImZhbHNlIi8+
CisgIDxhbGxvdy1odHRwLXJlcXVlc3QtaGVhZGVycy1mcm9tIGRvbWFpbj0iKiIgaGVhZGVycz0i
KiIgc2VjdXJlPSJmYWxzZSIvPgorICAtLT4KKzwvY3Jvc3MtZG9tYWluLXBvbGljeT4KZGlmZiAt
LWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJj
aGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvcHVibGljL3JvYm90cy50eHQgYi9QZXJmb3JtYW5j
ZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxl
cy9lbWJlcmpzL3B1YmxpYy9yb2JvdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY1OTE2NDUyZTVmZjZjOGI0
M2Q2ZDdjNzNkMDAxNTNkMzRhYzM1ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRl
c3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9l
bWJlcmpzL3B1YmxpYy9yb2JvdHMudHh0CkBAIC0wLDAgKzEsMyBAQAorIyBodHRwOi8vd3d3LnJv
Ym90c3R4dC5vcmcKK1VzZXItYWdlbnQ6ICoKK0Rpc2FsbG93OgpkaWZmIC0tZ2l0IGEvUGVyZm9y
bWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhh
bXBsZXMvZW1iZXJqcy9yb2JvdHMudHh0IGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9y
ZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy9yb2JvdHMudHh0
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNTkxNjQ1MmU1ZmY2YzhiNDNkNmQ3Yzcz
ZDAwMTUzZDM0YWMzNWRlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJj
aGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvcm9ib3RzLnR4dAorKysgL2Rldi9udWxsCkBAIC0x
LDMgKzAsMCBAQAotIyBodHRwOi8vd3d3LnJvYm90c3R4dC5vcmcKLVVzZXItYWdlbnQ6ICoKLURp
c2FsbG93OgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJj
ZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy9zb3VyY2UvLmJvd2VycmMg
Yi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVj
dHVyZS1leGFtcGxlcy9lbWJlcmpzL3NvdXJjZS8uYm93ZXJyYwpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggOTU5ZTE2OTZlN2IyYzk3MDAwNWMzNWVjOGEwZjk0YWVhNWRmMzZhYy4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRl
c3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9l
bWJlcmpzL3NvdXJjZS8uYm93ZXJyYworKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotewot
ICAiZGlyZWN0b3J5IjogImJvd2VyX2NvbXBvbmVudHMiLAotICAiYW5hbHl0aWNzIjogZmFsc2UK
LX0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3Rv
ZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvc291cmNlLy5lZGl0b3Jjb25maWcg
Yi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVj
dHVyZS1leGFtcGxlcy9lbWJlcmpzL3NvdXJjZS8uZWRpdG9yY29uZmlnCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA0N2M1NDM4NDAzY2E4NzVmMTcwZGIyYWEwN2QxYmZhMzY4OTQwNmUz
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1h
bmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1w
bGVzL2VtYmVyanMvc291cmNlLy5lZGl0b3Jjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSwzNCAr
MCwwIEBACi0jIEVkaXRvckNvbmZpZyBoZWxwcyBkZXZlbG9wZXJzIGRlZmluZSBhbmQgbWFpbnRh
aW4gY29uc2lzdGVudAotIyBjb2Rpbmcgc3R5bGVzIGJldHdlZW4gZGlmZmVyZW50IGVkaXRvcnMg
YW5kIElERXMKLSMgZWRpdG9yY29uZmlnLm9yZwotCi1yb290ID0gdHJ1ZQotCi0KLVsqXQotZW5k
X29mX2xpbmUgPSBsZgotY2hhcnNldCA9IHV0Zi04Ci10cmltX3RyYWlsaW5nX3doaXRlc3BhY2Ug
PSB0cnVlCi1pbnNlcnRfZmluYWxfbmV3bGluZSA9IHRydWUKLWluZGVudF9zdHlsZSA9IHNwYWNl
Ci1pbmRlbnRfc2l6ZSA9IDIKLQotWyouanNdCi1pbmRlbnRfc3R5bGUgPSBzcGFjZQotaW5kZW50
X3NpemUgPSAyCi0KLVsqLmhic10KLWluc2VydF9maW5hbF9uZXdsaW5lID0gZmFsc2UKLWluZGVu
dF9zdHlsZSA9IHNwYWNlCi1pbmRlbnRfc2l6ZSA9IDIKLQotWyouY3NzXQotaW5kZW50X3N0eWxl
ID0gc3BhY2UKLWluZGVudF9zaXplID0gMgotCi1bKi5odG1sXQotaW5kZW50X3N0eWxlID0gc3Bh
Y2UKLWluZGVudF9zaXplID0gMgotCi1bKi57ZGlmZixtZH1dCi10cmltX3RyYWlsaW5nX3doaXRl
c3BhY2UgPSBmYWxzZQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9y
ZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy9zb3VyY2UvLmVt
YmVyLWNsaSBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMv
YXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvc291cmNlLy5lbWJlci1jbGkKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlNjRjZmVkMmE4OTA1ZGMyMzUwNmFmMTA2MGVjODBjZjg4
NzU4MmQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVy
Zm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUt
ZXhhbXBsZXMvZW1iZXJqcy9zb3VyY2UvLmVtYmVyLWNsaQorKysgL2Rldi9udWxsCkBAIC0xLDkg
KzAsMCBAQAotewotICAvKioKLSAgICBFbWJlciBDTEkgc2VuZHMgYW5hbHl0aWNzIGluZm9ybWF0
aW9uIGJ5IGRlZmF1bHQuIFRoZSBkYXRhIGlzIGNvbXBsZXRlbHkKLSAgICBhbm9ueW1vdXMsIGJ1
dCB0aGVyZSBhcmUgdGltZXMgd2hlbiB5b3UgbWlnaHQgd2FudCB0byBkaXNhYmxlIHRoaXMgYmVo
YXZpb3IuCi0KLSAgICBTZXR0aW5nIGBkaXNhYmxlQW5hbHl0aWNzYCB0byB0cnVlIHdpbGwgcHJl
dmVudCBhbnkgZGF0YSBmcm9tIGJlaW5nIHNlbnQuCi0gICovCi0gICJkaXNhYmxlQW5hbHl0aWNz
IjogZmFsc2UKLX0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVz
b3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvc291cmNlLy5naXRp
Z25vcmUgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2Fy
Y2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL3NvdXJjZS8uZ2l0aWdub3JlCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBiZTA5ZTAzOGI3NWVjMmE3MjU4MDg5MzZhOGM2YjMyYzZhMmY2
MzJiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZv
cm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4
YW1wbGVzL2VtYmVyanMvc291cmNlLy5naXRpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwxNyAr
MCwwIEBACi0jIFNlZSBodHRwOi8vaGVscC5naXRodWIuY29tL2lnbm9yZS1maWxlcy8gZm9yIG1v
cmUgYWJvdXQgaWdub3JpbmcgZmlsZXMuCi0KLSMgY29tcGlsZWQgb3V0cHV0Ci0jIC9kaXN0Ci0v
dG1wCi0KLSMgZGVwZW5kZW5jaWVzCi0vbm9kZV9tb2R1bGVzCi0vYm93ZXJfY29tcG9uZW50cwot
Ci0jIG1pc2MKLS8uc2Fzcy1jYWNoZQotL2Nvbm5lY3QubG9jawotL2NvdmVyYWdlLyoKLS9saWJw
ZWVyY29ubmVjdGlvbi5sb2cKLW5wbS1kZWJ1Zy5sb2cKLXRlc3RlbS5sb2cKZGlmZiAtLWdpdCBh
L1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0
dXJlLWV4YW1wbGVzL2VtYmVyanMvc291cmNlLy5qc2hpbnRyYyBiL1BlcmZvcm1hbmNlVGVzdHMv
U3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVy
anMvc291cmNlLy5qc2hpbnRyYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDgwOTZl
ZmZhYWIzNzQ5OTRhZGNiMzU3OGU5ODg2NzVhNGJlZmE4Mi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jl
c291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL3NvdXJjZS8uanNo
aW50cmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi17Ci0gICJwcmVkZWYiOiBbCi0g
ICAgImRvY3VtZW50IiwKLSAgICAid2luZG93IiwKLSAgICAiLVByb21pc2UiCi0gIF0sCi0gICJi
cm93c2VyIjogdHJ1ZSwKLSAgImJvc3MiOiB0cnVlLAotICAiY3VybHkiOiB0cnVlLAotICAiZGVi
dWciOiBmYWxzZSwKLSAgImRldmVsIjogdHJ1ZSwKLSAgImVxZXFlcSI6IHRydWUsCi0gICJldmls
IjogdHJ1ZSwKLSAgImZvcmluIjogZmFsc2UsCi0gICJpbW1lZCI6IGZhbHNlLAotICAibGF4YnJl
YWsiOiBmYWxzZSwKLSAgIm5ld2NhcCI6IHRydWUsCi0gICJub2FyZyI6IHRydWUsCi0gICJub2Vt
cHR5IjogZmFsc2UsCi0gICJub25ldyI6IGZhbHNlLAotICAibm9tZW4iOiBmYWxzZSwKLSAgIm9u
ZXZhciI6IGZhbHNlLAotICAicGx1c3BsdXMiOiBmYWxzZSwKLSAgInJlZ2V4cCI6IGZhbHNlLAot
ICAidW5kZWYiOiB0cnVlLAotICAic3ViIjogdHJ1ZSwKLSAgInN0cmljdCI6IGZhbHNlLAotICAi
d2hpdGUiOiBmYWxzZSwKLSAgImVxbnVsbCI6IHRydWUsCi0gICJlc25leHQiOiB0cnVlLAotICAi
dW51c2VkIjogdHJ1ZQotfQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRl
ci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy9zb3VyY2Uv
LnRyYXZpcy55bWwgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2Rv
bXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL3NvdXJjZS8udHJhdmlzLnltbApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjQ1MzNiZWE4OWJjYzBmMDA5YWYwY2QyM2ZkZTBl
NGQwNmI5NDkxYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVj
dHVyZS1leGFtcGxlcy9lbWJlcmpzL3NvdXJjZS8udHJhdmlzLnltbAorKysgL2Rldi9udWxsCkBA
IC0xLDIyICswLDAgQEAKLS0tLQotbGFuZ3VhZ2U6IG5vZGVfanMKLW5vZGVfanM6Ci0gIC0gIjQi
Ci0KLXN1ZG86IGZhbHNlCi0KLWNhY2hlOgotICBkaXJlY3RvcmllczoKLSAgICAtIG5vZGVfbW9k
dWxlcwotCi1iZWZvcmVfaW5zdGFsbDoKLSAgLSBucG0gY29uZmlnIHNldCBzcGluIGZhbHNlCi0g
IC0gbnBtIGluc3RhbGwgLWcgYm93ZXIKLSAgLSBucG0gaW5zdGFsbCBwaGFudG9tanMtcHJlYnVp
bHQKLQotaW5zdGFsbDoKLSAgLSBucG0gaW5zdGFsbAotICAtIGJvd2VyIGluc3RhbGwKLQotc2Ny
aXB0OgotICAtIG5wbSB0ZXN0CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21l
dGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL3NvdXJj
ZS8ud2F0Y2htYW5jb25maWcgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNl
cy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL3NvdXJjZS8ud2F0Y2htYW5j
b25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3ODM0ZTNlNGYzOWMxYTc0NTk0
MmRmZTkwODkxNzA4NTkzZTBlYTYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212
Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy9zb3VyY2UvLndhdGNobWFuY29uZmlnCisr
KyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi17Ci0gICJpZ25vcmVfZGlycyI6IFsidG1wIiwg
ImRpc3QiXQotfQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNv
dXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy9zb3VyY2UvUkVBRE1F
Lm1kIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNo
aXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy9zb3VyY2UvUkVBRE1FLm1kCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBiODYzNDg4ODJhODMwMGFmNmY5MmFmZTQzYmUyZTQ3OGMwZGQyYTJi
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1h
bmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1w
bGVzL2VtYmVyanMvc291cmNlL1JFQURNRS5tZAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBA
QAotIyBTcGVlZG9tZXRlciAyLjA6IEVtYmVyLmpzIFRvZG9NVkMgZXhhbXBsZQotCi0jIyBUZXN0
IGxvY2FsbHkKLQotMS4gYG5wbSBpbnN0YWxsICYmIGJvd2VyIGluc3RhbGxgCi0yLiBgbnBtIHJ1
biBidWlsZGAKLTMuIFJ1biBhIGxvY2FsIHNlcnZlciBmcm9tIHRoZSBgZGlzdGAgZGlyZWN0b3J5
LiAoWW91IGNvdWxkIHVzZSBbYG5wbSBpIC1nIGh0dHAtc2VydmVyYF0oaHR0cHM6Ly9naXRodWIu
Y29tL2luZGV4emVyby9odHRwLXNlcnZlcikuKQotNC4gT3BlbiB0aGUgVVJMIHBvaW50aW5nIHRv
IHRoZSBsb2NhbCBzZXJ2ZXIgaW4geW91ciB3ZWIgYnJvd3NlciBvZiBjaG9pY2UuCmRpZmYgLS1n
aXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hp
dGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL3NvdXJjZS9hcHAvYXBwLmpzIGIvUGVyZm9ybWFuY2VU
ZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMv
ZW1iZXJqcy9zb3VyY2UvYXBwL2FwcC5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
ZjI2MGM0YzcwNmQwYWUzNzVjZmZjNjk2OWRmZTQzNGI1OWQyOTliNS4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21l
dGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL3NvdXJj
ZS9hcHAvYXBwLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotaW1wb3J0IEVtYmVy
IGZyb20gJ2VtYmVyJzsKLWltcG9ydCBSZXNvbHZlciBmcm9tICcuL3Jlc29sdmVyJzsKLWltcG9y
dCBsb2FkSW5pdGlhbGl6ZXJzIGZyb20gJ2VtYmVyLWxvYWQtaW5pdGlhbGl6ZXJzJzsKLWltcG9y
dCBjb25maWcgZnJvbSAnLi9jb25maWcvZW52aXJvbm1lbnQnOwotCi1sZXQgQXBwOwotCi1FbWJl
ci5NT0RFTF9GQUNUT1JZX0lOSkVDVElPTlMgPSB0cnVlOwotCi1BcHAgPSBFbWJlci5BcHBsaWNh
dGlvbi5leHRlbmQoewotICAgIG1vZHVsZVByZWZpeDogY29uZmlnLm1vZHVsZVByZWZpeCwKLSAg
ICBwb2RNb2R1bGVQcmVmaXg6IGNvbmZpZy5wb2RNb2R1bGVQcmVmaXgsCi0gICAgUmVzb2x2ZXIK
LX0pOwotCi1sb2FkSW5pdGlhbGl6ZXJzKEFwcCwgY29uZmlnLm1vZHVsZVByZWZpeCk7Ci0KLWV4
cG9ydCBkZWZhdWx0IEFwcDsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0
ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvc291cmNl
L2FwcC9jb21wb25lbnRzL3RvZG8taXRlbS5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0
ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvc291cmNl
L2FwcC9jb21wb25lbnRzL3RvZG8taXRlbS5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMGRlN2ZiZjExNjViMjYxNDU0MWE1NmEzOTBkMWMzMzhjNDk4ZTA5My4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVk
b21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL3Nv
dXJjZS9hcHAvY29tcG9uZW50cy90b2RvLWl0ZW0uanMKKysrIC9kZXYvbnVsbApAQCAtMSw0OSAr
MCwwIEBACi1pbXBvcnQgRW1iZXIgZnJvbSAnZW1iZXInOwotCi1leHBvcnQgZGVmYXVsdCBFbWJl
ci5Db21wb25lbnQuZXh0ZW5kKHsKLSAgICByZXBvOiBFbWJlci5pbmplY3Quc2VydmljZSgpLAot
ICAgIHRhZ05hbWU6ICdsaScsCi0gICAgZWRpdGluZzogZmFsc2UsCi0gICAgY2xhc3NOYW1lQmlu
ZGluZ3M6IFsndG9kby5jb21wbGV0ZWQnLCAnZWRpdGluZyddLAotCi0gICAgYWN0aW9uczogewot
ICAgICAgICBzdGFydEVkaXRpbmcoKSB7Ci0gICAgICAgICAgICB0aGlzLmdldCgnb25TdGFydEVk
aXQnKSgpOwotICAgICAgICAgICAgdGhpcy5zZXQoJ2VkaXRpbmcnLCB0cnVlKTsKLSAgICAgICAg
ICAgIEVtYmVyLnJ1bi5zY2hlZHVsZU9uY2UoJ2FmdGVyUmVuZGVyJywgdGhpcywgJ2ZvY3VzSW5w
dXQnKTsKLSAgICAgICAgfSwKLQotICAgICAgICBkb25lRWRpdGluZyh0b2RvVGl0bGUpIHsKLSAg
ICAgICAgICAgIGlmICghdGhpcy5nZXQoJ2VkaXRpbmcnKSkgeyByZXR1cm47IH0KLSAgICAgICAg
ICAgIGlmIChFbWJlci5pc0JsYW5rKHRvZG9UaXRsZSkpIHsKLSAgICAgICAgICAgICAgICB0aGlz
LnNlbmQoJ3JlbW92ZVRvZG8nKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgdGhpcy5zZXQoJ3RvZG8udGl0bGUnLCB0b2RvVGl0bGUudHJpbSgpKTsKLSAgICAgICAgICAg
ICAgICB0aGlzLnNldCgnZWRpdGluZycsIGZhbHNlKTsKLSAgICAgICAgICAgICAgICB0aGlzLmdl
dCgnb25FbmRFZGl0JykoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSwKLQotICAgICAgICBo
YW5kbGVLZXlkb3duKGUpIHsKLSAgICAgICAgICAgIGlmIChlLmtleUNvZGUgPT09IDEzKSB7Ci0g
ICAgICAgICAgICAgICAgZS50YXJnZXQuYmx1cigpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChl
LmtleUNvZGUgPT09IDI3KSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5zZXQoJ2VkaXRpbmcnLCBm
YWxzZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0sCi0KLSAgICAgICAgdG9nZ2xlQ29tcGxl
dGVkKGUpIHsKLSAgICAgICAgICAgIGxldCB0b2RvID0gdGhpcy5nZXQoJ3RvZG8nKTsKLSAgICAg
ICAgICAgIEVtYmVyLnNldCh0b2RvLCAnY29tcGxldGVkJywgZS50YXJnZXQuY2hlY2tlZCk7Ci0g
ICAgICAgICAgICB0aGlzLmdldCgncmVwbycpLnBlcnNpc3QoKTsKLSAgICAgICAgfSwKLQotICAg
ICAgICByZW1vdmVUb2RvKCkgewotICAgICAgICAgICAgdGhpcy5nZXQoJ3JlcG8nKS5kZWxldGUo
dGhpcy5nZXQoJ3RvZG8nKSk7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgZm9jdXNJbnB1dCgp
IHsKLSAgICAgICAgdGhpcy5lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0LmVkaXQnKS5mb2N1
cygpOwotICAgIH0KLX0pOwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRl
ci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy9zb3VyY2Uv
YXBwL2NvbXBvbmVudHMvdG9kby1saXN0LmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRl
ci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy9zb3VyY2Uv
YXBwL2NvbXBvbmVudHMvdG9kby1saXN0LmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBkODRlMGUzYTFmZTI5N2ZmNWQ4YWRiMTQxNjMyY2FlOTQyNjhkMmE5Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRv
bWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvc291
cmNlL2FwcC9jb21wb25lbnRzL3RvZG8tbGlzdC5qcworKysgL2Rldi9udWxsCkBAIC0xLDI3ICsw
LDAgQEAKLWltcG9ydCBFbWJlciBmcm9tICdlbWJlcic7Ci0KLWV4cG9ydCBkZWZhdWx0IEVtYmVy
LkNvbXBvbmVudC5leHRlbmQoewotICAgIHJlcG86IEVtYmVyLmluamVjdC5zZXJ2aWNlKCksCi0g
ICAgdGFnTmFtZTogJ3NlY3Rpb24nLAotICAgIGVsZW1lbnRJZDogJ21haW4nLAotICAgIGNhblRv
Z2dsZTogdHJ1ZSwKLSAgICBhbGxDb21wbGV0ZWQ6IEVtYmVyLmNvbXB1dGVkKCd0b2Rvcy5AZWFj
aC5jb21wbGV0ZWQnLCBmdW5jdGlvbiAoKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLmdldCgndG9k
b3MnKS5pc0V2ZXJ5KCdjb21wbGV0ZWQnKTsKLSAgICB9KSwKLQotICAgIGFjdGlvbnM6IHsKLSAg
ICAgICAgZW5hYmxlVG9nZ2xlKCkgewotICAgICAgICAgICAgdGhpcy5zZXQoJ2NhblRvZ2dsZScs
IHRydWUpOwotICAgICAgICB9LAotCi0gICAgICAgIGRpc2FibGVUb2dnbGUoKSB7Ci0gICAgICAg
ICAgICB0aGlzLnNldCgnY2FuVG9nZ2xlJywgZmFsc2UpOwotICAgICAgICB9LAotCi0gICAgICAg
IHRvZ2dsZUFsbCgpIHsKLSAgICAgICAgICAgIGxldCBhbGxDb21wbGV0ZWQgPSB0aGlzLmdldCgn
YWxsQ29tcGxldGVkJyk7Ci0gICAgICAgICAgICB0aGlzLmdldCgndG9kb3MnKS5mb3JFYWNoKHRv
ZG8gPT4gRW1iZXIuc2V0KHRvZG8sICdjb21wbGV0ZWQnLCAhYWxsQ29tcGxldGVkKSk7Ci0gICAg
ICAgICAgICB0aGlzLmdldCgncmVwbycpLnBlcnNpc3QoKTsKLSAgICAgICAgfQotICAgIH0KLX0p
OwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9k
b212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy9zb3VyY2UvYXBwL2NvbnRyb2xsZXJz
L2FjdGl2ZS5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9t
dmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvc291cmNlL2FwcC9jb250cm9sbGVycy9h
Y3RpdmUuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmMDNkNDA3OTAzODg5YTE0
MTM3NzFhMzFkZmMxNGJhNDg5MzViMjUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9k
b212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy9zb3VyY2UvYXBwL2NvbnRyb2xsZXJz
L2FjdGl2ZS5qcworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotaW1wb3J0IEVtYmVyIGZy
b20gJ2VtYmVyJzsKLQotZXhwb3J0IGRlZmF1bHQgRW1iZXIuQ29udHJvbGxlci5leHRlbmQoewot
ICAgIHRvZG9zOiBFbWJlci5jb21wdXRlZC5maWx0ZXJCeSgnbW9kZWwnLCAnY29tcGxldGVkJywg
ZmFsc2UpCi19KTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVz
b3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvc291cmNlL2FwcC9j
b250cm9sbGVycy9hcHBsaWNhdGlvbi5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIv
cmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvc291cmNlL2Fw
cC9jb250cm9sbGVycy9hcHBsaWNhdGlvbi5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggYzgxNGU1ZmE3M2NkOWU4MWM2MzU3ZmQ3MTFlNWU2ODdjMDliY2FmZi4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVk
b21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL3Nv
dXJjZS9hcHAvY29udHJvbGxlcnMvYXBwbGljYXRpb24uanMKKysrIC9kZXYvbnVsbApAQCAtMSwy
MCArMCwwIEBACi1pbXBvcnQgRW1iZXIgZnJvbSAnZW1iZXInOwotCi1leHBvcnQgZGVmYXVsdCBF
bWJlci5Db250cm9sbGVyLmV4dGVuZCh7Ci0gICAgcmVwbzogRW1iZXIuaW5qZWN0LnNlcnZpY2Uo
KSwKLSAgICByZW1haW5pbmc6IEVtYmVyLmNvbXB1dGVkLmZpbHRlckJ5KCdtb2RlbCcsICdjb21w
bGV0ZWQnLCBmYWxzZSksCi0gICAgY29tcGxldGVkOiBFbWJlci5jb21wdXRlZC5maWx0ZXJCeSgn
bW9kZWwnLCAnY29tcGxldGVkJyksCi0gICAgYWN0aW9uczogewotICAgICAgICBjcmVhdGVUb2Rv
KGUpIHsKLSAgICAgICAgICAgIGlmIChlLmtleUNvZGUgPT09IDEzICYmICFFbWJlci5pc0JsYW5r
KGUudGFyZ2V0LnZhbHVlKSkgewotICAgICAgICAgICAgICAgIHRoaXMuZ2V0KCdyZXBvJykuYWRk
KHsgdGl0bGU6IGUudGFyZ2V0LnZhbHVlLnRyaW0oKSwgY29tcGxldGVkOiBmYWxzZSB9KTsKLSAg
ICAgICAgICAgICAgICBlLnRhcmdldC52YWx1ZSA9ICcnOwotICAgICAgICAgICAgfQotICAgICAg
ICB9LAotCi0gICAgICAgIGNsZWFyQ29tcGxldGVkKCkgewotICAgICAgICAgICAgdGhpcy5nZXQo
J21vZGVsJykucmVtb3ZlT2JqZWN0cyh0aGlzLmdldCgnY29tcGxldGVkJykpOwotICAgICAgICAg
ICAgdGhpcy5nZXQoJ3JlcG8nKS5wZXJzaXN0KCk7Ci0gICAgICAgIH0KLSAgICB9Ci19KTsKZGlm
ZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMv
YXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvc291cmNlL2FwcC9jb250cm9sbGVycy9jb21w
bGV0ZWQuanMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZj
L2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL3NvdXJjZS9hcHAvY29udHJvbGxlcnMvY29t
cGxldGVkLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MzRkMDBhZmVmNzgwOWE3
M2Q0MTkxNTFiOGYwMmVjNWUwNTY3ZjViLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3Rv
ZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvc291cmNlL2FwcC9jb250cm9sbGVy
cy9jb21wbGV0ZWQuanMKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLWltcG9ydCBFbWJl
ciBmcm9tICdlbWJlcic7Ci0KLWV4cG9ydCBkZWZhdWx0IEVtYmVyLkNvbnRyb2xsZXIuZXh0ZW5k
KHsKLSAgICB0b2RvczogRW1iZXIuY29tcHV0ZWQuZmlsdGVyQnkoJ21vZGVsJywgJ2NvbXBsZXRl
ZCcsIHRydWUpCi19KTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIv
cmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvc291cmNlL2Fw
cC9oZWxwZXJzL2d0LmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMv
dG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy9zb3VyY2UvYXBwL2hlbHBlcnMv
Z3QuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzNzA2OTVhMmY5NDU2NTlkOWY1
ODQ3ZGIxMzc2NGVhZjY2MTEwZWIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212
Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy9zb3VyY2UvYXBwL2hlbHBlcnMvZ3QuanMK
KysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLWltcG9ydCBFbWJlciBmcm9tICdlbWJlcic7
Ci0KLWV4cG9ydCBmdW5jdGlvbiBndChbbjEsIG4yXS8qLCBoYXNoKi8pIHsKLSAgICByZXR1cm4g
bjEgPiBuMjsKLX0KLQotZXhwb3J0IGRlZmF1bHQgRW1iZXIuSGVscGVyLmhlbHBlcihndCk7CmRp
ZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZj
L2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL3NvdXJjZS9hcHAvaGVscGVycy9wbHVyYWxp
emUuanMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2Fy
Y2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL3NvdXJjZS9hcHAvaGVscGVycy9wbHVyYWxpemUu
anMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxZjFhMmFjYzhmODU2MTc4MGQwYjk1
ZGZmNzNjYTk2MzNiNjg5YTUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9h
cmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy9zb3VyY2UvYXBwL2hlbHBlcnMvcGx1cmFsaXpl
LmpzCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1pbXBvcnQgRW1iZXIgZnJvbSAnZW1i
ZXInOwotaW1wb3J0IHsgcGx1cmFsaXplIH0gZnJvbSAnZW1iZXItaW5mbGVjdG9yJzsKLQotZXhw
b3J0IGZ1bmN0aW9uIHBsdXJhbGl6ZUhlbHBlcihbc2luZ3VsYXIsIGNvdW50XS8qLCBoYXNoKi8p
IHsKLSAgICByZXR1cm4gY291bnQgPT09IDEgPyBzaW5ndWxhciA6IHBsdXJhbGl6ZShzaW5ndWxh
cik7Ci19Ci0KLWV4cG9ydCBkZWZhdWx0IEVtYmVyLkhlbHBlci5oZWxwZXIocGx1cmFsaXplSGVs
cGVyKTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2Vz
L3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvc291cmNlL2FwcC9pbmRleC5o
dG1sIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNo
aXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy9zb3VyY2UvYXBwL2luZGV4Lmh0bWwKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1MmYzNjc2Mjg2YzgxYzQwMjMxMGJkMGRlZjBhY2RkMDE2
YWI2YTcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVy
Zm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUt
ZXhhbXBsZXMvZW1iZXJqcy9zb3VyY2UvYXBwL2luZGV4Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAt
MSwyMCArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1sPgotICA8aGVhZD4KLSAgICA8bWV0
YSBjaGFyc2V0PSJ1dGYtOCI+Ci0gICAgPG1ldGEgaHR0cC1lcXVpdj0iWC1VQS1Db21wYXRpYmxl
IiBjb250ZW50PSJJRT1lZGdlIj4KLSAgICA8dGl0bGU+RW1iZXIuanMgVG9kb01WQyBleGFtcGxl
PC90aXRsZT4KLSAgICA8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iIj4KLSAgICA8
bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFs
LXNjYWxlPTEiPgotICAgIHt7Y29udGVudC1mb3IgImhlYWQifX0KLSAgICA8bGluayByZWw9InN0
eWxlc2hlZXQiIGhyZWY9Int7cm9vdFVSTH19YXNzZXRzL3ZlbmRvci5jc3MiPgotICAgIDxsaW5r
IHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ie3tyb290VVJMfX1hc3NldHMvdG9kb212Yy5jc3MiPgot
ICAgIHt7Y29udGVudC1mb3IgImhlYWQtZm9vdGVyIn19Ci0gIDwvaGVhZD4KLSAgPGJvZHk+Ci0g
ICAge3tjb250ZW50LWZvciAiYm9keSJ9fQotICAgIDxzY3JpcHQgc3JjPSJ7e3Jvb3RVUkx9fWFz
c2V0cy92ZW5kb3IuanMiPjwvc2NyaXB0PgotICAgIDxzY3JpcHQgc3JjPSJ7e3Jvb3RVUkx9fWFz
c2V0cy90b2RvbXZjLmpzIj48L3NjcmlwdD4KLSAgICB7e2NvbnRlbnQtZm9yICJib2R5LWZvb3Rl
ciJ9fQotICA8L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1Nw
ZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpz
L3NvdXJjZS9hcHAvcmVzb2x2ZXIuanMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jl
c291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL3NvdXJjZS9hcHAv
cmVzb2x2ZXIuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmYjU2M2Q2YzA0ODhm
NDFiZWM0NTRmZTFmYTdjMjI5OTc1YTU4ZGYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMv
dG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy9zb3VyY2UvYXBwL3Jlc29sdmVy
LmpzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1pbXBvcnQgUmVzb2x2ZXIgZnJvbSAn
ZW1iZXItcmVzb2x2ZXInOwotCi1leHBvcnQgZGVmYXVsdCBSZXNvbHZlcjsKZGlmZiAtLWdpdCBh
L1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0
dXJlLWV4YW1wbGVzL2VtYmVyanMvc291cmNlL2FwcC9yb3V0ZXIuanMgYi9QZXJmb3JtYW5jZVRl
c3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9l
bWJlcmpzL3NvdXJjZS9hcHAvcm91dGVyLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBjMGIzYmZjNDk2YWUxYmNmNjc1OGNkOTNhZjZiZTE3NGZlY2JiNDY1Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRv
bWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvc291
cmNlL2FwcC9yb3V0ZXIuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi1pbXBvcnQg
RW1iZXIgZnJvbSAnZW1iZXInOwotaW1wb3J0IGNvbmZpZyBmcm9tICcuL2NvbmZpZy9lbnZpcm9u
bWVudCc7Ci0KLWNvbnN0IFJvdXRlciA9IEVtYmVyLlJvdXRlci5leHRlbmQoewotICAgIGxvY2F0
aW9uOiBjb25maWcubG9jYXRpb25UeXBlLAotICAgIHJvb3RVUkw6IGNvbmZpZy5yb290VVJMCi19
KTsKLQotUm91dGVyLm1hcChmdW5jdGlvbiAoKSB7Ci0gICAgdGhpcy5yb3V0ZSgnYWN0aXZlJyk7
Ci0gICAgdGhpcy5yb3V0ZSgnY29tcGxldGVkJyk7Ci19KTsKLQotZXhwb3J0IGRlZmF1bHQgUm91
dGVyOwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMv
dG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy9zb3VyY2UvYXBwL3JvdXRlcy9h
cHBsaWNhdGlvbi5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3Rv
ZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvc291cmNlL2FwcC9yb3V0ZXMvYXBw
bGljYXRpb24uanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5NmEzNzViYTJhNjUw
Y2JhMTE5Njk3OTUxNzg0N2Y5ZWY2N2Y4MTMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMv
dG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy9zb3VyY2UvYXBwL3JvdXRlcy9h
cHBsaWNhdGlvbi5qcworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotaW1wb3J0IEVtYmVy
IGZyb20gJ2VtYmVyJzsKLQotZXhwb3J0IGRlZmF1bHQgRW1iZXIuUm91dGUuZXh0ZW5kKHsKLSAg
ICByZXBvOiBFbWJlci5pbmplY3Quc2VydmljZSgpLAotICAgIG1vZGVsKCkgewotICAgICAgICBy
ZXR1cm4gdGhpcy5nZXQoJ3JlcG8nKS5maW5kQWxsKCk7Ci0gICAgfQotfSk7CmRpZmYgLS1naXQg
YS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVj
dHVyZS1leGFtcGxlcy9lbWJlcmpzL3NvdXJjZS9hcHAvc2VydmljZXMvbWVtb3J5LmpzIGIvUGVy
Zm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUt
ZXhhbXBsZXMvZW1iZXJqcy9zb3VyY2UvYXBwL3NlcnZpY2VzL21lbW9yeS5qcwpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNzRjNWNkZjE5ZmQ5ZmRiMjZhOTBmMDlhMzAxZDQzZGJkMzUy
N2Q2MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJm
b3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1l
eGFtcGxlcy9lbWJlcmpzL3NvdXJjZS9hcHAvc2VydmljZXMvbWVtb3J5LmpzCisrKyAvZGV2L251
bGwKQEAgLTEsNzggKzAsMCBAQAotKGZ1bmN0aW9uKHJvb3QpIHsKLSAgdmFyIGxvY2FsU3RvcmFn
ZU1lbW9yeSA9IHt9OwotICB2YXIgY2FjaGUgPSB7fTsKLQotICAvKioKLSAgICogbnVtYmVyIG9m
IHN0b3JlZCBpdGVtcy4KLSAgICovCi0gIGxvY2FsU3RvcmFnZU1lbW9yeS5sZW5ndGggPSAwOwot
Ci0gIC8qKgotICAgKiByZXR1cm5zIGl0ZW0gZm9yIHBhc3NlZCBrZXksIG9yIG51bGwKLSAgICoK
LSAgICogQHBhcmEge1N0cmluZ30ga2V5Ci0gICAqICAgICAgIG5hbWUgb2YgaXRlbSB0byBiZSBy
ZXR1cm5lZAotICAgKiBAcmV0dXJucyB7U3RyaW5nfG51bGx9Ci0gICAqLwotICBsb2NhbFN0b3Jh
Z2VNZW1vcnkuZ2V0SXRlbSA9IGZ1bmN0aW9uKGtleSkgewotICAgIHJldHVybiBjYWNoZVtrZXld
IHx8IG51bGw7Ci0gIH07Ci0KLSAgLyoqCi0gICAqIHNldHMgaXRlbSBmb3Iga2V5IHRvIHBhc3Nl
ZCB2YWx1ZSwgYXMgU3RyaW5nCi0gICAqCi0gICAqIEBwYXJhIHtTdHJpbmd9IGtleQotICAgKiAg
ICAgICBuYW1lIG9mIGl0ZW0gdG8gYmUgc2V0Ci0gICAqIEBwYXJhIHtTdHJpbmd9IHZhbHVlCi0g
ICAqICAgICAgIHZhbHVlLCB3aWxsIGFsd2F5cyBiZSB0dXJuZWQgaW50byBhIFN0cmluZwotICAg
KiBAcmV0dXJucyB7dW5kZWZpbmVkfQotICAgKi8KLSAgbG9jYWxTdG9yYWdlTWVtb3J5LnNldEl0
ZW0gPSBmdW5jdGlvbihrZXksIHZhbHVlKSB7Ci0gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3Vu
ZGVmaW5lZCcpIHsKLSAgICAgIGxvY2FsU3RvcmFnZU1lbW9yeS5yZW1vdmVJdGVtKGtleSk7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgIGlmICghKGNhY2hlLmhhc093blByb3BlcnR5KGtleSkpKSB7Ci0g
ICAgICAgIGxvY2FsU3RvcmFnZU1lbW9yeS5sZW5ndGgrKzsKLSAgICAgIH0KLQotICAgICAgY2Fj
aGVba2V5XSA9ICcnICsgdmFsdWU7Ci0gICAgfQotICB9OwotCi0gIC8qKgotICAgKiByZW1vdmVz
IGl0ZW0gZm9yIHBhc3NlZCBrZXkKLSAgICoKLSAgICogQHBhcmEge1N0cmluZ30ga2V5Ci0gICAq
ICAgICAgIG5hbWUgb2YgaXRlbSB0byBiZSByZW1vdmVkCi0gICAqIEByZXR1cm5zIHt1bmRlZmlu
ZWR9Ci0gICAqLwotICBsb2NhbFN0b3JhZ2VNZW1vcnkucmVtb3ZlSXRlbSA9IGZ1bmN0aW9uKGtl
eSkgewotICAgIGlmIChjYWNoZS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7Ci0gICAgICBkZWxldGUg
Y2FjaGVba2V5XTsKLSAgICAgIGxvY2FsU3RvcmFnZU1lbW9yeS5sZW5ndGgtLTsKLSAgICB9Ci0g
IH07Ci0KLSAgLyoqCi0gICAqIHJldHVybnMgbmFtZSBvZiBrZXkgYXQgcGFzc2VkIGluZGV4Ci0g
ICAqCi0gICAqIEBwYXJhIHtOdW1iZXJ9IGluZGV4Ci0gICAqICAgICAgIFBvc2l0aW9uIGZvciBr
ZXkgdG8gYmUgcmV0dXJuZWQgKHN0YXJ0cyBhdCAwKQotICAgKiBAcmV0dXJucyB7U3RyaW5nfG51
bGx9Ci0gICAqLwotICBsb2NhbFN0b3JhZ2VNZW1vcnkua2V5ID0gZnVuY3Rpb24oaW5kZXgpIHsK
LSAgICByZXR1cm4gT2JqZWN0LmtleXMoY2FjaGUpW2luZGV4XSB8fCBudWxsOwotICB9OwotCi0g
IC8qKgotICAgKiByZW1vdmVzIGFsbCBzdG9yZWQgaXRlbXMgYW5kIHNldHMgbGVuZ3RoIHRvIDAK
LSAgICoKLSAgICogQHJldHVybnMge3VuZGVmaW5lZH0KLSAgICovCi0gIGxvY2FsU3RvcmFnZU1l
bW9yeS5jbGVhciA9IGZ1bmN0aW9uKCkgewotICAgIGNhY2hlID0ge307Ci0gICAgbG9jYWxTdG9y
YWdlTWVtb3J5Lmxlbmd0aCA9IDA7Ci0gIH07Ci0KLSAgICByb290LmxvY2FsU3RvcmFnZU1lbW9y
eSA9IGxvY2FsU3RvcmFnZU1lbW9yeTsKLX0pKHdpbmRvdyk7CmRpZmYgLS1naXQgYS9QZXJmb3Jt
YW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFt
cGxlcy9lbWJlcmpzL3NvdXJjZS9hcHAvc2VydmljZXMvcmVwby5qcyBiL1BlcmZvcm1hbmNlVGVz
dHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2Vt
YmVyanMvc291cmNlL2FwcC9zZXJ2aWNlcy9yZXBvLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBjZmZhMzg1OGZkNzdiYmJhNWM0MzVlYTVjOWM4ODk4YWQxNzczYjhhLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMv
U3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVy
anMvc291cmNlL2FwcC9zZXJ2aWNlcy9yZXBvLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAs
MCBAQAotaW1wb3J0IEVtYmVyIGZyb20gJ2VtYmVyJzsKLWltcG9ydCBsb2NhbFN0b3JhZ2VNZW1v
cnkgZnJvbSAnLi9tZW1vcnknOwotCi1leHBvcnQgZGVmYXVsdCBFbWJlci5TZXJ2aWNlLmV4dGVu
ZCh7Ci0gICAgbGFzdElkOiAwLAotICAgIGRhdGE6IG51bGwsCi0gICAgZmluZEFsbCgpIHsKLSAg
ICAgICAgcmV0dXJuIHRoaXMuZ2V0KCdkYXRhJykgfHwKLSAgICAgICAgICAgIHRoaXMuc2V0KCdk
YXRhJywgSlNPTi5wYXJzZSh3aW5kb3cubG9jYWxTdG9yYWdlTWVtb3J5LmdldEl0ZW0oJ3RvZG9z
JykgfHwgJ1tdJykpOwotICAgIH0sCi0KLSAgICBhZGQoYXR0cnMpIHsKLSAgICAgICAgbGV0IHRv
ZG8gPSBPYmplY3QuYXNzaWduKHsgaWQ6IHRoaXMuaW5jcmVtZW50UHJvcGVydHkoJ2xhc3RJZCcp
IH0sIGF0dHJzKTsKLSAgICAgICAgdGhpcy5nZXQoJ2RhdGEnKS5wdXNoT2JqZWN0KHRvZG8pOwot
ICAgICAgICB0aGlzLnBlcnNpc3QoKTsKLSAgICAgICAgcmV0dXJuIHRvZG87Ci0gICAgfSwKLQot
ICAgIGRlbGV0ZSh0b2RvKSB7Ci0gICAgICAgIHRoaXMuZ2V0KCdkYXRhJykucmVtb3ZlT2JqZWN0
KHRvZG8pOwotICAgICAgICB0aGlzLnBlcnNpc3QoKTsKLSAgICB9LAotCi0gICAgcGVyc2lzdCgp
IHsKLSAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZU1lbW9yeS5zZXRJdGVtKCd0b2RvcycsIEpT
T04uc3RyaW5naWZ5KHRoaXMuZ2V0KCdkYXRhJykpKTsKLSAgICB9Ci19KTsKZGlmZiAtLWdpdCBh
L1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0
dXJlLWV4YW1wbGVzL2VtYmVyanMvc291cmNlL2FwcC90ZW1wbGF0ZXMvYWN0aXZlLmhicyBiL1Bl
cmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJl
LWV4YW1wbGVzL2VtYmVyanMvc291cmNlL2FwcC90ZW1wbGF0ZXMvYWN0aXZlLmhicwpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGUyNDRmNDg3ZDIzODM0NDhhNDJhNTlkZjBiZjQyNTY0
ZTIxZjU3My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Q
ZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVy
ZS1leGFtcGxlcy9lbWJlcmpzL3NvdXJjZS9hcHAvdGVtcGxhdGVzL2FjdGl2ZS5oYnMKKysrIC9k
ZXYvbnVsbApAQCAtMSArMCwwIEBACi17e3RvZG8tbGlzdCB0b2Rvcz10b2Rvc319ClwgTm8gbmV3
bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9t
ZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy9zb3Vy
Y2UvYXBwL3RlbXBsYXRlcy9hcHBsaWNhdGlvbi5oYnMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVk
b21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL3Nv
dXJjZS9hcHAvdGVtcGxhdGVzL2FwcGxpY2F0aW9uLmhicwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNTE5YjYyMGNkNjMwMThmNjczZWFhOWE3YjkwOGQ1ODk4YTkyMTU4Zi4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3Rz
L1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJl
cmpzL3NvdXJjZS9hcHAvdGVtcGxhdGVzL2FwcGxpY2F0aW9uLmhicworKysgL2Rldi9udWxsCkBA
IC0xLDI5ICswLDAgQEAKLTxzZWN0aW9uIGlkPSJ0b2RvYXBwIj4KLSAgPGhlYWRlciBpZD0iaGVh
ZGVyIj4KLSAgICA8aDE+dG9kb3M8L2gxPgotICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0ibmV3
LXRvZG8iIG9ua2V5ZG93bj17e2FjdGlvbiAnY3JlYXRlVG9kbyd9fSBwbGFjZWhvbGRlcj0iV2hh
dCBuZWVkcyB0byBiZSBkb25lPyIgYXV0b2ZvY3VzPgotICA8L2hlYWRlcj4KLSAgICB7e291dGxl
dH19Ci0gICAge3sjaWYgKGd0IG1vZGVsLmxlbmd0aCAwKX19Ci0gICAgICA8Zm9vdGVyIGlkPSJm
b290ZXIiPgotICAgICAgICA8c3BhbiBpZD0idG9kby1jb3VudCI+PHN0cm9uZz57e3JlbWFpbmlu
Zy5sZW5ndGh9fTwvc3Ryb25nPiB7e3BsdXJhbGl6ZSAnaXRlbScgcmVtYWluaW5nLmxlbmd0aH19
IGxlZnQ8L3NwYW4+Ci0gICAgICAgIDx1bCBpZD0iZmlsdGVycyI+Ci0gICAgICAgICAgPGxpPnt7
I2xpbmstdG8gImluZGV4IiBhY3RpdmVDbGFzcz0ic2VsZWN0ZWQifX1BbGx7ey9saW5rLXRvfX08
L2xpPgotICAgICAgICAgIDxsaT57eyNsaW5rLXRvICJhY3RpdmUiIGFjdGl2ZUNsYXNzPSJzZWxl
Y3RlZCJ9fUFjdGl2ZXt7L2xpbmstdG99fTwvbGk+Ci0gICAgICAgICAgPGxpPnt7I2xpbmstdG8g
ImNvbXBsZXRlZCIgYWN0aXZlQ2xhc3M9InNlbGVjdGVkIn19Q29tcGxldGVke3svbGluay10b319
PC9saT4KLSAgICAgICAgPC91bD4KLSAgICAgICAge3sjaWYgY29tcGxldGVkLmxlbmd0aH19Ci0g
ICAgICAgICAgPGJ1dHRvbiBpZD0iY2xlYXItY29tcGxldGVkIiBvbmNsaWNrPXt7YWN0aW9uICdj
bGVhckNvbXBsZXRlZCd9fT5DbGVhciBjb21wbGV0ZWQ8L2J1dHRvbj4KLSAgICAgICAge3svaWZ9
fQotICAgICAgPC9mb290ZXI+Ci0gICAge3svaWZ9fQotPC9zZWN0aW9uPgotPGZvb3RlciBpZD0i
aW5mbyI+Ci0gIDxwPkRvdWJsZS1jbGljayB0byBlZGl0IGEgdG9kbzwvcD4KLSAgPHA+Ci0gICAg
Q3JlYXRlZCBieQotICAgIDxhIGhyZWY9Imh0dHA6Ly9naXRodWIuY29tL2NpYmVybm94Ij5NaWd1
ZWwgQ2FtYmE8L2E+LAotICAgIDxhIGhyZWY9Imh0dHA6Ly9naXRodWIuY29tL2FkZHlvc21hbmki
PkFkZHkgT3NtYW5pPC9hPgotICA8L3A+Ci0gIDxwPlBhcnQgb2YgPGEgaHJlZj0iaHR0cDovL3Rv
ZG9tdmMuY29tIj5Ub2RvTVZDPC9hPjwvcD4KLTwvZm9vdGVyPgpcIE5vIG5ld2xpbmUgYXQgZW5k
IG9mIGZpbGUKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3Vy
Y2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvc291cmNlL2FwcC90ZW1w
bGF0ZXMvY29tcGxldGVkLmhicyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3Vy
Y2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvc291cmNlL2FwcC90ZW1w
bGF0ZXMvY29tcGxldGVkLmhicwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGUyNDRm
NDg3ZDIzODM0NDhhNDJhNTlkZjBiZjQyNTY0ZTIxZjU3My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jl
c291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL3NvdXJjZS9hcHAv
dGVtcGxhdGVzL2NvbXBsZXRlZC5oYnMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi17e3Rv
ZG8tbGlzdCB0b2Rvcz10b2Rvc319ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0t
Z2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNo
aXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy9zb3VyY2UvYXBwL3RlbXBsYXRlcy9jb21wb25lbnRz
L3RvZG8taXRlbS5oYnMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90
b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL3NvdXJjZS9hcHAvdGVtcGxhdGVz
L2NvbXBvbmVudHMvdG9kby1pdGVtLmhicwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
YzA2OTc1ZTg2NWU3YjlhMDQyNzg1ZThiMzg5NzdmMzRhYWQzZGJjNi4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21l
dGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL3NvdXJj
ZS9hcHAvdGVtcGxhdGVzL2NvbXBvbmVudHMvdG9kby1pdGVtLmhicworKysgL2Rldi9udWxsCkBA
IC0xLDYgKzAsMCBAQAotPGRpdiBjbGFzcz0idmlldyI+Ci0gIDxpbnB1dCB0eXBlPSJjaGVja2Jv
eCIgY2xhc3M9InRvZ2dsZSIgY2hlY2tlZD17e3RvZG8uY29tcGxldGVkfX0gb25jaGFuZ2U9e3th
Y3Rpb24gJ3RvZ2dsZUNvbXBsZXRlZCd9fT4KLSAgPGxhYmVsIG9uZGJsY2xpY2s9e3thY3Rpb24g
J3N0YXJ0RWRpdGluZyd9fT57e3RvZG8udGl0bGV9fTwvbGFiZWw+Ci0gIDxidXR0b24gb25jbGlj
az17e2FjdGlvbiAncmVtb3ZlVG9kbyd9fSBjbGFzcz0iZGVzdHJveSI+PC9idXR0b24+Ci08L2Rp
dj4KLTxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iZWRpdCIgdmFsdWU9e3t0b2RvLnRpdGxlfX0g
b25ibHVyPXt7YWN0aW9uICdkb25lRWRpdGluZycgdmFsdWU9J3RhcmdldC52YWx1ZSd9fSBvbmtl
eWRvd249e3thY3Rpb24gJ2hhbmRsZUtleWRvd24nfX0gYXV0b2ZvY3VzPgpcIE5vIG5ld2xpbmUg
YXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIv
cmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvc291cmNlL2Fw
cC90ZW1wbGF0ZXMvY29tcG9uZW50cy90b2RvLWxpc3QuaGJzIGIvUGVyZm9ybWFuY2VUZXN0cy9T
cGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJq
cy9zb3VyY2UvYXBwL3RlbXBsYXRlcy9jb21wb25lbnRzL3RvZG8tbGlzdC5oYnMKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwOWQwN2ExZjQxN2NmMWMxODg5MzBjNWNiZmIzM2E3MDUx
Yzc4NjYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVy
Zm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUt
ZXhhbXBsZXMvZW1iZXJqcy9zb3VyY2UvYXBwL3RlbXBsYXRlcy9jb21wb25lbnRzL3RvZG8tbGlz
dC5oYnMKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi17eyNpZiB0b2Rvcy5sZW5ndGh9
fQotICB7eyNpZiBjYW5Ub2dnbGV9fQotICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9InRv
Z2dsZS1hbGwiIGNoZWNrZWQ9e3thbGxDb21wbGV0ZWR9fSBvbmNoYW5nZT17e2FjdGlvbiAndG9n
Z2xlQWxsJ319PgotICB7ey9pZn19Ci0gIDx1bCBpZD0idG9kby1saXN0IiBjbGFzcz0idG9kby1s
aXN0Ij4KLSAgICB7eyNlYWNoIHRvZG9zIGFzIHx0b2RvfH19Ci0gICAgICB7e3RvZG8taXRlbSB0
b2RvPXRvZG8gb25TdGFydEVkaXQ9KGFjdGlvbiAnZGlzYWJsZVRvZ2dsZScpIG9uRW5kRWRpdD0o
YWN0aW9uICdlbmFibGVUb2dnbGUnKX19Ci0gICAge3svZWFjaH19Ci0gIDwvdWw+Ci17ey9pZn19
CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2Rv
bXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL3NvdXJjZS9hcHAvdGVtcGxhdGVzL2lu
ZGV4LmhicyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMv
YXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvc291cmNlL2FwcC90ZW1wbGF0ZXMvaW5kZXgu
aGJzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZDU1NjVjMzZhYjM3ZGVhOWExYzQx
OWRkZWE3NTNiZjE5NThjZDZmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMv
YXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvc291cmNlL2FwcC90ZW1wbGF0ZXMvaW5kZXgu
aGJzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi17eyNpZiBtb2RlbC5sZW5ndGh9fQot
ICB7e3RvZG8tbGlzdCB0b2Rvcz1tb2RlbH19Ci17ey9pZn19CmRpZmYgLS1naXQgYS9QZXJmb3Jt
YW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFt
cGxlcy9lbWJlcmpzL3NvdXJjZS9ib3dlci5qc29uIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9t
ZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy9zb3Vy
Y2UvYm93ZXIuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjVjZWUxNDVhNjBm
MWM4NjEwOWVmMzVjNzExMDE5ZDFlYTM1YTk0Ni4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNl
cy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL3NvdXJjZS9ib3dlci5qc29u
CisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi17Ci0gICJuYW1lIjogInRvZG9tdmMiLAot
ICAiZGVwZW5kZW5jaWVzIjogewotICAgICJlbWJlciI6ICIyLjE0LjEiLAotICAgICJlbWJlci1j
bGktc2hpbXMiOiAiMC4xLjMiCi0gIH0KLX0KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMv
U3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVy
anMvc291cmNlL2NvbmZpZy9lbnZpcm9ubWVudC5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRv
bWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvc291
cmNlL2NvbmZpZy9lbnZpcm9ubWVudC5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
N2QzMGQ5YjljNzFiM2E2NDNkM2VlNjI3MThjZGJmNGE2ODNjNmQ5Zi4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21l
dGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL3NvdXJj
ZS9jb25maWcvZW52aXJvbm1lbnQuanMKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0v
KiBqc2hpbnQgbm9kZTogdHJ1ZSAqLwotCi1tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChlbnZp
cm9ubWVudCkgewotICAgIHZhciBFTlYgPSB7Ci0gICAgICAgIG1vZHVsZVByZWZpeDogJ3RvZG9t
dmMnLAotICAgICAgICBlbnZpcm9ubWVudDogZW52aXJvbm1lbnQsCi0gICAgICAgIGJhc2VVUkw6
IG51bGwsCi0gICAgICAgIGxvY2F0aW9uVHlwZTogJ2hhc2gnLAotICAgICAgICBFbWJlckVOVjog
ewotICAgICAgICAgICAgRkVBVFVSRVM6IHsKLSAgICAgICAgICAgICAgICAvLyBIZXJlIHlvdSBj
YW4gZW5hYmxlIGV4cGVyaW1lbnRhbCBmZWF0dXJlcyBvbiBhbiBlbWJlciBjYW5hcnkgYnVpbGQK
LSAgICAgICAgICAgICAgICAvLyBlLmcuICd3aXRoLWNvbnRyb2xsZXInOiB0cnVlCi0gICAgICAg
ICAgICB9LAotICAgICAgICAgICAgRVhURU5EX1BST1RPVFlQRVM6IHsKLSAgICAgICAgICAgICAg
ICAvLyBQcmV2ZW50IEVtYmVyIERhdGEgZnJvbSBvdmVycmlkaW5nIERhdGUucGFyc2UuCi0gICAg
ICAgICAgICAgICAgRGF0ZTogZmFsc2UKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSwKLQotICAg
ICAgICBBUFA6IHsKLSAgICAgICAgICAgIC8vIEhlcmUgeW91IGNhbiBwYXNzIGZsYWdzL29wdGlv
bnMgdG8geW91ciBhcHBsaWNhdGlvbiBpbnN0YW5jZQotICAgICAgICAgICAgLy8gd2hlbiBpdCBp
cyBjcmVhdGVkCi0gICAgICAgIH0KLSAgICB9OwotCi0gICAgLy8gaWYgKGVudmlyb25tZW50ID09
PSAnZGV2ZWxvcG1lbnQnKSB7Ci0gICAgLy8gICAgIEVOVi5BUFAuTE9HX1JFU09MVkVSID0gdHJ1
ZTsKLSAgICAvLyAgICAgRU5WLkFQUC5MT0dfQUNUSVZFX0dFTkVSQVRJT04gPSB0cnVlOwotICAg
IC8vICAgICBFTlYuQVBQLkxPR19UUkFOU0lUSU9OUyA9IHRydWU7Ci0gICAgLy8gICAgIEVOVi5B
UFAuTE9HX1RSQU5TSVRJT05TX0lOVEVSTkFMID0gdHJ1ZTsKLSAgICAvLyAgICAgRU5WLkFQUC5M
T0dfVklFV19MT09LVVBTID0gdHJ1ZTsKLSAgICAvLyB9Ci0KLSAgICBpZiAoZW52aXJvbm1lbnQg
PT09ICd0ZXN0JykgewotICAgICAgICAvLyBUZXN0ZW0gcHJlZmVycyB0aGlzLi4uCi0gICAgICAg
IEVOVi5yb290VVJMID0gJy8nOwotICAgICAgICBFTlYubG9jYXRpb25UeXBlID0gJ25vbmUnOwot
Ci0gICAgICAgIC8vIGtlZXAgdGVzdCBjb25zb2xlIG91dHB1dCBxdWlldGVyCi0gICAgICAgIEVO
Vi5BUFAuTE9HX0FDVElWRV9HRU5FUkFUSU9OID0gZmFsc2U7Ci0gICAgICAgIEVOVi5BUFAuTE9H
X1ZJRVdfTE9PS1VQUyA9IGZhbHNlOwotCi0gICAgICAgIEVOVi5BUFAucm9vdEVsZW1lbnQgPSAn
I2VtYmVyLXRlc3RpbmcnOwotICAgIH0KLQotICAgIC8vIGlmIChlbnZpcm9ubWVudCA9PT0gJ3By
b2R1Y3Rpb24nKSB7Ci0KLSAgICAvLyB9Ci0KLSAgICByZXR1cm4gRU5WOwotfTsKZGlmZiAtLWdp
dCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0
ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvc291cmNlL2Rpc3QvYXNzZXRzL3RvZG9tdmMtNzYwMWZm
Y2E2MTUwZWQ2MzNmMGYzMzNmZTc2YmZhZjIuanMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21l
dGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL3NvdXJj
ZS9kaXN0L2Fzc2V0cy90b2RvbXZjLTc2MDFmZmNhNjE1MGVkNjMzZjBmMzMzZmU3NmJmYWYyLmpz
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMjVlMmNhMDhhNTYzYjQ5MTlmYTljYTM5
MDg2YTRhNGEwYjhmZWExLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJj
aGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvc291cmNlL2Rpc3QvYXNzZXRzL3RvZG9tdmMtNzYw
MWZmY2E2MTUwZWQ2MzNmMGYzMzNmZTc2YmZhZjIuanMKKysrIC9kZXYvbnVsbApAQCAtMSwzMCAr
MCwwIEBACi0idXNlIHN0cmljdCIKLWRlZmluZSgidG9kb212Yy9hcHAiLFsiZXhwb3J0cyIsImVt
YmVyIiwidG9kb212Yy9yZXNvbHZlciIsImVtYmVyLWxvYWQtaW5pdGlhbGl6ZXJzIiwidG9kb212
Yy9jb25maWcvZW52aXJvbm1lbnQiXSxmdW5jdGlvbihlLHQsbyxuLGwpe3ZhciBpPXZvaWQgMAot
dC5kZWZhdWx0Lk1PREVMX0ZBQ1RPUllfSU5KRUNUSU9OUz0hMCxpPXQuZGVmYXVsdC5BcHBsaWNh
dGlvbi5leHRlbmQoe21vZHVsZVByZWZpeDpsLmRlZmF1bHQubW9kdWxlUHJlZml4LHBvZE1vZHVs
ZVByZWZpeDpsLmRlZmF1bHQucG9kTW9kdWxlUHJlZml4LFJlc29sdmVyOm8uZGVmYXVsdH0pLCgw
LG4uZGVmYXVsdCkoaSxsLmRlZmF1bHQubW9kdWxlUHJlZml4KSxlLmRlZmF1bHQ9aX0pLGRlZmlu
ZSgidG9kb212Yy9jb21wb25lbnRzL3RvZG8taXRlbSIsWyJleHBvcnRzIiwiZW1iZXIiXSxmdW5j
dGlvbihlLHQpe2UuZGVmYXVsdD10LmRlZmF1bHQuQ29tcG9uZW50LmV4dGVuZCh7cmVwbzp0LmRl
ZmF1bHQuaW5qZWN0LnNlcnZpY2UoKSx0YWdOYW1lOiJsaSIsZWRpdGluZzohMSxjbGFzc05hbWVC
aW5kaW5nczpbInRvZG8uY29tcGxldGVkIiwiZWRpdGluZyJdLGFjdGlvbnM6e3N0YXJ0RWRpdGlu
ZzpmdW5jdGlvbigpe3RoaXMuZ2V0KCJvblN0YXJ0RWRpdCIpKCksdGhpcy5zZXQoImVkaXRpbmci
LCEwKSx0LmRlZmF1bHQucnVuLnNjaGVkdWxlT25jZSgiYWZ0ZXJSZW5kZXIiLHRoaXMsImZvY3Vz
SW5wdXQiKX0sZG9uZUVkaXRpbmc6ZnVuY3Rpb24oZSl7dGhpcy5nZXQoImVkaXRpbmciKSYmKHQu
ZGVmYXVsdC5pc0JsYW5rKGUpP3RoaXMuc2VuZCgicmVtb3ZlVG9kbyIpOih0aGlzLnNldCgidG9k
by50aXRsZSIsZS50cmltKCkpLHRoaXMuc2V0KCJlZGl0aW5nIiwhMSksdGhpcy5nZXQoIm9uRW5k
RWRpdCIpKCkpKX0saGFuZGxlS2V5ZG93bjpmdW5jdGlvbihlKXsxMz09PWUua2V5Q29kZT9lLnRh
cmdldC5ibHVyKCk6Mjc9PT1lLmtleUNvZGUmJnRoaXMuc2V0KCJlZGl0aW5nIiwhMSl9LHRvZ2ds
ZUNvbXBsZXRlZDpmdW5jdGlvbihlKXt2YXIgbz10aGlzLmdldCgidG9kbyIpCi10LmRlZmF1bHQu
c2V0KG8sImNvbXBsZXRlZCIsZS50YXJnZXQuY2hlY2tlZCksdGhpcy5nZXQoInJlcG8iKS5wZXJz
aXN0KCl9LHJlbW92ZVRvZG86ZnVuY3Rpb24oKXt0aGlzLmdldCgicmVwbyIpLmRlbGV0ZSh0aGlz
LmdldCgidG9kbyIpKX19LGZvY3VzSW5wdXQ6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQucXVlcnlT
ZWxlY3RvcigiaW5wdXQuZWRpdCIpLmZvY3VzKCl9fSl9KSxkZWZpbmUoInRvZG9tdmMvY29tcG9u
ZW50cy90b2RvLWxpc3QiLFsiZXhwb3J0cyIsImVtYmVyIl0sZnVuY3Rpb24oZSx0KXtlLmRlZmF1
bHQ9dC5kZWZhdWx0LkNvbXBvbmVudC5leHRlbmQoe3JlcG86dC5kZWZhdWx0LmluamVjdC5zZXJ2
aWNlKCksdGFnTmFtZToic2VjdGlvbiIsZWxlbWVudElkOiJtYWluIixjYW5Ub2dnbGU6ITAsYWxs
Q29tcGxldGVkOnQuZGVmYXVsdC5jb21wdXRlZCgidG9kb3MuQGVhY2guY29tcGxldGVkIixmdW5j
dGlvbigpe3JldHVybiB0aGlzLmdldCgidG9kb3MiKS5pc0V2ZXJ5KCJjb21wbGV0ZWQiKX0pLGFj
dGlvbnM6e2VuYWJsZVRvZ2dsZTpmdW5jdGlvbigpe3RoaXMuc2V0KCJjYW5Ub2dnbGUiLCEwKX0s
ZGlzYWJsZVRvZ2dsZTpmdW5jdGlvbigpe3RoaXMuc2V0KCJjYW5Ub2dnbGUiLCExKX0sdG9nZ2xl
QWxsOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nZXQoImFsbENvbXBsZXRlZCIpCi10aGlzLmdldCgi
dG9kb3MiKS5mb3JFYWNoKGZ1bmN0aW9uKG8pe3JldHVybiB0LmRlZmF1bHQuc2V0KG8sImNvbXBs
ZXRlZCIsIWUpfSksdGhpcy5nZXQoInJlcG8iKS5wZXJzaXN0KCl9fX0pfSksZGVmaW5lKCJ0b2Rv
bXZjL2NvbnRyb2xsZXJzL2FjdGl2ZSIsWyJleHBvcnRzIiwiZW1iZXIiXSxmdW5jdGlvbihlLHQp
e2UuZGVmYXVsdD10LmRlZmF1bHQuQ29udHJvbGxlci5leHRlbmQoe3RvZG9zOnQuZGVmYXVsdC5j
b21wdXRlZC5maWx0ZXJCeSgibW9kZWwiLCJjb21wbGV0ZWQiLCExKX0pfSksZGVmaW5lKCJ0b2Rv
bXZjL2NvbnRyb2xsZXJzL2FwcGxpY2F0aW9uIixbImV4cG9ydHMiLCJlbWJlciJdLGZ1bmN0aW9u
KGUsdCl7ZS5kZWZhdWx0PXQuZGVmYXVsdC5Db250cm9sbGVyLmV4dGVuZCh7cmVwbzp0LmRlZmF1
bHQuaW5qZWN0LnNlcnZpY2UoKSxyZW1haW5pbmc6dC5kZWZhdWx0LmNvbXB1dGVkLmZpbHRlckJ5
KCJtb2RlbCIsImNvbXBsZXRlZCIsITEpLGNvbXBsZXRlZDp0LmRlZmF1bHQuY29tcHV0ZWQuZmls
dGVyQnkoIm1vZGVsIiwiY29tcGxldGVkIiksYWN0aW9uczp7Y3JlYXRlVG9kbzpmdW5jdGlvbihl
KXsxMyE9PWUua2V5Q29kZXx8dC5kZWZhdWx0LmlzQmxhbmsoZS50YXJnZXQudmFsdWUpfHwodGhp
cy5nZXQoInJlcG8iKS5hZGQoe3RpdGxlOmUudGFyZ2V0LnZhbHVlLnRyaW0oKSxjb21wbGV0ZWQ6
ITF9KSxlLnRhcmdldC52YWx1ZT0iIil9LGNsZWFyQ29tcGxldGVkOmZ1bmN0aW9uKCl7dGhpcy5n
ZXQoIm1vZGVsIikucmVtb3ZlT2JqZWN0cyh0aGlzLmdldCgiY29tcGxldGVkIikpLHRoaXMuZ2V0
KCJyZXBvIikucGVyc2lzdCgpfX19KX0pLGRlZmluZSgidG9kb212Yy9jb250cm9sbGVycy9jb21w
bGV0ZWQiLFsiZXhwb3J0cyIsImVtYmVyIl0sZnVuY3Rpb24oZSx0KXtlLmRlZmF1bHQ9dC5kZWZh
dWx0LkNvbnRyb2xsZXIuZXh0ZW5kKHt0b2Rvczp0LmRlZmF1bHQuY29tcHV0ZWQuZmlsdGVyQnko
Im1vZGVsIiwiY29tcGxldGVkIiwhMCl9KX0pLGRlZmluZSgidG9kb212Yy9oZWxwZXJzL2FwcC12
ZXJzaW9uIixbImV4cG9ydHMiLCJlbWJlciIsInRvZG9tdmMvY29uZmlnL2Vudmlyb25tZW50Iiwi
ZW1iZXItY2xpLWFwcC12ZXJzaW9uL3V0aWxzL3JlZ2V4cCJdLGZ1bmN0aW9uKGUsdCxvLG4pe2Z1
bmN0aW9uIGwoZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aDw9MXx8dm9pZCAwPT09YXJndW1lbnRz
WzFdP3t9OmFyZ3VtZW50c1sxXQotcmV0dXJuIHQuaGlkZVNoYT9pLm1hdGNoKG4udmVyc2lvblJl
Z0V4cClbMF06dC5oaWRlVmVyc2lvbj9pLm1hdGNoKG4uc2hhUmVnRXhwKVswXTppfWUuYXBwVmVy
c2lvbj1sCi12YXIgaT1vLmRlZmF1bHQuQVBQLnZlcnNpb24KLWUuZGVmYXVsdD10LmRlZmF1bHQu
SGVscGVyLmhlbHBlcihsKX0pLGRlZmluZSgidG9kb212Yy9oZWxwZXJzL2d0IixbImV4cG9ydHMi
LCJlbWJlciJdLGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbyhlKXt2YXIgdD1uKGUsMikKLXJldHVy
biB0WzBdPnRbMV19dmFyIG49ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dmFyIG89W10sbj0h
MCxsPSExLGk9dm9pZCAwCi10cnl7Zm9yKHZhciBhLGQ9ZVtTeW1ib2wuaXRlcmF0b3JdKCk7IShu
PShhPWQubmV4dCgpKS5kb25lKSYmKG8ucHVzaChhLnZhbHVlKSwhdHx8by5sZW5ndGghPT10KTtu
PSEwKTt9Y2F0Y2goZSl7bD0hMCxpPWV9ZmluYWxseXt0cnl7IW4mJmQucmV0dXJuJiZkLnJldHVy
bigpfWZpbmFsbHl7aWYobCl0aHJvdyBpfX1yZXR1cm4gb31yZXR1cm4gZnVuY3Rpb24odCxvKXtp
ZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB0Ci1pZihTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0
KHQpKXJldHVybiBlKHQsbykKLXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0
byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UiKX19KCkKLWUuZ3Q9byxlLmRlZmF1
bHQ9dC5kZWZhdWx0LkhlbHBlci5oZWxwZXIobyl9KSxkZWZpbmUoInRvZG9tdmMvaGVscGVycy9w
bHVyYWxpemUiLFsiZXhwb3J0cyIsImVtYmVyIiwiZW1iZXItaW5mbGVjdG9yIl0sZnVuY3Rpb24o
ZSx0LG8pe2Z1bmN0aW9uIG4oZSl7dmFyIHQ9bChlLDIpLG49dFswXQotcmV0dXJuIDE9PT10WzFd
P246KDAsby5wbHVyYWxpemUpKG4pfXZhciBsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3Zh
ciBvPVtdLG49ITAsbD0hMSxpPXZvaWQgMAotdHJ5e2Zvcih2YXIgYSxkPWVbU3ltYm9sLml0ZXJh
dG9yXSgpOyEobj0oYT1kLm5leHQoKSkuZG9uZSkmJihvLnB1c2goYS52YWx1ZSksIXR8fG8ubGVu
Z3RoIT09dCk7bj0hMCk7fWNhdGNoKGUpe2w9ITAsaT1lfWZpbmFsbHl7dHJ5eyFuJiZkLnJldHVy
biYmZC5yZXR1cm4oKX1maW5hbGx5e2lmKGwpdGhyb3cgaX19cmV0dXJuIG99cmV0dXJuIGZ1bmN0
aW9uKHQsbyl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gdAotaWYoU3ltYm9sLml0ZXJhdG9y
IGluIE9iamVjdCh0KSlyZXR1cm4gZSh0LG8pCi10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlk
IGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlIil9fSgpCi1lLnBs
dXJhbGl6ZUhlbHBlcj1uLGUuZGVmYXVsdD10LmRlZmF1bHQuSGVscGVyLmhlbHBlcihuKX0pLGRl
ZmluZSgidG9kb212Yy9oZWxwZXJzL3Npbmd1bGFyaXplIixbImV4cG9ydHMiLCJlbWJlci1pbmZs
ZWN0b3IvbGliL2hlbHBlcnMvc2luZ3VsYXJpemUiXSxmdW5jdGlvbihlLHQpe2UuZGVmYXVsdD10
LmRlZmF1bHR9KSxkZWZpbmUoInRvZG9tdmMvaW5pdGlhbGl6ZXJzL2FwcC12ZXJzaW9uIixbImV4
cG9ydHMiLCJlbWJlci1jbGktYXBwLXZlcnNpb24vaW5pdGlhbGl6ZXItZmFjdG9yeSIsInRvZG9t
dmMvY29uZmlnL2Vudmlyb25tZW50Il0sZnVuY3Rpb24oZSx0LG8pe3ZhciBuPW8uZGVmYXVsdC5B
UFAsbD1uLm5hbWUsaT1uLnZlcnNpb24KLWUuZGVmYXVsdD17bmFtZToiQXBwIFZlcnNpb24iLGlu
aXRpYWxpemU6KDAsdC5kZWZhdWx0KShsLGkpfX0pLGRlZmluZSgidG9kb212Yy9pbml0aWFsaXpl
cnMvY29udGFpbmVyLWRlYnVnLWFkYXB0ZXIiLFsiZXhwb3J0cyIsImVtYmVyLXJlc29sdmVyL2Nv
bnRhaW5lci1kZWJ1Zy1hZGFwdGVyIl0sZnVuY3Rpb24oZSx0KXtlLmRlZmF1bHQ9e25hbWU6ImNv
bnRhaW5lci1kZWJ1Zy1hZGFwdGVyIixpbml0aWFsaXplOmZ1bmN0aW9uKCl7dmFyIGU9YXJndW1l
bnRzWzFdfHxhcmd1bWVudHNbMF0KLWUucmVnaXN0ZXIoImNvbnRhaW5lci1kZWJ1Zy1hZGFwdGVy
Om1haW4iLHQuZGVmYXVsdCksZS5pbmplY3QoImNvbnRhaW5lci1kZWJ1Zy1hZGFwdGVyOm1haW4i
LCJuYW1lc3BhY2UiLCJhcHBsaWNhdGlvbjptYWluIil9fX0pLGRlZmluZSgidG9kb212Yy9pbml0
aWFsaXplcnMvZXhwb3J0LWFwcGxpY2F0aW9uLWdsb2JhbCIsWyJleHBvcnRzIiwiZW1iZXIiLCJ0
b2RvbXZjL2NvbmZpZy9lbnZpcm9ubWVudCJdLGZ1bmN0aW9uKGUsdCxvKXtmdW5jdGlvbiBuKCl7
dmFyIGU9YXJndW1lbnRzWzFdfHxhcmd1bWVudHNbMF0KLWlmKCExIT09by5kZWZhdWx0LmV4cG9y
dEFwcGxpY2F0aW9uR2xvYmFsKXt2YXIgbgotaWYoInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cp
bj13aW5kb3cKLWVsc2UgaWYoInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWwpbj1nbG9iYWwKLWVs
c2V7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBzZWxmKXJldHVybgotbj1zZWxmfXZhciBsLGk9by5k
ZWZhdWx0LmV4cG9ydEFwcGxpY2F0aW9uR2xvYmFsCi1sPSJzdHJpbmciPT10eXBlb2YgaT9pOnQu
ZGVmYXVsdC5TdHJpbmcuY2xhc3NpZnkoby5kZWZhdWx0Lm1vZHVsZVByZWZpeCksbltsXXx8KG5b
bF09ZSxlLnJlb3Blbih7d2lsbERlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLl9zdXBlci5hcHBseSh0
aGlzLGFyZ3VtZW50cyksZGVsZXRlIG5bbF19fSkpfX1lLmluaXRpYWxpemU9bixlLmRlZmF1bHQ9
e25hbWU6ImV4cG9ydC1hcHBsaWNhdGlvbi1nbG9iYWwiLGluaXRpYWxpemU6bn19KSxkZWZpbmUo
InRvZG9tdmMvcmVzb2x2ZXIiLFsiZXhwb3J0cyIsImVtYmVyLXJlc29sdmVyIl0sZnVuY3Rpb24o
ZSx0KXtlLmRlZmF1bHQ9dC5kZWZhdWx0fSksZGVmaW5lKCJ0b2RvbXZjL3JvdXRlciIsWyJleHBv
cnRzIiwiZW1iZXIiLCJ0b2RvbXZjL2NvbmZpZy9lbnZpcm9ubWVudCJdLGZ1bmN0aW9uKGUsdCxv
KXt2YXIgbj10LmRlZmF1bHQuUm91dGVyLmV4dGVuZCh7bG9jYXRpb246by5kZWZhdWx0LmxvY2F0
aW9uVHlwZSxyb290VVJMOm8uZGVmYXVsdC5yb290VVJMfSkKLW4ubWFwKGZ1bmN0aW9uKCl7dGhp
cy5yb3V0ZSgiYWN0aXZlIiksdGhpcy5yb3V0ZSgiY29tcGxldGVkIil9KSxlLmRlZmF1bHQ9bn0p
LGRlZmluZSgidG9kb212Yy9yb3V0ZXMvYXBwbGljYXRpb24iLFsiZXhwb3J0cyIsImVtYmVyIl0s
ZnVuY3Rpb24oZSx0KXtlLmRlZmF1bHQ9dC5kZWZhdWx0LlJvdXRlLmV4dGVuZCh7cmVwbzp0LmRl
ZmF1bHQuaW5qZWN0LnNlcnZpY2UoKSxtb2RlbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldCgi
cmVwbyIpLmZpbmRBbGwoKX19KX0pLGRlZmluZSgidG9kb212Yy9zZXJ2aWNlcy9hamF4IixbImV4
cG9ydHMiLCJlbWJlci1hamF4L3NlcnZpY2VzL2FqYXgiXSxmdW5jdGlvbihlLHQpe09iamVjdC5k
ZWZpbmVQcm9wZXJ0eShlLCJkZWZhdWx0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXty
ZXR1cm4gdC5kZWZhdWx0fX0pfSksZGVmaW5lKCJ0b2RvbXZjL3NlcnZpY2VzL21lbW9yeSIsWyJl
eHBvcnRzIl0sZnVuY3Rpb24oZSl7KGZ1bmN0aW9uKGUpe3ZhciB0PXt9LG89e30KLXQubGVuZ3Ro
PTAsdC5nZXRJdGVtPWZ1bmN0aW9uKGUpe3JldHVybiBvW2VdfHxudWxsfSx0LnNldEl0ZW09ZnVu
Y3Rpb24oZSxuKXt2b2lkIDA9PT1uP3QucmVtb3ZlSXRlbShlKTooby5oYXNPd25Qcm9wZXJ0eShl
KXx8dC5sZW5ndGgrKyxvW2VdPSIiK24pfSx0LnJlbW92ZUl0ZW09ZnVuY3Rpb24oZSl7by5oYXNP
d25Qcm9wZXJ0eShlKSYmKGRlbGV0ZSBvW2VdLHQubGVuZ3RoLS0pfSx0LmtleT1mdW5jdGlvbihl
KXtyZXR1cm4gT2JqZWN0LmtleXMobylbZV18fG51bGx9LHQuY2xlYXI9ZnVuY3Rpb24oKXtvPXt9
LHQubGVuZ3RoPTB9LGUubG9jYWxTdG9yYWdlTWVtb3J5PXR9KSh3aW5kb3cpfSksZGVmaW5lKCJ0
b2RvbXZjL3NlcnZpY2VzL3JlcG8iLFsiZXhwb3J0cyIsImVtYmVyIiwidG9kb212Yy9zZXJ2aWNl
cy9tZW1vcnkiXSxmdW5jdGlvbihlLHQsbyl7ZS5kZWZhdWx0PXQuZGVmYXVsdC5TZXJ2aWNlLmV4
dGVuZCh7bGFzdElkOjAsZGF0YTpudWxsLGZpbmRBbGw6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5n
ZXQoImRhdGEiKXx8dGhpcy5zZXQoImRhdGEiLEpTT04ucGFyc2Uod2luZG93LmxvY2FsU3RvcmFn
ZU1lbW9yeS5nZXRJdGVtKCJ0b2RvcyIpfHwiW10iKSl9LGFkZDpmdW5jdGlvbihlKXt2YXIgdD1P
YmplY3QuYXNzaWduKHtpZDp0aGlzLmluY3JlbWVudFByb3BlcnR5KCJsYXN0SWQiKX0sZSkKLXJl
dHVybiB0aGlzLmdldCgiZGF0YSIpLnB1c2hPYmplY3QodCksdGhpcy5wZXJzaXN0KCksdH0sZGVs
ZXRlOmZ1bmN0aW9uKGUpe3RoaXMuZ2V0KCJkYXRhIikucmVtb3ZlT2JqZWN0KGUpLHRoaXMucGVy
c2lzdCgpfSxwZXJzaXN0OmZ1bmN0aW9uKCl7d2luZG93LmxvY2FsU3RvcmFnZU1lbW9yeS5zZXRJ
dGVtKCJ0b2RvcyIsSlNPTi5zdHJpbmdpZnkodGhpcy5nZXQoImRhdGEiKSkpfX0pfSksZGVmaW5l
KCJ0b2RvbXZjL3RlbXBsYXRlcy9hY3RpdmUiLFsiZXhwb3J0cyJdLGZ1bmN0aW9uKGUpe2UuZGVm
YXVsdD1FbWJlci5IVE1MQmFycy50ZW1wbGF0ZSh7aWQ6ImFBc2M0THQ4IixibG9jazoneyJzdGF0
ZW1lbnRzIjpbWzEsWzMzLFsidG9kby1saXN0Il0sbnVsbCxbWyJ0b2RvcyJdLFtbMjgsWyJ0b2Rv
cyJdXV1dXSxmYWxzZV1dLCJsb2NhbHMiOltdLCJuYW1lZCI6W10sInlpZWxkcyI6W10sImhhc1Bh
cnRpYWxzIjpmYWxzZX0nLG1ldGE6e21vZHVsZU5hbWU6InRvZG9tdmMvdGVtcGxhdGVzL2FjdGl2
ZS5oYnMifX0pfSksZGVmaW5lKCJ0b2RvbXZjL3RlbXBsYXRlcy9hcHBsaWNhdGlvbiIsWyJleHBv
cnRzIl0sZnVuY3Rpb24oZSl7ZS5kZWZhdWx0PUVtYmVyLkhUTUxCYXJzLnRlbXBsYXRlKHtpZDoi
QllueXo1T04iLGJsb2NrOid7InN0YXRlbWVudHMiOltbMTEsInNlY3Rpb24iLFtdXSxbMTUsImlk
IiwidG9kb2FwcCJdLFsxM10sWzAsIlxcbiAgIl0sWzExLCJoZWFkZXIiLFtdXSxbMTUsImlkIiwi
aGVhZGVyIl0sWzEzXSxbMCwiXFxuICAgICJdLFsxMSwiaDEiLFtdXSxbMTNdLFswLCJ0b2RvcyJd
LFsxNF0sWzAsIlxcbiAgICAiXSxbMTEsImlucHV0IixbXV0sWzE1LCJ0eXBlIiwidGV4dCJdLFsx
NSwiaWQiLCJuZXctdG9kbyJdLFsxNiwib25rZXlkb3duIixbMzMsWyJhY3Rpb24iXSxbWzI4LFtu
dWxsXV0sImNyZWF0ZVRvZG8iXSxudWxsXSxudWxsXSxbMTUsInBsYWNlaG9sZGVyIiwiV2hhdCBu
ZWVkcyB0byBiZSBkb25lPyJdLFsxNSwiYXV0b2ZvY3VzIiwiIl0sWzEzXSxbMTRdLFswLCJcXG4g
ICJdLFsxNF0sWzAsIlxcbiAgICAiXSxbMSxbMjYsWyJvdXRsZXQiXV0sZmFsc2VdLFswLCJcXG4i
XSxbNixbImlmIl0sW1szMyxbImd0Il0sW1syOCxbIm1vZGVsIiwibGVuZ3RoIl1dLDBdLG51bGxd
XSxudWxsLHsic3RhdGVtZW50cyI6W1swLCIgICAgICAiXSxbMTEsImZvb3RlciIsW11dLFsxNSwi
aWQiLCJmb290ZXIiXSxbMTNdLFswLCJcXG4gICAgICAgICJdLFsxMSwic3BhbiIsW11dLFsxNSwi
aWQiLCJ0b2RvLWNvdW50Il0sWzEzXSxbMTEsInN0cm9uZyIsW11dLFsxM10sWzEsWzI4LFsicmVt
YWluaW5nIiwibGVuZ3RoIl1dLGZhbHNlXSxbMTRdLFswLCIgIl0sWzEsWzMzLFsicGx1cmFsaXpl
Il0sWyJpdGVtIixbMjgsWyJyZW1haW5pbmciLCJsZW5ndGgiXV1dLG51bGxdLGZhbHNlXSxbMCwi
IGxlZnQiXSxbMTRdLFswLCJcXG4gICAgICAgICJdLFsxMSwidWwiLFtdXSxbMTUsImlkIiwiZmls
dGVycyJdLFsxM10sWzAsIlxcbiAgICAgICAgICAiXSxbMTEsImxpIixbXV0sWzEzXSxbNixbImxp
bmstdG8iXSxbImluZGV4Il0sW1siYWN0aXZlQ2xhc3MiXSxbInNlbGVjdGVkIl1dLHsic3RhdGVt
ZW50cyI6W1swLCJBbGwiXV0sImxvY2FscyI6W119LG51bGxdLFsxNF0sWzAsIlxcbiAgICAgICAg
ICAiXSxbMTEsImxpIixbXV0sWzEzXSxbNixbImxpbmstdG8iXSxbImFjdGl2ZSJdLFtbImFjdGl2
ZUNsYXNzIl0sWyJzZWxlY3RlZCJdXSx7InN0YXRlbWVudHMiOltbMCwiQWN0aXZlIl1dLCJsb2Nh
bHMiOltdfSxudWxsXSxbMTRdLFswLCJcXG4gICAgICAgICAgIl0sWzExLCJsaSIsW11dLFsxM10s
WzYsWyJsaW5rLXRvIl0sWyJjb21wbGV0ZWQiXSxbWyJhY3RpdmVDbGFzcyJdLFsic2VsZWN0ZWQi
XV0seyJzdGF0ZW1lbnRzIjpbWzAsIkNvbXBsZXRlZCJdXSwibG9jYWxzIjpbXX0sbnVsbF0sWzE0
XSxbMCwiXFxuICAgICAgICAiXSxbMTRdLFswLCJcXG4iXSxbNixbImlmIl0sW1syOCxbImNvbXBs
ZXRlZCIsImxlbmd0aCJdXV0sbnVsbCx7InN0YXRlbWVudHMiOltbMCwiICAgICAgICAgICJdLFsx
MSwiYnV0dG9uIixbXV0sWzE1LCJpZCIsImNsZWFyLWNvbXBsZXRlZCJdLFsxNiwib25jbGljayIs
WzMzLFsiYWN0aW9uIl0sW1syOCxbbnVsbF1dLCJjbGVhckNvbXBsZXRlZCJdLG51bGxdLG51bGxd
LFsxM10sWzAsIkNsZWFyIGNvbXBsZXRlZCJdLFsxNF0sWzAsIlxcbiJdXSwibG9jYWxzIjpbXX0s
bnVsbF0sWzAsIiAgICAgICJdLFsxNF0sWzAsIlxcbiJdXSwibG9jYWxzIjpbXX0sbnVsbF0sWzE0
XSxbMCwiXFxuIl0sWzExLCJmb290ZXIiLFtdXSxbMTUsImlkIiwiaW5mbyJdLFsxM10sWzAsIlxc
biAgIl0sWzExLCJwIixbXV0sWzEzXSxbMCwiRG91YmxlLWNsaWNrIHRvIGVkaXQgYSB0b2RvIl0s
WzE0XSxbMCwiXFxuICAiXSxbMTEsInAiLFtdXSxbMTNdLFswLCJcXG4gICAgQ3JlYXRlZCBieVxc
biAgICAiXSxbMTEsImEiLFtdXSxbMTUsImhyZWYiLCJodHRwOi8vZ2l0aHViLmNvbS9jaWJlcm5v
eCJdLFsxM10sWzAsIk1pZ3VlbCBDYW1iYSJdLFsxNF0sWzAsIixcXG4gICAgIl0sWzExLCJhIixb
XV0sWzE1LCJocmVmIiwiaHR0cDovL2dpdGh1Yi5jb20vYWRkeW9zbWFuaSJdLFsxM10sWzAsIkFk
ZHkgT3NtYW5pIl0sWzE0XSxbMCwiXFxuICAiXSxbMTRdLFswLCJcXG4gICJdLFsxMSwicCIsW11d
LFsxM10sWzAsIlBhcnQgb2YgIl0sWzExLCJhIixbXV0sWzE1LCJocmVmIiwiaHR0cDovL3RvZG9t
dmMuY29tIl0sWzEzXSxbMCwiVG9kb01WQyJdLFsxNF0sWzE0XSxbMCwiXFxuIl0sWzE0XV0sImxv
Y2FscyI6W10sIm5hbWVkIjpbXSwieWllbGRzIjpbXSwiaGFzUGFydGlhbHMiOmZhbHNlfScsbWV0
YTp7bW9kdWxlTmFtZToidG9kb212Yy90ZW1wbGF0ZXMvYXBwbGljYXRpb24uaGJzIn19KX0pLGRl
ZmluZSgidG9kb212Yy90ZW1wbGF0ZXMvY29tcGxldGVkIixbImV4cG9ydHMiXSxmdW5jdGlvbihl
KXtlLmRlZmF1bHQ9RW1iZXIuSFRNTEJhcnMudGVtcGxhdGUoe2lkOiJGNGxhOXd0YiIsYmxvY2s6
J3sic3RhdGVtZW50cyI6W1sxLFszMyxbInRvZG8tbGlzdCJdLG51bGwsW1sidG9kb3MiXSxbWzI4
LFsidG9kb3MiXV1dXV0sZmFsc2VdXSwibG9jYWxzIjpbXSwibmFtZWQiOltdLCJ5aWVsZHMiOltd
LCJoYXNQYXJ0aWFscyI6ZmFsc2V9JyxtZXRhOnttb2R1bGVOYW1lOiJ0b2RvbXZjL3RlbXBsYXRl
cy9jb21wbGV0ZWQuaGJzIn19KX0pLGRlZmluZSgidG9kb212Yy90ZW1wbGF0ZXMvY29tcG9uZW50
cy90b2RvLWl0ZW0iLFsiZXhwb3J0cyJdLGZ1bmN0aW9uKGUpe2UuZGVmYXVsdD1FbWJlci5IVE1M
QmFycy50ZW1wbGF0ZSh7aWQ6ImRRMytjSzVFIixibG9jazoneyJzdGF0ZW1lbnRzIjpbWzExLCJk
aXYiLFtdXSxbMTUsImNsYXNzIiwidmlldyJdLFsxM10sWzAsIlxcbiAgIl0sWzExLCJpbnB1dCIs
W11dLFsxNSwidHlwZSIsImNoZWNrYm94Il0sWzE1LCJjbGFzcyIsInRvZ2dsZSJdLFsxNiwiY2hl
Y2tlZCIsWzI4LFsidG9kbyIsImNvbXBsZXRlZCJdXSxudWxsXSxbMTYsIm9uY2hhbmdlIixbMzMs
WyJhY3Rpb24iXSxbWzI4LFtudWxsXV0sInRvZ2dsZUNvbXBsZXRlZCJdLG51bGxdLG51bGxdLFsx
M10sWzE0XSxbMCwiXFxuICAiXSxbMTEsImxhYmVsIixbXV0sWzE2LCJvbmRibGNsaWNrIixbMzMs
WyJhY3Rpb24iXSxbWzI4LFtudWxsXV0sInN0YXJ0RWRpdGluZyJdLG51bGxdLG51bGxdLFsxM10s
WzEsWzI4LFsidG9kbyIsInRpdGxlIl1dLGZhbHNlXSxbMTRdLFswLCJcXG4gICJdLFsxMSwiYnV0
dG9uIixbXV0sWzE2LCJvbmNsaWNrIixbMzMsWyJhY3Rpb24iXSxbWzI4LFtudWxsXV0sInJlbW92
ZVRvZG8iXSxudWxsXSxudWxsXSxbMTUsImNsYXNzIiwiZGVzdHJveSJdLFsxM10sWzE0XSxbMCwi
XFxuIl0sWzE0XSxbMCwiXFxuIl0sWzExLCJpbnB1dCIsW11dLFsxNSwidHlwZSIsInRleHQiXSxb
MTUsImNsYXNzIiwiZWRpdCJdLFsxNiwidmFsdWUiLFsyOCxbInRvZG8iLCJ0aXRsZSJdXSxudWxs
XSxbMTYsIm9uYmx1ciIsWzMzLFsiYWN0aW9uIl0sW1syOCxbbnVsbF1dLCJkb25lRWRpdGluZyJd
LFtbInZhbHVlIl0sWyJ0YXJnZXQudmFsdWUiXV1dLG51bGxdLFsxNiwib25rZXlkb3duIixbMzMs
WyJhY3Rpb24iXSxbWzI4LFtudWxsXV0sImhhbmRsZUtleWRvd24iXSxudWxsXSxudWxsXSxbMTUs
ImF1dG9mb2N1cyIsIiJdLFsxM10sWzE0XV0sImxvY2FscyI6W10sIm5hbWVkIjpbXSwieWllbGRz
IjpbXSwiaGFzUGFydGlhbHMiOmZhbHNlfScsbWV0YTp7bW9kdWxlTmFtZToidG9kb212Yy90ZW1w
bGF0ZXMvY29tcG9uZW50cy90b2RvLWl0ZW0uaGJzIn19KX0pLGRlZmluZSgidG9kb212Yy90ZW1w
bGF0ZXMvY29tcG9uZW50cy90b2RvLWxpc3QiLFsiZXhwb3J0cyJdLGZ1bmN0aW9uKGUpe2UuZGVm
YXVsdD1FbWJlci5IVE1MQmFycy50ZW1wbGF0ZSh7aWQ6IlhHbVdXRDYzIixibG9jazoneyJzdGF0
ZW1lbnRzIjpbWzYsWyJpZiJdLFtbMjgsWyJ0b2RvcyIsImxlbmd0aCJdXV0sbnVsbCx7InN0YXRl
bWVudHMiOltbNixbImlmIl0sW1syOCxbImNhblRvZ2dsZSJdXV0sbnVsbCx7InN0YXRlbWVudHMi
OltbMCwiICAgICJdLFsxMSwiaW5wdXQiLFtdXSxbMTUsInR5cGUiLCJjaGVja2JveCJdLFsxNSwi
aWQiLCJ0b2dnbGUtYWxsIl0sWzE2LCJjaGVja2VkIixbMjYsWyJhbGxDb21wbGV0ZWQiXV0sbnVs
bF0sWzE2LCJvbmNoYW5nZSIsWzMzLFsiYWN0aW9uIl0sW1syOCxbbnVsbF1dLCJ0b2dnbGVBbGwi
XSxudWxsXSxudWxsXSxbMTNdLFsxNF0sWzAsIlxcbiJdXSwibG9jYWxzIjpbXX0sbnVsbF0sWzAs
IiAgIl0sWzExLCJ1bCIsW11dLFsxNSwiaWQiLCJ0b2RvLWxpc3QiXSxbMTUsImNsYXNzIiwidG9k
by1saXN0Il0sWzEzXSxbMCwiXFxuIl0sWzYsWyJlYWNoIl0sW1syOCxbInRvZG9zIl1dXSxudWxs
LHsic3RhdGVtZW50cyI6W1swLCIgICAgICAiXSxbMSxbMzMsWyJ0b2RvLWl0ZW0iXSxudWxsLFtb
InRvZG8iLCJvblN0YXJ0RWRpdCIsIm9uRW5kRWRpdCJdLFtbMjgsWyJ0b2RvIl1dLFszMyxbImFj
dGlvbiJdLFtbMjgsW251bGxdXSwiZGlzYWJsZVRvZ2dsZSJdLG51bGxdLFszMyxbImFjdGlvbiJd
LFtbMjgsW251bGxdXSwiZW5hYmxlVG9nZ2xlIl0sbnVsbF1dXV0sZmFsc2VdLFswLCJcXG4iXV0s
ImxvY2FscyI6WyJ0b2RvIl19LG51bGxdLFswLCIgICJdLFsxNF0sWzAsIlxcbiJdXSwibG9jYWxz
IjpbXX0sbnVsbF1dLCJsb2NhbHMiOltdLCJuYW1lZCI6W10sInlpZWxkcyI6W10sImhhc1BhcnRp
YWxzIjpmYWxzZX0nLG1ldGE6e21vZHVsZU5hbWU6InRvZG9tdmMvdGVtcGxhdGVzL2NvbXBvbmVu
dHMvdG9kby1saXN0LmhicyJ9fSl9KSxkZWZpbmUoInRvZG9tdmMvdGVtcGxhdGVzL2luZGV4Iixb
ImV4cG9ydHMiXSxmdW5jdGlvbihlKXtlLmRlZmF1bHQ9RW1iZXIuSFRNTEJhcnMudGVtcGxhdGUo
e2lkOiJoQmFkTklwbyIsYmxvY2s6J3sic3RhdGVtZW50cyI6W1s2LFsiaWYiXSxbWzI4LFsibW9k
ZWwiLCJsZW5ndGgiXV1dLG51bGwseyJzdGF0ZW1lbnRzIjpbWzAsIiAgIl0sWzEsWzMzLFsidG9k
by1saXN0Il0sbnVsbCxbWyJ0b2RvcyJdLFtbMjgsWyJtb2RlbCJdXV1dXSxmYWxzZV0sWzAsIlxc
biJdXSwibG9jYWxzIjpbXX0sbnVsbF1dLCJsb2NhbHMiOltdLCJuYW1lZCI6W10sInlpZWxkcyI6
W10sImhhc1BhcnRpYWxzIjpmYWxzZX0nLG1ldGE6e21vZHVsZU5hbWU6InRvZG9tdmMvdGVtcGxh
dGVzL2luZGV4LmhicyJ9fSl9KSxkZWZpbmUoInRvZG9tdmMvY29uZmlnL2Vudmlyb25tZW50Iixb
ImVtYmVyIl0sZnVuY3Rpb24oZSl7dHJ5e3ZhciB0PSJ0b2RvbXZjL2NvbmZpZy9lbnZpcm9ubWVu
dCIsbz1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtZXRhW25hbWU9IicrdCsnIl0nKS5nZXRBdHRy
aWJ1dGUoImNvbnRlbnQiKSxuPUpTT04ucGFyc2UodW5lc2NhcGUobykpLGw9e2RlZmF1bHQ6bn0K
LXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkobCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSks
bH1jYXRjaChlKXt0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCByZWFkIGNvbmZpZyBmcm9tIG1l
dGEgdGFnIHdpdGggbmFtZSAiJyt0KyciLicpfX0pLHJ1bm5pbmdUZXN0c3x8cmVxdWlyZSgidG9k
b212Yy9hcHAiKS5kZWZhdWx0LmNyZWF0ZSh7bmFtZToidG9kb212YyIsdmVyc2lvbjoiMC4wLjAr
MTY0ZDI3ZTIifSkKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVz
b3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvc291cmNlL2Rpc3Qv
YXNzZXRzL3ZlbmRvci03YjVjOTg1MjA5MTBhZmE1OGQ3NGUwNWVjODZjZDg3My5jc3MgYi9QZXJm
b3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1l
eGFtcGxlcy9lbWJlcmpzL3NvdXJjZS9kaXN0L2Fzc2V0cy92ZW5kb3ItN2I1Yzk4NTIwOTEwYWZh
NThkNzRlMDVlYzg2Y2Q4NzMuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZjVj
ZmY5OGNmZGM0OTljNjVlNTgyYzMzMzViZTNjNDVhODFhZDg3Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIv
cmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvc291cmNlL2Rp
c3QvYXNzZXRzL3ZlbmRvci03YjVjOTg1MjA5MTBhZmE1OGQ3NGUwNWVjODZjZDg3My5jc3MKKysr
IC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0jaXNzdWUtY291bnQsLmhpZGRlbixsYWJlbFtmb3I9
dG9nZ2xlLWFsbF17ZGlzcGxheTpub25lfSNmb290ZXIsI2luZm8sI3RvZG9hcHAgaDEsI3RvZ2ds
ZS1hbGx7dGV4dC1hbGlnbjpjZW50ZXJ9aHJ7bWFyZ2luOjIwcHggMDtib3JkZXI6MDtib3JkZXIt
dG9wOjFweCBkYXNoZWQgI2M1YzVjNTtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgI2Y3ZjdmN30u
bGVhcm4gYXtmb250LXdlaWdodDo0MDA7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y29sb3I6I2I4M2Y0
NX0ubGVhcm4gYTpob3Zlcnt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO2NvbG9yOiM3ODdlN2V9
LmxlYXJuIGgzLC5sZWFybiBoNCwubGVhcm4gaDV7bWFyZ2luOjEwcHggMDtmb250LXdlaWdodDo1
MDA7bGluZS1oZWlnaHQ6MS4yO2NvbG9yOiMwMDB9LmxlYXJuIGgze2ZvbnQtc2l6ZToyNHB4fS5s
ZWFybiBoNHtmb250LXNpemU6MThweH0ubGVhcm4gaDV7bWFyZ2luLWJvdHRvbTowO2ZvbnQtc2l6
ZToxNHB4fS5sZWFybiB1bHtwYWRkaW5nOjA7bWFyZ2luOjAgMCAzMHB4IDI1cHh9LmxlYXJuIGxp
e2xpbmUtaGVpZ2h0OjIwcHh9LmxlYXJuIHB7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6MzAw
O2xpbmUtaGVpZ2h0OjEuMzttYXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbTowfS5xdW90ZSBwOmFm
dGVyLC5xdW90ZSBwOmJlZm9yZXtmb250LXNpemU6NTBweDtvcGFjaXR5Oi4xNTtwb3NpdGlvbjph
YnNvbHV0ZX0ucXVvdGV7Ym9yZGVyOm5vbmU7bWFyZ2luOjIwcHggMCA2MHB4fS5xdW90ZSBwe2Zv
bnQtc3R5bGU6aXRhbGljfS5xdW90ZSBwOmJlZm9yZXtjb250ZW50OifigJwnO3RvcDotMjBweDts
ZWZ0OjNweH0ucXVvdGUgcDphZnRlcntjb250ZW50OifigJ0nO2JvdHRvbTotNDJweDtyaWdodDoz
cHh9LnF1b3RlIGZvb3Rlcntwb3NpdGlvbjphYnNvbHV0ZTtib3R0b206LTQwcHg7cmlnaHQ6MH0u
cXVvdGUgZm9vdGVyIGltZ3tib3JkZXItcmFkaXVzOjNweH0ucXVvdGUgZm9vdGVyIGF7bWFyZ2lu
LWxlZnQ6NXB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uc3BlZWNoLWJ1YmJsZXtwb3NpdGlvbjpy
ZWxhdGl2ZTtwYWRkaW5nOjEwcHg7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4wNCk7Ym9yZGVyLXJh
ZGl1czo1cHh9LnNwZWVjaC1idWJibGU6YWZ0ZXJ7Y29udGVudDonJztwb3NpdGlvbjphYnNvbHV0
ZTt0b3A6MTAwJTtyaWdodDozMHB4O2JvcmRlcjoxM3B4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRl
ci10b3AtY29sb3I6cmdiYSgwLDAsMCwuMDQpfS5sZWFybi1iYXI+LmxlYXJue3Bvc2l0aW9uOmFi
c29sdXRlO3dpZHRoOjI3MnB4O3RvcDo4cHg7bGVmdDotMzAwcHg7cGFkZGluZzoxMHB4O2JvcmRl
ci1yYWRpdXM6NXB4O2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNik7dHJhbnNp
dGlvbi1wcm9wZXJ0eTpsZWZ0O3RyYW5zaXRpb24tZHVyYXRpb246LjVzfSNtYWluLCNuZXctdG9k
bywjdG9kby1saXN0IGxpLCN0b2RvYXBwLC5lZGl0e3Bvc2l0aW9uOnJlbGF0aXZlfUBtZWRpYSAo
bWluLXdpZHRoOjg5OXB4KXsubGVhcm4tYmFye3dpZHRoOmF1dG87cGFkZGluZy1sZWZ0OjMwMHB4
fS5sZWFybi1iYXI+LmxlYXJue2xlZnQ6OHB4fX1ib2R5LGJ1dHRvbixodG1se3BhZGRpbmc6MDtt
YXJnaW46MH1idXR0b257Ym9yZGVyOjA7YmFja2dyb3VuZDowIDA7Zm9udC1zaXplOjEwMCU7dmVy
dGljYWwtYWxpZ246YmFzZWxpbmU7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXdlaWdodDppbmhl
cml0O2NvbG9yOmluaGVyaXQ7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7YXBwZWFyYW5jZTpub25l
Oy13ZWJraXQtZm9udC1zbW9vdGhpbmc6YW50aWFsaWFzZWQ7LW1vei1mb250LXNtb290aGluZzph
bnRpYWxpYXNlZDtmb250LXNtb290aGluZzphbnRpYWxpYXNlZH1ib2R5e2ZvbnQ6MTRweCAnSGVs
dmV0aWNhIE5ldWUnLEhlbHZldGljYSxBcmlhbCxzYW5zLXNlcmlmO2xpbmUtaGVpZ2h0OjEuNGVt
O2JhY2tncm91bmQ6I2Y1ZjVmNTtjb2xvcjojNGQ0ZDRkO21pbi13aWR0aDoyMzBweDttYXgtd2lk
dGg6NTUwcHg7bWFyZ2luOjAgYXV0bzstd2Via2l0LWZvbnQtc21vb3RoaW5nOmFudGlhbGlhc2Vk
Oy1tb3otZm9udC1zbW9vdGhpbmc6YW50aWFsaWFzZWQ7Zm9udC1zbW9vdGhpbmc6YW50aWFsaWFz
ZWQ7Zm9udC13ZWlnaHQ6MzAwfWJ1dHRvbixpbnB1dFt0eXBlPWNoZWNrYm94XXtvdXRsaW5lOjB9
I3RvZG9hcHB7YmFja2dyb3VuZDojZmZmO21hcmdpbjoxMzBweCAwIDQwcHg7Ym94LXNoYWRvdzow
IDJweCA0cHggMCByZ2JhKDAsMCwwLC4yKSwwIDI1cHggNTBweCAwIHJnYmEoMCwwLDAsLjEpfSN0
b2RvYXBwIGlucHV0Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVye2ZvbnQtc3R5bGU6aXRhbGlj
O2ZvbnQtd2VpZ2h0OjMwMDtjb2xvcjojZTZlNmU2fSN0b2RvYXBwIGlucHV0OjotbW96LXBsYWNl
aG9sZGVye2ZvbnQtc3R5bGU6aXRhbGljO2ZvbnQtd2VpZ2h0OjMwMDtjb2xvcjojZTZlNmU2fSN0
b2RvYXBwIGlucHV0OjppbnB1dC1wbGFjZWhvbGRlcntmb250LXN0eWxlOml0YWxpYztmb250LXdl
aWdodDozMDA7Y29sb3I6I2U2ZTZlNn0jdG9kb2FwcCBoMXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6
LTE1NXB4O3dpZHRoOjEwMCU7Zm9udC1zaXplOjEwMHB4O2ZvbnQtd2VpZ2h0OjEwMDtjb2xvcjpy
Z2JhKDE3NSw0Nyw0NywuMTUpOy13ZWJraXQtdGV4dC1yZW5kZXJpbmc6b3B0aW1pemVMZWdpYmls
aXR5Oy1tb3otdGV4dC1yZW5kZXJpbmc6b3B0aW1pemVMZWdpYmlsaXR5O3RleHQtcmVuZGVyaW5n
Om9wdGltaXplTGVnaWJpbGl0eX0jbmV3LXRvZG8sLmVkaXR7bWFyZ2luOjA7d2lkdGg6MTAwJTtm
b250LXNpemU6MjRweDtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtd2VpZ2h0OmluaGVyaXQ7bGlu
ZS1oZWlnaHQ6MS40ZW07b3V0bGluZTowO2NvbG9yOmluaGVyaXQ7cGFkZGluZzo2cHg7Ym9yZGVy
OjFweCBzb2xpZCAjOTk5O2JveC1zaGFkb3c6aW5zZXQgMCAtMXB4IDVweCAwIHJnYmEoMCwwLDAs
LjIpO2JveC1zaXppbmc6Ym9yZGVyLWJveDstd2Via2l0LWZvbnQtc21vb3RoaW5nOmFudGlhbGlh
c2VkOy1tb3otZm9udC1zbW9vdGhpbmc6YW50aWFsaWFzZWQ7Zm9udC1zbW9vdGhpbmc6YW50aWFs
aWFzZWR9I25ldy10b2Rve3BhZGRpbmc6MTZweCAxNnB4IDE2cHggNjBweDtib3JkZXI6bm9uZTti
YWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjAwMyk7Ym94LXNoYWRvdzppbnNldCAwIC0ycHggMXB4IHJn
YmEoMCwwLDAsLjAzKX0jbWFpbnt6LWluZGV4OjI7Ym9yZGVyLXRvcDoxcHggc29saWQgI2U2ZTZl
Nn0jdG9nZ2xlLWFsbHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6LTU1cHg7bGVmdDotMTJweDt3aWR0
aDo2MHB4O2hlaWdodDozNHB4O2JvcmRlcjpub25lfSN0b2dnbGUtYWxsOmJlZm9yZXtjb250ZW50
Oifina8nO2ZvbnQtc2l6ZToyMnB4O2NvbG9yOiNlNmU2ZTY7cGFkZGluZzoxMHB4IDI3cHh9I3Rv
Z2dsZS1hbGw6Y2hlY2tlZDpiZWZvcmV7Y29sb3I6IzczNzM3M30jdG9kby1saXN0e21hcmdpbjow
O3BhZGRpbmc6MDtsaXN0LXN0eWxlOm5vbmV9I3RvZG8tbGlzdCBsaXtmb250LXNpemU6MjRweDti
b3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWRlZGVkfSN0b2RvLWxpc3QgbGk6bGFzdC1jaGlsZHti
b3JkZXItYm90dG9tOm5vbmV9I3RvZG8tbGlzdCBsaS5lZGl0aW5ne2JvcmRlci1ib3R0b206bm9u
ZTtwYWRkaW5nOjB9I3RvZG8tbGlzdCBsaS5lZGl0aW5nIC5lZGl0e2Rpc3BsYXk6YmxvY2s7d2lk
dGg6NTA2cHg7cGFkZGluZzoxM3B4IDE3cHggMTJweDttYXJnaW46MCAwIDAgNDNweH0jdG9kby1s
aXN0IGxpLmVkaXRpbmcgLnZpZXd7ZGlzcGxheTpub25lfSN0b2RvLWxpc3QgbGkgLnRvZ2dsZXt0
ZXh0LWFsaWduOmNlbnRlcjt3aWR0aDo0MHB4O2hlaWdodDphdXRvO3Bvc2l0aW9uOmFic29sdXRl
O3RvcDowO2JvdHRvbTowO21hcmdpbjphdXRvIDA7Ym9yZGVyOm5vbmU7LXdlYmtpdC1hcHBlYXJh
bmNlOm5vbmU7YXBwZWFyYW5jZTpub25lfSN0b2RvLWxpc3QgbGkgLnRvZ2dsZTphZnRlcntjb250
ZW50OnVybCgnZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53
My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCIgdmlld0JveD0iLTEwIC0xOCAx
MDAgMTM1Ij48Y2lyY2xlIGN4PSI1MCIgY3k9IjUwIiByPSI1MCIgZmlsbD0ibm9uZSIgc3Ryb2tl
PSIjZWRlZGVkIiBzdHJva2Utd2lkdGg9IjMiLz48L3N2Zz4nKX0jdG9kby1saXN0IGxpIC50b2dn
bGU6Y2hlY2tlZDphZnRlcntjb250ZW50OnVybCgnZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsPHN2
ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0MCIgaGVpZ2h0PSI0
MCIgdmlld0JveD0iLTEwIC0xOCAxMDAgMTM1Ij48Y2lyY2xlIGN4PSI1MCIgY3k9IjUwIiByPSI1
MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjYmRkYWQ1IiBzdHJva2Utd2lkdGg9IjMiLz48cGF0aCBm
aWxsPSIjNWRjMmFmIiBkPSJNNzIgMjVMNDIgNzEgMjcgNTZsLTQgNCAyMCAyMCAzNC01MnoiLz48
L3N2Zz4nKX0jdG9kby1saXN0IGxpIGxhYmVse3doaXRlLXNwYWNlOnByZTt3b3JkLWJyZWFrOmJy
ZWFrLXdvcmQ7cGFkZGluZzoxNXB4IDYwcHggMTVweCAxNXB4O21hcmdpbi1sZWZ0OjQ1cHg7ZGlz
cGxheTpibG9jaztsaW5lLWhlaWdodDoxLjI7dHJhbnNpdGlvbjpjb2xvciAuNHN9I3RvZG8tbGlz
dCBsaS5jb21wbGV0ZWQgbGFiZWx7Y29sb3I6I2Q5ZDlkOTt0ZXh0LWRlY29yYXRpb246bGluZS10
aHJvdWdofSN0b2RvLWxpc3QgbGkgLmRlc3Ryb3l7ZGlzcGxheTpub25lO3Bvc2l0aW9uOmFic29s
dXRlO3RvcDowO3JpZ2h0OjEwcHg7Ym90dG9tOjA7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDttYXJn
aW46YXV0byAwIDExcHg7Zm9udC1zaXplOjMwcHg7Y29sb3I6I2NjOWE5YTt0cmFuc2l0aW9uOmNv
bG9yIC4ycyBlYXNlLW91dH0jZmlsdGVycywjZm9vdGVyOmJlZm9yZXtwb3NpdGlvbjphYnNvbHV0
ZTtyaWdodDowO2xlZnQ6MH0jdG9kby1saXN0IGxpIC5kZXN0cm95OmhvdmVye2NvbG9yOiNhZjVi
NWV9I2ZpbHRlcnMgbGkgYSwjaW5mbyBhe2NvbG9yOmluaGVyaXQ7dGV4dC1kZWNvcmF0aW9uOm5v
bmV9I3RvZG8tbGlzdCBsaSAuZGVzdHJveTphZnRlcntjb250ZW50OifDlyd9I3RvZG8tbGlzdCBs
aTpob3ZlciAuZGVzdHJveXtkaXNwbGF5OmJsb2NrfSN0b2RvLWxpc3QgbGkgLmVkaXR7ZGlzcGxh
eTpub25lfSN0b2RvLWxpc3QgbGkuZWRpdGluZzpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206LTFw
eH0jZm9vdGVye2NvbG9yOiM3Nzc7cGFkZGluZzoxMHB4IDE1cHg7aGVpZ2h0OjIwcHg7Ym9yZGVy
LXRvcDoxcHggc29saWQgI2U2ZTZlNn0jZm9vdGVyOmJlZm9yZXtjb250ZW50OicnO2JvdHRvbTow
O2hlaWdodDo1MHB4O292ZXJmbG93OmhpZGRlbjtib3gtc2hhZG93OjAgMXB4IDFweCByZ2JhKDAs
MCwwLC4yKSwwIDhweCAwIC0zcHggI2Y2ZjZmNiwwIDlweCAxcHggLTNweCByZ2JhKDAsMCwwLC4y
KSwwIDE2cHggMCAtNnB4ICNmNmY2ZjYsMCAxN3B4IDJweCAtNnB4IHJnYmEoMCwwLDAsLjIpfSN0
b2RvLWNvdW50e2Zsb2F0OmxlZnQ7dGV4dC1hbGlnbjpsZWZ0fSN0b2RvLWNvdW50IHN0cm9uZ3tm
b250LXdlaWdodDozMDB9I2ZpbHRlcnN7bWFyZ2luOjA7cGFkZGluZzowO2xpc3Qtc3R5bGU6bm9u
ZX0jZmlsdGVycyBsaXtkaXNwbGF5OmlubGluZX0jZmlsdGVycyBsaSBhe21hcmdpbjozcHg7cGFk
ZGluZzozcHggN3B4O2JvcmRlcjoxcHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXJhZGl1czoz
cHh9I2ZpbHRlcnMgbGkgYS5zZWxlY3RlZCwjZmlsdGVycyBsaSBhOmhvdmVye2JvcmRlci1jb2xv
cjpyZ2JhKDE3NSw0Nyw0NywuMSl9I2ZpbHRlcnMgbGkgYS5zZWxlY3RlZHtib3JkZXItY29sb3I6
cmdiYSgxNzUsNDcsNDcsLjIpfSNjbGVhci1jb21wbGV0ZWQsaHRtbCAjY2xlYXItY29tcGxldGVk
OmFjdGl2ZXtmbG9hdDpyaWdodDtsaW5lLWhlaWdodDoyMHB4O3RleHQtZGVjb3JhdGlvbjpub25l
O2N1cnNvcjpwb2ludGVyO3Bvc2l0aW9uOnJlbGF0aXZlfSNjbGVhci1jb21wbGV0ZWQ6aG92ZXIs
I2luZm8gYTpob3Zlcnt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lfSNpbmZve21hcmdpbjo2NXB4
IGF1dG8gMDtjb2xvcjojYmZiZmJmO2ZvbnQtc2l6ZToxMHB4O3RleHQtc2hhZG93OjAgMXB4IDAg
cmdiYSgyNTUsMjU1LDI1NSwuNSl9I2luZm8gcHtsaW5lLWhlaWdodDoxfSNpbmZvIGF7Zm9udC13
ZWlnaHQ6NDAwfUBtZWRpYSBzY3JlZW4gYW5kICgtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0
aW86MCl7I3RvZG8tbGlzdCBsaSAudG9nZ2xlLCN0b2dnbGUtYWxse2JhY2tncm91bmQ6MCAwfSN0
b2RvLWxpc3QgbGkgLnRvZ2dsZXtoZWlnaHQ6NDBweH0jdG9nZ2xlLWFsbHstd2Via2l0LXRyYW5z
Zm9ybTpyb3RhdGUoOTBkZWcpO3RyYW5zZm9ybTpyb3RhdGUoOTBkZWcpOy13ZWJraXQtYXBwZWFy
YW5jZTpub25lO2FwcGVhcmFuY2U6bm9uZX19QG1lZGlhIChtYXgtd2lkdGg6NDMwcHgpeyNmb290
ZXJ7aGVpZ2h0OjUwcHh9I2ZpbHRlcnN7Ym90dG9tOjEwcHh9fQpcIE5vIG5ld2xpbmUgYXQgZW5k
IG9mIGZpbGUKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3Vy
Y2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvc291cmNlL2Rpc3QvYXNz
ZXRzL3ZlbmRvci04MjA5MTk1NjdlYjdiZDRkOWZhYzM1OGE5MGE1YWFjNC5qcyBiL1BlcmZvcm1h
bmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1w
bGVzL2VtYmVyanMvc291cmNlL2Rpc3QvYXNzZXRzL3ZlbmRvci04MjA5MTk1NjdlYjdiZDRkOWZh
YzM1OGE5MGE1YWFjNC5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjlkOWIxZjQw
NWZkYzQ4Njc5MGI3ZDQ3MTE1YjRmOGM4NDUzOWI2YS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291
cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL3NvdXJjZS9kaXN0L2Fz
c2V0cy92ZW5kb3ItODIwOTE5NTY3ZWI3YmQ0ZDlmYWMzNThhOTBhNWFhYzQuanMKKysrIC9kZXYv
bnVsbApAQCAtMSwzMzY0ICswLDAgQEAKLWZ1bmN0aW9uIGNyZWF0ZURlcHJlY2F0ZWRNb2R1bGUo
ZSl7ZGVmaW5lKGUsWyJleHBvcnRzIiwiZW1iZXItcmVzb2x2ZXIvcmVzb2x2ZXIiLCJlbWJlciJd
LGZ1bmN0aW9uKHQsbixyKXtyLmRlZmF1bHQuZGVwcmVjYXRlKCJVc2FnZSBvZiBgIitlKyJgIG1v
ZHVsZSBpcyBkZXByZWNhdGVkLCBwbGVhc2UgdXBkYXRlIHRvIGBlbWJlci1yZXNvbHZlcmAuIiwh
MSx7aWQ6ImVtYmVyLXJlc29sdmVyLmxlZ2FjeS1zaGltcyIsdW50aWw6IjMuMC4wIn0pLHQuZGVm
YXVsdD1uLmRlZmF1bHR9KX13aW5kb3cuRW1iZXJFTlY9e0ZFQVRVUkVTOnt9LEVYVEVORF9QUk9U
T1RZUEVTOntEYXRlOiExfX0KLXZhciBydW5uaW5nVGVzdHM9ITEsbG9hZGVyLGRlZmluZSxyZXF1
aXJlTW9kdWxlLHJlcXVpcmUscmVxdWlyZWpzOyhmdW5jdGlvbihlKXsidXNlIHN0cmljdCIKLWZ1
bmN0aW9uIHQoKXt2YXIgZT1PYmplY3QuY3JlYXRlKG51bGwpCi1yZXR1cm4gZS5fXz12b2lkIDAs
ZGVsZXRlIGUuX18sZX1mdW5jdGlvbiBuKGUpe3Rocm93IG5ldyBFcnJvcigiYW4gdW5zdXBwb3J0
ZWQgbW9kdWxlIHdhcyBkZWZpbmVkLCBleHBlY3RlZCBgZGVmaW5lKGlkLCBkZXBzLCBtb2R1bGUp
YCBpbnN0ZWFkIGdvdDogYCIrZSsiYCBhcmd1bWVudHMgdG8gZGVmaW5lYCIpfWZ1bmN0aW9uIHIo
ZSx0LG4scil7dGhpcy51dWlkPWgrKyx0aGlzLmlkPWUsdGhpcy5kZXBzPSF0Lmxlbmd0aCYmbi5s
ZW5ndGg/ZDp0LHRoaXMubW9kdWxlPXtleHBvcnRzOnt9fSx0aGlzLmNhbGxiYWNrPW4sdGhpcy5o
YXNFeHBvcnRzQXNEZXA9ITEsdGhpcy5pc0FsaWFzPXIsdGhpcy5yZWlmaWVkPW5ldyBBcnJheSh0
Lmxlbmd0aCksdGhpcy5zdGF0ZT0ibmV3In1mdW5jdGlvbiBpKCl7fWZ1bmN0aW9uIG8oZSl7dGhp
cy5pZD1lfWZ1bmN0aW9uIHMoZSx0KXt0aHJvdyBuZXcgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIG1v
ZHVsZSBgIitlKyJgIGltcG9ydGVkIGZyb20gYCIrdCsiYCIpfWZ1bmN0aW9uIGEoZSx0LG4pe2Zv
cih2YXIgcj1wW2VdfHxwW2UrIi9pbmRleCJdO3ImJnIuaXNBbGlhczspcj1wW3IuaWRdCi1yZXR1
cm4gcnx8cyhlLHQpLG4mJiJwZW5kaW5nIiE9PXIuc3RhdGUmJiJmaW5hbGl6ZWQiIT09ci5zdGF0
ZSYmKHIuZmluZERlcHMobiksbi5wdXNoKHIpKSxyfWZ1bmN0aW9uIHUoZSx0KXtpZigiLiIhPT1l
LmNoYXJBdCgwKSlyZXR1cm4gZQotZm9yKHZhciBuPWUuc3BsaXQoIi8iKSxyPXQuc3BsaXQoIi8i
KSxpPXIuc2xpY2UoMCwtMSksbz0wLHM9bi5sZW5ndGg7bzxzO28rKyl7dmFyIGE9bltvXQotaWYo
Ii4uIj09PWEpe2lmKDA9PT1pLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBhY2Nlc3Mg
cGFyZW50IG1vZHVsZSBvZiByb290IikKLWkucG9wKCl9ZWxzZXtpZigiLiI9PT1hKWNvbnRpbnVl
Ci1pLnB1c2goYSl9fXJldHVybiBpLmpvaW4oIi8iKX1mdW5jdGlvbiBsKGUpe3JldHVybiEoIXBb
ZV0mJiFwW2UrIi9pbmRleCJdKX12YXIgYz17bG9hZGVyOmxvYWRlcixkZWZpbmU6ZGVmaW5lLHJl
cXVpcmVNb2R1bGU6cmVxdWlyZU1vZHVsZSxyZXF1aXJlOnJlcXVpcmUscmVxdWlyZWpzOnJlcXVp
cmVqc30KLXJlcXVpcmVqcz1yZXF1aXJlPXJlcXVpcmVNb2R1bGU9ZnVuY3Rpb24oZSl7Zm9yKHZh
ciB0PVtdLG49YShlLCIocmVxdWlyZSkiLHQpLHI9dC5sZW5ndGgtMTtyPj0wO3ItLSl0W3JdLmV4
cG9ydHMoKQotcmV0dXJuIG4ubW9kdWxlLmV4cG9ydHN9LGxvYWRlcj17bm9Db25mbGljdDpmdW5j
dGlvbih0KXt2YXIgbixyCi1mb3IobiBpbiB0KXQuaGFzT3duUHJvcGVydHkobikmJmMuaGFzT3du
UHJvcGVydHkobikmJihyPXRbbl0sZVtyXT1lW25dLGVbbl09Y1tuXSl9LG1ha2VEZWZhdWx0RXhw
b3J0OiEwfQotdmFyIHA9dCgpLGY9dCgpLGg9MCxkPVsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1
bGUiXQotci5wcm90b3R5cGUubWFrZURlZmF1bHRFeHBvcnQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlz
Lm1vZHVsZS5leHBvcnRzCi1udWxsPT09ZXx8Im9iamVjdCIhPXR5cGVvZiBlJiYiZnVuY3Rpb24i
IT10eXBlb2YgZXx8dm9pZCAwIT09ZS5kZWZhdWx0fHwhT2JqZWN0LmlzRXh0ZW5zaWJsZShlKXx8
KGUuZGVmYXVsdD1lKX0sci5wcm90b3R5cGUuZXhwb3J0cz1mdW5jdGlvbigpe2lmKCJmaW5hbGl6
ZWQiPT09dGhpcy5zdGF0ZXx8InJlaWZ5aW5nIj09PXRoaXMuc3RhdGUpcmV0dXJuIHRoaXMubW9k
dWxlLmV4cG9ydHMKLWxvYWRlci53cmFwTW9kdWxlcyYmKHRoaXMuY2FsbGJhY2s9bG9hZGVyLndy
YXBNb2R1bGVzKHRoaXMuaWQsdGhpcy5jYWxsYmFjaykpLHRoaXMucmVpZnkoKQotdmFyIGU9dGhp
cy5jYWxsYmFjay5hcHBseSh0aGlzLHRoaXMucmVpZmllZCkKLXJldHVybiB0aGlzLnJlaWZpZWQu
bGVuZ3RoPTAsdGhpcy5zdGF0ZT0iZmluYWxpemVkIix0aGlzLmhhc0V4cG9ydHNBc0RlcCYmdm9p
ZCAwPT09ZXx8KHRoaXMubW9kdWxlLmV4cG9ydHM9ZSksbG9hZGVyLm1ha2VEZWZhdWx0RXhwb3J0
JiZ0aGlzLm1ha2VEZWZhdWx0RXhwb3J0KCksdGhpcy5tb2R1bGUuZXhwb3J0c30sci5wcm90b3R5
cGUudW5zZWU9ZnVuY3Rpb24oKXt0aGlzLnN0YXRlPSJuZXciLHRoaXMubW9kdWxlPXtleHBvcnRz
Ont9fX0sci5wcm90b3R5cGUucmVpZnk9ZnVuY3Rpb24oKXtpZigicmVpZmllZCIhPT10aGlzLnN0
YXRlKXt0aGlzLnN0YXRlPSJyZWlmeWluZyIKLXRyeXt0aGlzLnJlaWZpZWQ9dGhpcy5fcmVpZnko
KSx0aGlzLnN0YXRlPSJyZWlmaWVkIn1maW5hbGx5eyJyZWlmeWluZyI9PT10aGlzLnN0YXRlJiYo
dGhpcy5zdGF0ZT0iZXJyb3JlZCIpfX19LHIucHJvdG90eXBlLl9yZWlmeT1mdW5jdGlvbigpe2Zv
cih2YXIgZT10aGlzLnJlaWZpZWQuc2xpY2UoKSx0PTA7dDxlLmxlbmd0aDt0Kyspe3ZhciBuPWVb
dF0KLWVbdF09bi5leHBvcnRzP24uZXhwb3J0czpuLm1vZHVsZS5leHBvcnRzKCl9cmV0dXJuIGV9
LHIucHJvdG90eXBlLmZpbmREZXBzPWZ1bmN0aW9uKGUpe2lmKCJuZXciPT09dGhpcy5zdGF0ZSl7
dGhpcy5zdGF0ZT0icGVuZGluZyIKLWZvcih2YXIgdD10aGlzLmRlcHMsbj0wO248dC5sZW5ndGg7
bisrKXt2YXIgcj10W25dLGk9dGhpcy5yZWlmaWVkW25dPXtleHBvcnRzOnZvaWQgMCxtb2R1bGU6
dm9pZCAwfQotImV4cG9ydHMiPT09cj8odGhpcy5oYXNFeHBvcnRzQXNEZXA9ITAsaS5leHBvcnRz
PXRoaXMubW9kdWxlLmV4cG9ydHMpOiJyZXF1aXJlIj09PXI/aS5leHBvcnRzPXRoaXMubWFrZVJl
cXVpcmUoKToibW9kdWxlIj09PXI/aS5leHBvcnRzPXRoaXMubW9kdWxlOmkubW9kdWxlPWEodShy
LHRoaXMuaWQpLHRoaXMuaWQsZSl9fX0sci5wcm90b3R5cGUubWFrZVJlcXVpcmU9ZnVuY3Rpb24o
KXt2YXIgZT10aGlzLmlkLHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHJlcXVpcmUodSh0LGUpKX0KLXJl
dHVybiB0LmRlZmF1bHQ9dCx0Lm1vZHVsZUlkPWUsdC5oYXM9ZnVuY3Rpb24odCl7cmV0dXJuIGwo
dSh0LGUpKX0sdH0sZGVmaW5lPWZ1bmN0aW9uKGUsdCxpKXt2YXIgcz1wW2VdCi1zJiYibmV3IiE9
PXMuc3RhdGV8fChhcmd1bWVudHMubGVuZ3RoPDImJm4oYXJndW1lbnRzLmxlbmd0aCksQXJyYXku
aXNBcnJheSh0KXx8KGk9dCx0PVtdKSxwW2VdPWkgaW5zdGFuY2VvZiBvP25ldyByKGkuaWQsdCxp
LCEwKTpuZXcgcihlLHQsaSwhMSkpfSxkZWZpbmUuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciBu
PXBbZV0KLWlmKCFufHwibmV3Ij09PW4uc3RhdGUpcmV0dXJuIG49bmV3IHIoZSxbXSxpLG51bGwp
LG4ubW9kdWxlLmV4cG9ydHM9dCxuLnN0YXRlPSJmaW5hbGl6ZWQiLHBbZV09bixufSxkZWZpbmUu
YWxpYXM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gMj09PWFyZ3VtZW50cy5sZW5ndGg/ZGVmaW5lKHQs
bmV3IG8oZSkpOm5ldyBvKGUpfSxyZXF1aXJlanMuZW50cmllcz1yZXF1aXJlanMuX2Vha19zZWVu
PXAscmVxdWlyZWpzLmhhcz1sLHJlcXVpcmVqcy51bnNlZT1mdW5jdGlvbihlKXthKGUsIih1bnNl
ZSkiLCExKS51bnNlZSgpfSxyZXF1aXJlanMuY2xlYXI9ZnVuY3Rpb24oKXtyZXF1aXJlanMuZW50
cmllcz1yZXF1aXJlanMuX2Vha19zZWVuPXA9dCgpLGY9dCgpfSxkZWZpbmUoImZvbyIsZnVuY3Rp
b24oKXt9KSxkZWZpbmUoImZvby9iYXIiLFtdLGZ1bmN0aW9uKCl7fSksZGVmaW5lKCJmb28vYXNk
ZiIsWyJtb2R1bGUiLCJleHBvcnRzIiwicmVxdWlyZSJdLGZ1bmN0aW9uKGUsdCxuKXtuLmhhcygi
Zm9vL2JhciIpJiZuKCJmb28vYmFyIil9KSxkZWZpbmUoImZvby9iYXoiLFtdLGRlZmluZS5hbGlh
cygiZm9vIikpLGRlZmluZSgiZm9vL3F1eiIsZGVmaW5lLmFsaWFzKCJmb28iKSksZGVmaW5lLmFs
aWFzKCJmb28iLCJmb28vcXV4IiksZGVmaW5lKCJmb28vYmFyIixbImZvbyIsIi4vcXV6IiwiLi9i
YXoiLCIuL2FzZGYiLCIuL2JhciIsIi4uL2ZvbyJdLGZ1bmN0aW9uKCl7fSksZGVmaW5lKCJmb28v
bWFpbiIsWyJmb28vYmFyIl0sZnVuY3Rpb24oKXt9KSxkZWZpbmUuZXhwb3J0cygiZm9vL2V4cG9y
dHMiLHt9KSxyZXF1aXJlKCJmb28vZXhwb3J0cyIpLHJlcXVpcmUoImZvby9tYWluIikscmVxdWly
ZS51bnNlZSgiZm9vL2JhciIpLHJlcXVpcmVqcy5jbGVhcigpLCJvYmplY3QiPT10eXBlb2YgZXhw
b3J0cyYmIm9iamVjdCI9PXR5cGVvZiBtb2R1bGUmJm1vZHVsZS5leHBvcnRzJiYobW9kdWxlLmV4
cG9ydHM9e3JlcXVpcmU6cmVxdWlyZSxkZWZpbmU6ZGVmaW5lfSl9KSh0aGlzKSxmdW5jdGlvbihl
LHQpeyJ1c2Ugc3RyaWN0IgotIm9iamVjdCI9PXR5cGVvZiBtb2R1bGUmJiJvYmplY3QiPT10eXBl
b2YgbW9kdWxlLmV4cG9ydHM/bW9kdWxlLmV4cG9ydHM9ZS5kb2N1bWVudD90KGUsITApOmZ1bmN0
aW9uKGUpe2lmKCFlLmRvY3VtZW50KXRocm93IG5ldyBFcnJvcigialF1ZXJ5IHJlcXVpcmVzIGEg
d2luZG93IHdpdGggYSBkb2N1bWVudCIpCi1yZXR1cm4gdChlKX06dChlKX0oInVuZGVmaW5lZCIh
PXR5cGVvZiB3aW5kb3c/d2luZG93OnRoaXMsZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCIKLWZ1
bmN0aW9uIG4oZSx0KXt0PXR8fG5lCi12YXIgbj10LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpCi1u
LnRleHQ9ZSx0LmhlYWQuYXBwZW5kQ2hpbGQobikucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChuKX1m
dW5jdGlvbiByKGUpe3ZhciB0PSEhZSYmImxlbmd0aCJpbiBlJiZlLmxlbmd0aCxuPWRlLnR5cGUo
ZSkKLXJldHVybiJmdW5jdGlvbiIhPT1uJiYhZGUuaXNXaW5kb3coZSkmJigiYXJyYXkiPT09bnx8
MD09PXR8fCJudW1iZXIiPT10eXBlb2YgdCYmdD4wJiZ0LTEgaW4gZSl9ZnVuY3Rpb24gaShlLHQp
e3JldHVybiBlLm5vZGVOYW1lJiZlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT10LnRvTG93ZXJD
YXNlKCl9ZnVuY3Rpb24gbyhlLHQsbil7cmV0dXJuIGRlLmlzRnVuY3Rpb24odCk/ZGUuZ3JlcChl
LGZ1bmN0aW9uKGUscil7cmV0dXJuISF0LmNhbGwoZSxyLGUpIT09bn0pOnQubm9kZVR5cGU/ZGUu
Z3JlcChlLGZ1bmN0aW9uKGUpe3JldHVybiBlPT09dCE9PW59KToic3RyaW5nIiE9dHlwZW9mIHQ/
ZGUuZ3JlcChlLGZ1bmN0aW9uKGUpe3JldHVybiBhZS5jYWxsKHQsZSk+LTEhPT1ufSk6Q2UudGVz
dCh0KT9kZS5maWx0ZXIodCxlLG4pOih0PWRlLmZpbHRlcih0LGUpLGRlLmdyZXAoZSxmdW5jdGlv
bihlKXtyZXR1cm4gYWUuY2FsbCh0LGUpPi0xIT09biYmMT09PWUubm9kZVR5cGV9KSl9ZnVuY3Rp
b24gcyhlLHQpe2Zvcig7KGU9ZVt0XSkmJjEhPT1lLm5vZGVUeXBlOyk7cmV0dXJuIGV9ZnVuY3Rp
b24gYShlKXt2YXIgdD17fQotcmV0dXJuIGRlLmVhY2goZS5tYXRjaChSZSl8fFtdLGZ1bmN0aW9u
KGUsbil7dFtuXT0hMH0pLHR9ZnVuY3Rpb24gdShlKXtyZXR1cm4gZX1mdW5jdGlvbiBsKGUpe3Ro
cm93IGV9ZnVuY3Rpb24gYyhlLHQsbixyKXt2YXIgaQotdHJ5e2UmJmRlLmlzRnVuY3Rpb24oaT1l
LnByb21pc2UpP2kuY2FsbChlKS5kb25lKHQpLmZhaWwobik6ZSYmZGUuaXNGdW5jdGlvbihpPWUu
dGhlbik/aS5jYWxsKGUsdCxuKTp0LmFwcGx5KHZvaWQgMCxbZV0uc2xpY2UocikpfWNhdGNoKGUp
e24uYXBwbHkodm9pZCAwLFtlXSl9fWZ1bmN0aW9uIHAoKXtuZS5yZW1vdmVFdmVudExpc3RlbmVy
KCJET01Db250ZW50TG9hZGVkIixwKSxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWQiLHApLGRl
LnJlYWR5KCl9ZnVuY3Rpb24gZigpe3RoaXMuZXhwYW5kbz1kZS5leHBhbmRvK2YudWlkKyt9ZnVu
Y3Rpb24gaChlKXtyZXR1cm4idHJ1ZSI9PT1lfHwiZmFsc2UiIT09ZSYmKCJudWxsIj09PWU/bnVs
bDplPT09K2UrIiI/K2U6SWUudGVzdChlKT9KU09OLnBhcnNlKGUpOmUpfWZ1bmN0aW9uIGQoZSx0
LG4pe3ZhciByCi1pZih2b2lkIDA9PT1uJiYxPT09ZS5ub2RlVHlwZSlpZihyPSJkYXRhLSIrdC5y
ZXBsYWNlKE1lLCItJCYiKS50b0xvd2VyQ2FzZSgpLCJzdHJpbmciPT10eXBlb2Yobj1lLmdldEF0
dHJpYnV0ZShyKSkpe3RyeXtuPWgobil9Y2F0Y2goZSl7fUxlLnNldChlLHQsbil9ZWxzZSBuPXZv
aWQgMAotcmV0dXJuIG59ZnVuY3Rpb24gbShlLHQsbixyKXt2YXIgaSxvPTEscz0yMCxhPXI/ZnVu
Y3Rpb24oKXtyZXR1cm4gci5jdXIoKX06ZnVuY3Rpb24oKXtyZXR1cm4gZGUuY3NzKGUsdCwiIil9
LHU9YSgpLGw9biYmblszXXx8KGRlLmNzc051bWJlclt0XT8iIjoicHgiKSxjPShkZS5jc3NOdW1i
ZXJbdF18fCJweCIhPT1sJiYrdSkmJnplLmV4ZWMoZGUuY3NzKGUsdCkpCi1pZihjJiZjWzNdIT09
bCl7bD1sfHxjWzNdLG49bnx8W10sYz0rdXx8MQotZG97bz1vfHwiLjUiLGMvPW8sZGUuc3R5bGUo
ZSx0LGMrbCl9d2hpbGUobyE9PShvPWEoKS91KSYmMSE9PW8mJi0tcyl9cmV0dXJuIG4mJihjPStj
fHwrdXx8MCxpPW5bMV0/YysoblsxXSsxKSpuWzJdOituWzJdLHImJihyLnVuaXQ9bCxyLnN0YXJ0
PWMsci5lbmQ9aSkpLGl9ZnVuY3Rpb24gZyhlKXt2YXIgdCxuPWUub3duZXJEb2N1bWVudCxyPWUu
bm9kZU5hbWUsaT1IZVtyXQotcmV0dXJuIGl8fCh0PW4uYm9keS5hcHBlbmRDaGlsZChuLmNyZWF0
ZUVsZW1lbnQocikpLGk9ZGUuY3NzKHQsImRpc3BsYXkiKSx0LnBhcmVudE5vZGUucmVtb3ZlQ2hp
bGQodCksIm5vbmUiPT09aSYmKGk9ImJsb2NrIiksSGVbcl09aSxpKX1mdW5jdGlvbiB5KGUsdCl7
Zm9yKHZhciBuLHIsaT1bXSxvPTAscz1lLmxlbmd0aDtvPHM7bysrKXI9ZVtvXSxyLnN0eWxlJiYo
bj1yLnN0eWxlLmRpc3BsYXksdD8oIm5vbmUiPT09biYmKGlbb109RGUuZ2V0KHIsImRpc3BsYXki
KXx8bnVsbCxpW29dfHwoci5zdHlsZS5kaXNwbGF5PSIiKSksIiI9PT1yLnN0eWxlLmRpc3BsYXkm
JkJlKHIpJiYoaVtvXT1nKHIpKSk6Im5vbmUiIT09biYmKGlbb109Im5vbmUiLERlLnNldChyLCJk
aXNwbGF5IixuKSkpCi1mb3Iobz0wO288cztvKyspbnVsbCE9aVtvXSYmKGVbb10uc3R5bGUuZGlz
cGxheT1pW29dKQotcmV0dXJuIGV9ZnVuY3Rpb24gdihlLHQpe3ZhciBuCi1yZXR1cm4gbj12b2lk
IDAhPT1lLmdldEVsZW1lbnRzQnlUYWdOYW1lP2UuZ2V0RWxlbWVudHNCeVRhZ05hbWUodHx8Iioi
KTp2b2lkIDAhPT1lLnF1ZXJ5U2VsZWN0b3JBbGw/ZS5xdWVyeVNlbGVjdG9yQWxsKHR8fCIqIik6
W10sdm9pZCAwPT09dHx8dCYmaShlLHQpP2RlLm1lcmdlKFtlXSxuKTpufWZ1bmN0aW9uIGIoZSx0
KXtmb3IodmFyIG49MCxyPWUubGVuZ3RoO248cjtuKyspRGUuc2V0KGVbbl0sImdsb2JhbEV2YWwi
LCF0fHxEZS5nZXQodFtuXSwiZ2xvYmFsRXZhbCIpKX1mdW5jdGlvbiBfKGUsdCxuLHIsaSl7Zm9y
KHZhciBvLHMsYSx1LGwsYyxwPXQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGY9W10saD0wLGQ9
ZS5sZW5ndGg7aDxkO2grKylpZigobz1lW2hdKXx8MD09PW8paWYoIm9iamVjdCI9PT1kZS50eXBl
KG8pKWRlLm1lcmdlKGYsby5ub2RlVHlwZT9bb106bykKLWVsc2UgaWYoS2UudGVzdChvKSl7Zm9y
KHM9c3x8cC5hcHBlbmRDaGlsZCh0LmNyZWF0ZUVsZW1lbnQoImRpdiIpKSxhPShXZS5leGVjKG8p
fHxbIiIsIiJdKVsxXS50b0xvd2VyQ2FzZSgpLHU9R2VbYV18fEdlLl9kZWZhdWx0LHMuaW5uZXJI
VE1MPXVbMV0rZGUuaHRtbFByZWZpbHRlcihvKSt1WzJdLGM9dVswXTtjLS07KXM9cy5sYXN0Q2hp
bGQKLWRlLm1lcmdlKGYscy5jaGlsZE5vZGVzKSxzPXAuZmlyc3RDaGlsZCxzLnRleHRDb250ZW50
PSIifWVsc2UgZi5wdXNoKHQuY3JlYXRlVGV4dE5vZGUobykpCi1mb3IocC50ZXh0Q29udGVudD0i
IixoPTA7bz1mW2grK107KWlmKHImJmRlLmluQXJyYXkobyxyKT4tMSlpJiZpLnB1c2gobykKLWVs
c2UgaWYobD1kZS5jb250YWlucyhvLm93bmVyRG9jdW1lbnQsbykscz12KHAuYXBwZW5kQ2hpbGQo
byksInNjcmlwdCIpLGwmJmIocyksbilmb3IoYz0wO289c1tjKytdOykkZS50ZXN0KG8udHlwZXx8
IiIpJiZuLnB1c2gobykKLXJldHVybiBwfWZ1bmN0aW9uIHcoKXtyZXR1cm4hMH1mdW5jdGlvbiBF
KCl7cmV0dXJuITF9ZnVuY3Rpb24geCgpe3RyeXtyZXR1cm4gbmUuYWN0aXZlRWxlbWVudH1jYXRj
aChlKXt9fWZ1bmN0aW9uIEMoZSx0LG4scixpLG8pe3ZhciBzLGEKLWlmKCJvYmplY3QiPT10eXBl
b2YgdCl7InN0cmluZyIhPXR5cGVvZiBuJiYocj1yfHxuLG49dm9pZCAwKQotZm9yKGEgaW4gdClD
KGUsYSxuLHIsdFthXSxvKQotcmV0dXJuIGV9aWYobnVsbD09ciYmbnVsbD09aT8oaT1uLHI9bj12
b2lkIDApOm51bGw9PWkmJigic3RyaW5nIj09dHlwZW9mIG4/KGk9cixyPXZvaWQgMCk6KGk9cixy
PW4sbj12b2lkIDApKSwhMT09PWkpaT1FCi1lbHNlIGlmKCFpKXJldHVybiBlCi1yZXR1cm4gMT09
PW8mJihzPWksaT1mdW5jdGlvbihlKXtyZXR1cm4gZGUoKS5vZmYoZSkscy5hcHBseSh0aGlzLGFy
Z3VtZW50cyl9LGkuZ3VpZD1zLmd1aWR8fChzLmd1aWQ9ZGUuZ3VpZCsrKSksZS5lYWNoKGZ1bmN0
aW9uKCl7ZGUuZXZlbnQuYWRkKHRoaXMsdCxpLHIsbil9KX1mdW5jdGlvbiBPKGUsdCl7cmV0dXJu
IGkoZSwidGFibGUiKSYmaSgxMSE9PXQubm9kZVR5cGU/dDp0LmZpcnN0Q2hpbGQsInRyIik/ZGUo
Ij50Ym9keSIsZSlbMF18fGU6ZX1mdW5jdGlvbiBBKGUpe3JldHVybiBlLnR5cGU9KG51bGwhPT1l
LmdldEF0dHJpYnV0ZSgidHlwZSIpKSsiLyIrZS50eXBlLGV9ZnVuY3Rpb24gVChlKXt2YXIgdD1u
dC5leGVjKGUudHlwZSkKLXJldHVybiB0P2UudHlwZT10WzFdOmUucmVtb3ZlQXR0cmlidXRlKCJ0
eXBlIiksZX1mdW5jdGlvbiBTKGUsdCl7dmFyIG4scixpLG8scyxhLHUsbAotaWYoMT09PXQubm9k
ZVR5cGUpe2lmKERlLmhhc0RhdGEoZSkmJihvPURlLmFjY2VzcyhlKSxzPURlLnNldCh0LG8pLGw9
by5ldmVudHMpKXtkZWxldGUgcy5oYW5kbGUscy5ldmVudHM9e30KLWZvcihpIGluIGwpZm9yKG49
MCxyPWxbaV0ubGVuZ3RoO248cjtuKyspZGUuZXZlbnQuYWRkKHQsaSxsW2ldW25dKX1MZS5oYXNE
YXRhKGUpJiYoYT1MZS5hY2Nlc3MoZSksdT1kZS5leHRlbmQoe30sYSksTGUuc2V0KHQsdSkpfX1m
dW5jdGlvbiBSKGUsdCl7dmFyIG49dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpCi0iaW5wdXQiPT09
biYmVmUudGVzdChlLnR5cGUpP3QuY2hlY2tlZD1lLmNoZWNrZWQ6ImlucHV0IiE9PW4mJiJ0ZXh0
YXJlYSIhPT1ufHwodC5kZWZhdWx0VmFsdWU9ZS5kZWZhdWx0VmFsdWUpfWZ1bmN0aW9uIGsoZSx0
LHIsaSl7dD1vZS5hcHBseShbXSx0KQotdmFyIG8scyxhLHUsbCxjLHA9MCxmPWUubGVuZ3RoLGg9
Zi0xLGQ9dFswXSxtPWRlLmlzRnVuY3Rpb24oZCkKLWlmKG18fGY+MSYmInN0cmluZyI9PXR5cGVv
ZiBkJiYhaGUuY2hlY2tDbG9uZSYmdHQudGVzdChkKSlyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKG4p
e3ZhciBvPWUuZXEobikKLW0mJih0WzBdPWQuY2FsbCh0aGlzLG4sby5odG1sKCkpKSxrKG8sdCxy
LGkpfSkKLWlmKGYmJihvPV8odCxlWzBdLm93bmVyRG9jdW1lbnQsITEsZSxpKSxzPW8uZmlyc3RD
aGlsZCwxPT09by5jaGlsZE5vZGVzLmxlbmd0aCYmKG89cyksc3x8aSkpe2ZvcihhPWRlLm1hcCh2
KG8sInNjcmlwdCIpLEEpLHU9YS5sZW5ndGg7cDxmO3ArKylsPW8scCE9PWgmJihsPWRlLmNsb25l
KGwsITAsITApLHUmJmRlLm1lcmdlKGEsdihsLCJzY3JpcHQiKSkpLHIuY2FsbChlW3BdLGwscCkK
LWlmKHUpZm9yKGM9YVthLmxlbmd0aC0xXS5vd25lckRvY3VtZW50LGRlLm1hcChhLFQpLHA9MDtw
PHU7cCsrKWw9YVtwXSwkZS50ZXN0KGwudHlwZXx8IiIpJiYhRGUuYWNjZXNzKGwsImdsb2JhbEV2
YWwiKSYmZGUuY29udGFpbnMoYyxsKSYmKGwuc3JjP2RlLl9ldmFsVXJsJiZkZS5fZXZhbFVybChs
LnNyYyk6bihsLnRleHRDb250ZW50LnJlcGxhY2UocnQsIiIpLGMpKX1yZXR1cm4gZX1mdW5jdGlv
biBOKGUsdCxuKXtmb3IodmFyIHIsaT10P2RlLmZpbHRlcih0LGUpOmUsbz0wO251bGwhPShyPWlb
b10pO28rKylufHwxIT09ci5ub2RlVHlwZXx8ZGUuY2xlYW5EYXRhKHYocikpLHIucGFyZW50Tm9k
ZSYmKG4mJmRlLmNvbnRhaW5zKHIub3duZXJEb2N1bWVudCxyKSYmYih2KHIsInNjcmlwdCIpKSxy
LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQocikpCi1yZXR1cm4gZX1mdW5jdGlvbiBQKGUsdCxuKXt2
YXIgcixpLG8scyxhPWUuc3R5bGUKLXJldHVybiBuPW58fHN0KGUpLG4mJihzPW4uZ2V0UHJvcGVy
dHlWYWx1ZSh0KXx8blt0XSwiIiE9PXN8fGRlLmNvbnRhaW5zKGUub3duZXJEb2N1bWVudCxlKXx8
KHM9ZGUuc3R5bGUoZSx0KSksIWhlLnBpeGVsTWFyZ2luUmlnaHQoKSYmb3QudGVzdChzKSYmaXQu
dGVzdCh0KSYmKHI9YS53aWR0aCxpPWEubWluV2lkdGgsbz1hLm1heFdpZHRoLGEubWluV2lkdGg9
YS5tYXhXaWR0aD1hLndpZHRoPXMscz1uLndpZHRoLGEud2lkdGg9cixhLm1pbldpZHRoPWksYS5t
YXhXaWR0aD1vKSksdm9pZCAwIT09cz9zKyIiOnN9ZnVuY3Rpb24gaihlLHQpe3JldHVybntnZXQ6
ZnVuY3Rpb24oKXtyZXR1cm4gZSgpP3ZvaWQgZGVsZXRlIHRoaXMuZ2V0Oih0aGlzLmdldD10KS5h
cHBseSh0aGlzLGFyZ3VtZW50cyl9fX1mdW5jdGlvbiBEKGUpe2lmKGUgaW4gZnQpcmV0dXJuIGUK
LWZvcih2YXIgdD1lWzBdLnRvVXBwZXJDYXNlKCkrZS5zbGljZSgxKSxuPXB0Lmxlbmd0aDtuLS07
KWlmKChlPXB0W25dK3QpaW4gZnQpcmV0dXJuIGV9ZnVuY3Rpb24gTChlKXt2YXIgdD1kZS5jc3NQ
cm9wc1tlXQotcmV0dXJuIHR8fCh0PWRlLmNzc1Byb3BzW2VdPUQoZSl8fGUpLHR9ZnVuY3Rpb24g
SShlLHQsbil7dmFyIHI9emUuZXhlYyh0KQotcmV0dXJuIHI/TWF0aC5tYXgoMCxyWzJdLShufHww
KSkrKHJbM118fCJweCIpOnR9ZnVuY3Rpb24gTShlLHQsbixyLGkpe3ZhciBvLHM9MAotZm9yKG89
bj09PShyPyJib3JkZXIiOiJjb250ZW50Iik/NDoid2lkdGgiPT09dD8xOjA7bzw0O28rPTIpIm1h
cmdpbiI9PT1uJiYocys9ZGUuY3NzKGUsbitVZVtvXSwhMCxpKSkscj8oImNvbnRlbnQiPT09biYm
KHMtPWRlLmNzcyhlLCJwYWRkaW5nIitVZVtvXSwhMCxpKSksIm1hcmdpbiIhPT1uJiYocy09ZGUu
Y3NzKGUsImJvcmRlciIrVWVbb10rIldpZHRoIiwhMCxpKSkpOihzKz1kZS5jc3MoZSwicGFkZGlu
ZyIrVWVbb10sITAsaSksInBhZGRpbmciIT09biYmKHMrPWRlLmNzcyhlLCJib3JkZXIiK1VlW29d
KyJXaWR0aCIsITAsaSkpKQotcmV0dXJuIHN9ZnVuY3Rpb24gRihlLHQsbil7dmFyIHIsaT1zdChl
KSxvPVAoZSx0LGkpLHM9ImJvcmRlci1ib3giPT09ZGUuY3NzKGUsImJveFNpemluZyIsITEsaSkK
LXJldHVybiBvdC50ZXN0KG8pP286KHI9cyYmKGhlLmJveFNpemluZ1JlbGlhYmxlKCl8fG89PT1l
LnN0eWxlW3RdKSwiYXV0byI9PT1vJiYobz1lWyJvZmZzZXQiK3RbMF0udG9VcHBlckNhc2UoKSt0
LnNsaWNlKDEpXSksKG89cGFyc2VGbG9hdChvKXx8MCkrTShlLHQsbnx8KHM/ImJvcmRlciI6ImNv
bnRlbnQiKSxyLGkpKyJweCIpfWZ1bmN0aW9uIHooZSx0LG4scixpKXtyZXR1cm4gbmV3IHoucHJv
dG90eXBlLmluaXQoZSx0LG4scixpKX1mdW5jdGlvbiBVKCl7ZHQmJighMT09PW5lLmhpZGRlbiYm
ZS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/ZS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoVSk6ZS5zZXRU
aW1lb3V0KFUsZGUuZnguaW50ZXJ2YWwpLGRlLmZ4LnRpY2soKSl9ZnVuY3Rpb24gQigpe3JldHVy
biBlLnNldFRpbWVvdXQoZnVuY3Rpb24oKXtodD12b2lkIDB9KSxodD1kZS5ub3coKX1mdW5jdGlv
biBxKGUsdCl7dmFyIG4scj0wLGk9e2hlaWdodDplfQotZm9yKHQ9dD8xOjA7cjw0O3IrPTItdClu
PVVlW3JdLGlbIm1hcmdpbiIrbl09aVsicGFkZGluZyIrbl09ZQotcmV0dXJuIHQmJihpLm9wYWNp
dHk9aS53aWR0aD1lKSxpfWZ1bmN0aW9uIEgoZSx0LG4pe2Zvcih2YXIgcixpPSgkLnR3ZWVuZXJz
W3RdfHxbXSkuY29uY2F0KCQudHdlZW5lcnNbIioiXSksbz0wLHM9aS5sZW5ndGg7bzxzO28rKylp
ZihyPWlbb10uY2FsbChuLHQsZSkpcmV0dXJuIHJ9ZnVuY3Rpb24gVihlLHQsbil7dmFyIHIsaSxv
LHMsYSx1LGwsYyxwPSJ3aWR0aCJpbiB0fHwiaGVpZ2h0ImluIHQsZj10aGlzLGg9e30sZD1lLnN0
eWxlLG09ZS5ub2RlVHlwZSYmQmUoZSksZz1EZS5nZXQoZSwiZnhzaG93IikKLW4ucXVldWV8fChz
PWRlLl9xdWV1ZUhvb2tzKGUsImZ4IiksbnVsbD09cy51bnF1ZXVlZCYmKHMudW5xdWV1ZWQ9MCxh
PXMuZW1wdHkuZmlyZSxzLmVtcHR5LmZpcmU9ZnVuY3Rpb24oKXtzLnVucXVldWVkfHxhKCl9KSxz
LnVucXVldWVkKyssZi5hbHdheXMoZnVuY3Rpb24oKXtmLmFsd2F5cyhmdW5jdGlvbigpe3MudW5x
dWV1ZWQtLSxkZS5xdWV1ZShlLCJmeCIpLmxlbmd0aHx8cy5lbXB0eS5maXJlKCl9KX0pKQotZm9y
KHIgaW4gdClpZihpPXRbcl0sbXQudGVzdChpKSl7aWYoZGVsZXRlIHRbcl0sbz1vfHwidG9nZ2xl
Ij09PWksaT09PShtPyJoaWRlIjoic2hvdyIpKXtpZigic2hvdyIhPT1pfHwhZ3x8dm9pZCAwPT09
Z1tyXSljb250aW51ZQotbT0hMH1oW3JdPWcmJmdbcl18fGRlLnN0eWxlKGUscil9aWYoKHU9IWRl
LmlzRW1wdHlPYmplY3QodCkpfHwhZGUuaXNFbXB0eU9iamVjdChoKSl7cCYmMT09PWUubm9kZVR5
cGUmJihuLm92ZXJmbG93PVtkLm92ZXJmbG93LGQub3ZlcmZsb3dYLGQub3ZlcmZsb3dZXSxsPWcm
JmcuZGlzcGxheSxudWxsPT1sJiYobD1EZS5nZXQoZSwiZGlzcGxheSIpKSxjPWRlLmNzcyhlLCJk
aXNwbGF5IiksIm5vbmUiPT09YyYmKGw/Yz1sOih5KFtlXSwhMCksbD1lLnN0eWxlLmRpc3BsYXl8
fGwsYz1kZS5jc3MoZSwiZGlzcGxheSIpLHkoW2VdKSkpLCgiaW5saW5lIj09PWN8fCJpbmxpbmUt
YmxvY2siPT09YyYmbnVsbCE9bCkmJiJub25lIj09PWRlLmNzcyhlLCJmbG9hdCIpJiYodXx8KGYu
ZG9uZShmdW5jdGlvbigpe2QuZGlzcGxheT1sfSksbnVsbD09bCYmKGM9ZC5kaXNwbGF5LGw9Im5v
bmUiPT09Yz8iIjpjKSksZC5kaXNwbGF5PSJpbmxpbmUtYmxvY2siKSksbi5vdmVyZmxvdyYmKGQu
b3ZlcmZsb3c9ImhpZGRlbiIsZi5hbHdheXMoZnVuY3Rpb24oKXtkLm92ZXJmbG93PW4ub3ZlcmZs
b3dbMF0sZC5vdmVyZmxvd1g9bi5vdmVyZmxvd1sxXSxkLm92ZXJmbG93WT1uLm92ZXJmbG93WzJd
fSkpLHU9ITEKLWZvcihyIGluIGgpdXx8KGc/ImhpZGRlbiJpbiBnJiYobT1nLmhpZGRlbik6Zz1E
ZS5hY2Nlc3MoZSwiZnhzaG93Iix7ZGlzcGxheTpsfSksbyYmKGcuaGlkZGVuPSFtKSxtJiZ5KFtl
XSwhMCksZi5kb25lKGZ1bmN0aW9uKCl7bXx8eShbZV0pLERlLnJlbW92ZShlLCJmeHNob3ciKQot
Zm9yKHIgaW4gaClkZS5zdHlsZShlLHIsaFtyXSl9KSksdT1IKG0/Z1tyXTowLHIsZiksciBpbiBn
fHwoZ1tyXT11LnN0YXJ0LG0mJih1LmVuZD11LnN0YXJ0LHUuc3RhcnQ9MCkpfX1mdW5jdGlvbiBX
KGUsdCl7dmFyIG4scixpLG8scwotZm9yKG4gaW4gZSlpZihyPWRlLmNhbWVsQ2FzZShuKSxpPXRb
cl0sbz1lW25dLEFycmF5LmlzQXJyYXkobykmJihpPW9bMV0sbz1lW25dPW9bMF0pLG4hPT1yJiYo
ZVtyXT1vLGRlbGV0ZSBlW25dKSwocz1kZS5jc3NIb29rc1tyXSkmJiJleHBhbmQiaW4gcyl7bz1z
LmV4cGFuZChvKSxkZWxldGUgZVtyXQotZm9yKG4gaW4gbyluIGluIGV8fChlW25dPW9bbl0sdFtu
XT1pKX1lbHNlIHRbcl09aX1mdW5jdGlvbiAkKGUsdCxuKXt2YXIgcixpLG89MCxzPSQucHJlZmls
dGVycy5sZW5ndGgsYT1kZS5EZWZlcnJlZCgpLmFsd2F5cyhmdW5jdGlvbigpe2RlbGV0ZSB1LmVs
ZW19KSx1PWZ1bmN0aW9uKCl7aWYoaSlyZXR1cm4hMQotZm9yKHZhciB0PWh0fHxCKCksbj1NYXRo
Lm1heCgwLGwuc3RhcnRUaW1lK2wuZHVyYXRpb24tdCkscj1uL2wuZHVyYXRpb258fDAsbz0xLXIs
cz0wLHU9bC50d2VlbnMubGVuZ3RoO3M8dTtzKyspbC50d2VlbnNbc10ucnVuKG8pCi1yZXR1cm4g
YS5ub3RpZnlXaXRoKGUsW2wsbyxuXSksbzwxJiZ1P246KHV8fGEubm90aWZ5V2l0aChlLFtsLDEs
MF0pLGEucmVzb2x2ZVdpdGgoZSxbbF0pLCExKX0sbD1hLnByb21pc2Uoe2VsZW06ZSxwcm9wczpk
ZS5leHRlbmQoe30sdCksb3B0czpkZS5leHRlbmQoITAse3NwZWNpYWxFYXNpbmc6e30sZWFzaW5n
OmRlLmVhc2luZy5fZGVmYXVsdH0sbiksb3JpZ2luYWxQcm9wZXJ0aWVzOnQsb3JpZ2luYWxPcHRp
b25zOm4sc3RhcnRUaW1lOmh0fHxCKCksZHVyYXRpb246bi5kdXJhdGlvbix0d2VlbnM6W10sY3Jl
YXRlVHdlZW46ZnVuY3Rpb24odCxuKXt2YXIgcj1kZS5Ud2VlbihlLGwub3B0cyx0LG4sbC5vcHRz
LnNwZWNpYWxFYXNpbmdbdF18fGwub3B0cy5lYXNpbmcpCi1yZXR1cm4gbC50d2VlbnMucHVzaChy
KSxyfSxzdG9wOmZ1bmN0aW9uKHQpe3ZhciBuPTAscj10P2wudHdlZW5zLmxlbmd0aDowCi1pZihp
KXJldHVybiB0aGlzCi1mb3IoaT0hMDtuPHI7bisrKWwudHdlZW5zW25dLnJ1bigxKQotcmV0dXJu
IHQ/KGEubm90aWZ5V2l0aChlLFtsLDEsMF0pLGEucmVzb2x2ZVdpdGgoZSxbbCx0XSkpOmEucmVq
ZWN0V2l0aChlLFtsLHRdKSx0aGlzfX0pLGM9bC5wcm9wcwotZm9yKFcoYyxsLm9wdHMuc3BlY2lh
bEVhc2luZyk7bzxzO28rKylpZihyPSQucHJlZmlsdGVyc1tvXS5jYWxsKGwsZSxjLGwub3B0cykp
cmV0dXJuIGRlLmlzRnVuY3Rpb24oci5zdG9wKSYmKGRlLl9xdWV1ZUhvb2tzKGwuZWxlbSxsLm9w
dHMucXVldWUpLnN0b3A9ZGUucHJveHkoci5zdG9wLHIpKSxyCi1yZXR1cm4gZGUubWFwKGMsSCxs
KSxkZS5pc0Z1bmN0aW9uKGwub3B0cy5zdGFydCkmJmwub3B0cy5zdGFydC5jYWxsKGUsbCksbC5w
cm9ncmVzcyhsLm9wdHMucHJvZ3Jlc3MpLmRvbmUobC5vcHRzLmRvbmUsbC5vcHRzLmNvbXBsZXRl
KS5mYWlsKGwub3B0cy5mYWlsKS5hbHdheXMobC5vcHRzLmFsd2F5cyksZGUuZngudGltZXIoZGUu
ZXh0ZW5kKHUse2VsZW06ZSxhbmltOmwscXVldWU6bC5vcHRzLnF1ZXVlfSkpLGx9ZnVuY3Rpb24g
RyhlKXtyZXR1cm4oZS5tYXRjaChSZSl8fFtdKS5qb2luKCIgIil9ZnVuY3Rpb24gSyhlKXtyZXR1
cm4gZS5nZXRBdHRyaWJ1dGUmJmUuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIn1mdW5jdGlvbiBR
KGUsdCxuLHIpe3ZhciBpCi1pZihBcnJheS5pc0FycmF5KHQpKWRlLmVhY2godCxmdW5jdGlvbih0
LGkpe258fEF0LnRlc3QoZSk/cihlLGkpOlEoZSsiWyIrKCJvYmplY3QiPT10eXBlb2YgaSYmbnVs
bCE9aT90OiIiKSsiXSIsaSxuLHIpfSkKLWVsc2UgaWYobnx8Im9iamVjdCIhPT1kZS50eXBlKHQp
KXIoZSx0KQotZWxzZSBmb3IoaSBpbiB0KVEoZSsiWyIraSsiXSIsdFtpXSxuLHIpfWZ1bmN0aW9u
IFkoZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbil7InN0cmluZyIhPXR5cGVvZiB0JiYobj10LHQ9Iioi
KQotdmFyIHIsaT0wLG89dC50b0xvd2VyQ2FzZSgpLm1hdGNoKFJlKXx8W10KLWlmKGRlLmlzRnVu
Y3Rpb24obikpZm9yKDtyPW9baSsrXTspIisiPT09clswXT8ocj1yLnNsaWNlKDEpfHwiKiIsKGVb
cl09ZVtyXXx8W10pLnVuc2hpZnQobikpOihlW3JdPWVbcl18fFtdKS5wdXNoKG4pfX1mdW5jdGlv
biBKKGUsdCxuLHIpe2Z1bmN0aW9uIGkoYSl7dmFyIHUKLXJldHVybiBvW2FdPSEwLGRlLmVhY2go
ZVthXXx8W10sZnVuY3Rpb24oZSxhKXt2YXIgbD1hKHQsbixyKQotcmV0dXJuInN0cmluZyIhPXR5
cGVvZiBsfHxzfHxvW2xdP3M/ISh1PWwpOnZvaWQgMDoodC5kYXRhVHlwZXMudW5zaGlmdChsKSxp
KGwpLCExKX0pLHV9dmFyIG89e30scz1lPT09RnQKLXJldHVybiBpKHQuZGF0YVR5cGVzWzBdKXx8
IW9bIioiXSYmaSgiKiIpfWZ1bmN0aW9uIFgoZSx0KXt2YXIgbixyLGk9ZGUuYWpheFNldHRpbmdz
LmZsYXRPcHRpb25zfHx7fQotZm9yKG4gaW4gdCl2b2lkIDAhPT10W25dJiYoKGlbbl0/ZTpyfHwo
cj17fSkpW25dPXRbbl0pCi1yZXR1cm4gciYmZGUuZXh0ZW5kKCEwLGUsciksZX1mdW5jdGlvbiBa
KGUsdCxuKXtmb3IodmFyIHIsaSxvLHMsYT1lLmNvbnRlbnRzLHU9ZS5kYXRhVHlwZXM7IioiPT09
dVswXTspdS5zaGlmdCgpLHZvaWQgMD09PXImJihyPWUubWltZVR5cGV8fHQuZ2V0UmVzcG9uc2VI
ZWFkZXIoIkNvbnRlbnQtVHlwZSIpKQotaWYocilmb3IoaSBpbiBhKWlmKGFbaV0mJmFbaV0udGVz
dChyKSl7dS51bnNoaWZ0KGkpCi1icmVha31pZih1WzBdaW4gbilvPXVbMF0KLWVsc2V7Zm9yKGkg
aW4gbil7aWYoIXVbMF18fGUuY29udmVydGVyc1tpKyIgIit1WzBdXSl7bz1pCi1icmVha31zfHwo
cz1pKX1vPW98fHN9aWYobylyZXR1cm4gbyE9PXVbMF0mJnUudW5zaGlmdChvKSxuW29dfWZ1bmN0
aW9uIGVlKGUsdCxuLHIpe3ZhciBpLG8scyxhLHUsbD17fSxjPWUuZGF0YVR5cGVzLnNsaWNlKCkK
LWlmKGNbMV0pZm9yKHMgaW4gZS5jb252ZXJ0ZXJzKWxbcy50b0xvd2VyQ2FzZSgpXT1lLmNvbnZl
cnRlcnNbc10KLWZvcihvPWMuc2hpZnQoKTtvOylpZihlLnJlc3BvbnNlRmllbGRzW29dJiYobltl
LnJlc3BvbnNlRmllbGRzW29dXT10KSwhdSYmciYmZS5kYXRhRmlsdGVyJiYodD1lLmRhdGFGaWx0
ZXIodCxlLmRhdGFUeXBlKSksdT1vLG89Yy5zaGlmdCgpKWlmKCIqIj09PW8pbz11Ci1lbHNlIGlm
KCIqIiE9PXUmJnUhPT1vKXtpZighKHM9bFt1KyIgIitvXXx8bFsiKiAiK29dKSlmb3IoaSBpbiBs
KWlmKGE9aS5zcGxpdCgiICIpLGFbMV09PT1vJiYocz1sW3UrIiAiK2FbMF1dfHxsWyIqICIrYVsw
XV0pKXshMD09PXM/cz1sW2ldOiEwIT09bFtpXSYmKG89YVswXSxjLnVuc2hpZnQoYVsxXSkpCi1i
cmVha31pZighMCE9PXMpaWYocyYmZS50aHJvd3MpdD1zKHQpCi1lbHNlIHRyeXt0PXModCl9Y2F0
Y2goZSl7cmV0dXJue3N0YXRlOiJwYXJzZXJlcnJvciIsZXJyb3I6cz9lOiJObyBjb252ZXJzaW9u
IGZyb20gIit1KyIgdG8gIitvfX19cmV0dXJue3N0YXRlOiJzdWNjZXNzIixkYXRhOnR9fXZhciB0
ZT1bXSxuZT1lLmRvY3VtZW50LHJlPU9iamVjdC5nZXRQcm90b3R5cGVPZixpZT10ZS5zbGljZSxv
ZT10ZS5jb25jYXQsc2U9dGUucHVzaCxhZT10ZS5pbmRleE9mLHVlPXt9LGxlPXVlLnRvU3RyaW5n
LGNlPXVlLmhhc093blByb3BlcnR5LHBlPWNlLnRvU3RyaW5nLGZlPXBlLmNhbGwoT2JqZWN0KSxo
ZT17fSxkZT1mdW5jdGlvbihlLHQpe3JldHVybiBuZXcgZGUuZm4uaW5pdChlLHQpfSxtZT0vXltc
c1x1RkVGRlx4QTBdK3xbXHNcdUZFRkZceEEwXSskL2csZ2U9L14tbXMtLyx5ZT0vLShbYS16XSkv
Zyx2ZT1mdW5jdGlvbihlLHQpe3JldHVybiB0LnRvVXBwZXJDYXNlKCl9Ci1kZS5mbj1kZS5wcm90
b3R5cGU9e2pxdWVyeToiMy4yLjEiLGNvbnN0cnVjdG9yOmRlLGxlbmd0aDowLHRvQXJyYXk6ZnVu
Y3Rpb24oKXtyZXR1cm4gaWUuY2FsbCh0aGlzKX0sZ2V0OmZ1bmN0aW9uKGUpe3JldHVybiBudWxs
PT1lP2llLmNhbGwodGhpcyk6ZTwwP3RoaXNbZSt0aGlzLmxlbmd0aF06dGhpc1tlXX0scHVzaFN0
YWNrOmZ1bmN0aW9uKGUpe3ZhciB0PWRlLm1lcmdlKHRoaXMuY29uc3RydWN0b3IoKSxlKQotcmV0
dXJuIHQucHJldk9iamVjdD10aGlzLHR9LGVhY2g6ZnVuY3Rpb24oZSl7cmV0dXJuIGRlLmVhY2go
dGhpcyxlKX0sbWFwOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnB1c2hTdGFjayhkZS5tYXAodGhp
cyxmdW5jdGlvbih0LG4pe3JldHVybiBlLmNhbGwodCxuLHQpfSkpfSxzbGljZTpmdW5jdGlvbigp
e3JldHVybiB0aGlzLnB1c2hTdGFjayhpZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSxmaXJzdDpm
dW5jdGlvbigpe3JldHVybiB0aGlzLmVxKDApfSxsYXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMu
ZXEoLTEpfSxlcTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmxlbmd0aCxuPStlKyhlPDA/dDowKQot
cmV0dXJuIHRoaXMucHVzaFN0YWNrKG4+PTAmJm48dD9bdGhpc1tuXV06W10pfSxlbmQ6ZnVuY3Rp
b24oKXtyZXR1cm4gdGhpcy5wcmV2T2JqZWN0fHx0aGlzLmNvbnN0cnVjdG9yKCl9LHB1c2g6c2Us
c29ydDp0ZS5zb3J0LHNwbGljZTp0ZS5zcGxpY2V9LGRlLmV4dGVuZD1kZS5mbi5leHRlbmQ9ZnVu
Y3Rpb24oKXt2YXIgZSx0LG4scixpLG8scz1hcmd1bWVudHNbMF18fHt9LGE9MSx1PWFyZ3VtZW50
cy5sZW5ndGgsbD0hMQotZm9yKCJib29sZWFuIj09dHlwZW9mIHMmJihsPXMscz1hcmd1bWVudHNb
YV18fHt9LGErKyksIm9iamVjdCI9PXR5cGVvZiBzfHxkZS5pc0Z1bmN0aW9uKHMpfHwocz17fSks
YT09PXUmJihzPXRoaXMsYS0tKTthPHU7YSsrKWlmKG51bGwhPShlPWFyZ3VtZW50c1thXSkpZm9y
KHQgaW4gZSluPXNbdF0scj1lW3RdLHMhPT1yJiYobCYmciYmKGRlLmlzUGxhaW5PYmplY3Qocil8
fChpPUFycmF5LmlzQXJyYXkocikpKT8oaT8oaT0hMSxvPW4mJkFycmF5LmlzQXJyYXkobik/bjpb
XSk6bz1uJiZkZS5pc1BsYWluT2JqZWN0KG4pP246e30sc1t0XT1kZS5leHRlbmQobCxvLHIpKTp2
b2lkIDAhPT1yJiYoc1t0XT1yKSkKLXJldHVybiBzfSxkZS5leHRlbmQoe2V4cGFuZG86ImpRdWVy
eSIrKCIzLjIuMSIrTWF0aC5yYW5kb20oKSkucmVwbGFjZSgvXEQvZywiIiksaXNSZWFkeTohMCxl
cnJvcjpmdW5jdGlvbihlKXt0aHJvdyBuZXcgRXJyb3IoZSl9LG5vb3A6ZnVuY3Rpb24oKXt9LGlz
RnVuY3Rpb246ZnVuY3Rpb24oZSl7cmV0dXJuImZ1bmN0aW9uIj09PWRlLnR5cGUoZSl9LGlzV2lu
ZG93OmZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT1lJiZlPT09ZS53aW5kb3d9LGlzTnVtZXJpYzpm
dW5jdGlvbihlKXt2YXIgdD1kZS50eXBlKGUpCi1yZXR1cm4oIm51bWJlciI9PT10fHwic3RyaW5n
Ij09PXQpJiYhaXNOYU4oZS1wYXJzZUZsb2F0KGUpKX0saXNQbGFpbk9iamVjdDpmdW5jdGlvbihl
KXt2YXIgdCxuCi1yZXR1cm4hKCFlfHwiW29iamVjdCBPYmplY3RdIiE9PWxlLmNhbGwoZSkpJiYo
ISh0PXJlKGUpKXx8ImZ1bmN0aW9uIj09dHlwZW9mKG49Y2UuY2FsbCh0LCJjb25zdHJ1Y3RvciIp
JiZ0LmNvbnN0cnVjdG9yKSYmcGUuY2FsbChuKT09PWZlKX0saXNFbXB0eU9iamVjdDpmdW5jdGlv
bihlKXt2YXIgdAotZm9yKHQgaW4gZSlyZXR1cm4hMQotcmV0dXJuITB9LHR5cGU6ZnVuY3Rpb24o
ZSl7cmV0dXJuIG51bGw9PWU/ZSsiIjoib2JqZWN0Ij09dHlwZW9mIGV8fCJmdW5jdGlvbiI9PXR5
cGVvZiBlP3VlW2xlLmNhbGwoZSldfHwib2JqZWN0Ijp0eXBlb2YgZX0sZ2xvYmFsRXZhbDpmdW5j
dGlvbihlKXtuKGUpfSxjYW1lbENhc2U6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZShnZSwi
bXMtIikucmVwbGFjZSh5ZSx2ZSl9LGVhY2g6ZnVuY3Rpb24oZSx0KXt2YXIgbixpPTAKLWlmKHIo
ZSkpZm9yKG49ZS5sZW5ndGg7aTxuJiYhMSE9PXQuY2FsbChlW2ldLGksZVtpXSk7aSsrKTtlbHNl
IGZvcihpIGluIGUpaWYoITE9PT10LmNhbGwoZVtpXSxpLGVbaV0pKWJyZWFrCi1yZXR1cm4gZX0s
dHJpbTpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT8iIjooZSsiIikucmVwbGFjZShtZSwiIil9
LG1ha2VBcnJheTpmdW5jdGlvbihlLHQpe3ZhciBuPXR8fFtdCi1yZXR1cm4gbnVsbCE9ZSYmKHIo
T2JqZWN0KGUpKT9kZS5tZXJnZShuLCJzdHJpbmciPT10eXBlb2YgZT9bZV06ZSk6c2UuY2FsbChu
LGUpKSxufSxpbkFycmF5OmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbnVsbD09dD8tMTphZS5jYWxs
KHQsZSxuKX0sbWVyZ2U6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49K3QubGVuZ3RoLHI9MCxpPWUu
bGVuZ3RoO3I8bjtyKyspZVtpKytdPXRbcl0KLXJldHVybiBlLmxlbmd0aD1pLGV9LGdyZXA6ZnVu
Y3Rpb24oZSx0LG4pe2Zvcih2YXIgcj1bXSxpPTAsbz1lLmxlbmd0aCxzPSFuO2k8bztpKyspIXQo
ZVtpXSxpKSE9PXMmJnIucHVzaChlW2ldKQotcmV0dXJuIHJ9LG1hcDpmdW5jdGlvbihlLHQsbil7
dmFyIGksbyxzPTAsYT1bXQotaWYocihlKSlmb3IoaT1lLmxlbmd0aDtzPGk7cysrKW51bGwhPShv
PXQoZVtzXSxzLG4pKSYmYS5wdXNoKG8pCi1lbHNlIGZvcihzIGluIGUpbnVsbCE9KG89dChlW3Nd
LHMsbikpJiZhLnB1c2gobykKLXJldHVybiBvZS5hcHBseShbXSxhKX0sZ3VpZDoxLHByb3h5OmZ1
bmN0aW9uKGUsdCl7dmFyIG4scixpCi1pZigic3RyaW5nIj09dHlwZW9mIHQmJihuPWVbdF0sdD1l
LGU9biksZGUuaXNGdW5jdGlvbihlKSlyZXR1cm4gcj1pZS5jYWxsKGFyZ3VtZW50cywyKSxpPWZ1
bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkodHx8dGhpcyxyLmNvbmNhdChpZS5jYWxsKGFyZ3VtZW50
cykpKX0saS5ndWlkPWUuZ3VpZD1lLmd1aWR8fGRlLmd1aWQrKyxpfSxub3c6RGF0ZS5ub3csc3Vw
cG9ydDpoZX0pLCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihkZS5mbltTeW1ib2wuaXRlcmF0
b3JdPXRlW1N5bWJvbC5pdGVyYXRvcl0pLGRlLmVhY2goIkJvb2xlYW4gTnVtYmVyIFN0cmluZyBG
dW5jdGlvbiBBcnJheSBEYXRlIFJlZ0V4cCBPYmplY3QgRXJyb3IgU3ltYm9sIi5zcGxpdCgiICIp
LGZ1bmN0aW9uKGUsdCl7dWVbIltvYmplY3QgIit0KyJdIl09dC50b0xvd2VyQ2FzZSgpfSkKLXZh
ciBiZT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUsdCxuLHIpe3ZhciBpLG8scyxhLHUsYyxmLGg9
dCYmdC5vd25lckRvY3VtZW50LGQ9dD90Lm5vZGVUeXBlOjkKLWlmKG49bnx8W10sInN0cmluZyIh
PXR5cGVvZiBlfHwhZXx8MSE9PWQmJjkhPT1kJiYxMSE9PWQpcmV0dXJuIG4KLWlmKCFyJiYoKHQ/
dC5vd25lckRvY3VtZW50fHx0OnopIT09TiYmayh0KSx0PXR8fE4saikpe2lmKDExIT09ZCYmKHU9
bWUuZXhlYyhlKSkpaWYoaT11WzFdKXtpZig5PT09ZCl7aWYoIShzPXQuZ2V0RWxlbWVudEJ5SWQo
aSkpKXJldHVybiBuCi1pZihzLmlkPT09aSlyZXR1cm4gbi5wdXNoKHMpLG59ZWxzZSBpZihoJiYo
cz1oLmdldEVsZW1lbnRCeUlkKGkpKSYmTSh0LHMpJiZzLmlkPT09aSlyZXR1cm4gbi5wdXNoKHMp
LG59ZWxzZXtpZih1WzJdKXJldHVybiBZLmFwcGx5KG4sdC5nZXRFbGVtZW50c0J5VGFnTmFtZShl
KSksbgotaWYoKGk9dVszXSkmJl8uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSYmdC5nZXRFbGVtZW50
c0J5Q2xhc3NOYW1lKXJldHVybiBZLmFwcGx5KG4sdC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGkp
KSxufWlmKF8ucXNhJiYhVltlKyIgIl0mJighRHx8IUQudGVzdChlKSkpe2lmKDEhPT1kKWg9dCxm
PWUKLWVsc2UgaWYoIm9iamVjdCIhPT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpe2ZvcigoYT10
LmdldEF0dHJpYnV0ZSgiaWQiKSk/YT1hLnJlcGxhY2UoYmUsX2UpOnQuc2V0QXR0cmlidXRlKCJp
ZCIsYT1GKSxjPUMoZSksbz1jLmxlbmd0aDtvLS07KWNbb109IiMiK2ErIiAiK3AoY1tvXSkKLWY9
Yy5qb2luKCIsIiksaD1nZS50ZXN0KGUpJiZsKHQucGFyZW50Tm9kZSl8fHR9aWYoZil0cnl7cmV0
dXJuIFkuYXBwbHkobixoLnF1ZXJ5U2VsZWN0b3JBbGwoZikpLG59Y2F0Y2goZSl7fWZpbmFsbHl7
YT09PUYmJnQucmVtb3ZlQXR0cmlidXRlKCJpZCIpfX19cmV0dXJuIEEoZS5yZXBsYWNlKG9lLCIk
MSIpLHQsbixyKX1mdW5jdGlvbiBuKCl7ZnVuY3Rpb24gZShuLHIpe3JldHVybiB0LnB1c2gobisi
ICIpPncuY2FjaGVMZW5ndGgmJmRlbGV0ZSBlW3Quc2hpZnQoKV0sZVtuKyIgIl09cn12YXIgdD1b
XQotcmV0dXJuIGV9ZnVuY3Rpb24gcihlKXtyZXR1cm4gZVtGXT0hMCxlfWZ1bmN0aW9uIGkoZSl7
dmFyIHQ9Ti5jcmVhdGVFbGVtZW50KCJmaWVsZHNldCIpCi10cnl7cmV0dXJuISFlKHQpfWNhdGNo
KGUpe3JldHVybiExfWZpbmFsbHl7dC5wYXJlbnROb2RlJiZ0LnBhcmVudE5vZGUucmVtb3ZlQ2hp
bGQodCksdD1udWxsfX1mdW5jdGlvbiBvKGUsdCl7Zm9yKHZhciBuPWUuc3BsaXQoInwiKSxyPW4u
bGVuZ3RoO3ItLTspdy5hdHRySGFuZGxlW25bcl1dPXR9ZnVuY3Rpb24gcyhlLHQpe3ZhciBuPXQm
JmUscj1uJiYxPT09ZS5ub2RlVHlwZSYmMT09PXQubm9kZVR5cGUmJmUuc291cmNlSW5kZXgtdC5z
b3VyY2VJbmRleAotaWYocilyZXR1cm4gcgotaWYobilmb3IoO249bi5uZXh0U2libGluZzspaWYo
bj09PXQpcmV0dXJuLTEKLXJldHVybiBlPzE6LTF9ZnVuY3Rpb24gYShlKXtyZXR1cm4gZnVuY3Rp
b24odCl7cmV0dXJuImZvcm0iaW4gdD90LnBhcmVudE5vZGUmJiExPT09dC5kaXNhYmxlZD8ibGFi
ZWwiaW4gdD8ibGFiZWwiaW4gdC5wYXJlbnROb2RlP3QucGFyZW50Tm9kZS5kaXNhYmxlZD09PWU6
dC5kaXNhYmxlZD09PWU6dC5pc0Rpc2FibGVkPT09ZXx8dC5pc0Rpc2FibGVkIT09IWUmJkVlKHQp
PT09ZTp0LmRpc2FibGVkPT09ZToibGFiZWwiaW4gdCYmdC5kaXNhYmxlZD09PWV9fWZ1bmN0aW9u
IHUoZSl7cmV0dXJuIHIoZnVuY3Rpb24odCl7cmV0dXJuIHQ9K3QscihmdW5jdGlvbihuLHIpe2Zv
cih2YXIgaSxvPWUoW10sbi5sZW5ndGgsdCkscz1vLmxlbmd0aDtzLS07KW5baT1vW3NdXSYmKG5b
aV09IShyW2ldPW5baV0pKX0pfSl9ZnVuY3Rpb24gbChlKXtyZXR1cm4gZSYmdm9pZCAwIT09ZS5n
ZXRFbGVtZW50c0J5VGFnTmFtZSYmZX1mdW5jdGlvbiBjKCl7fWZ1bmN0aW9uIHAoZSl7Zm9yKHZh
ciB0PTAsbj1lLmxlbmd0aCxyPSIiO3Q8bjt0Kyspcis9ZVt0XS52YWx1ZQotcmV0dXJuIHJ9ZnVu
Y3Rpb24gZihlLHQsbil7dmFyIHI9dC5kaXIsaT10Lm5leHQsbz1pfHxyLHM9biYmInBhcmVudE5v
ZGUiPT09byxhPUIrKwotcmV0dXJuIHQuZmlyc3Q/ZnVuY3Rpb24odCxuLGkpe2Zvcig7dD10W3Jd
OylpZigxPT09dC5ub2RlVHlwZXx8cylyZXR1cm4gZSh0LG4saSkKLXJldHVybiExfTpmdW5jdGlv
bih0LG4sdSl7dmFyIGwsYyxwLGY9W1UsYV0KLWlmKHUpe2Zvcig7dD10W3JdOylpZigoMT09PXQu
bm9kZVR5cGV8fHMpJiZlKHQsbix1KSlyZXR1cm4hMH1lbHNlIGZvcig7dD10W3JdOylpZigxPT09
dC5ub2RlVHlwZXx8cylpZihwPXRbRl18fCh0W0ZdPXt9KSxjPXBbdC51bmlxdWVJRF18fChwW3Qu
dW5pcXVlSURdPXt9KSxpJiZpPT09dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKXQ9dFtyXXx8dAot
ZWxzZXtpZigobD1jW29dKSYmbFswXT09PVUmJmxbMV09PT1hKXJldHVybiBmWzJdPWxbMl0KLWlm
KGNbb109ZixmWzJdPWUodCxuLHUpKXJldHVybiEwfXJldHVybiExfX1mdW5jdGlvbiBoKGUpe3Jl
dHVybiBlLmxlbmd0aD4xP2Z1bmN0aW9uKHQsbixyKXtmb3IodmFyIGk9ZS5sZW5ndGg7aS0tOylp
ZighZVtpXSh0LG4scikpcmV0dXJuITEKLXJldHVybiEwfTplWzBdfWZ1bmN0aW9uIGQoZSxuLHIp
e2Zvcih2YXIgaT0wLG89bi5sZW5ndGg7aTxvO2krKyl0KGUsbltpXSxyKQotcmV0dXJuIHJ9ZnVu
Y3Rpb24gbShlLHQsbixyLGkpe2Zvcih2YXIgbyxzPVtdLGE9MCx1PWUubGVuZ3RoLGw9bnVsbCE9
dDthPHU7YSsrKShvPWVbYV0pJiYobiYmIW4obyxyLGkpfHwocy5wdXNoKG8pLGwmJnQucHVzaChh
KSkpCi1yZXR1cm4gc31mdW5jdGlvbiBnKGUsdCxuLGksbyxzKXtyZXR1cm4gaSYmIWlbRl0mJihp
PWcoaSkpLG8mJiFvW0ZdJiYobz1nKG8scykpLHIoZnVuY3Rpb24ocixzLGEsdSl7dmFyIGwsYyxw
LGY9W10saD1bXSxnPXMubGVuZ3RoLHk9cnx8ZCh0fHwiKiIsYS5ub2RlVHlwZT9bYV06YSxbXSks
dj0hZXx8IXImJnQ/eTptKHksZixlLGEsdSksYj1uP298fChyP2U6Z3x8aSk/W106czp2Ci1pZihu
JiZuKHYsYixhLHUpLGkpZm9yKGw9bShiLGgpLGkobCxbXSxhLHUpLGM9bC5sZW5ndGg7Yy0tOyko
cD1sW2NdKSYmKGJbaFtjXV09ISh2W2hbY11dPXApKQotaWYocil7aWYob3x8ZSl7aWYobyl7Zm9y
KGw9W10sYz1iLmxlbmd0aDtjLS07KShwPWJbY10pJiZsLnB1c2godltjXT1wKQotbyhudWxsLGI9
W10sbCx1KX1mb3IoYz1iLmxlbmd0aDtjLS07KShwPWJbY10pJiYobD1vP1gocixwKTpmW2NdKT4t
MSYmKHJbbF09IShzW2xdPXApKX19ZWxzZSBiPW0oYj09PXM/Yi5zcGxpY2UoZyxiLmxlbmd0aCk6
Yiksbz9vKG51bGwscyxiLHUpOlkuYXBwbHkocyxiKX0pfWZ1bmN0aW9uIHkoZSl7Zm9yKHZhciB0
LG4scixpPWUubGVuZ3RoLG89dy5yZWxhdGl2ZVtlWzBdLnR5cGVdLHM9b3x8dy5yZWxhdGl2ZVsi
ICJdLGE9bz8xOjAsdT1mKGZ1bmN0aW9uKGUpe3JldHVybiBlPT09dH0scywhMCksbD1mKGZ1bmN0
aW9uKGUpe3JldHVybiBYKHQsZSk+LTF9LHMsITApLGM9W2Z1bmN0aW9uKGUsbixyKXt2YXIgaT0h
byYmKHJ8fG4hPT1UKXx8KCh0PW4pLm5vZGVUeXBlP3UoZSxuLHIpOmwoZSxuLHIpKQotcmV0dXJu
IHQ9bnVsbCxpfV07YTxpO2ErKylpZihuPXcucmVsYXRpdmVbZVthXS50eXBlXSljPVtmKGgoYyks
bildCi1lbHNle2lmKG49dy5maWx0ZXJbZVthXS50eXBlXS5hcHBseShudWxsLGVbYV0ubWF0Y2hl
cyksbltGXSl7Zm9yKHI9KythO3I8aSYmIXcucmVsYXRpdmVbZVtyXS50eXBlXTtyKyspO3JldHVy
biBnKGE+MSYmaChjKSxhPjEmJnAoZS5zbGljZSgwLGEtMSkuY29uY2F0KHt2YWx1ZToiICI9PT1l
W2EtMl0udHlwZT8iKiI6IiJ9KSkucmVwbGFjZShvZSwiJDEiKSxuLGE8ciYmeShlLnNsaWNlKGEs
cikpLHI8aSYmeShlPWUuc2xpY2UocikpLHI8aSYmcChlKSl9Yy5wdXNoKG4pfXJldHVybiBoKGMp
fWZ1bmN0aW9uIHYoZSxuKXt2YXIgaT1uLmxlbmd0aD4wLG89ZS5sZW5ndGg+MCxzPWZ1bmN0aW9u
KHIscyxhLHUsbCl7dmFyIGMscCxmLGg9MCxkPSIwIixnPXImJltdLHk9W10sdj1ULGI9cnx8byYm
dy5maW5kLlRBRygiKiIsbCksXz1VKz1udWxsPT12PzE6TWF0aC5yYW5kb20oKXx8LjEsRT1iLmxl
bmd0aAotZm9yKGwmJihUPXM9PT1OfHxzfHxsKTtkIT09RSYmbnVsbCE9KGM9YltkXSk7ZCsrKXtp
ZihvJiZjKXtmb3IocD0wLHN8fGMub3duZXJEb2N1bWVudD09PU58fChrKGMpLGE9IWopO2Y9ZVtw
KytdOylpZihmKGMsc3x8TixhKSl7dS5wdXNoKGMpCi1icmVha31sJiYoVT1fKX1pJiYoKGM9IWYm
JmMpJiZoLS0sciYmZy5wdXNoKGMpKX1pZihoKz1kLGkmJmQhPT1oKXtmb3IocD0wO2Y9bltwKytd
OylmKGcseSxzLGEpCi1pZihyKXtpZihoPjApZm9yKDtkLS07KWdbZF18fHlbZF18fCh5W2RdPUsu
Y2FsbCh1KSkKLXk9bSh5KX1ZLmFwcGx5KHUseSksbCYmIXImJnkubGVuZ3RoPjAmJmgrbi5sZW5n
dGg+MSYmdC51bmlxdWVTb3J0KHUpfXJldHVybiBsJiYoVT1fLFQ9diksZ30KLXJldHVybiBpP3Io
cyk6c312YXIgYixfLHcsRSx4LEMsTyxBLFQsUyxSLGssTixQLGosRCxMLEksTSxGPSJzaXp6bGUi
KzEqbmV3IERhdGUsej1lLmRvY3VtZW50LFU9MCxCPTAscT1uKCksSD1uKCksVj1uKCksVz1mdW5j
dGlvbihlLHQpe3JldHVybiBlPT09dCYmKFI9ITApLDB9LCQ9e30uaGFzT3duUHJvcGVydHksRz1b
XSxLPUcucG9wLFE9Ry5wdXNoLFk9Ry5wdXNoLEo9Ry5zbGljZSxYPWZ1bmN0aW9uKGUsdCl7Zm9y
KHZhciBuPTAscj1lLmxlbmd0aDtuPHI7bisrKWlmKGVbbl09PT10KXJldHVybiBuCi1yZXR1cm4t
MX0sWj0iY2hlY2tlZHxzZWxlY3RlZHxhc3luY3xhdXRvZm9jdXN8YXV0b3BsYXl8Y29udHJvbHN8
ZGVmZXJ8ZGlzYWJsZWR8aGlkZGVufGlzbWFwfGxvb3B8bXVsdGlwbGV8b3BlbnxyZWFkb25seXxy
ZXF1aXJlZHxzY29wZWQiLGVlPSJbXFx4MjBcXHRcXHJcXG5cXGZdIix0ZT0iKD86XFxcXC58W1xc
dy1dfFteXDAtXFx4YTBdKSsiLG5lPSJcXFsiK2VlKyIqKCIrdGUrIikoPzoiK2VlKyIqKFsqXiR8
IX5dPz0pIitlZSsiKig/OicoKD86XFxcXC58W15cXFxcJ10pKiknfFwiKCg/OlxcXFwufFteXFxc
XFwiXSkqKVwifCgiK3RlKyIpKXwpIitlZSsiKlxcXSIscmU9IjooIit0ZSsiKSg/OlxcKCgoJygo
PzpcXFxcLnxbXlxcXFwnXSkqKSd8XCIoKD86XFxcXC58W15cXFxcXCJdKSopXCIpfCgoPzpcXFxc
LnxbXlxcXFwoKVtcXF1dfCIrbmUrIikqKXwuKilcXCl8KSIsaWU9bmV3IFJlZ0V4cChlZSsiKyIs
ImciKSxvZT1uZXcgUmVnRXhwKCJeIitlZSsiK3woKD86XnxbXlxcXFxdKSg/OlxcXFwuKSopIitl
ZSsiKyQiLCJnIiksc2U9bmV3IFJlZ0V4cCgiXiIrZWUrIiosIitlZSsiKiIpLGFlPW5ldyBSZWdF
eHAoIl4iK2VlKyIqKFs+K35dfCIrZWUrIikiK2VlKyIqIiksdWU9bmV3IFJlZ0V4cCgiPSIrZWUr
IiooW15cXF0nXCJdKj8pIitlZSsiKlxcXSIsImciKSxsZT1uZXcgUmVnRXhwKHJlKSxjZT1uZXcg
UmVnRXhwKCJeIit0ZSsiJCIpLHBlPXtJRDpuZXcgUmVnRXhwKCJeIygiK3RlKyIpIiksQ0xBU1M6
bmV3IFJlZ0V4cCgiXlxcLigiK3RlKyIpIiksVEFHOm5ldyBSZWdFeHAoIl4oIit0ZSsifFsqXSki
KSxBVFRSOm5ldyBSZWdFeHAoIl4iK25lKSxQU0VVRE86bmV3IFJlZ0V4cCgiXiIrcmUpLENISUxE
Om5ldyBSZWdFeHAoIl46KG9ubHl8Zmlyc3R8bGFzdHxudGh8bnRoLWxhc3QpLShjaGlsZHxvZi10
eXBlKSg/OlxcKCIrZWUrIiooZXZlbnxvZGR8KChbKy1dfCkoXFxkKilufCkiK2VlKyIqKD86KFsr
LV18KSIrZWUrIiooXFxkKyl8KSkiK2VlKyIqXFwpfCkiLCJpIiksYm9vbDpuZXcgUmVnRXhwKCJe
KD86IitaKyIpJCIsImkiKSxuZWVkc0NvbnRleHQ6bmV3IFJlZ0V4cCgiXiIrZWUrIipbPit+XXw6
KGV2ZW58b2RkfGVxfGd0fGx0fG50aHxmaXJzdHxsYXN0KSg/OlxcKCIrZWUrIiooKD86LVxcZCk/
XFxkKikiK2VlKyIqXFwpfCkoPz1bXi1dfCQpIiwiaSIpfSxmZT0vXig/OmlucHV0fHNlbGVjdHx0
ZXh0YXJlYXxidXR0b24pJC9pLGhlPS9eaFxkJC9pLGRlPS9eW157XStce1xzKlxbbmF0aXZlIFx3
LyxtZT0vXig/OiMoW1x3LV0rKXwoXHcrKXxcLihbXHctXSspKSQvLGdlPS9bK35dLyx5ZT1uZXcg
UmVnRXhwKCJcXFxcKFtcXGRhLWZdezEsNn0iK2VlKyI/fCgiK2VlKyIpfC4pIiwiaWciKSx2ZT1m
dW5jdGlvbihlLHQsbil7dmFyIHI9IjB4Iit0LTY1NTM2Ci1yZXR1cm4gciE9PXJ8fG4/dDpyPDA/
U3RyaW5nLmZyb21DaGFyQ29kZShyKzY1NTM2KTpTdHJpbmcuZnJvbUNoYXJDb2RlKHI+PjEwfDU1
Mjk2LDEwMjMmcnw1NjMyMCl9LGJlPS8oW1wwLVx4MWZceDdmXXxeLT9cZCl8Xi0kfFteXDAtXHgx
Zlx4N2YtXHVGRkZGXHctXS9nLF9lPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ/IlwwIj09PWU/Iu+/
vSI6ZS5zbGljZSgwLC0xKSsiXFwiK2UuY2hhckNvZGVBdChlLmxlbmd0aC0xKS50b1N0cmluZygx
NikrIiAiOiJcXCIrZX0sd2U9ZnVuY3Rpb24oKXtrKCl9LEVlPWYoZnVuY3Rpb24oZSl7cmV0dXJu
ITA9PT1lLmRpc2FibGVkJiYoImZvcm0iaW4gZXx8ImxhYmVsImluIGUpfSx7ZGlyOiJwYXJlbnRO
b2RlIixuZXh0OiJsZWdlbmQifSkKLXRyeXtZLmFwcGx5KEc9Si5jYWxsKHouY2hpbGROb2Rlcyks
ei5jaGlsZE5vZGVzKSxHW3ouY2hpbGROb2Rlcy5sZW5ndGhdLm5vZGVUeXBlfWNhdGNoKGUpe1k9
e2FwcGx5OkcubGVuZ3RoP2Z1bmN0aW9uKGUsdCl7US5hcHBseShlLEouY2FsbCh0KSl9OmZ1bmN0
aW9uKGUsdCl7Zm9yKHZhciBuPWUubGVuZ3RoLHI9MDtlW24rK109dFtyKytdOyk7ZS5sZW5ndGg9
bi0xfX19Xz10LnN1cHBvcnQ9e30seD10LmlzWE1MPWZ1bmN0aW9uKGUpe3ZhciB0PWUmJihlLm93
bmVyRG9jdW1lbnR8fGUpLmRvY3VtZW50RWxlbWVudAotcmV0dXJuISF0JiYiSFRNTCIhPT10Lm5v
ZGVOYW1lfSxrPXQuc2V0RG9jdW1lbnQ9ZnVuY3Rpb24oZSl7dmFyIHQsbixyPWU/ZS5vd25lckRv
Y3VtZW50fHxlOnoKLXJldHVybiByIT09TiYmOT09PXIubm9kZVR5cGUmJnIuZG9jdW1lbnRFbGVt
ZW50PyhOPXIsUD1OLmRvY3VtZW50RWxlbWVudCxqPSF4KE4pLHohPT1OJiYobj1OLmRlZmF1bHRW
aWV3KSYmbi50b3AhPT1uJiYobi5hZGRFdmVudExpc3RlbmVyP24uYWRkRXZlbnRMaXN0ZW5lcigi
dW5sb2FkIix3ZSwhMSk6bi5hdHRhY2hFdmVudCYmbi5hdHRhY2hFdmVudCgib251bmxvYWQiLHdl
KSksXy5hdHRyaWJ1dGVzPWkoZnVuY3Rpb24oZSl7cmV0dXJuIGUuY2xhc3NOYW1lPSJpIiwhZS5n
ZXRBdHRyaWJ1dGUoImNsYXNzTmFtZSIpfSksXy5nZXRFbGVtZW50c0J5VGFnTmFtZT1pKGZ1bmN0
aW9uKGUpe3JldHVybiBlLmFwcGVuZENoaWxkKE4uY3JlYXRlQ29tbWVudCgiIikpLCFlLmdldEVs
ZW1lbnRzQnlUYWdOYW1lKCIqIikubGVuZ3RofSksXy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lPWRl
LnRlc3QoTi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKSxfLmdldEJ5SWQ9aShmdW5jdGlvbihlKXty
ZXR1cm4gUC5hcHBlbmRDaGlsZChlKS5pZD1GLCFOLmdldEVsZW1lbnRzQnlOYW1lfHwhTi5nZXRF
bGVtZW50c0J5TmFtZShGKS5sZW5ndGh9KSxfLmdldEJ5SWQ/KHcuZmlsdGVyLklEPWZ1bmN0aW9u
KGUpe3ZhciB0PWUucmVwbGFjZSh5ZSx2ZSkKLXJldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZS5n
ZXRBdHRyaWJ1dGUoImlkIik9PT10fX0sdy5maW5kLklEPWZ1bmN0aW9uKGUsdCl7aWYodm9pZCAw
IT09dC5nZXRFbGVtZW50QnlJZCYmail7dmFyIG49dC5nZXRFbGVtZW50QnlJZChlKQotcmV0dXJu
IG4/W25dOltdfX0pOih3LmZpbHRlci5JRD1mdW5jdGlvbihlKXt2YXIgdD1lLnJlcGxhY2UoeWUs
dmUpCi1yZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG49dm9pZCAwIT09ZS5nZXRBdHRyaWJ1dGVOb2Rl
JiZlLmdldEF0dHJpYnV0ZU5vZGUoImlkIikKLXJldHVybiBuJiZuLnZhbHVlPT09dH19LHcuZmlu
ZC5JRD1mdW5jdGlvbihlLHQpe2lmKHZvaWQgMCE9PXQuZ2V0RWxlbWVudEJ5SWQmJmope3ZhciBu
LHIsaSxvPXQuZ2V0RWxlbWVudEJ5SWQoZSkKLWlmKG8pe2lmKChuPW8uZ2V0QXR0cmlidXRlTm9k
ZSgiaWQiKSkmJm4udmFsdWU9PT1lKXJldHVybltvXQotZm9yKGk9dC5nZXRFbGVtZW50c0J5TmFt
ZShlKSxyPTA7bz1pW3IrK107KWlmKChuPW8uZ2V0QXR0cmlidXRlTm9kZSgiaWQiKSkmJm4udmFs
dWU9PT1lKXJldHVybltvXX1yZXR1cm5bXX19KSx3LmZpbmQuVEFHPV8uZ2V0RWxlbWVudHNCeVRh
Z05hbWU/ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwIT09dC5nZXRFbGVtZW50c0J5VGFnTmFt
ZT90LmdldEVsZW1lbnRzQnlUYWdOYW1lKGUpOl8ucXNhP3QucXVlcnlTZWxlY3RvckFsbChlKTp2
b2lkIDB9OmZ1bmN0aW9uKGUsdCl7dmFyIG4scj1bXSxpPTAsbz10LmdldEVsZW1lbnRzQnlUYWdO
YW1lKGUpCi1pZigiKiI9PT1lKXtmb3IoO249b1tpKytdOykxPT09bi5ub2RlVHlwZSYmci5wdXNo
KG4pCi1yZXR1cm4gcn1yZXR1cm4gb30sdy5maW5kLkNMQVNTPV8uZ2V0RWxlbWVudHNCeUNsYXNz
TmFtZSYmZnVuY3Rpb24oZSx0KXtpZih2b2lkIDAhPT10LmdldEVsZW1lbnRzQnlDbGFzc05hbWUm
JmopcmV0dXJuIHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShlKX0sTD1bXSxEPVtdLChfLnFzYT1k
ZS50ZXN0KE4ucXVlcnlTZWxlY3RvckFsbCkpJiYoaShmdW5jdGlvbihlKXtQLmFwcGVuZENoaWxk
KGUpLmlubmVySFRNTD0iPGEgaWQ9JyIrRisiJz48L2E+PHNlbGVjdCBpZD0nIitGKyItXHJcXCcg
bXNhbGxvd2NhcHR1cmU9Jyc+PG9wdGlvbiBzZWxlY3RlZD0nJz48L29wdGlvbj48L3NlbGVjdD4i
LGUucXVlcnlTZWxlY3RvckFsbCgiW21zYWxsb3djYXB0dXJlXj0nJ10iKS5sZW5ndGgmJkQucHVz
aCgiWypeJF09IitlZSsiKig/OicnfFwiXCIpIiksZS5xdWVyeVNlbGVjdG9yQWxsKCJbc2VsZWN0
ZWRdIikubGVuZ3RofHxELnB1c2goIlxcWyIrZWUrIiooPzp2YWx1ZXwiK1orIikiKSxlLnF1ZXJ5
U2VsZWN0b3JBbGwoIltpZH49IitGKyItXSIpLmxlbmd0aHx8RC5wdXNoKCJ+PSIpLGUucXVlcnlT
ZWxlY3RvckFsbCgiOmNoZWNrZWQiKS5sZW5ndGh8fEQucHVzaCgiOmNoZWNrZWQiKSxlLnF1ZXJ5
U2VsZWN0b3JBbGwoImEjIitGKyIrKiIpLmxlbmd0aHx8RC5wdXNoKCIuIy4rWyt+XSIpfSksaShm
dW5jdGlvbihlKXtlLmlubmVySFRNTD0iPGEgaHJlZj0nJyBkaXNhYmxlZD0nZGlzYWJsZWQnPjwv
YT48c2VsZWN0IGRpc2FibGVkPSdkaXNhYmxlZCc+PG9wdGlvbi8+PC9zZWxlY3Q+IgotdmFyIHQ9
Ti5jcmVhdGVFbGVtZW50KCJpbnB1dCIpCi10LnNldEF0dHJpYnV0ZSgidHlwZSIsImhpZGRlbiIp
LGUuYXBwZW5kQ2hpbGQodCkuc2V0QXR0cmlidXRlKCJuYW1lIiwiRCIpLGUucXVlcnlTZWxlY3Rv
ckFsbCgiW25hbWU9ZF0iKS5sZW5ndGgmJkQucHVzaCgibmFtZSIrZWUrIipbKl4kfCF+XT89Iiks
MiE9PWUucXVlcnlTZWxlY3RvckFsbCgiOmVuYWJsZWQiKS5sZW5ndGgmJkQucHVzaCgiOmVuYWJs
ZWQiLCI6ZGlzYWJsZWQiKSxQLmFwcGVuZENoaWxkKGUpLmRpc2FibGVkPSEwLDIhPT1lLnF1ZXJ5
U2VsZWN0b3JBbGwoIjpkaXNhYmxlZCIpLmxlbmd0aCYmRC5wdXNoKCI6ZW5hYmxlZCIsIjpkaXNh
YmxlZCIpLGUucXVlcnlTZWxlY3RvckFsbCgiKiw6eCIpLEQucHVzaCgiLC4qOiIpfSkpLChfLm1h
dGNoZXNTZWxlY3Rvcj1kZS50ZXN0KEk9UC5tYXRjaGVzfHxQLndlYmtpdE1hdGNoZXNTZWxlY3Rv
cnx8UC5tb3pNYXRjaGVzU2VsZWN0b3J8fFAub01hdGNoZXNTZWxlY3Rvcnx8UC5tc01hdGNoZXNT
ZWxlY3RvcikpJiZpKGZ1bmN0aW9uKGUpe18uZGlzY29ubmVjdGVkTWF0Y2g9SS5jYWxsKGUsIioi
KSxJLmNhbGwoZSwiW3MhPScnXTp4IiksTC5wdXNoKCIhPSIscmUpfSksRD1ELmxlbmd0aCYmbmV3
IFJlZ0V4cChELmpvaW4oInwiKSksTD1MLmxlbmd0aCYmbmV3IFJlZ0V4cChMLmpvaW4oInwiKSks
dD1kZS50ZXN0KFAuY29tcGFyZURvY3VtZW50UG9zaXRpb24pLE09dHx8ZGUudGVzdChQLmNvbnRh
aW5zKT9mdW5jdGlvbihlLHQpe3ZhciBuPTk9PT1lLm5vZGVUeXBlP2UuZG9jdW1lbnRFbGVtZW50
OmUscj10JiZ0LnBhcmVudE5vZGUKLXJldHVybiBlPT09cnx8ISghcnx8MSE9PXIubm9kZVR5cGV8
fCEobi5jb250YWlucz9uLmNvbnRhaW5zKHIpOmUuY29tcGFyZURvY3VtZW50UG9zaXRpb24mJjE2
JmUuY29tcGFyZURvY3VtZW50UG9zaXRpb24ocikpKX06ZnVuY3Rpb24oZSx0KXtpZih0KWZvcig7
dD10LnBhcmVudE5vZGU7KWlmKHQ9PT1lKXJldHVybiEwCi1yZXR1cm4hMX0sVz10P2Z1bmN0aW9u
KGUsdCl7aWYoZT09PXQpcmV0dXJuIFI9ITAsMAotdmFyIG49IWUuY29tcGFyZURvY3VtZW50UG9z
aXRpb24tIXQuY29tcGFyZURvY3VtZW50UG9zaXRpb24KLXJldHVybiBufHwobj0oZS5vd25lckRv
Y3VtZW50fHxlKT09PSh0Lm93bmVyRG9jdW1lbnR8fHQpP2UuY29tcGFyZURvY3VtZW50UG9zaXRp
b24odCk6MSwxJm58fCFfLnNvcnREZXRhY2hlZCYmdC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihl
KT09PW4/ZT09PU58fGUub3duZXJEb2N1bWVudD09PXomJk0oeixlKT8tMTp0PT09Tnx8dC5vd25l
ckRvY3VtZW50PT09eiYmTSh6LHQpPzE6Uz9YKFMsZSktWChTLHQpOjA6NCZuPy0xOjEpfTpmdW5j
dGlvbihlLHQpe2lmKGU9PT10KXJldHVybiBSPSEwLDAKLXZhciBuLHI9MCxpPWUucGFyZW50Tm9k
ZSxvPXQucGFyZW50Tm9kZSxhPVtlXSx1PVt0XQotaWYoIWl8fCFvKXJldHVybiBlPT09Tj8tMTp0
PT09Tj8xOmk/LTE6bz8xOlM/WChTLGUpLVgoUyx0KTowCi1pZihpPT09bylyZXR1cm4gcyhlLHQp
Ci1mb3Iobj1lO249bi5wYXJlbnROb2RlOylhLnVuc2hpZnQobikKLWZvcihuPXQ7bj1uLnBhcmVu
dE5vZGU7KXUudW5zaGlmdChuKQotZm9yKDthW3JdPT09dVtyXTspcisrCi1yZXR1cm4gcj9zKGFb
cl0sdVtyXSk6YVtyXT09PXo/LTE6dVtyXT09PXo/MTowfSxOKTpOfSx0Lm1hdGNoZXM9ZnVuY3Rp
b24oZSxuKXtyZXR1cm4gdChlLG51bGwsbnVsbCxuKX0sdC5tYXRjaGVzU2VsZWN0b3I9ZnVuY3Rp
b24oZSxuKXtpZigoZS5vd25lckRvY3VtZW50fHxlKSE9PU4mJmsoZSksbj1uLnJlcGxhY2UodWUs
Ij0nJDEnXSIpLF8ubWF0Y2hlc1NlbGVjdG9yJiZqJiYhVltuKyIgIl0mJighTHx8IUwudGVzdChu
KSkmJighRHx8IUQudGVzdChuKSkpdHJ5e3ZhciByPUkuY2FsbChlLG4pCi1pZihyfHxfLmRpc2Nv
bm5lY3RlZE1hdGNofHxlLmRvY3VtZW50JiYxMSE9PWUuZG9jdW1lbnQubm9kZVR5cGUpcmV0dXJu
IHJ9Y2F0Y2goZSl7fXJldHVybiB0KG4sTixudWxsLFtlXSkubGVuZ3RoPjB9LHQuY29udGFpbnM9
ZnVuY3Rpb24oZSx0KXtyZXR1cm4oZS5vd25lckRvY3VtZW50fHxlKSE9PU4mJmsoZSksTShlLHQp
fSx0LmF0dHI9ZnVuY3Rpb24oZSx0KXsoZS5vd25lckRvY3VtZW50fHxlKSE9PU4mJmsoZSkKLXZh
ciBuPXcuYXR0ckhhbmRsZVt0LnRvTG93ZXJDYXNlKCldLHI9biYmJC5jYWxsKHcuYXR0ckhhbmRs
ZSx0LnRvTG93ZXJDYXNlKCkpP24oZSx0LCFqKTp2b2lkIDAKLXJldHVybiB2b2lkIDAhPT1yP3I6
Xy5hdHRyaWJ1dGVzfHwhaj9lLmdldEF0dHJpYnV0ZSh0KToocj1lLmdldEF0dHJpYnV0ZU5vZGUo
dCkpJiZyLnNwZWNpZmllZD9yLnZhbHVlOm51bGx9LHQuZXNjYXBlPWZ1bmN0aW9uKGUpe3JldHVy
bihlKyIiKS5yZXBsYWNlKGJlLF9lKX0sdC5lcnJvcj1mdW5jdGlvbihlKXt0aHJvdyBuZXcgRXJy
b3IoIlN5bnRheCBlcnJvciwgdW5yZWNvZ25pemVkIGV4cHJlc3Npb246ICIrZSl9LHQudW5pcXVl
U29ydD1mdW5jdGlvbihlKXt2YXIgdCxuPVtdLHI9MCxpPTAKLWlmKFI9IV8uZGV0ZWN0RHVwbGlj
YXRlcyxTPSFfLnNvcnRTdGFibGUmJmUuc2xpY2UoMCksZS5zb3J0KFcpLFIpe2Zvcig7dD1lW2kr
K107KXQ9PT1lW2ldJiYocj1uLnB1c2goaSkpCi1mb3IoO3ItLTspZS5zcGxpY2UobltyXSwxKX1y
ZXR1cm4gUz1udWxsLGV9LEU9dC5nZXRUZXh0PWZ1bmN0aW9uKGUpe3ZhciB0LG49IiIscj0wLGk9
ZS5ub2RlVHlwZQotaWYoaSl7aWYoMT09PWl8fDk9PT1pfHwxMT09PWkpe2lmKCJzdHJpbmciPT10
eXBlb2YgZS50ZXh0Q29udGVudClyZXR1cm4gZS50ZXh0Q29udGVudAotZm9yKGU9ZS5maXJzdENo
aWxkO2U7ZT1lLm5leHRTaWJsaW5nKW4rPUUoZSl9ZWxzZSBpZigzPT09aXx8ND09PWkpcmV0dXJu
IGUubm9kZVZhbHVlfWVsc2UgZm9yKDt0PWVbcisrXTspbis9RSh0KQotcmV0dXJuIG59LHc9dC5z
ZWxlY3RvcnM9e2NhY2hlTGVuZ3RoOjUwLGNyZWF0ZVBzZXVkbzpyLG1hdGNoOnBlLGF0dHJIYW5k
bGU6e30sZmluZDp7fSxyZWxhdGl2ZTp7Ij4iOntkaXI6InBhcmVudE5vZGUiLGZpcnN0OiEwfSwi
ICI6e2RpcjoicGFyZW50Tm9kZSJ9LCIrIjp7ZGlyOiJwcmV2aW91c1NpYmxpbmciLGZpcnN0OiEw
fSwifiI6e2RpcjoicHJldmlvdXNTaWJsaW5nIn19LHByZUZpbHRlcjp7QVRUUjpmdW5jdGlvbihl
KXtyZXR1cm4gZVsxXT1lWzFdLnJlcGxhY2UoeWUsdmUpLGVbM109KGVbM118fGVbNF18fGVbNV18
fCIiKS5yZXBsYWNlKHllLHZlKSwifj0iPT09ZVsyXSYmKGVbM109IiAiK2VbM10rIiAiKSxlLnNs
aWNlKDAsNCl9LENISUxEOmZ1bmN0aW9uKGUpe3JldHVybiBlWzFdPWVbMV0udG9Mb3dlckNhc2Uo
KSwibnRoIj09PWVbMV0uc2xpY2UoMCwzKT8oZVszXXx8dC5lcnJvcihlWzBdKSxlWzRdPSsoZVs0
XT9lWzVdKyhlWzZdfHwxKToyKigiZXZlbiI9PT1lWzNdfHwib2RkIj09PWVbM10pKSxlWzVdPSso
ZVs3XStlWzhdfHwib2RkIj09PWVbM10pKTplWzNdJiZ0LmVycm9yKGVbMF0pLGV9LFBTRVVETzpm
dW5jdGlvbihlKXt2YXIgdCxuPSFlWzZdJiZlWzJdCi1yZXR1cm4gcGUuQ0hJTEQudGVzdChlWzBd
KT9udWxsOihlWzNdP2VbMl09ZVs0XXx8ZVs1XXx8IiI6biYmbGUudGVzdChuKSYmKHQ9QyhuLCEw
KSkmJih0PW4uaW5kZXhPZigiKSIsbi5sZW5ndGgtdCktbi5sZW5ndGgpJiYoZVswXT1lWzBdLnNs
aWNlKDAsdCksZVsyXT1uLnNsaWNlKDAsdCkpLGUuc2xpY2UoMCwzKSl9fSxmaWx0ZXI6e1RBRzpm
dW5jdGlvbihlKXt2YXIgdD1lLnJlcGxhY2UoeWUsdmUpLnRvTG93ZXJDYXNlKCkKLXJldHVybiIq
Ij09PWU/ZnVuY3Rpb24oKXtyZXR1cm4hMH06ZnVuY3Rpb24oZSl7cmV0dXJuIGUubm9kZU5hbWUm
JmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PXR9fSxDTEFTUzpmdW5jdGlvbihlKXt2YXIgdD1x
W2UrIiAiXQotcmV0dXJuIHR8fCh0PW5ldyBSZWdFeHAoIihefCIrZWUrIikiK2UrIigiK2VlKyJ8
JCkiKSkmJnEoZSxmdW5jdGlvbihlKXtyZXR1cm4gdC50ZXN0KCJzdHJpbmciPT10eXBlb2YgZS5j
bGFzc05hbWUmJmUuY2xhc3NOYW1lfHx2b2lkIDAhPT1lLmdldEF0dHJpYnV0ZSYmZS5nZXRBdHRy
aWJ1dGUoImNsYXNzIil8fCIiKX0pfSxBVFRSOmZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gZnVuY3Rp
b24oaSl7dmFyIG89dC5hdHRyKGksZSkKLXJldHVybiBudWxsPT1vPyIhPSI9PT1uOiFufHwobys9
IiIsIj0iPT09bj9vPT09cjoiIT0iPT09bj9vIT09cjoiXj0iPT09bj9yJiYwPT09by5pbmRleE9m
KHIpOiIqPSI9PT1uP3ImJm8uaW5kZXhPZihyKT4tMToiJD0iPT09bj9yJiZvLnNsaWNlKC1yLmxl
bmd0aCk9PT1yOiJ+PSI9PT1uPygiICIrby5yZXBsYWNlKGllLCIgIikrIiAiKS5pbmRleE9mKHIp
Pi0xOiJ8PSI9PT1uJiYobz09PXJ8fG8uc2xpY2UoMCxyLmxlbmd0aCsxKT09PXIrIi0iKSl9fSxD
SElMRDpmdW5jdGlvbihlLHQsbixyLGkpe3ZhciBvPSJudGgiIT09ZS5zbGljZSgwLDMpLHM9Imxh
c3QiIT09ZS5zbGljZSgtNCksYT0ib2YtdHlwZSI9PT10Ci1yZXR1cm4gMT09PXImJjA9PT1pP2Z1
bmN0aW9uKGUpe3JldHVybiEhZS5wYXJlbnROb2RlfTpmdW5jdGlvbih0LG4sdSl7dmFyIGwsYyxw
LGYsaCxkLG09byE9PXM/Im5leHRTaWJsaW5nIjoicHJldmlvdXNTaWJsaW5nIixnPXQucGFyZW50
Tm9kZSx5PWEmJnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSx2PSF1JiYhYSxiPSExCi1pZihnKXtp
ZihvKXtmb3IoO207KXtmb3IoZj10O2Y9ZlttXTspaWYoYT9mLm5vZGVOYW1lLnRvTG93ZXJDYXNl
KCk9PT15OjE9PT1mLm5vZGVUeXBlKXJldHVybiExCi1kPW09Im9ubHkiPT09ZSYmIWQmJiJuZXh0
U2libGluZyJ9cmV0dXJuITB9aWYoZD1bcz9nLmZpcnN0Q2hpbGQ6Zy5sYXN0Q2hpbGRdLHMmJnYp
e2ZvcihmPWcscD1mW0ZdfHwoZltGXT17fSksYz1wW2YudW5pcXVlSURdfHwocFtmLnVuaXF1ZUlE
XT17fSksbD1jW2VdfHxbXSxoPWxbMF09PT1VJiZsWzFdLGI9aCYmbFsyXSxmPWgmJmcuY2hpbGRO
b2Rlc1toXTtmPSsraCYmZiYmZlttXXx8KGI9aD0wKXx8ZC5wb3AoKTspaWYoMT09PWYubm9kZVR5
cGUmJisrYiYmZj09PXQpe2NbZV09W1UsaCxiXQotYnJlYWt9fWVsc2UgaWYodiYmKGY9dCxwPWZb
Rl18fChmW0ZdPXt9KSxjPXBbZi51bmlxdWVJRF18fChwW2YudW5pcXVlSURdPXt9KSxsPWNbZV18
fFtdLGg9bFswXT09PVUmJmxbMV0sYj1oKSwhMT09PWIpZm9yKDsoZj0rK2gmJmYmJmZbbV18fChi
PWg9MCl8fGQucG9wKCkpJiYoKGE/Zi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIT09eToxIT09Zi5u
b2RlVHlwZSl8fCErK2J8fCh2JiYocD1mW0ZdfHwoZltGXT17fSksYz1wW2YudW5pcXVlSURdfHwo
cFtmLnVuaXF1ZUlEXT17fSksY1tlXT1bVSxiXSksZiE9PXQpKTspO3JldHVybihiLT1pKT09PXJ8
fGIlcj09MCYmYi9yPj0wfX19LFBTRVVETzpmdW5jdGlvbihlLG4pe3ZhciBpLG89dy5wc2V1ZG9z
W2VdfHx3LnNldEZpbHRlcnNbZS50b0xvd2VyQ2FzZSgpXXx8dC5lcnJvcigidW5zdXBwb3J0ZWQg
cHNldWRvOiAiK2UpCi1yZXR1cm4gb1tGXT9vKG4pOm8ubGVuZ3RoPjE/KGk9W2UsZSwiIixuXSx3
LnNldEZpbHRlcnMuaGFzT3duUHJvcGVydHkoZS50b0xvd2VyQ2FzZSgpKT9yKGZ1bmN0aW9uKGUs
dCl7Zm9yKHZhciByLGk9byhlLG4pLHM9aS5sZW5ndGg7cy0tOylyPVgoZSxpW3NdKSxlW3JdPSEo
dFtyXT1pW3NdKX0pOmZ1bmN0aW9uKGUpe3JldHVybiBvKGUsMCxpKX0pOm99fSxwc2V1ZG9zOntu
b3Q6cihmdW5jdGlvbihlKXt2YXIgdD1bXSxuPVtdLGk9TyhlLnJlcGxhY2Uob2UsIiQxIikpCi1y
ZXR1cm4gaVtGXT9yKGZ1bmN0aW9uKGUsdCxuLHIpe2Zvcih2YXIgbyxzPWkoZSxudWxsLHIsW10p
LGE9ZS5sZW5ndGg7YS0tOykobz1zW2FdKSYmKGVbYV09ISh0W2FdPW8pKX0pOmZ1bmN0aW9uKGUs
cixvKXtyZXR1cm4gdFswXT1lLGkodCxudWxsLG8sbiksdFswXT1udWxsLCFuLnBvcCgpfX0pLGhh
czpyKGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gdChlLG4pLmxlbmd0aD4w
fX0pLGNvbnRhaW5zOnIoZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZS5yZXBsYWNlKHllLHZlKSxmdW5j
dGlvbih0KXtyZXR1cm4odC50ZXh0Q29udGVudHx8dC5pbm5lclRleHR8fEUodCkpLmluZGV4T2Yo
ZSk+LTF9fSksbGFuZzpyKGZ1bmN0aW9uKGUpe3JldHVybiBjZS50ZXN0KGV8fCIiKXx8dC5lcnJv
cigidW5zdXBwb3J0ZWQgbGFuZzogIitlKSxlPWUucmVwbGFjZSh5ZSx2ZSkudG9Mb3dlckNhc2Uo
KSxmdW5jdGlvbih0KXt2YXIgbgotZG97aWYobj1qP3QubGFuZzp0LmdldEF0dHJpYnV0ZSgieG1s
OmxhbmciKXx8dC5nZXRBdHRyaWJ1dGUoImxhbmciKSlyZXR1cm4obj1uLnRvTG93ZXJDYXNlKCkp
PT09ZXx8MD09PW4uaW5kZXhPZihlKyItIil9d2hpbGUoKHQ9dC5wYXJlbnROb2RlKSYmMT09PXQu
bm9kZVR5cGUpCi1yZXR1cm4hMX19KSx0YXJnZXQ6ZnVuY3Rpb24odCl7dmFyIG49ZS5sb2NhdGlv
biYmZS5sb2NhdGlvbi5oYXNoCi1yZXR1cm4gbiYmbi5zbGljZSgxKT09PXQuaWR9LHJvb3Q6ZnVu
Y3Rpb24oZSl7cmV0dXJuIGU9PT1QfSxmb2N1czpmdW5jdGlvbihlKXtyZXR1cm4gZT09PU4uYWN0
aXZlRWxlbWVudCYmKCFOLmhhc0ZvY3VzfHxOLmhhc0ZvY3VzKCkpJiYhIShlLnR5cGV8fGUuaHJl
Znx8fmUudGFiSW5kZXgpfSxlbmFibGVkOmEoITEpLGRpc2FibGVkOmEoITApLGNoZWNrZWQ6ZnVu
Y3Rpb24oZSl7dmFyIHQ9ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpCi1yZXR1cm4iaW5wdXQiPT09
dCYmISFlLmNoZWNrZWR8fCJvcHRpb24iPT09dCYmISFlLnNlbGVjdGVkfSxzZWxlY3RlZDpmdW5j
dGlvbihlKXtyZXR1cm4gZS5wYXJlbnROb2RlJiZlLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCwh
MD09PWUuc2VsZWN0ZWR9LGVtcHR5OmZ1bmN0aW9uKGUpe2ZvcihlPWUuZmlyc3RDaGlsZDtlO2U9
ZS5uZXh0U2libGluZylpZihlLm5vZGVUeXBlPDYpcmV0dXJuITEKLXJldHVybiEwfSxwYXJlbnQ6
ZnVuY3Rpb24oZSl7cmV0dXJuIXcucHNldWRvcy5lbXB0eShlKX0saGVhZGVyOmZ1bmN0aW9uKGUp
e3JldHVybiBoZS50ZXN0KGUubm9kZU5hbWUpfSxpbnB1dDpmdW5jdGlvbihlKXtyZXR1cm4gZmUu
dGVzdChlLm5vZGVOYW1lKX0sYnV0dG9uOmZ1bmN0aW9uKGUpe3ZhciB0PWUubm9kZU5hbWUudG9M
b3dlckNhc2UoKQotcmV0dXJuImlucHV0Ij09PXQmJiJidXR0b24iPT09ZS50eXBlfHwiYnV0dG9u
Ij09PXR9LHRleHQ6ZnVuY3Rpb24oZSl7dmFyIHQKLXJldHVybiJpbnB1dCI9PT1lLm5vZGVOYW1l
LnRvTG93ZXJDYXNlKCkmJiJ0ZXh0Ij09PWUudHlwZSYmKG51bGw9PSh0PWUuZ2V0QXR0cmlidXRl
KCJ0eXBlIikpfHwidGV4dCI9PT10LnRvTG93ZXJDYXNlKCkpfSxmaXJzdDp1KGZ1bmN0aW9uKCl7
cmV0dXJuWzBdfSksbGFzdDp1KGZ1bmN0aW9uKGUsdCl7cmV0dXJuW3QtMV19KSxlcTp1KGZ1bmN0
aW9uKGUsdCxuKXtyZXR1cm5bbjwwP24rdDpuXX0pLGV2ZW46dShmdW5jdGlvbihlLHQpe2Zvcih2
YXIgbj0wO248dDtuKz0yKWUucHVzaChuKQotcmV0dXJuIGV9KSxvZGQ6dShmdW5jdGlvbihlLHQp
e2Zvcih2YXIgbj0xO248dDtuKz0yKWUucHVzaChuKQotcmV0dXJuIGV9KSxsdDp1KGZ1bmN0aW9u
KGUsdCxuKXtmb3IodmFyIHI9bjwwP24rdDpuOy0tcj49MDspZS5wdXNoKHIpCi1yZXR1cm4gZX0p
LGd0OnUoZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcj1uPDA/bit0Om47KytyPHQ7KWUucHVzaChy
KQotcmV0dXJuIGV9KX19LHcucHNldWRvcy5udGg9dy5wc2V1ZG9zLmVxCi1mb3IoYiBpbntyYWRp
bzohMCxjaGVja2JveDohMCxmaWxlOiEwLHBhc3N3b3JkOiEwLGltYWdlOiEwfSl3LnBzZXVkb3Nb
Yl09ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiJpbnB1dCI9PT10Lm5vZGVO
YW1lLnRvTG93ZXJDYXNlKCkmJnQudHlwZT09PWV9fShiKQotZm9yKGIgaW57c3VibWl0OiEwLHJl
c2V0OiEwfSl3LnBzZXVkb3NbYl09ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBu
PXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKQotcmV0dXJuKCJpbnB1dCI9PT1ufHwiYnV0dG9uIj09
PW4pJiZ0LnR5cGU9PT1lfX0oYikKLXJldHVybiBjLnByb3RvdHlwZT13LmZpbHRlcnM9dy5wc2V1
ZG9zLHcuc2V0RmlsdGVycz1uZXcgYyxDPXQudG9rZW5pemU9ZnVuY3Rpb24oZSxuKXt2YXIgcixp
LG8scyxhLHUsbCxjPUhbZSsiICJdCi1pZihjKXJldHVybiBuPzA6Yy5zbGljZSgwKQotZm9yKGE9
ZSx1PVtdLGw9dy5wcmVGaWx0ZXI7YTspe3ImJiEoaT1zZS5leGVjKGEpKXx8KGkmJihhPWEuc2xp
Y2UoaVswXS5sZW5ndGgpfHxhKSx1LnB1c2gobz1bXSkpLHI9ITEsKGk9YWUuZXhlYyhhKSkmJihy
PWkuc2hpZnQoKSxvLnB1c2goe3ZhbHVlOnIsdHlwZTppWzBdLnJlcGxhY2Uob2UsIiAiKX0pLGE9
YS5zbGljZShyLmxlbmd0aCkpCi1mb3IocyBpbiB3LmZpbHRlcikhKGk9cGVbc10uZXhlYyhhKSl8
fGxbc10mJiEoaT1sW3NdKGkpKXx8KHI9aS5zaGlmdCgpLG8ucHVzaCh7dmFsdWU6cix0eXBlOnMs
bWF0Y2hlczppfSksYT1hLnNsaWNlKHIubGVuZ3RoKSkKLWlmKCFyKWJyZWFrfXJldHVybiBuP2Eu
bGVuZ3RoOmE/dC5lcnJvcihlKTpIKGUsdSkuc2xpY2UoMCl9LE89dC5jb21waWxlPWZ1bmN0aW9u
KGUsdCl7dmFyIG4scj1bXSxpPVtdLG89VltlKyIgIl0KLWlmKCFvKXtmb3IodHx8KHQ9QyhlKSks
bj10Lmxlbmd0aDtuLS07KW89eSh0W25dKSxvW0ZdP3IucHVzaChvKTppLnB1c2gobykKLW89Vihl
LHYoaSxyKSksby5zZWxlY3Rvcj1lfXJldHVybiBvfSxBPXQuc2VsZWN0PWZ1bmN0aW9uKGUsdCxu
LHIpe3ZhciBpLG8scyxhLHUsYz0iZnVuY3Rpb24iPT10eXBlb2YgZSYmZSxmPSFyJiZDKGU9Yy5z
ZWxlY3Rvcnx8ZSkKLWlmKG49bnx8W10sMT09PWYubGVuZ3RoKXtpZihvPWZbMF09ZlswXS5zbGlj
ZSgwKSxvLmxlbmd0aD4yJiYiSUQiPT09KHM9b1swXSkudHlwZSYmOT09PXQubm9kZVR5cGUmJmom
JncucmVsYXRpdmVbb1sxXS50eXBlXSl7aWYoISh0PSh3LmZpbmQuSUQocy5tYXRjaGVzWzBdLnJl
cGxhY2UoeWUsdmUpLHQpfHxbXSlbMF0pKXJldHVybiBuCi1jJiYodD10LnBhcmVudE5vZGUpLGU9
ZS5zbGljZShvLnNoaWZ0KCkudmFsdWUubGVuZ3RoKX1mb3IoaT1wZS5uZWVkc0NvbnRleHQudGVz
dChlKT8wOm8ubGVuZ3RoO2ktLSYmKHM9b1tpXSwhdy5yZWxhdGl2ZVthPXMudHlwZV0pOylpZigo
dT13LmZpbmRbYV0pJiYocj11KHMubWF0Y2hlc1swXS5yZXBsYWNlKHllLHZlKSxnZS50ZXN0KG9b
MF0udHlwZSkmJmwodC5wYXJlbnROb2RlKXx8dCkpKXtpZihvLnNwbGljZShpLDEpLCEoZT1yLmxl
bmd0aCYmcChvKSkpcmV0dXJuIFkuYXBwbHkobixyKSxuCi1icmVha319cmV0dXJuKGN8fE8oZSxm
KSkocix0LCFqLG4sIXR8fGdlLnRlc3QoZSkmJmwodC5wYXJlbnROb2RlKXx8dCksbn0sXy5zb3J0
U3RhYmxlPUYuc3BsaXQoIiIpLnNvcnQoVykuam9pbigiIik9PT1GLF8uZGV0ZWN0RHVwbGljYXRl
cz0hIVIsaygpLF8uc29ydERldGFjaGVkPWkoZnVuY3Rpb24oZSl7cmV0dXJuIDEmZS5jb21wYXJl
RG9jdW1lbnRQb3NpdGlvbihOLmNyZWF0ZUVsZW1lbnQoImZpZWxkc2V0IikpfSksaShmdW5jdGlv
bihlKXtyZXR1cm4gZS5pbm5lckhUTUw9IjxhIGhyZWY9JyMnPjwvYT4iLCIjIj09PWUuZmlyc3RD
aGlsZC5nZXRBdHRyaWJ1dGUoImhyZWYiKX0pfHxvKCJ0eXBlfGhyZWZ8aGVpZ2h0fHdpZHRoIixm
dW5jdGlvbihlLHQsbil7aWYoIW4pcmV0dXJuIGUuZ2V0QXR0cmlidXRlKHQsInR5cGUiPT09dC50
b0xvd2VyQ2FzZSgpPzE6Mil9KSxfLmF0dHJpYnV0ZXMmJmkoZnVuY3Rpb24oZSl7cmV0dXJuIGUu
aW5uZXJIVE1MPSI8aW5wdXQvPiIsZS5maXJzdENoaWxkLnNldEF0dHJpYnV0ZSgidmFsdWUiLCIi
KSwiIj09PWUuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoInZhbHVlIil9KXx8bygidmFsdWUiLGZ1
bmN0aW9uKGUsdCxuKXtpZighbiYmImlucHV0Ij09PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSly
ZXR1cm4gZS5kZWZhdWx0VmFsdWV9KSxpKGZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lLmdldEF0
dHJpYnV0ZSgiZGlzYWJsZWQiKX0pfHxvKFosZnVuY3Rpb24oZSx0LG4pe3ZhciByCi1pZighbily
ZXR1cm4hMD09PWVbdF0/dC50b0xvd2VyQ2FzZSgpOihyPWUuZ2V0QXR0cmlidXRlTm9kZSh0KSkm
JnIuc3BlY2lmaWVkP3IudmFsdWU6bnVsbH0pLHR9KGUpCi1kZS5maW5kPWJlLGRlLmV4cHI9YmUu
c2VsZWN0b3JzLGRlLmV4cHJbIjoiXT1kZS5leHByLnBzZXVkb3MsZGUudW5pcXVlU29ydD1kZS51
bmlxdWU9YmUudW5pcXVlU29ydCxkZS50ZXh0PWJlLmdldFRleHQsZGUuaXNYTUxEb2M9YmUuaXNY
TUwsZGUuY29udGFpbnM9YmUuY29udGFpbnMsZGUuZXNjYXBlU2VsZWN0b3I9YmUuZXNjYXBlCi12
YXIgX2U9ZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcj1bXSxpPXZvaWQgMCE9PW47KGU9ZVt0XSkm
JjkhPT1lLm5vZGVUeXBlOylpZigxPT09ZS5ub2RlVHlwZSl7aWYoaSYmZGUoZSkuaXMobikpYnJl
YWsKLXIucHVzaChlKX1yZXR1cm4gcn0sd2U9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49W107ZTtl
PWUubmV4dFNpYmxpbmcpMT09PWUubm9kZVR5cGUmJmUhPT10JiZuLnB1c2goZSkKLXJldHVybiBu
fSxFZT1kZS5leHByLm1hdGNoLm5lZWRzQ29udGV4dCx4ZT0vXjwoW2Etel1bXlwvXDA+Olx4MjBc
dFxyXG5cZl0qKVtceDIwXHRcclxuXGZdKlwvPz4oPzo8XC9cMT58KSQvaSxDZT0vXi5bXjojXFtc
LixdKiQvCi1kZS5maWx0ZXI9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRbMF0KLXJldHVybiBuJiYo
ZT0iOm5vdCgiK2UrIikiKSwxPT09dC5sZW5ndGgmJjE9PT1yLm5vZGVUeXBlP2RlLmZpbmQubWF0
Y2hlc1NlbGVjdG9yKHIsZSk/W3JdOltdOmRlLmZpbmQubWF0Y2hlcyhlLGRlLmdyZXAodCxmdW5j
dGlvbihlKXtyZXR1cm4gMT09PWUubm9kZVR5cGV9KSl9LGRlLmZuLmV4dGVuZCh7ZmluZDpmdW5j
dGlvbihlKXt2YXIgdCxuLHI9dGhpcy5sZW5ndGgsaT10aGlzCi1pZigic3RyaW5nIiE9dHlwZW9m
IGUpcmV0dXJuIHRoaXMucHVzaFN0YWNrKGRlKGUpLmZpbHRlcihmdW5jdGlvbigpe2Zvcih0PTA7
dDxyO3QrKylpZihkZS5jb250YWlucyhpW3RdLHRoaXMpKXJldHVybiEwfSkpCi1mb3Iobj10aGlz
LnB1c2hTdGFjayhbXSksdD0wO3Q8cjt0KyspZGUuZmluZChlLGlbdF0sbikKLXJldHVybiByPjE/
ZGUudW5pcXVlU29ydChuKTpufSxmaWx0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucHVzaFN0
YWNrKG8odGhpcyxlfHxbXSwhMSkpfSxub3Q6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucHVzaFN0
YWNrKG8odGhpcyxlfHxbXSwhMCkpfSxpczpmdW5jdGlvbihlKXtyZXR1cm4hIW8odGhpcywic3Ry
aW5nIj09dHlwZW9mIGUmJkVlLnRlc3QoZSk/ZGUoZSk6ZXx8W10sITEpLmxlbmd0aH19KQotdmFy
IE9lLEFlPS9eKD86XHMqKDxbXHdcV10rPilbXj5dKnwjKFtcdy1dKykpJC87KGRlLmZuLmluaXQ9
ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGkKLWlmKCFlKXJldHVybiB0aGlzCi1pZihuPW58fE9lLCJz
dHJpbmciPT10eXBlb2YgZSl7aWYoIShyPSI8Ij09PWVbMF0mJiI+Ij09PWVbZS5sZW5ndGgtMV0m
JmUubGVuZ3RoPj0zP1tudWxsLGUsbnVsbF06QWUuZXhlYyhlKSl8fCFyWzFdJiZ0KXJldHVybiF0
fHx0LmpxdWVyeT8odHx8bikuZmluZChlKTp0aGlzLmNvbnN0cnVjdG9yKHQpLmZpbmQoZSkKLWlm
KHJbMV0pe2lmKHQ9dCBpbnN0YW5jZW9mIGRlP3RbMF06dCxkZS5tZXJnZSh0aGlzLGRlLnBhcnNl
SFRNTChyWzFdLHQmJnQubm9kZVR5cGU/dC5vd25lckRvY3VtZW50fHx0Om5lLCEwKSkseGUudGVz
dChyWzFdKSYmZGUuaXNQbGFpbk9iamVjdCh0KSlmb3IociBpbiB0KWRlLmlzRnVuY3Rpb24odGhp
c1tyXSk/dGhpc1tyXSh0W3JdKTp0aGlzLmF0dHIocix0W3JdKQotcmV0dXJuIHRoaXN9cmV0dXJu
IGk9bmUuZ2V0RWxlbWVudEJ5SWQoclsyXSksaSYmKHRoaXNbMF09aSx0aGlzLmxlbmd0aD0xKSx0
aGlzfXJldHVybiBlLm5vZGVUeXBlPyh0aGlzWzBdPWUsdGhpcy5sZW5ndGg9MSx0aGlzKTpkZS5p
c0Z1bmN0aW9uKGUpP3ZvaWQgMCE9PW4ucmVhZHk/bi5yZWFkeShlKTplKGRlKTpkZS5tYWtlQXJy
YXkoZSx0aGlzKX0pLnByb3RvdHlwZT1kZS5mbixPZT1kZShuZSkKLXZhciBUZT0vXig/OnBhcmVu
dHN8cHJldig/OlVudGlsfEFsbCkpLyxTZT17Y2hpbGRyZW46ITAsY29udGVudHM6ITAsbmV4dDoh
MCxwcmV2OiEwfQotZGUuZm4uZXh0ZW5kKHtoYXM6ZnVuY3Rpb24oZSl7dmFyIHQ9ZGUoZSx0aGlz
KSxuPXQubGVuZ3RoCi1yZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oKXtmb3IodmFyIGU9MDtl
PG47ZSsrKWlmKGRlLmNvbnRhaW5zKHRoaXMsdFtlXSkpcmV0dXJuITB9KX0sY2xvc2VzdDpmdW5j
dGlvbihlLHQpe3ZhciBuLHI9MCxpPXRoaXMubGVuZ3RoLG89W10scz0ic3RyaW5nIiE9dHlwZW9m
IGUmJmRlKGUpCi1pZighRWUudGVzdChlKSlmb3IoO3I8aTtyKyspZm9yKG49dGhpc1tyXTtuJiZu
IT09dDtuPW4ucGFyZW50Tm9kZSlpZihuLm5vZGVUeXBlPDExJiYocz9zLmluZGV4KG4pPi0xOjE9
PT1uLm5vZGVUeXBlJiZkZS5maW5kLm1hdGNoZXNTZWxlY3RvcihuLGUpKSl7by5wdXNoKG4pCi1i
cmVha31yZXR1cm4gdGhpcy5wdXNoU3RhY2soby5sZW5ndGg+MT9kZS51bmlxdWVTb3J0KG8pOm8p
fSxpbmRleDpmdW5jdGlvbihlKXtyZXR1cm4gZT8ic3RyaW5nIj09dHlwZW9mIGU/YWUuY2FsbChk
ZShlKSx0aGlzWzBdKTphZS5jYWxsKHRoaXMsZS5qcXVlcnk/ZVswXTplKTp0aGlzWzBdJiZ0aGlz
WzBdLnBhcmVudE5vZGU/dGhpcy5maXJzdCgpLnByZXZBbGwoKS5sZW5ndGg6LTF9LGFkZDpmdW5j
dGlvbihlLHQpe3JldHVybiB0aGlzLnB1c2hTdGFjayhkZS51bmlxdWVTb3J0KGRlLm1lcmdlKHRo
aXMuZ2V0KCksZGUoZSx0KSkpKX0sYWRkQmFjazpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hZGQo
bnVsbD09ZT90aGlzLnByZXZPYmplY3Q6dGhpcy5wcmV2T2JqZWN0LmZpbHRlcihlKSl9fSksZGUu
ZWFjaCh7cGFyZW50OmZ1bmN0aW9uKGUpe3ZhciB0PWUucGFyZW50Tm9kZQotcmV0dXJuIHQmJjEx
IT09dC5ub2RlVHlwZT90Om51bGx9LHBhcmVudHM6ZnVuY3Rpb24oZSl7cmV0dXJuIF9lKGUsInBh
cmVudE5vZGUiKX0scGFyZW50c1VudGlsOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gX2UoZSwicGFy
ZW50Tm9kZSIsbil9LG5leHQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHMoZSwibmV4dFNpYmxpbmciKX0s
cHJldjpmdW5jdGlvbihlKXtyZXR1cm4gcyhlLCJwcmV2aW91c1NpYmxpbmciKX0sbmV4dEFsbDpm
dW5jdGlvbihlKXtyZXR1cm4gX2UoZSwibmV4dFNpYmxpbmciKX0scHJldkFsbDpmdW5jdGlvbihl
KXtyZXR1cm4gX2UoZSwicHJldmlvdXNTaWJsaW5nIil9LG5leHRVbnRpbDpmdW5jdGlvbihlLHQs
bil7cmV0dXJuIF9lKGUsIm5leHRTaWJsaW5nIixuKX0scHJldlVudGlsOmZ1bmN0aW9uKGUsdCxu
KXtyZXR1cm4gX2UoZSwicHJldmlvdXNTaWJsaW5nIixuKX0sc2libGluZ3M6ZnVuY3Rpb24oZSl7
cmV0dXJuIHdlKChlLnBhcmVudE5vZGV8fHt9KS5maXJzdENoaWxkLGUpfSxjaGlsZHJlbjpmdW5j
dGlvbihlKXtyZXR1cm4gd2UoZS5maXJzdENoaWxkKX0sY29udGVudHM6ZnVuY3Rpb24oZSl7cmV0
dXJuIGkoZSwiaWZyYW1lIik/ZS5jb250ZW50RG9jdW1lbnQ6KGkoZSwidGVtcGxhdGUiKSYmKGU9
ZS5jb250ZW50fHxlKSxkZS5tZXJnZShbXSxlLmNoaWxkTm9kZXMpKX19LGZ1bmN0aW9uKGUsdCl7
ZGUuZm5bZV09ZnVuY3Rpb24obixyKXt2YXIgaT1kZS5tYXAodGhpcyx0LG4pCi1yZXR1cm4iVW50
aWwiIT09ZS5zbGljZSgtNSkmJihyPW4pLHImJiJzdHJpbmciPT10eXBlb2YgciYmKGk9ZGUuZmls
dGVyKHIsaSkpLHRoaXMubGVuZ3RoPjEmJihTZVtlXXx8ZGUudW5pcXVlU29ydChpKSxUZS50ZXN0
KGUpJiZpLnJldmVyc2UoKSksdGhpcy5wdXNoU3RhY2soaSl9fSkKLXZhciBSZT0vW15ceDIwXHRc
clxuXGZdKy9nCi1kZS5DYWxsYmFja3M9ZnVuY3Rpb24oZSl7ZT0ic3RyaW5nIj09dHlwZW9mIGU/
YShlKTpkZS5leHRlbmQoe30sZSkKLXZhciB0LG4scixpLG89W10scz1bXSx1PS0xLGw9ZnVuY3Rp
b24oKXtmb3IoaT1pfHxlLm9uY2Uscj10PSEwO3MubGVuZ3RoO3U9LTEpZm9yKG49cy5zaGlmdCgp
OysrdTxvLmxlbmd0aDspITE9PT1vW3VdLmFwcGx5KG5bMF0sblsxXSkmJmUuc3RvcE9uRmFsc2Um
Jih1PW8ubGVuZ3RoLG49ITEpCi1lLm1lbW9yeXx8KG49ITEpLHQ9ITEsaSYmKG89bj9bXToiIil9
LGM9e2FkZDpmdW5jdGlvbigpe3JldHVybiBvJiYobiYmIXQmJih1PW8ubGVuZ3RoLTEscy5wdXNo
KG4pKSxmdW5jdGlvbiB0KG4pe2RlLmVhY2gobixmdW5jdGlvbihuLHIpe2RlLmlzRnVuY3Rpb24o
cik/ZS51bmlxdWUmJmMuaGFzKHIpfHxvLnB1c2gocik6ciYmci5sZW5ndGgmJiJzdHJpbmciIT09
ZGUudHlwZShyKSYmdChyKX0pfShhcmd1bWVudHMpLG4mJiF0JiZsKCkpLHRoaXN9LHJlbW92ZTpm
dW5jdGlvbigpe3JldHVybiBkZS5lYWNoKGFyZ3VtZW50cyxmdW5jdGlvbihlLHQpe2Zvcih2YXIg
bjsobj1kZS5pbkFycmF5KHQsbyxuKSk+LTE7KW8uc3BsaWNlKG4sMSksbjw9dSYmdS0tfSksdGhp
c30saGFzOmZ1bmN0aW9uKGUpe3JldHVybiBlP2RlLmluQXJyYXkoZSxvKT4tMTpvLmxlbmd0aD4w
fSxlbXB0eTpmdW5jdGlvbigpe3JldHVybiBvJiYobz1bXSksdGhpc30sZGlzYWJsZTpmdW5jdGlv
bigpe3JldHVybiBpPXM9W10sbz1uPSIiLHRoaXN9LGRpc2FibGVkOmZ1bmN0aW9uKCl7cmV0dXJu
IW99LGxvY2s6ZnVuY3Rpb24oKXtyZXR1cm4gaT1zPVtdLG58fHR8fChvPW49IiIpLHRoaXN9LGxv
Y2tlZDpmdW5jdGlvbigpe3JldHVybiEhaX0sZmlyZVdpdGg6ZnVuY3Rpb24oZSxuKXtyZXR1cm4g
aXx8KG49bnx8W10sbj1bZSxuLnNsaWNlP24uc2xpY2UoKTpuXSxzLnB1c2gobiksdHx8bCgpKSx0
aGlzfSxmaXJlOmZ1bmN0aW9uKCl7cmV0dXJuIGMuZmlyZVdpdGgodGhpcyxhcmd1bWVudHMpLHRo
aXN9LGZpcmVkOmZ1bmN0aW9uKCl7cmV0dXJuISFyfX0KLXJldHVybiBjfSxkZS5leHRlbmQoe0Rl
ZmVycmVkOmZ1bmN0aW9uKHQpe3ZhciBuPVtbIm5vdGlmeSIsInByb2dyZXNzIixkZS5DYWxsYmFj
a3MoIm1lbW9yeSIpLGRlLkNhbGxiYWNrcygibWVtb3J5IiksMl0sWyJyZXNvbHZlIiwiZG9uZSIs
ZGUuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLGRlLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSww
LCJyZXNvbHZlZCJdLFsicmVqZWN0IiwiZmFpbCIsZGUuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIp
LGRlLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSwxLCJyZWplY3RlZCJdXSxyPSJwZW5kaW5nIixp
PXtzdGF0ZTpmdW5jdGlvbigpe3JldHVybiByfSxhbHdheXM6ZnVuY3Rpb24oKXtyZXR1cm4gby5k
b25lKGFyZ3VtZW50cykuZmFpbChhcmd1bWVudHMpLHRoaXN9LGNhdGNoOmZ1bmN0aW9uKGUpe3Jl
dHVybiBpLnRoZW4obnVsbCxlKX0scGlwZTpmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cwotcmV0
dXJuIGRlLkRlZmVycmVkKGZ1bmN0aW9uKHQpe2RlLmVhY2gobixmdW5jdGlvbihuLHIpe3ZhciBp
PWRlLmlzRnVuY3Rpb24oZVtyWzRdXSkmJmVbcls0XV0KLW9bclsxXV0oZnVuY3Rpb24oKXt2YXIg
ZT1pJiZpLmFwcGx5KHRoaXMsYXJndW1lbnRzKQotZSYmZGUuaXNGdW5jdGlvbihlLnByb21pc2Up
P2UucHJvbWlzZSgpLnByb2dyZXNzKHQubm90aWZ5KS5kb25lKHQucmVzb2x2ZSkuZmFpbCh0LnJl
amVjdCk6dFtyWzBdKyJXaXRoIl0odGhpcyxpP1tlXTphcmd1bWVudHMpfSl9KSxlPW51bGx9KS5w
cm9taXNlKCl9LHRoZW46ZnVuY3Rpb24odCxyLGkpe2Z1bmN0aW9uIG8odCxuLHIsaSl7cmV0dXJu
IGZ1bmN0aW9uKCl7dmFyIGE9dGhpcyxjPWFyZ3VtZW50cyxwPWZ1bmN0aW9uKCl7dmFyIGUscAot
aWYoISh0PHMpKXtpZigoZT1yLmFwcGx5KGEsYykpPT09bi5wcm9taXNlKCkpdGhyb3cgbmV3IFR5
cGVFcnJvcigiVGhlbmFibGUgc2VsZi1yZXNvbHV0aW9uIikKLXA9ZSYmKCJvYmplY3QiPT10eXBl
b2YgZXx8ImZ1bmN0aW9uIj09dHlwZW9mIGUpJiZlLnRoZW4sZGUuaXNGdW5jdGlvbihwKT9pP3Au
Y2FsbChlLG8ocyxuLHUsaSksbyhzLG4sbCxpKSk6KHMrKyxwLmNhbGwoZSxvKHMsbix1LGkpLG8o
cyxuLGwsaSksbyhzLG4sdSxuLm5vdGlmeVdpdGgpKSk6KHIhPT11JiYoYT12b2lkIDAsYz1bZV0p
LChpfHxuLnJlc29sdmVXaXRoKShhLGMpKX19LGY9aT9wOmZ1bmN0aW9uKCl7dHJ5e3AoKX1jYXRj
aChlKXtkZS5EZWZlcnJlZC5leGNlcHRpb25Ib29rJiZkZS5EZWZlcnJlZC5leGNlcHRpb25Ib29r
KGUsZi5zdGFja1RyYWNlKSx0KzE+PXMmJihyIT09bCYmKGE9dm9pZCAwLGM9W2VdKSxuLnJlamVj
dFdpdGgoYSxjKSl9fQotdD9mKCk6KGRlLkRlZmVycmVkLmdldFN0YWNrSG9vayYmKGYuc3RhY2tU
cmFjZT1kZS5EZWZlcnJlZC5nZXRTdGFja0hvb2soKSksZS5zZXRUaW1lb3V0KGYpKX19dmFyIHM9
MAotcmV0dXJuIGRlLkRlZmVycmVkKGZ1bmN0aW9uKGUpe25bMF1bM10uYWRkKG8oMCxlLGRlLmlz
RnVuY3Rpb24oaSk/aTp1LGUubm90aWZ5V2l0aCkpLG5bMV1bM10uYWRkKG8oMCxlLGRlLmlzRnVu
Y3Rpb24odCk/dDp1KSksblsyXVszXS5hZGQobygwLGUsZGUuaXNGdW5jdGlvbihyKT9yOmwpKX0p
LnByb21pc2UoKX0scHJvbWlzZTpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9ZT9kZS5leHRlbmQo
ZSxpKTppfX0sbz17fQotcmV0dXJuIGRlLmVhY2gobixmdW5jdGlvbihlLHQpe3ZhciBzPXRbMl0s
YT10WzVdCi1pW3RbMV1dPXMuYWRkLGEmJnMuYWRkKGZ1bmN0aW9uKCl7cj1hfSxuWzMtZV1bMl0u
ZGlzYWJsZSxuWzBdWzJdLmxvY2spLHMuYWRkKHRbM10uZmlyZSksb1t0WzBdXT1mdW5jdGlvbigp
e3JldHVybiBvW3RbMF0rIldpdGgiXSh0aGlzPT09bz92b2lkIDA6dGhpcyxhcmd1bWVudHMpLHRo
aXN9LG9bdFswXSsiV2l0aCJdPXMuZmlyZVdpdGh9KSxpLnByb21pc2UobyksdCYmdC5jYWxsKG8s
byksb30sd2hlbjpmdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoLG49dCxyPUFycmF5
KG4pLGk9aWUuY2FsbChhcmd1bWVudHMpLG89ZGUuRGVmZXJyZWQoKSxzPWZ1bmN0aW9uKGUpe3Jl
dHVybiBmdW5jdGlvbihuKXtyW2VdPXRoaXMsaVtlXT1hcmd1bWVudHMubGVuZ3RoPjE/aWUuY2Fs
bChhcmd1bWVudHMpOm4sLS10fHxvLnJlc29sdmVXaXRoKHIsaSl9fQotaWYodDw9MSYmKGMoZSxv
LmRvbmUocyhuKSkucmVzb2x2ZSxvLnJlamVjdCwhdCksInBlbmRpbmciPT09by5zdGF0ZSgpfHxk
ZS5pc0Z1bmN0aW9uKGlbbl0mJmlbbl0udGhlbikpKXJldHVybiBvLnRoZW4oKQotZm9yKDtuLS07
KWMoaVtuXSxzKG4pLG8ucmVqZWN0KQotcmV0dXJuIG8ucHJvbWlzZSgpfX0pCi12YXIga2U9L14o
RXZhbHxJbnRlcm5hbHxSYW5nZXxSZWZlcmVuY2V8U3ludGF4fFR5cGV8VVJJKUVycm9yJC8KLWRl
LkRlZmVycmVkLmV4Y2VwdGlvbkhvb2s9ZnVuY3Rpb24odCxuKXtlLmNvbnNvbGUmJmUuY29uc29s
ZS53YXJuJiZ0JiZrZS50ZXN0KHQubmFtZSkmJmUuY29uc29sZS53YXJuKCJqUXVlcnkuRGVmZXJy
ZWQgZXhjZXB0aW9uOiAiK3QubWVzc2FnZSx0LnN0YWNrLG4pfSxkZS5yZWFkeUV4Y2VwdGlvbj1m
dW5jdGlvbih0KXtlLnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aHJvdyB0fSl9Ci12YXIgTmU9ZGUu
RGVmZXJyZWQoKQotZGUuZm4ucmVhZHk9ZnVuY3Rpb24oZSl7cmV0dXJuIE5lLnRoZW4oZSkuY2F0
Y2goZnVuY3Rpb24oZSl7ZGUucmVhZHlFeGNlcHRpb24oZSl9KSx0aGlzfSxkZS5leHRlbmQoe2lz
UmVhZHk6ITEscmVhZHlXYWl0OjEscmVhZHk6ZnVuY3Rpb24oZSl7KCEwPT09ZT8tLWRlLnJlYWR5
V2FpdDpkZS5pc1JlYWR5KXx8KGRlLmlzUmVhZHk9ITAsITAhPT1lJiYtLWRlLnJlYWR5V2FpdD4w
fHxOZS5yZXNvbHZlV2l0aChuZSxbZGVdKSl9fSksZGUucmVhZHkudGhlbj1OZS50aGVuLCJjb21w
bGV0ZSI9PT1uZS5yZWFkeVN0YXRlfHwibG9hZGluZyIhPT1uZS5yZWFkeVN0YXRlJiYhbmUuZG9j
dW1lbnRFbGVtZW50LmRvU2Nyb2xsP2Uuc2V0VGltZW91dChkZS5yZWFkeSk6KG5lLmFkZEV2ZW50
TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLHApLGUuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIs
cCkpCi12YXIgUGU9ZnVuY3Rpb24oZSx0LG4scixpLG8scyl7dmFyIGE9MCx1PWUubGVuZ3RoLGw9
bnVsbD09bgotaWYoIm9iamVjdCI9PT1kZS50eXBlKG4pKXtpPSEwCi1mb3IoYSBpbiBuKVBlKGUs
dCxhLG5bYV0sITAsbyxzKX1lbHNlIGlmKHZvaWQgMCE9PXImJihpPSEwLGRlLmlzRnVuY3Rpb24o
cil8fChzPSEwKSxsJiYocz8odC5jYWxsKGUsciksdD1udWxsKToobD10LHQ9ZnVuY3Rpb24oZSx0
LG4pe3JldHVybiBsLmNhbGwoZGUoZSksbil9KSksdCkpZm9yKDthPHU7YSsrKXQoZVthXSxuLHM/
cjpyLmNhbGwoZVthXSxhLHQoZVthXSxuKSkpCi1yZXR1cm4gaT9lOmw/dC5jYWxsKGUpOnU/dChl
WzBdLG4pOm99LGplPWZ1bmN0aW9uKGUpe3JldHVybiAxPT09ZS5ub2RlVHlwZXx8OT09PWUubm9k
ZVR5cGV8fCErZS5ub2RlVHlwZX0KLWYudWlkPTEsZi5wcm90b3R5cGU9e2NhY2hlOmZ1bmN0aW9u
KGUpe3ZhciB0PWVbdGhpcy5leHBhbmRvXQotcmV0dXJuIHR8fCh0PXt9LGplKGUpJiYoZS5ub2Rl
VHlwZT9lW3RoaXMuZXhwYW5kb109dDpPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0aGlzLmV4cGFu
ZG8se3ZhbHVlOnQsY29uZmlndXJhYmxlOiEwfSkpKSx0fSxzZXQ6ZnVuY3Rpb24oZSx0LG4pe3Zh
ciByLGk9dGhpcy5jYWNoZShlKQotaWYoInN0cmluZyI9PXR5cGVvZiB0KWlbZGUuY2FtZWxDYXNl
KHQpXT1uCi1lbHNlIGZvcihyIGluIHQpaVtkZS5jYW1lbENhc2UocildPXRbcl0KLXJldHVybiBp
fSxnZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwPT09dD90aGlzLmNhY2hlKGUpOmVbdGhp
cy5leHBhbmRvXSYmZVt0aGlzLmV4cGFuZG9dW2RlLmNhbWVsQ2FzZSh0KV19LGFjY2VzczpmdW5j
dGlvbihlLHQsbil7cmV0dXJuIHZvaWQgMD09PXR8fHQmJiJzdHJpbmciPT10eXBlb2YgdCYmdm9p
ZCAwPT09bj90aGlzLmdldChlLHQpOih0aGlzLnNldChlLHQsbiksdm9pZCAwIT09bj9uOnQpfSxy
ZW1vdmU6ZnVuY3Rpb24oZSx0KXt2YXIgbixyPWVbdGhpcy5leHBhbmRvXQotaWYodm9pZCAwIT09
cil7aWYodm9pZCAwIT09dCl7QXJyYXkuaXNBcnJheSh0KT90PXQubWFwKGRlLmNhbWVsQ2FzZSk6
KHQ9ZGUuY2FtZWxDYXNlKHQpLHQ9dCBpbiByP1t0XTp0Lm1hdGNoKFJlKXx8W10pLG49dC5sZW5n
dGgKLWZvcig7bi0tOylkZWxldGUgclt0W25dXX0odm9pZCAwPT09dHx8ZGUuaXNFbXB0eU9iamVj
dChyKSkmJihlLm5vZGVUeXBlP2VbdGhpcy5leHBhbmRvXT12b2lkIDA6ZGVsZXRlIGVbdGhpcy5l
eHBhbmRvXSl9fSxoYXNEYXRhOmZ1bmN0aW9uKGUpe3ZhciB0PWVbdGhpcy5leHBhbmRvXQotcmV0
dXJuIHZvaWQgMCE9PXQmJiFkZS5pc0VtcHR5T2JqZWN0KHQpfX0KLXZhciBEZT1uZXcgZixMZT1u
ZXcgZixJZT0vXig/Olx7W1x3XFddKlx9fFxbW1x3XFddKlxdKSQvLE1lPS9bQS1aXS9nCi1kZS5l
eHRlbmQoe2hhc0RhdGE6ZnVuY3Rpb24oZSl7cmV0dXJuIExlLmhhc0RhdGEoZSl8fERlLmhhc0Rh
dGEoZSl9LGRhdGE6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBMZS5hY2Nlc3MoZSx0LG4pfSxyZW1v
dmVEYXRhOmZ1bmN0aW9uKGUsdCl7TGUucmVtb3ZlKGUsdCl9LF9kYXRhOmZ1bmN0aW9uKGUsdCxu
KXtyZXR1cm4gRGUuYWNjZXNzKGUsdCxuKX0sX3JlbW92ZURhdGE6ZnVuY3Rpb24oZSx0KXtEZS5y
ZW1vdmUoZSx0KX19KSxkZS5mbi5leHRlbmQoe2RhdGE6ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGks
bz10aGlzWzBdLHM9byYmby5hdHRyaWJ1dGVzCi1pZih2b2lkIDA9PT1lKXtpZih0aGlzLmxlbmd0
aCYmKGk9TGUuZ2V0KG8pLDE9PT1vLm5vZGVUeXBlJiYhRGUuZ2V0KG8sImhhc0RhdGFBdHRycyIp
KSl7Zm9yKG49cy5sZW5ndGg7bi0tOylzW25dJiYocj1zW25dLm5hbWUsMD09PXIuaW5kZXhPZigi
ZGF0YS0iKSYmKHI9ZGUuY2FtZWxDYXNlKHIuc2xpY2UoNSkpLGQobyxyLGlbcl0pKSkKLURlLnNl
dChvLCJoYXNEYXRhQXR0cnMiLCEwKX1yZXR1cm4gaX1yZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGU/
dGhpcy5lYWNoKGZ1bmN0aW9uKCl7TGUuc2V0KHRoaXMsZSl9KTpQZSh0aGlzLGZ1bmN0aW9uKHQp
e3ZhciBuCi1pZihvJiZ2b2lkIDA9PT10KXtpZih2b2lkIDAhPT0obj1MZS5nZXQobyxlKSkpcmV0
dXJuIG4KLWlmKHZvaWQgMCE9PShuPWQobyxlKSkpcmV0dXJuIG59ZWxzZSB0aGlzLmVhY2goZnVu
Y3Rpb24oKXtMZS5zZXQodGhpcyxlLHQpfSl9LG51bGwsdCxhcmd1bWVudHMubGVuZ3RoPjEsbnVs
bCwhMCl9LHJlbW92ZURhdGE6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigp
e0xlLnJlbW92ZSh0aGlzLGUpfSl9fSksZGUuZXh0ZW5kKHtxdWV1ZTpmdW5jdGlvbihlLHQsbil7
dmFyIHIKLWlmKGUpcmV0dXJuIHQ9KHR8fCJmeCIpKyJxdWV1ZSIscj1EZS5nZXQoZSx0KSxuJiYo
IXJ8fEFycmF5LmlzQXJyYXkobik/cj1EZS5hY2Nlc3MoZSx0LGRlLm1ha2VBcnJheShuKSk6ci5w
dXNoKG4pKSxyfHxbXX0sZGVxdWV1ZTpmdW5jdGlvbihlLHQpe3Q9dHx8ImZ4IgotdmFyIG49ZGUu
cXVldWUoZSx0KSxyPW4ubGVuZ3RoLGk9bi5zaGlmdCgpLG89ZGUuX3F1ZXVlSG9va3MoZSx0KSxz
PWZ1bmN0aW9uKCl7ZGUuZGVxdWV1ZShlLHQpfQotImlucHJvZ3Jlc3MiPT09aSYmKGk9bi5zaGlm
dCgpLHItLSksaSYmKCJmeCI9PT10JiZuLnVuc2hpZnQoImlucHJvZ3Jlc3MiKSxkZWxldGUgby5z
dG9wLGkuY2FsbChlLHMsbykpLCFyJiZvJiZvLmVtcHR5LmZpcmUoKX0sX3F1ZXVlSG9va3M6ZnVu
Y3Rpb24oZSx0KXt2YXIgbj10KyJxdWV1ZUhvb2tzIgotcmV0dXJuIERlLmdldChlLG4pfHxEZS5h
Y2Nlc3MoZSxuLHtlbXB0eTpkZS5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IikuYWRkKGZ1bmN0aW9u
KCl7RGUucmVtb3ZlKGUsW3QrInF1ZXVlIixuXSl9KX0pfX0pLGRlLmZuLmV4dGVuZCh7cXVldWU6
ZnVuY3Rpb24oZSx0KXt2YXIgbj0yCi1yZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGUmJih0PWUsZT0i
ZngiLG4tLSksYXJndW1lbnRzLmxlbmd0aDxuP2RlLnF1ZXVlKHRoaXNbMF0sZSk6dm9pZCAwPT09
dD90aGlzOnRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBuPWRlLnF1ZXVlKHRoaXMsZSx0KQotZGUu
X3F1ZXVlSG9va3ModGhpcyxlKSwiZngiPT09ZSYmImlucHJvZ3Jlc3MiIT09blswXSYmZGUuZGVx
dWV1ZSh0aGlzLGUpfSl9LGRlcXVldWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5j
dGlvbigpe2RlLmRlcXVldWUodGhpcyxlKX0pfSxjbGVhclF1ZXVlOmZ1bmN0aW9uKGUpe3JldHVy
biB0aGlzLnF1ZXVlKGV8fCJmeCIsW10pfSxwcm9taXNlOmZ1bmN0aW9uKGUsdCl7dmFyIG4scj0x
LGk9ZGUuRGVmZXJyZWQoKSxvPXRoaXMscz10aGlzLmxlbmd0aCxhPWZ1bmN0aW9uKCl7LS1yfHxp
LnJlc29sdmVXaXRoKG8sW29dKX0KLWZvcigic3RyaW5nIiE9dHlwZW9mIGUmJih0PWUsZT12b2lk
IDApLGU9ZXx8ImZ4IjtzLS07KShuPURlLmdldChvW3NdLGUrInF1ZXVlSG9va3MiKSkmJm4uZW1w
dHkmJihyKyssbi5lbXB0eS5hZGQoYSkpCi1yZXR1cm4gYSgpLGkucHJvbWlzZSh0KX19KQotdmFy
IEZlPS9bKy1dPyg/OlxkKlwufClcZCsoPzpbZUVdWystXT9cZCt8KS8uc291cmNlLHplPW5ldyBS
ZWdFeHAoIl4oPzooWystXSk9fCkoIitGZSsiKShbYS16JV0qKSQiLCJpIiksVWU9WyJUb3AiLCJS
aWdodCIsIkJvdHRvbSIsIkxlZnQiXSxCZT1mdW5jdGlvbihlLHQpe3JldHVybiBlPXR8fGUsIm5v
bmUiPT09ZS5zdHlsZS5kaXNwbGF5fHwiIj09PWUuc3R5bGUuZGlzcGxheSYmZGUuY29udGFpbnMo
ZS5vd25lckRvY3VtZW50LGUpJiYibm9uZSI9PT1kZS5jc3MoZSwiZGlzcGxheSIpfSxxZT1mdW5j
dGlvbihlLHQsbixyKXt2YXIgaSxvLHM9e30KLWZvcihvIGluIHQpc1tvXT1lLnN0eWxlW29dLGUu
c3R5bGVbb109dFtvXQotaT1uLmFwcGx5KGUscnx8W10pCi1mb3IobyBpbiB0KWUuc3R5bGVbb109
c1tvXQotcmV0dXJuIGl9LEhlPXt9Ci1kZS5mbi5leHRlbmQoe3Nob3c6ZnVuY3Rpb24oKXtyZXR1
cm4geSh0aGlzLCEwKX0saGlkZTpmdW5jdGlvbigpe3JldHVybiB5KHRoaXMpfSx0b2dnbGU6ZnVu
Y3Rpb24oZSl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgZT9lP3RoaXMuc2hvdygpOnRoaXMuaGlk
ZSgpOnRoaXMuZWFjaChmdW5jdGlvbigpe0JlKHRoaXMpP2RlKHRoaXMpLnNob3coKTpkZSh0aGlz
KS5oaWRlKCl9KX19KQotdmFyIFZlPS9eKD86Y2hlY2tib3h8cmFkaW8pJC9pLFdlPS88KFthLXpd
W15cL1wwPlx4MjBcdFxyXG5cZl0rKS9pLCRlPS9eJHxcLyg/OmphdmF8ZWNtYSlzY3JpcHQvaSxH
ZT17b3B0aW9uOlsxLCI8c2VsZWN0IG11bHRpcGxlPSdtdWx0aXBsZSc+IiwiPC9zZWxlY3Q+Il0s
dGhlYWQ6WzEsIjx0YWJsZT4iLCI8L3RhYmxlPiJdLGNvbDpbMiwiPHRhYmxlPjxjb2xncm91cD4i
LCI8L2NvbGdyb3VwPjwvdGFibGU+Il0sdHI6WzIsIjx0YWJsZT48dGJvZHk+IiwiPC90Ym9keT48
L3RhYmxlPiJdLHRkOlszLCI8dGFibGU+PHRib2R5Pjx0cj4iLCI8L3RyPjwvdGJvZHk+PC90YWJs
ZT4iXSxfZGVmYXVsdDpbMCwiIiwiIl19Ci1HZS5vcHRncm91cD1HZS5vcHRpb24sR2UudGJvZHk9
R2UudGZvb3Q9R2UuY29sZ3JvdXA9R2UuY2FwdGlvbj1HZS50aGVhZCxHZS50aD1HZS50ZAotdmFy
IEtlPS88fCYjP1x3KzsvOyhmdW5jdGlvbigpe3ZhciBlPW5lLmNyZWF0ZURvY3VtZW50RnJhZ21l
bnQoKSx0PWUuYXBwZW5kQ2hpbGQobmUuY3JlYXRlRWxlbWVudCgiZGl2IikpLG49bmUuY3JlYXRl
RWxlbWVudCgiaW5wdXQiKQotbi5zZXRBdHRyaWJ1dGUoInR5cGUiLCJyYWRpbyIpLG4uc2V0QXR0
cmlidXRlKCJjaGVja2VkIiwiY2hlY2tlZCIpLG4uc2V0QXR0cmlidXRlKCJuYW1lIiwidCIpLHQu
YXBwZW5kQ2hpbGQobiksaGUuY2hlY2tDbG9uZT10LmNsb25lTm9kZSghMCkuY2xvbmVOb2RlKCEw
KS5sYXN0Q2hpbGQuY2hlY2tlZCx0LmlubmVySFRNTD0iPHRleHRhcmVhPng8L3RleHRhcmVhPiIs
aGUubm9DbG9uZUNoZWNrZWQ9ISF0LmNsb25lTm9kZSghMCkubGFzdENoaWxkLmRlZmF1bHRWYWx1
ZX0pKCkKLXZhciBRZT1uZS5kb2N1bWVudEVsZW1lbnQsWWU9L15rZXkvLEplPS9eKD86bW91c2V8
cG9pbnRlcnxjb250ZXh0bWVudXxkcmFnfGRyb3ApfGNsaWNrLyxYZT0vXihbXi5dKikoPzpcLigu
Kyl8KS8KLWRlLmV2ZW50PXtnbG9iYWw6e30sYWRkOmZ1bmN0aW9uKGUsdCxuLHIsaSl7dmFyIG8s
cyxhLHUsbCxjLHAsZixoLGQsbSxnPURlLmdldChlKQotaWYoZylmb3Iobi5oYW5kbGVyJiYobz1u
LG49by5oYW5kbGVyLGk9by5zZWxlY3RvciksaSYmZGUuZmluZC5tYXRjaGVzU2VsZWN0b3IoUWUs
aSksbi5ndWlkfHwobi5ndWlkPWRlLmd1aWQrKyksKHU9Zy5ldmVudHMpfHwodT1nLmV2ZW50cz17
fSksKHM9Zy5oYW5kbGUpfHwocz1nLmhhbmRsZT1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwIT09
ZGUmJmRlLmV2ZW50LnRyaWdnZXJlZCE9PXQudHlwZT9kZS5ldmVudC5kaXNwYXRjaC5hcHBseShl
LGFyZ3VtZW50cyk6dm9pZCAwfSksdD0odHx8IiIpLm1hdGNoKFJlKXx8WyIiXSxsPXQubGVuZ3Ro
O2wtLTspYT1YZS5leGVjKHRbbF0pfHxbXSxoPW09YVsxXSxkPShhWzJdfHwiIikuc3BsaXQoIi4i
KS5zb3J0KCksaCYmKHA9ZGUuZXZlbnQuc3BlY2lhbFtoXXx8e30saD0oaT9wLmRlbGVnYXRlVHlw
ZTpwLmJpbmRUeXBlKXx8aCxwPWRlLmV2ZW50LnNwZWNpYWxbaF18fHt9LGM9ZGUuZXh0ZW5kKHt0
eXBlOmgsb3JpZ1R5cGU6bSxkYXRhOnIsaGFuZGxlcjpuLGd1aWQ6bi5ndWlkLHNlbGVjdG9yOmks
bmVlZHNDb250ZXh0OmkmJmRlLmV4cHIubWF0Y2gubmVlZHNDb250ZXh0LnRlc3QoaSksbmFtZXNw
YWNlOmQuam9pbigiLiIpfSxvKSwoZj11W2hdKXx8KGY9dVtoXT1bXSxmLmRlbGVnYXRlQ291bnQ9
MCxwLnNldHVwJiYhMSE9PXAuc2V0dXAuY2FsbChlLHIsZCxzKXx8ZS5hZGRFdmVudExpc3RlbmVy
JiZlLmFkZEV2ZW50TGlzdGVuZXIoaCxzKSkscC5hZGQmJihwLmFkZC5jYWxsKGUsYyksYy5oYW5k
bGVyLmd1aWR8fChjLmhhbmRsZXIuZ3VpZD1uLmd1aWQpKSxpP2Yuc3BsaWNlKGYuZGVsZWdhdGVD
b3VudCsrLDAsYyk6Zi5wdXNoKGMpLGRlLmV2ZW50Lmdsb2JhbFtoXT0hMCl9LHJlbW92ZTpmdW5j
dGlvbihlLHQsbixyLGkpe3ZhciBvLHMsYSx1LGwsYyxwLGYsaCxkLG0sZz1EZS5oYXNEYXRhKGUp
JiZEZS5nZXQoZSkKLWlmKGcmJih1PWcuZXZlbnRzKSl7Zm9yKHQ9KHR8fCIiKS5tYXRjaChSZSl8
fFsiIl0sbD10Lmxlbmd0aDtsLS07KWlmKGE9WGUuZXhlYyh0W2xdKXx8W10saD1tPWFbMV0sZD0o
YVsyXXx8IiIpLnNwbGl0KCIuIikuc29ydCgpLGgpe2ZvcihwPWRlLmV2ZW50LnNwZWNpYWxbaF18
fHt9LGg9KHI/cC5kZWxlZ2F0ZVR5cGU6cC5iaW5kVHlwZSl8fGgsZj11W2hdfHxbXSxhPWFbMl0m
Jm5ldyBSZWdFeHAoIihefFxcLikiK2Quam9pbigiXFwuKD86LipcXC58KSIpKyIoXFwufCQpIiks
cz1vPWYubGVuZ3RoO28tLTspYz1mW29dLCFpJiZtIT09Yy5vcmlnVHlwZXx8biYmbi5ndWlkIT09
Yy5ndWlkfHxhJiYhYS50ZXN0KGMubmFtZXNwYWNlKXx8ciYmciE9PWMuc2VsZWN0b3ImJigiKioi
IT09cnx8IWMuc2VsZWN0b3IpfHwoZi5zcGxpY2UobywxKSxjLnNlbGVjdG9yJiZmLmRlbGVnYXRl
Q291bnQtLSxwLnJlbW92ZSYmcC5yZW1vdmUuY2FsbChlLGMpKQotcyYmIWYubGVuZ3RoJiYocC50
ZWFyZG93biYmITEhPT1wLnRlYXJkb3duLmNhbGwoZSxkLGcuaGFuZGxlKXx8ZGUucmVtb3ZlRXZl
bnQoZSxoLGcuaGFuZGxlKSxkZWxldGUgdVtoXSl9ZWxzZSBmb3IoaCBpbiB1KWRlLmV2ZW50LnJl
bW92ZShlLGgrdFtsXSxuLHIsITApCi1kZS5pc0VtcHR5T2JqZWN0KHUpJiZEZS5yZW1vdmUoZSwi
aGFuZGxlIGV2ZW50cyIpfX0sZGlzcGF0Y2g6ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGksbyxzLGE9
ZGUuZXZlbnQuZml4KGUpLHU9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpLGw9KERlLmdldCh0
aGlzLCJldmVudHMiKXx8e30pW2EudHlwZV18fFtdLGM9ZGUuZXZlbnQuc3BlY2lhbFthLnR5cGVd
fHx7fQotZm9yKHVbMF09YSx0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl1W3RdPWFyZ3VtZW50
c1t0XQotaWYoYS5kZWxlZ2F0ZVRhcmdldD10aGlzLCFjLnByZURpc3BhdGNofHwhMSE9PWMucHJl
RGlzcGF0Y2guY2FsbCh0aGlzLGEpKXtmb3Iocz1kZS5ldmVudC5oYW5kbGVycy5jYWxsKHRoaXMs
YSxsKSx0PTA7KGk9c1t0KytdKSYmIWEuaXNQcm9wYWdhdGlvblN0b3BwZWQoKTspZm9yKGEuY3Vy
cmVudFRhcmdldD1pLmVsZW0sbj0wOyhvPWkuaGFuZGxlcnNbbisrXSkmJiFhLmlzSW1tZWRpYXRl
UHJvcGFnYXRpb25TdG9wcGVkKCk7KWEucm5hbWVzcGFjZSYmIWEucm5hbWVzcGFjZS50ZXN0KG8u
bmFtZXNwYWNlKXx8KGEuaGFuZGxlT2JqPW8sYS5kYXRhPW8uZGF0YSx2b2lkIDAhPT0ocj0oKGRl
LmV2ZW50LnNwZWNpYWxbby5vcmlnVHlwZV18fHt9KS5oYW5kbGV8fG8uaGFuZGxlcikuYXBwbHko
aS5lbGVtLHUpKSYmITE9PT0oYS5yZXN1bHQ9cikmJihhLnByZXZlbnREZWZhdWx0KCksYS5zdG9w
UHJvcGFnYXRpb24oKSkpCi1yZXR1cm4gYy5wb3N0RGlzcGF0Y2gmJmMucG9zdERpc3BhdGNoLmNh
bGwodGhpcyxhKSxhLnJlc3VsdH19LGhhbmRsZXJzOmZ1bmN0aW9uKGUsdCl7dmFyIG4scixpLG8s
cyxhPVtdLHU9dC5kZWxlZ2F0ZUNvdW50LGw9ZS50YXJnZXQKLWlmKHUmJmwubm9kZVR5cGUmJiEo
ImNsaWNrIj09PWUudHlwZSYmZS5idXR0b24+PTEpKWZvcig7bCE9PXRoaXM7bD1sLnBhcmVudE5v
ZGV8fHRoaXMpaWYoMT09PWwubm9kZVR5cGUmJigiY2xpY2siIT09ZS50eXBlfHwhMCE9PWwuZGlz
YWJsZWQpKXtmb3Iobz1bXSxzPXt9LG49MDtuPHU7bisrKXI9dFtuXSxpPXIuc2VsZWN0b3IrIiAi
LHZvaWQgMD09PXNbaV0mJihzW2ldPXIubmVlZHNDb250ZXh0P2RlKGksdGhpcykuaW5kZXgobCk+
LTE6ZGUuZmluZChpLHRoaXMsbnVsbCxbbF0pLmxlbmd0aCksc1tpXSYmby5wdXNoKHIpCi1vLmxl
bmd0aCYmYS5wdXNoKHtlbGVtOmwsaGFuZGxlcnM6b30pfXJldHVybiBsPXRoaXMsdTx0Lmxlbmd0
aCYmYS5wdXNoKHtlbGVtOmwsaGFuZGxlcnM6dC5zbGljZSh1KX0pLGF9LGFkZFByb3A6ZnVuY3Rp
b24oZSx0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZGUuRXZlbnQucHJvdG90eXBlLGUse2VudW1l
cmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDpkZS5pc0Z1bmN0aW9uKHQpP2Z1bmN0aW9uKCl7
aWYodGhpcy5vcmlnaW5hbEV2ZW50KXJldHVybiB0KHRoaXMub3JpZ2luYWxFdmVudCl9OmZ1bmN0
aW9uKCl7aWYodGhpcy5vcmlnaW5hbEV2ZW50KXJldHVybiB0aGlzLm9yaWdpbmFsRXZlbnRbZV19
LHNldDpmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxlLHtlbnVtZXJhYmxl
OiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp0fSl9fSl9LGZpeDpmdW5jdGlv
bihlKXtyZXR1cm4gZVtkZS5leHBhbmRvXT9lOm5ldyBkZS5FdmVudChlKX0sc3BlY2lhbDp7bG9h
ZDp7bm9CdWJibGU6ITB9LGZvY3VzOnt0cmlnZ2VyOmZ1bmN0aW9uKCl7aWYodGhpcyE9PXgoKSYm
dGhpcy5mb2N1cylyZXR1cm4gdGhpcy5mb2N1cygpLCExfSxkZWxlZ2F0ZVR5cGU6ImZvY3VzaW4i
fSxibHVyOnt0cmlnZ2VyOmZ1bmN0aW9uKCl7aWYodGhpcz09PXgoKSYmdGhpcy5ibHVyKXJldHVy
biB0aGlzLmJsdXIoKSwhMX0sZGVsZWdhdGVUeXBlOiJmb2N1c291dCJ9LGNsaWNrOnt0cmlnZ2Vy
OmZ1bmN0aW9uKCl7aWYoImNoZWNrYm94Ij09PXRoaXMudHlwZSYmdGhpcy5jbGljayYmaSh0aGlz
LCJpbnB1dCIpKXJldHVybiB0aGlzLmNsaWNrKCksITF9LF9kZWZhdWx0OmZ1bmN0aW9uKGUpe3Jl
dHVybiBpKGUudGFyZ2V0LCJhIil9fSxiZWZvcmV1bmxvYWQ6e3Bvc3REaXNwYXRjaDpmdW5jdGlv
bihlKXt2b2lkIDAhPT1lLnJlc3VsdCYmZS5vcmlnaW5hbEV2ZW50JiYoZS5vcmlnaW5hbEV2ZW50
LnJldHVyblZhbHVlPWUucmVzdWx0KX19fX0sZGUucmVtb3ZlRXZlbnQ9ZnVuY3Rpb24oZSx0LG4p
e2UucmVtb3ZlRXZlbnRMaXN0ZW5lciYmZS5yZW1vdmVFdmVudExpc3RlbmVyKHQsbil9LGRlLkV2
ZW50PWZ1bmN0aW9uKGUsdCl7aWYoISh0aGlzIGluc3RhbmNlb2YgZGUuRXZlbnQpKXJldHVybiBu
ZXcgZGUuRXZlbnQoZSx0KQotZSYmZS50eXBlPyh0aGlzLm9yaWdpbmFsRXZlbnQ9ZSx0aGlzLnR5
cGU9ZS50eXBlLHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPWUuZGVmYXVsdFByZXZlbnRlZHx8dm9p
ZCAwPT09ZS5kZWZhdWx0UHJldmVudGVkJiYhMT09PWUucmV0dXJuVmFsdWU/dzpFLHRoaXMudGFy
Z2V0PWUudGFyZ2V0JiYzPT09ZS50YXJnZXQubm9kZVR5cGU/ZS50YXJnZXQucGFyZW50Tm9kZTpl
LnRhcmdldCx0aGlzLmN1cnJlbnRUYXJnZXQ9ZS5jdXJyZW50VGFyZ2V0LHRoaXMucmVsYXRlZFRh
cmdldD1lLnJlbGF0ZWRUYXJnZXQpOnRoaXMudHlwZT1lLHQmJmRlLmV4dGVuZCh0aGlzLHQpLHRo
aXMudGltZVN0YW1wPWUmJmUudGltZVN0YW1wfHxkZS5ub3coKSx0aGlzW2RlLmV4cGFuZG9dPSEw
fSxkZS5FdmVudC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmRlLkV2ZW50LGlzRGVmYXVsdFByZXZl
bnRlZDpFLGlzUHJvcGFnYXRpb25TdG9wcGVkOkUsaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3Bw
ZWQ6RSxpc1NpbXVsYXRlZDohMSxwcmV2ZW50RGVmYXVsdDpmdW5jdGlvbigpe3ZhciBlPXRoaXMu
b3JpZ2luYWxFdmVudAotdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9dyxlJiYhdGhpcy5pc1NpbXVs
YXRlZCYmZS5wcmV2ZW50RGVmYXVsdCgpfSxzdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt2YXIg
ZT10aGlzLm9yaWdpbmFsRXZlbnQKLXRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQ9dyxlJiYhdGhp
cy5pc1NpbXVsYXRlZCYmZS5zdG9wUHJvcGFnYXRpb24oKX0sc3RvcEltbWVkaWF0ZVByb3BhZ2F0
aW9uOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcmlnaW5hbEV2ZW50Ci10aGlzLmlzSW1tZWRpYXRl
UHJvcGFnYXRpb25TdG9wcGVkPXcsZSYmIXRoaXMuaXNTaW11bGF0ZWQmJmUuc3RvcEltbWVkaWF0
ZVByb3BhZ2F0aW9uKCksdGhpcy5zdG9wUHJvcGFnYXRpb24oKX19LGRlLmVhY2goe2FsdEtleToh
MCxidWJibGVzOiEwLGNhbmNlbGFibGU6ITAsY2hhbmdlZFRvdWNoZXM6ITAsY3RybEtleTohMCxk
ZXRhaWw6ITAsZXZlbnRQaGFzZTohMCxtZXRhS2V5OiEwLHBhZ2VYOiEwLHBhZ2VZOiEwLHNoaWZ0
S2V5OiEwLHZpZXc6ITAsY2hhcjohMCxjaGFyQ29kZTohMCxrZXk6ITAsa2V5Q29kZTohMCxidXR0
b246ITAsYnV0dG9uczohMCxjbGllbnRYOiEwLGNsaWVudFk6ITAsb2Zmc2V0WDohMCxvZmZzZXRZ
OiEwLHBvaW50ZXJJZDohMCxwb2ludGVyVHlwZTohMCxzY3JlZW5YOiEwLHNjcmVlblk6ITAsdGFy
Z2V0VG91Y2hlczohMCx0b0VsZW1lbnQ6ITAsdG91Y2hlczohMCx3aGljaDpmdW5jdGlvbihlKXt2
YXIgdD1lLmJ1dHRvbgotcmV0dXJuIG51bGw9PWUud2hpY2gmJlllLnRlc3QoZS50eXBlKT9udWxs
IT1lLmNoYXJDb2RlP2UuY2hhckNvZGU6ZS5rZXlDb2RlOiFlLndoaWNoJiZ2b2lkIDAhPT10JiZK
ZS50ZXN0KGUudHlwZSk/MSZ0PzE6MiZ0PzM6NCZ0PzI6MDplLndoaWNofX0sZGUuZXZlbnQuYWRk
UHJvcCksZGUuZWFjaCh7bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91
dCIscG9pbnRlcmVudGVyOiJwb2ludGVyb3ZlciIscG9pbnRlcmxlYXZlOiJwb2ludGVyb3V0In0s
ZnVuY3Rpb24oZSx0KXtkZS5ldmVudC5zcGVjaWFsW2VdPXtkZWxlZ2F0ZVR5cGU6dCxiaW5kVHlw
ZTp0LGhhbmRsZTpmdW5jdGlvbihlKXt2YXIgbixyPXRoaXMsaT1lLnJlbGF0ZWRUYXJnZXQsbz1l
LmhhbmRsZU9iagotcmV0dXJuIGkmJihpPT09cnx8ZGUuY29udGFpbnMocixpKSl8fChlLnR5cGU9
by5vcmlnVHlwZSxuPW8uaGFuZGxlci5hcHBseSh0aGlzLGFyZ3VtZW50cyksZS50eXBlPXQpLG59
fX0pLGRlLmZuLmV4dGVuZCh7b246ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIEModGhpcyxlLHQs
bixyKX0sb25lOmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBDKHRoaXMsZSx0LG4sciwxKX0sb2Zm
OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpCi1pZihlJiZlLnByZXZlbnREZWZhdWx0JiZlLmhhbmRs
ZU9iailyZXR1cm4gcj1lLmhhbmRsZU9iaixkZShlLmRlbGVnYXRlVGFyZ2V0KS5vZmYoci5uYW1l
c3BhY2U/ci5vcmlnVHlwZSsiLiIrci5uYW1lc3BhY2U6ci5vcmlnVHlwZSxyLnNlbGVjdG9yLHIu
aGFuZGxlciksdGhpcwotaWYoIm9iamVjdCI9PXR5cGVvZiBlKXtmb3IoaSBpbiBlKXRoaXMub2Zm
KGksdCxlW2ldKQotcmV0dXJuIHRoaXN9cmV0dXJuITEhPT10JiYiZnVuY3Rpb24iIT10eXBlb2Yg
dHx8KG49dCx0PXZvaWQgMCksITE9PT1uJiYobj1FKSx0aGlzLmVhY2goZnVuY3Rpb24oKXtkZS5l
dmVudC5yZW1vdmUodGhpcyxlLG4sdCl9KX19KQotdmFyIFplPS88KD8hYXJlYXxicnxjb2x8ZW1i
ZWR8aHJ8aW1nfGlucHV0fGxpbmt8bWV0YXxwYXJhbSkoKFthLXpdW15cL1wwPlx4MjBcdFxyXG5c
Zl0qKVtePl0qKVwvPi9naSxldD0vPHNjcmlwdHw8c3R5bGV8PGxpbmsvaSx0dD0vY2hlY2tlZFxz
Kig/OltePV18PVxzKi5jaGVja2VkLikvaSxudD0vXnRydWVcLyguKikvLHJ0PS9eXHMqPCEoPzpc
W0NEQVRBXFt8LS0pfCg/OlxdXF18LS0pPlxzKiQvZwotZGUuZXh0ZW5kKHtodG1sUHJlZmlsdGVy
OmZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoWmUsIjwkMT48LyQyPiIpfSxjbG9uZTpmdW5j
dGlvbihlLHQsbil7dmFyIHIsaSxvLHMsYT1lLmNsb25lTm9kZSghMCksdT1kZS5jb250YWlucyhl
Lm93bmVyRG9jdW1lbnQsZSkKLWlmKCEoaGUubm9DbG9uZUNoZWNrZWR8fDEhPT1lLm5vZGVUeXBl
JiYxMSE9PWUubm9kZVR5cGV8fGRlLmlzWE1MRG9jKGUpKSlmb3Iocz12KGEpLG89dihlKSxyPTAs
aT1vLmxlbmd0aDtyPGk7cisrKVIob1tyXSxzW3JdKQotaWYodClpZihuKWZvcihvPW98fHYoZSks
cz1zfHx2KGEpLHI9MCxpPW8ubGVuZ3RoO3I8aTtyKyspUyhvW3JdLHNbcl0pCi1lbHNlIFMoZSxh
KQotcmV0dXJuIHM9dihhLCJzY3JpcHQiKSxzLmxlbmd0aD4wJiZiKHMsIXUmJnYoZSwic2NyaXB0
IikpLGF9LGNsZWFuRGF0YTpmdW5jdGlvbihlKXtmb3IodmFyIHQsbixyLGk9ZGUuZXZlbnQuc3Bl
Y2lhbCxvPTA7dm9pZCAwIT09KG49ZVtvXSk7bysrKWlmKGplKG4pKXtpZih0PW5bRGUuZXhwYW5k
b10pe2lmKHQuZXZlbnRzKWZvcihyIGluIHQuZXZlbnRzKWlbcl0/ZGUuZXZlbnQucmVtb3ZlKG4s
cik6ZGUucmVtb3ZlRXZlbnQobixyLHQuaGFuZGxlKQotbltEZS5leHBhbmRvXT12b2lkIDB9bltM
ZS5leHBhbmRvXSYmKG5bTGUuZXhwYW5kb109dm9pZCAwKX19fSksZGUuZm4uZXh0ZW5kKHtkZXRh
Y2g6ZnVuY3Rpb24oZSl7cmV0dXJuIE4odGhpcyxlLCEwKX0scmVtb3ZlOmZ1bmN0aW9uKGUpe3Jl
dHVybiBOKHRoaXMsZSl9LHRleHQ6ZnVuY3Rpb24oZSl7cmV0dXJuIFBlKHRoaXMsZnVuY3Rpb24o
ZSl7cmV0dXJuIHZvaWQgMD09PWU/ZGUudGV4dCh0aGlzKTp0aGlzLmVtcHR5KCkuZWFjaChmdW5j
dGlvbigpezEhPT10aGlzLm5vZGVUeXBlJiYxMSE9PXRoaXMubm9kZVR5cGUmJjkhPT10aGlzLm5v
ZGVUeXBlfHwodGhpcy50ZXh0Q29udGVudD1lKX0pfSxudWxsLGUsYXJndW1lbnRzLmxlbmd0aCl9
LGFwcGVuZDpmdW5jdGlvbigpe3JldHVybiBrKHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKGUpe2lm
KDE9PT10aGlzLm5vZGVUeXBlfHwxMT09PXRoaXMubm9kZVR5cGV8fDk9PT10aGlzLm5vZGVUeXBl
KXtPKHRoaXMsZSkuYXBwZW5kQ2hpbGQoZSl9fSl9LHByZXBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4g
ayh0aGlzLGFyZ3VtZW50cyxmdW5jdGlvbihlKXtpZigxPT09dGhpcy5ub2RlVHlwZXx8MTE9PT10
aGlzLm5vZGVUeXBlfHw5PT09dGhpcy5ub2RlVHlwZSl7dmFyIHQ9Tyh0aGlzLGUpCi10Lmluc2Vy
dEJlZm9yZShlLHQuZmlyc3RDaGlsZCl9fSl9LGJlZm9yZTpmdW5jdGlvbigpe3JldHVybiBrKHRo
aXMsYXJndW1lbnRzLGZ1bmN0aW9uKGUpe3RoaXMucGFyZW50Tm9kZSYmdGhpcy5wYXJlbnROb2Rl
Lmluc2VydEJlZm9yZShlLHRoaXMpfSl9LGFmdGVyOmZ1bmN0aW9uKCl7cmV0dXJuIGsodGhpcyxh
cmd1bWVudHMsZnVuY3Rpb24oZSl7dGhpcy5wYXJlbnROb2RlJiZ0aGlzLnBhcmVudE5vZGUuaW5z
ZXJ0QmVmb3JlKGUsdGhpcy5uZXh0U2libGluZyl9KX0sZW1wdHk6ZnVuY3Rpb24oKXtmb3IodmFy
IGUsdD0wO251bGwhPShlPXRoaXNbdF0pO3QrKykxPT09ZS5ub2RlVHlwZSYmKGRlLmNsZWFuRGF0
YSh2KGUsITEpKSxlLnRleHRDb250ZW50PSIiKQotcmV0dXJuIHRoaXN9LGNsb25lOmZ1bmN0aW9u
KGUsdCl7cmV0dXJuIGU9bnVsbCE9ZSYmZSx0PW51bGw9PXQ/ZTp0LHRoaXMubWFwKGZ1bmN0aW9u
KCl7cmV0dXJuIGRlLmNsb25lKHRoaXMsZSx0KX0pfSxodG1sOmZ1bmN0aW9uKGUpe3JldHVybiBQ
ZSh0aGlzLGZ1bmN0aW9uKGUpe3ZhciB0PXRoaXNbMF18fHt9LG49MCxyPXRoaXMubGVuZ3RoCi1p
Zih2b2lkIDA9PT1lJiYxPT09dC5ub2RlVHlwZSlyZXR1cm4gdC5pbm5lckhUTUwKLWlmKCJzdHJp
bmciPT10eXBlb2YgZSYmIWV0LnRlc3QoZSkmJiFHZVsoV2UuZXhlYyhlKXx8WyIiLCIiXSlbMV0u
dG9Mb3dlckNhc2UoKV0pe2U9ZGUuaHRtbFByZWZpbHRlcihlKQotdHJ5e2Zvcig7bjxyO24rKyl0
PXRoaXNbbl18fHt9LDE9PT10Lm5vZGVUeXBlJiYoZGUuY2xlYW5EYXRhKHYodCwhMSkpLHQuaW5u
ZXJIVE1MPWUpCi10PTB9Y2F0Y2goZSl7fX10JiZ0aGlzLmVtcHR5KCkuYXBwZW5kKGUpfSxudWxs
LGUsYXJndW1lbnRzLmxlbmd0aCl9LHJlcGxhY2VXaXRoOmZ1bmN0aW9uKCl7dmFyIGU9W10KLXJl
dHVybiBrKHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMucGFyZW50Tm9kZQot
ZGUuaW5BcnJheSh0aGlzLGUpPDAmJihkZS5jbGVhbkRhdGEodih0aGlzKSksbiYmbi5yZXBsYWNl
Q2hpbGQodCx0aGlzKSl9LGUpfX0pLGRlLmVhY2goe2FwcGVuZFRvOiJhcHBlbmQiLHByZXBlbmRU
bzoicHJlcGVuZCIsaW5zZXJ0QmVmb3JlOiJiZWZvcmUiLGluc2VydEFmdGVyOiJhZnRlciIscmVw
bGFjZUFsbDoicmVwbGFjZVdpdGgifSxmdW5jdGlvbihlLHQpe2RlLmZuW2VdPWZ1bmN0aW9uKGUp
e2Zvcih2YXIgbixyPVtdLGk9ZGUoZSksbz1pLmxlbmd0aC0xLHM9MDtzPD1vO3MrKyluPXM9PT1v
P3RoaXM6dGhpcy5jbG9uZSghMCksZGUoaVtzXSlbdF0obiksc2UuYXBwbHkocixuLmdldCgpKQot
cmV0dXJuIHRoaXMucHVzaFN0YWNrKHIpfX0pCi12YXIgaXQ9L15tYXJnaW4vLG90PW5ldyBSZWdF
eHAoIl4oIitGZSsiKSg/IXB4KVthLXolXSskIiwiaSIpLHN0PWZ1bmN0aW9uKHQpe3ZhciBuPXQu
b3duZXJEb2N1bWVudC5kZWZhdWx0VmlldwotcmV0dXJuIG4mJm4ub3BlbmVyfHwobj1lKSxuLmdl
dENvbXB1dGVkU3R5bGUodCl9OyhmdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXtpZihhKXthLnN0eWxl
LmNzc1RleHQ9ImJveC1zaXppbmc6Ym9yZGVyLWJveDtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5
OmJsb2NrO21hcmdpbjphdXRvO2JvcmRlcjoxcHg7cGFkZGluZzoxcHg7dG9wOjElO3dpZHRoOjUw
JSIsYS5pbm5lckhUTUw9IiIsUWUuYXBwZW5kQ2hpbGQocykKLXZhciB0PWUuZ2V0Q29tcHV0ZWRT
dHlsZShhKQotbj0iMSUiIT09dC50b3Asbz0iMnB4Ij09PXQubWFyZ2luTGVmdCxyPSI0cHgiPT09
dC53aWR0aCxhLnN0eWxlLm1hcmdpblJpZ2h0PSI1MCUiLGk9IjRweCI9PT10Lm1hcmdpblJpZ2h0
LFFlLnJlbW92ZUNoaWxkKHMpLGE9bnVsbH19dmFyIG4scixpLG8scz1uZS5jcmVhdGVFbGVtZW50
KCJkaXYiKSxhPW5lLmNyZWF0ZUVsZW1lbnQoImRpdiIpCi1hLnN0eWxlJiYoYS5zdHlsZS5iYWNr
Z3JvdW5kQ2xpcD0iY29udGVudC1ib3giLGEuY2xvbmVOb2RlKCEwKS5zdHlsZS5iYWNrZ3JvdW5k
Q2xpcD0iIixoZS5jbGVhckNsb25lU3R5bGU9ImNvbnRlbnQtYm94Ij09PWEuc3R5bGUuYmFja2dy
b3VuZENsaXAscy5zdHlsZS5jc3NUZXh0PSJib3JkZXI6MDt3aWR0aDo4cHg7aGVpZ2h0OjA7dG9w
OjA7bGVmdDotOTk5OXB4O3BhZGRpbmc6MDttYXJnaW4tdG9wOjFweDtwb3NpdGlvbjphYnNvbHV0
ZSIscy5hcHBlbmRDaGlsZChhKSxkZS5leHRlbmQoaGUse3BpeGVsUG9zaXRpb246ZnVuY3Rpb24o
KXtyZXR1cm4gdCgpLG59LGJveFNpemluZ1JlbGlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHQoKSxy
fSxwaXhlbE1hcmdpblJpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIHQoKSxpfSxyZWxpYWJsZU1hcmdp
bkxlZnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdCgpLG99fSkpfSkoKQotdmFyIGF0PS9eKG5vbmV8dGFi
bGUoPyEtY1tlYV0pLispLyx1dD0vXi0tLyxsdD17cG9zaXRpb246ImFic29sdXRlIix2aXNpYmls
aXR5OiJoaWRkZW4iLGRpc3BsYXk6ImJsb2NrIn0sY3Q9e2xldHRlclNwYWNpbmc6IjAiLGZvbnRX
ZWlnaHQ6IjQwMCJ9LHB0PVsiV2Via2l0IiwiTW96IiwibXMiXSxmdD1uZS5jcmVhdGVFbGVtZW50
KCJkaXYiKS5zdHlsZQotZGUuZXh0ZW5kKHtjc3NIb29rczp7b3BhY2l0eTp7Z2V0OmZ1bmN0aW9u
KGUsdCl7aWYodCl7dmFyIG49UChlLCJvcGFjaXR5IikKLXJldHVybiIiPT09bj8iMSI6bn19fX0s
Y3NzTnVtYmVyOnthbmltYXRpb25JdGVyYXRpb25Db3VudDohMCxjb2x1bW5Db3VudDohMCxmaWxs
T3BhY2l0eTohMCxmbGV4R3JvdzohMCxmbGV4U2hyaW5rOiEwLGZvbnRXZWlnaHQ6ITAsbGluZUhl
aWdodDohMCxvcGFjaXR5OiEwLG9yZGVyOiEwLG9ycGhhbnM6ITAsd2lkb3dzOiEwLHpJbmRleDoh
MCx6b29tOiEwfSxjc3NQcm9wczp7ZmxvYXQ6ImNzc0Zsb2F0In0sc3R5bGU6ZnVuY3Rpb24oZSx0
LG4scil7aWYoZSYmMyE9PWUubm9kZVR5cGUmJjghPT1lLm5vZGVUeXBlJiZlLnN0eWxlKXt2YXIg
aSxvLHMsYT1kZS5jYW1lbENhc2UodCksdT11dC50ZXN0KHQpLGw9ZS5zdHlsZQotaWYodXx8KHQ9
TChhKSkscz1kZS5jc3NIb29rc1t0XXx8ZGUuY3NzSG9va3NbYV0sdm9pZCAwPT09bilyZXR1cm4g
cyYmImdldCJpbiBzJiZ2b2lkIDAhPT0oaT1zLmdldChlLCExLHIpKT9pOmxbdF0KLW89dHlwZW9m
IG4sInN0cmluZyI9PT1vJiYoaT16ZS5leGVjKG4pKSYmaVsxXSYmKG49bShlLHQsaSksbz0ibnVt
YmVyIiksbnVsbCE9biYmbj09PW4mJigibnVtYmVyIj09PW8mJihuKz1pJiZpWzNdfHwoZGUuY3Nz
TnVtYmVyW2FdPyIiOiJweCIpKSxoZS5jbGVhckNsb25lU3R5bGV8fCIiIT09bnx8MCE9PXQuaW5k
ZXhPZigiYmFja2dyb3VuZCIpfHwobFt0XT0iaW5oZXJpdCIpLHMmJiJzZXQiaW4gcyYmdm9pZCAw
PT09KG49cy5zZXQoZSxuLHIpKXx8KHU/bC5zZXRQcm9wZXJ0eSh0LG4pOmxbdF09bikpfX0sY3Nz
OmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLG8scyxhPWRlLmNhbWVsQ2FzZSh0KQotcmV0dXJuIHV0
LnRlc3QodCl8fCh0PUwoYSkpLHM9ZGUuY3NzSG9va3NbdF18fGRlLmNzc0hvb2tzW2FdLHMmJiJn
ZXQiaW4gcyYmKGk9cy5nZXQoZSwhMCxuKSksdm9pZCAwPT09aSYmKGk9UChlLHQscikpLCJub3Jt
YWwiPT09aSYmdCBpbiBjdCYmKGk9Y3RbdF0pLCIiPT09bnx8bj8obz1wYXJzZUZsb2F0KGkpLCEw
PT09bnx8aXNGaW5pdGUobyk/b3x8MDppKTppfX0pLGRlLmVhY2goWyJoZWlnaHQiLCJ3aWR0aCJd
LGZ1bmN0aW9uKGUsdCl7ZGUuY3NzSG9va3NbdF09e2dldDpmdW5jdGlvbihlLG4scil7aWYobily
ZXR1cm4hYXQudGVzdChkZS5jc3MoZSwiZGlzcGxheSIpKXx8ZS5nZXRDbGllbnRSZWN0cygpLmxl
bmd0aCYmZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aD9GKGUsdCxyKTpxZShlLGx0LGZ1
bmN0aW9uKCl7cmV0dXJuIEYoZSx0LHIpfSl9LHNldDpmdW5jdGlvbihlLG4scil7dmFyIGksbz1y
JiZzdChlKSxzPXImJk0oZSx0LHIsImJvcmRlci1ib3giPT09ZGUuY3NzKGUsImJveFNpemluZyIs
ITEsbyksbykKLXJldHVybiBzJiYoaT16ZS5leGVjKG4pKSYmInB4IiE9PShpWzNdfHwicHgiKSYm
KGUuc3R5bGVbdF09bixuPWRlLmNzcyhlLHQpKSxJKGUsbixzKX19fSksZGUuY3NzSG9va3MubWFy
Z2luTGVmdD1qKGhlLnJlbGlhYmxlTWFyZ2luTGVmdCxmdW5jdGlvbihlLHQpe2lmKHQpcmV0dXJu
KHBhcnNlRmxvYXQoUChlLCJtYXJnaW5MZWZ0IikpfHxlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgp
LmxlZnQtcWUoZSx7bWFyZ2luTGVmdDowfSxmdW5jdGlvbigpe3JldHVybiBlLmdldEJvdW5kaW5n
Q2xpZW50UmVjdCgpLmxlZnR9KSkrInB4In0pLGRlLmVhY2goe21hcmdpbjoiIixwYWRkaW5nOiIi
LGJvcmRlcjoiV2lkdGgifSxmdW5jdGlvbihlLHQpe2RlLmNzc0hvb2tzW2UrdF09e2V4cGFuZDpm
dW5jdGlvbihuKXtmb3IodmFyIHI9MCxpPXt9LG89InN0cmluZyI9PXR5cGVvZiBuP24uc3BsaXQo
IiAiKTpbbl07cjw0O3IrKylpW2UrVWVbcl0rdF09b1tyXXx8b1tyLTJdfHxvWzBdCi1yZXR1cm4g
aX19LGl0LnRlc3QoZSl8fChkZS5jc3NIb29rc1tlK3RdLnNldD1JKX0pLGRlLmZuLmV4dGVuZCh7
Y3NzOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIFBlKHRoaXMsZnVuY3Rpb24oZSx0LG4pe3ZhciByLGks
bz17fSxzPTAKLWlmKEFycmF5LmlzQXJyYXkodCkpe2ZvcihyPXN0KGUpLGk9dC5sZW5ndGg7czxp
O3MrKylvW3Rbc11dPWRlLmNzcyhlLHRbc10sITEscikKLXJldHVybiBvfXJldHVybiB2b2lkIDAh
PT1uP2RlLnN0eWxlKGUsdCxuKTpkZS5jc3MoZSx0KX0sZSx0LGFyZ3VtZW50cy5sZW5ndGg+MSl9
fSksZGUuVHdlZW49eix6LnByb3RvdHlwZT17Y29uc3RydWN0b3I6eixpbml0OmZ1bmN0aW9uKGUs
dCxuLHIsaSxvKXt0aGlzLmVsZW09ZSx0aGlzLnByb3A9bix0aGlzLmVhc2luZz1pfHxkZS5lYXNp
bmcuX2RlZmF1bHQsdGhpcy5vcHRpb25zPXQsdGhpcy5zdGFydD10aGlzLm5vdz10aGlzLmN1cigp
LHRoaXMuZW5kPXIsdGhpcy51bml0PW98fChkZS5jc3NOdW1iZXJbbl0/IiI6InB4Iil9LGN1cjpm
dW5jdGlvbigpe3ZhciBlPXoucHJvcEhvb2tzW3RoaXMucHJvcF0KLXJldHVybiBlJiZlLmdldD9l
LmdldCh0aGlzKTp6LnByb3BIb29rcy5fZGVmYXVsdC5nZXQodGhpcyl9LHJ1bjpmdW5jdGlvbihl
KXt2YXIgdCxuPXoucHJvcEhvb2tzW3RoaXMucHJvcF0KLXJldHVybiB0aGlzLm9wdGlvbnMuZHVy
YXRpb24/dGhpcy5wb3M9dD1kZS5lYXNpbmdbdGhpcy5lYXNpbmddKGUsdGhpcy5vcHRpb25zLmR1
cmF0aW9uKmUsMCwxLHRoaXMub3B0aW9ucy5kdXJhdGlvbik6dGhpcy5wb3M9dD1lLHRoaXMubm93
PSh0aGlzLmVuZC10aGlzLnN0YXJ0KSp0K3RoaXMuc3RhcnQsdGhpcy5vcHRpb25zLnN0ZXAmJnRo
aXMub3B0aW9ucy5zdGVwLmNhbGwodGhpcy5lbGVtLHRoaXMubm93LHRoaXMpLG4mJm4uc2V0P24u
c2V0KHRoaXMpOnoucHJvcEhvb2tzLl9kZWZhdWx0LnNldCh0aGlzKSx0aGlzfX0sei5wcm90b3R5
cGUuaW5pdC5wcm90b3R5cGU9ei5wcm90b3R5cGUsei5wcm9wSG9va3M9e19kZWZhdWx0OntnZXQ6
ZnVuY3Rpb24oZSl7dmFyIHQKLXJldHVybiAxIT09ZS5lbGVtLm5vZGVUeXBlfHxudWxsIT1lLmVs
ZW1bZS5wcm9wXSYmbnVsbD09ZS5lbGVtLnN0eWxlW2UucHJvcF0/ZS5lbGVtW2UucHJvcF06KHQ9
ZGUuY3NzKGUuZWxlbSxlLnByb3AsIiIpLHQmJiJhdXRvIiE9PXQ/dDowKX0sc2V0OmZ1bmN0aW9u
KGUpe2RlLmZ4LnN0ZXBbZS5wcm9wXT9kZS5meC5zdGVwW2UucHJvcF0oZSk6MSE9PWUuZWxlbS5u
b2RlVHlwZXx8bnVsbD09ZS5lbGVtLnN0eWxlW2RlLmNzc1Byb3BzW2UucHJvcF1dJiYhZGUuY3Nz
SG9va3NbZS5wcm9wXT9lLmVsZW1bZS5wcm9wXT1lLm5vdzpkZS5zdHlsZShlLmVsZW0sZS5wcm9w
LGUubm93K2UudW5pdCl9fX0sei5wcm9wSG9va3Muc2Nyb2xsVG9wPXoucHJvcEhvb2tzLnNjcm9s
bExlZnQ9e3NldDpmdW5jdGlvbihlKXtlLmVsZW0ubm9kZVR5cGUmJmUuZWxlbS5wYXJlbnROb2Rl
JiYoZS5lbGVtW2UucHJvcF09ZS5ub3cpfX0sZGUuZWFzaW5nPXtsaW5lYXI6ZnVuY3Rpb24oZSl7
cmV0dXJuIGV9LHN3aW5nOmZ1bmN0aW9uKGUpe3JldHVybi41LU1hdGguY29zKGUqTWF0aC5QSSkv
Mn0sX2RlZmF1bHQ6InN3aW5nIn0sZGUuZng9ei5wcm90b3R5cGUuaW5pdCxkZS5meC5zdGVwPXt9
Ci12YXIgaHQsZHQsbXQ9L14oPzp0b2dnbGV8c2hvd3xoaWRlKSQvLGd0PS9xdWV1ZUhvb2tzJC8K
LWRlLkFuaW1hdGlvbj1kZS5leHRlbmQoJCx7dHdlZW5lcnM6eyIqIjpbZnVuY3Rpb24oZSx0KXt2
YXIgbj10aGlzLmNyZWF0ZVR3ZWVuKGUsdCkKLXJldHVybiBtKG4uZWxlbSxlLHplLmV4ZWModCks
biksbn1dfSx0d2VlbmVyOmZ1bmN0aW9uKGUsdCl7ZGUuaXNGdW5jdGlvbihlKT8odD1lLGU9WyIq
Il0pOmU9ZS5tYXRjaChSZSkKLWZvcih2YXIgbixyPTAsaT1lLmxlbmd0aDtyPGk7cisrKW49ZVty
XSwkLnR3ZWVuZXJzW25dPSQudHdlZW5lcnNbbl18fFtdLCQudHdlZW5lcnNbbl0udW5zaGlmdCh0
KX0scHJlZmlsdGVyczpbVl0scHJlZmlsdGVyOmZ1bmN0aW9uKGUsdCl7dD8kLnByZWZpbHRlcnMu
dW5zaGlmdChlKTokLnByZWZpbHRlcnMucHVzaChlKX19KSxkZS5zcGVlZD1mdW5jdGlvbihlLHQs
bil7dmFyIHI9ZSYmIm9iamVjdCI9PXR5cGVvZiBlP2RlLmV4dGVuZCh7fSxlKTp7Y29tcGxldGU6
bnx8IW4mJnR8fGRlLmlzRnVuY3Rpb24oZSkmJmUsZHVyYXRpb246ZSxlYXNpbmc6biYmdHx8dCYm
IWRlLmlzRnVuY3Rpb24odCkmJnR9Ci1yZXR1cm4gZGUuZngub2ZmP3IuZHVyYXRpb249MDoibnVt
YmVyIiE9dHlwZW9mIHIuZHVyYXRpb24mJihyLmR1cmF0aW9uIGluIGRlLmZ4LnNwZWVkcz9yLmR1
cmF0aW9uPWRlLmZ4LnNwZWVkc1tyLmR1cmF0aW9uXTpyLmR1cmF0aW9uPWRlLmZ4LnNwZWVkcy5f
ZGVmYXVsdCksbnVsbCE9ci5xdWV1ZSYmITAhPT1yLnF1ZXVlfHwoci5xdWV1ZT0iZngiKSxyLm9s
ZD1yLmNvbXBsZXRlLHIuY29tcGxldGU9ZnVuY3Rpb24oKXtkZS5pc0Z1bmN0aW9uKHIub2xkKSYm
ci5vbGQuY2FsbCh0aGlzKSxyLnF1ZXVlJiZkZS5kZXF1ZXVlKHRoaXMsci5xdWV1ZSl9LHJ9LGRl
LmZuLmV4dGVuZCh7ZmFkZVRvOmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiB0aGlzLmZpbHRlcihC
ZSkuY3NzKCJvcGFjaXR5IiwwKS5zaG93KCkuZW5kKCkuYW5pbWF0ZSh7b3BhY2l0eTp0fSxlLG4s
cil9LGFuaW1hdGU6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9ZGUuaXNFbXB0eU9iamVjdChlKSxv
PWRlLnNwZWVkKHQsbixyKSxzPWZ1bmN0aW9uKCl7dmFyIHQ9JCh0aGlzLGRlLmV4dGVuZCh7fSxl
KSxvKTsoaXx8RGUuZ2V0KHRoaXMsImZpbmlzaCIpKSYmdC5zdG9wKCEwKX0KLXJldHVybiBzLmZp
bmlzaD1zLGl8fCExPT09by5xdWV1ZT90aGlzLmVhY2gocyk6dGhpcy5xdWV1ZShvLnF1ZXVlLHMp
fSxzdG9wOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1mdW5jdGlvbihlKXt2YXIgdD1lLnN0b3AKLWRl
bGV0ZSBlLnN0b3AsdChuKX0KLXJldHVybiJzdHJpbmciIT10eXBlb2YgZSYmKG49dCx0PWUsZT12
b2lkIDApLHQmJiExIT09ZSYmdGhpcy5xdWV1ZShlfHwiZngiLFtdKSx0aGlzLmVhY2goZnVuY3Rp
b24oKXt2YXIgdD0hMCxpPW51bGwhPWUmJmUrInF1ZXVlSG9va3MiLG89ZGUudGltZXJzLHM9RGUu
Z2V0KHRoaXMpCi1pZihpKXNbaV0mJnNbaV0uc3RvcCYmcihzW2ldKQotZWxzZSBmb3IoaSBpbiBz
KXNbaV0mJnNbaV0uc3RvcCYmZ3QudGVzdChpKSYmcihzW2ldKQotZm9yKGk9by5sZW5ndGg7aS0t
OylvW2ldLmVsZW0hPT10aGlzfHxudWxsIT1lJiZvW2ldLnF1ZXVlIT09ZXx8KG9baV0uYW5pbS5z
dG9wKG4pLHQ9ITEsby5zcGxpY2UoaSwxKSkKLSF0JiZufHxkZS5kZXF1ZXVlKHRoaXMsZSl9KX0s
ZmluaXNoOmZ1bmN0aW9uKGUpe3JldHVybiExIT09ZSYmKGU9ZXx8ImZ4IiksdGhpcy5lYWNoKGZ1
bmN0aW9uKCl7dmFyIHQsbj1EZS5nZXQodGhpcykscj1uW2UrInF1ZXVlIl0saT1uW2UrInF1ZXVl
SG9va3MiXSxvPWRlLnRpbWVycyxzPXI/ci5sZW5ndGg6MAotZm9yKG4uZmluaXNoPSEwLGRlLnF1
ZXVlKHRoaXMsZSxbXSksaSYmaS5zdG9wJiZpLnN0b3AuY2FsbCh0aGlzLCEwKSx0PW8ubGVuZ3Ro
O3QtLTspb1t0XS5lbGVtPT09dGhpcyYmb1t0XS5xdWV1ZT09PWUmJihvW3RdLmFuaW0uc3RvcCgh
MCksby5zcGxpY2UodCwxKSkKLWZvcih0PTA7dDxzO3QrKylyW3RdJiZyW3RdLmZpbmlzaCYmclt0
XS5maW5pc2guY2FsbCh0aGlzKQotZGVsZXRlIG4uZmluaXNofSl9fSksZGUuZWFjaChbInRvZ2ds
ZSIsInNob3ciLCJoaWRlIl0sZnVuY3Rpb24oZSx0KXt2YXIgbj1kZS5mblt0XQotZGUuZm5bdF09
ZnVuY3Rpb24oZSxyLGkpe3JldHVybiBudWxsPT1lfHwiYm9vbGVhbiI9PXR5cGVvZiBlP24uYXBw
bHkodGhpcyxhcmd1bWVudHMpOnRoaXMuYW5pbWF0ZShxKHQsITApLGUscixpKX19KSxkZS5lYWNo
KHtzbGlkZURvd246cSgic2hvdyIpLHNsaWRlVXA6cSgiaGlkZSIpLHNsaWRlVG9nZ2xlOnEoInRv
Z2dsZSIpLGZhZGVJbjp7b3BhY2l0eToic2hvdyJ9LGZhZGVPdXQ6e29wYWNpdHk6ImhpZGUifSxm
YWRlVG9nZ2xlOntvcGFjaXR5OiJ0b2dnbGUifX0sZnVuY3Rpb24oZSx0KXtkZS5mbltlXT1mdW5j
dGlvbihlLG4scil7cmV0dXJuIHRoaXMuYW5pbWF0ZSh0LGUsbixyKX19KSxkZS50aW1lcnM9W10s
ZGUuZngudGljaz1mdW5jdGlvbigpe3ZhciBlLHQ9MCxuPWRlLnRpbWVycwotZm9yKGh0PWRlLm5v
dygpO3Q8bi5sZW5ndGg7dCsrKShlPW5bdF0pKCl8fG5bdF0hPT1lfHxuLnNwbGljZSh0LS0sMSkK
LW4ubGVuZ3RofHxkZS5meC5zdG9wKCksaHQ9dm9pZCAwfSxkZS5meC50aW1lcj1mdW5jdGlvbihl
KXtkZS50aW1lcnMucHVzaChlKSxkZS5meC5zdGFydCgpfSxkZS5meC5pbnRlcnZhbD0xMyxkZS5m
eC5zdGFydD1mdW5jdGlvbigpe2R0fHwoZHQ9ITAsVSgpKX0sZGUuZnguc3RvcD1mdW5jdGlvbigp
e2R0PW51bGx9LGRlLmZ4LnNwZWVkcz17c2xvdzo2MDAsZmFzdDoyMDAsX2RlZmF1bHQ6NDAwfSxk
ZS5mbi5kZWxheT1mdW5jdGlvbih0LG4pe3JldHVybiB0PWRlLmZ4P2RlLmZ4LnNwZWVkc1t0XXx8
dDp0LG49bnx8ImZ4Iix0aGlzLnF1ZXVlKG4sZnVuY3Rpb24obixyKXt2YXIgaT1lLnNldFRpbWVv
dXQobix0KQotci5zdG9wPWZ1bmN0aW9uKCl7ZS5jbGVhclRpbWVvdXQoaSl9fSl9LGZ1bmN0aW9u
KCl7dmFyIGU9bmUuY3JlYXRlRWxlbWVudCgiaW5wdXQiKSx0PW5lLmNyZWF0ZUVsZW1lbnQoInNl
bGVjdCIpLG49dC5hcHBlbmRDaGlsZChuZS5jcmVhdGVFbGVtZW50KCJvcHRpb24iKSkKLWUudHlw
ZT0iY2hlY2tib3giLGhlLmNoZWNrT249IiIhPT1lLnZhbHVlLGhlLm9wdFNlbGVjdGVkPW4uc2Vs
ZWN0ZWQsZT1uZS5jcmVhdGVFbGVtZW50KCJpbnB1dCIpLGUudmFsdWU9InQiLGUudHlwZT0icmFk
aW8iLGhlLnJhZGlvVmFsdWU9InQiPT09ZS52YWx1ZX0oKQotdmFyIHl0LHZ0PWRlLmV4cHIuYXR0
ckhhbmRsZQotZGUuZm4uZXh0ZW5kKHthdHRyOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIFBlKHRoaXMs
ZGUuYXR0cixlLHQsYXJndW1lbnRzLmxlbmd0aD4xKX0scmVtb3ZlQXR0cjpmdW5jdGlvbihlKXty
ZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZGUucmVtb3ZlQXR0cih0aGlzLGUpfSl9fSksZGUu
ZXh0ZW5kKHthdHRyOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG89ZS5ub2RlVHlwZQotaWYoMyE9
PW8mJjghPT1vJiYyIT09bylyZXR1cm4gdm9pZCAwPT09ZS5nZXRBdHRyaWJ1dGU/ZGUucHJvcChl
LHQsbik6KDE9PT1vJiZkZS5pc1hNTERvYyhlKXx8KGk9ZGUuYXR0ckhvb2tzW3QudG9Mb3dlckNh
c2UoKV18fChkZS5leHByLm1hdGNoLmJvb2wudGVzdCh0KT95dDp2b2lkIDApKSx2b2lkIDAhPT1u
P251bGw9PT1uP3ZvaWQgZGUucmVtb3ZlQXR0cihlLHQpOmkmJiJzZXQiaW4gaSYmdm9pZCAwIT09
KHI9aS5zZXQoZSxuLHQpKT9yOihlLnNldEF0dHJpYnV0ZSh0LG4rIiIpLG4pOmkmJiJnZXQiaW4g
aSYmbnVsbCE9PShyPWkuZ2V0KGUsdCkpP3I6KHI9ZGUuZmluZC5hdHRyKGUsdCksbnVsbD09cj92
b2lkIDA6cikpfSxhdHRySG9va3M6e3R5cGU6e3NldDpmdW5jdGlvbihlLHQpe2lmKCFoZS5yYWRp
b1ZhbHVlJiYicmFkaW8iPT09dCYmaShlLCJpbnB1dCIpKXt2YXIgbj1lLnZhbHVlCi1yZXR1cm4g
ZS5zZXRBdHRyaWJ1dGUoInR5cGUiLHQpLG4mJihlLnZhbHVlPW4pLHR9fX19LHJlbW92ZUF0dHI6
ZnVuY3Rpb24oZSx0KXt2YXIgbixyPTAsaT10JiZ0Lm1hdGNoKFJlKQotaWYoaSYmMT09PWUubm9k
ZVR5cGUpZm9yKDtuPWlbcisrXTspZS5yZW1vdmVBdHRyaWJ1dGUobil9fSkseXQ9e3NldDpmdW5j
dGlvbihlLHQsbil7cmV0dXJuITE9PT10P2RlLnJlbW92ZUF0dHIoZSxuKTplLnNldEF0dHJpYnV0
ZShuLG4pLG59fSxkZS5lYWNoKGRlLmV4cHIubWF0Y2guYm9vbC5zb3VyY2UubWF0Y2goL1x3Ky9n
KSxmdW5jdGlvbihlLHQpe3ZhciBuPXZ0W3RdfHxkZS5maW5kLmF0dHIKLXZ0W3RdPWZ1bmN0aW9u
KGUsdCxyKXt2YXIgaSxvLHM9dC50b0xvd2VyQ2FzZSgpCi1yZXR1cm4gcnx8KG89dnRbc10sdnRb
c109aSxpPW51bGwhPW4oZSx0LHIpP3M6bnVsbCx2dFtzXT1vKSxpfX0pCi12YXIgYnQ9L14oPzpp
bnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSxfdD0vXig/OmF8YXJlYSkkL2kKLWRlLmZu
LmV4dGVuZCh7cHJvcDpmdW5jdGlvbihlLHQpe3JldHVybiBQZSh0aGlzLGRlLnByb3AsZSx0LGFy
Z3VtZW50cy5sZW5ndGg+MSl9LHJlbW92ZVByb3A6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFj
aChmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW2RlLnByb3BGaXhbZV18fGVdfSl9fSksZGUuZXh0ZW5k
KHtwcm9wOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG89ZS5ub2RlVHlwZQotaWYoMyE9PW8mJjgh
PT1vJiYyIT09bylyZXR1cm4gMT09PW8mJmRlLmlzWE1MRG9jKGUpfHwodD1kZS5wcm9wRml4W3Rd
fHx0LGk9ZGUucHJvcEhvb2tzW3RdKSx2b2lkIDAhPT1uP2kmJiJzZXQiaW4gaSYmdm9pZCAwIT09
KHI9aS5zZXQoZSxuLHQpKT9yOmVbdF09bjppJiYiZ2V0ImluIGkmJm51bGwhPT0ocj1pLmdldChl
LHQpKT9yOmVbdF19LHByb3BIb29rczp7dGFiSW5kZXg6e2dldDpmdW5jdGlvbihlKXt2YXIgdD1k
ZS5maW5kLmF0dHIoZSwidGFiaW5kZXgiKQotcmV0dXJuIHQ/cGFyc2VJbnQodCwxMCk6YnQudGVz
dChlLm5vZGVOYW1lKXx8X3QudGVzdChlLm5vZGVOYW1lKSYmZS5ocmVmPzA6LTF9fX0scHJvcEZp
eDp7Zm9yOiJodG1sRm9yIixjbGFzczoiY2xhc3NOYW1lIn19KSxoZS5vcHRTZWxlY3RlZHx8KGRl
LnByb3BIb29rcy5zZWxlY3RlZD17Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0PWUucGFyZW50Tm9kZQot
cmV0dXJuIHQmJnQucGFyZW50Tm9kZSYmdC5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXgsbnVsbH0s
c2V0OmZ1bmN0aW9uKGUpe3ZhciB0PWUucGFyZW50Tm9kZQotdCYmKHQuc2VsZWN0ZWRJbmRleCx0
LnBhcmVudE5vZGUmJnQucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4KX19KSxkZS5lYWNoKFsidGFi
SW5kZXgiLCJyZWFkT25seSIsIm1heExlbmd0aCIsImNlbGxTcGFjaW5nIiwiY2VsbFBhZGRpbmci
LCJyb3dTcGFuIiwiY29sU3BhbiIsInVzZU1hcCIsImZyYW1lQm9yZGVyIiwiY29udGVudEVkaXRh
YmxlIl0sZnVuY3Rpb24oKXtkZS5wcm9wRml4W3RoaXMudG9Mb3dlckNhc2UoKV09dGhpc30pLGRl
LmZuLmV4dGVuZCh7YWRkQ2xhc3M6ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGksbyxzLGEsdT0wCi1p
ZihkZS5pc0Z1bmN0aW9uKGUpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24odCl7ZGUodGhpcyku
YWRkQ2xhc3MoZS5jYWxsKHRoaXMsdCxLKHRoaXMpKSl9KQotaWYoInN0cmluZyI9PXR5cGVvZiBl
JiZlKWZvcih0PWUubWF0Y2goUmUpfHxbXTtuPXRoaXNbdSsrXTspaWYoaT1LKG4pLHI9MT09PW4u
bm9kZVR5cGUmJiIgIitHKGkpKyIgIil7Zm9yKHM9MDtvPXRbcysrXTspci5pbmRleE9mKCIgIitv
KyIgIik8MCYmKHIrPW8rIiAiKQotYT1HKHIpLGkhPT1hJiZuLnNldEF0dHJpYnV0ZSgiY2xhc3Mi
LGEpfXJldHVybiB0aGlzfSxyZW1vdmVDbGFzczpmdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxvLHMs
YSx1PTAKLWlmKGRlLmlzRnVuY3Rpb24oZSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbih0KXtk
ZSh0aGlzKS5yZW1vdmVDbGFzcyhlLmNhbGwodGhpcyx0LEsodGhpcykpKX0pCi1pZighYXJndW1l
bnRzLmxlbmd0aClyZXR1cm4gdGhpcy5hdHRyKCJjbGFzcyIsIiIpCi1pZigic3RyaW5nIj09dHlw
ZW9mIGUmJmUpZm9yKHQ9ZS5tYXRjaChSZSl8fFtdO249dGhpc1t1KytdOylpZihpPUsobikscj0x
PT09bi5ub2RlVHlwZSYmIiAiK0coaSkrIiAiKXtmb3Iocz0wO289dFtzKytdOylmb3IoO3IuaW5k
ZXhPZigiICIrbysiICIpPi0xOylyPXIucmVwbGFjZSgiICIrbysiICIsIiAiKQotYT1HKHIpLGkh
PT1hJiZuLnNldEF0dHJpYnV0ZSgiY2xhc3MiLGEpfXJldHVybiB0aGlzfSx0b2dnbGVDbGFzczpm
dW5jdGlvbihlLHQpe3ZhciBuPXR5cGVvZiBlCi1yZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiB0JiYi
c3RyaW5nIj09PW4/dD90aGlzLmFkZENsYXNzKGUpOnRoaXMucmVtb3ZlQ2xhc3MoZSk6ZGUuaXNG
dW5jdGlvbihlKT90aGlzLmVhY2goZnVuY3Rpb24obil7ZGUodGhpcykudG9nZ2xlQ2xhc3MoZS5j
YWxsKHRoaXMsbixLKHRoaXMpLHQpLHQpfSk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQscixp
LG8KLWlmKCJzdHJpbmciPT09bilmb3Iocj0wLGk9ZGUodGhpcyksbz1lLm1hdGNoKFJlKXx8W107
dD1vW3IrK107KWkuaGFzQ2xhc3ModCk/aS5yZW1vdmVDbGFzcyh0KTppLmFkZENsYXNzKHQpCi1l
bHNlIHZvaWQgMCE9PWUmJiJib29sZWFuIiE9PW58fCh0PUsodGhpcyksdCYmRGUuc2V0KHRoaXMs
Il9fY2xhc3NOYW1lX18iLHQpLHRoaXMuc2V0QXR0cmlidXRlJiZ0aGlzLnNldEF0dHJpYnV0ZSgi
Y2xhc3MiLHR8fCExPT09ZT8iIjpEZS5nZXQodGhpcywiX19jbGFzc05hbWVfXyIpfHwiIikpfSl9
LGhhc0NsYXNzOmZ1bmN0aW9uKGUpe3ZhciB0LG4scj0wCi1mb3IodD0iICIrZSsiICI7bj10aGlz
W3IrK107KWlmKDE9PT1uLm5vZGVUeXBlJiYoIiAiK0coSyhuKSkrIiAiKS5pbmRleE9mKHQpPi0x
KXJldHVybiEwCi1yZXR1cm4hMX19KQotdmFyIHd0PS9cci9nCi1kZS5mbi5leHRlbmQoe3ZhbDpm
dW5jdGlvbihlKXt2YXIgdCxuLHIsaT10aGlzWzBdCi17aWYoYXJndW1lbnRzLmxlbmd0aClyZXR1
cm4gcj1kZS5pc0Z1bmN0aW9uKGUpLHRoaXMuZWFjaChmdW5jdGlvbihuKXt2YXIgaQotMT09PXRo
aXMubm9kZVR5cGUmJihpPXI/ZS5jYWxsKHRoaXMsbixkZSh0aGlzKS52YWwoKSk6ZSxudWxsPT1p
P2k9IiI6Im51bWJlciI9PXR5cGVvZiBpP2krPSIiOkFycmF5LmlzQXJyYXkoaSkmJihpPWRlLm1h
cChpLGZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lPyIiOmUrIiJ9KSksKHQ9ZGUudmFsSG9va3Nb
dGhpcy50eXBlXXx8ZGUudmFsSG9va3NbdGhpcy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXSkmJiJz
ZXQiaW4gdCYmdm9pZCAwIT09dC5zZXQodGhpcyxpLCJ2YWx1ZSIpfHwodGhpcy52YWx1ZT1pKSl9
KQotaWYoaSlyZXR1cm4odD1kZS52YWxIb29rc1tpLnR5cGVdfHxkZS52YWxIb29rc1tpLm5vZGVO
YW1lLnRvTG93ZXJDYXNlKCldKSYmImdldCJpbiB0JiZ2b2lkIDAhPT0obj10LmdldChpLCJ2YWx1
ZSIpKT9uOihuPWkudmFsdWUsInN0cmluZyI9PXR5cGVvZiBuP24ucmVwbGFjZSh3dCwiIik6bnVs
bD09bj8iIjpuKX19fSksZGUuZXh0ZW5kKHt2YWxIb29rczp7b3B0aW9uOntnZXQ6ZnVuY3Rpb24o
ZSl7dmFyIHQ9ZGUuZmluZC5hdHRyKGUsInZhbHVlIikKLXJldHVybiBudWxsIT10P3Q6RyhkZS50
ZXh0KGUpKX19LHNlbGVjdDp7Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0LG4scixvPWUub3B0aW9ucyxz
PWUuc2VsZWN0ZWRJbmRleCxhPSJzZWxlY3Qtb25lIj09PWUudHlwZSx1PWE/bnVsbDpbXSxsPWE/
cysxOm8ubGVuZ3RoCi1mb3Iocj1zPDA/bDphP3M6MDtyPGw7cisrKWlmKG49b1tyXSwobi5zZWxl
Y3RlZHx8cj09PXMpJiYhbi5kaXNhYmxlZCYmKCFuLnBhcmVudE5vZGUuZGlzYWJsZWR8fCFpKG4u
cGFyZW50Tm9kZSwib3B0Z3JvdXAiKSkpe2lmKHQ9ZGUobikudmFsKCksYSlyZXR1cm4gdAotdS5w
dXNoKHQpfXJldHVybiB1fSxzZXQ6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4scixpPWUub3B0aW9u
cyxvPWRlLm1ha2VBcnJheSh0KSxzPWkubGVuZ3RoO3MtLTspcj1pW3NdLChyLnNlbGVjdGVkPWRl
LmluQXJyYXkoZGUudmFsSG9va3Mub3B0aW9uLmdldChyKSxvKT4tMSkmJihuPSEwKQotcmV0dXJu
IG58fChlLnNlbGVjdGVkSW5kZXg9LTEpLG99fX19KSxkZS5lYWNoKFsicmFkaW8iLCJjaGVja2Jv
eCJdLGZ1bmN0aW9uKCl7ZGUudmFsSG9va3NbdGhpc109e3NldDpmdW5jdGlvbihlLHQpe2lmKEFy
cmF5LmlzQXJyYXkodCkpcmV0dXJuIGUuY2hlY2tlZD1kZS5pbkFycmF5KGRlKGUpLnZhbCgpLHQp
Pi0xfX0saGUuY2hlY2tPbnx8KGRlLnZhbEhvb2tzW3RoaXNdLmdldD1mdW5jdGlvbihlKXtyZXR1
cm4gbnVsbD09PWUuZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpPyJvbiI6ZS52YWx1ZX0pfSkKLXZhciBF
dD0vXig/OmZvY3VzaW5mb2N1c3xmb2N1c291dGJsdXIpJC8KLWRlLmV4dGVuZChkZS5ldmVudCx7
dHJpZ2dlcjpmdW5jdGlvbih0LG4scixpKXt2YXIgbyxzLGEsdSxsLGMscCxmPVtyfHxuZV0saD1j
ZS5jYWxsKHQsInR5cGUiKT90LnR5cGU6dCxkPWNlLmNhbGwodCwibmFtZXNwYWNlIik/dC5uYW1l
c3BhY2Uuc3BsaXQoIi4iKTpbXQotaWYocz1hPXI9cnx8bmUsMyE9PXIubm9kZVR5cGUmJjghPT1y
Lm5vZGVUeXBlJiYhRXQudGVzdChoK2RlLmV2ZW50LnRyaWdnZXJlZCkmJihoLmluZGV4T2YoIi4i
KT4tMSYmKGQ9aC5zcGxpdCgiLiIpLGg9ZC5zaGlmdCgpLGQuc29ydCgpKSxsPWguaW5kZXhPZigi
OiIpPDAmJiJvbiIraCx0PXRbZGUuZXhwYW5kb10/dDpuZXcgZGUuRXZlbnQoaCwib2JqZWN0Ij09
dHlwZW9mIHQmJnQpLHQuaXNUcmlnZ2VyPWk/MjozLHQubmFtZXNwYWNlPWQuam9pbigiLiIpLHQu
cm5hbWVzcGFjZT10Lm5hbWVzcGFjZT9uZXcgUmVnRXhwKCIoXnxcXC4pIitkLmpvaW4oIlxcLig/
Oi4qXFwufCkiKSsiKFxcLnwkKSIpOm51bGwsdC5yZXN1bHQ9dm9pZCAwLHQudGFyZ2V0fHwodC50
YXJnZXQ9ciksbj1udWxsPT1uP1t0XTpkZS5tYWtlQXJyYXkobixbdF0pLHA9ZGUuZXZlbnQuc3Bl
Y2lhbFtoXXx8e30saXx8IXAudHJpZ2dlcnx8ITEhPT1wLnRyaWdnZXIuYXBwbHkocixuKSkpe2lm
KCFpJiYhcC5ub0J1YmJsZSYmIWRlLmlzV2luZG93KHIpKXtmb3IodT1wLmRlbGVnYXRlVHlwZXx8
aCxFdC50ZXN0KHUraCl8fChzPXMucGFyZW50Tm9kZSk7cztzPXMucGFyZW50Tm9kZSlmLnB1c2go
cyksYT1zCi1hPT09KHIub3duZXJEb2N1bWVudHx8bmUpJiZmLnB1c2goYS5kZWZhdWx0Vmlld3x8
YS5wYXJlbnRXaW5kb3d8fGUpfWZvcihvPTA7KHM9ZltvKytdKSYmIXQuaXNQcm9wYWdhdGlvblN0
b3BwZWQoKTspdC50eXBlPW8+MT91OnAuYmluZFR5cGV8fGgsYz0oRGUuZ2V0KHMsImV2ZW50cyIp
fHx7fSlbdC50eXBlXSYmRGUuZ2V0KHMsImhhbmRsZSIpLGMmJmMuYXBwbHkocyxuKSwoYz1sJiZz
W2xdKSYmYy5hcHBseSYmamUocykmJih0LnJlc3VsdD1jLmFwcGx5KHMsbiksITE9PT10LnJlc3Vs
dCYmdC5wcmV2ZW50RGVmYXVsdCgpKQotcmV0dXJuIHQudHlwZT1oLGl8fHQuaXNEZWZhdWx0UHJl
dmVudGVkKCl8fHAuX2RlZmF1bHQmJiExIT09cC5fZGVmYXVsdC5hcHBseShmLnBvcCgpLG4pfHwh
amUocil8fGwmJmRlLmlzRnVuY3Rpb24ocltoXSkmJiFkZS5pc1dpbmRvdyhyKSYmKGE9cltsXSxh
JiYocltsXT1udWxsKSxkZS5ldmVudC50cmlnZ2VyZWQ9aCxyW2hdKCksZGUuZXZlbnQudHJpZ2dl
cmVkPXZvaWQgMCxhJiYocltsXT1hKSksdC5yZXN1bHR9fSxzaW11bGF0ZTpmdW5jdGlvbihlLHQs
bil7dmFyIHI9ZGUuZXh0ZW5kKG5ldyBkZS5FdmVudCxuLHt0eXBlOmUsaXNTaW11bGF0ZWQ6ITB9
KQotZGUuZXZlbnQudHJpZ2dlcihyLG51bGwsdCl9fSksZGUuZm4uZXh0ZW5kKHt0cmlnZ2VyOmZ1
bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2RlLmV2ZW50LnRyaWdnZXIo
ZSx0LHRoaXMpfSl9LHRyaWdnZXJIYW5kbGVyOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpc1swXQot
aWYobilyZXR1cm4gZGUuZXZlbnQudHJpZ2dlcihlLHQsbiwhMCl9fSksZGUuZWFjaCgiYmx1ciBm
b2N1cyBmb2N1c2luIGZvY3Vzb3V0IHJlc2l6ZSBzY3JvbGwgY2xpY2sgZGJsY2xpY2sgbW91c2Vk
b3duIG1vdXNldXAgbW91c2Vtb3ZlIG1vdXNlb3ZlciBtb3VzZW91dCBtb3VzZWVudGVyIG1vdXNl
bGVhdmUgY2hhbmdlIHNlbGVjdCBzdWJtaXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBjb250ZXh0
bWVudSIuc3BsaXQoIiAiKSxmdW5jdGlvbihlLHQpe2RlLmZuW3RdPWZ1bmN0aW9uKGUsbil7cmV0
dXJuIGFyZ3VtZW50cy5sZW5ndGg+MD90aGlzLm9uKHQsbnVsbCxlLG4pOnRoaXMudHJpZ2dlcih0
KX19KSxkZS5mbi5leHRlbmQoe2hvdmVyOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMubW91c2Vl
bnRlcihlKS5tb3VzZWxlYXZlKHR8fGUpfX0pLGhlLmZvY3VzaW49Im9uZm9jdXNpbiJpbiBlLGhl
LmZvY3VzaW58fGRlLmVhY2goe2ZvY3VzOiJmb2N1c2luIixibHVyOiJmb2N1c291dCJ9LGZ1bmN0
aW9uKGUsdCl7dmFyIG49ZnVuY3Rpb24oZSl7ZGUuZXZlbnQuc2ltdWxhdGUodCxlLnRhcmdldCxk
ZS5ldmVudC5maXgoZSkpfQotZGUuZXZlbnQuc3BlY2lhbFt0XT17c2V0dXA6ZnVuY3Rpb24oKXt2
YXIgcj10aGlzLm93bmVyRG9jdW1lbnR8fHRoaXMsaT1EZS5hY2Nlc3Mocix0KQotaXx8ci5hZGRF
dmVudExpc3RlbmVyKGUsbiwhMCksRGUuYWNjZXNzKHIsdCwoaXx8MCkrMSl9LHRlYXJkb3duOmZ1
bmN0aW9uKCl7dmFyIHI9dGhpcy5vd25lckRvY3VtZW50fHx0aGlzLGk9RGUuYWNjZXNzKHIsdCkt
MQotaT9EZS5hY2Nlc3Mocix0LGkpOihyLnJlbW92ZUV2ZW50TGlzdGVuZXIoZSxuLCEwKSxEZS5y
ZW1vdmUocix0KSl9fX0pCi12YXIgeHQ9ZS5sb2NhdGlvbixDdD1kZS5ub3coKSxPdD0vXD8vCi1k
ZS5wYXJzZVhNTD1mdW5jdGlvbih0KXt2YXIgbgotaWYoIXR8fCJzdHJpbmciIT10eXBlb2YgdCly
ZXR1cm4gbnVsbAotdHJ5e249KG5ldyBlLkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKHQsInRl
eHQveG1sIil9Y2F0Y2goZSl7bj12b2lkIDB9cmV0dXJuIG4mJiFuLmdldEVsZW1lbnRzQnlUYWdO
YW1lKCJwYXJzZXJlcnJvciIpLmxlbmd0aHx8ZGUuZXJyb3IoIkludmFsaWQgWE1MOiAiK3QpLG59
Ci12YXIgQXQ9L1xbXF0kLyxUdD0vXHI/XG4vZyxTdD0vXig/OnN1Ym1pdHxidXR0b258aW1hZ2V8
cmVzZXR8ZmlsZSkkL2ksUnQ9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8a2V5Z2VuKS9pCi1k
ZS5wYXJhbT1mdW5jdGlvbihlLHQpe3ZhciBuLHI9W10saT1mdW5jdGlvbihlLHQpe3ZhciBuPWRl
LmlzRnVuY3Rpb24odCk/dCgpOnQKLXJbci5sZW5ndGhdPWVuY29kZVVSSUNvbXBvbmVudChlKSsi
PSIrZW5jb2RlVVJJQ29tcG9uZW50KG51bGw9PW4/IiI6bil9Ci1pZihBcnJheS5pc0FycmF5KGUp
fHxlLmpxdWVyeSYmIWRlLmlzUGxhaW5PYmplY3QoZSkpZGUuZWFjaChlLGZ1bmN0aW9uKCl7aSh0
aGlzLm5hbWUsdGhpcy52YWx1ZSl9KQotZWxzZSBmb3IobiBpbiBlKVEobixlW25dLHQsaSkKLXJl
dHVybiByLmpvaW4oIiYiKX0sZGUuZm4uZXh0ZW5kKHtzZXJpYWxpemU6ZnVuY3Rpb24oKXtyZXR1
cm4gZGUucGFyYW0odGhpcy5zZXJpYWxpemVBcnJheSgpKX0sc2VyaWFsaXplQXJyYXk6ZnVuY3Rp
b24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXt2YXIgZT1kZS5wcm9wKHRoaXMsImVsZW1l
bnRzIikKLXJldHVybiBlP2RlLm1ha2VBcnJheShlKTp0aGlzfSkuZmlsdGVyKGZ1bmN0aW9uKCl7
dmFyIGU9dGhpcy50eXBlCi1yZXR1cm4gdGhpcy5uYW1lJiYhZGUodGhpcykuaXMoIjpkaXNhYmxl
ZCIpJiZSdC50ZXN0KHRoaXMubm9kZU5hbWUpJiYhU3QudGVzdChlKSYmKHRoaXMuY2hlY2tlZHx8
IVZlLnRlc3QoZSkpfSkubWFwKGZ1bmN0aW9uKGUsdCl7dmFyIG49ZGUodGhpcykudmFsKCkKLXJl
dHVybiBudWxsPT1uP251bGw6QXJyYXkuaXNBcnJheShuKT9kZS5tYXAobixmdW5jdGlvbihlKXty
ZXR1cm57bmFtZTp0Lm5hbWUsdmFsdWU6ZS5yZXBsYWNlKFR0LCJcclxuIil9fSk6e25hbWU6dC5u
YW1lLHZhbHVlOm4ucmVwbGFjZShUdCwiXHJcbiIpfX0pLmdldCgpfX0pCi12YXIga3Q9LyUyMC9n
LE50PS8jLiokLyxQdD0vKFs/Jl0pXz1bXiZdKi8sanQ9L14oLio/KTpbIFx0XSooW15cclxuXSop
JC9nbSxEdD0vXig/OmFib3V0fGFwcHxhcHAtc3RvcmFnZXwuKy1leHRlbnNpb258ZmlsZXxyZXN8
d2lkZ2V0KTokLyxMdD0vXig/OkdFVHxIRUFEKSQvLEl0PS9eXC9cLy8sTXQ9e30sRnQ9e30senQ9
IiovIi5jb25jYXQoIioiKSxVdD1uZS5jcmVhdGVFbGVtZW50KCJhIikKLVV0LmhyZWY9eHQuaHJl
ZixkZS5leHRlbmQoe2FjdGl2ZTowLGxhc3RNb2RpZmllZDp7fSxldGFnOnt9LGFqYXhTZXR0aW5n
czp7dXJsOnh0LmhyZWYsdHlwZToiR0VUIixpc0xvY2FsOkR0LnRlc3QoeHQucHJvdG9jb2wpLGds
b2JhbDohMCxwcm9jZXNzRGF0YTohMCxhc3luYzohMCxjb250ZW50VHlwZToiYXBwbGljYXRpb24v
eC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04IixhY2NlcHRzOnsiKiI6enQsdGV4
dDoidGV4dC9wbGFpbiIsaHRtbDoidGV4dC9odG1sIix4bWw6ImFwcGxpY2F0aW9uL3htbCwgdGV4
dC94bWwiLGpzb246ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvamF2YXNjcmlwdCJ9LGNvbnRlbnRz
Ont4bWw6L1xieG1sXGIvLGh0bWw6L1xiaHRtbC8sanNvbjovXGJqc29uXGIvfSxyZXNwb25zZUZp
ZWxkczp7eG1sOiJyZXNwb25zZVhNTCIsdGV4dDoicmVzcG9uc2VUZXh0Iixqc29uOiJyZXNwb25z
ZUpTT04ifSxjb252ZXJ0ZXJzOnsiKiB0ZXh0IjpTdHJpbmcsInRleHQgaHRtbCI6ITAsInRleHQg
anNvbiI6SlNPTi5wYXJzZSwidGV4dCB4bWwiOmRlLnBhcnNlWE1MfSxmbGF0T3B0aW9uczp7dXJs
OiEwLGNvbnRleHQ6ITB9fSxhamF4U2V0dXA6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD9YKFgoZSxk
ZS5hamF4U2V0dGluZ3MpLHQpOlgoZGUuYWpheFNldHRpbmdzLGUpfSxhamF4UHJlZmlsdGVyOlko
TXQpLGFqYXhUcmFuc3BvcnQ6WShGdCksYWpheDpmdW5jdGlvbih0LG4pe2Z1bmN0aW9uIHIodCxu
LHIsYSl7dmFyIGwsZixoLF8sdyxFPW4KLWN8fChjPSEwLHUmJmUuY2xlYXJUaW1lb3V0KHUpLGk9
dm9pZCAwLHM9YXx8IiIseC5yZWFkeVN0YXRlPXQ+MD80OjAsbD10Pj0yMDAmJnQ8MzAwfHwzMDQ9
PT10LHImJihfPVooZCx4LHIpKSxfPWVlKGQsXyx4LGwpLGw/KGQuaWZNb2RpZmllZCYmKHc9eC5n
ZXRSZXNwb25zZUhlYWRlcigiTGFzdC1Nb2RpZmllZCIpLHcmJihkZS5sYXN0TW9kaWZpZWRbb109
dyksKHc9eC5nZXRSZXNwb25zZUhlYWRlcigiZXRhZyIpKSYmKGRlLmV0YWdbb109dykpLDIwND09
PXR8fCJIRUFEIj09PWQudHlwZT9FPSJub2NvbnRlbnQiOjMwND09PXQ/RT0ibm90bW9kaWZpZWQi
OihFPV8uc3RhdGUsZj1fLmRhdGEsaD1fLmVycm9yLGw9IWgpKTooaD1FLCF0JiZFfHwoRT0iZXJy
b3IiLHQ8MCYmKHQ9MCkpKSx4LnN0YXR1cz10LHguc3RhdHVzVGV4dD0obnx8RSkrIiIsbD95LnJl
c29sdmVXaXRoKG0sW2YsRSx4XSk6eS5yZWplY3RXaXRoKG0sW3gsRSxoXSkseC5zdGF0dXNDb2Rl
KGIpLGI9dm9pZCAwLHAmJmcudHJpZ2dlcihsPyJhamF4U3VjY2VzcyI6ImFqYXhFcnJvciIsW3gs
ZCxsP2Y6aF0pLHYuZmlyZVdpdGgobSxbeCxFXSkscCYmKGcudHJpZ2dlcigiYWpheENvbXBsZXRl
IixbeCxkXSksLS1kZS5hY3RpdmV8fGRlLmV2ZW50LnRyaWdnZXIoImFqYXhTdG9wIikpKX0ib2Jq
ZWN0Ij09dHlwZW9mIHQmJihuPXQsdD12b2lkIDApLG49bnx8e30KLXZhciBpLG8scyxhLHUsbCxj
LHAsZixoLGQ9ZGUuYWpheFNldHVwKHt9LG4pLG09ZC5jb250ZXh0fHxkLGc9ZC5jb250ZXh0JiYo
bS5ub2RlVHlwZXx8bS5qcXVlcnkpP2RlKG0pOmRlLmV2ZW50LHk9ZGUuRGVmZXJyZWQoKSx2PWRl
LkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSxiPWQuc3RhdHVzQ29kZXx8e30sXz17fSx3PXt9LEU9
ImNhbmNlbGVkIix4PXtyZWFkeVN0YXRlOjAsZ2V0UmVzcG9uc2VIZWFkZXI6ZnVuY3Rpb24oZSl7
dmFyIHQKLWlmKGMpe2lmKCFhKWZvcihhPXt9O3Q9anQuZXhlYyhzKTspYVt0WzFdLnRvTG93ZXJD
YXNlKCldPXRbMl0KLXQ9YVtlLnRvTG93ZXJDYXNlKCldfXJldHVybiBudWxsPT10P251bGw6dH0s
Z2V0QWxsUmVzcG9uc2VIZWFkZXJzOmZ1bmN0aW9uKCl7cmV0dXJuIGM/czpudWxsfSxzZXRSZXF1
ZXN0SGVhZGVyOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGw9PWMmJihlPXdbZS50b0xvd2VyQ2Fz
ZSgpXT13W2UudG9Mb3dlckNhc2UoKV18fGUsX1tlXT10KSx0aGlzfSxvdmVycmlkZU1pbWVUeXBl
OmZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1jJiYoZC5taW1lVHlwZT1lKSx0aGlzfSxzdGF0dXND
b2RlOmZ1bmN0aW9uKGUpe3ZhciB0Ci1pZihlKWlmKGMpeC5hbHdheXMoZVt4LnN0YXR1c10pCi1l
bHNlIGZvcih0IGluIGUpYlt0XT1bYlt0XSxlW3RdXQotcmV0dXJuIHRoaXN9LGFib3J0OmZ1bmN0
aW9uKGUpe3ZhciB0PWV8fEUKLXJldHVybiBpJiZpLmFib3J0KHQpLHIoMCx0KSx0aGlzfX0KLWlm
KHkucHJvbWlzZSh4KSxkLnVybD0oKHR8fGQudXJsfHx4dC5ocmVmKSsiIikucmVwbGFjZShJdCx4
dC5wcm90b2NvbCsiLy8iKSxkLnR5cGU9bi5tZXRob2R8fG4udHlwZXx8ZC5tZXRob2R8fGQudHlw
ZSxkLmRhdGFUeXBlcz0oZC5kYXRhVHlwZXx8IioiKS50b0xvd2VyQ2FzZSgpLm1hdGNoKFJlKXx8
WyIiXSxudWxsPT1kLmNyb3NzRG9tYWluKXtsPW5lLmNyZWF0ZUVsZW1lbnQoImEiKQotdHJ5e2wu
aHJlZj1kLnVybCxsLmhyZWY9bC5ocmVmLGQuY3Jvc3NEb21haW49VXQucHJvdG9jb2wrIi8vIitV
dC5ob3N0IT1sLnByb3RvY29sKyIvLyIrbC5ob3N0fWNhdGNoKGUpe2QuY3Jvc3NEb21haW49ITB9
fWlmKGQuZGF0YSYmZC5wcm9jZXNzRGF0YSYmInN0cmluZyIhPXR5cGVvZiBkLmRhdGEmJihkLmRh
dGE9ZGUucGFyYW0oZC5kYXRhLGQudHJhZGl0aW9uYWwpKSxKKE10LGQsbix4KSxjKXJldHVybiB4
Ci1wPWRlLmV2ZW50JiZkLmdsb2JhbCxwJiYwPT1kZS5hY3RpdmUrKyYmZGUuZXZlbnQudHJpZ2dl
cigiYWpheFN0YXJ0IiksZC50eXBlPWQudHlwZS50b1VwcGVyQ2FzZSgpLGQuaGFzQ29udGVudD0h
THQudGVzdChkLnR5cGUpLG89ZC51cmwucmVwbGFjZShOdCwiIiksZC5oYXNDb250ZW50P2QuZGF0
YSYmZC5wcm9jZXNzRGF0YSYmMD09PShkLmNvbnRlbnRUeXBlfHwiIikuaW5kZXhPZigiYXBwbGlj
YXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIikmJihkLmRhdGE9ZC5kYXRhLnJlcGxhY2Uoa3Qs
IisiKSk6KGg9ZC51cmwuc2xpY2Uoby5sZW5ndGgpLGQuZGF0YSYmKG8rPShPdC50ZXN0KG8pPyIm
IjoiPyIpK2QuZGF0YSxkZWxldGUgZC5kYXRhKSwhMT09PWQuY2FjaGUmJihvPW8ucmVwbGFjZShQ
dCwiJDEiKSxoPShPdC50ZXN0KG8pPyImIjoiPyIpKyJfPSIrQ3QrKytoKSxkLnVybD1vK2gpLGQu
aWZNb2RpZmllZCYmKGRlLmxhc3RNb2RpZmllZFtvXSYmeC5zZXRSZXF1ZXN0SGVhZGVyKCJJZi1N
b2RpZmllZC1TaW5jZSIsZGUubGFzdE1vZGlmaWVkW29dKSxkZS5ldGFnW29dJiZ4LnNldFJlcXVl
c3RIZWFkZXIoIklmLU5vbmUtTWF0Y2giLGRlLmV0YWdbb10pKSwoZC5kYXRhJiZkLmhhc0NvbnRl
bnQmJiExIT09ZC5jb250ZW50VHlwZXx8bi5jb250ZW50VHlwZSkmJnguc2V0UmVxdWVzdEhlYWRl
cigiQ29udGVudC1UeXBlIixkLmNvbnRlbnRUeXBlKSx4LnNldFJlcXVlc3RIZWFkZXIoIkFjY2Vw
dCIsZC5kYXRhVHlwZXNbMF0mJmQuYWNjZXB0c1tkLmRhdGFUeXBlc1swXV0/ZC5hY2NlcHRzW2Qu
ZGF0YVR5cGVzWzBdXSsoIioiIT09ZC5kYXRhVHlwZXNbMF0/IiwgIit6dCsiOyBxPTAuMDEiOiIi
KTpkLmFjY2VwdHNbIioiXSkKLWZvcihmIGluIGQuaGVhZGVycyl4LnNldFJlcXVlc3RIZWFkZXIo
ZixkLmhlYWRlcnNbZl0pCi1pZihkLmJlZm9yZVNlbmQmJighMT09PWQuYmVmb3JlU2VuZC5jYWxs
KG0seCxkKXx8YykpcmV0dXJuIHguYWJvcnQoKQotaWYoRT0iYWJvcnQiLHYuYWRkKGQuY29tcGxl
dGUpLHguZG9uZShkLnN1Y2Nlc3MpLHguZmFpbChkLmVycm9yKSxpPUooRnQsZCxuLHgpKXtpZih4
LnJlYWR5U3RhdGU9MSxwJiZnLnRyaWdnZXIoImFqYXhTZW5kIixbeCxkXSksYylyZXR1cm4geAot
ZC5hc3luYyYmZC50aW1lb3V0PjAmJih1PWUuc2V0VGltZW91dChmdW5jdGlvbigpe3guYWJvcnQo
InRpbWVvdXQiKX0sZC50aW1lb3V0KSkKLXRyeXtjPSExLGkuc2VuZChfLHIpfWNhdGNoKGUpe2lm
KGMpdGhyb3cgZQotcigtMSxlKX19ZWxzZSByKC0xLCJObyBUcmFuc3BvcnQiKQotcmV0dXJuIHh9
LGdldEpTT046ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBkZS5nZXQoZSx0LG4sImpzb24iKX0sZ2V0
U2NyaXB0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGRlLmdldChlLHZvaWQgMCx0LCJzY3JpcHQiKX19
KSxkZS5lYWNoKFsiZ2V0IiwicG9zdCJdLGZ1bmN0aW9uKGUsdCl7ZGVbdF09ZnVuY3Rpb24oZSxu
LHIsaSl7cmV0dXJuIGRlLmlzRnVuY3Rpb24obikmJihpPWl8fHIscj1uLG49dm9pZCAwKSxkZS5h
amF4KGRlLmV4dGVuZCh7dXJsOmUsdHlwZTp0LGRhdGFUeXBlOmksZGF0YTpuLHN1Y2Nlc3M6cn0s
ZGUuaXNQbGFpbk9iamVjdChlKSYmZSkpfX0pLGRlLl9ldmFsVXJsPWZ1bmN0aW9uKGUpe3JldHVy
biBkZS5hamF4KHt1cmw6ZSx0eXBlOiJHRVQiLGRhdGFUeXBlOiJzY3JpcHQiLGNhY2hlOiEwLGFz
eW5jOiExLGdsb2JhbDohMSx0aHJvd3M6ITB9KX0sZGUuZm4uZXh0ZW5kKHt3cmFwQWxsOmZ1bmN0
aW9uKGUpe3ZhciB0Ci1yZXR1cm4gdGhpc1swXSYmKGRlLmlzRnVuY3Rpb24oZSkmJihlPWUuY2Fs
bCh0aGlzWzBdKSksdD1kZShlLHRoaXNbMF0ub3duZXJEb2N1bWVudCkuZXEoMCkuY2xvbmUoITAp
LHRoaXNbMF0ucGFyZW50Tm9kZSYmdC5pbnNlcnRCZWZvcmUodGhpc1swXSksdC5tYXAoZnVuY3Rp
b24oKXtmb3IodmFyIGU9dGhpcztlLmZpcnN0RWxlbWVudENoaWxkOyllPWUuZmlyc3RFbGVtZW50
Q2hpbGQKLXJldHVybiBlfSkuYXBwZW5kKHRoaXMpKSx0aGlzfSx3cmFwSW5uZXI6ZnVuY3Rpb24o
ZSl7cmV0dXJuIGRlLmlzRnVuY3Rpb24oZSk/dGhpcy5lYWNoKGZ1bmN0aW9uKHQpe2RlKHRoaXMp
LndyYXBJbm5lcihlLmNhbGwodGhpcyx0KSl9KTp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1k
ZSh0aGlzKSxuPXQuY29udGVudHMoKQotbi5sZW5ndGg/bi53cmFwQWxsKGUpOnQuYXBwZW5kKGUp
fSl9LHdyYXA6ZnVuY3Rpb24oZSl7dmFyIHQ9ZGUuaXNGdW5jdGlvbihlKQotcmV0dXJuIHRoaXMu
ZWFjaChmdW5jdGlvbihuKXtkZSh0aGlzKS53cmFwQWxsKHQ/ZS5jYWxsKHRoaXMsbik6ZSl9KX0s
dW53cmFwOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnBhcmVudChlKS5ub3QoImJvZHkiKS5lYWNo
KGZ1bmN0aW9uKCl7ZGUodGhpcykucmVwbGFjZVdpdGgodGhpcy5jaGlsZE5vZGVzKX0pLHRoaXN9
fSksZGUuZXhwci5wc2V1ZG9zLmhpZGRlbj1mdW5jdGlvbihlKXtyZXR1cm4hZGUuZXhwci5wc2V1
ZG9zLnZpc2libGUoZSl9LGRlLmV4cHIucHNldWRvcy52aXNpYmxlPWZ1bmN0aW9uKGUpe3JldHVy
biEhKGUub2Zmc2V0V2lkdGh8fGUub2Zmc2V0SGVpZ2h0fHxlLmdldENsaWVudFJlY3RzKCkubGVu
Z3RoKX0sZGUuYWpheFNldHRpbmdzLnhocj1mdW5jdGlvbigpe3RyeXtyZXR1cm4gbmV3IGUuWE1M
SHR0cFJlcXVlc3R9Y2F0Y2goZSl7fX0KLXZhciBCdD17MDoyMDAsMTIyMzoyMDR9LHF0PWRlLmFq
YXhTZXR0aW5ncy54aHIoKQotaGUuY29ycz0hIXF0JiYid2l0aENyZWRlbnRpYWxzImluIHF0LGhl
LmFqYXg9cXQ9ISFxdCxkZS5hamF4VHJhbnNwb3J0KGZ1bmN0aW9uKHQpe3ZhciBuLHIKLWlmKGhl
LmNvcnN8fHF0JiYhdC5jcm9zc0RvbWFpbilyZXR1cm57c2VuZDpmdW5jdGlvbihpLG8pe3ZhciBz
LGE9dC54aHIoKQotaWYoYS5vcGVuKHQudHlwZSx0LnVybCx0LmFzeW5jLHQudXNlcm5hbWUsdC5w
YXNzd29yZCksdC54aHJGaWVsZHMpZm9yKHMgaW4gdC54aHJGaWVsZHMpYVtzXT10LnhockZpZWxk
c1tzXQotdC5taW1lVHlwZSYmYS5vdmVycmlkZU1pbWVUeXBlJiZhLm92ZXJyaWRlTWltZVR5cGUo
dC5taW1lVHlwZSksdC5jcm9zc0RvbWFpbnx8aVsiWC1SZXF1ZXN0ZWQtV2l0aCJdfHwoaVsiWC1S
ZXF1ZXN0ZWQtV2l0aCJdPSJYTUxIdHRwUmVxdWVzdCIpCi1mb3IocyBpbiBpKWEuc2V0UmVxdWVz
dEhlYWRlcihzLGlbc10pCi1uPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe24mJihuPXI9
YS5vbmxvYWQ9YS5vbmVycm9yPWEub25hYm9ydD1hLm9ucmVhZHlzdGF0ZWNoYW5nZT1udWxsLCJh
Ym9ydCI9PT1lP2EuYWJvcnQoKToiZXJyb3IiPT09ZT8ibnVtYmVyIiE9dHlwZW9mIGEuc3RhdHVz
P28oMCwiZXJyb3IiKTpvKGEuc3RhdHVzLGEuc3RhdHVzVGV4dCk6byhCdFthLnN0YXR1c118fGEu
c3RhdHVzLGEuc3RhdHVzVGV4dCwidGV4dCIhPT0oYS5yZXNwb25zZVR5cGV8fCJ0ZXh0Iil8fCJz
dHJpbmciIT10eXBlb2YgYS5yZXNwb25zZVRleHQ/e2JpbmFyeTphLnJlc3BvbnNlfTp7dGV4dDph
LnJlc3BvbnNlVGV4dH0sYS5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSkpfX0sYS5vbmxvYWQ9bigp
LHI9YS5vbmVycm9yPW4oImVycm9yIiksdm9pZCAwIT09YS5vbmFib3J0P2Eub25hYm9ydD1yOmEu
b25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7ND09PWEucmVhZHlTdGF0ZSYmZS5zZXRUaW1l
b3V0KGZ1bmN0aW9uKCl7biYmcigpfSl9LG49bigiYWJvcnQiKQotdHJ5e2Euc2VuZCh0Lmhhc0Nv
bnRlbnQmJnQuZGF0YXx8bnVsbCl9Y2F0Y2goZSl7aWYobil0aHJvdyBlfX0sYWJvcnQ6ZnVuY3Rp
b24oKXtuJiZuKCl9fX0pLGRlLmFqYXhQcmVmaWx0ZXIoZnVuY3Rpb24oZSl7ZS5jcm9zc0RvbWFp
biYmKGUuY29udGVudHMuc2NyaXB0PSExKX0pLGRlLmFqYXhTZXR1cCh7YWNjZXB0czp7c2NyaXB0
OiJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2Vj
bWFzY3JpcHQsIGFwcGxpY2F0aW9uL3gtZWNtYXNjcmlwdCJ9LGNvbnRlbnRzOntzY3JpcHQ6L1xi
KD86amF2YXxlY21hKXNjcmlwdFxiL30sY29udmVydGVyczp7InRleHQgc2NyaXB0IjpmdW5jdGlv
bihlKXtyZXR1cm4gZGUuZ2xvYmFsRXZhbChlKSxlfX19KSxkZS5hamF4UHJlZmlsdGVyKCJzY3Jp
cHQiLGZ1bmN0aW9uKGUpe3ZvaWQgMD09PWUuY2FjaGUmJihlLmNhY2hlPSExKSxlLmNyb3NzRG9t
YWluJiYoZS50eXBlPSJHRVQiKX0pLGRlLmFqYXhUcmFuc3BvcnQoInNjcmlwdCIsZnVuY3Rpb24o
ZSl7aWYoZS5jcm9zc0RvbWFpbil7dmFyIHQsbgotcmV0dXJue3NlbmQ6ZnVuY3Rpb24ocixpKXt0
PWRlKCI8c2NyaXB0PiIpLnByb3Aoe2NoYXJzZXQ6ZS5zY3JpcHRDaGFyc2V0LHNyYzplLnVybH0p
Lm9uKCJsb2FkIGVycm9yIixuPWZ1bmN0aW9uKGUpe3QucmVtb3ZlKCksbj1udWxsLGUmJmkoImVy
cm9yIj09PWUudHlwZT80MDQ6MjAwLGUudHlwZSl9KSxuZS5oZWFkLmFwcGVuZENoaWxkKHRbMF0p
fSxhYm9ydDpmdW5jdGlvbigpe24mJm4oKX19fX0pCi12YXIgSHQ9W10sVnQ9Lyg9KVw/KD89Jnwk
KXxcP1w/LwotZGUuYWpheFNldHVwKHtqc29ucDoiY2FsbGJhY2siLGpzb25wQ2FsbGJhY2s6ZnVu
Y3Rpb24oKXt2YXIgZT1IdC5wb3AoKXx8ZGUuZXhwYW5kbysiXyIrQ3QrKwotcmV0dXJuIHRoaXNb
ZV09ITAsZX19KSxkZS5hamF4UHJlZmlsdGVyKCJqc29uIGpzb25wIixmdW5jdGlvbih0LG4scil7
dmFyIGksbyxzLGE9ITEhPT10Lmpzb25wJiYoVnQudGVzdCh0LnVybCk/InVybCI6InN0cmluZyI9
PXR5cGVvZiB0LmRhdGEmJjA9PT0odC5jb250ZW50VHlwZXx8IiIpLmluZGV4T2YoImFwcGxpY2F0
aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpJiZWdC50ZXN0KHQuZGF0YSkmJiJkYXRhIikKLWlm
KGF8fCJqc29ucCI9PT10LmRhdGFUeXBlc1swXSlyZXR1cm4gaT10Lmpzb25wQ2FsbGJhY2s9ZGUu
aXNGdW5jdGlvbih0Lmpzb25wQ2FsbGJhY2spP3QuanNvbnBDYWxsYmFjaygpOnQuanNvbnBDYWxs
YmFjayxhP3RbYV09dFthXS5yZXBsYWNlKFZ0LCIkMSIraSk6ITEhPT10Lmpzb25wJiYodC51cmwr
PShPdC50ZXN0KHQudXJsKT8iJiI6Ij8iKSt0Lmpzb25wKyI9IitpKSx0LmNvbnZlcnRlcnNbInNj
cmlwdCBqc29uIl09ZnVuY3Rpb24oKXtyZXR1cm4gc3x8ZGUuZXJyb3IoaSsiIHdhcyBub3QgY2Fs
bGVkIiksc1swXX0sdC5kYXRhVHlwZXNbMF09Impzb24iLG89ZVtpXSxlW2ldPWZ1bmN0aW9uKCl7
cz1hcmd1bWVudHN9LHIuYWx3YXlzKGZ1bmN0aW9uKCl7dm9pZCAwPT09bz9kZShlKS5yZW1vdmVQ
cm9wKGkpOmVbaV09byx0W2ldJiYodC5qc29ucENhbGxiYWNrPW4uanNvbnBDYWxsYmFjayxIdC5w
dXNoKGkpKSxzJiZkZS5pc0Z1bmN0aW9uKG8pJiZvKHNbMF0pLHM9bz12b2lkIDB9KSwic2NyaXB0
In0pLGhlLmNyZWF0ZUhUTUxEb2N1bWVudD1mdW5jdGlvbigpe3ZhciBlPW5lLmltcGxlbWVudGF0
aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgiIikuYm9keQotcmV0dXJuIGUuaW5uZXJIVE1MPSI8Zm9y
bT48L2Zvcm0+PGZvcm0+PC9mb3JtPiIsMj09PWUuY2hpbGROb2Rlcy5sZW5ndGh9KCksZGUucGFy
c2VIVE1MPWZ1bmN0aW9uKGUsdCxuKXtpZigic3RyaW5nIiE9dHlwZW9mIGUpcmV0dXJuW10KLSJi
b29sZWFuIj09dHlwZW9mIHQmJihuPXQsdD0hMSkKLXZhciByLGksbwotcmV0dXJuIHR8fChoZS5j
cmVhdGVIVE1MRG9jdW1lbnQ/KHQ9bmUuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50
KCIiKSxyPXQuY3JlYXRlRWxlbWVudCgiYmFzZSIpLHIuaHJlZj1uZS5sb2NhdGlvbi5ocmVmLHQu
aGVhZC5hcHBlbmRDaGlsZChyKSk6dD1uZSksaT14ZS5leGVjKGUpLG89IW4mJltdLGk/W3QuY3Jl
YXRlRWxlbWVudChpWzFdKV06KGk9XyhbZV0sdCxvKSxvJiZvLmxlbmd0aCYmZGUobykucmVtb3Zl
KCksZGUubWVyZ2UoW10saS5jaGlsZE5vZGVzKSl9LGRlLmZuLmxvYWQ9ZnVuY3Rpb24oZSx0LG4p
e3ZhciByLGksbyxzPXRoaXMsYT1lLmluZGV4T2YoIiAiKQotcmV0dXJuIGE+LTEmJihyPUcoZS5z
bGljZShhKSksZT1lLnNsaWNlKDAsYSkpLGRlLmlzRnVuY3Rpb24odCk/KG49dCx0PXZvaWQgMCk6
dCYmIm9iamVjdCI9PXR5cGVvZiB0JiYoaT0iUE9TVCIpLHMubGVuZ3RoPjAmJmRlLmFqYXgoe3Vy
bDplLHR5cGU6aXx8IkdFVCIsZGF0YVR5cGU6Imh0bWwiLGRhdGE6dH0pLmRvbmUoZnVuY3Rpb24o
ZSl7bz1hcmd1bWVudHMscy5odG1sKHI/ZGUoIjxkaXY+IikuYXBwZW5kKGRlLnBhcnNlSFRNTChl
KSkuZmluZChyKTplKX0pLmFsd2F5cyhuJiZmdW5jdGlvbihlLHQpe3MuZWFjaChmdW5jdGlvbigp
e24uYXBwbHkodGhpcyxvfHxbZS5yZXNwb25zZVRleHQsdCxlXSl9KX0pLHRoaXN9LGRlLmVhY2go
WyJhamF4U3RhcnQiLCJhamF4U3RvcCIsImFqYXhDb21wbGV0ZSIsImFqYXhFcnJvciIsImFqYXhT
dWNjZXNzIiwiYWpheFNlbmQiXSxmdW5jdGlvbihlLHQpe2RlLmZuW3RdPWZ1bmN0aW9uKGUpe3Jl
dHVybiB0aGlzLm9uKHQsZSl9fSksZGUuZXhwci5wc2V1ZG9zLmFuaW1hdGVkPWZ1bmN0aW9uKGUp
e3JldHVybiBkZS5ncmVwKGRlLnRpbWVycyxmdW5jdGlvbih0KXtyZXR1cm4gZT09PXQuZWxlbX0p
Lmxlbmd0aH0sZGUub2Zmc2V0PXtzZXRPZmZzZXQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbyxz
LGEsdSxsLGM9ZGUuY3NzKGUsInBvc2l0aW9uIikscD1kZShlKSxmPXt9Ci0ic3RhdGljIj09PWMm
JihlLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIpLGE9cC5vZmZzZXQoKSxvPWRlLmNzcyhlLCJ0
b3AiKSx1PWRlLmNzcyhlLCJsZWZ0IiksbD0oImFic29sdXRlIj09PWN8fCJmaXhlZCI9PT1jKSYm
KG8rdSkuaW5kZXhPZigiYXV0byIpPi0xLGw/KHI9cC5wb3NpdGlvbigpLHM9ci50b3AsaT1yLmxl
ZnQpOihzPXBhcnNlRmxvYXQobyl8fDAsaT1wYXJzZUZsb2F0KHUpfHwwKSxkZS5pc0Z1bmN0aW9u
KHQpJiYodD10LmNhbGwoZSxuLGRlLmV4dGVuZCh7fSxhKSkpLG51bGwhPXQudG9wJiYoZi50b3A9
dC50b3AtYS50b3ArcyksbnVsbCE9dC5sZWZ0JiYoZi5sZWZ0PXQubGVmdC1hLmxlZnQraSksInVz
aW5nImluIHQ/dC51c2luZy5jYWxsKGUsZik6cC5jc3MoZil9fSxkZS5mbi5leHRlbmQoe29mZnNl
dDpmdW5jdGlvbihlKXtpZihhcmd1bWVudHMubGVuZ3RoKXJldHVybiB2b2lkIDA9PT1lP3RoaXM6
dGhpcy5lYWNoKGZ1bmN0aW9uKHQpe2RlLm9mZnNldC5zZXRPZmZzZXQodGhpcyxlLHQpfSkKLXZh
ciB0LG4scixpLG89dGhpc1swXQotaWYobylyZXR1cm4gby5nZXRDbGllbnRSZWN0cygpLmxlbmd0
aD8ocj1vLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHQ9by5vd25lckRvY3VtZW50LG49dC5kb2N1
bWVudEVsZW1lbnQsaT10LmRlZmF1bHRWaWV3LHt0b3A6ci50b3AraS5wYWdlWU9mZnNldC1uLmNs
aWVudFRvcCxsZWZ0OnIubGVmdCtpLnBhZ2VYT2Zmc2V0LW4uY2xpZW50TGVmdH0pOnt0b3A6MCxs
ZWZ0OjB9fSxwb3NpdGlvbjpmdW5jdGlvbigpe2lmKHRoaXNbMF0pe3ZhciBlLHQsbj10aGlzWzBd
LHI9e3RvcDowLGxlZnQ6MH0KLXJldHVybiJmaXhlZCI9PT1kZS5jc3MobiwicG9zaXRpb24iKT90
PW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk6KGU9dGhpcy5vZmZzZXRQYXJlbnQoKSx0PXRoaXMu
b2Zmc2V0KCksaShlWzBdLCJodG1sIil8fChyPWUub2Zmc2V0KCkpLHI9e3RvcDpyLnRvcCtkZS5j
c3MoZVswXSwiYm9yZGVyVG9wV2lkdGgiLCEwKSxsZWZ0OnIubGVmdCtkZS5jc3MoZVswXSwiYm9y
ZGVyTGVmdFdpZHRoIiwhMCl9KSx7dG9wOnQudG9wLXIudG9wLWRlLmNzcyhuLCJtYXJnaW5Ub3Ai
LCEwKSxsZWZ0OnQubGVmdC1yLmxlZnQtZGUuY3NzKG4sIm1hcmdpbkxlZnQiLCEwKX19fSxvZmZz
ZXRQYXJlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXtmb3IodmFyIGU9
dGhpcy5vZmZzZXRQYXJlbnQ7ZSYmInN0YXRpYyI9PT1kZS5jc3MoZSwicG9zaXRpb24iKTspZT1l
Lm9mZnNldFBhcmVudAotcmV0dXJuIGV8fFFlfSl9fSksZGUuZWFjaCh7c2Nyb2xsTGVmdDoicGFn
ZVhPZmZzZXQiLHNjcm9sbFRvcDoicGFnZVlPZmZzZXQifSxmdW5jdGlvbihlLHQpe3ZhciBuPSJw
YWdlWU9mZnNldCI9PT10Ci1kZS5mbltlXT1mdW5jdGlvbihyKXtyZXR1cm4gUGUodGhpcyxmdW5j
dGlvbihlLHIsaSl7dmFyIG8KLWlmKGRlLmlzV2luZG93KGUpP289ZTo5PT09ZS5ub2RlVHlwZSYm
KG89ZS5kZWZhdWx0Vmlldyksdm9pZCAwPT09aSlyZXR1cm4gbz9vW3RdOmVbcl0KLW8/by5zY3Jv
bGxUbyhuP28ucGFnZVhPZmZzZXQ6aSxuP2k6by5wYWdlWU9mZnNldCk6ZVtyXT1pfSxlLHIsYXJn
dW1lbnRzLmxlbmd0aCl9fSksZGUuZWFjaChbInRvcCIsImxlZnQiXSxmdW5jdGlvbihlLHQpe2Rl
LmNzc0hvb2tzW3RdPWooaGUucGl4ZWxQb3NpdGlvbixmdW5jdGlvbihlLG4pe2lmKG4pcmV0dXJu
IG49UChlLHQpLG90LnRlc3Qobik/ZGUoZSkucG9zaXRpb24oKVt0XSsicHgiOm59KX0pLGRlLmVh
Y2goe0hlaWdodDoiaGVpZ2h0IixXaWR0aDoid2lkdGgifSxmdW5jdGlvbihlLHQpe2RlLmVhY2go
e3BhZGRpbmc6ImlubmVyIitlLGNvbnRlbnQ6dCwiIjoib3V0ZXIiK2V9LGZ1bmN0aW9uKG4scil7
ZGUuZm5bcl09ZnVuY3Rpb24oaSxvKXt2YXIgcz1hcmd1bWVudHMubGVuZ3RoJiYobnx8ImJvb2xl
YW4iIT10eXBlb2YgaSksYT1ufHwoITA9PT1pfHwhMD09PW8/Im1hcmdpbiI6ImJvcmRlciIpCi1y
ZXR1cm4gUGUodGhpcyxmdW5jdGlvbih0LG4saSl7dmFyIG8KLXJldHVybiBkZS5pc1dpbmRvdyh0
KT8wPT09ci5pbmRleE9mKCJvdXRlciIpP3RbImlubmVyIitlXTp0LmRvY3VtZW50LmRvY3VtZW50
RWxlbWVudFsiY2xpZW50IitlXTo5PT09dC5ub2RlVHlwZT8obz10LmRvY3VtZW50RWxlbWVudCxN
YXRoLm1heCh0LmJvZHlbInNjcm9sbCIrZV0sb1sic2Nyb2xsIitlXSx0LmJvZHlbIm9mZnNldCIr
ZV0sb1sib2Zmc2V0IitlXSxvWyJjbGllbnQiK2VdKSk6dm9pZCAwPT09aT9kZS5jc3ModCxuLGEp
OmRlLnN0eWxlKHQsbixpLGEpfSx0LHM/aTp2b2lkIDAscyl9fSl9KSxkZS5mbi5leHRlbmQoe2Jp
bmQ6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0aGlzLm9uKGUsbnVsbCx0LG4pfSx1bmJpbmQ6ZnVu
Y3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5vZmYoZSxudWxsLHQpfSxkZWxlZ2F0ZTpmdW5jdGlvbihl
LHQsbixyKXtyZXR1cm4gdGhpcy5vbih0LGUsbixyKX0sdW5kZWxlZ2F0ZTpmdW5jdGlvbihlLHQs
bil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMub2ZmKGUsIioqIik6dGhpcy5vZmYo
dCxlfHwiKioiLG4pfX0pLGRlLmhvbGRSZWFkeT1mdW5jdGlvbihlKXtlP2RlLnJlYWR5V2FpdCsr
OmRlLnJlYWR5KCEwKX0sZGUuaXNBcnJheT1BcnJheS5pc0FycmF5LGRlLnBhcnNlSlNPTj1KU09O
LnBhcnNlLGRlLm5vZGVOYW1lPWksImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFt
ZCYmZGVmaW5lKCJqcXVlcnkiLFtdLGZ1bmN0aW9uKCl7cmV0dXJuIGRlfSkKLXZhciBXdD1lLmpR
dWVyeSwkdD1lLiQKLXJldHVybiBkZS5ub0NvbmZsaWN0PWZ1bmN0aW9uKHQpe3JldHVybiBlLiQ9
PT1kZSYmKGUuJD0kdCksdCYmZS5qUXVlcnk9PT1kZSYmKGUualF1ZXJ5PVd0KSxkZX0sdHx8KGUu
alF1ZXJ5PWUuJD1kZSksZGV9KSxmdW5jdGlvbigpe3ZhciBlLHQsbixyPXRoaXM7KGZ1bmN0aW9u
KCl7ZnVuY3Rpb24gcihlLHQpe3Rocm93IHQ/bmV3IEVycm9yKCJDb3VsZCBub3QgZmluZCBtb2R1
bGUgIitlKyIgcmVxdWlyZWQgYnk6ICIrdCk6bmV3IEVycm9yKCJDb3VsZCBub3QgZmluZCBtb2R1
bGUgIitlKX1mdW5jdGlvbiBpKGUsbil7dmFyIGE9ZSx1PW9bYV0KLXV8fChhKz0iL2luZGV4Iix1
PW9bYV0pCi12YXIgbD1zW2FdCi1pZih2b2lkIDAhPT1sKXJldHVybiBsCi1sPXNbYV09e30sdXx8
cihlLG4pCi1mb3IodmFyIGM9dS5kZXBzLHA9dS5jYWxsYmFjayxmPW5ldyBBcnJheShjLmxlbmd0
aCksaD0wO2g8Yy5sZW5ndGg7aCsrKSJleHBvcnRzIj09PWNbaF0/ZltoXT1sOiJyZXF1aXJlIj09
PWNbaF0/ZltoXT10OmZbaF09aShjW2hdLGEpCi1yZXR1cm4gcC5hcHBseSh0aGlzLGYpLGx9aWYo
InVuZGVmaW5lZCI9PXR5cGVvZiB3aW5kb3cmJiJ1bmRlZmluZWQiIT10eXBlb2YgcHJvY2VzcyYm
IltvYmplY3QgcHJvY2Vzc10iPT09e30udG9TdHJpbmcuY2FsbChwcm9jZXNzKXx8KG49dGhpcy5F
bWJlcj10aGlzLkVtYmVyfHx7fSksdm9pZCAwPT09biYmKG49e30pLHZvaWQgMD09PW4uX19sb2Fk
ZXIpe3ZhciBvPXt9LHM9e30KLWU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXt9Ci1uPyhyLmRlcHM9
dCxyLmNhbGxiYWNrPW4pOihyLmRlcHM9W10sci5jYWxsYmFjaz10KSxvW2VdPXJ9LHQ9ZnVuY3Rp
b24oZSl7cmV0dXJuIGkoZSxudWxsKX0sdC5kZWZhdWx0PXQsdC5oYXM9ZnVuY3Rpb24oZSl7cmV0
dXJuISFvW2VdfHwhIW9bZSsiL2luZGV4Il19LHQuX2Vha19zZWVuPW8sbi5fX2xvYWRlcj17ZGVm
aW5lOmUscmVxdWlyZTp0LHJlZ2lzdHJ5Om99fWVsc2UgZT1uLl9fbG9hZGVyLmRlZmluZSx0PW4u
X19sb2FkZXIucmVxdWlyZX0pKCksZSgiQGdsaW1tZXIvbm9kZSIsWyJleHBvcnRzIiwiZW1iZXIt
YmFiZWwiLCJAZ2xpbW1lci9ydW50aW1lIl0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Igot
ZS5Ob2RlRE9NVHJlZUNvbnN0cnVjdGlvbj12b2lkIDAKLXZhciByPWZ1bmN0aW9uKGUpe2Z1bmN0
aW9uIHIobil7cmV0dXJuKDAsdC5wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKSh0aGlzLGUuY2Fs
bCh0aGlzLG4pKX1yZXR1cm4oMCx0LmluaGVyaXRzKShyLGUpLHIucHJvdG90eXBlLnNldHVwVXNl
bGVzc0VsZW1lbnQ9ZnVuY3Rpb24oKXt9LHIucHJvdG90eXBlLmluc2VydEhUTUxCZWZvcmU9ZnVu
Y3Rpb24oZSx0LHIpe3ZhciBpPXI/ci5wcmV2aW91c1NpYmxpbmc6ZS5sYXN0Q2hpbGQsbz10aGlz
LmRvY3VtZW50LmNyZWF0ZVJhd0hUTUxTZWN0aW9uKHQpCi1lLmluc2VydEJlZm9yZShvLHIpCi12
YXIgcz1pP2kubmV4dFNpYmxpbmc6ZS5maXJzdENoaWxkLGE9cj9yLnByZXZpb3VzU2libGluZzpl
Lmxhc3RDaGlsZAotcmV0dXJuIG5ldyBuLkNvbmNyZXRlQm91bmRzKGUscyxhKX0sci5wcm90b3R5
cGUuY3JlYXRlRWxlbWVudD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5kb2N1bWVudC5jcmVhdGVF
bGVtZW50KGUpfSxyLnByb3RvdHlwZS5zZXRBdHRyaWJ1dGU9ZnVuY3Rpb24oZSx0LG4pe2Uuc2V0
QXR0cmlidXRlKHQsbil9LHJ9KG4uRE9NVHJlZUNvbnN0cnVjdGlvbikKLWUuTm9kZURPTVRyZWVD
b25zdHJ1Y3Rpb249cn0pLGUoIkBnbGltbWVyL3JlZmVyZW5jZSIsWyJleHBvcnRzIiwiZW1iZXIt
YmFiZWwiLCJAZ2xpbW1lci91dGlsIl0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IgotZnVu
Y3Rpb24gcihlKXtzd2l0Y2goZS5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gaAotY2FzZSAxOnJldHVy
biBlWzBdCi1jYXNlIDI6cmV0dXJuIG5ldyBjKGVbMF0sZVsxXSkKLWRlZmF1bHQ6cmV0dXJuIG5l
dyBwKGUpfX1lLmlzTW9kaWZpZWQ9ZS5SZWZlcmVuY2VDYWNoZT1lLm1hcD1lLkNhY2hlZFJlZmVy
ZW5jZT1lLkNVUlJFTlRfVEFHPWUuVk9MQVRJTEVfVEFHPWUuQ09OU1RBTlRfVEFHPWUuVXBkYXRh
YmxlVGFnPWUuQ2FjaGVkVGFnPWUuY29tYmluZT1lLmNvbWJpbmVTbGljZT1lLmNvbWJpbmVUYWdn
ZWQ9ZS5EaXJ0eWFibGVUYWc9ZS5SZXZpc2lvblRhZz1lLlZPTEFUSUxFPWUuSU5JVElBTD1lLkNP
TlNUQU5UPWUuSXRlcmF0b3JTeW5jaHJvbml6ZXI9ZS5SZWZlcmVuY2VJdGVyYXRvcj1lLkl0ZXJh
dGlvbkFydGlmYWN0cz1lLnJlZmVyZW5jZUZyb21QYXJ0cz1lLkxpc3RJdGVtPWUuaXNDb25zdD1l
LkNvbnN0UmVmZXJlbmNlPXZvaWQgMAotdmFyIGksbz0xLHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBl
KCl7fXJldHVybiBlLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy52
YWx1ZSgpPT09ZX0sZX0oKSxhPW8sdT1mdW5jdGlvbihlKXtmdW5jdGlvbiBuKCl7dmFyIG49YXJn
dW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOmEscj0o
MCx0LnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4pKHRoaXMsZS5jYWxsKHRoaXMpKQotcmV0dXJu
IHIucmV2aXNpb249bixyfXJldHVybigwLHQuaW5oZXJpdHMpKG4sZSksbi5wcm90b3R5cGUudmFs
dWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZXZpc2lvbn0sbi5wcm90b3R5cGUuZGlydHk9ZnVu
Y3Rpb24oKXt0aGlzLnJldmlzaW9uPSsrYX0sbn0ocyksbD1mdW5jdGlvbihlKXtmdW5jdGlvbiBu
KCl7dmFyIG49KDAsdC5wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKSh0aGlzLGUuYXBwbHkodGhp
cyxhcmd1bWVudHMpKQotcmV0dXJuIG4ubGFzdENoZWNrZWQ9bnVsbCxuLmxhc3RWYWx1ZT1udWxs
LG59cmV0dXJuKDAsdC5pbmhlcml0cykobixlKSxuLnByb3RvdHlwZS52YWx1ZT1mdW5jdGlvbigp
e3ZhciBlPXRoaXMubGFzdENoZWNrZWQKLXRoaXMubGFzdFZhbHVlCi1yZXR1cm4gZSE9PWEmJih0
aGlzLmxhc3RDaGVja2VkPWEsdGhpcy5sYXN0VmFsdWU9dGhpcy5jb21wdXRlKCkpLHRoaXMubGFz
dFZhbHVlfSxuLnByb3RvdHlwZS5pbnZhbGlkYXRlPWZ1bmN0aW9uKCl7dGhpcy5sYXN0Q2hlY2tl
ZD1udWxsfSxufShzKSxjPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4obixyKXt2YXIgaT0oMCx0LnBv
c3NpYmxlQ29uc3RydWN0b3JSZXR1cm4pKHRoaXMsZS5jYWxsKHRoaXMpKQotcmV0dXJuIGkuZmly
c3Q9bixpLnNlY29uZD1yLGl9cmV0dXJuKDAsdC5pbmhlcml0cykobixlKSxuLnByb3RvdHlwZS5j
b21wdXRlPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgubWF4KHRoaXMuZmlyc3QudmFsdWUoKSx0aGlz
LnNlY29uZC52YWx1ZSgpKX0sbn0obCkscD1mdW5jdGlvbihlKXtmdW5jdGlvbiBuKG4pe3ZhciBy
PSgwLHQucG9zc2libGVDb25zdHJ1Y3RvclJldHVybikodGhpcyxlLmNhbGwodGhpcykpCi1yZXR1
cm4gci50YWdzPW4scn1yZXR1cm4oMCx0LmluaGVyaXRzKShuLGUpLG4ucHJvdG90eXBlLmNvbXB1
dGU9ZnVuY3Rpb24oKXt2YXIgZSx0LG49dGhpcy50YWdzLHI9LTEKLWZvcihlPTA7ZTxuLmxlbmd0
aDtlKyspdD1uW2VdLnZhbHVlKCkscj1NYXRoLm1heCh0LHIpCi1yZXR1cm4gcn0sbn0obCksZj1m
dW5jdGlvbihlKXtmdW5jdGlvbiBuKG4pe3ZhciByPSgwLHQucG9zc2libGVDb25zdHJ1Y3RvclJl
dHVybikodGhpcyxlLmNhbGwodGhpcykpCi1yZXR1cm4gci50YWc9bixyLmxhc3RVcGRhdGVkPW8s
cn1yZXR1cm4oMCx0LmluaGVyaXRzKShuLGUpLG4ucHJvdG90eXBlLmNvbXB1dGU9ZnVuY3Rpb24o
KXtyZXR1cm4gTWF0aC5tYXgodGhpcy5sYXN0VXBkYXRlZCx0aGlzLnRhZy52YWx1ZSgpKX0sbi5w
cm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGUpe2UhPT10aGlzLnRhZyYmKHRoaXMudGFnPWUsdGhp
cy5sYXN0VXBkYXRlZD1hLHRoaXMuaW52YWxpZGF0ZSgpKX0sbn0obCksaD1uZXcoZnVuY3Rpb24o
ZSl7ZnVuY3Rpb24gbigpe3JldHVybigwLHQucG9zc2libGVDb25zdHJ1Y3RvclJldHVybikodGhp
cyxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9cmV0dXJuKDAsdC5pbmhlcml0cykobixlKSxuLnBy
b3RvdHlwZS52YWx1ZT1mdW5jdGlvbigpe3JldHVybiAwfSxufShzKSksZD1uZXcoZnVuY3Rpb24o
ZSl7ZnVuY3Rpb24gbigpe3JldHVybigwLHQucG9zc2libGVDb25zdHJ1Y3RvclJldHVybikodGhp
cyxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9cmV0dXJuKDAsdC5pbmhlcml0cykobixlKSxuLnBy
b3RvdHlwZS52YWx1ZT1mdW5jdGlvbigpe3JldHVybiBOYU59LG59KHMpKSxtPW5ldyhmdW5jdGlv
bihlKXtmdW5jdGlvbiBuKCl7cmV0dXJuKDAsdC5wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKSh0
aGlzLGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4oMCx0LmluaGVyaXRzKShuLGUpLG4u
cHJvdG90eXBlLnZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIGF9LG59KHUpKSxnPWZ1bmN0aW9uKCl7
ZnVuY3Rpb24gZSgpe3RoaXMubGFzdFJldmlzaW9uPW51bGwsdGhpcy5sYXN0VmFsdWU9bnVsbH1y
ZXR1cm4gZS5wcm90b3R5cGUudmFsdWU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnRhZyx0PXRoaXMu
bGFzdFJldmlzaW9uLG49dGhpcy5sYXN0VmFsdWUKLXJldHVybiB0JiZlLnZhbGlkYXRlKHQpfHwo
bj10aGlzLmxhc3RWYWx1ZT10aGlzLmNvbXB1dGUoKSx0aGlzLmxhc3RSZXZpc2lvbj1lLnZhbHVl
KCkpLG59LGUucHJvdG90eXBlLmludmFsaWRhdGU9ZnVuY3Rpb24oKXt0aGlzLmxhc3RSZXZpc2lv
bj1udWxsfSxlfSgpLHk9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbihuLHIpe3ZhciBpPSgwLHQucG9z
c2libGVDb25zdHJ1Y3RvclJldHVybikodGhpcyxlLmNhbGwodGhpcykpCi1yZXR1cm4gaS50YWc9
bi50YWcsaS5yZWZlcmVuY2U9bixpLm1hcHBlcj1yLGl9cmV0dXJuKDAsdC5pbmhlcml0cykobixl
KSxuLnByb3RvdHlwZS5jb21wdXRlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5yZWZlcmVuY2UKLXJl
dHVybigwLHRoaXMubWFwcGVyKShlLnZhbHVlKCkpfSxufShnKSx2PWZ1bmN0aW9uKCl7ZnVuY3Rp
b24gZShlKXt0aGlzLmxhc3RWYWx1ZT1udWxsLHRoaXMubGFzdFJldmlzaW9uPW51bGwsdGhpcy5p
bml0aWFsaXplZD0hMSx0aGlzLnRhZz1lLnRhZyx0aGlzLnJlZmVyZW5jZT1lfXJldHVybiBlLnBy
b3RvdHlwZS5wZWVrPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5pdGlhbGl6ZWQ/dGhpcy5sYXN0
VmFsdWU6dGhpcy5pbml0aWFsaXplKCl9LGUucHJvdG90eXBlLnJldmFsaWRhdGU9ZnVuY3Rpb24o
KXtpZighdGhpcy5pbml0aWFsaXplZClyZXR1cm4gdGhpcy5pbml0aWFsaXplKCkKLXZhciBlPXRo
aXMucmVmZXJlbmNlLHQ9dGhpcy5sYXN0UmV2aXNpb24sbj1lLnRhZwotaWYobi52YWxpZGF0ZSh0
KSlyZXR1cm4gYgotdGhpcy5sYXN0UmV2aXNpb249bi52YWx1ZSgpCi12YXIgcj10aGlzLmxhc3RW
YWx1ZSxpPWUudmFsdWUoKQotcmV0dXJuIGk9PT1yP2I6KHRoaXMubGFzdFZhbHVlPWksaSl9LGUu
cHJvdG90eXBlLmluaXRpYWxpemU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnJlZmVyZW5jZSx0PXRo
aXMubGFzdFZhbHVlPWUudmFsdWUoKQotcmV0dXJuIHRoaXMubGFzdFJldmlzaW9uPWUudGFnLnZh
bHVlKCksdGhpcy5pbml0aWFsaXplZD0hMCx0fSxlfSgpLGI9ImFkYjNiNzhlLTNkMjItNGU0Yi04
NzdhLTYzMTdjMmM1YzE0NSIsXz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5pbm5lcj1l
LHRoaXMudGFnPWh9cmV0dXJuIGUucHJvdG90eXBlLnZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRo
aXMuaW5uZXJ9LGV9KCksdz1mdW5jdGlvbihlKXtmdW5jdGlvbiBuKG4scil7dmFyIGk9KDAsdC5w
b3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKSh0aGlzLGUuY2FsbCh0aGlzLG4udmFsdWVSZWZlcmVu
Y2VGb3IocikpKQotcmV0dXJuIGkucmV0YWluZWQ9ITEsaS5zZWVuPSExLGkua2V5PXIua2V5LGku
aXRlcmFibGU9bixpLm1lbW89bi5tZW1vUmVmZXJlbmNlRm9yKHIpLGl9cmV0dXJuKDAsdC5pbmhl
cml0cykobixlKSxuLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oZSl7dGhpcy5yZXRhaW5lZD0h
MCx0aGlzLml0ZXJhYmxlLnVwZGF0ZVZhbHVlUmVmZXJlbmNlKHRoaXMudmFsdWUsZSksdGhpcy5p
dGVyYWJsZS51cGRhdGVNZW1vUmVmZXJlbmNlKHRoaXMubWVtbyxlKX0sbi5wcm90b3R5cGUuc2hv
dWxkUmVtb3ZlPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMucmV0YWluZWR9LG4ucHJvdG90eXBlLnJl
c2V0PWZ1bmN0aW9uKCl7dGhpcy5yZXRhaW5lZD0hMSx0aGlzLnNlZW49ITF9LG59KG4uTGlzdE5v
ZGUpLEU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMubWFwPSgwLG4uZGljdCkoKSx0aGlz
Lmxpc3Q9bmV3IG4uTGlua2VkTGlzdCx0aGlzLnRhZz1lLnRhZyx0aGlzLml0ZXJhYmxlPWV9cmV0
dXJuIGUucHJvdG90eXBlLmlzRW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5pdGVyYXRvcj10
aGlzLml0ZXJhYmxlLml0ZXJhdGUoKSkuaXNFbXB0eSgpfSxlLnByb3RvdHlwZS5pdGVyYXRlPWZ1
bmN0aW9uKCl7dmFyIGU9dGhpcy5pdGVyYXRvcnx8dGhpcy5pdGVyYWJsZS5pdGVyYXRlKCkKLXJl
dHVybiB0aGlzLml0ZXJhdG9yPW51bGwsZX0sZS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKGUpe3Jl
dHVybiEhdGhpcy5tYXBbZV19LGUucHJvdG90eXBlLmdldD1mdW5jdGlvbihlKXtyZXR1cm4gdGhp
cy5tYXBbZV19LGUucHJvdG90eXBlLndhc1NlZW49ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5tYXBb
ZV0KLXJldHVybiB0JiZ0LnNlZW59LGUucHJvdG90eXBlLmFwcGVuZD1mdW5jdGlvbihlKXt2YXIg
dD10aGlzLm1hcCxuPXRoaXMubGlzdCxyPXRoaXMuaXRlcmFibGUsaT10W2Uua2V5XT1uZXcgdyhy
LGUpCi1yZXR1cm4gbi5hcHBlbmQoaSksaX0sZS5wcm90b3R5cGUuaW5zZXJ0QmVmb3JlPWZ1bmN0
aW9uKGUsdCl7dmFyIG49dGhpcy5tYXAscj10aGlzLmxpc3QsaT10aGlzLml0ZXJhYmxlLG89bltl
LmtleV09bmV3IHcoaSxlKQotcmV0dXJuIG8ucmV0YWluZWQ9ITAsci5pbnNlcnRCZWZvcmUobyx0
KSxvfSxlLnByb3RvdHlwZS5tb3ZlPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5saXN0Ci1lLnJl
dGFpbmVkPSEwLG4ucmVtb3ZlKGUpLG4uaW5zZXJ0QmVmb3JlKGUsdCl9LGUucHJvdG90eXBlLnJl
bW92ZT1mdW5jdGlvbihlKXt0aGlzLmxpc3QucmVtb3ZlKGUpLGRlbGV0ZSB0aGlzLm1hcFtlLmtl
eV19LGUucHJvdG90eXBlLm5leHROb2RlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmxpc3QubmV4
dE5vZGUoZSl9LGUucHJvdG90eXBlLmhlYWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5saXN0Lmhl
YWQoKX0sZX0oKSx4PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLml0ZXJhdG9yPW51bGwK
LXZhciB0PW5ldyBFKGUpCi10aGlzLmFydGlmYWN0cz10fXJldHVybiBlLnByb3RvdHlwZS5uZXh0
PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5hcnRpZmFjdHMsdD10aGlzLml0ZXJhdG9yPXRoaXMuaXRl
cmF0b3J8fGUuaXRlcmF0ZSgpLG49dC5uZXh0KCkKLXJldHVybiBuP2UuYXBwZW5kKG4pOm51bGx9
LGV9KCk7KGZ1bmN0aW9uKGUpe2VbZS5BcHBlbmQ9MF09IkFwcGVuZCIsZVtlLlBydW5lPTFdPSJQ
cnVuZSIsZVtlLkRvbmU9Ml09IkRvbmUifSkoaXx8KGk9e30pKQotdmFyIEM9ZnVuY3Rpb24oKXtm
dW5jdGlvbiBlKGUpe3ZhciB0PWUudGFyZ2V0LG49ZS5hcnRpZmFjdHMKLXRoaXMudGFyZ2V0PXQs
dGhpcy5hcnRpZmFjdHM9bix0aGlzLml0ZXJhdG9yPW4uaXRlcmF0ZSgpLHRoaXMuY3VycmVudD1u
LmhlYWQoKX1yZXR1cm4gZS5wcm90b3R5cGUuc3luYz1mdW5jdGlvbigpe2Zvcih2YXIgZT1pLkFw
cGVuZDs7KXN3aXRjaChlKXtjYXNlIGkuQXBwZW5kOmU9dGhpcy5uZXh0QXBwZW5kKCkKLWJyZWFr
Ci1jYXNlIGkuUHJ1bmU6ZT10aGlzLm5leHRQcnVuZSgpCi1icmVhawotY2FzZSBpLkRvbmU6cmV0
dXJuIHZvaWQgdGhpcy5uZXh0RG9uZSgpfX0sZS5wcm90b3R5cGUuYWR2YW5jZVRvS2V5PWZ1bmN0
aW9uKGUpe2Zvcih2YXIgdD10aGlzLmN1cnJlbnQsbj10aGlzLmFydGlmYWN0cyxyPXQ7ciYmci5r
ZXkhPT1lOylyLnNlZW49ITAscj1uLm5leHROb2RlKHIpCi10aGlzLmN1cnJlbnQ9ciYmbi5uZXh0
Tm9kZShyKX0sZS5wcm90b3R5cGUubmV4dEFwcGVuZD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuaXRl
cmF0b3IsdD10aGlzLmN1cnJlbnQsbj10aGlzLmFydGlmYWN0cyxyPWUubmV4dCgpCi1pZihudWxs
PT09cilyZXR1cm4gdGhpcy5zdGFydFBydW5lKCkKLXZhciBvPXIua2V5Ci1yZXR1cm4gdCYmdC5r
ZXk9PT1vP3RoaXMubmV4dFJldGFpbihyKTpuLmhhcyhvKT90aGlzLm5leHRNb3ZlKHIpOnRoaXMu
bmV4dEluc2VydChyKSxpLkFwcGVuZH0sZS5wcm90b3R5cGUubmV4dFJldGFpbj1mdW5jdGlvbihl
KXt2YXIgdD10aGlzLmFydGlmYWN0cyxyPXRoaXMuY3VycmVudAotcj0oMCxuLmV4cGVjdCkociwi
QlVHOiBjdXJyZW50IGlzIGVtcHR5Iiksci51cGRhdGUoZSksdGhpcy5jdXJyZW50PXQubmV4dE5v
ZGUociksdGhpcy50YXJnZXQucmV0YWluKGUua2V5LHIudmFsdWUsci5tZW1vKX0sZS5wcm90b3R5
cGUubmV4dE1vdmU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5jdXJyZW50LG49dGhpcy5hcnRpZmFj
dHMscj10aGlzLnRhcmdldCxpPWUua2V5LG89bi5nZXQoZS5rZXkpCi1vLnVwZGF0ZShlKSxuLndh
c1NlZW4oZS5rZXkpPyhuLm1vdmUobyx0KSxyLm1vdmUoby5rZXksby52YWx1ZSxvLm1lbW8sdD90
LmtleTpudWxsKSk6dGhpcy5hZHZhbmNlVG9LZXkoaSl9LGUucHJvdG90eXBlLm5leHRJbnNlcnQ9
ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5hcnRpZmFjdHMsbj10aGlzLnRhcmdldCxyPXRoaXMuY3Vy
cmVudCxpPXQuaW5zZXJ0QmVmb3JlKGUscikKLW4uaW5zZXJ0KGkua2V5LGkudmFsdWUsaS5tZW1v
LHI/ci5rZXk6bnVsbCl9LGUucHJvdG90eXBlLnN0YXJ0UHJ1bmU9ZnVuY3Rpb24oKXtyZXR1cm4g
dGhpcy5jdXJyZW50PXRoaXMuYXJ0aWZhY3RzLmhlYWQoKSxpLlBydW5lfSxlLnByb3RvdHlwZS5u
ZXh0UHJ1bmU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmFydGlmYWN0cyx0PXRoaXMudGFyZ2V0LG49
dGhpcy5jdXJyZW50Ci1pZihudWxsPT09bilyZXR1cm4gaS5Eb25lCi12YXIgcj1uCi1yZXR1cm4g
dGhpcy5jdXJyZW50PWUubmV4dE5vZGUociksci5zaG91bGRSZW1vdmUoKT8oZS5yZW1vdmUociks
dC5kZWxldGUoci5rZXkpKTpyLnJlc2V0KCksaS5QcnVuZX0sZS5wcm90b3R5cGUubmV4dERvbmU9
ZnVuY3Rpb24oKXt0aGlzLnRhcmdldC5kb25lKCl9LGV9KCkKLWUuQ29uc3RSZWZlcmVuY2U9Xyxl
LmlzQ29uc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIGUudGFnPT09aH0sZS5MaXN0SXRlbT13LGUucmVm
ZXJlbmNlRnJvbVBhcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIG4scj1lCi1mb3Iobj0wO248dC5sZW5n
dGg7bisrKXI9ci5nZXQodFtuXSkKLXJldHVybiByfSxlLkl0ZXJhdGlvbkFydGlmYWN0cz1FLGUu
UmVmZXJlbmNlSXRlcmF0b3I9eCxlLkl0ZXJhdG9yU3luY2hyb25pemVyPUMsZS5DT05TVEFOVD0w
LGUuSU5JVElBTD1vLGUuVk9MQVRJTEU9TmFOLGUuUmV2aXNpb25UYWc9cyxlLkRpcnR5YWJsZVRh
Zz11LGUuY29tYmluZVRhZ2dlZD1mdW5jdGlvbihlKXt2YXIgdCxuLGksbz1bXQotZm9yKHQ9MCxu
PWUubGVuZ3RoO3Q8bjt0Kyspe2lmKChpPWVbdF0udGFnKT09PWQpcmV0dXJuIGQKLWkhPT1oJiZv
LnB1c2goaSl9cmV0dXJuIHIobyl9LGUuY29tYmluZVNsaWNlPWZ1bmN0aW9uKGUpe2Zvcih2YXIg
dCxuPVtdLGk9ZS5oZWFkKCk7bnVsbCE9PWk7KXtpZigodD1pLnRhZyk9PT1kKXJldHVybiBkCi10
IT09aCYmbi5wdXNoKHQpLGk9ZS5uZXh0Tm9kZShpKX1yZXR1cm4gcihuKX0sZS5jb21iaW5lPWZ1
bmN0aW9uKGUpe3ZhciB0LG4saSxvPVtdCi1mb3IodD0wLG49ZS5sZW5ndGg7dDxuO3QrKyl7aWYo
KGk9ZVt0XSk9PT1kKXJldHVybiBkCi1pIT09aCYmby5wdXNoKGkpfXJldHVybiByKG8pfSxlLkNh
Y2hlZFRhZz1sLGUuVXBkYXRhYmxlVGFnPWYsZS5DT05TVEFOVF9UQUc9aCxlLlZPTEFUSUxFX1RB
Rz1kLGUuQ1VSUkVOVF9UQUc9bSxlLkNhY2hlZFJlZmVyZW5jZT1nLGUubWFwPWZ1bmN0aW9uKGUs
dCl7cmV0dXJuIG5ldyB5KGUsdCl9LGUuUmVmZXJlbmNlQ2FjaGU9dixlLmlzTW9kaWZpZWQ9ZnVu
Y3Rpb24oZSl7cmV0dXJuIGUhPT1ifX0pLGUoIkBnbGltbWVyL3J1bnRpbWUiLFsiZXhwb3J0cyIs
ImVtYmVyLWJhYmVsIiwiQGdsaW1tZXIvdXRpbCIsIkBnbGltbWVyL3JlZmVyZW5jZSIsIkBnbGlt
bWVyL3dpcmUtZm9ybWF0Il0sZnVuY3Rpb24oZSx0LG4scixpKXsidXNlIHN0cmljdCIKLWZ1bmN0
aW9uIG8oZSx0KXtyZXR1cm4gbmV3IEplKGUsdCl9ZnVuY3Rpb24gcyhlLHQpe2Zvcih2YXIgbixy
PWUucGFyZW50RWxlbWVudCgpLGk9ZS5maXJzdE5vZGUoKSxvPWUubGFzdE5vZGUoKSxzPWk7czsp
e2lmKG49cy5uZXh0U2libGluZyxyLmluc2VydEJlZm9yZShzLHQpLHM9PT1vKXJldHVybiBuCi1z
PW59cmV0dXJuIG51bGx9ZnVuY3Rpb24gYShlKXtmb3IodmFyIHQsbj1lLnBhcmVudEVsZW1lbnQo
KSxyPWUuZmlyc3ROb2RlKCksaT1lLmxhc3ROb2RlKCksbz1yO287KXtpZih0PW8ubmV4dFNpYmxp
bmcsbi5yZW1vdmVDaGlsZChvKSxvPT09aSlyZXR1cm4gdAotbz10fXJldHVybiBudWxsfWZ1bmN0
aW9uIHUoZSl7cmV0dXJuISFlJiYiZnVuY3Rpb24iPT10eXBlb2YgZS50b0hUTUx9ZnVuY3Rpb24g
bChlKXtyZXR1cm4gbnVsbCE9PWUmJiJvYmplY3QiPT10eXBlb2YgZSYmIm51bWJlciI9PXR5cGVv
ZiBlLm5vZGVUeXBlfWZ1bmN0aW9uIGMoZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlfWZ1bmN0
aW9uIHAoZSx0LHIpe2lmKGMocikpcmV0dXJuIFplLmluc2VydChlLHQscikKLWlmKHUocikpcmV0
dXJuIHR0Lmluc2VydChlLHQscikKLWlmKGwocikpcmV0dXJuIG50Lmluc2VydChlLHQscikKLXRo
cm93KDAsbi51bnJlYWNoYWJsZSkoKX1mdW5jdGlvbiBmKGUsdCxyKXtpZihjKHIpKXJldHVybiBl
dC5pbnNlcnQoZSx0LHIpCi1pZihsKHIpKXJldHVybiBudC5pbnNlcnQoZSx0LHIpCi10aHJvdygw
LG4udW5yZWFjaGFibGUpKCl9ZnVuY3Rpb24gaChlKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGUm
JmUmJmVbcnRdfWZ1bmN0aW9uIGQoZSl7dmFyIHQsbixyPVtdCi1mb3IodD0wO3Q8ZS5sZW5ndGg7
dCsrKSExIT09KG49ZVt0XS52YWx1ZSgpKSYmbnVsbCE9PW4mJnZvaWQgMCE9PW4mJnIucHVzaChu
KQotcmV0dXJuIDA9PT1yLmxlbmd0aD9udWxsOnIuam9pbigiICIpfWZ1bmN0aW9uIG0oZSl7cmV0
dXJuIEpTT04uc3RyaW5naWZ5KCI8IitlLnRhZ05hbWUudG9Mb3dlckNhc2UoKSsiIC8+Iil9ZnVu
Y3Rpb24gZyhlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIGUuY29tcGlsZX1mdW5jdGlv
biB5KGUpe3ZhciB0PWVbMF0KLXJldHVybiB0PT09aS5PcHMuT3BlbkVsZW1lbnR8fHQ9PT1pLk9w
cy5PcGVuUHJpbWl0aXZlRWxlbWVudH1mdW5jdGlvbiB2KGUsdCl7cmV0dXJuIG5ldyBrdCh0LGUp
fWZ1bmN0aW9uIGIoZSl7cmV0dXJuIG5ldyBNdChlKX1mdW5jdGlvbiBfKGUsdCxuLHIpe3ZhciBp
PUUodCxuLHIpLG89aS5uYW1lZCxzPWkueWllbGRzLGE9aS5wYXJ0aWFsU3ltYm9sLHU9aS5zaXpl
Ci1yZXR1cm4gbmV3IE10KGUsbyxzLGEsdSl9ZnVuY3Rpb24gdyhlLHQpe3ZhciByLGk9bnVsbCxv
PWUucHJvZ3JhbQotcmV0dXJuIDAhPT10Lmxlbmd0aCYmKHI9aT0oMCxuLmRpY3QpKCksdC5mb3JF
YWNoKGZ1bmN0aW9uKGUpe3JldHVybiByW2VdPW8uc2l6ZSsrfSkpLG5ldyBGdChlLG8saSl9ZnVu
Y3Rpb24gRShlLHQscil7dmFyIGksbyxzPW51bGwsYT1udWxsLHU9MQotcmV0dXJuIDAhPT10Lmxl
bmd0aCYmKGk9cz0oMCxuLmRpY3QpKCksdC5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiBpW2Vd
PXUrK30pKSwwIT09ZS5sZW5ndGgmJihvPWE9KDAsbi5kaWN0KSgpLGUuZm9yRWFjaChmdW5jdGlv
bihlKXtyZXR1cm4gb1tlXT11Kyt9KSkse25hbWVkOmEseWllbGRzOnMscGFydGlhbFN5bWJvbDpy
P3UrKzpudWxsLHNpemU6dX19ZnVuY3Rpb24geChlLHQpe3ZhciBuPVV0LnNwZWNpYWxpemUoZSx0
LnN5bWJvbFRhYmxlKQotZG4uY29tcGlsZShuLHQpfWZ1bmN0aW9uIEMoZSx0LG4pe3ZhciByPWUu
c3RhdGVtZW50cwotcmV0dXJuIG5ldyBKdChuLHQscikuc2NhbigpfWZ1bmN0aW9uIE8oZSl7cmV0
dXJuImZ1bmN0aW9uIiE9dHlwZW9mIGUudG9TdHJpbmc/IiI6U3RyaW5nKGUpfWZ1bmN0aW9uIEEo
ZSx0KXtyZXR1cm4gY29uc29sZS5pbmZvKCJVc2UgYGNvbnRleHRgLCBhbmQgYGdldCg8cGF0aD4p
YCB0byBkZWJ1ZyB0aGlzIHRlbXBsYXRlLiIpLHtjb250ZXh0OmUsZ2V0OnR9fWZ1bmN0aW9uIFQo
ZSx0KXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIHI9bi5zcGxpdCgiLiIpCi1yZXR1cm4idGhpcyI9
PT1yWzBdJiYoclswXT1udWxsKSxEKHIsdCkuZXZhbHVhdGUoZSl9fWZ1bmN0aW9uIFMoZSx0KXty
ZXR1cm4gQXJyYXkuaXNBcnJheShlKT9tbi5jb21waWxlKGUsdCk6bmV3IHd0KGUpfWZ1bmN0aW9u
IFIoZSx0LG4pe3ZhciByPVAoZSxuKSxpPWoodCxuKQotcmV0dXJuIEhlLmNyZWF0ZShyLGkscWUp
fWZ1bmN0aW9uIGsoZSx0LG4scil7dmFyIGk9UChlLHIpLG89aih0LHIpCi1yZXR1cm4gSGUuY3Jl
YXRlKGksbyxuKX1mdW5jdGlvbiBOKGUsdCl7dmFyIG49ZVswXSxyPWVbMV0saT1lWzJdLG89ZVsz
XQotcmV0dXJuIEhlLmNyZWF0ZShQKG4sdCksaihyLHQpLHtkZWZhdWx0OmksaW52ZXJzZTpvfSl9
ZnVuY3Rpb24gUChlLHQpe2lmKCFlfHwwPT09ZS5sZW5ndGgpcmV0dXJuIExlCi12YXIgbixyPW5l
dyBBcnJheShlLmxlbmd0aCkKLWZvcihuPTA7bjxlLmxlbmd0aDtuKyspcltuXT1TKGVbbl0sdCkK
LXJldHVybiBEZS5jcmVhdGUocil9ZnVuY3Rpb24gaihlLHQpe2lmKCFlKXJldHVybiB6ZQotdmFy
IG4scj1lWzBdLGk9ZVsxXQotaWYoMD09PXIubGVuZ3RoKXJldHVybiB6ZQotdmFyIG89bmV3IEFy
cmF5KGkubGVuZ3RoKQotZm9yKG49MDtuPGkubGVuZ3RoO24rKylvW25dPVMoaVtuXSx0KQotcmV0
dXJuIG5ldyBGZShyLG8pfWZ1bmN0aW9uIEQoZSx0KXt2YXIgbixyLGksbyxzLGE9ZVswXSx1PXZv
aWQgMAotcmV0dXJuIG51bGw9PT1hPyhuPW5ldyBadCxyPWUuc2xpY2UoMSksWHQuY3JlYXRlKG4s
cikpOih1PXQuc3ltYm9sVGFibGUuZ2V0U3ltYm9sKCJsb2NhbCIsYSkpPyhpPWUuc2xpY2UoMSks
bz1uZXcgZW4odSxhKSxYdC5jcmVhdGUobyxpKSk6KHM9bmV3IFp0LFh0LmNyZWF0ZShzLGUpKX1m
dW5jdGlvbiBMKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNb
MF0/YXJndW1lbnRzWzBdOm5ldyBnbix0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJn
dW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpuZXcgdm4KLXJldHVybiBlLmFkZCgiaWYiLGZ1bmN0aW9u
KGUsdCl7dmFyIHI9ZVsyXSxpPWVbM10sbz1lWzRdLHM9ZVs1XSxhPVIocixpLHQpCi10LnB1dEFy
Z3MoYSksdC50ZXN0KCJlbnZpcm9ubWVudCIpLHQubGFiZWxsZWQobnVsbCxmdW5jdGlvbihlKXtp
ZihvJiZzKWUuanVtcFVubGVzcygiRUxTRSIpLGUuZXZhbHVhdGUobyksZS5qdW1wKCJFTkQiKSxl
LmxhYmVsKCJFTFNFIiksZS5ldmFsdWF0ZShzKQotZWxzZXtpZighbyl0aHJvdygwLG4udW5yZWFj
aGFibGUpKCkKLWUuanVtcFVubGVzcygiRU5EIiksZS5ldmFsdWF0ZShvKX19KX0pLGUuYWRkKCIt
aW4tZWxlbWVudCIsZnVuY3Rpb24oZSx0KXt2YXIgcj11bihlKSxpPVIobG4oZSksbnVsbCx0KQot
dC5wdXRBcmdzKGkpLHQudGVzdCgic2ltcGxlIiksdC5sYWJlbGxlZChudWxsLGZ1bmN0aW9uKGUp
e2UuanVtcFVubGVzcygiRU5EIiksZS5wdXNoUmVtb3RlRWxlbWVudCgpLGUuZXZhbHVhdGUoKDAs
bi51bndyYXApKHIpKSxlLnBvcFJlbW90ZUVsZW1lbnQoKX0pfSksZS5hZGQoIi13aXRoLWR5bmFt
aWMtdmFycyIsZnVuY3Rpb24oZSx0KXt2YXIgcj11bihlKSxpPVIobG4oZSksY24oZSksdCkKLXQu
dW5pdChmdW5jdGlvbihlKXtlLnB1dEFyZ3MoaSksZS5wdXNoRHluYW1pY1Njb3BlKCksZS5iaW5k
RHluYW1pY1Njb3BlKGkubmFtZWQua2V5cyksZS5ldmFsdWF0ZSgoMCxuLnVud3JhcCkocikpLGUu
cG9wRHluYW1pY1Njb3BlKCl9KX0pLGUuYWRkKCJ1bmxlc3MiLGZ1bmN0aW9uKGUsdCl7dmFyIHI9
ZVsyXSxpPWVbM10sbz1lWzRdLHM9ZVs1XSxhPVIocixpLHQpCi10LnB1dEFyZ3MoYSksdC50ZXN0
KCJlbnZpcm9ubWVudCIpLHQubGFiZWxsZWQobnVsbCxmdW5jdGlvbihlKXtpZihvJiZzKWUuanVt
cElmKCJFTFNFIiksZS5ldmFsdWF0ZShvKSxlLmp1bXAoIkVORCIpLGUubGFiZWwoIkVMU0UiKSxl
LmV2YWx1YXRlKHMpCi1lbHNle2lmKCFvKXRocm93KDAsbi51bnJlYWNoYWJsZSkoKQotZS5qdW1w
SWYoIkVORCIpLGUuZXZhbHVhdGUobyl9fSl9KSxlLmFkZCgid2l0aCIsZnVuY3Rpb24oZSx0KXt2
YXIgcj1lWzJdLGk9ZVszXSxvPWVbNF0scz1lWzVdLGE9UihyLGksdCkKLXQucHV0QXJncyhhKSx0
LnRlc3QoImVudmlyb25tZW50IiksdC5sYWJlbGxlZChudWxsLGZ1bmN0aW9uKGUpe2lmKG8mJnMp
ZS5qdW1wVW5sZXNzKCJFTFNFIiksZS5ldmFsdWF0ZShvKSxlLmp1bXAoIkVORCIpLGUubGFiZWwo
IkVMU0UiKSxlLmV2YWx1YXRlKHMpCi1lbHNle2lmKCFvKXRocm93KDAsbi51bnJlYWNoYWJsZSko
KQotZS5qdW1wVW5sZXNzKCJFTkQiKSxlLmV2YWx1YXRlKG8pfX0pfSksZS5hZGQoImVhY2giLGZ1
bmN0aW9uKGUsdCl7dmFyIHI9ZVsyXSxpPWVbM10sbz1lWzRdLHM9ZVs1XSxhPVIocixpLHQpCi10
LmxhYmVsbGVkKGEsZnVuY3Rpb24oZSl7ZS5wdXRJdGVyYXRvcigpLHM/ZS5qdW1wVW5sZXNzKCJF
TFNFIik6ZS5qdW1wVW5sZXNzKCJFTkQiKSxlLml0ZXIoZnVuY3Rpb24oZSl7ZS5ldmFsdWF0ZSgo
MCxuLnVud3JhcCkobykpfSkscyYmKGUuanVtcCgiRU5EIiksZS5sYWJlbCgiRUxTRSIpLGUuZXZh
bHVhdGUocykpfSl9KSx7YmxvY2tzOmUsaW5saW5lczp0fX1mdW5jdGlvbiBJKGUsdCl7cmV0dXJu
LTEhPT1lLmluZGV4T2YodCl9ZnVuY3Rpb24gTShlLHQpe3JldHVybihudWxsPT09ZXx8SShfbixl
KSkmJkkoRW4sdCl9ZnVuY3Rpb24gRihlLHQpe3JldHVybiBudWxsIT09ZSYmKEkod24sZSkmJkko
eG4sdCkpfWZ1bmN0aW9uIHooZSx0KXtyZXR1cm4gTShlLHQpfHxGKGUsdCl9ZnVuY3Rpb24gVShl
LHQsbixyKXt2YXIgaSxvPW51bGwKLWlmKG51bGw9PT1yfHx2b2lkIDA9PT1yKXJldHVybiByCi1p
Zih1KHIpKXJldHVybiByLnRvSFRNTCgpCi1vPXQ/dC50YWdOYW1lLnRvVXBwZXJDYXNlKCk6bnVs
bAotdmFyIHM9dWUocikKLXJldHVybiBNKG8sbikmJihpPWUucHJvdG9jb2xGb3JVUkwocyksSShi
bixpKSk/InVuc2FmZToiK3M6RihvLG4pPyJ1bnNhZmU6IitzOnN9ZnVuY3Rpb24gQihlLHQpe3Zh
ciBuLHI9dm9pZCAwLGk9dm9pZCAwCi1yZXR1cm4gdCBpbiBlPyhpPXQscj0icHJvcCIpOihuPXQu
dG9Mb3dlckNhc2UoKSxuIGluIGU/KHI9InByb3AiLGk9bik6KHI9ImF0dHIiLGk9dCkpLCJwcm9w
IiE9PXJ8fCJzdHlsZSIhPT1pLnRvTG93ZXJDYXNlKCkmJiFxKGUudGFnTmFtZSxpKXx8KHI9ImF0
dHIiKSx7bm9ybWFsaXplZDppLHR5cGU6cn19ZnVuY3Rpb24gcShlLHQpe3ZhciBuPUNuW2UudG9V
cHBlckNhc2UoKV0KLXJldHVybiBuJiZuW3QudG9Mb3dlckNhc2UoKV18fCExfWZ1bmN0aW9uIEgo
ZSxuKXtpZighZSlyZXR1cm4gbgotaWYoIVcoZSkpcmV0dXJuIG4KLXZhciByPWUuY3JlYXRlRWxl
bWVudCgiZGl2IikKLXJldHVybiBmdW5jdGlvbihlKXtmdW5jdGlvbiBuKCl7cmV0dXJuKDAsdC5w
b3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKSh0aGlzLGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1y
ZXR1cm4oMCx0LmluaGVyaXRzKShuLGUpLG4ucHJvdG90eXBlLmluc2VydEhUTUxCZWZvcmU9ZnVu
Y3Rpb24odCxuLGkpe2lmKG51bGw9PT1ufHwiIj09PW4pcmV0dXJuIGUucHJvdG90eXBlLmluc2Vy
dEhUTUxCZWZvcmUuY2FsbCh0aGlzLHQsbixpKQotdmFyIG89dC50YWdOYW1lLnRvTG93ZXJDYXNl
KCkscz1PbltvXQotcmV0dXJuIHZvaWQgMD09PXM/ZS5wcm90b3R5cGUuaW5zZXJ0SFRNTEJlZm9y
ZS5jYWxsKHRoaXMsdCxuLGkpOlYodCxzLHIsbixpKX0sbn0obil9ZnVuY3Rpb24gVihlLHQsbixy
LGkpe3ZhciBvLHM9dC5iZWZvcmUrcit0LmFmdGVyCi1uLmlubmVySFRNTD1zCi12YXIgYT1uCi1m
b3Iobz0wO288dC5kZXB0aDtvKyspYT1hLmNoaWxkTm9kZXNbMF0KLXZhciB1PUooYSxlLGkpLGw9
dVswXSxjPXVbMV0KLXJldHVybiBuZXcgWWUoZSxsLGMpfWZ1bmN0aW9uIFcoZSl7dmFyIHQ9ZS5j
cmVhdGVFbGVtZW50KCJ0YWJsZSIpCi10cnl7dC5pbm5lckhUTUw9Ijx0Ym9keT48L3Rib2R5PiJ9
Y2F0Y2goZSl7fWZpbmFsbHl7aWYoMCE9PXQuY2hpbGROb2Rlcy5sZW5ndGgpcmV0dXJuITF9cmV0
dXJuITB9ZnVuY3Rpb24gJChlLG4scil7aWYoIWUpcmV0dXJuIG4KLWlmKCFLKGUscikpcmV0dXJu
IG4KLXZhciBpPWUuY3JlYXRlRWxlbWVudCgiZGl2IikKLXJldHVybiBmdW5jdGlvbihlKXtmdW5j
dGlvbiBuKCl7cmV0dXJuKDAsdC5wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKSh0aGlzLGUuYXBw
bHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4oMCx0LmluaGVyaXRzKShuLGUpLG4ucHJvdG90eXBl
Lmluc2VydEhUTUxCZWZvcmU9ZnVuY3Rpb24odCxuLG8pe3JldHVybiBudWxsPT09bnx8IiI9PT1u
P2UucHJvdG90eXBlLmluc2VydEhUTUxCZWZvcmUuY2FsbCh0aGlzLHQsbixvKTp0Lm5hbWVzcGFj
ZVVSSSE9PXI/ZS5wcm90b3R5cGUuaW5zZXJ0SFRNTEJlZm9yZS5jYWxsKHRoaXMsdCxuLG8pOkco
dCxpLG4sbyl9LG59KG4pfWZ1bmN0aW9uIEcoZSx0LG4scil7dC5pbm5lckhUTUw9Ijxzdmc+Iitu
KyI8L3N2Zz4iCi12YXIgaT1KKHQuZmlyc3RDaGlsZCxlLHIpLG89aVswXSxzPWlbMV0KLXJldHVy
biBuZXcgWWUoZSxvLHMpfWZ1bmN0aW9uIEsoZSx0KXt2YXIgcj1lLmNyZWF0ZUVsZW1lbnROUyh0
LCJzdmciKQotdHJ5e3IuaW5zZXJ0QWRqYWNlbnRIVE1MKCJiZWZvcmVFbmQiLCI8Y2lyY2xlPjwv
Y2lyY2xlPiIpfWNhdGNoKGUpe31maW5hbGx5e3JldHVybiAxIT09ci5jaGlsZE5vZGVzLmxlbmd0
aHx8Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiE9PSgwLG4udW53cmFwKShyLmZpcnN0Q2hp
bGQpLm5hbWVzcGFjZVVSSX19ZnVuY3Rpb24gUShlLG4pe3JldHVybiBlJiZZKGUpP2Z1bmN0aW9u
KGUpe2Z1bmN0aW9uIG4obil7dmFyIHI9KDAsdC5wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKSh0
aGlzLGUuY2FsbCh0aGlzLG4pKQotcmV0dXJuIHIudXNlbGVzc0NvbW1lbnQ9ci5jcmVhdGVDb21t
ZW50KCIiKSxyfXJldHVybigwLHQuaW5oZXJpdHMpKG4sZSksbi5wcm90b3R5cGUuaW5zZXJ0SFRN
TEJlZm9yZT1mdW5jdGlvbih0LG4scil7aWYobnVsbD09PW4pcmV0dXJuIGUucHJvdG90eXBlLmlu
c2VydEhUTUxCZWZvcmUuY2FsbCh0aGlzLHQsbixyKQotdmFyIGk9ITEsbz1yP3IucHJldmlvdXNT
aWJsaW5nOnQubGFzdENoaWxkCi1vJiZvIGluc3RhbmNlb2YgVGV4dCYmKGk9ITAsdC5pbnNlcnRC
ZWZvcmUodGhpcy51c2VsZXNzQ29tbWVudCxyKSkKLXZhciBzPWUucHJvdG90eXBlLmluc2VydEhU
TUxCZWZvcmUuY2FsbCh0aGlzLHQsbixyKQotcmV0dXJuIGkmJnQucmVtb3ZlQ2hpbGQodGhpcy51
c2VsZXNzQ29tbWVudCksc30sbn0obik6bn1mdW5jdGlvbiBZKGUpe3ZhciB0PWUuY3JlYXRlRWxl
bWVudCgiZGl2IikKLXJldHVybiB0LmlubmVySFRNTD0iZmlyc3QiLHQuaW5zZXJ0QWRqYWNlbnRI
VE1MKCJiZWZvcmVFbmQiLCJzZWNvbmQiKSwyIT09dC5jaGlsZE5vZGVzLmxlbmd0aH1mdW5jdGlv
biBKKGUsdCxuKXtmb3IodmFyIHI9ZS5maXJzdENoaWxkLGk9bnVsbCxvPXI7bzspaT1vLG89by5u
ZXh0U2libGluZyx0Lmluc2VydEJlZm9yZShpLG4pCi1yZXR1cm5bcixpXX1mdW5jdGlvbiBYKGUs
dCxuLHIpe3ZhciBpPXQsbz1lLHM9bixhPXM/cy5wcmV2aW91c1NpYmxpbmc6aS5sYXN0Q2hpbGQs
dT12b2lkIDAKLWlmKG51bGw9PT1yfHwiIj09PXIpcmV0dXJuIG5ldyBZZShpLG51bGwsbnVsbCkK
LW51bGw9PT1zPyhpLmluc2VydEFkamFjZW50SFRNTCgiYmVmb3JlRW5kIixyKSx1PWkubGFzdENo
aWxkKTpzIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQ/KHMuaW5zZXJ0QWRqYWNlbnRIVE1MKCJiZWZv
cmVCZWdpbiIsciksdT1zLnByZXZpb3VzU2libGluZyk6KGkuaW5zZXJ0QmVmb3JlKG8scyksby5p
bnNlcnRBZGphY2VudEhUTUwoImJlZm9yZUJlZ2luIixyKSx1PW8ucHJldmlvdXNTaWJsaW5nLGku
cmVtb3ZlQ2hpbGQobykpCi12YXIgbD1hP2EubmV4dFNpYmxpbmc6aS5maXJzdENoaWxkCi1yZXR1
cm4gbmV3IFllKGksbCx1KX1mdW5jdGlvbiBaKGUpe3JldHVybiBlLm5vZGVUeXBlPT09Tm9kZS5E
T0NVTUVOVF9GUkFHTUVOVF9OT0RFfWZ1bmN0aW9uIGVlKGUsdCl7dmFyIG49ZS50YWdOYW1lCi1p
ZihlLm5hbWVzcGFjZVVSST09PUFuKXJldHVybiBuZShuLHQpCi12YXIgcj1CKGUsdCksaT1yLnR5
cGUsbz1yLm5vcm1hbGl6ZWQKLXJldHVybiJhdHRyIj09PWk/bmUobixvKTp0ZShuLG8pfWZ1bmN0
aW9uIHRlKGUsdCl7cmV0dXJuIHooZSx0KT9uZXcgRm4odCk6b2UoZSx0KT9VbjpzZShlLHQpP3Fu
Om5ldyBNbih0KX1mdW5jdGlvbiBuZShlLHQpe3JldHVybiB6KGUsdCk/bmV3IEhuKHQpOm5ldyBJ
bih0KX1mdW5jdGlvbiByZShlKXtyZXR1cm4hMT09PWV8fHZvaWQgMD09PWV8fG51bGw9PT1lP251
bGw6ITA9PT1lPyIiOiJmdW5jdGlvbiI9PXR5cGVvZiBlP251bGw6U3RyaW5nKGUpfWZ1bmN0aW9u
IGllKGUpe3JldHVybiBudWxsPT09ZXx8dm9pZCAwPT09ZX1mdW5jdGlvbiBvZShlLHQpe3JldHVy
bigiSU5QVVQiPT09ZXx8IlRFWFRBUkVBIj09PWUpJiYidmFsdWUiPT09dH1mdW5jdGlvbiBzZShl
LHQpe3JldHVybiJPUFRJT04iPT09ZSYmInNlbGVjdGVkIj09PXR9ZnVuY3Rpb24gYWUoZSl7cmV0
dXJuIG51bGw9PT1lfHx2b2lkIDA9PT1lfHwiZnVuY3Rpb24iIT10eXBlb2YgZS50b1N0cmluZ31m
dW5jdGlvbiB1ZShlKXtyZXR1cm4gYWUoZSk/IiI6U3RyaW5nKGUpfWZ1bmN0aW9uIGxlKGUpe3Jl
dHVybiBhZShlKT8iIjpjKGUpP2U6dShlKT9lLnRvSFRNTCgpOmwoZSk/ZTpTdHJpbmcoZSl9ZnVu
Y3Rpb24gY2UoZSl7cmV0dXJuIGFlKGUpPyIiOmMoZSk/ZTp1KGUpfHxsKGUpP2U6U3RyaW5nKGUp
fWZ1bmN0aW9uIHBlKGUsdCxuLHIpe3ZhciBpPW5ldyBRdChlLG4sciksbz12b2lkIDAscz1mdW5j
dGlvbigpe3JldHVybiBvfHwobz1pLnNjYW5FbnRyeVBvaW50KCkpLG99LGE9dm9pZCAwCi1yZXR1
cm57aWQ6dCxtZXRhOm4sX2Jsb2NrOmUsYXNFbnRyeVBvaW50OnMsYXNMYXlvdXQ6ZnVuY3Rpb24o
KXtyZXR1cm4gYXx8KGE9aS5zY2FuTGF5b3V0KCkpLGF9LGFzUGFydGlhbDpmdW5jdGlvbihlKXty
ZXR1cm4gaS5zY2FuUGFydGlhbChlKX0scmVuZGVyOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1ndC5m
b3JJbml0aWFsUmVuZGVyKHIsdCxudWxsKSxvPXMoKS5jb21waWxlKHIpLGE9Wm4uaW5pdGlhbChy
LGUsbixpLG8pCi1yZXR1cm4gbmV3IHhyKGEpfX19ZS5Db25jcmV0ZUJvdW5kcz1lLkVsZW1lbnRT
dGFjaz1lLmluc2VydEhUTUxCZWZvcmU9ZS5pc1doaXRlc3BhY2U9ZS5ET01UcmVlQ29uc3RydWN0
aW9uPWUuSURPTUNoYW5nZXM9ZS5ET01DaGFuZ2VzPWUuaXNDb21wb25lbnREZWZpbml0aW9uPWUu
Q29tcG9uZW50RGVmaW5pdGlvbj1lLlBhcnRpYWxEZWZpbml0aW9uPWUuRW52aXJvbm1lbnQ9ZS5T
Y29wZT1lLmlzU2FmZVN0cmluZz1lLlJlbmRlclJlc3VsdD1lLlVwZGF0aW5nVk09ZS5MYXlvdXQ9
ZS5CYXNlbGluZVN5bnRheD1lLnJlc2V0RGVidWdnZXJDYWxsYmFjaz1lLnNldERlYnVnZ2VyQ2Fs
bGJhY2s9ZS5jb21waWxlQXJncz1lLklubGluZU1hY3Jvcz1lLkJsb2NrTWFjcm9zPWUuZ2V0RHlu
YW1pY1Zhcj1lLkV2YWx1YXRlZFBvc2l0aW9uYWxBcmdzPWUuRXZhbHVhdGVkTmFtZWRBcmdzPWUu
RXZhbHVhdGVkQXJncz1lLkNvbXBpbGVkUG9zaXRpb25hbEFyZ3M9ZS5Db21waWxlZE5hbWVkQXJn
cz1lLkNvbXBpbGVkQXJncz1lLkNvbXBpbGVkRXhwcmVzc2lvbj1lLm5vcm1hbGl6ZVRleHRWYWx1
ZT1lLnJlYWRET01BdHRyPWUuZGVmYXVsdFByb3BlcnR5TWFuYWdlcnM9ZS5kZWZhdWx0QXR0cmli
dXRlTWFuYWdlcnM9ZS5kZWZhdWx0TWFuYWdlcnM9ZS5JTlBVVF9WQUxVRV9QUk9QRVJUWV9NQU5B
R0VSPWUuUHJvcGVydHlNYW5hZ2VyPWUuQXR0cmlidXRlTWFuYWdlcj1lLklBdHRyaWJ1dGVNYW5h
Z2VyPWUuQ29tcGlsZWRQcm9ncmFtPWUuQ29tcGlsZWRCbG9jaz1lLmNvbXBpbGVMYXlvdXQ9ZS5P
cGNvZGVCdWlsZGVyRFNMPWUuQ29uZGl0aW9uYWxSZWZlcmVuY2U9ZS5QcmltaXRpdmVSZWZlcmVu
Y2U9ZS5VTkRFRklORURfUkVGRVJFTkNFPWUuTlVMTF9SRUZFUkVOQ0U9ZS50ZW1wbGF0ZUZhY3Rv
cnk9ZS5TaW1wbGU9dm9pZCAwCi12YXIgZmU9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbihuKXtyZXR1
cm4oMCx0LnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4pKHRoaXMsZS5jYWxsKHRoaXMsbikpfXJl
dHVybigwLHQuaW5oZXJpdHMpKG4sZSksbi5jcmVhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQg
MD09PWU/bWU6bnVsbD09PWU/Z2U6ITA9PT1lP3llOiExPT09ZT92ZToibnVtYmVyIj09dHlwZW9m
IGU/bmV3IGRlKGUpOm5ldyBoZShlKX0sbi5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJu
IG1lfSxufShyLkNvbnN0UmVmZXJlbmNlKSxoZT1mdW5jdGlvbihlKXtmdW5jdGlvbiBuKCl7dmFy
IG49KDAsdC5wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKSh0aGlzLGUuYXBwbHkodGhpcyxhcmd1
bWVudHMpKQotcmV0dXJuIG4ubGVuZ3RoUmVmZXJlbmNlPW51bGwsbn1yZXR1cm4oMCx0LmluaGVy
aXRzKShuLGUpLG4ucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXt2YXIgbgotcmV0dXJuImxlbmd0
aCI9PT10PyhuPXRoaXMubGVuZ3RoUmVmZXJlbmNlLG51bGw9PT1uJiYobj10aGlzLmxlbmd0aFJl
ZmVyZW5jZT1uZXcgZGUodGhpcy5pbm5lci5sZW5ndGgpKSxuKTplLnByb3RvdHlwZS5nZXQuY2Fs
bCh0aGlzLHQpfSxufShmZSksZGU9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbihuKXtyZXR1cm4oMCx0
LnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4pKHRoaXMsZS5jYWxsKHRoaXMsbikpfXJldHVybigw
LHQuaW5oZXJpdHMpKG4sZSksbn0oZmUpLG1lPW5ldyBkZSh2b2lkIDApLGdlPW5ldyBkZShudWxs
KSx5ZT1uZXcgZGUoITApLHZlPW5ldyBkZSghMSksYmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUp
e3RoaXMuaW5uZXI9ZSx0aGlzLnRhZz1lLnRhZ31yZXR1cm4gZS5wcm90b3R5cGUudmFsdWU9ZnVu
Y3Rpb24oKXtyZXR1cm4gdGhpcy50b0Jvb2wodGhpcy5pbm5lci52YWx1ZSgpKX0sZS5wcm90b3R5
cGUudG9Cb29sPWZ1bmN0aW9uKGUpe3JldHVybiEhZX0sZX0oKSxfZT1mdW5jdGlvbigpe2Z1bmN0
aW9uIGUoKXt0aGlzLnJlZmVyZW5jZXM9W10sdGhpcy5zdHJpbmdzPVtdLHRoaXMuZXhwcmVzc2lv
bnM9W10sdGhpcy5hcnJheXM9W10sdGhpcy5ibG9ja3M9W10sdGhpcy5mdW5jdGlvbnM9W10sdGhp
cy5vdGhlcnM9W10sdGhpcy5OVUxMX1JFRkVSRU5DRT10aGlzLnJlZmVyZW5jZShnZSksdGhpcy5V
TkRFRklORURfUkVGRVJFTkNFPXRoaXMucmVmZXJlbmNlKG1lKX1yZXR1cm4gZS5wcm90b3R5cGUu
Z2V0UmVmZXJlbmNlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnJlZmVyZW5jZXNbZS0xXX0sZS5w
cm90b3R5cGUucmVmZXJlbmNlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucmVmZXJlbmNlcy5sZW5n
dGgKLXJldHVybiB0aGlzLnJlZmVyZW5jZXMucHVzaChlKSx0KzF9LGUucHJvdG90eXBlLmdldFN0
cmluZz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5zdHJpbmdzW2UtMV19LGUucHJvdG90eXBlLnN0
cmluZz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLnN0cmluZ3MubGVuZ3RoCi1yZXR1cm4gdGhpcy5z
dHJpbmdzLnB1c2goZSksdCsxfSxlLnByb3RvdHlwZS5nZXRFeHByZXNzaW9uPWZ1bmN0aW9uKGUp
e3JldHVybiB0aGlzLmV4cHJlc3Npb25zW2UtMV19LGUucHJvdG90eXBlLmV4cHJlc3Npb249ZnVu
Y3Rpb24oZSl7dmFyIHQ9dGhpcy5leHByZXNzaW9ucy5sZW5ndGgKLXJldHVybiB0aGlzLmV4cHJl
c3Npb25zLnB1c2goZSksdCsxfSxlLnByb3RvdHlwZS5nZXRBcnJheT1mdW5jdGlvbihlKXtyZXR1
cm4gdGhpcy5hcnJheXNbZS0xXX0sZS5wcm90b3R5cGUuYXJyYXk9ZnVuY3Rpb24oZSl7dmFyIHQ9
dGhpcy5hcnJheXMubGVuZ3RoCi1yZXR1cm4gdGhpcy5hcnJheXMucHVzaChlKSx0KzF9LGUucHJv
dG90eXBlLmdldEJsb2NrPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmJsb2Nrc1tlLTFdfSxlLnBy
b3RvdHlwZS5ibG9jaz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmJsb2Nrcy5sZW5ndGgKLXJldHVy
biB0aGlzLmJsb2Nrcy5wdXNoKGUpLHQrMX0sZS5wcm90b3R5cGUuZ2V0RnVuY3Rpb249ZnVuY3Rp
b24oZSl7cmV0dXJuIHRoaXMuZnVuY3Rpb25zW2UtMV19LGUucHJvdG90eXBlLmZ1bmN0aW9uPWZ1
bmN0aW9uKGUpe3ZhciB0PXRoaXMuZnVuY3Rpb25zLmxlbmd0aAotcmV0dXJuIHRoaXMuZnVuY3Rp
b25zLnB1c2goZSksdCsxfSxlLnByb3RvdHlwZS5nZXRPdGhlcj1mdW5jdGlvbihlKXtyZXR1cm4g
dGhpcy5vdGhlcnNbZS0xXX0sZS5wcm90b3R5cGUub3RoZXI9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhp
cy5vdGhlcnMubGVuZ3RoCi1yZXR1cm4gdGhpcy5vdGhlcnMucHVzaChlKSx0KzF9LGV9KCksd2U9
ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5ldmFsdWF0ZU9wY29kZT0oMCxuLmZpbGxOdWxs
cykoNTIpfXJldHVybiBlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSx0KXt0aGlzLmV2YWx1YXRl
T3Bjb2RlW2VdPXR9LGUucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKGUsdCl7KDAsdGhpcy5l
dmFsdWF0ZU9wY29kZVt0LnR5cGVdKShlLHQpfSxlfSgpLEVlPW5ldyB3ZSx4ZT1mdW5jdGlvbigp
e2Z1bmN0aW9uIGUoKXsoMCxuLmluaXRpYWxpemVHdWlkKSh0aGlzKX1yZXR1cm4gZS5wcm90b3R5
cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJue2d1aWQ6dGhpcy5fZ3VpZCx0eXBlOnRoaXMudHlw
ZX19LGV9KCksQ2U9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbigpe3ZhciBuPSgwLHQucG9zc2libGVD
b25zdHJ1Y3RvclJldHVybikodGhpcyxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkKLXJldHVybiBu
Lm5leHQ9bnVsbCxuLnByZXY9bnVsbCxufXJldHVybigwLHQuaW5oZXJpdHMpKG4sZSksbn0oeGUp
Ci1FZS5hZGQoMjAsZnVuY3Rpb24oZSx0KXt2YXIgbj10Lm9wMSxyPXQub3AyLGk9ZS5jb25zdGFu
dHMuZ2V0T3RoZXIobiksbz1lLmNvbnN0YW50cy5nZXRFeHByZXNzaW9uKHIpLHM9bnVsbCxhPWku
ZXZhbHVhdGUoZSkKLWEmJihzPW8uZXZhbHVhdGUoZSkpLGUucHVzaENhbGxlclNjb3BlKCksYSYm
ZS5pbnZva2VCbG9jayhhLHN8fG51bGwpfSksRWUuYWRkKDIxLGZ1bmN0aW9uKGUpe3JldHVybiBl
LnBvcFNjb3BlKCl9KSxFZS5hZGQoMCxmdW5jdGlvbihlKXtyZXR1cm4gZS5wdXNoQ2hpbGRTY29w
ZSgpfSksRWUuYWRkKDEsZnVuY3Rpb24oZSl7cmV0dXJuIGUucG9wU2NvcGUoKX0pLEVlLmFkZCgy
LGZ1bmN0aW9uKGUpe3JldHVybiBlLnB1c2hEeW5hbWljU2NvcGUoKX0pLEVlLmFkZCgzLGZ1bmN0
aW9uKGUpe3JldHVybiBlLnBvcER5bmFtaWNTY29wZSgpfSksRWUuYWRkKDQsZnVuY3Rpb24oZSx0
KXt2YXIgbj10Lm9wMQotZS5mcmFtZS5zZXRPcGVyYW5kKGUuY29uc3RhbnRzLmdldFJlZmVyZW5j
ZShuKSl9KSxFZS5hZGQoNSxmdW5jdGlvbihlLHQpe3ZhciBuPXQub3AxLHI9ZS5jb25zdGFudHMu
Z2V0RXhwcmVzc2lvbihuKQotZS5ldmFsdWF0ZU9wZXJhbmQocil9KSxFZS5hZGQoNixmdW5jdGlv
bihlLHQpe3ZhciBuPXQub3AxCi1lLmV2YWx1YXRlQXJncyhlLmNvbnN0YW50cy5nZXRFeHByZXNz
aW9uKG4pKX0pLEVlLmFkZCg3LGZ1bmN0aW9uKGUsdCl7dmFyIG49dC5vcDEscj1lLmNvbnN0YW50
cy5nZXRBcnJheShuKQotZS5iaW5kUG9zaXRpb25hbEFyZ3Mocil9KSxFZS5hZGQoOCxmdW5jdGlv
bihlLHQpe3ZhciBuPXQub3AxLHI9dC5vcDIsaT1lLmNvbnN0YW50cy5nZXRBcnJheShuKSxvPWUu
Y29uc3RhbnRzLmdldEFycmF5KHIpCi1lLmJpbmROYW1lZEFyZ3MoaSxvKX0pLEVlLmFkZCg5LGZ1
bmN0aW9uKGUsdCl7dmFyIG49dC5vcDEscj10Lm9wMixpPWUuY29uc3RhbnRzLmdldEFycmF5KG4p
LG89ZS5jb25zdGFudHMuZ2V0QXJyYXkocikKLWUuYmluZEJsb2NrcyhpLG8pfSksRWUuYWRkKDEw
LGZ1bmN0aW9uKGUsdCl7dmFyIG49dC5vcDEKLWUuYmluZFBhcnRpYWxBcmdzKG4pfSksRWUuYWRk
KDExLGZ1bmN0aW9uKGUpe3JldHVybiBlLmJpbmRDYWxsZXJTY29wZSgpfSksRWUuYWRkKDEyLGZ1
bmN0aW9uKGUsdCl7dmFyIG49dC5vcDEscj1lLmNvbnN0YW50cy5nZXRBcnJheShuKQotZS5iaW5k
RHluYW1pY1Njb3BlKHIpfSksRWUuYWRkKDEzLGZ1bmN0aW9uKGUsdCl7dmFyIG49dC5vcDEscj10
Lm9wMgotcmV0dXJuIGUuZW50ZXIobixyKX0pLEVlLmFkZCgxNCxmdW5jdGlvbihlKXtyZXR1cm4g
ZS5leGl0KCl9KSxFZS5hZGQoMTUsZnVuY3Rpb24oZSx0KXt2YXIgbj10Lm9wMSxyPWUuY29uc3Rh
bnRzLmdldEJsb2NrKG4pLGk9ZS5mcmFtZS5nZXRBcmdzKCkKLWUuaW52b2tlQmxvY2socixpKX0p
LEVlLmFkZCgxNixmdW5jdGlvbihlLHQpe3ZhciBuPXQub3AxCi1yZXR1cm4gZS5nb3RvKG4pfSks
RWUuYWRkKDE3LGZ1bmN0aW9uKGUsdCl7dmFyIG4saT10Lm9wMSxvPWUuZnJhbWUuZ2V0Q29uZGl0
aW9uKCk7KDAsci5pc0NvbnN0KShvKT9vLnZhbHVlKCkmJmUuZ290byhpKToobj1uZXcgci5SZWZl
cmVuY2VDYWNoZShvKSxuLnBlZWsoKSYmZS5nb3RvKGkpLGUudXBkYXRlV2l0aChuZXcgU2Uobikp
KX0pLEVlLmFkZCgxOCxmdW5jdGlvbihlLHQpe3ZhciBuLGk9dC5vcDEsbz1lLmZyYW1lLmdldENv
bmRpdGlvbigpOygwLHIuaXNDb25zdCkobyk/by52YWx1ZSgpfHxlLmdvdG8oaSk6KG49bmV3IHIu
UmVmZXJlbmNlQ2FjaGUobyksbi5wZWVrKCl8fGUuZ290byhpKSxlLnVwZGF0ZVdpdGgobmV3IFNl
KG4pKSl9KQotdmFyIE9lPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgci5Db25zdFJlZmVyZW5jZSgh
IWUudmFsdWUoKSl9LEFlPWZ1bmN0aW9uKGUpe3JldHVybiBlfSxUZT1mdW5jdGlvbihlLHQpe3Jl
dHVybiB0LnRvQ29uZGl0aW9uYWxSZWZlcmVuY2UoZSl9Ci1FZS5hZGQoMTksZnVuY3Rpb24oZSx0
KXt2YXIgbj10Lm9wMSxyPWUuZnJhbWUuZ2V0T3BlcmFuZCgpLGk9ZS5jb25zdGFudHMuZ2V0RnVu
Y3Rpb24obikKLWUuZnJhbWUuc2V0Q29uZGl0aW9uKGkocixlLmVudikpfSkKLXZhciBTZT1mdW5j
dGlvbihlKXtmdW5jdGlvbiBuKG4pe3ZhciByPSgwLHQucG9zc2libGVDb25zdHJ1Y3RvclJldHVy
bikodGhpcyxlLmNhbGwodGhpcykpCi1yZXR1cm4gci50eXBlPSJhc3NlcnQiLHIudGFnPW4udGFn
LHIuY2FjaGU9bixyfXJldHVybigwLHQuaW5oZXJpdHMpKG4sZSksbi5wcm90b3R5cGUuZXZhbHVh
dGU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5jYWNoZTsoMCxyLmlzTW9kaWZpZWQpKHQucmV2YWxp
ZGF0ZSgpKSYmZS50aHJvdygpfSxuLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXt2YXIgZT10
aGlzLnR5cGUsdD10aGlzLl9ndWlkLG49dGhpcy5jYWNoZSxyPXZvaWQgMAotdHJ5e3I9SlNPTi5z
dHJpbmdpZnkobi5wZWVrKCkpfWNhdGNoKGUpe3I9U3RyaW5nKG4ucGVlaygpKX1yZXR1cm57Z3Vp
ZDp0LHR5cGU6ZSxhcmdzOltdLGRldGFpbHM6e2V4cGVjdGVkOnJ9fX0sbn0oQ2UpLFJlPWZ1bmN0
aW9uKGUpe2Z1bmN0aW9uIG4obixyKXt2YXIgaT0oMCx0LnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1
cm4pKHRoaXMsZS5jYWxsKHRoaXMpKQotcmV0dXJuIGkudGFyZ2V0PXIsaS50eXBlPSJqdW1wLWlm
LW5vdC1tb2RpZmllZCIsaS50YWc9bixpLmxhc3RSZXZpc2lvbj1uLnZhbHVlKCksaX1yZXR1cm4o
MCx0LmluaGVyaXRzKShuLGUpLG4ucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKGUpe3ZhciB0
PXRoaXMudGFnLG49dGhpcy50YXJnZXQscj10aGlzLmxhc3RSZXZpc2lvbgotIWUuYWx3YXlzUmV2
YWxpZGF0ZSYmdC52YWxpZGF0ZShyKSYmZS5nb3RvKG4pfSxuLnByb3RvdHlwZS5kaWRNb2RpZnk9
ZnVuY3Rpb24oKXt0aGlzLmxhc3RSZXZpc2lvbj10aGlzLnRhZy52YWx1ZSgpfSxuLnByb3RvdHlw
ZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57Z3VpZDp0aGlzLl9ndWlkLHR5cGU6dGhpcy50eXBl
LGFyZ3M6W0pTT04uc3RyaW5naWZ5KHRoaXMudGFyZ2V0Lmluc3BlY3QoKSldfX0sbn0oQ2UpLGtl
PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4obil7dmFyIGk9KDAsdC5wb3NzaWJsZUNvbnN0cnVjdG9y
UmV0dXJuKSh0aGlzLGUuY2FsbCh0aGlzKSkKLXJldHVybiBpLnRhcmdldD1uLGkudHlwZT0iZGlk
LW1vZGlmeSIsaS50YWc9ci5DT05TVEFOVF9UQUcsaX1yZXR1cm4oMCx0LmluaGVyaXRzKShuLGUp
LG4ucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKCl7dGhpcy50YXJnZXQuZGlkTW9kaWZ5KCl9
LG59KENlKSxOZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy50YWc9ci5DT05TVEFOVF9U
QUcsdGhpcy50eXBlPSJsYWJlbCIsdGhpcy5sYWJlbD1udWxsLHRoaXMucHJldj1udWxsLHRoaXMu
bmV4dD1udWxsLCgwLG4uaW5pdGlhbGl6ZUd1aWQpKHRoaXMpLGUmJih0aGlzLmxhYmVsPWUpfXJl
dHVybiBlLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbigpe30sZS5wcm90b3R5cGUuaW5zcGVj
dD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxhYmVsKyIgWyIrdGhpcy5fZ3VpZCsiXSJ9LGUucHJv
dG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybntndWlkOnRoaXMuX2d1aWQsdHlwZTp0aGlz
LnR5cGUsYXJnczpbSlNPTi5zdHJpbmdpZnkodGhpcy5pbnNwZWN0KCkpXX19LGV9KCksUGU9bi5I
QVNfTkFUSVZFX1dFQUtNQVA/T2JqZWN0LmZyZWV6ZShbXSk6W10samU9bi5IQVNfTkFUSVZFX1dF
QUtNQVA/T2JqZWN0LmZyZWV6ZSgoMCxuLmRpY3QpKCkpOigwLG4uZGljdCkoKSxEZT1mdW5jdGlv
bigpe2Z1bmN0aW9uIGUoZSl7dGhpcy52YWx1ZXM9ZSx0aGlzLmxlbmd0aD1lLmxlbmd0aH1yZXR1
cm4gZS5jcmVhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGUubGVuZ3RoP25ldyB0aGlzKGUpOkxlfSxl
LmVtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIExlfSxlLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlv
bihlKXt2YXIgdCxuPXRoaXMudmFsdWVzLHI9dGhpcy5sZW5ndGgsaT1uZXcgQXJyYXkocikKLWZv
cih0PTA7dDxyO3QrKylpW3RdPW5bdF0uZXZhbHVhdGUoZSkKLXJldHVybiBJZS5jcmVhdGUoaSl9
LGUucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiJbIit0aGlzLnZhbHVlcy5tYXAo
ZnVuY3Rpb24oZSl7cmV0dXJuIGUudG9KU09OKCl9KS5qb2luKCIsICIpKyJdIn0sZX0oKSxMZT1u
ZXcoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbigpe3JldHVybigwLHQucG9zc2libGVDb25zdHJ1Y3Rv
clJldHVybikodGhpcyxlLmNhbGwodGhpcyxQZSkpfXJldHVybigwLHQuaW5oZXJpdHMpKG4sZSks
bi5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gTWV9LG4ucHJvdG90eXBlLnRv
SlNPTj1mdW5jdGlvbigpe3JldHVybiI8RU1QVFk+In0sbn0oRGUpKSxJZT1mdW5jdGlvbigpe2Z1
bmN0aW9uIGUoZSl7dGhpcy52YWx1ZXM9ZSx0aGlzLnRhZz0oMCxyLmNvbWJpbmVUYWdnZWQpKGUp
LHRoaXMubGVuZ3RoPWUubGVuZ3RofXJldHVybiBlLmNyZWF0ZT1mdW5jdGlvbihlKXtyZXR1cm4g
bmV3IHRoaXMoZSl9LGUuZW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4gTWV9LGUucHJvdG90eXBlLmF0
PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMudmFsdWVzCi1yZXR1cm4gZTx0aGlzLmxlbmd0aD90W2Vd
Om1lfSxlLnByb3RvdHlwZS52YWx1ZT1mdW5jdGlvbigpe3ZhciBlLHQ9dGhpcy52YWx1ZXMsbj10
aGlzLmxlbmd0aCxyPW5ldyBBcnJheShuKQotZm9yKGU9MDtlPG47ZSsrKXJbZV09dFtlXS52YWx1
ZSgpCi1yZXR1cm4gcn0sZX0oKSxNZT1uZXcoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbigpe3JldHVy
bigwLHQucG9zc2libGVDb25zdHJ1Y3RvclJldHVybikodGhpcyxlLmNhbGwodGhpcyxQZSkpfXJl
dHVybigwLHQuaW5oZXJpdHMpKG4sZSksbi5wcm90b3R5cGUuYXQ9ZnVuY3Rpb24oKXtyZXR1cm4g
bWV9LG4ucHJvdG90eXBlLnZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmFsdWVzfSxufShJ
ZSkpLEZlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMua2V5cz1lLHRoaXMudmFsdWVz
PXQsdGhpcy5sZW5ndGg9ZS5sZW5ndGgsKDAsbi5hc3NlcnQpKGUubGVuZ3RoPT09dC5sZW5ndGgs
IktleXMgYW5kIHZhbHVlcyBkbyBub3QgaGF2ZSB0aGUgc2FtZSBsZW5ndGgiKX1yZXR1cm4gZS5l
bXB0eT1mdW5jdGlvbigpe3JldHVybiB6ZX0sZS5jcmVhdGU9ZnVuY3Rpb24oZSl7dmFyIHQsbixy
PU9iamVjdC5rZXlzKGUpLGk9ci5sZW5ndGgKLWlmKGk+MCl7Zm9yKHQ9W10sbj0wO248aTtuKysp
dFtuXT1lW3Jbbl1dCi1yZXR1cm4gbmV3IHRoaXMocix0KX1yZXR1cm4gemV9LGUucHJvdG90eXBl
LmV2YWx1YXRlPWZ1bmN0aW9uKGUpe3ZhciB0LG49dGhpcy5rZXlzLHI9dGhpcy52YWx1ZXMsaT10
aGlzLmxlbmd0aCxvPW5ldyBBcnJheShpKQotZm9yKHQ9MDt0PGk7dCsrKW9bdF09clt0XS5ldmFs
dWF0ZShlKQotcmV0dXJuIG5ldyBVZShuLG8pfSxlLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24o
KXt2YXIgZT10aGlzLmtleXMsdD10aGlzLnZhbHVlcwotcmV0dXJuInsiK2UubWFwKGZ1bmN0aW9u
KGUsbil7cmV0dXJuIGUrIjogIit0W25dLnRvSlNPTigpfSkuam9pbigiLCAiKSsifSJ9LGV9KCks
emU9bmV3KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4oKXtyZXR1cm4oMCx0LnBvc3NpYmxlQ29uc3Ry
dWN0b3JSZXR1cm4pKHRoaXMsZS5jYWxsKHRoaXMsUGUsUGUpKX1yZXR1cm4oMCx0LmluaGVyaXRz
KShuLGUpLG4ucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKCl7cmV0dXJuIEJlfSxuLnByb3Rv
dHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4iPEVNUFRZPiJ9LG59KEZlKSksVWU9ZnVuY3Rp
b24oKXtmdW5jdGlvbiBlKGUsdCl7dmFyIGk9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1h
cmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOm51bGwKLXRoaXMua2V5cz1lLHRoaXMudmFsdWVzPXQs
dGhpcy5fbWFwPWksdGhpcy50YWc9KDAsci5jb21iaW5lVGFnZ2VkKSh0KSx0aGlzLmxlbmd0aD1l
Lmxlbmd0aCwoMCxuLmFzc2VydCkoZS5sZW5ndGg9PT10Lmxlbmd0aCwiS2V5cyBhbmQgdmFsdWVz
IGRvIG5vdCBoYXZlIHRoZSBzYW1lIGxlbmd0aCIpfXJldHVybiBlLmNyZWF0ZT1mdW5jdGlvbihl
KXt2YXIgdCxuLHI9T2JqZWN0LmtleXMoZSksaT1yLmxlbmd0aAotaWYoaT4wKXtmb3IodD1uZXcg
QXJyYXkoaSksbj0wO248aTtuKyspdFtuXT1lW3Jbbl1dCi1yZXR1cm4gbmV3IHRoaXMocix0LGUp
fXJldHVybiBCZX0sZS5lbXB0eT1mdW5jdGlvbigpe3JldHVybiBCZX0sZS5wcm90b3R5cGUuZ2V0
PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMua2V5cyxuPXRoaXMudmFsdWVzLHI9dC5pbmRleE9mKGUp
Ci1yZXR1cm4tMT09PXI/bWU6bltyXX0sZS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKGUpe3JldHVy
bi0xIT09dGhpcy5rZXlzLmluZGV4T2YoZSl9LGUucHJvdG90eXBlLnZhbHVlPWZ1bmN0aW9uKCl7
dmFyIGUsdCxyLGk9dGhpcy5rZXlzLG89dGhpcy52YWx1ZXMscz0oMCxuLmRpY3QpKCkKLWZvcihl
PTA7ZTxpLmxlbmd0aDtlKyspdD1pW2VdLHI9b1tlXSxzW3RdPXIudmFsdWUoKQotcmV0dXJuIHN9
LCgwLHQuY3JlYXRlQ2xhc3MpKGUsW3trZXk6Im1hcCIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGUsdD10
aGlzLl9tYXAKLWlmKHQpcmV0dXJuIHQKLXQ9dGhpcy5fbWFwPSgwLG4uZGljdCkoKQotdmFyIHI9
dGhpcy5rZXlzLGk9dGhpcy52YWx1ZXMsbz10aGlzLmxlbmd0aAotZm9yKGU9MDtlPG87ZSsrKXRb
cltlXV09aVtlXQotcmV0dXJuIHR9fV0pLGV9KCksQmU9bmV3KGZ1bmN0aW9uKGUpe2Z1bmN0aW9u
IG4oKXtyZXR1cm4oMCx0LnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4pKHRoaXMsZS5jYWxsKHRo
aXMsUGUsUGUsamUpKX1yZXR1cm4oMCx0LmluaGVyaXRzKShuLGUpLG4ucHJvdG90eXBlLmdldD1m
dW5jdGlvbigpe3JldHVybiBtZX0sbi5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKCl7cmV0dXJuITF9
LG4ucHJvdG90eXBlLnZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIGplfSxufShVZSkpLHFlPXtkZWZh
dWx0Om51bGwsaW52ZXJzZTpudWxsfSxIZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG4pe3Ro
aXMucG9zaXRpb25hbD1lLHRoaXMubmFtZWQ9dCx0aGlzLmJsb2Nrcz1uLHRoaXMudHlwZT0iY29t
cGlsZWQtYXJncyJ9cmV0dXJuIGUuY3JlYXRlPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT09PUxl
JiZ0PT09emUmJm49PT1xZT90aGlzLmVtcHR5KCk6bmV3IHRoaXMoZSx0LG4pfSxlLmVtcHR5PWZ1
bmN0aW9uKCl7cmV0dXJuIFZlfSxlLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbihlKXt2YXIg
dD10aGlzLnBvc2l0aW9uYWwsbj10aGlzLm5hbWVkLHI9dGhpcy5ibG9ja3MKLXJldHVybiBXZS5j
cmVhdGUodC5ldmFsdWF0ZShlKSxuLmV2YWx1YXRlKGUpLHIpfSxlfSgpLFZlPW5ldyhmdW5jdGlv
bihlKXtmdW5jdGlvbiBuKCl7cmV0dXJuKDAsdC5wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKSh0
aGlzLGUuY2FsbCh0aGlzLExlLHplLHFlKSl9cmV0dXJuKDAsdC5pbmhlcml0cykobixlKSxuLnBy
b3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbigpe3JldHVybiAkZX0sbn0oSGUpKSxXZT1mdW5jdGlv
bigpe2Z1bmN0aW9uIGUoZSx0LG4pe3RoaXMucG9zaXRpb25hbD1lLHRoaXMubmFtZWQ9dCx0aGlz
LmJsb2Nrcz1uLHRoaXMudGFnPSgwLHIuY29tYmluZVRhZ2dlZCkoW2UsdF0pfXJldHVybiBlLmVt
cHR5PWZ1bmN0aW9uKCl7cmV0dXJuICRlfSxlLmNyZWF0ZT1mdW5jdGlvbihlLHQsbil7cmV0dXJu
IG5ldyB0aGlzKGUsdCxuKX0sZS5wb3NpdGlvbmFsPWZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50
cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpxZQotcmV0dXJu
IG5ldyB0aGlzKEllLmNyZWF0ZShlKSxCZSx0KX0sZS5uYW1lZD1mdW5jdGlvbihlKXt2YXIgdD1h
cmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06cWUK
LXJldHVybiBuZXcgdGhpcyhNZSxVZS5jcmVhdGUoZSksdCl9LGV9KCksJGU9bmV3IFdlKE1lLEJl
LHFlKQotRWUuYWRkKDIyLGZ1bmN0aW9uKGUpe3ZhciB0PWUuZnJhbWUuZ2V0T3BlcmFuZCgpLG49
KDAsci5pc0NvbnN0KSh0KT92b2lkIDA6bmV3IHIuUmVmZXJlbmNlQ2FjaGUodCksaT1uP24ucGVl
aygpOnQudmFsdWUoKQotZS5mcmFtZS5zZXRJbW1lZGlhdGUoaSksbiYmZS51cGRhdGVXaXRoKG5l
dyBTZShuKSl9KSxFZS5hZGQoMjMsZnVuY3Rpb24oZSx0KXt2YXIgbj10Lm9wMSxyPWUuY29uc3Rh
bnRzLmdldE90aGVyKG4pCi1lLmZyYW1lLnNldEltbWVkaWF0ZShyKX0pLEVlLmFkZCgyNCxmdW5j
dGlvbihlLHQpe3ZhciBuPXQub3AxLHI9dC5vcDIsaT1lLmNvbnN0YW50cy5nZXRFeHByZXNzaW9u
KG4pLG89ZS5jb25zdGFudHMuZ2V0QmxvY2socikscz1lLmZyYW1lLmdldEltbWVkaWF0ZSgpLGE9
ZS5wdXNoRHluYW1pY1Njb3BlKCksdT1lLnNjb3BlKCksbD1zLm1hbmFnZXIsYz1sLnByZXBhcmVB
cmdzKHMsaS5ldmFsdWF0ZShlKSxhKSxwPSEhYy5ibG9ja3MuZGVmYXVsdCxmPWwuY3JlYXRlKGUu
ZW52LHMsYyxhLGUuZ2V0U2VsZigpLHApLGg9bC5nZXREZXN0cnVjdG9yKGYpCi1oJiZlLm5ld0Rl
c3Ryb3lhYmxlKGgpCi12YXIgZD1sLmxheW91dEZvcihzLGYsZS5lbnYpLG09bC5nZXRTZWxmKGYp
Ci1lLmJlZ2luQ2FjaGVHcm91cCgpLGUuc3RhY2soKS5wdXNoU2ltcGxlQmxvY2soKSxlLnB1c2hS
b290U2NvcGUobSxkLnN5bWJvbHMpLGUuaW52b2tlTGF5b3V0KGMsZCx1LGYsbCxvKSxlLnVwZGF0
ZVdpdGgobmV3IEdlKHMubmFtZSxmLGwsYyxhKSl9KSxFZS5hZGQoMjUsZnVuY3Rpb24oZSl7dmFy
IHQ9ZS5mcmFtZS5nZXRNYW5hZ2VyKCksbj1lLmZyYW1lLmdldENvbXBvbmVudCgpLHI9IkRpZENy
ZWF0ZUVsZW1lbnRPcGNvZGUjZXZhbHVhdGUiCi10LmRpZENyZWF0ZUVsZW1lbnQobixlLnN0YWNr
KCkuZXhwZWN0Q29uc3RydWN0aW5nKHIpLGUuc3RhY2soKS5leHBlY3RPcGVyYXRpb25zKHIpKX0p
LEVlLmFkZCgyNixmdW5jdGlvbihlKXt2YXIgdD1lLmZyYW1lLmdldFNoYWRvdygpCi1lLnB1c2hD
YWxsZXJTY29wZSgpLHQmJmUuaW52b2tlQmxvY2sodCxXZS5lbXB0eSgpKX0pLEVlLmFkZCgyNyxm
dW5jdGlvbihlKXt2YXIgdD1lLmZyYW1lLmdldE1hbmFnZXIoKSxuPWUuZnJhbWUuZ2V0Q29tcG9u
ZW50KCkscj1lLnN0YWNrKCkucG9wQmxvY2soKQotdC5kaWRSZW5kZXJMYXlvdXQobixyKSxlLmVu
di5kaWRDcmVhdGUobix0KSxlLnVwZGF0ZVdpdGgobmV3IEtlKHQsbixyKSl9KSxFZS5hZGQoMjgs
ZnVuY3Rpb24oZSl7ZS5wb3BTY29wZSgpLGUucG9wRHluYW1pY1Njb3BlKCksZS5jb21taXRDYWNo
ZUdyb3VwKCl9KQotdmFyIEdlPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4obixpLG8scyxhKXt2YXIg
dT0oMCx0LnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4pKHRoaXMsZS5jYWxsKHRoaXMpKQotdS5u
YW1lPW4sdS5jb21wb25lbnQ9aSx1Lm1hbmFnZXI9byx1LmFyZ3M9cyx1LmR5bmFtaWNTY29wZT1h
LHUudHlwZT0idXBkYXRlLWNvbXBvbmVudCIKLXZhciBsPW8uZ2V0VGFnKGkpCi1yZXR1cm4gdS50
YWc9bD8oMCxyLmNvbWJpbmUpKFtzLnRhZyxsXSk6cy50YWcsdX1yZXR1cm4oMCx0LmluaGVyaXRz
KShuLGUpLG4ucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jb21wb25l
bnQsdD10aGlzLm1hbmFnZXIsbj10aGlzLmFyZ3Mscj10aGlzLmR5bmFtaWNTY29wZQotdC51cGRh
dGUoZSxuLHIpfSxuLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57Z3VpZDp0aGlz
Ll9ndWlkLHR5cGU6dGhpcy50eXBlLGFyZ3M6W0pTT04uc3RyaW5naWZ5KHRoaXMubmFtZSldfX0s
bn0oQ2UpLEtlPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4obixpLG8pe3ZhciBzPSgwLHQucG9zc2li
bGVDb25zdHJ1Y3RvclJldHVybikodGhpcyxlLmNhbGwodGhpcykpCi1yZXR1cm4gcy5tYW5hZ2Vy
PW4scy5jb21wb25lbnQ9aSxzLmJvdW5kcz1vLHMudHlwZT0iZGlkLXVwZGF0ZS1sYXlvdXQiLHMu
dGFnPXIuQ09OU1RBTlRfVEFHLHN9cmV0dXJuKDAsdC5pbmhlcml0cykobixlKSxuLnByb3RvdHlw
ZS5ldmFsdWF0ZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLm1hbmFnZXIsbj10aGlzLmNvbXBvbmVu
dCxyPXRoaXMuYm91bmRzCi10LmRpZFVwZGF0ZUxheW91dChuLHIpLGUuZW52LmRpZFVwZGF0ZShu
LHQpfSxufShDZSksUWU9ZnVuY3Rpb24oZSx0KXt0aGlzLmVsZW1lbnQ9ZSx0aGlzLm5leHRTaWJs
aW5nPXR9LFllPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbil7dGhpcy5wYXJlbnROb2RlPWUs
dGhpcy5maXJzdD10LHRoaXMubGFzdD1ufXJldHVybiBlLnByb3RvdHlwZS5wYXJlbnRFbGVtZW50
PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyZW50Tm9kZX0sZS5wcm90b3R5cGUuZmlyc3ROb2Rl
PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlyc3R9LGUucHJvdG90eXBlLmxhc3ROb2RlPWZ1bmN0
aW9uKCl7cmV0dXJuIHRoaXMubGFzdH0sZX0oKSxKZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0
KXt0aGlzLnBhcmVudE5vZGU9ZSx0aGlzLm5vZGU9dH1yZXR1cm4gZS5wcm90b3R5cGUucGFyZW50
RWxlbWVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcmVudE5vZGV9LGUucHJvdG90eXBlLmZp
cnN0Tm9kZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGV9LGUucHJvdG90eXBlLmxhc3ROb2Rl
PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZX0sZX0oKSxYZT1mdW5jdGlvbihlKXt0aGlzLmJv
dW5kcz1lfSxaZT1mdW5jdGlvbihlKXtmdW5jdGlvbiBuKG4scil7dmFyIGk9KDAsdC5wb3NzaWJs
ZUNvbnN0cnVjdG9yUmV0dXJuKSh0aGlzLGUuY2FsbCh0aGlzLG4pKQotcmV0dXJuIGkudGV4dE5v
ZGU9cixpfXJldHVybigwLHQuaW5oZXJpdHMpKG4sZSksbi5pbnNlcnQ9ZnVuY3Rpb24oZSx0LHIp
e3ZhciBpPWUuY3JlYXRlVGV4dE5vZGUocikKLXJldHVybiBlLmluc2VydEJlZm9yZSh0LmVsZW1l
bnQsaSx0Lm5leHRTaWJsaW5nKSxuZXcgbihuZXcgSmUodC5lbGVtZW50LGkpLGkpfSxuLnByb3Rv
dHlwZS51cGRhdGU9ZnVuY3Rpb24oZSx0KXt2YXIgbgotcmV0dXJuISFjKHQpJiYobj10aGlzLnRl
eHROb2RlLG4ubm9kZVZhbHVlPXQsITApfSxufShYZSksZXQ9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24g
bigpe3JldHVybigwLHQucG9zc2libGVDb25zdHJ1Y3RvclJldHVybikodGhpcyxlLmFwcGx5KHRo
aXMsYXJndW1lbnRzKSl9cmV0dXJuKDAsdC5pbmhlcml0cykobixlKSxuLmluc2VydD1mdW5jdGlv
bihlLHQscil7cmV0dXJuIG5ldyBuKGUuaW5zZXJ0SFRNTEJlZm9yZSh0LmVsZW1lbnQscix0Lm5l
eHRTaWJsaW5nKSl9LG4ucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihlLHQpe3ZhciBuLHIsaQot
cmV0dXJuISFjKHQpJiYobj10aGlzLmJvdW5kcyxyPW4ucGFyZW50RWxlbWVudCgpLGk9YShuKSx0
aGlzLmJvdW5kcz1lLmluc2VydEhUTUxCZWZvcmUocixpLHQpLCEwKX0sbn0oWGUpLHR0PWZ1bmN0
aW9uKGUpe2Z1bmN0aW9uIG4obixyKXt2YXIgaT0oMCx0LnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1
cm4pKHRoaXMsZS5jYWxsKHRoaXMsbikpCi1yZXR1cm4gaS5sYXN0U3RyaW5nVmFsdWU9cixpfXJl
dHVybigwLHQuaW5oZXJpdHMpKG4sZSksbi5pbnNlcnQ9ZnVuY3Rpb24oZSx0LHIpe3ZhciBpPXIu
dG9IVE1MKCkKLXJldHVybiBuZXcgbihlLmluc2VydEhUTUxCZWZvcmUodC5lbGVtZW50LGksdC5u
ZXh0U2libGluZyksaSl9LG4ucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihlLHQpe3ZhciBuLHIs
aSxvCi1yZXR1cm4hIXUodCkmJihuPXQudG9IVE1MKCksbiE9PXRoaXMubGFzdFN0cmluZ1ZhbHVl
JiYocj10aGlzLmJvdW5kcyxpPXIucGFyZW50RWxlbWVudCgpLG89YShyKSx0aGlzLmJvdW5kcz1l
Lmluc2VydEhUTUxCZWZvcmUoaSxvLG4pLHRoaXMubGFzdFN0cmluZ1ZhbHVlPW4pLCEwKX0sbn0o
WGUpLG50PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4oKXtyZXR1cm4oMCx0LnBvc3NpYmxlQ29uc3Ry
dWN0b3JSZXR1cm4pKHRoaXMsZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXJldHVybigwLHQuaW5o
ZXJpdHMpKG4sZSksbi5pbnNlcnQ9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlLmluc2VydEJlZm9y
ZSh0LmVsZW1lbnQscix0Lm5leHRTaWJsaW5nKSxuZXcgbihvKHQuZWxlbWVudCxyKSl9LG4ucHJv
dG90eXBlLnVwZGF0ZT1mdW5jdGlvbihlLHQpe3ZhciBuLHIsaQotcmV0dXJuISFsKHQpJiYobj10
aGlzLmJvdW5kcyxyPW4ucGFyZW50RWxlbWVudCgpLGk9YShuKSx0aGlzLmJvdW5kcz1lLmluc2Vy
dE5vZGVCZWZvcmUocix0LGkpLCEwKX0sbn0oWGUpLHJ0PSJDT01QT05FTlQgREVGSU5JVElPTiBb
aWQ9ZTU5Yzc1NGUtNjFlYi00MzkyLThjNGEtMmMwYWM3MmJmY2Q0XSIsaXQ9ZnVuY3Rpb24oKXtm
dW5jdGlvbiBlKCl7fXJldHVybiBlLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4i
VU5JTVBMOiAiK3RoaXMudHlwZS50b1VwcGVyQ2FzZSgpfSxlfSgpCi1FZS5hZGQoMjksZnVuY3Rp
b24oZSx0KXt2YXIgbj10Lm9wMQotZS5zdGFjaygpLmFwcGVuZFRleHQoZS5jb25zdGFudHMuZ2V0
U3RyaW5nKG4pKX0pLEVlLmFkZCgzMCxmdW5jdGlvbihlLHQpe3ZhciBuPXQub3AxCi1lLnN0YWNr
KCkuYXBwZW5kQ29tbWVudChlLmNvbnN0YW50cy5nZXRTdHJpbmcobikpfSksRWUuYWRkKDMyLGZ1
bmN0aW9uKGUsdCl7dmFyIG49dC5vcDEKLWUuc3RhY2soKS5vcGVuRWxlbWVudChlLmNvbnN0YW50
cy5nZXRTdHJpbmcobikpfSksRWUuYWRkKDMzLGZ1bmN0aW9uKGUpe3ZhciB0PWUuZnJhbWUuZ2V0
T3BlcmFuZCgpLG49KDAsci5pc0NvbnN0KSh0KT92b2lkIDA6bmV3IHIuUmVmZXJlbmNlQ2FjaGUo
dCksaT1uP24ucGVlaygpOnQudmFsdWUoKQotZS5zdGFjaygpLnB1c2hSZW1vdGVFbGVtZW50KGkp
LG4mJmUudXBkYXRlV2l0aChuZXcgU2UobikpfSksRWUuYWRkKDM0LGZ1bmN0aW9uKGUpe3JldHVy
biBlLnN0YWNrKCkucG9wUmVtb3RlRWxlbWVudCgpfSksRWUuYWRkKDM1LGZ1bmN0aW9uKGUsdCl7
dmFyIG49dC5vcDEscj1lLmNvbnN0YW50cy5nZXRTdHJpbmcobikKLWUuc3RhY2soKS5vcGVuRWxl
bWVudChyLG5ldyB1dChlLmVudikpfSksRWUuYWRkKDM2LGZ1bmN0aW9uKGUpe3ZhciB0PWUuZnJh
bWUuZ2V0T3BlcmFuZCgpLnZhbHVlKCkKLWUuc3RhY2soKS5vcGVuRWxlbWVudCh0KX0pCi12YXIg
b3Q9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5saXN0PW51bGwsdGhpcy5pc0NvbnN0PSEw
fXJldHVybiBlLnByb3RvdHlwZS5hcHBlbmQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5saXN0LG49
dGhpcy5pc0NvbnN0Ci1udWxsPT09dCYmKHQ9dGhpcy5saXN0PVtdKSx0LnB1c2goZSksdGhpcy5p
c0NvbnN0PW4mJigwLHIuaXNDb25zdCkoZSl9LGUucHJvdG90eXBlLnRvUmVmZXJlbmNlPWZ1bmN0
aW9uKCl7dmFyIGU9dGhpcy5saXN0LHQ9dGhpcy5pc0NvbnN0Ci1yZXR1cm4gZT90P2ZlLmNyZWF0
ZShkKGUpKTpuZXcgc3QoZSk6Z2V9LGV9KCksc3Q9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbihuKXt2
YXIgaT0oMCx0LnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4pKHRoaXMsZS5jYWxsKHRoaXMpKQot
cmV0dXJuIGkubGlzdD1bXSxpLnRhZz0oMCxyLmNvbWJpbmVUYWdnZWQpKG4pLGkubGlzdD1uLGl9
cmV0dXJuKDAsdC5pbmhlcml0cykobixlKSxuLnByb3RvdHlwZS5jb21wdXRlPWZ1bmN0aW9uKCl7
cmV0dXJuIGQodGhpcy5saXN0KX0sbn0oci5DYWNoZWRSZWZlcmVuY2UpLGF0PWZ1bmN0aW9uKCl7
ZnVuY3Rpb24gZShlKXt0aGlzLmVudj1lLHRoaXMub3Bjb2Rlcz1udWxsLHRoaXMuY2xhc3NMaXN0
PW51bGx9cmV0dXJuIGUucHJvdG90eXBlLmFkZFN0YXRpY0F0dHJpYnV0ZT1mdW5jdGlvbihlLHQs
bil7ImNsYXNzIj09PXQ/dGhpcy5hZGRDbGFzcyhmZS5jcmVhdGUobikpOnRoaXMuZW52LmdldEFw
cGVuZE9wZXJhdGlvbnMoKS5zZXRBdHRyaWJ1dGUoZSx0LG4pfSxlLnByb3RvdHlwZS5hZGRTdGF0
aWNBdHRyaWJ1dGVOUz1mdW5jdGlvbihlLHQsbixyKXt0aGlzLmVudi5nZXRBcHBlbmRPcGVyYXRp
b25zKCkuc2V0QXR0cmlidXRlKGUsbixyLHQpfSxlLnByb3RvdHlwZS5hZGREeW5hbWljQXR0cmli
dXRlPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLG8KLSJjbGFzcyI9PT10P3RoaXMuYWRkQ2xhc3Mo
bik6KGk9dGhpcy5lbnYuYXR0cmlidXRlRm9yKGUsdCxyKSxvPW5ldyBwdChlLGksdCxuKSx0aGlz
LmFkZEF0dHJpYnV0ZShvKSl9LGUucHJvdG90eXBlLmFkZER5bmFtaWNBdHRyaWJ1dGVOUz1mdW5j
dGlvbihlLHQsbixyLGkpe3ZhciBvPXRoaXMuZW52LmF0dHJpYnV0ZUZvcihlLG4saSx0KSxzPW5l
dyBwdChlLG8sbixyLHQpCi10aGlzLmFkZEF0dHJpYnV0ZShzKX0sZS5wcm90b3R5cGUuZmx1c2g9
ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGksbyxzPXQuZW52LGE9dGhpcy5vcGNvZGVzLHU9dGhpcy5j
bGFzc0xpc3QKLWZvcihuPTA7YSYmbjxhLmxlbmd0aDtuKyspdC51cGRhdGVXaXRoKGFbbl0pCi11
JiYocj1zLmF0dHJpYnV0ZUZvcihlLCJjbGFzcyIsITEpLGk9bmV3IHB0KGUsciwiY2xhc3MiLHUu
dG9SZWZlcmVuY2UoKSksKG89aS5mbHVzaChzKSkmJnQudXBkYXRlV2l0aChvKSksdGhpcy5vcGNv
ZGVzPW51bGwsdGhpcy5jbGFzc0xpc3Q9bnVsbH0sZS5wcm90b3R5cGUuYWRkQ2xhc3M9ZnVuY3Rp
b24oZSl7dmFyIHQ9dGhpcy5jbGFzc0xpc3QKLXR8fCh0PXRoaXMuY2xhc3NMaXN0PW5ldyBvdCks
dC5hcHBlbmQoZSl9LGUucHJvdG90eXBlLmFkZEF0dHJpYnV0ZT1mdW5jdGlvbihlKXt2YXIgdCxu
PWUuZmx1c2godGhpcy5lbnYpCi1uJiYodD10aGlzLm9wY29kZXMsdHx8KHQ9dGhpcy5vcGNvZGVz
PVtdKSx0LnB1c2gobikpfSxlfSgpLHV0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLmVu
dj1lLHRoaXMuYXR0cmlidXRlTmFtZXM9bnVsbCx0aGlzLmF0dHJpYnV0ZXM9bnVsbCx0aGlzLmNs
YXNzTGlzdD1udWxsfXJldHVybiBlLnByb3RvdHlwZS5hZGRTdGF0aWNBdHRyaWJ1dGU9ZnVuY3Rp
b24oZSx0LG4peyJjbGFzcyI9PT10P3RoaXMuYWRkQ2xhc3MoZmUuY3JlYXRlKG4pKTp0aGlzLnNo
b3VsZEFkZEF0dHJpYnV0ZSh0KSYmdGhpcy5hZGRBdHRyaWJ1dGUodCxuZXcgY3QoZSx0LG4pKX0s
ZS5wcm90b3R5cGUuYWRkU3RhdGljQXR0cmlidXRlTlM9ZnVuY3Rpb24oZSx0LG4scil7dGhpcy5z
aG91bGRBZGRBdHRyaWJ1dGUobikmJnRoaXMuYWRkQXR0cmlidXRlKG4sbmV3IGN0KGUsbixyLHQp
KX0sZS5wcm90b3R5cGUuYWRkRHluYW1pY0F0dHJpYnV0ZT1mdW5jdGlvbihlLHQsbixyKXt2YXIg
aSxvCi0iY2xhc3MiPT09dD90aGlzLmFkZENsYXNzKG4pOnRoaXMuc2hvdWxkQWRkQXR0cmlidXRl
KHQpJiYoaT10aGlzLmVudi5hdHRyaWJ1dGVGb3IoZSx0LHIpLG89bmV3IHB0KGUsaSx0LG4pLHRo
aXMuYWRkQXR0cmlidXRlKHQsbykpfSxlLnByb3RvdHlwZS5hZGREeW5hbWljQXR0cmlidXRlTlM9
ZnVuY3Rpb24oZSx0LG4scixpKXt2YXIgbyxzCi10aGlzLnNob3VsZEFkZEF0dHJpYnV0ZShuKSYm
KG89dGhpcy5lbnYuYXR0cmlidXRlRm9yKGUsbixpLHQpLHM9bmV3IHB0KGUsbyxuLHIsdCksdGhp
cy5hZGRBdHRyaWJ1dGUobixzKSl9LGUucHJvdG90eXBlLmZsdXNoPWZ1bmN0aW9uKGUsdCl7dmFy
IG4scixpLG8scyxhPXRoaXMuZW52LHU9dGhpcy5hdHRyaWJ1dGVzLGw9dGhpcy5jbGFzc0xpc3QK
LWZvcihuPTA7dSYmbjx1Lmxlbmd0aDtuKyspKHI9dVtuXS5mbHVzaChhKSkmJnQudXBkYXRlV2l0
aChyKQotbCYmKGk9YS5hdHRyaWJ1dGVGb3IoZSwiY2xhc3MiLCExKSxvPW5ldyBwdChlLGksImNs
YXNzIixsLnRvUmVmZXJlbmNlKCkpLChzPW8uZmx1c2goYSkpJiZ0LnVwZGF0ZVdpdGgocykpfSxl
LnByb3RvdHlwZS5zaG91bGRBZGRBdHRyaWJ1dGU9ZnVuY3Rpb24oZSl7cmV0dXJuIXRoaXMuYXR0
cmlidXRlTmFtZXN8fC0xPT09dGhpcy5hdHRyaWJ1dGVOYW1lcy5pbmRleE9mKGUpfSxlLnByb3Rv
dHlwZS5hZGRDbGFzcz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmNsYXNzTGlzdAotdHx8KHQ9dGhp
cy5jbGFzc0xpc3Q9bmV3IG90KSx0LmFwcGVuZChlKX0sZS5wcm90b3R5cGUuYWRkQXR0cmlidXRl
PWZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5hdHRyaWJ1dGVOYW1lcyxpPXRoaXMuYXR0cmlidXRl
cwotcnx8KHI9dGhpcy5hdHRyaWJ1dGVOYW1lcz1bXSxpPXRoaXMuYXR0cmlidXRlcz1bXSksci5w
dXNoKGUpLCgwLG4udW53cmFwKShpKS5wdXNoKHQpfSxlfSgpCi1FZS5hZGQoMzcsZnVuY3Rpb24o
ZSl7dmFyIHQ9ZS5zdGFjaygpLG49IkZsdXNoRWxlbWVudE9wY29kZSNldmFsdWF0ZSIKLXQuZXhw
ZWN0T3BlcmF0aW9ucyhuKS5mbHVzaCh0LmV4cGVjdENvbnN0cnVjdGluZyhuKSxlKSx0LmZsdXNo
RWxlbWVudCgpfSksRWUuYWRkKDM4LGZ1bmN0aW9uKGUpe3JldHVybiBlLnN0YWNrKCkuY2xvc2VF
bGVtZW50KCl9KSxFZS5hZGQoMzksZnVuY3Rpb24oZSl7cmV0dXJuIGUuc3RhY2soKS5wb3BFbGVt
ZW50KCl9KSxFZS5hZGQoNDAsZnVuY3Rpb24oZSx0KXt2YXIgbixyPXQub3AxLGk9dC5vcDIsbz10
Lm9wMyxzPWUuY29uc3RhbnRzLmdldFN0cmluZyhyKSxhPWUuY29uc3RhbnRzLmdldFN0cmluZyhp
KQotbz8obj1lLmNvbnN0YW50cy5nZXRTdHJpbmcobyksZS5zdGFjaygpLnNldFN0YXRpY0F0dHJp
YnV0ZU5TKG4scyxhKSk6ZS5zdGFjaygpLnNldFN0YXRpY0F0dHJpYnV0ZShzLGEpfSksRWUuYWRk
KDQxLGZ1bmN0aW9uKGUsdCl7dmFyIG49KHQub3AxLHQub3AyKSxyPXQub3AzLGk9ZS5jb25zdGFu
dHMuZ2V0T3RoZXIobiksbz1lLmNvbnN0YW50cy5nZXRFeHByZXNzaW9uKHIpLHM9ZS5zdGFjaygp
LGE9cy5jb25zdHJ1Y3RpbmcsdT1zLnVwZGF0ZU9wZXJhdGlvbnMsbD1vLmV2YWx1YXRlKGUpLGM9
ZS5keW5hbWljU2NvcGUoKSxwPWkuY3JlYXRlKGEsbCxjLHUpCi1lLmVudi5zY2hlZHVsZUluc3Rh
bGxNb2RpZmllcihwLGkpCi12YXIgZj1pLmdldERlc3RydWN0b3IocCkKLWYmJmUubmV3RGVzdHJv
eWFibGUoZiksZS51cGRhdGVXaXRoKG5ldyBsdChpLHAsbCkpfSkKLXZhciBsdD1mdW5jdGlvbihl
KXtmdW5jdGlvbiBuKG4scixpKXt2YXIgbz0oMCx0LnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4p
KHRoaXMsZS5jYWxsKHRoaXMpKQotcmV0dXJuIG8ubWFuYWdlcj1uLG8ubW9kaWZpZXI9cixvLmFy
Z3M9aSxvLnR5cGU9InVwZGF0ZS1tb2RpZmllciIsby50YWc9aS50YWcsby5sYXN0VXBkYXRlZD1p
LnRhZy52YWx1ZSgpLG99cmV0dXJuKDAsdC5pbmhlcml0cykobixlKSxuLnByb3RvdHlwZS5ldmFs
dWF0ZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLm1hbmFnZXIsbj10aGlzLm1vZGlmaWVyLHI9dGhp
cy50YWcsaT10aGlzLmxhc3RVcGRhdGVkCi1yLnZhbGlkYXRlKGkpfHwoZS5lbnYuc2NoZWR1bGVV
cGRhdGVNb2RpZmllcihuLHQpLHRoaXMubGFzdFVwZGF0ZWQ9ci52YWx1ZSgpKX0sbi5wcm90b3R5
cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJue2d1aWQ6dGhpcy5fZ3VpZCx0eXBlOnRoaXMudHlw
ZSxhcmdzOltKU09OLnN0cmluZ2lmeSh0aGlzLmFyZ3MpXX19LG59KENlKSxjdD1mdW5jdGlvbigp
e2Z1bmN0aW9uIGUoZSx0LG4scil7dGhpcy5lbGVtZW50PWUsdGhpcy5uYW1lPXQsdGhpcy52YWx1
ZT1uLHRoaXMubmFtZXNwYWNlPXJ9cmV0dXJuIGUucHJvdG90eXBlLmZsdXNoPWZ1bmN0aW9uKGUp
e3JldHVybiBlLmdldEFwcGVuZE9wZXJhdGlvbnMoKS5zZXRBdHRyaWJ1dGUodGhpcy5lbGVtZW50
LHRoaXMubmFtZSx0aGlzLnZhbHVlLHRoaXMubmFtZXNwYWNlKSxudWxsfSxlfSgpLHB0PWZ1bmN0
aW9uKCl7ZnVuY3Rpb24gZShlLHQsbixyLGkpe3RoaXMuZWxlbWVudD1lLHRoaXMuYXR0cmlidXRl
TWFuYWdlcj10LHRoaXMubmFtZT1uLHRoaXMucmVmZXJlbmNlPXIsdGhpcy5uYW1lc3BhY2U9aSx0
aGlzLmNhY2hlPW51bGwsdGhpcy50YWc9ci50YWd9cmV0dXJuIGUucHJvdG90eXBlLnBhdGNoPWZ1
bmN0aW9uKGUpe3ZhciB0PXRoaXMuZWxlbWVudCxpPXRoaXMuY2FjaGUsbz0oMCxuLmV4cGVjdCko
aSwibXVzdCBwYXRjaCBhZnRlciBmbHVzaCIpLnJldmFsaWRhdGUoKTsoMCxyLmlzTW9kaWZpZWQp
KG8pJiZ0aGlzLmF0dHJpYnV0ZU1hbmFnZXIudXBkYXRlQXR0cmlidXRlKGUsdCxvLHRoaXMubmFt
ZXNwYWNlKX0sZS5wcm90b3R5cGUuZmx1c2g9ZnVuY3Rpb24oZSl7dmFyIHQsbixpLG89dGhpcy5y
ZWZlcmVuY2Uscz10aGlzLmVsZW1lbnQKLXJldHVybigwLHIuaXNDb25zdCkobyk/KHQ9by52YWx1
ZSgpLHRoaXMuYXR0cmlidXRlTWFuYWdlci5zZXRBdHRyaWJ1dGUoZSxzLHQsdGhpcy5uYW1lc3Bh
Y2UpLG51bGwpOihuPXRoaXMuY2FjaGU9bmV3IHIuUmVmZXJlbmNlQ2FjaGUobyksaT1uLnBlZWso
KSx0aGlzLmF0dHJpYnV0ZU1hbmFnZXIuc2V0QXR0cmlidXRlKGUscyxpLHRoaXMubmFtZXNwYWNl
KSxuZXcgZnQodGhpcykpfSxlLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXt2YXIgZT10aGlz
LmVsZW1lbnQsdD10aGlzLm5hbWVzcGFjZSxyPXRoaXMubmFtZSxpPXRoaXMuY2FjaGUsbz1tKGUp
LHM9KDAsbi5leHBlY3QpKGksIm11c3Qgc2VyaWFsaXplIGFmdGVyIGZsdXNoIikucGVlaygpCi1y
ZXR1cm4gdD97ZWxlbWVudDpvLHR5cGU6ImF0dHJpYnV0ZSIsbmFtZXNwYWNlOnQsbmFtZTpyLGxh
c3RWYWx1ZTpzfTp7ZWxlbWVudDpvLHR5cGU6ImF0dHJpYnV0ZSIsbmFtZXNwYWNlOnZvaWQgMD09
PXQ/bnVsbDp0LG5hbWU6cixsYXN0VmFsdWU6c319LGV9KCkKLUVlLmFkZCg0MixmdW5jdGlvbihl
LHQpe3ZhciBuPXQub3AxLHI9dC5vcDIsaT10Lm9wMyxvPWUuY29uc3RhbnRzLmdldFN0cmluZyhu
KSxzPWUuY29uc3RhbnRzLmdldFN0cmluZyhyKSxhPWUuZnJhbWUuZ2V0T3BlcmFuZCgpCi1lLnN0
YWNrKCkuc2V0RHluYW1pY0F0dHJpYnV0ZU5TKHMsbyxhLCEhaSl9KSxFZS5hZGQoNDMsZnVuY3Rp
b24oZSx0KXt2YXIgbj10Lm9wMSxyPXQub3AyLGk9ZS5jb25zdGFudHMuZ2V0U3RyaW5nKG4pLG89
ZS5mcmFtZS5nZXRPcGVyYW5kKCkKLWUuc3RhY2soKS5zZXREeW5hbWljQXR0cmlidXRlKGksbywh
IXIpfSkKLXZhciBmdD1mdW5jdGlvbihlKXtmdW5jdGlvbiBuKG4pe3ZhciByPSgwLHQucG9zc2li
bGVDb25zdHJ1Y3RvclJldHVybikodGhpcyxlLmNhbGwodGhpcykpCi1yZXR1cm4gci50eXBlPSJw
YXRjaC1lbGVtZW50IixyLnRhZz1uLnRhZyxyLm9wZXJhdGlvbj1uLHJ9cmV0dXJuKDAsdC5pbmhl
cml0cykobixlKSxuLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbihlKXt0aGlzLm9wZXJhdGlv
bi5wYXRjaChlLmVudil9LG4ucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybntndWlk
OnRoaXMuX2d1aWQsdHlwZTp0aGlzLnR5cGUsZGV0YWlsczp0aGlzLm9wZXJhdGlvbi50b0pTT04o
KX19LG59KENlKSxodD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5ub2RlPWV9cmV0dXJu
IGUucHJvdG90eXBlLmZpcnN0Tm9kZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGV9LGV9KCks
ZHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMubm9kZT1lfXJldHVybiBlLnByb3RvdHlw
ZS5sYXN0Tm9kZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGV9LGV9KCksbXQ9ZnVuY3Rpb24o
KXtmdW5jdGlvbiBlKGUpe3RoaXMuYm91bmRzPWV9cmV0dXJuIGUucHJvdG90eXBlLnBhcmVudEVs
ZW1lbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ib3VuZHMucGFyZW50RWxlbWVudCgpfSxlLnBy
b3RvdHlwZS5maXJzdE5vZGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ib3VuZHMuZmlyc3ROb2Rl
KCl9LGUucHJvdG90eXBlLmxhc3ROb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYm91bmRzLmxh
c3ROb2RlKCl9LGUucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihlKXt0aGlzLmJvdW5kcz1lfSxl
fSgpLGd0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQscil7dGhpcy5jb25zdHJ1Y3Rpbmc9bnVs
bCx0aGlzLm9wZXJhdGlvbnM9bnVsbCx0aGlzLmVsZW1lbnRTdGFjaz1uZXcgbi5TdGFjayx0aGlz
Lm5leHRTaWJsaW5nU3RhY2s9bmV3IG4uU3RhY2ssdGhpcy5ibG9ja1N0YWNrPW5ldyBuLlN0YWNr
LHRoaXMuZW52PWUsdGhpcy5kb209ZS5nZXRBcHBlbmRPcGVyYXRpb25zKCksdGhpcy51cGRhdGVP
cGVyYXRpb25zPWUuZ2V0RE9NKCksdGhpcy5lbGVtZW50PXQsdGhpcy5uZXh0U2libGluZz1yLHRo
aXMuZGVmYXVsdE9wZXJhdGlvbnM9bmV3IGF0KGUpLHRoaXMuZWxlbWVudFN0YWNrLnB1c2godGhp
cy5lbGVtZW50KSx0aGlzLm5leHRTaWJsaW5nU3RhY2sucHVzaCh0aGlzLm5leHRTaWJsaW5nKX1y
ZXR1cm4gZS5mb3JJbml0aWFsUmVuZGVyPWZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gbmV3IGUodCxu
LHIpfSxlLnJlc3VtZT1mdW5jdGlvbih0LG4scil7dmFyIGk9bi5wYXJlbnRFbGVtZW50KCksbz1u
ZXcgZSh0LGkscikKLXJldHVybiBvLnB1c2hCbG9ja1RyYWNrZXIobiksb30sZS5wcm90b3R5cGUu
ZXhwZWN0Q29uc3RydWN0aW5nPWZ1bmN0aW9uKGUpe3JldHVybigwLG4uZXhwZWN0KSh0aGlzLmNv
bnN0cnVjdGluZyxlKyIgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoaWxlIGNvbnN0cnVjdGluZyBh
biBlbGVtZW50Iil9LGUucHJvdG90eXBlLmV4cGVjdE9wZXJhdGlvbnM9ZnVuY3Rpb24oZSl7cmV0
dXJuKDAsbi5leHBlY3QpKHRoaXMub3BlcmF0aW9ucyxlKyIgc2hvdWxkIG9ubHkgYmUgY2FsbGVk
IHdoaWxlIGNvbnN0cnVjdGluZyBhbiBlbGVtZW50Iil9LGUucHJvdG90eXBlLmJsb2NrPWZ1bmN0
aW9uKCl7cmV0dXJuKDAsbi5leHBlY3QpKHRoaXMuYmxvY2tTdGFjay5jdXJyZW50LCJFeHBlY3Rl
ZCBhIGN1cnJlbnQgYmxvY2sgdHJhY2tlciIpfSxlLnByb3RvdHlwZS5wb3BFbGVtZW50PWZ1bmN0
aW9uKCl7dmFyIGU9dGhpcy5lbGVtZW50U3RhY2ssdD10aGlzLm5leHRTaWJsaW5nU3RhY2sscj1l
LnBvcCgpCi1yZXR1cm4gdC5wb3AoKSx0aGlzLmVsZW1lbnQ9KDAsbi5leHBlY3QpKGUuY3VycmVu
dCwiY2FuJ3QgcG9wIHBhc3QgdGhlIGxhc3QgZWxlbWVudCIpLHRoaXMubmV4dFNpYmxpbmc9dC5j
dXJyZW50LHJ9LGUucHJvdG90eXBlLnB1c2hTaW1wbGVCbG9jaz1mdW5jdGlvbigpe3ZhciBlPW5l
dyB5dCh0aGlzLmVsZW1lbnQpCi1yZXR1cm4gdGhpcy5wdXNoQmxvY2tUcmFja2VyKGUpLGV9LGUu
cHJvdG90eXBlLnB1c2hVcGRhdGFibGVCbG9jaz1mdW5jdGlvbigpe3ZhciBlPW5ldyBidCh0aGlz
LmVsZW1lbnQpCi1yZXR1cm4gdGhpcy5wdXNoQmxvY2tUcmFja2VyKGUpLGV9LGUucHJvdG90eXBl
LnB1c2hCbG9ja1RyYWNrZXI9ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2
b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXSxuPXRoaXMuYmxvY2tTdGFjay5jdXJy
ZW50Ci1yZXR1cm4gbnVsbCE9PW4mJihuLm5ld0Rlc3Ryb3lhYmxlKGUpLHR8fG4ubmV3Qm91bmRz
KGUpKSx0aGlzLmJsb2NrU3RhY2sucHVzaChlKSxlfSxlLnByb3RvdHlwZS5wdXNoQmxvY2tMaXN0
PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBfdCh0aGlzLmVsZW1lbnQsZSksbj10aGlzLmJsb2NrU3Rh
Y2suY3VycmVudAotcmV0dXJuIG51bGwhPT1uJiYobi5uZXdEZXN0cm95YWJsZSh0KSxuLm5ld0Jv
dW5kcyh0KSksdGhpcy5ibG9ja1N0YWNrLnB1c2godCksdH0sZS5wcm90b3R5cGUucG9wQmxvY2s9
ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ibG9jaygpLmZpbmFsaXplKHRoaXMpLCgwLG4uZXhwZWN0
KSh0aGlzLmJsb2NrU3RhY2sucG9wKCksIkV4cGVjdGVkIHBvcEJsb2NrIHRvIHJldHVybiBhIGJs
b2NrIil9LGUucHJvdG90eXBlLm9wZW5FbGVtZW50PWZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50
cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp0aGlzLmRlZmF1
bHRPcGVyYXRpb25zLG49dGhpcy5kb20uY3JlYXRlRWxlbWVudChlLHRoaXMuZWxlbWVudCkKLXJl
dHVybiB0aGlzLmNvbnN0cnVjdGluZz1uLHRoaXMub3BlcmF0aW9ucz10LG59LGUucHJvdG90eXBl
LmZsdXNoRWxlbWVudD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuZWxlbWVudCx0PSgwLG4uZXhwZWN0
KSh0aGlzLmNvbnN0cnVjdGluZywiZmx1c2hFbGVtZW50IHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3
aGVuIGNvbnN0cnVjdGluZyBhbiBlbGVtZW50IikKLXRoaXMuZG9tLmluc2VydEJlZm9yZShlLHQs
dGhpcy5uZXh0U2libGluZyksdGhpcy5jb25zdHJ1Y3Rpbmc9bnVsbCx0aGlzLm9wZXJhdGlvbnM9
bnVsbCx0aGlzLnB1c2hFbGVtZW50KHQpLHRoaXMuYmxvY2soKS5vcGVuRWxlbWVudCh0KX0sZS5w
cm90b3R5cGUucHVzaFJlbW90ZUVsZW1lbnQ9ZnVuY3Rpb24oZSl7dGhpcy5wdXNoRWxlbWVudChl
KQotdmFyIHQ9bmV3IHZ0KGUpCi10aGlzLnB1c2hCbG9ja1RyYWNrZXIodCwhMCl9LGUucHJvdG90
eXBlLnBvcFJlbW90ZUVsZW1lbnQ9ZnVuY3Rpb24oKXt0aGlzLnBvcEJsb2NrKCksdGhpcy5wb3BF
bGVtZW50KCl9LGUucHJvdG90eXBlLnB1c2hFbGVtZW50PWZ1bmN0aW9uKGUpe3RoaXMuZWxlbWVu
dD1lLHRoaXMuZWxlbWVudFN0YWNrLnB1c2goZSksdGhpcy5uZXh0U2libGluZz1udWxsLHRoaXMu
bmV4dFNpYmxpbmdTdGFjay5wdXNoKG51bGwpfSxlLnByb3RvdHlwZS5uZXdEZXN0cm95YWJsZT1m
dW5jdGlvbihlKXt0aGlzLmJsb2NrKCkubmV3RGVzdHJveWFibGUoZSl9LGUucHJvdG90eXBlLm5l
d0JvdW5kcz1mdW5jdGlvbihlKXt0aGlzLmJsb2NrKCkubmV3Qm91bmRzKGUpfSxlLnByb3RvdHlw
ZS5hcHBlbmRUZXh0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZG9tLG49dC5jcmVhdGVUZXh0Tm9k
ZShlKQotcmV0dXJuIHQuaW5zZXJ0QmVmb3JlKHRoaXMuZWxlbWVudCxuLHRoaXMubmV4dFNpYmxp
bmcpLHRoaXMuYmxvY2soKS5uZXdOb2RlKG4pLG59LGUucHJvdG90eXBlLmFwcGVuZENvbW1lbnQ9
ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5kb20sbj10LmNyZWF0ZUNvbW1lbnQoZSkKLXJldHVybiB0
Lmluc2VydEJlZm9yZSh0aGlzLmVsZW1lbnQsbix0aGlzLm5leHRTaWJsaW5nKSx0aGlzLmJsb2Nr
KCkubmV3Tm9kZShuKSxufSxlLnByb3RvdHlwZS5zZXRTdGF0aWNBdHRyaWJ1dGU9ZnVuY3Rpb24o
ZSx0KXt0aGlzLmV4cGVjdE9wZXJhdGlvbnMoInNldFN0YXRpY0F0dHJpYnV0ZSIpLmFkZFN0YXRp
Y0F0dHJpYnV0ZSh0aGlzLmV4cGVjdENvbnN0cnVjdGluZygic2V0U3RhdGljQXR0cmlidXRlIiks
ZSx0KX0sZS5wcm90b3R5cGUuc2V0U3RhdGljQXR0cmlidXRlTlM9ZnVuY3Rpb24oZSx0LG4pe3Ro
aXMuZXhwZWN0T3BlcmF0aW9ucygic2V0U3RhdGljQXR0cmlidXRlTlMiKS5hZGRTdGF0aWNBdHRy
aWJ1dGVOUyh0aGlzLmV4cGVjdENvbnN0cnVjdGluZygic2V0U3RhdGljQXR0cmlidXRlTlMiKSxl
LHQsbil9LGUucHJvdG90eXBlLnNldER5bmFtaWNBdHRyaWJ1dGU9ZnVuY3Rpb24oZSx0LG4pe3Ro
aXMuZXhwZWN0T3BlcmF0aW9ucygic2V0RHluYW1pY0F0dHJpYnV0ZSIpLmFkZER5bmFtaWNBdHRy
aWJ1dGUodGhpcy5leHBlY3RDb25zdHJ1Y3RpbmcoInNldER5bmFtaWNBdHRyaWJ1dGUiKSxlLHQs
bil9LGUucHJvdG90eXBlLnNldER5bmFtaWNBdHRyaWJ1dGVOUz1mdW5jdGlvbihlLHQsbixyKXt0
aGlzLmV4cGVjdE9wZXJhdGlvbnMoInNldER5bmFtaWNBdHRyaWJ1dGVOUyIpLmFkZER5bmFtaWNB
dHRyaWJ1dGVOUyh0aGlzLmV4cGVjdENvbnN0cnVjdGluZygic2V0RHluYW1pY0F0dHJpYnV0ZU5T
IiksZSx0LG4scil9LGUucHJvdG90eXBlLmNsb3NlRWxlbWVudD1mdW5jdGlvbigpe3RoaXMuYmxv
Y2soKS5jbG9zZUVsZW1lbnQoKSx0aGlzLnBvcEVsZW1lbnQoKX0sZX0oKSx5dD1mdW5jdGlvbigp
e2Z1bmN0aW9uIGUoZSl7dGhpcy5wYXJlbnQ9ZSx0aGlzLmZpcnN0PW51bGwsdGhpcy5sYXN0PW51
bGwsdGhpcy5kZXN0cm95YWJsZXM9bnVsbCx0aGlzLm5lc3Rpbmc9MH1yZXR1cm4gZS5wcm90b3R5
cGUuZGVzdHJveT1mdW5jdGlvbigpe3ZhciBlLHQ9dGhpcy5kZXN0cm95YWJsZXMKLWlmKHQmJnQu
bGVuZ3RoKWZvcihlPTA7ZTx0Lmxlbmd0aDtlKyspdFtlXS5kZXN0cm95KCl9LGUucHJvdG90eXBl
LnBhcmVudEVsZW1lbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJlbnR9LGUucHJvdG90eXBl
LmZpcnN0Tm9kZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZpcnN0JiZ0aGlzLmZpcnN0LmZpcnN0
Tm9kZSgpfSxlLnByb3RvdHlwZS5sYXN0Tm9kZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxhc3Qm
JnRoaXMubGFzdC5sYXN0Tm9kZSgpfSxlLnByb3RvdHlwZS5vcGVuRWxlbWVudD1mdW5jdGlvbihl
KXt0aGlzLm5ld05vZGUoZSksdGhpcy5uZXN0aW5nKyt9LGUucHJvdG90eXBlLmNsb3NlRWxlbWVu
dD1mdW5jdGlvbigpe3RoaXMubmVzdGluZy0tfSxlLnByb3RvdHlwZS5uZXdOb2RlPWZ1bmN0aW9u
KGUpezA9PT10aGlzLm5lc3RpbmcmJih0aGlzLmZpcnN0fHwodGhpcy5maXJzdD1uZXcgaHQoZSkp
LHRoaXMubGFzdD1uZXcgZHQoZSkpfSxlLnByb3RvdHlwZS5uZXdCb3VuZHM9ZnVuY3Rpb24oZSl7
MD09PXRoaXMubmVzdGluZyYmKHRoaXMuZmlyc3R8fCh0aGlzLmZpcnN0PWUpLHRoaXMubGFzdD1l
KX0sZS5wcm90b3R5cGUubmV3RGVzdHJveWFibGU9ZnVuY3Rpb24oZSl7dGhpcy5kZXN0cm95YWJs
ZXM9dGhpcy5kZXN0cm95YWJsZXN8fFtdLHRoaXMuZGVzdHJveWFibGVzLnB1c2goZSl9LGUucHJv
dG90eXBlLmZpbmFsaXplPWZ1bmN0aW9uKGUpe3RoaXMuZmlyc3R8fGUuYXBwZW5kQ29tbWVudCgi
Iil9LGV9KCksdnQ9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbigpe3JldHVybigwLHQucG9zc2libGVD
b25zdHJ1Y3RvclJldHVybikodGhpcyxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9cmV0dXJuKDAs
dC5pbmhlcml0cykobixlKSxuLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7ZS5wcm90b3R5
cGUuZGVzdHJveS5jYWxsKHRoaXMpLGEodGhpcyl9LG59KHl0KSxidD1mdW5jdGlvbihlKXtmdW5j
dGlvbiBuKCl7cmV0dXJuKDAsdC5wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKSh0aGlzLGUuYXBw
bHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4oMCx0LmluaGVyaXRzKShuLGUpLG4ucHJvdG90eXBl
LnJlc2V0PWZ1bmN0aW9uKGUpe3ZhciB0LG49dGhpcy5kZXN0cm95YWJsZXMKLWlmKG4mJm4ubGVu
Z3RoKWZvcih0PTA7dDxuLmxlbmd0aDt0KyspZS5kaWREZXN0cm95KG5bdF0pCi12YXIgcj1hKHRo
aXMpCi1yZXR1cm4gdGhpcy5kZXN0cm95YWJsZXM9bnVsbCx0aGlzLmZpcnN0PW51bGwsdGhpcy5s
YXN0PW51bGwscn0sbn0oeXQpLF90PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMucGFy
ZW50PWUsdGhpcy5ib3VuZExpc3Q9dCx0aGlzLnBhcmVudD1lLHRoaXMuYm91bmRMaXN0PXR9cmV0
dXJuIGUucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLmJvdW5kTGlzdC5mb3JFYWNo
Tm9kZShmdW5jdGlvbihlKXtyZXR1cm4gZS5kZXN0cm95KCl9KX0sZS5wcm90b3R5cGUucGFyZW50
RWxlbWVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcmVudH0sZS5wcm90b3R5cGUuZmlyc3RO
b2RlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5ib3VuZExpc3QuaGVhZCgpCi1yZXR1cm4gZSYmZS5m
aXJzdE5vZGUoKX0sZS5wcm90b3R5cGUubGFzdE5vZGU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmJv
dW5kTGlzdC50YWlsKCkKLXJldHVybiBlJiZlLmxhc3ROb2RlKCl9LGUucHJvdG90eXBlLm9wZW5F
bGVtZW50PWZ1bmN0aW9uKCl7KDAsbi5hc3NlcnQpKCExLCJDYW5ub3Qgb3BlbkVsZW1lbnQgZGly
ZWN0bHkgaW5zaWRlIGEgYmxvY2sgbGlzdCIpfSxlLnByb3RvdHlwZS5jbG9zZUVsZW1lbnQ9ZnVu
Y3Rpb24oKXsoMCxuLmFzc2VydCkoITEsIkNhbm5vdCBjbG9zZUVsZW1lbnQgZGlyZWN0bHkgaW5z
aWRlIGEgYmxvY2sgbGlzdCIpfSxlLnByb3RvdHlwZS5uZXdOb2RlPWZ1bmN0aW9uKCl7KDAsbi5h
c3NlcnQpKCExLCJDYW5ub3QgY3JlYXRlIGEgbmV3IG5vZGUgZGlyZWN0bHkgaW5zaWRlIGEgYmxv
Y2sgbGlzdCIpfSxlLnByb3RvdHlwZS5uZXdCb3VuZHM9ZnVuY3Rpb24oKXt9LGUucHJvdG90eXBl
Lm5ld0Rlc3Ryb3lhYmxlPWZ1bmN0aW9uKCl7fSxlLnByb3RvdHlwZS5maW5hbGl6ZT1mdW5jdGlv
bigpe30sZX0oKSx3dD1mdW5jdGlvbihlKXtmdW5jdGlvbiBuKG4pe3ZhciByPSgwLHQucG9zc2li
bGVDb25zdHJ1Y3RvclJldHVybikodGhpcyxlLmNhbGwodGhpcykpCi1yZXR1cm4gci50eXBlPSJ2
YWx1ZSIsci5yZWZlcmVuY2U9ZmUuY3JlYXRlKG4pLHJ9cmV0dXJuKDAsdC5pbmhlcml0cykobixl
KSxuLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlZmVyZW5jZX0s
bi5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMu
cmVmZXJlbmNlLnZhbHVlKCkpfSxufShpdCksRXQ9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbihuKXt2
YXIgcj0oMCx0LnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4pKHRoaXMsZS5jYWxsKHRoaXMpKQot
cmV0dXJuIHIuaW5uZXI9bixyLnR5cGU9Imhhcy1ibG9jayIscn1yZXR1cm4oMCx0LmluaGVyaXRz
KShuLGUpLG4ucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuaW5uZXIu
ZXZhbHVhdGUoZSkKLXJldHVybiBmZS5jcmVhdGUoISF0KX0sbi5wcm90b3R5cGUudG9KU09OPWZ1
bmN0aW9uKCl7cmV0dXJuImhhcy1ibG9jaygiK3RoaXMuaW5uZXIudG9KU09OKCkrIikifSxufShp
dCkseHQ9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbihuKXt2YXIgcj0oMCx0LnBvc3NpYmxlQ29uc3Ry
dWN0b3JSZXR1cm4pKHRoaXMsZS5jYWxsKHRoaXMpKQotcmV0dXJuIHIuaW5uZXI9bixyLnR5cGU9
Imhhcy1ibG9jay1wYXJhbXMiLHJ9cmV0dXJuKDAsdC5pbmhlcml0cykobixlKSxuLnByb3RvdHlw
ZS5ldmFsdWF0ZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmlubmVyLmV2YWx1YXRlKGUpLG49dCYm
dC5zeW1ib2xUYWJsZS5nZXRTeW1ib2xzKCkubG9jYWxzCi1yZXR1cm4gZmUuY3JlYXRlKCEhbil9
LG4ucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiJoYXMtYmxvY2stcGFyYW1zKCIr
dGhpcy5pbm5lci50b0pTT04oKSsiKSJ9LG59KGl0KSxDdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUo
ZSx0KXt0aGlzLnN5bWJvbD1lLHRoaXMuZGVidWc9dH1yZXR1cm4gZS5wcm90b3R5cGUuZXZhbHVh
dGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuc2NvcGUoKS5nZXRCbG9jayh0aGlzLnN5bWJvbCl9LGUu
cHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiJnZXQtYmxvY2soJCIrdGhpcy5zeW1i
b2wrIigiK3RoaXMuZGVidWcrIikpIn0sZX0oKSxPdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0
KXt0aGlzLnN5bWJvbD1lLHRoaXMubmFtZT10fXJldHVybiBlLnByb3RvdHlwZS5ldmFsdWF0ZT1m
dW5jdGlvbihlKXt2YXIgdD10aGlzLnN5bWJvbCxuPXRoaXMubmFtZQotcmV0dXJuIGUuc2NvcGUo
KS5nZXRQYXJ0aWFsQXJncyh0KS5ibG9ja3Nbbl19LGUucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlv
bigpe3JldHVybiJnZXQtYmxvY2soJCIrdGhpcy5zeW1ib2wrIigkQVJHUykuIit0aGlzLm5hbWUr
IikpIn0sZX0oKSxBdD1mdW5jdGlvbihlLHQpe3RoaXMuc3RhcnQ9ZSx0aGlzLmVuZD10fSxUdD1m
dW5jdGlvbihlKXtmdW5jdGlvbiBuKG4scixpKXt2YXIgbz0oMCx0LnBvc3NpYmxlQ29uc3RydWN0
b3JSZXR1cm4pKHRoaXMsZS5jYWxsKHRoaXMsbixyKSkKLXJldHVybiBvLnN5bWJvbHM9aSxvfXJl
dHVybigwLHQuaW5oZXJpdHMpKG4sZSksbn0oQXQpLFN0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgp
e3RoaXMubGFiZWxzPSgwLG4uZGljdCkoKSx0aGlzLmp1bXBzPVtdLHRoaXMucmFuZ2VzPVtdfXJl
dHVybiBlLnByb3RvdHlwZS5sYWJlbD1mdW5jdGlvbihlLHQpe3RoaXMubGFiZWxzW2VdPXR9LGUu
cHJvdG90eXBlLmp1bXA9ZnVuY3Rpb24oZSx0LG4pe3RoaXMuanVtcHMucHVzaCh7YXQ6ZSx0YXJn
ZXQ6bixUYXJnZXQ6dH0pfSxlLnByb3RvdHlwZS5yYW5nZT1mdW5jdGlvbihlLHQsbixyKXt0aGlz
LnJhbmdlcy5wdXNoKHthdDplLHN0YXJ0Om4sZW5kOnIsUmFuZ2U6dH0pfSxlLnByb3RvdHlwZS5w
YXRjaD1mdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxvLHMscixhLHUsbCxjCi1mb3IodD0wO3Q8dGhp
cy5qdW1wcy5sZW5ndGg7dCsrKW49dGhpcy5qdW1wc1t0XSxyPW4uYXQsaT1uLnRhcmdldCxvPW4u
VGFyZ2V0LGUuc2V0KHIsbyx0aGlzLmxhYmVsc1tpXSkKLWZvcihjPTA7Yzx0aGlzLnJhbmdlcy5s
ZW5ndGg7YysrKXM9dGhpcy5yYW5nZXNbY10scj1zLmF0LGE9cy5zdGFydCx1PXMuZW5kLGw9cy5S
YW5nZSxlLnNldChyLGwsdGhpcy5sYWJlbHNbYV0sdGhpcy5sYWJlbHNbdV0tMSl9LGV9KCksUnQ9
ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxyKXt0aGlzLnN5bWJvbFRhYmxlPWUsdGhpcy5lbnY9
dCx0aGlzLnByb2dyYW09cix0aGlzLmxhYmVsc1N0YWNrPW5ldyBuLlN0YWNrLHRoaXMuY29uc3Rh
bnRzPXQuY29uc3RhbnRzLHRoaXMuc3RhcnQ9ci5uZXh0fXJldHVybiBlLnByb3RvdHlwZS5vcGNv
ZGU9ZnVuY3Rpb24oZSx0LG4scil7dGhpcy5wdXNoKGUsdCxuLHIpfSxlLnByb3RvdHlwZS5wdXNo
PWZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRz
WzFdP2FyZ3VtZW50c1sxXTowLG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVu
dHNbMl0/YXJndW1lbnRzWzJdOjAscj1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3Vt
ZW50c1szXT9hcmd1bWVudHNbM106MAotdGhpcy5wcm9ncmFtLnB1c2goZSx0LG4scil9LGUucHJv
dG90eXBlLnN0YXJ0TGFiZWxzPWZ1bmN0aW9uKCl7dGhpcy5sYWJlbHNTdGFjay5wdXNoKG5ldyBT
dCl9LGUucHJvdG90eXBlLnN0b3BMYWJlbHM9ZnVuY3Rpb24oKXsoMCxuLmV4cGVjdCkodGhpcy5s
YWJlbHNTdGFjay5wb3AoKSwidW5iYWxhbmNlZCBwdXNoIGFuZCBwb3AgbGFiZWxzIikucGF0Y2go
dGhpcy5wcm9ncmFtKX0sZS5wcm90b3R5cGUucHV0UGFydGlhbERlZmluaXRpb249ZnVuY3Rpb24o
ZSl7dmFyIHQ9dGhpcy5jb25zdGFudHMub3RoZXIoZSkKLXRoaXMub3Bjb2RlKDUwLHQpfSxlLnBy
b3RvdHlwZS5wdXREeW5hbWljUGFydGlhbERlZmluaXRpb249ZnVuY3Rpb24oKXt0aGlzLm9wY29k
ZSg0OSx0aGlzLmNvbnN0YW50cy5vdGhlcih0aGlzLnN5bWJvbFRhYmxlKSl9LGUucHJvdG90eXBl
LmV2YWx1YXRlUGFydGlhbD1mdW5jdGlvbigpe3RoaXMub3Bjb2RlKDUxLHRoaXMuY29uc3RhbnRz
Lm90aGVyKHRoaXMuc3ltYm9sVGFibGUpLHRoaXMuY29uc3RhbnRzLm90aGVyKCgwLG4uZGljdCko
KSkpfSxlLnByb3RvdHlwZS5wdXRDb21wb25lbnREZWZpbml0aW9uPWZ1bmN0aW9uKGUpe3RoaXMu
b3Bjb2RlKDIzLHRoaXMub3RoZXIoZSkpfSxlLnByb3RvdHlwZS5wdXREeW5hbWljQ29tcG9uZW50
RGVmaW5pdGlvbj1mdW5jdGlvbigpe3RoaXMub3Bjb2RlKDIyKX0sZS5wcm90b3R5cGUub3BlbkNv
bXBvbmVudD1mdW5jdGlvbihlLHQpe3RoaXMub3Bjb2RlKDI0LHRoaXMuYXJncyhlKSx0P3RoaXMu
YmxvY2sodCk6MCl9LGUucHJvdG90eXBlLmRpZENyZWF0ZUVsZW1lbnQ9ZnVuY3Rpb24oKXt0aGlz
Lm9wY29kZSgyNSl9LGUucHJvdG90eXBlLnNoYWRvd0F0dHJpYnV0ZXM9ZnVuY3Rpb24oKXt0aGlz
Lm9wY29kZSgyNiksdGhpcy5vcGNvZGUoMjEpfSxlLnByb3RvdHlwZS5kaWRSZW5kZXJMYXlvdXQ9
ZnVuY3Rpb24oKXt0aGlzLm9wY29kZSgyNyl9LGUucHJvdG90eXBlLmNsb3NlQ29tcG9uZW50PWZ1
bmN0aW9uKCl7dGhpcy5vcGNvZGUoMjgpfSxlLnByb3RvdHlwZS5keW5hbWljQ29udGVudD1mdW5j
dGlvbihlKXt0aGlzLm9wY29kZSgzMSx0aGlzLm90aGVyKGUpKX0sZS5wcm90b3R5cGUuY2F1dGlv
dXNBcHBlbmQ9ZnVuY3Rpb24oKXt0aGlzLmR5bmFtaWNDb250ZW50KG5ldyBwcil9LGUucHJvdG90
eXBlLnRydXN0aW5nQXBwZW5kPWZ1bmN0aW9uKCl7dGhpcy5keW5hbWljQ29udGVudChuZXcgbXIp
fSxlLnByb3RvdHlwZS5ndWFyZGVkQ2F1dGlvdXNBcHBlbmQ9ZnVuY3Rpb24oZSl7dGhpcy5keW5h
bWljQ29udGVudChuZXcgaHIodGhpcy5jb21waWxlRXhwcmVzc2lvbihlKSx0aGlzLnN5bWJvbFRh
YmxlKSl9LGUucHJvdG90eXBlLmd1YXJkZWRUcnVzdGluZ0FwcGVuZD1mdW5jdGlvbihlKXt0aGlz
LmR5bmFtaWNDb250ZW50KG5ldyB5cih0aGlzLmNvbXBpbGVFeHByZXNzaW9uKGUpLHRoaXMuc3lt
Ym9sVGFibGUpKX0sZS5wcm90b3R5cGUudGV4dD1mdW5jdGlvbihlKXt0aGlzLm9wY29kZSgyOSx0
aGlzLmNvbnN0YW50cy5zdHJpbmcoZSkpfSxlLnByb3RvdHlwZS5vcGVuUHJpbWl0aXZlRWxlbWVu
dD1mdW5jdGlvbihlKXt0aGlzLm9wY29kZSgzMix0aGlzLmNvbnN0YW50cy5zdHJpbmcoZSkpfSxl
LnByb3RvdHlwZS5vcGVuQ29tcG9uZW50RWxlbWVudD1mdW5jdGlvbihlKXt0aGlzLm9wY29kZSgz
NSx0aGlzLmNvbnN0YW50cy5zdHJpbmcoZSkpfSxlLnByb3RvdHlwZS5vcGVuRHluYW1pY1ByaW1p
dGl2ZUVsZW1lbnQ9ZnVuY3Rpb24oKXt0aGlzLm9wY29kZSgzNil9LGUucHJvdG90eXBlLmZsdXNo
RWxlbWVudD1mdW5jdGlvbigpe3RoaXMub3Bjb2RlKDM3KX0sZS5wcm90b3R5cGUuY2xvc2VFbGVt
ZW50PWZ1bmN0aW9uKCl7dGhpcy5vcGNvZGUoMzgpfSxlLnByb3RvdHlwZS5zdGF0aWNBdHRyPWZ1
bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzLmNvbnN0YW50cy5zdHJpbmcoZSksaT10P3RoaXMuY29u
c3RhbnRzLnN0cmluZyh0KTowLG89dGhpcy5jb25zdGFudHMuc3RyaW5nKG4pCi10aGlzLm9wY29k
ZSg0MCxyLG8saSl9LGUucHJvdG90eXBlLmR5bmFtaWNBdHRyTlM9ZnVuY3Rpb24oZSx0LG4pe3Zh
ciByPXRoaXMuY29uc3RhbnRzLnN0cmluZyhlKSxpPXRoaXMuY29uc3RhbnRzLnN0cmluZyh0KQot
dGhpcy5vcGNvZGUoNDIscixpLDB8bil9LGUucHJvdG90eXBlLmR5bmFtaWNBdHRyPWZ1bmN0aW9u
KGUsdCl7dmFyIG49dGhpcy5jb25zdGFudHMuc3RyaW5nKGUpCi10aGlzLm9wY29kZSg0MyxuLDB8
dCl9LGUucHJvdG90eXBlLmNvbW1lbnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5jb25zdGFudHMu
c3RyaW5nKGUpCi10aGlzLm9wY29kZSgzMCx0KX0sZS5wcm90b3R5cGUubW9kaWZpZXI9ZnVuY3Rp
b24oZSx0KXt2YXIgbj10aGlzLmNvbnN0YW50cy5leHByZXNzaW9uKHRoaXMuY29tcGlsZSh0KSks
cj10aGlzLmVudi5sb29rdXBNb2RpZmllcihlLHRoaXMuc3ltYm9sVGFibGUpLGk9dGhpcy5jb25z
dGFudHMub3RoZXIociksbz10aGlzLmNvbnN0YW50cy5zdHJpbmcoZSkKLXRoaXMub3Bjb2RlKDQx
LG8saSxuKX0sZS5wcm90b3R5cGUucHV0SXRlcmF0b3I9ZnVuY3Rpb24oKXt0aGlzLm9wY29kZSg0
NCl9LGUucHJvdG90eXBlLmVudGVyTGlzdD1mdW5jdGlvbihlLHQpe3RoaXMucHVzaCg0NSksdGhp
cy5sYWJlbHMucmFuZ2UodGhpcy5wb3MsNDUsZSx0KX0sZS5wcm90b3R5cGUuZXhpdExpc3Q9ZnVu
Y3Rpb24oKXt0aGlzLm9wY29kZSg0Nil9LGUucHJvdG90eXBlLmVudGVyV2l0aEtleT1mdW5jdGlv
bihlLHQpe3RoaXMucHVzaCg0NyksdGhpcy5sYWJlbHMucmFuZ2UodGhpcy5wb3MsNDcsZSx0KX0s
ZS5wcm90b3R5cGUubmV4dEl0ZXI9ZnVuY3Rpb24oZSl7dGhpcy5wdXNoKDQ4KSx0aGlzLmxhYmVs
cy5qdW1wKHRoaXMucG9zLDQ4LGUpfSxlLnByb3RvdHlwZS5vcGVuQmxvY2s9ZnVuY3Rpb24oZSx0
KXt2YXIgbj10aGlzLmNvbnN0YW50cy5leHByZXNzaW9uKHRoaXMuY29tcGlsZShlKSkscj10aGlz
LmNvbnN0YW50cy5vdGhlcih0KQotdGhpcy5vcGNvZGUoMjAscixuKX0sZS5wcm90b3R5cGUuY2xv
c2VCbG9jaz1mdW5jdGlvbigpe3RoaXMub3Bjb2RlKDIxKX0sZS5wcm90b3R5cGUucHVzaFJlbW90
ZUVsZW1lbnQ9ZnVuY3Rpb24oKXt0aGlzLm9wY29kZSgzMyl9LGUucHJvdG90eXBlLnBvcFJlbW90
ZUVsZW1lbnQ9ZnVuY3Rpb24oKXt0aGlzLm9wY29kZSgzNCl9LGUucHJvdG90eXBlLnBvcEVsZW1l
bnQ9ZnVuY3Rpb24oKXt0aGlzLm9wY29kZSgzOSl9LGUucHJvdG90eXBlLmxhYmVsPWZ1bmN0aW9u
KGUpe3RoaXMubGFiZWxzLmxhYmVsKGUsdGhpcy5uZXh0UG9zKX0sZS5wcm90b3R5cGUucHVzaENo
aWxkU2NvcGU9ZnVuY3Rpb24oKXt0aGlzLm9wY29kZSgwKX0sZS5wcm90b3R5cGUucG9wU2NvcGU9
ZnVuY3Rpb24oKXt0aGlzLm9wY29kZSgxKX0sZS5wcm90b3R5cGUucHVzaER5bmFtaWNTY29wZT1m
dW5jdGlvbigpe3RoaXMub3Bjb2RlKDIpfSxlLnByb3RvdHlwZS5wb3BEeW5hbWljU2NvcGU9ZnVu
Y3Rpb24oKXt0aGlzLm9wY29kZSgzKX0sZS5wcm90b3R5cGUucHV0TnVsbD1mdW5jdGlvbigpe3Ro
aXMub3Bjb2RlKDQsdGhpcy5jb25zdGFudHMuTlVMTF9SRUZFUkVOQ0UpfSxlLnByb3RvdHlwZS5w
dXRWYWx1ZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmNvbnN0YW50cy5leHByZXNzaW9uKHRoaXMu
Y29tcGlsZUV4cHJlc3Npb24oZSkpCi10aGlzLm9wY29kZSg1LHQpfSxlLnByb3RvdHlwZS5wdXRB
cmdzPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuY29uc3RhbnRzLmV4cHJlc3Npb24odGhpcy5jb21w
aWxlKGUpKQotdGhpcy5vcGNvZGUoNix0KX0sZS5wcm90b3R5cGUuYmluZER5bmFtaWNTY29wZT1m
dW5jdGlvbihlKXt0aGlzLm9wY29kZSgxMix0aGlzLm5hbWVzKGUpKX0sZS5wcm90b3R5cGUuYmlu
ZFBvc2l0aW9uYWxBcmdzPWZ1bmN0aW9uKGUsdCl7dGhpcy5vcGNvZGUoNyx0aGlzLm5hbWVzKGUp
LHRoaXMuc3ltYm9scyh0KSl9LGUucHJvdG90eXBlLmJpbmROYW1lZEFyZ3M9ZnVuY3Rpb24oZSx0
KXt0aGlzLm9wY29kZSg4LHRoaXMubmFtZXMoZSksdGhpcy5zeW1ib2xzKHQpKX0sZS5wcm90b3R5
cGUuYmluZEJsb2Nrcz1mdW5jdGlvbihlLHQpe3RoaXMub3Bjb2RlKDksdGhpcy5uYW1lcyhlKSx0
aGlzLnN5bWJvbHModCkpfSxlLnByb3RvdHlwZS5lbnRlcj1mdW5jdGlvbihlLHQpe3RoaXMucHVz
aCgxMyksdGhpcy5sYWJlbHMucmFuZ2UodGhpcy5wb3MsMTMsZSx0KX0sZS5wcm90b3R5cGUuZXhp
dD1mdW5jdGlvbigpe3RoaXMub3Bjb2RlKDE0KX0sZS5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rp
b24oZSl7dmFyIHQ9dGhpcy5jb25zdGFudHMuYmxvY2soZSkKLXRoaXMub3Bjb2RlKDE1LHQpfSxl
LnByb3RvdHlwZS50ZXN0PWZ1bmN0aW9uKGUpe3ZhciB0PXZvaWQgMAotaWYoImNvbnN0Ij09PWUp
dD1PZQotZWxzZSBpZigic2ltcGxlIj09PWUpdD1BZQotZWxzZSBpZigiZW52aXJvbm1lbnQiPT09
ZSl0PVRlCi1lbHNle2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcigidW5y
ZWFjaGFibGUiKQotdD1lfXZhciBuPXRoaXMuY29uc3RhbnRzLmZ1bmN0aW9uKHQpCi10aGlzLm9w
Y29kZSgxOSxuKX0sZS5wcm90b3R5cGUuanVtcD1mdW5jdGlvbihlKXt0aGlzLnB1c2goMTYpLHRo
aXMubGFiZWxzLmp1bXAodGhpcy5wb3MsMTYsZSl9LGUucHJvdG90eXBlLmp1bXBJZj1mdW5jdGlv
bihlKXt0aGlzLnB1c2goMTcpLHRoaXMubGFiZWxzLmp1bXAodGhpcy5wb3MsMTcsZSl9LGUucHJv
dG90eXBlLmp1bXBVbmxlc3M9ZnVuY3Rpb24oZSl7dGhpcy5wdXNoKDE4KSx0aGlzLmxhYmVscy5q
dW1wKHRoaXMucG9zLDE4LGUpfSxlLnByb3RvdHlwZS5uYW1lcz1mdW5jdGlvbihlKXt2YXIgdD10
aGlzLG49ZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHQuY29uc3RhbnRzLnN0cmluZyhlKX0pCi1y
ZXR1cm4gdGhpcy5jb25zdGFudHMuYXJyYXkobil9LGUucHJvdG90eXBlLnN5bWJvbHM9ZnVuY3Rp
b24oZSl7cmV0dXJuIHRoaXMuY29uc3RhbnRzLmFycmF5KGUpfSxlLnByb3RvdHlwZS5vdGhlcj1m
dW5jdGlvbihlKXtyZXR1cm4gdGhpcy5jb25zdGFudHMub3RoZXIoZSl9LGUucHJvdG90eXBlLmFy
Z3M9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuY29uc3RhbnRzLmV4cHJlc3Npb24odGhpcy5jb21w
aWxlKGUpKX0sZS5wcm90b3R5cGUuYmxvY2s9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuY29uc3Rh
bnRzLmJsb2NrKGUpfSwoMCx0LmNyZWF0ZUNsYXNzKShlLFt7a2V5OiJlbmQiLGdldDpmdW5jdGlv
bigpe3JldHVybiB0aGlzLnByb2dyYW0ubmV4dH19LHtrZXk6InBvcyIsZ2V0OmZ1bmN0aW9uKCl7
cmV0dXJuIHRoaXMucHJvZ3JhbS5jdXJyZW50fX0se2tleToibmV4dFBvcyIsZ2V0OmZ1bmN0aW9u
KCl7cmV0dXJuIHRoaXMucHJvZ3JhbS5uZXh0fX0se2tleToibGFiZWxzIixnZXQ6ZnVuY3Rpb24o
KXtyZXR1cm4oMCxuLmV4cGVjdCkodGhpcy5sYWJlbHNTdGFjay5jdXJyZW50LCJidWc6IG5vdCBp
biBhIGxhYmVsIHN0YWNrIil9fV0pLGV9KCksa3Q9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbihuLHIp
e3ZhciBpPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50
c1syXTpyLnByb2dyYW0sbz0oMCx0LnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4pKHRoaXMsZS5j
YWxsKHRoaXMsbixyLGkpKQotcmV0dXJuIG8uY29tcG9uZW50PW5ldyBJdChvKSxvfXJldHVybigw
LHQuaW5oZXJpdHMpKG4sZSksbi5wcm90b3R5cGUuY29tcGlsZT1mdW5jdGlvbihlKXtyZXR1cm4g
ZyhlKT9lLmNvbXBpbGUodGhpcyk6ZX0sbi5wcm90b3R5cGUuY29tcGlsZUV4cHJlc3Npb249ZnVu
Y3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBpdD9lOlMoZSx0aGlzKX0sbi5wcm90b3R5cGUu
YmluZFBvc2l0aW9uYWxBcmdzRm9yTG9jYWxzPWZ1bmN0aW9uKGUpe3ZhciB0LG49T2JqZWN0Lmtl
eXMoZSkscj1uZXcgQXJyYXkobi5sZW5ndGgpCi1mb3IodD0wO3Q8bi5sZW5ndGg7dCsrKXJbdF09
ZVtuW3RdXQotdGhpcy5vcGNvZGUoNyx0aGlzLnN5bWJvbHMocikpfSxuLnByb3RvdHlwZS5wcmVs
dWRlRm9yTGF5b3V0PWZ1bmN0aW9uKGUpe3ZhciB0LG4scixpLG8scyxhPWUuc3ltYm9sVGFibGUu
Z2V0U3ltYm9scygpCi1hLm5hbWVkJiYodD1hLm5hbWVkLG49T2JqZWN0LmtleXModCkscj1uLm1h
cChmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0pLHRoaXMub3Bjb2RlKDgsdGhpcy5uYW1lcyhuKSx0
aGlzLnN5bWJvbHMocikpKSx0aGlzLm9wY29kZSgxMSksYS55aWVsZHMmJihpPWEueWllbGRzLG89
T2JqZWN0LmtleXMoaSkscz1vLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gaVtlXX0pLHRoaXMub3Bj
b2RlKDksdGhpcy5uYW1lcyhvKSx0aGlzLnN5bWJvbHMocykpKSxhLnBhcnRpYWxBcmdzJiZ0aGlz
Lm9wY29kZSgxMCxhLnBhcnRpYWxBcmdzKX0sbi5wcm90b3R5cGUueWllbGQ9ZnVuY3Rpb24oZSx0
KXt2YXIgbj12b2lkIDAscj12b2lkIDAsaT12b2lkIDAKLWlmKG49dGhpcy5zeW1ib2xUYWJsZS5n
ZXRTeW1ib2woInlpZWxkcyIsdCkpaT1uZXcgQ3Qobix0KQotZWxzZXtpZighKHI9dGhpcy5zeW1i
b2xUYWJsZS5nZXRQYXJ0aWFsQXJncygpKSl0aHJvdyBuZXcgRXJyb3IoIltCVUddICR7dG99IGlz
IG5vdCBhIHZhbGlkIGJsb2NrIG5hbWUuIikKLWk9bmV3IE90KHIsdCl9dGhpcy5vcGVuQmxvY2so
ZSxpKSx0aGlzLmNsb3NlQmxvY2soKX0sbi5wcm90b3R5cGUubGFiZWxsZWQ9ZnVuY3Rpb24oZSx0
KXtlJiZ0aGlzLnB1dEFyZ3MoZSksdGhpcy5zdGFydExhYmVscygpLHRoaXMuZW50ZXIoIkJFR0lO
IiwiRU5EIiksdGhpcy5sYWJlbCgiQkVHSU4iKSx0KHRoaXMsIkJFR0lOIiwiRU5EIiksdGhpcy5s
YWJlbCgiRU5EIiksdGhpcy5leGl0KCksdGhpcy5zdG9wTGFiZWxzKCl9LG4ucHJvdG90eXBlLml0
ZXI9ZnVuY3Rpb24oZSl7dGhpcy5zdGFydExhYmVscygpLHRoaXMuZW50ZXJMaXN0KCJCRUdJTiIs
IkVORCIpLHRoaXMubGFiZWwoIklURVIiKSx0aGlzLm5leHRJdGVyKCJCUkVBSyIpLHRoaXMuZW50
ZXJXaXRoS2V5KCJCRUdJTiIsIkVORCIpLHRoaXMubGFiZWwoIkJFR0lOIiksZSh0aGlzLCJCRUdJ
TiIsIkVORCIpLHRoaXMubGFiZWwoIkVORCIpLHRoaXMuZXhpdCgpLHRoaXMuanVtcCgiSVRFUiIp
LHRoaXMubGFiZWwoIkJSRUFLIiksdGhpcy5leGl0TGlzdCgpLHRoaXMuc3RvcExhYmVscygpfSxu
LnByb3RvdHlwZS51bml0PWZ1bmN0aW9uKGUpe3RoaXMuc3RhcnRMYWJlbHMoKSxlKHRoaXMpLHRo
aXMuc3RvcExhYmVscygpfSxufShSdCksTnQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMu
ZW52PWV9cmV0dXJuIGUucHJvdG90eXBlLndyYXBMYXlvdXQ9ZnVuY3Rpb24oZSl7dGhpcy5pbm5l
cj1uZXcgUHQodGhpcy5lbnYsZSl9LGUucHJvdG90eXBlLmZyb21MYXlvdXQ9ZnVuY3Rpb24oZSl7
dGhpcy5pbm5lcj1uZXcganQodGhpcy5lbnYsZSl9LGUucHJvdG90eXBlLmNvbXBpbGU9ZnVuY3Rp
b24oKXtyZXR1cm4gdGhpcy5pbm5lci5jb21waWxlKCl9LCgwLHQuY3JlYXRlQ2xhc3MpKGUsW3tr
ZXk6InRhZyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5uZXIudGFnfX0se2tleToiYXR0
cnMiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmlubmVyLmF0dHJzfX1dKSxlfSgpLFB0PWZ1
bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMuZW52PWUsdGhpcy5sYXlvdXQ9dCx0aGlzLnRh
Zz1uZXcgRHQsdGhpcy5hdHRycz1uZXcgTHR9cmV0dXJuIGUucHJvdG90eXBlLmNvbXBpbGU9ZnVu
Y3Rpb24oKXt2YXIgZT10aGlzLmVudix0PXRoaXMubGF5b3V0LG49dC5zeW1ib2xUYWJsZSxyPXYo
ZSx0LnN5bWJvbFRhYmxlKQotci5zdGFydExhYmVscygpCi12YXIgaT10aGlzLnRhZy5nZXREeW5h
bWljKCksbz12b2lkIDAKLXJldHVybiBpPyhyLnB1dFZhbHVlKGkpLHIudGVzdCgic2ltcGxlIiks
ci5qdW1wVW5sZXNzKCJCT0RZIiksci5vcGVuRHluYW1pY1ByaW1pdGl2ZUVsZW1lbnQoKSxyLmRp
ZENyZWF0ZUVsZW1lbnQoKSx0aGlzLmF0dHJzLmJ1ZmZlci5mb3JFYWNoKGZ1bmN0aW9uKGUpe3Jl
dHVybiB4KGUscil9KSxyLmZsdXNoRWxlbWVudCgpLHIubGFiZWwoIkJPRFkiKSk6KG89dGhpcy50
YWcuZ2V0U3RhdGljKCkpJiYoci5vcGVuUHJpbWl0aXZlRWxlbWVudChvKSxyLmRpZENyZWF0ZUVs
ZW1lbnQoKSx0aGlzLmF0dHJzLmJ1ZmZlci5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiB4KGUs
cil9KSxyLmZsdXNoRWxlbWVudCgpKSxyLnByZWx1ZGVGb3JMYXlvdXQodCksdC5zdGF0ZW1lbnRz
LmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIHgoZSxyKX0pLGk/KHIucHV0VmFsdWUoaSksci50
ZXN0KCJzaW1wbGUiKSxyLmp1bXBVbmxlc3MoIkVORCIpLHIuY2xvc2VFbGVtZW50KCksci5sYWJl
bCgiRU5EIikpOm8mJnIuY2xvc2VFbGVtZW50KCksci5kaWRSZW5kZXJMYXlvdXQoKSxyLnN0b3BM
YWJlbHMoKSxuZXcgVHQoci5zdGFydCxyLmVuZCxuLnNpemUpfSxlfSgpLGp0PWZ1bmN0aW9uKCl7
ZnVuY3Rpb24gZShlLHQpe3RoaXMuZW52PWUsdGhpcy5sYXlvdXQ9dCx0aGlzLmF0dHJzPW5ldyBM
dH1yZXR1cm4gZS5wcm90b3R5cGUuY29tcGlsZT1mdW5jdGlvbigpe3ZhciBlLHQsbj10aGlzLmVu
dixyPXRoaXMubGF5b3V0LGk9dihuLHIuc3ltYm9sVGFibGUpCi1pLnN0YXJ0TGFiZWxzKCksaS5w
cmVsdWRlRm9yTGF5b3V0KHIpCi12YXIgbz10aGlzLmF0dHJzLmJ1ZmZlcixzPSExCi1mb3IoZT0w
O2U8ci5zdGF0ZW1lbnRzLmxlbmd0aDtlKyspdD1yLnN0YXRlbWVudHNbZV0sIXMmJnkodCk/KGku
b3BlbkNvbXBvbmVudEVsZW1lbnQodFsxXSksaS5kaWRDcmVhdGVFbGVtZW50KCksaS5zaGFkb3dB
dHRyaWJ1dGVzKCksby5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiB4KGUsaSl9KSxzPSEwKTp4
KHQsaSkKLXJldHVybiBpLmRpZFJlbmRlckxheW91dCgpLGkuc3RvcExhYmVscygpLG5ldyBUdChp
LnN0YXJ0LGkuZW5kLHIuc3ltYm9sVGFibGUuc2l6ZSl9LCgwLHQuY3JlYXRlQ2xhc3MpKGUsW3tr
ZXk6InRhZyIsZ2V0OmZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJCVUc6IENhbm5vdCBjYWxs
IGB0YWdgIG9uIGFuIFVud3JhcHBlZEJ1aWxkZXIiKX19XSksZX0oKSxEdD1mdW5jdGlvbigpe2Z1
bmN0aW9uIGUoKXt0aGlzLmlzRHluYW1pYz1udWxsLHRoaXMuaXNTdGF0aWM9bnVsbCx0aGlzLnN0
YXRpY1RhZ05hbWU9bnVsbCx0aGlzLmR5bmFtaWNUYWdOYW1lPW51bGx9cmV0dXJuIGUucHJvdG90
eXBlLmdldER5bmFtaWM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzRHluYW1pYylyZXR1cm4gdGhpcy5k
eW5hbWljVGFnTmFtZX0sZS5wcm90b3R5cGUuZ2V0U3RhdGljPWZ1bmN0aW9uKCl7aWYodGhpcy5p
c1N0YXRpYylyZXR1cm4gdGhpcy5zdGF0aWNUYWdOYW1lfSxlLnByb3RvdHlwZS5zdGF0aWM9ZnVu
Y3Rpb24oZSl7dGhpcy5pc1N0YXRpYz0hMCx0aGlzLnN0YXRpY1RhZ05hbWU9ZX0sZS5wcm90b3R5
cGUuZHluYW1pYz1mdW5jdGlvbihlKXt0aGlzLmlzRHluYW1pYz0hMCx0aGlzLmR5bmFtaWNUYWdO
YW1lPVtpLk9wcy5GdW5jdGlvbixlXX0sZX0oKSxMdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0
aGlzLmJ1ZmZlcj1bXX1yZXR1cm4gZS5wcm90b3R5cGUuc3RhdGljPWZ1bmN0aW9uKGUsdCl7dGhp
cy5idWZmZXIucHVzaChbaS5PcHMuU3RhdGljQXR0cixlLHQsbnVsbF0pfSxlLnByb3RvdHlwZS5k
eW5hbWljPWZ1bmN0aW9uKGUsdCl7dGhpcy5idWZmZXIucHVzaChbaS5PcHMuRHluYW1pY0F0dHIs
ZSxbaS5PcHMuRnVuY3Rpb24sdF0sbnVsbF0pfSxlfSgpLEl0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24g
ZShlKXt0aGlzLmJ1aWxkZXI9ZSx0aGlzLmVudj1lLmVudn1yZXR1cm4gZS5wcm90b3R5cGUuc3Rh
dGljPWZ1bmN0aW9uKGUsdCxuLHIpe3RoaXMuYnVpbGRlci51bml0KGZ1bmN0aW9uKG4pe24ucHV0
Q29tcG9uZW50RGVmaW5pdGlvbihlKSxuLm9wZW5Db21wb25lbnQoTih0LG4pLHIpLG4uY2xvc2VD
b21wb25lbnQoKX0pfSxlLnByb3RvdHlwZS5keW5hbWljPWZ1bmN0aW9uKGUsdCxuLHIsbyl7dGhp
cy5idWlsZGVyLnVuaXQoZnVuY3Rpb24ocil7ci5wdXRBcmdzKFIoZVswXSxlWzFdLHIpKSxyLnB1
dFZhbHVlKFtpLk9wcy5GdW5jdGlvbix0XSksci50ZXN0KCJzaW1wbGUiKSxyLmVudGVyKCJCRUdJ
TiIsIkVORCIpLHIubGFiZWwoIkJFR0lOIiksci5qdW1wVW5sZXNzKCJFTkQiKSxyLnB1dER5bmFt
aWNDb21wb25lbnREZWZpbml0aW9uKCksci5vcGVuQ29tcG9uZW50KE4obixyKSxvKSxyLmNsb3Nl
Q29tcG9uZW50KCksci5sYWJlbCgiRU5EIiksci5leGl0KCl9KX0sZX0oKSxNdD1mdW5jdGlvbigp
e2Z1bmN0aW9uIGUoZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVu
dHNbMV0/YXJndW1lbnRzWzFdOm51bGwsbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFy
Z3VtZW50c1syXT9hcmd1bWVudHNbMl06bnVsbCxyPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAw
IT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTpudWxsLGk9YXJndW1lbnRzLmxlbmd0aD40JiZ2
b2lkIDAhPT1hcmd1bWVudHNbNF0/YXJndW1lbnRzWzRdOjEKLXRoaXMubWV0YT1lLHRoaXMubmFt
ZWQ9dCx0aGlzLnlpZWxkcz1uLHRoaXMucGFydGlhbEFyZ3M9cix0aGlzLnNpemU9aSx0aGlzLnBy
b2dyYW09dGhpc31yZXR1cm4gZS5wcm90b3R5cGUuZ2V0TWV0YT1mdW5jdGlvbigpe3JldHVybiB0
aGlzLm1ldGF9LGUucHJvdG90eXBlLmdldFN5bWJvbHM9ZnVuY3Rpb24oKXtyZXR1cm57bmFtZWQ6
dGhpcy5uYW1lZCx5aWVsZHM6dGhpcy55aWVsZHMsbG9jYWxzOm51bGwscGFydGlhbEFyZ3M6dGhp
cy5wYXJ0aWFsQXJnc319LGUucHJvdG90eXBlLmdldFN5bWJvbD1mdW5jdGlvbihlLHQpe3JldHVy
biJsb2NhbCI9PT1lP251bGw6dGhpc1tlXSYmdGhpc1tlXVt0XX0sZS5wcm90b3R5cGUuZ2V0UGFy
dGlhbEFyZ3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJ0aWFsQXJnc3x8MH0sZX0oKSxGdD1m
dW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG4pe3RoaXMucGFyZW50PWUsdGhpcy5wcm9ncmFtPXQs
dGhpcy5sb2NhbHM9bn1yZXR1cm4gZS5wcm90b3R5cGUuZ2V0TWV0YT1mdW5jdGlvbigpe3JldHVy
biB0aGlzLnByb2dyYW0uZ2V0TWV0YSgpfSxlLnByb3RvdHlwZS5nZXRTeW1ib2xzPWZ1bmN0aW9u
KCl7cmV0dXJue25hbWVkOm51bGwseWllbGRzOm51bGwsbG9jYWxzOnRoaXMubG9jYWxzLHBhcnRp
YWxBcmdzOm51bGx9fSxlLnByb3RvdHlwZS5nZXRTeW1ib2w9ZnVuY3Rpb24oZSx0KXtyZXR1cm4i
bG9jYWwiPT09ZT90aGlzLmdldExvY2FsKHQpOnRoaXMucHJvZ3JhbS5nZXRTeW1ib2woZSx0KX0s
ZS5wcm90b3R5cGUuZ2V0TG9jYWw9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5sb2NhbHMsbj10aGlz
LnBhcmVudCxyPXQmJnRbZV0KLXJldHVybiFyJiZuJiYocj1uLmdldFN5bWJvbCgibG9jYWwiLGUp
KSxyfSxlLnByb3RvdHlwZS5nZXRQYXJ0aWFsQXJncz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBy
b2dyYW0uZ2V0UGFydGlhbEFyZ3MoKX0sZX0oKSx6dD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0
aGlzLm5hbWVzPSgwLG4uZGljdCkoKSx0aGlzLmZ1bmNzPVtdfXJldHVybiBlLnByb3RvdHlwZS5h
ZGQ9ZnVuY3Rpb24oZSx0KXt0aGlzLmZ1bmNzLnB1c2godCksdGhpcy5uYW1lc1tlXT10aGlzLmZ1
bmNzLmxlbmd0aC0xfSxlLnByb3RvdHlwZS5zcGVjaWFsaXplPWZ1bmN0aW9uKGUsdCl7dmFyIHI9
ZVswXSxpPXRoaXMubmFtZXNbcl0KLWlmKHZvaWQgMD09PWkpcmV0dXJuIGUKLXZhciBvPXRoaXMu
ZnVuY3NbaV0KLXJldHVybigwLG4uYXNzZXJ0KSghIW8sImV4cGVjdGVkIGEgc3BlY2lhbGl6YXRp
b24gZm9yICIrZVswXSksbyhlLHQpfSxlfSgpLFV0PW5ldyB6dCxCdD1pLkV4cHJlc3Npb25zLHF0
PWkuT3BzCi1VdC5hZGQocXQuQXBwZW5kLGZ1bmN0aW9uKGUpe3ZhciB0LG49ZVsxXQotcmV0dXJu
IEFycmF5LmlzQXJyYXkobikmJkJ0LmlzR2V0KG4pJiYodD1uWzFdLDEhPT10Lmxlbmd0aCk/W3F0
LlVub3B0aW1pemVkQXBwZW5kLGVbMV0sZVsyXV06W3F0Lk9wdGltaXplZEFwcGVuZCxlWzFdLGVb
Ml1dfSksVXQuYWRkKHF0LkR5bmFtaWNBdHRyLGZ1bmN0aW9uKGUpe3JldHVybltxdC5BbnlEeW5h
bWljQXR0cixlWzFdLGVbMl0sZVszXSwhMV19KSxVdC5hZGQocXQuVHJ1c3RpbmdBdHRyLGZ1bmN0
aW9uKGUpe3JldHVybltxdC5BbnlEeW5hbWljQXR0cixlWzFdLGVbMl0sZVszXSwhMF19KSxVdC5h
ZGQocXQuUGFydGlhbCxmdW5jdGlvbihlKXt2YXIgdD1lWzFdCi1yZXR1cm4ic3RyaW5nIj09dHlw
ZW9mIHQ/W3F0LlN0YXRpY1BhcnRpYWwsdF06W3F0LkR5bmFtaWNQYXJ0aWFsLHRdfSkKLXZhciBI
dCxWdD1mdW5jdGlvbihlLHQpe3RoaXMuc3RhdGVtZW50cz1lLHRoaXMuc3ltYm9sVGFibGU9dH0s
V3Q9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbigpe3JldHVybigwLHQucG9zc2libGVDb25zdHJ1Y3Rv
clJldHVybikodGhpcyxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9cmV0dXJuKDAsdC5pbmhlcml0
cykobixlKSxufShWdCksJHQ9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbigpe3ZhciBuPSgwLHQucG9z
c2libGVDb25zdHJ1Y3RvclJldHVybikodGhpcyxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkKLXJl
dHVybiBuLmNvbXBpbGVkPW51bGwsbn1yZXR1cm4oMCx0LmluaGVyaXRzKShuLGUpLG4ucHJvdG90
eXBlLmNvbXBpbGU9ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGksbyxzPXRoaXMuY29tcGlsZWQKLWlm
KCFzKXtmb3IodD10aGlzLnN5bWJvbFRhYmxlLG49dihlLHQpLHI9MDtyPHRoaXMuc3RhdGVtZW50
cy5sZW5ndGg7cisrKWk9dGhpcy5zdGF0ZW1lbnRzW3JdLG89VXQuc3BlY2lhbGl6ZShpLHQpLGRu
LmNvbXBpbGUobyxuKQotcz10aGlzLmNvbXBpbGVkPW5ldyBUdChuLnN0YXJ0LG4uZW5kLHRoaXMu
c3ltYm9sVGFibGUuc2l6ZSl9cmV0dXJuIHN9LG59KFZ0KSxHdD1mdW5jdGlvbihlKXtmdW5jdGlv
biBuKCl7dmFyIG49KDAsdC5wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKSh0aGlzLGUuYXBwbHko
dGhpcyxhcmd1bWVudHMpKQotcmV0dXJuIG4uY29tcGlsZWQ9bnVsbCxufXJldHVybigwLHQuaW5o
ZXJpdHMpKG4sZSksbi5wcm90b3R5cGUuc3BsYXQ9ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGk9ZS5z
eW1ib2xUYWJsZSxvPWkuZ2V0U3ltYm9scygpLmxvY2FscwotZm9yKG8mJihlLnB1c2hDaGlsZFNj
b3BlKCksZS5iaW5kUG9zaXRpb25hbEFyZ3NGb3JMb2NhbHMobykpLHQ9MDt0PHRoaXMuc3RhdGVt
ZW50cy5sZW5ndGg7dCsrKW49dGhpcy5zdGF0ZW1lbnRzW3RdLHI9VXQuc3BlY2lhbGl6ZShuLGkp
LGRuLmNvbXBpbGUocixlKQotbyYmZS5wb3BTY29wZSgpfSxuLnByb3RvdHlwZS5jb21waWxlPWZ1
bmN0aW9uKGUpe3ZhciB0LG4scj10aGlzLmNvbXBpbGVkCi1yZXR1cm4gcnx8KHQ9dGhpcy5zeW1i
b2xUYWJsZSxuPXYoZSx0KSx0aGlzLnNwbGF0KG4pLHI9dGhpcy5jb21waWxlZD1uZXcgQXQobi5z
dGFydCxuLmVuZCkpLHJ9LG59KFZ0KSxLdD1mdW5jdGlvbihlKXtmdW5jdGlvbiBuKCl7dmFyIG49
KDAsdC5wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKSh0aGlzLGUuYXBwbHkodGhpcyxhcmd1bWVu
dHMpKQotcmV0dXJuIG4uY29tcGlsZWQ9bnVsbCxufXJldHVybigwLHQuaW5oZXJpdHMpKG4sZSks
bi5wcm90b3R5cGUuY29tcGlsZT1mdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxvLHM9dGhpcy5jb21w
aWxlZAotaWYoIXMpe2Zvcih0PXRoaXMuc3ltYm9sVGFibGUsbj12KGUsdCkscj0wO3I8dGhpcy5z
dGF0ZW1lbnRzLmxlbmd0aDtyKyspaT10aGlzLnN0YXRlbWVudHNbcl0sbz1VdC5zcGVjaWFsaXpl
KGksdCksZG4uY29tcGlsZShvLG4pCi1zPXRoaXMuY29tcGlsZWQ9bmV3IFR0KG4uc3RhcnQsbi5l
bmQsdC5zaXplKX1yZXR1cm4gc30sbn0oVnQpLFF0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQs
bil7dGhpcy5ibG9jaz1lLHRoaXMubWV0YT10LHRoaXMuZW52PW59cmV0dXJuIGUucHJvdG90eXBl
LnNjYW5FbnRyeVBvaW50PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5ibG9jayx0PXRoaXMubWV0YSxu
PWIodCkscj1DKGUsbix0aGlzLmVudikKLXJldHVybiBuZXcgJHQoci5zdGF0ZW1lbnRzLG4pfSxl
LnByb3RvdHlwZS5zY2FuTGF5b3V0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5ibG9jayx0PXRoaXMu
bWV0YSxuPWUubmFtZWQscj1lLnlpZWxkcyxpPWUuaGFzUGFydGlhbHMsbz1fKHQsbixyLGkpLHM9
QyhlLG8sdGhpcy5lbnYpCi1yZXR1cm4gbmV3IFd0KHMuc3RhdGVtZW50cyxvKX0sZS5wcm90b3R5
cGUuc2NhblBhcnRpYWw9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5ibG9jayxuPUModCxlLHRoaXMu
ZW52KQotcmV0dXJuIG5ldyBLdChuLnN0YXRlbWVudHMsZSl9LGV9KCk7KGZ1bmN0aW9uKGUpe3Zh
ciB0PWkuT3BzCi1lLmlzU2Nhbm5lZENvbXBvbmVudD0oMCxpLmlzKSh0LlNjYW5uZWRDb21wb25l
bnQpLGUuaXNQcmltaXRpdmVFbGVtZW50PSgwLGkuaXMpKHQuT3BlblByaW1pdGl2ZUVsZW1lbnQp
LGUuaXNPcHRpbWl6ZWRBcHBlbmQ9KDAsaS5pcykodC5PcHRpbWl6ZWRBcHBlbmQpLGUuaXNVbm9w
dGltaXplZEFwcGVuZD0oMCxpLmlzKSh0LlVub3B0aW1pemVkQXBwZW5kKSxlLmlzQW55QXR0cj0o
MCxpLmlzKSh0LkFueUR5bmFtaWNBdHRyKSxlLmlzU3RhdGljUGFydGlhbD0oMCxpLmlzKSh0LlN0
YXRpY1BhcnRpYWwpLGUuaXNEeW5hbWljUGFydGlhbD0oMCxpLmlzKSh0LkR5bmFtaWNQYXJ0aWFs
KSxlLmlzRnVuY3Rpb25FeHByZXNzaW9uPSgwLGkuaXMpKHQuRnVuY3Rpb24pLGUuaXNOZXN0ZWRC
bG9jaz0oMCxpLmlzKSh0Lk5lc3RlZEJsb2NrKSxlLmlzU2Nhbm5lZEJsb2NrPSgwLGkuaXMpKHQu
U2Nhbm5lZEJsb2NrKSxlLmlzRGVidWdnZXI9KDAsaS5pcykodC5EZWJ1Z2dlcik7KGZ1bmN0aW9u
KGUpe2UuZGVmYXVsdEJsb2NrPWZ1bmN0aW9uKGUpe3JldHVybiBlWzRdfSxlLmludmVyc2VCbG9j
az1mdW5jdGlvbihlKXtyZXR1cm4gZVs1XX0sZS5wYXJhbXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGVb
Ml19LGUuaGFzaD1mdW5jdGlvbihlKXtyZXR1cm4gZVszXX19KShlLk5lc3RlZEJsb2NrfHwoZS5O
ZXN0ZWRCbG9jaz17fSkpfSkoSHR8fChlLkJhc2VsaW5lU3ludGF4PUh0PXt9KSkKLXZhciBZdD1p
Lk9wcyxKdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG4pe3RoaXMuZW52PWUsdGhpcy50YWJs
ZT10LHRoaXMuc3RhdGVtZW50cz1ufXJldHVybiBlLnByb3RvdHlwZS5zY2FuPWZ1bmN0aW9uKCl7
dmFyIGU9W10KLXJldHVybiB0aGlzLnNwZWNpYWxpemVTdGF0ZW1lbnRzKHRoaXMuc3RhdGVtZW50
cyxlKSxuZXcgR3QoZSx0aGlzLnRhYmxlKX0sZS5wcm90b3R5cGUuc3BlY2lhbGl6ZVN0YXRlbWVu
dHM9ZnVuY3Rpb24oZSx0KXt2YXIgbixyCi1mb3Iobj0wO248ZS5sZW5ndGg7bisrKXI9ZVtuXSx0
aGlzLnNwZWNpYWxpemVTdGF0ZW1lbnQocix0KX0sZS5wcm90b3R5cGUuc3BlY2lhbGl6ZVN0YXRl
bWVudD1mdW5jdGlvbihlLHQpe2kuU3RhdGVtZW50cy5pc0Jsb2NrKGUpP3QucHVzaCh0aGlzLnNw
ZWNpYWxpemVCbG9jayhlKSk6aS5TdGF0ZW1lbnRzLmlzQ29tcG9uZW50KGUpP3QucHVzaC5hcHBs
eSh0LHRoaXMuc3BlY2lhbGl6ZUNvbXBvbmVudChlKSk6dC5wdXNoKGUpfSxlLnByb3RvdHlwZS5z
cGVjaWFsaXplQmxvY2s9ZnVuY3Rpb24oZSl7dmFyIHQ9ZVsxXSxuPWVbMl0scj1lWzNdLGk9ZVs0
XSxvPWVbNV0KLXJldHVybltZdC5TY2FubmVkQmxvY2ssdCxuLHIsdGhpcy5jaGlsZChpKSx0aGlz
LmNoaWxkKG8pXX0sZS5wcm90b3R5cGUuc3BlY2lhbGl6ZUNvbXBvbmVudD1mdW5jdGlvbih0KXt2
YXIgbixyLGksbz10WzFdLHM9dFsyXQotcmV0dXJuIHRoaXMuZW52Lmhhc0NvbXBvbmVudERlZmlu
aXRpb24obyx0aGlzLnRhYmxlKT8obj10aGlzLmNoaWxkKHMpLHI9bmV3IGUodGhpcy5lbnYsdGhp
cy50YWJsZSxzLmF0dHJzKSxbW1l0LlNjYW5uZWRDb21wb25lbnQsbyxyLHMuYXJncyxuXV0pOihp
PVtdLGkucHVzaChbWXQuT3BlbkVsZW1lbnQsbyxbXV0pLHRoaXMuc3BlY2lhbGl6ZVN0YXRlbWVu
dHMocy5hdHRycyxpKSxpLnB1c2goW1l0LkZsdXNoRWxlbWVudF0pLHRoaXMuc3BlY2lhbGl6ZVN0
YXRlbWVudHMocy5zdGF0ZW1lbnRzLGkpLGkucHVzaChbWXQuQ2xvc2VFbGVtZW50XSksaSl9LGUu
cHJvdG90eXBlLmNoaWxkPWZ1bmN0aW9uKHQpe2lmKCF0KXJldHVybiBudWxsCi12YXIgbj13KHRo
aXMudGFibGUsdC5sb2NhbHMpCi1yZXR1cm4gbmV3IGUodGhpcy5lbnYsbix0LnN0YXRlbWVudHMp
fSxlfSgpLFh0PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4obixyKXt2YXIgaT0oMCx0LnBvc3NpYmxl
Q29uc3RydWN0b3JSZXR1cm4pKHRoaXMsZS5jYWxsKHRoaXMpKQotcmV0dXJuIGkuYmFzZT1uLGku
cGF0aD1yLGkudHlwZT0ibG9va3VwIixpfXJldHVybigwLHQuaW5oZXJpdHMpKG4sZSksbi5jcmVh
dGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gMD09PXQubGVuZ3RoP2U6bmV3IHRoaXMoZSx0KX0sbi5w
cm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5iYXNlLG49dGhpcy5wYXRo
Ci1yZXR1cm4oMCxyLnJlZmVyZW5jZUZyb21QYXJ0cykodC5ldmFsdWF0ZShlKSxuKX0sbi5wcm90
b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYmFzZS50b0pTT04oKSsiLiIrdGhp
cy5wYXRoLmpvaW4oIi4iKX0sbn0oaXQpLFp0PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4oKXtyZXR1
cm4oMCx0LnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4pKHRoaXMsZS5hcHBseSh0aGlzLGFyZ3Vt
ZW50cykpfXJldHVybigwLHQuaW5oZXJpdHMpKG4sZSksbi5wcm90b3R5cGUuZXZhbHVhdGU9ZnVu
Y3Rpb24oZSl7cmV0dXJuIGUuZ2V0U2VsZigpfSxuLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24o
KXtyZXR1cm4ic2VsZiJ9LG59KGl0KSxlbj1mdW5jdGlvbihlKXtmdW5jdGlvbiBuKG4scil7dmFy
IGk9KDAsdC5wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKSh0aGlzLGUuY2FsbCh0aGlzKSkKLXJl
dHVybiBpLnN5bWJvbD1uLGkuZGVidWc9cixpfXJldHVybigwLHQuaW5oZXJpdHMpKG4sZSksbi5w
cm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVmZXJlbmNlRm9yU3ltYm9s
KHRoaXMuc3ltYm9sKX0sbi5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIiQiK3Ro
aXMuc3ltYm9sKyIoIit0aGlzLmRlYnVnKyIpIn0sbn0oaXQpLHRuPWZ1bmN0aW9uKGUpe2Z1bmN0
aW9uIG4obixyKXt2YXIgaT0oMCx0LnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4pKHRoaXMsZS5j
YWxsKHRoaXMpKQotcmV0dXJuIGkuc3ltYm9sPW4saS5uYW1lPXIsaX1yZXR1cm4oMCx0LmluaGVy
aXRzKShuLGUpLG4ucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuc3lt
Ym9sLG49dGhpcy5uYW1lCi1yZXR1cm4gZS5zY29wZSgpLmdldFBhcnRpYWxBcmdzKHQpLm5hbWVk
LmdldChuKX0sbi5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIiQiK3RoaXMuc3lt
Ym9sKyIoJEFSR1MpLiIrdGhpcy5uYW1lfSxufShpdCksbm49ZnVuY3Rpb24oZSl7ZnVuY3Rpb24g
bihuLHIsaSxvKXt2YXIgcz0oMCx0LnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4pKHRoaXMsZS5j
YWxsKHRoaXMpKQotcmV0dXJuIHMubmFtZT1uLHMuaGVscGVyPXIscy5hcmdzPWkscy5zeW1ib2xU
YWJsZT1vLHMudHlwZT0iaGVscGVyIixzfXJldHVybigwLHQuaW5oZXJpdHMpKG4sZSksbi5wcm90
b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuKDAsdGhpcy5oZWxwZXIpKGUsdGhpcy5h
cmdzLmV2YWx1YXRlKGUpLHRoaXMuc3ltYm9sVGFibGUpfSxuLnByb3RvdHlwZS50b0pTT049ZnVu
Y3Rpb24oKXtyZXR1cm4iYCIrdGhpcy5uYW1lKyIoJEFSR1MpYCJ9LG59KGl0KSxybj1mdW5jdGlv
bigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5wYXJ0cz1lLHRoaXMudHlwZT0iY29uY2F0In1yZXR1cm4g
ZS5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24oZSl7dmFyIHQsbj1uZXcgQXJyYXkodGhpcy5w
YXJ0cy5sZW5ndGgpCi1mb3IodD0wO3Q8dGhpcy5wYXJ0cy5sZW5ndGg7dCsrKW5bdF09dGhpcy5w
YXJ0c1t0XS5ldmFsdWF0ZShlKQotcmV0dXJuIG5ldyBvbihuKX0sZS5wcm90b3R5cGUudG9KU09O
PWZ1bmN0aW9uKCl7cmV0dXJuImNvbmNhdCgiK3RoaXMucGFydHMubWFwKGZ1bmN0aW9uKGUpe3Jl
dHVybiBlLnRvSlNPTigpfSkuam9pbigiLCAiKSsiKSJ9LGV9KCksb249ZnVuY3Rpb24oZSl7ZnVu
Y3Rpb24gbihuKXt2YXIgaT0oMCx0LnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4pKHRoaXMsZS5j
YWxsKHRoaXMpKQotcmV0dXJuIGkucGFydHM9bixpLnRhZz0oMCxyLmNvbWJpbmVUYWdnZWQpKG4p
LGl9cmV0dXJuKDAsdC5pbmhlcml0cykobixlKSxuLnByb3RvdHlwZS5jb21wdXRlPWZ1bmN0aW9u
KCl7dmFyIGUsdCxuPW5ldyBBcnJheQotZm9yKGU9MDtlPHRoaXMucGFydHMubGVuZ3RoO2UrKylu
dWxsIT09KHQ9dGhpcy5wYXJ0c1tlXS52YWx1ZSgpKSYmdm9pZCAwIT09dCYmKG5bZV09Tyh0KSkK
LXJldHVybiBuLmxlbmd0aD4wP24uam9pbigiIik6bnVsbH0sbn0oci5DYWNoZWRSZWZlcmVuY2Up
LHNuPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4obixyKXt2YXIgaT0oMCx0LnBvc3NpYmxlQ29uc3Ry
dWN0b3JSZXR1cm4pKHRoaXMsZS5jYWxsKHRoaXMpKQotcmV0dXJuIGkuZnVuYz1uLGkuc3ltYm9s
VGFibGU9cixpLnR5cGU9ImZ1bmN0aW9uIixpLmZ1bmM9bixpfXJldHVybigwLHQuaW5oZXJpdHMp
KG4sZSksbi5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuKDAsdGhpcy5mdW5j
KShlLHRoaXMuc3ltYm9sVGFibGUpfSxuLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXt2YXIg
ZT10aGlzLmZ1bmMKLXJldHVybiBlLm5hbWU/ImAiK2UubmFtZSsiKC4uLilgIjoiYGZ1bmMoLi4u
KWAifSxufShpdCksYW49SHQuTmVzdGVkQmxvY2ssdW49YW4uZGVmYXVsdEJsb2NrLGxuPWFuLnBh
cmFtcyxjbj1hbi5oYXNoLHBuPUEsZm49ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5uYW1l
cz0oMCxuLmRpY3QpKCksdGhpcy5mdW5jcz1bXX1yZXR1cm4gZS5wcm90b3R5cGUuYWRkPWZ1bmN0
aW9uKGUsdCl7dGhpcy5mdW5jcy5wdXNoKHQpLHRoaXMubmFtZXNbZV09dGhpcy5mdW5jcy5sZW5n
dGgtMX0sZS5wcm90b3R5cGUuY29tcGlsZT1mdW5jdGlvbihlLHQpe3ZhciByPWVbMF0saT10aGlz
Lm5hbWVzW3JdLG89dGhpcy5mdW5jc1tpXQotcmV0dXJuKDAsbi5hc3NlcnQpKCEhbywiZXhwZWN0
ZWQgYW4gaW1wbGVtZW50YXRpb24gZm9yICIrZVswXSksbyhlLHQpfSxlfSgpLGhuPWkuT3BzLGRu
PW5ldyBmbgotZG4uYWRkKGhuLlRleHQsZnVuY3Rpb24oZSx0KXt0LnRleHQoZVsxXSl9KSxkbi5h
ZGQoaG4uQ29tbWVudCxmdW5jdGlvbihlLHQpe3QuY29tbWVudChlWzFdKX0pLGRuLmFkZChobi5D
bG9zZUVsZW1lbnQsZnVuY3Rpb24oZSx0KXtuLkxPR0dFUi50cmFjZSgiY2xvc2UtZWxlbWVudCBz
dGF0ZW1lbnQiKSx0LmNsb3NlRWxlbWVudCgpfSksZG4uYWRkKGhuLkZsdXNoRWxlbWVudCxmdW5j
dGlvbihlLHQpe3QuZmx1c2hFbGVtZW50KCl9KSxkbi5hZGQoaG4uTW9kaWZpZXIsZnVuY3Rpb24o
ZSx0KXt2YXIgbj1lWzFdLHI9ZVsyXSxpPWVbM10sbz1SKHIsaSx0KQotaWYoIXQuZW52Lmhhc01v
ZGlmaWVyKG5bMF0sdC5zeW1ib2xUYWJsZSkpdGhyb3cgbmV3IEVycm9yKCJDb21waWxlIEVycm9y
ICIrbi5qb2luKCIuIikrIiBpcyBub3QgYSBtb2RpZmllcjogSGVscGVycyBtYXkgbm90IGJlIHVz
ZWQgaW4gdGhlIGVsZW1lbnQgZm9ybS4iKQotdC5tb2RpZmllcihuWzBdLG8pfSksZG4uYWRkKGhu
LlN0YXRpY0F0dHIsZnVuY3Rpb24oZSx0KXt2YXIgbj1lWzFdLHI9ZVsyXSxpPWVbM10KLXQuc3Rh
dGljQXR0cihuLGkscil9KSxkbi5hZGQoaG4uQW55RHluYW1pY0F0dHIsZnVuY3Rpb24oZSx0KXt2
YXIgbj1lWzFdLHI9ZVsyXSxpPWVbM10sbz1lWzRdCi10LnB1dFZhbHVlKHIpLGk/dC5keW5hbWlj
QXR0ck5TKG4saSxvKTp0LmR5bmFtaWNBdHRyKG4sbyl9KSxkbi5hZGQoaG4uT3BlbkVsZW1lbnQs
ZnVuY3Rpb24oZSx0KXtuLkxPR0dFUi50cmFjZSgib3Blbi1lbGVtZW50IHN0YXRlbWVudCIpLHQu
b3BlblByaW1pdGl2ZUVsZW1lbnQoZVsxXSl9KSxkbi5hZGQoaG4uT3B0aW1pemVkQXBwZW5kLGZ1
bmN0aW9uKGUsdCl7dmFyIG49ZVsxXSxyPWVbMl0saT10LmVudi5tYWNyb3MoKSxvPWkuaW5saW5l
cyxzPW8uY29tcGlsZShlLHQpfHxuCi0hMCE9PXMmJih0LnB1dFZhbHVlKHNbMV0pLHI/dC50cnVz
dGluZ0FwcGVuZCgpOnQuY2F1dGlvdXNBcHBlbmQoKSl9KSxkbi5hZGQoaG4uVW5vcHRpbWl6ZWRB
cHBlbmQsZnVuY3Rpb24oZSx0KXt2YXIgbj1lWzFdLHI9ZVsyXSxpPXQuZW52Lm1hY3JvcygpLG89
aS5pbmxpbmVzLHM9by5jb21waWxlKGUsdCl8fG4KLSEwIT09cyYmKHI/dC5ndWFyZGVkVHJ1c3Rp
bmdBcHBlbmQoc1sxXSk6dC5ndWFyZGVkQ2F1dGlvdXNBcHBlbmQoc1sxXSkpfSksZG4uYWRkKGhu
Lk5lc3RlZEJsb2NrLGZ1bmN0aW9uKGUsdCl7dC5lbnYubWFjcm9zKCkuYmxvY2tzLmNvbXBpbGUo
ZSx0KX0pLGRuLmFkZChobi5TY2FubmVkQmxvY2ssZnVuY3Rpb24oZSx0KXt2YXIgbj1lWzFdLHI9
ZVsyXSxpPWVbM10sbz1lWzRdLHM9ZVs1XSxhPW8mJm8uc2NhbigpLHU9cyYmcy5zY2FuKCkKLXQu
ZW52Lm1hY3JvcygpLmJsb2Nrcy5jb21waWxlKFtobi5OZXN0ZWRCbG9jayxuLHIsaSxhLHVdLHQp
fSksZG4uYWRkKGhuLlNjYW5uZWRDb21wb25lbnQsZnVuY3Rpb24oZSx0KXt2YXIgbj1lWzFdLHI9
ZVsyXSxpPWVbM10sbz1lWzRdLHM9byYmby5zY2FuKCksYT1rKG51bGwsaSx7ZGVmYXVsdDpzLGlu
dmVyc2U6bnVsbH0sdCksdT10LmVudi5nZXRDb21wb25lbnREZWZpbml0aW9uKG4sdC5zeW1ib2xU
YWJsZSkKLXQucHV0Q29tcG9uZW50RGVmaW5pdGlvbih1KSx0Lm9wZW5Db21wb25lbnQoYSxyLnNj
YW4oKSksdC5jbG9zZUNvbXBvbmVudCgpfSksZG4uYWRkKGhuLlN0YXRpY1BhcnRpYWwsZnVuY3Rp
b24oZSx0KXt2YXIgbj1lWzFdCi1pZighdC5lbnYuaGFzUGFydGlhbChuLHQuc3ltYm9sVGFibGUp
KXRocm93IG5ldyBFcnJvcignQ29tcGlsZSBFcnJvcjogQ291bGQgbm90IGZpbmQgYSBwYXJ0aWFs
IG5hbWVkICInK24rJyInKQotdmFyIHI9dC5lbnYubG9va3VwUGFydGlhbChuLHQuc3ltYm9sVGFi
bGUpCi10LnB1dFBhcnRpYWxEZWZpbml0aW9uKHIpLHQuZXZhbHVhdGVQYXJ0aWFsKCl9KSxkbi5h
ZGQoaG4uRHluYW1pY1BhcnRpYWwsZnVuY3Rpb24oZSx0KXt2YXIgbj1lWzFdCi10LnN0YXJ0TGFi
ZWxzKCksdC5wdXRWYWx1ZShuKSx0LnRlc3QoInNpbXBsZSIpLHQuZW50ZXIoIkJFR0lOIiwiRU5E
IiksdC5sYWJlbCgiQkVHSU4iKSx0Lmp1bXBVbmxlc3MoIkVORCIpLHQucHV0RHluYW1pY1BhcnRp
YWxEZWZpbml0aW9uKCksdC5ldmFsdWF0ZVBhcnRpYWwoKSx0LmxhYmVsKCJFTkQiKSx0LmV4aXQo
KSx0LnN0b3BMYWJlbHMoKX0pLGRuLmFkZChobi5ZaWVsZCxmdW5jdGlvbihlLHQpe3ZhciBuPWVb
MV0scj1lWzJdLGk9UihyLG51bGwsdCkKLXQueWllbGQoaSxuKX0pLGRuLmFkZChobi5EZWJ1Z2dl
cixmdW5jdGlvbihlLHQpe3JldHVybiB0LnB1dFZhbHVlKFtobi5GdW5jdGlvbixmdW5jdGlvbihl
KXt2YXIgbj1lLmdldFNlbGYoKS52YWx1ZSgpCi1wbihuLGZ1bmN0aW9uKG4pe3JldHVybiBUKGUs
dCkobikudmFsdWUoKX0pfV0pLGV9KQotdmFyIG1uPW5ldyBmbgotbW4uYWRkKGhuLlVua25vd24s
ZnVuY3Rpb24oZSx0KXt2YXIgbj1lWzFdLHI9blswXQotcmV0dXJuIHQuZW52Lmhhc0hlbHBlcihy
LHQuc3ltYm9sVGFibGUpP25ldyBubihyLHQuZW52Lmxvb2t1cEhlbHBlcihyLHQuc3ltYm9sVGFi
bGUpLEhlLmVtcHR5KCksdC5zeW1ib2xUYWJsZSk6RChuLHQpfSksbW4uYWRkKGhuLkNvbmNhdCxm
dW5jdGlvbihlLHQpe3ZhciBuPWVbMV0ubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBTKGUsdCl9KQot
cmV0dXJuIG5ldyBybihuKX0pLG1uLmFkZChobi5GdW5jdGlvbixmdW5jdGlvbihlLHQpe3JldHVy
biBuZXcgc24oZVsxXSx0LnN5bWJvbFRhYmxlKX0pLG1uLmFkZChobi5IZWxwZXIsZnVuY3Rpb24o
ZSx0KXt2YXIgbixyPXQuZW52LGk9dC5zeW1ib2xUYWJsZSxvPWVbMV0scz1vWzBdLGE9ZVsyXSx1
PWVbM10KLWlmKHIuaGFzSGVscGVyKHMsaSkpcmV0dXJuIG49UihhLHUsdCksbmV3IG5uKHMsci5s
b29rdXBIZWxwZXIocyxpKSxuLGkpCi10aHJvdyBuZXcgRXJyb3IoIkNvbXBpbGUgRXJyb3I6ICIr
cysiIGlzIG5vdCBhIGhlbHBlciIpfSksbW4uYWRkKGhuLkdldCxmdW5jdGlvbihlLHQpe3JldHVy
biBEKGVbMV0sdCl9KSxtbi5hZGQoaG4uVW5kZWZpbmVkLGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB3
dCh2b2lkIDApfSksbW4uYWRkKGhuLkFyZyxmdW5jdGlvbihlLHQpe3ZhciBuLHIsaSxvLHM9ZVsx
XSxhPXNbMF0sdT12b2lkIDAsbD12b2lkIDAKLWlmKHU9dC5zeW1ib2xUYWJsZS5nZXRTeW1ib2wo
Im5hbWVkIixhKSlyZXR1cm4gbj1zLnNsaWNlKDEpLHI9bmV3IGVuKHUsYSksWHQuY3JlYXRlKHIs
bikKLWlmKGw9dC5zeW1ib2xUYWJsZS5nZXRQYXJ0aWFsQXJncygpKXJldHVybiBpPXMuc2xpY2Uo
MSksbz1uZXcgdG4obCxhKSxYdC5jcmVhdGUobyxpKQotdGhyb3cgbmV3IEVycm9yKCJbQlVHXSBA
IitzLmpvaW4oIi4iKSsiIGlzIG5vdCBhIHZhbGlkIGxvb2t1cCBwYXRoLiIpfSksbW4uYWRkKGhu
Lkhhc0Jsb2NrLGZ1bmN0aW9uKGUsdCl7dmFyIG4scixpPWVbMV0sbz12b2lkIDAscz12b2lkIDAK
LWlmKG89dC5zeW1ib2xUYWJsZS5nZXRTeW1ib2woInlpZWxkcyIsaSkpcmV0dXJuIG49bmV3IEN0
KG8saSksbmV3IEV0KG4pCi1pZihzPXQuc3ltYm9sVGFibGUuZ2V0UGFydGlhbEFyZ3MoKSlyZXR1
cm4gcj1uZXcgT3QocyxpKSxuZXcgRXQocikKLXRocm93IG5ldyBFcnJvcigiW0JVR10gJHtibG9j
a05hbWV9IGlzIG5vdCBhIHZhbGlkIGJsb2NrIG5hbWUuIil9KSxtbi5hZGQoaG4uSGFzQmxvY2tQ
YXJhbXMsZnVuY3Rpb24oZSx0KXt2YXIgbixyLGk9ZVsxXSxvPXZvaWQgMCxzPXZvaWQgMAotaWYo
bz10LnN5bWJvbFRhYmxlLmdldFN5bWJvbCgieWllbGRzIixpKSlyZXR1cm4gbj1uZXcgQ3Qobyxp
KSxuZXcgeHQobikKLWlmKHM9dC5zeW1ib2xUYWJsZS5nZXRQYXJ0aWFsQXJncygpKXJldHVybiBy
PW5ldyBPdChzLGkpLG5ldyB4dChyKQotdGhyb3cgbmV3IEVycm9yKCJbQlVHXSAke2Jsb2NrTmFt
ZX0gaXMgbm90IGEgdmFsaWQgYmxvY2sgbmFtZS4iKX0pCi12YXIgZ249ZnVuY3Rpb24oKXtmdW5j
dGlvbiBlKCl7dGhpcy5uYW1lcz0oMCxuLmRpY3QpKCksdGhpcy5mdW5jcz1bXX1yZXR1cm4gZS5w
cm90b3R5cGUuYWRkPWZ1bmN0aW9uKGUsdCl7dGhpcy5mdW5jcy5wdXNoKHQpLHRoaXMubmFtZXNb
ZV09dGhpcy5mdW5jcy5sZW5ndGgtMX0sZS5wcm90b3R5cGUuYWRkTWlzc2luZz1mdW5jdGlvbihl
KXt0aGlzLm1pc3Npbmc9ZX0sZS5wcm90b3R5cGUuY29tcGlsZT1mdW5jdGlvbihlLHQpe3ZhciBy
LGksbz1lWzFdWzBdLHM9dGhpcy5uYW1lc1tvXQotdm9pZCAwPT09cz8oKDAsbi5hc3NlcnQpKCEh
dGhpcy5taXNzaW5nLG8rIiBub3QgZm91bmQsIGFuZCBubyBjYXRjaC1hbGwgYmxvY2sgaGFuZGxl
ciB3YXMgcmVnaXN0ZXJlZCIpLHI9dGhpcy5taXNzaW5nLGk9cihlLHQpLCgwLG4uYXNzZXJ0KSgh
IWksbysiIG5vdCBmb3VuZCwgYW5kIHRoZSBjYXRjaC1hbGwgYmxvY2sgaGFuZGxlciBkaWRuJ3Qg
aGFuZGxlIGl0IikpOigwLHRoaXMuZnVuY3Nbc10pKGUsdCl9LGV9KCkseW49bmV3IGduLHZuPWZ1
bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMubmFtZXM9KDAsbi5kaWN0KSgpLHRoaXMuZnVuY3M9
W119cmV0dXJuIGUucHJvdG90eXBlLmFkZD1mdW5jdGlvbihlLHQpe3RoaXMuZnVuY3MucHVzaCh0
KSx0aGlzLm5hbWVzW2VdPXRoaXMuZnVuY3MubGVuZ3RoLTF9LGUucHJvdG90eXBlLmFkZE1pc3Np
bmc9ZnVuY3Rpb24oZSl7dGhpcy5taXNzaW5nPWV9LGUucHJvdG90eXBlLmNvbXBpbGU9ZnVuY3Rp
b24oZSx0KXt2YXIgbixyLGksbyxzPWVbMV0KLWlmKCFBcnJheS5pc0FycmF5KHMpKXJldHVyblsi
ZXhwciIsc10KLXZhciBhPXZvaWQgMCx1PXZvaWQgMCxsPXZvaWQgMAotaWYoc1swXT09PWhuLkhl
bHBlcilhPXNbMV0sdT1zWzJdLGw9c1szXQotZWxzZXtpZihzWzBdIT09aG4uVW5rbm93bilyZXR1
cm5bImV4cHIiLHNdCi1hPXNbMV0sdT1sPW51bGx9aWYoYS5sZW5ndGg+MSYmIXUmJiFsKXJldHVy
blsiZXhwciIsc10KLXZhciBjPWFbMF0scD10aGlzLm5hbWVzW2NdCi1yZXR1cm4gdm9pZCAwPT09
cCYmdGhpcy5taXNzaW5nPyhuPXRoaXMubWlzc2luZyxyPW4oYSx1LGwsdCksITE9PT1yP1siZXhw
ciIsc106cik6dm9pZCAwIT09cD8oaT10aGlzLmZ1bmNzW3BdLG89aShhLHUsbCx0KSwhMT09PW8/
WyJleHByIixzXTpvKTpbImV4cHIiLHNdfSxlfSgpCi1MKHluLG5ldyB2bikKLXZhciBibj1bImph
dmFzY3JpcHQ6IiwidmJzY3JpcHQ6Il0sX249WyJBIiwiQk9EWSIsIkxJTksiLCJJTUciLCJJRlJB
TUUiLCJCQVNFIiwiRk9STSJdLHduPVsiRU1CRUQiXSxFbj1bImhyZWYiLCJzcmMiLCJiYWNrZ3Jv
dW5kIiwiYWN0aW9uIl0seG49WyJzcmMiXSxDbj17QlVUVE9OOnt0eXBlOiEwLGZvcm06ITB9LElO
UFVUOnt0eXBlOiEwLGZvcm06ITAsYXV0b2NvcnJlY3Q6ITAsbGlzdDohMH0sU0VMRUNUOntmb3Jt
OiEwfSxPUFRJT046e2Zvcm06ITB9LFRFWFRBUkVBOntmb3JtOiEwfSxMQUJFTDp7Zm9ybTohMH0s
RklFTERTRVQ6e2Zvcm06ITB9LExFR0VORDp7Zm9ybTohMH0sT0JKRUNUOntmb3JtOiEwfX0sT249
e2NvbGdyb3VwOntkZXB0aDoyLGJlZm9yZToiPHRhYmxlPjxjb2xncm91cD4iLGFmdGVyOiI8L2Nv
bGdyb3VwPjwvdGFibGU+In0sdGFibGU6e2RlcHRoOjEsYmVmb3JlOiI8dGFibGU+IixhZnRlcjoi
PC90YWJsZT4ifSx0Ym9keTp7ZGVwdGg6MixiZWZvcmU6Ijx0YWJsZT48dGJvZHk+IixhZnRlcjoi
PC90Ym9keT48L3RhYmxlPiJ9LHRmb290OntkZXB0aDoyLGJlZm9yZToiPHRhYmxlPjx0Zm9vdD4i
LGFmdGVyOiI8L3Rmb290PjwvdGFibGU+In0sdGhlYWQ6e2RlcHRoOjIsYmVmb3JlOiI8dGFibGU+
PHRoZWFkPiIsYWZ0ZXI6IjwvdGhlYWQ+PC90YWJsZT4ifSx0cjp7ZGVwdGg6MyxiZWZvcmU6Ijx0
YWJsZT48dGJvZHk+PHRyPiIsYWZ0ZXI6IjwvdHI+PC90Ym9keT48L3RhYmxlPiJ9fSxBbj0iaHR0
cDovL3d3dy53My5vcmcvMjAwMC9zdmciLFRuPXtmb3JlaWduT2JqZWN0OjEsZGVzYzoxLHRpdGxl
OjF9LFNuPU9iamVjdC5jcmVhdGUobnVsbCk7WyJiIiwiYmlnIiwiYmxvY2txdW90ZSIsImJvZHki
LCJiciIsImNlbnRlciIsImNvZGUiLCJkZCIsImRpdiIsImRsIiwiZHQiLCJlbSIsImVtYmVkIiwi
aDEiLCJoMiIsImgzIiwiaDQiLCJoNSIsImg2IiwiaGVhZCIsImhyIiwiaSIsImltZyIsImxpIiwi
bGlzdGluZyIsIm1haW4iLCJtZXRhIiwibm9iciIsIm9sIiwicCIsInByZSIsInJ1YnkiLCJzIiwi
c21hbGwiLCJzcGFuIiwic3Ryb25nIiwic3RyaWtlIiwic3ViIiwic3VwIiwidGFibGUiLCJ0dCIs
InUiLCJ1bCIsInZhciJdLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIFNuW2VdPTF9KQotdmFy
IFJuLGtuPS9bXHQtXHIgXHhBMFx1MTY4MFx1MTgwRVx1MjAwMC1cdTIwMEFcdTIwMjhcdTIwMjlc
dTIwMkZcdTIwNUZcdTMwMDBcdUZFRkZdLyxObj0idW5kZWZpbmVkIj09dHlwZW9mIGRvY3VtZW50
P251bGw6ZG9jdW1lbnQ7KGZ1bmN0aW9uKGUpe3ZhciB0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShl
KXt0aGlzLmRvY3VtZW50PWUsdGhpcy5zZXR1cFVzZWxlc3NFbGVtZW50KCl9cmV0dXJuIGUucHJv
dG90eXBlLnNldHVwVXNlbGVzc0VsZW1lbnQ9ZnVuY3Rpb24oKXt0aGlzLnVzZWxlc3NFbGVtZW50
PXRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iil9LGUucHJvdG90eXBlLmNyZWF0ZUVs
ZW1lbnQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj12b2lkIDAscj12b2lkIDAKLWlmKHQ/KG49dC5uYW1l
c3BhY2VVUkk9PT1Bbnx8InN2ZyI9PT1lLHI9VG5bdC50YWdOYW1lXSk6KG49InN2ZyI9PT1lLHI9
ITEpLG4mJiFyKXtpZihTbltlXSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBjcmVhdGUgYSAiK2Ur
IiBpbnNpZGUgYW4gU1ZHIGNvbnRleHQiKQotcmV0dXJuIHRoaXMuZG9jdW1lbnQuY3JlYXRlRWxl
bWVudE5TKEFuLGUpfXJldHVybiB0aGlzLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZSl9LGUucHJv
dG90eXBlLmNyZWF0ZUVsZW1lbnROUz1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmRvY3VtZW50
LmNyZWF0ZUVsZW1lbnROUyhlLHQpfSxlLnByb3RvdHlwZS5zZXRBdHRyaWJ1dGU9ZnVuY3Rpb24o
ZSx0LG4scil7cj9lLnNldEF0dHJpYnV0ZU5TKHIsdCxuKTplLnNldEF0dHJpYnV0ZSh0LG4pfSxl
LnByb3RvdHlwZS5jcmVhdGVUZXh0Tm9kZT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5kb2N1bWVu
dC5jcmVhdGVUZXh0Tm9kZShlKX0sZS5wcm90b3R5cGUuY3JlYXRlQ29tbWVudD1mdW5jdGlvbihl
KXtyZXR1cm4gdGhpcy5kb2N1bWVudC5jcmVhdGVDb21tZW50KGUpfSxlLnByb3RvdHlwZS5pbnNl
cnRCZWZvcmU9ZnVuY3Rpb24oZSx0LG4pe2UuaW5zZXJ0QmVmb3JlKHQsbil9LGUucHJvdG90eXBl
Lmluc2VydEhUTUxCZWZvcmU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBYKHRoaXMudXNlbGVzc0Vs
ZW1lbnQsZSxuLHQpfSxlfSgpCi1lLlRyZWVDb25zdHJ1Y3Rpb249dAotdmFyIG49dAotbj1RKE5u
LG4pLG49SChObixuKSxuPSQoTm4sbixBbiksZS5ET01UcmVlQ29uc3RydWN0aW9uPW59KShSbnx8
KFJuPXt9KSkKLXZhciBQbj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5kb2N1bWVudD1l
LHRoaXMubmFtZXNwYWNlPW51bGwsdGhpcy51c2VsZXNzRWxlbWVudD10aGlzLmRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoImRpdiIpfXJldHVybiBlLnByb3RvdHlwZS5zZXRBdHRyaWJ1dGU9ZnVuY3Rp
b24oZSx0LG4pe2Uuc2V0QXR0cmlidXRlKHQsbil9LGUucHJvdG90eXBlLnNldEF0dHJpYnV0ZU5T
PWZ1bmN0aW9uKGUsdCxuLHIpe2Uuc2V0QXR0cmlidXRlTlModCxuLHIpfSxlLnByb3RvdHlwZS5y
ZW1vdmVBdHRyaWJ1dGU9ZnVuY3Rpb24oZSx0KXtlLnJlbW92ZUF0dHJpYnV0ZSh0KX0sZS5wcm90
b3R5cGUucmVtb3ZlQXR0cmlidXRlTlM9ZnVuY3Rpb24oZSx0LG4pe2UucmVtb3ZlQXR0cmlidXRl
TlModCxuKX0sZS5wcm90b3R5cGUuY3JlYXRlVGV4dE5vZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRo
aXMuZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZSl9LGUucHJvdG90eXBlLmNyZWF0ZUNvbW1lbnQ9
ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZG9jdW1lbnQuY3JlYXRlQ29tbWVudChlKX0sZS5wcm90
b3R5cGUuY3JlYXRlRWxlbWVudD1mdW5jdGlvbihlLHQpe3ZhciBuPXZvaWQgMCxyPXZvaWQgMAot
aWYodD8obj10Lm5hbWVzcGFjZVVSST09PUFufHwic3ZnIj09PWUscj1Ublt0LnRhZ05hbWVdKToo
bj0ic3ZnIj09PWUscj0hMSksbiYmIXIpe2lmKFNuW2VdKXRocm93IG5ldyBFcnJvcigiQ2Fubm90
IGNyZWF0ZSBhICIrZSsiIGluc2lkZSBhbiBTVkcgY29udGV4dCIpCi1yZXR1cm4gdGhpcy5kb2N1
bWVudC5jcmVhdGVFbGVtZW50TlMoQW4sZSl9cmV0dXJuIHRoaXMuZG9jdW1lbnQuY3JlYXRlRWxl
bWVudChlKX0sZS5wcm90b3R5cGUuaW5zZXJ0SFRNTEJlZm9yZT1mdW5jdGlvbihlLHQsbil7cmV0
dXJuIFgodGhpcy51c2VsZXNzRWxlbWVudCxlLHQsbil9LGUucHJvdG90eXBlLmluc2VydE5vZGVC
ZWZvcmU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGkKLXJldHVybiBaKHQpPyhyPXQuZmlyc3RDaGls
ZCxpPXQubGFzdENoaWxkLHRoaXMuaW5zZXJ0QmVmb3JlKGUsdCxuKSxuZXcgWWUoZSxyLGkpKToo
dGhpcy5pbnNlcnRCZWZvcmUoZSx0LG4pLG5ldyBKZShlLHQpKX0sZS5wcm90b3R5cGUuaW5zZXJ0
VGV4dEJlZm9yZT1mdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcy5jcmVhdGVUZXh0Tm9kZShuKQot
cmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKGUscix0KSxyfSxlLnByb3RvdHlwZS5pbnNlcnRCZWZv
cmU9ZnVuY3Rpb24oZSx0LG4pe2UuaW5zZXJ0QmVmb3JlKHQsbil9LGUucHJvdG90eXBlLmluc2Vy
dEFmdGVyPWZ1bmN0aW9uKGUsdCxuKXt0aGlzLmluc2VydEJlZm9yZShlLHQsbi5uZXh0U2libGlu
Zyl9LGV9KCksam49UG4KLWpuPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGUmJlkoZSk/ZnVuY3Rpb24o
ZSl7ZnVuY3Rpb24gbihuKXt2YXIgcj0oMCx0LnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4pKHRo
aXMsZS5jYWxsKHRoaXMsbikpCi1yZXR1cm4gci51c2VsZXNzQ29tbWVudD1uLmNyZWF0ZUNvbW1l
bnQoIiIpLHJ9cmV0dXJuKDAsdC5pbmhlcml0cykobixlKSxuLnByb3RvdHlwZS5pbnNlcnRIVE1M
QmVmb3JlPWZ1bmN0aW9uKHQsbixyKXtpZihudWxsPT09cilyZXR1cm4gZS5wcm90b3R5cGUuaW5z
ZXJ0SFRNTEJlZm9yZS5jYWxsKHRoaXMsdCxuLHIpCi12YXIgaT0hMSxvPW4/bi5wcmV2aW91c1Np
Ymxpbmc6dC5sYXN0Q2hpbGQKLW8mJm8gaW5zdGFuY2VvZiBUZXh0JiYoaT0hMCx0Lmluc2VydEJl
Zm9yZSh0aGlzLnVzZWxlc3NDb21tZW50LG4pKQotdmFyIHM9ZS5wcm90b3R5cGUuaW5zZXJ0SFRN
TEJlZm9yZS5jYWxsKHRoaXMsdCxuLHIpCi1yZXR1cm4gaSYmdC5yZW1vdmVDaGlsZCh0aGlzLnVz
ZWxlc3NDb21tZW50KSxzfSxufShuKTpufShObixqbiksam49ZnVuY3Rpb24oZSxuKXtpZighZSly
ZXR1cm4gbgotaWYoIVcoZSkpcmV0dXJuIG4KLXZhciByPWUuY3JlYXRlRWxlbWVudCgiZGl2IikK
LXJldHVybiBmdW5jdGlvbihlKXtmdW5jdGlvbiBuKCl7cmV0dXJuKDAsdC5wb3NzaWJsZUNvbnN0
cnVjdG9yUmV0dXJuKSh0aGlzLGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4oMCx0Lmlu
aGVyaXRzKShuLGUpLG4ucHJvdG90eXBlLmluc2VydEhUTUxCZWZvcmU9ZnVuY3Rpb24odCxuLGkp
e2lmKG51bGw9PT1pfHwiIj09PWkpcmV0dXJuIGUucHJvdG90eXBlLmluc2VydEhUTUxCZWZvcmUu
Y2FsbCh0aGlzLHQsbixpKQotdmFyIG89dC50YWdOYW1lLnRvTG93ZXJDYXNlKCkscz1PbltvXQot
cmV0dXJuIHZvaWQgMD09PXM/ZS5wcm90b3R5cGUuaW5zZXJ0SFRNTEJlZm9yZS5jYWxsKHRoaXMs
dCxuLGkpOlYodCxzLHIsaSxuKX0sbn0obil9KE5uLGpuKSxqbj1mdW5jdGlvbihlLG4scil7aWYo
IWUpcmV0dXJuIG4KLWlmKCFLKGUscikpcmV0dXJuIG4KLXZhciBpPWUuY3JlYXRlRWxlbWVudCgi
ZGl2IikKLXJldHVybiBmdW5jdGlvbihlKXtmdW5jdGlvbiBuKCl7cmV0dXJuKDAsdC5wb3NzaWJs
ZUNvbnN0cnVjdG9yUmV0dXJuKSh0aGlzLGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4o
MCx0LmluaGVyaXRzKShuLGUpLG4ucHJvdG90eXBlLmluc2VydEhUTUxCZWZvcmU9ZnVuY3Rpb24o
dCxuLG8pe3JldHVybiBudWxsPT09b3x8IiI9PT1vP2UucHJvdG90eXBlLmluc2VydEhUTUxCZWZv
cmUuY2FsbCh0aGlzLHQsbixvKTp0Lm5hbWVzcGFjZVVSSSE9PXI/ZS5wcm90b3R5cGUuaW5zZXJ0
SFRNTEJlZm9yZS5jYWxsKHRoaXMsdCxuLG8pOkcodCxpLG8sbil9LG59KG4pfShObixqbixBbikK
LXZhciBEbj1qbixMbj1Sbi5ET01UcmVlQ29uc3RydWN0aW9uLEluPWZ1bmN0aW9uKCl7ZnVuY3Rp
b24gZShlKXt0aGlzLmF0dHI9ZX1yZXR1cm4gZS5wcm90b3R5cGUuc2V0QXR0cmlidXRlPWZ1bmN0
aW9uKGUsdCxuLHIpe3ZhciBpPWUuZ2V0QXBwZW5kT3BlcmF0aW9ucygpLG89cmUobikKLWllKG8p
fHxpLnNldEF0dHJpYnV0ZSh0LHRoaXMuYXR0cixvLHIpfSxlLnByb3RvdHlwZS51cGRhdGVBdHRy
aWJ1dGU9ZnVuY3Rpb24oZSx0LG4scil7bnVsbD09PW58fHZvaWQgMD09PW58fCExPT09bj9yP2Uu
Z2V0RE9NKCkucmVtb3ZlQXR0cmlidXRlTlModCxyLHRoaXMuYXR0cik6ZS5nZXRET00oKS5yZW1v
dmVBdHRyaWJ1dGUodCx0aGlzLmF0dHIpOnRoaXMuc2V0QXR0cmlidXRlKGUsdCxuKX0sZX0oKSxN
bj1mdW5jdGlvbihlKXtmdW5jdGlvbiBuKCl7cmV0dXJuKDAsdC5wb3NzaWJsZUNvbnN0cnVjdG9y
UmV0dXJuKSh0aGlzLGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4oMCx0LmluaGVyaXRz
KShuLGUpLG4ucHJvdG90eXBlLnNldEF0dHJpYnV0ZT1mdW5jdGlvbihlLHQsbil7aWUobil8fCh0
W3RoaXMuYXR0cl09bil9LG4ucHJvdG90eXBlLnJlbW92ZUF0dHJpYnV0ZT1mdW5jdGlvbihlLHQs
bil7dmFyIHI9dGhpcy5hdHRyCi1uP2UuZ2V0RE9NKCkucmVtb3ZlQXR0cmlidXRlTlModCxuLHIp
OmUuZ2V0RE9NKCkucmVtb3ZlQXR0cmlidXRlKHQscil9LG4ucHJvdG90eXBlLnVwZGF0ZUF0dHJp
YnV0ZT1mdW5jdGlvbihlLHQsbixyKXt0W3RoaXMuYXR0cl09bixpZShuKSYmdGhpcy5yZW1vdmVB
dHRyaWJ1dGUoZSx0LHIpfSxufShJbiksRm49ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbigpe3JldHVy
bigwLHQucG9zc2libGVDb25zdHJ1Y3RvclJldHVybikodGhpcyxlLmFwcGx5KHRoaXMsYXJndW1l
bnRzKSl9cmV0dXJuKDAsdC5pbmhlcml0cykobixlKSxuLnByb3RvdHlwZS5zZXRBdHRyaWJ1dGU9
ZnVuY3Rpb24odCxuLHIpe2UucHJvdG90eXBlLnNldEF0dHJpYnV0ZS5jYWxsKHRoaXMsdCxuLFUo
dCxuLHRoaXMuYXR0cixyKSl9LG4ucHJvdG90eXBlLnVwZGF0ZUF0dHJpYnV0ZT1mdW5jdGlvbih0
LG4scil7ZS5wcm90b3R5cGUudXBkYXRlQXR0cmlidXRlLmNhbGwodGhpcyx0LG4sVSh0LG4sdGhp
cy5hdHRyLHIpKX0sbn0oTW4pLHpuPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4oKXtyZXR1cm4oMCx0
LnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4pKHRoaXMsZS5hcHBseSh0aGlzLGFyZ3VtZW50cykp
fXJldHVybigwLHQuaW5oZXJpdHMpKG4sZSksbi5wcm90b3R5cGUuc2V0QXR0cmlidXRlPWZ1bmN0
aW9uKGUsdCxuKXt0LnZhbHVlPXVlKG4pfSxuLnByb3RvdHlwZS51cGRhdGVBdHRyaWJ1dGU9ZnVu
Y3Rpb24oZSx0LG4pe3ZhciByPXQsaT1yLnZhbHVlLG89dWUobikKLWkhPT1vJiYoci52YWx1ZT1v
KX0sbn0oSW4pLFVuPW5ldyB6bigidmFsdWUiKSxCbj1mdW5jdGlvbihlKXtmdW5jdGlvbiBuKCl7
cmV0dXJuKDAsdC5wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKSh0aGlzLGUuYXBwbHkodGhpcyxh
cmd1bWVudHMpKX1yZXR1cm4oMCx0LmluaGVyaXRzKShuLGUpLG4ucHJvdG90eXBlLnNldEF0dHJp
YnV0ZT1mdW5jdGlvbihlLHQsbil7bnVsbCE9PW4mJnZvaWQgMCE9PW4mJiExIT09biYmKHQuc2Vs
ZWN0ZWQ9ITApfSxuLnByb3RvdHlwZS51cGRhdGVBdHRyaWJ1dGU9ZnVuY3Rpb24oZSx0LG4pe3Zh
ciByPXQKLXIuc2VsZWN0ZWQ9ISFufSxufShNbikscW49bmV3IEJuKCJzZWxlY3RlZCIpLEhuPWZ1
bmN0aW9uKGUpe2Z1bmN0aW9uIG4oKXtyZXR1cm4oMCx0LnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1
cm4pKHRoaXMsZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXJldHVybigwLHQuaW5oZXJpdHMpKG4s
ZSksbi5wcm90b3R5cGUuc2V0QXR0cmlidXRlPWZ1bmN0aW9uKHQsbixyKXtlLnByb3RvdHlwZS5z
ZXRBdHRyaWJ1dGUuY2FsbCh0aGlzLHQsbixVKHQsbix0aGlzLmF0dHIscikpfSxuLnByb3RvdHlw
ZS51cGRhdGVBdHRyaWJ1dGU9ZnVuY3Rpb24odCxuLHIpe2UucHJvdG90eXBlLnVwZGF0ZUF0dHJp
YnV0ZS5jYWxsKHRoaXMsdCxuLFUodCxuLHRoaXMuYXR0cixyKSl9LG59KEluKSxWbj1mdW5jdGlv
bigpe2Z1bmN0aW9uIGUoZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1
bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGwKLXRoaXMuY2FsbGVyU2NvcGU9bnVsbCx0aGlzLnNs
b3RzPWUsdGhpcy5jYWxsZXJTY29wZT10fXJldHVybiBlLnJvb3Q9ZnVuY3Rpb24odCl7dmFyIG4s
cj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06
MCxpPW5ldyBBcnJheShyKzEpCi1mb3Iobj0wO248PXI7bisrKWlbbl09bWUKLXJldHVybiBuZXcg
ZShpKS5pbml0KHtzZWxmOnR9KX0sZS5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbihlKXt2YXIgdD1l
LnNlbGYKLXJldHVybiB0aGlzLnNsb3RzWzBdPXQsdGhpc30sZS5wcm90b3R5cGUuZ2V0U2VsZj1m
dW5jdGlvbigpe3JldHVybiB0aGlzLnNsb3RzWzBdfSxlLnByb3RvdHlwZS5nZXRTeW1ib2w9ZnVu
Y3Rpb24oZSl7cmV0dXJuIHRoaXMuc2xvdHNbZV19LGUucHJvdG90eXBlLmdldEJsb2NrPWZ1bmN0
aW9uKGUpe3JldHVybiB0aGlzLnNsb3RzW2VdfSxlLnByb3RvdHlwZS5nZXRQYXJ0aWFsQXJncz1m
dW5jdGlvbihlKXtyZXR1cm4gdGhpcy5zbG90c1tlXX0sZS5wcm90b3R5cGUuYmluZFN5bWJvbD1m
dW5jdGlvbihlLHQpe3RoaXMuc2xvdHNbZV09dH0sZS5wcm90b3R5cGUuYmluZEJsb2NrPWZ1bmN0
aW9uKGUsdCl7dGhpcy5zbG90c1tlXT10fSxlLnByb3RvdHlwZS5iaW5kUGFydGlhbEFyZ3M9ZnVu
Y3Rpb24oZSx0KXt0aGlzLnNsb3RzW2VdPXR9LGUucHJvdG90eXBlLmJpbmRDYWxsZXJTY29wZT1m
dW5jdGlvbihlKXt0aGlzLmNhbGxlclNjb3BlPWV9LGUucHJvdG90eXBlLmdldENhbGxlclNjb3Bl
PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2FsbGVyU2NvcGV9LGUucHJvdG90eXBlLmNoaWxkPWZ1
bmN0aW9uKCl7cmV0dXJuIG5ldyBlKHRoaXMuc2xvdHMuc2xpY2UoKSx0aGlzLmNhbGxlclNjb3Bl
KX0sZX0oKSxXbj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLnNjaGVkdWxlZEluc3RhbGxN
YW5hZ2Vycz1bXSx0aGlzLnNjaGVkdWxlZEluc3RhbGxNb2RpZmllcnM9W10sdGhpcy5zY2hlZHVs
ZWRVcGRhdGVNb2RpZmllck1hbmFnZXJzPVtdLHRoaXMuc2NoZWR1bGVkVXBkYXRlTW9kaWZpZXJz
PVtdLHRoaXMuY3JlYXRlZENvbXBvbmVudHM9W10sdGhpcy5jcmVhdGVkTWFuYWdlcnM9W10sdGhp
cy51cGRhdGVkQ29tcG9uZW50cz1bXSx0aGlzLnVwZGF0ZWRNYW5hZ2Vycz1bXSx0aGlzLmRlc3Ry
dWN0b3JzPVtdfXJldHVybiBlLnByb3RvdHlwZS5kaWRDcmVhdGU9ZnVuY3Rpb24oZSx0KXt0aGlz
LmNyZWF0ZWRDb21wb25lbnRzLnB1c2goZSksdGhpcy5jcmVhdGVkTWFuYWdlcnMucHVzaCh0KX0s
ZS5wcm90b3R5cGUuZGlkVXBkYXRlPWZ1bmN0aW9uKGUsdCl7dGhpcy51cGRhdGVkQ29tcG9uZW50
cy5wdXNoKGUpLHRoaXMudXBkYXRlZE1hbmFnZXJzLnB1c2godCl9LGUucHJvdG90eXBlLnNjaGVk
dWxlSW5zdGFsbE1vZGlmaWVyPWZ1bmN0aW9uKGUsdCl7dGhpcy5zY2hlZHVsZWRJbnN0YWxsTWFu
YWdlcnMucHVzaCh0KSx0aGlzLnNjaGVkdWxlZEluc3RhbGxNb2RpZmllcnMucHVzaChlKX0sZS5w
cm90b3R5cGUuc2NoZWR1bGVVcGRhdGVNb2RpZmllcj1mdW5jdGlvbihlLHQpe3RoaXMuc2NoZWR1
bGVkVXBkYXRlTW9kaWZpZXJNYW5hZ2Vycy5wdXNoKHQpLHRoaXMuc2NoZWR1bGVkVXBkYXRlTW9k
aWZpZXJzLnB1c2goZSl9LGUucHJvdG90eXBlLmRpZERlc3Ryb3k9ZnVuY3Rpb24oZSl7dGhpcy5k
ZXN0cnVjdG9ycy5wdXNoKGUpfSxlLnByb3RvdHlwZS5jb21taXQ9ZnVuY3Rpb24oKXt2YXIgZSx0
LG4scixpLG8scyxhLHUsbCxjLHAsZixoPXRoaXMuY3JlYXRlZENvbXBvbmVudHMsZD10aGlzLmNy
ZWF0ZWRNYW5hZ2VycwotZm9yKGU9MDtlPGgubGVuZ3RoO2UrKyl0PWhbZV0sbj1kW2VdLG4uZGlk
Q3JlYXRlKHQpCi12YXIgbT10aGlzLnVwZGF0ZWRDb21wb25lbnRzLGc9dGhpcy51cGRhdGVkTWFu
YWdlcnMKLWZvcihyPTA7cjxtLmxlbmd0aDtyKyspaT1tW3JdLG89Z1tyXSxvLmRpZFVwZGF0ZShp
KQotdmFyIHk9dGhpcy5kZXN0cnVjdG9ycwotZm9yKHM9MDtzPHkubGVuZ3RoO3MrKyl5W3NdLmRl
c3Ryb3koKQotdmFyIHY9dGhpcy5zY2hlZHVsZWRJbnN0YWxsTWFuYWdlcnMsYj10aGlzLnNjaGVk
dWxlZEluc3RhbGxNb2RpZmllcnMKLWZvcihhPTA7YTx2Lmxlbmd0aDthKyspdT12W2FdLGw9Ylth
XSx1Lmluc3RhbGwobCkKLXZhciBfPXRoaXMuc2NoZWR1bGVkVXBkYXRlTW9kaWZpZXJNYW5hZ2Vy
cyx3PXRoaXMuc2NoZWR1bGVkVXBkYXRlTW9kaWZpZXJzCi1mb3IoYz0wO2M8Xy5sZW5ndGg7Yysr
KXA9X1tjXSxmPXdbY10scC51cGRhdGUoZil9LGV9KCksJG49ZnVuY3Rpb24oKXtmdW5jdGlvbiBl
KGUpe3RoaXMuYXJyYXk9ZSx0aGlzLm9mZnNldD0wfXJldHVybigwLHQuY3JlYXRlQ2xhc3MpKGUs
W3trZXk6InR5cGUiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFycmF5W3RoaXMub2Zmc2V0
XX19LHtrZXk6Im9wMSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXJyYXlbdGhpcy5vZmZz
ZXQrMV19fSx7a2V5OiJvcDIiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFycmF5W3RoaXMu
b2Zmc2V0KzJdfX0se2tleToib3AzIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcnJheVt0
aGlzLm9mZnNldCszXX19XSksZX0oKSxHbj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLm9w
Y29kZXM9W10sdGhpcy5fb2Zmc2V0PTAsdGhpcy5fb3Bjb2RlPW5ldyAkbih0aGlzLm9wY29kZXMp
fXJldHVybiBlLnByb3RvdHlwZS5vcGNvZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX29wY29k
ZS5vZmZzZXQ9ZSx0aGlzLl9vcGNvZGV9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbihlLHQpe3Zh
ciBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1sy
XTowLHI9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRz
WzNdOjAsaT1hcmd1bWVudHMubGVuZ3RoPjQmJnZvaWQgMCE9PWFyZ3VtZW50c1s0XT9hcmd1bWVu
dHNbNF06MAotdGhpcy5vcGNvZGVzW2VdPXQsdGhpcy5vcGNvZGVzW2UrMV09bix0aGlzLm9wY29k
ZXNbZSsyXT1yLHRoaXMub3Bjb2Rlc1tlKzNdPWl9LGUucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24o
ZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1l
bnRzWzFdOjAsbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1
bWVudHNbMl06MCxyPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2Fy
Z3VtZW50c1szXTowLGk9dGhpcy5fb2Zmc2V0Ci1yZXR1cm4gdGhpcy5vcGNvZGVzW3RoaXMuX29m
ZnNldCsrXT1lLHRoaXMub3Bjb2Rlc1t0aGlzLl9vZmZzZXQrK109dCx0aGlzLm9wY29kZXNbdGhp
cy5fb2Zmc2V0KytdPW4sdGhpcy5vcGNvZGVzW3RoaXMuX29mZnNldCsrXT1yLGl9LCgwLHQuY3Jl
YXRlQ2xhc3MpKGUsW3trZXk6Im5leHQiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9vZmZz
ZXR9fSx7a2V5OiJjdXJyZW50IixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb2Zmc2V0LTR9
fV0pLGV9KCksS249ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3ZhciB0PWUuYXBwZW5kT3BlcmF0
aW9ucyxuPWUudXBkYXRlT3BlcmF0aW9ucwotdGhpcy5fbWFjcm9zPW51bGwsdGhpcy5fdHJhbnNh
Y3Rpb249bnVsbCx0aGlzLmNvbnN0YW50cz1uZXcgX2UsdGhpcy5wcm9ncmFtPW5ldyBHbix0aGlz
LmFwcGVuZE9wZXJhdGlvbnM9dCx0aGlzLnVwZGF0ZU9wZXJhdGlvbnM9bn1yZXR1cm4gZS5wcm90
b3R5cGUudG9Db25kaXRpb25hbFJlZmVyZW5jZT1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IGJlKGUp
fSxlLnByb3RvdHlwZS5nZXRBcHBlbmRPcGVyYXRpb25zPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMu
YXBwZW5kT3BlcmF0aW9uc30sZS5wcm90b3R5cGUuZ2V0RE9NPWZ1bmN0aW9uKCl7cmV0dXJuIHRo
aXMudXBkYXRlT3BlcmF0aW9uc30sZS5wcm90b3R5cGUuZ2V0SWRlbnRpdHk9ZnVuY3Rpb24oZSl7
cmV0dXJuKDAsbi5lbnN1cmVHdWlkKShlKSsiIn0sZS5wcm90b3R5cGUuYmVnaW49ZnVuY3Rpb24o
KXt0aGlzLl90cmFuc2FjdGlvbj1uZXcgV259LGUucHJvdG90eXBlLmRpZENyZWF0ZT1mdW5jdGlv
bihlLHQpe3RoaXMudHJhbnNhY3Rpb24uZGlkQ3JlYXRlKGUsdCl9LGUucHJvdG90eXBlLmRpZFVw
ZGF0ZT1mdW5jdGlvbihlLHQpe3RoaXMudHJhbnNhY3Rpb24uZGlkVXBkYXRlKGUsdCl9LGUucHJv
dG90eXBlLnNjaGVkdWxlSW5zdGFsbE1vZGlmaWVyPWZ1bmN0aW9uKGUsdCl7dGhpcy50cmFuc2Fj
dGlvbi5zY2hlZHVsZUluc3RhbGxNb2RpZmllcihlLHQpfSxlLnByb3RvdHlwZS5zY2hlZHVsZVVw
ZGF0ZU1vZGlmaWVyPWZ1bmN0aW9uKGUsdCl7dGhpcy50cmFuc2FjdGlvbi5zY2hlZHVsZVVwZGF0
ZU1vZGlmaWVyKGUsdCl9LGUucHJvdG90eXBlLmRpZERlc3Ryb3k9ZnVuY3Rpb24oZSl7dGhpcy50
cmFuc2FjdGlvbi5kaWREZXN0cm95KGUpfSxlLnByb3RvdHlwZS5jb21taXQ9ZnVuY3Rpb24oKXt0
aGlzLnRyYW5zYWN0aW9uLmNvbW1pdCgpLHRoaXMuX3RyYW5zYWN0aW9uPW51bGx9LGUucHJvdG90
eXBlLmF0dHJpYnV0ZUZvcj1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gZWUoZSx0KX0sZS5wcm90
b3R5cGUubWFjcm9zPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fbWFjcm9zCi1yZXR1cm4gZXx8KHRo
aXMuX21hY3Jvcz1lPUwoKSksZX0sKDAsdC5jcmVhdGVDbGFzcykoZSxbe2tleToidHJhbnNhY3Rp
b24iLGdldDpmdW5jdGlvbigpe3JldHVybigwLG4uZXhwZWN0KSh0aGlzLl90cmFuc2FjdGlvbiwi
bXVzdCBiZSBpbiBhIHRyYW5zYWN0aW9uIil9fV0pLGV9KCksUW49ZnVuY3Rpb24oKXtmdW5jdGlv
biBlKGUsdCxuKXt0aGlzLmVudj1lLHRoaXMudXBkYXRpbmc9dCx0aGlzLmJvdW5kcz1ufXJldHVy
biBlLnByb3RvdHlwZS5yZXJlbmRlcj1mdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+
MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7YWx3YXlzUmV2YWxpZGF0ZToh
MX0sdD1lLmFsd2F5c1JldmFsaWRhdGUsbj12b2lkIDAhPT10JiZ0LHI9dGhpcy5lbnYsaT10aGlz
LnVwZGF0aW5nCi1uZXcgZXIocix7YWx3YXlzUmV2YWxpZGF0ZTpufSkuZXhlY3V0ZShpLHRoaXMp
fSxlLnByb3RvdHlwZS5wYXJlbnRFbGVtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYm91bmRz
LnBhcmVudEVsZW1lbnQoKX0sZS5wcm90b3R5cGUuZmlyc3ROb2RlPWZ1bmN0aW9uKCl7cmV0dXJu
IHRoaXMuYm91bmRzLmZpcnN0Tm9kZSgpfSxlLnByb3RvdHlwZS5sYXN0Tm9kZT1mdW5jdGlvbigp
e3JldHVybiB0aGlzLmJvdW5kcy5sYXN0Tm9kZSgpfSxlLnByb3RvdHlwZS5vcGNvZGVzPWZ1bmN0
aW9uKCl7cmV0dXJuIHRoaXMudXBkYXRpbmd9LGUucHJvdG90eXBlLmhhbmRsZUV4Y2VwdGlvbj1m
dW5jdGlvbigpe3Rocm93InRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiJ9LGUucHJvdG90eXBlLmRl
c3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLmJvdW5kcy5kZXN0cm95KCksYSh0aGlzLmJvdW5kcyl9LGV9
KCksWW49ZnVuY3Rpb24oZSx0LG4pe3RoaXMub3BlcmFuZD1lLHRoaXMuYXJncz10LHRoaXMuY29u
ZGl0aW9uPW59LEpuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3ZhciBuPWFyZ3VtZW50cy5s
ZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpudWxsLHI9YXJndW1l
bnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOm51bGwsaT1h
cmd1bWVudHMubGVuZ3RoPjQmJnZvaWQgMCE9PWFyZ3VtZW50c1s0XT9hcmd1bWVudHNbNF06bnVs
bAotdGhpcy5zdGFydD1lLHRoaXMuZW5kPXQsdGhpcy5jb21wb25lbnQ9bix0aGlzLm1hbmFnZXI9
cix0aGlzLnNoYWRvdz1pLHRoaXMub3BlcmFuZD1udWxsLHRoaXMuaW1tZWRpYXRlPW51bGwsdGhp
cy5hcmdzPW51bGwsdGhpcy5jYWxsZXJTY29wZT1udWxsLHRoaXMuYmxvY2tzPW51bGwsdGhpcy5j
b25kaXRpb249bnVsbCx0aGlzLml0ZXJhdG9yPW51bGwsdGhpcy5rZXk9bnVsbCx0aGlzLmlwPWV9
cmV0dXJuIGUucHJvdG90eXBlLmNhcHR1cmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFluKHRoaXMu
b3BlcmFuZCx0aGlzLmFyZ3MsdGhpcy5jb25kaXRpb24pfSxlLnByb3RvdHlwZS5yZXN0b3JlPWZ1
bmN0aW9uKGUpe3RoaXMub3BlcmFuZD1lLm9wZXJhbmQsdGhpcy5hcmdzPWUuYXJncyx0aGlzLmNv
bmRpdGlvbj1lLmNvbmRpdGlvbn0sZX0oKSxYbj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlz
LmZyYW1lcz1bXSx0aGlzLmZyYW1lPS0xfXJldHVybiBlLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9u
KGUsdCl7dmFyIG4scj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9h
cmd1bWVudHNbMl06bnVsbCxpPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRz
WzNdP2FyZ3VtZW50c1szXTpudWxsLG89YXJndW1lbnRzLmxlbmd0aD40JiZ2b2lkIDAhPT1hcmd1
bWVudHNbNF0/YXJndW1lbnRzWzRdOm51bGwscz0rK3RoaXMuZnJhbWUKLXM8dGhpcy5mcmFtZXMu
bGVuZ3RoPyhuPXRoaXMuZnJhbWVzW3NdLG4uc3RhcnQ9bi5pcD1lLG4uZW5kPXQsbi5jb21wb25l
bnQ9cixuLm1hbmFnZXI9aSxuLnNoYWRvdz1vLG4ub3BlcmFuZD1udWxsLG4uaW1tZWRpYXRlPW51
bGwsbi5hcmdzPW51bGwsbi5jYWxsZXJTY29wZT1udWxsLG4uYmxvY2tzPW51bGwsbi5jb25kaXRp
b249bnVsbCxuLml0ZXJhdG9yPW51bGwsbi5rZXk9bnVsbCk6dGhpcy5mcmFtZXNbc109bmV3IEpu
KGUsdCxyLGksbyl9LGUucHJvdG90eXBlLnBvcD1mdW5jdGlvbigpe3RoaXMuZnJhbWUtLX0sZS5w
cm90b3R5cGUuY2FwdHVyZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnRGcmFtZS5jYXB0
dXJlKCl9LGUucHJvdG90eXBlLnJlc3RvcmU9ZnVuY3Rpb24oZSl7dGhpcy5jdXJyZW50RnJhbWUu
cmVzdG9yZShlKX0sZS5wcm90b3R5cGUuZ2V0U3RhcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5j
dXJyZW50RnJhbWUuc3RhcnR9LGUucHJvdG90eXBlLmdldEVuZD1mdW5jdGlvbigpe3JldHVybiB0
aGlzLmN1cnJlbnRGcmFtZS5lbmR9LGUucHJvdG90eXBlLmdldEN1cnJlbnQ9ZnVuY3Rpb24oKXty
ZXR1cm4gdGhpcy5jdXJyZW50RnJhbWUuaXB9LGUucHJvdG90eXBlLnNldEN1cnJlbnQ9ZnVuY3Rp
b24oZSl7cmV0dXJuIHRoaXMuY3VycmVudEZyYW1lLmlwPWV9LGUucHJvdG90eXBlLmdldE9wZXJh
bmQ9ZnVuY3Rpb24oKXtyZXR1cm4oMCxuLnVud3JhcCkodGhpcy5jdXJyZW50RnJhbWUub3BlcmFu
ZCl9LGUucHJvdG90eXBlLnNldE9wZXJhbmQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuY3VycmVu
dEZyYW1lLm9wZXJhbmQ9ZX0sZS5wcm90b3R5cGUuZ2V0SW1tZWRpYXRlPWZ1bmN0aW9uKCl7cmV0
dXJuIHRoaXMuY3VycmVudEZyYW1lLmltbWVkaWF0ZX0sZS5wcm90b3R5cGUuc2V0SW1tZWRpYXRl
PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmN1cnJlbnRGcmFtZS5pbW1lZGlhdGU9ZX0sZS5wcm90
b3R5cGUuZ2V0QXJncz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnRGcmFtZS5hcmdzfSxl
LnByb3RvdHlwZS5zZXRBcmdzPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmN1cnJlbnRGcmFtZS5h
cmdzPWV9LGUucHJvdG90eXBlLmdldENvbmRpdGlvbj1mdW5jdGlvbigpe3JldHVybigwLG4udW53
cmFwKSh0aGlzLmN1cnJlbnRGcmFtZS5jb25kaXRpb24pfSxlLnByb3RvdHlwZS5zZXRDb25kaXRp
b249ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuY3VycmVudEZyYW1lLmNvbmRpdGlvbj1lfSxlLnBy
b3RvdHlwZS5nZXRJdGVyYXRvcj1mdW5jdGlvbigpe3JldHVybigwLG4udW53cmFwKSh0aGlzLmN1
cnJlbnRGcmFtZS5pdGVyYXRvcil9LGUucHJvdG90eXBlLnNldEl0ZXJhdG9yPWZ1bmN0aW9uKGUp
e3JldHVybiB0aGlzLmN1cnJlbnRGcmFtZS5pdGVyYXRvcj1lfSxlLnByb3RvdHlwZS5nZXRLZXk9
ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50RnJhbWUua2V5fSxlLnByb3RvdHlwZS5zZXRL
ZXk9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuY3VycmVudEZyYW1lLmtleT1lfSxlLnByb3RvdHlw
ZS5nZXRCbG9ja3M9ZnVuY3Rpb24oKXtyZXR1cm4oMCxuLnVud3JhcCkodGhpcy5jdXJyZW50RnJh
bWUuYmxvY2tzKX0sZS5wcm90b3R5cGUuc2V0QmxvY2tzPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlz
LmN1cnJlbnRGcmFtZS5ibG9ja3M9ZX0sZS5wcm90b3R5cGUuZ2V0Q2FsbGVyU2NvcGU9ZnVuY3Rp
b24oKXtyZXR1cm4oMCxuLnVud3JhcCkodGhpcy5jdXJyZW50RnJhbWUuY2FsbGVyU2NvcGUpfSxl
LnByb3RvdHlwZS5zZXRDYWxsZXJTY29wZT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5jdXJyZW50
RnJhbWUuY2FsbGVyU2NvcGU9ZX0sZS5wcm90b3R5cGUuZ2V0Q29tcG9uZW50PWZ1bmN0aW9uKCl7
cmV0dXJuKDAsbi51bndyYXApKHRoaXMuY3VycmVudEZyYW1lLmNvbXBvbmVudCl9LGUucHJvdG90
eXBlLmdldE1hbmFnZXI9ZnVuY3Rpb24oKXtyZXR1cm4oMCxuLnVud3JhcCkodGhpcy5jdXJyZW50
RnJhbWUubWFuYWdlcil9LGUucHJvdG90eXBlLmdldFNoYWRvdz1mdW5jdGlvbigpe3JldHVybiB0
aGlzLmN1cnJlbnRGcmFtZS5zaGFkb3d9LGUucHJvdG90eXBlLmdvdG89ZnVuY3Rpb24oZSl7dGhp
cy5zZXRDdXJyZW50KGUpfSxlLnByb3RvdHlwZS5uZXh0U3RhdGVtZW50PWZ1bmN0aW9uKGUpe2Zv
cih2YXIgdCxuLHIsaTstMSE9PXRoaXMuZnJhbWU7KXtpZih0PXRoaXMuZnJhbWVzW3RoaXMuZnJh
bWVdLG49dC5pcCxyPXQuZW5kLG48cilyZXR1cm4gaT1lLnByb2dyYW0sdC5pcCs9NCxpLm9wY29k
ZShuKQotdGhpcy5wb3AoKX1yZXR1cm4gbnVsbH0sKDAsdC5jcmVhdGVDbGFzcykoZSxbe2tleToi
Y3VycmVudEZyYW1lIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mcmFtZXNbdGhpcy5mcmFt
ZV19fV0pLGV9KCksWm49ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxyLGkpe3RoaXMuZW52PWUs
dGhpcy5lbGVtZW50U3RhY2s9aSx0aGlzLmR5bmFtaWNTY29wZVN0YWNrPW5ldyBuLlN0YWNrLHRo
aXMuc2NvcGVTdGFjaz1uZXcgbi5TdGFjayx0aGlzLnVwZGF0aW5nT3Bjb2RlU3RhY2s9bmV3IG4u
U3RhY2ssdGhpcy5jYWNoZUdyb3Vwcz1uZXcgbi5TdGFjayx0aGlzLmxpc3RCbG9ja1N0YWNrPW5l
dyBuLlN0YWNrLHRoaXMuZnJhbWU9bmV3IFhuLHRoaXMuZW52PWUsdGhpcy5jb25zdGFudHM9ZS5j
b25zdGFudHMsdGhpcy5lbGVtZW50U3RhY2s9aSx0aGlzLnNjb3BlU3RhY2sucHVzaCh0KSx0aGlz
LmR5bmFtaWNTY29wZVN0YWNrLnB1c2gocil9cmV0dXJuIGUuaW5pdGlhbD1mdW5jdGlvbih0LG4s
cixpLG8pe3ZhciBzPW8uc3ltYm9scyxhPW8uc3RhcnQsdT1vLmVuZCxsPVZuLnJvb3QobixzKSxj
PW5ldyBlKHQsbCxyLGkpCi1yZXR1cm4gYy5wcmVwYXJlKGEsdSksY30sZS5wcm90b3R5cGUuY2Fw
dHVyZT1mdW5jdGlvbigpe3JldHVybntlbnY6dGhpcy5lbnYsc2NvcGU6dGhpcy5zY29wZSgpLGR5
bmFtaWNTY29wZTp0aGlzLmR5bmFtaWNTY29wZSgpLGZyYW1lOnRoaXMuZnJhbWUuY2FwdHVyZSgp
fX0sZS5wcm90b3R5cGUuZ290bz1mdW5jdGlvbihlKXt0aGlzLmZyYW1lLmdvdG8oZSl9LGUucHJv
dG90eXBlLmJlZ2luQ2FjaGVHcm91cD1mdW5jdGlvbigpe3RoaXMuY2FjaGVHcm91cHMucHVzaCh0
aGlzLnVwZGF0aW5nKCkudGFpbCgpKX0sZS5wcm90b3R5cGUuY29tbWl0Q2FjaGVHcm91cD1mdW5j
dGlvbigpe3ZhciBlPW5ldyBOZSgiRU5EIiksdD10aGlzLnVwZGF0aW5nKCksaT10aGlzLmNhY2hl
R3JvdXBzLnBvcCgpLG89aT90Lm5leHROb2RlKGkpOnQuaGVhZCgpLHM9dC50YWlsKCksYT0oMCxy
LmNvbWJpbmVTbGljZSkobmV3IG4uTGlzdFNsaWNlKG8scykpLHU9bmV3IFJlKGEsZSkKLXQuaW5z
ZXJ0QmVmb3JlKHUsbyksdC5hcHBlbmQobmV3IGtlKHUpKSx0LmFwcGVuZChlKX0sZS5wcm90b3R5
cGUuZW50ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgcj1uZXcgbi5MaW5rZWRMaXN0LGk9dGhpcy5zdGFj
aygpLnB1c2hVcGRhdGFibGVCbG9jaygpLG89dGhpcy5jYXB0dXJlKCkscz1uZXcgbnIoZSx0LG8s
aSxyKQotdGhpcy5kaWRFbnRlcihzLHIpfSxlLnByb3RvdHlwZS5lbnRlcldpdGhLZXk9ZnVuY3Rp
b24oZSx0LHIpe3ZhciBpPW5ldyBuLkxpbmtlZExpc3Qsbz10aGlzLnN0YWNrKCkucHVzaFVwZGF0
YWJsZUJsb2NrKCkscz10aGlzLmNhcHR1cmUoKSxhPW5ldyBucih0LHIscyxvLGkpCi10aGlzLmxp
c3RCbG9jaygpLm1hcFtlXT1hLHRoaXMuZGlkRW50ZXIoYSxpKX0sZS5wcm90b3R5cGUuZW50ZXJM
aXN0PWZ1bmN0aW9uKGUsdCl7dmFyIHI9bmV3IG4uTGlua2VkTGlzdCxpPXRoaXMuc3RhY2soKS5w
dXNoQmxvY2tMaXN0KHIpLG89dGhpcy5jYXB0dXJlKCkscz10aGlzLmZyYW1lLmdldEl0ZXJhdG9y
KCkuYXJ0aWZhY3RzLGE9bmV3IGlyKGUsdCxvLGkscixzKQotdGhpcy5saXN0QmxvY2tTdGFjay5w
dXNoKGEpLHRoaXMuZGlkRW50ZXIoYSxyKX0sZS5wcm90b3R5cGUuZGlkRW50ZXI9ZnVuY3Rpb24o
ZSx0KXt0aGlzLnVwZGF0ZVdpdGgoZSksdGhpcy51cGRhdGluZ09wY29kZVN0YWNrLnB1c2godCl9
LGUucHJvdG90eXBlLmV4aXQ9ZnVuY3Rpb24oKXt0aGlzLnN0YWNrKCkucG9wQmxvY2soKSx0aGlz
LnVwZGF0aW5nT3Bjb2RlU3RhY2sucG9wKCksdGhpcy51cGRhdGluZygpLnRhaWwoKS5kaWRJbml0
aWFsaXplQ2hpbGRyZW4oKX0sZS5wcm90b3R5cGUuZXhpdExpc3Q9ZnVuY3Rpb24oKXt0aGlzLmV4
aXQoKSx0aGlzLmxpc3RCbG9ja1N0YWNrLnBvcCgpfSxlLnByb3RvdHlwZS51cGRhdGVXaXRoPWZ1
bmN0aW9uKGUpe3RoaXMudXBkYXRpbmcoKS5hcHBlbmQoZSl9LGUucHJvdG90eXBlLmxpc3RCbG9j
az1mdW5jdGlvbigpe3JldHVybigwLG4uZXhwZWN0KSh0aGlzLmxpc3RCbG9ja1N0YWNrLmN1cnJl
bnQsImV4cGVjdGVkIGEgbGlzdCBibG9jayIpfSxlLnByb3RvdHlwZS51cGRhdGluZz1mdW5jdGlv
bigpe3JldHVybigwLG4uZXhwZWN0KSh0aGlzLnVwZGF0aW5nT3Bjb2RlU3RhY2suY3VycmVudCwi
ZXhwZWN0ZWQgdXBkYXRpbmcgb3Bjb2RlIG9uIHRoZSB1cGRhdGluZyBvcGNvZGUgc3RhY2siKX0s
ZS5wcm90b3R5cGUuc3RhY2s9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbGVtZW50U3RhY2t9LGUu
cHJvdG90eXBlLnNjb3BlPWZ1bmN0aW9uKCl7cmV0dXJuKDAsbi5leHBlY3QpKHRoaXMuc2NvcGVT
dGFjay5jdXJyZW50LCJleHBlY3RlZCBzY29wZSBvbiB0aGUgc2NvcGUgc3RhY2siKX0sZS5wcm90
b3R5cGUuZHluYW1pY1Njb3BlPWZ1bmN0aW9uKCl7cmV0dXJuKDAsbi5leHBlY3QpKHRoaXMuZHlu
YW1pY1Njb3BlU3RhY2suY3VycmVudCwiZXhwZWN0ZWQgZHluYW1pYyBzY29wZSBvbiB0aGUgZHlu
YW1pYyBzY29wZSBzdGFjayIpfSxlLnByb3RvdHlwZS5wdXNoRnJhbWU9ZnVuY3Rpb24oZSx0LG4p
e3RoaXMuZnJhbWUucHVzaChlLnN0YXJ0LGUuZW5kKSx0JiZ0aGlzLmZyYW1lLnNldEFyZ3ModCks
dCYmdC5ibG9ja3MmJnRoaXMuZnJhbWUuc2V0QmxvY2tzKHQuYmxvY2tzKSxuJiZ0aGlzLmZyYW1l
LnNldENhbGxlclNjb3BlKG4pfSxlLnByb3RvdHlwZS5wdXNoQ29tcG9uZW50RnJhbWU9ZnVuY3Rp
b24oZSx0LG4scixpLG8pe3RoaXMuZnJhbWUucHVzaChlLnN0YXJ0LGUuZW5kLHIsaSxvKSx0JiZ0
aGlzLmZyYW1lLnNldEFyZ3ModCksdCYmdC5ibG9ja3MmJnRoaXMuZnJhbWUuc2V0QmxvY2tzKHQu
YmxvY2tzKSxuJiZ0aGlzLmZyYW1lLnNldENhbGxlclNjb3BlKG4pfSxlLnByb3RvdHlwZS5wdXNo
RXZhbEZyYW1lPWZ1bmN0aW9uKGUsdCl7dGhpcy5mcmFtZS5wdXNoKGUsdCl9LGUucHJvdG90eXBl
LnB1c2hDaGlsZFNjb3BlPWZ1bmN0aW9uKCl7dGhpcy5zY29wZVN0YWNrLnB1c2godGhpcy5zY29w
ZSgpLmNoaWxkKCkpfSxlLnByb3RvdHlwZS5wdXNoQ2FsbGVyU2NvcGU9ZnVuY3Rpb24oKXt0aGlz
LnNjb3BlU3RhY2sucHVzaCgoMCxuLmV4cGVjdCkodGhpcy5zY29wZSgpLmdldENhbGxlclNjb3Bl
KCksInB1c2hDYWxsZXJTY29wZSBpcyBjYWxsZWQgd2hlbiBhIGNhbGxlciBzY29wZSBpcyBwcmVz
ZW50IikpfSxlLnByb3RvdHlwZS5wdXNoRHluYW1pY1Njb3BlPWZ1bmN0aW9uKCl7dmFyIGU9dGhp
cy5keW5hbWljU2NvcGUoKS5jaGlsZCgpCi1yZXR1cm4gdGhpcy5keW5hbWljU2NvcGVTdGFjay5w
dXNoKGUpLGV9LGUucHJvdG90eXBlLnB1c2hSb290U2NvcGU9ZnVuY3Rpb24oZSx0KXt2YXIgbj1W
bi5yb290KGUsdCkKLXJldHVybiB0aGlzLnNjb3BlU3RhY2sucHVzaChuKSxufSxlLnByb3RvdHlw
ZS5wb3BTY29wZT1mdW5jdGlvbigpe3RoaXMuc2NvcGVTdGFjay5wb3AoKX0sZS5wcm90b3R5cGUu
cG9wRHluYW1pY1Njb3BlPWZ1bmN0aW9uKCl7dGhpcy5keW5hbWljU2NvcGVTdGFjay5wb3AoKX0s
ZS5wcm90b3R5cGUubmV3RGVzdHJveWFibGU9ZnVuY3Rpb24oZSl7dGhpcy5zdGFjaygpLm5ld0Rl
c3Ryb3lhYmxlKGUpfSxlLnByb3RvdHlwZS5nZXRTZWxmPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMu
c2NvcGUoKS5nZXRTZWxmKCl9LGUucHJvdG90eXBlLnJlZmVyZW5jZUZvclN5bWJvbD1mdW5jdGlv
bihlKXtyZXR1cm4gdGhpcy5zY29wZSgpLmdldFN5bWJvbChlKX0sZS5wcm90b3R5cGUuZ2V0QXJn
cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZyYW1lLmdldEFyZ3MoKX0sZS5wcm90b3R5cGUucmVz
dW1lPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdGhpcy5leGVjdXRlKGUsdCxmdW5jdGlvbihlKXty
ZXR1cm4gZS5mcmFtZS5yZXN0b3JlKG4pfSl9LGUucHJvdG90eXBlLmV4ZWN1dGU9ZnVuY3Rpb24o
ZSx0LG4pe3RoaXMucHJlcGFyZShlLHQsbikKLWZvcih2YXIgcj12b2lkIDA7OylpZihyPXRoaXMu
bmV4dCgpLHIuZG9uZSlicmVhawotcmV0dXJuIHIudmFsdWV9LGUucHJvdG90eXBlLnByZXBhcmU9
ZnVuY3Rpb24oZSx0LHIpe3ZhciBpPXRoaXMuZWxlbWVudFN0YWNrLG89dGhpcy5mcmFtZSxzPXRo
aXMudXBkYXRpbmdPcGNvZGVTdGFjawotaS5wdXNoU2ltcGxlQmxvY2soKSxzLnB1c2gobmV3IG4u
TGlua2VkTGlzdCksby5wdXNoKGUsdCksciYmcih0aGlzKX0sZS5wcm90b3R5cGUubmV4dD1mdW5j
dGlvbigpe3ZhciBlPXRoaXMuZnJhbWUsdD10aGlzLmVudixyPXRoaXMudXBkYXRpbmdPcGNvZGVT
dGFjayxpPXRoaXMuZWxlbWVudFN0YWNrLG89dm9pZCAwCi1yZXR1cm4obz1lLm5leHRTdGF0ZW1l
bnQodCkpPyhFZS5ldmFsdWF0ZSh0aGlzLG8pLHtkb25lOiExLHZhbHVlOm51bGx9KTp7ZG9uZToh
MCx2YWx1ZTpuZXcgUW4odCwoMCxuLmV4cGVjdCkoci5wb3AoKSwidGhlcmUgc2hvdWxkIGJlIGEg
ZmluYWwgdXBkYXRpbmcgb3Bjb2RlIHN0YWNrIiksaS5wb3BCbG9jaygpKX19LGUucHJvdG90eXBl
LmV2YWx1YXRlT3Bjb2RlPWZ1bmN0aW9uKGUpe0VlLmV2YWx1YXRlKHRoaXMsZSl9LGUucHJvdG90
eXBlLmludm9rZUJsb2NrPWZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5jb21waWxlKHRoaXMuZW52KQot
dGhpcy5wdXNoRnJhbWUobix0KX0sZS5wcm90b3R5cGUuaW52b2tlUGFydGlhbD1mdW5jdGlvbihl
KXt2YXIgdD1lLmNvbXBpbGUodGhpcy5lbnYpCi10aGlzLnB1c2hGcmFtZSh0KX0sZS5wcm90b3R5
cGUuaW52b2tlTGF5b3V0PWZ1bmN0aW9uKGUsdCxuLHIsaSxvKXt0aGlzLnB1c2hDb21wb25lbnRG
cmFtZSh0LGUsbixyLGksbyl9LGUucHJvdG90eXBlLmV2YWx1YXRlT3BlcmFuZD1mdW5jdGlvbihl
KXt0aGlzLmZyYW1lLnNldE9wZXJhbmQoZS5ldmFsdWF0ZSh0aGlzKSl9LGUucHJvdG90eXBlLmV2
YWx1YXRlQXJncz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmZyYW1lLnNldEFyZ3MoZS5ldmFsdWF0
ZSh0aGlzKSkKLXRoaXMuZnJhbWUuc2V0T3BlcmFuZCh0LnBvc2l0aW9uYWwuYXQoMCkpfSxlLnBy
b3RvdHlwZS5iaW5kUG9zaXRpb25hbEFyZ3M9ZnVuY3Rpb24oZSl7dmFyIHQscj0oMCxuLmV4cGVj
dCkodGhpcy5mcmFtZS5nZXRBcmdzKCksImJpbmRQb3NpdGlvbmFsQXJncyBhc3N1bWVzIGEgcHJl
dmlvdXMgc2V0QXJncyIpLGk9ci5wb3NpdGlvbmFsLG89dGhpcy5zY29wZSgpCi1mb3IodD0wO3Q8
ZS5sZW5ndGg7dCsrKW8uYmluZFN5bWJvbChlW3RdLGkuYXQodCkpfSxlLnByb3RvdHlwZS5iaW5k
TmFtZWRBcmdzPWZ1bmN0aW9uKGUsdCl7dmFyIHIsaSxvPSgwLG4uZXhwZWN0KSh0aGlzLmZyYW1l
LmdldEFyZ3MoKSwiYmluZE5hbWVkQXJncyBhc3N1bWVzIGEgcHJldmlvdXMgc2V0QXJncyIpLHM9
dGhpcy5zY29wZSgpLGE9by5uYW1lZAotZm9yKHI9MDtyPGUubGVuZ3RoO3IrKylpPXRoaXMuY29u
c3RhbnRzLmdldFN0cmluZyhlW3JdKSxzLmJpbmRTeW1ib2wodFtyXSxhLmdldChpKSl9LGUucHJv
dG90eXBlLmJpbmRCbG9ja3M9ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGk9dGhpcy5mcmFtZS5nZXRC
bG9ja3MoKSxvPXRoaXMuc2NvcGUoKQotZm9yKG49MDtuPGUubGVuZ3RoO24rKylyPXRoaXMuY29u
c3RhbnRzLmdldFN0cmluZyhlW25dKSxvLmJpbmRCbG9jayh0W25dLGkmJmlbcl18fG51bGwpfSxl
LnByb3RvdHlwZS5iaW5kUGFydGlhbEFyZ3M9ZnVuY3Rpb24oZSl7dmFyIHQ9KDAsbi5leHBlY3Qp
KHRoaXMuZnJhbWUuZ2V0QXJncygpLCJiaW5kUGFydGlhbEFyZ3MgYXNzdW1lcyBhIHByZXZpb3Vz
IHNldEFyZ3MiKSxyPXRoaXMuc2NvcGUoKTsoMCxuLmFzc2VydCkodCwiQ2Fubm90IGJpbmQgbmFt
ZWQgYXJncyIpLHIuYmluZFBhcnRpYWxBcmdzKGUsdCl9LGUucHJvdG90eXBlLmJpbmRDYWxsZXJT
Y29wZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuZnJhbWUuZ2V0Q2FsbGVyU2NvcGUoKSx0PXRoaXMu
c2NvcGUoKTsoMCxuLmFzc2VydCkoZSwiQ2Fubm90IGJpbmQgY2FsbGVyIHNjb3BlIiksdC5iaW5k
Q2FsbGVyU2NvcGUoZSl9LGUucHJvdG90eXBlLmJpbmREeW5hbWljU2NvcGU9ZnVuY3Rpb24oZSl7
dmFyIHQscixpPSgwLG4uZXhwZWN0KSh0aGlzLmZyYW1lLmdldEFyZ3MoKSwiYmluZER5bmFtaWNT
Y29wZSBhc3N1bWVzIGEgcHJldmlvdXMgc2V0QXJncyIpLG89dGhpcy5keW5hbWljU2NvcGUoKQot
Zm9yKCgwLG4uYXNzZXJ0KShpLCJDYW5ub3QgYmluZCBkeW5hbWljIHNjb3BlIiksdD0wO3Q8ZS5s
ZW5ndGg7dCsrKXI9dGhpcy5jb25zdGFudHMuZ2V0U3RyaW5nKGVbdF0pLG8uc2V0KHIsaS5uYW1l
ZC5nZXQocikpfSxlfSgpLGVyPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3ZhciByPXQuYWx3
YXlzUmV2YWxpZGF0ZSxpPXZvaWQgMCE9PXImJnIKLXRoaXMuZnJhbWVTdGFjaz1uZXcgbi5TdGFj
ayx0aGlzLmVudj1lLHRoaXMuY29uc3RhbnRzPWUuY29uc3RhbnRzLHRoaXMuZG9tPWUuZ2V0RE9N
KCksdGhpcy5hbHdheXNSZXZhbGlkYXRlPWl9cmV0dXJuIGUucHJvdG90eXBlLmV4ZWN1dGU9ZnVu
Y3Rpb24oZSx0KXt2YXIgbixyPXRoaXMuZnJhbWVTdGFjawotZm9yKHRoaXMudHJ5KGUsdCk7Oyl7
aWYoci5pc0VtcHR5KCkpYnJlYWsKLW49dGhpcy5mcmFtZS5uZXh0U3RhdGVtZW50KCksbnVsbCE9
PW4/bi5ldmFsdWF0ZSh0aGlzKTp0aGlzLmZyYW1lU3RhY2sucG9wKCl9fSxlLnByb3RvdHlwZS5n
b3RvPWZ1bmN0aW9uKGUpe3RoaXMuZnJhbWUuZ290byhlKX0sZS5wcm90b3R5cGUudHJ5PWZ1bmN0
aW9uKGUsdCl7dGhpcy5mcmFtZVN0YWNrLnB1c2gobmV3IG9yKHRoaXMsZSx0KSl9LGUucHJvdG90
eXBlLnRocm93PWZ1bmN0aW9uKCl7dGhpcy5mcmFtZS5oYW5kbGVFeGNlcHRpb24oKSx0aGlzLmZy
YW1lU3RhY2sucG9wKCl9LGUucHJvdG90eXBlLmV2YWx1YXRlT3Bjb2RlPWZ1bmN0aW9uKGUpe2Uu
ZXZhbHVhdGUodGhpcyl9LCgwLHQuY3JlYXRlQ2xhc3MpKGUsW3trZXk6ImZyYW1lIixnZXQ6ZnVu
Y3Rpb24oKXtyZXR1cm4oMCxuLmV4cGVjdCkodGhpcy5mcmFtZVN0YWNrLmN1cnJlbnQsImJ1Zzog
ZXhwZWN0ZWQgYSBmcmFtZSIpfX1dKSxlfSgpLHRyPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIobixy
LGksbyxzKXt2YXIgYT0oMCx0LnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4pKHRoaXMsZS5jYWxs
KHRoaXMpKQotYS5zdGFydD1uLGEuZW5kPXIsYS50eXBlPSJibG9jayIsYS5uZXh0PW51bGwsYS5w
cmV2PW51bGwKLXZhciB1PWkuZW52LGw9aS5zY29wZSxjPWkuZHluYW1pY1Njb3BlLHA9aS5mcmFt
ZQotcmV0dXJuIGEuY2hpbGRyZW49cyxhLmVudj11LGEuc2NvcGU9bCxhLmR5bmFtaWNTY29wZT1j
LGEuZnJhbWU9cCxhLmJvdW5kcz1vLGF9cmV0dXJuKDAsdC5pbmhlcml0cykocixlKSxyLnByb3Rv
dHlwZS5wYXJlbnRFbGVtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYm91bmRzLnBhcmVudEVs
ZW1lbnQoKX0sci5wcm90b3R5cGUuZmlyc3ROb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYm91
bmRzLmZpcnN0Tm9kZSgpfSxyLnByb3RvdHlwZS5sYXN0Tm9kZT1mdW5jdGlvbigpe3JldHVybiB0
aGlzLmJvdW5kcy5sYXN0Tm9kZSgpfSxyLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbihlKXtl
LnRyeSh0aGlzLmNoaWxkcmVuLG51bGwpfSxyLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7
dGhpcy5ib3VuZHMuZGVzdHJveSgpfSxyLnByb3RvdHlwZS5kaWREZXN0cm95PWZ1bmN0aW9uKCl7
dGhpcy5lbnYuZGlkRGVzdHJveSh0aGlzLmJvdW5kcyl9LHIucHJvdG90eXBlLnRvSlNPTj1mdW5j
dGlvbigpe3ZhciBlPSgwLG4uZGljdCkoKQotcmV0dXJuIGUuZ3VpZD0iIit0aGlzLl9ndWlkLHtn
dWlkOnRoaXMuX2d1aWQsdHlwZTp0aGlzLnR5cGUsZGV0YWlsczplLGNoaWxkcmVuOnRoaXMuY2hp
bGRyZW4udG9BcnJheSgpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS50b0pTT04oKX0pfX0scn0o
Q2UpLG5yPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4obixpLG8scyxhKXt2YXIgdT0oMCx0LnBvc3Np
YmxlQ29uc3RydWN0b3JSZXR1cm4pKHRoaXMsZS5jYWxsKHRoaXMsbixpLG8scyxhKSkKLXJldHVy
biB1LnR5cGU9InRyeSIsdS50YWc9dS5fdGFnPW5ldyByLlVwZGF0YWJsZVRhZyhyLkNPTlNUQU5U
X1RBRyksdX1yZXR1cm4oMCx0LmluaGVyaXRzKShuLGUpLG4ucHJvdG90eXBlLmRpZEluaXRpYWxp
emVDaGlsZHJlbj1mdW5jdGlvbigpe3RoaXMuX3RhZy51cGRhdGUoKDAsci5jb21iaW5lU2xpY2Up
KHRoaXMuY2hpbGRyZW4pKX0sbi5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24oZSl7ZS50cnko
dGhpcy5jaGlsZHJlbix0aGlzKX0sbi5wcm90b3R5cGUuaGFuZGxlRXhjZXB0aW9uPWZ1bmN0aW9u
KCl7dmFyIGU9dGhpcy5lbnYsdD10aGlzLnNjb3BlLG49dGhpcy5zdGFydCxyPXRoaXMuZW5kLGk9
dGhpcy5keW5hbWljU2NvcGUsbz10aGlzLmZyYW1lLHM9Z3QucmVzdW1lKHRoaXMuZW52LHRoaXMu
Ym91bmRzLHRoaXMuYm91bmRzLnJlc2V0KGUpKSxhPW5ldyBabihlLHQsaSxzKSx1PWEucmVzdW1l
KG4scixvKQotdGhpcy5jaGlsZHJlbj11Lm9wY29kZXMoKSx0aGlzLmRpZEluaXRpYWxpemVDaGls
ZHJlbigpfSxuLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXt2YXIgdD1lLnByb3RvdHlwZS50
b0pTT04uY2FsbCh0aGlzKSxuPXQuZGV0YWlscwotcmV0dXJuIG58fChuPXQuZGV0YWlscz17fSks
ZS5wcm90b3R5cGUudG9KU09OLmNhbGwodGhpcyl9LG59KHRyKSxycj1mdW5jdGlvbigpe2Z1bmN0
aW9uIGUoZSx0KXt0aGlzLm9wY29kZT1lLHRoaXMubWFya2VyPXQsdGhpcy5kaWRJbnNlcnQ9ITEs
dGhpcy5kaWREZWxldGU9ITEsdGhpcy5tYXA9ZS5tYXAsdGhpcy51cGRhdGluZz1lLmNoaWxkcmVu
fXJldHVybiBlLnByb3RvdHlwZS5pbnNlcnQ9ZnVuY3Rpb24oZSx0LG4saSl7dmFyIG89dGhpcy5t
YXAscz10aGlzLm9wY29kZSxhPXRoaXMudXBkYXRpbmcsdT1udWxsLGw9bnVsbAotaT8obD1vW2ld
LHU9bC5ib3VuZHMuZmlyc3ROb2RlKCkpOnU9dGhpcy5tYXJrZXIKLXZhciBjPXMudm1Gb3JJbnNl
cnRpb24odSkscD1udWxsCi1jLmV4ZWN1dGUocy5zdGFydCxzLmVuZCxmdW5jdGlvbihpKXtpLmZy
YW1lLnNldEFyZ3MoV2UucG9zaXRpb25hbChbdCxuXSkpLGkuZnJhbWUuc2V0T3BlcmFuZCh0KSxp
LmZyYW1lLnNldENvbmRpdGlvbihuZXcgci5Db25zdFJlZmVyZW5jZSghMCkpLGkuZnJhbWUuc2V0
S2V5KGUpCi12YXIgbz1pLmNhcHR1cmUoKSxhPWkuc3RhY2soKS5wdXNoVXBkYXRhYmxlQmxvY2so
KQotcD1uZXcgbnIocy5zdGFydCxzLmVuZCxvLGEsaS51cGRhdGluZygpKX0pLHAuZGlkSW5pdGlh
bGl6ZUNoaWxkcmVuKCksYS5pbnNlcnRCZWZvcmUocCxsKSxvW2VdPXAsdGhpcy5kaWRJbnNlcnQ9
ITB9LGUucHJvdG90eXBlLnJldGFpbj1mdW5jdGlvbigpe30sZS5wcm90b3R5cGUubW92ZT1mdW5j
dGlvbihlLHQsbixyKXt2YXIgaT10aGlzLm1hcCxvPXRoaXMudXBkYXRpbmcsYT1pW2VdLHU9aVty
XXx8bnVsbAotcj9zKGEsdS5maXJzdE5vZGUoKSk6cyhhLHRoaXMubWFya2VyKSxvLnJlbW92ZShh
KSxvLmluc2VydEJlZm9yZShhLHUpfSxlLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24oZSl7dmFy
IHQ9dGhpcy5tYXAsbj10W2VdCi1uLmRpZERlc3Ryb3koKSxhKG4pLHRoaXMudXBkYXRpbmcucmVt
b3ZlKG4pLGRlbGV0ZSB0W2VdLHRoaXMuZGlkRGVsZXRlPSEwfSxlLnByb3RvdHlwZS5kb25lPWZ1
bmN0aW9uKCl7dGhpcy5vcGNvZGUuZGlkSW5pdGlhbGl6ZUNoaWxkcmVuKHRoaXMuZGlkSW5zZXJ0
fHx0aGlzLmRpZERlbGV0ZSl9LGV9KCksaXI9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gaShpLG8scyxh
LHUsbCl7dmFyIGM9KDAsdC5wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKSh0aGlzLGUuY2FsbCh0
aGlzLGksbyxzLGEsdSkpCi1jLnR5cGU9Imxpc3QtYmxvY2siLGMubWFwPSgwLG4uZGljdCkoKSxj
Lmxhc3RJdGVyYXRlZD1yLklOSVRJQUwsYy5hcnRpZmFjdHM9bAotdmFyIHA9Yy5fdGFnPW5ldyBy
LlVwZGF0YWJsZVRhZyhyLkNPTlNUQU5UX1RBRykKLXJldHVybiBjLnRhZz0oMCxyLmNvbWJpbmUp
KFtsLnRhZyxwXSksY31yZXR1cm4oMCx0LmluaGVyaXRzKShpLGUpLGkucHJvdG90eXBlLmRpZElu
aXRpYWxpemVDaGlsZHJlbj1mdW5jdGlvbigpe3ZhciBlPSEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2
b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF0KLXRoaXMubGFzdEl0ZXJhdGVkPXRo
aXMuYXJ0aWZhY3RzLnRhZy52YWx1ZSgpLGUmJnRoaXMuX3RhZy51cGRhdGUoKDAsci5jb21iaW5l
U2xpY2UpKHRoaXMuY2hpbGRyZW4pKX0saS5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7
dmFyIGksbyxzLGEsdSxsPXRoaXMuYXJ0aWZhY3RzLGM9dGhpcy5sYXN0SXRlcmF0ZWQKLWwudGFn
LnZhbGlkYXRlKGMpfHwoaT10aGlzLmJvdW5kcyxvPXQuZG9tLHM9by5jcmVhdGVDb21tZW50KCIi
KSxvLmluc2VydEFmdGVyKGkucGFyZW50RWxlbWVudCgpLHMsKDAsbi5leHBlY3QpKGkubGFzdE5v
ZGUoKSwiY2FuJ3QgaW5zZXJ0IGFmdGVyIGFuIGVtcHR5IGJvdW5kcyIpKSxhPW5ldyBycih0aGlz
LHMpLHU9bmV3IHIuSXRlcmF0b3JTeW5jaHJvbml6ZXIoe3RhcmdldDphLGFydGlmYWN0czpsfSks
dS5zeW5jKCksdGhpcy5wYXJlbnRFbGVtZW50KCkucmVtb3ZlQ2hpbGQocykpLGUucHJvdG90eXBl
LmV2YWx1YXRlLmNhbGwodGhpcyx0KX0saS5wcm90b3R5cGUudm1Gb3JJbnNlcnRpb249ZnVuY3Rp
b24oZSl7dmFyIHQ9dGhpcy5lbnYsbj10aGlzLnNjb3BlLHI9dGhpcy5keW5hbWljU2NvcGUsaT1n
dC5mb3JJbml0aWFsUmVuZGVyKHRoaXMuZW52LHRoaXMuYm91bmRzLnBhcmVudEVsZW1lbnQoKSxl
KQotcmV0dXJuIG5ldyBabih0LG4scixpKX0saS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7
dmFyIHQ9ZS5wcm90b3R5cGUudG9KU09OLmNhbGwodGhpcyksbj10aGlzLm1hcCxyPU9iamVjdC5r
ZXlzKG4pLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoZSkrIjogIituW2Vd
Ll9ndWlkfSkuam9pbigiLCAiKSxpPXQuZGV0YWlscwotcmV0dXJuIGl8fChpPXQuZGV0YWlscz17
fSksaS5tYXA9InsiK3IrIn0iLHR9LGl9KHRyKSxvcj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0
LG4pe3RoaXMudm09ZSx0aGlzLm9wcz10LHRoaXMuZXhjZXB0aW9uSGFuZGxlcj1uLHRoaXMudm09
ZSx0aGlzLm9wcz10LHRoaXMuY3VycmVudD10LmhlYWQoKX1yZXR1cm4gZS5wcm90b3R5cGUuZ290
bz1mdW5jdGlvbihlKXt0aGlzLmN1cnJlbnQ9ZX0sZS5wcm90b3R5cGUubmV4dFN0YXRlbWVudD1m
dW5jdGlvbigpe3ZhciBlPXRoaXMuY3VycmVudCx0PXRoaXMub3BzCi1yZXR1cm4gZSYmKHRoaXMu
Y3VycmVudD10Lm5leHROb2RlKGUpKSxlfSxlLnByb3RvdHlwZS5oYW5kbGVFeGNlcHRpb249ZnVu
Y3Rpb24oKXt0aGlzLmV4Y2VwdGlvbkhhbmRsZXImJnRoaXMuZXhjZXB0aW9uSGFuZGxlci5oYW5k
bGVFeGNlcHRpb24oKX0sZX0oKQotRWUuYWRkKDMxLGZ1bmN0aW9uKGUsdCl7dmFyIG49dC5vcDEK
LWUuY29uc3RhbnRzLmdldE90aGVyKG4pLmV2YWx1YXRlKGUpfSkKLXZhciBzcj1mdW5jdGlvbigp
e2Z1bmN0aW9uIGUoKXt9cmV0dXJuIGUucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKGUpe3Zh
ciB0PWUuZnJhbWUuZ2V0T3BlcmFuZCgpLG49dGhpcy5ub3JtYWxpemUodCksaT12b2lkIDAsbz12
b2lkIDA7KDAsci5pc0NvbnN0KSh0KT9pPW4udmFsdWUoKToobz1uZXcgci5SZWZlcmVuY2VDYWNo
ZShuKSxpPW8ucGVlaygpKQotdmFyIHM9ZS5zdGFjaygpLGE9dGhpcy5pbnNlcnQoZS5lbnYuZ2V0
QXBwZW5kT3BlcmF0aW9ucygpLHMsaSksdT1uZXcgbXQoYS5ib3VuZHMpCi1zLm5ld0JvdW5kcyh1
KSxvJiZlLnVwZGF0ZVdpdGgodGhpcy51cGRhdGVXaXRoKGUsdCxvLHUsYSkpfSxlfSgpLGFyPWZ1
bmN0aW9uKGUpe2Z1bmN0aW9uIG4obixyKXt2YXIgaT0oMCx0LnBvc3NpYmxlQ29uc3RydWN0b3JS
ZXR1cm4pKHRoaXMsZS5jYWxsKHRoaXMpKQotcmV0dXJuIGkuZXhwcmVzc2lvbj1uLGkuc3ltYm9s
VGFibGU9cixpLnN0YXJ0PS0xLGkuZW5kPS0xLGl9cmV0dXJuKDAsdC5pbmhlcml0cykobixlKSxu
LnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXt2YXIgbjstMT09PXRoaXMuc3RhcnQ/KHQu
ZXZhbHVhdGVPcGVyYW5kKHRoaXMuZXhwcmVzc2lvbiksbj10LmZyYW1lLmdldE9wZXJhbmQoKS52
YWx1ZSgpLGgobik/KHRoaXMuZGVvcHQodC5lbnYpLHQucHVzaEV2YWxGcmFtZSh0aGlzLnN0YXJ0
LHRoaXMuZW5kKSk6ZS5wcm90b3R5cGUuZXZhbHVhdGUuY2FsbCh0aGlzLHQpKTp0LnB1c2hFdmFs
RnJhbWUodGhpcy5zdGFydCx0aGlzLmVuZCl9LG4ucHJvdG90eXBlLmRlb3B0PWZ1bmN0aW9uKGUp
e3ZhciB0PXRoaXMsbj1uZXcga3QodGhpcy5zeW1ib2xUYWJsZSxlKQotcmV0dXJuIG4ucHV0VmFs
dWUodGhpcy5leHByZXNzaW9uKSxuLnRlc3QodXIuY3JlYXRlKSxuLmxhYmVsbGVkKG51bGwsZnVu
Y3Rpb24oZSxuLHIpe2UuanVtcFVubGVzcygiVkFMVUUiKSxlLnB1dER5bmFtaWNDb21wb25lbnRE
ZWZpbml0aW9uKCksZS5vcGVuQ29tcG9uZW50KEhlLmVtcHR5KCkpLGUuY2xvc2VDb21wb25lbnQo
KSxlLmp1bXAociksZS5sYWJlbCgiVkFMVUUiKSxlLmR5bmFtaWNDb250ZW50KG5ldyB0LkFwcGVu
ZE9wY29kZSl9KSx0aGlzLnN0YXJ0PW4uc3RhcnQsdGhpcy5lbmQ9bi5lbmQsdGhpcy5leHByZXNz
aW9uPW51bGwsbi5zdGFydH0sbn0oc3IpLHVyPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4oKXtyZXR1
cm4oMCx0LnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4pKHRoaXMsZS5hcHBseSh0aGlzLGFyZ3Vt
ZW50cykpfXJldHVybigwLHQuaW5oZXJpdHMpKG4sZSksbi5jcmVhdGU9ZnVuY3Rpb24oZSl7cmV0
dXJuIG5ldyBuKGUpfSxuLnByb3RvdHlwZS50b0Jvb2w9ZnVuY3Rpb24oZSl7cmV0dXJuIGgoZSl9
LG59KGJlKSxscj1mdW5jdGlvbihlKXtmdW5jdGlvbiBuKG4scixpKXt2YXIgbz0oMCx0LnBvc3Np
YmxlQ29uc3RydWN0b3JSZXR1cm4pKHRoaXMsZS5jYWxsKHRoaXMpKQotcmV0dXJuIG8uY2FjaGU9
bixvLmJvdW5kcz1yLG8udXBzZXJ0PWksby50YWc9bi50YWcsb31yZXR1cm4oMCx0LmluaGVyaXRz
KShuLGUpLG4ucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKGUpe3ZhciB0LG4saSxvLHM9dGhp
cy5jYWNoZS5yZXZhbGlkYXRlKCk7KDAsci5pc01vZGlmaWVkKShzKSYmKHQ9dGhpcy5ib3VuZHMs
bj10aGlzLnVwc2VydCxpPWUuZG9tLHRoaXMudXBzZXJ0LnVwZGF0ZShpLHMpfHwobz1uZXcgUWUo
dC5wYXJlbnRFbGVtZW50KCksYSh0KSksbj10aGlzLnVwc2VydD10aGlzLmluc2VydChlLmVudi5n
ZXRBcHBlbmRPcGVyYXRpb25zKCksbyxzKSksdC51cGRhdGUobi5ib3VuZHMpKX0sbi5wcm90b3R5
cGUudG9KU09OPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fZ3VpZCx0PXRoaXMudHlwZSxuPXRoaXMu
Y2FjaGUKLXJldHVybntndWlkOmUsdHlwZTp0LGRldGFpbHM6e2xhc3RWYWx1ZTpKU09OLnN0cmlu
Z2lmeShuLnBlZWsoKSl9fX0sbn0oQ2UpLGNyPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIGkobixpLG8s
cyxhLHUpe3ZhciBsPSgwLHQucG9zc2libGVDb25zdHJ1Y3RvclJldHVybikodGhpcyxlLmNhbGwo
dGhpcyxpLG8scykpCi1yZXR1cm4gbC5yZWZlcmVuY2U9bixsLmFwcGVuZE9wY29kZT1hLGwuc3Rh
dGU9dSxsLmRlb3B0ZWQ9bnVsbCxsLnRhZz1sLl90YWc9bmV3IHIuVXBkYXRhYmxlVGFnKGwudGFn
KSxsfXJldHVybigwLHQuaW5oZXJpdHMpKGksZSksaS5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rp
b24odCl7dGhpcy5kZW9wdGVkP3QuZXZhbHVhdGVPcGNvZGUodGhpcy5kZW9wdGVkKTpoKHRoaXMu
cmVmZXJlbmNlLnZhbHVlKCkpP3RoaXMubGF6eURlb3B0KHQpOmUucHJvdG90eXBlLmV2YWx1YXRl
LmNhbGwodGhpcyx0KX0saS5wcm90b3R5cGUubGF6eURlb3B0PWZ1bmN0aW9uKGUpe3ZhciB0PXRo
aXMuYm91bmRzLHI9dGhpcy5hcHBlbmRPcGNvZGUsaT10aGlzLnN0YXRlLG89ZS5lbnYscz1yLmRl
b3B0KG8pLGE9KDAsbi5leHBlY3QpKG8ucHJvZ3JhbS5vcGNvZGUocys4KSwiaGFyZGNvZGVkIGRl
b3B0IGxvY2F0aW9uIiksdT1hLm9wMSxsPWEub3AyLGM9bmV3IGJ0KHQucGFyZW50RWxlbWVudCgp
KQotYy5uZXdCb3VuZHModGhpcy5ib3VuZHMpCi12YXIgcD1uZXcgbi5MaW5rZWRMaXN0Ci1pLmZy
YW1lLmNvbmRpdGlvbj11ci5jcmVhdGUoKDAsbi5leHBlY3QpKGkuZnJhbWUub3BlcmFuZCwib3Bl
cmFuZCBzaG91bGQgYmUgcG9wdWxhdGVkIikpCi12YXIgZj10aGlzLmRlb3B0ZWQ9bmV3IG5yKHUs
bCxpLGMscCkKLXRoaXMuX3RhZy51cGRhdGUoZi50YWcpLGUuZXZhbHVhdGVPcGNvZGUoZiksZS50
aHJvdygpLHRoaXMuX3RhZz1udWxsLHRoaXMucmVmZXJlbmNlPW51bGwsdGhpcy5jYWNoZT1udWxs
LHRoaXMuYm91bmRzPW51bGwsdGhpcy51cHNlcnQ9bnVsbCx0aGlzLmFwcGVuZE9wY29kZT1udWxs
LHRoaXMuc3RhdGU9bnVsbH0saS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7dmFyIHQ9dGhp
cy5fZ3VpZCxuPXRoaXMudHlwZSxyPXRoaXMuZGVvcHRlZAotcmV0dXJuIHI/e2d1aWQ6dCx0eXBl
Om4sZGVvcHRlZDohMCxjaGlsZHJlbjpbci50b0pTT04oKV19OmUucHJvdG90eXBlLnRvSlNPTi5j
YWxsKHRoaXMpfSxpfShscikscHI9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbigpe3ZhciBuPSgwLHQu
cG9zc2libGVDb25zdHJ1Y3RvclJldHVybikodGhpcyxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkK
LXJldHVybiBuLnR5cGU9Im9wdGltaXplZC1jYXV0aW91cy1hcHBlbmQiLG59cmV0dXJuKDAsdC5p
bmhlcml0cykobixlKSxuLnByb3RvdHlwZS5ub3JtYWxpemU9ZnVuY3Rpb24oZSl7cmV0dXJuKDAs
ci5tYXApKGUsY2UpfSxuLnByb3RvdHlwZS5pbnNlcnQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBw
KGUsdCxuKX0sbi5wcm90b3R5cGUudXBkYXRlV2l0aD1mdW5jdGlvbihlLHQsbixyLGkpe3JldHVy
biBuZXcgZnIobixyLGkpfSxufShzciksZnI9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbigpe3ZhciBu
PSgwLHQucG9zc2libGVDb25zdHJ1Y3RvclJldHVybikodGhpcyxlLmFwcGx5KHRoaXMsYXJndW1l
bnRzKSkKLXJldHVybiBuLnR5cGU9Im9wdGltaXplZC1jYXV0aW91cy11cGRhdGUiLG59cmV0dXJu
KDAsdC5pbmhlcml0cykobixlKSxuLnByb3RvdHlwZS5pbnNlcnQ9ZnVuY3Rpb24oZSx0LG4pe3Jl
dHVybiBwKGUsdCxuKX0sbn0obHIpLGhyPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4oKXt2YXIgbj0o
MCx0LnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4pKHRoaXMsZS5hcHBseSh0aGlzLGFyZ3VtZW50
cykpCi1yZXR1cm4gbi50eXBlPSJndWFyZGVkLWNhdXRpb3VzLWFwcGVuZCIsbi5BcHBlbmRPcGNv
ZGU9cHIsbn1yZXR1cm4oMCx0LmluaGVyaXRzKShuLGUpLG4ucHJvdG90eXBlLm5vcm1hbGl6ZT1m
dW5jdGlvbihlKXtyZXR1cm4oMCxyLm1hcCkoZSxjZSl9LG4ucHJvdG90eXBlLmluc2VydD1mdW5j
dGlvbihlLHQsbil7cmV0dXJuIHAoZSx0LG4pfSxuLnByb3RvdHlwZS51cGRhdGVXaXRoPWZ1bmN0
aW9uKGUsdCxuLHIsaSl7cmV0dXJuIG5ldyBkcih0LG4scixpLHRoaXMsZS5jYXB0dXJlKCkpfSxu
fShhciksZHI9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbigpe3ZhciBuPSgwLHQucG9zc2libGVDb25z
dHJ1Y3RvclJldHVybikodGhpcyxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkKLXJldHVybiBuLnR5
cGU9Imd1YXJkZWQtY2F1dGlvdXMtdXBkYXRlIixufXJldHVybigwLHQuaW5oZXJpdHMpKG4sZSks
bi5wcm90b3R5cGUuaW5zZXJ0PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gcChlLHQsbil9LG59KGNy
KSxtcj1mdW5jdGlvbihlKXtmdW5jdGlvbiBuKCl7dmFyIG49KDAsdC5wb3NzaWJsZUNvbnN0cnVj
dG9yUmV0dXJuKSh0aGlzLGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKQotcmV0dXJuIG4udHlwZT0i
b3B0aW1pemVkLXRydXN0aW5nLWFwcGVuZCIsbn1yZXR1cm4oMCx0LmluaGVyaXRzKShuLGUpLG4u
cHJvdG90eXBlLm5vcm1hbGl6ZT1mdW5jdGlvbihlKXtyZXR1cm4oMCxyLm1hcCkoZSxsZSl9LG4u
cHJvdG90eXBlLmluc2VydD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGYoZSx0LG4pfSxuLnByb3Rv
dHlwZS51cGRhdGVXaXRoPWZ1bmN0aW9uKGUsdCxuLHIsaSl7cmV0dXJuIG5ldyBncihuLHIsaSl9
LG59KHNyKSxncj1mdW5jdGlvbihlKXtmdW5jdGlvbiBuKCl7dmFyIG49KDAsdC5wb3NzaWJsZUNv
bnN0cnVjdG9yUmV0dXJuKSh0aGlzLGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKQotcmV0dXJuIG4u
dHlwZT0ib3B0aW1pemVkLXRydXN0aW5nLXVwZGF0ZSIsbn1yZXR1cm4oMCx0LmluaGVyaXRzKShu
LGUpLG4ucHJvdG90eXBlLmluc2VydD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGYoZSx0LG4pfSxu
fShscikseXI9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbigpe3ZhciBuPSgwLHQucG9zc2libGVDb25z
dHJ1Y3RvclJldHVybikodGhpcyxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkKLXJldHVybiBuLnR5
cGU9Imd1YXJkZWQtdHJ1c3RpbmctYXBwZW5kIixuLkFwcGVuZE9wY29kZT1tcixufXJldHVybigw
LHQuaW5oZXJpdHMpKG4sZSksbi5wcm90b3R5cGUubm9ybWFsaXplPWZ1bmN0aW9uKGUpe3JldHVy
bigwLHIubWFwKShlLGxlKX0sbi5wcm90b3R5cGUuaW5zZXJ0PWZ1bmN0aW9uKGUsdCxuKXtyZXR1
cm4gZihlLHQsbil9LG4ucHJvdG90eXBlLnVwZGF0ZVdpdGg9ZnVuY3Rpb24oZSx0LG4scixpKXty
ZXR1cm4gbmV3IHZyKHQsbixyLGksdGhpcyxlLmNhcHR1cmUoKSl9LG59KGFyKSx2cj1mdW5jdGlv
bihlKXtmdW5jdGlvbiBuKCl7dmFyIG49KDAsdC5wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKSh0
aGlzLGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKQotcmV0dXJuIG4udHlwZT0idHJ1c3RpbmctdXBk
YXRlIixufXJldHVybigwLHQuaW5oZXJpdHMpKG4sZSksbi5wcm90b3R5cGUuaW5zZXJ0PWZ1bmN0
aW9uKGUsdCxuKXtyZXR1cm4gZihlLHQsbil9LG59KGNyKQotRWUuYWRkKDQ5LGZ1bmN0aW9uKGUs
dCl7dmFyIG49dC5vcDEsaT1lLmVudixvPWUuY29uc3RhbnRzLmdldE90aGVyKG4pLHM9KDAsci5t
YXApKGUuZnJhbWUuZ2V0T3BlcmFuZCgpLGZ1bmN0aW9uKGUpe3ZhciB0PVN0cmluZyhlKQotaWYo
IWkuaGFzUGFydGlhbCh0LG8pKXRocm93IG5ldyBFcnJvcignQ291bGQgbm90IGZpbmQgYSBwYXJ0
aWFsIG5hbWVkICInK3QrJyInKQotcmV0dXJuIGkubG9va3VwUGFydGlhbCh0LG8pfSksYT0oMCxy
LmlzQ29uc3QpKHMpP3ZvaWQgMDpuZXcgci5SZWZlcmVuY2VDYWNoZShzKSx1PWE/YS5wZWVrKCk6
cy52YWx1ZSgpCi1lLmZyYW1lLnNldEltbWVkaWF0ZSh1KSxhJiZlLnVwZGF0ZVdpdGgobmV3IFNl
KGEpKX0pLEVlLmFkZCg1MCxmdW5jdGlvbihlLHQpe3ZhciBuPXQub3AxLHI9ZS5jb25zdGFudHMu
Z2V0T3RoZXIobikKLWUuZnJhbWUuc2V0SW1tZWRpYXRlKHIpfSksRWUuYWRkKDUxLGZ1bmN0aW9u
KGUsdCl7dmFyIG49dC5vcDEscj10Lm9wMixpPWUuY29uc3RhbnRzLmdldE90aGVyKG4pLG89ZS5j
b25zdGFudHMuZ2V0T3RoZXIocikscz1lLmZyYW1lLmdldEltbWVkaWF0ZSgpLGE9cy50ZW1wbGF0
ZSx1PW9bYS5pZF0KLXV8fCh1PWEuYXNQYXJ0aWFsKGkpKSxlLmludm9rZVBhcnRpYWwodSl9KQot
dmFyIGJyPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLnRhZz1lLnRhZyx0aGlzLmFydGlm
YWN0cz1lfXJldHVybiBlLnByb3RvdHlwZS52YWx1ZT1mdW5jdGlvbigpe3JldHVybiF0aGlzLmFy
dGlmYWN0cy5pc0VtcHR5KCl9LGV9KCkKLUVlLmFkZCg0NCxmdW5jdGlvbihlKXt2YXIgdD1lLmZy
YW1lLmdldE9wZXJhbmQoKSxpPSgwLG4uZXhwZWN0KShlLmZyYW1lLmdldEFyZ3MoKSwiUHV0SXRl
cmF0b3JPcGNvZGUgZXhwZWN0cyBhIHBvcHVsYXRlZCBhcmdzIHJlZ2lzdGVyIiksbz1lLmVudi5p
dGVyYWJsZUZvcih0LGkpLHM9bmV3IHIuUmVmZXJlbmNlSXRlcmF0b3IobykKLWUuZnJhbWUuc2V0
SXRlcmF0b3IocyksZS5mcmFtZS5zZXRDb25kaXRpb24obmV3IGJyKHMuYXJ0aWZhY3RzKSl9KSxF
ZS5hZGQoNDUsZnVuY3Rpb24oZSx0KXt2YXIgbj10Lm9wMSxyPXQub3AyCi1lLmVudGVyTGlzdChu
LHIpfSksRWUuYWRkKDQ2LGZ1bmN0aW9uKGUpe3JldHVybiBlLmV4aXRMaXN0KCl9KSxFZS5hZGQo
NDcsZnVuY3Rpb24oZSx0KXt2YXIgcj10Lm9wMSxpPXQub3AyLG89KDAsbi5leHBlY3QpKGUuZnJh
bWUuZ2V0S2V5KCksIkVudGVyV2l0aEtleU9wY29kZSBleHBlY3RzIGEgcG9wdWxhdGVkIGtleSBy
ZWdpc3RlciIpCi1lLmVudGVyV2l0aEtleShvLHIsaSl9KQotdmFyIF9yPW5ldyByLkNvbnN0UmVm
ZXJlbmNlKCEwKSx3cj1uZXcgci5Db25zdFJlZmVyZW5jZSghMSkKLUVlLmFkZCg0OCxmdW5jdGlv
bihlLHQpe3ZhciBuPXQub3AxLHI9ZS5mcmFtZS5nZXRJdGVyYXRvcigpLm5leHQoKQotcj8oZS5m
cmFtZS5zZXRDb25kaXRpb24oX3IpLGUuZnJhbWUuc2V0S2V5KHIua2V5KSxlLmZyYW1lLnNldE9w
ZXJhbmQoci52YWx1ZSksZS5mcmFtZS5zZXRBcmdzKFdlLnBvc2l0aW9uYWwoW3IudmFsdWUsci5t
ZW1vXSkpKTooZS5mcmFtZS5zZXRDb25kaXRpb24od3IpLGUuZ290byhuKSl9KQotdmFyIEVyLHhy
PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLnZtPWV9cmV0dXJuIGUucHJvdG90eXBlLm5l
eHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52bS5uZXh0KCl9LGV9KCksQ3I9MCxPcj1mdW5jdGlv
bigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLnNjb3BlPWUsdGhpcy5uYW1lUmVmPXQKLXZhciBuPXRo
aXMudmFyVGFnPW5ldyByLlVwZGF0YWJsZVRhZyhyLkNPTlNUQU5UX1RBRykKLXRoaXMudGFnPSgw
LHIuY29tYmluZSkoW3QudGFnLG5dKX1yZXR1cm4gZS5wcm90b3R5cGUudmFsdWU9ZnVuY3Rpb24o
KXtyZXR1cm4gdGhpcy5nZXRWYXIoKS52YWx1ZSgpfSxlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24o
ZSl7cmV0dXJuIHRoaXMuZ2V0VmFyKCkuZ2V0KGUpfSxlLnByb3RvdHlwZS5nZXRWYXI9ZnVuY3Rp
b24oKXt2YXIgZT1TdHJpbmcodGhpcy5uYW1lUmVmLnZhbHVlKCkpLHQ9dGhpcy5zY29wZS5nZXQo
ZSkKLXJldHVybiB0aGlzLnZhclRhZy51cGRhdGUodC50YWcpLHR9LGV9KCk7KGZ1bmN0aW9uKGUp
e2VbZS5FbGVtZW50PTBdPSJFbGVtZW50IixlW2UuQXR0cmlidXRlPTFdPSJBdHRyaWJ1dGUiLGVb
ZS5UZXh0PTJdPSJUZXh0IixlW2UuQ2RhdGFTZWN0aW9uPTNdPSJDZGF0YVNlY3Rpb24iLGVbZS5F
bnRpdHlSZWZlcmVuY2U9NF09IkVudGl0eVJlZmVyZW5jZSIsZVtlLkVudGl0eT01XT0iRW50aXR5
IixlW2UuUHJvY2Vzc2luZ0luc3RydWN0aW9uPTZdPSJQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24iLGVb
ZS5Db21tZW50PTddPSJDb21tZW50IixlW2UuRG9jdW1lbnQ9OF09IkRvY3VtZW50IixlW2UuRG9j
dW1lbnRUeXBlPTldPSJEb2N1bWVudFR5cGUiLGVbZS5Eb2N1bWVudEZyYWdtZW50PTEwXT0iRG9j
dW1lbnRGcmFnbWVudCIsZVtlLk5vdGF0aW9uPTExXT0iTm90YXRpb24ifSkoRXJ8fChFcj17fSkp
Ci12YXIgQXI9T2JqZWN0LmZyZWV6ZSh7Z2V0IE5vZGVUeXBlKCl7cmV0dXJuIEVyfX0pCi1lLlNp
bXBsZT1BcixlLnRlbXBsYXRlRmFjdG9yeT1mdW5jdGlvbihlKXt2YXIgdD1lLmlkLHI9ZS5tZXRh
LGk9ZS5ibG9jayxvPXZvaWQgMCxzPXR8fCJjbGllbnQtIitDcisrCi1yZXR1cm57aWQ6cyxtZXRh
OnIsY3JlYXRlOmZ1bmN0aW9uKGUsdCl7dmFyIGE9dD8oMCxuLmFzc2lnbikoe30sdCxyKTpyCi1y
ZXR1cm4gb3x8KG89SlNPTi5wYXJzZShpKSkscGUobyxzLGEsZSl9fX0sZS5OVUxMX1JFRkVSRU5D
RT1nZSxlLlVOREVGSU5FRF9SRUZFUkVOQ0U9bWUsZS5QcmltaXRpdmVSZWZlcmVuY2U9ZmUsZS5D
b25kaXRpb25hbFJlZmVyZW5jZT1iZSxlLk9wY29kZUJ1aWxkZXJEU0w9a3QsZS5jb21waWxlTGF5
b3V0PWZ1bmN0aW9uKGUsdCl7dmFyIG49bmV3IE50KHQpCi1yZXR1cm4gZS5jb21waWxlKG4pLG4u
Y29tcGlsZSgpfSxlLkNvbXBpbGVkQmxvY2s9QXQsZS5Db21waWxlZFByb2dyYW09VHQsZS5JQXR0
cmlidXRlTWFuYWdlcj1JbixlLkF0dHJpYnV0ZU1hbmFnZXI9SW4sZS5Qcm9wZXJ0eU1hbmFnZXI9
TW4sZS5JTlBVVF9WQUxVRV9QUk9QRVJUWV9NQU5BR0VSPVVuLGUuZGVmYXVsdE1hbmFnZXJzPWVl
LGUuZGVmYXVsdEF0dHJpYnV0ZU1hbmFnZXJzPW5lLGUuZGVmYXVsdFByb3BlcnR5TWFuYWdlcnM9
dGUsZS5yZWFkRE9NQXR0cj1mdW5jdGlvbihlLHQpe3ZhciBuPWUubmFtZXNwYWNlVVJJPT09QW4s
cj1CKGUsdCksaT1yLnR5cGUsbz1yLm5vcm1hbGl6ZWQKLXJldHVybiBuP2UuZ2V0QXR0cmlidXRl
KG8pOiJhdHRyIj09PWk/ZS5nZXRBdHRyaWJ1dGUobyk6ZVtvXX0sZS5ub3JtYWxpemVUZXh0VmFs
dWU9dWUsZS5Db21waWxlZEV4cHJlc3Npb249aXQsZS5Db21waWxlZEFyZ3M9SGUsZS5Db21waWxl
ZE5hbWVkQXJncz1GZSxlLkNvbXBpbGVkUG9zaXRpb25hbEFyZ3M9RGUsZS5FdmFsdWF0ZWRBcmdz
PVdlLGUuRXZhbHVhdGVkTmFtZWRBcmdzPVVlLGUuRXZhbHVhdGVkUG9zaXRpb25hbEFyZ3M9SWUs
ZS5nZXREeW5hbWljVmFyPWZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5keW5hbWljU2NvcGUoKSxyPXQu
cG9zaXRpb25hbC5hdCgwKQotcmV0dXJuIG5ldyBPcihuLHIpfSxlLkJsb2NrTWFjcm9zPWduLGUu
SW5saW5lTWFjcm9zPXZuLGUuY29tcGlsZUFyZ3M9UgotZS5zZXREZWJ1Z2dlckNhbGxiYWNrPWZ1
bmN0aW9uKGUpe3BuPWV9LGUucmVzZXREZWJ1Z2dlckNhbGxiYWNrPWZ1bmN0aW9uKCl7cG49QX0s
ZS5CYXNlbGluZVN5bnRheD1IdCxlLkxheW91dD1XdCxlLlVwZGF0aW5nVk09ZXIsZS5SZW5kZXJS
ZXN1bHQ9UW4sZS5pc1NhZmVTdHJpbmc9dSxlLlNjb3BlPVZuLGUuRW52aXJvbm1lbnQ9S24sZS5Q
YXJ0aWFsRGVmaW5pdGlvbj1mdW5jdGlvbihlLHQpe3RoaXMubmFtZT1lLHRoaXMudGVtcGxhdGU9
dH0sZS5Db21wb25lbnREZWZpbml0aW9uPWZ1bmN0aW9uKGUsdCxuKXt0aGlzW3J0XT0hMCx0aGlz
Lm5hbWU9ZSx0aGlzLm1hbmFnZXI9dCx0aGlzLkNvbXBvbmVudENsYXNzPW59LGUuaXNDb21wb25l
bnREZWZpbml0aW9uPWgsZS5ET01DaGFuZ2VzPURuLGUuSURPTUNoYW5nZXM9UG4sZS5ET01UcmVl
Q29uc3RydWN0aW9uPUxuLGUuaXNXaGl0ZXNwYWNlPWZ1bmN0aW9uKGUpe3JldHVybiBrbi50ZXN0
KGUpfSxlLmluc2VydEhUTUxCZWZvcmU9WCxlLkVsZW1lbnRTdGFjaz1ndCxlLkNvbmNyZXRlQm91
bmRzPVllfSksZSgiQGdsaW1tZXIvdXRpbCIsWyJleHBvcnRzIl0sZnVuY3Rpb24oZSl7InVzZSBz
dHJpY3QiCi1mdW5jdGlvbiB0KGUpe3JldHVybiBlLl9ndWlkPSsreX1mdW5jdGlvbiBuKGUpe3Jl
dHVybiBlLl9ndWlkfHx0KGUpfWZ1bmN0aW9uIHIoKXt9ZnVuY3Rpb24gaSgpe3JldHVybiBuZXcg
cn1lLnVucmVhY2hhYmxlPWUuZXhwZWN0PWUudW53cmFwPWUuSEFTX05BVElWRV9XRUFLTUFQPWUu
QT1lLkxpc3RTbGljZT1lLkxpc3ROb2RlPWUuTGlua2VkTGlzdD1lLkVNUFRZX1NMSUNFPWUuZGlj
dD1lLkRpY3RTZXQ9ZS5TdGFjaz1lLmluaXRpYWxpemVHdWlkPWUuZW5zdXJlR3VpZD1lLmZpbGxO
dWxscz1lLmFzc2lnbj1lLkxvZ0xldmVsPWUuTG9nZ2VyPWUuTE9HR0VSPWUuYXNzZXJ0PWUuZ2V0
QXR0ck5hbWVzcGFjZT12b2lkIDAKLXZhciBvLHM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxp
bmsiLGE9Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIsdT0iaHR0cDovL3d3
dy53My5vcmcvMjAwMC94bWxucy8iLGw9eyJ4bGluazphY3R1YXRlIjpzLCJ4bGluazphcmNyb2xl
IjpzLCJ4bGluazpocmVmIjpzLCJ4bGluazpyb2xlIjpzLCJ4bGluazpzaG93IjpzLCJ4bGluazp0
aXRsZSI6cywieGxpbms6dHlwZSI6cywieG1sOmJhc2UiOmEsInhtbDpsYW5nIjphLCJ4bWw6c3Bh
Y2UiOmEseG1sbnM6dSwieG1sbnM6eGxpbmsiOnV9OyhmdW5jdGlvbihlKXtlW2UuVHJhY2U9MF09
IlRyYWNlIixlW2UuRGVidWc9MV09IkRlYnVnIixlW2UuV2Fybj0yXT0iV2FybiIsZVtlLkVycm9y
PTNdPSJFcnJvciJ9KShvfHwoZS5Mb2dMZXZlbD1vPXt9KSkKLXZhciBjPWZ1bmN0aW9uKCl7ZnVu
Y3Rpb24gZSgpe31yZXR1cm4gZS5wcm90b3R5cGUubG9nPWZ1bmN0aW9uKCl7fSxlLnByb3RvdHlw
ZS53YXJuPWZ1bmN0aW9uKCl7fSxlLnByb3RvdHlwZS5lcnJvcj1mdW5jdGlvbigpe30sZS5wcm90
b3R5cGUudHJhY2U9ZnVuY3Rpb24oKXt9LGV9KCkscD12b2lkIDAsZj1mdW5jdGlvbigpe2Z1bmN0
aW9uIGUoZSl7dmFyIHQ9ZS5jb25zb2xlLG49ZS5sZXZlbAotdGhpcy5mPXAsdGhpcy5mb3JjZT1w
LHRoaXMuY29uc29sZT10LHRoaXMubGV2ZWw9bn1yZXR1cm4gZS5wcm90b3R5cGUuc2tpcHBlZD1m
dW5jdGlvbihlKXtyZXR1cm4gZTx0aGlzLmxldmVsfSxlLnByb3RvdHlwZS50cmFjZT1mdW5jdGlv
bihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1
bWVudHNbMV06e30sbj10LnN0YWNrVHJhY2Uscj12b2lkIDAhPT1uJiZuCi10aGlzLnNraXBwZWQo
by5UcmFjZSl8fCh0aGlzLmNvbnNvbGUubG9nKGUpLHImJnRoaXMuY29uc29sZS50cmFjZSgpKX0s
ZS5wcm90b3R5cGUuZGVidWc9ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2
b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9LG49dC5zdGFja1RyYWNlLHI9dm9p
ZCAwIT09biYmbgotdGhpcy5za2lwcGVkKG8uRGVidWcpfHwodGhpcy5jb25zb2xlLmxvZyhlKSxy
JiZ0aGlzLmNvbnNvbGUudHJhY2UoKSl9LGUucHJvdG90eXBlLndhcm49ZnVuY3Rpb24oZSl7dmFy
IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFd
Ont9LG49dC5zdGFja1RyYWNlLHI9dm9pZCAwIT09biYmbgotdGhpcy5za2lwcGVkKG8uV2Fybil8
fCh0aGlzLmNvbnNvbGUud2FybihlKSxyJiZ0aGlzLmNvbnNvbGUudHJhY2UoKSl9LGUucHJvdG90
eXBlLmVycm9yPWZ1bmN0aW9uKGUpe3RoaXMuc2tpcHBlZChvLkVycm9yKXx8dGhpcy5jb25zb2xl
LmVycm9yKGUpfSxlfSgpLGg9InVuZGVmaW5lZCI9PXR5cGVvZiBjb25zb2xlP25ldyBjOmNvbnNv
bGUKLXA9bmV3IGYoe2NvbnNvbGU6aCxsZXZlbDpvLlRyYWNlfSkKLXZhciBkPW8uV2FybixtPW5l
dyBmKHtjb25zb2xlOmgsbGV2ZWw6ZH0pLGc9T2JqZWN0LmtleXMseT0wLHY9T2JqZWN0LmNyZWF0
ZShudWxsLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6dm9pZCAwLGVudW1lcmFibGU6ITEsd3JpdGFibGU6
ITB9fSkKLXIucHJvdG90eXBlPXYKLXZhciBiPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMu
ZGljdD1pKCl9cmV0dXJuIGUucHJvdG90eXBlLmFkZD1mdW5jdGlvbihlKXtyZXR1cm4ic3RyaW5n
Ij09dHlwZW9mIGU/dGhpcy5kaWN0W2VdPWU6dGhpcy5kaWN0W24oZSldPWUsdGhpc30sZS5wcm90
b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKGUpeyJzdHJpbmciPT10eXBlb2YgZT9kZWxldGUgdGhpcy5k
aWN0W2VdOmUuX2d1aWQmJmRlbGV0ZSB0aGlzLmRpY3RbZS5fZ3VpZF19LGUucHJvdG90eXBlLmZv
ckVhY2g9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5kaWN0Ci1PYmplY3Qua2V5cyh0KS5mb3JFYWNo
KGZ1bmN0aW9uKG4pe3JldHVybiBlKHRbbl0pfSl9LGUucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rp
b24oKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5kaWN0KX0sZX0oKSxfPWZ1bmN0aW9uKCl7ZnVu
Y3Rpb24gZSgpe3RoaXMuc3RhY2s9W10sdGhpcy5jdXJyZW50PW51bGx9cmV0dXJuIGUucHJvdG90
eXBlLnRvQXJyYXk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGFja30sZS5wcm90b3R5cGUucHVz
aD1mdW5jdGlvbihlKXt0aGlzLmN1cnJlbnQ9ZSx0aGlzLnN0YWNrLnB1c2goZSl9LGUucHJvdG90
eXBlLnBvcD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuc3RhY2sucG9wKCksdD10aGlzLnN0YWNrLmxl
bmd0aAotcmV0dXJuIHRoaXMuY3VycmVudD0wPT09dD9udWxsOnRoaXMuc3RhY2tbdC0xXSx2b2lk
IDA9PT1lP251bGw6ZX0sZS5wcm90b3R5cGUuaXNFbXB0eT1mdW5jdGlvbigpe3JldHVybiAwPT09
dGhpcy5zdGFjay5sZW5ndGh9LGV9KCksdz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLmNs
ZWFyKCl9cmV0dXJuIGUuZnJvbVNsaWNlPWZ1bmN0aW9uKHQpe3ZhciBuPW5ldyBlCi1yZXR1cm4g
dC5mb3JFYWNoTm9kZShmdW5jdGlvbihlKXtyZXR1cm4gbi5hcHBlbmQoZS5jbG9uZSgpKX0pLG59
LGUucHJvdG90eXBlLmhlYWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faGVhZH0sZS5wcm90b3R5
cGUudGFpbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl90YWlsfSxlLnByb3RvdHlwZS5jbGVhcj1m
dW5jdGlvbigpe3RoaXMuX2hlYWQ9dGhpcy5fdGFpbD1udWxsfSxlLnByb3RvdHlwZS5pc0VtcHR5
PWZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PT10aGlzLl9oZWFkfSxlLnByb3RvdHlwZS50b0FycmF5
PWZ1bmN0aW9uKCl7dmFyIGU9W10KLXJldHVybiB0aGlzLmZvckVhY2hOb2RlKGZ1bmN0aW9uKHQp
e3JldHVybiBlLnB1c2godCl9KSxlfSxlLnByb3RvdHlwZS5zcGxpY2U9ZnVuY3Rpb24oZSx0LG4p
e3ZhciByPXZvaWQgMAotbnVsbD09PW4/KHI9dGhpcy5fdGFpbCx0aGlzLl90YWlsPXQpOihyPW4u
cHJldix0Lm5leHQ9bixuLnByZXY9dCksciYmKHIubmV4dD1lLGUucHJldj1yKX0sZS5wcm90b3R5
cGUubmV4dE5vZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGUubmV4dH0sZS5wcm90b3R5cGUucHJldk5v
ZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGUucHJldn0sZS5wcm90b3R5cGUuZm9yRWFjaE5vZGU9ZnVu
Y3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMuX2hlYWQ7bnVsbCE9PXQ7KWUodCksdD10Lm5leHR9LGUu
cHJvdG90eXBlLmNvbnRhaW5zPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLl9oZWFkO251bGwh
PT10Oyl7aWYodD09PWUpcmV0dXJuITAKLXQ9dC5uZXh0fXJldHVybiExfSxlLnByb3RvdHlwZS5p
bnNlcnRCZWZvcmU9ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAh
PT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGwKLXJldHVybiBudWxsPT09dD90aGlzLmFw
cGVuZChlKToodC5wcmV2P3QucHJldi5uZXh0PWU6dGhpcy5faGVhZD1lLGUucHJldj10LnByZXYs
ZS5uZXh0PXQsdC5wcmV2PWUsZSl9LGUucHJvdG90eXBlLmFwcGVuZD1mdW5jdGlvbihlKXt2YXIg
dD10aGlzLl90YWlsCi1yZXR1cm4gdD8odC5uZXh0PWUsZS5wcmV2PXQsZS5uZXh0PW51bGwpOnRo
aXMuX2hlYWQ9ZSx0aGlzLl90YWlsPWV9LGUucHJvdG90eXBlLnBvcD1mdW5jdGlvbigpe3JldHVy
biB0aGlzLl90YWlsP3RoaXMucmVtb3ZlKHRoaXMuX3RhaWwpOm51bGx9LGUucHJvdG90eXBlLnBy
ZXBlbmQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2hlYWQ/dGhpcy5pbnNlcnRCZWZvcmUoZSx0
aGlzLl9oZWFkKTp0aGlzLl9oZWFkPXRoaXMuX3RhaWw9ZX0sZS5wcm90b3R5cGUucmVtb3ZlPWZ1
bmN0aW9uKGUpe3JldHVybiBlLnByZXY/ZS5wcmV2Lm5leHQ9ZS5uZXh0OnRoaXMuX2hlYWQ9ZS5u
ZXh0LGUubmV4dD9lLm5leHQucHJldj1lLnByZXY6dGhpcy5fdGFpbD1lLnByZXYsZX0sZX0oKSxF
PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMuX2hlYWQ9ZSx0aGlzLl90YWlsPXR9cmV0
dXJuIGUudG9MaXN0PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyB3Ci1yZXR1cm4gZS5mb3JFYWNoTm9k
ZShmdW5jdGlvbihlKXtyZXR1cm4gdC5hcHBlbmQoZS5jbG9uZSgpKX0pLHR9LGUucHJvdG90eXBl
LmZvckVhY2hOb2RlPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLl9oZWFkO251bGwhPT10Oyll
KHQpLHQ9dGhpcy5uZXh0Tm9kZSh0KX0sZS5wcm90b3R5cGUuY29udGFpbnM9ZnVuY3Rpb24oZSl7
Zm9yKHZhciB0PXRoaXMuX2hlYWQ7bnVsbCE9PXQ7KXtpZih0PT09ZSlyZXR1cm4hMAotdD10Lm5l
eHR9cmV0dXJuITF9LGUucHJvdG90eXBlLmhlYWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faGVh
ZH0sZS5wcm90b3R5cGUudGFpbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl90YWlsfSxlLnByb3Rv
dHlwZS50b0FycmF5PWZ1bmN0aW9uKCl7dmFyIGU9W10KLXJldHVybiB0aGlzLmZvckVhY2hOb2Rl
KGZ1bmN0aW9uKHQpe3JldHVybiBlLnB1c2godCl9KSxlfSxlLnByb3RvdHlwZS5uZXh0Tm9kZT1m
dW5jdGlvbihlKXtyZXR1cm4gZT09PXRoaXMuX3RhaWw/bnVsbDplLm5leHR9LGUucHJvdG90eXBl
LnByZXZOb2RlPWZ1bmN0aW9uKGUpe3JldHVybiBlPT09dGhpcy5faGVhZD9udWxsOmUucHJldn0s
ZS5wcm90b3R5cGUuaXNFbXB0eT1mdW5jdGlvbigpe3JldHVybiExfSxlfSgpLHg9bmV3IEUobnVs
bCxudWxsKSxDPSJ1bmRlZmluZWQiIT10eXBlb2YgVWludDMyQXJyYXksTz12b2lkIDAKLU89Qz9V
aW50MzJBcnJheTpBcnJheQotdmFyIEE9TyxUPWZ1bmN0aW9uKCl7aWYoImZ1bmN0aW9uIiE9dHlw
ZW9mIFdlYWtNYXApcmV0dXJuITEKLXZhciBlPW5ldyBXZWFrTWFwCi1yZXR1cm4iW29iamVjdCBX
ZWFrTWFwXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSl9KCkKLWUuZ2V0QXR0
ck5hbWVzcGFjZT1mdW5jdGlvbihlKXtyZXR1cm4gbFtlXXx8bnVsbH0sZS5hc3NlcnQ9ZnVuY3Rp
b24oZSx0KXtpZighZSl0aHJvdyBuZXcgRXJyb3IodHx8ImFzc2VydGlvbiBmYWlsdXJlIil9LGUu
TE9HR0VSPW0sZS5Mb2dnZXI9ZixlLkxvZ0xldmVsPW8sZS5hc3NpZ249ZnVuY3Rpb24oZSl7dmFy
IHQsbixyLGksbwotZm9yKHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKWlmKG51bGwhPT0obj1h
cmd1bWVudHNbdF0pJiYib2JqZWN0Ij09dHlwZW9mIG4pZm9yKHI9ZyhuKSxpPTA7aTxyLmxlbmd0
aDtpKyspbz1yW2ldLGVbb109bltvXQotcmV0dXJuIGV9LGUuZmlsbE51bGxzPWZ1bmN0aW9uKGUp
e3ZhciB0LG49bmV3IEFycmF5KGUpCi1mb3IodD0wO3Q8ZTt0Kyspblt0XT1udWxsCi1yZXR1cm4g
bn0sZS5lbnN1cmVHdWlkPW4sZS5pbml0aWFsaXplR3VpZD10LGUuU3RhY2s9XyxlLkRpY3RTZXQ9
YixlLmRpY3Q9aSxlLkVNUFRZX1NMSUNFPXgsZS5MaW5rZWRMaXN0PXcsZS5MaXN0Tm9kZT1mdW5j
dGlvbihlKXt0aGlzLm5leHQ9bnVsbCx0aGlzLnByZXY9bnVsbCx0aGlzLnZhbHVlPWV9LGUuTGlz
dFNsaWNlPUUsZS5BPUEsZS5IQVNfTkFUSVZFX1dFQUtNQVA9VCxlLnVud3JhcD1mdW5jdGlvbihl
KXtpZihudWxsPT09ZXx8dm9pZCAwPT09ZSl0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIHZhbHVl
IHRvIGJlIHByZXNlbnQiKQotcmV0dXJuIGV9LGUuZXhwZWN0PWZ1bmN0aW9uKGUsdCl7aWYobnVs
bD09PWV8fHZvaWQgMD09PWUpdGhyb3cgbmV3IEVycm9yKHQpCi1yZXR1cm4gZX0sZS51bnJlYWNo
YWJsZT1mdW5jdGlvbigpe3JldHVybiBuZXcgRXJyb3IoInVucmVhY2hhYmxlIil9fSksZSgiQGds
aW1tZXIvd2lyZS1mb3JtYXQiLFsiZXhwb3J0cyJdLGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0Igot
ZnVuY3Rpb24gdChlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHRbMF09PT1lfX12YXIgbjso
ZnVuY3Rpb24oZSl7ZVtlLlRleHQ9MF09IlRleHQiLGVbZS5BcHBlbmQ9MV09IkFwcGVuZCIsZVtl
LlVub3B0aW1pemVkQXBwZW5kPTJdPSJVbm9wdGltaXplZEFwcGVuZCIsZVtlLk9wdGltaXplZEFw
cGVuZD0zXT0iT3B0aW1pemVkQXBwZW5kIixlW2UuQ29tbWVudD00XT0iQ29tbWVudCIsZVtlLk1v
ZGlmaWVyPTVdPSJNb2RpZmllciIsZVtlLkJsb2NrPTZdPSJCbG9jayIsZVtlLlNjYW5uZWRCbG9j
az03XT0iU2Nhbm5lZEJsb2NrIixlW2UuTmVzdGVkQmxvY2s9OF09Ik5lc3RlZEJsb2NrIixlW2Uu
Q29tcG9uZW50PTldPSJDb21wb25lbnQiLGVbZS5TY2FubmVkQ29tcG9uZW50PTEwXT0iU2Nhbm5l
ZENvbXBvbmVudCIsZVtlLk9wZW5FbGVtZW50PTExXT0iT3BlbkVsZW1lbnQiLGVbZS5PcGVuUHJp
bWl0aXZlRWxlbWVudD0xMl09Ik9wZW5QcmltaXRpdmVFbGVtZW50IixlW2UuRmx1c2hFbGVtZW50
PTEzXT0iRmx1c2hFbGVtZW50IixlW2UuQ2xvc2VFbGVtZW50PTE0XT0iQ2xvc2VFbGVtZW50Iixl
W2UuU3RhdGljQXR0cj0xNV09IlN0YXRpY0F0dHIiLGVbZS5EeW5hbWljQXR0cj0xNl09IkR5bmFt
aWNBdHRyIixlW2UuQW55RHluYW1pY0F0dHI9MTddPSJBbnlEeW5hbWljQXR0ciIsZVtlLllpZWxk
PTE4XT0iWWllbGQiLGVbZS5QYXJ0aWFsPTE5XT0iUGFydGlhbCIsZVtlLlN0YXRpY1BhcnRpYWw9
MjBdPSJTdGF0aWNQYXJ0aWFsIixlW2UuRHluYW1pY1BhcnRpYWw9MjFdPSJEeW5hbWljUGFydGlh
bCIsZVtlLkR5bmFtaWNBcmc9MjJdPSJEeW5hbWljQXJnIixlW2UuU3RhdGljQXJnPTIzXT0iU3Rh
dGljQXJnIixlW2UuVHJ1c3RpbmdBdHRyPTI0XT0iVHJ1c3RpbmdBdHRyIixlW2UuRGVidWdnZXI9
MjVdPSJEZWJ1Z2dlciIsZVtlLlVua25vd249MjZdPSJVbmtub3duIixlW2UuQXJnPTI3XT0iQXJn
IixlW2UuR2V0PTI4XT0iR2V0IixlW2UuSGFzQmxvY2s9MjldPSJIYXNCbG9jayIKLWVbZS5IYXNC
bG9ja1BhcmFtcz0zMF09Ikhhc0Jsb2NrUGFyYW1zIixlW2UuVW5kZWZpbmVkPTMxXT0iVW5kZWZp
bmVkIixlW2UuRnVuY3Rpb249MzJdPSJGdW5jdGlvbiIsZVtlLkhlbHBlcj0zM109IkhlbHBlciIs
ZVtlLkNvbmNhdD0zNF09IkNvbmNhdCJ9KShufHwoZS5PcHM9bj17fSkpCi12YXIgcjsoZnVuY3Rp
b24oZSl7ZS5pc1Vua25vd249dChuLlVua25vd24pLGUuaXNBcmc9dChuLkFyZyksZS5pc0dldD10
KG4uR2V0KSxlLmlzQ29uY2F0PXQobi5Db25jYXQpLGUuaXNIZWxwZXI9dChuLkhlbHBlciksZS5p
c0hhc0Jsb2NrPXQobi5IYXNCbG9jayksZS5pc0hhc0Jsb2NrUGFyYW1zPXQobi5IYXNCbG9ja1Bh
cmFtcyksZS5pc1VuZGVmaW5lZD10KG4uVW5kZWZpbmVkKSxlLmlzUHJpbWl0aXZlVmFsdWU9ZnVu
Y3Rpb24oZSl7cmV0dXJuIG51bGw9PT1lfHwib2JqZWN0IiE9dHlwZW9mIGV9fSkocnx8KGUuRXhw
cmVzc2lvbnM9cj17fSkpCi12YXIgaTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihlKXtyZXR1cm4g
ZVswXT09PW4uU3RhdGljQXR0cnx8ZVswXT09PW4uRHluYW1pY0F0dHJ9ZnVuY3Rpb24gaShlKXty
ZXR1cm4gZVswXT09PW4uU3RhdGljQXJnfHxlWzBdPT09bi5EeW5hbWljQXJnfWUuaXNUZXh0PXQo
bi5UZXh0KSxlLmlzQXBwZW5kPXQobi5BcHBlbmQpLGUuaXNDb21tZW50PXQobi5Db21tZW50KSxl
LmlzTW9kaWZpZXI9dChuLk1vZGlmaWVyKSxlLmlzQmxvY2s9dChuLkJsb2NrKSxlLmlzQ29tcG9u
ZW50PXQobi5Db21wb25lbnQpLGUuaXNPcGVuRWxlbWVudD10KG4uT3BlbkVsZW1lbnQpLGUuaXNG
bHVzaEVsZW1lbnQ9dChuLkZsdXNoRWxlbWVudCksZS5pc0Nsb3NlRWxlbWVudD10KG4uQ2xvc2VF
bGVtZW50KSxlLmlzU3RhdGljQXR0cj10KG4uU3RhdGljQXR0ciksZS5pc0R5bmFtaWNBdHRyPXQo
bi5EeW5hbWljQXR0ciksZS5pc1lpZWxkPXQobi5ZaWVsZCksZS5pc1BhcnRpYWw9dChuLlBhcnRp
YWwpLGUuaXNEeW5hbWljQXJnPXQobi5EeW5hbWljQXJnKSxlLmlzU3RhdGljQXJnPXQobi5TdGF0
aWNBcmcpLGUuaXNUcnVzdGluZ0F0dHI9dChuLlRydXN0aW5nQXR0ciksZS5pc0RlYnVnZ2VyPXQo
bi5EZWJ1Z2dlciksZS5pc0F0dHJpYnV0ZT1yLGUuaXNBcmd1bWVudD1pLGUuaXNQYXJhbWV0ZXI9
ZnVuY3Rpb24oZSl7cmV0dXJuIHIoZSl8fGkoZSl9LGUuZ2V0UGFyYW1ldGVyTmFtZT1mdW5jdGlv
bihlKXtyZXR1cm4gZVsxXX19KShpfHwoZS5TdGF0ZW1lbnRzPWk9e30pKSxlLmlzPXQsZS5FeHBy
ZXNzaW9ucz1yLGUuU3RhdGVtZW50cz1pLGUuT3BzPW59KSxlKCJiYWNrYnVybmVyIixbImV4cG9y
dHMiXSxmdW5jdGlvbihlKXsidXNlIHN0cmljdCIKLWZ1bmN0aW9uIHQoZSx0KXt2YXIgbgotZm9y
KG49MDtuPGUubGVuZ3RoO24rKyl0KGVbbl0pfWZ1bmN0aW9uIG4oZSl7cmV0dXJuInN0cmluZyI9
PXR5cGVvZiBlfWZ1bmN0aW9uIHIoZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGV9ZnVuY3Rp
b24gaShlKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGV9ZnVuY3Rpb24gbyhlKXtyZXR1cm4gaShl
KXx8aC50ZXN0KGUpfWZ1bmN0aW9uIHMoZSl7dGhyb3cgbmV3IEVycm9yKCJZb3UgYXR0ZW1wdGVk
IHRvIHNjaGVkdWxlIGFuIGFjdGlvbiBpbiBhIHF1ZXVlICgiK2UrIikgdGhhdCBkb2Vzbid0IGV4
aXN0Iil9ZnVuY3Rpb24gYShlKXt0aHJvdyBuZXcgRXJyb3IoIllvdSBhdHRlbXB0ZWQgdG8gc2No
ZWR1bGUgYW4gYWN0aW9uIGluIGEgcXVldWUgKCIrZSsiKSBmb3IgYSBtZXRob2QgdGhhdCBkb2Vz
bid0IGV4aXN0Iil9ZnVuY3Rpb24gdShlKXtyZXR1cm4gZS5vbkVycm9yfHxlLm9uRXJyb3JUYXJn
ZXQmJmUub25FcnJvclRhcmdldFtlLm9uRXJyb3JNZXRob2RdfWZ1bmN0aW9uIGwoZSx0LG4pe3Jl
dHVybiBwKGUsdCxuKX1mdW5jdGlvbiBjKGUsdCxuKXtyZXR1cm4gcChlLHQsbil9ZnVuY3Rpb24g
cChlLHQsbil7dmFyIHIsaSxvPXZvaWQgMCxzPS0xCi1mb3Iocj0wLGk9bi5sZW5ndGg7cjxpO3Ir
KylpZihvPW5bcl0sb1swXT09PWUmJm9bMV09PT10KXtzPXIKLWJyZWFrfXJldHVybiBzfWZ1bmN0
aW9uIGYoZSx0KXtmb3IodmFyIG49MCxyPXQubGVuZ3RoLTIsaT12b2lkIDAsbz12b2lkIDA7bjxy
OylvPShyLW4pLzIsaT1uK28tbyUyLGU+PXRbaV0/bj1pKzI6cj1pCi1yZXR1cm4gZT49dFtuXT9u
KzI6bn12YXIgaD0vXGQrLyxkPURhdGUubm93LG09ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxu
KXt0aGlzLm5hbWU9ZSx0aGlzLmdsb2JhbE9wdGlvbnM9bnx8e30sdGhpcy5vcHRpb25zPXQsdGhp
cy5fcXVldWU9W10sdGhpcy50YXJnZXRRdWV1ZXM9e30sdGhpcy5fcXVldWVCZWluZ0ZsdXNoZWQ9
dm9pZCAwfXJldHVybiBlLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiB0
aGlzLl9xdWV1ZS5wdXNoKGUsdCxuLHIpLHtxdWV1ZTp0aGlzLHRhcmdldDplLG1ldGhvZDp0fX0s
ZS5wcm90b3R5cGUucHVzaFVuaXF1ZT1mdW5jdGlvbihlLHQsbixyKXt2YXIgaSxvPXRoaXMuZ2xv
YmFsT3B0aW9ucy5HVUlEX0tFWQotcmV0dXJuIGUmJm8mJihpPWVbb10pP3RoaXMucHVzaFVuaXF1
ZVdpdGhHdWlkKGksZSx0LG4scik6KHRoaXMucHVzaFVuaXF1ZVdpdGhvdXRHdWlkKGUsdCxuLHIp
LHtxdWV1ZTp0aGlzLHRhcmdldDplLG1ldGhvZDp0fSl9LGUucHJvdG90eXBlLmZsdXNoPWZ1bmN0
aW9uKGUpe3ZhciB0LHI9dGhpcy5fcXVldWUsaT1yLmxlbmd0aAotaWYoMCE9PWkpe3ZhciBvPXRo
aXMuZ2xvYmFsT3B0aW9ucyxzPXRoaXMub3B0aW9ucyxhPXMmJnMuYmVmb3JlLHU9cyYmcy5hZnRl
cixsPW8ub25FcnJvcnx8by5vbkVycm9yVGFyZ2V0JiZvLm9uRXJyb3JUYXJnZXRbby5vbkVycm9y
TWV0aG9kXSxjPXZvaWQgMCxwPXZvaWQgMCxmPXZvaWQgMCxoPXZvaWQgMCxkPWw/dGhpcy5pbnZv
a2VXaXRoT25FcnJvcjp0aGlzLmludm9rZQotdGhpcy50YXJnZXRRdWV1ZXM9T2JqZWN0LmNyZWF0
ZShudWxsKQotdmFyIG09dGhpcy5fcXVldWVCZWluZ0ZsdXNoZWQ9dGhpcy5fcXVldWUKLWZvcih0
aGlzLl9xdWV1ZT1bXSxhJiZhKCksdD0wO3Q8aTt0Kz00KWM9bVt0XSxwPW1bdCsxXSxmPW1bdCsy
XSxoPW1bdCszXSxuKHApJiYocD1jW3BdKSxwJiZkKGMscCxmLGwsaCkKLXUmJnUoKSx0aGlzLl9x
dWV1ZUJlaW5nRmx1c2hlZD12b2lkIDAsITEhPT1lJiZ0aGlzLl9xdWV1ZS5sZW5ndGg+MCYmdGhp
cy5mbHVzaCghMCl9fSxlLnByb3RvdHlwZS5jYW5jZWw9ZnVuY3Rpb24oZSl7dmFyIHQsbj10aGlz
Ll9xdWV1ZSxyPXZvaWQgMCxpPXZvaWQgMCxvPXZvaWQgMCxzPXZvaWQgMCxhPWUudGFyZ2V0LHU9
ZS5tZXRob2QsbD10aGlzLmdsb2JhbE9wdGlvbnMuR1VJRF9LRVkKLWlmKGwmJnRoaXMudGFyZ2V0
UXVldWVzJiZhJiYodD10aGlzLnRhcmdldFF1ZXVlc1thW2xdXSkpZm9yKG89MCxzPXQubGVuZ3Ro
O288cztvKyspdFtvXT09PXUmJnQuc3BsaWNlKG8sMSkKLWZvcihvPTAscz1uLmxlbmd0aDtvPHM7
bys9NClpZihyPW5bb10saT1uW28rMV0scj09PWEmJmk9PT11KXJldHVybiBuLnNwbGljZShvLDQp
LCEwCi1pZihuPXRoaXMuX3F1ZXVlQmVpbmdGbHVzaGVkKWZvcihvPTAscz1uLmxlbmd0aDtvPHM7
bys9NClpZihyPW5bb10saT1uW28rMV0scj09PWEmJmk9PT11KXJldHVybiBuW28rMV09bnVsbCwh
MH0sZS5wcm90b3R5cGUucHVzaFVuaXF1ZVdpdGhvdXRHdWlkPWZ1bmN0aW9uKGUsdCxuLHIpe3Zh
ciBpLG8scyxhLHU9dGhpcy5fcXVldWUKLWZvcihpPTAsbz11Lmxlbmd0aDtpPG87aSs9NClpZihz
PXVbaV0sYT11W2krMV0scz09PWUmJmE9PT10KXJldHVybiB1W2krMl09bix2b2lkKHVbaSszXT1y
KQotdS5wdXNoKGUsdCxuLHIpfSxlLnByb3RvdHlwZS50YXJnZXRRdWV1ZT1mdW5jdGlvbihlLHQs
bixyLGkpe3ZhciBvLHMsYSx1LGw9dGhpcy5fcXVldWUKLWZvcihvPTAscz1lLmxlbmd0aDtvPHM7
bys9MilpZihhPWVbb10sdT1lW28rMV0sYT09PW4pcmV0dXJuIGxbdSsyXT1yLHZvaWQobFt1KzNd
PWkpCi1lLnB1c2gobixsLnB1c2godCxuLHIsaSktNCl9LGUucHJvdG90eXBlLnB1c2hVbmlxdWVX
aXRoR3VpZD1mdW5jdGlvbihlLHQsbixyLGkpe3ZhciBvPXRoaXMudGFyZ2V0UXVldWVzW2VdCi1y
ZXR1cm4gbz90aGlzLnRhcmdldFF1ZXVlKG8sdCxuLHIsaSk6dGhpcy50YXJnZXRRdWV1ZXNbZV09
W24sdGhpcy5fcXVldWUucHVzaCh0LG4scixpKS00XSx7cXVldWU6dGhpcyx0YXJnZXQ6dCxtZXRo
b2Q6bn19LGUucHJvdG90eXBlLmludm9rZT1mdW5jdGlvbihlLHQsbil7biYmbi5sZW5ndGg+MD90
LmFwcGx5KGUsbik6dC5jYWxsKGUpfSxlLnByb3RvdHlwZS5pbnZva2VXaXRoT25FcnJvcj1mdW5j
dGlvbihlLHQsbixyLGkpe3RyeXtuJiZuLmxlbmd0aD4wP3QuYXBwbHkoZSxuKTp0LmNhbGwoZSl9
Y2F0Y2goZSl7cihlLGkpfX0sZX0oKSxnPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLG4pe3ZhciBy
PXRoaXMucXVldWVzPXt9Ci10aGlzLnF1ZXVlTmFtZXM9ZT1lfHxbXSx0aGlzLm9wdGlvbnM9bix0
KGUsZnVuY3Rpb24oZSl7cltlXT1uZXcgbShlLG5bZV0sbil9KX1yZXR1cm4gZS5wcm90b3R5cGUu
c2NoZWR1bGU9ZnVuY3Rpb24oZSx0LG4scixpLG8pe3ZhciB1PXRoaXMucXVldWVzLGw9dVtlXQot
cmV0dXJuIGx8fHMoZSksbnx8YShlKSxpP2wucHVzaFVuaXF1ZSh0LG4scixvKTpsLnB1c2godCxu
LHIsbyl9LGUucHJvdG90eXBlLmZsdXNoPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPXZvaWQgMCx0PXZv
aWQgMCxuPTAscj10aGlzLnF1ZXVlTmFtZXMubGVuZ3RoO248cjspdD10aGlzLnF1ZXVlTmFtZXNb
bl0sZT10aGlzLnF1ZXVlc1t0XSwwPT09ZS5fcXVldWUubGVuZ3RoP24rKzooZS5mbHVzaCghMSks
bj0wKX0sZX0oKSx5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3ZhciBuPXRoaXMKLXRoaXMu
REVCVUc9ITEsdGhpcy5fYXV0b3J1bj1udWxsLHRoaXMucXVldWVOYW1lcz1lLHRoaXMub3B0aW9u
cz10fHx7fSx0aGlzLm9wdGlvbnMuZGVmYXVsdFF1ZXVlfHwodGhpcy5vcHRpb25zLmRlZmF1bHRR
dWV1ZT1lWzBdKSx0aGlzLmN1cnJlbnRJbnN0YW5jZT1udWxsLHRoaXMuaW5zdGFuY2VTdGFjaz1b
XSx0aGlzLl9kZWJvdW5jZWVzPVtdLHRoaXMuX3Rocm90dGxlcnM9W10sdGhpcy5fZXZlbnRDYWxs
YmFja3M9e2VuZDpbXSxiZWdpbjpbXX0sdGhpcy5fYm91bmRDbGVhckl0ZW1zPWZ1bmN0aW9uKGUp
e24uX3BsYXRmb3JtLmNsZWFyVGltZW91dChlWzJdKX0sdGhpcy5fdGltZXJUaW1lb3V0SWQ9dm9p
ZCAwLHRoaXMuX3RpbWVycz1bXSx0aGlzLl9wbGF0Zm9ybT10aGlzLm9wdGlvbnMuX3BsYXRmb3Jt
fHx7c2V0VGltZW91dDpmdW5jdGlvbihlLHQpe3JldHVybiBzZXRUaW1lb3V0KGUsdCl9LGNsZWFy
VGltZW91dDpmdW5jdGlvbihlKXtjbGVhclRpbWVvdXQoZSl9fSx0aGlzLl9ib3VuZFJ1bkV4cGly
ZWRUaW1lcnM9ZnVuY3Rpb24oKXtuLl9ydW5FeHBpcmVkVGltZXJzKCl9LHRoaXMuX2JvdW5kQXV0
b3J1bkVuZD1mdW5jdGlvbigpe24uX2F1dG9ydW49bnVsbCxuLmVuZCgpfX1yZXR1cm4gZS5wcm90
b3R5cGUuYmVnaW49ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9wdGlvbnMsdD1lJiZlLm9uQmVnaW4s
bj10aGlzLmN1cnJlbnRJbnN0YW5jZQotbiYmdGhpcy5pbnN0YW5jZVN0YWNrLnB1c2gobikKLXZh
ciByPXRoaXMuY3VycmVudEluc3RhbmNlPW5ldyBnKHRoaXMucXVldWVOYW1lcyxlKQotcmV0dXJu
IHRoaXMuX3RyaWdnZXIoImJlZ2luIixyLG4pLHQmJnQocixuKSxyfSxlLnByb3RvdHlwZS5lbmQ9
ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9wdGlvbnMsdD1lJiZlLm9uRW5kLG49dGhpcy5jdXJyZW50
SW5zdGFuY2Uscj1udWxsCi1pZighbil0aHJvdyBuZXcgRXJyb3IoImVuZCBjYWxsZWQgd2l0aG91
dCBiZWdpbiIpCi12YXIgaT0hMQotdHJ5e24uZmx1c2goKX1maW5hbGx5e2l8fChpPSEwLHRoaXMu
Y3VycmVudEluc3RhbmNlPW51bGwsdGhpcy5pbnN0YW5jZVN0YWNrLmxlbmd0aCYmKHI9dGhpcy5p
bnN0YW5jZVN0YWNrLnBvcCgpLHRoaXMuY3VycmVudEluc3RhbmNlPXIpLHRoaXMuX3RyaWdnZXIo
ImVuZCIsbixyKSx0JiZ0KG4scikpfX0sZS5wcm90b3R5cGUub249ZnVuY3Rpb24oZSx0KXtpZigi
ZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYWxsYmFjayBtdXN0IGJl
IGEgZnVuY3Rpb24iKQotdmFyIG49dGhpcy5fZXZlbnRDYWxsYmFja3NbZV0KLWlmKCFuKXRocm93
IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBvbigpIGV2ZW50ICIrZSsiIGJlY2F1c2UgaXQgZG9lcyBu
b3QgZXhpc3QiKQotbi5wdXNoKHQpfSxlLnByb3RvdHlwZS5vZmY9ZnVuY3Rpb24oZSx0KXt2YXIg
bixyLGkKLWlmKCFlKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBvZmYoKSBldmVudCAiK2Ur
IiBiZWNhdXNlIGl0IGRvZXMgbm90IGV4aXN0IikKLWlmKG49dGhpcy5fZXZlbnRDYWxsYmFja3Nb
ZV0scj0hMSxuKXtpZih0KWZvcihpPTA7aTxuLmxlbmd0aDtpKyspbltpXT09PXQmJihyPSEwLG4u
c3BsaWNlKGksMSksaS0tKQotaWYoIXIpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IG9mZigp
IGNhbGxiYWNrIHRoYXQgZG9lcyBub3QgZXhpc3QiKX19LGUucHJvdG90eXBlLnJ1bj1mdW5jdGlv
bihlLHQpe2ZvcihyPWFyZ3VtZW50cy5sZW5ndGgsaT1BcnJheShyPjI/ci0yOjApLG89MjtvPHI7
bysrKWlbby0yXT1hcmd1bWVudHNbb10KLXZhciByLGksbyxzPWFyZ3VtZW50cy5sZW5ndGgsYT12
b2lkIDAsbD12b2lkIDAKLTE9PT1zPyhhPWUsbD1udWxsKToobD1lLGE9dCksbihhKSYmKGE9bFth
XSkKLXZhciBjPXUodGhpcy5vcHRpb25zKQotaWYodGhpcy5iZWdpbigpLGMpdHJ5e3JldHVybiBh
LmFwcGx5KGwsaSl9Y2F0Y2goZSl7YyhlKX1maW5hbGx5e3RoaXMuZW5kKCl9ZWxzZSB0cnl7cmV0
dXJuIGEuYXBwbHkobCxpKX1maW5hbGx5e3RoaXMuZW5kKCl9fSxlLnByb3RvdHlwZS5qb2luPWZ1
bmN0aW9uKCl7aWYoIXRoaXMuY3VycmVudEluc3RhbmNlKXJldHVybiB0aGlzLnJ1bi5hcHBseSh0
aGlzLGFyZ3VtZW50cykKLXZhciBlLHQscj1hcmd1bWVudHMubGVuZ3RoLGk9dm9pZCAwLG89dm9p
ZCAwCi1pZigxPT09cj8oaT1hcmd1bWVudHNbMF0sbz1udWxsKToobz1hcmd1bWVudHNbMF0saT1h
cmd1bWVudHNbMV0pLG4oaSkmJihpPW9baV0pLDE9PT1yKXJldHVybiBpKCkKLWlmKDI9PT1yKXJl
dHVybiBpLmNhbGwobykKLWZvcihlPW5ldyBBcnJheShyLTIpLHQ9MDt0PHItMjt0KyspZVt0XT1h
cmd1bWVudHNbdCsyXQotcmV0dXJuIGkuYXBwbHkobyxlKX0sZS5wcm90b3R5cGUuZGVmZXI9ZnVu
Y3Rpb24oZSl7dmFyIHQscj1hcmd1bWVudHMubGVuZ3RoLGk9dm9pZCAwLG89dm9pZCAwLHM9dm9p
ZCAwCi0yPT09cj8oaT1hcmd1bWVudHNbMV0sbz1udWxsKToobz1hcmd1bWVudHNbMV0saT1hcmd1
bWVudHNbMl0pLG4oaSkmJihpPW9baV0pCi12YXIgYT10aGlzLkRFQlVHP25ldyBFcnJvcjp2b2lk
IDAKLWlmKHI+Mylmb3Iocz1uZXcgQXJyYXkoci0zKSx0PTM7dDxyO3QrKylzW3QtM109YXJndW1l
bnRzW3RdCi1lbHNlIHM9dm9pZCAwCi1yZXR1cm4gdGhpcy5fZW5zdXJlSW5zdGFuY2UoKS5zY2hl
ZHVsZShlLG8saSxzLCExLGEpfSxlLnByb3RvdHlwZS5kZWZlck9uY2U9ZnVuY3Rpb24oZSl7dmFy
IHQscj1hcmd1bWVudHMubGVuZ3RoLGk9dm9pZCAwLG89dm9pZCAwLHM9dm9pZCAwCi0yPT09cj8o
aT1hcmd1bWVudHNbMV0sbz1udWxsKToobz1hcmd1bWVudHNbMV0saT1hcmd1bWVudHNbMl0pLG4o
aSkmJihpPW9baV0pCi12YXIgYT10aGlzLkRFQlVHP25ldyBFcnJvcjp2b2lkIDAKLWlmKHI+Mylm
b3Iocz1uZXcgQXJyYXkoci0zKSx0PTM7dDxyO3QrKylzW3QtM109YXJndW1lbnRzW3RdCi1lbHNl
IHM9dm9pZCAwCi1yZXR1cm4gdGhpcy5fZW5zdXJlSW5zdGFuY2UoKS5zY2hlZHVsZShlLG8saSxz
LCEwLGEpfSxlLnByb3RvdHlwZS5zZXRUaW1lb3V0PWZ1bmN0aW9uKCl7dmFyIGUsdCxpPWFyZ3Vt
ZW50cy5sZW5ndGgscz1uZXcgQXJyYXkoaSkKLWZvcihlPTA7ZTxpO2UrKylzW2VdPWFyZ3VtZW50
c1tlXQotdmFyIGE9cy5sZW5ndGgsbD12b2lkIDAsYz12b2lkIDAscD12b2lkIDAsZj12b2lkIDAs
aD12b2lkIDAsbT12b2lkIDAKLWlmKDAhPT1hKXsxPT09YT8obD1zLnNoaWZ0KCksYz0wKToyPT09
YT8oZj1zWzBdLGg9c1sxXSxyKGgpfHxyKGZbaF0pPyhwPXMuc2hpZnQoKSxsPXMuc2hpZnQoKSxj
PTApOm8oaCk/KGw9cy5zaGlmdCgpLGM9cy5zaGlmdCgpKToobD1zLnNoaWZ0KCksYz0wKSk6KHQ9
c1tzLmxlbmd0aC0xXSxjPW8odCk/cy5wb3AoKTowLGY9c1swXSxtPXNbMV0scihtKXx8bihtKSYm
bnVsbCE9PWYmJm0gaW4gZj8ocD1zLnNoaWZ0KCksbD1zLnNoaWZ0KCkpOmw9cy5zaGlmdCgpKQot
dmFyIGc9ZCgpK3BhcnNlSW50KGMhPT1jPzA6YywxMCkKLW4obCkmJihsPXBbbF0pCi12YXIgeT11
KHRoaXMub3B0aW9ucykKLXJldHVybiB0aGlzLl9zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aWYoeSl0
cnl7bC5hcHBseShwLHMpfWNhdGNoKGUpe3koZSl9ZWxzZSBsLmFwcGx5KHAscyl9LGcpfX0sZS5w
cm90b3R5cGUudGhyb3R0bGU9ZnVuY3Rpb24oZSx0KXt2YXIgcixvPXRoaXMscz1uZXcgQXJyYXko
YXJndW1lbnRzLmxlbmd0aCkKLWZvcihyPTA7cjxhcmd1bWVudHMubGVuZ3RoO3IrKylzW3JdPWFy
Z3VtZW50c1tyXQotdmFyIGE9cy5wb3AoKSx1PXZvaWQgMCxsPXZvaWQgMCxwPXZvaWQgMCxmPXZv
aWQgMAotcmV0dXJuIGkoYSl8fG4oYSk/KHU9YSxhPSEwKTp1PXMucG9wKCksdT1wYXJzZUludCh1
LDEwKSwocD1jKGUsdCx0aGlzLl90aHJvdHRsZXJzKSk+LTE/dGhpcy5fdGhyb3R0bGVyc1twXToo
Zj10aGlzLl9wbGF0Zm9ybS5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7YXx8by5ydW4uYXBwbHkobyxz
KSwocD1jKGUsdCxvLl90aHJvdHRsZXJzKSk+LTEmJm8uX3Rocm90dGxlcnMuc3BsaWNlKHAsMSl9
LHUpLGEmJnRoaXMuam9pbi5hcHBseSh0aGlzLHMpLGw9W2UsdCxmXSx0aGlzLl90aHJvdHRsZXJz
LnB1c2gobCksbCl9LGUucHJvdG90eXBlLmRlYm91bmNlPWZ1bmN0aW9uKGUsdCl7dmFyIHIsbz10
aGlzLHM9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpCi1mb3Iocj0wO3I8YXJndW1lbnRzLmxl
bmd0aDtyKyspc1tyXT1hcmd1bWVudHNbcl0KLXZhciBhPXMucG9wKCksdT12b2lkIDAsYz12b2lk
IDAscD12b2lkIDAsZj12b2lkIDAKLXJldHVybiBpKGEpfHxuKGEpPyh1PWEsYT0hMSk6dT1zLnBv
cCgpLHU9cGFyc2VJbnQodSwxMCksYz1sKGUsdCx0aGlzLl9kZWJvdW5jZWVzKSxjPi0xJiYocD10
aGlzLl9kZWJvdW5jZWVzW2NdLHRoaXMuX2RlYm91bmNlZXMuc3BsaWNlKGMsMSksdGhpcy5fcGxh
dGZvcm0uY2xlYXJUaW1lb3V0KHBbMl0pKSxmPXRoaXMuX3BsYXRmb3JtLnNldFRpbWVvdXQoZnVu
Y3Rpb24oKXthfHxvLnJ1bi5hcHBseShvLHMpLChjPWwoZSx0LG8uX2RlYm91bmNlZXMpKT4tMSYm
by5fZGVib3VuY2Vlcy5zcGxpY2UoYywxKX0sdSksYSYmLTE9PT1jJiZvLnJ1bi5hcHBseShvLHMp
LHA9W2UsdCxmXSxvLl9kZWJvdW5jZWVzLnB1c2gocCkscH0sZS5wcm90b3R5cGUuY2FuY2VsVGlt
ZXJzPWZ1bmN0aW9uKCl7dCh0aGlzLl90aHJvdHRsZXJzLHRoaXMuX2JvdW5kQ2xlYXJJdGVtcyks
dGhpcy5fdGhyb3R0bGVycz1bXSx0KHRoaXMuX2RlYm91bmNlZXMsdGhpcy5fYm91bmRDbGVhckl0
ZW1zKSx0aGlzLl9kZWJvdW5jZWVzPVtdLHRoaXMuX2NsZWFyVGltZXJUaW1lb3V0KCksdGhpcy5f
dGltZXJzPVtdLHRoaXMuX2F1dG9ydW4mJih0aGlzLl9wbGF0Zm9ybS5jbGVhclRpbWVvdXQodGhp
cy5fYXV0b3J1biksdGhpcy5fYXV0b3J1bj1udWxsKX0sZS5wcm90b3R5cGUuaGFzVGltZXJzPWZ1
bmN0aW9uKCl7cmV0dXJuISF0aGlzLl90aW1lcnMubGVuZ3RofHwhIXRoaXMuX2RlYm91bmNlZXMu
bGVuZ3RofHwhIXRoaXMuX3Rocm90dGxlcnMubGVuZ3RofHx0aGlzLl9hdXRvcnVufSxlLnByb3Rv
dHlwZS5jYW5jZWw9ZnVuY3Rpb24oZSl7dmFyIHQsbixyPXR5cGVvZiBlCi1pZihlJiYib2JqZWN0
Ij09PXImJmUucXVldWUmJmUubWV0aG9kKXJldHVybiBlLnF1ZXVlLmNhbmNlbChlKQotaWYoImZ1
bmN0aW9uIj09PXIpe2Zvcih0PTAsbj10aGlzLl90aW1lcnMubGVuZ3RoO3Q8bjt0Kz0yKWlmKHRo
aXMuX3RpbWVyc1t0KzFdPT09ZSlyZXR1cm4gdGhpcy5fdGltZXJzLnNwbGljZSh0LDIpLDA9PT10
JiZ0aGlzLl9yZWluc3RhbGxUaW1lclRpbWVvdXQoKSwhMH1lbHNlIGlmKCJbb2JqZWN0IEFycmF5
XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkpcmV0dXJuIHRoaXMuX2NhbmNl
bEl0ZW0oYyx0aGlzLl90aHJvdHRsZXJzLGUpfHx0aGlzLl9jYW5jZWxJdGVtKGwsdGhpcy5fZGVi
b3VuY2VlcyxlKX0sZS5wcm90b3R5cGUuX3NldFRpbWVvdXQ9ZnVuY3Rpb24oZSx0KXtpZigwPT09
dGhpcy5fdGltZXJzLmxlbmd0aClyZXR1cm4gdGhpcy5fdGltZXJzLnB1c2godCxlKSx0aGlzLl9p
bnN0YWxsVGltZXJUaW1lb3V0KCksZQotdmFyIG49Zih0LHRoaXMuX3RpbWVycykKLXJldHVybiB0
aGlzLl90aW1lcnMuc3BsaWNlKG4sMCx0LGUpLDA9PT1uJiZ0aGlzLl9yZWluc3RhbGxUaW1lclRp
bWVvdXQoKSxlfSxlLnByb3RvdHlwZS5fY2FuY2VsSXRlbT1mdW5jdGlvbihlLHQsbil7dmFyIHI9
dm9pZCAwLGk9dm9pZCAwCi1yZXR1cm4hKG4ubGVuZ3RoPDMpJiYoKGk9ZShuWzBdLG5bMV0sdCkp
Pi0xJiYocj10W2ldLHJbMl09PT1uWzJdKSYmKHQuc3BsaWNlKGksMSksdGhpcy5fcGxhdGZvcm0u
Y2xlYXJUaW1lb3V0KG5bMl0pLCEwKSl9LGUucHJvdG90eXBlLl90cmlnZ2VyPWZ1bmN0aW9uKGUs
dCxuKXt2YXIgcixpPXRoaXMuX2V2ZW50Q2FsbGJhY2tzW2VdCi1pZihpKWZvcihyPTA7cjxpLmxl
bmd0aDtyKyspaVtyXSh0LG4pfSxlLnByb3RvdHlwZS5fcnVuRXhwaXJlZFRpbWVycz1mdW5jdGlv
bigpe3RoaXMuX3RpbWVyVGltZW91dElkPXZvaWQgMCx0aGlzLnJ1bih0aGlzLHRoaXMuX3NjaGVk
dWxlRXhwaXJlZFRpbWVycyl9LGUucHJvdG90eXBlLl9zY2hlZHVsZUV4cGlyZWRUaW1lcnM9ZnVu
Y3Rpb24oKXtmb3IodmFyIGUsdCxuPWQoKSxyPXRoaXMuX3RpbWVycyxpPTAsbz1yLmxlbmd0aDtp
PG8mJihlPXJbaV0sdD1yW2krMV0sZTw9bik7aSs9Mil0aGlzLmRlZmVyKHRoaXMub3B0aW9ucy5k
ZWZhdWx0UXVldWUsbnVsbCx0KQotci5zcGxpY2UoMCxpKSx0aGlzLl9pbnN0YWxsVGltZXJUaW1l
b3V0KCl9LGUucHJvdG90eXBlLl9yZWluc3RhbGxUaW1lclRpbWVvdXQ9ZnVuY3Rpb24oKXt0aGlz
Ll9jbGVhclRpbWVyVGltZW91dCgpLHRoaXMuX2luc3RhbGxUaW1lclRpbWVvdXQoKX0sZS5wcm90
b3R5cGUuX2NsZWFyVGltZXJUaW1lb3V0PWZ1bmN0aW9uKCl7dGhpcy5fdGltZXJUaW1lb3V0SWQm
Jih0aGlzLl9wbGF0Zm9ybS5jbGVhclRpbWVvdXQodGhpcy5fdGltZXJUaW1lb3V0SWQpLHRoaXMu
X3RpbWVyVGltZW91dElkPXZvaWQgMCl9LGUucHJvdG90eXBlLl9pbnN0YWxsVGltZXJUaW1lb3V0
PWZ1bmN0aW9uKCl7aWYodGhpcy5fdGltZXJzLmxlbmd0aCl7dmFyIGU9dGhpcy5fdGltZXJzWzBd
LHQ9ZCgpLG49TWF0aC5tYXgoMCxlLXQpCi10aGlzLl90aW1lclRpbWVvdXRJZD10aGlzLl9wbGF0
Zm9ybS5zZXRUaW1lb3V0KHRoaXMuX2JvdW5kUnVuRXhwaXJlZFRpbWVycyxuKX19LGUucHJvdG90
eXBlLl9lbnN1cmVJbnN0YW5jZT1mdW5jdGlvbigpe3ZhciBlLHQ9dGhpcy5jdXJyZW50SW5zdGFu
Y2UKLXJldHVybiB0fHwoZT10aGlzLl9wbGF0Zm9ybS5zZXRUaW1lb3V0LHQ9dGhpcy5iZWdpbigp
LHRoaXMuX2F1dG9ydW49ZSh0aGlzLl9ib3VuZEF1dG9ydW5FbmQsMCkpLHR9LGV9KCkKLXkuUXVl
dWU9bSx5LnByb3RvdHlwZS5zY2hlZHVsZT15LnByb3RvdHlwZS5kZWZlcix5LnByb3RvdHlwZS5z
Y2hlZHVsZU9uY2U9eS5wcm90b3R5cGUuZGVmZXJPbmNlLHkucHJvdG90eXBlLmxhdGVyPXkucHJv
dG90eXBlLnNldFRpbWVvdXQsZS5kZWZhdWx0PXl9KSxlKCJjb250YWluZXIiLFsiZXhwb3J0cyIs
ImVtYmVyLXV0aWxzIiwiZW1iZXItZGVidWciLCJlbWJlci1lbnZpcm9ubWVudCJdLGZ1bmN0aW9u
KGUsdCxuLHIpeyJ1c2Ugc3RyaWN0IgotZnVuY3Rpb24gaShlLG4pe3RoaXMucmVnaXN0cnk9ZSx0
aGlzLm93bmVyPW4mJm4ub3duZXI/bi5vd25lcjpudWxsLHRoaXMuY2FjaGU9KDAsdC5kaWN0aW9u
YXJ5KShuJiZuLmNhY2hlP24uY2FjaGU6bnVsbCksdGhpcy5mYWN0b3J5Q2FjaGU9KDAsdC5kaWN0
aW9uYXJ5KShuJiZuLmZhY3RvcnlDYWNoZT9uLmZhY3RvcnlDYWNoZTpudWxsKSx0aGlzLmZhY3Rv
cnlNYW5hZ2VyQ2FjaGU9KDAsdC5kaWN0aW9uYXJ5KShuJiZuLmZhY3RvcnlNYW5hZ2VyQ2FjaGU/
bi5mYWN0b3J5TWFuYWdlckNhY2hlOm51bGwpLHRoaXMudmFsaWRhdGlvbkNhY2hlPSgwLHQuZGlj
dGlvbmFyeSkobiYmbi52YWxpZGF0aW9uQ2FjaGU/bi52YWxpZGF0aW9uQ2FjaGU6bnVsbCksdGhp
cy5fZmFrZUNvbnRhaW5lclRvSW5qZWN0PXgodGhpcyksdGhpc1trXT12b2lkIDAsdGhpcy5pc0Rl
c3Ryb3llZD0hMX1mdW5jdGlvbiBvKGUsdCl7cmV0dXJuITEhPT1lLnJlZ2lzdHJ5LmdldE9wdGlv
bih0LCJzaW5nbGV0b24iKX1mdW5jdGlvbiBzKGUsdCl7cmV0dXJuITEhPT1lLnJlZ2lzdHJ5Lmdl
dE9wdGlvbih0LCJpbnN0YW50aWF0ZSIpfWZ1bmN0aW9uIGEoZSx0KXt2YXIgbj1hcmd1bWVudHMu
bGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06e30KLWlmKCFuLnNv
dXJjZXx8KHQ9ZS5yZWdpc3RyeS5leHBhbmRMb2NhbExvb2t1cCh0LG4pKSlyZXR1cm4gdm9pZCAw
IT09ZS5jYWNoZVt0XSYmITEhPT1uLnNpbmdsZXRvbj9lLmNhY2hlW3RdOmYoZSx0LG4pfWZ1bmN0
aW9uIHUoZSx0LG4pe3ZhciByPW4uaW5zdGFudGlhdGUKLXJldHVybiExIT09bi5zaW5nbGV0b24m
Jm8oZSx0KSYmIXImJiFzKGUsdCl9ZnVuY3Rpb24gbChlLHQsbil7dmFyIHI9bi5pbnN0YW50aWF0
ZQotcmV0dXJuITEhPT1uLnNpbmdsZXRvbiYmbyhlLHQpJiYhMSE9PXImJnMoZSx0KX1mdW5jdGlv
biBjKGUsdCxuKXt2YXIgcj1uLmluc3RhbnRpYXRlCi1yZXR1cm4hKCExIT09bi5zaW5nbGV0b24m
Jm8oZSx0KXx8ITEhPT1yfHxzKGUsdCkpfWZ1bmN0aW9uIHAoZSx0LG4pe3ZhciByPW4uaW5zdGFu
dGlhdGUKLXJldHVybighMSE9PW4uc2luZ2xldG9ufHxvKGUsdCkpJiYhMSE9PXImJnMoZSx0KX1m
dW5jdGlvbiBmKGUsdCxuKXt2YXIgcj1lLmZhY3RvcnlGb3IodCkKLWlmKHZvaWQgMCE9PXIpe2lm
KGwoZSx0LG4pKXJldHVybiBlLmNhY2hlW3RdPXIuY3JlYXRlKCkKLWlmKHAoZSx0LG4pKXJldHVy
biByLmNyZWF0ZSgpCi1pZih1KGUsdCxuKXx8YyhlLHQsbikpcmV0dXJuIHIuY2xhc3MKLXRocm93
IG5ldyBFcnJvcigiQ291bGQgbm90IGNyZWF0ZSBmYWN0b3J5Iil9fWZ1bmN0aW9uIGgoZSl7ZS5f
ZHluYW1pYz0hMH1mdW5jdGlvbiBkKGUpe3JldHVybiEhZS5fZHluYW1pY31mdW5jdGlvbiBtKCl7
dmFyIGUsdCxuLHIsaSxzLHU9e30KLWlmKGFyZ3VtZW50cy5sZW5ndGg+MSl7Zm9yKGU9YXJndW1l
bnRzWzBdLHQ9W10sbj12b2lkIDAscj0xO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspYXJndW1lbnRz
W3JdJiYodD10LmNvbmNhdChhcmd1bWVudHNbcl0pKQotZm9yKGk9ITEscz0wO3M8dC5sZW5ndGg7
cysrKW49dFtzXSx1W24ucHJvcGVydHldPWEoZSxuLmZ1bGxOYW1lKSxpfHwoaT0hbyhlLG4uZnVs
bE5hbWUpKQotaSYmaCh1KX1yZXR1cm4gdX1mdW5jdGlvbiBnKGUsbil7dmFyIGksbyxzLGEsdT1h
cmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06e30s
bD1lLnJlZ2lzdHJ5Ci1pZighdS5zb3VyY2V8fChuPWwuZXhwYW5kTG9jYWxMb29rdXAobix1KSkp
e3ZhciBjPWUuZmFjdG9yeUNhY2hlCi1pZihjW25dKXJldHVybiBjW25dCi12YXIgcD1sLnJlc29s
dmUobikKLWlmKHZvaWQgMCE9PXApe3ZhciBmPW4uc3BsaXQoIjoiKVswXQotcmV0dXJuIXB8fCJm
dW5jdGlvbiIhPXR5cGVvZiBwLmV4dGVuZHx8IXIuRU5WLk1PREVMX0ZBQ1RPUllfSU5KRUNUSU9O
UyYmIm1vZGVsIj09PWY/KHAmJiJmdW5jdGlvbiI9PXR5cGVvZiBwLl9vbkxvb2t1cCYmcC5fb25M
b29rdXAobiksY1tuXT1wLHApOihpPXkoZSxuKSxvPXYoZSxuKSxzPSFkKGkpJiYhZChvKSxvW3Qu
TkFNRV9LRVldPWwubWFrZVRvU3RyaW5nKHAsbiksaS5fZGVidWdDb250YWluZXJLZXk9biwoMCx0
LnNldE93bmVyKShpLGUub3duZXIpLGE9cC5leHRlbmQoaSksYihhLnByb3RvdHlwZSksYS5yZW9w
ZW5DbGFzcyhvKSxwJiYiZnVuY3Rpb24iPT10eXBlb2YgcC5fb25Mb29rdXAmJnAuX29uTG9va3Vw
KG4pLHMmJihjW25dPWEpLGEpfX19ZnVuY3Rpb24geShlLHQpe3ZhciBuPWUucmVnaXN0cnkscj10
LnNwbGl0KCI6IiksaT1yWzBdCi1yZXR1cm4gbShlLG4uZ2V0VHlwZUluamVjdGlvbnMoaSksbi5n
ZXRJbmplY3Rpb25zKHQpKX1mdW5jdGlvbiB2KGUsdCl7dmFyIG49ZS5yZWdpc3RyeSxyPXQuc3Bs
aXQoIjoiKSxpPXJbMF0sbz1tKGUsbi5nZXRGYWN0b3J5VHlwZUluamVjdGlvbnMoaSksbi5nZXRG
YWN0b3J5SW5qZWN0aW9ucyh0KSkKLXJldHVybiBvLl9kZWJ1Z0NvbnRhaW5lcktleT10LG99ZnVu
Y3Rpb24gYihlKXsiY29udGFpbmVyImluIGV8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJjb250
YWluZXIiLE4pfWZ1bmN0aW9uIF8oZSl7dmFyIHQsbixyLGk9ZS5jYWNoZSxvPU9iamVjdC5rZXlz
KGkpCi1mb3IodD0wO3Q8by5sZW5ndGg7dCsrKW49b1t0XSxyPWlbbl0scyhlLG4pJiZyLmRlc3Ry
b3kmJnIuZGVzdHJveSgpfWZ1bmN0aW9uIHcoZSl7XyhlKSxlLmNhY2hlLmRpY3Q9KDAsdC5kaWN0
aW9uYXJ5KShudWxsKX1mdW5jdGlvbiBFKGUsdCl7dmFyIG49ZS5jYWNoZVt0XQotZGVsZXRlIGUu
ZmFjdG9yeUNhY2hlW3RdLG4mJihkZWxldGUgZS5jYWNoZVt0XSxuLmRlc3Ryb3kmJm4uZGVzdHJv
eSgpKX1mdW5jdGlvbiB4KGUpe3ZhciB0PXt9LG49e2xvb2t1cDoibG9va3VwIixsb29rdXBGYWN0
b3J5OiJfbG9va3VwRmFjdG9yeSJ9Ci1mb3IodmFyIHIgaW4gbil0W3JdPUMoZSxyLG5bcl0pCi1y
ZXR1cm4gdH1mdW5jdGlvbiBDKGUsdCxuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZVt0XS5h
cHBseShlLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIE8oZSl7dGhpcy5mYWxsYmFjaz1lJiZlLmZhbGxi
YWNrP2UuZmFsbGJhY2s6bnVsbCxlJiZlLnJlc29sdmVyJiYodGhpcy5yZXNvbHZlcj1lLnJlc29s
dmVyLCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnJlc29sdmVyJiZBKHRoaXMpKSx0aGlzLnJlZ2lz
dHJhdGlvbnM9KDAsdC5kaWN0aW9uYXJ5KShlJiZlLnJlZ2lzdHJhdGlvbnM/ZS5yZWdpc3RyYXRp
b25zOm51bGwpLHRoaXMuX3R5cGVJbmplY3Rpb25zPSgwLHQuZGljdGlvbmFyeSkobnVsbCksdGhp
cy5faW5qZWN0aW9ucz0oMCx0LmRpY3Rpb25hcnkpKG51bGwpLHRoaXMuX2ZhY3RvcnlUeXBlSW5q
ZWN0aW9ucz0oMCx0LmRpY3Rpb25hcnkpKG51bGwpLHRoaXMuX2ZhY3RvcnlJbmplY3Rpb25zPSgw
LHQuZGljdGlvbmFyeSkobnVsbCksdGhpcy5fbG9jYWxMb29rdXBDYWNoZT1PYmplY3QuY3JlYXRl
KG51bGwpLHRoaXMuX25vcm1hbGl6ZUNhY2hlPSgwLHQuZGljdGlvbmFyeSkobnVsbCksdGhpcy5f
cmVzb2x2ZUNhY2hlPSgwLHQuZGljdGlvbmFyeSkobnVsbCksdGhpcy5fZmFpbENhY2hlPSgwLHQu
ZGljdGlvbmFyeSkobnVsbCksdGhpcy5fb3B0aW9ucz0oMCx0LmRpY3Rpb25hcnkpKG51bGwpLHRo
aXMuX3R5cGVPcHRpb25zPSgwLHQuZGljdGlvbmFyeSkobnVsbCl9ZnVuY3Rpb24gQShlKXtlLnJl
c29sdmVyPXtyZXNvbHZlOmUucmVzb2x2ZXJ9fWZ1bmN0aW9uIFQoZSx0LG4pe3ZhciByPWUuX2xv
Y2FsTG9va3VwQ2FjaGUsaT1yW3RdCi1pfHwoaT1yW3RdPU9iamVjdC5jcmVhdGUobnVsbCkpCi12
YXIgbz1pW25dCi1pZih2b2lkIDAhPT1vKXJldHVybiBvCi12YXIgcz1lLnJlc29sdmVyLmV4cGFu
ZExvY2FsTG9va3VwKHQsbikKLXJldHVybiBpW25dPXN9ZnVuY3Rpb24gUyhlLHQsbil7aWYoIW58
fCFuLnNvdXJjZXx8KHQ9ZS5leHBhbmRMb2NhbExvb2t1cCh0LG4pKSl7dmFyIHI9ZS5fcmVzb2x2
ZUNhY2hlW3RdCi1pZih2b2lkIDAhPT1yKXJldHVybiByCi1pZighZS5fZmFpbENhY2hlW3RdKXt2
YXIgaT12b2lkIDAKLXJldHVybiBlLnJlc29sdmVyJiYoaT1lLnJlc29sdmVyLnJlc29sdmUodCkp
LHZvaWQgMD09PWkmJihpPWUucmVnaXN0cmF0aW9uc1t0XSksdm9pZCAwPT09aT9lLl9mYWlsQ2Fj
aGVbdF09ITA6ZS5fcmVzb2x2ZUNhY2hlW3RdPWksaX19fWZ1bmN0aW9uIFIoZSx0LG4pe3JldHVy
biB2b2lkIDAhPT1lLnJlc29sdmUodCx7c291cmNlOm59KX1lLmJ1aWxkRmFrZUNvbnRhaW5lcldp
dGhEZXByZWNhdGlvbnM9ZS5Db250YWluZXI9ZS5wcml2YXRpemU9ZS5SZWdpc3RyeT12b2lkIDAK
LXZhciBrPSgwLHQuc3ltYm9sKSgiQ09OVEFJTkVSX09WRVJSSURFIikKLWkucHJvdG90eXBlPXts
b29rdXA6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYSh0aGlzLHRoaXMucmVnaXN0cnkubm9ybWFsaXpl
KGUpLHQpfSxsb29rdXBGYWN0b3J5OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGcodGhpcyx0aGlzLnJl
Z2lzdHJ5Lm5vcm1hbGl6ZShlKSx0KX0sZGVzdHJveTpmdW5jdGlvbigpe18odGhpcyksdGhpcy5p
c0Rlc3Ryb3llZD0hMH0scmVzZXQ6ZnVuY3Rpb24oZSl7YXJndW1lbnRzLmxlbmd0aD4wP0UodGhp
cyx0aGlzLnJlZ2lzdHJ5Lm5vcm1hbGl6ZShlKSk6dyh0aGlzKX0sb3duZXJJbmplY3Rpb246ZnVu
Y3Rpb24oKXt2YXIgZQotcmV0dXJuIGU9e30sZVt0Lk9XTkVSXT10aGlzLm93bmVyLGV9LGZhY3Rv
cnlGb3I6ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1
bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9LG49dGhpcy5yZWdpc3RyeS5ub3JtYWxpemUoZSkKLWlm
KCF0LnNvdXJjZXx8KG49dGhpcy5yZWdpc3RyeS5leHBhbmRMb2NhbExvb2t1cChlLHQpKSl7dmFy
IHI9dGhpcy5mYWN0b3J5TWFuYWdlckNhY2hlW25dCi1pZihyKXJldHVybiByCi12YXIgaT10aGlz
LnJlZ2lzdHJ5LnJlc29sdmUobikKLWlmKHZvaWQgMCE9PWkpe3ZhciBvPW5ldyBQKHRoaXMsaSxl
LG4pCi1yZXR1cm4gdGhpcy5mYWN0b3J5TWFuYWdlckNhY2hlW25dPW8sb319fX0KLXZhciBOPXtj
b25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tr
XXx8KDAsdC5nZXRPd25lcikodGhpcykuX19jb250YWluZXJfX30sc2V0OmZ1bmN0aW9uKGUpe3Jl
dHVybiB0aGlzW2tdPWUsZX19LFA9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuLHIpe3RoaXMu
Y29udGFpbmVyPWUsdGhpcy5vd25lcj1lLm93bmVyLHRoaXMuY2xhc3M9dCx0aGlzLmZ1bGxOYW1l
PW4sdGhpcy5ub3JtYWxpemVkTmFtZT1yLHRoaXMubWFkZVRvU3RyaW5nPXZvaWQgMCx0aGlzLmlu
amVjdGlvbnM9dm9pZCAwfXJldHVybiBlLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3Jl
dHVybiB0aGlzLm1hZGVUb1N0cmluZ3x8KHRoaXMubWFkZVRvU3RyaW5nPXRoaXMuY29udGFpbmVy
LnJlZ2lzdHJ5Lm1ha2VUb1N0cmluZyh0aGlzLmNsYXNzLHRoaXMuZnVsbE5hbWUpKSx0aGlzLm1h
ZGVUb1N0cmluZ30sZS5wcm90b3R5cGUuY3JlYXRlPWZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRz
Lmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LG49dGhpcy5p
bmplY3Rpb25zCi12b2lkIDA9PT1uJiYobj15KHRoaXMuY29udGFpbmVyLHRoaXMubm9ybWFsaXpl
ZE5hbWUpLCExPT09ZChuKSYmKHRoaXMuaW5qZWN0aW9ucz1uKSkKLXZhciByPSgwLHQuYXNzaWdu
KSh7fSxuLGUpCi1pZighdGhpcy5jbGFzcy5jcmVhdGUpdGhyb3cgbmV3IEVycm9yKCJGYWlsZWQg
dG8gY3JlYXRlIGFuIGluc3RhbmNlIG9mICciK3RoaXMubm9ybWFsaXplZE5hbWUrIicuIE1vc3Qg
bGlrZWx5IGFuIGltcHJvcGVybHkgZGVmaW5lZCBjbGFzcyBvciBhbiBpbnZhbGlkIG1vZHVsZSBl
eHBvcnQuIikKLXZhciBpPXRoaXMuY2xhc3MucHJvdG90eXBlCi1yZXR1cm4gaSYmYihpLHRoaXMu
Y29udGFpbmVyKSwiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5jbGFzcy5faW5pdEZhY3Rvcnk/dGhp
cy5jbGFzcy5faW5pdEZhY3RvcnkodGhpcyk6KDAsdC5zZXRPd25lcikocix0aGlzLm93bmVyKSx0
aGlzLmNsYXNzLmNyZWF0ZShyKX0sZX0oKSxqPS9eW146XSs6W146XSskLwotTy5wcm90b3R5cGU9
e2ZhbGxiYWNrOm51bGwscmVzb2x2ZXI6bnVsbCxyZWdpc3RyYXRpb25zOm51bGwsX3R5cGVJbmpl
Y3Rpb25zOm51bGwsX2luamVjdGlvbnM6bnVsbCxfZmFjdG9yeVR5cGVJbmplY3Rpb25zOm51bGws
X2ZhY3RvcnlJbmplY3Rpb25zOm51bGwsX25vcm1hbGl6ZUNhY2hlOm51bGwsX3Jlc29sdmVDYWNo
ZTpudWxsLF9vcHRpb25zOm51bGwsX3R5cGVPcHRpb25zOm51bGwsY29udGFpbmVyOmZ1bmN0aW9u
KGUpe3JldHVybiBuZXcgaSh0aGlzLGUpfSxyZWdpc3RlcjpmdW5jdGlvbihlLHQpe3ZhciBuPWFy
Z3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp7fQot
aWYodm9pZCAwPT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJBdHRlbXB0aW5nIHRvIHJlZ2lzdGVy
IGFuIHVua25vd24gZmFjdG9yeTogJyIrZSsiJyIpCi12YXIgcj10aGlzLm5vcm1hbGl6ZShlKQot
aWYodGhpcy5fcmVzb2x2ZUNhY2hlW3JdKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHJlLXJlZ2lz
dGVyOiAnIitlKyInLCBhcyBpdCBoYXMgYWxyZWFkeSBiZWVuIHJlc29sdmVkLiIpCi1kZWxldGUg
dGhpcy5fZmFpbENhY2hlW3JdLHRoaXMucmVnaXN0cmF0aW9uc1tyXT10LHRoaXMuX29wdGlvbnNb
cl09bn0sdW5yZWdpc3RlcjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLm5vcm1hbGl6ZShlKQotdGhp
cy5fbG9jYWxMb29rdXBDYWNoZT1PYmplY3QuY3JlYXRlKG51bGwpLGRlbGV0ZSB0aGlzLnJlZ2lz
dHJhdGlvbnNbdF0sZGVsZXRlIHRoaXMuX3Jlc29sdmVDYWNoZVt0XSxkZWxldGUgdGhpcy5fZmFp
bENhY2hlW3RdLGRlbGV0ZSB0aGlzLl9vcHRpb25zW3RdfSxyZXNvbHZlOmZ1bmN0aW9uKGUsdCl7
dmFyIG4scj1TKHRoaXMsdGhpcy5ub3JtYWxpemUoZSksdCkKLXJldHVybiB2b2lkIDA9PT1yJiZ0
aGlzLmZhbGxiYWNrJiYocj0obj10aGlzLmZhbGxiYWNrKS5yZXNvbHZlLmFwcGx5KG4sYXJndW1l
bnRzKSkscn0sZGVzY3JpYmU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucmVzb2x2ZXImJnRoaXMu
cmVzb2x2ZXIubG9va3VwRGVzY3JpcHRpb24/dGhpcy5yZXNvbHZlci5sb29rdXBEZXNjcmlwdGlv
bihlKTp0aGlzLmZhbGxiYWNrP3RoaXMuZmFsbGJhY2suZGVzY3JpYmUoZSk6ZX0sbm9ybWFsaXpl
RnVsbE5hbWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucmVzb2x2ZXImJnRoaXMucmVzb2x2ZXIu
bm9ybWFsaXplP3RoaXMucmVzb2x2ZXIubm9ybWFsaXplKGUpOnRoaXMuZmFsbGJhY2s/dGhpcy5m
YWxsYmFjay5ub3JtYWxpemVGdWxsTmFtZShlKTplfSxub3JtYWxpemU6ZnVuY3Rpb24oZSl7cmV0
dXJuIHRoaXMuX25vcm1hbGl6ZUNhY2hlW2VdfHwodGhpcy5fbm9ybWFsaXplQ2FjaGVbZV09dGhp
cy5ub3JtYWxpemVGdWxsTmFtZShlKSl9LG1ha2VUb1N0cmluZzpmdW5jdGlvbihlLHQpe3JldHVy
biB0aGlzLnJlc29sdmVyJiZ0aGlzLnJlc29sdmVyLm1ha2VUb1N0cmluZz90aGlzLnJlc29sdmVy
Lm1ha2VUb1N0cmluZyhlLHQpOnRoaXMuZmFsbGJhY2s/dGhpcy5mYWxsYmFjay5tYWtlVG9TdHJp
bmcoZSx0KTplLnRvU3RyaW5nKCl9LGhhczpmdW5jdGlvbihlLHQpe2lmKCF0aGlzLmlzVmFsaWRG
dWxsTmFtZShlKSlyZXR1cm4hMQotdmFyIG49dCYmdC5zb3VyY2UmJnRoaXMubm9ybWFsaXplKHQu
c291cmNlKQotcmV0dXJuIFIodGhpcyx0aGlzLm5vcm1hbGl6ZShlKSxuKX0sb3B0aW9uc0ZvclR5
cGU6ZnVuY3Rpb24oZSx0KXt0aGlzLl90eXBlT3B0aW9uc1tlXT10fSxnZXRPcHRpb25zRm9yVHlw
ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl90eXBlT3B0aW9uc1tlXQotcmV0dXJuIHZvaWQgMD09
PXQmJnRoaXMuZmFsbGJhY2smJih0PXRoaXMuZmFsbGJhY2suZ2V0T3B0aW9uc0ZvclR5cGUoZSkp
LHR9LG9wdGlvbnM6ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAh
PT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9LG49dGhpcy5ub3JtYWxpemUoZSkKLXRoaXMu
X29wdGlvbnNbbl09dH0sZ2V0T3B0aW9uczpmdW5jdGlvbihlKXt2YXIgdD10aGlzLm5vcm1hbGl6
ZShlKSxuPXRoaXMuX29wdGlvbnNbdF0KLXJldHVybiB2b2lkIDA9PT1uJiZ0aGlzLmZhbGxiYWNr
JiYobj10aGlzLmZhbGxiYWNrLmdldE9wdGlvbnMoZSkpLG59LGdldE9wdGlvbjpmdW5jdGlvbihl
LHQpe3ZhciBuPXRoaXMuX29wdGlvbnNbZV0KLWlmKG4mJnZvaWQgMCE9PW5bdF0pcmV0dXJuIG5b
dF0KLXZhciByPWUuc3BsaXQoIjoiKVswXQotcmV0dXJuIG49dGhpcy5fdHlwZU9wdGlvbnNbcl0s
biYmdm9pZCAwIT09blt0XT9uW3RdOnRoaXMuZmFsbGJhY2s/dGhpcy5mYWxsYmFjay5nZXRPcHRp
b24oZSx0KTp2b2lkIDB9LHR5cGVJbmplY3Rpb246ZnVuY3Rpb24oZSx0LG4pe2lmKG4uc3BsaXQo
IjoiKVswXT09PWUpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgaW5qZWN0IGEgJyIrbisiJyBvbiBv
dGhlciAiK2UrIihzKS4iKTsodGhpcy5fdHlwZUluamVjdGlvbnNbZV18fCh0aGlzLl90eXBlSW5q
ZWN0aW9uc1tlXT1bXSkpLnB1c2goe3Byb3BlcnR5OnQsZnVsbE5hbWU6bn0pfSxpbmplY3Rpb246
ZnVuY3Rpb24oZSx0LG4pe3RoaXMudmFsaWRhdGVGdWxsTmFtZShuKQotdmFyIHI9dGhpcy5ub3Jt
YWxpemUobikKLWlmKC0xPT09ZS5pbmRleE9mKCI6IikpcmV0dXJuIHRoaXMudHlwZUluamVjdGlv
bihlLHQscikKLXZhciBpPXRoaXMubm9ybWFsaXplKGUpOyh0aGlzLl9pbmplY3Rpb25zW2ldfHwo
dGhpcy5faW5qZWN0aW9uc1tpXT1bXSkpLnB1c2goe3Byb3BlcnR5OnQsZnVsbE5hbWU6cn0pfSxm
YWN0b3J5VHlwZUluamVjdGlvbjpmdW5jdGlvbihlLHQsbil7KHRoaXMuX2ZhY3RvcnlUeXBlSW5q
ZWN0aW9uc1tlXXx8KHRoaXMuX2ZhY3RvcnlUeXBlSW5qZWN0aW9uc1tlXT1bXSkpLnB1c2goe3By
b3BlcnR5OnQsZnVsbE5hbWU6dGhpcy5ub3JtYWxpemUobil9KX0sZmFjdG9yeUluamVjdGlvbjpm
dW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcy5ub3JtYWxpemUoZSksaT10aGlzLm5vcm1hbGl6ZShu
KQotaWYodGhpcy52YWxpZGF0ZUZ1bGxOYW1lKG4pLC0xPT09ZS5pbmRleE9mKCI6IikpcmV0dXJu
IHRoaXMuZmFjdG9yeVR5cGVJbmplY3Rpb24ocix0LGkpOyh0aGlzLl9mYWN0b3J5SW5qZWN0aW9u
c1tyXXx8KHRoaXMuX2ZhY3RvcnlJbmplY3Rpb25zW3JdPVtdKSkucHVzaCh7cHJvcGVydHk6dCxm
dWxsTmFtZTppfSl9LGtub3duRm9yVHlwZTpmdW5jdGlvbihlKXt2YXIgbixyLGk9dm9pZCAwLG89
dm9pZCAwLHM9KDAsdC5kaWN0aW9uYXJ5KShudWxsKSxhPU9iamVjdC5rZXlzKHRoaXMucmVnaXN0
cmF0aW9ucykKLWZvcihuPTA7bjxhLmxlbmd0aDtuKyspcj1hW25dLHIuc3BsaXQoIjoiKVswXT09
PWUmJihzW3JdPSEwKQotcmV0dXJuIHRoaXMuZmFsbGJhY2smJihpPXRoaXMuZmFsbGJhY2sua25v
d25Gb3JUeXBlKGUpKSx0aGlzLnJlc29sdmVyJiZ0aGlzLnJlc29sdmVyLmtub3duRm9yVHlwZSYm
KG89dGhpcy5yZXNvbHZlci5rbm93bkZvclR5cGUoZSkpLCgwLHQuYXNzaWduKSh7fSxpLHMsbyl9
LHZhbGlkYXRlRnVsbE5hbWU6ZnVuY3Rpb24oZSl7aWYoIXRoaXMuaXNWYWxpZEZ1bGxOYW1lKGUp
KXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgRnVsbG5hbWUsIGV4cGVjdGVkOiAndHlwZTpu
YW1lJyBnb3Q6ICIrZSkKLXJldHVybiEwfSxpc1ZhbGlkRnVsbE5hbWU6ZnVuY3Rpb24oZSl7cmV0
dXJuISFqLnRlc3QoZSl9LHZhbGlkYXRlSW5qZWN0aW9uczpmdW5jdGlvbihlKXtpZihlKXt2YXIg
dAotZm9yKHQ9MDt0PGUubGVuZ3RoO3QrKyllW3RdLmZ1bGxOYW1lfX0sbm9ybWFsaXplSW5qZWN0
aW9uc0hhc2g6ZnVuY3Rpb24oZSl7dmFyIHQ9W10KLWZvcih2YXIgbiBpbiBlKWUuaGFzT3duUHJv
cGVydHkobikmJnQucHVzaCh7cHJvcGVydHk6bixmdWxsTmFtZTplW25dfSkKLXJldHVybiB0fSxn
ZXRJbmplY3Rpb25zOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2luamVjdGlvbnNbZV18fFtdCi1y
ZXR1cm4gdGhpcy5mYWxsYmFjayYmKHQ9dC5jb25jYXQodGhpcy5mYWxsYmFjay5nZXRJbmplY3Rp
b25zKGUpKSksdH0sZ2V0VHlwZUluamVjdGlvbnM6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fdHlw
ZUluamVjdGlvbnNbZV18fFtdCi1yZXR1cm4gdGhpcy5mYWxsYmFjayYmKHQ9dC5jb25jYXQodGhp
cy5mYWxsYmFjay5nZXRUeXBlSW5qZWN0aW9ucyhlKSkpLHR9LGdldEZhY3RvcnlJbmplY3Rpb25z
OmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2ZhY3RvcnlJbmplY3Rpb25zW2VdfHxbXQotcmV0dXJu
IHRoaXMuZmFsbGJhY2smJih0PXQuY29uY2F0KHRoaXMuZmFsbGJhY2suZ2V0RmFjdG9yeUluamVj
dGlvbnMoZSkpKSx0fSxnZXRGYWN0b3J5VHlwZUluamVjdGlvbnM6ZnVuY3Rpb24oZSl7dmFyIHQ9
dGhpcy5fZmFjdG9yeVR5cGVJbmplY3Rpb25zW2VdfHxbXQotcmV0dXJuIHRoaXMuZmFsbGJhY2sm
Jih0PXQuY29uY2F0KHRoaXMuZmFsbGJhY2suZ2V0RmFjdG9yeVR5cGVJbmplY3Rpb25zKGUpKSks
dH19LE8ucHJvdG90eXBlLmV4cGFuZExvY2FsTG9va3VwPWZ1bmN0aW9uKGUsdCl7dmFyIG4scgot
cmV0dXJuIHRoaXMucmVzb2x2ZXImJnRoaXMucmVzb2x2ZXIuZXhwYW5kTG9jYWxMb29rdXA/KG49
dGhpcy5ub3JtYWxpemUoZSkscj10aGlzLm5vcm1hbGl6ZSh0LnNvdXJjZSksVCh0aGlzLG4scikp
OnRoaXMuZmFsbGJhY2s/dGhpcy5mYWxsYmFjay5leHBhbmRMb2NhbExvb2t1cChlLHQpOm51bGx9
Ci12YXIgRD0oMCx0LmRpY3Rpb25hcnkpKG51bGwpLEw9IiIrTWF0aC5yYW5kb20oKStEYXRlLm5v
dygpCi1lLlJlZ2lzdHJ5PU8sZS5wcml2YXRpemU9ZnVuY3Rpb24oZSl7dmFyIG49ZVswXSxyPURb
bl0KLWlmKHIpcmV0dXJuIHIKLXZhciBpPW4uc3BsaXQoIjoiKSxvPWlbMF0scz1pWzFdCi1yZXR1
cm4gRFtuXT0oMCx0LmludGVybikobysiOiIrcysiLSIrTCl9LGUuQ29udGFpbmVyPWksZS5idWls
ZEZha2VDb250YWluZXJXaXRoRGVwcmVjYXRpb25zPXh9KSxlKCJkYWctbWFwIixbImV4cG9ydHMi
XSxmdW5jdGlvbihlKXsidXNlIHN0cmljdCIKLXZhciB0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgp
e3RoaXMuX3ZlcnRpY2VzPW5ldyBufXJldHVybiBlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSx0
LG4scil7aWYoIWUpdGhyb3cgbmV3IEVycm9yKCJhcmd1bWVudCBga2V5YCBpcyByZXF1aXJlZCIp
Ci12YXIgaSxvPXRoaXMuX3ZlcnRpY2VzLHM9by5hZGQoZSkKLWlmKHMudmFsPXQsbilpZigic3Ry
aW5nIj09dHlwZW9mIG4pby5hZGRFZGdlKHMsby5hZGQobikpCi1lbHNlIGZvcih2YXIgaT0wO2k8
bi5sZW5ndGg7aSsrKW8uYWRkRWRnZShzLG8uYWRkKG5baV0pKQotaWYocilpZigic3RyaW5nIj09
dHlwZW9mIHIpby5hZGRFZGdlKG8uYWRkKHIpLHMpCi1lbHNlIGZvcihpPTA7aTxyLmxlbmd0aDtp
Kyspby5hZGRFZGdlKG8uYWRkKHJbaV0pLHMpfSxlLnByb3RvdHlwZS5hZGRFZGdlcz1mdW5jdGlv
bihlLHQsbixyKXt0aGlzLmFkZChlLHQsbixyKX0sZS5wcm90b3R5cGUuZWFjaD1mdW5jdGlvbihl
KXt0aGlzLl92ZXJ0aWNlcy53YWxrKGUpfSxlLnByb3RvdHlwZS50b3Bzb3J0PWZ1bmN0aW9uKGUp
e3RoaXMuZWFjaChlKX0sZX0oKQotZS5kZWZhdWx0PXQKLXZhciBuPWZ1bmN0aW9uKCl7ZnVuY3Rp
b24gZSgpe3RoaXMubGVuZ3RoPTAsdGhpcy5zdGFjaz1uZXcgcix0aGlzLnBhdGg9bmV3IHIsdGhp
cy5yZXN1bHQ9bmV3IHJ9cmV0dXJuIGUucHJvdG90eXBlLmFkZD1mdW5jdGlvbihlKXtpZighZSl0
aHJvdyBuZXcgRXJyb3IoIm1pc3Npbmcga2V5IikKLXZhciB0LG4scj0wfHRoaXMubGVuZ3RoCi1m
b3IodD0wO3Q8cjt0KyspaWYobj10aGlzW3RdLG4ua2V5PT09ZSlyZXR1cm4gbgotcmV0dXJuIHRo
aXMubGVuZ3RoPXIrMSx0aGlzW3JdPXtpZHg6cixrZXk6ZSx2YWw6dm9pZCAwLG91dDohMSxmbGFn
OiExLGxlbmd0aDowfX0sZS5wcm90b3R5cGUuYWRkRWRnZT1mdW5jdGlvbihlLHQpe3RoaXMuY2hl
Y2soZSx0LmtleSkKLXZhciBuLHI9MHx0Lmxlbmd0aAotZm9yKG49MDtuPHI7bisrKWlmKHRbbl09
PT1lLmlkeClyZXR1cm4KLXQubGVuZ3RoPXIrMSx0W3JdPWUuaWR4LGUub3V0PSEwfSxlLnByb3Rv
dHlwZS53YWxrPWZ1bmN0aW9uKGUpe3ZhciB0LG4KLWZvcih0aGlzLnJlc2V0KCksdD0wO3Q8dGhp
cy5sZW5ndGg7dCsrKW49dGhpc1t0XSxuLm91dHx8dGhpcy52aXNpdChuLCIiKQotdGhpcy5lYWNo
KHRoaXMucmVzdWx0LGUpfSxlLnByb3RvdHlwZS5jaGVjaz1mdW5jdGlvbihlLHQpe3ZhciBuLHIK
LWlmKGUua2V5PT09dCl0aHJvdyBuZXcgRXJyb3IoImN5Y2xlIGRldGVjdGVkOiAiK3QrIiA8LSAi
K3QpCi1pZigwIT09ZS5sZW5ndGgpe2ZvcihuPTA7bjxlLmxlbmd0aDtuKyspaWYodGhpc1tlW25d
XS5rZXk9PT10KXRocm93IG5ldyBFcnJvcigiY3ljbGUgZGV0ZWN0ZWQ6ICIrdCsiIDwtICIrZS5r
ZXkrIiA8LSAiK3QpCi1pZih0aGlzLnJlc2V0KCksdGhpcy52aXNpdChlLHQpLHRoaXMucGF0aC5s
ZW5ndGg+MCl0aHJvdyByPSJjeWNsZSBkZXRlY3RlZDogIit0LHRoaXMuZWFjaCh0aGlzLnBhdGgs
ZnVuY3Rpb24oZSl7cis9IiA8LSAiK2V9KSxuZXcgRXJyb3Iocil9fSxlLnByb3RvdHlwZS5yZXNl
dD1mdW5jdGlvbigpe3ZhciBlLHQKLWZvcih0aGlzLnN0YWNrLmxlbmd0aD0wLHRoaXMucGF0aC5s
ZW5ndGg9MCx0aGlzLnJlc3VsdC5sZW5ndGg9MCxlPTAsdD10aGlzLmxlbmd0aDtlPHQ7ZSsrKXRo
aXNbZV0uZmxhZz0hMX0sZS5wcm90b3R5cGUudmlzaXQ9ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGk9
dGhpcyxvPWkuc3RhY2sscz1pLnBhdGgsYT1pLnJlc3VsdAotZm9yKG8ucHVzaChlLmlkeCk7by5s
ZW5ndGg7KWlmKChuPTB8by5wb3AoKSk+PTApe2lmKHI9dGhpc1tuXSxyLmZsYWcpY29udGludWUK
LWlmKHIuZmxhZz0hMCxzLnB1c2gobiksdD09PXIua2V5KWJyZWFrCi1vLnB1c2gofm4pLHRoaXMu
cHVzaEluY29taW5nKHIpfWVsc2Ugcy5wb3AoKSxhLnB1c2gofm4pfSxlLnByb3RvdHlwZS5wdXNo
SW5jb21pbmc9ZnVuY3Rpb24oZSl7dmFyIHQsbixyPXRoaXMuc3RhY2sKLWZvcih0PWUubGVuZ3Ro
LTE7dD49MDt0LS0pbj1lW3RdLHRoaXNbbl0uZmxhZ3x8ci5wdXNoKG4pfSxlLnByb3RvdHlwZS5l
YWNoPWZ1bmN0aW9uKGUsdCl7dmFyIG4scixpCi1mb3Iobj0wLHI9ZS5sZW5ndGg7bjxyO24rKylp
PXRoaXNbZVtuXV0sdChpLmtleSxpLnZhbCl9LGV9KCkscj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUo
KXt0aGlzLmxlbmd0aD0wfXJldHVybiBlLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGUpe3RoaXNb
dGhpcy5sZW5ndGgrK109MHxlfSxlLnByb3RvdHlwZS5wb3A9ZnVuY3Rpb24oKXtyZXR1cm4gMHx0
aGlzWy0tdGhpcy5sZW5ndGhdfSxlfSgpfSksZSgiZW1iZXItYXBwbGljYXRpb24vaW5kZXgiLFsi
ZXhwb3J0cyIsImVtYmVyLWFwcGxpY2F0aW9uL3N5c3RlbS9hcHBsaWNhdGlvbiIsImVtYmVyLWFw
cGxpY2F0aW9uL3N5c3RlbS9hcHBsaWNhdGlvbi1pbnN0YW5jZSIsImVtYmVyLWFwcGxpY2F0aW9u
L3N5c3RlbS9yZXNvbHZlciIsImVtYmVyLWFwcGxpY2F0aW9uL3N5c3RlbS9lbmdpbmUiLCJlbWJl
ci1hcHBsaWNhdGlvbi9zeXN0ZW0vZW5naW5lLWluc3RhbmNlIiwiZW1iZXItYXBwbGljYXRpb24v
c3lzdGVtL2VuZ2luZS1wYXJlbnQiLCJlbWJlci1hcHBsaWNhdGlvbi9pbml0aWFsaXplcnMvZG9t
LXRlbXBsYXRlcyJdLGZ1bmN0aW9uKGUsdCxuLHIsaSxvLHMpeyJ1c2Ugc3RyaWN0IgotZS5zZXRF
bmdpbmVQYXJlbnQ9ZS5nZXRFbmdpbmVQYXJlbnQ9ZS5FbmdpbmVJbnN0YW5jZT1lLkVuZ2luZT1l
LlJlc29sdmVyPWUuQXBwbGljYXRpb25JbnN0YW5jZT1lLkFwcGxpY2F0aW9uPXZvaWQgMCxPYmpl
Y3QuZGVmaW5lUHJvcGVydHkoZSwiQXBwbGljYXRpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5j
dGlvbigpe3JldHVybiB0LmRlZmF1bHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIkFwcGxp
Y2F0aW9uSW5zdGFuY2UiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBuLmRl
ZmF1bHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIlJlc29sdmVyIix7ZW51bWVyYWJsZToh
MCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5kZWZhdWx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0
eShlLCJFbmdpbmUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpLmRlZmF1
bHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIkVuZ2luZUluc3RhbmNlIix7ZW51bWVyYWJs
ZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5kZWZhdWx0fX0pLE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShlLCJnZXRFbmdpbmVQYXJlbnQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3Jl
dHVybiBzLmdldEVuZ2luZVBhcmVudH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwic2V0RW5n
aW5lUGFyZW50Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcy5zZXRFbmdp
bmVQYXJlbnR9fSl9KSxlKCJlbWJlci1hcHBsaWNhdGlvbi9pbml0aWFsaXplcnMvZG9tLXRlbXBs
YXRlcyIsWyJyZXF1aXJlIiwiZW1iZXItZ2xpbW1lciIsImVtYmVyLWVudmlyb25tZW50IiwiZW1i
ZXItYXBwbGljYXRpb24vc3lzdGVtL2FwcGxpY2F0aW9uIl0sZnVuY3Rpb24oZSx0LG4scil7InVz
ZSBzdHJpY3QiCi12YXIgaT1mdW5jdGlvbigpe30KLXIuZGVmYXVsdC5pbml0aWFsaXplcih7bmFt
ZToiZG9tVGVtcGxhdGVzIixpbml0aWFsaXplOmZ1bmN0aW9uKCl7dmFyIHI9dm9pZCAwCi1uLmVu
dmlyb25tZW50Lmhhc0RPTSYmKDAsZS5oYXMpKCJlbWJlci10ZW1wbGF0ZS1jb21waWxlci9zeXN0
ZW0vYm9vdHN0cmFwIikmJihpPSgwLGUuZGVmYXVsdCkoImVtYmVyLXRlbXBsYXRlLWNvbXBpbGVy
L3N5c3RlbS9ib290c3RyYXAiKS5kZWZhdWx0LHI9ZG9jdW1lbnQpLGkoe2NvbnRleHQ6cixoYXNU
ZW1wbGF0ZTp0Lmhhc1RlbXBsYXRlLHNldFRlbXBsYXRlOnQuc2V0VGVtcGxhdGV9KX19KX0pLGUo
ImVtYmVyLWFwcGxpY2F0aW9uL3N5c3RlbS9hcHBsaWNhdGlvbi1pbnN0YW5jZSIsWyJleHBvcnRz
IiwiZW1iZXItdXRpbHMiLCJlbWJlci1kZWJ1ZyIsImVtYmVyLW1ldGFsIiwiZW1iZXItcnVudGlt
ZSIsImVtYmVyLWVudmlyb25tZW50IiwiZW1iZXItdmlld3MiLCJlbWJlci1hcHBsaWNhdGlvbi9z
eXN0ZW0vZW5naW5lLWluc3RhbmNlIl0sZnVuY3Rpb24oZSx0LG4scixpLG8scyxhKXsidXNlIHN0
cmljdCIKLXZhciB1PXZvaWQgMCxsPWEuZGVmYXVsdC5leHRlbmQoe2FwcGxpY2F0aW9uOm51bGws
Y3VzdG9tRXZlbnRzOm51bGwscm9vdEVsZW1lbnQ6bnVsbCxpbml0OmZ1bmN0aW9uKCl7dGhpcy5f
c3VwZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMucmVnaXN0ZXIoIi1hcHBsaWNhdGlvbi1p
bnN0YW5jZTptYWluIix0aGlzLHtpbnN0YW50aWF0ZTohMX0pfSxfYm9vdFN5bmM6ZnVuY3Rpb24o
ZSl7dmFyIHQKLXJldHVybiB0aGlzLl9ib290ZWQ/dGhpczooZT1uZXcgdShlKSx0aGlzLnNldHVw
UmVnaXN0cnkoZSksZS5yb290RWxlbWVudD90aGlzLnJvb3RFbGVtZW50PWUucm9vdEVsZW1lbnQ6
dGhpcy5yb290RWxlbWVudD10aGlzLmFwcGxpY2F0aW9uLnJvb3RFbGVtZW50LGUubG9jYXRpb24m
Jih0PSgwLHIuZ2V0KSh0aGlzLCJyb3V0ZXIiKSwoMCxyLnNldCkodCwibG9jYXRpb24iLGUubG9j
YXRpb24pKSx0aGlzLmFwcGxpY2F0aW9uLnJ1bkluc3RhbmNlSW5pdGlhbGl6ZXJzKHRoaXMpLGUu
aXNJbnRlcmFjdGl2ZSYmdGhpcy5zZXR1cEV2ZW50RGlzcGF0Y2hlcigpLHRoaXMuX2Jvb3RlZD0h
MCx0aGlzKX0sc2V0dXBSZWdpc3RyeTpmdW5jdGlvbihlKXt0aGlzLmNvbnN0cnVjdG9yLnNldHVw
UmVnaXN0cnkodGhpcy5fX3JlZ2lzdHJ5X18sZSl9LHJvdXRlcjooMCxyLmNvbXB1dGVkKShmdW5j
dGlvbigpe3JldHVybiB0aGlzLmxvb2t1cCgicm91dGVyOm1haW4iKX0pLnJlYWRPbmx5KCksZGlk
Q3JlYXRlUm9vdFZpZXc6ZnVuY3Rpb24oZSl7ZS5hcHBlbmRUbyh0aGlzLnJvb3RFbGVtZW50KX0s
c3RhcnRSb3V0aW5nOmZ1bmN0aW9uKCl7KDAsci5nZXQpKHRoaXMsInJvdXRlciIpLnN0YXJ0Um91
dGluZygpLHRoaXMuX2RpZFNldHVwUm91dGVyPSEwfSxzZXR1cFJvdXRlcjpmdW5jdGlvbigpe2lm
KCF0aGlzLl9kaWRTZXR1cFJvdXRlcil7dGhpcy5fZGlkU2V0dXBSb3V0ZXI9ITA7KDAsci5nZXQp
KHRoaXMsInJvdXRlciIpLnNldHVwUm91dGVyKCl9fSxoYW5kbGVVUkw6ZnVuY3Rpb24oZSl7dmFy
IHQ9KDAsci5nZXQpKHRoaXMsInJvdXRlciIpCi1yZXR1cm4gdGhpcy5zZXR1cFJvdXRlcigpLHQu
aGFuZGxlVVJMKGUpfSxzZXR1cEV2ZW50RGlzcGF0Y2hlcjpmdW5jdGlvbigpe3ZhciBlPXRoaXMu
bG9va3VwKCJldmVudF9kaXNwYXRjaGVyOm1haW4iKSxuPSgwLHIuZ2V0KSh0aGlzLmFwcGxpY2F0
aW9uLCJjdXN0b21FdmVudHMiKSxpPSgwLHIuZ2V0KSh0aGlzLCJjdXN0b21FdmVudHMiKSxvPSgw
LHQuYXNzaWduKSh7fSxuLGkpCi1yZXR1cm4gZS5zZXR1cChvLHRoaXMucm9vdEVsZW1lbnQpLGV9
LGdldFVSTDpmdW5jdGlvbigpe3ZhciBlPSgwLHIuZ2V0KSh0aGlzLCJyb3V0ZXIiKQotcmV0dXJu
KDAsci5nZXQpKGUsInVybCIpfSx2aXNpdDpmdW5jdGlvbihlKXt2YXIgdD10aGlzCi10aGlzLnNl
dHVwUm91dGVyKCkKLXZhciBuPXRoaXMuX19jb250YWluZXJfXy5sb29rdXAoIi1lbnZpcm9ubWVu
dDptYWluIiksbz0oMCxyLmdldCkodGhpcywicm91dGVyIikscz1mdW5jdGlvbigpe3JldHVybiBu
Lm9wdGlvbnMuc2hvdWxkUmVuZGVyP25ldyBpLlJTVlAuUHJvbWlzZShmdW5jdGlvbihlKXtyLnJ1
bi5zY2hlZHVsZSgiYWZ0ZXJSZW5kZXIiLG51bGwsZSx0KX0pOnR9LGE9ZnVuY3Rpb24oZSl7aWYo
ZS5lcnJvcil0aHJvdyBlLmVycm9yCi1pZigiVHJhbnNpdGlvbkFib3J0ZWQiPT09ZS5uYW1lJiZv
Ll9yb3V0ZXJNaWNyb2xpYi5hY3RpdmVUcmFuc2l0aW9uKXJldHVybiBvLl9yb3V0ZXJNaWNyb2xp
Yi5hY3RpdmVUcmFuc2l0aW9uLnRoZW4ocyxhKQotdGhyb3ciVHJhbnNpdGlvbkFib3J0ZWQiPT09
ZS5uYW1lP25ldyBFcnJvcihlLm1lc3NhZ2UpOmV9LHU9KDAsci5nZXQpKG8sImxvY2F0aW9uIikK
LXJldHVybiB1LnNldFVSTChlKSxvLmhhbmRsZVVSTCh1LmdldFVSTCgpKS50aGVuKHMsYSl9fSkK
LWwucmVvcGVuQ2xhc3Moe3NldHVwUmVnaXN0cnk6ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRz
Lmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9Ci10LnRvRW52
aXJvbm1lbnR8fCh0PW5ldyB1KHQpKSxlLnJlZ2lzdGVyKCItZW52aXJvbm1lbnQ6bWFpbiIsdC50
b0Vudmlyb25tZW50KCkse2luc3RhbnRpYXRlOiExfSksZS5yZWdpc3Rlcigic2VydmljZTotZG9j
dW1lbnQiLHQuZG9jdW1lbnQse2luc3RhbnRpYXRlOiExfSksdGhpcy5fc3VwZXIoZSx0KX19KSx1
PWZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNb
MF0/YXJndW1lbnRzWzBdOnt9Ci10aGlzLmpRdWVyeT1zLmpRdWVyeSx0aGlzLmlzSW50ZXJhY3Rp
dmU9by5lbnZpcm9ubWVudC5oYXNET00sdm9pZCAwIT09ZS5pc0Jyb3dzZXI/dGhpcy5pc0Jyb3dz
ZXI9ISFlLmlzQnJvd3Nlcjp0aGlzLmlzQnJvd3Nlcj1vLmVudmlyb25tZW50Lmhhc0RPTSx0aGlz
LmlzQnJvd3Nlcnx8KHRoaXMualF1ZXJ5PW51bGwsdGhpcy5pc0ludGVyYWN0aXZlPSExLHRoaXMu
bG9jYXRpb249Im5vbmUiKSx2b2lkIDAhPT1lLnNob3VsZFJlbmRlcj90aGlzLnNob3VsZFJlbmRl
cj0hIWUuc2hvdWxkUmVuZGVyOnRoaXMuc2hvdWxkUmVuZGVyPSEwLHRoaXMuc2hvdWxkUmVuZGVy
fHwodGhpcy5qUXVlcnk9bnVsbCx0aGlzLmlzSW50ZXJhY3RpdmU9ITEpLGUuZG9jdW1lbnQ/dGhp
cy5kb2N1bWVudD1lLmRvY3VtZW50OnRoaXMuZG9jdW1lbnQ9InVuZGVmaW5lZCIhPXR5cGVvZiBk
b2N1bWVudD9kb2N1bWVudDpudWxsLGUucm9vdEVsZW1lbnQmJih0aGlzLnJvb3RFbGVtZW50PWUu
cm9vdEVsZW1lbnQpLHZvaWQgMCE9PWUubG9jYXRpb24mJih0aGlzLmxvY2F0aW9uPWUubG9jYXRp
b24pLHZvaWQgMCE9PWUualF1ZXJ5JiYodGhpcy5qUXVlcnk9ZS5qUXVlcnkpLHZvaWQgMCE9PWUu
aXNJbnRlcmFjdGl2ZSYmKHRoaXMuaXNJbnRlcmFjdGl2ZT0hIWUuaXNJbnRlcmFjdGl2ZSl9LHUu
cHJvdG90eXBlLnRvRW52aXJvbm1lbnQ9ZnVuY3Rpb24oKXt2YXIgZT0oMCx0LmFzc2lnbikoe30s
by5lbnZpcm9ubWVudCkKLXJldHVybiBlLmhhc0RPTT10aGlzLmlzQnJvd3NlcixlLmlzSW50ZXJh
Y3RpdmU9dGhpcy5pc0ludGVyYWN0aXZlLGUub3B0aW9ucz10aGlzLGV9LE9iamVjdC5kZWZpbmVQ
cm9wZXJ0eShsLnByb3RvdHlwZSwiY29udGFpbmVyIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFi
bGU6ITEsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcwotcmV0dXJue2xvb2t1cDpmdW5jdGlvbigp
e3JldHVybiBlLmxvb2t1cC5hcHBseShlLGFyZ3VtZW50cyl9fX19KSxPYmplY3QuZGVmaW5lUHJv
cGVydHkobC5wcm90b3R5cGUsInJlZ2lzdHJ5Iix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6
ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsaS5idWlsZEZha2VSZWdpc3RyeVdpdGhEZXByZWNh
dGlvbnMpKHRoaXMsIkFwcGxpY2F0aW9uSW5zdGFuY2UiKX19KSxlLmRlZmF1bHQ9bH0pLGUoImVt
YmVyLWFwcGxpY2F0aW9uL3N5c3RlbS9hcHBsaWNhdGlvbiIsWyJleHBvcnRzIiwiZW1iZXItYmFi
ZWwiLCJlbWJlci11dGlscyIsImVtYmVyLWVudmlyb25tZW50IiwiZW1iZXItZGVidWciLCJlbWJl
ci1tZXRhbCIsImVtYmVyLXJ1bnRpbWUiLCJlbWJlci12aWV3cyIsImVtYmVyLXJvdXRpbmciLCJl
bWJlci1hcHBsaWNhdGlvbi9zeXN0ZW0vYXBwbGljYXRpb24taW5zdGFuY2UiLCJjb250YWluZXIi
LCJlbWJlci1hcHBsaWNhdGlvbi9zeXN0ZW0vZW5naW5lIiwiZW1iZXItZ2xpbW1lciJdLGZ1bmN0
aW9uKGUsdCxuLHIsaSxvLHMsYSx1LGwsYyxwLGYpeyJ1c2Ugc3RyaWN0IgotZnVuY3Rpb24gaChl
KXtlLnJlZ2lzdGVyKCJyb3V0ZXI6bWFpbiIsdS5Sb3V0ZXIpLGUucmVnaXN0ZXIoIi12aWV3LXJl
Z2lzdHJ5Om1haW4iLHtjcmVhdGU6ZnVuY3Rpb24oKXtyZXR1cm4oMCxuLmRpY3Rpb25hcnkpKG51
bGwpfX0pLGUucmVnaXN0ZXIoInJvdXRlOmJhc2ljIix1LlJvdXRlKSxlLnJlZ2lzdGVyKCJldmVu
dF9kaXNwYXRjaGVyOm1haW4iLGEuRXZlbnREaXNwYXRjaGVyKSxlLmluamVjdGlvbigicm91dGVy
Om1haW4iLCJuYW1lc3BhY2UiLCJhcHBsaWNhdGlvbjptYWluIiksZS5yZWdpc3RlcigibG9jYXRp
b246YXV0byIsdS5BdXRvTG9jYXRpb24pLGUucmVnaXN0ZXIoImxvY2F0aW9uOmhhc2giLHUuSGFz
aExvY2F0aW9uKSxlLnJlZ2lzdGVyKCJsb2NhdGlvbjpoaXN0b3J5Iix1Lkhpc3RvcnlMb2NhdGlv
biksZS5yZWdpc3RlcigibG9jYXRpb246bm9uZSIsdS5Ob25lTG9jYXRpb24pLGUucmVnaXN0ZXIo
KDAsYy5wcml2YXRpemUpKG0pLHUuQnVja2V0Q2FjaGUpfWZ1bmN0aW9uIGQoKXtnfHwoZz0hMCxy
LmVudmlyb25tZW50Lmhhc0RPTSYmImZ1bmN0aW9uIj09dHlwZW9mIGEualF1ZXJ5JiZvLmxpYnJh
cmllcy5yZWdpc3RlckNvcmVMaWJyYXJ5KCJqUXVlcnkiLCgwLGEualF1ZXJ5KSgpLmpxdWVyeSkp
fXZhciBtPSgwLHQudGFnZ2VkVGVtcGxhdGVMaXRlcmFsTG9vc2UpKFsiLWJ1Y2tldC1jYWNoZTpt
YWluIl0sWyItYnVja2V0LWNhY2hlOm1haW4iXSksZz0hMSx5PXAuZGVmYXVsdC5leHRlbmQoe3Jv
b3RFbGVtZW50OiJib2R5IixldmVudERpc3BhdGNoZXI6bnVsbCxjdXN0b21FdmVudHM6bnVsbCxh
dXRvYm9vdDohMCxfZ2xvYmFsc01vZGU6ITAsaW5pdDpmdW5jdGlvbigpe3RoaXMuX3N1cGVyLmFw
cGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLiR8fCh0aGlzLiQ9YS5qUXVlcnkpLGQoKSx0aGlzLl9y
ZWFkaW5lc3NEZWZlcnJhbHM9MSx0aGlzLl9ib290ZWQ9ITEsdGhpcy5hdXRvYm9vdD10aGlzLl9n
bG9iYWxzTW9kZT0hIXRoaXMuYXV0b2Jvb3QsdGhpcy5fZ2xvYmFsc01vZGUmJnRoaXMuX3ByZXBh
cmVGb3JHbG9iYWxzTW9kZSgpLHRoaXMuYXV0b2Jvb3QmJnRoaXMud2FpdEZvckRPTVJlYWR5KCl9
LGJ1aWxkSW5zdGFuY2U6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQg
MCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30KLXJldHVybiBlLmJhc2U9dGhpcyxlLmFw
cGxpY2F0aW9uPXRoaXMsbC5kZWZhdWx0LmNyZWF0ZShlKX0sX3ByZXBhcmVGb3JHbG9iYWxzTW9k
ZTpmdW5jdGlvbigpe3RoaXMuUm91dGVyPSh0aGlzLlJvdXRlcnx8dS5Sb3V0ZXIpLmV4dGVuZCgp
LHRoaXMuX2J1aWxkRGVwcmVjYXRlZEluc3RhbmNlKCl9LF9idWlsZERlcHJlY2F0ZWRJbnN0YW5j
ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuYnVpbGRJbnN0YW5jZSgpCi10aGlzLl9fZGVwcmVjYXRl
ZEluc3RhbmNlX189ZSx0aGlzLl9fY29udGFpbmVyX189ZS5fX2NvbnRhaW5lcl9ffSx3YWl0Rm9y
RE9NUmVhZHk6ZnVuY3Rpb24oKXshdGhpcy4kfHx0aGlzLiQuaXNSZWFkeT9vLnJ1bi5zY2hlZHVs
ZSgiYWN0aW9ucyIsdGhpcywiZG9tUmVhZHkiKTp0aGlzLiQoKS5yZWFkeShvLnJ1bi5iaW5kKHRo
aXMsImRvbVJlYWR5IikpfSxkb21SZWFkeTpmdW5jdGlvbigpe3RoaXMuaXNEZXN0cm95ZWR8fHRo
aXMuX2Jvb3RTeW5jKCl9LGRlZmVyUmVhZGluZXNzOmZ1bmN0aW9uKCl7dGhpcy5fcmVhZGluZXNz
RGVmZXJyYWxzKyt9LGFkdmFuY2VSZWFkaW5lc3M6ZnVuY3Rpb24oKXswPT09LS10aGlzLl9yZWFk
aW5lc3NEZWZlcnJhbHMmJm8ucnVuLm9uY2UodGhpcyx0aGlzLmRpZEJlY29tZVJlYWR5KX0sYm9v
dDpmdW5jdGlvbigpe2lmKHRoaXMuX2Jvb3RQcm9taXNlKXJldHVybiB0aGlzLl9ib290UHJvbWlz
ZQotdHJ5e3RoaXMuX2Jvb3RTeW5jKCl9Y2F0Y2goZSl7fXJldHVybiB0aGlzLl9ib290UHJvbWlz
ZX0sX2Jvb3RTeW5jOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX2Jvb3RlZCl7dmFyIGU9dGhpcy5fYm9v
dFJlc29sdmVyPW5ldyBzLlJTVlAuZGVmZXIKLXRoaXMuX2Jvb3RQcm9taXNlPWUucHJvbWlzZQot
dHJ5e3RoaXMucnVuSW5pdGlhbGl6ZXJzKCksKDAscy5ydW5Mb2FkSG9va3MpKCJhcHBsaWNhdGlv
biIsdGhpcyksdGhpcy5hZHZhbmNlUmVhZGluZXNzKCl9Y2F0Y2godCl7dGhyb3cgZS5yZWplY3Qo
dCksdH19fSxyZXNldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX19kZXByZWNhdGVkSW5zdGFuY2Vf
XwotdGhpcy5fcmVhZGluZXNzRGVmZXJyYWxzPTEsdGhpcy5fYm9vdFByb21pc2U9bnVsbCx0aGlz
Ll9ib290UmVzb2x2ZXI9bnVsbCx0aGlzLl9ib290ZWQ9ITEsby5ydW4uam9pbih0aGlzLGZ1bmN0
aW9uKCl7KDAsby5ydW4pKGUsImRlc3Ryb3kiKSx0aGlzLl9idWlsZERlcHJlY2F0ZWRJbnN0YW5j
ZSgpLG8ucnVuLnNjaGVkdWxlKCJhY3Rpb25zIix0aGlzLCJfYm9vdFN5bmMiKX0pfSxkaWRCZWNv
bWVSZWFkeTpmdW5jdGlvbigpe3ZhciBlCi10cnl7KDAsaS5pc1Rlc3RpbmcpKCl8fChzLk5hbWVz
cGFjZS5wcm9jZXNzQWxsKCksKDAscy5zZXROYW1lc3BhY2VTZWFyY2hEaXNhYmxlZCkoITApKSx0
aGlzLmF1dG9ib290JiYoZT12b2lkIDAsZT10aGlzLl9nbG9iYWxzTW9kZT90aGlzLl9fZGVwcmVj
YXRlZEluc3RhbmNlX186dGhpcy5idWlsZEluc3RhbmNlKCksZS5fYm9vdFN5bmMoKSx0aGlzLnJl
YWR5KCksZS5zdGFydFJvdXRpbmcoKSksdGhpcy5fYm9vdFJlc29sdmVyLnJlc29sdmUodGhpcyks
dGhpcy5fYm9vdGVkPSEwfWNhdGNoKGUpe3Rocm93IHRoaXMuX2Jvb3RSZXNvbHZlci5yZWplY3Qo
ZSksZX19LHJlYWR5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LHdpbGxEZXN0cm95OmZ1bmN0aW9u
KCl7dGhpcy5fc3VwZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpLCgwLHMuc2V0TmFtZXNwYWNlU2Vh
cmNoRGlzYWJsZWQpKCExKSx0aGlzLl9ib290ZWQ9ITEsdGhpcy5fYm9vdFByb21pc2U9bnVsbCx0
aGlzLl9ib290UmVzb2x2ZXI9bnVsbCxzLl9sb2FkZWQuYXBwbGljYXRpb249PT10aGlzJiYocy5f
bG9hZGVkLmFwcGxpY2F0aW9uPXZvaWQgMCksdGhpcy5fZ2xvYmFsc01vZGUmJnRoaXMuX19kZXBy
ZWNhdGVkSW5zdGFuY2VfXyYmdGhpcy5fX2RlcHJlY2F0ZWRJbnN0YW5jZV9fLmRlc3Ryb3koKX0s
dmlzaXQ6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzCi1yZXR1cm4gdGhpcy5ib290KCkudGhlbihm
dW5jdGlvbigpe3ZhciByPW4uYnVpbGRJbnN0YW5jZSgpCi1yZXR1cm4gci5ib290KHQpLnRoZW4o
ZnVuY3Rpb24oKXtyZXR1cm4gci52aXNpdChlKX0pLmNhdGNoKGZ1bmN0aW9uKGUpe3Rocm93KDAs
by5ydW4pKHIsImRlc3Ryb3kiKSxlfSl9KX19KQotT2JqZWN0LmRlZmluZVByb3BlcnR5KHkucHJv
dG90eXBlLCJyZWdpc3RyeSIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLGdldDpmdW5j
dGlvbigpe3JldHVybigwLHMuYnVpbGRGYWtlUmVnaXN0cnlXaXRoRGVwcmVjYXRpb25zKSh0aGlz
LCJBcHBsaWNhdGlvbiIpfX0pLHkucmVvcGVuQ2xhc3Moe2J1aWxkUmVnaXN0cnk6ZnVuY3Rpb24o
KXthcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFd
Ci12YXIgZT10aGlzLl9zdXBlci5hcHBseSh0aGlzLGFyZ3VtZW50cykKLXJldHVybiBoKGUpLCgw
LGYuc2V0dXBBcHBsaWNhdGlvblJlZ2lzdHJ5KShlKSxlfX0pLGUuZGVmYXVsdD15fSksZSgiZW1i
ZXItYXBwbGljYXRpb24vc3lzdGVtL2VuZ2luZS1pbnN0YW5jZSIsWyJleHBvcnRzIiwiZW1iZXIt
YmFiZWwiLCJlbWJlci11dGlscyIsImVtYmVyLXJ1bnRpbWUiLCJlbWJlci1kZWJ1ZyIsImVtYmVy
LW1ldGFsIiwiY29udGFpbmVyIiwiZW1iZXItYXBwbGljYXRpb24vc3lzdGVtL2VuZ2luZS1wYXJl
bnQiXSxmdW5jdGlvbihlLHQsbixyLGksbyxzLGEpeyJ1c2Ugc3RyaWN0IgotdmFyIHU9KDAsdC50
YWdnZWRUZW1wbGF0ZUxpdGVyYWxMb29zZSkoWyItYnVja2V0LWNhY2hlOm1haW4iXSxbIi1idWNr
ZXQtY2FjaGU6bWFpbiJdKSxsPXIuT2JqZWN0LmV4dGVuZChyLlJlZ2lzdHJ5UHJveHlNaXhpbixy
LkNvbnRhaW5lclByb3h5TWl4aW4se2Jhc2U6bnVsbCxpbml0OmZ1bmN0aW9uKCl7dGhpcy5fc3Vw
ZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpLCgwLG4uZ3VpZEZvcikodGhpcykKLXZhciBlPXRoaXMu
YmFzZQotZXx8KGU9dGhpcy5hcHBsaWNhdGlvbix0aGlzLmJhc2U9ZSkKLXZhciB0PXRoaXMuX19y
ZWdpc3RyeV9fPW5ldyBzLlJlZ2lzdHJ5KHtmYWxsYmFjazplLl9fcmVnaXN0cnlfX30pCi10aGlz
Ll9fY29udGFpbmVyX189dC5jb250YWluZXIoe293bmVyOnRoaXN9KSx0aGlzLl9ib290ZWQ9ITF9
LGJvb3Q6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcwotcmV0dXJuIHRoaXMuX2Jvb3RQcm9taXNlP3Ro
aXMuX2Jvb3RQcm9taXNlOih0aGlzLl9ib290UHJvbWlzZT1uZXcgci5SU1ZQLlByb21pc2UoZnVu
Y3Rpb24obil7cmV0dXJuIG4odC5fYm9vdFN5bmMoZSkpfSksdGhpcy5fYm9vdFByb21pc2UpfSxf
Ym9vdFN5bmM6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2Jvb3RlZD90aGlzOih0aGlzLmNsb25l
UGFyZW50RGVwZW5kZW5jaWVzKCksdGhpcy5zZXR1cFJlZ2lzdHJ5KGUpLHRoaXMuYmFzZS5ydW5J
bnN0YW5jZUluaXRpYWxpemVycyh0aGlzKSx0aGlzLl9ib290ZWQ9ITAsdGhpcyl9LHNldHVwUmVn
aXN0cnk6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3Vt
ZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5fX2NvbnRhaW5lcl9fLmxvb2t1cCgiLWVudmlyb25t
ZW50Om1haW4iKQotdGhpcy5jb25zdHJ1Y3Rvci5zZXR1cFJlZ2lzdHJ5KHRoaXMuX19yZWdpc3Ry
eV9fLGUpfSx1bnJlZ2lzdGVyOmZ1bmN0aW9uKGUpe3RoaXMuX19jb250YWluZXJfXy5yZXNldChl
KSx0aGlzLl9zdXBlci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGJ1aWxkQ2hpbGRFbmdpbmVJbnN0
YW5jZTpmdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3Vt
ZW50c1sxXT9hcmd1bWVudHNbMV06e30sbj10aGlzLmxvb2t1cCgiZW5naW5lOiIrZSkKLWlmKCFu
KXRocm93IG5ldyBpLkVycm9yKCJZb3UgYXR0ZW1wdGVkIHRvIG1vdW50IHRoZSBlbmdpbmUgJyIr
ZSsiJywgYnV0IGl0IGlzIG5vdCByZWdpc3RlcmVkIHdpdGggaXRzIHBhcmVudC4iKQotdmFyIHI9
bi5idWlsZEluc3RhbmNlKHQpCi1yZXR1cm4oMCxhLnNldEVuZ2luZVBhcmVudCkocix0aGlzKSxy
fSxjbG9uZVBhcmVudERlcGVuZGVuY2llczpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD0oMCxhLmdl
dEVuZ2luZVBhcmVudCkodGhpcyk7WyJyb3V0ZTpiYXNpYyIsInNlcnZpY2U6LXJvdXRpbmciLCJz
ZXJ2aWNlOi1nbGltbWVyLWVudmlyb25tZW50Il0uZm9yRWFjaChmdW5jdGlvbihuKXtyZXR1cm4g
ZS5yZWdpc3RlcihuLHQucmVzb2x2ZVJlZ2lzdHJhdGlvbihuKSl9KQotdmFyIG49dC5sb29rdXAo
Ii1lbnZpcm9ubWVudDptYWluIikKLXRoaXMucmVnaXN0ZXIoIi1lbnZpcm9ubWVudDptYWluIixu
LHtpbnN0YW50aWF0ZTohMX0pLFsicm91dGVyOm1haW4iLCgwLHMucHJpdmF0aXplKSh1KSwiLXZp
ZXctcmVnaXN0cnk6bWFpbiIsInJlbmRlcmVyOi0iKyhuLmlzSW50ZXJhY3RpdmU/ImRvbSI6Imlu
ZXJ0IiksInNlcnZpY2U6LWRvY3VtZW50IiwiZXZlbnRfZGlzcGF0Y2hlcjptYWluIl0uZm9yRWFj
aChmdW5jdGlvbihuKXtyZXR1cm4gZS5yZWdpc3RlcihuLHQubG9va3VwKG4pLHtpbnN0YW50aWF0
ZTohMX0pfSksdGhpcy5pbmplY3QoInZpZXciLCJfZW52aXJvbm1lbnQiLCItZW52aXJvbm1lbnQ6
bWFpbiIpLHRoaXMuaW5qZWN0KCJyb3V0ZSIsIl9lbnZpcm9ubWVudCIsIi1lbnZpcm9ubWVudDpt
YWluIil9fSkKLWwucmVvcGVuQ2xhc3Moe3NldHVwUmVnaXN0cnk6ZnVuY3Rpb24oZSx0KXt0JiYo
ZS5pbmplY3Rpb24oInZpZXciLCJfZW52aXJvbm1lbnQiLCItZW52aXJvbm1lbnQ6bWFpbiIpLGUu
aW5qZWN0aW9uKCJyb3V0ZSIsIl9lbnZpcm9ubWVudCIsIi1lbnZpcm9ubWVudDptYWluIiksdC5p
c0ludGVyYWN0aXZlPyhlLmluamVjdGlvbigidmlldyIsInJlbmRlcmVyIiwicmVuZGVyZXI6LWRv
bSIpLGUuaW5qZWN0aW9uKCJjb21wb25lbnQiLCJyZW5kZXJlciIsInJlbmRlcmVyOi1kb20iKSk6
KGUuaW5qZWN0aW9uKCJ2aWV3IiwicmVuZGVyZXIiLCJyZW5kZXJlcjotaW5lcnQiKSxlLmluamVj
dGlvbigiY29tcG9uZW50IiwicmVuZGVyZXIiLCJyZW5kZXJlcjotaW5lcnQiKSkpfX0pLGUuZGVm
YXVsdD1sfSksZSgiZW1iZXItYXBwbGljYXRpb24vc3lzdGVtL2VuZ2luZS1wYXJlbnQiLFsiZXhw
b3J0cyIsImVtYmVyLXV0aWxzIl0sZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCIKLWUuRU5HSU5F
X1BBUkVOVD12b2lkIDAsZS5nZXRFbmdpbmVQYXJlbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGVbbl19
LGUuc2V0RW5naW5lUGFyZW50PWZ1bmN0aW9uKGUsdCl7ZVtuXT10fQotdmFyIG49ZS5FTkdJTkVf
UEFSRU5UPSgwLHQuc3ltYm9sKSgiRU5HSU5FX1BBUkVOVCIpfSksZSgiZW1iZXItYXBwbGljYXRp
b24vc3lzdGVtL2VuZ2luZSIsWyJleHBvcnRzIiwiZW1iZXItYmFiZWwiLCJlbWJlci11dGlscyIs
ImVtYmVyLXJ1bnRpbWUiLCJjb250YWluZXIiLCJkYWctbWFwIiwiZW1iZXItZGVidWciLCJlbWJl
ci1tZXRhbCIsImVtYmVyLWFwcGxpY2F0aW9uL3N5c3RlbS9yZXNvbHZlciIsImVtYmVyLWFwcGxp
Y2F0aW9uL3N5c3RlbS9lbmdpbmUtaW5zdGFuY2UiLCJlbWJlci1yb3V0aW5nIiwiZW1iZXItZXh0
ZW5zaW9uLXN1cHBvcnQiLCJlbWJlci12aWV3cyIsImVtYmVyLWdsaW1tZXIiXSxmdW5jdGlvbihl
LHQsbixyLGksbyxzLGEsdSxsLGMscCxmLGgpeyJ1c2Ugc3RyaWN0IgotZnVuY3Rpb24gZChlKXt2
YXIgdD1bXQotZm9yKHZhciBuIGluIGUpdC5wdXNoKG4pCi1yZXR1cm4gdH1mdW5jdGlvbiBtKGUp
e3JldHVybihlLmdldCgiUmVzb2x2ZXIiKXx8dS5kZWZhdWx0KS5jcmVhdGUoe25hbWVzcGFjZTpl
fSl9ZnVuY3Rpb24gZyhlLHQpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgbgotdm9pZCAwIT09dGhp
cy5zdXBlcmNsYXNzW2VdJiZ0aGlzLnN1cGVyY2xhc3NbZV09PT10aGlzW2VdJiYobj17fSxuW2Vd
PU9iamVjdC5jcmVhdGUodGhpc1tlXSksdGhpcy5yZW9wZW5DbGFzcyhuKSksdGhpc1tlXVt0Lm5h
bWVdPXR9fWZ1bmN0aW9uIHkoZSl7ZS5vcHRpb25zRm9yVHlwZSgiY29tcG9uZW50Iix7c2luZ2xl
dG9uOiExfSksZS5vcHRpb25zRm9yVHlwZSgidmlldyIse3NpbmdsZXRvbjohMX0pLGUucmVnaXN0
ZXIoImNvbnRyb2xsZXI6YmFzaWMiLHIuQ29udHJvbGxlcix7aW5zdGFudGlhdGU6ITF9KSxlLmlu
amVjdGlvbigidmlldyIsIl92aWV3UmVnaXN0cnkiLCItdmlldy1yZWdpc3RyeTptYWluIiksZS5p
bmplY3Rpb24oInJlbmRlcmVyIiwiX3ZpZXdSZWdpc3RyeSIsIi12aWV3LXJlZ2lzdHJ5Om1haW4i
KSxlLmluamVjdGlvbigiZXZlbnRfZGlzcGF0Y2hlcjptYWluIiwiX3ZpZXdSZWdpc3RyeSIsIi12
aWV3LXJlZ2lzdHJ5Om1haW4iKSxlLmluamVjdGlvbigicm91dGUiLCJfdG9wTGV2ZWxWaWV3VGVt
cGxhdGUiLCJ0ZW1wbGF0ZTotb3V0bGV0IiksZS5pbmplY3Rpb24oInZpZXc6LW91dGxldCIsIm5h
bWVzcGFjZSIsImFwcGxpY2F0aW9uOm1haW4iKSxlLmluamVjdGlvbigiY29udHJvbGxlciIsInRh
cmdldCIsInJvdXRlcjptYWluIiksZS5pbmplY3Rpb24oImNvbnRyb2xsZXIiLCJuYW1lc3BhY2Ui
LCJhcHBsaWNhdGlvbjptYWluIiksZS5pbmplY3Rpb24oInJvdXRlciIsIl9idWNrZXRDYWNoZSIs
KDAsaS5wcml2YXRpemUpKHYpKSxlLmluamVjdGlvbigicm91dGUiLCJfYnVja2V0Q2FjaGUiLCgw
LGkucHJpdmF0aXplKSh2KSksZS5pbmplY3Rpb24oInJvdXRlIiwicm91dGVyIiwicm91dGVyOm1h
aW4iKSxlLnJlZ2lzdGVyKCJzZXJ2aWNlOi1yb3V0aW5nIixjLlJvdXRpbmdTZXJ2aWNlKSxlLmlu
amVjdGlvbigic2VydmljZTotcm91dGluZyIsInJvdXRlciIsInJvdXRlcjptYWluIiksZS5yZWdp
c3RlcigicmVzb2x2ZXItZm9yLWRlYnVnZ2luZzptYWluIixlLnJlc29sdmVyLHtpbnN0YW50aWF0
ZTohMX0pLGUuaW5qZWN0aW9uKCJjb250YWluZXItZGVidWctYWRhcHRlcjptYWluIiwicmVzb2x2
ZXIiLCJyZXNvbHZlci1mb3ItZGVidWdnaW5nOm1haW4iKSxlLmluamVjdGlvbigiZGF0YS1hZGFw
dGVyOm1haW4iLCJjb250YWluZXJEZWJ1Z0FkYXB0ZXIiLCJjb250YWluZXItZGVidWctYWRhcHRl
cjptYWluIiksZS5yZWdpc3RlcigiY29udGFpbmVyLWRlYnVnLWFkYXB0ZXI6bWFpbiIscC5Db250
YWluZXJEZWJ1Z0FkYXB0ZXIpLGUucmVnaXN0ZXIoImNvbXBvbmVudC1sb29rdXA6bWFpbiIsZi5D
b21wb25lbnRMb29rdXApfXZhciB2PSgwLHQudGFnZ2VkVGVtcGxhdGVMaXRlcmFsTG9vc2UpKFsi
LWJ1Y2tldC1jYWNoZTptYWluIl0sWyItYnVja2V0LWNhY2hlOm1haW4iXSksYj1yLk5hbWVzcGFj
ZS5leHRlbmQoci5SZWdpc3RyeVByb3h5TWl4aW4se2luaXQ6ZnVuY3Rpb24oKXt0aGlzLl9zdXBl
ci5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5idWlsZFJlZ2lzdHJ5KCl9LF9pbml0aWFsaXpl
cnNSYW46ITEsZW5zdXJlSW5pdGlhbGl6ZXJzOmZ1bmN0aW9uKCl7dGhpcy5faW5pdGlhbGl6ZXJz
UmFufHwodGhpcy5ydW5Jbml0aWFsaXplcnMoKSx0aGlzLl9pbml0aWFsaXplcnNSYW49ITApfSxi
dWlsZEluc3RhbmNlOmZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAh
PT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9Ci1yZXR1cm4gdGhpcy5lbnN1cmVJbml0aWFs
aXplcnMoKSxlLmJhc2U9dGhpcyxsLmRlZmF1bHQuY3JlYXRlKGUpfSxidWlsZFJlZ2lzdHJ5OmZ1
bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19yZWdpc3RyeV9fPXRoaXMuY29uc3RydWN0b3IuYnVpbGRS
ZWdpc3RyeSh0aGlzKX0saW5pdGlhbGl6ZXI6ZnVuY3Rpb24oZSl7dGhpcy5jb25zdHJ1Y3Rvci5p
bml0aWFsaXplcihlKX0saW5zdGFuY2VJbml0aWFsaXplcjpmdW5jdGlvbihlKXt0aGlzLmNvbnN0
cnVjdG9yLmluc3RhbmNlSW5pdGlhbGl6ZXIoZSl9LHJ1bkluaXRpYWxpemVyczpmdW5jdGlvbigp
e3ZhciBlPXRoaXMKLXRoaXMuX3J1bkluaXRpYWxpemVyKCJpbml0aWFsaXplcnMiLGZ1bmN0aW9u
KHQsbil7Mj09PW4uaW5pdGlhbGl6ZS5sZW5ndGg/bi5pbml0aWFsaXplKGUuX19yZWdpc3RyeV9f
LGUpOm4uaW5pdGlhbGl6ZShlKX0pfSxydW5JbnN0YW5jZUluaXRpYWxpemVyczpmdW5jdGlvbihl
KXt0aGlzLl9ydW5Jbml0aWFsaXplcigiaW5zdGFuY2VJbml0aWFsaXplcnMiLGZ1bmN0aW9uKHQs
bil7bi5pbml0aWFsaXplKGUpfSl9LF9ydW5Jbml0aWFsaXplcjpmdW5jdGlvbihlLHQpe3ZhciBu
LHI9KDAsYS5nZXQpKHRoaXMuY29uc3RydWN0b3IsZSksaT1kKHIpLHM9bmV3IG8uZGVmYXVsdCx1
PXZvaWQgMAotZm9yKG49MDtuPGkubGVuZ3RoO24rKyl1PXJbaVtuXV0scy5hZGQodS5uYW1lLHUs
dS5iZWZvcmUsdS5hZnRlcikKLXMudG9wc29ydCh0KX19KQotYi5yZW9wZW5DbGFzcyh7aW5pdGlh
bGl6ZXJzOk9iamVjdC5jcmVhdGUobnVsbCksaW5zdGFuY2VJbml0aWFsaXplcnM6T2JqZWN0LmNy
ZWF0ZShudWxsKSxpbml0aWFsaXplcjpnKCJpbml0aWFsaXplcnMiLCJpbml0aWFsaXplciIpLGlu
c3RhbmNlSW5pdGlhbGl6ZXI6ZygiaW5zdGFuY2VJbml0aWFsaXplcnMiLCJpbnN0YW5jZSBpbml0
aWFsaXplciIpLGJ1aWxkUmVnaXN0cnk6ZnVuY3Rpb24oZSl7YXJndW1lbnRzLmxlbmd0aD4xJiZ2
b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXQotdmFyIHQ9bmV3IGkuUmVnaXN0cnko
e3Jlc29sdmVyOm0oZSl9KQotcmV0dXJuIHQuc2V0PWEuc2V0LHQucmVnaXN0ZXIoImFwcGxpY2F0
aW9uOm1haW4iLGUse2luc3RhbnRpYXRlOiExfSkseSh0KSwoMCxoLnNldHVwRW5naW5lUmVnaXN0
cnkpKHQpLHR9LHJlc29sdmVyOm51bGwsUmVzb2x2ZXI6bnVsbH0pLGUuZGVmYXVsdD1ifSksZSgi
ZW1iZXItYXBwbGljYXRpb24vc3lzdGVtL3Jlc29sdmVyIixbImV4cG9ydHMiLCJlbWJlci11dGls
cyIsImVtYmVyLW1ldGFsIiwiZW1iZXItZGVidWciLCJlbWJlci1ydW50aW1lIiwiZW1iZXItYXBw
bGljYXRpb24vdXRpbHMvdmFsaWRhdGUtdHlwZSIsImVtYmVyLWdsaW1tZXIiXSxmdW5jdGlvbihl
LHQsbixyLGksbyxzKXsidXNlIHN0cmljdCIKLWUuUmVzb2x2ZXI9dm9pZCAwLGUuUmVzb2x2ZXI9
aS5PYmplY3QuZXh0ZW5kKHtuYW1lc3BhY2U6bnVsbCxub3JtYWxpemU6bnVsbCxyZXNvbHZlOm51
bGwscGFyc2VOYW1lOm51bGwsbG9va3VwRGVzY3JpcHRpb246bnVsbCxtYWtlVG9TdHJpbmc6bnVs
bCxyZXNvbHZlT3RoZXI6bnVsbCxfbG9nTG9va3VwOm51bGx9KSxlLmRlZmF1bHQ9aS5PYmplY3Qu
ZXh0ZW5kKHtuYW1lc3BhY2U6bnVsbCxpbml0OmZ1bmN0aW9uKCl7dGhpcy5fcGFyc2VOYW1lQ2Fj
aGU9KDAsdC5kaWN0aW9uYXJ5KShudWxsKX0sbm9ybWFsaXplOmZ1bmN0aW9uKGUpe3ZhciB0LG49
ZS5zcGxpdCgiOiIsMikscj1uWzBdLGk9blsxXQotcmV0dXJuInRlbXBsYXRlIiE9PXI/KHQ9aSx0
LmluZGV4T2YoIi4iKT4tMSYmKHQ9dC5yZXBsYWNlKC9cLiguKS9nLGZ1bmN0aW9uKGUpe3JldHVy
biBlLmNoYXJBdCgxKS50b1VwcGVyQ2FzZSgpfSkpLGkuaW5kZXhPZigiXyIpPi0xJiYodD10LnJl
cGxhY2UoL18oLikvZyxmdW5jdGlvbihlKXtyZXR1cm4gZS5jaGFyQXQoMSkudG9VcHBlckNhc2Uo
KX0pKSxpLmluZGV4T2YoIi0iKT4tMSYmKHQ9dC5yZXBsYWNlKC8tKC4pL2csZnVuY3Rpb24oZSl7
cmV0dXJuIGUuY2hhckF0KDEpLnRvVXBwZXJDYXNlKCl9KSkscisiOiIrdCk6ZX0scmVzb2x2ZTpm
dW5jdGlvbihlKXt2YXIgdD10aGlzLnBhcnNlTmFtZShlKSxuPXQucmVzb2x2ZU1ldGhvZE5hbWUs
cj12b2lkIDAKLXJldHVybiB0aGlzW25dJiYocj10aGlzW25dKHQpKSxyPXJ8fHRoaXMucmVzb2x2
ZU90aGVyKHQpLHImJigwLG8uZGVmYXVsdCkocix0KSxyfSxwYXJzZU5hbWU6ZnVuY3Rpb24oZSl7
cmV0dXJuIHRoaXMuX3BhcnNlTmFtZUNhY2hlW2VdfHwodGhpcy5fcGFyc2VOYW1lQ2FjaGVbZV09
dGhpcy5fcGFyc2VOYW1lKGUpKX0sX3BhcnNlTmFtZTpmdW5jdGlvbihlKXt2YXIgdCxyLG89ZS5z
cGxpdCgiOiIpLHM9b1swXSxhPW9bMV0sdT1hLGw9KDAsbi5nZXQpKHRoaXMsIm5hbWVzcGFjZSIp
LGM9bCxwPXUubGFzdEluZGV4T2YoIi8iKSxmPS0xIT09cD91LnNsaWNlKDAscCk6bnVsbAotInRl
bXBsYXRlIiE9PXMmJi0xIT09cCYmKHQ9dS5zcGxpdCgiLyIpLHU9dFt0Lmxlbmd0aC0xXSxyPWku
U3RyaW5nLmNhcGl0YWxpemUodC5zbGljZSgwLC0xKS5qb2luKCIuIikpLGM9aS5OYW1lc3BhY2Uu
YnlOYW1lKHIpKQotdmFyIGg9Im1haW4iPT09YT8iTWFpbiI6aS5TdHJpbmcuY2xhc3NpZnkocykK
LWlmKCF1fHwhcyl0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGZ1bGxOYW1lOiBgIitlKyJg
LCBtdXN0IGJlIG9mIHRoZSBmb3JtIGB0eXBlOm5hbWVgICIpCi1yZXR1cm57ZnVsbE5hbWU6ZSx0
eXBlOnMsZnVsbE5hbWVXaXRob3V0VHlwZTphLGRpcm5hbWU6ZixuYW1lOnUscm9vdDpjLHJlc29s
dmVNZXRob2ROYW1lOiJyZXNvbHZlIitofX0sbG9va3VwRGVzY3JpcHRpb246ZnVuY3Rpb24oZSl7
dmFyIHQ9dGhpcy5wYXJzZU5hbWUoZSksbj12b2lkIDAKLXJldHVybiJ0ZW1wbGF0ZSI9PT10LnR5
cGU/InRlbXBsYXRlIGF0ICIrdC5mdWxsTmFtZVdpdGhvdXRUeXBlLnJlcGxhY2UoL1wuL2csIi8i
KToobj10LnJvb3QrIi4iK2kuU3RyaW5nLmNsYXNzaWZ5KHQubmFtZSkucmVwbGFjZSgvXC4vZywi
IiksIm1vZGVsIiE9PXQudHlwZSYmKG4rPWkuU3RyaW5nLmNsYXNzaWZ5KHQudHlwZSkpLG4pfSxt
YWtlVG9TdHJpbmc6ZnVuY3Rpb24oZSl7cmV0dXJuIGUudG9TdHJpbmcoKX0sdXNlUm91dGVyTmFt
aW5nOmZ1bmN0aW9uKGUpe2UubmFtZT1lLm5hbWUucmVwbGFjZSgvXC4vZywiXyIpLCJiYXNpYyI9
PT1lLm5hbWUmJihlLm5hbWU9IiIpfSxyZXNvbHZlVGVtcGxhdGU6ZnVuY3Rpb24oZSl7dmFyIHQ9
ZS5mdWxsTmFtZVdpdGhvdXRUeXBlLnJlcGxhY2UoL1wuL2csIi8iKQotcmV0dXJuKDAscy5nZXRU
ZW1wbGF0ZSkodCl8fCgwLHMuZ2V0VGVtcGxhdGUpKGkuU3RyaW5nLmRlY2FtZWxpemUodCkpfSxy
ZXNvbHZlVmlldzpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy51c2VSb3V0ZXJOYW1pbmcoZSksdGhp
cy5yZXNvbHZlT3RoZXIoZSl9LHJlc29sdmVDb250cm9sbGVyOmZ1bmN0aW9uKGUpe3JldHVybiB0
aGlzLnVzZVJvdXRlck5hbWluZyhlKSx0aGlzLnJlc29sdmVPdGhlcihlKX0scmVzb2x2ZVJvdXRl
OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnVzZVJvdXRlck5hbWluZyhlKSx0aGlzLnJlc29sdmVP
dGhlcihlKX0scmVzb2x2ZU1vZGVsOmZ1bmN0aW9uKGUpe3ZhciB0PWkuU3RyaW5nLmNsYXNzaWZ5
KGUubmFtZSkKLXJldHVybigwLG4uZ2V0KShlLnJvb3QsdCl9LHJlc29sdmVIZWxwZXI6ZnVuY3Rp
b24oZSl7cmV0dXJuIHRoaXMucmVzb2x2ZU90aGVyKGUpfSxyZXNvbHZlT3RoZXI6ZnVuY3Rpb24o
ZSl7dmFyIHQ9aS5TdHJpbmcuY2xhc3NpZnkoZS5uYW1lKStpLlN0cmluZy5jbGFzc2lmeShlLnR5
cGUpCi1yZXR1cm4oMCxuLmdldCkoZS5yb290LHQpfSxyZXNvbHZlTWFpbjpmdW5jdGlvbihlKXt2
YXIgdD1pLlN0cmluZy5jbGFzc2lmeShlLnR5cGUpCi1yZXR1cm4oMCxuLmdldCkoZS5yb290LHQp
fSxfbG9nTG9va3VwOmZ1bmN0aW9uKGUsdCl7dmFyIG49dm9pZCAwLGk9dm9pZCAwCi1uPWU/Ilvi
nJNdIjoiWyBdIixpPXQuZnVsbE5hbWUubGVuZ3RoPjYwPyIuIjpuZXcgQXJyYXkoNjAtdC5mdWxs
TmFtZS5sZW5ndGgpLmpvaW4oIi4iKSwoMCxyLmluZm8pKG4sdC5mdWxsTmFtZSxpLHRoaXMubG9v
a3VwRGVzY3JpcHRpb24odC5mdWxsTmFtZSkpfSxrbm93bkZvclR5cGU6ZnVuY3Rpb24oZSl7dmFy
IHIsbyxzLGE9KDAsbi5nZXQpKHRoaXMsIm5hbWVzcGFjZSIpLHU9aS5TdHJpbmcuY2xhc3NpZnko
ZSksbD1uZXcgUmVnRXhwKHUrIiQiKSxjPSgwLHQuZGljdGlvbmFyeSkobnVsbCkscD1PYmplY3Qu
a2V5cyhhKQotZm9yKHI9MDtyPHAubGVuZ3RoO3IrKylvPXBbcl0sbC50ZXN0KG8pJiYocz10aGlz
LnRyYW5zbGF0ZVRvQ29udGFpbmVyRnVsbG5hbWUoZSxvKSxjW3NdPSEwKQotcmV0dXJuIGN9LHRy
YW5zbGF0ZVRvQ29udGFpbmVyRnVsbG5hbWU6ZnVuY3Rpb24oZSx0KXt2YXIgbj1pLlN0cmluZy5j
bGFzc2lmeShlKSxyPXQuc2xpY2UoMCwtMSpuLmxlbmd0aCkKLXJldHVybiBlKyI6IitpLlN0cmlu
Zy5kYXNoZXJpemUocil9fSl9KSxlKCJlbWJlci1hcHBsaWNhdGlvbi91dGlscy92YWxpZGF0ZS10
eXBlIixbImV4cG9ydHMiLCJlbWJlci1kZWJ1ZyJdLGZ1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3Qi
Ci1lLmRlZmF1bHQ9ZnVuY3Rpb24oZSx0KXt2YXIgcj1uW3QudHlwZV0KLWlmKHIpe3JbMF0sclsx
XSxyWzJdfX0KLXZhciBuPXtyb3V0ZTpbImFzc2VydCIsImlzUm91dGVGYWN0b3J5IiwiRW1iZXIu
Um91dGUiXSxjb21wb25lbnQ6WyJkZXByZWNhdGUiLCJpc0NvbXBvbmVudEZhY3RvcnkiLCJFbWJl
ci5Db21wb25lbnQiXSx2aWV3OlsiZGVwcmVjYXRlIiwiaXNWaWV3RmFjdG9yeSIsIkVtYmVyLlZp
ZXciXSxzZXJ2aWNlOlsiZGVwcmVjYXRlIiwiaXNTZXJ2aWNlRmFjdG9yeSIsIkVtYmVyLlNlcnZp
Y2UiXX19KSxlKCJlbWJlci1iYWJlbCIsWyJleHBvcnRzIl0sZnVuY3Rpb24oZSl7InVzZSBzdHJp
Y3QiCi1mdW5jdGlvbiB0KGUsdCl7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3Rv
dHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25m
aWd1cmFibGU6ITB9fSksdCYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90
eXBlT2YoZSx0KTpvKGUsdCkpfWZ1bmN0aW9uIG4oZSx0KXtyZXR1cm4gZS5yYXc9dCxlfWZ1bmN0
aW9uIHIoZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXQotci5lbnVt
ZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsInZhbHVlImluIHImJihy
LndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLmtleSxyKX19ZnVuY3Rpb24g
aShlLHQsbil7cmV0dXJuIHQmJnIoZS5wcm90b3R5cGUsdCksbiYmcihlLG4pLGV9ZnVuY3Rpb24g
byhlLHQpe2Zvcih2YXIgbj1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0KSxyPTA7cjxuLmxl
bmd0aDtyKyspe3ZhciBpPW5bcl0sbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQs
aSkKLW8mJm8uY29uZmlndXJhYmxlJiZ2b2lkIDA9PT1lW2ldJiZPYmplY3QuZGVmaW5lUHJvcGVy
dHkoZSxpLG8pfXJldHVybiBlfWUuaW5oZXJpdHM9dCxlLnRhZ2dlZFRlbXBsYXRlTGl0ZXJhbExv
b3NlPW4sZS5jcmVhdGVDbGFzcz1pLGUuZGVmYXVsdHM9bwotZS5wb3NzaWJsZUNvbnN0cnVjdG9y
UmV0dXJuPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIXR8fCJvYmplY3QiIT10eXBlb2YgdCYmImZ1bmN0
aW9uIiE9dHlwZW9mIHQ/ZTp0fSxlLnNsaWNlPUFycmF5LnByb3RvdHlwZS5zbGljZX0pLGUoImVt
YmVyLWNvbnNvbGUiLFsiZXhwb3J0cyIsImVtYmVyLWVudmlyb25tZW50Il0sZnVuY3Rpb24oZSx0
KXsidXNlIHN0cmljdCIKLWZ1bmN0aW9uIG4oKXt9ZnVuY3Rpb24gcihlKXt2YXIgbj12b2lkIDAK
LXQuY29udGV4dC5pbXBvcnRzLmNvbnNvbGU/bj10LmNvbnRleHQuaW1wb3J0cy5jb25zb2xlOiJ1
bmRlZmluZWQiIT10eXBlb2YgY29uc29sZSYmKG49Y29uc29sZSkKLXZhciByPSJvYmplY3QiPT10
eXBlb2Ygbj9uW2VdOm51bGwKLWlmKCJmdW5jdGlvbiI9PXR5cGVvZiByKXJldHVybiJmdW5jdGlv
biI9PXR5cGVvZiByLmJpbmQ/ci5iaW5kKG4pOmZ1bmN0aW9uKCl7ci5hcHBseShuLGFyZ3VtZW50
cyl9fXZhciBpPXtsb2c6cigibG9nIil8fG4sd2FybjpyKCJ3YXJuIil8fG4sZXJyb3I6cigiZXJy
b3IiKXx8bixpbmZvOnIoImluZm8iKXx8bixkZWJ1ZzpyKCJkZWJ1ZyIpfHxyKCJpbmZvIil8fG4s
YXNzZXJ0OnIoImFzc2VydCIpfHxmdW5jdGlvbihlLHQpe2lmKCFlKXRyeXt0aHJvdyBuZXcgRXJy
b3IoImFzc2VydGlvbiBmYWlsZWQ6ICIrdCl9Y2F0Y2goZSl7c2V0VGltZW91dChmdW5jdGlvbigp
e3Rocm93IGV9LDApfX19Ci1lLmRlZmF1bHQ9aX0pLGUoImVtYmVyLWRlYnVnL2RlcHJlY2F0ZSIs
WyJleHBvcnRzIiwiZW1iZXItZGVidWcvZXJyb3IiLCJlbWJlci1jb25zb2xlIiwiZW1iZXItZW52
aXJvbm1lbnQiLCJlbWJlci1kZWJ1Zy9oYW5kbGVycyJdLGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0
IgotZS5taXNzaW5nT3B0aW9uc1VudGlsRGVwcmVjYXRpb249ZS5taXNzaW5nT3B0aW9uc0lkRGVw
cmVjYXRpb249ZS5taXNzaW5nT3B0aW9uc0RlcHJlY2F0aW9uPWUucmVnaXN0ZXJIYW5kbGVyPXZv
aWQgMCxlLmRlZmF1bHQ9dm9pZCAwLGUucmVnaXN0ZXJIYW5kbGVyPWZ1bmN0aW9uKCl7fSxlLm1p
c3NpbmdPcHRpb25zRGVwcmVjYXRpb249dm9pZCAwLGUubWlzc2luZ09wdGlvbnNJZERlcHJlY2F0
aW9uPXZvaWQgMCxlLm1pc3NpbmdPcHRpb25zVW50aWxEZXByZWNhdGlvbj12b2lkIDB9KSxlKCJl
bWJlci1kZWJ1Zy9lcnJvciIsWyJleHBvcnRzIiwiZW1iZXItYmFiZWwiXSxmdW5jdGlvbihlLHQp
eyJ1c2Ugc3RyaWN0IgotdmFyIG49ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbihyKXt2YXIgaSxvPSgw
LHQucG9zc2libGVDb25zdHJ1Y3RvclJldHVybikodGhpcyxlLmNhbGwodGhpcykpCi1pZighKG8g
aW5zdGFuY2VvZiBuKSlyZXR1cm4gaT1uZXcgbihyKSwoMCx0LnBvc3NpYmxlQ29uc3RydWN0b3JS
ZXR1cm4pKG8saSkKLXZhciBzPUVycm9yLmNhbGwobyxyKQotcmV0dXJuIEVycm9yLmNhcHR1cmVT
dGFja1RyYWNlP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlKG8sbik6by5zdGFjaz1zLnN0YWNrLG8u
ZGVzY3JpcHRpb249cy5kZXNjcmlwdGlvbixvLmZpbGVOYW1lPXMuZmlsZU5hbWUsby5saW5lTnVt
YmVyPXMubGluZU51bWJlcixvLm1lc3NhZ2U9cy5tZXNzYWdlLG8ubmFtZT1zLm5hbWUsby5udW1i
ZXI9cy5udW1iZXIsby5jb2RlPXMuY29kZSxvfXJldHVybigwLHQuaW5oZXJpdHMpKG4sZSksbn0o
ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0
LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKSx0LnByb3RvdHlwZS5jb25zdHJ1
Y3Rvcj10LHR9KEVycm9yKSkKLWUuZGVmYXVsdD1ufSksZSgiZW1iZXItZGVidWcvZmVhdHVyZXMi
LFsiZXhwb3J0cyIsImVtYmVyLWVudmlyb25tZW50IiwiZW1iZXIvZmVhdHVyZXMiXSxmdW5jdGlv
bihlLHQsbil7InVzZSBzdHJpY3QiCi1lLmRlZmF1bHQ9ZnVuY3Rpb24oZSl7dmFyIG49cltlXQot
cmV0dXJuITA9PT1ufHwhMT09PW58fHZvaWQgMD09PW4/bjohIXQuRU5WLkVOQUJMRV9PUFRJT05B
TF9GRUFUVVJFU30KLXZhciByPW4uRkVBVFVSRVN9KSxlKCJlbWJlci1kZWJ1Zy9oYW5kbGVycyIs
WyJleHBvcnRzIl0sZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiCi1lLkhBTkRMRVJTPXt9LGUucmVn
aXN0ZXJIYW5kbGVyPWZ1bmN0aW9uKCl7fSxlLmludm9rZT1mdW5jdGlvbigpe319KSxlKCJlbWJl
ci1kZWJ1Zy9pbmRleCIsWyJleHBvcnRzIiwiZW1iZXItZGVidWcvd2FybiIsImVtYmVyLWRlYnVn
L2RlcHJlY2F0ZSIsImVtYmVyLWRlYnVnL2ZlYXR1cmVzIiwiZW1iZXItZGVidWcvZXJyb3IiLCJl
bWJlci1kZWJ1Zy90ZXN0aW5nIiwiZW1iZXItZW52aXJvbm1lbnQiLCJlbWJlci1jb25zb2xlIiwi
ZW1iZXIvZmVhdHVyZXMiXSxmdW5jdGlvbihlLHQsbixyLGksbyxzLGEsdSl7InVzZSBzdHJpY3Qi
Ci1lLl93YXJuSWZVc2luZ1N0cmlwcGVkRmVhdHVyZUZsYWdzPWUuZ2V0RGVidWdGdW5jdGlvbj1l
LnNldERlYnVnRnVuY3Rpb249ZS5kZXByZWNhdGVGdW5jPWUucnVuSW5EZWJ1Zz1lLmRlYnVnRnJl
ZXplPWUuZGVidWdTZWFsPWUuZGVwcmVjYXRlPWUuZGVidWc9ZS53YXJuPWUuaW5mbz1lLmFzc2Vy
dD1lLnNldFRlc3Rpbmc9ZS5pc1Rlc3Rpbmc9ZS5FcnJvcj1lLmlzRmVhdHVyZUVuYWJsZWQ9ZS5y
ZWdpc3RlckRlcHJlY2F0aW9uSGFuZGxlcj1lLnJlZ2lzdGVyV2FybkhhbmRsZXI9dm9pZCAwLE9i
amVjdC5kZWZpbmVQcm9wZXJ0eShlLCJyZWdpc3Rlcldhcm5IYW5kbGVyIix7ZW51bWVyYWJsZToh
MCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdC5yZWdpc3RlckhhbmRsZXJ9fSksT2JqZWN0LmRlZmlu
ZVByb3BlcnR5KGUsInJlZ2lzdGVyRGVwcmVjYXRpb25IYW5kbGVyIix7ZW51bWVyYWJsZTohMCxn
ZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbi5yZWdpc3RlckhhbmRsZXJ9fSksT2JqZWN0LmRlZmluZVBy
b3BlcnR5KGUsImlzRmVhdHVyZUVuYWJsZWQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigp
e3JldHVybiByLmRlZmF1bHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIkVycm9yIix7ZW51
bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5kZWZhdWx0fX0pLE9iamVjdC5kZWZp
bmVQcm9wZXJ0eShlLCJpc1Rlc3RpbmciLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3Jl
dHVybiBvLmlzVGVzdGluZ319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwic2V0VGVzdGluZyIs
e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uc2V0VGVzdGluZ319KQotdS5E
RUZBVUxUX0ZFQVRVUkVTLHUuRkVBVFVSRVMKLWUuYXNzZXJ0PWZ1bmN0aW9uKCl7fSxlLmluZm89
ZnVuY3Rpb24oKXt9LGUud2Fybj1mdW5jdGlvbigpe30sZS5kZWJ1Zz1mdW5jdGlvbigpe30sZS5k
ZXByZWNhdGU9ZnVuY3Rpb24oKXt9LGUuZGVidWdTZWFsPWZ1bmN0aW9uKCl7fSxlLmRlYnVnRnJl
ZXplPWZ1bmN0aW9uKCl7fSxlLnJ1bkluRGVidWc9ZnVuY3Rpb24oKXt9LGUuZGVwcmVjYXRlRnVu
Yz1mdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aC0xXX0sZS5zZXRE
ZWJ1Z0Z1bmN0aW9uPWZ1bmN0aW9uKCl7fSxlLmdldERlYnVnRnVuY3Rpb249ZnVuY3Rpb24oKXt9
LGUuX3dhcm5JZlVzaW5nU3RyaXBwZWRGZWF0dXJlRmxhZ3M9dm9pZCAwfSksZSgiZW1iZXItZGVi
dWcvdGVzdGluZyIsWyJleHBvcnRzIl0sZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiCi1lLmlzVGVz
dGluZz1mdW5jdGlvbigpe3JldHVybiB0fSxlLnNldFRlc3Rpbmc9ZnVuY3Rpb24oZSl7dD0hIWV9
Ci12YXIgdD0hMX0pLGUoImVtYmVyLWRlYnVnL3dhcm4iLFsiZXhwb3J0cyIsImVtYmVyLWNvbnNv
bGUiLCJlbWJlci1kZWJ1Zy9kZXByZWNhdGUiLCJlbWJlci1kZWJ1Zy9oYW5kbGVycyJdLGZ1bmN0
aW9uKGUpeyJ1c2Ugc3RyaWN0IgotZS5taXNzaW5nT3B0aW9uc0RlcHJlY2F0aW9uPWUubWlzc2lu
Z09wdGlvbnNJZERlcHJlY2F0aW9uPWUucmVnaXN0ZXJIYW5kbGVyPXZvaWQgMCxlLmRlZmF1bHQ9
ZnVuY3Rpb24oKXt9LGUucmVnaXN0ZXJIYW5kbGVyPWZ1bmN0aW9uKCl7fSxlLm1pc3NpbmdPcHRp
b25zSWREZXByZWNhdGlvbj12b2lkIDAsZS5taXNzaW5nT3B0aW9uc0RlcHJlY2F0aW9uPXZvaWQg
MH0pLGUoImVtYmVyLWVudmlyb25tZW50IixbImV4cG9ydHMiXSxmdW5jdGlvbihlKXsidXNlIHN0
cmljdCIKLWZ1bmN0aW9uIHQoZSl7cmV0dXJuIGUmJmUuT2JqZWN0PT09T2JqZWN0P2U6dm9pZCAw
fWZ1bmN0aW9uIG4oZSl7cmV0dXJuITEhPT1lfWZ1bmN0aW9uIGkoZSl7cmV0dXJuITA9PT1lfXZh
ciBvPXQoZnVuY3Rpb24oZSl7cmV0dXJuIGUmJnZvaWQgMD09PWUubm9kZVR5cGU/ZTp2b2lkIDB9
KCJvYmplY3QiPT10eXBlb2YgZ2xvYmFsJiZnbG9iYWwpKXx8dCgib2JqZWN0Ij09dHlwZW9mIHNl
bGYmJnNlbGYpfHx0KCJvYmplY3QiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cpfHxyfHxuZXcgRnVu
Y3Rpb24oInJldHVybiB0aGlzIikoKSxzPSJvYmplY3QiPT10eXBlb2Ygby5FbWJlckVOViYmby5F
bWJlckVOVnx8Im9iamVjdCI9PXR5cGVvZiBvLkVOViYmby5FTlZ8fHt9Ci1zLkVOQUJMRV9BTExf
RkVBVFVSRVMmJihzLkVOQUJMRV9PUFRJT05BTF9GRUFUVVJFUz0hMCkscy5FWFRFTkRfUFJPVE9U
WVBFUz1mdW5jdGlvbihlKXtyZXR1cm4hMT09PWU/e1N0cmluZzohMSxBcnJheTohMSxGdW5jdGlv
bjohMX06ZSYmITAhPT1lP3tTdHJpbmc6bihlLlN0cmluZyksQXJyYXk6bihlLkFycmF5KSxGdW5j
dGlvbjpuKGUuRnVuY3Rpb24pfTp7U3RyaW5nOiEwLEFycmF5OiEwLEZ1bmN0aW9uOiEwfX0ocy5F
WFRFTkRfUFJPVE9UWVBFUykscy5MT0dfU1RBQ0tUUkFDRV9PTl9ERVBSRUNBVElPTj1uKHMuTE9H
X1NUQUNLVFJBQ0VfT05fREVQUkVDQVRJT04pLHMuTE9HX1ZFUlNJT049bihzLkxPR19WRVJTSU9O
KSxzLkxPR19CSU5ESU5HUz1pKHMuTE9HX0JJTkRJTkdTKSxzLlJBSVNFX09OX0RFUFJFQ0FUSU9O
PWkocy5SQUlTRV9PTl9ERVBSRUNBVElPTikKLXZhciBhPSJ1bmRlZmluZWQiIT10eXBlb2Ygd2lu
ZG93JiZ3aW5kb3c9PT1vJiZ3aW5kb3cuZG9jdW1lbnQmJndpbmRvdy5kb2N1bWVudC5jcmVhdGVF
bGVtZW50JiYhcy5kaXNhYmxlQnJvd3NlckVudmlyb25tZW50LHU9by5FbWJlcnx8e30sbD17aW1w
b3J0czp1LmltcG9ydHN8fG8sZXhwb3J0czp1LmV4cG9ydHN8fG8sbG9va3VwOnUubG9va3VwfHxv
fSxjPWE/e2hhc0RPTTohMCxpc0Nocm9tZTohIXdpbmRvdy5jaHJvbWUmJiF3aW5kb3cub3BlcmEs
aXNGaXJlZm94OiJ1bmRlZmluZWQiIT10eXBlb2YgSW5zdGFsbFRyaWdnZXIsaXNQaGFudG9tOiEh
d2luZG93LmNhbGxQaGFudG9tLGxvY2F0aW9uOndpbmRvdy5sb2NhdGlvbixoaXN0b3J5OndpbmRv
dy5oaXN0b3J5LHVzZXJBZ2VudDp3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCx3aW5kb3c6d2lu
ZG93fTp7aGFzRE9NOiExLGlzQ2hyb21lOiExLGlzRmlyZWZveDohMSxpc1BoYW50b206ITEsbG9j
YXRpb246bnVsbCxoaXN0b3J5Om51bGwsdXNlckFnZW50OiJMeW54ICh0ZXh0bW9kZSkiLHdpbmRv
dzpudWxsfQotZS5FTlY9cyxlLmNvbnRleHQ9bCxlLmVudmlyb25tZW50PWN9KSxlKCJlbWJlci1l
eHRlbnNpb24tc3VwcG9ydC9jb250YWluZXJfZGVidWdfYWRhcHRlciIsWyJleHBvcnRzIiwiZW1i
ZXItbWV0YWwiLCJlbWJlci1ydW50aW1lIl0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Igot
ZS5kZWZhdWx0PW4uT2JqZWN0LmV4dGVuZCh7cmVzb2x2ZXI6bnVsbCxjYW5DYXRhbG9nRW50cmll
c0J5VHlwZTpmdW5jdGlvbihlKXtyZXR1cm4ibW9kZWwiIT09ZSYmInRlbXBsYXRlIiE9PWV9LGNh
dGFsb2dFbnRyaWVzQnlUeXBlOmZ1bmN0aW9uKGUpe3ZhciByPSgwLG4uQSkobi5OYW1lc3BhY2Uu
TkFNRVNQQUNFUyksaT0oMCxuLkEpKCksbz1uZXcgUmVnRXhwKG4uU3RyaW5nLmNsYXNzaWZ5KGUp
KyIkIikKLXJldHVybiByLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHIKLWlmKGUhPT10LmRlZmF1
bHQpZm9yKHZhciBzIGluIGUpZS5oYXNPd25Qcm9wZXJ0eShzKSYmby50ZXN0KHMpJiYocj1lW3Nd
LCJjbGFzcyI9PT0oMCxuLnR5cGVPZikocikmJmkucHVzaChuLlN0cmluZy5kYXNoZXJpemUocy5y
ZXBsYWNlKG8sIiIpKSkpfSksaX19KX0pLGUoImVtYmVyLWV4dGVuc2lvbi1zdXBwb3J0L2RhdGFf
YWRhcHRlciIsWyJleHBvcnRzIiwiZW1iZXItdXRpbHMiLCJlbWJlci1tZXRhbCIsImVtYmVyLXJ1
bnRpbWUiXSxmdW5jdGlvbihlLHQsbixyKXsidXNlIHN0cmljdCIKLWUuZGVmYXVsdD1yLk9iamVj
dC5leHRlbmQoe2luaXQ6ZnVuY3Rpb24oKXt0aGlzLl9zdXBlci5hcHBseSh0aGlzLGFyZ3VtZW50
cyksdGhpcy5yZWxlYXNlTWV0aG9kcz0oMCxyLkEpKCl9LGNvbnRhaW5lckRlYnVnQWRhcHRlcjp2
b2lkIDAsYXR0cmlidXRlTGltaXQ6MyxhY2NlcHRzTW9kZWxOYW1lOiEwLHJlbGVhc2VNZXRob2Rz
OigwLHIuQSkoKSxnZXRGaWx0ZXJzOmZ1bmN0aW9uKCl7cmV0dXJuKDAsci5BKSgpfSx3YXRjaE1v
ZGVsVHlwZXM6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLGk9dGhpcy5nZXRNb2RlbFR5cGVzKCks
bz0oMCxyLkEpKCkscz12b2lkIDAKLXM9aS5tYXAoZnVuY3Rpb24oZSl7dmFyIHI9ZS5rbGFzcyxp
PW4ud3JhcE1vZGVsVHlwZShyLGUubmFtZSkKLXJldHVybiBvLnB1c2gobi5vYnNlcnZlTW9kZWxU
eXBlKGUubmFtZSx0KSksaX0pLGUocykKLXZhciBhPWZ1bmN0aW9uKCl7by5mb3JFYWNoKGZ1bmN0
aW9uKGUpe3JldHVybiBlKCl9KSxuLnJlbGVhc2VNZXRob2RzLnJlbW92ZU9iamVjdChhKX0KLXJl
dHVybiB0aGlzLnJlbGVhc2VNZXRob2RzLnB1c2hPYmplY3QoYSksYX0sX25hbWVUb0NsYXNzOmZ1
bmN0aW9uKGUpe3ZhciBuLHIKLXJldHVybiJzdHJpbmciPT10eXBlb2YgZSYmKG49KDAsdC5nZXRP
d25lcikodGhpcykscj1uLmZhY3RvcnlGb3IoIm1vZGVsOiIrZSksZT1yJiZyLmNsYXNzKSxlfSx3
YXRjaFJlY29yZHM6ZnVuY3Rpb24oZSx0LG4saSl7ZnVuY3Rpb24gbyhlKXtuKFtlXSl9dmFyIHM9
dGhpcyxhPSgwLHIuQSkoKSx1PXRoaXMuX25hbWVUb0NsYXNzKGUpLGw9dGhpcy5nZXRSZWNvcmRz
KHUsZSksYz12b2lkIDAscD1sLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gYS5wdXNoKHMub2JzZXJ2
ZVJlY29yZChlLG8pKSxzLndyYXBSZWNvcmQoZSl9KSxmPXtkaWRDaGFuZ2U6ZnVuY3Rpb24oZSxu
LHUsbCl7dmFyIGMscCxmCi1mb3IoYz1uO2M8bitsO2MrKylwPSgwLHIub2JqZWN0QXQpKGUsYyks
Zj1zLndyYXBSZWNvcmQocCksYS5wdXNoKHMub2JzZXJ2ZVJlY29yZChwLG8pKSx0KFtmXSkKLXUm
Jmkobix1KX0sd2lsbENoYW5nZTpmdW5jdGlvbigpe3JldHVybiB0aGlzfX0KLXJldHVybigwLHIu
YWRkQXJyYXlPYnNlcnZlcikobCx0aGlzLGYpLGM9ZnVuY3Rpb24oKXthLmZvckVhY2goZnVuY3Rp
b24oZSl7cmV0dXJuIGUoKX0pLCgwLHIucmVtb3ZlQXJyYXlPYnNlcnZlcikobCxzLGYpLHMucmVs
ZWFzZU1ldGhvZHMucmVtb3ZlT2JqZWN0KGMpfSx0KHApLHRoaXMucmVsZWFzZU1ldGhvZHMucHVz
aE9iamVjdChjKSxjfSx3aWxsRGVzdHJveTpmdW5jdGlvbigpe3RoaXMuX3N1cGVyLmFwcGx5KHRo
aXMsYXJndW1lbnRzKSx0aGlzLnJlbGVhc2VNZXRob2RzLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0
dXJuIGUoKX0pfSxkZXRlY3Q6ZnVuY3Rpb24oKXtyZXR1cm4hMX0sY29sdW1uc0ZvclR5cGU6ZnVu
Y3Rpb24oKXtyZXR1cm4oMCxyLkEpKCl9LG9ic2VydmVNb2RlbFR5cGU6ZnVuY3Rpb24oZSx0KXtm
dW5jdGlvbiBpKCl7dChbdGhpcy53cmFwTW9kZWxUeXBlKHMsZSldKX12YXIgbz10aGlzLHM9dGhp
cy5fbmFtZVRvQ2xhc3MoZSksYT10aGlzLmdldFJlY29yZHMocyxlKSx1PXtkaWRDaGFuZ2U6ZnVu
Y3Rpb24oKXtuLnJ1bi5zY2hlZHVsZU9uY2UoImFjdGlvbnMiLHRoaXMsaSl9LHdpbGxDaGFuZ2U6
ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc319Ci1yZXR1cm4oMCxyLmFkZEFycmF5T2JzZXJ2ZXIpKGEs
dGhpcyx1KSxmdW5jdGlvbigpe3JldHVybigwLHIucmVtb3ZlQXJyYXlPYnNlcnZlcikoYSxvLHUp
fX0sd3JhcE1vZGVsVHlwZTpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuZ2V0UmVjb3JkcyhlLHQp
Ci1yZXR1cm57bmFtZTp0LGNvdW50OigwLG4uZ2V0KShyLCJsZW5ndGgiKSxjb2x1bW5zOnRoaXMu
Y29sdW1uc0ZvclR5cGUoZSksb2JqZWN0OmV9fSxnZXRNb2RlbFR5cGVzOmZ1bmN0aW9uKCl7dmFy
IGU9dGhpcyx0PXRoaXMuZ2V0KCJjb250YWluZXJEZWJ1Z0FkYXB0ZXIiKSxuPXZvaWQgMAotcmV0
dXJuIG49dC5jYW5DYXRhbG9nRW50cmllc0J5VHlwZSgibW9kZWwiKT90LmNhdGFsb2dFbnRyaWVz
QnlUeXBlKCJtb2RlbCIpOnRoaXMuX2dldE9iamVjdHNPbk5hbWVzcGFjZXMoKSxuPSgwLHIuQSko
bikubWFwKGZ1bmN0aW9uKHQpe3JldHVybntrbGFzczplLl9uYW1lVG9DbGFzcyh0KSxuYW1lOnR9
fSksbj0oMCxyLkEpKG4pLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gZS5kZXRlY3QodC5rbGFz
cyl9KSwoMCxyLkEpKG4pfSxfZ2V0T2JqZWN0c09uTmFtZXNwYWNlczpmdW5jdGlvbigpe3ZhciBl
PXRoaXMsdD0oMCxyLkEpKHIuTmFtZXNwYWNlLk5BTUVTUEFDRVMpLG49KDAsci5BKSgpCi1yZXR1
cm4gdC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBpCi1mb3IodmFyIG8gaW4gdCl0Lmhhc093blBy
b3BlcnR5KG8pJiZlLmRldGVjdCh0W29dKSYmKGk9ci5TdHJpbmcuZGFzaGVyaXplKG8pLG4ucHVz
aChpKSl9KSxufSxnZXRSZWNvcmRzOmZ1bmN0aW9uKCl7cmV0dXJuKDAsci5BKSgpfSx3cmFwUmVj
b3JkOmZ1bmN0aW9uKGUpe3ZhciB0PXtvYmplY3Q6ZX0KLXJldHVybiB0LmNvbHVtblZhbHVlcz10
aGlzLmdldFJlY29yZENvbHVtblZhbHVlcyhlKSx0LnNlYXJjaEtleXdvcmRzPXRoaXMuZ2V0UmVj
b3JkS2V5d29yZHMoZSksdC5maWx0ZXJWYWx1ZXM9dGhpcy5nZXRSZWNvcmRGaWx0ZXJWYWx1ZXMo
ZSksdC5jb2xvcj10aGlzLmdldFJlY29yZENvbG9yKGUpLHR9LGdldFJlY29yZENvbHVtblZhbHVl
czpmdW5jdGlvbigpe3JldHVybnt9fSxnZXRSZWNvcmRLZXl3b3JkczpmdW5jdGlvbigpe3JldHVy
bigwLHIuQSkoKX0sZ2V0UmVjb3JkRmlsdGVyVmFsdWVzOmZ1bmN0aW9uKCl7cmV0dXJue319LGdl
dFJlY29yZENvbG9yOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LG9ic2VydmVSZWNvcmQ6ZnVuY3Rp
b24oKXtyZXR1cm4gZnVuY3Rpb24oKXt9fX0pfSkKLWUoImVtYmVyLWV4dGVuc2lvbi1zdXBwb3J0
L2luZGV4IixbImV4cG9ydHMiLCJlbWJlci1leHRlbnNpb24tc3VwcG9ydC9kYXRhX2FkYXB0ZXIi
LCJlbWJlci1leHRlbnNpb24tc3VwcG9ydC9jb250YWluZXJfZGVidWdfYWRhcHRlciJdLGZ1bmN0
aW9uKGUsdCxuKXsidXNlIHN0cmljdCIKLU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJEYXRhQWRh
cHRlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHQuZGVmYXVsdH19KSxP
YmplY3QuZGVmaW5lUHJvcGVydHkoZSwiQ29udGFpbmVyRGVidWdBZGFwdGVyIix7ZW51bWVyYWJs
ZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbi5kZWZhdWx0fX0pfSksZSgiZW1iZXItZ2xpbW1l
ci9jb21wb25lbnQiLFsiZXhwb3J0cyIsImVtYmVyLXV0aWxzIiwiZW1iZXItdmlld3MiLCJlbWJl
ci1ydW50aW1lIiwiZW1iZXItZGVidWciLCJlbWJlci1tZXRhbCIsImVtYmVyLWdsaW1tZXIvdXRp
bHMvcmVmZXJlbmNlcyIsIkBnbGltbWVyL3JlZmVyZW5jZSIsIkBnbGltbWVyL3J1bnRpbWUiXSxm
dW5jdGlvbihlLHQsbixyLGksbyxzLGEsdSl7InVzZSBzdHJpY3QiCi1lLkJPVU5EUz1lLkhBU19C
TE9DSz1lLklTX0RJU1BBVENISU5HX0FUVFJTPWUuUk9PVF9SRUY9ZS5BUkdTPWUuRElSVFlfVEFH
PXZvaWQgMAotdmFyIGwsYz1lLkRJUlRZX1RBRz0oMCx0LnN5bWJvbCkoIkRJUlRZX1RBRyIpLHA9
ZS5BUkdTPSgwLHQuc3ltYm9sKSgiQVJHUyIpLGY9ZS5ST09UX1JFRj0oMCx0LnN5bWJvbCkoIlJP
T1RfUkVGIiksaD1lLklTX0RJU1BBVENISU5HX0FUVFJTPSgwLHQuc3ltYm9sKSgiSVNfRElTUEFU
Q0hJTkdfQVRUUlMiKQotZS5IQVNfQkxPQ0s9KDAsdC5zeW1ib2wpKCJIQVNfQkxPQ0siKQotdmFy
IGQ9ZS5CT1VORFM9KDAsdC5zeW1ib2wpKCJCT1VORFMiKSxtPW4uQ29yZVZpZXcuZXh0ZW5kKG4u
Q2hpbGRWaWV3c1N1cHBvcnQsbi5WaWV3U3RhdGVTdXBwb3J0LG4uQ2xhc3NOYW1lc1N1cHBvcnQs
ci5UYXJnZXRBY3Rpb25TdXBwb3J0LG4uQWN0aW9uU3VwcG9ydCxuLlZpZXdNaXhpbiwobD17aXND
b21wb25lbnQ6ITAsaW5pdDpmdW5jdGlvbigpe3RoaXMuX3N1cGVyLmFwcGx5KHRoaXMsYXJndW1l
bnRzKSx0aGlzW2hdPSExLHRoaXNbY109bmV3IGEuRGlydHlhYmxlVGFnLHRoaXNbZl09bmV3IHMu
Um9vdFJlZmVyZW5jZSh0aGlzKSx0aGlzW2RdPW51bGwsdGhpcy5kZWZhdWx0TGF5b3V0JiYhdGhp
cy5sYXlvdXQmJih0aGlzLmxheW91dD10aGlzLmRlZmF1bHRMYXlvdXQpfSxyZXJlbmRlcjpmdW5j
dGlvbigpe3RoaXNbY10uZGlydHkoKSx0aGlzLl9zdXBlcigpfSxfX2RlZmluZU5vbkVudW1lcmFi
bGU6ZnVuY3Rpb24oZSl7dGhpc1tlLm5hbWVdPWUuZGVzY3JpcHRvci52YWx1ZX19LGxbby5QUk9Q
RVJUWV9ESURfQ0hBTkdFXT1mdW5jdGlvbihlKXtpZighdGhpc1toXSl7dmFyIHQ9dm9pZCAwLG49
dm9pZCAwOyh0PXRoaXNbcF0pJiYobj10W2VdKSYmbltzLlVQREFURV0mJm5bcy5VUERBVEVdKCgw
LG8uZ2V0KSh0aGlzLGUpKX19LGwuZ2V0QXR0cj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5nZXQo
ZSl9LGwucmVhZERPTUF0dHI9ZnVuY3Rpb24oZSl7dmFyIHQ9KDAsbi5nZXRWaWV3RWxlbWVudCko
dGhpcykKLXJldHVybigwLHUucmVhZERPTUF0dHIpKHQsZSl9LGwpKQotbVt0Lk5BTUVfS0VZXT0i
RW1iZXIuQ29tcG9uZW50IixtLnJlb3BlbkNsYXNzKHtpc0NvbXBvbmVudEZhY3Rvcnk6ITAscG9z
aXRpb25hbFBhcmFtczpbXX0pLGUuZGVmYXVsdD1tfSksZSgiZW1iZXItZ2xpbW1lci9jb21wb25l
bnRzL2NoZWNrYm94IixbImV4cG9ydHMiLCJlbWJlci1tZXRhbCIsImVtYmVyLWdsaW1tZXIvY29t
cG9uZW50IiwiZW1iZXItZ2xpbW1lci90ZW1wbGF0ZXMvZW1wdHkiXSxmdW5jdGlvbihlLHQsbixy
KXsidXNlIHN0cmljdCIKLWUuZGVmYXVsdD1uLmRlZmF1bHQuZXh0ZW5kKHtsYXlvdXQ6ci5kZWZh
dWx0LGNsYXNzTmFtZXM6WyJlbWJlci1jaGVja2JveCJdLHRhZ05hbWU6ImlucHV0IixhdHRyaWJ1
dGVCaW5kaW5nczpbInR5cGUiLCJjaGVja2VkIiwiaW5kZXRlcm1pbmF0ZSIsImRpc2FibGVkIiwi
dGFiaW5kZXgiLCJuYW1lIiwiYXV0b2ZvY3VzIiwicmVxdWlyZWQiLCJmb3JtIl0sdHlwZToiY2hl
Y2tib3giLGRpc2FibGVkOiExLGluZGV0ZXJtaW5hdGU6ITEsZGlkSW5zZXJ0RWxlbWVudDpmdW5j
dGlvbigpe3RoaXMuX3N1cGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSwoMCx0LmdldCkodGhpcywi
ZWxlbWVudCIpLmluZGV0ZXJtaW5hdGU9ISEoMCx0LmdldCkodGhpcywiaW5kZXRlcm1pbmF0ZSIp
fSxjaGFuZ2U6ZnVuY3Rpb24oKXsoMCx0LnNldCkodGhpcywiY2hlY2tlZCIsdGhpcy4kKCkucHJv
cCgiY2hlY2tlZCIpKX19KX0pLGUoImVtYmVyLWdsaW1tZXIvY29tcG9uZW50cy9saW5rLXRvIixb
ImV4cG9ydHMiLCJlbWJlci1jb25zb2xlIiwiZW1iZXItZGVidWciLCJlbWJlci1tZXRhbCIsImVt
YmVyLXJ1bnRpbWUiLCJlbWJlci12aWV3cyIsImVtYmVyLWdsaW1tZXIvdGVtcGxhdGVzL2xpbmst
dG8iLCJlbWJlci1nbGltbWVyL2NvbXBvbmVudCJdLGZ1bmN0aW9uKGUsdCxuLHIsaSxvLHMsYSl7
InVzZSBzdHJpY3QiCi12YXIgdT1hLmRlZmF1bHQuZXh0ZW5kKHtsYXlvdXQ6cy5kZWZhdWx0LHRh
Z05hbWU6ImEiLGN1cnJlbnRXaGVuOigwLGkuZGVwcmVjYXRpbmdBbGlhcykoImN1cnJlbnQtd2hl
biIse2lkOiJlbWJlci1yb3V0aW5nLXZpZXcuZGVwcmVjYXRlZC1jdXJyZW50LXdoZW4iLHVudGls
OiIzLjAuMCJ9KSwiY3VycmVudC13aGVuIjpudWxsLHRpdGxlOm51bGwscmVsOm51bGwsdGFiaW5k
ZXg6bnVsbCx0YXJnZXQ6bnVsbCxhY3RpdmVDbGFzczoiYWN0aXZlIixsb2FkaW5nQ2xhc3M6Imxv
YWRpbmciLGRpc2FibGVkQ2xhc3M6ImRpc2FibGVkIixfaXNEaXNhYmxlZDohMSxyZXBsYWNlOiEx
LGF0dHJpYnV0ZUJpbmRpbmdzOlsiaHJlZiIsInRpdGxlIiwicmVsIiwidGFiaW5kZXgiLCJ0YXJn
ZXQiXSxjbGFzc05hbWVCaW5kaW5nczpbImFjdGl2ZSIsImxvYWRpbmciLCJkaXNhYmxlZCIsInRy
YW5zaXRpb25pbmdJbiIsInRyYW5zaXRpb25pbmdPdXQiXSxldmVudE5hbWU6ImNsaWNrIixpbml0
OmZ1bmN0aW9uKCl7dGhpcy5fc3VwZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpCi12YXIgZT0oMCxy
LmdldCkodGhpcywiZXZlbnROYW1lIikKLXRoaXMub24oZSx0aGlzLHRoaXMuX2ludm9rZSl9LF9y
b3V0aW5nOmkuaW5qZWN0LnNlcnZpY2UoIi1yb3V0aW5nIiksZGlzYWJsZWQ6KDAsci5jb21wdXRl
ZCkoe2dldDpmdW5jdGlvbigpe3JldHVybiExfSxzZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9p
ZCAwIT09dCYmdGhpcy5zZXQoIl9pc0Rpc2FibGVkIix0KSwhIXQmJigwLHIuZ2V0KSh0aGlzLCJk
aXNhYmxlZENsYXNzIil9fSksX2NvbXB1dGVBY3RpdmU6ZnVuY3Rpb24oZSl7aWYoKDAsci5nZXQp
KHRoaXMsImxvYWRpbmciKSlyZXR1cm4hMQotdmFyIHQsbj0oMCxyLmdldCkodGhpcywiX3JvdXRp
bmciKSxpPSgwLHIuZ2V0KSh0aGlzLCJtb2RlbHMiKSxvPSgwLHIuZ2V0KSh0aGlzLCJyZXNvbHZl
ZFF1ZXJ5UGFyYW1zIikscz0oMCxyLmdldCkodGhpcywiY3VycmVudC13aGVuIiksYT0hIXMKLWZv
cihzPXN8fCgwLHIuZ2V0KSh0aGlzLCJxdWFsaWZpZWRSb3V0ZU5hbWUiKSxzPXMuc3BsaXQoIiAi
KSx0PTA7dDxzLmxlbmd0aDt0KyspaWYobi5pc0FjdGl2ZUZvclJvdXRlKGksbyxzW3RdLGUsYSkp
cmV0dXJuKDAsci5nZXQpKHRoaXMsImFjdGl2ZUNsYXNzIikKLXJldHVybiExfSxhY3RpdmU6KDAs
ci5jb21wdXRlZCkoImF0dHJzLnBhcmFtcyIsIl9yb3V0aW5nLmN1cnJlbnRTdGF0ZSIsZnVuY3Rp
b24oKXt2YXIgZT0oMCxyLmdldCkodGhpcywiX3JvdXRpbmcuY3VycmVudFN0YXRlIikKLXJldHVy
biEhZSYmdGhpcy5fY29tcHV0ZUFjdGl2ZShlKX0pLHdpbGxCZUFjdGl2ZTooMCxyLmNvbXB1dGVk
KSgiX3JvdXRpbmcudGFyZ2V0U3RhdGUiLGZ1bmN0aW9uKCl7dmFyIGU9KDAsci5nZXQpKHRoaXMs
Il9yb3V0aW5nIiksdD0oMCxyLmdldCkoZSwidGFyZ2V0U3RhdGUiKQotaWYoKDAsci5nZXQpKGUs
ImN1cnJlbnRTdGF0ZSIpIT09dClyZXR1cm4hIXRoaXMuX2NvbXB1dGVBY3RpdmUodCl9KSx0cmFu
c2l0aW9uaW5nSW46KDAsci5jb21wdXRlZCkoImFjdGl2ZSIsIndpbGxCZUFjdGl2ZSIsZnVuY3Rp
b24oKXt2YXIgZT0oMCxyLmdldCkodGhpcywid2lsbEJlQWN0aXZlIikKLXJldHVybiB2b2lkIDAh
PT1lJiYoISgwLHIuZ2V0KSh0aGlzLCJhY3RpdmUiKSYmZSYmImVtYmVyLXRyYW5zaXRpb25pbmct
aW4iKX0pLHRyYW5zaXRpb25pbmdPdXQ6KDAsci5jb21wdXRlZCkoImFjdGl2ZSIsIndpbGxCZUFj
dGl2ZSIsZnVuY3Rpb24oKXt2YXIgZT0oMCxyLmdldCkodGhpcywid2lsbEJlQWN0aXZlIikKLXJl
dHVybiB2b2lkIDAhPT1lJiYoKDAsci5nZXQpKHRoaXMsImFjdGl2ZSIpJiYhZSYmImVtYmVyLXRy
YW5zaXRpb25pbmctb3V0Iil9KSxfaW52b2tlOmZ1bmN0aW9uKGUpe2lmKCEoMCxvLmlzU2ltcGxl
Q2xpY2spKGUpKXJldHVybiEwCi12YXIgbj0oMCxyLmdldCkodGhpcywicHJldmVudERlZmF1bHQi
KSxpPSgwLHIuZ2V0KSh0aGlzLCJ0YXJnZXQiKQotaWYoITEhPT1uJiYoaSYmIl9zZWxmIiE9PWl8
fGUucHJldmVudERlZmF1bHQoKSksITE9PT0oMCxyLmdldCkodGhpcywiYnViYmxlcyIpJiZlLnN0
b3BQcm9wYWdhdGlvbigpLCgwLHIuZ2V0KSh0aGlzLCJfaXNEaXNhYmxlZCIpKXJldHVybiExCi1p
ZigoMCxyLmdldCkodGhpcywibG9hZGluZyIpKXJldHVybiB0LmRlZmF1bHQud2FybigiVGhpcyBs
aW5rLXRvIGlzIGluIGFuIGluYWN0aXZlIGxvYWRpbmcgc3RhdGUgYmVjYXVzZSBhdCBsZWFzdCBv
bmUgb2YgaXRzIHBhcmFtZXRlcnMgcHJlc2VudGx5IGhhcyBhIG51bGwvdW5kZWZpbmVkIHZhbHVl
LCBvciB0aGUgcHJvdmlkZWQgcm91dGUgbmFtZSBpcyBpbnZhbGlkLiIpLCExCi1pZihpJiYiX3Nl
bGYiIT09aSlyZXR1cm4hMQotdmFyIHM9KDAsci5nZXQpKHRoaXMsInF1YWxpZmllZFJvdXRlTmFt
ZSIpLGE9KDAsci5nZXQpKHRoaXMsIm1vZGVscyIpLHU9KDAsci5nZXQpKHRoaXMsInF1ZXJ5UGFy
YW1zLnZhbHVlcyIpLGw9KDAsci5nZXQpKHRoaXMsInJlcGxhY2UiKSxjPXtxdWVyeVBhcmFtczp1
LHJvdXRlTmFtZTpzfTsoMCxyLmZsYWdnZWRJbnN0cnVtZW50KSgiaW50ZXJhY3Rpb24ubGluay10
byIsYyx0aGlzLl9nZW5lcmF0ZVRyYW5zaXRpb24oYyxzLGEsdSxsKSl9LF9nZW5lcmF0ZVRyYW5z
aXRpb246ZnVuY3Rpb24oZSx0LG4saSxvKXt2YXIgcz0oMCxyLmdldCkodGhpcywiX3JvdXRpbmci
KQotcmV0dXJuIGZ1bmN0aW9uKCl7ZS50cmFuc2l0aW9uPXMudHJhbnNpdGlvblRvKHQsbixpLG8p
fX0scXVlcnlQYXJhbXM6bnVsbCxxdWFsaWZpZWRSb3V0ZU5hbWU6KDAsci5jb21wdXRlZCkoInRh
cmdldFJvdXRlTmFtZSIsIl9yb3V0aW5nLmN1cnJlbnRTdGF0ZSIsZnVuY3Rpb24oKXt2YXIgZT0o
MCxyLmdldCkodGhpcywicGFyYW1zIikuc2xpY2UoKSx0PWVbZS5sZW5ndGgtMV0KLXJldHVybiB0
JiZ0LmlzUXVlcnlQYXJhbXMmJmUucG9wKCksKHRoaXNbYS5IQVNfQkxPQ0tdPzA9PT1lLmxlbmd0
aDoxPT09ZS5sZW5ndGgpPygwLHIuZ2V0KSh0aGlzLCJfcm91dGluZy5jdXJyZW50Um91dGVOYW1l
Iik6KDAsci5nZXQpKHRoaXMsInRhcmdldFJvdXRlTmFtZSIpfSkscmVzb2x2ZWRRdWVyeVBhcmFt
czooMCxyLmNvbXB1dGVkKSgicXVlcnlQYXJhbXMiLGZ1bmN0aW9uKCl7dmFyIGU9e30sdD0oMCxy
LmdldCkodGhpcywicXVlcnlQYXJhbXMiKQotaWYoIXQpcmV0dXJuIGUKLXZhciBuPXQudmFsdWVz
Ci1mb3IodmFyIGkgaW4gbiluLmhhc093blByb3BlcnR5KGkpJiYoZVtpXT1uW2ldKQotcmV0dXJu
IGV9KSxocmVmOigwLHIuY29tcHV0ZWQpKCJtb2RlbHMiLCJxdWFsaWZpZWRSb3V0ZU5hbWUiLGZ1
bmN0aW9uKCl7aWYoImEiPT09KDAsci5nZXQpKHRoaXMsInRhZ05hbWUiKSl7dmFyIGU9KDAsci5n
ZXQpKHRoaXMsInF1YWxpZmllZFJvdXRlTmFtZSIpLHQ9KDAsci5nZXQpKHRoaXMsIm1vZGVscyIp
Ci1pZigoMCxyLmdldCkodGhpcywibG9hZGluZyIpKXJldHVybigwLHIuZ2V0KSh0aGlzLCJsb2Fk
aW5nSHJlZiIpCi12YXIgbj0oMCxyLmdldCkodGhpcywiX3JvdXRpbmciKSxpPSgwLHIuZ2V0KSh0
aGlzLCJxdWVyeVBhcmFtcy52YWx1ZXMiKQotcmV0dXJuIG4uZ2VuZXJhdGVVUkwoZSx0LGkpfX0p
LGxvYWRpbmc6KDAsci5jb21wdXRlZCkoIl9tb2RlbHNBcmVMb2FkZWQiLCJxdWFsaWZpZWRSb3V0
ZU5hbWUiLGZ1bmN0aW9uKCl7dmFyIGU9KDAsci5nZXQpKHRoaXMsInF1YWxpZmllZFJvdXRlTmFt
ZSIpCi1pZighKDAsci5nZXQpKHRoaXMsIl9tb2RlbHNBcmVMb2FkZWQiKXx8bnVsbD09ZSlyZXR1
cm4oMCxyLmdldCkodGhpcywibG9hZGluZ0NsYXNzIil9KSxfbW9kZWxzQXJlTG9hZGVkOigwLHIu
Y29tcHV0ZWQpKCJtb2RlbHMiLGZ1bmN0aW9uKCl7dmFyIGUsdD0oMCxyLmdldCkodGhpcywibW9k
ZWxzIikKLWZvcihlPTA7ZTx0Lmxlbmd0aDtlKyspaWYobnVsbD09dFtlXSlyZXR1cm4hMQotcmV0
dXJuITB9KSxfZ2V0TW9kZWxzOmZ1bmN0aW9uKGUpe3ZhciB0LG4scj1lLmxlbmd0aC0xLG89bmV3
IEFycmF5KHIpCi1mb3IodD0wO3Q8cjt0Kyspe2ZvcihuPWVbdCsxXTtpLkNvbnRyb2xsZXJNaXhp
bi5kZXRlY3Qobik7KW49bi5nZXQoIm1vZGVsIikKLW9bdF09bn1yZXR1cm4gb30sbG9hZGluZ0hy
ZWY6IiMiLGRpZFJlY2VpdmVBdHRyczpmdW5jdGlvbigpe3ZhciBlPXZvaWQgMCx0PSgwLHIuZ2V0
KSh0aGlzLCJwYXJhbXMiKQotdCYmKHQ9dC5zbGljZSgpKQotdmFyIG49KDAsci5nZXQpKHRoaXMs
ImRpc2FibGVkV2hlbiIpCi12b2lkIDAhPT1uJiZ0aGlzLnNldCgiZGlzYWJsZWQiLG4pLHRoaXNb
YS5IQVNfQkxPQ0tdfHx0aGlzLnNldCgibGlua1RpdGxlIix0LnNoaWZ0KCkpLHRoaXMuc2V0KCJ0
YXJnZXRSb3V0ZU5hbWUiLHRbMF0pCi12YXIgaT10W3QubGVuZ3RoLTFdCi1lPWkmJmkuaXNRdWVy
eVBhcmFtcz90LnBvcCgpOnt2YWx1ZXM6e319LHRoaXMuc2V0KCJxdWVyeVBhcmFtcyIsZSksdC5s
ZW5ndGg+MT90aGlzLnNldCgibW9kZWxzIix0aGlzLl9nZXRNb2RlbHModCkpOnRoaXMuc2V0KCJt
b2RlbHMiLFtdKX19KQotdS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJMaW5rQ29tcG9uZW50
In0sdS5yZW9wZW5DbGFzcyh7cG9zaXRpb25hbFBhcmFtczoicGFyYW1zIn0pLGUuZGVmYXVsdD11
fSksZSgiZW1iZXItZ2xpbW1lci9jb21wb25lbnRzL3RleHRfYXJlYSIsWyJleHBvcnRzIiwiZW1i
ZXItZ2xpbW1lci9jb21wb25lbnQiLCJlbWJlci12aWV3cyIsImVtYmVyLWdsaW1tZXIvdGVtcGxh
dGVzL2VtcHR5Il0sZnVuY3Rpb24oZSx0LG4scil7InVzZSBzdHJpY3QiCi1lLmRlZmF1bHQ9dC5k
ZWZhdWx0LmV4dGVuZChuLlRleHRTdXBwb3J0LHtjbGFzc05hbWVzOlsiZW1iZXItdGV4dC1hcmVh
Il0sbGF5b3V0OnIuZGVmYXVsdCx0YWdOYW1lOiJ0ZXh0YXJlYSIsYXR0cmlidXRlQmluZGluZ3M6
WyJyb3dzIiwiY29scyIsIm5hbWUiLCJzZWxlY3Rpb25FbmQiLCJzZWxlY3Rpb25TdGFydCIsIndy
YXAiLCJsYW5nIiwiZGlyIiwidmFsdWUiXSxyb3dzOm51bGwsY29sczpudWxsfSl9KSxlKCJlbWJl
ci1nbGltbWVyL2NvbXBvbmVudHMvdGV4dF9maWVsZCIsWyJleHBvcnRzIiwiZW1iZXItbWV0YWwi
LCJlbWJlci1lbnZpcm9ubWVudCIsImVtYmVyLWdsaW1tZXIvY29tcG9uZW50IiwiZW1iZXItZ2xp
bW1lci90ZW1wbGF0ZXMvZW1wdHkiLCJlbWJlci12aWV3cyJdLGZ1bmN0aW9uKGUsdCxuLHIsaSxv
KXsidXNlIHN0cmljdCIKLWZ1bmN0aW9uIHMoZSl7aWYoZSBpbiB1KXJldHVybiB1W2VdCi1pZigh
bi5lbnZpcm9ubWVudC5oYXNET00pcmV0dXJuIHVbZV09ZSxlCi1hfHwoYT1kb2N1bWVudC5jcmVh
dGVFbGVtZW50KCJpbnB1dCIpKQotdHJ5e2EudHlwZT1lfWNhdGNoKGUpe31yZXR1cm4gdVtlXT1h
LnR5cGU9PT1lfXZhciBhPXZvaWQgMCx1PU9iamVjdC5jcmVhdGUobnVsbCkKLWUuZGVmYXVsdD1y
LmRlZmF1bHQuZXh0ZW5kKG8uVGV4dFN1cHBvcnQse2xheW91dDppLmRlZmF1bHQsY2xhc3NOYW1l
czpbImVtYmVyLXRleHQtZmllbGQiXSx0YWdOYW1lOiJpbnB1dCIsYXR0cmlidXRlQmluZGluZ3M6
WyJhY2NlcHQiLCJhdXRvY29tcGxldGUiLCJhdXRvc2F2ZSIsImRpciIsImZvcm1hY3Rpb24iLCJm
b3JtZW5jdHlwZSIsImZvcm1tZXRob2QiLCJmb3Jtbm92YWxpZGF0ZSIsImZvcm10YXJnZXQiLCJo
ZWlnaHQiLCJpbnB1dG1vZGUiLCJsYW5nIiwibGlzdCIsIm1heCIsIm1pbiIsIm11bHRpcGxlIiwi
bmFtZSIsInBhdHRlcm4iLCJzaXplIiwic3RlcCIsInR5cGUiLCJ2YWx1ZSIsIndpZHRoIl0sdmFs
dWU6IiIsdHlwZTooMCx0LmNvbXB1dGVkKSh7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuInRleHQifSxz
ZXQ6ZnVuY3Rpb24oZSx0KXt2YXIgbj0idGV4dCIKLXJldHVybiBzKHQpJiYobj10KSxufX0pLHNp
emU6bnVsbCxwYXR0ZXJuOm51bGwsbWluOm51bGwsbWF4Om51bGx9KX0pLGUoImVtYmVyLWdsaW1t
ZXIvZG9tIixbImV4cG9ydHMiLCJAZ2xpbW1lci9ydW50aW1lIiwiQGdsaW1tZXIvbm9kZSJdLGZ1
bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCIKLU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJET01D
aGFuZ2VzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdC5ET01DaGFuZ2Vz
fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJET01UcmVlQ29uc3RydWN0aW9uIix7ZW51bWVy
YWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdC5ET01UcmVlQ29uc3RydWN0aW9ufX0pLE9i
amVjdC5kZWZpbmVQcm9wZXJ0eShlLCJOb2RlRE9NVHJlZUNvbnN0cnVjdGlvbiIse2VudW1lcmFi
bGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG4uTm9kZURPTVRyZWVDb25zdHJ1Y3Rpb259fSl9
KSxlKCJlbWJlci1nbGltbWVyL2Vudmlyb25tZW50IixbImV4cG9ydHMiLCJlbWJlci1iYWJlbCIs
ImVtYmVyLXV0aWxzIiwiZW1iZXItbWV0YWwiLCJlbWJlci1kZWJ1ZyIsImVtYmVyLXZpZXdzIiwi
QGdsaW1tZXIvcnVudGltZSIsImVtYmVyLWdsaW1tZXIvc3ludGF4L2N1cmx5LWNvbXBvbmVudCIs
ImVtYmVyLWdsaW1tZXIvc3ludGF4IiwiZW1iZXItZ2xpbW1lci91dGlscy9pdGVyYWJsZSIsImVt
YmVyLWdsaW1tZXIvdXRpbHMvcmVmZXJlbmNlcyIsImVtYmVyLWdsaW1tZXIvdXRpbHMvZGVidWct
c3RhY2siLCJlbWJlci1nbGltbWVyL2hlbHBlcnMvaWYtdW5sZXNzIiwiZW1iZXItZ2xpbW1lci9o
ZWxwZXJzL2FjdGlvbiIsImVtYmVyLWdsaW1tZXIvaGVscGVycy9jb21wb25lbnQiLCJlbWJlci1n
bGltbWVyL2hlbHBlcnMvY29uY2F0IiwiZW1iZXItZ2xpbW1lci9oZWxwZXJzL2dldCIsImVtYmVy
LWdsaW1tZXIvaGVscGVycy9oYXNoIiwiZW1iZXItZ2xpbW1lci9oZWxwZXJzL2xvYyIsImVtYmVy
LWdsaW1tZXIvaGVscGVycy9sb2ciLCJlbWJlci1nbGltbWVyL2hlbHBlcnMvbXV0IiwiZW1iZXIt
Z2xpbW1lci9oZWxwZXJzL3JlYWRvbmx5IiwiZW1iZXItZ2xpbW1lci9oZWxwZXJzL3VuYm91bmQi
LCJlbWJlci1nbGltbWVyL2hlbHBlcnMvLWNsYXNzIiwiZW1iZXItZ2xpbW1lci9oZWxwZXJzLy1p
bnB1dC10eXBlIiwiZW1iZXItZ2xpbW1lci9oZWxwZXJzL3F1ZXJ5LXBhcmFtIiwiZW1iZXItZ2xp
bW1lci9oZWxwZXJzL2VhY2gtaW4iLCJlbWJlci1nbGltbWVyL2hlbHBlcnMvLW5vcm1hbGl6ZS1j
bGFzcyIsImVtYmVyLWdsaW1tZXIvaGVscGVycy8taHRtbC1zYWZlIiwiZW1iZXItZ2xpbW1lci9w
cm90b2NvbC1mb3ItdXJsIiwiZW1iZXItZ2xpbW1lci9tb2RpZmllcnMvYWN0aW9uIl0sZnVuY3Rp
b24oZSx0LG4scixpLG8scyxhLHUsbCxjLHAsZixoLGQsbSxnLHksdixiLF8sdyxFLHgsQyxPLEEs
VCxTLFIsayl7InVzZSBzdHJpY3QiCi1mdW5jdGlvbiBOKGUpe3JldHVybntvYmplY3Q6ImNvbXBv
bmVudDoiK2V9fXZhciBQPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIGkoaSl7dmFyIHU9aVtuLk9XTkVS
XSxsPSgwLHQucG9zc2libGVDb25zdHJ1Y3RvclJldHVybikodGhpcyxlLmFwcGx5KHRoaXMsYXJn
dW1lbnRzKSkKLXJldHVybiBsLm93bmVyPXUsbC5pc0ludGVyYWN0aXZlPXUubG9va3VwKCItZW52
aXJvbm1lbnQ6bWFpbiIpLmlzSW50ZXJhY3RpdmUsbC5kZXN0cm95ZWRDb21wb25lbnRzPVtdLCgw
LFIuZGVmYXVsdCkobCksbC5fZGVmaW5pdGlvbkNhY2hlPW5ldyByLkNhY2hlKDJlMyxmdW5jdGlv
bihlKXt2YXIgdD1lLm5hbWUsbj1lLnNvdXJjZSxyPWUub3duZXIsaT0oMCxvLmxvb2t1cENvbXBv
bmVudCkocix0LHtzb3VyY2U6bn0pLHM9aS5jb21wb25lbnQsdT1pLmxheW91dAotaWYoc3x8dSly
ZXR1cm4gbmV3IGEuQ3VybHlDb21wb25lbnREZWZpbml0aW9uKHQscyx1KX0sZnVuY3Rpb24oZSl7
dmFyIHQ9ZS5uYW1lLHI9ZS5zb3VyY2UsaT1lLm93bmVyLG89ciYmaS5fcmVzb2x2ZUxvY2FsTG9v
a3VwTmFtZSh0LHIpfHx0Ci1yZXR1cm4oMCxuLmd1aWRGb3IpKGkpKyJ8IitvfSksbC5fdGVtcGxh
dGVDYWNoZT1uZXcgci5DYWNoZSgxZTMsZnVuY3Rpb24oZSl7dmFyIHQscj1lLlRlbXBsYXRlLGk9
ZS5vd25lcgotcmV0dXJuIHIuY3JlYXRlP3IuY3JlYXRlKCh0PXtlbnY6bH0sdFtuLk9XTkVSXT1p
LHQpKTpyfSxmdW5jdGlvbihlKXt2YXIgdD1lLlRlbXBsYXRlLHI9ZS5vd25lcgotcmV0dXJuKDAs
bi5ndWlkRm9yKShyKSsifCIrdC5pZH0pLGwuX2NvbXBpbGVyQ2FjaGU9bmV3IHIuQ2FjaGUoMTAs
ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyByLkNhY2hlKDJlMyxmdW5jdGlvbih0KXt2YXIgbj1uZXcg
ZSh0KQotcmV0dXJuKDAscy5jb21waWxlTGF5b3V0KShuLGwpfSxmdW5jdGlvbihlKXt2YXIgdD1l
Lm1ldGEub3duZXIKLXJldHVybigwLG4uZ3VpZEZvcikodCkrInwiK2UuaWR9KX0sZnVuY3Rpb24o
ZSl7cmV0dXJuIGUuaWR9KSxsLmJ1aWx0SW5Nb2RpZmllcnM9e2FjdGlvbjpuZXcgay5kZWZhdWx0
fSxsLmJ1aWx0SW5IZWxwZXJzPXtpZjpmLmlubGluZUlmLGFjdGlvbjpoLmRlZmF1bHQsY29tcG9u
ZW50OmQuZGVmYXVsdCxjb25jYXQ6bS5kZWZhdWx0LGdldDpnLmRlZmF1bHQsaGFzaDp5LmRlZmF1
bHQsbG9jOnYuZGVmYXVsdCxsb2c6Yi5kZWZhdWx0LG11dDpfLmRlZmF1bHQsInF1ZXJ5LXBhcmFt
cyI6Ty5kZWZhdWx0LHJlYWRvbmx5OncuZGVmYXVsdCx1bmJvdW5kOkUuZGVmYXVsdCx1bmxlc3M6
Zi5pbmxpbmVVbmxlc3MsIi1jbGFzcyI6eC5kZWZhdWx0LCItZWFjaC1pbiI6QS5kZWZhdWx0LCIt
aW5wdXQtdHlwZSI6Qy5kZWZhdWx0LCItbm9ybWFsaXplLWNsYXNzIjpULmRlZmF1bHQsIi1odG1s
LXNhZmUiOlMuZGVmYXVsdCwiLWdldC1keW5hbWljLXZhciI6cy5nZXREeW5hbWljVmFyfSxsfXJl
dHVybigwLHQuaW5oZXJpdHMpKGksZSksaS5jcmVhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBp
KGUpfSxpLnByb3RvdHlwZS5tYWNyb3M9ZnVuY3Rpb24oKXt2YXIgdD1lLnByb3RvdHlwZS5tYWNy
b3MuY2FsbCh0aGlzKQotcmV0dXJuKDAsdS5wb3B1bGF0ZU1hY3JvcykodC5ibG9ja3MsdC5pbmxp
bmVzKSx0fSxpLnByb3RvdHlwZS5oYXNDb21wb25lbnREZWZpbml0aW9uPWZ1bmN0aW9uKCl7cmV0
dXJuITF9LGkucHJvdG90eXBlLmdldENvbXBvbmVudERlZmluaXRpb249ZnVuY3Rpb24oZSx0KXt2
YXIgbj1lWzBdLGk9KDAsci5faW5zdHJ1bWVudFN0YXJ0KSgicmVuZGVyLmdldENvbXBvbmVudERl
ZmluaXRpb24iLE4sbiksbz10LmdldE1ldGEoKSxzPW8ub3duZXIsYT1vLm1vZHVsZU5hbWUmJiJ0
ZW1wbGF0ZToiK28ubW9kdWxlTmFtZSx1PXRoaXMuX2RlZmluaXRpb25DYWNoZS5nZXQoe25hbWU6
bixzb3VyY2U6YSxvd25lcjpzfSkKLXJldHVybiBpKCksdX0saS5wcm90b3R5cGUuZ2V0VGVtcGxh
dGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fdGVtcGxhdGVDYWNoZS5nZXQoe1RlbXBsYXRl
OmUsb3duZXI6dH0pfSxpLnByb3RvdHlwZS5nZXRDb21waWxlZEJsb2NrPWZ1bmN0aW9uKGUsdCl7
cmV0dXJuIHRoaXMuX2NvbXBpbGVyQ2FjaGUuZ2V0KGUpLmdldCh0KX0saS5wcm90b3R5cGUuaGFz
UGFydGlhbD1mdW5jdGlvbihlLHQpe3ZhciBuPXQuZ2V0TWV0YSgpLHI9bi5vd25lcgotcmV0dXJu
KDAsby5oYXNQYXJ0aWFsKShlLHIpfSxpLnByb3RvdHlwZS5sb29rdXBQYXJ0aWFsPWZ1bmN0aW9u
KGUsdCl7dmFyIG49dC5nZXRNZXRhKCkscj1uLm93bmVyLGk9e3RlbXBsYXRlOigwLG8ubG9va3Vw
UGFydGlhbCkoZSxyKX0KLWlmKGkudGVtcGxhdGUpcmV0dXJuIGkKLXRocm93IG5ldyBFcnJvcihl
KyIgaXMgbm90IGEgcGFydGlhbCIpfSxpLnByb3RvdHlwZS5oYXNIZWxwZXI9ZnVuY3Rpb24oZSx0
KXtpZih0aGlzLmJ1aWx0SW5IZWxwZXJzW2VdKXJldHVybiEwCi12YXIgbj10LmdldE1ldGEoKSxy
PW4ub3duZXIsaT17c291cmNlOiJ0ZW1wbGF0ZToiK24ubW9kdWxlTmFtZX0KLXJldHVybiByLmhh
c1JlZ2lzdHJhdGlvbigiaGVscGVyOiIrZSxpKXx8ci5oYXNSZWdpc3RyYXRpb24oImhlbHBlcjoi
K2UpfSxpLnByb3RvdHlwZS5sb29rdXBIZWxwZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmJ1
aWx0SW5IZWxwZXJzW2VdCi1pZihuKXJldHVybiBuCi12YXIgcj10LmdldE1ldGEoKSxpPXIub3du
ZXIsbz1yLm1vZHVsZU5hbWUmJntzb3VyY2U6InRlbXBsYXRlOiIrci5tb2R1bGVOYW1lfXx8e30s
cz1pLmZhY3RvcnlGb3IoImhlbHBlcjoiK2Usbyl8fGkuZmFjdG9yeUZvcigiaGVscGVyOiIrZSkK
LWlmKHMuY2xhc3MuaXNIZWxwZXJJbnN0YW5jZSlyZXR1cm4gZnVuY3Rpb24oZSx0KXtyZXR1cm4g
Yy5TaW1wbGVIZWxwZXJSZWZlcmVuY2UuY3JlYXRlKHMuY2xhc3MuY29tcHV0ZSx0KX0KLWlmKHMu
Y2xhc3MuaXNIZWxwZXJGYWN0b3J5KXJldHVybiBmdW5jdGlvbihlLHQpe3JldHVybiBjLkNsYXNz
QmFzZWRIZWxwZXJSZWZlcmVuY2UuY3JlYXRlKHMsZSx0KX0KLXRocm93IG5ldyBFcnJvcihlKyIg
aXMgbm90IGEgaGVscGVyIil9LGkucHJvdG90eXBlLmhhc01vZGlmaWVyPWZ1bmN0aW9uKGUpe3Jl
dHVybiEhdGhpcy5idWlsdEluTW9kaWZpZXJzW2VdfSxpLnByb3RvdHlwZS5sb29rdXBNb2RpZmll
cj1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmJ1aWx0SW5Nb2RpZmllcnNbZV0KLWlmKHQpcmV0dXJu
IHQKLXRocm93IG5ldyBFcnJvcihlKyIgaXMgbm90IGEgbW9kaWZpZXIiKX0saS5wcm90b3R5cGUu
dG9Db25kaXRpb25hbFJlZmVyZW5jZT1mdW5jdGlvbihlKXtyZXR1cm4gYy5Db25kaXRpb25hbFJl
ZmVyZW5jZS5jcmVhdGUoZSl9LGkucHJvdG90eXBlLml0ZXJhYmxlRm9yPWZ1bmN0aW9uKGUsdCl7
dmFyIG49dC5uYW1lZC5nZXQoImtleSIpLnZhbHVlKCkKLXJldHVybigwLGwuZGVmYXVsdCkoZSxu
KX0saS5wcm90b3R5cGUuc2NoZWR1bGVJbnN0YWxsTW9kaWZpZXI9ZnVuY3Rpb24oKXt2YXIgdAot
dGhpcy5pc0ludGVyYWN0aXZlJiYodD1lLnByb3RvdHlwZS5zY2hlZHVsZUluc3RhbGxNb2RpZmll
cikuY2FsbC5hcHBseSh0LFt0aGlzXS5jb25jYXQoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwo
YXJndW1lbnRzKSkpfSxpLnByb3RvdHlwZS5zY2hlZHVsZVVwZGF0ZU1vZGlmaWVyPWZ1bmN0aW9u
KCl7dmFyIHQKLXRoaXMuaXNJbnRlcmFjdGl2ZSYmKHQ9ZS5wcm90b3R5cGUuc2NoZWR1bGVVcGRh
dGVNb2RpZmllcikuY2FsbC5hcHBseSh0LFt0aGlzXS5jb25jYXQoQXJyYXkucHJvdG90eXBlLnNs
aWNlLmNhbGwoYXJndW1lbnRzKSkpfSxpLnByb3RvdHlwZS5kaWREZXN0cm95PWZ1bmN0aW9uKGUp
e2UuZGVzdHJveSgpfSxpLnByb3RvdHlwZS5iZWdpbj1mdW5jdGlvbigpe3RoaXMuaW5UcmFuc2Fj
dGlvbj0hMCxlLnByb3RvdHlwZS5iZWdpbi5jYWxsKHRoaXMpfSxpLnByb3RvdHlwZS5jb21taXQ9
ZnVuY3Rpb24oKXt2YXIgdCxuPXRoaXMuZGVzdHJveWVkQ29tcG9uZW50cwotZm9yKHRoaXMuZGVz
dHJveWVkQ29tcG9uZW50cz1bXSx0PTA7dDxuLmxlbmd0aDt0Kyspblt0XS5kZXN0cm95KCkKLWUu
cHJvdG90eXBlLmNvbW1pdC5jYWxsKHRoaXMpLHRoaXMuaW5UcmFuc2FjdGlvbj0hMX0saX0ocy5F
bnZpcm9ubWVudCkKLWUuZGVmYXVsdD1QfSksZSgiZW1iZXItZ2xpbW1lci9oZWxwZXIiLFsiZXhw
b3J0cyIsImVtYmVyLXV0aWxzIiwiZW1iZXItcnVudGltZSIsIkBnbGltbWVyL3JlZmVyZW5jZSJd
LGZ1bmN0aW9uKGUsdCxuLHIpeyJ1c2Ugc3RyaWN0IgotZS5SRUNPTVBVVEVfVEFHPXZvaWQgMCxl
LmhlbHBlcj1mdW5jdGlvbihlKXtyZXR1cm57aXNIZWxwZXJJbnN0YW5jZTohMCxjb21wdXRlOmV9
fQotdmFyIGk9ZS5SRUNPTVBVVEVfVEFHPSgwLHQuc3ltYm9sKSgiUkVDT01QVVRFX1RBRyIpLG89
bi5GcmFtZXdvcmtPYmplY3QuZXh0ZW5kKHtpc0hlbHBlckluc3RhbmNlOiEwLGluaXQ6ZnVuY3Rp
b24oKXt0aGlzLl9zdXBlci5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpc1tpXT1uZXcgci5EaXJ0
eWFibGVUYWd9LHJlY29tcHV0ZTpmdW5jdGlvbigpe3RoaXNbaV0uZGlydHkoKX19KQotby5yZW9w
ZW5DbGFzcyh7aXNIZWxwZXJGYWN0b3J5OiEwfSksZS5kZWZhdWx0PW99KSxlKCJlbWJlci1nbGlt
bWVyL2hlbHBlcnMvLWNsYXNzIixbImV4cG9ydHMiLCJlbWJlci1nbGltbWVyL3V0aWxzL3JlZmVy
ZW5jZXMiLCJlbWJlci1ydW50aW1lIl0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IgotZnVu
Y3Rpb24gcihlKXt2YXIgdD1lLnBvc2l0aW9uYWwscj10LmF0KDApLGk9dC5sZW5ndGgsbz1yLnZh
bHVlKCkKLXJldHVybiEwPT09bz9pPjE/bi5TdHJpbmcuZGFzaGVyaXplKHQuYXQoMSkudmFsdWUo
KSk6bnVsbDohMT09PW8/aT4yP24uU3RyaW5nLmRhc2hlcml6ZSh0LmF0KDIpLnZhbHVlKCkpOm51
bGw6b31lLmRlZmF1bHQ9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbmV3IHQuSW50ZXJuYWxIZWxwZXJS
ZWZlcmVuY2UocixuKX19KSxlKCJlbWJlci1nbGltbWVyL2hlbHBlcnMvLWh0bWwtc2FmZSIsWyJl
eHBvcnRzIiwiZW1iZXItZ2xpbW1lci91dGlscy9yZWZlcmVuY2VzIiwiZW1iZXItZ2xpbW1lci91
dGlscy9zdHJpbmciXSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiCi1mdW5jdGlvbiByKGUp
e3ZhciB0PWUucG9zaXRpb25hbCxyPXQuYXQoMCkKLXJldHVybiBuZXcgbi5TYWZlU3RyaW5nKHIu
dmFsdWUoKSl9ZS5kZWZhdWx0PWZ1bmN0aW9uKGUsbil7cmV0dXJuIG5ldyB0LkludGVybmFsSGVs
cGVyUmVmZXJlbmNlKHIsbil9fSksZSgiZW1iZXItZ2xpbW1lci9oZWxwZXJzLy1pbnB1dC10eXBl
IixbImV4cG9ydHMiLCJlbWJlci1nbGltbWVyL3V0aWxzL3JlZmVyZW5jZXMiXSxmdW5jdGlvbihl
LHQpeyJ1c2Ugc3RyaWN0IgotZnVuY3Rpb24gbihlKXt2YXIgdD1lLnBvc2l0aW9uYWwKLWUubmFt
ZWQKLXJldHVybiJjaGVja2JveCI9PT10LmF0KDApLnZhbHVlKCk/Ii1jaGVja2JveCI6Ii10ZXh0
LWZpZWxkIn1lLmRlZmF1bHQ9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gbmV3IHQuSW50ZXJuYWxIZWxw
ZXJSZWZlcmVuY2UobixyKX19KSxlKCJlbWJlci1nbGltbWVyL2hlbHBlcnMvLW5vcm1hbGl6ZS1j
bGFzcyIsWyJleHBvcnRzIiwiZW1iZXItZ2xpbW1lci91dGlscy9yZWZlcmVuY2VzIiwiZW1iZXIt
cnVudGltZSJdLGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCIKLWZ1bmN0aW9uIHIoZSl7dmFy
IHQ9ZS5wb3NpdGlvbmFsLHI9KGUubmFtZWQsdC5hdCgwKS52YWx1ZSgpLnNwbGl0KCIuIikpLGk9
cltyLmxlbmd0aC0xXSxvPXQuYXQoMSkudmFsdWUoKQotcmV0dXJuITA9PT1vP24uU3RyaW5nLmRh
c2hlcml6ZShpKTpvfHwwPT09bz9TdHJpbmcobyk6IiJ9ZS5kZWZhdWx0PWZ1bmN0aW9uKGUsbil7
cmV0dXJuIG5ldyB0LkludGVybmFsSGVscGVyUmVmZXJlbmNlKHIsbil9fSksZSgiZW1iZXItZ2xp
bW1lci9oZWxwZXJzL2FjdGlvbiIsWyJleHBvcnRzIiwiZW1iZXItdXRpbHMiLCJlbWJlci1tZXRh
bCIsImVtYmVyLWdsaW1tZXIvdXRpbHMvcmVmZXJlbmNlcyIsIkBnbGltbWVyL3J1bnRpbWUiLCJA
Z2xpbW1lci9yZWZlcmVuY2UiLCJlbWJlci1kZWJ1ZyJdLGZ1bmN0aW9uKGUsdCxuLHIsaSxvLHMp
eyJ1c2Ugc3RyaWN0IgotZnVuY3Rpb24gYShlKXtyZXR1cm4gZX1mdW5jdGlvbiB1KGUsdCl7dmFy
IHI9bnVsbAotdC5sZW5ndGg+MCYmKHI9ZnVuY3Rpb24oZSl7cmV0dXJuIHQudmFsdWUoKS5jb25j
YXQoZSl9KQotdmFyIGk9bnVsbAotcmV0dXJuIGUmJihpPWZ1bmN0aW9uKHQpe3ZhciByPWUudmFs
dWUoKQotcmV0dXJuIHImJnQubGVuZ3RoPjAmJih0WzBdPSgwLG4uZ2V0KSh0WzBdLHIpKSx0fSks
ciYmaT9mdW5jdGlvbihlKXtyZXR1cm4gaShyKGUpKX06cnx8aXx8YX1mdW5jdGlvbiBsKGUsdCxu
LHIsaSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGMoZSx0LnZhbHVlKCksbi52YWx1ZSgpLHIs
aSkuYXBwbHkodm9pZCAwLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIGMoZSx0LHIsaSxvKXt2YXIgcyxh
PXZvaWQgMCx1PXZvaWQgMAotcmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHJbcF0/KGE9cix1PXJb
cF0pOihzPXR5cGVvZiByLCJzdHJpbmciPT09cz8oYT10LHU9dC5hY3Rpb25zJiZ0LmFjdGlvbnNb
cl0pOiJmdW5jdGlvbiI9PT1zJiYoYT1lLHU9cikpLGZ1bmN0aW9uKCl7Zm9yKGU9YXJndW1lbnRz
Lmxlbmd0aCx0PUFycmF5KGUpLHI9MDtyPGU7cisrKXRbcl09YXJndW1lbnRzW3JdCi12YXIgZSx0
LHIsbz17dGFyZ2V0OmEsYXJnczp0LGxhYmVsOiJAZ2xpbW1lci9jbG9zdXJlLWFjdGlvbiJ9Ci1y
ZXR1cm4oMCxuLmZsYWdnZWRJbnN0cnVtZW50KSgiaW50ZXJhY3Rpb24uZW1iZXItYWN0aW9uIixv
LGZ1bmN0aW9uKCl7cmV0dXJuIG4ucnVuLmpvaW4uYXBwbHkobi5ydW4sW2EsdV0uY29uY2F0KGko
dCkpKX0pfX1lLkFDVElPTj1lLklOVk9LRT12b2lkIDAsZS5kZWZhdWx0PWZ1bmN0aW9uKGUsdCl7
dmFyIG49dC5uYW1lZCxzPXQucG9zaXRpb25hbCxhPXMuYXQoMCksaD1zLmF0KDEpLGQ9aC5fcHJv
cGVydHlLZXksbT12b2lkIDAKLW09Mj09PXMubGVuZ3RoP2kuRXZhbHVhdGVkUG9zaXRpb25hbEFy
Z3MuZW1wdHkoKTppLkV2YWx1YXRlZFBvc2l0aW9uYWxBcmdzLmNyZWF0ZShzLnZhbHVlcy5zbGlj
ZSgyKSkKLXZhciBnPW4uaGFzKCJ0YXJnZXQiKT9uLmdldCgidGFyZ2V0Iik6YSx5PXUobi5oYXMo
InZhbHVlIikmJm4uZ2V0KCJ2YWx1ZSIpLG0pLHY9dm9pZCAwCi1yZXR1cm4gdj0iZnVuY3Rpb24i
PT10eXBlb2YgaFtwXT9jKGgsaCxoW3BdLHksZCk6KDAsby5pc0NvbnN0KShnKSYmKDAsby5pc0Nv
bnN0KShoKT9jKGEudmFsdWUoKSxnLnZhbHVlKCksaC52YWx1ZSgpLHksZCk6bChhLnZhbHVlKCks
ZyxoLHksZCksdltmXT0hMCxuZXcgci5VbmJvdW5kUmVmZXJlbmNlKHYpfQotdmFyIHA9ZS5JTlZP
S0U9KDAsdC5zeW1ib2wpKCJJTlZPS0UiKSxmPWUuQUNUSU9OPSgwLHQuc3ltYm9sKSgiQUNUSU9O
Iil9KSxlKCJlbWJlci1nbGltbWVyL2hlbHBlcnMvY29tcG9uZW50IixbImV4cG9ydHMiLCJlbWJl
ci1iYWJlbCIsImVtYmVyLXV0aWxzIiwiZW1iZXItZ2xpbW1lci91dGlscy9yZWZlcmVuY2VzIiwi
ZW1iZXItZ2xpbW1lci9zeW50YXgvY3VybHktY29tcG9uZW50IiwiQGdsaW1tZXIvcnVudGltZSIs
ImVtYmVyLWRlYnVnIl0sZnVuY3Rpb24oZSx0LG4scixpLG8scyl7InVzZSBzdHJpY3QiCi1mdW5j
dGlvbiBhKGUsdCl7dmFyIG49dShlLHQpCi1yZXR1cm4gbmV3IGkuQ3VybHlDb21wb25lbnREZWZp
bml0aW9uKGUubmFtZSxlLkNvbXBvbmVudENsYXNzLGUudGVtcGxhdGUsbil9ZnVuY3Rpb24gdShl
LHQpe3ZhciByLHMsYSx1PWUuYXJncyxsPWUuQ29tcG9uZW50Q2xhc3MscD1sLmNsYXNzLnBvc2l0
aW9uYWxQYXJhbXMsZj10LnBvc2l0aW9uYWwudmFsdWVzLGg9Zi5zbGljZSgxKQotcCYmaC5sZW5n
dGgmJigwLGkudmFsaWRhdGVQb3NpdGlvbmFsUGFyYW1ldGVycykodC5uYW1lZCxoLHApCi12YXIg
ZD17fQotaWYoInN0cmluZyIhPXR5cGVvZiBwJiZwJiZwLmxlbmd0aD4wKXtmb3Iocj1NYXRoLm1p
bihwLmxlbmd0aCxoLmxlbmd0aCkscz0wO3M8cjtzKyspYT1wW3NdLGRbYV09aFtzXQotaC5sZW5n
dGg9MH12YXIgbT11JiZ1Lm5hbWVkJiZ1Lm5hbWVkLm1hcHx8e30sZz11JiZ1LnBvc2l0aW9uYWwm
JnUucG9zaXRpb25hbC52YWx1ZXN8fFtdLHk9bmV3IEFycmF5KE1hdGgubWF4KGcubGVuZ3RoLGgu
bGVuZ3RoKSkKLXkuc3BsaWNlLmFwcGx5KHksWzAsZy5sZW5ndGhdLmNvbmNhdChnKSkseS5zcGxp
Y2UuYXBwbHkoeSxbMCxoLmxlbmd0aF0uY29uY2F0KGgpKQotdmFyIHY9KDAsbi5hc3NpZ24pKHt9
LG0sZCx0Lm5hbWVkLm1hcCkKLXJldHVybiBvLkV2YWx1YXRlZEFyZ3MuY3JlYXRlKG8uRXZhbHVh
dGVkUG9zaXRpb25hbEFyZ3MuY3JlYXRlKHkpLG8uRXZhbHVhdGVkTmFtZWRBcmdzLmNyZWF0ZSh2
KSxjKX1lLkNsb3N1cmVDb21wb25lbnRSZWZlcmVuY2U9dm9pZCAwLGUuZGVmYXVsdD1mdW5jdGlv
bihlLHQsbil7cmV0dXJuIGwuY3JlYXRlKHQsbixlLmVudil9Ci12YXIgbD1lLkNsb3N1cmVDb21w
b25lbnRSZWZlcmVuY2U9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbihuLHIsaSl7dmFyIG89KDAsdC5w
b3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKSh0aGlzLGUuY2FsbCh0aGlzKSkscz1uLnBvc2l0aW9u
YWwuYXQoMCkKLXJldHVybiBvLmRlZlJlZj1zLG8udGFnPXMudGFnLG8uZW52PWksby5zeW1ib2xU
YWJsZT1yLG8uYXJncz1uLG8ubGFzdERlZmluaXRpb249dm9pZCAwLG8ubGFzdE5hbWU9dm9pZCAw
LG99cmV0dXJuKDAsdC5pbmhlcml0cykobixlKSxuLmNyZWF0ZT1mdW5jdGlvbihlLHQscil7cmV0
dXJuIG5ldyBuKGUsdCxyKX0sbi5wcm90b3R5cGUuY29tcHV0ZT1mdW5jdGlvbigpe3ZhciBlPXRo
aXMuYXJncyx0PXRoaXMuZGVmUmVmLG49dGhpcy5lbnYscj10aGlzLnN5bWJvbFRhYmxlLGk9dGhp
cy5sYXN0RGVmaW5pdGlvbixzPXRoaXMubGFzdE5hbWUsdT10LnZhbHVlKCksbD1udWxsCi1pZih1
JiZ1PT09cylyZXR1cm4gaQotaWYodGhpcy5sYXN0TmFtZT11LCJzdHJpbmciPT10eXBlb2YgdSls
PW4uZ2V0Q29tcG9uZW50RGVmaW5pdGlvbihbdV0scikKLWVsc2V7aWYoISgwLG8uaXNDb21wb25l
bnREZWZpbml0aW9uKSh1KSlyZXR1cm4gbnVsbAotbD11fXZhciBjPWEobCxlKQotcmV0dXJuIHRo
aXMubGFzdERlZmluaXRpb249YyxjfSxufShyLkNhY2hlZFJlZmVyZW5jZSksYz17ZGVmYXVsdDpu
dWxsLGludmVyc2U6bnVsbH19KSxlKCJlbWJlci1nbGltbWVyL2hlbHBlcnMvY29uY2F0IixbImV4
cG9ydHMiLCJlbWJlci1nbGltbWVyL3V0aWxzL3JlZmVyZW5jZXMiLCJAZ2xpbW1lci9ydW50aW1l
Il0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IgotZnVuY3Rpb24gcihlKXtyZXR1cm4gZS5w
b3NpdGlvbmFsLnZhbHVlKCkubWFwKG4ubm9ybWFsaXplVGV4dFZhbHVlKS5qb2luKCIiKX1lLmRl
ZmF1bHQ9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbmV3IHQuSW50ZXJuYWxIZWxwZXJSZWZlcmVuY2Uo
cixuKX19KSxlKCJlbWJlci1nbGltbWVyL2hlbHBlcnMvZWFjaC1pbiIsWyJleHBvcnRzIiwiZW1i
ZXItdXRpbHMiXSxmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0IgotZS5pc0VhY2hJbj1mdW5jdGlv
bihlKXtyZXR1cm4gZSYmZVtuXX0sZS5kZWZhdWx0PWZ1bmN0aW9uKGUsdCl7dmFyIHI9T2JqZWN0
LmNyZWF0ZSh0LnBvc2l0aW9uYWwuYXQoMCkpCi1yZXR1cm4gcltuXT0hMCxyfQotdmFyIG49KDAs
dC5zeW1ib2wpKCJFQUNIX0lOIil9KSxlKCJlbWJlci1nbGltbWVyL2hlbHBlcnMvZ2V0IixbImV4
cG9ydHMiLCJlbWJlci1iYWJlbCIsImVtYmVyLW1ldGFsIiwiZW1iZXItZ2xpbW1lci91dGlscy9y
ZWZlcmVuY2VzIiwiQGdsaW1tZXIvcmVmZXJlbmNlIl0sZnVuY3Rpb24oZSx0LG4scixpKXsidXNl
IHN0cmljdCIKLWUuZGVmYXVsdD1mdW5jdGlvbihlLHQpe3JldHVybiBvLmNyZWF0ZSh0LnBvc2l0
aW9uYWwuYXQoMCksdC5wb3NpdGlvbmFsLmF0KDEpKX0KLXZhciBvPWZ1bmN0aW9uKGUpe2Z1bmN0
aW9uIG8obixyKXt2YXIgbz0oMCx0LnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4pKHRoaXMsZS5j
YWxsKHRoaXMpKQotby5zb3VyY2VSZWZlcmVuY2U9bixvLnBhdGhSZWZlcmVuY2U9cixvLmxhc3RQ
YXRoPW51bGwsby5pbm5lclJlZmVyZW5jZT1udWxsCi12YXIgcz1vLmlubmVyVGFnPW5ldyBpLlVw
ZGF0YWJsZVRhZyhpLkNPTlNUQU5UX1RBRykKLXJldHVybiBvLnRhZz0oMCxpLmNvbWJpbmUpKFtu
LnRhZyxyLnRhZyxzXSksb31yZXR1cm4oMCx0LmluaGVyaXRzKShvLGUpLG8uY3JlYXRlPWZ1bmN0
aW9uKGUsdCl7dmFyIG4KLXJldHVybigwLGkuaXNDb25zdCkodCk/KG49dC52YWx1ZSgpLnNwbGl0
KCIuIiksKDAsaS5yZWZlcmVuY2VGcm9tUGFydHMpKGUsbikpOm5ldyBvKGUsdCl9LG8ucHJvdG90
eXBlLmNvbXB1dGU9ZnVuY3Rpb24oKXt2YXIgZSx0PXRoaXMubGFzdFBhdGgsbj10aGlzLmlubmVy
UmVmZXJlbmNlLHI9dGhpcy5pbm5lclRhZyxvPXRoaXMubGFzdFBhdGg9dGhpcy5wYXRoUmVmZXJl
bmNlLnZhbHVlKCkKLXJldHVybiBvIT09dCYmKG8/KGU9dHlwZW9mIG8sInN0cmluZyI9PT1lP249
dGhpcy5pbm5lclJlZmVyZW5jZT0oMCxpLnJlZmVyZW5jZUZyb21QYXJ0cykodGhpcy5zb3VyY2VS
ZWZlcmVuY2Usby5zcGxpdCgiLiIpKToibnVtYmVyIj09PWUmJihuPXRoaXMuaW5uZXJSZWZlcmVu
Y2U9dGhpcy5zb3VyY2VSZWZlcmVuY2UuZ2V0KCIiK28pKSxyLnVwZGF0ZShuLnRhZykpOihuPXRo
aXMuaW5uZXJSZWZlcmVuY2U9bnVsbCxyLnVwZGF0ZShpLkNPTlNUQU5UX1RBRykpKSxuP24udmFs
dWUoKTpudWxsfSxvLnByb3RvdHlwZVtyLlVQREFURV09ZnVuY3Rpb24oZSl7KDAsbi5zZXQpKHRo
aXMuc291cmNlUmVmZXJlbmNlLnZhbHVlKCksdGhpcy5wYXRoUmVmZXJlbmNlLnZhbHVlKCksZSl9
LG99KHIuQ2FjaGVkUmVmZXJlbmNlKX0pLGUoImVtYmVyLWdsaW1tZXIvaGVscGVycy9oYXNoIixb
ImV4cG9ydHMiXSxmdW5jdGlvbihlKXsidXNlIHN0cmljdCIKLWUuZGVmYXVsdD1mdW5jdGlvbihl
LHQpe3JldHVybiB0Lm5hbWVkfX0pLGUoImVtYmVyLWdsaW1tZXIvaGVscGVycy9pZi11bmxlc3Mi
LFsiZXhwb3J0cyIsImVtYmVyLWJhYmVsIiwiZW1iZXItZGVidWciLCJlbWJlci1nbGltbWVyL3V0
aWxzL3JlZmVyZW5jZXMiLCJAZ2xpbW1lci9yZWZlcmVuY2UiXSxmdW5jdGlvbihlLHQsbixyLGkp
eyJ1c2Ugc3RyaWN0IgotZS5pbmxpbmVJZj1mdW5jdGlvbihlLHQpe3ZhciBuPXQucG9zaXRpb25h
bAotc3dpdGNoKG4ubGVuZ3RoKXtjYXNlIDI6cmV0dXJuIG8uY3JlYXRlKG4uYXQoMCksbi5hdCgx
KSxudWxsKQotY2FzZSAzOnJldHVybiBvLmNyZWF0ZShuLmF0KDApLG4uYXQoMSksbi5hdCgyKSl9
fSxlLmlubGluZVVubGVzcz1mdW5jdGlvbihlLHQpe3ZhciBuPXQucG9zaXRpb25hbAotc3dpdGNo
KG4ubGVuZ3RoKXtjYXNlIDI6cmV0dXJuIG8uY3JlYXRlKG4uYXQoMCksbnVsbCxuLmF0KDEpKQot
Y2FzZSAzOnJldHVybiBvLmNyZWF0ZShuLmF0KDApLG4uYXQoMiksbi5hdCgxKSl9fQotdmFyIG89
ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbihuLHIsbyl7dmFyIHM9KDAsdC5wb3NzaWJsZUNvbnN0cnVj
dG9yUmV0dXJuKSh0aGlzLGUuY2FsbCh0aGlzKSkKLXJldHVybiBzLmJyYW5jaFRhZz1uZXcgaS5V
cGRhdGFibGVUYWcoaS5DT05TVEFOVF9UQUcpLHMudGFnPSgwLGkuY29tYmluZSkoW24udGFnLHMu
YnJhbmNoVGFnXSkscy5jb25kPW4scy50cnV0aHk9cixzLmZhbHN5PW8sc31yZXR1cm4oMCx0Lmlu
aGVyaXRzKShuLGUpLG4uY3JlYXRlPWZ1bmN0aW9uKGUsdCxvKXt2YXIgcz1yLkNvbmRpdGlvbmFs
UmVmZXJlbmNlLmNyZWF0ZShlKSxhPXR8fHIuVU5ERUZJTkVEX1JFRkVSRU5DRSx1PW98fHIuVU5E
RUZJTkVEX1JFRkVSRU5DRQotcmV0dXJuKDAsaS5pc0NvbnN0KShzKT9zLnZhbHVlKCk/YTp1Om5l
dyBuKHMsYSx1KX0sbi5wcm90b3R5cGUuY29tcHV0ZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuY29u
ZCx0PXRoaXMudHJ1dGh5LG49dGhpcy5mYWxzeSxyPWUudmFsdWUoKT90Om4KLXJldHVybiB0aGlz
LmJyYW5jaFRhZy51cGRhdGUoci50YWcpLHIudmFsdWUoKX0sbn0oci5DYWNoZWRSZWZlcmVuY2Up
fSksZSgiZW1iZXItZ2xpbW1lci9oZWxwZXJzL2xvYyIsWyJleHBvcnRzIiwiZW1iZXItZ2xpbW1l
ci91dGlscy9yZWZlcmVuY2VzIiwiZW1iZXItcnVudGltZSJdLGZ1bmN0aW9uKGUsdCxuKXsidXNl
IHN0cmljdCIKLWZ1bmN0aW9uIHIoZSl7dmFyIHQ9ZS5wb3NpdGlvbmFsCi1yZXR1cm4gbi5TdHJp
bmcubG9jLmFwcGx5KG51bGwsdC52YWx1ZSgpKX1lLmRlZmF1bHQ9ZnVuY3Rpb24oZSxuKXtyZXR1
cm4gbmV3IHQuSW50ZXJuYWxIZWxwZXJSZWZlcmVuY2UocixuKX19KSxlKCJlbWJlci1nbGltbWVy
L2hlbHBlcnMvbG9nIixbImV4cG9ydHMiLCJlbWJlci1nbGltbWVyL3V0aWxzL3JlZmVyZW5jZXMi
LCJlbWJlci1jb25zb2xlIl0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IgotZnVuY3Rpb24g
cihlKXt2YXIgdD1lLnBvc2l0aW9uYWwKLW4uZGVmYXVsdC5sb2cuYXBwbHkobnVsbCx0LnZhbHVl
KCkpfWUuZGVmYXVsdD1mdW5jdGlvbihlLG4pe3JldHVybiBuZXcgdC5JbnRlcm5hbEhlbHBlclJl
ZmVyZW5jZShyLG4pfX0pLGUoImVtYmVyLWdsaW1tZXIvaGVscGVycy9tdXQiLFsiZXhwb3J0cyIs
ImVtYmVyLXV0aWxzIiwiZW1iZXItZGVidWciLCJlbWJlci1nbGltbWVyL3V0aWxzL3JlZmVyZW5j
ZXMiLCJlbWJlci1nbGltbWVyL2hlbHBlcnMvYWN0aW9uIl0sZnVuY3Rpb24oZSx0LG4scixpKXsi
dXNlIHN0cmljdCIKLWZ1bmN0aW9uIG8oZSl7cmV0dXJuIGUmJmVbc119ZS5pc011dD1vLGUudW5N
dXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGVbYV18fGV9LGUuZGVmYXVsdD1mdW5jdGlvbihlLHQpe3Zh
ciBuPXQucG9zaXRpb25hbC5hdCgwKQotaWYobyhuKSlyZXR1cm4gbgotdmFyIHU9T2JqZWN0LmNy
ZWF0ZShuKQotcmV0dXJuIHVbYV09bix1W2kuSU5WT0tFXT1uW3IuVVBEQVRFXSx1W3NdPSEwLHV9
Ci12YXIgcz0oMCx0LnN5bWJvbCkoIk1VVCIpLGE9KDAsdC5zeW1ib2wpKCJTT1VSQ0UiKX0pLGUo
ImVtYmVyLWdsaW1tZXIvaGVscGVycy9xdWVyeS1wYXJhbSIsWyJleHBvcnRzIiwiZW1iZXItdXRp
bHMiLCJlbWJlci1nbGltbWVyL3V0aWxzL3JlZmVyZW5jZXMiLCJlbWJlci1kZWJ1ZyIsImVtYmVy
LXJvdXRpbmciXSxmdW5jdGlvbihlLHQsbixyLGkpeyJ1c2Ugc3RyaWN0IgotZnVuY3Rpb24gbyhl
KXt2YXIgbj0oZS5wb3NpdGlvbmFsLGUubmFtZWQpCi1yZXR1cm4gaS5RdWVyeVBhcmFtcy5jcmVh
dGUoe3ZhbHVlczooMCx0LmFzc2lnbikoe30sbi52YWx1ZSgpKX0pfWUuZGVmYXVsdD1mdW5jdGlv
bihlLHQpe3JldHVybiBuZXcgbi5JbnRlcm5hbEhlbHBlclJlZmVyZW5jZShvLHQpfX0pLGUoImVt
YmVyLWdsaW1tZXIvaGVscGVycy9yZWFkb25seSIsWyJleHBvcnRzIiwiZW1iZXItZ2xpbW1lci91
dGlscy9yZWZlcmVuY2VzIiwiZW1iZXItZ2xpbW1lci9oZWxwZXJzL211dCJdLGZ1bmN0aW9uKGUs
dCxuKXsidXNlIHN0cmljdCIKLWUuZGVmYXVsdD1mdW5jdGlvbihlLHIpe3ZhciBpPSgwLG4udW5N
dXQpKHIucG9zaXRpb25hbC5hdCgwKSksbz1PYmplY3QuY3JlYXRlKGkpCi1yZXR1cm4gb1t0LlVQ
REFURV09dm9pZCAwLG99fSksZSgiZW1iZXItZ2xpbW1lci9oZWxwZXJzL3VuYm91bmQiLFsiZXhw
b3J0cyIsImVtYmVyLWRlYnVnIiwiZW1iZXItZ2xpbW1lci91dGlscy9yZWZlcmVuY2VzIl0sZnVu
Y3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IgotZS5kZWZhdWx0PWZ1bmN0aW9uKGUsdCl7cmV0dXJu
IG4uVW5ib3VuZFJlZmVyZW5jZS5jcmVhdGUodC5wb3NpdGlvbmFsLmF0KDApLnZhbHVlKCkpfX0p
LGUoImVtYmVyLWdsaW1tZXIvaW5kZXgiLFsiZXhwb3J0cyIsImVtYmVyLWdsaW1tZXIvaGVscGVy
cy9hY3Rpb24iLCJlbWJlci1nbGltbWVyL3RlbXBsYXRlcy9yb290IiwiZW1iZXItZ2xpbW1lci90
ZW1wbGF0ZSIsImVtYmVyLWdsaW1tZXIvY29tcG9uZW50cy9jaGVja2JveCIsImVtYmVyLWdsaW1t
ZXIvY29tcG9uZW50cy90ZXh0X2ZpZWxkIiwiZW1iZXItZ2xpbW1lci9jb21wb25lbnRzL3RleHRf
YXJlYSIsImVtYmVyLWdsaW1tZXIvY29tcG9uZW50cy9saW5rLXRvIiwiZW1iZXItZ2xpbW1lci9j
b21wb25lbnQiLCJlbWJlci1nbGltbWVyL2hlbHBlciIsImVtYmVyLWdsaW1tZXIvZW52aXJvbm1l
bnQiLCJlbWJlci1nbGltbWVyL3V0aWxzL3N0cmluZyIsImVtYmVyLWdsaW1tZXIvcmVuZGVyZXIi
LCJlbWJlci1nbGltbWVyL3RlbXBsYXRlX3JlZ2lzdHJ5IiwiZW1iZXItZ2xpbW1lci9zZXR1cC1y
ZWdpc3RyeSIsImVtYmVyLWdsaW1tZXIvZG9tIiwiZW1iZXItZ2xpbW1lci9zeW50YXgiXSxmdW5j
dGlvbihlLHQsbixyLGksbyxzLGEsdSxsLGMscCxmLGgsZCxtLGcpeyJ1c2Ugc3RyaWN0IgotT2Jq
ZWN0LmRlZmluZVByb3BlcnR5KGUsIklOVk9LRSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9u
KCl7cmV0dXJuIHQuSU5WT0tFfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJSb290VGVtcGxh
dGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBuLmRlZmF1bHR9fSksT2Jq
ZWN0LmRlZmluZVByb3BlcnR5KGUsInRlbXBsYXRlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rp
b24oKXtyZXR1cm4gci5kZWZhdWx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJDaGVja2Jv
eCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkuZGVmYXVsdH19KSxPYmpl
Y3QuZGVmaW5lUHJvcGVydHkoZSwiVGV4dEZpZWxkIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rp
b24oKXtyZXR1cm4gby5kZWZhdWx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJUZXh0QXJl
YSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHMuZGVmYXVsdH19KSxPYmpl
Y3QuZGVmaW5lUHJvcGVydHkoZSwiTGlua0NvbXBvbmVudCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1
bmN0aW9uKCl7cmV0dXJuIGEuZGVmYXVsdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiQ29t
cG9uZW50Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdS5kZWZhdWx0fX0p
LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJIZWxwZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5j
dGlvbigpe3JldHVybiBsLmRlZmF1bHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImhlbHBl
ciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGwuaGVscGVyfX0pLE9iamVj
dC5kZWZpbmVQcm9wZXJ0eShlLCJFbnZpcm9ubWVudCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0
aW9uKCl7cmV0dXJuIGMuZGVmYXVsdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiU2FmZVN0
cmluZyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHAuU2FmZVN0cmluZ319
KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiZXNjYXBlRXhwcmVzc2lvbiIse2VudW1lcmFibGU6
ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHAuZXNjYXBlRXhwcmVzc2lvbn19KSxPYmplY3QuZGVm
aW5lUHJvcGVydHkoZSwiaHRtbFNhZmUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3Jl
dHVybiBwLmh0bWxTYWZlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJpc0hUTUxTYWZlIix7
ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcC5pc0hUTUxTYWZlfX0pLE9iamVj
dC5kZWZpbmVQcm9wZXJ0eShlLCJfZ2V0U2FmZVN0cmluZyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1
bmN0aW9uKCl7cmV0dXJuIHAuZ2V0U2FmZVN0cmluZ319KSxPYmplY3QuZGVmaW5lUHJvcGVydHko
ZSwiUmVuZGVyZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBmLlJlbmRl
cmVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJJbmVydFJlbmRlcmVyIix7ZW51bWVyYWJs
ZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZi5JbmVydFJlbmRlcmVyfX0pLE9iamVjdC5kZWZp
bmVQcm9wZXJ0eShlLCJJbnRlcmFjdGl2ZVJlbmRlcmVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVu
Y3Rpb24oKXtyZXR1cm4gZi5JbnRlcmFjdGl2ZVJlbmRlcmVyfX0pLE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShlLCJnZXRUZW1wbGF0ZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJu
IGguZ2V0VGVtcGxhdGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInNldFRlbXBsYXRlIix7
ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaC5zZXRUZW1wbGF0ZX19KSxPYmpl
Y3QuZGVmaW5lUHJvcGVydHkoZSwiaGFzVGVtcGxhdGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5j
dGlvbigpe3JldHVybiBoLmhhc1RlbXBsYXRlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJn
ZXRUZW1wbGF0ZXMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBoLmdldFRl
bXBsYXRlc319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwic2V0VGVtcGxhdGVzIix7ZW51bWVy
YWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaC5zZXRUZW1wbGF0ZXN9fSksT2JqZWN0LmRl
ZmluZVByb3BlcnR5KGUsInNldHVwRW5naW5lUmVnaXN0cnkiLHtlbnVtZXJhYmxlOiEwLGdldDpm
dW5jdGlvbigpe3JldHVybiBkLnNldHVwRW5naW5lUmVnaXN0cnl9fSksT2JqZWN0LmRlZmluZVBy
b3BlcnR5KGUsInNldHVwQXBwbGljYXRpb25SZWdpc3RyeSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1
bmN0aW9uKCl7cmV0dXJuIGQuc2V0dXBBcHBsaWNhdGlvblJlZ2lzdHJ5fX0pLE9iamVjdC5kZWZp
bmVQcm9wZXJ0eShlLCJET01DaGFuZ2VzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXty
ZXR1cm4gbS5ET01DaGFuZ2VzfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJOb2RlRE9NVHJl
ZUNvbnN0cnVjdGlvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG0uTm9k
ZURPTVRyZWVDb25zdHJ1Y3Rpb259fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIkRPTVRyZWVD
b25zdHJ1Y3Rpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBtLkRPTVRy
ZWVDb25zdHJ1Y3Rpb259fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9yZWdpc3Rlck1hY3Jv
cyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcucmVnaXN0ZXJNYWNyb3N9
fSkKLU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfZXhwZXJpbWVudGFsTWFjcm9zIix7ZW51bWVy
YWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5leHBlcmltZW50YWxNYWNyb3N9fSl9KSxl
KCJlbWJlci1nbGltbWVyL21vZGlmaWVycy9hY3Rpb24iLFsiZXhwb3J0cyIsImVtYmVyLXV0aWxz
IiwiZW1iZXItbWV0YWwiLCJlbWJlci1kZWJ1ZyIsImVtYmVyLXZpZXdzIiwiZW1iZXItZ2xpbW1l
ci9oZWxwZXJzL2FjdGlvbiJdLGZ1bmN0aW9uKGUsdCxuLHIsaSxvKXsidXNlIHN0cmljdCIKLWZ1
bmN0aW9uIHMoZSx0KXt2YXIgbgotaWYobnVsbD09PXR8fHZvaWQgMD09PXQpe2lmKHUudGVzdChl
LnR5cGUpKXJldHVybigwLGkuaXNTaW1wbGVDbGljaykoZSkKLXQ9IiJ9aWYodC5pbmRleE9mKCJh
bnkiKT49MClyZXR1cm4hMAotZm9yKG49MDtuPGEubGVuZ3RoO24rKylpZihlW2Fbbl0rIktleSJd
JiYtMT09PXQuaW5kZXhPZihhW25dKSlyZXR1cm4hMQotcmV0dXJuITB9ZS5BY3Rpb25TdGF0ZT1l
LkFjdGlvbkhlbHBlcj12b2lkIDAKLXZhciBhPVsiYWx0Iiwic2hpZnQiLCJtZXRhIiwiY3RybCJd
LHU9L15jbGlja3xtb3VzZXx0b3VjaC8sbD1lLkFjdGlvbkhlbHBlcj17cmVnaXN0ZXJlZEFjdGlv
bnM6aS5BY3Rpb25NYW5hZ2VyLnJlZ2lzdGVyZWRBY3Rpb25zLHJlZ2lzdGVyQWN0aW9uOmZ1bmN0
aW9uKGUpe3ZhciB0PWUuYWN0aW9uSWQKLXJldHVybiBpLkFjdGlvbk1hbmFnZXIucmVnaXN0ZXJl
ZEFjdGlvbnNbdF09ZSx0fSx1bnJlZ2lzdGVyQWN0aW9uOmZ1bmN0aW9uKGUpe3ZhciB0PWUuYWN0
aW9uSWQKLWRlbGV0ZSBpLkFjdGlvbk1hbmFnZXIucmVnaXN0ZXJlZEFjdGlvbnNbdF19fSxjPWUu
QWN0aW9uU3RhdGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuLHIsaSxvLHMsYSl7dGhpcy5l
bGVtZW50PWUsdGhpcy5hY3Rpb25JZD10LHRoaXMuYWN0aW9uTmFtZT1uLHRoaXMuYWN0aW9uQXJn
cz1yLHRoaXMubmFtZWRBcmdzPWksdGhpcy5wb3NpdGlvbmFsPW8sdGhpcy5pbXBsaWNpdFRhcmdl
dD1zLHRoaXMuZG9tPWEsdGhpcy5ldmVudE5hbWU9dGhpcy5nZXRFdmVudE5hbWUoKX1yZXR1cm4g
ZS5wcm90b3R5cGUuZ2V0RXZlbnROYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmFtZWRBcmdz
LmdldCgib24iKS52YWx1ZSgpfHwiY2xpY2sifSxlLnByb3RvdHlwZS5nZXRBY3Rpb25BcmdzPWZ1
bmN0aW9uKCl7dmFyIGUsdD1uZXcgQXJyYXkodGhpcy5hY3Rpb25BcmdzLmxlbmd0aCkKLWZvcihl
PTA7ZTx0aGlzLmFjdGlvbkFyZ3MubGVuZ3RoO2UrKyl0W2VdPXRoaXMuYWN0aW9uQXJnc1tlXS52
YWx1ZSgpCi1yZXR1cm4gdH0sZS5wcm90b3R5cGUuZ2V0VGFyZ2V0PWZ1bmN0aW9uKCl7dmFyIGU9
dGhpcy5pbXBsaWNpdFRhcmdldCx0PXRoaXMubmFtZWRBcmdzCi1yZXR1cm4gdC5oYXMoInRhcmdl
dCIpP3QuZ2V0KCJ0YXJnZXQiKS52YWx1ZSgpOmUudmFsdWUoKX0sZS5wcm90b3R5cGUuaGFuZGxl
cj1mdW5jdGlvbihlKXt2YXIgdD10aGlzLHI9dGhpcy5hY3Rpb25OYW1lLGk9dGhpcy5uYW1lZEFy
Z3MsYT1pLmdldCgiYnViYmxlcyIpLHU9aS5nZXQoInByZXZlbnREZWZhdWx0IiksbD1pLmdldCgi
YWxsb3dlZEtleXMiKSxjPXRoaXMuZ2V0VGFyZ2V0KCkKLWlmKCFzKGUsbC52YWx1ZSgpKSlyZXR1
cm4hMAotITEhPT11LnZhbHVlKCkmJmUucHJldmVudERlZmF1bHQoKSwhMT09PWEudmFsdWUoKSYm
ZS5zdG9wUHJvcGFnYXRpb24oKSwoMCxuLnJ1bikoZnVuY3Rpb24oKXt2YXIgZT10LmdldEFjdGlv
bkFyZ3MoKSxpPXthcmdzOmUsdGFyZ2V0OmN9Ci1yZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygcltv
LklOVk9LRV0/dm9pZCgwLG4uZmxhZ2dlZEluc3RydW1lbnQpKCJpbnRlcmFjdGlvbi5lbWJlci1h
Y3Rpb24iLGksZnVuY3Rpb24oKXtyW28uSU5WT0tFXS5hcHBseShyLGUpfSk6ImZ1bmN0aW9uIj09
dHlwZW9mIHI/dm9pZCgwLG4uZmxhZ2dlZEluc3RydW1lbnQpKCJpbnRlcmFjdGlvbi5lbWJlci1h
Y3Rpb24iLGksZnVuY3Rpb24oKXtyLmFwcGx5KGMsZSl9KTooaS5uYW1lPXIsdm9pZChjLnNlbmQ/
KDAsbi5mbGFnZ2VkSW5zdHJ1bWVudCkoImludGVyYWN0aW9uLmVtYmVyLWFjdGlvbiIsaSxmdW5j
dGlvbigpe2Muc2VuZC5hcHBseShjLFtyXS5jb25jYXQoZSkpfSk6KDAsbi5mbGFnZ2VkSW5zdHJ1
bWVudCkoImludGVyYWN0aW9uLmVtYmVyLWFjdGlvbiIsaSxmdW5jdGlvbigpe2Nbcl0uYXBwbHko
YyxlKX0pKSl9KX0sZS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe2wudW5yZWdpc3RlckFj
dGlvbih0aGlzKX0sZX0oKSxwPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe31yZXR1cm4gZS5wcm90
b3R5cGUuY3JlYXRlPWZ1bmN0aW9uKGUsbixyLGkpe3ZhciBzLGE9bi5uYW1lZCx1PW4ucG9zaXRp
b25hbCxsPXZvaWQgMCxwPXZvaWQgMCxmPXZvaWQgMAotdS5sZW5ndGg+MSYmKGw9dS5hdCgwKSxm
PXUuYXQoMSksZltvLklOVk9LRV0/cD1mOihmLl9wcm9wZXJ0eUtleSxwPWYudmFsdWUoKSkpCi12
YXIgaD1bXQotZm9yKHM9MjtzPHUubGVuZ3RoO3MrKyloLnB1c2godS5hdChzKSkKLXZhciBkPSgw
LHQudXVpZCkoKQotcmV0dXJuIG5ldyBjKGUsZCxwLGgsYSx1LGwsaSl9LGUucHJvdG90eXBlLmlu
c3RhbGw9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5kb20sbj1lLmVsZW1lbnQscj1lLmFjdGlvbklkCi1s
LnJlZ2lzdGVyQWN0aW9uKGUpLHQuc2V0QXR0cmlidXRlKG4sImRhdGEtZW1iZXItYWN0aW9uIiwi
IiksdC5zZXRBdHRyaWJ1dGUobiwiZGF0YS1lbWJlci1hY3Rpb24tIityLHIpfSxlLnByb3RvdHlw
ZS51cGRhdGU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wb3NpdGlvbmFsLG49dC5hdCgxKQotbltvLklO
Vk9LRV18fChlLmFjdGlvbk5hbWU9bi52YWx1ZSgpKSxlLmV2ZW50TmFtZT1lLmdldEV2ZW50TmFt
ZSgpfSxlLnByb3RvdHlwZS5nZXREZXN0cnVjdG9yPWZ1bmN0aW9uKGUpe3JldHVybiBlfSxlfSgp
Ci1lLmRlZmF1bHQ9cH0pLGUoImVtYmVyLWdsaW1tZXIvcHJvdG9jb2wtZm9yLXVybCIsWyJleHBv
cnRzIiwiZW1iZXItZW52aXJvbm1lbnQiLCJub2RlLW1vZHVsZSJdLGZ1bmN0aW9uKGUsdCxuKXsi
dXNlIHN0cmljdCIKLWZ1bmN0aW9uIHIoZSl7cmV0dXJuIHN8fChzPWRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoImEiKSkscy5ocmVmPWUscy5wcm90b2NvbH1mdW5jdGlvbiBpKGUpe3ZhciB0PW51bGwK
LXJldHVybiJzdHJpbmciPT10eXBlb2YgZSYmKHQ9by5wYXJzZShlKS5wcm90b2NvbCksbnVsbD09
PXQ/IjoiOnR9ZS5kZWZhdWx0PWZ1bmN0aW9uKGUpe3ZhciBzPXZvaWQgMAotaWYodC5lbnZpcm9u
bWVudC5oYXNET00mJihzPXIuY2FsbChlLCJmb29iYXI6YmF6IikpLCJmb29iYXI6Ij09PXMpZS5w
cm90b2NvbEZvclVSTD1yCi1lbHNlIGlmKCJvYmplY3QiPT10eXBlb2YgVVJMKW89VVJMLGUucHJv
dG9jb2xGb3JVUkw9aQotZWxzZXtpZighbi5JU19OT0RFKXRocm93IG5ldyBFcnJvcigiQ291bGQg
bm90IGZpbmQgdmFsaWQgVVJMIHBhcnNpbmcgbWVjaGFuaXNtIGZvciBVUkwgU2FuaXRpemF0aW9u
IikKLW89KDAsbi5yZXF1aXJlKSgidXJsIiksZS5wcm90b2NvbEZvclVSTD1pfX0KLXZhciBvPXZv
aWQgMCxzPXZvaWQgMH0pLGUoImVtYmVyLWdsaW1tZXIvcmVuZGVyZXIiLFsiZXhwb3J0cyIsImVt
YmVyLWJhYmVsIiwiZW1iZXItZ2xpbW1lci91dGlscy9yZWZlcmVuY2VzIiwiZW1iZXItbWV0YWwi
LCJAZ2xpbW1lci9yZWZlcmVuY2UiLCJlbWJlci12aWV3cyIsImVtYmVyLWdsaW1tZXIvY29tcG9u
ZW50IiwiZW1iZXItZ2xpbW1lci9zeW50YXgvY3VybHktY29tcG9uZW50IiwiZW1iZXItZ2xpbW1l
ci9zeW50YXgvb3V0bGV0IiwiZW1iZXItZGVidWciXSxmdW5jdGlvbihlLHQsbixyLGksbyxzLGEs
dSxsKXsidXNlIHN0cmljdCIKLWZ1bmN0aW9uIGMoZSl7Zy5wdXNoKGUpfWZ1bmN0aW9uIHAoZSl7
dmFyIHQ9Zy5pbmRleE9mKGUpCi1nLnNwbGljZSh0LDEpfWZ1bmN0aW9uIGYoKXt9ZS5JbnRlcmFj
dGl2ZVJlbmRlcmVyPWUuSW5lcnRSZW5kZXJlcj12b2lkIDAKLXZhciBoPXIucnVuLmJhY2tidXJu
ZXIsZD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG4pe3RoaXMudmlldz1lLHRoaXMub3V0bGV0
U3RhdGU9dCx0aGlzLnJvb3RPdXRsZXRTdGF0ZT1ufXJldHVybiBlLnByb3RvdHlwZS5jaGlsZD1m
dW5jdGlvbigpe3JldHVybiBuZXcgZSh0aGlzLnZpZXcsdGhpcy5vdXRsZXRTdGF0ZSx0aGlzLnJv
b3RPdXRsZXRTdGF0ZSl9LGUucHJvdG90eXBlLmdldD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5v
dXRsZXRTdGF0ZX0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMub3V0
bGV0U3RhdGU9dCx0fSxlfSgpLG09ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuLHIsaSxzKXt2
YXIgYT10aGlzCi10aGlzLmlkPSgwLG8uZ2V0Vmlld0lkKShlKSx0aGlzLmVudj10LHRoaXMucm9v
dD1lLHRoaXMucmVzdWx0PXZvaWQgMCx0aGlzLnNob3VsZFJlZmx1c2g9ITEsdGhpcy5kZXN0cm95
ZWQ9ITEsdGhpcy5fcmVtb3Zpbmc9ITEKLXZhciB1PXRoaXMub3B0aW9ucz17YWx3YXlzUmV2YWxp
ZGF0ZTohMX0KLXRoaXMucmVuZGVyPWZ1bmN0aW9uKCl7dmFyIGU9bi5yZW5kZXIocixpLHMpLHQ9
dm9pZCAwCi1kb3t0PWUubmV4dCgpfXdoaWxlKCF0LmRvbmUpCi12YXIgbz1hLnJlc3VsdD10LnZh
bHVlCi1hLnJlbmRlcj1mdW5jdGlvbigpe28ucmVyZW5kZXIodSl9fX1yZXR1cm4gZS5wcm90b3R5
cGUuaXNGb3I9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucm9vdD09PWV9LGUucHJvdG90eXBlLmRl
c3Ryb3k9ZnVuY3Rpb24oKXt2YXIgZSx0PXRoaXMucmVzdWx0LG49dGhpcy5lbnYKLXRoaXMuZGVz
dHJveWVkPSEwLHRoaXMuZW52PW51bGwsdGhpcy5yb290PW51bGwsdGhpcy5yZXN1bHQ9bnVsbCx0
aGlzLnJlbmRlcj1udWxsLHQmJihlPSFuLmluVHJhbnNhY3Rpb24sZSYmbi5iZWdpbigpLHQuZGVz
dHJveSgpLGUmJm4uY29tbWl0KCkpfSxlfSgpLGc9W107KDAsci5zZXRIYXNWaWV3cykoZnVuY3Rp
b24oKXtyZXR1cm4gZy5sZW5ndGg+MH0pCi12YXIgeT0wCi1oLm9uKCJiZWdpbiIsZnVuY3Rpb24o
KXt2YXIgZQotZm9yKGU9MDtlPGcubGVuZ3RoO2UrKylnW2VdLl9zY2hlZHVsZVJldmFsaWRhdGUo
KX0pLGgub24oImVuZCIsZnVuY3Rpb24oKXt2YXIgZQotZm9yKGU9MDtlPGcubGVuZ3RoO2UrKylp
ZighZ1tlXS5faXNWYWxpZCgpKXtpZih5PjEwKXRocm93IHk9MCxnW2VdLmRlc3Ryb3koKSxuZXcg
RXJyb3IoImluZmluaXRlIHJlbmRlcmluZyBpbnZhbGlkYXRpb24gZGV0ZWN0ZWQiKQotcmV0dXJu
IHkrKyxoLmpvaW4obnVsbCxmKX15PTB9KQotdmFyIHY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUs
dCl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1l
bnRzWzJdOm8uZmFsbGJhY2tWaWV3UmVnaXN0cnkscj1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQg
MCE9PWFyZ3VtZW50c1szXSYmYXJndW1lbnRzWzNdCi10aGlzLl9lbnY9ZSx0aGlzLl9yb290VGVt
cGxhdGU9dCx0aGlzLl92aWV3UmVnaXN0cnk9bix0aGlzLl9kZXN0aW5lZEZvckRPTT1yLHRoaXMu
X2Rlc3Ryb3llZD0hMSx0aGlzLl9yb290cz1bXSx0aGlzLl9sYXN0UmV2aXNpb249bnVsbCx0aGlz
Ll9pc1JlbmRlcmluZ1Jvb3RzPSExLHRoaXMuX3JlbW92ZWRSb290cz1bXX1yZXR1cm4gZS5wcm90
b3R5cGUuYXBwZW5kT3V0bGV0Vmlldz1mdW5jdGlvbihlLHQpe3ZhciBuPW5ldyB1LlRvcExldmVs
T3V0bGV0Q29tcG9uZW50RGVmaW5pdGlvbihlKSxyPWUudG9SZWZlcmVuY2UoKSxpPWUub3V0bGV0
U3RhdGUucmVuZGVyLmNvbnRyb2xsZXIKLXRoaXMuX2FwcGVuZERlZmluaXRpb24oZSxuLHQscixp
KX0sZS5wcm90b3R5cGUuYXBwZW5kVG89ZnVuY3Rpb24oZSx0KXt2YXIgbj1uZXcgYS5Sb290Q29t
cG9uZW50RGVmaW5pdGlvbihlKQotdGhpcy5fYXBwZW5kRGVmaW5pdGlvbihlLG4sdCl9LGUucHJv
dG90eXBlLl9hcHBlbmREZWZpbml0aW9uPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbz1hcmd1bWVudHMu
bGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106aS5VTkRFRklORURf
UkVGRVJFTkNFLHM9YXJndW1lbnRzLmxlbmd0aD40JiZ2b2lkIDAhPT1hcmd1bWVudHNbNF0/YXJn
dW1lbnRzWzRdOm51bGwsYT1uZXcgbi5Sb290UmVmZXJlbmNlKHQpLHU9bmV3IGQobnVsbCxvLG8s
ITAscyksbD1uZXcgbShlLHRoaXMuX2Vudix0aGlzLl9yb290VGVtcGxhdGUsYSxyLHUpCi10aGlz
Ll9yZW5kZXJSb290KGwpfSxlLnByb3RvdHlwZS5yZXJlbmRlcj1mdW5jdGlvbigpe3RoaXMuX3Nj
aGVkdWxlUmV2YWxpZGF0ZSgpfSxlLnByb3RvdHlwZS5yZWdpc3Rlcj1mdW5jdGlvbihlKXt2YXIg
dD0oMCxvLmdldFZpZXdJZCkoZSkKLXRoaXMuX3ZpZXdSZWdpc3RyeVt0XT1lfSxlLnByb3RvdHlw
ZS51bnJlZ2lzdGVyPWZ1bmN0aW9uKGUpe2RlbGV0ZSB0aGlzLl92aWV3UmVnaXN0cnlbKDAsby5n
ZXRWaWV3SWQpKGUpXX0sZS5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKGUpe2UuX3RyYW5zaXRp
b25UbygiZGVzdHJveWluZyIpLHRoaXMuY2xlYW51cFJvb3RGb3IoZSksKDAsby5zZXRWaWV3RWxl
bWVudCkoZSxudWxsKSx0aGlzLl9kZXN0aW5lZEZvckRPTSYmZS50cmlnZ2VyKCJkaWREZXN0cm95
RWxlbWVudCIpLGUuaXNEZXN0cm95aW5nfHxlLmRlc3Ryb3koKX0sZS5wcm90b3R5cGUuY2xlYW51
cFJvb3RGb3I9ZnVuY3Rpb24oZSl7aWYoIXRoaXMuX2Rlc3Ryb3llZClmb3IodmFyIHQsbj10aGlz
Ll9yb290cyxyPXRoaXMuX3Jvb3RzLmxlbmd0aDtyLS07KXQ9bltyXSx0LmlzRm9yKGUpJiZ0LmRl
c3Ryb3koKX0sZS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX2Rlc3Ryb3llZHx8
KHRoaXMuX2Rlc3Ryb3llZD0hMCx0aGlzLl9jbGVhckFsbFJvb3RzKCkpfSxlLnByb3RvdHlwZS5n
ZXRFbGVtZW50PWZ1bmN0aW9uKCl7fSxlLnByb3RvdHlwZS5nZXRCb3VuZHM9ZnVuY3Rpb24oZSl7
dmFyIHQ9ZVtzLkJPVU5EU10KLXJldHVybntwYXJlbnRFbGVtZW50OnQucGFyZW50RWxlbWVudCgp
LGZpcnN0Tm9kZTp0LmZpcnN0Tm9kZSgpLGxhc3ROb2RlOnQubGFzdE5vZGUoKX19LGUucHJvdG90
eXBlLmNyZWF0ZUVsZW1lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2Vudi5nZXRBcHBlbmRP
cGVyYXRpb25zKCkuY3JlYXRlRWxlbWVudChlKX0sZS5wcm90b3R5cGUuX3JlbmRlclJvb3Q9ZnVu
Y3Rpb24oZSl7dmFyIHQ9dGhpcy5fcm9vdHMKLXQucHVzaChlKSwxPT09dC5sZW5ndGgmJmModGhp
cyksdGhpcy5fcmVuZGVyUm9vdHNUcmFuc2FjdGlvbigpfSxlLnByb3RvdHlwZS5fcmVuZGVyUm9v
dHM9ZnVuY3Rpb24oKXt2YXIgZSx0LG4sbyxzLGE9dGhpcy5fcm9vdHMsdT10aGlzLl9lbnYsbD10
aGlzLl9yZW1vdmVkUm9vdHMsYz12b2lkIDAsZj12b2lkIDAKLWRve2Zvcih1LmJlZ2luKCksZj1h
Lmxlbmd0aCxjPSExLGU9MDtlPGEubGVuZ3RoO2UrKyl0PWFbZV0sdC5kZXN0cm95ZWQ/bC5wdXNo
KHQpOihuPXQuc2hvdWxkUmVmbHVzaCxlPj1mJiYhbnx8KHQub3B0aW9ucy5hbHdheXNSZXZhbGlk
YXRlPW4sbj10LnNob3VsZFJlZmx1c2g9KDAsci5ydW5JblRyYW5zYWN0aW9uKSh0LCJyZW5kZXIi
KSxjPWN8fG4pKQotdGhpcy5fbGFzdFJldmlzaW9uPWkuQ1VSUkVOVF9UQUcudmFsdWUoKSx1LmNv
bW1pdCgpfXdoaWxlKGN8fGEubGVuZ3RoPmYpCi1mb3IoO2wubGVuZ3RoOylvPWwucG9wKCkscz1h
LmluZGV4T2YobyksYS5zcGxpY2UocywxKQotMD09PXRoaXMuX3Jvb3RzLmxlbmd0aCYmcCh0aGlz
KX0sZS5wcm90b3R5cGUuX3JlbmRlclJvb3RzVHJhbnNhY3Rpb249ZnVuY3Rpb24oKXtpZighdGhp
cy5faXNSZW5kZXJpbmdSb290cyl7dGhpcy5faXNSZW5kZXJpbmdSb290cz0hMAotdmFyIGU9ITEK
LXRyeXt0aGlzLl9yZW5kZXJSb290cygpLGU9ITB9ZmluYWxseXtlfHwodGhpcy5fbGFzdFJldmlz
aW9uPWkuQ1VSUkVOVF9UQUcudmFsdWUoKSksdGhpcy5faXNSZW5kZXJpbmdSb290cz0hMX19fSxl
LnByb3RvdHlwZS5fY2xlYXJBbGxSb290cz1mdW5jdGlvbigpe3ZhciBlLHQsbj10aGlzLl9yb290
cwotZm9yKGU9MDtlPG4ubGVuZ3RoO2UrKyl0PW5bZV0sdC5kZXN0cm95KCkKLXRoaXMuX3JlbW92
ZWRSb290cy5sZW5ndGg9MCx0aGlzLl9yb290cz1udWxsLG4ubGVuZ3RoJiZwKHRoaXMpfSxlLnBy
b3RvdHlwZS5fc2NoZWR1bGVSZXZhbGlkYXRlPWZ1bmN0aW9uKCl7aC5zY2hlZHVsZU9uY2UoInJl
bmRlciIsdGhpcyx0aGlzLl9yZXZhbGlkYXRlKX0sZS5wcm90b3R5cGUuX2lzVmFsaWQ9ZnVuY3Rp
b24oKXtyZXR1cm4gdGhpcy5fZGVzdHJveWVkfHwwPT09dGhpcy5fcm9vdHMubGVuZ3RofHxpLkNV
UlJFTlRfVEFHLnZhbGlkYXRlKHRoaXMuX2xhc3RSZXZpc2lvbil9LGUucHJvdG90eXBlLl9yZXZh
bGlkYXRlPWZ1bmN0aW9uKCl7dGhpcy5faXNWYWxpZCgpfHx0aGlzLl9yZW5kZXJSb290c1RyYW5z
YWN0aW9uKCl9LGV9KCkKLWUuSW5lcnRSZW5kZXJlcj1mdW5jdGlvbihlKXtmdW5jdGlvbiBuKCl7
cmV0dXJuKDAsdC5wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKSh0aGlzLGUuYXBwbHkodGhpcyxh
cmd1bWVudHMpKX1yZXR1cm4oMCx0LmluaGVyaXRzKShuLGUpLG4uY3JlYXRlPWZ1bmN0aW9uKGUp
e3JldHVybiBuZXcgdGhpcyhlLmVudixlLnJvb3RUZW1wbGF0ZSxlLl92aWV3UmVnaXN0cnksITEp
fSxuLnByb3RvdHlwZS5nZXRFbGVtZW50PWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJBY2Nl
c3NpbmcgYHRoaXMuZWxlbWVudGAgaXMgbm90IGFsbG93ZWQgaW4gbm9uLWludGVyYWN0aXZlIGVu
dmlyb25tZW50cyAoc3VjaCBhcyBGYXN0Qm9vdCkuIil9LG59KHYpLGUuSW50ZXJhY3RpdmVSZW5k
ZXJlcj1mdW5jdGlvbihlKXtmdW5jdGlvbiBuKCl7cmV0dXJuKDAsdC5wb3NzaWJsZUNvbnN0cnVj
dG9yUmV0dXJuKSh0aGlzLGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4oMCx0LmluaGVy
aXRzKShuLGUpLG4uY3JlYXRlPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdGhpcyhlLmVudixlLnJv
b3RUZW1wbGF0ZSxlLl92aWV3UmVnaXN0cnksITApfSxuLnByb3RvdHlwZS5nZXRFbGVtZW50PWZ1
bmN0aW9uKGUpe3JldHVybigwLG8uZ2V0Vmlld0VsZW1lbnQpKGUpfSxufSh2KX0pCi1lKCJlbWJl
ci1nbGltbWVyL3NldHVwLXJlZ2lzdHJ5IixbImV4cG9ydHMiLCJlbWJlci1iYWJlbCIsImVtYmVy
LWVudmlyb25tZW50IiwiY29udGFpbmVyIiwiZW1iZXItZ2xpbW1lci9yZW5kZXJlciIsImVtYmVy
LWdsaW1tZXIvZG9tIiwiZW1iZXItZ2xpbW1lci92aWV3cy9vdXRsZXQiLCJlbWJlci1nbGltbWVy
L2NvbXBvbmVudHMvdGV4dF9maWVsZCIsImVtYmVyLWdsaW1tZXIvY29tcG9uZW50cy90ZXh0X2Fy
ZWEiLCJlbWJlci1nbGltbWVyL2NvbXBvbmVudHMvY2hlY2tib3giLCJlbWJlci1nbGltbWVyL2Nv
bXBvbmVudHMvbGluay10byIsImVtYmVyLWdsaW1tZXIvY29tcG9uZW50IiwiZW1iZXItZ2xpbW1l
ci90ZW1wbGF0ZXMvY29tcG9uZW50IiwiZW1iZXItZ2xpbW1lci90ZW1wbGF0ZXMvcm9vdCIsImVt
YmVyLWdsaW1tZXIvdGVtcGxhdGVzL291dGxldCIsImVtYmVyLWdsaW1tZXIvZW52aXJvbm1lbnQi
XSxmdW5jdGlvbihlLHQsbixyLGksbyxzLGEsdSxsLGMscCxmLGgsZCxtKXsidXNlIHN0cmljdCIK
LWUuc2V0dXBBcHBsaWNhdGlvblJlZ2lzdHJ5PWZ1bmN0aW9uKGUpe2UuaW5qZWN0aW9uKCJzZXJ2
aWNlOi1nbGltbWVyLWVudmlyb25tZW50IiwiYXBwZW5kT3BlcmF0aW9ucyIsInNlcnZpY2U6LWRv
bS10cmVlLWNvbnN0cnVjdGlvbiIpLGUuaW5qZWN0aW9uKCJyZW5kZXJlciIsImVudiIsInNlcnZp
Y2U6LWdsaW1tZXItZW52aXJvbm1lbnQiKSxlLnJlZ2lzdGVyKCgwLHIucHJpdmF0aXplKShnKSxo
LmRlZmF1bHQpLGUuaW5qZWN0aW9uKCJyZW5kZXJlciIsInJvb3RUZW1wbGF0ZSIsKDAsci5wcml2
YXRpemUpKGcpKSxlLnJlZ2lzdGVyKCJyZW5kZXJlcjotZG9tIixpLkludGVyYWN0aXZlUmVuZGVy
ZXIpLGUucmVnaXN0ZXIoInJlbmRlcmVyOi1pbmVydCIsaS5JbmVydFJlbmRlcmVyKSxuLmVudmly
b25tZW50Lmhhc0RPTSYmZS5pbmplY3Rpb24oInNlcnZpY2U6LWdsaW1tZXItZW52aXJvbm1lbnQi
LCJ1cGRhdGVPcGVyYXRpb25zIiwic2VydmljZTotZG9tLWNoYW5nZXMiKSxlLnJlZ2lzdGVyKCJz
ZXJ2aWNlOi1kb20tY2hhbmdlcyIse2NyZWF0ZTpmdW5jdGlvbihlKXt2YXIgdD1lLmRvY3VtZW50
Ci1yZXR1cm4gbmV3IG8uRE9NQ2hhbmdlcyh0KX19KSxlLnJlZ2lzdGVyKCJzZXJ2aWNlOi1kb20t
dHJlZS1jb25zdHJ1Y3Rpb24iLHtjcmVhdGU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5kb2N1bWVudAot
cmV0dXJuIG5ldyhuLmVudmlyb25tZW50Lmhhc0RPTT9vLkRPTVRyZWVDb25zdHJ1Y3Rpb246by5O
b2RlRE9NVHJlZUNvbnN0cnVjdGlvbikodCl9fSl9LGUuc2V0dXBFbmdpbmVSZWdpc3RyeT1mdW5j
dGlvbihlKXtlLnJlZ2lzdGVyKCJ2aWV3Oi1vdXRsZXQiLHMuZGVmYXVsdCksZS5yZWdpc3Rlcigi
dGVtcGxhdGU6LW91dGxldCIsZC5kZWZhdWx0KSxlLmluamVjdGlvbigidmlldzotb3V0bGV0Iiwi
dGVtcGxhdGUiLCJ0ZW1wbGF0ZTotb3V0bGV0IiksZS5pbmplY3Rpb24oInNlcnZpY2U6LWRvbS1j
aGFuZ2VzIiwiZG9jdW1lbnQiLCJzZXJ2aWNlOi1kb2N1bWVudCIpLGUuaW5qZWN0aW9uKCJzZXJ2
aWNlOi1kb20tdHJlZS1jb25zdHJ1Y3Rpb24iLCJkb2N1bWVudCIsInNlcnZpY2U6LWRvY3VtZW50
IiksZS5yZWdpc3RlcigoMCxyLnByaXZhdGl6ZSkoeSksZi5kZWZhdWx0KSxlLnJlZ2lzdGVyKCJz
ZXJ2aWNlOi1nbGltbWVyLWVudmlyb25tZW50IixtLmRlZmF1bHQpLGUuaW5qZWN0aW9uKCJ0ZW1w
bGF0ZSIsImVudiIsInNlcnZpY2U6LWdsaW1tZXItZW52aXJvbm1lbnQiKSxlLm9wdGlvbnNGb3JU
eXBlKCJoZWxwZXIiLHtpbnN0YW50aWF0ZTohMX0pLGUucmVnaXN0ZXIoImNvbXBvbmVudDotdGV4
dC1maWVsZCIsYS5kZWZhdWx0KSxlLnJlZ2lzdGVyKCJjb21wb25lbnQ6LXRleHQtYXJlYSIsdS5k
ZWZhdWx0KSxlLnJlZ2lzdGVyKCJjb21wb25lbnQ6LWNoZWNrYm94IixsLmRlZmF1bHQpLGUucmVn
aXN0ZXIoImNvbXBvbmVudDpsaW5rLXRvIixjLmRlZmF1bHQpLGUucmVnaXN0ZXIoKDAsci5wcml2
YXRpemUpKHYpLHAuZGVmYXVsdCl9Ci12YXIgZz0oMCx0LnRhZ2dlZFRlbXBsYXRlTGl0ZXJhbExv
b3NlKShbInRlbXBsYXRlOi1yb290Il0sWyJ0ZW1wbGF0ZTotcm9vdCJdKSx5PSgwLHQudGFnZ2Vk
VGVtcGxhdGVMaXRlcmFsTG9vc2UpKFsidGVtcGxhdGU6Y29tcG9uZW50cy8tZGVmYXVsdCJdLFsi
dGVtcGxhdGU6Y29tcG9uZW50cy8tZGVmYXVsdCJdKSx2PSgwLHQudGFnZ2VkVGVtcGxhdGVMaXRl
cmFsTG9vc2UpKFsiY29tcG9uZW50Oi1kZWZhdWx0Il0sWyJjb21wb25lbnQ6LWRlZmF1bHQiXSl9
KSxlKCJlbWJlci1nbGltbWVyL3N5bnRheCIsWyJleHBvcnRzIiwiZW1iZXItZ2xpbW1lci9zeW50
YXgvcmVuZGVyIiwiZW1iZXItZ2xpbW1lci9zeW50YXgvb3V0bGV0IiwiZW1iZXItZ2xpbW1lci9z
eW50YXgvbW91bnQiLCJlbWJlci1nbGltbWVyL3N5bnRheC9keW5hbWljLWNvbXBvbmVudCIsImVt
YmVyLWdsaW1tZXIvdXRpbHMvYmluZGluZ3MiLCJlbWJlci1nbGltbWVyL3N5bnRheC8td2l0aC1k
eW5hbWljLXZhcnMiLCJlbWJlci1nbGltbWVyL3N5bnRheC8taW4tZWxlbWVudCIsImVtYmVyLWds
aW1tZXIvc3ludGF4L2lucHV0IiwiZW1iZXItZ2xpbW1lci9zeW50YXgvLXRleHQtYXJlYSIsImVt
YmVyLWRlYnVnIl0sZnVuY3Rpb24oZSx0LG4scixpLG8scyxhLHUsbCxjKXsidXNlIHN0cmljdCIK
LWZ1bmN0aW9uIHAoZSx0LG4scil7dmFyIHM9ZVswXQotaWYoZS5sZW5ndGg+MSlyZXR1cm4oMCxp
LmNsb3N1cmVDb21wb25lbnRNYWNybykoZSx0LG4sbnVsbCxudWxsLHIpCi12YXIgYT1yLnN5bWJv
bFRhYmxlLHU9dm9pZCAwCi1yZXR1cm4gcy5pbmRleE9mKCItIik+LTEmJih1PXIuZW52LmdldENv
bXBvbmVudERlZmluaXRpb24oZSxhKSksISF1JiYoKDAsby53cmFwQ29tcG9uZW50Q2xhc3NBdHRy
aWJ1dGUpKG4pLHIuY29tcG9uZW50LnN0YXRpYyh1LFt0LG4sbnVsbCxudWxsXSxhKSwhMCl9ZnVu
Y3Rpb24gZihlLHQpe3ZhciBuPWVbMV0scj1lWzJdLHM9ZVszXSxhPWVbNF0sdT1lWzVdLGw9blsw
XQotaWYobi5sZW5ndGg+MSlyZXR1cm4oMCxpLmNsb3N1cmVDb21wb25lbnRNYWNybykobixyLHMs
YSx1LHQpCi1pZigtMT09PWwuaW5kZXhPZigiLSIpKXJldHVybiExCi12YXIgYz10LnN5bWJvbFRh
YmxlLHA9dm9pZCAwCi1yZXR1cm4gbC5pbmRleE9mKCItIik+LTEmJihwPXQuZW52LmdldENvbXBv
bmVudERlZmluaXRpb24obixjKSksISFwJiYoKDAsby53cmFwQ29tcG9uZW50Q2xhc3NBdHRyaWJ1
dGUpKHMpLHQuY29tcG9uZW50LnN0YXRpYyhwLFtyLHMsYSx1XSxjKSwhMCl9ZS5leHBlcmltZW50
YWxNYWNyb3M9dm9pZCAwLGUucmVnaXN0ZXJNYWNyb3M9ZnVuY3Rpb24oZSl7aC5wdXNoKGUpfSxl
LnBvcHVsYXRlTWFjcm9zPWZ1bmN0aW9uKGUsbyl7dmFyIGMKLWZvcihvLmFkZCgib3V0bGV0Iixu
Lm91dGxldE1hY3JvKSxvLmFkZCgiY29tcG9uZW50IixpLmlubGluZUNvbXBvbmVudE1hY3JvKSxv
LmFkZCgicmVuZGVyIix0LnJlbmRlck1hY3JvKSxvLmFkZCgibW91bnQiLHIubW91bnRNYWNybyks
by5hZGQoImlucHV0Iix1LmlucHV0TWFjcm8pLG8uYWRkKCJ0ZXh0YXJlYSIsbC50ZXh0QXJlYU1h
Y3JvKSxvLmFkZE1pc3NpbmcocCksZS5hZGQoImNvbXBvbmVudCIsaS5ibG9ja0NvbXBvbmVudE1h
Y3JvKSxlLmFkZCgiLXdpdGgtZHluYW1pYy12YXJzIixzLl93aXRoRHluYW1pY1ZhcnNNYWNybyks
ZS5hZGQoIi1pbi1lbGVtZW50IixhLl9pbkVsZW1lbnRNYWNybyksZS5hZGRNaXNzaW5nKGYpLGM9
MDtjPGgubGVuZ3RoO2MrKykoMCxoW2NdKShlLG8pCi1yZXR1cm57YmxvY2tzOmUsaW5saW5lczpv
fX0KLXZhciBoPWUuZXhwZXJpbWVudGFsTWFjcm9zPVtdfSksZSgiZW1iZXItZ2xpbW1lci9zeW50
YXgvLWluLWVsZW1lbnQiLFsiZXhwb3J0cyIsIkBnbGltbWVyL3J1bnRpbWUiLCJAZ2xpbW1lci91
dGlsIl0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IgotZS5faW5FbGVtZW50TWFjcm89ZnVu
Y3Rpb24oZSxyKXt2YXIgYT1pKGUpLHU9KDAsdC5jb21waWxlQXJncykobyhlKSxzKGUpLHIpCi1y
LnB1dEFyZ3ModSksci50ZXN0KCJzaW1wbGUiKSxyLmxhYmVsbGVkKG51bGwsZnVuY3Rpb24oZSl7
ZS5qdW1wVW5sZXNzKCJFTkQiKSxlLnB1c2hSZW1vdGVFbGVtZW50KCksZS5ldmFsdWF0ZSgoMCxu
LnVud3JhcCkoYSkpLGUucG9wUmVtb3RlRWxlbWVudCgpfSl9Ci12YXIgcj10LkJhc2VsaW5lU3lu
dGF4Lk5lc3RlZEJsb2NrLGk9ci5kZWZhdWx0QmxvY2ssbz1yLnBhcmFtcyxzPXIuaGFzaH0pLGUo
ImVtYmVyLWdsaW1tZXIvc3ludGF4Ly10ZXh0LWFyZWEiLFsiZXhwb3J0cyIsImVtYmVyLWdsaW1t
ZXIvdXRpbHMvYmluZGluZ3MiXSxmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0IgotZS50ZXh0QXJl
YU1hY3JvPWZ1bmN0aW9uKGUsbixyLGkpe3ZhciBvPWkuZW52LmdldENvbXBvbmVudERlZmluaXRp
b24oWyItdGV4dC1hcmVhIl0saS5zeW1ib2xUYWJsZSkKLXJldHVybigwLHQud3JhcENvbXBvbmVu
dENsYXNzQXR0cmlidXRlKShyKSxpLmNvbXBvbmVudC5zdGF0aWMobyxbbixyLG51bGwsbnVsbF0s
aS5zeW1ib2xUYWJsZSksITB9fSksZSgiZW1iZXItZ2xpbW1lci9zeW50YXgvLXdpdGgtZHluYW1p
Yy12YXJzIixbImV4cG9ydHMiLCJAZ2xpbW1lci9ydW50aW1lIiwiQGdsaW1tZXIvdXRpbCJdLGZ1
bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCIKLWUuX3dpdGhEeW5hbWljVmFyc01hY3JvPWZ1bmN0
aW9uKGUscil7dmFyIGE9aShlKSx1PSgwLHQuY29tcGlsZUFyZ3MpKG8oZSkscyhlKSxyKQotci51
bml0KGZ1bmN0aW9uKGUpe2UucHV0QXJncyh1KSxlLnB1c2hEeW5hbWljU2NvcGUoKSxlLmJpbmRE
eW5hbWljU2NvcGUodS5uYW1lZC5rZXlzKSxlLmV2YWx1YXRlKCgwLG4udW53cmFwKShhKSksZS5w
b3BEeW5hbWljU2NvcGUoKX0pfQotdmFyIHI9dC5CYXNlbGluZVN5bnRheC5OZXN0ZWRCbG9jayxp
PXIuZGVmYXVsdEJsb2NrLG89ci5wYXJhbXMscz1yLmhhc2h9KSxlKCJlbWJlci1nbGltbWVyL3N5
bnRheC9hYnN0cmFjdC1tYW5hZ2VyIixbImV4cG9ydHMiXSxmdW5jdGlvbihlKXsidXNlIHN0cmlj
dCIKLWUuZGVmYXVsdD1mdW5jdGlvbigpe319KSxlKCJlbWJlci1nbGltbWVyL3N5bnRheC9jdXJs
eS1jb21wb25lbnQiLFsiZXhwb3J0cyIsImVtYmVyLWJhYmVsIiwiZW1iZXItdXRpbHMiLCJAZ2xp
bW1lci9ydW50aW1lIiwiZW1iZXItZ2xpbW1lci91dGlscy9iaW5kaW5ncyIsImVtYmVyLWdsaW1t
ZXIvY29tcG9uZW50IiwiZW1iZXItbWV0YWwiLCJlbWJlci1kZWJ1ZyIsImVtYmVyLXZpZXdzIiwi
ZW1iZXItZ2xpbW1lci91dGlscy9wcm9jZXNzLWFyZ3MiLCJjb250YWluZXIiLCJlbWJlci1nbGlt
bWVyL3N5bnRheC9hYnN0cmFjdC1tYW5hZ2VyIl0sZnVuY3Rpb24oZSx0LG4scixpLG8scyxhLHUs
bCxjLHApeyJ1c2Ugc3RyaWN0IgotZnVuY3Rpb24gZigpe31mdW5jdGlvbiBoKGUsdCl7ZS5uYW1l
ZC5oYXMoImlkIikmJih0LmVsZW1lbnRJZD10LmlkKX1mdW5jdGlvbiBkKGUsdCxuLHIpe2Zvcih2
YXIgbyxzLGEsdT1bXSxsPXQubGVuZ3RoLTE7LTEhPT1sOylvPXRbbF0scz1pLkF0dHJpYnV0ZUJp
bmRpbmcucGFyc2UobyksYT1zWzFdLC0xPT09dS5pbmRleE9mKGEpJiYodS5wdXNoKGEpLGkuQXR0
cmlidXRlQmluZGluZy5pbnN0YWxsKGUsbixzLHIpKSxsLS07LTE9PT11LmluZGV4T2YoImlkIikm
JnIuYWRkU3RhdGljQXR0cmlidXRlKGUsImlkIixuLmVsZW1lbnRJZCksLTE9PT11LmluZGV4T2Yo
InN0eWxlIikmJmkuSXNWaXNpYmxlQmluZGluZy5pbnN0YWxsKGUsbixyKX1mdW5jdGlvbiBtKCl7
fWZ1bmN0aW9uIGcoZSl7cmV0dXJuIGUuaW5zdHJ1bWVudERldGFpbHMoe2luaXRpYWxSZW5kZXI6
ITB9KX1mdW5jdGlvbiB5KGUpe3JldHVybiBlLmluc3RydW1lbnREZXRhaWxzKHtpbml0aWFsUmVu
ZGVyOiExfSl9ZnVuY3Rpb24gdihlKXt2YXIgdD1lLmR5bmFtaWNTY29wZSgpLnZpZXcudGFnTmFt
ZQotcmV0dXJuIHIuUHJpbWl0aXZlUmVmZXJlbmNlLmNyZWF0ZSgiIj09PXQ/bnVsbDp0fHwiZGl2
Iil9ZnVuY3Rpb24gYihlKXtyZXR1cm4gZS5nZXRTZWxmKCkuZ2V0KCJhcmlhUm9sZSIpfWUuUm9v
dENvbXBvbmVudERlZmluaXRpb249ZS5DdXJseUNvbXBvbmVudERlZmluaXRpb249dm9pZCAwLGUu
dmFsaWRhdGVQb3NpdGlvbmFsUGFyYW1ldGVycz1mCi12YXIgXz0oMCx0LnRhZ2dlZFRlbXBsYXRl
TGl0ZXJhbExvb3NlKShbInRlbXBsYXRlOmNvbXBvbmVudHMvLWRlZmF1bHQiXSxbInRlbXBsYXRl
OmNvbXBvbmVudHMvLWRlZmF1bHQiXSksdz0oMCxjLnByaXZhdGl6ZSkoXyksRT1mdW5jdGlvbigp
e2Z1bmN0aW9uIGUoZSx0LG4scil7dGhpcy5lbnZpcm9ubWVudD1lLHRoaXMuY29tcG9uZW50PXQs
dGhpcy5jbGFzc1JlZj1udWxsLHRoaXMuYXJncz1uLHRoaXMuYXJnc1JldmlzaW9uPW4udGFnLnZh
bHVlKCksdGhpcy5maW5hbGl6ZXI9cn1yZXR1cm4gZS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlv
bigpe3ZhciBlPXRoaXMuY29tcG9uZW50LHQ9dGhpcy5lbnZpcm9ubWVudAotdC5pc0ludGVyYWN0
aXZlJiYoZS50cmlnZ2VyKCJ3aWxsRGVzdHJveUVsZW1lbnQiKSxlLnRyaWdnZXIoIndpbGxDbGVh
clJlbmRlciIpKSx0LmRlc3Ryb3llZENvbXBvbmVudHMucHVzaChlKX0sZS5wcm90b3R5cGUuZmlu
YWxpemU9ZnVuY3Rpb24oKXsoMCx0aGlzLmZpbmFsaXplcikoKSx0aGlzLmZpbmFsaXplcj1tfSxl
fSgpLHg9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcigpe3JldHVybigwLHQucG9zc2libGVDb25zdHJ1
Y3RvclJldHVybikodGhpcyxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9cmV0dXJuKDAsdC5pbmhl
cml0cykocixlKSxyLnByb3RvdHlwZS5wcmVwYXJlQXJncz1mdW5jdGlvbihlLHQpe3JldHVybiBl
LkNvbXBvbmVudENsYXNzJiYodC5uYW1lZCx0LnBvc2l0aW9uYWwudmFsdWVzLGUuQ29tcG9uZW50
Q2xhc3MuY2xhc3MucG9zaXRpb25hbFBhcmFtcyksKDAsbC5nYXRoZXJBcmdzKSh0LGUpfSxyLnBy
b3RvdHlwZS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4scixpLGEpe3ZhciB1PXIudmlldyxjPXQuQ29t
cG9uZW50Q2xhc3MscD1sLkNvbXBvbmVudEFyZ3MuY3JlYXRlKG4pLGY9cC52YWx1ZSgpLGQ9Zi5w
cm9wcwotaChuLGQpLGQucGFyZW50Vmlldz11LGRbby5IQVNfQkxPQ0tdPWEsZC5fdGFyZ2V0T2Jq
ZWN0PWkudmFsdWUoKQotdmFyIG09Yy5jcmVhdGUoZCkseT0oMCxzLl9pbnN0cnVtZW50U3RhcnQp
KCJyZW5kZXIuY29tcG9uZW50IixnLG0pCi1yLnZpZXc9bSxudWxsIT09dSYmdS5hcHBlbmRDaGls
ZChtKSwiIj09PW0udGFnTmFtZSYmKGUuaXNJbnRlcmFjdGl2ZSYmbS50cmlnZ2VyKCJ3aWxsUmVu
ZGVyIiksbS5fdHJhbnNpdGlvblRvKCJoYXNFbGVtZW50IiksZS5pc0ludGVyYWN0aXZlJiZtLnRy
aWdnZXIoIndpbGxJbnNlcnRFbGVtZW50IikpCi12YXIgdj1uZXcgRShlLG0scCx5KQotcmV0dXJu
IG4ubmFtZWQuaGFzKCJjbGFzcyIpJiYodi5jbGFzc1JlZj1uLm5hbWVkLmdldCgiY2xhc3MiKSks
ZS5pc0ludGVyYWN0aXZlJiYiIiE9PW0udGFnTmFtZSYmbS50cmlnZ2VyKCJ3aWxsUmVuZGVyIiks
dn0sci5wcm90b3R5cGUubGF5b3V0Rm9yPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpPWUudGVtcGxh
dGUKLXJldHVybiBpfHwocj10LmNvbXBvbmVudCxpPXRoaXMudGVtcGxhdGVGb3IocixuKSksbi5n
ZXRDb21waWxlZEJsb2NrKFQsaSl9LHIucHJvdG90eXBlLnRlbXBsYXRlRm9yPWZ1bmN0aW9uKGUs
dCl7dmFyIHIsaT0oMCxzLmdldCkoZSwibGF5b3V0Iiksbz1lW24uT1dORVJdCi1pZihpKXJldHVy
biB0LmdldFRlbXBsYXRlKGksbykKLXZhciBhPSgwLHMuZ2V0KShlLCJsYXlvdXROYW1lIikKLXJl
dHVybiBhJiYocj1vLmxvb2t1cCgidGVtcGxhdGU6IithKSk/cjpvLmxvb2t1cCh3KX0sci5wcm90
b3R5cGUuZ2V0U2VsZj1mdW5jdGlvbihlKXtyZXR1cm4gZS5jb21wb25lbnRbby5ST09UX1JFRl19
LHIucHJvdG90eXBlLmRpZENyZWF0ZUVsZW1lbnQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUuY29t
cG9uZW50LG89ZS5jbGFzc1JlZixzPWUuZW52aXJvbm1lbnQ7KDAsdS5zZXRWaWV3RWxlbWVudCko
cix0KQotdmFyIGE9ci5hdHRyaWJ1dGVCaW5kaW5ncyxsPXIuY2xhc3NOYW1lcyxjPXIuY2xhc3NO
YW1lQmluZGluZ3MKLWEmJmEubGVuZ3RoP2QodCxhLHIsbik6KG4uYWRkU3RhdGljQXR0cmlidXRl
KHQsImlkIixyLmVsZW1lbnRJZCksaS5Jc1Zpc2libGVCaW5kaW5nLmluc3RhbGwodCxyLG4pKSxv
JiZuLmFkZER5bmFtaWNBdHRyaWJ1dGUodCwiY2xhc3MiLG8pLGwmJmwubGVuZ3RoJiZsLmZvckVh
Y2goZnVuY3Rpb24oZSl7bi5hZGRTdGF0aWNBdHRyaWJ1dGUodCwiY2xhc3MiLGUpfSksYyYmYy5s
ZW5ndGgmJmMuZm9yRWFjaChmdW5jdGlvbihlKXtpLkNsYXNzTmFtZUJpbmRpbmcuaW5zdGFsbCh0
LHIsZSxuKX0pLHIuX3RyYW5zaXRpb25UbygiaGFzRWxlbWVudCIpLHMuaXNJbnRlcmFjdGl2ZSYm
ci50cmlnZ2VyKCJ3aWxsSW5zZXJ0RWxlbWVudCIpfSxyLnByb3RvdHlwZS5kaWRSZW5kZXJMYXlv
dXQ9ZnVuY3Rpb24oZSx0KXtlLmNvbXBvbmVudFtvLkJPVU5EU109dCxlLmZpbmFsaXplKCl9LHIu
cHJvdG90eXBlLmdldFRhZz1mdW5jdGlvbihlKXtyZXR1cm4gZS5jb21wb25lbnRbby5ESVJUWV9U
QUddfSxyLnByb3RvdHlwZS5kaWRDcmVhdGU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb21wb25lbnQK
LWUuZW52aXJvbm1lbnQuaXNJbnRlcmFjdGl2ZSYmKHQuX3RyYW5zaXRpb25UbygiaW5ET00iKSx0
LnRyaWdnZXIoImRpZEluc2VydEVsZW1lbnQiKSx0LnRyaWdnZXIoImRpZFJlbmRlciIpKX0sci5w
cm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGUpe3ZhciB0LG4scixpLGEsbD1lLmNvbXBvbmVudCxj
PWUuYXJncyxwPWUuYXJnc1JldmlzaW9uLGY9ZS5lbnZpcm9ubWVudAotZS5maW5hbGl6ZXI9KDAs
cy5faW5zdHJ1bWVudFN0YXJ0KSgicmVuZGVyLmNvbXBvbmVudCIseSxsKSxjLnRhZy52YWxpZGF0
ZShwKXx8KHQ9Yy52YWx1ZSgpLG49dC5hdHRycyxyPXQucHJvcHMsZS5hcmdzUmV2aXNpb249Yy50
YWcudmFsdWUoKSxpPWwuYXR0cnMsYT1uLGxbby5JU19ESVNQQVRDSElOR19BVFRSU109ITAsbC5z
ZXRQcm9wZXJ0aWVzKHIpLGxbby5JU19ESVNQQVRDSElOR19BVFRSU109ITEsKDAsdS5kaXNwYXRj
aExpZmVDeWNsZUhvb2spKGwsImRpZFVwZGF0ZUF0dHJzIixpLGEpLCgwLHUuZGlzcGF0Y2hMaWZl
Q3ljbGVIb29rKShsLCJkaWRSZWNlaXZlQXR0cnMiLGksYSkpLGYuaXNJbnRlcmFjdGl2ZSYmKGwu
dHJpZ2dlcigid2lsbFVwZGF0ZSIpLGwudHJpZ2dlcigid2lsbFJlbmRlciIpKX0sci5wcm90b3R5
cGUuZGlkVXBkYXRlTGF5b3V0PWZ1bmN0aW9uKGUpe2UuZmluYWxpemUoKX0sci5wcm90b3R5cGUu
ZGlkVXBkYXRlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29tcG9uZW50Ci1lLmVudmlyb25tZW50Lmlz
SW50ZXJhY3RpdmUmJih0LnRyaWdnZXIoImRpZFVwZGF0ZSIpLHQudHJpZ2dlcigiZGlkUmVuZGVy
IikpfSxyLnByb3RvdHlwZS5nZXREZXN0cnVjdG9yPWZ1bmN0aW9uKGUpe3JldHVybiBlfSxyfShw
LmRlZmF1bHQpLEM9bmV3IHgsTz1mdW5jdGlvbihlKXtmdW5jdGlvbiBuKCl7cmV0dXJuKDAsdC5w
b3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKSh0aGlzLGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1y
ZXR1cm4oMCx0LmluaGVyaXRzKShuLGUpLG4ucHJvdG90eXBlLmNyZWF0ZT1mdW5jdGlvbihlLHQs
bixyKXt2YXIgaT10LkNvbXBvbmVudENsYXNzLmNyZWF0ZSgpLG89KDAscy5faW5zdHJ1bWVudFN0
YXJ0KSgicmVuZGVyLmNvbXBvbmVudCIsZyxpKQotcmV0dXJuIHIudmlldz1pLCIiPT09aS50YWdO
YW1lJiYoZS5pc0ludGVyYWN0aXZlJiZpLnRyaWdnZXIoIndpbGxSZW5kZXIiKSxpLl90cmFuc2l0
aW9uVG8oImhhc0VsZW1lbnQiKSxlLmlzSW50ZXJhY3RpdmUmJmkudHJpZ2dlcigid2lsbEluc2Vy
dEVsZW1lbnQiKSksbmV3IEUoZSxpLG4sbyl9LG59KHgpLEE9bmV3IE8KLWUuQ3VybHlDb21wb25l
bnREZWZpbml0aW9uPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4obixyLGksbyl7dmFyIHM9KDAsdC5w
b3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKSh0aGlzLGUuY2FsbCh0aGlzLG4sQyxyKSkKLXJldHVy
biBzLnRlbXBsYXRlPWkscy5hcmdzPW8sc31yZXR1cm4oMCx0LmluaGVyaXRzKShuLGUpLG59KHIu
Q29tcG9uZW50RGVmaW5pdGlvbiksZS5Sb290Q29tcG9uZW50RGVmaW5pdGlvbj1mdW5jdGlvbihl
KXtmdW5jdGlvbiBuKG4pe3ZhciByPSgwLHQucG9zc2libGVDb25zdHJ1Y3RvclJldHVybikodGhp
cyxlLmNhbGwodGhpcywiLXJvb3QiLEEse2NsYXNzOm4uY29uc3RydWN0b3IsY3JlYXRlOmZ1bmN0
aW9uKCl7cmV0dXJuIG59fSkpCi1yZXR1cm4gci50ZW1wbGF0ZT12b2lkIDAsci5hcmdzPXZvaWQg
MCxyfXJldHVybigwLHQuaW5oZXJpdHMpKG4sZSksbn0oci5Db21wb25lbnREZWZpbml0aW9uKQot
dmFyIFQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMudGVtcGxhdGU9ZX1yZXR1cm4gZS5w
cm90b3R5cGUuY29tcGlsZT1mdW5jdGlvbihlKXtlLndyYXBMYXlvdXQodGhpcy50ZW1wbGF0ZS5h
c0xheW91dCgpKSxlLnRhZy5keW5hbWljKHYpLGUuYXR0cnMuZHluYW1pYygicm9sZSIsYiksZS5h
dHRycy5zdGF0aWMoImNsYXNzIiwiZW1iZXItdmlldyIpfSxlfSgpCi1ULmlkPSJjdXJseSJ9KSxl
KCJlbWJlci1nbGltbWVyL3N5bnRheC9keW5hbWljLWNvbXBvbmVudCIsWyJleHBvcnRzIiwiQGds
aW1tZXIvcnVudGltZSIsIkBnbGltbWVyL3JlZmVyZW5jZSIsImVtYmVyLWRlYnVnIl0sZnVuY3Rp
b24oZSx0LG4scil7InVzZSBzdHJpY3QiCi1mdW5jdGlvbiBpKGUsdCl7dmFyIG49ZS5lbnYscj1l
LmdldEFyZ3MoKSxpPXIucG9zaXRpb25hbC5hdCgwKQotcmV0dXJuIG5ldyBvKHtuYW1lUmVmOmks
ZW52Om4sc3ltYm9sVGFibGU6dH0pfWUuY2xvc3VyZUNvbXBvbmVudE1hY3JvPWZ1bmN0aW9uKGUs
dCxuLHIsbyxzKXtyZXR1cm4gcy5jb21wb25lbnQuZHluYW1pYyhbW1siZ2V0IixlXV0sbixyLG9d
LGksW3QsbixyLG9dLHMuc3ltYm9sVGFibGUpLCEwfSxlLmR5bmFtaWNDb21wb25lbnRNYWNybz1m
dW5jdGlvbihlLHQsbixyLG8pe3ZhciBzPVtlLnNsaWNlKDAsMSksbnVsbCxudWxsLG51bGxdLGE9
W2Uuc2xpY2UoMSksdCxudWxsLG51bGxdCi1yZXR1cm4gby5jb21wb25lbnQuZHluYW1pYyhzLGks
YSxvLnN5bWJvbFRhYmxlKSwhMH0sZS5ibG9ja0NvbXBvbmVudE1hY3JvPWZ1bmN0aW9uKGUsdCl7
dmFyIG49ZVsyXSxyPWVbM10sbz1lWzRdLHM9ZVs1XSxhPVtuLnNsaWNlKDAsMSksbnVsbCxudWxs
LG51bGxdLHU9W24uc2xpY2UoMSkscixvLHNdCi1yZXR1cm4gdC5jb21wb25lbnQuZHluYW1pYyhh
LGksdSx0LnN5bWJvbFRhYmxlKSwhMH0sZS5pbmxpbmVDb21wb25lbnRNYWNybz1mdW5jdGlvbihl
LHQsbixyKXt2YXIgbz1bdC5zbGljZSgwLDEpLG51bGwsbnVsbCxudWxsXSxzPVt0LnNsaWNlKDEp
LG4sbnVsbCxudWxsXQotcmV0dXJuIHIuY29tcG9uZW50LmR5bmFtaWMobyxpLHMsci5zeW1ib2xU
YWJsZSksITB9Ci12YXIgbz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dmFyIHQ9ZS5uYW1lUmVm
LG49ZS5lbnYscj1lLnN5bWJvbFRhYmxlLGk9ZS5hcmdzCi10aGlzLnRhZz10LnRhZyx0aGlzLm5h
bWVSZWY9dCx0aGlzLmVudj1uLHRoaXMuc3ltYm9sVGFibGU9cix0aGlzLmFyZ3M9aX1yZXR1cm4g
ZS5wcm90b3R5cGUudmFsdWU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmVudixuPXRoaXMubmFtZVJl
ZixyPXRoaXMuc3ltYm9sVGFibGUsaT1uLnZhbHVlKCkKLXJldHVybiJzdHJpbmciPT10eXBlb2Yg
aT9lLmdldENvbXBvbmVudERlZmluaXRpb24oW2ldLHIpOigwLHQuaXNDb21wb25lbnREZWZpbml0
aW9uKShpKT9pOm51bGx9LGUucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiBuLlVOREVG
SU5FRF9SRUZFUkVOQ0V9LGV9KCl9KSxlKCJlbWJlci1nbGltbWVyL3N5bnRheC9pbnB1dCIsWyJl
eHBvcnRzIiwiZW1iZXItZGVidWciLCJlbWJlci1nbGltbWVyL3V0aWxzL2JpbmRpbmdzIiwiZW1i
ZXItZ2xpbW1lci9zeW50YXgvZHluYW1pYy1jb21wb25lbnQiXSxmdW5jdGlvbihlLHQsbixyKXsi
dXNlIHN0cmljdCIKLWZ1bmN0aW9uIGkoZSx0LG4pe3ZhciByPW4uZW52LmdldENvbXBvbmVudERl
ZmluaXRpb24oWyItdGV4dC1maWVsZCJdLG4uc3ltYm9sVGFibGUpCi1yZXR1cm4gbi5jb21wb25l
bnQuc3RhdGljKHIsW2UsdCxudWxsLG51bGxdLG4uc3ltYm9sVGFibGUpLCEwfWUuaW5wdXRNYWNy
bz1mdW5jdGlvbihlLHQsbyxzKXt2YXIgYSx1LGw9dm9pZCAwLGM9dm9pZCAwLHA9LTEKLXJldHVy
biBvJiYobD1vWzBdLGM9b1sxXSxwPWwuaW5kZXhPZigidHlwZSIpLGwuaW5kZXhPZigidmFsdWUi
KSksdHx8KHQ9W10pLHA+LTE/KGE9Y1twXSxBcnJheS5pc0FycmF5KGEpPygwLHIuZHluYW1pY0Nv
bXBvbmVudE1hY3JvKSh0LG8sbnVsbCxudWxsLHMpOiJjaGVja2JveCI9PT1hPygoMCxuLndyYXBD
b21wb25lbnRDbGFzc0F0dHJpYnV0ZSkobyksdT1zLmVudi5nZXRDb21wb25lbnREZWZpbml0aW9u
KFsiLWNoZWNrYm94Il0scy5zeW1ib2xUYWJsZSkscy5jb21wb25lbnQuc3RhdGljKHUsW3Qsbyxu
dWxsLG51bGxdLHMuc3ltYm9sVGFibGUpLCEwKTppKHQsbyxzKSk6aSh0LG8scyl9fSksZSgiZW1i
ZXItZ2xpbW1lci9zeW50YXgvbW91bnQiLFsiZXhwb3J0cyIsImVtYmVyLWJhYmVsIiwiQGdsaW1t
ZXIvcnVudGltZSIsIkBnbGltbWVyL3JlZmVyZW5jZSIsImVtYmVyLWRlYnVnIiwiZW1iZXItZ2xp
bW1lci91dGlscy9yZWZlcmVuY2VzIiwiZW1iZXItcm91dGluZyIsImVtYmVyLWdsaW1tZXIvc3lu
dGF4L291dGxldCIsImVtYmVyLWdsaW1tZXIvc3ludGF4L2Fic3RyYWN0LW1hbmFnZXIiXSxmdW5j
dGlvbihlLHQsbixyLGksbyxzLGEsdSl7InVzZSBzdHJpY3QiCi1mdW5jdGlvbiBsKGUsdCl7dmFy
IG49ZS5lbnYscj1lLmdldEFyZ3MoKSxpPXIucG9zaXRpb25hbC5hdCgwKQotcmV0dXJuIG5ldyBj
KHtuYW1lUmVmOmksZW52Om4sc3ltYm9sVGFibGU6dH0pfWUubW91bnRNYWNybz1mdW5jdGlvbihl
LHQsbixyKXt2YXIgaT1bdC5zbGljZSgwLDEpLG51bGwsbnVsbCxudWxsXQotcmV0dXJuIHIuY29t
cG9uZW50LmR5bmFtaWMoaSxsLFtudWxsLG51bGwsbnVsbCxudWxsXSxyLnN5bWJvbFRhYmxlKSwh
MH0KLXZhciBjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt2YXIgdD1lLm5hbWVSZWYsbj1lLmVu
dixyPWUuc3ltYm9sVGFibGUKLWUuYXJncwotdGhpcy50YWc9dC50YWcsdGhpcy5uYW1lUmVmPXQs
dGhpcy5lbnY9bix0aGlzLnN5bWJvbFRhYmxlPXIsdGhpcy5fbGFzdE5hbWU9dm9pZCAwLHRoaXMu
X2xhc3REZWY9dm9pZCAwfXJldHVybiBlLnByb3RvdHlwZS52YWx1ZT1mdW5jdGlvbigpe3ZhciBl
PXRoaXMuZW52LHQ9dGhpcy5uYW1lUmVmLG49dC52YWx1ZSgpCi1yZXR1cm4ic3RyaW5nIj09dHlw
ZW9mIG4/dGhpcy5fbGFzdE5hbWU9PT1uP3RoaXMuX2xhc3REZWY6ZS5vd25lci5oYXNSZWdpc3Ry
YXRpb24oImVuZ2luZToiK24pPyh0aGlzLl9sYXN0TmFtZT1uLHRoaXMuX2xhc3REZWY9bmV3IGgo
biksdGhpcy5fbGFzdERlZik6bnVsbDpudWxsfSxlfSgpLHA9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24g
bigpe3JldHVybigwLHQucG9zc2libGVDb25zdHJ1Y3RvclJldHVybikodGhpcyxlLmFwcGx5KHRo
aXMsYXJndW1lbnRzKSl9cmV0dXJuKDAsdC5pbmhlcml0cykobixlKSxuLnByb3RvdHlwZS5wcmVw
YXJlQXJncz1mdW5jdGlvbihlLHQpe3JldHVybiB0fSxuLnByb3RvdHlwZS5jcmVhdGU9ZnVuY3Rp
b24oZSx0LG4saSl7dmFyIG89dC5uYW1lCi1pLm91dGxldFN0YXRlPXIuVU5ERUZJTkVEX1JFRkVS
RU5DRQotdmFyIHM9ZS5vd25lci5idWlsZENoaWxkRW5naW5lSW5zdGFuY2UobykKLXJldHVybiBz
LmJvb3QoKSxzfSxuLnByb3RvdHlwZS5sYXlvdXRGb3I9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXQu
bG9va3VwKCJ0ZW1wbGF0ZTphcHBsaWNhdGlvbiIpCi1yZXR1cm4gbi5nZXRDb21waWxlZEJsb2Nr
KGEuT3V0bGV0TGF5b3V0Q29tcGlsZXIscil9LG4ucHJvdG90eXBlLmdldFNlbGY9ZnVuY3Rpb24o
ZSl7dmFyIHQ9ZS5mYWN0b3J5Rm9yKCJjb250cm9sbGVyOmFwcGxpY2F0aW9uIiksbj10fHwoMCxz
LmdlbmVyYXRlQ29udHJvbGxlckZhY3RvcnkpKGUsImFwcGxpY2F0aW9uIikKLXJldHVybiBuZXcg
by5Sb290UmVmZXJlbmNlKG4uY3JlYXRlKCkpfSxuLnByb3RvdHlwZS5nZXRUYWc9ZnVuY3Rpb24o
KXtyZXR1cm4gbnVsbH0sbi5wcm90b3R5cGUuZ2V0RGVzdHJ1Y3Rvcj1mdW5jdGlvbihlKXtyZXR1
cm4gZX0sbi5wcm90b3R5cGUuZGlkQ3JlYXRlRWxlbWVudD1mdW5jdGlvbigpe30sbi5wcm90b3R5
cGUuZGlkUmVuZGVyTGF5b3V0PWZ1bmN0aW9uKCl7fSxuLnByb3RvdHlwZS5kaWRDcmVhdGU9ZnVu
Y3Rpb24oKXt9LG4ucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbigpe30sbi5wcm90b3R5cGUuZGlk
VXBkYXRlTGF5b3V0PWZ1bmN0aW9uKCl7fSxuLnByb3RvdHlwZS5kaWRVcGRhdGU9ZnVuY3Rpb24o
KXt9LG59KHUuZGVmYXVsdCksZj1uZXcgcCxoPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4obil7cmV0
dXJuKDAsdC5wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKSh0aGlzLGUuY2FsbCh0aGlzLG4sZixu
dWxsKSl9cmV0dXJuKDAsdC5pbmhlcml0cykobixlKSxufShuLkNvbXBvbmVudERlZmluaXRpb24p
fSksZSgiZW1iZXItZ2xpbW1lci9zeW50YXgvb3V0bGV0IixbImV4cG9ydHMiLCJlbWJlci1iYWJl
bCIsImVtYmVyLXV0aWxzIiwiQGdsaW1tZXIvcnVudGltZSIsImVtYmVyLW1ldGFsIiwiZW1iZXIt
Z2xpbW1lci91dGlscy9yZWZlcmVuY2VzIiwiZW1iZXItZ2xpbW1lci9zeW50YXgvYWJzdHJhY3Qt
bWFuYWdlciIsIkBnbGltbWVyL3JlZmVyZW5jZSJdLGZ1bmN0aW9uKGUsdCxuLHIsaSxvLHMsYSl7
InVzZSBzdHJpY3QiCi1mdW5jdGlvbiB1KGUpe3ZhciB0PWUuZHluYW1pY1Njb3BlKCksbj10Lm91
dGxldFN0YXRlLHI9ZS5nZXRBcmdzKCksaT12b2lkIDAKLXJldHVybiBpPTA9PT1yLnBvc2l0aW9u
YWwubGVuZ3RoP25ldyBhLkNvbnN0UmVmZXJlbmNlKCJtYWluIik6ci5wb3NpdGlvbmFsLmF0KDAp
LG5ldyBmKGksbil9ZnVuY3Rpb24gbChlLHQsbil7cmV0dXJuIHR8fG4/IXQmJm58fHQmJiFuP251
bGw6bi5yZW5kZXIudGVtcGxhdGU9PT10LnJlbmRlci50ZW1wbGF0ZSYmbi5yZW5kZXIuY29udHJv
bGxlcj09PXQucmVuZGVyLmNvbnRyb2xsZXI/ZTpudWxsOmV9ZnVuY3Rpb24gYyhlKXt2YXIgdD1l
LnJlbmRlcgotcmV0dXJue29iamVjdDp0Lm5hbWUrIjoiK3Qub3V0bGV0fX1mdW5jdGlvbiBwKCl7
fWUuT3V0bGV0TGF5b3V0Q29tcGlsZXI9ZS5Ub3BMZXZlbE91dGxldENvbXBvbmVudERlZmluaXRp
b249dm9pZCAwLGUub3V0bGV0TWFjcm89ZnVuY3Rpb24oZSx0LG4saSl7dHx8KHQ9W10pCi12YXIg
bz1bdC5zbGljZSgwLDEpLG51bGwsbnVsbCxudWxsXQotcmV0dXJuIGkuY29tcG9uZW50LmR5bmFt
aWMobyx1LHIuQ29tcGlsZWRBcmdzLmVtcHR5KCksaS5zeW1ib2xUYWJsZSxudWxsKSwhMH0KLXZh
ciBmPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMub3V0bGV0TmFtZVJlZj1lLHRoaXMu
cGFyZW50T3V0bGV0U3RhdGVSZWY9dCx0aGlzLmRlZmluaXRpb249bnVsbCx0aGlzLmxhc3RTdGF0
ZT1udWxsCi12YXIgbj10aGlzLm91dGxldFN0YXRlVGFnPW5ldyBhLlVwZGF0YWJsZVRhZyh0LnRh
ZykKLXRoaXMudGFnPSgwLGEuY29tYmluZSkoW24udGFnLGUudGFnXSl9cmV0dXJuIGUucHJvdG90
eXBlLnZhbHVlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vdXRsZXROYW1lUmVmLHQ9dGhpcy5wYXJl
bnRPdXRsZXRTdGF0ZVJlZixuPXRoaXMuZGVmaW5pdGlvbixyPXRoaXMubGFzdFN0YXRlLGk9ZS52
YWx1ZSgpLG89dC5nZXQoIm91dGxldHMiKS5nZXQoaSkscz10aGlzLmxhc3RTdGF0ZT1vLnZhbHVl
KCkKLXRoaXMub3V0bGV0U3RhdGVUYWcudXBkYXRlKG8udGFnKSxuPWwobixyLHMpCi12YXIgYT1z
JiZzLnJlbmRlci50ZW1wbGF0ZQotcmV0dXJuIG58fCh0aGlzLmRlZmluaXRpb249YT9uZXcgYihp
LHMucmVuZGVyLnRlbXBsYXRlKTpudWxsKX0sZX0oKSxoPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShl
KXt0aGlzLm91dGxldFN0YXRlPWUsdGhpcy5pbnN0cnVtZW50KCl9cmV0dXJuIGUucHJvdG90eXBl
Lmluc3RydW1lbnQ9ZnVuY3Rpb24oKXt0aGlzLmZpbmFsaXplcj0oMCxpLl9pbnN0cnVtZW50U3Rh
cnQpKCJyZW5kZXIub3V0bGV0IixjLHRoaXMub3V0bGV0U3RhdGUpfSxlLnByb3RvdHlwZS5maW5h
bGl6ZT1mdW5jdGlvbigpeygwLHRoaXMuZmluYWxpemVyKSgpLHRoaXMuZmluYWxpemVyPXB9LGV9
KCksZD1mdW5jdGlvbihlKXtmdW5jdGlvbiBuKCl7cmV0dXJuKDAsdC5wb3NzaWJsZUNvbnN0cnVj
dG9yUmV0dXJuKSh0aGlzLGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4oMCx0LmluaGVy
aXRzKShuLGUpLG4ucHJvdG90eXBlLnByZXBhcmVBcmdzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR9
LG4ucHJvdG90eXBlLmNyZWF0ZT1mdW5jdGlvbihlLHQsbixyKXt2YXIgaT1yLm91dGxldFN0YXRl
PXIub3V0bGV0U3RhdGUuZ2V0KCJvdXRsZXRzIikuZ2V0KHQub3V0bGV0TmFtZSksbz1pLnZhbHVl
KCkKLXJldHVybiBuZXcgaChvKX0sbi5wcm90b3R5cGUubGF5b3V0Rm9yPWZ1bmN0aW9uKGUsdCxu
KXtyZXR1cm4gbi5nZXRDb21waWxlZEJsb2NrKF8sZS50ZW1wbGF0ZSl9LG4ucHJvdG90eXBlLmdl
dFNlbGY9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5vdXRsZXRTdGF0ZQotcmV0dXJuIG5ldyBvLlJvb3RS
ZWZlcmVuY2UodC5yZW5kZXIuY29udHJvbGxlcil9LG4ucHJvdG90eXBlLmdldFRhZz1mdW5jdGlv
bigpe3JldHVybiBudWxsfSxuLnByb3RvdHlwZS5nZXREZXN0cnVjdG9yPWZ1bmN0aW9uKCl7cmV0
dXJuIG51bGx9LG4ucHJvdG90eXBlLmRpZFJlbmRlckxheW91dD1mdW5jdGlvbihlKXtlLmZpbmFs
aXplKCl9LG4ucHJvdG90eXBlLmRpZENyZWF0ZUVsZW1lbnQ9ZnVuY3Rpb24oKXt9LG4ucHJvdG90
eXBlLmRpZENyZWF0ZT1mdW5jdGlvbigpe30sbi5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKCl7
fSxuLnByb3RvdHlwZS5kaWRVcGRhdGVMYXlvdXQ9ZnVuY3Rpb24oKXt9LG4ucHJvdG90eXBlLmRp
ZFVwZGF0ZT1mdW5jdGlvbigpe30sbn0ocy5kZWZhdWx0KSxtPW5ldyBkLGc9ZnVuY3Rpb24oZSl7
ZnVuY3Rpb24gbigpe3JldHVybigwLHQucG9zc2libGVDb25zdHJ1Y3RvclJldHVybikodGhpcyxl
LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9cmV0dXJuKDAsdC5pbmhlcml0cykobixlKSxuLnByb3Rv
dHlwZS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIG5ldyBoKHIub3V0bGV0U3RhdGUu
dmFsdWUoKSl9LG4ucHJvdG90eXBlLmxheW91dEZvcj1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG4u
Z2V0Q29tcGlsZWRCbG9jayh2LGUudGVtcGxhdGUpfSxufShkKSx5PW5ldyBnCi1lLlRvcExldmVs
T3V0bGV0Q29tcG9uZW50RGVmaW5pdGlvbj1mdW5jdGlvbihlKXtmdW5jdGlvbiByKHIpe3ZhciBp
PSgwLHQucG9zc2libGVDb25zdHJ1Y3RvclJldHVybikodGhpcyxlLmNhbGwodGhpcywib3V0bGV0
Iix5LHIpKQotcmV0dXJuIGkudGVtcGxhdGU9ci50ZW1wbGF0ZSwoMCxuLmdlbmVyYXRlR3VpZCko
aSksaX1yZXR1cm4oMCx0LmluaGVyaXRzKShyLGUpLHJ9KHIuQ29tcG9uZW50RGVmaW5pdGlvbikK
LXZhciB2PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLnRlbXBsYXRlPWV9cmV0dXJuIGUu
cHJvdG90eXBlLmNvbXBpbGU9ZnVuY3Rpb24oZSl7ZS53cmFwTGF5b3V0KHRoaXMudGVtcGxhdGUu
YXNMYXlvdXQoKSksZS50YWcuc3RhdGljKCJkaXYiKSxlLmF0dHJzLnN0YXRpYygiaWQiLCgwLG4u
Z3VpZEZvcikodGhpcykpLGUuYXR0cnMuc3RhdGljKCJjbGFzcyIsImVtYmVyLXZpZXciKX0sZX0o
KQotdi5pZD0idG9wLWxldmVsLW91dGxldCIKLXZhciBiPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIo
cixpKXt2YXIgbz0oMCx0LnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4pKHRoaXMsZS5jYWxsKHRo
aXMsIm91dGxldCIsbSxudWxsKSkKLXJldHVybiBvLm91dGxldE5hbWU9cixvLnRlbXBsYXRlPWks
KDAsbi5nZW5lcmF0ZUd1aWQpKG8pLG99cmV0dXJuKDAsdC5pbmhlcml0cykocixlKSxyfShyLkNv
bXBvbmVudERlZmluaXRpb24pLF89ZS5PdXRsZXRMYXlvdXRDb21waWxlcj1mdW5jdGlvbigpe2Z1
bmN0aW9uIGUoZSl7dGhpcy50ZW1wbGF0ZT1lfXJldHVybiBlLnByb3RvdHlwZS5jb21waWxlPWZ1
bmN0aW9uKGUpe2Uud3JhcExheW91dCh0aGlzLnRlbXBsYXRlLmFzTGF5b3V0KCkpfSxlfSgpCi1f
LmlkPSJvdXRsZXQifSksZSgiZW1iZXItZ2xpbW1lci9zeW50YXgvcmVuZGVyIixbImV4cG9ydHMi
LCJlbWJlci1iYWJlbCIsIkBnbGltbWVyL3J1bnRpbWUiLCJAZ2xpbW1lci9yZWZlcmVuY2UiLCJl
bWJlci1kZWJ1ZyIsImVtYmVyLWdsaW1tZXIvdXRpbHMvcmVmZXJlbmNlcyIsImVtYmVyLXJvdXRp
bmciLCJlbWJlci1nbGltbWVyL3N5bnRheC9vdXRsZXQiLCJlbWJlci1nbGltbWVyL3N5bnRheC9h
YnN0cmFjdC1tYW5hZ2VyIl0sZnVuY3Rpb24oZSx0LG4scixpLG8scyxhLHUpeyJ1c2Ugc3RyaWN0
IgotZnVuY3Rpb24gbChlKXt2YXIgdCxuPWUuZW52LGk9ZS5nZXRBcmdzKCksbz1pLnBvc2l0aW9u
YWwuYXQoMCkscz1vLnZhbHVlKCksYT1uLm93bmVyLmxvb2t1cCgidGVtcGxhdGU6IitzKSx1PXZv
aWQgMAotcmV0dXJuIGkubmFtZWQuaGFzKCJjb250cm9sbGVyIik/KHQ9aS5uYW1lZC5nZXQoImNv
bnRyb2xsZXIiKSx1PXQudmFsdWUoKSk6dT1zLDE9PT1pLnBvc2l0aW9uYWwubGVuZ3RoP25ldyBy
LkNvbnN0UmVmZXJlbmNlKG5ldyBtKHUsYSxuLGYpKTpuZXcgci5Db25zdFJlZmVyZW5jZShuZXcg
bSh1LGEsbixkKSl9ZS5yZW5kZXJNYWNybz1mdW5jdGlvbihlLHQsbixyKXt0fHwodD1bXSkKLXZh
ciBpPVt0LnNsaWNlKDApLG4sbnVsbCxudWxsXSxvPVt0LnNsaWNlKDEpLG4sbnVsbCxudWxsXQot
cmV0dXJuIHIuY29tcG9uZW50LmR5bmFtaWMoaSxsLG8sci5zeW1ib2xUYWJsZSksITB9Ci12YXIg
Yz1mdW5jdGlvbihlKXtmdW5jdGlvbiBuKCl7cmV0dXJuKDAsdC5wb3NzaWJsZUNvbnN0cnVjdG9y
UmV0dXJuKSh0aGlzLGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4oMCx0LmluaGVyaXRz
KShuLGUpLG4ucHJvdG90eXBlLnByZXBhcmVBcmdzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR9LG4u
cHJvdG90eXBlLmxheW91dEZvcj1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG4uZ2V0Q29tcGlsZWRC
bG9jayhhLk91dGxldExheW91dENvbXBpbGVyLGUudGVtcGxhdGUpfSxuLnByb3RvdHlwZS5nZXRT
ZWxmPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY29udHJvbGxlcgotcmV0dXJuIG5ldyBvLlJvb3RSZWZl
cmVuY2UodCl9LG4ucHJvdG90eXBlLmdldFRhZz1mdW5jdGlvbigpe3JldHVybiBudWxsfSxuLnBy
b3RvdHlwZS5nZXREZXN0cnVjdG9yPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LG4ucHJvdG90eXBl
LmRpZENyZWF0ZUVsZW1lbnQ9ZnVuY3Rpb24oKXt9LG4ucHJvdG90eXBlLmRpZFJlbmRlckxheW91
dD1mdW5jdGlvbigpe30sbi5wcm90b3R5cGUuZGlkQ3JlYXRlPWZ1bmN0aW9uKCl7fSxuLnByb3Rv
dHlwZS51cGRhdGU9ZnVuY3Rpb24oKXt9LG4ucHJvdG90eXBlLmRpZFVwZGF0ZUxheW91dD1mdW5j
dGlvbigpe30sbi5wcm90b3R5cGUuZGlkVXBkYXRlPWZ1bmN0aW9uKCl7fSxufSh1LmRlZmF1bHQp
LHA9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbigpe3JldHVybigwLHQucG9zc2libGVDb25zdHJ1Y3Rv
clJldHVybikodGhpcyxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9cmV0dXJuKDAsdC5pbmhlcml0
cykobixlKSxuLnByb3RvdHlwZS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9dC5uYW1l
LG89dC5lbnYsYT1vLm93bmVyLmxvb2t1cCgiY29udHJvbGxlcjoiK2kpfHwoMCxzLmdlbmVyYXRl
Q29udHJvbGxlcikoby5vd25lcixpKQotcmV0dXJuIHIucm9vdE91dGxldFN0YXRlJiYoci5vdXRs
ZXRTdGF0ZT1yLnJvb3RPdXRsZXRTdGF0ZS5nZXRPcnBoYW4oaSkpLHtjb250cm9sbGVyOmF9fSxu
fShjKSxmPW5ldyBwLGg9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbigpe3JldHVybigwLHQucG9zc2li
bGVDb25zdHJ1Y3RvclJldHVybikodGhpcyxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9cmV0dXJu
KDAsdC5pbmhlcml0cykobixlKSxuLnByb3RvdHlwZS5jcmVhdGU9ZnVuY3Rpb24oZSx0LG4scil7
dmFyIGk9dC5uYW1lLG89dC5lbnYsYT1uLnBvc2l0aW9uYWwuYXQoMCksdT1vLm93bmVyLmZhY3Rv
cnlGb3IoImNvbnRyb2xsZXI6IitpKSxsPXV8fCgwLHMuZ2VuZXJhdGVDb250cm9sbGVyRmFjdG9y
eSkoby5vd25lcixpKSxjPWwuY3JlYXRlKHttb2RlbDphLnZhbHVlKCl9KQotcmV0dXJuIHIucm9v
dE91dGxldFN0YXRlJiYoci5vdXRsZXRTdGF0ZT1yLnJvb3RPdXRsZXRTdGF0ZS5nZXRPcnBoYW4o
aSkpLHtjb250cm9sbGVyOmN9fSxuLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oZSx0KXtlLmNv
bnRyb2xsZXIuc2V0KCJtb2RlbCIsdC5wb3NpdGlvbmFsLmF0KDApLnZhbHVlKCkpfSxuLnByb3Rv
dHlwZS5nZXREZXN0cnVjdG9yPWZ1bmN0aW9uKGUpe3JldHVybiBlLmNvbnRyb2xsZXJ9LG59KGMp
LGQ9bmV3IGgsbT1mdW5jdGlvbihlKXtmdW5jdGlvbiBuKG4scixpLG8pe3ZhciBzPSgwLHQucG9z
c2libGVDb25zdHJ1Y3RvclJldHVybikodGhpcyxlLmNhbGwodGhpcywicmVuZGVyIixvLG51bGwp
KQotcmV0dXJuIHMubmFtZT1uLHMudGVtcGxhdGU9cixzLmVudj1pLHN9cmV0dXJuKDAsdC5pbmhl
cml0cykobixlKSxufShuLkNvbXBvbmVudERlZmluaXRpb24pfSksZSgiZW1iZXItZ2xpbW1lci90
ZW1wbGF0ZSIsWyJleHBvcnRzIiwiZW1iZXItdXRpbHMiLCJAZ2xpbW1lci9ydW50aW1lIl0sZnVu
Y3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IgotZS5kZWZhdWx0PWZ1bmN0aW9uKGUpe3ZhciByPSgw
LG4udGVtcGxhdGVGYWN0b3J5KShlKQotcmV0dXJue2lkOnIuaWQsbWV0YTpyLm1ldGEsY3JlYXRl
OmZ1bmN0aW9uKGUpe3JldHVybiByLmNyZWF0ZShlLmVudix7b3duZXI6ZVt0Lk9XTkVSXX0pfX19
fSksZSgiZW1iZXItZ2xpbW1lci90ZW1wbGF0ZV9yZWdpc3RyeSIsWyJleHBvcnRzIl0sZnVuY3Rp
b24oZSl7InVzZSBzdHJpY3QiCi1lLnNldFRlbXBsYXRlcz1mdW5jdGlvbihlKXt0PWV9LGUuZ2V0
VGVtcGxhdGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LGUuZ2V0VGVtcGxhdGU9ZnVuY3Rpb24oZSl7
aWYodC5oYXNPd25Qcm9wZXJ0eShlKSlyZXR1cm4gdFtlXX0sZS5oYXNUZW1wbGF0ZT1mdW5jdGlv
bihlKXtyZXR1cm4gdC5oYXNPd25Qcm9wZXJ0eShlKX0sZS5zZXRUZW1wbGF0ZT1mdW5jdGlvbihl
LG4pe3JldHVybiB0W2VdPW59Ci12YXIgdD17fX0pLGUoImVtYmVyLWdsaW1tZXIvdGVtcGxhdGVz
L2NvbXBvbmVudCIsWyJleHBvcnRzIiwiZW1iZXItZ2xpbW1lci90ZW1wbGF0ZSJdLGZ1bmN0aW9u
KGUsdCl7InVzZSBzdHJpY3QiCi1lLmRlZmF1bHQ9KDAsdC5kZWZhdWx0KSh7aWQ6Im4rM21LU25C
IixibG9jazoneyJzdGF0ZW1lbnRzIjpbWzE4LCJkZWZhdWx0Il1dLCJsb2NhbHMiOltdLCJuYW1l
ZCI6W10sInlpZWxkcyI6WyJkZWZhdWx0Il0sImhhc1BhcnRpYWxzIjpmYWxzZX0nLG1ldGE6e21v
ZHVsZU5hbWU6ImVtYmVyLWdsaW1tZXIvdGVtcGxhdGVzL2NvbXBvbmVudC5oYnMifX0pfSksZSgi
ZW1iZXItZ2xpbW1lci90ZW1wbGF0ZXMvZW1wdHkiLFsiZXhwb3J0cyIsImVtYmVyLWdsaW1tZXIv
dGVtcGxhdGUiXSxmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0IgotZS5kZWZhdWx0PSgwLHQuZGVm
YXVsdCkoe2lkOiI1UUpKam5pTSIsYmxvY2s6J3sic3RhdGVtZW50cyI6W10sImxvY2FscyI6W10s
Im5hbWVkIjpbXSwieWllbGRzIjpbXSwiaGFzUGFydGlhbHMiOmZhbHNlfScsbWV0YTp7bW9kdWxl
TmFtZToiZW1iZXItZ2xpbW1lci90ZW1wbGF0ZXMvZW1wdHkuaGJzIn19KX0pLGUoImVtYmVyLWds
aW1tZXIvdGVtcGxhdGVzL2xpbmstdG8iLFsiZXhwb3J0cyIsImVtYmVyLWdsaW1tZXIvdGVtcGxh
dGUiXSxmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0IgotZS5kZWZhdWx0PSgwLHQuZGVmYXVsdCko
e2lkOiJZVXdISUNBayIsYmxvY2s6J3sic3RhdGVtZW50cyI6W1s2LFsiaWYiXSxbWzI4LFsibGlu
a1RpdGxlIl1dXSxudWxsLHsic3RhdGVtZW50cyI6W1sxLFsyNixbImxpbmtUaXRsZSJdXSxmYWxz
ZV1dLCJsb2NhbHMiOltdfSx7InN0YXRlbWVudHMiOltbMTgsImRlZmF1bHQiXV0sImxvY2FscyI6
W119XV0sImxvY2FscyI6W10sIm5hbWVkIjpbXSwieWllbGRzIjpbImRlZmF1bHQiXSwiaGFzUGFy
dGlhbHMiOmZhbHNlfScsbWV0YTp7bW9kdWxlTmFtZToiZW1iZXItZ2xpbW1lci90ZW1wbGF0ZXMv
bGluay10by5oYnMifX0pfSksZSgiZW1iZXItZ2xpbW1lci90ZW1wbGF0ZXMvb3V0bGV0IixbImV4
cG9ydHMiLCJlbWJlci1nbGltbWVyL3RlbXBsYXRlIl0sZnVuY3Rpb24oZSx0KXsidXNlIHN0cmlj
dCIKLWUuZGVmYXVsdD0oMCx0LmRlZmF1bHQpKHtpZDoiYlZQMVdWTFIiLGJsb2NrOid7InN0YXRl
bWVudHMiOltbMSxbMjYsWyJvdXRsZXQiXV0sZmFsc2VdXSwibG9jYWxzIjpbXSwibmFtZWQiOltd
LCJ5aWVsZHMiOltdLCJoYXNQYXJ0aWFscyI6ZmFsc2V9JyxtZXRhOnttb2R1bGVOYW1lOiJlbWJl
ci1nbGltbWVyL3RlbXBsYXRlcy9vdXRsZXQuaGJzIn19KX0pLGUoImVtYmVyLWdsaW1tZXIvdGVt
cGxhdGVzL3Jvb3QiLFsiZXhwb3J0cyIsImVtYmVyLWdsaW1tZXIvdGVtcGxhdGUiXSxmdW5jdGlv
bihlLHQpeyJ1c2Ugc3RyaWN0IgotZS5kZWZhdWx0PSgwLHQuZGVmYXVsdCkoe2lkOiJDamsydlMx
MCIsYmxvY2s6J3sic3RhdGVtZW50cyI6W1sxLFszMyxbImNvbXBvbmVudCJdLFtbMjgsW251bGxd
XV0sbnVsbF0sZmFsc2VdXSwibG9jYWxzIjpbXSwibmFtZWQiOltdLCJ5aWVsZHMiOltdLCJoYXNQ
YXJ0aWFscyI6ZmFsc2V9JyxtZXRhOnttb2R1bGVOYW1lOiJlbWJlci1nbGltbWVyL3RlbXBsYXRl
cy9yb290LmhicyJ9fSl9KSxlKCJlbWJlci1nbGltbWVyL3V0aWxzL2JpbmRpbmdzIixbImV4cG9y
dHMiLCJlbWJlci1iYWJlbCIsIkBnbGltbWVyL3JlZmVyZW5jZSIsIkBnbGltbWVyL3dpcmUtZm9y
bWF0IiwiZW1iZXItZGVidWciLCJlbWJlci1tZXRhbCIsImVtYmVyLXJ1bnRpbWUiLCJlbWJlci1n
bGltbWVyL2NvbXBvbmVudCIsImVtYmVyLWdsaW1tZXIvdXRpbHMvc3RyaW5nIl0sZnVuY3Rpb24o
ZSx0LG4scixpLG8scyxhLHUpeyJ1c2Ugc3RyaWN0IgotZnVuY3Rpb24gbChlLHQpe3JldHVybiBl
W2EuUk9PVF9SRUZdLmdldCh0KX1mdW5jdGlvbiBjKGUsdCl7cmV0dXJuImF0dHJzIj09PXRbMF0m
Jih0LnNoaWZ0KCksMT09PXQubGVuZ3RoKT9sKGUsdFswXSk6KDAsbi5yZWZlcmVuY2VGcm9tUGFy
dHMpKGVbYS5ST09UX1JFRl0sdCl9ZS5DbGFzc05hbWVCaW5kaW5nPWUuSXNWaXNpYmxlQmluZGlu
Zz1lLkF0dHJpYnV0ZUJpbmRpbmc9dm9pZCAwLGUud3JhcENvbXBvbmVudENsYXNzQXR0cmlidXRl
PWZ1bmN0aW9uKGUpe2lmKCFlKXJldHVybiBlCi12YXIgdCxuLGksbyxzLGE9ZVswXSx1PWVbMV0s
bD1hLmluZGV4T2YoImNsYXNzIikKLXJldHVybi0xIT09bCYmKHQ9dVtsXSxuPXRbMF0sbj09PXIu
T3BzLkdldCYmKGk9dVtsXSxvPWlbMV0scz1vW28ubGVuZ3RoLTFdLGVbMV1bbF09W3IuT3BzLkhl
bHBlcixbIi1jbGFzcyJdLFtpLHNdXSkpLGV9LGUuQXR0cmlidXRlQmluZGluZz17cGFyc2U6ZnVu
Y3Rpb24oZSl7dmFyIHQsbixyPWUuaW5kZXhPZigiOiIpCi1yZXR1cm4tMT09PXI/W2UsZSwhMF06
KHQ9ZS5zdWJzdHJpbmcoMCxyKSxuPWUuc3Vic3RyaW5nKHIrMSksW3QsbiwhMV0pfSxpbnN0YWxs
OmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLHM9blswXSxhPW5bMV0KLW5bMl0KLWlmKCJpZCI9PT1h
KXJldHVybiBpPSgwLG8uZ2V0KSh0LHMpLHZvaWQgMCE9PWkmJm51bGwhPT1pfHwoaT10LmVsZW1l
bnRJZCksdm9pZCByLmFkZFN0YXRpY0F0dHJpYnV0ZShlLCJpZCIsaSkKLXZhciB1PXMuaW5kZXhP
ZigiLiIpPi0xLHA9dT9jKHQscy5zcGxpdCgiLiIpKTpsKHQscykKLSJzdHlsZSI9PT1hJiYocD1u
ZXcgZihwLGwodCwiaXNWaXNpYmxlIikpKSxyLmFkZER5bmFtaWNBdHRyaWJ1dGUoZSxhLHApfX0K
LXZhciBwPSgwLHUuaHRtbFNhZmUpKCJkaXNwbGF5OiBub25lOyIpLGY9ZnVuY3Rpb24oZSl7ZnVu
Y3Rpb24gcihyLGkpe3ZhciBvPSgwLHQucG9zc2libGVDb25zdHJ1Y3RvclJldHVybikodGhpcyxl
LmNhbGwodGhpcykpCi1yZXR1cm4gby50YWc9KDAsbi5jb21iaW5lKShbci50YWcsaS50YWddKSxv
LmlubmVyPXIsby5pc1Zpc2libGU9aSxvfXJldHVybigwLHQuaW5oZXJpdHMpKHIsZSksci5wcm90
b3R5cGUuY29tcHV0ZT1mdW5jdGlvbigpe3ZhciBlLHQ9dGhpcy5pbm5lci52YWx1ZSgpCi1yZXR1
cm4hMSE9PXRoaXMuaXNWaXNpYmxlLnZhbHVlKCk/dDp0fHwwPT09dD8oZT10KyIgZGlzcGxheTog
bm9uZTsiLCgwLHUuaXNIVE1MU2FmZSkodCk/KDAsdS5odG1sU2FmZSkoZSk6ZSk6cH0scn0obi5D
YWNoZWRSZWZlcmVuY2UpCi1lLklzVmlzaWJsZUJpbmRpbmc9e2luc3RhbGw6ZnVuY3Rpb24oZSx0
LHIpe3IuYWRkRHluYW1pY0F0dHJpYnV0ZShlLCJzdHlsZSIsKDAsbi5tYXApKGwodCwiaXNWaXNp
YmxlIiksdGhpcy5tYXBTdHlsZVZhbHVlKSl9LG1hcFN0eWxlVmFsdWU6ZnVuY3Rpb24oZSl7cmV0
dXJuITE9PT1lP3A6bnVsbH19LGUuQ2xhc3NOYW1lQmluZGluZz17aW5zdGFsbDpmdW5jdGlvbihl
LHQsbixyKXt2YXIgaSxvLHMsYSx1PW4uc3BsaXQoIjoiKSxwPXVbMF0sZj11WzFdLG09dVsyXQot
IiI9PT1wP3IuYWRkU3RhdGljQXR0cmlidXRlKGUsImNsYXNzIixmKTooaT1wLmluZGV4T2YoIi4i
KT4tMSxvPWkmJnAuc3BsaXQoIi4iKSxzPWk/Yyh0LG8pOmwodCxwKSxhPXZvaWQgMCxhPXZvaWQg
MD09PWY/bmV3IGgocyxpP29bby5sZW5ndGgtMV06cCk6bmV3IGQocyxmLG0pLHIuYWRkRHluYW1p
Y0F0dHJpYnV0ZShlLCJjbGFzcyIsYSkpfX0KLXZhciBoPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4o
bixyKXt2YXIgaT0oMCx0LnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4pKHRoaXMsZS5jYWxsKHRo
aXMpKQotcmV0dXJuIGkudGFnPW4udGFnLGkuaW5uZXI9bixpLnBhdGg9cixpLmRhc2hlcml6ZWRQ
YXRoPW51bGwsaX1yZXR1cm4oMCx0LmluaGVyaXRzKShuLGUpLG4ucHJvdG90eXBlLmNvbXB1dGU9
ZnVuY3Rpb24oKXt2YXIgZSx0PXRoaXMuaW5uZXIudmFsdWUoKQotcmV0dXJuITA9PT10PyhlPXRo
aXMucGF0aCx0aGlzLmRhc2hlcml6ZWRQYXRofHwodGhpcy5kYXNoZXJpemVkUGF0aD1zLlN0cmlu
Zy5kYXNoZXJpemUoZSkpKTp0fHwwPT09dD90Om51bGx9LG59KG4uQ2FjaGVkUmVmZXJlbmNlKSxk
PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4obixyLGkpe3ZhciBvPSgwLHQucG9zc2libGVDb25zdHJ1
Y3RvclJldHVybikodGhpcyxlLmNhbGwodGhpcykpCi1yZXR1cm4gby50YWc9bi50YWcsby5pbm5l
cj1uLG8udHJ1dGh5PXJ8fG51bGwsby5mYWxzeT1pfHxudWxsLG99cmV0dXJuKDAsdC5pbmhlcml0
cykobixlKSxuLnByb3RvdHlwZS5jb21wdXRlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5pbm5lcix0
PXRoaXMudHJ1dGh5LG49dGhpcy5mYWxzeQotcmV0dXJuIGUudmFsdWUoKT90Om59LG59KG4uQ2Fj
aGVkUmVmZXJlbmNlKX0pLGUoImVtYmVyLWdsaW1tZXIvdXRpbHMvZGVidWctc3RhY2siLFsiZXhw
b3J0cyJdLGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IgotZS5kZWZhdWx0PXZvaWQgMH0pLGUoImVt
YmVyLWdsaW1tZXIvdXRpbHMvaXRlcmFibGUiLFsiZXhwb3J0cyIsImVtYmVyLXV0aWxzIiwiZW1i
ZXItbWV0YWwiLCJlbWJlci1ydW50aW1lIiwiZW1iZXItZ2xpbW1lci91dGlscy9yZWZlcmVuY2Vz
IiwiZW1iZXItZ2xpbW1lci9oZWxwZXJzL2VhY2gtaW4iLCJAZ2xpbW1lci9yZWZlcmVuY2UiXSxm
dW5jdGlvbihlLHQsbixyLGksbyxzKXsidXNlIHN0cmljdCIKLWZ1bmN0aW9uIGEoZSl7c3dpdGNo
KGUpe2Nhc2UiQGluZGV4IjpjYXNlIHZvaWQgMDpjYXNlIG51bGw6cmV0dXJuIGwKLWNhc2UiQGlk
ZW50aXR5IjpyZXR1cm4gYwotZGVmYXVsdDpyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuKDAsbi5n
ZXQpKHQsZSl9fX1mdW5jdGlvbiB1KGUpe3N3aXRjaChlKXtjYXNlIkBpbmRleCI6cmV0dXJuIGwK
LWNhc2UiQGlkZW50aXR5IjpjYXNlIHZvaWQgMDpjYXNlIG51bGw6cmV0dXJuIGMKLWRlZmF1bHQ6
cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybigwLG4uZ2V0KSh0LGUpfX19ZnVuY3Rpb24gbChlLHQp
e3JldHVybiBTdHJpbmcodCl9ZnVuY3Rpb24gYyhlKXtzd2l0Y2godHlwZW9mIGUpe2Nhc2Uic3Ry
aW5nIjpjYXNlIm51bWJlciI6cmV0dXJuIFN0cmluZyhlKQotZGVmYXVsdDpyZXR1cm4oMCx0Lmd1
aWRGb3IpKGUpfX1mdW5jdGlvbiBwKGUsdCl7dmFyIG49ZVt0XQotcmV0dXJuIG4/KGVbdF0rKyx0
KyJiZTI3Nzc1Ny1iYmJlLTQ2MjAtOWZjYi0yMTNlZjQzM2NjYTIiK24pOihlW3RdPTEsdCl9ZS5k
ZWZhdWx0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuKDAsby5pc0VhY2hJbikoZSk/bmV3IHkoZSxhKHQp
KTpuZXcgdihlLHUodCkpfQotdmFyIGY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5h
cnJheT1lLHRoaXMubGVuZ3RoPWUubGVuZ3RoLHRoaXMua2V5Rm9yPXQsdGhpcy5wb3NpdGlvbj0w
LHRoaXMuc2Vlbj1PYmplY3QuY3JlYXRlKG51bGwpfXJldHVybiBlLnByb3RvdHlwZS5pc0VtcHR5
PWZ1bmN0aW9uKCl7cmV0dXJuITF9LGUucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24oKXt2YXIgZT10
aGlzLmFycmF5LHQ9dGhpcy5sZW5ndGgsbj10aGlzLmtleUZvcixyPXRoaXMucG9zaXRpb24saT10
aGlzLnNlZW4KLWlmKHI+PXQpcmV0dXJuIG51bGwKLXZhciBvPWVbcl0scz1yLGE9cChpLG4obyxz
KSkKLXJldHVybiB0aGlzLnBvc2l0aW9uKysse2tleTphLHZhbHVlOm8sbWVtbzpzfX0sZX0oKSxo
PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMuYXJyYXk9ZSx0aGlzLmxlbmd0aD0oMCxu
LmdldCkoZSwibGVuZ3RoIiksdGhpcy5rZXlGb3I9dCx0aGlzLnBvc2l0aW9uPTAsdGhpcy5zZWVu
PU9iamVjdC5jcmVhdGUobnVsbCl9cmV0dXJuIGUucHJvdG90eXBlLmlzRW1wdHk9ZnVuY3Rpb24o
KXtyZXR1cm4gMD09PXRoaXMubGVuZ3RofSxlLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKCl7dmFy
IGU9dGhpcy5hcnJheSx0PXRoaXMubGVuZ3RoLG49dGhpcy5rZXlGb3IsaT10aGlzLnBvc2l0aW9u
LG89dGhpcy5zZWVuCi1pZihpPj10KXJldHVybiBudWxsCi12YXIgcz0oMCxyLm9iamVjdEF0KShl
LGkpLGE9aSx1PXAobyxuKHMsYSkpCi1yZXR1cm4gdGhpcy5wb3NpdGlvbisrLHtrZXk6dSx2YWx1
ZTpzLG1lbW86YX19LGV9KCksZD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG4pe3RoaXMua2V5
cz1lLHRoaXMudmFsdWVzPXQsdGhpcy5rZXlGb3I9bix0aGlzLnBvc2l0aW9uPTAsdGhpcy5zZWVu
PU9iamVjdC5jcmVhdGUobnVsbCl9cmV0dXJuIGUucHJvdG90eXBlLmlzRW1wdHk9ZnVuY3Rpb24o
KXtyZXR1cm4gMD09PXRoaXMua2V5cy5sZW5ndGh9LGUucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24o
KXt2YXIgZT10aGlzLmtleXMsdD10aGlzLnZhbHVlcyxuPXRoaXMua2V5Rm9yLHI9dGhpcy5wb3Np
dGlvbixpPXRoaXMuc2VlbgotaWYocj49ZS5sZW5ndGgpcmV0dXJuIG51bGwKLXZhciBvPXRbcl0s
cz1lW3JdLGE9cChpLG4obyxzKSkKLXJldHVybiB0aGlzLnBvc2l0aW9uKysse2tleTphLHZhbHVl
Om8sbWVtbzpzfX0sZX0oKSxtPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe31yZXR1cm4gZS5wcm90
b3R5cGUuaXNFbXB0eT1mdW5jdGlvbigpe3JldHVybiEwfSxlLnByb3RvdHlwZS5uZXh0PWZ1bmN0
aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY2FsbCBuZXh0KCkgb24gYW4gZW1wdHkgaXRl
cmF0b3IiKX0sZX0oKSxnPW5ldyBtLHk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5y
ZWY9ZSx0aGlzLmtleUZvcj10Ci12YXIgbj10aGlzLnZhbHVlVGFnPW5ldyBzLlVwZGF0YWJsZVRh
ZyhzLkNPTlNUQU5UX1RBRykKLXRoaXMudGFnPSgwLHMuY29tYmluZSkoW2UudGFnLG5dKX1yZXR1
cm4gZS5wcm90b3R5cGUuaXRlcmF0ZT1mdW5jdGlvbigpe3ZhciBlLHQscj10aGlzLnJlZixpPXRo
aXMua2V5Rm9yLG89dGhpcy52YWx1ZVRhZyxzPXIudmFsdWUoKQotby51cGRhdGUoKDAsbi50YWdG
b3IpKHMpKSwoMCxuLmlzUHJveHkpKHMpJiYocz0oMCxuLmdldCkocywiY29udGVudCIpKQotdmFy
IGE9dHlwZW9mIHMKLXJldHVybiFzfHwib2JqZWN0IiE9PWEmJiJmdW5jdGlvbiIhPT1hP2c6KGU9
T2JqZWN0LmtleXMocyksdD1lLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gc1tlXX0pLGUubGVuZ3Ro
PjA/bmV3IGQoZSx0LGkpOmcpfSxlLnByb3RvdHlwZS52YWx1ZVJlZmVyZW5jZUZvcj1mdW5jdGlv
bihlKXtyZXR1cm4gbmV3IGkuVXBkYXRhYmxlUHJpbWl0aXZlUmVmZXJlbmNlKGUubWVtbyl9LGUu
cHJvdG90eXBlLnVwZGF0ZVZhbHVlUmVmZXJlbmNlPWZ1bmN0aW9uKGUsdCl7ZS51cGRhdGUodC5t
ZW1vKX0sZS5wcm90b3R5cGUubWVtb1JlZmVyZW5jZUZvcj1mdW5jdGlvbihlKXtyZXR1cm4gbmV3
IGkuVXBkYXRhYmxlUmVmZXJlbmNlKGUudmFsdWUpfSxlLnByb3RvdHlwZS51cGRhdGVNZW1vUmVm
ZXJlbmNlPWZ1bmN0aW9uKGUsdCl7ZS51cGRhdGUodC52YWx1ZSl9LGV9KCksdj1mdW5jdGlvbigp
e2Z1bmN0aW9uIGUoZSx0KXt0aGlzLnJlZj1lLHRoaXMua2V5Rm9yPXQKLXZhciBuPXRoaXMudmFs
dWVUYWc9bmV3IHMuVXBkYXRhYmxlVGFnKHMuQ09OU1RBTlRfVEFHKQotdGhpcy50YWc9KDAscy5j
b21iaW5lKShbZS50YWcsbl0pfXJldHVybiBlLnByb3RvdHlwZS5pdGVyYXRlPWZ1bmN0aW9uKCl7
dmFyIGUsdD10aGlzLnJlZixpPXRoaXMua2V5Rm9yLG89dGhpcy52YWx1ZVRhZyxzPXQudmFsdWUo
KQotcmV0dXJuIG8udXBkYXRlKCgwLG4udGFnRm9yUHJvcGVydHkpKHMsIltdIikpLHMmJiJvYmpl
Y3QiPT10eXBlb2Ygcz9BcnJheS5pc0FycmF5KHMpP3MubGVuZ3RoPjA/bmV3IGYocyxpKTpnOigw
LHIuaXNFbWJlckFycmF5KShzKT8oMCxuLmdldCkocywibGVuZ3RoIik+MD9uZXcgaChzLGkpOmc6
ImZ1bmN0aW9uIj09dHlwZW9mIHMuZm9yRWFjaD8oZT1bXSxzLmZvckVhY2goZnVuY3Rpb24odCl7
ZS5wdXNoKHQpfSksZS5sZW5ndGg+MD9uZXcgZihlLGkpOmcpOmc6Z30sZS5wcm90b3R5cGUudmFs
dWVSZWZlcmVuY2VGb3I9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBpLlVwZGF0YWJsZVJlZmVyZW5j
ZShlLnZhbHVlKX0sZS5wcm90b3R5cGUudXBkYXRlVmFsdWVSZWZlcmVuY2U9ZnVuY3Rpb24oZSx0
KXtlLnVwZGF0ZSh0LnZhbHVlKX0sZS5wcm90b3R5cGUubWVtb1JlZmVyZW5jZUZvcj1mdW5jdGlv
bihlKXtyZXR1cm4gbmV3IGkuVXBkYXRhYmxlUHJpbWl0aXZlUmVmZXJlbmNlKGUubWVtbyl9LGUu
cHJvdG90eXBlLnVwZGF0ZU1lbW9SZWZlcmVuY2U9ZnVuY3Rpb24oZSx0KXtlLnVwZGF0ZSh0Lm1l
bW8pfSxlfSgpfSksZSgiZW1iZXItZ2xpbW1lci91dGlscy9wcm9jZXNzLWFyZ3MiLFsiZXhwb3J0
cyIsImVtYmVyLXV0aWxzIiwiQGdsaW1tZXIvcmVmZXJlbmNlIiwiZW1iZXItZ2xpbW1lci9jb21w
b25lbnQiLCJlbWJlci1nbGltbWVyL3V0aWxzL3JlZmVyZW5jZXMiLCJlbWJlci12aWV3cyIsImVt
YmVyLWdsaW1tZXIvaGVscGVycy9hY3Rpb24iLCJAZ2xpbW1lci9ydW50aW1lIl0sZnVuY3Rpb24o
ZSx0LG4scixpLG8scyxhKXsidXNlIHN0cmljdCIKLWZ1bmN0aW9uIHUoZSxuKXt2YXIgcj1lLm5h
bWVkLm1hcAotcmV0dXJuIG4uYXJncz8oMCx0LmFzc2lnbikoe30sbi5hcmdzLm5hbWVkLm1hcCxy
KTpyfWZ1bmN0aW9uIGwoZSx0KXt2YXIgbixyLGk9ZS5wb3NpdGlvbmFsLnZhbHVlcwotcmV0dXJu
IHQuYXJncz8obj10LmFyZ3MucG9zaXRpb25hbC52YWx1ZXMscj1bXSxyLnB1c2guYXBwbHkocixu
KSxyLnNwbGljZS5hcHBseShyLFswLGkubGVuZ3RoXS5jb25jYXQoaSkpLHIpOml9ZnVuY3Rpb24g
YyhlLHQsbixyKXt2YXIgaT1yLnBvc2l0aW9uYWxQYXJhbXMKLXJldHVybiBpJiZpLmxlbmd0aD4w
JiZ0Lmxlbmd0aD4wJiYoZT0ic3RyaW5nIj09dHlwZW9mIGk/cChlLHQsaSk6ZihlLHQsaSkpLGEu
RXZhbHVhdGVkQXJncy5uYW1lZChlLG4pfWZ1bmN0aW9uIHAoZSxuLHIpe3ZhciBpPSgwLHQuYXNz
aWduKSh7fSxlKQotcmV0dXJuIGlbcl09YS5FdmFsdWF0ZWRQb3NpdGlvbmFsQXJncy5jcmVhdGUo
biksaX1mdW5jdGlvbiBmKGUsbixyKXt2YXIgaSxvLHM9KDAsdC5hc3NpZ24pKHt9LGUpLGE9TWF0
aC5taW4obi5sZW5ndGgsci5sZW5ndGgpCi1mb3IoaT0wO2k8YTtpKyspbz1yW2ldLHNbb109bltp
XQotcmV0dXJuIHN9ZS5Db21wb25lbnRBcmdzPXZvaWQgMCxlLmdhdGhlckFyZ3M9ZnVuY3Rpb24o
ZSx0KXtyZXR1cm4gYyh1KGUsdCksbChlLHQpLGUuYmxvY2tzLHQuQ29tcG9uZW50Q2xhc3MuY2xh
c3MpfQotdmFyIGg9e3RhZzpuLkNPTlNUQU5UX1RBRyx2YWx1ZTpmdW5jdGlvbigpe3ZhciBlCi1y
ZXR1cm57YXR0cnM6e30scHJvcHM6KGU9e2F0dHJzOnt9fSxlW3IuQVJHU109e30sZSl9fX0KLWUu
Q29tcG9uZW50QXJncz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy50YWc9ZS50YWcsdGhp
cy5uYW1lZEFyZ3M9ZX1yZXR1cm4gZS5jcmVhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT10Lm5h
bWVkLmtleXMubGVuZ3RoP2g6bmV3IGUodC5uYW1lZCl9LGUucHJvdG90eXBlLnZhbHVlPWZ1bmN0
aW9uKCl7dmFyIGUsdCxuLG8sYSx1PXRoaXMubmFtZWRBcmdzLGw9dS5rZXlzLGM9dS52YWx1ZSgp
LHA9T2JqZWN0LmNyZWF0ZShudWxsKSxmPU9iamVjdC5jcmVhdGUobnVsbCkKLWZvcihwW3IuQVJH
U109Zix0PTAsbj1sLmxlbmd0aDt0PG47dCsrKW89bFt0XSxhPXUuZ2V0KG8pLGU9Y1tvXSwiZnVu
Y3Rpb24iPT10eXBlb2YgZSYmZVtzLkFDVElPTl0/Y1tvXT1lOmFbaS5VUERBVEVdJiYoY1tvXT1u
ZXcgbShhLGUpKSxmW29dPWEscFtvXT1lCi1yZXR1cm4gcC5hdHRycz1jLHthdHRyczpjLHByb3Bz
OnB9fSxlfSgpCi12YXIgZD0oMCx0LnN5bWJvbCkoIlJFRiIpLG09ZnVuY3Rpb24oKXtmdW5jdGlv
biBlKGUsdCl7dGhpc1tvLk1VVEFCTEVfQ0VMTF09ITAsdGhpc1tkXT1lLHRoaXMudmFsdWU9dH1y
ZXR1cm4gZS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGUpe3RoaXNbZF1baS5VUERBVEVdKGUp
fSxlfSgpfSksZSgiZW1iZXItZ2xpbW1lci91dGlscy9yZWZlcmVuY2VzIixbImV4cG9ydHMiLCJA
Z2xpbW1lci9ydW50aW1lIiwiZW1iZXItYmFiZWwiLCJlbWJlci11dGlscyIsImVtYmVyLW1ldGFs
IiwiQGdsaW1tZXIvcmVmZXJlbmNlIiwiZW1iZXItZ2xpbW1lci91dGlscy90by1ib29sIiwiZW1i
ZXItZ2xpbW1lci9oZWxwZXIiXSxmdW5jdGlvbihlLHQsbixyLGksbyxzLGEpeyJ1c2Ugc3RyaWN0
IgotZS5VbmJvdW5kUmVmZXJlbmNlPWUuSW50ZXJuYWxIZWxwZXJSZWZlcmVuY2U9ZS5DbGFzc0Jh
c2VkSGVscGVyUmVmZXJlbmNlPWUuU2ltcGxlSGVscGVyUmVmZXJlbmNlPWUuQ29uZGl0aW9uYWxS
ZWZlcmVuY2U9ZS5VcGRhdGFibGVQcmltaXRpdmVSZWZlcmVuY2U9ZS5VcGRhdGFibGVSZWZlcmVu
Y2U9ZS5OZXN0ZWRQcm9wZXJ0eVJlZmVyZW5jZT1lLlJvb3RQcm9wZXJ0eVJlZmVyZW5jZT1lLlBy
b3BlcnR5UmVmZXJlbmNlPWUuUm9vdFJlZmVyZW5jZT1lLkNhY2hlZFJlZmVyZW5jZT1lLlVOREVG
SU5FRF9SRUZFUkVOQ0U9ZS5OVUxMX1JFRkVSRU5DRT1lLlVQREFURT12b2lkIDAsT2JqZWN0LmRl
ZmluZVByb3BlcnR5KGUsIk5VTExfUkVGRVJFTkNFIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rp
b24oKXtyZXR1cm4gdC5OVUxMX1JFRkVSRU5DRX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwi
VU5ERUZJTkVEX1JFRkVSRU5DRSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJu
IHQuVU5ERUZJTkVEX1JFRkVSRU5DRX19KQotdmFyIHU9ZS5VUERBVEU9KDAsci5zeW1ib2wpKCJV
UERBVEUiKSxsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe31yZXR1cm4gZS5wcm90b3R5cGUuZ2V0
PWZ1bmN0aW9uKGUpe3JldHVybiBmLmNyZWF0ZSh0aGlzLGUpfSxlfSgpLGM9ZS5DYWNoZWRSZWZl
cmVuY2U9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciB0PSgwLG4ucG9zc2libGVDb25zdHJ1
Y3RvclJldHVybikodGhpcyxlLmNhbGwodGhpcykpCi1yZXR1cm4gdC5fbGFzdFJldmlzaW9uPW51
bGwsdC5fbGFzdFZhbHVlPW51bGwsdH1yZXR1cm4oMCxuLmluaGVyaXRzKSh0LGUpLHQucHJvdG90
eXBlLnZhbHVlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy50YWcsdD10aGlzLl9sYXN0UmV2aXNpb24s
bj10aGlzLl9sYXN0VmFsdWUKLXJldHVybiB0JiZlLnZhbGlkYXRlKHQpfHwobj10aGlzLl9sYXN0
VmFsdWU9dGhpcy5jb21wdXRlKCksdGhpcy5fbGFzdFJldmlzaW9uPWUudmFsdWUoKSksbn0sdH0o
bCkscD1lLlJvb3RSZWZlcmVuY2U9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCh0KXt2YXIgcj0oMCxu
LnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4pKHRoaXMsZS5jYWxsKHRoaXMsdCkpCi1yZXR1cm4g
ci5jaGlsZHJlbj1PYmplY3QuY3JlYXRlKG51bGwpLHJ9cmV0dXJuKDAsbi5pbmhlcml0cykodCxl
KSx0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5jaGlsZHJlbltlXQotcmV0
dXJuIHR8fCh0PXRoaXMuY2hpbGRyZW5bZV09bmV3IGgodGhpcy5pbm5lcixlKSksdH0sdH0oby5D
b25zdFJlZmVyZW5jZSksZj1lLlByb3BlcnR5UmVmZXJlbmNlPWZ1bmN0aW9uKGUpe2Z1bmN0aW9u
IHQoKXtyZXR1cm4oMCxuLnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4pKHRoaXMsZS5hcHBseSh0
aGlzLGFyZ3VtZW50cykpfXJldHVybigwLG4uaW5oZXJpdHMpKHQsZSksdC5jcmVhdGU9ZnVuY3Rp
b24oZSx0KXtyZXR1cm4oMCxvLmlzQ29uc3QpKGUpP25ldyBoKGUudmFsdWUoKSx0KTpuZXcgZChl
LHQpfSx0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBkKHRoaXMsZSl9LHR9
KGMpLGg9ZS5Sb290UHJvcGVydHlSZWZlcmVuY2U9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCh0LHIp
e3ZhciBvPSgwLG4ucG9zc2libGVDb25zdHJ1Y3RvclJldHVybikodGhpcyxlLmNhbGwodGhpcykp
Ci1yZXR1cm4gby5fcGFyZW50VmFsdWU9dCxvLl9wcm9wZXJ0eUtleT1yLG8udGFnPSgwLGkudGFn
Rm9yUHJvcGVydHkpKHQsciksb31yZXR1cm4oMCxuLmluaGVyaXRzKSh0LGUpLHQucHJvdG90eXBl
LmNvbXB1dGU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9wYXJlbnRWYWx1ZSx0PXRoaXMuX3Byb3Bl
cnR5S2V5Ci1yZXR1cm4oMCxpLmdldCkoZSx0KX0sdC5wcm90b3R5cGVbdV09ZnVuY3Rpb24oZSl7
KDAsaS5zZXQpKHRoaXMuX3BhcmVudFZhbHVlLHRoaXMuX3Byb3BlcnR5S2V5LGUpfSx0fShmKSxk
PWUuTmVzdGVkUHJvcGVydHlSZWZlcmVuY2U9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCh0LHIpe3Zh
ciBpPSgwLG4ucG9zc2libGVDb25zdHJ1Y3RvclJldHVybikodGhpcyxlLmNhbGwodGhpcykpLHM9
dC50YWcsYT1uZXcgby5VcGRhdGFibGVUYWcoby5DT05TVEFOVF9UQUcpCi1yZXR1cm4gaS5fcGFy
ZW50UmVmZXJlbmNlPXQsaS5fcGFyZW50T2JqZWN0VGFnPWEsaS5fcHJvcGVydHlLZXk9cixpLnRh
Zz0oMCxvLmNvbWJpbmUpKFtzLGFdKSxpfXJldHVybigwLG4uaW5oZXJpdHMpKHQsZSksdC5wcm90
b3R5cGUuY29tcHV0ZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuX3BhcmVudFJlZmVyZW5jZSx0PXRo
aXMuX3BhcmVudE9iamVjdFRhZyxuPXRoaXMuX3Byb3BlcnR5S2V5LHI9ZS52YWx1ZSgpCi1yZXR1
cm4gdC51cGRhdGUoKDAsaS50YWdGb3JQcm9wZXJ0eSkocixuKSksInN0cmluZyI9PXR5cGVvZiBy
JiYibGVuZ3RoIj09PW4/ci5sZW5ndGg6Im9iamVjdCI9PXR5cGVvZiByJiZyPygwLGkuZ2V0KShy
LG4pOnZvaWQgMH0sdC5wcm90b3R5cGVbdV09ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fcGFyZW50
UmVmZXJlbmNlLnZhbHVlKCk7KDAsaS5zZXQpKHQsdGhpcy5fcHJvcGVydHlLZXksZSl9LHR9KGYp
LG09ZS5VcGRhdGFibGVSZWZlcmVuY2U9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCh0KXt2YXIgcj0o
MCxuLnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4pKHRoaXMsZS5jYWxsKHRoaXMpKQotcmV0dXJu
IHIudGFnPW5ldyBvLkRpcnR5YWJsZVRhZyxyLl92YWx1ZT10LHJ9cmV0dXJuKDAsbi5pbmhlcml0
cykodCxlKSx0LnByb3RvdHlwZS52YWx1ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl92YWx1ZX0s
dC5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGUpe2UhPT10aGlzLl92YWx1ZSYmKHRoaXMudGFn
LmRpcnR5KCksdGhpcy5fdmFsdWU9ZSl9LHR9KGwpCi1lLlVwZGF0YWJsZVByaW1pdGl2ZVJlZmVy
ZW5jZT1mdW5jdGlvbihlKXtmdW5jdGlvbiByKCl7cmV0dXJuKDAsbi5wb3NzaWJsZUNvbnN0cnVj
dG9yUmV0dXJuKSh0aGlzLGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4oMCxuLmluaGVy
aXRzKShyLGUpLHIucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0LlVOREVGSU5FRF9S
RUZFUkVOQ0V9LHJ9KG0pLGUuQ29uZGl0aW9uYWxSZWZlcmVuY2U9ZnVuY3Rpb24oZSl7ZnVuY3Rp
b24gcih0KXt2YXIgcj0oMCxuLnBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4pKHRoaXMsZS5jYWxs
KHRoaXMsdCkpCi1yZXR1cm4gci5vYmplY3RUYWc9bmV3IG8uVXBkYXRhYmxlVGFnKG8uQ09OU1RB
TlRfVEFHKSxyLnRhZz0oMCxvLmNvbWJpbmUpKFt0LnRhZyxyLm9iamVjdFRhZ10pLHJ9cmV0dXJu
KDAsbi5pbmhlcml0cykocixlKSxyLmNyZWF0ZT1mdW5jdGlvbihlKXt2YXIgbgotcmV0dXJuKDAs
by5pc0NvbnN0KShlKT8obj1lLnZhbHVlKCksKDAsaS5pc1Byb3h5KShuKT9uZXcgaChuLCJpc1Ry
dXRoeSIpOnQuUHJpbWl0aXZlUmVmZXJlbmNlLmNyZWF0ZSgoMCxzLmRlZmF1bHQpKG4pKSk6bmV3
IHIoZSl9LHIucHJvdG90eXBlLnRvQm9vbD1mdW5jdGlvbihlKXtyZXR1cm4oMCxpLmlzUHJveHkp
KGUpPyh0aGlzLm9iamVjdFRhZy51cGRhdGUoKDAsaS50YWdGb3JQcm9wZXJ0eSkoZSwiaXNUcnV0
aHkiKSksKDAsaS5nZXQpKGUsImlzVHJ1dGh5IikpOih0aGlzLm9iamVjdFRhZy51cGRhdGUoKDAs
aS50YWdGb3IpKGUpKSwoMCxzLmRlZmF1bHQpKGUpKX0scn0odC5Db25kaXRpb25hbFJlZmVyZW5j
ZSksZS5TaW1wbGVIZWxwZXJSZWZlcmVuY2U9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcih0LHIpe3Zh
ciBpPSgwLG4ucG9zc2libGVDb25zdHJ1Y3RvclJldHVybikodGhpcyxlLmNhbGwodGhpcykpCi1y
ZXR1cm4gaS50YWc9ci50YWcsaS5oZWxwZXI9dCxpLmFyZ3M9cixpfXJldHVybigwLG4uaW5oZXJp
dHMpKHIsZSksci5jcmVhdGU9ZnVuY3Rpb24oZSxuKXt2YXIgaSxzLGEsdSxsCi1yZXR1cm4oMCxv
LmlzQ29uc3QpKG4pPyhpPW4ucG9zaXRpb25hbCxzPW4ubmFtZWQsYT1pLnZhbHVlKCksdT1zLnZh
bHVlKCksbD1lKGEsdSksbnVsbD09PWw/dC5OVUxMX1JFRkVSRU5DRTp2b2lkIDA9PT1sP3QuVU5E
RUZJTkVEX1JFRkVSRU5DRToib2JqZWN0Ij09dHlwZW9mIGw/bmV3IHAobCk6dC5QcmltaXRpdmVS
ZWZlcmVuY2UuY3JlYXRlKGwpKTpuZXcgcihlLG4pfSxyLnByb3RvdHlwZS5jb21wdXRlPWZ1bmN0
aW9uKCl7dmFyIGU9dGhpcy5oZWxwZXIsdD10aGlzLmFyZ3Msbj10LnBvc2l0aW9uYWwscj10Lm5h
bWVkCi1yZXR1cm4gZShuLnZhbHVlKCksci52YWx1ZSgpKX0scn0oYyksZS5DbGFzc0Jhc2VkSGVs
cGVyUmVmZXJlbmNlPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCxyKXt2YXIgaT0oMCxuLnBvc3Np
YmxlQ29uc3RydWN0b3JSZXR1cm4pKHRoaXMsZS5jYWxsKHRoaXMpKQotcmV0dXJuIGkudGFnPSgw
LG8uY29tYmluZSkoW3RbYS5SRUNPTVBVVEVfVEFHXSxyLnRhZ10pLGkuaW5zdGFuY2U9dCxpLmFy
Z3M9cixpfXJldHVybigwLG4uaW5oZXJpdHMpKHQsZSksdC5jcmVhdGU9ZnVuY3Rpb24oZSxuLHIp
e3ZhciBpPWUuY3JlYXRlKCkKLXJldHVybiBuLm5ld0Rlc3Ryb3lhYmxlKGkpLG5ldyB0KGkscil9
LHQucHJvdG90eXBlLmNvbXB1dGU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmluc3RhbmNlLHQ9dGhp
cy5hcmdzLG49dC5wb3NpdGlvbmFsLHI9dC5uYW1lZCxpPW4udmFsdWUoKSxvPXIudmFsdWUoKQot
cmV0dXJuIGUuY29tcHV0ZShpLG8pfSx0fShjKSxlLkludGVybmFsSGVscGVyUmVmZXJlbmNlPWZ1
bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCxyKXt2YXIgaT0oMCxuLnBvc3NpYmxlQ29uc3RydWN0b3JS
ZXR1cm4pKHRoaXMsZS5jYWxsKHRoaXMpKQotcmV0dXJuIGkudGFnPXIudGFnLGkuaGVscGVyPXQs
aS5hcmdzPXIsaX1yZXR1cm4oMCxuLmluaGVyaXRzKSh0LGUpLHQucHJvdG90eXBlLmNvbXB1dGU9
ZnVuY3Rpb24oKXtyZXR1cm4oMCx0aGlzLmhlbHBlcikodGhpcy5hcmdzKX0sdH0oYyksZS5VbmJv
dW5kUmVmZXJlbmNlPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoKXtyZXR1cm4oMCxuLnBvc3NpYmxl
Q29uc3RydWN0b3JSZXR1cm4pKHRoaXMsZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXJldHVybigw
LG4uaW5oZXJpdHMpKHIsZSksci5jcmVhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PT1lP3Qu
TlVMTF9SRUZFUkVOQ0U6dm9pZCAwPT09ZT90LlVOREVGSU5FRF9SRUZFUkVOQ0U6Im9iamVjdCI9
PXR5cGVvZiBlP25ldyByKGUpOnQuUHJpbWl0aXZlUmVmZXJlbmNlLmNyZWF0ZShlKX0sci5wcm90
b3R5cGUuZ2V0PWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgcigoMCxpLmdldCkodGhpcy5pbm5lcixl
KSl9LHJ9KG8uQ29uc3RSZWZlcmVuY2UpfSksZSgiZW1iZXItZ2xpbW1lci91dGlscy9zdHJpbmci
LFsiZXhwb3J0cyIsImVtYmVyLWRlYnVnIl0sZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCIKLWZ1
bmN0aW9uIG4oZSl7cmV0dXJuIGlbZV19ZS5TYWZlU3RyaW5nPXZvaWQgMCxlLmdldFNhZmVTdHJp
bmc9ZnVuY3Rpb24oKXtyZXR1cm4gcn0sZS5lc2NhcGVFeHByZXNzaW9uPWZ1bmN0aW9uKGUpe2lm
KCJzdHJpbmciIT10eXBlb2YgZSl7aWYoZSYmZS50b0hUTUwpcmV0dXJuIGUudG9IVE1MKCkKLWlm
KG51bGw9PWUpcmV0dXJuIiIKLWlmKCFlKXJldHVybiBlKyIiCi1lPSIiK2V9cmV0dXJuIG8udGVz
dChlKT9lLnJlcGxhY2UocyxuKTplfSxlLmh0bWxTYWZlPWZ1bmN0aW9uKGUpe3JldHVybiBudWxs
PT09ZXx8dm9pZCAwPT09ZT9lPSIiOiJzdHJpbmciIT10eXBlb2YgZSYmKGU9IiIrZSksbmV3IHIo
ZSl9LGUuaXNIVE1MU2FmZT1mdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9m
IGUudG9IVE1MfQotdmFyIHI9ZS5TYWZlU3RyaW5nPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0
aGlzLnN0cmluZz1lfXJldHVybiBlLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVy
biIiK3RoaXMuc3RyaW5nfSxlLnByb3RvdHlwZS50b0hUTUw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhp
cy50b1N0cmluZygpfSxlfSgpLGk9eyImIjoiJmFtcDsiLCI8IjoiJmx0OyIsIj4iOiImZ3Q7Iiwn
Iic6IiZxdW90OyIsIiciOiImI3gyNzsiLCJgIjoiJiN4NjA7IiwiPSI6IiYjeDNEOyJ9LG89L1sm
PD4iJ2A9XS8scz0vWyY8PiInYD1dL2d9KSxlKCJlbWJlci1nbGltbWVyL3V0aWxzL3RvLWJvb2wi
LFsiZXhwb3J0cyIsImVtYmVyLXJ1bnRpbWUiLCJlbWJlci1tZXRhbCJdLGZ1bmN0aW9uKGUsdCxu
KXsidXNlIHN0cmljdCIKLWUuZGVmYXVsdD1mdW5jdGlvbihlKXtyZXR1cm4hIWUmJighMD09PWV8
fCghKDAsdC5pc0FycmF5KShlKXx8MCE9PSgwLG4uZ2V0KShlLCJsZW5ndGgiKSkpfX0pLGUoImVt
YmVyLWdsaW1tZXIvdmlld3Mvb3V0bGV0IixbImV4cG9ydHMiLCJlbWJlci1iYWJlbCIsImVtYmVy
LXV0aWxzIiwiQGdsaW1tZXIvcmVmZXJlbmNlIiwiZW1iZXItZW52aXJvbm1lbnQiLCJlbWJlci1t
ZXRhbCJdLGZ1bmN0aW9uKGUsdCxuLHIsaSxvKXsidXNlIHN0cmljdCIKLXZhciBzPWZ1bmN0aW9u
KCl7ZnVuY3Rpb24gZShlKXt0aGlzLm91dGxldFZpZXc9ZSx0aGlzLnRhZz1lLl90YWd9cmV0dXJu
IGUucHJvdG90eXBlLmdldD1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IHUodGhpcyxlKX0sZS5wcm90
b3R5cGUudmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vdXRsZXRWaWV3Lm91dGxldFN0YXRl
fSxlLnByb3RvdHlwZS5nZXRPcnBoYW49ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBhKHRoaXMsZSl9
LGUucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihlKXt0aGlzLm91dGxldFZpZXcuc2V0T3V0bGV0
U3RhdGUoZSl9LGV9KCksYT1mdW5jdGlvbihlKXtmdW5jdGlvbiBuKG4scil7dmFyIGk9KDAsdC5w
b3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKSh0aGlzLGUuY2FsbCh0aGlzLG4ub3V0bGV0Vmlldykp
Ci1yZXR1cm4gaS5yb290PW4saS5uYW1lPXIsaX1yZXR1cm4oMCx0LmluaGVyaXRzKShuLGUpLG4u
cHJvdG90eXBlLnZhbHVlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5yb290LnZhbHVlKCksdD1lLm91
dGxldHMubWFpbi5vdXRsZXRzLl9fZW1iZXJfb3JwaGFuc19fCi1pZighdClyZXR1cm4gbnVsbAot
dmFyIG49dC5vdXRsZXRzW3RoaXMubmFtZV0KLWlmKCFuKXJldHVybiBudWxsCi12YXIgcj1PYmpl
Y3QuY3JlYXRlKG51bGwpCi1yZXR1cm4gcltuLnJlbmRlci5vdXRsZXRdPW4sbi53YXNVc2VkPSEw
LHtvdXRsZXRzOnJ9fSxufShzKSx1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMucGFy
ZW50PWUsdGhpcy5rZXk9dCx0aGlzLnRhZz1lLnRhZ31yZXR1cm4gZS5wcm90b3R5cGUuZ2V0PWZ1
bmN0aW9uKHQpe3JldHVybiBuZXcgZSh0aGlzLHQpfSxlLnByb3RvdHlwZS52YWx1ZT1mdW5jdGlv
bigpe3JldHVybiB0aGlzLnBhcmVudC52YWx1ZSgpW3RoaXMua2V5XX0sZX0oKSxsPWZ1bmN0aW9u
KCl7ZnVuY3Rpb24gZShlLHQsbixpKXt0aGlzLl9lbnZpcm9ubWVudD1lLHRoaXMucmVuZGVyZXI9
dCx0aGlzLm93bmVyPW4sdGhpcy50ZW1wbGF0ZT1pLHRoaXMub3V0bGV0U3RhdGU9bnVsbCx0aGlz
Ll90YWc9bmV3IHIuRGlydHlhYmxlVGFnfXJldHVybiBlLmV4dGVuZD1mdW5jdGlvbihyKXtyZXR1
cm4gZnVuY3Rpb24oZSl7ZnVuY3Rpb24gaSgpe3JldHVybigwLHQucG9zc2libGVDb25zdHJ1Y3Rv
clJldHVybikodGhpcyxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9cmV0dXJuKDAsdC5pbmhlcml0
cykoaSxlKSxpLmNyZWF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdD9lLmNyZWF0ZS5jYWxsKHRoaXMs
KDAsbi5hc3NpZ24pKHt9LHIsdCkpOmUuY3JlYXRlLmNhbGwodGhpcyxyKX0saX0oZSl9LGUucmVv
cGVuQ2xhc3M9ZnVuY3Rpb24oZSl7KDAsbi5hc3NpZ24pKHRoaXMsZSl9LGUuY3JlYXRlPWZ1bmN0
aW9uKHQpe3ZhciByPXQuX2Vudmlyb25tZW50LGk9dC5yZW5kZXJlcixvPXQudGVtcGxhdGUKLXJl
dHVybiBuZXcgZShyLGksdFtuLk9XTkVSXSxvKX0sZS5wcm90b3R5cGUuYXBwZW5kVG89ZnVuY3Rp
b24oZSl7dmFyIHQ9dGhpcy5fZW52aXJvbm1lbnR8fGkuZW52aXJvbm1lbnQsbj12b2lkIDAKLW49
dC5oYXNET00mJiJzdHJpbmciPT10eXBlb2YgZT9kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGUpOmUs
by5ydW4uc2NoZWR1bGUoInJlbmRlciIsdGhpcy5yZW5kZXJlciwiYXBwZW5kT3V0bGV0VmlldyIs
dGhpcyxuKX0sZS5wcm90b3R5cGUucmVyZW5kZXI9ZnVuY3Rpb24oKXt9LGUucHJvdG90eXBlLnNl
dE91dGxldFN0YXRlPWZ1bmN0aW9uKGUpe3RoaXMub3V0bGV0U3RhdGU9e291dGxldHM6e21haW46
ZX0scmVuZGVyOntvd25lcjp2b2lkIDAsaW50bzp2b2lkIDAsb3V0bGV0OiJtYWluIixuYW1lOiIt
dG9wLWxldmVsIixjb250cm9sbGVyOnZvaWQgMCxWaWV3Q2xhc3M6dm9pZCAwLHRlbXBsYXRlOnZv
aWQgMH19LHRoaXMuX3RhZy5kaXJ0eSgpfSxlLnByb3RvdHlwZS50b1JlZmVyZW5jZT1mdW5jdGlv
bigpe3JldHVybiBuZXcgcyh0aGlzKX0sZS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe30s
ZX0oKQotZS5kZWZhdWx0PWx9KSxlKCJlbWJlci1tZXRhbCIsWyJleHBvcnRzIiwiZW1iZXItZW52
aXJvbm1lbnQiLCJlbWJlci11dGlscyIsImVtYmVyLWRlYnVnIiwiZW1iZXItYmFiZWwiLCJAZ2xp
bW1lci9yZWZlcmVuY2UiLCJyZXF1aXJlIiwiZW1iZXItY29uc29sZSIsImJhY2tidXJuZXIiXSxm
dW5jdGlvbihlLHQsbixyLGksbyxzLGEsdSl7InVzZSBzdHJpY3QiCi1mdW5jdGlvbiBsKGUsdCxu
KXt2YXIgcixpPXRbbisxXSxvPXRbbisyXQotZm9yKHI9MDtyPGUubGVuZ3RoLTI7cis9MylpZihl
W3JdPT09aSYmZVtyKzFdPT09bylyZXR1cm4KLWUucHVzaChpLG8sdFtuKzNdKX1mdW5jdGlvbiBj
KGUsdCxuKXt2YXIgcixpPS0xCi1mb3Iocj1lLmxlbmd0aC0zO3I+PTA7ci09MylpZih0PT09ZVty
XSYmbj09PWVbcisxXSl7aT1yCi1icmVha31yZXR1cm4gaX1mdW5jdGlvbiBwKHQsbixyKXt2YXIg
aSxvLHMsYSx1PWUucGVla01ldGEodCkKLWlmKHUpe3ZhciBsPXUubWF0Y2hpbmdMaXN0ZW5lcnMo
bikKLWlmKHZvaWQgMCE9PWwpe3ZhciBwPVtdCi1mb3IoaT1sLmxlbmd0aC0zO2k+PTA7aS09Mylv
PWxbaV0scz1sW2krMV0sYT1sW2krMl0sLTE9PT1jKHIsbyxzKSYmKHIucHVzaChvLHMsYSkscC5w
dXNoKG8scyxhKSkKLXJldHVybiBwfX19ZnVuY3Rpb24gZihlLHQsbixyLGkpe3J8fCJmdW5jdGlv
biIhPXR5cGVvZiBufHwocj1uLG49bnVsbCkKLXZhciBvPTAKLWkmJihvfD1DdCksaWUoZSkuYWRk
VG9MaXN0ZW5lcnModCxuLHIsbyksImZ1bmN0aW9uIj09dHlwZW9mIGUuZGlkQWRkTGlzdGVuZXIm
JmUuZGlkQWRkTGlzdGVuZXIodCxuLHIpfWZ1bmN0aW9uIGgoZSx0LG4scil7cnx8ImZ1bmN0aW9u
IiE9dHlwZW9mIG58fChyPW4sbj1udWxsKSxpZShlKS5yZW1vdmVGcm9tTGlzdGVuZXJzKHQsbixy
LGZ1bmN0aW9uKCl7ImZ1bmN0aW9uIj09dHlwZW9mIGUuZGlkUmVtb3ZlTGlzdGVuZXImJmUuZGlk
UmVtb3ZlTGlzdGVuZXIuYXBwbHkoZSxhcmd1bWVudHMpfSl9ZnVuY3Rpb24gZChlLHQsbixyLGkp
e3JldHVybiBtKGUsW3RdLG4scixpKX1mdW5jdGlvbiBtKGUsdCxuLHIsaSl7cmV0dXJuIHJ8fCJm
dW5jdGlvbiIhPXR5cGVvZiBufHwocj1uLG49bnVsbCksaWUoZSkuc3VzcGVuZExpc3RlbmVycyh0
LG4scixpKX1mdW5jdGlvbiBnKHQscixpLG8scyl7dmFyIGEsdSxsLGMscAotaWYodm9pZCAwPT09
byYmKGE9c3x8ZS5wZWVrTWV0YSh0KSxvPSJvYmplY3QiPT10eXBlb2YgYSYmbnVsbCE9PWEmJmEu
bWF0Y2hpbmdMaXN0ZW5lcnMocikpLHZvaWQgMCE9PW8mJjAhPT1vLmxlbmd0aCl7Zm9yKHU9by5s
ZW5ndGgtMzt1Pj0wO3UtPTMpbD1vW3VdLGM9b1t1KzFdLHA9b1t1KzJdLGMmJihwJk90fHwocCZD
dCYmaCh0LHIsbCxjKSxsfHwobD10KSwic3RyaW5nIj09dHlwZW9mIGM/aT9uLmFwcGx5U3RyKGws
YyxpKTpsW2NdKCk6aT9jLmFwcGx5KGwsaSk6Yy5jYWxsKGwpKSkKLXJldHVybiEwfX1mdW5jdGlv
biB5KHQsbil7dmFyIHIsaSxvLHM9W10sYT1lLnBlZWtNZXRhKHQpLHU9YSYmYS5tYXRjaGluZ0xp
c3RlbmVycyhuKQotaWYoIXUpcmV0dXJuIHMKLWZvcihyPTA7cjx1Lmxlbmd0aDtyKz0zKWk9dVty
XSxvPXVbcisxXSxzLnB1c2goW2ksb10pCi1yZXR1cm4gc31mdW5jdGlvbiB2KCl7cmV0dXJuIG5l
dyBvLkRpcnR5YWJsZVRhZ31mdW5jdGlvbiBiKGUsdCl7dmFyIG4KLXJldHVybiJvYmplY3QiPT10
eXBlb2YgZSYmZT8obj10fHxpZShlKSxuLndyaXRhYmxlVGFnKHYpKTpvLkNPTlNUQU5UX1RBR31m
dW5jdGlvbiBfKGUsdCl7dmFyIG49ZS5yZWFkYWJsZVRhZygpCi1uJiZuLmRpcnR5KCkKLXZhciBy
PWUucmVhZGFibGVUYWdzKCksaT1yJiZyW3RdCi1pJiZpLmRpcnR5KCksImNvbnRlbnQiPT09dCYm
ZS5pc1Byb3h5KCkmJmUuZ2V0VGFnKCkuY29udGVudERpZENoYW5nZSgpLChufHxpKSYmRSgpfWZ1
bmN0aW9uIHcoKXt9ZnVuY3Rpb24gRSgpe1N0fHwoU3Q9RXQoImVtYmVyLW1ldGFsIikucnVuKSxU
dCgpJiYhU3QuYmFja2J1cm5lci5jdXJyZW50SW5zdGFuY2UmJlN0LnNjaGVkdWxlKCJhY3Rpb25z
Iix3KX1mdW5jdGlvbiB4KHQsbixyKXt2YXIgaT1yfHxlLnBlZWtNZXRhKHQpCi1pZighaXx8aS5p
c0luaXRpYWxpemVkKHQpKXt2YXIgbz1pJiZpLnBlZWtXYXRjaGluZyhuKT4wLHM9dFtuXSxhPW51
bGwhPT1zJiYib2JqZWN0Ij09dHlwZW9mIHMmJnMuaXNEZXNjcmlwdG9yP3M6dm9pZCAwCi1hJiZh
LndpbGxDaGFuZ2UmJmEud2lsbENoYW5nZSh0LG4pLG8mJihPKHQsbixpKSxTKHQsbixpKSxEKHQs
bixpKSl9fWZ1bmN0aW9uIEModCxuLHIpe3ZhciBpPXJ8fGUucGVla01ldGEodCksbz0hIWkKLWlm
KCFvfHxpLmlzSW5pdGlhbGl6ZWQodCkpe3ZhciBzPXRbbl0sYT1udWxsIT09cyYmIm9iamVjdCI9
PXR5cGVvZiBzJiZzLmlzRGVzY3JpcHRvcj9zOnZvaWQgMAotaWYoYSYmYS5kaWRDaGFuZ2UmJmEu
ZGlkQ2hhbmdlKHQsbiksbyYmaS5wZWVrV2F0Y2hpbmcobik+MCYmKGkuaGFzRGVwcyhuKSYmIWku
aXNTb3VyY2VEZXN0cm95aW5nKCkmJkEodCxuLGkpLFIodCxuLGkpLEwodCxuLGkpKSx0W2t0XSYm
dFtrdF0obiksbyl7aWYoaS5pc1NvdXJjZURlc3Ryb3lpbmcoKSlyZXR1cm4KLV8oaSxuKX19fWZ1
bmN0aW9uIE8oZSx0LG4pe3ZhciByLGkKLW4uaXNTb3VyY2VEZXN0cm95aW5nKCl8fG4uaGFzRGVw
cyh0KSYmKHI9RHQsaT0hcixpJiYocj1EdD17fSksVCh4LGUsdCxyLG4pLGkmJihEdD1udWxsKSl9
ZnVuY3Rpb24gQShlLHQsbil7dmFyIHI9THQsaT0hcgotaSYmKHI9THQ9e30pLFQoQyxlLHQscixu
KSxpJiYoTHQ9bnVsbCl9ZnVuY3Rpb24gVChlLHQscixpLG8pe3ZhciBzPXZvaWQgMCxhPXZvaWQg
MCx1PW4uZ3VpZEZvcih0KSxsPWlbdV0KLWx8fChsPWlbdV09e30pLGxbcl18fChsW3JdPSEwLG8u
Zm9yRWFjaEluRGVwcyhyLGZ1bmN0aW9uKG4scil7ciYmKHM9dFtuXSwoYT1udWxsIT09cyYmIm9i
amVjdCI9PXR5cGVvZiBzJiZzLmlzRGVzY3JpcHRvcj9zOnZvaWQgMCkmJmEuX3N1c3BlbmRlZD09
PXR8fGUodCxuLG8pKX0pKX1mdW5jdGlvbiBTKGUsdCxuKXt2YXIgcj1uLnJlYWRhYmxlQ2hhaW5X
YXRjaGVycygpCi1yJiZyLm5vdGlmeSh0LCExLHgpfWZ1bmN0aW9uIFIoZSx0LG4pe3ZhciByPW4u
cmVhZGFibGVDaGFpbldhdGNoZXJzKCkKLXImJnIubm90aWZ5KHQsITAsQyl9ZnVuY3Rpb24gayhl
LHQsbil7dmFyIHI9bi5yZWFkYWJsZUNoYWluV2F0Y2hlcnMoKQotciYmci5yZXZhbGlkYXRlKHQp
fWZ1bmN0aW9uIE4oKXtqdCsrfWZ1bmN0aW9uIFAoKXstLWp0PD0wJiYoTnQuY2xlYXIoKSxQdC5m
bHVzaCgpKX1mdW5jdGlvbiBqKGUsdCl7TigpCi10cnl7ZS5jYWxsKHQpfWZpbmFsbHl7UC5jYWxs
KHQpfX1mdW5jdGlvbiBEKGUsdCxuKXtpZighbi5pc1NvdXJjZURlc3Ryb3lpbmcoKSl7dmFyIHI9
dCsiOmJlZm9yZSIsaT12b2lkIDAsbz12b2lkIDAKLWp0PyhpPU50LmFkZChlLHQsciksbz1wKGUs
cixpKSxnKGUscixbZSx0XSxvKSk6ZyhlLHIsW2UsdF0pfX1mdW5jdGlvbiBMKGUsdCxuKXtpZigh
bi5pc1NvdXJjZURlc3Ryb3lpbmcoKSl7dmFyIHI9dCsiOmNoYW5nZSIsaT12b2lkIDAKLWp0Pyhp
PVB0LmFkZChlLHQscikscChlLHIsaSkpOmcoZSxyLFtlLHRdKX19ZnVuY3Rpb24gSSgpe3RoaXMu
aXNEZXNjcmlwdG9yPSEwfWZ1bmN0aW9uIE0oZSx0LG4scixpKXtpfHwoaT1pZShlKSkKLXZhciBv
PWkucGVla1dhdGNoaW5nKHQpLHM9ZVt0XSxhPW51bGwhPT1zJiYib2JqZWN0Ij09dHlwZW9mIHMm
JnMuaXNEZXNjcmlwdG9yP3M6dm9pZCAwLHU9dm9pZCAwIT09byYmbz4wCi1hJiZhLnRlYXJkb3du
KGUsdCkKLXZhciBsPXZvaWQgMAotcmV0dXJuIG4gaW5zdGFuY2VvZiBJPyhsPW4sZVt0XT1sLEYo
ZS5jb25zdHJ1Y3RvciksImZ1bmN0aW9uIj09dHlwZW9mIG4uc2V0dXAmJm4uc2V0dXAoZSx0KSk6
bnVsbD09bj8obD1yLGVbdF09cik6KGw9bixPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LG4pKSx1
JiZrKGUsdCxpKSwiZnVuY3Rpb24iPT10eXBlb2YgZS5kaWREZWZpbmVQcm9wZXJ0eSYmZS5kaWRE
ZWZpbmVQcm9wZXJ0eShlLHQsbCksdGhpc31mdW5jdGlvbiBGKGUpe2lmKCExIT09SXQpe3ZhciB0
PWllKGUpLnJlYWRhYmxlQ2FjaGUoKQotdCYmdm9pZCAwIT09dC5fY29tcHV0ZWRQcm9wZXJ0aWVz
JiYodC5fY29tcHV0ZWRQcm9wZXJ0aWVzPXZvaWQgMCl9fWZ1bmN0aW9uIHooZSx0LG4pe2lmKCJv
YmplY3QiPT10eXBlb2YgZSYmbnVsbCE9PWUpe3ZhciByLGksbz1ufHxpZShlKQotby5wZWVrV2F0
Y2hpbmcodCk/by53cml0ZVdhdGNoaW5nKHQsKG8ucGVla1dhdGNoaW5nKHQpfHwwKSsxKTooby53
cml0ZVdhdGNoaW5nKHQsMSkscj1lW3RdLGk9bnVsbCE9PXImJiJvYmplY3QiPT10eXBlb2YgciYm
ci5pc0Rlc2NyaXB0b3I/cjp2b2lkIDAsaSYmaS53aWxsV2F0Y2gmJmkud2lsbFdhdGNoKGUsdCks
ImZ1bmN0aW9uIj09dHlwZW9mIGUud2lsbFdhdGNoUHJvcGVydHkmJmUud2lsbFdhdGNoUHJvcGVy
dHkodCkpfX1mdW5jdGlvbiBVKGUsdCxuKXtpZigib2JqZWN0Ij09dHlwZW9mIGUmJm51bGwhPT1l
KXt2YXIgcixpLG89bnx8aWUoZSkKLWlmKCFvLmlzU291cmNlRGVzdHJveWVkKCkpe3ZhciBzPW8u
cGVla1dhdGNoaW5nKHQpCi0xPT09cz8oby53cml0ZVdhdGNoaW5nKHQsMCkscj1lW3RdLGk9bnVs
bCE9PXImJiJvYmplY3QiPT10eXBlb2YgciYmci5pc0Rlc2NyaXB0b3I/cjp2b2lkIDAsaSYmaS5k
aWRVbndhdGNoJiZpLmRpZFVud2F0Y2goZSx0KSwiZnVuY3Rpb24iPT10eXBlb2YgZS5kaWRVbndh
dGNoUHJvcGVydHkmJmUuZGlkVW53YXRjaFByb3BlcnR5KHQpKTpzPjEmJm8ud3JpdGVXYXRjaGlu
Zyh0LHMtMSl9fX1mdW5jdGlvbiBCKGUsdCl7cmV0dXJuKHR8fGllKGUpKS53cml0YWJsZUNoYWlu
cyhxKX1mdW5jdGlvbiBxKGUpe3JldHVybiBuZXcgenQobnVsbCxudWxsLGUpfWZ1bmN0aW9uIEgo
ZSx0LG4pe2lmKCJvYmplY3QiPT10eXBlb2YgZSYmbnVsbCE9PWUpe3ZhciByPW58fGllKGUpLGk9
ci5wZWVrV2F0Y2hpbmcodCl8fDAKLWk/ci53cml0ZVdhdGNoaW5nKHQsaSsxKTooci53cml0ZVdh
dGNoaW5nKHQsMSksQihlLHIpLmFkZCh0KSl9fWZ1bmN0aW9uIFYoZSx0LG4pe2lmKCJvYmplY3Qi
PT10eXBlb2YgZSYmbnVsbCE9PWUpe3ZhciByPW58fGllKGUpLGk9ci5wZWVrV2F0Y2hpbmcodCl8
fDAKLTE9PT1pPyhyLndyaXRlV2F0Y2hpbmcodCwwKSxCKGUscikucmVtb3ZlKHQpKTppPjEmJnIu
d3JpdGVXYXRjaGluZyh0LGktMSl9fWZ1bmN0aW9uIFcoZSl7cmV0dXJuIGUubWF0Y2goTXQpWzBd
fWZ1bmN0aW9uICQoZSl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBlJiZlfWZ1bmN0aW9uIEcoZSl7
cmV0dXJuISgkKGUpJiZlLmlzRGVzY3JpcHRvciYmITE9PT1lLl92b2xhdGlsZSl9ZnVuY3Rpb24g
Sygpe3JldHVybiBuZXcgRnR9ZnVuY3Rpb24gUShlLHQsbil7dmFyIHI9aWUoZSkKLXIud3JpdGFi
bGVDaGFpbldhdGNoZXJzKEspLmFkZCh0LG4pLHooZSx0LHIpfWZ1bmN0aW9uIFkodCxuLHIsaSl7
aWYoJCh0KSl7dmFyIG89aXx8ZS5wZWVrTWV0YSh0KQotbyYmby5yZWFkYWJsZUNoYWluV2F0Y2hl
cnMoKSYmKG89aWUodCksby5yZWFkYWJsZUNoYWluV2F0Y2hlcnMoKS5yZW1vdmUobixyKSxVKHQs
bixvKSl9fWZ1bmN0aW9uIEoodCxuKXtpZigkKHQpKXt2YXIgcixpPWUucGVla01ldGEodCkKLWlm
KHZvaWQgMD09PWl8fGkucHJvdG8hPT10KXJldHVybiEwPT09Ryh0W25dKT9sZSh0LG4pOihyPWku
cmVhZGFibGVDYWNoZSgpKT9FZS5nZXQocixuKTp2b2lkIDB9fWZ1bmN0aW9uIFgoZSx0KXt2YXIg
bj10ZShlKSxyPW5lKGUpCi10LnByb3RvdHlwZVsid3JpdGFibGUiK3JdPWZ1bmN0aW9uKCl7cmV0
dXJuIHRoaXMuX2dldE9yQ3JlYXRlT3duTWFwKG4pfSx0LnByb3RvdHlwZVsicmVhZGFibGUiK3Jd
PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbbl19fWZ1bmN0aW9uIFooZSx0KXt2YXIgbj10ZShlKSxy
PW5lKGUpCi10LnByb3RvdHlwZVsid3JpdGUiK3JdPWZ1bmN0aW9uKGUsdCl7dGhpcy5fZ2V0T3JD
cmVhdGVPd25NYXAobilbZV09dH0sdC5wcm90b3R5cGVbInBlZWsiK3JdPWZ1bmN0aW9uKGUpe3Jl
dHVybiB0aGlzLl9maW5kSW5oZXJpdGVkKG4sZSl9LHQucHJvdG90eXBlWyJmb3JFYWNoIityXT1m
dW5jdGlvbihlKXtmb3IodmFyIHQscj10aGlzLGk9dm9pZCAwO3ZvaWQgMCE9PXI7KXtpZih2b2lk
IDAhPT0odD1yW25dKSlmb3IodmFyIG8gaW4gdClpPWl8fE9iamVjdC5jcmVhdGUobnVsbCksdm9p
ZCAwPT09aVtvXSYmKGlbb109ITAsZShvLHRbb10pKQotcj1yLnBhcmVudH19LHQucHJvdG90eXBl
WyJjbGVhciIrcl09ZnVuY3Rpb24oKXt0aGlzW25dPXZvaWQgMH0sdC5wcm90b3R5cGVbImRlbGV0
ZUZyb20iK3JdPWZ1bmN0aW9uKGUpe2RlbGV0ZSB0aGlzLl9nZXRPckNyZWF0ZU93bk1hcChuKVtl
XX0sdC5wcm90b3R5cGVbImhhc0luIityXT1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwIT09dGhp
cy5fZmluZEluaGVyaXRlZChuLGUpfX1mdW5jdGlvbiBlZShlLHQpe3ZhciBuPXRlKGUpLHI9bmUo
ZSkKLXQucHJvdG90eXBlWyJ3cml0YWJsZSIrcl09ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpc1tuXQot
cmV0dXJuIHZvaWQgMD09PXQmJih0PXRoaXNbbl09ZSh0aGlzLnNvdXJjZSkpLHR9LHQucHJvdG90
eXBlWyJyZWFkYWJsZSIrcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tuXX19ZnVuY3Rpb24gdGUo
ZSl7cmV0dXJuIl8iK2V9ZnVuY3Rpb24gbmUoZSl7cmV0dXJuIGUucmVwbGFjZSgvXlx3LyxmdW5j
dGlvbihlKXtyZXR1cm4gZS50b1VwcGVyQ2FzZSgpfSl9ZnVuY3Rpb24gcmUodCl7dmFyIG49ZS5w
ZWVrTWV0YSh0KQotdm9pZCAwIT09biYmbi5kZXN0cm95KCl9ZnVuY3Rpb24gaWUodCl7dmFyIG49
ZS5wZWVrTWV0YSh0KSxyPXZvaWQgMAotaWYodm9pZCAwIT09bil7aWYobi5zb3VyY2U9PT10KXJl
dHVybiBuCi1yPW59dmFyIGk9bmV3IHF0KHQscikKLXJldHVybiBLdCh0LGkpLGl9ZnVuY3Rpb24g
b2UoZSl7cmV0dXJuIFp0LmdldChlKX1mdW5jdGlvbiBzZShlKXtyZXR1cm4tMSE9PWVuLmdldChl
KX1mdW5jdGlvbiBhZShlKXtyZXR1cm4gdG4uZ2V0KGUpfWZ1bmN0aW9uIHVlKGUpe3JldHVybiBu
bi5nZXQoZSl9ZnVuY3Rpb24gbGUoZSx0KXt2YXIgbj1lW3RdLHI9bnVsbCE9PW4mJiJvYmplY3Qi
PT10eXBlb2YgbiYmbi5pc0Rlc2NyaXB0b3I/bjp2b2lkIDAsaT12b2lkIDAKLXJldHVybiB2b2lk
IDA9PT1yJiZzZSh0KT9jZShlLHQpOnI/ci5nZXQoZSx0KTooaT1uLHZvaWQgMCE9PWl8fCJvYmpl
Y3QiIT10eXBlb2YgZXx8dCBpbiBlfHwiZnVuY3Rpb24iIT10eXBlb2YgZS51bmtub3duUHJvcGVy
dHk/aTplLnVua25vd25Qcm9wZXJ0eSh0KSl9ZnVuY3Rpb24gY2UoZSx0KXt2YXIgbixyPWUsaT10
LnNwbGl0KCIuIikKLWZvcihuPTA7bjxpLmxlbmd0aDtuKyspe2lmKCFwZShyKSlyZXR1cm4KLWlm
KChyPWxlKHIsaVtuXSkpJiZyLmlzRGVzdHJveWVkKXJldHVybn1yZXR1cm4gcn1mdW5jdGlvbiBw
ZShlKXtyZXR1cm4gbnVsbCE9ZSYmcm5bdHlwZW9mIGVdfWZ1bmN0aW9uIGZlKHQsbixyLGkpe2lm
KHNlKG4pKXJldHVybiBoZSh0LG4scixpKQotdmFyIG89ZS5wZWVrTWV0YSh0KSxzPXRbbl0sYT12
b2lkIDAsdT12b2lkIDAKLWlmKG51bGwhPT1zJiYib2JqZWN0Ij09dHlwZW9mIHMmJnMuaXNEZXNj
cmlwdG9yP2E9czp1PXMsYSlhLnNldCh0LG4scikKLWVsc2UgaWYoIXQuc2V0VW5rbm93blByb3Bl
cnR5fHx2b2lkIDAhPT11fHxuIGluIHQpe2lmKHU9PT1yKXJldHVybiByCi14KHQsbixvKSx0W25d
PXIsQyh0LG4sbyl9ZWxzZSB0LnNldFVua25vd25Qcm9wZXJ0eShuLHIpCi1yZXR1cm4gcn1mdW5j
dGlvbiBoZShlLHQsbixpKXt2YXIgbz10LnNsaWNlKHQubGFzdEluZGV4T2YoIi4iKSsxKQotaWYo
dD10PT09bz9vOnQuc2xpY2UoMCx0Lmxlbmd0aC0oby5sZW5ndGgrMSkpLCJ0aGlzIiE9PXQmJihl
PWNlKGUsdCkpLCFvfHwwPT09by5sZW5ndGgpdGhyb3cgbmV3IHIuRXJyb3IoIlByb3BlcnR5IHNl
dCBmYWlsZWQ6IFlvdSBwYXNzZWQgYW4gZW1wdHkgcGF0aCIpCi1pZighZSl7aWYoaSlyZXR1cm4K
LXRocm93IG5ldyByLkVycm9yKCdQcm9wZXJ0eSBzZXQgZmFpbGVkOiBvYmplY3QgaW4gcGF0aCAi
Jyt0KyciIGNvdWxkIG5vdCBiZSBmb3VuZCBvciB3YXMgZGVzdHJveWVkLicpfXJldHVybiBmZShl
LG8sbil9ZnVuY3Rpb24gZGUoZSx0LG4pe3JldHVybiBmZShlLHQsbiwhMCl9ZnVuY3Rpb24gbWUo
ZSx0KXt2YXIgbj1lLmluZGV4T2YoInsiKQotbjwwP3QoZS5yZXBsYWNlKG9uLCIuW10iKSk6Z2Uo
IiIsZSxuLHQpfWZ1bmN0aW9uIGdlKGUsdCxuLHIpe3ZhciBpPXQuaW5kZXhPZigifSIpLG89MCxz
PXZvaWQgMCxhPXZvaWQgMCx1PXQuc3Vic3RyaW5nKG4rMSxpKS5zcGxpdCgiLCIpLGw9dC5zdWJz
dHJpbmcoaSsxKQotZm9yKGUrPXQuc3Vic3RyaW5nKDAsbiksYT11Lmxlbmd0aDtvPGE7KXM9bC5p
bmRleE9mKCJ7IiksczwwP3IoKGUrdVtvKytdK2wpLnJlcGxhY2Uob24sIi5bXSIpKTpnZShlK3Vb
bysrXSxsLHMscil9ZnVuY3Rpb24geWUoZSx0LG4pe3NlKHQpP0goZSx0LG4pOnooZSx0LG4pfWZ1
bmN0aW9uIHZlKGUsdCxuKXtzZSh0KT9WKGUsdCxuKTpVKGUsdCxuKX1mdW5jdGlvbiBiZShlLHQs
bixyKXt2YXIgaT12b2lkIDAsbz12b2lkIDAscz1lLl9kZXBlbmRlbnRLZXlzCi1pZihzKWZvcihp
PTA7aTxzLmxlbmd0aDtpKyspbz1zW2ldLHIud3JpdGVEZXBzKG8sbiwoci5wZWVrRGVwcyhvLG4p
fHwwKSsxKSx5ZSh0LG8scil9ZnVuY3Rpb24gX2UoZSx0LG4scil7dmFyIGksbyxzPWUuX2RlcGVu
ZGVudEtleXMKLWlmKHMpZm9yKGk9MDtpPHMubGVuZ3RoO2krKylvPXNbaV0sci53cml0ZURlcHMo
byxuLChyLnBlZWtEZXBzKG8sbil8fDApLTEpLHZlKHQsbyxyKX1mdW5jdGlvbiB3ZShlLHQpe3Ro
aXMuaXNEZXNjcmlwdG9yPSEwLCJmdW5jdGlvbiI9PXR5cGVvZiBlP3RoaXMuX2dldHRlcj1lOih0
aGlzLl9nZXR0ZXI9ZS5nZXQsdGhpcy5fc2V0dGVyPWUuc2V0KSx0aGlzLl9kZXBlbmRlbnRLZXlz
PXZvaWQgMCx0aGlzLl9zdXNwZW5kZWQ9dm9pZCAwLHRoaXMuX21ldGE9dm9pZCAwLHRoaXMuX3Zv
bGF0aWxlPSExLHRoaXMuX2RlcGVuZGVudEtleXM9dCYmdC5kZXBlbmRlbnRLZXlzLHRoaXMuX3Jl
YWRPbmx5PSExfWZ1bmN0aW9uIEVlKHQsbil7dmFyIHI9ZS5wZWVrTWV0YSh0KSxpPXImJnIuc291
cmNlPT09dCYmci5yZWFkYWJsZUNhY2hlKCksbz1pJiZpW25dCi1pZihvIT09V3QpcmV0dXJuIG99
ZnVuY3Rpb24geGUoZSx0KXt0aHJvdyBuZXcgci5FcnJvcigiQ2Fubm90IHNldCByZWFkLW9ubHkg
cHJvcGVydHkgJyIrdCsiJyBvbiBvYmplY3Q6ICIrbi5pbnNwZWN0KGUpKX1mdW5jdGlvbiBDZShl
LHQsbil7cmV0dXJuIE0oZSx0LG51bGwpLGZlKGUsdCxuKX1mdW5jdGlvbiBPZShlKXt2YXIgdCxu
PVtdLHI9dm9pZCAwCi1mb3IodD0wO3Q8bG4ubGVuZ3RoO3QrKylyPWxuW3RdLHIucmVnZXgudGVz
dChlKSYmbi5wdXNoKHIub2JqZWN0KQotcmV0dXJuIGNuW2VdPW4sbn1mdW5jdGlvbiBBZShlLHQs
bixyKXt2YXIgaT12b2lkIDAKLXRyeXtpPWUuY2FsbChyKX1jYXRjaChlKXtuLmV4Y2VwdGlvbj1l
LGk9bn1maW5hbGx5e3QoKX1yZXR1cm4gaX1mdW5jdGlvbiBUZSgpe31mdW5jdGlvbiBTZShlLG4s
cil7aWYoMD09PWxuLmxlbmd0aClyZXR1cm4gVGUKLXZhciBpPWNuW2VdCi1pZihpfHwoaT1PZShl
KSksMD09PWkubGVuZ3RoKXJldHVybiBUZQotdmFyIG89bihyKSxzPXQuRU5WLlNUUlVDVFVSRURf
UFJPRklMRSxhPXZvaWQgMAotcyYmKGE9ZSsiOiAiK28ub2JqZWN0LGNvbnNvbGUudGltZShhKSkK
LXZhciB1PW5ldyBBcnJheShpLmxlbmd0aCksbD12b2lkIDAsYz12b2lkIDAscD1wbigpCi1mb3Io
bD0wO2w8aS5sZW5ndGg7bCsrKWM9aVtsXSx1W2xdPWMuYmVmb3JlKGUscCxvKQotcmV0dXJuIGZ1
bmN0aW9uKCl7dmFyIHQ9dm9pZCAwLG49dm9pZCAwLHI9cG4oKQotZm9yKHQ9MDt0PGkubGVuZ3Ro
O3QrKyluPWlbdF0sImZ1bmN0aW9uIj09dHlwZW9mIG4uYWZ0ZXImJm4uYWZ0ZXIoZSxyLG8sdVt0
XSkKLXMmJmNvbnNvbGUudGltZUVuZChhKX19ZnVuY3Rpb24gUmUoZSl7aG49ZX1mdW5jdGlvbiBr
ZShlKXtkbj9kbihlKTpOZShlKX1mdW5jdGlvbiBOZShlKXtpZihyLmlzVGVzdGluZygpKXRocm93
IGUKLWhuP2huKGUpOmEuZXJyb3IoZm4oZSkpfWZ1bmN0aW9uIFBlKGUpe3JldHVybiJvYmplY3Qi
PT10eXBlb2YgZSYmbnVsbCE9PWV8fCJmdW5jdGlvbiI9PXR5cGVvZiBlfWZ1bmN0aW9uIGplKGUp
e3ZhciB0LHIsaSxvCi1pZighKHRoaXMgaW5zdGFuY2VvZiBqZSkpdGhyb3cgbmV3IFR5cGVFcnJv
cigiQ29uc3RydWN0b3IgV2Vha01hcCByZXF1aXJlcyAnbmV3JyIpCi1pZih0aGlzLl9pZD1uLkdV
SURfS0VZK21uKyssbnVsbD09PWV8fHZvaWQgMD09PWUpO2Vsc2V7aWYoIUFycmF5LmlzQXJyYXko
ZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIHdlYWsgbWFwIGNvbnN0cnVjdG9yIHBvbHlmaWxs
IG9ubHkgc3VwcG9ydHMgYW4gYXJyYXkgYXJndW1lbnQiKQotZm9yKHQ9MDt0PGUubGVuZ3RoO3Qr
KylyPWVbdF0saT1yWzBdLG89clsxXSx0aGlzLnNldChpLG8pfX1mdW5jdGlvbiBEZShlKXtyZXR1
cm4gbnVsbD09PWV8fHZvaWQgMD09PWV9ZnVuY3Rpb24gTGUoZSl7dmFyIHQsbixyPURlKGUpCi1p
ZihyKXJldHVybiByCi1pZigibnVtYmVyIj09dHlwZW9mIGUuc2l6ZSlyZXR1cm4hZS5zaXplCi12
YXIgaT10eXBlb2YgZQotcmV0dXJuIm9iamVjdCI9PT1pJiYibnVtYmVyIj09dHlwZW9mKHQ9bGUo
ZSwic2l6ZSIpKT8hdDoibnVtYmVyIj09dHlwZW9mIGUubGVuZ3RoJiYiZnVuY3Rpb24iIT09aT8h
ZS5sZW5ndGg6Im9iamVjdCI9PT1pJiYibnVtYmVyIj09dHlwZW9mKG49bGUoZSwibGVuZ3RoIikp
JiYhbn1mdW5jdGlvbiBJZShlKXtyZXR1cm4gTGUoZSl8fCJzdHJpbmciPT10eXBlb2YgZSYmbnVs
bD09PWUubWF0Y2goL1xTLyl9ZnVuY3Rpb24gTWUoKXtyZXR1cm4geW4ucnVuLmFwcGx5KHluLGFy
Z3VtZW50cyl9ZnVuY3Rpb24gRmUoZSl7dGhyb3cgbmV3IFR5cGVFcnJvcihPYmplY3QucHJvdG90
eXBlLnRvU3RyaW5nLmNhbGwoZSkrIiBpcyBub3QgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIHplKGUp
e3Rocm93IG5ldyBUeXBlRXJyb3IoIkNvbnN0cnVjdG9yICIrZSsiIHJlcXVpcmVzICduZXcnIil9
ZnVuY3Rpb24gVWUoZSl7dmFyIHQ9T2JqZWN0LmNyZWF0ZShudWxsKQotZm9yKHZhciBuIGluIGUp
dFtuXT1lW25dCi1yZXR1cm4gdH1mdW5jdGlvbiBCZShlLHQpe3ZhciBuPWUuX2tleXMuY29weSgp
LHI9VWUoZS5fdmFsdWVzKQotcmV0dXJuIHQuX2tleXM9bix0Ll92YWx1ZXM9cix0LnNpemU9ZS5z
aXplLHR9ZnVuY3Rpb24gcWUoKXt0aGlzIGluc3RhbmNlb2YgcWU/dGhpcy5jbGVhcigpOnplKCJP
cmRlcmVkU2V0Iil9ZnVuY3Rpb24gSGUoKXt0aGlzIGluc3RhbmNlb2YgSGU/KHRoaXMuX2tleXM9
cWUuY3JlYXRlKCksdGhpcy5fdmFsdWVzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5zaXplPTAp
OnplKCJNYXAiKX1mdW5jdGlvbiBWZShlKXt0aGlzLl9zdXBlciRjb25zdHJ1Y3RvcigpLHRoaXMu
ZGVmYXVsdFZhbHVlPWUuZGVmYXVsdFZhbHVlfWZ1bmN0aW9uIFdlKGUpe3JldHVybiBlKyI6Y2hh
bmdlIn1mdW5jdGlvbiAkZShlKXtyZXR1cm4gZSsiOmJlZm9yZSJ9ZnVuY3Rpb24gR2UoZSx0LG4s
cil7cmV0dXJuIGYoZSxXZSh0KSxuLHIpLHllKGUsdCksdGhpc31mdW5jdGlvbiBLZShlLHQsbixy
KXtyZXR1cm4gdmUoZSx0KSxoKGUsV2UodCksbixyKSx0aGlzfWZ1bmN0aW9uIFFlKGUsdCxuLHIp
e3JldHVybiBmKGUsJGUodCksbixyKSx5ZShlLHQpLHRoaXN9ZnVuY3Rpb24gWWUoZSx0LG4scixp
KXtyZXR1cm4gZChlLFdlKHQpLG4scixpKX1mdW5jdGlvbiBKZShlLHQsbixyKXtyZXR1cm4gdmUo
ZSx0KSxoKGUsJGUodCksbixyKSx0aGlzfWZ1bmN0aW9uIFhlKGUpe3JldHVybiJmdW5jdGlvbiI9
PXR5cGVvZiBlJiYhMSE9PWUuaXNNZXRob2QmJmUhPT1Cb29sZWFuJiZlIT09T2JqZWN0JiZlIT09
TnVtYmVyJiZlIT09QXJyYXkmJmUhPT1EYXRlJiZlIT09U3RyaW5nfWZ1bmN0aW9uIFplKGUsdCl7
dmFyIHI9dm9pZCAwCi1yZXR1cm4gdCBpbnN0YW5jZW9mIENuPyhyPW4uZ3VpZEZvcih0KSxlLnBl
ZWtNaXhpbnMocik/eG46KGUud3JpdGVNaXhpbnMocix0KSx0LnByb3BlcnRpZXMpKTp0fWZ1bmN0
aW9uIGV0KGUsdCxuLHIpe3ZhciBpPW5bZV18fHJbZV0KLXJldHVybiB0W2VdJiYoaT1pP3duLmNh
bGwoaSx0W2VdKTp0W2VdKSxpfWZ1bmN0aW9uIHR0KGUsdCxyLGksbyxzKXt2YXIgYSx1LGw9dm9p
ZCAwCi1yZXR1cm4gdm9pZCAwPT09aVt0XSYmKGw9b1t0XSksbHx8KGE9c1t0XSx1PW51bGwhPT1h
JiYib2JqZWN0Ij09dHlwZW9mIGEmJmEuaXNEZXNjcmlwdG9yP2E6dm9pZCAwLGw9dSksdm9pZCAw
IT09bCYmbCBpbnN0YW5jZW9mIHdlPyhyPU9iamVjdC5jcmVhdGUociksci5fZ2V0dGVyPW4ud3Jh
cChyLl9nZXR0ZXIsbC5fZ2V0dGVyKSxsLl9zZXR0ZXImJihyLl9zZXR0ZXI/ci5fc2V0dGVyPW4u
d3JhcChyLl9zZXR0ZXIsbC5fc2V0dGVyKTpyLl9zZXR0ZXI9bC5fc2V0dGVyKSxyKTpyfWZ1bmN0
aW9uIG50KGUsdCxyLGksbyl7dmFyIHM9dm9pZCAwCi1yZXR1cm4gdm9pZCAwPT09b1t0XSYmKHM9
aVt0XSkscz1zfHxlW3RdLHZvaWQgMD09PXN8fCJmdW5jdGlvbiIhPXR5cGVvZiBzP3I6bi53cmFw
KHIscyl9ZnVuY3Rpb24gcnQoZSx0LHIsaSl7dmFyIG89aVt0XXx8ZVt0XQotcmV0dXJuIG51bGw9
PT1vfHx2b2lkIDA9PT1vP24ubWFrZUFycmF5KHIpOkVuKG8pP251bGw9PT1yfHx2b2lkIDA9PT1y
P286d24uY2FsbChvLHIpOnduLmNhbGwobi5tYWtlQXJyYXkobykscil9ZnVuY3Rpb24gaXQoZSx0
LHIsaSl7dmFyIG8scz1pW3RdfHxlW3RdCi1pZighcylyZXR1cm4gcgotdmFyIGE9bi5hc3NpZ24o
e30scyksdT0hMQotZm9yKHZhciBsIGluIHIpci5oYXNPd25Qcm9wZXJ0eShsKSYmKG89cltsXSxY
ZShvKT8odT0hMCxhW2xdPW50KGUsbCxvLHMse30pKTphW2xdPW8pCi1yZXR1cm4gdSYmKGEuX3N1
cGVyPW4uUk9PVCksYX1mdW5jdGlvbiBvdChlLHQsbixyLGksbyxzLGEpe2lmKG4gaW5zdGFuY2Vv
ZiBJKXtpZihuPT09VG4mJmlbdF0pcmV0dXJuIHhuCi1uLl9nZXR0ZXImJihuPXR0KHIsdCxuLG8s
aSxlKSksaVt0XT1uLG9bdF09dm9pZCAwfWVsc2UgcyYmcy5pbmRleE9mKHQpPj0wfHwiY29uY2F0
ZW5hdGVkUHJvcGVydGllcyI9PT10fHwibWVyZ2VkUHJvcGVydGllcyI9PT10P249cnQoZSx0LG4s
byk6YSYmYS5pbmRleE9mKHQpPj0wP249aXQoZSx0LG4sbyk6WGUobikmJihuPW50KGUsdCxuLG8s
aSkpLGlbdF09dm9pZCAwLG9bdF09bn1mdW5jdGlvbiBzdChlLHQsbixyLGksbyl7ZnVuY3Rpb24g
cyhlKXtkZWxldGUgbltlXSxkZWxldGUgcltlXX12YXIgYSx1PXZvaWQgMCxsPXZvaWQgMCxjPXZv
aWQgMCxwPXZvaWQgMCxmPXZvaWQgMAotZm9yKGE9MDthPGUubGVuZ3RoO2ErKylpZih1PWVbYV0s
KGw9WmUodCx1KSkhPT14bilpZihsKXtpLndpbGxNZXJnZU1peGluJiZpLndpbGxNZXJnZU1peGlu
KGwpLHA9ZXQoImNvbmNhdGVuYXRlZFByb3BlcnRpZXMiLGwscixpKSxmPWV0KCJtZXJnZWRQcm9w
ZXJ0aWVzIixsLHIsaSkKLWZvcihjIGluIGwpbC5oYXNPd25Qcm9wZXJ0eShjKSYmKG8ucHVzaChj
KSxvdChpLGMsbFtjXSx0LG4scixwLGYpKQotbC5oYXNPd25Qcm9wZXJ0eSgidG9TdHJpbmciKSYm
KGkudG9TdHJpbmc9bC50b1N0cmluZyl9ZWxzZSB1Lm1peGlucyYmKHN0KHUubWl4aW5zLHQsbixy
LGksbyksdS5fd2l0aG91dCYmdS5fd2l0aG91dC5mb3JFYWNoKHMpKX1mdW5jdGlvbiBhdChlKXt2
YXIgdD1lLmxlbmd0aAotcmV0dXJuIHQ+NyYmNjY9PT1lLmNoYXJDb2RlQXQodC03KSYmLTEhPT1l
LmluZGV4T2YoImluZGluZyIsdC02KX1mdW5jdGlvbiB1dChlLHQpe3QuZm9yRWFjaEJpbmRpbmdz
KGZ1bmN0aW9uKHQsbil7dmFyIHIKLW4mJihyPXQuc2xpY2UoMCwtNyksbiBpbnN0YW5jZW9mIF9u
PyhuPW4uY29weSgpLG4udG8ocikpOm49bmV3IF9uKHIsbiksbi5jb25uZWN0KGUpLGVbdF09bil9
KSx0LmNsZWFyQmluZGluZ3MoKX1mdW5jdGlvbiBsdChlLHQpe3JldHVybiB1dChlLHR8fGllKGUp
KSxlfWZ1bmN0aW9uIGN0KGUsdCxuLHIpe3ZhciBpPXQubWV0aG9kTmFtZSxvPXZvaWQgMCxzPXZv
aWQgMAotcmV0dXJuIG5baV18fHJbaV0/KG89cltpXSx0PW5baV0pOihzPWVbaV0pJiZudWxsIT09
cyYmIm9iamVjdCI9PXR5cGVvZiBzJiZzLmlzRGVzY3JpcHRvcj8odD1zLG89dm9pZCAwKToodD12
b2lkIDAsbz1lW2ldKSx7ZGVzYzp0LHZhbHVlOm99fWZ1bmN0aW9uIHB0KGUsdCxuLHIsaSl7dmFy
IG8scz1uW3JdCi1pZihzKWZvcihvPTA7bzxzLmxlbmd0aDtvKyspaShlLHNbb10sbnVsbCx0KX1m
dW5jdGlvbiBmdChlLHQsbil7dmFyIHI9ZVt0XQotImZ1bmN0aW9uIj09dHlwZW9mIHImJihwdChl
LHQsciwiX19lbWJlcl9vYnNlcnZlc0JlZm9yZV9fIixKZSkscHQoZSx0LHIsIl9fZW1iZXJfb2Jz
ZXJ2ZXNfXyIsS2UpLHB0KGUsdCxyLCJfX2VtYmVyX2xpc3RlbnNfXyIsaCkpLCJmdW5jdGlvbiI9
PXR5cGVvZiBuJiYocHQoZSx0LG4sIl9fZW1iZXJfb2JzZXJ2ZXNCZWZvcmVfXyIsUWUpLHB0KGUs
dCxuLCJfX2VtYmVyX29ic2VydmVzX18iLEdlKSxwdChlLHQsbiwiX19lbWJlcl9saXN0ZW5zX18i
LGYpKX1mdW5jdGlvbiBodChlLHQscil7dmFyIGksbyxzPXt9LGE9e30sdT1pZShlKSxsPVtdLGM9
dm9pZCAwLHA9dm9pZCAwLGY9dm9pZCAwCi1mb3IoZS5fc3VwZXI9bi5ST09ULHN0KHQsdSxzLGEs
ZSxsKSxpPTA7aTxsLmxlbmd0aDtpKyspaWYoImNvbnN0cnVjdG9yIiE9PShjPWxbaV0pJiZhLmhh
c093blByb3BlcnR5KGMpJiYoZj1zW2NdLHA9YVtjXSxmIT09VG4pKXtmb3IoO2YmJmYgaW5zdGFu
Y2VvZiBndDspbz1jdChlLGYscyxhKSxmPW8uZGVzYyxwPW8udmFsdWUKLXZvaWQgMD09PWYmJnZv
aWQgMD09PXB8fChmdChlLGMscCksYXQoYykmJnUud3JpdGVCaW5kaW5ncyhjLHApLE0oZSxjLGYs
cCx1KSl9cmV0dXJuIHJ8fGx0KGUsdSksZX1mdW5jdGlvbiBkdChlLHQscil7dmFyIGk9bi5ndWlk
Rm9yKGUpCi1pZihyW2ldKXJldHVybiExCi1pZihyW2ldPSEwLGU9PT10KXJldHVybiEwCi1mb3Io
dmFyIG89ZS5taXhpbnMscz1vP28ubGVuZ3RoOjA7LS1zPj0wOylpZihkdChvW3NdLHQscikpcmV0
dXJuITAKLXJldHVybiExfWZ1bmN0aW9uIG10KGUsdCxyKXt2YXIgaSxvLHMKLWlmKCFyW24uZ3Vp
ZEZvcih0KV0paWYocltuLmd1aWRGb3IodCldPSEwLHQucHJvcGVydGllcylmb3IoaT1PYmplY3Qu
a2V5cyh0LnByb3BlcnRpZXMpLG89MDtvPGkubGVuZ3RoO28rKylzPWlbb10sZVtzXT0hMAotZWxz
ZSB0Lm1peGlucyYmdC5taXhpbnMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gbXQoZSx0LHIp
fSl9ZnVuY3Rpb24gZ3QoZSl7dGhpcy5pc0Rlc2NyaXB0b3I9ITAsdGhpcy5tZXRob2ROYW1lPWV9
ZnVuY3Rpb24geXQoKXtmb3IoZT1hcmd1bWVudHMubGVuZ3RoLHQ9QXJyYXkoZSksbj0wO248ZTtu
KyspdFtuXT1hcmd1bWVudHNbbl0KLXZhciBlLHQsbixpLG89dC5zbGljZSgtMSlbMF0scz12b2lk
IDAsYT1mdW5jdGlvbihlKXtzLnB1c2goZSl9LHU9dC5zbGljZSgwLC0xKQotZm9yKCJmdW5jdGlv
biIhPXR5cGVvZiBvJiYobz10WzBdLHU9dC5zbGljZSgxKSkscz1bXSxpPTA7aTx1Lmxlbmd0aDsr
K2kpbWUodVtpXSxhKQotaWYoImZ1bmN0aW9uIiE9dHlwZW9mIG8pdGhyb3cgbmV3IHIuRW1iZXJF
cnJvcigiRW1iZXIub2JzZXJ2ZXIgY2FsbGVkIHdpdGhvdXQgYSBmdW5jdGlvbiIpCi1yZXR1cm4g
by5fX2VtYmVyX29ic2VydmVzX189cyxvfWZ1bmN0aW9uIHZ0KGUsdCl7dGhpcy50eXBlPWUsdGhp
cy5uYW1lPXQsdGhpcy5fc3VwZXIkQ29uc3RydWN0b3IoYnQpLGtuLm9uZVdheS5jYWxsKHRoaXMp
fWZ1bmN0aW9uIGJ0KGUpe3ZhciB0PXRoaXNbZV0scj1uLmdldE93bmVyKHRoaXMpfHx0aGlzLmNv
bnRhaW5lcgotcmV0dXJuIHIubG9va3VwKHQudHlwZSsiOiIrKHQubmFtZXx8ZSkpfXZhciBfdCx3
dCxFdD0iZGVmYXVsdCJpbiBzP3MuZGVmYXVsdDpzCi1hPSJkZWZhdWx0ImluIGE/YS5kZWZhdWx0
OmEsdT0iZGVmYXVsdCJpbiB1P3UuZGVmYXVsdDp1Ci12YXIgeHQ9Im9iamVjdCI9PXR5cGVvZiB0
LmNvbnRleHQuaW1wb3J0cy5FbWJlciYmdC5jb250ZXh0LmltcG9ydHMuRW1iZXJ8fHt9Ci14dC5p
c05hbWVzcGFjZT0hMCx4dC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJFbWJlciJ9Ci12YXIg
Q3Q9MSxPdD0yLEF0PXthZGRUb0xpc3RlbmVyczpmdW5jdGlvbihlLHQsbixyKXt0aGlzLl9saXN0
ZW5lcnN8fCh0aGlzLl9saXN0ZW5lcnM9W10pLHRoaXMuX2xpc3RlbmVycy5wdXNoKGUsdCxuLHIp
fSxfZmluYWxpemVMaXN0ZW5lcnM6ZnVuY3Rpb24oKXtpZighdGhpcy5fbGlzdGVuZXJzRmluYWxp
emVkKXt0aGlzLl9saXN0ZW5lcnN8fCh0aGlzLl9saXN0ZW5lcnM9W10pCi1mb3IodmFyIGUsdD10
aGlzLnBhcmVudDt0JiYoZT10Ll9saXN0ZW5lcnMsZSYmKHRoaXMuX2xpc3RlbmVycz10aGlzLl9s
aXN0ZW5lcnMuY29uY2F0KGUpKSwhdC5fbGlzdGVuZXJzRmluYWxpemVkKTspdD10LnBhcmVudAot
dGhpcy5fbGlzdGVuZXJzRmluYWxpemVkPSEwfX0scmVtb3ZlRnJvbUxpc3RlbmVyczpmdW5jdGlv
bihlLHQsbixyKXtmb3IodmFyIGksbyxzPXRoaXM7czspe2lmKGk9cy5fbGlzdGVuZXJzKWZvcihv
PWkubGVuZ3RoLTQ7bz49MDtvLT00KWlmKGlbb109PT1lJiYoIW58fGlbbysxXT09PXQmJmlbbysy
XT09PW4pKXtpZihzIT09dGhpcylyZXR1cm4gdGhpcy5fZmluYWxpemVMaXN0ZW5lcnMoKSx0aGlz
LnJlbW92ZUZyb21MaXN0ZW5lcnMoZSx0LG4pCi0iZnVuY3Rpb24iPT10eXBlb2YgciYmcihlLHQs
aVtvKzJdKSxpLnNwbGljZShvLDQpfWlmKHMuX2xpc3RlbmVyc0ZpbmFsaXplZClicmVhawotcz1z
LnBhcmVudH19LG1hdGNoaW5nTGlzdGVuZXJzOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuLHIsaSxv
PXRoaXMscz12b2lkIDA7dm9pZCAwIT09bzspe2lmKHZvaWQgMCE9PSh0PW8uX2xpc3RlbmVycykp
Zm9yKG49MDtuPHQubGVuZ3RoLTM7bis9NCl0W25dPT09ZSYmKHM9c3x8W10sbChzLHQsbikpCi1p
ZighMD09PW8uX2xpc3RlbmVyc0ZpbmFsaXplZClicmVhawotbz1vLnBhcmVudH12YXIgYT10aGlz
Ll9zdXNwZW5kZWRMaXN0ZW5lcnMKLWlmKHZvaWQgMCE9PWEmJnZvaWQgMCE9PXMpZm9yKHI9MDty
PGEubGVuZ3RoLTI7cis9MylpZihlPT09YVtyXSlmb3IoaT0wO2k8cy5sZW5ndGgtMjtpKz0zKXNb
aV09PT1hW3IrMV0mJnNbaSsxXT09PWFbcisyXSYmKHNbaSsyXXw9T3QpCi1yZXR1cm4gc30sc3Vz
cGVuZExpc3RlbmVyczpmdW5jdGlvbihlLHQsbixyKXt2YXIgaSxvLHM9dGhpcy5fc3VzcGVuZGVk
TGlzdGVuZXJzCi1mb3Ioc3x8KHM9dGhpcy5fc3VzcGVuZGVkTGlzdGVuZXJzPVtdKSxpPTA7aTxl
Lmxlbmd0aDtpKyspcy5wdXNoKGVbaV0sdCxuKQotdHJ5e3JldHVybiByLmNhbGwodCl9ZmluYWxs
eXtpZihzLmxlbmd0aD09PWUubGVuZ3RoKXRoaXMuX3N1c3BlbmRlZExpc3RlbmVycz12b2lkIDAK
LWVsc2UgZm9yKG89cy5sZW5ndGgtMztvPj0wO28tPTMpc1tvKzFdPT09dCYmc1tvKzJdPT09biYm
LTEhPT1lLmluZGV4T2Yoc1tvXSkmJnMuc3BsaWNlKG8sMyl9fSx3YXRjaGVkRXZlbnRzOmZ1bmN0
aW9uKCl7Zm9yKHZhciBlLHQsbj10aGlzLHI9e307bjspe2lmKGU9bi5fbGlzdGVuZXJzKWZvcih0
PTA7dDxlLmxlbmd0aC0zO3QrPTQpcltlW3RdXT0hMAotaWYobi5fbGlzdGVuZXJzRmluYWxpemVk
KWJyZWFrCi1uPW4ucGFyZW50fXJldHVybiBPYmplY3Qua2V5cyhyKX0sX2luaXRpYWxpemVMaXN0
ZW5lcnM6ZnVuY3Rpb24oKXt0aGlzLl9saXN0ZW5lcnM9dm9pZCAwLHRoaXMuX2xpc3RlbmVyc0Zp
bmFsaXplZD12b2lkIDAsdGhpcy5fc3VzcGVuZGVkTGlzdGVuZXJzPXZvaWQgMH19LFR0PWZ1bmN0
aW9uKCl7cmV0dXJuITF9LFN0PXZvaWQgMCxSdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlz
LmNsZWFyKCl9cmV0dXJuIGUucHJvdG90eXBlLmFkZD1mdW5jdGlvbihlLHQscil7dmFyIGk9dGhp
cy5vYnNlcnZlclNldCxvPXRoaXMub2JzZXJ2ZXJzLHM9bi5ndWlkRm9yKGUpLGE9aVtzXSx1PXZv
aWQgMAotcmV0dXJuIGF8fChpW3NdPWE9e30pLHU9YVt0XSx2b2lkIDA9PT11JiYodT1vLnB1c2go
e3NlbmRlcjplLGtleU5hbWU6dCxldmVudE5hbWU6cixsaXN0ZW5lcnM6W119KS0xLGFbdF09dSks
b1t1XS5saXN0ZW5lcnN9LGUucHJvdG90eXBlLmZsdXNoPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5v
YnNlcnZlcnMsdD12b2lkIDAsbj12b2lkIDAscj12b2lkIDAKLWZvcih0aGlzLmNsZWFyKCksdD0w
O3Q8ZS5sZW5ndGg7Kyt0KW49ZVt0XSxyPW4uc2VuZGVyLHIuaXNEZXN0cm95aW5nfHxyLmlzRGVz
dHJveWVkfHxnKHIsbi5ldmVudE5hbWUsW3Isbi5rZXlOYW1lXSxuLmxpc3RlbmVycyl9LGUucHJv
dG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5vYnNlcnZlclNldD17fSx0aGlzLm9ic2VydmVy
cz1bXX0sZX0oKQotZS5ydW5JblRyYW5zYWN0aW9uPXZvaWQgMCxlLnJ1bkluVHJhbnNhY3Rpb249
ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZVt0XSgpLCExfQotdmFyIGt0PW4uc3ltYm9sKCJQUk9QRVJU
WV9ESURfQ0hBTkdFIiksTnQ9bmV3IFJ0LFB0PW5ldyBSdCxqdD0wLER0PXZvaWQgMCxMdD12b2lk
IDA7KGZ1bmN0aW9uKCl7dmFyIGU9T2JqZWN0LmNyZWF0ZShPYmplY3QucHJvdG90eXBlLHtwcm9w
Ontjb25maWd1cmFibGU6ITAsdmFsdWU6MX19KQotT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInBy
b3AiLHtjb25maWd1cmFibGU6ITAsdmFsdWU6Mn0pLGUucHJvcH0pKCkKLXZhciBJdD0hMSxNdD0v
XihbXlwuXSspLyxGdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLmNoYWlucz1PYmplY3Qu
Y3JlYXRlKG51bGwpfXJldHVybiBlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj10
aGlzLmNoYWluc1tlXQotdm9pZCAwPT09bj90aGlzLmNoYWluc1tlXT1bdF06bi5wdXNoKHQpfSxl
LnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oZSx0KXt2YXIgbixyPXRoaXMuY2hhaW5zW2VdCi1p
ZihyKWZvcihuPTA7bjxyLmxlbmd0aDtuKyspaWYocltuXT09PXQpe3Iuc3BsaWNlKG4sMSkKLWJy
ZWFrfX0sZS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKGUsdCl7dmFyIG4scj10aGlzLmNoYWluc1tl
XQotaWYocilmb3Iobj0wO248ci5sZW5ndGg7bisrKWlmKHJbbl09PT10KXJldHVybiEwCi1yZXR1
cm4hMX0sZS5wcm90b3R5cGUucmV2YWxpZGF0ZUFsbD1mdW5jdGlvbigpe2Zvcih2YXIgZSBpbiB0
aGlzLmNoYWlucyl0aGlzLm5vdGlmeShlLCEwLHZvaWQgMCl9LGUucHJvdG90eXBlLnJldmFsaWRh
dGU9ZnVuY3Rpb24oZSl7dGhpcy5ub3RpZnkoZSwhMCx2b2lkIDApfSxlLnByb3RvdHlwZS5ub3Rp
Znk9ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbyxzLGE9dGhpcy5jaGFpbnNbZV0KLWlmKHZvaWQg
MCE9PWEmJjAhPT1hLmxlbmd0aCl7dmFyIHU9dm9pZCAwCi1mb3IobiYmKHU9W10pLHI9MDtyPGEu
bGVuZ3RoO3IrKylhW3JdLm5vdGlmeSh0LHUpCi1pZih2b2lkIDAhPT1uKWZvcihpPTA7aTx1Lmxl
bmd0aDtpKz0yKW89dVtpXSxzPXVbaSsxXSxuKG8scyl9fSxlfSgpLHp0PWZ1bmN0aW9uKCl7ZnVu
Y3Rpb24gZShlLHQsbil7dGhpcy5fcGFyZW50PWUsdGhpcy5fa2V5PXQKLXZhciByLGk9dGhpcy5f
d2F0Y2hpbmc9dm9pZCAwPT09bgotaWYodGhpcy5fY2hhaW5zPXZvaWQgMCx0aGlzLl9vYmplY3Q9
dm9pZCAwLHRoaXMuY291bnQ9MCx0aGlzLl92YWx1ZT1uLHRoaXMuX3BhdGhzPXZvaWQgMCwhMD09
PWkpe2lmKHI9ZS52YWx1ZSgpLCEwPT0hJChyKSlyZXR1cm4KLXRoaXMuX29iamVjdD1yLFEodGhp
cy5fb2JqZWN0LHRoaXMuX2tleSx0aGlzKX19cmV0dXJuIGUucHJvdG90eXBlLnZhbHVlPWZ1bmN0
aW9uKCl7dmFyIGUKLXJldHVybiB2b2lkIDA9PT10aGlzLl92YWx1ZSYmITA9PT10aGlzLl93YXRj
aGluZyYmKGU9dGhpcy5fcGFyZW50LnZhbHVlKCksdGhpcy5fdmFsdWU9SihlLHRoaXMuX2tleSkp
LHRoaXMuX3ZhbHVlfSxlLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dmFyIGUKLSEwPT09
dGhpcy5fd2F0Y2hpbmcmJihlPXRoaXMuX29iamVjdCxlJiZZKGUsdGhpcy5fa2V5LHRoaXMpLHRo
aXMuX3dhdGNoaW5nPSExKX0sZS5wcm90b3R5cGUuY29weT1mdW5jdGlvbih0KXt2YXIgbj1uZXcg
ZShudWxsLG51bGwsdCkscj10aGlzLl9wYXRocyxpPXZvaWQgMAotaWYodm9pZCAwIT09cilmb3Io
aSBpbiByKXJbaV08PTB8fG4uYWRkKGkpCi1yZXR1cm4gbn0sZS5wcm90b3R5cGUuYWRkPWZ1bmN0
aW9uKGUpe3ZhciB0PXRoaXMuX3BhdGhzfHwodGhpcy5fcGF0aHM9e30pCi10W2VdPSh0W2VdfHww
KSsxCi12YXIgbj1XKGUpLHI9ZS5zbGljZShuLmxlbmd0aCsxKQotdGhpcy5jaGFpbihuLHIpfSxl
LnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fcGF0aHMKLWlmKHZvaWQg
MCE9PXQpe3RbZV0+MCYmdFtlXS0tCi12YXIgbj1XKGUpLHI9ZS5zbGljZShuLmxlbmd0aCsxKQot
dGhpcy51bmNoYWluKG4scil9fSxlLnByb3RvdHlwZS5jaGFpbj1mdW5jdGlvbih0LG4pe3ZhciBy
PXRoaXMuX2NoYWlucyxpPXZvaWQgMAotdm9pZCAwPT09cj9yPXRoaXMuX2NoYWlucz1PYmplY3Qu
Y3JlYXRlKG51bGwpOmk9clt0XSx2b2lkIDA9PT1pJiYoaT1yW3RdPW5ldyBlKHRoaXMsdCx2b2lk
IDApKSxpLmNvdW50KyssbiYmKHQ9VyhuKSxuPW4uc2xpY2UodC5sZW5ndGgrMSksaS5jaGFpbih0
LG4pKX0sZS5wcm90b3R5cGUudW5jaGFpbj1mdW5jdGlvbihlLHQpe3ZhciBuLHIsaT10aGlzLl9j
aGFpbnMsbz1pW2VdCi10JiZ0Lmxlbmd0aD4xJiYobj1XKHQpLHI9dC5zbGljZShuLmxlbmd0aCsx
KSxvLnVuY2hhaW4obixyKSksLS1vLmNvdW50PD0wJiYoaVtvLl9rZXldPXZvaWQgMCxvLmRlc3Ry
b3koKSl9LGUucHJvdG90eXBlLm5vdGlmeT1mdW5jdGlvbihlLHQpe2UmJiEwPT09dGhpcy5fd2F0
Y2hpbmcmJihuPXRoaXMuX3BhcmVudC52YWx1ZSgpLG4hPT10aGlzLl9vYmplY3QmJih2b2lkIDAh
PT10aGlzLl9vYmplY3QmJlkodGhpcy5fb2JqZWN0LHRoaXMuX2tleSx0aGlzKSwkKG4pPyh0aGlz
Ll9vYmplY3Q9bixRKG4sdGhpcy5fa2V5LHRoaXMpKTp0aGlzLl9vYmplY3Q9dm9pZCAwKSx0aGlz
Ll92YWx1ZT12b2lkIDApCi12YXIgbixyPXRoaXMuX2NoYWlucyxpPXZvaWQgMAotaWYodm9pZCAw
IT09cilmb3IodmFyIG8gaW4gcil2b2lkIDAhPT0oaT1yW29dKSYmaS5ub3RpZnkoZSx0KQotdCYm
dGhpcy5fcGFyZW50JiZ0aGlzLl9wYXJlbnQucG9wdWxhdGVBZmZlY3RlZCh0aGlzLl9rZXksMSx0
KX0sZS5wcm90b3R5cGUucG9wdWxhdGVBZmZlY3RlZD1mdW5jdGlvbihlLHQsbil7dGhpcy5fa2V5
JiYoZT10aGlzLl9rZXkrIi4iK2UpLHRoaXMuX3BhcmVudD90aGlzLl9wYXJlbnQucG9wdWxhdGVB
ZmZlY3RlZChlLHQrMSxuKTp0PjEmJm4ucHVzaCh0aGlzLnZhbHVlKCksZSl9LGV9KCksVXQ9e2Nh
Y2hlOlgsd2VhazpYLHdhdGNoaW5nOlosbWl4aW5zOlosYmluZGluZ3M6Wix2YWx1ZXM6WixjaGFp
bldhdGNoZXJzOmVlLGNoYWluczpmdW5jdGlvbihlLHQpe3ZhciBuPXRlKGUpLHI9bmUoZSkKLXQu
cHJvdG90eXBlWyJ3cml0YWJsZSIrcl09ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpc1tuXQotcmV0dXJu
IHZvaWQgMD09PXQmJih0PXRoaXMucGFyZW50P3RoaXNbbl09dGhpcy5wYXJlbnRbIndyaXRhYmxl
IityXShlKS5jb3B5KHRoaXMuc291cmNlKTp0aGlzW25dPWUodGhpcy5zb3VyY2UpKSx0fSx0LnBy
b3RvdHlwZVsicmVhZGFibGUiK3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2dldEluaGVyaXRl
ZChuKX19LHRhZzplZSx0YWdzOlh9LEJ0PU9iamVjdC5rZXlzKFV0KSxxdD1mdW5jdGlvbigpe2Z1
bmN0aW9uIHQoZSx0KXt0aGlzLl9jYWNoZT12b2lkIDAsdGhpcy5fd2Vhaz12b2lkIDAsdGhpcy5f
d2F0Y2hpbmc9dm9pZCAwLHRoaXMuX21peGlucz12b2lkIDAsdGhpcy5fYmluZGluZ3M9dm9pZCAw
LHRoaXMuX3ZhbHVlcz12b2lkIDAsdGhpcy5fZGVwcz12b2lkIDAsdGhpcy5fY2hhaW5XYXRjaGVy
cz12b2lkIDAsdGhpcy5fY2hhaW5zPXZvaWQgMCx0aGlzLl90YWc9dm9pZCAwLHRoaXMuX3RhZ3M9
dm9pZCAwLHRoaXMuX2ZhY3Rvcnk9dm9pZCAwLHRoaXMuX2ZsYWdzPTAsdGhpcy5zb3VyY2U9ZSx0
aGlzLnByb3RvPXZvaWQgMCx0aGlzLnBhcmVudD10LHRoaXMuX2luaXRpYWxpemVMaXN0ZW5lcnMo
KX1yZXR1cm4gdC5wcm90b3R5cGUuaXNJbml0aWFsaXplZD1mdW5jdGlvbihlKXtyZXR1cm4gdGhp
cy5wcm90byE9PWV9LHQucHJvdG90eXBlLnNldFRhZz1mdW5jdGlvbihlKXt0aGlzLl90YWc9ZX0s
dC5wcm90b3R5cGUuZ2V0VGFnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RhZ30sdC5wcm90b3R5
cGUuZGVzdHJveT1mdW5jdGlvbigpe2lmKCF0aGlzLmlzTWV0YURlc3Ryb3llZCgpKXt2YXIgdCxu
PXZvaWQgMCxyPXZvaWQgMCxpPXZvaWQgMCxvPXRoaXMucmVhZGFibGVDaGFpbnMoKQotaWYobylm
b3IoSHQucHVzaChvKTtIdC5sZW5ndGg+MDspe2lmKG89SHQucG9wKCksbj1vLl9jaGFpbnMpZm9y
KHIgaW4gbil2b2lkIDAhPT1uW3JdJiZIdC5wdXNoKG5bcl0pCi1vLl93YXRjaGluZyYmKGk9by5f
b2JqZWN0KSYmKHQ9ZS5wZWVrTWV0YShpKSkmJiF0LmlzU291cmNlRGVzdHJveWluZygpJiZZKGks
by5fa2V5LG8sdCl9dGhpcy5zZXRNZXRhRGVzdHJveWVkKCl9fSx0LnByb3RvdHlwZS5pc1NvdXJj
ZURlc3Ryb3lpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9KDImdGhpcy5fZmxhZ3MpfSx0LnByb3Rv
dHlwZS5zZXRTb3VyY2VEZXN0cm95aW5nPWZ1bmN0aW9uKCl7dGhpcy5fZmxhZ3N8PTJ9LHQucHJv
dG90eXBlLmlzU291cmNlRGVzdHJveWVkPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPSg0JnRoaXMuX2Zs
YWdzKX0sdC5wcm90b3R5cGUuc2V0U291cmNlRGVzdHJveWVkPWZ1bmN0aW9uKCl7dGhpcy5fZmxh
Z3N8PTR9LHQucHJvdG90eXBlLmlzTWV0YURlc3Ryb3llZD1mdW5jdGlvbigpe3JldHVybiAwIT0o
OCZ0aGlzLl9mbGFncyl9LHQucHJvdG90eXBlLnNldE1ldGFEZXN0cm95ZWQ9ZnVuY3Rpb24oKXt0
aGlzLl9mbGFnc3w9OH0sdC5wcm90b3R5cGUuaXNQcm94eT1mdW5jdGlvbigpe3JldHVybiAwIT0o
MTYmdGhpcy5fZmxhZ3MpfSx0LnByb3RvdHlwZS5zZXRQcm94eT1mdW5jdGlvbigpe3RoaXMuX2Zs
YWdzfD0xNn0sdC5wcm90b3R5cGUuX2dldE9yQ3JlYXRlT3duTWFwPWZ1bmN0aW9uKGUpe3JldHVy
biB0aGlzW2VdfHwodGhpc1tlXT1PYmplY3QuY3JlYXRlKG51bGwpKX0sdC5wcm90b3R5cGUuX2dl
dEluaGVyaXRlZD1mdW5jdGlvbihlKXtmb3IodmFyIHQsbj10aGlzO3ZvaWQgMCE9PW47KXtpZih2
b2lkIDAhPT0odD1uW2VdKSlyZXR1cm4gdAotbj1uLnBhcmVudH19LHQucHJvdG90eXBlLl9maW5k
SW5oZXJpdGVkPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuLHIsaT10aGlzO3ZvaWQgMCE9PWk7KXtp
Zih2b2lkIDAhPT0obj1pW2VdKSYmdm9pZCAwIT09KHI9blt0XSkpcmV0dXJuIHIKLWk9aS5wYXJl
bnR9fSx0LnByb3RvdHlwZS53cml0ZURlcHM9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMuX2dl
dE9yQ3JlYXRlT3duTWFwKCJfZGVwcyIpLGk9cltlXQotdm9pZCAwPT09aSYmKGk9cltlXT1PYmpl
Y3QuY3JlYXRlKG51bGwpKSxpW3RdPW59LHQucHJvdG90eXBlLnBlZWtEZXBzPWZ1bmN0aW9uKGUs
dCl7Zm9yKHZhciBuLHIsaSxvPXRoaXM7dm9pZCAwIT09bzspe2lmKHZvaWQgMCE9PShuPW8uX2Rl
cHMpJiZ2b2lkIDAhPT0ocj1uW2VdKSYmdm9pZCAwIT09KGk9clt0XSkpcmV0dXJuIGkKLW89by5w
YXJlbnR9fSx0LnByb3RvdHlwZS5oYXNEZXBzPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuPXRoaXM7
dm9pZCAwIT09bjspe2lmKHZvaWQgMCE9PSh0PW4uX2RlcHMpJiZ2b2lkIDAhPT10W2VdKXJldHVy
biEwCi1uPW4ucGFyZW50fXJldHVybiExfSx0LnByb3RvdHlwZS5mb3JFYWNoSW5EZXBzPWZ1bmN0
aW9uKGUsdCl7cmV0dXJuIHRoaXMuX2ZvckVhY2hJbigiX2RlcHMiLGUsdCl9LHQucHJvdG90eXBl
Ll9mb3JFYWNoSW49ZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcixpLG8scyxhLHUsbD10aGlzLGM9
dm9pZCAwLHA9dm9pZCAwO3ZvaWQgMCE9PWw7KXtpZih2b2lkIDAhPT0ocj1sW2VdKSYmdm9pZCAw
IT09KGk9clt0XSkpZm9yKHZhciBmIGluIGkpYz1jfHxPYmplY3QuY3JlYXRlKG51bGwpLHZvaWQg
MD09PWNbZl0mJihjW2ZdPSEwLHA9cHx8W10scC5wdXNoKFtmLGlbZl1dKSkKLWw9bC5wYXJlbnR9
aWYodm9pZCAwIT09cClmb3Iobz0wO288cC5sZW5ndGg7bysrKXM9cFtvXSxhPXNbMF0sdT1zWzFd
LG4oYSx1KX0sdC5wcm90b3R5cGUucmVhZEluaGVyaXRlZFZhbHVlPWZ1bmN0aW9uKGUsdCl7Zm9y
KHZhciBuLHIsaT10aGlzO3ZvaWQgMCE9PWk7KXtpZih2b2lkIDAhPT0obj1pWyJfIitlXSkmJih2
b2lkIDAhPT0ocj1uW3RdKXx8dCBpbiBuKSlyZXR1cm4gcgotaT1pLnBhcmVudH1yZXR1cm4gV3R9
LHQucHJvdG90eXBlLndyaXRlVmFsdWU9ZnVuY3Rpb24oZSx0LHIpe3ZhciBpPW4ubG9va3VwRGVz
Y3JpcHRvcihlLHQpCi12b2lkIDAhPT1pJiZpLnNldCYmaS5zZXQuaXNNYW5kYXRvcnlTZXR0ZXI/
dGhpcy53cml0ZVZhbHVlcyh0LHIpOmVbdF09cn0saS5jcmVhdGVDbGFzcyh0LFt7a2V5OiJmYWN0
b3J5IixzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5fZmFjdG9yeT1lfSxnZXQ6ZnVuY3Rpb24oKXtyZXR1
cm4gdGhpcy5fZmFjdG9yeX19XSksdH0oKSxIdD1bXQotZm9yKHZhciBWdCBpbiBBdClxdC5wcm90
b3R5cGVbVnRdPUF0W1Z0XQotQnQuZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gVXRbZV0oZSxx
dCl9KQotdmFyIFd0PW4uc3ltYm9sKCJ1bmRlZmluZWQiKSwkdD17d3JpdGFibGU6ITAsY29uZmln
dXJhYmxlOiEwLGVudW1lcmFibGU6ITEsdmFsdWU6bnVsbH0sR3Q9e25hbWU6Il9fZW1iZXJfbWV0
YV9fIixkZXNjcmlwdG9yOiR0fSxLdD12b2lkIDAKLWUucGVla01ldGE9dm9pZCAwLG4uSEFTX05B
VElWRV9XRUFLTUFQPyhfdD1PYmplY3QuZ2V0UHJvdG90eXBlT2Ysd3Q9bmV3IFdlYWtNYXAsS3Q9
ZnVuY3Rpb24oZSx0KXt3dC5zZXQoZSx0KX0sZS5wZWVrTWV0YT1mdW5jdGlvbihlKXtyZXR1cm4g
d3QuZ2V0KGUpfSxlLnBlZWtNZXRhPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLG49dm9pZCAwO3Zv
aWQgMCE9PXQmJm51bGwhPT10Oyl7aWYodm9pZCAwIT09KG49d3QuZ2V0KHQpKSlyZXR1cm4gbgot
dD1fdCh0KX19KTooS3Q9ZnVuY3Rpb24oZSx0KXtlLl9fZGVmaW5lTm9uRW51bWVyYWJsZT9lLl9f
ZGVmaW5lTm9uRW51bWVyYWJsZShHdCk6T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZW1iZXJf
bWV0YV9fIiwkdCksZS5fX2VtYmVyX21ldGFfXz10fSxlLnBlZWtNZXRhPWZ1bmN0aW9uKGUpe3Jl
dHVybiBlLl9fZW1iZXJfbWV0YV9ffSkKLXZhciBRdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0
LG4scil7dGhpcy5zaXplPTAsdGhpcy5taXNzZXM9MCx0aGlzLmhpdHM9MCx0aGlzLmxpbWl0PWUs
dGhpcy5mdW5jPXQsdGhpcy5rZXk9bix0aGlzLnN0b3JlPXJ8fG5ldyBZdH1yZXR1cm4gZS5wcm90
b3R5cGUuZ2V0PWZ1bmN0aW9uKGUpe3ZhciB0PXZvaWQgMD09PXRoaXMua2V5P2U6dGhpcy5rZXko
ZSksbj10aGlzLnN0b3JlLmdldCh0KQotcmV0dXJuIHZvaWQgMD09PW4/KHRoaXMubWlzc2VzKyss
bj10aGlzLl9zZXQodCx0aGlzLmZ1bmMoZSkpKTpuPT09V3Q/KHRoaXMuaGl0cysrLG49dm9pZCAw
KTp0aGlzLmhpdHMrKyxufSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj12b2lk
IDA9PT10aGlzLmtleT9lOnRoaXMua2V5KGUpCi1yZXR1cm4gdGhpcy5fc2V0KG4sdCl9LGUucHJv
dG90eXBlLl9zZXQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5saW1pdD50aGlzLnNpemUmJih0
aGlzLnNpemUrKyx2b2lkIDA9PT10P3RoaXMuc3RvcmUuc2V0KGUsV3QpOnRoaXMuc3RvcmUuc2V0
KGUsdCkpLHR9LGUucHJvdG90eXBlLnB1cmdlPWZ1bmN0aW9uKCl7dGhpcy5zdG9yZS5jbGVhcigp
LHRoaXMuc2l6ZT0wLHRoaXMuaGl0cz0wLHRoaXMubWlzc2VzPTB9LGV9KCksWXQ9ZnVuY3Rpb24o
KXtmdW5jdGlvbiBlKCl7dGhpcy5kYXRhPU9iamVjdC5jcmVhdGUobnVsbCl9cmV0dXJuIGUucHJv
dG90eXBlLmdldD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5kYXRhW2VdfSxlLnByb3RvdHlwZS5z
ZXQ9ZnVuY3Rpb24oZSx0KXt0aGlzLmRhdGFbZV09dH0sZS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rp
b24oKXt0aGlzLmRhdGE9T2JqZWN0LmNyZWF0ZShudWxsKX0sZX0oKSxKdD0vXltBLVokXS8sWHQ9
L15bQS1aJF0uKltcLl0vCi1uZXcgUXQoMWUzLGZ1bmN0aW9uKGUpe3JldHVybiBKdC50ZXN0KGUp
fSkKLXZhciBadD1uZXcgUXQoMWUzLGZ1bmN0aW9uKGUpe3JldHVybiBYdC50ZXN0KGUpfSksZW49
KG5ldyBRdCgxZTMsZnVuY3Rpb24oZSl7cmV0dXJuIDA9PT1lLmxhc3RJbmRleE9mKCJ0aGlzLiIs
MCl9KSxuZXcgUXQoMWUzLGZ1bmN0aW9uKGUpe3JldHVybiBlLmluZGV4T2YoIi4iKX0pKSx0bj1u
ZXcgUXQoMWUzLGZ1bmN0aW9uKGUpe3ZhciB0PWVuLmdldChlKQotcmV0dXJuLTE9PT10P2U6ZS5z
bGljZSgwLHQpfSksbm49bmV3IFF0KDFlMyxmdW5jdGlvbihlKXt2YXIgdD1lbi5nZXQoZSkKLWlm
KC0xIT09dClyZXR1cm4gZS5zbGljZSh0KzEpfSkscm49e29iamVjdDohMCxmdW5jdGlvbjohMCxz
dHJpbmc6ITB9LG9uPS9cLkBlYWNoJC8KLXdlLnByb3RvdHlwZT1uZXcgSSx3ZS5wcm90b3R5cGUu
Y29uc3RydWN0b3I9d2UKLXZhciBzbj13ZS5wcm90b3R5cGUKLXNuLnZvbGF0aWxlPWZ1bmN0aW9u
KCl7cmV0dXJuIHRoaXMuX3ZvbGF0aWxlPSEwLHRoaXN9LHNuLnJlYWRPbmx5PWZ1bmN0aW9uKCl7
cmV0dXJuIHRoaXMuX3JlYWRPbmx5PSEwLHRoaXN9LHNuLnByb3BlcnR5PWZ1bmN0aW9uKCl7ZnVu
Y3Rpb24gZShlKXtuLnB1c2goZSl9dmFyIHQsbj1bXQotZm9yKHQ9MDt0PGFyZ3VtZW50cy5sZW5n
dGg7dCsrKW1lKGFyZ3VtZW50c1t0XSxlKQotcmV0dXJuIHRoaXMuX2RlcGVuZGVudEtleXM9bix0
aGlzfSxzbi5tZXRhPWZ1bmN0aW9uKGUpe3JldHVybiAwPT09YXJndW1lbnRzLmxlbmd0aD90aGlz
Ll9tZXRhfHx7fToodGhpcy5fbWV0YT1lLHRoaXMpfSxzbi5kaWRDaGFuZ2U9ZnVuY3Rpb24odCxu
KXtpZighdGhpcy5fdm9sYXRpbGUmJnRoaXMuX3N1c3BlbmRlZCE9PXQpe3ZhciByPWUucGVla01l
dGEodCkKLWlmKHImJnIuc291cmNlPT09dCl7dmFyIGk9ci5yZWFkYWJsZUNhY2hlKCkKLWkmJnZv
aWQgMCE9PWlbbl0mJihpW25dPXZvaWQgMCxfZSh0aGlzLHQsbixyKSl9fX0sc24uZ2V0PWZ1bmN0
aW9uKGUsdCl7aWYodGhpcy5fdm9sYXRpbGUpcmV0dXJuIHRoaXMuX2dldHRlci5jYWxsKGUsdCkK
LXZhciBuPWllKGUpLHI9bi53cml0YWJsZUNhY2hlKCksaT1yW3RdCi1pZihpIT09V3Qpe2lmKHZv
aWQgMCE9PWkpcmV0dXJuIGkKLXZhciBvPXRoaXMuX2dldHRlci5jYWxsKGUsdCkKLXJbdF09dm9p
ZCAwPT09bz9XdDpvCi12YXIgcz1uLnJlYWRhYmxlQ2hhaW5XYXRjaGVycygpCi1yZXR1cm4gcyYm
cy5yZXZhbGlkYXRlKHQpLGJlKHRoaXMsZSx0LG4pLG99fSxzbi5zZXQ9ZnVuY3Rpb24oZSx0LG4p
e3JldHVybiB0aGlzLl9yZWFkT25seSYmdGhpcy5fdGhyb3dSZWFkT25seUVycm9yKGUsdCksdGhp
cy5fc2V0dGVyP3RoaXMuX3ZvbGF0aWxlP3RoaXMudm9sYXRpbGVTZXQoZSx0LG4pOnRoaXMuc2V0
V2l0aFN1c3BlbmQoZSx0LG4pOnRoaXMuY2xvYmJlclNldChlLHQsbil9LHNuLl90aHJvd1JlYWRP
bmx5RXJyb3I9ZnVuY3Rpb24oZSx0KXt0aHJvdyBuZXcgci5FcnJvcignQ2Fubm90IHNldCByZWFk
LW9ubHkgcHJvcGVydHkgIicrdCsnIiBvbiBvYmplY3Q6ICcrbi5pbnNwZWN0KGUpKX0sc24uY2xv
YmJlclNldD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIE0oZSx0LG51bGwsRWUoZSx0KSksZmUoZSx0
LG4pLG59LHNuLnZvbGF0aWxlU2V0PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdGhpcy5fc2V0dGVy
LmNhbGwoZSx0LG4pfSxzbi5zZXRXaXRoU3VzcGVuZD1mdW5jdGlvbihlLHQsbil7dmFyIHI9dGhp
cy5fc3VzcGVuZGVkCi10aGlzLl9zdXNwZW5kZWQ9ZQotdHJ5e3JldHVybiB0aGlzLl9zZXQoZSx0
LG4pfWZpbmFsbHl7dGhpcy5fc3VzcGVuZGVkPXJ9fSxzbi5fc2V0PWZ1bmN0aW9uKGUsdCxuKXt2
YXIgcj1pZShlKSxpPXIud3JpdGFibGVDYWNoZSgpLG89ITEscz12b2lkIDAKLXZvaWQgMCE9PWlb
dF0mJihpW3RdIT09V3QmJihzPWlbdF0pLG89ITApCi12YXIgYT10aGlzLl9zZXR0ZXIuY2FsbChl
LHQsbixzKQotcmV0dXJuIG8mJnM9PT1hP2E6KHgoZSx0LHIpLG8mJihpW3RdPXZvaWQgMCksb3x8
YmUodGhpcyxlLHQsciksaVt0XT12b2lkIDA9PT1hP1d0OmEsQyhlLHQsciksYSl9LHNuLnRlYXJk
b3duPWZ1bmN0aW9uKGUsdCl7aWYoIXRoaXMuX3ZvbGF0aWxlKXt2YXIgbj1pZShlKSxyPW4ucmVh
ZGFibGVDYWNoZSgpCi1yJiZ2b2lkIDAhPT1yW3RdJiYoX2UodGhpcyxlLHQsbiksclt0XT12b2lk
IDApfX0sRWUuc2V0PWZ1bmN0aW9uKGUsdCxuKXtlW3RdPXZvaWQgMD09PW4/V3Q6bn0sRWUuZ2V0
PWZ1bmN0aW9uKGUsdCl7dmFyIG49ZVt0XQotaWYobiE9PVd0KXJldHVybiBufSxFZS5yZW1vdmU9
ZnVuY3Rpb24oZSx0KXtlW3RdPXZvaWQgMH0KLXZhciBhbj17fSx1bj1mdW5jdGlvbihlKXtmdW5j
dGlvbiB0KHQpe3ZhciBuPWkucG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLGUuY2FsbCh0
aGlzKSkKLXJldHVybiBuLmlzRGVzY3JpcHRvcj0hMCxuLmFsdEtleT10LG4uX2RlcGVuZGVudEtl
eXM9W3RdLG59cmV0dXJuIGkuaW5oZXJpdHModCxlKSx0LnByb3RvdHlwZS5zZXR1cD1mdW5jdGlv
bihlLHQpe3ZhciBuPWllKGUpCi1uLnBlZWtXYXRjaGluZyh0KSYmYmUodGhpcyxlLHQsbil9LHQu
cHJvdG90eXBlLnRlYXJkb3duPWZ1bmN0aW9uKGUsdCl7dmFyIG49aWUoZSkKLW4ucGVla1dhdGNo
aW5nKHQpJiZfZSh0aGlzLGUsdCxuKX0sdC5wcm90b3R5cGUud2lsbFdhdGNoPWZ1bmN0aW9uKGUs
dCl7YmUodGhpcyxlLHQsaWUoZSkpfSx0LnByb3RvdHlwZS5kaWRVbndhdGNoPWZ1bmN0aW9uKGUs
dCl7X2UodGhpcyxlLHQsaWUoZSkpfSx0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSx0KXt2YXIg
bj1sZShlLHRoaXMuYWx0S2V5KSxyPWllKGUpLGk9ci53cml0YWJsZUNhY2hlKCkKLXJldHVybiBp
W3RdIT09YW4mJihpW3RdPWFuLGJlKHRoaXMsZSx0LHIpKSxufSx0LnByb3RvdHlwZS5zZXQ9ZnVu
Y3Rpb24oZSx0LG4pe3JldHVybiBmZShlLHRoaXMuYWx0S2V5LG4pfSx0LnByb3RvdHlwZS5yZWFk
T25seT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNldD14ZSx0aGlzfSx0LnByb3RvdHlwZS5vbmVX
YXk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXQ9Q2UsdGhpc30sdH0oSSkKLXVuLnByb3RvdHlw
ZS5fbWV0YT12b2lkIDAsdW4ucHJvdG90eXBlLm1ldGE9d2UucHJvdG90eXBlLm1ldGEKLXZhciBs
bj1bXSxjbj17fSxwbj1mdW5jdGlvbigpe3ZhciBlPSJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93
P3dpbmRvdy5wZXJmb3JtYW5jZXx8e306e30sdD1lLm5vd3x8ZS5tb3pOb3d8fGUud2Via2l0Tm93
fHxlLm1zTm93fHxlLm9Ob3cKLXJldHVybiB0P3QuYmluZChlKTpmdW5jdGlvbigpe3JldHVybitu
ZXcgRGF0ZX19KCkKLWUuZmxhZ2dlZEluc3RydW1lbnQ9dm9pZCAwLGUuZmxhZ2dlZEluc3RydW1l
bnQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBuKCl9Ci12YXIgZm49ZnVuY3Rpb24oZSl7dmFyIHQ9
ZS5zdGFjayxuPWUubWVzc2FnZQotcmV0dXJuIHQmJi0xPT09dC5pbmRleE9mKG4pJiYodD1uKyJc
biIrdCksdH0saG49dm9pZCAwLGRuPXZvaWQgMCxtbj0wCi1qZS5wcm90b3R5cGUuZ2V0PWZ1bmN0
aW9uKHQpe2lmKFBlKHQpKXt2YXIgbixyPWUucGVla01ldGEodCkKLWlmKHImJihuPXIucmVhZGFi
bGVXZWFrKCkpKXtpZihuW3RoaXMuX2lkXT09PVd0KXJldHVybgotcmV0dXJuIG5bdGhpcy5faWRd
fX19LGplLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0KXtpZighUGUoZSkpdGhyb3cgbmV3IFR5
cGVFcnJvcigiSW52YWxpZCB2YWx1ZSB1c2VkIGFzIHdlYWsgbWFwIGtleSIpCi1yZXR1cm4gdm9p
ZCAwPT09dCYmKHQ9V3QpLGllKGUpLndyaXRhYmxlV2VhaygpW3RoaXMuX2lkXT10LHRoaXN9LGpl
LnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24odCl7aWYoIVBlKHQpKXJldHVybiExCi12YXIgbixyPWUu
cGVla01ldGEodCkKLXJldHVybiEoIXJ8fCEobj1yLnJlYWRhYmxlV2VhaygpKSkmJnZvaWQgMCE9
PW5bdGhpcy5faWRdfSxqZS5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKGUpe3JldHVybiEhdGhp
cy5oYXMoZSkmJihkZWxldGUgaWUoZSkud3JpdGFibGVXZWFrKClbdGhpcy5faWRdLCEwKX0samUu
cHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgV2Vha01hcF0ifQot
dmFyIGduPXtnZXQgb25lcnJvcigpe3JldHVybiBrZX0sc2V0IG9uZXJyb3IoZSl7cmV0dXJuIFJl
KGUpfX0seW49bmV3IHUoWyJzeW5jIiwiYWN0aW9ucyIsImRlc3Ryb3kiXSx7R1VJRF9LRVk6bi5H
VUlEX0tFWSxzeW5jOntiZWZvcmU6TixhZnRlcjpQfSxkZWZhdWx0UXVldWU6ImFjdGlvbnMiLG9u
QmVnaW46ZnVuY3Rpb24oZSl7TWUuY3VycmVudFJ1bkxvb3A9ZX0sb25FbmQ6ZnVuY3Rpb24oZSx0
KXtNZS5jdXJyZW50UnVuTG9vcD10fSxvbkVycm9yVGFyZ2V0OmduLG9uRXJyb3JNZXRob2Q6Im9u
ZXJyb3IifSkKLU1lLmpvaW49ZnVuY3Rpb24oKXtyZXR1cm4geW4uam9pbi5hcHBseSh5bixhcmd1
bWVudHMpfSxNZS5iaW5kPWZ1bmN0aW9uKCl7dmFyIGUsdCxuCi1mb3IoZT1hcmd1bWVudHMubGVu
Z3RoLHQ9QXJyYXkoZSksbj0wO248ZTtuKyspdFtuXT1hcmd1bWVudHNbbl0KLXJldHVybiBmdW5j
dGlvbigpe3ZhciBlLG4scgotZm9yKGU9YXJndW1lbnRzLmxlbmd0aCxuPUFycmF5KGUpLHI9MDty
PGU7cisrKW5bcl09YXJndW1lbnRzW3JdCi1yZXR1cm4gTWUuam9pbi5hcHBseShNZSx0LmNvbmNh
dChuKSl9fSxNZS5iYWNrYnVybmVyPXluLE1lLmN1cnJlbnRSdW5Mb29wPW51bGwsTWUucXVldWVz
PXluLnF1ZXVlTmFtZXMsTWUuYmVnaW49ZnVuY3Rpb24oKXt5bi5iZWdpbigpfSxNZS5lbmQ9ZnVu
Y3Rpb24oKXt5bi5lbmQoKX0sTWUuc2NoZWR1bGU9ZnVuY3Rpb24oKXtyZXR1cm4geW4uc2NoZWR1
bGUuYXBwbHkoeW4sYXJndW1lbnRzKX0sTWUuaGFzU2NoZWR1bGVkVGltZXJzPWZ1bmN0aW9uKCl7
cmV0dXJuIHluLmhhc1RpbWVycygpfSxNZS5jYW5jZWxUaW1lcnM9ZnVuY3Rpb24oKXt5bi5jYW5j
ZWxUaW1lcnMoKX0sTWUuc3luYz1mdW5jdGlvbigpe3luLmN1cnJlbnRJbnN0YW5jZSYmeW4uY3Vy
cmVudEluc3RhbmNlLnF1ZXVlcy5zeW5jLmZsdXNoKCl9LE1lLmxhdGVyPWZ1bmN0aW9uKCl7cmV0
dXJuIHluLmxhdGVyLmFwcGx5KHluLGFyZ3VtZW50cyl9LE1lLm9uY2U9ZnVuY3Rpb24oKXt2YXIg
ZSx0LG4KLWZvcihlPWFyZ3VtZW50cy5sZW5ndGgsdD1BcnJheShlKSxuPTA7bjxlO24rKyl0W25d
PWFyZ3VtZW50c1tuXQotcmV0dXJuIHQudW5zaGlmdCgiYWN0aW9ucyIpLHluLnNjaGVkdWxlT25j
ZS5hcHBseSh5bix0KX0sTWUuc2NoZWR1bGVPbmNlPWZ1bmN0aW9uKCl7cmV0dXJuIHluLnNjaGVk
dWxlT25jZS5hcHBseSh5bixhcmd1bWVudHMpfSxNZS5uZXh0PWZ1bmN0aW9uKCl7dmFyIGUsdCxu
Ci1mb3IoZT1hcmd1bWVudHMubGVuZ3RoLHQ9QXJyYXkoZSksbj0wO248ZTtuKyspdFtuXT1hcmd1
bWVudHNbbl0KLXJldHVybiB0LnB1c2goMSkseW4ubGF0ZXIuYXBwbHkoeW4sdCl9LE1lLmNhbmNl
bD1mdW5jdGlvbihlKXtyZXR1cm4geW4uY2FuY2VsKGUpfSxNZS5kZWJvdW5jZT1mdW5jdGlvbigp
e3JldHVybiB5bi5kZWJvdW5jZS5hcHBseSh5bixhcmd1bWVudHMpfSxNZS50aHJvdHRsZT1mdW5j
dGlvbigpe3JldHVybiB5bi50aHJvdHRsZS5hcHBseSh5bixhcmd1bWVudHMpfSxNZS5fYWRkUXVl
dWU9ZnVuY3Rpb24oZSx0KXstMT09PU1lLnF1ZXVlcy5pbmRleE9mKGUpJiZNZS5xdWV1ZXMuc3Bs
aWNlKE1lLnF1ZXVlcy5pbmRleE9mKHQpKzEsMCxlKX0KLXZhciB2bj1mdW5jdGlvbigpe2Z1bmN0
aW9uIGUoKXt0aGlzLl9yZWdpc3RyeT1bXSx0aGlzLl9jb3JlTGliSW5kZXg9MH1yZXR1cm4gZS5w
cm90b3R5cGUuaXNSZWdpc3RlcmVkPWZ1bmN0aW9uKGUpe3JldHVybiEhdGhpcy5fZ2V0TGlicmFy
eUJ5TmFtZShlKX0sZX0oKQotdm4ucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp2bixfZ2V0TGlicmFy
eUJ5TmFtZTpmdW5jdGlvbihlKXt2YXIgdCxuPXRoaXMuX3JlZ2lzdHJ5LHI9bi5sZW5ndGgKLWZv
cih0PTA7dDxyO3QrKylpZihuW3RdLm5hbWU9PT1lKXJldHVybiBuW3RdfSxyZWdpc3RlcjpmdW5j
dGlvbihlLHQsbil7dmFyIHI9dGhpcy5fcmVnaXN0cnkubGVuZ3RoCi10aGlzLl9nZXRMaWJyYXJ5
QnlOYW1lKGUpfHwobiYmKHI9dGhpcy5fY29yZUxpYkluZGV4KyspLHRoaXMuX3JlZ2lzdHJ5LnNw
bGljZShyLDAse25hbWU6ZSx2ZXJzaW9uOnR9KSl9LHJlZ2lzdGVyQ29yZUxpYnJhcnk6ZnVuY3Rp
b24oZSx0KXt0aGlzLnJlZ2lzdGVyKGUsdCwhMCl9LGRlUmVnaXN0ZXI6ZnVuY3Rpb24oZSl7dmFy
IHQ9dGhpcy5fZ2V0TGlicmFyeUJ5TmFtZShlKSxuPXZvaWQgMAotdCYmKG49dGhpcy5fcmVnaXN0
cnkuaW5kZXhPZih0KSx0aGlzLl9yZWdpc3RyeS5zcGxpY2UobiwxKSl9fQotdmFyIGJuPW5ldyB2
bgotcWUuY3JlYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB0aGlzfSxxZS5wcm90b3R5cGU9e2Nv
bnN0cnVjdG9yOnFlLGNsZWFyOmZ1bmN0aW9uKCl7dGhpcy5wcmVzZW5jZVNldD1PYmplY3QuY3Jl
YXRlKG51bGwpLHRoaXMubGlzdD1bXSx0aGlzLnNpemU9MH0sYWRkOmZ1bmN0aW9uKGUsdCl7dmFy
IHI9dHx8bi5ndWlkRm9yKGUpLGk9dGhpcy5wcmVzZW5jZVNldCxvPXRoaXMubGlzdAotcmV0dXJu
ITAhPT1pW3JdJiYoaVtyXT0hMCx0aGlzLnNpemU9by5wdXNoKGUpKSx0aGlzfSxkZWxldGU6ZnVu
Y3Rpb24oZSx0KXt2YXIgcixpPXR8fG4uZ3VpZEZvcihlKSxvPXRoaXMucHJlc2VuY2VTZXQscz10
aGlzLmxpc3QKLXJldHVybiEwPT09b1tpXSYmKGRlbGV0ZSBvW2ldLHI9cy5pbmRleE9mKGUpLHI+
LTEmJnMuc3BsaWNlKHIsMSksdGhpcy5zaXplPXMubGVuZ3RoLCEwKX0saXNFbXB0eTpmdW5jdGlv
bigpe3JldHVybiAwPT09dGhpcy5zaXplfSxoYXM6ZnVuY3Rpb24oZSl7aWYoMD09PXRoaXMuc2l6
ZSlyZXR1cm4hMQotdmFyIHQ9bi5ndWlkRm9yKGUpCi1yZXR1cm4hMD09PXRoaXMucHJlc2VuY2VT
ZXRbdF19LGZvckVhY2g6ZnVuY3Rpb24oZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUmJkZlKGUp
LDAhPT10aGlzLnNpemUpe3ZhciB0LG4scj10aGlzLmxpc3QKLWlmKDI9PT1hcmd1bWVudHMubGVu
Z3RoKWZvcih0PTA7dDxyLmxlbmd0aDt0KyspZS5jYWxsKGFyZ3VtZW50c1sxXSxyW3RdKQotZWxz
ZSBmb3Iobj0wO248ci5sZW5ndGg7bisrKWUocltuXSl9fSx0b0FycmF5OmZ1bmN0aW9uKCl7cmV0
dXJuIHRoaXMubGlzdC5zbGljZSgpfSxjb3B5OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jb25zdHJ1
Y3Rvcix0PW5ldyBlCi1yZXR1cm4gdC5wcmVzZW5jZVNldD1VZSh0aGlzLnByZXNlbmNlU2V0KSx0
Lmxpc3Q9dGhpcy50b0FycmF5KCksdC5zaXplPXRoaXMuc2l6ZSx0fX0sSGUuY3JlYXRlPWZ1bmN0
aW9uKCl7cmV0dXJuIG5ldyB0aGlzfSxIZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkhlLHNpemU6
MCxnZXQ6ZnVuY3Rpb24oZSl7aWYoMCE9PXRoaXMuc2l6ZSl7cmV0dXJuIHRoaXMuX3ZhbHVlc1tu
Lmd1aWRGb3IoZSldfX0sc2V0OmZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5fa2V5cyxpPXRoaXMu
X3ZhbHVlcyxvPW4uZ3VpZEZvcihlKSxzPS0wPT09ZT8wOmUKLXJldHVybiByLmFkZChzLG8pLGlb
b109dCx0aGlzLnNpemU9ci5zaXplLHRoaXN9LGRlbGV0ZTpmdW5jdGlvbihlKXtpZigwPT09dGhp
cy5zaXplKXJldHVybiExCi12YXIgdD10aGlzLl9rZXlzLHI9dGhpcy5fdmFsdWVzLGk9bi5ndWlk
Rm9yKGUpCi1yZXR1cm4hIXQuZGVsZXRlKGUsaSkmJihkZWxldGUgcltpXSx0aGlzLnNpemU9dC5z
aXplLCEwKX0saGFzOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9rZXlzLmhhcyhlKX0sZm9yRWFj
aDpmdW5jdGlvbihlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSYmRmUoZSksMCE9PXRoaXMuc2l6
ZSl7dmFyIHQ9dGhpcyxuPXZvaWQgMCxyPXZvaWQgMAotMj09PWFyZ3VtZW50cy5sZW5ndGg/KHI9
YXJndW1lbnRzWzFdLG49ZnVuY3Rpb24obil7cmV0dXJuIGUuY2FsbChyLHQuZ2V0KG4pLG4sdCl9
KTpuPWZ1bmN0aW9uKG4pe3JldHVybiBlKHQuZ2V0KG4pLG4sdCl9LHRoaXMuX2tleXMuZm9yRWFj
aChuKX19LGNsZWFyOmZ1bmN0aW9uKCl7dGhpcy5fa2V5cy5jbGVhcigpLHRoaXMuX3ZhbHVlcz1P
YmplY3QuY3JlYXRlKG51bGwpLHRoaXMuc2l6ZT0wfSxjb3B5OmZ1bmN0aW9uKCl7cmV0dXJuIEJl
KHRoaXMsbmV3IEhlKX19LFZlLmNyZWF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gZT9uZXcgVmUoZSk6
bmV3IEhlfSxWZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShIZS5wcm90b3R5cGUpLFZlLnByb3Rv
dHlwZS5jb25zdHJ1Y3Rvcj1WZSxWZS5wcm90b3R5cGUuX3N1cGVyJGNvbnN0cnVjdG9yPUhlLFZl
LnByb3RvdHlwZS5fc3VwZXIkZ2V0PUhlLnByb3RvdHlwZS5nZXQsVmUucHJvdG90eXBlLmdldD1m
dW5jdGlvbihlKXt2YXIgdCxuPXRoaXMuaGFzKGUpCi1yZXR1cm4gbj90aGlzLl9zdXBlciRnZXQo
ZSk6KHQ9dGhpcy5kZWZhdWx0VmFsdWUoZSksdGhpcy5zZXQoZSx0KSx0KX0sVmUucHJvdG90eXBl
LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gQmUodGhpcyxuZXcoMCx0aGlzLmNvbnN0cnVjdG9yKSh7
ZGVmYXVsdFZhbHVlOnRoaXMuZGVmYXVsdFZhbHVlfSkpfQotdmFyIF9uPWZ1bmN0aW9uKCl7ZnVu
Y3Rpb24gZShlLHQpe3RoaXMuX2Zyb209dCx0aGlzLl90bz1lLHRoaXMuX29uZVdheT12b2lkIDAs
dGhpcy5fZGlyZWN0aW9uPXZvaWQgMCx0aGlzLl9yZWFkeVRvU3luYz12b2lkIDAsdGhpcy5fZnJv
bU9iaj12b2lkIDAsdGhpcy5fZnJvbVBhdGg9dm9pZCAwLHRoaXMuX3RvT2JqPXZvaWQgMH1yZXR1
cm4gZS5wcm90b3R5cGUuY29weT1mdW5jdGlvbigpe3ZhciB0PW5ldyBlKHRoaXMuX3RvLHRoaXMu
X2Zyb20pCi1yZXR1cm4gdGhpcy5fb25lV2F5JiYodC5fb25lV2F5PSEwKSx0fSxlLnByb3RvdHlw
ZS5mcm9tPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9mcm9tPWUsdGhpc30sZS5wcm90b3R5cGUu
dG89ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3RvPWUsdGhpc30sZS5wcm90b3R5cGUub25lV2F5
PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29uZVdheT0hMCx0aGlzfSxlLnByb3RvdHlwZS50b1N0
cmluZz1mdW5jdGlvbigpe3ZhciBlPXRoaXMuX29uZVdheT8iW29uZVdheV0iOiIiCi1yZXR1cm4i
RW1iZXIuQmluZGluZzwiK24uZ3VpZEZvcih0aGlzKSsiPigiK3RoaXMuX2Zyb20rIiAtPiAiK3Ro
aXMuX3RvKyIpIitlfSxlLnByb3RvdHlwZS5jb25uZWN0PWZ1bmN0aW9uKGUpe3ZhciBuLHI9dm9p
ZCAwLGk9dm9pZCAwLG89dm9pZCAwCi1yZXR1cm4gb2UodGhpcy5fZnJvbSkmJihuPWFlKHRoaXMu
X2Zyb20pLChvPXQuY29udGV4dC5sb29rdXBbbl0pJiYocj1vLGk9dWUodGhpcy5fZnJvbSkpKSx2
b2lkIDA9PT1yJiYocj1lLGk9dGhpcy5fZnJvbSksZGUoZSx0aGlzLl90byxsZShyLGkpKSxHZShy
LGksdGhpcywiZnJvbURpZENoYW5nZSIpLHRoaXMuX29uZVdheXx8R2UoZSx0aGlzLl90byx0aGlz
LCJ0b0RpZENoYW5nZSIpLGYoZSwid2lsbERlc3Ryb3kiLHRoaXMsImRpc2Nvbm5lY3QiKSx0aGlz
Ll90byx0aGlzLl9mcm9tLHRoaXMuX29uZVdheSwhbyYmdGhpcy5fb25lV2F5LHRoaXMuX3JlYWR5
VG9TeW5jPSEwLHRoaXMuX2Zyb21PYmo9cix0aGlzLl9mcm9tUGF0aD1pLHRoaXMuX3RvT2JqPWUs
dGhpc30sZS5wcm90b3R5cGUuZGlzY29ubmVjdD1mdW5jdGlvbigpe3JldHVybiBLZSh0aGlzLl9m
cm9tT2JqLHRoaXMuX2Zyb21QYXRoLHRoaXMsImZyb21EaWRDaGFuZ2UiKSx0aGlzLl9vbmVXYXl8
fEtlKHRoaXMuX3RvT2JqLHRoaXMuX3RvLHRoaXMsInRvRGlkQ2hhbmdlIiksdGhpcy5fcmVhZHlU
b1N5bmM9ITEsdGhpc30sZS5wcm90b3R5cGUuZnJvbURpZENoYW5nZT1mdW5jdGlvbigpe3RoaXMu
X3NjaGVkdWxlU3luYygiZndkIil9LGUucHJvdG90eXBlLnRvRGlkQ2hhbmdlPWZ1bmN0aW9uKCl7
dGhpcy5fc2NoZWR1bGVTeW5jKCJiYWNrIil9LGUucHJvdG90eXBlLl9zY2hlZHVsZVN5bmM9ZnVu
Y3Rpb24oZSl7dmFyIHQ9dGhpcy5fZGlyZWN0aW9uCi12b2lkIDA9PT10JiYoTWUuc2NoZWR1bGUo
InN5bmMiLHRoaXMsIl9zeW5jIiksdGhpcy5fZGlyZWN0aW9uPWUpLCJiYWNrIj09PXQmJiJmd2Qi
PT09ZSYmKHRoaXMuX2RpcmVjdGlvbj0iZndkIil9LGUucHJvdG90eXBlLl9zeW5jPWZ1bmN0aW9u
KCl7dmFyIGUsbixyPXQuRU5WLkxPR19CSU5ESU5HUyxpPXRoaXMuX3RvT2JqCi1pZighaS5pc0Rl
c3Ryb3llZCYmdGhpcy5fcmVhZHlUb1N5bmMpe3ZhciBvPXRoaXMuX2RpcmVjdGlvbixzPXRoaXMu
X2Zyb21PYmosdT10aGlzLl9mcm9tUGF0aAotdGhpcy5fZGlyZWN0aW9uPXZvaWQgMCwiZndkIj09
PW8/KGU9bGUocyx1KSxyJiZhLmxvZygiICIsdGhpcy50b1N0cmluZygpLCItPiIsZSxzKSx0aGlz
Ll9vbmVXYXk/ZGUoaSx0aGlzLl90byxlKTpZZShpLHRoaXMuX3RvLHRoaXMsInRvRGlkQ2hhbmdl
IixmdW5jdGlvbigpe2RlKGksdGhpcy5fdG8sZSl9KSk6ImJhY2siPT09byYmKG49bGUoaSx0aGlz
Ll90byksciYmYS5sb2coIiAiLHRoaXMudG9TdHJpbmcoKSwiPC0iLG4saSksWWUocyx1LHRoaXMs
ImZyb21EaWRDaGFuZ2UiLGZ1bmN0aW9uKCl7ZGUocyx1LG4pfSkpfX0sZX0oKTsoZnVuY3Rpb24o
ZSx0KXtmb3IodmFyIG4gaW4gdCl0Lmhhc093blByb3BlcnR5KG4pJiYoZVtuXT10W25dKX0pKF9u
LHtmcm9tOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdGhpcyh2b2lkIDAsZSl9LHRvOmZ1bmN0aW9u
KGUpe3JldHVybiBuZXcgdGhpcyhlLHZvaWQgMCl9fSkKLXZhciB3bj1BcnJheS5wcm90b3R5cGUu
Y29uY2F0LEVuPUFycmF5LmlzQXJyYXkseG49e30KLWF0KCJub3Rib3VuZCIpLGF0KCJmb29CaW5k
aW5nIikKLXZhciBDbj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSxpKXt0aGlzLnByb3BlcnRpZXM9
aQotdmFyIG8scyxhLHU9ZSYmZS5sZW5ndGgKLWlmKHU+MCl7Zm9yKG89bmV3IEFycmF5KHUpLHM9
MDtzPHU7cysrKWE9ZVtzXSxvW3NdPWEgaW5zdGFuY2VvZiB0P2E6bmV3IHQodm9pZCAwLGEpCi10
aGlzLm1peGlucz1vfWVsc2UgdGhpcy5taXhpbnM9dm9pZCAwCi10aGlzLm93bmVyQ29uc3RydWN0
b3I9dm9pZCAwLHRoaXMuX3dpdGhvdXQ9dm9pZCAwLHRoaXNbbi5HVUlEX0tFWV09bnVsbCx0aGlz
W24uTkFNRV9LRVldPW51bGwsci5kZWJ1Z1NlYWwodGhpcyl9cmV0dXJuIHQuYXBwbHlQYXJ0aWFs
PWZ1bmN0aW9uKGUpe3ZhciB0LG4scgotZm9yKHQ9YXJndW1lbnRzLmxlbmd0aCxuPUFycmF5KHQ+
MT90LTE6MCkscj0xO3I8dDtyKyspbltyLTFdPWFyZ3VtZW50c1tyXQotcmV0dXJuIGh0KGUsbiwh
MCl9LHQuY3JlYXRlPWZ1bmN0aW9uKCl7T249ITAKLXZhciBlLHQsbixyPXRoaXMKLWZvcihlPWFy
Z3VtZW50cy5sZW5ndGgsdD1BcnJheShlKSxuPTA7bjxlO24rKyl0W25dPWFyZ3VtZW50c1tuXQot
cmV0dXJuIG5ldyByKHQsdm9pZCAwKX0sdC5taXhpbnM9ZnVuY3Rpb24odCl7dmFyIG49ZS5wZWVr
TWV0YSh0KSxyPVtdCi1yZXR1cm4gbj8obi5mb3JFYWNoTWl4aW5zKGZ1bmN0aW9uKGUsdCl7dC5w
cm9wZXJ0aWVzfHxyLnB1c2godCl9KSxyKTpyfSx0fSgpCi1Dbi5fYXBwbHk9aHQsQ24uZmluaXNo
UGFydGlhbD1sdAotdmFyIE9uPSExLEFuPUNuLnByb3RvdHlwZQotQW4ucmVvcGVuPWZ1bmN0aW9u
KCl7dmFyIGU9dm9pZCAwCi10aGlzLnByb3BlcnRpZXM/KGU9bmV3IENuKHZvaWQgMCx0aGlzLnBy
b3BlcnRpZXMpLHRoaXMucHJvcGVydGllcz12b2lkIDAsdGhpcy5taXhpbnM9W2VdKTp0aGlzLm1p
eGluc3x8KHRoaXMubWl4aW5zPVtdKQotdmFyIHQ9dGhpcy5taXhpbnMsbj12b2lkIDAKLWZvcihu
PTA7bjxhcmd1bWVudHMubGVuZ3RoO24rKyllPWFyZ3VtZW50c1tuXSxlIGluc3RhbmNlb2YgQ24/
dC5wdXNoKGUpOnQucHVzaChuZXcgQ24odm9pZCAwLGUpKQotcmV0dXJuIHRoaXN9LEFuLmFwcGx5
PWZ1bmN0aW9uKGUpe3JldHVybiBodChlLFt0aGlzXSwhMSl9LEFuLmFwcGx5UGFydGlhbD1mdW5j
dGlvbihlKXtyZXR1cm4gaHQoZSxbdGhpc10sITApfSxBbi50b1N0cmluZz1PYmplY3QudG9TdHJp
bmcsQW4uZGV0ZWN0PWZ1bmN0aW9uKHQpe2lmKCJvYmplY3QiIT10eXBlb2YgdHx8bnVsbD09PXQp
cmV0dXJuITEKLWlmKHQgaW5zdGFuY2VvZiBDbilyZXR1cm4gZHQodCx0aGlzLHt9KQotdmFyIHI9
ZS5wZWVrTWV0YSh0KQotcmV0dXJuISFyJiYhIXIucGVla01peGlucyhuLmd1aWRGb3IodGhpcykp
fSxBbi53aXRob3V0PWZ1bmN0aW9uKCl7dmFyIGUsdCxuLHI9bmV3IENuKFt0aGlzXSkKLWZvcihl
PWFyZ3VtZW50cy5sZW5ndGgsdD1BcnJheShlKSxuPTA7bjxlO24rKyl0W25dPWFyZ3VtZW50c1tu
XQotcmV0dXJuIHIuX3dpdGhvdXQ9dCxyfSxBbi5rZXlzPWZ1bmN0aW9uKCl7dmFyIGU9e30KLXJl
dHVybiBtdChlLHRoaXMse30pLE9iamVjdC5rZXlzKGUpfSxyLmRlYnVnU2VhbChBbikKLXZhciBU
bj1uZXcgSQotVG4udG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iKFJlcXVpcmVkIFByb3BlcnR5
KSJ9LGd0LnByb3RvdHlwZT1uZXcgSSx2dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShJLnByb3Rv
dHlwZSkKLXZhciBTbj12dC5wcm90b3R5cGUsUm49d2UucHJvdG90eXBlLGtuPXVuLnByb3RvdHlw
ZQotU24uX3N1cGVyJENvbnN0cnVjdG9yPXdlLFNuLmdldD1Sbi5nZXQsU24ucmVhZE9ubHk9Um4u
cmVhZE9ubHksU24udGVhcmRvd249Um4udGVhcmRvd24KLXZhciBObj1BcnJheS5wcm90b3R5cGUu
c3BsaWNlLFBuPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCl7dmFyIG49aS5wb3NzaWJsZUNvbnN0
cnVjdG9yUmV0dXJuKHRoaXMsZS5jYWxsKHRoaXMpKQotcmV0dXJuIG4uZGVzYz10LG59cmV0dXJu
IGkuaW5oZXJpdHModCxlKSx0LnByb3RvdHlwZS5zZXR1cD1mdW5jdGlvbihlLHQpe09iamVjdC5k
ZWZpbmVQcm9wZXJ0eShlLHQsdGhpcy5kZXNjKX0sdC5wcm90b3R5cGUudGVhcmRvd249ZnVuY3Rp
b24oKXt9LHR9KEkpCi1lLmRlZmF1bHQ9eHQsZS5jb21wdXRlZD1mdW5jdGlvbihlKXt2YXIgdD12
b2lkIDAKLWFyZ3VtZW50cy5sZW5ndGg+MSYmKHQ9W10uc2xpY2UuY2FsbChhcmd1bWVudHMpLGU9
dC5wb3AoKSkKLXZhciBuPW5ldyB3ZShlKQotcmV0dXJuIHQmJm4ucHJvcGVydHkuYXBwbHkobix0
KSxufSxlLmNhY2hlRm9yPUVlLGUuQ29tcHV0ZWRQcm9wZXJ0eT13ZSxlLmFsaWFzPWZ1bmN0aW9u
KGUpe3JldHVybiBuZXcgdW4oZSl9LGUubWVyZ2U9ZnVuY3Rpb24oZSx0KXtpZighdHx8Im9iamVj
dCIhPXR5cGVvZiB0KXJldHVybiBlCi12YXIgbixyPU9iamVjdC5rZXlzKHQpLGk9dm9pZCAwCi1m
b3Iobj0wO248ci5sZW5ndGg7bisrKWk9cltuXSxlW2ldPXRbaV0KLXJldHVybiBlfSxlLmRlcHJl
Y2F0ZVByb3BlcnR5PWZ1bmN0aW9uKGUsdCxuLHIpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQs
e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHNldDpmdW5jdGlvbihlKXtmZSh0aGlzLG4s
ZSl9LGdldDpmdW5jdGlvbigpe3JldHVybiBsZSh0aGlzLG4pfX0pfSxlLmluc3RydW1lbnQ9ZnVu
Y3Rpb24oZSx0LG4scil7aWYoYXJndW1lbnRzLmxlbmd0aDw9MyYmImZ1bmN0aW9uIj09dHlwZW9m
IHQmJihyPW4sbj10LHQ9dm9pZCAwKSwwPT09bG4ubGVuZ3RoKXJldHVybiBuLmNhbGwocikKLXZh
ciBpPXR8fHt9LG89U2UoZSxmdW5jdGlvbigpe3JldHVybiBpfSkKLXJldHVybiBvP0FlKG4sbyxp
LHIpOm4uY2FsbChyKX0sZS5faW5zdHJ1bWVudFN0YXJ0PVNlLGUuaW5zdHJ1bWVudGF0aW9uUmVz
ZXQ9ZnVuY3Rpb24oKXtsbi5sZW5ndGg9MCxjbj17fX0sZS5pbnN0cnVtZW50YXRpb25TdWJzY3Jp
YmU9ZnVuY3Rpb24oZSx0KXt2YXIgbixyPWUuc3BsaXQoIi4iKSxpPXZvaWQgMCxvPVtdCi1mb3Io
bj0wO248ci5sZW5ndGg7bisrKWk9cltuXSwiKiI9PT1pP28ucHVzaCgiW15cXC5dKiIpOm8ucHVz
aChpKQotbz1vLmpvaW4oIlxcLiIpLG8rPSIoXFwuLiopPyIKLXZhciBzPXtwYXR0ZXJuOmUscmVn
ZXg6bmV3IFJlZ0V4cCgiXiIrbysiJCIpLG9iamVjdDp0fQotcmV0dXJuIGxuLnB1c2gocyksY249
e30sc30sZS5pbnN0cnVtZW50YXRpb25VbnN1YnNjcmliZT1mdW5jdGlvbihlKXt2YXIgdCxuPXZv
aWQgMAotZm9yKHQ9MDt0PGxuLmxlbmd0aDt0KyspbG5bdF09PT1lJiYobj10KQotbG4uc3BsaWNl
KG4sMSksY249e319LGUuZ2V0T25lcnJvcj1mdW5jdGlvbigpe3JldHVybiBobn0sZS5zZXRPbmVy
cm9yPVJlLGUuZGlzcGF0Y2hFcnJvcj1rZSxlLnNldERpc3BhdGNoT3ZlcnJpZGU9ZnVuY3Rpb24o
ZSl7ZG49ZX0sZS5nZXREaXNwYXRjaE92ZXJyaWRlPWZ1bmN0aW9uKCl7cmV0dXJuIGRufSxlLk1F
VEFfREVTQz0kdCxlLm1ldGE9aWUsZS5DYWNoZT1RdCxlLl9nZXRQYXRoPWNlLGUuZ2V0PWxlLGUu
Z2V0V2l0aERlZmF1bHQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWxlKGUsdCkKLXJldHVybiB2b2lk
IDA9PT1yP246cn0sZS5zZXQ9ZmUsZS50cnlTZXQ9ZGUsZS5XZWFrTWFwPWplLGUuYWNjdW11bGF0
ZUxpc3RlbmVycz1wLGUuYWRkTGlzdGVuZXI9ZixlLmhhc0xpc3RlbmVycz1mdW5jdGlvbih0LG4p
e3ZhciByPWUucGVla01ldGEodCkKLWlmKCFyKXJldHVybiExCi12YXIgaT1yLm1hdGNoaW5nTGlz
dGVuZXJzKG4pCi1yZXR1cm4gdm9pZCAwIT09aSYmaS5sZW5ndGg+MH0sZS5saXN0ZW5lcnNGb3I9
eQotZS5vbj1mdW5jdGlvbigpe2ZvcihlPWFyZ3VtZW50cy5sZW5ndGgsdD1BcnJheShlKSxuPTA7
bjxlO24rKyl0W25dPWFyZ3VtZW50c1tuXQotdmFyIGUsdCxuLHI9dC5wb3AoKQotcmV0dXJuIHIu
X19lbWJlcl9saXN0ZW5zX189dCxyfSxlLnJlbW92ZUxpc3RlbmVyPWgsZS5zZW5kRXZlbnQ9Zyxl
LnN1c3BlbmRMaXN0ZW5lcj1kLGUuc3VzcGVuZExpc3RlbmVycz1tLGUud2F0Y2hlZEV2ZW50cz1m
dW5jdGlvbihlKXtyZXR1cm4gaWUoZSkud2F0Y2hlZEV2ZW50cygpfSxlLmlzTm9uZT1EZSxlLmlz
RW1wdHk9TGUsZS5pc0JsYW5rPUllLGUuaXNQcmVzZW50PWZ1bmN0aW9uKGUpe3JldHVybiFJZShl
KX0sZS5ydW49TWUsZS5PYnNlcnZlclNldD1SdCxlLmJlZ2luUHJvcGVydHlDaGFuZ2VzPU4sZS5j
aGFuZ2VQcm9wZXJ0aWVzPWosZS5lbmRQcm9wZXJ0eUNoYW5nZXM9UCxlLm92ZXJyaWRlQ2hhaW5z
PWssZS5wcm9wZXJ0eURpZENoYW5nZT1DLGUucHJvcGVydHlXaWxsQ2hhbmdlPXgsZS5QUk9QRVJU
WV9ESURfQ0hBTkdFPWt0LGUuZGVmaW5lUHJvcGVydHk9TSxlLkRlc2NyaXB0b3I9SSxlLl9oYXND
YWNoZWRDb21wdXRlZFByb3BlcnRpZXM9ZnVuY3Rpb24oKXtJdD0hMH0sZS53YXRjaEtleT16LGUu
dW53YXRjaEtleT1VLGUuQ2hhaW5Ob2RlPXp0LGUuZmluaXNoQ2hhaW5zPWZ1bmN0aW9uKGUpe3Zh
ciB0PWUucmVhZGFibGVDaGFpbldhdGNoZXJzKCkKLXZvaWQgMCE9PXQmJnQucmV2YWxpZGF0ZUFs
bCgpLHZvaWQgMCE9PWUucmVhZGFibGVDaGFpbnMoKSYmZS53cml0YWJsZUNoYWlucyhxKX0sZS5y
ZW1vdmVDaGFpbldhdGNoZXI9WSxlLndhdGNoUGF0aD1ILGUudW53YXRjaFBhdGg9VixlLmRlc3Ry
b3k9ZnVuY3Rpb24oZSl7cmUoZSl9Ci1lLmlzV2F0Y2hpbmc9ZnVuY3Rpb24odCxuKXtpZigib2Jq
ZWN0IiE9dHlwZW9mIHR8fG51bGw9PT10KXJldHVybiExCi12YXIgcj1lLnBlZWtNZXRhKHQpCi1y
ZXR1cm4ociYmci5wZWVrV2F0Y2hpbmcobikpPjB9LGUudW53YXRjaD12ZSxlLndhdGNoPXllLGUu
d2F0Y2hlckNvdW50PWZ1bmN0aW9uKHQsbil7dmFyIHI9ZS5wZWVrTWV0YSh0KQotcmV0dXJuIHIm
JnIucGVla1dhdGNoaW5nKG4pfHwwfSxlLmxpYnJhcmllcz1ibixlLkxpYnJhcmllcz12bixlLk1h
cD1IZSxlLk1hcFdpdGhEZWZhdWx0PVZlLGUuT3JkZXJlZFNldD1xZSxlLmdldFByb3BlcnRpZXM9
ZnVuY3Rpb24oZSl7dmFyIHQ9e30sbj1hcmd1bWVudHMscj0xCi1mb3IoMj09PWFyZ3VtZW50cy5s
ZW5ndGgmJkFycmF5LmlzQXJyYXkoYXJndW1lbnRzWzFdKSYmKHI9MCxuPWFyZ3VtZW50c1sxXSk7
cjxuLmxlbmd0aDtyKyspdFtuW3JdXT1sZShlLG5bcl0pCi1yZXR1cm4gdH0sZS5zZXRQcm9wZXJ0
aWVzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQmJiJvYmplY3QiPT10eXBlb2YgdD8oaihmdW5jdGlv
bigpe3ZhciBuLHI9T2JqZWN0LmtleXModCksaT12b2lkIDAKLWZvcihuPTA7bjxyLmxlbmd0aDtu
KyspaT1yW25dLGZlKGUsaSx0W2ldKX0pLHQpOnR9LGUuZXhwYW5kUHJvcGVydGllcz1tZSxlLl9z
dXNwZW5kT2JzZXJ2ZXI9WWUsZS5fc3VzcGVuZE9ic2VydmVycz1mdW5jdGlvbihlLHQsbixyLGkp
e3JldHVybiBtKGUsdC5tYXAoV2UpLG4scixpKX0sZS5hZGRPYnNlcnZlcj1HZSxlLm9ic2VydmVy
c0Zvcj1mdW5jdGlvbihlLHQpe3JldHVybiB5KGUsV2UodCkpfSxlLnJlbW92ZU9ic2VydmVyPUtl
LGUuX2FkZEJlZm9yZU9ic2VydmVyPVFlLGUuX3JlbW92ZUJlZm9yZU9ic2VydmVyPUplLGUuTWl4
aW49Q24sZS5hbGlhc01ldGhvZD1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IGd0KGUpfSxlLl9pbW1l
ZGlhdGVPYnNlcnZlcj1mdW5jdGlvbigpe3ZhciBlCi1mb3IoZT0wO2U8YXJndW1lbnRzLmxlbmd0
aDtlKyspYXJndW1lbnRzW2VdCi1yZXR1cm4geXQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxlLl9i
ZWZvcmVPYnNlcnZlcj1mdW5jdGlvbigpe2ZvcihlPWFyZ3VtZW50cy5sZW5ndGgsdD1BcnJheShl
KSxuPTA7bjxlO24rKyl0W25dPWFyZ3VtZW50c1tuXQotdmFyIGUsdCxuLGksbz10LnNsaWNlKC0x
KVswXSxzPXZvaWQgMCxhPWZ1bmN0aW9uKGUpe3MucHVzaChlKX0sdT10LnNsaWNlKDAsLTEpCi1m
b3IoImZ1bmN0aW9uIiE9dHlwZW9mIG8mJihvPXRbMF0sdT10LnNsaWNlKDEpKSxzPVtdLGk9MDtp
PHUubGVuZ3RoOysraSltZSh1W2ldLGEpCi1pZigiZnVuY3Rpb24iIT10eXBlb2Ygbyl0aHJvdyBu
ZXcgci5FbWJlckVycm9yKCJfYmVmb3JlT2JzZXJ2ZXIgY2FsbGVkIHdpdGhvdXQgYSBmdW5jdGlv
biIpCi1yZXR1cm4gby5fX2VtYmVyX29ic2VydmVzQmVmb3JlX189cyxvfSxlLm1peGluPWZ1bmN0
aW9uKGUpe3ZhciB0LG4scgotZm9yKHQ9YXJndW1lbnRzLmxlbmd0aCxuPUFycmF5KHQ+MT90LTE6
MCkscj0xO3I8dDtyKyspbltyLTFdPWFyZ3VtZW50c1tyXQotcmV0dXJuIGh0KGUsbiwhMSksZX0s
ZS5vYnNlcnZlcj15dCxlLnJlcXVpcmVkPWZ1bmN0aW9uKCl7cmV0dXJuIFRufSxlLlJFUVVJUkVE
PVRuLGUuaGFzVW5wcm9jZXNzZWRNaXhpbnM9ZnVuY3Rpb24oKXtyZXR1cm4gT259LGUuY2xlYXJV
bnByb2Nlc3NlZE1peGlucz1mdW5jdGlvbigpe09uPSExfSxlLmRldGVjdEJpbmRpbmc9YXQKLWUu
QmluZGluZz1fbixlLmJpbmQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBuZXcgX24odCxuKS5jb25u
ZWN0KGUpfSxlLmlzR2xvYmFsUGF0aD1vZSxlLkluamVjdGVkUHJvcGVydHk9dnQsZS5zZXRIYXNW
aWV3cz1mdW5jdGlvbihlKXtUdD1lfSxlLnRhZ0ZvclByb3BlcnR5PWZ1bmN0aW9uKGUsdCxuKXtp
Zigib2JqZWN0IiE9dHlwZW9mIGV8fG51bGw9PT1lKXJldHVybiBvLkNPTlNUQU5UX1RBRwotdmFy
IHI9bnx8aWUoZSkKLWlmKHIuaXNQcm94eSgpKXJldHVybiBiKGUscikKLXZhciBpPXIud3JpdGFi
bGVUYWdzKCkscz1pW3RdCi1yZXR1cm4gc3x8KGlbdF09digpKX0sZS50YWdGb3I9YixlLm1hcmtP
YmplY3RBc0RpcnR5PV8sZS5yZXBsYWNlPWZ1bmN0aW9uKGUsdCxuLHIpe2Zvcih2YXIgaT1bXS5j
b25jYXQociksbz1bXSxzPXQsYT1uLHU9dm9pZCAwLGw9dm9pZCAwO2kubGVuZ3RoOyl1PWE+NmU0
PzZlNDphLHU8PTAmJih1PTApLGw9aS5zcGxpY2UoMCw2ZTQpLGw9W3MsdV0uY29uY2F0KGwpLHMr
PTZlNCxhLT11LG89by5jb25jYXQoTm4uYXBwbHkoZSxsKSkKLXJldHVybiBvfSxlLmRpZFJlbmRl
cj12b2lkIDAsZS5hc3NlcnROb3RSZW5kZXJlZD12b2lkIDAsZS5pc1Byb3h5PWZ1bmN0aW9uKHQp
e3ZhciBuCi1yZXR1cm4hKCJvYmplY3QiIT10eXBlb2YgdHx8IXQpJiYoKG49ZS5wZWVrTWV0YSh0
KSkmJm4uaXNQcm94eSgpKX0sZS5kZXNjcmlwdG9yPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgUG4o
ZSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0pLGUo
ImVtYmVyLXJvdXRpbmcvZXh0L2NvbnRyb2xsZXIiLFsiZXhwb3J0cyIsImVtYmVyLW1ldGFsIiwi
ZW1iZXItcnVudGltZSIsImVtYmVyLXJvdXRpbmcvdXRpbHMiXSxmdW5jdGlvbihlLHQsbixyKXsi
dXNlIHN0cmljdCIKLW4uQ29udHJvbGxlck1peGluLnJlb3Blbih7Y29uY2F0ZW5hdGVkUHJvcGVy
dGllczpbInF1ZXJ5UGFyYW1zIl0scXVlcnlQYXJhbXM6bnVsbCxfcXBEZWxlZ2F0ZTpudWxsLF9x
cENoYW5nZWQ6ZnVuY3Rpb24oZSxuKXt2YXIgcj1uLnN1YnN0cigwLG4ubGVuZ3RoLTMpOygwLGUu
X3FwRGVsZWdhdGUpKHIsKDAsdC5nZXQpKGUscikpfSx0cmFuc2l0aW9uVG9Sb3V0ZTpmdW5jdGlv
bigpe3ZhciBlLG4saSxvPSgwLHQuZ2V0KSh0aGlzLCJ0YXJnZXQiKSxzPW8udHJhbnNpdGlvblRv
Um91dGV8fG8udHJhbnNpdGlvblRvCi1mb3IoZT1hcmd1bWVudHMubGVuZ3RoLG49QXJyYXkoZSks
aT0wO2k8ZTtpKyspbltpXT1hcmd1bWVudHNbaV0KLXJldHVybiBzLmFwcGx5KG8sKDAsci5wcmVm
aXhSb3V0ZU5hbWVBcmcpKHRoaXMsbikpfSxyZXBsYWNlUm91dGU6ZnVuY3Rpb24oKXt2YXIgZSxu
LGksbz0oMCx0LmdldCkodGhpcywidGFyZ2V0Iikscz1vLnJlcGxhY2VSb3V0ZXx8by5yZXBsYWNl
V2l0aAotZm9yKGU9YXJndW1lbnRzLmxlbmd0aCxuPUFycmF5KGUpLGk9MDtpPGU7aSsrKW5baV09
YXJndW1lbnRzW2ldCi1yZXR1cm4gcy5hcHBseShvLCgwLHIucHJlZml4Um91dGVOYW1lQXJnKShv
LG4pKX19KSxlLmRlZmF1bHQ9bi5Db250cm9sbGVyTWl4aW59KSxlKCJlbWJlci1yb3V0aW5nL2V4
dC9ydW5fbG9vcCIsWyJlbWJlci1tZXRhbCJdLGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IgotZS5y
dW4uX2FkZFF1ZXVlKCJyb3V0ZXJUcmFuc2l0aW9ucyIsImFjdGlvbnMiKX0pCi1lKCJlbWJlci1y
b3V0aW5nL2luZGV4IixbImV4cG9ydHMiLCJlbWJlci1yb3V0aW5nL2xvY2F0aW9uL2FwaSIsImVt
YmVyLXJvdXRpbmcvbG9jYXRpb24vbm9uZV9sb2NhdGlvbiIsImVtYmVyLXJvdXRpbmcvbG9jYXRp
b24vaGFzaF9sb2NhdGlvbiIsImVtYmVyLXJvdXRpbmcvbG9jYXRpb24vaGlzdG9yeV9sb2NhdGlv
biIsImVtYmVyLXJvdXRpbmcvbG9jYXRpb24vYXV0b19sb2NhdGlvbiIsImVtYmVyLXJvdXRpbmcv
c3lzdGVtL2dlbmVyYXRlX2NvbnRyb2xsZXIiLCJlbWJlci1yb3V0aW5nL3N5c3RlbS9jb250cm9s
bGVyX2ZvciIsImVtYmVyLXJvdXRpbmcvc3lzdGVtL2RzbCIsImVtYmVyLXJvdXRpbmcvc3lzdGVt
L3JvdXRlciIsImVtYmVyLXJvdXRpbmcvc3lzdGVtL3JvdXRlIiwiZW1iZXItcm91dGluZy9zeXN0
ZW0vcXVlcnlfcGFyYW1zIiwiZW1iZXItcm91dGluZy9zZXJ2aWNlcy9yb3V0aW5nIiwiZW1iZXIt
cm91dGluZy9zZXJ2aWNlcy9yb3V0ZXIiLCJlbWJlci1yb3V0aW5nL3N5c3RlbS9jYWNoZSIsImVt
YmVyLXJvdXRpbmcvZXh0L3J1bl9sb29wIiwiZW1iZXItcm91dGluZy9leHQvY29udHJvbGxlciJd
LGZ1bmN0aW9uKGUsdCxuLHIsaSxvLHMsYSx1LGwsYyxwLGYsaCxkKXsidXNlIHN0cmljdCIKLWUu
QnVja2V0Q2FjaGU9ZS5Sb3V0ZXJTZXJ2aWNlPWUuUm91dGluZ1NlcnZpY2U9ZS5RdWVyeVBhcmFt
cz1lLlJvdXRlPWUuUm91dGVyPWUuUm91dGVyRFNMPWUuY29udHJvbGxlckZvcj1lLmdlbmVyYXRl
Q29udHJvbGxlckZhY3Rvcnk9ZS5nZW5lcmF0ZUNvbnRyb2xsZXI9ZS5BdXRvTG9jYXRpb249ZS5I
aXN0b3J5TG9jYXRpb249ZS5IYXNoTG9jYXRpb249ZS5Ob25lTG9jYXRpb249ZS5Mb2NhdGlvbj12
b2lkIDAsT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIkxvY2F0aW9uIix7ZW51bWVyYWJsZTohMCxn
ZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdC5kZWZhdWx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShl
LCJOb25lTG9jYXRpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBuLmRl
ZmF1bHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIkhhc2hMb2NhdGlvbiIse2VudW1lcmFi
bGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuZGVmYXVsdH19KSxPYmplY3QuZGVmaW5lUHJv
cGVydHkoZSwiSGlzdG9yeUxvY2F0aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXty
ZXR1cm4gaS5kZWZhdWx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJBdXRvTG9jYXRpb24i
LHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvLmRlZmF1bHR9fSksT2JqZWN0
LmRlZmluZVByb3BlcnR5KGUsImdlbmVyYXRlQ29udHJvbGxlciIse2VudW1lcmFibGU6ITAsZ2V0
OmZ1bmN0aW9uKCl7cmV0dXJuIHMuZGVmYXVsdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwi
Z2VuZXJhdGVDb250cm9sbGVyRmFjdG9yeSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7
cmV0dXJuIHMuZ2VuZXJhdGVDb250cm9sbGVyRmFjdG9yeX19KSxPYmplY3QuZGVmaW5lUHJvcGVy
dHkoZSwiY29udHJvbGxlckZvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJu
IGEuZGVmYXVsdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiUm91dGVyRFNMIix7ZW51bWVy
YWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdS5kZWZhdWx0fX0pLE9iamVjdC5kZWZpbmVQ
cm9wZXJ0eShlLCJSb3V0ZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBs
LmRlZmF1bHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIlJvdXRlIix7ZW51bWVyYWJsZToh
MCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYy5kZWZhdWx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0
eShlLCJRdWVyeVBhcmFtcyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHAu
ZGVmYXVsdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiUm91dGluZ1NlcnZpY2UiLHtlbnVt
ZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBmLmRlZmF1bHR9fSksT2JqZWN0LmRlZmlu
ZVByb3BlcnR5KGUsIlJvdXRlclNlcnZpY2UiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigp
e3JldHVybiBoLmRlZmF1bHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIkJ1Y2tldENhY2hl
Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZC5kZWZhdWx0fX0pfSksZSgi
ZW1iZXItcm91dGluZy9sb2NhdGlvbi9hcGkiLFsiZXhwb3J0cyIsImVtYmVyLWRlYnVnIiwiZW1i
ZXItZW52aXJvbm1lbnQiLCJlbWJlci1yb3V0aW5nL2xvY2F0aW9uL3V0aWwiXSxmdW5jdGlvbihl
LHQsbixyKXsidXNlIHN0cmljdCIKLWUuZGVmYXVsdD17Y3JlYXRlOmZ1bmN0aW9uKGUpe3ZhciB0
PWUmJmUuaW1wbGVtZW50YXRpb24sbj10aGlzLmltcGxlbWVudGF0aW9uc1t0XQotcmV0dXJuIG4u
Y3JlYXRlLmFwcGx5KG4sYXJndW1lbnRzKX0saW1wbGVtZW50YXRpb25zOnt9LF9sb2NhdGlvbjpu
LmVudmlyb25tZW50LmxvY2F0aW9uLF9nZXRIYXNoOmZ1bmN0aW9uKCl7cmV0dXJuKDAsci5nZXRI
YXNoKSh0aGlzLmxvY2F0aW9uKX19fSksZSgiZW1iZXItcm91dGluZy9sb2NhdGlvbi9hdXRvX2xv
Y2F0aW9uIixbImV4cG9ydHMiLCJlbWJlci11dGlscyIsImVtYmVyLW1ldGFsIiwiZW1iZXItZGVi
dWciLCJlbWJlci1ydW50aW1lIiwiZW1iZXItZW52aXJvbm1lbnQiLCJlbWJlci1yb3V0aW5nL2xv
Y2F0aW9uL3V0aWwiXSxmdW5jdGlvbihlLHQsbixyLGksbyxzKXsidXNlIHN0cmljdCIKLWZ1bmN0
aW9uIGEoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHIsaSxvLHM9KDAsbi5nZXQpKHRoaXMsImNv
bmNyZXRlSW1wbGVtZW50YXRpb24iKQotZm9yKHI9YXJndW1lbnRzLmxlbmd0aCxpPUFycmF5KHIp
LG89MDtvPHI7bysrKWlbb109YXJndW1lbnRzW29dCi1yZXR1cm4oMCx0LnRyeUludm9rZSkocyxl
LGkpfX1mdW5jdGlvbiB1KGUpe3ZhciB0LG4scj1lLmxvY2F0aW9uLGk9ZS51c2VyQWdlbnQsbz1l
Lmhpc3RvcnksYT1lLmRvY3VtZW50TW9kZSx1PWUuZ2xvYmFsLHA9ZS5yb290VVJMLGY9Im5vbmUi
LGg9ITEsZD0oMCxzLmdldEZ1bGxQYXRoKShyKQotaWYoKDAscy5zdXBwb3J0c0hpc3RvcnkpKGks
bykpe2lmKHQ9bChwLHIpLGQ9PT10KXJldHVybiJoaXN0b3J5IgotIi8jIj09PWQuc3Vic3RyKDAs
Mik/KG8ucmVwbGFjZVN0YXRlKHtwYXRoOnR9LG51bGwsdCksZj0iaGlzdG9yeSIpOihoPSEwLCgw
LHMucmVwbGFjZVBhdGgpKHIsdCkpfWVsc2UoMCxzLnN1cHBvcnRzSGFzaENoYW5nZSkoYSx1KSYm
KG49YyhwLHIpLGQ9PT1ufHwiLyI9PT1kJiYiLyMvIj09PW4/Zj0iaGFzaCI6KGg9ITAsKDAscy5y
ZXBsYWNlUGF0aCkocixuKSkpCi1yZXR1cm4haCYmZn1mdW5jdGlvbiBsKGUsdCl7dmFyIG49KDAs
cy5nZXRQYXRoKSh0KSxyPSgwLHMuZ2V0SGFzaCkodCksaT0oMCxzLmdldFF1ZXJ5KSh0KSxvPShu
LmluZGV4T2YoZSksdm9pZCAwKSxhPXZvaWQgMAotcmV0dXJuIiMvIj09PXIuc3Vic3RyKDAsMik/
KGE9ci5zdWJzdHIoMSkuc3BsaXQoIiMiKSxvPWEuc2hpZnQoKSwiLyI9PT1uLmNoYXJBdChuLmxl
bmd0aC0xKSYmKG89by5zdWJzdHIoMSkpLG4rPW8raSxhLmxlbmd0aCYmKG4rPSIjIithLmpvaW4o
IiMiKSkpOm4rPWkrcixufWZ1bmN0aW9uIGMoZSx0KXt2YXIgbj1lLHI9bChlLHQpLGk9ci5zdWJz
dHIoZS5sZW5ndGgpCi1yZXR1cm4iIiE9PWkmJigiLyIhPT1pWzBdJiYoaT0iLyIraSksbis9IiMi
K2kpLG59ZS5nZXRIaXN0b3J5UGF0aD1sLGUuZ2V0SGFzaFBhdGg9YyxlLmRlZmF1bHQ9aS5PYmpl
Y3QuZXh0ZW5kKHtsb2NhdGlvbjpvLmVudmlyb25tZW50LmxvY2F0aW9uLGhpc3Rvcnk6by5lbnZp
cm9ubWVudC5oaXN0b3J5LGdsb2JhbDpvLmVudmlyb25tZW50LndpbmRvdyx1c2VyQWdlbnQ6by5l
bnZpcm9ubWVudC51c2VyQWdlbnQsY2FuY2VsUm91dGVyU2V0dXA6ITEscm9vdFVSTDoiLyIsZGV0
ZWN0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5yb290VVJMLHI9dSh7bG9jYXRpb246dGhpcy5sb2Nh
dGlvbixoaXN0b3J5OnRoaXMuaGlzdG9yeSx1c2VyQWdlbnQ6dGhpcy51c2VyQWdlbnQscm9vdFVS
TDplLGRvY3VtZW50TW9kZTp0aGlzLmRvY3VtZW50TW9kZSxnbG9iYWw6dGhpcy5nbG9iYWx9KQot
ITE9PT1yJiYoKDAsbi5zZXQpKHRoaXMsImNhbmNlbFJvdXRlclNldHVwIiwhMCkscj0ibm9uZSIp
Ci12YXIgaT0oMCx0LmdldE93bmVyKSh0aGlzKS5sb29rdXAoImxvY2F0aW9uOiIrcik7KDAsbi5z
ZXQpKGksInJvb3RVUkwiLGUpLCgwLG4uc2V0KSh0aGlzLCJjb25jcmV0ZUltcGxlbWVudGF0aW9u
IixpKX0saW5pdFN0YXRlOmEoImluaXRTdGF0ZSIpLGdldFVSTDphKCJnZXRVUkwiKSxzZXRVUkw6
YSgic2V0VVJMIikscmVwbGFjZVVSTDphKCJyZXBsYWNlVVJMIiksb25VcGRhdGVVUkw6YSgib25V
cGRhdGVVUkwiKSxmb3JtYXRVUkw6YSgiZm9ybWF0VVJMIiksd2lsbERlc3Ryb3k6ZnVuY3Rpb24o
KXt2YXIgZT0oMCxuLmdldCkodGhpcywiY29uY3JldGVJbXBsZW1lbnRhdGlvbiIpCi1lJiZlLmRl
c3Ryb3koKX19KX0pLGUoImVtYmVyLXJvdXRpbmcvbG9jYXRpb24vaGFzaF9sb2NhdGlvbiIsWyJl
eHBvcnRzIiwiZW1iZXItbWV0YWwiLCJlbWJlci1ydW50aW1lIiwiZW1iZXItcm91dGluZy9sb2Nh
dGlvbi9hcGkiXSxmdW5jdGlvbihlLHQsbixyKXsidXNlIHN0cmljdCIKLWUuZGVmYXVsdD1uLk9i
amVjdC5leHRlbmQoe2ltcGxlbWVudGF0aW9uOiJoYXNoIixpbml0OmZ1bmN0aW9uKCl7KDAsdC5z
ZXQpKHRoaXMsImxvY2F0aW9uIiwoMCx0LmdldCkodGhpcywiX2xvY2F0aW9uIil8fHdpbmRvdy5s
b2NhdGlvbiksdGhpcy5faGFzaGNoYW5nZUhhbmRsZXI9dm9pZCAwfSxnZXRIYXNoOnIuZGVmYXVs
dC5fZ2V0SGFzaCxnZXRVUkw6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmdldEhhc2goKS5zdWJzdHIo
MSksdD1lCi1yZXR1cm4iLyIhPT10WzBdJiYodD0iLyIsZSYmKHQrPSIjIitlKSksdH0sc2V0VVJM
OmZ1bmN0aW9uKGUpeygwLHQuZ2V0KSh0aGlzLCJsb2NhdGlvbiIpLmhhc2g9ZSwoMCx0LnNldCko
dGhpcywibGFzdFNldFVSTCIsZSl9LHJlcGxhY2VVUkw6ZnVuY3Rpb24oZSl7KDAsdC5nZXQpKHRo
aXMsImxvY2F0aW9uIikucmVwbGFjZSgiIyIrZSksKDAsdC5zZXQpKHRoaXMsImxhc3RTZXRVUkwi
LGUpfSxvblVwZGF0ZVVSTDpmdW5jdGlvbihlKXt2YXIgbj10aGlzCi10aGlzLl9yZW1vdmVFdmVu
dExpc3RlbmVyKCksdGhpcy5faGFzaGNoYW5nZUhhbmRsZXI9ZnVuY3Rpb24oKXsoMCx0LnJ1biko
ZnVuY3Rpb24oKXt2YXIgcj1uLmdldFVSTCgpOygwLHQuZ2V0KShuLCJsYXN0U2V0VVJMIikhPT1y
JiYoKDAsdC5zZXQpKG4sImxhc3RTZXRVUkwiLG51bGwpLGUocikpfSl9LHdpbmRvdy5hZGRFdmVu
dExpc3RlbmVyKCJoYXNoY2hhbmdlIix0aGlzLl9oYXNoY2hhbmdlSGFuZGxlcil9LGZvcm1hdFVS
TDpmdW5jdGlvbihlKXtyZXR1cm4iIyIrZX0sd2lsbERlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLl9y
ZW1vdmVFdmVudExpc3RlbmVyKCl9LF9yZW1vdmVFdmVudExpc3RlbmVyOmZ1bmN0aW9uKCl7dGhp
cy5faGFzaGNoYW5nZUhhbmRsZXImJndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJoYXNoY2hh
bmdlIix0aGlzLl9oYXNoY2hhbmdlSGFuZGxlcil9fSl9KSxlKCJlbWJlci1yb3V0aW5nL2xvY2F0
aW9uL2hpc3RvcnlfbG9jYXRpb24iLFsiZXhwb3J0cyIsImVtYmVyLW1ldGFsIiwiZW1iZXItcnVu
dGltZSIsImVtYmVyLXJvdXRpbmcvbG9jYXRpb24vYXBpIl0sZnVuY3Rpb24oZSx0LG4scil7InVz
ZSBzdHJpY3QiCi1mdW5jdGlvbiBpKCl7cmV0dXJuInh4eHh4eHh4LXh4eHgtNHh4eC15eHh4LXh4
eHh4eHh4eHh4eCIucmVwbGFjZSgvW3h5XS9nLGZ1bmN0aW9uKGUpe3ZhciB0LG4KLXJldHVybiB0
PTE2Kk1hdGgucmFuZG9tKCl8MCxuPSJ4Ij09PWU/dDozJnR8OCxuLnRvU3RyaW5nKDE2KX0pfXZh
ciBvPSExCi1lLmRlZmF1bHQ9bi5PYmplY3QuZXh0ZW5kKHtpbXBsZW1lbnRhdGlvbjoiaGlzdG9y
eSIsaW5pdDpmdW5jdGlvbigpe3RoaXMuX3N1cGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKQotdmFy
IGU9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiYmFzZSIpLG49IiIKLWUmJihuPWUuZ2V0QXR0cmli
dXRlKCJocmVmIikpLCgwLHQuc2V0KSh0aGlzLCJiYXNlVVJMIixuKSwoMCx0LnNldCkodGhpcywi
bG9jYXRpb24iLCgwLHQuZ2V0KSh0aGlzLCJsb2NhdGlvbiIpfHx3aW5kb3cubG9jYXRpb24pLHRo
aXMuX3BvcHN0YXRlSGFuZGxlcj12b2lkIDB9LGluaXRTdGF0ZTpmdW5jdGlvbigpe3ZhciBlPSgw
LHQuZ2V0KSh0aGlzLCJoaXN0b3J5Iil8fHdpbmRvdy5oaXN0b3J5OygwLHQuc2V0KSh0aGlzLCJo
aXN0b3J5IixlKSxlJiYic3RhdGUiaW4gZSYmKHRoaXMuc3VwcG9ydHNIaXN0b3J5PSEwKSx0aGlz
LnJlcGxhY2VTdGF0ZSh0aGlzLmZvcm1hdFVSTCh0aGlzLmdldFVSTCgpKSl9LHJvb3RVUkw6Ii8i
LGdldFVSTDpmdW5jdGlvbigpe3ZhciBlPSgwLHQuZ2V0KSh0aGlzLCJsb2NhdGlvbiIpLG49ZS5w
YXRobmFtZSxyPSgwLHQuZ2V0KSh0aGlzLCJyb290VVJMIiksaT0oMCx0LmdldCkodGhpcywiYmFz
ZVVSTCIpCi1yPXIucmVwbGFjZSgvXC8kLywiIiksaT1pLnJlcGxhY2UoL1wvJC8sIiIpCi12YXIg
bz1uLnJlcGxhY2UobmV3IFJlZ0V4cCgiXiIraSsiKD89L3wkKSIpLCIiKS5yZXBsYWNlKG5ldyBS
ZWdFeHAoIl4iK3IrIig/PS98JCkiKSwiIikucmVwbGFjZSgvXC9cLyQvZywiLyIpCi1yZXR1cm4g
bys9KGUuc2VhcmNofHwiIikrdGhpcy5nZXRIYXNoKCl9LHNldFVSTDpmdW5jdGlvbihlKXt2YXIg
dD10aGlzLmdldFN0YXRlKCkKLWU9dGhpcy5mb3JtYXRVUkwoZSksdCYmdC5wYXRoPT09ZXx8dGhp
cy5wdXNoU3RhdGUoZSl9LHJlcGxhY2VVUkw6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nZXRTdGF0
ZSgpCi1lPXRoaXMuZm9ybWF0VVJMKGUpLHQmJnQucGF0aD09PWV8fHRoaXMucmVwbGFjZVN0YXRl
KGUpfSxnZXRTdGF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN1cHBvcnRzSGlzdG9yeT8oMCx0
LmdldCkodGhpcywiaGlzdG9yeSIpLnN0YXRlOnRoaXMuX2hpc3RvcnlTdGF0ZX0scHVzaFN0YXRl
OmZ1bmN0aW9uKGUpe3ZhciBuPXtwYXRoOmUsdXVpZDppKCl9OygwLHQuZ2V0KSh0aGlzLCJoaXN0
b3J5IikucHVzaFN0YXRlKG4sbnVsbCxlKSx0aGlzLl9oaXN0b3J5U3RhdGU9bix0aGlzLl9wcmV2
aW91c1VSTD10aGlzLmdldFVSTCgpfSxyZXBsYWNlU3RhdGU6ZnVuY3Rpb24oZSl7dmFyIG49e3Bh
dGg6ZSx1dWlkOmkoKX07KDAsdC5nZXQpKHRoaXMsImhpc3RvcnkiKS5yZXBsYWNlU3RhdGUobixu
dWxsLGUpLHRoaXMuX2hpc3RvcnlTdGF0ZT1uLHRoaXMuX3ByZXZpb3VzVVJMPXRoaXMuZ2V0VVJM
KCl9LG9uVXBkYXRlVVJMOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMKLXRoaXMuX3JlbW92ZUV2ZW50
TGlzdGVuZXIoKSx0aGlzLl9wb3BzdGF0ZUhhbmRsZXI9ZnVuY3Rpb24oKXsob3x8KG89ITAsdC5n
ZXRVUkwoKSE9PXQuX3ByZXZpb3VzVVJMKSkmJmUodC5nZXRVUkwoKSl9LHdpbmRvdy5hZGRFdmVu
dExpc3RlbmVyKCJwb3BzdGF0ZSIsdGhpcy5fcG9wc3RhdGVIYW5kbGVyKX0sZm9ybWF0VVJMOmZ1
bmN0aW9uKGUpe3ZhciBuPSgwLHQuZ2V0KSh0aGlzLCJyb290VVJMIikscj0oMCx0LmdldCkodGhp
cywiYmFzZVVSTCIpCi1yZXR1cm4iIiE9PWU/KG49bi5yZXBsYWNlKC9cLyQvLCIiKSxyPXIucmVw
bGFjZSgvXC8kLywiIikpOiIvIj09PXJbMF0mJiIvIj09PW5bMF0mJihyPXIucmVwbGFjZSgvXC8k
LywiIikpLHIrbitlfSx3aWxsRGVzdHJveTpmdW5jdGlvbigpe3RoaXMuX3JlbW92ZUV2ZW50TGlz
dGVuZXIoKX0sZ2V0SGFzaDpyLmRlZmF1bHQuX2dldEhhc2gsX3JlbW92ZUV2ZW50TGlzdGVuZXI6
ZnVuY3Rpb24oKXt0aGlzLl9wb3BzdGF0ZUhhbmRsZXImJndpbmRvdy5yZW1vdmVFdmVudExpc3Rl
bmVyKCJwb3BzdGF0ZSIsdGhpcy5fcG9wc3RhdGVIYW5kbGVyKX19KX0pLGUoImVtYmVyLXJvdXRp
bmcvbG9jYXRpb24vbm9uZV9sb2NhdGlvbiIsWyJleHBvcnRzIiwiZW1iZXItbWV0YWwiLCJlbWJl
ci1kZWJ1ZyIsImVtYmVyLXJ1bnRpbWUiXSxmdW5jdGlvbihlLHQsbixyKXsidXNlIHN0cmljdCIK
LWUuZGVmYXVsdD1yLk9iamVjdC5leHRlbmQoe2ltcGxlbWVudGF0aW9uOiJub25lIixwYXRoOiIi
LGRldGVjdDpmdW5jdGlvbigpe3RoaXMucm9vdFVSTH0scm9vdFVSTDoiLyIsZ2V0VVJMOmZ1bmN0
aW9uKCl7dmFyIGU9KDAsdC5nZXQpKHRoaXMsInBhdGgiKSxuPSgwLHQuZ2V0KSh0aGlzLCJyb290
VVJMIikKLXJldHVybiBuPW4ucmVwbGFjZSgvXC8kLywiIiksZS5yZXBsYWNlKG5ldyBSZWdFeHAo
Il4iK24rIig/PS98JCkiKSwiIil9LHNldFVSTDpmdW5jdGlvbihlKXsoMCx0LnNldCkodGhpcywi
cGF0aCIsZSl9LG9uVXBkYXRlVVJMOmZ1bmN0aW9uKGUpe3RoaXMudXBkYXRlQ2FsbGJhY2s9ZX0s
aGFuZGxlVVJMOmZ1bmN0aW9uKGUpeygwLHQuc2V0KSh0aGlzLCJwYXRoIixlKSx0aGlzLnVwZGF0
ZUNhbGxiYWNrKGUpfSxmb3JtYXRVUkw6ZnVuY3Rpb24oZSl7dmFyIG49KDAsdC5nZXQpKHRoaXMs
InJvb3RVUkwiKQotcmV0dXJuIiIhPT1lJiYobj1uLnJlcGxhY2UoL1wvJC8sIiIpKSxuK2V9fSl9
KSxlKCJlbWJlci1yb3V0aW5nL2xvY2F0aW9uL3V0aWwiLFsiZXhwb3J0cyJdLGZ1bmN0aW9uKGUp
eyJ1c2Ugc3RyaWN0IgotZnVuY3Rpb24gdChlKXt2YXIgdD1lLnBhdGhuYW1lCi1yZXR1cm4iLyIh
PT10WzBdJiYodD0iLyIrdCksdH1mdW5jdGlvbiBuKGUpe3JldHVybiBlLnNlYXJjaH1mdW5jdGlv
biByKGUpe3ZhciB0PWUuaHJlZixuPXQuaW5kZXhPZigiIyIpCi1yZXR1cm4tMT09PW4/IiI6dC5z
dWJzdHIobil9ZnVuY3Rpb24gaShlKXt2YXIgdD1lLm9yaWdpbgotcmV0dXJuIHR8fCh0PWUucHJv
dG9jb2wrIi8vIitlLmhvc3RuYW1lLGUucG9ydCYmKHQrPSI6IitlLnBvcnQpKSx0fWUuZ2V0UGF0
aD10LGUuZ2V0UXVlcnk9bixlLmdldEhhc2g9cixlLmdldEZ1bGxQYXRoPWZ1bmN0aW9uKGUpe3Jl
dHVybiB0KGUpK24oZSkrcihlKX0sZS5nZXRPcmlnaW49aSxlLnN1cHBvcnRzSGFzaENoYW5nZT1m
dW5jdGlvbihlLHQpe3JldHVybiJvbmhhc2hjaGFuZ2UiaW4gdCYmKHZvaWQgMD09PWV8fGU+Nyl9
LGUuc3VwcG9ydHNIaXN0b3J5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuKC0xPT09ZS5pbmRleE9mKCJB
bmRyb2lkIDIuIikmJi0xPT09ZS5pbmRleE9mKCJBbmRyb2lkIDQuMCIpfHwtMT09PWUuaW5kZXhP
ZigiTW9iaWxlIFNhZmFyaSIpfHwtMSE9PWUuaW5kZXhPZigiQ2hyb21lIil8fC0xIT09ZS5pbmRl
eE9mKCJXaW5kb3dzIFBob25lIikpJiYhISh0JiYicHVzaFN0YXRlImluIHQpfSxlLnJlcGxhY2VQ
YXRoPWZ1bmN0aW9uKGUsdCl7ZS5yZXBsYWNlKGkoZSkrdCl9fSksZSgiZW1iZXItcm91dGluZy9z
ZXJ2aWNlcy9yb3V0ZXIiLFsiZXhwb3J0cyIsImVtYmVyLXJ1bnRpbWUiXSxmdW5jdGlvbihlLHQp
eyJ1c2Ugc3RyaWN0IgotdmFyIG49dC5TZXJ2aWNlLmV4dGVuZCh7Y3VycmVudFJvdXRlTmFtZToo
MCx0LnJlYWRPbmx5KSgicm91dGVyLmN1cnJlbnRSb3V0ZU5hbWUiKSxjdXJyZW50VVJMOigwLHQu
cmVhZE9ubHkpKCJyb3V0ZXIuY3VycmVudFVSTCIpLGxvY2F0aW9uOigwLHQucmVhZE9ubHkpKCJy
b3V0ZXIubG9jYXRpb24iKSxyb290VVJMOigwLHQucmVhZE9ubHkpKCJyb3V0ZXIucm9vdFVSTCIp
LHJvdXRlcjpudWxsLHRyYW5zaXRpb25UbzpmdW5jdGlvbigpe3ZhciBlCi1yZXR1cm4oZT10aGlz
LnJvdXRlcikudHJhbnNpdGlvblRvLmFwcGx5KGUsYXJndW1lbnRzKX0scmVwbGFjZVdpdGg6ZnVu
Y3Rpb24oKXt2YXIgZQotcmV0dXJuKGU9dGhpcy5yb3V0ZXIpLnJlcGxhY2VXaXRoLmFwcGx5KGUs
YXJndW1lbnRzKX0sdXJsRm9yOmZ1bmN0aW9uKCl7dmFyIGUKLXJldHVybihlPXRoaXMucm91dGVy
KS5nZW5lcmF0ZS5hcHBseShlLGFyZ3VtZW50cyl9fSkKLWUuZGVmYXVsdD1ufSksZSgiZW1iZXIt
cm91dGluZy9zZXJ2aWNlcy9yb3V0aW5nIixbImV4cG9ydHMiLCJlbWJlci11dGlscyIsImVtYmVy
LXJ1bnRpbWUiLCJlbWJlci1tZXRhbCIsImVtYmVyLXJvdXRpbmcvdXRpbHMiXSxmdW5jdGlvbihl
LHQsbixyLGkpeyJ1c2Ugc3RyaWN0IgotZnVuY3Rpb24gbyhlLHQpe3ZhciBuLHI9MAotZm9yKG49
MDtuPHQubGVuZ3RoJiYocis9dFtuXS5uYW1lcy5sZW5ndGgsdFtuXS5oYW5kbGVyIT09ZSk7bisr
KTtyZXR1cm4gcn1lLmRlZmF1bHQ9bi5TZXJ2aWNlLmV4dGVuZCh7cm91dGVyOm51bGwsdGFyZ2V0
U3RhdGU6KDAsbi5yZWFkT25seSkoInJvdXRlci50YXJnZXRTdGF0ZSIpLGN1cnJlbnRTdGF0ZToo
MCxuLnJlYWRPbmx5KSgicm91dGVyLmN1cnJlbnRTdGF0ZSIpLGN1cnJlbnRSb3V0ZU5hbWU6KDAs
bi5yZWFkT25seSkoInJvdXRlci5jdXJyZW50Um91dGVOYW1lIiksY3VycmVudFBhdGg6KDAsbi5y
ZWFkT25seSkoInJvdXRlci5jdXJyZW50UGF0aCIpLGF2YWlsYWJsZVJvdXRlczpmdW5jdGlvbigp
e3JldHVybiBPYmplY3Qua2V5cygoMCxyLmdldCkodGhpcywicm91dGVyIikucm91dGVyLnJlY29n
bml6ZXIubmFtZXMpfSxoYXNSb3V0ZTpmdW5jdGlvbihlKXtyZXR1cm4oMCxyLmdldCkodGhpcywi
cm91dGVyIikuaGFzUm91dGUoZSl9LHRyYW5zaXRpb25UbzpmdW5jdGlvbihlLHQsbixpKXt2YXIg
bz0oMCxyLmdldCkodGhpcywicm91dGVyIikscz1vLl9kb1RyYW5zaXRpb24oZSx0LG4pCi1yZXR1
cm4gaSYmcy5tZXRob2QoInJlcGxhY2UiKSxzfSxub3JtYWxpemVRdWVyeVBhcmFtczpmdW5jdGlv
bihlLHQsbil7KDAsci5nZXQpKHRoaXMsInJvdXRlciIpLl9wcmVwYXJlUXVlcnlQYXJhbXMoZSx0
LG4pfSxnZW5lcmF0ZVVSTDpmdW5jdGlvbihlLG4sbyl7dmFyIHM9KDAsci5nZXQpKHRoaXMsInJv
dXRlciIpCi1pZihzLl9yb3V0ZXJNaWNyb2xpYil7dmFyIGE9e307KDAsdC5hc3NpZ24pKGEsbyks
dGhpcy5ub3JtYWxpemVRdWVyeVBhcmFtcyhlLG4sYSkKLXZhciB1PSgwLGkucm91dGVBcmdzKShl
LG4sYSkKLXJldHVybiBzLmdlbmVyYXRlLmFwcGx5KHMsdSl9fSxpc0FjdGl2ZUZvclJvdXRlOmZ1
bmN0aW9uKGUsdCxuLGkscyl7dmFyIGE9KDAsci5nZXQpKHRoaXMsInJvdXRlciIpLHU9YS5fcm91
dGVyTWljcm9saWIucmVjb2duaXplci5oYW5kbGVyc0ZvcihuKSxsPXVbdS5sZW5ndGgtMV0uaGFu
ZGxlcixjPW8obix1KQotcmV0dXJuIGUubGVuZ3RoPmMmJihuPWwpLGkuaXNBY3RpdmVJbnRlbnQo
bixlLHQsIXMpfX0pfSksZSgiZW1iZXItcm91dGluZy9zeXN0ZW0vY2FjaGUiLFsiZXhwb3J0cyIs
ImVtYmVyLXJ1bnRpbWUiXSxmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0IgotZS5kZWZhdWx0PXQu
T2JqZWN0LmV4dGVuZCh7aW5pdDpmdW5jdGlvbigpe3RoaXMuY2FjaGU9T2JqZWN0LmNyZWF0ZShu
dWxsKX0saGFzOmZ1bmN0aW9uKGUpe3JldHVybiEhdGhpcy5jYWNoZVtlXX0sc3Rhc2g6ZnVuY3Rp
b24oZSx0LG4pe3ZhciByPXRoaXMuY2FjaGVbZV0KLXJ8fChyPXRoaXMuY2FjaGVbZV09T2JqZWN0
LmNyZWF0ZShudWxsKSksclt0XT1ufSxsb29rdXA6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMu
Y2FjaGUKLWlmKCF0aGlzLmhhcyhlKSlyZXR1cm4gbgotdmFyIGk9cltlXQotcmV0dXJuIHQgaW4g
aSYmdm9pZCAwIT09aVt0XT9pW3RdOm59fSl9KSxlKCJlbWJlci1yb3V0aW5nL3N5c3RlbS9jb250
cm9sbGVyX2ZvciIsWyJleHBvcnRzIl0sZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiCi1lLmRlZmF1
bHQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlLmxvb2t1cCgiY29udHJvbGxlcjoiK3Qsbil9fSks
ZSgiZW1iZXItcm91dGluZy9zeXN0ZW0vZHNsIixbImV4cG9ydHMiLCJlbWJlci11dGlscyIsImVt
YmVyLWRlYnVnIl0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IgotZnVuY3Rpb24gcihlKXty
ZXR1cm4gZS5wYXJlbnQmJiJhcHBsaWNhdGlvbiIhPT1lLnBhcmVudH1mdW5jdGlvbiBpKGUsdCxu
KXtyZXR1cm4gcihlKSYmITAhPT1uP2UucGFyZW50KyIuIit0OnR9ZnVuY3Rpb24gbyhlLHQpe3Zh
ciBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1sy
XTp7fSxyPWFyZ3VtZW50c1szXSxvPWkoZSx0LG4ucmVzZXROYW1lc3BhY2UpCi0ic3RyaW5nIiE9
dHlwZW9mIG4ucGF0aCYmKG4ucGF0aD0iLyIrdCksZS5wdXNoKG4ucGF0aCxvLHIsbi5zZXJpYWxp
emUpfXZhciBzPTAsYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLnBhcmVudD1lLHRo
aXMuZW5hYmxlTG9hZGluZ1N1YnN0YXRlcz10JiZ0LmVuYWJsZUxvYWRpbmdTdWJzdGF0ZXMsdGhp
cy5tYXRjaGVzPVtdLHRoaXMuZXhwbGljaXRJbmRleD12b2lkIDAsdGhpcy5vcHRpb25zPXR9cmV0
dXJuIGUucHJvdG90eXBlLnJvdXRlPWZ1bmN0aW9uKHQpe3ZhciBuLHIscz1hcmd1bWVudHMubGVu
Z3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e30sYT1hcmd1bWVudHNb
Ml0sdT0iL191bnVzZWRfZHVtbXlfZXJyb3JfcGF0aF9yb3V0ZV8iK3QrIi86ZXJyb3IiCi0yPT09
YXJndW1lbnRzLmxlbmd0aCYmImZ1bmN0aW9uIj09dHlwZW9mIHMmJihhPXMscz17fSksdGhpcy5l
bmFibGVMb2FkaW5nU3Vic3RhdGVzJiYobyh0aGlzLHQrIl9sb2FkaW5nIix7cmVzZXROYW1lc3Bh
Y2U6cy5yZXNldE5hbWVzcGFjZX0pLG8odGhpcyx0KyJfZXJyb3IiLHtyZXNldE5hbWVzcGFjZTpz
LnJlc2V0TmFtZXNwYWNlLHBhdGg6dX0pKSxhPyhuPWkodGhpcyx0LHMucmVzZXROYW1lc3BhY2Up
LHI9bmV3IGUobix0aGlzLm9wdGlvbnMpLG8ociwibG9hZGluZyIpLG8ociwiZXJyb3IiLHtwYXRo
OnV9KSxhLmNhbGwociksbyh0aGlzLHQscyxyLmdlbmVyYXRlKCkpKTpvKHRoaXMsdCxzKX0sZS5w
cm90b3R5cGUucHVzaD1mdW5jdGlvbihlLG4scixpKXt2YXIgbyxzLGE9bi5zcGxpdCgiLiIpCi1p
Zih0aGlzLm9wdGlvbnMuZW5naW5lSW5mbylvPW4uc2xpY2UodGhpcy5vcHRpb25zLmVuZ2luZUlu
Zm8uZnVsbE5hbWUubGVuZ3RoKzEpLHM9KDAsdC5hc3NpZ24pKHtsb2NhbEZ1bGxOYW1lOm99LHRo
aXMub3B0aW9ucy5lbmdpbmVJbmZvKSxpJiYocy5zZXJpYWxpemVNZXRob2Q9aSksdGhpcy5vcHRp
b25zLmFkZFJvdXRlRm9yRW5naW5lKG4scykKLWVsc2UgaWYoaSl0aHJvdyBuZXcgRXJyb3IoIkRl
ZmluaW5nIGEgcm91dGUgc2VyaWFsaXplciBvbiByb3V0ZSAnIituKyInIG91dHNpZGUgYW4gRW5n
aW5lIGlzIG5vdCBhbGxvd2VkLiIpCi0iIiE9PWUmJiIvIiE9PWUmJiJpbmRleCIhPT1hW2EubGVu
Z3RoLTFdfHwodGhpcy5leHBsaWNpdEluZGV4PSEwKSx0aGlzLm1hdGNoZXMucHVzaChbZSxuLHJd
KX0sZS5wcm90b3R5cGUucmVzb3VyY2U9ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0
aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9LG49YXJndW1lbnRzWzJd
Ci0yPT09YXJndW1lbnRzLmxlbmd0aCYmImZ1bmN0aW9uIj09dHlwZW9mIHQmJihuPXQsdD17fSks
dC5yZXNldE5hbWVzcGFjZT0hMCx0aGlzLnJvdXRlKGUsdCxuKX0sZS5wcm90b3R5cGUuZ2VuZXJh
dGU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm1hdGNoZXMKLXJldHVybiB0aGlzLmV4cGxpY2l0SW5k
ZXh8fHRoaXMucm91dGUoImluZGV4Iix7cGF0aDoiLyJ9KSxmdW5jdGlvbih0KXt2YXIgbixyCi1m
b3Iobj0wO248ZS5sZW5ndGg7bisrKXI9ZVtuXSx0KHJbMF0pLnRvKHJbMV0sclsyXSl9fSxlLnBy
b3RvdHlwZS5tb3VudD1mdW5jdGlvbihuKXt2YXIgcixhLHUsbCxjLHAsZixoPWFyZ3VtZW50cy5s
ZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSxkPXRoaXMub3B0
aW9ucy5yZXNvbHZlUm91dGVNYXAobiksbT1uCi1oLmFzJiYobT1oLmFzKQotdmFyIGc9aSh0aGlz
LG0saC5yZXNldE5hbWVzcGFjZSkseT17bmFtZTpuLGluc3RhbmNlSWQ6cysrLG1vdW50UG9pbnQ6
ZyxmdWxsTmFtZTpnfSx2PWgucGF0aAotInN0cmluZyIhPXR5cGVvZiB2JiYodj0iLyIrbSkKLXZh
ciBiPXZvaWQgMCxfPSIvX3VudXNlZF9kdW1teV9lcnJvcl9wYXRoX3JvdXRlXyIrbSsiLzplcnJv
ciIKLWQmJihyPSExLGE9dGhpcy5vcHRpb25zLmVuZ2luZUluZm8sYSYmKHI9ITAsdGhpcy5vcHRp
b25zLmVuZ2luZUluZm89eSksdT0oMCx0LmFzc2lnbikoe2VuZ2luZUluZm86eX0sdGhpcy5vcHRp
b25zKSxsPW5ldyBlKGcsdSksbyhsLCJsb2FkaW5nIiksbyhsLCJlcnJvciIse3BhdGg6X30pLGQu
Y2xhc3MuY2FsbChsKSxiPWwuZ2VuZXJhdGUoKSxyJiYodGhpcy5vcHRpb25zLmVuZ2luZUluZm89
YSkpCi12YXIgdz0oMCx0LmFzc2lnbikoe2xvY2FsRnVsbE5hbWU6ImFwcGxpY2F0aW9uIn0seSkK
LXRoaXMuZW5hYmxlTG9hZGluZ1N1YnN0YXRlcyYmKGM9bSsiX2xvYWRpbmciLHA9ImFwcGxpY2F0
aW9uX2xvYWRpbmciLGY9KDAsdC5hc3NpZ24pKHtsb2NhbEZ1bGxOYW1lOnB9LHkpLG8odGhpcyxj
LHtyZXNldE5hbWVzcGFjZTpoLnJlc2V0TmFtZXNwYWNlfSksdGhpcy5vcHRpb25zLmFkZFJvdXRl
Rm9yRW5naW5lKGMsZiksYz1tKyJfZXJyb3IiLHA9ImFwcGxpY2F0aW9uX2Vycm9yIixmPSgwLHQu
YXNzaWduKSh7bG9jYWxGdWxsTmFtZTpwfSx5KSxvKHRoaXMsYyx7cmVzZXROYW1lc3BhY2U6aC5y
ZXNldE5hbWVzcGFjZSxwYXRoOl99KSx0aGlzLm9wdGlvbnMuYWRkUm91dGVGb3JFbmdpbmUoYyxm
KSksdGhpcy5vcHRpb25zLmFkZFJvdXRlRm9yRW5naW5lKGcsdyksdGhpcy5wdXNoKHYsZyxiKX0s
ZX0oKQotZS5kZWZhdWx0PWEsYS5tYXA9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IGEKLXJldHVybiBl
LmNhbGwodCksdH19KSxlKCJlbWJlci1yb3V0aW5nL3N5c3RlbS9nZW5lcmF0ZV9jb250cm9sbGVy
IixbImV4cG9ydHMiLCJlbWJlci1tZXRhbCIsImVtYmVyLWRlYnVnIl0sZnVuY3Rpb24oZSl7InVz
ZSBzdHJpY3QiCi1mdW5jdGlvbiB0KGUsdCl7dmFyIG49ZS5mYWN0b3J5Rm9yKCJjb250cm9sbGVy
OmJhc2ljIikuY2xhc3MKLXJldHVybiBuPW4uZXh0ZW5kKHt0b1N0cmluZzpmdW5jdGlvbigpe3Jl
dHVybiIoZ2VuZXJhdGVkICIrdCsiIGNvbnRyb2xsZXIpIn19KSxlLnJlZ2lzdGVyKCJjb250cm9s
bGVyOiIrdCxuKSxufWUuZ2VuZXJhdGVDb250cm9sbGVyRmFjdG9yeT10LGUuZGVmYXVsdD1mdW5j
dGlvbihlLG4pe3JldHVybiB0KGUsbiksZS5sb29rdXAoImNvbnRyb2xsZXI6IituKX19KSxlKCJl
bWJlci1yb3V0aW5nL3N5c3RlbS9xdWVyeV9wYXJhbXMiLFsiZXhwb3J0cyIsImVtYmVyLXJ1bnRp
bWUiXSxmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0IgotZS5kZWZhdWx0PXQuT2JqZWN0LmV4dGVu
ZCh7aXNRdWVyeVBhcmFtczohMCx2YWx1ZXM6bnVsbH0pfSksZSgiZW1iZXItcm91dGluZy9zeXN0
ZW0vcm91dGUiLFsiZXhwb3J0cyIsImVtYmVyLXV0aWxzIiwiZW1iZXItbWV0YWwiLCJlbWJlci1k
ZWJ1ZyIsImVtYmVyLXJ1bnRpbWUiLCJlbWJlci1yb3V0aW5nL3N5c3RlbS9nZW5lcmF0ZV9jb250
cm9sbGVyIiwiZW1iZXItcm91dGluZy91dGlscyJdLGZ1bmN0aW9uKGUsdCxuLHIsaSxvLHMpeyJ1
c2Ugc3RyaWN0IgotZnVuY3Rpb24gYSgpe3JldHVybiB0aGlzfWZ1bmN0aW9uIHUoZSx0KXtpZigh
KHQubGVuZ3RoPDEpJiZlKXt2YXIgcj10WzBdLGk9e30KLXJldHVybiAxPT09dC5sZW5ndGg/ciBp
biBlP2lbcl09KDAsbi5nZXQpKGUscik6L19pZCQvLnRlc3QocikmJihpW3JdPSgwLG4uZ2V0KShl
LCJpZCIpKTppPSgwLG4uZ2V0UHJvcGVydGllcykoZSx0KSxpfX1mdW5jdGlvbiBsKGUpe3ZhciB0
PWMoZSxlLnJvdXRlci5fcm91dGVyTWljcm9saWIuc3RhdGUuaGFuZGxlckluZm9zLC0xKQotcmV0
dXJuIHQmJnQuaGFuZGxlcn1mdW5jdGlvbiBjKGUsdCl7dmFyIG4scj1hcmd1bWVudHMubGVuZ3Ro
PjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06MAotaWYodCl7Zm9yKG49MDtu
PHQubGVuZ3RoO24rKylpZih0W25dLmhhbmRsZXI9PT1lKXJldHVybiB0W24rcl19fWZ1bmN0aW9u
IHAoZSxuLGksbyxzKXt2YXIgYSx1PXMmJnMuaW50byYmcy5pbnRvLnJlcGxhY2UoL1wvL2csIi4i
KSxjPXMmJnMub3V0bGV0fHwibWFpbiIscD12b2lkIDAsZj12b2lkIDAKLW8/KHA9by5yZXBsYWNl
KC9cLy9nLCIuIiksZj1wKToocD1lLnJvdXRlTmFtZSxmPWUudGVtcGxhdGVOYW1lfHxwKQotdmFy
IGg9KDAsdC5nZXRPd25lcikoZSksZD1zJiZzLmNvbnRyb2xsZXIKLWlmKGR8fChkPW4/aC5sb29r
dXAoImNvbnRyb2xsZXI6IitwKXx8ZS5jb250cm9sbGVyTmFtZXx8ZS5yb3V0ZU5hbWU6ZS5jb250
cm9sbGVyTmFtZXx8aC5sb29rdXAoImNvbnRyb2xsZXI6IitwKSksInN0cmluZyI9PXR5cGVvZiBk
JiYoYT1kLCEoZD1oLmxvb2t1cCgiY29udHJvbGxlcjoiK2EpKSkpdGhyb3cgbmV3IHIuRXJyb3Io
IllvdSBwYXNzZWQgYGNvbnRyb2xsZXI6ICciK2ErIidgIGludG8gdGhlIGByZW5kZXJgIG1ldGhv
ZCwgYnV0IG5vIHN1Y2ggY29udHJvbGxlciBjb3VsZCBiZSBmb3VuZC4iKQotaWYocyYmLTEhPT1P
YmplY3Qua2V5cyhzKS5pbmRleE9mKCJvdXRsZXQiKSYmdm9pZCAwPT09cy5vdXRsZXQpdGhyb3cg
bmV3IHIuRXJyb3IoIllvdSBwYXNzZWQgdW5kZWZpbmVkIGFzIHRoZSBvdXRsZXQgbmFtZS4iKQot
cyYmcy5tb2RlbCYmZC5zZXQoIm1vZGVsIixzLm1vZGVsKQotdmFyIG09aC5sb29rdXAoInRlbXBs
YXRlOiIrZiksZz12b2lkIDAKLXJldHVybiB1JiYoZz1sKGUpKSYmdT09PWcucm91dGVOYW1lJiYo
dT12b2lkIDApLHtvd25lcjpoLGludG86dSxvdXRsZXQ6YyxuYW1lOnAsY29udHJvbGxlcjpkLHRl
bXBsYXRlOm18fGUuX3RvcExldmVsVmlld1RlbXBsYXRlLFZpZXdDbGFzczp2b2lkIDB9fWZ1bmN0
aW9uIGYoZSxuKXtyZXR1cm4gbi5mdWxsUXVlcnlQYXJhbXM/bi5mdWxsUXVlcnlQYXJhbXM6KG4u
ZnVsbFF1ZXJ5UGFyYW1zPXt9LCgwLHQuYXNzaWduKShuLmZ1bGxRdWVyeVBhcmFtcyxuLnF1ZXJ5
UGFyYW1zKSxlLl9kZXNlcmlhbGl6ZVF1ZXJ5UGFyYW1zKG4uaGFuZGxlckluZm9zLG4uZnVsbFF1
ZXJ5UGFyYW1zKSxuLmZ1bGxRdWVyeVBhcmFtcyl9ZnVuY3Rpb24gaChlLHQpe3QucXVlcnlQYXJh
bXNGb3I9dC5xdWVyeVBhcmFtc0Zvcnx8e30KLXZhciByLGksbyxzPWUuZnVsbFJvdXRlTmFtZQot
aWYodC5xdWVyeVBhcmFtc0ZvcltzXSlyZXR1cm4gdC5xdWVyeVBhcmFtc0ZvcltzXQotdmFyIGE9
ZihlLnJvdXRlcix0KSx1PXQucXVlcnlQYXJhbXNGb3Jbc109e30sbD0oMCxuLmdldCkoZSwiX3Fw
IiksYz1sLnFwcwotZm9yKHI9MDtyPGMubGVuZ3RoOysrcilpPWNbcl0sbz1pLnByb3AgaW4gYSx1
W2kucHJvcF09bz9hW2kucHJvcF06ZChpLmRlZmF1bHRWYWx1ZSkKLXJldHVybiB1fWZ1bmN0aW9u
IGQoZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/KDAsaS5BKShlLnNsaWNlKCkpOmV9ZnVuY3Rp
b24gbShlLG4pe3ZhciByLGksbz12b2lkIDAscz17fQotbz17ZGVmYXVsdFZhbHVlOiEwLHR5cGU6
ITAsc2NvcGU6ITAsYXM6ITB9Ci1mb3IodmFyIGEgaW4gZSllLmhhc093blByb3BlcnR5KGEpJiYo
cj17fSwoMCx0LmFzc2lnbikocixlW2FdKSwoMCx0LmFzc2lnbikocixuW2FdKSxzW2FdPXIsb1th
XT0hMCkKLWZvcih2YXIgdSBpbiBuKW4uaGFzT3duUHJvcGVydHkodSkmJiFvW3VdJiYoaT17fSwo
MCx0LmFzc2lnbikoaSxuW3VdLGVbdV0pLHNbdV09aSkKLXJldHVybiBzfWZ1bmN0aW9uIGcoZSx0
KXt0LmZvckVhY2goZnVuY3Rpb24odCl7ZS5hZGRPYnNlcnZlcih0KyIuW10iLGUsZS5fcXBDaGFu
Z2VkKX0pfWZ1bmN0aW9uIHkoZSx0KXt2YXIgbgotcmV0dXJuIGUucm91dGFibGU/KG49ZS5tb3Vu
dFBvaW50LCJhcHBsaWNhdGlvbiI9PT10P246bisiLiIrdCk6dH1lLmRlZmF1bHRTZXJpYWxpemU9
dSxlLmhhc0RlZmF1bHRTZXJpYWxpemU9ZnVuY3Rpb24oZSl7cmV0dXJuISFlLnNlcmlhbGl6ZVti
XX0KLXZhciB2PUFycmF5LnByb3RvdHlwZS5zbGljZSxiPSgwLHQuc3ltYm9sKSgiREVGQVVMVF9T
RVJJQUxJWkUiKQotdVtiXT0hMAotdmFyIF89aS5PYmplY3QuZXh0ZW5kKGkuQWN0aW9uSGFuZGxl
cixpLkV2ZW50ZWQse3F1ZXJ5UGFyYW1zOnt9LF9zZXRSb3V0ZU5hbWU6ZnVuY3Rpb24oZSl7dGhp
cy5yb3V0ZU5hbWU9ZSx0aGlzLmZ1bGxSb3V0ZU5hbWU9eSgoMCx0LmdldE93bmVyKSh0aGlzKSxl
KX0sX3FwOigwLG4uY29tcHV0ZWQpKGZ1bmN0aW9uKCl7dmFyIGUscixhLHUsbCxjLHAsZixoLGQs
Zyx5PXRoaXMsdj12b2lkIDAsYj10aGlzLmNvbnRyb2xsZXJOYW1lfHx0aGlzLnJvdXRlTmFtZSxf
PSgwLHQuZ2V0T3duZXIpKHRoaXMpLHc9Xy5sb29rdXAoImNvbnRyb2xsZXI6IitiKSxFPSgwLG4u
Z2V0KSh0aGlzLCJxdWVyeVBhcmFtcyIpLHg9ISFPYmplY3Qua2V5cyhFKS5sZW5ndGgKLXc/KGU9
KDAsbi5nZXQpKHcsInF1ZXJ5UGFyYW1zIil8fHt9LHI9KDAscy5ub3JtYWxpemVDb250cm9sbGVy
UXVlcnlQYXJhbXMpKGUpLHY9bShyLEUpKTp4JiYodz0oMCxvLmRlZmF1bHQpKCgwLHQuZ2V0T3du
ZXIpKHRoaXMpLGIpLHY9RSkKLXZhciBDPVtdLE89e30sQT1bXQotZm9yKHZhciBUIGluIHYpdi5o
YXNPd25Qcm9wZXJ0eShUKSYmInVua25vd25Qcm9wZXJ0eSIhPT1UJiYiX3N1cGVyIiE9PVQmJihh
PXZbVF0sdT1hLnNjb3BlfHwibW9kZWwiLGw9dm9pZCAwLCJjb250cm9sbGVyIj09PXUmJihsPVtd
KSxjPWEuYXN8fHRoaXMuc2VyaWFsaXplUXVlcnlQYXJhbUtleShUKSxwPSgwLG4uZ2V0KSh3LFQp
LEFycmF5LmlzQXJyYXkocCkmJihwPSgwLGkuQSkocC5zbGljZSgpKSksZj1hLnR5cGV8fCgwLGku
dHlwZU9mKShwKSxoPXRoaXMuc2VyaWFsaXplUXVlcnlQYXJhbShwLGMsZiksZD1iKyI6IitULGc9
e3VuZGVjb3JhdGVkRGVmYXVsdFZhbHVlOigwLG4uZ2V0KSh3LFQpLGRlZmF1bHRWYWx1ZTpwLHNl
cmlhbGl6ZWREZWZhdWx0VmFsdWU6aCxzZXJpYWxpemVkVmFsdWU6aCx0eXBlOmYsdXJsS2V5OmMs
cHJvcDpULHNjb3BlZFByb3BlcnR5TmFtZTpkLGNvbnRyb2xsZXJOYW1lOmIscm91dGU6dGhpcyxw
YXJ0czpsLHZhbHVlczpudWxsLHNjb3BlOnV9LE9bVF09T1tjXT1PW2RdPWcsQy5wdXNoKGcpLEEu
cHVzaChUKSkKLXJldHVybntxcHM6QyxtYXA6Tyxwcm9wZXJ0eU5hbWVzOkEsc3RhdGVzOntpbmFj
dGl2ZTpmdW5jdGlvbihlLHQpe3ZhciBuPU9bZV0KLXkuX3FwQ2hhbmdlZChlLHQsbil9LGFjdGl2
ZTpmdW5jdGlvbihlLHQpe3ZhciBuPU9bZV0KLXJldHVybiB5Ll9xcENoYW5nZWQoZSx0LG4pLHku
X2FjdGl2ZVFQQ2hhbmdlZChPW2VdLHQpfSxhbGxvd092ZXJyaWRlczpmdW5jdGlvbihlLHQpe3Zh
ciBuPU9bZV0KLXJldHVybiB5Ll9xcENoYW5nZWQoZSx0LG4pLHkuX3VwZGF0aW5nUVBDaGFuZ2Vk
KE9bZV0pfX19fSksX25hbWVzOm51bGwsX3N0YXNoTmFtZXM6ZnVuY3Rpb24oZSx0KXtpZighdGhp
cy5fbmFtZXMpe3ZhciByLGksbyxzPXRoaXMuX25hbWVzPWUuX25hbWVzCi1zLmxlbmd0aHx8KGU9
dCxzPWUmJmUuX25hbWVzfHxbXSkKLXZhciBhPSgwLG4uZ2V0KSh0aGlzLCJfcXAucXBzIiksdT1u
ZXcgQXJyYXkocy5sZW5ndGgpCi1mb3Iocj0wO3I8cy5sZW5ndGg7KytyKXVbcl09ZS5uYW1lKyIu
IitzW3JdCi1mb3IoaT0wO2k8YS5sZW5ndGg7KytpKW89YVtpXSwibW9kZWwiPT09by5zY29wZSYm
KG8ucGFydHM9dSl9fSxfYWN0aXZlUVBDaGFuZ2VkOmZ1bmN0aW9uKGUsdCl7dGhpcy5yb3V0ZXIu
X2FjdGl2ZVFQQ2hhbmdlZChlLnNjb3BlZFByb3BlcnR5TmFtZSx0KX0sX3VwZGF0aW5nUVBDaGFu
Z2VkOmZ1bmN0aW9uKGUpe3RoaXMucm91dGVyLl91cGRhdGluZ1FQQ2hhbmdlZChlLnVybEtleSl9
LG1lcmdlZFByb3BlcnRpZXM6WyJxdWVyeVBhcmFtcyJdLHBhcmFtc0ZvcjpmdW5jdGlvbihlKXt2
YXIgbj0oMCx0LmdldE93bmVyKSh0aGlzKS5sb29rdXAoInJvdXRlOiIrZSkKLWlmKCFuKXJldHVy
bnt9Ci12YXIgcj10aGlzLnJvdXRlci5fcm91dGVyTWljcm9saWIuYWN0aXZlVHJhbnNpdGlvbixp
PXI/ci5zdGF0ZTp0aGlzLnJvdXRlci5fcm91dGVyTWljcm9saWIuc3RhdGUsbz1uLmZ1bGxSb3V0
ZU5hbWUscz0oMCx0LmFzc2lnbikoe30saS5wYXJhbXNbb10pLGE9aChuLGkpCi1yZXR1cm4gT2Jq
ZWN0LmtleXMoYSkucmVkdWNlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdF09YVt0XSxlfSxzKX0s
c2VyaWFsaXplUXVlcnlQYXJhbUtleTpmdW5jdGlvbihlKXtyZXR1cm4gZX0sc2VyaWFsaXplUXVl
cnlQYXJhbTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHRoaXMucm91dGVyLl9zZXJpYWxpemVRdWVy
eVBhcmFtKGUsbil9LGRlc2VyaWFsaXplUXVlcnlQYXJhbTpmdW5jdGlvbihlLHQsbil7cmV0dXJu
IHRoaXMucm91dGVyLl9kZXNlcmlhbGl6ZVF1ZXJ5UGFyYW0oZSxuKX0sX29wdGlvbnNGb3JRdWVy
eVBhcmFtOmZ1bmN0aW9uKGUpe3JldHVybigwLG4uZ2V0KSh0aGlzLCJxdWVyeVBhcmFtcy4iK2Uu
dXJsS2V5KXx8KDAsbi5nZXQpKHRoaXMsInF1ZXJ5UGFyYW1zLiIrZS5wcm9wKXx8e319LHJlc2V0
Q29udHJvbGxlcjphLGV4aXQ6ZnVuY3Rpb24oKXt0aGlzLmRlYWN0aXZhdGUoKSx0aGlzLnRyaWdn
ZXIoImRlYWN0aXZhdGUiKSx0aGlzLnRlYXJkb3duVmlld3MoKX0sX3Jlc2V0OmZ1bmN0aW9uKGUs
dCl7dmFyIHI9dGhpcy5jb250cm9sbGVyCi1yLl9xcERlbGVnYXRlPSgwLG4uZ2V0KSh0aGlzLCJf
cXAuc3RhdGVzLmluYWN0aXZlIiksdGhpcy5yZXNldENvbnRyb2xsZXIocixlLHQpfSxlbnRlcjpm
dW5jdGlvbigpe3RoaXMuY29ubmVjdGlvbnM9W10sdGhpcy5hY3RpdmF0ZSgpLHRoaXMudHJpZ2dl
cigiYWN0aXZhdGUiKX0sdGVtcGxhdGVOYW1lOm51bGwsY29udHJvbGxlck5hbWU6bnVsbCxhY3Rp
b25zOntxdWVyeVBhcmFtc0RpZENoYW5nZTpmdW5jdGlvbihlLHQscil7dmFyIGksbyxzPSgwLG4u
Z2V0KSh0aGlzLCJfcXAiKS5tYXAsYT1PYmplY3Qua2V5cyhlKS5jb25jYXQoT2JqZWN0LmtleXMo
cikpCi1mb3IoaT0wO2k8YS5sZW5ndGg7KytpKWlmKChvPXNbYVtpXV0pJiYoMCxuLmdldCkodGhp
cy5fb3B0aW9uc0ZvclF1ZXJ5UGFyYW0obyksInJlZnJlc2hNb2RlbCIpJiZ0aGlzLnJvdXRlci5j
dXJyZW50U3RhdGUpe3RoaXMucmVmcmVzaCgpCi1icmVha31yZXR1cm4hMH0sZmluYWxpemVRdWVy
eVBhcmFtQ2hhbmdlOmZ1bmN0aW9uKGUsdCxyKXtpZigiYXBwbGljYXRpb24iIT09dGhpcy5mdWxs
Um91dGVOYW1lKXJldHVybiEwCi1pZihyKXt2YXIgaSxvLGEsdSxsLGMscCxmLGgsbSxnPXIuc3Rh
dGUuaGFuZGxlckluZm9zLHk9dGhpcy5yb3V0ZXIsdj15Ll9xdWVyeVBhcmFtc0ZvcihnKSxiPXku
X3FwVXBkYXRlcyxfPXZvaWQgMAotZm9yKCgwLHMuc3Rhc2hQYXJhbU5hbWVzKSh5LGcpLGk9MDtp
PHYucXBzLmxlbmd0aDsrK2kpbz12LnFwc1tpXSxhPW8ucm91dGUsdT1hLmNvbnRyb2xsZXIsbD1v
LnVybEtleSBpbiBlJiZvLnVybEtleSxjPXZvaWQgMCxwPXZvaWQgMCxiJiZvLnVybEtleSBpbiBi
PyhjPSgwLG4uZ2V0KSh1LG8ucHJvcCkscD1hLnNlcmlhbGl6ZVF1ZXJ5UGFyYW0oYyxvLnVybEtl
eSxvLnR5cGUpKTpsPyhwPWVbbF0sYz1hLmRlc2VyaWFsaXplUXVlcnlQYXJhbShwLG8udXJsS2V5
LG8udHlwZSkpOihwPW8uc2VyaWFsaXplZERlZmF1bHRWYWx1ZSxjPWQoby5kZWZhdWx0VmFsdWUp
KSx1Ll9xcERlbGVnYXRlPSgwLG4uZ2V0KShhLCJfcXAuc3RhdGVzLmluYWN0aXZlIiksZj1wIT09
by5zZXJpYWxpemVkVmFsdWUsZiYmKHIucXVlcnlQYXJhbXNPbmx5JiYhMSE9PV8mJihoPWEuX29w
dGlvbnNGb3JRdWVyeVBhcmFtKG8pLG09KDAsbi5nZXQpKGgsInJlcGxhY2UiKSxtP189ITA6ITE9
PT1tJiYoXz0hMSkpLCgwLG4uc2V0KSh1LG8ucHJvcCxjKSksby5zZXJpYWxpemVkVmFsdWU9cCxv
LnNlcmlhbGl6ZWREZWZhdWx0VmFsdWU9PT1wfHx0LnB1c2goe3ZhbHVlOnAsdmlzaWJsZTohMCxr
ZXk6bHx8by51cmxLZXl9KQotXyYmci5tZXRob2QoInJlcGxhY2UiKSx2LnFwcy5mb3JFYWNoKGZ1
bmN0aW9uKGUpe3ZhciB0PSgwLG4uZ2V0KShlLnJvdXRlLCJfcXAiKQotZS5yb3V0ZS5jb250cm9s
bGVyLl9xcERlbGVnYXRlPSgwLG4uZ2V0KSh0LCJzdGF0ZXMuYWN0aXZlIil9KSx5Ll9xcFVwZGF0
ZXM9bnVsbH19fSxkZWFjdGl2YXRlOmEsYWN0aXZhdGU6YSx0cmFuc2l0aW9uVG86ZnVuY3Rpb24o
KXt2YXIgZT10aGlzLnJvdXRlcgotcmV0dXJuIGUudHJhbnNpdGlvblRvLmFwcGx5KGUsKDAscy5w
cmVmaXhSb3V0ZU5hbWVBcmcpKHRoaXMsYXJndW1lbnRzKSl9LGludGVybWVkaWF0ZVRyYW5zaXRp
b25UbzpmdW5jdGlvbigpe3ZhciBlPXRoaXMucm91dGVyCi1lLmludGVybWVkaWF0ZVRyYW5zaXRp
b25Uby5hcHBseShlLCgwLHMucHJlZml4Um91dGVOYW1lQXJnKSh0aGlzLGFyZ3VtZW50cykpfSxy
ZWZyZXNoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm91dGVyLl9yb3V0ZXJNaWNyb2xpYi5yZWZy
ZXNoKHRoaXMpfSxyZXBsYWNlV2l0aDpmdW5jdGlvbigpe3ZhciBlPXRoaXMucm91dGVyCi1yZXR1
cm4gZS5yZXBsYWNlV2l0aC5hcHBseShlLCgwLHMucHJlZml4Um91dGVOYW1lQXJnKSh0aGlzLGFy
Z3VtZW50cykpfSxzZW5kOmZ1bmN0aW9uKCl7dmFyIGUsdCxuLGksbwotZm9yKGU9YXJndW1lbnRz
Lmxlbmd0aCx0PUFycmF5KGUpLG49MDtuPGU7bisrKXRbbl09YXJndW1lbnRzW25dCi1pZih0aGlz
LnJvdXRlciYmdGhpcy5yb3V0ZXIuX3JvdXRlck1pY3JvbGlifHwhKDAsci5pc1Rlc3RpbmcpKCkp
KGk9dGhpcy5yb3V0ZXIpLnNlbmQuYXBwbHkoaSx0KQotZWxzZSBpZihvPXRbMF0sdD12LmNhbGwo
dCwxKSx0aGlzLmFjdGlvbnNbb10pcmV0dXJuIHRoaXMuYWN0aW9uc1tvXS5hcHBseSh0aGlzLHQp
fSxzZXR1cDpmdW5jdGlvbihlLHQpe3ZhciByLGksbyxhLHUsbD12b2lkIDAsYz10aGlzLmNvbnRy
b2xsZXJOYW1lfHx0aGlzLnJvdXRlTmFtZSxwPXRoaXMuY29udHJvbGxlckZvcihjLCEwKQotbD1w
fHx0aGlzLmdlbmVyYXRlQ29udHJvbGxlcihjKSx0aGlzLmNvbnRyb2xsZXJ8fChyPSgwLG4uZ2V0
KSh0aGlzLCJfcXAucHJvcGVydHlOYW1lcyIpLGcobCxyKSx0aGlzLmNvbnRyb2xsZXI9bCkKLXZh
ciBmPSgwLG4uZ2V0KSh0aGlzLCJfcXAiKSxkPWYuc3RhdGVzCi1sLl9xcERlbGVnYXRlPWQuYWxs
b3dPdmVycmlkZXMsdCYmKCgwLHMuc3Rhc2hQYXJhbU5hbWVzKSh0aGlzLnJvdXRlcix0LnN0YXRl
LmhhbmRsZXJJbmZvcyksaT10LnBhcmFtcyxvPWYucHJvcGVydHlOYW1lcyxhPXRoaXMuX2J1Y2tl
dENhY2hlLG8uZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdCxyPWYubWFwW2VdCi1yLnZhbHVlcz1p
Ci12YXIgbz0oMCxzLmNhbGN1bGF0ZUNhY2hlS2V5KShyLnJvdXRlLmZ1bGxSb3V0ZU5hbWUsci5w
YXJ0cyxyLnZhbHVlcykKLWEmJih0PWEubG9va3VwKG8sZSxyLnVuZGVjb3JhdGVkRGVmYXVsdFZh
bHVlKSwoMCxuLnNldCkobCxlLHQpKX0pKSx0JiYodT1oKHRoaXMsdC5zdGF0ZSksKDAsbi5zZXRQ
cm9wZXJ0aWVzKShsLHUpKSx0aGlzLnNldHVwQ29udHJvbGxlcihsLGUsdCksdGhpcy5fZW52aXJv
bm1lbnQub3B0aW9ucy5zaG91bGRSZW5kZXImJnRoaXMucmVuZGVyVGVtcGxhdGUobCxlKX0sX3Fw
Q2hhbmdlZDpmdW5jdGlvbihlLHQsbil7aWYobil7dmFyIHI9KDAscy5jYWxjdWxhdGVDYWNoZUtl
eSkobi5yb3V0ZS5mdWxsUm91dGVOYW1lLG4ucGFydHMsbi52YWx1ZXMpLGk9dGhpcy5fYnVja2V0
Q2FjaGUKLWkmJmkuc3Rhc2gocixlLHQpfX0sYmVmb3JlTW9kZWw6YSxhZnRlck1vZGVsOmEscmVk
aXJlY3Q6YSxjb250ZXh0RGlkQ2hhbmdlOmZ1bmN0aW9uKCl7dGhpcy5jdXJyZW50TW9kZWw9dGhp
cy5jb250ZXh0fSxtb2RlbDpmdW5jdGlvbihlLHQpe3ZhciByLG89dm9pZCAwLHM9dm9pZCAwLGE9
dm9pZCAwLHU9KDAsbi5nZXQpKHRoaXMsIl9xcC5tYXAiKQotZm9yKHZhciBsIGluIGUpInF1ZXJ5
UGFyYW1zIj09PWx8fHUmJmwgaW4gdXx8KHI9bC5tYXRjaCgvXiguKilfaWQkLyksciYmKG89clsx
XSxhPWVbbF0pLHM9ITApCi1pZighbyYmcylyZXR1cm4oMCxpLmNvcHkpKGUpCi1pZighbyl7aWYo
dC5yZXNvbHZlSW5kZXg8MSlyZXR1cm4KLXJldHVybiB0LnN0YXRlLmhhbmRsZXJJbmZvc1t0LnJl
c29sdmVJbmRleC0xXS5jb250ZXh0fXJldHVybiB0aGlzLmZpbmRNb2RlbChvLGEpfSxkZXNlcmlh
bGl6ZTpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLm1vZGVsKHRoaXMucGFyYW1zRm9yKHRoaXMu
cm91dGVOYW1lKSx0KX0sZmluZE1vZGVsOmZ1bmN0aW9uKCl7dmFyIGU9KDAsbi5nZXQpKHRoaXMs
InN0b3JlIikKLXJldHVybiBlLmZpbmQuYXBwbHkoZSxhcmd1bWVudHMpfSxzdG9yZTooMCxuLmNv
bXB1dGVkKShmdW5jdGlvbigpe3ZhciBlPSgwLHQuZ2V0T3duZXIpKHRoaXMpCi10aGlzLnJvdXRl
TmFtZSwoMCxuLmdldCkodGhpcywicm91dGVyLm5hbWVzcGFjZSIpCi1yZXR1cm57ZmluZDpmdW5j
dGlvbih0LG4pe3ZhciByPWUuZmFjdG9yeUZvcigibW9kZWw6Iit0KQotaWYocilyZXR1cm4gcj1y
LmNsYXNzLHIuZmluZChuKX19fSksc2VyaWFsaXplOnUsc2V0dXBDb250cm9sbGVyOmZ1bmN0aW9u
KGUsdCl7ZSYmdm9pZCAwIT09dCYmKDAsbi5zZXQpKGUsIm1vZGVsIix0KX0sY29udHJvbGxlckZv
cjpmdW5jdGlvbihlLG4pe3ZhciByPSgwLHQuZ2V0T3duZXIpKHRoaXMpLGk9ci5sb29rdXAoInJv
dXRlOiIrZSkKLXJldHVybiBpJiZpLmNvbnRyb2xsZXJOYW1lJiYoZT1pLmNvbnRyb2xsZXJOYW1l
KSxyLmxvb2t1cCgiY29udHJvbGxlcjoiK2UpfSxnZW5lcmF0ZUNvbnRyb2xsZXI6ZnVuY3Rpb24o
ZSl7dmFyIG49KDAsdC5nZXRPd25lcikodGhpcykKLXJldHVybigwLG8uZGVmYXVsdCkobixlKX0s
bW9kZWxGb3I6ZnVuY3Rpb24oZSl7dmFyIG4scj12b2lkIDAsaT0oMCx0LmdldE93bmVyKSh0aGlz
KQotcj1pLnJvdXRhYmxlJiZ0aGlzLnJvdXRlciYmdGhpcy5yb3V0ZXIuX3JvdXRlck1pY3JvbGli
LmFjdGl2ZVRyYW5zaXRpb24/eShpLGUpOmUKLXZhciBvPSgwLHQuZ2V0T3duZXIpKHRoaXMpLmxv
b2t1cCgicm91dGU6IityKSxzPXRoaXMucm91dGVyP3RoaXMucm91dGVyLl9yb3V0ZXJNaWNyb2xp
Yi5hY3RpdmVUcmFuc2l0aW9uOm51bGwKLXJldHVybiBzJiYobj1vJiZvLnJvdXRlTmFtZXx8cixz
LnJlc29sdmVkTW9kZWxzLmhhc093blByb3BlcnR5KG4pKT9zLnJlc29sdmVkTW9kZWxzW25dOm8m
Jm8uY3VycmVudE1vZGVsfSxyZW5kZXJUZW1wbGF0ZTpmdW5jdGlvbigpe3RoaXMucmVuZGVyKCl9
LHJlbmRlcjpmdW5jdGlvbihlLHQpe3ZhciByPTA9PT1hcmd1bWVudHMubGVuZ3RofHwoMCxuLmlz
RW1wdHkpKGFyZ3VtZW50c1swXSksaT12b2lkIDAKLSJvYmplY3QiIT10eXBlb2YgZXx8dD9pPWU6
KGk9dGhpcy50ZW1wbGF0ZU5hbWV8fHRoaXMucm91dGVOYW1lLHQ9ZSkKLXZhciBvPXAodGhpcywi
c3RyaW5nIj09dHlwZW9mIGUmJiEhZSxyLGksdCkKLXRoaXMuY29ubmVjdGlvbnMucHVzaChvKSxu
LnJ1bi5vbmNlKHRoaXMucm91dGVyLCJfc2V0T3V0bGV0cyIpfSxkaXNjb25uZWN0T3V0bGV0OmZ1
bmN0aW9uKGUpe3ZhciB0LG49dm9pZCAwLGk9dm9pZCAwCi1pZihlJiYic3RyaW5nIiE9dHlwZW9m
IGUpe2lmKG49ZS5vdXRsZXQsaT1lLnBhcmVudFZpZXcsZSYmLTEhPT1PYmplY3Qua2V5cyhlKS5p
bmRleE9mKCJvdXRsZXQiKSYmdm9pZCAwPT09ZS5vdXRsZXQpdGhyb3cgbmV3IHIuRXJyb3IoIllv
dSBwYXNzZWQgdW5kZWZpbmVkIGFzIHRoZSBvdXRsZXQgbmFtZS4iKX1lbHNlIG49ZQotZm9yKGk9
aSYmaS5yZXBsYWNlKC9cLy9nLCIuIiksbj1ufHwibWFpbiIsdGhpcy5fZGlzY29ubmVjdE91dGxl
dChuLGkpLHQ9MDt0PHRoaXMucm91dGVyLl9yb3V0ZXJNaWNyb2xpYi5jdXJyZW50SGFuZGxlcklu
Zm9zLmxlbmd0aDt0KyspdGhpcy5yb3V0ZXIuX3JvdXRlck1pY3JvbGliLmN1cnJlbnRIYW5kbGVy
SW5mb3NbdF0uaGFuZGxlci5fZGlzY29ubmVjdE91dGxldChuLGkpfSxfZGlzY29ubmVjdE91dGxl
dDpmdW5jdGlvbihlLHQpe3ZhciByLGksbz1sKHRoaXMpCi1mb3IobyYmdD09PW8ucm91dGVOYW1l
JiYodD12b2lkIDApLHI9MDtyPHRoaXMuY29ubmVjdGlvbnMubGVuZ3RoO3IrKylpPXRoaXMuY29u
bmVjdGlvbnNbcl0saS5vdXRsZXQ9PT1lJiZpLmludG89PT10JiYodGhpcy5jb25uZWN0aW9uc1ty
XT17b3duZXI6aS5vd25lcixpbnRvOmkuaW50byxvdXRsZXQ6aS5vdXRsZXQsbmFtZTppLm5hbWUs
Y29udHJvbGxlcjp2b2lkIDAsdGVtcGxhdGU6dm9pZCAwLFZpZXdDbGFzczp2b2lkIDB9LG4ucnVu
Lm9uY2UodGhpcy5yb3V0ZXIsIl9zZXRPdXRsZXRzIikpfSx3aWxsRGVzdHJveTpmdW5jdGlvbigp
e3RoaXMudGVhcmRvd25WaWV3cygpfSx0ZWFyZG93blZpZXdzOmZ1bmN0aW9uKCl7dGhpcy5jb25u
ZWN0aW9ucyYmdGhpcy5jb25uZWN0aW9ucy5sZW5ndGg+MCYmKHRoaXMuY29ubmVjdGlvbnM9W10s
bi5ydW4ub25jZSh0aGlzLnJvdXRlciwiX3NldE91dGxldHMiKSl9fSk7KDAsaS5kZXByZWNhdGVV
bmRlcnNjb3JlQWN0aW9ucykoXyksXy5yZW9wZW5DbGFzcyh7aXNSb3V0ZUZhY3Rvcnk6ITB9KSxl
LmRlZmF1bHQ9X30pLGUoImVtYmVyLXJvdXRpbmcvc3lzdGVtL3JvdXRlciIsWyJleHBvcnRzIiwi
ZW1iZXItdXRpbHMiLCJlbWJlci1jb25zb2xlIiwiZW1iZXItbWV0YWwiLCJlbWJlci1kZWJ1ZyIs
ImVtYmVyLXJ1bnRpbWUiLCJlbWJlci1yb3V0aW5nL3N5c3RlbS9yb3V0ZSIsImVtYmVyLXJvdXRp
bmcvc3lzdGVtL2RzbCIsImVtYmVyLXJvdXRpbmcvbG9jYXRpb24vYXBpIiwiZW1iZXItcm91dGlu
Zy91dGlscyIsImVtYmVyLXJvdXRpbmcvc3lzdGVtL3JvdXRlcl9zdGF0ZSIsInJvdXRlciJdLGZ1
bmN0aW9uKGUsdCxuLHIsaSxvLHMsYSx1LGwsYyxwKXsidXNlIHN0cmljdCIKLWZ1bmN0aW9uIGYo
KXtyZXR1cm4gdGhpc31mdW5jdGlvbiBoKGUsdCxuKXt2YXIgcixpLG8scz0hMQotZm9yKHI9dC5s
ZW5ndGgtMTtyPj0wOy0tcilpZihpPXRbcl0sbz1pLmhhbmRsZXIsZT09PW8mJihzPSEwKSxzJiYh
MCE9PW4obykpcmV0dXJufWZ1bmN0aW9uIGQoZSx0KXt2YXIgcj1bXSxpPXZvaWQgMAotaT1lJiYi
b2JqZWN0Ij09dHlwZW9mIGUmJiJvYmplY3QiPT10eXBlb2YgZS5lcnJvclRocm93bj9lLmVycm9y
VGhyb3duOmUsdCYmci5wdXNoKHQpLGkmJihpLm1lc3NhZ2UmJnIucHVzaChpLm1lc3NhZ2UpLGku
c3RhY2smJnIucHVzaChpLnN0YWNrKSwic3RyaW5nIj09dHlwZW9mIGkmJnIucHVzaChpKSksbi5k
ZWZhdWx0LmVycm9yLmFwcGx5KHRoaXMscil9ZnVuY3Rpb24gbShlLG4pe3ZhciByPWUucm91dGVy
LGk9KDAsdC5nZXRPd25lcikoZSksbz1lLnJvdXRlTmFtZSxzPWUuZnVsbFJvdXRlTmFtZSxhPXMr
Il8iK24KLXJldHVybiB5KGkscixvKyJfIituLGEpP2E6IiJ9ZnVuY3Rpb24gZyhlLG4pe3ZhciBy
PWUucm91dGVyLGk9KDAsdC5nZXRPd25lcikoZSksbz1lLnJvdXRlTmFtZSxzPSJhcHBsaWNhdGlv
biI9PT1vP246bysiLiIrbixhPWUuZnVsbFJvdXRlTmFtZSx1PSJhcHBsaWNhdGlvbiI9PT1hP246
YSsiLiIrbgotcmV0dXJuIHkoaSxyLHMsdSk/dToiIn1mdW5jdGlvbiB5KGUsdCxuLHIpe3ZhciBp
PXQuaGFzUm91dGUociksbz1lLmhhc1JlZ2lzdHJhdGlvbigidGVtcGxhdGU6IituKXx8ZS5oYXNS
ZWdpc3RyYXRpb24oInJvdXRlOiIrbikKLXJldHVybiBpJiZvfWZ1bmN0aW9uIHYoZSxuLHIpe3Zh
ciBvLHMsYT1yLnNoaWZ0KCkKLWlmKCFlKXtpZihuKXJldHVybgotdGhyb3cgbmV3IGkuRXJyb3Io
IkNhbid0IHRyaWdnZXIgYWN0aW9uICciK2ErIicgYmVjYXVzZSB5b3VyIGFwcCBoYXNuJ3QgZmlu
aXNoZWQgdHJhbnNpdGlvbmluZyBpbnRvIGl0cyBmaXJzdCByb3V0ZS4gVG8gdHJpZ2dlciBhbiBh
Y3Rpb24gb24gZGVzdGluYXRpb24gcm91dGVzIGR1cmluZyBhIHRyYW5zaXRpb24sIHlvdSBjYW4g
Y2FsbCBgLnNlbmQoKWAgb24gdGhlIGBUcmFuc2l0aW9uYCBvYmplY3QgcGFzc2VkIHRvIHRoZSBg
bW9kZWwvYmVmb3JlTW9kZWwvYWZ0ZXJNb2RlbGAgaG9va3MuIil9dmFyIHU9ITEsbD12b2lkIDAs
Yz12b2lkIDAKLWZvcihvPWUubGVuZ3RoLTE7bz49MDtvLS0paWYobD1lW29dLChjPWwuaGFuZGxl
cikmJmMuYWN0aW9ucyYmYy5hY3Rpb25zW2FdKXtpZighMCE9PWMuYWN0aW9uc1thXS5hcHBseShj
LHIpKXJldHVybiB2b2lkKCJlcnJvciI9PT1hJiYocz0oMCx0Lmd1aWRGb3IpKHJbMF0pLGMucm91
dGVyLl9tYXJrRXJyb3JBc0hhbmRsZWQocykpKQotdT0hMH1pZihrW2FdKXJldHVybiB2b2lkIGtb
YV0uYXBwbHkobnVsbCxyKQotaWYoIXUmJiFuKXRocm93IG5ldyBpLkVycm9yKCJOb3RoaW5nIGhh
bmRsZWQgdGhlIGFjdGlvbiAnIithKyInLiBJZiB5b3UgZGlkIGhhbmRsZSB0aGUgYWN0aW9uLCB0
aGlzIGVycm9yIGNhbiBiZSBjYXVzZWQgYnkgcmV0dXJuaW5nIHRydWUgZnJvbSBhbiBhY3Rpb24g
aGFuZGxlciBpbiBhIGNvbnRyb2xsZXIsIGNhdXNpbmcgdGhlIGFjdGlvbiB0byBidWJibGUuIil9
ZnVuY3Rpb24gYihlLHQsbil7dmFyIHIsaSxvPWUuX3JvdXRlck1pY3JvbGliLHM9by5hcHBseUlu
dGVudCh0LG4pLGE9cy5oYW5kbGVySW5mb3MsdT1zLnBhcmFtcwotZm9yKHI9MDtyPGEubGVuZ3Ro
OysrcilpPWFbcl0saS5pc1Jlc29sdmVkP3VbaS5uYW1lXT1pLnBhcmFtczp1W2kubmFtZV09aS5z
ZXJpYWxpemUoaS5jb250ZXh0KQotcmV0dXJuIHN9ZnVuY3Rpb24gXyhlKXt2YXIgbj1lLl9yb3V0
ZXJNaWNyb2xpYi5jdXJyZW50SGFuZGxlckluZm9zCi1pZigwIT09bi5sZW5ndGgpe3ZhciBpPVIu
X3JvdXRlUGF0aChuKSxvPW5bbi5sZW5ndGgtMV0ubmFtZSxzPWUuZ2V0KCJsb2NhdGlvbiIpLmdl
dFVSTCgpOygwLHIuc2V0KShlLCJjdXJyZW50UGF0aCIsaSksKDAsci5zZXQpKGUsImN1cnJlbnRS
b3V0ZU5hbWUiLG8pLCgwLHIuc2V0KShlLCJjdXJyZW50VVJMIixzKQotdmFyIGE9KDAsdC5nZXRP
d25lcikoZSkubG9va3VwKCJjb250cm9sbGVyOmFwcGxpY2F0aW9uIikKLWEmJigiY3VycmVudFBh
dGgiaW4gYXx8KDAsci5kZWZpbmVQcm9wZXJ0eSkoYSwiY3VycmVudFBhdGgiKSwoMCxyLnNldCko
YSwiY3VycmVudFBhdGgiLGkpLCJjdXJyZW50Um91dGVOYW1lImluIGF8fCgwLHIuZGVmaW5lUHJv
cGVydHkpKGEsImN1cnJlbnRSb3V0ZU5hbWUiKSwoMCxyLnNldCkoYSwiY3VycmVudFJvdXRlTmFt
ZSIsbykpfX1mdW5jdGlvbiB3KGUsbil7dmFyIHI9Yy5kZWZhdWx0LmNyZWF0ZSh7ZW1iZXJSb3V0
ZXI6bixyb3V0ZXJKczpuLl9yb3V0ZXJNaWNyb2xpYixyb3V0ZXJKc1N0YXRlOmUuc3RhdGV9KQot
bi5jdXJyZW50U3RhdGV8fG4uc2V0KCJjdXJyZW50U3RhdGUiLHIpLG4uc2V0KCJ0YXJnZXRTdGF0
ZSIsciksZS5wcm9taXNlPWUuY2F0Y2goZnVuY3Rpb24oZSl7dmFyIHI9KDAsdC5ndWlkRm9yKShl
KQotaWYoIW4uX2lzRXJyb3JIYW5kbGVkKHIpKXRocm93IGUKLW4uX2NsZWFySGFuZGxlZEVycm9y
KHIpfSl9ZnVuY3Rpb24gRShlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGUmJigiIj09PWV8fCIv
Ij09PWVbMF0pfWZ1bmN0aW9uIHgoZSx0LG4scil7dmFyIGksbyxzPWUuX3F1ZXJ5UGFyYW1zRm9y
KHQpCi1mb3IodmFyIGEgaW4gbiluLmhhc093blByb3BlcnR5KGEpJiYoaT1uW2FdLG89cy5tYXBb
YV0scihhLGksbykpfWZ1bmN0aW9uIEMoZSx0KXtpZihlKWZvcih2YXIgbixyLGk9W2VdO2kubGVu
Z3RoPjA7KXtpZihuPWkuc2hpZnQoKSxuLnJlbmRlci5uYW1lPT09dClyZXR1cm4gbgotcj1uLm91
dGxldHMKLWZvcih2YXIgbyBpbiByKWkucHVzaChyW29dKX19ZnVuY3Rpb24gTyhlLHQsbil7dmFy
IGk9dm9pZCAwLG89e3JlbmRlcjpuLG91dGxldHM6T2JqZWN0LmNyZWF0ZShudWxsKSx3YXNVc2Vk
OiExfQotcmV0dXJuIGk9bi5pbnRvP0MoZSxuLmludG8pOnQsaT8oMCxyLnNldCkoaS5vdXRsZXRz
LG4ub3V0bGV0LG8pOm4uaW50bz9BKGUsbi5pbnRvLG8pOmU9byx7bGl2ZVJvdXRlczplLG93blN0
YXRlOm99fWZ1bmN0aW9uIEEoZSx0LG4pe2Uub3V0bGV0cy5fX2VtYmVyX29ycGhhbnNfX3x8KGUu
b3V0bGV0cy5fX2VtYmVyX29ycGhhbnNfXz17cmVuZGVyOntuYW1lOiJfX2VtYmVyX29ycGhhbnNf
XyJ9LG91dGxldHM6T2JqZWN0LmNyZWF0ZShudWxsKX0pLGUub3V0bGV0cy5fX2VtYmVyX29ycGhh
bnNfXy5vdXRsZXRzW3RdPW4sci5ydW4uc2NoZWR1bGUoImFmdGVyUmVuZGVyIixmdW5jdGlvbigp
e30pfWZ1bmN0aW9uIFQoZSx0LG4pe3ZhciByPUMoZSxuLnJvdXRlTmFtZSkKLXJldHVybiByfHwo
dC5vdXRsZXRzLm1haW49e3JlbmRlcjp7bmFtZTpuLnJvdXRlTmFtZSxvdXRsZXQ6Im1haW4ifSxv
dXRsZXRzOnt9fSx0KX1lLnRyaWdnZXJFdmVudD12Ci12YXIgUz1BcnJheS5wcm90b3R5cGUuc2xp
Y2UsUj1vLk9iamVjdC5leHRlbmQoby5FdmVudGVkLHtsb2NhdGlvbjoiaGFzaCIscm9vdFVSTDoi
LyIsX2luaXRSb3V0ZXJKczpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3JvdXRlck1pY3JvbGliPW5l
dyBwLmRlZmF1bHQKLWUudHJpZ2dlckV2ZW50PXYsZS5fdHJpZ2dlcldpbGxDaGFuZ2VDb250ZXh0
PWYsZS5fdHJpZ2dlcldpbGxMZWF2ZT1mCi12YXIgdD10aGlzLmNvbnN0cnVjdG9yLmRzbENhbGxi
YWNrc3x8W2ZdLG49dGhpcy5fYnVpbGREU0woKQotbi5yb3V0ZSgiYXBwbGljYXRpb24iLHtwYXRo
OiIvIixyZXNldE5hbWVzcGFjZTohMCxvdmVycmlkZU5hbWVBc3NlcnRpb246ITB9LGZ1bmN0aW9u
KCl7dmFyIGUKLWZvcihlPTA7ZTx0Lmxlbmd0aDtlKyspdFtlXS5jYWxsKHRoaXMpfSksZS5tYXAo
bi5nZW5lcmF0ZSgpKX0sX2J1aWxkRFNMOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5faGFzTW9kdWxl
QmFzZWRSZXNvbHZlcigpLG49e2VuYWJsZUxvYWRpbmdTdWJzdGF0ZXM6ISFlfSxyPSgwLHQuZ2V0
T3duZXIpKHRoaXMpLGk9dGhpcwotcmV0dXJuIG4ucmVzb2x2ZVJvdXRlTWFwPWZ1bmN0aW9uKGUp
e3JldHVybiByLmZhY3RvcnlGb3IoInJvdXRlLW1hcDoiK2UpfSxuLmFkZFJvdXRlRm9yRW5naW5l
PWZ1bmN0aW9uKGUsdCl7aS5fZW5naW5lSW5mb0J5Um91dGVbZV18fChpLl9lbmdpbmVJbmZvQnlS
b3V0ZVtlXT10KX0sbmV3IGEuZGVmYXVsdChudWxsLG4pfSxpbml0OmZ1bmN0aW9uKCl7dGhpcy5f
c3VwZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMuY3VycmVudFVSTD1udWxsLHRoaXMuY3Vy
cmVudFJvdXRlTmFtZT1udWxsLHRoaXMuY3VycmVudFBhdGg9bnVsbCx0aGlzLl9xcENhY2hlPU9i
amVjdC5jcmVhdGUobnVsbCksdGhpcy5fcmVzZXRRdWV1ZWRRdWVyeVBhcmFtZXRlckNoYW5nZXMo
KSx0aGlzLl9oYW5kbGVkRXJyb3JzPSgwLHQuZGljdGlvbmFyeSkobnVsbCksdGhpcy5fZW5naW5l
SW5zdGFuY2VzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fZW5naW5lSW5mb0J5Um91dGU9T2Jq
ZWN0LmNyZWF0ZShudWxsKX0sX3Jlc2V0UXVldWVkUXVlcnlQYXJhbWV0ZXJDaGFuZ2VzOmZ1bmN0
aW9uKCl7dGhpcy5fcXVldWVkUVBDaGFuZ2VzPXt9fSx1cmw6KDAsci5jb21wdXRlZCkoZnVuY3Rp
b24oKXtyZXR1cm4oMCxyLmdldCkodGhpcywibG9jYXRpb24iKS5nZXRVUkwoKX0pLF9oYXNNb2R1
bGVCYXNlZFJlc29sdmVyOmZ1bmN0aW9uKCl7dmFyIGU9KDAsdC5nZXRPd25lcikodGhpcykKLWlm
KCFlKXJldHVybiExCi12YXIgbj1lLmFwcGxpY2F0aW9uJiZlLmFwcGxpY2F0aW9uLl9fcmVnaXN0
cnlfXyYmZS5hcHBsaWNhdGlvbi5fX3JlZ2lzdHJ5X18ucmVzb2x2ZXIKLXJldHVybiEhbiYmISFu
Lm1vZHVsZUJhc2VkUmVzb2x2ZXJ9LHN0YXJ0Um91dGluZzpmdW5jdGlvbigpe3ZhciBlLHQ9KDAs
ci5nZXQpKHRoaXMsImluaXRpYWxVUkwiKQotaWYodGhpcy5zZXR1cFJvdXRlcigpJiYodm9pZCAw
PT09dCYmKHQ9KDAsci5nZXQpKHRoaXMsImxvY2F0aW9uIikuZ2V0VVJMKCkpLChlPXRoaXMuaGFu
ZGxlVVJMKHQpKSYmZS5lcnJvcikpdGhyb3cgZS5lcnJvcn0sc2V0dXBSb3V0ZXI6ZnVuY3Rpb24o
KXt2YXIgZT10aGlzCi10aGlzLl9pbml0Um91dGVySnMoKSx0aGlzLl9zZXR1cExvY2F0aW9uKCkK
LXZhciB0PSgwLHIuZ2V0KSh0aGlzLCJsb2NhdGlvbiIpCi1yZXR1cm4hKDAsci5nZXQpKHQsImNh
bmNlbFJvdXRlclNldHVwIikmJih0aGlzLl9zZXR1cFJvdXRlcih0KSx0Lm9uVXBkYXRlVVJMKGZ1
bmN0aW9uKHQpe2UuaGFuZGxlVVJMKHQpfSksITApfSxkaWRUcmFuc2l0aW9uOmZ1bmN0aW9uKCl7
Xyh0aGlzKSx0aGlzLl9jYW5jZWxTbG93VHJhbnNpdGlvblRpbWVyKCksdGhpcy5ub3RpZnlQcm9w
ZXJ0eUNoYW5nZSgidXJsIiksdGhpcy5zZXQoImN1cnJlbnRTdGF0ZSIsdGhpcy50YXJnZXRTdGF0
ZSksci5ydW4ub25jZSh0aGlzLHRoaXMudHJpZ2dlciwiZGlkVHJhbnNpdGlvbiIpfSxfc2V0T3V0
bGV0czpmdW5jdGlvbigpe2lmKCF0aGlzLmlzRGVzdHJveWluZyYmIXRoaXMuaXNEZXN0cm95ZWQp
e3ZhciBlLG4scixpLG8scyxhLHUsbD10aGlzLl9yb3V0ZXJNaWNyb2xpYi5jdXJyZW50SGFuZGxl
ckluZm9zLGM9dm9pZCAwLHA9dm9pZCAwLGY9bnVsbAotaWYobCl7Zm9yKGU9MDtlPGwubGVuZ3Ro
O2UrKyl7Zm9yKGM9bFtlXS5oYW5kbGVyLG49Yy5jb25uZWN0aW9ucyxyPXZvaWQgMCxpPTA7aTxu
Lmxlbmd0aDtpKyspbz1PKGYscCxuW2ldKSxmPW8ubGl2ZVJvdXRlcyxvLm93blN0YXRlLnJlbmRl
ci5uYW1lIT09Yy5yb3V0ZU5hbWUmJiJtYWluIiE9PW8ub3duU3RhdGUucmVuZGVyLm91dGxldHx8
KHI9by5vd25TdGF0ZSkKLTA9PT1uLmxlbmd0aCYmKHI9VChmLHAsYykpLHA9cn1mJiYodGhpcy5f
dG9wbGV2ZWxWaWV3P3RoaXMuX3RvcGxldmVsVmlldy5zZXRPdXRsZXRTdGF0ZShmKToocz0oMCx0
LmdldE93bmVyKSh0aGlzKSxhPXMuZmFjdG9yeUZvcigidmlldzotb3V0bGV0IiksdGhpcy5fdG9w
bGV2ZWxWaWV3PWEuY3JlYXRlKCksdGhpcy5fdG9wbGV2ZWxWaWV3LnNldE91dGxldFN0YXRlKGYp
LHU9cy5sb29rdXAoIi1hcHBsaWNhdGlvbi1pbnN0YW5jZTptYWluIiksdS5kaWRDcmVhdGVSb290
Vmlldyh0aGlzLl90b3BsZXZlbFZpZXcpKSl9fX0sd2lsbFRyYW5zaXRpb246ZnVuY3Rpb24oZSx0
LG4pe3IucnVuLm9uY2UodGhpcyx0aGlzLnRyaWdnZXIsIndpbGxUcmFuc2l0aW9uIixuKX0saGFu
ZGxlVVJMOmZ1bmN0aW9uKGUpe3JldHVybiBlPWUuc3BsaXQoLyMoLispPy8pWzBdLHRoaXMuX2Rv
VVJMVHJhbnNpdGlvbigiaGFuZGxlVVJMIixlKX0sX2RvVVJMVHJhbnNpdGlvbjpmdW5jdGlvbihl
LHQpe3ZhciBuPXRoaXMuX3JvdXRlck1pY3JvbGliW2VdKHR8fCIvIikKLXJldHVybiB3KG4sdGhp
cyksbn0sdHJhbnNpdGlvblRvOmZ1bmN0aW9uKCl7dmFyIGUsdCxuLHI9dm9pZCAwCi1mb3IoZT1h
cmd1bWVudHMubGVuZ3RoLHQ9QXJyYXkoZSksbj0wO248ZTtuKyspdFtuXT1hcmd1bWVudHNbbl0K
LWlmKEUodFswXSkpcmV0dXJuIHRoaXMuX2RvVVJMVHJhbnNpdGlvbigidHJhbnNpdGlvblRvIix0
WzBdKQotdmFyIGk9dFt0Lmxlbmd0aC0xXQotcj1pJiZpLmhhc093blByb3BlcnR5KCJxdWVyeVBh
cmFtcyIpP3QucG9wKCkucXVlcnlQYXJhbXM6e30KLXZhciBvPXQuc2hpZnQoKQotcmV0dXJuIHRo
aXMuX2RvVHJhbnNpdGlvbihvLHQscil9LGludGVybWVkaWF0ZVRyYW5zaXRpb25UbzpmdW5jdGlv
bigpe3ZhciBlOyhlPXRoaXMuX3JvdXRlck1pY3JvbGliKS5pbnRlcm1lZGlhdGVUcmFuc2l0aW9u
VG8uYXBwbHkoZSxhcmd1bWVudHMpLF8odGhpcyl9LHJlcGxhY2VXaXRoOmZ1bmN0aW9uKCl7cmV0
dXJuIHRoaXMudHJhbnNpdGlvblRvLmFwcGx5KHRoaXMsYXJndW1lbnRzKS5tZXRob2QoInJlcGxh
Y2UiKX0sZ2VuZXJhdGU6ZnVuY3Rpb24oKXt2YXIgZSx0PShlPXRoaXMuX3JvdXRlck1pY3JvbGli
KS5nZW5lcmF0ZS5hcHBseShlLGFyZ3VtZW50cykKLXJldHVybiB0aGlzLmxvY2F0aW9uLmZvcm1h
dFVSTCh0KX0saXNBY3RpdmU6ZnVuY3Rpb24oKXt2YXIgZQotcmV0dXJuKGU9dGhpcy5fcm91dGVy
TWljcm9saWIpLmlzQWN0aXZlLmFwcGx5KGUsYXJndW1lbnRzKX0saXNBY3RpdmVJbnRlbnQ6ZnVu
Y3Rpb24oZSx0LG4pe3JldHVybiB0aGlzLmN1cnJlbnRTdGF0ZS5pc0FjdGl2ZUludGVudChlLHQs
bil9LHNlbmQ6ZnVuY3Rpb24oKXt2YXIgZTsoZT10aGlzLl9yb3V0ZXJNaWNyb2xpYikudHJpZ2dl
ci5hcHBseShlLGFyZ3VtZW50cyl9LGhhc1JvdXRlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9y
b3V0ZXJNaWNyb2xpYi5oYXNSb3V0ZShlKX0scmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLl9yb3V0ZXJN
aWNyb2xpYiYmdGhpcy5fcm91dGVyTWljcm9saWIucmVzZXQoKX0sd2lsbERlc3Ryb3k6ZnVuY3Rp
b24oKXt0aGlzLl90b3BsZXZlbFZpZXcmJih0aGlzLl90b3BsZXZlbFZpZXcuZGVzdHJveSgpLHRo
aXMuX3RvcGxldmVsVmlldz1udWxsKSx0aGlzLl9zdXBlci5hcHBseSh0aGlzLGFyZ3VtZW50cyks
dGhpcy5yZXNldCgpCi12YXIgZT10aGlzLl9lbmdpbmVJbnN0YW5jZXMKLWZvcih2YXIgdCBpbiBl
KWZvcih2YXIgbiBpbiBlW3RdKSgwLHIucnVuKShlW3RdW25dLCJkZXN0cm95Iil9LF9hY3RpdmVR
UENoYW5nZWQ6ZnVuY3Rpb24oZSx0KXt0aGlzLl9xdWV1ZWRRUENoYW5nZXNbZV09dCxyLnJ1bi5v
bmNlKHRoaXMsdGhpcy5fZmlyZVF1ZXJ5UGFyYW1UcmFuc2l0aW9uKX0sX3VwZGF0aW5nUVBDaGFu
Z2VkOmZ1bmN0aW9uKGUpe3RoaXMuX3FwVXBkYXRlc3x8KHRoaXMuX3FwVXBkYXRlcz17fSksdGhp
cy5fcXBVcGRhdGVzW2VdPSEwfSxfZmlyZVF1ZXJ5UGFyYW1UcmFuc2l0aW9uOmZ1bmN0aW9uKCl7
dGhpcy50cmFuc2l0aW9uVG8oe3F1ZXJ5UGFyYW1zOnRoaXMuX3F1ZXVlZFFQQ2hhbmdlc30pLHRo
aXMuX3Jlc2V0UXVldWVkUXVlcnlQYXJhbWV0ZXJDaGFuZ2VzKCl9LF9zZXR1cExvY2F0aW9uOmZ1
bmN0aW9uKCl7dmFyIGUsbixpPSgwLHIuZ2V0KSh0aGlzLCJsb2NhdGlvbiIpLG89KDAsci5nZXQp
KHRoaXMsInJvb3RVUkwiKSxzPSgwLHQuZ2V0T3duZXIpKHRoaXMpCi0ic3RyaW5nIj09dHlwZW9m
IGkmJnMmJihlPXMubG9va3VwKCJsb2NhdGlvbjoiK2kpLHZvaWQgMCE9PWU/aT0oMCxyLnNldCko
dGhpcywibG9jYXRpb24iLGUpOihuPXtpbXBsZW1lbnRhdGlvbjppfSxpPSgwLHIuc2V0KSh0aGlz
LCJsb2NhdGlvbiIsdS5kZWZhdWx0LmNyZWF0ZShuKSkpKSxudWxsIT09aSYmIm9iamVjdCI9PXR5
cGVvZiBpJiYobyYmKDAsci5zZXQpKGksInJvb3RVUkwiLG8pLCJmdW5jdGlvbiI9PXR5cGVvZiBp
LmRldGVjdCYmaS5kZXRlY3QoKSwiZnVuY3Rpb24iPT10eXBlb2YgaS5pbml0U3RhdGUmJmkuaW5p
dFN0YXRlKCkpfSxfZ2V0SGFuZGxlckZ1bmN0aW9uOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxuPU9i
amVjdC5jcmVhdGUobnVsbCkscj0oMCx0LmdldE93bmVyKSh0aGlzKQotcmV0dXJuIGZ1bmN0aW9u
KHQpe3ZhciBpLG8sYT10LHU9cixsPWUuX2VuZ2luZUluZm9CeVJvdXRlW2FdCi1sJiYoaT1lLl9n
ZXRFbmdpbmVJbnN0YW5jZShsKSx1PWksYT1sLmxvY2FsRnVsbE5hbWUpCi12YXIgYz0icm91dGU6
IithLHA9dS5sb29rdXAoYykKLWlmKG5bdF0pcmV0dXJuIHAKLWlmKG5bdF09ITAscHx8KG89dS5m
YWN0b3J5Rm9yKCJyb3V0ZTpiYXNpYyIpLmNsYXNzLHUucmVnaXN0ZXIoYyxvLmV4dGVuZCgpKSxw
PXUubG9va3VwKGMpKSxwLl9zZXRSb3V0ZU5hbWUoYSksbCYmISgwLHMuaGFzRGVmYXVsdFNlcmlh
bGl6ZSkocCkpdGhyb3cgbmV3IEVycm9yKCJEZWZpbmluZyBhIGN1c3RvbSBzZXJpYWxpemUgbWV0
aG9kIG9uIGFuIEVuZ2luZSByb3V0ZSBpcyBub3Qgc3VwcG9ydGVkLiIpCi1yZXR1cm4gcH19LF9n
ZXRTZXJpYWxpemVyRnVuY3Rpb246ZnVuY3Rpb24oKXt2YXIgZT10aGlzCi1yZXR1cm4gZnVuY3Rp
b24odCl7dmFyIG49ZS5fZW5naW5lSW5mb0J5Um91dGVbdF0KLWlmKG4pcmV0dXJuIG4uc2VyaWFs
aXplTWV0aG9kfHxzLmRlZmF1bHRTZXJpYWxpemV9fSxfc2V0dXBSb3V0ZXI6ZnVuY3Rpb24oZSl7
dmFyIHQsbj12b2lkIDAsaT10aGlzLG89dGhpcy5fcm91dGVyTWljcm9saWIKLW8uZ2V0SGFuZGxl
cj10aGlzLl9nZXRIYW5kbGVyRnVuY3Rpb24oKSxvLmdldFNlcmlhbGl6ZXI9dGhpcy5fZ2V0U2Vy
aWFsaXplckZ1bmN0aW9uKCkKLXZhciBzPWZ1bmN0aW9uKCl7ZS5zZXRVUkwobiksKDAsci5zZXQp
KGksImN1cnJlbnRVUkwiLG4pfQotby51cGRhdGVVUkw9ZnVuY3Rpb24oZSl7bj1lLHIucnVuLm9u
Y2Uocyl9LGUucmVwbGFjZVVSTCYmKHQ9ZnVuY3Rpb24oKXtlLnJlcGxhY2VVUkwobiksKDAsci5z
ZXQpKGksImN1cnJlbnRVUkwiLG4pfSxvLnJlcGxhY2VVUkw9ZnVuY3Rpb24oZSl7bj1lLHIucnVu
Lm9uY2UodCl9KSxvLmRpZFRyYW5zaXRpb249ZnVuY3Rpb24oZSl7aS5kaWRUcmFuc2l0aW9uKGUp
fSxvLndpbGxUcmFuc2l0aW9uPWZ1bmN0aW9uKGUsdCxuKXtpLndpbGxUcmFuc2l0aW9uKGUsdCxu
KX19LF9zZXJpYWxpemVRdWVyeVBhcmFtczpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMKLXgodGhp
cyxlLHQsZnVuY3Rpb24oZSxyLGkpe2k/KGRlbGV0ZSB0W2VdLHRbaS51cmxLZXldPWkucm91dGUu
c2VyaWFsaXplUXVlcnlQYXJhbShyLGkudXJsS2V5LGkudHlwZSkpOnZvaWQgMD09PXJ8fCh0W2Vd
PW4uX3NlcmlhbGl6ZVF1ZXJ5UGFyYW0ociwoMCxvLnR5cGVPZikocikpKX0pfSxfc2VyaWFsaXpl
UXVlcnlQYXJhbTpmdW5jdGlvbihlLHQpe3JldHVybiJhcnJheSI9PT10P0pTT04uc3RyaW5naWZ5
KGUpOiIiK2V9LF9kZXNlcmlhbGl6ZVF1ZXJ5UGFyYW1zOmZ1bmN0aW9uKGUsdCl7eCh0aGlzLGUs
dCxmdW5jdGlvbihlLG4scil7ciYmKGRlbGV0ZSB0W2VdLHRbci5wcm9wXT1yLnJvdXRlLmRlc2Vy
aWFsaXplUXVlcnlQYXJhbShuLHIudXJsS2V5LHIudHlwZSkpfSl9LF9kZXNlcmlhbGl6ZVF1ZXJ5
UGFyYW06ZnVuY3Rpb24oZSx0KXtyZXR1cm4iYm9vbGVhbiI9PT10PyJ0cnVlIj09PWU6Im51bWJl
ciI9PT10P051bWJlcihlKS52YWx1ZU9mKCk6ImFycmF5Ij09PXQ/KDAsby5BKShKU09OLnBhcnNl
KGUpKTplfSxfcHJ1bmVEZWZhdWx0UXVlcnlQYXJhbVZhbHVlczpmdW5jdGlvbihlLHQpe3ZhciBu
LHI9dGhpcy5fcXVlcnlQYXJhbXNGb3IoZSkKLWZvcih2YXIgaSBpbiB0KShuPXIubWFwW2ldKSYm
bi5zZXJpYWxpemVkRGVmYXVsdFZhbHVlPT09dFtpXSYmZGVsZXRlIHRbaV19LF9kb1RyYW5zaXRp
b246ZnVuY3Rpb24oZSxuLHIpe3ZhciBpLG89ZXx8KDAsbC5nZXRBY3RpdmVUYXJnZXROYW1lKSh0
aGlzLl9yb3V0ZXJNaWNyb2xpYikscz17fQotdGhpcy5fcHJvY2Vzc0FjdGl2ZVRyYW5zaXRpb25R
dWVyeVBhcmFtcyhvLG4scyxyKSwoMCx0LmFzc2lnbikocyxyKSx0aGlzLl9wcmVwYXJlUXVlcnlQ
YXJhbXMobyxuLHMpCi12YXIgYT0oMCxsLnJvdXRlQXJncykobyxuLHMpLHU9KGk9dGhpcy5fcm91
dGVyTWljcm9saWIpLnRyYW5zaXRpb25Uby5hcHBseShpLGEpCi1yZXR1cm4gdyh1LHRoaXMpLHV9
LF9wcm9jZXNzQWN0aXZlVHJhbnNpdGlvblF1ZXJ5UGFyYW1zOmZ1bmN0aW9uKGUsbixyLGkpe2lm
KHRoaXMuX3JvdXRlck1pY3JvbGliLmFjdGl2ZVRyYW5zaXRpb24pe3ZhciBvPXt9LHM9dGhpcy5f
cXBVcGRhdGVzfHx7fQotZm9yKHZhciBhIGluIHRoaXMuX3JvdXRlck1pY3JvbGliLmFjdGl2ZVRy
YW5zaXRpb24ucXVlcnlQYXJhbXMpc1thXXx8KG9bYV09dGhpcy5fcm91dGVyTWljcm9saWIuYWN0
aXZlVHJhbnNpdGlvbi5xdWVyeVBhcmFtc1thXSkKLXRoaXMuX2Z1bGx5U2NvcGVRdWVyeVBhcmFt
cyhlLG4saSksdGhpcy5fZnVsbHlTY29wZVF1ZXJ5UGFyYW1zKGUsbixvKSwoMCx0LmFzc2lnbiko
cixvKX19LF9wcmVwYXJlUXVlcnlQYXJhbXM6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWIodGhpcyxl
LHQpCi10aGlzLl9oeWRyYXRlVW5zdXBwbGllZFF1ZXJ5UGFyYW1zKHIsbiksdGhpcy5fc2VyaWFs
aXplUXVlcnlQYXJhbXMoci5oYW5kbGVySW5mb3MsbiksdGhpcy5fcHJ1bmVEZWZhdWx0UXVlcnlQ
YXJhbVZhbHVlcyhyLmhhbmRsZXJJbmZvcyxuKX0sX2dldFFQTWV0YTpmdW5jdGlvbihlKXt2YXIg
dD1lLmhhbmRsZXIKLXJldHVybiB0JiYoMCxyLmdldCkodCwiX3FwIil9LF9xdWVyeVBhcmFtc0Zv
cjpmdW5jdGlvbihlKXt2YXIgbixyLGksbyxzLGEsdT1lW2UubGVuZ3RoLTFdLm5hbWUKLWlmKHRo
aXMuX3FwQ2FjaGVbdV0pcmV0dXJuIHRoaXMuX3FwQ2FjaGVbdV0KLXZhciBsPSEwLGM9e30scD17
fSxmPVtdCi1mb3Iobj0wO248ZS5sZW5ndGg7KytuKWlmKHI9dGhpcy5fZ2V0UVBNZXRhKGVbbl0p
KXtmb3IoaT0wO2k8ci5xcHMubGVuZ3RoO2krKylvPXIucXBzW2ldLHM9by51cmxLZXksYT1jW3Nd
LGEmJmEuY29udHJvbGxlck5hbWUhPT1vLmNvbnRyb2xsZXJOYW1lJiZjW3NdLGNbc109byxmLnB1
c2gobyk7KDAsdC5hc3NpZ24pKHAsci5tYXApfWVsc2UgbD0hMQotdmFyIGg9e3FwczpmLG1hcDpw
fQotcmV0dXJuIGwmJih0aGlzLl9xcENhY2hlW3VdPWgpLGh9LF9mdWxseVNjb3BlUXVlcnlQYXJh
bXM6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbyxzLGEsdSxsLGM9Yih0aGlzLGUsdCkscD1jLmhh
bmRsZXJJbmZvcwotZm9yKHI9MCxpPXAubGVuZ3RoO3I8aTsrK3IpaWYobz10aGlzLl9nZXRRUE1l
dGEocFtyXSkpZm9yKHM9MCxhPW8ucXBzLmxlbmd0aDtzPGE7KytzKXU9by5xcHNbc10sKGw9dS5w
cm9wIGluIG4mJnUucHJvcHx8dS5zY29wZWRQcm9wZXJ0eU5hbWUgaW4gbiYmdS5zY29wZWRQcm9w
ZXJ0eU5hbWV8fHUudXJsS2V5IGluIG4mJnUudXJsS2V5KSYmbCE9PXUuc2NvcGVkUHJvcGVydHlO
YW1lJiYoblt1LnNjb3BlZFByb3BlcnR5TmFtZV09bltsXSxkZWxldGUgbltsXSl9LF9oeWRyYXRl
VW5zdXBwbGllZFF1ZXJ5UGFyYW1zOmZ1bmN0aW9uKGUsdCl7dmFyIG4scixpLG8scyxhLHUsYz1l
LmhhbmRsZXJJbmZvcyxwPXRoaXMuX2J1Y2tldENhY2hlCi1mb3Iobj0wO248Yy5sZW5ndGg7Kytu
KWlmKHI9dGhpcy5fZ2V0UVBNZXRhKGNbbl0pKWZvcihpPTAsbz1yLnFwcy5sZW5ndGg7aTxvOysr
aSlzPXIucXBzW2ldLGE9cy5wcm9wIGluIHQmJnMucHJvcHx8cy5zY29wZWRQcm9wZXJ0eU5hbWUg
aW4gdCYmcy5zY29wZWRQcm9wZXJ0eU5hbWV8fHMudXJsS2V5IGluIHQmJnMudXJsS2V5LGE/YSE9
PXMuc2NvcGVkUHJvcGVydHlOYW1lJiYodFtzLnNjb3BlZFByb3BlcnR5TmFtZV09dFthXSxkZWxl
dGUgdFthXSk6KHU9KDAsbC5jYWxjdWxhdGVDYWNoZUtleSkocy5yb3V0ZS5mdWxsUm91dGVOYW1l
LHMucGFydHMsZS5wYXJhbXMpLHRbcy5zY29wZWRQcm9wZXJ0eU5hbWVdPXAubG9va3VwKHUscy5w
cm9wLHMuZGVmYXVsdFZhbHVlKSl9LF9zY2hlZHVsZUxvYWRpbmdFdmVudDpmdW5jdGlvbihlLHQp
e3RoaXMuX2NhbmNlbFNsb3dUcmFuc2l0aW9uVGltZXIoKSx0aGlzLl9zbG93VHJhbnNpdGlvblRp
bWVyPXIucnVuLnNjaGVkdWxlT25jZSgicm91dGVyVHJhbnNpdGlvbnMiLHRoaXMsIl9oYW5kbGVT
bG93VHJhbnNpdGlvbiIsZSx0KX0sY3VycmVudFN0YXRlOm51bGwsdGFyZ2V0U3RhdGU6bnVsbCxf
aGFuZGxlU2xvd1RyYW5zaXRpb246ZnVuY3Rpb24oZSx0KXt0aGlzLl9yb3V0ZXJNaWNyb2xpYi5h
Y3RpdmVUcmFuc2l0aW9uJiYodGhpcy5zZXQoInRhcmdldFN0YXRlIixjLmRlZmF1bHQuY3JlYXRl
KHtlbWJlclJvdXRlcjp0aGlzLHJvdXRlckpzOnRoaXMuX3JvdXRlck1pY3JvbGliLHJvdXRlckpz
U3RhdGU6dGhpcy5fcm91dGVyTWljcm9saWIuYWN0aXZlVHJhbnNpdGlvbi5zdGF0ZX0pKSxlLnRy
aWdnZXIoITAsImxvYWRpbmciLGUsdCkpfSxfY2FuY2VsU2xvd1RyYW5zaXRpb25UaW1lcjpmdW5j
dGlvbigpe3RoaXMuX3Nsb3dUcmFuc2l0aW9uVGltZXImJnIucnVuLmNhbmNlbCh0aGlzLl9zbG93
VHJhbnNpdGlvblRpbWVyKSx0aGlzLl9zbG93VHJhbnNpdGlvblRpbWVyPW51bGx9LF9tYXJrRXJy
b3JBc0hhbmRsZWQ6ZnVuY3Rpb24oZSl7dGhpcy5faGFuZGxlZEVycm9yc1tlXT0hMH0sX2lzRXJy
b3JIYW5kbGVkOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9oYW5kbGVkRXJyb3JzW2VdfSxfY2xl
YXJIYW5kbGVkRXJyb3I6ZnVuY3Rpb24oZSl7ZGVsZXRlIHRoaXMuX2hhbmRsZWRFcnJvcnNbZV19
LF9nZXRFbmdpbmVJbnN0YW5jZTpmdW5jdGlvbihlKXt2YXIgbixyPWUubmFtZSxpPWUuaW5zdGFu
Y2VJZCxvPWUubW91bnRQb2ludCxzPXRoaXMuX2VuZ2luZUluc3RhbmNlcwotc1tyXXx8KHNbcl09
T2JqZWN0LmNyZWF0ZShudWxsKSkKLXZhciBhPXNbcl1baV0KLXJldHVybiBhfHwobj0oMCx0Lmdl
dE93bmVyKSh0aGlzKSxhPW4uYnVpbGRDaGlsZEVuZ2luZUluc3RhbmNlKHIse3JvdXRhYmxlOiEw
LG1vdW50UG9pbnQ6b30pLGEuYm9vdCgpLHNbcl1baV09YSksYX19KSxrPXt3aWxsUmVzb2x2ZU1v
ZGVsOmZ1bmN0aW9uKGUsdCl7dC5yb3V0ZXIuX3NjaGVkdWxlTG9hZGluZ0V2ZW50KGUsdCl9LGVy
cm9yOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10LnN0YXRlLmhhbmRsZXJJbmZvcyxpPW4ucm91dGVy
Ci1oKG4scixmdW5jdGlvbih0KXtpZihuIT09dCYmKHI9Zyh0LCJlcnJvciIpKSlyZXR1cm4gaS5p
bnRlcm1lZGlhdGVUcmFuc2l0aW9uVG8ocixlKSwhMQotdmFyIHIsbz1tKHQsImVycm9yIikKLXJl
dHVybiFvfHwoaS5pbnRlcm1lZGlhdGVUcmFuc2l0aW9uVG8obyxlKSwhMSl9KSxkKGUsIkVycm9y
IHdoaWxlIHByb2Nlc3Npbmcgcm91dGU6ICIrdC50YXJnZXROYW1lKX0sbG9hZGluZzpmdW5jdGlv
bihlLHQpe3ZhciBuPWUuc3RhdGUuaGFuZGxlckluZm9zLHI9dC5yb3V0ZXIKLWgodCxuLGZ1bmN0
aW9uKG4pe2lmKHQhPT1uJiYoaT1nKG4sImxvYWRpbmciKSkpcmV0dXJuIHIuaW50ZXJtZWRpYXRl
VHJhbnNpdGlvblRvKGkpLCExCi12YXIgaSxvPW0obiwibG9hZGluZyIpCi1yZXR1cm4gbz8oci5p
bnRlcm1lZGlhdGVUcmFuc2l0aW9uVG8obyksITEpOmUucGl2b3RIYW5kbGVyIT09bn0pfX0KLVIu
cmVvcGVuQ2xhc3Moe3JvdXRlcjpudWxsLG1hcDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5kc2xD
YWxsYmFja3N8fCh0aGlzLmRzbENhbGxiYWNrcz1bXSx0aGlzLnJlb3BlbkNsYXNzKHtkc2xDYWxs
YmFja3M6dGhpcy5kc2xDYWxsYmFja3N9KSksdGhpcy5kc2xDYWxsYmFja3MucHVzaChlKSx0aGlz
fSxfcm91dGVQYXRoOmZ1bmN0aW9uKGUpe3ZhciB0LG49W10scj12b2lkIDAsaT12b2lkIDAsbz12
b2lkIDAKLWZvcih0PTE7dDxlLmxlbmd0aDt0Kyspe2ZvcihyPWVbdF0ubmFtZSxpPXIuc3BsaXQo
Ii4iKSxvPVMuY2FsbChuKTtvLmxlbmd0aCYmIWZ1bmN0aW9uKGUsdCl7dmFyIG4KLWZvcihuPTA7
bjxlLmxlbmd0aDsrK24paWYoZVtuXSE9PXRbbl0pcmV0dXJuITEKLXJldHVybiEwfShvLGkpOylv
LnNoaWZ0KCkKLW4ucHVzaC5hcHBseShuLGkuc2xpY2Uoby5sZW5ndGgpKX1yZXR1cm4gbi5qb2lu
KCIuIil9fSksKDAsci5kZXByZWNhdGVQcm9wZXJ0eSkoUi5wcm90b3R5cGUsInJvdXRlciIsIl9y
b3V0ZXJNaWNyb2xpYiIse2lkOiJlbWJlci1yb3V0ZXIucm91dGVyIix1bnRpbDoiMi4xNiIsdXJs
OiJodHRwOi8vZW1iZXJqcy5jb20vZGVwcmVjYXRpb25zL3YyLngvI3RvY19lbWJlci1yb3V0ZXIt
cm91dGVyLXJlbmFtZWQtdG8tZW1iZXItcm91dGVyLV9yb3V0ZXJtaWNyb2xpYiJ9KSxlLmRlZmF1
bHQ9Un0pLGUoImVtYmVyLXJvdXRpbmcvc3lzdGVtL3JvdXRlcl9zdGF0ZSIsWyJleHBvcnRzIiwi
ZW1iZXItdXRpbHMiLCJlbWJlci1tZXRhbCIsImVtYmVyLXJ1bnRpbWUiXSxmdW5jdGlvbihlLHQs
bixyKXsidXNlIHN0cmljdCIKLWZ1bmN0aW9uIGkoZSx0KXt2YXIgbj12b2lkIDAKLWZvcihuIGlu
IGUpaWYoZS5oYXNPd25Qcm9wZXJ0eShuKSYmZVtuXSE9PXRbbl0pcmV0dXJuITEKLWZvcihuIGlu
IHQpaWYodC5oYXNPd25Qcm9wZXJ0eShuKSYmZVtuXSE9PXRbbl0pcmV0dXJuITEKLXJldHVybiEw
fWUuZGVmYXVsdD1yLk9iamVjdC5leHRlbmQoe2VtYmVyUm91dGVyOm51bGwscm91dGVySnM6bnVs
bCxyb3V0ZXJKc1N0YXRlOm51bGwsaXNBY3RpdmVJbnRlbnQ6ZnVuY3Rpb24oZSxyLG8scyl7dmFy
IGEsdT10aGlzLnJvdXRlckpzU3RhdGUKLWlmKCF0aGlzLnJvdXRlckpzLmlzQWN0aXZlSW50ZW50
KGUscixudWxsLHUpKXJldHVybiExCi12YXIgbD0oMCxuLmlzRW1wdHkpKE9iamVjdC5rZXlzKG8p
KQotcmV0dXJuIShzJiYhbCl8fChhPXt9LCgwLHQuYXNzaWduKShhLG8pLHRoaXMuZW1iZXJSb3V0
ZXIuX3ByZXBhcmVRdWVyeVBhcmFtcyhlLHIsYSksaShhLHUucXVlcnlQYXJhbXMpKX19KX0pLGUo
ImVtYmVyLXJvdXRpbmcvdXRpbHMiLFsiZXhwb3J0cyIsImVtYmVyLXV0aWxzIiwiZW1iZXItbWV0
YWwiLCJlbWJlci1kZWJ1ZyJdLGZ1bmN0aW9uKGUsdCxuLHIpeyJ1c2Ugc3RyaWN0IgotZnVuY3Rp
b24gaShlLHQpe3ZhciBuLHIsaT1lLnNwbGl0KCIuIiksbz0iIgotZm9yKG49MDtuPGkubGVuZ3Ro
JiYocj1pLnNsaWNlKDAsbisxKS5qb2luKCIuIiksMD09PXQuaW5kZXhPZihyKSk7bisrKW89cgot
cmV0dXJuIG99ZnVuY3Rpb24gbyhlLG4pe3ZhciByLGk9ZSxvPXZvaWQgMAotInN0cmluZyI9PXR5
cGVvZiBpJiYobz17fSxvW2ldPXthczpudWxsfSxpPW8pCi1mb3IodmFyIHMgaW4gaSl7aWYoIWku
aGFzT3duUHJvcGVydHkocykpcmV0dXJuCi1yPWlbc10sInN0cmluZyI9PXR5cGVvZiByJiYocj17
YXM6cn0pLG89bltzXXx8e2FzOm51bGwsc2NvcGU6Im1vZGVsIn0sKDAsdC5hc3NpZ24pKG8sciks
bltzXT1vfX1mdW5jdGlvbiBzKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZSYmKCIiPT09ZXx8
Ii8iPT09ZS5jaGFyQXQoMCkpfWUucm91dGVBcmdzPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1bXQot
cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlJiZyLnB1c2goIiIrZSksci5wdXNoLmFwcGx5KHIsdCks
ci5wdXNoKHtxdWVyeVBhcmFtczpufSkscn0sZS5nZXRBY3RpdmVUYXJnZXROYW1lPWZ1bmN0aW9u
KGUpe3ZhciB0PWUuYWN0aXZlVHJhbnNpdGlvbj9lLmFjdGl2ZVRyYW5zaXRpb24uc3RhdGUuaGFu
ZGxlckluZm9zOmUuc3RhdGUuaGFuZGxlckluZm9zCi1yZXR1cm4gdFt0Lmxlbmd0aC0xXS5uYW1l
fSxlLnN0YXNoUGFyYW1OYW1lcz1mdW5jdGlvbihlLHQpe2lmKCF0Ll9uYW1lc1N0YXNoZWQpe3Zh
ciBuLHIsaSxvLHM9dFt0Lmxlbmd0aC0xXS5uYW1lLGE9ZS5fcm91dGVyTWljcm9saWIucmVjb2du
aXplci5oYW5kbGVyc0ZvcihzKSx1PW51bGwKLWZvcihuPTA7bjx0Lmxlbmd0aDsrK24pcj10W25d
LGk9YVtuXS5uYW1lcyxpLmxlbmd0aCYmKHU9ciksci5fbmFtZXM9aSxvPXIuaGFuZGxlcixvLl9z
dGFzaE5hbWVzKHIsdSkKLXQuX25hbWVzU3Rhc2hlZD0hMH19LGUuY2FsY3VsYXRlQ2FjaGVLZXk9
ZnVuY3Rpb24oZSl7dmFyIHQscixvLHMsdSxsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09
YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpbXSxjPWFyZ3VtZW50c1syXSxwPSIiCi1mb3IodD0w
O3Q8bC5sZW5ndGg7Kyt0KXI9bFt0XSxvPWkoZSxyKSxzPXZvaWQgMCxjJiYobyYmbyBpbiBjPyh1
PTA9PT1yLmluZGV4T2Yobyk/ci5zdWJzdHIoby5sZW5ndGgrMSk6cixzPSgwLG4uZ2V0KShjW29d
LHUpKTpzPSgwLG4uZ2V0KShjLHIpKSxwKz0iOjoiK3IrIjoiK3MKLXJldHVybiBlK3AucmVwbGFj
ZShhLCItIil9LGUubm9ybWFsaXplQ29udHJvbGxlclF1ZXJ5UGFyYW1zPWZ1bmN0aW9uKGUpe3Zh
ciB0LG49e30KLWZvcih0PTA7dDxlLmxlbmd0aDsrK3QpbyhlW3RdLG4pCi1yZXR1cm4gbn0sZS5w
cmVmaXhSb3V0ZU5hbWVBcmc9ZnVuY3Rpb24oZSxuKXt2YXIgaT1uWzBdLG89KDAsdC5nZXRPd25l
cikoZSksYT1vLm1vdW50UG9pbnQKLWlmKG8ucm91dGFibGUmJiJzdHJpbmciPT10eXBlb2YgaSl7
aWYocyhpKSl0aHJvdyBuZXcgci5FcnJvcigiUHJvZ3JhbW1hdGljIHRyYW5zaXRpb25zIGJ5IFVS
TCBjYW5ub3QgYmUgdXNlZCB3aXRoaW4gYW4gRW5naW5lLiBQbGVhc2UgdXNlIHRoZSByb3V0ZSBu
YW1lIGluc3RlYWQuIikKLWk9YSsiLiIraSxuWzBdPWl9cmV0dXJuIG59Ci12YXIgYT0vXC4vZ30p
LGUoImVtYmVyLXJ1bnRpbWUvY29tcGFyZSIsWyJleHBvcnRzIiwiZW1iZXItcnVudGltZS91dGls
cyIsImVtYmVyLXJ1bnRpbWUvbWl4aW5zL2NvbXBhcmFibGUiXSxmdW5jdGlvbihlLHQsbil7InVz
ZSBzdHJpY3QiCi1mdW5jdGlvbiByKGUsdCl7dmFyIG49ZS10Ci1yZXR1cm4obj4wKS0objwwKX1m
dW5jdGlvbiBpKGUscyl7aWYoZT09PXMpcmV0dXJuIDAKLXZhciBhLHUsbCxjLHAsZj0oMCx0LnR5
cGVPZikoZSksaD0oMCx0LnR5cGVPZikocykKLWlmKG4uZGVmYXVsdCl7aWYoImluc3RhbmNlIj09
PWYmJm4uZGVmYXVsdC5kZXRlY3QoZSkmJmUuY29uc3RydWN0b3IuY29tcGFyZSlyZXR1cm4gZS5j
b25zdHJ1Y3Rvci5jb21wYXJlKGUscykKLWlmKCJpbnN0YW5jZSI9PT1oJiZuLmRlZmF1bHQuZGV0
ZWN0KHMpJiZzLmNvbnN0cnVjdG9yLmNvbXBhcmUpcmV0dXJuLTEqcy5jb25zdHJ1Y3Rvci5jb21w
YXJlKHMsZSl9dmFyIGQ9cihvW2ZdLG9baF0pCi1pZigwIT09ZClyZXR1cm4gZAotc3dpdGNoKGYp
e2Nhc2UiYm9vbGVhbiI6Y2FzZSJudW1iZXIiOnJldHVybiByKGUscykKLWNhc2Uic3RyaW5nIjpy
ZXR1cm4gcihlLmxvY2FsZUNvbXBhcmUocyksMCkKLWNhc2UiYXJyYXkiOmZvcihhPWUubGVuZ3Ro
LHU9cy5sZW5ndGgsbD1NYXRoLm1pbihhLHUpLGM9MDtjPGw7YysrKWlmKDAhPT0ocD1pKGVbY10s
c1tjXSkpKXJldHVybiBwCi1yZXR1cm4gcihhLHUpCi1jYXNlImluc3RhbmNlIjpyZXR1cm4gbi5k
ZWZhdWx0JiZuLmRlZmF1bHQuZGV0ZWN0KGUpP2UuY29tcGFyZShlLHMpOjAKLWNhc2UiZGF0ZSI6
cmV0dXJuIHIoZS5nZXRUaW1lKCkscy5nZXRUaW1lKCkpCi1kZWZhdWx0OnJldHVybiAwfX1lLmRl
ZmF1bHQ9aQotdmFyIG89e3VuZGVmaW5lZDowLG51bGw6MSxib29sZWFuOjIsbnVtYmVyOjMsc3Ry
aW5nOjQsYXJyYXk6NSxvYmplY3Q6NixpbnN0YW5jZTo3LGZ1bmN0aW9uOjgsY2xhc3M6OSxkYXRl
OjEwfX0pLGUoImVtYmVyLXJ1bnRpbWUvY29tcHV0ZWQvY29tcHV0ZWRfbWFjcm9zIixbImV4cG9y
dHMiLCJlbWJlci1tZXRhbCIsImVtYmVyLWRlYnVnIl0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3Ry
aWN0IgotZnVuY3Rpb24gcihlLG4pe2Z1bmN0aW9uIHIoZSl7cy5wdXNoKGUpfXZhciBpLG8scz1b
XQotZm9yKGk9MDtpPG4ubGVuZ3RoO2krKylvPW5baV0sKDAsdC5leHBhbmRQcm9wZXJ0aWVzKShv
LHIpCi1yZXR1cm4gc31mdW5jdGlvbiBpKGUsbil7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKGk9YXJn
dW1lbnRzLmxlbmd0aCxvPUFycmF5KGkpLHM9MDtzPGk7cysrKW9bc109YXJndW1lbnRzW3NdCi12
YXIgaSxvLHMsYT1yKGUsbyksdT0oMCx0LmNvbXB1dGVkKShmdW5jdGlvbigpe3ZhciBlLHIsaT1h
Lmxlbmd0aC0xCi1mb3IoZT0wO2U8aTtlKyspaWYocj0oMCx0LmdldCkodGhpcyxhW2VdKSwhbihy
KSlyZXR1cm4gcgotcmV0dXJuKDAsdC5nZXQpKHRoaXMsYVtpXSl9KQotcmV0dXJuIHUucHJvcGVy
dHkuYXBwbHkodSxhKX19ZS5vcj1lLmFuZD12b2lkIDAsZS5lbXB0eT1mdW5jdGlvbihlKXtyZXR1
cm4oMCx0LmNvbXB1dGVkKShlKyIubGVuZ3RoIixmdW5jdGlvbigpe3JldHVybigwLHQuaXNFbXB0
eSkoKDAsdC5nZXQpKHRoaXMsZSkpfSl9LGUubm90RW1wdHk9ZnVuY3Rpb24oZSl7cmV0dXJuKDAs
dC5jb21wdXRlZCkoZSsiLmxlbmd0aCIsZnVuY3Rpb24oKXtyZXR1cm4hKDAsdC5pc0VtcHR5KSgo
MCx0LmdldCkodGhpcyxlKSl9KX0sZS5ub25lPWZ1bmN0aW9uKGUpe3JldHVybigwLHQuY29tcHV0
ZWQpKGUsZnVuY3Rpb24oKXtyZXR1cm4oMCx0LmlzTm9uZSkoKDAsdC5nZXQpKHRoaXMsZSkpfSl9
LGUubm90PWZ1bmN0aW9uKGUpe3JldHVybigwLHQuY29tcHV0ZWQpKGUsZnVuY3Rpb24oKXtyZXR1
cm4hKDAsdC5nZXQpKHRoaXMsZSl9KX0sZS5ib29sPWZ1bmN0aW9uKGUpe3JldHVybigwLHQuY29t
cHV0ZWQpKGUsZnVuY3Rpb24oKXtyZXR1cm4hISgwLHQuZ2V0KSh0aGlzLGUpfSl9LGUubWF0Y2g9
ZnVuY3Rpb24oZSxuKXtyZXR1cm4oMCx0LmNvbXB1dGVkKShlLGZ1bmN0aW9uKCl7dmFyIHI9KDAs
dC5nZXQpKHRoaXMsZSkKLXJldHVybiJzdHJpbmciPT10eXBlb2YgciYmbi50ZXN0KHIpfSl9LGUu
ZXF1YWw9ZnVuY3Rpb24oZSxuKXtyZXR1cm4oMCx0LmNvbXB1dGVkKShlLGZ1bmN0aW9uKCl7cmV0
dXJuKDAsdC5nZXQpKHRoaXMsZSk9PT1ufSl9LGUuZ3Q9ZnVuY3Rpb24oZSxuKXtyZXR1cm4oMCx0
LmNvbXB1dGVkKShlLGZ1bmN0aW9uKCl7cmV0dXJuKDAsdC5nZXQpKHRoaXMsZSk+bn0pfSxlLmd0
ZT1mdW5jdGlvbihlLG4pe3JldHVybigwLHQuY29tcHV0ZWQpKGUsZnVuY3Rpb24oKXtyZXR1cm4o
MCx0LmdldCkodGhpcyxlKT49bn0pfSxlLmx0PWZ1bmN0aW9uKGUsbil7cmV0dXJuKDAsdC5jb21w
dXRlZCkoZSxmdW5jdGlvbigpe3JldHVybigwLHQuZ2V0KSh0aGlzLGUpPG59KX0sZS5sdGU9ZnVu
Y3Rpb24oZSxuKXtyZXR1cm4oMCx0LmNvbXB1dGVkKShlLGZ1bmN0aW9uKCl7cmV0dXJuKDAsdC5n
ZXQpKHRoaXMsZSk8PW59KX0sZS5vbmVXYXk9ZnVuY3Rpb24oZSl7cmV0dXJuKDAsdC5hbGlhcyko
ZSkub25lV2F5KCl9LGUucmVhZE9ubHk9ZnVuY3Rpb24oZSl7cmV0dXJuKDAsdC5hbGlhcykoZSku
cmVhZE9ubHkoKX0sZS5kZXByZWNhdGluZ0FsaWFzPWZ1bmN0aW9uKGUsbil7cmV0dXJuKDAsdC5j
b21wdXRlZCkoZSx7Z2V0OmZ1bmN0aW9uKG4pe3JldHVybigwLHQuZ2V0KSh0aGlzLGUpfSxzZXQ6
ZnVuY3Rpb24obixyKXtyZXR1cm4oMCx0LnNldCkodGhpcyxlLHIpLHJ9fSl9LGUuYW5kPWkoImFu
ZCIsZnVuY3Rpb24oZSl7cmV0dXJuIGV9KSxlLm9yPWkoIm9yIixmdW5jdGlvbihlKXtyZXR1cm4h
ZX0pfSksZSgiZW1iZXItcnVudGltZS9jb21wdXRlZC9yZWR1Y2VfY29tcHV0ZWRfbWFjcm9zIixb
ImV4cG9ydHMiLCJlbWJlci11dGlscyIsImVtYmVyLWRlYnVnIiwiZW1iZXItbWV0YWwiLCJlbWJl
ci1ydW50aW1lL2NvbXBhcmUiLCJlbWJlci1ydW50aW1lL3V0aWxzIiwiZW1iZXItcnVudGltZS9z
eXN0ZW0vbmF0aXZlX2FycmF5Il0sZnVuY3Rpb24oZSx0LG4scixpLG8scyl7InVzZSBzdHJpY3Qi
Ci1mdW5jdGlvbiBhKGUsdCxuKXtyZXR1cm4oMCxyLmNvbXB1dGVkKShlKyIuW10iLGZ1bmN0aW9u
KCl7dmFyIGk9dGhpcyxvPSgwLHIuZ2V0KSh0aGlzLGUpCi1yZXR1cm4gbnVsbD09PW98fCJvYmpl
Y3QiIT10eXBlb2Ygbz9uOm8ucmVkdWNlKGZ1bmN0aW9uKGUsbixyLG8pe3JldHVybiB0LmNhbGwo
aSxlLG4scixvKX0sbil9KS5yZWFkT25seSgpfWZ1bmN0aW9uIHUoZSx0KXt2YXIgbj12b2lkIDAK
LXJldHVybi9AZWFjaC8udGVzdChlKT9uPWUucmVwbGFjZSgvXC5AZWFjaC4qJC8sIiIpOihuPWUs
ZSs9Ii5bXSIpLCgwLHIuY29tcHV0ZWQpKGUsZnVuY3Rpb24oKXt2YXIgZT0oMCxyLmdldCkodGhp
cyxuKQotcmV0dXJuKDAsby5pc0FycmF5KShlKT8oMCxzLkEpKHQuY2FsbCh0aGlzLGUpKTooMCxz
LkEpKCl9KS5yZWFkT25seSgpfWZ1bmN0aW9uIGwoZSx0KXt2YXIgbj1lLm1hcChmdW5jdGlvbihl
KXtyZXR1cm4gZSsiLltdIn0pCi1yZXR1cm4gbi5wdXNoKGZ1bmN0aW9uKCl7cmV0dXJuKDAscy5B
KSh0LmNhbGwodGhpcyxlKSl9KSxyLmNvbXB1dGVkLmFwcGx5KHRoaXMsbikucmVhZE9ubHkoKX1m
dW5jdGlvbiBjKGUsdCl7cmV0dXJuIHUoZSxmdW5jdGlvbihlKXtyZXR1cm4gZS5tYXAodCx0aGlz
KX0pfWZ1bmN0aW9uIHAoZSx0KXtyZXR1cm4gdShlLGZ1bmN0aW9uKGUpe3JldHVybiBlLmZpbHRl
cih0LHRoaXMpfSl9ZnVuY3Rpb24gZigpe3ZhciBlLHQsbgotZm9yKGU9YXJndW1lbnRzLmxlbmd0
aCx0PUFycmF5KGUpLG49MDtuPGU7bisrKXRbbl09YXJndW1lbnRzW25dCi1yZXR1cm4gbCh0LGZ1
bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj0oMCxzLkEpKCkKLXJldHVybiBlLmZvckVhY2goZnVuY3Rp
b24oZSl7dmFyIGk9KDAsci5nZXQpKHQsZSk7KDAsby5pc0FycmF5KShpKSYmaS5mb3JFYWNoKGZ1
bmN0aW9uKGUpey0xPT09bi5pbmRleE9mKGUpJiZuLnB1c2goZSl9KX0pLG59KX1mdW5jdGlvbiBo
KGUsdCl7cmV0dXJuIHUoZSxmdW5jdGlvbihlKXt2YXIgbj10aGlzCi1yZXR1cm4gZS5zbGljZSgp
LnNvcnQoZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5jYWxsKG4sZSxyKX0pfSl9ZnVuY3Rpb24gZChl
LHQpe3ZhciBuPW5ldyByLkNvbXB1dGVkUHJvcGVydHkoZnVuY3Rpb24oaSl7ZnVuY3Rpb24gYSgp
e3RoaXMubm90aWZ5UHJvcGVydHlDaGFuZ2UoaSl9dmFyIHU9dGhpcyxsPSJAdGhpcyI9PT1lLGM9
KDAsci5nZXQpKHRoaXMsdCkscD1tKGMpLGY9bi5fYWN0aXZlT2JzZXJ2ZXJNYXB8fChuLl9hY3Rp
dmVPYnNlcnZlck1hcD1uZXcgci5XZWFrTWFwKSxoPWYuZ2V0KHRoaXMpCi1oJiZoLmZvckVhY2go
ZnVuY3Rpb24oZSl7cmV0dXJuIHIucmVtb3ZlT2JzZXJ2ZXIuYXBwbHkodm9pZCAwLGUpfSksaD1w
Lm1hcChmdW5jdGlvbih0KXt2YXIgbj10WzBdLGk9bD8iQGVhY2guIituOmUrIi5AZWFjaC4iK24s
bz1bdSxpLGFdCi1yZXR1cm4gci5hZGRPYnNlcnZlci5hcHBseSh2b2lkIDAsbyksb30pLGYuc2V0
KHRoaXMsaCkKLXZhciBkPWw/dGhpczooMCxyLmdldCkodGhpcyxlKQotcmV0dXJuKDAsby5pc0Fy
cmF5KShkKT9nKGQscCk6KDAscy5BKSgpfSkKLXJldHVybiBuLl9hY3RpdmVPYnNlcnZlck1hcD12
b2lkIDAsbi5wcm9wZXJ0eSh0KyIuW10iKS5yZWFkT25seSgpfWZ1bmN0aW9uIG0oZSl7cmV0dXJu
IGUubWFwKGZ1bmN0aW9uKGUpe3ZhciB0PWUuc3BsaXQoIjoiKSxuPXRbMF0scj10WzFdCi1yZXR1
cm4gcj1yfHwiYXNjIixbbixyXX0pfWZ1bmN0aW9uIGcoZSx0KXtyZXR1cm4oMCxzLkEpKGUuc2xp
Y2UoKS5zb3J0KGZ1bmN0aW9uKGUsbil7dmFyIG8scyxhLHUsbAotZm9yKG89MDtvPHQubGVuZ3Ro
O28rKylpZihzPXRbb10sYT1zWzBdLHU9c1sxXSwwIT09KGw9KDAsaS5kZWZhdWx0KSgoMCxyLmdl
dCkoZSxhKSwoMCxyLmdldCkobixhKSkpKXJldHVybiJkZXNjIj09PXU/LTEqbDpsCi1yZXR1cm4g
MH0pKX1lLnVuaW9uPXZvaWQgMCxlLnN1bT1mdW5jdGlvbihlKXtyZXR1cm4gYShlLGZ1bmN0aW9u
KGUsdCl7cmV0dXJuIGUrdH0sMCl9LGUubWF4PWZ1bmN0aW9uKGUpe3JldHVybiBhKGUsZnVuY3Rp
b24oZSx0KXtyZXR1cm4gTWF0aC5tYXgoZSx0KX0sLTEvMCl9LGUubWluPWZ1bmN0aW9uKGUpe3Jl
dHVybiBhKGUsZnVuY3Rpb24oZSx0KXtyZXR1cm4gTWF0aC5taW4oZSx0KX0sMS8wKX0sZS5tYXA9
YyxlLm1hcEJ5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGMoZSsiLkBlYWNoLiIrdCxmdW5jdGlvbihl
KXtyZXR1cm4oMCxyLmdldCkoZSx0KX0pfSxlLmZpbHRlcj1wLGUuZmlsdGVyQnk9ZnVuY3Rpb24o
ZSx0LG4pe3ZhciBpPXZvaWQgMAotcmV0dXJuIGk9Mj09PWFyZ3VtZW50cy5sZW5ndGg/ZnVuY3Rp
b24oZSl7cmV0dXJuKDAsci5nZXQpKGUsdCl9OmZ1bmN0aW9uKGUpe3JldHVybigwLHIuZ2V0KShl
LHQpPT09bn0scChlKyIuQGVhY2guIit0LGkpfSxlLnVuaXE9ZixlLnVuaXFCeT1mdW5jdGlvbihl
LG4pe3JldHVybigwLHIuY29tcHV0ZWQpKGUrIi5bXSIsZnVuY3Rpb24oKXt2YXIgaT0oMCxzLkEp
KCksYT1PYmplY3QuY3JlYXRlKG51bGwpLHU9KDAsci5nZXQpKHRoaXMsZSkKLXJldHVybigwLG8u
aXNBcnJheSkodSkmJnUuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgbz0oMCx0Lmd1aWRGb3IpKCgw
LHIuZ2V0KShlLG4pKQotbyBpbiBhfHwoYVtvXT0hMCxpLnB1c2goZSkpfSksaX0pLnJlYWRPbmx5
KCl9LGUuaW50ZXJzZWN0PWZ1bmN0aW9uKCl7dmFyIGUsdCxuCi1mb3IoZT1hcmd1bWVudHMubGVu
Z3RoLHQ9QXJyYXkoZSksbj0wO248ZTtuKyspdFtuXT1hcmd1bWVudHNbbl0KLXJldHVybiBsKHQs
ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPWUubWFwKGZ1bmN0aW9uKGUpe3ZhciBuPSgwLHIuZ2V0
KSh0LGUpCi1yZXR1cm4oMCxvLmlzQXJyYXkpKG4pP246W119KSxpPW4ucG9wKCkuZmlsdGVyKGZ1
bmN0aW9uKGUpe3ZhciB0LHIsaSxvCi1mb3IodD0wO3Q8bi5sZW5ndGg7dCsrKXtmb3Iocj0hMSxp
PW5bdF0sbz0wO288aS5sZW5ndGg7bysrKWlmKGlbb109PT1lKXtyPSEwCi1icmVha31pZighMT09
PXIpcmV0dXJuITF9cmV0dXJuITB9KQotcmV0dXJuKDAscy5BKShpKX0pfSxlLnNldERpZmY9ZnVu
Y3Rpb24oZSx0KXtpZigyIT09YXJndW1lbnRzLmxlbmd0aCl0aHJvdyBuZXcgbi5FcnJvcigic2V0
RGlmZiByZXF1aXJlcyBleGFjdGx5IHR3byBkZXBlbmRlbnQgYXJyYXlzLiIpCi1yZXR1cm4oMCxy
LmNvbXB1dGVkKShlKyIuW10iLHQrIi5bXSIsZnVuY3Rpb24oKXt2YXIgbj10aGlzLmdldChlKSxy
PXRoaXMuZ2V0KHQpCi1yZXR1cm4oMCxvLmlzQXJyYXkpKG4pPygwLG8uaXNBcnJheSkocik/bi5m
aWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuLTE9PT1yLmluZGV4T2YoZSl9KTooMCxzLkEpKG4pOigw
LHMuQSkoKX0pLnJlYWRPbmx5KCl9LGUuY29sbGVjdD1mdW5jdGlvbigpe3ZhciBlLHQsbgotZm9y
KGU9YXJndW1lbnRzLmxlbmd0aCx0PUFycmF5KGUpLG49MDtuPGU7bisrKXRbbl09YXJndW1lbnRz
W25dCi1yZXR1cm4gbCh0LGZ1bmN0aW9uKCl7dmFyIGU9KDAsci5nZXRQcm9wZXJ0aWVzKSh0aGlz
LHQpLG49KDAscy5BKSgpCi1mb3IodmFyIGkgaW4gZSllLmhhc093blByb3BlcnR5KGkpJiYoKDAs
ci5pc05vbmUpKGVbaV0pP24ucHVzaChudWxsKTpuLnB1c2goZVtpXSkpCi1yZXR1cm4gbn0pfSxl
LnNvcnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD9oKGUsdCk6ZChl
LHQpfSxlLnVuaW9uPWZ9KSxlKCJlbWJlci1ydW50aW1lL2NvbnRyb2xsZXJzL2NvbnRyb2xsZXIi
LFsiZXhwb3J0cyIsImVtYmVyLWRlYnVnIiwiZW1iZXItcnVudGltZS9zeXN0ZW0vb2JqZWN0Iiwi
ZW1iZXItcnVudGltZS9taXhpbnMvY29udHJvbGxlciIsImVtYmVyLXJ1bnRpbWUvaW5qZWN0Iiwi
ZW1iZXItcnVudGltZS9taXhpbnMvYWN0aW9uX2hhbmRsZXIiXSxmdW5jdGlvbihlLHQsbixyLGks
byl7InVzZSBzdHJpY3QiCi12YXIgcz1uLmRlZmF1bHQuZXh0ZW5kKHIuZGVmYXVsdCk7KDAsby5k
ZXByZWNhdGVVbmRlcnNjb3JlQWN0aW9ucykocyksKDAsaS5jcmVhdGVJbmplY3Rpb25IZWxwZXIp
KCJjb250cm9sbGVyIixmdW5jdGlvbihlKXt9KSxlLmRlZmF1bHQ9c30pLGUoImVtYmVyLXJ1bnRp
bWUvY29weSIsWyJleHBvcnRzIiwiZW1iZXItZGVidWciLCJlbWJlci1ydW50aW1lL3N5c3RlbS9v
YmplY3QiLCJlbWJlci1ydW50aW1lL21peGlucy9jb3B5YWJsZSJdLGZ1bmN0aW9uKGUsdCxuLHIp
eyJ1c2Ugc3RyaWN0IgotZnVuY3Rpb24gaShlLHQsbixvKXt2YXIgcz12b2lkIDAsYT12b2lkIDAs
dT12b2lkIDAKLWlmKCJvYmplY3QiIT10eXBlb2YgZXx8bnVsbD09PWUpcmV0dXJuIGUKLWlmKHQm
JihhPW4uaW5kZXhPZihlKSk+PTApcmV0dXJuIG9bYV0KLWlmKEFycmF5LmlzQXJyYXkoZSkpe2lm
KHM9ZS5zbGljZSgpLHQpZm9yKGE9cy5sZW5ndGg7LS1hPj0wOylzW2FdPWkoc1thXSx0LG4sbyl9
ZWxzZSBpZihyLmRlZmF1bHQmJnIuZGVmYXVsdC5kZXRlY3QoZSkpcz1lLmNvcHkodCxuLG8pCi1l
bHNlIGlmKGUgaW5zdGFuY2VvZiBEYXRlKXM9bmV3IERhdGUoZS5nZXRUaW1lKCkpCi1lbHNle3M9
e30KLWZvcih1IGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdSkm
JiJfXyIhPT11LnN1YnN0cmluZygwLDIpJiYoc1t1XT10P2koZVt1XSx0LG4sbyk6ZVt1XSl9cmV0
dXJuIHQmJihuLnB1c2goZSksby5wdXNoKHMpKSxzfWUuZGVmYXVsdD1mdW5jdGlvbihlLHQpe3Jl
dHVybiJvYmplY3QiIT10eXBlb2YgZXx8bnVsbD09PWU/ZTpyLmRlZmF1bHQmJnIuZGVmYXVsdC5k
ZXRlY3QoZSk/ZS5jb3B5KHQpOmkoZSx0LHQ/W106bnVsbCx0P1tdOm51bGwpfX0pLGUoImVtYmVy
LXJ1bnRpbWUvZXh0L2Z1bmN0aW9uIixbImVtYmVyLWVudmlyb25tZW50IiwiZW1iZXItbWV0YWwi
LCJlbWJlci1kZWJ1ZyJdLGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCIKLXZhciByPUFycmF5
LnByb3RvdHlwZS5zbGljZSxpPUZ1bmN0aW9uLnByb3RvdHlwZQotZS5FTlYuRVhURU5EX1BST1RP
VFlQRVMuRnVuY3Rpb24mJihpLnByb3BlcnR5PWZ1bmN0aW9uKCl7dmFyIGU9KDAsdC5jb21wdXRl
ZCkodGhpcykKLXJldHVybiBlLnByb3BlcnR5LmFwcGx5KGUsYXJndW1lbnRzKX0saS5vYnNlcnZl
cz1mdW5jdGlvbigpe3ZhciBlLG4scgotZm9yKGU9YXJndW1lbnRzLmxlbmd0aCxuPUFycmF5KGUp
LHI9MDtyPGU7cisrKW5bcl09YXJndW1lbnRzW3JdCi1yZXR1cm4gbi5wdXNoKHRoaXMpLHQub2Jz
ZXJ2ZXIuYXBwbHkodGhpcyxuKX0saS5fb2JzZXJ2ZXNJbW1lZGlhdGVseT1mdW5jdGlvbigpe3Jl
dHVybiB0aGlzLm9ic2VydmVzLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0saS5vYnNlcnZlc0ltbWVk
aWF0ZWx5PSgwLG4uZGVwcmVjYXRlRnVuYykoIkZ1bmN0aW9uI29ic2VydmVzSW1tZWRpYXRlbHkg
aXMgZGVwcmVjYXRlZC4gVXNlIEZ1bmN0aW9uI29ic2VydmVzIGluc3RlYWQiLHtpZDoiZW1iZXIt
cnVudGltZS5leHQtZnVuY3Rpb24iLHVudGlsOiIzLjAuMCJ9LGkuX29ic2VydmVzSW1tZWRpYXRl
bHkpLGkub249ZnVuY3Rpb24oKXt2YXIgZT1yLmNhbGwoYXJndW1lbnRzKQotcmV0dXJuIHRoaXMu
X19lbWJlcl9saXN0ZW5zX189ZSx0aGlzfSl9KSxlKCJlbWJlci1ydW50aW1lL2V4dC9yc3ZwIixb
ImV4cG9ydHMiLCJyc3ZwIiwiZW1iZXItbWV0YWwiLCJlbWJlci1kZWJ1ZyJdLGZ1bmN0aW9uKGUs
dCxuLHIpeyJ1c2Ugc3RyaWN0IgotZnVuY3Rpb24gaShlKXt2YXIgdD1vKGUpCi10JiYoMCxuLmRp
c3BhdGNoRXJyb3IpKHQpfWZ1bmN0aW9uIG8oZSl7aWYoZSl7aWYoZS5lcnJvclRocm93bilyZXR1
cm4gcyhlKQotaWYoIlVucmVjb2duaXplZFVSTEVycm9yIiE9PWUubmFtZSYmIlRyYW5zaXRpb25B
Ym9ydGVkIiE9PWUubmFtZSlyZXR1cm4gZX19ZnVuY3Rpb24gcyhlKXt2YXIgdD1lLmVycm9yVGhy
b3duCi1yZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQmJih0PW5ldyBFcnJvcih0KSksT2JqZWN0LmRl
ZmluZVByb3BlcnR5KHQsIl9fcmVhc29uX3dpdGhfZXJyb3JfdGhyb3duX18iLHt2YWx1ZTplLGVu
dW1lcmFibGU6ITF9KSx0fWUub25lcnJvckRlZmF1bHQ9aQotdmFyIGE9bi5ydW4uYmFja2J1cm5l
cgotbi5ydW4uX2FkZFF1ZXVlKCJyc3ZwQWZ0ZXIiLCJkZXN0cm95IiksdC5jb25maWd1cmUoImFz
eW5jIixmdW5jdGlvbihlLHQpe2Euc2NoZWR1bGUoImFjdGlvbnMiLG51bGwsZSx0KX0pLHQuY29u
ZmlndXJlKCJhZnRlciIsZnVuY3Rpb24oZSl7YS5zY2hlZHVsZSgicnN2cEFmdGVyIixudWxsLGUp
fSksdC5vbigiZXJyb3IiLGkpLGUuZGVmYXVsdD10fSksZSgiZW1iZXItcnVudGltZS9leHQvc3Ry
aW5nIixbImVtYmVyLWVudmlyb25tZW50IiwiZW1iZXItcnVudGltZS9zeXN0ZW0vc3RyaW5nIl0s
ZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCIKLXZhciBuPVN0cmluZy5wcm90b3R5cGUKLWUuRU5W
LkVYVEVORF9QUk9UT1RZUEVTLlN0cmluZyYmKG4uZm10PWZ1bmN0aW9uKCl7dmFyIGUsbixyCi1m
b3IoZT1hcmd1bWVudHMubGVuZ3RoLG49QXJyYXkoZSkscj0wO3I8ZTtyKyspbltyXT1hcmd1bWVu
dHNbcl0KLXJldHVybigwLHQuZm10KSh0aGlzLG4pfSxuLnc9ZnVuY3Rpb24oKXtyZXR1cm4oMCx0
LncpKHRoaXMpfSxuLmxvYz1mdW5jdGlvbigpe3ZhciBlLG4scgotZm9yKGU9YXJndW1lbnRzLmxl
bmd0aCxuPUFycmF5KGUpLHI9MDtyPGU7cisrKW5bcl09YXJndW1lbnRzW3JdCi1yZXR1cm4oMCx0
LmxvYykodGhpcyxuKX0sbi5jYW1lbGl6ZT1mdW5jdGlvbigpe3JldHVybigwLHQuY2FtZWxpemUp
KHRoaXMpfSxuLmRlY2FtZWxpemU9ZnVuY3Rpb24oKXtyZXR1cm4oMCx0LmRlY2FtZWxpemUpKHRo
aXMpfSxuLmRhc2hlcml6ZT1mdW5jdGlvbigpe3JldHVybigwLHQuZGFzaGVyaXplKSh0aGlzKX0s
bi51bmRlcnNjb3JlPWZ1bmN0aW9uKCl7cmV0dXJuKDAsdC51bmRlcnNjb3JlKSh0aGlzKX0sbi5j
bGFzc2lmeT1mdW5jdGlvbigpe3JldHVybigwLHQuY2xhc3NpZnkpKHRoaXMpfSxuLmNhcGl0YWxp
emU9ZnVuY3Rpb24oKXtyZXR1cm4oMCx0LmNhcGl0YWxpemUpKHRoaXMpfSl9KSxlKCJlbWJlci1y
dW50aW1lL2luZGV4IixbImV4cG9ydHMiLCJlbWJlci1ydW50aW1lL3N5c3RlbS9vYmplY3QiLCJl
bWJlci1ydW50aW1lL3N5c3RlbS9zdHJpbmciLCJlbWJlci1ydW50aW1lL21peGlucy9yZWdpc3Ry
eV9wcm94eSIsImVtYmVyLXJ1bnRpbWUvbWl4aW5zL2NvbnRhaW5lcl9wcm94eSIsImVtYmVyLXJ1
bnRpbWUvY29weSIsImVtYmVyLXJ1bnRpbWUvaW5qZWN0IiwiZW1iZXItcnVudGltZS9jb21wYXJl
IiwiZW1iZXItcnVudGltZS9pcy1lcXVhbCIsImVtYmVyLXJ1bnRpbWUvbWl4aW5zL2FycmF5Iiwi
ZW1iZXItcnVudGltZS9taXhpbnMvY29tcGFyYWJsZSIsImVtYmVyLXJ1bnRpbWUvc3lzdGVtL25h
bWVzcGFjZSIsImVtYmVyLXJ1bnRpbWUvc3lzdGVtL2FycmF5X3Byb3h5IiwiZW1iZXItcnVudGlt
ZS9zeXN0ZW0vb2JqZWN0X3Byb3h5IiwiZW1iZXItcnVudGltZS9zeXN0ZW0vY29yZV9vYmplY3Qi
LCJlbWJlci1ydW50aW1lL3N5c3RlbS9uYXRpdmVfYXJyYXkiLCJlbWJlci1ydW50aW1lL21peGlu
cy9hY3Rpb25faGFuZGxlciIsImVtYmVyLXJ1bnRpbWUvbWl4aW5zL2NvcHlhYmxlIiwiZW1iZXIt
cnVudGltZS9taXhpbnMvZW51bWVyYWJsZSIsImVtYmVyLXJ1bnRpbWUvbWl4aW5zL2ZyZWV6YWJs
ZSIsImVtYmVyLXJ1bnRpbWUvbWl4aW5zLy1wcm94eSIsImVtYmVyLXJ1bnRpbWUvc3lzdGVtL2xh
enlfbG9hZCIsImVtYmVyLXJ1bnRpbWUvbWl4aW5zL29ic2VydmFibGUiLCJlbWJlci1ydW50aW1l
L21peGlucy9tdXRhYmxlX2VudW1lcmFibGUiLCJlbWJlci1ydW50aW1lL21peGlucy9tdXRhYmxl
X2FycmF5IiwiZW1iZXItcnVudGltZS9taXhpbnMvdGFyZ2V0X2FjdGlvbl9zdXBwb3J0IiwiZW1i
ZXItcnVudGltZS9taXhpbnMvZXZlbnRlZCIsImVtYmVyLXJ1bnRpbWUvbWl4aW5zL3Byb21pc2Vf
cHJveHkiLCJlbWJlci1ydW50aW1lL2NvbXB1dGVkL2NvbXB1dGVkX21hY3JvcyIsImVtYmVyLXJ1
bnRpbWUvY29tcHV0ZWQvcmVkdWNlX2NvbXB1dGVkX21hY3JvcyIsImVtYmVyLXJ1bnRpbWUvY29u
dHJvbGxlcnMvY29udHJvbGxlciIsImVtYmVyLXJ1bnRpbWUvbWl4aW5zL2NvbnRyb2xsZXIiLCJl
bWJlci1ydW50aW1lL3N5c3RlbS9zZXJ2aWNlIiwiZW1iZXItcnVudGltZS9leHQvcnN2cCIsImVt
YmVyLXJ1bnRpbWUvdXRpbHMiLCJlbWJlci1ydW50aW1lL3N0cmluZ19yZWdpc3RyeSIsImVtYmVy
LXJ1bnRpbWUvZXh0L3N0cmluZyIsImVtYmVyLXJ1bnRpbWUvZXh0L2Z1bmN0aW9uIl0sZnVuY3Rp
b24oZSx0LG4scixpLG8scyxhLHUsbCxjLHAsZixoLGQsbSxnLHksdixiLF8sdyxFLHgsQyxPLEEs
VCxTLFIsayxOLFAsaixELEwpeyJ1c2Ugc3RyaWN0IgotZS5zZXRTdHJpbmdzPWUuZ2V0U3RyaW5n
cz1lLnR5cGVPZj1lLmlzQXJyYXk9ZS5vbmVycm9yRGVmYXVsdD1lLlJTVlA9ZS5TZXJ2aWNlPWUu
Q29udHJvbGxlck1peGluPWUuQ29udHJvbGxlcj1lLmNvbGxlY3Q9ZS5pbnRlcnNlY3Q9ZS51bmlv
bj1lLnVuaXFCeT1lLnVuaXE9ZS5maWx0ZXJCeT1lLmZpbHRlcj1lLm1hcEJ5PWUuc2V0RGlmZj1l
LnNvcnQ9ZS5tYXA9ZS5tYXg9ZS5taW49ZS5zdW09ZS5vcj1lLmFuZD1lLmRlcHJlY2F0aW5nQWxp
YXM9ZS5yZWFkT25seT1lLm9uZVdheT1lLmx0ZT1lLmx0PWUuZ3RlPWUuZ3Q9ZS5lcXVhbD1lLm1h
dGNoPWUuYm9vbD1lLm5vdD1lLm5vbmU9ZS5ub3RFbXB0eT1lLmVtcHR5PWUuUHJvbWlzZVByb3h5
TWl4aW49ZS5FdmVudGVkPWUuVGFyZ2V0QWN0aW9uU3VwcG9ydD1lLnJlbW92ZUF0PWUuTXV0YWJs
ZUFycmF5PWUuTXV0YWJsZUVudW1lcmFibGU9ZS5PYnNlcnZhYmxlPWUuX2xvYWRlZD1lLnJ1bkxv
YWRIb29rcz1lLm9uTG9hZD1lLl9Qcm94eU1peGluPWUuRlJPWkVOX0VSUk9SPWUuRnJlZXphYmxl
PWUuRW51bWVyYWJsZT1lLkNvcHlhYmxlPWUuZGVwcmVjYXRlVW5kZXJzY29yZUFjdGlvbnM9ZS5B
Y3Rpb25IYW5kbGVyPWUuQT1lLk5hdGl2ZUFycmF5PWUuQ29yZU9iamVjdD1lLk9iamVjdFByb3h5
PWUuQXJyYXlQcm94eT1lLnNldE5hbWVzcGFjZVNlYXJjaERpc2FibGVkPWUuaXNOYW1lc3BhY2VT
ZWFyY2hEaXNhYmxlZD1lLk5hbWVzcGFjZT1lLkNvbXBhcmFibGU9ZS5yZW1vdmVBcnJheU9ic2Vy
dmVyPWUuYWRkQXJyYXlPYnNlcnZlcj1lLmlzRW1iZXJBcnJheT1lLm9iamVjdEF0PWUuQXJyYXk9
ZS5pc0VxdWFsPWUuY29tcGFyZT1lLmluamVjdD1lLmNvcHk9ZS5Db250YWluZXJQcm94eU1peGlu
PWUuYnVpbGRGYWtlUmVnaXN0cnlXaXRoRGVwcmVjYXRpb25zPWUuUmVnaXN0cnlQcm94eU1peGlu
PWUuU3RyaW5nPWUuRnJhbWV3b3JrT2JqZWN0PWUuT2JqZWN0PXZvaWQgMCxPYmplY3QuZGVmaW5l
UHJvcGVydHkoZSwiT2JqZWN0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4g
dC5kZWZhdWx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJGcmFtZXdvcmtPYmplY3QiLHtl
bnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0LkZyYW1ld29ya09iamVjdH19KSxP
YmplY3QuZGVmaW5lUHJvcGVydHkoZSwiU3RyaW5nIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rp
b24oKXtyZXR1cm4gbi5kZWZhdWx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJSZWdpc3Ry
eVByb3h5TWl4aW4iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLmRlZmF1
bHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImJ1aWxkRmFrZVJlZ2lzdHJ5V2l0aERlcHJl
Y2F0aW9ucyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHIuYnVpbGRGYWtl
UmVnaXN0cnlXaXRoRGVwcmVjYXRpb25zfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJDb250
YWluZXJQcm94eU1peGluIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5k
ZWZhdWx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJjb3B5Iix7ZW51bWVyYWJsZTohMCxn
ZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5kZWZhdWx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShl
LCJpbmplY3QiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLmRlZmF1bHR9
fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImNvbXBhcmUiLHtlbnVtZXJhYmxlOiEwLGdldDpm
dW5jdGlvbigpe3JldHVybiBhLmRlZmF1bHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImlz
RXF1YWwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB1LmRlZmF1bHR9fSks
T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIkFycmF5Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rp
b24oKXtyZXR1cm4gbC5kZWZhdWx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJvYmplY3RB
dCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGwub2JqZWN0QXR9fSksT2Jq
ZWN0LmRlZmluZVByb3BlcnR5KGUsImlzRW1iZXJBcnJheSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1
bmN0aW9uKCl7cmV0dXJuIGwuaXNFbWJlckFycmF5fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShl
LCJhZGRBcnJheU9ic2VydmVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4g
bC5hZGRBcnJheU9ic2VydmVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJyZW1vdmVBcnJh
eU9ic2VydmVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbC5yZW1vdmVB
cnJheU9ic2VydmVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJDb21wYXJhYmxlIix7ZW51
bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYy5kZWZhdWx0fX0pLE9iamVjdC5kZWZp
bmVQcm9wZXJ0eShlLCJOYW1lc3BhY2UiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3Jl
dHVybiBwLmRlZmF1bHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImlzTmFtZXNwYWNlU2Vh
cmNoRGlzYWJsZWQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBwLmlzU2Vh
cmNoRGlzYWJsZWR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInNldE5hbWVzcGFjZVNlYXJj
aERpc2FibGVkIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcC5zZXRTZWFy
Y2hEaXNhYmxlZH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiQXJyYXlQcm94eSIse2VudW1l
cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGYuZGVmYXVsdH19KSxPYmplY3QuZGVmaW5l
UHJvcGVydHkoZSwiT2JqZWN0UHJveHkiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3Jl
dHVybiBoLmRlZmF1bHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIkNvcmVPYmplY3QiLHtl
bnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBkLmRlZmF1bHR9fSksT2JqZWN0LmRl
ZmluZVByb3BlcnR5KGUsIk5hdGl2ZUFycmF5Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24o
KXtyZXR1cm4gbS5kZWZhdWx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJBIix7ZW51bWVy
YWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbS5BfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0
eShlLCJBY3Rpb25IYW5kbGVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4g
Zy5kZWZhdWx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJkZXByZWNhdGVVbmRlcnNjb3Jl
QWN0aW9ucyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcuZGVwcmVjYXRl
VW5kZXJzY29yZUFjdGlvbnN9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIkNvcHlhYmxlIix7
ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4geS5kZWZhdWx0fX0pLE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eShlLCJFbnVtZXJhYmxlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24o
KXtyZXR1cm4gdi5kZWZhdWx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJGcmVlemFibGUi
LHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBiLkZyZWV6YWJsZX19KQotT2Jq
ZWN0LmRlZmluZVByb3BlcnR5KGUsIkZST1pFTl9FUlJPUiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1
bmN0aW9uKCl7cmV0dXJuIGIuRlJPWkVOX0VSUk9SfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShl
LCJfUHJveHlNaXhpbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIF8uZGVm
YXVsdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwib25Mb2FkIix7ZW51bWVyYWJsZTohMCxn
ZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdy5vbkxvYWR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUs
InJ1bkxvYWRIb29rcyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHcucnVu
TG9hZEhvb2tzfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfbG9hZGVkIix7ZW51bWVyYWJs
ZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdy5fbG9hZGVkfX0pLE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShlLCJPYnNlcnZhYmxlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4g
RS5kZWZhdWx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJNdXRhYmxlRW51bWVyYWJsZSIs
e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHguZGVmYXVsdH19KSxPYmplY3Qu
ZGVmaW5lUHJvcGVydHkoZSwiTXV0YWJsZUFycmF5Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rp
b24oKXtyZXR1cm4gQy5kZWZhdWx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJyZW1vdmVB
dCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEMucmVtb3ZlQXR9fSksT2Jq
ZWN0LmRlZmluZVByb3BlcnR5KGUsIlRhcmdldEFjdGlvblN1cHBvcnQiLHtlbnVtZXJhYmxlOiEw
LGdldDpmdW5jdGlvbigpe3JldHVybiBPLmRlZmF1bHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5
KGUsIkV2ZW50ZWQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBBLmRlZmF1
bHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIlByb21pc2VQcm94eU1peGluIix7ZW51bWVy
YWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gVC5kZWZhdWx0fX0pLE9iamVjdC5kZWZpbmVQ
cm9wZXJ0eShlLCJlbXB0eSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFMu
ZW1wdHl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIm5vdEVtcHR5Iix7ZW51bWVyYWJsZToh
MCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gUy5ub3RFbXB0eX19KSxPYmplY3QuZGVmaW5lUHJvcGVy
dHkoZSwibm9uZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFMubm9uZX19
KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwibm90Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rp
b24oKXtyZXR1cm4gUy5ub3R9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImJvb2wiLHtlbnVt
ZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBTLmJvb2x9fSksT2JqZWN0LmRlZmluZVBy
b3BlcnR5KGUsIm1hdGNoIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gUy5t
YXRjaH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiZXF1YWwiLHtlbnVtZXJhYmxlOiEwLGdl
dDpmdW5jdGlvbigpe3JldHVybiBTLmVxdWFsfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJn
dCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFMuZ3R9fSksT2JqZWN0LmRl
ZmluZVByb3BlcnR5KGUsImd0ZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJu
IFMuZ3RlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJsdCIse2VudW1lcmFibGU6ITAsZ2V0
OmZ1bmN0aW9uKCl7cmV0dXJuIFMubHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImx0ZSIs
e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFMubHRlfX0pLE9iamVjdC5kZWZp
bmVQcm9wZXJ0eShlLCJvbmVXYXkiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVy
biBTLm9uZVdheX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicmVhZE9ubHkiLHtlbnVtZXJh
YmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBTLnJlYWRPbmx5fX0pLE9iamVjdC5kZWZpbmVQ
cm9wZXJ0eShlLCJkZXByZWNhdGluZ0FsaWFzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24o
KXtyZXR1cm4gUy5kZXByZWNhdGluZ0FsaWFzfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJh
bmQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBTLmFuZH19KSxPYmplY3Qu
ZGVmaW5lUHJvcGVydHkoZSwib3IiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVy
biBTLm9yfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJzdW0iLHtlbnVtZXJhYmxlOiEwLGdl
dDpmdW5jdGlvbigpe3JldHVybiBSLnN1bX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwibWlu
Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gUi5taW59fSkKLU9iamVjdC5k
ZWZpbmVQcm9wZXJ0eShlLCJtYXgiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVy
biBSLm1heH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwibWFwIix7ZW51bWVyYWJsZTohMCxn
ZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gUi5tYXB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInNv
cnQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBSLnNvcnR9fSksT2JqZWN0
LmRlZmluZVByb3BlcnR5KGUsInNldERpZmYiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigp
e3JldHVybiBSLnNldERpZmZ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIm1hcEJ5Iix7ZW51
bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gUi5tYXBCeX19KSxPYmplY3QuZGVmaW5l
UHJvcGVydHkoZSwiZmlsdGVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4g
Ui5maWx0ZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImZpbHRlckJ5Iix7ZW51bWVyYWJs
ZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gUi5maWx0ZXJCeX19KSxPYmplY3QuZGVmaW5lUHJv
cGVydHkoZSwidW5pcSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFIudW5p
cX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwidW5pcUJ5Iix7ZW51bWVyYWJsZTohMCxnZXQ6
ZnVuY3Rpb24oKXtyZXR1cm4gUi51bmlxQnl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInVu
aW9uIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gUi51bmlvbn19KSxPYmpl
Y3QuZGVmaW5lUHJvcGVydHkoZSwiaW50ZXJzZWN0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rp
b24oKXtyZXR1cm4gUi5pbnRlcnNlY3R9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImNvbGxl
Y3QiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBSLmNvbGxlY3R9fSksT2Jq
ZWN0LmRlZmluZVByb3BlcnR5KGUsIkNvbnRyb2xsZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5j
dGlvbigpe3JldHVybiBrLmRlZmF1bHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIkNvbnRy
b2xsZXJNaXhpbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIE4uZGVmYXVs
dH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiU2VydmljZSIse2VudW1lcmFibGU6ITAsZ2V0
OmZ1bmN0aW9uKCl7cmV0dXJuIFAuZGVmYXVsdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwi
UlNWUCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGouZGVmYXVsdH19KSxP
YmplY3QuZGVmaW5lUHJvcGVydHkoZSwib25lcnJvckRlZmF1bHQiLHtlbnVtZXJhYmxlOiEwLGdl
dDpmdW5jdGlvbigpe3JldHVybiBqLm9uZXJyb3JEZWZhdWx0fX0pLE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShlLCJpc0FycmF5Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gRC5p
c0FycmF5fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJ0eXBlT2YiLHtlbnVtZXJhYmxlOiEw
LGdldDpmdW5jdGlvbigpe3JldHVybiBELnR5cGVPZn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHko
ZSwiZ2V0U3RyaW5ncyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEwuZ2V0
U3RyaW5nc319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwic2V0U3RyaW5ncyIse2VudW1lcmFi
bGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEwuc2V0U3RyaW5nc319KX0pLGUoImVtYmVyLXJ1
bnRpbWUvaW5qZWN0IixbImV4cG9ydHMiLCJlbWJlci1tZXRhbCIsImVtYmVyLWRlYnVnIl0sZnVu
Y3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IgotZnVuY3Rpb24gcigpe31lLmRlZmF1bHQ9cixlLmNy
ZWF0ZUluamVjdGlvbkhlbHBlcj1mdW5jdGlvbihlLG4pe2lbZV09bixyW2VdPWZ1bmN0aW9uKG4p
e3JldHVybiBuZXcgdC5JbmplY3RlZFByb3BlcnR5KGUsbil9fSxlLnZhbGlkYXRlUHJvcGVydHlJ
bmplY3Rpb25zPWZ1bmN0aW9uKGUpe3ZhciBuLHIsbyxzPWUucHJvdG8oKSxhPVtdCi1mb3IodmFy
IHUgaW4gcykobj1zW3VdKWluc3RhbmNlb2YgdC5JbmplY3RlZFByb3BlcnR5JiYtMT09PWEuaW5k
ZXhPZihuLnR5cGUpJiZhLnB1c2gobi50eXBlKQotaWYoYS5sZW5ndGgpZm9yKHI9MDtyPGEubGVu
Z3RoO3IrKykiZnVuY3Rpb24iPT10eXBlb2Yobz1pW2Fbcl1dKSYmbyhlKQotcmV0dXJuITB9Ci12
YXIgaT17fX0pLGUoImVtYmVyLXJ1bnRpbWUvaXMtZXF1YWwiLFsiZXhwb3J0cyJdLGZ1bmN0aW9u
KGUpeyJ1c2Ugc3RyaWN0IgotZS5kZWZhdWx0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJiJmdW5j
dGlvbiI9PXR5cGVvZiBlLmlzRXF1YWw/ZS5pc0VxdWFsKHQpOmUgaW5zdGFuY2VvZiBEYXRlJiZ0
IGluc3RhbmNlb2YgRGF0ZT9lLmdldFRpbWUoKT09PXQuZ2V0VGltZSgpOmU9PT10fX0pLGUoImVt
YmVyLXJ1bnRpbWUvbWl4aW5zLy1wcm94eSIsWyJleHBvcnRzIiwiZW1iZXItYmFiZWwiLCJAZ2xp
bW1lci9yZWZlcmVuY2UiLCJlbWJlci1tZXRhbCIsImVtYmVyLWRlYnVnIiwiZW1iZXItcnVudGlt
ZS9jb21wdXRlZC9jb21wdXRlZF9tYWNyb3MiXSxmdW5jdGlvbihlLHQsbixyLGksbyl7InVzZSBz
dHJpY3QiCi1mdW5jdGlvbiBzKGUsdCl7dmFyIG49dC5zbGljZSg4KQotbiBpbiB0aGlzfHwoMCxy
LnByb3BlcnR5V2lsbENoYW5nZSkodGhpcyxuKX1mdW5jdGlvbiBhKGUsdCl7dmFyIG49dC5zbGlj
ZSg4KQotbiBpbiB0aGlzfHwoMCxyLnByb3BlcnR5RGlkQ2hhbmdlKSh0aGlzLG4pfXZhciB1PWZ1
bmN0aW9uKGUpe2Z1bmN0aW9uIGkoaSl7dmFyIG89KDAsdC5wb3NzaWJsZUNvbnN0cnVjdG9yUmV0
dXJuKSh0aGlzLGUuY2FsbCh0aGlzKSkscz0oMCxyLmdldCkoaSwiY29udGVudCIpCi1yZXR1cm4g
by5wcm94eT1pLG8ucHJveHlXcmFwcGVyVGFnPW5ldyBuLkRpcnR5YWJsZVRhZyxvLnByb3h5Q29u
dGVudFRhZz1uZXcgbi5VcGRhdGFibGVUYWcoKDAsci50YWdGb3IpKHMpKSxvfXJldHVybigwLHQu
aW5oZXJpdHMpKGksZSksaS5wcm90b3R5cGUuY29tcHV0ZT1mdW5jdGlvbigpe3JldHVybiBNYXRo
Lm1heCh0aGlzLnByb3h5V3JhcHBlclRhZy52YWx1ZSgpLHRoaXMucHJveHlDb250ZW50VGFnLnZh
bHVlKCkpfSxpLnByb3RvdHlwZS5kaXJ0eT1mdW5jdGlvbigpe3RoaXMucHJveHlXcmFwcGVyVGFn
LmRpcnR5KCl9LGkucHJvdG90eXBlLmNvbnRlbnREaWRDaGFuZ2U9ZnVuY3Rpb24oKXt2YXIgZT0o
MCxyLmdldCkodGhpcy5wcm94eSwiY29udGVudCIpCi10aGlzLnByb3h5Q29udGVudFRhZy51cGRh
dGUoKDAsci50YWdGb3IpKGUpKX0saX0obi5DYWNoZWRUYWcpCi1lLmRlZmF1bHQ9ci5NaXhpbi5j
cmVhdGUoe2NvbnRlbnQ6bnVsbCxpbml0OmZ1bmN0aW9uKCl7dGhpcy5fc3VwZXIuYXBwbHkodGhp
cyxhcmd1bWVudHMpCi12YXIgZT0oMCxyLm1ldGEpKHRoaXMpCi1lLnNldFByb3h5KCksZS5zZXRU
YWcobmV3IHUodGhpcykpfSxpc1RydXRoeTooMCxvLmJvb2wpKCJjb250ZW50Iiksd2lsbFdhdGNo
UHJvcGVydHk6ZnVuY3Rpb24oZSl7dmFyIHQ9ImNvbnRlbnQuIitlOygwLHIuX2FkZEJlZm9yZU9i
c2VydmVyKSh0aGlzLHQsbnVsbCxzKSwoMCxyLmFkZE9ic2VydmVyKSh0aGlzLHQsbnVsbCxhKX0s
ZGlkVW53YXRjaFByb3BlcnR5OmZ1bmN0aW9uKGUpe3ZhciB0PSJjb250ZW50LiIrZTsoMCxyLl9y
ZW1vdmVCZWZvcmVPYnNlcnZlcikodGhpcyx0LG51bGwscyksKDAsci5yZW1vdmVPYnNlcnZlciko
dGhpcyx0LG51bGwsYSl9LHVua25vd25Qcm9wZXJ0eTpmdW5jdGlvbihlKXt2YXIgdD0oMCxyLmdl
dCkodGhpcywiY29udGVudCIpCi1pZih0KXJldHVybigwLHIuZ2V0KSh0LGUpfSxzZXRVbmtub3du
UHJvcGVydHk6ZnVuY3Rpb24oZSx0KXtpZigoMCxyLm1ldGEpKHRoaXMpLnByb3RvPT09dGhpcyly
ZXR1cm4oMCxyLmRlZmluZVByb3BlcnR5KSh0aGlzLGUsbnVsbCx0KSx0Ci12YXIgbj0oMCxyLmdl
dCkodGhpcywiY29udGVudCIpCi1yZXR1cm4oMCxyLnNldCkobixlLHQpfX0pfSkKLWUoImVtYmVy
LXJ1bnRpbWUvbWl4aW5zL2FjdGlvbl9oYW5kbGVyIixbImV4cG9ydHMiLCJlbWJlci1tZXRhbCIs
ImVtYmVyLWRlYnVnIl0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IgotZS5kZXByZWNhdGVV
bmRlcnNjb3JlQWN0aW9ucz1mdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90
b3R5cGUsIl9hY3Rpb25zIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsc2V0OmZ1bmN0
aW9uKCl7fSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCx0LmdldCkodGhpcywiYWN0aW9ucyIpfX0p
fQotdmFyIHI9dC5NaXhpbi5jcmVhdGUoe21lcmdlZFByb3BlcnRpZXM6WyJhY3Rpb25zIl0sc2Vu
ZDpmdW5jdGlvbihlKXtmb3Iobj1hcmd1bWVudHMubGVuZ3RoLHI9QXJyYXkobj4xP24tMTowKSxp
PTE7aTxuO2krKylyW2ktMV09YXJndW1lbnRzW2ldCi1pZighdGhpcy5hY3Rpb25zfHwhdGhpcy5h
Y3Rpb25zW2VdfHwhMD09PXRoaXMuYWN0aW9uc1tlXS5hcHBseSh0aGlzLHIpKXt2YXIgbixyLGks
bz0oMCx0LmdldCkodGhpcywidGFyZ2V0IikKLW8mJm8uc2VuZC5hcHBseShvLGFyZ3VtZW50cyl9
fSx3aWxsTWVyZ2VNaXhpbjpmdW5jdGlvbihlKXtlLl9hY3Rpb25zJiYoZS5hY3Rpb25zPWUuX2Fj
dGlvbnMsZGVsZXRlIGUuX2FjdGlvbnMpfX0pCi1lLmRlZmF1bHQ9cn0pLGUoImVtYmVyLXJ1bnRp
bWUvbWl4aW5zL2FycmF5IixbImV4cG9ydHMiLCJlbWJlci11dGlscyIsImVtYmVyLW1ldGFsIiwi
ZW1iZXItZGVidWciLCJlbWJlci1ydW50aW1lL21peGlucy9lbnVtZXJhYmxlIl0sZnVuY3Rpb24o
ZSx0LG4scixpKXsidXNlIHN0cmljdCIKLWZ1bmN0aW9uIG8oZSx0LHIsaSxvKXt2YXIgcz1yJiZy
LndpbGxDaGFuZ2V8fCJhcnJheVdpbGxDaGFuZ2UiLGE9ciYmci5kaWRDaGFuZ2V8fCJhcnJheURp
ZENoYW5nZSIsdT0oMCxuLmdldCkoZSwiaGFzQXJyYXlPYnNlcnZlcnMiKQotcmV0dXJuIHU9PT1v
JiYoMCxuLnByb3BlcnR5V2lsbENoYW5nZSkoZSwiaGFzQXJyYXlPYnNlcnZlcnMiKSxpKGUsIkBh
cnJheTpiZWZvcmUiLHQscyksaShlLCJAYXJyYXk6Y2hhbmdlIix0LGEpLHU9PT1vJiYoMCxuLnBy
b3BlcnR5RGlkQ2hhbmdlKShlLCJoYXNBcnJheU9ic2VydmVycyIpLGV9ZnVuY3Rpb24gcyhlLHQs
cil7cmV0dXJuIG8oZSx0LHIsbi5hZGRMaXN0ZW5lciwhMSl9ZnVuY3Rpb24gYShlLHQscil7cmV0
dXJuIG8oZSx0LHIsbi5yZW1vdmVMaXN0ZW5lciwhMCl9ZnVuY3Rpb24gdShlLHQpe3JldHVybiBl
Lm9iamVjdEF0P2Uub2JqZWN0QXQodCk6ZVt0XX1mdW5jdGlvbiBsKGUsdCxyLGkpe3ZhciBvLHM9
dm9pZCAwLGE9dm9pZCAwCi1pZih2b2lkIDA9PT10Pyh0PTAscj1pPS0xKToodm9pZCAwPT09ciYm
KHI9LTEpLHZvaWQgMD09PWkmJihpPS0xKSksZS5fX2VhY2gmJmUuX19lYWNoLmFycmF5V2lsbENo
YW5nZShlLHQscixpKSwoMCxuLnNlbmRFdmVudCkoZSwiQGFycmF5OmJlZm9yZSIsW2UsdCxyLGld
KSx0Pj0wJiZyPj0wJiYoMCxuLmdldCkoZSwiaGFzRW51bWVyYWJsZU9ic2VydmVycyIpKWZvcihz
PVtdLGE9dCtyLG89dDtvPGE7bysrKXMucHVzaCh1KGUsbykpCi1lbHNlIHM9cgotcmV0dXJuIGUu
ZW51bWVyYWJsZUNvbnRlbnRXaWxsQ2hhbmdlKHMsaSksZX1mdW5jdGlvbiBjKGUsdCxyLGkpe3Zv
aWQgMD09PXQ/KHQ9MCxyPWk9LTEpOih2b2lkIDA9PT1yJiYocj0tMSksdm9pZCAwPT09aSYmKGk9
LTEpKQotdmFyIG8scyxhPXZvaWQgMAotaWYodD49MCYmaT49MCYmKDAsbi5nZXQpKGUsImhhc0Vu
dW1lcmFibGVPYnNlcnZlcnMiKSlmb3IoYT1bXSxvPXQraSxzPXQ7czxvO3MrKylhLnB1c2godShl
LHMpKQotZWxzZSBhPWkKLWUuZW51bWVyYWJsZUNvbnRlbnREaWRDaGFuZ2UocixhKSxlLl9fZWFj
aCYmZS5fX2VhY2guYXJyYXlEaWRDaGFuZ2UoZSx0LHIsaSksKDAsbi5zZW5kRXZlbnQpKGUsIkBh
cnJheTpjaGFuZ2UiLFtlLHQscixpXSkKLXZhciBsPSgwLG4ucGVla01ldGEpKGUpLGM9bCYmbC5y
ZWFkYWJsZUNhY2hlKCkKLXJldHVybiBjJiYodm9pZCAwIT09Yy5maXJzdE9iamVjdCYmdShlLDAp
IT09bi5jYWNoZUZvci5nZXQoYywiZmlyc3RPYmplY3QiKSYmKCgwLG4ucHJvcGVydHlXaWxsQ2hh
bmdlKShlLCJmaXJzdE9iamVjdCIsbCksKDAsbi5wcm9wZXJ0eURpZENoYW5nZSkoZSwiZmlyc3RP
YmplY3QiLGwpKSx2b2lkIDAhPT1jLmxhc3RPYmplY3QmJnUoZSwoMCxuLmdldCkoZSwibGVuZ3Ro
IiktMSkhPT1uLmNhY2hlRm9yLmdldChjLCJsYXN0T2JqZWN0IikmJigoMCxuLnByb3BlcnR5V2ls
bENoYW5nZSkoZSwibGFzdE9iamVjdCIsbCksKDAsbi5wcm9wZXJ0eURpZENoYW5nZSkoZSwibGFz
dE9iamVjdCIsbCkpKSxlfWZ1bmN0aW9uIHAoZSl7dGhpcy5fY29udGVudD1lLHRoaXMuX2tleXM9
dm9pZCAwLCgwLG4ubWV0YSkodGhpcyl9ZnVuY3Rpb24gZihlLHQscixpLG8pe2Zvcih2YXIgczst
LW8+PWk7KShzPXUoZSxvKSkmJigoMCxuLl9hZGRCZWZvcmVPYnNlcnZlcikocyx0LHIsImNvbnRl
bnRLZXlXaWxsQ2hhbmdlIiksKDAsbi5hZGRPYnNlcnZlcikocyx0LHIsImNvbnRlbnRLZXlEaWRD
aGFuZ2UiKSl9ZnVuY3Rpb24gaChlLHQscixpLG8pe2Zvcih2YXIgczstLW8+PWk7KShzPXUoZSxv
KSkmJigoMCxuLl9yZW1vdmVCZWZvcmVPYnNlcnZlcikocyx0LHIsImNvbnRlbnRLZXlXaWxsQ2hh
bmdlIiksKDAsbi5yZW1vdmVPYnNlcnZlcikocyx0LHIsImNvbnRlbnRLZXlEaWRDaGFuZ2UiKSl9
ZS5hZGRBcnJheU9ic2VydmVyPXMsZS5yZW1vdmVBcnJheU9ic2VydmVyPWEsZS5vYmplY3RBdD11
LGUuYXJyYXlDb250ZW50V2lsbENoYW5nZT1sLGUuYXJyYXlDb250ZW50RGlkQ2hhbmdlPWMsZS5p
c0VtYmVyQXJyYXk9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiEhZVttXX0KLXZhciBkLG09KDAsdC5z
eW1ib2wpKCJFTUJFUl9BUlJBWSIpLGc9bi5NaXhpbi5jcmVhdGUoaS5kZWZhdWx0LChkPXt9LGRb
bV09ITAsZC5sZW5ndGg9bnVsbCxkLm9iamVjdEF0PWZ1bmN0aW9uKGUpe2lmKCEoZTwwfHxlPj0o
MCxuLmdldCkodGhpcywibGVuZ3RoIikpKXJldHVybigwLG4uZ2V0KSh0aGlzLGUpfSxkLm9iamVj
dHNBdD1mdW5jdGlvbihlKXt2YXIgdD10aGlzCi1yZXR1cm4gZS5tYXAoZnVuY3Rpb24oZSl7cmV0
dXJuIHUodCxlKX0pfSxkLm5leHRPYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHUodGhpcyxlKX0s
ZFsiW10iXT0oMCxuLmNvbXB1dGVkKSh7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LHNldDpm
dW5jdGlvbihlLHQpe3JldHVybiB0aGlzLnJlcGxhY2UoMCwoMCxuLmdldCkodGhpcywibGVuZ3Ro
IiksdCksdGhpc319KSxkLmZpcnN0T2JqZWN0PSgwLG4uY29tcHV0ZWQpKGZ1bmN0aW9uKCl7cmV0
dXJuIHUodGhpcywwKX0pLnJlYWRPbmx5KCksZC5sYXN0T2JqZWN0PSgwLG4uY29tcHV0ZWQpKGZ1
bmN0aW9uKCl7cmV0dXJuIHUodGhpcywoMCxuLmdldCkodGhpcywibGVuZ3RoIiktMSl9KS5yZWFk
T25seSgpLGQuY29udGFpbnM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuaW5kZXhPZihlKT49MH0s
ZC5zbGljZT1mdW5jdGlvbihlLHQpe3ZhciByPW4uZGVmYXVsdC5BKCksaT0oMCxuLmdldCkodGhp
cywibGVuZ3RoIikKLWZvcigoMCxuLmlzTm9uZSkoZSkmJihlPTApLCgoMCxuLmlzTm9uZSkodCl8
fHQ+aSkmJih0PWkpLGU8MCYmKGU9aStlKSx0PDAmJih0PWkrdCk7ZTx0OylyW3IubGVuZ3RoXT11
KHRoaXMsZSsrKQotcmV0dXJuIHJ9LGQuaW5kZXhPZj1mdW5jdGlvbihlLHQpe3ZhciByLGk9KDAs
bi5nZXQpKHRoaXMsImxlbmd0aCIpCi1mb3Iodm9pZCAwPT09dCYmKHQ9MCksdDwwJiYodCs9aSks
cj10O3I8aTtyKyspaWYodSh0aGlzLHIpPT09ZSlyZXR1cm4gcgotcmV0dXJuLTF9LGQubGFzdElu
ZGV4T2Y9ZnVuY3Rpb24oZSx0KXt2YXIgcixpPSgwLG4uZ2V0KSh0aGlzLCJsZW5ndGgiKQotZm9y
KCh2b2lkIDA9PT10fHx0Pj1pKSYmKHQ9aS0xKSx0PDAmJih0Kz1pKSxyPXQ7cj49MDtyLS0paWYo
dSh0aGlzLHIpPT09ZSlyZXR1cm4gcgotcmV0dXJuLTF9LGQuYWRkQXJyYXlPYnNlcnZlcj1mdW5j
dGlvbihlLHQpe3JldHVybiBzKHRoaXMsZSx0KX0sZC5yZW1vdmVBcnJheU9ic2VydmVyPWZ1bmN0
aW9uKGUsdCl7cmV0dXJuIGEodGhpcyxlLHQpfSxkLmhhc0FycmF5T2JzZXJ2ZXJzPSgwLG4uY29t
cHV0ZWQpKGZ1bmN0aW9uKCl7cmV0dXJuKDAsbi5oYXNMaXN0ZW5lcnMpKHRoaXMsIkBhcnJheTpj
aGFuZ2UiKXx8KDAsbi5oYXNMaXN0ZW5lcnMpKHRoaXMsIkBhcnJheTpiZWZvcmUiKX0pLGQuYXJy
YXlDb250ZW50V2lsbENoYW5nZT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGwodGhpcyxlLHQsbil9
LGQuYXJyYXlDb250ZW50RGlkQ2hhbmdlPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gYyh0aGlzLGUs
dCxuKX0sZC5pbmNsdWRlcz1mdW5jdGlvbihlLHQpe3ZhciByLGksbz0oMCxuLmdldCkodGhpcywi
bGVuZ3RoIikKLWZvcih2b2lkIDA9PT10JiYodD0wKSx0PDAmJih0Kz1vKSxyPXQ7cjxvO3IrKylp
ZihpPXUodGhpcyxyKSxlPT09aXx8ZSE9PWUmJmkhPT1pKXJldHVybiEwCi1yZXR1cm4hMX0sZFsi
QGVhY2giXT0oMCxuLmNvbXB1dGVkKShmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZWFjaHx8KHRo
aXMuX19lYWNoPW5ldyBwKHRoaXMpKSx0aGlzLl9fZWFjaH0pLnZvbGF0aWxlKCkucmVhZE9ubHko
KSxkKSkKLXAucHJvdG90eXBlPXtfX2RlZmluZU5vbkVudW1lcmFibGU6ZnVuY3Rpb24oZSl7dGhp
c1tlLm5hbWVdPWUuZGVzY3JpcHRvci52YWx1ZX0sYXJyYXlXaWxsQ2hhbmdlOmZ1bmN0aW9uKGUs
dCxyKXt2YXIgaT10aGlzLl9rZXlzLG89cj4wP3QrcjotMSxzPXZvaWQgMAotZm9yKHZhciBhIGlu
IGkpcz1zfHwoMCxuLnBlZWtNZXRhKSh0aGlzKSxvPjAmJmgoZSxhLHRoaXMsdCxvKSwoMCxuLnBy
b3BlcnR5V2lsbENoYW5nZSkodGhpcyxhLHMpfSxhcnJheURpZENoYW5nZTpmdW5jdGlvbihlLHQs
cixpKXt2YXIgbz10aGlzLl9rZXlzLHM9aT4wP3QraTotMSxhPXZvaWQgMAotZm9yKHZhciB1IGlu
IG8pYT1hfHwoMCxuLnBlZWtNZXRhKSh0aGlzKSxzPjAmJmYoZSx1LHRoaXMsdCxzKSwoMCxuLnBy
b3BlcnR5RGlkQ2hhbmdlKSh0aGlzLHUsYSl9LHdpbGxXYXRjaFByb3BlcnR5OmZ1bmN0aW9uKGUp
e3RoaXMuYmVnaW5PYnNlcnZpbmdDb250ZW50S2V5KGUpfSxkaWRVbndhdGNoUHJvcGVydHk6ZnVu
Y3Rpb24oZSl7dGhpcy5zdG9wT2JzZXJ2aW5nQ29udGVudEtleShlKX0sYmVnaW5PYnNlcnZpbmdD
b250ZW50S2V5OmZ1bmN0aW9uKGUpe3ZhciB0LHIsaT10aGlzLl9rZXlzCi1pfHwoaT10aGlzLl9r
ZXlzPU9iamVjdC5jcmVhdGUobnVsbCkpLGlbZV0/aVtlXSsrOihpW2VdPTEsdD10aGlzLl9jb250
ZW50LHI9KDAsbi5nZXQpKHQsImxlbmd0aCIpLGYodCxlLHRoaXMsMCxyKSl9LHN0b3BPYnNlcnZp
bmdDb250ZW50S2V5OmZ1bmN0aW9uKGUpe3ZhciB0LHIsaT10aGlzLl9rZXlzCi1pJiZpW2VdPjAm
Ji0taVtlXTw9MCYmKHQ9dGhpcy5fY29udGVudCxyPSgwLG4uZ2V0KSh0LCJsZW5ndGgiKSxoKHQs
ZSx0aGlzLDAscikpfSxjb250ZW50S2V5V2lsbENoYW5nZTpmdW5jdGlvbihlLHQpeygwLG4ucHJv
cGVydHlXaWxsQ2hhbmdlKSh0aGlzLHQpfSxjb250ZW50S2V5RGlkQ2hhbmdlOmZ1bmN0aW9uKGUs
dCl7KDAsbi5wcm9wZXJ0eURpZENoYW5nZSkodGhpcyx0KX19LGUuZGVmYXVsdD1nfSksZSgiZW1i
ZXItcnVudGltZS9taXhpbnMvY29tcGFyYWJsZSIsWyJleHBvcnRzIiwiZW1iZXItbWV0YWwiXSxm
dW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0IgotZS5kZWZhdWx0PXQuTWl4aW4uY3JlYXRlKHtjb21w
YXJlOm51bGx9KX0pLGUoImVtYmVyLXJ1bnRpbWUvbWl4aW5zL2NvbnRhaW5lcl9wcm94eSIsWyJl
eHBvcnRzIiwiZW1iZXItbWV0YWwiXSxmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0IgotZS5kZWZh
dWx0PXQuTWl4aW4uY3JlYXRlKHtfX2NvbnRhaW5lcl9fOm51bGwsb3duZXJJbmplY3Rpb246ZnVu
Y3Rpb24oKXtyZXR1cm4gdGhpcy5fX2NvbnRhaW5lcl9fLm93bmVySW5qZWN0aW9uKCl9LGxvb2t1
cDpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLl9fY29udGFpbmVyX18ubG9va3VwKGUsdCl9LF9s
b29rdXBGYWN0b3J5OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX19jb250YWluZXJfXy5sb29r
dXBGYWN0b3J5KGUsdCl9LF9yZXNvbHZlTG9jYWxMb29rdXBOYW1lOmZ1bmN0aW9uKGUsdCl7cmV0
dXJuIHRoaXMuX19jb250YWluZXJfXy5yZWdpc3RyeS5leHBhbmRMb2NhbExvb2t1cCgiY29tcG9u
ZW50OiIrZSx7c291cmNlOnR9KX0sd2lsbERlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLl9zdXBlci5h
cHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5fX2NvbnRhaW5lcl9fJiYoMCx0LnJ1bikodGhpcy5f
X2NvbnRhaW5lcl9fLCJkZXN0cm95Iil9LGZhY3RvcnlGb3I6ZnVuY3Rpb24oZSl7dmFyIHQ9YXJn
dW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9Ci1y
ZXR1cm4gdGhpcy5fX2NvbnRhaW5lcl9fLmZhY3RvcnlGb3IoZSx0KX19KX0pLGUoImVtYmVyLXJ1
bnRpbWUvbWl4aW5zL2NvbnRyb2xsZXIiLFsiZXhwb3J0cyIsImVtYmVyLW1ldGFsIiwiZW1iZXIt
cnVudGltZS9taXhpbnMvYWN0aW9uX2hhbmRsZXIiLCJlbWJlci1ydW50aW1lL21peGlucy9jb250
cm9sbGVyX2NvbnRlbnRfbW9kZWxfYWxpYXNfZGVwcmVjYXRpb24iXSxmdW5jdGlvbihlLHQsbixy
KXsidXNlIHN0cmljdCIKLWUuZGVmYXVsdD10Lk1peGluLmNyZWF0ZShuLmRlZmF1bHQsci5kZWZh
dWx0LHtpc0NvbnRyb2xsZXI6ITAsdGFyZ2V0Om51bGwsc3RvcmU6bnVsbCxtb2RlbDpudWxsLGNv
bnRlbnQ6KDAsdC5hbGlhcykoIm1vZGVsIil9KX0pLGUoImVtYmVyLXJ1bnRpbWUvbWl4aW5zL2Nv
bnRyb2xsZXJfY29udGVudF9tb2RlbF9hbGlhc19kZXByZWNhdGlvbiIsWyJleHBvcnRzIiwiZW1i
ZXItbWV0YWwiLCJlbWJlci1kZWJ1ZyJdLGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCIKLWUu
ZGVmYXVsdD10Lk1peGluLmNyZWF0ZSh7d2lsbE1lcmdlTWl4aW46ZnVuY3Rpb24oZSl7dGhpcy5f
c3VwZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpCi12YXIgdD0hIWUubW9kZWwKLWUuY29udGVudCYm
IXQmJihlLm1vZGVsPWUuY29udGVudCxkZWxldGUgZS5jb250ZW50KX19KX0pLGUoImVtYmVyLXJ1
bnRpbWUvbWl4aW5zL2NvcHlhYmxlIixbImV4cG9ydHMiLCJlbWJlci1tZXRhbCIsImVtYmVyLWRl
YnVnIiwiZW1iZXItcnVudGltZS9taXhpbnMvZnJlZXphYmxlIl0sZnVuY3Rpb24oZSx0LG4scil7
InVzZSBzdHJpY3QiCi1lLmRlZmF1bHQ9dC5NaXhpbi5jcmVhdGUoe2NvcHk6bnVsbCxmcm96ZW5D
b3B5OmZ1bmN0aW9uKCl7aWYoci5GcmVlemFibGUmJnIuRnJlZXphYmxlLmRldGVjdCh0aGlzKSly
ZXR1cm4oMCx0LmdldCkodGhpcywiaXNGcm96ZW4iKT90aGlzOnRoaXMuY29weSgpLmZyZWV6ZSgp
Ci10aHJvdyBuZXcgbi5FcnJvcih0aGlzKyIgZG9lcyBub3Qgc3VwcG9ydCBmcmVlemluZyIpfX0p
fSksZSgiZW1iZXItcnVudGltZS9taXhpbnMvZW51bWVyYWJsZSIsWyJleHBvcnRzIiwiZW1iZXIt
dXRpbHMiLCJlbWJlci1tZXRhbCIsImVtYmVyLWRlYnVnIiwiZW1iZXItcnVudGltZS9jb21wYXJl
IiwicmVxdWlyZSJdLGZ1bmN0aW9uKGUsdCxuLHIsaSxvKXsidXNlIHN0cmljdCIKLWZ1bmN0aW9u
IHMoKXtyZXR1cm4oY3x8KGM9KDAsby5kZWZhdWx0KSgiZW1iZXItcnVudGltZS9zeXN0ZW0vbmF0
aXZlX2FycmF5IikuQSkpKCl9ZnVuY3Rpb24gYSgpe3JldHVybiAwPT09cC5sZW5ndGg/e306cC5w
b3AoKX1mdW5jdGlvbiB1KGUpe3JldHVybiBwLnB1c2goZSksbnVsbH1mdW5jdGlvbiBsKGUsdCl7
dmFyIHI9Mj09PWFyZ3VtZW50cy5sZW5ndGgKLXJldHVybiBmdW5jdGlvbihpKXt2YXIgbz0oMCxu
LmdldCkoaSxlKQotcmV0dXJuIHI/dD09PW86ISFvfX12YXIgYz12b2lkIDAscD1bXSxmPW4uTWl4
aW4uY3JlYXRlKHtuZXh0T2JqZWN0Om51bGwsZmlyc3RPYmplY3Q6KDAsbi5jb21wdXRlZCkoIltd
IixmdW5jdGlvbigpe2lmKDAhPT0oMCxuLmdldCkodGhpcywibGVuZ3RoIikpe3ZhciBlPWEoKSx0
PXRoaXMubmV4dE9iamVjdCgwLG51bGwsZSkKLXJldHVybiB1KGUpLHR9fSkucmVhZE9ubHkoKSxs
YXN0T2JqZWN0OigwLG4uY29tcHV0ZWQpKCJbXSIsZnVuY3Rpb24oKXtpZigwIT09KDAsbi5nZXQp
KHRoaXMsImxlbmd0aCIpKXt2YXIgZT1hKCksdD0wLHI9bnVsbCxpPXZvaWQgMAotZG97cj1pLGk9
dGhpcy5uZXh0T2JqZWN0KHQrKyxyLGUpfXdoaWxlKHZvaWQgMCE9PWkpCi1yZXR1cm4gdShlKSxy
fX0pLnJlYWRPbmx5KCksY29udGFpbnM6ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PXRoaXMu
ZmluZChmdW5jdGlvbih0KXtyZXR1cm4gdD09PWV9KX0sZm9yRWFjaDpmdW5jdGlvbihlLHQpe2lm
KCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IKLXZhciByLGksbz1hKCks
cz0oMCxuLmdldCkodGhpcywibGVuZ3RoIiksbD1udWxsCi1mb3Iodm9pZCAwPT09dCYmKHQ9bnVs
bCkscj0wO3I8cztyKyspaT10aGlzLm5leHRPYmplY3QocixsLG8pLGUuY2FsbCh0LGkscix0aGlz
KSxsPWkKLXJldHVybiBsPW51bGwsbz11KG8pLHRoaXN9LGdldEVhY2g6KDAsbi5hbGlhc01ldGhv
ZCkoIm1hcEJ5Iiksc2V0RWFjaDpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmZvckVhY2goZnVu
Y3Rpb24ocil7cmV0dXJuKDAsbi5zZXQpKHIsZSx0KX0pfSxtYXA6ZnVuY3Rpb24oZSx0KXt2YXIg
bj1zKCkKLXJldHVybiB0aGlzLmZvckVhY2goZnVuY3Rpb24ocixpLG8pe3JldHVybiBuW2ldPWUu
Y2FsbCh0LHIsaSxvKX0pLG59LG1hcEJ5OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm1hcChmdW5j
dGlvbih0KXtyZXR1cm4oMCxuLmdldCkodCxlKX0pfSxmaWx0ZXI6ZnVuY3Rpb24oZSx0KXt2YXIg
bj1zKCkKLXJldHVybiB0aGlzLmZvckVhY2goZnVuY3Rpb24ocixpLG8pe2UuY2FsbCh0LHIsaSxv
KSYmbi5wdXNoKHIpfSksbn0scmVqZWN0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuZmlsdGVy
KGZ1bmN0aW9uKCl7cmV0dXJuIWUuYXBwbHkodCxhcmd1bWVudHMpfSl9LGZpbHRlckJ5OmZ1bmN0
aW9uKCl7cmV0dXJuIHRoaXMuZmlsdGVyKGwuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0scmVqZWN0
Qnk6ZnVuY3Rpb24oZSx0KXt2YXIgcj0yPT09YXJndW1lbnRzLmxlbmd0aD9mdW5jdGlvbihyKXty
ZXR1cm4oMCxuLmdldCkocixlKT09PXR9OmZ1bmN0aW9uKHQpe3JldHVybiEhKDAsbi5nZXQpKHQs
ZSl9Ci1yZXR1cm4gdGhpcy5yZWplY3Qocil9LGZpbmQ6ZnVuY3Rpb24oZSx0KXt2YXIgcixpPSgw
LG4uZ2V0KSh0aGlzLCJsZW5ndGgiKQotdm9pZCAwPT09dCYmKHQ9bnVsbCkKLXZhciBvPWEoKSxz
PSExLGw9bnVsbCxjPXZvaWQgMCxwPXZvaWQgMAotZm9yKHI9MDtyPGkmJiFzO3IrKyljPXRoaXMu
bmV4dE9iamVjdChyLGwsbykscz1lLmNhbGwodCxjLHIsdGhpcykscyYmKHA9YyksbD1jCi1yZXR1
cm4gYz1sPW51bGwsbz11KG8pLHB9LGZpbmRCeTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZpbmQo
bC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSxldmVyeTpmdW5jdGlvbihlLHQpe3JldHVybiF0aGlz
LmZpbmQoZnVuY3Rpb24obixyLGkpe3JldHVybiFlLmNhbGwodCxuLHIsaSl9KX0saXNFdmVyeTpm
dW5jdGlvbigpe3JldHVybiB0aGlzLmV2ZXJ5KGwuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0sYW55
OmZ1bmN0aW9uKGUsdCl7dmFyIHIsaT0oMCxuLmdldCkodGhpcywibGVuZ3RoIiksbz1hKCkscz0h
MSxsPW51bGwsYz12b2lkIDAKLWZvcih2b2lkIDA9PT10JiYodD1udWxsKSxyPTA7cjxpJiYhczty
KyspYz10aGlzLm5leHRPYmplY3QocixsLG8pLHM9ZS5jYWxsKHQsYyxyLHRoaXMpLGw9YwotcmV0
dXJuIGM9bD1udWxsLG89dShvKSxzfSxpc0FueTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFueShs
LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9LHJlZHVjZTpmdW5jdGlvbihlLHQsbil7aWYoImZ1bmN0
aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcgotdmFyIHI9dAotcmV0dXJuIHRoaXMu
Zm9yRWFjaChmdW5jdGlvbih0LGkpe3I9ZShyLHQsaSx0aGlzLG4pfSx0aGlzKSxyfSxpbnZva2U6
ZnVuY3Rpb24oZSl7Zm9yKHQ9YXJndW1lbnRzLmxlbmd0aCxuPUFycmF5KHQ+MT90LTE6MCkscj0x
O3I8dDtyKyspbltyLTFdPWFyZ3VtZW50c1tyXQotdmFyIHQsbixyLGk9cygpCi1yZXR1cm4gdGhp
cy5mb3JFYWNoKGZ1bmN0aW9uKHQscil7dmFyIG89dCYmdFtlXQotImZ1bmN0aW9uIj09dHlwZW9m
IG8mJihpW3JdPW4/by5hcHBseSh0LG4pOnRbZV0oKSl9LHRoaXMpLGl9LHRvQXJyYXk6ZnVuY3Rp
b24oKXt2YXIgZT1zKCkKLXJldHVybiB0aGlzLmZvckVhY2goZnVuY3Rpb24odCxuKXtyZXR1cm4g
ZVtuXT10fSksZX0sY29tcGFjdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZpbHRlcihmdW5jdGlv
bihlKXtyZXR1cm4gbnVsbCE9ZX0pfSx3aXRob3V0OmZ1bmN0aW9uKGUpe2lmKCF0aGlzLmluY2x1
ZGVzKGUpKXJldHVybiB0aGlzCi12YXIgdD1zKCkKLXJldHVybiB0aGlzLmZvckVhY2goZnVuY3Rp
b24obil7bj09PWV8fG4hPT1uJiZlIT09ZXx8KHRbdC5sZW5ndGhdPW4pfSksdH0sdW5pcTpmdW5j
dGlvbigpe3ZhciBlPXMoKQotcmV0dXJuIHRoaXMuZm9yRWFjaChmdW5jdGlvbih0KXtlLmluZGV4
T2YodCk8MCYmZS5wdXNoKHQpfSksZX0sIltdIjooMCxuLmNvbXB1dGVkKSh7Z2V0OmZ1bmN0aW9u
KCl7cmV0dXJuIHRoaXN9fSksYWRkRW51bWVyYWJsZU9ic2VydmVyOmZ1bmN0aW9uKGUsdCl7dmFy
IHI9dCYmdC53aWxsQ2hhbmdlfHwiZW51bWVyYWJsZVdpbGxDaGFuZ2UiLGk9dCYmdC5kaWRDaGFu
Z2V8fCJlbnVtZXJhYmxlRGlkQ2hhbmdlIixvPSgwLG4uZ2V0KSh0aGlzLCJoYXNFbnVtZXJhYmxl
T2JzZXJ2ZXJzIikKLXJldHVybiBvfHwoMCxuLnByb3BlcnR5V2lsbENoYW5nZSkodGhpcywiaGFz
RW51bWVyYWJsZU9ic2VydmVycyIpLCgwLG4uYWRkTGlzdGVuZXIpKHRoaXMsIkBlbnVtZXJhYmxl
OmJlZm9yZSIsZSxyKSwoMCxuLmFkZExpc3RlbmVyKSh0aGlzLCJAZW51bWVyYWJsZTpjaGFuZ2Ui
LGUsaSksb3x8KDAsbi5wcm9wZXJ0eURpZENoYW5nZSkodGhpcywiaGFzRW51bWVyYWJsZU9ic2Vy
dmVycyIpLHRoaXN9LHJlbW92ZUVudW1lcmFibGVPYnNlcnZlcjpmdW5jdGlvbihlLHQpe3ZhciBy
PXQmJnQud2lsbENoYW5nZXx8ImVudW1lcmFibGVXaWxsQ2hhbmdlIixpPXQmJnQuZGlkQ2hhbmdl
fHwiZW51bWVyYWJsZURpZENoYW5nZSIsbz0oMCxuLmdldCkodGhpcywiaGFzRW51bWVyYWJsZU9i
c2VydmVycyIpCi1yZXR1cm4gbyYmKDAsbi5wcm9wZXJ0eVdpbGxDaGFuZ2UpKHRoaXMsImhhc0Vu
dW1lcmFibGVPYnNlcnZlcnMiKSwoMCxuLnJlbW92ZUxpc3RlbmVyKSh0aGlzLCJAZW51bWVyYWJs
ZTpiZWZvcmUiLGUsciksKDAsbi5yZW1vdmVMaXN0ZW5lcikodGhpcywiQGVudW1lcmFibGU6Y2hh
bmdlIixlLGkpLG8mJigwLG4ucHJvcGVydHlEaWRDaGFuZ2UpKHRoaXMsImhhc0VudW1lcmFibGVP
YnNlcnZlcnMiKSx0aGlzfSxoYXNFbnVtZXJhYmxlT2JzZXJ2ZXJzOigwLG4uY29tcHV0ZWQpKGZ1
bmN0aW9uKCl7cmV0dXJuKDAsbi5oYXNMaXN0ZW5lcnMpKHRoaXMsIkBlbnVtZXJhYmxlOmNoYW5n
ZSIpfHwoMCxuLmhhc0xpc3RlbmVycykodGhpcywiQGVudW1lcmFibGU6YmVmb3JlIil9KSxlbnVt
ZXJhYmxlQ29udGVudFdpbGxDaGFuZ2U6ZnVuY3Rpb24oZSx0KXt2YXIgcj12b2lkIDAsaT12b2lk
IDAsbz12b2lkIDAKLXJldHVybiByPSJudW1iZXIiPT10eXBlb2YgZT9lOmU/KDAsbi5nZXQpKGUs
Imxlbmd0aCIpOmU9LTEsaT0ibnVtYmVyIj09dHlwZW9mIHQ/dDp0PygwLG4uZ2V0KSh0LCJsZW5n
dGgiKTp0PS0xLG89aTwwfHxyPDB8fGktciE9MCwtMT09PWUmJihlPW51bGwpLC0xPT09dCYmKHQ9
bnVsbCksKDAsbi5wcm9wZXJ0eVdpbGxDaGFuZ2UpKHRoaXMsIltdIiksbyYmKDAsbi5wcm9wZXJ0
eVdpbGxDaGFuZ2UpKHRoaXMsImxlbmd0aCIpLCgwLG4uc2VuZEV2ZW50KSh0aGlzLCJAZW51bWVy
YWJsZTpiZWZvcmUiLFt0aGlzLGUsdF0pLHRoaXN9LGVudW1lcmFibGVDb250ZW50RGlkQ2hhbmdl
OmZ1bmN0aW9uKGUsdCl7dmFyIHI9dm9pZCAwLGk9dm9pZCAwLG89dm9pZCAwCi1yZXR1cm4gcj0i
bnVtYmVyIj09dHlwZW9mIGU/ZTplPygwLG4uZ2V0KShlLCJsZW5ndGgiKTplPS0xLGk9Im51bWJl
ciI9PXR5cGVvZiB0P3Q6dD8oMCxuLmdldCkodCwibGVuZ3RoIik6dD0tMSxvPWk8MHx8cjwwfHxp
LXIhPTAsLTE9PT1lJiYoZT1udWxsKSwtMT09PXQmJih0PW51bGwpLCgwLG4uc2VuZEV2ZW50KSh0
aGlzLCJAZW51bWVyYWJsZTpjaGFuZ2UiLFt0aGlzLGUsdF0pLG8mJigwLG4ucHJvcGVydHlEaWRD
aGFuZ2UpKHRoaXMsImxlbmd0aCIpLCgwLG4ucHJvcGVydHlEaWRDaGFuZ2UpKHRoaXMsIltdIiks
dGhpc30sc29ydEJ5OmZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzCi1yZXR1cm4gdGhpcy50b0Fy
cmF5KCkuc29ydChmdW5jdGlvbih0LHIpe3ZhciBvLHMsYSx1LGwKLWZvcihvPTA7bzxlLmxlbmd0
aDtvKyspaWYocz1lW29dLGE9KDAsbi5nZXQpKHQscyksdT0oMCxuLmdldCkocixzKSxsPSgwLGku
ZGVmYXVsdCkoYSx1KSlyZXR1cm4gbAotcmV0dXJuIDB9KX0sdW5pcUJ5OmZ1bmN0aW9uKGUpe3Zh
ciByPXMoKSxpPU9iamVjdC5jcmVhdGUobnVsbCkKLXJldHVybiB0aGlzLmZvckVhY2goZnVuY3Rp
b24obyl7dmFyIHM9KDAsdC5ndWlkRm9yKSgoMCxuLmdldCkobyxlKSkKLXMgaW4gaXx8KGlbc109
ITAsci5wdXNoKG8pKX0pLHJ9LGluY2x1ZGVzOmZ1bmN0aW9uKGUpe3ZhciB0PSgwLG4uZ2V0KSh0
aGlzLCJsZW5ndGgiKSxyPXZvaWQgMCxpPXZvaWQgMCxvPW51bGwscz0hMSxsPWEoKQotZm9yKHI9
MDtyPHQmJiFzO3IrKylpPXRoaXMubmV4dE9iamVjdChyLG8sbCkscz1lPT09aXx8ZSE9PWUmJmkh
PT1pLG89aQotcmV0dXJuIGk9bz1udWxsLGw9dShsKSxzfX0pCi1lLmRlZmF1bHQ9Zn0pLGUoImVt
YmVyLXJ1bnRpbWUvbWl4aW5zL2V2ZW50ZWQiLFsiZXhwb3J0cyIsImVtYmVyLW1ldGFsIl0sZnVu
Y3Rpb24oZSx0KXsidXNlIHN0cmljdCIKLWUuZGVmYXVsdD10Lk1peGluLmNyZWF0ZSh7b246ZnVu
Y3Rpb24oZSxuLHIpe3JldHVybigwLHQuYWRkTGlzdGVuZXIpKHRoaXMsZSxuLHIpLHRoaXN9LG9u
ZTpmdW5jdGlvbihlLG4scil7cmV0dXJuIHJ8fChyPW4sbj1udWxsKSwoMCx0LmFkZExpc3RlbmVy
KSh0aGlzLGUsbixyLCEwKSx0aGlzfSx0cmlnZ2VyOmZ1bmN0aW9uKGUpe3ZhciBuLHIsaQotZm9y
KG49YXJndW1lbnRzLmxlbmd0aCxyPUFycmF5KG4+MT9uLTE6MCksaT0xO2k8bjtpKyspcltpLTFd
PWFyZ3VtZW50c1tpXTsoMCx0LnNlbmRFdmVudCkodGhpcyxlLHIpfSxvZmY6ZnVuY3Rpb24oZSxu
LHIpe3JldHVybigwLHQucmVtb3ZlTGlzdGVuZXIpKHRoaXMsZSxuLHIpLHRoaXN9LGhhczpmdW5j
dGlvbihlKXtyZXR1cm4oMCx0Lmhhc0xpc3RlbmVycykodGhpcyxlKX19KX0pLGUoImVtYmVyLXJ1
bnRpbWUvbWl4aW5zL2ZyZWV6YWJsZSIsWyJleHBvcnRzIiwiZW1iZXItbWV0YWwiLCJlbWJlci1k
ZWJ1ZyJdLGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCIKLWUuRlJPWkVOX0VSUk9SPWUuRnJl
ZXphYmxlPXZvaWQgMCxlLkZyZWV6YWJsZT10Lk1peGluLmNyZWF0ZSh7aW5pdDpmdW5jdGlvbigp
e3RoaXMuX3N1cGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0saXNGcm96ZW46ITEsZnJlZXplOmZ1
bmN0aW9uKCl7cmV0dXJuKDAsdC5nZXQpKHRoaXMsImlzRnJvemVuIik/dGhpczooKDAsdC5zZXQp
KHRoaXMsImlzRnJvemVuIiwhMCksdGhpcyl9fSksZS5GUk9aRU5fRVJST1I9IkZyb3plbiBvYmpl
Y3QgY2Fubm90IGJlIG1vZGlmaWVkLiJ9KSxlKCJlbWJlci1ydW50aW1lL21peGlucy9tdXRhYmxl
X2FycmF5IixbImV4cG9ydHMiLCJlbWJlci1tZXRhbCIsImVtYmVyLXJ1bnRpbWUvbWl4aW5zL2Fy
cmF5IiwiZW1iZXItcnVudGltZS9taXhpbnMvbXV0YWJsZV9lbnVtZXJhYmxlIiwiZW1iZXItcnVu
dGltZS9taXhpbnMvZW51bWVyYWJsZSIsImVtYmVyLWRlYnVnIl0sZnVuY3Rpb24oZSx0LG4scixp
LG8peyJ1c2Ugc3RyaWN0IgotZnVuY3Rpb24gcyhlLG4scil7aWYoIm51bWJlciI9PXR5cGVvZiBu
KXtpZihuPDB8fG4+PSgwLHQuZ2V0KShlLCJsZW5ndGgiKSl0aHJvdyBuZXcgby5FcnJvcihhKQot
dm9pZCAwPT09ciYmKHI9MSksZS5yZXBsYWNlKG4scix1KX1yZXR1cm4gZX1lLnJlbW92ZUF0PXMK
LXZhciBhPSJJbmRleCBvdXQgb2YgcmFuZ2UiLHU9W10KLWUuZGVmYXVsdD10Lk1peGluLmNyZWF0
ZShuLmRlZmF1bHQsci5kZWZhdWx0LHtyZXBsYWNlOm51bGwsY2xlYXI6ZnVuY3Rpb24oKXt2YXIg
ZT0oMCx0LmdldCkodGhpcywibGVuZ3RoIikKLXJldHVybiAwPT09ZT90aGlzOih0aGlzLnJlcGxh
Y2UoMCxlLHUpLHRoaXMpfSxpbnNlcnRBdDpmdW5jdGlvbihlLG4pe2lmKGU+KDAsdC5nZXQpKHRo
aXMsImxlbmd0aCIpKXRocm93IG5ldyBvLkVycm9yKGEpCi1yZXR1cm4gdGhpcy5yZXBsYWNlKGUs
MCxbbl0pLHRoaXN9LHJlbW92ZUF0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHModGhpcyxlLHQpfSxw
dXNoT2JqZWN0OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmluc2VydEF0KCgwLHQuZ2V0KSh0aGlz
LCJsZW5ndGgiKSxlKSxlfSxwdXNoT2JqZWN0czpmdW5jdGlvbihlKXtpZighaS5kZWZhdWx0LmRl
dGVjdChlKSYmIUFycmF5LmlzQXJyYXkoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiTXVzdCBwYXNz
IEVtYmVyLkVudW1lcmFibGUgdG8gRW1iZXIuTXV0YWJsZUFycmF5I3B1c2hPYmplY3RzIikKLXJl
dHVybiB0aGlzLnJlcGxhY2UoKDAsdC5nZXQpKHRoaXMsImxlbmd0aCIpLDAsZSksdGhpc30scG9w
T2JqZWN0OmZ1bmN0aW9uKCl7dmFyIGU9KDAsdC5nZXQpKHRoaXMsImxlbmd0aCIpCi1pZigwPT09
ZSlyZXR1cm4gbnVsbAotdmFyIHI9KDAsbi5vYmplY3RBdCkodGhpcyxlLTEpCi1yZXR1cm4gdGhp
cy5yZW1vdmVBdChlLTEsMSkscn0sc2hpZnRPYmplY3Q6ZnVuY3Rpb24oKXtpZigwPT09KDAsdC5n
ZXQpKHRoaXMsImxlbmd0aCIpKXJldHVybiBudWxsCi12YXIgZT0oMCxuLm9iamVjdEF0KSh0aGlz
LDApCi1yZXR1cm4gdGhpcy5yZW1vdmVBdCgwKSxlfSx1bnNoaWZ0T2JqZWN0OmZ1bmN0aW9uKGUp
e3JldHVybiB0aGlzLmluc2VydEF0KDAsZSksZX0sdW5zaGlmdE9iamVjdHM6ZnVuY3Rpb24oZSl7
cmV0dXJuIHRoaXMucmVwbGFjZSgwLDAsZSksdGhpc30scmV2ZXJzZU9iamVjdHM6ZnVuY3Rpb24o
KXt2YXIgZT0oMCx0LmdldCkodGhpcywibGVuZ3RoIikKLWlmKDA9PT1lKXJldHVybiB0aGlzCi12
YXIgbj10aGlzLnRvQXJyYXkoKS5yZXZlcnNlKCkKLXJldHVybiB0aGlzLnJlcGxhY2UoMCxlLG4p
LHRoaXN9LHNldE9iamVjdHM6ZnVuY3Rpb24oZSl7aWYoMD09PWUubGVuZ3RoKXJldHVybiB0aGlz
LmNsZWFyKCkKLXZhciBuPSgwLHQuZ2V0KSh0aGlzLCJsZW5ndGgiKQotcmV0dXJuIHRoaXMucmVw
bGFjZSgwLG4sZSksdGhpc30scmVtb3ZlT2JqZWN0OmZ1bmN0aW9uKGUpe2Zvcih2YXIgcj0oMCx0
LmdldCkodGhpcywibGVuZ3RoIil8fDA7LS1yPj0wOykoMCxuLm9iamVjdEF0KSh0aGlzLHIpPT09
ZSYmdGhpcy5yZW1vdmVBdChyKQotcmV0dXJuIHRoaXN9LGFkZE9iamVjdDpmdW5jdGlvbihlKXty
ZXR1cm4gdGhpcy5pbmNsdWRlcyhlKXx8dGhpcy5wdXNoT2JqZWN0KGUpLHRoaXN9fSl9KSxlKCJl
bWJlci1ydW50aW1lL21peGlucy9tdXRhYmxlX2VudW1lcmFibGUiLFsiZXhwb3J0cyIsImVtYmVy
LXJ1bnRpbWUvbWl4aW5zL2VudW1lcmFibGUiLCJlbWJlci1tZXRhbCJdLGZ1bmN0aW9uKGUsdCxu
KXsidXNlIHN0cmljdCIKLWUuZGVmYXVsdD1uLk1peGluLmNyZWF0ZSh0LmRlZmF1bHQse2FkZE9i
amVjdDpudWxsLGFkZE9iamVjdHM6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcwotcmV0dXJuKDAsbi5i
ZWdpblByb3BlcnR5Q2hhbmdlcykodGhpcyksZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiB0
LmFkZE9iamVjdChlKX0pLCgwLG4uZW5kUHJvcGVydHlDaGFuZ2VzKSh0aGlzKSx0aGlzfSxyZW1v
dmVPYmplY3Q6bnVsbCxyZW1vdmVPYmplY3RzOmZ1bmN0aW9uKGUpe3ZhciB0Ci1mb3IoKDAsbi5i
ZWdpblByb3BlcnR5Q2hhbmdlcykodGhpcyksdD1lLmxlbmd0aC0xO3Q+PTA7dC0tKXRoaXMucmVt
b3ZlT2JqZWN0KGVbdF0pCi1yZXR1cm4oMCxuLmVuZFByb3BlcnR5Q2hhbmdlcykodGhpcyksdGhp
c319KX0pLGUoImVtYmVyLXJ1bnRpbWUvbWl4aW5zL29ic2VydmFibGUiLFsiZXhwb3J0cyIsImVt
YmVyLW1ldGFsIiwiZW1iZXItZGVidWciXSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiCi1l
LmRlZmF1bHQ9dC5NaXhpbi5jcmVhdGUoe2dldDpmdW5jdGlvbihlKXtyZXR1cm4oMCx0LmdldCko
dGhpcyxlKX0sZ2V0UHJvcGVydGllczpmdW5jdGlvbigpe3ZhciBlLG4scgotZm9yKGU9YXJndW1l
bnRzLmxlbmd0aCxuPUFycmF5KGUpLHI9MDtyPGU7cisrKW5bcl09YXJndW1lbnRzW3JdCi1yZXR1
cm4gdC5nZXRQcm9wZXJ0aWVzLmFwcGx5KHZvaWQgMCxbdGhpc10uY29uY2F0KG4pKX0sc2V0OmZ1
bmN0aW9uKGUsbil7cmV0dXJuKDAsdC5zZXQpKHRoaXMsZSxuKX0sc2V0UHJvcGVydGllczpmdW5j
dGlvbihlKXtyZXR1cm4oMCx0LnNldFByb3BlcnRpZXMpKHRoaXMsZSl9LGJlZ2luUHJvcGVydHlD
aGFuZ2VzOmZ1bmN0aW9uKCl7cmV0dXJuKDAsdC5iZWdpblByb3BlcnR5Q2hhbmdlcykoKSx0aGlz
fSxlbmRQcm9wZXJ0eUNoYW5nZXM6ZnVuY3Rpb24oKXtyZXR1cm4oMCx0LmVuZFByb3BlcnR5Q2hh
bmdlcykoKSx0aGlzfSxwcm9wZXJ0eVdpbGxDaGFuZ2U6ZnVuY3Rpb24oZSl7cmV0dXJuKDAsdC5w
cm9wZXJ0eVdpbGxDaGFuZ2UpKHRoaXMsZSksdGhpc30scHJvcGVydHlEaWRDaGFuZ2U6ZnVuY3Rp
b24oZSl7cmV0dXJuKDAsdC5wcm9wZXJ0eURpZENoYW5nZSkodGhpcyxlKSx0aGlzfSxub3RpZnlQ
cm9wZXJ0eUNoYW5nZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wcm9wZXJ0eVdpbGxDaGFuZ2Uo
ZSksdGhpcy5wcm9wZXJ0eURpZENoYW5nZShlKSx0aGlzfSxhZGRPYnNlcnZlcjpmdW5jdGlvbihl
LG4scil7KDAsdC5hZGRPYnNlcnZlcikodGhpcyxlLG4scil9LHJlbW92ZU9ic2VydmVyOmZ1bmN0
aW9uKGUsbixyKXsoMCx0LnJlbW92ZU9ic2VydmVyKSh0aGlzLGUsbixyKX0saGFzT2JzZXJ2ZXJG
b3I6ZnVuY3Rpb24oZSl7cmV0dXJuKDAsdC5oYXNMaXN0ZW5lcnMpKHRoaXMsZSsiOmNoYW5nZSIp
fSxnZXRXaXRoRGVmYXVsdDpmdW5jdGlvbihlLG4pe3JldHVybigwLHQuZ2V0V2l0aERlZmF1bHQp
KHRoaXMsZSxuKX0saW5jcmVtZW50UHJvcGVydHk6ZnVuY3Rpb24oZSxuKXtyZXR1cm4oMCx0Lmlz
Tm9uZSkobikmJihuPTEpLCgwLHQuc2V0KSh0aGlzLGUsKHBhcnNlRmxvYXQoKDAsdC5nZXQpKHRo
aXMsZSkpfHwwKStuKX0sZGVjcmVtZW50UHJvcGVydHk6ZnVuY3Rpb24oZSxuKXtyZXR1cm4oMCx0
LmlzTm9uZSkobikmJihuPTEpLCgwLHQuc2V0KSh0aGlzLGUsKCgwLHQuZ2V0KSh0aGlzLGUpfHww
KS1uKX0sdG9nZ2xlUHJvcGVydHk6ZnVuY3Rpb24oZSl7cmV0dXJuKDAsdC5zZXQpKHRoaXMsZSwh
KDAsdC5nZXQpKHRoaXMsZSkpfSxjYWNoZUZvcjpmdW5jdGlvbihlKXtyZXR1cm4oMCx0LmNhY2hl
Rm9yKSh0aGlzLGUpfSxvYnNlcnZlcnNGb3JLZXk6ZnVuY3Rpb24oZSl7cmV0dXJuKDAsdC5vYnNl
cnZlcnNGb3IpKHRoaXMsZSl9fSl9KSxlKCJlbWJlci1ydW50aW1lL21peGlucy9wcm9taXNlX3By
b3h5IixbImV4cG9ydHMiLCJlbWJlci1tZXRhbCIsImVtYmVyLWRlYnVnIiwiZW1iZXItcnVudGlt
ZS9jb21wdXRlZC9jb21wdXRlZF9tYWNyb3MiXSxmdW5jdGlvbihlLHQsbixyKXsidXNlIHN0cmlj
dCIKLWZ1bmN0aW9uIGkoZSxuKXtyZXR1cm4oMCx0LnNldFByb3BlcnRpZXMpKGUse2lzRnVsZmls
bGVkOiExLGlzUmVqZWN0ZWQ6ITF9KSxuLnRoZW4oZnVuY3Rpb24obil7cmV0dXJuIGUuaXNEZXN0
cm95ZWR8fGUuaXNEZXN0cm95aW5nfHwoMCx0LnNldFByb3BlcnRpZXMpKGUse2NvbnRlbnQ6bixp
c0Z1bGZpbGxlZDohMH0pLG59LGZ1bmN0aW9uKG4pe3Rocm93IGUuaXNEZXN0cm95ZWR8fGUuaXNE
ZXN0cm95aW5nfHwoMCx0LnNldFByb3BlcnRpZXMpKGUse3JlYXNvbjpuLGlzUmVqZWN0ZWQ6ITB9
KSxufSwiRW1iZXI6IFByb21pc2VQcm94eSIpfWZ1bmN0aW9uIG8oZSl7cmV0dXJuIGZ1bmN0aW9u
KCl7dmFyIG49KDAsdC5nZXQpKHRoaXMsInByb21pc2UiKQotcmV0dXJuIG5bZV0uYXBwbHkobixh
cmd1bWVudHMpfX1lLmRlZmF1bHQ9dC5NaXhpbi5jcmVhdGUoe3JlYXNvbjpudWxsLGlzUGVuZGlu
ZzooMCxyLm5vdCkoImlzU2V0dGxlZCIpLnJlYWRPbmx5KCksaXNTZXR0bGVkOigwLHIub3IpKCJp
c1JlamVjdGVkIiwiaXNGdWxmaWxsZWQiKS5yZWFkT25seSgpLGlzUmVqZWN0ZWQ6ITEsaXNGdWxm
aWxsZWQ6ITEscHJvbWlzZTooMCx0LmNvbXB1dGVkKSh7Z2V0OmZ1bmN0aW9uKCl7dGhyb3cgbmV3
IG4uRXJyb3IoIlByb21pc2VQcm94eSdzIHByb21pc2UgbXVzdCBiZSBzZXQiKX0sc2V0OmZ1bmN0
aW9uKGUsdCl7cmV0dXJuIGkodGhpcyx0KX19KSx0aGVuOm8oInRoZW4iKSxjYXRjaDpvKCJjYXRj
aCIpLGZpbmFsbHk6bygiZmluYWxseSIpfSl9KSxlKCJlbWJlci1ydW50aW1lL21peGlucy9yZWdp
c3RyeV9wcm94eSIsWyJleHBvcnRzIiwiZW1iZXItbWV0YWwiLCJlbWJlci1kZWJ1ZyJdLGZ1bmN0
aW9uKGUsdCxuKXsidXNlIHN0cmljdCIKLWZ1bmN0aW9uIHIoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7
dmFyIHQKLXJldHVybih0PXRoaXMuX19yZWdpc3RyeV9fKVtlXS5hcHBseSh0LGFyZ3VtZW50cyl9
fWZ1bmN0aW9uIGkoZSx0LG4scil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGVbcl0uYXBwbHko
ZSxhcmd1bWVudHMpfX1lLmJ1aWxkRmFrZVJlZ2lzdHJ5V2l0aERlcHJlY2F0aW9ucz1mdW5jdGlv
bihlLHQpe3ZhciBuPXt9LHI9e3Jlc29sdmU6InJlc29sdmVSZWdpc3RyYXRpb24iLHJlZ2lzdGVy
OiJyZWdpc3RlciIsdW5yZWdpc3RlcjoidW5yZWdpc3RlciIsaGFzOiJoYXNSZWdpc3RyYXRpb24i
LG9wdGlvbjoicmVnaXN0ZXJPcHRpb24iLG9wdGlvbnM6InJlZ2lzdGVyT3B0aW9ucyIsZ2V0T3B0
aW9uczoicmVnaXN0ZXJlZE9wdGlvbnMiLG9wdGlvbnNGb3JUeXBlOiJyZWdpc3Rlck9wdGlvbnNG
b3JUeXBlIixnZXRPcHRpb25zRm9yVHlwZToicmVnaXN0ZXJlZE9wdGlvbnNGb3JUeXBlIixpbmpl
Y3Rpb246ImluamVjdCJ9Ci1mb3IodmFyIG8gaW4gciluW29dPWkoZSx0LG8scltvXSkKLXJldHVy
biBufSxlLmRlZmF1bHQ9dC5NaXhpbi5jcmVhdGUoe19fcmVnaXN0cnlfXzpudWxsLHJlc29sdmVS
ZWdpc3RyYXRpb246cigicmVzb2x2ZSIpLHJlZ2lzdGVyOnIoInJlZ2lzdGVyIiksdW5yZWdpc3Rl
cjpyKCJ1bnJlZ2lzdGVyIiksaGFzUmVnaXN0cmF0aW9uOnIoImhhcyIpLHJlZ2lzdGVyT3B0aW9u
OnIoIm9wdGlvbiIpLHJlZ2lzdGVyZWRPcHRpb246cigiZ2V0T3B0aW9uIikscmVnaXN0ZXJPcHRp
b25zOnIoIm9wdGlvbnMiKSxyZWdpc3RlcmVkT3B0aW9uczpyKCJnZXRPcHRpb25zIikscmVnaXN0
ZXJPcHRpb25zRm9yVHlwZTpyKCJvcHRpb25zRm9yVHlwZSIpLHJlZ2lzdGVyZWRPcHRpb25zRm9y
VHlwZTpyKCJnZXRPcHRpb25zRm9yVHlwZSIpLGluamVjdDpyKCJpbmplY3Rpb24iKX0pfSksZSgi
ZW1iZXItcnVudGltZS9taXhpbnMvdGFyZ2V0X2FjdGlvbl9zdXBwb3J0IixbImV4cG9ydHMiLCJl
bWJlci1lbnZpcm9ubWVudCIsImVtYmVyLW1ldGFsIiwiZW1iZXItZGVidWciXSxmdW5jdGlvbihl
LHQsbixyKXsidXNlIHN0cmljdCIKLWZ1bmN0aW9uIGkoZSl7dmFyIHIsaT0oMCxuLmdldCkoZSwi
dGFyZ2V0T2JqZWN0IikKLXJldHVybiBpfHwoZS5fdGFyZ2V0T2JqZWN0P2UuX3RhcmdldE9iamVj
dDooaT0oMCxuLmdldCkoZSwidGFyZ2V0IiksaT8ic3RyaW5nIj09dHlwZW9mIGk/KHI9KDAsbi5n
ZXQpKGUsaSksdm9pZCAwPT09ciYmKHI9KDAsbi5nZXQpKHQuY29udGV4dC5sb29rdXAsaSkpLHIp
Omk6bnVsbCkpfWUuZGVmYXVsdD1uLk1peGluLmNyZWF0ZSh7dGFyZ2V0Om51bGwsYWN0aW9uOm51
bGwsYWN0aW9uQ29udGV4dDpudWxsLGFjdGlvbkNvbnRleHRPYmplY3Q6KDAsbi5jb21wdXRlZCko
ImFjdGlvbkNvbnRleHQiLGZ1bmN0aW9uKCl7dmFyIGUscj0oMCxuLmdldCkodGhpcywiYWN0aW9u
Q29udGV4dCIpCi1yZXR1cm4ic3RyaW5nIj09dHlwZW9mIHI/KGU9KDAsbi5nZXQpKHRoaXMsciks
dm9pZCAwPT09ZSYmKGU9KDAsbi5nZXQpKHQuY29udGV4dC5sb29rdXAscikpLGUpOnJ9KSx0cmln
Z2VyQWN0aW9uOmZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3ZhciBuPVtdCi1yZXR1cm4gdCYm
bi5wdXNoKHQpLG4uY29uY2F0KGUpfXZhciB0LHIsbyxzPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9p
ZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fSxhPXMuYWN0aW9ufHwoMCxuLmdldCko
dGhpcywiYWN0aW9uIiksdT1zLnRhcmdldAotdXx8KHU9aSh0aGlzKSkKLXZhciBsPXMuYWN0aW9u
Q29udGV4dAotcmV0dXJuIHZvaWQgMD09PWwmJihsPSgwLG4uZ2V0KSh0aGlzLCJhY3Rpb25Db250
ZXh0T2JqZWN0Iil8fHRoaXMpLCEoIXV8fCFhKSYmKHQ9dm9pZCAwLHQ9dS5zZW5kPyhyPXUpLnNl
bmQuYXBwbHkocixlKGwsYSkpOihvPXUpW2FdLmFwcGx5KG8sZShsKSksITEhPT10JiYodD0hMCks
dCl9fSl9KSxlKCJlbWJlci1ydW50aW1lL3N0cmluZ19yZWdpc3RyeSIsWyJleHBvcnRzIl0sZnVu
Y3Rpb24oZSl7InVzZSBzdHJpY3QiCi1lLnNldFN0cmluZ3M9ZnVuY3Rpb24oZSl7dD1lfSxlLmdl
dFN0cmluZ3M9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sZS5nZXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRb
ZV19Ci12YXIgdD17fX0pLGUoImVtYmVyLXJ1bnRpbWUvc3lzdGVtL2FwcGxpY2F0aW9uIixbImV4
cG9ydHMiLCJlbWJlci1ydW50aW1lL3N5c3RlbS9uYW1lc3BhY2UiXSxmdW5jdGlvbihlLHQpeyJ1
c2Ugc3RyaWN0IgotZS5kZWZhdWx0PXQuZGVmYXVsdC5leHRlbmQoKX0pLGUoImVtYmVyLXJ1bnRp
bWUvc3lzdGVtL2FycmF5X3Byb3h5IixbImV4cG9ydHMiLCJlbWJlci1tZXRhbCIsImVtYmVyLXJ1
bnRpbWUvdXRpbHMiLCJlbWJlci1ydW50aW1lL3N5c3RlbS9vYmplY3QiLCJlbWJlci1ydW50aW1l
L21peGlucy9tdXRhYmxlX2FycmF5IiwiZW1iZXItcnVudGltZS9taXhpbnMvZW51bWVyYWJsZSIs
ImVtYmVyLXJ1bnRpbWUvbWl4aW5zL2FycmF5IiwiZW1iZXItZGVidWciXSxmdW5jdGlvbihlLHQs
bixyLGksbyxzLGEpeyJ1c2Ugc3RyaWN0IgotZnVuY3Rpb24gdSgpe3JldHVybiB0aGlzfXZhciBs
PVtdCi1lLmRlZmF1bHQ9ci5kZWZhdWx0LmV4dGVuZChpLmRlZmF1bHQse2NvbnRlbnQ6bnVsbCxh
cnJhbmdlZENvbnRlbnQ6KDAsdC5hbGlhcykoImNvbnRlbnQiKSxvYmplY3RBdENvbnRlbnQ6ZnVu
Y3Rpb24oZSl7cmV0dXJuKDAscy5vYmplY3RBdCkoKDAsdC5nZXQpKHRoaXMsImFycmFuZ2VkQ29u
dGVudCIpLGUpfSxyZXBsYWNlQ29udGVudDpmdW5jdGlvbihlLG4scil7KDAsdC5nZXQpKHRoaXMs
ImNvbnRlbnQiKS5yZXBsYWNlKGUsbixyKX0sX2NvbnRlbnRXaWxsQ2hhbmdlOigwLHQuX2JlZm9y
ZU9ic2VydmVyKSgiY29udGVudCIsZnVuY3Rpb24oKXt0aGlzLl90ZWFyZG93bkNvbnRlbnQoKX0p
LF90ZWFyZG93bkNvbnRlbnQ6ZnVuY3Rpb24oKXt2YXIgZT0oMCx0LmdldCkodGhpcywiY29udGVu
dCIpCi1lJiYoMCxzLnJlbW92ZUFycmF5T2JzZXJ2ZXIpKGUsdGhpcyx7d2lsbENoYW5nZToiY29u
dGVudEFycmF5V2lsbENoYW5nZSIsZGlkQ2hhbmdlOiJjb250ZW50QXJyYXlEaWRDaGFuZ2UifSl9
LGNvbnRlbnRBcnJheVdpbGxDaGFuZ2U6dSxjb250ZW50QXJyYXlEaWRDaGFuZ2U6dSxfY29udGVu
dERpZENoYW5nZTooMCx0Lm9ic2VydmVyKSgiY29udGVudCIsZnVuY3Rpb24oKXsoMCx0LmdldCko
dGhpcywiY29udGVudCIpCi10aGlzLl9zZXR1cENvbnRlbnQoKX0pLF9zZXR1cENvbnRlbnQ6ZnVu
Y3Rpb24oKXt2YXIgZT0oMCx0LmdldCkodGhpcywiY29udGVudCIpCi1lJiYoMCxzLmFkZEFycmF5
T2JzZXJ2ZXIpKGUsdGhpcyx7d2lsbENoYW5nZToiY29udGVudEFycmF5V2lsbENoYW5nZSIsZGlk
Q2hhbmdlOiJjb250ZW50QXJyYXlEaWRDaGFuZ2UifSl9LF9hcnJhbmdlZENvbnRlbnRXaWxsQ2hh
bmdlOigwLHQuX2JlZm9yZU9ic2VydmVyKSgiYXJyYW5nZWRDb250ZW50IixmdW5jdGlvbigpe3Zh
ciBlPSgwLHQuZ2V0KSh0aGlzLCJhcnJhbmdlZENvbnRlbnQiKSxuPWU/KDAsdC5nZXQpKGUsImxl
bmd0aCIpOjAKLXRoaXMuYXJyYW5nZWRDb250ZW50QXJyYXlXaWxsQ2hhbmdlKHRoaXMsMCxuLHZv
aWQgMCksdGhpcy5hcnJhbmdlZENvbnRlbnRXaWxsQ2hhbmdlKHRoaXMpLHRoaXMuX3RlYXJkb3du
QXJyYW5nZWRDb250ZW50KGUpfSksX2FycmFuZ2VkQ29udGVudERpZENoYW5nZTooMCx0Lm9ic2Vy
dmVyKSgiYXJyYW5nZWRDb250ZW50IixmdW5jdGlvbigpe3ZhciBlPSgwLHQuZ2V0KSh0aGlzLCJh
cnJhbmdlZENvbnRlbnQiKSxuPWU/KDAsdC5nZXQpKGUsImxlbmd0aCIpOjAKLXRoaXMuX3NldHVw
QXJyYW5nZWRDb250ZW50KCksdGhpcy5hcnJhbmdlZENvbnRlbnREaWRDaGFuZ2UodGhpcyksdGhp
cy5hcnJhbmdlZENvbnRlbnRBcnJheURpZENoYW5nZSh0aGlzLDAsdm9pZCAwLG4pfSksX3NldHVw
QXJyYW5nZWRDb250ZW50OmZ1bmN0aW9uKCl7dmFyIGU9KDAsdC5nZXQpKHRoaXMsImFycmFuZ2Vk
Q29udGVudCIpCi1lJiYoMCxzLmFkZEFycmF5T2JzZXJ2ZXIpKGUsdGhpcyx7d2lsbENoYW5nZToi
YXJyYW5nZWRDb250ZW50QXJyYXlXaWxsQ2hhbmdlIixkaWRDaGFuZ2U6ImFycmFuZ2VkQ29udGVu
dEFycmF5RGlkQ2hhbmdlIn0pfSxfdGVhcmRvd25BcnJhbmdlZENvbnRlbnQ6ZnVuY3Rpb24oKXt2
YXIgZT0oMCx0LmdldCkodGhpcywiYXJyYW5nZWRDb250ZW50IikKLWUmJigwLHMucmVtb3ZlQXJy
YXlPYnNlcnZlcikoZSx0aGlzLHt3aWxsQ2hhbmdlOiJhcnJhbmdlZENvbnRlbnRBcnJheVdpbGxD
aGFuZ2UiLGRpZENoYW5nZToiYXJyYW5nZWRDb250ZW50QXJyYXlEaWRDaGFuZ2UifSl9LGFycmFu
Z2VkQ29udGVudFdpbGxDaGFuZ2U6dSxhcnJhbmdlZENvbnRlbnREaWRDaGFuZ2U6dSxvYmplY3RB
dDpmdW5jdGlvbihlKXtyZXR1cm4oMCx0LmdldCkodGhpcywiY29udGVudCIpJiZ0aGlzLm9iamVj
dEF0Q29udGVudChlKX0sbGVuZ3RoOigwLHQuY29tcHV0ZWQpKGZ1bmN0aW9uKCl7dmFyIGU9KDAs
dC5nZXQpKHRoaXMsImFycmFuZ2VkQ29udGVudCIpCi1yZXR1cm4gZT8oMCx0LmdldCkoZSwibGVu
Z3RoIik6MH0pLF9yZXBsYWNlOmZ1bmN0aW9uKGUsbixyKXt2YXIgaT0oMCx0LmdldCkodGhpcywi
Y29udGVudCIpCi1yZXR1cm4gaSYmdGhpcy5yZXBsYWNlQ29udGVudChlLG4sciksdGhpc30scmVw
bGFjZTpmdW5jdGlvbigpe2lmKCgwLHQuZ2V0KSh0aGlzLCJhcnJhbmdlZENvbnRlbnQiKSE9PSgw
LHQuZ2V0KSh0aGlzLCJjb250ZW50IikpdGhyb3cgbmV3IGEuRXJyb3IoIlVzaW5nIHJlcGxhY2Ug
b24gYW4gYXJyYW5nZWQgQXJyYXlQcm94eSBpcyBub3QgYWxsb3dlZC4iKQotdGhpcy5fcmVwbGFj
ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LF9pbnNlcnRBdDpmdW5jdGlvbihlLG4pe2lmKGU+KDAs
dC5nZXQpKHRoaXMsImNvbnRlbnQubGVuZ3RoIikpdGhyb3cgbmV3IGEuRXJyb3IoIkluZGV4IG91
dCBvZiByYW5nZSIpCi1yZXR1cm4gdGhpcy5fcmVwbGFjZShlLDAsW25dKSx0aGlzfSxpbnNlcnRB
dDpmdW5jdGlvbihlLG4pe2lmKCgwLHQuZ2V0KSh0aGlzLCJhcnJhbmdlZENvbnRlbnQiKT09PSgw
LHQuZ2V0KSh0aGlzLCJjb250ZW50IikpcmV0dXJuIHRoaXMuX2luc2VydEF0KGUsbikKLXRocm93
IG5ldyBhLkVycm9yKCJVc2luZyBpbnNlcnRBdCBvbiBhbiBhcnJhbmdlZCBBcnJheVByb3h5IGlz
IG5vdCBhbGxvd2VkLiIpfSxyZW1vdmVBdDpmdW5jdGlvbihlLG4pe3ZhciByLGksbyx1LGMKLWlm
KCJudW1iZXIiPT10eXBlb2YgZSl7aWYocj0oMCx0LmdldCkodGhpcywiY29udGVudCIpLGk9KDAs
dC5nZXQpKHRoaXMsImFycmFuZ2VkQ29udGVudCIpLG89W10sZTwwfHxlPj0oMCx0LmdldCkodGhp
cywibGVuZ3RoIikpdGhyb3cgbmV3IGEuRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpCi1mb3Io
dm9pZCAwPT09biYmKG49MSksdT1lO3U8ZStuO3UrKylvLnB1c2goci5pbmRleE9mKCgwLHMub2Jq
ZWN0QXQpKGksdSkpKQotZm9yKG8uc29ydChmdW5jdGlvbihlLHQpe3JldHVybiB0LWV9KSwoMCx0
LmJlZ2luUHJvcGVydHlDaGFuZ2VzKSgpLGM9MDtjPG8ubGVuZ3RoO2MrKyl0aGlzLl9yZXBsYWNl
KG9bY10sMSxsKTsoMCx0LmVuZFByb3BlcnR5Q2hhbmdlcykoKX1yZXR1cm4gdGhpc30scHVzaE9i
amVjdDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5faW5zZXJ0QXQoKDAsdC5nZXQpKHRoaXMsImNv
bnRlbnQubGVuZ3RoIiksZSksZX0scHVzaE9iamVjdHM6ZnVuY3Rpb24oZSl7aWYoIW8uZGVmYXVs
dC5kZXRlY3QoZSkmJiEoMCxuLmlzQXJyYXkpKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIk11c3Qg
cGFzcyBFbWJlci5FbnVtZXJhYmxlIHRvIEVtYmVyLk11dGFibGVBcnJheSNwdXNoT2JqZWN0cyIp
Ci1yZXR1cm4gdGhpcy5fcmVwbGFjZSgoMCx0LmdldCkodGhpcywibGVuZ3RoIiksMCxlKSx0aGlz
fSxzZXRPYmplY3RzOmZ1bmN0aW9uKGUpe2lmKDA9PT1lLmxlbmd0aClyZXR1cm4gdGhpcy5jbGVh
cigpCi12YXIgbj0oMCx0LmdldCkodGhpcywibGVuZ3RoIikKLXJldHVybiB0aGlzLl9yZXBsYWNl
KDAsbixlKSx0aGlzfSx1bnNoaWZ0T2JqZWN0OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9pbnNl
cnRBdCgwLGUpLGV9LHVuc2hpZnRPYmplY3RzOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9yZXBs
YWNlKDAsMCxlKSx0aGlzfSxzbGljZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMudG9BcnJheSgpCi1y
ZXR1cm4gZS5zbGljZS5hcHBseShlLGFyZ3VtZW50cyl9LGFycmFuZ2VkQ29udGVudEFycmF5V2ls
bENoYW5nZTpmdW5jdGlvbihlLHQsbixyKXt0aGlzLmFycmF5Q29udGVudFdpbGxDaGFuZ2UodCxu
LHIpfSxhcnJhbmdlZENvbnRlbnRBcnJheURpZENoYW5nZTpmdW5jdGlvbihlLHQsbixyKXt0aGlz
LmFycmF5Q29udGVudERpZENoYW5nZSh0LG4scil9LGluaXQ6ZnVuY3Rpb24oKXt0aGlzLl9zdXBl
ci5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5fc2V0dXBDb250ZW50KCksdGhpcy5fc2V0dXBB
cnJhbmdlZENvbnRlbnQoKX0sd2lsbERlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLl90ZWFyZG93bkFy
cmFuZ2VkQ29udGVudCgpLHRoaXMuX3RlYXJkb3duQ29udGVudCgpfX0pfSksZSgiZW1iZXItcnVu
dGltZS9zeXN0ZW0vY29yZV9vYmplY3QiLFsiZXhwb3J0cyIsImVtYmVyLWJhYmVsIiwiZW1iZXIt
dXRpbHMiLCJlbWJlci1tZXRhbCIsImVtYmVyLXJ1bnRpbWUvbWl4aW5zL2FjdGlvbl9oYW5kbGVy
IiwiZW1iZXItcnVudGltZS9pbmplY3QiLCJlbWJlci1kZWJ1ZyJdLGZ1bmN0aW9uKGUsdCxuLHIs
aSxvLHMpeyJ1c2Ugc3RyaWN0IgotZnVuY3Rpb24gYSgpe3ZhciBlPSExLHQ9dm9pZCAwLGk9dm9p
ZCAwLG89ZnVuY3Rpb24oKXtmdW5jdGlvbiBvKCl7ZXx8by5wcm90bygpLGFyZ3VtZW50cy5sZW5n
dGg+MCYmKHQ9W2FyZ3VtZW50c1swXV0pLHRoaXMuX19kZWZpbmVOb25FbnVtZXJhYmxlKG4uR1VJ
RF9LRVlfUFJPUEVSVFkpCi12YXIgYSx1LGwsYyxwLGgsbSxnLHksdixiLF8sdyxFPSgwLHIubWV0
YSkodGhpcykseD1FLnByb3RvCi1pZihFLnByb3RvPXRoaXMsaSYmKEUuZmFjdG9yeT1pLGk9bnVs
bCksdClmb3IoYT10LHQ9bnVsbCx1PXRoaXMuY29uY2F0ZW5hdGVkUHJvcGVydGllcyxsPXRoaXMu
bWVyZ2VkUHJvcGVydGllcyxjPTA7YzxhLmxlbmd0aDtjKyspe2lmKCJvYmplY3QiIT10eXBlb2Yo
cD1hW2NdKSYmdm9pZCAwIT09cCl0aHJvdyBuZXcgcy5FcnJvcigiRW1iZXIuT2JqZWN0LmNyZWF0
ZSBvbmx5IGFjY2VwdHMgb2JqZWN0cy4iKQotaWYocClmb3IoaD1PYmplY3Qua2V5cyhwKSxtPTA7
bTxoLmxlbmd0aDttKyspZz1oW21dLHk9cFtnXSwoMCxyLmRldGVjdEJpbmRpbmcpKGcpJiZFLndy
aXRlQmluZGluZ3MoZyx5KSx2PXRoaXNbZ10sYj1udWxsIT09diYmIm9iamVjdCI9PXR5cGVvZiB2
JiZ2LmlzRGVzY3JpcHRvcj92OnZvaWQgMCx1JiZ1Lmxlbmd0aD4wJiZ1LmluZGV4T2YoZyk+PTAm
JihfPXRoaXNbZ10seT1fPyJmdW5jdGlvbiI9PXR5cGVvZiBfLmNvbmNhdD9fLmNvbmNhdCh5KToo
MCxuLm1ha2VBcnJheSkoXykuY29uY2F0KHkpOigwLG4ubWFrZUFycmF5KSh5KSksbCYmbC5sZW5n
dGgmJmwuaW5kZXhPZihnKT49MCYmKHc9dGhpc1tnXSx5PSgwLG4uYXNzaWduKSh7fSx3LHkpKSxi
P2Iuc2V0KHRoaXMsZyx5KToiZnVuY3Rpb24iIT10eXBlb2YgdGhpcy5zZXRVbmtub3duUHJvcGVy
dHl8fGcgaW4gdGhpcz90aGlzW2ddPXk6dGhpcy5zZXRVbmtub3duUHJvcGVydHkoZyx5KX1mKHRo
aXMsRSksdGhpcy5pbml0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzW2RdKCksRS5wcm90bz14
LCgwLHIuZmluaXNoQ2hhaW5zKShFKSwoMCxyLnNlbmRFdmVudCkodGhpcywiaW5pdCIsdm9pZCAw
LHZvaWQgMCx2b2lkIDAsRSl9cmV0dXJuIG8ud2lsbFJlb3Blbj1mdW5jdGlvbigpe2UmJihvLlBy
b3RvdHlwZU1peGluPXIuTWl4aW4uY3JlYXRlKG8uUHJvdG90eXBlTWl4aW4pKSxlPSExfSxvLl9p
bml0UHJvcGVydGllcz1mdW5jdGlvbihlKXt0PWV9LG8uX2luaXRGYWN0b3J5PWZ1bmN0aW9uKGUp
e2k9ZX0sby5wcm90bz1mdW5jdGlvbigpe3ZhciB0PW8uc3VwZXJjbGFzcwotcmV0dXJuIHQmJnQu
cHJvdG8oKSxlfHwoZT0hMCxvLlByb3RvdHlwZU1peGluLmFwcGx5UGFydGlhbChvLnByb3RvdHlw
ZSkpLHRoaXMucHJvdG90eXBlfSxvfSgpCi1yZXR1cm4gby50b1N0cmluZz1yLk1peGluLnByb3Rv
dHlwZS50b1N0cmluZyxvfWUuUE9TVF9JTklUPXZvaWQgMAotdmFyIHUsbCxjPSgoMCx0LnRhZ2dl
ZFRlbXBsYXRlTGl0ZXJhbExvb3NlKShbIi4iXSxbIi4iXSksci5ydW4uc2NoZWR1bGUpLHA9ci5N
aXhpbi5fYXBwbHksZj1yLk1peGluLmZpbmlzaFBhcnRpYWwsaD1yLk1peGluLnByb3RvdHlwZS5y
ZW9wZW4sZD1lLlBPU1RfSU5JVD0oMCxuLnN5bWJvbCkoIlBPU1RfSU5JVCIpLG09YSgpCi1tLnRv
U3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIkVtYmVyLkNvcmVPYmplY3QifSxtLlByb3RvdHlwZU1p
eGluPXIuTWl4aW4uY3JlYXRlKCh1PXtyZW9wZW46ZnVuY3Rpb24oKXt2YXIgZSx0LG4KLWZvcihl
PWFyZ3VtZW50cy5sZW5ndGgsdD1BcnJheShlKSxuPTA7bjxlO24rKyl0W25dPWFyZ3VtZW50c1tu
XQotcmV0dXJuIHAodGhpcyx0LCEwKSx0aGlzfSxpbml0OmZ1bmN0aW9uKCl7fX0sdVtkXT1mdW5j
dGlvbigpe30sdS5fX2RlZmluZU5vbkVudW1lcmFibGU9ZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmlu
ZVByb3BlcnR5KHRoaXMsZS5uYW1lLGUuZGVzY3JpcHRvcil9LHUuY29uY2F0ZW5hdGVkUHJvcGVy
dGllcz1udWxsLHUubWVyZ2VkUHJvcGVydGllcz1udWxsLHUuaXNEZXN0cm95ZWQ9KDAsci5kZXNj
cmlwdG9yKSh7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsci5tZXRhKSh0aGlzKS5pc1NvdXJjZURl
c3Ryb3llZCgpfSxzZXQ6ZnVuY3Rpb24oZSl7Im9iamVjdCI9PXR5cGVvZiBlJiZudWxsIT09ZSYm
ZS5pc0Rlc2NyaXB0b3J9fSksdS5pc0Rlc3Ryb3lpbmc9KDAsci5kZXNjcmlwdG9yKSh7Z2V0OmZ1
bmN0aW9uKCl7cmV0dXJuKDAsci5tZXRhKSh0aGlzKS5pc1NvdXJjZURlc3Ryb3lpbmcoKX0sc2V0
OmZ1bmN0aW9uKGUpeyJvYmplY3QiPT10eXBlb2YgZSYmbnVsbCE9PWUmJmUuaXNEZXNjcmlwdG9y
fX0pLHUuZGVzdHJveT1mdW5jdGlvbigpe3ZhciBlPSgwLHIubWV0YSkodGhpcykKLWlmKCFlLmlz
U291cmNlRGVzdHJveWluZygpKXJldHVybiBlLnNldFNvdXJjZURlc3Ryb3lpbmcoKSxjKCJhY3Rp
b25zIix0aGlzLHRoaXMud2lsbERlc3Ryb3kpLGMoImRlc3Ryb3kiLHRoaXMsdGhpcy5fc2NoZWR1
bGVkRGVzdHJveSxlKSx0aGlzfSx1LndpbGxEZXN0cm95PWZ1bmN0aW9uKCl7fSx1Ll9zY2hlZHVs
ZWREZXN0cm95PWZ1bmN0aW9uKGUpe2UuaXNTb3VyY2VEZXN0cm95ZWQoKXx8KCgwLHIuZGVzdHJv
eSkodGhpcyksZS5zZXRTb3VyY2VEZXN0cm95ZWQoKSl9LHUuYmluZD1mdW5jdGlvbihlLHQpe3Jl
dHVybiB0IGluc3RhbmNlb2Ygci5CaW5kaW5nfHwodD1yLkJpbmRpbmcuZnJvbSh0KSksdC50byhl
KS5jb25uZWN0KHRoaXMpLHR9LHUudG9TdHJpbmc9ZnVuY3Rpb24oKXt2YXIgZT0iZnVuY3Rpb24i
PT10eXBlb2YgdGhpcy50b1N0cmluZ0V4dGVuc2lvbix0PWU/IjoiK3RoaXMudG9TdHJpbmdFeHRl
bnNpb24oKToiIgotcmV0dXJuIjwiKyh0aGlzW24uTkFNRV9LRVldfHwoMCxyLm1ldGEpKHRoaXMp
LmZhY3Rvcnl8fHRoaXMuY29uc3RydWN0b3IudG9TdHJpbmcoKSkrIjoiKygwLG4uZ3VpZEZvciko
dGhpcykrdCsiPiJ9LHUpKSxtLlByb3RvdHlwZU1peGluLm93bmVyQ29uc3RydWN0b3I9bSxtLl9f
c3VwZXJfXz1udWxsCi12YXIgZz0obD17Q2xhc3NNaXhpbjpyLlJFUVVJUkVELFByb3RvdHlwZU1p
eGluOnIuUkVRVUlSRUQsaXNDbGFzczohMCxpc01ldGhvZDohMX0sbFtuLk5BTUVfS0VZXT1udWxs
LGxbbi5HVUlEX0tFWV09bnVsbCxsLmV4dGVuZD1mdW5jdGlvbigpe3ZhciBlPWEoKSx0PXZvaWQg
MAotcmV0dXJuIGUuQ2xhc3NNaXhpbj1yLk1peGluLmNyZWF0ZSh0aGlzLkNsYXNzTWl4aW4pLGUu
UHJvdG90eXBlTWl4aW49ci5NaXhpbi5jcmVhdGUodGhpcy5Qcm90b3R5cGVNaXhpbiksZS5DbGFz
c01peGluLm93bmVyQ29uc3RydWN0b3I9ZSxlLlByb3RvdHlwZU1peGluLm93bmVyQ29uc3RydWN0
b3I9ZSxoLmFwcGx5KGUuUHJvdG90eXBlTWl4aW4sYXJndW1lbnRzKSxlLnN1cGVyY2xhc3M9dGhp
cyxlLl9fc3VwZXJfXz10aGlzLnByb3RvdHlwZSx0PWUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUo
dGhpcy5wcm90b3R5cGUpLHQuY29uc3RydWN0b3I9ZSwoMCxuLmdlbmVyYXRlR3VpZCkodCksKDAs
ci5tZXRhKSh0KS5wcm90bz10LGUuQ2xhc3NNaXhpbi5hcHBseShlKSxlfSxsLmNyZWF0ZT1mdW5j
dGlvbigpe3ZhciBlLHQsbixyPXRoaXMKLWZvcihlPWFyZ3VtZW50cy5sZW5ndGgsdD1BcnJheShl
KSxuPTA7bjxlO24rKyl0W25dPWFyZ3VtZW50c1tuXQotcmV0dXJuIHQubGVuZ3RoPjAmJnRoaXMu
X2luaXRQcm9wZXJ0aWVzKHQpLG5ldyByfSxsLnJlb3Blbj1mdW5jdGlvbigpe3JldHVybiB0aGlz
LndpbGxSZW9wZW4oKSxoLmFwcGx5KHRoaXMuUHJvdG90eXBlTWl4aW4sYXJndW1lbnRzKSx0aGlz
fSxsLnJlb3BlbkNsYXNzPWZ1bmN0aW9uKCl7cmV0dXJuIGguYXBwbHkodGhpcy5DbGFzc01peGlu
LGFyZ3VtZW50cykscCh0aGlzLGFyZ3VtZW50cywhMSksdGhpc30sbC5kZXRlY3Q9ZnVuY3Rpb24o
ZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpcmV0dXJuITEKLWZvcig7ZTspe2lmKGU9PT10aGlz
KXJldHVybiEwCi1lPWUuc3VwZXJjbGFzc31yZXR1cm4hMX0sbC5kZXRlY3RJbnN0YW5jZT1mdW5j
dGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIHRoaXN9LGwubWV0YUZvclByb3BlcnR5PWZ1bmN0
aW9uKGUpe3ZhciB0PXRoaXMucHJvdG8oKSxuPXRbZV0scj1udWxsIT09biYmIm9iamVjdCI9PXR5
cGVvZiBuJiZuLmlzRGVzY3JpcHRvcj9uOnZvaWQgMAotcmV0dXJuIHIuX21ldGF8fHt9fSxsLl9j
b21wdXRlZFByb3BlcnRpZXM9KDAsci5jb21wdXRlZCkoZnVuY3Rpb24oKXsoMCxyLl9oYXNDYWNo
ZWRDb21wdXRlZFByb3BlcnRpZXMpKCkKLXZhciBlPXRoaXMucHJvdG8oKSx0PXZvaWQgMCxuPVtd
Ci1mb3IodmFyIGkgaW4gZSkodD1lW2ldKSYmdC5pc0Rlc2NyaXB0b3ImJm4ucHVzaCh7bmFtZTpp
LG1ldGE6dC5fbWV0YX0pCi1yZXR1cm4gbn0pLnJlYWRPbmx5KCksbC5lYWNoQ29tcHV0ZWRQcm9w
ZXJ0eT1mdW5jdGlvbihlLHQpe3ZhciBuLGk9dm9pZCAwLG89e30scz0oMCxyLmdldCkodGhpcywi
X2NvbXB1dGVkUHJvcGVydGllcyIpCi1mb3Iobj0wO248cy5sZW5ndGg7bisrKWk9c1tuXSxlLmNh
bGwodHx8dGhpcyxpLm5hbWUsaS5tZXRhfHxvKX0sbCkKLWcuX2xhenlJbmplY3Rpb25zPWZ1bmN0
aW9uKCl7dmFyIGU9e30sdD10aGlzLnByb3RvKCksbj12b2lkIDAsaT12b2lkIDAKLWZvcihuIGlu
IHQpKGk9dFtuXSlpbnN0YW5jZW9mIHIuSW5qZWN0ZWRQcm9wZXJ0eSYmKGVbbl09aS50eXBlKyI6
IisoaS5uYW1lfHxuKSkKLXJldHVybiBlfQotdmFyIHk9ci5NaXhpbi5jcmVhdGUoZykKLXkub3du
ZXJDb25zdHJ1Y3Rvcj1tLG0uQ2xhc3NNaXhpbj15LHkuYXBwbHkobSksZS5kZWZhdWx0PW19KSxl
KCJlbWJlci1ydW50aW1lL3N5c3RlbS9sYXp5X2xvYWQiLFsiZXhwb3J0cyIsImVtYmVyLWVudmly
b25tZW50Il0sZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCIKLWUuX2xvYWRlZD12b2lkIDAsZS5v
bkxvYWQ9ZnVuY3Rpb24oZSx0KXt2YXIgaT1yW2VdCi1uW2VdPW5bZV18fFtdLG5bZV0ucHVzaCh0
KSxpJiZ0KGkpfSxlLnJ1bkxvYWRIb29rcz1mdW5jdGlvbihlLGkpe3JbZV09aQotdmFyIG8scz10
LmVudmlyb25tZW50LndpbmRvdwotcyYmImZ1bmN0aW9uIj09dHlwZW9mIEN1c3RvbUV2ZW50JiYo
bz1uZXcgQ3VzdG9tRXZlbnQoZSx7ZGV0YWlsOmksbmFtZTplfSkscy5kaXNwYXRjaEV2ZW50KG8p
KSxuW2VdJiZuW2VdLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIGUoaSl9KX0KLXZhciBuPXQu
RU5WLkVNQkVSX0xPQURfSE9PS1N8fHt9LHI9e30KLWUuX2xvYWRlZD1yfSksZSgiZW1iZXItcnVu
dGltZS9zeXN0ZW0vbmFtZXNwYWNlIixbImV4cG9ydHMiLCJlbWJlci11dGlscyIsImVtYmVyLW1l
dGFsIiwiZW1iZXItZW52aXJvbm1lbnQiLCJlbWJlci1ydW50aW1lL3N5c3RlbS9vYmplY3QiXSxm
dW5jdGlvbihlLHQsbixyLGkpeyJ1c2Ugc3RyaWN0IgotZnVuY3Rpb24gbyhlLG4scil7dmFyIGks
cz1lLmxlbmd0aAotbVtlLmpvaW4oIi4iKV09bgotZm9yKHZhciBhIGluIG4paWYoZy5jYWxsKG4s
YSkpaWYoaT1uW2FdLGVbc109YSxpJiZpLnRvU3RyaW5nPT09cCYmIWlbdC5OQU1FX0tFWV0paVt0
Lk5BTUVfS0VZXT1lLmpvaW4oIi4iKQotZWxzZSBpZihpJiZpLmlzTmFtZXNwYWNlKXtpZihyWygw
LHQuZ3VpZEZvcikoaSldKWNvbnRpbnVlCi1yWygwLHQuZ3VpZEZvcikoaSldPSEwLG8oZSxpLHIp
fWUubGVuZ3RoPXN9ZnVuY3Rpb24gcyhlKXtyZXR1cm4gZT49NjUmJmU8PTkwfWZ1bmN0aW9uIGEo
ZSx0KXt2YXIgbgotdHJ5e3JldHVybihuPWVbdF0pJiZuLmlzTmFtZXNwYWNlJiZufWNhdGNoKGUp
e319ZnVuY3Rpb24gdSgpe2lmKCFkLlBST0NFU1NFRCl7dmFyIGUsbixpLG89ci5jb250ZXh0Lmxv
b2t1cCx1PU9iamVjdC5rZXlzKG8pCi1mb3IoZT0wO2U8dS5sZW5ndGg7ZSsrKW49dVtlXSxzKG4u
Y2hhckNvZGVBdCgwKSkmJihpPWEobyxuKSkmJihpW3QuTkFNRV9LRVldPW4pfX1mdW5jdGlvbiBs
KGUpe3ZhciBuPWUuc3VwZXJjbGFzcwotaWYobilyZXR1cm4gblt0Lk5BTUVfS0VZXT9uW3QuTkFN
RV9LRVldOmwobil9ZnVuY3Rpb24gYyhlKXt2YXIgbj12b2lkIDAKLWlmKCFoKXtpZihmKCksbj1l
W3QuTkFNRV9LRVldKXJldHVybiBuCi1uPWwoZSksbj1uPyIoc3ViY2xhc3Mgb2YgIituKyIpIjpu
fXJldHVybiBufHwiKHVua25vd24gbWl4aW4pIn1mdW5jdGlvbiBwKCl7dmFyIGU9dGhpc1t0Lk5B
TUVfS0VZXQotcmV0dXJuIGV8fCh0aGlzW3QuTkFNRV9LRVldPWModGhpcykpfWZ1bmN0aW9uIGYo
KXt2YXIgZSx0LHIsaT0hZC5QUk9DRVNTRUQscz0oMCxuLmhhc1VucHJvY2Vzc2VkTWl4aW5zKSgp
Ci1pZihpJiYodSgpLGQuUFJPQ0VTU0VEPSEwKSxpfHxzKXtmb3IoZT1kLk5BTUVTUEFDRVMsdD12
b2lkIDAscj0wO3I8ZS5sZW5ndGg7cisrKXQ9ZVtyXSxvKFt0LnRvU3RyaW5nKCldLHQse30pOygw
LG4uY2xlYXJVbnByb2Nlc3NlZE1peGlucykoKX19ZS5pc1NlYXJjaERpc2FibGVkPWZ1bmN0aW9u
KCl7cmV0dXJuIGh9LGUuc2V0U2VhcmNoRGlzYWJsZWQ9ZnVuY3Rpb24oZSl7aD0hIWV9Ci12YXIg
aD0hMSxkPWkuZGVmYXVsdC5leHRlbmQoe2lzTmFtZXNwYWNlOiEwLGluaXQ6ZnVuY3Rpb24oKXtk
Lk5BTUVTUEFDRVMucHVzaCh0aGlzKSxkLlBST0NFU1NFRD0hMX0sdG9TdHJpbmc6ZnVuY3Rpb24o
KXt2YXIgZT0oMCxuLmdldCkodGhpcywibmFtZSIpfHwoMCxuLmdldCkodGhpcywibW9kdWxlUHJl
Zml4IikKLXJldHVybiBlfHwodSgpLHRoaXNbdC5OQU1FX0tFWV0pfSxuYW1lQ2xhc3NlczpmdW5j
dGlvbigpe28oW3RoaXMudG9TdHJpbmcoKV0sdGhpcyx7fSl9LGRlc3Ryb3k6ZnVuY3Rpb24oKXt2
YXIgZT1kLk5BTUVTUEFDRVMsdD10aGlzLnRvU3RyaW5nKCkKLXQmJihyLmNvbnRleHQubG9va3Vw
W3RdPXZvaWQgMCxkZWxldGUgZC5OQU1FU1BBQ0VTX0JZX0lEW3RdKSxlLnNwbGljZShlLmluZGV4
T2YodGhpcyksMSksdGhpcy5fc3VwZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0pCi1kLnJlb3Bl
bkNsYXNzKHtOQU1FU1BBQ0VTOltuLmRlZmF1bHRdLE5BTUVTUEFDRVNfQllfSUQ6e0VtYmVyOm4u
ZGVmYXVsdH0sUFJPQ0VTU0VEOiExLHByb2Nlc3NBbGw6ZixieU5hbWU6ZnVuY3Rpb24oZSl7cmV0
dXJuIGh8fGYoKSxtW2VdfX0pCi12YXIgbT1kLk5BTUVTUEFDRVNfQllfSUQsZz17fS5oYXNPd25Q
cm9wZXJ0eQotbi5NaXhpbi5wcm90b3R5cGUudG9TdHJpbmc9cCxlLmRlZmF1bHQ9ZH0pLGUoImVt
YmVyLXJ1bnRpbWUvc3lzdGVtL25hdGl2ZV9hcnJheSIsWyJleHBvcnRzIiwiZW1iZXItbWV0YWwi
LCJlbWJlci1lbnZpcm9ubWVudCIsImVtYmVyLXJ1bnRpbWUvbWl4aW5zL2FycmF5IiwiZW1iZXIt
cnVudGltZS9taXhpbnMvbXV0YWJsZV9hcnJheSIsImVtYmVyLXJ1bnRpbWUvbWl4aW5zL29ic2Vy
dmFibGUiLCJlbWJlci1ydW50aW1lL21peGlucy9jb3B5YWJsZSIsImVtYmVyLXJ1bnRpbWUvbWl4
aW5zL2ZyZWV6YWJsZSIsImVtYmVyLXJ1bnRpbWUvY29weSJdLGZ1bmN0aW9uKGUsdCxuLHIsaSxv
LHMsYSx1KXsidXNlIHN0cmljdCIKLWUuTmF0aXZlQXJyYXk9ZS5BPXZvaWQgMAotdmFyIGwsYz10
Lk1peGluLmNyZWF0ZShpLmRlZmF1bHQsby5kZWZhdWx0LHMuZGVmYXVsdCx7Z2V0OmZ1bmN0aW9u
KGUpe3JldHVybiJudW1iZXIiPT10eXBlb2YgZT90aGlzW2VdOnRoaXMuX3N1cGVyKGUpfSxvYmpl
Y3RBdDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpc1tlXX0scmVwbGFjZTpmdW5jdGlvbihlLG4saSl7
aWYodGhpcy5pc0Zyb3plbil0aHJvdyBhLkZST1pFTl9FUlJPUgotdmFyIG89aT8oMCx0LmdldCko
aSwibGVuZ3RoIik6MAotcmV0dXJuKDAsci5hcnJheUNvbnRlbnRXaWxsQ2hhbmdlKSh0aGlzLGUs
bixvKSwwPT09bz90aGlzLnNwbGljZShlLG4pOigwLHQucmVwbGFjZSkodGhpcyxlLG4saSksKDAs
ci5hcnJheUNvbnRlbnREaWRDaGFuZ2UpKHRoaXMsZSxuLG8pLHRoaXN9LHVua25vd25Qcm9wZXJ0
eTpmdW5jdGlvbihlLHQpe3ZhciBuPXZvaWQgMAotcmV0dXJuIHZvaWQgMCE9PXQmJnZvaWQgMD09
PW4mJihuPXRoaXNbZV09dCksbn0saW5kZXhPZjpBcnJheS5wcm90b3R5cGUuaW5kZXhPZixsYXN0
SW5kZXhPZjpBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YsY29weTpmdW5jdGlvbihlKXtyZXR1
cm4gZT90aGlzLm1hcChmdW5jdGlvbihlKXtyZXR1cm4oMCx1LmRlZmF1bHQpKGUsITApfSk6dGhp
cy5zbGljZSgpfX0pLHA9WyJsZW5ndGgiXQotYy5rZXlzKCkuZm9yRWFjaChmdW5jdGlvbihlKXtB
cnJheS5wcm90b3R5cGVbZV0mJnAucHVzaChlKX0pLGUuTmF0aXZlQXJyYXk9Yz0obD1jKS53aXRo
b3V0LmFwcGx5KGwscCkKLXZhciBmPXZvaWQgMAotbi5FTlYuRVhURU5EX1BST1RPVFlQRVMuQXJy
YXk/KGMuYXBwbHkoQXJyYXkucHJvdG90eXBlKSxlLkE9Zj1mdW5jdGlvbihlKXtyZXR1cm4gZXx8
W119KTplLkE9Zj1mdW5jdGlvbihlKXtyZXR1cm4gZXx8KGU9W10pLHIuZGVmYXVsdC5kZXRlY3Qo
ZSk/ZTpjLmFwcGx5KGUpfSx0LmRlZmF1bHQuQT1mLGUuQT1mLGUuTmF0aXZlQXJyYXk9YyxlLmRl
ZmF1bHQ9Y30pLGUoImVtYmVyLXJ1bnRpbWUvc3lzdGVtL29iamVjdCIsWyJleHBvcnRzIiwiZW1i
ZXItdXRpbHMiLCJlbWJlci1tZXRhbCIsImVtYmVyLXJ1bnRpbWUvc3lzdGVtL2NvcmVfb2JqZWN0
IiwiZW1iZXItcnVudGltZS9taXhpbnMvb2JzZXJ2YWJsZSIsImVtYmVyLWRlYnVnIl0sZnVuY3Rp
b24oZSx0LG4scixpKXsidXNlIHN0cmljdCIKLWUuRnJhbWV3b3JrT2JqZWN0PXZvaWQgMAotdmFy
IG8scz0oMCx0LnN5bWJvbCkoIk9WRVJSSURFX0NPTlRBSU5FUl9LRVkiKSxhPSgwLHQuc3ltYm9s
KSgiT1ZFUlJJREVfT1dORVIiKSx1PXIuZGVmYXVsdC5leHRlbmQoaS5kZWZhdWx0LChvPXtfZGVi
dWdDb250YWluZXJLZXk6KDAsbi5kZXNjcmlwdG9yKSh7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rp
b24oKXtpZih0aGlzW3NdKXJldHVybiB0aGlzW3NdCi12YXIgZT0oMCxuLm1ldGEpKHRoaXMpLHQ9
ZS5mYWN0b3J5Ci1yZXR1cm4gdCYmdC5mdWxsTmFtZX0sc2V0OmZ1bmN0aW9uKGUpe3RoaXNbc109
ZX19KX0sb1t0Lk9XTkVSXT0oMCxuLmRlc2NyaXB0b3IpKHtlbnVtZXJhYmxlOiExLGdldDpmdW5j
dGlvbigpe2lmKHRoaXNbYV0pcmV0dXJuIHRoaXNbYV0KLXZhciBlPSgwLG4ubWV0YSkodGhpcyks
dD1lLmZhY3RvcnkKLXJldHVybiB0JiZ0Lm93bmVyfSxzZXQ6ZnVuY3Rpb24oZSl7dGhpc1thXT1l
fX0pLG8pKQotdS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJFbWJlci5PYmplY3QifSxlLkZy
YW1ld29ya09iamVjdD11LGUuZGVmYXVsdD11fSksZSgiZW1iZXItcnVudGltZS9zeXN0ZW0vb2Jq
ZWN0X3Byb3h5IixbImV4cG9ydHMiLCJlbWJlci1ydW50aW1lL3N5c3RlbS9vYmplY3QiLCJlbWJl
ci1ydW50aW1lL21peGlucy8tcHJveHkiXSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiCi1l
LmRlZmF1bHQ9dC5kZWZhdWx0LmV4dGVuZChuLmRlZmF1bHQpfSksZSgiZW1iZXItcnVudGltZS9z
eXN0ZW0vc2VydmljZSIsWyJleHBvcnRzIiwiZW1iZXItcnVudGltZS9zeXN0ZW0vb2JqZWN0Iiwi
ZW1iZXItcnVudGltZS9pbmplY3QiXSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOygwLG4u
Y3JlYXRlSW5qZWN0aW9uSGVscGVyKSgic2VydmljZSIpCi12YXIgcj10LmRlZmF1bHQuZXh0ZW5k
KCkKLXIucmVvcGVuQ2xhc3Moe2lzU2VydmljZUZhY3Rvcnk6ITB9KSxlLmRlZmF1bHQ9cn0pLGUo
ImVtYmVyLXJ1bnRpbWUvc3lzdGVtL3N0cmluZyIsWyJleHBvcnRzIiwiZW1iZXItbWV0YWwiLCJl
bWJlci1kZWJ1ZyIsImVtYmVyLXV0aWxzIiwiZW1iZXItcnVudGltZS91dGlscyIsImVtYmVyLXJ1
bnRpbWUvc3RyaW5nX3JlZ2lzdHJ5Il0sZnVuY3Rpb24oZSx0LG4scixpLG8peyJ1c2Ugc3RyaWN0
IgotZnVuY3Rpb24gcyhlLHQpe3ZhciBuLG89dAotaWYoISgwLGkuaXNBcnJheSkobyl8fGFyZ3Vt
ZW50cy5sZW5ndGg+Milmb3Iobz1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aC0xKSxuPTE7bjxh
cmd1bWVudHMubGVuZ3RoO24rKylvW24tMV09YXJndW1lbnRzW25dCi12YXIgcz0wCi1yZXR1cm4g
ZS5yZXBsYWNlKC8lQChbMC05XSspPy9nLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ9dD9wYXJzZUlu
dCh0LDEwKS0xOnMrKyxlPW9bdF0sbnVsbD09PWU/IihudWxsKSI6dm9pZCAwPT09ZT8iIjooMCxy
Lmluc3BlY3QpKGUpfSl9ZnVuY3Rpb24gYSgpe3JldHVybiBzLmFwcGx5KHZvaWQgMCxhcmd1bWVu
dHMpfWZ1bmN0aW9uIHUoZSx0KXtyZXR1cm4oISgwLGkuaXNBcnJheSkodCl8fGFyZ3VtZW50cy5s
ZW5ndGg+MikmJih0PUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSksZT0o
MCxvLmdldCkoZSl8fGUscyhlLHQpfWZ1bmN0aW9uIGwoZSl7cmV0dXJuIGUuc3BsaXQoL1xzKy8p
fWZ1bmN0aW9uIGMoZSl7cmV0dXJuIE4uZ2V0KGUpfWZ1bmN0aW9uIHAoZSl7cmV0dXJuIHkuZ2V0
KGUpfWZ1bmN0aW9uIGYoZSl7cmV0dXJuIF8uZ2V0KGUpfWZ1bmN0aW9uIGgoZSl7cmV0dXJuIEMu
Z2V0KGUpfWZ1bmN0aW9uIGQoZSl7cmV0dXJuIFQuZ2V0KGUpfWZ1bmN0aW9uIG0oZSl7cmV0dXJu
IFIuZ2V0KGUpfWUuY2FwaXRhbGl6ZT1lLnVuZGVyc2NvcmU9ZS5jbGFzc2lmeT1lLmNhbWVsaXpl
PWUuZGFzaGVyaXplPWUuZGVjYW1lbGl6ZT1lLnc9ZS5sb2M9ZS5mbXQ9dm9pZCAwCi12YXIgZz0v
WyBfXS9nLHk9bmV3IHQuQ2FjaGUoMWUzLGZ1bmN0aW9uKGUpe3JldHVybiBjKGUpLnJlcGxhY2Uo
ZywiLSIpfSksdj0vKFwtfFxffFwufFxzKSsoLik/L2csYj0vKF58XC8pKFtBLVpdKS9nLF89bmV3
IHQuQ2FjaGUoMWUzLGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UodixmdW5jdGlvbihlLHQs
bil7cmV0dXJuIG4/bi50b1VwcGVyQ2FzZSgpOiIifSkucmVwbGFjZShiLGZ1bmN0aW9uKGUpe3Jl
dHVybiBlLnRvTG93ZXJDYXNlKCl9KX0pLHc9L14oXC18XykrKC4pPy8sRT0vKC4pKFwtfFxffFwu
fFxzKSsoLik/L2cseD0vKF58XC98XC4pKFthLXpdKS9nLEM9bmV3IHQuQ2FjaGUoMWUzLGZ1bmN0
aW9uKGUpe3ZhciB0LG49ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBuPyJfIituLnRvVXBwZXJDYXNl
KCk6IiJ9LHI9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHQrKHI/ci50b1VwcGVyQ2FzZSgpOiIi
KX0saT1lLnNwbGl0KCIvIikKLWZvcih0PTA7dDxpLmxlbmd0aDt0KyspaVt0XT1pW3RdLnJlcGxh
Y2UodyxuKS5yZXBsYWNlKEUscikKLXJldHVybiBpLmpvaW4oIi8iKS5yZXBsYWNlKHgsZnVuY3Rp
b24oZSl7cmV0dXJuIGUudG9VcHBlckNhc2UoKX0pfSksTz0vKFthLXpcZF0pKFtBLVpdKykvZyxB
PS9cLXxccysvZyxUPW5ldyB0LkNhY2hlKDFlMyxmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNl
KE8sIiQxXyQyIikucmVwbGFjZShBLCJfIikudG9Mb3dlckNhc2UoKX0pLFM9LyhefFwvKShbYS16
XSkvZyxSPW5ldyB0LkNhY2hlKDFlMyxmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKFMsZnVu
Y3Rpb24oZSl7cmV0dXJuIGUudG9VcHBlckNhc2UoKX0pfSksaz0vKFthLXpcZF0pKFtBLVpdKS9n
LE49bmV3IHQuQ2FjaGUoMWUzLGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoaywiJDFfJDIi
KS50b0xvd2VyQ2FzZSgpfSkKLWUuZGVmYXVsdD17Zm10OmEsbG9jOnUsdzpsLGRlY2FtZWxpemU6
YyxkYXNoZXJpemU6cCxjYW1lbGl6ZTpmLGNsYXNzaWZ5OmgsdW5kZXJzY29yZTpkLGNhcGl0YWxp
emU6bX0sZS5mbXQ9YSxlLmxvYz11LGUudz1sLGUuZGVjYW1lbGl6ZT1jLGUuZGFzaGVyaXplPXAs
ZS5jYW1lbGl6ZT1mLGUuY2xhc3NpZnk9aCxlLnVuZGVyc2NvcmU9ZCxlLmNhcGl0YWxpemU9bX0p
LGUoImVtYmVyLXJ1bnRpbWUvdXRpbHMiLFsiZXhwb3J0cyIsImVtYmVyLXJ1bnRpbWUvbWl4aW5z
L2FycmF5IiwiZW1iZXItcnVudGltZS9zeXN0ZW0vb2JqZWN0Il0sZnVuY3Rpb24oZSx0LG4peyJ1
c2Ugc3RyaWN0IgotZnVuY3Rpb24gcihlKXtpZihudWxsPT09ZSlyZXR1cm4ibnVsbCIKLWlmKHZv
aWQgMD09PWUpcmV0dXJuInVuZGVmaW5lZCIKLXZhciB0PWlbby5jYWxsKGUpXXx8Im9iamVjdCIK
LXJldHVybiJmdW5jdGlvbiI9PT10P24uZGVmYXVsdC5kZXRlY3QoZSkmJih0PSJjbGFzcyIpOiJv
YmplY3QiPT09dCYmKGUgaW5zdGFuY2VvZiBFcnJvcj90PSJlcnJvciI6ZSBpbnN0YW5jZW9mIG4u
ZGVmYXVsdD90PSJpbnN0YW5jZSI6ZSBpbnN0YW5jZW9mIERhdGUmJih0PSJkYXRlIikpLHR9ZS5p
c0FycmF5PWZ1bmN0aW9uKGUpe2lmKCFlfHxlLnNldEludGVydmFsKXJldHVybiExCi1pZihBcnJh
eS5pc0FycmF5KGUpKXJldHVybiEwCi1pZih0LmRlZmF1bHQuZGV0ZWN0KGUpKXJldHVybiEwCi12
YXIgbj1yKGUpCi1pZigiYXJyYXkiPT09bilyZXR1cm4hMAotdmFyIGk9ZS5sZW5ndGgKLXJldHVy
biJudW1iZXIiPT10eXBlb2YgaSYmaT09PWkmJiJvYmplY3QiPT09bn0sZS50eXBlT2Y9cgotdmFy
IGk9eyJbb2JqZWN0IEJvb2xlYW5dIjoiYm9vbGVhbiIsIltvYmplY3QgTnVtYmVyXSI6Im51bWJl
ciIsIltvYmplY3QgU3RyaW5nXSI6InN0cmluZyIsIltvYmplY3QgRnVuY3Rpb25dIjoiZnVuY3Rp
b24iLCJbb2JqZWN0IEFycmF5XSI6ImFycmF5IiwiW29iamVjdCBEYXRlXSI6ImRhdGUiLCJbb2Jq
ZWN0IFJlZ0V4cF0iOiJyZWdleHAiLCJbb2JqZWN0IE9iamVjdF0iOiJvYmplY3QiLCJbb2JqZWN0
IEZpbGVMaXN0XSI6ImZpbGVsaXN0In0sbz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nfSksZSgi
ZW1iZXItdXRpbHMiLFsiZXhwb3J0cyJdLGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IgotZnVuY3Rp
b24gdChlKXt2YXIgdD17fQotdFtlXT0xCi1mb3IodmFyIG4gaW4gdClpZihuPT09ZSlyZXR1cm4g
bgotcmV0dXJuIGV9ZnVuY3Rpb24gbigpe3JldHVybisrZn1mdW5jdGlvbiByKGUpe3JldHVybiB0
KCJfXyIrZSsiX18gW2lkPSIrKG0rTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKm5ldyBEYXRlKSkr
Il0iKX1mdW5jdGlvbiBpKGUpe3ZhciB0LG4scixpLG8KLWZvcih0PTE7dDxhcmd1bWVudHMubGVu
Z3RoO3QrKylpZihuPWFyZ3VtZW50c1t0XSlmb3Iocj1PYmplY3Qua2V5cyhuKSxpPTA7aTxyLmxl
bmd0aDtpKyspbz1yW2ldLGVbb109bltvXQotcmV0dXJuIGV9ZnVuY3Rpb24gbygpe31mdW5jdGlv
biBzKGUpe3JldHVybiB2b2lkIDA9PT1lLl9faGFzU3VwZXImJihlLl9faGFzU3VwZXI9RShlKSks
ZS5fX2hhc1N1cGVyfWZ1bmN0aW9uIGEoZSx0KXtmdW5jdGlvbiBuKCl7dmFyIG49dGhpcy5fc3Vw
ZXIKLXRoaXMuX3N1cGVyPXQKLXZhciByPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpCi1yZXR1cm4g
dGhpcy5fc3VwZXI9bixyfXJldHVybiBuLndyYXBwZWRGdW5jdGlvbj1lLG4uX19lbWJlcl9vYnNl
cnZlc19fPWUuX19lbWJlcl9vYnNlcnZlc19fLG4uX19lbWJlcl9vYnNlcnZlc0JlZm9yZV9fPWUu
X19lbWJlcl9vYnNlcnZlc0JlZm9yZV9fLG4uX19lbWJlcl9saXN0ZW5zX189ZS5fX2VtYmVyX2xp
c3RlbnNfXyxufWZ1bmN0aW9uIHUoZSx0LG4pe3ZhciByPW4mJm4ubGVuZ3RoCi1pZighbnx8IXIp
cmV0dXJuIGVbdF0oKQotc3dpdGNoKHIpe2Nhc2UgMTpyZXR1cm4gZVt0XShuWzBdKQotY2FzZSAy
OnJldHVybiBlW3RdKG5bMF0sblsxXSkKLWNhc2UgMzpyZXR1cm4gZVt0XShuWzBdLG5bMV0sblsy
XSkKLWNhc2UgNDpyZXR1cm4gZVt0XShuWzBdLG5bMV0sblsyXSxuWzNdKQotY2FzZSA1OnJldHVy
biBlW3RdKG5bMF0sblsxXSxuWzJdLG5bM10sbls0XSkKLWRlZmF1bHQ6cmV0dXJuIGVbdF0uYXBw
bHkoZSxuKX19ZnVuY3Rpb24gbChlLHQpe3JldHVybiEoIWV8fCJmdW5jdGlvbiIhPXR5cGVvZiBl
W3RdKX1mdW5jdGlvbiBjKGUpe3JldHVybiBudWxsPT09ZXx8dm9pZCAwPT09ZX1mdW5jdGlvbiBw
KGUpe3ZhciB0LG4scgotaWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBlCi1pZihBcnJheS5p
c0FycmF5KGUpKXtmb3IodD1lLmxlbmd0aCxuPSIiLHI9MDtyPHQ7cisrKXI+MCYmKG4rPSIsIiks
YyhlW3JdKXx8KG4rPXAoZVtyXSkpCi1yZXR1cm4gbn1yZXR1cm4gbnVsbCE9ZSYmImZ1bmN0aW9u
Ij09dHlwZW9mIGUudG9TdHJpbmc/ZS50b1N0cmluZygpOkEuY2FsbChlKX12YXIgZj0wLGg9W10s
ZD17fSxtPXQoIl9fZW1iZXIiKyArbmV3IERhdGUpLGc9e3dyaXRhYmxlOiEwLGNvbmZpZ3VyYWJs
ZTohMCxlbnVtZXJhYmxlOiExLHZhbHVlOm51bGx9LHk9e25hbWU6bSxkZXNjcmlwdG9yOntjb25m
aWd1cmFibGU6ITAsd3JpdGFibGU6ITAsZW51bWVyYWJsZTohMSx2YWx1ZTpudWxsfX0sdj1yKCJP
V05FUiIpLGI9T2JqZWN0LmFzc2lnbnx8aSxfPS9cLihfc3VwZXJ8Y2FsbFwodGhpc3xhcHBseVwo
dGhpcykvLHc9RnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nLEU9ZnVuY3Rpb24oKXtyZXR1cm4g
dy5jYWxsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KS5pbmRleE9mKCJyZXR1cm4gdGhpcyIpPi0x
P2Z1bmN0aW9uKGUpe3JldHVybiBfLnRlc3Qody5jYWxsKGUpKX06ZnVuY3Rpb24oKXtyZXR1cm4h
MH19KCkKLW8uX19oYXNTdXBlcj0hMQotdmFyIHg9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxD
PUFycmF5LmlzQXJyYXksTz1yKCJOQU1FX0tFWSIpLEE9T2JqZWN0LnByb3RvdHlwZS50b1N0cmlu
ZyxUPWZ1bmN0aW9uKCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIFdlYWtNYXApcmV0dXJuITEKLXZh
ciBlPW5ldyBXZWFrTWFwCi1yZXR1cm4iW29iamVjdCBXZWFrTWFwXSI9PT1PYmplY3QucHJvdG90
eXBlLnRvU3RyaW5nLmNhbGwoZSl9KCksUz0iZnVuY3Rpb24iPT10eXBlb2YgUHJveHkKLWUuc3lt
Ym9sPXIsZS5nZXRPd25lcj1mdW5jdGlvbihlKXtyZXR1cm4gZVt2XX0sZS5zZXRPd25lcj1mdW5j
dGlvbihlLHQpe2Vbdl09dH0sZS5PV05FUj12LGUuYXNzaWduPWIsZS5hc3NpZ25Qb2x5ZmlsbD1p
LGUuZGljdGlvbmFyeT1mdW5jdGlvbihlKXt2YXIgdD1PYmplY3QuY3JlYXRlKGUpCi1yZXR1cm4g
dC5fZGljdD1udWxsLGRlbGV0ZSB0Ll9kaWN0LHR9LGUudXVpZD1uLGUuR1VJRF9LRVk9bSxlLkdV
SURfREVTQz1nLGUuR1VJRF9LRVlfUFJPUEVSVFk9eSxlLmdlbmVyYXRlR3VpZD1mdW5jdGlvbihl
LHQpe3R8fCh0PSJlbWJlciIpCi12YXIgcj10K24oKQotcmV0dXJuIGUmJihudWxsPT09ZVttXT9l
W21dPXI6KGcudmFsdWU9cixlLl9fZGVmaW5lTm9uRW51bWVyYWJsZT9lLl9fZGVmaW5lTm9uRW51
bWVyYWJsZSh5KTpPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxtLGcpKSkscn0sZS5ndWlkRm9yPWZ1
bmN0aW9uKGUpe3ZhciB0PXR5cGVvZiBlCi1pZigoIm9iamVjdCI9PT10JiZudWxsIT09ZXx8ImZ1
bmN0aW9uIj09PXQpJiZlW21dKXJldHVybiBlW21dCi1pZih2b2lkIDA9PT1lKXJldHVybiIodW5k
ZWZpbmVkKSIKLWlmKG51bGw9PT1lKXJldHVybiIobnVsbCkiCi12YXIgcj12b2lkIDAKLXN3aXRj
aCh0KXtjYXNlIm51bWJlciI6cmV0dXJuIHI9aFtlXSxyfHwocj1oW2VdPSJudSIrZSkscgotY2Fz
ZSJzdHJpbmciOnJldHVybiByPWRbZV0scnx8KHI9ZFtlXT0ic3QiK24oKSkscgotY2FzZSJib29s
ZWFuIjpyZXR1cm4gZT8iKHRydWUpIjoiKGZhbHNlKSIKLWRlZmF1bHQ6cmV0dXJuIGU9PT1PYmpl
Y3Q/IihPYmplY3QpIjplPT09QXJyYXk/IihBcnJheSkiOihyPSJlbWJlciIrbigpLG51bGw9PT1l
W21dP2VbbV09cjooZy52YWx1ZT1yLGUuX19kZWZpbmVOb25FbnVtZXJhYmxlP2UuX19kZWZpbmVO
b25FbnVtZXJhYmxlKHkpOk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG0sZykpLHIpfX0sZS5pbnRl
cm49dCxlLmNoZWNrSGFzU3VwZXI9RSxlLlJPT1Q9byxlLndyYXA9ZnVuY3Rpb24oZSx0KXtyZXR1
cm4gcyhlKT8hdC53cmFwcGVkRnVuY3Rpb24mJnModCk/YShlLGEodCxvKSk6YShlLHQpOmV9LGUu
aW5zcGVjdD1mdW5jdGlvbihlKXtpZihudWxsPT09ZSlyZXR1cm4ibnVsbCIKLWlmKHZvaWQgMD09
PWUpcmV0dXJuInVuZGVmaW5lZCIKLWlmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIlsiK2UrIl0i
Ci12YXIgdD10eXBlb2YgZQotaWYoIm9iamVjdCIhPT10JiYic3ltYm9sIiE9PXQpcmV0dXJuIiIr
ZQotaWYoImZ1bmN0aW9uIj09dHlwZW9mIGUudG9TdHJpbmcmJmUudG9TdHJpbmchPT14KXJldHVy
biBlLnRvU3RyaW5nKCkKLXZhciBuPXZvaWQgMCxyPVtdCi1mb3IodmFyIGkgaW4gZSlpZihlLmhh
c093blByb3BlcnR5KGkpKXtpZigidG9TdHJpbmciPT09KG49ZVtpXSkpY29udGludWUKLSJmdW5j
dGlvbiI9PXR5cGVvZiBuJiYobj0iZnVuY3Rpb24oKSB7IC4uLiB9IiksbiYmImZ1bmN0aW9uIiE9
dHlwZW9mIG4udG9TdHJpbmc/ci5wdXNoKGkrIjogIit4LmNhbGwobikpOnIucHVzaChpKyI6ICIr
bil9cmV0dXJuInsiK3Iuam9pbigiLCAiKSsifSJ9LGUubG9va3VwRGVzY3JpcHRvcj1mdW5jdGlv
bihlLHQpe2Zvcih2YXIgbixyPWU7cjspe2lmKG49T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcihyLHQpKXJldHVybiBuCi1yPU9iamVjdC5nZXRQcm90b3R5cGVPZihyKX1yZXR1cm4gbnVs
bH0sZS5jYW5JbnZva2U9bCxlLnRyeUludm9rZT1mdW5jdGlvbihlLHQsbil7aWYobChlLHQpKXJl
dHVybiBuP3UoZSx0LG4pOnUoZSx0KX0sZS5tYWtlQXJyYXk9ZnVuY3Rpb24oZSl7cmV0dXJuIG51
bGw9PT1lfHx2b2lkIDA9PT1lP1tdOkMoZSk/ZTpbZV19LGUuYXBwbHlTdHI9dSxlLk5BTUVfS0VZ
PU8sZS50b1N0cmluZz1wLGUuSEFTX05BVElWRV9XRUFLTUFQPVQsZS5IQVNfTkFUSVZFX1BST1hZ
PVN9KSxlKCJlbWJlci12aWV3cy9jb21wYXQvYXR0cnMiLFsiZXhwb3J0cyIsImVtYmVyLXV0aWxz
Il0sZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCIKLWUuTVVUQUJMRV9DRUxMPXZvaWQgMCxlLk1V
VEFCTEVfQ0VMTD0oMCx0LnN5bWJvbCkoIk1VVEFCTEVfQ0VMTCIpfSkKLWUoImVtYmVyLXZpZXdz
L2NvbXBhdC9mYWxsYmFjay12aWV3LXJlZ2lzdHJ5IixbImV4cG9ydHMiLCJlbWJlci11dGlscyJd
LGZ1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiCi1lLmRlZmF1bHQ9KDAsdC5kaWN0aW9uYXJ5KShu
dWxsKX0pLGUoImVtYmVyLXZpZXdzL2NvbXBvbmVudF9sb29rdXAiLFsiZXhwb3J0cyIsImVtYmVy
LWRlYnVnIiwiZW1iZXItcnVudGltZSJdLGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCIKLWUu
ZGVmYXVsdD1uLk9iamVjdC5leHRlbmQoe2NvbXBvbmVudEZvcjpmdW5jdGlvbihlLHQsbil7cmV0
dXJuIHQuZmFjdG9yeUZvcigiY29tcG9uZW50OiIrZSxuKX0sbGF5b3V0Rm9yOmZ1bmN0aW9uKGUs
dCxuKXtyZXR1cm4gdC5sb29rdXAoInRlbXBsYXRlOmNvbXBvbmVudHMvIitlLG4pfX0pfSksZSgi
ZW1iZXItdmlld3MvaW5kZXgiLFsiZXhwb3J0cyIsImVtYmVyLXZpZXdzL3N5c3RlbS9qcXVlcnki
LCJlbWJlci12aWV3cy9zeXN0ZW0vdXRpbHMiLCJlbWJlci12aWV3cy9zeXN0ZW0vZXZlbnRfZGlz
cGF0Y2hlciIsImVtYmVyLXZpZXdzL2NvbXBvbmVudF9sb29rdXAiLCJlbWJlci12aWV3cy9taXhp
bnMvdGV4dF9zdXBwb3J0IiwiZW1iZXItdmlld3Mvdmlld3MvY29yZV92aWV3IiwiZW1iZXItdmll
d3MvbWl4aW5zL2NsYXNzX25hbWVzX3N1cHBvcnQiLCJlbWJlci12aWV3cy9taXhpbnMvY2hpbGRf
dmlld3Nfc3VwcG9ydCIsImVtYmVyLXZpZXdzL21peGlucy92aWV3X3N0YXRlX3N1cHBvcnQiLCJl
bWJlci12aWV3cy9taXhpbnMvdmlld19zdXBwb3J0IiwiZW1iZXItdmlld3MvbWl4aW5zL2FjdGlv
bl9zdXBwb3J0IiwiZW1iZXItdmlld3MvY29tcGF0L2F0dHJzIiwiZW1iZXItdmlld3Mvc3lzdGVt
L2xvb2t1cF9wYXJ0aWFsIiwiZW1iZXItdmlld3MvdXRpbHMvbG9va3VwLWNvbXBvbmVudCIsImVt
YmVyLXZpZXdzL3N5c3RlbS9hY3Rpb25fbWFuYWdlciIsImVtYmVyLXZpZXdzL2NvbXBhdC9mYWxs
YmFjay12aWV3LXJlZ2lzdHJ5IiwiZW1iZXItdmlld3Mvc3lzdGVtL2V4dCJdLGZ1bmN0aW9uKGUs
dCxuLHIsaSxvLHMsYSx1LGwsYyxwLGYsaCxkLG0sZyl7InVzZSBzdHJpY3QiCi1lLmZhbGxiYWNr
Vmlld1JlZ2lzdHJ5PWUuQWN0aW9uTWFuYWdlcj1lLmxvb2t1cENvbXBvbmVudD1lLmhhc1BhcnRp
YWw9ZS5sb29rdXBQYXJ0aWFsPWUuTVVUQUJMRV9DRUxMPWUuQWN0aW9uU3VwcG9ydD1lLmRpc3Bh
dGNoTGlmZUN5Y2xlSG9vaz1lLlZpZXdNaXhpbj1lLlZpZXdTdGF0ZVN1cHBvcnQ9ZS5DaGlsZFZp
ZXdzU3VwcG9ydD1lLkNsYXNzTmFtZXNTdXBwb3J0PWUuQ29yZVZpZXc9ZS5UZXh0U3VwcG9ydD1l
LkNvbXBvbmVudExvb2t1cD1lLkV2ZW50RGlzcGF0Y2hlcj1lLmNvbnN0cnVjdFN0eWxlRGVwcmVj
YXRpb25NZXNzYWdlPWUuc2V0Vmlld0VsZW1lbnQ9ZS5nZXRWaWV3RWxlbWVudD1lLmdldFZpZXdJ
ZD1lLmdldENoaWxkVmlld3M9ZS5nZXRSb290Vmlld3M9ZS5nZXRWaWV3Qm91bmRpbmdDbGllbnRS
ZWN0PWUuZ2V0Vmlld0NsaWVudFJlY3RzPWUuZ2V0Vmlld0JvdW5kcz1lLmlzU2ltcGxlQ2xpY2s9
ZS5qUXVlcnk9dm9pZCAwLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJqUXVlcnkiLHtlbnVtZXJh
YmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0LmRlZmF1bHR9fSksT2JqZWN0LmRlZmluZVBy
b3BlcnR5KGUsImlzU2ltcGxlQ2xpY2siLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3Jl
dHVybiBuLmlzU2ltcGxlQ2xpY2t9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImdldFZpZXdC
b3VuZHMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBuLmdldFZpZXdCb3Vu
ZHN9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImdldFZpZXdDbGllbnRSZWN0cyIse2VudW1l
cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG4uZ2V0Vmlld0NsaWVudFJlY3RzfX0pLE9i
amVjdC5kZWZpbmVQcm9wZXJ0eShlLCJnZXRWaWV3Qm91bmRpbmdDbGllbnRSZWN0Iix7ZW51bWVy
YWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbi5nZXRWaWV3Qm91bmRpbmdDbGllbnRSZWN0
fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJnZXRSb290Vmlld3MiLHtlbnVtZXJhYmxlOiEw
LGdldDpmdW5jdGlvbigpe3JldHVybiBuLmdldFJvb3RWaWV3c319KSxPYmplY3QuZGVmaW5lUHJv
cGVydHkoZSwiZ2V0Q2hpbGRWaWV3cyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0
dXJuIG4uZ2V0Q2hpbGRWaWV3c319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiZ2V0Vmlld0lk
Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbi5nZXRWaWV3SWR9fSksT2Jq
ZWN0LmRlZmluZVByb3BlcnR5KGUsImdldFZpZXdFbGVtZW50Iix7ZW51bWVyYWJsZTohMCxnZXQ6
ZnVuY3Rpb24oKXtyZXR1cm4gbi5nZXRWaWV3RWxlbWVudH19KSxPYmplY3QuZGVmaW5lUHJvcGVy
dHkoZSwic2V0Vmlld0VsZW1lbnQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVy
biBuLnNldFZpZXdFbGVtZW50fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJjb25zdHJ1Y3RT
dHlsZURlcHJlY2F0aW9uTWVzc2FnZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0
dXJuIG4uY29uc3RydWN0U3R5bGVEZXByZWNhdGlvbk1lc3NhZ2V9fSksT2JqZWN0LmRlZmluZVBy
b3BlcnR5KGUsIkV2ZW50RGlzcGF0Y2hlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7
cmV0dXJuIHIuZGVmYXVsdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiQ29tcG9uZW50TG9v
a3VwIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5kZWZhdWx0fX0pLE9i
amVjdC5kZWZpbmVQcm9wZXJ0eShlLCJUZXh0U3VwcG9ydCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1
bmN0aW9uKCl7cmV0dXJuIG8uZGVmYXVsdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiQ29y
ZVZpZXciLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLmRlZmF1bHR9fSks
T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIkNsYXNzTmFtZXNTdXBwb3J0Iix7ZW51bWVyYWJsZToh
MCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYS5kZWZhdWx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0
eShlLCJDaGlsZFZpZXdzU3VwcG9ydCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0
dXJuIHUuZGVmYXVsdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiVmlld1N0YXRlU3VwcG9y
dCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGwuZGVmYXVsdH19KSxPYmpl
Y3QuZGVmaW5lUHJvcGVydHkoZSwiVmlld01peGluIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rp
b24oKXtyZXR1cm4gYy5kZWZhdWx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJkaXNwYXRj
aExpZmVDeWNsZUhvb2siLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBjLmRp
c3BhdGNoTGlmZUN5Y2xlSG9va319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiQWN0aW9uU3Vw
cG9ydCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHAuZGVmYXVsdH19KSxP
YmplY3QuZGVmaW5lUHJvcGVydHkoZSwiTVVUQUJMRV9DRUxMIix7ZW51bWVyYWJsZTohMCxnZXQ6
ZnVuY3Rpb24oKXtyZXR1cm4gZi5NVVRBQkxFX0NFTEx9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5
KGUsImxvb2t1cFBhcnRpYWwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBo
LmRlZmF1bHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImhhc1BhcnRpYWwiLHtlbnVtZXJh
YmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBoLmhhc1BhcnRpYWx9fSksT2JqZWN0LmRlZmlu
ZVByb3BlcnR5KGUsImxvb2t1cENvbXBvbmVudCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9u
KCl7cmV0dXJuIGQuZGVmYXVsdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiQWN0aW9uTWFu
YWdlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG0uZGVmYXVsdH19KSxP
YmplY3QuZGVmaW5lUHJvcGVydHkoZSwiZmFsbGJhY2tWaWV3UmVnaXN0cnkiLHtlbnVtZXJhYmxl
OiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBnLmRlZmF1bHR9fSl9KSxlKCJlbWJlci12aWV3cy9t
aXhpbnMvYWN0aW9uX3N1cHBvcnQiLFsiZXhwb3J0cyIsImVtYmVyLXV0aWxzIiwiZW1iZXItbWV0
YWwiLCJlbWJlci1kZWJ1ZyIsImVtYmVyLXZpZXdzL2NvbXBhdC9hdHRycyJdLGZ1bmN0aW9uKGUs
dCxuLHIsaSl7InVzZSBzdHJpY3QiCi1mdW5jdGlvbiBvKGUsdCl7cmV0dXJuIHQmJnRbaS5NVVRB
QkxFX0NFTExdJiYodD10LnZhbHVlKSx0fWUuZGVmYXVsdD1uLk1peGluLmNyZWF0ZSh7c2VuZEFj
dGlvbjpmdW5jdGlvbihlKXtmb3IodD1hcmd1bWVudHMubGVuZ3RoLHI9QXJyYXkodD4xP3QtMTow
KSxpPTE7aTx0O2krKylyW2ktMV09YXJndW1lbnRzW2ldCi12YXIgdCxyLGkscz12b2lkIDAKLXZv
aWQgMD09PWUmJihlPSJhY3Rpb24iKSxzPSgwLG4uZ2V0KSh0aGlzLCJhdHRycy4iK2UpfHwoMCxu
LmdldCkodGhpcyxlKSx2b2lkIDAhPT0ocz1vKHRoaXMscykpJiYoImZ1bmN0aW9uIj09dHlwZW9m
IHM/cy5hcHBseSh2b2lkIDAscik6dGhpcy50cmlnZ2VyQWN0aW9uKHthY3Rpb246cyxhY3Rpb25D
b250ZXh0OnJ9KSl9LHNlbmQ6ZnVuY3Rpb24oZSl7Zm9yKHQ9YXJndW1lbnRzLmxlbmd0aCxyPUFy
cmF5KHQ+MT90LTE6MCksaT0xO2k8dDtpKyspcltpLTFdPWFyZ3VtZW50c1tpXQotdmFyIHQscixp
LG89dGhpcy5hY3Rpb25zJiZ0aGlzLmFjdGlvbnNbZV0KLWlmKCFvfHwhMD09PW8uYXBwbHkodGhp
cyxyKSl7dmFyIHM9KDAsbi5nZXQpKHRoaXMsInRhcmdldCIpCi1zJiZzLnNlbmQuYXBwbHkocyxh
cmd1bWVudHMpfX19KX0pLGUoImVtYmVyLXZpZXdzL21peGlucy9jaGlsZF92aWV3c19zdXBwb3J0
IixbImV4cG9ydHMiLCJlbWJlci11dGlscyIsImVtYmVyLW1ldGFsIiwiZW1iZXItdmlld3Mvc3lz
dGVtL3V0aWxzIl0sZnVuY3Rpb24oZSx0LG4scil7InVzZSBzdHJpY3QiCi1lLmRlZmF1bHQ9bi5N
aXhpbi5jcmVhdGUoe2luaXQ6ZnVuY3Rpb24oKXt0aGlzLl9zdXBlci5hcHBseSh0aGlzLGFyZ3Vt
ZW50cyksKDAsci5pbml0Q2hpbGRWaWV3cykodGhpcyl9LGNoaWxkVmlld3M6KDAsbi5kZXNjcmlw
dG9yKSh7Y29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJu
KDAsci5nZXRDaGlsZFZpZXdzKSh0aGlzKX19KSxhcHBlbmRDaGlsZDpmdW5jdGlvbihlKXt0aGlz
LmxpbmtDaGlsZChlKSwoMCxyLmFkZENoaWxkVmlldykodGhpcyxlKX0sbGlua0NoaWxkOmZ1bmN0
aW9uKGUpeygwLHQuZ2V0T3duZXIpKGUpfHwoMCx0LnNldE93bmVyKShlLCgwLHQuZ2V0T3duZXIp
KHRoaXMpKX19KX0pLGUoImVtYmVyLXZpZXdzL21peGlucy9jbGFzc19uYW1lc19zdXBwb3J0Iixb
ImV4cG9ydHMiLCJlbWJlci1tZXRhbCIsImVtYmVyLWRlYnVnIl0sZnVuY3Rpb24oZSx0LG4peyJ1
c2Ugc3RyaWN0IgotdmFyIHI9T2JqZWN0LmZyZWV6ZShbXSkKLWUuZGVmYXVsdD10Lk1peGluLmNy
ZWF0ZSh7Y29uY2F0ZW5hdGVkUHJvcGVydGllczpbImNsYXNzTmFtZXMiLCJjbGFzc05hbWVCaW5k
aW5ncyJdLGluaXQ6ZnVuY3Rpb24oKXt0aGlzLl9zdXBlci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9
LGNsYXNzTmFtZXM6cixjbGFzc05hbWVCaW5kaW5nczpyfSl9KSxlKCJlbWJlci12aWV3cy9taXhp
bnMvdGV4dF9zdXBwb3J0IixbImV4cG9ydHMiLCJlbWJlci1tZXRhbCIsImVtYmVyLXJ1bnRpbWUi
XSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiCi1mdW5jdGlvbiByKGUsbixyKXt2YXIgaT0o
MCx0LmdldCkobiwiYXR0cnMuIitlKXx8KDAsdC5nZXQpKG4sZSksbz0oMCx0LmdldCkobiwib25F
dmVudCIpLHM9KDAsdC5nZXQpKG4sInZhbHVlIik7KG89PT1lfHwia2V5UHJlc3MiPT09byYmImtl
eS1wcmVzcyI9PT1lKSYmbi5zZW5kQWN0aW9uKCJhY3Rpb24iLHMpLG4uc2VuZEFjdGlvbihlLHMp
LChpfHxvPT09ZSkmJigoMCx0LmdldCkobiwiYnViYmxlcyIpfHxyLnN0b3BQcm9wYWdhdGlvbigp
KX12YXIgaT17MTM6Imluc2VydE5ld2xpbmUiLDI3OiJjYW5jZWwifQotZS5kZWZhdWx0PXQuTWl4
aW4uY3JlYXRlKG4uVGFyZ2V0QWN0aW9uU3VwcG9ydCx7dmFsdWU6IiIsYXR0cmlidXRlQmluZGlu
Z3M6WyJhdXRvY2FwaXRhbGl6ZSIsImF1dG9jb3JyZWN0IiwiYXV0b2ZvY3VzIiwiZGlzYWJsZWQi
LCJmb3JtIiwibWF4bGVuZ3RoIiwibWlubGVuZ3RoIiwicGxhY2Vob2xkZXIiLCJyZWFkb25seSIs
InJlcXVpcmVkIiwic2VsZWN0aW9uRGlyZWN0aW9uIiwic3BlbGxjaGVjayIsInRhYmluZGV4Iiwi
dGl0bGUiXSxwbGFjZWhvbGRlcjpudWxsLGRpc2FibGVkOiExLG1heGxlbmd0aDpudWxsLGluaXQ6
ZnVuY3Rpb24oKXt0aGlzLl9zdXBlci5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5vbigicGFz
dGUiLHRoaXMsdGhpcy5fZWxlbWVudFZhbHVlRGlkQ2hhbmdlKSx0aGlzLm9uKCJjdXQiLHRoaXMs
dGhpcy5fZWxlbWVudFZhbHVlRGlkQ2hhbmdlKSx0aGlzLm9uKCJpbnB1dCIsdGhpcyx0aGlzLl9l
bGVtZW50VmFsdWVEaWRDaGFuZ2UpfSxhY3Rpb246bnVsbCxvbkV2ZW50OiJlbnRlciIsYnViYmxl
czohMSxpbnRlcnByZXRLZXlFdmVudHM6ZnVuY3Rpb24oZSl7dmFyIHQ9aVtlLmtleUNvZGVdCi1p
Zih0aGlzLl9lbGVtZW50VmFsdWVEaWRDaGFuZ2UoKSx0KXJldHVybiB0aGlzW3RdKGUpfSxfZWxl
bWVudFZhbHVlRGlkQ2hhbmdlOmZ1bmN0aW9uKCl7KDAsdC5zZXQpKHRoaXMsInZhbHVlIix0aGlz
LmVsZW1lbnQudmFsdWUpfSxjaGFuZ2U6ZnVuY3Rpb24oZSl7dGhpcy5fZWxlbWVudFZhbHVlRGlk
Q2hhbmdlKGUpfSxpbnNlcnROZXdsaW5lOmZ1bmN0aW9uKGUpe3IoImVudGVyIix0aGlzLGUpLHIo
Imluc2VydC1uZXdsaW5lIix0aGlzLGUpfSxjYW5jZWw6ZnVuY3Rpb24oZSl7cigiZXNjYXBlLXBy
ZXNzIix0aGlzLGUpfSxmb2N1c0luOmZ1bmN0aW9uKGUpe3IoImZvY3VzLWluIix0aGlzLGUpfSxm
b2N1c091dDpmdW5jdGlvbihlKXt0aGlzLl9lbGVtZW50VmFsdWVEaWRDaGFuZ2UoZSkscigiZm9j
dXMtb3V0Iix0aGlzLGUpfSxrZXlQcmVzczpmdW5jdGlvbihlKXtyKCJrZXktcHJlc3MiLHRoaXMs
ZSl9LGtleVVwOmZ1bmN0aW9uKGUpe3RoaXMuaW50ZXJwcmV0S2V5RXZlbnRzKGUpLHRoaXMuc2Vu
ZEFjdGlvbigia2V5LXVwIiwoMCx0LmdldCkodGhpcywidmFsdWUiKSxlKX0sa2V5RG93bjpmdW5j
dGlvbihlKXt0aGlzLnNlbmRBY3Rpb24oImtleS1kb3duIiwoMCx0LmdldCkodGhpcywidmFsdWUi
KSxlKX19KX0pLGUoImVtYmVyLXZpZXdzL21peGlucy92aWV3X3N0YXRlX3N1cHBvcnQiLFsiZXhw
b3J0cyIsImVtYmVyLW1ldGFsIl0sZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCIKLWUuZGVmYXVs
dD10Lk1peGluLmNyZWF0ZSh7X3RyYW5zaXRpb25UbzpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9j
dXJyZW50U3RhdGUsbj10aGlzLl9jdXJyZW50U3RhdGU9dGhpcy5fc3RhdGVzW2VdCi10aGlzLl9z
dGF0ZT1lLHQmJnQuZXhpdCYmdC5leGl0KHRoaXMpLG4uZW50ZXImJm4uZW50ZXIodGhpcyl9fSl9
KSxlKCJlbWJlci12aWV3cy9taXhpbnMvdmlld19zdXBwb3J0IixbImV4cG9ydHMiLCJlbWJlci11
dGlscyIsImVtYmVyLW1ldGFsIiwiZW1iZXItZGVidWciLCJlbWJlci1lbnZpcm9ubWVudCIsImVt
YmVyLXZpZXdzL3N5c3RlbS91dGlscyIsImVtYmVyLXJ1bnRpbWUvc3lzdGVtL2NvcmVfb2JqZWN0
IiwiZW1iZXItdmlld3Mvc3lzdGVtL2pxdWVyeSJdLGZ1bmN0aW9uKGUsdCxuLHIsaSxvLHMsYSl7
InVzZSBzdHJpY3QiCi1mdW5jdGlvbiB1KCl7cmV0dXJuIHRoaXN9ZS5kaXNwYXRjaExpZmVDeWNs
ZUhvb2s9dm9pZCAwCi12YXIgbCxjPWUuZGlzcGF0Y2hMaWZlQ3ljbGVIb29rPWZ1bmN0aW9uKGUs
dCxuLHIpe2UudHJpZ2dlcih0LHthdHRyczpyLG9sZEF0dHJzOm4sbmV3QXR0cnM6cn0pfQotZS5k
ZWZhdWx0PW4uTWl4aW4uY3JlYXRlKChsPXtjb25jYXRlbmF0ZWRQcm9wZXJ0aWVzOlsiYXR0cmli
dXRlQmluZGluZ3MiXX0sbFtzLlBPU1RfSU5JVF09ZnVuY3Rpb24oKXtjKHRoaXMsImRpZEluaXRB
dHRycyIsdm9pZCAwLHRoaXMuYXR0cnMpLGModGhpcywiZGlkUmVjZWl2ZUF0dHJzIix2b2lkIDAs
dGhpcy5hdHRycyl9LGwubmVhcmVzdE9mVHlwZT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy5w
YXJlbnRWaWV3LHI9ZSBpbnN0YW5jZW9mIG4uTWl4aW4/ZnVuY3Rpb24odCl7cmV0dXJuIGUuZGV0
ZWN0KHQpfTpmdW5jdGlvbih0KXtyZXR1cm4gZS5kZXRlY3QodC5jb25zdHJ1Y3Rvcil9O3Q7KXtp
ZihyKHQpKXJldHVybiB0Ci10PXQucGFyZW50Vmlld319LGwubmVhcmVzdFdpdGhQcm9wZXJ0eT1m
dW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy5wYXJlbnRWaWV3O3Q7KXtpZihlIGluIHQpcmV0dXJu
IHQKLXQ9dC5wYXJlbnRWaWV3fX0sbC5yZXJlbmRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9j
dXJyZW50U3RhdGUucmVyZW5kZXIodGhpcyl9LGwuZWxlbWVudD0oMCxuLmRlc2NyaXB0b3IpKHtj
b25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5y
ZW5kZXJlci5nZXRFbGVtZW50KHRoaXMpfX0pLGwuJD1mdW5jdGlvbihlKXtpZih0aGlzLmVsZW1l
bnQpcmV0dXJuIGU/KDAsYS5kZWZhdWx0KShlLHRoaXMuZWxlbWVudCk6KDAsYS5kZWZhdWx0KSh0
aGlzLmVsZW1lbnQpfSxsLmFwcGVuZFRvPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2Vudmlyb25t
ZW50fHxpLmVudmlyb25tZW50LG49dm9pZCAwCi1yZXR1cm4gbj10Lmhhc0RPTSYmInN0cmluZyI9
PXR5cGVvZiBlP2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZSk6ZSx0aGlzLnJlbmRlcmVyLmFwcGVu
ZFRvKHRoaXMsbiksdGhpc30sbC5yZW5kZXJUb0VsZW1lbnQ9ZnVuY3Rpb24oKXt2YXIgZT1hcmd1
bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06ImJvZHki
LHQ9dGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KGUpCi1yZXR1cm4gdGhpcy5yZW5kZXJlci5h
cHBlbmRUbyh0aGlzLHQpLHR9LGwuYXBwZW5kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXBwZW5k
VG8oZG9jdW1lbnQuYm9keSl9LGwuZWxlbWVudElkPW51bGwsbC5maW5kRWxlbWVudEluUGFyZW50
RWxlbWVudD1mdW5jdGlvbihlKXt2YXIgdD0iIyIrdGhpcy5lbGVtZW50SWQKLXJldHVybigwLGEu
ZGVmYXVsdCkodClbMF18fCgwLGEuZGVmYXVsdCkodCxlKVswXX0sbC53aWxsSW5zZXJ0RWxlbWVu
dD11LGwuZGlkSW5zZXJ0RWxlbWVudD11LGwud2lsbENsZWFyUmVuZGVyPXUsbC5kZXN0cm95PWZ1
bmN0aW9uKCl7dGhpcy5fc3VwZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMuX2N1cnJlbnRT
dGF0ZS5kZXN0cm95KHRoaXMpfSxsLndpbGxEZXN0cm95RWxlbWVudD11LGwucGFyZW50Vmlld0Rp
ZENoYW5nZT11LGwudGFnTmFtZT1udWxsLGwuaW5pdD1mdW5jdGlvbigpe3ZhciBlLG4KLXRoaXMu
X3N1cGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLmVsZW1lbnRJZHx8IiI9PT10aGlzLnRh
Z05hbWV8fCh0aGlzLmVsZW1lbnRJZD0oMCx0Lmd1aWRGb3IpKHRoaXMpKSx0aGlzLmV2ZW50TWFu
YWdlciYmKGU9KDAsdC5nZXRPd25lcikodGhpcyksIShuPWUmJmUubG9va3VwKCJldmVudF9kaXNw
YXRjaGVyOm1haW4iKSl8fCJjYW5EaXNwYXRjaFRvRXZlbnRNYW5hZ2VyImluIG58fChuLmNhbkRp
c3BhdGNoVG9FdmVudE1hbmFnZXI9ITApKX0sbC5fX2RlZmluZU5vbkVudW1lcmFibGU9ZnVuY3Rp
b24oZSl7dGhpc1tlLm5hbWVdPWUuZGVzY3JpcHRvci52YWx1ZX0sbC5oYW5kbGVFdmVudD1mdW5j
dGlvbihlLHQpe3JldHVybiB0aGlzLl9jdXJyZW50U3RhdGUuaGFuZGxlRXZlbnQodGhpcyxlLHQp
fSxsKSl9KSxlKCJlbWJlci12aWV3cy9zeXN0ZW0vYWN0aW9uX21hbmFnZXIiLFsiZXhwb3J0cyJd
LGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IgotZnVuY3Rpb24gdCgpe31lLmRlZmF1bHQ9dCx0LnJl
Z2lzdGVyZWRBY3Rpb25zPXt9fSksZSgiZW1iZXItdmlld3Mvc3lzdGVtL2V2ZW50X2Rpc3BhdGNo
ZXIiLFsiZXhwb3J0cyIsImVtYmVyLXV0aWxzIiwiZW1iZXItZGVidWciLCJlbWJlci1tZXRhbCIs
ImVtYmVyLXJ1bnRpbWUiLCJlbWJlci12aWV3cy9zeXN0ZW0vanF1ZXJ5IiwiZW1iZXItdmlld3Mv
c3lzdGVtL2FjdGlvbl9tYW5hZ2VyIiwiZW1iZXItZW52aXJvbm1lbnQiLCJlbWJlci12aWV3cy9j
b21wYXQvZmFsbGJhY2stdmlldy1yZWdpc3RyeSJdLGZ1bmN0aW9uKGUsdCxuLHIsaSxvLHMsYSx1
KXsidXNlIHN0cmljdCIKLWUuZGVmYXVsdD1pLk9iamVjdC5leHRlbmQoe2V2ZW50czp7dG91Y2hz
dGFydDoidG91Y2hTdGFydCIsdG91Y2htb3ZlOiJ0b3VjaE1vdmUiLHRvdWNoZW5kOiJ0b3VjaEVu
ZCIsdG91Y2hjYW5jZWw6InRvdWNoQ2FuY2VsIixrZXlkb3duOiJrZXlEb3duIixrZXl1cDoia2V5
VXAiLGtleXByZXNzOiJrZXlQcmVzcyIsbW91c2Vkb3duOiJtb3VzZURvd24iLG1vdXNldXA6Im1v
dXNlVXAiLGNvbnRleHRtZW51OiJjb250ZXh0TWVudSIsY2xpY2s6ImNsaWNrIixkYmxjbGljazoi
ZG91YmxlQ2xpY2siLG1vdXNlbW92ZToibW91c2VNb3ZlIixmb2N1c2luOiJmb2N1c0luIixmb2N1
c291dDoiZm9jdXNPdXQiLG1vdXNlZW50ZXI6Im1vdXNlRW50ZXIiLG1vdXNlbGVhdmU6Im1vdXNl
TGVhdmUiLHN1Ym1pdDoic3VibWl0IixpbnB1dDoiaW5wdXQiLGNoYW5nZToiY2hhbmdlIixkcmFn
c3RhcnQ6ImRyYWdTdGFydCIsZHJhZzoiZHJhZyIsZHJhZ2VudGVyOiJkcmFnRW50ZXIiLGRyYWds
ZWF2ZToiZHJhZ0xlYXZlIixkcmFnb3ZlcjoiZHJhZ092ZXIiLGRyb3A6ImRyb3AiLGRyYWdlbmQ6
ImRyYWdFbmQifSxyb290RWxlbWVudDoiYm9keSIsaW5pdDpmdW5jdGlvbigpe3RoaXMuX3N1cGVy
KCl9LHNldHVwOmZ1bmN0aW9uKGUsbil7dmFyIGk9dm9pZCAwLHM9dGhpcy5fZmluYWxFdmVudHM9
KDAsdC5hc3NpZ24pKHt9LCgwLHIuZ2V0KSh0aGlzLCJldmVudHMiKSxlKQotaWYoKDAsci5pc05v
bmUpKG4pP249KDAsci5nZXQpKHRoaXMsInJvb3RFbGVtZW50Iik6KDAsci5zZXQpKHRoaXMsInJv
b3RFbGVtZW50IixuKSxuPSgwLG8uZGVmYXVsdCkobiksbi5hZGRDbGFzcygiZW1iZXItYXBwbGlj
YXRpb24iKSwhbi5pcygiLmVtYmVyLWFwcGxpY2F0aW9uIikpdGhyb3cgbmV3IFR5cGVFcnJvcigi
VW5hYmxlIHRvIGFkZCAnZW1iZXItYXBwbGljYXRpb24nIGNsYXNzIHRvIHJvb3QgZWxlbWVudCAo
Iisobi5zZWxlY3Rvcnx8blswXS50YWdOYW1lKSsiKS4gTWFrZSBzdXJlIHlvdSBzZXQgcm9vdEVs
ZW1lbnQgdG8gdGhlIGJvZHkgb3IgYW4gZWxlbWVudCBpbiB0aGUgYm9keS4iKQotdmFyIGE9dGhp
cy5fZ2V0Vmlld1JlZ2lzdHJ5KCkKLWZvcihpIGluIHMpcy5oYXNPd25Qcm9wZXJ0eShpKSYmdGhp
cy5zZXR1cEhhbmRsZXIobixpLHNbaV0sYSl9LHNldHVwSGFuZGxlcjpmdW5jdGlvbihlLHQsbixy
KXt2YXIgaT10aGlzCi1udWxsIT09biYmKGUub24odCsiLmVtYmVyIiwiLmVtYmVyLXZpZXciLGZ1
bmN0aW9uKGUsdCl7dmFyIG89clt0aGlzLmlkXSxzPSEwLGE9aS5jYW5EaXNwYXRjaFRvRXZlbnRN
YW5hZ2VyP2kuX2ZpbmROZWFyZXN0RXZlbnRNYW5hZ2VyKG8sbik6bnVsbAotcmV0dXJuIGEmJmEh
PT10P3M9aS5fZGlzcGF0Y2hFdmVudChhLGUsbixvKTpvJiYocz1pLl9idWJibGVFdmVudChvLGUs
bikpLHN9KSxlLm9uKHQrIi5lbWJlciIsIltkYXRhLWVtYmVyLWFjdGlvbl0iLGZ1bmN0aW9uKGUp
e3ZhciB0LHIsaSxvLGE9ZS5jdXJyZW50VGFyZ2V0LmF0dHJpYnV0ZXMsdT1bXQotZm9yKHQ9MDt0
PGEubGVuZ3RoO3QrKylyPWEuaXRlbSh0KSxpPXIubmFtZSwtMSE9PWkubGFzdEluZGV4T2YoImRh
dGEtZW1iZXItYWN0aW9uLSIsMCkmJihvPXMuZGVmYXVsdC5yZWdpc3RlcmVkQWN0aW9uc1tyLnZh
bHVlXSkmJm8uZXZlbnROYW1lPT09biYmLTE9PT11LmluZGV4T2YobykmJihvLmhhbmRsZXIoZSks
dS5wdXNoKG8pKX0pKX0sX2dldFZpZXdSZWdpc3RyeTpmdW5jdGlvbigpe3ZhciBlPSgwLHQuZ2V0
T3duZXIpKHRoaXMpCi1yZXR1cm4gZSYmZS5sb29rdXAoIi12aWV3LXJlZ2lzdHJ5Om1haW4iKXx8
dS5kZWZhdWx0fSxfZmluZE5lYXJlc3RFdmVudE1hbmFnZXI6ZnVuY3Rpb24oZSx0KXtmb3IodmFy
IG49bnVsbDtlJiYoIShuPSgwLHIuZ2V0KShlLCJldmVudE1hbmFnZXIiKSl8fCFuW3RdKTspZT0o
MCxyLmdldCkoZSwicGFyZW50VmlldyIpCi1yZXR1cm4gbn0sX2Rpc3BhdGNoRXZlbnQ6ZnVuY3Rp
b24oZSx0LG4saSl7dmFyIG89ITAscz1lW25dCi1yZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygcz8o
bz0oMCxyLnJ1bikoZSxzLHQsaSksdC5zdG9wUHJvcGFnYXRpb24oKSk6bz10aGlzLl9idWJibGVF
dmVudChpLHQsbiksb30sX2J1YmJsZUV2ZW50OmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZS5oYW5k
bGVFdmVudChuLHQpfSxkZXN0cm95OmZ1bmN0aW9uKCl7dmFyIGU9KDAsci5nZXQpKHRoaXMsInJv
b3RFbGVtZW50IikKLXJldHVybigwLG8uZGVmYXVsdCkoZSkub2ZmKCIuZW1iZXIiLCIqKiIpLnJl
bW92ZUNsYXNzKCJlbWJlci1hcHBsaWNhdGlvbiIpLHRoaXMuX3N1cGVyLmFwcGx5KHRoaXMsYXJn
dW1lbnRzKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iKEV2ZW50RGlzcGF0Y2hlcikifX0p
fSksZSgiZW1iZXItdmlld3Mvc3lzdGVtL2V4dCIsWyJlbWJlci1tZXRhbCJdLGZ1bmN0aW9uKGUp
eyJ1c2Ugc3RyaWN0IgotZS5ydW4uX2FkZFF1ZXVlKCJyZW5kZXIiLCJhY3Rpb25zIiksZS5ydW4u
X2FkZFF1ZXVlKCJhZnRlclJlbmRlciIsInJlbmRlciIpfSksZSgiZW1iZXItdmlld3Mvc3lzdGVt
L2pxdWVyeSIsWyJleHBvcnRzIiwiZW1iZXItZW52aXJvbm1lbnQiXSxmdW5jdGlvbihlLHQpeyJ1
c2Ugc3RyaWN0IgotdmFyIG49dm9pZCAwCi10LmVudmlyb25tZW50Lmhhc0RPTSYmKG49dC5jb250
ZXh0LmltcG9ydHMualF1ZXJ5KSYmKG4uZXZlbnQuYWRkUHJvcD9uLmV2ZW50LmFkZFByb3AoImRh
dGFUcmFuc2ZlciIpOlsiZHJhZ3N0YXJ0IiwiZHJhZyIsImRyYWdlbnRlciIsImRyYWdsZWF2ZSIs
ImRyYWdvdmVyIiwiZHJvcCIsImRyYWdlbmQiXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe24uZXZlbnQu
Zml4SG9va3NbZV09e3Byb3BzOlsiZGF0YVRyYW5zZmVyIl19fSkpLGUuZGVmYXVsdD1ufSksZSgi
ZW1iZXItdmlld3Mvc3lzdGVtL2xvb2t1cF9wYXJ0aWFsIixbImV4cG9ydHMiLCJlbWJlci1kZWJ1
ZyJdLGZ1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiCi1mdW5jdGlvbiBuKGUpe3ZhciB0PWUuc3Bs
aXQoIi8iKSxuPXRbdC5sZW5ndGgtMV0KLXJldHVybiB0W3QubGVuZ3RoLTFdPSJfIituLHQuam9p
bigiLyIpfWZ1bmN0aW9uIHIoZSxuLHIpe2lmKHIpe2lmKCFlKXRocm93IG5ldyB0LkVycm9yKCJD
b250YWluZXIgd2FzIG5vdCBmb3VuZCB3aGVuIGxvb2tpbmcgdXAgYSB2aWV3cyB0ZW1wbGF0ZS4g
VGhpcyBpcyBtb3N0IGxpa2VseSBkdWUgdG8gbWFudWFsbHkgaW5zdGFudGlhdGluZyBhbiBFbWJl
ci5WaWV3LiBTZWU6IGh0dHA6Ly9naXQuaW8vRUtQcG5BIikKLXJldHVybiBlLmxvb2t1cCgidGVt
cGxhdGU6IituKXx8ZS5sb29rdXAoInRlbXBsYXRlOiIrcil9fWUuZGVmYXVsdD1mdW5jdGlvbihl
LHQpe2lmKG51bGwhPWUpe3ZhciBpPXIodCxuKGUpLGUpCi1yZXR1cm4gaX19LGUuaGFzUGFydGlh
bD1mdW5jdGlvbihlLHIpe2lmKCFyKXRocm93IG5ldyB0LkVycm9yKCJDb250YWluZXIgd2FzIG5v
dCBmb3VuZCB3aGVuIGxvb2tpbmcgdXAgYSB2aWV3cyB0ZW1wbGF0ZS4gVGhpcyBpcyBtb3N0IGxp
a2VseSBkdWUgdG8gbWFudWFsbHkgaW5zdGFudGlhdGluZyBhbiBFbWJlci5WaWV3LiBTZWU6IGh0
dHA6Ly9naXQuaW8vRUtQcG5BIikKLXJldHVybiByLmhhc1JlZ2lzdHJhdGlvbigidGVtcGxhdGU6
IituKGUpKXx8ci5oYXNSZWdpc3RyYXRpb24oInRlbXBsYXRlOiIrZSl9fSksZSgiZW1iZXItdmll
d3Mvc3lzdGVtL3V0aWxzIixbImV4cG9ydHMiLCJlbWJlci11dGlscyJdLGZ1bmN0aW9uKGUsdCl7
InVzZSBzdHJpY3QiCi1mdW5jdGlvbiBuKGUpe3JldHVybiIiPT09ZS50YWdOYW1lPygwLHQuZ3Vp
ZEZvcikoZSk6ZS5lbGVtZW50SWR8fCgwLHQuZ3VpZEZvcikoZSl9ZnVuY3Rpb24gcihlLHQpe3Zh
ciBuPVtdLHI9W10KLXJldHVybiBlW2FdLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIGk9dFtlXQot
IWl8fGkuaXNEZXN0cm95aW5nfHxpLmlzRGVzdHJveWVkfHwtMSE9PW4uaW5kZXhPZihlKXx8KG4u
cHVzaChlKSxyLnB1c2goaSkpfSksZVthXT1uLHJ9ZnVuY3Rpb24gaShlKXtyZXR1cm4gZS5yZW5k
ZXJlci5nZXRCb3VuZHMoZSl9ZnVuY3Rpb24gbyhlKXt2YXIgdD1pKGUpLG49ZG9jdW1lbnQuY3Jl
YXRlUmFuZ2UoKQotcmV0dXJuIG4uc2V0U3RhcnRCZWZvcmUodC5maXJzdE5vZGUpLG4uc2V0RW5k
QWZ0ZXIodC5sYXN0Tm9kZSksbn1lLmVsTWF0Y2hlcz12b2lkIDAsZS5pc1NpbXBsZUNsaWNrPWZ1
bmN0aW9uKGUpe3ZhciB0PWUuc2hpZnRLZXl8fGUubWV0YUtleXx8ZS5hbHRLZXl8fGUuY3RybEtl
eSxuPWUud2hpY2g+MQotcmV0dXJuIXQmJiFufSxlLmNvbnN0cnVjdFN0eWxlRGVwcmVjYXRpb25N
ZXNzYWdlPWZ1bmN0aW9uKGUpe3JldHVybidCaW5kaW5nIHN0eWxlIGF0dHJpYnV0ZXMgbWF5IGlu
dHJvZHVjZSBjcm9zcy1zaXRlIHNjcmlwdGluZyB2dWxuZXJhYmlsaXRpZXM7IHBsZWFzZSBlbnN1
cmUgdGhhdCB2YWx1ZXMgYmVpbmcgYm91bmQgYXJlIHByb3Blcmx5IGVzY2FwZWQuIEZvciBtb3Jl
IGluZm9ybWF0aW9uLCBpbmNsdWRpbmcgaG93IHRvIGRpc2FibGUgdGhpcyB3YXJuaW5nLCBzZWUg
aHR0cDovL2VtYmVyanMuY29tL2RlcHJlY2F0aW9ucy92MS54LyN0b2NfYmluZGluZy1zdHlsZS1h
dHRyaWJ1dGVzLiBTdHlsZSBhZmZlY3RlZDogIicrZSsnIid9LGUuZ2V0Um9vdFZpZXdzPWZ1bmN0
aW9uKGUpe3ZhciB0PWUubG9va3VwKCItdmlldy1yZWdpc3RyeTptYWluIiksbj1bXQotcmV0dXJu
IE9iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHI9dFtlXQotbnVsbD09PXIu
cGFyZW50VmlldyYmbi5wdXNoKHIpfSksbn0sZS5nZXRWaWV3SWQ9bixlLmdldFZpZXdFbGVtZW50
PWZ1bmN0aW9uKGUpe3JldHVybiBlW3NdfSxlLmluaXRWaWV3RWxlbWVudD1mdW5jdGlvbihlKXtl
W3NdPW51bGx9LGUuc2V0Vmlld0VsZW1lbnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZVtzXT10fSxl
LmdldENoaWxkVmlld3M9ZnVuY3Rpb24oZSl7cmV0dXJuIHIoZSwoMCx0LmdldE93bmVyKShlKS5s
b29rdXAoIi12aWV3LXJlZ2lzdHJ5Om1haW4iKSl9LGUuaW5pdENoaWxkVmlld3M9ZnVuY3Rpb24o
ZSl7ZVthXT1bXX0sZS5hZGRDaGlsZFZpZXc9ZnVuY3Rpb24oZSx0KXtlW2FdLnB1c2gobih0KSl9
LGUuY29sbGVjdENoaWxkVmlld3M9cixlLmdldFZpZXdCb3VuZHM9aSxlLmdldFZpZXdSYW5nZT1v
LGUuZ2V0Vmlld0NsaWVudFJlY3RzPWZ1bmN0aW9uKGUpe3JldHVybiBvKGUpLmdldENsaWVudFJl
Y3RzKCl9LGUuZ2V0Vmlld0JvdW5kaW5nQ2xpZW50UmVjdD1mdW5jdGlvbihlKXtyZXR1cm4gbyhl
KS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKX0sZS5tYXRjaGVzPWZ1bmN0aW9uKGUsdCl7cmV0dXJu
IHUuY2FsbChlLHQpfQotdmFyIHM9KDAsdC5zeW1ib2wpKCJWSUVXX0VMRU1FTlQiKSxhPSgwLHQu
c3ltYm9sKSgiQ0hJTERfVklFV19JRFMiKSx1PWUuZWxNYXRjaGVzPSJ1bmRlZmluZWQiIT10eXBl
b2YgRWxlbWVudCYmKEVsZW1lbnQucHJvdG90eXBlLm1hdGNoZXN8fEVsZW1lbnQucHJvdG90eXBl
Lm1hdGNoZXNTZWxlY3Rvcnx8RWxlbWVudC5wcm90b3R5cGUubW96TWF0Y2hlc1NlbGVjdG9yfHxF
bGVtZW50LnByb3RvdHlwZS5tc01hdGNoZXNTZWxlY3Rvcnx8RWxlbWVudC5wcm90b3R5cGUub01h
dGNoZXNTZWxlY3Rvcnx8RWxlbWVudC5wcm90b3R5cGUud2Via2l0TWF0Y2hlc1NlbGVjdG9yKX0p
LGUoImVtYmVyLXZpZXdzL3V0aWxzL2xvb2t1cC1jb21wb25lbnQiLFsiZXhwb3J0cyIsImVtYmVy
LWJhYmVsIiwiY29udGFpbmVyIl0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IgotZnVuY3Rp
b24gcihlLHQscixvKXt2YXIgcz1lLmNvbXBvbmVudEZvcihyLHQsbyksYT1lLmxheW91dEZvcihy
LHQsbyksdT17bGF5b3V0OmEsY29tcG9uZW50OnN9Ci1yZXR1cm4gYSYmIXMmJih1LmNvbXBvbmVu
dD10LmZhY3RvcnlGb3IoKDAsbi5wcml2YXRpemUpKGkpKSksdX1lLmRlZmF1bHQ9ZnVuY3Rpb24o
ZSx0LG4pe3ZhciBpLG89ZS5sb29rdXAoImNvbXBvbmVudC1sb29rdXA6bWFpbiIpCi1yZXR1cm4g
biYmbi5zb3VyY2UmJihpPXIobyxlLHQsbiksaS5jb21wb25lbnR8fGkubGF5b3V0KT9pOnIobyxl
LHQpfQotdmFyIGk9KDAsdC50YWdnZWRUZW1wbGF0ZUxpdGVyYWxMb29zZSkoWyJjb21wb25lbnQ6
LWRlZmF1bHQiXSxbImNvbXBvbmVudDotZGVmYXVsdCJdKX0pLGUoImVtYmVyLXZpZXdzL3ZpZXdz
L2NvcmVfdmlldyIsWyJleHBvcnRzIiwiZW1iZXItcnVudGltZSIsImVtYmVyLXZpZXdzL3N5c3Rl
bS91dGlscyIsImVtYmVyLXZpZXdzL3ZpZXdzL3N0YXRlcyJdLGZ1bmN0aW9uKGUsdCxuLHIpeyJ1
c2Ugc3RyaWN0IgotdmFyIGk9dC5GcmFtZXdvcmtPYmplY3QuZXh0ZW5kKHQuRXZlbnRlZCx0LkFj
dGlvbkhhbmRsZXIse2lzVmlldzohMCxfc3RhdGVzOigwLHIuY2xvbmVTdGF0ZXMpKHIuc3RhdGVz
KSxpbml0OmZ1bmN0aW9uKCl7aWYodGhpcy5fc3VwZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRo
aXMuX3N0YXRlPSJwcmVSZW5kZXIiLHRoaXMuX2N1cnJlbnRTdGF0ZT10aGlzLl9zdGF0ZXMucHJl
UmVuZGVyLCgwLG4uaW5pdFZpZXdFbGVtZW50KSh0aGlzKSwhdGhpcy5yZW5kZXJlcil0aHJvdyBu
ZXcgRXJyb3IoIkNhbm5vdCBpbnN0YW50aWF0ZSBhIGNvbXBvbmVudCB3aXRob3V0IGEgcmVuZGVy
ZXIuIFBsZWFzZSBlbnN1cmUgdGhhdCB5b3UgYXJlIGNyZWF0aW5nICIrdGhpcysiIHdpdGggYSBw
cm9wZXIgY29udGFpbmVyL3JlZ2lzdHJ5LiIpfSxwYXJlbnRWaWV3Om51bGwsaW5zdHJ1bWVudERl
dGFpbHM6ZnVuY3Rpb24oZSl7cmV0dXJuIGUub2JqZWN0PXRoaXMudG9TdHJpbmcoKSxlLmNvbnRh
aW5lcktleT10aGlzLl9kZWJ1Z0NvbnRhaW5lcktleSxlLnZpZXc9dGhpcyxlfSx0cmlnZ2VyOmZ1
bmN0aW9uKCl7dGhpcy5fc3VwZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpCi12YXIgZSx0LG49YXJn
dW1lbnRzWzBdLHI9dGhpc1tuXQotaWYoImZ1bmN0aW9uIj09dHlwZW9mIHIpe2ZvcihlPW5ldyBB
cnJheShhcmd1bWVudHMubGVuZ3RoLTEpLHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKWVbdC0x
XT1hcmd1bWVudHNbdF0KLXJldHVybiByLmFwcGx5KHRoaXMsZSl9fSxoYXM6ZnVuY3Rpb24oZSl7
cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHRoaXNbZV18fHRoaXMuX3N1cGVyKGUpfX0pOygwLHQu
ZGVwcmVjYXRlVW5kZXJzY29yZUFjdGlvbnMpKGkpLGkucmVvcGVuQ2xhc3Moe2lzVmlld0ZhY3Rv
cnk6ITB9KSxlLmRlZmF1bHQ9aX0pLGUoImVtYmVyLXZpZXdzL3ZpZXdzL3N0YXRlcyIsWyJleHBv
cnRzIiwiZW1iZXItdXRpbHMiLCJlbWJlci12aWV3cy92aWV3cy9zdGF0ZXMvZGVmYXVsdCIsImVt
YmVyLXZpZXdzL3ZpZXdzL3N0YXRlcy9wcmVfcmVuZGVyIiwiZW1iZXItdmlld3Mvdmlld3Mvc3Rh
dGVzL2hhc19lbGVtZW50IiwiZW1iZXItdmlld3Mvdmlld3Mvc3RhdGVzL2luX2RvbSIsImVtYmVy
LXZpZXdzL3ZpZXdzL3N0YXRlcy9kZXN0cm95aW5nIl0sZnVuY3Rpb24oZSx0LG4scixpLG8scyl7
InVzZSBzdHJpY3QiCi1lLnN0YXRlcz12b2lkIDAsZS5jbG9uZVN0YXRlcz1mdW5jdGlvbihlKXt2
YXIgbj17fQotbi5fZGVmYXVsdD17fSxuLnByZVJlbmRlcj1PYmplY3QuY3JlYXRlKG4uX2RlZmF1
bHQpLG4uZGVzdHJveWluZz1PYmplY3QuY3JlYXRlKG4uX2RlZmF1bHQpLG4uaGFzRWxlbWVudD1P
YmplY3QuY3JlYXRlKG4uX2RlZmF1bHQpLG4uaW5ET009T2JqZWN0LmNyZWF0ZShuLmhhc0VsZW1l
bnQpCi1mb3IodmFyIHIgaW4gZSllLmhhc093blByb3BlcnR5KHIpJiYoMCx0LmFzc2lnbikoblty
XSxlW3JdKQotcmV0dXJuIG59LGUuc3RhdGVzPXtfZGVmYXVsdDpuLmRlZmF1bHQscHJlUmVuZGVy
OnIuZGVmYXVsdCxpbkRPTTpvLmRlZmF1bHQsaGFzRWxlbWVudDppLmRlZmF1bHQsZGVzdHJveWlu
ZzpzLmRlZmF1bHR9fSksZSgiZW1iZXItdmlld3Mvdmlld3Mvc3RhdGVzL2RlZmF1bHQiLFsiZXhw
b3J0cyIsImVtYmVyLWRlYnVnIl0sZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCIKLWUuZGVmYXVs
dD17YXBwZW5kQ2hpbGQ6ZnVuY3Rpb24oKXt0aHJvdyBuZXcgdC5FbWJlckVycm9yKCJZb3UgY2Fu
J3QgdXNlIGFwcGVuZENoaWxkIG91dHNpZGUgb2YgdGhlIHJlbmRlcmluZyBwcm9jZXNzIil9LGhh
bmRsZUV2ZW50OmZ1bmN0aW9uKCl7cmV0dXJuITB9LHJlcmVuZGVyOmZ1bmN0aW9uKCl7fSxkZXN0
cm95OmZ1bmN0aW9uKCl7fX19KSxlKCJlbWJlci12aWV3cy92aWV3cy9zdGF0ZXMvZGVzdHJveWlu
ZyIsWyJleHBvcnRzIiwiZW1iZXItdXRpbHMiLCJlbWJlci1kZWJ1ZyIsImVtYmVyLXZpZXdzL3Zp
ZXdzL3N0YXRlcy9kZWZhdWx0Il0sZnVuY3Rpb24oZSx0LG4scil7InVzZSBzdHJpY3QiCi12YXIg
aT1PYmplY3QuY3JlYXRlKHIuZGVmYXVsdCk7KDAsdC5hc3NpZ24pKGkse2FwcGVuZENoaWxkOmZ1
bmN0aW9uKCl7dGhyb3cgbmV3IG4uRXJyb3IoIllvdSBjYW4ndCBjYWxsIGFwcGVuZENoaWxkIG9u
IGEgdmlldyBiZWluZyBkZXN0cm95ZWQiKX0scmVyZW5kZXI6ZnVuY3Rpb24oKXt0aHJvdyBuZXcg
bi5FcnJvcigiWW91IGNhbid0IGNhbGwgcmVyZW5kZXIgb24gYSB2aWV3IGJlaW5nIGRlc3Ryb3ll
ZCIpfX0pLGUuZGVmYXVsdD1pfSksZSgiZW1iZXItdmlld3Mvdmlld3Mvc3RhdGVzL2hhc19lbGVt
ZW50IixbImV4cG9ydHMiLCJlbWJlci11dGlscyIsImVtYmVyLXZpZXdzL3ZpZXdzL3N0YXRlcy9k
ZWZhdWx0IiwiZW1iZXItbWV0YWwiXSxmdW5jdGlvbihlLHQsbixyKXsidXNlIHN0cmljdCIKLXZh
ciBpPU9iamVjdC5jcmVhdGUobi5kZWZhdWx0KTsoMCx0LmFzc2lnbikoaSx7cmVyZW5kZXI6ZnVu
Y3Rpb24oZSl7ZS5yZW5kZXJlci5yZXJlbmRlcihlKX0sZGVzdHJveTpmdW5jdGlvbihlKXtlLnJl
bmRlcmVyLnJlbW92ZShlKX0saGFuZGxlRXZlbnQ6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiFlLmhh
cyh0KXx8KDAsci5mbGFnZ2VkSW5zdHJ1bWVudCkoImludGVyYWN0aW9uLiIrdCx7ZXZlbnQ6bix2
aWV3OmV9LGZ1bmN0aW9uKCl7cmV0dXJuIHIucnVuLmpvaW4oZSxlLnRyaWdnZXIsdCxuKX0pfX0p
LGUuZGVmYXVsdD1pfSksZSgiZW1iZXItdmlld3Mvdmlld3Mvc3RhdGVzL2luX2RvbSIsWyJleHBv
cnRzIiwiZW1iZXItdXRpbHMiLCJlbWJlci1tZXRhbCIsImVtYmVyLWRlYnVnIiwiZW1iZXItdmll
d3Mvdmlld3Mvc3RhdGVzL2hhc19lbGVtZW50Il0sZnVuY3Rpb24oZSx0LG4scixpKXsidXNlIHN0
cmljdCIKLXZhciBvPU9iamVjdC5jcmVhdGUoaS5kZWZhdWx0KTsoMCx0LmFzc2lnbikobyx7ZW50
ZXI6ZnVuY3Rpb24oZSl7ZS5yZW5kZXJlci5yZWdpc3RlcihlKX0sZXhpdDpmdW5jdGlvbihlKXtl
LnJlbmRlcmVyLnVucmVnaXN0ZXIoZSl9fSksZS5kZWZhdWx0PW99KSxlKCJlbWJlci12aWV3cy92
aWV3cy9zdGF0ZXMvcHJlX3JlbmRlciIsWyJleHBvcnRzIiwiZW1iZXItdmlld3Mvdmlld3Mvc3Rh
dGVzL2RlZmF1bHQiXSxmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0IgotZS5kZWZhdWx0PU9iamVj
dC5jcmVhdGUodC5kZWZhdWx0KX0pLGUoImVtYmVyL2ZlYXR1cmVzIixbImV4cG9ydHMiLCJlbWJl
ci1lbnZpcm9ubWVudCIsImVtYmVyLXV0aWxzIl0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0
IgotZS5FTUJFUl9HTElNTUVSX0RFVEVDVF9CQUNLVFJBQ0tJTkdfUkVSRU5ERVI9ZS5NQU5EQVRP
UllfU0VUVEVSPWUuRU1CRVJfUk9VVElOR19ST1VURVJfU0VSVklDRT1lLkVNQkVSX0dMSU1NRVJf
QUxMT1dfQkFDS1RSQUNLSU5HX1JFUkVOREVSPWUuRU1CRVJfTUVUQUxfV0VBS01BUD1lLkVNQkVS
X0lNUFJPVkVEX0lOU1RSVU1FTlRBVElPTj1lLkVNQkVSX0xJQlJBUklFU19JU1JFR0lTVEVSRUQ9
ZS5GRUFUVVJFU19TVFJJUFBFRF9URVNUPWUuRkVBVFVSRVM9ZS5ERUZBVUxUX0ZFQVRVUkVTPXZv
aWQgMAotdmFyIHI9ZS5ERUZBVUxUX0ZFQVRVUkVTPXsiZmVhdHVyZXMtc3RyaXBwZWQtdGVzdCI6
ITEsImVtYmVyLWxpYnJhcmllcy1pc3JlZ2lzdGVyZWQiOiExLCJlbWJlci1pbXByb3ZlZC1pbnN0
cnVtZW50YXRpb24iOiExLCJlbWJlci1tZXRhbC13ZWFrbWFwIjohMSwiZW1iZXItZ2xpbW1lci1h
bGxvdy1iYWNrdHJhY2tpbmctcmVyZW5kZXIiOiExLCJlbWJlci1yb3V0aW5nLXJvdXRlci1zZXJ2
aWNlIjohMSwibWFuZGF0b3J5LXNldHRlciI6ITEsImVtYmVyLWdsaW1tZXItZGV0ZWN0LWJhY2t0
cmFja2luZy1yZXJlbmRlciI6ITF9LGk9ZS5GRUFUVVJFUz0oMCxuLmFzc2lnbikocix0LkVOVi5G
RUFUVVJFUykKLWUuRkVBVFVSRVNfU1RSSVBQRURfVEVTVD1pWyJmZWF0dXJlcy1zdHJpcHBlZC10
ZXN0Il0sZS5FTUJFUl9MSUJSQVJJRVNfSVNSRUdJU1RFUkVEPWlbImVtYmVyLWxpYnJhcmllcy1p
c3JlZ2lzdGVyZWQiXSxlLkVNQkVSX0lNUFJPVkVEX0lOU1RSVU1FTlRBVElPTj1pWyJlbWJlci1p
bXByb3ZlZC1pbnN0cnVtZW50YXRpb24iXSxlLkVNQkVSX01FVEFMX1dFQUtNQVA9aVsiZW1iZXIt
bWV0YWwtd2Vha21hcCJdLGUuRU1CRVJfR0xJTU1FUl9BTExPV19CQUNLVFJBQ0tJTkdfUkVSRU5E
RVI9aVsiZW1iZXItZ2xpbW1lci1hbGxvdy1iYWNrdHJhY2tpbmctcmVyZW5kZXIiXSxlLkVNQkVS
X1JPVVRJTkdfUk9VVEVSX1NFUlZJQ0U9aVsiZW1iZXItcm91dGluZy1yb3V0ZXItc2VydmljZSJd
LGUuTUFOREFUT1JZX1NFVFRFUj1pWyJtYW5kYXRvcnktc2V0dGVyIl0sZS5FTUJFUl9HTElNTUVS
X0RFVEVDVF9CQUNLVFJBQ0tJTkdfUkVSRU5ERVI9aVsiZW1iZXItZ2xpbW1lci1kZXRlY3QtYmFj
a3RyYWNraW5nLXJlcmVuZGVyIl19KSxlKCJlbWJlci9pbmRleCIsWyJleHBvcnRzIiwicmVxdWly
ZSIsImVtYmVyLWVudmlyb25tZW50Iiwibm9kZS1tb2R1bGUiLCJlbWJlci11dGlscyIsImNvbnRh
aW5lciIsImVtYmVyLW1ldGFsIiwiZW1iZXIvZmVhdHVyZXMiLCJlbWJlci1kZWJ1ZyIsImJhY2ti
dXJuZXIiLCJlbWJlci1jb25zb2xlIiwiZW1iZXItcnVudGltZSIsImVtYmVyLWdsaW1tZXIiLCJl
bWJlci92ZXJzaW9uIiwiZW1iZXItdmlld3MiLCJlbWJlci1yb3V0aW5nIiwiZW1iZXItYXBwbGlj
YXRpb24iLCJlbWJlci1leHRlbnNpb24tc3VwcG9ydCJdLGZ1bmN0aW9uKGUsdCxuLHIsaSxvLHMs
YSx1LGwsYyxwLGYsaCxkLG0sZyx5KXsidXNlIHN0cmljdCIKLWZ1bmN0aW9uIHYoKXtyZXR1cm4g
dGhpc31lLlZFUlNJT049dm9pZCAwLHMuZGVmYXVsdC5nZXRPd25lcj1pLmdldE93bmVyLHMuZGVm
YXVsdC5zZXRPd25lcj1pLnNldE93bmVyLHMuZGVmYXVsdC5nZW5lcmF0ZUd1aWQ9aS5nZW5lcmF0
ZUd1aWQscy5kZWZhdWx0LkdVSURfS0VZPWkuR1VJRF9LRVkscy5kZWZhdWx0Lmd1aWRGb3I9aS5n
dWlkRm9yLHMuZGVmYXVsdC5pbnNwZWN0PWkuaW5zcGVjdCxzLmRlZmF1bHQubWFrZUFycmF5PWku
bWFrZUFycmF5LHMuZGVmYXVsdC5jYW5JbnZva2U9aS5jYW5JbnZva2Uscy5kZWZhdWx0LnRyeUlu
dm9rZT1pLnRyeUludm9rZSxzLmRlZmF1bHQud3JhcD1pLndyYXAscy5kZWZhdWx0LmFwcGx5U3Ry
PWkuYXBwbHlTdHIscy5kZWZhdWx0LnV1aWQ9aS51dWlkLHMuZGVmYXVsdC5hc3NpZ249aS5hc3Np
Z24scy5kZWZhdWx0LkNvbnRhaW5lcj1vLkNvbnRhaW5lcixzLmRlZmF1bHQuUmVnaXN0cnk9by5S
ZWdpc3RyeQotdmFyIGIsXz1zLmNvbXB1dGVkCi1fLmFsaWFzPXMuYWxpYXMscy5kZWZhdWx0LmNv
bXB1dGVkPV8scy5kZWZhdWx0LkNvbXB1dGVkUHJvcGVydHk9cy5Db21wdXRlZFByb3BlcnR5LHMu
ZGVmYXVsdC5jYWNoZUZvcj1zLmNhY2hlRm9yLHMuZGVmYXVsdC5hc3NlcnQ9dS5hc3NlcnQscy5k
ZWZhdWx0Lndhcm49dS53YXJuLHMuZGVmYXVsdC5kZWJ1Zz11LmRlYnVnLHMuZGVmYXVsdC5kZXBy
ZWNhdGU9dS5kZXByZWNhdGUscy5kZWZhdWx0LmRlcHJlY2F0ZUZ1bmM9dS5kZXByZWNhdGVGdW5j
LHMuZGVmYXVsdC5ydW5JbkRlYnVnPXUucnVuSW5EZWJ1ZyxzLmRlZmF1bHQuRGVidWc9e3JlZ2lz
dGVyRGVwcmVjYXRpb25IYW5kbGVyOnUucmVnaXN0ZXJEZXByZWNhdGlvbkhhbmRsZXIscmVnaXN0
ZXJXYXJuSGFuZGxlcjp1LnJlZ2lzdGVyV2FybkhhbmRsZXJ9LHMuZGVmYXVsdC5tZXJnZT1zLm1l
cmdlLHMuZGVmYXVsdC5pbnN0cnVtZW50PXMuaW5zdHJ1bWVudCxzLmRlZmF1bHQuc3Vic2NyaWJl
PXMuaW5zdHJ1bWVudGF0aW9uU3Vic2NyaWJlLHMuZGVmYXVsdC5JbnN0cnVtZW50YXRpb249e2lu
c3RydW1lbnQ6cy5pbnN0cnVtZW50LHN1YnNjcmliZTpzLmluc3RydW1lbnRhdGlvblN1YnNjcmli
ZSx1bnN1YnNjcmliZTpzLmluc3RydW1lbnRhdGlvblVuc3Vic2NyaWJlLHJlc2V0OnMuaW5zdHJ1
bWVudGF0aW9uUmVzZXR9LHMuZGVmYXVsdC5FcnJvcj11LkVycm9yLHMuZGVmYXVsdC5NRVRBX0RF
U0M9cy5NRVRBX0RFU0Mscy5kZWZhdWx0Lm1ldGE9cy5tZXRhLHMuZGVmYXVsdC5nZXQ9cy5nZXQs
cy5kZWZhdWx0LmdldFdpdGhEZWZhdWx0PXMuZ2V0V2l0aERlZmF1bHQscy5kZWZhdWx0Ll9nZXRQ
YXRoPXMuX2dldFBhdGgscy5kZWZhdWx0LnNldD1zLnNldCxzLmRlZmF1bHQudHJ5U2V0PXMudHJ5
U2V0LHMuZGVmYXVsdC5GRUFUVVJFUz1hLkZFQVRVUkVTLHMuZGVmYXVsdC5GRUFUVVJFUy5pc0Vu
YWJsZWQ9dS5pc0ZlYXR1cmVFbmFibGVkLHMuZGVmYXVsdC5fQ2FjaGU9cy5DYWNoZSxzLmRlZmF1
bHQub249cy5vbixzLmRlZmF1bHQuYWRkTGlzdGVuZXI9cy5hZGRMaXN0ZW5lcixzLmRlZmF1bHQu
cmVtb3ZlTGlzdGVuZXI9cy5yZW1vdmVMaXN0ZW5lcixzLmRlZmF1bHQuX3N1c3BlbmRMaXN0ZW5l
cj1zLnN1c3BlbmRMaXN0ZW5lcgotcy5kZWZhdWx0Ll9zdXNwZW5kTGlzdGVuZXJzPXMuc3VzcGVu
ZExpc3RlbmVycyxzLmRlZmF1bHQuc2VuZEV2ZW50PXMuc2VuZEV2ZW50LHMuZGVmYXVsdC5oYXNM
aXN0ZW5lcnM9cy5oYXNMaXN0ZW5lcnMscy5kZWZhdWx0LndhdGNoZWRFdmVudHM9cy53YXRjaGVk
RXZlbnRzLHMuZGVmYXVsdC5saXN0ZW5lcnNGb3I9cy5saXN0ZW5lcnNGb3Iscy5kZWZhdWx0LmFj
Y3VtdWxhdGVMaXN0ZW5lcnM9cy5hY2N1bXVsYXRlTGlzdGVuZXJzLHMuZGVmYXVsdC5pc05vbmU9
cy5pc05vbmUscy5kZWZhdWx0LmlzRW1wdHk9cy5pc0VtcHR5LHMuZGVmYXVsdC5pc0JsYW5rPXMu
aXNCbGFuayxzLmRlZmF1bHQuaXNQcmVzZW50PXMuaXNQcmVzZW50LHMuZGVmYXVsdC5ydW49cy5y
dW4scy5kZWZhdWx0Ll9PYnNlcnZlclNldD1zLk9ic2VydmVyU2V0LHMuZGVmYXVsdC5wcm9wZXJ0
eVdpbGxDaGFuZ2U9cy5wcm9wZXJ0eVdpbGxDaGFuZ2Uscy5kZWZhdWx0LnByb3BlcnR5RGlkQ2hh
bmdlPXMucHJvcGVydHlEaWRDaGFuZ2Uscy5kZWZhdWx0Lm92ZXJyaWRlQ2hhaW5zPXMub3ZlcnJp
ZGVDaGFpbnMscy5kZWZhdWx0LmJlZ2luUHJvcGVydHlDaGFuZ2VzPXMuYmVnaW5Qcm9wZXJ0eUNo
YW5nZXMscy5kZWZhdWx0LmVuZFByb3BlcnR5Q2hhbmdlcz1zLmVuZFByb3BlcnR5Q2hhbmdlcyxz
LmRlZmF1bHQuY2hhbmdlUHJvcGVydGllcz1zLmNoYW5nZVByb3BlcnRpZXMscy5kZWZhdWx0LnBs
YXRmb3JtPXtkZWZpbmVQcm9wZXJ0eTohMCxoYXNQcm9wZXJ0eUFjY2Vzc29yczohMH0scy5kZWZh
dWx0LmRlZmluZVByb3BlcnR5PXMuZGVmaW5lUHJvcGVydHkscy5kZWZhdWx0LndhdGNoS2V5PXMu
d2F0Y2hLZXkscy5kZWZhdWx0LnVud2F0Y2hLZXk9cy51bndhdGNoS2V5LHMuZGVmYXVsdC5yZW1v
dmVDaGFpbldhdGNoZXI9cy5yZW1vdmVDaGFpbldhdGNoZXIscy5kZWZhdWx0Ll9DaGFpbk5vZGU9
cy5DaGFpbk5vZGUscy5kZWZhdWx0LmZpbmlzaENoYWlucz1zLmZpbmlzaENoYWlucyxzLmRlZmF1
bHQud2F0Y2hQYXRoPXMud2F0Y2hQYXRoLHMuZGVmYXVsdC51bndhdGNoUGF0aD1zLnVud2F0Y2hQ
YXRoLHMuZGVmYXVsdC53YXRjaD1zLndhdGNoLHMuZGVmYXVsdC5pc1dhdGNoaW5nPXMuaXNXYXRj
aGluZyxzLmRlZmF1bHQudW53YXRjaD1zLnVud2F0Y2gKLXMuZGVmYXVsdC5kZXN0cm95PXMuZGVz
dHJveSxzLmRlZmF1bHQubGlicmFyaWVzPXMubGlicmFyaWVzLHMuZGVmYXVsdC5PcmRlcmVkU2V0
PXMuT3JkZXJlZFNldCxzLmRlZmF1bHQuTWFwPXMuTWFwLHMuZGVmYXVsdC5NYXBXaXRoRGVmYXVs
dD1zLk1hcFdpdGhEZWZhdWx0LHMuZGVmYXVsdC5nZXRQcm9wZXJ0aWVzPXMuZ2V0UHJvcGVydGll
cyxzLmRlZmF1bHQuc2V0UHJvcGVydGllcz1zLnNldFByb3BlcnRpZXMscy5kZWZhdWx0LmV4cGFu
ZFByb3BlcnRpZXM9cy5leHBhbmRQcm9wZXJ0aWVzLHMuZGVmYXVsdC5OQU1FX0tFWT1pLk5BTUVf
S0VZLHMuZGVmYXVsdC5hZGRPYnNlcnZlcj1zLmFkZE9ic2VydmVyLHMuZGVmYXVsdC5vYnNlcnZl
cnNGb3I9cy5vYnNlcnZlcnNGb3Iscy5kZWZhdWx0LnJlbW92ZU9ic2VydmVyPXMucmVtb3ZlT2Jz
ZXJ2ZXIscy5kZWZhdWx0Ll9zdXNwZW5kT2JzZXJ2ZXI9cy5fc3VzcGVuZE9ic2VydmVyLHMuZGVm
YXVsdC5fc3VzcGVuZE9ic2VydmVycz1zLl9zdXNwZW5kT2JzZXJ2ZXJzLHMuZGVmYXVsdC5yZXF1
aXJlZD1zLnJlcXVpcmVkLHMuZGVmYXVsdC5hbGlhc01ldGhvZD1zLmFsaWFzTWV0aG9kLHMuZGVm
YXVsdC5vYnNlcnZlcj1zLm9ic2VydmVyLHMuZGVmYXVsdC5pbW1lZGlhdGVPYnNlcnZlcj1zLl9p
bW1lZGlhdGVPYnNlcnZlcixzLmRlZmF1bHQubWl4aW49cy5taXhpbixzLmRlZmF1bHQuTWl4aW49
cy5NaXhpbixzLmRlZmF1bHQuYmluZD1zLmJpbmQscy5kZWZhdWx0LkJpbmRpbmc9cy5CaW5kaW5n
LHMuZGVmYXVsdC5pc0dsb2JhbFBhdGg9cy5pc0dsb2JhbFBhdGgsT2JqZWN0LmRlZmluZVByb3Bl
cnR5KHMuZGVmYXVsdCwiRU5WIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG4uRU5WfSxlbnVtZXJh
YmxlOiExfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHMuZGVmYXVsdCwibG9va3VwIix7Z2V0OmZ1
bmN0aW9uKCl7cmV0dXJuIG4uY29udGV4dC5sb29rdXB9LHNldDpmdW5jdGlvbihlKXtuLmNvbnRl
eHQubG9va3VwPWV9LGVudW1lcmFibGU6ITF9KSxzLmRlZmF1bHQuRVhURU5EX1BST1RPVFlQRVM9
bi5FTlYuRVhURU5EX1BST1RPVFlQRVMsT2JqZWN0LmRlZmluZVByb3BlcnR5KHMuZGVmYXVsdCwi
TE9HX1NUQUNLVFJBQ0VfT05fREVQUkVDQVRJT04iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbi5F
TlYuTE9HX1NUQUNLVFJBQ0VfT05fREVQUkVDQVRJT059LHNldDpmdW5jdGlvbihlKXtuLkVOVi5M
T0dfU1RBQ0tUUkFDRV9PTl9ERVBSRUNBVElPTj0hIWV9LGVudW1lcmFibGU6ITF9KSxPYmplY3Qu
ZGVmaW5lUHJvcGVydHkocy5kZWZhdWx0LCJMT0dfVkVSU0lPTiIse2dldDpmdW5jdGlvbigpe3Jl
dHVybiBuLkVOVi5MT0dfVkVSU0lPTn0sc2V0OmZ1bmN0aW9uKGUpe24uRU5WLkxPR19WRVJTSU9O
PSEhZX0sZW51bWVyYWJsZTohMX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzLmRlZmF1bHQsIkxP
R19CSU5ESU5HUyIse2dldDpmdW5jdGlvbigpe3JldHVybiBuLkVOVi5MT0dfQklORElOR1N9LHNl
dDpmdW5jdGlvbihlKXtuLkVOVi5MT0dfQklORElOR1M9ISFlfSxlbnVtZXJhYmxlOiExfSksT2Jq
ZWN0LmRlZmluZVByb3BlcnR5KHMuZGVmYXVsdCwib25lcnJvciIse2dldDpzLmdldE9uZXJyb3Is
c2V0OnMuc2V0T25lcnJvcixlbnVtZXJhYmxlOiExfSkKLU9iamVjdC5kZWZpbmVQcm9wZXJ0eShz
LmRlZmF1bHQsIksiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdn19KSxPYmplY3QuZGVmaW5lUHJv
cGVydHkocy5kZWZhdWx0LCJ0ZXN0aW5nIix7Z2V0OnUuaXNUZXN0aW5nLHNldDp1LnNldFRlc3Rp
bmcsZW51bWVyYWJsZTohMX0pLHMuZGVmYXVsdC5CYWNrYnVybmVyPWZ1bmN0aW9uKCl7ZnVuY3Rp
b24gZShlKXtyZXR1cm4gbC5kZWZhdWx0LmFwcGx5KHRoaXMsZSl9cmV0dXJuIGUucHJvdG90eXBl
PWwuZGVmYXVsdC5wcm90b3R5cGUsbmV3IGUoYXJndW1lbnRzKX0scy5kZWZhdWx0Ll9CYWNrYnVy
bmVyPWwuZGVmYXVsdCxzLmRlZmF1bHQuTG9nZ2VyPWMuZGVmYXVsdCxzLmRlZmF1bHQuU3RyaW5n
PXAuU3RyaW5nLHMuZGVmYXVsdC5PYmplY3Q9cC5PYmplY3Qscy5kZWZhdWx0Ll9SZWdpc3RyeVBy
b3h5TWl4aW49cC5SZWdpc3RyeVByb3h5TWl4aW4scy5kZWZhdWx0Ll9Db250YWluZXJQcm94eU1p
eGluPXAuQ29udGFpbmVyUHJveHlNaXhpbixzLmRlZmF1bHQuY29tcGFyZT1wLmNvbXBhcmUscy5k
ZWZhdWx0LmNvcHk9cC5jb3B5LHMuZGVmYXVsdC5pc0VxdWFsPXAuaXNFcXVhbCxzLmRlZmF1bHQu
aW5qZWN0PXAuaW5qZWN0LHMuZGVmYXVsdC5BcnJheT1wLkFycmF5LHMuZGVmYXVsdC5Db21wYXJh
YmxlPXAuQ29tcGFyYWJsZSxzLmRlZmF1bHQuRW51bWVyYWJsZT1wLkVudW1lcmFibGUscy5kZWZh
dWx0LkFycmF5UHJveHk9cC5BcnJheVByb3h5LHMuZGVmYXVsdC5PYmplY3RQcm94eT1wLk9iamVj
dFByb3h5LHMuZGVmYXVsdC5BY3Rpb25IYW5kbGVyPXAuQWN0aW9uSGFuZGxlcixzLmRlZmF1bHQu
Q29yZU9iamVjdD1wLkNvcmVPYmplY3Qscy5kZWZhdWx0Lk5hdGl2ZUFycmF5PXAuTmF0aXZlQXJy
YXkscy5kZWZhdWx0LkNvcHlhYmxlPXAuQ29weWFibGUscy5kZWZhdWx0LkZyZWV6YWJsZT1wLkZy
ZWV6YWJsZSxzLmRlZmF1bHQuRlJPWkVOX0VSUk9SPXAuRlJPWkVOX0VSUk9SLHMuZGVmYXVsdC5N
dXRhYmxlRW51bWVyYWJsZT1wLk11dGFibGVFbnVtZXJhYmxlLHMuZGVmYXVsdC5NdXRhYmxlQXJy
YXk9cC5NdXRhYmxlQXJyYXkscy5kZWZhdWx0LlRhcmdldEFjdGlvblN1cHBvcnQ9cC5UYXJnZXRB
Y3Rpb25TdXBwb3J0LHMuZGVmYXVsdC5FdmVudGVkPXAuRXZlbnRlZCxzLmRlZmF1bHQuUHJvbWlz
ZVByb3h5TWl4aW49cC5Qcm9taXNlUHJveHlNaXhpbixzLmRlZmF1bHQuT2JzZXJ2YWJsZT1wLk9i
c2VydmFibGUKLXMuZGVmYXVsdC50eXBlT2Y9cC50eXBlT2Yscy5kZWZhdWx0LmlzQXJyYXk9cC5p
c0FycmF5LHMuZGVmYXVsdC5PYmplY3Q9cC5PYmplY3Qscy5kZWZhdWx0Lm9uTG9hZD1wLm9uTG9h
ZCxzLmRlZmF1bHQucnVuTG9hZEhvb2tzPXAucnVuTG9hZEhvb2tzLHMuZGVmYXVsdC5Db250cm9s
bGVyPXAuQ29udHJvbGxlcixzLmRlZmF1bHQuQ29udHJvbGxlck1peGluPXAuQ29udHJvbGxlck1p
eGluLHMuZGVmYXVsdC5TZXJ2aWNlPXAuU2VydmljZSxzLmRlZmF1bHQuX1Byb3h5TWl4aW49cC5f
UHJveHlNaXhpbixzLmRlZmF1bHQuUlNWUD1wLlJTVlAscy5kZWZhdWx0Lk5hbWVzcGFjZT1wLk5h
bWVzcGFjZSxfLmVtcHR5PXAuZW1wdHksXy5ub3RFbXB0eT1wLm5vdEVtcHR5LF8ubm9uZT1wLm5v
bmUsXy5ub3Q9cC5ub3QsXy5ib29sPXAuYm9vbCxfLm1hdGNoPXAubWF0Y2gsXy5lcXVhbD1wLmVx
dWFsLF8uZ3Q9cC5ndCxfLmd0ZT1wLmd0ZSxfLmx0PXAubHQsXy5sdGU9cC5sdGUsXy5vbmVXYXk9
cC5vbmVXYXksXy5yZWFkcz1wLm9uZVdheSxfLnJlYWRPbmx5PXAucmVhZE9ubHksXy5kZXByZWNh
dGluZ0FsaWFzPXAuZGVwcmVjYXRpbmdBbGlhcyxfLmFuZD1wLmFuZCxfLm9yPXAub3IsXy5hbnk9
cC5hbnksXy5zdW09cC5zdW0KLV8ubWluPXAubWluLF8ubWF4PXAubWF4LF8ubWFwPXAubWFwLF8u
c29ydD1wLnNvcnQsXy5zZXREaWZmPXAuc2V0RGlmZixfLm1hcEJ5PXAubWFwQnksXy5maWx0ZXI9
cC5maWx0ZXIsXy5maWx0ZXJCeT1wLmZpbHRlckJ5LF8udW5pcT1wLnVuaXEsXy51bmlxQnk9cC51
bmlxQnksXy51bmlvbj1wLnVuaW9uLF8uaW50ZXJzZWN0PXAuaW50ZXJzZWN0LF8uY29sbGVjdD1w
LmNvbGxlY3QsT2JqZWN0LmRlZmluZVByb3BlcnR5KHMuZGVmYXVsdCwiU1RSSU5HUyIse2NvbmZp
Z3VyYWJsZTohMSxnZXQ6cC5nZXRTdHJpbmdzLHNldDpwLnNldFN0cmluZ3N9KSxPYmplY3QuZGVm
aW5lUHJvcGVydHkocy5kZWZhdWx0LCJCT09URUQiLHtjb25maWd1cmFibGU6ITEsZW51bWVyYWJs
ZTohMSxnZXQ6cC5pc05hbWVzcGFjZVNlYXJjaERpc2FibGVkLHNldDpwLnNldE5hbWVzcGFjZVNl
YXJjaERpc2FibGVkfSkscy5kZWZhdWx0LkNvbXBvbmVudD1mLkNvbXBvbmVudCxmLkhlbHBlci5o
ZWxwZXI9Zi5oZWxwZXIscy5kZWZhdWx0LkhlbHBlcj1mLkhlbHBlcixzLmRlZmF1bHQuQ2hlY2ti
b3g9Zi5DaGVja2JveCxzLmRlZmF1bHQuVGV4dEZpZWxkPWYuVGV4dEZpZWxkLHMuZGVmYXVsdC5U
ZXh0QXJlYT1mLlRleHRBcmVhLHMuZGVmYXVsdC5MaW5rQ29tcG9uZW50PWYuTGlua0NvbXBvbmVu
dCxuLkVOVi5FWFRFTkRfUFJPVE9UWVBFUy5TdHJpbmcmJihTdHJpbmcucHJvdG90eXBlLmh0bWxT
YWZlPWZ1bmN0aW9uKCl7cmV0dXJuKDAsZi5odG1sU2FmZSkodGhpcyl9KQotdmFyIHc9cy5kZWZh
dWx0LkhhbmRsZWJhcnM9cy5kZWZhdWx0LkhhbmRsZWJhcnN8fHt9LEU9cy5kZWZhdWx0LkhUTUxC
YXJzPXMuZGVmYXVsdC5IVE1MQmFyc3x8e30seD13LlV0aWxzPXcuVXRpbHN8fHt9Ci1PYmplY3Qu
ZGVmaW5lUHJvcGVydHkodywiU2FmZVN0cmluZyIse2dldDpmLl9nZXRTYWZlU3RyaW5nfSksRS50
ZW1wbGF0ZT13LnRlbXBsYXRlPWYudGVtcGxhdGUseC5lc2NhcGVFeHByZXNzaW9uPWYuZXNjYXBl
RXhwcmVzc2lvbixwLlN0cmluZy5odG1sU2FmZT1mLmh0bWxTYWZlLHAuU3RyaW5nLmlzSFRNTFNh
ZmU9Zi5pc0hUTUxTYWZlLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzLmRlZmF1bHQsIlRFTVBMQVRF
UyIse2dldDpmLmdldFRlbXBsYXRlcyxzZXQ6Zi5zZXRUZW1wbGF0ZXMsY29uZmlndXJhYmxlOiEx
LGVudW1lcmFibGU6ITF9KSxlLlZFUlNJT049aC5kZWZhdWx0LHMuZGVmYXVsdC5WRVJTSU9OPWgu
ZGVmYXVsdCxzLmxpYnJhcmllcy5yZWdpc3RlckNvcmVMaWJyYXJ5KCJFbWJlciIsaC5kZWZhdWx0
KSxzLmRlZmF1bHQuJD1kLmpRdWVyeSxzLmRlZmF1bHQuVmlld1RhcmdldEFjdGlvblN1cHBvcnQ9
ZC5WaWV3VGFyZ2V0QWN0aW9uU3VwcG9ydCxzLmRlZmF1bHQuVmlld1V0aWxzPXtpc1NpbXBsZUNs
aWNrOmQuaXNTaW1wbGVDbGljayxnZXRWaWV3RWxlbWVudDpkLmdldFZpZXdFbGVtZW50LGdldFZp
ZXdCb3VuZHM6ZC5nZXRWaWV3Qm91bmRzLGdldFZpZXdDbGllbnRSZWN0czpkLmdldFZpZXdDbGll
bnRSZWN0cyxnZXRWaWV3Qm91bmRpbmdDbGllbnRSZWN0OmQuZ2V0Vmlld0JvdW5kaW5nQ2xpZW50
UmVjdCxnZXRSb290Vmlld3M6ZC5nZXRSb290Vmlld3MsZ2V0Q2hpbGRWaWV3czpkLmdldENoaWxk
Vmlld3N9LHMuZGVmYXVsdC5UZXh0U3VwcG9ydD1kLlRleHRTdXBwb3J0LHMuZGVmYXVsdC5Db21w
b25lbnRMb29rdXA9ZC5Db21wb25lbnRMb29rdXAscy5kZWZhdWx0LkV2ZW50RGlzcGF0Y2hlcj1k
LkV2ZW50RGlzcGF0Y2hlcixzLmRlZmF1bHQuTG9jYXRpb249bS5Mb2NhdGlvbixzLmRlZmF1bHQu
QXV0b0xvY2F0aW9uPW0uQXV0b0xvY2F0aW9uLHMuZGVmYXVsdC5IYXNoTG9jYXRpb249bS5IYXNo
TG9jYXRpb24scy5kZWZhdWx0Lkhpc3RvcnlMb2NhdGlvbj1tLkhpc3RvcnlMb2NhdGlvbixzLmRl
ZmF1bHQuTm9uZUxvY2F0aW9uPW0uTm9uZUxvY2F0aW9uLHMuZGVmYXVsdC5jb250cm9sbGVyRm9y
PW0uY29udHJvbGxlckZvcixzLmRlZmF1bHQuZ2VuZXJhdGVDb250cm9sbGVyRmFjdG9yeT1tLmdl
bmVyYXRlQ29udHJvbGxlckZhY3Rvcnkscy5kZWZhdWx0LmdlbmVyYXRlQ29udHJvbGxlcj1tLmdl
bmVyYXRlQ29udHJvbGxlcixzLmRlZmF1bHQuUm91dGVyRFNMPW0uUm91dGVyRFNMLHMuZGVmYXVs
dC5Sb3V0ZXI9bS5Sb3V0ZXIscy5kZWZhdWx0LlJvdXRlPW0uUm91dGUscy5kZWZhdWx0LkFwcGxp
Y2F0aW9uPWcuQXBwbGljYXRpb24scy5kZWZhdWx0LkFwcGxpY2F0aW9uSW5zdGFuY2U9Zy5BcHBs
aWNhdGlvbkluc3RhbmNlLHMuZGVmYXVsdC5FbmdpbmU9Zy5FbmdpbmUscy5kZWZhdWx0LkVuZ2lu
ZUluc3RhbmNlPWcuRW5naW5lSW5zdGFuY2UKLXMuZGVmYXVsdC5EZWZhdWx0UmVzb2x2ZXI9cy5k
ZWZhdWx0LlJlc29sdmVyPWcuUmVzb2x2ZXIsKDAscC5ydW5Mb2FkSG9va3MpKCJFbWJlci5BcHBs
aWNhdGlvbiIsZy5BcHBsaWNhdGlvbikscy5kZWZhdWx0LkRhdGFBZGFwdGVyPXkuRGF0YUFkYXB0
ZXIscy5kZWZhdWx0LkNvbnRhaW5lckRlYnVnQWRhcHRlcj15LkNvbnRhaW5lckRlYnVnQWRhcHRl
ciwoMCx0LmhhcykoImVtYmVyLXRlbXBsYXRlLWNvbXBpbGVyIikmJigwLHQuZGVmYXVsdCkoImVt
YmVyLXRlbXBsYXRlLWNvbXBpbGVyIiksKDAsdC5oYXMpKCJlbWJlci10ZXN0aW5nIikmJihiPSgw
LHQuZGVmYXVsdCkoImVtYmVyLXRlc3RpbmciKSxzLmRlZmF1bHQuVGVzdD1iLlRlc3Qscy5kZWZh
dWx0LlRlc3QuQWRhcHRlcj1iLkFkYXB0ZXIscy5kZWZhdWx0LlRlc3QuUVVuaXRBZGFwdGVyPWIu
UVVuaXRBZGFwdGVyLHMuZGVmYXVsdC5zZXR1cEZvclRlc3Rpbmc9Yi5zZXR1cEZvclRlc3Rpbmcp
LCgwLHAucnVuTG9hZEhvb2tzKSgiRW1iZXIiKSxlLmRlZmF1bHQ9cy5kZWZhdWx0LHIuSVNfTk9E
RT9yLm1vZHVsZS5leHBvcnRzPXMuZGVmYXVsdDpuLmNvbnRleHQuZXhwb3J0cy5FbWJlcj1uLmNv
bnRleHQuZXhwb3J0cy5FbT1zLmRlZmF1bHR9KSxlKCJlbWJlci92ZXJzaW9uIixbImV4cG9ydHMi
XSxmdW5jdGlvbihlKXsidXNlIHN0cmljdCIKLWUuZGVmYXVsdD0iMi4xNC4xIn0pLGUoIm5vZGUt
bW9kdWxlIixbImV4cG9ydHMiXSxmdW5jdGlvbihlKXt2YXIgdD0ib2JqZWN0Ij09dHlwZW9mIG1v
ZHVsZSYmImZ1bmN0aW9uIj09dHlwZW9mIG1vZHVsZS5yZXF1aXJlCi10PyhlLnJlcXVpcmU9bW9k
dWxlLnJlcXVpcmUsZS5tb2R1bGU9bW9kdWxlLGUuSVNfTk9ERT10KTooZS5yZXF1aXJlPW51bGws
ZS5tb2R1bGU9bnVsbCxlLklTX05PREU9dCl9KSxlKCJyb3V0ZS1yZWNvZ25pemVyIixbImV4cG9y
dHMiXSxmdW5jdGlvbihlKXsidXNlIHN0cmljdCIKLWZ1bmN0aW9uIHQoKXt2YXIgZT1nKG51bGwp
Ci1yZXR1cm4gZS5fXz12b2lkIDAsZGVsZXRlIGUuX18sZX1mdW5jdGlvbiBuKGUsdCxyKXtyZXR1
cm4gZnVuY3Rpb24oaSxvKXt2YXIgcz1lK2kKLWlmKCFvKXJldHVybiBuZXcgeShzLHQscikKLW8o
bihzLHQscikpfX1mdW5jdGlvbiByKGUsdCxuKXt2YXIgcixpPTAKLWZvcihyPTA7cjxlLmxlbmd0
aDtyKyspaSs9ZVtyXS5wYXRoLmxlbmd0aAotdD10LnN1YnN0cihpKQotdmFyIG89e3BhdGg6dCxo
YW5kbGVyOm59Ci1lLnB1c2gobyl9ZnVuY3Rpb24gaShlLHQsbixvKXt2YXIgcyxhLHUsbCxjPXQu
cm91dGVzLHA9T2JqZWN0LmtleXMoYykKLWZvcihzPTA7czxwLmxlbmd0aDtzKyspYT1wW3NdLHU9
ZS5zbGljZSgpLHIodSxhLGNbYV0pLGw9dC5jaGlsZHJlblthXSxsP2kodSxsLG4sbyk6bi5jYWxs
KG8sdSl9ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZS5zcGxpdCgiLyIpLm1hcChzKS5qb2luKCIvIil9
ZnVuY3Rpb24gcyhlKXtyZXR1cm4gZS5sZW5ndGg8M3x8LTE9PT1lLmluZGV4T2YoIiUiKT9lOmRl
Y29kZVVSSUNvbXBvbmVudChlKS5yZXBsYWNlKGIsZW5jb2RlVVJJQ29tcG9uZW50KX1mdW5jdGlv
biBhKGUpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoZSkucmVwbGFjZShfLGRlY29kZVVSSUNv
bXBvbmVudCl9ZnVuY3Rpb24gdShlLHQpe2lmKCJvYmplY3QiIT10eXBlb2YgZXx8bnVsbD09PWUp
dGhyb3cgbmV3IEVycm9yKCJZb3UgbXVzdCBwYXNzIGFuIG9iamVjdCBhcyB0aGUgc2Vjb25kIGFy
Z3VtZW50IHRvIGBnZW5lcmF0ZWAuIikKLWlmKCF4LmNhbGwoZSx0KSl0aHJvdyBuZXcgRXJyb3Io
IllvdSBtdXN0IHByb3ZpZGUgcGFyYW0gYCIrdCsiYCB0byBgZ2VuZXJhdGVgLiIpCi12YXIgbj1l
W3RdLHI9InN0cmluZyI9PXR5cGVvZiBuP246IiIrbgotaWYoMD09PXIubGVuZ3RoKXRocm93IG5l
dyBFcnJvcigiWW91IG11c3QgcHJvdmlkZSBhIHBhcmFtIGAiK3QrImAuIikKLXJldHVybiByfWZ1
bmN0aW9uIGwoZSx0LG4pe3QubGVuZ3RoPjAmJjQ3PT09dC5jaGFyQ29kZUF0KDApJiYodD10LnN1
YnN0cigxKSkKLXZhciByLGksbyxhLHU9dC5zcGxpdCgiLyIpLGw9dm9pZCAwLGM9dm9pZCAwCi1m
b3Iocj0wO3I8dS5sZW5ndGg7cisrKWk9dVtyXSxvPTAsYT0wLGE9IiI9PT1pPzQ6NTg9PT1pLmNo
YXJDb2RlQXQoMCk/MTo0Mj09PWkuY2hhckNvZGVBdCgwKT8yOjAsbz0yPDxhLDEyJm8mJihpPWku
c2xpY2UoMSksbD1sfHxbXSxsLnB1c2goaSksYz1jfHxbXSxjLnB1c2goMCE9KDQmbykpKSwxNCZv
JiZuW2FdKyssZS5wdXNoKHt0eXBlOmEsdmFsdWU6cyhpKX0pCi1yZXR1cm57bmFtZXM6bHx8Uyxz
aG91bGREZWNvZGVzOmN8fFN9fWZ1bmN0aW9uIGMoZSx0LG4pe3JldHVybiBlLmNoYXI9PT10JiZl
Lm5lZ2F0ZT09PW59ZnVuY3Rpb24gcChlLHQpe3JldHVybiBlLm5lZ2F0ZT9lLmNoYXIhPT10JiYt
MSE9PWUuY2hhcjplLmNoYXI9PT10fHwtMT09PWUuY2hhcn1mdW5jdGlvbiBmKGUpe3JldHVybiBl
LnNvcnQoZnVuY3Rpb24oZSx0KXt2YXIgbj1lLnR5cGVzfHxbMCwwLDBdLHI9blswXSxpPW5bMV0s
bz1uWzJdLHM9dC50eXBlc3x8WzAsMCwwXSxhPXNbMF0sdT1zWzFdLGw9c1syXQotaWYobyE9PWwp
cmV0dXJuIG8tbAotaWYobyl7aWYociE9PWEpcmV0dXJuIGEtcgotaWYoaSE9PXUpcmV0dXJuIHUt
aX1yZXR1cm4gaSE9PXU/aS11OnIhPT1hP2EtcjowfSl9ZnVuY3Rpb24gaChlLHQpe3ZhciBuLHIs
aSxvPVtdCi1mb3Iobj0wLHI9ZS5sZW5ndGg7bjxyO24rKylpPWVbbl0sbz1vLmNvbmNhdChpLm1h
dGNoKHQpKQotcmV0dXJuIG99ZnVuY3Rpb24gZChlLHQsbil7dmFyIHIsaSxvLHMsYSx1LGwsYyxw
LGY9ZS5oYW5kbGVycyxoPWUucmVnZXgoKQotaWYoIWh8fCFmKXRocm93IG5ldyBFcnJvcigic3Rh
dGUgbm90IGluaXRpYWxpemVkIikKLXZhciBkPXQubWF0Y2goaCksbT0xLGc9bmV3IGsobikKLWZv
cihnLmxlbmd0aD1mLmxlbmd0aCxyPTA7cjxmLmxlbmd0aDtyKyspe2lmKGk9ZltyXSxvPWkubmFt
ZXMscz1pLnNob3VsZERlY29kZXMsYT1ULHU9ITEsbyE9PVMmJnMhPT1TKWZvcihsPTA7bDxvLmxl
bmd0aDtsKyspdT0hMCxjPW9bbF0scD1kJiZkW20rK10sYT09PVQmJihhPXt9KSxOLkVOQ09ERV9B
TkRfREVDT0RFX1BBVEhfU0VHTUVOVFMmJnNbbF0/YVtjXT1wJiZkZWNvZGVVUklDb21wb25lbnQo
cCk6YVtjXT1wCi1nW3JdPXtoYW5kbGVyOmkuaGFuZGxlcixwYXJhbXM6YSxpc0R5bmFtaWM6dX19
cmV0dXJuIGd9ZnVuY3Rpb24gbShlKXtlPWUucmVwbGFjZSgvXCsvZ20sIiUyMCIpCi12YXIgdAot
dHJ5e3Q9ZGVjb2RlVVJJQ29tcG9uZW50KGUpfWNhdGNoKGUpe3Q9IiJ9cmV0dXJuIHR9dmFyIGc9
T2JqZWN0LmNyZWF0ZSx5PWZ1bmN0aW9uKGUsdCxuKXt0aGlzLnBhdGg9ZSx0aGlzLm1hdGNoZXI9
dCx0aGlzLmRlbGVnYXRlPW59Ci15LnByb3RvdHlwZS50bz1mdW5jdGlvbihlLHQpe3ZhciBuPXRo
aXMuZGVsZWdhdGUKLWlmKG4mJm4ud2lsbEFkZFJvdXRlJiYoZT1uLndpbGxBZGRSb3V0ZSh0aGlz
Lm1hdGNoZXIudGFyZ2V0LGUpKSx0aGlzLm1hdGNoZXIuYWRkKHRoaXMucGF0aCxlKSx0KXtpZigw
PT09dC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJZb3UgbXVzdCBoYXZlIGFuIGFyZ3VtZW50IGlu
IHRoZSBmdW5jdGlvbiBwYXNzZWQgdG8gYHRvYCIpCi10aGlzLm1hdGNoZXIuYWRkQ2hpbGQodGhp
cy5wYXRoLGUsdCx0aGlzLmRlbGVnYXRlKX19Ci12YXIgdj1mdW5jdGlvbihlKXt0aGlzLnJvdXRl
cz10KCksdGhpcy5jaGlsZHJlbj10KCksdGhpcy50YXJnZXQ9ZX0KLXYucHJvdG90eXBlLmFkZD1m
dW5jdGlvbihlLHQpe3RoaXMucm91dGVzW2VdPXR9LHYucHJvdG90eXBlLmFkZENoaWxkPWZ1bmN0
aW9uKGUsdCxyLGkpe3ZhciBvPW5ldyB2KHQpCi10aGlzLmNoaWxkcmVuW2VdPW8KLXZhciBzPW4o
ZSxvLGkpCi1pJiZpLmNvbnRleHRFbnRlcmVkJiZpLmNvbnRleHRFbnRlcmVkKHQscykscihzKX0K
LXZhciBiPS8lfFwvL2csXz0vJSg/OjIoPzo0fDZ8QnxDKXwzKD86QnxEfEEpfDQwKS9nLHc9Lyhc
L3xcLnxcKnxcK3xcP3xcfHxcKHxcKXxcW3xcXXxce3xcfXxcXCkvZyxFPUFycmF5LmlzQXJyYXks
eD1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LEM9W10KLUNbMF09ZnVuY3Rpb24oZSx0
KXt2YXIgbixyLGk9dCxvPWUudmFsdWUKLWZvcihuPTA7bjxvLmxlbmd0aDtuKyspcj1vLmNoYXJD
b2RlQXQobiksaT1pLnB1dChyLCExLCExKQotcmV0dXJuIGl9LENbMV09ZnVuY3Rpb24oZSx0KXty
ZXR1cm4gdC5wdXQoNDcsITAsITApfSxDWzJdPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQucHV0KC0x
LCExLCEwKX0sQ1s0XT1mdW5jdGlvbihlLHQpe3JldHVybiB0fQotdmFyIE89W10KLU9bMF09ZnVu
Y3Rpb24oZSl7cmV0dXJuIGUudmFsdWUucmVwbGFjZSh3LCJcXCQxIil9LE9bMV09ZnVuY3Rpb24o
KXtyZXR1cm4iKFteL10rKSJ9LE9bMl09ZnVuY3Rpb24oKXtyZXR1cm4iKC4rKSJ9LE9bNF09ZnVu
Y3Rpb24oKXtyZXR1cm4iIn0KLXZhciBBPVtdCi1BWzBdPWZ1bmN0aW9uKGUpe3JldHVybiBlLnZh
bHVlfSxBWzFdPWZ1bmN0aW9uKGUsdCl7dmFyIG49dSh0LGUudmFsdWUpCi1yZXR1cm4gTi5FTkNP
REVfQU5EX0RFQ09ERV9QQVRIX1NFR01FTlRTP2Eobik6bn0sQVsyXT1mdW5jdGlvbihlLHQpe3Jl
dHVybiB1KHQsZS52YWx1ZSl9LEFbNF09ZnVuY3Rpb24oKXtyZXR1cm4iIn0KLXZhciBUPU9iamVj
dC5mcmVlemUoe30pLFM9T2JqZWN0LmZyZWV6ZShbXSksUj1mdW5jdGlvbihlLHQsbixyLGkpe3Ro
aXMuc3RhdGVzPWUsdGhpcy5pZD10LHRoaXMuY2hhcj1uLHRoaXMubmVnYXRlPXIsdGhpcy5uZXh0
U3RhdGVzPWk/dDpudWxsLHRoaXMucGF0dGVybj0iIix0aGlzLl9yZWdleD12b2lkIDAsdGhpcy5o
YW5kbGVycz12b2lkIDAsdGhpcy50eXBlcz12b2lkIDB9Ci1SLnByb3RvdHlwZS5yZWdleD1mdW5j
dGlvbigpe3JldHVybiB0aGlzLl9yZWdleHx8KHRoaXMuX3JlZ2V4PW5ldyBSZWdFeHAodGhpcy5w
YXR0ZXJuKSksdGhpcy5fcmVnZXh9LFIucHJvdG90eXBlLmdldD1mdW5jdGlvbihlLHQpe3ZhciBu
LHIsaSxvPXRoaXMscz10aGlzLm5leHRTdGF0ZXMKLWlmKG51bGwhPT1zKWlmKEUocykpe2Zvcihu
PTA7bjxzLmxlbmd0aDtuKyspaWYocj1vLnN0YXRlc1tzW25dXSxjKHIsZSx0KSlyZXR1cm4gcn1l
bHNlIGlmKGk9dGhpcy5zdGF0ZXNbc10sYyhpLGUsdCkpcmV0dXJuIGl9LFIucHJvdG90eXBlLnB1
dD1mdW5jdGlvbihlLHQsbil7dmFyIHIKLWlmKHI9dGhpcy5nZXQoZSx0KSlyZXR1cm4gcgotdmFy
IGk9dGhpcy5zdGF0ZXMKLXJldHVybiByPW5ldyBSKGksaS5sZW5ndGgsZSx0LG4pLGlbaS5sZW5n
dGhdPXIsbnVsbD09dGhpcy5uZXh0U3RhdGVzP3RoaXMubmV4dFN0YXRlcz1yLmlkOkUodGhpcy5u
ZXh0U3RhdGVzKT90aGlzLm5leHRTdGF0ZXMucHVzaChyLmlkKTp0aGlzLm5leHRTdGF0ZXM9W3Ro
aXMubmV4dFN0YXRlcyxyLmlkXSxyfSxSLnByb3RvdHlwZS5tYXRjaD1mdW5jdGlvbihlKXt2YXIg
dCxuLHIsaT10aGlzLG89dGhpcy5uZXh0U3RhdGVzCi1pZighbylyZXR1cm5bXQotdmFyIHM9W10K
LWlmKEUobykpZm9yKHQ9MDt0PG8ubGVuZ3RoO3QrKyluPWkuc3RhdGVzW29bdF1dLHAobixlKSYm
cy5wdXNoKG4pCi1lbHNlIHI9dGhpcy5zdGF0ZXNbb10scChyLGUpJiZzLnB1c2gocikKLXJldHVy
biBzfQotdmFyIGs9ZnVuY3Rpb24oZSl7dGhpcy5sZW5ndGg9MCx0aGlzLnF1ZXJ5UGFyYW1zPWV8
fHt9fQotay5wcm90b3R5cGUuc3BsaWNlPUFycmF5LnByb3RvdHlwZS5zcGxpY2Usay5wcm90b3R5
cGUuc2xpY2U9QXJyYXkucHJvdG90eXBlLnNsaWNlLGsucHJvdG90eXBlLnB1c2g9QXJyYXkucHJv
dG90eXBlLnB1c2gKLXZhciBOPWZ1bmN0aW9uKCl7dGhpcy5uYW1lcz10KCkKLXZhciBlPVtdLG49
bmV3IFIoZSwwLC0xLCEwLCExKQotZVswXT1uLHRoaXMuc3RhdGVzPWUsdGhpcy5yb290U3RhdGU9
bn0KLU4ucHJvdG90eXBlLmFkZD1mdW5jdGlvbihlLHQpe3ZhciBuLHIsaSxvLHMsYSx1PXRoaXMu
cm9vdFN0YXRlLGM9Il4iLHA9WzAsMCwwXSxmPW5ldyBBcnJheShlLmxlbmd0aCksaD1bXSxkPSEw
LG09MAotZm9yKG49MDtuPGUubGVuZ3RoO24rKyl7Zm9yKHI9ZVtuXSxpPWwoaCxyLnBhdGgscCks
bz1pLm5hbWVzLHM9aS5zaG91bGREZWNvZGVzO208aC5sZW5ndGg7bSsrKWE9aFttXSw0IT09YS50
eXBlJiYoZD0hMSx1PXUucHV0KDQ3LCExLCExKSxjKz0iLyIsdT1DW2EudHlwZV0oYSx1KSxjKz1P
W2EudHlwZV0oYSkpCi1mW25dPXtoYW5kbGVyOnIuaGFuZGxlcixuYW1lczpvLHNob3VsZERlY29k
ZXM6c319ZCYmKHU9dS5wdXQoNDcsITEsITEpLGMrPSIvIiksdS5oYW5kbGVycz1mLHUucGF0dGVy
bj1jKyIkIix1LnR5cGVzPXAKLXZhciBnCi0ib2JqZWN0Ij09dHlwZW9mIHQmJm51bGwhPT10JiZ0
LmFzJiYoZz10LmFzKSxnJiYodGhpcy5uYW1lc1tnXT17c2VnbWVudHM6aCxoYW5kbGVyczpmfSl9
LE4ucHJvdG90eXBlLmhhbmRsZXJzRm9yPWZ1bmN0aW9uKGUpe3ZhciB0LG4scj10aGlzLm5hbWVz
W2VdCi1pZighcil0aHJvdyBuZXcgRXJyb3IoIlRoZXJlIGlzIG5vIHJvdXRlIG5hbWVkICIrZSkK
LXZhciBpPW5ldyBBcnJheShyLmhhbmRsZXJzLmxlbmd0aCkKLWZvcih0PTA7dDxyLmhhbmRsZXJz
Lmxlbmd0aDt0Kyspbj1yLmhhbmRsZXJzW3RdLGlbdF09bgotcmV0dXJuIGl9LE4ucHJvdG90eXBl
Lmhhc1JvdXRlPWZ1bmN0aW9uKGUpe3JldHVybiEhdGhpcy5uYW1lc1tlXX0sTi5wcm90b3R5cGUu
Z2VuZXJhdGU9ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGk9dGhpcy5uYW1lc1tlXSxvPSIiCi1pZigh
aSl0aHJvdyBuZXcgRXJyb3IoIlRoZXJlIGlzIG5vIHJvdXRlIG5hbWVkICIrZSkKLXZhciBzPWku
c2VnbWVudHMKLWZvcihuPTA7bjxzLmxlbmd0aDtuKyspcj1zW25dLDQhPT1yLnR5cGUmJihvKz0i
LyIsbys9QVtyLnR5cGVdKHIsdCkpCi1yZXR1cm4iLyIhPT1vLmNoYXJBdCgwKSYmKG89Ii8iK28p
LHQmJnQucXVlcnlQYXJhbXMmJihvKz10aGlzLmdlbmVyYXRlUXVlcnlTdHJpbmcodC5xdWVyeVBh
cmFtcykpLG99LE4ucHJvdG90eXBlLmdlbmVyYXRlUXVlcnlTdHJpbmc9ZnVuY3Rpb24oZSl7dmFy
IHQsbixyLGksbyxzLGE9W10sdT1PYmplY3Qua2V5cyhlKQotZm9yKHUuc29ydCgpLHQ9MDt0PHUu
bGVuZ3RoO3QrKylpZihuPXVbdF0sbnVsbCE9KHI9ZVtuXSkpaWYoaT1lbmNvZGVVUklDb21wb25l
bnQobiksRShyKSlmb3Iobz0wO288ci5sZW5ndGg7bysrKXM9bisiW109IitlbmNvZGVVUklDb21w
b25lbnQocltvXSksYS5wdXNoKHMpCi1lbHNlIGkrPSI9IitlbmNvZGVVUklDb21wb25lbnQociks
YS5wdXNoKGkpCi1yZXR1cm4gMD09PWEubGVuZ3RoPyIiOiI/IithLmpvaW4oIiYiKX0sTi5wcm90
b3R5cGUucGFyc2VRdWVyeVN0cmluZz1mdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxvLHMsYT1lLnNw
bGl0KCImIiksdT17fQotZm9yKHQ9MDt0PGEubGVuZ3RoO3QrKyluPWFbdF0uc3BsaXQoIj0iKSxy
PW0oblswXSksaT1yLmxlbmd0aCxvPSExLHM9dm9pZCAwLDE9PT1uLmxlbmd0aD9zPSJ0cnVlIjoo
aT4yJiYiW10iPT09ci5zbGljZShpLTIpJiYobz0hMCxyPXIuc2xpY2UoMCxpLTIpLHVbcl18fCh1
W3JdPVtdKSkscz1uWzFdP20oblsxXSk6IiIpLG8/dVtyXS5wdXNoKHMpOnVbcl09cwotcmV0dXJu
IHV9LE4ucHJvdG90eXBlLnJlY29nbml6ZT1mdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxzPVt0aGlz
LnJvb3RTdGF0ZV0sYT17fSx1PSExLGw9ZS5pbmRleE9mKCIjIik7LTEhPT1sJiYoZT1lLnN1YnN0
cigwLGwpKQotdmFyIGM9ZS5pbmRleE9mKCI/Iik7LTEhPT1jJiYobj1lLnN1YnN0cihjKzEsZS5s
ZW5ndGgpLGU9ZS5zdWJzdHIoMCxjKSxhPXRoaXMucGFyc2VRdWVyeVN0cmluZyhuKSksIi8iIT09
ZS5jaGFyQXQoMCkmJihlPSIvIitlKQotdmFyIHA9ZQotTi5FTkNPREVfQU5EX0RFQ09ERV9QQVRI
X1NFR01FTlRTP2U9byhlKTooZT1kZWNvZGVVUkkoZSkscD1kZWNvZGVVUkkocCkpCi12YXIgbT1l
Lmxlbmd0aAotZm9yKG0+MSYmIi8iPT09ZS5jaGFyQXQobS0xKSYmKGU9ZS5zdWJzdHIoMCxtLTEp
LHA9cC5zdWJzdHIoMCxwLmxlbmd0aC0xKSx1PSEwKSxyPTA7cjxlLmxlbmd0aCYmKHM9aChzLGUu
Y2hhckNvZGVBdChyKSkscy5sZW5ndGgpO3IrKyk7dmFyIGc9W10KLWZvcihpPTA7aTxzLmxlbmd0
aDtpKyspc1tpXS5oYW5kbGVycyYmZy5wdXNoKHNbaV0pCi1zPWYoZykKLXZhciB5PWdbMF0KLXJl
dHVybiB5JiZ5LmhhbmRsZXJzJiYodSYmeS5wYXR0ZXJuJiYiKC4rKSQiPT09eS5wYXR0ZXJuLnNs
aWNlKC01KSYmKHArPSIvIiksdD1kKHkscCxhKSksdH0sTi5WRVJTSU9OPSIwLjMuMyIsTi5FTkNP
REVfQU5EX0RFQ09ERV9QQVRIX1NFR01FTlRTPSEwLE4uTm9ybWFsaXplcj17bm9ybWFsaXplU2Vn
bWVudDpzLG5vcm1hbGl6ZVBhdGg6byxlbmNvZGVQYXRoU2VnbWVudDphfSxOLnByb3RvdHlwZS5t
YXA9ZnVuY3Rpb24oZSx0KXt2YXIgcj1uZXcgdgotZShuKCIiLHIsdGhpcy5kZWxlZ2F0ZSkpLGko
W10scixmdW5jdGlvbihlKXt0P3QodGhpcyxlKTp0aGlzLmFkZChlKX0sdGhpcyl9LGUuZGVmYXVs
dD1OfSksZSgicm91dGVyIixbImV4cG9ydHMiLCJyb3V0ZS1yZWNvZ25pemVyIiwicnN2cCJdLGZ1
bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCIKLWZ1bmN0aW9uIHIoZSl7cmV0dXJuKCJvYmplY3Qi
PT10eXBlb2YgZSYmbnVsbCE9PWV8fCJmdW5jdGlvbiI9PXR5cGVvZiBlKSYmImZ1bmN0aW9uIj09
dHlwZW9mIGUudGhlbn1mdW5jdGlvbiBpKGUsdCl7Zm9yKHZhciBuIGluIHQpdC5oYXNPd25Qcm9w
ZXJ0eShuKSYmKGVbbl09dFtuXSl9ZnVuY3Rpb24gbyhlKXt2YXIgdCxuLHI9ZSYmZS5sZW5ndGgK
LXJldHVybiByJiZyPjAmJmVbci0xXSYmZVtyLTFdLmhhc093blByb3BlcnR5KCJxdWVyeVBhcmFt
cyIpPyhuPWVbci0xXS5xdWVyeVBhcmFtcyx0PUguY2FsbChlLDAsci0xKSxbdCxuXSk6W2UsbnVs
bF19ZnVuY3Rpb24gcyhlKXt2YXIgdCxuCi1mb3IodmFyIHIgaW4gZSlpZigibnVtYmVyIj09dHlw
ZW9mIGVbcl0pZVtyXT0iIitlW3JdCi1lbHNlIGlmKFYoZVtyXSkpZm9yKHQ9MCxuPWVbcl0ubGVu
Z3RoO3Q8bjt0KyspZVtyXVt0XT0iIitlW3JdW3RdfWZ1bmN0aW9uIGEoZSx0LG4pe2UubG9nJiYo
Mz09PWFyZ3VtZW50cy5sZW5ndGg/ZS5sb2coIlRyYW5zaXRpb24gIyIrdCsiOiAiK24pOihuPXQs
ZS5sb2cobikpKX1mdW5jdGlvbiB1KGUsdCl7dmFyIG49YXJndW1lbnRzCi1yZXR1cm4gZnVuY3Rp
b24ocil7dmFyIGk9SC5jYWxsKG4sMikKLXJldHVybiBpLnB1c2gociksdC5hcHBseShlLGkpfX1m
dW5jdGlvbiBsKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZXx8ZSBpbnN0YW5jZW9mIFN0cmlu
Z3x8Im51bWJlciI9PXR5cGVvZiBlfHxlIGluc3RhbmNlb2YgTnVtYmVyfWZ1bmN0aW9uIGMoZSx0
KXt2YXIgbixyCi1mb3Iobj0wLHI9ZS5sZW5ndGg7bjxyJiYhMSE9PXQoZVtuXSk7bisrKTt9ZnVu
Y3Rpb24gcChlLHQsbixyKXtmdW5jdGlvbiBpKGUsdCxuKXtuLmV2ZW50c1tlXS5hcHBseShuLHQp
fWlmKGUudHJpZ2dlckV2ZW50KXJldHVybiB2b2lkIGUudHJpZ2dlckV2ZW50KHQsbixyKQotdmFy
IG8scyxhLGw9ci5zaGlmdCgpCi1pZighdCl7aWYobilyZXR1cm4KLXRocm93IG5ldyBFcnJvcigi
Q291bGQgbm90IHRyaWdnZXIgZXZlbnQgJyIrbCsiJy4gVGhlcmUgYXJlIG5vIGFjdGl2ZSBoYW5k
bGVycyIpfXZhciBjPSExCi1mb3Iobz10Lmxlbmd0aC0xO28+PTA7by0tKWlmKHM9dFtvXSxhPXMu
aGFuZGxlcil7aWYoYS5ldmVudHMmJmEuZXZlbnRzW2xdKXtpZighMCE9PWEuZXZlbnRzW2xdLmFw
cGx5KGEscikpcmV0dXJuCi1jPSEwfX1lbHNlIHMuaGFuZGxlclByb21pc2UudGhlbih1KG51bGws
aSxsLHIpKQotaWYoImVycm9yIj09PWwmJiJVbnJlY29nbml6ZWRVUkxFcnJvciI9PT1yWzBdLm5h
bWUpdGhyb3cgclswXQotaWYoIWMmJiFuKXRocm93IG5ldyBFcnJvcigiTm90aGluZyBoYW5kbGVk
IHRoZSBldmVudCAnIitsKyInLiIpfWZ1bmN0aW9uIGYoZSx0KXt2YXIgbixyLG89e2FsbDp7fSxj
aGFuZ2VkOnt9LHJlbW92ZWQ6e319Ci1pKG8uYWxsLHQpCi12YXIgYT0hMQotcyhlKSxzKHQpCi1m
b3IodmFyIHUgaW4gZSllLmhhc093blByb3BlcnR5KHUpJiYodC5oYXNPd25Qcm9wZXJ0eSh1KXx8
KGE9ITAsby5yZW1vdmVkW3VdPWVbdV0pKQotZm9yKHUgaW4gdClpZih0Lmhhc093blByb3BlcnR5
KHUpKWlmKFYoZVt1XSkmJlYodFt1XSkpaWYoZVt1XS5sZW5ndGghPT10W3VdLmxlbmd0aClvLmNo
YW5nZWRbdV09dFt1XSxhPSEwCi1lbHNlIGZvcihuPTAscj1lW3VdLmxlbmd0aDtuPHI7bisrKWVb
dV1bbl0hPT10W3VdW25dJiYoby5jaGFuZ2VkW3VdPXRbdV0sYT0hMCkKLWVsc2UgZVt1XSE9PXRb
dV0mJihvLmNoYW5nZWRbdV09dFt1XSxhPSEwKQotcmV0dXJuIGEmJm99ZnVuY3Rpb24gaChlKXty
ZXR1cm4iUm91dGVyOiAiK2V9ZnVuY3Rpb24gZChlLHQpe2Z1bmN0aW9uIG4odCl7ZS5jYWxsKHRo
aXMsdHx8e30pfXJldHVybiBuLnByb3RvdHlwZT1XKGUucHJvdG90eXBlKSxpKG4ucHJvdG90eXBl
LHQpLG59ZnVuY3Rpb24gbShlLHQpe2lmKGUpe3ZhciBuPSJfIit0Ci1yZXR1cm4gZVtuXSYmbnx8
ZVt0XSYmdH19ZnVuY3Rpb24gZyhlLHQsbixyKXt2YXIgaT1tKGUsdCkKLXJldHVybiBpJiZlW2ld
LmNhbGwoZSxuLHIpfWZ1bmN0aW9uIHkoZSx0LG4pe3ZhciByPW0oZSx0KQotaWYocilyZXR1cm4g
MD09PW4ubGVuZ3RoP2Vbcl0uY2FsbChlKToxPT09bi5sZW5ndGg/ZVtyXS5jYWxsKGUsblswXSk6
Mj09PW4ubGVuZ3RoP2Vbcl0uY2FsbChlLG5bMF0sblsxXSk6ZVtyXS5hcHBseShlLG4pfWZ1bmN0
aW9uIHYoKXt0aGlzLmhhbmRsZXJJbmZvcz1bXSx0aGlzLnF1ZXJ5UGFyYW1zPXt9LHRoaXMucGFy
YW1zPXt9fWZ1bmN0aW9uIGIoZSl7aWYoISh0aGlzIGluc3RhbmNlb2YgYikpcmV0dXJuIG5ldyBi
KGUpCi12YXIgdD1FcnJvci5jYWxsKHRoaXMsZSkKLUVycm9yLmNhcHR1cmVTdGFja1RyYWNlP0Vy
cm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsYik6dGhpcy5zdGFjaz10LnN0YWNrLHRoaXMuZGVz
Y3JpcHRpb249dC5kZXNjcmlwdGlvbix0aGlzLmZpbGVOYW1lPXQuZmlsZU5hbWUsdGhpcy5saW5l
TnVtYmVyPXQubGluZU51bWJlcix0aGlzLm1lc3NhZ2U9dC5tZXNzYWdlfHwiVHJhbnNpdGlvbkFi
b3J0ZWQiLHRoaXMubmFtZT0iVHJhbnNpdGlvbkFib3J0ZWQiLHRoaXMubnVtYmVyPXQubnVtYmVy
LHRoaXMuY29kZT10LmNvZGV9ZnVuY3Rpb24gXyhlLHQscixpLG8pe2Z1bmN0aW9uIHMoKXtpZihj
LmlzQWJvcnRlZClyZXR1cm4gbi5Qcm9taXNlLnJlamVjdCh2b2lkIDAsaCgiVHJhbnNpdGlvbiBh
Ym9ydGVkIC0gcmVqZWN0IikpfXZhciBhLHUsbCxjPXRoaXMKLWlmKHRoaXMuc3RhdGU9cnx8ZS5z
dGF0ZSx0aGlzLmludGVudD10LHRoaXMucm91dGVyPWUsdGhpcy5kYXRhPXRoaXMuaW50ZW50JiZ0
aGlzLmludGVudC5kYXRhfHx7fSx0aGlzLnJlc29sdmVkTW9kZWxzPXt9LHRoaXMucXVlcnlQYXJh
bXM9e30sdGhpcy5wcm9taXNlPXZvaWQgMCx0aGlzLmVycm9yPXZvaWQgMCx0aGlzLnBhcmFtcz12
b2lkIDAsdGhpcy5oYW5kbGVySW5mb3M9dm9pZCAwLHRoaXMudGFyZ2V0TmFtZT12b2lkIDAsdGhp
cy5waXZvdEhhbmRsZXI9dm9pZCAwLHRoaXMuc2VxdWVuY2U9dm9pZCAwLHRoaXMuaXNBYm9ydGVk
PSExLHRoaXMuaXNBY3RpdmU9ITAsaSlyZXR1cm4gdGhpcy5wcm9taXNlPW4uUHJvbWlzZS5yZWpl
Y3QoaSksdm9pZCh0aGlzLmVycm9yPWkpCi1pZih0aGlzLmlzQ2F1c2VkQnlBYm9ydGluZ1RyYW5z
aXRpb249ISFvLHRoaXMuaXNDYXVzZWRCeUluaXRpYWxUcmFuc2l0aW9uPW8mJihvLmlzQ2F1c2Vk
QnlJbml0aWFsVHJhbnNpdGlvbnx8MD09PW8uc2VxdWVuY2UpLHIpe2Zvcih0aGlzLnBhcmFtcz1y
LnBhcmFtcyx0aGlzLnF1ZXJ5UGFyYW1zPXIucXVlcnlQYXJhbXMsdGhpcy5oYW5kbGVySW5mb3M9
ci5oYW5kbGVySW5mb3MsYT1yLmhhbmRsZXJJbmZvcy5sZW5ndGgsYSYmKHRoaXMudGFyZ2V0TmFt
ZT1yLmhhbmRsZXJJbmZvc1thLTFdLm5hbWUpLHU9MDt1PGEmJihsPXIuaGFuZGxlckluZm9zW3Vd
LGwuaXNSZXNvbHZlZCk7Kyt1KXRoaXMucGl2b3RIYW5kbGVyPWwuaGFuZGxlcgotdGhpcy5zZXF1
ZW5jZT1lLmN1cnJlbnRTZXF1ZW5jZSsrLHRoaXMucHJvbWlzZT1yLnJlc29sdmUocyx0aGlzKS5j
YXRjaCh3KGMpLGgoIkhhbmRsZSBBYm9ydCIpKX1lbHNlIHRoaXMucHJvbWlzZT1uLlByb21pc2Uu
cmVzb2x2ZSh0aGlzLnN0YXRlKSx0aGlzLnBhcmFtcz17fX1mdW5jdGlvbiB3KGUpe3JldHVybiBm
dW5jdGlvbih0KXtyZXR1cm4gdC53YXNBYm9ydGVkfHxlLmlzQWJvcnRlZD9uLlByb21pc2UucmVq
ZWN0KEUoZSkpOihlLnRyaWdnZXIoImVycm9yIix0LmVycm9yLGUsdC5oYW5kbGVyV2l0aEVycm9y
KSxlLmFib3J0KCksbi5Qcm9taXNlLnJlamVjdCh0LmVycm9yKSl9fWZ1bmN0aW9uIEUoZSl7cmV0
dXJuIGEoZS5yb3V0ZXIsZS5zZXF1ZW5jZSwiZGV0ZWN0ZWQgYWJvcnQuIiksbmV3IGJ9ZnVuY3Rp
b24geChlKXt0aGlzLmluaXRpYWxpemUoZSksdGhpcy5kYXRhPXRoaXMuZGF0YXx8e319ZnVuY3Rp
b24gQyhlKXt2YXIgdCxvPWV8fHt9Ci10aGlzLl9oYW5kbGVyPSQsby5oYW5kbGVyJiYodD1vLm5h
bWUsdGhpcy5oYW5kbGVyUHJvbWlzZT1uLlByb21pc2UucmVzb2x2ZShvLmhhbmRsZXIpLHIoby5o
YW5kbGVyKT8odGhpcy5oYW5kbGVyUHJvbWlzZT10aGlzLmhhbmRsZXJQcm9taXNlLnRoZW4odSh0
aGlzLHRoaXMudXBkYXRlSGFuZGxlcikpLG8uaGFuZGxlcj12b2lkIDApOm8uaGFuZGxlciYmKG8u
aGFuZGxlci5faGFuZGxlck5hbWU9dCkpLGkodGhpcyxvKSx0aGlzLmluaXRpYWxpemUobyl9ZnVu
Y3Rpb24gTyhlLHQpe2lmKCFlXiF0KXJldHVybiExCi1pZighZSlyZXR1cm4hMAotZm9yKHZhciBu
IGluIGUpaWYoZS5oYXNPd25Qcm9wZXJ0eShuKSYmZVtuXSE9PXRbbl0pcmV0dXJuITEKLXJldHVy
biEwfWZ1bmN0aW9uIEEoZSx0KXt2YXIgbj1BLmtsYXNzZXNbZV0scj1uZXcgbih0fHx7fSkKLXJl
dHVybiByLmZhY3Rvcnk9QSxyfWZ1bmN0aW9uIFQoZSl7aWYoISh0aGlzIGluc3RhbmNlb2YgVCkp
cmV0dXJuIG5ldyBUKGUpCi12YXIgdD1FcnJvci5jYWxsKHRoaXMsZSkKLUVycm9yLmNhcHR1cmVT
dGFja1RyYWNlP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsVCk6dGhpcy5zdGFjaz10LnN0
YWNrLHRoaXMuZGVzY3JpcHRpb249dC5kZXNjcmlwdGlvbix0aGlzLmZpbGVOYW1lPXQuZmlsZU5h
bWUsdGhpcy5saW5lTnVtYmVyPXQubGluZU51bWJlcix0aGlzLm1lc3NhZ2U9dC5tZXNzYWdlfHwi
VW5yZWNvZ25pemVkVVJMIix0aGlzLm5hbWU9IlVucmVjb2duaXplZFVSTEVycm9yIix0aGlzLm51
bWJlcj10Lm51bWJlcix0aGlzLmNvZGU9dC5jb2RlfWZ1bmN0aW9uIFMoZSl7dmFyIG49ZXx8e30K
LXRoaXMuZ2V0SGFuZGxlcj1uLmdldEhhbmRsZXJ8fHRoaXMuZ2V0SGFuZGxlcix0aGlzLmdldFNl
cmlhbGl6ZXI9bi5nZXRTZXJpYWxpemVyfHx0aGlzLmdldFNlcmlhbGl6ZXIsdGhpcy51cGRhdGVV
Ukw9bi51cGRhdGVVUkx8fHRoaXMudXBkYXRlVVJMLHRoaXMucmVwbGFjZVVSTD1uLnJlcGxhY2VV
Ukx8fHRoaXMucmVwbGFjZVVSTCx0aGlzLmRpZFRyYW5zaXRpb249bi5kaWRUcmFuc2l0aW9ufHx0
aGlzLmRpZFRyYW5zaXRpb24sdGhpcy53aWxsVHJhbnNpdGlvbj1uLndpbGxUcmFuc2l0aW9ufHx0
aGlzLndpbGxUcmFuc2l0aW9uLHRoaXMuZGVsZWdhdGU9bi5kZWxlZ2F0ZXx8dGhpcy5kZWxlZ2F0
ZSx0aGlzLnRyaWdnZXJFdmVudD1uLnRyaWdnZXJFdmVudHx8dGhpcy50cmlnZ2VyRXZlbnQsdGhp
cy5sb2c9bi5sb2d8fHRoaXMubG9nLHRoaXMuZHNsQ2FsbEJhY2tzPVtdLHRoaXMuc3RhdGU9dm9p
ZCAwLHRoaXMuYWN0aXZlVHJhbnNpdGlvbj12b2lkIDAsdGhpcy5fY2hhbmdlZFF1ZXJ5UGFyYW1z
PXZvaWQgMCx0aGlzLm9sZFN0YXRlPXZvaWQgMCx0aGlzLmN1cnJlbnRIYW5kbGVySW5mb3M9dm9p
ZCAwLHRoaXMuc3RhdGU9dm9pZCAwLHRoaXMuY3VycmVudFNlcXVlbmNlPTAsdGhpcy5yZWNvZ25p
emVyPW5ldyB0LmRlZmF1bHQsdGhpcy5yZXNldCgpfWZ1bmN0aW9uIFIoZSx0KXt2YXIgbixyPSEh
dGhpcy5hY3RpdmVUcmFuc2l0aW9uLGk9cj90aGlzLmFjdGl2ZVRyYW5zaXRpb24uc3RhdGU6dGhp
cy5zdGF0ZSxvPWUuYXBwbHlUb1N0YXRlKGksdGhpcy5yZWNvZ25pemVyLHRoaXMuZ2V0SGFuZGxl
cix0LHRoaXMuZ2V0U2VyaWFsaXplcikscz1mKGkucXVlcnlQYXJhbXMsby5xdWVyeVBhcmFtcykK
LXJldHVybiBNKG8uaGFuZGxlckluZm9zLGkuaGFuZGxlckluZm9zKT9zJiYobj10aGlzLnF1ZXJ5
UGFyYW1zVHJhbnNpdGlvbihzLHIsaSxvKSk/KG4ucXVlcnlQYXJhbXNPbmx5PSEwLG4pOnRoaXMu
YWN0aXZlVHJhbnNpdGlvbnx8bmV3IF8odGhpcyk6dD92b2lkIE4odGhpcyxvKToobj1uZXcgXyh0
aGlzLGUsbyx2b2lkIDAsdGhpcy5hY3RpdmVUcmFuc2l0aW9uKSxGKG8uaGFuZGxlckluZm9zLGku
aGFuZGxlckluZm9zKSYmKG4ucXVlcnlQYXJhbXNPbmx5PSEwKSx0aGlzLmFjdGl2ZVRyYW5zaXRp
b24mJnRoaXMuYWN0aXZlVHJhbnNpdGlvbi5hYm9ydCgpLHRoaXMuYWN0aXZlVHJhbnNpdGlvbj1u
LG4ucHJvbWlzZT1uLnByb21pc2UudGhlbihmdW5jdGlvbihlKXtyZXR1cm4gTChuLGUuc3RhdGUp
fSxudWxsLGgoIlNldHRsZSB0cmFuc2l0aW9uIHByb21pc2Ugd2hlbiB0cmFuc2l0aW9uIGlzIGZp
bmFsaXplZCIpKSxyfHxCKHRoaXMsbyxuKSxrKHRoaXMsbyxzKSxuKX1mdW5jdGlvbiBrKGUsdCxu
KXtuJiYoZS5fY2hhbmdlZFF1ZXJ5UGFyYW1zPW4uYWxsLHAoZSx0LmhhbmRsZXJJbmZvcywhMCxb
InF1ZXJ5UGFyYW1zRGlkQ2hhbmdlIixuLmNoYW5nZWQsbi5hbGwsbi5yZW1vdmVkXSksZS5fY2hh
bmdlZFF1ZXJ5UGFyYW1zPW51bGwpfWZ1bmN0aW9uIE4oZSx0LG4pe3ZhciByLGksbyxzPWooZS5z
dGF0ZSx0KQotZm9yKHI9MCxpPXMuZXhpdGVkLmxlbmd0aDtyPGk7cisrKW89cy5leGl0ZWRbcl0u
aGFuZGxlcixkZWxldGUgby5jb250ZXh0LGcobywicmVzZXQiLCEwLG4pLGcobywiZXhpdCIsbikK
LXZhciBhPWUub2xkU3RhdGU9ZS5zdGF0ZQotZS5zdGF0ZT10Ci12YXIgdT1lLmN1cnJlbnRIYW5k
bGVySW5mb3M9cy51bmNoYW5nZWQuc2xpY2UoKQotdHJ5e2ZvcihyPTAsaT1zLnJlc2V0Lmxlbmd0
aDtyPGk7cisrKW89cy5yZXNldFtyXS5oYW5kbGVyLGcobywicmVzZXQiLCExLG4pCi1mb3Iocj0w
LGk9cy51cGRhdGVkQ29udGV4dC5sZW5ndGg7cjxpO3IrKylQKHUscy51cGRhdGVkQ29udGV4dFty
XSwhMSxuKQotZm9yKHI9MCxpPXMuZW50ZXJlZC5sZW5ndGg7cjxpO3IrKylQKHUscy5lbnRlcmVk
W3JdLCEwLG4pfWNhdGNoKHQpe3Rocm93IGUuc3RhdGU9YSxlLmN1cnJlbnRIYW5kbGVySW5mb3M9
YS5oYW5kbGVySW5mb3MsdH1lLnN0YXRlLnF1ZXJ5UGFyYW1zPVUoZSx1LHQucXVlcnlQYXJhbXMs
bil9ZnVuY3Rpb24gUChlLHQsbixyKXtmdW5jdGlvbiBpKGkpe2lmKG4mJmcoaSwiZW50ZXIiLHIp
LHImJnIuaXNBYm9ydGVkKXRocm93IG5ldyBiCi1pZihpLmNvbnRleHQ9cyxnKGksImNvbnRleHRE
aWRDaGFuZ2UiKSxnKGksInNldHVwIixzLHIpLHImJnIuaXNBYm9ydGVkKXRocm93IG5ldyBiCi1l
LnB1c2godCl9dmFyIG89dC5oYW5kbGVyLHM9dC5jb250ZXh0Ci1yZXR1cm4gbz9pKG8pOnQuaGFu
ZGxlclByb21pc2U9dC5oYW5kbGVyUHJvbWlzZS50aGVuKGkpLCEwfWZ1bmN0aW9uIGooZSx0KXt2
YXIgbixyLGksbyxzLGE9ZS5oYW5kbGVySW5mb3MsdT10LmhhbmRsZXJJbmZvcyxsPXt1cGRhdGVk
Q29udGV4dDpbXSxleGl0ZWQ6W10sZW50ZXJlZDpbXSx1bmNoYW5nZWQ6W10scmVzZXQ6dm9pZCAw
fSxjPSExCi1mb3Iobz0wLHM9dS5sZW5ndGg7bzxzO28rKyluPWFbb10scj11W29dLG4mJm4uaGFu
ZGxlcj09PXIuaGFuZGxlcnx8KGk9ITApLGk/KGwuZW50ZXJlZC5wdXNoKHIpLG4mJmwuZXhpdGVk
LnVuc2hpZnQobikpOmN8fG4uY29udGV4dCE9PXIuY29udGV4dD8oYz0hMCxsLnVwZGF0ZWRDb250
ZXh0LnB1c2gocikpOmwudW5jaGFuZ2VkLnB1c2gobikKLWZvcihvPXUubGVuZ3RoLHM9YS5sZW5n
dGg7bzxzO28rKylsLmV4aXRlZC51bnNoaWZ0KGFbb10pCi1yZXR1cm4gbC5yZXNldD1sLnVwZGF0
ZWRDb250ZXh0LnNsaWNlKCksbC5yZXNldC5yZXZlcnNlKCksbH1mdW5jdGlvbiBEKGUsdCl7dmFy
IG4scixvLHMsYSx1LGw9ZS51cmxNZXRob2QKLWlmKGwpe3ZhciBjPWUucm91dGVyLHA9dC5oYW5k
bGVySW5mb3MsZj1wW3AubGVuZ3RoLTFdLm5hbWUsaD17fQotZm9yKG49cC5sZW5ndGgtMTtuPj0w
Oy0tbilyPXBbbl0saShoLHIucGFyYW1zKSxyLmhhbmRsZXIuaW5hY2Nlc3NpYmxlQnlVUkwmJihs
PW51bGwpCi1sJiYoaC5xdWVyeVBhcmFtcz1lLl92aXNpYmxlUXVlcnlQYXJhbXN8fHQucXVlcnlQ
YXJhbXMsbz1jLnJlY29nbml6ZXIuZ2VuZXJhdGUoZixoKSxzPWUuaXNDYXVzZWRCeUluaXRpYWxU
cmFuc2l0aW9uLGE9InJlcGxhY2UiPT09bCYmIWUuaXNDYXVzZWRCeUFib3J0aW5nVHJhbnNpdGlv
bix1PWUucXVlcnlQYXJhbXNPbmx5JiYicmVwbGFjZSI9PT1sLHN8fGF8fHU/Yy5yZXBsYWNlVVJM
KG8pOmMudXBkYXRlVVJMKG8pKX19ZnVuY3Rpb24gTChlLHQpe3ZhciByLGksbwotdHJ5e3JldHVy
biBhKGUucm91dGVyLGUuc2VxdWVuY2UsIlJlc29sdmVkIGFsbCBtb2RlbHMgb24gZGVzdGluYXRp
b24gcm91dGU7IGZpbmFsaXppbmcgdHJhbnNpdGlvbi4iKSwocj1lLnJvdXRlcixpPXQuaGFuZGxl
ckluZm9zLE4ocix0LGUpLGUuaXNBYm9ydGVkKT8oci5zdGF0ZS5oYW5kbGVySW5mb3M9ci5jdXJy
ZW50SGFuZGxlckluZm9zLG4uUHJvbWlzZS5yZWplY3QoRShlKSkpOihEKGUsdCxlLmludGVudC51
cmwpLGUuaXNBY3RpdmU9ITEsci5hY3RpdmVUcmFuc2l0aW9uPW51bGwscChyLHIuY3VycmVudEhh
bmRsZXJJbmZvcywhMCxbImRpZFRyYW5zaXRpb24iXSksci5kaWRUcmFuc2l0aW9uJiZyLmRpZFRy
YW5zaXRpb24oci5jdXJyZW50SGFuZGxlckluZm9zKSxhKHIsZS5zZXF1ZW5jZSwiVFJBTlNJVElP
TiBDT01QTEVURS4iKSxpW2kubGVuZ3RoLTFdLmhhbmRsZXIpfWNhdGNoKHQpe3Rocm93IHQgaW5z
dGFuY2VvZiBifHwobz1lLnN0YXRlLmhhbmRsZXJJbmZvcyxlLnRyaWdnZXIoITAsImVycm9yIix0
LGUsb1tvLmxlbmd0aC0xXS5oYW5kbGVyKSxlLmFib3J0KCkpLHR9fWZ1bmN0aW9uIEkoZSx0LG4p
e3ZhciByLGk9dFswXXx8Ii8iLG89dFt0Lmxlbmd0aC0xXSxzPXt9Ci1vJiZvLmhhc093blByb3Bl
cnR5KCJxdWVyeVBhcmFtcyIpJiYocz1YLmNhbGwodCkucXVlcnlQYXJhbXMpCi12YXIgdQotcmV0
dXJuIDA9PT10Lmxlbmd0aD8oYShlLCJVcGRhdGluZyBxdWVyeSBwYXJhbXMiKSxyPWUuc3RhdGUu
aGFuZGxlckluZm9zLHU9bmV3IFkoe25hbWU6cltyLmxlbmd0aC0xXS5uYW1lLGNvbnRleHRzOltd
LHF1ZXJ5UGFyYW1zOnN9KSk6Ii8iPT09aS5jaGFyQXQoMCk/KGEoZSwiQXR0ZW1wdGluZyBVUkwg
dHJhbnNpdGlvbiB0byAiK2kpLHU9bmV3IEooe3VybDppfSkpOihhKGUsIkF0dGVtcHRpbmcgdHJh
bnNpdGlvbiB0byAiK2kpLHU9bmV3IFkoe25hbWU6dFswXSxjb250ZXh0czpILmNhbGwodCwxKSxx
dWVyeVBhcmFtczpzfSkpLGUudHJhbnNpdGlvbkJ5SW50ZW50KHUsbil9ZnVuY3Rpb24gTShlLHQp
e3ZhciBuLHIKLWlmKGUubGVuZ3RoIT09dC5sZW5ndGgpcmV0dXJuITEKLWZvcihuPTAscj1lLmxl
bmd0aDtuPHI7KytuKWlmKGVbbl0hPT10W25dKXJldHVybiExCi1yZXR1cm4hMH1mdW5jdGlvbiBG
KGUsdCl7dmFyIG4scgotaWYoZS5sZW5ndGghPT10Lmxlbmd0aClyZXR1cm4hMQotZm9yKG49MCxy
PWUubGVuZ3RoO248cjsrK24pe2lmKGVbbl0ubmFtZSE9PXRbbl0ubmFtZSlyZXR1cm4hMQotaWYo
IXooZVtuXS5wYXJhbXMsdFtuXS5wYXJhbXMpKXJldHVybiExfXJldHVybiEwfWZ1bmN0aW9uIHoo
ZSx0KXtpZighZSYmIXQpcmV0dXJuITAKLWlmKCFlJiZ0fHxlJiYhdClyZXR1cm4hMQotdmFyIG4s
cixpLG89T2JqZWN0LmtleXMoZSkscz1PYmplY3Qua2V5cyh0KQotaWYoby5sZW5ndGghPT1zLmxl
bmd0aClyZXR1cm4hMQotZm9yKG49MCxyPW8ubGVuZ3RoO248cjsrK24paWYoaT1vW25dLGVbaV0h
PT10W2ldKXJldHVybiExCi1yZXR1cm4hMH1mdW5jdGlvbiBVKGUsdCxuLHIpe2Zvcih2YXIgaSBp
biBuKW4uaGFzT3duUHJvcGVydHkoaSkmJm51bGw9PT1uW2ldJiZkZWxldGUgbltpXQotdmFyIG8s
cyxhLHU9W10KLXAoZSx0LCEwLFsiZmluYWxpemVRdWVyeVBhcmFtQ2hhbmdlIixuLHUscl0pLHIm
JihyLl92aXNpYmxlUXVlcnlQYXJhbXM9e30pCi12YXIgbD17fQotZm9yKG89MCxzPXUubGVuZ3Ro
O288czsrK28pYT11W29dLGxbYS5rZXldPWEudmFsdWUsciYmITEhPT1hLnZpc2libGUmJihyLl92
aXNpYmxlUXVlcnlQYXJhbXNbYS5rZXldPWEudmFsdWUpCi1yZXR1cm4gbH1mdW5jdGlvbiBCKGUs
dCxuKXt2YXIgcixpLG8scyxhPWUuc3RhdGUuaGFuZGxlckluZm9zLHU9W10sbD1udWxsCi1mb3Io
aT1hLmxlbmd0aCxyPTA7cjxpO3IrKyl7aWYobz1hW3JdLCEocz10LmhhbmRsZXJJbmZvc1tyXSl8
fG8ubmFtZSE9PXMubmFtZSl7bD1yCi1icmVha31zLmlzUmVzb2x2ZWR8fHUucHVzaChvKX1udWxs
IT09bCYmYS5zbGljZShsLGkpLHAoZSxhLCEwLFsid2lsbFRyYW5zaXRpb24iLG5dKSxlLndpbGxU
cmFuc2l0aW9uJiZlLndpbGxUcmFuc2l0aW9uKGEsdC5oYW5kbGVySW5mb3Msbil9ZS5UcmFuc2l0
aW9uPXZvaWQgMAotdmFyIHEsSD1BcnJheS5wcm90b3R5cGUuc2xpY2UKLXE9QXJyYXkuaXNBcnJh
eT9BcnJheS5pc0FycmF5OmZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IEFycmF5XSI9PT1PYmpl
Y3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSl9Ci12YXIgVj1xLFc9T2JqZWN0LmNyZWF0ZXx8
ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGU9ZSxuZXcgdH0KLXYu
cHJvdG90eXBlPXtwcm9taXNlTGFiZWw6ZnVuY3Rpb24oZSl7dmFyIHQ9IiIKLXJldHVybiBjKHRo
aXMuaGFuZGxlckluZm9zLGZ1bmN0aW9uKGUpeyIiIT09dCYmKHQrPSIuIiksdCs9ZS5uYW1lfSks
aCgiJyIrdCsiJzogIitlKX0scmVzb2x2ZTpmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIHIoKXtyZXR1
cm4gbi5Qcm9taXNlLnJlc29sdmUoZSgpLGEucHJvbWlzZUxhYmVsKCJDaGVjayBpZiBzaG91bGQg
Y29udGludWUiKSkuY2F0Y2goZnVuY3Rpb24oZSl7cmV0dXJuIHU9ITAsbi5Qcm9taXNlLnJlamVj
dChlKX0sYS5wcm9taXNlTGFiZWwoIkhhbmRsZSBhYm9ydCIpKX1mdW5jdGlvbiBpKGUpe3ZhciBu
LGk9YS5oYW5kbGVySW5mb3NbdC5yZXNvbHZlSW5kZXhdLmlzUmVzb2x2ZWQKLXJldHVybiBhLmhh
bmRsZXJJbmZvc1t0LnJlc29sdmVJbmRleCsrXT1lLGl8fChuPWUuaGFuZGxlcixnKG4sInJlZGly
ZWN0IixlLmNvbnRleHQsdCkpLHIoKS50aGVuKG8sbnVsbCxhLnByb21pc2VMYWJlbCgiUmVzb2x2
ZSBoYW5kbGVyIikpfWZ1bmN0aW9uIG8oKXtyZXR1cm4gdC5yZXNvbHZlSW5kZXg9PT1hLmhhbmRs
ZXJJbmZvcy5sZW5ndGg/e2Vycm9yOm51bGwsc3RhdGU6YX06YS5oYW5kbGVySW5mb3NbdC5yZXNv
bHZlSW5kZXhdLnJlc29sdmUocix0KS50aGVuKGksbnVsbCxhLnByb21pc2VMYWJlbCgiUHJvY2Vl
ZCIpKX12YXIgcz10aGlzLnBhcmFtcwotYyh0aGlzLmhhbmRsZXJJbmZvcyxmdW5jdGlvbihlKXtz
W2UubmFtZV09ZS5wYXJhbXN8fHt9fSksdD10fHx7fSx0LnJlc29sdmVJbmRleD0wCi12YXIgYT10
aGlzLHU9ITEKLXJldHVybiBuLlByb21pc2UucmVzb2x2ZShudWxsLHRoaXMucHJvbWlzZUxhYmVs
KCJTdGFydCB0cmFuc2l0aW9uIikpLnRoZW4obyxudWxsLHRoaXMucHJvbWlzZUxhYmVsKCJSZXNv
bHZlIGhhbmRsZXIiKSkuY2F0Y2goZnVuY3Rpb24oZSl7dmFyIHI9YS5oYW5kbGVySW5mb3MsaT10
LnJlc29sdmVJbmRleD49ci5sZW5ndGg/ci5sZW5ndGgtMTp0LnJlc29sdmVJbmRleAotcmV0dXJu
IG4uUHJvbWlzZS5yZWplY3Qoe2Vycm9yOmUsaGFuZGxlcldpdGhFcnJvcjphLmhhbmRsZXJJbmZv
c1tpXS5oYW5kbGVyLHdhc0Fib3J0ZWQ6dSxzdGF0ZTphfSl9LHRoaXMucHJvbWlzZUxhYmVsKCJI
YW5kbGUgZXJyb3IiKSl9fSxiLnByb3RvdHlwZT1XKEVycm9yLnByb3RvdHlwZSksXy5wcm90b3R5
cGU9e3RhcmdldE5hbWU6bnVsbCx1cmxNZXRob2Q6InVwZGF0ZSIsaW50ZW50Om51bGwscGl2b3RI
YW5kbGVyOm51bGwscmVzb2x2ZUluZGV4OjAscmVzb2x2ZWRNb2RlbHM6bnVsbCxzdGF0ZTpudWxs
LHF1ZXJ5UGFyYW1zT25seTohMSxpc1RyYW5zaXRpb246ITAsaXNFeGl0aW5nOmZ1bmN0aW9uKGUp
e3ZhciB0LG4scixpPXRoaXMuaGFuZGxlckluZm9zCi1mb3IodD0wLG49aS5sZW5ndGg7dDxuOysr
dClpZihyPWlbdF0sci5uYW1lPT09ZXx8ci5oYW5kbGVyPT09ZSlyZXR1cm4hMQotcmV0dXJuITB9
LHByb21pc2U6bnVsbCxkYXRhOm51bGwsdGhlbjpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHRoaXMu
cHJvbWlzZS50aGVuKGUsdCxuKX0sY2F0Y2g6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5wcm9t
aXNlLmNhdGNoKGUsdCl9LGZpbmFsbHk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5wcm9taXNl
LmZpbmFsbHkoZSx0KX0sYWJvcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0Fib3J0ZWQ/dGhp
czooYSh0aGlzLnJvdXRlcix0aGlzLnNlcXVlbmNlLHRoaXMudGFyZ2V0TmFtZSsiOiB0cmFuc2l0
aW9uIHdhcyBhYm9ydGVkIiksdGhpcy5pbnRlbnQucHJlVHJhbnNpdGlvblN0YXRlPXRoaXMucm91
dGVyLnN0YXRlLHRoaXMuaXNBYm9ydGVkPSEwLHRoaXMuaXNBY3RpdmU9ITEsdGhpcy5yb3V0ZXIu
YWN0aXZlVHJhbnNpdGlvbj1udWxsLHRoaXMpfSxyZXRyeTpmdW5jdGlvbigpe3RoaXMuYWJvcnQo
KQotdmFyIGU9dGhpcy5yb3V0ZXIudHJhbnNpdGlvbkJ5SW50ZW50KHRoaXMuaW50ZW50LCExKQot
cmV0dXJuIG51bGwhPT10aGlzLnVybE1ldGhvZCYmZS5tZXRob2QodGhpcy51cmxNZXRob2QpLGV9
LG1ldGhvZDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy51cmxNZXRob2Q9ZSx0aGlzfSx0cmlnZ2Vy
OmZ1bmN0aW9uKGUpe3ZhciB0PUguY2FsbChhcmd1bWVudHMpCi0iYm9vbGVhbiI9PXR5cGVvZiBl
P3Quc2hpZnQoKTplPSExLHAodGhpcy5yb3V0ZXIsdGhpcy5zdGF0ZS5oYW5kbGVySW5mb3Muc2xp
Y2UoMCx0aGlzLnJlc29sdmVJbmRleCsxKSxlLHQpfSxmb2xsb3dSZWRpcmVjdHM6ZnVuY3Rpb24o
KXt2YXIgZT10aGlzLnJvdXRlcgotcmV0dXJuIHRoaXMucHJvbWlzZS5jYXRjaChmdW5jdGlvbih0
KXtyZXR1cm4gZS5hY3RpdmVUcmFuc2l0aW9uP2UuYWN0aXZlVHJhbnNpdGlvbi5mb2xsb3dSZWRp
cmVjdHMoKTpuLlByb21pc2UucmVqZWN0KHQpfSl9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJu
IlRyYW5zaXRpb24gKHNlcXVlbmNlICIrdGhpcy5zZXF1ZW5jZSsiKSJ9LGxvZzpmdW5jdGlvbihl
KXthKHRoaXMucm91dGVyLHRoaXMuc2VxdWVuY2UsZSl9fSxfLnByb3RvdHlwZS5zZW5kPV8ucHJv
dG90eXBlLnRyaWdnZXIseC5wcm90b3R5cGU9e2luaXRpYWxpemU6bnVsbCxhcHBseVRvU3RhdGU6
bnVsbH0KLXZhciAkPU9iamVjdC5mcmVlemUoe30pCi1DLnByb3RvdHlwZT17bmFtZTpudWxsLGdl
dEhhbmRsZXI6ZnVuY3Rpb24oKXt9LGZldGNoSGFuZGxlcjpmdW5jdGlvbigpe3ZhciBlPXRoaXMu
Z2V0SGFuZGxlcih0aGlzLm5hbWUpCi1pZih0aGlzLmhhbmRsZXJQcm9taXNlPW4uUHJvbWlzZS5y
ZXNvbHZlKGUpLHIoZSkpdGhpcy5oYW5kbGVyUHJvbWlzZT10aGlzLmhhbmRsZXJQcm9taXNlLnRo
ZW4odSh0aGlzLHRoaXMudXBkYXRlSGFuZGxlcikpCi1lbHNlIGlmKGUpcmV0dXJuIGUuX2hhbmRs
ZXJOYW1lPXRoaXMubmFtZSx0aGlzLmhhbmRsZXI9ZQotcmV0dXJuIHRoaXMuaGFuZGxlcj12b2lk
IDB9LF9oYW5kbGVyUHJvbWlzZTp2b2lkIDAscGFyYW1zOm51bGwsY29udGV4dDpudWxsLGZhY3Rv
cnk6bnVsbCxpbml0aWFsaXplOmZ1bmN0aW9uKCl7fSxsb2c6ZnVuY3Rpb24oZSx0KXtlLmxvZyYm
ZS5sb2codGhpcy5uYW1lKyI6ICIrdCl9LHByb21pc2VMYWJlbDpmdW5jdGlvbihlKXtyZXR1cm4g
aCgiJyIrdGhpcy5uYW1lKyInICIrZSl9LGdldFVucmVzb2x2ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4g
dGhpc30sc2VyaWFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyYW1zfHx7fX0sdXBkYXRl
SGFuZGxlcjpmdW5jdGlvbihlKXtyZXR1cm4gZS5faGFuZGxlck5hbWU9dGhpcy5uYW1lLHRoaXMu
aGFuZGxlcj1lfSxyZXNvbHZlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9dSh0aGlzLHRoaXMuY2hlY2tG
b3JBYm9ydCxlKSxpPXUodGhpcyx0aGlzLnJ1bkJlZm9yZU1vZGVsSG9vayx0KSxvPXUodGhpcyx0
aGlzLmdldE1vZGVsLHQpLHM9dSh0aGlzLHRoaXMucnVuQWZ0ZXJNb2RlbEhvb2ssdCksYT11KHRo
aXMsdGhpcy5iZWNvbWVSZXNvbHZlZCx0KSxsPXRoaXMKLXJldHVybiBuLlByb21pc2UucmVzb2x2
ZSh0aGlzLmhhbmRsZXJQcm9taXNlLHRoaXMucHJvbWlzZUxhYmVsKCJTdGFydCBoYW5kbGVyIikp
LnRoZW4oZnVuY3Rpb24oZSl7cmV0dXJuIG4uUHJvbWlzZS5yZXNvbHZlKGUpLnRoZW4ocixudWxs
LGwucHJvbWlzZUxhYmVsKCJDaGVjayBmb3IgYWJvcnQiKSkudGhlbihpLG51bGwsbC5wcm9taXNl
TGFiZWwoIkJlZm9yZSBtb2RlbCIpKS50aGVuKHIsbnVsbCxsLnByb21pc2VMYWJlbCgiQ2hlY2sg
aWYgYWJvcnRlZCBkdXJpbmcgJ2JlZm9yZU1vZGVsJyBob29rIikpLnRoZW4obyxudWxsLGwucHJv
bWlzZUxhYmVsKCJNb2RlbCIpKS50aGVuKHIsbnVsbCxsLnByb21pc2VMYWJlbCgiQ2hlY2sgaWYg
YWJvcnRlZCBpbiAnbW9kZWwnIGhvb2siKSkudGhlbihzLG51bGwsbC5wcm9taXNlTGFiZWwoIkFm
dGVyIG1vZGVsIikpLnRoZW4ocixudWxsLGwucHJvbWlzZUxhYmVsKCJDaGVjayBpZiBhYm9ydGVk
IGluICdhZnRlck1vZGVsJyBob29rIikpLnRoZW4oYSxudWxsLGwucHJvbWlzZUxhYmVsKCJCZWNv
bWUgcmVzb2x2ZWQiKSl9LGZ1bmN0aW9uKGUpe3Rocm93IGV9KX0scnVuQmVmb3JlTW9kZWxIb29r
OmZ1bmN0aW9uKGUpe3JldHVybiBlLnRyaWdnZXImJmUudHJpZ2dlcighMCwid2lsbFJlc29sdmVN
b2RlbCIsZSx0aGlzLmhhbmRsZXIpLHRoaXMucnVuU2hhcmVkTW9kZWxIb29rKGUsImJlZm9yZU1v
ZGVsIixbXSl9LHJ1bkFmdGVyTW9kZWxIb29rOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5uYW1l
Ci1yZXR1cm4gdGhpcy5zdGFzaFJlc29sdmVkTW9kZWwoZSx0KSx0aGlzLnJ1blNoYXJlZE1vZGVs
SG9vayhlLCJhZnRlck1vZGVsIixbdF0pLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gZS5yZXNvbHZl
ZE1vZGVsc1tuXX0sbnVsbCx0aGlzLnByb21pc2VMYWJlbCgiSWdub3JlIGZ1bGZpbGxtZW50IHZh
bHVlIGFuZCByZXR1cm4gbW9kZWwgdmFsdWUiKSl9LHJ1blNoYXJlZE1vZGVsSG9vazpmdW5jdGlv
bihlLHQscil7dGhpcy5sb2coZSwiY2FsbGluZyAiK3QrIiBob29rIiksdGhpcy5xdWVyeVBhcmFt
cyYmci5wdXNoKHRoaXMucXVlcnlQYXJhbXMpLHIucHVzaChlKQotdmFyIGk9eSh0aGlzLmhhbmRs
ZXIsdCxyKQotcmV0dXJuIGkmJmkuaXNUcmFuc2l0aW9uJiYoaT1udWxsKSxuLlByb21pc2UucmVz
b2x2ZShpLHRoaXMucHJvbWlzZUxhYmVsKCJSZXNvbHZlIHZhbHVlIHJldHVybmVkIGZyb20gb25l
IG9mIHRoZSBtb2RlbCBob29rcyIpKX0sZ2V0TW9kZWw6bnVsbCxjaGVja0ZvckFib3J0OmZ1bmN0
aW9uKGUsdCl7cmV0dXJuIG4uUHJvbWlzZS5yZXNvbHZlKGUoKSx0aGlzLnByb21pc2VMYWJlbCgi
Q2hlY2sgZm9yIGFib3J0IikpLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gdH0sbnVsbCx0aGlzLnBy
b21pc2VMYWJlbCgiSWdub3JlIGZ1bGZpbGxtZW50IHZhbHVlIGFuZCBjb250aW51ZSIpKX0sc3Rh
c2hSZXNvbHZlZE1vZGVsOmZ1bmN0aW9uKGUsdCl7ZS5yZXNvbHZlZE1vZGVscz1lLnJlc29sdmVk
TW9kZWxzfHx7fSxlLnJlc29sdmVkTW9kZWxzW3RoaXMubmFtZV09dH0sYmVjb21lUmVzb2x2ZWQ6
ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLnNlcmlhbGl6ZSh0KQotcmV0dXJuIGUmJih0aGlzLnN0
YXNoUmVzb2x2ZWRNb2RlbChlLHQpLGUucGFyYW1zPWUucGFyYW1zfHx7fSxlLnBhcmFtc1t0aGlz
Lm5hbWVdPW4pLHRoaXMuZmFjdG9yeSgicmVzb2x2ZWQiLHtjb250ZXh0OnQsbmFtZTp0aGlzLm5h
bWUsaGFuZGxlcjp0aGlzLmhhbmRsZXIscGFyYW1zOm59KX0sc2hvdWxkU3VwZXJjZWRlOmZ1bmN0
aW9uKGUpe2lmKCFlKXJldHVybiEwCi12YXIgdD1lLmNvbnRleHQ9PT10aGlzLmNvbnRleHQKLXJl
dHVybiBlLm5hbWUhPT10aGlzLm5hbWV8fHRoaXMuaGFzT3duUHJvcGVydHkoImNvbnRleHQiKSYm
IXR8fHRoaXMuaGFzT3duUHJvcGVydHkoInBhcmFtcyIpJiYhTyh0aGlzLnBhcmFtcyxlLnBhcmFt
cyl9fSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQy5wcm90b3R5cGUsImhhbmRsZXIiLHtnZXQ6ZnVu
Y3Rpb24oKXtyZXR1cm4gdGhpcy5faGFuZGxlciE9PSQ/dGhpcy5faGFuZGxlcjp0aGlzLmZldGNo
SGFuZGxlcigpfSxzZXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2hhbmRsZXI9ZX19KSxPYmpl
Y3QuZGVmaW5lUHJvcGVydHkoQy5wcm90b3R5cGUsImhhbmRsZXJQcm9taXNlIix7Z2V0OmZ1bmN0
aW9uKCl7cmV0dXJuIHRoaXMuX2hhbmRsZXJQcm9taXNlP3RoaXMuX2hhbmRsZXJQcm9taXNlOih0
aGlzLmZldGNoSGFuZGxlcigpLHRoaXMuX2hhbmRsZXJQcm9taXNlKX0sc2V0OmZ1bmN0aW9uKGUp
e3JldHVybiB0aGlzLl9oYW5kbGVyUHJvbWlzZT1lfX0pCi12YXIgRz1kKEMse3Jlc29sdmU6ZnVu
Y3Rpb24oZSx0KXtyZXR1cm4gdCYmdC5yZXNvbHZlZE1vZGVscyYmKHQucmVzb2x2ZWRNb2RlbHNb
dGhpcy5uYW1lXT10aGlzLmNvbnRleHQpLG4uUHJvbWlzZS5yZXNvbHZlKHRoaXMsdGhpcy5wcm9t
aXNlTGFiZWwoIlJlc29sdmUiKSl9LGdldFVucmVzb2x2ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhp
cy5mYWN0b3J5KCJwYXJhbSIse25hbWU6dGhpcy5uYW1lLGhhbmRsZXI6dGhpcy5oYW5kbGVyLHBh
cmFtczp0aGlzLnBhcmFtc30pfSxpc1Jlc29sdmVkOiEwfSksSz1kKEMse2dldE1vZGVsOmZ1bmN0
aW9uKGUpe3JldHVybiB0aGlzLmxvZyhlLHRoaXMubmFtZSsiOiByZXNvbHZpbmcgcHJvdmlkZWQg
bW9kZWwiKSxuLlByb21pc2UucmVzb2x2ZSh0aGlzLmNvbnRleHQpfSxpbml0aWFsaXplOmZ1bmN0
aW9uKGUpe3RoaXMubmFtZXM9ZS5uYW1lc3x8W10sdGhpcy5jb250ZXh0PWUuY29udGV4dH0sc2Vy
aWFsaXplOmZ1bmN0aW9uKGUpe3ZhciB0PWV8fHRoaXMuY29udGV4dCxuPXRoaXMubmFtZXMscj10
aGlzLnNlcmlhbGl6ZXJ8fHRoaXMuaGFuZGxlciYmdGhpcy5oYW5kbGVyLnNlcmlhbGl6ZSxpPXt9
Ci1pZihsKHQpKXJldHVybiBpW25bMF1dPXQsaQotaWYocilyZXR1cm4gcih0LG4pCi1pZigxPT09
bi5sZW5ndGgpe3ZhciBvPW5bMF0KLXJldHVybi9faWQkLy50ZXN0KG8pP2lbb109dC5pZDppW29d
PXQsaX19fSksUT1kKEMse2luaXRpYWxpemU6ZnVuY3Rpb24oZSl7dGhpcy5wYXJhbXM9ZS5wYXJh
bXN8fHt9fSxnZXRNb2RlbDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLnBhcmFtcwotZSYmZS5xdWVy
eVBhcmFtcyYmKHQ9e30saSh0LHRoaXMucGFyYW1zKSx0LnF1ZXJ5UGFyYW1zPWUucXVlcnlQYXJh
bXMpCi12YXIgbj10aGlzLmhhbmRsZXIscj1tKG4sImRlc2VyaWFsaXplIil8fG0obiwibW9kZWwi
KQotcmV0dXJuIHRoaXMucnVuU2hhcmVkTW9kZWxIb29rKGUscixbdF0pfX0pCi1BLmtsYXNzZXM9
e3Jlc29sdmVkOkcscGFyYW06USxvYmplY3Q6S30KLXZhciBZPWQoeCx7bmFtZTpudWxsLHBpdm90
SGFuZGxlcjpudWxsLGNvbnRleHRzOm51bGwscXVlcnlQYXJhbXM6bnVsbCxpbml0aWFsaXplOmZ1
bmN0aW9uKGUpe3RoaXMubmFtZT1lLm5hbWUsdGhpcy5waXZvdEhhbmRsZXI9ZS5waXZvdEhhbmRs
ZXIsdGhpcy5jb250ZXh0cz1lLmNvbnRleHRzfHxbXSx0aGlzLnF1ZXJ5UGFyYW1zPWUucXVlcnlQ
YXJhbXN9LGFwcGx5VG9TdGF0ZTpmdW5jdGlvbihlLHQsbixyLGkpe3ZhciBzPW8oW3RoaXMubmFt
ZV0uY29uY2F0KHRoaXMuY29udGV4dHMpKSxhPXNbMF0sdT10LmhhbmRsZXJzRm9yKGFbMF0pLGw9
dVt1Lmxlbmd0aC0xXS5oYW5kbGVyCi1yZXR1cm4gdGhpcy5hcHBseVRvSGFuZGxlcnMoZSx1LG4s
bCxyLG51bGwsaSl9LGFwcGx5VG9IYW5kbGVyczpmdW5jdGlvbihlLHQsbixyLG8scyxhKXt2YXIg
dSxsLGMscCxmLGgsZCxtLGcseT1uZXcgdixiPXRoaXMuY29udGV4dHMuc2xpY2UoMCksXz10Lmxl
bmd0aAotaWYodGhpcy5waXZvdEhhbmRsZXIpZm9yKHU9MCxsPXQubGVuZ3RoO3U8bDsrK3UpaWYo
dFt1XS5oYW5kbGVyPT09dGhpcy5waXZvdEhhbmRsZXIuX2hhbmRsZXJOYW1lKXtfPXUKLWJyZWFr
fWZvcih1PXQubGVuZ3RoLTE7dT49MDstLXUpYz10W3VdLHA9Yy5oYW5kbGVyLGY9ZS5oYW5kbGVy
SW5mb3NbdV0saD1udWxsLGMubmFtZXMubGVuZ3RoPjA/dT49Xz9oPXRoaXMuY3JlYXRlUGFyYW1I
YW5kbGVySW5mbyhwLG4sYy5uYW1lcyxiLGYpOihkPWEocCksaD10aGlzLmdldEhhbmRsZXJJbmZv
Rm9yRHluYW1pY1NlZ21lbnQocCxuLGMubmFtZXMsYixmLHIsdSxkKSk6aD10aGlzLmNyZWF0ZVBh
cmFtSGFuZGxlckluZm8ocCxuLGMubmFtZXMsYixmKSxzJiYoaD1oLmJlY29tZVJlc29sdmVkKG51
bGwsaC5jb250ZXh0KSxtPWYmJmYuY29udGV4dCxjLm5hbWVzLmxlbmd0aD4wJiZoLmNvbnRleHQ9
PT1tJiYoaC5wYXJhbXM9ZiYmZi5wYXJhbXMpLGguY29udGV4dD1tKSxnPWYsKHU+PV98fGguc2hv
dWxkU3VwZXJjZWRlKGYpKSYmKF89TWF0aC5taW4odSxfKSxnPWgpLG8mJiFzJiYoZz1nLmJlY29t
ZVJlc29sdmVkKG51bGwsZy5jb250ZXh0KSkseS5oYW5kbGVySW5mb3MudW5zaGlmdChnKQotaWYo
Yi5sZW5ndGg+MCl0aHJvdyBuZXcgRXJyb3IoIk1vcmUgY29udGV4dCBvYmplY3RzIHdlcmUgcGFz
c2VkIHRoYW4gdGhlcmUgYXJlIGR5bmFtaWMgc2VnbWVudHMgZm9yIHRoZSByb3V0ZTogIityKQot
cmV0dXJuIG98fHRoaXMuaW52YWxpZGF0ZUNoaWxkcmVuKHkuaGFuZGxlckluZm9zLF8pLGkoeS5x
dWVyeVBhcmFtcyx0aGlzLnF1ZXJ5UGFyYW1zfHx7fSkseX0saW52YWxpZGF0ZUNoaWxkcmVuOmZ1
bmN0aW9uKGUsdCl7dmFyIG4scixpCi1mb3Iobj10LHI9ZS5sZW5ndGg7bjxyOysrbilpPWVbbl0s
ZVtuXT1pLmdldFVucmVzb2x2ZWQoKX0sZ2V0SGFuZGxlckluZm9Gb3JEeW5hbWljU2VnbWVudDpm
dW5jdGlvbihlLHQsbixyLGksbyxzLGEpe3ZhciB1LGMKLWlmKHIubGVuZ3RoPjApe2lmKHU9clty
Lmxlbmd0aC0xXSxsKHUpKXJldHVybiB0aGlzLmNyZWF0ZVBhcmFtSGFuZGxlckluZm8oZSx0LG4s
cixpKQotci5wb3AoKX1lbHNle2lmKGkmJmkubmFtZT09PWUpcmV0dXJuIGkKLWlmKCF0aGlzLnBy
ZVRyYW5zaXRpb25TdGF0ZSlyZXR1cm4gaQotYz10aGlzLnByZVRyYW5zaXRpb25TdGF0ZS5oYW5k
bGVySW5mb3Nbc10sdT1jJiZjLmNvbnRleHR9cmV0dXJuIEEoIm9iamVjdCIse25hbWU6ZSxnZXRI
YW5kbGVyOnQsc2VyaWFsaXplcjphLGNvbnRleHQ6dSxuYW1lczpufSl9LGNyZWF0ZVBhcmFtSGFu
ZGxlckluZm86ZnVuY3Rpb24oZSx0LG4scixpKXtmb3IodmFyIG8scyxhLHU9e30sYz1uLmxlbmd0
aDtjLS07KWlmKG89aSYmZT09PWkubmFtZSYmaS5wYXJhbXN8fHt9LHM9cltyLmxlbmd0aC0xXSxh
PW5bY10sbChzKSl1W2FdPSIiK3IucG9wKCkKLWVsc2V7aWYoIW8uaGFzT3duUHJvcGVydHkoYSkp
dGhyb3cgbmV3IEVycm9yKCJZb3UgZGlkbid0IHByb3ZpZGUgZW5vdWdoIHN0cmluZy9udW1lcmlj
IHBhcmFtZXRlcnMgdG8gc2F0aXNmeSBhbGwgb2YgdGhlIGR5bmFtaWMgc2VnbWVudHMgZm9yIHJv
dXRlICIrZSkKLXVbYV09b1thXX1yZXR1cm4gQSgicGFyYW0iLHtuYW1lOmUsZ2V0SGFuZGxlcjp0
LHBhcmFtczp1fSl9fSkKLVQucHJvdG90eXBlPVcoRXJyb3IucHJvdG90eXBlKQotdmFyIEo9ZCh4
LHt1cmw6bnVsbCxpbml0aWFsaXplOmZ1bmN0aW9uKGUpe3RoaXMudXJsPWUudXJsfSxhcHBseVRv
U3RhdGU6ZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIHIoZSl7aWYoZSYmZS5pbmFjY2Vzc2libGVC
eVVSTCl0aHJvdyBuZXcgVChtKQotcmV0dXJuIGV9dmFyIG8scyxhLHUsbCxjLHAsZj1uZXcgdixo
PXQucmVjb2duaXplKHRoaXMudXJsKQotaWYoIWgpdGhyb3cgbmV3IFQodGhpcy51cmwpCi12YXIg
ZD0hMSxtPXRoaXMudXJsCi1mb3IoYz0wLHA9aC5sZW5ndGg7YzxwOysrYylvPWhbY10scz1vLmhh
bmRsZXIsYT1BKCJwYXJhbSIse25hbWU6cyxnZXRIYW5kbGVyOm4scGFyYW1zOm8ucGFyYW1zfSks
dT1hLmhhbmRsZXIsdT9yKHUpOmEuaGFuZGxlclByb21pc2U9YS5oYW5kbGVyUHJvbWlzZS50aGVu
KHIpLGw9ZS5oYW5kbGVySW5mb3NbY10sZHx8YS5zaG91bGRTdXBlcmNlZGUobCk/KGQ9ITAsZi5o
YW5kbGVySW5mb3NbY109YSk6Zi5oYW5kbGVySW5mb3NbY109bAotcmV0dXJuIGkoZi5xdWVyeVBh
cmFtcyxoLnF1ZXJ5UGFyYW1zKSxmfX0pLFg9QXJyYXkucHJvdG90eXBlLnBvcAotUy5wcm90b3R5
cGU9e21hcDpmdW5jdGlvbihlKXt0aGlzLnJlY29nbml6ZXIuZGVsZWdhdGU9dGhpcy5kZWxlZ2F0
ZSx0aGlzLnJlY29nbml6ZXIubWFwKGUsZnVuY3Rpb24oZSx0KXt2YXIgbixyLGkKLWZvcihuPXQu
bGVuZ3RoLTEscj0hMDtuPj0wJiZyOy0tbilpPXRbbl0sZS5hZGQodCx7YXM6aS5oYW5kbGVyfSks
cj0iLyI9PT1pLnBhdGh8fCIiPT09aS5wYXRofHwiLmluZGV4Ij09PWkuaGFuZGxlci5zbGljZSgt
Nil9KX0saGFzUm91dGU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucmVjb2duaXplci5oYXNSb3V0
ZShlKX0sZ2V0SGFuZGxlcjpmdW5jdGlvbigpe30sZ2V0U2VyaWFsaXplcjpmdW5jdGlvbigpe30s
cXVlcnlQYXJhbXNUcmFuc2l0aW9uOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLG89dGhpcwotcmV0
dXJuIGsodGhpcyxyLGUpLCF0JiZ0aGlzLmFjdGl2ZVRyYW5zaXRpb24/dGhpcy5hY3RpdmVUcmFu
c2l0aW9uOihpPW5ldyBfKHRoaXMpLGkucXVlcnlQYXJhbXNPbmx5PSEwLG4ucXVlcnlQYXJhbXM9
VSh0aGlzLHIuaGFuZGxlckluZm9zLHIucXVlcnlQYXJhbXMsaSksaS5wcm9taXNlPWkucHJvbWlz
ZS50aGVuKGZ1bmN0aW9uKGUpe3JldHVybiBEKGksbiwhMCksby5kaWRUcmFuc2l0aW9uJiZvLmRp
ZFRyYW5zaXRpb24oby5jdXJyZW50SGFuZGxlckluZm9zKSxlfSxudWxsLGgoIlRyYW5zaXRpb24g
Y29tcGxldGUiKSksaSl9LHRyYW5zaXRpb25CeUludGVudDpmdW5jdGlvbihlKXt0cnl7cmV0dXJu
IFIuYXBwbHkodGhpcyxhcmd1bWVudHMpfWNhdGNoKHQpe3JldHVybiBuZXcgXyh0aGlzLGUsbnVs
bCx0KX19LHJlc2V0OmZ1bmN0aW9uKCl7dGhpcy5zdGF0ZSYmYyh0aGlzLnN0YXRlLmhhbmRsZXJJ
bmZvcy5zbGljZSgpLnJldmVyc2UoKSxmdW5jdGlvbihlKXtnKGUuaGFuZGxlciwiZXhpdCIpfSks
dGhpcy5vbGRTdGF0ZT12b2lkIDAsdGhpcy5zdGF0ZT1uZXcgdix0aGlzLmN1cnJlbnRIYW5kbGVy
SW5mb3M9bnVsbH0sYWN0aXZlVHJhbnNpdGlvbjpudWxsLGhhbmRsZVVSTDpmdW5jdGlvbihlKXt2
YXIgdD1ILmNhbGwoYXJndW1lbnRzKQotcmV0dXJuIi8iIT09ZS5jaGFyQXQoMCkmJih0WzBdPSIv
IitlKSxJKHRoaXMsdCkubWV0aG9kKG51bGwpfSx1cGRhdGVVUkw6ZnVuY3Rpb24oKXt0aHJvdyBu
ZXcgRXJyb3IoInVwZGF0ZVVSTCBpcyBub3QgaW1wbGVtZW50ZWQiKX0scmVwbGFjZVVSTDpmdW5j
dGlvbihlKXt0aGlzLnVwZGF0ZVVSTChlKX0sdHJhbnNpdGlvblRvOmZ1bmN0aW9uKCl7cmV0dXJu
IEkodGhpcyxhcmd1bWVudHMpfSxpbnRlcm1lZGlhdGVUcmFuc2l0aW9uVG86ZnVuY3Rpb24oKXty
ZXR1cm4gSSh0aGlzLGFyZ3VtZW50cywhMCl9LHJlZnJlc2g6ZnVuY3Rpb24oZSl7dmFyIHQsbixy
LGk9dGhpcy5hY3RpdmVUcmFuc2l0aW9uLG89aT9pLnN0YXRlOnRoaXMuc3RhdGUscz1vLmhhbmRs
ZXJJbmZvcyx1PXt9Ci1mb3IodD0wLG49cy5sZW5ndGg7dDxuOysrdClyPXNbdF0sdVtyLm5hbWVd
PXIucGFyYW1zfHx7fQotYSh0aGlzLCJTdGFydGluZyBhIHJlZnJlc2ggdHJhbnNpdGlvbiIpCi12
YXIgbD1uZXcgWSh7bmFtZTpzW3MubGVuZ3RoLTFdLm5hbWUscGl2b3RIYW5kbGVyOmV8fHNbMF0u
aGFuZGxlcixjb250ZXh0czpbXSxxdWVyeVBhcmFtczp0aGlzLl9jaGFuZ2VkUXVlcnlQYXJhbXN8
fG8ucXVlcnlQYXJhbXN8fHt9fSksYz10aGlzLnRyYW5zaXRpb25CeUludGVudChsLCExKQotcmV0
dXJuIGkmJiJyZXBsYWNlIj09PWkudXJsTWV0aG9kJiZjLm1ldGhvZChpLnVybE1ldGhvZCksY30s
cmVwbGFjZVdpdGg6ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLGFyZ3VtZW50cykubWV0aG9kKCJy
ZXBsYWNlIil9LGdlbmVyYXRlOmZ1bmN0aW9uKGUpe3ZhciB0LG4scixzLGE9byhILmNhbGwoYXJn
dW1lbnRzLDEpKSx1PWFbMF0sbD1hWzFdLGM9bmV3IFkoe25hbWU6ZSxjb250ZXh0czp1fSkscD1j
LmFwcGx5VG9TdGF0ZSh0aGlzLnN0YXRlLHRoaXMucmVjb2duaXplcix0aGlzLmdldEhhbmRsZXIs
bnVsbCx0aGlzLmdldFNlcmlhbGl6ZXIpLGY9e30KLWZvcih0PTAsbj1wLmhhbmRsZXJJbmZvcy5s
ZW5ndGg7dDxuOysrdClyPXAuaGFuZGxlckluZm9zW3RdLHM9ci5zZXJpYWxpemUoKSxpKGYscykK
LXJldHVybiBmLnF1ZXJ5UGFyYW1zPWwsdGhpcy5yZWNvZ25pemVyLmdlbmVyYXRlKGUsZil9LGFw
cGx5SW50ZW50OmZ1bmN0aW9uKGUsdCl7dmFyIG49bmV3IFkoe25hbWU6ZSxjb250ZXh0czp0fSks
cj10aGlzLmFjdGl2ZVRyYW5zaXRpb24mJnRoaXMuYWN0aXZlVHJhbnNpdGlvbi5zdGF0ZXx8dGhp
cy5zdGF0ZQotcmV0dXJuIG4uYXBwbHlUb1N0YXRlKHIsdGhpcy5yZWNvZ25pemVyLHRoaXMuZ2V0
SGFuZGxlcixudWxsLHRoaXMuZ2V0U2VyaWFsaXplcil9LGlzQWN0aXZlSW50ZW50OmZ1bmN0aW9u
KGUsdCxuLHIpe3ZhciBvLHMsYT1yfHx0aGlzLnN0YXRlLHU9YS5oYW5kbGVySW5mb3MKLWlmKCF1
Lmxlbmd0aClyZXR1cm4hMQotdmFyIGw9dVt1Lmxlbmd0aC0xXS5uYW1lLGM9dGhpcy5yZWNvZ25p
emVyLmhhbmRsZXJzRm9yKGwpLHA9MAotZm9yKHM9Yy5sZW5ndGg7cDxzJiYobz11W3BdLG8ubmFt
ZSE9PWUpOysrcCk7aWYocD09PWMubGVuZ3RoKXJldHVybiExCi12YXIgaD1uZXcgdgotaC5oYW5k
bGVySW5mb3M9dS5zbGljZSgwLHArMSksYz1jLnNsaWNlKDAscCsxKQotdmFyIGQ9bmV3IFkoe25h
bWU6bCxjb250ZXh0czp0fSksbT1kLmFwcGx5VG9IYW5kbGVycyhoLGMsdGhpcy5nZXRIYW5kbGVy
LGwsITAsITAsdGhpcy5nZXRTZXJpYWxpemVyKSxnPU0obS5oYW5kbGVySW5mb3MsaC5oYW5kbGVy
SW5mb3MpCi1pZighbnx8IWcpcmV0dXJuIGcKLXZhciB5PXt9Ci1pKHksbikKLXZhciBiPWEucXVl
cnlQYXJhbXMKLWZvcih2YXIgXyBpbiBiKWIuaGFzT3duUHJvcGVydHkoXykmJnkuaGFzT3duUHJv
cGVydHkoXykmJih5W19dPWJbX10pCi1yZXR1cm4gZyYmIWYoeSxuKX0saXNBY3RpdmU6ZnVuY3Rp
b24oZSl7dmFyIHQ9byhILmNhbGwoYXJndW1lbnRzLDEpKQotcmV0dXJuIHRoaXMuaXNBY3RpdmVJ
bnRlbnQoZSx0WzBdLHRbMV0pfSx0cmlnZ2VyOmZ1bmN0aW9uKCl7dmFyIGU9SC5jYWxsKGFyZ3Vt
ZW50cykKLXAodGhpcyx0aGlzLmN1cnJlbnRIYW5kbGVySW5mb3MsITEsZSl9LGxvZzpudWxsfSxl
LlRyYW5zaXRpb249XyxlLmRlZmF1bHQ9U30pLGUoInJzdnAiLFsiZXhwb3J0cyIsImVtYmVyLWJh
YmVsIiwibm9kZS1tb2R1bGUiXSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiCi1mdW5jdGlv
biByKGUsdCl7Zm9yKHZhciBuPTAscj1lLmxlbmd0aDtuPHI7bisrKWlmKGVbbl09PT10KXJldHVy
biBuCi1yZXR1cm4tMX1mdW5jdGlvbiBpKGUpe3ZhciB0PWUuX3Byb21pc2VDYWxsYmFja3MKLXJl
dHVybiB0fHwodD1lLl9wcm9taXNlQ2FsbGJhY2tzPXt9KSx0fWZ1bmN0aW9uIG8oZSx0KXtyZXR1
cm4ib25lcnJvciI9PT1lP3ZvaWQgYmUub24oImVycm9yIix0KToyIT09YXJndW1lbnRzLmxlbmd0
aD9iZVtlXTp2b2lkKGJlW2VdPXQpfWZ1bmN0aW9uIHMoZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlw
ZW9mIGV8fCJvYmplY3QiPT10eXBlb2YgZSYmbnVsbCE9PWV9ZnVuY3Rpb24gYShlKXtyZXR1cm4i
ZnVuY3Rpb24iPT10eXBlb2YgZX1mdW5jdGlvbiB1KGUpe3JldHVybiJvYmplY3QiPT10eXBlb2Yg
ZSYmbnVsbCE9PWV9ZnVuY3Rpb24gbCgpe31mdW5jdGlvbiBjKCl7c2V0VGltZW91dChmdW5jdGlv
bigpe2Zvcih2YXIgZT0wO2U8Q2UubGVuZ3RoO2UrKyl7dmFyIHQ9Q2VbZV0sbj10LnBheWxvYWQK
LW4uZ3VpZD1uLmtleStuLmlkLG4uY2hpbGRHdWlkPW4ua2V5K24uY2hpbGRJZCxuLmVycm9yJiYo
bi5zdGFjaz1uLmVycm9yLnN0YWNrKSxiZS50cmlnZ2VyKHQubmFtZSx0LnBheWxvYWQpfUNlLmxl
bmd0aD0wfSw1MCl9ZnVuY3Rpb24gcChlLHQsbil7MT09PUNlLnB1c2goe25hbWU6ZSxwYXlsb2Fk
OntrZXk6dC5fZ3VpZEtleSxpZDp0Ll9pZCxldmVudE5hbWU6ZSxkZXRhaWw6dC5fcmVzdWx0LGNo
aWxkSWQ6biYmbi5faWQsbGFiZWw6dC5fbGFiZWwsdGltZVN0YW1wOkVlKCksZXJyb3I6YmVbImlu
c3RydW1lbnQtd2l0aC1zdGFjayJdP25ldyBFcnJvcih0Ll9sYWJlbCk6bnVsbH19KSYmYygpfWZ1
bmN0aW9uIGYoZSx0KXt2YXIgbj10aGlzCi1pZihlJiYib2JqZWN0Ij09dHlwZW9mIGUmJmUuY29u
c3RydWN0b3I9PT1uKXJldHVybiBlCi12YXIgcj1uZXcgbihkLHQpCi1yZXR1cm4gXyhyLGUpLHJ9
ZnVuY3Rpb24gaCgpe3JldHVybiBuZXcgVHlwZUVycm9yKCJBIHByb21pc2VzIGNhbGxiYWNrIGNh
bm5vdCByZXR1cm4gdGhhdCBzYW1lIHByb21pc2UuIil9ZnVuY3Rpb24gZCgpe31mdW5jdGlvbiBt
KGUpe3RyeXtyZXR1cm4gZS50aGVufWNhdGNoKGUpe3JldHVybiBTZS5lcnJvcj1lLFNlfX1mdW5j
dGlvbiBnKGUsdCxuLHIpe3RyeXtlLmNhbGwodCxuLHIpfWNhdGNoKGUpe3JldHVybiBlfX1mdW5j
dGlvbiB5KGUsdCxuKXtiZS5hc3luYyhmdW5jdGlvbihlKXt2YXIgcj0hMSxpPWcobix0LGZ1bmN0
aW9uKG4pe3J8fChyPSEwLHQhPT1uP18oZSxuLHZvaWQgMCk6RShlLG4pKX0sZnVuY3Rpb24odCl7
cnx8KHI9ITAseChlLHQpKX0sIlNldHRsZTogIisoZS5fbGFiZWx8fCIgdW5rbm93biBwcm9taXNl
IikpCi0hciYmaSYmKHI9ITAseChlLGkpKX0sZSl9ZnVuY3Rpb24gdihlLHQpe3QuX3N0YXRlPT09
QWU/RShlLHQuX3Jlc3VsdCk6dC5fc3RhdGU9PT1UZT8odC5fb25FcnJvcj1udWxsLHgoZSx0Ll9y
ZXN1bHQpKTpDKHQsdm9pZCAwLGZ1bmN0aW9uKG4pe3QhPT1uP18oZSxuLHZvaWQgMCk6RShlLG4p
fSxmdW5jdGlvbih0KXtyZXR1cm4geChlLHQpfSl9ZnVuY3Rpb24gYihlLHQsbil7dC5jb25zdHJ1
Y3Rvcj09PWUuY29uc3RydWN0b3ImJm49PT1rJiZlLmNvbnN0cnVjdG9yLnJlc29sdmU9PT1mP3Yo
ZSx0KTpuPT09U2U/KHgoZSxTZS5lcnJvciksU2UuZXJyb3I9bnVsbCk6dm9pZCAwPT09bj9FKGUs
dCk6YShuKT95KGUsdCxuKTpFKGUsdCl9ZnVuY3Rpb24gXyhlLHQpe2U9PT10P0UoZSx0KTpzKHQp
P2IoZSx0LG0odCkpOkUoZSx0KX1mdW5jdGlvbiB3KGUpe2UuX29uRXJyb3ImJmUuX29uRXJyb3Io
ZS5fcmVzdWx0KSxPKGUpfWZ1bmN0aW9uIEUoZSx0KXtlLl9zdGF0ZT09PU9lJiYoZS5fcmVzdWx0
PXQsZS5fc3RhdGU9QWUsMD09PWUuX3N1YnNjcmliZXJzLmxlbmd0aD9iZS5pbnN0cnVtZW50JiZw
KCJmdWxmaWxsZWQiLGUpOmJlLmFzeW5jKE8sZSkpfWZ1bmN0aW9uIHgoZSx0KXtlLl9zdGF0ZT09
PU9lJiYoZS5fc3RhdGU9VGUsZS5fcmVzdWx0PXQsYmUuYXN5bmModyxlKSl9ZnVuY3Rpb24gQyhl
LHQsbixyKXt2YXIgaT1lLl9zdWJzY3JpYmVycyxvPWkubGVuZ3RoCi1lLl9vbkVycm9yPW51bGws
aVtvXT10LGlbbytBZV09bixpW28rVGVdPXIsMD09PW8mJmUuX3N0YXRlJiZiZS5hc3luYyhPLGUp
fWZ1bmN0aW9uIE8oZSl7dmFyIHQ9ZS5fc3Vic2NyaWJlcnMsbj1lLl9zdGF0ZQotaWYoYmUuaW5z
dHJ1bWVudCYmcChuPT09QWU/ImZ1bGZpbGxlZCI6InJlamVjdGVkIixlKSwwIT09dC5sZW5ndGgp
e2Zvcih2YXIgcj12b2lkIDAsaT12b2lkIDAsbz1lLl9yZXN1bHQscz0wO3M8dC5sZW5ndGg7cys9
MylyPXRbc10saT10W3Mrbl0scj9TKG4scixpLG8pOmkobykKLWUuX3N1YnNjcmliZXJzLmxlbmd0
aD0wfX1mdW5jdGlvbiBBKCl7dGhpcy5lcnJvcj1udWxsfWZ1bmN0aW9uIFQoZSx0KXt0cnl7cmV0
dXJuIGUodCl9Y2F0Y2goZSl7cmV0dXJuIFJlLmVycm9yPWUsUmV9fWZ1bmN0aW9uIFMoZSx0LG4s
cil7dmFyIGk9YShuKSxvPXZvaWQgMCxzPXZvaWQgMCx1PXZvaWQgMCxsPXZvaWQgMAotaWYoaSl7
aWYobz1UKG4sciksbz09PVJlPyhsPSEwLHM9by5lcnJvcixvLmVycm9yPW51bGwpOnU9ITAsdD09
PW8pcmV0dXJuIHZvaWQgeCh0LGgoKSl9ZWxzZSBvPXIsdT0hMAotdC5fc3RhdGUhPT1PZXx8KGkm
JnU/Xyh0LG8pOmw/eCh0LHMpOmU9PT1BZT9FKHQsbyk6ZT09PVRlJiZ4KHQsbykpfWZ1bmN0aW9u
IFIoZSx0KXt2YXIgbj0hMQotdHJ5e3QoZnVuY3Rpb24odCl7bnx8KG49ITAsXyhlLHQpKX0sZnVu
Y3Rpb24odCl7bnx8KG49ITAseChlLHQpKX0pfWNhdGNoKHQpe3goZSx0KX19ZnVuY3Rpb24gayhl
LHQsbil7dmFyIHI9dGhpcyxpPXIuX3N0YXRlCi1pZihpPT09QWUmJiFlfHxpPT09VGUmJiF0KXJl
dHVybiBiZS5pbnN0cnVtZW50JiZwKCJjaGFpbmVkIixyLHIpLHIKLXIuX29uRXJyb3I9bnVsbAot
dmFyIG89bmV3IHIuY29uc3RydWN0b3IoZCxuKSxzPXIuX3Jlc3VsdAotaWYoYmUuaW5zdHJ1bWVu
dCYmcCgiY2hhaW5lZCIscixvKSxpKXt2YXIgYT1hcmd1bWVudHNbaS0xXQotYmUuYXN5bmMoZnVu
Y3Rpb24oKXtyZXR1cm4gUyhpLG8sYSxzKX0pfWVsc2UgQyhyLG8sZSx0KQotcmV0dXJuIG99ZnVu
Y3Rpb24gTihlLHQsbil7cmV0dXJuIGU9PT1BZT97c3RhdGU6ImZ1bGZpbGxlZCIsdmFsdWU6bn06
e3N0YXRlOiJyZWplY3RlZCIscmVhc29uOm59fWZ1bmN0aW9uIFAoZSx0LG4scil7dGhpcy5faW5z
dGFuY2VDb25zdHJ1Y3Rvcj1lLHRoaXMucHJvbWlzZT1uZXcgZShkLHIpLHRoaXMuX2Fib3J0T25S
ZWplY3Q9bix0aGlzLl92YWxpZGF0ZUlucHV0KHQpPyh0aGlzLl9pbnB1dD10LHRoaXMubGVuZ3Ro
PXQubGVuZ3RoLHRoaXMuX3JlbWFpbmluZz10Lmxlbmd0aCx0aGlzLl9pbml0KCksMD09PXRoaXMu
bGVuZ3RoP0UodGhpcy5wcm9taXNlLHRoaXMuX3Jlc3VsdCk6KHRoaXMubGVuZ3RoPXRoaXMubGVu
Z3RofHwwLHRoaXMuX2VudW1lcmF0ZSgpLDA9PT10aGlzLl9yZW1haW5pbmcmJkUodGhpcy5wcm9t
aXNlLHRoaXMuX3Jlc3VsdCkpKTp4KHRoaXMucHJvbWlzZSx0aGlzLl92YWxpZGF0aW9uRXJyb3Io
KSl9ZnVuY3Rpb24gaihlLHQpe3JldHVybiBuZXcgUCh0aGlzLGUsITAsdCkucHJvbWlzZX1mdW5j
dGlvbiBEKGUsdCl7dmFyIG49dGhpcyxyPW5ldyBuKGQsdCkKLWlmKCF3ZShlKSlyZXR1cm4geChy
LG5ldyBUeXBlRXJyb3IoIllvdSBtdXN0IHBhc3MgYW4gYXJyYXkgdG8gcmFjZS4iKSkscgotZm9y
KHZhciBpPTA7ci5fc3RhdGU9PT1PZSYmaTxlLmxlbmd0aDtpKyspQyhuLnJlc29sdmUoZVtpXSks
dm9pZCAwLGZ1bmN0aW9uKGUpe3JldHVybiBfKHIsZSl9LGZ1bmN0aW9uKGUpe3JldHVybiB4KHIs
ZSl9KQotcmV0dXJuIHJ9ZnVuY3Rpb24gTChlLHQpe3ZhciBuPXRoaXMscj1uZXcgbihkLHQpCi1y
ZXR1cm4geChyLGUpLHJ9ZnVuY3Rpb24gSSgpe3Rocm93IG5ldyBUeXBlRXJyb3IoIllvdSBtdXN0
IHBhc3MgYSByZXNvbHZlciBmdW5jdGlvbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlIHBy
b21pc2UgY29uc3RydWN0b3IiKX1mdW5jdGlvbiBNKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiRmFp
bGVkIHRvIGNvbnN0cnVjdCAnUHJvbWlzZSc6IFBsZWFzZSB1c2UgdGhlICduZXcnIG9wZXJhdG9y
LCB0aGlzIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24u
Iil9ZnVuY3Rpb24gRihlLHQpe3RoaXMuX2lkPU5lKyssdGhpcy5fbGFiZWw9dCx0aGlzLl9zdGF0
ZT12b2lkIDAsdGhpcy5fcmVzdWx0PXZvaWQgMCx0aGlzLl9zdWJzY3JpYmVycz1bXSxiZS5pbnN0
cnVtZW50JiZwKCJjcmVhdGVkIix0aGlzKSxkIT09ZSYmKCJmdW5jdGlvbiIhPXR5cGVvZiBlJiZJ
KCksdGhpcyBpbnN0YW5jZW9mIEY/Uih0aGlzLGUpOk0oKSl9ZnVuY3Rpb24geigpe3RoaXMudmFs
dWU9dm9pZCAwfWZ1bmN0aW9uIFUoZSl7dHJ5e3JldHVybiBlLnRoZW59Y2F0Y2goZSl7cmV0dXJu
IFBlLnZhbHVlPWUsUGV9fWZ1bmN0aW9uIEIoZSx0LG4pe3RyeXtlLmFwcGx5KHQsbil9Y2F0Y2go
ZSl7cmV0dXJuIFBlLnZhbHVlPWUsUGV9fWZ1bmN0aW9uIHEoZSx0KXtmb3IodmFyIG49e30scj1l
Lmxlbmd0aCxpPW5ldyBBcnJheShyKSxvPTA7bzxyO28rKylpW29dPWVbb10KLWZvcih2YXIgcz0w
O3M8dC5sZW5ndGg7cysrKXtuW3Rbc11dPWlbcysxXX1yZXR1cm4gbn1mdW5jdGlvbiBIKGUpe2Zv
cih2YXIgdD1lLmxlbmd0aCxuPW5ldyBBcnJheSh0LTEpLHI9MTtyPHQ7cisrKW5bci0xXT1lW3Jd
Ci1yZXR1cm4gbn1mdW5jdGlvbiBWKGUsdCl7cmV0dXJue3RoZW46ZnVuY3Rpb24obixyKXtyZXR1
cm4gZS5jYWxsKHQsbixyKX19fWZ1bmN0aW9uIFcoZSxuKXt2YXIgcj1mdW5jdGlvbigpe2Zvcih2
YXIgdD10aGlzLHI9YXJndW1lbnRzLmxlbmd0aCxpPW5ldyBBcnJheShyKzEpLG89ITEscz0wO3M8
cjsrK3Mpe3ZhciBhPWFyZ3VtZW50c1tzXQotaWYoIW8pe2lmKChvPUsoYSkpPT09amUpe3ZhciB1
PW5ldyBGKGQpCi1yZXR1cm4geCh1LGplLnZhbHVlKSx1fW8mJiEwIT09byYmKGE9VihvLGEpKX1p
W3NdPWF9dmFyIGw9bmV3IEYoZCkKLXJldHVybiBpW3JdPWZ1bmN0aW9uKGUsdCl7ZT94KGwsZSk6
dm9pZCAwPT09bj9fKGwsdCk6ITA9PT1uP18obCxIKGFyZ3VtZW50cykpOndlKG4pP18obCxxKGFy
Z3VtZW50cyxuKSk6XyhsLHQpfSxvP0cobCxpLGUsdCk6JChsLGksZSx0KX0KLXJldHVybigwLHQu
ZGVmYXVsdHMpKHIsZSkscn1mdW5jdGlvbiAkKGUsdCxuLHIpe3ZhciBpPUIobixyLHQpCi1yZXR1
cm4gaT09PVBlJiZ4KGUsaS52YWx1ZSksZX1mdW5jdGlvbiBHKGUsdCxuLHIpe3JldHVybiBGLmFs
bCh0KS50aGVuKGZ1bmN0aW9uKHQpe3ZhciBpPUIobixyLHQpCi1yZXR1cm4gaT09PVBlJiZ4KGUs
aS52YWx1ZSksZX0pfWZ1bmN0aW9uIEsoZSl7cmV0dXJuISghZXx8Im9iamVjdCIhPXR5cGVvZiBl
KSYmKGUuY29uc3RydWN0b3I9PT1GfHxVKGUpKX1mdW5jdGlvbiBRKGUsdCl7cmV0dXJuIEYuYWxs
KGUsdCl9ZnVuY3Rpb24gWShlLHQsbil7dGhpcy5fc3VwZXJDb25zdHJ1Y3RvcihlLHQsITEsbil9
ZnVuY3Rpb24gSihlLHQpe3JldHVybiBuZXcgWShGLGUsdCkucHJvbWlzZX1mdW5jdGlvbiBYKGUs
dCl7cmV0dXJuIEYucmFjZShlLHQpfWZ1bmN0aW9uIFooZSx0LG4pe3RoaXMuX3N1cGVyQ29uc3Ry
dWN0b3IoZSx0LCEwLG4pfWZ1bmN0aW9uIGVlKGUsdCl7cmV0dXJuIG5ldyBaKEYsZSx0KS5wcm9t
aXNlfWZ1bmN0aW9uIHRlKGUsdCxuKXt0aGlzLl9zdXBlckNvbnN0cnVjdG9yKGUsdCwhMSxuKX1m
dW5jdGlvbiBuZShlLHQpe3JldHVybiBuZXcgdGUoRixlLHQpLnByb21pc2V9ZnVuY3Rpb24gcmUo
ZSl7dGhyb3cgc2V0VGltZW91dChmdW5jdGlvbigpe3Rocm93IGV9KSxlfWZ1bmN0aW9uIGllKGUp
e3ZhciB0PXtyZXNvbHZlOnZvaWQgMCxyZWplY3Q6dm9pZCAwfQotcmV0dXJuIHQucHJvbWlzZT1u
ZXcgRihmdW5jdGlvbihlLG4pe3QucmVzb2x2ZT1lLHQucmVqZWN0PW59LGUpLHR9ZnVuY3Rpb24g
b2UoZSx0LG4pe3JldHVybiBGLmFsbChlLG4pLnRoZW4oZnVuY3Rpb24oZSl7aWYoIWEodCkpdGhy
b3cgbmV3IFR5cGVFcnJvcigiWW91IG11c3QgcGFzcyBhIGZ1bmN0aW9uIGFzIG1hcCdzIHNlY29u
ZCBhcmd1bWVudC4iKQotZm9yKHZhciByPWUubGVuZ3RoLGk9bmV3IEFycmF5KHIpLG89MDtvPHI7
bysrKWlbb109dChlW29dKQotcmV0dXJuIEYuYWxsKGksbil9KX1mdW5jdGlvbiBzZShlLHQpe3Jl
dHVybiBGLnJlc29sdmUoZSx0KX1mdW5jdGlvbiBhZShlLHQpe3JldHVybiBGLnJlamVjdChlLHQp
fWZ1bmN0aW9uIHVlKGUsdCl7cmV0dXJuIEYuYWxsKGUsdCl9ZnVuY3Rpb24gbGUoZSx0KXtyZXR1
cm4gRi5yZXNvbHZlKGUsdCkudGhlbihmdW5jdGlvbihlKXtyZXR1cm4gdWUoZSx0KX0pfWZ1bmN0
aW9uIGNlKGUsdCxuKXtyZXR1cm4od2UoZSk/dWUoZSxuKTpsZShlLG4pKS50aGVuKGZ1bmN0aW9u
KGUpe2lmKCFhKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIllvdSBtdXN0IHBhc3MgYSBmdW5jdGlv
biBhcyBmaWx0ZXIncyBzZWNvbmQgYXJndW1lbnQuIikKLWZvcih2YXIgcj1lLmxlbmd0aCxpPW5l
dyBBcnJheShyKSxvPTA7bzxyO28rKylpW29dPXQoZVtvXSkKLXJldHVybiB1ZShpLG4pLnRoZW4o
ZnVuY3Rpb24odCl7Zm9yKHZhciBuPW5ldyBBcnJheShyKSxpPTAsbz0wO288cjtvKyspdFtvXSYm
KG5baV09ZVtvXSxpKyspCi1yZXR1cm4gbi5sZW5ndGg9aSxufSl9KX1mdW5jdGlvbiBwZShlLHQp
e0JlW0RlXT1lLEJlW0RlKzFdPXQsMj09PShEZSs9MikmJnFlKCl9ZnVuY3Rpb24gZmUoKXtyZXR1
cm4gdm9pZCAwIT09TGU/ZnVuY3Rpb24oKXtMZShkZSl9OmhlKCl9ZnVuY3Rpb24gaGUoKXtyZXR1
cm4gZnVuY3Rpb24oKXtyZXR1cm4gc2V0VGltZW91dChkZSwxKX19ZnVuY3Rpb24gZGUoKXtmb3Io
dmFyIGU9MDtlPERlO2UrPTIpeygwLEJlW2VdKShCZVtlKzFdKSxCZVtlXT12b2lkIDAsQmVbZSsx
XT12b2lkIDB9RGU9MH1mdW5jdGlvbiBtZSgpe2JlLm9uLmFwcGx5KGJlLGFyZ3VtZW50cyl9ZnVu
Y3Rpb24gZ2UoKXtiZS5vZmYuYXBwbHkoYmUsYXJndW1lbnRzKX1lLmZpbHRlcj1lLmFzeW5jPWUu
bWFwPWUucmVqZWN0PWUucmVzb2x2ZT1lLm9mZj1lLm9uPWUuY29uZmlndXJlPWUuZGVub2RlaWZ5
PWUuZGVmZXI9ZS5yZXRocm93PWUuaGFzaFNldHRsZWQ9ZS5oYXNoPWUucmFjZT1lLmFsbFNldHRs
ZWQ9ZS5hbGw9ZS5FdmVudFRhcmdldD1lLlByb21pc2U9ZS5jYXN0PWUuYXNhcD12b2lkIDAKLXZh
ciB5ZSx2ZT17bWl4aW46ZnVuY3Rpb24oZSl7cmV0dXJuIGUub249dGhpcy5vbixlLm9mZj10aGlz
Lm9mZixlLnRyaWdnZXI9dGhpcy50cmlnZ2VyLGUuX3Byb21pc2VDYWxsYmFja3M9dm9pZCAwLGV9
LG9uOmZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVF
cnJvcigiQ2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uIikKLXZhciBuPWkodGhpcyksbz12b2lk
IDAKLW89bltlXSxvfHwobz1uW2VdPVtdKSwtMT09PXIobyx0KSYmby5wdXNoKHQpfSxvZmY6ZnVu
Y3Rpb24oZSx0KXt2YXIgbj1pKHRoaXMpLG89dm9pZCAwLHM9dm9pZCAwCi1pZighdClyZXR1cm4g
dm9pZChuW2VdPVtdKQotbz1uW2VdLC0xIT09KHM9cihvLHQpKSYmby5zcGxpY2UocywxKX0sdHJp
Z2dlcjpmdW5jdGlvbihlLHQsbil7dmFyIHI9aSh0aGlzKSxvPXZvaWQgMAotaWYobz1yW2VdKWZv
cih2YXIgcz0wO3M8by5sZW5ndGg7cysrKSgwLG9bc10pKHQsbil9fSxiZT17aW5zdHJ1bWVudDoh
MX0KLXZlLm1peGluKGJlKQotdmFyIF9lPXZvaWQgMAotX2U9QXJyYXkuaXNBcnJheT9BcnJheS5p
c0FycmF5OmZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IEFycmF5XSI9PT1PYmplY3QucHJvdG90
eXBlLnRvU3RyaW5nLmNhbGwoZSl9Ci12YXIgd2U9X2UsRWU9RGF0ZS5ub3d8fGZ1bmN0aW9uKCl7
cmV0dXJuKG5ldyBEYXRlKS5nZXRUaW1lKCl9LHhlPU9iamVjdC5jcmVhdGV8fGZ1bmN0aW9uKGUp
e2lmKGFyZ3VtZW50cy5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlNlY29uZCBhcmd1bWVudCBu
b3Qgc3VwcG9ydGVkIikKLWlmKCJvYmplY3QiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9y
KCJBcmd1bWVudCBtdXN0IGJlIGFuIG9iamVjdCIpCi1yZXR1cm4gbC5wcm90b3R5cGU9ZSxuZXcg
bH0sQ2U9W10sT2U9dm9pZCAwLEFlPTEsVGU9MixTZT1uZXcgQSxSZT1uZXcgQQotUC5wcm90b3R5
cGUuX3ZhbGlkYXRlSW5wdXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHdlKGUpfSxQLnByb3RvdHlwZS5f
dmFsaWRhdGlvbkVycm9yPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBFcnJvcigiQXJyYXkgTWV0aG9k
cyBtdXN0IGJlIHByb3ZpZGVkIGFuIEFycmF5Iil9LFAucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9u
KCl7dGhpcy5fcmVzdWx0PW5ldyBBcnJheSh0aGlzLmxlbmd0aCl9LFAucHJvdG90eXBlLl9lbnVt
ZXJhdGU9ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy5sZW5ndGgsdD10aGlzLnByb21pc2Usbj10
aGlzLl9pbnB1dCxyPTA7dC5fc3RhdGU9PT1PZSYmcjxlO3IrKyl0aGlzLl9lYWNoRW50cnkoblty
XSxyKX0sUC5wcm90b3R5cGUuX3NldHRsZU1heWJlVGhlbmFibGU9ZnVuY3Rpb24oZSx0KXt2YXIg
bj10aGlzLl9pbnN0YW5jZUNvbnN0cnVjdG9yLHI9bi5yZXNvbHZlCi1pZihyPT09Zil7dmFyIGk9
bShlKQotaWYoaT09PWsmJmUuX3N0YXRlIT09T2UpZS5fb25FcnJvcj1udWxsLHRoaXMuX3NldHRs
ZWRBdChlLl9zdGF0ZSx0LGUuX3Jlc3VsdCkKLWVsc2UgaWYoImZ1bmN0aW9uIiE9dHlwZW9mIGkp
dGhpcy5fcmVtYWluaW5nLS0sdGhpcy5fcmVzdWx0W3RdPXRoaXMuX21ha2VSZXN1bHQoQWUsdCxl
KQotZWxzZSBpZihuPT09Ril7dmFyIG89bmV3IG4oZCkKLWIobyxlLGkpLHRoaXMuX3dpbGxTZXR0
bGVBdChvLHQpfWVsc2UgdGhpcy5fd2lsbFNldHRsZUF0KG5ldyBuKGZ1bmN0aW9uKHQpe3JldHVy
biB0KGUpfSksdCl9ZWxzZSB0aGlzLl93aWxsU2V0dGxlQXQocihlKSx0KX0sUC5wcm90b3R5cGUu
X2VhY2hFbnRyeT1mdW5jdGlvbihlLHQpe3UoZSk/dGhpcy5fc2V0dGxlTWF5YmVUaGVuYWJsZShl
LHQpOih0aGlzLl9yZW1haW5pbmctLSx0aGlzLl9yZXN1bHRbdF09dGhpcy5fbWFrZVJlc3VsdChB
ZSx0LGUpKX0sUC5wcm90b3R5cGUuX3NldHRsZWRBdD1mdW5jdGlvbihlLHQsbil7dmFyIHI9dGhp
cy5wcm9taXNlCi1yLl9zdGF0ZT09PU9lJiYodGhpcy5fcmVtYWluaW5nLS0sdGhpcy5fYWJvcnRP
blJlamVjdCYmZT09PVRlP3gocixuKTp0aGlzLl9yZXN1bHRbdF09dGhpcy5fbWFrZVJlc3VsdChl
LHQsbikpLDA9PT10aGlzLl9yZW1haW5pbmcmJkUocix0aGlzLl9yZXN1bHQpfSxQLnByb3RvdHlw
ZS5fbWFrZVJlc3VsdD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG59LFAucHJvdG90eXBlLl93aWxs
U2V0dGxlQXQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzCi1DKGUsdm9pZCAwLGZ1bmN0aW9uKGUp
e3JldHVybiBuLl9zZXR0bGVkQXQoQWUsdCxlKX0sZnVuY3Rpb24oZSl7cmV0dXJuIG4uX3NldHRs
ZWRBdChUZSx0LGUpfSl9Ci12YXIga2U9InJzdnBfIitFZSgpKyItIixOZT0wCi1GLmNhc3Q9ZixG
LmFsbD1qLEYucmFjZT1ELEYucmVzb2x2ZT1mLEYucmVqZWN0PUwsRi5wcm90b3R5cGU9e2NvbnN0
cnVjdG9yOkYsX2d1aWRLZXk6a2UsX29uRXJyb3I6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcwotYmUu
YWZ0ZXIoZnVuY3Rpb24oKXt0Ll9vbkVycm9yJiZiZS50cmlnZ2VyKCJlcnJvciIsZSx0Ll9sYWJl
bCl9KX0sdGhlbjprLGNhdGNoOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMudGhlbih2b2lkIDAs
ZSx0KX0sZmluYWxseTpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMscj1uLmNvbnN0cnVjdG9yCi1y
ZXR1cm4gbi50aGVuKGZ1bmN0aW9uKHQpe3JldHVybiByLnJlc29sdmUoZSgpKS50aGVuKGZ1bmN0
aW9uKCl7cmV0dXJuIHR9KX0sZnVuY3Rpb24odCl7cmV0dXJuIHIucmVzb2x2ZShlKCkpLnRoZW4o
ZnVuY3Rpb24oKXt0aHJvdyB0fSl9LHQpfX0KLXZhciBQZT1uZXcgeixqZT1uZXcgegotWS5wcm90
b3R5cGU9eGUoUC5wcm90b3R5cGUpLFkucHJvdG90eXBlLl9zdXBlckNvbnN0cnVjdG9yPVAsWS5w
cm90b3R5cGUuX21ha2VSZXN1bHQ9TixZLnByb3RvdHlwZS5fdmFsaWRhdGlvbkVycm9yPWZ1bmN0
aW9uKCl7cmV0dXJuIG5ldyBFcnJvcigiYWxsU2V0dGxlZCBtdXN0IGJlIGNhbGxlZCB3aXRoIGFu
IGFycmF5Iil9LFoucHJvdG90eXBlPXhlKFAucHJvdG90eXBlKSxaLnByb3RvdHlwZS5fc3VwZXJD
b25zdHJ1Y3Rvcj1QLFoucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKCl7dGhpcy5fcmVzdWx0PXt9
fSxaLnByb3RvdHlwZS5fdmFsaWRhdGVJbnB1dD1mdW5jdGlvbihlKXtyZXR1cm4gZSYmIm9iamVj
dCI9PXR5cGVvZiBlfSxaLnByb3RvdHlwZS5fdmFsaWRhdGlvbkVycm9yPWZ1bmN0aW9uKCl7cmV0
dXJuIG5ldyBFcnJvcigiUHJvbWlzZS5oYXNoIG11c3QgYmUgY2FsbGVkIHdpdGggYW4gb2JqZWN0
Iil9LFoucHJvdG90eXBlLl9lbnVtZXJhdGU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS5wcm9t
aXNlLG49ZS5faW5wdXQscj1bXQotZm9yKHZhciBpIGluIG4pdC5fc3RhdGU9PT1PZSYmT2JqZWN0
LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4saSkmJnIucHVzaCh7cG9zaXRpb246aSxl
bnRyeTpuW2ldfSkKLXZhciBvPXIubGVuZ3RoCi1lLl9yZW1haW5pbmc9bwotZm9yKHZhciBzPXZv
aWQgMCxhPTA7dC5fc3RhdGU9PT1PZSYmYTxvO2ErKylzPXJbYV0sZS5fZWFjaEVudHJ5KHMuZW50
cnkscy5wb3NpdGlvbil9LHRlLnByb3RvdHlwZT14ZShaLnByb3RvdHlwZSksdGUucHJvdG90eXBl
Ll9zdXBlckNvbnN0cnVjdG9yPVAsdGUucHJvdG90eXBlLl9tYWtlUmVzdWx0PU4sdGUucHJvdG90
eXBlLl92YWxpZGF0aW9uRXJyb3I9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEVycm9yKCJoYXNoU2V0
dGxlZCBtdXN0IGJlIGNhbGxlZCB3aXRoIGFuIG9iamVjdCIpfQotdmFyIERlPTAsTGU9dm9pZCAw
LEllPSJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp2b2lkIDAsTWU9SWV8fHt9LEZl
PU1lLk11dGF0aW9uT2JzZXJ2ZXJ8fE1lLldlYktpdE11dGF0aW9uT2JzZXJ2ZXIsemU9InVuZGVm
aW5lZCI9PXR5cGVvZiBzZWxmJiYidW5kZWZpbmVkIiE9dHlwZW9mIHByb2Nlc3MmJiJbb2JqZWN0
IHByb2Nlc3NdIj09PXt9LnRvU3RyaW5nLmNhbGwocHJvY2VzcyksVWU9InVuZGVmaW5lZCIhPXR5
cGVvZiBVaW50OENsYW1wZWRBcnJheSYmInVuZGVmaW5lZCIhPXR5cGVvZiBpbXBvcnRTY3JpcHRz
JiYidW5kZWZpbmVkIiE9dHlwZW9mIE1lc3NhZ2VDaGFubmVsLEJlPW5ldyBBcnJheSgxZTMpLHFl
PXZvaWQgMAotcWU9emU/ZnVuY3Rpb24oKXt2YXIgZT1wcm9jZXNzLm5leHRUaWNrLHQ9cHJvY2Vz
cy52ZXJzaW9ucy5ub2RlLm1hdGNoKC9eKD86KFxkKylcLik/KD86KFxkKylcLik/KFwqfFxkKykk
LykKLXJldHVybiBBcnJheS5pc0FycmF5KHQpJiYiMCI9PT10WzFdJiYiMTAiPT09dFsyXSYmKGU9
c2V0SW1tZWRpYXRlKSxmdW5jdGlvbigpe3JldHVybiBlKGRlKX19KCk6RmU/ZnVuY3Rpb24oKXt2
YXIgZT0wLHQ9bmV3IEZlKGRlKSxuPWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIiKQotcmV0dXJu
IHQub2JzZXJ2ZShuLHtjaGFyYWN0ZXJEYXRhOiEwfSksZnVuY3Rpb24oKXtyZXR1cm4gbi5kYXRh
PWU9KytlJTJ9fSgpOlVlP2Z1bmN0aW9uKCl7dmFyIGU9bmV3IE1lc3NhZ2VDaGFubmVsCi1yZXR1
cm4gZS5wb3J0MS5vbm1lc3NhZ2U9ZGUsZnVuY3Rpb24oKXtyZXR1cm4gZS5wb3J0Mi5wb3N0TWVz
c2FnZSgwKX19KCk6dm9pZCAwPT09SWUmJiJmdW5jdGlvbiI9PXR5cGVvZiBuLnJlcXVpcmU/ZnVu
Y3Rpb24oKXt0cnl7dmFyIGU9bi5yZXF1aXJlLHQ9ZSgidmVydHgiKQotcmV0dXJuIExlPXQucnVu
T25Mb29wfHx0LnJ1bk9uQ29udGV4dCxmZSgpfWNhdGNoKGUpe3JldHVybiBoZSgpfX0oKTpoZSgp
Ci1pZigib2JqZWN0Ij09dHlwZW9mIHNlbGYpc2VsZgotZWxzZXtpZigib2JqZWN0IiE9dHlwZW9m
IGdsb2JhbCl0aHJvdyBuZXcgRXJyb3IoIm5vIGdsb2JhbDogYHNlbGZgIG9yIGBnbG9iYWxgIGZv
dW5kIikKLWdsb2JhbH1iZS5hc3luYz1wZSxiZS5hZnRlcj1mdW5jdGlvbihlKXtyZXR1cm4gc2V0
VGltZW91dChlLDApfQotdmFyIEhlPXNlLFZlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGJlLmFzeW5j
KGUsdCl9Ci1pZigidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmIm9iamVjdCI9PXR5cGVvZiB3
aW5kb3cuX19QUk9NSVNFX0lOU1RSVU1FTlRBVElPTl9fKXt2YXIgV2U9d2luZG93Ll9fUFJPTUlT
RV9JTlNUUlVNRU5UQVRJT05fXwotbygiaW5zdHJ1bWVudCIsITApCi1mb3IodmFyICRlIGluIFdl
KVdlLmhhc093blByb3BlcnR5KCRlKSYmbWUoJGUsV2VbJGVdKX12YXIgR2U9KHllPXthc2FwOnBl
LGNhc3Q6SGUsUHJvbWlzZTpGLEV2ZW50VGFyZ2V0OnZlLGFsbDpRLGFsbFNldHRsZWQ6SixyYWNl
OlgsaGFzaDplZSxoYXNoU2V0dGxlZDpuZSxyZXRocm93OnJlLGRlZmVyOmllLGRlbm9kZWlmeTpX
LGNvbmZpZ3VyZTpvLG9uOm1lLG9mZjpnZSxyZXNvbHZlOnNlLHJlamVjdDphZSxtYXA6b2V9LHll
LmFzeW5jPVZlLHllLmZpbHRlcj1jZSx5ZSkKLWUuYXNhcD1wZSxlLmNhc3Q9SGUsZS5Qcm9taXNl
PUYsZS5FdmVudFRhcmdldD12ZSxlLmFsbD1RLGUuYWxsU2V0dGxlZD1KLGUucmFjZT1YLGUuaGFz
aD1lZSxlLmhhc2hTZXR0bGVkPW5lLGUucmV0aHJvdz1yZSxlLmRlZmVyPWllLGUuZGVub2RlaWZ5
PVcsZS5jb25maWd1cmU9byxlLm9uPW1lLGUub2ZmPWdlLGUucmVzb2x2ZT1zZSxlLnJlamVjdD1h
ZSxlLm1hcD1vZSxlLmFzeW5jPVZlLGUuZmlsdGVyPWNlLGUuZGVmYXVsdD1HZX0pCi10KCJlbWJl
ciIpfSgpLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe2RlZmluZShlLFtdLGZ1bmN0aW9uKCl7
InVzZSBzdHJpY3QiCi1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUi
LHt2YWx1ZTohMH0pLHR9KX0oZnVuY3Rpb24oKXt2YXIgdD17ZW1iZXI6e2RlZmF1bHQ6RW1iZXJ9
LCJlbWJlci1hcHBsaWNhdGlvbiI6e2RlZmF1bHQ6RW1iZXIuQXBwbGljYXRpb259LCJlbWJlci1h
cnJheSI6e2RlZmF1bHQ6RW1iZXIuQXJyYXl9LCJlbWJlci1hcnJheS9tdXRhYmxlIjp7ZGVmYXVs
dDpFbWJlci5NdXRhYmxlQXJyYXl9LCJlbWJlci1hcnJheS91dGlscyI6e0E6RW1iZXIuQSxpc0Vt
YmVyQXJyYXk6RW1iZXIuaXNBcnJheSx3cmFwOkVtYmVyLm1ha2VBcnJheX0sImVtYmVyLWNvbXBv
bmVudCI6e2RlZmF1bHQ6RW1iZXIuQ29tcG9uZW50fSwiZW1iZXItY29tcG9uZW50cy9jaGVja2Jv
eCI6e2RlZmF1bHQ6RW1iZXIuQ2hlY2tib3h9LCJlbWJlci1jb21wb25lbnRzL3RleHQtYXJlYSI6
e2RlZmF1bHQ6RW1iZXIuVGV4dEFyZWF9LCJlbWJlci1jb21wb25lbnRzL3RleHQtZmllbGQiOntk
ZWZhdWx0OkVtYmVyLlRleHRGaWVsZH0sImVtYmVyLWNvbnRyb2xsZXIiOntkZWZhdWx0OkVtYmVy
LkNvbnRyb2xsZXJ9LCJlbWJlci1jb250cm9sbGVyL2luamVjdCI6e2RlZmF1bHQ6RW1iZXIuaW5q
ZWN0LmNvbnRyb2xsZXJ9LCJlbWJlci1jb250cm9sbGVyL3Byb3h5Ijp7ZGVmYXVsdDpFbWJlci5B
cnJheVByb3h5fSwiZW1iZXItY29udHJvbGxlcnMvc29ydGFibGUiOntkZWZhdWx0OkVtYmVyLlNv
cnRhYmxlTWl4aW59LCJlbWJlci1kZWJ1ZyI6e2xvZzpFbWJlci5kZWJ1ZyxpbnNwZWN0OkVtYmVy
Lmluc3BlY3QscnVuOkVtYmVyLnJ1bkluRGVidWcsd2FybjpFbWJlci53YXJufSwiZW1iZXItZGVi
dWcvY29udGFpbmVyLWRlYnVnLWFkYXB0ZXIiOntkZWZhdWx0OkVtYmVyLkNvbnRhaW5lckRlYnVn
QWRhcHRlcn0sImVtYmVyLWRlYnVnL2RhdGEtYWRhcHRlciI6e2RlZmF1bHQ6RW1iZXIuRGF0YUFk
YXB0ZXJ9LCJlbWJlci1kZXByZWNhdGlvbnMiOntkZXByZWNhdGU6RW1iZXIuZGVwcmVjYXRlLGRl
cHJlY2F0ZUZ1bmM6RW1iZXIuZGVwcmVjYXRlRnVuY30sImVtYmVyLWVudW1lcmFibGUiOntkZWZh
dWx0OkVtYmVyLkVudW1lcmFibGV9LCJlbWJlci1ldmVudGVkIjp7ZGVmYXVsdDpFbWJlci5FdmVu
dGVkfSwiZW1iZXItZXZlbnRlZC9vbiI6e2RlZmF1bHQ6RW1iZXIub259LCJlbWJlci1nbG9iYWxz
LXJlc29sdmVyIjp7ZGVmYXVsdDpFbWJlci5EZWZhdWx0UmVzb2x2ZXJ9LCJlbWJlci1oZWxwZXIi
OntkZWZhdWx0OkVtYmVyLkhlbHBlcixoZWxwZXI6RW1iZXIuSGVscGVyJiZFbWJlci5IZWxwZXIu
aGVscGVyfSwiZW1iZXItaW5zdHJ1bWVudGF0aW9uIjp7aW5zdHJ1bWVudDpFbWJlci5JbnN0cnVt
ZW50YXRpb24uaW5zdHJ1bWVudCxyZXNldDpFbWJlci5JbnN0cnVtZW50YXRpb24ucmVzZXQsc3Vi
c2NyaWJlOkVtYmVyLkluc3RydW1lbnRhdGlvbi5zdWJzY3JpYmUsdW5zdWJzY3JpYmU6RW1iZXIu
SW5zdHJ1bWVudGF0aW9uLnVuc3Vic2NyaWJlfSwiZW1iZXItbG9jYXRpb25zL2hhc2giOntkZWZh
dWx0OkVtYmVyLkhhc2hMb2NhdGlvbn0sImVtYmVyLWxvY2F0aW9ucy9oaXN0b3J5Ijp7ZGVmYXVs
dDpFbWJlci5IaXN0b3J5TG9jYXRpb259LCJlbWJlci1sb2NhdGlvbnMvbm9uZSI6e2RlZmF1bHQ6
RW1iZXIuTm9uZUxvY2F0aW9ufSwiZW1iZXItbWFwIjp7ZGVmYXVsdDpFbWJlci5NYXAsd2l0aERl
ZmF1bHQ6RW1iZXIuTWFwV2l0aERlZmF1bHR9LCJlbWJlci1tZXRhbC9kZXN0cm95Ijp7ZGVmYXVs
dDpFbWJlci5kZXN0cm95fSwiZW1iZXItbWV0YWwvZXZlbnRzIjp7YWRkTGlzdGVuZXI6RW1iZXIu
YWRkTGlzdGVuZXIscmVtb3ZlTGlzdGVuZXI6RW1iZXIucmVtb3ZlTGlzdGVuZXIsc2VuZDpFbWJl
ci5zZW5kRXZlbnR9LCJlbWJlci1tZXRhbC9nZXQiOntkZWZhdWx0OkVtYmVyLmdldCxnZXRQcm9w
ZXJ0aWVzOkVtYmVyLmdldFByb3BlcnRpZXN9LCJlbWJlci1tZXRhbC9taXhpbiI6e2RlZmF1bHQ6
RW1iZXIuTWl4aW59LCJlbWJlci1tZXRhbC9vYnNlcnZlciI6e2RlZmF1bHQ6RW1iZXIub2JzZXJ2
ZXIsYWRkT2JzZXJ2ZXI6RW1iZXIuYWRkT2JzZXJ2ZXIscmVtb3ZlT2JzZXJ2ZXI6RW1iZXIucmVt
b3ZlT2JzZXJ2ZXJ9LCJlbWJlci1tZXRhbC9vbi1sb2FkIjp7ZGVmYXVsdDpFbWJlci5vbkxvYWQs
cnVuOkVtYmVyLnJ1bkxvYWRIb29rc30sImVtYmVyLW1ldGFsL3NldCI6e2RlZmF1bHQ6RW1iZXIu
c2V0LHNldFByb3BlcnRpZXM6RW1iZXIuc2V0UHJvcGVydGllcyx0cnlTZXQ6RW1iZXIudHJ5U2V0
fSwiZW1iZXItbWV0YWwvdXRpbHMiOnthbGlhc01ldGhvZDpFbWJlci5hbGlhc01ldGhvZCxhc3Nl
cnQ6RW1iZXIuYXNzZXJ0LGNhY2hlRm9yOkVtYmVyLmNhY2hlRm9yLGNvcHk6RW1iZXIuY29weSxn
dWlkRm9yOkVtYmVyLmd1aWRGb3J9LCJlbWJlci1vYmplY3QiOntkZWZhdWx0OkVtYmVyLk9iamVj
dH0sImVtYmVyLW93bmVyL2dldCI6e2RlZmF1bHQ6RW1iZXIuZ2V0T3duZXJ9LCJlbWJlci1vd25l
ci9zZXQiOntkZWZhdWx0OkVtYmVyLnNldE93bmVyfSwiZW1iZXItcGxhdGZvcm0iOnthc3NpZ246
RW1iZXIuYXNzaWdufHxFbWJlci5tZXJnZSxjcmVhdGU6RW1iZXIuY3JlYXRlLGRlZmluZVByb3Bl
cnR5OkVtYmVyLnBsYXRmb3JtLmRlZmluZVByb3BlcnR5LGhhc0FjY2Vzc29yczpFbWJlci5wbGF0
Zm9ybS5oYXNQcm9wZXJ0eUFjY2Vzc29ycyxrZXlzOkVtYmVyLmtleXN9LCJlbWJlci1yb3V0ZSI6
e2RlZmF1bHQ6RW1iZXIuUm91dGV9LCJlbWJlci1yb3V0ZXIiOntkZWZhdWx0OkVtYmVyLlJvdXRl
cn0sImVtYmVyLXJ1bmxvb3AiOntkZWZhdWx0OkVtYmVyLnJ1bixiZWdpbjpFbWJlci5ydW4uYmVn
aW4sYmluZDpFbWJlci5ydW4uYmluZCxjYW5jZWw6RW1iZXIucnVuLmNhbmNlbCxkZWJvdW5jZTpF
bWJlci5ydW4uZGVib3VuY2UsZW5kOkVtYmVyLnJ1bi5lbmQsam9pbjpFbWJlci5ydW4uam9pbixs
YXRlcjpFbWJlci5ydW4ubGF0ZXIsbmV4dDpFbWJlci5ydW4ubmV4dCxvbmNlOkVtYmVyLnJ1bi5v
bmNlLHNjaGVkdWxlOkVtYmVyLnJ1bi5zY2hlZHVsZSxzY2hlZHVsZU9uY2U6RW1iZXIucnVuLnNj
aGVkdWxlT25jZSx0aHJvdHRsZTpFbWJlci5ydW4udGhyb3R0bGV9LCJlbWJlci1zZXJ2aWNlIjp7
ZGVmYXVsdDpFbWJlci5TZXJ2aWNlfSwiZW1iZXItc2VydmljZS9pbmplY3QiOntkZWZhdWx0OkVt
YmVyLmluamVjdC5zZXJ2aWNlfSwiZW1iZXItc2V0L29yZGVyZWQiOntkZWZhdWx0OkVtYmVyLk9y
ZGVyZWRTZXR9LCJlbWJlci1zdHJpbmciOntjYW1lbGl6ZTpFbWJlci5TdHJpbmcuY2FtZWxpemUs
Y2FwaXRhbGl6ZTpFbWJlci5TdHJpbmcuY2FwaXRhbGl6ZSxjbGFzc2lmeTpFbWJlci5TdHJpbmcu
Y2xhc3NpZnksZGFzaGVyaXplOkVtYmVyLlN0cmluZy5kYXNoZXJpemUsZGVjYW1lbGl6ZTpFbWJl
ci5TdHJpbmcuZGVjYW1lbGl6ZSxmbXQ6RW1iZXIuU3RyaW5nLmZtdCxodG1sU2FmZTpFbWJlci5T
dHJpbmcuaHRtbFNhZmUsbG9jOkVtYmVyLlN0cmluZy5sb2MsdW5kZXJzY29yZTpFbWJlci5TdHJp
bmcudW5kZXJzY29yZSx3OkVtYmVyLlN0cmluZy53fSwiZW1iZXItdXRpbHMiOntpc0JsYW5rOkVt
YmVyLmlzQmxhbmssaXNFbXB0eTpFbWJlci5pc0VtcHR5LGlzTm9uZTpFbWJlci5pc05vbmUsaXNQ
cmVzZW50OkVtYmVyLmlzUHJlc2VudCx0cnlJbnZva2U6RW1iZXIudHJ5SW52b2tlLHR5cGVPZjpF
bWJlci50eXBlT2Z9fQotdFsiZW1iZXItY29tcHV0ZWQiXT17ZGVmYXVsdDpFbWJlci5jb21wdXRl
ZH0KLWZvcih2YXIgbj1bImVtcHR5Iiwibm90RW1wdHkiLCJub25lIiwibm90IiwiYm9vbCIsIm1h
dGNoIiwiZXF1YWwiLCJndCIsImd0ZSIsImx0IiwibHRlIiwiYWxpYXMiLCJvbmVXYXkiLCJyZWFk
cyIsInJlYWRPbmx5IiwiZGVwcmVjYXRpbmdBbGlhcyIsImFuZCIsIm9yIiwiY29sbGVjdCIsInN1
bSIsIm1pbiIsIm1heCIsIm1hcCIsInNvcnQiLCJzZXREaWZmIiwibWFwQnkiLCJtYXBQcm9wZXJ0
eSIsImZpbHRlciIsImZpbHRlckJ5IiwiZmlsdGVyUHJvcGVydHkiLCJ1bmlxIiwidW5pb24iLCJp
bnRlcnNlY3QiXSxyPTAsaT1uLmxlbmd0aDtyPGk7cisrKXt2YXIgbz1uW3JdCi10WyJlbWJlci1j
b21wdXRlZCJdW29dPUVtYmVyLmNvbXB1dGVkW29dfWZvcih2YXIgcyBpbiB0KWUocyx0W3NdKX0p
KCksZnVuY3Rpb24oKXtpZihFbWJlci5UZXN0KXt2YXIgdD17ImVtYmVyLXRlc3QiOntkZWZhdWx0
OkVtYmVyLlRlc3R9LCJlbWJlci10ZXN0L2FkYXB0ZXIiOntkZWZhdWx0OkVtYmVyLlRlc3QuQWRh
cHRlcn0sImVtYmVyLXRlc3QvcXVuaXQtYWRhcHRlciI6e2RlZmF1bHQ6RW1iZXIuVGVzdC5RVW5p
dEFkYXB0ZXJ9fQotZm9yKHZhciBuIGluIHQpZShuLHRbbl0pfX0oKSxlKCJqcXVlcnkiLHtkZWZh
dWx0OnNlbGYualF1ZXJ5fSksZSgicnN2cCIse2RlZmF1bHQ6RW1iZXIuUlNWUH0pfSgpLGRlZmlu
ZSgiZW1iZXIvbG9hZC1pbml0aWFsaXplcnMiLFsiZXhwb3J0cyIsImVtYmVyLWxvYWQtaW5pdGlh
bGl6ZXJzIiwiZW1iZXIiXSxmdW5jdGlvbihlLHQsbil7bi5kZWZhdWx0LmRlcHJlY2F0ZSgiVXNh
Z2Ugb2YgYGVtYmVyL2xvYWQtaW5pdGlhbGl6ZXJzYCBtb2R1bGUgaXMgZGVwcmVjYXRlZCwgcGxl
YXNlIHVwZGF0ZSB0byBgZW1iZXItbG9hZC1pbml0aWFsaXplcnNgLiIsITEse2lkOiJlbWJlci1s
b2FkLWluaXRpYWxpemVycy5sZWdhY3ktc2hpbXMiLHVudGlsOiIzLjAuMCJ9KSxlLmRlZmF1bHQ9
dC5kZWZhdWx0fSksY3JlYXRlRGVwcmVjYXRlZE1vZHVsZSgiZW1iZXIvcmVzb2x2ZXIiKSxjcmVh
dGVEZXByZWNhdGVkTW9kdWxlKCJyZXNvbHZlciIpLGRlZmluZSgiZW1iZXItYWpheC9hamF4LXJl
cXVlc3QiLFsiZXhwb3J0cyIsImVtYmVyIiwiZW1iZXItYWpheC9taXhpbnMvYWpheC1yZXF1ZXN0
Il0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPXQuZGVmYXVsdC5PYmplY3QKLWUuZGVmYXVsdD1yLmV4
dGVuZChuLmRlZmF1bHQpfSksZGVmaW5lKCJlbWJlci1hamF4L2Vycm9ycyIsWyJleHBvcnRzIiwi
ZW1iZXIiXSxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0
aDw9MXx8dm9pZCAwPT09YXJndW1lbnRzWzFdPyJBamF4IG9wZXJhdGlvbiBmYWlsZWQiOmFyZ3Vt
ZW50c1sxXQoteC5jYWxsKHRoaXMsdCksdGhpcy5lcnJvcnM9ZXx8W3t0aXRsZToiQWpheCBFcnJv
ciIsZGV0YWlsOnR9XX1mdW5jdGlvbiByKGUpe24uY2FsbCh0aGlzLGUsIlJlcXVlc3Qgd2FzIHJl
amVjdGVkIGJlY2F1c2UgaXQgd2FzIGludmFsaWQiKX1mdW5jdGlvbiBpKGUpe24uY2FsbCh0aGlz
LGUsIkFqYXggYXV0aG9yaXphdGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBvKGUpe24uY2FsbCh0aGlz
LGUsIlJlcXVlc3Qgd2FzIHJlamVjdGVkIGJlY2F1c2UgdXNlciBpcyBub3QgcGVybWl0dGVkIHRv
IHBlcmZvcm0gdGhpcyBvcGVyYXRpb24uIil9ZnVuY3Rpb24gcyhlKXtuLmNhbGwodGhpcyxlLCJS
ZXF1ZXN0IHdhcyBmb3JtYXR0ZWQgaW5jb3JyZWN0bHkuIil9ZnVuY3Rpb24gYShlKXtuLmNhbGwo
dGhpcyxlLCJSZXNvdXJjZSB3YXMgbm90IGZvdW5kLiIpfWZ1bmN0aW9uIHUoKXtuLmNhbGwodGhp
cyxudWxsLCJUaGUgYWpheCBvcGVyYXRpb24gdGltZWQgb3V0Iil9ZnVuY3Rpb24gbCgpe24uY2Fs
bCh0aGlzLG51bGwsIlRoZSBhamF4IG9wZXJhdGlvbiB3YXMgYWJvcnRlZCIpfWZ1bmN0aW9uIGMo
ZSl7bi5jYWxsKHRoaXMsZSwiVGhlIGFqYXggb3BlcmF0aW9uIGZhaWxlZCBkdWUgdG8gYSBjb25m
bGljdCIpfWZ1bmN0aW9uIHAoZSl7bi5jYWxsKHRoaXMsZSwiUmVxdWVzdCB3YXMgcmVqZWN0ZWQg
ZHVlIHRvIHNlcnZlciBlcnJvciIpfWZ1bmN0aW9uIGYoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBu
fWZ1bmN0aW9uIGgoZSl7cmV0dXJuIGYoZSk/ZSBpbnN0YW5jZW9mIGk6NDAxPT09ZX1mdW5jdGlv
biBkKGUpe3JldHVybiBmKGUpP2UgaW5zdGFuY2VvZiBvOjQwMz09PWV9ZnVuY3Rpb24gbShlKXty
ZXR1cm4gZihlKT9lIGluc3RhbmNlb2Ygcjo0MjI9PT1lfWZ1bmN0aW9uIGcoZSl7cmV0dXJuIGYo
ZSk/ZSBpbnN0YW5jZW9mIHM6NDAwPT09ZX1mdW5jdGlvbiB5KGUpe3JldHVybiBmKGUpP2UgaW5z
dGFuY2VvZiBhOjQwND09PWV9ZnVuY3Rpb24gdihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIHV9ZnVu
Y3Rpb24gYihlKXtyZXR1cm4gZihlKT9lIGluc3RhbmNlb2YgbDowPT09ZX1mdW5jdGlvbiBfKGUp
e3JldHVybiBmKGUpP2UgaW5zdGFuY2VvZiBjOjQwOT09PWV9ZnVuY3Rpb24gdyhlKXtyZXR1cm4g
ZihlKT9lIGluc3RhbmNlb2YgcDplPj01MDAmJmU8NjAwfWZ1bmN0aW9uIEUoZSl7dmFyIHQ9cGFy
c2VJbnQoZSwxMCkKLXJldHVybiB0Pj0yMDAmJnQ8MzAwfHwzMDQ9PT10fWUuQWpheEVycm9yPW4s
ZS5JbnZhbGlkRXJyb3I9cixlLlVuYXV0aG9yaXplZEVycm9yPWksZS5Gb3JiaWRkZW5FcnJvcj1v
LGUuQmFkUmVxdWVzdEVycm9yPXMsZS5Ob3RGb3VuZEVycm9yPWEsZS5UaW1lb3V0RXJyb3I9dSxl
LkFib3J0RXJyb3I9bCxlLkNvbmZsaWN0RXJyb3I9YyxlLlNlcnZlckVycm9yPXAsZS5pc0FqYXhF
cnJvcj1mLGUuaXNVbmF1dGhvcml6ZWRFcnJvcj1oLGUuaXNGb3JiaWRkZW5FcnJvcj1kLGUuaXNJ
bnZhbGlkRXJyb3I9bSxlLmlzQmFkUmVxdWVzdEVycm9yPWcsZS5pc05vdEZvdW5kRXJyb3I9eSxl
LmlzVGltZW91dEVycm9yPXYsZS5pc0Fib3J0RXJyb3I9YixlLmlzQ29uZmxpY3RFcnJvcj1fLGUu
aXNTZXJ2ZXJFcnJvcj13LGUuaXNTdWNjZXNzPUUKLXZhciB4PXQuZGVmYXVsdC5FcnJvcgotbi5w
cm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh4LnByb3RvdHlwZSksci5wcm90b3R5cGU9T2JqZWN0LmNy
ZWF0ZShuLnByb3RvdHlwZSksaS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShuLnByb3RvdHlwZSks
by5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShuLnByb3RvdHlwZSkscy5wcm90b3R5cGU9T2JqZWN0
LmNyZWF0ZShuLnByb3RvdHlwZSksYS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShuLnByb3RvdHlw
ZSksdS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShuLnByb3RvdHlwZSksbC5wcm90b3R5cGU9T2Jq
ZWN0LmNyZWF0ZShuLnByb3RvdHlwZSksYy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShuLnByb3Rv
dHlwZSkscC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShuLnByb3RvdHlwZSl9KSxkZWZpbmUoImVt
YmVyLWFqYXgvaW5kZXgiLFsiZXhwb3J0cyIsImVtYmVyLWFqYXgvcmVxdWVzdCJdLGZ1bmN0aW9u
KGUsdCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImRlZmF1bHQiLHtlbnVtZXJhYmxlOiEwLGdl
dDpmdW5jdGlvbigpe3JldHVybiB0LmRlZmF1bHR9fSl9KSxkZWZpbmUoImVtYmVyLWFqYXgvbWl4
aW5zL2FqYXgtcmVxdWVzdCIsWyJleHBvcnRzIiwiZW1iZXIiLCJlbWJlci1hamF4L2Vycm9ycyIs
ImVtYmVyLWFqYXgvdXRpbHMvcGFyc2UtcmVzcG9uc2UtaGVhZGVycyIsImVtYmVyLWFqYXgvdXRp
bHMvZ2V0LWhlYWRlciIsImVtYmVyLWFqYXgvdXRpbHMvdXJsLWhlbHBlcnMiLCJlbWJlci1hamF4
L3V0aWxzL2FqYXgiXSxmdW5jdGlvbihlLHQsbixyLGksbyxzKXtmdW5jdGlvbiBhKGUpe3JldHVy
biFFKGUpJiYhIWUubWF0Y2goUyl9ZnVuY3Rpb24gdShlKXtyZXR1cm4iLyI9PT1lLmNoYXJBdCgw
KX1mdW5jdGlvbiBsKGUpe3JldHVybiIvIj09PWUuY2hhckF0KGUubGVuZ3RoLTEpfWZ1bmN0aW9u
IGMoZSl7cmV0dXJuIHUoZSkmJihlPWUuc3Vic3RyaW5nKDEpKSxsKGUpJiYoZT1lLnNsaWNlKDAs
LTEpKSxlfWZ1bmN0aW9uIHAoZSl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBlfWZ1bmN0aW9uIGYo
ZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlfXZhciBoPSh0LmRlZmF1bHQuJCx0LmRlZmF1bHQu
QSksZD10LmRlZmF1bHQuRXJyb3IsbT10LmRlZmF1bHQuTG9nZ2VyLGc9dC5kZWZhdWx0Lk1peGlu
LHk9dC5kZWZhdWx0LlJTVlAuUHJvbWlzZSx2PXQuZGVmYXVsdC5UZXN0LGI9dC5kZWZhdWx0Lmdl
dCxfPXQuZGVmYXVsdC5pc0FycmF5LHc9dC5kZWZhdWx0LmlzRW1wdHksRT10LmRlZmF1bHQuaXNO
b25lLHg9dC5kZWZhdWx0Lm1lcmdlLEM9dC5kZWZhdWx0LnJ1bixPPXQuZGVmYXVsdC5ydW5JbkRl
YnVnLEE9dC5kZWZhdWx0LnRlc3RpbmcsVD10LmRlZmF1bHQud2FybixTPS9eYXBwbGljYXRpb25c
L3ZuZFwuYXBpXCtqc29uL2ksUj0wCi1BJiZ2LnJlZ2lzdGVyV2FpdGVyKGZ1bmN0aW9uKCl7cmV0
dXJuIDA9PT1SfSksZS5kZWZhdWx0PWcuY3JlYXRlKHtjb250ZW50VHlwZToiYXBwbGljYXRpb24v
eC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04IixoZWFkZXJzOnt9LHJlcXVlc3Q6
ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLHI9dGhpcy5vcHRpb25zKGUsdCkKLXJldHVybiBuZXcg
eShmdW5jdGlvbihlLHQpe24uX21ha2VSZXF1ZXN0KHIpLnRoZW4oZnVuY3Rpb24odCl7dmFyIG49
dC5yZXNwb25zZQotZShuKX0pLmNhdGNoKGZ1bmN0aW9uKGUpe3ZhciBuPWUucmVzcG9uc2UKLXQo
bil9KX0sImVtYmVyLWFqYXg6ICIrci50eXBlKyIgIityLnVybCsiIHJlc3BvbnNlIil9LHJhdzpm
dW5jdGlvbihlLHQpe3ZhciBuPXRoaXMub3B0aW9ucyhlLHQpCi1yZXR1cm4gdGhpcy5fbWFrZVJl
cXVlc3Qobil9LF9tYWtlUmVxdWVzdDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLG89ZS5tZXRob2R8
fGUudHlwZXx8IkdFVCIsdT17bWV0aG9kOm8sdHlwZTpvLHVybDplLnVybH0KLXJldHVybiBhKCgw
LGkuZGVmYXVsdCkoZS5oZWFkZXJzLCJDb250ZW50LVR5cGUiKSkmJiJHRVQiIT09dS50eXBlJiYi
b2JqZWN0Ij09dHlwZW9mIGUuZGF0YSYmKGUuZGF0YT1KU09OLnN0cmluZ2lmeShlLmRhdGEpKSxu
ZXcgeShmdW5jdGlvbihpLG8pe2Uuc3VjY2Vzcz1mdW5jdGlvbihlLHMsYSl7dmFyIGw9dC5oYW5k
bGVSZXNwb25zZShhLnN0YXR1cywoMCxyLmRlZmF1bHQpKGEuZ2V0QWxsUmVzcG9uc2VIZWFkZXJz
KCkpLGUsdSkKLVItPTEsKDAsbi5pc0FqYXhFcnJvcikobCk/Qy5qb2luKG51bGwsbyx7cGF5bG9h
ZDplLHRleHRTdGF0dXM6cyxqcVhIUjphLHJlc3BvbnNlOmx9KTpDLmpvaW4obnVsbCxpLHtwYXls
b2FkOmUsdGV4dFN0YXR1czpzLGpxWEhSOmEscmVzcG9uc2U6bH0pfSxlLmVycm9yPWZ1bmN0aW9u
KGUsaSxzKXtPKGZ1bmN0aW9uKCl7dmFyIHQ9IlRoZSBzZXJ2ZXIgcmV0dXJuZWQgYW4gZW1wdHkg
c3RyaW5nIGZvciAiK3UudHlwZSsiICIrdS51cmwrIiwgd2hpY2ggY2Fubm90IGJlIHBhcnNlZCBp
bnRvIGEgdmFsaWQgSlNPTi4gUmV0dXJuIGVpdGhlciBudWxsIG9yIHt9LiIsbj0hKCJwYXJzZXJl
cnJvciI9PT1pJiYiIj09PWUucmVzcG9uc2VUZXh0KQotVCh0LG4se2lkOiJkcy5hZGFwdGVyLnJl
dHVybmVkLWVtcHR5LXN0cmluZy1hcy1KU09OIn0pfSkKLXZhciBhPXQucGFyc2VFcnJvclJlc3Bv
bnNlKGUucmVzcG9uc2VUZXh0KXx8cyxsPXZvaWQgMAotbD1zIGluc3RhbmNlb2YgRXJyb3I/czoi
dGltZW91dCI9PT1pP25ldyBuLlRpbWVvdXRFcnJvcjoiYWJvcnQiPT09aT9uZXcgbi5BYm9ydEVy
cm9yOnQuaGFuZGxlUmVzcG9uc2UoZS5zdGF0dXMsKDAsci5kZWZhdWx0KShlLmdldEFsbFJlc3Bv
bnNlSGVhZGVycygpKSxhLHUpLFItPTEsQy5qb2luKG51bGwsbyx7cGF5bG9hZDphLHRleHRTdGF0
dXM6aSxqcVhIUjplLGVycm9yVGhyb3duOnMscmVzcG9uc2U6bH0pfSxSKz0xLCgwLHMuZGVmYXVs
dCkoZSl9LCJlbWJlci1hamF4OiAiK2UudHlwZSsiICIrZS51cmwpfSxwb3N0OmZ1bmN0aW9uKGUs
dCl7cmV0dXJuIHRoaXMucmVxdWVzdChlLHRoaXMuX2FkZFR5cGVUb09wdGlvbnNGb3IodCwiUE9T
VCIpKX0scHV0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMucmVxdWVzdChlLHRoaXMuX2FkZFR5
cGVUb09wdGlvbnNGb3IodCwiUFVUIikpfSxwYXRjaDpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlz
LnJlcXVlc3QoZSx0aGlzLl9hZGRUeXBlVG9PcHRpb25zRm9yKHQsIlBBVENIIikpfSxkZWw6ZnVu
Y3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KGUsdGhpcy5fYWRkVHlwZVRvT3B0aW9uc0Zv
cih0LCJERUxFVEUiKSl9LGRlbGV0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRlbC5hcHBseSh0
aGlzLGFyZ3VtZW50cyl9LGdldDpmdW5jdGlvbihlKXtpZihhcmd1bWVudHMubGVuZ3RoPjF8fCIv
Ij09PWUuY2hhckF0KDApKXRocm93IG5ldyBkKCJJdCBzZWVtcyB5b3UgdHJpZWQgdG8gdXNlIGAu
Z2V0YCB0byBtYWtlIGEgcmVxdWVzdCEgVXNlIHRoZSBgLnJlcXVlc3RgIG1ldGhvZCBpbnN0ZWFk
LiIpCi1yZXR1cm4gdGhpcy5fc3VwZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxfYWRkVHlwZVRv
T3B0aW9uc0ZvcjpmdW5jdGlvbihlLHQpe3JldHVybiBlPWV8fHt9LGUudHlwZT10LGV9LF9nZXRG
dWxsSGVhZGVyc0hhc2g6ZnVuY3Rpb24oZSl7dmFyIHQ9Yih0aGlzLCJoZWFkZXJzIiksbj14KHt9
LHQpCi1yZXR1cm4geChuLGUpfSxvcHRpb25zOmZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5s
ZW5ndGg8PTF8fHZvaWQgMD09PWFyZ3VtZW50c1sxXT97fTphcmd1bWVudHNbMV0KLXJldHVybiB0
PXgoe30sdCksdC51cmw9dGhpcy5fYnVpbGRVUkwoZSx0KSx0LnR5cGU9dC50eXBlfHwiR0VUIix0
LmRhdGFUeXBlPXQuZGF0YVR5cGV8fCJqc29uIix0LmNvbnRlbnRUeXBlPXcodC5jb250ZW50VHlw
ZSk/Yih0aGlzLCJjb250ZW50VHlwZSIpOnQuY29udGVudFR5cGUsdGhpcy5fc2hvdWxkU2VuZEhl
YWRlcnModCk/dC5oZWFkZXJzPXRoaXMuX2dldEZ1bGxIZWFkZXJzSGFzaCh0LmhlYWRlcnMpOnQu
aGVhZGVycz10LmhlYWRlcnN8fHt9LHR9LF9idWlsZFVSTDpmdW5jdGlvbihlKXt2YXIgdD1hcmd1
bWVudHMubGVuZ3RoPD0xfHx2b2lkIDA9PT1hcmd1bWVudHNbMV0/e306YXJndW1lbnRzWzFdLG49
bmV3IG8uUmVxdWVzdFVSTChlKQotaWYobi5pc0NvbXBsZXRlKXJldHVybiBuLmhyZWYKLXZhciBy
PXQuaG9zdHx8Yih0aGlzLCJob3N0IiksaT10Lm5hbWVzcGFjZXx8Yih0aGlzLCJuYW1lc3BhY2Ui
KQotaWYoaSYmKGk9YyhpKSksbmV3IFJlZ0V4cCgiXigvKT8iK2kpLnRlc3QoZSkpcmV0dXJuIGUK
LXZhciBzPSIiCi1yZXR1cm4gciYmKHMrPXIpLGkmJihsKHMpfHwocys9Ii8iKSxzKz1pKSxlJiYo
dShlKXx8KHMrPSIvIikscys9ZSksc30saGFuZGxlUmVzcG9uc2U6ZnVuY3Rpb24oZSx0LHIsaSl7
cj1udWxsPT09cnx8dm9pZCAwPT09cj97fTpyCi12YXIgbz10aGlzLm5vcm1hbGl6ZUVycm9yUmVz
cG9uc2UoZSx0LHIpCi1pZih0aGlzLmlzU3VjY2VzcyhlLHQscikpcmV0dXJuIHIKLWlmKHRoaXMu
aXNVbmF1dGhvcml6ZWRFcnJvcihlLHQscikpcmV0dXJuIG5ldyBuLlVuYXV0aG9yaXplZEVycm9y
KG8pCi1pZih0aGlzLmlzRm9yYmlkZGVuRXJyb3IoZSx0LHIpKXJldHVybiBuZXcgbi5Gb3JiaWRk
ZW5FcnJvcihvKQotaWYodGhpcy5pc0ludmFsaWRFcnJvcihlLHQscikpcmV0dXJuIG5ldyBuLklu
dmFsaWRFcnJvcihvKQotaWYodGhpcy5pc0JhZFJlcXVlc3RFcnJvcihlLHQscikpcmV0dXJuIG5l
dyBuLkJhZFJlcXVlc3RFcnJvcihvKQotaWYodGhpcy5pc05vdEZvdW5kRXJyb3IoZSx0LHIpKXJl
dHVybiBuZXcgbi5Ob3RGb3VuZEVycm9yKG8pCi1pZih0aGlzLmlzQWJvcnRFcnJvcihlLHQscikp
cmV0dXJuIG5ldyBuLkFib3J0RXJyb3IobykKLWlmKHRoaXMuaXNDb25mbGljdEVycm9yKGUsdCxy
KSlyZXR1cm4gbmV3IG4uQ29uZmxpY3RFcnJvcihvKQotaWYodGhpcy5pc1NlcnZlckVycm9yKGUs
dCxyKSlyZXR1cm4gbmV3IG4uU2VydmVyRXJyb3IobykKLXZhciBzPXRoaXMuZ2VuZXJhdGVEZXRh
aWxlZE1lc3NhZ2UoZSx0LHIsaSkKLXJldHVybiBuZXcgbi5BamF4RXJyb3IobyxzKX0sX21hdGNo
SG9zdHM6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5jb25zdHJ1Y3Rvcj09PVJlZ0V4cD90LnRlc3Qo
ZSk6InN0cmluZyI9PXR5cGVvZiB0P3Q9PT1lOihtLndhcm4oInRydXN0ZWRIb3N0cyBvbmx5IGhh
bmRsZXMgc3RyaW5ncyBvciByZWdleGVzLiIsdCwiaXMgbmVpdGhlci4iKSwhMSl9LF9zaG91bGRT
ZW5kSGVhZGVyczpmdW5jdGlvbihlKXt2YXIgdD10aGlzLG49ZS51cmwscj1lLmhvc3QKLW49bnx8
IiIscj1yfHxiKHRoaXMsImhvc3QiKXx8IiIKLXZhciBpPW5ldyBvLlJlcXVlc3RVUkwobikscz1i
KHRoaXMsInRydXN0ZWRIb3N0cyIpfHxoKCkKLWlmKCFpLmlzQ29tcGxldGUpcmV0dXJuITAKLWlm
KHMuZmluZChmdW5jdGlvbihlKXtyZXR1cm4gdC5fbWF0Y2hIb3N0cyhpLmhvc3RuYW1lLGUpfSkp
cmV0dXJuITAKLXZhciBhPW5ldyBvLlJlcXVlc3RVUkwocikKLXJldHVybiBpLnNhbWVIb3N0KGEp
fSxnZW5lcmF0ZURldGFpbGVkTWVzc2FnZTpmdW5jdGlvbihlLHQsbixyKXt2YXIgbz12b2lkIDAs
cz0oMCxpLmRlZmF1bHQpKHQsIkNvbnRlbnQtVHlwZSIpfHwiRW1wdHkgQ29udGVudC1UeXBlIgot
cmV0dXJuIG89InRleHQvaHRtbCI9PT1zLnRvTG93ZXJDYXNlKCkmJm4ubGVuZ3RoPjI1MD8iW09t
aXR0ZWQgTGVuZ3RoeSBIVE1MXSI6SlNPTi5zdHJpbmdpZnkobiksWyJFbWJlciBBSkFYIFJlcXVl
c3QgIityLnR5cGUrIiAiK3IudXJsKyIgcmV0dXJuZWQgYSAiK2UsIlBheWxvYWQgKCIrcysiKSIs
b10uam9pbigiXG4iKX0saXNVbmF1dGhvcml6ZWRFcnJvcjpmdW5jdGlvbihlKXtyZXR1cm4oMCxu
LmlzVW5hdXRob3JpemVkRXJyb3IpKGUpfSxpc0ZvcmJpZGRlbkVycm9yOmZ1bmN0aW9uKGUpe3Jl
dHVybigwLG4uaXNGb3JiaWRkZW5FcnJvcikoZSl9LGlzSW52YWxpZEVycm9yOmZ1bmN0aW9uKGUp
e3JldHVybigwLG4uaXNJbnZhbGlkRXJyb3IpKGUpfSxpc0JhZFJlcXVlc3RFcnJvcjpmdW5jdGlv
bihlKXtyZXR1cm4oMCxuLmlzQmFkUmVxdWVzdEVycm9yKShlKX0saXNOb3RGb3VuZEVycm9yOmZ1
bmN0aW9uKGUpe3JldHVybigwLG4uaXNOb3RGb3VuZEVycm9yKShlKX0saXNBYm9ydEVycm9yOmZ1
bmN0aW9uKGUpe3JldHVybigwLG4uaXNBYm9ydEVycm9yKShlKX0saXNDb25mbGljdEVycm9yOmZ1
bmN0aW9uKGUpe3JldHVybigwLG4uaXNDb25mbGljdEVycm9yKShlKX0saXNTZXJ2ZXJFcnJvcjpm
dW5jdGlvbihlKXtyZXR1cm4oMCxuLmlzU2VydmVyRXJyb3IpKGUpfSxpc1N1Y2Nlc3M6ZnVuY3Rp
b24oZSl7cmV0dXJuKDAsbi5pc1N1Y2Nlc3MpKGUpfSxwYXJzZUVycm9yUmVzcG9uc2U6ZnVuY3Rp
b24oZSl7dHJ5e3JldHVybiBKU09OLnBhcnNlKGUpfWNhdGNoKHQpe3JldHVybiBlfX0sbm9ybWFs
aXplRXJyb3JSZXNwb25zZTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIF8obi5lcnJvcnMpP24uZXJy
b3JzLm1hcChmdW5jdGlvbih0KXtpZihwKHQpKXt2YXIgbj14KHt9LHQpCi1yZXR1cm4gbi5zdGF0
dXM9IiIrdC5zdGF0dXMsbn1yZXR1cm57c3RhdHVzOiIiK2UsdGl0bGU6dH19KTpfKG4pP24ubWFw
KGZ1bmN0aW9uKHQpe3JldHVybiBwKHQpP3tzdGF0dXM6IiIrZSx0aXRsZTp0LnRpdGxlfHwiVGhl
IGJhY2tlbmQgcmVzcG9uZGVkIHdpdGggYW4gZXJyb3IiLGRldGFpbDp0fTp7c3RhdHVzOiIiK2Us
dGl0bGU6IiIrdH19KTpmKG4pP1t7c3RhdHVzOiIiK2UsdGl0bGU6bn1dOlt7c3RhdHVzOiIiK2Us
dGl0bGU6bi50aXRsZXx8IlRoZSBiYWNrZW5kIHJlc3BvbmRlZCB3aXRoIGFuIGVycm9yIixkZXRh
aWw6bn1dfX0pfSksZGVmaW5lKCJlbWJlci1hamF4L21peGlucy9hamF4LXN1cHBvcnQiLFsiZXhw
b3J0cyIsImVtYmVyIl0sZnVuY3Rpb24oZSx0KXt2YXIgbj10LmRlZmF1bHQuTWl4aW4scj10LmRl
ZmF1bHQuaW5qZWN0LnNlcnZpY2UsaT10LmRlZmF1bHQuY29tcHV0ZWQuYWxpYXMKLWUuZGVmYXVs
dD1uLmNyZWF0ZSh7YWpheFNlcnZpY2U6cigiYWpheCIpLGhvc3Q6aSgiYWpheFNlcnZpY2UuaG9z
dCIpLG5hbWVzcGFjZTppKCJhamF4U2VydmljZS5uYW1lc3BhY2UiKSxoZWFkZXJzOmkoImFqYXhT
ZXJ2aWNlLmhlYWRlcnMiKSxhamF4OmZ1bmN0aW9uKGUsdCl7dmFyIG49KGFyZ3VtZW50cy5sZW5n
dGg8PTJ8fHZvaWQgMD09PWFyZ3VtZW50c1syXXx8YXJndW1lbnRzWzJdLHRoaXMuYWpheE9wdGlv
bnMuYXBwbHkodGhpcyxhcmd1bWVudHMpKQotcmV0dXJuIHRoaXMuZ2V0KCJhamF4U2VydmljZSIp
LnJlcXVlc3QoZSxuKX19KX0pLGRlZmluZSgiZW1iZXItYWpheC9yYXciLFsiZXhwb3J0cyIsImVt
YmVyLWFqYXgvYWpheC1yZXF1ZXN0Il0sZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKCl7dmFyIGU9
bmV3IHQuZGVmYXVsdAotcmV0dXJuIGUucmF3LmFwcGx5KGUsYXJndW1lbnRzKX1lLmRlZmF1bHQ9
bn0pLGRlZmluZSgiZW1iZXItYWpheC9yZXF1ZXN0IixbImV4cG9ydHMiLCJlbWJlci1hamF4L2Fq
YXgtcmVxdWVzdCJdLGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbigpe3ZhciBlPW5ldyB0LmRlZmF1
bHQKLXJldHVybiBlLnJlcXVlc3QuYXBwbHkoZSxhcmd1bWVudHMpfWUuZGVmYXVsdD1ufSksZGVm
aW5lKCJlbWJlci1hamF4L3NlcnZpY2VzL2FqYXgiLFsiZXhwb3J0cyIsImVtYmVyIiwiZW1iZXIt
YWpheC9taXhpbnMvYWpheC1yZXF1ZXN0Il0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPXQuZGVmYXVs
dC5TZXJ2aWNlCi1lLmRlZmF1bHQ9ci5leHRlbmQobi5kZWZhdWx0KX0pLGRlZmluZSgiZW1iZXIt
YWpheC91dGlscy9hamF4IixbImV4cG9ydHMiLCJlbWJlciIsImVtYmVyLWFqYXgvdXRpbHMvaXMt
ZmFzdGJvb3QiXSxmdW5jdGlvbihlLHQsbil7dmFyIHI9dC5kZWZhdWx0LiQKLWUuZGVmYXVsdD1u
LmRlZmF1bHQ/bmFqYXg6ci5hamF4fSksZGVmaW5lKCJlbWJlci1hamF4L3V0aWxzL2dldC1oZWFk
ZXIiLFsiZXhwb3J0cyIsImVtYmVyIl0sZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKGUsdCl7aWYo
IWkoZSkmJiFpKHQpKXtyZXR1cm4gZVtyKE9iamVjdC5rZXlzKGUpKS5maW5kKGZ1bmN0aW9uKGUp
e3JldHVybiBlLnRvTG93ZXJDYXNlKCk9PT10LnRvTG93ZXJDYXNlKCl9KV19fWUuZGVmYXVsdD1u
Ci12YXIgcj10LmRlZmF1bHQuQSxpPXQuZGVmYXVsdC5pc05vbmV9KSxkZWZpbmUoImVtYmVyLWFq
YXgvdXRpbHMvaXMtZmFzdGJvb3QiLFsiZXhwb3J0cyJdLGZ1bmN0aW9uKGUpe3ZhciB0PSJ1bmRl
ZmluZWQiIT10eXBlb2YgRmFzdEJvb3QKLWUuZGVmYXVsdD10fSksZGVmaW5lKCJlbWJlci1hamF4
L3V0aWxzL3BhcnNlLXJlc3BvbnNlLWhlYWRlcnMiLFsiZXhwb3J0cyJdLGZ1bmN0aW9uKGUpe2Z1
bmN0aW9uIHQoZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ZTpBcnJheS5mcm9tKGUpfWZ1bmN0
aW9uIG4oZSl7dmFyIG49e30KLXJldHVybiBlPyhlLnNwbGl0KHIpLmZvckVhY2goZnVuY3Rpb24o
ZSl7dmFyIHI9ZS5zcGxpdCgiOiIpLGk9dChyKSxvPWlbMF0scz1pLnNsaWNlKDEpCi1vPW8udHJp
bSgpLChzPXMuam9pbigiOiIpLnRyaW0oKSkmJihuW29dPXMpfSksbik6bn1lLmRlZmF1bHQ9bgot
dmFyIHI9IlxyXG4ifSksZGVmaW5lKCJlbWJlci1hamF4L3V0aWxzL3VybC1oZWxwZXJzIixbImV4
cG9ydHMiLCJlbWJlci1hamF4L3V0aWxzL2lzLWZhc3Rib290Il0sZnVuY3Rpb24oZSx0KXtmdW5j
dGlvbiBuKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fu
bm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gcihlKXt2YXIgbj12b2lk
IDAKLXN8fHQuZGVmYXVsdD9uPWEucGFyc2UoZSk6KGEuaHJlZj1lLG49YSkKLXZhciByPXt9Ci1y
ZXR1cm4gci5ocmVmPW4uaHJlZixyLnByb3RvY29sPW4ucHJvdG9jb2wsci5ob3N0bmFtZT1uLmhv
c3RuYW1lLHIucG9ydD1uLnBvcnQsci5wYXRobmFtZT1uLnBhdGhuYW1lLHIuc2VhcmNoPW4uc2Vh
cmNoLHIuaGFzaD1uLmhhc2gscn12YXIgaT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXtmb3Io
dmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXQotci5lbnVtZXJhYmxlPXIuZW51bWVy
YWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsInZhbHVlImluIHImJihyLndyaXRhYmxlPSEwKSxP
YmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLmtleSxyKX19cmV0dXJuIGZ1bmN0aW9uKHQsbixyKXty
ZXR1cm4gbiYmZSh0LnByb3RvdHlwZSxuKSxyJiZlKHQsciksdH19KCksbz0vXihodHRwfGh0dHBz
KS8scz0ib2JqZWN0Ij09dHlwZW9mIG1vZHVsZSYmbW9kdWxlLmV4cG9ydHMsYT1mdW5jdGlvbigp
e3JldHVybiB0LmRlZmF1bHQ/VVJMOnM/cmVxdWlyZSgidXJsIik6ZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgiYSIpfSgpLHU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe24odGhpcyxlKSx0aGlzLnVy
bD10fXJldHVybiBpKGUsW3trZXk6InNhbWVIb3N0Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10
aGlzCi1yZXR1cm5bInByb3RvY29sIiwiaG9zdG5hbWUiLCJwb3J0Il0ucmVkdWNlKGZ1bmN0aW9u
KG4scil7cmV0dXJuIG4mJnRbcl09PT1lW3JdfSwhMCl9fSx7a2V5OiJ1cmwiLGdldDpmdW5jdGlv
bigpe3JldHVybiB0aGlzLl91cmx9LHNldDpmdW5jdGlvbihlKXt0aGlzLl91cmw9ZQotdmFyIHQ9
cihlKQotZm9yKHZhciBuIGluIHQpKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbikmJih0aGlz
W25dPXRbbl0pCi1yZXR1cm4gdGhpcy5fdXJsfX0se2tleToiaXNDb21wbGV0ZSIsZ2V0OmZ1bmN0
aW9uKCl7cmV0dXJuIHRoaXMudXJsLm1hdGNoKG8pfX1dKSxlfSgpCi1lLlJlcXVlc3RVUkw9dX0p
LGRlZmluZSgiZW1iZXItY2xpLWFwcC12ZXJzaW9uL2luaXRpYWxpemVyLWZhY3RvcnkiLFsiZXhw
b3J0cyIsImVtYmVyIl0sZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKGUsdCl7dmFyIG49ITEKLXJl
dHVybiBmdW5jdGlvbigpe2lmKCFuJiZlJiZ0KXt2YXIgbz1yKGUpCi1pLnJlZ2lzdGVyKG8sdCks
bj0hMH19fWUuZGVmYXVsdD1uCi12YXIgcj10LmRlZmF1bHQuU3RyaW5nLmNsYXNzaWZ5LGk9dC5k
ZWZhdWx0LmxpYnJhcmllc30pLGRlZmluZSgiZW1iZXItY2xpLWFwcC12ZXJzaW9uL3V0aWxzL3Jl
Z2V4cCIsWyJleHBvcnRzIl0sZnVuY3Rpb24oZSl7dmFyIHQ9L1xkWy5dXGRbLl1cZC8KLWUudmVy
c2lvblJlZ0V4cD10Ci12YXIgbj0vW2EtelxkXXs4fS8KLWUuc2hhUmVnRXhwPW59KSxkZWZpbmUo
ImVtYmVyLWluZmxlY3Rvci9pbmRleCIsWyJleHBvcnRzIiwiZW1iZXIiLCJlbWJlci1pbmZsZWN0
b3IvbGliL3N5c3RlbSIsImVtYmVyLWluZmxlY3Rvci9saWIvZXh0L3N0cmluZyJdLGZ1bmN0aW9u
KGUsdCxuLHIpe24uSW5mbGVjdG9yLmRlZmF1bHRSdWxlcz1uLmRlZmF1bHRSdWxlcyx0LmRlZmF1
bHQuSW5mbGVjdG9yPW4uSW5mbGVjdG9yLHQuZGVmYXVsdC5TdHJpbmcucGx1cmFsaXplPW4ucGx1
cmFsaXplLHQuZGVmYXVsdC5TdHJpbmcuc2luZ3VsYXJpemU9bi5zaW5ndWxhcml6ZSxlLmRlZmF1
bHQ9bi5JbmZsZWN0b3IsZS5wbHVyYWxpemU9bi5wbHVyYWxpemUsZS5zaW5ndWxhcml6ZT1uLnNp
bmd1bGFyaXplLGUuZGVmYXVsdFJ1bGVzPW4uZGVmYXVsdFJ1bGVzLHZvaWQgMCE9PWRlZmluZSYm
ZGVmaW5lLmFtZD9kZWZpbmUoImVtYmVyLWluZmxlY3RvciIsWyJleHBvcnRzIl0sZnVuY3Rpb24o
ZSl7cmV0dXJuIGUuZGVmYXVsdD1uLkluZmxlY3RvcixuLkluZmxlY3Rvcn0pOiJ1bmRlZmluZWQi
IT10eXBlb2YgbW9kdWxlJiZtb2R1bGUuZXhwb3J0cyYmKG1vZHVsZS5leHBvcnRzPW4uSW5mbGVj
dG9yKX0pLGRlZmluZSgiZW1iZXItaW5mbGVjdG9yL2xpYi9leHQvc3RyaW5nIixbImV4cG9ydHMi
LCJlbWJlciIsImVtYmVyLWluZmxlY3Rvci9saWIvc3lzdGVtL3N0cmluZyJdLGZ1bmN0aW9uKGUs
dCxuKXsoITA9PT10LmRlZmF1bHQuRVhURU5EX1BST1RPVFlQRVN8fHQuZGVmYXVsdC5FWFRFTkRf
UFJPVE9UWVBFUy5TdHJpbmcpJiYoU3RyaW5nLnByb3RvdHlwZS5wbHVyYWxpemU9ZnVuY3Rpb24o
KXtyZXR1cm4oMCxuLnBsdXJhbGl6ZSkodGhpcyl9LFN0cmluZy5wcm90b3R5cGUuc2luZ3VsYXJp
emU9ZnVuY3Rpb24oKXtyZXR1cm4oMCxuLnNpbmd1bGFyaXplKSh0aGlzKX0pfSksZGVmaW5lKCJl
bWJlci1pbmZsZWN0b3IvbGliL2hlbHBlcnMvcGx1cmFsaXplIixbImV4cG9ydHMiLCJlbWJlci1p
bmZsZWN0b3IiLCJlbWJlci1pbmZsZWN0b3IvbGliL3V0aWxzL21ha2UtaGVscGVyIl0sZnVuY3Rp
b24oZSx0LG4pe2UuZGVmYXVsdD0oMCxuLmRlZmF1bHQpKGZ1bmN0aW9uKGUpe3ZhciBuPXZvaWQg
MCxyPXZvaWQgMAotcmV0dXJuIDE9PT1lLmxlbmd0aD8ocj1lWzBdLCgwLHQucGx1cmFsaXplKShy
KSk6KG49ZVswXSxyPWVbMV0sMSE9PXBhcnNlRmxvYXQobikmJihyPSgwLHQucGx1cmFsaXplKShy
KSksbisiICIrcil9KX0pLGRlZmluZSgiZW1iZXItaW5mbGVjdG9yL2xpYi9oZWxwZXJzL3Npbmd1
bGFyaXplIixbImV4cG9ydHMiLCJlbWJlci1pbmZsZWN0b3IiLCJlbWJlci1pbmZsZWN0b3IvbGli
L3V0aWxzL21ha2UtaGVscGVyIl0sZnVuY3Rpb24oZSx0LG4pe2UuZGVmYXVsdD0oMCxuLmRlZmF1
bHQpKGZ1bmN0aW9uKGUpe3JldHVybigwLHQuc2luZ3VsYXJpemUpKGVbMF0pfSl9KSxkZWZpbmUo
ImVtYmVyLWluZmxlY3Rvci9saWIvc3lzdGVtIixbImV4cG9ydHMiLCJlbWJlci1pbmZsZWN0b3Iv
bGliL3N5c3RlbS9pbmZsZWN0b3IiLCJlbWJlci1pbmZsZWN0b3IvbGliL3N5c3RlbS9zdHJpbmci
LCJlbWJlci1pbmZsZWN0b3IvbGliL3N5c3RlbS9pbmZsZWN0aW9ucyJdLGZ1bmN0aW9uKGUsdCxu
LHIpe3QuZGVmYXVsdC5pbmZsZWN0b3I9bmV3IHQuZGVmYXVsdChyLmRlZmF1bHQpLGUuSW5mbGVj
dG9yPXQuZGVmYXVsdCxlLnNpbmd1bGFyaXplPW4uc2luZ3VsYXJpemUsZS5wbHVyYWxpemU9bi5w
bHVyYWxpemUsZS5kZWZhdWx0UnVsZXM9ci5kZWZhdWx0fSksZGVmaW5lKCJlbWJlci1pbmZsZWN0
b3IvbGliL3N5c3RlbS9pbmZsZWN0aW9ucyIsWyJleHBvcnRzIl0sZnVuY3Rpb24oZSl7ZS5kZWZh
dWx0PXtwbHVyYWxzOltbLyQvLCJzIl0sWy9zJC9pLCJzIl0sWy9eKGF4fHRlc3QpaXMkL2ksIiQx
ZXMiXSxbLyhvY3RvcHx2aXIpdXMkL2ksIiQxaSJdLFsvKG9jdG9wfHZpcilpJC9pLCIkMWkiXSxb
LyhhbGlhc3xzdGF0dXN8Ym9udXMpJC9pLCIkMWVzIl0sWy8oYnUpcyQvaSwiJDFzZXMiXSxbLyhi
dWZmYWx8dG9tYXQpbyQvaSwiJDFvZXMiXSxbLyhbdGldKXVtJC9pLCIkMWEiXSxbLyhbdGldKWEk
L2ksIiQxYSJdLFsvc2lzJC9pLCJzZXMiXSxbLyg/OihbXmZdKWZlfChbbHJdKWYpJC9pLCIkMSQy
dmVzIl0sWy8oaGl2ZSkkL2ksIiQxcyJdLFsvKFteYWVpb3V5XXxxdSl5JC9pLCIkMWllcyJdLFsv
KHh8Y2h8c3N8c2gpJC9pLCIkMWVzIl0sWy8obWF0cnx2ZXJ0fGluZCkoPzppeHxleCkkL2ksIiQx
aWNlcyJdLFsvXihtfGwpb3VzZSQvaSwiJDFpY2UiXSxbL14obXxsKWljZSQvaSwiJDFpY2UiXSxb
L14ob3gpJC9pLCIkMWVuIl0sWy9eKG94ZW4pJC9pLCIkMSJdLFsvKHF1aXopJC9pLCIkMXplcyJd
XSxzaW5ndWxhcjpbWy9zJC9pLCIiXSxbLyhzcykkL2ksIiQxIl0sWy8obilld3MkL2ksIiQxZXdz
Il0sWy8oW3RpXSlhJC9pLCIkMXVtIl0sWy8oKGEpbmFseXwoYilhfChkKWlhZ25vfChwKWFyZW50
aGV8KHApcm9nbm98KHMpeW5vcHwodCloZSkoc2lzfHNlcykkL2ksIiQxc2lzIl0sWy8oXmFuYWx5
KShzaXN8c2VzKSQvaSwiJDFzaXMiXSxbLyhbXmZdKXZlcyQvaSwiJDFmZSJdLFsvKGhpdmUpcyQv
aSwiJDEiXSxbLyh0aXZlKXMkL2ksIiQxIl0sWy8oW2xyXSl2ZXMkL2ksIiQxZiJdLFsvKFteYWVp
b3V5XXxxdSlpZXMkL2ksIiQxeSJdLFsvKHMpZXJpZXMkL2ksIiQxZXJpZXMiXSxbLyhtKW92aWVz
JC9pLCIkMW92aWUiXSxbLyh4fGNofHNzfHNoKWVzJC9pLCIkMSJdLFsvXihtfGwpaWNlJC9pLCIk
MW91c2UiXSxbLyhidXMpKGVzKT8kL2ksIiQxIl0sWy8obyllcyQvaSwiJDEiXSxbLyhzaG9lKXMk
L2ksIiQxIl0sWy8oY3Jpc3x0ZXN0KShpc3xlcykkL2ksIiQxaXMiXSxbL14oYSl4W2llXXMkL2ks
IiQxeGlzIl0sWy8ob2N0b3B8dmlyKSh1c3xpKSQvaSwiJDF1cyJdLFsvKGFsaWFzfHN0YXR1c3xi
b251cykoZXMpPyQvaSwiJDEiXSxbL14ob3gpZW4vaSwiJDEiXSxbLyh2ZXJ0fGluZClpY2VzJC9p
LCIkMWV4Il0sWy8obWF0cilpY2VzJC9pLCIkMWl4Il0sWy8ocXVpeil6ZXMkL2ksIiQxIl0sWy8o
ZGF0YWJhc2UpcyQvaSwiJDEiXV0saXJyZWd1bGFyUGFpcnM6W1sicGVyc29uIiwicGVvcGxlIl0s
WyJtYW4iLCJtZW4iXSxbImNoaWxkIiwiY2hpbGRyZW4iXSxbInNleCIsInNleGVzIl0sWyJtb3Zl
IiwibW92ZXMiXSxbImNvdyIsImtpbmUiXSxbInpvbWJpZSIsInpvbWJpZXMiXV0sdW5jb3VudGFi
bGU6WyJlcXVpcG1lbnQiLCJpbmZvcm1hdGlvbiIsInJpY2UiLCJtb25leSIsInNwZWNpZXMiLCJz
ZXJpZXMiLCJmaXNoIiwic2hlZXAiLCJqZWFucyIsInBvbGljZSJdfX0pLGRlZmluZSgiZW1iZXIt
aW5mbGVjdG9yL2xpYi9zeXN0ZW0vaW5mbGVjdG9yIixbImV4cG9ydHMiLCJlbWJlciJdLGZ1bmN0
aW9uKGUsdCl7ZnVuY3Rpb24gbihlLHQpe2Zvcih2YXIgbj0wLHI9dC5sZW5ndGg7bjxyO24rKyll
LnVuY291bnRhYmxlW3Rbbl0udG9Mb3dlckNhc2UoKV09ITB9ZnVuY3Rpb24gcihlLHQpe2Zvcih2
YXIgbixyPTAsaT10Lmxlbmd0aDtyPGk7cisrKW49dFtyXSxlLmlycmVndWxhcltuWzBdLnRvTG93
ZXJDYXNlKCldPW5bMV0sZS5pcnJlZ3VsYXJbblsxXS50b0xvd2VyQ2FzZSgpXT1uWzFdLGUuaXJy
ZWd1bGFySW52ZXJzZVtuWzFdLnRvTG93ZXJDYXNlKCldPW5bMF0sZS5pcnJlZ3VsYXJJbnZlcnNl
W25bMF0udG9Mb3dlckNhc2UoKV09blswXX1mdW5jdGlvbiBpKGUpe2U9ZXx8e30sZS51bmNvdW50
YWJsZT1lLnVuY291bnRhYmxlfHxvKCksZS5pcnJlZ3VsYXJQYWlycz1lLmlycmVndWxhclBhaXJz
fHxvKCkKLXZhciB0PXRoaXMucnVsZXM9e3BsdXJhbHM6ZS5wbHVyYWxzfHxbXSxzaW5ndWxhcjpl
LnNpbmd1bGFyfHxbXSxpcnJlZ3VsYXI6bygpLGlycmVndWxhckludmVyc2U6bygpLHVuY291bnRh
YmxlOm8oKX0KLW4odCxlLnVuY291bnRhYmxlKSxyKHQsZS5pcnJlZ3VsYXJQYWlycyksdGhpcy5l
bmFibGVDYWNoZSgpfWZ1bmN0aW9uIG8oKXt2YXIgZT1PYmplY3QuY3JlYXRlKG51bGwpCi1yZXR1
cm4gZS5fZGljdD1udWxsLGRlbGV0ZSBlLl9kaWN0LGV9dmFyIHM9dC5kZWZhdWx0LlN0cmluZy5j
YXBpdGFsaXplLGE9L15ccyokLyx1PS8oW1x3XC8tXStbX1wvXHMtXSkoW2EtelxkXSskKS8sbD0v
KFtcd1wvXHMtXSspKFtBLVpdW2EtelxkXSokKS8sYz0vW0EtWl1bYS16XGRdKiQvCi1pZighT2Jq
ZWN0LmNyZWF0ZSYmIU9iamVjdC5jcmVhdGUobnVsbCkuaGFzT3duUHJvcGVydHkpdGhyb3cgbmV3
IEVycm9yKCJUaGlzIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBPYmplY3QuY3JlYXRlKG51bGwp
LCBwbGVhc2UgcG9seWZpbCB3aXRoIGVzNS1zaGFtOiBodHRwOi8vZ2l0LmlvL3lCVTJyZyIpCi1p
LnByb3RvdHlwZT17ZW5hYmxlQ2FjaGU6ZnVuY3Rpb24oKXt0aGlzLnB1cmdlQ2FjaGUoKSx0aGlz
LnNpbmd1bGFyaXplPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9jYWNoZVVzZWQ9ITAsdGhpcy5f
c0NhY2hlW2VdfHwodGhpcy5fc0NhY2hlW2VdPXRoaXMuX3Npbmd1bGFyaXplKGUpKX0sdGhpcy5w
bHVyYWxpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2NhY2hlVXNlZD0hMCx0aGlzLl9wQ2Fj
aGVbZV18fCh0aGlzLl9wQ2FjaGVbZV09dGhpcy5fcGx1cmFsaXplKGUpKX19LHB1cmdlQ2FjaGU6
ZnVuY3Rpb24oKXt0aGlzLl9jYWNoZVVzZWQ9ITEsdGhpcy5fc0NhY2hlPW8oKSx0aGlzLl9wQ2Fj
aGU9bygpfSxkaXNhYmxlQ2FjaGU6ZnVuY3Rpb24oKXt0aGlzLl9zQ2FjaGU9bnVsbCx0aGlzLl9w
Q2FjaGU9bnVsbCx0aGlzLnNpbmd1bGFyaXplPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9zaW5n
dWxhcml6ZShlKX0sdGhpcy5wbHVyYWxpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3BsdXJh
bGl6ZShlKX19LHBsdXJhbDpmdW5jdGlvbihlLHQpe3RoaXMuX2NhY2hlVXNlZCYmdGhpcy5wdXJn
ZUNhY2hlKCksdGhpcy5ydWxlcy5wbHVyYWxzLnB1c2goW2UsdC50b0xvd2VyQ2FzZSgpXSl9LHNp
bmd1bGFyOmZ1bmN0aW9uKGUsdCl7dGhpcy5fY2FjaGVVc2VkJiZ0aGlzLnB1cmdlQ2FjaGUoKSx0
aGlzLnJ1bGVzLnNpbmd1bGFyLnB1c2goW2UsdC50b0xvd2VyQ2FzZSgpXSl9LHVuY291bnRhYmxl
OmZ1bmN0aW9uKGUpe3RoaXMuX2NhY2hlVXNlZCYmdGhpcy5wdXJnZUNhY2hlKCksbih0aGlzLnJ1
bGVzLFtlLnRvTG93ZXJDYXNlKCldKX0saXJyZWd1bGFyOmZ1bmN0aW9uKGUsdCl7dGhpcy5fY2Fj
aGVVc2VkJiZ0aGlzLnB1cmdlQ2FjaGUoKSxyKHRoaXMucnVsZXMsW1tlLHRdXSl9LHBsdXJhbGl6
ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcGx1cmFsaXplKGUpfSxfcGx1cmFsaXplOmZ1bmN0
aW9uKGUpe3JldHVybiB0aGlzLmluZmxlY3QoZSx0aGlzLnJ1bGVzLnBsdXJhbHMsdGhpcy5ydWxl
cy5pcnJlZ3VsYXIpfSxzaW5ndWxhcml6ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fc2luZ3Vs
YXJpemUoZSl9LF9zaW5ndWxhcml6ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5pbmZsZWN0KGUs
dGhpcy5ydWxlcy5zaW5ndWxhcix0aGlzLnJ1bGVzLmlycmVndWxhckludmVyc2UpfSxpbmZsZWN0
OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8scCxmLGgsZCxtCi1pZihoPSFlfHxhLnRlc3QoZSks
ZD1jLnRlc3QoZSksIiIsaClyZXR1cm4gZQotaWYobz1lLnRvTG93ZXJDYXNlKCkscD11LmV4ZWMo
ZSl8fGwuZXhlYyhlKSxwJiYocFsxXSxmPXBbMl0udG9Mb3dlckNhc2UoKSksdGhpcy5ydWxlcy51
bmNvdW50YWJsZVtvXXx8dGhpcy5ydWxlcy51bmNvdW50YWJsZVtmXSlyZXR1cm4gZQotZm9yKG0g
aW4gbilpZihvLm1hdGNoKG0rIiQiKSlyZXR1cm4gaT1uW21dLGQmJm5bZl0mJihpPXMoaSksbT1z
KG0pKSxlLnJlcGxhY2UobmV3IFJlZ0V4cChtLCJpIiksaSkKLWZvcih2YXIgZz10Lmxlbmd0aDtn
PjAmJihyPXRbZy0xXSxtPXJbMF0sIW0udGVzdChlKSk7Zy0tKTtyZXR1cm4gcj1yfHxbXSxtPXJb
MF0saT1yWzFdLGUucmVwbGFjZShtLGkpfX0sZS5kZWZhdWx0PWl9KSxkZWZpbmUoImVtYmVyLWlu
ZmxlY3Rvci9saWIvc3lzdGVtL3N0cmluZyIsWyJleHBvcnRzIiwiZW1iZXItaW5mbGVjdG9yL2xp
Yi9zeXN0ZW0vaW5mbGVjdG9yIl0sZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKGUpe3JldHVybiB0
LmRlZmF1bHQuaW5mbGVjdG9yLnBsdXJhbGl6ZShlKX1mdW5jdGlvbiByKGUpe3JldHVybiB0LmRl
ZmF1bHQuaW5mbGVjdG9yLnNpbmd1bGFyaXplKGUpfWUucGx1cmFsaXplPW4sZS5zaW5ndWxhcml6
ZT1yfSkKLWRlZmluZSgiZW1iZXItaW5mbGVjdG9yL2xpYi91dGlscy9tYWtlLWhlbHBlciIsWyJl
eHBvcnRzIiwiZW1iZXIiXSxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSl7cmV0dXJuIHQuZGVm
YXVsdC5IZWxwZXI/dC5kZWZhdWx0LkhlbHBlci5oZWxwZXIoZSk6dC5kZWZhdWx0LkhUTUxCYXJz
P3QuZGVmYXVsdC5IVE1MQmFycy5tYWtlQm91bmRIZWxwZXIoZSk6dC5kZWZhdWx0LkhhbmRsZWJh
cnMubWFrZUJvdW5kSGVscGVyKGUpfWUuZGVmYXVsdD1ufSksZGVmaW5lKCJlbWJlci1sb2FkLWlu
aXRpYWxpemVycy9pbmRleCIsWyJleHBvcnRzIiwiZW1iZXIiXSxmdW5jdGlvbihlLHQpeyJ1c2Ug
c3RyaWN0IgotZS5fX2VzTW9kdWxlPSEwLGUuZGVmYXVsdD1mdW5jdGlvbihlLG4pe3ZhciByPW5l
dyBSZWdFeHAoIl4iK24rIi8oKD86aW5zdGFuY2UtKT9pbml0aWFsaXplcnMpLyIpOyhPYmplY3Qu
a2V5c3x8dC5kZWZhdWx0LmtleXMpKHJlcXVpcmVqcy5fZWFrX3NlZW4pLm1hcChmdW5jdGlvbihl
KXtyZXR1cm57bW9kdWxlTmFtZTplLG1hdGNoZXM6ci5leGVjKGUpfX0pLmZpbHRlcihmdW5jdGlv
bihlKXtyZXR1cm4gZS5tYXRjaGVzJiYyPT09ZS5tYXRjaGVzLmxlbmd0aH0pLmZvckVhY2goZnVu
Y3Rpb24obil7dmFyIHI9bi5tb2R1bGVOYW1lLGk9cmVxdWlyZShyLG51bGwsbnVsbCwhMCkKLWlm
KCFpKXRocm93IG5ldyBFcnJvcihyKyIgbXVzdCBleHBvcnQgYW4gaW5pdGlhbGl6ZXIuIikKLXZh
ciBvPXQuZGVmYXVsdC5TdHJpbmcuY2FtZWxpemUobi5tYXRjaGVzWzFdLnN1YnN0cmluZygwLG4u
bWF0Y2hlc1sxXS5sZW5ndGgtMSkpLHM9aS5kZWZhdWx0Ci1pZighcy5uYW1lKXt2YXIgYT1yLm1h
dGNoKC9bXlwvXStcLz8kLylbMF0KLXMubmFtZT1hfWVbb10mJmVbb10ocyl9KX19KSxkZWZpbmUo
ImVtYmVyLXJlc29sdmVyL2NvbnRhaW5lci1kZWJ1Zy1hZGFwdGVyIixbImV4cG9ydHMiLCJlbWJl
ciIsImVtYmVyLXJlc29sdmVyL3V0aWxzL21vZHVsZS1yZWdpc3RyeSJdLGZ1bmN0aW9uKGUsdCxu
KXtmdW5jdGlvbiByKGUsdCxuKXt2YXIgcj10Lm1hdGNoKG5ldyBSZWdFeHAoIl4vPyIrbisiLygu
KykvIitlKyIkIikpCi1pZihyKXJldHVybiByWzFdfXZhciBpPXQuZGVmYXVsdC5Db250YWluZXJE
ZWJ1Z0FkYXB0ZXIsbz1udWxsCi12b2lkIDAhPT1pJiYobz1pLmV4dGVuZCh7X21vZHVsZVJlZ2lz
dHJ5Om51bGwsaW5pdDpmdW5jdGlvbigpe3RoaXMuX3N1cGVyLmFwcGx5KHRoaXMsYXJndW1lbnRz
KSx0aGlzLl9tb2R1bGVSZWdpc3RyeXx8KHRoaXMuX21vZHVsZVJlZ2lzdHJ5PW5ldyBuLmRlZmF1
bHQpfSxjYW5DYXRhbG9nRW50cmllc0J5VHlwZTpmdW5jdGlvbigpe3JldHVybiEwfSxjYXRhbG9n
RW50cmllc0J5VHlwZTpmdW5jdGlvbihlKXtmb3IodmFyIG49dGhpcy5fbW9kdWxlUmVnaXN0cnku
bW9kdWxlTmFtZXMoKSxpPXQuZGVmYXVsdC5BKCksbz10aGlzLm5hbWVzcGFjZS5tb2R1bGVQcmVm
aXgscz0wLGE9bi5sZW5ndGg7czxhO3MrKyl7dmFyIHU9bltzXQotaWYoLTEhPT11LmluZGV4T2Yo
ZSkpe3ZhciBsPXIoZSx1LHRoaXMubmFtZXNwYWNlLnBvZE1vZHVsZVByZWZpeHx8bykKLWx8fChs
PXUuc3BsaXQoZSsicy8iKS5wb3AoKSksaS5hZGRPYmplY3QobCl9fXJldHVybiBpfX0pKSxlLmRl
ZmF1bHQ9b30pLGRlZmluZSgiZW1iZXItcmVzb2x2ZXIvaW5kZXgiLFsiZXhwb3J0cyIsImVtYmVy
LXJlc29sdmVyL3Jlc29sdmVyIl0sZnVuY3Rpb24oZSx0KXtPYmplY3QuZGVmaW5lUHJvcGVydHko
ZSwiZGVmYXVsdCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHQuZGVmYXVs
dH19KX0pLGRlZmluZSgiZW1iZXItcmVzb2x2ZXIvcmVzb2x2ZXIiLFsiZXhwb3J0cyIsImVtYmVy
IiwiZW1iZXItcmVzb2x2ZXIvdXRpbHMvbW9kdWxlLXJlZ2lzdHJ5IiwiZW1iZXItcmVzb2x2ZXIv
dXRpbHMvY2xhc3MtZmFjdG9yeSIsImVtYmVyLXJlc29sdmVyL3V0aWxzL21ha2UtZGljdGlvbmFy
eSJdLGZ1bmN0aW9uKGUsdCxuLHIsaSl7ZnVuY3Rpb24gbyhlKXtpZighMD09PWUucGFyc2VkTmFt
ZSlyZXR1cm4gZQotdmFyIHQsbixyLGk9ZS5zcGxpdCgiQCIpCi1pZigiaGVscGVyOkBjb250ZW50
LWhlbHBlciIhPT1lJiYyPT09aS5sZW5ndGgpe3ZhciBvPWlbMF0uc3BsaXQoIjoiKQotaWYoMj09
PW8ubGVuZ3RoKXQ9b1sxXSxuPW9bMF0scj1pWzFdCi1lbHNle3ZhciBzPWlbMV0uc3BsaXQoIjoi
KQotdD1pWzBdLG49c1swXSxyPXNbMV19fWVsc2UgaT1lLnNwbGl0KCI6Iiksbj1pWzBdLHI9aVsx
XQotdmFyIGE9cix1PXAodGhpcywibmFtZXNwYWNlIiksYz11Ci1yZXR1cm57cGFyc2VkTmFtZToh
MCxmdWxsTmFtZTplLHByZWZpeDp0fHx0aGlzLnByZWZpeCh7dHlwZTpufSksdHlwZTpuLGZ1bGxO
YW1lV2l0aG91dFR5cGU6YSxuYW1lOnIscm9vdDpjLHJlc29sdmVNZXRob2ROYW1lOiJyZXNvbHZl
IitsKG4pfX1mdW5jdGlvbiBzKGUpe3QuZGVmYXVsdC5hc3NlcnQoImBtb2R1bGVQcmVmaXhgIG11
c3QgYmUgZGVmaW5lZCIsdGhpcy5uYW1lc3BhY2UubW9kdWxlUHJlZml4KQotdmFyIG49dGhpcy5m
aW5kTW9kdWxlTmFtZShlKQotaWYobil7dmFyIGk9dGhpcy5fZXh0cmFjdERlZmF1bHRFeHBvcnQo
bixlKQotaWYodm9pZCAwPT09aSl0aHJvdyBuZXcgRXJyb3IoIiBFeHBlY3RlZCB0byBmaW5kOiAn
IitlLmZ1bGxOYW1lKyInIHdpdGhpbiAnIituKyInIGJ1dCBnb3QgJ3VuZGVmaW5lZCcuIERpZCB5
b3UgZm9yZ2V0IHRvIGBleHBvcnQgZGVmYXVsdGAgd2l0aGluICciK24rIic/IikKLXJldHVybiB0
aGlzLnNob3VsZFdyYXBJbkNsYXNzRmFjdG9yeShpLGUpJiYoaT0oMCxyLmRlZmF1bHQpKGkpKSxp
fXJldHVybiB0aGlzLl9zdXBlcihlKX12YXIgYT10LmRlZmF1bHQuU3RyaW5nLHU9YS51bmRlcnNj
b3JlLGw9YS5jbGFzc2lmeSxjPWEuZGFzaGVyaXplLHA9dC5kZWZhdWx0LmdldCxmPXQuZGVmYXVs
dC5EZWZhdWx0UmVzb2x2ZXIsaD1mLmV4dGVuZCh7cmVzb2x2ZU90aGVyOnMscGFyc2VOYW1lOm8s
cmVzb2x2ZVRlbXBsYXRlOnMscGx1cmFsaXplZFR5cGVzOm51bGwsbW9kdWxlUmVnaXN0cnk6bnVs
bCxtYWtlVG9TdHJpbmc6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5uYW1lc3BhY2UubW9kdWxl
UHJlZml4KyJAIit0KyI6In0sc2hvdWxkV3JhcEluQ2xhc3NGYWN0b3J5OmZ1bmN0aW9uKCl7cmV0
dXJuITF9LGluaXQ6ZnVuY3Rpb24oKXt0aGlzLl9zdXBlcigpLHRoaXMubW9kdWxlQmFzZWRSZXNv
bHZlcj0hMCx0aGlzLl9tb2R1bGVSZWdpc3RyeXx8KHRoaXMuX21vZHVsZVJlZ2lzdHJ5PW5ldyBu
LmRlZmF1bHQpLHRoaXMuX25vcm1hbGl6ZUNhY2hlPSgwLGkuZGVmYXVsdCkoKSx0aGlzLnBsdXJh
bGl6ZWRUeXBlcz10aGlzLnBsdXJhbGl6ZWRUeXBlc3x8KDAsaS5kZWZhdWx0KSgpLHRoaXMucGx1
cmFsaXplZFR5cGVzLmNvbmZpZ3x8KHRoaXMucGx1cmFsaXplZFR5cGVzLmNvbmZpZz0iY29uZmln
IiksdGhpcy5fZGVwcmVjYXRlZFBvZE1vZHVsZVByZWZpeD0hMX0sbm9ybWFsaXplOmZ1bmN0aW9u
KGUpe3JldHVybiB0aGlzLl9ub3JtYWxpemVDYWNoZVtlXXx8KHRoaXMuX25vcm1hbGl6ZUNhY2hl
W2VdPXRoaXMuX25vcm1hbGl6ZShlKSl9LF9ub3JtYWxpemU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5z
cGxpdCgiOiIpCi1yZXR1cm4gdC5sZW5ndGg+MT8iaGVscGVyIj09PXRbMF0/dFswXSsiOiIrdFsx
XS5yZXBsYWNlKC9fL2csIi0iKTp0WzBdKyI6IitjKHRbMV0ucmVwbGFjZSgvXC4vZywiLyIpKTpl
fSxwbHVyYWxpemU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucGx1cmFsaXplZFR5cGVzW2VdfHwo
dGhpcy5wbHVyYWxpemVkVHlwZXNbZV09ZSsicyIpfSxwb2RCYXNlZExvb2t1cFdpdGhQcmVmaXg6
ZnVuY3Rpb24oZSx0KXt2YXIgbj10LmZ1bGxOYW1lV2l0aG91dFR5cGUKLXJldHVybiJ0ZW1wbGF0
ZSI9PT10LnR5cGUmJihuPW4ucmVwbGFjZSgvXmNvbXBvbmVudHNcLy8sIiIpKSxlKyIvIituKyIv
Iit0LnR5cGV9LHBvZEJhc2VkTW9kdWxlTmFtZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLm5hbWVz
cGFjZS5wb2RNb2R1bGVQcmVmaXh8fHRoaXMubmFtZXNwYWNlLm1vZHVsZVByZWZpeAotcmV0dXJu
IHRoaXMucG9kQmFzZWRMb29rdXBXaXRoUHJlZml4KHQsZSl9LHBvZEJhc2VkQ29tcG9uZW50c0lu
U3ViZGlyOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMubmFtZXNwYWNlLnBvZE1vZHVsZVByZWZpeHx8
dGhpcy5uYW1lc3BhY2UubW9kdWxlUHJlZml4Ci1pZih0Kz0iL2NvbXBvbmVudHMiLCJjb21wb25l
bnQiPT09ZS50eXBlfHxlLmZ1bGxOYW1lV2l0aG91dFR5cGUubWF0Y2goL15jb21wb25lbnRzLykp
cmV0dXJuIHRoaXMucG9kQmFzZWRMb29rdXBXaXRoUHJlZml4KHQsZSl9LHJlc29sdmVFbmdpbmU6
ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5mdWxsTmFtZVdpdGhvdXRUeXBlLG49dCsiL2VuZ2luZSIKLWlm
KHRoaXMuX21vZHVsZVJlZ2lzdHJ5LmhhcyhuKSlyZXR1cm4gdGhpcy5fZXh0cmFjdERlZmF1bHRF
eHBvcnQobil9LHJlc29sdmVSb3V0ZU1hcDpmdW5jdGlvbihlKXt2YXIgbj1lLmZ1bGxOYW1lV2l0
aG91dFR5cGUscj1uKyIvcm91dGVzIgotaWYodGhpcy5fbW9kdWxlUmVnaXN0cnkuaGFzKHIpKXt2
YXIgaT10aGlzLl9leHRyYWN0RGVmYXVsdEV4cG9ydChyKQotcmV0dXJuIHQuZGVmYXVsdC5hc3Nl
cnQoIlRoZSByb3V0ZSBtYXAgZm9yICIrbisiIHNob3VsZCBiZSB3cmFwcGVkIGJ5ICdidWlsZFJv
dXRlcycgYmVmb3JlIGV4cG9ydGluZy4iLGkuaXNSb3V0ZU1hcCksaX19LG1haW5Nb2R1bGVOYW1l
OmZ1bmN0aW9uKGUpe3ZhciB0PWUucHJlZml4KyIvIitlLnR5cGUKLWlmKCJtYWluIj09PWUuZnVs
bE5hbWVXaXRob3V0VHlwZSlyZXR1cm4gdH0sZGVmYXVsdE1vZHVsZU5hbWU6ZnVuY3Rpb24oZSl7
cmV0dXJuIGUucHJlZml4KyIvIit0aGlzLnBsdXJhbGl6ZShlLnR5cGUpKyIvIitlLmZ1bGxOYW1l
V2l0aG91dFR5cGV9LHByZWZpeDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLm5hbWVzcGFjZS5tb2R1
bGVQcmVmaXgKLXJldHVybiB0aGlzLm5hbWVzcGFjZVtlLnR5cGUrIlByZWZpeCJdJiYodD10aGlz
Lm5hbWVzcGFjZVtlLnR5cGUrIlByZWZpeCJdKSx0fSxtb2R1bGVOYW1lTG9va3VwUGF0dGVybnM6
dC5kZWZhdWx0LmNvbXB1dGVkKGZ1bmN0aW9uKCl7cmV0dXJuW3RoaXMucG9kQmFzZWRNb2R1bGVO
YW1lLHRoaXMucG9kQmFzZWRDb21wb25lbnRzSW5TdWJkaXIsdGhpcy5tYWluTW9kdWxlTmFtZSx0
aGlzLmRlZmF1bHRNb2R1bGVOYW1lXX0pLGZpbmRNb2R1bGVOYW1lOmZ1bmN0aW9uKGUsdCl7Zm9y
KHZhciBuLHI9dGhpcy5nZXQoIm1vZHVsZU5hbWVMb29rdXBQYXR0ZXJucyIpLGk9MCxvPXIubGVu
Z3RoO2k8bztpKyspe3ZhciBzPXJbaV0sYT1zLmNhbGwodGhpcyxlKQotaWYoYSYmKGE9dGhpcy5j
aG9vc2VNb2R1bGVOYW1lKGEsZSkpLGEmJnRoaXMuX21vZHVsZVJlZ2lzdHJ5LmhhcyhhKSYmKG49
YSksdHx8dGhpcy5fbG9nTG9va3VwKG4sZSxhKSxuKXJldHVybiBufX0sY2hvb3NlTW9kdWxlTmFt
ZTpmdW5jdGlvbihlLG4pe3ZhciByPXRoaXMsaT11KGUpCi1pZihlIT09aSYmdGhpcy5fbW9kdWxl
UmVnaXN0cnkuaGFzKGUpJiZ0aGlzLl9tb2R1bGVSZWdpc3RyeS5oYXMoaSkpdGhyb3cgbmV3IFR5
cGVFcnJvcigiQW1iaWd1b3VzIG1vZHVsZSBuYW1lczogYCIrZSsiYCBhbmQgYCIraSsiYCIpCi1p
Zih0aGlzLl9tb2R1bGVSZWdpc3RyeS5oYXMoZSkpcmV0dXJuIGUKLWlmKHRoaXMuX21vZHVsZVJl
Z2lzdHJ5LmhhcyhpKSlyZXR1cm4gaQotdmFyIG89ZS5yZXBsYWNlKC9cLy0oW15cL10qKSQvLCIv
XyQxIikKLWlmKHRoaXMuX21vZHVsZVJlZ2lzdHJ5LmhhcyhvKSlyZXR1cm4gdC5kZWZhdWx0LmRl
cHJlY2F0ZSgnTW9kdWxlcyBzaG91bGQgbm90IGNvbnRhaW4gdW5kZXJzY29yZXMuIEF0dGVtcHRl
ZCB0byBsb29rdXAgIicrZSsnIiB3aGljaCB3YXMgbm90IGZvdW5kLiBQbGVhc2UgcmVuYW1lICIn
K28rJyIgdG8gIicrZSsnIiBpbnN0ZWFkLicsITEse2lkOiJlbWJlci1yZXNvbHZlci51bmRlcnNj
b3JlZC1tb2R1bGVzIix1bnRpbDoiMy4wLjAifSksbwotdC5kZWZhdWx0LnJ1bkluRGVidWcoZnVu
Y3Rpb24oKXsiaGVscGVyIiE9PW4udHlwZXx8IWUubWF0Y2goL1thLXpdK1tBLVpdKy8pfHwoci5f
Y2FtZWxDYXNlSGVscGVyV2FybmVkTmFtZXM9ci5fY2FtZWxDYXNlSGVscGVyV2FybmVkTmFtZXN8
fFtdLCEoci5fY2FtZWxDYXNlSGVscGVyV2FybmVkTmFtZXMuaW5kZXhPZihuLmZ1bGxOYW1lKT4t
MSkmJnIuX21vZHVsZVJlZ2lzdHJ5LmhhcyhjKGUpKSYmKHIuX2NhbWVsQ2FzZUhlbHBlcldhcm5l
ZE5hbWVzLnB1c2gobi5mdWxsTmFtZSksdC5kZWZhdWx0Lndhcm4oJ0F0dGVtcHRlZCB0byBsb29r
dXAgIicrbi5mdWxsTmFtZSsnIiB3aGljaCB3YXMgbm90IGZvdW5kLiBJbiBwcmV2aW91cyB2ZXJz
aW9ucyBvZiBlbWJlci1yZXNvbHZlciwgYSBidWcgd291bGQgaGF2ZSBjYXVzZWQgdGhlIG1vZHVs
ZSBhdCAiJytjKGUpKyciIHRvIGJlIHJldHVybmVkIGZvciB0aGlzIGNhbWVsIGNhc2UgaGVscGVy
IG5hbWUuIFRoaXMgaGFzIGJlZW4gZml4ZWQuIFVzZSB0aGUgZGFzaGVyaXplZCBuYW1lIHRvIHJl
c29sdmUgdGhlIG1vZHVsZSB0aGF0IHdvdWxkIGhhdmUgYmVlbiByZXR1cm5lZCBpbiBwcmV2aW91
cyB2ZXJzaW9ucy4nLCExLHtpZDoiZW1iZXItcmVzb2x2ZXIuY2FtZWxjYXNlLWhlbHBlci1uYW1l
cyIsdW50aWw6IjMuMC4wIn0pKSl9KX0sbG9va3VwRGVzY3JpcHRpb246ZnVuY3Rpb24oZSl7dmFy
IHQ9dGhpcy5wYXJzZU5hbWUoZSkKLXJldHVybiB0aGlzLmZpbmRNb2R1bGVOYW1lKHQsITApfSxf
bG9nTG9va3VwOmZ1bmN0aW9uKGUsbixyKXtpZih0LmRlZmF1bHQuRU5WLkxPR19NT0RVTEVfUkVT
T0xWRVJ8fG4ucm9vdC5MT0dfUkVTT0xWRVIpe3ZhciBpLG8KLWk9ZT8iW+Kck10iOiJbIF0iLG89
bi5mdWxsTmFtZS5sZW5ndGg+NjA/Ii4iOm5ldyBBcnJheSg2MC1uLmZ1bGxOYW1lLmxlbmd0aCku
am9pbigiLiIpLHJ8fChyPXRoaXMubG9va3VwRGVzY3JpcHRpb24obikpLHQuZGVmYXVsdC5Mb2dn
ZXIuaW5mbyhpLG4uZnVsbE5hbWUsbyxyKX19LGtub3duRm9yVHlwZTpmdW5jdGlvbihlKXtmb3Io
dmFyIHQ9dGhpcy5fbW9kdWxlUmVnaXN0cnkubW9kdWxlTmFtZXMoKSxuPSgwLGkuZGVmYXVsdCko
KSxyPTAsbz10Lmxlbmd0aDtyPG87cisrKXt2YXIgcz10W3JdLGE9dGhpcy50cmFuc2xhdGVUb0Nv
bnRhaW5lckZ1bGxuYW1lKGUscykKLWEmJihuW2FdPSEwKX1yZXR1cm4gbn0sdHJhbnNsYXRlVG9D
b250YWluZXJGdWxsbmFtZTpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMucHJlZml4KHt0eXBlOmV9
KSxyPW4rIi8iLGk9Ii8iK2Usbz10LmluZGV4T2Yocikscz10LmluZGV4T2YoaSkKLWlmKDA9PT1v
JiZzPT09dC5sZW5ndGgtaS5sZW5ndGgmJnQubGVuZ3RoPnIubGVuZ3RoK2kubGVuZ3RoKXJldHVy
biBlKyI6Iit0LnNsaWNlKG8rci5sZW5ndGgscykKLXZhciBhPXRoaXMucGx1cmFsaXplKGUpLHU9
bisiLyIrYSsiLyIKLXJldHVybiAwPT09dC5pbmRleE9mKHUpJiZ0Lmxlbmd0aD51Lmxlbmd0aD9l
KyI6Iit0LnNsaWNlKHUubGVuZ3RoKTp2b2lkIDB9LF9leHRyYWN0RGVmYXVsdEV4cG9ydDpmdW5j
dGlvbihlKXt2YXIgdD1yZXF1aXJlKGUsbnVsbCxudWxsLCEwKQotcmV0dXJuIHQmJnQuZGVmYXVs
dCYmKHQ9dC5kZWZhdWx0KSx0fX0pCi1oLnJlb3BlbkNsYXNzKHttb2R1bGVCYXNlZFJlc29sdmVy
OiEwfSksZS5kZWZhdWx0PWh9KSxkZWZpbmUoImVtYmVyLXJlc29sdmVyL3V0aWxzL2NsYXNzLWZh
Y3RvcnkiLFsiZXhwb3J0cyJdLGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7cmV0dXJue2NyZWF0
ZTpmdW5jdGlvbih0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZS5leHRlbmQ/ZS5leHRlbmQo
dCk6ZX19fWUuZGVmYXVsdD10fSksZGVmaW5lKCJlbWJlci1yZXNvbHZlci91dGlscy9jcmVhdGUi
LFsiZXhwb3J0cyIsImVtYmVyIl0sZnVuY3Rpb24oZSx0KXt2YXIgbj1PYmplY3QuY3JlYXRlfHx0
LmRlZmF1bHQuY3JlYXRlCi1pZighbnx8bihudWxsKS5oYXNPd25Qcm9wZXJ0eSl0aHJvdyBuZXcg
RXJyb3IoIlRoaXMgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IE9iamVjdC5jcmVhdGUobnVsbCks
IHBsZWFzZSBwb2x5ZmlsIHdpdGggZXM1LXNoYW06IGh0dHA6Ly9naXQuaW8veUJVMnJnIikKLWUu
ZGVmYXVsdD1ufSksZGVmaW5lKCJlbWJlci1yZXNvbHZlci91dGlscy9tYWtlLWRpY3Rpb25hcnki
LFsiZXhwb3J0cyIsImVtYmVyLXJlc29sdmVyL3V0aWxzL2NyZWF0ZSJdLGZ1bmN0aW9uKGUsdCl7
ZnVuY3Rpb24gbigpe3ZhciBlPSgwLHQuZGVmYXVsdCkobnVsbCkKLXJldHVybiBlLl9kaWN0PW51
bGwsZGVsZXRlIGUuX2RpY3QsZX1lLmRlZmF1bHQ9bn0pLGRlZmluZSgiZW1iZXItcmVzb2x2ZXIv
dXRpbHMvbW9kdWxlLXJlZ2lzdHJ5IixbImV4cG9ydHMiLCJlbWJlciJdLGZ1bmN0aW9uKGUsdCl7
ZnVuY3Rpb24gbihlKXt0aGlzLl9lbnRyaWVzPWV8fHJlcXVpcmVqcy5lbnRyaWVzfXZvaWQgMD09
PXJlcXVpcmVqcy5lbnRyaWVzJiYocmVxdWlyZWpzLmVudHJpZXM9cmVxdWlyZWpzLl9lYWtfc2Vl
biksbi5wcm90b3R5cGUubW9kdWxlTmFtZXM9ZnVuY3Rpb24oKXtyZXR1cm4oT2JqZWN0LmtleXN8
fHQuZGVmYXVsdC5rZXlzKSh0aGlzLl9lbnRyaWVzKX0sbi5wcm90b3R5cGUuaGFzPWZ1bmN0aW9u
KGUpe3JldHVybiBlIGluIHRoaXMuX2VudHJpZXN9LG4ucHJvdG90eXBlLmdldD1mdW5jdGlvbihl
KXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPD0xfHx2b2lkIDA9PT1hcmd1bWVudHNbMV0/ImRlZmF1
bHQiOmFyZ3VtZW50c1sxXSxuPXJlcXVpcmUoZSkKLXJldHVybiBuJiZuW3RdfSxlLmRlZmF1bHQ9
bn0pCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90
b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL3NvdXJjZS9kaXN0L2Nyb3NzZG9t
YWluLnhtbCBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMv
YXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvc291cmNlL2Rpc3QvY3Jvc3Nkb21haW4ueG1s
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYzE2YTdhMDdiMzdlNWQ1ZjdlMGU1NmM4
MjlmNzIwMDY3NDU4NDAzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJj
aGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvc291cmNlL2Rpc3QvY3Jvc3Nkb21haW4ueG1sCisr
KyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci08IURP
Q1RZUEUgY3Jvc3MtZG9tYWluLXBvbGljeSBTWVNURU0gImh0dHA6Ly93d3cuYWRvYmUuY29tL3ht
bC9kdGRzL2Nyb3NzLWRvbWFpbi1wb2xpY3kuZHRkIj4KLTxjcm9zcy1kb21haW4tcG9saWN5Pgot
ICA8IS0tIFJlYWQgdGhpczogd3d3LmFkb2JlLmNvbS9kZXZuZXQvYXJ0aWNsZXMvY3Jvc3Nkb21h
aW5fcG9saWN5X2ZpbGVfc3BlYy5odG1sIC0tPgotCi0gIDwhLS0gTW9zdCByZXN0cmljdGl2ZSBw
b2xpY3k6IC0tPgotICA8c2l0ZS1jb250cm9sIHBlcm1pdHRlZC1jcm9zcy1kb21haW4tcG9saWNp
ZXM9Im5vbmUiLz4KLQotICA8IS0tIExlYXN0IHJlc3RyaWN0aXZlIHBvbGljeTogLS0+Ci0gIDwh
LS0KLSAgPHNpdGUtY29udHJvbCBwZXJtaXR0ZWQtY3Jvc3MtZG9tYWluLXBvbGljaWVzPSJhbGwi
Lz4KLSAgPGFsbG93LWFjY2Vzcy1mcm9tIGRvbWFpbj0iKiIgdG8tcG9ydHM9IioiIHNlY3VyZT0i
ZmFsc2UiLz4KLSAgPGFsbG93LWh0dHAtcmVxdWVzdC1oZWFkZXJzLWZyb20gZG9tYWluPSIqIiBo
ZWFkZXJzPSIqIiBzZWN1cmU9ImZhbHNlIi8+Ci0gIC0tPgotPC9jcm9zcy1kb21haW4tcG9saWN5
PgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9k
b212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy9zb3VyY2UvZGlzdC9pbmRleC5odG1s
IGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRl
Y3R1cmUtZXhhbXBsZXMvZW1iZXJqcy9zb3VyY2UvZGlzdC9pbmRleC5odG1sCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBlOGQ1OWMxZmZiMzFhYTdjNzhkOWFkYTdhN2QwZDFkNDYyNGVm
NWZlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZv
cm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4
YW1wbGVzL2VtYmVyanMvc291cmNlL2Rpc3QvaW5kZXguaHRtbAorKysgL2Rldi9udWxsCkBAIC0x
LDIxICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci0gIDxoZWFkPgotICAgIDxtZXRh
IGNoYXJzZXQ9InV0Zi04Ij4KLSAgICA8bWV0YSBodHRwLWVxdWl2PSJYLVVBLUNvbXBhdGlibGUi
IGNvbnRlbnQ9IklFPWVkZ2UiPgotICAgIDx0aXRsZT5FbWJlci5qcyBUb2RvTVZDIGV4YW1wbGU8
L3RpdGxlPgotICAgIDxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSIiPgotICAgIDxt
ZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwt
c2NhbGU9MSI+Ci0gICAgCi08bWV0YSBuYW1lPSJ0b2RvbXZjL2NvbmZpZy9lbnZpcm9ubWVudCIg
Y29udGVudD0iJTdCJTIybW9kdWxlUHJlZml4JTIyJTNBJTIydG9kb212YyUyMiUyQyUyMmVudmly
b25tZW50JTIyJTNBJTIycHJvZHVjdGlvbiUyMiUyQyUyMmJhc2VVUkwlMjIlM0FudWxsJTJDJTIy
bG9jYXRpb25UeXBlJTIyJTNBJTIyaGFzaCUyMiUyQyUyMkVtYmVyRU5WJTIyJTNBJTdCJTIyRkVB
VFVSRVMlMjIlM0ElN0IlN0QlMkMlMjJFWFRFTkRfUFJPVE9UWVBFUyUyMiUzQSU3QiUyMkRhdGUl
MjIlM0FmYWxzZSU3RCU3RCUyQyUyMkFQUCUyMiUzQSU3QiUyMm5hbWUlMjIlM0ElMjJ0b2RvbXZj
JTIyJTJDJTIydmVyc2lvbiUyMiUzQSUyMjAuMC4wKzE2NGQyN2UyJTIyJTdEJTJDJTIyZXhwb3J0
QXBwbGljYXRpb25HbG9iYWwlMjIlM0FmYWxzZSU3RCIgLz4KLSAgICA8bGluayByZWw9InN0eWxl
c2hlZXQiIGhyZWY9ImFzc2V0cy92ZW5kb3ItN2I1Yzk4NTIwOTEwYWZhNThkNzRlMDVlYzg2Y2Q4
NzMuY3NzIiBpbnRlZ3JpdHk9InNoYTI1Ni1ic2FnR0hkdWhheTlRUExVRnBkZGNaRnE3S21yMlNj
TTNWS25XaGRYOG9NPSBzaGE1MTItZU5zR04yYUxlY1dQdm9xTlZIOG9YSzhvL0lKN3JPNXRpMHpn
UzhsRjhMaXdtS1VIZEVJdUZkdXdjREwxVkxBdDJyKzNZamdEem9TTllLNmM1N3BKenc9PSIgPgot
ICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iYXNzZXRzL3RvZG9tdmMtZDQxZDhjZDk4
ZjAwYjIwNGU5ODAwOTk4ZWNmODQyN2UuY3NzIiBpbnRlZ3JpdHk9InNoYTI1Ni00N0RFUXBqOEhC
U2ErL1RJbVcrNUpDZXVRZVJrbTVOTXBKV1pHM2hTdUZVPSBzaGE1MTItejRQaE5YN3Z1TDN4VkNo
UTFtMkFCOVlnNUFVTFZ4WGNnL1NwSWROczZjNUgwTkU4WFlYeXNQK0RHTktIZnV3dlk3a3h2VWRC
ZW9HbE9ESjYrU2ZhUGc9PSIgPgotICAgIAotICA8L2hlYWQ+Ci0gIDxib2R5PgotICAgIAotICAg
IDxzY3JpcHQgc3JjPSJhc3NldHMvdmVuZG9yLTgyMDkxOTU2N2ViN2JkNGQ5ZmFjMzU4YTkwYTVh
YWM0LmpzIiBpbnRlZ3JpdHk9InNoYTI1Ni1CWkhCYmYxVTIxK2tnUFltb0lLN2dMa3FIdTg4djVj
d0VWRmZ3VVBYb2pzPSBzaGE1MTItMllXckFiUjQ1cDhmazMveTRRaGJvay9LVWZMRS92NnlNU1Vx
SVduY1RtV3FmSmJ5SmowK0FpVGtKTDAzazBvUFVNWmJGWXlReDlTdUw2WG9YcDRzZ2c9PSIgPjwv
c2NyaXB0PgotICAgIDxzY3JpcHQgc3JjPSJhc3NldHMvdG9kb212Yy03NjAxZmZjYTYxNTBlZDYz
M2YwZjMzM2ZlNzZiZmFmMi5qcyIgaW50ZWdyaXR5PSJzaGEyNTYtSjlTQlBTVlBpVGxEekJyQWV2
RXFSdk56M0UrK3U3ak5Fclo3OUVEZ1IzZz0gc2hhNTEyLThRdG5vV202YVhkS1dPSXNudXFRd2FV
NTc1VGtPbWFnVUpTNjZiSXFxWnp3TThhVWR1TTZESGxyYlRzb3BaOU01b2s5TkxxaEtzYWZFWEhX
UVAwY1hnPT0iID48L3NjcmlwdD4KLSAgICAKLSAgPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0
IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRl
Y3R1cmUtZXhhbXBsZXMvZW1iZXJqcy9zb3VyY2UvZGlzdC9yb2JvdHMudHh0IGIvUGVyZm9ybWFu
Y2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBs
ZXMvZW1iZXJqcy9zb3VyY2UvZGlzdC9yb2JvdHMudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBmNTkxNjQ1MmU1ZmY2YzhiNDNkNmQ3YzczZDAwMTUzZDM0YWMzNWRlLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVzdHMv
U3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVy
anMvc291cmNlL2Rpc3Qvcm9ib3RzLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAot
IyBodHRwOi8vd3d3LnJvYm90c3R4dC5vcmcKLVVzZXItYWdlbnQ6ICoKLURpc2FsbG93OgpkaWZm
IC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9h
cmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy9zb3VyY2UvZW1iZXItY2xpLWJ1aWxkLmpzIGIv
UGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1
cmUtZXhhbXBsZXMvZW1iZXJqcy9zb3VyY2UvZW1iZXItY2xpLWJ1aWxkLmpzCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBiMWRiZjU5MThjYjgxMDk4YzgzMGJmMzg1YjFiYzVkOTQ0Y2Uw
OTVjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZv
cm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4
YW1wbGVzL2VtYmVyanMvc291cmNlL2VtYmVyLWNsaS1idWlsZC5qcworKysgL2Rldi9udWxsCkBA
IC0xLDI2ICswLDAgQEAKLS8qanNoaW50IG5vZGU6dHJ1ZSovCi0vKiBnbG9iYWwgcmVxdWlyZSwg
bW9kdWxlICovCi12YXIgRW1iZXJBcHAgPSByZXF1aXJlKCdlbWJlci1jbGkvbGliL2Jyb2Njb2xp
L2VtYmVyLWFwcCcpOwotCi1tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChkZWZhdWx0cykgewot
ICAgIHZhciBhcHAgPSBuZXcgRW1iZXJBcHAoZGVmYXVsdHMsIHsKLSAgICAgICAgLy8gQWRkIG9w
dGlvbnMgaGVyZQotICAgIH0pOwotCi0gICAgYXBwLmltcG9ydCgndmVuZG9yL2Jhc2UuY3NzJyk7
Ci0gICAgYXBwLmltcG9ydCgndmVuZG9yL2luZGV4LmNzcycpOwotICAgIC8vIFVzZSBgYXBwLmlt
cG9ydGAgdG8gYWRkIGFkZGl0aW9uYWwgbGlicmFyaWVzIHRvIHRoZSBnZW5lcmF0ZWQKLSAgICAv
LyBvdXRwdXQgZmlsZXMuCi0gICAgLy8KLSAgICAvLyBJZiB5b3UgbmVlZCB0byB1c2UgZGlmZmVy
ZW50IGFzc2V0cyBpbiBkaWZmZXJlbnQKLSAgICAvLyBlbnZpcm9ubWVudHMsIHNwZWNpZnkgYW4g
b2JqZWN0IGFzIHRoZSBmaXJzdCBwYXJhbWV0ZXIuIFRoYXQKLSAgICAvLyBvYmplY3QncyBrZXlz
IHNob3VsZCBiZSB0aGUgZW52aXJvbm1lbnQgbmFtZSBhbmQgdGhlIHZhbHVlcwotICAgIC8vIHNo
b3VsZCBiZSB0aGUgYXNzZXQgdG8gdXNlIGluIHRoYXQgZW52aXJvbm1lbnQuCi0gICAgLy8KLSAg
ICAvLyBJZiB0aGUgbGlicmFyeSB0aGF0IHlvdSBhcmUgaW5jbHVkaW5nIGNvbnRhaW5zIEFNRCBv
ciBFUzYKLSAgICAvLyBtb2R1bGVzIHRoYXQgeW91IHdvdWxkIGxpa2UgdG8gaW1wb3J0IGludG8g
eW91ciBhcHBsaWNhdGlvbgotICAgIC8vIHBsZWFzZSBzcGVjaWZ5IGFuIG9iamVjdCB3aXRoIHRo
ZSBsaXN0IG9mIG1vZHVsZXMgYXMga2V5cwotICAgIC8vIGFsb25nIHdpdGggdGhlIGV4cG9ydHMg
b2YgZWFjaCBtb2R1bGUgYXMgaXRzIHZhbHVlLgotCi0gICAgcmV0dXJuIGFwcC50b1RyZWUoKTsK
LX07CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90
b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL3NvdXJjZS9wYWNrYWdlLWxvY2su
anNvbiBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJj
aGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvc291cmNlL3BhY2thZ2UtbG9jay5qc29uCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMzA2Y2I0MTAwZGFlY2QxMWEyNDFkMmNiN2YxNzM3
ZTM2ODgyNzRjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0
dXJlLWV4YW1wbGVzL2VtYmVyanMvc291cmNlL3BhY2thZ2UtbG9jay5qc29uCisrKyAvZGV2L251
bGwKQEAgLTEsNzYwOSArMCwwIEBACi17Ci0gICJuYW1lIjogInRvZG9tdmMiLAotICAidmVyc2lv
biI6ICIwLjAuMCIsCi0gICJsb2NrZmlsZVZlcnNpb24iOiAxLAotICAicmVxdWlyZXMiOiB0cnVl
LAotICAiZGVwZW5kZW5jaWVzIjogewotICAgICJhYmJyZXYiOiB7Ci0gICAgICAidmVyc2lvbiI6
ICIxLjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcv
YWJicmV2Ly0vYWJicmV2LTEuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtMEZW
TUlsWmpiaTlXNThMbHJSZy9oWlFvMkI4PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0g
ICAgImFjY2VwdHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjMuMyIsCi0gICAgICAicmVzb2x2
ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYWNjZXB0cy8tL2FjY2VwdHMtMS4zLjMu
dGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS13OHAwTkpPR1NNUGcyY0hqS04xb3RpTENo
TW89IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAi
bWltZS10eXBlcyI6ICIyLjEuMTYiLAotICAgICAgICAibmVnb3RpYXRvciI6ICIwLjYuMSIKLSAg
ICAgIH0KLSAgICB9LAotICAgICJhY29ybiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMC4xMyIs
Ci0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYWNvcm4vLS9h
Y29ybi00LjAuMTMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1FRlNWcmxOaDFwZTlH
VnlDVVpMaHJYOGxONGM9IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAiYWZ0ZXIi
OiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjguMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6
Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYWZ0ZXIvLS9hZnRlci0wLjguMS50Z3oiLAotICAgICAgImlu
dGVncml0eSI6ICJzaGExLXExMVB1SVAxbG9GdE5SWDQ5NUhBcjBodDFpYz0iLAotICAgICAgImRl
diI6IHRydWUKLSAgICB9LAotICAgICJhbGlnbi10ZXh0IjogewotICAgICAgInZlcnNpb24iOiAi
MC4xLjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Fs
aWduLXRleHQvLS9hbGlnbi10ZXh0LTAuMS40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNo
YTEtRE5rS1ZoQ1Q4MTBLbVNWc0lyY0dsRFA2MFJjPSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAg
ICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImtpbmQtb2YiOiAiMy4yLjIiLAotICAgICAgICAi
bG9uZ2VzdCI6ICIxLjAuMSIsCi0gICAgICAgICJyZXBlYXQtc3RyaW5nIjogIjEuNi4xIgotICAg
ICAgfQotICAgIH0sCi0gICAgImFsdGVyIjogewotICAgICAgInZlcnNpb24iOiAiMC4yLjAiLAot
ICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2FsdGVyLy0vYWx0
ZXItMC4yLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS14MWlJQ0dGMWNnTktybUpJ
Q3ZKckhVMGNzODA9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewot
ICAgICAgICAic3RhYmxlIjogIjAuMS42IgotICAgICAgfQotICAgIH0sCi0gICAgImFtZC1uYW1l
LXJlc29sdmVyIjogewotICAgICAgInZlcnNpb24iOiAiMC4wLjYiLAotICAgICAgInJlc29sdmVk
IjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2FtZC1uYW1lLXJlc29sdmVyLy0vYW1kLW5h
bWUtcmVzb2x2ZXItMC4wLjYudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS0wK1M2TGZ5
cXNkZ2d3YjZkNlVmR2VDalA1WlU9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVp
cmVzIjogewotICAgICAgICAiZW5zdXJlLXBvc2l4LXBhdGgiOiAiMS4wLjIiCi0gICAgICB9Ci0g
ICAgfSwKLSAgICAiYW1kZWZpbmUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMSIsCi0gICAg
ICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYW1kZWZpbmUvLS9hbWRl
ZmluZS0xLjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLVNsS0NyQlpIS2VrMkdi
ejlPdEZSK0JmT2tmVT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJhbnNpLWVz
Y2FwZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjQuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAi
aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYW5zaS1lc2NhcGVzLy0vYW5zaS1lc2NhcGVzLTEu
NC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtMDZpb096R2FwbmVUWmlzVDUySEhr
UlFpTUc0PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgImFuc2ktcmVnZXgiOiB7
Ci0gICAgICAidmVyc2lvbiI6ICIyLjEuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9y
ZWdpc3RyeS5ucG1qcy5vcmcvYW5zaS1yZWdleC8tL2Fuc2ktcmVnZXgtMi4xLjEudGd6IiwKLSAg
ICAgICJpbnRlZ3JpdHkiOiAic2hhMS13N002dGU0MkRZYmc1aWp3Um9ybjd5ZldWTjg9IiwKLSAg
ICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAiYW5zaS1zdHlsZXMiOiB7Ci0gICAgICAidmVy
c2lvbiI6ICIyLjIuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1q
cy5vcmcvYW5zaS1zdHlsZXMvLS9hbnNpLXN0eWxlcy0yLjIuMS50Z3oiLAotICAgICAgImludGVn
cml0eSI6ICJzaGExLXRETGRNMWkyTk05MTRlUm1RMmdrQlRQQjNiND0iLAotICAgICAgImRldiI6
IHRydWUKLSAgICB9LAotICAgICJhbnNpY29sb3JzIjogewotICAgICAgInZlcnNpb24iOiAiMC4y
LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Fuc2lj
b2xvcnMvLS9hbnNpY29sb3JzLTAuMi4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEt
dmdpVm1RbDdkS1hKeEtoS0ROdk50aXZZZXU4PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0s
Ci0gICAgImFueW1hdGNoIjogewotICAgICAgInZlcnNpb24iOiAiMS4zLjIiLAotICAgICAgInJl
c29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2FueW1hdGNoLy0vYW55bWF0Y2gt
MS4zLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTBYTmF5QzhsVEhRMk9JOGFs
ak5DTjNzU3g2aHNyLzErcmxjREFvdFhKUjdDMW9aWkhDTnNmcGJLd01qUkEzVXFiNXRGMVJhZTJv
bG9UcjR4cHErV2pBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7
Ci0gICAgICAgICJtaWNyb21hdGNoIjogIjIuMy4xMSIsCi0gICAgICAgICJub3JtYWxpemUtcGF0
aCI6ICIyLjEuMSIKLSAgICAgIH0KLSAgICB9LAotICAgICJhcHJvYmEiOiB7Ci0gICAgICAidmVy
c2lvbiI6ICIxLjEuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1q
cy5vcmcvYXByb2JhLy0vYXByb2JhLTEuMS4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNo
YTUxMi1acFlhaklmTzBqMmNPRlRPOTU1S1VNSUtObWo2emhYOGtWenRNQXhGc0RhTXd6KzlaOVNW
MHVvdTJwQzlISnFjZnBmZk9zam5ickRNdmtOeSs5UlhQdz09IiwKLSAgICAgICJkZXYiOiB0cnVl
Ci0gICAgfSwKLSAgICAiYXJlLXdlLXRoZXJlLXlldCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEu
MS40IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hcmUt
d2UtdGhlcmUteWV0Ly0vYXJlLXdlLXRoZXJlLXlldC0xLjEuNC50Z3oiLAotICAgICAgImludGVn
cml0eSI6ICJzaGExLXUxM0tPQ3U1VHdYaFVaUTNQUmI5TzZIS0VRMD0iLAotICAgICAgImRldiI6
IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJkZWxlZ2F0ZXMiOiAiMS4wLjAi
LAotICAgICAgICAicmVhZGFibGUtc3RyZWFtIjogIjIuMy4zIgotICAgICAgfSwKLSAgICAgICJk
ZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJyZWFkYWJsZS1zdHJlYW0iOiB7Ci0gICAgICAgICAg
InZlcnNpb24iOiAiMi4zLjMiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lz
dHJ5Lm5wbWpzLm9yZy9yZWFkYWJsZS1zdHJlYW0vLS9yZWFkYWJsZS1zdHJlYW0tMi4zLjMudGd6
IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1tK3F6emNuN0tVeEVtZDFnTWJjaEYr
WTJlSVViaWVVYXhrV3RwdHlIeXdyWDByRThRRVlxUEMwN1Z1eTRXbTMyL3hFMTZOY2RCY3RiOFMw
WGUvNUllUT09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMi
OiB7Ci0gICAgICAgICAgICAiY29yZS11dGlsLWlzIjogIjEuMC4yIiwKLSAgICAgICAgICAgICJp
bmhlcml0cyI6ICIyLjAuMyIsCi0gICAgICAgICAgICAiaXNhcnJheSI6ICIxLjAuMCIsCi0gICAg
ICAgICAgICAicHJvY2Vzcy1uZXh0aWNrLWFyZ3MiOiAiMS4wLjciLAotICAgICAgICAgICAgInNh
ZmUtYnVmZmVyIjogIjUuMS4xIiwKLSAgICAgICAgICAgICJzdHJpbmdfZGVjb2RlciI6ICIxLjAu
MyIsCi0gICAgICAgICAgICAidXRpbC1kZXByZWNhdGUiOiAiMS4wLjIiCi0gICAgICAgICAgfQot
ICAgICAgICB9LAotICAgICAgICAic3RyaW5nX2RlY29kZXIiOiB7Ci0gICAgICAgICAgInZlcnNp
b24iOiAiMS4wLjMiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5w
bWpzLm9yZy9zdHJpbmdfZGVjb2Rlci8tL3N0cmluZ19kZWNvZGVyLTEuMC4zLnRneiIsCi0gICAg
ICAgICAgImludGVncml0eSI6ICJzaGE1MTItNEFINlo1ZnpOTkJjSCs2WERNZkEvQlR0ODdza3hx
SmxPMGxBaDNEa2VyNXpUaGNBeEc2bUt6K2lHdTMwOFVLb1BQUThEY3F4LzRKaHVqemx0UmEraFE9
PSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAg
ICAgICAgICAgInNhZmUtYnVmZmVyIjogIjUuMS4xIgotICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgfQotICAgIH0sCi0gICAgImFyZ3BhcnNlIjogewotICAgICAgInZlcnNpb24iOiAiMS4w
LjkiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2FyZ3Bh
cnNlLy0vYXJncGFyc2UtMS4wLjkudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1jOWc3
d21QNGJwZjR6RTlycmhzT2tLZlNMSVk9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJl
cXVpcmVzIjogewotICAgICAgICAic3ByaW50Zi1qcyI6ICIxLjAuMyIKLSAgICAgIH0sCi0gICAg
ICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAic3ByaW50Zi1qcyI6IHsKLSAgICAgICAgICAi
dmVyc2lvbiI6ICIxLjAuMyIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0
cnkubnBtanMub3JnL3NwcmludGYtanMvLS9zcHJpbnRmLWpzLTEuMC4zLnRneiIsCi0gICAgICAg
ICAgImludGVncml0eSI6ICJzaGExLUJPYVNiMllvbFRWUFBkQVZJRFl6dUZjcGZpdz0iLAotICAg
ICAgICAgICJkZXYiOiB0cnVlCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJhcnIt
ZGlmZiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJo
dHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hcnItZGlmZi8tL2Fyci1kaWZmLTIuMC4wLnRneiIs
Ci0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtanp1Q2Y1VmFpOVpwYVg1S1FsYXNQT3JqVnM4PSIs
Ci0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImFyci1m
bGF0dGVuIjogIjEuMS4wIgotICAgICAgfQotICAgIH0sCi0gICAgImFyci1mbGF0dGVuIjogewot
ICAgICAgInZlcnNpb24iOiAiMS4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVn
aXN0cnkubnBtanMub3JnL2Fyci1mbGF0dGVuLy0vYXJyLWZsYXR0ZW4tMS4xLjAudGd6IiwKLSAg
ICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUwzaEtWNVIvcDVvODFSN08wMklHbndwRG1rcDZFOTgy
WGh0YnV3U2UzTzRxT3RNTU10b2RpY0FTQTFDbnkyVSthQ1hjTnBtbCttNGRQc3ZzSjNqYXRnPT0i
LAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJhcnJheS1lcXVhbCI6IHsKLSAgICAg
ICJ2ZXJzaW9uIjogIjEuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5
Lm5wbWpzLm9yZy9hcnJheS1lcXVhbC8tL2FycmF5LWVxdWFsLTEuMC4wLnRneiIsCi0gICAgICAi
aW50ZWdyaXR5IjogInNoYTEtakNwZThrY3YyZXAwS3dUSGVuVUpPNkoxZkpNPSIsCi0gICAgICAi
ZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgImFycmF5LWZsYXR0ZW4iOiB7Ci0gICAgICAidmVyc2lv
biI6ICIxLjEuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5v
cmcvYXJyYXktZmxhdHRlbi8tL2FycmF5LWZsYXR0ZW4tMS4xLjEudGd6IiwKLSAgICAgICJpbnRl
Z3JpdHkiOiAic2hhMS1tbDlwa0ZHeDV3Y3pLUEtnQ0phTFpPb3BWZEk9IiwKLSAgICAgICJkZXYi
OiB0cnVlCi0gICAgfSwKLSAgICAiYXJyYXktdG8tZXJyb3IiOiB7Ci0gICAgICAidmVyc2lvbiI6
ICIxLjEuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcv
YXJyYXktdG8tZXJyb3IvLS9hcnJheS10by1lcnJvci0xLjEuMS50Z3oiLAotICAgICAgImludGVn
cml0eSI6ICJzaGExLTFvZ1NrbTBVQ1hvZ1ZYbW1aKzZ2R0Zha1RBYz0iLAotICAgICAgImRldiI6
IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJhcnJheS10by1zZW50ZW5jZSI6
ICIxLjEuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJhcnJheS10by1zZW50ZW5jZSI6IHsKLSAg
ICAgICJ2ZXJzaW9uIjogIjEuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lz
dHJ5Lm5wbWpzLm9yZy9hcnJheS10by1zZW50ZW5jZS8tL2FycmF5LXRvLXNlbnRlbmNlLTEuMS4w
LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEteUFTVmJhK2xNakpKV3lCYWxGSjFPaVdO
T2Z3PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgImFycmF5LXVuaXF1ZSI6IHsK
LSAgICAgICJ2ZXJzaW9uIjogIjAuMi4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3Jl
Z2lzdHJ5Lm5wbWpzLm9yZy9hcnJheS11bmlxdWUvLS9hcnJheS11bmlxdWUtMC4yLjEudGd6IiwK
LSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1vZGw4eXZ5OEppWE1jUHJjNnphbERGaXdHbE09IiwK
LSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAiYXJyYXlidWZmZXIuc2xpY2UiOiB7Ci0g
ICAgICAidmVyc2lvbiI6ICIwLjAuNiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdp
c3RyeS5ucG1qcy5vcmcvYXJyYXlidWZmZXIuc2xpY2UvLS9hcnJheWJ1ZmZlci5zbGljZS0wLjAu
Ni50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLTh6c2hXZkJUS2o4eEI2Snl3TXo3MGEw
cGVjbz0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJhc3QtdHJhdmVyc2UiOiB7
Ci0gICAgICAidmVyc2lvbiI6ICIwLjEuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9y
ZWdpc3RyeS5ucG1qcy5vcmcvYXN0LXRyYXZlcnNlLy0vYXN0LXRyYXZlcnNlLTAuMS4xLnRneiIs
Ci0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtYWM4cmc0YnhuYzJodXg0RjFvL2pXZGlKZmVZPSIs
Ci0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgImFzdC10eXBlcyI6IHsKLSAgICAgICJ2
ZXJzaW9uIjogIjAuOS42IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5w
bWpzLm9yZy9hc3QtdHlwZXMvLS9hc3QtdHlwZXMtMC45LjYudGd6IiwKLSAgICAgICJpbnRlZ3Jp
dHkiOiAic2hhMS1FQ3llbnBBRjArZmpncHZ3eFBvazdvWXU2Yms9IiwKLSAgICAgICJkZXYiOiB0
cnVlCi0gICAgfSwKLSAgICAiYXN5bmMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjUuMCIsCi0g
ICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYXN5bmMvLS9hc3lu
Yy0yLjUuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZStsSkFKZU5XdVBDTnl4
WktPQmRhSkd5TEdIdWdYVlF0ckF3dHVBZTJ2aHhUWXhGVEtFNzNwOEp1VG1kSDBxZFFadER2STRk
aEp3alpjNXpzZklzWXc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6
IHsKLSAgICAgICAgImxvZGFzaCI6ICI0LjE3LjQiCi0gICAgICB9LAotICAgICAgImRlcGVuZGVu
Y2llcyI6IHsKLSAgICAgICAgImxvZGFzaCI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICI0LjE3
LjQiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9s
b2Rhc2gvLS9sb2Rhc2gtNC4xNy40LnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGEx
LWVDQTZUUnd5aXVIWWJjcGtZT05wdFg5QVZhND0iLAotICAgICAgICAgICJkZXYiOiB0cnVlCi0g
ICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJhc3luYy1kaXNrLWNhY2hlIjogewotICAg
ICAgInZlcnNpb24iOiAiMS4zLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0
cnkubnBtanMub3JnL2FzeW5jLWRpc2stY2FjaGUvLS9hc3luYy1kaXNrLWNhY2hlLTEuMy4yLnRn
eiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtckZQV0ZTaEQzeUFzbEFiaWpYZERZbUNOZE4w
PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImRl
YnVnIjogIjIuNi44IiwKLSAgICAgICAgImhlaW1kYWxsanMiOiAiMC4yLjUiLAotICAgICAgICAi
aXN0ZXh0b3JiaW5hcnkiOiAiMi4xLjAiLAotICAgICAgICAibWtkaXJwIjogIjAuNS4xIiwKLSAg
ICAgICAgInJpbXJhZiI6ICIyLjYuMSIsCi0gICAgICAgICJyc3ZwIjogIjMuNi4yIiwKLSAgICAg
ICAgInVzZXJuYW1lLXN5bmMiOiAiMS4wLjEiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiYXN5bmMt
ZWFjaCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJo
dHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hc3luYy1lYWNoLy0vYXN5bmMtZWFjaC0xLjAuMS50
Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLUdkT0dvZG50eHVmQnlGMDRpdTI4eFcwellD
MD0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJhc3luYy1wcm9taXNlLXF1ZXVl
IjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBz
Oi8vcmVnaXN0cnkubnBtanMub3JnL2FzeW5jLXByb21pc2UtcXVldWUvLS9hc3luYy1wcm9taXNl
LXF1ZXVlLTEuMC40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1HUTVYM0RUK1Rl
Zll1RlBIZHZJUFhGVGxLbmgzOVU3ZHd0bCthVUJHZUtqTWVhOW5CcHYzYzkxRFhnZXlCUW1ZMDd2
UTk3ZjNTcjlYSHFrYW1FYW1lUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVp
cmVzIjogewotICAgICAgICAiYXN5bmMiOiAiMi41LjAiLAotICAgICAgICAiZGVidWciOiAiMi42
LjgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiYmFiZWwtY29kZS1mcmFtZSI6IHsKLSAgICAgICJ2
ZXJzaW9uIjogIjYuMjIuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5u
cG1qcy5vcmcvYmFiZWwtY29kZS1mcmFtZS8tL2JhYmVsLWNvZGUtZnJhbWUtNi4yMi4wLnRneiIs
Ci0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtQW5ZZ3Z1Vm5xSXd5VmhWMDUvMElBZE14R09RPSIs
Ci0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImNoYWxr
IjogIjEuMS4zIiwKLSAgICAgICAgImVzdXRpbHMiOiAiMi4wLjIiLAotICAgICAgICAianMtdG9r
ZW5zIjogIjMuMC4yIgotICAgICAgfSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAg
ICJqcy10b2tlbnMiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMy4wLjIiLAotICAgICAgICAg
ICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qcy10b2tlbnMvLS9qcy10
b2tlbnMtMy4wLjIudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTEtbUdiZk9WRUNF
dzQ0OS9tV3ZPdGxSRElKd2xzPSIsCi0gICAgICAgICAgImRldiI6IHRydWUKLSAgICAgICAgfQot
ICAgICAgfQotICAgIH0sCi0gICAgImJhYmVsLWNvcmUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1
LjguMzgiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Jh
YmVsLWNvcmUvLS9iYWJlbC1jb3JlLTUuOC4zOC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJz
aGExLUg4cnVlZGZtRzNVTEFMamxUMjM4blFyNFpWZz0iLAotICAgICAgImRldiI6IHRydWUsCi0g
ICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJiYWJlbC1wbHVnaW4tY29uc3RhbnQtZm9sZGlu
ZyI6ICIxLjAuMSIsCi0gICAgICAgICJiYWJlbC1wbHVnaW4tZGVhZC1jb2RlLWVsaW1pbmF0aW9u
IjogIjEuMC4yIiwKLSAgICAgICAgImJhYmVsLXBsdWdpbi1ldmFsIjogIjEuMC4xIiwKLSAgICAg
ICAgImJhYmVsLXBsdWdpbi1pbmxpbmUtZW52aXJvbm1lbnQtdmFyaWFibGVzIjogIjEuMC4xIiwK
LSAgICAgICAgImJhYmVsLXBsdWdpbi1qc2NyaXB0IjogIjEuMC40IiwKLSAgICAgICAgImJhYmVs
LXBsdWdpbi1tZW1iZXItZXhwcmVzc2lvbi1saXRlcmFscyI6ICIxLjAuMSIsCi0gICAgICAgICJi
YWJlbC1wbHVnaW4tcHJvcGVydHktbGl0ZXJhbHMiOiAiMS4wLjEiLAotICAgICAgICAiYmFiZWwt
cGx1Z2luLXByb3RvLXRvLWFzc2lnbiI6ICIxLjAuNCIsCi0gICAgICAgICJiYWJlbC1wbHVnaW4t
cmVhY3QtY29uc3RhbnQtZWxlbWVudHMiOiAiMS4wLjMiLAotICAgICAgICAiYmFiZWwtcGx1Z2lu
LXJlYWN0LWRpc3BsYXktbmFtZSI6ICIxLjAuMyIsCi0gICAgICAgICJiYWJlbC1wbHVnaW4tcmVt
b3ZlLWNvbnNvbGUiOiAiMS4wLjEiLAotICAgICAgICAiYmFiZWwtcGx1Z2luLXJlbW92ZS1kZWJ1
Z2dlciI6ICIxLjAuMSIsCi0gICAgICAgICJiYWJlbC1wbHVnaW4tcnVudGltZSI6ICIxLjAuNyIs
Ci0gICAgICAgICJiYWJlbC1wbHVnaW4tdW5kZWNsYXJlZC12YXJpYWJsZXMtY2hlY2siOiAiMS4w
LjIiLAotICAgICAgICAiYmFiZWwtcGx1Z2luLXVuZGVmaW5lZC10by12b2lkIjogIjEuMS42IiwK
LSAgICAgICAgImJhYnlsb24iOiAiNS44LjM4IiwKLSAgICAgICAgImJsdWViaXJkIjogIjIuMTEu
MCIsCi0gICAgICAgICJjaGFsayI6ICIxLjEuMyIsCi0gICAgICAgICJjb252ZXJ0LXNvdXJjZS1t
YXAiOiAiMS41LjAiLAotICAgICAgICAiY29yZS1qcyI6ICIxLjIuNyIsCi0gICAgICAgICJkZWJ1
ZyI6ICIyLjYuOCIsCi0gICAgICAgICJkZXRlY3QtaW5kZW50IjogIjMuMC4xIiwKLSAgICAgICAg
ImVzdXRpbHMiOiAiMi4wLjIiLAotICAgICAgICAiZnMtcmVhZGRpci1yZWN1cnNpdmUiOiAiMC4x
LjIiLAotICAgICAgICAiZ2xvYmFscyI6ICI2LjQuMSIsCi0gICAgICAgICJob21lLW9yLXRtcCI6
ICIxLjAuMCIsCi0gICAgICAgICJpcy1pbnRlZ2VyIjogIjEuMC43IiwKLSAgICAgICAgImpzLXRv
a2VucyI6ICIxLjAuMSIsCi0gICAgICAgICJqc29uNSI6ICIwLjQuMCIsCi0gICAgICAgICJsb2Rh
c2giOiAiMy4xMC4xIiwKLSAgICAgICAgIm1pbmltYXRjaCI6ICIyLjAuMTAiLAotICAgICAgICAi
b3V0cHV0LWZpbGUtc3luYyI6ICIxLjEuMiIsCi0gICAgICAgICJwYXRoLWV4aXN0cyI6ICIxLjAu
MCIsCi0gICAgICAgICJwYXRoLWlzLWFic29sdXRlIjogIjEuMC4xIiwKLSAgICAgICAgInByaXZh
dGUiOiAiMC4xLjciLAotICAgICAgICAicmVnZW5lcmF0b3IiOiAiMC44LjQwIiwKLSAgICAgICAg
InJlZ2V4cHUiOiAiMS4zLjAiLAotICAgICAgICAicmVwZWF0aW5nIjogIjEuMS4zIiwKLSAgICAg
ICAgInJlc29sdmUiOiAiMS40LjAiLAotICAgICAgICAic2hlYmFuZy1yZWdleCI6ICIxLjAuMCIs
Ci0gICAgICAgICJzbGFzaCI6ICIxLjAuMCIsCi0gICAgICAgICJzb3VyY2UtbWFwIjogIjAuNS42
IiwKLSAgICAgICAgInNvdXJjZS1tYXAtc3VwcG9ydCI6ICIwLjIuMTAiLAotICAgICAgICAidG8t
ZmFzdC1wcm9wZXJ0aWVzIjogIjEuMC4zIiwKLSAgICAgICAgInRyaW0tcmlnaHQiOiAiMS4wLjEi
LAotICAgICAgICAidHJ5LXJlc29sdmUiOiAiMS4wLjEiCi0gICAgICB9LAotICAgICAgImRlcGVu
ZGVuY2llcyI6IHsKLSAgICAgICAgIm1pbmltYXRjaCI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6
ICIyLjAuMTAiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpz
Lm9yZy9taW5pbWF0Y2gvLS9taW5pbWF0Y2gtMi4wLjEwLnRneiIsCi0gICAgICAgICAgImludGVn
cml0eSI6ICJzaGExLWpRaDhPY2F6akFBYmwveW56bTBPSG9DdnVzYz0iLAotICAgICAgICAgICJk
ZXYiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJicmFjZS1l
eHBhbnNpb24iOiAiMS4xLjgiCi0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAg
fSwKLSAgICAiYmFiZWwtZ2VuZXJhdG9yIjogewotICAgICAgInZlcnNpb24iOiAiNi4yNS4wIiwK
LSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9iYWJlbC1nZW5l
cmF0b3IvLS9iYWJlbC1nZW5lcmF0b3ItNi4yNS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5Ijog
InNoYTEtTTZHdmNOWHlpUXJyUmxwS2Q1UEIzMnFlcWZ3PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwK
LSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImJhYmVsLW1lc3NhZ2VzIjogIjYuMjMuMCIs
Ci0gICAgICAgICJiYWJlbC1ydW50aW1lIjogIjYuMjUuMCIsCi0gICAgICAgICJiYWJlbC10eXBl
cyI6ICI2LjI1LjAiLAotICAgICAgICAiZGV0ZWN0LWluZGVudCI6ICI0LjAuMCIsCi0gICAgICAg
ICJqc2VzYyI6ICIxLjMuMCIsCi0gICAgICAgICJsb2Rhc2giOiAiNC4xNy40IiwKLSAgICAgICAg
InNvdXJjZS1tYXAiOiAiMC41LjYiLAotICAgICAgICAidHJpbS1yaWdodCI6ICIxLjAuMSIKLSAg
ICAgIH0sCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZGV0ZWN0LWluZGVudCI6
IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICI0LjAuMCIsCi0gICAgICAgICAgInJlc29sdmVkIjog
Imh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RldGVjdC1pbmRlbnQvLS9kZXRlY3QtaW5kZW50
LTQuMC4wLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGExLTkyMEdRMUxOOURvY3Rz
NWhuRTdqcVVkZDRnZz0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJyZXF1
aXJlcyI6IHsKLSAgICAgICAgICAgICJyZXBlYXRpbmciOiAiMi4wLjEiCi0gICAgICAgICAgfQot
ICAgICAgICB9LAotICAgICAgICAianNlc2MiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMS4z
LjAiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9q
c2VzYy8tL2pzZXNjLTEuMy4wLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGExLVJz
UCt5TUdKS3hLd2d6MjV2SFlpRjIyNnMwcz0iLAotICAgICAgICAgICJkZXYiOiB0cnVlCi0gICAg
ICAgIH0sCi0gICAgICAgICJsb2Rhc2giOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiNC4xNy40
IiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbG9k
YXNoLy0vbG9kYXNoLTQuMTcuNC50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1l
Q0E2VFJ3eWl1SFliY3BrWU9OcHRYOUFWYTQ9IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZQotICAg
ICAgICB9LAotICAgICAgICAicmVwZWF0aW5nIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjIu
MC4xIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcv
cmVwZWF0aW5nLy0vcmVwZWF0aW5nLTIuMC4xLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6
ICJzaGExLVVoVEZPcEp0TlZKd2RTZjdxMEZkdkFqUWJkbz0iLAotICAgICAgICAgICJkZXYiOiB0
cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJpcy1maW5pdGUiOiAi
MS4wLjIiCi0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAiYmFi
ZWwtaGVscGVycyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjYuMjQuMSIsCi0gICAgICAicmVzb2x2
ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYmFiZWwtaGVscGVycy8tL2JhYmVsLWhl
bHBlcnMtNi4yNC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtTkhIZW5LN0RpT1hJ
VU9XWDVZb20zZk4yQXJJPSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6
IHsKLSAgICAgICAgImJhYmVsLXJ1bnRpbWUiOiAiNi4yNS4wIiwKLSAgICAgICAgImJhYmVsLXRl
bXBsYXRlIjogIjYuMjUuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJiYWJlbC1tZXNzYWdlcyI6
IHsKLSAgICAgICJ2ZXJzaW9uIjogIjYuMjMuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6
Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYmFiZWwtbWVzc2FnZXMvLS9iYWJlbC1tZXNzYWdlcy02LjIz
LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS04ODMwY0RoWUExc3FLVkhHN0Y3ZmJH
THlZdzQ9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAg
ICAiYmFiZWwtcnVudGltZSI6ICI2LjI1LjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiYmFiZWwt
cGx1Z2luLWNvbnN0YW50LWZvbGRpbmciOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMSIsCi0g
ICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYmFiZWwtcGx1Z2lu
LWNvbnN0YW50LWZvbGRpbmcvLS9iYWJlbC1wbHVnaW4tY29uc3RhbnQtZm9sZGluZy0xLjAuMS50
Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLWcySFRaTW1PUkp3MmtyMjZVZS93aEVLUXFv
ND0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJiYWJlbC1wbHVnaW4tZGVhZC1j
b2RlLWVsaW1pbmF0aW9uIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjIiLAotICAgICAgInJl
c29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2JhYmVsLXBsdWdpbi1kZWFkLWNv
ZGUtZWxpbWluYXRpb24vLS9iYWJlbC1wbHVnaW4tZGVhZC1jb2RlLWVsaW1pbmF0aW9uLTEuMC4y
LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtWDN4RkVuVGMxOHpOdjdzK0M0WGRLQklm
RDJVPSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgImJhYmVsLXBsdWdpbi1ldmFs
IjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBz
Oi8vcmVnaXN0cnkubnBtanMub3JnL2JhYmVsLXBsdWdpbi1ldmFsLy0vYmFiZWwtcGx1Z2luLWV2
YWwtMS4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1vdnJ0SmM1cjVwcmVTLzdD
WS9jQmFSbFpVTm89IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAiYmFiZWwtcGx1
Z2luLWh0bWxiYXJzLWlubGluZS1wcmVjb21waWxlIjogewotICAgICAgInZlcnNpb24iOiAiMC4x
LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2JhYmVs
LXBsdWdpbi1odG1sYmFycy1pbmxpbmUtcHJlY29tcGlsZS8tL2JhYmVsLXBsdWdpbi1odG1sYmFy
cy1pbmxpbmUtcHJlY29tcGlsZS0wLjEuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1
MTItdUc1UU5CU21WT1h3Z09LbzFwSFh4VFM0N0dwcG9sQzlGT3pwaUFjVTVCYkQvUC9TckowOFhV
WTZQQnR0dWw0RHZmbXloZFlkaDZjVENCeERUQjdFdHc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQot
ICAgIH0sCi0gICAgImJhYmVsLXBsdWdpbi1pbmxpbmUtZW52aXJvbm1lbnQtdmFyaWFibGVzIjog
ewotICAgICAgInZlcnNpb24iOiAiMS4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8v
cmVnaXN0cnkubnBtanMub3JnL2JhYmVsLXBsdWdpbi1pbmxpbmUtZW52aXJvbm1lbnQtdmFyaWFi
bGVzLy0vYmFiZWwtcGx1Z2luLWlubGluZS1lbnZpcm9ubWVudC12YXJpYWJsZXMtMS4wLjEudGd6
IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1IMWpPa1NCNjFxZ21xTDlrWDYvbWovWCtQLzQ9
IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAiYmFiZWwtcGx1Z2luLWpzY3JpcHQi
OiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6
Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYmFiZWwtcGx1Z2luLWpzY3JpcHQvLS9iYWJlbC1wbHVnaW4t
anNjcmlwdC0xLjAuNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLWp6UXNPQ2R1aDZS
OVg2Q292VDFldHN5dGo4dz0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJiYWJl
bC1wbHVnaW4tbWVtYmVyLWV4cHJlc3Npb24tbGl0ZXJhbHMiOiB7Ci0gICAgICAidmVyc2lvbiI6
ICIxLjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcv
YmFiZWwtcGx1Z2luLW1lbWJlci1leHByZXNzaW9uLWxpdGVyYWxzLy0vYmFiZWwtcGx1Z2luLW1l
bWJlci1leHByZXNzaW9uLWxpdGVyYWxzLTEuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5Ijog
InNoYTEtekY3YkQ2cU55U2NYRG5UVzBjQWtRQUlXSk5NPSIsCi0gICAgICAiZGV2IjogdHJ1ZQot
ICAgIH0sCi0gICAgImJhYmVsLXBsdWdpbi1wcm9wZXJ0eS1saXRlcmFscyI6IHsKLSAgICAgICJ2
ZXJzaW9uIjogIjEuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5w
bWpzLm9yZy9iYWJlbC1wbHVnaW4tcHJvcGVydHktbGl0ZXJhbHMvLS9iYWJlbC1wbHVnaW4tcHJv
cGVydHktbGl0ZXJhbHMtMS4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1BbEl3
R1FBWktZQ3h3Ump2NmtqT2s2cTRNelk9IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAg
ICAiYmFiZWwtcGx1Z2luLXByb3RvLXRvLWFzc2lnbiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEu
MC40IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9iYWJl
bC1wbHVnaW4tcHJvdG8tdG8tYXNzaWduLy0vYmFiZWwtcGx1Z2luLXByb3RvLXRvLWFzc2lnbi0x
LjAuNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLXhKNTYvUUwxZDd4Tm9GNmkzd0Fp
VU05ODBTTT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAg
ICAgICJsb2Rhc2giOiAiMy4xMC4xIgotICAgICAgfQotICAgIH0sCi0gICAgImJhYmVsLXBsdWdp
bi1yZWFjdC1jb25zdGFudC1lbGVtZW50cyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4zIiwK
LSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9iYWJlbC1wbHVn
aW4tcmVhY3QtY29uc3RhbnQtZWxlbWVudHMvLS9iYWJlbC1wbHVnaW4tcmVhY3QtY29uc3RhbnQt
ZWxlbWVudHMtMS4wLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1sR2MyNkRlRUtj
dkRTZHovWXZVY0ZEczA0MW89IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAiYmFi
ZWwtcGx1Z2luLXJlYWN0LWRpc3BsYXktbmFtZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4z
IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9iYWJlbC1w
bHVnaW4tcmVhY3QtZGlzcGxheS1uYW1lLy0vYmFiZWwtcGx1Z2luLXJlYWN0LWRpc3BsYXktbmFt
ZS0xLjAuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLWRVL2ppU2JvUWtwT2V4V3Ji
cVlUbmU0RkZQdz0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJiYWJlbC1wbHVn
aW4tcmVtb3ZlLWNvbnNvbGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMSIsCi0gICAgICAi
cmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYmFiZWwtcGx1Z2luLXJlbW92
ZS1jb25zb2xlLy0vYmFiZWwtcGx1Z2luLXJlbW92ZS1jb25zb2xlLTEuMC4xLnRneiIsCi0gICAg
ICAiaW50ZWdyaXR5IjogInNoYTEtMlBKRlZzT2dVQVhVS3FxdjBuZUg5VC93RTZjPSIsCi0gICAg
ICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgImJhYmVsLXBsdWdpbi1yZW1vdmUtZGVidWdnZXIi
OiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6
Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYmFiZWwtcGx1Z2luLXJlbW92ZS1kZWJ1Z2dlci8tL2JhYmVs
LXBsdWdpbi1yZW1vdmUtZGVidWdnZXItMS4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAi
c2hhMS0vUzZqeldHa0tLMGZPNXlKaUMvMEtUNk1GTWM9IiwKLSAgICAgICJkZXYiOiB0cnVlCi0g
ICAgfSwKLSAgICAiYmFiZWwtcGx1Z2luLXJ1bnRpbWUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIx
LjAuNyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYmFi
ZWwtcGx1Z2luLXJ1bnRpbWUvLS9iYWJlbC1wbHVnaW4tcnVudGltZS0xLjAuNy50Z3oiLAotICAg
ICAgImludGVncml0eSI6ICJzaGExLXYzeDlsbTNWYnMxY0Yvb2NzbFBKckxmbFNxOD0iLAotICAg
ICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJiYWJlbC1wbHVnaW4tdHJhbnNmb3JtLWVzMjAx
NS1tb2R1bGVzLWFtZCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjYuMjQuMSIsCi0gICAgICAicmVz
b2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYmFiZWwtcGx1Z2luLXRyYW5zZm9y
bS1lczIwMTUtbW9kdWxlcy1hbWQvLS9iYWJlbC1wbHVnaW4tdHJhbnNmb3JtLWVzMjAxNS1tb2R1
bGVzLWFtZC02LjI0LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1PejVVQVhJNWhD
MXRHY01CSEV2UzhBb0EwVlE9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVz
IjogewotICAgICAgICAiYmFiZWwtcGx1Z2luLXRyYW5zZm9ybS1lczIwMTUtbW9kdWxlcy1jb21t
b25qcyI6ICI2LjI0LjEiLAotICAgICAgICAiYmFiZWwtcnVudGltZSI6ICI2LjI1LjAiLAotICAg
ICAgICAiYmFiZWwtdGVtcGxhdGUiOiAiNi4yNS4wIgotICAgICAgfQotICAgIH0sCi0gICAgImJh
YmVsLXBsdWdpbi10cmFuc2Zvcm0tZXMyMDE1LW1vZHVsZXMtY29tbW9uanMiOiB7Ci0gICAgICAi
dmVyc2lvbiI6ICI2LjI0LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnku
bnBtanMub3JnL2JhYmVsLXBsdWdpbi10cmFuc2Zvcm0tZXMyMDE1LW1vZHVsZXMtY29tbW9uanMv
LS9iYWJlbC1wbHVnaW4tdHJhbnNmb3JtLWVzMjAxNS1tb2R1bGVzLWNvbW1vbmpzLTYuMjQuMS50
Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLTArTVF0QTcyWktObUlpQUFsOGJVUUNtUEsv
ND0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJi
YWJlbC1wbHVnaW4tdHJhbnNmb3JtLXN0cmljdC1tb2RlIjogIjYuMjQuMSIsCi0gICAgICAgICJi
YWJlbC1ydW50aW1lIjogIjYuMjUuMCIsCi0gICAgICAgICJiYWJlbC10ZW1wbGF0ZSI6ICI2LjI1
LjAiLAotICAgICAgICAiYmFiZWwtdHlwZXMiOiAiNi4yNS4wIgotICAgICAgfQotICAgIH0sCi0g
ICAgImJhYmVsLXBsdWdpbi10cmFuc2Zvcm0tc3RyaWN0LW1vZGUiOiB7Ci0gICAgICAidmVyc2lv
biI6ICI2LjI0LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMu
b3JnL2JhYmVsLXBsdWdpbi10cmFuc2Zvcm0tc3RyaWN0LW1vZGUvLS9iYWJlbC1wbHVnaW4tdHJh
bnNmb3JtLXN0cmljdC1tb2RlLTYuMjQuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGEx
LTFmcjNxbGVLWmJ2bGtjOWUydUJLREdjQ0IxZz0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAg
ICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJiYWJlbC1ydW50aW1lIjogIjYuMjUuMCIsCi0gICAg
ICAgICJiYWJlbC10eXBlcyI6ICI2LjI1LjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiYmFiZWwt
cGx1Z2luLXVuZGVjbGFyZWQtdmFyaWFibGVzLWNoZWNrIjogewotICAgICAgInZlcnNpb24iOiAi
MS4wLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Jh
YmVsLXBsdWdpbi11bmRlY2xhcmVkLXZhcmlhYmxlcy1jaGVjay8tL2JhYmVsLXBsdWdpbi11bmRl
Y2xhcmVkLXZhcmlhYmxlcy1jaGVjay0xLjAuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJz
aGExLVhQR3FVNTJCUC9aT21XUVNrSzlpQ1dYMlhlND0iLAotICAgICAgImRldiI6IHRydWUsCi0g
ICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJsZXZlbiI6ICIxLjAuMiIKLSAgICAgIH0KLSAg
ICB9LAotICAgICJiYWJlbC1wbHVnaW4tdW5kZWZpbmVkLXRvLXZvaWQiOiB7Ci0gICAgICAidmVy
c2lvbiI6ICIxLjEuNiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1q
cy5vcmcvYmFiZWwtcGx1Z2luLXVuZGVmaW5lZC10by12b2lkLy0vYmFiZWwtcGx1Z2luLXVuZGVm
aW5lZC10by12b2lkLTEuMS42LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtZjFlTytM
ZU4rdVlBTTRYWVFYcGg3YUJ1TDRFPSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAg
ImJhYmVsLXJlZ2lzdGVyIjogewotICAgICAgInZlcnNpb24iOiAiNi4yNC4xIiwKLSAgICAgICJy
ZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9iYWJlbC1yZWdpc3Rlci8tL2Jh
YmVsLXJlZ2lzdGVyLTYuMjQuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLWZoRGhP
aTl4Qmx2ZnJWb1hoN3BGdktiZTExOD0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVx
dWlyZXMiOiB7Ci0gICAgICAgICJiYWJlbC1jb3JlIjogIjYuMjUuMCIsCi0gICAgICAgICJiYWJl
bC1ydW50aW1lIjogIjYuMjUuMCIsCi0gICAgICAgICJjb3JlLWpzIjogIjIuNS4wIiwKLSAgICAg
ICAgImhvbWUtb3ItdG1wIjogIjIuMC4wIiwKLSAgICAgICAgImxvZGFzaCI6ICI0LjE3LjQiLAot
ICAgICAgICAibWtkaXJwIjogIjAuNS4xIiwKLSAgICAgICAgInNvdXJjZS1tYXAtc3VwcG9ydCI6
ICIwLjQuMTUiCi0gICAgICB9LAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImJh
YmVsLWNvcmUiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiNi4yNS4wIiwKLSAgICAgICAgICAi
cmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYmFiZWwtY29yZS8tL2JhYmVs
LWNvcmUtNi4yNS4wLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGExLWZkUXJCR1BI
UXVuVktXM3JQc1o2a3lMYTF5az0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAg
ICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJiYWJlbC1jb2RlLWZyYW1lIjogIjYuMjIuMCIs
Ci0gICAgICAgICAgICAiYmFiZWwtZ2VuZXJhdG9yIjogIjYuMjUuMCIsCi0gICAgICAgICAgICAi
YmFiZWwtaGVscGVycyI6ICI2LjI0LjEiLAotICAgICAgICAgICAgImJhYmVsLW1lc3NhZ2VzIjog
IjYuMjMuMCIsCi0gICAgICAgICAgICAiYmFiZWwtcmVnaXN0ZXIiOiAiNi4yNC4xIiwKLSAgICAg
ICAgICAgICJiYWJlbC1ydW50aW1lIjogIjYuMjUuMCIsCi0gICAgICAgICAgICAiYmFiZWwtdGVt
cGxhdGUiOiAiNi4yNS4wIiwKLSAgICAgICAgICAgICJiYWJlbC10cmF2ZXJzZSI6ICI2LjI1LjAi
LAotICAgICAgICAgICAgImJhYmVsLXR5cGVzIjogIjYuMjUuMCIsCi0gICAgICAgICAgICAiYmFi
eWxvbiI6ICI2LjE3LjQiLAotICAgICAgICAgICAgImNvbnZlcnQtc291cmNlLW1hcCI6ICIxLjUu
MCIsCi0gICAgICAgICAgICAiZGVidWciOiAiMi42LjgiLAotICAgICAgICAgICAgImpzb241Ijog
IjAuNS4xIiwKLSAgICAgICAgICAgICJsb2Rhc2giOiAiNC4xNy40IiwKLSAgICAgICAgICAgICJt
aW5pbWF0Y2giOiAiMy4wLjQiLAotICAgICAgICAgICAgInBhdGgtaXMtYWJzb2x1dGUiOiAiMS4w
LjEiLAotICAgICAgICAgICAgInByaXZhdGUiOiAiMC4xLjciLAotICAgICAgICAgICAgInNsYXNo
IjogIjEuMC4wIiwKLSAgICAgICAgICAgICJzb3VyY2UtbWFwIjogIjAuNS42IgotICAgICAgICAg
IH0KLSAgICAgICAgfSwKLSAgICAgICAgImJhYnlsb24iOiB7Ci0gICAgICAgICAgInZlcnNpb24i
OiAiNi4xNy40IiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1q
cy5vcmcvYmFieWxvbi8tL2JhYnlsb24tNi4xNy40LnRneiIsCi0gICAgICAgICAgImludGVncml0
eSI6ICJzaGE1MTIta0NobFYrMFNYa2pFMHZVbjlPWjdwQk1XUkZkOHVxM21aZTh4MUs2amh1TmNB
RkF0RW5qY2hGQXFCK2RZRVhLeWQrSnBUNmVwcFJSNzhRQXI1Z1RzVXc9PSIsCi0gICAgICAgICAg
ImRldiI6IHRydWUKLSAgICAgICAgfSwKLSAgICAgICAgImNvcmUtanMiOiB7Ci0gICAgICAgICAg
InZlcnNpb24iOiAiMi41LjAiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lz
dHJ5Lm5wbWpzLm9yZy9jb3JlLWpzLy0vY29yZS1qcy0yLjUuMC50Z3oiLAotICAgICAgICAgICJp
bnRlZ3JpdHkiOiAic2hhMS1WcHdGQ1JpK1pJYXpnM1ZTQW9yZ1JtdHhjSVk9IiwKLSAgICAgICAg
ICAiZGV2IjogdHJ1ZQotICAgICAgICB9LAotICAgICAgICAiaG9tZS1vci10bXAiOiB7Ci0gICAg
ICAgICAgInZlcnNpb24iOiAiMi4wLjAiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczov
L3JlZ2lzdHJ5Lm5wbWpzLm9yZy9ob21lLW9yLXRtcC8tL2hvbWUtb3ItdG1wLTIuMC4wLnRneiIs
Ci0gICAgICAgICAgImludGVncml0eSI6ICJzaGExLTQydy9MU3l1ZlhScWhYNDQwWTFmTXFlSUxi
Zz0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAg
ICAgICAgICAgICJvcy1ob21lZGlyIjogIjEuMC4yIiwKLSAgICAgICAgICAgICJvcy10bXBkaXIi
OiAiMS4wLjIiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAianNvbjUiOiB7Ci0g
ICAgICAgICAgInZlcnNpb24iOiAiMC41LjEiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRw
czovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qc29uNS8tL2pzb241LTAuNS4xLnRneiIsCi0gICAgICAg
ICAgImludGVncml0eSI6ICJzaGExLUhxM25yTUFTQTByWVRpT1dkbjZ0bjZWSldDRT0iLAotICAg
ICAgICAgICJkZXYiOiB0cnVlCi0gICAgICAgIH0sCi0gICAgICAgICJsb2Rhc2giOiB7Ci0gICAg
ICAgICAgInZlcnNpb24iOiAiNC4xNy40IiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6
Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbG9kYXNoLy0vbG9kYXNoLTQuMTcuNC50Z3oiLAotICAgICAg
ICAgICJpbnRlZ3JpdHkiOiAic2hhMS1lQ0E2VFJ3eWl1SFliY3BrWU9OcHRYOUFWYTQ9IiwKLSAg
ICAgICAgICAiZGV2IjogdHJ1ZQotICAgICAgICB9LAotICAgICAgICAic291cmNlLW1hcC1zdXBw
b3J0IjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjAuNC4xNSIsCi0gICAgICAgICAgInJlc29s
dmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NvdXJjZS1tYXAtc3VwcG9ydC8tL3Nv
dXJjZS1tYXAtc3VwcG9ydC0wLjQuMTUudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNo
YTEtQXlBdDlsd0cwcjJNZnNJMktoa3dWdjc0MDdFPSIsCi0gICAgICAgICAgImRldiI6IHRydWUs
Ci0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgInNvdXJjZS1tYXAiOiAiMC41
LjYiCi0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAiYmFiZWwt
cnVudGltZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjYuMjUuMCIsCi0gICAgICAicmVzb2x2ZWQi
OiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYmFiZWwtcnVudGltZS8tL2JhYmVsLXJ1bnRp
bWUtNi4yNS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtTTdtT3FsMUlLN0FhalJx
bXREZXRLd0d1eEJ3PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsK
LSAgICAgICAgImNvcmUtanMiOiAiMi41LjAiLAotICAgICAgICAicmVnZW5lcmF0b3ItcnVudGlt
ZSI6ICIwLjEwLjUiCi0gICAgICB9LAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAg
ImNvcmUtanMiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMi41LjAiLAotICAgICAgICAgICJy
ZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jb3JlLWpzLy0vY29yZS1qcy0y
LjUuMC50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1WcHdGQ1JpK1pJYXpnM1ZT
QW9yZ1JtdHhjSVk9IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZQotICAgICAgICB9Ci0gICAgICB9
Ci0gICAgfSwKLSAgICAiYmFiZWwtdGVtcGxhdGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI2LjI1
LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2JhYmVs
LXRlbXBsYXRlLy0vYmFiZWwtdGVtcGxhdGUtNi4yNS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5
IjogInNoYTEtWmxKQkZtdDhLcVRHR2RjZUdTbHBWU3NRd0hFPSIsCi0gICAgICAiZGV2IjogdHJ1
ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImJhYmVsLXJ1bnRpbWUiOiAiNi4yNS4w
IiwKLSAgICAgICAgImJhYmVsLXRyYXZlcnNlIjogIjYuMjUuMCIsCi0gICAgICAgICJiYWJlbC10
eXBlcyI6ICI2LjI1LjAiLAotICAgICAgICAiYmFieWxvbiI6ICI2LjE3LjQiLAotICAgICAgICAi
bG9kYXNoIjogIjQuMTcuNCIKLSAgICAgIH0sCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAg
ICAgICAiYmFieWxvbiI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICI2LjE3LjQiLAotICAgICAg
ICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9iYWJ5bG9uLy0vYmFi
eWxvbi02LjE3LjQudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1rQ2hsVisw
U1hrakUwdlVuOU9aN3BCTVdSRmQ4dXEzbVplOHgxSzZqaHVOY0FGQXRFbmpjaEZBcUIrZFlFWEt5
ZCtKcFQ2ZXBwUlI3OFFBcjVnVHNVdz09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZQotICAgICAg
ICB9LAotICAgICAgICAibG9kYXNoIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjQuMTcuNCIs
Ci0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2xvZGFz
aC8tL2xvZGFzaC00LjE3LjQudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTEtZUNB
NlRSd3lpdUhZYmNwa1lPTnB0WDlBVmE0PSIsCi0gICAgICAgICAgImRldiI6IHRydWUKLSAgICAg
ICAgfQotICAgICAgfQotICAgIH0sCi0gICAgImJhYmVsLXRyYXZlcnNlIjogewotICAgICAgInZl
cnNpb24iOiAiNi4yNS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5w
bWpzLm9yZy9iYWJlbC10cmF2ZXJzZS8tL2JhYmVsLXRyYXZlcnNlLTYuMjUuMC50Z3oiLAotICAg
ICAgImludGVncml0eSI6ICJzaGExLUlsZEpmaS9OR2JpZTNCUEV5Uk9CK1ZFa2x2RT0iLAotICAg
ICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJiYWJlbC1jb2Rl
LWZyYW1lIjogIjYuMjIuMCIsCi0gICAgICAgICJiYWJlbC1tZXNzYWdlcyI6ICI2LjIzLjAiLAot
ICAgICAgICAiYmFiZWwtcnVudGltZSI6ICI2LjI1LjAiLAotICAgICAgICAiYmFiZWwtdHlwZXMi
OiAiNi4yNS4wIiwKLSAgICAgICAgImJhYnlsb24iOiAiNi4xNy40IiwKLSAgICAgICAgImRlYnVn
IjogIjIuNi44IiwKLSAgICAgICAgImdsb2JhbHMiOiAiOS4xOC4wIiwKLSAgICAgICAgImludmFy
aWFudCI6ICIyLjIuMiIsCi0gICAgICAgICJsb2Rhc2giOiAiNC4xNy40IgotICAgICAgfSwKLSAg
ICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJiYWJ5bG9uIjogewotICAgICAgICAgICJ2
ZXJzaW9uIjogIjYuMTcuNCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0
cnkubnBtanMub3JnL2JhYnlsb24vLS9iYWJ5bG9uLTYuMTcuNC50Z3oiLAotICAgICAgICAgICJp
bnRlZ3JpdHkiOiAic2hhNTEyLWtDaGxWKzBTWGtqRTB2VW45T1o3cEJNV1JGZDh1cTNtWmU4eDFL
NmpodU5jQUZBdEVuamNoRkFxQitkWUVYS3lkK0pwVDZlcHBSUjc4UUFyNWdUc1V3PT0iLAotICAg
ICAgICAgICJkZXYiOiB0cnVlCi0gICAgICAgIH0sCi0gICAgICAgICJnbG9iYWxzIjogewotICAg
ICAgICAgICJ2ZXJzaW9uIjogIjkuMTguMCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBz
Oi8vcmVnaXN0cnkubnBtanMub3JnL2dsb2JhbHMvLS9nbG9iYWxzLTkuMTguMC50Z3oiLAotICAg
ICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVMwbkczQ0xFUWlZL0lMeHF0enRUV0gvM2lSUmR5
Qkx3NktNRHhuS01jaHJ0YmoyT0ZtZWhWaDBXVUNmVzNEVXJJZ3gvcUZySlBJQ3JxNFo0c1RSOVVR
PT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlCi0gICAgICAgIH0sCi0gICAgICAgICJsb2Rhc2gi
OiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiNC4xNy40IiwKLSAgICAgICAgICAicmVzb2x2ZWQi
OiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbG9kYXNoLy0vbG9kYXNoLTQuMTcuNC50Z3oi
LAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1lQ0E2VFJ3eWl1SFliY3BrWU9OcHRYOUFW
YTQ9IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwK
LSAgICAiYmFiZWwtdHlwZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI2LjI1LjAiLAotICAgICAg
InJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2JhYmVsLXR5cGVzLy0vYmFi
ZWwtdHlwZXMtNi4yNS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtY0sreVNOVm1E
bDBZK0JIWkhJTUR0VUUwb1k0PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJl
cyI6IHsKLSAgICAgICAgImJhYmVsLXJ1bnRpbWUiOiAiNi4yNS4wIiwKLSAgICAgICAgImVzdXRp
bHMiOiAiMi4wLjIiLAotICAgICAgICAibG9kYXNoIjogIjQuMTcuNCIsCi0gICAgICAgICJ0by1m
YXN0LXByb3BlcnRpZXMiOiAiMS4wLjMiCi0gICAgICB9LAotICAgICAgImRlcGVuZGVuY2llcyI6
IHsKLSAgICAgICAgImxvZGFzaCI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICI0LjE3LjQiLAot
ICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9sb2Rhc2gv
LS9sb2Rhc2gtNC4xNy40LnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGExLWVDQTZU
Und5aXVIWWJjcGtZT05wdFg5QVZhND0iLAotICAgICAgICAgICJkZXYiOiB0cnVlCi0gICAgICAg
IH0KLSAgICAgIH0KLSAgICB9LAotICAgICJiYWJ5bG9uIjogewotICAgICAgInZlcnNpb24iOiAi
NS44LjM4IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9i
YWJ5bG9uLy0vYmFieWxvbi01LjguMzgudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS03
SnNTQ3hHL2JNMUJjNkdMOGhmbUMzbUZuLzA9IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwK
LSAgICAiYmFja2JvbmUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjMuMyIsCi0gICAgICAicmVz
b2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYmFja2JvbmUvLS9iYWNrYm9uZS0x
LjMuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLVRNZ09wOHNXTWF4SFNJbk9RUEw0
dkdnN0taaz0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAg
ICAgICJ1bmRlcnNjb3JlIjogIjEuOC4zIgotICAgICAgfQotICAgIH0sCi0gICAgImJhY2tvMiI6
IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczov
L3JlZ2lzdHJ5Lm5wbWpzLm9yZy9iYWNrbzIvLS9iYWNrbzItMS4wLjIudGd6IiwKLSAgICAgICJp
bnRlZ3JpdHkiOiAic2hhMS1NYXNheUxFcE5qUmo0MXMrdTJuMDM4KzZlVWM9IiwKLSAgICAgICJk
ZXYiOiB0cnVlCi0gICAgfSwKLSAgICAiYmFsYW5jZWQtbWF0Y2giOiB7Ci0gICAgICAidmVyc2lv
biI6ICIxLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5v
cmcvYmFsYW5jZWQtbWF0Y2gvLS9iYWxhbmNlZC1tYXRjaC0xLjAuMC50Z3oiLAotICAgICAgImlu
dGVncml0eSI6ICJzaGExLWliVFJtYXNyN2tuZUZrNmdLNG5PUmkxeHQyYz0iLAotICAgICAgImRl
diI6IHRydWUKLSAgICB9LAotICAgICJiYXNlNjQtYXJyYXlidWZmZXIiOiB7Ci0gICAgICAidmVy
c2lvbiI6ICIwLjEuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1q
cy5vcmcvYmFzZTY0LWFycmF5YnVmZmVyLy0vYmFzZTY0LWFycmF5YnVmZmVyLTAuMS41LnRneiIs
Ci0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtYzVKbmNaSTdXaGwwZXRabXFselV2NXh1bk9nPSIs
Ci0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgImJhc2U2NGlkIjogewotICAgICAgInZl
cnNpb24iOiAiMC4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBt
anMub3JnL2Jhc2U2NGlkLy0vYmFzZTY0aWQtMC4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHki
OiAic2hhMS1BczRQM3U0TTcwOUFDQTRlYytnMDhMRy96ajg9IiwKLSAgICAgICJkZXYiOiB0cnVl
Ci0gICAgfSwKLSAgICAiYmFzaWMtYXV0aCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMS4wIiwK
LSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9iYXNpYy1hdXRo
Ly0vYmFzaWMtYXV0aC0xLjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLVJTSWU1
Q24zN2g1UU5iNC9VVk0vSE4vU21JUT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAg
ICJiZXR0ZXItYXNzZXJ0IjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjIiLAotICAgICAgInJl
c29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2JldHRlci1hc3NlcnQvLS9iZXR0
ZXItYXNzZXJ0LTEuMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtUUlacm5odWVD
MVcwZ1lsREVlYVByL3JyeFNJPSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJl
cyI6IHsKLSAgICAgICAgImNhbGxzaXRlIjogIjEuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAg
ImJpbmFyeS1leHRlbnNpb25zIjogewotICAgICAgInZlcnNpb24iOiAiMS45LjAiLAotICAgICAg
InJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2JpbmFyeS1leHRlbnNpb25z
Ly0vYmluYXJ5LWV4dGVuc2lvbnMtMS45LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hh
MS1abEJzRnM1dlRXa29wYlBOYWpQS1FlbEI0M3M9IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAg
fSwKLSAgICAiYmluYXJ5ZXh0ZW5zaW9ucyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4wIiwK
LSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9iaW5hcnlleHRl
bnNpb25zLy0vYmluYXJ5ZXh0ZW5zaW9ucy0yLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6
ICJzaGExLTVaZlJwNmFqVllvdEhISkJvV3labGw1cXBBOD0iLAotICAgICAgImRldiI6IHRydWUK
LSAgICB9LAotICAgICJibGFuay1vYmplY3QiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMiIs
Ci0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYmxhbmstb2Jq
ZWN0Ly0vYmxhbmstb2JqZWN0LTEuMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEt
K1pCNVA3NmFqSTNRRS9zeUdVSUw3SUhWOUxrPSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0s
Ci0gICAgImJsb2IiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjAuNCIsCi0gICAgICAicmVzb2x2
ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYmxvYi8tL2Jsb2ItMC4wLjQudGd6IiwK
LSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS12UEV3VXNwVVJqOHcrZngrbGJta2RqQ3BTU0U9IiwK
LSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAiYmx1ZWJpcmQiOiB7Ci0gICAgICAidmVy
c2lvbiI6ICIyLjExLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBt
anMub3JnL2JsdWViaXJkLy0vYmx1ZWJpcmQtMi4xMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5
IjogInNoYTEtVTB1UU04QWl5VmVjVnJvN1BscGNxdnUyVU9FPSIsCi0gICAgICAiZGV2IjogdHJ1
ZQotICAgIH0sCi0gICAgImJvZHkiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjEuMCIsCi0gICAg
ICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYm9keS8tL2JvZHktNS4x
LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS01TG9NNUJDa2FUWXlNMmRnbnN0T1pW
TVNVR2s9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAg
ICAiY29udGludWFibGUtY2FjaGUiOiAiMC4zLjEiLAotICAgICAgICAiZXJyb3IiOiAiNy4wLjIi
LAotICAgICAgICAicmF3LWJvZHkiOiAiMS4xLjciLAotICAgICAgICAic2FmZS1qc29uLXBhcnNl
IjogIjEuMC4xIgotICAgICAgfQotICAgIH0sCi0gICAgImJvd2VyLWNvbmZpZyI6IHsKLSAgICAg
ICJ2ZXJzaW9uIjogIjEuNC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5
Lm5wbWpzLm9yZy9ib3dlci1jb25maWcvLS9ib3dlci1jb25maWctMS40LjAudGd6IiwKLSAgICAg
ICJpbnRlZ3JpdHkiOiAic2hhMS1Gc09NRVRYNEJ4d1o4bGs0MWhzTmpMOFkwL0U9IiwKLSAgICAg
ICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiZ3JhY2VmdWwtZnMi
OiAiNC4xLjExIiwKLSAgICAgICAgIm1vdXQiOiAiMS4wLjAiLAotICAgICAgICAib3B0aW1pc3Qi
OiAiMC42LjEiLAotICAgICAgICAib3NlbnYiOiAiMC4xLjQiLAotICAgICAgICAidW50aWxkaWZ5
IjogIjIuMS4wIgotICAgICAgfQotICAgIH0sCi0gICAgImJvd2VyLWVuZHBvaW50LXBhcnNlciI6
IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMi4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczov
L3JlZ2lzdHJ5Lm5wbWpzLm9yZy9ib3dlci1lbmRwb2ludC1wYXJzZXIvLS9ib3dlci1lbmRwb2lu
dC1wYXJzZXItMC4yLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1BTFZscmIrcmJ5
MDFyZDNwZCtsNVlxeThzL1k9IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAiYnJh
Y2UtZXhwYW5zaW9uIjogewotICAgICAgInZlcnNpb24iOiAiMS4xLjgiLAotICAgICAgInJlc29s
dmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2JyYWNlLWV4cGFuc2lvbi8tL2JyYWNl
LWV4cGFuc2lvbi0xLjEuOC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLXdIc2hISHlW
THNINDc5VWFkKzhOSFRtUW9wST0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWly
ZXMiOiB7Ci0gICAgICAgICJiYWxhbmNlZC1tYXRjaCI6ICIxLjAuMCIsCi0gICAgICAgICJjb25j
YXQtbWFwIjogIjAuMC4xIgotICAgICAgfQotICAgIH0sCi0gICAgImJyYWNlcyI6IHsKLSAgICAg
ICJ2ZXJzaW9uIjogIjEuOC41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5
Lm5wbWpzLm9yZy9icmFjZXMvLS9icmFjZXMtMS44LjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHki
OiAic2hhMS11bmVXTGhMZitXbld0MmNSNlJTM040Vjc5cWM9IiwKLSAgICAgICJkZXYiOiB0cnVl
LAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiZXhwYW5kLXJhbmdlIjogIjEuOC4yIiwK
LSAgICAgICAgInByZXNlcnZlIjogIjAuMi4wIiwKLSAgICAgICAgInJlcGVhdC1lbGVtZW50Ijog
IjEuMS4yIgotICAgICAgfQotICAgIH0sCi0gICAgImJyZWFrYWJsZSI6IHsKLSAgICAgICJ2ZXJz
aW9uIjogIjEuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpz
Lm9yZy9icmVha2FibGUvLS9icmVha2FibGUtMS4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHki
OiAic2hhMS1lRXA1ZVJXampxMG51dFJXdFZjc3RMdXFlTUU9IiwKLSAgICAgICJkZXYiOiB0cnVl
Ci0gICAgfSwKLSAgICAiYnJvY2NvbGktYXNzZXQtcmV2IjogewotICAgICAgInZlcnNpb24iOiAi
Mi41LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Jy
b2Njb2xpLWFzc2V0LXJldi8tL2Jyb2Njb2xpLWFzc2V0LXJldi0yLjUuMC50Z3oiLAotICAgICAg
ImludGVncml0eSI6ICJzaGExLTlmWnVySllyK2ZDR0tHa2g4T3JxcTIwQTJCaz0iLAotICAgICAg
ImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJicm9jY29saS1hc3Nl
dC1yZXdyaXRlIjogIjEuMS4wIiwKLSAgICAgICAgImJyb2Njb2xpLWZpbHRlciI6ICIxLjIuNCIs
Ci0gICAgICAgICJqc29uLXN0YWJsZS1zdHJpbmdpZnkiOiAiMS4wLjEiLAotICAgICAgICAibWF0
Y2hlci1jb2xsZWN0aW9uIjogIjEuMC40IiwKLSAgICAgICAgInJzdnAiOiAiMy42LjIiCi0gICAg
ICB9Ci0gICAgfSwKLSAgICAiYnJvY2NvbGktYXNzZXQtcmV3cml0ZSI6IHsKLSAgICAgICJ2ZXJz
aW9uIjogIjEuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpz
Lm9yZy9icm9jY29saS1hc3NldC1yZXdyaXRlLy0vYnJvY2NvbGktYXNzZXQtcmV3cml0ZS0xLjEu
MC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLWQ2WGFWaFY2b3hqRmtSTWtYb3V2dEdG
L2lEQT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAg
ICJicm9jY29saS1maWx0ZXIiOiAiMS4yLjQiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiYnJvY2Nv
bGktYmFiZWwtdHJhbnNwaWxlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuNy4yIiwKLSAgICAg
ICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9icm9jY29saS1iYWJlbC10
cmFuc3BpbGVyLy0vYnJvY2NvbGktYmFiZWwtdHJhbnNwaWxlci01LjcuMi50Z3oiLAotICAgICAg
ImludGVncml0eSI6ICJzaGE1MTItdkZRK2FTUjlKODFmbTNNWFhRR2dEeHN3WUlOSGwycDVkdUx2
UkxWbnBtZ1BETmRwZHNhMzBnaDN4bm1oelIvR3dXRkJmVU5sZTdhWXh0aGxndnNOMHc9PSIsCi0g
ICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImJhYmVsLWNv
cmUiOiAiNS44LjM4IiwKLSAgICAgICAgImJyb2Njb2xpLWZ1bm5lbCI6ICIxLjIuMCIsCi0gICAg
ICAgICJicm9jY29saS1tZXJnZS10cmVlcyI6ICIxLjIuNCIsCi0gICAgICAgICJicm9jY29saS1w
ZXJzaXN0ZW50LWZpbHRlciI6ICIxLjQuMiIsCi0gICAgICAgICJjbG9uZSI6ICIwLjIuMCIsCi0g
ICAgICAgICJoYXNoLWZvci1kZXAiOiAiMS4yLjAiLAotICAgICAgICAiaGVpbWRhbGxqcy1sb2dn
ZXIiOiAiMC4xLjkiLAotICAgICAgICAianNvbi1zdGFibGUtc3RyaW5naWZ5IjogIjEuMC4xIiwK
LSAgICAgICAgInJzdnAiOiAiMy42LjIiLAotICAgICAgICAid29ya2VycG9vbCI6ICIyLjIuMiIK
LSAgICAgIH0sCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiY2xvbmUiOiB7Ci0g
ICAgICAgICAgInZlcnNpb24iOiAiMC4yLjAiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRw
czovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jbG9uZS8tL2Nsb25lLTAuMi4wLnRneiIsCi0gICAgICAg
ICAgImludGVncml0eSI6ICJzaGExLXhoSnFrSzFQY3R2MXJOc2tQTU4zSlA2VC9COD0iLAotICAg
ICAgICAgICJkZXYiOiB0cnVlCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJicm9j
Y29saS1icm9jZmlsZS1sb2FkZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjE4LjAiLAotICAg
ICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Jyb2Njb2xpLWJyb2Nm
aWxlLWxvYWRlci8tL2Jyb2Njb2xpLWJyb2NmaWxlLWxvYWRlci0wLjE4LjAudGd6IiwKLSAgICAg
ICJpbnRlZ3JpdHkiOiAic2hhMS1Mb1lDSElCY05QL0kwcG92dHlIUEp6NkJua3M9IiwKLSAgICAg
ICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiZmluZHVwLXN5bmMi
OiAiMC40LjMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiYnJvY2NvbGktYnVpbGRlciI6IHsKLSAg
ICAgICJ2ZXJzaW9uIjogIjAuMTguOCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdp
c3RyeS5ucG1qcy5vcmcvYnJvY2NvbGktYnVpbGRlci8tL2Jyb2Njb2xpLWJ1aWxkZXItMC4xOC44
LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtL2xScFRWUk1QTi9iQVFLT2dDN3NwbGRK
cUhrPSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAg
ImhlaW1kYWxsanMiOiAiMC4yLjUiLAotICAgICAgICAicHJvbWlzZS1tYXAtc2VyaWVzIjogIjAu
Mi4zIiwKLSAgICAgICAgInF1aWNrLXRlbXAiOiAiMC4xLjgiLAotICAgICAgICAicmltcmFmIjog
IjIuNi4xIiwKLSAgICAgICAgInJzdnAiOiAiMy42LjIiLAotICAgICAgICAic2lsZW50LWVycm9y
IjogIjEuMS4wIgotICAgICAgfQotICAgIH0sCi0gICAgImJyb2Njb2xpLWNhY2hpbmctd3JpdGVy
IjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBz
Oi8vcmVnaXN0cnkubnBtanMub3JnL2Jyb2Njb2xpLWNhY2hpbmctd3JpdGVyLy0vYnJvY2NvbGkt
Y2FjaGluZy13cml0ZXItMy4wLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1DOUxK
YXBjNDFxYXJXUThIdWpYRkZYMTl0SFk9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJl
cXVpcmVzIjogewotICAgICAgICAiYnJvY2NvbGkta2l0Y2hlbi1zaW5rLWhlbHBlcnMiOiAiMC4z
LjEiLAotICAgICAgICAiYnJvY2NvbGktcGx1Z2luIjogIjEuMy4wIiwKLSAgICAgICAgImRlYnVn
IjogIjIuNi44IiwKLSAgICAgICAgInJpbXJhZiI6ICIyLjYuMSIsCi0gICAgICAgICJyc3ZwIjog
IjMuNi4yIiwKLSAgICAgICAgIndhbGstc3luYyI6ICIwLjMuMiIKLSAgICAgIH0KLSAgICB9LAot
ICAgICJicm9jY29saS1jbGVhbi1jc3MiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjEuMCIsCi0g
ICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYnJvY2NvbGktY2xl
YW4tY3NzLy0vYnJvY2NvbGktY2xlYW4tY3NzLTEuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5
IjogInNoYTEtbmJGRDJhOStDdWVjSnVPc1dwdXkxeURxR2ZvPSIsCi0gICAgICAiZGV2IjogdHJ1
ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImJyb2Njb2xpLXBlcnNpc3RlbnQtZmls
dGVyIjogIjEuNC4yIiwKLSAgICAgICAgImNsZWFuLWNzcy1wcm9taXNlIjogIjAuMS4xIiwKLSAg
ICAgICAgImlubGluZS1zb3VyY2UtbWFwLWNvbW1lbnQiOiAiMS4wLjUiLAotICAgICAgICAianNv
bi1zdGFibGUtc3RyaW5naWZ5IjogIjEuMC4xIgotICAgICAgfQotICAgIH0sCi0gICAgImJyb2Nj
b2xpLWNvbmNhdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMi4yIiwKLSAgICAgICJyZXNvbHZl
ZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9icm9jY29saS1jb25jYXQvLS9icm9jY29s
aS1jb25jYXQtMy4yLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1odi9jVW1CdXRa
QzZuMnVKVEY3SG9CYjF0N2s9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVz
IjogewotICAgICAgICAiYnJvY2NvbGkta2l0Y2hlbi1zaW5rLWhlbHBlcnMiOiAiMC4zLjEiLAot
ICAgICAgICAiYnJvY2NvbGktcGx1Z2luIjogIjEuMy4wIiwKLSAgICAgICAgImJyb2Njb2xpLXN0
ZXciOiAiMS41LjAiLAotICAgICAgICAiZW5zdXJlLXBvc2l4LXBhdGgiOiAiMS4wLjIiLAotICAg
ICAgICAiZmFzdC1zb3VyY2VtYXAtY29uY2F0IjogIjEuMi4wIiwKLSAgICAgICAgImZpbmQtaW5k
ZXgiOiAiMS4xLjAiLAotICAgICAgICAiZnMtZXh0cmEiOiAiMS4wLjAiLAotICAgICAgICAiZnMt
dHJlZS1kaWZmIjogIjAuNS42IiwKLSAgICAgICAgImxvZGFzaC5tZXJnZSI6ICI0LjYuMCIsCi0g
ICAgICAgICJsb2Rhc2gub21pdCI6ICI0LjUuMCIsCi0gICAgICAgICJsb2Rhc2gudW5pcSI6ICI0
LjUuMCIsCi0gICAgICAgICJ3YWxrLXN5bmMiOiAiMC4zLjIiCi0gICAgICB9LAotICAgICAgImRl
cGVuZGVuY2llcyI6IHsKLSAgICAgICAgImZzLWV4dHJhIjogewotICAgICAgICAgICJ2ZXJzaW9u
IjogIjEuMC4wIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1q
cy5vcmcvZnMtZXh0cmEvLS9mcy1leHRyYS0xLjAuMC50Z3oiLAotICAgICAgICAgICJpbnRlZ3Jp
dHkiOiAic2hhMS16VHpsOStmTFlVV0lQOHJqR1I2WWQvaFllVkE9IiwKLSAgICAgICAgICAiZGV2
IjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiZ3JhY2VmdWwt
ZnMiOiAiNC4xLjExIiwKLSAgICAgICAgICAgICJqc29uZmlsZSI6ICIyLjQuMCIsCi0gICAgICAg
ICAgICAia2xhdyI6ICIxLjMuMSIKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAg
ICB9LAotICAgICJicm9jY29saS1jb25maWctbG9hZGVyIjogewotICAgICAgInZlcnNpb24iOiAi
MS4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Jy
b2Njb2xpLWNvbmZpZy1sb2FkZXIvLS9icm9jY29saS1jb25maWctbG9hZGVyLTEuMC4xLnRneiIs
Ci0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1NREtZUTUwcnhobitnMTdEWWRmemZFTTlEalR1
U0d1NDJEYjM3QThUUUhRZThnZVlFY1VaNFNRcVpSZ3pkQUkzYVJRTmxBMXlCSEpmT2VHbU9qaExJ
Zz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAi
YnJvY2NvbGktY2FjaGluZy13cml0ZXIiOiAiMy4wLjMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAi
YnJvY2NvbGktY29uZmlnLXJlcGxhY2UiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjEuMiIsCi0g
ICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYnJvY2NvbGktY29u
ZmlnLXJlcGxhY2UvLS9icm9jY29saS1jb25maWctcmVwbGFjZS0xLjEuMi50Z3oiLAotICAgICAg
ImludGVncml0eSI6ICJzaGExLWJxaDUyU3BicldOTkVUS2JVZnhmU3EvYW5BQT0iLAotICAgICAg
ImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJicm9jY29saS1raXRj
aGVuLXNpbmstaGVscGVycyI6ICIwLjMuMSIsCi0gICAgICAgICJicm9jY29saS1wbHVnaW4iOiAi
MS4zLjAiLAotICAgICAgICAiZGVidWciOiAiMi42LjgiLAotICAgICAgICAiZnMtZXh0cmEiOiAi
MC4yNC4wIgotICAgICAgfSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJmcy1l
eHRyYSI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIwLjI0LjAiLAotICAgICAgICAgICJyZXNv
bHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9mcy1leHRyYS8tL2ZzLWV4dHJhLTAu
MjQuMC50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS0xT1EwS3BablhMZUVaak9t
Q1pKSk15dFRtVkk9IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWly
ZXMiOiB7Ci0gICAgICAgICAgICAiZ3JhY2VmdWwtZnMiOiAiNC4xLjExIiwKLSAgICAgICAgICAg
ICJqc29uZmlsZSI6ICIyLjQuMCIsCi0gICAgICAgICAgICAicGF0aC1pcy1hYnNvbHV0ZSI6ICIx
LjAuMSIsCi0gICAgICAgICAgICAicmltcmFmIjogIjIuNi4xIgotICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgfQotICAgIH0sCi0gICAgImJyb2Njb2xpLWRlYnVnIjogewotICAgICAgInZl
cnNpb24iOiAiMC42LjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBt
anMub3JnL2Jyb2Njb2xpLWRlYnVnLy0vYnJvY2NvbGktZGVidWctMC42LjMudGd6IiwKLSAgICAg
ICJpbnRlZ3JpdHkiOiAic2hhNTEyLVlxcE1IMlFQSE50R29hdVZPajcxNWRxRGZ1ckphOU8yYW5k
MVV1eGZ6ekdwTTNBOW1CclhlZUxkV3BUdDhoai9ZOHU4V2FHL0wxVUJaWWZmUHZUSFZ3PT0iLAot
ICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJicm9jY29s
aS1wbHVnaW4iOiAiMS4zLjAiLAotICAgICAgICAiZnMtdHJlZS1kaWZmIjogIjAuNS42IiwKLSAg
ICAgICAgImhlaW1kYWxsanMiOiAiMC4yLjUiLAotICAgICAgICAiaGVpbWRhbGxqcy1sb2dnZXIi
OiAiMC4xLjkiLAotICAgICAgICAibWluaW1hdGNoIjogIjMuMC40IiwKLSAgICAgICAgInN5bWxp
bmstb3ItY29weSI6ICIxLjEuOCIsCi0gICAgICAgICJ0cmVlLXN5bmMiOiAiMS4yLjIiCi0gICAg
ICB9Ci0gICAgfSwKLSAgICAiYnJvY2NvbGktZmlsdGVyIjogewotICAgICAgInZlcnNpb24iOiAi
MS4yLjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Jy
b2Njb2xpLWZpbHRlci8tL2Jyb2Njb2xpLWZpbHRlci0xLjIuNC50Z3oiLAotICAgICAgImludGVn
cml0eSI6ICJzaGExLVFKcjdsTG1qcHRxZnJJRTA2UjRnWDBETWN6QT0iLAotICAgICAgImRldiI6
IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJicm9jY29saS1raXRjaGVuLXNp
bmstaGVscGVycyI6ICIwLjMuMSIsCi0gICAgICAgICJicm9jY29saS1wbHVnaW4iOiAiMS4zLjAi
LAotICAgICAgICAiY29weS1kZXJlZmVyZW5jZSI6ICIxLjAuMCIsCi0gICAgICAgICJkZWJ1ZyI6
ICIyLjYuOCIsCi0gICAgICAgICJta2RpcnAiOiAiMC41LjEiLAotICAgICAgICAicHJvbWlzZS1t
YXAtc2VyaWVzIjogIjAuMi4zIiwKLSAgICAgICAgInJzdnAiOiAiMy42LjIiLAotICAgICAgICAi
c3ltbGluay1vci1jb3B5IjogIjEuMS44IiwKLSAgICAgICAgIndhbGstc3luYyI6ICIwLjMuMiIK
LSAgICAgIH0KLSAgICB9LAotICAgICJicm9jY29saS1mdW5uZWwiOiB7Ci0gICAgICAidmVyc2lv
biI6ICIxLjIuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5v
cmcvYnJvY2NvbGktZnVubmVsLy0vYnJvY2NvbGktZnVubmVsLTEuMi4wLnRneiIsCi0gICAgICAi
aW50ZWdyaXR5IjogInNoYTEtemR3Ni9GL3hhRnFBSTBpUC8zVE9iN1dsRXBZPSIsCi0gICAgICAi
ZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImFycmF5LWVxdWFsIjog
IjEuMC4wIiwKLSAgICAgICAgImJsYW5rLW9iamVjdCI6ICIxLjAuMiIsCi0gICAgICAgICJicm9j
Y29saS1wbHVnaW4iOiAiMS4zLjAiLAotICAgICAgICAiZGVidWciOiAiMi42LjgiLAotICAgICAg
ICAiZXhpc3RzLXN5bmMiOiAiMC4wLjQiLAotICAgICAgICAiZmFzdC1vcmRlcmVkLXNldCI6ICIx
LjAuMyIsCi0gICAgICAgICJmcy10cmVlLWRpZmYiOiAiMC41LjYiLAotICAgICAgICAiaGVpbWRh
bGxqcyI6ICIwLjIuNSIsCi0gICAgICAgICJtaW5pbWF0Y2giOiAiMy4wLjQiLAotICAgICAgICAi
bWtkaXJwIjogIjAuNS4xIiwKLSAgICAgICAgInBhdGgtcG9zaXgiOiAiMS4wLjAiLAotICAgICAg
ICAicmltcmFmIjogIjIuNi4xIiwKLSAgICAgICAgInN5bWxpbmstb3ItY29weSI6ICIxLjEuOCIs
Ci0gICAgICAgICJ3YWxrLXN5bmMiOiAiMC4zLjIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiYnJv
Y2NvbGktZnVubmVsLXJlZHVjZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMCIsCi0gICAg
ICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYnJvY2NvbGktZnVubmVs
LXJlZHVjZXIvLS9icm9jY29saS1mdW5uZWwtcmVkdWNlci0xLjAuMC50Z3oiLAotICAgICAgImlu
dGVncml0eSI6ICJzaGExLUVUWmJLbmhhN0pzWGx5bzIzNGZ1OGt4Y3dPbz0iLAotICAgICAgImRl
diI6IHRydWUKLSAgICB9LAotICAgICJicm9jY29saS1qc2hpbnQiOiB7Ci0gICAgICAidmVyc2lv
biI6ICIyLjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5v
cmcvYnJvY2NvbGktanNoaW50Ly0vYnJvY2NvbGktanNoaW50LTIuMS4wLnRneiIsCi0gICAgICAi
aW50ZWdyaXR5IjogInNoYTEtMmE2MlFvNTJWOUMrdjA1NUlPVmZnb1FHQWVZPSIsCi0gICAgICAi
ZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImJyb2Njb2xpLXBlcnNp
c3RlbnQtZmlsdGVyIjogIjEuNC4yIiwKLSAgICAgICAgImNoYWxrIjogIjAuNC4wIiwKLSAgICAg
ICAgImZpbmR1cC1zeW5jIjogIjAuMy4wIiwKLSAgICAgICAgImpzaGludCI6ICIyLjkuNSIsCi0g
ICAgICAgICJqc29uLXN0YWJsZS1zdHJpbmdpZnkiOiAiMS4wLjEiLAotICAgICAgICAibWtkaXJw
IjogIjAuNC4yIgotICAgICAgfSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJh
bnNpLXN0eWxlcyI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIxLjAuMCIsCi0gICAgICAgICAg
InJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Fuc2ktc3R5bGVzLy0vYW5z
aS1zdHlsZXMtMS4wLjAudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTEteXhBdDhj
VnZVU1BxdUxaODE3bUFKNkFua1hnPSIsCi0gICAgICAgICAgImRldiI6IHRydWUKLSAgICAgICAg
fSwKLSAgICAgICAgImNoYWxrIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjAuNC4wIiwKLSAg
ICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY2hhbGsvLS9j
aGFsay0wLjQuMC50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1VWm1qM2MwTUh2
NGp2QWpCc0Nld1lYYmd4azg9IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAi
cmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiYW5zaS1zdHlsZXMiOiAiMS4wLjAiLAotICAgICAg
ICAgICAgImhhcy1jb2xvciI6ICIwLjEuNyIsCi0gICAgICAgICAgICAic3RyaXAtYW5zaSI6ICIw
LjEuMSIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJmaW5kdXAtc3luYyI6IHsK
LSAgICAgICAgICAidmVyc2lvbiI6ICIwLjMuMCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0
dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2ZpbmR1cC1zeW5jLy0vZmluZHVwLXN5bmMtMC4zLjAu
dGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTEtTjVNS3BkZ1d0M2ZBTkVYaGxtekdl
UXBNQ3hZPSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjog
ewotICAgICAgICAgICAgImdsb2IiOiAiNS4wLjE1IgotICAgICAgICAgIH0KLSAgICAgICAgfSwK
LSAgICAgICAgIm1rZGlycCI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIwLjQuMiIsCi0gICAg
ICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21rZGlycC8tL21r
ZGlycC0wLjQuMi50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1RbnlNR096am1M
a3k5dlptOU9IbHQzUU9lTWc9IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAi
cmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAibWluaW1pc3QiOiAiMC4wLjgiCi0gICAgICAgICAg
fQotICAgICAgICB9LAotICAgICAgICAic3RyaXAtYW5zaSI6IHsKLSAgICAgICAgICAidmVyc2lv
biI6ICIwLjEuMSIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBt
anMub3JnL3N0cmlwLWFuc2kvLS9zdHJpcC1hbnNpLTAuMS4xLnRneiIsCi0gICAgICAgICAgImlu
dGVncml0eSI6ICJzaGExLU9laXBqUVJORlFaZ3ErU21nSXJQY0x0N3laRT0iLAotICAgICAgICAg
ICJkZXYiOiB0cnVlCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJicm9jY29saS1r
aXRjaGVuLXNpbmstaGVscGVycyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMy4xIiwKLSAgICAg
ICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9icm9jY29saS1raXRjaGVu
LXNpbmstaGVscGVycy8tL2Jyb2Njb2xpLWtpdGNoZW4tc2luay1oZWxwZXJzLTAuMy4xLnRneiIs
Ci0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtZDhmQmdaUzVaa0ZqN0UvTzRuazBSSkp1REFZPSIs
Ci0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImdsb2Ii
OiAiNS4wLjE1IiwKLSAgICAgICAgIm1rZGlycCI6ICIwLjUuMSIKLSAgICAgIH0KLSAgICB9LAot
ICAgICJicm9jY29saS1tZXJnZS10cmVlcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMi40IiwK
LSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9icm9jY29saS1t
ZXJnZS10cmVlcy8tL2Jyb2Njb2xpLW1lcmdlLXRyZWVzLTEuMi40LnRneiIsCi0gICAgICAiaW50
ZWdyaXR5IjogInNoYTEtb0FGUm03VUdmd1pZblpHdm9wUWtSYUxRL2JVPSIsCi0gICAgICAiZGV2
IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImJyb2Njb2xpLXBsdWdpbiI6
ICIxLjMuMCIsCi0gICAgICAgICJjYW4tc3ltbGluayI6ICIxLjAuMCIsCi0gICAgICAgICJmYXN0
LW9yZGVyZWQtc2V0IjogIjEuMC4zIiwKLSAgICAgICAgImZzLXRyZWUtZGlmZiI6ICIwLjUuNiIs
Ci0gICAgICAgICJoZWltZGFsbGpzIjogIjAuMi41IiwKLSAgICAgICAgImhlaW1kYWxsanMtbG9n
Z2VyIjogIjAuMS45IiwKLSAgICAgICAgInJpbXJhZiI6ICIyLjYuMSIsCi0gICAgICAgICJzeW1s
aW5rLW9yLWNvcHkiOiAiMS4xLjgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiYnJvY2NvbGktbWlk
ZGxld2FyZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6
ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9icm9jY29saS1taWRkbGV3YXJlLy0vYnJvY2Nv
bGktbWlkZGxld2FyZS0xLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLWt2VGgr
NXA1SHFtR0pGcHdkL05jeGtqYXNKYz0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVx
dWlyZXMiOiB7Ci0gICAgICAgICJoYW5kbGViYXJzIjogIjQuMC4xMCIsCi0gICAgICAgICJtaW1l
IjogIjEuMy42IgotICAgICAgfQotICAgIH0sCi0gICAgImJyb2Njb2xpLXBlcnNpc3RlbnQtZmls
dGVyIjogewotICAgICAgInZlcnNpb24iOiAiMS40LjIiLAotICAgICAgInJlc29sdmVkIjogImh0
dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Jyb2Njb2xpLXBlcnNpc3RlbnQtZmlsdGVyLy0vYnJv
Y2NvbGktcGVyc2lzdGVudC1maWx0ZXItMS40LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAi
c2hhMS1GNjhTZUtKZjhsVnZuWDBqNFJXc3o2MDZmT2M9IiwKLSAgICAgICJkZXYiOiB0cnVlLAot
ICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiYXN5bmMtZGlzay1jYWNoZSI6ICIxLjMuMiIs
Ci0gICAgICAgICJhc3luYy1wcm9taXNlLXF1ZXVlIjogIjEuMC40IiwKLSAgICAgICAgImJyb2Nj
b2xpLXBsdWdpbiI6ICIxLjMuMCIsCi0gICAgICAgICJjcnlwdG8iOiAiMC4wLjMiLAotICAgICAg
ICAiZnMtdHJlZS1kaWZmIjogIjAuNS42IiwKLSAgICAgICAgImhhc2gtZm9yLWRlcCI6ICIxLjIu
MCIsCi0gICAgICAgICJoZWltZGFsbGpzIjogIjAuMi41IiwKLSAgICAgICAgImhlaW1kYWxsanMt
bG9nZ2VyIjogIjAuMS45IiwKLSAgICAgICAgIm1rZGlycCI6ICIwLjUuMSIsCi0gICAgICAgICJw
cm9taXNlLW1hcC1zZXJpZXMiOiAiMC4yLjMiLAotICAgICAgICAicmltcmFmIjogIjIuNi4xIiwK
LSAgICAgICAgInJzdnAiOiAiMy42LjIiLAotICAgICAgICAic3ltbGluay1vci1jb3B5IjogIjEu
MS44IiwKLSAgICAgICAgIndhbGstc3luYyI6ICIwLjMuMiIKLSAgICAgIH0KLSAgICB9LAotICAg
ICJicm9jY29saS1wbHVnaW4iOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjMuMCIsCi0gICAgICAi
cmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYnJvY2NvbGktcGx1Z2luLy0v
YnJvY2NvbGktcGx1Z2luLTEuMy4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtdnVj
RXFPUXRvSXkxamxFNnFrTnUrMzhPOGU0PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJy
ZXF1aXJlcyI6IHsKLSAgICAgICAgInByb21pc2UtbWFwLXNlcmllcyI6ICIwLjIuMyIsCi0gICAg
ICAgICJxdWljay10ZW1wIjogIjAuMS44IiwKLSAgICAgICAgInJpbXJhZiI6ICIyLjYuMSIsCi0g
ICAgICAgICJzeW1saW5rLW9yLWNvcHkiOiAiMS4xLjgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAi
YnJvY2NvbGktc2xvdy10cmVlcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMC4xIiwKLSAgICAg
ICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9icm9jY29saS1zbG93LXRy
ZWVzLy0vYnJvY2NvbGktc2xvdy10cmVlcy0zLjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6
ICJzaGExLW0vS3A0dmpyUHRPajhxdmQ2WWphUTN6TnliUT0iLAotICAgICAgImRldiI6IHRydWUs
Ci0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJoZWltZGFsbGpzIjogIjAuMi41IgotICAg
ICAgfQotICAgIH0sCi0gICAgImJyb2Njb2xpLXNvdXJjZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjog
IjEuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9i
cm9jY29saS1zb3VyY2UvLS9icm9jY29saS1zb3VyY2UtMS4xLjAudGd6IiwKLSAgICAgICJpbnRl
Z3JpdHkiOiAic2hhMS1WUERvTEl0ejlHV0F5N3hQVjQ4TE12eW8rQWs9IiwKLSAgICAgICJkZXYi
OiB0cnVlCi0gICAgfSwKLSAgICAiYnJvY2NvbGktc3JpLWhhc2giOiB7Ci0gICAgICAidmVyc2lv
biI6ICIyLjEuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5v
cmcvYnJvY2NvbGktc3JpLWhhc2gvLS9icm9jY29saS1zcmktaGFzaC0yLjEuMi50Z3oiLAotICAg
ICAgImludGVncml0eSI6ICJzaGExLXZHbVFYdGVqZ2EweVhNRFFMZTBIRXlqcjgvTT0iLAotICAg
ICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJicm9jY29saS1j
YWNoaW5nLXdyaXRlciI6ICIyLjMuMSIsCi0gICAgICAgICJta2RpcnAiOiAiMC41LjEiLAotICAg
ICAgICAicnN2cCI6ICIzLjYuMiIsCi0gICAgICAgICJzcmktdG9vbGJveCI6ICIwLjIuMCIsCi0g
ICAgICAgICJzeW1saW5rLW9yLWNvcHkiOiAiMS4xLjgiCi0gICAgICB9LAotICAgICAgImRlcGVu
ZGVuY2llcyI6IHsKLSAgICAgICAgImJyb2Njb2xpLWNhY2hpbmctd3JpdGVyIjogewotICAgICAg
ICAgICJ2ZXJzaW9uIjogIjIuMy4xIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9y
ZWdpc3RyeS5ucG1qcy5vcmcvYnJvY2NvbGktY2FjaGluZy13cml0ZXIvLS9icm9jY29saS1jYWNo
aW5nLXdyaXRlci0yLjMuMS50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS11VHox
ajVKazhBTUhXR2piQlhkUFRuOGx2UWM9IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAg
ICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiYnJvY2NvbGkta2l0Y2hlbi1zaW5rLWhl
bHBlcnMiOiAiMC4yLjkiLAotICAgICAgICAgICAgImJyb2Njb2xpLXBsdWdpbiI6ICIxLjEuMCIs
Ci0gICAgICAgICAgICAiZGVidWciOiAiMi42LjgiLAotICAgICAgICAgICAgInJpbXJhZiI6ICIy
LjYuMSIsCi0gICAgICAgICAgICAicnN2cCI6ICIzLjYuMiIsCi0gICAgICAgICAgICAid2Fsay1z
eW5jIjogIjAuMi43IgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgImJyb2Njb2xp
LWtpdGNoZW4tc2luay1oZWxwZXJzIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjAuMi45IiwK
LSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYnJvY2Nv
bGkta2l0Y2hlbi1zaW5rLWhlbHBlcnMvLS9icm9jY29saS1raXRjaGVuLXNpbmstaGVscGVycy0w
LjIuOS50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1wZUNZYnRqWGI3V1lTMmpE
OEVVTk9wYmpic3c9IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWly
ZXMiOiB7Ci0gICAgICAgICAgICAiZ2xvYiI6ICI1LjAuMTUiLAotICAgICAgICAgICAgIm1rZGly
cCI6ICIwLjUuMSIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJicm9jY29saS1w
bHVnaW4iOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMS4xLjAiLAotICAgICAgICAgICJyZXNv
bHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9icm9jY29saS1wbHVnaW4vLS9icm9j
Y29saS1wbHVnaW4tMS4xLjAudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTEtYytM
UG9GK09vZVA4RkNERUREMmVmY2NrdndJPSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAg
ICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgInByb21pc2UtbWFwLXNlcmllcyI6ICIw
LjIuMyIsCi0gICAgICAgICAgICAicXVpY2stdGVtcCI6ICIwLjEuOCIsCi0gICAgICAgICAgICAi
cmltcmFmIjogIjIuNi4xIiwKLSAgICAgICAgICAgICJzeW1saW5rLW9yLWNvcHkiOiAiMS4xLjgi
Ci0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAid2Fsay1zeW5jIjogewotICAgICAg
ICAgICJ2ZXJzaW9uIjogIjAuMi43IiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9y
ZWdpc3RyeS5ucG1qcy5vcmcvd2Fsay1zeW5jLy0vd2Fsay1zeW5jLTAuMi43LnRneiIsCi0gICAg
ICAgICAgImludGVncml0eSI6ICJzaGExLXRKdms3bWhuWlhycmMybDR0V29wMFEram1Xaz0iLAot
ICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAg
ICAgICJlbnN1cmUtcG9zaXgtcGF0aCI6ICIxLjAuMiIsCi0gICAgICAgICAgICAibWF0Y2hlci1j
b2xsZWN0aW9uIjogIjEuMC40IgotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAg
IH0sCi0gICAgImJyb2Njb2xpLXN0ZXciOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjUuMCIsCi0g
ICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYnJvY2NvbGktc3Rl
dy8tL2Jyb2Njb2xpLXN0ZXctMS41LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS0x
NitNR0ZFZHpsRU9TZE1JcGk1WmQvUmhpRHc9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAg
InJlcXVpcmVzIjogewotICAgICAgICAiYnJvY2NvbGktZGVidWciOiAiMC42LjMiLAotICAgICAg
ICAiYnJvY2NvbGktZnVubmVsIjogIjEuMi4wIiwKLSAgICAgICAgImJyb2Njb2xpLW1lcmdlLXRy
ZWVzIjogIjEuMi40IiwKLSAgICAgICAgImJyb2Njb2xpLXBlcnNpc3RlbnQtZmlsdGVyIjogIjEu
NC4yIiwKLSAgICAgICAgImJyb2Njb2xpLXBsdWdpbiI6ICIxLjMuMCIsCi0gICAgICAgICJjaGFs
ayI6ICIxLjEuMyIsCi0gICAgICAgICJkZWJ1ZyI6ICIyLjYuOCIsCi0gICAgICAgICJlbnN1cmUt
cG9zaXgtcGF0aCI6ICIxLjAuMiIsCi0gICAgICAgICJmcy1leHRyYSI6ICIyLjEuMiIsCi0gICAg
ICAgICJtaW5pbWF0Y2giOiAiMy4wLjQiLAotICAgICAgICAicmVzb2x2ZSI6ICIxLjQuMCIsCi0g
ICAgICAgICJyc3ZwIjogIjMuNi4yIiwKLSAgICAgICAgInN5bWxpbmstb3ItY29weSI6ICIxLjEu
OCIsCi0gICAgICAgICJ3YWxrLXN5bmMiOiAiMC4zLjIiCi0gICAgICB9LAotICAgICAgImRlcGVu
ZGVuY2llcyI6IHsKLSAgICAgICAgImZzLWV4dHJhIjogewotICAgICAgICAgICJ2ZXJzaW9uIjog
IjIuMS4yIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5v
cmcvZnMtZXh0cmEvLS9mcy1leHRyYS0yLjEuMi50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHki
OiAic2hhMS1CR3h3Rmp6dm1xMUdzT1NuK2taL3NpMXgzalU9IiwKLSAgICAgICAgICAiZGV2Ijog
dHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiZ3JhY2VmdWwtZnMi
OiAiNC4xLjExIiwKLSAgICAgICAgICAgICJqc29uZmlsZSI6ICIyLjQuMCIKLSAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJicm9jY29saS11Z2xpZnktc291cmNl
bWFwIjogewotICAgICAgInZlcnNpb24iOiAiMS41LjIiLAotICAgICAgInJlc29sdmVkIjogImh0
dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Jyb2Njb2xpLXVnbGlmeS1zb3VyY2VtYXAvLS9icm9j
Y29saS11Z2xpZnktc291cmNlbWFwLTEuNS4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNo
YTEtQlBoS3NOdFRrREg2aG96UHBXUEpreTFRenRzPSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAg
ICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImJyb2Njb2xpLXBsdWdpbiI6ICIxLjMuMCIsCi0g
ICAgICAgICJkZWJ1ZyI6ICIyLjYuOCIsCi0gICAgICAgICJsb2Rhc2gubWVyZ2UiOiAiNC42LjAi
LAotICAgICAgICAibWF0Y2hlci1jb2xsZWN0aW9uIjogIjEuMC40IiwKLSAgICAgICAgIm1rZGly
cCI6ICIwLjUuMSIsCi0gICAgICAgICJzb3VyY2UtbWFwLXVybCI6ICIwLjMuMCIsCi0gICAgICAg
ICJzeW1saW5rLW9yLWNvcHkiOiAiMS4xLjgiLAotICAgICAgICAidWdsaWZ5LWpzIjogIjIuOC4y
OSIsCi0gICAgICAgICJ3YWxrLXN5bmMiOiAiMC4xLjMiCi0gICAgICB9LAotICAgICAgImRlcGVu
ZGVuY2llcyI6IHsKLSAgICAgICAgIndhbGstc3luYyI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6
ICIwLjEuMyIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMu
b3JnL3dhbGstc3luYy8tL3dhbGstc3luYy0wLjEuMy50Z3oiLAotICAgICAgICAgICJpbnRlZ3Jp
dHkiOiAic2hhMS1pZ2NtR2dDOXBzK3h2aVhwOFFENjFYVkc5WU09IiwKLSAgICAgICAgICAiZGV2
IjogdHJ1ZQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAiYnNlciI6IHsKLSAgICAg
ICJ2ZXJzaW9uIjogIjIuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5
Lm5wbWpzLm9yZy9ic2VyLy0vYnNlci0yLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJz
aGExLW1zZU5QdFhaRllCUDJIckxGWXZIbHhSNkZ4az0iLAotICAgICAgImRldiI6IHRydWUsCi0g
ICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJub2RlLWludDY0IjogIjAuNC4wIgotICAgICAg
fQotICAgIH0sCi0gICAgImJ1aWx0aW5zIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjMiLAot
ICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2J1aWx0aW5zLy0v
YnVpbHRpbnMtMS4wLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS15NVQ2NjJISWFX
UlIyelpUVGhRaStVOEs3b2c9IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAiYnl0
ZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjUuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0
cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYnl0ZXMvLS9ieXRlcy0yLjUuMC50Z3oiLAotICAgICAg
ImludGVncml0eSI6ICJzaGExLVRKUWo2aTBsTENjTVFiSzk3Ky81dTJ0aXdHbz0iLAotICAgICAg
ImRldiI6IHRydWUKLSAgICB9LAotICAgICJjYWxjdWxhdGUtY2FjaGUta2V5LWZvci10cmVlIjog
ewotICAgICAgInZlcnNpb24iOiAiMS4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8v
cmVnaXN0cnkubnBtanMub3JnL2NhbGN1bGF0ZS1jYWNoZS1rZXktZm9yLXRyZWUvLS9jYWxjdWxh
dGUtY2FjaGUta2V5LWZvci10cmVlLTEuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNo
YTEtREQ1Q3ljRTA4OG5lVTFqQThXZVRZbjZwZHRZPSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAg
ICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImpzb24tc3RhYmxlLXN0cmluZ2lmeSI6ICIxLjAu
MSIKLSAgICAgIH0KLSAgICB9LAotICAgICJjYWxsc2l0ZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjog
IjEuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9j
YWxsc2l0ZS8tL2NhbGxzaXRlLTEuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEt
S0FPWTVkWmt2WFFEaTI4SkJSVStib3J4dkNBPSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0s
Ci0gICAgImNhbWVsY2FzZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMi4xIiwKLSAgICAgICJy
ZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jYW1lbGNhc2UvLS9jYW1lbGNh
c2UtMS4yLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1tN1V3VFM0TFZtbUxMSFdM
Q0tQcXFkcWxpams9IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAiY2FuLXN5bWxp
bmsiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0
cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY2FuLXN5bWxpbmsvLS9jYW4tc3ltbGluay0xLjAuMC50
Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLWw3WUgyS2hMdHNiaUtMa0MyR1RzdFpTNTBo
az0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJ0
bXAiOiAiMC4wLjI4IgotICAgICAgfQotICAgIH0sCi0gICAgImNhcHR1cmUtZXhpdCI6IHsKLSAg
ICAgICJ2ZXJzaW9uIjogIjEuMi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lz
dHJ5Lm5wbWpzLm9yZy9jYXB0dXJlLWV4aXQvLS9jYXB0dXJlLWV4aXQtMS4yLjAudGd6IiwKLSAg
ICAgICJpbnRlZ3JpdHkiOiAic2hhMS1IRi9NU0ovUXF3RFU4YXg2NFFjdU1YUDdxMjg9IiwKLSAg
ICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAicnN2cCI6ICIz
LjYuMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJjYXJkaW5hbCI6IHsKLSAgICAgICJ2ZXJzaW9u
IjogIjEuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9y
Zy9jYXJkaW5hbC8tL2NhcmRpbmFsLTEuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNo
YTEtVU9JY0d3cWpkeW41TjMzdkdXdGFuT3lUTHVrPSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAg
ICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImFuc2ljb2xvcnMiOiAiMC4yLjEiLAotICAgICAg
ICAicmVkZXllZCI6ICIxLjAuMSIKLSAgICAgIH0KLSAgICB9LAotICAgICJjZW50ZXItYWxpZ24i
OiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjEuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6
Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY2VudGVyLWFsaWduLy0vY2VudGVyLWFsaWduLTAuMS4zLnRn
eiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtcWcweVlwdHU2WElnQkJITDFFWWNrSHZDdDYw
PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImFs
aWduLXRleHQiOiAiMC4xLjQiLAotICAgICAgICAibGF6eS1jYWNoZSI6ICIxLjAuNCIKLSAgICAg
IH0KLSAgICB9LAotICAgICJjaGFsayI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMS4zIiwKLSAg
ICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jaGFsay8tL2NoYWxr
LTEuMS4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtcUJGY1ZlU25BdjVORlFxOU9I
S0NLbjRKL0pnPSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAg
ICAgICAgImFuc2ktc3R5bGVzIjogIjIuMi4xIiwKLSAgICAgICAgImVzY2FwZS1zdHJpbmctcmVn
ZXhwIjogIjEuMC41IiwKLSAgICAgICAgImhhcy1hbnNpIjogIjIuMC4wIiwKLSAgICAgICAgInN0
cmlwLWFuc2kiOiAiMy4wLjEiLAotICAgICAgICAic3VwcG9ydHMtY29sb3IiOiAiMi4wLjAiCi0g
ICAgICB9Ci0gICAgfSwKLSAgICAiY2hhcm0iOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMiIs
Ci0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY2hhcm0vLS9j
aGFybS0xLjAuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLWl0MDJjVk9tMmFXQk14
QlN4QWtKa2RxWlhqVT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7
Ci0gICAgICAgICJpbmhlcml0cyI6ICIyLjAuMyIKLSAgICAgIH0KLSAgICB9LAotICAgICJjaG9r
aWRhciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuNi4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJo
dHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jaG9raWRhci8tL2Nob2tpZGFyLTEuNi4xLnRneiIs
Ci0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtTDBSSHExNlc1USt6MTRuOWtOVEhMZzVNY01JPSIs
Ci0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImFueW1h
dGNoIjogIjEuMy4yIiwKLSAgICAgICAgImFzeW5jLWVhY2giOiAiMS4wLjEiLAotICAgICAgICAi
ZnNldmVudHMiOiAiMS4xLjIiLAotICAgICAgICAiZ2xvYi1wYXJlbnQiOiAiMi4wLjAiLAotICAg
ICAgICAiaW5oZXJpdHMiOiAiMi4wLjMiLAotICAgICAgICAiaXMtYmluYXJ5LXBhdGgiOiAiMS4w
LjEiLAotICAgICAgICAiaXMtZ2xvYiI6ICIyLjAuMSIsCi0gICAgICAgICJwYXRoLWlzLWFic29s
dXRlIjogIjEuMC4xIiwKLSAgICAgICAgInJlYWRkaXJwIjogIjIuMS4wIgotICAgICAgfQotICAg
IH0sCi0gICAgImNsZWFuLWJhc2UtdXJsIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjAiLAot
ICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NsZWFuLWJhc2Ut
dXJsLy0vY2xlYW4tYmFzZS11cmwtMS4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hh
MS15UUhQQ2lDNWNrTmJEc3pWTFFWb0pLUTFHM3M9IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAg
fSwKLSAgICAiY2xlYW4tY3NzIjogewotICAgICAgInZlcnNpb24iOiAiMy40LjI4IiwKLSAgICAg
ICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jbGVhbi1jc3MvLS9jbGVh
bi1jc3MtMy40LjI4LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtdnhsRjZDL0lDUFZX
bGViZDZ1d0JRQTc5QS84PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6
IHsKLSAgICAgICAgImNvbW1hbmRlciI6ICIyLjguMSIsCi0gICAgICAgICJzb3VyY2UtbWFwIjog
IjAuNC40IgotICAgICAgfSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJjb21t
YW5kZXIiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMi44LjEiLAotICAgICAgICAgICJyZXNv
bHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jb21tYW5kZXIvLS9jb21tYW5kZXIt
Mi44LjEudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTEtQnI0MmYrdjlvTU13cWg0
cUJ5MDl5WFlrSmRRPSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgInJlcXVp
cmVzIjogewotICAgICAgICAgICAgImdyYWNlZnVsLXJlYWRsaW5rIjogIjEuMC4xIgotICAgICAg
ICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgInNvdXJjZS1tYXAiOiB7Ci0gICAgICAgICAgInZl
cnNpb24iOiAiMC40LjQiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5
Lm5wbWpzLm9yZy9zb3VyY2UtbWFwLy0vc291cmNlLW1hcC0wLjQuNC50Z3oiLAotICAgICAgICAg
ICJpbnRlZ3JpdHkiOiAic2hhMS02NlQxMnB3TnlabmVhQU10aTA5MkZ6WlNBMnM9IiwKLSAgICAg
ICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAi
YW1kZWZpbmUiOiAiMS4wLjEiCi0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAg
fSwKLSAgICAiY2xlYW4tY3NzLXByb21pc2UiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjEuMSIs
Ci0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY2xlYW4tY3Nz
LXByb21pc2UvLS9jbGVhbi1jc3MtcHJvbWlzZS0wLjEuMS50Z3oiLAotICAgICAgImludGVncml0
eSI6ICJzaGExLVEvUFN5Ti9MSy9CeFNCSlN6WnQyUXp3STdzcz0iLAotICAgICAgImRldiI6IHRy
dWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJhcnJheS10by1lcnJvciI6ICIxLjEu
MSIsCi0gICAgICAgICJjbGVhbi1jc3MiOiAiMy40LjI4IiwKLSAgICAgICAgInBpbmtpZS1wcm9t
aXNlIjogIjIuMC4xIgotICAgICAgfQotICAgIH0sCi0gICAgImNsaSI6IHsKLSAgICAgICJ2ZXJz
aW9uIjogIjEuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpz
Lm9yZy9jbGkvLS9jbGktMS4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1Jb0Yx
TlBKTCtrbFF3MDFUTFVqc3ZHSWJqQlE9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJl
cXVpcmVzIjogewotICAgICAgICAiZXhpdCI6ICIwLjEuMiIsCi0gICAgICAgICJnbG9iIjogIjcu
MS4yIgotICAgICAgfSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJnbG9iIjog
ewotICAgICAgICAgICJ2ZXJzaW9uIjogIjcuMS4yIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAi
aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZ2xvYi8tL2dsb2ItNy4xLjIudGd6IiwKLSAgICAg
ICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1NSlRVZzFranVMZVFDSitjY0U0VnBhNmtLVlhrUFlK
Mm1PQ1F5VXVLTGNMUXNkck1DcEJQVWk4cVZFNitZdWFKa296ZUE5TnVzVEF3M2hMcjhYZTVFUT09
IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAg
ICAgICAgICAiZnMucmVhbHBhdGgiOiAiMS4wLjAiLAotICAgICAgICAgICAgImluZmxpZ2h0Ijog
IjEuMC42IiwKLSAgICAgICAgICAgICJpbmhlcml0cyI6ICIyLjAuMyIsCi0gICAgICAgICAgICAi
bWluaW1hdGNoIjogIjMuMC40IiwKLSAgICAgICAgICAgICJvbmNlIjogIjEuNC4wIiwKLSAgICAg
ICAgICAgICJwYXRoLWlzLWFic29sdXRlIjogIjEuMC4xIgotICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgICAgfQotICAgIH0sCi0gICAgImNsaS1jdXJzb3IiOiB7Ci0gICAgICAidmVyc2lvbiI6
ICIxLjAuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcv
Y2xpLWN1cnNvci8tL2NsaS1jdXJzb3ItMS4wLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAi
c2hhMS1aTm8vZlZhbFJCTGxsNVM5WXR3MUtWNlBLWWM9IiwKLSAgICAgICJkZXYiOiB0cnVlLAot
ICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAicmVzdG9yZS1jdXJzb3IiOiAiMS4wLjEiCi0g
ICAgICB9Ci0gICAgfSwKLSAgICAiY2xpLXNwaW5uZXJzIjogewotICAgICAgInZlcnNpb24iOiAi
MC4xLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Ns
aS1zcGlubmVycy8tL2NsaS1zcGlubmVycy0wLjEuMi50Z3oiLAotICAgICAgImludGVncml0eSI6
ICJzaGExLXUzWk5pT0dGKzU0ZWFpb2ZHWGNqR1BZRjR4dz0iLAotICAgICAgImRldiI6IHRydWUK
LSAgICB9LAotICAgICJjbGktdGFibGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjMuMSIsCi0g
ICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY2xpLXRhYmxlLy0v
Y2xpLXRhYmxlLTAuMy4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtOVRzRkptcUxH
Z3VUU3owSUllYmkzRmtVcmlNPSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJl
cyI6IHsKLSAgICAgICAgImNvbG9ycyI6ICIxLjAuMyIKLSAgICAgIH0sCi0gICAgICAiZGVwZW5k
ZW5jaWVzIjogewotICAgICAgICAiY29sb3JzIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjEu
MC4zIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcv
Y29sb3JzLy0vY29sb3JzLTEuMC4zLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGEx
LUJEUDBUWUNXZ1AzcllPMG1EeHNNSmk2Q3BBcz0iLAotICAgICAgICAgICJkZXYiOiB0cnVlCi0g
ICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJjbGktdGFibGUyIjogewotICAgICAgInZl
cnNpb24iOiAiMC4yLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBt
anMub3JnL2NsaS10YWJsZTIvLS9jbGktdGFibGUyLTAuMi4wLnRneiIsCi0gICAgICAiaW50ZWdy
aXR5IjogInNoYTEtTFI3MzhoaWc1NGJpRkZRRll0UzlGMy9qTFpjPSIsCi0gICAgICAiZGV2Ijog
dHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImNvbG9ycyI6ICIxLjEuMiIsCi0g
ICAgICAgICJsb2Rhc2giOiAiMy4xMC4xIiwKLSAgICAgICAgInN0cmluZy13aWR0aCI6ICIxLjAu
MiIKLSAgICAgIH0KLSAgICB9LAotICAgICJjbGktd2lkdGgiOiB7Ci0gICAgICAidmVyc2lvbiI6
ICIyLjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcv
Y2xpLXdpZHRoLy0vY2xpLXdpZHRoLTIuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNo
YTEtc2pUS0lKc3A3MmI4VVkyYm1OV0Vld0R0OEFvPSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAg
IH0sCi0gICAgImNsaXVpIjogewotICAgICAgInZlcnNpb24iOiAiMi4xLjAiLAotICAgICAgInJl
c29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NsaXVpLy0vY2xpdWktMi4xLjAu
dGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1TMGRYWVArQUpreDJMRG9YR1FNdWtjZitv
TkU9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAi
Y2VudGVyLWFsaWduIjogIjAuMS4zIiwKLSAgICAgICAgInJpZ2h0LWFsaWduIjogIjAuMS4zIiwK
LSAgICAgICAgIndvcmR3cmFwIjogIjAuMC4yIgotICAgICAgfQotICAgIH0sCi0gICAgImNsb25l
IjogewotICAgICAgInZlcnNpb24iOiAiMi4xLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBz
Oi8vcmVnaXN0cnkubnBtanMub3JnL2Nsb25lLy0vY2xvbmUtMi4xLjEudGd6IiwKLSAgICAgICJp
bnRlZ3JpdHkiOiAic2hhMS0waGZSNldFUmpqckpwTGk3b3loVlU3OWtmTnM9IiwKLSAgICAgICJk
ZXYiOiB0cnVlCi0gICAgfSwKLSAgICAiY29kZS1wb2ludC1hdCI6IHsKLSAgICAgICJ2ZXJzaW9u
IjogIjEuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9y
Zy9jb2RlLXBvaW50LWF0Ly0vY29kZS1wb2ludC1hdC0xLjEuMC50Z3oiLAotICAgICAgImludGVn
cml0eSI6ICJzaGExLURRY0xUUVE2Vytvem92R2tEaTdiUFpwTXozYz0iLAotICAgICAgImRldiI6
IHRydWUKLSAgICB9LAotICAgICJjb2xvci1jb252ZXJ0IjogewotICAgICAgInZlcnNpb24iOiAi
MS45LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Nv
bG9yLWNvbnZlcnQvLS9jb2xvci1jb252ZXJ0LTEuOS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5
IjogInNoYTEtR3N6NWZkYzV1WU8vbVUxVy9zajVXRk5rRzNvPSIsCi0gICAgICAiZGV2IjogdHJ1
ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImNvbG9yLW5hbWUiOiAiMS4xLjMiCi0g
ICAgICB9Ci0gICAgfSwKLSAgICAiY29sb3ItbmFtZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEu
MS4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jb2xv
ci1uYW1lLy0vY29sb3ItbmFtZS0xLjEuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGEx
LXA5QlZpOWljUXZlVjNVSXlqM1FJTWNwVHZDVT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9
LAotICAgICJjb2xvcnMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjEuMiIsCi0gICAgICAicmVz
b2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29sb3JzLy0vY29sb3JzLTEuMS4y
LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtRm9wSEFYVnJhbjlSb1N6Z3lYdjZLTUNF
N1dNPSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJvcHRpb25hbCI6IHRydWUKLSAgICB9
LAotICAgICJjb21tYW5kZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjExLjAiLAotICAgICAg
InJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NvbW1hbmRlci8tL2NvbW1h
bmRlci0yLjExLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWIwNTUzdVlBNVlB
RUdneVlJR1lST3pLUTdYNVJBcWVka2ZqaVp4d2kwa0wxZzNiT2FCTk5aZllrenQvQ0wwdW1nRDV3
YzlKZWMyRmJCOThDamtNUnZRPT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJj
b21tb25lciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMTAuOCIsCi0gICAgICAicmVzb2x2ZWQi
OiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29tbW9uZXIvLS9jb21tb25lci0wLjEwLjgu
dGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1OUHcyY3Mwa09UNkx0SDV3eXFBcE9CSDA4
c1U9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAi
Y29tbWFuZGVyIjogIjIuMTEuMCIsCi0gICAgICAgICJkZXRlY3RpdmUiOiAiNC41LjAiLAotICAg
ICAgICAiZ2xvYiI6ICI1LjAuMTUiLAotICAgICAgICAiZ3JhY2VmdWwtZnMiOiAiNC4xLjExIiwK
LSAgICAgICAgImljb252LWxpdGUiOiAiMC40LjE4IiwKLSAgICAgICAgIm1rZGlycCI6ICIwLjUu
MSIsCi0gICAgICAgICJwcml2YXRlIjogIjAuMS43IiwKLSAgICAgICAgInEiOiAiMS41LjAiLAot
ICAgICAgICAicmVjYXN0IjogIjAuMTEuMjMiCi0gICAgICB9LAotICAgICAgImRlcGVuZGVuY2ll
cyI6IHsKLSAgICAgICAgImVzcHJpbWEiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMy4xLjMi
LAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lc3By
aW1hLy0vZXNwcmltYS0zLjEuMy50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS0v
Y3BSenVZVE9KWGp5STFUWE9TZHYvWXFSak09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZQotICAg
ICAgICB9LAotICAgICAgICAicmVjYXN0IjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjAuMTEu
MjMiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9y
ZWNhc3QvLS9yZWNhc3QtMC4xMS4yMy50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hh
MS1SUi9UQUVxeDVOK2JUa3RtTjJzcUlaRWtZdE09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwK
LSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiYXN0LXR5cGVzIjogIjAuOS42
IiwKLSAgICAgICAgICAgICJlc3ByaW1hIjogIjMuMS4zIiwKLSAgICAgICAgICAgICJwcml2YXRl
IjogIjAuMS43IiwKLSAgICAgICAgICAgICJzb3VyY2UtbWFwIjogIjAuNS42IgotICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgImNvbXBvbmVudC1iaW5kIjogewot
ICAgICAgInZlcnNpb24iOiAiMS4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVn
aXN0cnkubnBtanMub3JnL2NvbXBvbmVudC1iaW5kLy0vY29tcG9uZW50LWJpbmQtMS4wLjAudGd6
IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1BTVlJcTMzTms0bDhBQWxsR3gwNmpoNXp1OUU9
IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAiY29tcG9uZW50LWVtaXR0ZXIiOiB7
Ci0gICAgICAidmVyc2lvbiI6ICIxLjEuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9y
ZWdpc3RyeS5ucG1qcy5vcmcvY29tcG9uZW50LWVtaXR0ZXIvLS9jb21wb25lbnQtZW1pdHRlci0x
LjEuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLUtXV1U4blU5cW1PWmJTcndqUldw
VVJiSnJzTT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJjb21wb25lbnQtaW5o
ZXJpdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMC4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJo
dHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jb21wb25lbnQtaW5oZXJpdC8tL2NvbXBvbmVudC1p
bmhlcml0LTAuMC4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtWkYvRXJmV0xjclpK
MWNybVVUVmhuYkp2OFVNPSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgImNvbXBy
ZXNzaWJsZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4xMSIsCi0gICAgICAicmVzb2x2ZWQi
OiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29tcHJlc3NpYmxlLy0vY29tcHJlc3NpYmxl
LTIuMC4xMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLUZuR0tkZDRvUHRqbUJBUVdK
YUlHUllaNWZZbz0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0g
ICAgICAgICJtaW1lLWRiIjogIjEuMjkuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJjb21wcmVz
c2lvbiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuNy4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJo
dHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jb21wcmVzc2lvbi8tL2NvbXByZXNzaW9uLTEuNy4w
LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtQXd5ZkdZOFdRNkJYMTNhbk9Pa2kya056
QVMwPSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAg
ImFjY2VwdHMiOiAiMS4zLjMiLAotICAgICAgICAiYnl0ZXMiOiAiMi41LjAiLAotICAgICAgICAi
Y29tcHJlc3NpYmxlIjogIjIuMC4xMSIsCi0gICAgICAgICJkZWJ1ZyI6ICIyLjYuOCIsCi0gICAg
ICAgICJvbi1oZWFkZXJzIjogIjEuMC4xIiwKLSAgICAgICAgInNhZmUtYnVmZmVyIjogIjUuMS4x
IiwKLSAgICAgICAgInZhcnkiOiAiMS4xLjEiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiY29uY2F0
LW1hcCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJo
dHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jb25jYXQtbWFwLy0vY29uY2F0LW1hcC0wLjAuMS50
Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLTJLbHIxMy9XamZkNU9uTURhanVnMVVCZFIz
cz0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJjb25jYXQtc3RyZWFtIjogewot
ICAgICAgInZlcnNpb24iOiAiMS42LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVn
aXN0cnkubnBtanMub3JnL2NvbmNhdC1zdHJlYW0vLS9jb25jYXQtc3RyZWFtLTEuNi4wLnRneiIs
Ci0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtQ3F4bUw5VXI1NGxrMVZNdmFVZUU1d0VRclBjPSIs
Ci0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImluaGVy
aXRzIjogIjIuMC4zIiwKLSAgICAgICAgInJlYWRhYmxlLXN0cmVhbSI6ICIyLjMuMyIsCi0gICAg
ICAgICJ0eXBlZGFycmF5IjogIjAuMC42IgotICAgICAgfSwKLSAgICAgICJkZXBlbmRlbmNpZXMi
OiB7Ci0gICAgICAgICJyZWFkYWJsZS1zdHJlYW0iOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAi
Mi4zLjMiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9y
Zy9yZWFkYWJsZS1zdHJlYW0vLS9yZWFkYWJsZS1zdHJlYW0tMi4zLjMudGd6IiwKLSAgICAgICAg
ICAiaW50ZWdyaXR5IjogInNoYTUxMi1tK3F6emNuN0tVeEVtZDFnTWJjaEYrWTJlSVViaWVVYXhr
V3RwdHlIeXdyWDByRThRRVlxUEMwN1Z1eTRXbTMyL3hFMTZOY2RCY3RiOFMwWGUvNUllUT09IiwK
LSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAg
ICAgICAiY29yZS11dGlsLWlzIjogIjEuMC4yIiwKLSAgICAgICAgICAgICJpbmhlcml0cyI6ICIy
LjAuMyIsCi0gICAgICAgICAgICAiaXNhcnJheSI6ICIxLjAuMCIsCi0gICAgICAgICAgICAicHJv
Y2Vzcy1uZXh0aWNrLWFyZ3MiOiAiMS4wLjciLAotICAgICAgICAgICAgInNhZmUtYnVmZmVyIjog
IjUuMS4xIiwKLSAgICAgICAgICAgICJzdHJpbmdfZGVjb2RlciI6ICIxLjAuMyIsCi0gICAgICAg
ICAgICAidXRpbC1kZXByZWNhdGUiOiAiMS4wLjIiCi0gICAgICAgICAgfQotICAgICAgICB9LAot
ICAgICAgICAic3RyaW5nX2RlY29kZXIiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMS4wLjMi
LAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zdHJp
bmdfZGVjb2Rlci8tL3N0cmluZ19kZWNvZGVyLTEuMC4zLnRneiIsCi0gICAgICAgICAgImludGVn
cml0eSI6ICJzaGE1MTItNEFINlo1ZnpOTkJjSCs2WERNZkEvQlR0ODdza3hxSmxPMGxBaDNEa2Vy
NXpUaGNBeEc2bUt6K2lHdTMwOFVLb1BQUThEY3F4LzRKaHVqemx0UmEraFE9PSIsCi0gICAgICAg
ICAgImRldiI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgInNh
ZmUtYnVmZmVyIjogIjUuMS4xIgotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAg
IH0sCi0gICAgImNvbmZpZ3N0b3JlIjogewotICAgICAgInZlcnNpb24iOiAiMy4xLjEiLAotICAg
ICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NvbmZpZ3N0b3JlLy0v
Y29uZmlnc3RvcmUtMy4xLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTVvTmtE
L0wrK2wwTzZ4R1h4YjFFV1M3U2l2dGpmR1FsUnl4SnNZZ0UwWjQ5NS9MODFlMmg0L2Qzcjk2OWhv
UFh1Rkl0ek5PS010c1hnWUc0YzdkWXZ3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAi
cmVxdWlyZXMiOiB7Ci0gICAgICAgICJkb3QtcHJvcCI6ICI0LjIuMCIsCi0gICAgICAgICJncmFj
ZWZ1bC1mcyI6ICI0LjEuMTEiLAotICAgICAgICAibWFrZS1kaXIiOiAiMS4wLjAiLAotICAgICAg
ICAidW5pcXVlLXN0cmluZyI6ICIxLjAuMCIsCi0gICAgICAgICJ3cml0ZS1maWxlLWF0b21pYyI6
ICIyLjEuMCIsCi0gICAgICAgICJ4ZGctYmFzZWRpciI6ICIzLjAuMCIKLSAgICAgIH0KLSAgICB9
LAotICAgICJjb25zb2xlLWJyb3dzZXJpZnkiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjEuMCIs
Ci0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29uc29sZS1i
cm93c2VyaWZ5Ly0vY29uc29sZS1icm93c2VyaWZ5LTEuMS4wLnRneiIsCi0gICAgICAiaW50ZWdy
aXR5IjogInNoYTEtOENRY1JYTUtuOFl5T3lCdHZ6anR4MEhRdXhBPSIsCi0gICAgICAiZGV2Ijog
dHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImRhdGUtbm93IjogIjAuMS40Igot
ICAgICAgfQotICAgIH0sCi0gICAgImNvbnNvbGUtY29udHJvbC1zdHJpbmdzIjogewotICAgICAg
InZlcnNpb24iOiAiMS4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnku
bnBtanMub3JnL2NvbnNvbGUtY29udHJvbC1zdHJpbmdzLy0vY29uc29sZS1jb250cm9sLXN0cmlu
Z3MtMS4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1QWHowUmsyMlJHNm1STDlM
T1ZCL21GRUFqbzQ9IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAiY29uc29sZS11
aSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRw
czovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jb25zb2xlLXVpLy0vY29uc29sZS11aS0xLjAuMy50Z3oi
LAotICAgICAgImludGVncml0eSI6ICJzaGExLU1jVWtSaHRqUWlkcCtlaWNGelNWMlJPVGNodz0i
LAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJjaGFs
ayI6ICIxLjEuMyIsCi0gICAgICAgICJpbnF1aXJlciI6ICIxLjIuMyIsCi0gICAgICAgICJvcmEi
OiAiMC4yLjMiLAotICAgICAgICAidGhyb3VnaCI6ICIyLjMuOCIKLSAgICAgIH0KLSAgICB9LAot
ICAgICJjb25zb2xpZGF0ZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMTQuNSIsCi0gICAgICAi
cmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29uc29saWRhdGUvLS9jb25z
b2xpZGF0ZS0wLjE0LjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1XaVVFZThkdmN3
Y21aOGpMVXNtSmlJOUpUR009IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVz
IjogewotICAgICAgICAiYmx1ZWJpcmQiOiAiMy41LjAiCi0gICAgICB9LAotICAgICAgImRlcGVu
ZGVuY2llcyI6IHsKLSAgICAgICAgImJsdWViaXJkIjogewotICAgICAgICAgICJ2ZXJzaW9uIjog
IjMuNS4wIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5v
cmcvYmx1ZWJpcmQvLS9ibHVlYmlyZC0zLjUuMC50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHki
OiAic2hhMS1lUlFnMS9WUjdxS0pkRk9vcDNaVCtXWUcxbnc9IiwKLSAgICAgICAgICAiZGV2Ijog
dHJ1ZQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAiY29udGVudC1kaXNwb3NpdGlv
biI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuNS4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRw
czovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jb250ZW50LWRpc3Bvc2l0aW9uLy0vY29udGVudC1kaXNw
b3NpdGlvbi0wLjUuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLURQYUx1ZDMxOHI1
NVljT29VWGpMaGR1bmpMUT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJjb250
ZW50LXR5cGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMiIsCi0gICAgICAicmVzb2x2ZWQi
OiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29udGVudC10eXBlLy0vY29udGVudC10eXBl
LTEuMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtdDlFVHJ1ZW8zU2U5SVJNOFRj
SlNuZkZ5SHUwPSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgImNvbnRpbnVhYmxl
LWNhY2hlIjogewotICAgICAgInZlcnNpb24iOiAiMC4zLjEiLAotICAgICAgInJlc29sdmVkIjog
Imh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NvbnRpbnVhYmxlLWNhY2hlLy0vY29udGludWFi
bGUtY2FjaGUtMC4zLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS12WEo2ZjY3WGZu
SC9PWVdza3pVYWtTY3pyUTg9IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAiY29u
dmVydC1zb3VyY2UtbWFwIjogewotICAgICAgInZlcnNpb24iOiAiMS41LjAiLAotICAgICAgInJl
c29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NvbnZlcnQtc291cmNlLW1hcC8t
L2NvbnZlcnQtc291cmNlLW1hcC0xLjUuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGEx
LW1zMXdoUnh0WGYzWlBaS0M1ZTM1U2dQL1JyVT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9
LAotICAgICJjb29raWUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjMuMSIsCi0gICAgICAicmVz
b2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29va2llLy0vY29va2llLTAuMy4x
LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtNStDaCtlOUR0TWk2a2x4Y1dwYm9CdEZv
YzdzPSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgImNvb2tpZS1zaWduYXR1cmUi
OiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuNiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6
Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29va2llLXNpZ25hdHVyZS8tL2Nvb2tpZS1zaWduYXR1cmUt
MS4wLjYudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS00d09vZ3JOQ3pEN295bEU2ZVpt
WE5OcXpyaXc9IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAiY29weS1kZXJlZmVy
ZW5jZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJo
dHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jb3B5LWRlcmVmZXJlbmNlLy0vY29weS1kZXJlZmVy
ZW5jZS0xLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLWF4TVlaVUlQMkJ0Qk82
bVV0RTAyVlRFUlVyWT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJjb3JlLWpz
IjogewotICAgICAgInZlcnNpb24iOiAiMS4yLjciLAotICAgICAgInJlc29sdmVkIjogImh0dHBz
Oi8vcmVnaXN0cnkubnBtanMub3JnL2NvcmUtanMvLS9jb3JlLWpzLTEuMi43LnRneiIsCi0gICAg
ICAiaW50ZWdyaXR5IjogInNoYTEtWlNLVXdVWlIyeWo2azcwdFgvS1lPazhJeGpZPSIsCi0gICAg
ICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgImNvcmUtb2JqZWN0IjogewotICAgICAgInZlcnNp
b24iOiAiMy4xLjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMu
b3JnL2NvcmUtb2JqZWN0Ly0vY29yZS1vYmplY3QtMy4xLjQudGd6IiwKLSAgICAgICJpbnRlZ3Jp
dHkiOiAic2hhMS1iZlFCNkZnU1MrbjNWeTlNU2pUR0ZRbFMxTFk9IiwKLSAgICAgICJkZXYiOiB0
cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiY2hhbGsiOiAiMi4xLjAiCi0gICAg
ICB9LAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImFuc2ktc3R5bGVzIjogewot
ICAgICAgICAgICJ2ZXJzaW9uIjogIjMuMi4wIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0
cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYW5zaS1zdHlsZXMvLS9hbnNpLXN0eWxlcy0zLjIuMC50
Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU5uU09tTUVZdFZSMkpWTUlHVHp5
blJra2F4dGlxMXhuRkJjZFFEL0RuTkNZUG9FUHNWSmhNOThCRHlhb05PUUlpN3A0b2tkaTNFMjdl
TjdHUWJzVXVnPT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJl
cyI6IHsKLSAgICAgICAgICAgICJjb2xvci1jb252ZXJ0IjogIjEuOS4wIgotICAgICAgICAgIH0K
LSAgICAgICAgfSwKLSAgICAgICAgImNoYWxrIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjIu
MS4wIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcv
Y2hhbGsvLS9jaGFsay0yLjEuMC50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEy
LUxVSEdTL2RnZTR1amJYTUpybmloWU1jTDRBb093ZUdudzlUcDNrUXVxeTFLeDVjMXFLanF2TUpa
Nm5WSlBNV0p0S0NUTjcyWm9nSDNvZVNPOWc5clhRPT0iLAotICAgICAgICAgICJkZXYiOiB0cnVl
LAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJhbnNpLXN0eWxlcyI6ICIz
LjIuMCIsCi0gICAgICAgICAgICAiZXNjYXBlLXN0cmluZy1yZWdleHAiOiAiMS4wLjUiLAotICAg
ICAgICAgICAgInN1cHBvcnRzLWNvbG9yIjogIjQuMi4xIgotICAgICAgICAgIH0KLSAgICAgICAg
fSwKLSAgICAgICAgInN1cHBvcnRzLWNvbG9yIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjQu
Mi4xIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcv
c3VwcG9ydHMtY29sb3IvLS9zdXBwb3J0cy1jb2xvci00LjIuMS50Z3oiLAotICAgICAgICAgICJp
bnRlZ3JpdHkiOiAic2hhNTEyLXF4ellzb2IzeXY2VSt4TXpQcnYxNzB5OEF3R1A3aTc0ZytwYml4
Q2ZENnJnc284QnNjTFQycVhJdXo2VHBPYWlKWjNtRmdUNU85bHlUOW5NVTRMZmFBPT0iLAotICAg
ICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAg
ICJoYXMtZmxhZyI6ICIyLjAuMCIKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAg
ICB9LAotICAgICJjb3JlLXV0aWwtaXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMiIsCi0g
ICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29yZS11dGlsLWlz
Ly0vY29yZS11dGlsLWlzLTEuMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtdGYx
VUlncWl2RnExZXF0eFFNbEFkVVVEd2FjPSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0g
ICAgImNyb3NzLXNwYXduIjogewotICAgICAgInZlcnNpb24iOiAiNS4xLjAiLAotICAgICAgInJl
c29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Nyb3NzLXNwYXduLy0vY3Jvc3Mt
c3Bhd24tNS4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS02TDBPL3VXUHovYjQr
VVVRb0tWVXUvb2pWRWs9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjog
ewotICAgICAgICAibHJ1LWNhY2hlIjogIjQuMS4xIiwKLSAgICAgICAgInNoZWJhbmctY29tbWFu
ZCI6ICIxLjIuMCIsCi0gICAgICAgICJ3aGljaCI6ICIxLjMuMCIKLSAgICAgIH0KLSAgICB9LAot
ICAgICJjcnlwdG8iOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjAuMyIsCi0gICAgICAicmVzb2x2
ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY3J5cHRvLy0vY3J5cHRvLTAuMC4zLnRn
eiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtUndxQnVHdmt4ZTRYck1nZ2VoOVRGYTRnMjdB
PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgImNyeXB0by1yYW5kb20tc3RyaW5n
IjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBz
Oi8vcmVnaXN0cnkubnBtanMub3JnL2NyeXB0by1yYW5kb20tc3RyaW5nLy0vY3J5cHRvLXJhbmRv
bS1zdHJpbmctMS4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1vakQyVDFhREVP
RkpnQW1VQjVEc21WUmJ5bjQ9IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAiZGFn
LW1hcCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJo
dHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kYWctbWFwLy0vZGFnLW1hcC0yLjAuMi50Z3oiLAot
ICAgICAgImludGVncml0eSI6ICJzaGExLWx4UzBjdDZDb1lROTR2dXB0b2RwT01xMFRHZz0iLAot
ICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJkYXRlLW5vdyI6IHsKLSAgICAgICJ2ZXJz
aW9uIjogIjAuMS40IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpz
Lm9yZy9kYXRlLW5vdy8tL2RhdGUtbm93LTAuMS40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5Ijog
InNoYTEtNnZRNS9VMUlTSzEwNWN4OXZ2SUFaeXVlTkZzPSIsCi0gICAgICAiZGV2IjogdHJ1ZQot
ICAgIH0sCi0gICAgImRlYnVnIjogewotICAgICAgInZlcnNpb24iOiAiMi42LjgiLAotICAgICAg
InJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RlYnVnLy0vZGVidWctMi42
LjgudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS01ekZUSEtMdDRuMFlnaUpDZmFGNElk
YVA5UHc9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAg
ICAibXMiOiAiMi4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiZGVjYW1lbGl6ZSI6IHsKLSAg
ICAgICJ2ZXJzaW9uIjogIjEuMi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lz
dHJ5Lm5wbWpzLm9yZy9kZWNhbWVsaXplLy0vZGVjYW1lbGl6ZS0xLjIuMC50Z3oiLAotICAgICAg
ImludGVncml0eSI6ICJzaGExLTlsTk5GUlNDYWJJRFV1ZSs0bTlRSDVvWkVwQT0iLAotICAgICAg
ImRldiI6IHRydWUKLSAgICB9LAotICAgICJkZWZpbmVkIjogewotICAgICAgInZlcnNpb24iOiAi
MS4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Rl
ZmluZWQvLS9kZWZpbmVkLTEuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEteVky
Ynp2ZFdkQmlPRVFscEZSR1o0NXNmcHBNPSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0g
ICAgImRlZnMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjEuMSIsCi0gICAgICAicmVzb2x2ZWQi
OiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZGVmcy8tL2RlZnMtMS4xLjEudGd6IiwKLSAg
ICAgICJpbnRlZ3JpdHkiOiAic2hhMS1zaVlKOHNlaEc2ZWoyeEZvQmNFNXNjci9xZEk9IiwKLSAg
ICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiYWx0ZXIiOiAi
MC4yLjAiLAotICAgICAgICAiYXN0LXRyYXZlcnNlIjogIjAuMS4xIiwKLSAgICAgICAgImJyZWFr
YWJsZSI6ICIxLjAuMCIsCi0gICAgICAgICJlc3ByaW1hLWZiIjogIjE1MDAxLjEwMDEuMC1kZXYt
aGFybW9ueS1mYiIsCi0gICAgICAgICJzaW1wbGUtZm10IjogIjAuMS4wIiwKLSAgICAgICAgInNp
bXBsZS1pcyI6ICIwLjIuMCIsCi0gICAgICAgICJzdHJpbmdtYXAiOiAiMC4yLjIiLAotICAgICAg
ICAic3RyaW5nc2V0IjogIjAuMi4xIiwKLSAgICAgICAgInRyeW9yIjogIjAuMS4yIiwKLSAgICAg
ICAgInlhcmdzIjogIjMuMjcuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJkZWxlZ2F0ZXMiOiB7
Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9y
ZWdpc3RyeS5ucG1qcy5vcmcvZGVsZWdhdGVzLy0vZGVsZWdhdGVzLTEuMC4wLnRneiIsCi0gICAg
ICAiaW50ZWdyaXR5IjogInNoYTEtaE1iaFdiZ1pCUDNLV2FEdlJNMkhEVEVsRDVvPSIsCi0gICAg
ICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgImRlcGQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIx
LjEuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZGVw
ZC8tL2RlcGQtMS4xLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1WNE8wNGNSWjhH
K2x5aWY1a2ZQUWJub3hBMWs9IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAiZGVz
dHJveSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC40IiwKLSAgICAgICJyZXNvbHZlZCI6ICJo
dHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kZXN0cm95Ly0vZGVzdHJveS0xLjAuNC50Z3oiLAot
ICAgICAgImludGVncml0eSI6ICJzaGExLWw0aFhSQ3hFZEo1Q0JtRStONVJpQllKcXZZQT0iLAot
ICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJkZXRlY3QtZmlsZSI6IHsKLSAgICAgICJ2
ZXJzaW9uIjogIjAuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5w
bWpzLm9yZy9kZXRlY3QtZmlsZS8tL2RldGVjdC1maWxlLTAuMS4wLnRneiIsCi0gICAgICAiaW50
ZWdyaXR5IjogInNoYTEtU1RYZTM5bEloa2pnQnJBU2xXYnBPR2NSNm1NPSIsCi0gICAgICAiZGV2
IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImZzLWV4aXN0cy1zeW5jIjog
IjAuMS4wIgotICAgICAgfQotICAgIH0sCi0gICAgImRldGVjdC1pbmRlbnQiOiB7Ci0gICAgICAi
dmVyc2lvbiI6ICIzLjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5u
cG1qcy5vcmcvZGV0ZWN0LWluZGVudC8tL2RldGVjdC1pbmRlbnQtMy4wLjEudGd6IiwKLSAgICAg
ICJpbnRlZ3JpdHkiOiAic2hhMS1uY1hsM2J6dStESlhaTGxGR3dLOGJWUUlUM1U9IiwKLSAgICAg
ICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiZ2V0LXN0ZGluIjog
IjQuMC4xIiwKLSAgICAgICAgIm1pbmltaXN0IjogIjEuMi4wIiwKLSAgICAgICAgInJlcGVhdGlu
ZyI6ICIxLjEuMyIKLSAgICAgIH0sCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAi
bWluaW1pc3QiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMS4yLjAiLAotICAgICAgICAgICJy
ZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9taW5pbWlzdC8tL21pbmltaXN0
LTEuMi4wLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGExLW8xQUlzZzlCT0Q3c0g3
a1U5TTFkOTVvbVFvUT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlCi0gICAgICAgIH0KLSAgICAg
IH0KLSAgICB9LAotICAgICJkZXRlY3RpdmUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjUuMCIs
Ci0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZGV0ZWN0aXZl
Ly0vZGV0ZWN0aXZlLTQuNS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtYmxxTWF5
Ym14NkpVc2NhMjEwa05tT3lSN2RFPSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1
aXJlcyI6IHsKLSAgICAgICAgImFjb3JuIjogIjQuMC4xMyIsCi0gICAgICAgICJkZWZpbmVkIjog
IjEuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgImRpZmYiOiB7Ci0gICAgICAidmVyc2lvbiI6
ICIzLjMuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcv
ZGlmZi8tL2RpZmYtMy4zLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXcwWFp1
YkZXbjBBZGxzYXBqOUVBV1gwRnFXZE80dHo4a2MzUmlZZFdMaDRrL1Y4UFRiNmkwU01nWHQwdlJN
M3p5S25UOHRLTzdtVWxpZVJRSElqTU5nPT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAot
ICAgICJkb20tc2VyaWFsaXplciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMS4wIiwKLSAgICAg
ICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kb20tc2VyaWFsaXplci8t
L2RvbS1zZXJpYWxpemVyLTAuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtQnp4
cGRVYk9CNERPSTc1S0tPS1Q1QXZERElJPSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJy
ZXF1aXJlcyI6IHsKLSAgICAgICAgImRvbWVsZW1lbnR0eXBlIjogIjEuMS4zIiwKLSAgICAgICAg
ImVudGl0aWVzIjogIjEuMS4xIgotICAgICAgfSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0g
ICAgICAgICJkb21lbGVtZW50dHlwZSI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIxLjEuMyIs
Ci0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RvbWVs
ZW1lbnR0eXBlLy0vZG9tZWxlbWVudHR5cGUtMS4xLjMudGd6IiwKLSAgICAgICAgICAiaW50ZWdy
aXR5IjogInNoYTEtdlNoM1BpWkNpQnJzVVZSSkpDbWNYTmdpR0ZzPSIsCi0gICAgICAgICAgImRl
diI6IHRydWUKLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgImRvbWVsZW1lbnR0eXBl
IjogewotICAgICAgInZlcnNpb24iOiAiMS4zLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBz
Oi8vcmVnaXN0cnkubnBtanMub3JnL2RvbWVsZW1lbnR0eXBlLy0vZG9tZWxlbWVudHR5cGUtMS4z
LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1zWHJ0Z3VpcldlVXQyY0diRjFiZy9C
aHlCTUk9IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAiZG9taGFuZGxlciI6IHsK
LSAgICAgICJ2ZXJzaW9uIjogIjIuMy4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3Jl
Z2lzdHJ5Lm5wbWpzLm9yZy9kb21oYW5kbGVyLy0vZG9taGFuZGxlci0yLjMuMC50Z3oiLAotICAg
ICAgImludGVncml0eSI6ICJzaGExLUxlV2FDQ0xWQW4rci8yOERMQ3Nsb3FpcjV6Zz0iLAotICAg
ICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJkb21lbGVtZW50
dHlwZSI6ICIxLjMuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJkb211dGlscyI6IHsKLSAgICAg
ICJ2ZXJzaW9uIjogIjEuNS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5
Lm5wbWpzLm9yZy9kb211dGlscy8tL2RvbXV0aWxzLTEuNS4xLnRneiIsCi0gICAgICAiaW50ZWdy
aXR5IjogInNoYTEtM05oSWlpYjFZOVlRZWVTTW4zdCtNamMyZ3M4PSIsCi0gICAgICAiZGV2Ijog
dHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImRvbS1zZXJpYWxpemVyIjogIjAu
MS4wIiwKLSAgICAgICAgImRvbWVsZW1lbnR0eXBlIjogIjEuMy4wIgotICAgICAgfQotICAgIH0s
Ci0gICAgImRvdC1wcm9wIjogewotICAgICAgInZlcnNpb24iOiAiNC4yLjAiLAotICAgICAgInJl
c29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RvdC1wcm9wLy0vZG90LXByb3At
NC4yLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXRVTVhyeGxFeFNXNlUyRVhp
aUtHU0JWZFlndFY4cWxITCtDMTBUc1c0UFVSWS9pYytlYXlzblNrd0I0a0EvbUJsQ3l5L0lLREor
TGMzd2JXZWFYdHVRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7
Ci0gICAgICAgICJpcy1vYmoiOiAiMS4wLjEiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiZWRpdGlv
bnMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjMuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0
cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZWRpdGlvbnMvLS9lZGl0aW9ucy0xLjMuMy50Z3oiLAot
ICAgICAgImludGVncml0eSI6ICJzaGExLUNRY1FHOTJpRDZ3OHZqTk1KOHZRYUkzSm1scz0iLAot
ICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJlZS1maXJzdCI6IHsKLSAgICAgICJ2ZXJz
aW9uIjogIjEuMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpz
Lm9yZy9lZS1maXJzdC8tL2VlLWZpcnN0LTEuMS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5Ijog
InNoYTEtV1F4aEZXc0s0dlR3SlZjeW9WaXlacnhXc2gwPSIsCi0gICAgICAiZGV2IjogdHJ1ZQot
ICAgIH0sCi0gICAgImVtYmVyLWFqYXgiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjUuNiIsCi0g
ICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZW1iZXItYWpheC8t
L2VtYmVyLWFqYXgtMi41LjYudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1wMTkwUE04
YmxlbDVwYytXQVRzOXVvK21KZVE9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVp
cmVzIjogewotICAgICAgICAiZW1iZXItY2xpLWJhYmVsIjogIjUuMi40IgotICAgICAgfQotICAg
IH0sCi0gICAgImVtYmVyLWNsaSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMTQuMiIsCi0gICAg
ICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZW1iZXItY2xpLy0vZW1i
ZXItY2xpLTIuMTQuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLThzakhYVWhzNXN4
cmYvdkNMcjc0c3l1eVFyYz0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMi
OiB7Ci0gICAgICAgICJhbWQtbmFtZS1yZXNvbHZlciI6ICIwLjAuNiIsCi0gICAgICAgICJiYWJl
bC1wbHVnaW4tdHJhbnNmb3JtLWVzMjAxNS1tb2R1bGVzLWFtZCI6ICI2LjI0LjEiLAotICAgICAg
ICAiYm93ZXItY29uZmlnIjogIjEuNC4wIiwKLSAgICAgICAgImJvd2VyLWVuZHBvaW50LXBhcnNl
ciI6ICIwLjIuMiIsCi0gICAgICAgICJicm9jY29saS1iYWJlbC10cmFuc3BpbGVyIjogIjYuMS4y
IiwKLSAgICAgICAgImJyb2Njb2xpLWJyb2NmaWxlLWxvYWRlciI6ICIwLjE4LjAiLAotICAgICAg
ICAiYnJvY2NvbGktYnVpbGRlciI6ICIwLjE4LjgiLAotICAgICAgICAiYnJvY2NvbGktY29uY2F0
IjogIjMuMi4yIiwKLSAgICAgICAgImJyb2Njb2xpLWNvbmZpZy1sb2FkZXIiOiAiMS4wLjEiLAot
ICAgICAgICAiYnJvY2NvbGktY29uZmlnLXJlcGxhY2UiOiAiMS4xLjIiLAotICAgICAgICAiYnJv
Y2NvbGktZnVubmVsIjogIjEuMi4wIiwKLSAgICAgICAgImJyb2Njb2xpLWZ1bm5lbC1yZWR1Y2Vy
IjogIjEuMC4wIiwKLSAgICAgICAgImJyb2Njb2xpLW1lcmdlLXRyZWVzIjogIjIuMC4wIiwKLSAg
ICAgICAgImJyb2Njb2xpLW1pZGRsZXdhcmUiOiAiMS4wLjAiLAotICAgICAgICAiYnJvY2NvbGkt
c291cmNlIjogIjEuMS4wIiwKLSAgICAgICAgImJyb2Njb2xpLXN0ZXciOiAiMS41LjAiLAotICAg
ICAgICAiY2FsY3VsYXRlLWNhY2hlLWtleS1mb3ItdHJlZSI6ICIxLjEuMCIsCi0gICAgICAgICJj
YXB0dXJlLWV4aXQiOiAiMS4yLjAiLAotICAgICAgICAiY2hhbGsiOiAiMS4xLjMiLAotICAgICAg
ICAiY2xlYW4tYmFzZS11cmwiOiAiMS4wLjAiLAotICAgICAgICAiY29tcHJlc3Npb24iOiAiMS43
LjAiLAotICAgICAgICAiY29uZmlnc3RvcmUiOiAiMy4xLjEiLAotICAgICAgICAiY29uc29sZS11
aSI6ICIxLjAuMyIsCi0gICAgICAgICJjb3JlLW9iamVjdCI6ICIzLjEuNCIsCi0gICAgICAgICJk
YWctbWFwIjogIjIuMC4yIiwKLSAgICAgICAgImRpZmYiOiAiMy4zLjAiLAotICAgICAgICAiZW1i
ZXItY2xpLWJyb2Njb2xpLXNhbmUtd2F0Y2hlciI6ICIyLjAuNCIsCi0gICAgICAgICJlbWJlci1j
bGktZ2V0LWNvbXBvbmVudC1wYXRoLW9wdGlvbiI6ICIxLjAuMCIsCi0gICAgICAgICJlbWJlci1j
bGktaXMtcGFja2FnZS1taXNzaW5nIjogIjEuMC4wIiwKLSAgICAgICAgImVtYmVyLWNsaS1sZWdh
Y3ktYmx1ZXByaW50cyI6ICIwLjEuNSIsCi0gICAgICAgICJlbWJlci1jbGktbG9kYXNoLXN1YnNl
dCI6ICIxLjAuMTIiLAotICAgICAgICAiZW1iZXItY2xpLW5vcm1hbGl6ZS1lbnRpdHktbmFtZSI6
ICIxLjAuMCIsCi0gICAgICAgICJlbWJlci1jbGktcHJlcHJvY2Vzcy1yZWdpc3RyeSI6ICIzLjEu
MSIsCi0gICAgICAgICJlbWJlci1jbGktc3RyaW5nLXV0aWxzIjogIjEuMS4wIiwKLSAgICAgICAg
ImVtYmVyLXRyeSI6ICIwLjIuMTYiLAotICAgICAgICAiZW5zdXJlLXBvc2l4LXBhdGgiOiAiMS4w
LjIiLAotICAgICAgICAiZXNjYXBlLXN0cmluZy1yZWdleHAiOiAiMS4wLjUiLAotICAgICAgICAi
ZXhlY2EiOiAiMC42LjMiLAotICAgICAgICAiZXhpc3RzLXN5bmMiOiAiMC4wLjQiLAotICAgICAg
ICAiZXhpdCI6ICIwLjEuMiIsCi0gICAgICAgICJleHByZXNzIjogIjQuMTUuNCIsCi0gICAgICAg
ICJmaWxlc2l6ZSI6ICIzLjUuMTAiLAotICAgICAgICAiZmluZC11cCI6ICIyLjEuMCIsCi0gICAg
ICAgICJmcy1leHRyYSI6ICIzLjAuMSIsCi0gICAgICAgICJmcy10cmVlLWRpZmYiOiAiMC41LjYi
LAotICAgICAgICAiZ2V0LWNhbGxlci1maWxlIjogIjEuMC4yIiwKLSAgICAgICAgImdpdC1yZXBv
LWluZm8iOiAiMS40LjEiLAotICAgICAgICAiZ2xvYiI6ICI3LjEuMSIsCi0gICAgICAgICJoZWlt
ZGFsbGpzIjogIjAuMi41IiwKLSAgICAgICAgImhlaW1kYWxsanMtZnMtbW9uaXRvciI6ICIwLjEu
MCIsCi0gICAgICAgICJoZWltZGFsbGpzLWdyYXBoIjogIjAuMy4zIiwKLSAgICAgICAgImhlaW1k
YWxsanMtbG9nZ2VyIjogIjAuMS45IiwKLSAgICAgICAgImh0dHAtcHJveHkiOiAiMS4xNi4yIiwK
LSAgICAgICAgImluZmxlY3Rpb24iOiAiMS4xMi4wIiwKLSAgICAgICAgImlzLWdpdC11cmwiOiAi
MC4yLjMiLAotICAgICAgICAiaXNiaW5hcnlmaWxlIjogIjMuMC4yIiwKLSAgICAgICAgImpzLXlh
bWwiOiAiMy45LjEiLAotICAgICAgICAianNvbi1zdGFibGUtc3RyaW5naWZ5IjogIjEuMC4xIiwK
LSAgICAgICAgImxlZWsiOiAiMC4wLjI0IiwKLSAgICAgICAgImxvZGFzaC50ZW1wbGF0ZSI6ICI0
LjQuMCIsCi0gICAgICAgICJtYXJrZG93bi1pdCI6ICI4LjMuMiIsCi0gICAgICAgICJtYXJrZG93
bi1pdC10ZXJtaW5hbCI6ICIwLjEuMCIsCi0gICAgICAgICJtaW5pbWF0Y2giOiAiMy4wLjQiLAot
ICAgICAgICAibW9yZ2FuIjogIjEuOC4yIiwKLSAgICAgICAgIm5vZGUtbW9kdWxlcy1wYXRoIjog
IjEuMC4xIiwKLSAgICAgICAgIm5vcHQiOiAiMy4wLjYiLAotICAgICAgICAibnBtLXBhY2thZ2Ut
YXJnIjogIjQuMi4xIiwKLSAgICAgICAgInBvcnRmaW5kZXIiOiAiMS4wLjEzIiwKLSAgICAgICAg
InByb21pc2UtbWFwLXNlcmllcyI6ICIwLjIuMyIsCi0gICAgICAgICJxdWljay10ZW1wIjogIjAu
MS44IiwKLSAgICAgICAgInJlc29sdmUiOiAiMS40LjAiLAotICAgICAgICAicnN2cCI6ICIzLjYu
MiIsCi0gICAgICAgICJzYW5lIjogIjEuNy4wIiwKLSAgICAgICAgInNlbXZlciI6ICI1LjQuMSIs
Ci0gICAgICAgICJzaWxlbnQtZXJyb3IiOiAiMS4xLjAiLAotICAgICAgICAic29ydC1wYWNrYWdl
LWpzb24iOiAiMS43LjAiLAotICAgICAgICAic3ltbGluay1vci1jb3B5IjogIjEuMS44IiwKLSAg
ICAgICAgInRlbXAiOiAiMC44LjMiLAotICAgICAgICAidGVzdGVtIjogIjEuMTguMSIsCi0gICAg
ICAgICJ0aW55LWxyIjogIjEuMC41IiwKLSAgICAgICAgInRyZWUtc3luYyI6ICIxLjIuMiIsCi0g
ICAgICAgICJ1dWlkIjogIjMuMS4wIiwKLSAgICAgICAgInZhbGlkYXRlLW5wbS1wYWNrYWdlLW5h
bWUiOiAiMy4wLjAiLAotICAgICAgICAid2Fsay1zeW5jIjogIjAuMy4yIiwKLSAgICAgICAgInlh
bSI6ICIwLjAuMjIiCi0gICAgICB9LAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAg
ImJhYmVsLWNvcmUiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiNi4yNS4wIiwKLSAgICAgICAg
ICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYmFiZWwtY29yZS8tL2Jh
YmVsLWNvcmUtNi4yNS4wLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGExLWZkUXJC
R1BIUXVuVktXM3JQc1o2a3lMYTF5az0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAg
ICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJiYWJlbC1jb2RlLWZyYW1lIjogIjYuMjIu
MCIsCi0gICAgICAgICAgICAiYmFiZWwtZ2VuZXJhdG9yIjogIjYuMjUuMCIsCi0gICAgICAgICAg
ICAiYmFiZWwtaGVscGVycyI6ICI2LjI0LjEiLAotICAgICAgICAgICAgImJhYmVsLW1lc3NhZ2Vz
IjogIjYuMjMuMCIsCi0gICAgICAgICAgICAiYmFiZWwtcmVnaXN0ZXIiOiAiNi4yNC4xIiwKLSAg
ICAgICAgICAgICJiYWJlbC1ydW50aW1lIjogIjYuMjUuMCIsCi0gICAgICAgICAgICAiYmFiZWwt
dGVtcGxhdGUiOiAiNi4yNS4wIiwKLSAgICAgICAgICAgICJiYWJlbC10cmF2ZXJzZSI6ICI2LjI1
LjAiLAotICAgICAgICAgICAgImJhYmVsLXR5cGVzIjogIjYuMjUuMCIsCi0gICAgICAgICAgICAi
YmFieWxvbiI6ICI2LjE3LjQiLAotICAgICAgICAgICAgImNvbnZlcnQtc291cmNlLW1hcCI6ICIx
LjUuMCIsCi0gICAgICAgICAgICAiZGVidWciOiAiMi42LjgiLAotICAgICAgICAgICAgImpzb241
IjogIjAuNS4xIiwKLSAgICAgICAgICAgICJsb2Rhc2giOiAiNC4xNy40IiwKLSAgICAgICAgICAg
ICJtaW5pbWF0Y2giOiAiMy4wLjQiLAotICAgICAgICAgICAgInBhdGgtaXMtYWJzb2x1dGUiOiAi
MS4wLjEiLAotICAgICAgICAgICAgInByaXZhdGUiOiAiMC4xLjciLAotICAgICAgICAgICAgInNs
YXNoIjogIjEuMC4wIiwKLSAgICAgICAgICAgICJzb3VyY2UtbWFwIjogIjAuNS42IgotICAgICAg
ICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgImJhYnlsb24iOiB7Ci0gICAgICAgICAgInZlcnNp
b24iOiAiNi4xNy40IiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5u
cG1qcy5vcmcvYmFieWxvbi8tL2JhYnlsb24tNi4xNy40LnRneiIsCi0gICAgICAgICAgImludGVn
cml0eSI6ICJzaGE1MTIta0NobFYrMFNYa2pFMHZVbjlPWjdwQk1XUkZkOHVxM21aZTh4MUs2amh1
TmNBRkF0RW5qY2hGQXFCK2RZRVhLeWQrSnBUNmVwcFJSNzhRQXI1Z1RzVXc9PSIsCi0gICAgICAg
ICAgImRldiI6IHRydWUKLSAgICAgICAgfSwKLSAgICAgICAgImJyb2Njb2xpLWJhYmVsLXRyYW5z
cGlsZXIiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiNi4xLjIiLAotICAgICAgICAgICJyZXNv
bHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9icm9jY29saS1iYWJlbC10cmFuc3Bp
bGVyLy0vYnJvY2NvbGktYmFiZWwtdHJhbnNwaWxlci02LjEuMi50Z3oiLAotICAgICAgICAgICJp
bnRlZ3JpdHkiOiAic2hhNTEyLW8xT1VlNVJaNUVQNStRSUNFbVJOdldsaE12SWNpTWlzVkFDSHU2
cVVQdDZkRTBRMFVuSTVsVXBXVG11WGcvWCtRdXpucUQvczFQQXBJcGFodi9RTVp3PT0iLAotICAg
ICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAg
ICJiYWJlbC1jb3JlIjogIjYuMjUuMCIsCi0gICAgICAgICAgICAiYnJvY2NvbGktZnVubmVsIjog
IjEuMi4wIiwKLSAgICAgICAgICAgICJicm9jY29saS1tZXJnZS10cmVlcyI6ICIxLjIuNCIsCi0g
ICAgICAgICAgICAiYnJvY2NvbGktcGVyc2lzdGVudC1maWx0ZXIiOiAiMS40LjIiLAotICAgICAg
ICAgICAgImNsb25lIjogIjIuMS4xIiwKLSAgICAgICAgICAgICJoYXNoLWZvci1kZXAiOiAiMS4y
LjAiLAotICAgICAgICAgICAgImhlaW1kYWxsanMtbG9nZ2VyIjogIjAuMS45IiwKLSAgICAgICAg
ICAgICJqc29uLXN0YWJsZS1zdHJpbmdpZnkiOiAiMS4wLjEiLAotICAgICAgICAgICAgInJzdnAi
OiAiMy42LjIiLAotICAgICAgICAgICAgIndvcmtlcnBvb2wiOiAiMi4yLjIiCi0gICAgICAgICAg
fSwKLSAgICAgICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAgICAgImJyb2Njb2xpLW1l
cmdlLXRyZWVzIjogewotICAgICAgICAgICAgICAidmVyc2lvbiI6ICIxLjIuNCIsCi0gICAgICAg
ICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9icm9jY29saS1t
ZXJnZS10cmVlcy8tL2Jyb2Njb2xpLW1lcmdlLXRyZWVzLTEuMi40LnRneiIsCi0gICAgICAgICAg
ICAgICJpbnRlZ3JpdHkiOiAic2hhMS1vQUZSbTdVR2Z3WlluWkd2b3BRa1JhTFEvYlU9IiwKLSAg
ICAgICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAg
ICAgICAgICAgICAgICAiYnJvY2NvbGktcGx1Z2luIjogIjEuMy4wIiwKLSAgICAgICAgICAgICAg
ICAiY2FuLXN5bWxpbmsiOiAiMS4wLjAiLAotICAgICAgICAgICAgICAgICJmYXN0LW9yZGVyZWQt
c2V0IjogIjEuMC4zIiwKLSAgICAgICAgICAgICAgICAiZnMtdHJlZS1kaWZmIjogIjAuNS42IiwK
LSAgICAgICAgICAgICAgICAiaGVpbWRhbGxqcyI6ICIwLjIuNSIsCi0gICAgICAgICAgICAgICAg
ImhlaW1kYWxsanMtbG9nZ2VyIjogIjAuMS45IiwKLSAgICAgICAgICAgICAgICAicmltcmFmIjog
IjIuNi4xIiwKLSAgICAgICAgICAgICAgICAic3ltbGluay1vci1jb3B5IjogIjEuMS44IgotICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9LAotICAg
ICAgICAiYnJvY2NvbGktbWVyZ2UtdHJlZXMiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMi4w
LjAiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9i
cm9jY29saS1tZXJnZS10cmVlcy8tL2Jyb2Njb2xpLW1lcmdlLXRyZWVzLTIuMC4wLnRneiIsCi0g
ICAgICAgICAgImludGVncml0eSI6ICJzaGExLUVLNmtiZFhPdk1pNDk5V2xUd3FFcFBDN2tMaz0i
LAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAg
ICAgICAgICJicm9jY29saS1wbHVnaW4iOiAiMS4zLjAiLAotICAgICAgICAgICAgIm1lcmdlLXRy
ZWVzIjogIjEuMC4xIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgImdsb2IiOiB7
Ci0gICAgICAgICAgInZlcnNpb24iOiAiNy4xLjEiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJo
dHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9nbG9iLy0vZ2xvYi03LjEuMS50Z3oiLAotICAgICAg
ICAgICJpbnRlZ3JpdHkiOiAic2hhMS1nRklSM3dUNnJ4eGpvMkFEQnMzMXJlVUxMc2c9IiwKLSAg
ICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAg
ICAiZnMucmVhbHBhdGgiOiAiMS4wLjAiLAotICAgICAgICAgICAgImluZmxpZ2h0IjogIjEuMC42
IiwKLSAgICAgICAgICAgICJpbmhlcml0cyI6ICIyLjAuMyIsCi0gICAgICAgICAgICAibWluaW1h
dGNoIjogIjMuMC40IiwKLSAgICAgICAgICAgICJvbmNlIjogIjEuNC4wIiwKLSAgICAgICAgICAg
ICJwYXRoLWlzLWFic29sdXRlIjogIjEuMC4xIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAg
ICAgICAgImpzb241IjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjAuNS4xIiwKLSAgICAgICAg
ICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvanNvbjUvLS9qc29uNS0w
LjUuMS50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1IcTNuck1BU0EwcllUaU9X
ZG42dG42VkpXQ0U9IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZQotICAgICAgICB9LAotICAgICAg
ICAibG9kYXNoIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjQuMTcuNCIsCi0gICAgICAgICAg
InJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2xvZGFzaC8tL2xvZGFzaC00
LjE3LjQudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTEtZUNBNlRSd3lpdUhZYmNw
a1lPTnB0WDlBVmE0PSIsCi0gICAgICAgICAgImRldiI6IHRydWUKLSAgICAgICAgfQotICAgICAg
fQotICAgIH0sCi0gICAgImVtYmVyLWNsaS1hcHAtdmVyc2lvbiI6IHsKLSAgICAgICJ2ZXJzaW9u
IjogIjIuMC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9y
Zy9lbWJlci1jbGktYXBwLXZlcnNpb24vLS9lbWJlci1jbGktYXBwLXZlcnNpb24tMi4wLjIudGd6
IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1xdTdlWUk2Uyt1YkM0UjlqMG9vM1BCekQ4SEE9
IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiZW1i
ZXItY2xpLWJhYmVsIjogIjUuMi40IiwKLSAgICAgICAgImVtYmVyLWNsaS1odG1sYmFycyI6ICIx
LjMuNCIsCi0gICAgICAgICJnaXQtcmVwby12ZXJzaW9uIjogIjAuNC4xIgotICAgICAgfQotICAg
IH0sCi0gICAgImVtYmVyLWNsaS1iYWJlbCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMi40IiwK
LSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lbWJlci1jbGkt
YmFiZWwvLS9lbWJlci1jbGktYmFiZWwtNS4yLjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAi
c2hhMS1YT1QwYXdqdGIyMGg2SGhobjdhSmNaMXVqaE09IiwKLSAgICAgICJkZXYiOiB0cnVlLAot
ICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiYnJvY2NvbGktYmFiZWwtdHJhbnNwaWxlciI6
ICI1LjcuMiIsCi0gICAgICAgICJicm9jY29saS1mdW5uZWwiOiAiMS4yLjAiLAotICAgICAgICAi
Y2xvbmUiOiAiMi4xLjEiLAotICAgICAgICAiZW1iZXItY2xpLXZlcnNpb24tY2hlY2tlciI6ICIx
LjMuMSIsCi0gICAgICAgICJyZXNvbHZlIjogIjEuNC4wIgotICAgICAgfQotICAgIH0sCi0gICAg
ImVtYmVyLWNsaS1icm9jY29saS1zYW5lLXdhdGNoZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIy
LjAuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZW1i
ZXItY2xpLWJyb2Njb2xpLXNhbmUtd2F0Y2hlci8tL2VtYmVyLWNsaS1icm9jY29saS1zYW5lLXdh
dGNoZXItMi4wLjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS05RDlDOTF0MUNjSVMr
NUpzMmE2b2F1R1NaTVk9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjog
ewotICAgICAgICAiYnJvY2NvbGktc2xvdy10cmVlcyI6ICIzLjAuMSIsCi0gICAgICAgICJoZWlt
ZGFsbGpzIjogIjAuMi41IiwKLSAgICAgICAgImhlaW1kYWxsanMtbG9nZ2VyIjogIjAuMS45IiwK
LSAgICAgICAgInJzdnAiOiAiMy42LjIiLAotICAgICAgICAic2FuZSI6ICIxLjcuMCIKLSAgICAg
IH0KLSAgICB9LAotICAgICJlbWJlci1jbGktZGVwZW5kZW5jeS1jaGVja2VyIjogewotICAgICAg
InZlcnNpb24iOiAiMS40LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnku
bnBtanMub3JnL2VtYmVyLWNsaS1kZXBlbmRlbmN5LWNoZWNrZXIvLS9lbWJlci1jbGktZGVwZW5k
ZW5jeS1jaGVja2VyLTEuNC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtS3hQNWQr
SHVxRVA4R2lHZ0FiNXNwZFR2R1VJPSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1
aXJlcyI6IHsKLSAgICAgICAgImNoYWxrIjogIjAuNS4xIiwKLSAgICAgICAgImlzLWdpdC11cmwi
OiAiMC4yLjMiLAotICAgICAgICAic2VtdmVyIjogIjQuMy42IgotICAgICAgfSwKLSAgICAgICJk
ZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJhbnNpLXJlZ2V4IjogewotICAgICAgICAgICJ2ZXJz
aW9uIjogIjAuMi4xIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5u
cG1qcy5vcmcvYW5zaS1yZWdleC8tL2Fuc2ktcmVnZXgtMC4yLjEudGd6IiwKLSAgICAgICAgICAi
aW50ZWdyaXR5IjogInNoYTEtRFk2VWFXZWoyQlEvaytKT0tZVWwvQnNpTmZrPSIsCi0gICAgICAg
ICAgImRldiI6IHRydWUKLSAgICAgICAgfSwKLSAgICAgICAgImFuc2ktc3R5bGVzIjogewotICAg
ICAgICAgICJ2ZXJzaW9uIjogIjEuMS4wIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6
Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYW5zaS1zdHlsZXMvLS9hbnNpLXN0eWxlcy0xLjEuMC50Z3oi
LAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS02dXkvWnMxd2FJSjJDeTlHa1ZncmoxWFhw
OTQ9IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZQotICAgICAgICB9LAotICAgICAgICAiY2hhbGsi
OiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMC41LjEiLAotICAgICAgICAgICJyZXNvbHZlZCI6
ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jaGFsay8tL2NoYWxrLTAuNS4xLnRneiIsCi0g
ICAgICAgICAgImludGVncml0eSI6ICJzaGExLVpqczZaSXRvdFYwRWFRMUpGbnFvTjRXUElYUT0i
LAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAg
ICAgICAgICJhbnNpLXN0eWxlcyI6ICIxLjEuMCIsCi0gICAgICAgICAgICAiZXNjYXBlLXN0cmlu
Zy1yZWdleHAiOiAiMS4wLjUiLAotICAgICAgICAgICAgImhhcy1hbnNpIjogIjAuMS4wIiwKLSAg
ICAgICAgICAgICJzdHJpcC1hbnNpIjogIjAuMy4wIiwKLSAgICAgICAgICAgICJzdXBwb3J0cy1j
b2xvciI6ICIwLjIuMCIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJoYXMtYW5z
aSI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIwLjEuMCIsCi0gICAgICAgICAgInJlc29sdmVk
IjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2hhcy1hbnNpLy0vaGFzLWFuc2ktMC4xLjAu
dGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTEtaFBKbHF1akE1cWlLRXRjQ0tKUzNW
b2lVeGk0PSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjog
ewotICAgICAgICAgICAgImFuc2ktcmVnZXgiOiAiMC4yLjEiCi0gICAgICAgICAgfQotICAgICAg
ICB9LAotICAgICAgICAic2VtdmVyIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjQuMy42IiwK
LSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2VtdmVy
Ly0vc2VtdmVyLTQuMy42LnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGExLU1Bdkc0
T2hqZFBlNllRYUxXeDdOVi94bE10bz0iLAotICAgICAgICAgICJkZXYiOiB0cnVlCi0gICAgICAg
IH0sCi0gICAgICAgICJzdHJpcC1hbnNpIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjAuMy4w
IiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3Ry
aXAtYW5zaS8tL3N0cmlwLWFuc2ktMC4zLjAudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5Ijog
InNoYTEtSmZTT29peW5rWWZ6RjBwTnVIV1RSN3NTWWlBPSIsCi0gICAgICAgICAgImRldiI6IHRy
dWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgImFuc2ktcmVnZXgiOiAi
MC4yLjEiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAic3VwcG9ydHMtY29sb3Ii
OiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMC4yLjAiLAotICAgICAgICAgICJyZXNvbHZlZCI6
ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zdXBwb3J0cy1jb2xvci8tL3N1cHBvcnRzLWNv
bG9yLTAuMi4wLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGExLTJTM2lhVTZ6OW5N
amx6MTY0OWkxVzB3aUdRbz0iLAotICAgICAgICAgICJkZXYiOiB0cnVlCi0gICAgICAgIH0KLSAg
ICAgIH0KLSAgICB9LAotICAgICJlbWJlci1jbGktZ2V0LWNvbXBvbmVudC1wYXRoLW9wdGlvbiI6
IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczov
L3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lbWJlci1jbGktZ2V0LWNvbXBvbmVudC1wYXRoLW9wdGlvbi8t
L2VtYmVyLWNsaS1nZXQtY29tcG9uZW50LXBhdGgtb3B0aW9uLTEuMC4wLnRneiIsCi0gICAgICAi
aW50ZWdyaXR5IjogInNoYTEtRFh0WlZWbmkrUVVLdnRnRThkanY4YkNMeDNFPSIsCi0gICAgICAi
ZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgImVtYmVyLWNsaS1nZXQtZGVwZW5kZW5jeS1kZXB0aCI6
IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczov
L3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lbWJlci1jbGktZ2V0LWRlcGVuZGVuY3ktZGVwdGgvLS9lbWJl
ci1jbGktZ2V0LWRlcGVuZGVuY3ktZGVwdGgtMS4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHki
OiAic2hhMS00Sy9zK0NvdFV2QVBLS3RHZ3BVb0d1dzJqUkU9IiwKLSAgICAgICJkZXYiOiB0cnVl
Ci0gICAgfSwKLSAgICAiZW1iZXItY2xpLWh0bWxiYXJzIjogewotICAgICAgInZlcnNpb24iOiAi
MS4zLjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Vt
YmVyLWNsaS1odG1sYmFycy8tL2VtYmVyLWNsaS1odG1sYmFycy0xLjMuNC50Z3oiLAotICAgICAg
ImludGVncml0eSI6ICJzaGE1MTItNWx5Y0c2ejM1UUhyM1daRjFPa1Z2VCtOL0dHQVZ1ZW10TTZt
OE5VZ0JXb2VBMlRxT2dQRlJjSTBlUnFvTEEwSEFmZTBSMk1SZUttTUk3eTFMRU0xK3c9PSIsCi0g
ICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImJyb2Njb2xp
LXBlcnNpc3RlbnQtZmlsdGVyIjogIjEuNC4yIiwKLSAgICAgICAgImVtYmVyLWNsaS12ZXJzaW9u
LWNoZWNrZXIiOiAiMS4zLjEiLAotICAgICAgICAiaGFzaC1mb3ItZGVwIjogIjEuMi4wIiwKLSAg
ICAgICAgImpzb24tc3RhYmxlLXN0cmluZ2lmeSI6ICIxLjAuMSIsCi0gICAgICAgICJzdHJpcC1i
b20iOiAiMi4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiZW1iZXItY2xpLWh0bWxiYXJzLWlu
bGluZS1wcmVjb21waWxlIjogewotICAgICAgInZlcnNpb24iOiAiMC4zLjEzIiwKLSAgICAgICJy
ZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lbWJlci1jbGktaHRtbGJhcnMt
aW5saW5lLXByZWNvbXBpbGUvLS9lbWJlci1jbGktaHRtbGJhcnMtaW5saW5lLXByZWNvbXBpbGUt
MC4zLjEzLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1PZmpNLzB2WDdDMUZBWnZ5
aWJrYmg3b0dIeERWUmFMbUVrSUhjQ0x0NENMcS9BYllwdFVZSUwyZHhGUmVGVWZMRFJ4czkyLytZ
UDJ0alA5anRrVzQwQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjog
ewotICAgICAgICAiYmFiZWwtcGx1Z2luLWh0bWxiYXJzLWlubGluZS1wcmVjb21waWxlIjogIjAu
MS4xIiwKLSAgICAgICAgImVtYmVyLWNsaS1iYWJlbCI6ICI1LjIuNCIsCi0gICAgICAgICJlbWJl
ci1jbGktaHRtbGJhcnMiOiAiMS4zLjQiLAotICAgICAgICAiaGFzaC1mb3ItZGVwIjogIjEuMi4w
IiwKLSAgICAgICAgImhlaW1kYWxsanMtbG9nZ2VyIjogIjAuMS45IiwKLSAgICAgICAgInJlc29s
dmUiOiAiMS40LjAiLAotICAgICAgICAic2VtdmVyIjogIjUuNC4xIiwKLSAgICAgICAgInNpbGVu
dC1lcnJvciI6ICIxLjEuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJlbWJlci1jbGktaW5qZWN0
LWxpdmUtcmVsb2FkIjogewotICAgICAgInZlcnNpb24iOiAiMS43LjAiLAotICAgICAgInJlc29s
dmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VtYmVyLWNsaS1pbmplY3QtbGl2ZS1y
ZWxvYWQvLS9lbWJlci1jbGktaW5qZWN0LWxpdmUtcmVsb2FkLTEuNy4wLnRneiIsCi0gICAgICAi
aW50ZWdyaXR5IjogInNoYTUxMi0rMHpPd0psZjRpUjVOY3Z5ZVU3RTd4VTFxRGZuaVAvK21YZk5U
ZkFFaEhPMmVFOXNqUXZhc0tWODRPMXNJSXlMazJMTUlqRlBiR3Q3dXY1ZlFjSUd3Zz09IiwKLSAg
ICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAiZW1iZXItY2xpLWlzLXBhY2thZ2UtbWlzc2lu
ZyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRw
czovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lbWJlci1jbGktaXMtcGFja2FnZS1taXNzaW5nLy0vZW1i
ZXItY2xpLWlzLXBhY2thZ2UtbWlzc2luZy0xLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6
ICJzaGExLWJtR0V5dnVTWTEzWlBLYkpSckVFS1MxT001QT0iLAotICAgICAgImRldiI6IHRydWUK
LSAgICB9LAotICAgICJlbWJlci1jbGktanNoaW50IjogewotICAgICAgInZlcnNpb24iOiAiMi4w
LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VtYmVy
LWNsaS1qc2hpbnQvLS9lbWJlci1jbGktanNoaW50LTIuMC4xLnRneiIsCi0gICAgICAiaW50ZWdy
aXR5IjogInNoYTEtQUJ3T2swWUZrWHVSemUxcFNiV0VoYk9LOFgwPSIsCi0gICAgICAiZGV2Ijog
dHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImJyb2Njb2xpLWpzaGludCI6ICIy
LjEuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJlbWJlci1jbGktbGVnYWN5LWJsdWVwcmludHMi
OiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjEuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6
Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZW1iZXItY2xpLWxlZ2FjeS1ibHVlcHJpbnRzLy0vZW1iZXIt
Y2xpLWxlZ2FjeS1ibHVlcHJpbnRzLTAuMS41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNo
YTEtazhGY29rTHNVUWZXS29yMzdERDJyRk9QT3RrPSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAg
ICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImNoYWxrIjogIjEuMS4zIiwKLSAgICAgICAgImVt
YmVyLWNsaS1nZXQtY29tcG9uZW50LXBhdGgtb3B0aW9uIjogIjEuMC4wIiwKLSAgICAgICAgImVt
YmVyLWNsaS1nZXQtZGVwZW5kZW5jeS1kZXB0aCI6ICIxLjAuMCIsCi0gICAgICAgICJlbWJlci1j
bGktaXMtcGFja2FnZS1taXNzaW5nIjogIjEuMC4wIiwKLSAgICAgICAgImVtYmVyLWNsaS1sb2Rh
c2gtc3Vic2V0IjogIjEuMC4xMiIsCi0gICAgICAgICJlbWJlci1jbGktbm9ybWFsaXplLWVudGl0
eS1uYW1lIjogIjEuMC4wIiwKLSAgICAgICAgImVtYmVyLWNsaS1wYXRoLXV0aWxzIjogIjEuMC4w
IiwKLSAgICAgICAgImVtYmVyLWNsaS1zdHJpbmctdXRpbHMiOiAiMS4xLjAiLAotICAgICAgICAi
ZW1iZXItY2xpLXRlc3QtaW5mbyI6ICIxLjAuMCIsCi0gICAgICAgICJlbWJlci1jbGktdmFsaWQt
Y29tcG9uZW50LW5hbWUiOiAiMS4wLjAiLAotICAgICAgICAiZW1iZXItY2xpLXZlcnNpb24tY2hl
Y2tlciI6ICIxLjMuMSIsCi0gICAgICAgICJlbWJlci1yb3V0ZXItZ2VuZXJhdG9yIjogIjEuMi4z
IiwKLSAgICAgICAgImV4aXN0cy1zeW5jIjogIjAuMC4zIiwKLSAgICAgICAgImZzLWV4dHJhIjog
IjAuMjQuMCIsCi0gICAgICAgICJpbmZsZWN0aW9uIjogIjEuMTIuMCIsCi0gICAgICAgICJyc3Zw
IjogIjMuNi4yIiwKLSAgICAgICAgInNpbGVudC1lcnJvciI6ICIxLjEuMCIKLSAgICAgIH0sCi0g
ICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZXhpc3RzLXN5bmMiOiB7Ci0gICAgICAg
ICAgInZlcnNpb24iOiAiMC4wLjMiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3Jl
Z2lzdHJ5Lm5wbWpzLm9yZy9leGlzdHMtc3luYy8tL2V4aXN0cy1zeW5jLTAuMC4zLnRneiIsCi0g
ICAgICAgICAgImludGVncml0eSI6ICJzaGExLXVSQUFDKzI3RVRzM2k0TDE5YWRqZ1FkaUxjOD0i
LAotICAgICAgICAgICJkZXYiOiB0cnVlCi0gICAgICAgIH0sCi0gICAgICAgICJmcy1leHRyYSI6
IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIwLjI0LjAiLAotICAgICAgICAgICJyZXNvbHZlZCI6
ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9mcy1leHRyYS8tL2ZzLWV4dHJhLTAuMjQuMC50
Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS0xT1EwS3BablhMZUVaak9tQ1pKSk15
dFRtVkk9IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7
Ci0gICAgICAgICAgICAiZ3JhY2VmdWwtZnMiOiAiNC4xLjExIiwKLSAgICAgICAgICAgICJqc29u
ZmlsZSI6ICIyLjQuMCIsCi0gICAgICAgICAgICAicGF0aC1pcy1hYnNvbHV0ZSI6ICIxLjAuMSIs
Ci0gICAgICAgICAgICAicmltcmFmIjogIjIuNi4xIgotICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgfQotICAgIH0sCi0gICAgImVtYmVyLWNsaS1sb2Rhc2gtc3Vic2V0IjogewotICAgICAg
InZlcnNpb24iOiAiMS4wLjEyIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5
Lm5wbWpzLm9yZy9lbWJlci1jbGktbG9kYXNoLXN1YnNldC8tL2VtYmVyLWNsaS1sb2Rhc2gtc3Vi
c2V0LTEuMC4xMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLXJ5NTM2Nlhjc05kL013
alRwdjE5TkZEMjVUYz0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJlbWJlci1j
bGktbm9ybWFsaXplLWVudGl0eS1uYW1lIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjAiLAot
ICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VtYmVyLWNsaS1u
b3JtYWxpemUtZW50aXR5LW5hbWUvLS9lbWJlci1jbGktbm9ybWFsaXplLWVudGl0eS1uYW1lLTEu
MC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtQ3hUM3ZMeFptcUVYdGYzY2dlVDlB
OFM2MWJjPSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAg
ICAgInNpbGVudC1lcnJvciI6ICIxLjEuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJlbWJlci1j
bGktcGF0aC11dGlscyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4wIiwKLSAgICAgICJyZXNv
bHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lbWJlci1jbGktcGF0aC11dGlscy8t
L2VtYmVyLWNsaS1wYXRoLXV0aWxzLTEuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNo
YTEtVGptdmkxVXdITjNGQVhjNXQzcUFUN29nY2UwPSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAg
IH0sCi0gICAgImVtYmVyLWNsaS1wcmVwcm9jZXNzLXJlZ2lzdHJ5IjogewotICAgICAgInZlcnNp
b24iOiAiMy4xLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMu
b3JnL2VtYmVyLWNsaS1wcmVwcm9jZXNzLXJlZ2lzdHJ5Ly0vZW1iZXItY2xpLXByZXByb2Nlc3Mt
cmVnaXN0cnktMy4xLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1PRVZzSWNUU3Rr
bEZoUXo1N0dqYmE2ZHBLSW89IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVz
IjogewotICAgICAgICAiYnJvY2NvbGktY2xlYW4tY3NzIjogIjEuMS4wIiwKLSAgICAgICAgImJy
b2Njb2xpLWZ1bm5lbCI6ICIxLjIuMCIsCi0gICAgICAgICJicm9jY29saS1tZXJnZS10cmVlcyI6
ICIxLjIuNCIsCi0gICAgICAgICJkZWJ1ZyI6ICIyLjYuOCIsCi0gICAgICAgICJlbWJlci1jbGkt
bG9kYXNoLXN1YnNldCI6ICIxLjAuMTIiLAotICAgICAgICAiZXhpc3RzLXN5bmMiOiAiMC4wLjMi
LAotICAgICAgICAicHJvY2Vzcy1yZWxhdGl2ZS1yZXF1aXJlIjogIjEuMC4wIiwKLSAgICAgICAg
InNpbGVudC1lcnJvciI6ICIxLjEuMCIKLSAgICAgIH0sCi0gICAgICAiZGVwZW5kZW5jaWVzIjog
ewotICAgICAgICAiZXhpc3RzLXN5bmMiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMC4wLjMi
LAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9leGlz
dHMtc3luYy8tL2V4aXN0cy1zeW5jLTAuMC4zLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6
ICJzaGExLXVSQUFDKzI3RVRzM2k0TDE5YWRqZ1FkaUxjOD0iLAotICAgICAgICAgICJkZXYiOiB0
cnVlCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJlbWJlci1jbGktcXVuaXQiOiB7
Ci0gICAgICAidmVyc2lvbiI6ICIzLjEuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9y
ZWdpc3RyeS5ucG1qcy5vcmcvZW1iZXItY2xpLXF1bml0Ly0vZW1iZXItY2xpLXF1bml0LTMuMS4y
LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtOUhCanJXcnd4cHpYWm1ITS92MUZPaERY
cVRzPSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAg
ImJyb2Njb2xpLWJhYmVsLXRyYW5zcGlsZXIiOiAiNS43LjIiLAotICAgICAgICAiYnJvY2NvbGkt
ZnVubmVsIjogIjEuMi4wIiwKLSAgICAgICAgImJyb2Njb2xpLW1lcmdlLXRyZWVzIjogIjEuMi40
IiwKLSAgICAgICAgImVtYmVyLWNsaS1iYWJlbCI6ICI1LjIuNCIsCi0gICAgICAgICJlbWJlci1j
bGktdGVzdC1sb2FkZXIiOiAiMS4xLjEiLAotICAgICAgICAiZW1iZXItY2xpLXZlcnNpb24tY2hl
Y2tlciI6ICIxLjMuMSIsCi0gICAgICAgICJlbWJlci1xdW5pdCI6ICIyLjIuMCIsCi0gICAgICAg
ICJxdW5pdC1ub3RpZmljYXRpb25zIjogIjAuMS4xIiwKLSAgICAgICAgInF1bml0anMiOiAiMi40
LjAiLAotICAgICAgICAicmVzb2x2ZSI6ICIxLjQuMCIsCi0gICAgICAgICJzaWxlbnQtZXJyb3Ii
OiAiMS4xLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiZW1iZXItY2xpLXJlbGVhc2UiOiB7Ci0g
ICAgICAidmVyc2lvbiI6ICIwLjIuOSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdp
c3RyeS5ucG1qcy5vcmcvZW1iZXItY2xpLXJlbGVhc2UvLS9lbWJlci1jbGktcmVsZWFzZS0wLjIu
OS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLVhvM2owRFRHVlplVE4wZ0NNRmhIRHNF
akd0cz0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAg
ICJjaGFsayI6ICIxLjEuMyIsCi0gICAgICAgICJnaXQtdG9vbHMiOiAiMC4xLjQiLAotICAgICAg
ICAibWFrZS1hcnJheSI6ICIwLjEuMiIsCi0gICAgICAgICJtZXJnZSI6ICIxLjIuMCIsCi0gICAg
ICAgICJtb21lbnQtdGltZXpvbmUiOiAiMC4zLjEiLAotICAgICAgICAibm9wdCI6ICIzLjAuNiIs
Ci0gICAgICAgICJyc3ZwIjogIjMuNi4yIiwKLSAgICAgICAgInNlbXZlciI6ICI0LjMuNiIsCi0g
ICAgICAgICJzaWxlbnQtZXJyb3IiOiAiMS4xLjAiCi0gICAgICB9LAotICAgICAgImRlcGVuZGVu
Y2llcyI6IHsKLSAgICAgICAgInNlbXZlciI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICI0LjMu
NiIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Nl
bXZlci8tL3NlbXZlci00LjMuNi50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1N
QXZHNE9oamRQZTZZUWFMV3g3TlYveGxNdG89IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZQotICAg
ICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAiZW1iZXItY2xpLXNyaSI6IHsKLSAgICAgICJ2
ZXJzaW9uIjogIjIuMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5w
bWpzLm9yZy9lbWJlci1jbGktc3JpLy0vZW1iZXItY2xpLXNyaS0yLjEuMS50Z3oiLAotICAgICAg
ImludGVncml0eSI6ICJzaGExLWx4WWdrMHBMa1lQUGVTUE1BK0Y0dURxcEIvMD0iLAotICAgICAg
ImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJicm9jY29saS1zcmkt
aGFzaCI6ICIyLjEuMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJlbWJlci1jbGktc3RyaW5nLXV0
aWxzIjogewotICAgICAgInZlcnNpb24iOiAiMS4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0
dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VtYmVyLWNsaS1zdHJpbmctdXRpbHMvLS9lbWJlci1j
bGktc3RyaW5nLXV0aWxzLTEuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtT2Ja
My9DZ0Y5VkZ6YzFOMi9POG5qcXBFVXFFPSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0g
ICAgImVtYmVyLWNsaS10ZXN0LWluZm8iOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMCIsCi0g
ICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZW1iZXItY2xpLXRl
c3QtaW5mby8tL2VtYmVyLWNsaS10ZXN0LWluZm8tMS4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3Jp
dHkiOiAic2hhMS03VTZXRHlTZWwxSTgrSkhrcnRJSExPaEZkN1E9IiwKLSAgICAgICJkZXYiOiB0
cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiZW1iZXItY2xpLXN0cmluZy11dGls
cyI6ICIxLjEuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJlbWJlci1jbGktdGVzdC1sb2FkZXIi
OiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjEuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6
Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZW1iZXItY2xpLXRlc3QtbG9hZGVyLy0vZW1iZXItY2xpLXRl
c3QtbG9hZGVyLTEuMS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtTXpNUklKc1lH
RjBPRHBYNUdEU2RvUXlzOExFPSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJl
cyI6IHsKLSAgICAgICAgImVtYmVyLWNsaS1iYWJlbCI6ICI1LjIuNCIKLSAgICAgIH0KLSAgICB9
LAotICAgICJlbWJlci1jbGktdWdsaWZ5IjogewotICAgICAgInZlcnNpb24iOiAiMS4yLjAiLAot
ICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VtYmVyLWNsaS11
Z2xpZnkvLS9lbWJlci1jbGktdWdsaWZ5LTEuMi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5Ijog
InNoYTEtTWdqREsxUzhKNE1GYm91dzFjL3B1NjhYLzdJPSIsCi0gICAgICAiZGV2IjogdHJ1ZSwK
LSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImJyb2Njb2xpLXVnbGlmeS1zb3VyY2VtYXAi
OiAiMS41LjIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiZW1iZXItY2xpLXZhbGlkLWNvbXBvbmVu
dC1uYW1lIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjAiLAotICAgICAgInJlc29sdmVkIjog
Imh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VtYmVyLWNsaS12YWxpZC1jb21wb25lbnQtbmFt
ZS8tL2VtYmVyLWNsaS12YWxpZC1jb21wb25lbnQtbmFtZS0xLjAuMC50Z3oiLAotICAgICAgImlu
dGVncml0eSI6ICJzaGExLWNWVU00NGZnSXpCbDh3c3dzVkVLb3QrK2grOD0iLAotICAgICAgImRl
diI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJzaWxlbnQtZXJyb3IiOiAi
MS4xLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiZW1iZXItY2xpLXZlcnNpb24tY2hlY2tlciI6
IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMy4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczov
L3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lbWJlci1jbGktdmVyc2lvbi1jaGVja2VyLy0vZW1iZXItY2xp
LXZlcnNpb24tY2hlY2tlci0xLjMuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLUM4
TFJOTWd3RkMybVMvbGllZzdlMFF0aHJuST0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAi
cmVxdWlyZXMiOiB7Ci0gICAgICAgICJzZW12ZXIiOiAiNS40LjEiCi0gICAgICB9Ci0gICAgfSwK
LSAgICAiZW1iZXItZXhwb3J0LWFwcGxpY2F0aW9uLWdsb2JhbCI6IHsKLSAgICAgICJ2ZXJzaW9u
IjogIjEuMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9y
Zy9lbWJlci1leHBvcnQtYXBwbGljYXRpb24tZ2xvYmFsLy0vZW1iZXItZXhwb3J0LWFwcGxpY2F0
aW9uLWdsb2JhbC0xLjEuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLThsZlZKeEpv
a3lxSjF6a21lYzVOdUoxeFZLOD0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWly
ZXMiOiB7Ci0gICAgICAgICJlbWJlci1jbGktYmFiZWwiOiAiNS4yLjQiCi0gICAgICB9Ci0gICAg
fSwKLSAgICAiZW1iZXItaW5mbGVjdG9yIjogewotICAgICAgInZlcnNpb24iOiAiMS45LjYiLAot
ICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VtYmVyLWluZmxl
Y3Rvci8tL2VtYmVyLWluZmxlY3Rvci0xLjkuNi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJz
aGExLVYwc0pObVN0NXNadWhCaGRlSTdKbnRLWFFhOD0iLAotICAgICAgImRldiI6IHRydWUsCi0g
ICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJlbWJlci1jbGktYmFiZWwiOiAiNS4yLjQiCi0g
ICAgICB9Ci0gICAgfSwKLSAgICAiZW1iZXItbG9hZC1pbml0aWFsaXplcnMiOiB7Ci0gICAgICAi
dmVyc2lvbiI6ICIwLjUuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5u
cG1qcy5vcmcvZW1iZXItbG9hZC1pbml0aWFsaXplcnMvLS9lbWJlci1sb2FkLWluaXRpYWxpemVy
cy0wLjUuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLWR1UGJJOEVSMjl6VHJtOW9j
RGEvQzFhK0RMND0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJlbWJlci1xdW5p
dCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRw
czovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lbWJlci1xdW5pdC8tL2VtYmVyLXF1bml0LTIuMi4wLnRn
eiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1pTVFUMVpDZ1NRcGlLL1ZUYkpqZVFXTnpz
aTQ3NDJ3bVBlMDhwemdFQWY5bENydXk5czN0bXZpejRmRjk4akRsUGRWOHc1TE1Ja2tYUVg3TDJl
VHA2Zz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAg
ICAiZW1iZXItdGVzdC1oZWxwZXJzIjogIjAuNi4zIgotICAgICAgfQotICAgIH0sCi0gICAgImVt
YmVyLXJlc29sdmVyIjogewotICAgICAgInZlcnNpb24iOiAiMi4xLjEiLAotICAgICAgInJlc29s
dmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VtYmVyLXJlc29sdmVyLy0vZW1iZXIt
cmVzb2x2ZXItMi4xLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1Ya3dmLytuMTlJ
L0NHVXJYV1NKMDdRelhUM0k9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVz
IjogewotICAgICAgICAiZW1iZXItY2xpLWJhYmVsIjogIjUuMi40IiwKLSAgICAgICAgImVtYmVy
LWNsaS12ZXJzaW9uLWNoZWNrZXIiOiAiMS4zLjEiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiZW1i
ZXItcm91dGVyLWdlbmVyYXRvciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMi4zIiwKLSAgICAg
ICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lbWJlci1yb3V0ZXItZ2Vu
ZXJhdG9yLy0vZW1iZXItcm91dGVyLWdlbmVyYXRvci0xLjIuMy50Z3oiLAotICAgICAgImludGVn
cml0eSI6ICJzaGExLWp0TEtodjh5TTJNU0Q4RkNlQmtlbm84VEZlND0iLAotICAgICAgImRldiI6
IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJyZWNhc3QiOiAiMC4xMS4yMyIK
LSAgICAgIH0sCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZXNwcmltYSI6IHsK
LSAgICAgICAgICAidmVyc2lvbiI6ICIzLjEuMyIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0
dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VzcHJpbWEvLS9lc3ByaW1hLTMuMS4zLnRneiIsCi0g
ICAgICAgICAgImludGVncml0eSI6ICJzaGExLS9jcFJ6dVlUT0pYanlJMVRYT1Nkdi9ZcVJqTT0i
LAotICAgICAgICAgICJkZXYiOiB0cnVlCi0gICAgICAgIH0sCi0gICAgICAgICJyZWNhc3QiOiB7
Ci0gICAgICAgICAgInZlcnNpb24iOiAiMC4xMS4yMyIsCi0gICAgICAgICAgInJlc29sdmVkIjog
Imh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3JlY2FzdC8tL3JlY2FzdC0wLjExLjIzLnRneiIs
Ci0gICAgICAgICAgImludGVncml0eSI6ICJzaGExLVJSL1RBRXF4NU4rYlRrdG1OMnNxSVpFa1l0
TT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAg
ICAgICAgICAgICJhc3QtdHlwZXMiOiAiMC45LjYiLAotICAgICAgICAgICAgImVzcHJpbWEiOiAi
My4xLjMiLAotICAgICAgICAgICAgInByaXZhdGUiOiAiMC4xLjciLAotICAgICAgICAgICAgInNv
dXJjZS1tYXAiOiAiMC41LjYiCi0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAg
fSwKLSAgICAiZW1iZXItdGVzdC1oZWxwZXJzIjogewotICAgICAgInZlcnNpb24iOiAiMC42LjMi
LAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VtYmVyLXRl
c3QtaGVscGVycy8tL2VtYmVyLXRlc3QtaGVscGVycy0wLjYuMy50Z3oiLAotICAgICAgImludGVn
cml0eSI6ICJzaGExLStHVE45dlRuWHorSGFOWlRkNFcxcTI2QzJRYz0iLAotICAgICAgImRldiI6
IHRydWUKLSAgICB9LAotICAgICJlbWJlci10cnkiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjIu
MTYiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VtYmVy
LXRyeS8tL2VtYmVyLXRyeS0wLjIuMTYudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEy
LUFRWkV3TXY2QklyVnEveXNSY1dVTHZ3NXRyNlJRdFVmU1l1Q3B2dGR4eEpXaG83NGQxNllLaEd5
V0FkSUQrUVNtV0hyVlZHeCtPMWtEZ2pmN1lLdTlBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0g
ICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJjaGFsayI6ICIxLjEuMyIsCi0gICAgICAgICJj
bGktdGFibGUyIjogIjAuMi4wIiwKLSAgICAgICAgImNvcmUtb2JqZWN0IjogIjEuMS4wIiwKLSAg
ICAgICAgImRlYnVnIjogIjIuNi44IiwKLSAgICAgICAgImVtYmVyLWNsaS12ZXJzaW9uLWNoZWNr
ZXIiOiAiMS4zLjEiLAotICAgICAgICAiZW1iZXItdHJ5LWNvbmZpZyI6ICIyLjEuMCIsCi0gICAg
ICAgICJleHRlbmQiOiAiMy4wLjEiLAotICAgICAgICAiZnMtZXh0cmEiOiAiMC4yNi43IiwKLSAg
ICAgICAgInByb21pc2UtbWFwLXNlcmllcyI6ICIwLjIuMyIsCi0gICAgICAgICJyZXNvbHZlIjog
IjEuNC4wIiwKLSAgICAgICAgInJpbXJhZiI6ICIyLjYuMSIsCi0gICAgICAgICJyc3ZwIjogIjMu
Ni4yIiwKLSAgICAgICAgInNlbXZlciI6ICI1LjQuMSIKLSAgICAgIH0sCi0gICAgICAiZGVwZW5k
ZW5jaWVzIjogewotICAgICAgICAiY29yZS1vYmplY3QiOiB7Ci0gICAgICAgICAgInZlcnNpb24i
OiAiMS4xLjAiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpz
Lm9yZy9jb3JlLW9iamVjdC8tL2NvcmUtb2JqZWN0LTEuMS4wLnRneiIsCi0gICAgICAgICAgImlu
dGVncml0eSI6ICJzaGExLWh0WTVHSE04K2RvYVdxNXlubUxBcUk1bXJRbz0iLAotICAgICAgICAg
ICJkZXYiOiB0cnVlCi0gICAgICAgIH0sCi0gICAgICAgICJmcy1leHRyYSI6IHsKLSAgICAgICAg
ICAidmVyc2lvbiI6ICIwLjI2LjciLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3Jl
Z2lzdHJ5Lm5wbWpzLm9yZy9mcy1leHRyYS8tL2ZzLWV4dHJhLTAuMjYuNy50Z3oiLAotICAgICAg
ICAgICJpbnRlZ3JpdHkiOiAic2hhMS1tdUg5MlVpWGVZN2F0MjBKR005QzBNTVlUNms9IiwKLSAg
ICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAg
ICAiZ3JhY2VmdWwtZnMiOiAiNC4xLjExIiwKLSAgICAgICAgICAgICJqc29uZmlsZSI6ICIyLjQu
MCIsCi0gICAgICAgICAgICAia2xhdyI6ICIxLjMuMSIsCi0gICAgICAgICAgICAicGF0aC1pcy1h
YnNvbHV0ZSI6ICIxLjAuMSIsCi0gICAgICAgICAgICAicmltcmFmIjogIjIuNi4xIgotICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgImVtYmVyLXRyeS1jb25maWci
OiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6
Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZW1iZXItdHJ5LWNvbmZpZy8tL2VtYmVyLXRyeS1jb25maWct
Mi4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS00T0ZXSXBwVUkwYWxqdWIycldC
UkJNbU8zK0E9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAg
ICAgICAibG9kYXNoIjogIjQuMTcuNCIsCi0gICAgICAgICJub2RlLWZldGNoIjogIjEuNy4xIiwK
LSAgICAgICAgInJzdnAiOiAiMy42LjIiLAotICAgICAgICAic2VtdmVyIjogIjUuNC4xIgotICAg
ICAgfSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJsb2Rhc2giOiB7Ci0gICAg
ICAgICAgInZlcnNpb24iOiAiNC4xNy40IiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6
Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbG9kYXNoLy0vbG9kYXNoLTQuMTcuNC50Z3oiLAotICAgICAg
ICAgICJpbnRlZ3JpdHkiOiAic2hhMS1lQ0E2VFJ3eWl1SFliY3BrWU9OcHRYOUFWYTQ9IiwKLSAg
ICAgICAgICAiZGV2IjogdHJ1ZQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAiZW5j
b2RldXJsIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjEiLAotICAgICAgInJlc29sdmVkIjog
Imh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VuY29kZXVybC8tL2VuY29kZXVybC0xLjAuMS50
Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLWVlUFZobFUwYVFuK2J3OUZwZDVvRURzcFRT
QT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJlbmNvZGluZyI6IHsKLSAgICAg
ICJ2ZXJzaW9uIjogIjAuMS4xMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3Ry
eS5ucG1qcy5vcmcvZW5jb2RpbmcvLS9lbmNvZGluZy0wLjEuMTIudGd6IiwKLSAgICAgICJpbnRl
Z3JpdHkiOiAic2hhMS1VNHRtOCs1aXpScTFIc01qZ3AwZmxJREhTK3M9IiwKLSAgICAgICJkZXYi
OiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiaWNvbnYtbGl0ZSI6ICIwLjQu
MTgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiZW5naW5lLmlvIjogewotICAgICAgInZlcnNpb24i
OiAiMS44LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3Jn
L2VuZ2luZS5pby8tL2VuZ2luZS5pby0xLjguMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJz
aGExLVB1dGZKa3kzWGJ2c0c2cnFKdFlmV2s2czRxbz0iLAotICAgICAgImRldiI6IHRydWUsCi0g
ICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJhY2NlcHRzIjogIjEuMy4zIiwKLSAgICAgICAg
ImJhc2U2NGlkIjogIjAuMS4wIiwKLSAgICAgICAgImNvb2tpZSI6ICIwLjMuMSIsCi0gICAgICAg
ICJkZWJ1ZyI6ICIyLjMuMyIsCi0gICAgICAgICJlbmdpbmUuaW8tcGFyc2VyIjogIjEuMy4xIiwK
LSAgICAgICAgIndzIjogIjEuMS4xIgotICAgICAgfSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7
Ci0gICAgICAgICJkZWJ1ZyI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyLjMuMyIsCi0gICAg
ICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RlYnVnLy0vZGVi
dWctMi4zLjMudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTEtUU1SVDVuNXVFOGtC
M2V3eGV2aVliTnFlLzR3PSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgInJl
cXVpcmVzIjogewotICAgICAgICAgICAgIm1zIjogIjAuNy4yIgotICAgICAgICAgIH0KLSAgICAg
ICAgfSwKLSAgICAgICAgIm1zIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjAuNy4yIiwKLSAg
ICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbXMvLS9tcy0w
LjcuMi50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1yaVhQSlJLemlGb2RsZGZ3
TjRhTmhERVNSMlU9IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZQotICAgICAgICB9Ci0gICAgICB9
Ci0gICAgfSwKLSAgICAiZW5naW5lLmlvLWNsaWVudCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEu
OC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lbmdp
bmUuaW8tY2xpZW50Ly0vZW5naW5lLmlvLWNsaWVudC0xLjguMC50Z3oiLAotICAgICAgImludGVn
cml0eSI6ICJzaGExLWUzTU9RU2RCUUlkWmJadmp5STByeGYyMnoxdz0iLAotICAgICAgImRldiI6
IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJjb21wb25lbnQtZW1pdHRlciI6
ICIxLjIuMSIsCi0gICAgICAgICJjb21wb25lbnQtaW5oZXJpdCI6ICIwLjAuMyIsCi0gICAgICAg
ICJkZWJ1ZyI6ICIyLjMuMyIsCi0gICAgICAgICJlbmdpbmUuaW8tcGFyc2VyIjogIjEuMy4xIiwK
LSAgICAgICAgImhhcy1jb3JzIjogIjEuMS4wIiwKLSAgICAgICAgImluZGV4b2YiOiAiMC4wLjEi
LAotICAgICAgICAicGFyc2Vqc29uIjogIjAuMC4zIiwKLSAgICAgICAgInBhcnNlcXMiOiAiMC4w
LjUiLAotICAgICAgICAicGFyc2V1cmkiOiAiMC4wLjUiLAotICAgICAgICAid3MiOiAiMS4xLjEi
LAotICAgICAgICAieG1saHR0cHJlcXVlc3Qtc3NsIjogIjEuNS4zIiwKLSAgICAgICAgInllYXN0
IjogIjAuMS4yIgotICAgICAgfSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJj
b21wb25lbnQtZW1pdHRlciI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIxLjIuMSIsCi0gICAg
ICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NvbXBvbmVudC1l
bWl0dGVyLy0vY29tcG9uZW50LWVtaXR0ZXItMS4yLjEudGd6IiwKLSAgICAgICAgICAiaW50ZWdy
aXR5IjogInNoYTEtRTNrWTF0ZUNnL2ZmZW10OFdtUGhRT2FVSmVZPSIsCi0gICAgICAgICAgImRl
diI6IHRydWUKLSAgICAgICAgfSwKLSAgICAgICAgImRlYnVnIjogewotICAgICAgICAgICJ2ZXJz
aW9uIjogIjIuMy4zIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5u
cG1qcy5vcmcvZGVidWcvLS9kZWJ1Zy0yLjMuMy50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHki
OiAic2hhMS1RTVJUNW41dUU4a0IzZXd4ZXZpWWJOcWUvNHc9IiwKLSAgICAgICAgICAiZGV2Ijog
dHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAibXMiOiAiMC43LjIi
Ci0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAibXMiOiB7Ci0gICAgICAgICAgInZl
cnNpb24iOiAiMC43LjIiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5
Lm5wbWpzLm9yZy9tcy8tL21zLTAuNy4yLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJz
aGExLXJpWFBKUkt6aUZvZGxkZndONGFOaERFU1IyVT0iLAotICAgICAgICAgICJkZXYiOiB0cnVl
Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJlbmdpbmUuaW8tcGFyc2VyIjogewot
ICAgICAgInZlcnNpb24iOiAiMS4zLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVn
aXN0cnkubnBtanMub3JnL2VuZ2luZS5pby1wYXJzZXIvLS9lbmdpbmUuaW8tcGFyc2VyLTEuMy4x
LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtbFZUeHJqTVFmVys5Rnd5bFJtMHZnejlx
Qjg4PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAg
ImFmdGVyIjogIjAuOC4xIiwKLSAgICAgICAgImFycmF5YnVmZmVyLnNsaWNlIjogIjAuMC42IiwK
LSAgICAgICAgImJhc2U2NC1hcnJheWJ1ZmZlciI6ICIwLjEuNSIsCi0gICAgICAgICJibG9iIjog
IjAuMC40IiwKLSAgICAgICAgImhhcy1iaW5hcnkiOiAiMC4xLjYiLAotICAgICAgICAid3RmLTgi
OiAiMS4wLjAiCi0gICAgICB9LAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImhh
cy1iaW5hcnkiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMC4xLjYiLAotICAgICAgICAgICJy
ZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9oYXMtYmluYXJ5Ly0vaGFzLWJp
bmFyeS0wLjEuNi50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1KVEp2T2Mrazlo
YXRoNGVKVGpyeXo3eDdiaEE9IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAi
cmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiaXNhcnJheSI6ICIwLjAuMSIKLSAgICAgICAgICB9
Ci0gICAgICAgIH0sCi0gICAgICAgICJpc2FycmF5IjogewotICAgICAgICAgICJ2ZXJzaW9uIjog
IjAuMC4xIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5v
cmcvaXNhcnJheS8tL2lzYXJyYXktMC4wLjEudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5Ijog
InNoYTEtaWhpcy9LbW85QmQrQ2F2OFlEaVRtd1hSN3Q4PSIsCi0gICAgICAgICAgImRldiI6IHRy
dWUKLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgImVuc3VyZS1wb3NpeC1wYXRoIjog
ewotICAgICAgInZlcnNpb24iOiAiMS4wLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8v
cmVnaXN0cnkubnBtanMub3JnL2Vuc3VyZS1wb3NpeC1wYXRoLy0vZW5zdXJlLXBvc2l4LXBhdGgt
MS4wLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1wbHMrUXRDM0hQeFlYcmQwK1pR
OGpadVJzTUk9IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAiZW50aXRpZXMiOiB7
Ci0gICAgICAidmVyc2lvbiI6ICIxLjEuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9y
ZWdpc3RyeS5ucG1qcy5vcmcvZW50aXRpZXMvLS9lbnRpdGllcy0xLjEuMS50Z3oiLAotICAgICAg
ImludGVncml0eSI6ICJzaGExLWJsd3RDbFlodGRyYTdPK0F1UTdmdGMxM2N2QT0iLAotICAgICAg
ImRldiI6IHRydWUKLSAgICB9LAotICAgICJlcnJvciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcu
MC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lcnJv
ci8tL2Vycm9yLTcuMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtcGZkZi8wMlpK
aEp0MnNEcVhjT09hSkZUeXdJPSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJl
cyI6IHsKLSAgICAgICAgInN0cmluZy10ZW1wbGF0ZSI6ICIwLjIuMSIsCi0gICAgICAgICJ4dGVu
ZCI6ICI0LjAuMSIKLSAgICAgIH0KLSAgICB9LAotICAgICJlc2NhcGUtaHRtbCI6IHsKLSAgICAg
ICJ2ZXJzaW9uIjogIjEuMC4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5
Lm5wbWpzLm9yZy9lc2NhcGUtaHRtbC8tL2VzY2FwZS1odG1sLTEuMC4zLnRneiIsCi0gICAgICAi
aW50ZWdyaXR5IjogInNoYTEtQWxqcTVOUFF3SmRONGNGcEdJN3dCUjBkR1lnPSIsCi0gICAgICAi
ZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgImVzY2FwZS1zdHJpbmctcmVnZXhwIjogewotICAgICAg
InZlcnNpb24iOiAiMS4wLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnku
bnBtanMub3JnL2VzY2FwZS1zdHJpbmctcmVnZXhwLy0vZXNjYXBlLXN0cmluZy1yZWdleHAtMS4w
LjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1HMkhBVmlHUXFOLzJyanV5endJQXlo
TUxodFE9IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAiZXNwcmltYS1mYiI6IHsK
LSAgICAgICJ2ZXJzaW9uIjogIjE1MDAxLjEwMDEuMC1kZXYtaGFybW9ueS1mYiIsCi0gICAgICAi
cmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXNwcmltYS1mYi8tL2VzcHJp
bWEtZmItMTUwMDEuMTAwMS4wLWRldi1oYXJtb255LWZiLnRneiIsCi0gICAgICAiaW50ZWdyaXR5
IjogInNoYTEtUTc2MWZzSnVqUEkzMDkyTE0rUWxNMWQvSmxrPSIsCi0gICAgICAiZGV2IjogdHJ1
ZQotICAgIH0sCi0gICAgImVzdXRpbHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMiIsCi0g
ICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXN1dGlscy8tL2Vz
dXRpbHMtMi4wLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1DcjlQSEtwYnl4OTZu
WXJNYmVwUHFxQkxySnM9IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAiZXRhZyI6
IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuOC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczov
L3JlZ2lzdHJ5Lm5wbWpzLm9yZy9ldGFnLy0vZXRhZy0xLjguMC50Z3oiLAotICAgICAgImludGVn
cml0eSI6ICJzaGExLWIyTWE3ek50YkVZMksxRjJRRVRPSVd2andGRT0iLAotICAgICAgImRldiI6
IHRydWUKLSAgICB9LAotICAgICJldmVudGVtaXR0ZXIzIjogewotICAgICAgInZlcnNpb24iOiAi
MS4yLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2V2
ZW50ZW1pdHRlcjMvLS9ldmVudGVtaXR0ZXIzLTEuMi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5
IjogInNoYTEtSElhWkhZRnEwZVVFZFE1emgwSWs3UE8reFFnPSIsCi0gICAgICAiZGV2IjogdHJ1
ZQotICAgIH0sCi0gICAgImV2ZW50cy10by1hcnJheSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEu
MS4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9ldmVu
dHMtdG8tYXJyYXkvLS9ldmVudHMtdG8tYXJyYXktMS4xLjIudGd6IiwKLSAgICAgICJpbnRlZ3Jp
dHkiOiAic2hhMS1MVUgxWStIK1FBN1VsaS9ocE5YR3AxT2Q5L1k9IiwKLSAgICAgICJkZXYiOiB0
cnVlCi0gICAgfSwKLSAgICAiZXhlYy1zaCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMi4wIiwK
LSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9leGVjLXNoLy0v
ZXhlYy1zaC0wLjIuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLUZQZGQ0L0lOS0c3
NU13bWJMT1VLa0RXYzd4QT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMi
OiB7Ci0gICAgICAgICJtZXJnZSI6ICIxLjIuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJleGVj
YSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuNi4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRw
czovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9leGVjYS8tL2V4ZWNhLTAuNi4zLnRneiIsCi0gICAgICAi
aW50ZWdyaXR5IjogInNoYTEtVjdhYVdVOElGMW5HbmxOdzhORjduTEVXV1A0PSIsCi0gICAgICAi
ZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImNyb3NzLXNwYXduIjog
IjUuMS4wIiwKLSAgICAgICAgImdldC1zdHJlYW0iOiAiMy4wLjAiLAotICAgICAgICAiaXMtc3Ry
ZWFtIjogIjEuMS4wIiwKLSAgICAgICAgIm5wbS1ydW4tcGF0aCI6ICIyLjAuMiIsCi0gICAgICAg
ICJwLWZpbmFsbHkiOiAiMS4wLjAiLAotICAgICAgICAic2lnbmFsLWV4aXQiOiAiMy4wLjIiLAot
ICAgICAgICAic3RyaXAtZW9mIjogIjEuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgImV4aXN0
cy1zdGF0IjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjAiLAotICAgICAgInJlc29sdmVkIjog
Imh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2V4aXN0cy1zdGF0Ly0vZXhpc3RzLXN0YXQtMS4w
LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1CbURqVWxvdWlkbmtSaEtVUU1KeTdm
b2t0U2s9IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAiZXhpc3RzLXN5bmMiOiB7
Ci0gICAgICAidmVyc2lvbiI6ICIwLjAuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9y
ZWdpc3RyeS5ucG1qcy5vcmcvZXhpc3RzLXN5bmMvLS9leGlzdHMtc3luYy0wLjAuNC50Z3oiLAot
ICAgICAgImludGVncml0eSI6ICJzaGExLWwwVEN4Q2pNQTdBUVlOdEZUVXNTOE84OGlIaz0iLAot
ICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJleGl0IjogewotICAgICAgInZlcnNpb24i
OiAiMC4xLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3Jn
L2V4aXQvLS9leGl0LTAuMS4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtQmpKamo0
MkhmTWdoQjlNS0QvOGFGOHVoelF3PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAg
ImV4aXQtaG9vayI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMS4xIiwKLSAgICAgICJyZXNvbHZl
ZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9leGl0LWhvb2svLS9leGl0LWhvb2stMS4x
LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS04RnlpTTdTTUJkVlAvd2QyWGZoUWZw
WEFML2c9IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAiZXhwYW5kLWJyYWNrZXRz
IjogewotICAgICAgInZlcnNpb24iOiAiMC4xLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBz
Oi8vcmVnaXN0cnkubnBtanMub3JnL2V4cGFuZC1icmFja2V0cy8tL2V4cGFuZC1icmFja2V0cy0w
LjEuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLTN3Y29UalFxZ0h6WE02eGE5eVFS
NVlIUkYzcz0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAg
ICAgICJpcy1wb3NpeC1icmFja2V0IjogIjAuMS4xIgotICAgICAgfQotICAgIH0sCi0gICAgImV4
cGFuZC1yYW5nZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuOC4yIiwKLSAgICAgICJyZXNvbHZl
ZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9leHBhbmQtcmFuZ2UvLS9leHBhbmQtcmFu
Z2UtMS44LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1vcG52L1ROZjRuSWV1dWpp
Vit4NVpFL0lVemM9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewot
ICAgICAgICAiZmlsbC1yYW5nZSI6ICIyLjIuMyIKLSAgICAgIH0KLSAgICB9LAotICAgICJleHBh
bmQtdGlsZGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjIuMiIsCi0gICAgICAicmVzb2x2ZWQi
OiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXhwYW5kLXRpbGRlLy0vZXhwYW5kLXRpbGRl
LTEuMi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtQzRIcnFKZmxvOU1kSEQwUUw0
OEJSQjVWbEVrPSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAg
ICAgICAgIm9zLWhvbWVkaXIiOiAiMS4wLjIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiZXhwcmVz
cyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMTUuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0
cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXhwcmVzcy8tL2V4cHJlc3MtNC4xNS40LnRneiIsCi0g
ICAgICAiaW50ZWdyaXR5IjogInNoYTEtQXk0aVUwaWMrUHpnSm1hK3lqMFI3WG90cnRFPSIsCi0g
ICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImFjY2VwdHMi
OiAiMS4zLjMiLAotICAgICAgICAiYXJyYXktZmxhdHRlbiI6ICIxLjEuMSIsCi0gICAgICAgICJj
b250ZW50LWRpc3Bvc2l0aW9uIjogIjAuNS4yIiwKLSAgICAgICAgImNvbnRlbnQtdHlwZSI6ICIx
LjAuMiIsCi0gICAgICAgICJjb29raWUiOiAiMC4zLjEiLAotICAgICAgICAiY29va2llLXNpZ25h
dHVyZSI6ICIxLjAuNiIsCi0gICAgICAgICJkZWJ1ZyI6ICIyLjYuOCIsCi0gICAgICAgICJkZXBk
IjogIjEuMS4xIiwKLSAgICAgICAgImVuY29kZXVybCI6ICIxLjAuMSIsCi0gICAgICAgICJlc2Nh
cGUtaHRtbCI6ICIxLjAuMyIsCi0gICAgICAgICJldGFnIjogIjEuOC4wIiwKLSAgICAgICAgImZp
bmFsaGFuZGxlciI6ICIxLjAuNCIsCi0gICAgICAgICJmcmVzaCI6ICIwLjUuMCIsCi0gICAgICAg
ICJtZXJnZS1kZXNjcmlwdG9ycyI6ICIxLjAuMSIsCi0gICAgICAgICJtZXRob2RzIjogIjEuMS4y
IiwKLSAgICAgICAgIm9uLWZpbmlzaGVkIjogIjIuMy4wIiwKLSAgICAgICAgInBhcnNldXJsIjog
IjEuMy4xIiwKLSAgICAgICAgInBhdGgtdG8tcmVnZXhwIjogIjAuMS43IiwKLSAgICAgICAgInBy
b3h5LWFkZHIiOiAiMS4xLjUiLAotICAgICAgICAicXMiOiAiNi41LjAiLAotICAgICAgICAicmFu
Z2UtcGFyc2VyIjogIjEuMi4wIiwKLSAgICAgICAgInNlbmQiOiAiMC4xNS40IiwKLSAgICAgICAg
InNlcnZlLXN0YXRpYyI6ICIxLjEyLjQiLAotICAgICAgICAic2V0cHJvdG90eXBlb2YiOiAiMS4w
LjMiLAotICAgICAgICAic3RhdHVzZXMiOiAiMS4zLjEiLAotICAgICAgICAidHlwZS1pcyI6ICIx
LjYuMTUiLAotICAgICAgICAidXRpbHMtbWVyZ2UiOiAiMS4wLjAiLAotICAgICAgICAidmFyeSI6
ICIxLjEuMSIKLSAgICAgIH0KLSAgICB9LAotICAgICJleHRlbmQiOiB7Ci0gICAgICAidmVyc2lv
biI6ICIzLjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5v
cmcvZXh0ZW5kLy0vZXh0ZW5kLTMuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEt
cDFYcWU4R3QvTVdqSE9mbll0dXEzRjVqWkVRPSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0s
Ci0gICAgImV4dGVybmFsLWVkaXRvciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMS4xIiwKLSAg
ICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9leHRlcm5hbC1lZGl0
b3IvLS9leHRlcm5hbC1lZGl0b3ItMS4xLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hh
MS1FdGV3MjRVUGYvZm5DQnV2UUFWd0FHREVZQXM9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAg
ICAgInJlcXVpcmVzIjogewotICAgICAgICAiZXh0ZW5kIjogIjMuMC4xIiwKLSAgICAgICAgInNw
YXduLXN5bmMiOiAiMS4wLjE1IiwKLSAgICAgICAgInRtcCI6ICIwLjAuMjkiCi0gICAgICB9LAot
ICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInRtcCI6IHsKLSAgICAgICAgICAidmVy
c2lvbiI6ICIwLjAuMjkiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5
Lm5wbWpzLm9yZy90bXAvLS90bXAtMC4wLjI5LnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6
ICJzaGExLThsRWwvdzNaMmp6TERDM1RjZTRTaUx1UktNQT0iLAotICAgICAgICAgICJkZXYiOiB0
cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJvcy10bXBkaXIiOiAi
MS4wLjIiCi0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAiZXh0
Z2xvYiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMy4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJo
dHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9leHRnbG9iLy0vZXh0Z2xvYi0wLjMuMi50Z3oiLAot
ICAgICAgImludGVncml0eSI6ICJzaGExLUxoai9QUzlKcXlkbHpza0NQd0VkcW8yRFNhRT0iLAot
ICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJpcy1leHRn
bG9iIjogIjEuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgImZhc3Qtb3JkZXJlZC1zZXQiOiB7
Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9y
ZWdpc3RyeS5ucG1qcy5vcmcvZmFzdC1vcmRlcmVkLXNldC8tL2Zhc3Qtb3JkZXJlZC1zZXQtMS4w
LjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1QN3MyWTA5NzU1NVBmdHZiU2pWOTdp
WFJoT3M9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAg
ICAiYmxhbmstb2JqZWN0IjogIjEuMC4yIgotICAgICAgfQotICAgIH0sCi0gICAgImZhc3Qtc291
cmNlbWFwLWNvbmNhdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMi4wIiwKLSAgICAgICJyZXNv
bHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9mYXN0LXNvdXJjZW1hcC1jb25jYXQv
LS9mYXN0LXNvdXJjZW1hcC1jb25jYXQtMS4yLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAi
c2hhMS1lSnhnNEZtSE9sWmN0dXFsaURieHN0RVVjakE9IiwKLSAgICAgICJkZXYiOiB0cnVlLAot
ICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiY2hhbGsiOiAiMC41LjEiLAotICAgICAgICAi
ZGVidWciOiAiMi42LjgiLAotICAgICAgICAiZnMtZXh0cmEiOiAiMC4zMC4wIiwKLSAgICAgICAg
Im1lbW9yeS1zdHJlYW1zIjogIjAuMS4yIiwKLSAgICAgICAgIm1rZGlycCI6ICIwLjUuMSIsCi0g
ICAgICAgICJyc3ZwIjogIjMuNi4yIiwKLSAgICAgICAgInNvdXJjZS1tYXAiOiAiMC40LjQiLAot
ICAgICAgICAic291cmNlLW1hcC11cmwiOiAiMC4zLjAiCi0gICAgICB9LAotICAgICAgImRlcGVu
ZGVuY2llcyI6IHsKLSAgICAgICAgImFuc2ktcmVnZXgiOiB7Ci0gICAgICAgICAgInZlcnNpb24i
OiAiMC4yLjEiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpz
Lm9yZy9hbnNpLXJlZ2V4Ly0vYW5zaS1yZWdleC0wLjIuMS50Z3oiLAotICAgICAgICAgICJpbnRl
Z3JpdHkiOiAic2hhMS1EWTZVYVdlajJCUS9rK0pPS1lVbC9Cc2lOZms9IiwKLSAgICAgICAgICAi
ZGV2IjogdHJ1ZQotICAgICAgICB9LAotICAgICAgICAiYW5zaS1zdHlsZXMiOiB7Ci0gICAgICAg
ICAgInZlcnNpb24iOiAiMS4xLjAiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3Jl
Z2lzdHJ5Lm5wbWpzLm9yZy9hbnNpLXN0eWxlcy8tL2Fuc2ktc3R5bGVzLTEuMS4wLnRneiIsCi0g
ICAgICAgICAgImludGVncml0eSI6ICJzaGExLTZ1eS9aczF3YUlKMkN5OUdrVmdyajFYWHA5ND0i
LAotICAgICAgICAgICJkZXYiOiB0cnVlCi0gICAgICAgIH0sCi0gICAgICAgICJjaGFsayI6IHsK
LSAgICAgICAgICAidmVyc2lvbiI6ICIwLjUuMSIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0
dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NoYWxrLy0vY2hhbGstMC41LjEudGd6IiwKLSAgICAg
ICAgICAiaW50ZWdyaXR5IjogInNoYTEtWmpzNlpJdG90VjBFYVExSkZucW9ONFdQSVhRPSIsCi0g
ICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAg
ICAgImFuc2ktc3R5bGVzIjogIjEuMS4wIiwKLSAgICAgICAgICAgICJlc2NhcGUtc3RyaW5nLXJl
Z2V4cCI6ICIxLjAuNSIsCi0gICAgICAgICAgICAiaGFzLWFuc2kiOiAiMC4xLjAiLAotICAgICAg
ICAgICAgInN0cmlwLWFuc2kiOiAiMC4zLjAiLAotICAgICAgICAgICAgInN1cHBvcnRzLWNvbG9y
IjogIjAuMi4wIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgImZzLWV4dHJhIjog
ewotICAgICAgICAgICJ2ZXJzaW9uIjogIjAuMzAuMCIsCi0gICAgICAgICAgInJlc29sdmVkIjog
Imh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2ZzLWV4dHJhLy0vZnMtZXh0cmEtMC4zMC4wLnRn
eiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGExLThqUC96QWpVMm4xRExhcEVsM2FZbmJI
ZmsvQT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsK
LSAgICAgICAgICAgICJncmFjZWZ1bC1mcyI6ICI0LjEuMTEiLAotICAgICAgICAgICAgImpzb25m
aWxlIjogIjIuNC4wIiwKLSAgICAgICAgICAgICJrbGF3IjogIjEuMy4xIiwKLSAgICAgICAgICAg
ICJwYXRoLWlzLWFic29sdXRlIjogIjEuMC4xIiwKLSAgICAgICAgICAgICJyaW1yYWYiOiAiMi42
LjEiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAiaGFzLWFuc2kiOiB7Ci0gICAg
ICAgICAgInZlcnNpb24iOiAiMC4xLjAiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczov
L3JlZ2lzdHJ5Lm5wbWpzLm9yZy9oYXMtYW5zaS8tL2hhcy1hbnNpLTAuMS4wLnRneiIsCi0gICAg
ICAgICAgImludGVncml0eSI6ICJzaGExLWhQSmxxdWpBNXFpS0V0Y0NLSlMzVm9pVXhpND0iLAot
ICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAg
ICAgICJhbnNpLXJlZ2V4IjogIjAuMi4xIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAg
ICAgInNvdXJjZS1tYXAiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMC40LjQiLAotICAgICAg
ICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zb3VyY2UtbWFwLy0v
c291cmNlLW1hcC0wLjQuNC50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS02NlQx
MnB3TnlabmVhQU10aTA5MkZ6WlNBMnM9IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAg
ICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiYW1kZWZpbmUiOiAiMS4wLjEiCi0gICAg
ICAgICAgfQotICAgICAgICB9LAotICAgICAgICAic3RyaXAtYW5zaSI6IHsKLSAgICAgICAgICAi
dmVyc2lvbiI6ICIwLjMuMCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0
cnkubnBtanMub3JnL3N0cmlwLWFuc2kvLS9zdHJpcC1hbnNpLTAuMy4wLnRneiIsCi0gICAgICAg
ICAgImludGVncml0eSI6ICJzaGExLUpmU09vaXlua1lmekYwcE51SFdUUjdzU1lpQT0iLAotICAg
ICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAg
ICJhbnNpLXJlZ2V4IjogIjAuMi4xIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAg
InN1cHBvcnRzLWNvbG9yIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjAuMi4wIiwKLSAgICAg
ICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3VwcG9ydHMtY29s
b3IvLS9zdXBwb3J0cy1jb2xvci0wLjIuMC50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAi
c2hhMS0yUzNpYVU2ejluTWpsejE2NDlpMVcwd2lHUW89IiwKLSAgICAgICAgICAiZGV2IjogdHJ1
ZQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAiZmF5ZS13ZWJzb2NrZXQiOiB7Ci0g
ICAgICAidmVyc2lvbiI6ICIwLjEwLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVn
aXN0cnkubnBtanMub3JnL2ZheWUtd2Vic29ja2V0Ly0vZmF5ZS13ZWJzb2NrZXQtMC4xMC4wLnRn
eiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtVGtrdmpRVGZ0dmlRQTFCL2J0dnkxUUhueHZR
PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIndl
YnNvY2tldC1kcml2ZXIiOiAiMC42LjUiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiZmItd2F0Y2ht
YW4iOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0
cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZmItd2F0Y2htYW4vLS9mYi13YXRjaG1hbi0yLjAuMC50
Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLVZPbXI5OStpOG16WnNXTnNXSXdhL0FYZVhW
Zz0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJi
c2VyIjogIjIuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgImZpZ3VyZXMiOiB7Ci0gICAgICAi
dmVyc2lvbiI6ICIxLjcuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5u
cG1qcy5vcmcvZmlndXJlcy8tL2ZpZ3VyZXMtMS43LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHki
OiAic2hhMS15K0hqci96eHpVUzRESzMrMG8zSGs2bHdIUzQ9IiwKLSAgICAgICJkZXYiOiB0cnVl
LAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiZXNjYXBlLXN0cmluZy1yZWdleHAiOiAi
MS4wLjUiLAotICAgICAgICAib2JqZWN0LWFzc2lnbiI6ICI0LjEuMSIKLSAgICAgIH0KLSAgICB9
LAotICAgICJmaWxlbmFtZS1yZWdleCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4xIiwKLSAg
ICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9maWxlbmFtZS1yZWdl
eC8tL2ZpbGVuYW1lLXJlZ2V4LTIuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEt
d2NTNXZ1UGdseVhkc1FhM1hCNHdIK0x4aXlZPSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0s
Ci0gICAgImZpbGVzaXplIjogewotICAgICAgInZlcnNpb24iOiAiMy41LjEwIiwKLSAgICAgICJy
ZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9maWxlc2l6ZS8tL2ZpbGVzaXpl
LTMuNS4xMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLS9JK2lQZHRPK2VYZ3EyNGVa
UFo1b2twV2RoOD0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJmaWxsLXJhbmdl
IjogewotICAgICAgInZlcnNpb24iOiAiMi4yLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBz
Oi8vcmVnaXN0cnkubnBtanMub3JnL2ZpbGwtcmFuZ2UvLS9maWxsLXJhbmdlLTIuMi4zLnRneiIs
Ci0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtVUxkOS9YNUdtOGRKSkhDV05wbitlb1NGcHlNPSIs
Ci0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImlzLW51
bWJlciI6ICIyLjEuMCIsCi0gICAgICAgICJpc29iamVjdCI6ICIyLjEuMCIsCi0gICAgICAgICJy
YW5kb21hdGljIjogIjEuMS43IiwKLSAgICAgICAgInJlcGVhdC1lbGVtZW50IjogIjEuMS4yIiwK
LSAgICAgICAgInJlcGVhdC1zdHJpbmciOiAiMS42LjEiCi0gICAgICB9Ci0gICAgfSwKLSAgICAi
ZmluYWxoYW5kbGVyIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjQiLAotICAgICAgInJlc29s
dmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2ZpbmFsaGFuZGxlci8tL2ZpbmFsaGFu
ZGxlci0xLjAuNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItMTZsL3I4Umd6bFhL
bUZPaFpwSEJ6dHZ5ZStsQWhDNVNVN2hYYXZuZXJDOVVmWnFaeHhYbDNCekw4TWhmZlBUM2tGNjFs
ajlPYXYyTEtFemgwZWk3dGc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJl
cyI6IHsKLSAgICAgICAgImRlYnVnIjogIjIuNi44IiwKLSAgICAgICAgImVuY29kZXVybCI6ICIx
LjAuMSIsCi0gICAgICAgICJlc2NhcGUtaHRtbCI6ICIxLjAuMyIsCi0gICAgICAgICJvbi1maW5p
c2hlZCI6ICIyLjMuMCIsCi0gICAgICAgICJwYXJzZXVybCI6ICIxLjMuMSIsCi0gICAgICAgICJz
dGF0dXNlcyI6ICIxLjMuMSIsCi0gICAgICAgICJ1bnBpcGUiOiAiMS4wLjAiCi0gICAgICB9Ci0g
ICAgfSwKLSAgICAiZmluZC1pbmRleCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMS4wIiwKLSAg
ICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9maW5kLWluZGV4Ly0v
ZmluZC1pbmRleC0xLjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLVV3QjhlYzB3
QkExb0Z0ZVVXT2lEZlZ4WEJlOD0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJm
aW5kLXVwIjogewotICAgICAgInZlcnNpb24iOiAiMi4xLjAiLAotICAgICAgInJlc29sdmVkIjog
Imh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2ZpbmQtdXAvLS9maW5kLXVwLTIuMS4wLnRneiIs
Ci0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtUmRHMzVRYkhGOTNVZ25kYUszZVNDandNVjZjPSIs
Ci0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImxvY2F0
ZS1wYXRoIjogIjIuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgImZpbmR1cC1zeW5jIjogewot
ICAgICAgInZlcnNpb24iOiAiMC40LjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVn
aXN0cnkubnBtanMub3JnL2ZpbmR1cC1zeW5jLy0vZmluZHVwLXN5bmMtMC40LjMudGd6IiwKLSAg
ICAgICJpbnRlZ3JpdHkiOiAic2hhMS1RQVE1S2VlOFlLM3d0L1NDZkV4dWRhRGV5aEk9IiwKLSAg
ICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiZGV0ZWN0LWZp
bGUiOiAiMC4xLjAiLAotICAgICAgICAiaXMtZ2xvYiI6ICIyLjAuMSIsCi0gICAgICAgICJtaWNy
b21hdGNoIjogIjIuMy4xMSIsCi0gICAgICAgICJyZXNvbHZlLWRpciI6ICIwLjEuMSIKLSAgICAg
IH0KLSAgICB9LAotICAgICJmaXJld29ybSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuNy4xIiwK
LSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9maXJld29ybS8t
L2ZpcmV3b3JtLTAuNy4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtelBJUGVVSHhD
SWcvemR1Wk9EMitiaGhoeDFnPSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJl
cyI6IHsKLSAgICAgICAgImFzeW5jIjogIjAuMi4xMCIsCi0gICAgICAgICJpcy10eXBlIjogIjAu
MC4xIiwKLSAgICAgICAgImxvZGFzaC5kZWJvdW5jZSI6ICIzLjEuMSIsCi0gICAgICAgICJsb2Rh
c2guZmxhdHRlbiI6ICIzLjAuMiIsCi0gICAgICAgICJtaW5pbWF0Y2giOiAiMy4wLjQiCi0gICAg
ICB9LAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImFzeW5jIjogewotICAgICAg
ICAgICJ2ZXJzaW9uIjogIjAuMi4xMCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8v
cmVnaXN0cnkubnBtanMub3JnL2FzeW5jLy0vYXN5bmMtMC4yLjEwLnRneiIsCi0gICAgICAgICAg
ImludGVncml0eSI6ICJzaGExLXRydmdzR2RMblhHWENNbzQzb3dqZkxVbXc5RT0iLAotICAgICAg
ICAgICJkZXYiOiB0cnVlCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJmb3ItaW4i
OiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6
Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZm9yLWluLy0vZm9yLWluLTEuMC4yLnRneiIsCi0gICAgICAi
aW50ZWdyaXR5IjogInNoYTEtZ1FhTktWcUJRdXdLeHliRzRpQU1NUHR0WG9BPSIsCi0gICAgICAi
ZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgImZvci1vd24iOiB7Ci0gICAgICAidmVyc2lvbiI6ICIw
LjEuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZm9y
LW93bi8tL2Zvci1vd24tMC4xLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1VbVhH
Z2FUeWxOcTc4WHlWQ2JaMk9xaEZFTTQ9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJl
cXVpcmVzIjogewotICAgICAgICAiZm9yLWluIjogIjEuMC4yIgotICAgICAgfQotICAgIH0sCi0g
ICAgImZvcndhcmRlZCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMS4wIiwKLSAgICAgICJyZXNv
bHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9mb3J3YXJkZWQvLS9mb3J3YXJkZWQt
MC4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1HZStZZE1TdUhDbDd6d2VQM21P
Z20yYW9RMk09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAiZnJlc2giOiB7Ci0g
ICAgICAidmVyc2lvbiI6ICIwLjUuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdp
c3RyeS5ucG1qcy5vcmcvZnJlc2gvLS9mcmVzaC0wLjUuMC50Z3oiLAotICAgICAgImludGVncml0
eSI6ICJzaGExLTlIVEtYbXFTUnRiOWpnbFR6Nm01eUFXdnA0ND0iLAotICAgICAgImRldiI6IHRy
dWUKLSAgICB9LAotICAgICJmcy1leGlzdHMtc3luYyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAu
MS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9mcy1l
eGlzdHMtc3luYy8tL2ZzLWV4aXN0cy1zeW5jLTAuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5
IjogInNoYTEtbUMxb2s2K1JqbkxRamV5ZWhuUC9LMXFOYXQwPSIsCi0gICAgICAiZGV2IjogdHJ1
ZQotICAgIH0sCi0gICAgImZzLWV4dHJhIjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjEiLAot
ICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2ZzLWV4dHJhLy0v
ZnMtZXh0cmEtMy4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1ONVR6ZU1XTE5D
Nm4yN3NqQ1ZFSnhMTzJJcEU9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVz
IjogewotICAgICAgICAiZ3JhY2VmdWwtZnMiOiAiNC4xLjExIiwKLSAgICAgICAgImpzb25maWxl
IjogIjMuMC4xIiwKLSAgICAgICAgInVuaXZlcnNhbGlmeSI6ICIwLjEuMSIKLSAgICAgIH0sCi0g
ICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAianNvbmZpbGUiOiB7Ci0gICAgICAgICAg
InZlcnNpb24iOiAiMy4wLjEiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lz
dHJ5Lm5wbWpzLm9yZy9qc29uZmlsZS8tL2pzb25maWxlLTMuMC4xLnRneiIsCi0gICAgICAgICAg
ImludGVncml0eSI6ICJzaGExLXBlekc5bDlUOW1MRVFWeDJkYUF6SFFtUzdHWT0iLAotICAgICAg
ICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJn
cmFjZWZ1bC1mcyI6ICI0LjEuMTEiCi0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0g
ICAgfSwKLSAgICAiZnMtcmVhZGRpci1yZWN1cnNpdmUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIw
LjEuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZnMt
cmVhZGRpci1yZWN1cnNpdmUvLS9mcy1yZWFkZGlyLXJlY3Vyc2l2ZS0wLjEuMi50Z3oiLAotICAg
ICAgImludGVncml0eSI6ICJzaGExLU1WdFB1TUhLVzR4SDN2N3pHZEJ6MnROV2dGaz0iLAotICAg
ICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJmcy10cmVlLWRpZmYiOiB7Ci0gICAgICAidmVy
c2lvbiI6ICIwLjUuNiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1q
cy5vcmcvZnMtdHJlZS1kaWZmLy0vZnMtdHJlZS1kaWZmLTAuNS42LnRneiIsCi0gICAgICAiaW50
ZWdyaXR5IjogInNoYTEtTkNabGRKNk55a0JvQUxaeUpveVBVSFB6NWlNPSIsCi0gICAgICAiZGV2
IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImhlaW1kYWxsanMtbG9nZ2Vy
IjogIjAuMS45IiwKLSAgICAgICAgIm9iamVjdC1hc3NpZ24iOiAiNC4xLjEiLAotICAgICAgICAi
cGF0aC1wb3NpeCI6ICIxLjAuMCIsCi0gICAgICAgICJzeW1saW5rLW9yLWNvcHkiOiAiMS4xLjgi
Ci0gICAgICB9Ci0gICAgfSwKLSAgICAiZnMucmVhbHBhdGgiOiB7Ci0gICAgICAidmVyc2lvbiI6
ICIxLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcv
ZnMucmVhbHBhdGgvLS9mcy5yZWFscGF0aC0xLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6
ICJzaGExLUZRU3RKU01WaktwQTIwb25oOHNCUVJtVTZrOD0iLAotICAgICAgImRldiI6IHRydWUK
LSAgICB9LAotICAgICJmc2V2ZW50cyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMS4yIiwKLSAg
ICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9mc2V2ZW50cy8tL2Zz
ZXZlbnRzLTEuMS4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1TbjQ0RTV3UVc0
YlRIWHZRbXZTSHdxYnVpWHRkdUQ2UnJqbTJadFVFR2J5cmlnK25VSDN0L1FENE00L1pYVmlZNTU2
VEJwUmdaa0hMRHgzSnhQd3hpdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgIm9wdGlv
bmFsIjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIm5hbiI6ICIyLjYuMiIs
Ci0gICAgICAgICJub2RlLXByZS1neXAiOiAiMC42LjM2IgotICAgICAgfSwKLSAgICAgICJkZXBl
bmRlbmNpZXMiOiB7Ci0gICAgICAgICJhYmJyZXYiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAi
MS4xLjAiLAotICAgICAgICAgICJidW5kbGVkIjogdHJ1ZSwKLSAgICAgICAgICAiZGV2IjogdHJ1
ZSwKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCi0gICAgICAgIH0sCi0gICAgICAgICJhanYi
OiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiNC4xMS44IiwKLSAgICAgICAgICAiYnVuZGxlZCI6
IHRydWUsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1
ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiY28iOiAiNC42LjAiLAot
ICAgICAgICAgICAgImpzb24tc3RhYmxlLXN0cmluZ2lmeSI6ICIxLjAuMSIKLSAgICAgICAgICB9
Ci0gICAgICAgIH0sCi0gICAgICAgICJhbnNpLXJlZ2V4IjogewotICAgICAgICAgICJ2ZXJzaW9u
IjogIjIuMS4xIiwKLSAgICAgICAgICAiYnVuZGxlZCI6IHRydWUsCi0gICAgICAgICAgImRldiI6
IHRydWUKLSAgICAgICAgfSwKLSAgICAgICAgImFwcm9iYSI6IHsKLSAgICAgICAgICAidmVyc2lv
biI6ICIxLjEuMSIsCi0gICAgICAgICAgImJ1bmRsZWQiOiB0cnVlLAotICAgICAgICAgICJkZXYi
OiB0cnVlLAotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUKLSAgICAgICAgfSwKLSAgICAgICAg
ImFyZS13ZS10aGVyZS15ZXQiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMS4xLjQiLAotICAg
ICAgICAgICJidW5kbGVkIjogdHJ1ZSwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAg
ICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAg
ICJkZWxlZ2F0ZXMiOiAiMS4wLjAiLAotICAgICAgICAgICAgInJlYWRhYmxlLXN0cmVhbSI6ICIy
LjIuOSIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJhc24xIjogewotICAgICAg
ICAgICJ2ZXJzaW9uIjogIjAuMi4zIiwKLSAgICAgICAgICAiYnVuZGxlZCI6IHRydWUsCi0gICAg
ICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZQotICAgICAgICB9
LAotICAgICAgICAiYXNzZXJ0LXBsdXMiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMC4yLjAi
LAotICAgICAgICAgICJidW5kbGVkIjogdHJ1ZSwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAg
ICAgICAgICAib3B0aW9uYWwiOiB0cnVlCi0gICAgICAgIH0sCi0gICAgICAgICJhc3luY2tpdCI6
IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIwLjQuMCIsCi0gICAgICAgICAgImJ1bmRsZWQiOiB0
cnVlLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUK
LSAgICAgICAgfSwKLSAgICAgICAgImF3cy1zaWduMiI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6
ICIwLjYuMCIsCi0gICAgICAgICAgImJ1bmRsZWQiOiB0cnVlLAotICAgICAgICAgICJkZXYiOiB0
cnVlLAotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUKLSAgICAgICAgfSwKLSAgICAgICAgImF3
czQiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMS42LjAiLAotICAgICAgICAgICJidW5kbGVk
IjogdHJ1ZSwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAib3B0aW9uYWwiOiB0
cnVlCi0gICAgICAgIH0sCi0gICAgICAgICJiYWxhbmNlZC1tYXRjaCI6IHsKLSAgICAgICAgICAi
dmVyc2lvbiI6ICIwLjQuMiIsCi0gICAgICAgICAgImJ1bmRsZWQiOiB0cnVlLAotICAgICAgICAg
ICJkZXYiOiB0cnVlCi0gICAgICAgIH0sCi0gICAgICAgICJiY3J5cHQtcGJrZGYiOiB7Ci0gICAg
ICAgICAgInZlcnNpb24iOiAiMS4wLjEiLAotICAgICAgICAgICJidW5kbGVkIjogdHJ1ZSwKLSAg
ICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAg
ICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJ0d2VldG5hY2wiOiAiMC4xNC41IgotICAg
ICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgImJsb2NrLXN0cmVhbSI6IHsKLSAgICAgICAg
ICAidmVyc2lvbiI6ICIwLjAuOSIsCi0gICAgICAgICAgImJ1bmRsZWQiOiB0cnVlLAotICAgICAg
ICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJp
bmhlcml0cyI6ICIyLjAuMyIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJib29t
IjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjIuMTAuMSIsCi0gICAgICAgICAgImJ1bmRsZWQi
OiB0cnVlLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsK
LSAgICAgICAgICAgICJob2VrIjogIjIuMTYuMyIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0g
ICAgICAgICJicmFjZS1leHBhbnNpb24iOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMS4xLjci
LAotICAgICAgICAgICJidW5kbGVkIjogdHJ1ZSwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAg
ICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiYmFsYW5jZWQtbWF0Y2giOiAiMC40
LjIiLAotICAgICAgICAgICAgImNvbmNhdC1tYXAiOiAiMC4wLjEiCi0gICAgICAgICAgfQotICAg
ICAgICB9LAotICAgICAgICAiYnVmZmVyLXNoaW1zIjogewotICAgICAgICAgICJ2ZXJzaW9uIjog
IjEuMC4wIiwKLSAgICAgICAgICAiYnVuZGxlZCI6IHRydWUsCi0gICAgICAgICAgImRldiI6IHRy
dWUKLSAgICAgICAgfSwKLSAgICAgICAgImNhc2VsZXNzIjogewotICAgICAgICAgICJ2ZXJzaW9u
IjogIjAuMTIuMCIsCi0gICAgICAgICAgImJ1bmRsZWQiOiB0cnVlLAotICAgICAgICAgICJkZXYi
OiB0cnVlLAotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUKLSAgICAgICAgfSwKLSAgICAgICAg
ImNvIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjQuNi4wIiwKLSAgICAgICAgICAiYnVuZGxl
ZCI6IHRydWUsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgIm9wdGlvbmFsIjog
dHJ1ZQotICAgICAgICB9LAotICAgICAgICAiY29kZS1wb2ludC1hdCI6IHsKLSAgICAgICAgICAi
dmVyc2lvbiI6ICIxLjEuMCIsCi0gICAgICAgICAgImJ1bmRsZWQiOiB0cnVlLAotICAgICAgICAg
ICJkZXYiOiB0cnVlCi0gICAgICAgIH0sCi0gICAgICAgICJjb21iaW5lZC1zdHJlYW0iOiB7Ci0g
ICAgICAgICAgInZlcnNpb24iOiAiMS4wLjUiLAotICAgICAgICAgICJidW5kbGVkIjogdHJ1ZSwK
LSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAg
ICAgICAiZGVsYXllZC1zdHJlYW0iOiAiMS4wLjAiCi0gICAgICAgICAgfQotICAgICAgICB9LAot
ICAgICAgICAiY29uY2F0LW1hcCI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIwLjAuMSIsCi0g
ICAgICAgICAgImJ1bmRsZWQiOiB0cnVlLAotICAgICAgICAgICJkZXYiOiB0cnVlCi0gICAgICAg
IH0sCi0gICAgICAgICJjb25zb2xlLWNvbnRyb2wtc3RyaW5ncyI6IHsKLSAgICAgICAgICAidmVy
c2lvbiI6ICIxLjEuMCIsCi0gICAgICAgICAgImJ1bmRsZWQiOiB0cnVlLAotICAgICAgICAgICJk
ZXYiOiB0cnVlCi0gICAgICAgIH0sCi0gICAgICAgICJjb3JlLXV0aWwtaXMiOiB7Ci0gICAgICAg
ICAgInZlcnNpb24iOiAiMS4wLjIiLAotICAgICAgICAgICJidW5kbGVkIjogdHJ1ZSwKLSAgICAg
ICAgICAiZGV2IjogdHJ1ZQotICAgICAgICB9LAotICAgICAgICAiY3J5cHRpbGVzIjogewotICAg
ICAgICAgICJ2ZXJzaW9uIjogIjIuMC41IiwKLSAgICAgICAgICAiYnVuZGxlZCI6IHRydWUsCi0g
ICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAg
ICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiYm9vbSI6ICIyLjEwLjEiCi0gICAgICAg
ICAgfQotICAgICAgICB9LAotICAgICAgICAiZGFzaGRhc2giOiB7Ci0gICAgICAgICAgInZlcnNp
b24iOiAiMS4xNC4xIiwKLSAgICAgICAgICAiYnVuZGxlZCI6IHRydWUsCi0gICAgICAgICAgImRl
diI6IHRydWUsCi0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWly
ZXMiOiB7Ci0gICAgICAgICAgICAiYXNzZXJ0LXBsdXMiOiAiMS4wLjAiCi0gICAgICAgICAgfSwK
LSAgICAgICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAgICAgImFzc2VydC1wbHVzIjog
ewotICAgICAgICAgICAgICAidmVyc2lvbiI6ICIxLjAuMCIsCi0gICAgICAgICAgICAgICJidW5k
bGVkIjogdHJ1ZSwKLSAgICAgICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgICAgICJv
cHRpb25hbCI6IHRydWUKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0g
ICAgICAgICJkZWJ1ZyI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyLjYuOCIsCi0gICAgICAg
ICAgImJ1bmRsZWQiOiB0cnVlLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJv
cHRpb25hbCI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgIm1z
IjogIjIuMC4wIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgImRlZXAtZXh0ZW5k
IjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjAuNC4yIiwKLSAgICAgICAgICAiYnVuZGxlZCI6
IHRydWUsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1
ZQotICAgICAgICB9LAotICAgICAgICAiZGVsYXllZC1zdHJlYW0iOiB7Ci0gICAgICAgICAgInZl
cnNpb24iOiAiMS4wLjAiLAotICAgICAgICAgICJidW5kbGVkIjogdHJ1ZSwKLSAgICAgICAgICAi
ZGV2IjogdHJ1ZQotICAgICAgICB9LAotICAgICAgICAiZGVsZWdhdGVzIjogewotICAgICAgICAg
ICJ2ZXJzaW9uIjogIjEuMC4wIiwKLSAgICAgICAgICAiYnVuZGxlZCI6IHRydWUsCi0gICAgICAg
ICAgImRldiI6IHRydWUsCi0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZQotICAgICAgICB9LAot
ICAgICAgICAiZWNjLWpzYm4iOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMC4xLjEiLAotICAg
ICAgICAgICJidW5kbGVkIjogdHJ1ZSwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAg
ICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAg
ICJqc2JuIjogIjAuMS4xIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgImV4dGVu
ZCI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIzLjAuMSIsCi0gICAgICAgICAgImJ1bmRsZWQi
OiB0cnVlLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJvcHRpb25hbCI6IHRy
dWUKLSAgICAgICAgfSwKLSAgICAgICAgImV4dHNwcmludGYiOiB7Ci0gICAgICAgICAgInZlcnNp
b24iOiAiMS4wLjIiLAotICAgICAgICAgICJidW5kbGVkIjogdHJ1ZSwKLSAgICAgICAgICAiZGV2
IjogdHJ1ZQotICAgICAgICB9LAotICAgICAgICAiZm9yZXZlci1hZ2VudCI6IHsKLSAgICAgICAg
ICAidmVyc2lvbiI6ICIwLjYuMSIsCi0gICAgICAgICAgImJ1bmRsZWQiOiB0cnVlLAotICAgICAg
ICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUKLSAgICAgICAgfSwK
LSAgICAgICAgImZvcm0tZGF0YSI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyLjEuNCIsCi0g
ICAgICAgICAgImJ1bmRsZWQiOiB0cnVlLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAg
ICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAg
ICAgImFzeW5ja2l0IjogIjAuNC4wIiwKLSAgICAgICAgICAgICJjb21iaW5lZC1zdHJlYW0iOiAi
MS4wLjUiLAotICAgICAgICAgICAgIm1pbWUtdHlwZXMiOiAiMi4xLjE1IgotICAgICAgICAgIH0K
LSAgICAgICAgfSwKLSAgICAgICAgImZzLnJlYWxwYXRoIjogewotICAgICAgICAgICJ2ZXJzaW9u
IjogIjEuMC4wIiwKLSAgICAgICAgICAiYnVuZGxlZCI6IHRydWUsCi0gICAgICAgICAgImRldiI6
IHRydWUKLSAgICAgICAgfSwKLSAgICAgICAgImZzdHJlYW0iOiB7Ci0gICAgICAgICAgInZlcnNp
b24iOiAiMS4wLjExIiwKLSAgICAgICAgICAiYnVuZGxlZCI6IHRydWUsCi0gICAgICAgICAgImRl
diI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgImdyYWNlZnVs
LWZzIjogIjQuMS4xMSIsCi0gICAgICAgICAgICAiaW5oZXJpdHMiOiAiMi4wLjMiLAotICAgICAg
ICAgICAgIm1rZGlycCI6ICIwLjUuMSIsCi0gICAgICAgICAgICAicmltcmFmIjogIjIuNi4xIgot
ICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgImZzdHJlYW0taWdub3JlIjogewotICAg
ICAgICAgICJ2ZXJzaW9uIjogIjEuMC41IiwKLSAgICAgICAgICAiYnVuZGxlZCI6IHRydWUsCi0g
ICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAg
ICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiZnN0cmVhbSI6ICIxLjAuMTEiLAotICAg
ICAgICAgICAgImluaGVyaXRzIjogIjIuMC4zIiwKLSAgICAgICAgICAgICJtaW5pbWF0Y2giOiAi
My4wLjQiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAiZ2F1Z2UiOiB7Ci0gICAg
ICAgICAgInZlcnNpb24iOiAiMi43LjQiLAotICAgICAgICAgICJidW5kbGVkIjogdHJ1ZSwKLSAg
ICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAg
ICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJhcHJvYmEiOiAiMS4xLjEiLAotICAgICAg
ICAgICAgImNvbnNvbGUtY29udHJvbC1zdHJpbmdzIjogIjEuMS4wIiwKLSAgICAgICAgICAgICJo
YXMtdW5pY29kZSI6ICIyLjAuMSIsCi0gICAgICAgICAgICAib2JqZWN0LWFzc2lnbiI6ICI0LjEu
MSIsCi0gICAgICAgICAgICAic2lnbmFsLWV4aXQiOiAiMy4wLjIiLAotICAgICAgICAgICAgInN0
cmluZy13aWR0aCI6ICIxLjAuMiIsCi0gICAgICAgICAgICAic3RyaXAtYW5zaSI6ICIzLjAuMSIs
Ci0gICAgICAgICAgICAid2lkZS1hbGlnbiI6ICIxLjEuMiIKLSAgICAgICAgICB9Ci0gICAgICAg
IH0sCi0gICAgICAgICJnZXRwYXNzIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjAuMS43IiwK
LSAgICAgICAgICAiYnVuZGxlZCI6IHRydWUsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAg
ICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAg
ICAgICAiYXNzZXJ0LXBsdXMiOiAiMS4wLjAiCi0gICAgICAgICAgfSwKLSAgICAgICAgICAiZGVw
ZW5kZW5jaWVzIjogewotICAgICAgICAgICAgImFzc2VydC1wbHVzIjogewotICAgICAgICAgICAg
ICAidmVyc2lvbiI6ICIxLjAuMCIsCi0gICAgICAgICAgICAgICJidW5kbGVkIjogdHJ1ZSwKLSAg
ICAgICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgICAgICJvcHRpb25hbCI6IHRydWUK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJnbG9iIjog
ewotICAgICAgICAgICJ2ZXJzaW9uIjogIjcuMS4yIiwKLSAgICAgICAgICAiYnVuZGxlZCI6IHRy
dWUsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAg
ICAgICAgICAgImZzLnJlYWxwYXRoIjogIjEuMC4wIiwKLSAgICAgICAgICAgICJpbmZsaWdodCI6
ICIxLjAuNiIsCi0gICAgICAgICAgICAiaW5oZXJpdHMiOiAiMi4wLjMiLAotICAgICAgICAgICAg
Im1pbmltYXRjaCI6ICIzLjAuNCIsCi0gICAgICAgICAgICAib25jZSI6ICIxLjQuMCIsCi0gICAg
ICAgICAgICAicGF0aC1pcy1hYnNvbHV0ZSI6ICIxLjAuMSIKLSAgICAgICAgICB9Ci0gICAgICAg
IH0sCi0gICAgICAgICJncmFjZWZ1bC1mcyI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICI0LjEu
MTEiLAotICAgICAgICAgICJidW5kbGVkIjogdHJ1ZSwKLSAgICAgICAgICAiZGV2IjogdHJ1ZQot
ICAgICAgICB9LAotICAgICAgICAiaGFyLXNjaGVtYSI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6
ICIxLjAuNSIsCi0gICAgICAgICAgImJ1bmRsZWQiOiB0cnVlLAotICAgICAgICAgICJkZXYiOiB0
cnVlLAotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUKLSAgICAgICAgfSwKLSAgICAgICAgImhh
ci12YWxpZGF0b3IiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiNC4yLjEiLAotICAgICAgICAg
ICJidW5kbGVkIjogdHJ1ZSwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAib3B0
aW9uYWwiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJhanYi
OiAiNC4xMS44IiwKLSAgICAgICAgICAgICJoYXItc2NoZW1hIjogIjEuMC41IgotICAgICAgICAg
IH0KLSAgICAgICAgfSwKLSAgICAgICAgImhhcy11bmljb2RlIjogewotICAgICAgICAgICJ2ZXJz
aW9uIjogIjIuMC4xIiwKLSAgICAgICAgICAiYnVuZGxlZCI6IHRydWUsCi0gICAgICAgICAgImRl
diI6IHRydWUsCi0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZQotICAgICAgICB9LAotICAgICAg
ICAiaGF3ayI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIzLjEuMyIsCi0gICAgICAgICAgImJ1
bmRsZWQiOiB0cnVlLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJvcHRpb25h
bCI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgImJvb20iOiAi
Mi4xMC4xIiwKLSAgICAgICAgICAgICJjcnlwdGlsZXMiOiAiMi4wLjUiLAotICAgICAgICAgICAg
ImhvZWsiOiAiMi4xNi4zIiwKLSAgICAgICAgICAgICJzbnRwIjogIjEuMC45IgotICAgICAgICAg
IH0KLSAgICAgICAgfSwKLSAgICAgICAgImhvZWsiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAi
Mi4xNi4zIiwKLSAgICAgICAgICAiYnVuZGxlZCI6IHRydWUsCi0gICAgICAgICAgImRldiI6IHRy
dWUKLSAgICAgICAgfSwKLSAgICAgICAgImh0dHAtc2lnbmF0dXJlIjogewotICAgICAgICAgICJ2
ZXJzaW9uIjogIjEuMS4xIiwKLSAgICAgICAgICAiYnVuZGxlZCI6IHRydWUsCi0gICAgICAgICAg
ImRldiI6IHRydWUsCi0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICAgICAicmVx
dWlyZXMiOiB7Ci0gICAgICAgICAgICAiYXNzZXJ0LXBsdXMiOiAiMC4yLjAiLAotICAgICAgICAg
ICAgImpzcHJpbSI6ICIxLjQuMCIsCi0gICAgICAgICAgICAic3NocGsiOiAiMS4xMy4wIgotICAg
ICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgImluZmxpZ2h0IjogewotICAgICAgICAgICJ2
ZXJzaW9uIjogIjEuMC42IiwKLSAgICAgICAgICAiYnVuZGxlZCI6IHRydWUsCi0gICAgICAgICAg
ImRldiI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgIm9uY2Ui
OiAiMS40LjAiLAotICAgICAgICAgICAgIndyYXBweSI6ICIxLjAuMiIKLSAgICAgICAgICB9Ci0g
ICAgICAgIH0sCi0gICAgICAgICJpbmhlcml0cyI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIy
LjAuMyIsCi0gICAgICAgICAgImJ1bmRsZWQiOiB0cnVlLAotICAgICAgICAgICJkZXYiOiB0cnVl
Ci0gICAgICAgIH0sCi0gICAgICAgICJpbmkiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMS4z
LjQiLAotICAgICAgICAgICJidW5kbGVkIjogdHJ1ZSwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwK
LSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCi0gICAgICAgIH0sCi0gICAgICAgICJpcy1mdWxs
d2lkdGgtY29kZS1wb2ludCI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIxLjAuMCIsCi0gICAg
ICAgICAgImJ1bmRsZWQiOiB0cnVlLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAg
ICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJudW1iZXItaXMtbmFuIjogIjEuMC4xIgotICAg
ICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgImlzLXR5cGVkYXJyYXkiOiB7Ci0gICAgICAg
ICAgInZlcnNpb24iOiAiMS4wLjAiLAotICAgICAgICAgICJidW5kbGVkIjogdHJ1ZSwKLSAgICAg
ICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCi0gICAgICAgIH0s
Ci0gICAgICAgICJpc2FycmF5IjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjEuMC4wIiwKLSAg
ICAgICAgICAiYnVuZGxlZCI6IHRydWUsCi0gICAgICAgICAgImRldiI6IHRydWUKLSAgICAgICAg
fSwKLSAgICAgICAgImlzc3RyZWFtIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjAuMS4yIiwK
LSAgICAgICAgICAiYnVuZGxlZCI6IHRydWUsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAg
ICAgICAgIm9wdGlvbmFsIjogdHJ1ZQotICAgICAgICB9LAotICAgICAgICAiam9kaWQyNTUxOSI6
IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIxLjAuMiIsCi0gICAgICAgICAgImJ1bmRsZWQiOiB0
cnVlLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUs
Ci0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgImpzYm4iOiAiMC4xLjEiCi0g
ICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAianNibiI6IHsKLSAgICAgICAgICAidmVy
c2lvbiI6ICIwLjEuMSIsCi0gICAgICAgICAgImJ1bmRsZWQiOiB0cnVlLAotICAgICAgICAgICJk
ZXYiOiB0cnVlLAotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUKLSAgICAgICAgfSwKLSAgICAg
ICAgImpzb24tc2NoZW1hIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjAuMi4zIiwKLSAgICAg
ICAgICAiYnVuZGxlZCI6IHRydWUsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAg
Im9wdGlvbmFsIjogdHJ1ZQotICAgICAgICB9LAotICAgICAgICAianNvbi1zdGFibGUtc3RyaW5n
aWZ5IjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjEuMC4xIiwKLSAgICAgICAgICAiYnVuZGxl
ZCI6IHRydWUsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgIm9wdGlvbmFsIjog
dHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAianNvbmlmeSI6ICIw
LjAuMCIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJqc29uLXN0cmluZ2lmeS1z
YWZlIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjUuMC4xIiwKLSAgICAgICAgICAiYnVuZGxl
ZCI6IHRydWUsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgIm9wdGlvbmFsIjog
dHJ1ZQotICAgICAgICB9LAotICAgICAgICAianNvbmlmeSI6IHsKLSAgICAgICAgICAidmVyc2lv
biI6ICIwLjAuMCIsCi0gICAgICAgICAgImJ1bmRsZWQiOiB0cnVlLAotICAgICAgICAgICJkZXYi
OiB0cnVlLAotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUKLSAgICAgICAgfSwKLSAgICAgICAg
ImpzcHJpbSI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIxLjQuMCIsCi0gICAgICAgICAgImJ1
bmRsZWQiOiB0cnVlLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJvcHRpb25h
bCI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgImFzc2VydC1w
bHVzIjogIjEuMC4wIiwKLSAgICAgICAgICAgICJleHRzcHJpbnRmIjogIjEuMC4yIiwKLSAgICAg
ICAgICAgICJqc29uLXNjaGVtYSI6ICIwLjIuMyIsCi0gICAgICAgICAgICAidmVycm9yIjogIjEu
My42IgotICAgICAgICAgIH0sCi0gICAgICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAg
ICAgICJhc3NlcnQtcGx1cyI6IHsKLSAgICAgICAgICAgICAgInZlcnNpb24iOiAiMS4wLjAiLAot
ICAgICAgICAgICAgICAiYnVuZGxlZCI6IHRydWUsCi0gICAgICAgICAgICAgICJkZXYiOiB0cnVl
LAotICAgICAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCi0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgfQotICAgICAgICB9LAotICAgICAgICAibWltZS1kYiI6IHsKLSAgICAgICAgICAidmVyc2lv
biI6ICIxLjI3LjAiLAotICAgICAgICAgICJidW5kbGVkIjogdHJ1ZSwKLSAgICAgICAgICAiZGV2
IjogdHJ1ZQotICAgICAgICB9LAotICAgICAgICAibWltZS10eXBlcyI6IHsKLSAgICAgICAgICAi
dmVyc2lvbiI6ICIyLjEuMTUiLAotICAgICAgICAgICJidW5kbGVkIjogdHJ1ZSwKLSAgICAgICAg
ICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAibWlt
ZS1kYiI6ICIxLjI3LjAiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAibWluaW1h
dGNoIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjMuMC40IiwKLSAgICAgICAgICAiYnVuZGxl
ZCI6IHRydWUsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjog
ewotICAgICAgICAgICAgImJyYWNlLWV4cGFuc2lvbiI6ICIxLjEuNyIKLSAgICAgICAgICB9Ci0g
ICAgICAgIH0sCi0gICAgICAgICJtaW5pbWlzdCI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIw
LjAuOCIsCi0gICAgICAgICAgImJ1bmRsZWQiOiB0cnVlLAotICAgICAgICAgICJkZXYiOiB0cnVl
Ci0gICAgICAgIH0sCi0gICAgICAgICJta2RpcnAiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAi
MC41LjEiLAotICAgICAgICAgICJidW5kbGVkIjogdHJ1ZSwKLSAgICAgICAgICAiZGV2IjogdHJ1
ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAibWluaW1pc3QiOiAiMC4w
LjgiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAibXMiOiB7Ci0gICAgICAgICAg
InZlcnNpb24iOiAiMi4wLjAiLAotICAgICAgICAgICJidW5kbGVkIjogdHJ1ZSwKLSAgICAgICAg
ICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCi0gICAgICAgIH0sCi0g
ICAgICAgICJub2RlLXByZS1neXAiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMC42LjM2IiwK
LSAgICAgICAgICAiYnVuZGxlZCI6IHRydWUsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAg
ICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAg
ICAgICAibWtkaXJwIjogIjAuNS4xIiwKLSAgICAgICAgICAgICJub3B0IjogIjQuMC4xIiwKLSAg
ICAgICAgICAgICJucG1sb2ciOiAiNC4xLjAiLAotICAgICAgICAgICAgInJjIjogIjEuMi4xIiwK
LSAgICAgICAgICAgICJyZXF1ZXN0IjogIjIuODEuMCIsCi0gICAgICAgICAgICAicmltcmFmIjog
IjIuNi4xIiwKLSAgICAgICAgICAgICJzZW12ZXIiOiAiNS4zLjAiLAotICAgICAgICAgICAgInRh
ciI6ICIyLjIuMSIsCi0gICAgICAgICAgICAidGFyLXBhY2siOiAiMy40LjAiCi0gICAgICAgICAg
fQotICAgICAgICB9LAotICAgICAgICAibm9wdCI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICI0
LjAuMSIsCi0gICAgICAgICAgImJ1bmRsZWQiOiB0cnVlLAotICAgICAgICAgICJkZXYiOiB0cnVl
LAotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewot
ICAgICAgICAgICAgImFiYnJldiI6ICIxLjEuMCIsCi0gICAgICAgICAgICAib3NlbnYiOiAiMC4x
LjQiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAibnBtbG9nIjogewotICAgICAg
ICAgICJ2ZXJzaW9uIjogIjQuMS4wIiwKLSAgICAgICAgICAiYnVuZGxlZCI6IHRydWUsCi0gICAg
ICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICAg
ICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiYXJlLXdlLXRoZXJlLXlldCI6ICIxLjEuNCIs
Ci0gICAgICAgICAgICAiY29uc29sZS1jb250cm9sLXN0cmluZ3MiOiAiMS4xLjAiLAotICAgICAg
ICAgICAgImdhdWdlIjogIjIuNy40IiwKLSAgICAgICAgICAgICJzZXQtYmxvY2tpbmciOiAiMi4w
LjAiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAibnVtYmVyLWlzLW5hbiI6IHsK
LSAgICAgICAgICAidmVyc2lvbiI6ICIxLjAuMSIsCi0gICAgICAgICAgImJ1bmRsZWQiOiB0cnVl
LAotICAgICAgICAgICJkZXYiOiB0cnVlCi0gICAgICAgIH0sCi0gICAgICAgICJvYXV0aC1zaWdu
IjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjAuOC4yIiwKLSAgICAgICAgICAiYnVuZGxlZCI6
IHRydWUsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1
ZQotICAgICAgICB9LAotICAgICAgICAib2JqZWN0LWFzc2lnbiI6IHsKLSAgICAgICAgICAidmVy
c2lvbiI6ICI0LjEuMSIsCi0gICAgICAgICAgImJ1bmRsZWQiOiB0cnVlLAotICAgICAgICAgICJk
ZXYiOiB0cnVlLAotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUKLSAgICAgICAgfSwKLSAgICAg
ICAgIm9uY2UiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMS40LjAiLAotICAgICAgICAgICJi
dW5kbGVkIjogdHJ1ZSwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWly
ZXMiOiB7Ci0gICAgICAgICAgICAid3JhcHB5IjogIjEuMC4yIgotICAgICAgICAgIH0KLSAgICAg
ICAgfSwKLSAgICAgICAgIm9zLWhvbWVkaXIiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMS4w
LjIiLAotICAgICAgICAgICJidW5kbGVkIjogdHJ1ZSwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwK
LSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCi0gICAgICAgIH0sCi0gICAgICAgICJvcy10bXBk
aXIiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMS4wLjIiLAotICAgICAgICAgICJidW5kbGVk
IjogdHJ1ZSwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAib3B0aW9uYWwiOiB0
cnVlCi0gICAgICAgIH0sCi0gICAgICAgICJvc2VudiI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6
ICIwLjEuNCIsCi0gICAgICAgICAgImJ1bmRsZWQiOiB0cnVlLAotICAgICAgICAgICJkZXYiOiB0
cnVlLAotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjog
ewotICAgICAgICAgICAgIm9zLWhvbWVkaXIiOiAiMS4wLjIiLAotICAgICAgICAgICAgIm9zLXRt
cGRpciI6ICIxLjAuMiIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJwYXRoLWlz
LWFic29sdXRlIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjEuMC4xIiwKLSAgICAgICAgICAi
YnVuZGxlZCI6IHRydWUsCi0gICAgICAgICAgImRldiI6IHRydWUKLSAgICAgICAgfSwKLSAgICAg
ICAgInBlcmZvcm1hbmNlLW5vdyI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIwLjIuMCIsCi0g
ICAgICAgICAgImJ1bmRsZWQiOiB0cnVlLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAg
ICAgICJvcHRpb25hbCI6IHRydWUKLSAgICAgICAgfSwKLSAgICAgICAgInByb2Nlc3MtbmV4dGlj
ay1hcmdzIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjEuMC43IiwKLSAgICAgICAgICAiYnVu
ZGxlZCI6IHRydWUsCi0gICAgICAgICAgImRldiI6IHRydWUKLSAgICAgICAgfSwKLSAgICAgICAg
InB1bnljb2RlIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjEuNC4xIiwKLSAgICAgICAgICAi
YnVuZGxlZCI6IHRydWUsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgIm9wdGlv
bmFsIjogdHJ1ZQotICAgICAgICB9LAotICAgICAgICAicXMiOiB7Ci0gICAgICAgICAgInZlcnNp
b24iOiAiNi40LjAiLAotICAgICAgICAgICJidW5kbGVkIjogdHJ1ZSwKLSAgICAgICAgICAiZGV2
IjogdHJ1ZSwKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCi0gICAgICAgIH0sCi0gICAgICAg
ICJyYyI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIxLjIuMSIsCi0gICAgICAgICAgImJ1bmRs
ZWQiOiB0cnVlLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJvcHRpb25hbCI6
IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgImRlZXAtZXh0ZW5k
IjogIjAuNC4yIiwKLSAgICAgICAgICAgICJpbmkiOiAiMS4zLjQiLAotICAgICAgICAgICAgIm1p
bmltaXN0IjogIjEuMi4wIiwKLSAgICAgICAgICAgICJzdHJpcC1qc29uLWNvbW1lbnRzIjogIjIu
MC4xIgotICAgICAgICAgIH0sCi0gICAgICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAg
ICAgICJtaW5pbWlzdCI6IHsKLSAgICAgICAgICAgICAgInZlcnNpb24iOiAiMS4yLjAiLAotICAg
ICAgICAgICAgICAiYnVuZGxlZCI6IHRydWUsCi0gICAgICAgICAgICAgICJkZXYiOiB0cnVlLAot
ICAgICAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCi0gICAgICAgICAgICB9Ci0gICAgICAgICAg
fQotICAgICAgICB9LAotICAgICAgICAicmVhZGFibGUtc3RyZWFtIjogewotICAgICAgICAgICJ2
ZXJzaW9uIjogIjIuMi45IiwKLSAgICAgICAgICAiYnVuZGxlZCI6IHRydWUsCi0gICAgICAgICAg
ImRldiI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgImJ1ZmZl
ci1zaGltcyI6ICIxLjAuMCIsCi0gICAgICAgICAgICAiY29yZS11dGlsLWlzIjogIjEuMC4yIiwK
LSAgICAgICAgICAgICJpbmhlcml0cyI6ICIyLjAuMyIsCi0gICAgICAgICAgICAiaXNhcnJheSI6
ICIxLjAuMCIsCi0gICAgICAgICAgICAicHJvY2Vzcy1uZXh0aWNrLWFyZ3MiOiAiMS4wLjciLAot
ICAgICAgICAgICAgInN0cmluZ19kZWNvZGVyIjogIjEuMC4xIiwKLSAgICAgICAgICAgICJ1dGls
LWRlcHJlY2F0ZSI6ICIxLjAuMiIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJy
ZXF1ZXN0IjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjIuODEuMCIsCi0gICAgICAgICAgImJ1
bmRsZWQiOiB0cnVlLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJvcHRpb25h
bCI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgImF3cy1zaWdu
MiI6ICIwLjYuMCIsCi0gICAgICAgICAgICAiYXdzNCI6ICIxLjYuMCIsCi0gICAgICAgICAgICAi
Y2FzZWxlc3MiOiAiMC4xMi4wIiwKLSAgICAgICAgICAgICJjb21iaW5lZC1zdHJlYW0iOiAiMS4w
LjUiLAotICAgICAgICAgICAgImV4dGVuZCI6ICIzLjAuMSIsCi0gICAgICAgICAgICAiZm9yZXZl
ci1hZ2VudCI6ICIwLjYuMSIsCi0gICAgICAgICAgICAiZm9ybS1kYXRhIjogIjIuMS40IiwKLSAg
ICAgICAgICAgICJoYXItdmFsaWRhdG9yIjogIjQuMi4xIiwKLSAgICAgICAgICAgICJoYXdrIjog
IjMuMS4zIiwKLSAgICAgICAgICAgICJodHRwLXNpZ25hdHVyZSI6ICIxLjEuMSIsCi0gICAgICAg
ICAgICAiaXMtdHlwZWRhcnJheSI6ICIxLjAuMCIsCi0gICAgICAgICAgICAiaXNzdHJlYW0iOiAi
MC4xLjIiLAotICAgICAgICAgICAgImpzb24tc3RyaW5naWZ5LXNhZmUiOiAiNS4wLjEiLAotICAg
ICAgICAgICAgIm1pbWUtdHlwZXMiOiAiMi4xLjE1IiwKLSAgICAgICAgICAgICJvYXV0aC1zaWdu
IjogIjAuOC4yIiwKLSAgICAgICAgICAgICJwZXJmb3JtYW5jZS1ub3ciOiAiMC4yLjAiLAotICAg
ICAgICAgICAgInFzIjogIjYuNC4wIiwKLSAgICAgICAgICAgICJzYWZlLWJ1ZmZlciI6ICI1LjAu
MSIsCi0gICAgICAgICAgICAic3RyaW5nc3RyZWFtIjogIjAuMC41IiwKLSAgICAgICAgICAgICJ0
b3VnaC1jb29raWUiOiAiMi4zLjIiLAotICAgICAgICAgICAgInR1bm5lbC1hZ2VudCI6ICIwLjYu
MCIsCi0gICAgICAgICAgICAidXVpZCI6ICIzLjAuMSIKLSAgICAgICAgICB9Ci0gICAgICAgIH0s
Ci0gICAgICAgICJyaW1yYWYiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMi42LjEiLAotICAg
ICAgICAgICJidW5kbGVkIjogdHJ1ZSwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAg
ICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiZ2xvYiI6ICI3LjEuMiIKLSAgICAgICAgICB9
Ci0gICAgICAgIH0sCi0gICAgICAgICJzYWZlLWJ1ZmZlciI6IHsKLSAgICAgICAgICAidmVyc2lv
biI6ICI1LjAuMSIsCi0gICAgICAgICAgImJ1bmRsZWQiOiB0cnVlLAotICAgICAgICAgICJkZXYi
OiB0cnVlCi0gICAgICAgIH0sCi0gICAgICAgICJzZW12ZXIiOiB7Ci0gICAgICAgICAgInZlcnNp
b24iOiAiNS4zLjAiLAotICAgICAgICAgICJidW5kbGVkIjogdHJ1ZSwKLSAgICAgICAgICAiZGV2
IjogdHJ1ZSwKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCi0gICAgICAgIH0sCi0gICAgICAg
ICJzZXQtYmxvY2tpbmciOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMi4wLjAiLAotICAgICAg
ICAgICJidW5kbGVkIjogdHJ1ZSwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAi
b3B0aW9uYWwiOiB0cnVlCi0gICAgICAgIH0sCi0gICAgICAgICJzaWduYWwtZXhpdCI6IHsKLSAg
ICAgICAgICAidmVyc2lvbiI6ICIzLjAuMiIsCi0gICAgICAgICAgImJ1bmRsZWQiOiB0cnVlLAot
ICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUKLSAgICAg
ICAgfSwKLSAgICAgICAgInNudHAiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMS4wLjkiLAot
ICAgICAgICAgICJidW5kbGVkIjogdHJ1ZSwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAg
ICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAg
ICAgICJob2VrIjogIjIuMTYuMyIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJz
c2hwayI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIxLjEzLjAiLAotICAgICAgICAgICJidW5k
bGVkIjogdHJ1ZSwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAib3B0aW9uYWwi
OiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJhc24xIjogIjAu
Mi4zIiwKLSAgICAgICAgICAgICJhc3NlcnQtcGx1cyI6ICIxLjAuMCIsCi0gICAgICAgICAgICAi
YmNyeXB0LXBia2RmIjogIjEuMC4xIiwKLSAgICAgICAgICAgICJkYXNoZGFzaCI6ICIxLjE0LjEi
LAotICAgICAgICAgICAgImVjYy1qc2JuIjogIjAuMS4xIiwKLSAgICAgICAgICAgICJnZXRwYXNz
IjogIjAuMS43IiwKLSAgICAgICAgICAgICJqb2RpZDI1NTE5IjogIjEuMC4yIiwKLSAgICAgICAg
ICAgICJqc2JuIjogIjAuMS4xIiwKLSAgICAgICAgICAgICJ0d2VldG5hY2wiOiAiMC4xNC41Igot
ICAgICAgICAgIH0sCi0gICAgICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgICAgICJh
c3NlcnQtcGx1cyI6IHsKLSAgICAgICAgICAgICAgInZlcnNpb24iOiAiMS4wLjAiLAotICAgICAg
ICAgICAgICAiYnVuZGxlZCI6IHRydWUsCi0gICAgICAgICAgICAgICJkZXYiOiB0cnVlLAotICAg
ICAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQot
ICAgICAgICB9LAotICAgICAgICAic3RyaW5nX2RlY29kZXIiOiB7Ci0gICAgICAgICAgInZlcnNp
b24iOiAiMS4wLjEiLAotICAgICAgICAgICJidW5kbGVkIjogdHJ1ZSwKLSAgICAgICAgICAiZGV2
IjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAic2FmZS1idWZm
ZXIiOiAiNS4wLjEiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAic3RyaW5nLXdp
ZHRoIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjEuMC4yIiwKLSAgICAgICAgICAiYnVuZGxl
ZCI6IHRydWUsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjog
ewotICAgICAgICAgICAgImNvZGUtcG9pbnQtYXQiOiAiMS4xLjAiLAotICAgICAgICAgICAgImlz
LWZ1bGx3aWR0aC1jb2RlLXBvaW50IjogIjEuMC4wIiwKLSAgICAgICAgICAgICJzdHJpcC1hbnNp
IjogIjMuMC4xIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgInN0cmluZ3N0cmVh
bSI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIwLjAuNSIsCi0gICAgICAgICAgImJ1bmRsZWQi
OiB0cnVlLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJvcHRpb25hbCI6IHRy
dWUKLSAgICAgICAgfSwKLSAgICAgICAgInN0cmlwLWFuc2kiOiB7Ci0gICAgICAgICAgInZlcnNp
b24iOiAiMy4wLjEiLAotICAgICAgICAgICJidW5kbGVkIjogdHJ1ZSwKLSAgICAgICAgICAiZGV2
IjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiYW5zaS1yZWdl
eCI6ICIyLjEuMSIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJzdHJpcC1qc29u
LWNvbW1lbnRzIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjIuMC4xIiwKLSAgICAgICAgICAi
YnVuZGxlZCI6IHRydWUsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgIm9wdGlv
bmFsIjogdHJ1ZQotICAgICAgICB9LAotICAgICAgICAidGFyIjogewotICAgICAgICAgICJ2ZXJz
aW9uIjogIjIuMi4xIiwKLSAgICAgICAgICAiYnVuZGxlZCI6IHRydWUsCi0gICAgICAgICAgImRl
diI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgImJsb2NrLXN0
cmVhbSI6ICIwLjAuOSIsCi0gICAgICAgICAgICAiZnN0cmVhbSI6ICIxLjAuMTEiLAotICAgICAg
ICAgICAgImluaGVyaXRzIjogIjIuMC4zIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAg
ICAgInRhci1wYWNrIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjMuNC4wIiwKLSAgICAgICAg
ICAiYnVuZGxlZCI6IHRydWUsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgIm9w
dGlvbmFsIjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiZGVi
dWciOiAiMi42LjgiLAotICAgICAgICAgICAgImZzdHJlYW0iOiAiMS4wLjExIiwKLSAgICAgICAg
ICAgICJmc3RyZWFtLWlnbm9yZSI6ICIxLjAuNSIsCi0gICAgICAgICAgICAib25jZSI6ICIxLjQu
MCIsCi0gICAgICAgICAgICAicmVhZGFibGUtc3RyZWFtIjogIjIuMi45IiwKLSAgICAgICAgICAg
ICJyaW1yYWYiOiAiMi42LjEiLAotICAgICAgICAgICAgInRhciI6ICIyLjIuMSIsCi0gICAgICAg
ICAgICAidWlkLW51bWJlciI6ICIwLjAuNiIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAg
ICAgICJ0b3VnaC1jb29raWUiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMi4zLjIiLAotICAg
ICAgICAgICJidW5kbGVkIjogdHJ1ZSwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAg
ICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAg
ICJwdW55Y29kZSI6ICIxLjQuMSIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJ0
dW5uZWwtYWdlbnQiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMC42LjAiLAotICAgICAgICAg
ICJidW5kbGVkIjogdHJ1ZSwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAib3B0
aW9uYWwiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJzYWZl
LWJ1ZmZlciI6ICI1LjAuMSIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJ0d2Vl
dG5hY2wiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMC4xNC41IiwKLSAgICAgICAgICAiYnVu
ZGxlZCI6IHRydWUsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgIm9wdGlvbmFs
IjogdHJ1ZQotICAgICAgICB9LAotICAgICAgICAidWlkLW51bWJlciI6IHsKLSAgICAgICAgICAi
dmVyc2lvbiI6ICIwLjAuNiIsCi0gICAgICAgICAgImJ1bmRsZWQiOiB0cnVlLAotICAgICAgICAg
ICJkZXYiOiB0cnVlLAotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUKLSAgICAgICAgfSwKLSAg
ICAgICAgInV0aWwtZGVwcmVjYXRlIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjEuMC4yIiwK
LSAgICAgICAgICAiYnVuZGxlZCI6IHRydWUsCi0gICAgICAgICAgImRldiI6IHRydWUKLSAgICAg
ICAgfSwKLSAgICAgICAgInV1aWQiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMy4wLjEiLAot
ICAgICAgICAgICJidW5kbGVkIjogdHJ1ZSwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAg
ICAgICAib3B0aW9uYWwiOiB0cnVlCi0gICAgICAgIH0sCi0gICAgICAgICJ2ZXJyb3IiOiB7Ci0g
ICAgICAgICAgInZlcnNpb24iOiAiMS4zLjYiLAotICAgICAgICAgICJidW5kbGVkIjogdHJ1ZSwK
LSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAg
ICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJleHRzcHJpbnRmIjogIjEuMC4yIgot
ICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgIndpZGUtYWxpZ24iOiB7Ci0gICAgICAg
ICAgInZlcnNpb24iOiAiMS4xLjIiLAotICAgICAgICAgICJidW5kbGVkIjogdHJ1ZSwKLSAgICAg
ICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgICAg
ICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJzdHJpbmctd2lkdGgiOiAiMS4wLjIiCi0gICAg
ICAgICAgfQotICAgICAgICB9LAotICAgICAgICAid3JhcHB5IjogewotICAgICAgICAgICJ2ZXJz
aW9uIjogIjEuMC4yIiwKLSAgICAgICAgICAiYnVuZGxlZCI6IHRydWUsCi0gICAgICAgICAgImRl
diI6IHRydWUKLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgImdhdWdlIjogewotICAg
ICAgInZlcnNpb24iOiAiMi43LjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0
cnkubnBtanMub3JnL2dhdWdlLy0vZ2F1Z2UtMi43LjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHki
OiAic2hhMS1MQU5BWEhVNHc1MStzM3N4Y0NMakpmc0JpL2M9IiwKLSAgICAgICJkZXYiOiB0cnVl
LAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiYXByb2JhIjogIjEuMS4yIiwKLSAgICAg
ICAgImNvbnNvbGUtY29udHJvbC1zdHJpbmdzIjogIjEuMS4wIiwKLSAgICAgICAgImhhcy11bmlj
b2RlIjogIjIuMC4xIiwKLSAgICAgICAgIm9iamVjdC1hc3NpZ24iOiAiNC4xLjEiLAotICAgICAg
ICAic2lnbmFsLWV4aXQiOiAiMy4wLjIiLAotICAgICAgICAic3RyaW5nLXdpZHRoIjogIjEuMC4y
IiwKLSAgICAgICAgInN0cmlwLWFuc2kiOiAiMy4wLjEiLAotICAgICAgICAid2lkZS1hbGlnbiI6
ICIxLjEuMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJnZXQtY2FsbGVyLWZpbGUiOiB7Ci0gICAg
ICAidmVyc2lvbiI6ICIxLjAuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3Ry
eS5ucG1qcy5vcmcvZ2V0LWNhbGxlci1maWxlLy0vZ2V0LWNhbGxlci1maWxlLTEuMC4yLnRneiIs
Ci0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtOXdMbU1TZm40akhCWUtnTUZWU3N0dzFRUitVPSIs
Ci0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgImdldC1zdGRpbiI6IHsKLSAgICAgICJ2
ZXJzaW9uIjogIjQuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5w
bWpzLm9yZy9nZXQtc3RkaW4vLS9nZXQtc3RkaW4tNC4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3Jp
dHkiOiAic2hhMS11V2pHc0tCRGhESkpBdWkvR2wzekpYbWtVUDQ9IiwKLSAgICAgICJkZXYiOiB0
cnVlCi0gICAgfSwKLSAgICAiZ2V0LXN0cmVhbSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMC4w
IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9nZXQtc3Ry
ZWFtLy0vZ2V0LXN0cmVhbS0zLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLWpw
UTlFMWpjTjFWUVZPeStMdHNGcWhkTzNoUT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAot
ICAgICJnaXQtcmVwby1pbmZvIjogewotICAgICAgInZlcnNpb24iOiAiMS40LjEiLAotICAgICAg
InJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2dpdC1yZXBvLWluZm8vLS9n
aXQtcmVwby1pbmZvLTEuNC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtS2djb0l5
VktyMkw4OEhaZ0I5ZTJaUnZVR1VNPSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAg
ImdpdC1yZXBvLXZlcnNpb24iOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjQuMSIsCi0gICAgICAi
cmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZ2l0LXJlcG8tdmVyc2lvbi8t
L2dpdC1yZXBvLXZlcnNpb24tMC40LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1k
ZnE1b0tUc2hIQjFXdzdxZjlxbStkUVVVNzg9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAg
InJlcXVpcmVzIjogewotICAgICAgICAiZ2l0LXJlcG8taW5mbyI6ICIxLjIuMCIKLSAgICAgIH0s
Ci0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZ2l0LXJlcG8taW5mbyI6IHsKLSAg
ICAgICAgICAidmVyc2lvbiI6ICIxLjIuMCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBz
Oi8vcmVnaXN0cnkubnBtanMub3JnL2dpdC1yZXBvLWluZm8vLS9naXQtcmVwby1pbmZvLTEuMi4w
LnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGExLVE5aFJQZ1NpVGRSQk13b3ZmR1pW
cHduOXV2ST0iLAotICAgICAgICAgICJkZXYiOiB0cnVlCi0gICAgICAgIH0KLSAgICAgIH0KLSAg
ICB9LAotICAgICJnaXQtdG9vbHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjEuNCIsCi0gICAg
ICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZ2l0LXRvb2xzLy0vZ2l0
LXRvb2xzLTAuMS40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtWGtQbGxFTzRwZDdi
T2R1bVk5cEo1NStVT1hnPSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6
IHsKLSAgICAgICAgInNwYXduYmFjayI6ICIxLjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJn
bG9iIjogewotICAgICAgInZlcnNpb24iOiAiNS4wLjE1IiwKLSAgICAgICJyZXNvbHZlZCI6ICJo
dHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9nbG9iLy0vZ2xvYi01LjAuMTUudGd6IiwKLSAgICAg
ICJpbnRlZ3JpdHkiOiAic2hhMS1HOGsydWVBdlNtQS96Q0l1ejNZejB3dUxrN0U9IiwKLSAgICAg
ICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiaW5mbGlnaHQiOiAi
MS4wLjYiLAotICAgICAgICAiaW5oZXJpdHMiOiAiMi4wLjMiLAotICAgICAgICAibWluaW1hdGNo
IjogIjMuMC40IiwKLSAgICAgICAgIm9uY2UiOiAiMS40LjAiLAotICAgICAgICAicGF0aC1pcy1h
YnNvbHV0ZSI6ICIxLjAuMSIKLSAgICAgIH0KLSAgICB9LAotICAgICJnbG9iLWJhc2UiOiB7Ci0g
ICAgICAidmVyc2lvbiI6ICIwLjMuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdp
c3RyeS5ucG1qcy5vcmcvZ2xvYi1iYXNlLy0vZ2xvYi1iYXNlLTAuMy4wLnRneiIsCi0gICAgICAi
aW50ZWdyaXR5IjogInNoYTEtMjdGazlpSWJIQXNjejRLdW95aTBsOThPbzhRPSIsCi0gICAgICAi
ZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImdsb2ItcGFyZW50Ijog
IjIuMC4wIiwKLSAgICAgICAgImlzLWdsb2IiOiAiMi4wLjEiCi0gICAgICB9Ci0gICAgfSwKLSAg
ICAiZ2xvYi1wYXJlbnQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMCIsCi0gICAgICAicmVz
b2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZ2xvYi1wYXJlbnQvLS9nbG9iLXBh
cmVudC0yLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLWdUZzljdHNGVDh6UFV6
YmFxUUx4Z3ZidHV5Zz0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7
Ci0gICAgICAgICJpcy1nbG9iIjogIjIuMC4xIgotICAgICAgfQotICAgIH0sCi0gICAgImdsb2Jh
bC1tb2R1bGVzIjogewotICAgICAgInZlcnNpb24iOiAiMC4yLjMiLAotICAgICAgInJlc29sdmVk
IjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2dsb2JhbC1tb2R1bGVzLy0vZ2xvYmFsLW1v
ZHVsZXMtMC4yLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS02bG83N1VMRzFzNlpX
aytLRW1tMTJ1SWpnbzA9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjog
ewotICAgICAgICAiZ2xvYmFsLXByZWZpeCI6ICIwLjEuNSIsCi0gICAgICAgICJpcy13aW5kb3dz
IjogIjAuMi4wIgotICAgICAgfQotICAgIH0sCi0gICAgImdsb2JhbC1wcmVmaXgiOiB7Ci0gICAg
ICAidmVyc2lvbiI6ICIwLjEuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3Ry
eS5ucG1qcy5vcmcvZ2xvYmFsLXByZWZpeC8tL2dsb2JhbC1wcmVmaXgtMC4xLjUudGd6IiwKLSAg
ICAgICJpbnRlZ3JpdHkiOiAic2hhMS1qVHZHdU5vOHFCRXFGZzJOU1cvd1Jpdis5NDg9IiwKLSAg
ICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiaG9tZWRpci1w
b2x5ZmlsbCI6ICIxLjAuMSIsCi0gICAgICAgICJpbmkiOiAiMS4zLjQiLAotICAgICAgICAiaXMt
d2luZG93cyI6ICIwLjIuMCIsCi0gICAgICAgICJ3aGljaCI6ICIxLjMuMCIKLSAgICAgIH0KLSAg
ICB9LAotICAgICJnbG9iYWxzIjogewotICAgICAgInZlcnNpb24iOiAiNi40LjEiLAotICAgICAg
InJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2dsb2JhbHMvLS9nbG9iYWxz
LTYuNC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtaEpnREt6dHRITWdlNjhYM2xw
RFkvaW42djA4PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgImdyYWNlZnVsLWZz
IjogewotICAgICAgInZlcnNpb24iOiAiNC4xLjExIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRw
czovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9ncmFjZWZ1bC1mcy8tL2dyYWNlZnVsLWZzLTQuMS4xMS50
Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLURvdmY1TkhkdUlWTlpPQk9wOEFPS2dKdVZs
Zz0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJncmFjZWZ1bC1yZWFkbGluayI6
IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczov
L3JlZ2lzdHJ5Lm5wbWpzLm9yZy9ncmFjZWZ1bC1yZWFkbGluay8tL2dyYWNlZnVsLXJlYWRsaW5r
LTEuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtVEsrdGRyeGk4QytnT2JMNVRw
bzkwNk9ScHlVPSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgImdyb3dseSI6IHsK
LSAgICAgICJ2ZXJzaW9uIjogIjEuMy4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3Jl
Z2lzdHJ5Lm5wbWpzLm9yZy9ncm93bHkvLS9ncm93bHktMS4zLjAudGd6IiwKLSAgICAgICJpbnRl
Z3JpdHkiOiAic2hhMS04UWRJeStkcStXUzN5V3lUeHJ6Q2l2RWd3SUU9IiwKLSAgICAgICJkZXYi
OiB0cnVlCi0gICAgfSwKLSAgICAiaGFuZGxlYmFycyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQu
MC4xMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaGFu
ZGxlYmFycy8tL2hhbmRsZWJhcnMtNC4wLjEwLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNo
YTEtUFRESEdMQ2FQWmJ5UHFUTUgwQThUVHVwLzA4PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAg
ICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImFzeW5jIjogIjEuNS4yIiwKLSAgICAgICAgIm9w
dGltaXN0IjogIjAuNi4xIiwKLSAgICAgICAgInNvdXJjZS1tYXAiOiAiMC40LjQiLAotICAgICAg
ICAidWdsaWZ5LWpzIjogIjIuOC4yOSIKLSAgICAgIH0sCi0gICAgICAiZGVwZW5kZW5jaWVzIjog
ewotICAgICAgICAiYXN5bmMiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMS41LjIiLAotICAg
ICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hc3luYy8tL2Fz
eW5jLTEuNS4yLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGExLTdHcGhybFpJREF3
OHNrSEpWaGppQ0pMNVp5bz0iLAotICAgICAgICAgICJkZXYiOiB0cnVlCi0gICAgICAgIH0sCi0g
ICAgICAgICJzb3VyY2UtbWFwIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjAuNC40IiwKLSAg
ICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc291cmNlLW1h
cC8tL3NvdXJjZS1tYXAtMC40LjQudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTEt
NjZUMTJwd055Wm5lYUFNdGkwOTJGelpTQTJzPSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0g
ICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgImFtZGVmaW5lIjogIjEuMC4xIgot
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgImhhcy1hbnNpIjog
ewotICAgICAgInZlcnNpb24iOiAiMi4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8v
cmVnaXN0cnkubnBtanMub3JnL2hhcy1hbnNpLy0vaGFzLWFuc2ktMi4wLjAudGd6IiwKLSAgICAg
ICJpbnRlZ3JpdHkiOiAic2hhMS1OUFVFbk9IczN5c0dTYTgrOGs1RjdUVkJiWkU9IiwKLSAgICAg
ICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiYW5zaS1yZWdleCI6
ICIyLjEuMSIKLSAgICAgIH0KLSAgICB9LAotICAgICJoYXMtYmluYXJ5IjogewotICAgICAgInZl
cnNpb24iOiAiMC4xLjciLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBt
anMub3JnL2hhcy1iaW5hcnkvLS9oYXMtYmluYXJ5LTAuMS43LnRneiIsCi0gICAgICAiaW50ZWdy
aXR5IjogInNoYTEtYU9ZZXNXSVF5VlJhQ2x6T0JxaHprUy9oNW93PSIsCi0gICAgICAiZGV2Ijog
dHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImlzYXJyYXkiOiAiMC4wLjEiCi0g
ICAgICB9LAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImlzYXJyYXkiOiB7Ci0g
ICAgICAgICAgInZlcnNpb24iOiAiMC4wLjEiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRw
czovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pc2FycmF5Ly0vaXNhcnJheS0wLjAuMS50Z3oiLAotICAg
ICAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1paGlzL0ttbzlCZCtDYXY4WURpVG13WFI3dDg9IiwK
LSAgICAgICAgICAiZGV2IjogdHJ1ZQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAi
aGFzLWNvbG9yIjogewotICAgICAgInZlcnNpb24iOiAiMC4xLjciLAotICAgICAgInJlc29sdmVk
IjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2hhcy1jb2xvci8tL2hhcy1jb2xvci0wLjEu
Ny50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLVp4UktVbUREVDhQTXBuZlFRZHIxTCtl
M2l5OD0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJoYXMtY29ycyI6IHsKLSAg
ICAgICJ2ZXJzaW9uIjogIjEuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lz
dHJ5Lm5wbWpzLm9yZy9oYXMtY29ycy8tL2hhcy1jb3JzLTEuMS4wLnRneiIsCi0gICAgICAiaW50
ZWdyaXR5IjogInNoYTEtWGtkSGsvZnFtRVBSdTVuQ1B1OUoveEp2L3prPSIsCi0gICAgICAiZGV2
IjogdHJ1ZQotICAgIH0sCi0gICAgImhhcy1mbGFnIjogewotICAgICAgInZlcnNpb24iOiAiMi4w
LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2hhcy1m
bGFnLy0vaGFzLWZsYWctMi4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS02Q0I2
OGN4N01OUkd6SEMzTkxYb3ZoajRqVkU9IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAg
ICAiaGFzLXVuaWNvZGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMSIsCi0gICAgICAicmVz
b2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaGFzLXVuaWNvZGUvLS9oYXMtdW5p
Y29kZS0yLjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLTRPYithaWpQVVJPSVZl
Q0cwV2tlZHgzaXFMaz0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJoYXNoLWZv
ci1kZXAiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjIuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAi
aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaGFzaC1mb3ItZGVwLy0vaGFzaC1mb3ItZGVwLTEu
Mi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1uVEFNdjRGRXFTbVYvdS9MblBu
dzBZWkpQMFF2ZTdsTHY1RDhxNVp1NDQxZ0kvbEJaQ3EzQndub1pqbE9uL0hCTG9LOURneVkrcVZo
Q3p4YjFkQUFpQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewot
ICAgICAgICAiYnJvY2NvbGkta2l0Y2hlbi1zaW5rLWhlbHBlcnMiOiAiMC4zLjEiLAotICAgICAg
ICAiaGVpbWRhbGxqcyI6ICIwLjIuNSIsCi0gICAgICAgICJoZWltZGFsbGpzLWxvZ2dlciI6ICIw
LjEuOSIsCi0gICAgICAgICJyZXNvbHZlIjogIjEuNC4wIgotICAgICAgfQotICAgIH0sCi0gICAg
ImhlaW1kYWxsanMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjIuNSIsCi0gICAgICAicmVzb2x2
ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaGVpbWRhbGxqcy8tL2hlaW1kYWxsanMt
MC4yLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1hcVZEQ083bms3WkN6L25QbEhn
VVJmTjNNS3c9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAg
ICAgICAicnN2cCI6ICIzLjIuMSIKLSAgICAgIH0sCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewot
ICAgICAgICAicnN2cCI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIzLjIuMSIsCi0gICAgICAg
ICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3JzdnAvLS9yc3ZwLTMu
Mi4xLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGExLUI4dEtYZkphM1o2Q2JyeG4z
TW45aWRzbjJFbz0iLAotICAgICAgICAgICJkZXYiOiB0cnVlCi0gICAgICAgIH0KLSAgICAgIH0K
LSAgICB9LAotICAgICJoZWltZGFsbGpzLWZzLW1vbml0b3IiOiB7Ci0gICAgICAidmVyc2lvbiI6
ICIwLjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcv
aGVpbWRhbGxqcy1mcy1tb25pdG9yLy0vaGVpbWRhbGxqcy1mcy1tb25pdG9yLTAuMS4wLnRneiIs
Ci0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtMUFTbVZvakdjVXhJVkdudE5KWGFTRk5FQW5JPSIs
Ci0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImhlaW1k
YWxsanMiOiAiMC4yLjUiLAotICAgICAgICAiaGVpbWRhbGxqcy1sb2dnZXIiOiAiMC4xLjkiCi0g
ICAgICB9Ci0gICAgfSwKLSAgICAiaGVpbWRhbGxqcy1ncmFwaCI6IHsKLSAgICAgICJ2ZXJzaW9u
IjogIjAuMy4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9y
Zy9oZWltZGFsbGpzLWdyYXBoLy0vaGVpbWRhbGxqcy1ncmFwaC0wLjMuMy50Z3oiLAotICAgICAg
ImludGVncml0eSI6ICJzaGExLTZvQWR1NlpaeU5VaS9oeTRPeTFnVnlia2tZOD0iLAotICAgICAg
ImRldiI6IHRydWUKLSAgICB9LAotICAgICJoZWltZGFsbGpzLWxvZ2dlciI6IHsKLSAgICAgICJ2
ZXJzaW9uIjogIjAuMS45IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5w
bWpzLm9yZy9oZWltZGFsbGpzLWxvZ2dlci8tL2hlaW1kYWxsanMtbG9nZ2VyLTAuMS45LnRneiIs
Ci0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtMTJyYVRrVzN1Mjk0YjhuQUVLYU9zdUw2OFhZPSIs
Ci0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImRlYnVn
IjogIjIuNi44IiwKLSAgICAgICAgImhlaW1kYWxsanMiOiAiMC4yLjUiCi0gICAgICB9Ci0gICAg
fSwKLSAgICAiaG9tZS1vci10bXAiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMCIsCi0gICAg
ICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaG9tZS1vci10bXAvLS9o
b21lLW9yLXRtcC0xLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLVM1OGVRSUFN
UGxER3duOTRGbmF2ek9jZk9ZVT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWly
ZXMiOiB7Ci0gICAgICAgICJvcy10bXBkaXIiOiAiMS4wLjIiLAotICAgICAgICAidXNlci1ob21l
IjogIjEuMS4xIgotICAgICAgfQotICAgIH0sCi0gICAgImhvbWVkaXItcG9seWZpbGwiOiB7Ci0g
ICAgICAidmVyc2lvbiI6ICIxLjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdp
c3RyeS5ucG1qcy5vcmcvaG9tZWRpci1wb2x5ZmlsbC8tL2hvbWVkaXItcG9seWZpbGwtMS4wLjEu
dGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1UQ3U4aW5XSm1QN3I5ZTFvV0E5MjFHZG90
THc9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAi
cGFyc2UtcGFzc3dkIjogIjEuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgImhvc3RlZC1naXQt
aW5mbyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuNS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJo
dHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9ob3N0ZWQtZ2l0LWluZm8vLS9ob3N0ZWQtZ2l0LWlu
Zm8tMi41LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXBOZ2JVUlN1YWI5MEti
VHF2UlBzc2VhVHhPSkNaQkQwYTd0K2hhU04zM3BpUDljQ000bDBDcWR6QWlmMmhVcW03MTZVb3ZL
QjJST21pYWJHQUtWWHlnPT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJodG1s
cGFyc2VyMiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuOC4zIiwKLSAgICAgICJyZXNvbHZlZCI6
ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9odG1scGFyc2VyMi8tL2h0bWxwYXJzZXIyLTMu
OC4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtbVd3b3NaRlJhb3ZvWlFHbjE1ZFg1
Y2NNRUdnPSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAg
ICAgImRvbWVsZW1lbnR0eXBlIjogIjEuMy4wIiwKLSAgICAgICAgImRvbWhhbmRsZXIiOiAiMi4z
LjAiLAotICAgICAgICAiZG9tdXRpbHMiOiAiMS41LjEiLAotICAgICAgICAiZW50aXRpZXMiOiAi
MS4wLjAiLAotICAgICAgICAicmVhZGFibGUtc3RyZWFtIjogIjEuMS4xNCIKLSAgICAgIH0sCi0g
ICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZW50aXRpZXMiOiB7Ci0gICAgICAgICAg
InZlcnNpb24iOiAiMS4wLjAiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lz
dHJ5Lm5wbWpzLm9yZy9lbnRpdGllcy8tL2VudGl0aWVzLTEuMC4wLnRneiIsCi0gICAgICAgICAg
ImludGVncml0eSI6ICJzaGExLXNwaDZvNElUUi96ZVpDc2svZnllVDdjU3Z5WT0iLAotICAgICAg
ICAgICJkZXYiOiB0cnVlCi0gICAgICAgIH0sCi0gICAgICAgICJpc2FycmF5IjogewotICAgICAg
ICAgICJ2ZXJzaW9uIjogIjAuMC4xIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9y
ZWdpc3RyeS5ucG1qcy5vcmcvaXNhcnJheS8tL2lzYXJyYXktMC4wLjEudGd6IiwKLSAgICAgICAg
ICAiaW50ZWdyaXR5IjogInNoYTEtaWhpcy9LbW85QmQrQ2F2OFlEaVRtd1hSN3Q4PSIsCi0gICAg
ICAgICAgImRldiI6IHRydWUKLSAgICAgICAgfSwKLSAgICAgICAgInJlYWRhYmxlLXN0cmVhbSI6
IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIxLjEuMTQiLAotICAgICAgICAgICJyZXNvbHZlZCI6
ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZWFkYWJsZS1zdHJlYW0vLS9yZWFkYWJsZS1z
dHJlYW0tMS4xLjE0LnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGExLWZQVEZUdlpJ
NDRFd2hNWTIzU0I1NFdiQWdkaz0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAg
ICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJjb3JlLXV0aWwtaXMiOiAiMS4wLjIiLAotICAg
ICAgICAgICAgImluaGVyaXRzIjogIjIuMC4zIiwKLSAgICAgICAgICAgICJpc2FycmF5IjogIjAu
MC4xIiwKLSAgICAgICAgICAgICJzdHJpbmdfZGVjb2RlciI6ICIwLjEwLjMxIgotICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgImh0dHAtZXJyb3JzIjogewotICAg
ICAgInZlcnNpb24iOiAiMS42LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0
cnkubnBtanMub3JnL2h0dHAtZXJyb3JzLy0vaHR0cC1lcnJvcnMtMS42LjIudGd6IiwKLSAgICAg
ICJpbnRlZ3JpdHkiOiAic2hhMS1DZ0FzeUZjSEdTcCtlVWJPN2NFUlZmWU94elk9IiwKLSAgICAg
ICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiZGVwZCI6ICIxLjEu
MSIsCi0gICAgICAgICJpbmhlcml0cyI6ICIyLjAuMyIsCi0gICAgICAgICJzZXRwcm90b3R5cGVv
ZiI6ICIxLjAuMyIsCi0gICAgICAgICJzdGF0dXNlcyI6ICIxLjMuMSIKLSAgICAgIH0KLSAgICB9
LAotICAgICJodHRwLXByb3h5IjogewotICAgICAgInZlcnNpb24iOiAiMS4xNi4yIiwKLSAgICAg
ICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9odHRwLXByb3h5Ly0vaHR0
cC1wcm94eS0xLjE2LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1CdC95a3BVcjlr
MitoSEg2bmZjd1p0VHpkMEk9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVz
IjogewotICAgICAgICAiZXZlbnRlbWl0dGVyMyI6ICIxLjIuMCIsCi0gICAgICAgICJyZXF1aXJl
cy1wb3J0IjogIjEuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgImljb252LWxpdGUiOiB7Ci0g
ICAgICAidmVyc2lvbiI6ICIwLjQuMTgiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVn
aXN0cnkubnBtanMub3JnL2ljb252LWxpdGUvLS9pY29udi1saXRlLTAuNC4xOC50Z3oiLAotICAg
ICAgImludGVncml0eSI6ICJzaGE1MTItc3IxWlFwaDNVd0hUUjBYZnRTYks4NU92QmJ4ZS9hYkxH
ekVuUEVOQ1F3bUhmN3NjazhPeXU0b2IzTGdCeFdXeFJvTStRc3plVXlsN2picWFwdTJUcUE9PSIs
Ci0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgImltdXJtdXJoYXNoIjogewotICAgICAg
InZlcnNpb24iOiAiMC4xLjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnku
bnBtanMub3JnL2ltdXJtdXJoYXNoLy0vaW11cm11cmhhc2gtMC4xLjQudGd6IiwKLSAgICAgICJp
bnRlZ3JpdHkiOiAic2hhMS1raGk1c3Jrb29qaXhQY1Q3YTIxWGJ5TVVVK289IiwKLSAgICAgICJk
ZXYiOiB0cnVlCi0gICAgfSwKLSAgICAiaW5kZXhvZiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAu
MC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pbmRl
eG9mLy0vaW5kZXhvZi0wLjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLWd0d3pi
U01ya0dJWG5RV3JNcE9tWUZuOVExMD0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAg
ICJpbmZsZWN0aW9uIjogewotICAgICAgInZlcnNpb24iOiAiMS4xMi4wIiwKLSAgICAgICJyZXNv
bHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pbmZsZWN0aW9uLy0vaW5mbGVjdGlv
bi0xLjEyLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1vZ0NUVmxiVzlmYThUY2RR
TGhyc3R3TWloQlk9IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAiaW5mbGlnaHQi
OiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuNiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6
Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaW5mbGlnaHQvLS9pbmZsaWdodC0xLjAuNi50Z3oiLAotICAg
ICAgImludGVncml0eSI6ICJzaGExLVNiMWpNZGZRTFF3SnZKRUtFSFc2Z1dXMWJmaz0iLAotICAg
ICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJvbmNlIjogIjEu
NC4wIiwKLSAgICAgICAgIndyYXBweSI6ICIxLjAuMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJp
bmhlcml0cyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4zIiwKLSAgICAgICJyZXNvbHZlZCI6
ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pbmhlcml0cy8tL2luaGVyaXRzLTIuMC4zLnRn
eiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtWXp3c2crUGFRcVVDOVNSbUFpU0E5Q0NDWWQ0
PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgImluaSI6IHsKLSAgICAgICJ2ZXJz
aW9uIjogIjEuMy40IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpz
Lm9yZy9pbmkvLS9pbmktMS4zLjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1CVGZM
ZWRyMW0xbWhwUmZmOXdiSWJzQTVGaTQ9IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAg
ICAiaW5saW5lLXNvdXJjZS1tYXAtY29tbWVudCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC41
IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pbmxpbmUt
c291cmNlLW1hcC1jb21tZW50Ly0vaW5saW5lLXNvdXJjZS1tYXAtY29tbWVudC0xLjAuNS50Z3oi
LAotICAgICAgImludGVncml0eSI6ICJzaGExLVVLaWtUQ3A1RGZyRVFiWEpUc3pWUmlZMSt2WT0i
LAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJjaGFs
ayI6ICIxLjEuMyIsCi0gICAgICAgICJnZXQtc3RkaW4iOiAiNC4wLjEiLAotICAgICAgICAibWlu
aW1pc3QiOiAiMS4yLjAiLAotICAgICAgICAic3VtLXVwIjogIjEuMC4zIiwKLSAgICAgICAgInh0
ZW5kIjogIjQuMC4xIgotICAgICAgfSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAg
ICJtaW5pbWlzdCI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIxLjIuMCIsCi0gICAgICAgICAg
InJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21pbmltaXN0Ly0vbWluaW1p
c3QtMS4yLjAudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTEtbzFBSXNnOUJPRDdz
SDdrVTlNMWQ5NW9tUW9RPSIsCi0gICAgICAgICAgImRldiI6IHRydWUKLSAgICAgICAgfQotICAg
ICAgfQotICAgIH0sCi0gICAgImlucXVpcmVyIjogewotICAgICAgInZlcnNpb24iOiAiMS4yLjMi
LAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lucXVpcmVy
Ly0vaW5xdWlyZXItMS4yLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1UZXh2TXZO
Kzk3c0xMdFB4MGFYRDlVVUhTUmc9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVp
cmVzIjogewotICAgICAgICAiYW5zaS1lc2NhcGVzIjogIjEuNC4wIiwKLSAgICAgICAgImNoYWxr
IjogIjEuMS4zIiwKLSAgICAgICAgImNsaS1jdXJzb3IiOiAiMS4wLjIiLAotICAgICAgICAiY2xp
LXdpZHRoIjogIjIuMS4wIiwKLSAgICAgICAgImV4dGVybmFsLWVkaXRvciI6ICIxLjEuMSIsCi0g
ICAgICAgICJmaWd1cmVzIjogIjEuNy4wIiwKLSAgICAgICAgImxvZGFzaCI6ICI0LjE3LjQiLAot
ICAgICAgICAibXV0ZS1zdHJlYW0iOiAiMC4wLjYiLAotICAgICAgICAicGlua2llLXByb21pc2Ui
OiAiMi4wLjEiLAotICAgICAgICAicnVuLWFzeW5jIjogIjIuMy4wIiwKLSAgICAgICAgInJ4Ijog
IjQuMS4wIiwKLSAgICAgICAgInN0cmluZy13aWR0aCI6ICIxLjAuMiIsCi0gICAgICAgICJzdHJp
cC1hbnNpIjogIjMuMC4xIiwKLSAgICAgICAgInRocm91Z2giOiAiMi4zLjgiCi0gICAgICB9LAot
ICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImxvZGFzaCI6IHsKLSAgICAgICAgICAi
dmVyc2lvbiI6ICI0LjE3LjQiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lz
dHJ5Lm5wbWpzLm9yZy9sb2Rhc2gvLS9sb2Rhc2gtNC4xNy40LnRneiIsCi0gICAgICAgICAgImlu
dGVncml0eSI6ICJzaGExLWVDQTZUUnd5aXVIWWJjcGtZT05wdFg5QVZhND0iLAotICAgICAgICAg
ICJkZXYiOiB0cnVlCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJpbnZhcmlhbnQi
OiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjIuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6
Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaW52YXJpYW50Ly0vaW52YXJpYW50LTIuMi4yLnRneiIsCi0g
ICAgICAiaW50ZWdyaXR5IjogInNoYTEtbmg5V3JBck50cjh3TXdiek9MNDdJRXJtQTJBPSIsCi0g
ICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImxvb3NlLWVu
dmlmeSI6ICIxLjMuMSIKLSAgICAgIH0KLSAgICB9LAotICAgICJpbnZlcnQta3YiOiB7Ci0gICAg
ICAidmVyc2lvbiI6ICIxLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3Ry
eS5ucG1qcy5vcmcvaW52ZXJ0LWt2Ly0vaW52ZXJ0LWt2LTEuMC4wLnRneiIsCi0gICAgICAiaW50
ZWdyaXR5IjogInNoYTEtRUVxT1NxeW0wOWpORlhxTytMK3JMWG8vL2JZPSIsCi0gICAgICAiZGV2
IjogdHJ1ZQotICAgIH0sCi0gICAgImlwYWRkci5qcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEu
NC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pcGFk
ZHIuanMvLS9pcGFkZHIuanMtMS40LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1L
V3JLaDRxQ0dCYmx1RjBLS0ZxWnZQOUZndkE9IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwK
LSAgICAiaXMtYmluYXJ5LXBhdGgiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMSIsCi0gICAg
ICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtYmluYXJ5LXBhdGgv
LS9pcy1iaW5hcnktcGF0aC0xLjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLWRm
Rm1RclNBOFllbkVjZ1VGaC9UcEtkbFdKZz0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAi
cmVxdWlyZXMiOiB7Ci0gICAgICAgICJiaW5hcnktZXh0ZW5zaW9ucyI6ICIxLjkuMCIKLSAgICAg
IH0KLSAgICB9LAotICAgICJpcy1idWZmZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjEuNSIs
Ci0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtYnVmZmVy
Ly0vaXMtYnVmZmVyLTEuMS41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtSHpzbTcy
RTdJVXVJeThvanpHd0IySGxoN3N3PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAg
ImlzLWRvdGZpbGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMyIsCi0gICAgICAicmVzb2x2
ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtZG90ZmlsZS8tL2lzLWRvdGZpbGUt
MS4wLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1wcUx6TC8wdCt3VDF5aVhzMFBh
NFBQZVlvZUU9IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAiaXMtZXF1YWwtc2hh
bGxvdyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMS4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJo
dHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pcy1lcXVhbC1zaGFsbG93Ly0vaXMtZXF1YWwtc2hh
bGxvdy0wLjEuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLUlqZ0pqOEloM2d2UHBk
bnF4TVJkWTRxaHhUUT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7
Ci0gICAgICAgICJpcy1wcmltaXRpdmUiOiAiMi4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAi
aXMtZXh0ZW5kYWJsZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMS4xIiwKLSAgICAgICJyZXNv
bHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pcy1leHRlbmRhYmxlLy0vaXMtZXh0
ZW5kYWJsZS0wLjEuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLVlyRVE0b21rY1VH
T1BzTnFZWDFITGpBZC9Jaz0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJpcy1l
eHRnbG9iIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjAiLAotICAgICAgInJlc29sdmVkIjog
Imh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLWV4dGdsb2IvLS9pcy1leHRnbG9iLTEuMC4w
LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtckVhQmQ4U1VOQVdna3Z5UEtYWU1iL3hp
QnNBPSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgImlzLWZpbml0ZSI6IHsKLSAg
ICAgICJ2ZXJzaW9uIjogIjEuMC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lz
dHJ5Lm5wbWpzLm9yZy9pcy1maW5pdGUvLS9pcy1maW5pdGUtMS4wLjIudGd6IiwKLSAgICAgICJp
bnRlZ3JpdHkiOiAic2hhMS16R1ozYVZZQ3ZsVU84UjZMU3FZd1UwSzIwS289IiwKLSAgICAgICJk
ZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAibnVtYmVyLWlzLW5hbiI6
ICIxLjAuMSIKLSAgICAgIH0KLSAgICB9LAotICAgICJpcy1mdWxsd2lkdGgtY29kZS1wb2ludCI6
IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczov
L3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pcy1mdWxsd2lkdGgtY29kZS1wb2ludC8tL2lzLWZ1bGx3aWR0
aC1jb2RlLXBvaW50LTEuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtNzU0eE9H
OERHbjhOWkRyNEw5NVF4RmZ2QU1zPSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1
aXJlcyI6IHsKLSAgICAgICAgIm51bWJlci1pcy1uYW4iOiAiMS4wLjEiCi0gICAgICB9Ci0gICAg
fSwKLSAgICAiaXMtZ2l0LXVybCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMi4zIiwKLSAgICAg
ICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pcy1naXQtdXJsLy0vaXMt
Z2l0LXVybC0wLjIuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLVJGSUExdnZXMmdL
UHRlQVVRTm12eVQ4OHkyUT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJpcy1n
bG9iIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0
dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLWdsb2IvLS9pcy1nbG9iLTIuMC4xLnRneiIsCi0g
ICAgICAiaW50ZWdyaXR5IjogInNoYTEtMEpiNUpxUGUxV0FQUDkvWkVaakxDSWpDMkdNPSIsCi0g
ICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImlzLWV4dGds
b2IiOiAiMS4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiaXMtaW50ZWdlciI6IHsKLSAgICAg
ICJ2ZXJzaW9uIjogIjEuMC43IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5
Lm5wbWpzLm9yZy9pcy1pbnRlZ2VyLy0vaXMtaW50ZWdlci0xLjAuNy50Z3oiLAotICAgICAgImlu
dGVncml0eSI6ICJzaGExLWE5NkJxczNmZUxaWnRtS2RZcHl0eFJxSWJWdz0iLAotICAgICAgImRl
diI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJpcy1maW5pdGUiOiAiMS4w
LjIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiaXMtbnVtYmVyIjogewotICAgICAgInZlcnNpb24i
OiAiMi4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3Jn
L2lzLW51bWJlci8tL2lzLW51bWJlci0yLjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJz
aGExLUFmeTdzNU5HT2xTUEwwWnN6aGJlemtuYmtJOD0iLAotICAgICAgImRldiI6IHRydWUsCi0g
ICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJraW5kLW9mIjogIjMuMi4yIgotICAgICAgfQot
ICAgIH0sCi0gICAgImlzLW9iaiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4xIiwKLSAgICAg
ICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pcy1vYmovLS9pcy1vYmot
MS4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1Qa2NwckI5ZjNnSmMxOWc2aVcy
cm4wOW4ydzg9IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAiaXMtcG9zaXgtYnJh
Y2tldCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJo
dHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pcy1wb3NpeC1icmFja2V0Ly0vaXMtcG9zaXgtYnJh
Y2tldC0wLjEuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLU16VGNlWGREYU9rdkFX
NXZ2QXFJOWMxdWE4UT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJpcy1wcmlt
aXRpdmUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAi
aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtcHJpbWl0aXZlLy0vaXMtcHJpbWl0aXZlLTIu
MC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtSUh1cmtXT0VtY0I3S3Q4a0NrR29j
aEFEUlhVPSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgImlzLXByb21pc2UiOiB7
Ci0gICAgICAidmVyc2lvbiI6ICIyLjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9y
ZWdpc3RyeS5ucG1qcy5vcmcvaXMtcHJvbWlzZS8tL2lzLXByb21pc2UtMi4xLjAudGd6IiwKLSAg
ICAgICJpbnRlZ3JpdHkiOiAic2hhMS1lYUtwN09md2x1Z1BOdEt5ODd3V3dmOUw4L289IiwKLSAg
ICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAiaXMtc3RyZWFtIjogewotICAgICAgInZlcnNp
b24iOiAiMS4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMu
b3JnL2lzLXN0cmVhbS8tL2lzLXN0cmVhbS0xLjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6
ICJzaGExLUV0U2ozVTVvNExlYzY0MjhoQmM2NkEyUnlrUT0iLAotICAgICAgImRldiI6IHRydWUK
LSAgICB9LAotICAgICJpcy10eXBlIjogewotICAgICAgInZlcnNpb24iOiAiMC4wLjEiLAotICAg
ICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLXR5cGUvLS9pcy10
eXBlLTAuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtOWxIWVhEWmRSSlZkRktV
ZGpYQmg4L2EwZDV3PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsK
LSAgICAgICAgImNvcmUtdXRpbC1pcyI6ICIxLjAuMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJp
cy11dGY4IjogewotICAgICAgInZlcnNpb24iOiAiMC4yLjEiLAotICAgICAgInJlc29sdmVkIjog
Imh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLXV0ZjgvLS9pcy11dGY4LTAuMi4xLnRneiIs
Ci0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtU3cyaFJDRUUwYk0yTkE2QWVYNkdYUE9mZlhJPSIs
Ci0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgImlzLXdpbmRvd3MiOiB7Ci0gICAgICAi
dmVyc2lvbiI6ICIwLjIuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5u
cG1qcy5vcmcvaXMtd2luZG93cy8tL2lzLXdpbmRvd3MtMC4yLjAudGd6IiwKLSAgICAgICJpbnRl
Z3JpdHkiOiAic2hhMS0zaHFtMWo2aW5kSkljM3RwOGYrTGdBTFNFSXc9IiwKLSAgICAgICJkZXYi
OiB0cnVlCi0gICAgfSwKLSAgICAiaXNhcnJheSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4w
IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pc2FycmF5
Ly0vaXNhcnJheS0xLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLXU1TmRTRmdz
dWhhTUJvTkpWNlZLUGdjU1R4RT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJp
c2JpbmFyeWZpbGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjAuMiIsCi0gICAgICAicmVzb2x2
ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXNiaW5hcnlmaWxlLy0vaXNiaW5hcnlm
aWxlLTMuMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtU2o2WFRzRExxUUJOUDhi
TjV5Q2VwcE5vcGlFPSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgImlzZXhlIjog
ewotICAgICAgInZlcnNpb24iOiAiMi4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8v
cmVnaXN0cnkubnBtanMub3JnL2lzZXhlLy0vaXNleGUtMi4wLjAudGd6IiwKLSAgICAgICJpbnRl
Z3JpdHkiOiAic2hhMS02UHZ6ZE54VmIvaVVlaERjc0ZjdFl6OHMraEE9IiwKLSAgICAgICJkZXYi
OiB0cnVlCi0gICAgfSwKLSAgICAiaXNvYmplY3QiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjEu
MCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXNvYmpl
Y3QvLS9pc29iamVjdC0yLjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLThHVldF
SmFqOGRvdTlHSnkrQlhJUU5oK0RJaz0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVx
dWlyZXMiOiB7Ci0gICAgICAgICJpc2FycmF5IjogIjEuMC4wIgotICAgICAgfQotICAgIH0sCi0g
ICAgImlzdGV4dG9yYmluYXJ5IjogewotICAgICAgInZlcnNpb24iOiAiMi4xLjAiLAotICAgICAg
InJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzdGV4dG9yYmluYXJ5Ly0v
aXN0ZXh0b3JiaW5hcnktMi4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS0yKzBx
YjFHK0wzUjF0bytKUmxnUkZCdDFpSFE9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJl
cXVpcmVzIjogewotICAgICAgICAiYmluYXJ5ZXh0ZW5zaW9ucyI6ICIyLjAuMCIsCi0gICAgICAg
ICJlZGl0aW9ucyI6ICIxLjMuMyIsCi0gICAgICAgICJ0ZXh0ZXh0ZW5zaW9ucyI6ICIyLjEuMCIK
LSAgICAgIH0KLSAgICB9LAotICAgICJqcy1yZXBvcnRlcnMiOiB7Ci0gICAgICAidmVyc2lvbiI6
ICIxLjIuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcv
anMtcmVwb3J0ZXJzLy0vanMtcmVwb3J0ZXJzLTEuMi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5
IjogInNoYTEtZlBMTGFZR1dhRWVRTlEwTVRLQi9TdTJld1g0PSIsCi0gICAgICAiZGV2IjogdHJ1
ZQotICAgIH0sCi0gICAgImpzLXRva2VucyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4xIiwK
LSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qcy10b2tlbnMv
LS9qcy10b2tlbnMtMS4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS16RU5hWEl1
VXJSV3N0NWd4UVB5QUdDeUpycTQ9IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAi
anMteWFtbCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuOS4xIiwKLSAgICAgICJyZXNvbHZlZCI6
ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qcy15YW1sLy0vanMteWFtbC0zLjkuMS50Z3oi
LAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItQ2JjRzM3OUwxZSttV0JuTHZIV1dlTHM4R3lW
L0VNdzg2MnVMSTNjK0d4VnlESFdaY2paaW53dUJkM2lXMnBneGdJbGtzVy8xdk5KYTR0bytSdkRP
d3c9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAg
ImFyZ3BhcnNlIjogIjEuMC45IiwKLSAgICAgICAgImVzcHJpbWEiOiAiNC4wLjAiCi0gICAgICB9
LAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImVzcHJpbWEiOiB7Ci0gICAgICAg
ICAgInZlcnNpb24iOiAiNC4wLjAiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3Jl
Z2lzdHJ5Lm5wbWpzLm9yZy9lc3ByaW1hLy0vZXNwcmltYS00LjAuMC50Z3oiLAotICAgICAgICAg
ICJpbnRlZ3JpdHkiOiAic2hhNTEyLW9mdFRjYU11L0VHckVJdTkwNG1XdGVLSXY4dk11T2dHWW83
RWhWSkpOMDBSL0VFRDlEQ3VhL3h4SFJkWW5LdGNFQ3pWZzd4T1doZmx2Sk1ucWNGWmp3PT0iLAot
ICAgICAgICAgICJkZXYiOiB0cnVlCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJq
c2VzYyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuNS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJo
dHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qc2VzYy8tL2pzZXNjLTAuNS4wLnRneiIsCi0gICAg
ICAiaW50ZWdyaXR5IjogInNoYTEtNTk3bWJqWFcvQmIzRVA2UjFjOXA5dzhJa1IwPSIsCi0gICAg
ICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgImpzaGludCI6IHsKLSAgICAgICJ2ZXJzaW9uIjog
IjIuOS41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9q
c2hpbnQvLS9qc2hpbnQtMi45LjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1IbkpT
a1Z6bWdiUUlKKzRVSkl4RzAwNmFwaXc9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJl
cXVpcmVzIjogewotICAgICAgICAiY2xpIjogIjEuMC4xIiwKLSAgICAgICAgImNvbnNvbGUtYnJv
d3NlcmlmeSI6ICIxLjEuMCIsCi0gICAgICAgICJleGl0IjogIjAuMS4yIiwKLSAgICAgICAgImh0
bWxwYXJzZXIyIjogIjMuOC4zIiwKLSAgICAgICAgImxvZGFzaCI6ICIzLjcuMCIsCi0gICAgICAg
ICJtaW5pbWF0Y2giOiAiMy4wLjQiLAotICAgICAgICAic2hlbGxqcyI6ICIwLjMuMCIsCi0gICAg
ICAgICJzdHJpcC1qc29uLWNvbW1lbnRzIjogIjEuMC40IgotICAgICAgfSwKLSAgICAgICJkZXBl
bmRlbmNpZXMiOiB7Ci0gICAgICAgICJsb2Rhc2giOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAi
My43LjAiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9y
Zy9sb2Rhc2gvLS9sb2Rhc2gtMy43LjAudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNo
YTEtTm5pOWlybVZCWHdIcmVnMjdTN3doOXFCSFVVPSIsCi0gICAgICAgICAgImRldiI6IHRydWUK
LSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgImpzb24tc3RhYmxlLXN0cmluZ2lmeSI6
IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczov
L3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qc29uLXN0YWJsZS1zdHJpbmdpZnkvLS9qc29uLXN0YWJsZS1z
dHJpbmdpZnktMS4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1tbldkT2NYeS8x
QS8xVEFHUnUxRVg0akUrYTg9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVz
IjogewotICAgICAgICAianNvbmlmeSI6ICIwLjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJq
c29uMyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMy4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJo
dHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qc29uMy8tL2pzb24zLTMuMy4yLnRneiIsCi0gICAg
ICAiaW50ZWdyaXR5IjogInNoYTEtUEFRMGREMzVQaTljUXE3bnNadkxTRFYxOU9FPSIsCi0gICAg
ICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgImpzb241IjogewotICAgICAgInZlcnNpb24iOiAi
MC40LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2pz
b241Ly0vanNvbjUtMC40LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1CVU5TNU1U
SURJYkFramgzMUVuZUYycHpMSTA9IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAi
anNvbmZpbGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjQuMCIsCi0gICAgICAicmVzb2x2ZWQi
OiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvanNvbmZpbGUvLS9qc29uZmlsZS0yLjQuMC50
Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLU56YWl0Q2k0ZTcyZ3pJTzFQNlBXTTZOY0t1
Zz0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJn
cmFjZWZ1bC1mcyI6ICI0LjEuMTEiCi0gICAgICB9Ci0gICAgfSwKLSAgICAianNvbmlmeSI6IHsK
LSAgICAgICJ2ZXJzaW9uIjogIjAuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3Jl
Z2lzdHJ5Lm5wbWpzLm9yZy9qc29uaWZ5Ly0vanNvbmlmeS0wLjAuMC50Z3oiLAotICAgICAgImlu
dGVncml0eSI6ICJzaGExLUxIUzI3a0haUEtVYmUxcXU2UFVEWXgwbEtuTT0iLAotICAgICAgImRl
diI6IHRydWUKLSAgICB9LAotICAgICJraW5kLW9mIjogewotICAgICAgInZlcnNpb24iOiAiMy4y
LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2tpbmQt
b2YvLS9raW5kLW9mLTMuMi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtTWVvaHB6
UzZ1YnV3OHlSbTJKT3VwUjVLUEdRPSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1
aXJlcyI6IHsKLSAgICAgICAgImlzLWJ1ZmZlciI6ICIxLjEuNSIKLSAgICAgIH0KLSAgICB9LAot
ICAgICJrbGF3IjogewotICAgICAgInZlcnNpb24iOiAiMS4zLjEiLAotICAgICAgInJlc29sdmVk
IjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2tsYXcvLS9rbGF3LTEuMy4xLnRneiIsCi0g
ICAgICAiaW50ZWdyaXR5IjogInNoYTEtUUloRE8wYXpzYm9sblhoNFhZNlc5enVnSkRrPSIsCi0g
ICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImdyYWNlZnVs
LWZzIjogIjQuMS4xMSIKLSAgICAgIH0KLSAgICB9LAotICAgICJsYXp5LWNhY2hlIjogewotICAg
ICAgInZlcnNpb24iOiAiMS4wLjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0
cnkubnBtanMub3JnL2xhenktY2FjaGUvLS9sYXp5LWNhY2hlLTEuMC40LnRneiIsCi0gICAgICAi
aW50ZWdyaXR5IjogInNoYTEtb2RlUHc2VUVkTXVBaEYwN08yNGRwSnBFYm80PSIsCi0gICAgICAi
ZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgImxjaWQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAu
MCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbGNpZC8t
L2xjaWQtMS4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1NSXJNcjZDOFNEbzRa
N1MyOHJsUVlsSFJ1RFU9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjog
ewotICAgICAgICAiaW52ZXJ0LWt2IjogIjEuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgImxl
ZWsiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjAuMjQiLAotICAgICAgInJlc29sdmVkIjogImh0
dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2xlZWsvLS9sZWVrLTAuMC4yNC50Z3oiLAotICAgICAg
ImludGVncml0eSI6ICJzaGExLTVBRGxmdzVnMk84cjFOQm8zRUtLVkRSZHZObz0iLAotICAgICAg
ImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJkZWJ1ZyI6ICIyLjYu
OCIsCi0gICAgICAgICJsb2Rhc2guYXNzaWduIjogIjMuMi4wIiwKLSAgICAgICAgInJzdnAiOiAi
My42LjIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibGV2ZW4iOiB7Ci0gICAgICAidmVyc2lvbiI6
ICIxLjAuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcv
bGV2ZW4vLS9sZXZlbi0xLjAuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLWtVUzI3
cnlsOGRCb0FXbnhwbmNOenFZTGRjTT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAg
ICJsaW5raWZ5LWl0IjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjMiLAotICAgICAgInJlc29s
dmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2xpbmtpZnktaXQvLS9saW5raWZ5LWl0
LTIuMC4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtMlVwR1NQbXh3WG5XVDZseWtT
YUwyMnpwUTA4PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAg
ICAgICAgInVjLm1pY3JvIjogIjEuMC4zIgotICAgICAgfQotICAgIH0sCi0gICAgImxpdmVyZWxv
YWQtanMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjIuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAi
aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbGl2ZXJlbG9hZC1qcy8tL2xpdmVyZWxvYWQtanMt
Mi4yLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1iSWNsZm1TS3RIVzhKT29sZEZm
dHpCK05DOEk9IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAibG9hZGVyLmpzIjog
ewotICAgICAgInZlcnNpb24iOiAiNC42LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8v
cmVnaXN0cnkubnBtanMub3JnL2xvYWRlci5qcy8tL2xvYWRlci5qcy00LjYuMC50Z3oiLAotICAg
ICAgImludGVncml0eSI6ICJzaGE1MTItTmpBbnpNcS9CTTJWbFhBOWVyME54MVJ1bm9jZ2kraEVV
NTNFTmhDdFR4ODJHWDYvbDlOWHdmSXFnODFvbTZRdm1oVWx2MnpIKzRSK04rd09vZVh5dFE9PSIs
Ci0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgImxvY2F0ZS1wYXRoIjogewotICAgICAg
InZlcnNpb24iOiAiMi4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnku
bnBtanMub3JnL2xvY2F0ZS1wYXRoLy0vbG9jYXRlLXBhdGgtMi4wLjAudGd6IiwKLSAgICAgICJp
bnRlZ3JpdHkiOiAic2hhMS1LMWFMSmw3c2xFeHRuQTNwdzl1N3lnTlV6WTQ9IiwKLSAgICAgICJk
ZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAicC1sb2NhdGUiOiAiMi4w
LjAiLAotICAgICAgICAicGF0aC1leGlzdHMiOiAiMy4wLjAiCi0gICAgICB9LAotICAgICAgImRl
cGVuZGVuY2llcyI6IHsKLSAgICAgICAgInBhdGgtZXhpc3RzIjogewotICAgICAgICAgICJ2ZXJz
aW9uIjogIjMuMC4wIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5u
cG1qcy5vcmcvcGF0aC1leGlzdHMvLS9wYXRoLWV4aXN0cy0zLjAuMC50Z3oiLAotICAgICAgICAg
ICJpbnRlZ3JpdHkiOiAic2hhMS16ZzYrcWw5NHl4aVNYcWZZRU5lMW13RVAxUlU9IiwKLSAgICAg
ICAgICAiZGV2IjogdHJ1ZQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAibG9kYXNo
IjogewotICAgICAgInZlcnNpb24iOiAiMy4xMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRw
czovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9sb2Rhc2gvLS9sb2Rhc2gtMy4xMC4xLnRneiIsCi0gICAg
ICAiaW50ZWdyaXR5IjogInNoYTEtVy9SZWprbTZRWW5oZlVnbmlkL1JXOUZBdDdZPSIsCi0gICAg
ICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgImxvZGFzaC5fYmFzZWFzc2lnbiI6IHsKLSAgICAg
ICJ2ZXJzaW9uIjogIjMuMi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5
Lm5wbWpzLm9yZy9sb2Rhc2guX2Jhc2Vhc3NpZ24vLS9sb2Rhc2guX2Jhc2Vhc3NpZ24tMy4yLjAu
dGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1qRGlnbVZBUElWclFubG54Y2kvUXhTditD
azQ9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAi
bG9kYXNoLl9iYXNlY29weSI6ICIzLjAuMSIsCi0gICAgICAgICJsb2Rhc2gua2V5cyI6ICIzLjEu
MiIKLSAgICAgIH0KLSAgICB9LAotICAgICJsb2Rhc2guX2Jhc2Vjb3B5IjogewotICAgICAgInZl
cnNpb24iOiAiMy4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBt
anMub3JnL2xvZGFzaC5fYmFzZWNvcHkvLS9sb2Rhc2guX2Jhc2Vjb3B5LTMuMC4xLnRneiIsCi0g
ICAgICAiaW50ZWdyaXR5IjogInNoYTEtamFEbXFIYlBORXdLMktWSWdoRWQwOFhIeWpZPSIsCi0g
ICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgImxvZGFzaC5fYmFzZWZsYXR0ZW4iOiB7Ci0g
ICAgICAidmVyc2lvbiI6ICIzLjEuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdp
c3RyeS5ucG1qcy5vcmcvbG9kYXNoLl9iYXNlZmxhdHRlbi8tL2xvZGFzaC5fYmFzZWZsYXR0ZW4t
My4xLjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1CM0QvZ0JNYTl1TlBPMUVYbHFl
NlVoVG1YL2M9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAg
ICAgICAibG9kYXNoLmlzYXJndW1lbnRzIjogIjMuMS4wIiwKLSAgICAgICAgImxvZGFzaC5pc2Fy
cmF5IjogIjMuMC40IgotICAgICAgfQotICAgIH0sCi0gICAgImxvZGFzaC5fYmluZGNhbGxiYWNr
IjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBz
Oi8vcmVnaXN0cnkubnBtanMub3JnL2xvZGFzaC5fYmluZGNhbGxiYWNrLy0vbG9kYXNoLl9iaW5k
Y2FsbGJhY2stMy4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS01VEhDZGtUUGkx
ZXBuaGZ0bGJOY2RJZUpPUzQ9IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAibG9k
YXNoLl9jcmVhdGVhc3NpZ25lciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMS4xIiwKLSAgICAg
ICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9sb2Rhc2guX2NyZWF0ZWFz
c2lnbmVyLy0vbG9kYXNoLl9jcmVhdGVhc3NpZ25lci0zLjEuMS50Z3oiLAotICAgICAgImludGVn
cml0eSI6ICJzaGExLWc0cGJyaS9heW1Pc0l0N280WitrNXRhWEN4RT0iLAotICAgICAgImRldiI6
IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJsb2Rhc2guX2JpbmRjYWxsYmFj
ayI6ICIzLjAuMSIsCi0gICAgICAgICJsb2Rhc2guX2lzaXRlcmF0ZWVjYWxsIjogIjMuMC45IiwK
LSAgICAgICAgImxvZGFzaC5yZXN0cGFyYW0iOiAiMy42LjEiCi0gICAgICB9Ci0gICAgfSwKLSAg
ICAibG9kYXNoLl9nZXRuYXRpdmUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjkuMSIsCi0gICAg
ICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbG9kYXNoLl9nZXRuYXRp
dmUvLS9sb2Rhc2guX2dldG5hdGl2ZS0zLjkuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJz
aGExLVZ3dkgzdDVHMWh6YzNtaDlaZFB1eTZvNnIvVT0iLAotICAgICAgImRldiI6IHRydWUKLSAg
ICB9LAotICAgICJsb2Rhc2guX2lzaXRlcmF0ZWVjYWxsIjogewotICAgICAgInZlcnNpb24iOiAi
My4wLjkiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2xv
ZGFzaC5faXNpdGVyYXRlZWNhbGwvLS9sb2Rhc2guX2lzaXRlcmF0ZWVjYWxsLTMuMC45LnRneiIs
Ci0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtVWdPdGU2UWwrdWhDUmc1cGJiblBQbXFzQlh3PSIs
Ci0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgImxvZGFzaC5fcmVpbnRlcnBvbGF0ZSI6
IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczov
L3JlZ2lzdHJ5Lm5wbWpzLm9yZy9sb2Rhc2guX3JlaW50ZXJwb2xhdGUvLS9sb2Rhc2guX3JlaW50
ZXJwb2xhdGUtMy4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1ETTh0aVJacThE
czJZOGVXVTR0MXJHNFJUWjA9IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAibG9k
YXNoLmFzc2lnbiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMi4wIiwKLSAgICAgICJyZXNvbHZl
ZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9sb2Rhc2guYXNzaWduLy0vbG9kYXNoLmFz
c2lnbi0zLjIuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLVBPbndJMHRMSWlQaWxy
ajZDc0grNk92S1pQbz0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7
Ci0gICAgICAgICJsb2Rhc2guX2Jhc2Vhc3NpZ24iOiAiMy4yLjAiLAotICAgICAgICAibG9kYXNo
Ll9jcmVhdGVhc3NpZ25lciI6ICIzLjEuMSIsCi0gICAgICAgICJsb2Rhc2gua2V5cyI6ICIzLjEu
MiIKLSAgICAgIH0KLSAgICB9LAotICAgICJsb2Rhc2guYXNzaWduaW4iOiB7Ci0gICAgICAidmVy
c2lvbiI6ICI0LjIuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1q
cy5vcmcvbG9kYXNoLmFzc2lnbmluLy0vbG9kYXNoLmFzc2lnbmluLTQuMi4wLnRneiIsCi0gICAg
ICAiaW50ZWdyaXR5IjogInNoYTEtdW8zMSs0UWVzS1BvQkVJeXNPSmpxTnhxS0tJPSIsCi0gICAg
ICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgImxvZGFzaC5jbG9uZWRlZXAiOiB7Ci0gICAgICAi
dmVyc2lvbiI6ICI0LjUuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5u
cG1qcy5vcmcvbG9kYXNoLmNsb25lZGVlcC8tL2xvZGFzaC5jbG9uZWRlZXAtNC41LjAudGd6IiwK
LSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS00ajgvbkUrUHZkNkhKU25CQnhoWG9JYmx6Tzg9IiwK
LSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAibG9kYXNoLmRlYm91bmNlIjogewotICAg
ICAgInZlcnNpb24iOiAiMy4xLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0
cnkubnBtanMub3JnL2xvZGFzaC5kZWJvdW5jZS8tL2xvZGFzaC5kZWJvdW5jZS0zLjEuMS50Z3oi
LAotICAgICAgImludGVncml0eSI6ICJzaGExLWdTSVJ3M2lwVE1LZFdxVGpOR3p3djg0NmZmVT0i
LAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJsb2Rh
c2guX2dldG5hdGl2ZSI6ICIzLjkuMSIKLSAgICAgIH0KLSAgICB9LAotICAgICJsb2Rhc2guZmlu
ZCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuNi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRw
czovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9sb2Rhc2guZmluZC8tL2xvZGFzaC5maW5kLTQuNi4wLnRn
eiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEteXdjRTFIcTNGNG4vb042TGw5MlNiN2lMRTdF
PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgImxvZGFzaC5mbGF0dGVuIjogewot
ICAgICAgInZlcnNpb24iOiAiMy4wLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVn
aXN0cnkubnBtanMub3JnL2xvZGFzaC5mbGF0dGVuLy0vbG9kYXNoLmZsYXR0ZW4tMy4wLjIudGd6
IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS0zaHoxZDFqNDlFZVRHZE5jUHB6R0RFVUJrNHc9
IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAibG9k
YXNoLl9iYXNlZmxhdHRlbiI6ICIzLjEuNCIsCi0gICAgICAgICJsb2Rhc2guX2lzaXRlcmF0ZWVj
YWxsIjogIjMuMC45IgotICAgICAgfQotICAgIH0sCi0gICAgImxvZGFzaC5pc2FyZ3VtZW50cyI6
IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczov
L3JlZ2lzdHJ5Lm5wbWpzLm9yZy9sb2Rhc2guaXNhcmd1bWVudHMvLS9sb2Rhc2guaXNhcmd1bWVu
dHMtMy4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1MMWM5aGNhaVFvbi9BR1k3
U1J3ZE00L3pSWW89IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAibG9kYXNoLmlz
YXJyYXkiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjAuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAi
aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbG9kYXNoLmlzYXJyYXkvLS9sb2Rhc2guaXNhcnJh
eS0zLjAuNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLWVlVHJpTU5xZ1NLdmh2aEVx
cHZOaFJ0ZnUxVT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJsb2Rhc2gua2V5
cyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMS4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRw
czovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9sb2Rhc2gua2V5cy8tL2xvZGFzaC5rZXlzLTMuMS4yLnRn
eiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtVGJ3RWNyRld2bENnc29hRlhSdlFzTVpXQ1lv
PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImxv
ZGFzaC5fZ2V0bmF0aXZlIjogIjMuOS4xIiwKLSAgICAgICAgImxvZGFzaC5pc2FyZ3VtZW50cyI6
ICIzLjEuMCIsCi0gICAgICAgICJsb2Rhc2guaXNhcnJheSI6ICIzLjAuNCIKLSAgICAgIH0KLSAg
ICB9LAotICAgICJsb2Rhc2gubWVyZ2UiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjYuMCIsCi0g
ICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbG9kYXNoLm1lcmdl
Ly0vbG9kYXNoLm1lcmdlLTQuNi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtYVlo
TG9VU3NNLzVwbHplbUNHM3YrdDBQaWNVPSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0g
ICAgImxvZGFzaC5vbWl0IjogewotICAgICAgInZlcnNpb24iOiAiNC41LjAiLAotICAgICAgInJl
c29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2xvZGFzaC5vbWl0Ly0vbG9kYXNo
Lm9taXQtNC41LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1ickdhNWFIdUhkbmZD
NWFlWnM0TGY2TUxYbUE9IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAibG9kYXNo
LnJlc3RwYXJhbSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuNi4xIiwKLSAgICAgICJyZXNvbHZl
ZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9sb2Rhc2gucmVzdHBhcmFtLy0vbG9kYXNo
LnJlc3RwYXJhbS0zLjYuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLWsycE9NSjd6
TUtka1h0UVVXWWJJV3VXeUNBVT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJs
b2Rhc2gudGVtcGxhdGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjQuMCIsCi0gICAgICAicmVz
b2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbG9kYXNoLnRlbXBsYXRlLy0vbG9k
YXNoLnRlbXBsYXRlLTQuNC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtNXpvRGhj
ZzFWWkYwYmdJTG1XZWNhUTVvKzZBPSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1
aXJlcyI6IHsKLSAgICAgICAgImxvZGFzaC5fcmVpbnRlcnBvbGF0ZSI6ICIzLjAuMCIsCi0gICAg
ICAgICJsb2Rhc2gudGVtcGxhdGVzZXR0aW5ncyI6ICI0LjEuMCIKLSAgICAgIH0KLSAgICB9LAot
ICAgICJsb2Rhc2gudGVtcGxhdGVzZXR0aW5ncyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMS4w
IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9sb2Rhc2gu
dGVtcGxhdGVzZXR0aW5ncy8tL2xvZGFzaC50ZW1wbGF0ZXNldHRpbmdzLTQuMS4wLnRneiIsCi0g
ICAgICAiaW50ZWdyaXR5IjogInNoYTEtSzAxT2xicEVEWkZmOEl2SW1lUlZObVp4TXhZPSIsCi0g
ICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImxvZGFzaC5f
cmVpbnRlcnBvbGF0ZSI6ICIzLjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJsb2Rhc2gudW5p
cSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuNS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRw
czovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9sb2Rhc2gudW5pcS8tL2xvZGFzaC51bmlxLTQuNS4wLnRn
eiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtMENKVGM2NjJVcTNCdklMa2xGTTVxRUoxUjNN
PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgImxvZGFzaC51bmlxYnkiOiB7Ci0g
ICAgICAidmVyc2lvbiI6ICI0LjcuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdp
c3RyeS5ucG1qcy5vcmcvbG9kYXNoLnVuaXFieS8tL2xvZGFzaC51bmlxYnktNC43LjAudGd6IiwK
LSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS0yWndIcG1ucDV0Sk9FMkxmNG1iR2RoYXZFd0k9IiwK
LSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAibG9uZ2VzdCI6IHsKLSAgICAgICJ2ZXJz
aW9uIjogIjEuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpz
Lm9yZy9sb25nZXN0Ly0vbG9uZ2VzdC0xLjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJz
aGExLU1LQ3kyamozTjNEb0tVb05JdVppWHRkOUFKYz0iLAotICAgICAgImRldiI6IHRydWUKLSAg
ICB9LAotICAgICJsb29zZS1lbnZpZnkiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjMuMSIsCi0g
ICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbG9vc2UtZW52aWZ5
Ly0vbG9vc2UtZW52aWZ5LTEuMy4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtMGFp
dE0vcWM0T2NUMWwvZENzaTNTTlI0eUVnPSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJy
ZXF1aXJlcyI6IHsKLSAgICAgICAgImpzLXRva2VucyI6ICIzLjAuMiIKLSAgICAgIH0sCi0gICAg
ICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAianMtdG9rZW5zIjogewotICAgICAgICAgICJ2
ZXJzaW9uIjogIjMuMC4yIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3Ry
eS5ucG1qcy5vcmcvanMtdG9rZW5zLy0vanMtdG9rZW5zLTMuMC4yLnRneiIsCi0gICAgICAgICAg
ImludGVncml0eSI6ICJzaGExLW1HYmZPVkVDRXc0NDkvbVd2T3RsUkRJSndscz0iLAotICAgICAg
ICAgICJkZXYiOiB0cnVlCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJscnUtY2Fj
aGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjEuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0
cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbHJ1LWNhY2hlLy0vbHJ1LWNhY2hlLTQuMS4xLnRneiIs
Ci0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1xNHNwZTRLVGZzQVMxU1VITE8wd3o4UWl5ZjEr
dk1JQWdwUllpb0ZZRE1OcUtmSFFiZytBVkRIM2k0ZnZwbDcxL1AxTDBkQmwrZlFpK1AzN1VZZjBl
dz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAi
cHNldWRvbWFwIjogIjEuMC4yIiwKLSAgICAgICAgInlhbGxpc3QiOiAiMi4xLjIiCi0gICAgICB9
Ci0gICAgfSwKLSAgICAibWFrZS1hcnJheSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMS4yIiwK
LSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9tYWtlLWFycmF5
Ly0vbWFrZS1hcnJheS0wLjEuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLU0xNDI2
N0RGcERGVTBoSVRvZXl1cmlvYnMrOD0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAg
ICJtYWtlLWRpciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4wIiwKLSAgICAgICJyZXNvbHZl
ZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9tYWtlLWRpci8tL21ha2UtZGlyLTEuMC4w
LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtbDZBUmRSNlIzWWZQcmU5WWd5NjdCSk50
NlhnPSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAg
InBpZnkiOiAiMi4zLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibWFrZWVycm9yIjogewotICAg
ICAgInZlcnNpb24iOiAiMS4wLjExIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lz
dHJ5Lm5wbWpzLm9yZy9tYWtlZXJyb3IvLS9tYWtlZXJyb3ItMS4wLjExLnRneiIsCi0gICAgICAi
aW50ZWdyaXR5IjogInNoYTEtNEJwY2tRbnlyM2xtRGs2TGxZZDVBWVQxcVd3PSIsCi0gICAgICAi
ZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgInRtcGwiOiAiMS4wLjQi
Ci0gICAgICB9Ci0gICAgfSwKLSAgICAibWFya2Rvd24taXQiOiB7Ci0gICAgICAidmVyc2lvbiI6
ICI4LjMuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcv
bWFya2Rvd24taXQvLS9tYXJrZG93bi1pdC04LjMuMi50Z3oiLAotICAgICAgImludGVncml0eSI6
ICJzaGE1MTItNEo5MkloSnExa0dveVhkZHd6emZqcjljRUtHZXhCZkZzWm9vS1lNaE1MTGxXYTQr
ZGxTUERVVVA3eSt4UU9DZWJJajYxYUxtS2xvd2cvL1ljZFBQMXc9PSIsCi0gICAgICAiZGV2Ijog
dHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImFyZ3BhcnNlIjogIjEuMC45IiwK
LSAgICAgICAgImVudGl0aWVzIjogIjEuMS4xIiwKLSAgICAgICAgImxpbmtpZnktaXQiOiAiMi4w
LjMiLAotICAgICAgICAibWR1cmwiOiAiMS4wLjEiLAotICAgICAgICAidWMubWljcm8iOiAiMS4w
LjMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibWFya2Rvd24taXQtdGVybWluYWwiOiB7Ci0gICAg
ICAidmVyc2lvbiI6ICIwLjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3Ry
eS5ucG1qcy5vcmcvbWFya2Rvd24taXQtdGVybWluYWwvLS9tYXJrZG93bi1pdC10ZXJtaW5hbC0w
LjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLVZGcTlqZEFjUFdJMU8venFjZHRZ
QzFIU0s5az0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAg
ICAgICJhbnNpLXN0eWxlcyI6ICIzLjIuMCIsCi0gICAgICAgICJjYXJkaW5hbCI6ICIxLjAuMCIs
Ci0gICAgICAgICJjbGktdGFibGUiOiAiMC4zLjEiLAotICAgICAgICAibG9kYXNoLm1lcmdlIjog
IjQuNi4wIiwKLSAgICAgICAgIm1hcmtkb3duLWl0IjogIjguMy4yIgotICAgICAgfSwKLSAgICAg
ICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJhbnNpLXN0eWxlcyI6IHsKLSAgICAgICAgICAi
dmVyc2lvbiI6ICIzLjIuMCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0
cnkubnBtanMub3JnL2Fuc2ktc3R5bGVzLy0vYW5zaS1zdHlsZXMtMy4yLjAudGd6IiwKLSAgICAg
ICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1OblNPbU1FWXRWUjJKVk1JR1R6eW5Sa2theHRpcTF4
bkZCY2RRRC9Ebk5DWVBvRVBzVkpoTTk4QkR5YW9OT1FJaTdwNG9rZGkzRTI3ZU43R1Fic1V1Zz09
IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAg
ICAgICAgICAiY29sb3ItY29udmVydCI6ICIxLjkuMCIKLSAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICAgIH0KLSAgICB9LAotICAgICJtYXRjaGVyLWNvbGxlY3Rpb24iOiB7Ci0gICAgICAidmVy
c2lvbiI6ICIxLjAuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1q
cy5vcmcvbWF0Y2hlci1jb2xsZWN0aW9uLy0vbWF0Y2hlci1jb2xsZWN0aW9uLTEuMC40LnRneiIs
Ci0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtTDJhdUNHbVpieW5rUFF0aXlEM1IxRDVZRjFVPSIs
Ci0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIm1pbmlt
YXRjaCI6ICIzLjAuNCIKLSAgICAgIH0KLSAgICB9LAotICAgICJtZHVybCI6IHsKLSAgICAgICJ2
ZXJzaW9uIjogIjEuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5w
bWpzLm9yZy9tZHVybC8tL21kdXJsLTEuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNo
YTEtL29XeTdIV2xrRGZ5cmY3QkFQMXNZQmRoRlM0PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAg
IH0sCi0gICAgIm1lZGlhLXR5cGVyIjogewotICAgICAgInZlcnNpb24iOiAiMC4zLjAiLAotICAg
ICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21lZGlhLXR5cGVyLy0v
bWVkaWEtdHlwZXItMC4zLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1oeERYcndx
bUp2ai8raHpnQVdoVVVtTWxWMGc9IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAi
bWVtb3J5LXN0cmVhbXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjEuMiIsCi0gICAgICAicmVz
b2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWVtb3J5LXN0cmVhbXMvLS9tZW1v
cnktc3RyZWFtcy0wLjEuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLUp6LzNkNnRn
L3NXWnNSWTFVbFVvTE1vc1VNST0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWly
ZXMiOiB7Ci0gICAgICAgICJyZWFkYWJsZS1zdHJlYW0iOiAiMS4wLjM0IgotICAgICAgfQotICAg
IH0sCi0gICAgIm1lcmdlIjogewotICAgICAgInZlcnNpb24iOiAiMS4yLjAiLAotICAgICAgInJl
c29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21lcmdlLy0vbWVyZ2UtMS4yLjAu
dGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1kVEhqblVsSndvR21hNHhhYmdKbDZMQlls
Tm89IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAibWVyZ2UtZGVzY3JpcHRvcnMi
OiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6
Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWVyZ2UtZGVzY3JpcHRvcnMvLS9tZXJnZS1kZXNjcmlwdG9y
cy0xLjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLXNBcXFWVzNZdEVWb0ZRN0ow
YmxUOC9rTXUyRT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJtZXJnZS10cmVl
cyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRw
czovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9tZXJnZS10cmVlcy8tL21lcmdlLXRyZWVzLTEuMC4xLnRn
eiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtekw1blJXbDRmNTN2Ri8xRzVsSmZWd0M3MGo0
PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImNh
bi1zeW1saW5rIjogIjEuMC4wIiwKLSAgICAgICAgImZzLXRyZWUtZGlmZiI6ICIwLjUuNiIsCi0g
ICAgICAgICJoZWltZGFsbGpzIjogIjAuMi41IiwKLSAgICAgICAgImhlaW1kYWxsanMtbG9nZ2Vy
IjogIjAuMS45IiwKLSAgICAgICAgInJpbXJhZiI6ICIyLjYuMSIsCi0gICAgICAgICJzeW1saW5r
LW9yLWNvcHkiOiAiMS4xLjgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibWV0aG9kcyI6IHsKLSAg
ICAgICJ2ZXJzaW9uIjogIjEuMS4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lz
dHJ5Lm5wbWpzLm9yZy9tZXRob2RzLy0vbWV0aG9kcy0xLjEuMi50Z3oiLAotICAgICAgImludGVn
cml0eSI6ICJzaGExLVZTbWsxblpVRTA3Y3hTWm1Wb05iRDRVYS9PND0iLAotICAgICAgImRldiI6
IHRydWUKLSAgICB9LAotICAgICJtaWNyb21hdGNoIjogewotICAgICAgInZlcnNpb24iOiAiMi4z
LjExIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9taWNy
b21hdGNoLy0vbWljcm9tYXRjaC0yLjMuMTEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hh
MS1obWQ4bDlGeUN6WTBNZEJORFJVcE85T01GV1U9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAg
ICAgInJlcXVpcmVzIjogewotICAgICAgICAiYXJyLWRpZmYiOiAiMi4wLjAiLAotICAgICAgICAi
YXJyYXktdW5pcXVlIjogIjAuMi4xIiwKLSAgICAgICAgImJyYWNlcyI6ICIxLjguNSIsCi0gICAg
ICAgICJleHBhbmQtYnJhY2tldHMiOiAiMC4xLjUiLAotICAgICAgICAiZXh0Z2xvYiI6ICIwLjMu
MiIsCi0gICAgICAgICJmaWxlbmFtZS1yZWdleCI6ICIyLjAuMSIsCi0gICAgICAgICJpcy1leHRn
bG9iIjogIjEuMC4wIiwKLSAgICAgICAgImlzLWdsb2IiOiAiMi4wLjEiLAotICAgICAgICAia2lu
ZC1vZiI6ICIzLjIuMiIsCi0gICAgICAgICJub3JtYWxpemUtcGF0aCI6ICIyLjEuMSIsCi0gICAg
ICAgICJvYmplY3Qub21pdCI6ICIyLjAuMSIsCi0gICAgICAgICJwYXJzZS1nbG9iIjogIjMuMC40
IiwKLSAgICAgICAgInJlZ2V4LWNhY2hlIjogIjAuNC4zIgotICAgICAgfQotICAgIH0sCi0gICAg
Im1pbWUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjMuNiIsCi0gICAgICAicmVzb2x2ZWQiOiAi
aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWltZS8tL21pbWUtMS4zLjYudGd6IiwKLSAgICAg
ICJpbnRlZ3JpdHkiOiAic2hhMS1XUjJFMDJVNmF3dEtPNTM0M2xxb0VJNXk1ZUE9IiwKLSAgICAg
ICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAibWltZS1kYiI6IHsKLSAgICAgICJ2ZXJzaW9uIjog
IjEuMjkuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcv
bWltZS1kYi8tL21pbWUtZGItMS4yOS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEt
U05KdEkxV0paUmNFckZrV3lnWUFHUlFtYUhnPSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0s
Ci0gICAgIm1pbWUtdHlwZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjEuMTYiLAotICAgICAg
InJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21pbWUtdHlwZXMvLS9taW1l
LXR5cGVzLTIuMS4xNi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLUs0V0tVdVhzMVJi
YmlYckN2b2RJZURCcGppTT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMi
OiB7Ci0gICAgICAgICJtaW1lLWRiIjogIjEuMjkuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJt
aW5pbWF0Y2giOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjAuNCIsCi0gICAgICAicmVzb2x2ZWQi
OiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWluaW1hdGNoLy0vbWluaW1hdGNoLTMuMC40
LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi15SkhWUUVoeXFQTFVUZ3Q5QjgzUFh1
Nlczcng0TXZ2SHZTVXZUb29ncHdvR0RPVVEreURyUjBIUm90K3lPQ2RDTzd1NGhYM3BXZnQ2a1dC
QmNxaDBVQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAg
ICAgICAiYnJhY2UtZXhwYW5zaW9uIjogIjEuMS44IgotICAgICAgfQotICAgIH0sCi0gICAgIm1p
bmltaXN0IjogewotICAgICAgInZlcnNpb24iOiAiMC4wLjgiLAotICAgICAgInJlc29sdmVkIjog
Imh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21pbmltaXN0Ly0vbWluaW1pc3QtMC4wLjgudGd6
IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1oWC9LdjhNNWZTWWx1Q0tDWXVocXA2QVJzRjA9
IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAibWtkaXJwIjogewotICAgICAgInZl
cnNpb24iOiAiMC41LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBt
anMub3JnL21rZGlycC8tL21rZGlycC0wLjUuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJz
aGExLU1BVjBPT3JHejMrTVIyZnpoa2pXYVgxMXlRTT0iLAotICAgICAgImRldiI6IHRydWUsCi0g
ICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJtaW5pbWlzdCI6ICIwLjAuOCIKLSAgICAgIH0K
LSAgICB9LAotICAgICJta3RlbXAiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjQuMCIsCi0gICAg
ICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWt0ZW1wLy0vbWt0ZW1w
LTAuNC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtYlFVVllSeUtqSVRraEtvZ0FC
S2JtT21CL3dzPSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgIm1vbWVudCI6IHsK
LSAgICAgICJ2ZXJzaW9uIjogIjIuMTguMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9y
ZWdpc3RyeS5ucG1qcy5vcmcvbW9tZW50Ly0vbW9tZW50LTIuMTguMS50Z3oiLAotICAgICAgImlu
dGVncml0eSI6ICJzaGExLXcyR1QzVHpod3U3U3JiZklBdHU4ZDZnYkhBOD0iLAotICAgICAgImRl
diI6IHRydWUKLSAgICB9LAotICAgICJtb21lbnQtdGltZXpvbmUiOiB7Ci0gICAgICAidmVyc2lv
biI6ICIwLjMuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5v
cmcvbW9tZW50LXRpbWV6b25lLy0vbW9tZW50LXRpbWV6b25lLTAuMy4xLnRneiIsCi0gICAgICAi
aW50ZWdyaXR5IjogInNoYTEtUHZSNFZyQXRVN2NZb1FwZXdnSTZvcG5nZS9VPSIsCi0gICAgICAi
ZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIm1vbWVudCI6ICIyLjE4
LjEiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibW9yZ2FuIjogewotICAgICAgInZlcnNpb24iOiAi
MS44LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21v
cmdhbi8tL21vcmdhbi0xLjguMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLWVFckhj
MDVLUlRxY2JtNkdnS2t5a25YSXRvYz0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVx
dWlyZXMiOiB7Ci0gICAgICAgICJiYXNpYy1hdXRoIjogIjEuMS4wIiwKLSAgICAgICAgImRlYnVn
IjogIjIuNi44IiwKLSAgICAgICAgImRlcGQiOiAiMS4xLjEiLAotICAgICAgICAib24tZmluaXNo
ZWQiOiAiMi4zLjAiLAotICAgICAgICAib24taGVhZGVycyI6ICIxLjAuMSIKLSAgICAgIH0KLSAg
ICB9LAotICAgICJtb3V0IjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjAiLAotICAgICAgInJl
c29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21vdXQvLS9tb3V0LTEuMC4wLnRn
eiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtbTk4ZFN2VjladFI4czFPbU0xb3lnUW1PRlFF
PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgIm1zIjogewotICAgICAgInZlcnNp
b24iOiAiMi4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMu
b3JnL21zLy0vbXMtMi4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1WZ2l1cmZ3
QXZtd3BBZDlmbUdGNGplRFZsOGc9IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAi
bXVzdGFjaGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjMuMCIsCi0gICAgICAicmVzb2x2ZWQi
OiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbXVzdGFjaGUvLS9tdXN0YWNoZS0yLjMuMC50
Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLVFDajNkNHNYY0lwSW1UQ201U3JEdktEYVFk
QT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJtdXRlLXN0cmVhbSI6IHsKLSAg
ICAgICJ2ZXJzaW9uIjogIjAuMC42IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lz
dHJ5Lm5wbWpzLm9yZy9tdXRlLXN0cmVhbS8tL211dGUtc3RyZWFtLTAuMC42LnRneiIsCi0gICAg
ICAiaW50ZWdyaXR5IjogInNoYTEtU0pZckdlRnAvUjM4SkFzL0huTVhZbnU4UjlzPSIsCi0gICAg
ICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgIm5hbiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIu
Ni4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9uYW4v
LS9uYW4tMi42LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS01UDgwNXNsZjM3V3V6
QWplWlpiME5nV24yMFU9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgIm9wdGlvbmFsIjog
dHJ1ZQotICAgIH0sCi0gICAgIm5lZ290aWF0b3IiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjYu
MSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbmVnb3Rp
YXRvci8tL25lZ290aWF0b3ItMC42LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1L
ekp4aE9pWklRRVhleWhXUDdYbkVDck5ES2s9IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwK
LSAgICAibm9kZS1mZXRjaCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuNy4xIiwKLSAgICAgICJy
ZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9ub2RlLWZldGNoLy0vbm9kZS1m
ZXRjaC0xLjcuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItajhYc0ZHQ0x3Nzl2
V1hrWnRNU21tTGFPazl6NVNROWJWL3RrYlpWQ3F2Z3d6cmpBR3E2Nmlnb2JMb2ZIdEY2M052TVRw
MldqeXRwc05UR0thK1hSSVE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJl
cyI6IHsKLSAgICAgICAgImVuY29kaW5nIjogIjAuMS4xMiIsCi0gICAgICAgICJpcy1zdHJlYW0i
OiAiMS4xLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZS1pbnQ2NCI6IHsKLSAgICAgICJ2
ZXJzaW9uIjogIjAuNC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5w
bWpzLm9yZy9ub2RlLWludDY0Ly0vbm9kZS1pbnQ2NC0wLjQuMC50Z3oiLAotICAgICAgImludGVn
cml0eSI6ICJzaGExLWg2a0dYTnMxWFRHQzJQbE00UkdJdUNYR2lqcz0iLAotICAgICAgImRldiI6
IHRydWUKLSAgICB9LAotICAgICJub2RlLW1vZHVsZXMtcGF0aCI6IHsKLSAgICAgICJ2ZXJzaW9u
IjogIjEuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9y
Zy9ub2RlLW1vZHVsZXMtcGF0aC8tL25vZGUtbW9kdWxlcy1wYXRoLTEuMC4xLnRneiIsCi0gICAg
ICAiaW50ZWdyaXR5IjogInNoYTEtUUFsckNNNTYwT29VYUFoanIwU2NmSFdsMGNnPSIsCi0gICAg
ICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgIm5vZGUtbm90aWZpZXIiOiB7Ci0gICAgICAidmVy
c2lvbiI6ICI1LjEuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1q
cy5vcmcvbm9kZS1ub3RpZmllci8tL25vZGUtbm90aWZpZXItNS4xLjIudGd6IiwKLSAgICAgICJp
bnRlZ3JpdHkiOiAic2hhMS1MNm5oSmdYNkVBQ2RSRlNkYjgyS1k5M2c1UDg9IiwKLSAgICAgICJk
ZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiZ3Jvd2x5IjogIjEuMy4w
IiwKLSAgICAgICAgInNlbXZlciI6ICI1LjQuMSIsCi0gICAgICAgICJzaGVsbHdvcmRzIjogIjAu
MS4wIiwKLSAgICAgICAgIndoaWNoIjogIjEuMy4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5v
cHQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjAuNiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0
cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbm9wdC8tL25vcHQtMy4wLjYudGd6IiwKLSAgICAgICJp
bnRlZ3JpdHkiOiAic2hhMS14a1pkdndpcnpVMnpXVEYvZWF4b3BrYXlqL2s9IiwKLSAgICAgICJk
ZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiYWJicmV2IjogIjEuMS4w
IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vcm1hbGl6ZS1wYXRoIjogewotICAgICAgInZlcnNp
b24iOiAiMi4xLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMu
b3JnL25vcm1hbGl6ZS1wYXRoLy0vbm9ybWFsaXplLXBhdGgtMi4xLjEudGd6IiwKLSAgICAgICJp
bnRlZ3JpdHkiOiAic2hhMS1HcktMVlc0WmcyT293YWIzNXZvZ0UzL21ydGs9IiwKLSAgICAgICJk
ZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAicmVtb3ZlLXRyYWlsaW5n
LXNlcGFyYXRvciI6ICIxLjAuMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJucG0tcGFja2FnZS1h
cmciOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjIuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0
cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbnBtLXBhY2thZ2UtYXJnLy0vbnBtLXBhY2thZ2UtYXJn
LTQuMi4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtV1RNRC9lcUY5OFFpZDE4WCtl
dDJjUGFBNCt3PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAg
ICAgICAgImhvc3RlZC1naXQtaW5mbyI6ICIyLjUuMCIsCi0gICAgICAgICJzZW12ZXIiOiAiNS40
LjEiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibnBtLXJ1bi1wYXRoIjogewotICAgICAgInZlcnNp
b24iOiAiMi4wLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMu
b3JnL25wbS1ydW4tcGF0aC8tL25wbS1ydW4tcGF0aC0yLjAuMi50Z3oiLAotICAgICAgImludGVn
cml0eSI6ICJzaGExLU5ha2pMZm8xMXdaN1RMTGQ4alY3R0hGVGJGOD0iLAotICAgICAgImRldiI6
IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJwYXRoLWtleSI6ICIyLjAuMSIK
LSAgICAgIH0KLSAgICB9LAotICAgICJucG1sb2ciOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjEu
MiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbnBtbG9n
Ly0vbnBtbG9nLTQuMS4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0ydVVxYXp1
S2xUYVNJL2RDOEF6aWNVY2s3K0lyRWFPbk4vZTBqZDNYdHQxS2NHcHd4MzB2NTBtTDdvUHlyL2g5
YkwzRTRhWmNjVndwd1ArNVc5VmprZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJl
cXVpcmVzIjogewotICAgICAgICAiYXJlLXdlLXRoZXJlLXlldCI6ICIxLjEuNCIsCi0gICAgICAg
ICJjb25zb2xlLWNvbnRyb2wtc3RyaW5ncyI6ICIxLjEuMCIsCi0gICAgICAgICJnYXVnZSI6ICIy
LjcuNCIsCi0gICAgICAgICJzZXQtYmxvY2tpbmciOiAiMi4wLjAiCi0gICAgICB9Ci0gICAgfSwK
LSAgICAibnVtYmVyLWlzLW5hbiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4xIiwKLSAgICAg
ICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9udW1iZXItaXMtbmFuLy0v
bnVtYmVyLWlzLW5hbi0xLjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLUNYdGdL
MU5DS2xJc0d2dUhrREdETnBRYUFSMD0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAg
ICJvYmplY3QtYXNzaWduIjogewotICAgICAgInZlcnNpb24iOiAiNC4xLjEiLAotICAgICAgInJl
c29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL29iamVjdC1hc3NpZ24vLS9vYmpl
Y3QtYXNzaWduLTQuMS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtSVFtdHg1Wllo
OC9BWEx2VVFzckl2N3MyQ0dNPSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgIm9i
amVjdC1jb21wb25lbnQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjAuMyIsCi0gICAgICAicmVz
b2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvb2JqZWN0LWNvbXBvbmVudC8tL29i
amVjdC1jb21wb25lbnQtMC4wLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS04TWFh
cFE3OGxiaG13WWIwQUtNM2Fjc3ZFcEU9IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAg
ICAib2JqZWN0Lm9taXQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMSIsCi0gICAgICAicmVz
b2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvb2JqZWN0Lm9taXQvLS9vYmplY3Qu
b21pdC0yLjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLUdweDBTQ256bmJ1RmpI
YktOWG11S2xUcjBmbz0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7
Ci0gICAgICAgICJmb3Itb3duIjogIjAuMS41IiwKLSAgICAgICAgImlzLWV4dGVuZGFibGUiOiAi
MC4xLjEiCi0gICAgICB9Ci0gICAgfSwKLSAgICAib24tZmluaXNoZWQiOiB7Ci0gICAgICAidmVy
c2lvbiI6ICIyLjMuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1q
cy5vcmcvb24tZmluaXNoZWQvLS9vbi1maW5pc2hlZC0yLjMuMC50Z3oiLAotICAgICAgImludGVn
cml0eSI6ICJzaGExLUlQRXpaSUd3ZzgxMU0zbVNvV2x4cWkyUWFVYz0iLAotICAgICAgImRldiI6
IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJlZS1maXJzdCI6ICIxLjEuMSIK
LSAgICAgIH0KLSAgICB9LAotICAgICJvbi1oZWFkZXJzIjogewotICAgICAgInZlcnNpb24iOiAi
MS4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL29u
LWhlYWRlcnMvLS9vbi1oZWFkZXJzLTEuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNo
YTEta285ZEQwY05TVFFtVWVwbmxMQ0ZmQkFHay9jPSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAg
IH0sCi0gICAgIm9uY2UiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjQuMCIsCi0gICAgICAicmVz
b2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvb25jZS8tL29uY2UtMS40LjAudGd6
IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1XRHNhcDNXV0hVc1JPc0Y5bkZDNjc1M1hhOUU9
IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAid3Jh
cHB5IjogIjEuMC4yIgotICAgICAgfQotICAgIH0sCi0gICAgIm9uZXRpbWUiOiB7Ci0gICAgICAi
dmVyc2lvbiI6ICIxLjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5u
cG1qcy5vcmcvb25ldGltZS8tL29uZXRpbWUtMS4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHki
OiAic2hhMS1vZmVEajRNVXhSYndYczc4dkV6UDRFdE8xNGs9IiwKLSAgICAgICJkZXYiOiB0cnVl
Ci0gICAgfSwKLSAgICAib3B0aW1pc3QiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjYuMSIsCi0g
ICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvb3B0aW1pc3QvLS9v
cHRpbWlzdC0wLjYuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLTJqNm5Sb2I2SWFH
YUVSd3licERyRmFBWlpvWT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMi
OiB7Ci0gICAgICAgICJtaW5pbWlzdCI6ICIwLjAuOCIsCi0gICAgICAgICJ3b3Jkd3JhcCI6ICIw
LjAuMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJvcHRpb25zIjogewotICAgICAgInZlcnNpb24i
OiAiMC4wLjYiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3Jn
L29wdGlvbnMvLS9vcHRpb25zLTAuMC42LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEt
N0NMVEVvQnJ0VDV6RjNQbnphNzg4Y1pERW84PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0s
Ci0gICAgIm9yYSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMi4zIiwKLSAgICAgICJyZXNvbHZl
ZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9vcmEvLS9vcmEtMC4yLjMudGd6IiwKLSAg
ICAgICJpbnRlZ3JpdHkiOiAic2hhMS1OMUo5SWdyYzFUdzV0elZ4MTFRVmJWMjJWNlE9IiwKLSAg
ICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiY2hhbGsiOiAi
MS4xLjMiLAotICAgICAgICAiY2xpLWN1cnNvciI6ICIxLjAuMiIsCi0gICAgICAgICJjbGktc3Bp
bm5lcnMiOiAiMC4xLjIiLAotICAgICAgICAib2JqZWN0LWFzc2lnbiI6ICI0LjEuMSIKLSAgICAg
IH0KLSAgICB9LAotICAgICJvcy1ob21lZGlyIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjIi
LAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL29zLWhvbWVk
aXIvLS9vcy1ob21lZGlyLTEuMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtLzd4
SmlETnVEb005NE1Gb3grOFZJU0dxZjdNPSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0g
ICAgIm9zLWxvY2FsZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuNC4wIiwKLSAgICAgICJyZXNv
bHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9vcy1sb2NhbGUvLS9vcy1sb2NhbGUt
MS40LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1JUG54ZXVLZTAwWG92ZVdEc1Qw
Z0NZQThGTms9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAg
ICAgICAibGNpZCI6ICIxLjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJvcy1zaGltIjogewot
ICAgICAgInZlcnNpb24iOiAiMC4xLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVn
aXN0cnkubnBtanMub3JnL29zLXNoaW0vLS9vcy1zaGltLTAuMS4zLnRneiIsCi0gICAgICAiaW50
ZWdyaXR5IjogInNoYTEtYTJMRGVSejNrSjZqWHRSdUYyV0x0QmZMT1JjPSIsCi0gICAgICAiZGV2
IjogdHJ1ZQotICAgIH0sCi0gICAgIm9zLXRtcGRpciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEu
MC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9vcy10
bXBkaXIvLS9vcy10bXBkaXItMS4wLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS11
K1owQnNlYXFGeGMvc2RtL2xjMFZWMzZFblE9IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwK
LSAgICAib3NlbnYiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjEuNCIsCi0gICAgICAicmVzb2x2
ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvb3NlbnYvLS9vc2Vudi0wLjEuNC50Z3oi
LAotICAgICAgImludGVncml0eSI6ICJzaGExLVF2NXRXVlBmQnNnR1MrYnhkc1BRV3FxalJrUT0i
LAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJvcy1o
b21lZGlyIjogIjEuMC4yIiwKLSAgICAgICAgIm9zLXRtcGRpciI6ICIxLjAuMiIKLSAgICAgIH0K
LSAgICB9LAotICAgICJvdXRwdXQtZmlsZS1zeW5jIjogewotICAgICAgInZlcnNpb24iOiAiMS4x
LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL291dHB1
dC1maWxlLXN5bmMvLS9vdXRwdXQtZmlsZS1zeW5jLTEuMS4yLnRneiIsCi0gICAgICAiaW50ZWdy
aXR5IjogInNoYTEtMEtNKzcrWWFJRitzdVFDUzZDWlpqVkpGem5ZPSIsCi0gICAgICAiZGV2Ijog
dHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImdyYWNlZnVsLWZzIjogIjQuMS4x
MSIsCi0gICAgICAgICJta2RpcnAiOiAiMC41LjEiLAotICAgICAgICAib2JqZWN0LWFzc2lnbiI6
ICI0LjEuMSIKLSAgICAgIH0KLSAgICB9LAotICAgICJwLWZpbmFsbHkiOiB7Ci0gICAgICAidmVy
c2lvbiI6ICIxLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1q
cy5vcmcvcC1maW5hbGx5Ly0vcC1maW5hbGx5LTEuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5
IjogInNoYTEtUDd6N0ZiaVpwRUVqczB0dHpCaTNKRE5xTEs0PSIsCi0gICAgICAiZGV2IjogdHJ1
ZQotICAgIH0sCi0gICAgInAtbGltaXQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjEuMCIsCi0g
ICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcC1saW1pdC8tL3At
bGltaXQtMS4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1zSC95MmFYWWkreUFZ
RFdKV2l1clpxSjVpTHc9IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAicC1sb2Nh
dGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0
cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcC1sb2NhdGUvLS9wLWxvY2F0ZS0yLjAuMC50Z3oiLAot
ICAgICAgImludGVncml0eSI6ICJzaGExLUlLQVFPeUlxY01qOU9jd3VXQWFBODkzbDdFTT0iLAot
ICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJwLWxpbWl0
IjogIjEuMS4wIgotICAgICAgfQotICAgIH0sCi0gICAgInBhcnNlLWdsb2IiOiB7Ci0gICAgICAi
dmVyc2lvbiI6ICIzLjAuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5u
cG1qcy5vcmcvcGFyc2UtZ2xvYi8tL3BhcnNlLWdsb2ItMy4wLjQudGd6IiwKLSAgICAgICJpbnRl
Z3JpdHkiOiAic2hhMS1zc04yejdFZk5WRTdyZEZ6N3d1MjQ2T0lPUnc9IiwKLSAgICAgICJkZXYi
OiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiZ2xvYi1iYXNlIjogIjAuMy4w
IiwKLSAgICAgICAgImlzLWRvdGZpbGUiOiAiMS4wLjMiLAotICAgICAgICAiaXMtZXh0Z2xvYiI6
ICIxLjAuMCIsCi0gICAgICAgICJpcy1nbG9iIjogIjIuMC4xIgotICAgICAgfQotICAgIH0sCi0g
ICAgInBhcnNlLXBhc3N3ZCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4wIiwKLSAgICAgICJy
ZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wYXJzZS1wYXNzd2QvLS9wYXJz
ZS1wYXNzd2QtMS4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1iVnVUU2tWcGs3
STlOL1FLT0MxdkZtYW81Y1k9IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAicGFy
c2Vqc29uIjogewotICAgICAgInZlcnNpb24iOiAiMC4wLjMiLAotICAgICAgInJlc29sdmVkIjog
Imh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3BhcnNlanNvbi8tL3BhcnNlanNvbi0wLjAuMy50
Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLXEzNDNXZklKN09tVU41Yy9mUThmWks0T1pL
cz0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJi
ZXR0ZXItYXNzZXJ0IjogIjEuMC4yIgotICAgICAgfQotICAgIH0sCi0gICAgInBhcnNlcXMiOiB7
Ci0gICAgICAidmVyc2lvbiI6ICIwLjAuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9y
ZWdpc3RyeS5ucG1qcy5vcmcvcGFyc2Vxcy8tL3BhcnNlcXMtMC4wLjUudGd6IiwKLSAgICAgICJp
bnRlZ3JpdHkiOiAic2hhMS0xU0NLTnpqa1oyYmlrYm91b1hOb1NTR291SjA9IiwKLSAgICAgICJk
ZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiYmV0dGVyLWFzc2VydCI6
ICIxLjAuMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJwYXJzZXVyaSI6IHsKLSAgICAgICJ2ZXJz
aW9uIjogIjAuMC41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpz
Lm9yZy9wYXJzZXVyaS8tL3BhcnNldXJpLTAuMC41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5Ijog
InNoYTEtZ0NCS1VOVGJ0M20vM0c2K0ozalpEa3ZPTWdvPSIsCi0gICAgICAiZGV2IjogdHJ1ZSwK
LSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImJldHRlci1hc3NlcnQiOiAiMS4wLjIiCi0g
ICAgICB9Ci0gICAgfSwKLSAgICAicGFyc2V1cmwiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjMu
MSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcGFyc2V1
cmwvLS9wYXJzZXVybC0xLjMuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLXlLdU1r
aU82TklpS3Brb3BleWlGTyt3WTJsWT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAg
ICJwYXRoLWV4aXN0cyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4wIiwKLSAgICAgICJyZXNv
bHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wYXRoLWV4aXN0cy8tL3BhdGgtZXhp
c3RzLTEuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtMWFpWmpyY2U4M3AwdzA2
dzJldW02SGp1b0lFPSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgInBhdGgtaXMt
YWJzb2x1dGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMSIsCi0gICAgICAicmVzb2x2ZWQi
OiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcGF0aC1pcy1hYnNvbHV0ZS8tL3BhdGgtaXMt
YWJzb2x1dGUtMS4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1GMHVTYUhOVk5Q
KzhlczVyOVRwYW5odGNYMTg9IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAicGF0
aC1rZXkiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAi
aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcGF0aC1rZXkvLS9wYXRoLWtleS0yLjAuMS50Z3oi
LAotICAgICAgImludGVncml0eSI6ICJzaGExLVFSeXR0WFRGb1VEVHBMR1JEVURZRE1uMEMwQT0i
LAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJwYXRoLXBhcnNlIjogewotICAgICAg
InZlcnNpb24iOiAiMS4wLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnku
bnBtanMub3JnL3BhdGgtcGFyc2UvLS9wYXRoLXBhcnNlLTEuMC41LnRneiIsCi0gICAgICAiaW50
ZWdyaXR5IjogInNoYTEtUEJyZmh4NnB6V3lVTWJicUs5ZEtEL0JWeE1FPSIsCi0gICAgICAiZGV2
IjogdHJ1ZQotICAgIH0sCi0gICAgInBhdGgtcG9zaXgiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIx
LjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcGF0
aC1wb3NpeC8tL3BhdGgtcG9zaXgtMS4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hh
MS1CckpoRS9WcjZyQkNWRm9qdjZpQUE4eXNKZzg9IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAg
fSwKLSAgICAicGF0aC10by1yZWdleHAiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjEuNyIsCi0g
ICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcGF0aC10by1yZWdl
eHAvLS9wYXRoLXRvLXJlZ2V4cC0wLjEuNy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGEx
LTMyQkJlQUJmVWk4VjYwU1E1eVI2Ry9xbWY0dz0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9
LAotICAgICJwaWZ5IjogewotICAgICAgInZlcnNpb24iOiAiMi4zLjAiLAotICAgICAgInJlc29s
dmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3BpZnkvLS9waWZ5LTIuMy4wLnRneiIs
Ci0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtN1JRYWFzQkRxRW5xV0lTWTU5eW9zVk13NlF3PSIs
Ci0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgInBpbmtpZSI6IHsKLSAgICAgICJ2ZXJz
aW9uIjogIjIuMC40IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpz
Lm9yZy9waW5raWUvLS9waW5raWUtMi4wLjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hh
MS1jbFZyZ00rZzFJcVhUb0RuY2tqb0R0VDMrSEE9IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAg
fSwKLSAgICAicGlua2llLXByb21pc2UiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMSIsCi0g
ICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcGlua2llLXByb21p
c2UvLS9waW5raWUtcHJvbWlzZS0yLjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGEx
LUlUWFczNmVqV01CcHJKc1hoM1lvZ2loRkQvbz0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAg
ICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJwaW5raWUiOiAiMi4wLjQiCi0gICAgICB9Ci0gICAg
fSwKLSAgICAicG9ydGZpbmRlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4xMyIsCi0gICAg
ICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcG9ydGZpbmRlci8tL3Bv
cnRmaW5kZXItMS4wLjEzLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtdXpMczJId25F
RXJtN2tTMW84eS9EcnNhN2VrPSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJl
cyI6IHsKLSAgICAgICAgImFzeW5jIjogIjEuNS4yIiwKLSAgICAgICAgImRlYnVnIjogIjIuNi44
IiwKLSAgICAgICAgIm1rZGlycCI6ICIwLjUuMSIKLSAgICAgIH0sCi0gICAgICAiZGVwZW5kZW5j
aWVzIjogewotICAgICAgICAiYXN5bmMiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMS41LjIi
LAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hc3lu
Yy8tL2FzeW5jLTEuNS4yLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGExLTdHcGhy
bFpJREF3OHNrSEpWaGppQ0pMNVp5bz0iLAotICAgICAgICAgICJkZXYiOiB0cnVlCi0gICAgICAg
IH0KLSAgICAgIH0KLSAgICB9LAotICAgICJwcmVzZXJ2ZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjog
IjAuMi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9w
cmVzZXJ2ZS8tL3ByZXNlcnZlLTAuMi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEt
Z1Y3Ujl1dkdXU2I0WmJNUXdIRTd5ek1WemtzPSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0s
Ci0gICAgInByaW50ZiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMi41IiwKLSAgICAgICJyZXNv
bHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wcmludGYvLS9wcmludGYtMC4yLjUu
dGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS14RGpLTEtNK09TZG5IYlNyYWNEbEw1TnFU
dzg9IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAicHJpdmF0ZSI6IHsKLSAgICAg
ICJ2ZXJzaW9uIjogIjAuMS43IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5
Lm5wbWpzLm9yZy9wcml2YXRlLy0vcHJpdmF0ZS0wLjEuNy50Z3oiLAotICAgICAgImludGVncml0
eSI6ICJzaGExLWFNNWVpaDd3b2p1MWNNd29VM3RUTXF1bVB2RT0iLAotICAgICAgImRldiI6IHRy
dWUKLSAgICB9LAotICAgICJwcm9jZXNzLW5leHRpY2stYXJncyI6IHsKLSAgICAgICJ2ZXJzaW9u
IjogIjEuMC43IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9y
Zy9wcm9jZXNzLW5leHRpY2stYXJncy8tL3Byb2Nlc3MtbmV4dGljay1hcmdzLTEuMC43LnRneiIs
Ci0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtRlE0Z3QxWlpDdFA1RUpQeVdrOHEyTC96QzZNPSIs
Ci0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgInByb2Nlc3MtcmVsYXRpdmUtcmVxdWly
ZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRw
czovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wcm9jZXNzLXJlbGF0aXZlLXJlcXVpcmUvLS9wcm9jZXNz
LXJlbGF0aXZlLXJlcXVpcmUtMS4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1G
WkRmejF1UEtZTzZVK09ZUkd0b0pBdE14b289IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAg
InJlcXVpcmVzIjogewotICAgICAgICAibm9kZS1tb2R1bGVzLXBhdGgiOiAiMS4wLjEiCi0gICAg
ICB9Ci0gICAgfSwKLSAgICAicHJvbWlzZS1tYXAtc2VyaWVzIjogewotICAgICAgInZlcnNpb24i
OiAiMC4yLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3Jn
L3Byb21pc2UtbWFwLXNlcmllcy8tL3Byb21pc2UtbWFwLXNlcmllcy0wLjIuMy50Z3oiLAotICAg
ICAgImludGVncml0eSI6ICJzaGExLXd0TjNyOGt5VS9hOUE5dTNkMVhyaUtzZ3FFYz0iLAotICAg
ICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJyc3ZwIjogIjMu
Ni4yIgotICAgICAgfQotICAgIH0sCi0gICAgInByb3h5LWFkZHIiOiB7Ci0gICAgICAidmVyc2lv
biI6ICIxLjEuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5v
cmcvcHJveHktYWRkci8tL3Byb3h5LWFkZHItMS4xLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHki
OiAic2hhMS1jY0R1T3hBdDQvSUM4N1pQWUkwWFA4dWhxUmc9IiwKLSAgICAgICJkZXYiOiB0cnVl
LAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiZm9yd2FyZGVkIjogIjAuMS4wIiwKLSAg
ICAgICAgImlwYWRkci5qcyI6ICIxLjQuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJwc2V1ZG9t
YXAiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0
cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcHNldWRvbWFwLy0vcHNldWRvbWFwLTEuMC4yLnRneiIs
Ci0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtOEZLaWphY09ZWWtYN3dxS3cwd2E1YWFDaHJNPSIs
Ci0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgInEiOiB7Ci0gICAgICAidmVyc2lvbiI6
ICIxLjUuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcv
cS8tL3EtMS41LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS0zUUc2eWRCdE1PYnlH
YTdMZ2xQdW5yM0RDUEU9IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAicXMiOiB7
Ci0gICAgICAidmVyc2lvbiI6ICI2LjUuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9y
ZWdpc3RyeS5ucG1qcy5vcmcvcXMvLS9xcy02LjUuMC50Z3oiLAotICAgICAgImludGVncml0eSI6
ICJzaGE1MTItZmpWRmpXOXlocU1oVkd3UkV4Q1hMaEpLckxsa1lTYXhOV2R5YzlybUhsclZaYmsz
NVlISDMxMmRGZDcxOTF1UWVYa0kzbUtMWlRJYlN2SWVGd0ZlbWc9PSIsCi0gICAgICAiZGV2Ijog
dHJ1ZQotICAgIH0sCi0gICAgInF1aWNrLXRlbXAiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjEu
OCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcXVpY2st
dGVtcC8tL3F1aWNrLXRlbXAtMC4xLjgudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS11
ckFxSkNxNCt3M1hXS1BKZDJzeSthWFpSQWc9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAg
InJlcXVpcmVzIjogewotICAgICAgICAibWt0ZW1wIjogIjAuNC4wIiwKLSAgICAgICAgInJpbXJh
ZiI6ICIyLjYuMSIsCi0gICAgICAgICJ1bmRlcnNjb3JlLnN0cmluZyI6ICIzLjMuNCIKLSAgICAg
IH0KLSAgICB9LAotICAgICJxdW5pdC1ub3RpZmljYXRpb25zIjogewotICAgICAgInZlcnNpb24i
OiAiMC4xLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3Jn
L3F1bml0LW5vdGlmaWNhdGlvbnMvLS9xdW5pdC1ub3RpZmljYXRpb25zLTAuMS4xLnRneiIsCi0g
ICAgICAiaW50ZWdyaXR5IjogInNoYTEtTUFHdnhxYW5mZnZaWXN5ODNkNFMzc1VvYkFrPSIsCi0g
ICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgInF1bml0anMiOiB7Ci0gICAgICAidmVyc2lv
biI6ICIyLjQuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5v
cmcvcXVuaXRqcy8tL3F1bml0anMtMi40LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hh
MS1XUE9vSG9SbWgvTG45amZGdnR5Y0puK0ljbUU9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAg
ICAgInJlcXVpcmVzIjogewotICAgICAgICAiY2hva2lkYXIiOiAiMS42LjEiLAotICAgICAgICAi
Y29tbWFuZGVyIjogIjIuOS4wIiwKLSAgICAgICAgImV4aXN0cy1zdGF0IjogIjEuMC4wIiwKLSAg
ICAgICAgImZpbmR1cC1zeW5jIjogIjAuNC4zIiwKLSAgICAgICAgImpzLXJlcG9ydGVycyI6ICIx
LjIuMCIsCi0gICAgICAgICJyZXNvbHZlIjogIjEuMy4yIiwKLSAgICAgICAgIndhbGstc3luYyI6
ICIwLjMuMSIKLSAgICAgIH0sCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiY29t
bWFuZGVyIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjIuOS4wIiwKLSAgICAgICAgICAicmVz
b2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29tbWFuZGVyLy0vY29tbWFuZGVy
LTIuOS4wLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGExLW5Ka0pRWGJoSWtETEl0
YkZGR0NZUUEvZzk5UT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJyZXF1
aXJlcyI6IHsKLSAgICAgICAgICAgICJncmFjZWZ1bC1yZWFkbGluayI6ICIxLjAuMSIKLSAgICAg
ICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJyZXNvbHZlIjogewotICAgICAgICAgICJ2ZXJz
aW9uIjogIjEuMy4yIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5u
cG1qcy5vcmcvcmVzb2x2ZS8tL3Jlc29sdmUtMS4zLjIudGd6IiwKLSAgICAgICAgICAiaW50ZWdy
aXR5IjogInNoYTEtSHdSQ3llREx1Qk51aDdrd1g1TXZSc2Z5Z2pVPSIsCi0gICAgICAgICAgImRl
diI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgInBhdGgtcGFy
c2UiOiAiMS4wLjUiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAid2Fsay1zeW5j
IjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjAuMy4xIiwKLSAgICAgICAgICAicmVzb2x2ZWQi
OiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd2Fsay1zeW5jLy0vd2Fsay1zeW5jLTAuMy4x
LnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGExLVZZb1dycXlNRGJXY0FvdHp4bTg1
ZG9UczVHVT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6
IHsKLSAgICAgICAgICAgICJlbnN1cmUtcG9zaXgtcGF0aCI6ICIxLjAuMiIsCi0gICAgICAgICAg
ICAibWF0Y2hlci1jb2xsZWN0aW9uIjogIjEuMC40IgotICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgfQotICAgIH0sCi0gICAgInJhbmRvbWF0aWMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIx
LjEuNyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcmFu
ZG9tYXRpYy8tL3JhbmRvbWF0aWMtMS4xLjcudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hh
NTEyLUQ1SlVqUHlKYmFKRGt1QWF6cFZuU2ZWa0xscGVPM3dEbFBST1RNTEdLRzF6TUZORlJncmNp
S28xbHR6L0F6TlRrcUUwSHpEeDY1NVFPTDUxTjA2aG93PT0iLAotICAgICAgImRldiI6IHRydWUs
Ci0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJpcy1udW1iZXIiOiAiMy4wLjAiLAotICAg
ICAgICAia2luZC1vZiI6ICI0LjAuMCIKLSAgICAgIH0sCi0gICAgICAiZGVwZW5kZW5jaWVzIjog
ewotICAgICAgICAiaXMtbnVtYmVyIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjMuMC4wIiwK
LSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtbnVt
YmVyLy0vaXMtbnVtYmVyLTMuMC4wLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGEx
LUpQMWlBYVI0TFBVRlljZ1FKMnI4ZlJMWEVaVT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAot
ICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJraW5kLW9mIjogIjMuMi4yIgot
ICAgICAgICAgIH0sCi0gICAgICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgICAgICJr
aW5kLW9mIjogewotICAgICAgICAgICAgICAidmVyc2lvbiI6ICIzLjIuMiIsCi0gICAgICAgICAg
ICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9raW5kLW9mLy0va2lu
ZC1vZi0zLjIuMi50Z3oiLAotICAgICAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTEtTWVvaHB6
UzZ1YnV3OHlSbTJKT3VwUjVLUEdRPSIsCi0gICAgICAgICAgICAgICJkZXYiOiB0cnVlLAotICAg
ICAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAgICAgImlzLWJ1ZmZlciI6ICIx
LjEuNSIKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAg
ICAgfSwKLSAgICAgICAgImtpbmQtb2YiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiNC4wLjAi
LAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9raW5k
LW9mLy0va2luZC1vZi00LjAuMC50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1J
SUU5ODljU2tvc2djM2hwR2tVR2I2NXkzVmM9IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAg
ICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiaXMtYnVmZmVyIjogIjEuMS41Igot
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgInJhbmdlLXBhcnNl
ciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRw
czovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yYW5nZS1wYXJzZXIvLS9yYW5nZS1wYXJzZXItMS4yLjAu
dGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS05SnZtdEllSlRkeEEzTWxLTWk5aEVKTGdE
VjQ9IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAicmF3LWJvZHkiOiB7Ci0gICAg
ICAidmVyc2lvbiI6ICIxLjEuNyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3Ry
eS5ucG1qcy5vcmcvcmF3LWJvZHkvLS9yYXctYm9keS0xLjEuNy50Z3oiLAotICAgICAgImludGVn
cml0eSI6ICJzaGExLUhRSjhLL29SYXN4bUk3eW84QUFXVnlxSDFDVT0iLAotICAgICAgImRldiI6
IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJieXRlcyI6ICIxLjAuMCIsCi0g
ICAgICAgICJzdHJpbmdfZGVjb2RlciI6ICIwLjEwLjMxIgotICAgICAgfSwKLSAgICAgICJkZXBl
bmRlbmNpZXMiOiB7Ci0gICAgICAgICJieXRlcyI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIx
LjAuMCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3Jn
L2J5dGVzLy0vYnl0ZXMtMS4wLjAudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTEt
TldudDZMbzBNVitybWNQcExMQk1jaURlSDZnPSIsCi0gICAgICAgICAgImRldiI6IHRydWUKLSAg
ICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgInJlYWRhYmxlLXN0cmVhbSI6IHsKLSAgICAg
ICJ2ZXJzaW9uIjogIjEuMC4zNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3Ry
eS5ucG1qcy5vcmcvcmVhZGFibGUtc3RyZWFtLy0vcmVhZGFibGUtc3RyZWFtLTEuMC4zNC50Z3oi
LAotICAgICAgImludGVncml0eSI6ICJzaGExLUVsZ2c0MHZJUXRMeXFxK3Y1TUtSYnVNc0ZYdz0i
LAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJjb3Jl
LXV0aWwtaXMiOiAiMS4wLjIiLAotICAgICAgICAiaW5oZXJpdHMiOiAiMi4wLjMiLAotICAgICAg
ICAiaXNhcnJheSI6ICIwLjAuMSIsCi0gICAgICAgICJzdHJpbmdfZGVjb2RlciI6ICIwLjEwLjMx
IgotICAgICAgfSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJpc2FycmF5Ijog
ewotICAgICAgICAgICJ2ZXJzaW9uIjogIjAuMC4xIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAi
aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXNhcnJheS8tL2lzYXJyYXktMC4wLjEudGd6IiwK
LSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTEtaWhpcy9LbW85QmQrQ2F2OFlEaVRtd1hSN3Q4
PSIsCi0gICAgICAgICAgImRldiI6IHRydWUKLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0g
ICAgInJlYWRkaXJwIjogewotICAgICAgInZlcnNpb24iOiAiMi4xLjAiLAotICAgICAgInJlc29s
dmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3JlYWRkaXJwLy0vcmVhZGRpcnAtMi4x
LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1UdEN0QmczekJ6TUF4SVJBTno5eTBj
eGtMWGc9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAg
ICAiZ3JhY2VmdWwtZnMiOiAiNC4xLjExIiwKLSAgICAgICAgIm1pbmltYXRjaCI6ICIzLjAuNCIs
Ci0gICAgICAgICJyZWFkYWJsZS1zdHJlYW0iOiAiMi4zLjMiLAotICAgICAgICAic2V0LWltbWVk
aWF0ZS1zaGltIjogIjEuMC4xIgotICAgICAgfSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0g
ICAgICAgICJyZWFkYWJsZS1zdHJlYW0iOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMi4zLjMi
LAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZWFk
YWJsZS1zdHJlYW0vLS9yZWFkYWJsZS1zdHJlYW0tMi4zLjMudGd6IiwKLSAgICAgICAgICAiaW50
ZWdyaXR5IjogInNoYTUxMi1tK3F6emNuN0tVeEVtZDFnTWJjaEYrWTJlSVViaWVVYXhrV3RwdHlI
eXdyWDByRThRRVlxUEMwN1Z1eTRXbTMyL3hFMTZOY2RCY3RiOFMwWGUvNUllUT09IiwKLSAgICAg
ICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAi
Y29yZS11dGlsLWlzIjogIjEuMC4yIiwKLSAgICAgICAgICAgICJpbmhlcml0cyI6ICIyLjAuMyIs
Ci0gICAgICAgICAgICAiaXNhcnJheSI6ICIxLjAuMCIsCi0gICAgICAgICAgICAicHJvY2Vzcy1u
ZXh0aWNrLWFyZ3MiOiAiMS4wLjciLAotICAgICAgICAgICAgInNhZmUtYnVmZmVyIjogIjUuMS4x
IiwKLSAgICAgICAgICAgICJzdHJpbmdfZGVjb2RlciI6ICIxLjAuMyIsCi0gICAgICAgICAgICAi
dXRpbC1kZXByZWNhdGUiOiAiMS4wLjIiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAg
ICAic3RyaW5nX2RlY29kZXIiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMS4wLjMiLAotICAg
ICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zdHJpbmdfZGVj
b2Rlci8tL3N0cmluZ19kZWNvZGVyLTEuMC4zLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6
ICJzaGE1MTItNEFINlo1ZnpOTkJjSCs2WERNZkEvQlR0ODdza3hxSmxPMGxBaDNEa2VyNXpUaGNB
eEc2bUt6K2lHdTMwOFVLb1BQUThEY3F4LzRKaHVqemx0UmEraFE9PSIsCi0gICAgICAgICAgImRl
diI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgInNhZmUtYnVm
ZmVyIjogIjUuMS4xIgotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0g
ICAgInJlY2FzdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMTAuMzMiLAotICAgICAgInJlc29s
dmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3JlY2FzdC8tL3JlY2FzdC0wLjEwLjMz
LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtbENnSTk2b0JieCtuRkN4R0hYNVhCS3Fv
MXBjPSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAg
ImFzdC10eXBlcyI6ICIwLjguMTIiLAotICAgICAgICAiZXNwcmltYS1mYiI6ICIxNTAwMS4xMDAx
LjAtZGV2LWhhcm1vbnktZmIiLAotICAgICAgICAicHJpdmF0ZSI6ICIwLjEuNyIsCi0gICAgICAg
ICJzb3VyY2UtbWFwIjogIjAuNS42IgotICAgICAgfSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7
Ci0gICAgICAgICJhc3QtdHlwZXMiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMC44LjEyIiwK
LSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYXN0LXR5
cGVzLy0vYXN0LXR5cGVzLTAuOC4xMi50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hh
MS1vTmtPUTFHN2lIY1d5RC9XTit2NEdLOUszOHc9IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZQot
ICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAicmVkZXllZCI6IHsKLSAgICAgICJ2ZXJz
aW9uIjogIjEuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpz
Lm9yZy9yZWRleWVkLy0vcmVkZXllZC0xLjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJz
aGExLTZXd1pPMERBZ1dzQXJzaENhWTVoR0Y1VlNZbz0iLAotICAgICAgImRldiI6IHRydWUsCi0g
ICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJlc3ByaW1hIjogIjMuMC4wIgotICAgICAgfSwK
LSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJlc3ByaW1hIjogewotICAgICAgICAg
ICJ2ZXJzaW9uIjogIjMuMC4wIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdp
c3RyeS5ucG1qcy5vcmcvZXNwcmltYS8tL2VzcHJpbWEtMy4wLjAudGd6IiwKLSAgICAgICAgICAi
aW50ZWdyaXR5IjogInNoYTEtVTg4a2VzMm5jeFBsVWNPcUxuTTBMVCswOTlrPSIsCi0gICAgICAg
ICAgImRldiI6IHRydWUKLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgInJlZ2VuZXJh
dGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjMuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0
cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcmVnZW5lcmF0ZS8tL3JlZ2VuZXJhdGUtMS4zLjIudGd6
IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS0wWlFjWjdyVU4rRytka002M1ZzNFg1V3hrbUE9
IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAicmVnZW5lcmF0b3IiOiB7Ci0gICAg
ICAidmVyc2lvbiI6ICIwLjguNDAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0
cnkubnBtanMub3JnL3JlZ2VuZXJhdG9yLy0vcmVnZW5lcmF0b3ItMC44LjQwLnRneiIsCi0gICAg
ICAiaW50ZWdyaXR5IjogInNoYTEtb09SWHhZNjl1dVYxeWZqTmRSSitrM1ZrTmRnPSIsCi0gICAg
ICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImNvbW1vbmVyIjog
IjAuMTAuOCIsCi0gICAgICAgICJkZWZzIjogIjEuMS4xIiwKLSAgICAgICAgImVzcHJpbWEtZmIi
OiAiMTUwMDEuMTAwMS4wLWRldi1oYXJtb255LWZiIiwKLSAgICAgICAgInByaXZhdGUiOiAiMC4x
LjciLAotICAgICAgICAicmVjYXN0IjogIjAuMTAuMzMiLAotICAgICAgICAidGhyb3VnaCI6ICIy
LjMuOCIKLSAgICAgIH0KLSAgICB9LAotICAgICJyZWdlbmVyYXRvci1ydW50aW1lIjogewotICAg
ICAgInZlcnNpb24iOiAiMC4xMC41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lz
dHJ5Lm5wbWpzLm9yZy9yZWdlbmVyYXRvci1ydW50aW1lLy0vcmVnZW5lcmF0b3ItcnVudGltZS0w
LjEwLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1NMncrL0JJZ3JjN2Rvc242dG50
YWVWV2pObGc9IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAicmVnZXgtY2FjaGUi
OiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjQuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6
Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcmVnZXgtY2FjaGUvLS9yZWdleC1jYWNoZS0wLjQuMy50Z3oi
LAotICAgICAgImludGVncml0eSI6ICJzaGExLW14cHNOZFRRMzg3MWNScm1VZWpwMDljUlFVVT0i
LAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJpcy1l
cXVhbC1zaGFsbG93IjogIjAuMS4zIiwKLSAgICAgICAgImlzLXByaW1pdGl2ZSI6ICIyLjAuMCIK
LSAgICAgIH0KLSAgICB9LAotICAgICJyZWdleHB1IjogewotICAgICAgInZlcnNpb24iOiAiMS4z
LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3JlZ2V4
cHUvLS9yZWdleHB1LTEuMy4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtNVRUY21S
cWVXRVlGREpqZWJYM1VwVnllb1cwPSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1
aXJlcyI6IHsKLSAgICAgICAgImVzcHJpbWEiOiAiMi43LjMiLAotICAgICAgICAicmVjYXN0Ijog
IjAuMTAuMzMiLAotICAgICAgICAicmVnZW5lcmF0ZSI6ICIxLjMuMiIsCi0gICAgICAgICJyZWdq
c2dlbiI6ICIwLjIuMCIsCi0gICAgICAgICJyZWdqc3BhcnNlciI6ICIwLjEuNSIKLSAgICAgIH0s
Ci0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZXNwcmltYSI6IHsKLSAgICAgICAg
ICAidmVyc2lvbiI6ICIyLjcuMyIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVn
aXN0cnkubnBtanMub3JnL2VzcHJpbWEvLS9lc3ByaW1hLTIuNy4zLnRneiIsCi0gICAgICAgICAg
ImludGVncml0eSI6ICJzaGExLWx1TzNEVmQ1OXExSnpRTW1jOUhERW5aN3BZRT0iLAotICAgICAg
ICAgICJkZXYiOiB0cnVlCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJyZWdqc2dl
biI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRw
czovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZWdqc2dlbi8tL3JlZ2pzZ2VuLTAuMi4wLnRneiIsCi0g
ICAgICAiaW50ZWdyaXR5IjogInNoYTEtYkFGcTNxeFZUM1dDUCtONndGdVMxYVR0c2ZjPSIsCi0g
ICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgInJlZ2pzcGFyc2VyIjogewotICAgICAgInZl
cnNpb24iOiAiMC4xLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBt
anMub3JnL3JlZ2pzcGFyc2VyLy0vcmVnanNwYXJzZXItMC4xLjUudGd6IiwKLSAgICAgICJpbnRl
Z3JpdHkiOiAic2hhMS1mdWo0VGNiNmVTMC8wSzRpalNTOWxKNnRJRnc9IiwKLSAgICAgICJkZXYi
OiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAianNlc2MiOiAiMC41LjAiCi0g
ICAgICB9Ci0gICAgfSwKLSAgICAicmVtb3ZlLXRyYWlsaW5nLXNlcGFyYXRvciI6IHsKLSAgICAg
ICJ2ZXJzaW9uIjogIjEuMC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5
Lm5wbWpzLm9yZy9yZW1vdmUtdHJhaWxpbmctc2VwYXJhdG9yLy0vcmVtb3ZlLXRyYWlsaW5nLXNl
cGFyYXRvci0xLjAuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLWFiQmkyWGh5ZXRG
TnhyVnJwS3QzTDlqWEJSRT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJyZXBl
YXQtZWxlbWVudCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMS4yIiwKLSAgICAgICJyZXNvbHZl
ZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZXBlYXQtZWxlbWVudC8tL3JlcGVhdC1l
bGVtZW50LTEuMS4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtN3dpYUY0MFVnN3F1
VFpQcm1MVDU1T0VkbVFvPSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgInJlcGVh
dC1zdHJpbmciOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjYuMSIsCi0gICAgICAicmVzb2x2ZWQi
OiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcmVwZWF0LXN0cmluZy8tL3JlcGVhdC1zdHJp
bmctMS42LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1qY3JrY09ISWlyd3RZQS8v
U25kaWh0cDE1amM9IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAicmVwZWF0aW5n
IjogewotICAgICAgInZlcnNpb24iOiAiMS4xLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBz
Oi8vcmVnaXN0cnkubnBtanMub3JnL3JlcGVhdGluZy8tL3JlcGVhdGluZy0xLjEuMy50Z3oiLAot
ICAgICAgImludGVncml0eSI6ICJzaGExLVBVRVVJWWgzVTNTVStYOTMrWGhmcTRFUHBLdz0iLAot
ICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJpcy1maW5p
dGUiOiAiMS4wLjIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAicmVxdWlyZXMtcG9ydCI6IHsKLSAg
ICAgICJ2ZXJzaW9uIjogIjEuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lz
dHJ5Lm5wbWpzLm9yZy9yZXF1aXJlcy1wb3J0Ly0vcmVxdWlyZXMtcG9ydC0xLjAuMC50Z3oiLAot
ICAgICAgImludGVncml0eSI6ICJzaGExLWtsMG1BZE9heElYZ2tjOE5wY2JtbE53OXl2OD0iLAot
ICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJyZXNvbHZlIjogewotICAgICAgInZlcnNp
b24iOiAiMS40LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMu
b3JnL3Jlc29sdmUvLS9yZXNvbHZlLTEuNC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNo
YTUxMi1hVzdzVktQdWZ5SHFPbXl5THpnL0orODYwNnY1bmV2QmdhbGlJbFY3blVwVk1zRG5vQkdW
L2NiU0xOalpBZzlxMENmZC8rZWFzS1ZLUTh2T3U4Zm4xUT09IiwKLSAgICAgICJkZXYiOiB0cnVl
LAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAicGF0aC1wYXJzZSI6ICIxLjAuNSIKLSAg
ICAgIH0KLSAgICB9LAotICAgICJyZXNvbHZlLWRpciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAu
MS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZXNv
bHZlLWRpci8tL3Jlc29sdmUtZGlyLTAuMS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNo
YTEtc2hrbG1sWUMrc1hGeEphdGlVcHVqTVF3Smg0PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAg
ICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImV4cGFuZC10aWxkZSI6ICIxLjIuMiIsCi0gICAg
ICAgICJnbG9iYWwtbW9kdWxlcyI6ICIwLjIuMyIKLSAgICAgIH0KLSAgICB9LAotICAgICJyZXN0
b3JlLWN1cnNvciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4xIiwKLSAgICAgICJyZXNvbHZl
ZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZXN0b3JlLWN1cnNvci8tL3Jlc3RvcmUt
Y3Vyc29yLTEuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtTkdZZlJvaGpKLzdT
bVJSNUZTSlMzNUxhcFVFPSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6
IHsKLSAgICAgICAgImV4aXQtaG9vayI6ICIxLjEuMSIsCi0gICAgICAgICJvbmV0aW1lIjogIjEu
MS4wIgotICAgICAgfQotICAgIH0sCi0gICAgInJpZ2h0LWFsaWduIjogewotICAgICAgInZlcnNp
b24iOiAiMC4xLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMu
b3JnL3JpZ2h0LWFsaWduLy0vcmlnaHQtYWxpZ24tMC4xLjMudGd6IiwKLSAgICAgICJpbnRlZ3Jp
dHkiOiAic2hhMS1ZVE9iY2kvbW8xRldpU0VOSk9GTWxoU0dFKzg9IiwKLSAgICAgICJkZXYiOiB0
cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiYWxpZ24tdGV4dCI6ICIwLjEuNCIK
LSAgICAgIH0KLSAgICB9LAotICAgICJyaW1yYWYiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjYu
MSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcmltcmFm
Ly0vcmltcmFmLTIuNi4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtd2pPT3hrUGZl
aHQvNWNWUHFHOVhRb3BWOHowPSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJl
cyI6IHsKLSAgICAgICAgImdsb2IiOiAiNy4xLjIiCi0gICAgICB9LAotICAgICAgImRlcGVuZGVu
Y2llcyI6IHsKLSAgICAgICAgImdsb2IiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiNy4xLjIi
LAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9nbG9i
Ly0vZ2xvYi03LjEuMi50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU1KVFVn
MWtqdUxlUUNKK2NjRTRWcGE2a0tWWGtQWUoybU9DUXlVdUtMY0xRc2RyTUNwQlBVaThxVkU2K1l1
YUprb3plQTlOdXNUQXczaExyOFhlNUVRPT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAg
ICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJmcy5yZWFscGF0aCI6ICIxLjAuMCIs
Ci0gICAgICAgICAgICAiaW5mbGlnaHQiOiAiMS4wLjYiLAotICAgICAgICAgICAgImluaGVyaXRz
IjogIjIuMC4zIiwKLSAgICAgICAgICAgICJtaW5pbWF0Y2giOiAiMy4wLjQiLAotICAgICAgICAg
ICAgIm9uY2UiOiAiMS40LjAiLAotICAgICAgICAgICAgInBhdGgtaXMtYWJzb2x1dGUiOiAiMS4w
LjEiCi0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAicnN2cCI6
IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuNi4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczov
L3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yc3ZwLy0vcnN2cC0zLjYuMi50Z3oiLAotICAgICAgImludGVn
cml0eSI6ICJzaGE1MTItT2ZXR1FUYjl2bndSand0QTJRd3BHMklDY2xIQzNwZ1haTzV4dDhIMkVm
Z0RxdU8wcVZkU2I1VDg4TDRxSlZBRXVnYlM1NnBBdVY0WFpNNThVWDh1bHc9PSIsCi0gICAgICAi
ZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgInJ1bi1hc3luYyI6IHsKLSAgICAgICJ2ZXJzaW9uIjog
IjIuMy4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9y
dW4tYXN5bmMvLS9ydW4tYXN5bmMtMi4zLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hh
MS1BM0dyU3VDOTF5RFVGbTE5L2FaUDk2UkZwc0E9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAg
ICAgInJlcXVpcmVzIjogewotICAgICAgICAiaXMtcHJvbWlzZSI6ICIyLjEuMCIKLSAgICAgIH0K
LSAgICB9LAotICAgICJyeCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMS4wIiwKLSAgICAgICJy
ZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yeC8tL3J4LTQuMS4wLnRneiIs
Ci0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtcGZFLzk1N3p0MEQrTUtxQVA3Q2ZtSUJkUjRJPSIs
Ci0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgInNhZmUtYnVmZmVyIjogewotICAgICAg
InZlcnNpb24iOiAiNS4xLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnku
bnBtanMub3JnL3NhZmUtYnVmZmVyLy0vc2FmZS1idWZmZXItNS4xLjEudGd6IiwKLSAgICAgICJp
bnRlZ3JpdHkiOiAic2hhNTEyLWtLdk5KbjZNbTkzZ0FjeldWSmc3d0grd0dZV05yREhkV3ZwVW1I
eUVzZ0N0SXd3bzNicVB0VjR0UjV0dVBhVWhUT28va3ZoVndkOFh3d09sbEdZa2JnPT0iLAotICAg
ICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJzYWZlLWpzb24tcGFyc2UiOiB7Ci0gICAgICAi
dmVyc2lvbiI6ICIxLjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5u
cG1qcy5vcmcvc2FmZS1qc29uLXBhcnNlLy0vc2FmZS1qc29uLXBhcnNlLTEuMC4xLnRneiIsCi0g
ICAgICAiaW50ZWdyaXR5IjogInNoYTEtUG5aeVBqamYzYUU4bXgwcG9lQi8vdVN6QzFjPSIsCi0g
ICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgInNhbmUiOiB7Ci0gICAgICAidmVyc2lvbiI6
ICIxLjcuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcv
c2FuZS8tL3NhbmUtMS43LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1zMWViekxS
Y2xNOGdOVnpJRVNTWkRmMDBiakE9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVp
cmVzIjogewotICAgICAgICAiYW55bWF0Y2giOiAiMS4zLjIiLAotICAgICAgICAiZXhlYy1zaCI6
ICIwLjIuMCIsCi0gICAgICAgICJmYi13YXRjaG1hbiI6ICIyLjAuMCIsCi0gICAgICAgICJtaW5p
bWF0Y2giOiAiMy4wLjQiLAotICAgICAgICAibWluaW1pc3QiOiAiMS4yLjAiLAotICAgICAgICAi
d2Fsa2VyIjogIjEuMC43IiwKLSAgICAgICAgIndhdGNoIjogIjAuMTAuMCIKLSAgICAgIH0sCi0g
ICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAibWluaW1pc3QiOiB7Ci0gICAgICAgICAg
InZlcnNpb24iOiAiMS4yLjAiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lz
dHJ5Lm5wbWpzLm9yZy9taW5pbWlzdC8tL21pbmltaXN0LTEuMi4wLnRneiIsCi0gICAgICAgICAg
ImludGVncml0eSI6ICJzaGExLW8xQUlzZzlCT0Q3c0g3a1U5TTFkOTVvbVFvUT0iLAotICAgICAg
ICAgICJkZXYiOiB0cnVlCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJzZW12ZXIi
OiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjQuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6
Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2VtdmVyLy0vc2VtdmVyLTUuNC4xLnRneiIsCi0gICAgICAi
aW50ZWdyaXR5IjogInNoYTUxMi1XZkcvWDkrb0FUaDgxWHRsbElvL0k4Z09pWTlFWFJkdjFjUWR5
eWtlWEsxN1ljVVczRVhVQWkyVG80cGNINm5adEpQcjdaT3BNNU9NeVdKWm0rOFJzZz09IiwKLSAg
ICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAic2VuZCI6IHsKLSAgICAgICJ2ZXJzaW9uIjog
IjAuMTUuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcv
c2VuZC8tL3NlbmQtMC4xNS40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtbUYrcVBp
aExBblBIa3paS05jWnplOWs1QmJrPSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1
aXJlcyI6IHsKLSAgICAgICAgImRlYnVnIjogIjIuNi44IiwKLSAgICAgICAgImRlcGQiOiAiMS4x
LjEiLAotICAgICAgICAiZGVzdHJveSI6ICIxLjAuNCIsCi0gICAgICAgICJlbmNvZGV1cmwiOiAi
MS4wLjEiLAotICAgICAgICAiZXNjYXBlLWh0bWwiOiAiMS4wLjMiLAotICAgICAgICAiZXRhZyI6
ICIxLjguMCIsCi0gICAgICAgICJmcmVzaCI6ICIwLjUuMCIsCi0gICAgICAgICJodHRwLWVycm9y
cyI6ICIxLjYuMiIsCi0gICAgICAgICJtaW1lIjogIjEuMy40IiwKLSAgICAgICAgIm1zIjogIjIu
MC4wIiwKLSAgICAgICAgIm9uLWZpbmlzaGVkIjogIjIuMy4wIiwKLSAgICAgICAgInJhbmdlLXBh
cnNlciI6ICIxLjIuMCIsCi0gICAgICAgICJzdGF0dXNlcyI6ICIxLjMuMSIKLSAgICAgIH0sCi0g
ICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAibWltZSI6IHsKLSAgICAgICAgICAidmVy
c2lvbiI6ICIxLjMuNCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnku
bnBtanMub3JnL21pbWUvLS9taW1lLTEuMy40LnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6
ICJzaGExLUVWK2VPMnM5cnlsWm1EeXpqeFNhTFVEclhWTT0iLAotICAgICAgICAgICJkZXYiOiB0
cnVlCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJzZXJ2ZS1zdGF0aWMiOiB7Ci0g
ICAgICAidmVyc2lvbiI6ICIxLjEyLjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVn
aXN0cnkubnBtanMub3JnL3NlcnZlLXN0YXRpYy8tL3NlcnZlLXN0YXRpYy0xLjEyLjQudGd6IiwK
LSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1tMnFwanV0eVU4VHUzRXdmYjl2S1lKa0JxV0U9IiwK
LSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiZW5jb2Rl
dXJsIjogIjEuMC4xIiwKLSAgICAgICAgImVzY2FwZS1odG1sIjogIjEuMC4zIiwKLSAgICAgICAg
InBhcnNldXJsIjogIjEuMy4xIiwKLSAgICAgICAgInNlbmQiOiAiMC4xNS40IgotICAgICAgfQot
ICAgIH0sCi0gICAgInNldC1ibG9ja2luZyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4wIiwK
LSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zZXQtYmxvY2tp
bmcvLS9zZXQtYmxvY2tpbmctMi4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1C
RitYZ3RBUnJwcG9BOTNUZ3JKRGtyUFlrUGM9IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwK
LSAgICAic2V0LWltbWVkaWF0ZS1zaGltIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjEiLAot
ICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NldC1pbW1lZGlh
dGUtc2hpbS8tL3NldC1pbW1lZGlhdGUtc2hpbS0xLjAuMS50Z3oiLAotICAgICAgImludGVncml0
eSI6ICJzaGExLVN5c2JKK3VBaXArTnpFZ2FXT1hsYjFtZlAyRT0iLAotICAgICAgImRldiI6IHRy
dWUKLSAgICB9LAotICAgICJzZXRwcm90b3R5cGVvZiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEu
MC4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zZXRw
cm90b3R5cGVvZi8tL3NldHByb3RvdHlwZW9mLTEuMC4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5
IjogInNoYTEtWmxaK053USs2MDhFMlJ2V1dNREw3N1ZiamdRPSIsCi0gICAgICAiZGV2IjogdHJ1
ZQotICAgIH0sCi0gICAgInNoZWJhbmctY29tbWFuZCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEu
Mi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zaGVi
YW5nLWNvbW1hbmQvLS9zaGViYW5nLWNvbW1hbmQtMS4yLjAudGd6IiwKLSAgICAgICJpbnRlZ3Jp
dHkiOiAic2hhMS1SS3JHVzJsYkF6bUphTU9mTmovdVhlcjk4ZW89IiwKLSAgICAgICJkZXYiOiB0
cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAic2hlYmFuZy1yZWdleCI6ICIxLjAu
MCIKLSAgICAgIH0KLSAgICB9LAotICAgICJzaGViYW5nLXJlZ2V4IjogewotICAgICAgInZlcnNp
b24iOiAiMS4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMu
b3JnL3NoZWJhbmctcmVnZXgvLS9zaGViYW5nLXJlZ2V4LTEuMC4wLnRneiIsCi0gICAgICAiaW50
ZWdyaXR5IjogInNoYTEtMmtMMGwwREF0QzJ5eXBjb1Z4eXhrTW1PL3FNPSIsCi0gICAgICAiZGV2
IjogdHJ1ZQotICAgIH0sCi0gICAgInNoZWxsanMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjMu
MCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2hlbGxq
cy8tL3NoZWxsanMtMC4zLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1OWmJtTUhw
NEZVVDFrZk45cGhnMkR6SGJWN0U9IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAi
c2hlbGx3b3JkcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMS4wIiwKLSAgICAgICJyZXNvbHZl
ZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zaGVsbHdvcmRzLy0vc2hlbGx3b3Jkcy0w
LjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLVpxL1VlMm9Ta3kyUWNjdjltS1V1
ZUZ6UXVoUT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJzaWduYWwtZXhpdCI6
IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczov
L3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zaWduYWwtZXhpdC8tL3NpZ25hbC1leGl0LTMuMC4yLnRneiIs
Ci0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtdGYzQWp4S0g2aEY0WW81QlhpVVRLM05rYkcwPSIs
Ci0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgInNpbGVudC1lcnJvciI6IHsKLSAgICAg
ICJ2ZXJzaW9uIjogIjEuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5
Lm5wbWpzLm9yZy9zaWxlbnQtZXJyb3IvLS9zaWxlbnQtZXJyb3ItMS4xLjAudGd6IiwKLSAgICAg
ICJpbnRlZ3JpdHkiOiAic2hhMS1JZ2x3Ynh5RkNwOGRFTkRZUUpHTFJ2SnVHOGs9IiwKLSAgICAg
ICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiZGVidWciOiAiMi42
LjgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAic2ltcGxlLWZtdCI6IHsKLSAgICAgICJ2ZXJzaW9u
IjogIjAuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9y
Zy9zaW1wbGUtZm10Ly0vc2ltcGxlLWZtdC0wLjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6
ICJzaGExLUdSdjFacVdlWlRCSUxMSmF0VHRLamNoY09tcz0iLAotICAgICAgImRldiI6IHRydWUK
LSAgICB9LAotICAgICJzaW1wbGUtaXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjIuMCIsCi0g
ICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2ltcGxlLWlzLy0v
c2ltcGxlLWlzLTAuMi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtS3J0MXF0NDUz
clhNZ1Z6aERtR1JGa2hRdXZBPSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgInNs
YXNoIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0
dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NsYXNoLy0vc2xhc2gtMS4wLjAudGd6IiwKLSAgICAg
ICJpbnRlZ3JpdHkiOiAic2hhMS14Qjh2YkRuOEZ0SE5GNjFMWFlsaEZLNUhEVlU9IiwKLSAgICAg
ICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAic2xpZGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIx
LjEuNiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2xp
ZGUvLS9zbGlkZS0xLjEuNi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLVZ1c0NmV1cw
MHR6bXl5NHRNc1RVcjhuaDF3Yz0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJz
b2NrZXQuaW8iOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjYuMCIsCi0gICAgICAicmVzb2x2ZWQi
OiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc29ja2V0LmlvLy0vc29ja2V0LmlvLTEuNi4w
LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtUGtEWk1tTithOWtqbUJzbHl2ZkZQb08y
NHVFPSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAg
ImRlYnVnIjogIjIuMy4zIiwKLSAgICAgICAgImVuZ2luZS5pbyI6ICIxLjguMCIsCi0gICAgICAg
ICJoYXMtYmluYXJ5IjogIjAuMS43IiwKLSAgICAgICAgIm9iamVjdC1hc3NpZ24iOiAiNC4xLjAi
LAotICAgICAgICAic29ja2V0LmlvLWFkYXB0ZXIiOiAiMC41LjAiLAotICAgICAgICAic29ja2V0
LmlvLWNsaWVudCI6ICIxLjYuMCIsCi0gICAgICAgICJzb2NrZXQuaW8tcGFyc2VyIjogIjIuMy4x
IgotICAgICAgfSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJkZWJ1ZyI6IHsK
LSAgICAgICAgICAidmVyc2lvbiI6ICIyLjMuMyIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0
dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RlYnVnLy0vZGVidWctMi4zLjMudGd6IiwKLSAgICAg
ICAgICAiaW50ZWdyaXR5IjogInNoYTEtUU1SVDVuNXVFOGtCM2V3eGV2aVliTnFlLzR3PSIsCi0g
ICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAg
ICAgIm1zIjogIjAuNy4yIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgIm1zIjog
ewotICAgICAgICAgICJ2ZXJzaW9uIjogIjAuNy4yIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAi
aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbXMvLS9tcy0wLjcuMi50Z3oiLAotICAgICAgICAg
ICJpbnRlZ3JpdHkiOiAic2hhMS1yaVhQSlJLemlGb2RsZGZ3TjRhTmhERVNSMlU9IiwKLSAgICAg
ICAgICAiZGV2IjogdHJ1ZQotICAgICAgICB9LAotICAgICAgICAib2JqZWN0LWFzc2lnbiI6IHsK
LSAgICAgICAgICAidmVyc2lvbiI6ICI0LjEuMCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0
dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL29iamVjdC1hc3NpZ24vLS9vYmplY3QtYXNzaWduLTQu
MS4wLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGExLWVqczlEcGdHUFVQMHdEOHVp
dWJOVWFob2c2QT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlCi0gICAgICAgIH0KLSAgICAgIH0K
LSAgICB9LAotICAgICJzb2NrZXQuaW8tYWRhcHRlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAu
NS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zb2Nr
ZXQuaW8tYWRhcHRlci8tL3NvY2tldC5pby1hZGFwdGVyLTAuNS4wLnRneiIsCi0gICAgICAiaW50
ZWdyaXR5IjogInNoYTEteTIxTHVMN0lIaEI0dVpaMytjN1FCR0JtdTRzPSIsCi0gICAgICAiZGV2
IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImRlYnVnIjogIjIuMy4zIiwK
LSAgICAgICAgInNvY2tldC5pby1wYXJzZXIiOiAiMi4zLjEiCi0gICAgICB9LAotICAgICAgImRl
cGVuZGVuY2llcyI6IHsKLSAgICAgICAgImRlYnVnIjogewotICAgICAgICAgICJ2ZXJzaW9uIjog
IjIuMy4zIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5v
cmcvZGVidWcvLS9kZWJ1Zy0yLjMuMy50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hh
MS1RTVJUNW41dUU4a0IzZXd4ZXZpWWJOcWUvNHc9IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwK
LSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAibXMiOiAiMC43LjIiCi0gICAg
ICAgICAgfQotICAgICAgICB9LAotICAgICAgICAibXMiOiB7Ci0gICAgICAgICAgInZlcnNpb24i
OiAiMC43LjIiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpz
Lm9yZy9tcy8tL21zLTAuNy4yLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGExLXJp
WFBKUkt6aUZvZGxkZndONGFOaERFU1IyVT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlCi0gICAg
ICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJzb2NrZXQuaW8tY2xpZW50IjogewotICAgICAg
InZlcnNpb24iOiAiMS42LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnku
bnBtanMub3JnL3NvY2tldC5pby1jbGllbnQvLS9zb2NrZXQuaW8tY2xpZW50LTEuNi4wLnRneiIs
Ci0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtVzJhUFQzY1RCTi91MFhrR1J3ZzRiNlp4ZUZNPSIs
Ci0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImJhY2tv
MiI6ICIxLjAuMiIsCi0gICAgICAgICJjb21wb25lbnQtYmluZCI6ICIxLjAuMCIsCi0gICAgICAg
ICJjb21wb25lbnQtZW1pdHRlciI6ICIxLjIuMSIsCi0gICAgICAgICJkZWJ1ZyI6ICIyLjMuMyIs
Ci0gICAgICAgICJlbmdpbmUuaW8tY2xpZW50IjogIjEuOC4wIiwKLSAgICAgICAgImhhcy1iaW5h
cnkiOiAiMC4xLjciLAotICAgICAgICAiaW5kZXhvZiI6ICIwLjAuMSIsCi0gICAgICAgICJvYmpl
Y3QtY29tcG9uZW50IjogIjAuMC4zIiwKLSAgICAgICAgInBhcnNldXJpIjogIjAuMC41IiwKLSAg
ICAgICAgInNvY2tldC5pby1wYXJzZXIiOiAiMi4zLjEiLAotICAgICAgICAidG8tYXJyYXkiOiAi
MC4xLjQiCi0gICAgICB9LAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImNvbXBv
bmVudC1lbWl0dGVyIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjEuMi4xIiwKLSAgICAgICAg
ICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29tcG9uZW50LWVtaXR0
ZXIvLS9jb21wb25lbnQtZW1pdHRlci0xLjIuMS50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHki
OiAic2hhMS1FM2tZMXRlQ2cvZmZlbXQ4V21QaFFPYVVKZVk9IiwKLSAgICAgICAgICAiZGV2Ijog
dHJ1ZQotICAgICAgICB9LAotICAgICAgICAiZGVidWciOiB7Ci0gICAgICAgICAgInZlcnNpb24i
OiAiMi4zLjMiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpz
Lm9yZy9kZWJ1Zy8tL2RlYnVnLTIuMy4zLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJz
aGExLVFNUlQ1bjV1RThrQjNld3hldmlZYk5xZS80dz0iLAotICAgICAgICAgICJkZXYiOiB0cnVl
LAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJtcyI6ICIwLjcuMiIKLSAg
ICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJtcyI6IHsKLSAgICAgICAgICAidmVyc2lv
biI6ICIwLjcuMiIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBt
anMub3JnL21zLy0vbXMtMC43LjIudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTEt
cmlYUEpSS3ppRm9kbGRmd040YU5oREVTUjJVPSIsCi0gICAgICAgICAgImRldiI6IHRydWUKLSAg
ICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgInNvY2tldC5pby1wYXJzZXIiOiB7Ci0gICAg
ICAidmVyc2lvbiI6ICIyLjMuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3Ry
eS5ucG1qcy5vcmcvc29ja2V0LmlvLXBhcnNlci8tL3NvY2tldC5pby1wYXJzZXItMi4zLjEudGd6
IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS0zVk1nSlJBODVDbHBjeWErL1dRQVg4L2x0S0E9
IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiY29t
cG9uZW50LWVtaXR0ZXIiOiAiMS4xLjIiLAotICAgICAgICAiZGVidWciOiAiMi4yLjAiLAotICAg
ICAgICAiaXNhcnJheSI6ICIwLjAuMSIsCi0gICAgICAgICJqc29uMyI6ICIzLjMuMiIKLSAgICAg
IH0sCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZGVidWciOiB7Ci0gICAgICAg
ICAgInZlcnNpb24iOiAiMi4yLjAiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3Jl
Z2lzdHJ5Lm5wbWpzLm9yZy9kZWJ1Zy8tL2RlYnVnLTIuMi4wLnRneiIsCi0gICAgICAgICAgImlu
dGVncml0eSI6ICJzaGExLStIQlg2Wld4b2ZhdWFrbGdaa0UzdkZid09kbz0iLAotICAgICAgICAg
ICJkZXYiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJtcyI6
ICIwLjcuMSIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJpc2FycmF5Ijogewot
ICAgICAgICAgICJ2ZXJzaW9uIjogIjAuMC4xIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0
cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXNhcnJheS8tL2lzYXJyYXktMC4wLjEudGd6IiwKLSAg
ICAgICAgICAiaW50ZWdyaXR5IjogInNoYTEtaWhpcy9LbW85QmQrQ2F2OFlEaVRtd1hSN3Q4PSIs
Ci0gICAgICAgICAgImRldiI6IHRydWUKLSAgICAgICAgfSwKLSAgICAgICAgIm1zIjogewotICAg
ICAgICAgICJ2ZXJzaW9uIjogIjAuNy4xIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6
Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbXMvLS9tcy0wLjcuMS50Z3oiLAotICAgICAgICAgICJpbnRl
Z3JpdHkiOiAic2hhMS1uTkU4QTYyLzhsdGw3LzNuem9aTzZWSUJjSmc9IiwKLSAgICAgICAgICAi
ZGV2IjogdHJ1ZQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAic29ydC1vYmplY3Qt
a2V5cyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMS4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJo
dHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zb3J0LW9iamVjdC1rZXlzLy0vc29ydC1vYmplY3Qt
a2V5cy0xLjEuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLTA2YkVqY0tzbCthOGxE
WjJsdUEvYlFuVGVWST0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJzb3J0LXBh
Y2thZ2UtanNvbiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuNy4wIiwKLSAgICAgICJyZXNvbHZl
ZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zb3J0LXBhY2thZ2UtanNvbi8tL3NvcnQt
cGFja2FnZS1qc29uLTEuNy4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtRTdOaS8y
UUF4YlRxcWJvaUQ1Nm53OVprUzE4PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1
aXJlcyI6IHsKLSAgICAgICAgInNvcnQtb2JqZWN0LWtleXMiOiAiMS4xLjIiCi0gICAgICB9Ci0g
ICAgfSwKLSAgICAic291cmNlLW1hcCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuNS42IiwKLSAg
ICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zb3VyY2UtbWFwLy0v
c291cmNlLW1hcC0wLjUuNi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLWRjNDQ5U3Z3
Y3p4YWZ3d1JqWUV6U2l1MTlCST0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJz
b3VyY2UtbWFwLXN1cHBvcnQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjIuMTAiLAotICAgICAg
InJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NvdXJjZS1tYXAtc3VwcG9y
dC8tL3NvdXJjZS1tYXAtc3VwcG9ydC0wLjIuMTAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAi
c2hhMS02bG81QUtIQnl5VUphZ3JvekZ3clN4RGUwOXc9IiwKLSAgICAgICJkZXYiOiB0cnVlLAot
ICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAic291cmNlLW1hcCI6ICIwLjEuMzIiCi0gICAg
ICB9LAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInNvdXJjZS1tYXAiOiB7Ci0g
ICAgICAgICAgInZlcnNpb24iOiAiMC4xLjMyIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0
cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc291cmNlLW1hcC8tL3NvdXJjZS1tYXAtMC4xLjMyLnRn
eiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGExLXlMYkJaM2w3cEhRS2pxTXlVaFl2OElX
UnNtWT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsK
LSAgICAgICAgICAgICJhbWRlZmluZSI6ICIxLjAuMSIKLSAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICAgIH0KLSAgICB9LAotICAgICJzb3VyY2UtbWFwLXVybCI6IHsKLSAgICAgICJ2ZXJzaW9u
IjogIjAuMy4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9y
Zy9zb3VyY2UtbWFwLXVybC8tL3NvdXJjZS1tYXAtdXJsLTAuMy4wLnRneiIsCi0gICAgICAiaW50
ZWdyaXR5IjogInNoYTEtZnNyeE8xZTgwSjJvcEF4ZEpwMnpONW5VcXZrPSIsCi0gICAgICAiZGV2
IjogdHJ1ZQotICAgIH0sCi0gICAgInNwYXduLWFyZ3MiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIw
LjIuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3Bh
d24tYXJncy8tL3NwYXduLWFyZ3MtMC4yLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hh
MS0rMzBMMGRjUDFERnIyZVBldzRubVg1MWpZYnM9IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAg
fSwKLSAgICAic3Bhd24tc3luYyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4xNSIsCi0gICAg
ICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3Bhd24tc3luYy8tL3Nw
YXduLXN5bmMtMS4wLjE1LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtc0FlWlZYNjMr
d3lEZHNLZFJPaWg2bWZsZEhZPSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJl
cyI6IHsKLSAgICAgICAgImNvbmNhdC1zdHJlYW0iOiAiMS42LjAiLAotICAgICAgICAib3Mtc2hp
bSI6ICIwLjEuMyIKLSAgICAgIH0KLSAgICB9LAotICAgICJzcGF3bmJhY2siOiB7Ci0gICAgICAi
dmVyc2lvbiI6ICIxLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5u
cG1qcy5vcmcvc3Bhd25iYWNrLy0vc3Bhd25iYWNrLTEuMC4wLnRneiIsCi0gICAgICAiaW50ZWdy
aXR5IjogInNoYTEtOXpaaTkrVk5sVForeW5UV1FteG5mZGZxYUc4PSIsCi0gICAgICAiZGV2Ijog
dHJ1ZQotICAgIH0sCi0gICAgInNwcmludGYtanMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjEu
MSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3ByaW50
Zi1qcy8tL3NwcmludGYtanMtMS4xLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1O
cjU0TWdyK1dBSDJ6cVB1ZUxibHFybEE2Z3c9IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwK
LSAgICAic3JpLXRvb2xib3giOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjIuMCIsCi0gICAgICAi
cmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3JpLXRvb2xib3gvLS9zcmkt
dG9vbGJveC0wLjIuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLXAvNmx3LzNsWG1k
YzhjakFiejY3WENrMWcxND0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJzdGFi
bGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjEuNiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0
cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3RhYmxlLy0vc3RhYmxlLTAuMS42LnRneiIsCi0gICAg
ICAiaW50ZWdyaXR5IjogInNoYTEta1E5ZEt1MTdVZ3h1ZDNTWndmTXVFNS9leXhBPSIsCi0gICAg
ICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgInN0YXR1c2VzIjogewotICAgICAgInZlcnNpb24i
OiAiMS4zLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3Jn
L3N0YXR1c2VzLy0vc3RhdHVzZXMtMS4zLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hh
MS0rdlVibnJkS3J2T3pyUFN0WDJHcjhreTN1VDQ9IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAg
fSwKLSAgICAic3RyaW5nX2RlY29kZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjEwLjMxIiwK
LSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zdHJpbmdfZGVj
b2Rlci8tL3N0cmluZ19kZWNvZGVyLTAuMTAuMzEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAi
c2hhMS1ZdUlEdkVGMmJHd295ZnlFTUIyckhGTVErcFE9IiwKLSAgICAgICJkZXYiOiB0cnVlCi0g
ICAgfSwKLSAgICAic3RyaW5nLXRlbXBsYXRlIjogewotICAgICAgInZlcnNpb24iOiAiMC4yLjEi
LAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N0cmluZy10
ZW1wbGF0ZS8tL3N0cmluZy10ZW1wbGF0ZS0wLjIuMS50Z3oiLAotICAgICAgImludGVncml0eSI6
ICJzaGExLVFwTXVXWW8xTFFIOEl1d3paOW5ZVHV4c210MD0iLAotICAgICAgImRldiI6IHRydWUK
LSAgICB9LAotICAgICJzdHJpbmctd2lkdGgiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMiIs
Ci0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3RyaW5nLXdp
ZHRoLy0vc3RyaW5nLXdpZHRoLTEuMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEt
RVl2Zlc0emNVYUtuNXcwaEhnZmlzTG14QjlNPSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAg
ICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImNvZGUtcG9pbnQtYXQiOiAiMS4xLjAiLAotICAgICAg
ICAiaXMtZnVsbHdpZHRoLWNvZGUtcG9pbnQiOiAiMS4wLjAiLAotICAgICAgICAic3RyaXAtYW5z
aSI6ICIzLjAuMSIKLSAgICAgIH0KLSAgICB9LAotICAgICJzdHJpbmdtYXAiOiB7Ci0gICAgICAi
dmVyc2lvbiI6ICIwLjIuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5u
cG1qcy5vcmcvc3RyaW5nbWFwLy0vc3RyaW5nbWFwLTAuMi4yLnRneiIsCi0gICAgICAiaW50ZWdy
aXR5IjogInNoYTEtVld3VGV5V1BsQ3VIZHZXeTcxZ3FvR25YMGJFPSIsCi0gICAgICAiZGV2Ijog
dHJ1ZQotICAgIH0sCi0gICAgInN0cmluZ3NldCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMi4x
IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zdHJpbmdz
ZXQvLS9zdHJpbmdzZXQtMC4yLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS03eVdj
VGpTVFJEZC96UnlSUGRMb1NNbkFRclU9IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAg
ICAic3RyaXAtYW5zaSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMC4xIiwKLSAgICAgICJyZXNv
bHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zdHJpcC1hbnNpLy0vc3RyaXAtYW5z
aS0zLjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLWFqaGZ1SVU5bFMxZjhGME9p
cStVSjQzR1BjOD0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0g
ICAgICAgICJhbnNpLXJlZ2V4IjogIjIuMS4xIgotICAgICAgfQotICAgIH0sCi0gICAgInN0cmlw
LWJvbSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJo
dHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zdHJpcC1ib20vLS9zdHJpcC1ib20tMi4wLjAudGd6
IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1ZaG1vVmhaU0JKSHpWNGk5dnhSSHFaeCthdzQ9
IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiaXMt
dXRmOCI6ICIwLjIuMSIKLSAgICAgIH0KLSAgICB9LAotICAgICJzdHJpcC1lb2YiOiB7Ci0gICAg
ICAidmVyc2lvbiI6ICIxLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3Ry
eS5ucG1qcy5vcmcvc3RyaXAtZW9mLy0vc3RyaXAtZW9mLTEuMC4wLnRneiIsCi0gICAgICAiaW50
ZWdyaXR5IjogInNoYTEtdTBQL1ZaaW02d1hZbTFuODBTbkpnekUyQnI4PSIsCi0gICAgICAiZGV2
IjogdHJ1ZQotICAgIH0sCi0gICAgInN0cmlwLWpzb24tY29tbWVudHMiOiB7Ci0gICAgICAidmVy
c2lvbiI6ICIxLjAuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1q
cy5vcmcvc3RyaXAtanNvbi1jb21tZW50cy8tL3N0cmlwLWpzb24tY29tbWVudHMtMS4wLjQudGd6
IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1IaFg3eXNsOVB1bWI4dGM3VEdWckNDdTYrNUU9
IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAic3R5bGVkX3N0cmluZyI6IHsKLSAg
ICAgICJ2ZXJzaW9uIjogIjAuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lz
dHJ5Lm5wbWpzLm9yZy9zdHlsZWRfc3RyaW5nLy0vc3R5bGVkX3N0cmluZy0wLjAuMS50Z3oiLAot
ICAgICAgImludGVncml0eSI6ICJzaGExLTBpZUN2WUVwVkZtOFR4M3hqRXV0anBUZEVrbz0iLAot
ICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJzdW0tdXAiOiB7Ci0gICAgICAidmVyc2lv
biI6ICIxLjAuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5v
cmcvc3VtLXVwLy0vc3VtLXVwLTEuMC4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEt
SEdZZlpuQlg5anZMZUhXcUZEaThGaVVsRlc0PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAg
ICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImNoYWxrIjogIjEuMS4zIgotICAgICAgfQotICAgIH0s
Ci0gICAgInN1cHBvcnRzLWNvbG9yIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjAiLAotICAg
ICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N1cHBvcnRzLWNvbG9y
Ly0vc3VwcG9ydHMtY29sb3ItMi4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1V
MTBFWE9hMk5qK2tBUmNJUmltWlhwM3pKTWM9IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwK
LSAgICAic3ltbGluay1vci1jb3B5IjogewotICAgICAgInZlcnNpb24iOiAiMS4xLjgiLAotICAg
ICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N5bWxpbmstb3ItY29w
eS8tL3N5bWxpbmstb3ItY29weS0xLjEuOC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGEx
LXlyNWg0QUVNSEFJOEZ6c2w3bEVJczM5TFNxTT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9
LAotICAgICJ0YXAtcGFyc2VyIjogewotICAgICAgInZlcnNpb24iOiAiNS40LjAiLAotICAgICAg
InJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3RhcC1wYXJzZXIvLS90YXAt
cGFyc2VyLTUuNC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1CSXNJYUdxdjd1
VFFnVFcxS0xUTU5QU0VRZjR6RERQZ1lPQlJkZ09mdUIrSkZPTFJCZkV1NmNMYS9Ldk12bXFnZ3Ux
RktYRGZpdGpMd3NxNDgyN1J2QT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVp
cmVzIjogewotICAgICAgICAiZXZlbnRzLXRvLWFycmF5IjogIjEuMS4yIiwKLSAgICAgICAgImpz
LXlhbWwiOiAiMy45LjEiLAotICAgICAgICAicmVhZGFibGUtc3RyZWFtIjogIjIuMy4zIgotICAg
ICAgfSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJyZWFkYWJsZS1zdHJlYW0i
OiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMi4zLjMiLAotICAgICAgICAgICJyZXNvbHZlZCI6
ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZWFkYWJsZS1zdHJlYW0vLS9yZWFkYWJsZS1z
dHJlYW0tMi4zLjMudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1tK3F6emNu
N0tVeEVtZDFnTWJjaEYrWTJlSVViaWVVYXhrV3RwdHlIeXdyWDByRThRRVlxUEMwN1Z1eTRXbTMy
L3hFMTZOY2RCY3RiOFMwWGUvNUllUT09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAg
ICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAg
ICAgICJjb3JlLXV0aWwtaXMiOiAiMS4wLjIiLAotICAgICAgICAgICAgImluaGVyaXRzIjogIjIu
MC4zIiwKLSAgICAgICAgICAgICJpc2FycmF5IjogIjEuMC4wIiwKLSAgICAgICAgICAgICJwcm9j
ZXNzLW5leHRpY2stYXJncyI6ICIxLjAuNyIsCi0gICAgICAgICAgICAic2FmZS1idWZmZXIiOiAi
NS4xLjEiLAotICAgICAgICAgICAgInN0cmluZ19kZWNvZGVyIjogIjEuMC4zIiwKLSAgICAgICAg
ICAgICJ1dGlsLWRlcHJlY2F0ZSI6ICIxLjAuMiIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0g
ICAgICAgICJzdHJpbmdfZGVjb2RlciI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIxLjAuMyIs
Ci0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N0cmlu
Z19kZWNvZGVyLy0vc3RyaW5nX2RlY29kZXItMS4wLjMudGd6IiwKLSAgICAgICAgICAiaW50ZWdy
aXR5IjogInNoYTUxMi00QUg2WjVmek5OQmNIKzZYRE1mQS9CVHQ4N3NreHFKbE8wbEFoM0RrZXI1
elRoY0F4RzZtS3oraUd1MzA4VUtvUFBROERjcXgvNEpodWp6bHRSYStoUT09IiwKLSAgICAgICAg
ICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgICAgICJy
ZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJzYWZlLWJ1ZmZlciI6ICI1LjEuMSIKLSAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJ0ZW1wIjogewotICAgICAgInZl
cnNpb24iOiAiMC44LjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBt
anMub3JnL3RlbXAvLS90ZW1wLTAuOC4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEt
NE1hOFRTYTVBeEpFRU9UKzJCRURBVTM4SDFrPSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAg
ICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIm9zLXRtcGRpciI6ICIxLjAuMiIsCi0gICAgICAgICJy
aW1yYWYiOiAiMi4yLjgiCi0gICAgICB9LAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAg
ICAgInJpbXJhZiI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyLjIuOCIsCi0gICAgICAgICAg
InJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3JpbXJhZi8tL3JpbXJhZi0y
LjIuOC50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS01RG0rS3E3akp6SVpVbk1Q
bWFpU25rL0ZCWUk9IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZQotICAgICAgICB9Ci0gICAgICB9
Ci0gICAgfSwKLSAgICAidGVzdGVtIjogewotICAgICAgInZlcnNpb24iOiAiMS4xOC4xIiwKLSAg
ICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90ZXN0ZW0vLS90ZXN0
ZW0tMS4xOC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtQ01LaWZHVEFBNXpZdGto
M3QvdkVrYklyNFVVPSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsK
LSAgICAgICAgImJhY2tib25lIjogIjEuMy4zIiwKLSAgICAgICAgImJsdWViaXJkIjogIjMuNS4w
IiwKLSAgICAgICAgImNoYXJtIjogIjEuMC4yIiwKLSAgICAgICAgImNvbW1hbmRlciI6ICIyLjEx
LjAiLAotICAgICAgICAiY29uc29saWRhdGUiOiAiMC4xNC41IiwKLSAgICAgICAgImNyb3NzLXNw
YXduIjogIjUuMS4wIiwKLSAgICAgICAgImV4cHJlc3MiOiAiNC4xNS40IiwKLSAgICAgICAgImZp
cmV3b3JtIjogIjAuNy4xIiwKLSAgICAgICAgImdsb2IiOiAiNy4xLjIiLAotICAgICAgICAiaHR0
cC1wcm94eSI6ICIxLjE2LjIiLAotICAgICAgICAianMteWFtbCI6ICIzLjkuMSIsCi0gICAgICAg
ICJsb2Rhc2guYXNzaWduaW4iOiAiNC4yLjAiLAotICAgICAgICAibG9kYXNoLmNsb25lZGVlcCI6
ICI0LjUuMCIsCi0gICAgICAgICJsb2Rhc2guZmluZCI6ICI0LjYuMCIsCi0gICAgICAgICJsb2Rh
c2gudW5pcWJ5IjogIjQuNy4wIiwKLSAgICAgICAgIm1rZGlycCI6ICIwLjUuMSIsCi0gICAgICAg
ICJtdXN0YWNoZSI6ICIyLjMuMCIsCi0gICAgICAgICJub2RlLW5vdGlmaWVyIjogIjUuMS4yIiwK
LSAgICAgICAgIm5wbWxvZyI6ICI0LjEuMiIsCi0gICAgICAgICJwcmludGYiOiAiMC4yLjUiLAot
ICAgICAgICAicmltcmFmIjogIjIuNi4xIiwKLSAgICAgICAgInNvY2tldC5pbyI6ICIxLjYuMCIs
Ci0gICAgICAgICJzcGF3bi1hcmdzIjogIjAuMi4wIiwKLSAgICAgICAgInN0eWxlZF9zdHJpbmci
OiAiMC4wLjEiLAotICAgICAgICAidGFwLXBhcnNlciI6ICI1LjQuMCIsCi0gICAgICAgICJ4bWxk
b20iOiAiMC4xLjI3IgotICAgICAgfSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAg
ICJibHVlYmlyZCI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIzLjUuMCIsCi0gICAgICAgICAg
InJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2JsdWViaXJkLy0vYmx1ZWJp
cmQtMy41LjAudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTEtZVJRZzEvVlI3cUtK
ZEZPb3AzWlQrV1lHMW53PSIsCi0gICAgICAgICAgImRldiI6IHRydWUKLSAgICAgICAgfSwKLSAg
ICAgICAgImdsb2IiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiNy4xLjIiLAotICAgICAgICAg
ICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9nbG9iLy0vZ2xvYi03LjEu
Mi50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU1KVFVnMWtqdUxlUUNKK2Nj
RTRWcGE2a0tWWGtQWUoybU9DUXlVdUtMY0xRc2RyTUNwQlBVaThxVkU2K1l1YUprb3plQTlOdXNU
QXczaExyOFhlNUVRPT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJyZXF1
aXJlcyI6IHsKLSAgICAgICAgICAgICJmcy5yZWFscGF0aCI6ICIxLjAuMCIsCi0gICAgICAgICAg
ICAiaW5mbGlnaHQiOiAiMS4wLjYiLAotICAgICAgICAgICAgImluaGVyaXRzIjogIjIuMC4zIiwK
LSAgICAgICAgICAgICJtaW5pbWF0Y2giOiAiMy4wLjQiLAotICAgICAgICAgICAgIm9uY2UiOiAi
MS40LjAiLAotICAgICAgICAgICAgInBhdGgtaXMtYWJzb2x1dGUiOiAiMS4wLjEiCi0gICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAidGV4dGV4dGVuc2lvbnMiOiB7
Ci0gICAgICAidmVyc2lvbiI6ICIyLjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9y
ZWdpc3RyeS5ucG1qcy5vcmcvdGV4dGV4dGVuc2lvbnMvLS90ZXh0ZXh0ZW5zaW9ucy0yLjEuMC50
Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLUcrRGNLZzNDUk5STDZLQ2E5cWhhKzVQRTI4
TT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJ0aHJvdWdoIjogewotICAgICAg
InZlcnNpb24iOiAiMi4zLjgiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnku
bnBtanMub3JnL3Rocm91Z2gvLS90aHJvdWdoLTIuMy44LnRneiIsCi0gICAgICAiaW50ZWdyaXR5
IjogInNoYTEtRGRUSi82cThOWGxnc2Jja0VWMStEb2FpNGZVPSIsCi0gICAgICAiZGV2IjogdHJ1
ZQotICAgIH0sCi0gICAgInRpbnktbHIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuNSIsCi0g
ICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdGlueS1sci8tL3Rp
bnktbHItMS4wLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVlyeFVTaU1nT1Zo
M1BuQXF0ZEFVUXVVVkVWUm5xY1JDeEozQkhybC9hYVdWMmZwbEtLQjYwb0NsTTBHSDJHaW8yaGNY
dmt4TVV4c0MvdlhaclFlUGxnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWly
ZXMiOiB7Ci0gICAgICAgICJib2R5IjogIjUuMS4wIiwKLSAgICAgICAgImRlYnVnIjogIjIuNi44
IiwKLSAgICAgICAgImZheWUtd2Vic29ja2V0IjogIjAuMTAuMCIsCi0gICAgICAgICJsaXZlcmVs
b2FkLWpzIjogIjIuMi4yIiwKLSAgICAgICAgIm9iamVjdC1hc3NpZ24iOiAiNC4xLjEiLAotICAg
ICAgICAicXMiOiAiNi41LjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAidG1wIjogewotICAgICAg
InZlcnNpb24iOiAiMC4wLjI4IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5
Lm5wbWpzLm9yZy90bXAvLS90bXAtMC4wLjI4LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNo
YTEtRnljMXQvWVU2bnJ6bG1UNmhNOE41T1VWMFNBPSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAg
ICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIm9zLXRtcGRpciI6ICIxLjAuMiIKLSAgICAgIH0K
LSAgICB9LAotICAgICJ0bXBsIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjQiLAotICAgICAg
InJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3RtcGwvLS90bXBsLTEuMC40
LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtSTJRTjE3UXRBRU01RVJRSUlPWFBSQTVT
SGRFPSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgInRvLWFycmF5IjogewotICAg
ICAgInZlcnNpb24iOiAiMC4xLjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0
cnkubnBtanMub3JnL3RvLWFycmF5Ly0vdG8tYXJyYXktMC4xLjQudGd6IiwKLSAgICAgICJpbnRl
Z3JpdHkiOiAic2hhMS1GK2JCSDNQZFR6MTB6YWVrL3pJNDZhMmIrSkE9IiwKLSAgICAgICJkZXYi
OiB0cnVlCi0gICAgfSwKLSAgICAidG8tZmFzdC1wcm9wZXJ0aWVzIjogewotICAgICAgInZlcnNp
b24iOiAiMS4wLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMu
b3JnL3RvLWZhc3QtcHJvcGVydGllcy8tL3RvLWZhc3QtcHJvcGVydGllcy0xLjAuMy50Z3oiLAot
ICAgICAgImludGVncml0eSI6ICJzaGExLXVEVngrazJNSmJndUl4c0c0Nk1GWGVUS0drYz0iLAot
ICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJ0cmVlLXN5bmMiOiB7Ci0gICAgICAidmVy
c2lvbiI6ICIxLjIuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1q
cy5vcmcvdHJlZS1zeW5jLy0vdHJlZS1zeW5jLTEuMi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5
IjogInNoYTEtTFBkcmhZbjFuLzdiV050YU9zZkxBVDBCV0xjPSIsCi0gICAgICAiZGV2IjogdHJ1
ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImRlYnVnIjogIjIuNi44IiwKLSAgICAg
ICAgImZzLXRyZWUtZGlmZiI6ICIwLjUuNiIsCi0gICAgICAgICJta2RpcnAiOiAiMC41LjEiLAot
ICAgICAgICAicXVpY2stdGVtcCI6ICIwLjEuOCIsCi0gICAgICAgICJ3YWxrLXN5bmMiOiAiMC4y
LjciCi0gICAgICB9LAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIndhbGstc3lu
YyI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIwLjIuNyIsCi0gICAgICAgICAgInJlc29sdmVk
IjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3dhbGstc3luYy8tL3dhbGstc3luYy0wLjIu
Ny50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS10SnZrN21oblpYcnJjMmw0dFdv
cDBRK2ptV2s9IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMi
OiB7Ci0gICAgICAgICAgICAiZW5zdXJlLXBvc2l4LXBhdGgiOiAiMS4wLjIiLAotICAgICAgICAg
ICAgIm1hdGNoZXItY29sbGVjdGlvbiI6ICIxLjAuNCIKLSAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICAgIH0KLSAgICB9LAotICAgICJ0cmltLXJpZ2h0IjogewotICAgICAgInZlcnNpb24iOiAi
MS4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Ry
aW0tcmlnaHQvLS90cmltLXJpZ2h0LTEuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNo
YTEteXk0U0F3WitESTNoOWhRSlM1L2tWd1RxWUFNPSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAg
IH0sCi0gICAgInRyeS1yZXNvbHZlIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjEiLAotICAg
ICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3RyeS1yZXNvbHZlLy0v
dHJ5LXJlc29sdmUtMS4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS16OTV2cTlj
dFkrVjVmUHFyaHpxNzZPY0E2Ukk9IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAi
dHJ5b3IiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjEuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAi
aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdHJ5b3IvLS90cnlvci0wLjEuMi50Z3oiLAotICAg
ICAgImludGVncml0eSI6ICJzaGExLWdVWGt5bnl2OUFyTjQ4ejVSdWk0dTNXMEZ5cz0iLAotICAg
ICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJ0eXBlLWlzIjogewotICAgICAgInZlcnNpb24i
OiAiMS42LjE1IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9y
Zy90eXBlLWlzLy0vdHlwZS1pcy0xLjYuMTUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hh
MS15ckVQdEpDZVJCeUNoQzZ2NGExa2JJR0FSQkE9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAg
ICAgInJlcXVpcmVzIjogewotICAgICAgICAibWVkaWEtdHlwZXIiOiAiMC4zLjAiLAotICAgICAg
ICAibWltZS10eXBlcyI6ICIyLjEuMTYiCi0gICAgICB9Ci0gICAgfSwKLSAgICAidHlwZWRhcnJh
eSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMC42IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRw
czovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90eXBlZGFycmF5Ly0vdHlwZWRhcnJheS0wLjAuNi50Z3oi
LAotICAgICAgImludGVncml0eSI6ICJzaGExLWhuckhUamhrR0hzZFBVZlpscWVPeGNpREIzYz0i
LAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJ1Yy5taWNybyI6IHsKLSAgICAgICJ2
ZXJzaW9uIjogIjEuMC4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5w
bWpzLm9yZy91Yy5taWNyby8tL3VjLm1pY3JvLTEuMC4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5
IjogInNoYTEtZnRVTlhnK2FuN0NsY3plU1dmS25kRmpWQVpJPSIsCi0gICAgICAiZGV2IjogdHJ1
ZQotICAgIH0sCi0gICAgInVnbGlmeS1qcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuOC4yOSIs
Ci0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdWdsaWZ5LWpz
Ly0vdWdsaWZ5LWpzLTIuOC4yOS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLUtjVnpN
VWdGZTdUaDkxM3pXM3FjdHk1cVdkMD0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVx
dWlyZXMiOiB7Ci0gICAgICAgICJzb3VyY2UtbWFwIjogIjAuNS42IiwKLSAgICAgICAgInVnbGlm
eS10by1icm93c2VyaWZ5IjogIjEuMC4yIiwKLSAgICAgICAgInlhcmdzIjogIjMuMTAuMCIKLSAg
ICAgIH0sCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAid2luZG93LXNpemUiOiB7
Ci0gICAgICAgICAgInZlcnNpb24iOiAiMC4xLjAiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJo
dHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy93aW5kb3ctc2l6ZS8tL3dpbmRvdy1zaXplLTAuMS4w
LnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGExLVZEak5McWs3SUM3Nk9obitpSWV1
NThsUG5KMD0iLAotICAgICAgICAgICJkZXYiOiB0cnVlCi0gICAgICAgIH0sCi0gICAgICAgICJ5
YXJncyI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIzLjEwLjAiLAotICAgICAgICAgICJyZXNv
bHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy95YXJncy8tL3lhcmdzLTMuMTAuMC50
Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS05KzU3MkZmZGZCMHRPTURuVHZ2V2dk
RkRIOUU9IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7
Ci0gICAgICAgICAgICAiY2FtZWxjYXNlIjogIjEuMi4xIiwKLSAgICAgICAgICAgICJjbGl1aSI6
ICIyLjEuMCIsCi0gICAgICAgICAgICAiZGVjYW1lbGl6ZSI6ICIxLjIuMCIsCi0gICAgICAgICAg
ICAid2luZG93LXNpemUiOiAiMC4xLjAiCi0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9
Ci0gICAgfSwKLSAgICAidWdsaWZ5LXRvLWJyb3dzZXJpZnkiOiB7Ci0gICAgICAidmVyc2lvbiI6
ICIxLjAuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcv
dWdsaWZ5LXRvLWJyb3dzZXJpZnkvLS91Z2xpZnktdG8tYnJvd3NlcmlmeS0xLjAuMi50Z3oiLAot
ICAgICAgImludGVncml0eSI6ICJzaGExLWJna2sxcjJtdGEvalNlT2FiV01vVUtENGdyYz0iLAot
ICAgICAgImRldiI6IHRydWUsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlCi0gICAgfSwKLSAgICAi
dWx0cm9uIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjIiLAotICAgICAgInJlc29sdmVkIjog
Imh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3VsdHJvbi8tL3VsdHJvbi0xLjAuMi50Z3oiLAot
ICAgICAgImludGVncml0eSI6ICJzaGExLXJPRVdxMVY4MFpjNGFrNkk5R2hUZU1peTVQbz0iLAot
ICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJ1bmRlcnNjb3JlIjogewotICAgICAgInZl
cnNpb24iOiAiMS44LjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBt
anMub3JnL3VuZGVyc2NvcmUvLS91bmRlcnNjb3JlLTEuOC4zLnRneiIsCi0gICAgICAiaW50ZWdy
aXR5IjogInNoYTEtVHorMU94QnVZSmY4K2N0QkNmS2w2YjM2VUNJPSIsCi0gICAgICAiZGV2Ijog
dHJ1ZQotICAgIH0sCi0gICAgInVuZGVyc2NvcmUuc3RyaW5nIjogewotICAgICAgInZlcnNpb24i
OiAiMy4zLjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3Jn
L3VuZGVyc2NvcmUuc3RyaW5nLy0vdW5kZXJzY29yZS5zdHJpbmctMy4zLjQudGd6IiwKLSAgICAg
ICJpbnRlZ3JpdHkiOiAic2hhMS1MQ28vbjRQbVIyTDl4RjVzNnNaUlFvWkNFOXM9IiwKLSAgICAg
ICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAic3ByaW50Zi1qcyI6
ICIxLjEuMSIsCi0gICAgICAgICJ1dGlsLWRlcHJlY2F0ZSI6ICIxLjAuMiIKLSAgICAgIH0KLSAg
ICB9LAotICAgICJ1bmlxdWUtc3RyaW5nIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjAiLAot
ICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3VuaXF1ZS1zdHJp
bmcvLS91bmlxdWUtc3RyaW5nLTEuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEt
bmhCWHpLaFJxN2t6bVBpek91R0h1Wnl1d1JvPSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAg
ICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImNyeXB0by1yYW5kb20tc3RyaW5nIjogIjEuMC4wIgot
ICAgICAgfQotICAgIH0sCi0gICAgInVuaXZlcnNhbGlmeSI6IHsKLSAgICAgICJ2ZXJzaW9uIjog
IjAuMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy91
bml2ZXJzYWxpZnkvLS91bml2ZXJzYWxpZnktMC4xLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHki
OiAic2hhMS0rbkc2M1VRM3Iwd1VpRUhqczdGbCtlbmxrTGM9IiwKLSAgICAgICJkZXYiOiB0cnVl
Ci0gICAgfSwKLSAgICAidW5waXBlIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjAiLAotICAg
ICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3VucGlwZS8tL3VucGlw
ZS0xLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLXNyOU82RkZLcm1GbHRJRjRL
ZEliTHZTWkJPdz0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJ1bnRpbGRpZnki
OiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6
Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdW50aWxkaWZ5Ly0vdW50aWxkaWZ5LTIuMS4wLnRneiIsCi0g
ICAgICAiaW50ZWdyaXR5IjogInNoYTEtRitzb0I1aC9kcFV1bkFTRi9ERWRCcWdtb3VBPSIsCi0g
ICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIm9zLWhvbWVk
aXIiOiAiMS4wLjIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAidXNlci1ob21lIjogewotICAgICAg
InZlcnNpb24iOiAiMS4xLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnku
bnBtanMub3JnL3VzZXItaG9tZS8tL3VzZXItaG9tZS0xLjEuMS50Z3oiLAotICAgICAgImludGVn
cml0eSI6ICJzaGExLUsxdmlPaksyT255ZDY0MFBLTlNGY2tvOThaQT0iLAotICAgICAgImRldiI6
IHRydWUKLSAgICB9LAotICAgICJ1c2VybmFtZS1zeW5jIjogewotICAgICAgInZlcnNpb24iOiAi
MS4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Vz
ZXJuYW1lLXN5bmMvLS91c2VybmFtZS1zeW5jLTEuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5
IjogInNoYTEtSE42SDd2ejVTNGdpbUUyVGk2SzNsMEp0cmg4PSIsCi0gICAgICAiZGV2IjogdHJ1
ZQotICAgIH0sCi0gICAgInV0aWwtZGVwcmVjYXRlIjogewotICAgICAgInZlcnNpb24iOiAiMS4w
LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3V0aWwt
ZGVwcmVjYXRlLy0vdXRpbC1kZXByZWNhdGUtMS4wLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHki
OiAic2hhMS1SUTFOeWZwdzNuTW5ZdnZTMUtLSmdVR2FETTg9IiwKLSAgICAgICJkZXYiOiB0cnVl
Ci0gICAgfSwKLSAgICAidXRpbHMtbWVyZ2UiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMCIs
Ci0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdXRpbHMtbWVy
Z2UvLS91dGlscy1tZXJnZS0xLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLUFw
VDdraXU1TjFGVFZCeFBjSllqSHloOGl2Zz0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAot
ICAgICJ1dWlkIjogewotICAgICAgInZlcnNpb24iOiAiMy4xLjAiLAotICAgICAgInJlc29sdmVk
IjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3V1aWQvLS91dWlkLTMuMS4wLnRneiIsCi0g
ICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ESVd0elVrdzA0TTRrM2JmMUljcFMydG5nWEVMMjZZ
VUQyTTB0TURVcG5VcnoyaGd6VUJsRDU1YTRGamRMR1B2Zkh4UzZ1bHVHV3ZhVkVxZ0JjVmErZz09
IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAidmFsaWRhdGUtbnBtLXBhY2thZ2Ut
bmFtZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJo
dHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy92YWxpZGF0ZS1ucG0tcGFja2FnZS1uYW1lLy0vdmFs
aWRhdGUtbnBtLXBhY2thZ2UtbmFtZS0zLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJz
aGExLVg2a1MyQjYzME1kSy9CUU41ekYvREtmZlEzND0iLAotICAgICAgImRldiI6IHRydWUsCi0g
ICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJidWlsdGlucyI6ICIxLjAuMyIKLSAgICAgIH0K
LSAgICB9LAotICAgICJ2YXJ5IjogewotICAgICAgInZlcnNpb24iOiAiMS4xLjEiLAotICAgICAg
InJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3ZhcnkvLS92YXJ5LTEuMS4x
LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtWjFOZXUybE1IVklsZEZlWVJtVXlQMWgr
alRjPSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgIndhbGstc3luYyI6IHsKLSAg
ICAgICJ2ZXJzaW9uIjogIjAuMy4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lz
dHJ5Lm5wbWpzLm9yZy93YWxrLXN5bmMvLS93YWxrLXN5bmMtMC4zLjIudGd6IiwKLSAgICAgICJp
bnRlZ3JpdHkiOiAic2hhNTEyLUZNQjVWcXBMcU9DY3FyekE5b2taRmMwd3EwUWJtZG0zOTZxSnh2
UVpoRHB5dTBXOTVHOUpDbXA3NHR4N2l5WW55T2NCdFV1S0pzZ0lLQXFqb3p2bW1RPT0iLAotICAg
ICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJlbnN1cmUtcG9z
aXgtcGF0aCI6ICIxLjAuMiIsCi0gICAgICAgICJtYXRjaGVyLWNvbGxlY3Rpb24iOiAiMS4wLjQi
Ci0gICAgICB9Ci0gICAgfSwKLSAgICAid2Fsa2VyIjogewotICAgICAgInZlcnNpb24iOiAiMS4w
LjciLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3dhbGtl
ci8tL3dhbGtlci0xLjAuNy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLUwzK2JqOUVO
WjNKaXNZcUlUaWpSbGhqZ0tQcz0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWly
ZXMiOiB7Ci0gICAgICAgICJtYWtlZXJyb3IiOiAiMS4wLjExIgotICAgICAgfQotICAgIH0sCi0g
ICAgIndhdGNoIjogewotICAgICAgInZlcnNpb24iOiAiMC4xMC4wIiwKLSAgICAgICJyZXNvbHZl
ZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy93YXRjaC8tL3dhdGNoLTAuMTAuMC50Z3oi
LAotICAgICAgImludGVncml0eSI6ICJzaGExLWQzbUxMYUQ1a1ExWlh4ck9Xd3dpV0ZJZklkdz0i
LAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJ3ZWJzb2NrZXQtZHJpdmVyIjogewot
ICAgICAgInZlcnNpb24iOiAiMC42LjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVn
aXN0cnkubnBtanMub3JnL3dlYnNvY2tldC1kcml2ZXIvLS93ZWJzb2NrZXQtZHJpdmVyLTAuNi41
LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtWExKVmJPdUY5RGM4YllJNHFta2NoRlRo
T2pZPSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAg
IndlYnNvY2tldC1leHRlbnNpb25zIjogIjAuMS4xIgotICAgICAgfQotICAgIH0sCi0gICAgIndl
YnNvY2tldC1leHRlbnNpb25zIjogewotICAgICAgInZlcnNpb24iOiAiMC4xLjEiLAotICAgICAg
InJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3dlYnNvY2tldC1leHRlbnNp
b25zLy0vd2Vic29ja2V0LWV4dGVuc2lvbnMtMC4xLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHki
OiAic2hhMS1kb21VbWNHRXR1OTFRM2ZDMjdETmJMVmRLZWM9IiwKLSAgICAgICJkZXYiOiB0cnVl
Ci0gICAgfSwKLSAgICAid2hpY2giOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjMuMCIsCi0gICAg
ICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd2hpY2gvLS93aGljaC0x
LjMuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTIteGNKcG9wZGFtVHVZNWR1Qy9L
blRUTkJyYVBLNTRZd3BlblA0bHp4VThIOTFHdWRXcEZ2Mzh1MENLamNsRTFXaTJFSDJFRHo1TFJj
SGNLYkNJenFHeWc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsK
LSAgICAgICAgImlzZXhlIjogIjIuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIndpZGUtYWxp
Z24iOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjEuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0
cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd2lkZS1hbGlnbi8tL3dpZGUtYWxpZ24tMS4xLjIudGd6
IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWlqRExseVE3czZ4MUpnQ0x1cjUzb3NqbS9V
WFVZRDkrMFBiWUtyQnNZaXNZWHpDeE4rSEMzbVlETnkvZFdkbWYzQXdxd1UzQ1h3REN2c05nR0sx
UzB3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAg
ICJzdHJpbmctd2lkdGgiOiAiMS4wLjIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAid2luZG93LXNp
emUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjEuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0
cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd2luZG93LXNpemUvLS93aW5kb3ctc2l6ZS0wLjEuNC50
Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLStPR3FIdVdsUHNXL0ZSLzZDWFFxYXRkcGVI
WT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJ3b3Jkd3JhcCI6IHsKLSAgICAg
ICJ2ZXJzaW9uIjogIjAuMC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5
Lm5wbWpzLm9yZy93b3Jkd3JhcC8tL3dvcmR3cmFwLTAuMC4yLnRneiIsCi0gICAgICAiaW50ZWdy
aXR5IjogInNoYTEtdDVacHUwTHN0QW40UFZnOHJWTEtGK3FoWkQ4PSIsCi0gICAgICAiZGV2Ijog
dHJ1ZQotICAgIH0sCi0gICAgIndvcmtlcnBvb2wiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjIu
MiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd29ya2Vy
cG9vbC8tL3dvcmtlcnBvb2wtMi4yLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1I
UFU3cksvWmpLWFlDUDlVekhMei9zdGVIVlk9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAg
InJlcXVpcmVzIjogewotICAgICAgICAib2JqZWN0LWFzc2lnbiI6ICI0LjEuMSIKLSAgICAgIH0K
LSAgICB9LAotICAgICJ3cmFwcHkiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMiIsCi0gICAg
ICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd3JhcHB5Ly0vd3JhcHB5
LTEuMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtdFNROWp6N0Jxalh4TmtZRnZB
MFFOdU1LdHA4PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgIndyaXRlLWZpbGUt
YXRvbWljIjogewotICAgICAgInZlcnNpb24iOiAiMi4xLjAiLAotICAgICAgInJlc29sdmVkIjog
Imh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3dyaXRlLWZpbGUtYXRvbWljLy0vd3JpdGUtZmls
ZS1hdG9taWMtMi4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTBUWjIwYSt4
Y0lsNHUwK01qNXhESDJ5T1dkbVFpWGxLZjlIbStUZ0RYalRNc0VZYitnRHJtYjhlOFVOQXpNQ2l0
WDhOQnFHNFovRlVRSXl6di9SMUpRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVx
dWlyZXMiOiB7Ci0gICAgICAgICJncmFjZWZ1bC1mcyI6ICI0LjEuMTEiLAotICAgICAgICAiaW11
cm11cmhhc2giOiAiMC4xLjQiLAotICAgICAgICAic2xpZGUiOiAiMS4xLjYiCi0gICAgICB9Ci0g
ICAgfSwKLSAgICAid3MiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjEuMSIsCi0gICAgICAicmVz
b2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd3MvLS93cy0xLjEuMS50Z3oiLAot
ICAgICAgImludGVncml0eSI6ICJzaGExLUNDM2JiR1FlaGRTN1JSOEQxUzhHNnIyeDhCZz0iLAot
ICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJvcHRpb25z
IjogIjAuMC42IiwKLSAgICAgICAgInVsdHJvbiI6ICIxLjAuMiIKLSAgICAgIH0KLSAgICB9LAot
ICAgICJ3dGYtOCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4wIiwKLSAgICAgICJyZXNvbHZl
ZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy93dGYtOC8tL3d0Zi04LTEuMC4wLnRneiIs
Ci0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtT1MyTG90RHh3MDBlNHRZdzhWME8rMmpoQklvPSIs
Ci0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgInhkZy1iYXNlZGlyIjogewotICAgICAg
InZlcnNpb24iOiAiMy4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnku
bnBtanMub3JnL3hkZy1iYXNlZGlyLy0veGRnLWJhc2VkaXItMy4wLjAudGd6IiwKLSAgICAgICJp
bnRlZ3JpdHkiOiAic2hhMS1TV3Nzd1Fuc3FOdXMvaTNISzJBOEY4V0hDdFE9IiwKLSAgICAgICJk
ZXYiOiB0cnVlCi0gICAgfSwKLSAgICAieG1sZG9tIjogewotICAgICAgInZlcnNpb24iOiAiMC4x
LjI3IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy94bWxk
b20vLS94bWxkb20tMC4xLjI3LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtMVFINWV6
dmJRRHI0NzU3TUlGY3hoNnJhd09rPSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAg
InhtbGh0dHByZXF1ZXN0LXNzbCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuNS4zIiwKLSAgICAg
ICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy94bWxodHRwcmVxdWVzdC1z
c2wvLS94bWxodHRwcmVxdWVzdC1zc2wtMS41LjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAi
c2hhMS1HRnFJakFUc3BHdytRSERabjN0SjNqVW9tUzA9IiwKLSAgICAgICJkZXYiOiB0cnVlCi0g
ICAgfSwKLSAgICAieHRlbmQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjAuMSIsCi0gICAgICAi
cmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcveHRlbmQvLS94dGVuZC00LjAu
MS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLXBjYlZNcjVsYmlQYmdnNzdsRG9mQkpt
Tlk2OD0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJ5MThuIjogewotICAgICAg
InZlcnNpb24iOiAiMy4yLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnku
bnBtanMub3JnL3kxOG4vLS95MThuLTMuMi4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNo
YTEtYlJYN3FJVEFobm5BMTM2STUzV2VnUjRIK2tFPSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAg
IH0sCi0gICAgInlhbGxpc3QiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjEuMiIsCi0gICAgICAi
cmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcveWFsbGlzdC8tL3lhbGxpc3Qt
Mi4xLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1IQkg1SVk4SFlJbWtmZFVTK1R4
bW1hYW9IVkk9IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAieWFtIjogewotICAg
ICAgInZlcnNpb24iOiAiMC4wLjIyIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lz
dHJ5Lm5wbWpzLm9yZy95YW0vLS95YW0tMC4wLjIyLnRneiIsCi0gICAgICAiaW50ZWdyaXR5Ijog
InNoYTEtT0tkc3Q1b1pLRTJTQnUxSkF4NDFtaE5BdlFZPSIsCi0gICAgICAiZGV2IjogdHJ1ZSwK
LSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImZzLWV4dHJhIjogIjAuMzAuMCIsCi0gICAg
ICAgICJsb2Rhc2gubWVyZ2UiOiAiNC42LjAiCi0gICAgICB9LAotICAgICAgImRlcGVuZGVuY2ll
cyI6IHsKLSAgICAgICAgImZzLWV4dHJhIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjAuMzAu
MCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Zz
LWV4dHJhLy0vZnMtZXh0cmEtMC4zMC4wLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJz
aGExLThqUC96QWpVMm4xRExhcEVsM2FZbmJIZmsvQT0iLAotICAgICAgICAgICJkZXYiOiB0cnVl
LAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJncmFjZWZ1bC1mcyI6ICI0
LjEuMTEiLAotICAgICAgICAgICAgImpzb25maWxlIjogIjIuNC4wIiwKLSAgICAgICAgICAgICJr
bGF3IjogIjEuMy4xIiwKLSAgICAgICAgICAgICJwYXRoLWlzLWFic29sdXRlIjogIjEuMC4xIiwK
LSAgICAgICAgICAgICJyaW1yYWYiOiAiMi42LjEiCi0gICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgICB9Ci0gICAgfSwKLSAgICAieWFyZ3MiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjI3LjAi
LAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3lhcmdzLy0v
eWFyZ3MtMy4yNy4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtSVNCVWFURnVrNUV4
MVo4dG9NYlgrWUloNmtBPSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6
IHsKLSAgICAgICAgImNhbWVsY2FzZSI6ICIxLjIuMSIsCi0gICAgICAgICJjbGl1aSI6ICIyLjEu
MCIsCi0gICAgICAgICJkZWNhbWVsaXplIjogIjEuMi4wIiwKLSAgICAgICAgIm9zLWxvY2FsZSI6
ICIxLjQuMCIsCi0gICAgICAgICJ3aW5kb3ctc2l6ZSI6ICIwLjEuNCIsCi0gICAgICAgICJ5MThu
IjogIjMuMi4xIgotICAgICAgfQotICAgIH0sCi0gICAgInllYXN0IjogewotICAgICAgInZlcnNp
b24iOiAiMC4xLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMu
b3JnL3llYXN0Ly0veWVhc3QtMC4xLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1B
STRHMkFsRElNTnkyOEw0N1hhZ3lteUt4Qms9IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfQot
ICB9Ci19CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNl
cy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL3NvdXJjZS9wYWNrYWdlLmpz
b24gYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hp
dGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL3NvdXJjZS9wYWNrYWdlLmpzb24KZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDFmODA4MDI5NDliZjQ2NjdkNzVhMmM5Y2ZlNDBiZmNjZmU3ZDBh
NDUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9y
bWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhh
bXBsZXMvZW1iZXJqcy9zb3VyY2UvcGFja2FnZS5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsNDMg
KzAsMCBAQAotewotICAibmFtZSI6ICJ0b2RvbXZjIiwKLSAgInZlcnNpb24iOiAiMC4wLjAiLAot
ICAiZGVzY3JpcHRpb24iOiAiU21hbGwgZGVzY3JpcHRpb24gZm9yIHRvZG9tdmMgZ29lcyBoZXJl
IiwKLSAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgImF1dGhvciI6ICJNaWd1ZWwgQ2FtYmEiLAotICAi
ZGlyZWN0b3JpZXMiOiB7Ci0gICAgImRvYyI6ICJkb2MiLAotICAgICJ0ZXN0IjogInRlc3RzIgot
ICB9LAotICAicmVwb3NpdG9yeSI6ICIiLAotICAic2NyaXB0cyI6IHsKLSAgICAiYnVpbGQiOiAi
ZW1iZXIgYnVpbGQgLS1lbnZpcm9ubWVudD1wcm9kdWN0aW9uIiwKLSAgICAic3RhcnQiOiAiZW1i
ZXIgc2VydmVyIiwKLSAgICAidGVzdCI6ICJlbWJlciB0ZXN0IgotICB9LAotICAiZGV2RGVwZW5k
ZW5jaWVzIjogewotICAgICJicm9jY29saS1hc3NldC1yZXYiOiAiXjIuNC41IiwKLSAgICAiZW1i
ZXItYWpheCI6ICJeMi40LjEiLAotICAgICJlbWJlci1jbGkiOiAiXjIuMTQuMiIsCi0gICAgImVt
YmVyLWNsaS1hcHAtdmVyc2lvbiI6ICJeMi4wLjAiLAotICAgICJlbWJlci1jbGktYmFiZWwiOiAi
XjUuMS43IiwKLSAgICAiZW1iZXItY2xpLWRlcGVuZGVuY3ktY2hlY2tlciI6ICJeMS4zLjAiLAot
ICAgICJlbWJlci1jbGktaHRtbGJhcnMiOiAiXjEuMC4xMCIsCi0gICAgImVtYmVyLWNsaS1odG1s
YmFycy1pbmxpbmUtcHJlY29tcGlsZSI6ICJeMC4zLjMiLAotICAgICJlbWJlci1jbGktaW5qZWN0
LWxpdmUtcmVsb2FkIjogIl4xLjQuMSIsCi0gICAgImVtYmVyLWNsaS1qc2hpbnQiOiAiXjIuMC4x
IiwKLSAgICAiZW1iZXItY2xpLXF1bml0IjogIl4zLjAuMSIsCi0gICAgImVtYmVyLWNsaS1yZWxl
YXNlIjogIl4wLjIuOSIsCi0gICAgImVtYmVyLWNsaS1zcmkiOiAiXjIuMS4wIiwKLSAgICAiZW1i
ZXItY2xpLXRlc3QtbG9hZGVyIjogIl4xLjEuMCIsCi0gICAgImVtYmVyLWNsaS11Z2xpZnkiOiAi
XjEuMi4wIiwKLSAgICAiZW1iZXItZXhwb3J0LWFwcGxpY2F0aW9uLWdsb2JhbCI6ICJeMS4wLjUi
LAotICAgICJlbWJlci1pbmZsZWN0b3IiOiAiMS45LjYiLAotICAgICJlbWJlci1sb2FkLWluaXRp
YWxpemVycyI6ICJeMC41LjEiLAotICAgICJlbWJlci1yZXNvbHZlciI6ICJeMi4wLjMiLAotICAg
ICJsb2FkZXIuanMiOiAiXjQuMC4xMCIKLSAgfSwKLSAgImVuZ2luZXMiOiB7Ci0gICAgIm5vZGUi
OiAiPj0gMC4xMi4wIgotICB9LAotICAicHJpdmF0ZSI6IHRydWUKLX0KZGlmZiAtLWdpdCBhL1Bl
cmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJl
LWV4YW1wbGVzL2VtYmVyanMvc291cmNlL3B1YmxpYy9jcm9zc2RvbWFpbi54bWwgYi9QZXJmb3Jt
YW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFt
cGxlcy9lbWJlcmpzL3NvdXJjZS9wdWJsaWMvY3Jvc3Nkb21haW4ueG1sCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwYzE2YTdhMDdiMzdlNWQ1ZjdlMGU1NmM4MjlmNzIwMDY3NDU4NDAz
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1h
bmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1w
bGVzL2VtYmVyanMvc291cmNlL3B1YmxpYy9jcm9zc2RvbWFpbi54bWwKKysrIC9kZXYvbnVsbApA
QCAtMSwxNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLTwhRE9DVFlQRSBjcm9zcy1k
b21haW4tcG9saWN5IFNZU1RFTSAiaHR0cDovL3d3dy5hZG9iZS5jb20veG1sL2R0ZHMvY3Jvc3Mt
ZG9tYWluLXBvbGljeS5kdGQiPgotPGNyb3NzLWRvbWFpbi1wb2xpY3k+Ci0gIDwhLS0gUmVhZCB0
aGlzOiB3d3cuYWRvYmUuY29tL2Rldm5ldC9hcnRpY2xlcy9jcm9zc2RvbWFpbl9wb2xpY3lfZmls
ZV9zcGVjLmh0bWwgLS0+Ci0KLSAgPCEtLSBNb3N0IHJlc3RyaWN0aXZlIHBvbGljeTogLS0+Ci0g
IDxzaXRlLWNvbnRyb2wgcGVybWl0dGVkLWNyb3NzLWRvbWFpbi1wb2xpY2llcz0ibm9uZSIvPgot
Ci0gIDwhLS0gTGVhc3QgcmVzdHJpY3RpdmUgcG9saWN5OiAtLT4KLSAgPCEtLQotICA8c2l0ZS1j
b250cm9sIHBlcm1pdHRlZC1jcm9zcy1kb21haW4tcG9saWNpZXM9ImFsbCIvPgotICA8YWxsb3ct
YWNjZXNzLWZyb20gZG9tYWluPSIqIiB0by1wb3J0cz0iKiIgc2VjdXJlPSJmYWxzZSIvPgotICA8
YWxsb3ctaHR0cC1yZXF1ZXN0LWhlYWRlcnMtZnJvbSBkb21haW49IioiIGhlYWRlcnM9IioiIHNl
Y3VyZT0iZmFsc2UiLz4KLSAgLS0+Ci08L2Nyb3NzLWRvbWFpbi1wb2xpY3k+CmRpZmYgLS1naXQg
YS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVj
dHVyZS1leGFtcGxlcy9lbWJlcmpzL3NvdXJjZS9wdWJsaWMvcm9ib3RzLnR4dCBiL1BlcmZvcm1h
bmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1w
bGVzL2VtYmVyanMvc291cmNlL3B1YmxpYy9yb2JvdHMudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBmNTkxNjQ1MmU1ZmY2YzhiNDNkNmQ3YzczZDAwMTUzZDM0YWMzNWRlLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1BlcmZvcm1hbmNlVGVz
dHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2Vt
YmVyanMvc291cmNlL3B1YmxpYy9yb2JvdHMudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMyArMCww
IEBACi0jIGh0dHA6Ly93d3cucm9ib3RzdHh0Lm9yZwotVXNlci1hZ2VudDogKgotRGlzYWxsb3c6
CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2Rv
bXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL3NvdXJjZS90ZXN0ZW0uanMgYi9QZXJm
b3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1l
eGFtcGxlcy9lbWJlcmpzL3NvdXJjZS90ZXN0ZW0uanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGRlMTQyZWUxMDRmZTZjNjFhNmQyYWI5YTc1NTQwNTM3NGQwODIyYjUuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9T
cGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJq
cy9zb3VyY2UvdGVzdGVtLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotLypqc2hp
bnQgbm9kZTp0cnVlKi8KLW1vZHVsZS5leHBvcnRzID0gewotICAgIGZyYW1ld29yazogJ3F1bml0
JywKLSAgICB0ZXN0X3BhZ2U6ICd0ZXN0cy9pbmRleC5odG1sP2hpZGVwYXNzZWQnLAotICAgIGRp
c2FibGVfd2F0Y2hpbmc6IHRydWUsCi0gICAgbGF1bmNoX2luX2NpOiBbCi0gICAgICAgICdQaGFu
dG9tSlMnCi0gICAgXSwKLSAgICBsYXVuY2hfaW5fZGV2OiBbCi0gICAgICAgICdQaGFudG9tSlMn
LAotICAgICAgICAnQ2hyb21lJwotICAgIF0KLX07CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRl
c3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9l
bWJlcmpzL3NvdXJjZS90ZXN0cy9oZWxwZXJzL2Rlc3Ryb3ktYXBwLmpzIGIvUGVyZm9ybWFuY2VU
ZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMv
ZW1iZXJqcy9zb3VyY2UvdGVzdHMvaGVscGVycy9kZXN0cm95LWFwcC5qcwpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMTNkNDk4OTUwMTJkOTZhMjljYTVhYzdjNjFkYWRhZmFhOWIzY2E0
NS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3Jt
YW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFt
cGxlcy9lbWJlcmpzL3NvdXJjZS90ZXN0cy9oZWxwZXJzL2Rlc3Ryb3ktYXBwLmpzCisrKyAvZGV2
L251bGwKQEAgLTEsNSArMCwwIEBACi1pbXBvcnQgRW1iZXIgZnJvbSAnZW1iZXInOwotCi1leHBv
cnQgZGVmYXVsdCBmdW5jdGlvbiBkZXN0cm95QXBwKGFwcGxpY2F0aW9uKSB7Ci0gICAgRW1iZXIu
cnVuKGFwcGxpY2F0aW9uLCAnZGVzdHJveScpOwotfQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VU
ZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMv
ZW1iZXJqcy9zb3VyY2UvdGVzdHMvaGVscGVycy9tb2R1bGUtZm9yLWFjY2VwdGFuY2UuanMgYi9Q
ZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVy
ZS1leGFtcGxlcy9lbWJlcmpzL3NvdXJjZS90ZXN0cy9oZWxwZXJzL21vZHVsZS1mb3ItYWNjZXB0
YW5jZS5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmZiZTEzNTAwZWIwOTc1Zjcz
ZTlkY2MxMzU2NDI4NzJkZDk0YTYyOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2Rv
bXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL3NvdXJjZS90ZXN0cy9oZWxwZXJzL21v
ZHVsZS1mb3ItYWNjZXB0YW5jZS5qcworKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLWlt
cG9ydCB7IG1vZHVsZSB9IGZyb20gJ3F1bml0JzsKLWltcG9ydCBFbWJlciBmcm9tICdlbWJlcic7
Ci1pbXBvcnQgc3RhcnRBcHAgZnJvbSAnLi4vaGVscGVycy9zdGFydC1hcHAnOwotaW1wb3J0IGRl
c3Ryb3lBcHAgZnJvbSAnLi4vaGVscGVycy9kZXN0cm95LWFwcCc7Ci0KLWNvbnN0IHsgUlNWUDog
eyBQcm9taXNlIH0gfSA9IEVtYmVyOwotCi1leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAobmFtZSwg
b3B0aW9ucyA9IHt9KSB7Ci0gICAgbW9kdWxlKG5hbWUsIHsKLSAgICAgICAgYmVmb3JlRWFjaCgp
IHsKLSAgICAgICAgICAgIHRoaXMuYXBwbGljYXRpb24gPSBzdGFydEFwcCgpOwotCi0gICAgICAg
ICAgICBpZiAob3B0aW9ucy5iZWZvcmVFYWNoKSB7Ci0gICAgICAgICAgICAgICAgb3B0aW9ucy5i
ZWZvcmVFYWNoLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0sCi0KLSAgICAgICAgYWZ0ZXJFYWNoKCkgewotICAgICAgICAgICAgbGV0IGFmdGVyRWFjaCA9
IG9wdGlvbnMuYWZ0ZXJFYWNoICYmIG9wdGlvbnMuYWZ0ZXJFYWNoLmFwcGx5KHRoaXMsIGFyZ3Vt
ZW50cyk7Ci0gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGFmdGVyRWFjaCkudGhl
bigoKSA9PiBkZXN0cm95QXBwKHRoaXMuYXBwbGljYXRpb24pKTsKLSAgICAgICAgfQotICAgIH0p
OwotfQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMv
dG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy9zb3VyY2UvdGVzdHMvaGVscGVy
cy9yZXNvbHZlci5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3Rv
ZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvc291cmNlL3Rlc3RzL2hlbHBlcnMv
cmVzb2x2ZXIuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwZTkxNzlmNTQ2MzUw
MjVmOTUwNGEzNDllNDIzMDJhODAwNWZjMzIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMv
dG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy9zb3VyY2UvdGVzdHMvaGVscGVy
cy9yZXNvbHZlci5qcworKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLWltcG9ydCBSZXNv
bHZlciBmcm9tICcuLi8uLi9yZXNvbHZlcic7Ci1pbXBvcnQgY29uZmlnIGZyb20gJy4uLy4uL2Nv
bmZpZy9lbnZpcm9ubWVudCc7Ci0KLWNvbnN0IHJlc29sdmVyID0gUmVzb2x2ZXIuY3JlYXRlKCk7
Ci0KLXJlc29sdmVyLm5hbWVzcGFjZSA9IHsKLSAgICBtb2R1bGVQcmVmaXg6IGNvbmZpZy5tb2R1
bGVQcmVmaXgsCi0gICAgcG9kTW9kdWxlUHJlZml4OiBjb25maWcucG9kTW9kdWxlUHJlZml4Ci19
OwotCi1leHBvcnQgZGVmYXVsdCByZXNvbHZlcjsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVz
dHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2Vt
YmVyanMvc291cmNlL3Rlc3RzL2hlbHBlcnMvc3RhcnQtYXBwLmpzIGIvUGVyZm9ybWFuY2VUZXN0
cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1i
ZXJqcy9zb3VyY2UvdGVzdHMvaGVscGVycy9zdGFydC1hcHAuanMKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGRkNWY2YTYzNjFhZjdlZGJjNDg4NGQzMDhkNDJiZTg5MGZlYjk3NDkuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvUGVyZm9ybWFuY2VU
ZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMv
ZW1iZXJqcy9zb3VyY2UvdGVzdHMvaGVscGVycy9zdGFydC1hcHAuanMKKysrIC9kZXYvbnVsbApA
QCAtMSwxOCArMCwwIEBACi1pbXBvcnQgRW1iZXIgZnJvbSAnZW1iZXInOwotaW1wb3J0IEFwcGxp
Y2F0aW9uIGZyb20gJy4uLy4uL2FwcCc7Ci1pbXBvcnQgY29uZmlnIGZyb20gJy4uLy4uL2NvbmZp
Zy9lbnZpcm9ubWVudCc7Ci0KLWV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXJ0QXBwKGF0dHJz
KSB7Ci0gICAgbGV0IGFwcGxpY2F0aW9uOwotCi0gICAgLy8gdXNlIGRlZmF1bHRzLCBidXQgeW91
IGNhbiBvdmVycmlkZQotICAgIGxldCBhdHRyaWJ1dGVzID0gRW1iZXIuYXNzaWduKHt9LCBjb25m
aWcuQVBQLCBhdHRycyk7Ci0KLSAgICBFbWJlci5ydW4oKCkgPT4gewotICAgICAgICBhcHBsaWNh
dGlvbiA9IEFwcGxpY2F0aW9uLmNyZWF0ZShhdHRyaWJ1dGVzKTsKLSAgICAgICAgYXBwbGljYXRp
b24uc2V0dXBGb3JUZXN0aW5nKCk7Ci0gICAgICAgIGFwcGxpY2F0aW9uLmluamVjdFRlc3RIZWxw
ZXJzKCk7Ci0gICAgfSk7Ci0KLSAgICByZXR1cm4gYXBwbGljYXRpb247Ci19CmRpZmYgLS1naXQg
YS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVj
dHVyZS1leGFtcGxlcy9lbWJlcmpzL3NvdXJjZS90ZXN0cy9pbmRleC5odG1sIGIvUGVyZm9ybWFu
Y2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBs
ZXMvZW1iZXJqcy9zb3VyY2UvdGVzdHMvaW5kZXguaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMTEyNzg3ZjU3MGY5MDI2OWFlYzFhMzc2ZjdlZDZlNWY3NGViMGIyMS4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3Rz
L1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJl
cmpzL3NvdXJjZS90ZXN0cy9pbmRleC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBA
QAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLSAgPGhlYWQ+Ci0gICAgPG1ldGEgY2hhcnNldD0i
dXRmLTgiPgotICAgIDxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0i
SUU9ZWRnZSI+Ci0gICAgPHRpdGxlPlRvZG9tdmMgVGVzdHM8L3RpdGxlPgotICAgIDxtZXRhIG5h
bWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSIiPgotICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBj
b250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MSI+Ci0KLSAgICB7e2Nv
bnRlbnQtZm9yICJoZWFkIn19Ci0gICAge3tjb250ZW50LWZvciAidGVzdC1oZWFkIn19Ci0KLSAg
ICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Int7cm9vdFVSTH19YXNzZXRzL3ZlbmRvci5j
c3MiPgotICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ie3tyb290VVJMfX1hc3NldHMv
dG9kb212Yy5jc3MiPgotICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ie3tyb290VVJM
fX1hc3NldHMvdGVzdC1zdXBwb3J0LmNzcyI+Ci0KLSAgICB7e2NvbnRlbnQtZm9yICJoZWFkLWZv
b3RlciJ9fQotICAgIHt7Y29udGVudC1mb3IgInRlc3QtaGVhZC1mb290ZXIifX0KLSAgPC9oZWFk
PgotICA8Ym9keT4KLSAgICB7e2NvbnRlbnQtZm9yICJib2R5In19Ci0gICAge3tjb250ZW50LWZv
ciAidGVzdC1ib2R5In19Ci0KLSAgICA8c2NyaXB0IHNyYz0iL3Rlc3RlbS5qcyIgaW50ZWdyaXR5
PSIiPjwvc2NyaXB0PgotICAgIDxzY3JpcHQgc3JjPSJ7e3Jvb3RVUkx9fWFzc2V0cy92ZW5kb3Iu
anMiPjwvc2NyaXB0PgotICAgIDxzY3JpcHQgc3JjPSJ7e3Jvb3RVUkx9fWFzc2V0cy90ZXN0LXN1
cHBvcnQuanMiPjwvc2NyaXB0PgotICAgIDxzY3JpcHQgc3JjPSJ7e3Jvb3RVUkx9fWFzc2V0cy90
b2RvbXZjLmpzIj48L3NjcmlwdD4KLSAgICA8c2NyaXB0IHNyYz0ie3tyb290VVJMfX1hc3NldHMv
dGVzdHMuanMiPjwvc2NyaXB0PgotCi0gICAge3tjb250ZW50LWZvciAiYm9keS1mb290ZXIifX0K
LSAgICB7e2NvbnRlbnQtZm9yICJ0ZXN0LWJvZHktZm9vdGVyIn19Ci0gIDwvYm9keT4KLTwvaHRt
bD4KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3Rv
ZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvc291cmNlL3Rlc3RzL3Rlc3QtaGVs
cGVyLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9h
cmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy9zb3VyY2UvdGVzdHMvdGVzdC1oZWxwZXIuanMK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjOTk2MWZkNTZhMTJiN2VlMmIyZDhjMTc1
MjBlZmRhM2Q2YTBkNzkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNo
aXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy9zb3VyY2UvdGVzdHMvdGVzdC1oZWxwZXIuanMKKysr
IC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLWltcG9ydCByZXNvbHZlciBmcm9tICcuL2hlbHBl
cnMvcmVzb2x2ZXInOwotaW1wb3J0IHsKLSAgICBzZXRSZXNvbHZlcgotfSBmcm9tICdlbWJlci1x
dW5pdCc7Ci0KLXNldFJlc29sdmVyKHJlc29sdmVyKTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNl
VGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVz
L2VtYmVyanMvc291cmNlL3ZlbmRvci9iYXNlLmNzcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRv
bWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvc291
cmNlL3ZlbmRvci9iYXNlLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGQyNWQz
Yzg0YWM2YzZhZWYyNmI5NjgzYTJiYzEwYzYxZjk2MGM4Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jl
c291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL3NvdXJjZS92ZW5k
b3IvYmFzZS5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSwxNDEgKzAsMCBAQAotaHIgewotICAgIG1h
cmdpbjogMjBweCAwOwotICAgIGJvcmRlcjogMDsKLSAgICBib3JkZXItdG9wOiAxcHggZGFzaGVk
ICNjNWM1YzU7Ci0gICAgYm9yZGVyLWJvdHRvbTogMXB4IGRhc2hlZCAjZjdmN2Y3OwotfQotCi0u
bGVhcm4gYSB7Ci0gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKLSAgICB0ZXh0LWRlY29yYXRpb246
IG5vbmU7Ci0gICAgY29sb3I6ICNiODNmNDU7Ci19Ci0KLS5sZWFybiBhOmhvdmVyIHsKLSAgICB0
ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKLSAgICBjb2xvcjogIzc4N2U3ZTsKLX0KLQotLmxl
YXJuIGgzLAotLmxlYXJuIGg0LAotLmxlYXJuIGg1IHsKLSAgICBtYXJnaW46IDEwcHggMDsKLSAg
ICBmb250LXdlaWdodDogNTAwOwotICAgIGxpbmUtaGVpZ2h0OiAxLjI7Ci0gICAgY29sb3I6ICMw
MDA7Ci19Ci0KLS5sZWFybiBoMyB7Ci0gICAgZm9udC1zaXplOiAyNHB4OwotfQotCi0ubGVhcm4g
aDQgewotICAgIGZvbnQtc2l6ZTogMThweDsKLX0KLQotLmxlYXJuIGg1IHsKLSAgICBtYXJnaW4t
Ym90dG9tOiAwOwotICAgIGZvbnQtc2l6ZTogMTRweDsKLX0KLQotLmxlYXJuIHVsIHsKLSAgICBw
YWRkaW5nOiAwOwotICAgIG1hcmdpbjogMCAwIDMwcHggMjVweDsKLX0KLQotLmxlYXJuIGxpIHsK
LSAgICBsaW5lLWhlaWdodDogMjBweDsKLX0KLQotLmxlYXJuIHAgewotICAgIGZvbnQtc2l6ZTog
MTVweDsKLSAgICBmb250LXdlaWdodDogMzAwOwotICAgIGxpbmUtaGVpZ2h0OiAxLjM7Ci0gICAg
bWFyZ2luLXRvcDogMDsKLSAgICBtYXJnaW4tYm90dG9tOiAwOwotfQotCi0jaXNzdWUtY291bnQg
ewotICAgIGRpc3BsYXk6IG5vbmU7Ci19Ci0KLS5xdW90ZSB7Ci0gICAgYm9yZGVyOiBub25lOwot
ICAgIG1hcmdpbjogMjBweCAwIDYwcHggMDsKLX0KLQotLnF1b3RlIHAgewotICAgIGZvbnQtc3R5
bGU6IGl0YWxpYzsKLX0KLQotLnF1b3RlIHA6YmVmb3JlIHsKLSAgICBjb250ZW50OiAn4oCcJzsK
LSAgICBmb250LXNpemU6IDUwcHg7Ci0gICAgb3BhY2l0eTogLjE1OwotICAgIHBvc2l0aW9uOiBh
YnNvbHV0ZTsKLSAgICB0b3A6IC0yMHB4OwotICAgIGxlZnQ6IDNweDsKLX0KLQotLnF1b3RlIHA6
YWZ0ZXIgewotICAgIGNvbnRlbnQ6ICfigJ0nOwotICAgIGZvbnQtc2l6ZTogNTBweDsKLSAgICBv
cGFjaXR5OiAuMTU7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIGJvdHRvbTogLTQycHg7
Ci0gICAgcmlnaHQ6IDNweDsKLX0KLQotLnF1b3RlIGZvb3RlciB7Ci0gICAgcG9zaXRpb246IGFi
c29sdXRlOwotICAgIGJvdHRvbTogLTQwcHg7Ci0gICAgcmlnaHQ6IDA7Ci19Ci0KLS5xdW90ZSBm
b290ZXIgaW1nIHsKLSAgICBib3JkZXItcmFkaXVzOiAzcHg7Ci19Ci0KLS5xdW90ZSBmb290ZXIg
YSB7Ci0gICAgbWFyZ2luLWxlZnQ6IDVweDsKLSAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwot
fQotCi0uc3BlZWNoLWJ1YmJsZSB7Ci0gICAgcG9zaXRpb246IHJlbGF0aXZlOwotICAgIHBhZGRp
bmc6IDEwcHg7Ci0gICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAuMDQpOwotICAgIGJvcmRl
ci1yYWRpdXM6IDVweDsKLX0KLQotLnNwZWVjaC1idWJibGU6YWZ0ZXIgewotICAgIGNvbnRlbnQ6
ICcnOwotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICB0b3A6IDEwMCU7Ci0gICAgcmlnaHQ6
IDMwcHg7Ci0gICAgYm9yZGVyOiAxM3B4IHNvbGlkIHRyYW5zcGFyZW50OwotICAgIGJvcmRlci10
b3AtY29sb3I6IHJnYmEoMCwgMCwgMCwgLjA0KTsKLX0KLQotLmxlYXJuLWJhciA+IC5sZWFybiB7
Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIHdpZHRoOiAyNzJweDsKLSAgICB0b3A6IDhw
eDsKLSAgICBsZWZ0OiAtMzAwcHg7Ci0gICAgcGFkZGluZzogMTBweDsKLSAgICBib3JkZXItcmFk
aXVzOiA1cHg7Ci0gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAuNik7
Ci0gICAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogbGVmdDsKLSAgICB0cmFuc2l0aW9uLWR1cmF0aW9u
OiA1MDBtczsKLX0KLQotQG1lZGlhIChtaW4td2lkdGg6IDg5OXB4KSB7Ci0gICAgLmxlYXJuLWJh
ciB7Ci0gICAgICAgIHdpZHRoOiBhdXRvOwotICAgICAgICBwYWRkaW5nLWxlZnQ6IDMwMHB4Owot
ICAgIH0KLQotICAgIC5sZWFybi1iYXIgPiAubGVhcm4gewotICAgICAgICBsZWZ0OiA4cHg7Ci0g
ICAgfQotfQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJj
ZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy9zb3VyY2UvdmVuZG9yL2lu
ZGV4LmNzcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMv
YXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvc291cmNlL3ZlbmRvci9pbmRleC5jc3MKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3ZWExODAxNjEyMTI2ZjFkYjY1Y2UwNTY4ZjJh
MDIzNzNiOTNiNTUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRl
Y3R1cmUtZXhhbXBsZXMvZW1iZXJqcy9zb3VyY2UvdmVuZG9yL2luZGV4LmNzcworKysgL2Rldi9u
dWxsCkBAIC0xLDM3OCArMCwwIEBACi1odG1sLAotYm9keSB7Ci0gICAgbWFyZ2luOiAwOwotICAg
IHBhZGRpbmc6IDA7Ci19Ci0KLWJ1dHRvbiB7Ci0gICAgbWFyZ2luOiAwOwotICAgIHBhZGRpbmc6
IDA7Ci0gICAgYm9yZGVyOiAwOwotICAgIGJhY2tncm91bmQ6IG5vbmU7Ci0gICAgZm9udC1zaXpl
OiAxMDAlOwotICAgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKLSAgICBmb250LWZhbWlseTog
aW5oZXJpdDsKLSAgICBmb250LXdlaWdodDogaW5oZXJpdDsKLSAgICBjb2xvcjogaW5oZXJpdDsK
LSAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7Ci0gICAgYXBwZWFyYW5jZTogbm9uZTsKLSAg
ICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKLSAgICAtbW96LWZvbnQtc21v
b3RoaW5nOiBhbnRpYWxpYXNlZDsKLSAgICBmb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7Ci19
Ci0KLWJvZHkgewotICAgIGZvbnQ6IDE0cHggJ0hlbHZldGljYSBOZXVlJywgSGVsdmV0aWNhLCBB
cmlhbCwgc2Fucy1zZXJpZjsKLSAgICBsaW5lLWhlaWdodDogMS40ZW07Ci0gICAgYmFja2dyb3Vu
ZDogI2Y1ZjVmNTsKLSAgICBjb2xvcjogIzRkNGQ0ZDsKLSAgICBtaW4td2lkdGg6IDIzMHB4Owot
ICAgIG1heC13aWR0aDogNTUwcHg7Ci0gICAgbWFyZ2luOiAwIGF1dG87Ci0gICAgLXdlYmtpdC1m
b250LXNtb290aGluZzogYW50aWFsaWFzZWQ7Ci0gICAgLW1vei1mb250LXNtb290aGluZzogYW50
aWFsaWFzZWQ7Ci0gICAgZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOwotICAgIGZvbnQtd2Vp
Z2h0OiAzMDA7Ci19Ci0KLWJ1dHRvbiwKLWlucHV0W3R5cGU9ImNoZWNrYm94Il0gewotICAgIG91
dGxpbmU6IG5vbmU7Ci19Ci0KLS5oaWRkZW4gewotICAgIGRpc3BsYXk6IG5vbmU7Ci19Ci0KLSN0
b2RvYXBwIHsKLSAgICBiYWNrZ3JvdW5kOiAjZmZmOwotICAgIG1hcmdpbjogMTMwcHggMCA0MHB4
IDA7Ci0gICAgcG9zaXRpb246IHJlbGF0aXZlOwotICAgIGJveC1zaGFkb3c6IDAgMnB4IDRweCAw
IHJnYmEoMCwgMCwgMCwgMC4yKSwKLSAgICAgICAgICAgICAgICAwIDI1cHggNTBweCAwIHJnYmEo
MCwgMCwgMCwgMC4xKTsKLX0KLQotI3RvZG9hcHAgaW5wdXQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vo
b2xkZXIgewotICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKLSAgICBmb250LXdlaWdodDogMzAwOwot
ICAgIGNvbG9yOiAjZTZlNmU2OwotfQotCi0jdG9kb2FwcCBpbnB1dDo6LW1vei1wbGFjZWhvbGRl
ciB7Ci0gICAgZm9udC1zdHlsZTogaXRhbGljOwotICAgIGZvbnQtd2VpZ2h0OiAzMDA7Ci0gICAg
Y29sb3I6ICNlNmU2ZTY7Ci19Ci0KLSN0b2RvYXBwIGlucHV0OjppbnB1dC1wbGFjZWhvbGRlciB7
Ci0gICAgZm9udC1zdHlsZTogaXRhbGljOwotICAgIGZvbnQtd2VpZ2h0OiAzMDA7Ci0gICAgY29s
b3I6ICNlNmU2ZTY7Ci19Ci0KLSN0b2RvYXBwIGgxIHsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7
Ci0gICAgdG9wOiAtMTU1cHg7Ci0gICAgd2lkdGg6IDEwMCU7Ci0gICAgZm9udC1zaXplOiAxMDBw
eDsKLSAgICBmb250LXdlaWdodDogMTAwOwotICAgIHRleHQtYWxpZ246IGNlbnRlcjsKLSAgICBj
b2xvcjogcmdiYSgxNzUsIDQ3LCA0NywgMC4xNSk7Ci0gICAgLXdlYmtpdC10ZXh0LXJlbmRlcmlu
Zzogb3B0aW1pemVMZWdpYmlsaXR5OwotICAgIC1tb3otdGV4dC1yZW5kZXJpbmc6IG9wdGltaXpl
TGVnaWJpbGl0eTsKLSAgICB0ZXh0LXJlbmRlcmluZzogb3B0aW1pemVMZWdpYmlsaXR5OwotfQot
Ci0jbmV3LXRvZG8sCi0uZWRpdCB7Ci0gICAgcG9zaXRpb246IHJlbGF0aXZlOwotICAgIG1hcmdp
bjogMDsKLSAgICB3aWR0aDogMTAwJTsKLSAgICBmb250LXNpemU6IDI0cHg7Ci0gICAgZm9udC1m
YW1pbHk6IGluaGVyaXQ7Ci0gICAgZm9udC13ZWlnaHQ6IGluaGVyaXQ7Ci0gICAgbGluZS1oZWln
aHQ6IDEuNGVtOwotICAgIGJvcmRlcjogMDsKLSAgICBvdXRsaW5lOiBub25lOwotICAgIGNvbG9y
OiBpbmhlcml0OwotICAgIHBhZGRpbmc6IDZweDsKLSAgICBib3JkZXI6IDFweCBzb2xpZCAjOTk5
OwotICAgIGJveC1zaGFkb3c6IGluc2V0IDAgLTFweCA1cHggMCByZ2JhKDAsIDAsIDAsIDAuMik7
Ci0gICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKLSAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5n
OiBhbnRpYWxpYXNlZDsKLSAgICAtbW96LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKLSAg
ICBmb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7Ci19Ci0KLSNuZXctdG9kbyB7Ci0gICAgcGFk
ZGluZzogMTZweCAxNnB4IDE2cHggNjBweDsKLSAgICBib3JkZXI6IG5vbmU7Ci0gICAgYmFja2dy
b3VuZDogcmdiYSgwLCAwLCAwLCAwLjAwMyk7Ci0gICAgYm94LXNoYWRvdzogaW5zZXQgMCAtMnB4
IDFweCByZ2JhKDAsMCwwLDAuMDMpOwotfQotCi0jbWFpbiB7Ci0gICAgcG9zaXRpb246IHJlbGF0
aXZlOwotICAgIHotaW5kZXg6IDI7Ci0gICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNlNmU2ZTY7
Ci19Ci0KLWxhYmVsW2Zvcj0ndG9nZ2xlLWFsbCddIHsKLSAgICBkaXNwbGF5OiBub25lOwotfQot
Ci0jdG9nZ2xlLWFsbCB7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIHRvcDogLTU1cHg7
Ci0gICAgbGVmdDogLTEycHg7Ci0gICAgd2lkdGg6IDYwcHg7Ci0gICAgaGVpZ2h0OiAzNHB4Owot
ICAgIHRleHQtYWxpZ246IGNlbnRlcjsKLSAgICBib3JkZXI6IG5vbmU7IC8qIE1vYmlsZSBTYWZh
cmkgKi8KLX0KLQotI3RvZ2dsZS1hbGw6YmVmb3JlIHsKLSAgICBjb250ZW50OiAn4p2vJzsKLSAg
ICBmb250LXNpemU6IDIycHg7Ci0gICAgY29sb3I6ICNlNmU2ZTY7Ci0gICAgcGFkZGluZzogMTBw
eCAyN3B4IDEwcHggMjdweDsKLX0KLQotI3RvZ2dsZS1hbGw6Y2hlY2tlZDpiZWZvcmUgewotICAg
IGNvbG9yOiAjNzM3MzczOwotfQotCi0jdG9kby1saXN0IHsKLSAgICBtYXJnaW46IDA7Ci0gICAg
cGFkZGluZzogMDsKLSAgICBsaXN0LXN0eWxlOiBub25lOwotfQotCi0jdG9kby1saXN0IGxpIHsK
LSAgICBwb3NpdGlvbjogcmVsYXRpdmU7Ci0gICAgZm9udC1zaXplOiAyNHB4OwotICAgIGJvcmRl
ci1ib3R0b206IDFweCBzb2xpZCAjZWRlZGVkOwotfQotCi0jdG9kby1saXN0IGxpOmxhc3QtY2hp
bGQgewotICAgIGJvcmRlci1ib3R0b206IG5vbmU7Ci19Ci0KLSN0b2RvLWxpc3QgbGkuZWRpdGlu
ZyB7Ci0gICAgYm9yZGVyLWJvdHRvbTogbm9uZTsKLSAgICBwYWRkaW5nOiAwOwotfQotCi0jdG9k
by1saXN0IGxpLmVkaXRpbmcgLmVkaXQgewotICAgIGRpc3BsYXk6IGJsb2NrOwotICAgIHdpZHRo
OiA1MDZweDsKLSAgICBwYWRkaW5nOiAxM3B4IDE3cHggMTJweCAxN3B4OwotICAgIG1hcmdpbjog
MCAwIDAgNDNweDsKLX0KLQotI3RvZG8tbGlzdCBsaS5lZGl0aW5nIC52aWV3IHsKLSAgICBkaXNw
bGF5OiBub25lOwotfQotCi0jdG9kby1saXN0IGxpIC50b2dnbGUgewotICAgIHRleHQtYWxpZ246
IGNlbnRlcjsKLSAgICB3aWR0aDogNDBweDsKLSAgICAvKiBhdXRvLCBzaW5jZSBub24tV2ViS2l0
IGJyb3dzZXJzIGRvZXNuJ3Qgc3VwcG9ydCBpbnB1dCBzdHlsaW5nICovCi0gICAgaGVpZ2h0OiBh
dXRvOwotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICB0b3A6IDA7Ci0gICAgYm90dG9tOiAw
OwotICAgIG1hcmdpbjogYXV0byAwOwotICAgIGJvcmRlcjogbm9uZTsgLyogTW9iaWxlIFNhZmFy
aSAqLwotICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsKLSAgICBhcHBlYXJhbmNlOiBub25l
OwotfQotCi0jdG9kby1saXN0IGxpIC50b2dnbGU6YWZ0ZXIgewotICAgIGNvbnRlbnQ6IHVybCgn
ZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAw
MC9zdmciIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCIgdmlld0JveD0iLTEwIC0xOCAxMDAgMTM1Ij48
Y2lyY2xlIGN4PSI1MCIgY3k9IjUwIiByPSI1MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjZWRlZGVk
IiBzdHJva2Utd2lkdGg9IjMiLz48L3N2Zz4nKTsKLX0KLQotI3RvZG8tbGlzdCBsaSAudG9nZ2xl
OmNoZWNrZWQ6YWZ0ZXIgewotICAgIGNvbnRlbnQ6IHVybCgnZGF0YTppbWFnZS9zdmcreG1sO3V0
ZjgsPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0MCIgaGVp
Z2h0PSI0MCIgdmlld0JveD0iLTEwIC0xOCAxMDAgMTM1Ij48Y2lyY2xlIGN4PSI1MCIgY3k9IjUw
IiByPSI1MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjYmRkYWQ1IiBzdHJva2Utd2lkdGg9IjMiLz48
cGF0aCBmaWxsPSIjNWRjMmFmIiBkPSJNNzIgMjVMNDIgNzEgMjcgNTZsLTQgNCAyMCAyMCAzNC01
MnoiLz48L3N2Zz4nKTsKLX0KLQotI3RvZG8tbGlzdCBsaSBsYWJlbCB7Ci0gICAgd2hpdGUtc3Bh
Y2U6IHByZTsKLSAgICB3b3JkLWJyZWFrOiBicmVhay13b3JkOwotICAgIHBhZGRpbmc6IDE1cHgg
NjBweCAxNXB4IDE1cHg7Ci0gICAgbWFyZ2luLWxlZnQ6IDQ1cHg7Ci0gICAgZGlzcGxheTogYmxv
Y2s7Ci0gICAgbGluZS1oZWlnaHQ6IDEuMjsKLSAgICB0cmFuc2l0aW9uOiBjb2xvciAwLjRzOwot
fQotCi0jdG9kby1saXN0IGxpLmNvbXBsZXRlZCBsYWJlbCB7Ci0gICAgY29sb3I6ICNkOWQ5ZDk7
Ci0gICAgdGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7Ci19Ci0KLSN0b2RvLWxpc3QgbGkg
LmRlc3Ryb3kgewotICAgIGRpc3BsYXk6IG5vbmU7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwot
ICAgIHRvcDogMDsKLSAgICByaWdodDogMTBweDsKLSAgICBib3R0b206IDA7Ci0gICAgd2lkdGg6
IDQwcHg7Ci0gICAgaGVpZ2h0OiA0MHB4OwotICAgIG1hcmdpbjogYXV0byAwOwotICAgIGZvbnQt
c2l6ZTogMzBweDsKLSAgICBjb2xvcjogI2NjOWE5YTsKLSAgICBtYXJnaW4tYm90dG9tOiAxMXB4
OwotICAgIHRyYW5zaXRpb246IGNvbG9yIDAuMnMgZWFzZS1vdXQ7Ci19Ci0KLSN0b2RvLWxpc3Qg
bGkgLmRlc3Ryb3k6aG92ZXIgewotICAgIGNvbG9yOiAjYWY1YjVlOwotfQotCi0jdG9kby1saXN0
IGxpIC5kZXN0cm95OmFmdGVyIHsKLSAgICBjb250ZW50OiAnw5cnOwotfQotCi0jdG9kby1saXN0
IGxpOmhvdmVyIC5kZXN0cm95IHsKLSAgICBkaXNwbGF5OiBibG9jazsKLX0KLQotI3RvZG8tbGlz
dCBsaSAuZWRpdCB7Ci0gICAgZGlzcGxheTogbm9uZTsKLX0KLQotI3RvZG8tbGlzdCBsaS5lZGl0
aW5nOmxhc3QtY2hpbGQgewotICAgIG1hcmdpbi1ib3R0b206IC0xcHg7Ci19Ci0KLSNmb290ZXIg
ewotICAgIGNvbG9yOiAjNzc3OwotICAgIHBhZGRpbmc6IDEwcHggMTVweDsKLSAgICBoZWlnaHQ6
IDIwcHg7Ci0gICAgdGV4dC1hbGlnbjogY2VudGVyOwotICAgIGJvcmRlci10b3A6IDFweCBzb2xp
ZCAjZTZlNmU2OwotfQotCi0jZm9vdGVyOmJlZm9yZSB7Ci0gICAgY29udGVudDogJyc7Ci0gICAg
cG9zaXRpb246IGFic29sdXRlOwotICAgIHJpZ2h0OiAwOwotICAgIGJvdHRvbTogMDsKLSAgICBs
ZWZ0OiAwOwotICAgIGhlaWdodDogNTBweDsKLSAgICBvdmVyZmxvdzogaGlkZGVuOwotICAgIGJv
eC1zaGFkb3c6IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMiksCi0gICAgICAgICAgICAgICAg
MCA4cHggMCAtM3B4ICNmNmY2ZjYsCi0gICAgICAgICAgICAgICAgMCA5cHggMXB4IC0zcHggcmdi
YSgwLCAwLCAwLCAwLjIpLAotICAgICAgICAgICAgICAgIDAgMTZweCAwIC02cHggI2Y2ZjZmNiwK
LSAgICAgICAgICAgICAgICAwIDE3cHggMnB4IC02cHggcmdiYSgwLCAwLCAwLCAwLjIpOwotfQot
Ci0jdG9kby1jb3VudCB7Ci0gICAgZmxvYXQ6IGxlZnQ7Ci0gICAgdGV4dC1hbGlnbjogbGVmdDsK
LX0KLQotI3RvZG8tY291bnQgc3Ryb25nIHsKLSAgICBmb250LXdlaWdodDogMzAwOwotfQotCi0j
ZmlsdGVycyB7Ci0gICAgbWFyZ2luOiAwOwotICAgIHBhZGRpbmc6IDA7Ci0gICAgbGlzdC1zdHls
ZTogbm9uZTsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgcmlnaHQ6IDA7Ci0gICAgbGVm
dDogMDsKLX0KLQotI2ZpbHRlcnMgbGkgewotICAgIGRpc3BsYXk6IGlubGluZTsKLX0KLQotI2Zp
bHRlcnMgbGkgYSB7Ci0gICAgY29sb3I6IGluaGVyaXQ7Ci0gICAgbWFyZ2luOiAzcHg7Ci0gICAg
cGFkZGluZzogM3B4IDdweDsKLSAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Ci0gICAgYm9yZGVy
OiAxcHggc29saWQgdHJhbnNwYXJlbnQ7Ci0gICAgYm9yZGVyLXJhZGl1czogM3B4OwotfQotCi0j
ZmlsdGVycyBsaSBhLnNlbGVjdGVkLAotI2ZpbHRlcnMgbGkgYTpob3ZlciB7Ci0gICAgYm9yZGVy
LWNvbG9yOiByZ2JhKDE3NSwgNDcsIDQ3LCAwLjEpOwotfQotCi0jZmlsdGVycyBsaSBhLnNlbGVj
dGVkIHsKLSAgICBib3JkZXItY29sb3I6IHJnYmEoMTc1LCA0NywgNDcsIDAuMik7Ci19Ci0KLSNj
bGVhci1jb21wbGV0ZWQsCi1odG1sICNjbGVhci1jb21wbGV0ZWQ6YWN0aXZlIHsKLSAgICBmbG9h
dDogcmlnaHQ7Ci0gICAgcG9zaXRpb246IHJlbGF0aXZlOwotICAgIGxpbmUtaGVpZ2h0OiAyMHB4
OwotICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKLSAgICBjdXJzb3I6IHBvaW50ZXI7Ci0gICAg
cG9zaXRpb246IHJlbGF0aXZlOwotfQotCi0jY2xlYXItY29tcGxldGVkOmhvdmVyIHsKLSAgICB0
ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKLX0KLQotI2luZm8gewotICAgIG1hcmdpbjogNjVw
eCBhdXRvIDA7Ci0gICAgY29sb3I6ICNiZmJmYmY7Ci0gICAgZm9udC1zaXplOiAxMHB4OwotICAg
IHRleHQtc2hhZG93OiAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTsKLSAgICB0ZXh0
LWFsaWduOiBjZW50ZXI7Ci19Ci0KLSNpbmZvIHAgewotICAgIGxpbmUtaGVpZ2h0OiAxOwotfQot
Ci0jaW5mbyBhIHsKLSAgICBjb2xvcjogaW5oZXJpdDsKLSAgICB0ZXh0LWRlY29yYXRpb246IG5v
bmU7Ci0gICAgZm9udC13ZWlnaHQ6IDQwMDsKLX0KLQotI2luZm8gYTpob3ZlciB7Ci0gICAgdGV4
dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Ci19Ci0KLS8qCi0gICAgSGFjayB0byByZW1vdmUgYmFj
a2dyb3VuZCBmcm9tIE1vYmlsZSBTYWZhcmkuCi0gICAgQ2FuJ3QgdXNlIGl0IGdsb2JhbGx5IHNp
bmNlIGl0IGRlc3Ryb3lzIGNoZWNrYm94ZXMgaW4gRmlyZWZveAotKi8KLUBtZWRpYSBzY3JlZW4g
YW5kICgtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86MCkgewotICAgICN0b2dnbGUtYWxs
LAotICAgICN0b2RvLWxpc3QgbGkgLnRvZ2dsZSB7Ci0gICAgICAgIGJhY2tncm91bmQ6IG5vbmU7
Ci0gICAgfQotCi0gICAgI3RvZG8tbGlzdCBsaSAudG9nZ2xlIHsKLSAgICAgICAgaGVpZ2h0OiA0
MHB4OwotICAgIH0KLQotICAgICN0b2dnbGUtYWxsIHsKLSAgICAgICAgLXdlYmtpdC10cmFuc2Zv
cm06IHJvdGF0ZSg5MGRlZyk7Ci0gICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTsKLSAg
ICAgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOwotICAgICAgICBhcHBlYXJhbmNlOiBub25l
OwotICAgIH0KLX0KLQotQG1lZGlhIChtYXgtd2lkdGg6IDQzMHB4KSB7Ci0gICAgI2Zvb3RlciB7
Ci0gICAgICAgIGhlaWdodDogNTBweDsKLSAgICB9Ci0KLSAgICAjZmlsdGVycyB7Ci0gICAgICAg
IGJvdHRvbTogMTBweDsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1Nw
ZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpz
L3Rlc3RlbS5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9t
dmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvdGVzdGVtLmpzCmluZGV4IDFmZTA4NGM2
ODM4OGNjZmMyYWE3MzQ0NWQxZDRjNTdjMzZjZWM2ZjkuLmRlMTQyZWUxMDRmZTZjNjFhNmQyYWI5
YTc1NTQwNTM3NGQwODIyYjUgMTAwNjQ0Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0
ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvdGVzdGVt
LmpzCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMv
YXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvdGVzdGVtLmpzCkBAIC0xLDE5ICsxLDEzIEBA
Ci0vKioKLSAqIFRoaXMgaXMgZHVtbXkgZmlsZSB0aGF0IGV4aXN0cyBmb3IgdGhlIHNvbGUgcHVy
cG9zZQotICogb2YgYWxsb3dpbmcgdGVzdHMgdG8gcnVuIGRpcmVjdGx5IGluIHRoZSBicm93c2Vy
IGFzCi0gKiB3ZWxsIGFzIGJ5IFRlc3RlbS4KLSAqCi0gKiBUZXN0ZW0gaXMgY29uZmlndXJlZCB0
byBydW4gdGVzdHMgZGlyZWN0bHkgYWdhaW5zdAotICogdGhlIHRlc3QgYnVpbGQgb2YgaW5kZXgu
aHRtbCwgd2hpY2ggcmVxdWlyZXMgYQotICogc25pcHBldCB0byBsb2FkIHRoZSB0ZXN0ZW0uanMg
ZmlsZToKLSAqICAgPHNjcmlwdCBzcmM9Ii90ZXN0ZW0uanMiPjwvc2NyaXB0PgotICogVGhpcyBo
YXMgdG8gZ28gYmVmb3JlIHRoZSBxdW5pdCBmcmFtZXdvcmsgYW5kIGFwcAotICogdGVzdHMgYXJl
IGxvYWRlZC4KLSAqCi0gKiBUZXN0ZW0gaW50ZXJuYWxseSBzdXBwbGllcyB0aGlzIGZpbGUuIEhv
d2V2ZXIsIGlmIHlvdQotICogcnVuIHRoZSB0ZXN0cyBkaXJlY3RseSBpbiB0aGUgYnJvd3NlciAo
bG9jYWxob3N0OjgwMDAvdGVzdHMpLAotICogdGhpcyBmaWxlIGRvZXMgbm90IGV4aXN0LgotICoK
LSAqIEhlbmNlIHRoZSBwdXJwb3NlIG9mIHRoaXMgZmFrZSBmaWxlLiBUaGlzIGZpbGUgaXMgc2Vy
dmVkCi0gKiBkaXJlY3RseSBmcm9tIHRoZSBleHByZXNzIHNlcnZlciB0byBzYXRpc2lmeSB0aGUg
c2NyaXB0IGxvYWQuCi0gKi8KKy8qanNoaW50IG5vZGU6dHJ1ZSovCittb2R1bGUuZXhwb3J0cyA9
IHsKKyAgICBmcmFtZXdvcms6ICdxdW5pdCcsCisgICAgdGVzdF9wYWdlOiAndGVzdHMvaW5kZXgu
aHRtbD9oaWRlcGFzc2VkJywKKyAgICBkaXNhYmxlX3dhdGNoaW5nOiB0cnVlLAorICAgIGxhdW5j
aF9pbl9jaTogWworICAgICAgICAnUGhhbnRvbUpTJworICAgIF0sCisgICAgbGF1bmNoX2luX2Rl
djogWworICAgICAgICAnUGhhbnRvbUpTJywKKyAgICAgICAgJ0Nocm9tZScKKyAgICBdCit9Owpk
aWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212
Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy90ZXN0cy9oZWxwZXJzL2Rlc3Ryb3ktYXBw
LmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNo
aXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy90ZXN0cy9oZWxwZXJzL2Rlc3Ryb3ktYXBwLmpzCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjEzZDQ5ODk1MDEyZDk2YTI5Y2E1YWM3YzYxZGFkYWZhYTliM2NhNDUKLS0tIC9k
ZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2Rv
bXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL3Rlc3RzL2hlbHBlcnMvZGVzdHJveS1h
cHAuanMKQEAgLTAsMCArMSw1IEBACitpbXBvcnQgRW1iZXIgZnJvbSAnZW1iZXInOworCitleHBv
cnQgZGVmYXVsdCBmdW5jdGlvbiBkZXN0cm95QXBwKGFwcGxpY2F0aW9uKSB7CisgICAgRW1iZXIu
cnVuKGFwcGxpY2F0aW9uLCAnZGVzdHJveScpOworfQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VU
ZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMv
ZW1iZXJqcy90ZXN0cy9oZWxwZXJzL21vZHVsZS1mb3ItYWNjZXB0YW5jZS5qcyBiL1BlcmZvcm1h
bmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1w
bGVzL2VtYmVyanMvdGVzdHMvaGVscGVycy9tb2R1bGUtZm9yLWFjY2VwdGFuY2UuanMKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNmZiZTEzNTAwZWIwOTc1ZjczZTlkY2MxMzU2NDI4NzJkZDk0YTYyOQotLS0gL2Rldi9u
dWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMv
YXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvdGVzdHMvaGVscGVycy9tb2R1bGUtZm9yLWFj
Y2VwdGFuY2UuanMKQEAgLTAsMCArMSwyMyBAQAoraW1wb3J0IHsgbW9kdWxlIH0gZnJvbSAncXVu
aXQnOworaW1wb3J0IEVtYmVyIGZyb20gJ2VtYmVyJzsKK2ltcG9ydCBzdGFydEFwcCBmcm9tICcu
Li9oZWxwZXJzL3N0YXJ0LWFwcCc7CitpbXBvcnQgZGVzdHJveUFwcCBmcm9tICcuLi9oZWxwZXJz
L2Rlc3Ryb3ktYXBwJzsKKworY29uc3QgeyBSU1ZQOiB7IFByb21pc2UgfSB9ID0gRW1iZXI7CisK
K2V4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIChuYW1lLCBvcHRpb25zID0ge30pIHsKKyAgICBtb2R1
bGUobmFtZSwgeworICAgICAgICBiZWZvcmVFYWNoKCkgeworICAgICAgICAgICAgdGhpcy5hcHBs
aWNhdGlvbiA9IHN0YXJ0QXBwKCk7CisKKyAgICAgICAgICAgIGlmIChvcHRpb25zLmJlZm9yZUVh
Y2gpIHsKKyAgICAgICAgICAgICAgICBvcHRpb25zLmJlZm9yZUVhY2guYXBwbHkodGhpcywgYXJn
dW1lbnRzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKworICAgICAgICBhZnRlckVhY2go
KSB7CisgICAgICAgICAgICBsZXQgYWZ0ZXJFYWNoID0gb3B0aW9ucy5hZnRlckVhY2ggJiYgb3B0
aW9ucy5hZnRlckVhY2guYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKyAgICAgICAgICAgIHJldHVy
biBQcm9taXNlLnJlc29sdmUoYWZ0ZXJFYWNoKS50aGVuKCgpID0+IGRlc3Ryb3lBcHAodGhpcy5h
cHBsaWNhdGlvbikpOworICAgICAgICB9CisgICAgfSk7Cit9CmRpZmYgLS1naXQgYS9QZXJmb3Jt
YW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFt
cGxlcy9lbWJlcmpzL3Rlc3RzL2hlbHBlcnMvcmVzb2x2ZXIuanMgYi9QZXJmb3JtYW5jZVRlc3Rz
L1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJl
cmpzL3Rlc3RzL2hlbHBlcnMvcmVzb2x2ZXIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTBlOTE3OWY1NDYzNTAy
NWY5NTA0YTM0OWU0MjMwMmE4MDA1ZmMzMgotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNl
VGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVz
L2VtYmVyanMvdGVzdHMvaGVscGVycy9yZXNvbHZlci5qcwpAQCAtMCwwICsxLDExIEBACitpbXBv
cnQgUmVzb2x2ZXIgZnJvbSAnLi4vLi4vcmVzb2x2ZXInOworaW1wb3J0IGNvbmZpZyBmcm9tICcu
Li8uLi9jb25maWcvZW52aXJvbm1lbnQnOworCitjb25zdCByZXNvbHZlciA9IFJlc29sdmVyLmNy
ZWF0ZSgpOworCityZXNvbHZlci5uYW1lc3BhY2UgPSB7CisgICAgbW9kdWxlUHJlZml4OiBjb25m
aWcubW9kdWxlUHJlZml4LAorICAgIHBvZE1vZHVsZVByZWZpeDogY29uZmlnLnBvZE1vZHVsZVBy
ZWZpeAorfTsKKworZXhwb3J0IGRlZmF1bHQgcmVzb2x2ZXI7CmRpZmYgLS1naXQgYS9QZXJmb3Jt
YW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFt
cGxlcy9lbWJlcmpzL3Rlc3RzL2hlbHBlcnMvc3RhcnQtYXBwLmpzIGIvUGVyZm9ybWFuY2VUZXN0
cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1i
ZXJqcy90ZXN0cy9oZWxwZXJzL3N0YXJ0LWFwcC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kZDVmNmE2MzYxYWY3
ZWRiYzQ4ODRkMzA4ZDQyYmU4OTBmZWI5NzQ5Ci0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFu
Y2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBs
ZXMvZW1iZXJqcy90ZXN0cy9oZWxwZXJzL3N0YXJ0LWFwcC5qcwpAQCAtMCwwICsxLDE4IEBACitp
bXBvcnQgRW1iZXIgZnJvbSAnZW1iZXInOworaW1wb3J0IEFwcGxpY2F0aW9uIGZyb20gJy4uLy4u
L2FwcCc7CitpbXBvcnQgY29uZmlnIGZyb20gJy4uLy4uL2NvbmZpZy9lbnZpcm9ubWVudCc7CisK
K2V4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0YXJ0QXBwKGF0dHJzKSB7CisgICAgbGV0IGFwcGxp
Y2F0aW9uOworCisgICAgLy8gdXNlIGRlZmF1bHRzLCBidXQgeW91IGNhbiBvdmVycmlkZQorICAg
IGxldCBhdHRyaWJ1dGVzID0gRW1iZXIuYXNzaWduKHt9LCBjb25maWcuQVBQLCBhdHRycyk7CisK
KyAgICBFbWJlci5ydW4oKCkgPT4geworICAgICAgICBhcHBsaWNhdGlvbiA9IEFwcGxpY2F0aW9u
LmNyZWF0ZShhdHRyaWJ1dGVzKTsKKyAgICAgICAgYXBwbGljYXRpb24uc2V0dXBGb3JUZXN0aW5n
KCk7CisgICAgICAgIGFwcGxpY2F0aW9uLmluamVjdFRlc3RIZWxwZXJzKCk7CisgICAgfSk7CisK
KyAgICByZXR1cm4gYXBwbGljYXRpb247Cit9CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJl
cmpzL3Rlc3RzL2luZGV4Lmh0bWwgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291
cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL3Rlc3RzL2luZGV4Lmh0
bWwKaW5kZXggMmFiMjE4ZTdhOTU0M2VmMjBhY2Q0YTNlNzZlZTVhNTcwNjM2MzUxMy4uMTEyNzg3
ZjU3MGY5MDI2OWFlYzFhMzc2ZjdlZDZlNWY3NGViMGIyMSAxMDA2NDQKLS0tIGEvUGVyZm9ybWFu
Y2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBs
ZXMvZW1iZXJqcy90ZXN0cy9pbmRleC5odG1sCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRv
bWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvdGVz
dHMvaW5kZXguaHRtbApAQCAtNywzNSArNywyNyBAQAogICAgIDxtZXRhIG5hbWU9ImRlc2NyaXB0
aW9uIiBjb250ZW50PSIiPgogICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0
aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MSI+CiAKLSAgICA8YmFzZSBocmVmPSIvIiAv
PgotPG1ldGEgbmFtZT0idG9kb212Yy9jb25maWcvZW52aXJvbm1lbnQiIGNvbnRlbnQ9IiU3QiUy
Mm1vZHVsZVByZWZpeCUyMiUzQSUyMnRvZG9tdmMlMjIlMkMlMjJlbnZpcm9ubWVudCUyMiUzQSUy
MnRlc3QlMjIlMkMlMjJiYXNlVVJMJTIyJTNBJTIyLyUyMiUyQyUyMmxvY2F0aW9uVHlwZSUyMiUz
QSUyMm5vbmUlMjIlMkMlMjJFbWJlckVOViUyMiUzQSU3QiUyMkZFQVRVUkVTJTIyJTNBJTdCJTdE
JTdEJTJDJTIyQVBQJTIyJTNBJTdCJTIyTE9HX0FDVElWRV9HRU5FUkFUSU9OJTIyJTNBZmFsc2Ul
MkMlMjJMT0dfVklFV19MT09LVVBTJTIyJTNBZmFsc2UlMkMlMjJyb290RWxlbWVudCUyMiUzQSUy
MiUyM2VtYmVyLXRlc3RpbmclMjIlMkMlMjJuYW1lJTIyJTNBJTIydG9kb212YyUyMiUyQyUyMnZl
cnNpb24lMjIlM0ElMjIwLjAuMCslMjIlN0QlMkMlMjJleHBvcnRBcHBsaWNhdGlvbkdsb2JhbCUy
MiUzQXRydWUlN0QiIC8+Ci0gICAgCisgICAge3tjb250ZW50LWZvciAiaGVhZCJ9fQorICAgIHt7
Y29udGVudC1mb3IgInRlc3QtaGVhZCJ9fQogCi0gICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBo
cmVmPSJhc3NldHMvdmVuZG9yLmNzcyI+Ci0gICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVm
PSJhc3NldHMvdG9kb212Yy5jc3MiPgotICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0i
YXNzZXRzL3Rlc3Qtc3VwcG9ydC5jc3MiPgorICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJl
Zj0ie3tyb290VVJMfX1hc3NldHMvdmVuZG9yLmNzcyI+CisgICAgPGxpbmsgcmVsPSJzdHlsZXNo
ZWV0IiBocmVmPSJ7e3Jvb3RVUkx9fWFzc2V0cy90b2RvbXZjLmNzcyI+CisgICAgPGxpbmsgcmVs
PSJzdHlsZXNoZWV0IiBocmVmPSJ7e3Jvb3RVUkx9fWFzc2V0cy90ZXN0LXN1cHBvcnQuY3NzIj4K
IAotICAgIAotICAgIAorICAgIHt7Y29udGVudC1mb3IgImhlYWQtZm9vdGVyIn19CisgICAge3tj
b250ZW50LWZvciAidGVzdC1oZWFkLWZvb3RlciJ9fQogICA8L2hlYWQ+CiAgIDxib2R5PgotICAg
IAotICAgIDxkaXYgaWQ9InF1bml0Ij48L2Rpdj4KLTxkaXYgaWQ9InF1bml0LWZpeHR1cmUiPjwv
ZGl2PgorICAgIHt7Y29udGVudC1mb3IgImJvZHkifX0KKyAgICB7e2NvbnRlbnQtZm9yICJ0ZXN0
LWJvZHkifX0KIAotPGRpdiBpZD0iZW1iZXItdGVzdGluZy1jb250YWluZXIiPgotICA8ZGl2IGlk
PSJlbWJlci10ZXN0aW5nIj48L2Rpdj4KLTwvZGl2PgorICAgIDxzY3JpcHQgc3JjPSIvdGVzdGVt
LmpzIiBpbnRlZ3JpdHk9IiI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9Int7cm9vdFVSTH19
YXNzZXRzL3ZlbmRvci5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9Int7cm9vdFVSTH19
YXNzZXRzL3Rlc3Qtc3VwcG9ydC5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9Int7cm9v
dFVSTH19YXNzZXRzL3RvZG9tdmMuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJ7e3Jv
b3RVUkx9fWFzc2V0cy90ZXN0cy5qcyI+PC9zY3JpcHQ+CiAKLQotICAgIDxzY3JpcHQgc3JjPSJ0
ZXN0ZW0uanMiIGludGVncml0eT0iIj48L3NjcmlwdD4KLSAgICA8c2NyaXB0IHNyYz0iYXNzZXRz
L3ZlbmRvci5qcyI+PC9zY3JpcHQ+Ci0gICAgPHNjcmlwdCBzcmM9ImFzc2V0cy90ZXN0LXN1cHBv
cnQuanMiPjwvc2NyaXB0PgotICAgIDxzY3JpcHQgc3JjPSJhc3NldHMvdG9kb212Yy5qcyI+PC9z
Y3JpcHQ+Ci0gICAgPHNjcmlwdCBzcmM9ImFzc2V0cy90ZXN0cy5qcyI+PC9zY3JpcHQ+Ci0gICAg
PHNjcmlwdCBzcmM9ImFzc2V0cy90ZXN0LWxvYWRlci5qcyI+PC9zY3JpcHQ+Ci0KLSAgICAKLSAg
ICA8c2NyaXB0PkVtYmVyLmFzc2VydCgnVGhlIHRlc3RzIGZpbGUgd2FzIG5vdCBsb2FkZWQuIE1h
a2Ugc3VyZSB5b3VyIHRlc3RzIGluZGV4Lmh0bWwgaW5jbHVkZXMgImFzc2V0cy90ZXN0cy5qcyIu
JywgRW1iZXJFTlYuVEVTVFNfRklMRV9MT0FERUQpOzwvc2NyaXB0PgorICAgIHt7Y29udGVudC1m
b3IgImJvZHktZm9vdGVyIn19CisgICAge3tjb250ZW50LWZvciAidGVzdC1ib2R5LWZvb3RlciJ9
fQogICA8L2JvZHk+CiA8L2h0bWw+CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVk
b21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL3Rl
c3RzL3Rlc3QtaGVscGVyLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJj
ZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy90ZXN0cy90ZXN0LWhlbHBl
ci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5kYzk5NjFmZDU2YTEyYjdlZTJiMmQ4YzE3NTIwZWZkYTNkNmEwZDc5
Ci0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJj
ZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy90ZXN0cy90ZXN0LWhlbHBl
ci5qcwpAQCAtMCwwICsxLDYgQEAKK2ltcG9ydCByZXNvbHZlciBmcm9tICcuL2hlbHBlcnMvcmVz
b2x2ZXInOworaW1wb3J0IHsKKyAgICBzZXRSZXNvbHZlcgorfSBmcm9tICdlbWJlci1xdW5pdCc7
CisKK3NldFJlc29sdmVyKHJlc29sdmVyKTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMv
U3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVy
anMvdmVuZG9yL2Jhc2UuY3NzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJj
ZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvZW1iZXJqcy92ZW5kb3IvYmFzZS5jc3MK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNGQyNWQzYzg0YWM2YzZhZWYyNmI5NjgzYTJiYzEwYzYxZjk2MGM4ZgotLS0g
L2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3Rv
ZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvdmVuZG9yL2Jhc2UuY3NzCkBAIC0w
LDAgKzEsMTQxIEBACitociB7CisgICAgbWFyZ2luOiAyMHB4IDA7CisgICAgYm9yZGVyOiAwOwor
ICAgIGJvcmRlci10b3A6IDFweCBkYXNoZWQgI2M1YzVjNTsKKyAgICBib3JkZXItYm90dG9tOiAx
cHggZGFzaGVkICNmN2Y3Zjc7Cit9CisKKy5sZWFybiBhIHsKKyAgICBmb250LXdlaWdodDogbm9y
bWFsOworICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKKyAgICBjb2xvcjogI2I4M2Y0NTsKK30K
KworLmxlYXJuIGE6aG92ZXIgeworICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworICAg
IGNvbG9yOiAjNzg3ZTdlOworfQorCisubGVhcm4gaDMsCisubGVhcm4gaDQsCisubGVhcm4gaDUg
eworICAgIG1hcmdpbjogMTBweCAwOworICAgIGZvbnQtd2VpZ2h0OiA1MDA7CisgICAgbGluZS1o
ZWlnaHQ6IDEuMjsKKyAgICBjb2xvcjogIzAwMDsKK30KKworLmxlYXJuIGgzIHsKKyAgICBmb250
LXNpemU6IDI0cHg7Cit9CisKKy5sZWFybiBoNCB7CisgICAgZm9udC1zaXplOiAxOHB4OworfQor
CisubGVhcm4gaDUgeworICAgIG1hcmdpbi1ib3R0b206IDA7CisgICAgZm9udC1zaXplOiAxNHB4
OworfQorCisubGVhcm4gdWwgeworICAgIHBhZGRpbmc6IDA7CisgICAgbWFyZ2luOiAwIDAgMzBw
eCAyNXB4OworfQorCisubGVhcm4gbGkgeworICAgIGxpbmUtaGVpZ2h0OiAyMHB4OworfQorCisu
bGVhcm4gcCB7CisgICAgZm9udC1zaXplOiAxNXB4OworICAgIGZvbnQtd2VpZ2h0OiAzMDA7Cisg
ICAgbGluZS1oZWlnaHQ6IDEuMzsKKyAgICBtYXJnaW4tdG9wOiAwOworICAgIG1hcmdpbi1ib3R0
b206IDA7Cit9CisKKyNpc3N1ZS1jb3VudCB7CisgICAgZGlzcGxheTogbm9uZTsKK30KKworLnF1
b3RlIHsKKyAgICBib3JkZXI6IG5vbmU7CisgICAgbWFyZ2luOiAyMHB4IDAgNjBweCAwOworfQor
CisucXVvdGUgcCB7CisgICAgZm9udC1zdHlsZTogaXRhbGljOworfQorCisucXVvdGUgcDpiZWZv
cmUgeworICAgIGNvbnRlbnQ6ICfigJwnOworICAgIGZvbnQtc2l6ZTogNTBweDsKKyAgICBvcGFj
aXR5OiAuMTU7CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIHRvcDogLTIwcHg7CisgICAg
bGVmdDogM3B4OworfQorCisucXVvdGUgcDphZnRlciB7CisgICAgY29udGVudDogJ+KAnSc7Cisg
ICAgZm9udC1zaXplOiA1MHB4OworICAgIG9wYWNpdHk6IC4xNTsKKyAgICBwb3NpdGlvbjogYWJz
b2x1dGU7CisgICAgYm90dG9tOiAtNDJweDsKKyAgICByaWdodDogM3B4OworfQorCisucXVvdGUg
Zm9vdGVyIHsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgYm90dG9tOiAtNDBweDsKKyAg
ICByaWdodDogMDsKK30KKworLnF1b3RlIGZvb3RlciBpbWcgeworICAgIGJvcmRlci1yYWRpdXM6
IDNweDsKK30KKworLnF1b3RlIGZvb3RlciBhIHsKKyAgICBtYXJnaW4tbGVmdDogNXB4OworICAg
IHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Cit9CisKKy5zcGVlY2gtYnViYmxlIHsKKyAgICBwb3Np
dGlvbjogcmVsYXRpdmU7CisgICAgcGFkZGluZzogMTBweDsKKyAgICBiYWNrZ3JvdW5kOiByZ2Jh
KDAsIDAsIDAsIC4wNCk7CisgICAgYm9yZGVyLXJhZGl1czogNXB4OworfQorCisuc3BlZWNoLWJ1
YmJsZTphZnRlciB7CisgICAgY29udGVudDogJyc7CisgICAgcG9zaXRpb246IGFic29sdXRlOwor
ICAgIHRvcDogMTAwJTsKKyAgICByaWdodDogMzBweDsKKyAgICBib3JkZXI6IDEzcHggc29saWQg
dHJhbnNwYXJlbnQ7CisgICAgYm9yZGVyLXRvcC1jb2xvcjogcmdiYSgwLCAwLCAwLCAuMDQpOwor
fQorCisubGVhcm4tYmFyID4gLmxlYXJuIHsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAg
d2lkdGg6IDI3MnB4OworICAgIHRvcDogOHB4OworICAgIGxlZnQ6IC0zMDBweDsKKyAgICBwYWRk
aW5nOiAxMHB4OworICAgIGJvcmRlci1yYWRpdXM6IDVweDsKKyAgICBiYWNrZ3JvdW5kLWNvbG9y
OiByZ2JhKDI1NSwgMjU1LCAyNTUsIC42KTsKKyAgICB0cmFuc2l0aW9uLXByb3BlcnR5OiBsZWZ0
OworICAgIHRyYW5zaXRpb24tZHVyYXRpb246IDUwMG1zOworfQorCitAbWVkaWEgKG1pbi13aWR0
aDogODk5cHgpIHsKKyAgICAubGVhcm4tYmFyIHsKKyAgICAgICAgd2lkdGg6IGF1dG87CisgICAg
ICAgIHBhZGRpbmctbGVmdDogMzAwcHg7CisgICAgfQorCisgICAgLmxlYXJuLWJhciA+IC5sZWFy
biB7CisgICAgICAgIGxlZnQ6IDhweDsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5j
ZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxl
cy9lbWJlcmpzL3ZlbmRvci9pbmRleC5jc3MgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVy
L3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9lbWJlcmpzL3ZlbmRvci9p
bmRleC5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMTdlYTE4MDE2MTIxMjZmMWRiNjVjZTA1NjhmMmEwMjM3M2I5
M2I1NQotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVz
b3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2VtYmVyanMvdmVuZG9yL2luZGV4
LmNzcwpAQCAtMCwwICsxLDM3OCBAQAoraHRtbCwKK2JvZHkgeworICAgIG1hcmdpbjogMDsKKyAg
ICBwYWRkaW5nOiAwOworfQorCitidXR0b24geworICAgIG1hcmdpbjogMDsKKyAgICBwYWRkaW5n
OiAwOworICAgIGJvcmRlcjogMDsKKyAgICBiYWNrZ3JvdW5kOiBub25lOworICAgIGZvbnQtc2l6
ZTogMTAwJTsKKyAgICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7CisgICAgZm9udC1mYW1pbHk6
IGluaGVyaXQ7CisgICAgZm9udC13ZWlnaHQ6IGluaGVyaXQ7CisgICAgY29sb3I6IGluaGVyaXQ7
CisgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOworICAgIGFwcGVhcmFuY2U6IG5vbmU7Cisg
ICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7CisgICAgLW1vei1mb250LXNt
b290aGluZzogYW50aWFsaWFzZWQ7CisgICAgZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOwor
fQorCitib2R5IHsKKyAgICBmb250OiAxNHB4ICdIZWx2ZXRpY2EgTmV1ZScsIEhlbHZldGljYSwg
QXJpYWwsIHNhbnMtc2VyaWY7CisgICAgbGluZS1oZWlnaHQ6IDEuNGVtOworICAgIGJhY2tncm91
bmQ6ICNmNWY1ZjU7CisgICAgY29sb3I6ICM0ZDRkNGQ7CisgICAgbWluLXdpZHRoOiAyMzBweDsK
KyAgICBtYXgtd2lkdGg6IDU1MHB4OworICAgIG1hcmdpbjogMCBhdXRvOworICAgIC13ZWJraXQt
Zm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOworICAgIC1tb3otZm9udC1zbW9vdGhpbmc6IGFu
dGlhbGlhc2VkOworICAgIGZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKKyAgICBmb250LXdl
aWdodDogMzAwOworfQorCitidXR0b24sCitpbnB1dFt0eXBlPSJjaGVja2JveCJdIHsKKyAgICBv
dXRsaW5lOiBub25lOworfQorCisuaGlkZGVuIHsKKyAgICBkaXNwbGF5OiBub25lOworfQorCisj
dG9kb2FwcCB7CisgICAgYmFja2dyb3VuZDogI2ZmZjsKKyAgICBtYXJnaW46IDEzMHB4IDAgNDBw
eCAwOworICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICBib3gtc2hhZG93OiAwIDJweCA0cHgg
MCByZ2JhKDAsIDAsIDAsIDAuMiksCisgICAgICAgICAgICAgICAgMCAyNXB4IDUwcHggMCByZ2Jh
KDAsIDAsIDAsIDAuMSk7Cit9CisKKyN0b2RvYXBwIGlucHV0Ojotd2Via2l0LWlucHV0LXBsYWNl
aG9sZGVyIHsKKyAgICBmb250LXN0eWxlOiBpdGFsaWM7CisgICAgZm9udC13ZWlnaHQ6IDMwMDsK
KyAgICBjb2xvcjogI2U2ZTZlNjsKK30KKworI3RvZG9hcHAgaW5wdXQ6Oi1tb3otcGxhY2Vob2xk
ZXIgeworICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKKyAgICBmb250LXdlaWdodDogMzAwOworICAg
IGNvbG9yOiAjZTZlNmU2OworfQorCisjdG9kb2FwcCBpbnB1dDo6aW5wdXQtcGxhY2Vob2xkZXIg
eworICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKKyAgICBmb250LXdlaWdodDogMzAwOworICAgIGNv
bG9yOiAjZTZlNmU2OworfQorCisjdG9kb2FwcCBoMSB7CisgICAgcG9zaXRpb246IGFic29sdXRl
OworICAgIHRvcDogLTE1NXB4OworICAgIHdpZHRoOiAxMDAlOworICAgIGZvbnQtc2l6ZTogMTAw
cHg7CisgICAgZm9udC13ZWlnaHQ6IDEwMDsKKyAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAg
Y29sb3I6IHJnYmEoMTc1LCA0NywgNDcsIDAuMTUpOworICAgIC13ZWJraXQtdGV4dC1yZW5kZXJp
bmc6IG9wdGltaXplTGVnaWJpbGl0eTsKKyAgICAtbW96LXRleHQtcmVuZGVyaW5nOiBvcHRpbWl6
ZUxlZ2liaWxpdHk7CisgICAgdGV4dC1yZW5kZXJpbmc6IG9wdGltaXplTGVnaWJpbGl0eTsKK30K
KworI25ldy10b2RvLAorLmVkaXQgeworICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICBtYXJn
aW46IDA7CisgICAgd2lkdGg6IDEwMCU7CisgICAgZm9udC1zaXplOiAyNHB4OworICAgIGZvbnQt
ZmFtaWx5OiBpbmhlcml0OworICAgIGZvbnQtd2VpZ2h0OiBpbmhlcml0OworICAgIGxpbmUtaGVp
Z2h0OiAxLjRlbTsKKyAgICBib3JkZXI6IDA7CisgICAgb3V0bGluZTogbm9uZTsKKyAgICBjb2xv
cjogaW5oZXJpdDsKKyAgICBwYWRkaW5nOiA2cHg7CisgICAgYm9yZGVyOiAxcHggc29saWQgIzk5
OTsKKyAgICBib3gtc2hhZG93OiBpbnNldCAwIC0xcHggNXB4IDAgcmdiYSgwLCAwLCAwLCAwLjIp
OworICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CisgICAgLXdlYmtpdC1mb250LXNtb290aGlu
ZzogYW50aWFsaWFzZWQ7CisgICAgLW1vei1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7Cisg
ICAgZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOworfQorCisjbmV3LXRvZG8geworICAgIHBh
ZGRpbmc6IDE2cHggMTZweCAxNnB4IDYwcHg7CisgICAgYm9yZGVyOiBub25lOworICAgIGJhY2tn
cm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4wMDMpOworICAgIGJveC1zaGFkb3c6IGluc2V0IDAgLTJw
eCAxcHggcmdiYSgwLDAsMCwwLjAzKTsKK30KKworI21haW4geworICAgIHBvc2l0aW9uOiByZWxh
dGl2ZTsKKyAgICB6LWluZGV4OiAyOworICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZTZlNmU2
OworfQorCitsYWJlbFtmb3I9J3RvZ2dsZS1hbGwnXSB7CisgICAgZGlzcGxheTogbm9uZTsKK30K
KworI3RvZ2dsZS1hbGwgeworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB0b3A6IC01NXB4
OworICAgIGxlZnQ6IC0xMnB4OworICAgIHdpZHRoOiA2MHB4OworICAgIGhlaWdodDogMzRweDsK
KyAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAgYm9yZGVyOiBub25lOyAvKiBNb2JpbGUgU2Fm
YXJpICovCit9CisKKyN0b2dnbGUtYWxsOmJlZm9yZSB7CisgICAgY29udGVudDogJ+Kdryc7Cisg
ICAgZm9udC1zaXplOiAyMnB4OworICAgIGNvbG9yOiAjZTZlNmU2OworICAgIHBhZGRpbmc6IDEw
cHggMjdweCAxMHB4IDI3cHg7Cit9CisKKyN0b2dnbGUtYWxsOmNoZWNrZWQ6YmVmb3JlIHsKKyAg
ICBjb2xvcjogIzczNzM3MzsKK30KKworI3RvZG8tbGlzdCB7CisgICAgbWFyZ2luOiAwOworICAg
IHBhZGRpbmc6IDA7CisgICAgbGlzdC1zdHlsZTogbm9uZTsKK30KKworI3RvZG8tbGlzdCBsaSB7
CisgICAgcG9zaXRpb246IHJlbGF0aXZlOworICAgIGZvbnQtc2l6ZTogMjRweDsKKyAgICBib3Jk
ZXItYm90dG9tOiAxcHggc29saWQgI2VkZWRlZDsKK30KKworI3RvZG8tbGlzdCBsaTpsYXN0LWNo
aWxkIHsKKyAgICBib3JkZXItYm90dG9tOiBub25lOworfQorCisjdG9kby1saXN0IGxpLmVkaXRp
bmcgeworICAgIGJvcmRlci1ib3R0b206IG5vbmU7CisgICAgcGFkZGluZzogMDsKK30KKworI3Rv
ZG8tbGlzdCBsaS5lZGl0aW5nIC5lZGl0IHsKKyAgICBkaXNwbGF5OiBibG9jazsKKyAgICB3aWR0
aDogNTA2cHg7CisgICAgcGFkZGluZzogMTNweCAxN3B4IDEycHggMTdweDsKKyAgICBtYXJnaW46
IDAgMCAwIDQzcHg7Cit9CisKKyN0b2RvLWxpc3QgbGkuZWRpdGluZyAudmlldyB7CisgICAgZGlz
cGxheTogbm9uZTsKK30KKworI3RvZG8tbGlzdCBsaSAudG9nZ2xlIHsKKyAgICB0ZXh0LWFsaWdu
OiBjZW50ZXI7CisgICAgd2lkdGg6IDQwcHg7CisgICAgLyogYXV0bywgc2luY2Ugbm9uLVdlYktp
dCBicm93c2VycyBkb2Vzbid0IHN1cHBvcnQgaW5wdXQgc3R5bGluZyAqLworICAgIGhlaWdodDog
YXV0bzsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgdG9wOiAwOworICAgIGJvdHRvbTog
MDsKKyAgICBtYXJnaW46IGF1dG8gMDsKKyAgICBib3JkZXI6IG5vbmU7IC8qIE1vYmlsZSBTYWZh
cmkgKi8KKyAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7CisgICAgYXBwZWFyYW5jZTogbm9u
ZTsKK30KKworI3RvZG8tbGlzdCBsaSAudG9nZ2xlOmFmdGVyIHsKKyAgICBjb250ZW50OiB1cmwo
J2RhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIw
MDAvc3ZnIiB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9Ii0xMCAtMTggMTAwIDEzNSI+
PGNpcmNsZSBjeD0iNTAiIGN5PSI1MCIgcj0iNTAiIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2VkZWRl
ZCIgc3Ryb2tlLXdpZHRoPSIzIi8+PC9zdmc+Jyk7Cit9CisKKyN0b2RvLWxpc3QgbGkgLnRvZ2ds
ZTpjaGVja2VkOmFmdGVyIHsKKyAgICBjb250ZW50OiB1cmwoJ2RhdGE6aW1hZ2Uvc3ZnK3htbDt1
dGY4LDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iNDAiIGhl
aWdodD0iNDAiIHZpZXdCb3g9Ii0xMCAtMTggMTAwIDEzNSI+PGNpcmNsZSBjeD0iNTAiIGN5PSI1
MCIgcj0iNTAiIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2JkZGFkNSIgc3Ryb2tlLXdpZHRoPSIzIi8+
PHBhdGggZmlsbD0iIzVkYzJhZiIgZD0iTTcyIDI1TDQyIDcxIDI3IDU2bC00IDQgMjAgMjAgMzQt
NTJ6Ii8+PC9zdmc+Jyk7Cit9CisKKyN0b2RvLWxpc3QgbGkgbGFiZWwgeworICAgIHdoaXRlLXNw
YWNlOiBwcmU7CisgICAgd29yZC1icmVhazogYnJlYWstd29yZDsKKyAgICBwYWRkaW5nOiAxNXB4
IDYwcHggMTVweCAxNXB4OworICAgIG1hcmdpbi1sZWZ0OiA0NXB4OworICAgIGRpc3BsYXk6IGJs
b2NrOworICAgIGxpbmUtaGVpZ2h0OiAxLjI7CisgICAgdHJhbnNpdGlvbjogY29sb3IgMC40czsK
K30KKworI3RvZG8tbGlzdCBsaS5jb21wbGV0ZWQgbGFiZWwgeworICAgIGNvbG9yOiAjZDlkOWQ5
OworICAgIHRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOworfQorCisjdG9kby1saXN0IGxp
IC5kZXN0cm95IHsKKyAgICBkaXNwbGF5OiBub25lOworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsK
KyAgICB0b3A6IDA7CisgICAgcmlnaHQ6IDEwcHg7CisgICAgYm90dG9tOiAwOworICAgIHdpZHRo
OiA0MHB4OworICAgIGhlaWdodDogNDBweDsKKyAgICBtYXJnaW46IGF1dG8gMDsKKyAgICBmb250
LXNpemU6IDMwcHg7CisgICAgY29sb3I6ICNjYzlhOWE7CisgICAgbWFyZ2luLWJvdHRvbTogMTFw
eDsKKyAgICB0cmFuc2l0aW9uOiBjb2xvciAwLjJzIGVhc2Utb3V0OworfQorCisjdG9kby1saXN0
IGxpIC5kZXN0cm95OmhvdmVyIHsKKyAgICBjb2xvcjogI2FmNWI1ZTsKK30KKworI3RvZG8tbGlz
dCBsaSAuZGVzdHJveTphZnRlciB7CisgICAgY29udGVudDogJ8OXJzsKK30KKworI3RvZG8tbGlz
dCBsaTpob3ZlciAuZGVzdHJveSB7CisgICAgZGlzcGxheTogYmxvY2s7Cit9CisKKyN0b2RvLWxp
c3QgbGkgLmVkaXQgeworICAgIGRpc3BsYXk6IG5vbmU7Cit9CisKKyN0b2RvLWxpc3QgbGkuZWRp
dGluZzpsYXN0LWNoaWxkIHsKKyAgICBtYXJnaW4tYm90dG9tOiAtMXB4OworfQorCisjZm9vdGVy
IHsKKyAgICBjb2xvcjogIzc3NzsKKyAgICBwYWRkaW5nOiAxMHB4IDE1cHg7CisgICAgaGVpZ2h0
OiAyMHB4OworICAgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgICBib3JkZXItdG9wOiAxcHggc29s
aWQgI2U2ZTZlNjsKK30KKworI2Zvb3RlcjpiZWZvcmUgeworICAgIGNvbnRlbnQ6ICcnOworICAg
IHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICByaWdodDogMDsKKyAgICBib3R0b206IDA7CisgICAg
bGVmdDogMDsKKyAgICBoZWlnaHQ6IDUwcHg7CisgICAgb3ZlcmZsb3c6IGhpZGRlbjsKKyAgICBi
b3gtc2hhZG93OiAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjIpLAorICAgICAgICAgICAgICAg
IDAgOHB4IDAgLTNweCAjZjZmNmY2LAorICAgICAgICAgICAgICAgIDAgOXB4IDFweCAtM3B4IHJn
YmEoMCwgMCwgMCwgMC4yKSwKKyAgICAgICAgICAgICAgICAwIDE2cHggMCAtNnB4ICNmNmY2ZjYs
CisgICAgICAgICAgICAgICAgMCAxN3B4IDJweCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4yKTsKK30K
KworI3RvZG8tY291bnQgeworICAgIGZsb2F0OiBsZWZ0OworICAgIHRleHQtYWxpZ246IGxlZnQ7
Cit9CisKKyN0b2RvLWNvdW50IHN0cm9uZyB7CisgICAgZm9udC13ZWlnaHQ6IDMwMDsKK30KKwor
I2ZpbHRlcnMgeworICAgIG1hcmdpbjogMDsKKyAgICBwYWRkaW5nOiAwOworICAgIGxpc3Qtc3R5
bGU6IG5vbmU7CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIHJpZ2h0OiAwOworICAgIGxl
ZnQ6IDA7Cit9CisKKyNmaWx0ZXJzIGxpIHsKKyAgICBkaXNwbGF5OiBpbmxpbmU7Cit9CisKKyNm
aWx0ZXJzIGxpIGEgeworICAgIGNvbG9yOiBpbmhlcml0OworICAgIG1hcmdpbjogM3B4OworICAg
IHBhZGRpbmc6IDNweCA3cHg7CisgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworICAgIGJvcmRl
cjogMXB4IHNvbGlkIHRyYW5zcGFyZW50OworICAgIGJvcmRlci1yYWRpdXM6IDNweDsKK30KKwor
I2ZpbHRlcnMgbGkgYS5zZWxlY3RlZCwKKyNmaWx0ZXJzIGxpIGE6aG92ZXIgeworICAgIGJvcmRl
ci1jb2xvcjogcmdiYSgxNzUsIDQ3LCA0NywgMC4xKTsKK30KKworI2ZpbHRlcnMgbGkgYS5zZWxl
Y3RlZCB7CisgICAgYm9yZGVyLWNvbG9yOiByZ2JhKDE3NSwgNDcsIDQ3LCAwLjIpOworfQorCisj
Y2xlYXItY29tcGxldGVkLAoraHRtbCAjY2xlYXItY29tcGxldGVkOmFjdGl2ZSB7CisgICAgZmxv
YXQ6IHJpZ2h0OworICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICBsaW5lLWhlaWdodDogMjBw
eDsKKyAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CisgICAgY3Vyc29yOiBwb2ludGVyOworICAg
IHBvc2l0aW9uOiByZWxhdGl2ZTsKK30KKworI2NsZWFyLWNvbXBsZXRlZDpob3ZlciB7CisgICAg
dGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Cit9CisKKyNpbmZvIHsKKyAgICBtYXJnaW46IDY1
cHggYXV0byAwOworICAgIGNvbG9yOiAjYmZiZmJmOworICAgIGZvbnQtc2l6ZTogMTBweDsKKyAg
ICB0ZXh0LXNoYWRvdzogMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7CisgICAgdGV4
dC1hbGlnbjogY2VudGVyOworfQorCisjaW5mbyBwIHsKKyAgICBsaW5lLWhlaWdodDogMTsKK30K
KworI2luZm8gYSB7CisgICAgY29sb3I6IGluaGVyaXQ7CisgICAgdGV4dC1kZWNvcmF0aW9uOiBu
b25lOworICAgIGZvbnQtd2VpZ2h0OiA0MDA7Cit9CisKKyNpbmZvIGE6aG92ZXIgeworICAgIHRl
eHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworfQorCisvKgorICAgIEhhY2sgdG8gcmVtb3ZlIGJh
Y2tncm91bmQgZnJvbSBNb2JpbGUgU2FmYXJpLgorICAgIENhbid0IHVzZSBpdCBnbG9iYWxseSBz
aW5jZSBpdCBkZXN0cm95cyBjaGVja2JveGVzIGluIEZpcmVmb3gKKyovCitAbWVkaWEgc2NyZWVu
IGFuZCAoLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOjApIHsKKyAgICAjdG9nZ2xlLWFs
bCwKKyAgICAjdG9kby1saXN0IGxpIC50b2dnbGUgeworICAgICAgICBiYWNrZ3JvdW5kOiBub25l
OworICAgIH0KKworICAgICN0b2RvLWxpc3QgbGkgLnRvZ2dsZSB7CisgICAgICAgIGhlaWdodDog
NDBweDsKKyAgICB9CisKKyAgICAjdG9nZ2xlLWFsbCB7CisgICAgICAgIC13ZWJraXQtdHJhbnNm
b3JtOiByb3RhdGUoOTBkZWcpOworICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7Cisg
ICAgICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsKKyAgICAgICAgYXBwZWFyYW5jZTogbm9u
ZTsKKyAgICB9Cit9CisKK0BtZWRpYSAobWF4LXdpZHRoOiA0MzBweCkgeworICAgICNmb290ZXIg
eworICAgICAgICBoZWlnaHQ6IDUwcHg7CisgICAgfQorCisgICAgI2ZpbHRlcnMgeworICAgICAg
ICBib3R0b206IDEwcHg7CisgICAgfQorfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>318978</attachid>
            <date>2017-08-24 02:18:58 -0700</date>
            <delta_ts>2017-08-24 02:18:58 -0700</delta_ts>
            <desc>Results before and after applying the patch</desc>
            <filename>results.pdf</filename>
            <type>application/pdf</type>
            <size>96070</size>
            <attacher name="Mathias Bynens">mathias</attacher>
            
              <data encoding="base64">JVBERi0xLjMKJcTl8uXrp/Og0MTGCjQgMCBvYmoKPDwgL0xlbmd0aCA1IDAgUiAvRmlsdGVyIC9G
bGF0ZURlY29kZSA+PgpzdHJlYW0KeAGtW9uOHMcNfe+v6B/IuO8XINBDgsBA3gwIyEOQB0ewLQTa
AI7+H8ghi+RhTbVWO7O2IWj77BQP65BFVtW0fu9/6n/vl/M2bNs59+sx3+Z5HvuXfl+m2yk/BvYl
YdN6m5dl7r/E2G5tsTz2c/+P/r/9gP+PZerXc+3/94tCP/z169h/+tqP+v/XT/08TTC+b916TObI
tG0bjE3gE7/K43bchmHagfmIfr3Cjqn70n/uf+3X4bbwIy/fGTZtt2EcDpgv4+wZtmo7xfa27bdt
hCLhQpHw3lW6vy5wf11gj2MNAycxTknmQNw/S55udSzLtAzgOcbK5hXGseDpyOOfJU+/OpZ5qBfH
UjNiHCvzGRDMaV/W8fInZANyc5+RDhL+G9Jg7XLgDPtGDnAsRSTm9koAB+TcOO7bCkdAKP/hp9Uw
TcvxtkFHCTAWi6TmvG4yKiDEMiDKOU828AJyW+7DMZ7bsJ9gPob9WOapQ87O5zSuey8+rOttg1rB
KE6ccB2LkRi8CCxx2ticJa09d+QE+TjvIsY+rYt4tKhHo/pxnNBgP7skxjItt3mC74GhOASW/LCx
fcrWubEXfuzbsg+b+AG723SIIxInZIRkxzTDkTFN/qVf1gOOjDOdgyOGZVKOpXPEqsggCudwHsOs
kZnmdToXdaRESxxZsf7X5eDs4ciJQjZmTMplwXIUODY50tgLRSJNy8KRDCkrSNw4kWsLCmUE4aVf
sQrnIWMoYYElShtbudbYCzdCjxV5Mq2ybhaEaj0OCYx0g20ZdwYBjmzI1GHEUqa4xOiIj83Bcoz2
whHNC8nUQzJ2klxJGbKuSNUZ9SVI4ci53KZzHbMxxyrSGJucC4yTkIIpGSKLVxMUiSqrFI6sItOi
ipxI1elAH/OBLz2eb9ORMVR+w3IY1hibHAnM7YUismRWTdWiiKQIFy98gyNVirA60xYxctrQ7Fpj
LbzAGhlHkWOVhQNCeKErp5SQUhXV1LaPZy6nIFQolVN2jSinDURb7sP3SnqUU2dkOc3GWE4TZ4y9
wtyeOtJJczusikOEXEE13Wz+VbU0AYgZjfSYqKCJOrCKGsSnlM1d25qWTXFmGWXRzF1VQX0gKyid
yxWUpKyWdI6Y2/NgnCzli64VdYSlPCqeDUSj92pZORJVNTkSY68wt+eOrFK1D1Ukeput2KqE+gRy
CaUtltDEGeXyCnN77ocVDFmdlwXDSignn0sojbGEGqlsUWMsHSHGsWULdvgOzDYdEpiSrpIhrKA+
jhWUvoHTqmreHnJs8i0qqNtzQWamqrQU3XWs9pM4EhXPBiJDvFpmR4ilycfYK8ztFUculmtUOXcZ
zLHjdyzv2jndGErigDiyBOLUzJStxVFWqERCy4VXSxjBBnDL1dKhVC25F49q2UCd7OLVlst/xrLE
TuYctGDbXgfqc6/o43KxdCzvPRNlFMsrjGNLI/1e1Y5S5wNRKGKj6Rg3nziZxlGOpfMK49gSDgnE
Htst2fShodVF04fkoulYLpqkY4E0DMuVGMcWF3DiwX+6D48d+YK9BbYVkhfcOtrAqmjSGAtpciSK
5hXm9iI5pGbifIuc0bpV2gj3v7nyWYZWFVIwLUy+GU2kMfYK4ySKIkdRBFUzrRHb+UmRyJXPHYmN
J42xahppVTXpSGsvFIl26jUKi1VPTdpYq9LnjuQSqVgum4k0SmRyLjBOwtJUd92yXHfNUfnJN+VV
2fSY5rJJYyybyZEom1eY2wtFXt8BR9lzzlxEaYuFlZwx9AJya+aF3jFh2j/8+HXsfvtqtzV6lVQu
bvQaKe5w9CiPFRjXDNwBE7MrpBik907oglKdZTtv91DlmUWdBlpMzx427rNZwqfkSgjFPSzpM5JE
mThTWqZuxNyOKBIj9RLILWOUXQqV30PWbd/tPk/vW7Rq3mG5s39O12cqLi/hVGA+mqBYX9GMqHFA
OigbdVnRZexCMKRWU+WSMPf9sEW1A3JrIgntmVDVlRLF4+cofBi8gNxazeFS53k4JpL4PBiC4DAo
K8eRmIdfPxX901PaCiSp4wKoxexyNdl0weC2G3YorFdnpGjxSf3AODRRuNJBofYs44M1CR3mrjC3
puoXl3WLY3mf7VnqB5SkD4oWozWliCu2on5+hEDxmLSOfYthEtfAPP/zQCszlTErGcRM7spYCkEQ
VCEIFlcNMbjHxGJgSfGweIW5vVoifFI0l3WWLXocAkuiB8sV5vaEhVs/DUT1yE0gb13ybiuC03EH
ZoGgHRcu7zIdywQMBI0xEMQ4NjvvwmUWwxAIekPRafEKc3u1RC5cZjEMd+hkoehkucLcnrLEHWsJ
RH6E7XgM0dPuNbCOO1oPRB5oK6IyZiuCmIkussUW1zCZZGBVIILFhcs7esPUYrlc1lZoOzhaTIEI
FrdXS+TCZZYUiPAmiR4WrzC3pyxxQ1ICkR8x/3gM0S+ujb90vEr2QOSBHogGywQmusgWW3zDJBCB
VYEIiy4cJLrH1KJfrifRw+IV5vZqiVy4zGKY+ugsSfRgucLcnrDwAKSBqB7ljsaPQgwETxuB6Rer
cpUePboaaIFosUzAQJCAgSCWA0GLLhw2j+GyYQgEMYpOi1eY26slcuEyi2EIBFkoOlmuMLenLHEA
LIHIj7AdjyF6uvQKDLsT/yrBVkQ10AORjVlp4udMdJEtjBkmkwysCkRYdOEg0T0mFgNLoofFK8zt
1RK5cJnFMPExWJLowXKFuT1liQNwCUR+hO14DNHTpV9gHS8CPRB5oAeiwTJBCkQccVMgAqsCERZd
OEh0j0kgAkuih8UrzO3VErlwmcUwCUSwJNGD5Qpze8LCw74Gonrkd1CItn3ZLdjd10YB6YsatVGX
Ld80OJbNU3Izn48UmdFWUnbcRcscjpEjX3OGQcYgII7MHC43OfIpgKpR7jB4Abk11cquj+0tF156
aErzMQVg227nsqevmDHLwOyKohpoK6HFZKC/r5JCEMYMQy6TgOGDQHm0XVm0WGYxxSuLKQqZ2Q6A
mcWFu7sw0jNFZkmah8UrzO1JIPB2AWQd5EWnCQeU/IhVxkcGQrBpn9NbGOVzBSslqasGWiBaLBMw
ECRgIIjlQNAiPmmBaLHMwkDQIgNBzO3VErlwWSfDEFoyU3RavMLcnrLEm10lEOlRAhGPKRAL3nbI
NQqX9QJYV/AhvGrL7zBRRv9cvksySykmYpqWaoddrGzfsex6ErqYuwPUg8h/+uUyZfuO0X6+sjP/
k+ZFGo7C4TPuPP01KtkEl9etpCzp61aV9NcYPuLDQnsCFi79YsJf5cohTK/z2V0s580YVfZkOSHd
8gw8UJxBHU1n8c9RtdAcFsnC6GUWD1dmcSxbNEyWRKQtlScLscziQcsshlUW/XOZBZi9tUgWYuX7
grN8SyCvrMT3Bf5TuTifelyc/y7f9eCFuxkvvcl7m3/iY7k0xjL79NL/5WM/4msh+QD+nvtxvU14
n2/qPr7gDl7e6vz4a//P/s8I2oo/xwcg8nDaD/PkP+RfD7Oj+we8PyED/p1G89f+uWkZhnl345t8
/kP/r/7j3/u/fcRLruLfgG/Muqdmhe/9Yl69z6vzec1wfPV5raP5EC4OcGZcsjNv8KFrlF22qfUh
tH3Fhw7iqQ/rgz600cW3SuFDG99XfJAAqg/bgz60OqzbEj5ELB7SAVnCxHhDLFodtnENH57TAeny
kA+tDlia4cNzOmAFPuRDq8OOW4lvr/e35MPPD/rQ6rBvR/jwnA5VoXgqH/DabvjwXD58ercOxz6E
D8/pgAo6opy+MyfO6TUtpEyv5zAsB/5G3VzwvCAJtMQv718VJ14/9Yy8UAFVSJgXbxQLdC/U4tf4
oXvn5NEAcTb4RvtDH1iQa8onc1+98+FndStaxiQfLR71o9RvfZAhn/BRb3mi4yh/8IvR28445wdt
PQAwbNz1F6WZ/gFxXmRbceDcVM8YTUqKMXweMQF1D4KPiOzH/5RW/IYV1q7yZd9rthLcO7afjRHh
Nbbn+v2Kd3CruYGt++HHOzZsSHSO6GkPzA1VtKv3TOuOf3+Tlbycm7O9V8ltxpdx32UTJYWRbM8p
iX8x0bBdKympisx+l5L7PDVs2IRexE0Ww2Nxa3Nyx7+WepuSsvzQbd+Vk8eME/5d3K6VlLmR7Y37
+LucPHCTeM/WKilZInNDAX8gbq2SOH1csdnhwWuJs713dY+oo6CLwmV9ApUxFS5JfimlXABvFBIH
oq46EOF7O+0IRlPqox6IZmRgdB+8cRllPtoSan0p2HG00fZVdRKv/NFOll+9yXiDiQ5r/cNsRiNB
A9GGLC5ER5QO7Z05eo7s6dQF59AHaVXiE4aEx6MsaIQshg6QVFuW9AX5447Lw+D24uOzcGvvk4aN
s4sqNf2SXFyR6fF5NSmdUDqiRu6OAnzW/PCp4dENV7v5jQboAS47v7tiI81PFiST9i151C6RaIDO
dtkkhE3mTrbnynY0wMTWFhthE8UfW/6vNMDE1hYbYZOcemxFtkpGA3wTG5vEc0pGA0xs10rKkiDb
W7KkVTIaYGK7VlIz5Z1lOxrgd9kkS3AF8sc0wMR2reRTdftbDTCxXSv5+ApoczIaYM121wB9vbG5
P5eT3gDvyOoG6GQPL+6mAe74R25yJGobYFwCRtfRMyGopRtqQ5MOsKJzRJ2f4X18PBobD1YotmyA
zXFJZiX7iOgFyBU5XGkP8n4onUoLmySS/FJGwAUtrfI7+VnCjnI0FIrSWXSg9B+p+PhdtK1wWFvW
o72nzZfoPbW2qfeIe/JHvGHFfC5fovcktnrlmRgqFNf5czUsek9iq1eesElYZG6PVcxWyTh8fZdN
koBze07J6D2JrVVS5vdH1LDoPYmtVVJ6quTrYwu9VTJ6z6tsninvVTJ6T2JrldSdF+aGFffAAaXt
q3H4SmytkpKTUh4eO8a2Ssbh61U2mVvN9lxORu9JbFAy9R6JmfwRNvae51Y3yqIevhIZhLwg0+kx
bD/9H5YA448KZW5kc3RyZWFtCmVuZG9iago1IDAgb2JqCjM3NDkKZW5kb2JqCjIgMCBvYmoKPDwg
L1R5cGUgL1BhZ2UgL1BhcmVudCAzIDAgUiAvUmVzb3VyY2VzIDYgMCBSIC9Db250ZW50cyA0IDAg
UiAvTWVkaWFCb3ggWzAgMCA4NDIgNTk1XQo+PgplbmRvYmoKNiAwIG9iago8PCAvUHJvY1NldCBb
IC9QREYgL1RleHQgXSAvQ29sb3JTcGFjZSA8PCAvQ3MxIDcgMCBSID4+IC9FeHRHU3RhdGUgPDwg
L0dzMQoxMCAwIFIgL0dzMiAxMSAwIFIgPj4gL0ZvbnQgPDwgL0cxIDggMCBSIC9HMiA5IDAgUiA+
PiA+PgplbmRvYmoKMTAgMCBvYmoKPDwgL1R5cGUgL0V4dEdTdGF0ZSAvY2EgMC4xNDkgPj4KZW5k
b2JqCjExIDAgb2JqCjw8IC9UeXBlIC9FeHRHU3RhdGUgL2NhIDEgPj4KZW5kb2JqCjEyIDAgb2Jq
Cjw8IC9MZW5ndGggMTMgMCBSIC9OIDMgL0FsdGVybmF0ZSAvRGV2aWNlUkdCIC9GaWx0ZXIgL0Zs
YXRlRGVjb2RlID4+CnN0cmVhbQp4AZ2Wd1RT2RaHz703vdASIiAl9Bp6CSDSO0gVBFGJSYBQAoaE
JnZEBUYUESlWZFTAAUeHImNFFAuDgmLXCfIQUMbBUURF5d2MawnvrTXz3pr9x1nf2ee319ln733X
ugBQ/IIEwnRYAYA0oVgU7uvBXBITy8T3AhgQAQ5YAcDhZmYER/hEAtT8vT2ZmahIxrP27i6AZLvb
LL9QJnPW/3+RIjdDJAYACkXVNjx+JhflApRTs8UZMv8EyvSVKTKGMTIWoQmirCLjxK9s9qfmK7vJ
mJcm5KEaWc4ZvDSejLtQ3pol4aOMBKFcmCXgZ6N8B2W9VEmaAOX3KNPT+JxMADAUmV/M5yahbIky
RRQZ7onyAgAIlMQ5vHIOi/k5aJ4AeKZn5IoEiUliphHXmGnl6Mhm+vGzU/liMSuUw03hiHhMz/S0
DI4wF4Cvb5ZFASVZbZloke2tHO3tWdbmaPm/2d8eflP9Pch6+1XxJuzPnkGMnlnfbOysL70WAPYk
Wpsds76VVQC0bQZA5eGsT+8gAPIFALTenPMehmxeksTiDCcLi+zsbHMBn2suK+g3+5+Cb8q/hjn3
mcvu+1Y7phc/gSNJFTNlReWmp6ZLRMzMDA6Xz2T99xD/48A5ac3Jwyycn8AX8YXoVVHolAmEiWi7
hTyBWJAuZAqEf9Xhfxg2JwcZfp1rFGh1XwB9hTlQuEkHyG89AEMjAyRuP3oCfetbEDEKyL68aK2R
r3OPMnr+5/ofC1yKbuFMQSJT5vYMj2RyJaIsGaPfhGzBAhKQB3SgCjSBLjACLGANHIAzcAPeIACE
gEgQA5YDLkgCaUAEskE+2AAKQTHYAXaDanAA1IF60AROgjZwBlwEV8ANcAsMgEdACobBSzAB3oFp
CILwEBWiQaqQFqQPmULWEBtaCHlDQVA4FAPFQ4mQEJJA+dAmqBgqg6qhQ1A99CN0GroIXYP6oAfQ
IDQG/QF9hBGYAtNhDdgAtoDZsDscCEfCy+BEeBWcBxfA2+FKuBY+DrfCF+Eb8AAshV/CkwhAyAgD
0UZYCBvxREKQWCQBESFrkSKkAqlFmpAOpBu5jUiRceQDBoehYZgYFsYZ44dZjOFiVmHWYkow1Zhj
mFZMF+Y2ZhAzgfmCpWLVsaZYJ6w/dgk2EZuNLcRWYI9gW7CXsQPYYew7HA7HwBniHHB+uBhcMm41
rgS3D9eMu4Drww3hJvF4vCreFO+CD8Fz8GJ8Ib4Kfxx/Ht+PH8a/J5AJWgRrgg8hliAkbCRUEBoI
5wj9hBHCNFGBqE90IoYQecRcYimxjthBvEkcJk6TFEmGJBdSJCmZtIFUSWoiXSY9Jr0hk8k6ZEdy
GFlAXk+uJJ8gXyUPkj9QlCgmFE9KHEVC2U45SrlAeUB5Q6VSDahu1FiqmLqdWk+9RH1KfS9HkzOX
85fjya2Tq5FrleuXeyVPlNeXd5dfLp8nXyF/Sv6m/LgCUcFAwVOBo7BWoUbhtMI9hUlFmqKVYohi
mmKJYoPiNcVRJbySgZK3Ek+pQOmw0iWlIRpC06V50ri0TbQ62mXaMB1HN6T705PpxfQf6L30CWUl
ZVvlKOUc5Rrls8pSBsIwYPgzUhmljJOMu4yP8zTmuc/jz9s2r2le/7wplfkqbip8lSKVZpUBlY+q
TFVv1RTVnaptqk/UMGomamFq2Wr71S6rjc+nz3eez51fNP/k/IfqsLqJerj6avXD6j3qkxqaGr4a
GRpVGpc0xjUZmm6ayZrlmuc0x7RoWgu1BFrlWue1XjCVme7MVGYls4s5oa2u7act0T6k3as9rWOo
s1hno06zzhNdki5bN0G3XLdTd0JPSy9YL1+vUe+hPlGfrZ+kv0e/W3/KwNAg2mCLQZvBqKGKob9h
nmGj4WMjqpGr0SqjWqM7xjhjtnGK8T7jWyawiZ1JkkmNyU1T2NTeVGC6z7TPDGvmaCY0qzW7x6Kw
3FlZrEbWoDnDPMh8o3mb+SsLPYtYi50W3RZfLO0sUy3rLB9ZKVkFWG206rD6w9rEmmtdY33Hhmrj
Y7POpt3mta2pLd92v+19O5pdsN0Wu067z/YO9iL7JvsxBz2HeIe9DvfYdHYou4R91RHr6OG4zvGM
4wcneyex00mn351ZzinODc6jCwwX8BfULRhy0XHhuBxykS5kLoxfeHCh1FXbleNa6/rMTdeN53bE
bcTd2D3Z/bj7Kw9LD5FHi8eUp5PnGs8LXoiXr1eRV6+3kvdi72rvpz46Pok+jT4Tvna+q30v+GH9
Av12+t3z1/Dn+tf7TwQ4BKwJ6AqkBEYEVgc+CzIJEgV1BMPBAcG7gh8v0l8kXNQWAkL8Q3aFPAk1
DF0V+nMYLiw0rCbsebhVeH54dwQtYkVEQ8S7SI/I0shHi40WSxZ3RslHxUXVR01Fe0WXRUuXWCxZ
s+RGjFqMIKY9Fh8bFXskdnKp99LdS4fj7OIK4+4uM1yWs+zacrXlqcvPrpBfwVlxKh4bHx3fEP+J
E8Kp5Uyu9F+5d+UE15O7h/uS58Yr543xXfhl/JEEl4SyhNFEl8RdiWNJrkkVSeMCT0G14HWyX/KB
5KmUkJSjKTOp0anNaYS0+LTTQiVhirArXTM9J70vwzSjMEO6ymnV7lUTokDRkUwoc1lmu5iO/kz1
SIwkmyWDWQuzarLeZ0dln8pRzBHm9OSa5G7LHcnzyft+NWY1d3Vnvnb+hvzBNe5rDq2F1q5c27lO
d13BuuH1vuuPbSBtSNnwy0bLjWUb326K3tRRoFGwvmBos+/mxkK5QlHhvS3OWw5sxWwVbO3dZrOt
atuXIl7R9WLL4oriTyXckuvfWX1X+d3M9oTtvaX2pft34HYId9zd6brzWJliWV7Z0K7gXa3lzPKi
8re7V+y+VmFbcWAPaY9kj7QyqLK9Sq9qR9Wn6qTqgRqPmua96nu37Z3ax9vXv99tf9MBjQPFBz4e
FBy8f8j3UGutQW3FYdzhrMPP66Lqur9nf19/RO1I8ZHPR4VHpcfCj3XVO9TXN6g3lDbCjZLGseNx
x2/94PVDexOr6VAzo7n4BDghOfHix/gf754MPNl5in2q6Sf9n/a20FqKWqHW3NaJtqQ2aXtMe9/p
gNOdHc4dLT+b/3z0jPaZmrPKZ0vPkc4VnJs5n3d+8kLGhfGLiReHOld0Prq05NKdrrCu3suBl69e
8blyqdu9+/xVl6tnrjldO32dfb3thv2N1h67npZf7H5p6bXvbb3pcLP9luOtjr4Ffef6Xfsv3va6
feWO/50bA4sG+u4uvnv/Xtw96X3e/dEHqQ9eP8x6OP1o/WPs46InCk8qnqo/rf3V+Ndmqb307KDX
YM+ziGePhrhDL/+V+a9PwwXPqc8rRrRG6ketR8+M+YzderH0xfDLjJfT44W/Kf6295XRq59+d/u9
Z2LJxPBr0euZP0reqL45+tb2bedk6OTTd2nvpqeK3qu+P/aB/aH7Y/THkensT/hPlZ+NP3d8Cfzy
eCZtZubf94Tz+wplbmRzdHJlYW0KZW5kb2JqCjEzIDAgb2JqCjI2MTIKZW5kb2JqCjcgMCBvYmoK
WyAvSUNDQmFzZWQgMTIgMCBSIF0KZW5kb2JqCjE1IDAgb2JqCjw8IC9MZW5ndGggMTYgMCBSIC9G
aWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4Aa1b24ocyRF976+oH3BvXTLrAkYPNsbgN8GA
H4wfdsVqB6MxyPp/8InMuJzsqumemdIuQl2nK+JEnsiMyMoufe8+d9+7tF37ed6mLq/TdZqmoXvp
ljReN/no2DfCxnydUpq6b257yXuMbZ+7f3b/7Xr8v6axy1vu/vd7gX7564+h+/KjG8r/P7500zjC
+TJf8jpqIOM8z3A2gk/iqpfzeu37cQFmFl0+wtbx8q177r52ub+muOXlgdk4X/uhX+G+2uk1fLV+
qu95Xq7zAEU8hCrhbagRfk4IPyf4C1vFwBlYDEnGELjdGzyXbBjLlHrwrEPj8wgLW/BcgsfuDZ4u
G8Y8oVfYhmaBha2Mp0cyxyXl4fATZgPm5jJhOkj6r5gG+cKJU+yVORC2IWJg5q8msL9u/bDNSDhm
yVpikk+539Y+dWVaDtcZOkqCsVhkak55xkwNCLl0KIY5jWp4AJkvj2FOS583MK/TMC3jfEEM/bIm
LESJIefrDLWaILYeazbVmV0CQxSORVbNlmeJYeHPA8EwIQICET6IIGKMUx63Ksa6QYRlu5AaaUzX
aVw2dhYYBaK2HU3XaefPA5nL8CWQkiCZKEkSBSKZHuOEQAYa/UuX8opAhimCQ5lSjEnDNoILrEkN
0rAJ55pAv6oOCKSEkLH0c1pj3AhhQw0bGJNKWTFOQHJbCsGxJgSUR5kVkoGiAagvacPUSqiLlIaM
RTf1jKFiOUY0bqsYZu/en6UB03xY5owQsBrlP3zKiiENUvznNGCVasxYpXnGxOwJk1LqWAQStkeY
+bNANpuNq5WNEgUKhISRMS0nFBMLA4s0b+k6boRJBXeMKN32CGtTgclYpyDmxbLImp2hBxIh6SmB
bJiW44qmZYYvHa6v48oYyrxjSlqCM1sKZOfP9EgmQ12mMjUgaNr68QJBsIQRRzM/ohJbaNxtgtJN
IzKHwrLW8FfXRhQYeJmXYZOqqcWprIOCccGiIunF7ggzf0WHS10b2zhkKVlNiSorXqmbcqTUgSmN
VHEvUUTtWEMNOshSG9huKkgKoqKYXVSoiI0rVHCGbcQWmPmrU+FAgqa6mARchUwCr1ZE7VXoCGuo
sQhel6BUSC41GkdTkjQOwy60wYiSRHHs/Nlq2ErXkjJ12D+bUmOBcEmyQBwLUrPl4AzjPNYVsZYl
KHEMKAGzlEv0cOnoXKdiCXCdCnGjTlEcXqf2WPgzQR7Vba8rRhp1ip1FnSJStz3CzF9dn3fapxcV
s0AEvpk2LEoUy++mEYBDYVkTEruHZZU6XTKC/SS4ZJXyJg07npl3d/BeINrdxWbXDWOv61AY1hgW
lGX0DcyFxTcTqU4UCYHrnRDKTtc3cuErMIrCbY8wtUVh03LtLSsioi7aVD8Vo6mSJThULN/wEalX
ySMsBqGB1OUqXVTWRpaFm3TBNKXTDLl0GsalU0kx0iiTEUhgYauBvL73LzWci6EpwkWzYCB1jEjd
loJzbBdIpEbqxlj23bL1qhucphqWNKBwwG/d8IWzwCgQr5pHmNrGHJFnjkm6aXn6KJ/oSSQqn5Hy
hi+cxYYvSMP2CDN/Nlm1gskcOdx5cjnU1DRlU1MTmJJipLFdpEB2/iyQ+zutzNVQ42iqpsYRGHG6
LcXm2K0gcz9ho1OqCJZMkodFe2DFmvECaDngchquosRGGG56AJk3FaMc5IDtl7/j8OaPH3okUs5r
6ulIOavxgxJ9LI1nb91Ayjql53s8IDzfnK5gVsl+TrbRethTr6O8mwNuV4axnXmGpZy7yJNB8WzX
mA7lOkYaXkK3wMLOPOOuctJinvVaJlrxDFnnZdFDMz3UOMLMj6gRR1si7qW5RD/So7J4zBDs5pyC
oJKVcFoekIusfKYSUof7kNvd76Dw1gZuQjGHYTyEEFk5SqvXZcO0JX0th0nGHIYFB84oPQXu8AAK
S2hlZzxlctMV0upX8TwUTfwIM/3Np0otjf4GkhMtg0hpb/NHmHkr0pCxTnf2pxI6RNo7hWJlnHbs
FHkjZUwuGoVBNArVuXFH2jOtnleCwrc/VX2+/HaJb0lr338cYaa/+zHJEPotJhlwjOR2giPM/JUU
sLXlYIcxC2XBWSgLjjVZcI+mOY/FMGahRLhHSoRjYftMW72SiNj5iaKXuAzRY691hGkiGkMpRFgJ
OwyJCCxED4IjjBPRWGsi9hizqOiF2c4XFcP8bZh1JbFEJhyPxTBmiUSEx0hEYGELFj/HrIngSyTC
L0l032seYZYINrRE3GIih2MkuhMcYU0i2NoSscOYRUUvzHbKqpgkgpkjEe7RhLt5atDyEmOhRLhH
SoRj5k9Wd2z1ayJ85y+K4mD26Pz39rAWI/A9uSWCDS0Rt5jI4RiJ7s6OsCYRbG2J2GHMQolwFkqE
Y2CORLhHEw6J2GHMQolwj5QIx8yfJCIedUoimstvpePvT8NvDquhZzyTaCLCjwmHbR1icWdl3ySG
hoXo4ewIM39t8CYcsxjGLJGIYIlEBBa2LJEJxyyGMUskIjxGIgILW7D4oVlNBF8iEX6J8evzQDx/
HWGWCDbUFdE4s0T4fSS6P8wdYU0i2FpXRLCEmIGp6DJ3nEUxlKbAwpYlMuGQCGc2DNaOUSKchRLh
WNiCxX/dqIngSyTCL0l0f9g8wiwRbGiJuMVEDsdIdCc4wppEsLUlYocxi4pemO2XE8UkEczspSli
NOGQCGcxjFkoEe6REuFY2D7TrzslEfHoL4pe4jJE90fwA0jT0JiVuf/SutL1EPeF5O7+AOIkNLaa
hD3GP1+p4EiCcyiEHDgEWk9B+DPJ4uiZ3zCI+yIF7jAy4JB5k/Iapxw1AX6uXLS0b/l3YpwHX7e0
0I+5cvRsmKXA/ahoOExonFkK/D7S250dYeaPgy8HG5YE9qhSGnMRzU6ZnIUSo1j4Y5aQPMYSmIhg
L7iQ5u5xj7Htc4cfSCFrL28TlXd6+BIvkfilTnvMGcHGZaJXHRjTRDSGdS20zgRTZ5U+RA+CI4wT
ESy4U0THU8oOw8wPLEQPliPM/EkiGms9R9pjzBKiB4tijYC8IuL9o5oIf5uqKBrfaiJQppaEbSsf
MClgKXAPJhm/KGQYwtb7+JhOPZH+zqUrCLK4fxULa80wnsmG8SpQ/6R89W+eiuwel8kU/nkOh3+S
vbq7AfgXKnlOuHl/CfHvsdDH33OSCeWxFbHZDN+yb0sX+zYs/HgWZXq4rpGjIAiMWSxRzKJY49Hu
Y5bQPFgCYxZNlxwFuHacQnv/7xXMnu7YVjBEyCyWNGYxjON+BZNXA+ExIsR9+rqg/qJUXtQZcTi/
7T7Vg/NRDs6/4wb0lzzhzTJ5OfJPcVkPjfH24peX7i9P3YBfLOUG/D11Q76OeOdg7J5ecAaP6+7p
a/ev7s9YNgl/tk9AcDEt+mFcDck94E94YaL5+jcY2S34Wq3tg/gMVzPu/e1T9+/u6R/d354un0tY
vfys/YbBdLvB4IdHH85lN5wJ8WaLLA8amYfYI5gheTDlbdZQ8M2Cpnn0GPaS3onhAhVLDPmdMex1
yEispfVjOszvjGE/sfKcPIaP6YAJpxPjbbnY6zAP2WP4mA6YLu+KYa8DVqTH8DEdsALfFcNehwVv
zp2bD7++M4a9Dsu8egwf0yEKxUfnw4qXxs7p8OW0DuvSewwf0wEVdEA5PTknNrxd+LoWUqbz1vdp
xd+omwnXCZOg1Pp0flVs693ZgEoozMl6ToLulVriGj5dTg4efQ+PBNL19mVhRB9ImGuFT8aeR7vQ
sLxllFtrRN0g9VtkKiZfSmtUH9BxkD/wNVjbGSa+KK0HAMyGpXxRu+pPyHOa8O8wBjwutSNGcZY+
j5gHCD38ij+oM0//QRt+8+q6tFuJtOKlbWaq05uYZGgyRMzedzDta0me8G9G7jLJmLSfn2NacST7
kEkSixlzimmelgdMpt778rRXb17xTvvdMRkTdgGnxrRM2xuYZGlg33WOSX66fDgmbE0HVJJTTCse
1B4zyXpC8TrFBF3ewCTqoR6fY8LZ78GY9FnAaoRUrLMrFymSX7O8GDUdUIhs6mETfGpI+NdTy2vP
NRPmtXcTvEfpZRttptZdr/D+qFLaUdMZrJJ7e0hfrU9Yw0DHrP4y94PJnoVKY5UGKyF4hxPAOm3E
IT0Y34CjeiwX0m0kJnzhd5ayh+nnQI9ZLwwD7i5/LHC56M2f3z4Zd2FAGopS4+8UYkaS/P7iUgqg
UMgUQTDoctq/hNP5cFf/3g0UNrO3bcYaWpvgmzYjUZydQ97Q7jLJmM8WFW9oD5mQnVPrIltDe8h0
dql7Q3vIdHZM3tAeMp0dkze0h0xnm/RiDe0h09k24w3tVSbZSMm27XSbsYb2KpNU/5+xnjZraC0T
NbSfxWQN7SHR2Uk+dQv+zdcrB3WYbbWhWRex1iLdDQ1KuxA6gddt9HtqOl70/cEHAkVD4/ZVeomU
V9njeKFH1uThp/QU62/SecpDj6RUvhQLhFBSLN/JZ2kdmGB9paiBFkPpJ5IlfJesDXmXLC3ovb1k
vxX2h6NWW+olErLM/7OrzHvJQ6azlcN7yV0mSeDZRxbvJXeZJI9nHyS8l9xlkhp1Vj3vJXeZyvQ/
2Ym9lzxkOque95K7TLIQz+6YvJc8ZPppveQuk6zcs4+W3ktaJuolUiOkUp1dT9ZLHhKReJ//D+jk
qHoKZW5kc3RyZWFtCmVuZG9iagoxNiAwIG9iagozNTA3CmVuZG9iagoxNCAwIG9iago8PCAvVHlw
ZSAvUGFnZSAvUGFyZW50IDMgMCBSIC9SZXNvdXJjZXMgMTcgMCBSIC9Db250ZW50cyAxNSAwIFIg
L01lZGlhQm94ClswIDAgODQyIDU5NV0gPj4KZW5kb2JqCjE3IDAgb2JqCjw8IC9Qcm9jU2V0IFsg
L1BERiAvVGV4dCBdIC9Db2xvclNwYWNlIDw8IC9DczEgNyAwIFIgPj4gL0V4dEdTdGF0ZSA8PCAv
R3MxCjEwIDAgUiAvR3MyIDExIDAgUiA+PiAvRm9udCA8PCAvRzMgMTggMCBSIC9HNCAxOSAwIFIg
Pj4gPj4KZW5kb2JqCjMgMCBvYmoKPDwgL1R5cGUgL1BhZ2VzIC9NZWRpYUJveCBbMCAwIDg0MiA1
OTVdIC9Db3VudCAyIC9LaWRzIFsgMiAwIFIgMTQgMCBSIF0gPj4KZW5kb2JqCjIwIDAgb2JqCjw8
IC9UeXBlIC9DYXRhbG9nIC9QYWdlcyAzIDAgUiAvVmVyc2lvbiAvMS40ID4+CmVuZG9iago5IDAg
b2JqCjw8IC9UeXBlIC9Gb250IC9TdWJ0eXBlIC9UeXBlMCAvRW5jb2RpbmcgL0lkZW50aXR5LUgg
L0Rlc2NlbmRhbnRGb250cyBbMjEgMCBSXQovQmFzZUZvbnQgL1lUVUlDUStmb250MDAwMDAwMDAx
ZjRlZDExNyAvVG9Vbmljb2RlIDIyIDAgUiA+PgplbmRvYmoKMjIgMCBvYmoKPDwgL0xlbmd0aCAy
MyAwIFIgL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCngBXZDNasUgEIX3PsUsbxcXk95t
EMothSz6Q9M+gNFJEJpRJmaRt+9ob1PogILnzKfH0df+saeQQb9xdANmmAJ5xjVu7BBGnAOp9h58
cPl2qppbbFJa4GFfMy49TRG6TgHod0HWzDucHnwc8a5or+yRA81w+rwOVRm2lL5wQcrQKGPA4yTX
Pdv0YhcEXdFz78UPeT8L9dfxsScESSRE+xPJRY9rsg7Z0oyqa6RM9yRlFJL/Z9+gcTq624sRpnVl
vzSV+XULXr56RHMbs6Sq86iBS5BAeIwsxVQeresbnnpx8QplbmRzdHJlYW0KZW5kb2JqCjIzIDAg
b2JqCjIyNQplbmRvYmoKMjEgMCBvYmoKPDwgL1R5cGUgL0ZvbnQgL1N1YnR5cGUgL0NJREZvbnRU
eXBlMiAvQmFzZUZvbnQgL1lUVUlDUStmb250MDAwMDAwMDAxZjRlZDExNwovQ0lEU3lzdGVtSW5m
byA8PCAvUmVnaXN0cnkgKEFkb2JlKSAvT3JkZXJpbmcgKElkZW50aXR5KSAvU3VwcGxlbWVudCAw
ID4+Ci9XIDI0IDAgUiAvRFcgMTAwMCAvRm9udERlc2NyaXB0b3IgMjUgMCBSID4+CmVuZG9iagoy
NCAwIG9iagpbIDE5IDI4IDU1NiBdCmVuZG9iagoyNSAwIG9iago8PCAvVHlwZSAvRm9udERlc2Ny
aXB0b3IgL0ZvbnROYW1lIC9ZVFVJQ1ErZm9udDAwMDAwMDAwMWY0ZWQxMTcgL0ZsYWdzIDQgL0Zv
bnRCQm94ClstNjY1IC0zMjUgMjAwMCAxMDA2XSAvSXRhbGljQW5nbGUgMCAvQXNjZW50IDkwNSAv
RGVzY2VudCAtMjEyIC9DYXBIZWlnaHQKODA1IC9TdGVtViAwIC9MZWFkaW5nIDMzIC9YSGVpZ2h0
IDYwNCAvTWF4V2lkdGggMjAwMCAvRm9udEZpbGUyIDI2IDAgUiA+PgplbmRvYmoKMjYgMCBvYmoK
PDwgL0xlbmd0aCAyNyAwIFIgL0xlbmd0aDEgMzk3NTIgL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4K
c3RyZWFtCngB7b0JeFTV+T/+nnPvnZksk8xk30gmDIRlgGBYA5QMkLAFZA0mlJQgYVcBgztCUGQJ
qKiVIioCdUGUOoSAAWzBulUsauvSal2odbcotUhVYO7/8547NyQRavv/fb/P83t+Txg+5z37+p73
vGeZCQkiiqJa0sgz8+olvm1Zf/oCPvcROSbPXjTn8t9fV7EZ9hPAFXMuu272nKOug0TuKqKUY3Nn
zag+lvT834k6BJGm71x4JPRKaQ/3tXB3mHv5kmun9zkzBVbk16f6soUzZ4j8PgiaCvSZe/mMaxcl
NLhriW6fCw/foitnLer45thDcK8hivmNcYDSgQzjEUrX8yiNyPwE+JRpeJ75KYczlZ8jdWMERDto
l5hHu+gQ/VacQKonaD810O8olYrRrqX0c1pNDlThd7SWJuJjwP/nIt1soHzahn7YRkcR9xJaRgco
RaSZn9FyukV7DaluITe1pyE0nhbSrWKMeRVNo/f1m6kfjaEraJGoNcvN28w7zQfpIdqv/c48SzGU
QTPxOWp+afzZfIe6I8XddA+9L+6M2ktBlFKLmPfTlbRZq9SFOcf8HjXIpWtQB53G0lFxWAaQ+yz6
RKSJpdow5PJLM2Q+i1hZVElzaTMdEH3ECJlrTDPHmkcpBWVci1zvoXrah08j/ZreFrHGCfNB8wSl
UzcahfY00MvisBY+uyJchH4z0EtdqBAhC+k39AK9KvziabnQiDUKjKBxvfk6JdFFVIbaPoKUH4t/
yWX4LNee14ebQykO/XIH9zY9R38VGSJfjBNTZBe5UG7RriQXSrwIn2qah/7ehNzfEwGxT8bKV7Rf
6o/ppx3twsfMOIxIHt1L99PTwo2W+kSNuEm8Kf4mh8np8l75gfZz/VH9j84ZaPXP6HK6lR6jf4kE
0V9MED8Vc8VSsVrcIe4RR8Wr4lM5RE6WC+RX2lxtsfZrfSg+k/Qa/WZjlbHO8Wm4PPxs+A/hf5kF
5iqaAH5YgdrfTVvQsv30Cr2Fz/v0gTBEjIjDxydyRZm4AZ9l4laxXewQj4oGlPKq+EB8Jr4W34jT
kvBxyEyZK9vj45dXymvkz+V98hV8XpV/l99pqVp7LaD10QZpFdpC1Gq1tgGfvdpf9Qz9Fd1EPxcY
G40HjB3GY8ZvjROOWOdNLnL9/swvz3Y9+16YwmvCG8P14Qbzr5SMMcxAL+TQINR+Bj7zMd4bwXFP
0GsiFn2XIbqKwWIMema6mC8Wi2vRkyvFZvGQqvuvxFPopT+Jr1Bnt8xSde4h+8ihchw+P5Oz5GK5
Qd4pG+Sb8nvNqcVo8Vqy1lUboVVqs7Ql2nXaRi2k/V57V/tAO6WdwcfUo/Ucvb2epwf0Efp0/Sp9
i/6J/okxzXjJ+MgR7bjcscrR6PiHs69zsHO8c4Kz0nm7c5/zdVcVuPMZ2ktPggOb/olj2gqtRNtL
t8leerp8Wb4Mfp5O1dpYCU6VO8QaeaNokB2Max0D5UBxMZ3Q89DXz8sH5Ck5UBsrSsUkmi8vsjJ0
JOk7YRukP0PH9afQtpeR87WOWLFMfuWIpXpBspBIPKf11APaS/S29r5w6tvoL3q0SBXH5SPaeHDB
r/XBRjnlavfRr7TF4kbaK0uIok+71oOPLxY7IRcmiwLxrWaSJi8GF/XT/kY30wL5ZzqOebyGfiGq
9Tl0G/USS+kTehizootxhaOrI1m8KOfpdTJRNJDUH0XrCkUHoRlJtFJUapsdX8m36Cp6RY+m97TH
UftX5K+0sfoJY6KYixlwI62ixeYKus4o1/8o5pAmplBH/Rik21KtQM8FXQ6pMg0ybR9m9wHIgSHa
WPikgXPGgC/KICE247MJckIHB83DHL8EUuxlanBMlo00x4gTkDpE+kvhiTTVfJjuMefQFead1B3y
YLW5FDnuoI/odtohbgnfQIsoGzPnPTHGGC5fMYab3WWdfEtOkhtbji96u6NIo8/x+RVGZrBxkOr0
P9EkKjLXm2+AuztDwt5Dl9Jo+hCt/BIljNQOU6/wxXK3OVxbhPa+TxPMR8wcEU1zzctoHD1FDzkN
muEMYIxD4o9o7w00S040l2izwvPQD7ejF4Lorasgf9YGh5VNHhIsGvyTQQMHFPbv16d3r4KLeub3
6N4t0LVL5055HTv42+f6crLbZWVmpKelpiQnJSZ4PfFx7tiY6CiX02HomhTUrcQ/vMoXyqsK6Xn+
kSO7s9s/Ax4zmnlUhXzwGt4yTsjH6WYgqEXMIGLObhUzaMUMNsUUHt8gGtS9m6/E7wsdLfb7GsXU
CeWw31rsr/CFjiv7WGXfoOxu2HNzkcBXkja32BcSVb6S0PCr59aVVBV37yZ2x0QP8w+bFd29G+2O
joE1BrZQqn/RbpE6WCiLTC0ZsFuSy40mhjL8xSWhdD+SIhutY8mM6tD4CeUlxZm5uRXdu4XEsJn+
S0PkHxqKD6goNEwVE3IMCzlVMb55IbSG1vl2dztct77RQ5dWBWKr/dUzppWHtBnIoyTkDaDc4lDq
9R+mnXMi84Rh5aubh2ZqdSVp83wcua5utS+0dUJ5s7SZuZxDRQXyQFrZcXhV3XAUvR4jVTrJh9Lk
LRXlIXELivRxS7hVVvtm+UvYp2q+LxTlH+qfWze/CkOTUReiidfl1mdkBPebxyijxFc3udyfGyrK
9FfMKM7anUR1E6/bkx70pbcM6d5tt8drdezuuPiIJdbd3DILnW6FKZuKzrbSiU09K7hG/lGhIDhq
pg81KfejTf3ZmNWf6mb2xwDgX4VAqlA1RmReKGpYVZ1nAPujiSJkdPT4fXXfEDjAf/zvLX1mRHwc
HT3fEAcynzSxWkjMsO2hQCDUtSuziHMYxhR1HKzcfbp3u7pR+v2LPD4QdB+NR9/OqBiQj+7PzeUB
XtcYpEvhCNVOKLfcPro0s56C+YGKkKzikMN2SHIZh9TaIU3Jq/zg5AZidTU55Mpr+h/vSUksmTsg
JFL+TfAsK7x0kr90wtRyX0ldVYRrSye3cFnh3KHoN4RFbKHEYeVapoQf22SmpkLBlNOmNkWBozw2
pHfEf4di6upGpwtcqXyEb3jIUzXSMiuic3Mjc+bHEjWaJziVIueSRZoRGhCIVNSqdmhgC3eL6sXW
aaWTIXJk6eSpdXXRLcLAalYtR0UIOJ4ml+f6hoWoDDOzI/43mof7MyoyQ0F0GUImYxYp74rMiLNF
xMxIogr8Y+7s3m04ZGZd3XC/b3hdVd2MRrP2Ur/P46/bL38rf1u3qATSzmKcRvPAuszQ8PUV6LG5
YgCmh6Shu/1izYTdQbFm0tTy/R7sFdZMLq+XQg6rGlqxuwPCyvf7iILKV7Ive3IUHzuoVKCR9dKl
4mfuDxLVqlBdeSj3zEZBys+KBD9BMxul5eex40n46ZZfUPlx+1jGDJtcHhkWxTM89cBDhEWdOdbA
Bxq7kyjXm+vtCENg0T3j0w6fCRp0mnz6YcSkMvMT3WscJg+1k/FBd3xsbOzQsvjYmJihZY5G89Og
l91GGrudHjYz2TeGbVYsuE8GU9zuoWVZDjbjY9l0etjcjX6ZXB6MzsjWjaRstzs1Cokb4uNlGVuC
6W43bF6KZR9KiY2FidQw8wOBwFEYR6noeNHxi3pm7nb8MKeTyMnBOX3c4HYry5fB9JgY2LyE4h1l
5ImNZZP9mrI8l2eDw5fuyQKjY8hifgMhmwIkAPHmseDFumO1XBOzJv7FOCPKGZMmSxLHJI9OH5Y5
OXFa8rT0iZkLnAtiZiZelrwgvSrzOnmN4+qY6+NXOzY5N3peTHtbvul4M+Yv8RlNDUcnNXBPpjaa
Xzdw58HybTCJOym1JiqY6+/dM0pQlCdKoj0nVQzVRVkcI2pDDoYBqb1xnNTrYk9vDWF2BH1I6oOu
IUnFIBfHwOqJGLQh+4V1aQHPKXRmZeA4TLZWLlbWSMeKysXY0vXnfwKoqEAs6x8FAomehL69ClJS
EpI90uFv3ykv0ZPSq6Cv15Pnb+90lC14bevV9UuGzn9t2+vX3bH/0aVLH3102dLRlfI1oYufPD59
T9h8OxwOP7Nr05Pi/vAvvjqBPdP8L+etInD5+2C90+C6aHo7WBxt1VyZ0aqFpMxoqxXK1IJub+8F
+nJ5u7zHpT+uiyhyGFKLMkSsFEeiVVdEcy+S8CH/RvNYg8cDRmo0Pw96FXtlKfaKU+yFMQ+mM/PY
HKK4JSPWwATobXC3xnFehvBhLyqN9JgDYpC4hdICF3s+RP9ZXcrdBMegsWcHUVFRaqHwFl7UU1RS
ZUBYPZjr9zoczj59+/brJU83DHlt8i8+yF+i3zB4ac6vRhyZjloOgqbrRC9ky7T95MTM4DF2gTHU
+Dt5rvBoKh8eUPic3MOWyGyI8nrcaYmJjjI384zXqyxfBqM8Htiyk4xsnmSpHCE7m0Ozs+IQko0p
BrNRHgzGyujUVF+OxyulL8ebUJj/+lE2j1I+c0ugiM1noaxmRiYyFxibkCBVgcGoeC9sVjnHgjEJ
ibIsO4n9OO96ZG01QDKv/z2oev58pfEs5/K4NFVYsO9AY6DjoHHIcdD5guvFLOeo2IrYyXELYqvj
rk+4PnFtwlMJH2V8lHkiI/ZQzJOJMtOT5WnnyfY4foPDBiemrws0CiOckR3tcTkcR7IykrKyMlxZ
GZqQrowszZ3taZQP7hnnFd5GkbaXW0Bc5T1CxkbbExUWa6LC8m1QSbPomtTXwLw8WcVBuYJ85BH9
g7HevUU4L1gol0tdHpAdKEfcvltNu8qTxzHhBnlOcjdS0aCzg4qOn6380JvAvAJjdVyPQNyNnmfh
AOeoSchzsD9VisorIzOxY3JuXj9wUN++fXpj1jmcnfrylExOAmfhv+4800+mdvzl5q923HPDTfeJ
/Ynf/uG1UyMf+e32adm7dg0ZNPPwsmc/mr3grvvqEl956/Nd5TufenDNDGxUBU0xP9ZTwHsB0bBP
S1NCnofLtlhsZonvmPS0IE+btCwSPDcCsXCILv5orBbx2dHRXZKzs/TsLllGF7ffHZuWLijBB8kr
y3zOPJUnouflszw/ms8fSigsKvIc9xwHqx1/3vN8QqHn2UABA5wW7Gy4U9wl7lVuvcR7iffqTG1i
ymWe+UnVKVe5r0ta5a5LWpv5kDva8GmY41iHYt1xulOgXMFjGkTLDmKv14Xcog8ak6ynHZAPUrqc
G4xCLQ1U051gDzEs1hDDEpHFCTXTfQt90pfGU8RXyxNOdQksVlRYIlGdNXlKbOcJyvPkSbT05JOc
Km9D97RG0b8+/TVxQPTHueHhYEyTjN7QrVHcGeGOwHHFHxF5fDJQabEJ1ruz4BF0jUcxi8UrkCyQ
0BAuYnEFi5fEfiksihVTOPs1WW3+YAZxpsAkf/u8KQ05dy9Y/sT2G3uNSUqIqWlcNX/e+qSG3M9/
de2RBbOrb9oQ/vTNp01xc9o9q0M3Ld2WtEVee+PMm1au9O19YU599fT7emT/+rbD4W8+Zm0hAxLL
YxyA3HaLJ/dTrPl98HFmGbdDMY4S4bDCJ8oS58o0lDh3KDPKEu3KdLo4pkuZTrVwuZTpVCLfpUxD
mQ5lRinTWhYSymPnxm6OfTT2xVhjjDbG/XNdS8D0pliH5jSiYzQn1kO3+4imJ2marrlJxrp1p3ZQ
HsTpoBRbg9Gk64hCR6L1Rjn7ScOIDrbL6Y3Jbi0csLBWIctg+VKpF9GNol/Q7Qy29/d21ub2cW6I
lzwZYtxJvUl6oPRpcB9TaWD5cB/zgtwb1yjWq/H+O6/BvP6exOhBKHzsUcuG5+SgU4O8hTzIhYWr
ewR0yIP4+HgMN3T7/eQ236tPKIR4fz0Y06tQa9+9UNPbtRvEWVSAGRAnmBQbjCmMrR1fGBvMK4xt
nwXavZAjBBSjKFszgwLQBPuIXt5eyX6v5hVy49mV8v67nn++IdxHTH9I23dm9EPhbRBld59dwHKC
9cNc42HKFmeCiYlqOBOUGaOEhlJSYngYzwmRYCq7E5UOmaBMTemPHFctaFhhsS7x0paolMUEZcZg
0kHV5Ehs4djNpNB+EuhtNw+JyIqLzk5OzkrgJSwmXtezs9xxgpxpWOyVcqksSmKxCskSh7VITKmz
z0LKsJDpwkU6lK7qKCvNuK5dXbuNiY8kPhP7ZuxfMl1RiWlxXTO0qJ5Gz5gDWFA0SBpPYnRyQmLi
kbj4pLjEpLh4N8RNMJErEozbGifj4uKDySJSqSfjdfEaiyIsL0EvV8873bPQs9xzu0f3/IhQSVNC
JU1QmidNoiGWUEnb4Et4SvSheHE3Zl7/+ri95xMuOS2FSwvxUgklhVcf1Q+V3sL8SkjgD1e7egQM
sBypJUitPmJxJVinGccoa3N5AyGTmJucq2EhouQkJzTDvLJfJ99z2U0Nu9Zfsr7zo7fJt84+OW7l
HYeFa8mtJ393VtR66tY9u31z/biiFPmPx8NXTwuf+sMLd9QfY4kyFvyVjHWoHXWV2n6o3yeUwPVC
RVMWny2CoQVZsriTzUb+JjbKtfYnyoxTzKRiMxthE3MyGM02pycWZkSTyYkXOTir1kRm5+ygW7jd
0JYyjfbZSe7obEEdPZxKbU882ake1h9T1YqWisxhj2xPjr5+1POczVuVxz3PVjJvdV+QLoqdweTi
9GLf1ITJvgVatbPaNT+h2rfEdVXWLa5VWW+6Xk/xOn3MgWgMywxHGRqD5YxtuSoAC82xhk4+vy+X
A7xcy/FuiXpmitdYd2zkJc2us+AFh/Zib2x1ESzWcgVLZLnqWONRnOUR5IFmjAaeeJJ3R54N3SDZ
+gcTs9WszlaCOVsJ2uxGURhsX5Q6PXVh6vJUPVVt/9AP6MVUbNYcMLm+qY2yw55A007DWsdY87FX
tuOqi6zFLL8SuznFZ8xWvKA1l1LYcwhnXie1vXA4WdNJYE3H3568nn5wpYikc8ueQzu9J63bqAVT
hpRdKoc8Nafh7DWvrvxr+MP71366692z/cbddvGVD26/4fqd+qS4+T3H9hz85Tszq8L/+mPd8WU4
sF8qHn16x2/PvFu5s6Jxy6YnnkCPzsDaloJ7PzctCsY96xY6/kuXHoXFgwVNTyn0qFh3jaZJ7shx
SufTZEa8qybqCxoHZpoutSKQhWI5NkDpkPxqpb/Yc7Jy8aCxJ49f7DnFuwUPuoN1wUKvEvrojcWV
iX1ykx2kOZz+vgkJ/WZoe9eHj5f2jd+v3fTPtfr3u9bfHU4In278yy7xuXgB15oaTcKsScesSSU/
9dSG76csSFS1Vc9QYtmpTMydiG975c5XZneePyyhu3Cwkt1556KrnX17NZOwNY7s9DOUm+Mr+c05
BL0sv/NVQJ4yVWng4KFl7ZUkt5KzO0O5VXJ2quRKo85XAXnKtCZmQyxlZvfghRX7FlnWo0dCbrbD
6Jyd4M5mjQLHBeBxrK2wBOJZRvDchIUrZllUYHwa1MMTaguoLBwLlsic1jokY1mSZckqx2Q1p5Mj
c5oXDHDmucMHLBuB44VQ0CNnEE+qiqjjBq4ILFyRD9VZBFuUX6R83mKi2DPB9hyRi+VpwwWyyS09
1z5bjqAsgRqoCtiUxUq/PimiS8qolFF5H8d+1tOI6olroRvFUn2Ja3HMlbFXua9PXUd1Yr2+yrUi
ZmXsKvetqb/3Pp+Y0B7ioz7Ll8HE58tn0t0HZfVYML2LL5ay0ygW1djaQ5yrCbaNlhiBxRIjsHxr
CdHsmkNRIuqAnEOBSKSAHQmWiKwJ1MQHfdg/xwuK98TL+EZxRzC9ADwGpktTAiZNCZi0mpAmtEY5
J5jcQQV2UIEdVGCHmmR7I+5LDibL5A0XWTLGOso4qdRlnlvqOMNyRvqwMp87kTWqiKzhXRX2VItp
cUVzcaNWtnOGyMvr05ulTDPlmeCTmJRiq9oOrbkAEvMXXfbxocOfL7h89a3hU2+9FT51x6WrFsy9
Ze3sOWsGjNowacWOXTctf0TL7LJp/ta33986+xdduj275imThDh8+9Ni8tyVN0+fuXrlGXPshnEP
1960cwevh6xv8czOxnq4dT+Ooj4N+nnSJKtJkqwmaidl+pXpVB2HRSIylVOwTkWO7tqxLVnNzU7K
9CvTqVQyKwXP4RQl17FOWpPbCuAiU9Qc5YBmhw5PxuRAOenohWpySvE86yhqBYPlRLAzM3iaV3G4
Vx2/edO83QIxnbPj43LixsVpcXFJNF4IwWPr9uBQQrB+hIXXUIP3bKCyADOu8niBGj9MAJ6NHl5p
332O56DakjarxDmNL9hVqXx8UibLLlBqy7JaFYWSzhUU7D0gY0xK0P/TlEv8s7XLUi7PmOO/PuPG
7PUZ67I3pzya8VTG5ykf+075En+SsiVlV4o2oEu1Q3ZibdGPuZWW63P4OmePi5vOqmEWN0+8Nt5a
thu4Ejn2HIPFmmOwfKsU35wDopBiIrMrhruZRwkWKziGV2tvSzVxQzfWAIKpUAEUO3RU86ijmkcd
a6BLWQdaPm/QK70bImt1ZB5hpY7Mocj+s0lJtFdqqlwsKpudDJ6bMZZWOFj26d2JV2lQwvTB7SUf
F+YJdWKRrGbPol0pS2dMunF8X9H34OX7zgjn87cfv+H6f2x//G350kNLrq1/dOmN28Qkz/VXjFn+
50WxaVMWCNef3xeezeG/hb8OfxLe86tDWu979z1733os1ehGHG+nbx64mdpNjx/0jSvTBQ+i7X/r
1JXpS+MH7vv+ibNzPOSKhTMK8TmFSuccHL6Yhnno+ye+vx5n+pa/CmTDXeGIePEdfQQh+Sf6mV5D
ycAoZzu6xphC5WI1TZU7aSlDa0dB/XG6EvF3wj0E9ACnRfwy4H1gEDAFyADYbywwA8AbESpD3P2c
Fnks4nwUraGprhxaaEwxz6K8jcYLNBvYAvt2/W+0w1FIl8P9INId0on6cRzktdGxkzbB/z6Ez4Tf
FtByuLfBPg3pekbsUc5b8c5pCkUBDvh3QT7rAG5zJ+1p6qvXmH9FWyqQ52hgFcoYDzocKEWcRNCh
wGrxAq0RL5jbEQ5KN6P81ewPFEfoSORzC8KLkK4D/G6GPQP1cIDGA7lAZ/k4Fcokego0H+2/xGo3
2v4CzUUdt4NabUJbkAfX6Yew6liKsCagzF8DfllofgQahTC7bly/5rgZ7uYYpfWiWvgtADKBCfIo
Xa6PIYH+usf4iDQGOI/76T3gJ3o1XQy3QJ9PMhpoM7uBsQo15ln9PtqqnaT+CLvesRHtqEZ/4zBO
nqJ8+Xfq7uhIy8Ffxch/BbAFeX6q+KGaJqP8HojfS/9I8dAquNejrK/sfuLxhnsFxnUixu4M7IT0
k4ARGJda4DKkvxjl53Of87iLKeFCxP0QcaYx4J+qAD5HX+3nNJweeXWM8OH2c5S2I86t6NdjoDqQ
zHWwofiM+Q5A2PPIJx1wAO2AHsBHwHZgATAAKAU6o12EcjXUj+tTxLwJ2pl5w3gBfYi6KZ612rAF
7tWRObMtkheXk+t4nBZEkMt5ol6Xgw5FXXbbeaNus5H3eJsifLi+QPH9l9xOuEc3Ucw9/QsawXVA
+u0IK7Up7BtRZ54PG3HlsAZ0M/j4ZuR7H+yrbcp9A3cx3FzXWyJ0kF0ftLUn6teBqUbk53DE53wU
tfuiic6lB5FnleNSyJStNFJfgncrd9Cl+gkq1rpQD6Mn/NAetDEkv6CJLrxpwViOg/ueVnQT/DY5
3xDzoXls0R+DDHqD7ke/LtbfkO31N4RhPGZ+ZpB40XhMLlP2H1CEc5wmiMNWXKaM5mGcx3/j3zzt
f2qXbxqPQWY+Zn5uvGGaaM+dPCecX4iegM+m8K8HaoGuroDY5FogGp24FnIQnQQW6kEaYASpHy5L
i/RkyHnMBfiXGX+lQ9qttFZ/w3xL1FKtfINWOZNpBt4exXNZ8k26mcH5gy5qxkcteM7modbU5tfW
FLzwYISnckAdmH8vR/AhKOMU8A34qBQ8mY769mP5jPw3wr4GYNkBfjW/R14Wf75ID8Fvnc2fNmW+
4znVij9jbX68EFVrC+Q70rGMz0U91trtxxgIlnEoYxL4eAXqud+O35o2S18nd4KPWQ4fpamRed0e
lDEadfyA6wlADmO8LzFNx3DzEUeDuUNLMHc4CmD/M2CYj6Dd13JduD+McjMMyutpF7RFraWWP8XY
66jRiy7n/uBwhG3Rv6afI35P2Ll9UY4naLlxGuMOGch+PA/VHER/ot0L9Cr0+WZaj35I11ZjPsIf
mMZ9osaCKI3XBdgztLsh83hNupVu1v4CfYHT9iKvWi+K6BLU/UXlV4N8EOaAn3EJbXd8QQV6GWTt
YapGHaahLoe4Psizn+sqcruSISfeoIvw3m+bkUzRiLdV9UGQHkH8jSotDnth3+6cSU7w7MWIw/lt
U2mClBDpD5Y3M6300EVYfnJfIE9HMk1E+ijjC3rAwKtdzKFtzlrahitWwrzYYQTpIaQr47ogHetB
o/W76aeYX2sgm9ZA5rC+VGpMNU9rj6E910KuA1ot+PUxSjNq0YcLEI/7x5Kxq9G+8dpOygPNddyN
NZ/1ibvxti9AJY4FdCv8bsUbiM4odx38VmL+9sTcXYv0PHdYRyCUvRb+nLYIY7IG/RbF88UZpERH
rdIHSNUBZXD52me0TRtNa8DHQ1x3ox9vwVtREqxHZgNYzRnKvQx2xnoLyo9VTsQVuZqHbmR/2Yv+
iAOdGNwT8Rq6X19B8/QpVKBdhLnrpe76HzBXv6N7tXiarh+he/VGWs9uPZE6a3i9ojVAt2T/V7Cr
gr/8I9ybaKo+COnX0BX6dKrRdoP3XqdofTbGGumM28AnHZD+a+QbgfgbTdWmYG6tonvFd+bjHE+V
0WBeogH6SOqu0nHaCFRdub7nqbMsRatGY0xRX7a3qC/q2lRPu47nqZ9qJ/cF2snt0O/lG3O8aCez
o0XDEyReZQNb5ds0DG9NrxM7zAPo1+GtMLK5W+8jlgI99D70JLAC9m6gvwGesNzQ3frgRW4fugV5
Pw26h/cFDDmU+jKF3xZgE/CSHdaccnnN3eezG5nmgeb+xl6sNYA4aR5gNA9ju74Cenkf4CfmAQZ4
cTTDsZySnFdTktYJ/tlI18ptZGI+7aUOGpn/ap3nf+NGm3o268dg8zba4wGa8h+Ax5DjMfUxxVwc
zevzf1Of/4m4GN/lQCXnpX9JyRYPUZx403xH7KAp4k3yaFeBBwG4u8OdaPenPU7wv0v5txo/8AqO
as1/tR7X1u7W4/pjbrmHpjeHzQc2ddxJgxl6EfgBaO12vUiDGY7nEAa0duuPIN2/w1Tqqm1mXgQP
Ms+1cjvGUSeG7GAekBmcF/RqoMn9CuQawGlVejeN0AGeuwzZgP0a0BTeh0rA9yV2f/Mc5H7VNlvp
7fGxx8WmdnzUL6i/TKNA80ALQSeBjrapzUfMz815mv1b+8GtZImdpnkcOy5oEMBa88P0zdP9v2DH
3DkCvAA8/7/dHkHgVcADON6BHlIEPfIN6Ck/xXcf6CxkyZl84GGi8GTQP8EPK3y4C+CG3Qu/OaD3
E53+BvYr4f+GBVPqmbQ1olemw29fJC1EkspvkpX+9O+Ivj8J4BCK05/GNz1Oz4f9HwDW89Pvgj4N
ugnxP0c+K0F/a4WfnQ731cBTcH8B/8uActg3gCaDdgMSgQSk38hgfcTWm//3aMu9LHS4FnvbH3ND
Z5mJeuaAHgBdau8d/mtqj+ePUOiOLfbE9vj/GEU71F7kh9Ta52PP9AH0vpBd79blXMiN8Qw3h15m
noVOGct6NOuyrD8r/TFCkc+Dlh6LcomScP6iKOoVxfor687QVUtAuZ2rHYY6MyhDvargLjYi+kGT
LIVcFSdpC+ABMiN0AWTfd7KT+TLkUDzW12+wN3qQAXccMMWC+QrWrnisdYcgd78BPQp3O9Bv7DVN
i6x9NrVlK9fDrgvL2f9t94+tif+n4VhPCyJosbb+G387Xn/EYYxi2Gvw/1/aeq3+MXfrtbu1u2kd
v8Aa3Xydbr1u/7due523adRgKmA4g+YBRmu9lHWAFnrAj7hbp/8/dbPO0Vzv+K/drfQS1lHOhyY9
xA5vpcc36TMZOAOw0Wre2fPvP6W8t9D3Yl5GdH+7Dnb61v62G31a0hyQA50h33gN3Q45Av3fbAdg
jcK38ii8zHWGCly7qADuvQDWzfBx0GoOA31A3Mrn2/hWMoVvgtuD8xuOi3VPobo1f/+Af1vxLevn
Sj+EDshtkht4r0T5wEAgAdgNXG7zBu8hUfZbEqsu73X1qeY3+stAKx3wR919cBbah3YhXjx0x3i9
hpIcXkoycIYC+yrQaNBoyPcJQOSMzzzruF7F4buK4Xw+Czl/Bc5XcPZlPguZfrkepnhnrLpHuRlr
aA7C1Tkd1tJkrAdpTh+fl5iNSM/nc1WOr6H3XAK9J4rXDpSLMylgAeKO47MpnCQUIx8+Q06K0J58
PsXrl6MHeRAvF2HqTF3Rv+FcaBrOVKbhfNO6pyrj8xftI3VXs5rP3bWL6Sk+Y0d+oeidtCUKZ+Gu
ahruWq7umzbiW6o3w+8+5224owmo+5UyW19B3+OMzVpjoUzZZ398Fp+h2o8zebvNcKvzcZuq+k3D
N0dxHtO8XDudazjW0q/VOZR1jtn6zL6VLoM1vg6oRjtw1mKessuxKfcRzg9/b1HcO1m6xtURejPq
ad9JWOf002iCtgz7QftM9mHU503cFa4CIn1stx1plV5ll4V+OWvbW1PEVboK+ugSgM8M+cx2FcYu
EbDv4fgursz4jHi8RvGYGW7s8+N5/M39COP7iKE4QxuvS5wFfQVYZ4/qfg78lQ5cgu/7FsstmKNX
UBLcN+t3qTu8lTjvYyCu+bBKd5ka12LHJPAezh1xllSMvsLdkQ2cleBOw4L5Ic7Y6hTUuZq5XSaZ
uE8yr5QvoaxCile8WYM6rcfdFp9znrsTTNM7wx/ndvpkAOMPXAd3B9X2CFV9hrNDtHeUaiOfzfXA
ORORSxuozglH2mmcT9JwnOcNd8XQcGMPzkEWUgecCXZwZGHsRuN+JR7nrR9Qtt6fZmpefO8bEMPN
l8UXoNDUGfi9h2rtLdA74Oa7X9wJo7/UvRoozqfptMIR6BEA5gvf5TJmMeROkYtwviesiNj5Hgx2
+BXSPgU7j534xvY5IJ6J823ztPw5yh5K1bIRZWxFXVAOzhE3tgbSXhpBZ1AuZ4R+CeRKSwyDuwWQ
D7vzWwP+7NexNSL+GfBvAfize2hrwJ/9WtfjQvEuVI8L+ech7xZAeey+UP7/aT1a5MllRPL1w94C
8Gf3hepXirAWQHx2/6f1aNHHSJeB9OzXoTXgz34XqsfFCGsBxGd3i3pAPmEfG34ee9PHQf+M9ZrX
+89Ax4CC+8LPwo79hTk74kYcFe8X8NsE3ANgr4xf67BQDMp74NWgfwewTzcnnEP4RdizsC/BP7sc
8y74dQWwX+GyOG34IICyFSJlhvfAjfRnd4Fij97CnQL3x0iP8lTZqEcYZ8SmH9gcad+aSLkh+KHu
YS43Ej+MOnEbTU6HcBumBr+JSJ8DOukcwtCDGOYzoL8C3gFeALhebM9GGPcJ2h7G71CEQ5ifEblA
3+OuaJFehXPQHjjTxekCU/0GGqNk7ivq3sy+Q16k81qAtyBK3pmQfYOowOGGHnI/DXVCb2AZbsxS
a+o6oxprE35CAmsL3+ct0I+RoT+HNyAf4V7hCtwX78P58QjIW5Sh870M8uZ1F3K2SltLY4HxvIYZ
fCfEdye4m4luUPqLB3GS9E9Q33vokLEXZxbleCOBqjt7wL0B91Tb6FrjBrredTkdwq/6rIH+Mxvr
VY5jOhUaN9FILgN5Fjsux/1RLPSCCHVtopnObvDfiS+rfkxZUauh172KX8KhcD+7bKy9StfSnZQE
fx6zp9C3zH/AmQAwRtUZ9TWCuBMLQB/jezy+l69En1Sr+lyM+hRgr65rtbgH+wr60Sjq7IyC7pVP
a6LScDZ0Cu1w4Ew1oO7lrTL5nh73T845dJGxmvLsvbvjQ/TzZNyJRShk+yH7PAC62zZ9rtIXE9S9
VuQ8QOkQWMOa8uB3PLjzAm/0OKdDtNSjeDx4LOwzArsM9K/VHlBeP5vaz2OHflBrJ/d3pN8RPhp3
YAED93gYt9wf0MiZhJPv8XCXhn5U+qzzEI12alhbH6bZjlV48zIWY5FIk5zPUIJzBKWxfuZ0ot9Y
z4UeYnyHu8JJ+M0dModhnHi+XwPwnBsB8BxfAn+c24Uhc/gfzy/253/sdxbzlf+ZOHPDr4GQOc8K
5zBzuWU/+xUo8ldhiMP/zmIemuuxekrkY5/XvA87oPYhPvY/18+QhZZu3ZI26fWKf4ZjzJiPLkxb
6Z/2eLWmPIfBI4mqn1gftvXJH9K7UB7rpeoNAPS89zFH70RaH8D30Wrv0JoiDZ8lLrOo0g35/p/v
/Jn+EvNrE+t6rSnKsfTqC9BmfNRCb7f9UQ9rntlU6ddN717s9y8/Qzn8ziAP8ZV+/WMU/dX0Tgbt
Vu9l0BdmxD+O80Pbmt7NXNBtnblloDw+e8s4z/sD60zOPpuz9fLm+yfWU203ZArqo6E8B88j1GE0
+n2tzm9z/g2Y7xiOm8ADLTEF7in8nuB8cGAlYTgvawmUy28MLgjH7UgH4H1hK5j/dOWY/0SdV1gw
7wV/ML6IYDvodk1gLw3o0IVbwvynfgcA2XI+OO5HuYCruwUnJABDZ/3/3wB9QE7MYFeCog5eC/8t
pqMcwAlJoLAOVME0nevAJ5GxsPvU7iu07WO0e25T3SN1ssuy012I/tg42uVciP7YuNj1uCD9D9t9
vvrbdW9OMSf5jd7ZCOW3e47z1Z3HR+GfoAD4n8+aEyNwoF8PAo8BRyK4C/QuzJUMzNtvtFngJ6B5
mh/wA97E8LsY2x9zluWdw/ExxjYN5WIeYI/0uQWqOF8fOVEG85+zEyj6Sr3bsXSvj9AuN+rNb2xn
sywE7RA1Hm9YrHeyOSxbcH7B5yY99adpNtaNZjqfOQl8g/003sEGyEC9vMYS3He+ZP7SuB4y4YT5
O2M5dAIAbVwZwYugjK0A9oHmE6D8DhJvuvAeeCc92hzY22YzOA7KrgEewpr1Z1A/cKWF8CeW/7m6
oS5KBmvfQtc7TenqfWlQ7a/H6/Owp5+HtyFf4J0N9B+0YY02g4agjWu0vuQxoH+wvoC+KYZfov4e
qAU3+mW8tqPZPOf3NfyuBlBvcnjuPI/7Co4PivT2m9/OXJa2AOdNf8G90ReIhzCkW4O+W8lvnVgv
0rZifMaBLyYg7gTzD9om0JERfAt6Beo7hebJlbhHno398KvQ35LhvxhYCHsaaDxQAdwHXE0XKf/T
4JPvER/QdMT7PaiBvb0Bv+8iWA8KcLjab++jaujE1cjPiveGSsPpCjQHzgh+C8phQ5Ef4sk7UW9o
FFpyxO5A+C3I85C1fxc4V+D4Kp4dJ+pcHOM4DY+ejfcjicBanOEOwRnnZ3jXM5W8GF830Adjz/sh
3j+wHvUKgN4yt8B9REbeBzTdQdj35BFq7KJ5xk/wnucs9IV3sIc4RoOMU3Qv7lM7O8ZjPcNZH/IZ
CIDPw7P5PTH4bpJ8A2cikTt6mzrKKTnqOZwvQMvC/ODzF0XlY+hn2PGbb/yui898SLD2Bn/+x2+n
I3NN6bnOYroZ83g4gDNS9e6bdWw+44zmuQc7v1vtrD+Eb4oqPY73UGH0qMnzYRJkQ9PZK/KdAH7a
xryFMNYFkdR8HG+ONoL24zcJcjy/11JpfwoKaWAuA3DCYo5GvvdhH2Pfb23EOfPGZm71Nud/2v1j
91cY0xb3U/bYtj4/B4/827cZrcN/9I6n1Vsi+1xdvds4z1sjdTbf7O1Ga7d9P2LfR/you9Udjd1u
m/6g/TUm68jDsa4ccuw03wDvPgncAfmKNcnEHtg0EbZf8VINrcV5eTWfyztGUQdLhqtz0mysM9k4
m+Qz/VVWfjgrbMBZEmQj5PwZXiPgzzrWauR7Gv5FWpr6HkQG7Py9hs4I430Sn98OB0oh96xz2t5U
xrIWcRLVmsHfO8A+DfKmWkK2yBepl8S9CssgATdALIvUueRQrDM4A4wgXeJ0JGKPwlvCapzfKmjx
5otKJsVZMksj5IdzQzEUa7Alr9rhrknJL/m6JYvke4hj4yTsn/NdDe+n1Z4aszj8qFqbWH5CViqZ
uRVzG3beu/C8RTvjeV5DXgw5n57R3A9tZ92S9YLmlHUFdh+01/oL0UhaTs9pfhg/cseDtSRRrckv
4J1vOcXArvbN6P9eSLfd+FidkYxEvVkHiUe4pb/b5+1qnDBG1t2+QHiLfQHf5/DYGngny2sX+ul5
4PVmFPIlzDKG12nux0+gj0Zj3R3DPIA+iwY/4PtF5slIPXn/kg4+XYc6We+9I3u7pr0G0UB9Cz2o
zcGZAd75I99JAI9VOIIHQR9kPjPwvhv53McUfkcRD/F53VBryHOgrwJ/AL4E3gTewZ75LYxpOeox
0t4XGQ/w+4HwfgNvNLCmR7nGULrjgKWvaLV0JZ+LM9CmexjglVAT8P0PJcdr+PxG/QPn0v8Q5FbM
kIeh1bXH6lOOYy7I8NidmIa9gWPo4gP829FtaOuDNh5o44E2HmjjgTYeaOOBNh5o44E2HmjjgTYe
aOOBNh5o44E2HmjjgTYeaOOBNh5o44E2HmjjgTYeaOOBNh5o44E2HmjjgTYeaOOBNh5o44E2Hmjj
gTYeaOOBNh5o44E2HmjjgTYeaOOBNh5o44E2HmjjgTYeaOOBNh5o44H/a3hA8F+0oq/xq/n3kxNf
x8XvePEvv+qPx/yGDJL7abLWeU9eWs6rT+HPxRwDpNalPtAuZ7/WSWtXPzAn2Kj59yQkF8QP6Y7v
MwvKV6YP5kLgCeAQoNN0LRuhHpjLgVrgCeAQ8CrgwHezslWoD3Qh8ABwDHBo7bSsevz9+SGdtHSk
TUcd47VU+gowAQ3fJU9Fqak0DpgO3A48ADhUPPZZCCwHDgEnAAcFtdT6O3uh7qn16xTZM/+yAuWc
YTmnVSrnnksqLDp2gkWLR1nRBljRLuptefcYatFO3Sya0LGgFpnviXYXHB6SoqWgkSmo+CKYQj6L
n9MVlIM/9JRMIUDiC+KWT1BL2NMhr+CBQ/gqp9AkfkCjmnLMw5qod3sLhkRLU35FCfhC/JfyuBUi
j++J8xY8MGS0/ICeAA4BmvwAn7/Kv+JX649xn8MsAh4ADgGvAF8BDnkMn/fxeQ/f6IyX7+IvTL2L
mO/il+PfRex3EftdxHyXnPJdmB75DnIjZbK9CJDyHZge+Rc06y8w4/E3FoR8W75tHpav1fcrLNiv
LIH8iCWnY8SSmhmxJKQUNMo/1n/XBRyVh5EGRx3U2tNg6qW1r+94UU6jllY/aF5Oo/zbHl8gZ+uQ
nvgmagiQqMnrKPl1/K7N6/hbEa9TFbAIcMCGv6YD1AIbgK1ACACXwfQAPvwunk/+HngTvxPzJgWB
8YBLvlqPYhrlK/V5Q3OGpMiX5Qv4A6o58qj8naK/l88r+pJ8TtEXQbMRfkQ+X5+dQ0NiEE5I4wH1
gOYj3JBP7+mQkGMO8eLb/Rh4mPlAETAOmA7cDjjkIdm+vjonAZkcpCMuQsx6+kzRh2m7i4Lzc4J5
w8CAPjbyBvwENhgP+B7Ik8G8jffAyUbebXfCxkbeyvWwsZF3/QrY2Mi77GrY2Mirng8bG3lTp8PG
Rt64ybDBaJRbnuzQKaffuAXCNyReXoNeuga9dA166Rr8MuY1/KHv8A3OHHlvfdeu6LHNwUCXrjm1
B0TtU6J2oqjdLmpnidplonaFqB0kan8magOiNkvUZovaoKg9iD97L/DTiMGGFs7CYJqoPSJqd4na
GlGbJ2o7itoOotYn+gUbZW79KMw6kBJF9gzhSSdz9/xkMKRPvMxFj+aC53MhEw7BfAUwlSuISL72
VuT0bKbt93Qtstw9BhQsHDJSPoOEz2AYnqH3AR0D9AzY6Blk8gyyi4dZBEwHDgNfASbgQOz2aMft
yoyHmQ8UAdOB5cBXgENV5ytURdJCmFzFJ1TF8mEWAePYJZ/Bpz0+uTI32M6T5Ql4Rmq3Z4n4bDEu
28yW/SglBV+HTfC6vI3Cve9f7m//5aaoIVHyNnk7fvAgR26I0Nvrv2uHP/O9qT7vYM6QZPELfEsd
XIc/GJknOoL2x19JYXcfynIx7U1Z+CWGHFFQnzUFyeLr87rlHBBxnGpfzndZH+Z8ltUoYf0062DO
n3yNuqjPeQM+j+3LeT1rbc6L+Y0u+DyV1yhADvhU1P1Z/XN2HVFRVyBgc33OMib7cm7MGpGzIEsF
zLICflYDVzA+Z2Le1JyRyK8469KcYA3y3JdTlPWznEFWrD6cZl9OT1QhYFm7orJdslSh/myVYVm/
RjE32M250VnuHOfs6yxwdnPmOnOc7ZyZziRXgsvjinPFuqJdLpfDpbuki1xJ/CduA/hyPH6n18OE
v9KNv/Gh7B5IGMFiBiZJ4ZI0mkKJWqksnTRUlIYOz6TSS32hU5P8jSJ6wtSQ4R8qQgmlVDp5aKh/
oLTRaU4M9QuUhpzjf1q+W4jbKuAbkmsaBU0ubxQme92SGUoYVo4/Wi+8t9yaybTzLbdWVFBaytVF
aUUJg72Fw4vPY1Qpz6ric39iM5DWwt4utLF0UnloZ7uKUAFbzHYVpaG7Jvmmle8XX4sTJcX7xT+Y
VJTv1waLr0smsr82uLiiorRRTFHxyCf+gXjgGBDEc2WTj+ORz5VtxdtsxeuI9IjXgQniRUVRRxWv
Y1SUiqcLjre7pkNJ8e4OMBAn1Uc1Kk5Nqq95nCMdEacjDMRJqaUjKs6RlFqOExqsssnKQpRsGIgi
MihLRckSGSqKqvluFSU/EmVtU5S1qiTNqo2KwwaycR+z47iPIU6zjvz31llD8XfI9wysmDmtZJa/
pMpfMguoCq27em5aqPZSn2/3zAoO8IW0vKpLZ85lOmNWqMI/qzg001/s2z1QpWsVPI2DB/qLd9O0
ksnlu6cFZxXXDwwOLPHPKK7YM2J8734tylrbVFbv8ecpazxn1pvLGqHStSqrHweP4LL6cVn9uKwR
wRGqLFI8Pr58t4uGVgzD+DHdI2Oiwa9VmbkVQ1M8iwYr5h2Ym7Ys8wC0lR0UE6gIxfqHhtwA83X3
Id2HcBDmFAfFwTs+EpS2bGBuJv6OSyTIA2+vfygFllxVcxWllcwrtv7X4B+8llzFQ2GZAfY77z9E
KQkFZxTX4PcBS0NdJ5WGiiZMLd/tdMK3qrgCfgNsv5iYEvy5W8uzBzwHcERNa4rIfoPYLyoqEvGH
vKDqBG/0zn4oGgf3iGC2WEI1FVoou3SyhCiYPBXdMG1q+QHoUrxI1FSggTUiIGrs3Lgdyo6/ac//
CM2usbHkqogt0hdLIlTFrAlQoMbuEuXDBneWMlRfLUGG9P8BQEOufgplbmRzdHJlYW0KZW5kb2Jq
CjI3IDAgb2JqCjE0NTExCmVuZG9iagoxOSAwIG9iago8PCAvVHlwZSAvRm9udCAvU3VidHlwZSAv
VHlwZTAgL0VuY29kaW5nIC9JZGVudGl0eS1IIC9EZXNjZW5kYW50Rm9udHMgWzI4IDAgUl0KL0Jh
c2VGb250IC9URFJVWk0rZm9udDAwMDAwMDAwMWY0ZWQxMTcgL1RvVW5pY29kZSAyOSAwIFIgPj4K
ZW5kb2JqCjI5IDAgb2JqCjw8IC9MZW5ndGggMzAgMCBSIC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+
CnN0cmVhbQp4AV2QzWrFIBCF9z7FLG8XF5PebRDKLYUs+kPTPoDRSRCaUSZmkbfvaG9T6ICC58yn
x9HX/rGnkEG/cXQDZpgCecY1buwQRpwDqfYefHD5dqqaW2xSWuBhXzMuPU0Ruk4B6HdB1sw7nB58
HPGuaK/skQPNcPq8DlUZtpS+cEHK0ChjwOMk1z3b9GIXBF3Rc+/FD3k/C/XX8bEnBEkkRPsTyUWP
a7IO2dKMqmukTPckZRSS/2ffoHE6utuLEaZ1Zb80lfl1C16+ekRzG7OkqvOogUuQQHiMLMVUHq3r
G556cfEKZW5kc3RyZWFtCmVuZG9iagozMCAwIG9iagoyMjUKZW5kb2JqCjI4IDAgb2JqCjw8IC9U
eXBlIC9Gb250IC9TdWJ0eXBlIC9DSURGb250VHlwZTIgL0Jhc2VGb250IC9URFJVWk0rZm9udDAw
MDAwMDAwMWY0ZWQxMTcKL0NJRFN5c3RlbUluZm8gPDwgL1JlZ2lzdHJ5IChBZG9iZSkgL09yZGVy
aW5nIChJZGVudGl0eSkgL1N1cHBsZW1lbnQgMCA+PgovVyAzMSAwIFIgL0RXIDEwMDAgL0ZvbnRE
ZXNjcmlwdG9yIDMyIDAgUiA+PgplbmRvYmoKMzEgMCBvYmoKWyAxOSAyOCA1NTYgXQplbmRvYmoK
MzIgMCBvYmoKPDwgL1R5cGUgL0ZvbnREZXNjcmlwdG9yIC9Gb250TmFtZSAvVERSVVpNK2ZvbnQw
MDAwMDAwMDFmNGVkMTE3IC9GbGFncyA0IC9Gb250QkJveApbLTY2NSAtMzI1IDIwMDAgMTAwNl0g
L0l0YWxpY0FuZ2xlIDAgL0FzY2VudCA5MDUgL0Rlc2NlbnQgLTIxMiAvQ2FwSGVpZ2h0CjgwNSAv
U3RlbVYgMCAvTGVhZGluZyAzMyAvWEhlaWdodCA2MDQgL01heFdpZHRoIDIwMDAgL0ZvbnRGaWxl
MiAzMyAwIFIgPj4KZW5kb2JqCjMzIDAgb2JqCjw8IC9MZW5ndGggMzQgMCBSIC9MZW5ndGgxIDM5
NzUyIC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4Ae29CXhU1fk//p5z752ZLJPMZN9I
JgyEZYBgWAOUDJCwBWQNJpSUIGFXAYM7QlBkCaiolSIqAnVBlDqEgAFswbpVLGrr0mpdqHW3KLVI
VWDu//OeOzckEWr7/32/z/N7fk8YPuc9+/qe97xnmQkJIoqiWtLIM/PqJb5tWX/6Aj73ETkmz140
5/LfX1exGfYTwBVzLrtu9pyjroNE7iqilGNzZ82oPpb0/N+JOgSRpu9ceCT0SmkP97Vwd5h7+ZJr
p/c5MwVW5Nen+rKFM2eI/D4Imgr0mXv5jGsXJTS4a4lunwsP36IrZy3q+ObYQ3CvIYr5jXGA0oEM
4xFK1/Mojcj8BPiUaXie+SmHM5WfI3VjBEQ7aJeYR7voEP1WnECqJ2g/NdDvKJWK0a6l9HNaTQ5U
4Xe0libiY8D/5yLdbKB82oZ+2EZHEfcSWkYHKEWkmZ/RcrpFew2pbiE3tachNJ4W0q1ijHkVTaP3
9ZupH42hK2iRqDXLzdvMO80H6SHar/3OPEsxlEEz8Tlqfmn82XyHuiPF3XQPvS/ujNpLQZRSi5j3
05W0WavUhTnH/B41yKVrUAedxtJRcVgGkPss+kSkiaXaMOTySzNkPotYWVRJc2kzHRB9xAiZa0wz
x5pHKQVlXItc76F62odPI/2a3haxxgnzQfMEpVM3GoX2NNDL4rAWPrsiXIR+M9BLXagQIQvpN/QC
vSr84mm50Ig1Coygcb35OiXRRVSG2j6ClB+Lf8ll+CzXnteHm0MpDv1yB/c2PUd/FRkiX4wTU2QX
uVBu0a4kF0q8CJ9qmof+3oTc3xMBsU/Gyle0X+qP6acd7cLHzDiMSB7dS/fT08KNlvpEjbhJvCn+
JofJ6fJe+YH2c/1R/Y/OGWj1z+hyupUeo3+JBNFfTBA/FXPFUrFa3CHuEUfFq+JTOUROlgvkV9pc
bbH2a30oPpP0Gv1mY5WxzvFpuDz8bPgP4X+ZBeYqmgB+WIHa301b0LL99Aq9hc/79IEwRIyIw8cn
ckWZuAGfZeJWsV3sEI+KBpTyqvhAfCa+Ft+I05LwcchMmSvb4+OXV8pr5M/lffIVfF6Vf5ffaala
ey2g9dEGaRXaQtRqtbYBn73aX/UM/RXdRD8XGBuNB4wdxmPGb40TjljnTS5y/f7ML892PftemMJr
whvD9eEG86+UjDHMQC/k0CDUfgY+8zHeG8FxT9BrIhZ9lyG6isFiDHpmupgvFotr0ZMrxWbxkKr7
r8RT6KU/ia9QZ7fMUnXuIfvIoXIcPj+Ts+RiuUHeKRvkm/J7zanFaPFastZVG6FVarO0Jdp12kYt
pP1ee1f7QDulncHH1KP1HL29nqcH9BH6dP0qfYv+if6JMc14yfjIEe243LHK0ej4h7Ovc7BzvHOC
s9J5u3Of83VXFbjzGdpLT4IDm/6JY9oKrUTbS7fJXnq6fFm+DH6eTtXaWAlOlTvEGnmjaJAdjGsd
A+VAcTGd0PPQ18/LB+QpOVAbK0rFJJovL7IydCTpO2EbpD9Dx/Wn0LaXkfO1jlixTH7liKV6QbKQ
SDyn9dQD2kv0tva+cOrb6C96tEgVx+Uj2nhwwa/1wUY55Wr30a+0xeJG2itLiKJPu9aDjy8WOyEX
JosC8a1mkiYvBhf10/5GN9MC+Wc6jnm8hn4hqvU5dBv1EkvpE3oYs6KLcYWjqyNZvCjn6XUyUTSQ
1B9F6wpFB6EZSbRSVGqbHV/Jt+gqekWPpve0x1H7V+SvtLH6CWOimIsZcCOtosXmCrrOKNf/KOaQ
JqZQR/0YpNtSrUDPBV0OqTINMm0fZvcByIEh2lj4pIFzxoAvyiAhNuOzCXJCBwfNwxy/BFLsZWpw
TJaNNMeIE5A6RPpL4Yk01XyY7jHn0BXmndQd8mC1uRQ57qCP6HbaIW4J30CLKBsz5z0xxhguXzGG
m91lnXxLTpIbW44verujSKPP8fkVRmawcZDq9D/RJCoy15tvgLs7Q8LeQ5fSaPoQrfwSJYzUDlOv
8MVytzlcW4T2vk8TzEfMHBFNc83LaBw9RQ85DZrhDGCMQ+KPaO8NNEtONJdos8Lz0A+3oxeC6K2r
IH/WBoeVTR4SLBr8k0EDBxT279end6+Ci3rm9+jeLdC1S+dOeR07+Nvn+nKy22VlZqSnpaYkJyUm
eD3xce7YmOgol9Nh6JoU1K3EP7zKF8qrCul5/pEju7PbPwMeM5p5VIV88BreMk7Ix+lmIKhFzCBi
zm4VM2jFDDbFFB7fIBrUvZuvxO8LHS32+xrF1AnlsN9a7K/whY4r+1hl36Dsbthzc5HAV5I2t9gX
ElW+ktDwq+fWlVQVd+8mdsdED/MPmxXdvRvtjo6BNQa2UKp/0W6ROlgoi0wtGbBbksuNJoYy/MUl
oXQ/kiIbrWPJjOrQ+AnlJcWZubkV3buFxLCZ/ktD5B8aig+oKDRMFRNyDAs5VTG+eSG0htb5dnc7
XLe+0UOXVgViq/3VM6aVh7QZyKMk5A2g3OJQ6vUfpp1zIvOEYeWrm4dmanUlafN8HLmubrUvtHVC
ebO0mbmcQ0UF8kBa2XF4Vd1wFL0eI1U6yYfS5C0V5SFxC4r0cUu4VVb7ZvlL2Kdqvi8U5R/qn1s3
vwpDk1EXoonX5dZnZAT3m8coo8RXN7ncnxsqyvRXzCjO2p1EdROv25Me9KW3DOnebbfHa3Xs7rj4
iCXW3dwyC51uhSmbis620olNPSu4Rv5RoSA4aqYPNSn3o0392ZjVn+pm9scA4F+FQKpQNUZkXihq
WFWdZwD7o4kiZHT0+H113xA4wH/87y19ZkR8HB093xAHMp80sVpIzLDtoUAg1LUrs4hzGMYUdRys
3H26d7u6Ufr9izw+EHQfjUffzqgYkI/uz83lAV7XGKRL4QjVTii33D66NLOegvmBipCs4pDDdkhy
GYfU2iFNyav84OQGYnU1OeTKa/of70lJLJk7ICRS/k3wLCu8dJK/dMLUcl9JXVWEa0snt3BZ4dyh
6DeERWyhxGHlWqaEH9tkpqZCwZTTpjZFgaM8NqR3xH+HYurqRqcLXKl8hG94yFM10jIronNzI3Pm
xxI1mic4lSLnkkWaERoQiFTUqnZoYAt3i+rF1mmlkyFyZOnkqXV10S3CwGpWLUdFCDieJpfn+oaF
qAwzsyP+N5qH+zMqMkNBdBlCJmMWKe+KzIizRcTMSKIK/GPu7N5tOGRmXd1wv294XVXdjEaz9lK/
z+Ov2y9/K39bt6gE0s5inEbzwLrM0PD1FeixuWIApoekobv9Ys2E3UGxZtLU8v0e7BXWTC6vl0IO
qxpasbsDwsr3+4iCyleyL3tyFB87qFSgkfXSpeJn7g8S1apQXXko98xGQcrPigQ/QTMbpeXnseNJ
+OmWX1D5cftYxgybXB4ZFsUzPPXAQ4RFnTnWwAcau5Mo15vr7QhDYNE949MOnwkadJp8+mHEpDLz
E91rHCYPtZPxQXd8bGzs0LL42JiYoWWORvPToJfdRhq7nR42M9k3hm1WLLhPBlPc7qFlWQ4242PZ
dHrY3I1+mVwejM7I1o2kbLc7NQqJG+LjZRlbguluN2xeimUfSomNhYnUMPMDgcBRGEep6HjR8Yt6
Zu52/DCnk8jJwTl93OB2K8uXwfSYGNi8hOIdZeSJjWWT/ZqyPJdng8OX7skCo2PIYn4DIZsCJADx
5rHgxbpjtVwTsyb+xTgjyhmTJksSxySPTh+WOTlxWvK09ImZC5wLYmYmXpa8IL0q8zp5jePqmOvj
Vzs2OTd6Xkx7W77peDPmL/EZTQ1HJzVwT6Y2ml83cOfB8m0wiTsptSYqmOvv3TNKUJQnSqI9J1UM
1UVZHCNqQw6GAam9cZzU62JPbw1hdgR9SOqDriFJxSAXx8DqiRi0IfuFdWkBzyl0ZmXgOEy2Vi5W
1kjHisrF2NL1538CqKhALOsfBQKJnoS+vQpSUhKSPdLhb98pL9GT0qugr9eT52/vdJQteG3r1fVL
hs5/bdvr192x/9GlSx99dNnS0ZXyNaGLnzw+fU/YfDscDj+za9OT4v7wL746gT3T/C/nrSJw+ftg
vdPgumh6O1gcbdVcmdGqhaTMaKsVytSCbm/vBfpyebu8x6U/rosochhSizJErBRHolVXRHMvkvAh
/0bzWIPHA0ZqND8PehV7ZSn2ilPshTEPpjPz2ByiuCUj1sAE6G1wt8ZxXobwYS8qjfSYA2KQuIXS
Ahd7PkT/WV3K3QTHoLFnB1FRUWqh8BZe1FNUUmVAWD2Y6/c6HM4+ffv26yVPNwx5bfIvPshfot8w
eGnOr0YcmY5aDoKm60QvZMu0/eTEzOAxdoEx1Pg7ea7waCofHlD4nNzDlshsiPJ63GmJiY4yN/OM
16ssXwajPB7YspOMbJ5kqRwhO5tDs7PiEJKNKQazUR4Mxsro1FRfjscrpS/Hm1CY//pRNo9SPnNL
oIjNZ6GsZkYmMhcYm5AgVYHBqHgvbFY5x4IxCYmyLDuJ/TjvemRtNUAyr/89qHr+fKXxLOfyuDRV
WLDvQGOg46BxyHHQ+YLrxSznqNiK2MlxC2Kr465PuD5xbcJTCR9lfJR5IiP2UMyTiTLTk+Vp58n2
OH6DwwYnpq8LNAojnJEd7XE5HEeyMpKysjJcWRmakK6MLM2d7WmUD+4Z5xXeRpG2l1tAXOU9QsZG
2xMVFmuiwvJtUEmz6JrU18C8PFnFQbmCfOQR/YOx3r1FOC9YKJdLXR6QHShH3L5bTbvKk8cx4QZ5
TnI3UtGgs4OKjp+t/NCbwLwCY3Vcj0DcjZ5n4QDnqEnIc7A/VYrKKyMzsWNybl4/cFDfvn16Y9Y5
nJ368pRMTgJn4b/uPNNPpnb85eavdtxzw033if2J3/7htVMjH/nt9mnZu3YNGTTz8LJnP5q94K77
6hJfeevzXeU7n3pwzQxsVAVNMT/WU8B7AdGwT0tTQp6Hy7ZYbGaJ75j0tCBPm7QsEjw3ArFwiC7+
aKwW8dnR0V2Ss7P07C5ZRhe33x2bli4owQfJK8t8zjyVJ6Ln5bM8P5rPH0ooLCryHPccB6sdf97z
fEKh59lAAQOcFuxsuFPcJe5Vbr3Ee4n36kxtYsplnvlJ1SlXua9LWuWuS1qb+ZA72vBpmONYh2Ld
cbpToFzBYxpEyw5ir9eF3KIPGpOspx2QD1K6nBuMQi0NVNOdYA8xLNYQwxKRxQk1030LfdKXxlPE
V8sTTnUJLFZUWCJRnTV5SmznCcrz5Em09OSTnCpvQ/e0RtG/Pv01cUD0x7nh4WBMk4ze0K1R3Bnh
jsBxxR8ReXwyUGmxCda7s+ARdI1HMYvFK5AskNAQLmJxBYuXxH4pLIoVUzj7NVlt/mAGcabAJH/7
vCkNOXcvWP7E9ht7jUlKiKlpXDV/3vqkhtzPf3XtkQWzq2/aEP70zadNcXPaPatDNy3dlrRFXnvj
zJtWrvTtfWFOffX0+3pk//q2w+FvPmZtIQMSy2McgNx2iyf3U6z5ffBxZhm3QzGOEuGwwifKEufK
NJQ4dygzyhLtynS6OKZLmU61cLmU6VQi36VMQ5kOZUYp01oWEspj58Zujn009sVYY4w2xv1zXUvA
9KZYh+Y0omM0J9ZDt/uIpidpmq65Sca6dad2UB7E6aAUW4PRpOuIQkei9UY5+0nDiA62y+mNyW4t
HLCwViHLYPlSqRfRjaJf0O0Mtvf3dtbm9nFuiJc8GWLcSb1JeqD0aXAfU2lg+XAf84LcG9co1qvx
/juvwbz+nsToQSh87FHLhufkoFODvIU8yIWFq3sEdMiD+Ph4DDd0+/3kNt+rTyiEeH89GNOrUGvf
vVDT27UbxFlUgBkQJ5gUG4wpjK0dXxgbzCuMbZ8F2r2QIwQUoyhbM4MC0AT7iF7eXsl+r+YVcuPZ
lfL+u55/viHcR0x/SNt3ZvRD4W0QZXefXcBygvXDXONhyhZngomJajgTlBmjhIZSUmJ4GM8JkWAq
uxOVDpmgTE3pjxxXLWhYYbEu8dKWqJTFBGXGYNJB1eRIbOHYzaTQfhLobTcPiciKi85OTs5K4CUs
Jl7Xs7PccYKcaVjslXKpLEpisQrJEoe1SEyps89CyrCQ6cJFOpSu6igrzbiuXV27jYmPJD4T+2bs
XzJdUYlpcV0ztKieRs+YA1hQNEgaT2J0ckJi4pG4+KS4xKS4eDfETTCRKxKM2xon4+Lig8kiUqkn
43XxGosiLC9BL1fPO92z0LPcc7tH9/yIUElTQiVNUJonTaIhllBJ2+BLeEr0oXhxN2Ze//q4vecT
LjkthUsL8VIJJYVXH9UPld7C/EpI4A9Xu3oEDLAcqSVIrT5icSVYpxnHKGtzeQMhk5ibnKthIaLk
JCc0w7yyXyffc9lNDbvWX7K+86O3ybfOPjlu5R2HhWvJrSd/d1bUeurWPbt9c/24ohT5j8fDV08L
n/rDC3fUH2OJMhb8lYx1qB11ldp+qN8nlMD1QkVTFp8tgqEFWbK4k81G/iY2yrX2J8qMU8ykYjMb
YRNzMhjNNqcnFmZEk8mJFzk4q9ZEZufsoFu43dCWMo322Unu6GxBHT2cSm1PPNmpHtYfU9WKlorM
YY9sT46+ftTznM1blcc9z1Yyb3VfkC6KncHk4vRi39SEyb4FWrWz2jU/odq3xHVV1i2uVVlvul5P
8Tp9zIFoDMsMRxkag+WMbbkqAAvNsYZOPr8vlwO8XMvxbol6ZorXWHds5CXNrrPgBYf2Ym9sdREs
1nIFS2S56ljjUZzlEeSBZowGnniSd0eeDd0g2foHE7PVrM5WgjlbCdrsRlEYbF+UOj11YeryVD1V
bf/QD+jFVGzWHDC5vqmNssOeQNNOw1rHWPOxV7bjqousxSy/Ers5xWfMVrygNZdS2HMIZ14ntb1w
OFnTSWBNx9+evJ5+cKWIpHPLnkM7vSet26gFU4aUXSqHPDWn4ew1r678a/jD+9d+uuvds/3G3Xbx
lQ9uv+H6nfqkuPk9x/Yc/OU7M6vC//pj3fFlOLBfKh59esdvz7xbubOiccumJ55Aj87A2paCez83
LQrGPesWOv5Llx6FxYMFTU8p9KhYd42mSe7IcUrn02RGvKsm6gsaB2aaLrUikIViOTZA6ZD8aqW/
2HOycvGgsSePX+w5xbsFD7qDdcFCrxL66I3FlYl9cpMdpDmc/r4JCf1maHvXh4+X9o3fr930z7X6
97vW3x1OCJ9u/Msu8bl4AdeaGk3CrEnHrEklP/XUhu+nLEhUtVXPUGLZqUzMnYhve+XOV2Z3nj8s
obtwsJLdeeeiq519ezWTsDWO7PQzlJvjK/nNOQS9LL/zVUCeMlVp4OChZe2VJLeSsztDuVVydqrk
SqPOVwF5yrQmZkMsZWb34IUV+xZZ1qNHQm62w+icneDOZo0CxwXgcaytsATiWUbw3ISFK2ZZVGB8
GtTDE2oLqCwcC5bInNY6JGNZkmXJKsdkNaeTI3OaFwxw5rnDBywbgeOFUNAjZxBPqoqo4wauCCxc
kQ/VWQRblF+kfN5iotgzwfYckYvlacMFssktPdc+W46gLIEaqArYlMVKvz4pokvKqJRReR/HftbT
iOqJa6EbxVJ9iWtxzJWxV7mvT11HdWK9vsq1ImZl7Cr3ram/9z6fmNAe4qM+y5fBxOfLZ9LdB2X1
WDC9iy+WstMoFtXY2kOcqwm2jZYYgcUSI7B8awnR7JpDUSLqgJxDgUikgB0JloisCdTEB33YP8cL
ivfEy/hGcUcwvQA8BqZLUwImTQmYtJqQJrRGOSeY3EEFdlCBHVRgh5pkeyPuSw4my+QNF1kyxjrK
OKnUZZ5b6jjDckb6sDKfO5E1qois4V0V9lSLaXFFc3GjVrZzhsjL69ObpUwz5Zngk5iUYqvaDq25
ABLzF1328aHDny+4fPWt4VNvvRU+dcelqxbMvWXt7DlrBozaMGnFjl03LX9Ey+yyaf7Wt9/fOvsX
Xbo9u+Ypk4Q4fPvTYvLclTdPn7l65Rlz7IZxD9fetHMHr4esb/HMzsZ6uHU/jqI+Dfp50iSrSZKs
JmonZfqV6VQdh0UiMpVTsE5Fju7asS1Zzc1OyvQr06lUMisFz+EUJdexTlqT2wrgIlPUHOWAZocO
T8bkQDnp6IVqckrxPOsoagWD5USwMzN4mldxuFcdv3nTvN0CMZ2z4+Ny4sbFaXFxSTReCMFj6/bg
UEKwfoSF11CD92ygsgAzrvJ4gRo/TACejR5ead99jueg2pI2q8Q5jS/YVal8fFImyy5QasuyWhWF
ks4VFOw9IGNMStD/05RL/LO1y1Iuz5jjvz7jxuz1GeuyN6c8mvFUxucpH/tO+RJ/krIlZVeKNqBL
tUN2Ym3Rj7mVlutz+Dpnj4ubzqphFjdPvDbeWrYbuBI59hyDxZpjsHyrFN+cA6KQYiKzK4a7mUcJ
Fis4hldrb0s1cUM31gCCqVABFDt0VPOoo5pHHWugS1kHWj5v0Cu9GyJrdWQeYaWOzKHI/rNJSbRX
aqpcLCqbnQyemzGWVjhY9undiVdpUML0we0lHxfmCXVikaxmz6JdKUtnTLpxfF/R9+Dl+84I5/O3
H7/h+n9sf/xt+dJDS66tf3TpjdvEJM/1V4xZ/udFsWlTFgjXn98Xns3hv4W/Dn8S3vOrQ1rve/c9
e996LNXoRhxvp28euJnaTY8f9I0r0wUPou1/69SV6UvjB+77/omzczzkioUzCvE5hUrnHBy+mIZ5
6Psnvr8eZ/qWvwpkw13hiHjxHX0EIfkn+pleQ8nAKGc7usaYQuViNU2VO2kpQ2tHQf1xuhLxd8I9
BPQAp0X8MuB9YBAwBcgA2G8sMAPAGxEqQ9z9nBZ5LOJ8FK2hqa4cWmhMMc+ivI3GCzQb2AL7dv1v
tMNRSJfD/SDSHdKJ+nEc5LXRsZM2wf8+hM+E3xbQcri3wT4N6XpG7FHOW/HOaQpFAQ74d0E+6wBu
cyftaeqr15h/RVsqkOdoYBXKGA86HChFnETQocBq8QKtES+Y2xEOSjej/NXsDxRH6EjkcwvCi5Cu
A/xuhj0D9XCAxgO5QGf5OBXKJHoKNB/tv8RqN9r+As1FHbeDWm1CW5AH1+mHsOpYirAmoMxfA35Z
aH4EGoUwu25cv+a4Ge7mGKX1olr4LQAygQnyKF2ujyGB/rrH+Ig0BjiP++k94Cd6NV0Mt0CfTzIa
aDO7gbEKNeZZ/T7aqp2k/gi73rER7ahGf+MwTp6ifPl36u7oSMvBX8XIfwWwBXl+qvihmiaj/B6I
30v/SPHQKrjXo6yv7H7i8YZ7BcZ1IsbuDOyE9JOAERiXWuAypL8Y5edzn/O4iynhQsT9EHGmMeCf
qgA+R1/t5zScHnl1jPDh9nOUtiPOrejXY6A6kMx1sKH4jPkOQNjzyCcdcADtgB7AR8B2YAEwACgF
OqNdhHI11I/rU8S8CdqZecN4AX2IuimetdqwBe7VkTmzLZIXl5PreJwWRJDLeaJel4MORV1223mj
brOR93ibIny4vkDx/ZfcTrhHN1HMPf0LGsF1QPrtCCu1KewbUWeeDxtx5bAGdDP4+Gbkex/sq23K
fQN3Mdxc11sidJBdH7S1J+rXgalG5OdwxOd8FLX7oonOpQeRZ5XjUsiUrTRSX4J3K3fQpfoJKta6
UA+jJ/zQHrQxJL+giS68acFYjoP7nlZ0E/w2Od8Q86F5bNEfgwx6g+5Hvy7W35Dt9TeEYTxmfmaQ
eNF4TC5T9h9QhHOcJojDVlymjOZhnMd/49887X9ql28aj0FmPmZ+brxhmmjPnTwnnF+InoDPpvCv
B2qBrq6A2ORaIBqduBZyEJ0EFupBGmAEqR8uS4v0ZMh5zAX4lxl/pUParbRWf8N8S9RSrXyDVjmT
aQbeHsVzWfJNupnB+YMuasZHLXjO5qHW1ObX1hS88GCEp3JAHZh/L0fwISjjFPAN+KgUPJmO+vZj
+Yz8N8K+BmDZAX41v0deFn++SA/Bb53NnzZlvuM51Yo/Y21+vBBVawvkO9KxjM9FPdba7ccYCJZx
KGMS+HgF6rnfjt+aNktfJ3eCj1kOH6WpkXndHpQxGnX8gOsJQA5jvC8xTcdw8xFHg7lDSzB3OApg
/zNgmI+g3ddyXbg/jHIzDMrraRe0Ra2llj/F2Ouo0Ysu5/7gcIRt0b+mnyN+T9i5fVGOJ2i5cRrj
DhnIfjwP1RxEf6LdC/Qq9PlmWo9+SNdWYz7CH5jGfaLGgiiN1wXYM7S7IfN4TbqVbtb+An2B0/Yi
r1oviugS1P1F5VeDfBDmgJ9xCW13fEEFehlk7WGqRh2moS6HuD7Is5/rKnK7kiEn3qCL8N5vm5FM
0Yi3VfVBkB5B/I0qLQ57Yd/unElO8OzFiMP5bVNpgpQQ6Q+WNzOt9NBFWH5yXyBPRzJNRPoo4wt6
wMCrXcyhbc5a2oYrVsK82GEE6SGkK+O6IB3rQaP1u+mnmF9rIJvWQOawvlRqTDVPa4+hPddCrgNa
Lfj1MUozatGHCxCP+8eSsavRvvHaTsoDzXXcjTWf9Ym78bYvQCWOBXQr/G7FG4jOKHcd/FZi/vbE
3F2L9Dx3WEcglL0W/py2CGOyBv0WxfPFGaRER63SB0jVAWVw+dpntE0bTWvAx0Ncd6Mfb8FbURKs
R2YDWM0Zyr0MdsZ6C8qPVU7EFbmah25kf9mL/ogDnRjcE/Eaul9fQfP0KVSgXYS566Xu+h8wV7+j
e7V4mq4foXv1RlrPbj2ROmt4vaI1QLdk/1ewq4K//CPcm2iqPgjp19AV+nSq0XaD916naH02xhrp
jNvAJx2Q/mvkG4H4G03VpmBuraJ7xXfm4xxPldFgXqIB+kjqrtJx2ghUXbm+56mzLEWrRmNMUV+2
t6gv6tpUT7uO56mfaif3BdrJ7dDv5RtzvGgns6NFwxMkXmUDW+XbNAxvTa8TO8wD6NfhrTCyuVvv
I5YCPfQ+9CSwAvZuoL8BnrDc0N364EVuH7oFeT8Nuof3BQw5lPoyhd8WYBPwkh3WnHJ5zd3nsxuZ
5oHm/sZerDWAOGkeYDQPY7u+Anp5H+An5gEGeHE0w7GckpxXU5LWCf7ZSNfKbWRiPu2lDhqZ/2qd
53/jRpt6NuvHYPM22uMBmvIfgMeQ4zH1McVcHM3r839Tn/+JuBjf5UAl56V/SckWD1GceNN8R+yg
KeJN8mhXgQcBuLvDnWj3pz1O8L9L+bcaP/AKjmrNf7Ue19bu1uP6Y265h6Y3h80HNnXcSYMZehH4
AWjtdr1IgxmO5xAGtHbrjyDdv8NU6qptZl4EDzLPtXI7xlEnhuxgHpAZnBf0aqDJ/QrkGsBpVXo3
jdABnrsM2YD9GtAU3odKwPcldn/zHOR+1TZb6e3xscfFpnZ81C+ov0yjQPNAC0EngY62qc1HzM/N
eZr9W/vBrWSJnaZ5HDsuaBDAWvPD9M3T/b9gx9w5ArwAPP+/3R5B4FXAAzjegR5SBD3yDegpP8V3
H+gsZMmZfOBhovBk0D/BDyt8uAvght0Lvzmg9xOd/gb2K+H/hgVT6pm0NaJXpsNvXyQtRJLKb5KV
/vTviL4/CeAQitOfxjc9Ts+H/R8A1vPT74I+DboJ8T9HPitBf2uFn50O99XAU3B/Af/LgHLYN4Am
g3YDEoEEpN/IYH3E1pv/92jLvSx0uBZ72x9zQ2eZiXrmgB4AXWrvHf5rao/nj1Doji32xPb4/xhF
O9Re5IfU2udjz/QB9L6QXe/W5VzIjfEMN4deZp6FThnLejTrsqw/K/0xQpHPg5Yei3KJknD+oijq
FcX6K+vO0FVLQLmdqx2GOjMoQ72q4C42IvpBkyyFXBUnaQvgATIjdAFk33eyk/ky5FA81tdvsDd6
kAF3HDDFgvkK1q54rHWHIHe/AT0KdzvQb+w1TYusfTa1ZSvXw64Ly9n/bfePrYn/p+FYTwsiaLG2
/ht/O15/xGGMYthr8P9f2nqt/jF367W7tbtpHb/AGt18nW69bv+3bnudt2nUYCpgOIPmAUZrvZR1
gBZ6wI+4W6f/P3WzztFc7/iv3a30EtZRzocmPcQOb6XHN+kzGTgDsNFq3tnz7z+lvLfQ92JeRnR/
uw52+tb+tht9WtIckAOdId94Dd0OOQL932wHYI3Ct/IovMx1hgpcu6gA7r0A1s3wcdBqDgN9QNzK
59v4VjKFb4Lbg/Mbjot1T6G6NX//gH9b8S3r50o/hA7IbZIbeK9E+cBAIAHYDVxu8wbvIVH2WxKr
Lu919anmN/rLQCsd8EfdfXAW2od2IV48dMd4vYaSHF5KMnCGAvsq0GjQaMj3CUDkjM8867hexeG7
iuF8Pgs5fwXOV3D2ZT4LmX65HqZ4Z6y6R7kZa2gOwtU5HdbSZKwHaU4fn5eYjUjP53NVjq+h91wC
vSeK1w6UizMpYAHijuOzKZwkFCMfPkNOitCefD7F65ejB3kQLxdh6kxd0b/hXGgazlSm4XzTuqcq
4/MX7SN1V7Oaz921i+kpPmNHfqHonbQlCmfhrmoa7lqu7ps24luqN8PvPudtuKMJqPuVMltfQd/j
jM1aY6FM2Wd/fBafodqPM3m7zXCr83GbqvpNwzdHcR7TvFw7nWs41tKv1TmUdY7Z+sy+lS6DNb4O
qEY7cNZinrLLsSn3Ec4Pf29R3DtZusbVEXoz6mnfSVjn9NNogrYM+0H7TPZh1OdN3BWuAiJ9bLcd
aZVeZZeFfjlr21tTxFW6CvroEoDPDPnMdhXGLhGw7+H4Lq7M+Ix4vEbxmBlu7PPjefzN/Qjj+4ih
OEMbr0ucBX0FWGeP6n4O/JUOXILv+xbLLZijV1AS3Dfrd6k7vJU472MgrvmwSneZGtdixyTwHs4d
cZZUjL7C3ZENnJXgTsOC+SHO2OoU1LmauV0mmbhPMq+UL6GsQopXvFmDOq3H3Rafc567E0zTO8Mf
53b6ZADjD1wHdwfV9ghVfYazQ7R3lGojn831wDkTkUsbqM4JR9ppnE/ScJznDXfF0HBjD85BFlIH
nAl2cGRh7EbjfiUe560fULben2ZqXnzvGxDDzZfFF6DQ1Bn4vYdq7S3QO+Dmu1/cCaO/1L0aKM6n
6bTCEegRAOYL3+UyZjHkTpGLcL4nrIjY+R4MdvgV0j4FO4+d+Mb2OSCeifNt87T8OcoeStWyEWVs
RV1QDs4RN7YG0l4aQWdQLmeEfgnkSksMg7sFkA+781sD/uzXsTUi/hnwbwH4s3toa8Cf/VrX40Lx
LlSPC/nnIe8WQHnsvlD+/2k9WuTJZUTy9cPeAvBn94XqV4qwFkB8dv+n9WjRx0iXgfTs16E14M9+
F6rHxQhrAcRnd4t6QD5hHxt+HnvTx0H/jPWa1/vPQMeAgvvCz8KO/YU5O+JGHBXvF/DbBNwDYK+M
X+uwUAzKe+DVoH8HsE83J5xD+EXYs7AvwT+7HPMu+HUFsF/hsjht+CCAshUiZYb3wI30Z3eBYo/e
wp0C98dIj/JU2ahHGGfEph/YHGnfmki5Ifih7mEuNxI/jDpxG01Oh3Abpga/iUifAzrpHMLQgxjm
M6C/At4BXgC4XmzPRhj3Cdoexu9QhEOYnxG5QN/jrmiRXoVz0B4408XpAlP9BhqjZO4r6t7MvkNe
pPNagLcgSt6ZkH2DqMDhhh5yPw11Qm9gGW7MUmvqOqMaaxN+QgJrC9/nLdCPkaE/hzcgH+Fe4Qrc
F+/D+fEIyFuUofO9DPLmdRdytkpbS2OB8byGGXwnxHcnuJuJblD6iwdxkvRPUN976JCxF2cW5Xgj
gao7e8C9AfdU2+ha4wa63nU5HcKv+qyB/jMb61WOYzoVGjfRSC4DeRY7Lsf9USz0ggh1baKZzm7w
34kvq35MWVGrode9il/CoXA/u2ysvUrX0p2UBH8es6fQt8x/wJkAMEbVGfU1grgTC0Af43s8vpev
RJ9Uq/pcjPoUYK+ua7W4B/sK+tEo6uyMgu6VT2ui0nA2dArtcOBMNaDu5a0y+Z4e90/OOXSRsZry
7L2740P082TciUUoZPsh+zwAuts2fa7SFxPUvVbkPEDpEFjDmvLgdzy48wJv9DinQ7TUo3g8eCzs
MwK7DPSv1R5QXj+b2s9jh35Qayf3d6TfET4ad2ABA/d4GLfcH9DImYST7/Fwl4Z+VPqs8xCNdmpY
Wx+m2Y5VePMyFmORSJOcz1CCcwSlsX7mdKLfWM+FHmJ8h7vCSfjNHTKHYZx4vl8D8JwbAfAcXwJ/
nNuFIXP4H88v9ud/7HcW85X/mThzw6+BkDnPCucwc7llP/sVKPJXYYjD/85iHprrsXpK5GOf17wP
O6D2IT72P9fPkIWWbt2SNun1in+GY8yYjy5MW+mf9ni1pjyHwSOJqp9YH7b1yR/Su1Ae66XqDQD0
vPcxR+9EWh/A99Fq79CaIg2fJS6zqNIN+f6f7/yZ/hLzaxPreq0pyrH06gvQZnzUQm+3/VEPa57Z
VOnXTe9e7PcvP0M5/M4gD/GVfv1jFP3V9E4G7VbvZdAXZsQ/jvND25rezVzQbZ25ZaA8PnvLOM/7
A+tMzj6bs/Xy5vsn1lNtN2QK6qOhPAfPI9RhNPp9rc5vc/4NmO8YjpvAAy0xBe4p/J7gfHBgJWE4
L2sJlMtvDC4Ix+1IB+B9YSuY/3TlmP9EnVdYMO8FfzC+iGA76HZNYC8N6NCFW8L8p34HANlyPjju
R7mAq7sFJyQAQ2f9/98AfUBOzGBXgqIOXgv/LaajHMAJSaCwDlTBNJ3rwCeRsbD71O4rtO1jtHtu
U90jdbLLstNdiP7YONrlXIj+2LjY9bgg/Q/bfb7623VvTjEn+Y3e2Qjlt3uO89Wdx0fhn6AA+J/P
mhMjcKBfDwKPAUciuAv0LsyVDMzbb7RZ4CegeZof8APexPC7GNsfc5blncPxMcY2DeViHmCP9LkF
qjhfHzlRBvOfsxMo+kq927F0r4/QLjfqzW9sZ7MsBO0QNR5vWKx3sjksW3B+wecmPfWnaTbWjWY6
nzkJfIP9NN7BBshAvbzGEtx3vmT+0rgeMuGE+TtjOXQCAG1cGcGLoIytAPaB5hOg/A4Sb7rwHngn
Pdoc2NtmMzgOyq4BHsKa9WdQP3ClhfAnlv+5uqEuSgZr30LXO03p6n1pUO2vx+vzsKefh7chX+Cd
DfQftGGNNoOGoI1rtL7kMaB/sL6AvimGX6L+HqgFN/plvLaj2Tzn9zX8rgZQb3J47jyP+wqOD4r0
9pvfzlyWtgDnTX/BvdEXiIcwpFuDvlvJb51YL9K2YnzGgS8mIO4E8w/aJtCREXwLegXqO4XmyZW4
R56N/fCr0N+S4b8YWAh7Gmg8UAHcB1xNFyn/0+CT7xEf0HTE+z2ogb29Ab/vIlgPCnC42m/vo2ro
xNXIz4r3hkrD6Qo0B84IfgvKYUORH+LJO1FvaBRacsTuQPgtyPOQtX8XOFfg+CqeHSfqXBzjOA2P
no33I4nAWpzhDsEZ52d41zOVvBhfN9AHY8/7Id4/sB71CoDeMrfAfURG3gc03UHY9+QRauyiecZP
8J7nLPSFd7CHOEaDjFN0L+5TOzvGYz3DWR/yGQiAz8Oz+T0x+G6SfANnIpE7eps6yik56jmcL0DL
wvzg8xdF5WPoZ9jxm2/8rovPfEiw9gZ//sdvpyNzTem5zmK6GfN4OIAzUvXum3VsPuOM5rkHO79b
7aw/hG+KKj2O91Bh9KjJ82ESZEPT2SvynQB+2sa8hTDWBZHUfBxvjjaC9uM3CXI8v9dSaX8KCmlg
LgNwwmKORr73YR9j329txDnzxmZu9Tbnf9r9Y/dXGNMW91P22LY+PweP/Nu3Ga3Df/SOp9VbIvtc
Xb3bOM9bI3U23+ztRmu3fT9i30f8qLvVHY3dbpv+oP01JuvIw7GuHHLsNN8A7z4J3AH5ijXJxB7Y
NBG2X/FSDa3FeXk1n8s7RlEHS4arc9JsrDPZOJvkM/1VVn44K2zAWRJkI+T8GV4j4M861mrkexr+
RVqa+h5EBuz8vYbOCON9Ep/fDgdKIfesc9reVMayFnES1ZrB3zvAPg3yplpCtsgXqZfEvQrLIAE3
QCyL1LnkUKwzOAOMIF3idCRij8Jbwmqc3ypo8eaLSibFWTJLI+SHc0MxFGuwJa/a4a5JyS/5uiWL
5HuIY+Mk7J/zXQ3vp9WeGrM4/Kham1h+QlYqmbkVcxt23rvwvEU743leQ14MOZ+e0dwPbWfdkvWC
5pR1BXYftNf6C9FIWk7PaX4YP3LHg7UkUa3JL+CdbznFwK72zej/Xki33fhYnZGMRL1ZB4lHuKW/
2+ftapwwRtbdvkB4i30B3+fw2Bp4J8trF/rpeeD1ZhTyJcwyhtdp7sdPoI9GY90dwzyAPosGP+D7
RebJSD15/5IOPl2HOlnvvSN7u6a9BtFAfQs9qM3BmQHe+SPfSQCPVTiCB0EfZD4z8L4b+dzHFH5H
EQ/xed1Qa8hzoK8CfwC+BN4E3sGe+S2MaTnqMdLeFxkP8PuB8H4DbzSwpke5xlC644Clr2i1dCWf
izPQpnsY4JVQE/D9DyXHa/j8Rv0D59L/EORWzJCHodW1x+pTjmMuyPDYnZiGvYFj6OID/NvRbWjr
gzYeaOOBNh5o44E2HmjjgTYeaOOBNh5o44E2HmjjgTYeaOOBNh5o44E2HmjjgTYeaOOBNh5o44E2
HmjjgTYeaOOBNh5o44E2HmjjgTYeaOOBNh5o44E2HmjjgTYeaOOBNh5o44E2HmjjgTYeaOOBNh5o
44E2HmjjgTYeaOOB/2t4QPBftKKv8av595MTX8fF73jxL7/qj8f8hgyS+2my1nlPXlrOq0/hz8Uc
A6TWpT7QLme/1klrVz8wJ9io+fckJBfED+mO7zMLylemD+ZC4AngEKDTdC0boR6Yy4Fa4AngEPAq
4MB3s7JVqA90IfAAcAxwaO20rHr8/fkhnbR0pE1HHeO1VPoKMAEN3yVPRampNA6YDtwOPAA4VDz2
WQgsBw4BJwAHBbXU+jt7oe6p9esU2TP/sgLlnGE5p1Uq555LKiw6doJFi0dZ0QZY0S7qbXn3GGrR
Tt0smtCxoBaZ74l2FxwekqKloJEpqPgimEI+i5/TFZSDP/SUTCFA4gvilk9QS9jTIa/ggUP4KqfQ
JH5Ao5pyzMOaqHd7C4ZES1N+RQn4QvyX8rgVIo/vifMWPDBktPyAngAOAZr8AJ+/yr/iV+uPcZ/D
LAIeAA4BrwBfAQ55DJ/38XkP3+iMl+/iL0y9i5jv4pfj30XsdxH7XcR8l5zyXZge+Q5yI2WyvQiQ
8h2YHvkXNOsvMOPxNxaEfFu+bR6Wr9X3KyzYryyB/Iglp2PEkpoZsSSkFDTKP9Z/1wUclYeRBkcd
1NrTYOqlta/veFFOo5ZWP2heTqP82x5fIGfrkJ74JmoIkKjJ6yj5dfyuzev4WxGvUxWwCHDAhr+m
A9QCG4CtQAgAl8H0AD78Lp5P/h54E78T8yYFgfGAS75aj2Ia5Sv1eUNzhqTIl+UL+AOqOfKo/J2i
v5fPK/qSfE7RF0GzEX5EPl+fnUNDYhBOSOMB9YDmI9yQT+/pkJBjDvHi2/0YeJj5QBEwDpgO3A44
5CHZvr46JwGZHKQjLkLMevpM0Ydpu4uC83OCecPAgD428gb8BDYYD/geyJPBvI33wMlG3m13wsZG
3sr1sLGRd/0K2NjIu+xq2NjIq54PGxt5U6fDxkbeuMmwwWiUW57s0Cmn37gFwjckXl6DXroGvXQN
euka/DLmNfyh7/ANzhx5b33XruixzcFAl645tQdE7VOidqKo3S5qZ4naZaJ2hagdJGp/JmoDojZL
1GaL2qCoPYg/ey/w04jBhhbOwmCaqD0ianeJ2hpRmydqO4raDqLWJ/oFG2Vu/SjMOpASRfYM4Ukn
c/f8ZDCkT7zMRY/mgudzIRMOwXwFMJUriEi+9lbk9Gym7fd0LbLcPQYULBwyUj6DhM9gGJ6h9wEd
A/QM2OgZZPIMsouHWQRMBw4DXwEm4EDs9mjH7cqMh5kPFAHTgeXAV4BDVecrVEXSQphcxSdUxfJh
FgHj2CWfwac9PrkyN9jOk+UJeEZqt2eJ+GwxLtvMlv0oJQVfh03wuryNwr3vX+5v/+WmqCFR8jZ5
O37wIEduiNDb679rhz/zvak+72DOkGTxC3xLHVyHPxiZJzqC9sdfSWF3H8pyMe1NWfglhhxRUJ81
Bcni6/O65RwQcZxqX853WR/mfJbVKGH9NOtgzp98jbqoz3kDPo/ty3k9a23Oi/mNLvg8ldcoQA74
VNT9Wf1zdh1RUVcgYHN9zjIm+3JuzBqRsyBLBcyyAn5WA1cwPmdi3tSckcivOOvSnGAN8tyXU5T1
s5xBVqw+nGZfTk9UIWBZu6KyXbJUof5slWFZv0YxN9jNudFZ7hzn7OsscHZz5jpznO2cmc4kV4LL
44pzxbqiXS6Xw6W7pItcSfwnbgP4cjx+p9fDhL/Sjb/xoeweSBjBYgYmSeGSNJpCiVqpLJ00VJSG
Ds+k0kt9oVOT/I0iesLUkOEfKkIJpVQ6eWiof6C00WlODPULlIac439avluI2yrgG5JrGgVNLm8U
JnvdkhlKGFaOP1ovvLfcmsm08y23VlRQWsrVRWlFCYO9hcOLz2NUKc+q4nN/YjOQ1sLeLrSxdFJ5
aGe7ilABW8x2FaWhuyb5ppXvF1+LEyXF+8U/mFSU79cGi69LJrK/Nri4oqK0UUxR8cgn/oF44BgQ
xHNlk4/jkc+VbcXbbMXriPSI14EJ4kVFUUcVr2NUlIqnC463u6ZDSfHuDjAQJ9VHNSpOTaqveZwj
HRGnIwzESamlIyrOkZRajhMarLLJykKUbBiIIjIoS0XJEhkqiqr5bhUlPxJlbVOUtaokzaqNisMG
snEfs+O4jyFOs47899ZZQ/F3yPcMrJg5rWSWv6TKXzILqAqtu3puWqj2Up9v98wKDvCFtLyqS2fO
ZTpjVqjCP6s4NNNf7Ns9UKVrFTyNgwf6i3fTtJLJ5bunBWcV1w8MDizxzyiu2DNifO9+Lcpa21RW
7/HnKWs8Z9abyxqh0rUqqx8Hj+Cy+nFZ/bisEcERqixSPD6+fLeLhlYMw/gx3SNjosGvVZm5FUNT
PIsGK+YdmJu2LPMAtJUdFBOoCMX6h4bcAPN19yHdh3AQ5hQHxcE7PhKUtmxgbib+jkskyANvr38o
BZZcVXMVpZXMK7b+1+AfvJZcxUNhmQH2O+8/RCkJBWcU1+D3AUtDXSeVhoomTC3f7XTCt6q4An4D
bL+YmBL8uVvLswc8B3BETWuKyH6D2C8qKhLxh7yg6gRv9M5+KBoH94hgtlhCNRVaKLt0soQomDwV
3TBtavkB6FK8SNRUoIE1IiBq7Ny4HcqOv2nP/wjNrrGx5KqILdIXSyJUxawJUKDG7hLlwwZ3ljJU
Xy1BhvT/AUBDrn4KZW5kc3RyZWFtCmVuZG9iagozNCAwIG9iagoxNDUxMQplbmRvYmoKMTggMCBv
YmoKPDwgL1R5cGUgL0ZvbnQgL1N1YnR5cGUgL1R5cGUwIC9FbmNvZGluZyAvSWRlbnRpdHktSCAv
RGVzY2VuZGFudEZvbnRzIFszNSAwIFJdCi9CYXNlRm9udCAvQUJKUllJK2ZvbnQwMDAwMDAwMDFm
NGVkMTE3IC9Ub1VuaWNvZGUgMzYgMCBSID4+CmVuZG9iagozNiAwIG9iago8PCAvTGVuZ3RoIDM3
IDAgUiAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeAFdUs1qhDAYvPsUOW4Pi5sY1xZE
KFsKHvpDbR9Ak89FqFGie/Dt+2XS7kIDDmQyMxmTpKf6qXbDKtJ3P5mGVtEPznpapos3JDo6Dy6R
StjBrL8zcGZs5yRlc7MtK4216ydRlokQ6QdbltVvYvdop47uAvfmLfnBncXu69SAaS7z/E0juVUc
kqoSlnqOe2nn13YkkcK6ry2vD+u2Z9dN8bnNJLgRO2SsZCZLy9wa8q07U1IeeFTlM48qIWf/Lcsi
urr+Js+qYAKqQ4WEIyigyiLVgTIB1X2k+jCREpQBJZEiocpiltJYB2oJlYrBQB3jOTIEPwTUeVRh
RwXUcUdFUAF1BxXvwpYMJbSNFEpkwDyWyHKoioC5iqoWFDAvQOlYEu2PsarGP7KFjcf4jzmycqgK
zuJD/jvNcN7hbVzv0ly852vEA8INh5sbHF3f2DzNIQDfD1tFseMKZW5kc3RyZWFtCmVuZG9iagoz
NyAwIG9iagozNDQKZW5kb2JqCjM1IDAgb2JqCjw8IC9UeXBlIC9Gb250IC9TdWJ0eXBlIC9DSURG
b250VHlwZTIgL0Jhc2VGb250IC9BQkpSWUkrZm9udDAwMDAwMDAwMWY0ZWQxMTcKL0NJRFN5c3Rl
bUluZm8gPDwgL1JlZ2lzdHJ5IChBZG9iZSkgL09yZGVyaW5nIChJZGVudGl0eSkgL1N1cHBsZW1l
bnQgMCA+PgovVyAzOCAwIFIgL0RXIDEwMDAgL0ZvbnREZXNjcmlwdG9yIDM5IDAgUiA+PgplbmRv
YmoKMzggMCBvYmoKWyAzIDMgMjc4IDYgNiA1NTYgMTEgMTIgMzMzIDE1IFsgMjc4IDMzMyAyNzgg
XSAxOSAyOCA1NTYgMzYgMzYgNzIyIDM4IDM4IDcyMgo0MCBbIDY2NyA2MTEgXSA0MyA0MyA3MjIg
NDYgNDYgNzIyIDQ4IFsgODMzIDcyMiBdIDUxIDUxIDY2NyA1MyBbIDcyMiA2NjcgNjExCl0gNTgg
NTggOTQ0IDY4IFsgNTU2IDYxMSA1NTYgNjExIDU1NiAzMzMgNjExIDYxMSAyNzggXSA3OSBbIDI3
OCA4ODkgNjExIDYxMQpdIDg1IFsgMzg5IDU1NiAzMzMgNjExIDU1NiA3NzggNTU2IDU1NiBdIF0K
ZW5kb2JqCjM5IDAgb2JqCjw8IC9UeXBlIC9Gb250RGVzY3JpcHRvciAvRm9udE5hbWUgL0FCSlJZ
SStmb250MDAwMDAwMDAxZjRlZDExNyAvRmxhZ3MgNCAvRm9udEJCb3gKWy02MjggLTM3NiAyMDAw
IDEwMThdIC9JdGFsaWNBbmdsZSAwIC9Bc2NlbnQgOTA1IC9EZXNjZW50IC0yMTIgL0NhcEhlaWdo
dAo4MDUgL1N0ZW1WIDAgL0xlYWRpbmcgMzMgL1hIZWlnaHQgNjA0IC9NYXhXaWR0aCAyMDAwIC9G
b250RmlsZTIgNDAgMCBSID4+CmVuZG9iago0MCAwIG9iago8PCAvTGVuZ3RoIDQxIDAgUiAvTGVu
Z3RoMSA1MjM4OCAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeAHcvXlglcXVPz4zz/7c
fV+y3ZublQAJyQ0QiORhiyxC2CFoJCC7VQjKZiugRVYX3AAVBa0CotZAWAJojUtd6yvWDa1Wqihu
VNqiopB7f595boIhbd++7+/7/f3zSzjP7PPMnDlzzplz5gmEEkI0soIIxHnFomsjZ/v95gPkbCFE
mTxz/qyr1C8OFSB+hhDpvVm/WDrz+ucTrYTYjhDSv3n2jKnTj13+7tWE1KxBm56zkeFe5s9GugXp
nNlXXbtkwMFnAkgfJ6R8+i/mXTFVmKI/R8hNQ5CefdXUJfN9A8RFhBxqRP3I/AUz5v9t2Gd+pNG/
64/SIZJuwg6SLuaRdEKS6CcFiTnJ47yMh+wrQmhGCtAP/9lDHifv0QIaIU30JxIgZ2iI9iBDiUh+
wEyfJK3kbuIl48hG6iY5xE/Gk6FURJ0icjO9L7ko+SW5iNxBHkoeoDcmd6H8NvIiOYMR/FmkpBcZ
ifrjyQzypfAZqU3eS1SymlhIXzKG+slU8i5+v8MY7iR3kd/RXyXP4K1eciP6qyT9Sf/ks8lzpAu5
WdwgHdX2kdvJYSonr0jOIZkkm6xjRcl3kx+TPFJLfkMex5iKaIs4hETJleQmspmGhBcRu5s8TBLU
yuqEgdIzeNNQMoFcTRaTdWQXeZW66SjpqHQq+cvkCSITDynAmOaQL2k5HcEeEa3JfskPyKXkIHkZ
8+W/LeKl4g7p0kRV8v7kc8RHDlCdPkWflUqlW1tvSD6Y/C2xYjw9gJGReM808mvyLHmF/I38nS1P
LidDyFi8+fc0g0ZoHjD+LguxZWyZ8BbpjtnWYbQLyVbSiBU5RA6Tp4GbP5Fj5DPqpWl0GJ1Gb6d/
Z1Y2nb0h3CfsFd4Wqfgo8B0jucDRteQRsp/8gbxO3qAS+i+ho+hcOo9uovfTY6yRfcN+EFXx1+JZ
sVXKSxxLnE2OTH5HgiRMLiHXkeXA7W9IE9lL/ou8Q/5O/kG+p07am86mD9JGeox+wzSWzWrYfLaR
PcKeEEYKtwvPiuXiAPFK8XXxA2mVtF6ZqiTObU/cmXgi8WbyQPJN0I4d/eeRamD0BlDFI+QZ8hZ6
f598RD7h9IP++9LJ9HK85Rq6ht5Fn6C/p2/SrzBLYv5ms75sEN46jy0Anm5kd7K78PY38HuEfcA+
Yl+z7wRJyBZ6Cg3Cg0Kj0CwcET4XnWKe2F3sIdaIk8UkVqZUulgaK+2UHpOek07JlfJ0eb78hXKj
slL9Q2uX1j8nSGJ2ojHRBNpVQUnXARMPkIdA93uxBq8Co/+FER8jp7EKYRql+Rh3Ba2mw+kIOpFe
RmfQG+lqegfdTO+jD9HfYgaYA1OArSLWn41lU9kMtpKtZrewvfg9xF5h77Kj7CRGHhBiQpHQQxgq
TBYuFa7GHK4VlgkrgdnbhV3CG8JbwgnhC+EkVi0gZooLxevEe8Qd4l7xTekS6Sr8PiQ9I7VIb0rn
pHMyk8Nyulwsz5V3yp8ostJTGaWsVd5W/qHOp+m0C0YeAe2f/2Eh7MFMtot5xeX0JLIzqEgcmHkR
1mEsdsU/SJWQwLrYeTnG5mMh0cOby4YI/sOupYdJOf09WS4zAVxRPEb20A/ZMfF5dhF5h9bTkLhD
uFp6lUXJY+BGG9hT7DAdQPaySjaBbREI/YzuJJ+B3peQu+iV9BryGD1J+9DraS+6nLzN/MJYupJU
Jh9iItXoUHqKYATkBnE6ufz8FP5lhFaQD8mXiQdEm/gr8KdmshEr+jj5mD5KfqJS8htwNwHcaCq4
zM2g95sI53p12GfLsR9D4CC/kN8ge6kMLt5L7ideR06RH8mX0iFQ1ABw0xOJOeID4qfJXslu2GHY
ZWQn9t1scjF2zGegkqeR5qnLsNN18JJS7OpRZDKZTq4H17s92Zjckvx1cmlyHnkNbX+iXelPdBt2
RDNaVJKX8XsbeZ+uxz68+F9O7z9mJqaTFvIVDdJcWor9cFJaJG2Qdkl7pd9Jr8s9gO2V5D5Q9Ceg
Zh0zuIK8Sb4iP1AVaxMiXUkc4+2NsU8iv2C1wtNkIA2T+dizBeDjA9pmcg16uRHY24L9/DT2xinw
icvI78hRymgAM7oC71fRz3DgeQq5hmzHCv6aNiFnOrh2F/I15m2nvdm1eJ+BnjaCa7VgTB+Sz4Ht
pDmuruALg+gE9PUDmUim4w09ySi6Gyuwn1SAsw4S/gB851AnGUCz6cNoV48daicZpEL6lDLSNTEy
2ZvNEZ6GjEkifxukVxq5iDZgFA7Mo5X4aA0pT4zBGN6igthI/2iO4h42I7laWJz4BXmNPIo1McRF
yiBCjP7jjKp+F1X27VPRu1d5vKy0R0lx925di7oUFuTn5ebEsqORrMyM9LRwKBjw+7wet8vpsNus
Fl1TFVkSBUZJ18Gx6vpIY159o5gXGzKkG0/HpiJjaoeM+sYIsqovrNMY4e2mouiCmgZqzuxU00jV
NM7XpM5IJans1jUyOBZpfH1QLNJMJ4+ehPgtg2K1kcaTZnyEGd9gxm2IR6NoEBkcnD0o0kjrI4Mb
qxfNXje4flC3rnS3RR8YGzhD79aV7NYtiFoQawzE5u+mgX7UjLDA4D67GVFtmGJjODZocGMohqbo
RsgdPHV646jRkwYPSotGa7t1baQDr4hNaySxAY2OIrMKGWi+plEe2KiYr4nMacRsyPrI7q4t625u
dpJp9UXW6bHpUy+b1ChMRR+DG11FeO+gxsB1x4M/J9G5e+Ck1R1L04R1g4NzIrzyunWrI40toyd1
aJsW5T3U1qIPtGW51fXrqvHqm7FSw8dG8DZ2U+2kRnoTXhnhM+GzSs1vRmwwz6mfG2nUYgNis9fN
rcfShNc1kjFLo3vCYeNg8hgJD46sGzcpFm2sSovVTh2UvttL1o1Z2hQyIqELS7p13e10pRC72+5o
i1htHSMzgPRUmRkzq/PY8DHnMUv5iGJDGw1Q1BURjGRSDHPqzR8zepN1V/TGAuCnlqJV43SsyJxG
bWD9Omcfno8p0kYp1xmLrPuOgAJiJ7+5MGdqW46c6/yO8EJOJ+dJrZFObY83FhU1dunCSUQZiDXF
GPuZ6fJuXRc1s56x+c4IAqCPjAJup9b2KQb6o1G+wOubDTINicYVoyel0hEyLW0PMYqLahtZPS/B
AqZKfON5yYr2kvPN62Og5L2EK+2+RjXv/D+H0+8ZPLtPI/X/N8UzUuXDx8aGj548KTJ4XX0b1Q4f
d0EqVc4RCryhrC3W6Bk4SUhjyOMxliaYpSDKyyafr4LEJGujmIt/Mh80docAojQzaKS60Vk/JPWs
1aPRti3zz22aFbVDo+bkKd7KDH5u1jaLxj5FbeNMjbqx7wXpC0ZnXScMHweOw4aPm7xunX5BWTV4
2bp11bFI9br6dVObkyumxSLO2LqDbAfbsW7+YHCh1II2Jw+tT2usvrkWU5lN+4BsGRmwO0bXjN5t
0DVjJ0866MRJZs24SXsYZQPrB9TuzkHZpIMRsFwzl53P5XUiPEWGUxD6HqaaRWkHDUJWmHVFM8NM
X9FMiZmXqoQ8Sq5oZqk8p1mvtra2G9QYThsSfqEVKGTAXkYTstLMqgwPkcSEQHRFTFASUmUpwYSn
aB7RoAwHSbDI+X1la+VI5+nKEa2VpApx5zk8epREXVFXLh4UCsa5iNByzpDIWRIRW/Au4k6eEC+V
3oIkyqJTjdWqqLiH6EPsk/RJdjloDVCvz+anXrfNzzyZ1gDzhLQw9WZoYeYhahr1Cmoa82RZA5LT
ZfNLTrvNLzss1oDsSNfCklNU0ySnroVlh6KmyQ4tHB6apnrT0lSb3z80YPUGAlaH3W6x6LqiyEPR
hysrKz1dFKVmtsWYwrw+XzBI6FDmcbszMzMyBMZUfyAQDqfpNqtVU4nX43E6Hf1s1h2Br/07bEYw
HLcZOXnxKhu9zbbVxmwjo7IkMdovTdsR/lrdUZJmpNWnCWkjIw/9iuOr7njrceCr0lmJ+IKiotNm
EimOPzyreEmlu6LYrMITrW2x780SXoosM8BztdS96HrnC6u7B3ng6PTTo4TWeWLlZYCop0wo4+CL
AaJCzBMTYhRZ967ZW3mKZtQcq/loxBej1h2o/EfiWM3HI/5c8wnd3PfPfehVH9L8j+iqxHUcPkq8
/2EqJqxNvE/zQVBXJkaz2VhNJ6k27AWOHQJTNUo0J3GrT9NsmAkonoTdZejaP6z3RcQSkYnNbGOT
65ErTXycbD190nmSVFXxKfEB01geK3d6evYqY8zndQf8bMaz92y7YsLKlrWzLiqPJUafoH//EgcQ
duzpxJuJiX99OLHzvpkEIxmIkRjmSIYawXyWr89is/RN2Iw77YqmOgn+uZ18TDBepMa0V/2HdJ+V
j8Y9dyAfzcnW4xcOxtNPKI8zoczv9nkVJgweO6hP+sy1z2zaMWD444nRe3535uOFf6WP0uL3Epln
3vw2cTpxlo9kYeIgfYTys0XVPk21yLrSTDONNHkL7Q3CW0DzlBwHySIRUoL9EbLOWhQswiaqG3G8
FYgYcfJ0K3VVEFdFRY8ST9TnlWUlv2fPXrGbaajLwsm9xg9ha2joletumR+5Nn3aeP6+/nQ1m8O2
YfeWGtESakAF7YW97BQiQokgCoMkp/kugYTER37B33W8boTz8zpSfLIOr8Be7c8KcHgLJU7w3u7E
43GMXiA5ho/1JjrL6zBa8fxoW/lYe5SUof2d3CjAWzMyAbvbLrVA24yQO43hS/Q1+g66S9ml7bAf
0F7W1AmuWn9teELWLNds/+zwrCy1glXIPbWetqFsqDxYq7bt0F5jr8gvaC/Y3md/kt/W3ra5nMFI
kAWbky1GrtsfD25XbVmOYgdzGEg5thMp42gNbADhbO9RSyj61nMmNkecHOn8vmEEEHqyqIEDpy1S
V0dLA36XU5Fj2cTl7NUzkC0rssvp95eV9uzV0+XMy2Ol7yy5bcPid95N/IRn2Sh/RrymLBVILZv3
JqYk6vdvxGFsO31g/8Yv+4+7KoGfZ6Eb/wJoZ8/2BwYfAvLzgAONTDC0K9kv2XomgOppYdMUiYLT
XH5A1SRKrBrsOJOAM8rqDJtExCwxIjaKohjSD9EdOBGlyKJyBOeyYA9VlafrToIoSF006pKV8p45
vcqEvMSJe9+8mrKS42Jsw+Bkziur+BqW4SxqxQgyaJUxZV9wf/hg2qviS8EjwSOhI2F1YNrA9IEZ
E0L3iXcHd4nb01U5HCEFcq/wEHFgcGBoYFjNCeaEcsKCP0+cIK4Jbknbkr4lY1f6rgzVTTKcGZGM
HhmLMlZmbMh4N0PN4Ovi9/riGcxpdWRwUmOcsg0QEIqasEakmT3YxKjV0UwnGLEsa7GVWfnaWbd7
JO2o349DCCXhLMdR52IWymxfwNPmClZWjuDsobWo4TgETFFdQ6XLXUFdZUV1UBsOkoxkyx5XBR/D
HocZGHZnhag6KyTVhdBVUWT+1O6W2cBxkwyLlhZKY2keyk/x6Aj/6mo5ZQwfPelpkgYVNR2QkTzW
u3fvWtpQB3pxRXu6e4E2yuN5MRBLbs+cslKcbkA2oqyI1nP5zm3f/K6oz4zaSbPVxBchqr74/pmL
R5Qlvr/YT6XE2buo9qfdVRPHXz5j7i/Tv3j1q99e0TSt/+lReXyVRmCvpGGVCsn7Rulq3ys+9sv0
9elsu/CotMO7Xzgk7fd+EPwopPq99Bb/LQEW1W1EpAGPP5plc1r1ZppjWGts1LDdBsFjo/5mygxH
lqfYwzwcvZ7taRIFyvc5QVegP6xTKbLF7fm2RmsL1sDqdx5dnnVb1tasJ7OeyZKyjilHa3JoTrjI
fzSwmB4loS7ta3EytRjgTXUnXRXFdW0LwleFJxtOUo5MMC0TpRyrQCrQR+o8uebeMrGn9PKfR2M/
VoadCK7qx4PEsnNGUKdtweiJixeM6Tk8a8GSSUOHzLQkWtOuen7pG9fPemvZpsTnf3wp8RO9KTr7
6pXz5/7K95kwZ+KwSdPru9609dKVv1jz7DVpT930bOLUZ9hPQK44CHjViY18bFRYI7YKzRqyFlnH
Wq+0fmKVT9qoLPrFXLHANsR2qW2H7YDtRZtGmUqssk2RdItNIVarzdZMf2uEBdErgIkyq2gTbEzU
iWLYWmxHkDhMC2AqY3TvfiKKaECa6aS90m06xcoww+1UtirPKIISdlSx5YyxkP0QvYQOMXf18QaI
/xGn68yNXQWFoLWukqPQXWHi0F3BBbuYEuntpNvNepF1hPV160dWiaSIFugtgpZVTstckOsu6qJs
WetO9qtv9u9PnEo8SfO/F35z7vIfEu+zTPpdwgKKuxQUVy5tB19wGoWqPWLt5R7sHhq6x/aAfZP7
A7vmdnncUVfMfZMb7IjadGDB7XI1s22G327z2u02t+7lNlWDCqPoBjC8C8jrgEldaTaI1MmGLUsv
1pnOCVHf7uXEZ/H64xFvidfwCt5m+pjhhfLlLHayYmeVs8YpOHlVJ3+Xx+Gwiw4nyPFIgBoBGghn
2Ztp1HDbFtOnjhBqwDr8JNgLeMVBenEbmwSvP30cPL+ORzi7dJrcAhlFJvPgj7oG4Jij1g7UmkLW
pFeTVi8g1HwP8Kr0LCsloFDIipxLadC6aMSk65ZOXVp/fAM70frXrpdPO0zFObclXksSujRjyrzb
NqxefWWUnU38+GNx4tT7+2597gPQ4kRgvAtoMQD79NNG37mWhepqdVNoh7RDfdS+y3PQvt/1tKfF
9YbH5pN6ugY5r/PvY390HvEqh8kbaC5SJeh2pkXAtDgKM4GitO0OW1a0OMqAEH88ur1Ko4Z2REtq
gtZMa5qepBSrEjWys8Ri7HpeR9zuk7CdF2cerbFSazg3eNQdyjm/tVNy8nSKyZ6uAwLbJCYnSL6j
+V4GqVEpz+SAwAq0IWxZCFACXki9XHim2KPoSJzSxw2s/aVzzpbGs4kzb/w58Qnt8tcdf2p9cNno
kbPnjxs9XxybOW7UttZfJU6//ZfEKVpL19I76fTD575ce/d162+7aTmodCL2bxBUaiGrDhIxeczo
4XDFdUvY0kfsrQ+RJlh2WX5ned3yvkWPWqhFUEiWpdjCii1VlhqLYOEzthzi6hB9/ABjVFRUq4qt
2VSsUJxq6g07qxGoELbhSGNtwwK08YZK7EfoNFwFP2mSDp+/Ofci6Eg+mbFA1O3uNVF4dvH3N9DE
35STL4oPUukPCxPDEp7naAlb8iNocmzyczGA9Q7CR1RCbftK1IyseF5z8ozxC0Recr3keU96TxEX
Ohd5VzqFPNLF2pP0tVaTS6xXi1eo0Ip8i/NX52+ybQ4+bHs0+Gh4e+aO/O1dHy05GD6QGVjsWeVZ
5V2dL27COm4CptK7b0asSOPxXKE7n3pV95rurPshditEWYvh9Afj89NXpLNt6TQ9XXYXcCrSUK2k
wChgBc3sVsPmtlVl12SzbN46m+eEZSnrqLa46GiNgzrCpaGjwuLco/5Qj/Mkc14amOpVXVVrXZHT
lANFJ+uKTLRx1Jm00yYJSENdURHNyyuPg3xM8cn5vhjLzudZng4kJHSI0yFXXfHZW2+emFt/3fJE
63sv33T/ooNTakbVTxk5uj68uHbigmtrZ80QAt0frH/43Xcfnrm1S4+nfvlaYs6vji5+iY4ed/mU
cTVT6lsvuvbG6xfNuv5Wrp32x+p423bjEWNSX9dw1wzLdepa9VHpUXW7fbtnHzko7LM3u/Z6fk9e
dbV4XHHPBEutbYprjKfeI4ekxf57Ah85P/ZKsz043PLNmZVWjM3JcYeNKTmjEWxMjmQncqLbSzRa
o32snWrbnNtSm7ODRE5DNexPW/BojZu6w7mpfWrtsD/bkW3K3H+1P032BQS3cbBe4FesPI6tyTdo
LDuPmpqLz8RrHXXq4wZPvM41d+sTZ6n2+sc0M/Hut4+/zS6/fszIWdif8+jYzLGjtp37JbW8+zF1
JXYkFiauTmw5IKSv2fjLm2+9aQWwyK0Fz8CTqhCd9j9IlORRQ+tVEZcL8FBMAisoj8sGHkgdNUZF
81GGRyHpAl5YoBdbe5NeUpV1LpnLZggzpdnqLP0LwTFMhgjWqKBrmqholEaI4oUHQtZEMSLJXkmS
Vd0IZ/TT+Sss4Yy4nssEQRbB9p4y7LLCJBGuVtWK8zo0zqmGJQt9QFitoAJtZjmGlqXREm2FxrRD
LIeIqKFFoI+HLJdf0XYAaw2B+52uawi2jhw8Y9Dn7UfyESdBzsXQPovMA/fq680DNwLFWVm5+oUX
UhJ6rxbXbHFSxPXJ4Y2WscMbM2EyO0iEZGKPKuqHkglg6txuWYRumdIuU7ppNCrgl0Y9giA9k/jd
itb9SxMvsr60osurL9IRiSbp0Ll1LNJ6DIcKeAmINA2Y95AIbPZHjarFXehs+5Iun4vfi6IW9Wly
Qddort+d5avxsRLfkz7m83lj2blujxrx5lLC0vLnyyvgJhtekP8kOAcw2aRZ4hDYN+Pk2N3oPqp7
fff53Vd039B9W3c10r0ErMSbHSERTwmUyma2vqlbj7Htx5JWqOZ1Dd8XcYFbB04AZYaDyQhM5dyX
XLEno8KHl+wJ82DFbg/Xx2tRqV22nMeVA7jarUegdXOlMVqaicO/bCqHOP/KUhQqf2mvnlzM5OfF
BFe0LZEX28iG/fax1ZPnTVm1oe7BRcMSnyVstOC5J7pcMnH4sK5v7qLubUUDxhpLX5UOZVx2z5RZ
jxflP7V8+tMNNpWJLyaekLSJFw8ar0mtBxNLNGvdyAGXdeGa+dTkCely2BLC5F1j5CptrXetfyvZ
LL+kvS28bflO0HK1AmuBrdBb6F8oLdRWSariUQIBTyBQyLoIuZJSIN0jbdJeEX5vkapoDfSkMU5C
j8FBw8wzkSuIMxFQr4Ne4IswAsFuomo37O64ffgUB+Vs1/AF4zgvFRjZ7m664PjWPoF8S8yuwiVg
5b78bQp1KFlKCTRMrF5T2rK2dcFqjHRCimNRuEg/jSPT8SIe8gjEGQQ5P9ZIshiLcAYRjQT8gZRo
xzkYklysolkDEq9/k/gwsYZeR+PUtnN6aeJP4UcW/ea1l7ct2sXSLj31Jb0NHuur6d1bL2+sXrDy
q8RPia++AXFS3DMg4ilQqIVsMC5SJQjfXNmdJdES6UmJSZImiLk4JutaroXAKzRcYEN0AiEejthK
bAaUalGLYOOXcESB2qwdqc2cFqR0panedSY2CVSWUSGBykBsPPiZ2AQJ+9S0VPig1plwt1h17kt2
rDUilEmHziQO/5Bo+AGj34TRr8ToNbLAqMLoZSlXiagl6jPqx6pYrG5QmaqS1BQ0jL9KrsFeGiPg
EMDCEUuJhVkuHL/+r8ZflzrMt3IzH86zrZX/NL5NwsnWvmx66xY+tkfOtN7OMcv3fhcTs78xcjVR
0gWm6bmi+0koMwIxrY5MUVXgVVIj8humsrPeyDZso2z1NmG+bYWNcSRvw+lFtDFLCs0tYCopRC+8
cFsv+L6uzaoLu5xpmuSjNbe1YGJaSG1rHnTCdDuyYRhK/W6kBWwQLUgcbX1KOtT6DOv/UzW7oZVr
evdgTs/zOdHbjbAqU7db1yWBCSI2vQa/oS5pqqZDeztgFCmyFzZbgQsDHcJA1zUwf13QBFjYZAW8
H4tALBZVUWFgnL5HGqIiMNyKSVrs/IzbCauN5/NJhjhlBVMbJmWExZxDmC+4VKCCAHBmCJrnMTOi
cpOr6qxUXxD4szLF//dpEYstDny8ukfNhxzggoAMnGSE8uR8bYO4Wd4G406LqKyUd4pfiN9LkFvJ
Y029xsQRthg5iOTKF+nXCquEe4R7tHv1XcIh4RVBfxaXOc7pwkX6AIEtgBZFixrqas11kJNfNLkt
VXJz8gscmSxVYonNj4fVWyVGLO4qjORIkyOUCu2BVIgaZj4qmWFbvT12TxVGzH+o+QQb5oY92Fnx
T3HdgxWcQG9tPcqqEzckrsIGb13I1rf+/twNrPG7xGCsJEgU6tEhYmVBw2IR8tQ8C07NFC9ZYWjp
feJ6pE9fPtNjTW2h8XB6d+TiIWOdP9W+0SHBdN3D0kWnlqXHWFcxohXDiDtbnKHN1RezJeLD2i59
n3ZI/177SfdvFTdoW/UXtVf099hR8V3tff0E+0L8TPtKty3Wlui/ZjeLv9Zu1jcwZZJlBpsrztJm
64vYUlEZxIaLg7Th+kR1ojZJV4J6sT3O+ohxra9eZVf4QV/WNN3HwmJAU9oO31lMhFoiWRWlVLZb
SyGKnTB0j1JtcQt/mLO0Y/VVw54ft/AHsrYYTh6xqAJXFZmiw1qAnVQFC1agzS5VR4tPOt+GehGo
wPmur9ENb4mIqqaVpswODPbiUoHBAsHQjWAVGbOC8DVFzbJTnIltTdyzfghWWrC/pkvr4mB8LUZg
7Li4VKoYynKVqk8vxyo8bYlYrKyZ9TbclBADFYmBSqQ0iysB6MbWA/vfeRpHvyJn5V+dleGQs7Wh
taEyHMQxuggZzuMNGDw30ldVpjZE0c96UJvO4xkLdUdNHtttiXAFB2IGPw3wchQVEVAtCArUlKIq
1+30MO44KPSpxMnER4lPE3+GmhMUvvipWrzx7DIOoKnN4A4xzo3pfxl2TZDVkBBQRbcKra85STjt
IzSnzUOjC2YklCoq2IQqqIwpggZ8AVeCyGcs8hmLpfIbpg12vREyLKMs9RZhvmWFhW2ztFhYioOr
fD9yXJr70j52bFwrNUVSO6/UOa64wR68AyohlCBM0mSXSAFJVaZ2A75RUbG6O588EJWiI64MHjM0
UIUaSdFIywHojKphKo6oCZYx0FQZV+y3lKsrLOXmxC4Kd4+rY/GQBL9QKhiCWC3cBGG0Td2jHhfk
F4Q31A9UGPuL1bjQV61R7xC2qtuEJ9VG4RnVklLIy+DGMPBA6phhKy6Nswh/KN5y5GwytGj3OBuH
h1m7OjOCFB4qU5QgEwJKV5av9GVlykhmKJexCYrmZWnKCDZYuVd5THmNvc++YCeUH5klnxUow5Ql
yhrlcSZToMVcfI6DItjeU6RQS0xK4LKBujbTCJtEPYn3WneDALoJb/1ULTx1DpdNGG5JnpBOQAdz
wFP4kDF+k7RJ3WzdbBdVqthVhxLMDy7RFruVxa4lvlXiWnWtdZX9Jvda7xrfmsCa4KqwVXGDEsI+
d9gbDvrCiqebTQt1UwR//pM6JbpTj+iCzvXeSEmGkVGfMT9jRca2DDmScSqDZTjztxHKvR4lpny8
uSl92fOpNYd6ZWq93MwE30IVPCAg9AborHGop716lrUpVQQuzPNmkdqBpU/MWtuEyzw3JZYlnk4c
TCyjPT7fvfvTjw4cOMbePrZ5/p6iPjhm3Zu4PzEPqtXsHxPJZPLcGXiTmKlRncEu4HhYbOTK0kHv
waBwsURnSe9KzO3KtdntJM3J1SoHUTE9LvlBwdDruWZo+LMyStrmJ2U4HR3Vq/SO6skIZ0qXNynY
VE6gmnB9scGUBVAT+bkdyngsFoLxtl0Xv5v+idrHLNs1bdPIua88+9CTiwZePqR8m3TIH/3oydXN
c1y+1vfE5xL13af1HzXbpmM+XI+BHoBbo1FyxrixwjHUMVGZa5lr5T6ibbH99qOaLquyHlD9ek97
tb0arlyn5vLavQ6vs6e9p+Nix0L7UudbumWJtiS0KGONtia0KkPW/F4Nvt2x9oX2lfa77L+xS/aI
zeq12awOq88W8Od6nF5a793mZV4viUQ5uoA4H1HBRp8y8onNCSP622n52+RGuUU+Auv+6vkxGomV
xFgs6uuIteweHXQHfgKqazv/mMzxZ7WOn3E4B6jrYG009W8YxsELS0184ogT8ESF7iwWc+GI045V
HGvmff3Oiueerb9+blPigXcXjLt8ZuWf3plbWTMkZ+8J6VDNqzc+8l5671WPwb5W9VhttHWLMDJn
0oBhl8I4DM45DHaOv2PvdKVHjIsOupoz9he82FXEIcWHQ4ovWDRDmlFwrbzEdm3B+9Z3Y9Zafbx9
fHZtbLZ1pntWdE7BrK6LM1ZlbIxa3TEusTOz4jw0ZoTC8dHZo2PPZj8bExuyG2I3ZN8Q+0v2X2Jy
kd7FlpOdE6uwxWPD9eG2QdkDY3NtM2JLbddlr7Wty96u77DtzPZApbPJ2XIspIds/mwlO6bb4M+Y
EDRCkfi8IJ0X3Ao/3yE2A56YFsMarshKo2ndvAIZQjl/HxqOxLnpeRSu2Wyg23AHoQVX9v4qGuEK
J/x/3bpowW+TsBYbnkA8MFzJzwt3z8rf5mx0Mudw+q0rdaoIdftj20Fp+NhJu4nRu9Y8vcIIirBo
AT8yNRSdris6ngoXFB2HtEuxLlPpygY+0jL6AR9H2sJP93gqsoEeBMh9ZY+bp44YDneFLeKu0E1w
8LwvDLsVebYKPcjBPAubrNF8tLuofH30Prby7HLgcahtYHZ1bLv+aLZuWvzNrfiznTofR2HTfAam
A5sjt84qss8b8IsmZfHz3TAaCW9dfdvtF10SP/jX+tXLv30U13cDSuKo5/rrbxha3LU3bXxj4c1J
8kziq8S79KP029csHR0fmubu3nfC0t/Of37m31+1NVxRnl0Rzy2eedXT65d9eCWF/oB7fDgnHcQe
VnBOihVrJWKJNEqbD9vKBk2RqcRy4TBRiKrBFCMu5/KWdjN0WYE1BlesoYEj6RLso3CPegXbwEQW
UlsfT/FXOOJ2M6wKt8aC/+ABS8zxNp7ET3G0DoKjnJ/i6MeJEeItiZHic2fOnO2HUSmwFq3HqKw0
abiLhCI5YimziESmFiPcJw49eUUTQqFDuCdUDil/wtC4NSmEBywiqRThKWhTx4xaeIDFCB4K1ELZ
GiY+rZDkasqX+gnrD9qP+g9W6SXpFf0l6wfkbWih71q/Ip9p2mPib6TH9Eesh8Um6bC+z/qyqHUX
s6ViPWK9T7xTuk+/26qmlIK9KrXbMLiWJnuUDw72WUSgREb5kLc0pfTLLYaPa5vTecoi4+qwApUS
Z1ATMx00SpPppO19ziJKkeZkSZMMhbI5WWpcJhBrhOA+S4QSLxZRx4Gx1KJ7cRVGkxUccjWvqmqi
xWptUz3xEsGKg61oFeARww0KWVUUiR+zwDlNJRSsE+tbDB2zmZYYekR+2vK0Ucx1fiStEW56YzRk
a7euhUMjWuvCwdbWcKi1LthuYEtplPzJf83Rg2vi8oPpCuMnrxHdO2ia/KZLB73T1JhMRbMhtZPM
Q0xDHTen4eDiQUgpnZF4iBZ/RK3gG/QvtEtiS+JFGDc+gsLhEr49hzsY0DqHnG0GYQ5NfoE78/3g
qymlDcZsJaymSxn+8LC0IelDc//k/Nil9QxVhybmzQzNyluVd0fozvB2uNZfCr+cZpVlm88vh/z5
cqGvNrSYrWLb5X3yi7L1mfj7TpaRU9rD1dWWYxR1j+cY2QV4hDLi83LO5bCcatOFXmJ3xC/KoNy/
3pjxY4aYkdGVlhEDuVwPYWR81Eh3VUWNNCceuHYUbWbX7hMVq03vymkHZWaIYjNEja6oYRheS2aP
PLVQK7DVZlm3Whk0/iSUfsMO/3u4Jk7j9dg5t5YATWWF0SkB+nGA1gSmBOYFhECobE7/Nq1nAbhj
w8k6flCGHYmnjvM7CTguFEHhhRps8kzToFGUIus9xRm0ofZku+Kbk2w5kJYRH5czPYfVFdXWoQXE
o2CHsYBv6gZY/Roo7rnAO+D3wQcQiHLuJsOWzR0EUKxw45i7nyjXQExbtumUpzOSRX9846nm4UJa
buIri1MRhjxc9/DTE+674/eXjJo3fBy9vOdXOb0mDbpkcJnTwj7pfu9dtWsPJJpvvumS9F4htbp6
z5rJtwxPz42kjx7cN/FHd2kwv7LvhNK8XjkzgPLVoIa7TM0rndx/EBfXzhg9LBW90i5OY+4J8gR9
gn9CsDb9B0UuF/va+nrK0waLw23DPYPT7lLu0XSrHeRPwliEPZLi5WvhsVgcRA9E1fD8TJrpLGRC
Hkx8hYaVzifcrh7KqErhG76ok62Vn4+ERsa1zEquZ1ZxXawBxjuYFCwz5Zn6TP/M4Jx0qQ76dBE/
qwN1uHHNDf75Pg+kwHntEzd7btzzXCLRevDS3YY7PnRp3a9XzpqxCmf4U3clTiR+hK/4g0trt7Au
j9TM3/rY/gfv5xx+POZehZ0QIn8xRk9y1Lpr/bMdc9xz/NcHl4Y2sU3WF50vBt9zvhv8Uv5S/dLz
pe+M7Ont6e0b5h7mrw7WWudYlT7uXv5eQWGxtNixWlrlWBva6d7hP+je79fsnGKDaXEe7nN74/Yy
G88JZcbNEN4+2yF8iaEDZ26XhRioSgzUI2UbQKeHwL5EFEUCCuW5NEqKbTxii9bgVBxOU6LeUHhS
CpXmPSAYQ4tOnyzi5tC646BYbg1FmFJugdOU+TPlIeklcaJr822KPRJf26+omXP98itHzfRRb9Hp
179MfE39J5/7jH1TOnbc7bue3nLpvOLfPYfvJuANork7uMY+Drib2kY3G4xu7lq5Vq91p6hlM0jj
jKbNz1yRyfoIcWsfXzw0TBhkHeYbFLpH0zid7JEsnGoMu0WxO7AUeqDQbsuDU7fQcDhI+DZOO1E1
lDGp0tycfIYN36coxpQGqVMJ7LwNnFZsc+Q5+hx3ilrkOtxrL2+bIM4nAZzBOpKKODVxtv/uyQcS
ZxPP7bmRhlrdxYOum7pm5azpq7dcWouPfiCraOgu5jw3f9clVz/y8IEHt2K+/THffNCKl6TT3xwk
TuyTaksFbFi2jc6d0g79sHbY1hxWVS8dwi6Wq/WazJ22/fL+8Ev6y9Z39aPWM8oPNlu6I91ngEP4
DLsr7vA943vDJ3DXQZMjs8oMYcLyNbNbDCj57lH2ejuzB91cL9wfSovTMrdpUM+IpAzr2YWpsKhb
Kgymm6HhADvdBpTiuiIjU9xuoLlJtLiDHN05FoVEabEvRUTFmVMy52VuzRQzHVHVsDniQHgbNyy6
wMJ+Emqh4Q0aBd6qoJHpwAMsOMh5NZdItVWtptroxkRQw80nhEpmiHo83NNeFY4n3qTIbEBQAPc7
L4cJsjnZ2KTp/cxk/2gVzCno+jjnoNwka3jtBrBk5y+189fDlRBI2fNqTbcVTuEQrWVcecJJtQjG
fzkWgerI/fdEiJo3dDwp/THAfqLBnl8+mfj6pjnU+9ZJ6pZbDeHGqQMm5wtLJlxWWUnpmOJ7H9x3
+0eghaLES4mnr18/hP7iuuUDB17D+UYQG+BznDz8pNmAL4F2ESPOiKtWXBGUVPGZIPP5Xczr9rvs
Hgdx2uFEdTKvpjosdIolCfM5Xwhdpi6Hnyb9uNGEZCZuR+PTJ0pkj1fXyqpg4BgF+06Bs9g1xcVc
zVQ0bHZPHvNOIdv8LX7m5zShWeP+UGDJQTYndT2kCCyV300+VweVMnScBMFUue0dAO91Q0Upvzrb
Joc8sJNwQRRQuMDx+fjdGlyKCW6puGfhkmvyBva7qPyPf0yc2CLmjVq1cmzOC86K0cM/OndAGGru
/cRosd7UIIrpSGPa4ozVGcxttc3vscq2oocYoThNCiW0jJUJBh3IBgqXOmq9tbkTCicU1RZf6Tjj
OuNx97WV+fsWlHXFMco/vGBQ11PW1oB+K2S2xWqzdLHa8u3+gK+bzQpFP5jDd8A+cweYG8DuMomk
yWJNhQVdUhsglpsKe8RTG0HzpZmCfwquI167J8uRzwO73o0j3OJTgiG5S6ElLxzkTEcLhcLh23rQ
HmBBzYZOynKi7lDJee7D/dOc/zhPOltNRZ0Lq9bTbZafdvkPem7CxjYpGItjki81zev8lMwBp/x2
Eddg8i3HHO+c3FmFM4vmFINvkbqA5OdSzZT75eDRbQQcKI/COMBiESgKHS8SLKX91YyCCVf3yvXY
lrW8e/00Sp/5/Qqq9Jt/+LbE3z859+v6WbeumT3j19X5vX2ZUX+P2OX3Pb7vtneohYafuPvcxU8d
mlt58FY7+/Wj9z/4wCPb7gcB3oFTTy34up/sMYocNAsfQGIhnQPoANef6Y9UUyS/lMMmuWa7JEqZ
x+tyewQvow6O1AwBDg3d69P9hFj0PFUzIjnxJzWa1KgGNEPr92fnxDcEtwXZ/OCpIPs2iBv23jw/
Z32GA3W3+egpH/WFAlUptg9jGvddQCND7Pu2VOo0ABvtSeA0YKpXqnlmgjTgCgK8qiDluHmRR+ZR
+tiap6duqclInIiMvqj66rIEbAutn20dMn/Nba23sx47JpcPWruq9RtMGgzTvBmMKP9KYPFBomFk
VS69ytBGaWyF1qi14BrSt5qUpdVry7VtyJAEWcEnBAKkmEGOkGNoWQedSJZwc1JnCmQmn50WzYmL
IbVtXuasUnLM3J6mc8x0KUGeLeBXcXDRzbxynDiB7yv3UzFx7uwwMe/sB1ihn0c49iA3iRuFfHzS
KImtkBrxlegR6VtJypLqpeXSNmTgoj6GpEMPo5wwzZHgkvQ/jcRkDAtMLQtXnaVDP1XjXcvg8diM
nZ5P+x4khWhdh3eBs1p9st8aF+JqPBiPDWKD1cHBQTErrLOFY7X6whWFWwsflnco26375H3WxsIj
hccK7aSwuHAUCp4p/LhQLjTC6fEqpFeYhZISFZVwBmeFe3SFa/1Gpqjgw4X8tPT0vHzYMmWHM8/t
MiaX17voPCCnmVUbjnBaXkY68ual03r4i5G3NzcvL59rEXsIycdsmxxaFQ+Nnhh3PqrmG/0BlYCc
/Hi+0eeieHH+G/kf5wuO/Kz8FfkCyY/kl+Qn88X8UMGnKSJsM+lCGqX2fyXuTxSBzX4PRxWCdnI0
D3lgC9jw5o0y4HMBHAIgyiLccAdd+gOm5o8LoZw88znfNcnzZ0pdRoX1LTM3llQ/dNnChwpArxn5
o/vO7p44kVnVs//sbokTYt7tj44bP37clMsGbW6tZVMe6F45ZP3GBGPV903uWr3yntZzWDN4qcRa
rJmfbDWCiifgmazOhrtQpFgt5yB1kONLpySb29Wl4FButVigfjGa5yfmdiUUd/3Iv9uuuiXPCmNi
4R7YHDlezV1rpafAuS/ctZxT/vPGNa2H3J5sam644v3z5OG0Tm1esTZxImd0xdBri0D80vq36u6t
yWKZj8/oPWrlnkSWmLdl78DZK3/J9+oY6GT3YqY2aPCbjCFf0BPqD54ffOJL7AsYjUNSSGO1zgme
Cf7a4Ca2Wd6sbrI2a++wP0kfau9YYXiXv7A5d6ivsT/Iz6svWqWF6lp5pSqAtkCFlgBHkVdUvBVK
uD5tPu4/2aMwmHRQuVMHF9M8bh5aOEfX5jhnQg+dExRpHdg5vk2JuzEtXLHk93/zcjtc/BqzrnXL
32g88co3dyR+WEcjG6+++u67r756I8u+mcrrEi99+7fE8yuTOx/YuXPblp07ud6xmhChF+brJDuN
gk0S1ex0rDRTWigJxe5J9tn2+W5R1xzWLCu7zZq0siprDS5AN7PFRqGiYI0FJusF+GxFK4EZS9TC
y91b3WyKe7n7SfcRt+h2kjxu1ig0LIytgOkRdg1X1UGanlIuoFucX9Lv60IjUuoFmDC2RwW+kuVX
WhrI8MYA7gSVm/dcSnsDAVhirCswkFI0ZBfdxld14JWD6msnXnxR3zHFYt6mKweVf9e9/67E3zDH
EqypE3Pswp4zWmSXHFPzA65AbLN7s3dT/t1dNMVb7WXuw7aD9pein8XO2L7Plgtt420zbHdbNrl3
ZB+0Kv1jRs6gvFnZ0/NWu1d7V2X/OkfrlTdYrrYMs9U4qqMDYJPNyc/rZS2PcgtkeY4i65JLiwZt
+dbs7OyYkpNtdL3GusS71LeocGGXNb6VXe713d1lb/bemG0FvS1wc/CeLo92aewqB6J+IxqL+430
rHiWn34MVa5MjY7KvS2X5RrBjHhumBspjAA4z6iutKQrLe5Ku2ZGS5zUWUajpiYD7mSGqJLizdxH
Fipa0swPPefAcUyLRJv4M+8gcffSSZJSOIxymVKZ+mleds9odXQcrQ1Mp3MC38PnGGBiOJrNCjw2
KysIT4HluLrAMipMw9UeBbog/nG1pB3qGtIOkuzka03QpHCvzwy5tbcpM4enjzVl5eDSJELYxnna
SEPkShvtmV2dvdl2V/YL2W9ny9Fsq00UcSstpauRMq61NQW6VSE0FXsznZ0b56GRAf5PzEvWo6hY
j+trpyjsfU7T7i2aNT1+1KTUGAG/8hTxFK75Ygp+A2qgvyxgoN+AgdNCwCjvFQ9wi1PAyC3EA/06
AlmmcUcMjA8bUDgcYToqnAyztsmbpm/glh+PuV7Mbw+Zihw/a8AO3mZl41fcwL4b8FOXuhOSk3zF
0HCZwFGAR7Q5+c1+W4XVa63g0T1Wbv3+arelwrTO4YJB7fnbivy7Cth5QHSpm6EXmLH59wHQ8/JK
aNh99RVX9cr1+oYmHr902QefffB2QeIH15RJ80oi6Xn02dpJp799v5UWF40ZX5BeHPF5XcP7Tbhn
3VO3ru/Rb0CWP5bpS585bPiqO/7YiF2UlfyC3S7dD774ulEYIVDJ9UJHH/swe61DCflIUPD7SMDt
gZ3czbw0KGiKrlihCFPDQQLbAo0BoR5BC+xjOHrsgVEAzLCJ+PgXkzizWy24tFBMSDGdAi7BDycF
QSEv4B7vq/Ju9T7pFeq9K7wbvEe8p7wS8Tq9/EK8CHPFkm3tlrbhjb3AJ/qadwe9yRZuCucnF1jC
nafNkwtMQfgCEKfF4xCnrrK2k0sdxTHFy49yvQIcadw14MLHf+W5LnZdiyU/PX9YcNqvLrmuwqLd
cAMNi3nHEuNuLEpP+6BL2ejBPe6mbxx76+HEWuDnFnCZsfhrFX6yxQhMdM1ybZQETQ7JlazSNZwN
d51giqnRukSLn+g+Lw5lOJnl+Xww6xfCrGhKytTx7b+RlJrKSd0UkSo9BRvyhSKyo3wccZJ/8ghd
oqOErEuZMXCjGBqDOW24zhAVRvZ5es6Vuy6hoawxVUMWdKGhreOnXb5rI9uWCB6b0bdm4XHaAlUR
87RAF5iMeVpomuGTCsLFcYU/ZP5Q+QO2+KNNCE0lNQLPwb0ilXGdQ9WtFmjizC2EtbCeTbpZXrLg
44/kKcMP+4NOJIuXhCz4YzSWOOljWU20FEvaq1Ob1ezLogXiuKmqURmfqFTx+yAV5q3pClwjthBd
hEleg5VdRlyr4BYxI5heELfYssw7cqINVnenXqXXmA7sEsMisgoLjHU1ooCrICVQUlYYDms5oRE4
ywQasr4A2sIdJ3i1cMmpDspHXcg0v5tpU0fjCho+q8IpzNzaRRBYbReBYEH3BLj5FbZ0eiAxjua/
3Ccg252v0mgC2Gv9ZN9gf7duLDOFUw06cW/g1Eo/MnoAszqRma5IWhrxs0zRJYUVr5apu6xW0z0T
s1QIFfIQYYi8Wdgsm1ZBY3HXi4FCC77IFTWLLlrTSFj0S14tpPus1hgpEPOlblqBnm/tgSvE/bRq
cjG7WBqiDNUWkyXiYgkuYX2xdTVZI66W4BjWV1vfJ++L70jvwDPzDjwzX4nHpeO4I3Tc+iP5EZew
zijfw4XzvbVb2xqd98Vobb4YHyIWHAx+9rrIGl81fieOs0SwSq7VVpx3uYxoc7lcYpRyl8t/50aR
U24UXECqgjULq6r21yj/cFJmVxELwMA3DPa9EThRXjhIwyllg7tR2rwoKScKPsbC6rV/OvyvvSgY
JV9Y8G/C+fVei2GrgHPpzB5bBaj8DJi1xbDynFNg1sjhAVLH9mCFELSzbi4YzAu6nCo8/B+NCgKt
TTRS10sHqGP3a9SXeCzx9wN7QRlDWDOHsx+wx1rHY79Zsd/qzf222VhfoLwsss3KQfohfUc5ZcMF
2rAYlPENIumtDsFHIb+iCxU9jxYpPWkfpZoOUzZbzshnFC1XzFO66HGxjz5QHKk/L6qX6OPEWn26
eJW+hF6v3yVuVA7p74gf6ud0myAqOHP78fFbF71MrNKrRc2Hbyv76CP1K/Ud4gHxFf17UcNdiVNN
7iDf5UebfNiYXIj7rK44FfHdO3eAIVCJhutXKNlf2C2eNK+1HTMc/py4kMdwF4ZpkmyxtBWfwnVW
3kcAxZY8IuEOuwRnGzRM3OuyEBhcrtojl2kIDIs6owZfjR/DvVeBZ7MyGMCuMtzc2gVNlnusRTLj
5/3bYF5SDOECStt1RfMzcZMx8q+aihrafWOpGAgTtkP+SFH3Pj0CQuYT3IMQwhg0wUVyXUPDAtBG
w4Iyaq4rnvD90eWJ2+nEp16kwxKb6drEjqMfsBgTEh/SnITW+iYdmjjAuagd9q4xWFUPje91F0jU
w6cetMJe6ofRVOEPmT8kP/IY52VZ4KQ4Jos2i112MuKRRQ9u1wkw6sueeiiAzfRJsEGHrdheQCK+
El+9T+CGDzRtys6Lm/YQd3pm3Md9yxWCEQzF+Q23ZppvaMxMwT/JU25aQYz0nvE2v7+Xc0GTCY5o
DYEVcm6YuuYPvC0Y4TwN29XJuuLUXgInTH3NyG1TFQq8VBxTqauRdcMbnRDQfSCg94hOciiJ1Uqe
2i3g74Txe/2m9Vbizn6bq8rj9ITwcAer4Eo+1YQED/cg3XbNMrWJFLsAc1Y+ZHfPXnZYVc/QWGLt
wNyBE5ePGj0yNKB82uUhbCg7+/s5drBu2kXZrg9t19Ry7IO0vL9c+vfAkimOyu/UkIoMQh76tBJ/
2Y6Q10b13f/TT+da8el7DuriU3yzhdlO6ZcYSQY6yU8//XQdt6/y+j//2GrltixWgcMkh12kWXiN
zBevIW5AtZJBaqWXyGR6glyGsisBA4UM/M29x8l41F+I9DUI72QVyVbUnwB4CFAGGAHIA1wKmNgG
YxH2R5tXALvQxxTejxl+SuYqr5OL8C4C2AiYCrhLmkDuFj8lm+QKMo3n4103o48Y4vcg/355F7kd
8c0or+V1zZC3n0CGobwryu6UJiSTyi1EQR5BvBX5frz/Dj5mhHl4/zXiNcmTiHdB30NRvhrheITj
2sYbNOOf8jbmXPkc1/I48LMMZbcDxgDWAy4Ffnj7EvSXhfQtiFswLg2hFWAXCclGnUp2EWlE2A3v
H4hx8nlzmMrngTA1J4wfbYb+GxiP/P4dAWPi8/oS8DrgCN7fPjY+vo5wizk2Pr7UGAcJZeb68Tnb
AH3Z62QA8JJA+Xrps+QPHEB5RzGvwwAJf5+sh0qSuzC3Kmkv2Yx0KaDShGsIFbeQecJprMFecp28
kTyIfMJ6AL4nuewbEpZzSS/gbxL6nwiYgT6fN+lhOsd78hvUzxI/g15wDakHzMW7X2nHE19npIdg
XSeh7jm+I4DXlYA5wMFmwAK074H3F6OtHev+A52QeBR1j+E9wzngnXx9slA+iK8lYCHaN6Avar4n
tQ6gGawHAOVzgdPfAp4BPMvH0A6of2c7mH3twh2MXcl/4D0eQBjwOuB2QB6gHlABEPB+HfV19D8M
4yhB2o8xZHPakF4yaXUsH3tqDuZeWG/i6HFyFdpfCggBCuTHyWVtUIC6BOOahr7Goe+b2/vG+Kai
bHx7yMvFK026fxl5BGVDO4R34fu50XwMfO4o698eot396HcpD/F36vj+vFd4x5z/ZsTN/chDjhuE
Y9DnRtD56rZwVPt4UNYVY+dr0BXtM1F+J+K3tIeIm7g4H75B7kWfE+TbQadfk5HiB2Qk/jLaSGkp
wjtIiXQQeZiPiL8wJxSRGhVf3GMta4DPezqFm5G3WXmHzsW7bhMfw15/h9xv4vUdli2+QyXpseSX
EqGvSI+xZWb8n0KU8zrngbak6vKQQ8cy3sf/Jr9j2/9pnL0rPUZm4r1fSe8kk5jPHXxPKF/TEkCk
PUT+HsAKQBe1iG5Wr6TNynjilAk5DZgnGqSPZJBeYgupEn34i3CE5CJ/vHyxyXc3oP+X6NfkFqzX
KsVHYsKXJMjfxd6FfADw/hGOAF7b6ekCmmunoc5hO712DtHPRqz/HQglhCHsu0OAw4AP2uAvCD8B
PQ4BXAw6jSH9EOrfg/haAOdvoNfkSeSl6PMVsgV5t7bTZ3vI3wU67dKJPhXkX0CXndNctqAPzZQt
4DUYB6dhc/6cP3Ieh/IqvHMi6P2V9vqdww7t7wbveA9jt4mvk8lt+7oQYQmgGH08BeB85DB01dPY
o1/IbyUPK1XJw8KrycPyPcntypXJl+W9yS2YdyEfC2Aj9rPJyzAOP09jnDcjvAfzJe1yVMojMzk+
kH+vuUZ4P+p35WMz6y3F/ptLpqHfPyAvyfehsAX7DvhEfzeKO8kvxE/IBozdITyZyhfHkpEou1Nc
RG7l+eDpvNwibDDLx4j/IIvEQsR3IryP4E+ekEXyc7xN8nUz79NUGc+TJpNNoLticS15WNpNJmFM
w/g8WHnyVfQZw54PqyvI/QoBDX9C7hV/wpxbMEeOgxZyH5+32bYp+ROfn9KXBCQB8+N1ALwNbEaR
NnxsNHHBy7gM4PwTuOB9ym+b+gaRjqL+VnK9qpN71Xzwp+9IWAEvMd+1m0xUDRPvIsY2VPwb9sfX
oLHxZI3kTf6IvP7S48mk8BP20NfYXxzwp7wkHwlJX5P7sJfW4H1j2sL1qD9e+Jr4ENoxPy6nrWiz
VnyELJAfIzfLLaC7dyAL3gFP/hpzuZL0Rvx28bHkWdQdjL4IfzfyRyNdwteEGckjwPNDSgsJKgbe
jzp8DCh38/cKn2G8d5I14CX91a/Jb2SuZRN+ORR/3ZIQSHMOZno54vCV4W9lmmDmcZUTdXHOuJNc
z/Nx5/dljILhb1tSvhfERyEj7iP9hR2wh8yE/vAVuZEVk9XCSNDdScgMgVzP02JXUiCcJMOFM9B3
oJ9JOull1vNDjn9BRom1aN9Cpot7yHQhiXgQcDfoEe2kZjJZugJ61uXopw0Y/sKmqJFR8nqymhUn
H+f1zHecSfoFgLiUlJrteNs2MMfKx9s+5oc6jBnfQwo3gMb4ePm3kR3Gy8cqtI+zbYz/anzmPDku
ME8+D/FPpD/w9CEgNxXiL1/dQh4DbGMfQA9vIcvoxiRctqS6EwzpmBaX0TWAUQBRXEYeQNgN4VeA
dwBbAE8B/iqWk5vQN/7OMWni5wIO7HfgXQhR/gjgacCf28s6hvx9HdP/Ki5+njzUMV8qxd8vBbCu
4OmAjmU8Lj5A4uIS6EQlyUMchEXw3wBk+FEVlRSyT5A/Ae06paUCskmch7pjiNC5z/9NGnMCrZ/H
rdFxju3rgRCO/v8IfA15PR5GeIj91Y3L5//NeP5v1MX6LgfM4n1J20h3k4a+gE6uJJ+nT5HL6bHk
T+DnModUmoRNfD5AXO3rhPw1FH/ks/P6sd+RnhznnfORruTQ3r7zuv6nNPqd0xHa6aA9VEqJwUH8
M+gB0DkNeWBwkDmNATqn2+nr34bjSBx4qhbHgU45zXVKy05SzIHNR/lmlH9O8jmcT48jhWhj0itv
D9zGOADXhziwT0iUgzAGZQDU7cehHV+Y+ySOV6GFtzXbm+vTTued1wdtifgC+NFxko14uHPYTkcg
P5NvtKd52DkPaZOX/Ks67XURGoCSf9W+Y7v/P8Sxd14FvAR48f/L+XB6pwS0CnAS6HRvQd/AX7aV
f4Nz1mvkFkJa1xBy9llCzk0hJAEZfO4J5I1HPA/h3wC4oXduDkJIo7PHEJ+PsrcBrwO2iWlkSZte
GUJ6cKpt6/a2/nJT7Xm7n6DtnO2Zan92NeL3If5fAFDZ2ecR3oXwO9RvRD8wVrVCBzh3I8I40qMA
oLFzbyLdDwC5f64P4EsAxnkOasw5ONHOPgBYxPURrqeBN3Y8h/7fTXc6y3K9Du87f7b9T2mMETYA
3G7iOifGy/VD6CNj/tdh+3r+hxD4uODs0b7+/ylsP0v8U9iGX+h8r3JoH3fn9/y7NNbzxzY4jfBb
cW2yFTqlYurR0GVNnZvrj1z35ros17e5HsvtQSmbohkCz3xdrVx35vorQn4mu0N6A/i8hlyCcU3g
eOWyxOSDHXgr6wpbUVfY8FIAuUQGos4fMZ5T4EMOyNfvoFtu4IA0/7k8BcnXILsc4LnP0KeS3yF8
HekMegwuujaZxuVeRzjPYzvpKv9Cxl2gy/yflv8nmfh/Wg7+UtMGF8jWDvkzEefQubwYeRyyObTL
4P+3YWdZ/Z/SnWV35/R5Gf5vZHRHOd1Zbv9v0+1yvj3U+pFSDooBHQTQWS+FLL5AD/hP6c7t/0/T
XOfg0K53dEjvRt7uDmlTL+mcxngv0Eva053Ddr3lfH4nPR50k9JnwtBN2qHTvsO7L9iH/ymNfTpA
nJd8v32/to+hvV3n/Pa0vJwMAgxuD+lOUgA+Ugi4GXwEcjAZQxwyMHkdwlr1HClVnyClSO8D7Ece
eE4Sco/LvuTNdC906R84y0nchLQC+w2vO6kNajvT9z/Rbye6FXDGM/VD4Myc0wbojLBpA/oC3IDd
gKvO0wbOynj3ywIkLz/rCseT30Fv/a6zDvif0uIy2M9x3kM9hzgO8ClJk3fDRgsbCuKrEeoIdfD3
OYA2G1+yVW4y61yGsnHcPgs+PxNn4nn4X0QeB0+fJgVx1FjQ7keBT6bNTgdZmga+71C+hb3kpeQT
aM/tcxOUIPSef8D+2J9kIm89l8+A6ah7BbeNsb/w/9fFtCEH28Ju3D6Ffu+UsYqoZ0e7djtyH8Rr
xZ7w8/QkFSjjfqpLYX/JFB8y+1jP7e7CWdIoPkEmoL9mfRe5S4MfSsV8tAmwK+ELMXEBuVPvQzar
3IacDvsK5BXeZ+opwH2iPd7B9sdt8Tl8/gjHtc8Z6Qt0B5T1wbiyuT2m43vb26kDgZsxKd8Q6nI7
+4W6USddBv30AnQDnAZ83vl9aA97Z/L1VEhWIOS6xqy28Bbgud0nkbLTP0C6w07HdbOUTRYyW7JC
RgPQzsQxylJjahtL+zuBl9b2eOewXUcBHrmNahzgRgD3ocUB3rY8bu+6BHRwCdarhtvMpNWwm60j
Y2ArfeF8HejIqOcQ/8uk2XXIv4MDpy/AlUI/+Hp2Yo++T7xcfxPfNn14N8FGywG+vOR21L8d9jNu
CxsDu9oY0+6YJGOAq89/Buwt+DRSgK/wHyPrTDD9fskX+JgA94mjTfrkPhru50gTz8C2s9OkGTfw
wH2CDvF2AHw+0nyc17D+JlzDfW/wS7SFJs5gO8R8a0Q+R26bewx0C/wID0C/gt+xva5aRcYpa0Gv
T5Jx8o14bzXJkjcDTpOgXA4dex3mPRhtbyRr2N9IKQd6K2zoIuIYCAeBwBYHzRy8h3DfL/cJA1/c
r7YQcBfmw31b/+D1zLopXy7353bhwHbRKMq5n7A9zv1giJt5ryLkYPaBcHsHQL3kXwBn2UluOUT/
DOP6a2pMghM02wnQdlobwOdGMjD8OeJE4OpCGIj0BYB+eLq4MyCf5+V2hrb8MPIvAOTz9IDOgHye
13kc/67evxvHv8vPQ98XAN7H0/+u///pOC7ok7+jrd8Y4hcA8nn6341vOMouANTn6f/pOC7AMdqF
0Z7n5XQG5PO8fzeOkSi7AFCfpy8YB/jTkwD8j3mtkOuJlyGvlyDcjfAihPMAv0Uc597kzLY06pj1
ZiOvDbjcT2a1wSCE/GwOeYz/iYsktwBG/wz8XUkfb4E6be9JXon435F/MQDv4m0ThwF4twlt70z8
P+2dfXgV1Z3Hz8zc3LmJJLnhJUQCzIWYBBID4RoaFUruDcGq6a5Rgk2k1WjF6r7UPCWI6wtSK10B
gat23VqfSoBC3aLlZu5KE15KFG21fYTU1RXdqtkHa+2Wrj7g06fbLbn7+Z07N4QUsPvyx/4xN/nO
78w553vOmXN+58x5m5kdnEta2Zoz9EOQPZe0E/8QtVbi03GTjqE9nJeBb8Hp43yeF+93sSPtQxOR
XRn/QzjJNaaFh3sWaap5+hr4hJ9efAqS9qEk51uQ9JmGeoHk5VZAvCcZJ6bPBzWci/uD1FGvXVAv
MU78Eu1hntyrQ8wOiMyhrdVt7m1qfPZewX1lpW4P2Qsi7R1vRlCB+WpKkHlewsiTfoO04Xo8eVSt
0+PJN/S6+s3SX8i5gPvIa5z/K21qN3pYQLv5AGsDxKHXZWhruUduJb5rrdfU1QLd15A1Idljwf0g
79Os919Kmj5m7nOzKrUPseZyPe1pZix7nn0r51+i3yFrZKxhhZ5UD9lHcLfUZdyvFmbtJQ59b1mT
TudcyN4QT4Z+q9rtn3LtD7C/ZZIqk/jsuWoJeVafjZt80H0t2thC7KXcRXc2ZPCHauZTPpsjaSa9
yCJkqVwH8a3XefIyY3LWu+T+Sb4VMUbPD06kXv1BzbBz6V/sVg/mmupx+wY9dp8X2KzqhuM8qmpk
/Sn4KutlX1MTdF7L2tNb5OtfU4ae5P7wUHY+gLW0bwVeIizW1PS6ljcfQJh6XmA4DNnHw5oXujEJ
t9P6Ndl+lL4Omavx5giG4/CuR65L7p0jrl/nQ1aHsvnOuuHnZG1M1vEo24LRMpsmWceTtTTCu578
aw0tUNfbd3FvfYa1jhfYs7OQOeEr1cLQJBWxt/PdHPpn9i3opvTzZK4uompynlDU8fRCyull5Eog
deUzAK3Rde4N3J7O1EepX2IvP7E7SX2VX/ovwD3gtoy7uPF9Te335IdIwtdu+JHfSWmrqGu8KJE5
Gg8nkf+BPXV36HdiHpHP0p/T+zNGSa9fr74h14//c8tR/c/h8hplT1h/TzmX6HzKhJvpT2b7laek
rCvP07qi+3DpV6mjQPpy6UPYS91cO1rCkf0p0peVdf9fe/JtT/5U1nalrzdaEs5p+1dGn4/Qo9P6
7Vn74XqWrW9ch/QPCedMUvar6f71J0nSPbxPhnzT+2VGSsI/bY7wrOeyXs+6u163R/7x/gNdH8aQ
HqkXSL2nb+T4KTuOyspH6Ke9w/VLP7YAXEG+b6DN+fNzgfTpvW7BE+njwRO0+cOSNvIE65rs6TkT
glPxP5U9Ld9PH7fR8KwkfzaeC8FN8DZxf3HSx0PcvU5JNZ5zGQckMkjvRl9eAO+AYyAF+i0jfZxX
O6rAw+nj9NVHSO4dD+vxych9dcPm4LeJ99vEt4R4acXtl0k3rYDe0yB7Hc4C+uzK5jYcuklf4wm5
F54Th4iH3kLo68TzdTi/Jx7aNuQJQbYssnmazSuu7Ze6vGSPgcBLTzauLO9s8pPKkTBlDHVWnL1c
0icoo/+z6z5T+rNpZ67hZ+BtOadO/RzIuAQpe/fIu9PTL3r2UPB9dBbYn8sA7mP4Pe7hBPn6C/Av
4JCH55GyZ+kD8I6FDgiIxwPxjNYF2RMj8OylLgqC76eP2Fem35Z6IHt/BIRTlS2zkdJelv4ZOvi2
/RjyEBzZt5Ppe8n6s8zdyB7bG6UtRE7LfYX7l+yT/bGKcJ01oSS6zbpe4Dl1S+a+carfh95IGyz7
YGVP0VjmfVqtIfW54E7GtmOUk/PP6fcFxPeAB9nzK5A9kIwD0y+Cg0DGgGL/DyNhzVJTBdhdStzE
kqYm6f52GeavZCCfohL7U+kiLbqvE6AnzFhXcW03Uv6FpHNJ4HHS9jhjcEM9JP0fruHRQCH7ctiX
RJ+yQO+58cb9+K+jX3iNh2nkS2vgEfqNR9VijV+h17KvBug9OVJOR9XVwQvYWzOo99dk9vwyrrfe
BcfhHqPPKftvvL01AcKQfqL0i6yj5CNti7WV8e5W5DbkkgwCfO/Luocx+lfoo76DOQmmMj6fjlwJ
7sRcgbwLLAVPA7G/mz0s4wkrB7OAsXRgd0aKWcbVAvNwBlaEOLA3f4K/B1SdeRz3y0EeuMKD+NnH
nlVxa9T+ouaviOOz7LcohSvmhbi9BUKZ8bueV8C/dsv6gZv1k/MbdVneN+lTjQNr03ty4sxx/or5
iVaejVDpfEBJDtHCyaMIuh9FbU1fBZ7k/CPTW6MYXoPo99bJPZnzEvtMHlHRYLG6P+d81cxYIB4s
5L7cxl6pTXr/Na2zjImG0POhW2U/MXr/gPV6Zn1e5sazc+bBATUrl/457ryTjbbck+ZO6jJmg5Ck
TqBbypDeG/by0/unqWvS5xA9szvUBnsLfcktain1Te/7hidzXUXgQsyXEPb0nJmqkZC4+6SRQ88g
pT4spm0YnnuFf5vsaRPdwk36guL/afYc3Yuslz0J1qcVLYbmXo68AqwCkodXEu6TI9ardjPPvJvz
0/ZsjHDXe3X+t+eftH5FmZ62PpUt29Hz5+jIOfdmjHb/xDWeUXuJhufVz7LXSM/Nj9i7Mfqc+M+4
ZpJdnxjtznrF6Ws03p6ns17/0fRz6EurtKP2FDGnXwcvMk/5nABdTuP2Fro0DX9fMz+izv6c/sR/
KifThtMeHkXvngK/0/r3t5nw6J+X6z2G8pxDp9wjsJdnCdbTp70F/ay19jDvSj8SjBFdRcqzE60a
jNNoYzPztAvU1bqtpU0lLTJXu0HGaboNkraFpwelnZF2yPiIb418RBtCO6PnJbs4p03SwGzeQW3Y
yHkL7rRJ0k6BqHUDnBuw+z1mwtJtprRtUg9pr6wYuJ7zf/NAO2W+hxlYP9RpiJofyFrN0CMZyD1n
aLPcm3TbSVg6jf9OPJhl7KLr7bV63/qN+JM5gnP2e7lfSv8y28eUfuZp55TB8P3+TGb8vzwSo/0M
r+m8y1542bf/Y/b50pfX90SZw/D2Rgcv0usOut2hLJkf8Pr5mfl2mXOu0+W1VhXRpsj8gTce8CTr
OVK22TE9+fQj8NoISWkMAX2flnz8pW4rDfUFCZvyLyJ80bug7tfIeE/GDt/LrEVgL/u99dgOc2as
sZz9ma2Mo+5hLoF9/oS9GOwj7CEP30F+R9Kdw/5u+N8Uid0g/mqRkr7XQT8YAEdOx8kfeeO4pdlx
EfFwRx56IlhKfr2pgqGl7PN+h4c2RScmqyUyLy5A9x8XYN87AvJsh7TjzMno319xPANM2vM/wgto
Gdc4jB+S82MAbbUgB7ccrsGmNoQO8Z3TD5Q67zqlxmxUKh/3As7Ds86NoqeUGhdWajz+BRMoognk
oaD4zlMo4b4jmPSYUpO/odQU8nQq1yFwSMP0WkD5Z1FOOH8KKouVmjFWqZlcS9UCpS4kDTVgdgVd
TsFLpzCnjmWGD5S66FWl6p4/hbk7lLr4mFKXkjeXfqzU/MuVWnCzUjHyNN7rw88DXwd8HfB1wNcB
Xwd8HfB1wNcBXwd8HfB1wNcBXwd8HfB1wNcBXwd8HfB1wNcBXwd8HfB1wNcBXwd8HfB1wNcBXwd8
HfB1wNcBXwd8HfB1wNcBXwd8HfB1wNcBXwd8HfB1wNcBXwd8HfB1wNcBXwf+H+kAT73mt6vjar7a
xIvVTZ4eni1vz7Hnm8+rHGX2tK6O5/Nw9C6AI8cI6AaWillPp+z8aKwXOXa8lm5xdbSPtz887V56
kbav+UZ09T5eunaDugjrne4Ssd6ZijWJ952pi+Zl5Ow5WrqhjLM9PurEJ0GbDUy+ipExXYXcBDaD
AyBIgnaqd0EaWNZT1lb3MoeAtxNQYXy8tV0ZpHK7OgzSwCL127mW7epDzyZAqralcsdI9Ns0q5TH
yA2i3Ebg29RqsAscBjk8wreNyLcR1jbC2sxD57uAaW21trhhJxzP45H4+4BpfYtX5srnVPutb6bC
Om8eTxWOi8biYevvVAsweWfin6l+YBLsw9AeVibem92aOToLm1N5BdEw/teT6PUkZD1RdnM09HkM
k/hfnxpXLIn/mltYpHl3u7V1GUMqXBJtIRfuVIa1zPqyKlOOtQo5FflF5BTkTdbNfAZb0hlLFYaj
q4mvAe8NfKNoJs5xnoeOIpusSapUe1vhFmTiWeHOqIpyxQutEu2l0MpXdXgNWbYbdSJ7eXpUMv/B
VO55kr4H3fCE6H5rjWWr8fhaja+JTuF+nmOdDeRKWlO5+dFEfIzVymW2ki0OaTTIZTnGrC+7BBQv
shbxGGExbn/JY5gTkJfxWL/I71pbeDW7Y307VTHZ6d9rPapZj0igRL8go1oLUvkF0f54Lq80NCiA
jRTARh15IlVxcVTFK6wZPKM7g8gj1n2Y7sMUttZhWkepraOk1lFS60jUOrRPWWtxWYuf2bxHoJP3
ByTAZsyiVhNcMlQqwwT3ghnRPut8q4SMCe8lKw1sJ6VyCyRlJe7YcdpbSWpMQbRhv7WcJ4CXE2bM
6kpNLInevteq0pdyYaqkVAidLuq635qYKRpCKpYi2W9NJiMkY6ZYU90JTjLucC6K7CjD/Ik5IJlk
/pP5uhS3eZhzkT/15CuePJSR6X5zIFMpzFdFDsYnm78gsBvMt9VmTKa51zzIhx4c8y2zV0rffNPs
Uw3II5zzCTKzD3kRco877SWn1+xNIUj7E25+sVysedCtnu0ZnHLPMLHUM4wtjsbLzefN59RkgngD
eQHyObNfTUceQJYg+80uvovimM+ac9U85D968gVzn6i4+QNzt7oYmXILJAlJ1xaxyw2K+L6rMmct
s5195vfNnWoSXp9xKybh+FSq4gKncC/hGeZ2Puo+xRkbzzO3GG3Gx3jqVkdEqrHmVrdeAkm4+yJO
n5kwE7GS+lh5rCa2w6otr62p3WFFyiM1kfrIjkg8bG6kAdlsUn/N9RzrVcREe0AMJMy1bqA+GT/J
Ncl1mWo1x25t6uDYqU2KY1ibxPUjbWow1/DU/xoYCXMVuA+sBl/lNQsJ8y5wN7gH3KttujCtACtp
TTphdMLohNGpGZ0wOmF0wujUDIm5E0anZnTA6IDRAaNDMzpgdMDogNGhGZLeDhgdmtECowVGC4wW
zWiB0QKjBUaLZrTAaIHRohkxGDEYMRgxzYjBiMGIwYhpRgxGDEZMM2ph1MKohVGrGbUwamHUwqjV
jFoYtTBqNSMCIwIjAiOiGREYERgRGBHNiMCIwIhoRhhGGEYYRlgzwjDCMMIwwpoRhhGGEdaMQRiD
MAZhDGrGIIxBGIMwBjVjEMYgjEFzZY81EH8RygCUASgDmjIAZQDKAJQBTRmAMgBlwLt0yQhRmH64
/XD74fZrbj/cfrj9cPs1tx+f/XD7NTcJIwkjCSOpGUkYSRhJGEnNSMJIwkhqRjeMbhjdMLo1oxtG
N4xuGN2a0Q2jG0a3ZiRgJGAkYCQ0IwEjASMBI6EZCRgJGAnN+G8XjflVoy3EvdZcbczU8j51TMtV
6oiW96oeLe9RO7S8W92v5V2qXsuVqkJLilrLLuWEDNepL4wX0wRcBW4At4PNYBc4AGxtOozpXZA2
58amBwrtq+zN9i77gJ2zyx60zcLgVcHNwV3BA8GcXcHBoBmJl5r5uh2laVGb4Bl8Wmau+hBwE+HY
oE0NZh3x1tHOzuWvzqyLFf0m8mGVcbjKOFBl7KoyNlUZ8VzzM0ZAt3QRvutEBhhtsTEVC5wjoL6i
cgEt08bdxyY6bsWnnF5jX0bMjFVzegz0gB3gflAPoqAGlAMH1FdUQWuLTfeC3IesBNNABNSrYp5G
V2OLQrE+M9/YkXoxX+VKPJUz4O11K2sRvW7lVYgfuJU3OXy/ebeqlF6R8SyVaidyl+u8h/MzGfG0
6+zl7CnXqUN8wa2chVjqVr7ixPONJbzDTaitnlxMgcv5Na5zLd6udp2ZiGq3skJ8VxFROa4zjTb1
HhKzZl+QianMdebhe7rrXCK+Q6pSCp5Pjtfo5OVglnMrRYI+7DPaAkbsPOc3zqPOMdL7azIW9Xgz
0htAHC7vNa6N5Tn7ap7Ec9xx43nin/tDjyeTIp91dpSvdZ4gLKN8t/O4M8vZWNMbwnoD6V6ro3Cd
+yO95s7YOGe1U+t01bznLHeudG50rnG+UI6963ze2SfJVO1Gm7lzt9NCgFdwFeWu85ly0kISL3P+
xok5lc4lkX2Sv+piiRpNrtknOcAbQHTsF5K/VeXE7jpL6nuNoliV/ZGdsJfajfY8u8yebk+1p9jj
Q2ND4VBBaEwoLxQKBUOBkBlSofHyBWNezmDwRk/eg8D3rgJyDGgzHyzGzIGjMg1eTXqlSo6zms3m
xY1Gc7L/i6r5pkjyt4vLeo28q69L5pQ1Gsmxzaq5tTF5cXVzr52+Jllf3Zy0W5a29RjGxnZsk+aD
vYZqbes1eJ2QsXFNaXLsQhzVmg2lfbzh5/w1G9rbVUnxHQ0lDWMXFF1yWdMZDh3asqNJPtDt/Uqy
hurqkuopyceaF7clvzelPRkVQ3pKe3Pyq4sjn2/rMwvN/EVNfWaBiPa2vkCnWbjoGrEPdDa14+09
7Q1tLsAbXy9C4C3UqCLijfakUbxRRhl/FdDxN00E/vLyVYX2V5GXr/0FDPHXcySyqKknwgE/vE3/
iPZzpFyN8IPGwG3qqeCAr7KI0Sa+jLayiE7YTB2Q4+ClhgNeDPp7OiDH0JElZ5/yUu55mTvsZa6O
y8qkRwcjB4IZPyPrZ/wM/JzKyP+ZaVljtZGas2LVwUXLyhZ1lC1aBjqS6++4tSS5+qZIpGfVCnGI
JK2Kjpu+eKvIG5clV5Qta0quKmuK9MzRvFHOB8V5TllTjzq4qLWt52BsWZM7JzZnUdmNTe2phvlt
8dPiWjscV9v8M8Q1XwJrk7gaNG9UXHFxbpC44hJXXOJqiDXouBbdJnrf0tYTUo3y6WstU+Z5eehw
R+m09sbicOcCUei+edNKVpXuCSi+pHBedXtyTFljMh+IU028Ji5O1DNxKsC60HMqWTVvWuke4ynP
KYx1UVmjfLRc/5Twm5Nzr25OTlt8XZuoSjJGFpypzJbLTzuXqEW3NfHPeZdG1/KubIgilfj841/X
mX4rVqxY3sVhRTXvs2lOVvFl8E/xZfAe2yaqjqZ27GZl7SxL2/Xk5i7ia+Y4VpMIo0uiExPfFycH
Y7z1SNlmd7DbNmUU0ZWaNCV6+376DfcBBpHmSpepBHFamZpezmgJL7PnZiTDVTl3J02LyvfS66GK
LM/IWFENhkR5oiZR313eXdNdH8R19w4snR1yK3Vn77BUV/XybGZg7Gons+Wb5sS3xZ08RUfcLQY+
H1+9XH/GfLg4srxq71Pp1fCzdlyj/i3XwYu1zmGOYiTTxZXyyMS+Qs7klzFoLvmsSdjiK3OmreRw
6seZUv8FTGCPPQplbmRzdHJlYW0KZW5kb2JqCjQxIDAgb2JqCjI0NzA2CmVuZG9iago4IDAgb2Jq
Cjw8IC9UeXBlIC9Gb250IC9TdWJ0eXBlIC9UeXBlMCAvRW5jb2RpbmcgL0lkZW50aXR5LUggL0Rl
c2NlbmRhbnRGb250cyBbNDIgMCBSXQovQmFzZUZvbnQgL1JSS0xUUCtmb250MDAwMDAwMDAxZjRl
ZDExNyAvVG9Vbmljb2RlIDQzIDAgUiA+PgplbmRvYmoKNDMgMCBvYmoKPDwgL0xlbmd0aCA0NCAw
IFIgL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCngBXZLNasMwEITvfgod00NwJMtJC8ZQ
Ugo+9IemfQBbWgdDLQvZOfjtuxq1CVTgAX3aGS9a5cfmqXHDIvL3MJkTLaIfnA00T5dgSHR0Hlwm
lbCDWX53YGZsfZaz+bTOC42N6ydRVZkQ+Qdb5iWsYvNop47uInsLlsLgzmLzdTyBnC7ef9NIbhG7
rK6FpZ7jXlr/2o4kcli3jeXzYVm37LpVfK6eBHfEDplaMpOl2beGQuvOlFU7XnX1zKvOyNl/x7JM
rq6/lRd1NEHVrkbCHgiqioQ6IBNV3SfUx42UQAZIIkWiqkhZSuMcWVqiiv0x5SGqLhNCvILqFK8I
VVDdoYoj2VLgJ9omVAIdopYqoRYIWh6ANJrQ6GufmtDoni1s3KfuS2SVqDpwFl/f3z3Fm4xTv07J
XELgAeFpYHZxJoOj6+vxk48B+H4AeaKqTQplbmRzdHJlYW0KZW5kb2JqCjQ0IDAgb2JqCjMzMwpl
bmRvYmoKNDIgMCBvYmoKPDwgL1R5cGUgL0ZvbnQgL1N1YnR5cGUgL0NJREZvbnRUeXBlMiAvQmFz
ZUZvbnQgL1JSS0xUUCtmb250MDAwMDAwMDAxZjRlZDExNwovQ0lEU3lzdGVtSW5mbyA8PCAvUmVn
aXN0cnkgKEFkb2JlKSAvT3JkZXJpbmcgKElkZW50aXR5KSAvU3VwcGxlbWVudCAwID4+Ci9XIDQ1
IDAgUiAvRFcgMTAwMCAvRm9udERlc2NyaXB0b3IgNDYgMCBSID4+CmVuZG9iago0NSAwIG9iagpb
IDMgMyAyNzggNiA2IDU1NiAxMSAxMiAzMzMgMTUgWyAyNzggMzMzIDI3OCBdIDE5IDI4IDU1NiAz
NiAzOCA3MjIgNDAgWyA2NjcKNjExIF0gNDMgNDMgNzIyIDQ2IDQ2IDcyMiA0OCBbIDgzMyA3MjIg
Nzc4IDY2NyBdIDUzIFsgNzIyIDY2NyA2MTEgXSA1OCA1OAo5NDQgNjggWyA1NTYgNjExIDU1NiA2
MTEgNTU2IDMzMyA2MTEgNjExIDI3OCBdIDc5IFsgMjc4IDg4OSA2MTEgNjExIF0gODUgWwozODkg
NTU2IDMzMyA2MTEgNTU2IDc3OCA1NTYgNTU2IF0gXQplbmRvYmoKNDYgMCBvYmoKPDwgL1R5cGUg
L0ZvbnREZXNjcmlwdG9yIC9Gb250TmFtZSAvUlJLTFRQK2ZvbnQwMDAwMDAwMDFmNGVkMTE3IC9G
bGFncyA0IC9Gb250QkJveApbLTYyOCAtMzc2IDIwMDAgMTAxOF0gL0l0YWxpY0FuZ2xlIDAgL0Fz
Y2VudCA5MDUgL0Rlc2NlbnQgLTIxMiAvQ2FwSGVpZ2h0CjgwNSAvU3RlbVYgMCAvTGVhZGluZyAz
MyAvWEhlaWdodCA2MDQgL01heFdpZHRoIDIwMDAgL0ZvbnRGaWxlMiA0NyAwIFIgPj4KZW5kb2Jq
CjQ3IDAgb2JqCjw8IC9MZW5ndGggNDggMCBSIC9MZW5ndGgxIDUyMzg4IC9GaWx0ZXIgL0ZsYXRl
RGVjb2RlID4+CnN0cmVhbQp4Ady9eWCVxdU/PjPP/tx9X7Ldm5uVAAnJDRCI5GGLLELYIWgkILtV
CMpmK6BFVhfcABUFrQKi1kBYAmiNS13rK9YNrVaqKG5U2qKikHt/n3lugiFt377v7/v9/fNLOM/s
88ycOXPOmXPmCYQSQjSyggjEecWiayNn+/3mA+RsIUSZPHP+rKvULw4VIH6GEOm9Wb9YOvP65xOt
hNiOENK/efaMqdOPXf7u1YTUrEGbnrOR4V7mz0a6Bemc2Vddu2TAwWcCSB8npHz6L+ZdMVWYoj9H
yE1DkJ591dQl830DxEWEHGpE/cj8BTPm/23YZ36k0b/rj9Ihkm7CDpIu5pF0QpLoJwWJOcnjvIyH
7CtCaEYK0A//2UMeJ+/RAhohTfQnEiBnaIj2IEOJSH7ATJ8kreRu4iXjyEbqJjnET8aToVREnSJy
M70vuSj5JbmI3EEeSh6gNyZ3ofw28iI5gxH8WaSkFxmJ+uPJDPKl8BmpTd5LVLKaWEhfMob6yVTy
Ln6/wxjuJHeR39FfJc/grV5yI/qrJP1J/+SzyXOkC7lZ3CAd1faR28lhKievSM4hmSSbrGNFyXeT
H5M8Ukt+Qx7HmIpoiziERMmV5CaymYaEFxG7mzxMEtTK6oSB0jN401AygVxNFpN1ZBd5lbrpKOmo
dCr5y+QJIhMPKcCY5pAvaTkdwR4Rrcl+yQ/IpeQgeRnz5b8t4qXiDunSRFXy/uRzxEcOUJ0+RZ+V
SqVbW29IPpj8LbFiPD2AkZF4zzTya/IseYX8jfydLU8uJ0PIWLz59zSDRmgeMP4uC7FlbJnwFumO
2dZhtAvJVtKIFTlEDpOngZs/kWPkM+qlaXQYnUZvp39nVjadvSHcJ+wV3hap+CjwHSO5wNG15BGy
n/yBvE7eoBL6L6Gj6Fw6j26i99NjrJF9w34QVfHX4lmxVcpLHEucTY5MfkeCJEwuIdeR5cDtb0gT
2Uv+i7xD/k7+Qb6nTtqbzqYP0kZ6jH7DNJbNath8tpE9wp4QRgq3C8+K5eIA8UrxdfEDaZW0Xpmq
JM5tT9yZeCLxZvJA8k3Qjh3955FqYPQGUMUj5BnyFnp/n3xEPuH0g/770sn0crzlGrqG3kWfoL+n
b9KvMEti/mazvmwQ3jqPLQCebmR3srvw9jfwe4R9wD5iX7PvBEnIFnoKDcKDQqPQLBwRPhedYp7Y
Xewh1oiTxSRWplS6WBor7ZQek56TTsmV8nR5vvyFcqOyUv1Da5fWPydIYnaiMdEE2lVBSdcBEw+Q
h0D3e7EGrwKj/4URHyOnsQphGqX5GHcFrabD6Qg6kV5GZ9Ab6Wp6B91M76MP0d9iBpgDU4CtItaf
jWVT2Qy2kq1mt7C9+D3EXmHvsqPsJEYeEGJCkdBDGCpMFi4VrsYcrhWWCSuB2duFXcIbwlvCCeEL
4SRWLSBmigvF68R7xB3iXvFN6RLpKvw+JD0jtUhvSuekczKTw3K6XCzPlXfKnyiy0lMZpaxV3lb+
oc6n6bQLRh4B7Z//YSHswUy2i3nF5fQksjOoSByYeRHWYSx2xT9IlZDAuth5OcbmYyHRw5vLhgj+
w66lh0k5/T1ZLjMBXFE8RvbQD9kx8Xl2EXmH1tOQuEO4WnqVRclj4EYb2FPsMB1A9rJKNoFtEQj9
jO4kn4Hel5C76JX0GvIYPUn70OtpL7qcvM38wli6klQmH2Ii1ehQeopgBOQGcTq5/PwU/mWEVpAP
yZeJB0Sb+Cvwp2ayESv6OPmYPkp+olLyG3A3AdxoKrjMzaD3mwjnenXYZ8uxH0PgIL+Q3yB7qQwu
3kvuJ15HTpEfyZfSIVDUAHDTE4k54gPip8leyW7YYdhlZCf23WxyMXbMZ6CSp5Hmqcuw03XwklLs
6lFkMplOrgfXuz3ZmNyS/HVyaXIeeQ1tf6Jd6U90G3ZEM1pUkpfxext5n67HPrz4X07vP2YmppMW
8hUN0lxaiv1wUlokbZB2SXul30mvyz2A7ZXkPlD0J6BmHTO4grxJviI/UBVrEyJdSRzj7Y2xTyK/
YLXC02QgDZP52LMF4OMD2mZyDXq5Edjbgv38NPbGKfCJy8jvyFHKaAAzugLvV9HPcOB5CrmGbMcK
/po2IWc6uHYX8jXmbae92bV4n4GeNoJrtWBMH5LPge2kOa6u4AuD6AT09QOZSKbjDT3JKLobK7Cf
VICzDhL+AHznUCcZQLPpw2hXjx1qJxmkQvqUMtI1MTLZm80RnoaMSSJ/G6RXGrmINmAUDsyjlfho
DSlPjMEY3qKC2Ej/aI7iHjYjuVpYnPgFeY08ijUxxEXKIEKM/uOMqn4XVfbtU9G7V3m8rLRHSXH3
bl2LuhQW5Ofl5sSyo5GszIz0tHAoGPD7vB63y+mw26wWXVMVWRIFRknXwbHq+khjXn2jmBcbMqQb
T8emImNqh4z6xgiyqi+s0xjh7aai6IKaBmrO7FTTSNU0ztekzkglqezWNTI4Fml8fVAs0kwnj56E
+C2DYrWRxpNmfIQZ32DGbYhHo2gQGRycPSjSSOsjgxurF81eN7h+ULeudLdFHxgbOEPv1pXs1i2I
WhBrDMTm76aBftSMsMDgPrsZUW2YYmM4NmhwYyiGpuhGyB08dXrjqNGTBg9Ki0Zru3VtpAOviE1r
JLEBjY4iswoZaL6mUR7YqJivicxpxGzI+sjuri3rbm52kmn1RdbpselTL5vUKExFH4MbXUV476DG
wHXHgz8n0bl74KTVHUvThHWDg3MivPK6dasjjS2jJ3VomxblPdTWog+0ZbnV9euq8eqbsVLDx0bw
NnZT7aRGehNeGeEz4bNKzW9GbDDPqZ8badRiA2Kz182tx9KE1zWSMUuje8Jh42DyGAkPjqwbNykW
baxKi9VOHZS+20vWjVnaFDIioQtLunXd7XSlELvb7miLWG0dIzOA9FSZGTOr89jwMecxS/mIYkMb
DVDUFRGMZFIMc+rNHzN6k3VX9MYC4KeWolXjdKzInEZtYP06Zx+ejynSRinXGYus+46AAmInv7kw
Z2pbjpzr/I7wQk4n50mtkU5tjzcWFTV26cJJRBmINcUY+5np8m5dFzWznrH5zggCoI+MAm6n1vYp
BvqjUb7A65sNMg2JxhWjJ6XSETItbQ8xiotqG1k9L8ECpkp843nJivaS883rY6DkvYQr7b5GNe/8
P4fT7xk8u08j9f83xTNS5cPHxoaPnjwpMnhdfRvVDh93QSpVzhEKvKGsLdboGThJSGPI4zGWJpil
IMrLJp+vgsQka6OYi38yHzR2hwCiNDNopLrRWT8k9azVo9G2LfPPbZoVtUOj5uQp3soMfm7WNovG
PkVt40yNurHvBekLRmddJwwfB47Dho+bvG6dfkFZNXjZunXVsUj1uvp1U5uTK6bFIs7YuoNsB9ux
bv5gcKHUgjYnD61Pa6y+uRZTmU37gGwZGbA7RteM3m3QNWMnTzroxElmzbhJexhlA+sH1O7OQdmk
gxGwXDOXnc/ldSI8RYZTEPoepppFaQcNQlaYdUUzw0xf0UyJmZeqhDxKrmhmqTynWa+2trYb1BhO
GxJ+oRUoZMBeRhOy0syqDA+RxIRAdEVMUBJSZSnBhKdoHtGgDAdJsMj5fWVr5Ujn6coRrZWkCnHn
OTx6lERdUVcuHhQKxrmI0HLOkMhZEhFb8C7iTp4QL5XegiTKolON1aqouIfoQ+yT9El2OWgNUK/P
5qdet83PPJnWAPOEtDD1Zmhh5iFqGvUKahrzZFkDktNl80tOu80vOyzWgOxI18KSU1TTJKeuhWWH
oqbJDi0cHpqmetPSVJvfPzRg9QYCVofdbrHouqLIQ9GHKysrPV0UpWa2xZjCvD5fMEjoUOZxuzMz
MzIExlR/IBAOp+k2q1VTidfjcTod/WzWHYGv/TtsRjActxk5efEqG73NttXGbCOjsiQx2i9N2xH+
Wt1Rkmak1acJaSMjD/2K46vueOtx4KvSWYn4gqKi02YSKY4/PKt4SaW7otiswhOtbbHvzRJeiiwz
wHO11L3oeucLq7sHeeDo9NOjhNZ5YuVlgKinTCjj4IsBokLMExNiFFn3rtlbeYpm1Byr+WjEF6PW
Haj8R+JYzccj/lzzCd3c98996FUf0vyP6KrEdRw+Srz/YSomrE28T/NBUFcmRrPZWE0nqTbsBY4d
AlM1SjQncatP02yYCSiehN1l6No/rPdFxBKRic1sY5PrkStNfJxsPX3SeZJUVfEp8QHTWB4rd3p6
9ipjzOd1B/xsxrP3bLtiwsqWtbMuKo8lRp+gf/8SBxB27OnEm4mJf304sfO+mQQjGYiRGOZIhhrB
fJavz2Kz9E3YjDvtiqY6Cf65nXxMMF6kxrRX/Yd0n5WPxj13IB/NydbjFw7G008ojzOhzO/2eRUm
DB47qE/6zLXPbNoxYPjjidF7fnfm44V/pY/S4vcSmWfe/DZxOnGWj2Rh4iB9hPKzRdU+TbXIutJM
M400eQvtDcJbQPOUHAfJIhFSgv0Rss5aFCzCJqobcbwViBhx8nQrdVUQV0VFjxJP1OeVZSW/Z89e
sZtpqMvCyb3GD2FraOiV626ZH7k2fdp4/r7+dDWbw7Zh95Ya0RJqQAXthb3sFCJCiSAKgySn+S6B
hMRHfsHfdbxuhPPzOlJ8sg6vwF7tzwpweAslTvDe7sTjcYxeIDmGj/UmOsvrMFrx/Ghb+Vh7lJSh
/Z3cKMBbMzIBu9sutUDbjJA7jeFL9DX6DrpL2aXtsB/QXtbUCa5af214QtYs12z/7PCsLLWCVcg9
tZ62oWyoPFirtu3QXmOvyC9oL9jeZ3+S39betrmcwUiQBZuTLUau2x8PbldtWY5iB3MYSDm2Eynj
aA1sAOFs71FLKPrWcyY2R5wc6fy+YQQQerKogQOnLVJXR0sDfpdTkWPZxOXs1TOQLSuyy+n3l5X2
7NXT5czLY6XvLLltw+J33k38hGfZKH9GvKYsFUgtm/cmpiTq92/EYWw7fWD/xi/7j7sqgZ9noRv/
Amhnz/YHBh8C8vOAA41MMLQr2S/ZeiaA6mlh0xSJgtNcfkDVJEqsGuw4k4AzyuoMm0TELDEiNoqi
GNIP0R04EaXIonIE57JgD1WVp+tOgihIXTTqkpXynjm9yoS8xIl737yaspLjYmzD4GTOK6v4Gpbh
LGrFCDJolTFlX3B/+GDaq+JLwSPBI6EjYXVg2sD0gRkTQveJdwd3idvTVTkcIQVyr/AQcWBwYGhg
WM0J5oRywoI/T5wgrgluSduSviVjV/quDNVNMpwZkYweGYsyVmZsyHg3Q83g6+L3+uIZzGl1ZHBS
Y5yyDRAQipqwRqSZPdjEqNXRTCcYsSxrsZVZ+dpZt3sk7ajfj0MIJeEsx1HnYhbKbF/A0+YKVlaO
4OyhtajhOARMUV1DpctdQV1lRXVQGw6SjGTLHlcFH8MehxkYdmeFqDorJNWF0FVRZP7U7pbZwHGT
DIuWFkpjaR7KT/HoCP/qajllDB896WmSBhU1HZCRPNa7d+9a2lAHenFFe7p7gTbK43kxEEtuz5yy
UpxuQDairIjWc/nObd/8rqjPjNpJs9XEFyGqvvj+mYtHlCW+v9hPpcTZu6j2p91VE8dfPmPuL9O/
ePWr317RNK3/6VF5fJVGYK+kYZUKyftG6WrfKz72y/T16Wy78Ki0w7tfOCTt934Q/Cik+r30Fv8t
ARbVbUSkAY8/mmVzWvVmmmNYa2zUsN0GwWOj/mbKDEeWp9jDPBy9nu1pEgXK9zlBV6A/rFMpssXt
+bZGawvWwOp3Hl2edVvW1qwns57JkrKOKUdrcmhOuMh/NLCYHiWhLu1rcTK1GOBNdSddFcV1bQvC
V4UnG05SjkwwLROlHKtAKtBH6jy55t4ysaf08p9HYz9Whp0IrurHg8Syc0ZQp23B6ImLF4zpOTxr
wZJJQ4fMtCRa0656fukb1896a9mmxOd/fCnxE70pOvvqlfPn/sr3mTBn4rBJ0+u73rT10pW/WPPs
NWlP3fRs4tRn2E9ArjgIeNWJjXxsVFgjtgrNGrIWWcdar7R+YpVP2qgs+sVcscA2xHapbYftgO1F
m0aZSqyyTZF0i00hVqvN1kx/a4QF0SuAiTKraBNsTNSJYthabEeQOEwLYCpjdO9+IopoQJrppL3S
bTrFyjDD7VS2Ks8oghJ2VLHljLGQ/RC9hA4xd/XxBoj/EafrzI1dBYWgta6So9BdYeLQXcEFu5gS
6e2k2816kXWE9XXrR1aJpIgW6C2CllVOy1yQ6y7qomxZ6072q2/270+cSjxJ878XfnPu8h8S77NM
+l3CAoq7FBRXLm0HX3Aahao9Yu3lHuweGrrH9oB9k/sDu+Z2edxRV8x9kxvsiNp0YMHtcjWzbYbf
bvPa7Ta37uU2VYMKo+gGMLwLyOuASV1pNojUyYYtSy/Wmc4JUd/u5cRn8frjEW+J1/AK3mb6mOGF
8uUsdrJiZ5Wzxik4eVUnf5fH4bCLDifI8UiAGgEaCGfZm2nUcNsW06eOEGrAOvwk2At4xUF6cRub
BK8/fRw8v45HOLt0mtwCGUUm8+CPugbgmKPWDtSaQtakV5NWLyDUfA/wqvQsKyWgUMiKnEtp0Lpo
xKTrlk5dWn98AzvR+teul087TMU5tyVeSxK6NGPKvNs2rF59ZZSdTfz4Y3Hi1Pv7bn3uA9DiRGC8
C2gxAPv000bfuZaF6mp1U2iHtEN91L7Lc9C+3/W0p8X1hsfmk3q6Bjmv8+9jf3Qe8SqHyRtoLlIl
6HamRcC0OAozgaK07Q5bVrQ4yoAQfzy6vUqjhnZES2qC1kxrmp6kFKsSNbKzxGLsel5H3O6TsJ0X
Zx6tsVJrODd41B3KOb+1U3LydIrJnq4DAtskJidIvqP5XgapUSnP5IDACrQhbFkIUAJeSL1ceKbY
o+hInNLHDaz9pXPOlsaziTNv/DnxCe3y1x1/an1w2eiRs+ePGz1fHJs5btS21l8lTr/9l8QpWkvX
0jvp9MPnvlx793Xrb7tpOah0IvZvEFRqIasOEjF5zOjhcMV1S9jSR+ytD5EmWHZZfmd53fK+RY9a
qEVQSJal2MKKLVWWGotg4TO2HOLqEH38AGNUVFSriq3ZVKxQnGrqDTurEagQtuFIY23DArTxhkrs
R+g0XAU/aZIOn7859yLoSD6ZsUDU7e41UXh28fc30MTflJMvig9S6Q8LE8MSnudoCVvyI2hybPJz
MYD1DsJHVEJt+0rUjKx4XnPyjPELRF5yveR5T3pPERc6F3lXOoU80sXak/S1VpNLrFeLV6jQinyL
81fnb7JtDj5sezT4aHh75o787V0fLTkYPpAZWOxZ5VnlXZ0vbsI6bgKm0rtvRqxI4/FcoTufelX3
mu6s+yF2K0RZi+H0B+Pz01eks23pND1ddhdwKtJQraTAKGAFzexWw+a2VWXXZLNs3jqb54RlKeuo
trjoaI2DOsKloaPC4tyj/lCP8yRzXhqY6lVdVWtdkdOUA0Un64pMtHHUmbTTJglIQ11REc3LK4+D
fEzxyfm+GMvO51meDiQkdIjTIVdd8dlbb56YW3/d8kTrey/fdP+ig1NqRtVPGTm6Pry4duKCa2tn
zRAC3R+sf/jddx+eubVLj6d++Vpizq+OLn6Jjh53+ZRxNVPqWy+69sbrF826/launfbH6njbduMR
Y1Jf13DXDMt16lr1UelRdbt9u2cfOSjssze79np+T151tXhccc8ES61timuMp94jh6TF/nsCHzk/
9kqzPTjc8s2ZlVaMzclxh40pOaMRbEyOZCdyottLNFqjfaydatuc21Kbs4NETkM17E9b8GiNm7rD
ual9au2wP9uRbcrcf7U/TfYFBLdxsF7gV6w8jq3JN2gsO4+amovPxGsdderjBk+8zjV36xNnqfb6
xzQz8e63j7/NLr9+zMhZ2J/z6NjMsaO2nfsltbz7MXUldiQWJq5ObDkgpK/Z+Mubb71pBbDIrQXP
wJOqEJ32P0iU5FFD61URlwvwUEwCKyiPywYeSB01RkXzUYZHIekCXligF1t7k15SlXUumctmCDOl
2eos/QvBMUyGCNaooGuaqGiURojihQdC1kQxIsleSZJV3Qhn9NP5KyzhjLieywRBFsH2njLsssIk
Ea5W1YrzOjTOqYYlC31AWK2gAm1mOYaWpdESbYXGtEMsh4iooUWgj4csl1/RdgBrDYH7na5rCLaO
HDxj0OftR/IRJ0HOxdA+i8wD9+rrzQM3AsVZWbn6hRdSEnqvFtdscVLE9cnhjZaxwxszYTI7SIRk
Yo8q6oeSCWDq3G5ZhG6Z0i5Tumk0KuCXRj2CID2T+N2K1v1LEy+yvrSiy6sv0hGJJunQuXUs0noM
hwp4CYg0DZj3kAhs9keNqsVd6Gz7ki6fi9+Lohb1aXJB12iu353lq/GxEt+TPubzeWPZuW6PGvHm
UsLS8ufLK+AmG16Q/yQ4BzDZpFniENg34+TY3eg+qnt99/ndV3Tf0H1bdzXSvQSsxJsdIRFPCZTK
Zra+qVuPse3Hklao5nUN3xdxgVsHTgBlhoPJCEzl3JdcsSejwoeX7AnzYMVuD9fHa1GpXbacx5UD
uNqtR6B1c6UxWpqJw79sKoc4/8pSFCp/aa+eXMzk58UEV7QtkRfbyIb99rHVk+dNWbWh7sFFwxKf
JWy04Lknulwycfiwrm/uou5tRQPGGktflQ5lXHbPlFmPF+U/tXz60w02lYkvJp6QtIkXDxqvSa0H
E0s0a93IAZd14Zr51OQJ6XLYEsLkXWPkKm2td61/K9ksv6S9Lbxt+U7QcrUCa4Gt0FvoXygt1FZJ
quJRAgFPIFDIugi5klIg3SNt0l4Rfm+RqmgN9KQxTkKPwUHDzDORK4gzEVCvg17gizACwW6iajfs
7rh9+BQH5WzX8AXjOC8VGNnubrrg+NY+gXxLzK7CJWDlvvxtCnUoWUoJNEysXlPasrZ1wWqMdEKK
Y1G4SD+NI9PxIh7yCMQZBDk/1kiyGItwBhGNBPyBlGjHORiSXKyiWQMSr3+T+DCxhl5H49S2c3pp
4k/hRxb95rWXty3axdIuPfUlvQ0e66vp3Vsvb6xesPKrxE+Jr74BcVLcMyDiKVCohWwwLlIlCN9c
2Z0l0RLpSYlJkiaIuTgm61quhcArNFxgQ3QCIR6O2EpsBpRqUYtg45dwRIHarB2pzZwWpHSlqd51
JjYJVJZRIYHKQGw8+JnYBAn71LRU+KDWmXC3WHXuS3asNSKUSYfOJA7/kGj4AaPfhNGvxOg1ssCo
wuhlKVeJqCXqM+rHqlisblCZqpLUFDSMv0quwV4aI+AQwMIRS4mFWS4cv/6vxl+XOsy3cjMfzrOt
lf80vk3Cyda+bHrrFj62R8603s4xy/d+FxOzvzFyNVHSBabpuaL7SSgzAjGtjkxRVeBVUiPyG6ay
s97INmyjbPU2Yb5thY1xJG/D6UW0MUsKzS1gKilEL7xwWy/4vq7Nqgu7nGma5KM1t7VgYlpIbWse
dMJ0O7JhGEr9bqQFbBAtSBxtfUo61PoM6/9TNbuhlWt692BOz/M50duNsCpTt1vXJYEJIja9Br+h
LmmqpkN7O2AUKbIXNluBCwMdwkDXNTB/XdAEWNhkBbwfi0AsFlVRYWCcvkcaoiIw3IpJWuz8jNsJ
q43n80mGOGUFUxsmZYTFnEOYL7hUoIIAcGYImucxM6Jyk6vqrFRfEPizMsX/92kRiy0OfLy6R82H
HOCCgAycZITy5Hxtg7hZ3gbjTouorJR3il+I30uQW8ljTb3GxBG2GDmI5MoX6dcKq4R7hHu0e/Vd
wiHhFUF/Fpc5zunCRfoAgS2AFkWLGupqzXWQk180uS1VcnPyCxyZLFViic2Ph9VbJUYs7iqM5EiT
I5QK7YFUiBpmPiqZYVu9PXZPFUbMf6j5BBvmhj3YWfFPcd2DFZxAb209yqoTNySuwgZvXcjWt/7+
3A2s8bvEYKwkSBTq0SFiZUHDYhHy1DwLTs0UL1lhaOl94nqkT18+02NNbaHxcHp35OIhY50/1b7R
IcF03cPSRaeWpcdYVzGiFcOIO1ucoc3VF7Ml4sPaLn2fdkj/XvtJ928VN2hb9Re1V/T32FHxXe19
/QT7QvxM+0q3LdaW6L9mN4u/1m7WNzBlkmUGmyvO0mbri9hSURnEhouDtOH6RHWiNklXgnqxPc76
iHGtr15lV/hBX9Y03cfCYkBT2g7fWUyEWiJZFaVUtltLIYqdMHSPUm1xC3+Ys7Rj9VXDnh+38Aey
thhOHrGoAlcVmaLDWoCdVAULVqDNLlVHi08634Z6EajA+a6v0Q1viYiqppWmzA4M9uJSgcECwdCN
YBUZs4LwNUXNslOciW1N3LN+CFZasL+mS+viYHwtRmDsuLhUqhjKcpWqTy/HKjxtiVisrJn1NtyU
EAMViYFKpDSLKwHoxtYD+995Gke/ImflX52V4ZCztaG1oTIcxDG6CBnO4w0YPDfSV1WmNkTRz3pQ
m87jGQt1R00e222JcAUHYgY/DfByFBURUC0ICtSUoirX7fQw7jgo9KnEycRHiU8Tf4aaExS++Kla
vPHsMg6gqc3gDjHOjel/GXZNkNWQEFBFtwqtrzlJOO0jNKfNQ6MLZiSUKirYhCqojCmCBnwBV4LI
ZyzyGYul8humDXa9ETIsoyz1FmG+ZYWFbbO0WFiKg6t8P3JcmvvSPnZsXCs1RVI7r9Q5rrjBHrwD
KiGUIEzSZJdIAUlVpnYDvlFRsbo7nzwQlaIjrgweMzRQhRpJ0UjLAeiMqmEqjqgJljHQVBlX7LeU
qyss5ebELgp3j6tj8ZAEv1AqGIJYLdwEYbRN3aMeF+QXhDfUD1QY+4vVuNBXrVHvELaq24Qn1Ubh
GdWSUsjL4MYw8EDqmGErLo2zCH8o3nLkbDK0aPc4G4eHWbs6M4IUHipTlCATAkpXlq/0ZWXKSGYo
l7EJiuZlacoINli5V3lMeY29z75gJ5QfmSWfFSjDlCXKGuVxJlOgxVx8joMi2N5TpFBLTErgsoG6
NtMIm0Q9ifdad4MAuglv/VQtPHUOl00YbkmekE5AB3PAU/iQMX6TtEndbN1sF1Wq2FWHEswPLtEW
u5XFriW+VeJada11lf0m91rvGt+awJrgqrBVcYMSwj532BsO+sKKp5tNC3VTBH/+kzolulOP6ILO
9d5ISYaRUZ8xP2NFxrYMOZJxKoNlOPO3Ecq9HiWmfLy5KX3Z86k1h3plar3czATfQhU8ICD0Buis
cainvXqWtSlVBC7M82aR2oGlT8xa24TLPDclliWeThxMLKM9Pt+9+9OPDhw4xt4+tnn+nqI+OGbd
m7g/MQ+q1ewfE8lk8twZeJOYqVGdwS7geFhs5MrSQe/BoHCxRGdJ70rM7cq12e0kzcnVKgdRMT0u
+UHB0Ou5Zmj4szJK2uYnZTgdHdWr9I7qyQhnSpc3KdhUTqCacH2xwZQFUBP5uR3KeCwWgvG2XRe/
m/6J2scs2zVt08i5rzz70JOLBl4+pHybdMgf/ejJ1c1zXL7W98TnEvXdp/UfNdumYz5cj4EegFuj
UXLGuLHCMdQxUZlrmWvlPqJtsf32o5ouq7IeUP16T3u1vRquXKfm8tq9Dq+zp72n42LHQvtS51u6
ZYm2JLQoY422JrQqQ9b8Xg2+3bH2hfaV9rvsv7FL9ojN6rXZrA6rzxbw53qcXlrv3eZlXi+JRDm6
gDgfUcFGnzLyic0JI/rbafnb5Ea5RT4C6/7q+TEaiZXEWCzq64i17B4ddAd+AqprO/+YzPFntY6f
cTgHqOtgbTT1bxjGwQtLTXziiBPwRIXuLBZz4YjTjlUca+Z9/c6K556tv35uU+KBdxeMu3xm5Z/e
mVtZMyRn7wnpUM2rNz7yXnrvVY/Bvlb1WG20dYswMmfSgGGXwjgMzjkMdo6/Y+90pUeMiw66mjP2
F7zYVcQhxYdDii9YNEOaUXCtvMR2bcH71ndj1lp9vH18dm1stnWme1Z0TsGsroszVmVsjFrdMS6x
M7PiPDRmhMLx0dmjY89mPxsTG7IbYjdk3xD7S/ZfYnKR3sWWk50Tq7DFY8P14bZB2QNjc20zYktt
12Wvta3L3q7vsO3M9kCls8nZciykh2z+bCU7ptvgz5gQNEKR+LwgnRfcCj/fITYDnpgWwxquyEqj
ad28AhlCOX8fGo7Euel5FK7ZbKDbcAehBVf2/ioa4Qon/H/dumjBb5OwFhueQDwwXMnPC3fPyt/m
bHQy53D6rSt1qgh1+2PbQWn42Em7idG71jy9wgiKsGgBPzI1FJ2uKzqeChcUHYe0S7EuU+nKBj7S
MvoBH0fawk/3eCqygR4EyH1lj5unjhgOd4Ut4q7QTXDwvC8MuxV5tgo9yME8C5us0Xy0u6h8ffQ+
tvLscuBxqG1gdnVsu/5otm5a/M2t+LOdOh9HYdN8BqYDmyO3ziqyzxvwiyZl8fPdMBoJb1192+0X
XRI/+Nf61cu/fRTXdwNK4qjn+utvGFrctTdtfGPhzUnyTOKrxLv0o/Tb1ywdHR+a5u7ed8LS385/
fubfX7U1XFGeXRHPLZ551dPrl314JYX+gHt8OCcdxB5WcE6KFWslYok0SpsP28oGTZGpxHLhMFGI
qsEUIy7n8pZ2M3RZgTUGV6yhgSPpEuyjcI96BdvARBZSWx9P8Vc44nYzrAq3xoL/4AFLzPE2nsRP
cbQOgqOcn+Lox4kR4i2JkeJzZ86c7YdRKbAWrceorDRpuIuEIjliKbOIRKYWI9wnDj15RRNCoUO4
J1QOKX/C0Lg1KYQHLCKpFOEpaFPHjFp4gMUIHgrUQtkaJj6tkORqypf6CesP2o/6D1bpJekV/SXr
B+RtaKHvWr8in2naY+JvpMf0R6yHxSbpsL7P+rKodRezpWI9Yr1PvFO6T7/bqqaUgr0qtdswuJYm
e5QPDvZZRKBERvmQtzSl9Mstho9rm9N5yiLj6rAClRJnUBMzHTRKk+mk7X3OIkqR5mRJkwyFsjlZ
alwmEGuE4D5LhBIvFlHHgbHUontxFUaTFRxyNa+qaqLFam1TPfESwYqDrWgV4BHDDQpZVRSJH7PA
OU0lFKwT61sMHbOZlhh6RH7a8rRRzHV+JK0RbnpjNGRrt66FQyNa68LB1tZwqLUu2G5gS2mU/Ml/
zdGDa+Lyg+kK4yevEd07aJr8pksHvdPUmExFsyG1k8xDTEMdN6fh4OJBSCmdkXiIFn9EreAb9C+0
S2JL4kUYNz6CwuESvj2HOxjQOoecbQZhDk1+gTvz/eCrKaUNxmwlrKZLGf7wsLQh6UNz/+T82KX1
DFWHJubNDM3KW5V3R+jO8Ha41l8Kv5xmlWWbzy+H/Plyoa82tJitYtvlffKLsvWZ+PtOlpFT2sPV
1ZZjFHWP5xjZBXiEMuLzcs7lsJxq04VeYnfEL8qg3L/emPFjhpiR0ZWWEQO5XA9hZHzUSHdVRY00
Jx64dhRtZtfuExWrTe/KaQdlZohiM0SNrqhhGF5LZo88tVArsNVmWbdaGTT+JJR+ww7/e7gmTuP1
2Dm3lgBNZYXRKQH6cYDWBKYE5gWEQKhsTv82rWcBuGPDyTp+UIYdiaeO8zsJOC4UQeGFGmzyTNOg
UZQi6z3FGbSh9mS74puTbDmQlhEflzM9h9UV1dahBcSjYIexgG/qBlj9GijuucA74PfBBxCIcu4m
w5bNHQRQrHDjmLufKNdATFu26ZSnM5JFf3zjqebhQlpu4iuLUxGGPFz38NMT7rvj95eMmjd8HL28
51c5vSYNumRwmdPCPul+7121aw8kmm++6ZL0XiG1unrPmsm3DE/PjaSPHtw38Ud3aTC/su+E0rxe
OTOA8tWghrtMzSud3H8QF9fOGD0sFb3SLk5j7gnyBH2Cf0KwNv0HRS4X+9r6esrTBovDbcM9g9Pu
Uu7RdKsd5E/CWIQ9kuLla+GxWBxED0TV8PxMmuksZEIeTHyFhpXOJ9yuHsqoSuEbvqiTrZWfj4RG
xrXMSq5nVnFdrAHGO5gULDPlmfpM/8zgnHSpDvp0ET+rA3W4cc0N/vk+D6TAee0TN3tu3PNcItF6
8NLdhjs+dGndr1fOmrEKZ/hTdyVOJH6Er/iDS2u3sC6P1Mzf+tj+B+/nHH485l6FnRAifzFGT3LU
umv9sx1z3HP81weXhjaxTdYXnS8G33O+G/xS/lL90vOl74zs6e3p7RvmHuavDtZa51iVPu5e/l5B
YbG02LFaWuVYG9rp3uE/6N7v1+ycYoNpcR7uc3vj9jIbzwllxs0Q3j7bIXyJoQNnbpeFGKhKDNQj
ZRtAp4fAvkQURQIK5bk0SoptPGKL1uBUHE5Tot5QeFIKleY9IBhDi06fLOLm0LrjoFhuDUWYUm6B
05T5M+Uh6SVxomvzbYo9El/br6iZc/3yK0fN9FFv0enXv0x8Tf0nn/uMfVM6dtztu57ecum84t89
h+8m4A2iuTu4xj4OuJvaRjcbjG7uWrlWr3WnqGUzSOOMps3PXJHJ+ghxax9fPDRMGGQd5hsUukfT
OJ3skSycagy7RbE7sBR6oNBuy4NTt9BwOEj4Nk47UTWUManS3Jx8hg3fpyjGlAapUwnsvA2cVmxz
5Dn6HHeKWuQ63Gsvb5sgzicBnME6koo4NXG2/+7JBxJnE8/tuZGGWt3Fg66bumblrOmrt1xai49+
IKto6C7mPDd/1yVXP/LwgQe3Yr79Md980IqXpNPfHCRO7JNqSwVsWLaNzp3SDv2wdtjWHFZVLx3C
Lpar9ZrMnbb98v7wS/rL1nf1o9Yzyg82W7oj3WeAQ/gMuyvu8D3je8MncNdBkyOzygxhwvI1s1sM
KPnuUfZ6O7MH3Vwv3B9Ki9Myt2lQz4ikDOvZhamwqFsqDKaboeEAO90GlOK6IiNT3G6guUm0uIMc
3TkWhURpsS9FRMWZUzLnZW7NFDMdUdWwOeJAeBs3LLrAwn4SaqHhDRoF3qqgkenAAyw4yHk1l0i1
Va2m2ujGRFDDzSeESmaIejzc014VjifepMhsQFAA9zsvhwmyOdnYpOn9zGT/aBXMKej6OOeg3CRr
eO0GsGTnL7Xz18OVEEjZ82pNtxVO4RCtZVx5wkm1CMZ/ORaB6sj990SImjd0PCn9McB+osGeXz6Z
+PqmOdT71knqllsN4capAybnC0smXFZZSemY4nsf3Hf7R6CFosRLiaevXz+E/uK65QMHXsP5RhAb
4HOcPPyk2YAvgXYRI86Iq1ZcEZRU8Zkg8/ldzOv2u+weB3Ha4UR1Mq+mOix0iiUJ8zlfCF2mLoef
Jv240YRkJm5H49MnSmSPV9fKqmDgGAX7ToGz2DXFxVzNVDRsdk8e804h2/wtfubnNKFZ4/5QYMlB
Nid1PaQILJXfTT5XB5UydJwEwVS57R0A73VDRSm/Otsmhzywk3BBFFC4wPH5+N0aXIoJbqm4Z+GS
a/IG9ruo/I9/TJzYIuaNWrVybM4LzorRwz86d0AYau79xGix3tQgiulIY9rijNUZzG21ze+xyrai
hxihOE0KJbSMlQkGHcgGCpc6ar21uRMKJxTVFl/pOOM643H3tZX5+xaUdcUxyj+8YFDXU9bWgH4r
ZLbFarN0sdry7f6Ar5vNCkU/mMN3wD5zB5gbwO4yiaTJYk2FBV1SGyCWmwp7xFMbQfOlmYJ/Cq4j
Xrsny5HPA7vejSPc4lOCIblLoSUvHORMRwuFwuHbetAeYEHNhk7KcqLuUMl57sP905z/OE86W01F
nQur1tNtlp92+Q96bsLGNikYi2OSLzXN6/yUzAGn/HYR12DyLccc75zcWYUzi+YUg2+RuoDk51LN
lPvl4NFtBBwoj8I4wGIRKAodLxIspf3VjIIJV/fK9diWtbx7/TRKn/n9Cqr0m3/4tsTfPzn36/pZ
t66ZPePX1fm9fZlRf4/Y5fc9vu+2d6iFhp+4+9zFTx2aW3nwVjv79aP3P/jAI9vuBwHegVNPLfi6
n+wxihw0Cx9AYiGdA+gA15/pj1RTJL+Uwya5ZrskSpnH63J7BC+jDo7UDAEODd3r0/2EWPQ8VTMi
OfEnNZrUqAY0Q+v3Z+fENwS3Bdn84Kkg+zaIG/bePD9nfYYDdbf56Ckf9YUCVSm2D2Ma911AI0Ps
+7ZU6jQAG+1J4DRgqleqeWaCNOAKAryqIOW4eZFH5lH62Jqnp26pyUiciIy+qPrqsgRsC62fbR0y
f81trbezHjsmlw9au6r1G0waDNO8GYwo/0pg8UGiYWRVLr3K0EZpbIXWqLXgGtK3mpSl1WvLtW3I
kARZwScEAqSYQY6QY2hZB51IlnBzUmcKZCafnRbNiYshtW1e5qxScszcnqZzzHQpQZ4t4FdxcNHN
vHKcOIHvK/dTMXHu7DAx7+wHWKGfRzj2IDeJG4V8fNIoia2QGvGV6BHpW0nKkuql5dI2ZOCiPoak
Qw+jnDDNkeCS9D+NxGQMC0wtC1edpUM/VeNdy+Dx2Iydnk/7HiSFaF2Hd4GzWn2y3xoX4mo8GI8N
YoPVwcFBMSuss4VjtfrCFYVbCx+WdyjbrfvkfdbGwiOFxwrtpLC4cBQKnin8uFAuNMLp8SqkV5iF
khIVlXAGZ4V7dIVr/UamqODDhfy09PS8fNgyZYczz+0yJpfXu+g8IKeZVRuOcFpeRjry5qXTeviL
kbc3Ny8vn2sRewjJx2ybHFoVD42eGHc+quYb/QGVgJz8eL7R56J4cf4b+R/nC478rPwV+QLJj+SX
5CfzxfxQwacpImwz6UIapfZ/Je5PFIHNfg9HFYJ2cjQPeWAL2PDmjTLgcwEcAiDKItxwB136A6bm
jwuhnDzzOd81yfNnSl1GhfUtMzeWVD902cKHCkCvGfmj+87unjiRWdWz/+xuiRNi3u2Pjhs/ftyU
ywZtbq1lUx7oXjlk/cYEY9X3Te5avfKe1nNYM3ipxFqsmZ9sNYKKJ+CZrM6Gu1CkWC3nIHWQ40un
JJvb1aXgUG61WKB+MZrnJ+Z2JRR3/ci/2666Jc8KY2LhHtgcOV7NXWulp8C5L9y1nFP+88Y1rYfc
nmxqbrji/fPk4bRObV6xNnEiZ3TF0GuLQPzS+rfq7q3JYpmPz+g9auWeRJaYt2XvwNkrf8n36hjo
ZPdipjZo8JuMIV/QE+oPnh984kvsCxiNQ1JIY7XOCZ4J/trgJrZZ3qxusjZr77A/SR9q71hheJe/
sDl3qK+xP8jPqy9apYXqWnmlKoC2QIWWAEeRV1S8FUq4Pm0+7j/ZozCYdFC5UwcX0zxuHlo4R9fm
OGdCD50TFGkd2Dm+TYm7MS1cseT3f/NyO1z8GrOudcvfaDzxyjd3JH5YRyMbr7767ruvvnojy76Z
yusSL337t8TzK5M7H9i5c9uWnTu53rGaEKEX5uskO42CTRLV7HSsNFNaKAnF7kn22fb5blHXHNYs
K7vNmrSyKmsNLkA3s8VGoaJgjQUm6wX4bEUrgRlL1MLL3VvdbIp7uftJ9xG36HaSPG7WKDQsjK2A
6RF2DVfVQZqeUi6gW5xf0u/rQiNS6gWYMLZHBb6S5VdaGsjwxgDuBJWb91xKewMBWGKsKzCQUjRk
F93GV3XglYPqaydefFHfMcVi3qYrB5V/173/rsTfMMcSrKkTc+zCnjNaZJccU/MDrkBss3uzd1P+
3V00xVvtZe7DtoP2l6Kfxc7Yvs+WC23jbTNsd1s2uXdkH7Qq/WNGzqC8WdnT81a7V3tXZf86R+uV
N1iutgyz1TiqowNgk83Jz+tlLY9yC2R5jiLrkkuLBm351uzs7JiSk210vca6xLvUt6hwYZc1vpVd
7vXd3WVv9t6YbQW9LXBz8J4uj3Zp7CoHon4jGov7jfSseJaffgxVrkyNjsq9LZflGsGMeG6YGymM
ADjPqK60pCst7kq7ZkZLnNRZRqOmJgPuZIaokuLN3EcWKlrSzA8958BxTItEm/gz7yBx99JJklI4
jHKZUpn6aV52z2h1dBytDUyncwLfw+cYYGI4ms0KPDYrKwhPgeW4usAyKkzD1R4FuiD+cbWkHeoa
0g6S7ORrTdCkcK/PDLm1tykzh6ePNWXl4NIkQtjGedpIQ+RKG+2ZXZ292XZX9gvZb2fL0WyrTRRx
Ky2lq5EyrrU1BbpVITQVezOdnRvnoZEB/k/MS9ajqFiP62unKOx9TtPuLZo1PX7UpNQYAb/yFPEU
rvliCn4DaqC/LGCg34CB00LAKO8VD3CLU8DILcQD/ToCWaZxRwyMDxtQOBxhOiqcDLO2yZumb+CW
H4+5XsxvD5mKHD9rwA7eZmXjV9zAvhvwU5e6E5KTfMXQcJnAUYBHtDn5zX5bhdVrreDRPVZu/f5q
t6XCtM7hgkHt+duK/LsK2HlAdKmboReYsfn3AdDz8kpo2H31FVf1yvX6hiYev3TZB5998HZB4gfX
lEnzSiLpefTZ2kmnv32/lRYXjRlfkF4c8Xldw/tNuGfdU7eu79FvQJY/lulLnzls+Ko7/tiIXZSV
/ILdLt0Pvvi6URghUMn1Qkcf+zB7rUMJ+UhQ8PtIwO2BndzNvDQoaIquWKEIU8NBAtsCjQGhHkEL
7GM4euyBUQDMsIn4+BeTOLNbLbi0UExIMZ0CLsEPJwVBIS/gHu+r8m71PukV6r0rvBu8R7ynvBLx
Or38QrwIc8WSbe2WtuGNvcAn+pp3B73JFm4K5ycXWMKdp82TC0xB+AIQp8XjEKeusraTSx3FMcXL
j3K9Ahxp3DXgwsd/5bkudl2LJT89f1hw2q8uua7Cot1wAw2LeccS424sSk/7oEvZ6ME97qZvHHvr
4cRa4OcWcJmx+GsVfrLFCEx0zXJtlARNDsmVrNI1nA13nWCKqdG6RIuf6D4vDmU4meX5fDDrF8Ks
aErK1PHtv5GUmspJ3RSRKj0FG/KFIrKjfBxxkn/yCF2io4SsS5kxcKMYGoM5bbjOEBVG9nl6zpW7
LqGhrDFVQxZ0oaGt46ddvmsj25YIHpvRt2bhcdoCVRHztEAXmIx5Wmia4ZMKwsVxhT9k/lD5A7b4
o00ITSU1As/BvSKVcZ1D1a0WaOLMLYS1sJ5NullesuDjj+Qpww/7g04ki5eELPhjNJY46WNZTbQU
S9qrU5vV7MuiBeK4qapRGZ+oVPH7IBXmrekKXCO2EF2ESV6DlV1GXKvgFjEjmF4Qt9iyzDtyog1W
d6depdeYDuwSwyKyCguMdTWigKsgJVBSVhgOazmhETjLBBqyvgDawh0neLVwyakOykddyDS/m2lT
R+MKGj6rwinM3NpFEFhtF4FgQfcEuPkVtnR6IDGO5r/cJyDbna/SaALYa/1k32B/t24sM4VTDTpx
b+DUSj8yegCzOpGZrkhaGvGzTNElhRWvlqm7rFbTPROzVAgV8hBhiLxZ2CybVkFjcdeLgUILvsgV
NYsuWtNIWPRLXi2k+6zWGCkQ86VuWoGeb+2BK8T9tGpyMbtYGqIM1RaTJeJiCS5hfbF1NVkjrpbg
GNZXW98n74vvSO/AM/MOPDNficel47gjdNz6I/kRl7DOKN/DhfO9tVvbGp33xWhtvhgfIhYcDH72
usgaXzV+J46zRLBKrtVWnHe5jGhzuVxilHKXy3/nRpFTbhRcQKqCNQurqvbXKP9wUmZXEQvAwDcM
9r0ROFFeOEjDKWWDu1HavCgpJwo+xsLqtX86/K+9KBglX1jwb8L59V6LYauAc+nMHlsFqPwMmLXF
sPKcU2DWyOEBUsf2YIUQtLNuLhjMC7qcKjz8H40KAq1NNFLXSweoY/dr1Jd4LPH3A3tBGUNYM4ez
H7DHWsdjv1mx3+rN/bbZWF+gvCyyzcpB+iF9RzllwwXasBiU8Q0i6a0OwUchv6ILFT2PFik9aR+l
mg5TNlvOyGcULVfMU7rocbGPPlAcqT8vqpfo48Rafbp4lb6EXq/fJW5UDunviB/q53SbICo4c/vx
8VsXvUys0qtFzYdvK/voI/Ur9R3iAfEV/XtRw12JU03uIN/lR5t82JhciPusrjgV8d07d4AhUImG
61co2V/YLZ40r7UdMxz+nLiQx3AXhmmSbLG0FZ/CdVbeRwDFljwi4Q67BGcbNEzc67IQGFyu2iOX
aQgMizqjBl+NH8O9V4FnszIYwK4y3NzaBU2We6xFMuPn/dtgXlIM4QJK23VF8zNxkzHyr5qKGtp9
Y6kYCBO2Q/5IUfc+PQJC5hPcgxDCGDTBRXJdQ8MC0EbDgjJqriue8P3R5Ynb6cSnXqTDEpvp2sSO
ox+wGBMSH9KchNb6Jh2aOMC5qB32rjFYVQ+N73UXSNTDpx60wl7qh9FU4Q+ZPyQ/8hjnZVngpDgm
izaLXXYy4pFFD27XCTDqy556KIDN9EmwQYet2F5AIr4SX71P4IYPNG3Kzoub9hB3embcx33LFYIR
DMX5Dbdmmm9ozEzBP8lTblpBjPSe8Ta/v5dzQZMJjmgNgRVybpi65g+8LRjhPA3b1cm64tReAidM
fc3IbVMVCrxUHFOpq5F1wxudENB9IKD3iE5yKInVSp7aLeDvhPF7/ab1VuLOfpuryuP0hPBwB6vg
Sj7VhAQP9yDdds0ytYkUuwBzVj5kd89edlhVz9BYYu3A3IETl48aPTI0oHza5SFsKDv7+zl2sG7a
RdmuD23X1HLsg7S8v1z698CSKY7K79SQigxCHvq0En/ZjpDXRvXd/9NP51rx6XsO6uJTfLOF2U7p
lxhJBjrJTz/9dB23r/L6P//YauW2LFaBwySHXaRZeI3MF68hbkC1kkFqpZfIZHqCXIayKwEDhQz8
zb3HyXjUX4j0NQjvZBXJVtSfAHgIUAYYAcgDXAqY2AZjEfZHm1cAu9DHFN6PGX5K5iqvk4vwLgLY
CJgKuEuaQO4WPyWb5AoyjefjXTejjxji9yD/fnkXuR3xzSiv5XXNkLefQIahvCvK7pQmJJPKLURB
HkG8Ffl+vP8OPmaEeXj/NeI1yZOId0HfQ1G+GuF4hOPaxhs045/yNuZc+RzX8jjwswxltwPGANYD
LgV+ePsS9JeF9C2IWzAuDaEVYBcJyUadSnYRaUTYDe8fiHHyeXOYyueBMDUnjB9thv4bGI/8/h0B
Y+Lz+hLwOuAI3t8+Nj6+jnCLOTY+vtQYBwll5vrxOdsAfdnrZADwkkD5eumz5A8cQHlHMa/DAAl/
n6yHSpK7MLcqaS/ZjHQpoNKEawgVt5B5wmmswV5ynbyRPIh8wnoAvie57BsSlnNJL+BvEvqfCJiB
Pp836WE6x3vyG9TPEj+DXnANqQfMxbtfaccTX2ekh2BdJ6HuOb4jgNeVgDnAwWbAArTvgfcXo60d
6/4DnZB4FHWP4T3DOeCdfH2yUD6IryVgIdo3oC9qvie1DqAZrAcA5XOB098CngE8y8fQDqh/ZzuY
fe3CHYxdyX/gPR5AGPA64HZAHqAeUAEQ8H4d9XX0PwzjKEHajzFkc9qQXjJpdSwfe2oO5l5Yb+Lo
cXIV2l8KCAEK5MfJZW1QgLoE45qGvsah75vb+8b4pqJsfHvIy8UrTbp/GXkEZUM7hHfh+7nRfAx8
7ijr3x6i3f3odykP8Xfq+P68V3jHnP9mxM39yEOOG4Rj0OdG0PnqtnBU+3hQ1hVj52vQFe0zUX4n
4re0h4ibuDgfvkHuRZ8T5NtBp1+TkeIHZCT+MtpIaSnCO0iJdBB5mI+IvzAnFJEaFV/cYy1rgM97
OoWbkbdZeYfOxbtuEx/DXn+H3G/i9R2WLb5DJemx5JcSoa9Ij7FlZvyfQpTzOueBtqTq8pBDxzLe
x/8mv2Pb/2mcvSs9RmbivV9J7ySTmM8dfE8oX9MSQKQ9RP4ewApAF7WIblavpM3KeOKUCTkNmCca
pI9kkF5iC6kSffiLcITkIn+8fLHJdzeg/5fo1+QWrNcqxUdiwpckyN/F3oV8APD+EY4AXtvp6QKa
a6ehzmE7vXYO0c9GrP8dCCWEIey7Q4DDgA/a4C8IPwE9DgFcDDqNIf0Q6t+D+FoA52+g1+RJ5KXo
8xWyBXm3ttNne8jfBTrt0ok+FeRfQJed01y2oA/NlC3gNRgHp2Fz/pw/ch6H8iq8cyLo/ZX2+p3D
Du3vBu94D2O3ia+TyW37uhBhCaAYfTwF4HzkMHTV09ijX8hvJQ8rVcnDwqvJw/I9ye3KlcmX5b3J
LZh3IR8LYCP2s8nLMA4/T2OcNyO8B/Ml7XJUyiMzOT6Qf6+5Rng/6nflYzPrLcX+m0umod8/IC/J
96GwBfsO+ER/N4o7yS/ET8gGjN0hPJnKF8eSkSi7U1xEbuX54Om83CJsMMvHiP8gi8RCxHcivI/g
T56QRfJzvE3ydTPv01QZz5Mmk02gu2JxLXlY2k0mYUzD+DxYefJV9BnDng+rK8j9CgENf0LuFX/C
nFswR46DFnIfn7fZtin5E5+f0pcEJAHz43UAvA1sRpE2fGw0ccHLuAzg/BO44H3Kb5v6BpGOov5W
cr2qk3vVfPCn70hYAS8x37WbTFQNE+8ixjZU/Bv2x9egsfFkjeRN/oi8/tLjyaTwE/bQ19hfHPCn
vCQfCUlfk/uwl9bgfWPawvWoP174mvgQ2jE/LqetaLNWfIQskB8jN8stoLt3IAveAU/+GnO5kvRG
/HbxseRZ1B2Mvgh/N/JHI13C14QZySPA80NKCwkqBt6POnwMKHfz9wqfYbx3kjXgJf3Vr8lvZK5l
E345FH/dkhBIcw5mejni8JXhb2WaYOZxlRN1cc64k1zP83Hn92WMguFvW1K+F8RHISPuI/2FHbCH
zIT+8BW5kRWT1cJI0N1JyAyBXM/TYldSIJwkw4Uz0Hegn0k66WXW80OOf0FGibVo30Kmi3vIdCGJ
eBBwN+gR7aRmMlm6AnrW5einDRj+wqaokVHyerKaFScf5/XMd5xJ+gWAuJSUmu142zYwx8rH2z7m
hzqMGd9DCjeAxvh4+beRHcbLxyq0j7NtjP9qfOY8OS4wTz4P8U+kP/D0ISA3FeIvX91CHgNsYx9A
D28hy+jGJFy2pLoTDOmYFpfRNYBRAFFcRh5A2A3hV4B3AFsATwH+KpaTm9A3/s4xaeLnAg7sd+Bd
CFH+COBpwJ/byzqG/H0d0/8qLn6ePNQxXyrF3y8FsK7g6YCOZTwuPkDi4hLoRCXJQxyERfDfAGT4
URWVFLJPkD8B7TqlpQKySZyHumOI0LnP/00acwKtn8et0XGO7euBEI7+/wh8DXk9HkZ4iP3Vjcvn
/814/m/UxfouB8zifUnbSHeThr6ATq4kn6dPkcvpseRP4Ocyh1SahE18PkBc7euE/DUUf+Sz8/qx
35GeHOed85Gu5NDevvO6/qc0+p3TEdrpoD1USonBQfwz6AHQOQ15YHCQOY0BOqfb6evfhuNIHHiq
FseBTjnNdUrLTlLMgc1H+WaUf07yOZxPjyOFaGPSK28P3MY4ANeHOLBPSJSDMAZlANTtx6EdX5j7
JI5XoYW3Ndub69NO553XB22J+AL40XGSjXi4c9hORyA/k2+0p3nYOQ9pk5f8qzrtdREagJJ/1b5j
u/8/xLF3XgW8BHjx/8v5cHqnBLQKcBLodG9B38BftpV/g3PWa+QWQlrXEHL2WULOTSEkARl87gnk
jUc8D+HfALihd24OQkijs8cQn4+ytwGvA7aJaWRJm14ZQnpwqm3r9rb+clPtebufoO2c7Zlqf3Y1
4vch/l8AUNnZ5xHehfA71G9EPzBWtUIHOHcjwjjSowCgsXNvIt0PALl/rg/gSwDGeQ5qzDk40c4+
AFjE9RGup4E3djyH/t9NdzrLcr0O7zt/tv1PaYwRNgDcbuI6J8bL9UPoI2P+12H7ev6HEPi44OzR
vv7/KWw/S/xT2IZf6Hyvcmgfd+f3/Ls01vPHNjiN8FtxbbIVOqVi6tHQZU2dm+uPXPfmuizXt7ke
y+1BKZuiGQLPfF2tXHfm+itCfia7Q3oD+LyGXIJxTeB45bLE5IMdeCvrCltRV9jwUgC5RAaizh8x
nlPgQw7I1++gW27ggDT/uTwFydcguxzguc/Qp5LfIXwd6Qx6DC66NpnG5V5HOM9jO+kq/0LGXaDL
/J+W/yeZ+H9aDv5S0wYXyNYO+TMR59C5vBh5HLI5tMvg/7dhZ1n9n9KdZXfn9HkZ/m9kdEc53Vlu
/2/T7XK+PdT6kVIOigEdBNBZL4UsvkAP+E/pzu3/T9Nc5+DQrnd0SO9G3u4OaVMv6ZzGeC/QS9rT
ncN2veV8fic9HnST0mfC0E3aodO+w7sv2If/KY19OkCcl3y/fb+2j6G9Xef89rS8nAwCDG4P6U5S
AD5SCLgZfARyMBlDHDIweR3CWvUcKVWfIKVI7wPsRx54ThJyj8u+5M10L3TpHzjLSdyEtAL7Da87
qQ1qO9P3P9FvJ7oVcMYz9UPgzJzTBuiMsGkD+gLcgN2Aq87TBs7KePfLAiQvP+sKx5PfQW/9rrMO
+J/S4jLYz3HeQz2HOA7wKUmTd8NGCxsK4qsR6gh18Pc5gDYbX7JVbjLrXIaycdw+Cz4/E2fiefhf
RB4HT58mBXHUWNDuR4FPps1OB1maBr7vUL6FveSl5BNoz+1zE5Qg9J5/wP7Yn2Qibz2Xz4DpqHsF
t42xv/D/18W0IQfbwm7cPoV+75SxiqhnR7t2O3IfxGvFnvDz9CQVKON+qkthf8kUHzL7WM/t7sJZ
0ig+QSagv2Z9F7lLgx9KxXy0CbAr4QsxcQG5U+9DNqvchpwO+wrkFd5n6inAfaI93sH2x23xOXz+
CMe1zxnpC3QHlPXBuLK5Pabje9vbqQOBmzEp3xDqcjv7hbpRJ10G/fQCdAOcBnze+X1oD3tn8vVU
SFYg5LrGrLbwFuC53SeRstM/QLrDTsd1s5RNFjJbskJGA9DOxDHKUmNqG0v7O4GX1vZ457BdRwEe
uY1qHOBGAPehxQHetjxu77oEdHAJ1quG28yk1bCbrSNjYCt94Xwd6Mio5xD/y6TZdci/gwOnL8CV
Qj/4enZij75PvFx/E982fXg3wUbLAb685HbUvx32M24LGwO72hjT7pgkY4Crz38G7C34NFKAr/Af
I+tMMP1+yRf4mAD3iaNN+uQ+Gu7nSBPPwLaz06QZN/DAfYIO8XYAfD7SfJzXsP4mXMN9b/BLtIUm
zmA7xHxrRD5Hbpt7DHQL/AgPQL+C37G9rlpFxilrQa9PknHyjXhvNcmSNwNOk6BcDh17HeY9GG1v
JGvY30gpB3orbOgi4hgIB4HAFgfNHLyHcN8v9wkDX9yvthBwF+bDfVv/4PXMuilfLvfnduHAdtEo
yrmfsD3O/WCIm3mvIuRg9oFwewdAveRfAGfZSW45RP8M4/prakyCEzTbCdB2WhvA50YyMPw54kTg
6kIYiPQFgH54urgzIJ/n5XaGtvww8i8A5PP0gM6AfJ7XeRz/rt6/G8e/y89D3xcA3sfT/67//+k4
LuiTv6Ot3xjiFwDyefrfjW84yi4A1Ofp/+k4LsAx2oXRnufldAbk87x/N46RKLsAUJ+nLxgH+NOT
APyPea2Q64mXIa+XINyN8CKE8wC/RRzn3uTMtjTqmPVmI68NuNxPZrXBIIT8bA55jP+JiyS3AEb/
DPxdSR9vgTpt70leifjfkX8xAO/ibROHAXi3CW3vTPw/7Z19eBXVncfPzNzcuYkkueElRALMhZgE
EgPhGhoVSu4NwarprlGCTaTVaMXqvtQ8JYjrC1IrXQGBq3bdWp9KgELdouVm7koTXkoUbbV9hNTV
Fd2q2Qdr7ZauPuDTp9stufv5nTs3hBSw+/LH/jE3+c7vzDnne86Zc37nzHmbmR2cS1rZmjP0Q5A9
l7QT/xC1VuLTcZOOoT2cl4FvwenjfJ4X73exI+1DE5FdGf9DOMk1poWHexZpqnn6GviEn158CpL2
oSTnW5D0mYZ6geTlVkC8Jxknps8HNZyL+4PUUa9dUC8xTvwS7WGe3KtDzA6IzKGt1W3ubWp89l7B
fWWlbg/ZCyLtHW9GUIH5akqQeV7CyJN+g7Thejx5VK3T48k39Lr6zdJfyLmA+8hrnP8rbWo3elhA
u/kAawPEoddlaGu5R24lvmut19TVAt3XkDUh2WPB/SDv06z3X0qaPmbuc7MqtQ+x5nI97WlmLHue
fSvnX6LfIWtkrGGFnlQP2Udwt9Rl3K8WZu0lDn1vWZNO51zI3hBPhn6r2u2fcu0PsL9lkiqT+Oy5
agl5Vp+Nm3zQfS3a2ELspdxFdzZk8Idq5lM+myNpJr3IImSpXAfxrdd58jJjcta75P5JvhUxRs8P
TqRe/UHNsHPpX+xWD+aa6nH7Bj12nxfYrOqG4zyqamT9Kfgq62VfUxN0Xsva01vk619Thp7k/vBQ
dj6AtbRvBV4iLNbU9LqWNx9AmHpeYDgM2cfDmhe6MQm30/o12X6Uvg6Zq/HmCIbj8K5HrkvunSOu
X+dDVoey+c664edkbUzW8SjbgtEymyZZx5O1NMK7nvxrDS1Q19t3cW99hrWOF9izs5A54SvVwtAk
FbG3890c+mf2Leim9PNkri6ianKeUNTx9ELK6WXkSiB15TMArdF17g3cns7UR6lfYi8/sTtJfZVf
+i/APeC2jLu48X1N7ffkh0jC1274kd9Jaauoa7wokTkaDyeR/4E9dXfod2Iekc/Sn9P7M0ZJr1+v
viHXj/9zy1H9z+HyGmVPWH9POZfofMqEm+lPZvuVp6SsK8/TuqL7cOlXqaNA+nLpQ9hL3Vw7WsKR
/SnSl5V1/1978m1P/lTWdqWvN1oSzmn7V0afj9Cj0/rtWfvhepatb1yH9A8J50xS9qvp/vUnSdI9
vE+GfNP7ZUZKwj9tjvCs57Jez7q7XrdH/vH+A10fxpAeqRdIvadv5PgpO47Kykfop73D9Us/tgBc
Qb5voM3583OB9Om9bsET6ePBE7T5w5I28gTrmuzpOROCU/E/lT0t308ft9HwrCR/Np4LwU3wNnF/
cdLHQ9y9Tkk1nnMZByQySO9GX14A74BjIAX6LSN9nFc7qsDD6eP01UdI7h0P6/HJyH11w+bgt4n3
28S3hHhpxe2XSTetgN7TIHsdzgL67MrmNhy6SV/jCbkXnhOHiIfeQujrxPN1OL8nHto25AlBtiyy
eZrNK67tl7q8ZI+BwEtPNq4s72zyk8qRMGUMdVacvVzSJyij/7PrPlP6s2lnruFn4G05p079HMi4
BCl798i709MvevZQ8H10FtifywDuY/g97uEE+foL8C/gkIfnkbJn6QPwjoUOCIjHA/GM1gXZEyPw
7KUuCoLvp4/YV6bflnoge38EhFOVLbOR0l6W/hk6+Lb9GPIQHNm3k+l7yfqzzN3IHtsbpS1ETst9
hfuX7JP9sYpwnTWhJLrNul7gOXVL5r5xqt+H3kgbLPtgZU/RWOZ9Wq0h9bngTsa2Y5ST88/p9wXE
94AH2fMrkD2QjAPTL4KDQMaAYv8PI2HNUlMF2F1K3MSSpibp/nYZ5q9kIJ+iEvtT6SItuq8ToCfM
WFdxbTdS/oWkc0ngcdL2OGNwQz0k/R+u4dFAIfty2JdEn7JA77nxxv34r6NfeI2HaeRLa+AR+o1H
1WKNX6HXsq8G6D05Uk5H1dXBC9hbM6j312T2/DKut94Fx+Eeo88p+2+8vTUBwpB+ovSLrKPkI22L
tZXx7lbkNuSSDAJ878u6hzH6V+ijvoM5CaYyPp+OXAnuxFyBvAssBU8Dsb+bPSzjCSsHs4CxdGB3
RopZxtUC83AGVoQ4sDd/gr8HVJ15HPfLQR64woP42ceeVXFr1P6i5q+I47PstyiFK+aFuL0FQpnx
u55XwL92y/qBm/WT8xt1Wd436VONA2vTe3LizHH+ivmJVp6NUOl8QEkO0cLJowi6H0VtTV8FnuT8
I9Nboxheg+j31sk9mfMS+0weUdFgsbo/53zVzFggHizkvtzGXqlNev81rbOMiYbQ86FbZT8xev+A
9XpmfV7mxrNz5sEBNSuX/jnuvJONttyT5k7qMmaDkKROoFvKkN4b9vLT+6epa9LnED2zO9QGewt9
yS1qKfVN7/uGJ3NdReBCzJcQ9vScmaqRkLj7pJFDzyClPiymbRiee4V/m+xpE93CTfqC4v9p9hzd
i6yXPQnWpxUthuZejrwCrAKSh1cS7pMj1qt2M8+8m/PT9myMcNd7df6355+0fkWZnrY+lS3b0fPn
6Mg592aMdv/ENZ5Re4mG59XPstdIz82P2Lsx+pz4z7hmkl2fGO3OesXpazTenqezXv/R9HPoS6u0
o/YUMadfBy8yT/mcAF1O4/YWujQNf18zP6LO/pz+xH8qJ9OG0x4eRe+eAr/T+ve3mfDon5frPYby
nEOn3COwl2cJ1tOnvQX9rLX2MO9KPxKMEV1FyrMTrRqM02hjM/O0C9TVuq2lTSUtMle7QcZpug2S
toWnB6WdkXbI+IhvjXxEG0I7o+cluzinTdLAbN5BbdjIeQvutEnSToGodQOcG7D7PWbC0m2mtG1S
D2mvrBi4nvN/80A7Zb6HGVg/1GmImh/IWs3QIxnIPWdos9ybdNtJWDqN/048mGXsouvttXrf+o34
kzmCc/Z7uV9K/zLbx5R+5mnnlMHw/f5MZvy/PBKj/Qyv6bzLXnjZt/9j9vnSl9f3RJnD8PZGBy/S
6w663aEsmR/w+vmZ+XaZc67T5bVWFdGmyPyBNx7wJOs5UrbZMT359CPw2ghJaQwBfZ+WfPylbisN
9QUJm/IvInzRu6Du18h4T8YO38usRWAv+7312A5zZqyxnP2ZrYyj7mEugX3+hL0Y7CPsIQ/fQX5H
0p3D/m743xSJ3SD+apGSvtdBPxgAR07HyR9547il2XER8XBHHnoiWEp+vamCoaXs836HhzZFJyar
JTIvLkD3Hxdg3zsC8myHtOPMyejfX3E8A0za8z/CC2gZ1ziMH5LzYwBttSAHtxyuwaY2hA7xndMP
lDrvOqXGbFQqH/cCzsOzzo2ip5QaF1ZqPP4FEyiiCeShoPjOUyjhviOY9JhSk7+h1BTydCrXIXBI
w/RaQPlnUU44fwoqi5WaMVapmVxL1QKlLiQNNWB2BV1OwUunMKeOZYYPlLroVaXqnj+FuTuUuviY
UpeSN5d+rNT8y5VacLNSMfI03uvDzwNfB3wd8HXA1wFfB3wd8HXA1wFfB3wd8HXA1wFfB3wd8HXA
1wFfB3wd8HXA1wFfB3wd8HXA1wFfB3wd8HXA1wFfB3wd8HXA1wFfB3wd8HXA1wFfB3wd8HXA1wFf
B3wd8HXA1wFfB3wd8HXA1wFfB/4f6QBPvea3q+NqvtrEi9VNnh6eLW/Pseebz6scZfa0ro7n83D0
LoAjxwjoBpaKWU+n7PxorBc5dryWbnF1tI+3PzztXnqRtq/5RnT1Pl66doO6COud7hKx3pmKNYn3
namL5mXk7DlauqGMsz0+6sQnQZsNTL6KkTFdhdwENoMDIEiCdqp3QRpY1lPWVvcyh4C3E1BhfLy1
XRmkcrs6DNLAIvXbuZbt6kPPJkCqtqVyx0j02zSrlMfIDaLcRuDb1GqwCxwGOTzCt43ItxHWNsLa
zEPnu4BpbbW2uGEnHM/jkfj7gGl9i1fmyudU+61vpsI6bx5PFY6LxuJh6+9UCzB5Z+KfqX5gEuzD
0B5WJt6b3Zo5OgubU3kF0TD+15Po9SRkPVF2czT0eQyT+F+fGlcsif+aW1ikeXe7tXUZQypcEm0h
F+5UhrXM+rIqU461CjkV+UXkFORN1s18BlvSGUsVhqOria8B7w18o2gmznGeh44im6xJqlR7W+EW
ZOJZ4c6oinLFC60S7aXQyld1eA1Ztht1Int5elQy/8FU7nmSvgfd8ITofmuNZavx+FqNr4lO4X6e
Y50N5EpaU7n50UR8jNXKZbaSLQ5pNMhlOcasL7sEFC+yFvEYYTFuf8ljmBOQl/FYv8jvWlt4Nbtj
fTtVMdnp32s9qlmPSKBEvyCjWgtS+QXR/ngurzQ0KICNFMBGHXkiVXFxVMUrrBk8ozuDyCPWfZju
wxS21mFaR6mto6TWUVLrSNQ6tE9Za3FZi5/ZvEegk/cHJMBmzKJWE1wyVCrDBPeCGdE+63yrhIwJ
7yUrDWwnpXILJGUl7thx2ltJakxBtGG/tZwngJcTZszqSk0sid6+16rSl3JhqqRUCJ0u6rrfmpgp
GkIqliLZb00mIyRjplhT3QlOMu5wLorsKMP8iTkgmWT+k/m6FLd5mHORP/XkK548lJHpfnMgUynM
V0UOxiebvyCwG8y31WZMprnXPMiHHhzzLbNXSt980+xTDcgjnPMJMrMPeRFyjzvtJafX7E0hSPsT
bn6xXKx50K2e7Rmccs8wsdQzjC2OxsvN583n1GSCeAN5AfI5s19NRx5AliD7zS6+i+KYz5pz1Tzk
P3ryBXOfqLj5A3O3uhiZcgskCUnXFrHLDYr4vqsyZy2znX3m982dahJen3ErJuH4VKriAqdwL+EZ
5nY+6j7FGRvPM7cYbcbHeOpWR0SqseZWt14CSbj7Ik6fmTATsZL6WHmsJrbDqi2vrandYUXKIzWR
+siOSDxsbqQB2WxSf831HOtVxER7QAwkzLVuoD4ZP8k1yXWZajXHbm3q4NipTYpjWJvE9SNtajDX
8NT/GhgJcxW4D6wGX+U1CwnzLnA3uAfcq226MK0AK2lNOmF0wuiE0akZnTA6YXTC6NQMibkTRqdm
dMDogNEBo0MzOmB0wOiA0aEZkt4OGB2a0QKjBUYLjBbNaIHRAqMFRotmtMBogdGiGTEYMRgxGDHN
iMGIwYjBiGlGDEYMRkwzamHUwqiFUasZtTBqYdTCqNWMWhi1MGo1IwIjAiMCI6IZERgRGBEYEc2I
wIjAiGhGGEYYRhhGWDPCMMIwwjDCmhGGEYYR1oxBGIMwBmEMasYgjEEYgzAGNWMQxiCMQXNljzUQ
fxHKAJQBKAOaMgBlAMoAlAFNGYAyAGXAu3TJCFGYfrj9cPvh9mtuP9x+uP1w+zW3H5/9cPs1Nwkj
CSMJI6kZSRhJGEkYSc1IwkjCSGpGN4xuGN0wujWjG0Y3jG4Y3ZrRDaMbRrdmJGAkYCRgJDQjASMB
IwEjoRkJGAkYCc34bxeN+VWjLcS91lxtzNTyPnVMy1XqiJb3qh4t71E7tLxb3a/lXapey5WqQkuK
Wssu5YQM16kvjBfTBFwFbgC3g81gFzgAbG06jOldkDbnxqYHCu2r7M32LvuAnbPLHrTNwuBVwc3B
XcEDwZxdwcGgGYmXmvm6HaVpUZvgGXxaZq76EHAT4digTQ1mHfHW0c7O5a/OrIsV/SbyYZVxuMo4
UGXsqjI2VRnxXPMzRkC3dBG+60QGGG2xMRULnCOgvqJyAS3Txt3HJjpuxaecXmNfRsyMVXN6DPSA
HeB+UA+ioAaUAwfUV1RBa4tN94Lch6wE00AE1KtinkZXY4tCsT4z39iRejFf5Uo8lTPg7XUraxG9
buVViB+4lTc5fL95t6qUXpHxLJVqJ3KX67yH8zMZ8bTr7OXsKdepQ3zBrZyFWOpWvuLE840lvMNN
qK2eXEyBy/k1rnMt3q52nZmIareyQnxXEVE5rjONNvUeErNmX5CJqcx15uF7uutcIr5DqlIKnk+O
1+jk5WCWcytFgj7sM9oCRuw85zfOo84x0vtrMhb1eDPSG0AcLu81ro3lOftqnsRz3HHjeeKf+0OP
J5Min3V2lK91niAso3y387gzy9lY0xvCegPpXqujcJ37I73mztg4Z7VT63TVvOcsd650bnSucb5Q
jr3rfN7ZJ8lU7UabuXO300KAV3AV5a7zmXLSQhIvc/7GiTmVziWRfZK/6mKJGk2u2Sc5wBtAdOwX
kr9V5cTuOkvqe42iWJX9kZ2wl9qN9jy7zJ5uT7Wn2ONDY0PhUEFoTCgvFAoFQ4GQGVKh8fIFY17O
YPBGT96DwPeuAnIMaDMfLMbMgaMyDV5NeqVKjrOazebFjUZzsv+LqvmmSPK3i8t6jbyrr0vmlDUa
ybHNqrm1MXlxdXOvnb4mWV/dnLRblrb1GMbGdmyT5oO9hmpt6zV4nZCxcU1pcuxCHNWaDaV9vOHn
/DUb2ttVSfEdDSUNYxcUXXJZ0xkOHdqyo0k+0O39SrKG6uqS6inJx5oXtyW/N6U9GRVDekp7c/Kr
iyOfb+szC838RU19ZoGI9ra+QKdZuOgasQ90NrXj7T3tDW0uwBtfL0LgLdSoIuKN9qRRvFFGGX8V
0PE3TQT+8vJVhfZXkZev/QUM8ddzJLKoqSfCAT+8Tf+I9nOkXI3wg8bAbeqp4ICvsojRJr6MtrKI
TthMHZDj4KWGA14M+ns6IMfQkSVnn/JS7nmZO+xlro7LyqRHByMHghk/I+tn/Az8nMrI/5lpWWO1
kZqzYtXBRcvKFnWULVoGOpLr77i1JLn6pkikZ9UKcYgkrYqOm754q8gblyVXlC1rSq4qa4r0zNG8
Uc4HxXlOWVOPOriota3nYGxZkzsnNmdR2Y1N7amG+W3x0+JaOxxX2/wzxDVfAmuTuBo0b1RccXFu
kLjiEldc4mqINei4Ft0met/S1hNSjfLpay1T5nl56HBH6bT2xuJw5wJR6L5500pWle4JKL6kcF51
e3JMWWMyH4hTTbwmLk7UM3EqwLrQcypZNW9a6R7jKc8pjHVRWaN8tFz/lPCbk3Ovbk5OW3xdm6hK
MkYWnKnMlstPO5eoRbc18c95l0bX8q5siCKV+PzjX9eZfitWrFjexWFFNe+zaU5W8WXwT/Fl8B7b
JqqOpnbsZmXtLEvb9eTmLuJr5jhWkwijS6ITE98XJwdjvPVI2WZ3sNs2ZRTRlZo0JXr7fvoN9wEG
keZKl6kEcVqZml7OaAkvs+dmJMNVOXcnTYvK99LroYosz8hYUQ2GRHmiJlHfXd5d010fxHX3Diyd
HXIrdWfvsFRX9fJsZmDsaiez5ZvmxLfFnTxFR9wtBj4fX71cf8Z8uDiyvGrvU+nV8LN2XKP+LdfB
i7XOYY5iJNPFlfLIxL5CzuSXMWgu+axJ2OIrc6at5HDqx5lS/wVMYI89CmVuZHN0cmVhbQplbmRv
YmoKNDggMCBvYmoKMjQ3MDYKZW5kb2JqCjQ5IDAgb2JqCihleHBvcnQgY29weS5wZGYpCmVuZG9i
ago1MCAwIG9iagooTWFjIE9TIFggMTAuMTIuNiBRdWFydHogUERGQ29udGV4dCkKZW5kb2JqCjUx
IDAgb2JqCihQcmV2aWV3KQplbmRvYmoKNTIgMCBvYmoKKEQ6MjAxNzA4MjQwOTE3NDRaMDAnMDAn
KQplbmRvYmoKNTMgMCBvYmoKKCkKZW5kb2JqCjU0IDAgb2JqClsgXQplbmRvYmoKMSAwIG9iago8
PCAvVGl0bGUgNDkgMCBSIC9Qcm9kdWNlciA1MCAwIFIgL0NyZWF0b3IgNTEgMCBSIC9DcmVhdGlv
bkRhdGUgNTIgMCBSIC9Nb2REYXRlCjUyIDAgUiAvS2V5d29yZHMgNTMgMCBSIC9BQVBMOktleXdv
cmRzIDU0IDAgUiA+PgplbmRvYmoKeHJlZgowIDU1CjAwMDAwMDAwMDAgNjU1MzUgZiAKMDAwMDA5
NDY2OCAwMDAwMCBuIAowMDAwMDAzODY1IDAwMDAwIG4gCjAwMDAwMTA4NDMgMDAwMDAgbiAKMDAw
MDAwMDAyMiAwMDAwMCBuIAowMDAwMDAzODQ1IDAwMDAwIG4gCjAwMDAwMDM5NjkgMDAwMDAgbiAK
MDAwMDAwNjk0NiAwMDAwMCBuIAowMDAwMDY4MzM2IDAwMDAwIG4gCjAwMDAwMTA5OTcgMDAwMDAg
biAKMDAwMDAwNDExNiAwMDAwMCBuIAowMDAwMDA0MTY1IDAwMDAwIG4gCjAwMDAwMDQyMTAgMDAw
MDAgbiAKMDAwMDAwNjkyNSAwMDAwMCBuIAowMDAwMDEwNTg2IDAwMDAwIG4gCjAwMDAwMDY5ODIg
MDAwMDAgbiAKMDAwMDAxMDU2NSAwMDAwMCBuIAowMDAwMDEwNjkzIDAwMDAwIG4gCjAwMDAwNDIx
NzQgMDAwMDAgbiAKMDAwMDAyNjU4NSAwMDAwMCBuIAowMDAwMDEwOTMzIDAwMDAwIG4gCjAwMDAw
MTE0NzIgMDAwMDAgbiAKMDAwMDAxMTE1MSAwMDAwMCBuIAowMDAwMDExNDUyIDAwMDAwIG4gCjAw
MDAwMTE2ODQgMDAwMDAgbiAKMDAwMDAxMTcxNCAwMDAwMCBuIAowMDAwMDExOTYxIDAwMDAwIG4g
CjAwMDAwMjY1NjMgMDAwMDAgbiAKMDAwMDAyNzA2MSAwMDAwMCBuIAowMDAwMDI2NzQwIDAwMDAw
IG4gCjAwMDAwMjcwNDEgMDAwMDAgbiAKMDAwMDAyNzI3MyAwMDAwMCBuIAowMDAwMDI3MzAzIDAw
MDAwIG4gCjAwMDAwMjc1NTAgMDAwMDAgbiAKMDAwMDA0MjE1MiAwMDAwMCBuIAowMDAwMDQyNzY5
IDAwMDAwIG4gCjAwMDAwNDIzMjkgMDAwMDAgbiAKMDAwMDA0Mjc0OSAwMDAwMCBuIAowMDAwMDQy
OTgxIDAwMDAwIG4gCjAwMDAwNDMyNzAgMDAwMDAgbiAKMDAwMDA0MzUxNyAwMDAwMCBuIAowMDAw
MDY4MzE0IDAwMDAwIG4gCjAwMDAwNjg5MTkgMDAwMDAgbiAKMDAwMDA2ODQ5MCAwMDAwMCBuIAow
MDAwMDY4ODk5IDAwMDAwIG4gCjAwMDAwNjkxMzEgMDAwMDAgbiAKMDAwMDA2OTQwOCAwMDAwMCBu
IAowMDAwMDY5NjU1IDAwMDAwIG4gCjAwMDAwOTQ0NTIgMDAwMDAgbiAKMDAwMDA5NDQ3NCAwMDAw
MCBuIAowMDAwMDk0NTA4IDAwMDAwIG4gCjAwMDAwOTQ1NjEgMDAwMDAgbiAKMDAwMDA5NDU4NyAw
MDAwMCBuIAowMDAwMDk0NjI5IDAwMDAwIG4gCjAwMDAwOTQ2NDggMDAwMDAgbiAKdHJhaWxlcgo8
PCAvU2l6ZSA1NSAvUm9vdCAyMCAwIFIgL0luZm8gMSAwIFIgL0lEIFsgPGNhOWVlZDVlNjAzNDcy
OWQ4NDliYzRkYzJhZWE1OTYyPgo8Y2E5ZWVkNWU2MDM0NzI5ZDg0OWJjNGRjMmFlYTU5NjI+IF0g
Pj4Kc3RhcnR4cmVmCjk0ODEyCiUlRU9GCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>