<?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>174056</bug_id>
          
          <creation_ts>2017-06-30 16:57:55 -0700</creation_ts>
          <short_desc>WIP - RunBenchmark WebDriver testing</short_desc>
          <delta_ts>2017-09-08 15:25:19 -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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>174331</dependson>
    
    <dependson>174390</dependson>
    
    <dependson>174443</dependson>
    
    <dependson>174445</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Matthew Stewart">matthew_r_stewart</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bburg</cc>
    
    <cc>buildbot</cc>
    
    <cc>dean_johnson</cc>
    
    <cc>dewei_zhu</cc>
    
    <cc>glenn</cc>
    
    <cc>slewis</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1324650</commentid>
    <comment_count>0</comment_count>
    <who name="Matthew Stewart">matthew_r_stewart</who>
    <bug_when>2017-06-30 16:57:55 -0700</bug_when>
    <thetext>WIP - RunBenchmark WebDriver testing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1324651</commentid>
    <comment_count>1</comment_count>
      <attachid>314327</attachid>
    <who name="Matthew Stewart">matthew_r_stewart</who>
    <bug_when>2017-06-30 17:02:20 -0700</bug_when>
    <thetext>Created attachment 314327
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1324653</commentid>
    <comment_count>2</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-06-30 17:05:50 -0700</bug_when>
    <thetext>Attachment 314327 did not pass style-queue:


ERROR: Tools/Scripts/webkitpy/webdriver_benchmark_runner/browser_driver/osx_safari_driver.py:36:  [OSXSafariDriver.close_browsers] Undefined variable &apos;sys&apos;  [pylint/E0602] [5]
ERROR: Tools/Scripts/webkitpy/webdriver_benchmark_runner/browser_driver/osx_safari_driver.py:36:  [OSXSafariDriver.close_browsers] Instance of &apos;OSXSafariDriver&apos; has no &apos;_process&apos; member  [pylint/E1101] [5]
ERROR: Tools/Scripts/webkitpy/webdriver_benchmark_runner/utils.py:51:  [write_defaults] No name &apos;NSUserDefaults&apos; in module &apos;Foundation&apos;  [pylint/E0611] [5]
ERROR: Tools/Scripts/webkitpy/webdriver_benchmark_runner/browser_driver/linux_browser_driver.py:92:  [LinuxBrowserDriver._launch_driver] Method should have &quot;self&quot; as first argument  [pylint/E0213] [5]
ERROR: Tools/Scripts/webkitpy/webdriver_benchmark_runner/browser_driver/osx_chrome_driver.py:19:  missing whitespace around operator  [pep8/E225] [5]
ERROR: Tools/Scripts/webkitpy/webdriver_benchmark_runner/browser_driver/osx_chrome_driver.py:35:  expected 2 blank lines, found 1  [pep8/E302] [5]
ERROR: Tools/Scripts/webkitpy/webdriver_benchmark_runner/browser_driver/osx_chrome_driver.py:38:  missing whitespace around operator  [pep8/E225] [5]
ERROR: Tools/Scripts/webkitpy/webdriver_benchmark_runner/browser_driver/osx_firefox_driver.py:19:  missing whitespace around operator  [pep8/E225] [5]
ERROR: Tools/Scripts/webkitpy/webdriver_benchmark_runner/browser_driver/osx_firefox_driver.py:31:  expected 2 blank lines, found 1  [pep8/E302] [5]
ERROR: Tools/Scripts/webkitpy/webdriver_benchmark_runner/browser_driver/osx_firefox_driver.py:34:  missing whitespace around operator  [pep8/E225] [5]
ERROR: Tools/Scripts/webkitpy/webdriver_benchmark_runner/browser_driver/osx_browser_driver.py:20:  [OSXBrowserDriver.prepare_env] No name &apos;CGWarpMouseCursorPosition&apos; in module &apos;Quartz&apos;  [pylint/E0611] [5]
ERROR: Tools/Scripts/webkitpy/webdriver_benchmark_runner/browser_driver/osx_browser_driver.py:46:  [OSXBrowserDriver._screen_size] No name &apos;NSScreen&apos; in module &apos;AppKit&apos;  [pylint/E0611] [5]
Total errors found: 12 in 44 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1324684</commentid>
    <comment_count>3</comment_count>
      <attachid>314327</attachid>
    <who name="">dewei_zhu</who>
    <bug_when>2017-06-30 17:58:19 -0700</bug_when>
    <thetext>Comment on attachment 314327
Patch

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

&gt; Tools/ChangeLog:7
&gt; +

A lot of files are duplicated. We should try to figure out a way to reuse the code from run-benchmark.

&gt; Tools/Scripts/webkitpy/webdriver_benchmark_runner/README.md:1
&gt; +# Benchmark Runner 

Looks like this file need to be updated.

&gt; Tools/Scripts/webkitpy/webdriver_benchmark_runner/benchmark_runner.py:19
&gt; +&apos;&apos;&apos;from selenium import webdriver
&gt; +from selenium.webdriver.chrome.options import Options&apos;&apos;&apos;

We should remove commented code.

&gt; Tools/Scripts/webkitpy/webdriver_benchmark_runner/browser_driver/linux_browser_driver.py:32
&gt; +from selenium import webdriver

Is this used?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1325162</commentid>
    <comment_count>4</comment_count>
      <attachid>314327</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2017-07-03 10:44:08 -0700</bug_when>
    <thetext>Comment on attachment 314327
Patch

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

&gt; Tools/Scripts/webkitpy/webdriver_benchmark_runner/benchmark_runner.py:74
&gt; +            url = &apos;file://&apos; + web_root + &apos;/&apos; + self._plan_name + &apos;/&apos; + test_file

This would look a lot better using a template/format string.

&gt; Tools/Scripts/webkitpy/webdriver_benchmark_runner/browser_driver/osx_safari_driver.py:30
&gt; +        self._launch_driver(build_dir=browser_build_path, app_name=&quot;Safari.app&quot;, url=url, args=[&quot;-HomePage&quot;, &quot;about:blank&quot;, &quot;-WarnAboutFraudulentWebsites&quot;, &quot;0&quot;, &quot;-ExtensionsEnabled&quot;, &quot;0&quot;, &quot;-ShowStatusBar&quot;, &quot;0&quot;, &quot;-NewWindowBehavior&quot;, &quot;1&quot;, &quot;-NewTabBehavior&quot;, &quot;1&quot;], driver=driver)

If these are needed to avoid hangs while running WebDriver tests, you should file a bug against safaridriver. Hangs should never happen during a WebDriver test.

&gt; Tools/Scripts/webkitpy/webdriver_benchmark_runner/browser_driver/osx_safari_driver.py:39
&gt; +    def _maximize_window(cls):

You can do this via WebDriver API. Why is this needed?</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>314327</attachid>
            <date>2017-06-30 17:02:20 -0700</date>
            <delta_ts>2017-06-30 17:06:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-174056-20170630170218.patch</filename>
            <type>text/plain</type>
            <size>890779</size>
            <attacher name="Matthew Stewart">matthew_r_stewart</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE5MDIzCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNzRiYjY5NTA2MjBhZmFhZTQ0OTU3Y2MzZDhmOGMwODRl
ZjA4MTZkNS4uNTZiZDRmOGFjOTVmODFhZWNlOWZhZjIxZmM3YzI0ZTFkYTY2MTI3YyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2
NyBAQAorMjAxNy0wNi0zMCAgTWF0dGhldyBTdGV3YXJ0ICA8bWF0dGhld19yX3N0ZXdhcnRAYXBw
bGUuY29tPgorCisgICAgICAgIFdJUCAtIFJ1bkJlbmNobWFyayBXZWJEcml2ZXIgdGVzdGluZwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0MDU2CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L3dlYmRyaXZlcl9iZW5jaG1hcmtfcnVubmVyL1JFQURNRS5tZDogQWRkZWQuCisg
ICAgICAgICogU2NyaXB0cy93ZWJraXRweS93ZWJkcml2ZXJfYmVuY2htYXJrX3J1bm5lci9fX2lu
aXRfXy5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS93ZWJkcml2ZXJfYmVu
Y2htYXJrX3J1bm5lci9iZW5jaG1hcmtfYnVpbGRlci5weTogQWRkZWQuCisgICAgICAgIChCZW5j
aG1hcmtCdWlsZGVyKToKKyAgICAgICAgKEJlbmNobWFya0J1aWxkZXIuX19pbml0X18pOgorICAg
ICAgICAoQmVuY2htYXJrQnVpbGRlci5fX2VudGVyX18pOgorICAgICAgICAoQmVuY2htYXJrQnVp
bGRlci5fX2V4aXRfXyk6CisgICAgICAgIChCZW5jaG1hcmtCdWlsZGVyLl9ydW5fY3JlYXRlX3Nj
cmlwdCk6CisgICAgICAgIChCZW5jaG1hcmtCdWlsZGVyLl9jb3B5X2JlbmNobWFya190b190ZW1w
X2Rpcik6CisgICAgICAgIChCZW5jaG1hcmtCdWlsZGVyLl9mZXRjaF9yZW1vdGVfYXJjaGl2ZSk6
CisgICAgICAgIChCZW5jaG1hcmtCdWlsZGVyLl9jaGVja291dF93aXRoX3N1YnZlcnNpb24pOgor
ICAgICAgICAoQmVuY2htYXJrQnVpbGRlci5fYXBwbHlfcGF0Y2gpOgorICAgICAgICAoQmVuY2ht
YXJrQnVpbGRlci5fY2xlYW4pOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvd2ViZHJpdmVy
X2JlbmNobWFya19ydW5uZXIvYmVuY2htYXJrX3Jlc3VsdHMucHk6IEFkZGVkLgorICAgICAgICAo
QmVuY2htYXJrUmVzdWx0cyk6CisgICAgICAgIChCZW5jaG1hcmtSZXN1bHRzLl9faW5pdF9fKToK
KyAgICAgICAgKEJlbmNobWFya1Jlc3VsdHMuZm9ybWF0KToKKyAgICAgICAgKEJlbmNobWFya1Jl
c3VsdHMuX2Zvcm1hdF90ZXN0cyk6CisgICAgICAgIChCZW5jaG1hcmtSZXN1bHRzLl9mb3JtYXRf
dmFsdWVzKToKKyAgICAgICAgKEJlbmNobWFya1Jlc3VsdHMuX3VuaXRfZnJvbV9tZXRyaWMpOgor
ICAgICAgICAoQmVuY2htYXJrUmVzdWx0cy5fYWdncmVnYXRlX3Jlc3VsdHMpOgorICAgICAgICAo
QmVuY2htYXJrUmVzdWx0cy5fYWdncmVnYXRlX3Jlc3VsdHNfZm9yX3Rlc3QpOgorICAgICAgICAo
QmVuY2htYXJrUmVzdWx0cy5fZmxhdHRlbl9saXN0KToKKyAgICAgICAgKEJlbmNobWFya1Jlc3Vs
dHMuX3N1YnRlc3RfdmFsdWVzX2J5X2NvbmZpZ19pdGVyYXRpb24pOgorICAgICAgICAoQmVuY2ht
YXJrUmVzdWx0cy5fYWdncmVnYXRlX3ZhbHVlcyk6CisgICAgICAgIChCZW5jaG1hcmtSZXN1bHRz
Ll9saW50X3Jlc3VsdHMpOgorICAgICAgICAoQmVuY2htYXJrUmVzdWx0cy5fbGludF9zdWJ0ZXN0
X3Jlc3VsdHMpOgorICAgICAgICAoQmVuY2htYXJrUmVzdWx0cy5fbGludF9hZ2dyZWdhdG9yX2xp
c3QpOgorICAgICAgICAoQmVuY2htYXJrUmVzdWx0cy5fbGludF9jb25maWd1cmF0aW9uKToKKyAg
ICAgICAgKEJlbmNobWFya1Jlc3VsdHMuX2xpbnRfdmFsdWVzKToKKyAgICAgICAgKEJlbmNobWFy
a1Jlc3VsdHMuX2lzX251bWVyaWMpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvd2ViZHJp
dmVyX2JlbmNobWFya19ydW5uZXIvYmVuY2htYXJrX3Jlc3VsdHNfdW5pdHRlc3QucHk6IEFkZGVk
LgorICAgICAgICAoQmVuY2htYXJrUmVzdWx0c1Rlc3QpOgorICAgICAgICAoQmVuY2htYXJrUmVz
dWx0c1Rlc3QudGVzdF9pbml0KToKKyAgICAgICAgKEJlbmNobWFya1Jlc3VsdHNUZXN0LnRlc3Rf
Zm9ybWF0KToKKyAgICAgICAgKHRlc3RfZm9ybWF0X3ZhbHVlc193aXRoX2xhcmdlX2Vycm9yKToK
KyAgICAgICAgKHRlc3RfZm9ybWF0X3ZhbHVlc193aXRoX3NtYWxsX2Vycm9yKToKKyAgICAgICAg
KHRlc3RfZm9ybWF0X3ZhbHVlc193aXRoX3RpbWUpOgorICAgICAgICAodGVzdF9mb3JtYXRfdmFs
dWVzX3dpdGhfbm9fZXJyb3IpOgorICAgICAgICAodGVzdF9mb3JtYXRfdmFsdWVzX3dpdGhfc21h
bGxfZGlmZmVyZW5jZSk6CisgICAgICAgICh0ZXN0X2FnZ3JlZ2F0ZV9yZXN1bHRzKToKKyAgICAg
ICAgKHRlc3RfYWdncmVnYXRlX3Jlc3VsdHNfd2l0aF9ncm9wdXMpOgorICAgICAgICAodGVzdF9h
Z2dyZWdhdGVfbmVzdGVkX3Jlc3VsdHMpOgorICAgICAgICAodGVzdF9saW50X3Jlc3VsdHMpOgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvd2ViZHJpdmVyX2JlbmNobWFya19ydW5uZXIvYmVu
Y2htYXJrX3J1bm5lci5weTogQWRkZWQuCisgICAgICAgIChCZW5jaG1hcmtSdW5uZXIpOgorICAg
ICAgICAoQmVuY2htYXJrUnVubmVyLl9faW5pdF9fKToKKyAgICAgICAgKEJlbmNobWFya1J1bm5l
ci5fZmluZF9wbGFuX2ZpbGUpOgorICAgICAgICAoQmVuY2htYXJrUnVubmVyLl9nZXRfcmVzdWx0
KToKKyAgICAgICAgKEJlbmNobWFya1J1bm5lci5fcnVuX29uZV90ZXN0KToKKyAgICAgICAgKEJl
bmNobWFya1J1bm5lci5fcnVuX2JlbmNobWFyayk6CisgICAgICAgIChCZW5jaG1hcmtSdW5uZXIu
ZXhlY3V0ZSk6CisgICAgICAgIChCZW5jaG1hcmtSdW5uZXIuX2R1bXApOgorICAgICAgICAoQmVu
Y2htYXJrUnVubmVyLl93cmFwKToKKyAgICAgICAgKEJlbmNobWFya1J1bm5lci5fbWVyZ2UpOgor
ICAgICAgICAoQmVuY2htYXJrUnVubmVyLnNob3dfcmVzdWx0cyk6CisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS93ZWJkcml2ZXJfYmVuY2htYXJrX3J1bm5lci9icm93c2VyX2RyaXZlci9fX2lu
aXRfXy5weTogQWRkZWQuCisgICAgICAgIChicm93c2VyX2RyaXZlcl9sb2FkZXIpOgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvd2ViZHJpdmVyX2JlbmNobWFya19ydW5uZXIvYnJvd3Nlcl9k
cml2ZXIvYnJvd3Nlcl9kcml2ZXIucHk6IEFkZGVkLgorICAgICAgICAoQnJvd3NlckRyaXZlcik6
CisgICAgICAgIChCcm93c2VyRHJpdmVyLnByZXBhcmVfZW52KToKKyAgICAgICAgKEJyb3dzZXJE
cml2ZXIubGF1bmNoX3VybCk6CisgICAgICAgIChCcm93c2VyRHJpdmVyLmFkZF9hZGRpdGlvbmFs
X3Jlc3VsdHMpOgorICAgICAgICAoQnJvd3NlckRyaXZlci5jbG9zZV9icm93c2Vycyk6CisgICAg
ICAgIChCcm93c2VyRHJpdmVyLnJlc3RvcmVfZW52KToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L3dlYmRyaXZlcl9iZW5jaG1hcmtfcnVubmVyL2Jyb3dzZXJfZHJpdmVyL2Jyb3dzZXJfZHJp
dmVyX2ZhY3RvcnkucHk6IEFkZGVkLgorICAgICAgICAoQnJvd3NlckRyaXZlckZhY3RvcnkpOgor
ICAgICAgICAoQnJvd3NlckRyaXZlckZhY3RvcnkuYXZhaWxhYmxlX3BsYXRmb3Jtcyk6CisgICAg
ICAgIChCcm93c2VyRHJpdmVyRmFjdG9yeS5hdmFpbGFibGVfYnJvd3NlcnMpOgorICAgICAgICAo
QnJvd3NlckRyaXZlckZhY3RvcnkuYWRkX2Jyb3dzZXJfZHJpdmVyKToKKyAgICAgICAgKEJyb3dz
ZXJEcml2ZXJGYWN0b3J5LmNyZWF0ZSk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS93ZWJk
cml2ZXJfYmVuY2htYXJrX3J1bm5lci9icm93c2VyX2RyaXZlci9saW51eF9icm93c2VyX2RyaXZl
ci5weTogQWRkZWQuCisgICAgICAgIChMaW51eEJyb3dzZXJEcml2ZXIpOgorICAgICAgICAoTGlu
dXhCcm93c2VyRHJpdmVyLl9faW5pdF9fKToKKyAgICAgICAgKExpbnV4QnJvd3NlckRyaXZlci5w
cmVwYXJlX2Vudik6CisgICAgICAgIChMaW51eEJyb3dzZXJEcml2ZXIucmVzdG9yZV9lbnYpOgor
ICAgICAgICAoTGludXhCcm93c2VyRHJpdmVyLmNsb3NlX2Jyb3dzZXJzKToKKyAgICAgICAgKExp
bnV4QnJvd3NlckRyaXZlci5fbGF1bmNoX2RyaXZlcik6CisgICAgICAgIChMaW51eEJyb3dzZXJE
cml2ZXIuX2dldF9maXJzdF9leGVjdXRhYmxlX3BhdGhfZnJvbV9saXN0KToKKyAgICAgICAgKExp
bnV4QnJvd3NlckRyaXZlci5fc2NyZWVuX3NpemUpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvd2ViZHJpdmVyX2JlbmNobWFya19ydW5uZXIvYnJvd3Nlcl9kcml2ZXIvbGludXhfY2hyb21l
X2RyaXZlci5weTogQWRkZWQuCisgICAgICAgIChMaW51eENocm9tZURyaXZlcik6CisgICAgICAg
IChMaW51eENocm9tZURyaXZlci5sYXVuY2hfdXJsKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L3dlYmRyaXZlcl9iZW5jaG1hcmtfcnVubmVyL2Jyb3dzZXJfZHJpdmVyL2xpbnV4X2ZpcmVm
b3hfZHJpdmVyLnB5OiBBZGRlZC4KKyAgICAgICAgKExpbnV4RmlyZWZveERyaXZlcik6CisgICAg
ICAgIChMaW51eEZpcmVmb3hEcml2ZXIubGF1bmNoX3VybCk6CisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS93ZWJkcml2ZXJfYmVuY2htYXJrX3J1bm5lci9icm93c2VyX2RyaXZlci9vc3hfYnJv
d3Nlcl9kcml2ZXIucHk6IEFkZGVkLgorICAgICAgICAoT1NYQnJvd3NlckRyaXZlcik6CisgICAg
ICAgIChPU1hCcm93c2VyRHJpdmVyLnByZXBhcmVfZW52KToKKyAgICAgICAgKE9TWEJyb3dzZXJE
cml2ZXIucmVzdG9yZV9lbnYpOgorICAgICAgICAoT1NYQnJvd3NlckRyaXZlci5jbG9zZV9icm93
c2Vycyk6CisgICAgICAgIChPU1hCcm93c2VyRHJpdmVyLl9sYXVuY2hfZHJpdmVyKToKKyAgICAg
ICAgKE9TWEJyb3dzZXJEcml2ZXIuX3Rlcm1pbmF0ZV9wcm9jZXNzZXMpOgorICAgICAgICAoT1NY
QnJvd3NlckRyaXZlci5fc2NyZWVuX3NpemUpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
d2ViZHJpdmVyX2JlbmNobWFya19ydW5uZXIvYnJvd3Nlcl9kcml2ZXIvb3N4X2Nocm9tZV9kcml2
ZXIucHk6IEFkZGVkLgorICAgICAgICAoT1NYQ2hyb21lRHJpdmVyKToKKyAgICAgICAgKE9TWENo
cm9tZURyaXZlci5sYXVuY2hfdXJsKToKKyAgICAgICAgKE9TWENocm9tZUNhbmFyeURyaXZlcik6
CisgICAgICAgIChPU1hDaHJvbWVDYW5hcnlEcml2ZXIubGF1bmNoX3VybCk6CisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS93ZWJkcml2ZXJfYmVuY2htYXJrX3J1bm5lci9icm93c2VyX2RyaXZl
ci9vc3hfZmlyZWZveF9kcml2ZXIucHk6IEFkZGVkLgorICAgICAgICAoT1NYRmlyZWZveERyaXZl
cik6CisgICAgICAgIChPU1hGaXJlZm94RHJpdmVyLmxhdW5jaF91cmwpOgorICAgICAgICAoT1NY
RmlyZWZveE5pZ2h0bHlEcml2ZXIpOgorICAgICAgICAoT1NYRmlyZWZveE5pZ2h0bHlEcml2ZXIu
bGF1bmNoX3VybCk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS93ZWJkcml2ZXJfYmVuY2ht
YXJrX3J1bm5lci9icm93c2VyX2RyaXZlci9vc3hfc2FmYXJpX2RyaXZlci5weTogQWRkZWQuCisg
ICAgICAgIChPU1hTYWZhcmlEcml2ZXIpOgorICAgICAgICAoT1NYU2FmYXJpRHJpdmVyLnByZXBh
cmVfZW52KToKKyAgICAgICAgKE9TWFNhZmFyaURyaXZlci5sYXVuY2hfdXJsKToKKyAgICAgICAg
KE9TWFNhZmFyaURyaXZlci5jbG9zZV9icm93c2Vycyk6CisgICAgICAgIChPU1hTYWZhcmlEcml2
ZXIuX21heGltaXplX3dpbmRvdyk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS93ZWJkcml2
ZXJfYmVuY2htYXJrX3J1bm5lci9kYXRhL3BhdGNoZXMvQVJFUy02LXdkLnBhdGNoOiBBZGRlZC4K
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3dlYmRyaXZlcl9iZW5jaG1hcmtfcnVubmVyL2Rh
dGEvcGF0Y2hlcy9Db250ZW50QW5pbWF0aW9uLXdkLnBhdGNoOiBBZGRlZC4KKyAgICAgICAgKiBT
Y3JpcHRzL3dlYmtpdHB5L3dlYmRyaXZlcl9iZW5jaG1hcmtfcnVubmVyL2RhdGEvcGF0Y2hlcy9E
cm9tYWVvLXdkLnBhdGNoOiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3dlYmRy
aXZlcl9iZW5jaG1hcmtfcnVubmVyL2RhdGEvcGF0Y2hlcy9KU0JlbmNoLXdkLnBhdGNoOiBBZGRl
ZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3dlYmRyaXZlcl9iZW5jaG1hcmtfcnVubmVy
L2RhdGEvcGF0Y2hlcy9KZXRTdHJlYW0td2QucGF0Y2g6IEFkZGVkLgorICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvd2ViZHJpdmVyX2JlbmNobWFya19ydW5uZXIvZGF0YS9wYXRjaGVzL0tyYWtl
bi13ZC5wYXRjaDogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS93ZWJkcml2ZXJf
YmVuY2htYXJrX3J1bm5lci9kYXRhL3BhdGNoZXMvTW90aW9uTWFyay13ZC5wYXRjaDogQWRkZWQu
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS93ZWJkcml2ZXJfYmVuY2htYXJrX3J1bm5lci9k
YXRhL3BhdGNoZXMvT2N0YW5lLXdkLnBhdGNoOiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L3dlYmRyaXZlcl9iZW5jaG1hcmtfcnVubmVyL2RhdGEvcGF0Y2hlcy9TcGVlZG9tZXRl
ci13ZC5wYXRjaDogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS93ZWJkcml2ZXJf
YmVuY2htYXJrX3J1bm5lci9kYXRhL3BhdGNoZXMvU3VuU3BpZGVyLXdkLnBhdGNoOiBBZGRlZC4K
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3dlYmRyaXZlcl9iZW5jaG1hcmtfcnVubmVyL2Rh
dGEvcGxhbnMvU2tpcHBlZDogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS93ZWJk
cml2ZXJfYmVuY2htYXJrX3J1bm5lci9kYXRhL3BsYW5zL2FyZXM2LXdkLnBsYW46IEFkZGVkLgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvd2ViZHJpdmVyX2JlbmNobWFya19ydW5uZXIvZGF0
YS9wbGFucy9jb250ZW50LWFuaW1hdGlvbi13ZC5wbGFuOiBBZGRlZC4KKyAgICAgICAgKiBTY3Jp
cHRzL3dlYmtpdHB5L3dlYmRyaXZlcl9iZW5jaG1hcmtfcnVubmVyL2RhdGEvcGxhbnMvZHJvbWFl
by1jc3NxdWVyeS13ZC5wbGFuOiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3dl
YmRyaXZlcl9iZW5jaG1hcmtfcnVubmVyL2RhdGEvcGxhbnMvZHJvbWFlby1kb20td2QucGxhbjog
QWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS93ZWJkcml2ZXJfYmVuY2htYXJrX3J1
bm5lci9kYXRhL3BsYW5zL2Ryb21hZW8tanNsaWItd2QucGxhbjogQWRkZWQuCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS93ZWJkcml2ZXJfYmVuY2htYXJrX3J1bm5lci9kYXRhL3BsYW5zL2pl
dHN0cmVhbS13ZC5wbGFuOiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3dlYmRy
aXZlcl9iZW5jaG1hcmtfcnVubmVyL2RhdGEvcGxhbnMvanNiZW5jaC13ZC5wbGFuOiBBZGRlZC4K
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3dlYmRyaXZlcl9iZW5jaG1hcmtfcnVubmVyL2Rh
dGEvcGxhbnMva3Jha2VuLXdkLnBsYW46IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvd2ViZHJpdmVyX2JlbmNobWFya19ydW5uZXIvZGF0YS9wbGFucy9tb3Rpb25tYXJrLXdkLnBs
YW46IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvd2ViZHJpdmVyX2JlbmNobWFy
a19ydW5uZXIvZGF0YS9wbGFucy9vY3RhbmUtd2QucGxhbjogQWRkZWQuCisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS93ZWJkcml2ZXJfYmVuY2htYXJrX3J1bm5lci9kYXRhL3BsYW5zL3NwZWVk
b21ldGVyLXdkLnBsYW46IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvd2ViZHJp
dmVyX2JlbmNobWFya19ydW5uZXIvZGF0YS9wbGFucy9zdW5zcGlkZXItd2QucGxhbjogQWRkZWQu
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS93ZWJkcml2ZXJfYmVuY2htYXJrX3J1bm5lci9n
ZW5lcmljX2ZhY3RvcnkucHk6IEFkZGVkLgorICAgICAgICAoR2VuZXJpY0ZhY3RvcnkpOgorICAg
ICAgICAoR2VuZXJpY0ZhY3RvcnkuY3JlYXRlKToKKyAgICAgICAgKEdlbmVyaWNGYWN0b3J5LmFk
ZCk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS93ZWJkcml2ZXJfYmVuY2htYXJrX3J1bm5l
ci9ydW5fYmVuY2htYXJrLnB5OiBBZGRlZC4KKyAgICAgICAgKGRlZmF1bHRfcGxhdGZvcm0pOgor
ICAgICAgICAoZGVmYXVsdF9icm93c2VyKToKKyAgICAgICAgKHBhcnNlX2FyZ3MpOgorICAgICAg
ICAoc3RhcnQpOgorICAgICAgICAoZm9ybWF0X2xvZ2dlcik6CisgICAgICAgIChtYWluKToKKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3dlYmRyaXZlcl9iZW5jaG1hcmtfcnVubmVyL3V0aWxz
LnB5OiBBZGRlZC4KKyAgICAgICAgKGlzX3N1YmNsYXNzKToKKyAgICAgICAgKGxvYWRfc3ViY2xh
c3Nlcyk6CisgICAgICAgIChnZXRfcGF0aF9mcm9tX3Byb2plY3Rfcm9vdCk6CisgICAgICAgIChm
b3JjZV9yZW1vdmUpOgorICAgICAgICAod3JpdGVfZGVmYXVsdHMpOgorICAgICAgICAoVGltZW91
dEVycm9yKToKKyAgICAgICAgKHRpbWVvdXQpOgorICAgICAgICAodGltZW91dC5fX2luaXRfXyk6
CisgICAgICAgICh0aW1lb3V0LmhhbmRsZV90aW1lb3V0KToKKyAgICAgICAgKHRpbWVvdXQuX19l
bnRlcl9fKToKKyAgICAgICAgKHRpbWVvdXQuX19leGl0X18pOgorCiAyMDE3LTA2LTMwICBEYW5p
ZWwgQmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4KIAogICAgICAgICBBUEk6OkZyYW1lSW5mbyBz
aG91bGQga25vdyB0aGUgd2ViIHBhZ2UgdGhhdCBjb250YWlucyB0aGUgZnJhbWU7IGFkZCBBUEkg
cHJvcGVydHkgd2ViVmlldyB0byBXS0ZyYW1lSW5mbwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0
cy9ydW4td2ViZHJpdmVyLWJlbmNobWFyayBiL1Rvb2xzL1NjcmlwdHMvcnVuLXdlYmRyaXZlci1i
ZW5jaG1hcmsKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZmY5YzQ1YjEyM2NkYjI4MjExZmNiN2Q2MTNiODY2MzhiMjY3
OTcxYgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvcnVuLXdlYmRyaXZlci1iZW5j
aG1hcmsKQEAgLTAsMCArMSwxMyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKK2ltcG9ydCBs
b2dnaW5nCitpbXBvcnQgc3lzCisKK2Zyb20gd2Via2l0cHkud2ViZHJpdmVyX2JlbmNobWFya19y
dW5uZXIucnVuX2JlbmNobWFyayBpbXBvcnQgbWFpbiwgZm9ybWF0X2xvZ2dlcgorCisKK19sb2cg
PSBsb2dnaW5nLmdldExvZ2dlcigpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAg
Zm9ybWF0X2xvZ2dlcihfbG9nKQorICAgIHN5cy5leGl0KG1haW4oKSkKZGlmZiAtLWdpdCBhL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvd2ViZHJpdmVyX2JlbmNobWFya19ydW5uZXIvUkVBRE1FLm1k
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS93ZWJkcml2ZXJfYmVuY2htYXJrX3J1bm5lci9SRUFE
TUUubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNzgxMGM5ODA4NzdjMTRkZGZlNTY5NDAwN2RiMmFkNGQyNGM2N2Iy
NAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvd2ViZHJpdmVyX2Jl
bmNobWFya19ydW5uZXIvUkVBRE1FLm1kCkBAIC0wLDAgKzEsMTE1IEBACisjIEJlbmNobWFyayBS
dW5uZXIgCitUaGlzIGlzIGEgc2NyaXB0IGZvciBhdXRvbWF0aW5nIHRoZSBicm93c2VyIGJhc2Vk
IGJlbmNobWFya3MoZS5nLiBTcGVlZG9tZXRlciwgSmV0U3RyZWFtKQorIyMgUHJvamVjdCBTdHJ1
Y3R1cmUKK2BgYAorYmVuY2htYXJrX3J1bm5lcgor4pSc4pSA4pSAIFJFQURNRS5tZAor4pSc4pSA
4pSAIF9faW5pdF9fLnB5CivilJzilIDilIAgYmVuY2htYXJrX2J1aWxkZXIucHkKK+KUnOKUgOKU
gCBiZW5jaG1hcmtfcmVzdWx0cy5weQor4pSc4pSA4pSAIGJlbmNobWFya19yZXN1bHRzX3VuaXR0
ZXN0LnB5CivilJzilIDilIAgYmVuY2htYXJrX3J1bm5lci5weQor4pSc4pSA4pSAIGJyb3dzZXJf
ZHJpdmVyCivilILCoMKgIOKUnOKUgOKUgCBfX2luaXRfXy5weQor4pSCwqDCoCDilJzilIDilIAg
YnJvd3Nlcl9kcml2ZXIucHkKK+KUgsKgwqAg4pSc4pSA4pSAIGJyb3dzZXJfZHJpdmVyX2ZhY3Rv
cnkucHkKK+KUgsKgwqAg4pSc4pSA4pSAIG9zeF9icm93c2VyX2RyaXZlci5weQor4pSCwqDCoCDi
lJzilIDilIAgb3N4X2Nocm9tZV9kcml2ZXIucHkKK+KUgsKgwqAg4pSc4pSA4pSAIG9zeF9maXJl
Zm94X2RyaXZlci5weQor4pSCwqDCoCDilJTilIDilIAgb3N4X3NhZmFyaV9kcml2ZXIucHkKK+KU
nOKUgOKUgCBkYXRhCivilILCoMKgIOKUnOKUgOKUgCBwYXRjaGVzCivilILCoMKgIOKUgsKgwqAg
4pSc4pSA4pSAIERyb21hZW8ucGF0Y2gKK+KUgsKgwqAg4pSCwqDCoCDilJzilIDilIAgSlNCZW5j
aC5wYXRjaAor4pSCwqDCoCDilILCoMKgIOKUnOKUgOKUgCBKZXRTdHJlYW0ucGF0Y2gKK+KUgsKg
wqAg4pSCwqDCoCDilJzilIDilIAgS3Jha2VuLnBhdGNoCivilILCoMKgIOKUgsKgwqAg4pSc4pSA
4pSAIE9jdGFuZS5wYXRjaAor4pSCwqDCoCDilILCoMKgIOKUnOKUgOKUgCBTcGVlZG9tZXRlci5w
YXRjaAor4pSCwqDCoCDilILCoMKgIOKUlOKUgOKUgCBTdW5TcGlkZXIucGF0Y2gKK+KUgsKgwqAg
4pSU4pSA4pSAIHBsYW5zCivilILCoMKgICAgICDilJzilIDilIAgZHJvbWFlby1jc3NxdWVyeS5w
bGFuCivilILCoMKgICAgICDilJzilIDilIAgZHJvbWFlby1kb20ucGxhbgor4pSCwqDCoCAgICAg
4pSc4pSA4pSAIGRyb21hZW8tanNsaWIucGxhbgor4pSCwqDCoCAgICAg4pSc4pSA4pSAIGpldHN0
cmVhbS5wbGFuCivilILCoMKgICAgICDilJzilIDilIAganNiZW5jaC5wbGFuCivilILCoMKgICAg
ICDilJzilIDilIAga3Jha2VuLnBsYW4KK+KUgsKgwqAgICAgIOKUnOKUgOKUgCBvY3RhbmUucGxh
bgor4pSCwqDCoCAgICAg4pSc4pSA4pSAIHNwZWVkb21ldGVyLnBsYW4KK+KUgsKgwqAgICAgIOKU
lOKUgOKUgCBzdW5zcGlkZXIucGxhbgor4pSc4pSA4pSAIGdlbmVyaWNfZmFjdG9yeS5weQor4pSc
4pSA4pSAIGh0dHBfc2VydmVyX2RyaXZlcgor4pSCwqDCoCDilJzilIDilIAgX19pbml0X18ucHkK
K+KUgsKgwqAg4pSc4pSA4pSAIGh0dHBfc2VydmVyCivilILCoMKgIOKUgsKgwqAg4pSU4pSA4pSA
IHR3aXN0ZWRfaHR0cF9zZXJ2ZXIucHkKK+KUgsKgwqAg4pSc4pSA4pSAIGh0dHBfc2VydmVyX2Ry
aXZlci5weQor4pSCwqDCoCDilJzilIDilIAgaHR0cF9zZXJ2ZXJfZHJpdmVyX2ZhY3RvcnkucHkK
K+KUgsKgwqAg4pSU4pSA4pSAIHNpbXBsZV9odHRwX3NlcnZlcl9kcml2ZXIucHkKK+KUnOKUgOKU
gCBydW5fYmVuY2htYXJrLnB5CivilJTilIDilIAgdXRpbHMucHkKK2BgYAorIyMgUmVxdWlyZW1l
bnRzCisqIHB5dGhvbiBtb2R1bGVzOgorICAgICogUHlPYmpjCisgICAgKiBwc3V0aWxzIChvcHRp
b25hbCkKKworIyMgSE9XIFRPcworIyMjIEhvdyB0byBydW4KK2BgYHNoZWxsCisgICAgcHl0aG9u
IHBhdGgvdG8vcnVuLWJlbmNobWFyayAtLWJ1aWxkLWRpcmVjdG9yeSBwYXRoL3RvL2Jyb3dzZXIv
ZGlyZWN0b3J5IC0tcGxhbiBqc29uX2Zvcm1hdF9wbGFuIC0tcGxhdGZvcm0gdGFyZ2V0X3BsYXRm
b3JtIC0tYnJvd3NlciB0YXJnZXRfYnJvd3NlcgorYGBgCisqICoqcGF0aC90by9icm93c2VyL2Rp
cmVjdG9yeSoqOiBzaG91bGQgYmUgdGhlIGZvbGRlciBjb250YWluaW5nIHRoZSBleGVjdXRhYmxl
IGJpbmFyeShlLmcuIC9BcHBsaWNhdGlvbi8gb24gT1NYIHdoaWNoIGNvbnRhaW5zIFNhZmFyaS5h
cHApCisqICoqanNvbl9mb3JtYXRfcGxhbioqOiB0aGUgYmVuY2htYXJrIHBsYW4geW91IHdhbnQg
dG8gZXhlY3V0ZSAgCisKKyMjIyBIb3cgdG8gY3JlYXRlIGEgcGxhbgorVG8gY3JlYXRlIGEgcGxh
biwgeW91IG1heSByZWZlciB0byBQbGFucy9qZXRzdHJlYW0ucGxhbi4KK2BgYGpzb24gCit7Cisg
ICAgInRpbWVvdXQiIDogNjAwLAorICAgICJjb3VudCI6IDUsCisgICAgImxvY2FsX2NvcHkiOiAi
Li4vLi4vLi4vLi4vUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0iLAorICAgICJiZW5jaG1hcmtf
cGF0Y2giOiAiZGF0YS9wYXRjaGVzL0pldFN0cmVhbS5wYXRjaCIsCisgICAgImVudHJ5X3BvaW50
IjogIkpldFN0cmVhbS9KZXRTdHJlYW0tMS4wLjEvaW5kZXguaHRtbCIsCisgICAgImNvbmZpZyI6
IHsKKyAgICAgICAgIm9yaWVudGF0aW9uIjogInBvcnRyYWl0IgorICAgIH0sCisgICAgIm91dHB1
dF9maWxlIjogImpldHN0cmVhbS5yZXN1bHQiCit9CitgYGAKK1BsYW4gaXMgYSBqc29uLWZvcm1h
dHRlZCBkaWN0aW9uYXJ5IHdoaWNoIGNvbnRhaW5zIGZvbGxvd2luZyBrZXlzIAorKiAqKnRpbWVv
dXQqKjogdGltZSBsaW1pdCBmb3IgKipFQUNIIFJVTioqIG9mIHRoZSBiZW5jaG1hcmsuIFRoaXMg
Y2FuIGF2b2lkIHByb2dyYW0gZ2V0dGluZyBzdHVjayBpbiB0aGUgZXh0cmVtZSBjaXJjdW1zdGFu
Y2VzLiBUaGUgdGltZSBsaW1pdCBpcyBzdWdnZXN0ZWQgdG8gYmUgMS41LTJ4IHRoZSB0aW1lIHNw
ZW50IGluIGEgbm9ybWFsIHJ1bi4KKyogKipjb3VudCoqOiB0aGUgbnVtYmVyIG9mIHRpbWVzIHlv
dSB3YW50IHRvIHJ1biBiZW5jaG1hcmsKKyogKipsb2NhbF9jb3B5Kio6ICgqKk9QVElPTkFMKiop
IFBhdGggb2YgYmVuY2htYXJrLCBhIHJlbGF0aXZlIHBhdGggdG8gdGhlIHJvb3Qgb2YgdGhpcyBw
cm9qZWN0ICgnYmVuY2htYXJrX3J1bm5lcicgZGlyZWN0b3J5KQorKiAqKnJlbW90ZV9hcmNoaXZl
Kio6ICgqKk9QVElPTkFMKiopIFVSTCBvZiB0aGUgcmVtb3RlIChodHRwL2h0dHBzKSBaSVAgZmls
ZSB0aGF0IGNvbnRhaW5zIHRoZSBiZW5jaG1hcmsuCisqICoqYmVuY2htYXJrX3BhdGgqKjogKCoq
T1BUSU9OQUwqKikgcGF0aCBvZiBwYXRjaCwgYSByZWxhdGl2ZSBwYXRoIHRvIHRoZSByb290IG9m
IHRoaXMgcHJvamVjdCAoJ2JlbmNobWFya19ydW5uZXInIGRpcmVjdG9yeSkKKyogKiplbnRyeV9w
b2ludCoqOiB0aGUgcmVsYXRpdmUgdXJsIHlvdSB3YW50IGJyb3dzZXIgdG8gbGF1bmNoIChhIHJl
bGF0aXZlIHBhdGggdG8gdGhlIGJlbmNobWFyayBkaXJlY3RvcnkpCisqICoqY29uZmlnKio6IGEg
ZGljdGlvbmFyeSB0aGF0IHNwZWNpZmllcyB0aGUgZW52aXJvbm1lbnQgY29uZmlndXJhdGlvbnMg
Zm9yIHRoZSB0ZXN0IChlLmcuIG9yaWVudGF0aW9uIHdoaWxlIHRoZSB0ZXN0IGlzIHJ1bm5pbmcp
CisqICoqb3V0cHV0X2ZpbGUqKjogc3BlY2lmeSB0aGUgb3V0cHV0IGZpbGUsIHRoaXMgY2FuIGJl
IG92ZXJ3cml0dGVuIGJ5IHNwZWNpZnlpbmcgJy0tb3V0cHV0LWZpbGUnIHdoaWxlIGludm9raW5n
IHJ1bi1iZW5jaG1hcmsgc2NyaXB0CisKKyMjIyBIb3cgdG8gaW1wb3J0IGEgYmVuY2htYXJrCisq
IE1vZGlmeSB0aGUgYmVuY2htYXJrIGh0bWwgZmlsZSwgbWFrZSBzdXJlIHRoZSBwYWdlIGhhcyBm
b2xsb3dpbmcgZnVuY3Rpb25hbGl0aWVzOgorICAgICogV2hlbiB5b3UgbGF1bmNoIHRoZSBwYWdl
KCdlbnRyeV9wb2ludCcgaW4gYmVuY2htYXJrKSwgdGhlIHRlc3Qgd2lsbCBzdGFydCBhdXRvbWF0
aWNhbGx5CisgICAgKiBPcmdhbml6aW5nIHRoZSByZXN1bHRzCisgICAgKiAnUE9TVCcgaW5mb3Jt
YXRpb24gdG8gJy9yZXBvcnQnLCBhbmQgJ0dFVCcgJy9zaHV0ZG93bicgd2hlbiBwb3N0IHN1Y2Nl
ZWRzLiBFeGFtcGxlOgorICAgICogYGBganMKKyAgICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJl
cXVlc3QoKTsKKyAgICAgIHhoci5vcGVuKCJQT1NUIiwgIi9yZXBvcnQiKTsKKyAgICAgIHhoci5z
ZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LXR5cGUiLCAiYXBwbGljYXRpb24vanNvbiIpOworICAg
ICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtbGVuZ3RoIiwgcmVzdWx0cy5sZW5ndGgp
OworICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoIkNvbm5lY3Rpb24iLCAiY2xvc2UiKTsKKyAg
ICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICBpZih4
aHIucmVhZHlTdGF0ZSA9PSA0ICYmIHhoci5zdGF0dXMgPT0gMjAwKSB7CisgICAgICAgICAgICAg
IHZhciBjbG9zZVJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKyAgICAgICAgICAgICAg
Y2xvc2VSZXF1ZXN0Lm9wZW4oIkdFVCIsICcvc2h1dGRvd24nKTsKKyAgICAgICAgICAgICAgY2xv
c2VSZXF1ZXN0LnNlbmQoKQorICAgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIHhoci5zZW5kKHJl
c3VsdHMpOworYGBgIAorKiBDcmVhdGUgYSBwYXRjaCBmaWxlIGFnYWluc3Qgb3JpZ2luYWwgZmls
ZQorICAgICogR28gdG8gdGhlIGRpcmVjdG9yeSBjb250YWlucyB0aGUgYmVuY2htYXJrIGRpcmVj
dG9yeSAoZS5nLiBmb3IgSmV0U3RyZWFtLCB5b3Ugc2hvdWxkIGdvIHRvIFBlcmZvcm1hY2VUZXN0
IGZvbGRlcikKKyAgICAqIFVzZSBgYGBnaXQgZGlmZiAtLXJlbGF0aXZlIEhFQUQgPiB5b3VyLnBh
dGNoYGBgIHRvIGNyZWF0ZSB5b3VyIHBhdGNoCisgICAgKiAoKipTdWdnZXN0ZWQqKikgbW92ZSB0
aGUgcGF0Y2ggdG8gdGhlICdQYXRjaGVzJyBkaXJlY3RvcnkgdW5kZXIgcHJvamVjdCBkaXJlY3Rv
cnkKKyogQ3JlYXRlIGEgcGxhbiBmb3IgdGhlIGJlbmNobWFyayAocmVmZXIgdG8gKioiSG93IHRv
IGNyZWF0ZSBhIHBsYW4iKiogZm9yIG1vcmUgZGV0YWlscykKKyogRG8gZm9sbG93aW5nIGluc3Ry
dWN0aW9uICoqT05MWSBJRiBORUVERUQqKi4gSW4gbW9zdCBjYXNlLCB5b3UgZG8gbm90IGhhdmUg
dG8uCisgICAgKiBJZiB5b3Ugd2FudCB0byBjdXN0b21pemUgQnJvd3NlckRyaXZlciBmb3Igc3Bl
Y2lmaWMgYnJvd3Nlci9wbGF0Zm9ybSwgeW91IG5lZWQgdG8gZXh0ZW5kIGJyb3dzZXJfZHJpdmVy
L2Jyb3dzZXJfZHJpdmVyLnB5IGFuZCByZWdpc3RlciB5b3VyIG1vZHVsZSBpbiBicm93c2VyX2Ry
aXZlci9icm93c2VyX2RyaXZlcnNqc29uLgorICAgICogSWYgeW91IHdhbnQgdG8gY3VzdG9taXpl
IEhUVFBTZXJ2ZXJEcml2ZXIsIHlvdSBuZWVkIHRvIGV4dGVuZCBodHRwX3NlcnZlcl9kcmlydmVy
L2h0dHBfc2VydmVyX2RyaXZlciBhbmQgcmVnaXN0ZXIgeW91ciBtb2R1bGUgaW4gaHR0cF9zZXJ2
ZXJfZHJpdmVyL2h0dHBfc2VydmVyX2RyaXZlcnMuanNvbi4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvd2ViZHJpdmVyX2JlbmNobWFya19ydW5uZXIvX19pbml0X18ucHkgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L3dlYmRyaXZlcl9iZW5jaG1hcmtfcnVubmVyL19faW5pdF9f
LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmIzNzZiZjJiZWEyYjZhZjVjZTc5ZDNlM2QzM2M3M2FkZWM0MzRmMTgK
LS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3dlYmRyaXZlcl9iZW5j
aG1hcmtfcnVubmVyL19faW5pdF9fLnB5CkBAIC0wLDAgKzEsMTMgQEAKKyMgUmVxdWlyZWQgZm9y
IFB5dGhvbiB0byBzZWFyY2ggdGhpcyBkaXJlY3RvcnkgZm9yIG1vZHVsZSBmaWxlcworCisjIEtl
ZXAgdGhpcyBmaWxlIGZyZWUgb2YgYW55IGNvZGUgb3IgaW1wb3J0IHN0YXRlbWVudHMgdGhhdCBj
b3VsZAorIyBjYXVzZSBlaXRoZXIgYW4gZXJyb3IgdG8gb2NjdXIgb3IgYSBsb2cgbWVzc2FnZSB0
byBiZSBsb2dnZWQuCisjIFRoaXMgZW5zdXJlcyB0aGF0IGNhbGxpbmcgY29kZSBjYW4gaW1wb3J0
IGluaXRpYWxpemF0aW9uIGNvZGUgZnJvbQorIyB3ZWJraXRweSBiZWZvcmUgYW55IGVycm9ycyBv
ciBsb2cgbWVzc2FnZXMgZHVlIHRvIGNvZGUgaW4gdGhpcyBmaWxlLgorIyBJbml0aWFsaXphdGlv
biBjb2RlIGNhbiBpbmNsdWRlIHRoaW5ncyBsaWtlIHZlcnNpb24tY2hlY2tpbmcgY29kZSBhbmQK
KyMgbG9nZ2luZyBjb25maWd1cmF0aW9uIGNvZGUuCisjCisjIFdlIGRvIG5vdCBleGVjdXRlIGFu
eSB2ZXJzaW9uLWNoZWNraW5nIGNvZGUgb3IgbG9nZ2luZyBjb25maWd1cmF0aW9uCisjIGNvZGUg
aW4gdGhpcyBmaWxlIHNvIHRoYXQgY2FsbGVycyBjYW4gb3B0LWluIGFzIHRoZXkgd2FudC4gIFRo
aXMgYWxzbworIyBhbGxvd3MgZGlmZmVyZW50IGNhbGxlcnMgdG8gY2hvb3NlIGRpZmZlcmVudCBp
bml0aWFsaXphdGlvbiBjb2RlLAorIyBhcyBuZWNlc3NhcnkuCmRpZmYgLS1naXQgYS9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L3dlYmRyaXZlcl9iZW5jaG1hcmtfcnVubmVyL2JlbmNobWFya19idWls
ZGVyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS93ZWJkcml2ZXJfYmVuY2htYXJrX3J1bm5l
ci9iZW5jaG1hcmtfYnVpbGRlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ODQ1MTEzYjgwMjU0MDc0MjkzNDYx
YjVhYzg3NmY0MTBhNjI5YWRiCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS93ZWJkcml2ZXJfYmVuY2htYXJrX3J1bm5lci9iZW5jaG1hcmtfYnVpbGRlci5weQpAQCAt
MCwwICsxLDEwNCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKK2ltcG9ydCBsb2dnaW5nCitp
bXBvcnQgdGVtcGZpbGUKK2ltcG9ydCBvcworaW1wb3J0IHVybGxpYgoraW1wb3J0IHNodXRpbAor
aW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCB0YXJmaWxlCisKK2Zyb20gemlwZmlsZSBpbXBvcnQg
WmlwRmlsZQorZnJvbSB3ZWJraXRweS53ZWJkcml2ZXJfYmVuY2htYXJrX3J1bm5lci51dGlscyBp
bXBvcnQgZ2V0X3BhdGhfZnJvbV9wcm9qZWN0X3Jvb3QsIGZvcmNlX3JlbW92ZQorCisKK19sb2cg
PSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKKworCitjbGFzcyBCZW5jaG1hcmtCdWlsZGVy
KG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIHBsYW4pOgorICAgICAgICBz
ZWxmLl9uYW1lID0gbmFtZQorICAgICAgICBzZWxmLl9wbGFuID0gcGxhbgorCisgICAgZGVmIF9f
ZW50ZXJfXyhzZWxmKToKKyAgICAgICAgc2VsZi5fd2ViX3Jvb3QgPSB0ZW1wZmlsZS5ta2R0ZW1w
KCkKKyAgICAgICAgc2VsZi5fZGVzdCA9IG9zLnBhdGguam9pbihzZWxmLl93ZWJfcm9vdCwgc2Vs
Zi5fbmFtZSkKKyAgICAgICAgaWYgJ2xvY2FsX2NvcHknIGluIHNlbGYuX3BsYW46CisgICAgICAg
ICAgICBzZWxmLl9jb3B5X2JlbmNobWFya190b190ZW1wX2RpcihzZWxmLl9wbGFuWydsb2NhbF9j
b3B5J10pCisgICAgICAgIGVsaWYgJ3JlbW90ZV9hcmNoaXZlJyBpbiBzZWxmLl9wbGFuOgorICAg
ICAgICAgICAgc2VsZi5fZmV0Y2hfcmVtb3RlX2FyY2hpdmUoc2VsZi5fcGxhblsncmVtb3RlX2Fy
Y2hpdmUnXSkKKyAgICAgICAgZWxpZiAnc3ZuX3NvdXJjZScgaW4gc2VsZi5fcGxhbjoKKyAgICAg
ICAgICAgIHNlbGYuX2NoZWNrb3V0X3dpdGhfc3VidmVyc2lvbihzZWxmLl9wbGFuWydzdm5fc291
cmNlJ10pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ1RoZSBi
ZW5jaG1hcmsgbG9jYXRpb24gd2FzIG5vdCBzcGVjaWZpZWQnKQorCisgICAgICAgIF9sb2cuaW5m
bygnQ29waWVkIHRoZSBiZW5jaG1hcmsgaW50bzogJXMnICUgc2VsZi5fZGVzdCkKKyAgICAgICAg
dHJ5OgorICAgICAgICAgICAgaWYgJ2NyZWF0ZV9zY3JpcHQnIGluIHNlbGYuX3BsYW46CisgICAg
ICAgICAgICAgICAgc2VsZi5fcnVuX2NyZWF0ZV9zY3JpcHQoc2VsZi5fcGxhblsnY3JlYXRlX3Nj
cmlwdCddKQorICAgICAgICAgICAgaWYgJ2JlbmNobWFya19wYXRjaCcgaW4gc2VsZi5fcGxhbjoK
KyAgICAgICAgICAgICAgICBzZWxmLl9hcHBseV9wYXRjaChzZWxmLl9wbGFuWydiZW5jaG1hcmtf
cGF0Y2gnXSkKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl93ZWJfcm9vdAorICAgICAgICBleGNl
cHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgc2VsZi5fY2xlYW4oKQorICAgICAgICAgICAgcmFp
c2UKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCBleGNfdHlwZSwgZXhjX3ZhbHVlLCB0cmFjZWJh
Y2spOgorICAgICAgICBzZWxmLl9jbGVhbigpCisKKyAgICBkZWYgX3J1bl9jcmVhdGVfc2NyaXB0
KHNlbGYsIGNyZWF0ZV9zY3JpcHQpOgorICAgICAgICBvbGRfd29ya2luZ19kaXJlY3RvcnkgPSBv
cy5nZXRjd2QoKQorICAgICAgICBvcy5jaGRpcihzZWxmLl9kZXN0KQorICAgICAgICBfbG9nLmRl
YnVnKCdSdW5uaW5nICVzIGluICVzJyAlIChjcmVhdGVfc2NyaXB0LCBzZWxmLl9kZXN0KSkKKyAg
ICAgICAgZXJyb3JfY29kZSA9IHN1YnByb2Nlc3MuY2FsbChjcmVhdGVfc2NyaXB0KQorICAgICAg
ICBvcy5jaGRpcihvbGRfd29ya2luZ19kaXJlY3RvcnkpCisgICAgICAgIGlmIGVycm9yX2NvZGU6
CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ0Nhbm5vdCBjcmVhdGUgdGhlIGJlbmNobWFy
ayAtIEVycm9yOiAlcycgJSBlcnJvcl9jb2RlKQorCisgICAgZGVmIF9jb3B5X2JlbmNobWFya190
b190ZW1wX2RpcihzZWxmLCBiZW5jaG1hcmtfcGF0aCk6CisgICAgICAgIHNodXRpbC5jb3B5dHJl
ZShnZXRfcGF0aF9mcm9tX3Byb2plY3Rfcm9vdChiZW5jaG1hcmtfcGF0aCksIHNlbGYuX2Rlc3Qp
CisKKyAgICBkZWYgX2ZldGNoX3JlbW90ZV9hcmNoaXZlKHNlbGYsIGFyY2hpdmVfdXJsKToKKyAg
ICAgICAgaWYgYXJjaGl2ZV91cmwuZW5kc3dpdGgoJy56aXAnKToKKyAgICAgICAgICAgIGFyY2hp
dmVfdHlwZSA9ICd6aXAnCisgICAgICAgIGVsaWYgYXJjaGl2ZV91cmwuZW5kc3dpdGgoJ3Rhci5n
eicpOgorICAgICAgICAgICAgYXJjaGl2ZV90eXBlID0gJ3Rhci5neicKKyAgICAgICAgZWxzZToK
KyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignQ291bGQgbm90IGluZmVyIHRoZSBmaWxlIGV4
dGVudGlvbiBmcm9tIFVSTDogJXMnICUgYXJjaGl2ZV91cmwpCisKKyAgICAgICAgYXJjaGl2ZV9w
YXRoID0gb3MucGF0aC5qb2luKHNlbGYuX3dlYl9yb290LCAnYXJjaGl2ZS4nICsgYXJjaGl2ZV90
eXBlKQorICAgICAgICBfbG9nLmluZm8oJ0Rvd25sb2FkaW5nICVzIHRvICVzJyAlIChhcmNoaXZl
X3VybCwgYXJjaGl2ZV9wYXRoKSkKKyAgICAgICAgdXJsbGliLnVybHJldHJpZXZlKGFyY2hpdmVf
dXJsLCBhcmNoaXZlX3BhdGgpCisKKyAgICAgICAgaWYgYXJjaGl2ZV90eXBlID09ICd6aXAnOgor
ICAgICAgICAgICAgd2l0aCBaaXBGaWxlKGFyY2hpdmVfcGF0aCwgJ3InKSBhcyBhcmNoaXZlOgor
ICAgICAgICAgICAgICAgIGFyY2hpdmUuZXh0cmFjdGFsbChzZWxmLl9kZXN0KQorICAgICAgICBl
bGlmIGFyY2hpdmVfdHlwZSA9PSAndGFyLmd6JzoKKyAgICAgICAgICAgIHdpdGggdGFyZmlsZS5v
cGVuKGFyY2hpdmVfcGF0aCwgJ3I6Z3onKSBhcyBhcmNoaXZlOgorICAgICAgICAgICAgICAgIGFy
Y2hpdmUuZXh0cmFjdGFsbChzZWxmLl9kZXN0KQorCisgICAgICAgIHVuYXJjaGl2ZWRfZmlsZXMg
PSBmaWx0ZXIobGFtYmRhIG5hbWU6IG5vdCBuYW1lLnN0YXJ0c3dpdGgoJy4nKSwgb3MubGlzdGRp
cihzZWxmLl9kZXN0KSkKKyAgICAgICAgaWYgbGVuKHVuYXJjaGl2ZWRfZmlsZXMpID09IDE6Cisg
ICAgICAgICAgICBmaXJzdF9maWxlID0gb3MucGF0aC5qb2luKHNlbGYuX2Rlc3QsIHVuYXJjaGl2
ZWRfZmlsZXNbMF0pCisgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGZpcnN0X2ZpbGUpOgor
ICAgICAgICAgICAgICAgIHNodXRpbC5tb3ZlKGZpcnN0X2ZpbGUsIHNlbGYuX3dlYl9yb290KQor
ICAgICAgICAgICAgICAgIG9zLnJlbmFtZShvcy5wYXRoLmpvaW4oc2VsZi5fd2ViX3Jvb3QsIHVu
YXJjaGl2ZWRfZmlsZXNbMF0pLCBzZWxmLl9kZXN0KQorCisgICAgZGVmIF9jaGVja291dF93aXRo
X3N1YnZlcnNpb24oc2VsZiwgc3VidmVyc2lvbl91cmwpOgorICAgICAgICBfbG9nLmluZm8oJ0No
ZWNraW5nIG91dCAlcyB0byAlcycgJSAoc3VidmVyc2lvbl91cmwsIHNlbGYuX2Rlc3QpKQorICAg
ICAgICBlcnJvcl9jb2RlID0gc3VicHJvY2Vzcy5jYWxsKFsnc3ZuJywgJ2NoZWNrb3V0JywgJy0t
cXVpZXQnLCAnLS10cnVzdC1zZXJ2ZXItY2VydCcsICctLW5vbi1pbnRlcmFjdGl2ZScsIHN1YnZl
cnNpb25fdXJsLCBzZWxmLl9kZXN0XSkKKyAgICAgICAgaWYgZXJyb3JfY29kZToKKyAgICAgICAg
ICAgIHJhaXNlIEV4Y2VwdGlvbignQ2Fubm90IGNoZWNrb3V0IHRoZSBiZW5jaG1hcmsgLSBFcnJv
cjogJXMnICUgZXJyb3JfY29kZSkKKworICAgIGRlZiBfYXBwbHlfcGF0Y2goc2VsZiwgcGF0Y2gp
OgorICAgICAgICBvbGRfd29ya2luZ19kaXJlY3RvcnkgPSBvcy5nZXRjd2QoKQorICAgICAgICBv
cy5jaGRpcihzZWxmLl9kZXN0KQorICAgICAgICBlcnJvcl9jb2RlID0gc3VicHJvY2Vzcy5jYWxs
KFsncGF0Y2gnLCAnLXAxJywgJy1mJywgJy1pJywgZ2V0X3BhdGhfZnJvbV9wcm9qZWN0X3Jvb3Qo
cGF0Y2gpXSkKKyAgICAgICAgb3MuY2hkaXIob2xkX3dvcmtpbmdfZGlyZWN0b3J5KQorICAgICAg
ICBpZiBlcnJvcl9jb2RlOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdDYW5ub3QgYXBw
bHkgcGF0Y2gsIHdpbGwgc2tpcCBjdXJyZW50IGJlbmNobWFya19wYXRoIC0gRXJyb3I6ICVzJyAl
IGVycm9yX2NvZGUpCisKKyAgICBkZWYgX2NsZWFuKHNlbGYpOgorICAgICAgICBfbG9nLmluZm8o
J0NsZWFuaW5nIEJlbmNobWFyaycpCisgICAgICAgIGlmIHNlbGYuX3dlYl9yb290OgorICAgICAg
ICAgICAgZm9yY2VfcmVtb3ZlKHNlbGYuX3dlYl9yb290KQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS93ZWJkcml2ZXJfYmVuY2htYXJrX3J1bm5lci9iZW5jaG1hcmtfcmVzdWx0
cy5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvd2ViZHJpdmVyX2JlbmNobWFya19ydW5uZXIv
YmVuY2htYXJrX3Jlc3VsdHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2ZjNGZhNjJmNzMzN2ZmMDEzOWU0YjI4
NzA5Mjk2ZTkxNGFlNTljNQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvd2ViZHJpdmVyX2JlbmNobWFya19ydW5uZXIvYmVuY2htYXJrX3Jlc3VsdHMucHkKQEAgLTAs
MCArMSwyNTAgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyMgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorIyBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworIyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisjIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TgorIyBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworIyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1w
b3J0IGpzb24KK2ltcG9ydCBtYXRoCitpbXBvcnQgcmUKKworCitjbGFzcyBCZW5jaG1hcmtSZXN1
bHRzKG9iamVjdCk6CisKKyAgICBhZ2dyZWdhdG9ycyA9IHsKKyAgICAgICAgJ1RvdGFsJzogKGxh
bWJkYSB2YWx1ZXM6IHN1bSh2YWx1ZXMpKSwKKyAgICAgICAgJ0FyaXRobWV0aWMnOiAobGFtYmRh
IHZhbHVlczogc3VtKHZhbHVlcykgLyBsZW4odmFsdWVzKSksCisgICAgICAgICdHZW9tZXRyaWMn
OiAobGFtYmRhIHZhbHVlczogbWF0aC5leHAoc3VtKG1hcChtYXRoLmxvZywgdmFsdWVzKSkgLyBs
ZW4odmFsdWVzKSkpLAorICAgIH0KKyAgICBtZXRyaWNfdG9fdW5pdCA9IHsKKyAgICAgICAgJ0Zy
YW1lUmF0ZSc6ICdmcHMnLAorICAgICAgICAnUnVucyc6ICcvcycsCisgICAgICAgICdUaW1lJzog
J21zJywKKyAgICAgICAgJ0R1cmF0aW9uJzogJ21zJywKKyAgICAgICAgJ01hbGxvYyc6ICdCJywK
KyAgICAgICAgJ0hlYXAnOiAnQicsCisgICAgICAgICdBbGxvY2F0aW9ucyc6ICdCJywKKyAgICAg
ICAgJ1Njb3JlJzogJ3B0JywKKyAgICB9CisgICAgU0lfcHJlZml4ZXMgPSBbJ24nLCAndScsICdt
JywgJycsICdLJywgJ00nLCAnRycsICdUJywgJ1AnLCAnRSddCisKKyAgICBkZWYgX19pbml0X18o
c2VsZiwgcmVzdWx0cyk6CisgICAgICAgIHNlbGYuX2xpbnRfcmVzdWx0cyhyZXN1bHRzKQorICAg
ICAgICBzZWxmLl9yZXN1bHRzID0gc2VsZi5fYWdncmVnYXRlX3Jlc3VsdHMocmVzdWx0cykKKwor
ICAgIGRlZiBmb3JtYXQoc2VsZiwgc2NhbGVfdW5pdD1UcnVlKToKKyAgICAgICAgcmV0dXJuIHNl
bGYuX2Zvcm1hdF90ZXN0cyhzZWxmLl9yZXN1bHRzLCBzY2FsZV91bml0KQorCisgICAgQGNsYXNz
bWV0aG9kCisgICAgZGVmIF9mb3JtYXRfdGVzdHMoY2xzLCB0ZXN0cywgc2NhbGVfdW5pdCwgaW5k
ZW50PScnKToKKyAgICAgICAgb3V0cHV0ID0gJycKKyAgICAgICAgY29uZmlnX25hbWUgPSAnY3Vy
cmVudCcKKyAgICAgICAgZm9yIHRlc3RfbmFtZSBpbiBzb3J0ZWQodGVzdHMua2V5cygpKToKKyAg
ICAgICAgICAgIGlzX2ZpcnN0ID0gVHJ1ZQorICAgICAgICAgICAgdGVzdCA9IHRlc3RzW3Rlc3Rf
bmFtZV0KKyAgICAgICAgICAgIG1ldHJpY3MgPSB0ZXN0LmdldCgnbWV0cmljcycsIHt9KQorICAg
ICAgICAgICAgZm9yIG1ldHJpY19uYW1lIGluIHNvcnRlZChtZXRyaWNzLmtleXMoKSk6CisgICAg
ICAgICAgICAgICAgbWV0cmljID0gbWV0cmljc1ttZXRyaWNfbmFtZV0KKyAgICAgICAgICAgICAg
ICBmb3IgYWdncmVnYXRvcl9uYW1lIGluIHNvcnRlZChtZXRyaWMua2V5cygpKToKKyAgICAgICAg
ICAgICAgICAgICAgb3V0cHV0ICs9IGluZGVudAorICAgICAgICAgICAgICAgICAgICBpZiBpc19m
aXJzdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCArPSB0ZXN0X25hbWUKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlzX2ZpcnN0ID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCArPSAnICcgKiBsZW4odGVzdF9u
YW1lKQorICAgICAgICAgICAgICAgICAgICBvdXRwdXQgKz0gJzonICsgbWV0cmljX25hbWUgKyAn
OicKKyAgICAgICAgICAgICAgICAgICAgaWYgYWdncmVnYXRvcl9uYW1lOgorICAgICAgICAgICAg
ICAgICAgICAgICAgb3V0cHV0ICs9IGFnZ3JlZ2F0b3JfbmFtZSArICc6JworICAgICAgICAgICAg
ICAgICAgICBvdXRwdXQgKz0gJyAnICsgY2xzLl9mb3JtYXRfdmFsdWVzKG1ldHJpY19uYW1lLCBt
ZXRyaWNbYWdncmVnYXRvcl9uYW1lXVtjb25maWdfbmFtZV0sIHNjYWxlX3VuaXQpICsgJ1xuJwor
ICAgICAgICAgICAgaWYgJ3Rlc3RzJyBpbiB0ZXN0OgorICAgICAgICAgICAgICAgIG91dHB1dCAr
PSBjbHMuX2Zvcm1hdF90ZXN0cyh0ZXN0Wyd0ZXN0cyddLCBzY2FsZV91bml0LCBpbmRlbnQ9KGlu
ZGVudCArICcgJyAqIGxlbih0ZXN0X25hbWUpKSkKKyAgICAgICAgcmV0dXJuIG91dHB1dAorCisg
ICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9mb3JtYXRfdmFsdWVzKGNscywgbWV0cmljX25hbWUs
IHZhbHVlcywgc2NhbGVfdW5pdD1UcnVlKToKKyAgICAgICAgdmFsdWVzID0gbWFwKGZsb2F0LCB2
YWx1ZXMpCisgICAgICAgIHRvdGFsID0gc3VtKHZhbHVlcykKKyAgICAgICAgbWVhbiA9IHRvdGFs
IC8gbGVuKHZhbHVlcykKKyAgICAgICAgc3F1YXJlX3N1bSA9IHN1bShtYXAobGFtYmRhIHg6IHgg
KiB4LCB2YWx1ZXMpKQorICAgICAgICBzYW1wbGVfY291bnQgPSBsZW4odmFsdWVzKQorCisgICAg
ICAgICMgV2l0aCBzdW0gYW5kIHN1bSBvZiBzcXVhcmVzLCB3ZSBjYW4gY29tcHV0ZSB0aGUgc2Ft
cGxlIHN0YW5kYXJkIGRldmlhdGlvbiBpbiBPKDEpLgorICAgICAgICAjIFNlZSBodHRwczovL3Ju
aXdhLmNvbS8yMDEyLTExLTEwL3NhbXBsZS1zdGFuZGFyZC1kZXZpYXRpb24taW4tdGVybXMtb2Yt
c3VtLWFuZC1zcXVhcmUtc3VtLW9mLXNhbXBsZXMvCisgICAgICAgIGlmIHNhbXBsZV9jb3VudCA8
PSAxOgorICAgICAgICAgICAgc2FtcGxlX3N0ZGV2ID0gMAorICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgIyBCZSBjYXJlZnVsIGFib3V0IHJvdW5kLW9mZiBlcnJvciB3aGVuIHNhbXBsZV9zdGRl
diBpcyAwLgorICAgICAgICAgICAgc2FtcGxlX3N0ZGV2ID0gbWF0aC5zcXJ0KG1heCgwLCBzcXVh
cmVfc3VtIC8gKHNhbXBsZV9jb3VudCAtIDEpIC0gdG90YWwgKiB0b3RhbCAvIChzYW1wbGVfY291
bnQgLSAxKSAvIHNhbXBsZV9jb3VudCkpCisKKyAgICAgICAgdW5pdCA9IGNscy5fdW5pdF9mcm9t
X21ldHJpYyhtZXRyaWNfbmFtZSkKKworICAgICAgICBpZiBub3Qgc2NhbGVfdW5pdDoKKyAgICAg
ICAgICAgIHJldHVybiAoJ3ttZWFuOi4zZn17dW5pdH0gc3RkZXY9e2RlbHRhOi4xJX0nKS5mb3Jt
YXQobWVhbj1tZWFuLCBkZWx0YT1zYW1wbGVfc3RkZXYgLyBtZWFuLCB1bml0PXVuaXQpCisKKyAg
ICAgICAgaWYgdW5pdCA9PSAnbXMnOgorICAgICAgICAgICAgdW5pdCA9ICdzJworICAgICAgICAg
ICAgbWVhbiA9IGZsb2F0KG1lYW4pIC8gMTAwMAorICAgICAgICAgICAgc2FtcGxlX3N0ZGV2IC89
IDEwMDAKKworICAgICAgICBiYXNlID0gMTAyNCBpZiB1bml0ID09ICdCJyBlbHNlIDEwMDAKKyAg
ICAgICAgdmFsdWVfc2lnX2ZpZyA9IDEgLSBtYXRoLmZsb29yKG1hdGgubG9nMTAoc2FtcGxlX3N0
ZGV2IC8gbWVhbikpIGlmIHNhbXBsZV9zdGRldiBlbHNlIDMKKyAgICAgICAgU0lfbWFnbml0dWRl
ID0gbWF0aC5mbG9vcihtYXRoLmxvZyhtZWFuLCBiYXNlKSkKKworICAgICAgICBzY2FsZWRfbWVh
biA9IG1lYW4gKiBtYXRoLnBvdyhiYXNlLCAtU0lfbWFnbml0dWRlKQorICAgICAgICBTSV9wcmVm
aXggPSBjbHMuU0lfcHJlZml4ZXNbaW50KFNJX21hZ25pdHVkZSkgKyAzXQorCisgICAgICAgIG5v
bl9mbG9hdGluZ19kaWdpdHMgPSAxICsgbWF0aC5mbG9vcihtYXRoLmxvZzEwKHNjYWxlZF9tZWFu
KSkKKyAgICAgICAgZmxvYXRpbmdfcG9pbnRzX2NvdW50ID0gbWF4KDAsIHZhbHVlX3NpZ19maWcg
LSBub25fZmxvYXRpbmdfZGlnaXRzKQorICAgICAgICByZXR1cm4gKCd7bWVhbjouJyArIHN0cihp
bnQoZmxvYXRpbmdfcG9pbnRzX2NvdW50KSkgKyAnZn17cHJlZml4fXt1bml0fSBzdGRldj17ZGVs
dGE6LjElfScpLmZvcm1hdCgKKyAgICAgICAgICAgIG1lYW49c2NhbGVkX21lYW4sIGRlbHRhPXNh
bXBsZV9zdGRldiAvIG1lYW4sIHByZWZpeD1TSV9wcmVmaXgsIHVuaXQ9dW5pdCkKKworICAgIEBj
bGFzc21ldGhvZAorICAgIGRlZiBfdW5pdF9mcm9tX21ldHJpYyhjbHMsIG1ldHJpY19uYW1lKToK
KyAgICAgICAgIyBGSVhNRTogRGV0ZWN0IHVua25vd24gbWV0dHJpYyBuYW1lcworICAgICAgICBz
dWZmaXggPSByZS5tYXRjaChyJy4qPyhbQS16XVthLXpdK3xGcmFtZVJhdGUpJCcsIG1ldHJpY19u
YW1lKQorICAgICAgICByZXR1cm4gY2xzLm1ldHJpY190b191bml0W3N1ZmZpeC5ncm91cCgxKV0K
KworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfYWdncmVnYXRlX3Jlc3VsdHMoY2xzLCB0ZXN0
cyk6CisgICAgICAgIHJlc3VsdHMgPSB7fQorICAgICAgICBmb3IgdGVzdF9uYW1lLCB0ZXN0IGlu
IHRlc3RzLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgcmVzdWx0c1t0ZXN0X25hbWVdID0gY2xz
Ll9hZ2dyZWdhdGVfcmVzdWx0c19mb3JfdGVzdCh0ZXN0KQorICAgICAgICByZXR1cm4gcmVzdWx0
cworCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9hZ2dyZWdhdGVfcmVzdWx0c19mb3JfdGVz
dChjbHMsIHRlc3QpOgorICAgICAgICBzdWJ0ZXN0X3Jlc3VsdHMgPSBjbHMuX2FnZ3JlZ2F0ZV9y
ZXN1bHRzKHRlc3RbJ3Rlc3RzJ10pIGlmICd0ZXN0cycgaW4gdGVzdCBlbHNlIHt9CisgICAgICAg
IHJlc3VsdHMgPSB7fQorICAgICAgICBmb3IgbWV0cmljX25hbWUsIG1ldHJpYyBpbiB0ZXN0Lmdl
dCgnbWV0cmljcycsIHt9KS5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3Rh
bmNlKG1ldHJpYywgbGlzdCk6CisgICAgICAgICAgICAgICAgcmVzdWx0c1ttZXRyaWNfbmFtZV0g
PSB7Tm9uZToge319CisgICAgICAgICAgICAgICAgZm9yIGNvbmZpZ19uYW1lLCB2YWx1ZXMgaW4g
bWV0cmljLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgICAgICAgICByZXN1bHRzW21ldHJpY19u
YW1lXVtOb25lXVtjb25maWdfbmFtZV0gPSBjbHMuX2ZsYXR0ZW5fbGlzdCh2YWx1ZXMpCisgICAg
ICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgYWdncmVnYXRvcl9saXN0ID0gbWV0
cmljCisgICAgICAgICAgICByZXN1bHRzW21ldHJpY19uYW1lXSA9IHt9CisgICAgICAgICAgICBm
b3IgYWdncmVnYXRvciBpbiBhZ2dyZWdhdG9yX2xpc3Q6CisgICAgICAgICAgICAgICAgdmFsdWVz
X2J5X2NvbmZpZ19pdGVyYXRpb24gPSBjbHMuX3N1YnRlc3RfdmFsdWVzX2J5X2NvbmZpZ19pdGVy
YXRpb24oc3VidGVzdF9yZXN1bHRzLCBtZXRyaWNfbmFtZSwgYWdncmVnYXRvcikKKyAgICAgICAg
ICAgICAgICBmb3IgY29uZmlnX25hbWUsIHZhbHVlc19ieV9pdGVyYXRpb24gaW4gdmFsdWVzX2J5
X2NvbmZpZ19pdGVyYXRpb24uaXRlcml0ZW1zKCk6CisgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dHNbbWV0cmljX25hbWVdLnNldGRlZmF1bHQoYWdncmVnYXRvciwge30pCisgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdHNbbWV0cmljX25hbWVdW2FnZ3JlZ2F0b3JdW2NvbmZpZ19uYW1lXSA9IFtj
bHMuX2FnZ3JlZ2F0ZV92YWx1ZXMoYWdncmVnYXRvciwgdmFsdWVzKSBmb3IgdmFsdWVzIGluIHZh
bHVlc19ieV9pdGVyYXRpb25dCisKKyAgICAgICAgcmV0dXJuIHsnbWV0cmljcyc6IHJlc3VsdHMs
ICd0ZXN0cyc6IHN1YnRlc3RfcmVzdWx0c30KKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBf
ZmxhdHRlbl9saXN0KGNscywgbmVzdGVkX2xpc3QpOgorICAgICAgICBmbGF0dGVuZWRfbGlzdCA9
IFtdCisgICAgICAgIGZvciBpdGVtIGluIG5lc3RlZF9saXN0OgorICAgICAgICAgICAgaWYgaXNp
bnN0YW5jZShpdGVtLCBsaXN0KToKKyAgICAgICAgICAgICAgICBmbGF0dGVuZWRfbGlzdCArPSBj
bHMuX2ZsYXR0ZW5fbGlzdChpdGVtKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAg
ICBmbGF0dGVuZWRfbGlzdC5hcHBlbmQoaXRlbSkKKyAgICAgICAgcmV0dXJuIGZsYXR0ZW5lZF9s
aXN0CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX3N1YnRlc3RfdmFsdWVzX2J5X2NvbmZp
Z19pdGVyYXRpb24oY2xzLCBzdWJ0ZXN0X3Jlc3VsdHMsIG1ldHJpY19uYW1lLCBhZ2dyZWdhdG9y
KToKKyAgICAgICAgdmFsdWVzX2J5X2NvbmZpZ19pdGVyYXRpb24gPSB7fQorICAgICAgICBmb3Ig
c3VidGVzdF9uYW1lLCBzdWJ0ZXN0IGluIHN1YnRlc3RfcmVzdWx0cy5pdGVyaXRlbXMoKToKKyAg
ICAgICAgICAgIHJlc3VsdHNfZm9yX21ldHJpYyA9IHN1YnRlc3RbJ21ldHJpY3MnXS5nZXQobWV0
cmljX25hbWUsIHt9KQorICAgICAgICAgICAgcmVzdWx0c19mb3JfYWdncmVnYXRvciA9IHJlc3Vs
dHNfZm9yX21ldHJpYy5nZXQoYWdncmVnYXRvciwgcmVzdWx0c19mb3JfbWV0cmljLmdldChOb25l
LCB7fSkpCisgICAgICAgICAgICBmb3IgY29uZmlnX25hbWUsIHZhbHVlcyBpbiByZXN1bHRzX2Zv
cl9hZ2dyZWdhdG9yLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgICAgIHZhbHVlc19ieV9jb25m
aWdfaXRlcmF0aW9uLnNldGRlZmF1bHQoY29uZmlnX25hbWUsIFtbXSBmb3IgXyBpbiB2YWx1ZXNd
KQorICAgICAgICAgICAgICAgIGZvciBpdGVyYXRpb24sIHZhbHVlIGluIGVudW1lcmF0ZSh2YWx1
ZXMpOgorICAgICAgICAgICAgICAgICAgICB2YWx1ZXNfYnlfY29uZmlnX2l0ZXJhdGlvbltjb25m
aWdfbmFtZV1baXRlcmF0aW9uXS5hcHBlbmQodmFsdWUpCisgICAgICAgIHJldHVybiB2YWx1ZXNf
YnlfY29uZmlnX2l0ZXJhdGlvbgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9hZ2dyZWdh
dGVfdmFsdWVzKGNscywgYWdncmVnYXRvciwgdmFsdWVzKToKKyAgICAgICAgcmV0dXJuIGNscy5h
Z2dyZWdhdG9yc1thZ2dyZWdhdG9yXSh2YWx1ZXMpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBk
ZWYgX2xpbnRfcmVzdWx0cyhjbHMsIHRlc3RzKToKKyAgICAgICAgY2xzLl9saW50X3N1YnRlc3Rf
cmVzdWx0cyh0ZXN0cywgTm9uZSkKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIEBjbGFzc21l
dGhvZAorICAgIGRlZiBfbGludF9zdWJ0ZXN0X3Jlc3VsdHMoY2xzLCBzdWJ0ZXN0cywgcGFyZW50
X25lZWRpbmdfYWdncmVnYXRpb24pOgorICAgICAgICBpdGVyYXRpb25fZ3JvdXBzX2J5X2NvbmZp
ZyA9IHt9CisgICAgICAgIGZvciB0ZXN0X25hbWUsIHRlc3QgaW4gc3VidGVzdHMuaXRlcml0ZW1z
KCk6CisgICAgICAgICAgICBuZWVkc19hZ2dyZWdhdGlvbiA9IEZhbHNlCisKKyAgICAgICAgICAg
IGlmICdtZXRyaWNzJyBub3QgaW4gdGVzdCBhbmQgJ3Rlc3RzJyBub3QgaW4gdGVzdDoKKyAgICAg
ICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJyIlcyIgZG9lcyBub3QgY29udGFpbiBtZXRyaWNz
IG9yIHRlc3RzJyAlIHRlc3RfbmFtZSkKKworICAgICAgICAgICAgaWYgJ21ldHJpY3MnIGluIHRl
c3Q6CisgICAgICAgICAgICAgICAgbWV0cmljcyA9IHRlc3RbJ21ldHJpY3MnXQorICAgICAgICAg
ICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG1ldHJpY3MsIGRpY3QpOgorICAgICAgICAgICAgICAg
ICAgICByYWlzZSBUeXBlRXJyb3IoJ1RoZSBtZXRyaWNzIGluICIlcyIgaXMgbm90IGEgZGljdGlv
bmFyeScgJSB0ZXN0X25hbWUpCisgICAgICAgICAgICAgICAgZm9yIG1ldHJpY19uYW1lLCBtZXRy
aWMgaW4gbWV0cmljcy5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgICAgICAgICAgaWYgaXNpbnN0
YW5jZShtZXRyaWMsIGxpc3QpOgorICAgICAgICAgICAgICAgICAgICAgICAgY2xzLl9saW50X2Fn
Z3JlZ2F0b3JfbGlzdCh0ZXN0X25hbWUsIG1ldHJpY19uYW1lLCBtZXRyaWMpCisgICAgICAgICAg
ICAgICAgICAgICAgICBuZWVkc19hZ2dyZWdhdGlvbiA9IFRydWUKKyAgICAgICAgICAgICAgICAg
ICAgZWxpZiBpc2luc3RhbmNlKG1ldHJpYywgZGljdCk6CisgICAgICAgICAgICAgICAgICAgICAg
ICBjbHMuX2xpbnRfY29uZmlndXJhdGlvbih0ZXN0X25hbWUsIG1ldHJpY19uYW1lLCBtZXRyaWMs
IHBhcmVudF9uZWVkaW5nX2FnZ3JlZ2F0aW9uLCBpdGVyYXRpb25fZ3JvdXBzX2J5X2NvbmZpZykK
KyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNl
IFR5cGVFcnJvcignIiVzIiBtZXRyaWMgb2YgIiVzIiB3YXMgbm90IGFuIGFnZ3JlZ2F0b3IgbGlz
dCBvciBhIGRpY3Rpb25hcnkgb2YgY29uZmlndXJhdGlvbnM6ICVzJyAlIChtZXRyaWNfbmFtZSwg
dGVzdF9uYW1lLCBzdHIobWV0cmljKSkpCisKKyAgICAgICAgICAgIGlmICd0ZXN0cycgaW4gdGVz
dDoKKyAgICAgICAgICAgICAgICBjbHMuX2xpbnRfc3VidGVzdF9yZXN1bHRzKHRlc3RbJ3Rlc3Rz
J10sIHRlc3RfbmFtZSBpZiBuZWVkc19hZ2dyZWdhdGlvbiBlbHNlIE5vbmUpCisgICAgICAgICAg
ICBlbGlmIG5lZWRzX2FnZ3JlZ2F0aW9uOgorICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJv
cignIiVzIiByZXF1aXJlcyBhZ2dyZWdhdGlvbiBidXQgIlNvbWVUZXN0IiBoYXMgbm8gc3VidGVz
dHMnICUgKHRlc3RfbmFtZSkpCisgICAgICAgIHJldHVybiBpdGVyYXRpb25fZ3JvdXBzX2J5X2Nv
bmZpZworCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9saW50X2FnZ3JlZ2F0b3JfbGlzdChj
bHMsIHRlc3RfbmFtZSwgbWV0cmljX25hbWUsIGFnZ3JlZ2F0b3JfbGlzdCk6CisgICAgICAgIGlm
IGxlbihhZ2dyZWdhdG9yX2xpc3QpICE9IGxlbihzZXQoYWdncmVnYXRvcl9saXN0KSk6CisgICAg
ICAgICAgICByYWlzZSBUeXBlRXJyb3IoJyIlcyIgbWV0cmljIG9mICIlcyIgaGFkIGludmFsaWQg
YWdncmVnYXRvciBsaXN0OiAlcycgJSAobWV0cmljX25hbWUsIHRlc3RfbmFtZSwganNvbi5kdW1w
cyhhZ2dyZWdhdG9yX2xpc3QpKSkKKyAgICAgICAgaWYgbm90IGFnZ3JlZ2F0b3JfbGlzdDoKKyAg
ICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignVGhlIGFnZ3JlZ2F0b3IgbGlzdCBpcyBlbXB0eSBp
biAiJXMiIG1ldHJpYyBvZiAiJXMiJyAlIChtZXRyaWNfbmFtZSwgdGVzdF9uYW1lKSkKKyAgICAg
ICAgZm9yIGFnZ3JlZ2F0b3JfbmFtZSBpbiBhZ2dyZWdhdG9yX2xpc3Q6CisgICAgICAgICAgICBp
ZiBjbHMuX2lzX251bWVyaWMoYWdncmVnYXRvcl9uYW1lKToKKyAgICAgICAgICAgICAgICByYWlz
ZSBUeXBlRXJyb3IoJyIlcyIgbWV0cmljIG9mICIlcyIgaXMgbm90IHdyYXBwZWQgYnkgYSBjb25m
aWd1cmF0aW9uOyBlLmcuICJjdXJyZW50IicgJSAobWV0cmljX25hbWUsIHRlc3RfbmFtZSkpCisg
ICAgICAgICAgICBpZiBhZ2dyZWdhdG9yX25hbWUgbm90IGluIGNscy5hZ2dyZWdhdG9yczoKKyAg
ICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJyIlcyIgbWV0cmljIG9mICIlcyIgdXNlcyB1
bmtub3duIGFnZ3JlZ2F0b3I6ICVzJyAlIChtZXRyaWNfbmFtZSwgdGVzdF9uYW1lLCBhZ2dyZWdh
dG9yX25hbWUpKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9saW50X2NvbmZpZ3VyYXRp
b24oY2xzLCB0ZXN0X25hbWUsIG1ldHJpY19uYW1lLCBjb25maWd1cmF0aW9ucywgcGFyZW50X25l
ZWRpbmdfYWdncmVnYXRpb24sIGl0ZXJhdGlvbl9ncm91cHNfYnlfY29uZmlnKToKKyAgICAgICAg
IyBGSVhNRTogQ2hlY2sgdGhhdCBjb25maWdfbmFtZSBpcyBhbHdheXMgImN1cnJlbnQiLgorICAg
ICAgICBmb3IgY29uZmlnX25hbWUsIHZhbHVlcyBpbiBjb25maWd1cmF0aW9ucy5pdGVyaXRlbXMo
KToKKyAgICAgICAgICAgIG5lc3RlZF9saXN0X2NvdW50ID0gW2lzaW5zdGFuY2UodmFsdWUsIGxp
c3QpIGZvciB2YWx1ZSBpbiB2YWx1ZXNdLmNvdW50KFRydWUpCisgICAgICAgICAgICBpZiBuZXN0
ZWRfbGlzdF9jb3VudCBub3QgaW4gWzAsIGxlbih2YWx1ZXMpXToKKyAgICAgICAgICAgICAgICBy
YWlzZSBUeXBlRXJyb3IoJyIlcyIgbWV0cmljIG9mICIlcyIgaGFkIG1hbGZvcm1lZCB2YWx1ZXM6
ICVzJyAlIChtZXRyaWNfbmFtZSwgdGVzdF9uYW1lLCBqc29uLmR1bXBzKHZhbHVlcykpKQorCisg
ICAgICAgICAgICBpZiBuZXN0ZWRfbGlzdF9jb3VudDoKKyAgICAgICAgICAgICAgICB2YWx1ZV9z
aGFwZSA9IFtdCisgICAgICAgICAgICAgICAgZm9yIHZhbHVlX2dyb3VwIGluIHZhbHVlczoKKyAg
ICAgICAgICAgICAgICAgICAgdmFsdWVfc2hhcGUuYXBwZW5kKGxlbih2YWx1ZV9ncm91cCkpCisg
ICAgICAgICAgICAgICAgICAgIGNscy5fbGludF92YWx1ZXModGVzdF9uYW1lLCBtZXRyaWNfbmFt
ZSwgdmFsdWVfZ3JvdXApCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHZhbHVl
X3NoYXBlID0gbGVuKHZhbHVlcykKKyAgICAgICAgICAgICAgICBjbHMuX2xpbnRfdmFsdWVzKHRl
c3RfbmFtZSwgbWV0cmljX25hbWUsIHZhbHVlcykKKworICAgICAgICAgICAgaXRlcmF0aW9uX2dy
b3Vwc19ieV9jb25maWcuc2V0ZGVmYXVsdChtZXRyaWNfbmFtZSwge30pLnNldGRlZmF1bHQoY29u
ZmlnX25hbWUsIHZhbHVlX3NoYXBlKQorICAgICAgICAgICAgaWYgcGFyZW50X25lZWRpbmdfYWdn
cmVnYXRpb24gYW5kIHZhbHVlX3NoYXBlICE9IGl0ZXJhdGlvbl9ncm91cHNfYnlfY29uZmlnW21l
dHJpY19uYW1lXVtjb25maWdfbmFtZV06CisgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9y
KCciJXMiIG1ldHJpYyBvZiAiJXMiIGhhZCBhIG1pc21hdGNoaW5nIHN1YnRlc3QgdmFsdWVzJyAl
IChtZXRyaWNfbmFtZSwgcGFyZW50X25lZWRpbmdfYWdncmVnYXRpb24pKQorCisgICAgQGNsYXNz
bWV0aG9kCisgICAgZGVmIF9saW50X3ZhbHVlcyhjbHMsIHRlc3RfbmFtZSwgbWV0cmljX25hbWUs
IHZhbHVlcyk6CisgICAgICAgIGlmIGFueShbbm90IGNscy5faXNfbnVtZXJpYyh2YWx1ZSkgZm9y
IHZhbHVlIGluIHZhbHVlc10pOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCciJXMiIG1l
dHJpYyBvZiAiJXMiIGNvbnRhaW5zIG5vbi1udW1lcmljIHZhbHVlOiAlcycgJSAobWV0cmljX25h
bWUsIHRlc3RfbmFtZSwganNvbi5kdW1wcyh2YWx1ZXMpKSkKKworICAgIEBjbGFzc21ldGhvZAor
ICAgIGRlZiBfaXNfbnVtZXJpYyhjbHMsIHZhbHVlKToKKyAgICAgICAgcmV0dXJuIGlzaW5zdGFu
Y2UodmFsdWUsIGludCkgb3IgaXNpbnN0YW5jZSh2YWx1ZSwgZmxvYXQpCmRpZmYgLS1naXQgYS9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L3dlYmRyaXZlcl9iZW5jaG1hcmtfcnVubmVyL2JlbmNobWFy
a19yZXN1bHRzX3VuaXR0ZXN0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS93ZWJkcml2ZXJf
YmVuY2htYXJrX3J1bm5lci9iZW5jaG1hcmtfcmVzdWx0c191bml0dGVzdC5weQpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5mNjZlOTgxY2ExYjhlOGE3Njc4Y2IyMTI2ZGRhZTRhMjhhMzE0NDIzCi0tLSAvZGV2L251bGwK
KysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS93ZWJkcml2ZXJfYmVuY2htYXJrX3J1bm5lci9i
ZW5jaG1hcmtfcmVzdWx0c191bml0dGVzdC5weQpAQCAtMCwwICsxLDI1NSBAQAorIyBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycgQU5EIEFOWQorIyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisjIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisjIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyMgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisjIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisj
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTCisjIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBi
ZW5jaG1hcmtfcmVzdWx0cyBpbXBvcnQgQmVuY2htYXJrUmVzdWx0cworCisKK2NsYXNzIEJlbmNo
bWFya1Jlc3VsdHNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9pbml0KHNl
bGYpOgorICAgICAgICByZXN1bHRzID0gQmVuY2htYXJrUmVzdWx0cyh7J1NvbWVUZXN0Jzogeydt
ZXRyaWNzJzogeydUaW1lJzogeydjdXJyZW50JzogWzEsIDIsIDNdfX19fSkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChyZXN1bHRzLl9yZXN1bHRzLCB7J1NvbWVUZXN0JzogeydtZXRyaWNzJzog
eydUaW1lJzoge05vbmU6IHsnY3VycmVudCc6IFsxLCAyLCAzXX19fSwgJ3Rlc3RzJzoge319fSkK
KworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXhwKFR5cGVFcnJvciwgciciVGlt
ZSIgbWV0cmljIG9mICJTb21lVGVzdCIgY29udGFpbnMgbm9uLW51bWVyaWMgdmFsdWU6IFxbMSwg
MiwgImEiXF0nKToKKyAgICAgICAgICAgIEJlbmNobWFya1Jlc3VsdHMoeydTb21lVGVzdCc6IHsn
bWV0cmljcyc6IHsnVGltZSc6IHsnY3VycmVudCc6IFsxLCAyLCAnYSddfX19fSkKKworICAgIGRl
ZiB0ZXN0X2Zvcm1hdChzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gQmVuY2htYXJrUmVzdWx0cyh7
J1NvbWVUZXN0JzogeydtZXRyaWNzJzogeydUaW1lJzogeydjdXJyZW50JzogWzEsIDIsIDNdfX19
fSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuZm9ybWF0KCksICdTb21lVGVzdDpU
aW1lOiAyLjBtcyBzdGRldj01MC4wJVxuJykKKworICAgICAgICByZXN1bHQgPSBCZW5jaG1hcmtS
ZXN1bHRzKHsnU29tZVRlc3QnOiB7J21ldHJpY3MnOiB7J1RpbWUnOiB7J2N1cnJlbnQnOiBbMSwg
MiwgM119LCAnU2NvcmUnOiB7J2N1cnJlbnQnOiBbMiwgMywgNF19fX19KQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKHJlc3VsdC5mb3JtYXQoKSwgJycnCitTb21lVGVzdDpTY29yZTogMy4wcHQg
c3RkZXY9MzMuMyUKKyAgICAgICAgOlRpbWU6IDIuMG1zIHN0ZGV2PTUwLjAlCisnJydbMTpdKQor
CisgICAgICAgIHJlc3VsdCA9IEJlbmNobWFya1Jlc3VsdHMoeydTb21lVGVzdCc6IHsKKyAgICAg
ICAgICAgICdtZXRyaWNzJzogeydUaW1lJzogWydUb3RhbCcsICdBcml0aG1ldGljJ119LAorICAg
ICAgICAgICAgJ3Rlc3RzJzogeworICAgICAgICAgICAgICAgICdTdWJUZXN0MSc6IHsnbWV0cmlj
cyc6IHsnVGltZSc6IHsnY3VycmVudCc6IFsxLCAyLCAzXX19fSwKKyAgICAgICAgICAgICAgICAn
U3ViVGVzdDInOiB7J21ldHJpY3MnOiB7J1RpbWUnOiB7J2N1cnJlbnQnOiBbNCwgNSwgNl19fX19
fX0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LmZvcm1hdCgpLCAnJycKK1NvbWVU
ZXN0OlRpbWU6QXJpdGhtZXRpYzogMy4wbXMgc3RkZXY9MzMuMyUKKyAgICAgICAgOlRpbWU6VG90
YWw6IDcuMG1zIHN0ZGV2PTI4LjYlCisgICAgICAgIFN1YlRlc3QxOlRpbWU6IDIuMG1zIHN0ZGV2
PTUwLjAlCisgICAgICAgIFN1YlRlc3QyOlRpbWU6IDUuMG1zIHN0ZGV2PTIwLjAlCisnJydbMTpd
KQorCisgICAgZGVmIHRlc3RfZm9ybWF0X3ZhbHVlc193aXRoX2xhcmdlX2Vycm9yKHNlbGYpOgor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEJlbmNobWFya1Jlc3VsdHMuX2Zvcm1hdF92YWx1ZXMo
J1J1bnMnLCBbMSwgMiwgM10pLCAnMi4wL3Mgc3RkZXY9NTAuMCUnKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKEJlbmNobWFya1Jlc3VsdHMuX2Zvcm1hdF92YWx1ZXMoJ1J1bnMnLCBbMTAsIDIw
LCAzMF0pLCAnMjAvcyBzdGRldj01MC4wJScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQmVu
Y2htYXJrUmVzdWx0cy5fZm9ybWF0X3ZhbHVlcygnUnVucycsIFsxMDAsIDIwMCwgMzAwXSksICcy
MDAvcyBzdGRldj01MC4wJScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQmVuY2htYXJrUmVz
dWx0cy5fZm9ybWF0X3ZhbHVlcygnUnVucycsIFsxMDAwLCAyMDAwLCAzMDAwXSksICcyLjBLL3Mg
c3RkZXY9NTAuMCUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEJlbmNobWFya1Jlc3VsdHMu
X2Zvcm1hdF92YWx1ZXMoJ1J1bnMnLCBbMTAwMDAsIDIwMDAwLCAzMDAwMF0pLCAnMjBLL3Mgc3Rk
ZXY9NTAuMCUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEJlbmNobWFya1Jlc3VsdHMuX2Zv
cm1hdF92YWx1ZXMoJ1J1bnMnLCBbMTAwMDAwLCAyMDAwMDAsIDMwMDAwMF0pLCAnMjAwSy9zIHN0
ZGV2PTUwLjAlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChCZW5jaG1hcmtSZXN1bHRzLl9m
b3JtYXRfdmFsdWVzKCdSdW5zJywgWzEwMDAwMDAsIDIwMDAwMDAsIDMwMDAwMDBdKSwgJzIuME0v
cyBzdGRldj01MC4wJScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQmVuY2htYXJrUmVzdWx0
cy5fZm9ybWF0X3ZhbHVlcygnUnVucycsIFswLjEsIDAuMiwgMC4zXSksICcyMDBtL3Mgc3RkZXY9
NTAuMCUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEJlbmNobWFya1Jlc3VsdHMuX2Zvcm1h
dF92YWx1ZXMoJ1J1bnMnLCBbMC4wMSwgMC4wMiwgMC4wM10pLCAnMjBtL3Mgc3RkZXY9NTAuMCUn
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEJlbmNobWFya1Jlc3VsdHMuX2Zvcm1hdF92YWx1
ZXMoJ1J1bnMnLCBbMC4wMDEsIDAuMDAyLCAwLjAwM10pLCAnMi4wbS9zIHN0ZGV2PTUwLjAlJykK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChCZW5jaG1hcmtSZXN1bHRzLl9mb3JtYXRfdmFsdWVz
KCdSdW5zJywgWzAuMDAwMSwgMC4wMDAyLCAwLjAwMDNdKSwgJzIwMHUvcyBzdGRldj01MC4wJScp
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQmVuY2htYXJrUmVzdWx0cy5fZm9ybWF0X3ZhbHVl
cygnUnVucycsIFswLjAwMDAxLCAwLjAwMDAyLCAwLjAwMDAzXSksICcyMHUvcyBzdGRldj01MC4w
JScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQmVuY2htYXJrUmVzdWx0cy5fZm9ybWF0X3Zh
bHVlcygnUnVucycsIFswLjAwMDAwMSwgMC4wMDAwMDIsIDAuMDAwMDAzXSksICcyLjB1L3Mgc3Rk
ZXY9NTAuMCUnKQorCisgICAgZGVmIHRlc3RfZm9ybWF0X3ZhbHVlc193aXRoX3NtYWxsX2Vycm9y
KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEJlbmNobWFya1Jlc3VsdHMuX2Zvcm1h
dF92YWx1ZXMoJ1J1bnMnLCBbMS4xLCAxLjIsIDEuM10pLCAnMS4yMC9zIHN0ZGV2PTguMyUnKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEJlbmNobWFya1Jlc3VsdHMuX2Zvcm1hdF92YWx1ZXMo
J1J1bnMnLCBbMTEsIDEyLCAxM10pLCAnMTIuMC9zIHN0ZGV2PTguMyUnKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKEJlbmNobWFya1Jlc3VsdHMuX2Zvcm1hdF92YWx1ZXMoJ1J1bnMnLCBbMTEw
LCAxMjAsIDEzMF0pLCAnMTIwL3Mgc3RkZXY9OC4zJScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoQmVuY2htYXJrUmVzdWx0cy5fZm9ybWF0X3ZhbHVlcygnUnVucycsIFsxMTAwLCAxMjAwLCAx
MzAwXSksICcxLjIwSy9zIHN0ZGV2PTguMyUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEJl
bmNobWFya1Jlc3VsdHMuX2Zvcm1hdF92YWx1ZXMoJ1J1bnMnLCBbMTEwMDAsIDEyMDAwLCAxMzAw
MF0pLCAnMTIuMEsvcyBzdGRldj04LjMlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChCZW5j
aG1hcmtSZXN1bHRzLl9mb3JtYXRfdmFsdWVzKCdSdW5zJywgWzExMDAwMCwgMTIwMDAwLCAxMzAw
MDBdKSwgJzEyMEsvcyBzdGRldj04LjMlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChCZW5j
aG1hcmtSZXN1bHRzLl9mb3JtYXRfdmFsdWVzKCdSdW5zJywgWzExMDAwMDAsIDEyMDAwMDAsIDEz
MDAwMDBdKSwgJzEuMjBNL3Mgc3RkZXY9OC4zJScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
QmVuY2htYXJrUmVzdWx0cy5fZm9ybWF0X3ZhbHVlcygnUnVucycsIFswLjExLCAwLjEyLCAwLjEz
XSksICcxMjBtL3Mgc3RkZXY9OC4zJScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQmVuY2ht
YXJrUmVzdWx0cy5fZm9ybWF0X3ZhbHVlcygnUnVucycsIFswLjAxMSwgMC4wMTIsIDAuMDEzXSks
ICcxMi4wbS9zIHN0ZGV2PTguMyUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEJlbmNobWFy
a1Jlc3VsdHMuX2Zvcm1hdF92YWx1ZXMoJ1J1bnMnLCBbMC4wMDExLCAwLjAwMTIsIDAuMDAxM10p
LCAnMS4yMG0vcyBzdGRldj04LjMlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChCZW5jaG1h
cmtSZXN1bHRzLl9mb3JtYXRfdmFsdWVzKCdSdW5zJywgWzAuMDAwMTEsIDAuMDAwMTIsIDAuMDAw
MTNdKSwgJzEyMHUvcyBzdGRldj04LjMlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChCZW5j
aG1hcmtSZXN1bHRzLl9mb3JtYXRfdmFsdWVzKCdSdW5zJywgWzAuMDAwMDExLCAwLjAwMDAxMiwg
MC4wMDAwMTNdKSwgJzEyLjB1L3Mgc3RkZXY9OC4zJScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoQmVuY2htYXJrUmVzdWx0cy5fZm9ybWF0X3ZhbHVlcygnUnVucycsIFswLjAwMDAwMTEsIDAu
MDAwMDAxMiwgMC4wMDAwMDEzXSksICcxLjIwdS9zIHN0ZGV2PTguMyUnKQorCisgICAgZGVmIHRl
c3RfZm9ybWF0X3ZhbHVlc193aXRoX3RpbWUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoQmVuY2htYXJrUmVzdWx0cy5fZm9ybWF0X3ZhbHVlcygnVGltZScsIFsxLCAyLCAzXSksICcy
LjBtcyBzdGRldj01MC4wJScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQmVuY2htYXJrUmVz
dWx0cy5fZm9ybWF0X3ZhbHVlcygnVGltZScsIFsxMCwgMjAsIDMwXSksICcyMG1zIHN0ZGV2PTUw
LjAlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChCZW5jaG1hcmtSZXN1bHRzLl9mb3JtYXRf
dmFsdWVzKCdUaW1lJywgWzEwMCwgMjAwLCAzMDBdKSwgJzIwMG1zIHN0ZGV2PTUwLjAlJykKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChCZW5jaG1hcmtSZXN1bHRzLl9mb3JtYXRfdmFsdWVzKCdU
aW1lJywgWzEwMDAsIDIwMDAsIDMwMDBdKSwgJzIuMHMgc3RkZXY9NTAuMCUnKQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKEJlbmNobWFya1Jlc3VsdHMuX2Zvcm1hdF92YWx1ZXMoJ1RpbWUnLCBb
MTAwMDAsIDIwMDAwLCAzMDAwMF0pLCAnMjBzIHN0ZGV2PTUwLjAlJykKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChCZW5jaG1hcmtSZXN1bHRzLl9mb3JtYXRfdmFsdWVzKCdUaW1lJywgWzEwMDAw
MCwgMjAwMDAwLCAzMDAwMDBdKSwgJzIwMHMgc3RkZXY9NTAuMCUnKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKEJlbmNobWFya1Jlc3VsdHMuX2Zvcm1hdF92YWx1ZXMoJ1RpbWUnLCBbMC4xMSwg
MC4xMiwgMC4xM10pLCAnMTIwdXMgc3RkZXY9OC4zJScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoQmVuY2htYXJrUmVzdWx0cy5fZm9ybWF0X3ZhbHVlcygnVGltZScsIFswLjAxMSwgMC4wMTIs
IDAuMDEzXSksICcxMi4wdXMgc3RkZXY9OC4zJScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
QmVuY2htYXJrUmVzdWx0cy5fZm9ybWF0X3ZhbHVlcygnVGltZScsIFswLjAwMTEsIDAuMDAxMiwg
MC4wMDEzXSksICcxLjIwdXMgc3RkZXY9OC4zJScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
QmVuY2htYXJrUmVzdWx0cy5fZm9ybWF0X3ZhbHVlcygnVGltZScsIFswLjAwMDExLCAwLjAwMDEy
LCAwLjAwMDEzXSksICcxMjBucyBzdGRldj04LjMlJykKKworICAgIGRlZiB0ZXN0X2Zvcm1hdF92
YWx1ZXNfd2l0aF9ub19lcnJvcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChCZW5j
aG1hcmtSZXN1bHRzLl9mb3JtYXRfdmFsdWVzKCdUaW1lJywgWzEsIDEsIDFdKSwgJzEuMDBtcyBz
dGRldj0wLjAlJykKKworICAgIGRlZiB0ZXN0X2Zvcm1hdF92YWx1ZXNfd2l0aF9zbWFsbF9kaWZm
ZXJlbmNlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEJlbmNobWFya1Jlc3VsdHMu
X2Zvcm1hdF92YWx1ZXMoJ1RpbWUnLCBbNSwgNCwgNCwgNCwgNCwgNCwgNCwgNCwgNCwgNCwgNCwg
NCwgNCwgNCwgNCwgNCwgNCwgNCwgNCwgNF0pLAorICAgICAgICAgICAgJzQuMDVtcyBzdGRldj01
LjUlJykKKworICAgIGRlZiB0ZXN0X2FnZ3JlZ2F0ZV9yZXN1bHRzKHNlbGYpOgorICAgICAgICBz
ZWxmLm1heERpZmYgPSBOb25lCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQmVuY2htYXJrUmVz
dWx0cy5fYWdncmVnYXRlX3Jlc3VsdHMoCisgICAgICAgICAgICB7J1NvbWVUZXN0JzogeydtZXRy
aWNzJzogeydUaW1lJzogeydjdXJyZW50JzogWzEsIDIsIDNdfX19fSksCisgICAgICAgICAgICB7
J1NvbWVUZXN0JzogeydtZXRyaWNzJzogeydUaW1lJzoge05vbmU6IHsnY3VycmVudCc6IFsxLCAy
LCAzXX19fSwgJ3Rlc3RzJzoge319fSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEJlbmNo
bWFya1Jlc3VsdHMuX2FnZ3JlZ2F0ZV9yZXN1bHRzKAorICAgICAgICAgICAgeydTb21lVGVzdCc6
IHsKKyAgICAgICAgICAgICAgICAnbWV0cmljcyc6IHsnVGltZSc6IFsnVG90YWwnXX0sCisgICAg
ICAgICAgICAgICAgJ3Rlc3RzJzogeworICAgICAgICAgICAgICAgICAgICAnU3ViVGVzdDEnOiB7
J21ldHJpY3MnOiB7J1RpbWUnOiB7J2N1cnJlbnQnOiBbMSwgMiwgM119fX0sCisgICAgICAgICAg
ICAgICAgICAgICdTdWJUZXN0Mic6IHsnbWV0cmljcyc6IHsnVGltZSc6IHsnY3VycmVudCc6IFs0
LCA1LCA2XX19fX19fSksCisgICAgICAgICAgICB7J1NvbWVUZXN0JzogeworICAgICAgICAgICAg
ICAgICdtZXRyaWNzJzogeydUaW1lJzogeydUb3RhbCc6IHsnY3VycmVudCc6IFs1LCA3LCA5XX19
fSwKKyAgICAgICAgICAgICAgICAndGVzdHMnOiB7CisgICAgICAgICAgICAgICAgICAgICdTdWJU
ZXN0MSc6IHsnbWV0cmljcyc6IHsnVGltZSc6IHtOb25lOiB7J2N1cnJlbnQnOiBbMSwgMiwgM119
fX0sICd0ZXN0cyc6IHt9fSwKKyAgICAgICAgICAgICAgICAgICAgJ1N1YlRlc3QyJzogeydtZXRy
aWNzJzogeydUaW1lJzoge05vbmU6IHsnY3VycmVudCc6IFs0LCA1LCA2XX19fSwgJ3Rlc3RzJzog
e319fX19KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQmVuY2htYXJrUmVzdWx0cy5fYWdn
cmVnYXRlX3Jlc3VsdHMoCisgICAgICAgICAgICB7J1NvbWVUZXN0JzogeworICAgICAgICAgICAg
ICAgICdtZXRyaWNzJzogeydUaW1lJzogWydUb3RhbCddLCAnUnVucyc6IFsnVG90YWwnXX0sCisg
ICAgICAgICAgICAgICAgJ3Rlc3RzJzogeworICAgICAgICAgICAgICAgICAgICAnU3ViVGVzdDEn
OiB7J21ldHJpY3MnOiB7J1RpbWUnOiB7J2N1cnJlbnQnOiBbMSwgMiwgM119fX0sCisgICAgICAg
ICAgICAgICAgICAgICdTdWJUZXN0Mic6IHsnbWV0cmljcyc6IHsnVGltZSc6IHsnY3VycmVudCc6
IFs0LCA1LCA2XX19fSwKKyAgICAgICAgICAgICAgICAgICAgJ1N1YlRlc3QzJzogeydtZXRyaWNz
JzogeydSdW5zJzogeydjdXJyZW50JzogWzcsIDgsIDldfX19fX19KSwKKyAgICAgICAgICAgIHsn
U29tZVRlc3QnOiB7CisgICAgICAgICAgICAgICAgJ21ldHJpY3MnOiB7CisgICAgICAgICAgICAg
ICAgICAgICdUaW1lJzogeydUb3RhbCc6IHsnY3VycmVudCc6IFs1LCA3LCA5XX19LAorICAgICAg
ICAgICAgICAgICAgICAnUnVucyc6IHsnVG90YWwnOiB7J2N1cnJlbnQnOiBbNywgOCwgOV19fX0s
CisgICAgICAgICAgICAgICAgJ3Rlc3RzJzogeworICAgICAgICAgICAgICAgICAgICAnU3ViVGVz
dDEnOiB7J21ldHJpY3MnOiB7J1RpbWUnOiB7Tm9uZTogeydjdXJyZW50JzogWzEsIDIsIDNdfX19
LCAndGVzdHMnOiB7fX0sCisgICAgICAgICAgICAgICAgICAgICdTdWJUZXN0Mic6IHsnbWV0cmlj
cyc6IHsnVGltZSc6IHtOb25lOiB7J2N1cnJlbnQnOiBbNCwgNSwgNl19fX0sICd0ZXN0cyc6IHt9
fSwKKyAgICAgICAgICAgICAgICAgICAgJ1N1YlRlc3QzJzogeydtZXRyaWNzJzogeydSdW5zJzog
e05vbmU6IHsnY3VycmVudCc6IFs3LCA4LCA5XX19fSwgJ3Rlc3RzJzoge319fX19KQorCisgICAg
ZGVmIHRlc3RfYWdncmVnYXRlX3Jlc3VsdHNfd2l0aF9ncm9wdXMoc2VsZik6CisgICAgICAgIHNl
bGYubWF4RGlmZiA9IE5vbmUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChCZW5jaG1hcmtSZXN1
bHRzLl9hZ2dyZWdhdGVfcmVzdWx0cygKKyAgICAgICAgICAgIHsnU29tZVRlc3QnOiB7CisgICAg
ICAgICAgICAgICAgJ21ldHJpY3MnOiB7J1RpbWUnOiBbJ1RvdGFsJ119LAorICAgICAgICAgICAg
ICAgICd0ZXN0cyc6IHsKKyAgICAgICAgICAgICAgICAgICAgJ1N1YlRlc3QxJzogeydtZXRyaWNz
JzogeydUaW1lJzogeydjdXJyZW50JzogW1sxLCAyXSwgWzMsIDRdXX19fSwKKyAgICAgICAgICAg
ICAgICAgICAgJ1N1YlRlc3QyJzogeydtZXRyaWNzJzogeydUaW1lJzogeydjdXJyZW50JzogW1s1
LCA2XSwgWzcsIDhdXX19fX19fSksCisgICAgICAgICAgICB7J1NvbWVUZXN0JzogeworICAgICAg
ICAgICAgICAgICdtZXRyaWNzJzogeydUaW1lJzogeydUb3RhbCc6IHsnY3VycmVudCc6IFs2LCA4
LCAxMCwgMTJdfX19LAorICAgICAgICAgICAgICAgICd0ZXN0cyc6IHsKKyAgICAgICAgICAgICAg
ICAgICAgJ1N1YlRlc3QxJzogeydtZXRyaWNzJzogeydUaW1lJzoge05vbmU6IHsnY3VycmVudCc6
IFsxLCAyLCAzLCA0XX19fSwgJ3Rlc3RzJzoge319LAorICAgICAgICAgICAgICAgICAgICAnU3Vi
VGVzdDInOiB7J21ldHJpY3MnOiB7J1RpbWUnOiB7Tm9uZTogeydjdXJyZW50JzogWzUsIDYsIDcs
IDhdfX19LCAndGVzdHMnOiB7fX19fX0pCisKKyAgICBkZWYgdGVzdF9hZ2dyZWdhdGVfbmVzdGVk
X3Jlc3VsdHMoc2VsZik6CisgICAgICAgIHNlbGYubWF4RGlmZiA9IE5vbmUKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChCZW5jaG1hcmtSZXN1bHRzLl9hZ2dyZWdhdGVfcmVzdWx0cygKKyAgICAg
ICAgICAgIHsnU29tZVRlc3QnOiB7CisgICAgICAgICAgICAgICAgJ21ldHJpY3MnOiB7J1RpbWUn
OiBbJ1RvdGFsJ119LAorICAgICAgICAgICAgICAgICd0ZXN0cyc6IHsKKyAgICAgICAgICAgICAg
ICAgICAgJ1N1YlRlc3QxJzogeworICAgICAgICAgICAgICAgICAgICAgICAgJ21ldHJpY3MnOiB7
J1RpbWUnOiBbJ1RvdGFsJ119LAorICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RzJzogewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICdHcmFuZENoaWxkMSc6IHsnbWV0cmljcyc6IHsn
VGltZSc6IHsnY3VycmVudCc6IFsxLCAyXX19fSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAnR3JhbmRDaGlsZDInOiB7J21ldHJpY3MnOiB7J1RpbWUnOiB7J2N1cnJlbnQnOiBbMywgNF19
fX19fSwKKyAgICAgICAgICAgICAgICAgICAgJ1N1YlRlc3QyJzogeydtZXRyaWNzJzogeydUaW1l
JzogeydjdXJyZW50JzogWzUsIDZdfX19fX19KSwKKyAgICAgICAgICAgIHsnU29tZVRlc3QnOiB7
CisgICAgICAgICAgICAgICAgJ21ldHJpY3MnOiB7J1RpbWUnOiB7J1RvdGFsJzogeydjdXJyZW50
JzogWzksIDEyXX19fSwKKyAgICAgICAgICAgICAgICAndGVzdHMnOiB7CisgICAgICAgICAgICAg
ICAgICAgICdTdWJUZXN0MSc6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICdtZXRyaWNzJzog
eydUaW1lJzogeydUb3RhbCc6IHsnY3VycmVudCc6IFs0LCA2XX19fSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICd0ZXN0cyc6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnR3JhbmRD
aGlsZDEnOiB7J21ldHJpY3MnOiB7J1RpbWUnOiB7Tm9uZTogeydjdXJyZW50JzogWzEsIDJdfX19
LCAndGVzdHMnOiB7fX0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0dyYW5kQ2hpbGQy
JzogeydtZXRyaWNzJzogeydUaW1lJzoge05vbmU6IHsnY3VycmVudCc6IFszLCA0XX19fSwgJ3Rl
c3RzJzoge319fX0sCisgICAgICAgICAgICAgICAgICAgICdTdWJUZXN0Mic6IHsnbWV0cmljcyc6
IHsnVGltZSc6IHtOb25lOiB7J2N1cnJlbnQnOiBbNSwgNl19fX0sICd0ZXN0cyc6IHt9fX19fSkK
KworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEJlbmNobWFya1Jlc3VsdHMuX2FnZ3JlZ2F0ZV9y
ZXN1bHRzKAorICAgICAgICAgICAgeydTb21lVGVzdCc6IHsKKyAgICAgICAgICAgICAgICAnbWV0
cmljcyc6IHsnVGltZSc6IFsnVG90YWwnXX0sCisgICAgICAgICAgICAgICAgJ3Rlc3RzJzogewor
ICAgICAgICAgICAgICAgICAgICAnU3ViVGVzdDEnOiB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAnbWV0cmljcyc6IHsnVGltZSc6IFsnVG90YWwnLCAnQXJpdGhtZXRpYyddfSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICd0ZXN0cyc6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAn
R3JhbmRDaGlsZDEnOiB7J21ldHJpY3MnOiB7J1RpbWUnOiB7J2N1cnJlbnQnOiBbMSwgMl19fX0s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0dyYW5kQ2hpbGQyJzogeydtZXRyaWNzJzog
eydUaW1lJzogeydjdXJyZW50JzogWzMsIDRdfX19fX0sCisgICAgICAgICAgICAgICAgICAgICdT
dWJUZXN0Mic6IHsnbWV0cmljcyc6IHsnVGltZSc6IHsnY3VycmVudCc6IFs1LCA2XX19fX19fSks
CisgICAgICAgICAgICB7J1NvbWVUZXN0JzogeworICAgICAgICAgICAgICAgICdtZXRyaWNzJzog
eydUaW1lJzogeydUb3RhbCc6IHsnY3VycmVudCc6IFs5LCAxMl19fX0sCisgICAgICAgICAgICAg
ICAgJ3Rlc3RzJzogeworICAgICAgICAgICAgICAgICAgICAnU3ViVGVzdDEnOiB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAnbWV0cmljcyc6IHsnVGltZSc6IHsnVG90YWwnOiB7J2N1cnJlbnQn
OiBbNCwgNl19LCAnQXJpdGhtZXRpYyc6IHsnY3VycmVudCc6IFsyLCAzXX19fSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICd0ZXN0cyc6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAn
R3JhbmRDaGlsZDEnOiB7J21ldHJpY3MnOiB7J1RpbWUnOiB7Tm9uZTogeydjdXJyZW50JzogWzEs
IDJdfX19LCAndGVzdHMnOiB7fX0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0dyYW5k
Q2hpbGQyJzogeydtZXRyaWNzJzogeydUaW1lJzoge05vbmU6IHsnY3VycmVudCc6IFszLCA0XX19
fSwgJ3Rlc3RzJzoge319fX0sCisgICAgICAgICAgICAgICAgICAgICdTdWJUZXN0Mic6IHsnbWV0
cmljcyc6IHsnVGltZSc6IHtOb25lOiB7J2N1cnJlbnQnOiBbNSwgNl19fX0sICd0ZXN0cyc6IHt9
fX19fSkKKworICAgIGRlZiB0ZXN0X2xpbnRfcmVzdWx0cyhzZWxmKToKKyAgICAgICAgd2l0aCBz
ZWxmLmFzc2VydFJhaXNlc1JlZ2V4cChUeXBlRXJyb3IsIHInIlNvbWVUZXN0IiBkb2VzIG5vdCBj
b250YWluIG1ldHJpY3Mgb3IgdGVzdHMnKToKKyAgICAgICAgICAgIEJlbmNobWFya1Jlc3VsdHMu
X2xpbnRfcmVzdWx0cyh7J1NvbWVUZXN0Jzoge319KQorCisgICAgICAgIHdpdGggc2VsZi5hc3Nl
cnRSYWlzZXNSZWdleHAoVHlwZUVycm9yLCByJ1RoZSBtZXRyaWNzIGluICJTb21lVGVzdCIgaXMg
bm90IGEgZGljdGlvbmFyeScpOgorICAgICAgICAgICAgQmVuY2htYXJrUmVzdWx0cy5fbGludF9y
ZXN1bHRzKHsnU29tZVRlc3QnOiB7J21ldHJpY3MnOiBbXX19KQorCisgICAgICAgIHdpdGggc2Vs
Zi5hc3NlcnRSYWlzZXNSZWdleHAoVHlwZUVycm9yLCByJ1RoZSBhZ2dyZWdhdG9yIGxpc3QgaXMg
ZW1wdHkgaW4gIlRpbWUiIG1ldHJpYyBvZiAiU29tZVRlc3QiJyk6CisgICAgICAgICAgICBCZW5j
aG1hcmtSZXN1bHRzLl9saW50X3Jlc3VsdHMoeydTb21lVGVzdCc6IHsnbWV0cmljcyc6IHsnVGlt
ZSc6IFtdfX19KQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleHAoVHlwZUVy
cm9yLCByJyJUaW1lIiBtZXRyaWMgb2YgIlNvbWVUZXN0IiBpcyBub3Qgd3JhcHBlZCBieSBhIGNv
bmZpZ3VyYXRpb247IGUuZy4gImN1cnJlbnQiJyk6CisgICAgICAgICAgICBCZW5jaG1hcmtSZXN1
bHRzLl9saW50X3Jlc3VsdHMoeydTb21lVGVzdCc6IHsnbWV0cmljcyc6IHsnVGltZSc6IFsxLCAy
XX19fSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoQmVuY2htYXJrUmVzdWx0cy5fbGludF9y
ZXN1bHRzKHsnU29tZVRlc3QnOiB7J21ldHJpY3MnOiB7J1RpbWUnOiB7J2N1cnJlbnQnOiBbMSwg
Ml19fX19KSkKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXhwKFR5cGVFcnJv
ciwgciciVGltZSIgbWV0cmljIG9mICJTb21lVGVzdCIgd2FzIG5vdCBhbiBhZ2dyZWdhdG9yIGxp
c3Qgb3IgYSBkaWN0aW9uYXJ5IG9mIGNvbmZpZ3VyYXRpb25zOiAxJyk6CisgICAgICAgICAgICBC
ZW5jaG1hcmtSZXN1bHRzLl9saW50X3Jlc3VsdHMoeydTb21lVGVzdCc6IHsnbWV0cmljcyc6IHsn
VGltZSc6IDF9fX0pCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4cChUeXBl
RXJyb3IsIHInIlRpbWUiIG1ldHJpYyBvZiAiU29tZVRlc3QiIGNvbnRhaW5zIG5vbi1udW1lcmlj
IHZhbHVlOiBcWyJUb3RhbCJcXScpOgorICAgICAgICAgICAgQmVuY2htYXJrUmVzdWx0cy5fbGlu
dF9yZXN1bHRzKHsnU29tZVRlc3QnOiB7J21ldHJpY3MnOiB7J1RpbWUnOiB7J2N1cnJlbnQnOiBb
J1RvdGFsJ119fX19KQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleHAoVHlw
ZUVycm9yLCByJyJUaW1lIiBtZXRyaWMgb2YgIlNvbWVUZXN0IiBjb250YWlucyBub24tbnVtZXJp
YyB2YWx1ZTogXFsiVG90YWwiLCAiR2VvbWV0cmljIlxdJyk6CisgICAgICAgICAgICBCZW5jaG1h
cmtSZXN1bHRzLl9saW50X3Jlc3VsdHMoeydTb21lVGVzdCc6IHsnbWV0cmljcyc6IHsnVGltZSc6
IHsnY3VycmVudCc6IFtbJ1RvdGFsJywgJ0dlb21ldHJpYyddXX19fX0pCisKKyAgICAgICAgd2l0
aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4cChUeXBlRXJyb3IsIHInIlNvbWVUZXN0IiByZXF1aXJl
cyBhZ2dyZWdhdGlvbiBidXQgIlNvbWVUZXN0IiBoYXMgbm8gc3VidGVzdHMnKToKKyAgICAgICAg
ICAgIEJlbmNobWFya1Jlc3VsdHMuX2xpbnRfcmVzdWx0cyh7J1NvbWVUZXN0JzogeydtZXRyaWNz
JzogeydUaW1lJzogWydUb3RhbCddfX19KQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlz
ZXNSZWdleHAoVHlwZUVycm9yLCByJyJUaW1lIiBtZXRyaWMgb2YgIlNvbWVUZXN0IiBoYWQgaW52
YWxpZCBhZ2dyZWdhdG9yIGxpc3Q6IFxbIlRvdGFsIiwgIlRvdGFsIlxdJyk6CisgICAgICAgICAg
ICBCZW5jaG1hcmtSZXN1bHRzLl9saW50X3Jlc3VsdHMoeydTb21lVGVzdCc6IHsnbWV0cmljcyc6
IHsnVGltZSc6IFsnVG90YWwnLCAnVG90YWwnXX0sICd0ZXN0cyc6IHsKKyAgICAgICAgICAgICAg
ICAnU3ViVGVzdDEnOiB7J21ldHJpY3MnOiB7J1RpbWUnOiB7J2N1cnJlbnQnOiBbXX19fX19fSkK
KworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXhwKFR5cGVFcnJvciwgciciVGlt
ZSIgbWV0cmljIG9mICJTb21lVGVzdCIgdXNlcyB1bmtub3duIGFnZ3JlZ2F0b3I6IEtpdHRlbk1l
YW4nKToKKyAgICAgICAgICAgIEJlbmNobWFya1Jlc3VsdHMuX2xpbnRfcmVzdWx0cyh7J1NvbWVU
ZXN0JzogeydtZXRyaWNzJzogeydUaW1lJzogWydLaXR0ZW5NZWFuJ119LCAndGVzdHMnOiB7Cisg
ICAgICAgICAgICAgICAgJ1N1YlRlc3QxJzogeydtZXRyaWNzJzogeydUaW1lJzogeydjdXJyZW50
JzogW119fX19fX0pCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4cChUeXBl
RXJyb3IsIHInIlRpbWUiIG1ldHJpYyBvZiAiU29tZVRlc3QiIGhhZCBhIG1pc21hdGNoaW5nIHN1
YnRlc3QgdmFsdWVzJyk6CisgICAgICAgICAgICBCZW5jaG1hcmtSZXN1bHRzLl9saW50X3Jlc3Vs
dHMoeydTb21lVGVzdCc6IHsnbWV0cmljcyc6IHsnVGltZSc6IFsnVG90YWwnXX0sICd0ZXN0cyc6
IHsKKyAgICAgICAgICAgICAgICAnU3ViVGVzdDEnOiB7J21ldHJpY3MnOiB7J1RpbWUnOiB7J2N1
cnJlbnQnOiBbMSwgMiwgM119fX0sCisgICAgICAgICAgICAgICAgJ1N1YlRlc3QyJzogeydtZXRy
aWNzJzogeydUaW1lJzogeydjdXJyZW50JzogWzQsIDUsIDYsIDddfX19fX19KQorCisgICAgICAg
IHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleHAoVHlwZUVycm9yLCByJyJUaW1lIiBtZXRyaWMg
b2YgIlNvbWVUZXN0IiBoYWQgYSBtaXNtYXRjaGluZyBzdWJ0ZXN0IHZhbHVlcycpOgorICAgICAg
ICAgICAgQmVuY2htYXJrUmVzdWx0cy5fbGludF9yZXN1bHRzKHsnU29tZVRlc3QnOiB7J21ldHJp
Y3MnOiB7J1RpbWUnOiBbJ1RvdGFsJ119LCAndGVzdHMnOiB7CisgICAgICAgICAgICAgICAgJ1N1
YlRlc3QxJzogeydtZXRyaWNzJzogeydUaW1lJzogeydjdXJyZW50JzogW1sxLCAyXSwgWzNdXX19
fSwKKyAgICAgICAgICAgICAgICAnU3ViVGVzdDInOiB7J21ldHJpY3MnOiB7J1RpbWUnOiB7J2N1
cnJlbnQnOiBbWzQsIDVdLCBbNiwgN11dfX19fX19KQorCisgICAgICAgIHdpdGggc2VsZi5hc3Nl
cnRSYWlzZXNSZWdleHAoVHlwZUVycm9yLCByJyJUaW1lIiBtZXRyaWMgb2YgIlNvbWVUZXN0IiBo
YWQgbWFsZm9ybWVkIHZhbHVlczogXFsxLCBcWzJcXSwgM1xdJyk6CisgICAgICAgICAgICBCZW5j
aG1hcmtSZXN1bHRzLl9saW50X3Jlc3VsdHMoeydTb21lVGVzdCc6IHsnbWV0cmljcyc6IHsnVGlt
ZSc6IHsnY3VycmVudCc6IFsxLCBbMl0sIDNdfX19fSkKKworICAgICAgICBzZWxmLmFzc2VydFRy
dWUoQmVuY2htYXJrUmVzdWx0cy5fbGludF9yZXN1bHRzKHsnU29tZVRlc3QnOiB7J21ldHJpY3Mn
OiB7J1RpbWUnOiBbJ1RvdGFsJ119LCAndGVzdHMnOiB7CisgICAgICAgICAgICAnU3ViVGVzdDEn
OiB7J21ldHJpY3MnOiB7J1RpbWUnOiB7J2N1cnJlbnQnOiBbMSwgMiwgM119fX0sCisgICAgICAg
ICAgICAnU3ViVGVzdDInOiB7J21ldHJpY3MnOiB7J1RpbWUnOiB7J2N1cnJlbnQnOiBbNCwgNSwg
Nl0sICdiYXNlbGluZSc6IFs3XX19fX19fSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEJl
bmNobWFya1Jlc3VsdHMuX2xpbnRfcmVzdWx0cyh7J1NvbWVUZXN0JzogeydtZXRyaWNzJzogeydU
aW1lJzogWydUb3RhbCddfSwgJ3Rlc3RzJzogeworICAgICAgICAgICAgJ1N1YlRlc3QxJzogeydt
ZXRyaWNzJzogeydUaW1lJzogeydjdXJyZW50JzogWzEsIDIsIDNdfX19LAorICAgICAgICAgICAg
J1N1YlRlc3QyJzogeydtZXRyaWNzJzogeydSdW5zJzogeydjdXJyZW50JzogWzQsIDUsIDYsIDdd
fX19fX19KSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoQmVuY2htYXJrUmVzdWx0cy5fbGlu
dF9yZXN1bHRzKHsnU29tZVRlc3QnOiB7J21ldHJpY3MnOiB7J1RpbWUnOiBbJ1RvdGFsJ119LCAn
dGVzdHMnOiB7CisgICAgICAgICAgICAnU3ViVGVzdDEnOiB7J21ldHJpY3MnOiB7J1RpbWUnOiB7
J2N1cnJlbnQnOiBbWzEsIDJdLCBbMywgNF1dfX19LAorICAgICAgICAgICAgJ1N1YlRlc3QyJzog
eydtZXRyaWNzJzogeydUaW1lJzogeydjdXJyZW50JzogW1s1LCA2XSwgWzcsIDhdXX19fX19fSkp
CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3dlYmRyaXZlcl9iZW5jaG1hcmtf
cnVubmVyL2JlbmNobWFya19ydW5uZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3dlYmRy
aXZlcl9iZW5jaG1hcmtfcnVubmVyL2JlbmNobWFya19ydW5uZXIucHkKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTIy
NThmNTAzNzliNWRlZDQ5YWE0ZTNjMDM1MjIyZDY1YmNmZjFjNQotLS0gL2Rldi9udWxsCisrKyBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvd2ViZHJpdmVyX2JlbmNobWFya19ydW5uZXIvYmVuY2ht
YXJrX3J1bm5lci5weQpAQCAtMCwwICsxLDE2NyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisK
K2ltcG9ydCBqc29uCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHNodXRpbAoraW1wb3J0IHNpZ25h
bAoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0
IHRpbWUKK2ltcG9ydCB0eXBlcworaW1wb3J0IG9zCitpbXBvcnQgdXJscGFyc2UKKworZnJvbSB0
aW1lIGltcG9ydCBzbGVlcAorZnJvbSBiZW5jaG1hcmtfYnVpbGRlciBpbXBvcnQgQmVuY2htYXJr
QnVpbGRlcgorZnJvbSBiZW5jaG1hcmtfcmVzdWx0cyBpbXBvcnQgQmVuY2htYXJrUmVzdWx0cwor
JycnZnJvbSBzZWxlbml1bSBpbXBvcnQgd2ViZHJpdmVyCitmcm9tIHNlbGVuaXVtLndlYmRyaXZl
ci5jaHJvbWUub3B0aW9ucyBpbXBvcnQgT3B0aW9ucycnJworZnJvbSBzZWxlbml1bS53ZWJkcml2
ZXIuc3VwcG9ydC51aSBpbXBvcnQgV2ViRHJpdmVyV2FpdAorZnJvbSBicm93c2VyX2RyaXZlci5i
cm93c2VyX2RyaXZlcl9mYWN0b3J5IGltcG9ydCBCcm93c2VyRHJpdmVyRmFjdG9yeQorZnJvbSB1
dGlscyBpbXBvcnQgdGltZW91dAorCisKK19sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVf
XykKKworCitjbGFzcyBCZW5jaG1hcmtSdW5uZXIob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRf
XyhzZWxmLCBwbGFuX2ZpbGUsIGxvY2FsX2NvcHksIGNvdW50X292ZXJyaWRlLCBidWlsZF9kaXIs
IG91dHB1dF9maWxlLCBwbGF0Zm9ybSwgYnJvd3Nlciwgc2NhbGVfdW5pdD1UcnVlLCBkZXZpY2Vf
aWQ9Tm9uZSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHBsYW5fZmlsZSA9IHNlbGYuX2Zp
bmRfcGxhbl9maWxlKHBsYW5fZmlsZSkKKyAgICAgICAgICAgIHdpdGggb3BlbihwbGFuX2ZpbGUs
ICdyJykgYXMgZnA6CisgICAgICAgICAgICAgICAgc2VsZi5fcGxhbl9uYW1lID0gb3MucGF0aC5z
cGxpdChvcy5wYXRoLnNwbGl0ZXh0KHBsYW5fZmlsZSlbMF0pWzFdCisgICAgICAgICAgICAgICAg
c2VsZi5fcGxhbiA9IGpzb24ubG9hZChmcCkKKyAgICAgICAgICAgICAgICBpZiBub3QgJ29wdGlv
bnMnIGluIHNlbGYuX3BsYW46CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BsYW5bJ29wdGlv
bnMnXSA9IHt9CisgICAgICAgICAgICAgICAgaWYgbG9jYWxfY29weToKKyAgICAgICAgICAgICAg
ICAgICAgc2VsZi5fcGxhblsnbG9jYWxfY29weSddID0gbG9jYWxfY29weQorICAgICAgICAgICAg
ICAgIGlmIGNvdW50X292ZXJyaWRlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9wbGFuWydj
b3VudCddID0gY291bnRfb3ZlcnJpZGUKKyAgICAgICAgICAgICAgICBzZWxmLl9icm93c2VyX2Ry
aXZlciA9IEJyb3dzZXJEcml2ZXJGYWN0b3J5LmNyZWF0ZShwbGF0Zm9ybSwgYnJvd3NlcikKKyAg
ICAgICAgICAgICAgICBzZWxmLl9idWlsZF9kaXIgPSBvcy5wYXRoLmFic3BhdGgoYnVpbGRfZGly
KSBpZiBidWlsZF9kaXIgZWxzZSBOb25lCisgICAgICAgICAgICAgICAgc2VsZi5fb3V0cHV0X2Zp
bGUgPSBvdXRwdXRfZmlsZQorICAgICAgICAgICAgICAgIHNlbGYuX3NjYWxlX3VuaXQgPSBzY2Fs
ZV91bml0CisgICAgICAgICAgICAgICAgc2VsZi5fY29uZmlnID0gc2VsZi5fcGxhbi5nZXQoJ2Nv
bmZpZycsIHt9KQorICAgICAgICAgICAgICAgIGlmIGRldmljZV9pZDoKKyAgICAgICAgICAgICAg
ICAgICAgc2VsZi5fY29uZmlnWydkZXZpY2VfaWQnXSA9IGRldmljZV9pZAorICAgICAgICBleGNl
cHQgSU9FcnJvciBhcyBlcnJvcjoKKyAgICAgICAgICAgIF9sb2cuZXJyb3IoJ0NhbiBub3Qgb3Bl
biBwbGFuIGZpbGU6IHtwbGFuX2ZpbGV9IC0gRXJyb3Ige2Vycm9yfScuZm9ybWF0KHBsYW5fZmls
ZT1wbGFuX2ZpbGUsIGVycm9yPWVycm9yKSkKKyAgICAgICAgICAgIHJhaXNlIGVycm9yCisgICAg
ICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIGVycm9yOgorICAgICAgICAgICAgX2xvZy5lcnJvcign
UGxhbiBmaWxlOiB7cGxhbl9maWxlfSBtYXkgbm90IGZvbGxvdyBKU09OIGZvcm1hdCAtIEVycm9y
IHtlcnJvcn0nLmZvcm1hdChwbGFuX2ZpbGU9cGxhbl9maWxlLCBlcnJvcj1lcnJvcikpCisgICAg
ICAgICAgICByYWlzZSBlcnJvcgorCisgICAgZGVmIF9maW5kX3BsYW5fZmlsZShzZWxmLCBwbGFu
X2ZpbGUpOgorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMocGxhbl9maWxlKToKKyAgICAg
ICAgICAgIGFic1BhdGggPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwg
J2RhdGEvcGxhbnMnLCBwbGFuX2ZpbGUpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhh
YnNQYXRoKToKKyAgICAgICAgICAgICAgICByZXR1cm4gYWJzUGF0aAorICAgICAgICAgICAgaWYg
bm90IGFic1BhdGguZW5kc3dpdGgoJy5wbGFuJyk6CisgICAgICAgICAgICAgICAgYWJzUGF0aCAr
PSAnLnBsYW4nCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhhYnNQYXRoKToKKyAgICAg
ICAgICAgICAgICByZXR1cm4gYWJzUGF0aAorICAgICAgICByZXR1cm4gcGxhbl9maWxlCisKKyAg
ICBkZWYgX2dldF9yZXN1bHQoc2VsZiwgZHJpdmVyKToKKyAgICAgICAgcmVzdWx0ID0gZHJpdmVy
LmV4ZWN1dGVfc2NyaXB0KCJyZXR1cm4gd2luZG93LndlYmRyaXZlcl9yZXN1bHRzIikKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIF9ydW5fb25lX3Rlc3Qoc2VsZiwgd2ViX3Jvb3Qs
IHRlc3RfZmlsZSk6CisgICAgICAgIHJlc3VsdCA9IE5vbmUKKyAgICAgICAgdHJ5OgorICAgICAg
ICAgICAgdXJsID0gJ2ZpbGU6Ly8nICsgd2ViX3Jvb3QgKyAnLycgKyBzZWxmLl9wbGFuX25hbWUg
KyAnLycgKyB0ZXN0X2ZpbGUKKyAgICAgICAgICAgIGRyaXZlciA9IHNlbGYuX2Jyb3dzZXJfZHJp
dmVyLmxhdW5jaF91cmwodXJsLCBzZWxmLl9wbGFuWydvcHRpb25zJ10sIHNlbGYuX2J1aWxkX2Rp
cikKKyAgICAgICAgICAgIF9sb2cuaW5mbygnV2FpdGluZyBvbiByZXN1bHRzIGZyb20gd2ViIGJy
b3dzZXInKQorICAgICAgICAgICAgcmVzdWx0ID0gV2ViRHJpdmVyV2FpdChkcml2ZXIsIHNlbGYu
X3BsYW5bJ3RpbWVvdXQnXSwgcG9sbF9mcmVxdWVuY3k9MS4wKS51bnRpbChzZWxmLl9nZXRfcmVz
dWx0KQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5fYnJvd3Nlcl9kcml2ZXIu
Y2xvc2VfYnJvd3NlcnMoKQorCisgICAgICAgIHJldHVybiBqc29uLmxvYWRzKHJlc3VsdCkKKwor
ICAgIGRlZiBfcnVuX2JlbmNobWFyayhzZWxmLCBjb3VudCwgd2ViX3Jvb3QpOgorICAgICAgICBy
ZXN1bHRzID0gW10KKyAgICAgICAgZGVidWdfb3V0cHV0cyA9IFtdCisgICAgICAgIGZvciBpdGVy
YXRpb24gaW4geHJhbmdlKDEsIGNvdW50ICsgMSk6CisgICAgICAgICAgICBfbG9nLmluZm8oJ1N0
YXJ0IHRoZSBpdGVyYXRpb24ge2N1cnJlbnRfaXRlcmF0aW9ufSBvZiB7aXRlcmF0aW9uc30gZm9y
IGN1cnJlbnQgYmVuY2htYXJrJy5mb3JtYXQoY3VycmVudF9pdGVyYXRpb249aXRlcmF0aW9uLCBp
dGVyYXRpb25zPWNvdW50KSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxm
Ll9icm93c2VyX2RyaXZlci5wcmVwYXJlX2VudihzZWxmLl9jb25maWcpCisKKyAgICAgICAgICAg
ICAgICBpZiAnZW50cnlfcG9pbnQnIGluIHNlbGYuX3BsYW46CisgICAgICAgICAgICAgICAgICAg
IHJlc3VsdCA9IHNlbGYuX3J1bl9vbmVfdGVzdCh3ZWJfcm9vdCwgc2VsZi5fcGxhblsnZW50cnlf
cG9pbnQnXSkKKyAgICAgICAgICAgICAgICAgICAgZGVidWdfb3V0cHV0cy5hcHBlbmQocmVzdWx0
LnBvcCgnZGVidWdPdXRwdXQnLCBOb25lKSkKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHJl
c3VsdCkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQocmVzdWx0KQorICAgICAg
ICAgICAgICAgIGVsaWYgJ3Rlc3RfZmlsZXMnIGluIHNlbGYuX3BsYW46CisgICAgICAgICAgICAg
ICAgICAgIHJ1bl9yZXN1bHQgPSB7fQorICAgICAgICAgICAgICAgICAgICBmb3IgdGVzdCBpbiBz
ZWxmLl9wbGFuWyd0ZXN0X2ZpbGVzJ106CisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQg
PSBzZWxmLl9ydW5fb25lX3Rlc3Qod2ViX3Jvb3QsIHRlc3QpCisgICAgICAgICAgICAgICAgICAg
ICAgICBhc3NlcnQocmVzdWx0KQorICAgICAgICAgICAgICAgICAgICAgICAgcnVuX3Jlc3VsdCA9
IHNlbGYuX21lcmdlKHJ1bl9yZXN1bHQsIHJlc3VsdCkKKyAgICAgICAgICAgICAgICAgICAgICAg
IGRlYnVnX291dHB1dHMuYXBwZW5kKHJlc3VsdC5wb3AoJ2RlYnVnT3V0cHV0JywgTm9uZSkpCisK
KyAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQocnVuX3Jlc3VsdCkKKyAgICAgICAg
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ1BsYW4g
ZG9lcyBub3QgY29udGFpbiBlbnRyeV9wb2ludCBvciB0ZXN0X2ZpbGVzJykKKworICAgICAgICAg
ICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzZWxmLl9icm93c2VyX2RyaXZlci5yZXN0b3Jl
X2VudigpCisKKyAgICAgICAgICAgIF9sb2cuaW5mbygnRW5kIHRoZSBpdGVyYXRpb24ge2N1cnJl
bnRfaXRlcmF0aW9ufSBvZiB7aXRlcmF0aW9uc30gZm9yIGN1cnJlbnQgYmVuY2htYXJrJy5mb3Jt
YXQoY3VycmVudF9pdGVyYXRpb249aXRlcmF0aW9uLCBpdGVyYXRpb25zPWNvdW50KSkKKworICAg
ICAgICByZXN1bHRzID0gc2VsZi5fd3JhcChyZXN1bHRzKQorICAgICAgICBvdXRwdXRfZmlsZSA9
IHNlbGYuX291dHB1dF9maWxlIGlmIHNlbGYuX291dHB1dF9maWxlIGVsc2Ugc2VsZi5fcGxhblsn
b3V0cHV0X2ZpbGUnXQorICAgICAgICBzZWxmLl9kdW1wKHNlbGYuX21lcmdlKHsnZGVidWdPdXRw
dXQnOiBkZWJ1Z19vdXRwdXRzfSwgcmVzdWx0cyksIG91dHB1dF9maWxlKQorICAgICAgICBzZWxm
LnNob3dfcmVzdWx0cyhyZXN1bHRzLCBzZWxmLl9zY2FsZV91bml0KQorCisgICAgZGVmIGV4ZWN1
dGUoc2VsZik6CisgICAgICAgIHdpdGggQmVuY2htYXJrQnVpbGRlcihzZWxmLl9wbGFuX25hbWUs
IHNlbGYuX3BsYW4pIGFzIHdlYl9yb290OgorICAgICAgICAgICAgc2VsZi5fcnVuX2JlbmNobWFy
ayhpbnQoc2VsZi5fcGxhblsnY291bnQnXSksIHdlYl9yb290KQorCisgICAgQGNsYXNzbWV0aG9k
CisgICAgZGVmIF9kdW1wKGNscywgcmVzdWx0cywgb3V0cHV0X2ZpbGUpOgorICAgICAgICBfbG9n
LmluZm8oJ0R1bXBpbmcgdGhlIHJlc3VsdHMgdG8gZmlsZSB7b3V0cHV0X2ZpbGV9Jy5mb3JtYXQo
b3V0cHV0X2ZpbGU9b3V0cHV0X2ZpbGUpKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRo
IG9wZW4ob3V0cHV0X2ZpbGUsICd3JykgYXMgZnA6CisgICAgICAgICAgICAgICAganNvbi5kdW1w
KHJlc3VsdHMsIGZwKQorICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlcnJvcjoKKyAgICAgICAg
ICAgIF9sb2cuZXJyb3IoJ0Nhbm5vdCBvcGVuIG91dHB1dCBmaWxlOiB7b3V0cHV0X2ZpbGV9IC0g
RXJyb3I6IHtlcnJvcn0nLmZvcm1hdChvdXRwdXRfZmlsZT1vdXRwdXRfZmlsZSwgZXJyb3I9ZXJy
b3IpKQorICAgICAgICAgICAgX2xvZy5lcnJvcignUmVzdWx0cyBhcmU6XG4ge3Jlc3VsdH0nLmZv
cm1hdChyZXN1bHQ9anNvbi5kdW1wcyhyZXN1bHRzKSkpCisKKyAgICBAY2xhc3NtZXRob2QKKyAg
ICBkZWYgX3dyYXAoY2xzLCBkaWN0cyk6CisgICAgICAgIF9sb2cuZGVidWcoJ01lcmdpbmcgZm9s
bG93aW5nIHJlc3VsdHM6XG57cmVzdWx0c30nLmZvcm1hdChyZXN1bHRzPWpzb24uZHVtcHMoZGlj
dHMpKSkKKyAgICAgICAgaWYgbm90IGRpY3RzOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAg
ICAgICAgcmV0ID0ge30KKyAgICAgICAgZm9yIGRpYyBpbiBkaWN0czoKKyAgICAgICAgICAgIHJl
dCA9IGNscy5fbWVyZ2UocmV0LCBkaWMpCisgICAgICAgIF9sb2cuZGVidWcoJ1Jlc3VsdHMgYWZ0
ZXIgbWVyZ2luZzpcbntyZXN1bHR9Jy5mb3JtYXQocmVzdWx0PWpzb24uZHVtcHMocmV0KSkpCisg
ICAgICAgIHJldHVybiByZXQKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfbWVyZ2UoY2xz
LCBhLCBiKToKKyAgICAgICAgYXNzZXJ0KGlzaW5zdGFuY2UoYSwgdHlwZShiKSkpCisgICAgICAg
IGFyZ190eXBlID0gdHlwZShhKQorICAgICAgICAjIHNwZWNpYWwgaGFuZGxlIGZvciBsaXN0IHR5
cGUsIGFuZCBzaG91bGQgYmUgaGFuZGxlIGJlZm9yZSBlcXVhbCBjaGVjaworICAgICAgICBpZiBh
cmdfdHlwZSA9PSB0eXBlcy5MaXN0VHlwZSBhbmQgbGVuKGEpIGFuZCAodHlwZShhWzBdKSA9PSB0
eXBlcy5TdHJpbmdUeXBlIG9yIHR5cGUoYVswXSkgPT0gdHlwZXMuVW5pY29kZVR5cGUpOgorICAg
ICAgICAgICAgcmV0dXJuIGEKKyAgICAgICAgaWYgYXJnX3R5cGUgPT0gdHlwZXMuRGljdFR5cGU6
CisgICAgICAgICAgICByZXN1bHQgPSB7fQorICAgICAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4g
YS5pdGVtcygpOgorICAgICAgICAgICAgICAgIGlmIGtleSBpbiBiOgorICAgICAgICAgICAgICAg
ICAgICByZXN1bHRba2V5XSA9IGNscy5fbWVyZ2UodmFsdWUsIGJba2V5XSkKKyAgICAgICAgICAg
ICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZXN1bHRba2V5XSA9IHZhbHVlCisgICAg
ICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBiLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgaWYg
a2V5IG5vdCBpbiByZXN1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtrZXldID0gdmFs
dWUKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQKKyAgICAgICAgIyBmb3Igb3RoZXIgdHlwZXMK
KyAgICAgICAgcmV0dXJuIGEgKyBiCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2hvd19y
ZXN1bHRzKGNscywgcmVzdWx0cywgc2NhbGVfdW5pdD1UcnVlKToKKyAgICAgICAgcmVzdWx0cyA9
IEJlbmNobWFya1Jlc3VsdHMocmVzdWx0cykKKyAgICAgICAgcHJpbnQgcmVzdWx0cy5mb3JtYXQo
c2NhbGVfdW5pdCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvd2ViZHJpdmVy
X2JlbmNobWFya19ydW5uZXIvYnJvd3Nlcl9kcml2ZXIvX19pbml0X18ucHkgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L3dlYmRyaXZlcl9iZW5jaG1hcmtfcnVubmVyL2Jyb3dzZXJfZHJpdmVyL19f
aW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZhMzNkZDU5MDMwNjQ5MDk2ZjI3NjVjOTlhNTRkMTRlMTc3
ZWQyZjAKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3dlYmRyaXZl
cl9iZW5jaG1hcmtfcnVubmVyL2Jyb3dzZXJfZHJpdmVyL19faW5pdF9fLnB5CkBAIC0wLDAgKzEs
MjkgQEAKKyMgUmVxdWlyZWQgZm9yIFB5dGhvbiB0byBzZWFyY2ggdGhpcyBkaXJlY3RvcnkgZm9y
IG1vZHVsZSBmaWxlcworCisjIEtlZXAgdGhpcyBmaWxlIGZyZWUgb2YgYW55IGNvZGUgb3IgaW1w
b3J0IHN0YXRlbWVudHMgdGhhdCBjb3VsZAorIyBjYXVzZSBlaXRoZXIgYW4gZXJyb3IgdG8gb2Nj
dXIgb3IgYSBsb2cgbWVzc2FnZSB0byBiZSBsb2dnZWQuCisjIFRoaXMgZW5zdXJlcyB0aGF0IGNh
bGxpbmcgY29kZSBjYW4gaW1wb3J0IGluaXRpYWxpemF0aW9uIGNvZGUgZnJvbQorIyB3ZWJraXRw
eSBiZWZvcmUgYW55IGVycm9ycyBvciBsb2cgbWVzc2FnZXMgZHVlIHRvIGNvZGUgaW4gdGhpcyBm
aWxlLgorIyBJbml0aWFsaXphdGlvbiBjb2RlIGNhbiBpbmNsdWRlIHRoaW5ncyBsaWtlIHZlcnNp
b24tY2hlY2tpbmcgY29kZSBhbmQKKyMgbG9nZ2luZyBjb25maWd1cmF0aW9uIGNvZGUuCisjCisj
IFdlIGRvIG5vdCBleGVjdXRlIGFueSB2ZXJzaW9uLWNoZWNraW5nIGNvZGUgb3IgbG9nZ2luZyBj
b25maWd1cmF0aW9uCisjIGNvZGUgaW4gdGhpcyBmaWxlIHNvIHRoYXQgY2FsbGVycyBjYW4gb3B0
LWluIGFzIHRoZXkgd2FudC4gIFRoaXMgYWxzbworIyBhbGxvd3MgZGlmZmVyZW50IGNhbGxlcnMg
dG8gY2hvb3NlIGRpZmZlcmVudCBpbml0aWFsaXphdGlvbiBjb2RlLAorIyBhcyBuZWNlc3Nhcnku
CitpbXBvcnQgb3MKKworZnJvbSB3ZWJraXRweS5iZW5jaG1hcmtfcnVubmVyLnV0aWxzIGltcG9y
dCBsb2FkX3N1YmNsYXNzZXMKK2Zyb20gYnJvd3Nlcl9kcml2ZXJfZmFjdG9yeSBpbXBvcnQgQnJv
d3NlckRyaXZlckZhY3RvcnkKKworCitkZWYgYnJvd3Nlcl9kcml2ZXJfbG9hZGVyKGJyb3dzZXJf
ZHJpdmVyX2NsYXNzKToKKyAgICBpZiBicm93c2VyX2RyaXZlcl9jbGFzcy5wbGF0Zm9ybSBhbmQg
YnJvd3Nlcl9kcml2ZXJfY2xhc3MuYnJvd3Nlcl9uYW1lOgorICAgICAgICBCcm93c2VyRHJpdmVy
RmFjdG9yeS5hZGRfYnJvd3Nlcl9kcml2ZXIoYnJvd3Nlcl9kcml2ZXJfY2xhc3MucGxhdGZvcm0s
IGJyb3dzZXJfZHJpdmVyX2NsYXNzLmJyb3dzZXJfbmFtZSwgYnJvd3Nlcl9kcml2ZXJfY2xhc3Mp
CisKKworbG9hZF9zdWJjbGFzc2VzKAorICAgIGRpcm5hbWU9b3MucGF0aC5kaXJuYW1lKG9zLnBh
dGguYWJzcGF0aChfX2ZpbGVfXykpLAorICAgIGJhc2VfY2xhc3NfbmFtZT0nQnJvd3NlckRyaXZl
cicsCisgICAgYmFzZV9jbGFzc19maWxlPSdicm93c2VyX2RyaXZlci5weScsCisgICAgbG9hZGVy
PWJyb3dzZXJfZHJpdmVyX2xvYWRlcikKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvd2ViZHJpdmVyX2JlbmNobWFya19ydW5uZXIvYnJvd3Nlcl9kcml2ZXIvYnJvd3Nlcl9kcml2
ZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3dlYmRyaXZlcl9iZW5jaG1hcmtfcnVubmVy
L2Jyb3dzZXJfZHJpdmVyL2Jyb3dzZXJfZHJpdmVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc1ZThhNDY0YzAy
MzkzMWIyYTViZjgzNjA3NjliMWExY2NjMWYyYTIKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L3dlYmRyaXZlcl9iZW5jaG1hcmtfcnVubmVyL2Jyb3dzZXJfZHJpdmVy
L2Jyb3dzZXJfZHJpdmVyLnB5CkBAIC0wLDAgKzEsMzAgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhv
bgorCitmcm9tIGFiYyBpbXBvcnQgQUJDTWV0YSwgYWJzdHJhY3RtZXRob2QKKworCitjbGFzcyBC
cm93c2VyRHJpdmVyKG9iamVjdCk6CisgICAgcGxhdGZvcm0gPSBOb25lCisgICAgYnJvd3Nlcl9u
YW1lID0gTm9uZQorCisgICAgX19fbWV0YWNsYXNzX19fID0gQUJDTWV0YQorCisgICAgQGFic3Ry
YWN0bWV0aG9kCisgICAgZGVmIHByZXBhcmVfZW52KHNlbGYsIGNvbmZpZyk6CisgICAgICAgIHBh
c3MKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBsYXVuY2hfdXJsKHNlbGYsIHVybCwg
b3B0aW9ucywgYnJvd3Nlcl9idWlsZF9wYXRoPU5vbmUpOgorICAgICAgICBwYXNzCisKKyAgICBA
YWJzdHJhY3RtZXRob2QKKyAgICBkZWYgYWRkX2FkZGl0aW9uYWxfcmVzdWx0cyhzZWxmLCB0ZXN0
X3VybCwgcmVzdWx0cyk6CisgICAgICAgIHJldHVybiByZXN1bHRzCisKKyAgICBAYWJzdHJhY3Rt
ZXRob2QKKyAgICBkZWYgY2xvc2VfYnJvd3NlcnMoc2VsZik6CisgICAgICAgIHBhc3MKKworICAg
IEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiByZXN0b3JlX2VudihzZWxmKToKKyAgICAgICAgcGFz
cwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS93ZWJkcml2ZXJfYmVuY2htYXJr
X3J1bm5lci9icm93c2VyX2RyaXZlci9icm93c2VyX2RyaXZlcl9mYWN0b3J5LnB5IGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS93ZWJkcml2ZXJfYmVuY2htYXJrX3J1bm5lci9icm93c2VyX2RyaXZl
ci9icm93c2VyX2RyaXZlcl9mYWN0b3J5LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIyN2ZkN2UyOWY4ZGQ3MTI1
ZDc5MzUxMjhjODU0ZDc5MzBkMzJlN2UKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L3dlYmRyaXZlcl9iZW5jaG1hcmtfcnVubmVyL2Jyb3dzZXJfZHJpdmVyL2Jyb3dz
ZXJfZHJpdmVyX2ZhY3RvcnkucHkKQEAgLTAsMCArMSwzNCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0
aG9uCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQganNvbgoraW1wb3J0IG9zCisKKworY2xhc3Mg
QnJvd3NlckRyaXZlckZhY3Rvcnkob2JqZWN0KToKKworICAgIGJyb3dzZXJfZHJpdmVycyA9IHt9
CisgICAgcGxhdGZvcm1zID0gc2V0KCkKKyAgICBicm93c2VycyA9IHNldCgpCisKKyAgICBAY2xh
c3NtZXRob2QKKyAgICBkZWYgYXZhaWxhYmxlX3BsYXRmb3JtcyhjbHMpOgorICAgICAgICByZXR1
cm4gbGlzdChjbHMucGxhdGZvcm1zKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGF2YWls
YWJsZV9icm93c2VycyhjbHMpOgorICAgICAgICByZXR1cm4gbGlzdChjbHMuYnJvd3NlcnMpCisK
KyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgYWRkX2Jyb3dzZXJfZHJpdmVyKGNscywgcGxhdGZv
cm0sIGJyb3dzZXJfbmFtZSwgYnJvd3Nlcl9kcml2ZXJfY2xhc3MpOgorICAgICAgICBjbHMucGxh
dGZvcm1zLmFkZChwbGF0Zm9ybSkKKyAgICAgICAgY2xzLmJyb3dzZXJzLmFkZChicm93c2VyX25h
bWUpCisgICAgICAgIGlmIHBsYXRmb3JtIG5vdCBpbiBjbHMuYnJvd3Nlcl9kcml2ZXJzOgorICAg
ICAgICAgICAgY2xzLmJyb3dzZXJfZHJpdmVyc1twbGF0Zm9ybV0gPSB7fQorICAgICAgICBjbHMu
YnJvd3Nlcl9kcml2ZXJzW3BsYXRmb3JtXVticm93c2VyX25hbWVdID0gYnJvd3Nlcl9kcml2ZXJf
Y2xhc3MKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBjcmVhdGUoY2xzLCBwbGF0Zm9ybSwg
YnJvd3Nlcl9uYW1lKToKKyAgICAgICAgaWYgYnJvd3Nlcl9uYW1lIG5vdCBpbiBjbHMuYnJvd3Nl
cl9kcml2ZXJzW3BsYXRmb3JtXToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkJyb3dz
ZXIgXCIlc1wiIGlzIG5vdCBhdmFpbGFibGUgb24gcGxhdGZvcm0gXCIlc1wiIiAlIChicm93c2Vy
X25hbWUsIHBsYXRmb3JtKSkKKyAgICAgICAgcmV0dXJuIGNscy5icm93c2VyX2RyaXZlcnNbcGxh
dGZvcm1dW2Jyb3dzZXJfbmFtZV0oKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS93ZWJkcml2ZXJfYmVuY2htYXJrX3J1bm5lci9icm93c2VyX2RyaXZlci9saW51eF9icm93c2Vy
X2RyaXZlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvd2ViZHJpdmVyX2JlbmNobWFya19y
dW5uZXIvYnJvd3Nlcl9kcml2ZXIvbGludXhfYnJvd3Nlcl9kcml2ZXIucHkKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZGY1YjdhZmYzOWEwMjMyZjM3ODAxZDU2MzFiNWFlZTZkNzU2Y2IwYwotLS0gL2Rldi9udWxsCisr
KyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvd2ViZHJpdmVyX2JlbmNobWFya19ydW5uZXIvYnJv
d3Nlcl9kcml2ZXIvbGludXhfYnJvd3Nlcl9kcml2ZXIucHkKQEAgLTAsMCArMSwxMjEgQEAKKyMg
Q29weXJpZ2h0IChDKSAyMDE2IElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisj
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24u
CisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1w
b3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCBsb2dnaW5nCitpbXBv
cnQgc3VicHJvY2VzcworZnJvbSBzZWxlbml1bSBpbXBvcnQgd2ViZHJpdmVyCit0cnk6CisgICAg
aW1wb3J0IHBzdXRpbAorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHBhc3MKK2Zyb20gd2Via2l0
cHkuYmVuY2htYXJrX3J1bm5lci51dGlscyBpbXBvcnQgZm9yY2VfcmVtb3ZlCitmcm9tIGJyb3dz
ZXJfZHJpdmVyIGltcG9ydCBCcm93c2VyRHJpdmVyCisKKworX2xvZyA9IGxvZ2dpbmcuZ2V0TG9n
Z2VyKF9fbmFtZV9fKQorCisKK2NsYXNzIExpbnV4QnJvd3NlckRyaXZlcihCcm93c2VyRHJpdmVy
KToKKyAgICBicm93c2VyX25hbWUgPSBOb25lCisgICAgcHJvY2Vzc19zZWFyY2hfbGlzdCA9IFtd
CisgICAgcGxhdGZvcm0gPSAnbGludXgnCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAg
ICAgIHNlbGYucHJvY2Vzc19uYW1lID0gc2VsZi5fZ2V0X2ZpcnN0X2V4ZWN1dGFibGVfcGF0aF9m
cm9tX2xpc3Qoc2VsZi5wcm9jZXNzX3NlYXJjaF9saXN0KQorICAgICAgICBpZiBzZWxmLnByb2Nl
c3NfbmFtZSBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignQ2FudCBmaW5k
IGV4ZWN1dGFibGUgZm9yIGJyb3dzZXIge2Jyb3dzZXJfbmFtZX0uIFNlYXJjaGVkIGxpc3Q6IHti
cm93c2VyX3Byb2Nlc3NfbGlzdH0nLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyb3dzZXJfbmFtZT1zZWxmLmJyb3dzZXJfbmFtZSwgYnJvd3Nlcl9wcm9jZXNzX2xpc3Q9
c2VsZi5wcm9jZXNzX3NlYXJjaF9saXN0KSkKKworICAgIGRlZiBwcmVwYXJlX2VudihzZWxmLCBj
b25maWcpOgorICAgICAgICBzZWxmLl9icm93c2VyX3Byb2Nlc3MgPSBOb25lCisgICAgICAgIHNl
bGYuX2Jyb3dzZXJfYXJndW1lbnRzID0gTm9uZQorICAgICAgICBzZWxmLl90ZW1wX3Byb2ZpbGVk
aXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKKyAgICAgICAgc2VsZi5fdGVzdF9lbnZpcm9uID0gZGlj
dChvcy5lbnZpcm9uKQorICAgICAgICBzZWxmLl90ZXN0X2Vudmlyb25bJ0hPTUUnXSA9IHNlbGYu
X3RlbXBfcHJvZmlsZWRpcgorCisgICAgZGVmIHJlc3RvcmVfZW52KHNlbGYpOgorICAgICAgICBm
b3JjZV9yZW1vdmUoc2VsZi5fdGVtcF9wcm9maWxlZGlyKQorCisgICAgZGVmIGNsb3NlX2Jyb3dz
ZXJzKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9icm93c2VyX3Byb2Nlc3M6CisgICAgICAgICAg
ICBpZiBzZWxmLl9icm93c2VyX3Byb2Nlc3MucG9sbCgpIGlzIE5vbmU6ICAjIHN0aWxsIHJ1bm5p
bmcKKyAgICAgICAgICAgICAgICBpZiAncHN1dGlsJyBpbiBzeXMubW9kdWxlczoKKyAgICAgICAg
ICAgICAgICAgICAgbWFpbl9icm93c2VyX3Byb2Nlc3MgPSBwc3V0aWwuUHJvY2VzcyhzZWxmLl9i
cm93c2VyX3Byb2Nlc3MucGlkKQorICAgICAgICAgICAgICAgICAgICBicm93c2VyX2NoaWxkcmVu
ID0gbWFpbl9icm93c2VyX3Byb2Nlc3MuY2hpbGRyZW4ocmVjdXJzaXZlPVRydWUpCisgICAgICAg
ICAgICAgICAgICAgIF9sb2cuaW5mbygnS2lsbGluZyBicm93c2VyIHticm93c2VyX25hbWV9IHdp
dGggcGlkIHticm93c2VyX3BpZH0gYW5kIGNtZDoge2Jyb3dzZXJfY21kfScuZm9ybWF0KAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyb3dzZXJfbmFtZT1zZWxmLmJyb3dzZXJfbmFt
ZSwgYnJvd3Nlcl9waWQ9c2VsZi5fYnJvd3Nlcl9wcm9jZXNzLnBpZCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicm93c2VyX2NtZD0nICcuam9pbihtYWluX2Jyb3dzZXJfcHJvY2Vz
cy5jbWRsaW5lKCkpLnN0cmlwKCkgb3IgbWFpbl9icm93c2VyX3Byb2Nlc3MubmFtZSgpKSkKKyAg
ICAgICAgICAgICAgICAgICAgbWFpbl9icm93c2VyX3Byb2Nlc3Mua2lsbCgpCisgICAgICAgICAg
ICAgICAgICAgIGZvciBicm93c2VyX2NoaWxkIGluIGJyb3dzZXJfY2hpbGRyZW46CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiBicm93c2VyX2NoaWxkLmlzX3J1bm5pbmcoKToKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfbG9nLmluZm8oJ0tpbGxpbmcgc3RpbGwgYWxpdmUge2Jyb3dz
ZXJfbmFtZX0gY2hpbGQgd2l0aCBwaWQge2Jyb3dzZXJfcGlkfSBhbmQgY21kOiB7YnJvd3Nlcl9j
bWR9Jy5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicm93
c2VyX25hbWU9c2VsZi5icm93c2VyX25hbWUsIGJyb3dzZXJfcGlkPWJyb3dzZXJfY2hpbGQucGlk
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJvd3Nlcl9jbWQ9JyAn
LmpvaW4oYnJvd3Nlcl9jaGlsZC5jbWRsaW5lKCkpLnN0cmlwKCkgb3IgYnJvd3Nlcl9jaGlsZC5u
YW1lKCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyb3dzZXJfY2hpbGQua2lsbCgp
CisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgX2xvZy5pbmZvKCdL
aWxsaW5nIGJyb3dzZXIge2Jyb3dzZXJfbmFtZX0gd2l0aCBwaWQge2Jyb3dzZXJfcGlkfScuZm9y
bWF0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyb3dzZXJfbmFtZT1zZWxmLmJy
b3dzZXJfbmFtZSwgYnJvd3Nlcl9waWQ9c2VsZi5fYnJvd3Nlcl9wcm9jZXNzLnBpZCkpCisgICAg
ICAgICAgICAgICAgICAgIHNlbGYuX2Jyb3dzZXJfcHJvY2Vzcy5raWxsKCkKKyAgICAgICAgICAg
ICAgICAgICAgX2xvZy53YXJuaW5nKCdweXRob24gcHN1dGlsIG5vdCBmb3VuZCwgY2FudCBjaGVj
ayBmb3IgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N0aWxsLWFsaXZlIGJy
b3dzZXIgY2hpbGRzIHRvIGtpbGwuJykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAg
ICAgX2xvZy5lcnJvcignQnJvd3NlciB7YnJvd3Nlcl9uYW1lfSB3aXRoIHBpZCB7YnJvd3Nlcl9w
aWR9IGVuZGVkIHByZW1hdHVyZWx5IHdpdGggcmV0dXJuIGNvZGUge2Jyb3dzZXJfcmV0Y29kZX0u
Jy5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJvd3Nlcl9uYW1lPXNlbGYu
YnJvd3Nlcl9uYW1lLCBicm93c2VyX3BpZD1zZWxmLl9icm93c2VyX3Byb2Nlc3MucGlkLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyb3dzZXJfcmV0Y29kZT1zZWxmLl9icm93c2VyX3By
b2Nlc3MucmV0dXJuY29kZSkpCisKKyAgICBkZWYgX2xhdW5jaF9kcml2ZXIoY2xzLCB1cmwsIG9w
dGlvbnMsIGJyb3dzZXJfYnVpbGRfcGF0aCwgZHJpdmVyKToKKyAgICAgICAgX2xvZy5pbmZvKCdM
YXVuY2hpbmcgIiVzIiB3aXRoIHVybCAiJXMiJyAlIChkcml2ZXIubmFtZSwgdXJsKSkKKyAgICAg
ICAgZHJpdmVyLmdldCh1cmwpCisKKyAgICBkZWYgX2dldF9maXJzdF9leGVjdXRhYmxlX3BhdGhf
ZnJvbV9saXN0KHNlbGYsIHNlYXJjaGxpc3QpOgorICAgICAgICBzZWFyY2hwYXRoID0gW29zLnBh
dGguY3VyZGlyXSArIG9zLmVudmlyb25bJ1BBVEgnXS5zcGxpdChvcy5wYXRoc2VwKQorICAgICAg
ICBmb3IgcHJvZ3JhbSBpbiBzZWFyY2hsaXN0OgorICAgICAgICAgICAgZm9yIHBhdGggaW4gc2Vh
cmNocGF0aDoKKyAgICAgICAgICAgICAgICBmdWxscGF0aCA9IG9zLnBhdGguYWJzcGF0aChvcy5w
YXRoLmpvaW4ocGF0aCwgcHJvZ3JhbSkpCisgICAgICAgICAgICAgICAgaWYgIG9zLnBhdGguaXNm
aWxlKGZ1bGxwYXRoKSBhbmQgb3MuYWNjZXNzKGZ1bGxwYXRoLCBvcy5YX09LKToKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZ1bGxwYXRoCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBk
ZWYgX3NjcmVlbl9zaXplKHNlbGYpOgorICAgICAgICAjIGxvYWRfc3ViY2xhc3NlcygpIGZyb20g
X19pbml0X18ucHkgd2lsbCBsb2FkIHRoaXMgZmlsZSB0bworICAgICAgICAjIGNoZWNrIHRoZSBw
bGF0Zm9ybSBkZWZpbmVkLiBEbyBoZXJlIGEgbGF6eSBpbXBvcnQgaW5zdGVhZCBvZgorICAgICAg
ICAjIHRyeWluZyB0byBpbXBvcnQgdGhlIEd0ayBtb2R1bGUgb24gdGhlIGdsb2JhbCBzY29wZSBv
ZiB0aGlzCisgICAgICAgICMgZmlsZSB0byBhdm9pZCBJbXBvcnRFcnJvciBlcnJvcnMgb24gb3Ro
ZXIgcGxhdGZvcm1zLgorICAgICAgICAjIFB5dGhvbiBpbXBvcnRzIGFyZSBjYWNoZWQgYW5kIG9u
bHkgcnVuIG9uY2UsIHNvIHRoaXMgc2hvdWxkIGJlIG9rLgorICAgICAgICBpbXBvcnQgZ2kKKyAg
ICAgICAgZ2kucmVxdWlyZV92ZXJzaW9uKCdHdGsnLCAnMy4wJykKKyAgICAgICAgZ2kucmVxdWly
ZV92ZXJzaW9uKCdHZGsnLCAnMy4wJykKKyAgICAgICAgZnJvbSBnaS5yZXBvc2l0b3J5IGltcG9y
dCBHdGssIEdkaworICAgICAgICBpZiBHdGsuZ2V0X21ham9yX3ZlcnNpb24oKSA9PSAzIGFuZCBH
dGsuZ2V0X21pbm9yX3ZlcnNpb24oKSA8IDIyOgorICAgICAgICAgICAgc2NyZWVuID0gR3RrLldp
bmRvdygpLmdldF9zY3JlZW4oKQorICAgICAgICAgICAgcmV0dXJuIHNjcmVlbi5nZXRfbW9uaXRv
cl9nZW9tZXRyeShzY3JlZW4uZ2V0X3ByaW1hcnlfbW9uaXRvcigpKQorICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgZGlzcGxheSA9IEdkay5EaXNwbGF5LmdldF9kZWZhdWx0KCkKKyAgICAgICAg
ICAgIG1vbml0b3IgPSBkaXNwbGF5LmdldF9wcmltYXJ5X21vbml0b3IoKQorICAgICAgICAgICAg
cmV0dXJuIG1vbml0b3IuZ2V0X2dlb21ldHJ5KCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvd2ViZHJpdmVyX2JlbmNobWFya19ydW5uZXIvYnJvd3Nlcl9kcml2ZXIvbGludXhf
Y2hyb21lX2RyaXZlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvd2ViZHJpdmVyX2JlbmNo
bWFya19ydW5uZXIvYnJvd3Nlcl9kcml2ZXIvbGludXhfY2hyb21lX2RyaXZlci5weQpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi41Yzg1ZmQzZTE1YWViM2M4MjMwZWY2NzNiOGI0OTcxOGY0OTI2MzYyCi0tLSAvZGV2L251
bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS93ZWJkcml2ZXJfYmVuY2htYXJrX3J1bm5l
ci9icm93c2VyX2RyaXZlci9saW51eF9jaHJvbWVfZHJpdmVyLnB5CkBAIC0wLDAgKzEsNDMgQEAK
KyMgQ29weXJpZ2h0IChDKSAyMDE2IElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisj
CisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRp
b24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKwor
ZnJvbSBsaW51eF9icm93c2VyX2RyaXZlciBpbXBvcnQgTGludXhCcm93c2VyRHJpdmVyCitmcm9t
IHNlbGVuaXVtIGltcG9ydCB3ZWJkcml2ZXIKK2Zyb20gc2VsZW5pdW0ud2ViZHJpdmVyLmNocm9t
ZS5vcHRpb25zIGltcG9ydCBPcHRpb25zCisKKworY2xhc3MgTGludXhDaHJvbWVEcml2ZXIoTGlu
dXhCcm93c2VyRHJpdmVyKToKKyAgICBicm93c2VyX25hbWUgPSAnY2hyb21lJworICAgIHByb2Nl
c3Nfc2VhcmNoX2xpc3QgPSBbJ2Nocm9taXVtJywgJ2Nocm9taXVtLWJyb3dzZXInLCAnY2hyb21l
J10KKworICAgIGRlZiBsYXVuY2hfdXJsKHNlbGYsIHVybCwgb3B0aW9ucywgYnJvd3Nlcl9idWls
ZF9wYXRoKToKKyAgICAgICAgb3B0aW9ucyA9IE9wdGlvbnMoKQorICAgICAgICBvcHRpb25zLmFk
ZF9hcmd1bWVudCgiLS1kaXNhYmxlLXdlYi1zZWN1cml0eSIpCisgICAgICAgIG9wdGlvbnMuYWRk
X2FyZ3VtZW50KCItLXVzZXItZGF0YS1kaXIiKQorICAgICAgICBvcHRpb25zLmFkZF9hcmd1bWVu
dCgiLS1kaXNhYmxlLWV4dGVuc2lvbnMiKQorICAgICAgICBvcHRpb25zLmFkZF9hcmd1bWVudCgi
LS1zdGFydC1tYXhpbWl6ZWQiKQorICAgICAgICBkcml2ZXIgPSB3ZWJkcml2ZXIuQ2hyb21lKGNo
cm9tZV9vcHRpb25zPW9wdGlvbnMpCisgICAgICAgIHN1cGVyKExpbnV4Q2hyb21lRHJpdmVyLCBz
ZWxmKS5sYXVuY2hfdXJsKHVybCwgb3B0aW9ucywgYnJvd3Nlcl9idWlsZF9wYXRoLCBkcml2ZXIp
CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3dlYmRyaXZlcl9iZW5jaG1hcmtf
cnVubmVyL2Jyb3dzZXJfZHJpdmVyL2xpbnV4X2ZpcmVmb3hfZHJpdmVyLnB5IGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS93ZWJkcml2ZXJfYmVuY2htYXJrX3J1bm5lci9icm93c2VyX2RyaXZlci9s
aW51eF9maXJlZm94X2RyaXZlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zNDc1ZjAzZWVhZjZjZGJlNTU0YjYx
ZGYzZTE5NGVmZjA0MTYxOGRmCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS93ZWJkcml2ZXJfYmVuY2htYXJrX3J1bm5lci9icm93c2VyX2RyaXZlci9saW51eF9maXJl
Zm94X2RyaXZlci5weQpAQCAtMCwwICsxLDM3IEBACisjIENvcHlyaWdodCAoQykgMjAxNiBJZ2Fs
aWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMKKyMgICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2Zyb20gbGludXhfYnJvd3Nlcl9kcml2ZXIg
aW1wb3J0IExpbnV4QnJvd3NlckRyaXZlcgorZnJvbSBzZWxlbml1bSBpbXBvcnQgd2ViZHJpdmVy
CisKKworY2xhc3MgTGludXhGaXJlZm94RHJpdmVyKExpbnV4QnJvd3NlckRyaXZlcik6CisgICAg
YnJvd3Nlcl9uYW1lID0gJ2ZpcmVmb3gnCisgICAgcHJvY2Vzc19zZWFyY2hfbGlzdCA9IFsnZmly
ZWZveCddCisKKyAgICBkZWYgbGF1bmNoX3VybChzZWxmLCB1cmwsIG9wdGlvbnMsIGJyb3dzZXJf
YnVpbGRfcGF0aCk6CisgICAgICAgIGRyaXZlciA9IHdlYmRyaXZlci5GaXJlZm94KCkKKyAgICAg
ICAgc3VwZXIoTGludXhGaXJlZm94RHJpdmVyLCBzZWxmKS5sYXVuY2hfdXJsKHVybCwgb3B0aW9u
cywgYnJvd3Nlcl9idWlsZF9wYXRoLCBkcml2ZXIpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L3dlYmRyaXZlcl9iZW5jaG1hcmtfcnVubmVyL2Jyb3dzZXJfZHJpdmVyL29zeF9i
cm93c2VyX2RyaXZlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvd2ViZHJpdmVyX2JlbmNo
bWFya19ydW5uZXIvYnJvd3Nlcl9kcml2ZXIvb3N4X2Jyb3dzZXJfZHJpdmVyLnB5Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjk3MDZjNTQ5ZmJiODJhNDA2ODkyM2Q3MjllNTNmMDIzOWNhYTJmZWEKLS0tIC9kZXYvbnVs
bAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3dlYmRyaXZlcl9iZW5jaG1hcmtfcnVubmVy
L2Jyb3dzZXJfZHJpdmVyL29zeF9icm93c2VyX2RyaXZlci5weQpAQCAtMCwwICsxLDQ3IEBACisK
K2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3MKK2ltcG9ydCBzdWJwcm9jZXNzCisKK2Zyb20gYnJv
d3Nlcl9kcml2ZXIgaW1wb3J0IEJyb3dzZXJEcml2ZXIKK2Zyb20gc2VsZW5pdW0gaW1wb3J0IHdl
YmRyaXZlcgorZnJvbSB3ZWJraXRweS5iZW5jaG1hcmtfcnVubmVyLnV0aWxzIGltcG9ydCB3cml0
ZV9kZWZhdWx0cworCisKK19sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKKworCitj
bGFzcyBPU1hCcm93c2VyRHJpdmVyKEJyb3dzZXJEcml2ZXIpOgorICAgIHByb2Nlc3NfbmFtZSA9
IE5vbmUKKyAgICBwbGF0Zm9ybSA9ICdvc3gnCisKKyAgICBkZWYgcHJlcGFyZV9lbnYoc2VsZiwg
Y29uZmlnKToKKyAgICAgICAgc2VsZi5jbG9zZV9icm93c2VycygpCisgICAgICAgIGZyb20gUXVh
cnR6IGltcG9ydCBDR1dhcnBNb3VzZUN1cnNvclBvc2l0aW9uCisgICAgICAgIENHV2FycE1vdXNl
Q3Vyc29yUG9zaXRpb24oKDEwLCAwKSkKKyAgICAgICAgc2VsZi51cGRhdGVkX2RvY2tfYW5pbWF0
aW9uX2RlZmF1bHRzID0gd3JpdGVfZGVmYXVsdHMoJ2NvbS5hcHBsZS5kb2NrJywgJ2xhdW5jaGFu
aW0nLCBGYWxzZSkKKyAgICAgICAgaWYgc2VsZi51cGRhdGVkX2RvY2tfYW5pbWF0aW9uX2RlZmF1
bHRzOgorICAgICAgICAgICAgc2VsZi5fdGVybWluYXRlX3Byb2Nlc3NlcygnRG9jaycpCisKKyAg
ICBkZWYgcmVzdG9yZV9lbnYoc2VsZik6CisgICAgICAgIGlmIHNlbGYudXBkYXRlZF9kb2NrX2Fu
aW1hdGlvbl9kZWZhdWx0czoKKyAgICAgICAgICAgIHdyaXRlX2RlZmF1bHRzKCdjb20uYXBwbGUu
ZG9jaycsICdsYXVuY2hhbmltJywgVHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuX3Rlcm1pbmF0ZV9w
cm9jZXNzZXMoJ0RvY2snKQorCisgICAgZGVmIGNsb3NlX2Jyb3dzZXJzKHNlbGYpOgorICAgICAg
ICBzZWxmLl90ZXJtaW5hdGVfcHJvY2Vzc2VzKHNlbGYucHJvY2Vzc19uYW1lKQorCisgICAgQGNs
YXNzbWV0aG9kCisgICAgZGVmIF9sYXVuY2hfZHJpdmVyKGNscywgYnVpbGRfZGlyLCBhcHBfbmFt
ZSwgdXJsLCBhcmdzLCBkcml2ZXIpOgorICAgICAgICBfbG9nLmluZm8oJ0xhdW5jaGluZyAiJXMi
IHdpdGggdXJsICIlcyInICUgKGRyaXZlci5uYW1lLCB1cmwpKQorICAgICAgICBkcml2ZXIuZ2V0
KHVybCkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfdGVybWluYXRlX3Byb2Nlc3Nlcyhj
bHMsIHByb2Nlc3NfbmFtZSk6CisgICAgICAgIF9sb2cuaW5mbygnQ2xvc2luZyBhbGwgcHJvY2Vz
c2VzIHdpdGggbmFtZSAlcycgJSBwcm9jZXNzX25hbWUpCisgICAgICAgIHN1YnByb2Nlc3MuY2Fs
bChbJy91c3IvYmluL2tpbGxhbGwnLCBwcm9jZXNzX25hbWVdKQorCisgICAgQGNsYXNzbWV0aG9k
CisgICAgZGVmIF9zY3JlZW5fc2l6ZShjbHMpOgorICAgICAgICBmcm9tIEFwcEtpdCBpbXBvcnQg
TlNTY3JlZW4KKyAgICAgICAgcmV0dXJuIE5TU2NyZWVuLm1haW5TY3JlZW4oKS5mcmFtZSgpLnNp
emUKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvd2ViZHJpdmVyX2JlbmNobWFy
a19ydW5uZXIvYnJvd3Nlcl9kcml2ZXIvb3N4X2Nocm9tZV9kcml2ZXIucHkgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L3dlYmRyaXZlcl9iZW5jaG1hcmtfcnVubmVyL2Jyb3dzZXJfZHJpdmVyL29z
eF9jaHJvbWVfZHJpdmVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdmNGZkZjJlOWEwY2M1OTM2ZGU2Mjc3M2I5
MjJlZjg4NDA1MTdmNjgKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L3dlYmRyaXZlcl9iZW5jaG1hcmtfcnVubmVyL2Jyb3dzZXJfZHJpdmVyL29zeF9jaHJvbWVfZHJp
dmVyLnB5CkBAIC0wLDAgKzEsNTMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCitpbXBvcnQg
bG9nZ2luZworaW1wb3J0IG9zCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHRpbWUKKworZnJv
bSBvc3hfYnJvd3Nlcl9kcml2ZXIgaW1wb3J0IE9TWEJyb3dzZXJEcml2ZXIKK2Zyb20gc2VsZW5p
dW0gaW1wb3J0IHdlYmRyaXZlcgorZnJvbSBzZWxlbml1bS53ZWJkcml2ZXIuY2hyb21lLm9wdGlv
bnMgaW1wb3J0IE9wdGlvbnMKKworCitfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18p
CisKKworY2xhc3MgT1NYQ2hyb21lRHJpdmVyKE9TWEJyb3dzZXJEcml2ZXIpOgorICAgIHByb2Nl
c3NfbmFtZSA9ICdHb29nbGUgQ2hyb21lJworICAgIGJyb3dzZXJfbmFtZSA9ICdjaHJvbWUnCisg
ICAgYXBwX25hbWU9J0dvb2dsZSBDaHJvbWUuYXBwJworCisgICAgZGVmIGxhdW5jaF91cmwoc2Vs
ZiwgdXJsLCBvcHRpb25zLCBicm93c2VyX2J1aWxkX3BhdGgpOgorICAgICAgICBvcHRpb25zID0g
T3B0aW9ucygpCisgICAgICAgIG9wdGlvbnMuYWRkX2FyZ3VtZW50KCItLWRpc2FibGUtd2ViLXNl
Y3VyaXR5IikKKyAgICAgICAgb3B0aW9ucy5hZGRfYXJndW1lbnQoIi0tdXNlci1kYXRhLWRpciIp
CisgICAgICAgIG9wdGlvbnMuYWRkX2FyZ3VtZW50KCItLWRpc2FibGUtZXh0ZW5zaW9ucyIpCisg
ICAgICAgIG9wdGlvbnMuYWRkX2FyZ3VtZW50KCctLXdpbmRvdy1zaXplPXt3aWR0aH0se2hlaWdo
dH0nLmZvcm1hdCh3aWR0aD1pbnQoc2VsZi5fc2NyZWVuX3NpemUoKS53aWR0aCksIGhlaWdodD1p
bnQoc2VsZi5fc2NyZWVuX3NpemUoKS5oZWlnaHQpKSkKKyAgICAgICAgaWYgYnJvd3Nlcl9idWls
ZF9wYXRoOgorICAgICAgICAgICAgYXBwX3BhdGggPSBvcy5wYXRoLmpvaW4oYnJvd3Nlcl9idWls
ZF9wYXRoLCBzZWxmLmFwcF9uYW1lKQorICAgICAgICAgICAgYmluYXJ5X3BhdGggPSBvcy5wYXRo
LmpvaW4oYXBwX3BhdGgsICJDb250ZW50cy9NYWNPUyIsIHNlbGYucHJvY2Vzc19uYW1lKQorICAg
ICAgICAgICAgb3B0aW9ucy5iaW5hcnlfbG9jYXRpb24gPSBiaW5hcnlfcGF0aAorICAgICAgICBk
cml2ZXIgPSB3ZWJkcml2ZXIuQ2hyb21lKGNocm9tZV9vcHRpb25zPW9wdGlvbnMpCisgICAgICAg
IHNlbGYuX2xhdW5jaF9kcml2ZXIoYnVpbGRfZGlyPWJyb3dzZXJfYnVpbGRfcGF0aCwgYXBwX25h
bWU9c2VsZi5hcHBfbmFtZSwgdXJsPXVybCwgYXJncz1bJy0tYXJncycsICctLWhvbWVwYWdlJywg
dXJsLCAnLS13aW5kb3ctc2l6ZT17d2lkdGh9LHtoZWlnaHR9Jy5mb3JtYXQod2lkdGg9aW50KHNl
bGYuX3NjcmVlbl9zaXplKCkud2lkdGgpLCBoZWlnaHQ9aW50KHNlbGYuX3NjcmVlbl9zaXplKCku
aGVpZ2h0KSldLCBkcml2ZXI9ZHJpdmVyKQorICAgICAgICByZXR1cm4gZHJpdmVyCisKK2NsYXNz
IE9TWENocm9tZUNhbmFyeURyaXZlcihPU1hCcm93c2VyRHJpdmVyKToKKyAgICBwcm9jZXNzX25h
bWUgPSAnR29vZ2xlIENocm9tZSBDYW5hcnknCisgICAgYnJvd3Nlcl9uYW1lID0gJ2Nocm9tZS1j
YW5hcnknCisgICAgYXBwX25hbWU9J0dvb2dsZSBDaHJvbWUgQ2FuYXJ5LmFwcCcKKworICAgIGRl
ZiBsYXVuY2hfdXJsKHNlbGYsIHVybCwgb3B0aW9ucywgYnJvd3Nlcl9idWlsZF9wYXRoKToKKyAg
ICAgICAgb3B0aW9ucyA9IE9wdGlvbnMoKQorICAgICAgICBvcHRpb25zLmFkZF9hcmd1bWVudCgi
LS1kaXNhYmxlLXdlYi1zZWN1cml0eSIpCisgICAgICAgIG9wdGlvbnMuYWRkX2FyZ3VtZW50KCIt
LXVzZXItZGF0YS1kaXIiKQorICAgICAgICBvcHRpb25zLmFkZF9hcmd1bWVudCgiLS1kaXNhYmxl
LWV4dGVuc2lvbnMiKQorICAgICAgICBvcHRpb25zLmFkZF9hcmd1bWVudCgnLS13aW5kb3ctc2l6
ZT17d2lkdGh9LHtoZWlnaHR9Jy5mb3JtYXQod2lkdGg9aW50KHNlbGYuX3NjcmVlbl9zaXplKCku
d2lkdGgpLCBoZWlnaHQ9aW50KHNlbGYuX3NjcmVlbl9zaXplKCkuaGVpZ2h0KSkpCisgICAgICAg
IGlmIG5vdCBicm93c2VyX2J1aWxkX3BhdGg6CisgICAgICAgICAgICBicm93c2VyX2J1aWxkX3Bh
dGggPSAnL0FwcGxpY2F0aW9ucy8nCisgICAgICAgIGFwcF9wYXRoID0gb3MucGF0aC5qb2luKGJy
b3dzZXJfYnVpbGRfcGF0aCwgc2VsZi5hcHBfbmFtZSkKKyAgICAgICAgYmluYXJ5X3BhdGggPSBv
cy5wYXRoLmpvaW4oYXBwX3BhdGgsICJDb250ZW50cy9NYWNPUyIsIHNlbGYucHJvY2Vzc19uYW1l
KQorICAgICAgICBvcHRpb25zLmJpbmFyeV9sb2NhdGlvbiA9IGJpbmFyeV9wYXRoCisgICAgICAg
IGRyaXZlciA9IHdlYmRyaXZlci5DaHJvbWUoY2hyb21lX29wdGlvbnM9b3B0aW9ucykKKyAgICAg
ICAgc2VsZi5fbGF1bmNoX2RyaXZlcihidWlsZF9kaXI9YnJvd3Nlcl9idWlsZF9wYXRoLCBhcHBf
bmFtZT1zZWxmLmFwcF9uYW1lLCB1cmw9dXJsLCBhcmdzPVsnLS1hcmdzJywgJy0taG9tZXBhZ2Un
LCB1cmwsICctLXdpbmRvdy1zaXplPXt3aWR0aH0se2hlaWdodH0nLmZvcm1hdCh3aWR0aD1pbnQo
c2VsZi5fc2NyZWVuX3NpemUoKS53aWR0aCksIGhlaWdodD1pbnQoc2VsZi5fc2NyZWVuX3NpemUo
KS5oZWlnaHQpKV0sIGRyaXZlcj1kcml2ZXIpCisgICAgICAgIHJldHVybiBkcml2ZXIKZGlmZiAt
LWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvd2ViZHJpdmVyX2JlbmNobWFya19ydW5uZXIv
YnJvd3Nlcl9kcml2ZXIvb3N4X2ZpcmVmb3hfZHJpdmVyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS93ZWJkcml2ZXJfYmVuY2htYXJrX3J1bm5lci9icm93c2VyX2RyaXZlci9vc3hfZmlyZWZv
eF9kcml2ZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2U1NDIzZjE3YTliNGY2YzBkOTVlODU3NmYwODAyZWUw
N2VmZjFmZgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvd2ViZHJp
dmVyX2JlbmNobWFya19ydW5uZXIvYnJvd3Nlcl9kcml2ZXIvb3N4X2ZpcmVmb3hfZHJpdmVyLnB5
CkBAIC0wLDAgKzEsNDUgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCitpbXBvcnQgbG9nZ2lu
ZworaW1wb3J0IG9zCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHRpbWUKKworZnJvbSBvc3hf
YnJvd3Nlcl9kcml2ZXIgaW1wb3J0IE9TWEJyb3dzZXJEcml2ZXIKK2Zyb20gc2VsZW5pdW0gaW1w
b3J0IHdlYmRyaXZlcgorZnJvbSBzZWxlbml1bS53ZWJkcml2ZXIuZmlyZWZveC5vcHRpb25zIGlt
cG9ydCBPcHRpb25zCisKKworX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQorCisK
K2NsYXNzIE9TWEZpcmVmb3hEcml2ZXIoT1NYQnJvd3NlckRyaXZlcik6CisgICAgcHJvY2Vzc19u
YW1lID0gJ2ZpcmVmb3gtYmluJworICAgIGJyb3dzZXJfbmFtZSA9ICdmaXJlZm94JworICAgIGFw
cF9uYW1lPSdGaXJlZm94LmFwcCcKKworICAgIGRlZiBsYXVuY2hfdXJsKHNlbGYsIHVybCwgb3B0
aW9ucywgYnJvd3Nlcl9idWlsZF9wYXRoKToKKyAgICAgICAgb3B0aW9ucyA9IE9wdGlvbnMoKQor
ICAgICAgICBpZiBicm93c2VyX2J1aWxkX3BhdGg6CisgICAgICAgICAgICBhcHBfcGF0aCA9IG9z
LnBhdGguam9pbihicm93c2VyX2J1aWxkX3BhdGgsIHNlbGYuYXBwX25hbWUpCisgICAgICAgICAg
ICBiaW5hcnlfcGF0aCA9IG9zLnBhdGguam9pbihhcHBfcGF0aCwgIkNvbnRlbnRzL01hY09TIiwg
c2VsZi5wcm9jZXNzX25hbWUpCisgICAgICAgICAgICBvcHRpb25zLmJpbmFyeV9sb2NhdGlvbiA9
IGJpbmFyeV9wYXRoCisgICAgICAgIGRyaXZlciA9IHdlYmRyaXZlci5GaXJlZm94KGZpcmVmb3hf
b3B0aW9ucz1vcHRpb25zKQorICAgICAgICBzZWxmLl9sYXVuY2hfZHJpdmVyKGJ1aWxkX2Rpcj1i
cm93c2VyX2J1aWxkX3BhdGgsIGFwcF9uYW1lPXNlbGYuYXBwX25hbWUsIHVybD11cmwsIGFyZ3M9
W3VybCwgJy0tYXJncycsICctd2lkdGgnLCBzdHIoaW50KHNlbGYuX3NjcmVlbl9zaXplKCkud2lk
dGgpKSwgJy1oZWlnaHQnLCBzdHIoaW50KHNlbGYuX3NjcmVlbl9zaXplKCkuaGVpZ2h0KSldLCBk
cml2ZXI9ZHJpdmVyKQorICAgICAgICByZXR1cm4gZHJpdmVyCisKK2NsYXNzIE9TWEZpcmVmb3hO
aWdodGx5RHJpdmVyKE9TWEJyb3dzZXJEcml2ZXIpOgorICAgIHByb2Nlc3NfbmFtZSA9ICdmaXJl
Zm94LWJpbicKKyAgICBicm93c2VyX25hbWUgPSAnZmlyZWZveC1uaWdodGx5JworICAgIGFwcF9u
YW1lPSdGaXJlZm94TmlnaHRseS5hcHAnCisKKyAgICBkZWYgbGF1bmNoX3VybChzZWxmLCB1cmws
IG9wdGlvbnMsIGJyb3dzZXJfYnVpbGRfcGF0aCk6CisgICAgICAgIG9wdGlvbnMgPSBPcHRpb25z
KCkKKyAgICAgICAgaWYgbm90IGJyb3dzZXJfYnVpbGRfcGF0aDoKKyAgICAgICAgICAgIGJyb3dz
ZXJfYnVpbGRfcGF0aCA9ICcvQXBwbGljYXRpb25zLycKKyAgICAgICAgYXBwX3BhdGggPSBvcy5w
YXRoLmpvaW4oYnJvd3Nlcl9idWlsZF9wYXRoLCBzZWxmLmFwcF9uYW1lKQorICAgICAgICBiaW5h
cnlfcGF0aCA9IG9zLnBhdGguam9pbihhcHBfcGF0aCwgIkNvbnRlbnRzL01hY09TIiwgc2VsZi5w
cm9jZXNzX25hbWUpCisgICAgICAgIG9wdGlvbnMuYmluYXJ5X2xvY2F0aW9uID0gYmluYXJ5X3Bh
dGgKKyAgICAgICAgZHJpdmVyID0gd2ViZHJpdmVyLkZpcmVmb3goZmlyZWZveF9vcHRpb25zPW9w
dGlvbnMpCisgICAgICAgIHNlbGYuX2xhdW5jaF9kcml2ZXIoYnVpbGRfZGlyPWJyb3dzZXJfYnVp
bGRfcGF0aCwgYXBwX25hbWU9c2VsZi5hcHBfbmFtZSwgdXJsPXVybCwgYXJncz1bdXJsLCAnLS1h
cmdzJywgJy13aWR0aCcsIHN0cihpbnQoc2VsZi5fc2NyZWVuX3NpemUoKS53aWR0aCkpLCAnLWhl
aWdodCcsIHN0cihpbnQoc2VsZi5fc2NyZWVuX3NpemUoKS5oZWlnaHQpKV0sIGRyaXZlcj1kcml2
ZXIpCisgICAgICAgIHJldHVybiBkcml2ZXIKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvd2ViZHJpdmVyX2JlbmNobWFya19ydW5uZXIvYnJvd3Nlcl9kcml2ZXIvb3N4X3NhZmFy
aV9kcml2ZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3dlYmRyaXZlcl9iZW5jaG1hcmtf
cnVubmVyL2Jyb3dzZXJfZHJpdmVyL29zeF9zYWZhcmlfZHJpdmVyLnB5Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc2
MzQzZjQ2M2FlODIxYWZiNjM5NmUyMGNkOTZlNzg0ODI0NDc4ZGYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3dlYmRyaXZlcl9iZW5jaG1hcmtfcnVubmVyL2Jyb3dz
ZXJfZHJpdmVyL29zeF9zYWZhcmlfZHJpdmVyLnB5CkBAIC0wLDAgKzEsNDMgQEAKKyMhL3Vzci9i
aW4vZW52IHB5dGhvbgorCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zCitpbXBvcnQgcmUKK2lt
cG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgdGltZQorCitmcm9tIG9zeF9icm93c2VyX2RyaXZlciBp
bXBvcnQgT1NYQnJvd3NlckRyaXZlcgorZnJvbSBzZWxlbml1bSBpbXBvcnQgd2ViZHJpdmVyCitm
cm9tIHdlYmtpdHB5LmJlbmNobWFya19ydW5uZXIudXRpbHMgaW1wb3J0IGZvcmNlX3JlbW92ZQor
CisKK19sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKKworCitjbGFzcyBPU1hTYWZh
cmlEcml2ZXIoT1NYQnJvd3NlckRyaXZlcik6CisgICAgcHJvY2Vzc19uYW1lID0gJ1NhZmFyaScK
KyAgICBicm93c2VyX25hbWUgPSAnc2FmYXJpJworCisgICAgZGVmIHByZXBhcmVfZW52KHNlbGYs
IGNvbmZpZyk6CisgICAgICAgIHNlbGYuX3NhZmFyaV9wcm9jZXNzID0gTm9uZQorICAgICAgICBz
dXBlcihPU1hTYWZhcmlEcml2ZXIsIHNlbGYpLnByZXBhcmVfZW52KGNvbmZpZykKKyAgICAgICAg
Zm9yY2VfcmVtb3ZlKG9zLnBhdGguam9pbihvcy5wYXRoLmV4cGFuZHVzZXIoJ34nKSwgJ0xpYnJh
cnkvU2F2ZWQgQXBwbGljYXRpb24gU3RhdGUvY29tLmFwcGxlLlNhZmFyaS5zYXZlZFN0YXRlJykp
CisgICAgICAgIGZvcmNlX3JlbW92ZShvcy5wYXRoLmpvaW4ob3MucGF0aC5leHBhbmR1c2VyKCd+
JyksICdMaWJyYXJ5L1NhZmFyaS9MYXN0U2Vzc2lvbi5wbGlzdCcpKQorICAgICAgICBzZWxmLl9t
YXhpbWl6ZV93aW5kb3coKQorCisgICAgZGVmIGxhdW5jaF91cmwoc2VsZiwgdXJsLCBvcHRpb25z
LCBicm93c2VyX2J1aWxkX3BhdGgpOgorICAgICAgICBkcml2ZXIgPSB3ZWJkcml2ZXIuU2FmYXJp
KHF1aWV0PUZhbHNlKQorICAgICAgICBzZWxmLl9sYXVuY2hfZHJpdmVyKGJ1aWxkX2Rpcj1icm93
c2VyX2J1aWxkX3BhdGgsIGFwcF9uYW1lPSJTYWZhcmkuYXBwIiwgdXJsPXVybCwgYXJncz1bIi1I
b21lUGFnZSIsICJhYm91dDpibGFuayIsICItV2FybkFib3V0RnJhdWR1bGVudFdlYnNpdGVzIiwg
IjAiLCAiLUV4dGVuc2lvbnNFbmFibGVkIiwgIjAiLCAiLVNob3dTdGF0dXNCYXIiLCAiMCIsICIt
TmV3V2luZG93QmVoYXZpb3IiLCAiMSIsICItTmV3VGFiQmVoYXZpb3IiLCAiMSJdLCBkcml2ZXI9
ZHJpdmVyKQorICAgICAgICByZXR1cm4gZHJpdmVyCisKKyAgICBkZWYgY2xvc2VfYnJvd3NlcnMo
c2VsZik6CisgICAgICAgIHN1cGVyKE9TWFNhZmFyaURyaXZlciwgc2VsZikuY2xvc2VfYnJvd3Nl
cnMoKQorICAgICAgICBpZiBzZWxmLl9zYWZhcmlfcHJvY2VzcyBhbmQgc2VsZi5fc2FmYXJpX3By
b2Nlc3MucmV0dXJuY29kZToKKyAgICAgICAgICAgIHN5cy5leGl0KCdCcm93c2VyIGNyYXNoZWQg
d2l0aCBleGl0Y29kZSAlZCcgJSBzZWxmLl9wcm9jZXNzLnJldHVybmNvZGUpCisKKyAgICBAY2xh
c3NtZXRob2QKKyAgICBkZWYgX21heGltaXplX3dpbmRvdyhjbHMpOgorICAgICAgICB0cnk6Cisg
ICAgICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX2NhbGwoWycvdXNyL2Jpbi9kZWZhdWx0cycsICd3
cml0ZScsICdjb20uYXBwbGUuU2FmYXJpJywgJ05TV2luZG93IEZyYW1lIEJyb3dzZXJXaW5kb3dG
cmFtZScsICcgJy5qb2luKFsnMCcsICcwJywgc3RyKGNscy5fc2NyZWVuX3NpemUoKS53aWR0aCks
IHN0cihjbHMuX3NjcmVlbl9zaXplKCkuaGVpZ2h0KV0gKiAyKV0pCisgICAgICAgIGV4Y2VwdCBF
eGNlcHRpb24gYXMgZXJyb3I6CisgICAgICAgICAgICBfbG9nLmVycm9yKCdSZXNldCBzYWZhcmkg
d2luZG93IHNpemUgZmFpbGVkIC0gRXJyb3I6IHt9Jy5mb3JtYXQoZXJyb3IpKQpkaWZmIC0tZ2l0
IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS93ZWJkcml2ZXJfYmVuY2htYXJrX3J1bm5lci9kYXRh
L3BhdGNoZXMvQVJFUy02LXdkLnBhdGNoIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS93ZWJkcml2
ZXJfYmVuY2htYXJrX3J1bm5lci9kYXRhL3BhdGNoZXMvQVJFUy02LXdkLnBhdGNoCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmFjOThhMWI0MDQ2YTNiMDljZTcwYTJhNTIyNjBkYmRmMDM0MTcyYmYKLS0tIC9kZXYvbnVs
bAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3dlYmRyaXZlcl9iZW5jaG1hcmtfcnVubmVy
L2RhdGEvcGF0Y2hlcy9BUkVTLTYtd2QucGF0Y2gKQEAgLTAsMCArMSwzNiBAQAorZGlmZiAtLWdp
dCBhL2RyaXZlci5qcyBiL2RyaXZlci5qcworaW5kZXggMjYzOTQwOTM3NTguLmY2NDk2Zjk3MGVl
IDEwMDY0NAorLS0tIGEvZHJpdmVyLmpzCisrKysgYi9kcml2ZXIuanMKK0BAIC0xMzYsNiArMTM2
LDE4IEBAIGNsYXNzIERyaXZlciB7CisgICAgICAgICB0aGlzLl9iZW5jaG1hcmsgPSB0aGlzLl9p
dGVyYXRvciA/IHRoaXMuX2l0ZXJhdG9yLm5leHQoKS52YWx1ZSA6IG51bGw7CisgICAgICAgICBp
ZiAoIXRoaXMuX2JlbmNobWFyaykgeworICAgICAgICAgICAgIGlmICghdGhpcy5fbnVtSXRlcmF0
aW9ucykgeworKworKyAgICAgICAgICAgICAgICBsZXQgdGVzdHMgPSB7fTsKKysgICAgICAgICAg
ICAgICAgZm9yIChsZXQgW2JlbmNobWFyaywgcmVzdWx0c10gb2YgdGhpcy5fYmVuY2htYXJrcykg
eworKyAgICAgICAgICAgICAgICAgICAgbGV0IHN1YnRlc3RzID0ge307CisrICAgICAgICAgICAg
ICAgICAgICBmb3IgKGxldCBzdWJSZXN1bHROYW1lIG9mIFJlc3VsdHMuc3ViUmVzdWx0cykKKysg
ICAgICAgICAgICAgICAgICAgICAgICBzdWJ0ZXN0c1tzdWJSZXN1bHROYW1lXSA9IHsibWV0cmlj
cyI6IHsiVGltZSI6IHsiY3VycmVudCI6IHJlc3VsdHNbc3ViUmVzdWx0TmFtZV0uX2RhdGF9fX07
CisrICAgICAgICAgICAgICAgICAgICB0ZXN0c1tiZW5jaG1hcmsubmFtZV0gPSB7Im1ldHJpY3Mi
OiB7IlRpbWUiIDogWyJHZW9tZXRyaWMiXX0sICJ0ZXN0cyI6IHN1YnRlc3RzfTsKKysgICAgICAg
ICAgICAgICAgfQorKworKyAgICAgICAgICAgICAgICBsZXQgY29udGVudCA9IEpTT04uc3RyaW5n
aWZ5KHsiQVJFUy02IjogeyJtZXRyaWNzIiA6IHsiVGltZSIgOiBbIkdlb21ldHJpYyJdfSwgInRl
c3RzIiA6IHRlc3RzfX0pOworKyAgICAgICAgICAgICAgICB3aW5kb3cud2ViZHJpdmVyX3Jlc3Vs
dHMgPSBjb250ZW50OworKworICAgICAgICAgICAgICAgICBpZiAoaXNJbkJyb3dzZXIpIHsKKyAg
ICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0YXR1c0NlbGwuaW5uZXJIVE1MID0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAodGhpcy5faGFkRXJyb3JzID8gIkZhaWx1cmVzIGVuY291bnRlcmVk
ISIgOiAiUmVzdGFydCIpOworZGlmZiAtLWdpdCBhL2luZGV4Lmh0bWwgYi9pbmRleC5odG1sCitp
bmRleCAyMzA2NTdiYWMyNC4uZmI3NDBmN2YwNmQgMTAwNjQ0CistLS0gYS9pbmRleC5odG1sCisr
KysgYi9pbmRleC5odG1sCitAQCAtMTEsNiArMTEsOCBAQAorICAgICAgICAgZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoImVycm9yIikuaW5uZXJIVE1MID0gIkVSUk9SOiAiICsgdXJsICsgIjoiICsg
bGluZU51bWJlciArICI6ICIgKyBtZXNzYWdlOworICAgICB9CisKKysgICAgd2luZG93Lm9ubG9h
ZCA9ICgpID0+IHsgc2V0VGltZW91dCgoKSA9PiBkcml2ZXIuc3RhcnQoOCksIDMwMDApOyB9Cisr
CisgICAgIGNvbnN0IGlzSW5Ccm93c2VyID0gdHJ1ZTsKKyAgICAgPC9zY3JpcHQ+CisgICAgIDxz
Y3JpcHQgc3JjPSJkcml2ZXIuanMiPjwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS93ZWJkcml2ZXJfYmVuY2htYXJrX3J1bm5lci9kYXRhL3BhdGNoZXMvQ29udGVu
dEFuaW1hdGlvbi13ZC5wYXRjaCBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvd2ViZHJpdmVyX2Jl
bmNobWFya19ydW5uZXIvZGF0YS9wYXRjaGVzL0NvbnRlbnRBbmltYXRpb24td2QucGF0Y2gKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uOWI1MjRmYjM1NjgwNjg3NmZmYWFhOWJmZmJhZWE3M2E2ODA1MjA1YQotLS0gL2Rl
di9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvd2ViZHJpdmVyX2JlbmNobWFya19y
dW5uZXIvZGF0YS9wYXRjaGVzL0NvbnRlbnRBbmltYXRpb24td2QucGF0Y2gKQEAgLTAsMCArMSwx
ODggQEAKK2RpZmYgLS1naXQgYS9jc3MtYWNjZWxlcmF0ZWQtYW5pbWF0aW9uLmh0bWwgYi9jc3Mt
YWNjZWxlcmF0ZWQtYW5pbWF0aW9uLmh0bWwKK2luZGV4IDUxYWIzMTc4YWRkZDQ5YjNkOWExOWIw
MzQ3OWQ1OWJlNmFhYmYwMGIuLmZkNjM3YmM0MjBjNzUxYjY5NWFmYTg0Y2MwNWVjOWIyNTgwMGYx
YWQgMTAwNjQ0CistLS0gYS9jc3MtYWNjZWxlcmF0ZWQtYW5pbWF0aW9uLmh0bWwKKysrKyBiL2Nz
cy1hY2NlbGVyYXRlZC1hbmltYXRpb24uaHRtbAorQEAgLTE4NSw5ICsxODUsNDIgQEAKKyAgICAg
ICAgIGZ1bmN0aW9uIHNldHVwQW5pbWF0aW9uKCkKKyAgICAgICAgIHsKKyAgICAgICAgICAgICBt
YWtlUGFydGljbGVzKCk7CisrCisrICAgICAgICAgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rp
b24oKSB7CisrICAgICAgICAgICAgICAgIGxvY2F0aW9uLmhhc2ggPSAnZG9uZSc7CisrICAgICAg
ICAgICAgfSwgMTAwMDApCisrICAgICAgICB9CisrCisrICAgICAgICBmdW5jdGlvbiBoYXNoQ2hh
bmdlZCgpCisrICAgICAgICB7CisrICAgICAgICAgICAgaWYgKGxvY2F0aW9uLmhhc2ggPT09ICcj
c3VibWl0JykKKysgICAgICAgICAgICAgICAgc3VibWl0UmVzdWx0cygpOworKyAgICAgICAgfQor
KworKyAgICAgICAgZnVuY3Rpb24gc3VibWl0UmVzdWx0cygpCisrICAgICAgICB7CisrICAgICAg
ICAgICAgdmFyIHJlc3VsdHMgPSB7CisrICAgICAgICAgICAgICAgICdjb250ZW50LWFuaW1hdGlv
bicgOiB7CisrICAgICAgICAgICAgICAgICAgICAnbWV0cmljcycgOiB7CisrICAgICAgICAgICAg
ICAgICAgICAgICAgJ0ZyYW1lUmF0ZScgOiBbJ0FyaXRobWV0aWMnXQorKyAgICAgICAgICAgICAg
ICAgICAgfSwKKysgICAgICAgICAgICAgICAgICAgICd0ZXN0cycgOiB7CisrICAgICAgICAgICAg
ICAgICAgICAgICAgJ2Nzcy1hY2NlbGVyYXRlZC1hbmltYXRpb24nIDogeworKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAnbWV0cmljcycgOiB7CisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAnRnJhbWVSYXRlJyA6IHsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAnY3VycmVudCcgOiBbJzxuYXRpdmVfZnJhbWVyYXRlPiddIC8vIDxuYXRpdmVfZnJhbWVy
YXRlPiBpcyByZXBsYWNlZCBieSBhIGZyYW1lcmF0ZSBjb21wdXRlZCBpbiBuYXRpdmUgY29kZQor
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisrICAgICAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICAg
ICAgfQorKyAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgfTsKKysgICAgICAgICAgICB2
YXIgcmVzdWx0c1N0cmluZyA9IEpTT04uc3RyaW5naWZ5KHJlc3VsdHMpOworKyAgICAgICAgICAg
IHdpbmRvdy53ZWJkcml2ZXJfcmVzdWx0cyA9IHJlc3VsdHNTdHJpbmc7CisgICAgICAgICB9Cisg
CisgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIHNldHVwQW5pbWF0aW9u
LCBmYWxzZSk7CisrICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiaGFzaGNoYW5nZSIs
IGhhc2hDaGFuZ2VkLCBmYWxzZSk7CisgICAgIDwvc2NyaXB0PgorIDwvaGVhZD4KKyA8Ym9keT4K
K2RpZmYgLS1naXQgYS9jc3MtYW5pbWF0aW9uLmh0bWwgYi9jc3MtYW5pbWF0aW9uLmh0bWwKK2lu
ZGV4IGFkYWUxOWNiMDE4ZWQxY2E5M2ZkNmI0Y2RhODAwMDIzNDg0ODJmYzMuLjhmMWUyOTkzM2Zh
YTEzNTg2ZGJmOTdiNzg3NDAyNDg1NGZiZjIxNDcgMTAwNjQ0CistLS0gYS9jc3MtYW5pbWF0aW9u
Lmh0bWwKKysrKyBiL2Nzcy1hbmltYXRpb24uaHRtbAorQEAgLTE2Nyw5ICsxNjcsNDIgQEAKKyAg
ICAgICAgIGZ1bmN0aW9uIHNldHVwQW5pbWF0aW9uKCkKKyAgICAgICAgIHsKKyAgICAgICAgICAg
ICBtYWtlUGFydGljbGVzKCk7CisrICAgICAgICAgICAgCisrICAgICAgICAgICAgd2luZG93LnNl
dFRpbWVvdXQoZnVuY3Rpb24oKSB7CisrICAgICAgICAgICAgICAgIGxvY2F0aW9uLmhhc2ggPSAn
ZG9uZSc7CisrICAgICAgICAgICAgfSwgMTAwMDApCisrICAgICAgICB9CisrICAgICAgICAKKysg
ICAgICAgIGZ1bmN0aW9uIGhhc2hDaGFuZ2VkKCkKKysgICAgICAgIHsKKysgICAgICAgICAgICBp
ZiAobG9jYXRpb24uaGFzaCA9PT0gJyNzdWJtaXQnKQorKyAgICAgICAgICAgICAgICBzdWJtaXRS
ZXN1bHRzKCk7CisrICAgICAgICB9CisrCisrICAgICAgICBmdW5jdGlvbiBzdWJtaXRSZXN1bHRz
KCkKKysgICAgICAgIHsKKysgICAgICAgICAgICB2YXIgcmVzdWx0cyA9IHsKKysgICAgICAgICAg
ICAgICAgJ2NvbnRlbnQtYW5pbWF0aW9uJyA6IHsKKysgICAgICAgICAgICAgICAgICAgICdtZXRy
aWNzJyA6IHsKKysgICAgICAgICAgICAgICAgICAgICAgICAnRnJhbWVSYXRlJyA6IFsnQXJpdGht
ZXRpYyddCisrICAgICAgICAgICAgICAgICAgICB9LAorKyAgICAgICAgICAgICAgICAgICAgJ3Rl
c3RzJyA6IHsKKysgICAgICAgICAgICAgICAgICAgICAgICAnY3NzLWFuaW1hdGlvbicgOiB7Cisr
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtZXRyaWNzJyA6IHsKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICdGcmFtZVJhdGUnIDogeworKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICdjdXJyZW50JyA6IFsnPG5hdGl2ZV9mcmFtZXJhdGU+J10gLy8gPG5h
dGl2ZV9mcmFtZXJhdGU+IGlzIHJlcGxhY2VkIGJ5IGEgZnJhbWVyYXRlIGNvbXB1dGVkIGluIG5h
dGl2ZSBjb2RlCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgICAgICAgICB9CisrICAgICAg
ICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICB9OworKyAg
ICAgICAgICAgIHZhciByZXN1bHRzU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkocmVzdWx0cyk7Cisr
ICAgICAgICAgICAgd2luZG93LndlYmRyaXZlcl9yZXN1bHRzID0gcmVzdWx0c1N0cmluZzsKKyAg
ICAgICAgIH0KKyAgICAgICAgIAorICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xv
YWQnLCBzZXR1cEFuaW1hdGlvbiwgZmFsc2UpOworKyAgICAgICAgd2luZG93LmFkZEV2ZW50TGlz
dGVuZXIoImhhc2hjaGFuZ2UiLCBoYXNoQ2hhbmdlZCwgZmFsc2UpOworICAgICA8L3NjcmlwdD4K
KyA8L2hlYWQ+CisgPGJvZHk+CitkaWZmIC0tZ2l0IGEvcmFmLWFuaW1hdGlvbi5odG1sIGIvcmFm
LWFuaW1hdGlvbi5odG1sCitpbmRleCAwOWU3MmYyMjJmY2FmZGZhMDU0YTJkNWEzN2IxZGNjOWVj
YTA5NmNhLi5kYmYxOGU3MmRlOTg4MGMyOGQ5ZmJmOWZhMTU2YjQ5NDliYjZhNmNmIDEwMDY0NAor
LS0tIGEvcmFmLWFuaW1hdGlvbi5odG1sCisrKysgYi9yYWYtYW5pbWF0aW9uLmh0bWwKK0BAIC0x
OTUsOSArMTk1LDQyIEBACisgICAgICAgICB7CisgICAgICAgICAgICAgbWFrZVBhcnRpY2xlcygp
OworICAgICAgICAgICAgIGFuaW1hdGUoKTsKKysKKysgICAgICAgICAgICB3aW5kb3cuc2V0VGlt
ZW91dChmdW5jdGlvbigpIHsKKysgICAgICAgICAgICAgICAgbG9jYXRpb24uaGFzaCA9ICdkb25l
JzsKKysgICAgICAgICAgICB9LCAxMDAwMCkKKysgICAgICAgIH0KKysKKysgICAgICAgIGZ1bmN0
aW9uIGhhc2hDaGFuZ2VkKCkKKysgICAgICAgIHsKKysgICAgICAgICAgICBpZiAobG9jYXRpb24u
aGFzaCA9PT0gJyNzdWJtaXQnKQorKyAgICAgICAgICAgICAgICBzdWJtaXRSZXN1bHRzKCk7Cisr
ICAgICAgICB9CisrCisrICAgICAgICBmdW5jdGlvbiBzdWJtaXRSZXN1bHRzKCkKKysgICAgICAg
IHsKKysgICAgICAgICAgICB2YXIgcmVzdWx0cyA9IHsKKysgICAgICAgICAgICAgICAgJ2NvbnRl
bnQtYW5pbWF0aW9uJyA6IHsKKysgICAgICAgICAgICAgICAgICAgICdtZXRyaWNzJyA6IHsKKysg
ICAgICAgICAgICAgICAgICAgICAgICAnRnJhbWVSYXRlJyA6IFsnQXJpdGhtZXRpYyddCisrICAg
ICAgICAgICAgICAgICAgICB9LAorKyAgICAgICAgICAgICAgICAgICAgJ3Rlc3RzJyA6IHsKKysg
ICAgICAgICAgICAgICAgICAgICAgICAncmFmLWFuaW1hdGlvbicgOiB7CisrICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICdtZXRyaWNzJyA6IHsKKysgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICdGcmFtZVJhdGUnIDogeworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICdjdXJyZW50JyA6IFsnPG5hdGl2ZV9mcmFtZXJhdGU+J10gLy8gPG5hdGl2ZV9mcmFtZXJh
dGU+IGlzIHJlcGxhY2VkIGJ5IGEgZnJhbWVyYXRlIGNvbXB1dGVkIGluIG5hdGl2ZSBjb2RlCisr
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKysgICAgICAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgICAg
ICB9CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICB9OworKyAgICAgICAgICAgIHZh
ciByZXN1bHRzU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkocmVzdWx0cyk7CisrICAgICAgICAgICAg
d2luZG93LndlYmRyaXZlcl9yZXN1bHRzID0gcmVzdWx0c1N0cmluZzsKKyAgICAgICAgIH0KKyAg
ICAgICAgIAorICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBzZXR1cEFu
aW1hdGlvbiwgZmFsc2UpOworKyAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImhhc2hj
aGFuZ2UiLCBoYXNoQ2hhbmdlZCwgZmFsc2UpOworICAgICA8L3NjcmlwdD4KKyA8L2hlYWQ+Cisg
PGJvZHk+CitkaWZmIC0tZ2l0IGEvc3ZnLWFuaW1hdGlvbi5odG1sIGIvc3ZnLWFuaW1hdGlvbi5o
dG1sCitpbmRleCBjMjg2ZDUwY2M3ZTBlNmQ2NGUxYjZmYmQyYmViMzY0MmZlOTBlOTU4Li5mYjIx
ZDUyMmNhMjAwMDIxZDQ1MjU5NWNiZmVkM2RiMjUyYzgwOTI5IDEwMDY0NAorLS0tIGEvc3ZnLWFu
aW1hdGlvbi5odG1sCisrKysgYi9zdmctYW5pbWF0aW9uLmh0bWwKK0BAIC0xNTAsOSArMTUwLDQy
IEBACisgICAgICAgICBmdW5jdGlvbiBzZXR1cEFuaW1hdGlvbigpCisgICAgICAgICB7CisgICAg
ICAgICAgICAgbWFrZVBhcnRpY2xlcygpOworKworKyAgICAgICAgICAgIHdpbmRvdy5zZXRUaW1l
b3V0KGZ1bmN0aW9uKCkgeworKyAgICAgICAgICAgICAgICBsb2NhdGlvbi5oYXNoID0gJ2RvbmUn
OworKyAgICAgICAgICAgIH0sIDEwMDAwKQorKyAgICAgICAgfQorKworKyAgICAgICAgZnVuY3Rp
b24gaGFzaENoYW5nZWQoKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGlmIChsb2NhdGlvbi5o
YXNoID09PSAnI3N1Ym1pdCcpCisrICAgICAgICAgICAgICAgIHN1Ym1pdFJlc3VsdHMoKTsKKysg
ICAgICAgIH0KKysKKysgICAgICAgIGZ1bmN0aW9uIHN1Ym1pdFJlc3VsdHMoKQorKyAgICAgICAg
eworKyAgICAgICAgICAgIHZhciByZXN1bHRzID0geworKyAgICAgICAgICAgICAgICAnY29udGVu
dC1hbmltYXRpb24nIDogeworKyAgICAgICAgICAgICAgICAgICAgJ21ldHJpY3MnIDogeworKyAg
ICAgICAgICAgICAgICAgICAgICAgICdGcmFtZVJhdGUnIDogWydBcml0aG1ldGljJ10KKysgICAg
ICAgICAgICAgICAgICAgIH0sCisrICAgICAgICAgICAgICAgICAgICAndGVzdHMnIDogeworKyAg
ICAgICAgICAgICAgICAgICAgICAgICdzdmctYW5pbWF0aW9uJyA6IHsKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJ21ldHJpY3MnIDogeworKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJ0ZyYW1lUmF0ZScgOiB7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJ2N1cnJlbnQnIDogWyc8bmF0aXZlX2ZyYW1lcmF0ZT4nXSAvLyA8bmF0aXZlX2ZyYW1lcmF0
ZT4gaXMgcmVwbGFjZWQgYnkgYSBmcmFtZXJhdGUgY29tcHV0ZWQgaW4gbmF0aXZlIGNvZGUKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQorKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgICAg
IH0KKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgIH07CisrICAgICAgICAgICAgdmFy
IHJlc3VsdHNTdHJpbmcgPSBKU09OLnN0cmluZ2lmeShyZXN1bHRzKTsKKysgICAgICAgICAgICB3
aW5kb3cud2ViZHJpdmVyX3Jlc3VsdHMgPSByZXN1bHRzU3RyaW5nOworICAgICAgICAgfQorICAg
ICAgICAgCisgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIHNldHVwQW5p
bWF0aW9uLCBmYWxzZSk7CisrICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiaGFzaGNo
YW5nZSIsIGhhc2hDaGFuZ2VkLCBmYWxzZSk7CisgICAgIDwvc2NyaXB0PgorIDwvaGVhZD4KKyA8
Ym9keT4KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvd2ViZHJpdmVyX2JlbmNo
bWFya19ydW5uZXIvZGF0YS9wYXRjaGVzL0Ryb21hZW8td2QucGF0Y2ggYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L3dlYmRyaXZlcl9iZW5jaG1hcmtfcnVubmVyL2RhdGEvcGF0Y2hlcy9Ecm9tYWVv
LXdkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc0ZWI5ODE3NGMwN2ZmNmEyYzIyNzY2NzJjM2MzYTQ4NjEx
ZGY4NzAKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3dlYmRyaXZl
cl9iZW5jaG1hcmtfcnVubmVyL2RhdGEvcGF0Y2hlcy9Ecm9tYWVvLXdkLnBhdGNoCkBAIC0wLDAg
KzEsNzI3OCBAQAorZGlmZiAtLWdpdCBhL3dlYi9hamF4L2xpYnMvZG9qby8xLjYuMS9kb2pvL2Rv
am8ueGQuanMgYi93ZWIvYWpheC9saWJzL2Rvam8vMS42LjEvZG9qby9kb2pvLnhkLmpzCituZXcg
ZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMmEyYjcwMQorLS0tIC9kZXYvbnVsbAor
KysrIGIvd2ViL2FqYXgvbGlicy9kb2pvLzEuNi4xL2Rvam8vZG9qby54ZC5qcworQEAgLTAsMCAr
MSwxNCBAQAorKy8qCisrCUNvcHlyaWdodCAoYykgMjAwNC0yMDExLCBUaGUgRG9qbyBGb3VuZGF0
aW9uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisrCUF2YWlsYWJsZSB2aWEgQWNhZGVtaWMgRnJlZSBM
aWNlbnNlID49IDIuMSBPUiB0aGUgbW9kaWZpZWQgQlNEIGxpY2Vuc2UuCisrCXNlZTogaHR0cDov
L2Rvam90b29sa2l0Lm9yZy9saWNlbnNlIGZvciBkZXRhaWxzCisrKi8KKysKKysvKgorKwlUaGlz
IGlzIGFuIG9wdGltaXplZCB2ZXJzaW9uIG9mIERvam8sIGJ1aWx0IGZvciBkZXBsb3ltZW50IGFu
ZCBub3QgZm9yCisrCWRldmVsb3BtZW50LiBUbyBnZXQgc291cmNlcyBhbmQgZG9jdW1lbnRhdGlv
biwgcGxlYXNlIHZpc2l0OgorKworKwkJaHR0cDovL2Rvam90b29sa2l0Lm9yZworKyovCisrCisr
KGZ1bmN0aW9uKCl7dmFyIF8xPW51bGw7aWYoKF8xfHwodHlwZW9mIGRqQ29uZmlnIT0idW5kZWZp
bmVkIiYmZGpDb25maWcuc2NvcGVNYXApKSYmKHR5cGVvZiB3aW5kb3chPSJ1bmRlZmluZWQiKSl7
dmFyIF8yPSIiLF8zPSIiLF80PSIiLF81PXt9LF82PXt9O18xPV8xfHxkakNvbmZpZy5zY29wZU1h
cDtmb3IodmFyIGk9MDtpPF8xLmxlbmd0aDtpKyspe3ZhciBfNz1fMVtpXTtfMis9InZhciAiK183
WzBdKyIgPSB7fTsgIitfN1sxXSsiID0gIitfN1swXSsiOyIrXzdbMV0rIi5fc2NvcGVOYW1lID0g
JyIrXzdbMV0rIic7IjtfMys9KGk9PTA/IiI6IiwiKStfN1swXTtfNCs9KGk9PTA/IiI6IiwiKStf
N1sxXTtfNVtfN1swXV09XzdbMV07XzZbXzdbMV1dPV83WzBdO31ldmFsKF8yKyJkb2pvLl9zY29w
ZUFyZ3MgPSBbIitfNCsiXTsiKTtkb2pvLl9zY29wZVByZWZpeEFyZ3M9XzM7ZG9qby5fc2NvcGVQ
cmVmaXg9IihmdW5jdGlvbigiK18zKyIpeyI7ZG9qby5fc2NvcGVTdWZmaXg9In0pKCIrXzQrIiki
O2Rvam8uX3Njb3BlTWFwPV81O2Rvam8uX3Njb3BlTWFwUmV2PV82O30oZnVuY3Rpb24oKXtpZih0
eXBlb2YgdGhpc1sibG9hZEZpcmVidWdDb25zb2xlIl09PSJmdW5jdGlvbiIpe3RoaXNbImxvYWRG
aXJlYnVnQ29uc29sZSJdKCk7fWVsc2V7dGhpcy5jb25zb2xlPXRoaXMuY29uc29sZXx8e307dmFy
IGNuPVsiYXNzZXJ0IiwiY291bnQiLCJkZWJ1ZyIsImRpciIsImRpcnhtbCIsImVycm9yIiwiZ3Jv
dXAiLCJncm91cEVuZCIsImluZm8iLCJwcm9maWxlIiwicHJvZmlsZUVuZCIsInRpbWUiLCJ0aW1l
RW5kIiwidHJhY2UiLCJ3YXJuIiwibG9nIl07dmFyIGk9MCx0bjt3aGlsZSgodG49Y25baSsrXSkp
e2lmKCFjb25zb2xlW3RuXSl7KGZ1bmN0aW9uKCl7dmFyIF84PXRuKyIiO2NvbnNvbGVbXzhdPSgi
bG9nIiBpbiBjb25zb2xlKT9mdW5jdGlvbigpe3ZhciBhPUFycmF5LmFwcGx5KHt9LGFyZ3VtZW50
cyk7YS51bnNoaWZ0KF84KyI6Iik7Y29uc29sZVsibG9nIl0oYS5qb2luKCIgIikpO306ZnVuY3Rp
b24oKXt9O2NvbnNvbGVbXzhdLl9mYWtlPXRydWU7fSkoKTt9fX1pZih0eXBlb2YgZG9qbz09InVu
ZGVmaW5lZCIpe2Rvam89e19zY29wZU5hbWU6ImRvam8iLF9zY29wZVByZWZpeDoiIixfc2NvcGVQ
cmVmaXhBcmdzOiIiLF9zY29wZVN1ZmZpeDoiIixfc2NvcGVNYXA6e30sX3Njb3BlTWFwUmV2Ont9
fTt9dmFyIGQ9ZG9qbztpZih0eXBlb2YgZGlqaXQ9PSJ1bmRlZmluZWQiKXtkaWppdD17X3Njb3Bl
TmFtZToiZGlqaXQifTt9aWYodHlwZW9mIGRvam94PT0idW5kZWZpbmVkIil7ZG9qb3g9e19zY29w
ZU5hbWU6ImRvam94In07fWlmKCFkLl9zY29wZUFyZ3Mpe2QuX3Njb3BlQXJncz1bZG9qbyxkaWpp
dCxkb2pveF07fWQuZ2xvYmFsPXRoaXM7ZC5jb25maWc9e2lzRGVidWc6ZmFsc2UsZGVidWdBdEFs
bENvc3RzOmZhbHNlfTt2YXIgXzk9dHlwZW9mIGRqQ29uZmlnIT0idW5kZWZpbmVkIj9kakNvbmZp
Zzp0eXBlb2YgZG9qb0NvbmZpZyE9InVuZGVmaW5lZCI/ZG9qb0NvbmZpZzpudWxsO2lmKF85KXtm
b3IodmFyIGMgaW4gXzkpe2QuY29uZmlnW2NdPV85W2NdO319ZG9qby5sb2NhbGU9ZC5jb25maWcu
bG9jYWxlO3ZhciBfYT0iJFJldjogMjQ1OTUgJCIubWF0Y2goL1xkKy8pO2Rvam8udmVyc2lvbj17
bWFqb3I6MSxtaW5vcjo2LHBhdGNoOjEsZmxhZzoiIixyZXZpc2lvbjpfYT8rX2FbMF06TmFOLHRv
U3RyaW5nOmZ1bmN0aW9uKCl7d2l0aChkLnZlcnNpb24pe3JldHVybiBtYWpvcisiLiIrbWlub3Ir
Ii4iK3BhdGNoK2ZsYWcrIiAoIityZXZpc2lvbisiKSI7fX19O2lmKHR5cGVvZiBPcGVuQWpheCE9
InVuZGVmaW5lZCIpe09wZW5BamF4Lmh1Yi5yZWdpc3RlckxpYnJhcnkoZG9qby5fc2NvcGVOYW1l
LCJodHRwOi8vZG9qb3Rvb2xraXQub3JnIixkLnZlcnNpb24udG9TdHJpbmcoKSk7fXZhciBfYixf
YyxfZD17fTtmb3IodmFyIGkgaW4ge3RvU3RyaW5nOjF9KXtfYj1bXTticmVhazt9ZG9qby5fZXh0
cmFOYW1lcz1fYj1fYnx8WyJoYXNPd25Qcm9wZXJ0eSIsInZhbHVlT2YiLCJpc1Byb3RvdHlwZU9m
IiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJ0b0xvY2FsZVN0cmluZyIsInRvU3RyaW5nIiwiY29u
c3RydWN0b3IiXTtfYz1fYi5sZW5ndGg7ZG9qby5fbWl4aW49ZnVuY3Rpb24oX2UsX2Ype3ZhciBf
MTAscyxpO2ZvcihfMTAgaW4gX2Ype3M9X2ZbXzEwXTtpZighKF8xMCBpbiBfZSl8fChfZVtfMTBd
IT09cyYmKCEoXzEwIGluIF9kKXx8X2RbXzEwXSE9PXMpKSl7X2VbXzEwXT1zO319aWYoX2MmJl9m
KXtmb3IoaT0wO2k8X2M7KytpKXtfMTA9X2JbaV07cz1fZltfMTBdO2lmKCEoXzEwIGluIF9lKXx8
KF9lW18xMF0hPT1zJiYoIShfMTAgaW4gX2QpfHxfZFtfMTBdIT09cykpKXtfZVtfMTBdPXM7fX19
cmV0dXJuIF9lO307ZG9qby5taXhpbj1mdW5jdGlvbihvYmosXzExKXtpZighb2JqKXtvYmo9e307
fWZvcih2YXIgaT0xLGw9YXJndW1lbnRzLmxlbmd0aDtpPGw7aSsrKXtkLl9taXhpbihvYmosYXJn
dW1lbnRzW2ldKTt9cmV0dXJuIG9iajt9O2Rvam8uX2dldFByb3A9ZnVuY3Rpb24oXzEyLF8xMyxf
MTQpe3ZhciBvYmo9XzE0fHxkLmdsb2JhbDtmb3IodmFyIGk9MCxwO29iaiYmKHA9XzEyW2ldKTtp
Kyspe2lmKGk9PTAmJmQuX3Njb3BlTWFwW3BdKXtwPWQuX3Njb3BlTWFwW3BdO31vYmo9KHAgaW4g
b2JqP29ialtwXTooXzEzP29ialtwXT17fTp1bmRlZmluZWQpKTt9cmV0dXJuIG9iajt9O2Rvam8u
c2V0T2JqZWN0PWZ1bmN0aW9uKF8xNSxfMTYsXzE3KXt2YXIgXzE4PV8xNS5zcGxpdCgiLiIpLHA9
XzE4LnBvcCgpLG9iaj1kLl9nZXRQcm9wKF8xOCx0cnVlLF8xNyk7cmV0dXJuIG9iaiYmcD8ob2Jq
W3BdPV8xNik6dW5kZWZpbmVkO307ZG9qby5nZXRPYmplY3Q9ZnVuY3Rpb24oXzE5LF8xYSxfMWIp
e3JldHVybiBkLl9nZXRQcm9wKF8xOS5zcGxpdCgiLiIpLF8xYSxfMWIpO307ZG9qby5leGlzdHM9
ZnVuY3Rpb24oXzFjLG9iail7cmV0dXJuIGQuZ2V0T2JqZWN0KF8xYyxmYWxzZSxvYmopIT09dW5k
ZWZpbmVkO307ZG9qb1siZXZhbCJdPWZ1bmN0aW9uKF8xZCl7cmV0dXJuIGQuZ2xvYmFsLmV2YWw/
ZC5nbG9iYWwuZXZhbChfMWQpOmV2YWwoXzFkKTt9O2QuZGVwcmVjYXRlZD1kLmV4cGVyaW1lbnRh
bD1mdW5jdGlvbigpe307fSkoKTsoZnVuY3Rpb24oKXt2YXIgZD1kb2pvLF8xZTtkLm1peGluKGQs
e19sb2FkZWRNb2R1bGVzOnt9LF9pbkZsaWdodENvdW50OjAsX2hhc1Jlc291cmNlOnt9LF9tb2R1
bGVQcmVmaXhlczp7ZG9qbzp7bmFtZToiZG9qbyIsdmFsdWU6Ii4ifSxkb2g6e25hbWU6ImRvaCIs
dmFsdWU6Ii4uL3V0aWwvZG9oIn0sdGVzdHM6e25hbWU6InRlc3RzIix2YWx1ZToidGVzdHMifX0s
X21vZHVsZUhhc1ByZWZpeDpmdW5jdGlvbihfMWYpe3ZhciBtcD1kLl9tb2R1bGVQcmVmaXhlczty
ZXR1cm4gISEobXBbXzFmXSYmbXBbXzFmXS52YWx1ZSk7fSxfZ2V0TW9kdWxlUHJlZml4OmZ1bmN0
aW9uKF8yMCl7dmFyIG1wPWQuX21vZHVsZVByZWZpeGVzO2lmKGQuX21vZHVsZUhhc1ByZWZpeChf
MjApKXtyZXR1cm4gbXBbXzIwXS52YWx1ZTt9cmV0dXJuIF8yMDt9LF9sb2FkZWRVcmxzOltdLF9w
b3N0TG9hZDpmYWxzZSxfbG9hZGVyczpbXSxfdW5sb2FkZXJzOltdLF9sb2FkTm90aWZ5aW5nOmZh
bHNlfSk7ZG9qby5fbG9hZFVyaUFuZENoZWNrPWZ1bmN0aW9uKHVyaSxfMjEsY2Ipe3ZhciBvaz1m
YWxzZTt0cnl7b2s9ZC5fbG9hZFVyaSh1cmksY2IpO31jYXRjaChlKXtjb25zb2xlLmVycm9yKCJm
YWlsZWQgbG9hZGluZyAiK3VyaSsiIHdpdGggZXJyb3I6ICIrZSk7fXJldHVybiAhIShvayYmZC5f
bG9hZGVkTW9kdWxlc1tfMjFdKTt9O2Rvam8ubG9hZGVkPWZ1bmN0aW9uKCl7ZC5fbG9hZE5vdGlm
eWluZz10cnVlO2QuX3Bvc3RMb2FkPXRydWU7dmFyIG1sbD1kLl9sb2FkZXJzO2QuX2xvYWRlcnM9
W107Zm9yKHZhciB4PTA7eDxtbGwubGVuZ3RoO3grKyl7bWxsW3hdKCk7fWQuX2xvYWROb3RpZnlp
bmc9ZmFsc2U7aWYoZC5fcG9zdExvYWQmJmQuX2luRmxpZ2h0Q291bnQ9PTAmJm1sbC5sZW5ndGgp
e2QuX2NhbGxMb2FkZWQoKTt9fTtkb2pvLnVubG9hZGVkPWZ1bmN0aW9uKCl7dmFyIG1sbD1kLl91
bmxvYWRlcnM7d2hpbGUobWxsLmxlbmd0aCl7KG1sbC5wb3AoKSkoKTt9fTtkLl9vbnRvPWZ1bmN0
aW9uKGFycixvYmosZm4pe2lmKCFmbil7YXJyLnB1c2gob2JqKTt9ZWxzZXtpZihmbil7dmFyIF8y
Mj0odHlwZW9mIGZuPT0ic3RyaW5nIik/b2JqW2ZuXTpmbjthcnIucHVzaChmdW5jdGlvbigpe18y
Mi5jYWxsKG9iaik7fSk7fX19O2Rvam8ucmVhZHk9ZG9qby5hZGRPbkxvYWQ9ZnVuY3Rpb24ob2Jq
LF8yMyl7ZC5fb250byhkLl9sb2FkZXJzLG9iaixfMjMpO2lmKGQuX3Bvc3RMb2FkJiZkLl9pbkZs
aWdodENvdW50PT0wJiYhZC5fbG9hZE5vdGlmeWluZyl7ZC5fY2FsbExvYWRlZCgpO319O3ZhciBk
Y2E9ZC5jb25maWcuYWRkT25Mb2FkO2lmKGRjYSl7ZC5hZGRPbkxvYWRbKGRjYSBpbnN0YW5jZW9m
IEFycmF5PyJhcHBseSI6ImNhbGwiKV0oZCxkY2EpO31kb2pvLl9tb2R1bGVzTG9hZGVkPWZ1bmN0
aW9uKCl7aWYoZC5fcG9zdExvYWQpe3JldHVybjt9aWYoZC5faW5GbGlnaHRDb3VudD4wKXtjb25z
b2xlLndhcm4oImZpbGVzIHN0aWxsIGluIGZsaWdodCEiKTtyZXR1cm47fWQuX2NhbGxMb2FkZWQo
KTt9O2Rvam8uX2NhbGxMb2FkZWQ9ZnVuY3Rpb24oKXtpZih0eXBlb2Ygc2V0VGltZW91dD09Im9i
amVjdCJ8fChkLmNvbmZpZy51c2VYRG9tYWluJiZkLmlzT3BlcmEpKXtzZXRUaW1lb3V0KGQuaXNB
SVI/ZnVuY3Rpb24oKXtkLmxvYWRlZCgpO306ZC5fc2NvcGVOYW1lKyIubG9hZGVkKCk7IiwwKTt9
ZWxzZXtkLmxvYWRlZCgpO319O2Rvam8uX2dldE1vZHVsZVN5bWJvbHM9ZnVuY3Rpb24oXzI0KXt2
YXIgXzI1PV8yNC5zcGxpdCgiLiIpO2Zvcih2YXIgaT1fMjUubGVuZ3RoO2k+MDtpLS0pe3ZhciBf
MjY9XzI1LnNsaWNlKDAsaSkuam9pbigiLiIpO2lmKGk9PTEmJiFkLl9tb2R1bGVIYXNQcmVmaXgo
XzI2KSl7XzI1WzBdPSIuLi8iK18yNVswXTt9ZWxzZXt2YXIgXzI3PWQuX2dldE1vZHVsZVByZWZp
eChfMjYpO2lmKF8yNyE9XzI2KXtfMjUuc3BsaWNlKDAsaSxfMjcpO2JyZWFrO319fXJldHVybiBf
MjU7fTtkb2pvLl9nbG9iYWxfb21pdF9tb2R1bGVfY2hlY2s9ZmFsc2U7ZG9qby5sb2FkSW5pdD1m
dW5jdGlvbihfMjgpe18yOCgpO307ZG9qby5fbG9hZE1vZHVsZT1kb2pvLnJlcXVpcmU9ZnVuY3Rp
b24oXzI5LF8yYSl7XzJhPWQuX2dsb2JhbF9vbWl0X21vZHVsZV9jaGVja3x8XzJhO3ZhciBfMmI9
ZC5fbG9hZGVkTW9kdWxlc1tfMjldO2lmKF8yYil7cmV0dXJuIF8yYjt9dmFyIF8yYz1kLl9nZXRN
b2R1bGVTeW1ib2xzKF8yOSkuam9pbigiLyIpKyIuanMiO3ZhciBfMmQ9IV8yYT9fMjk6bnVsbDt2
YXIgb2s9ZC5fbG9hZFBhdGgoXzJjLF8yZCk7aWYoIW9rJiYhXzJhKXt0aHJvdyBuZXcgRXJyb3Io
IkNvdWxkIG5vdCBsb2FkICciK18yOSsiJzsgbGFzdCB0cmllZCAnIitfMmMrIiciKTt9aWYoIV8y
YSYmIWQuX2lzWERvbWFpbil7XzJiPWQuX2xvYWRlZE1vZHVsZXNbXzI5XTtpZighXzJiKXt0aHJv
dyBuZXcgRXJyb3IoInN5bWJvbCAnIitfMjkrIicgaXMgbm90IGRlZmluZWQgYWZ0ZXIgbG9hZGlu
ZyAnIitfMmMrIiciKTt9fXJldHVybiBfMmI7fTtkb2pvLnByb3ZpZGU9ZnVuY3Rpb24oXzJlKXtf
MmU9XzJlKyIiO3JldHVybiAoZC5fbG9hZGVkTW9kdWxlc1tfMmVdPWQuZ2V0T2JqZWN0KF8yZSx0
cnVlKSk7fTtkb2pvLnBsYXRmb3JtUmVxdWlyZT1mdW5jdGlvbihfMmYpe3ZhciBfMzA9XzJmLmNv
bW1vbnx8W107dmFyIF8zMT1fMzAuY29uY2F0KF8yZltkLl9uYW1lXXx8XzJmWyJkZWZhdWx0Il18
fFtdKTtmb3IodmFyIHg9MDt4PF8zMS5sZW5ndGg7eCsrKXt2YXIgXzMyPV8zMVt4XTtpZihfMzIu
Y29uc3RydWN0b3I9PUFycmF5KXtkLl9sb2FkTW9kdWxlLmFwcGx5KGQsXzMyKTt9ZWxzZXtkLl9s
b2FkTW9kdWxlKF8zMik7fX19O2Rvam8ucmVxdWlyZUlmPWZ1bmN0aW9uKF8zMyxfMzQpe2lmKF8z
Mz09PXRydWUpe3ZhciBfMzU9W107Zm9yKHZhciBpPTE7aTxhcmd1bWVudHMubGVuZ3RoO2krKyl7
XzM1LnB1c2goYXJndW1lbnRzW2ldKTt9ZC5yZXF1aXJlLmFwcGx5KGQsXzM1KTt9fTtkb2pvLnJl
cXVpcmVBZnRlcklmPWQucmVxdWlyZUlmO2Rvam8ucmVnaXN0ZXJNb2R1bGVQYXRoPWZ1bmN0aW9u
KF8zNixfMzcpe2QuX21vZHVsZVByZWZpeGVzW18zNl09e25hbWU6XzM2LHZhbHVlOl8zN307fTtp
Zih0eXBlb2YgZG9qby5jb25maWdbInVzZVhEb21haW4iXT09InVuZGVmaW5lZCIpe2Rvam8uY29u
ZmlnLnVzZVhEb21haW49dHJ1ZTt9ZG9qby5yZWdpc3Rlck1vZHVsZVBhdGgoImRvam8iLCJodHRw
Oi8vYWpheC5nb29nbGVhcGlzLmNvbS9hamF4L2xpYnMvZG9qby8xLjYuMS9kb2pvIik7ZG9qby5y
ZWdpc3Rlck1vZHVsZVBhdGgoImRpaml0IiwiaHR0cDovL2FqYXguZ29vZ2xlYXBpcy5jb20vYWph
eC9saWJzL2Rvam8vMS42LjEvZGlqaXQiKTtkb2pvLnJlZ2lzdGVyTW9kdWxlUGF0aCgiZG9qb3gi
LCJodHRwOi8vYWpheC5nb29nbGVhcGlzLmNvbS9hamF4L2xpYnMvZG9qby8xLjYuMS9kb2pveCIp
O2Rvam8ucmVxdWlyZUxvY2FsaXphdGlvbj1mdW5jdGlvbihfMzgsXzM5LF8zYSxfM2Ipe2QucmVx
dWlyZSgiZG9qby5pMThuIik7ZC5pMThuLl9yZXF1aXJlTG9jYWxpemF0aW9uLmFwcGx5KGQuaG9z
dGVudixhcmd1bWVudHMpO307dmFyIG9yZT1uZXcgUmVnRXhwKCJeKChbXjovPyNdKyk6KT8oLy8o
W14vPyNdKikpPyhbXj8jXSopKFxcPyhbXiNdKikpPygjKC4qKSk/JCIpLGlyZT1uZXcgUmVnRXhw
KCJeKCgoW15cXFs6XSspOik/KFteQF0rKUApPyhcXFsoW15cXF1dKylcXF18KFteXFxbOl0qKSko
OihbMC05XSspKT8kIik7ZG9qby5fVXJsPWZ1bmN0aW9uKCl7dmFyIG49bnVsbCxfM2M9YXJndW1l
bnRzLHVyaT1bXzNjWzBdXTtmb3IodmFyIGk9MTtpPF8zYy5sZW5ndGg7aSsrKXtpZighXzNjW2ld
KXtjb250aW51ZTt9dmFyIF8zZD1uZXcgZC5fVXJsKF8zY1tpXSsiIiksXzNlPW5ldyBkLl9Vcmwo
dXJpWzBdKyIiKTtpZihfM2QucGF0aD09IiImJiFfM2Quc2NoZW1lJiYhXzNkLmF1dGhvcml0eSYm
IV8zZC5xdWVyeSl7aWYoXzNkLmZyYWdtZW50IT1uKXtfM2UuZnJhZ21lbnQ9XzNkLmZyYWdtZW50
O31fM2Q9XzNlO31lbHNle2lmKCFfM2Quc2NoZW1lKXtfM2Quc2NoZW1lPV8zZS5zY2hlbWU7aWYo
IV8zZC5hdXRob3JpdHkpe18zZC5hdXRob3JpdHk9XzNlLmF1dGhvcml0eTtpZihfM2QucGF0aC5j
aGFyQXQoMCkhPSIvIil7dmFyIF8zZj1fM2UucGF0aC5zdWJzdHJpbmcoMCxfM2UucGF0aC5sYXN0
SW5kZXhPZigiLyIpKzEpK18zZC5wYXRoO3ZhciBfNDA9XzNmLnNwbGl0KCIvIik7Zm9yKHZhciBq
PTA7ajxfNDAubGVuZ3RoO2orKyl7aWYoXzQwW2pdPT0iLiIpe2lmKGo9PV80MC5sZW5ndGgtMSl7
XzQwW2pdPSIiO31lbHNle180MC5zcGxpY2UoaiwxKTtqLS07fX1lbHNle2lmKGo+MCYmIShqPT0x
JiZfNDBbMF09PSIiKSYmXzQwW2pdPT0iLi4iJiZfNDBbai0xXSE9Ii4uIil7aWYoaj09KF80MC5s
ZW5ndGgtMSkpe180MC5zcGxpY2UoaiwxKTtfNDBbai0xXT0iIjt9ZWxzZXtfNDAuc3BsaWNlKGot
MSwyKTtqLT0yO319fX1fM2QucGF0aD1fNDAuam9pbigiLyIpO319fX11cmk9W107aWYoXzNkLnNj
aGVtZSl7dXJpLnB1c2goXzNkLnNjaGVtZSwiOiIpO31pZihfM2QuYXV0aG9yaXR5KXt1cmkucHVz
aCgiLy8iLF8zZC5hdXRob3JpdHkpO311cmkucHVzaChfM2QucGF0aCk7aWYoXzNkLnF1ZXJ5KXt1
cmkucHVzaCgiPyIsXzNkLnF1ZXJ5KTt9aWYoXzNkLmZyYWdtZW50KXt1cmkucHVzaCgiIyIsXzNk
LmZyYWdtZW50KTt9fXRoaXMudXJpPXVyaS5qb2luKCIiKTt2YXIgcj10aGlzLnVyaS5tYXRjaChv
cmUpO3RoaXMuc2NoZW1lPXJbMl18fChyWzFdPyIiOm4pO3RoaXMuYXV0aG9yaXR5PXJbNF18fChy
WzNdPyIiOm4pO3RoaXMucGF0aD1yWzVdO3RoaXMucXVlcnk9cls3XXx8KHJbNl0/IiI6bik7dGhp
cy5mcmFnbWVudD1yWzldfHwocls4XT8iIjpuKTtpZih0aGlzLmF1dGhvcml0eSE9bil7cj10aGlz
LmF1dGhvcml0eS5tYXRjaChpcmUpO3RoaXMudXNlcj1yWzNdfHxuO3RoaXMucGFzc3dvcmQ9cls0
XXx8bjt0aGlzLmhvc3Q9cls2XXx8cls3XTt0aGlzLnBvcnQ9cls5XXx8bjt9fTtkb2pvLl9Vcmwu
cHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudXJpO307ZG9qby5tb2R1
bGVVcmw9ZnVuY3Rpb24oXzQxLHVybCl7dmFyIGxvYz1kLl9nZXRNb2R1bGVTeW1ib2xzKF80MSku
am9pbigiLyIpO2lmKCFsb2Mpe3JldHVybiBudWxsO31pZihsb2MubGFzdEluZGV4T2YoIi8iKSE9
bG9jLmxlbmd0aC0xKXtsb2MrPSIvIjt9dmFyIF80Mj1sb2MuaW5kZXhPZigiOiIpO2lmKGxvYy5j
aGFyQXQoMCkhPSIvIiYmKF80Mj09LTF8fF80Mj5sb2MuaW5kZXhPZigiLyIpKSl7bG9jPWQuYmFz
ZVVybCtsb2M7fXJldHVybiBuZXcgZC5fVXJsKGxvYyx1cmwpO307fSkoKTtkb2pvLnByb3ZpZGUo
ImRvam8uX2Jhc2UuX2xvYWRlci5sb2FkZXJfeGQiKTtkb2pvLl94ZFJlc2V0PWZ1bmN0aW9uKCl7
ZG9qby5faXNYRG9tYWluPWRvam8uY29uZmlnLnVzZVhEb21haW58fGZhbHNlO2Rvam8uX3hkQ2xl
YXJJbnRlcnZhbCgpO2Rvam8uX3hkSW5GbGlnaHQ9e307ZG9qby5feGRPcmRlcmVkUmVxcz1bXTtk
b2pvLl94ZERlcE1hcD17fTtkb2pvLl94ZENvbnRlbnRzPVtdO2Rvam8uX3hkRGVmTGlzdD1bXTt9
O2Rvam8uX3hkQ2xlYXJJbnRlcnZhbD1mdW5jdGlvbigpe2lmKGRvam8uX3hkVGltZXIpe2NsZWFy
SW50ZXJ2YWwoZG9qby5feGRUaW1lcik7ZG9qby5feGRUaW1lcj0wO319O2Rvam8uX3hkUmVzZXQo
KTtkb2pvLl94ZENyZWF0ZVJlc291cmNlPWZ1bmN0aW9uKF80MyxfNDQsXzQ1KXt2YXIgXzQ2PV80
My5yZXBsYWNlKC8oXC9cKihbXHNcU10qPylcKlwvfFwvXC8oLiopJCkvbWcsIiIpO3ZhciBfNDc9
W107dmFyIF80OD0vZG9qby4ocmVxdWlyZXxyZXF1aXJlSWZ8cHJvdmlkZXxyZXF1aXJlQWZ0ZXJJ
ZnxwbGF0Zm9ybVJlcXVpcmV8cmVxdWlyZUxvY2FsaXphdGlvbilccypcKChbXHdcV10qPylcKS9t
Zzt2YXIgXzQ5O3doaWxlKChfNDk9XzQ4LmV4ZWMoXzQ2KSkhPW51bGwpe2lmKF80OVsxXT09InJl
cXVpcmVMb2NhbGl6YXRpb24iKXtldmFsKF80OVswXSk7fWVsc2V7XzQ3LnB1c2goIlwiIitfNDlb
MV0rIlwiLCAiK180OVsyXSk7fX12YXIgXzRhPVtdO180YS5wdXNoKGRvam8uX3Njb3BlTmFtZSsi
Ll94ZFJlc291cmNlTG9hZGVkKGZ1bmN0aW9uKCIrZG9qby5fc2NvcGVQcmVmaXhBcmdzKyIpe1xu
Iik7dmFyIF80Yj1kb2pvLl94ZEV4dHJhY3RMb2FkSW5pdHMoXzQzKTtpZihfNGIpe180Mz1fNGJb
MF07Zm9yKHZhciBpPTE7aTxfNGIubGVuZ3RoO2krKyl7XzRhLnB1c2goXzRiW2ldKyI7XG4iKTt9
fV80YS5wdXNoKCJyZXR1cm4geyIpO2lmKF80Ny5sZW5ndGg+MCl7XzRhLnB1c2goImRlcGVuZHM6
IFsiKTtmb3IoaT0wO2k8XzQ3Lmxlbmd0aDtpKyspe2lmKGk+MCl7XzRhLnB1c2goIixcbiIpO31f
NGEucHVzaCgiWyIrXzQ3W2ldKyJdIik7fV80YS5wdXNoKCJdLCIpO31fNGEucHVzaCgiXG5kZWZp
bmVSZXNvdXJjZTogZnVuY3Rpb24oIitkb2pvLl9zY29wZVByZWZpeEFyZ3MrIil7Iik7aWYoIWRv
am8uY29uZmlnWyJkZWJ1Z0F0QWxsQ29zdHMiXXx8XzQ0PT0iZG9qby5fYmFzZS5fbG9hZGVyLmxv
YWRlcl9kZWJ1ZyIpe180YS5wdXNoKF80Myk7fV80YS5wdXNoKCJcbn0sIHJlc291cmNlTmFtZTog
JyIrXzQ0KyInLCByZXNvdXJjZVBhdGg6ICciK180NSsiJ307fSk7Iik7cmV0dXJuIF80YS5qb2lu
KCIiKTt9O2Rvam8uX3hkRXh0cmFjdExvYWRJbml0cz1mdW5jdGlvbihfNGMpe3ZhciBfNGQ9L2Rv
am8ubG9hZEluaXRccypcKC9nO180ZC5sYXN0SW5kZXg9MDt2YXIgXzRlPS9bXChcKV0vZztfNGUu
bGFzdEluZGV4PTA7dmFyIF80Zj1bXTt2YXIgXzUwO3doaWxlKChfNTA9XzRkLmV4ZWMoXzRjKSkp
e180ZS5sYXN0SW5kZXg9XzRkLmxhc3RJbmRleDt2YXIgXzUxPTE7dmFyIF81Mjt3aGlsZSgoXzUy
PV80ZS5leGVjKF80YykpKXtpZihfNTJbMF09PSIpIil7XzUxLT0xO31lbHNle181MSs9MTt9aWYo
XzUxPT0wKXticmVhazt9fWlmKF81MSE9MCl7dGhyb3cgInVubWF0Y2hlZCBwYXJlbiBhcm91bmQg
Y2hhcmFjdGVyICIrXzRlLmxhc3RJbmRleCsiIGluOiAiK180Yzt9dmFyIF81Mz1fNGQubGFzdElu
ZGV4LV81MFswXS5sZW5ndGg7XzRmLnB1c2goXzRjLnN1YnN0cmluZyhfNTMsXzRlLmxhc3RJbmRl
eCkpO3ZhciBfNTQ9XzRlLmxhc3RJbmRleC1fNTM7XzRjPV80Yy5zdWJzdHJpbmcoMCxfNTMpK180
Yy5zdWJzdHJpbmcoXzRlLmxhc3RJbmRleCxfNGMubGVuZ3RoKTtfNGQubGFzdEluZGV4PV80ZS5s
YXN0SW5kZXgtXzU0O180ZC5sYXN0SW5kZXg9XzRlLmxhc3RJbmRleDt9aWYoXzRmLmxlbmd0aD4w
KXtfNGYudW5zaGlmdChfNGMpO31yZXR1cm4gKF80Zi5sZW5ndGg/XzRmOm51bGwpO307ZG9qby5f
eGRJc1hEb21haW5QYXRoPWZ1bmN0aW9uKF81NSl7dmFyIF81Nj1fNTUuaW5kZXhPZigiOiIpO3Zh
ciBfNTc9XzU1LmluZGV4T2YoIi8iKTtpZihfNTY+MCYmXzU2PF81N3x8XzU1LmluZGV4T2YoIi8v
Iik9PT0wKXtyZXR1cm4gdHJ1ZTt9ZWxzZXt2YXIgdXJsPWRvam8uYmFzZVVybDtfNTY9dXJsLmlu
ZGV4T2YoIjoiKTtfNTc9dXJsLmluZGV4T2YoIi8iKTtpZih1cmwuaW5kZXhPZigiLy8iKT09PTB8
fChfNTY+MCYmXzU2PF81NyYmKCFsb2NhdGlvbi5ob3N0fHx1cmwuaW5kZXhPZigiaHR0cDovLyIr
bG9jYXRpb24uaG9zdCkhPTApKSl7cmV0dXJuIHRydWU7fX1yZXR1cm4gZmFsc2U7fTtkb2pvLl9s
b2FkUGF0aD1mdW5jdGlvbihfNTgsXzU5LGNiKXt2YXIgXzVhPWRvam8uX3hkSXNYRG9tYWluUGF0
aChfNTgpO2Rvam8uX2lzWERvbWFpbnw9XzVhO3ZhciB1cmk9KChfNTguY2hhckF0KDApPT0iLyJ8
fF81OC5tYXRjaCgvXlx3KzovKSk/IiI6ZG9qby5iYXNlVXJsKStfNTg7dHJ5e3JldHVybiAoKCFf
NTl8fGRvam8uX2lzWERvbWFpbik/ZG9qby5fbG9hZFVyaSh1cmksY2IsXzVhLF81OSk6ZG9qby5f
bG9hZFVyaUFuZENoZWNrKHVyaSxfNTksY2IpKTt9Y2F0Y2goZSl7Y29uc29sZS5lcnJvcihlKTty
ZXR1cm4gZmFsc2U7fX07ZG9qby5feGRDaGFyU2V0PSJ1dGYtOCI7ZG9qby5fbG9hZFVyaT1mdW5j
dGlvbih1cmksY2IsXzViLF81Yyl7aWYoZG9qby5fbG9hZGVkVXJsc1t1cmldKXtyZXR1cm4gMTt9
aWYoZG9qby5faXNYRG9tYWluJiZfNWMmJl81YyE9ImRvam8uaTE4biIpe2Rvam8uX3hkT3JkZXJl
ZFJlcXMucHVzaChfNWMpO2lmKF81Ynx8dXJpLmluZGV4T2YoIi9ubHMvIik9PS0xKXtkb2pvLl94
ZEluRmxpZ2h0W181Y109dHJ1ZTtkb2pvLl9pbkZsaWdodENvdW50Kys7fWlmKCFkb2pvLl94ZFRp
bWVyKXtpZihkb2pvLmlzQUlSKXtkb2pvLl94ZFRpbWVyPXNldEludGVydmFsKGZ1bmN0aW9uKCl7
ZG9qby5feGRXYXRjaEluRmxpZ2h0KCk7fSwxMDApO31lbHNle2Rvam8uX3hkVGltZXI9c2V0SW50
ZXJ2YWwoZG9qby5fc2NvcGVOYW1lKyIuX3hkV2F0Y2hJbkZsaWdodCgpOyIsMTAwKTt9fWRvam8u
X3hkU3RhcnRUaW1lPShuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7fWlmKF81Yil7dmFyIF81ZD11cmku
bGFzdEluZGV4T2YoIi4iKTtpZihfNWQ8PTApe181ZD11cmkubGVuZ3RoLTE7fXZhciBfNWU9dXJp
LnN1YnN0cmluZygwLF81ZCkrIi54ZCI7aWYoXzVkIT11cmkubGVuZ3RoLTEpe181ZSs9dXJpLnN1
YnN0cmluZyhfNWQsdXJpLmxlbmd0aCk7fWlmKGRvam8uaXNBSVIpe181ZT1fNWUucmVwbGFjZSgi
YXBwOi8iLCIvIik7fXZhciBfNWY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7XzVm
LnR5cGU9InRleHQvamF2YXNjcmlwdCI7aWYoZG9qby5feGRDaGFyU2V0KXtfNWYuY2hhcnNldD1k
b2pvLl94ZENoYXJTZXQ7fV81Zi5zcmM9XzVlO2lmKCFkb2pvLmhlYWRFbGVtZW50KXtkb2pvLl9o
ZWFkRWxlbWVudD1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdO2lmKCFk
b2pvLl9oZWFkRWxlbWVudCl7ZG9qby5faGVhZEVsZW1lbnQ9ZG9jdW1lbnQuZ2V0RWxlbWVudHNC
eVRhZ05hbWUoImh0bWwiKVswXTt9fWRvam8uX2hlYWRFbGVtZW50LmFwcGVuZENoaWxkKF81Zik7
fWVsc2V7dmFyIF82MD1kb2pvLl9nZXRUZXh0KHVyaSxudWxsLHRydWUpO2lmKF82MD09bnVsbCl7
cmV0dXJuIDA7fWlmKGRvam8uX2lzWERvbWFpbiYmdXJpLmluZGV4T2YoIi9ubHMvIik9PS0xJiZf
NWMhPSJkb2pvLmkxOG4iKXt2YXIgcmVzPWRvam8uX3hkQ3JlYXRlUmVzb3VyY2UoXzYwLF81Yyx1
cmkpO2Rvam8uZXZhbChyZXMpO31lbHNle2lmKGNiKXtfNjA9IigiK182MCsiKSI7fWVsc2V7XzYw
PWRvam8uX3Njb3BlUHJlZml4K182MCtkb2pvLl9zY29wZVN1ZmZpeDt9dmFyIF82MT1kb2pvWyJl
dmFsIl0oXzYwKyJcclxuLy9AIHNvdXJjZVVSTD0iK3VyaSk7aWYoY2Ipe2NiKF82MSk7fX19ZG9q
by5fbG9hZGVkVXJsc1t1cmldPXRydWU7ZG9qby5fbG9hZGVkVXJscy5wdXNoKHVyaSk7cmV0dXJu
IHRydWU7fTtkb2pvLl94ZFJlc291cmNlTG9hZGVkPWZ1bmN0aW9uKHJlcyl7cmVzPXJlcy5hcHBs
eShkb2pvLmdsb2JhbCxkb2pvLl9zY29wZUFyZ3MpO3ZhciBfNjI9cmVzLmRlcGVuZHM7dmFyIF82
Mz1udWxsO3ZhciBfNjQ9bnVsbDt2YXIgXzY1PVtdO2lmKF82MiYmXzYyLmxlbmd0aD4wKXt2YXIg
ZGVwPW51bGw7dmFyIF82Nj0wO3ZhciBfNjc9ZmFsc2U7Zm9yKHZhciBpPTA7aTxfNjIubGVuZ3Ro
O2krKyl7ZGVwPV82MltpXTtpZihkZXBbMF09PSJwcm92aWRlIil7XzY1LnB1c2goZGVwWzFdKTt9
ZWxzZXtpZighXzYzKXtfNjM9W107fWlmKCFfNjQpe182ND1bXTt9dmFyIF82OD1kb2pvLl94ZFVu
cGFja0RlcGVuZGVuY3koZGVwKTtpZihfNjgucmVxdWlyZXMpe182Mz1fNjMuY29uY2F0KF82OC5y
ZXF1aXJlcyk7fWlmKF82OC5yZXF1aXJlc0FmdGVyKXtfNjQ9XzY0LmNvbmNhdChfNjgucmVxdWly
ZXNBZnRlcik7fX12YXIgXzY5PWRlcFswXTt2YXIgXzZhPV82OS5zcGxpdCgiLiIpO2lmKF82YS5s
ZW5ndGg9PTIpe2Rvam9bXzZhWzBdXVtfNmFbMV1dLmFwcGx5KGRvam9bXzZhWzBdXSxkZXAuc2xp
Y2UoMSkpO31lbHNle2Rvam9bXzY5XS5hcHBseShkb2pvLGRlcC5zbGljZSgxKSk7fX1pZihfNjUu
bGVuZ3RoPT0xJiZfNjVbMF09PSJkb2pvLl9iYXNlLl9sb2FkZXIubG9hZGVyX2RlYnVnIil7cmVz
LmRlZmluZVJlc291cmNlKGRvam8pO31lbHNle3ZhciBfNmI9ZG9qby5feGRDb250ZW50cy5wdXNo
KHtjb250ZW50OnJlcy5kZWZpbmVSZXNvdXJjZSxyZXNvdXJjZU5hbWU6cmVzWyJyZXNvdXJjZU5h
bWUiXSxyZXNvdXJjZVBhdGg6cmVzWyJyZXNvdXJjZVBhdGgiXSxpc0RlZmluZWQ6ZmFsc2V9KS0x
O2ZvcihpPTA7aTxfNjUubGVuZ3RoO2krKyl7ZG9qby5feGREZXBNYXBbXzY1W2ldXT17cmVxdWly
ZXM6XzYzLHJlcXVpcmVzQWZ0ZXI6XzY0LGNvbnRlbnRJbmRleDpfNmJ9O319Zm9yKGk9MDtpPF82
NS5sZW5ndGg7aSsrKXtkb2pvLl94ZEluRmxpZ2h0W182NVtpXV09ZmFsc2U7fX19O2Rvam8uX3hk
TG9hZEZsYXR0ZW5lZEJ1bmRsZT1mdW5jdGlvbihfNmMsXzZkLF82ZSxfNmYpe182ZT1fNmV8fCJy
b290Ijt2YXIgXzcwPWRvam8uaTE4bi5ub3JtYWxpemVMb2NhbGUoXzZlKS5yZXBsYWNlKCItIiwi
XyIpO3ZhciBfNzE9W182YywibmxzIixfNmRdLmpvaW4oIi4iKTt2YXIgXzcyPWRvam9bInByb3Zp
ZGUiXShfNzEpO183MltfNzBdPV82Zjt2YXIgXzczPVtfNmMsXzcwLF82ZF0uam9pbigiLiIpO3Zh
ciBfNzQ9ZG9qby5feGRCdW5kbGVNYXBbXzczXTtpZihfNzQpe2Zvcih2YXIgXzc1IGluIF83NCl7
XzcyW183NV09XzZmO319fTtkb2pvLl94ZEluaXRFeHRyYUxvY2FsZXM9ZnVuY3Rpb24oKXt2YXIg
Xzc2PWRvam8uY29uZmlnLmV4dHJhTG9jYWxlO2lmKF83Nil7aWYoIV83NiBpbnN0YW5jZW9mIEFy
cmF5KXtfNzY9W183Nl07fWRvam8uX3hkUmVxTG9jPWRvam8ueGRSZXF1aXJlTG9jYWxpemF0aW9u
O2Rvam8ueGRSZXF1aXJlTG9jYWxpemF0aW9uPWZ1bmN0aW9uKG0sYixfNzcsXzc4KXtkb2pvLl94
ZFJlcUxvYyhtLGIsXzc3LF83OCk7aWYoXzc3KXtyZXR1cm47fWZvcih2YXIgaT0wO2k8Xzc2Lmxl
bmd0aDtpKyspe2Rvam8uX3hkUmVxTG9jKG0sYixfNzZbaV0sXzc4KTt9fTt9fTtkb2pvLl94ZEJ1
bmRsZU1hcD17fTtkb2pvLnhkUmVxdWlyZUxvY2FsaXphdGlvbj1mdW5jdGlvbihfNzksXzdhLF83
YixfN2Mpe2lmKGRvam8uX3hkSW5pdEV4dHJhTG9jYWxlcyl7ZG9qby5feGRJbml0RXh0cmFMb2Nh
bGVzKCk7ZG9qby5feGRJbml0RXh0cmFMb2NhbGVzPW51bGw7ZG9qby54ZFJlcXVpcmVMb2NhbGl6
YXRpb24uYXBwbHkoZG9qbyxhcmd1bWVudHMpO3JldHVybjt9dmFyIF83ZD1fN2Muc3BsaXQoIiwi
KTt2YXIgXzdlPWRvam8uaTE4bi5ub3JtYWxpemVMb2NhbGUoXzdiKTt2YXIgXzdmPSIiO2Zvcih2
YXIgaT0wO2k8XzdkLmxlbmd0aDtpKyspe2lmKF83ZS5pbmRleE9mKF83ZFtpXSk9PTApe2lmKF83
ZFtpXS5sZW5ndGg+XzdmLmxlbmd0aCl7XzdmPV83ZFtpXTt9fX12YXIgXzgwPV83Zi5yZXBsYWNl
KCItIiwiXyIpO3ZhciBfODE9ZG9qby5nZXRPYmplY3QoW183OSwibmxzIixfN2FdLmpvaW4oIi4i
KSk7aWYoIV84MXx8IV84MVtfODBdKXt2YXIgXzgyPVtfNzksKF84MHx8InJvb3QiKSxfN2FdLmpv
aW4oIi4iKTt2YXIgXzgzPWRvam8uX3hkQnVuZGxlTWFwW184Ml07aWYoIV84Myl7XzgzPWRvam8u
X3hkQnVuZGxlTWFwW184Ml09e307fV84M1tfN2UucmVwbGFjZSgiLSIsIl8iKV09dHJ1ZTtkb2pv
LnJlcXVpcmUoXzc5KyIubmxzIisoXzdmPyIuIitfN2Y6IiIpKyIuIitfN2EpO319O2Rvam8uX3hk
UmVhbFJlcXVpcmVMb2NhbGl6YXRpb249ZG9qby5yZXF1aXJlTG9jYWxpemF0aW9uO2Rvam8ucmVx
dWlyZUxvY2FsaXphdGlvbj1mdW5jdGlvbihfODQsXzg1LF84NixfODcpe3ZhciBfODg9ZG9qby5t
b2R1bGVVcmwoXzg0KS50b1N0cmluZygpO2lmKGRvam8uX3hkSXNYRG9tYWluUGF0aChfODgpKXty
ZXR1cm4gZG9qby54ZFJlcXVpcmVMb2NhbGl6YXRpb24uYXBwbHkoZG9qbyxhcmd1bWVudHMpO31l
bHNle3JldHVybiBkb2pvLl94ZFJlYWxSZXF1aXJlTG9jYWxpemF0aW9uLmFwcGx5KGRvam8sYXJn
dW1lbnRzKTt9fTtkb2pvLl94ZFVucGFja0RlcGVuZGVuY3k9ZnVuY3Rpb24oZGVwKXt2YXIgXzg5
PW51bGw7dmFyIF84YT1udWxsO3N3aXRjaChkZXBbMF0pe2Nhc2UgInJlcXVpcmVJZiI6Y2FzZSAi
cmVxdWlyZUFmdGVySWYiOmlmKGRlcFsxXT09PXRydWUpe184OT1be25hbWU6ZGVwWzJdLGNvbnRl
bnQ6bnVsbH1dO31icmVhaztjYXNlICJwbGF0Zm9ybVJlcXVpcmUiOnZhciBfOGI9ZGVwWzFdO3Zh
ciBfOGM9XzhiWyJjb21tb24iXXx8W107Xzg5PShfOGJbZG9qby5ob3N0ZW52Lm5hbWVfXSk/Xzhj
LmNvbmNhdChfOGJbZG9qby5ob3N0ZW52Lm5hbWVfXXx8W10pOl84Yy5jb25jYXQoXzhiWyJkZWZh
dWx0Il18fFtdKTtpZihfODkpe2Zvcih2YXIgaT0wO2k8Xzg5Lmxlbmd0aDtpKyspe2lmKF84OVtp
XSBpbnN0YW5jZW9mIEFycmF5KXtfODlbaV09e25hbWU6Xzg5W2ldWzBdLGNvbnRlbnQ6bnVsbH07
fWVsc2V7Xzg5W2ldPXtuYW1lOl84OVtpXSxjb250ZW50Om51bGx9O319fWJyZWFrO2Nhc2UgInJl
cXVpcmUiOl84OT1be25hbWU6ZGVwWzFdLGNvbnRlbnQ6bnVsbH1dO2JyZWFrO2Nhc2UgImkxOG4u
X3ByZWxvYWRMb2NhbGl6YXRpb25zIjpkb2pvLmkxOG4uX3ByZWxvYWRMb2NhbGl6YXRpb25zLmFw
cGx5KGRvam8uaTE4bi5fcHJlbG9hZExvY2FsaXphdGlvbnMsZGVwLnNsaWNlKDEpKTticmVhazt9
aWYoZGVwWzBdPT0icmVxdWlyZUFmdGVySWYifHxkZXBbMF09PSJyZXF1aXJlSWYiKXtfOGE9Xzg5
O184OT1udWxsO31yZXR1cm4ge3JlcXVpcmVzOl84OSxyZXF1aXJlc0FmdGVyOl84YX07fTtkb2pv
Ll94ZFdhbGtSZXFzPWZ1bmN0aW9uKCl7dmFyIF84ZD1udWxsO3ZhciByZXE7Zm9yKHZhciBpPTA7
aTxkb2pvLl94ZE9yZGVyZWRSZXFzLmxlbmd0aDtpKyspe3JlcT1kb2pvLl94ZE9yZGVyZWRSZXFz
W2ldO2lmKGRvam8uX3hkRGVwTWFwW3JlcV0pe184ZD1bcmVxXTtfOGRbcmVxXT10cnVlO2Rvam8u
X3hkRXZhbFJlcXMoXzhkKTt9fX07ZG9qby5feGRFdmFsUmVxcz1mdW5jdGlvbihfOGUpe3doaWxl
KF84ZS5sZW5ndGg+MCl7dmFyIHJlcT1fOGVbXzhlLmxlbmd0aC0xXTt2YXIgcmVzPWRvam8uX3hk
RGVwTWFwW3JlcV07dmFyIGksXzhmLF85MDtpZihyZXMpe184Zj1yZXMucmVxdWlyZXM7aWYoXzhm
JiZfOGYubGVuZ3RoPjApe2ZvcihpPTA7aTxfOGYubGVuZ3RoO2krKyl7XzkwPV84ZltpXS5uYW1l
O2lmKF85MCYmIV84ZVtfOTBdKXtfOGUucHVzaChfOTApO184ZVtfOTBdPXRydWU7ZG9qby5feGRF
dmFsUmVxcyhfOGUpO319fXZhciBfOTE9ZG9qby5feGRDb250ZW50c1tyZXMuY29udGVudEluZGV4
XTtpZighXzkxLmlzRGVmaW5lZCl7dmFyIF85Mj1fOTEuY29udGVudDtfOTJbInJlc291cmNlTmFt
ZSJdPV85MVsicmVzb3VyY2VOYW1lIl07XzkyWyJyZXNvdXJjZVBhdGgiXT1fOTFbInJlc291cmNl
UGF0aCJdO2Rvam8uX3hkRGVmTGlzdC5wdXNoKF85Mik7XzkxLmlzRGVmaW5lZD10cnVlO31kb2pv
Ll94ZERlcE1hcFtyZXFdPW51bGw7XzhmPXJlcy5yZXF1aXJlc0FmdGVyO2lmKF84ZiYmXzhmLmxl
bmd0aD4wKXtmb3IoaT0wO2k8XzhmLmxlbmd0aDtpKyspe185MD1fOGZbaV0ubmFtZTtpZihfOTAm
JiFfOGVbXzkwXSl7XzhlLnB1c2goXzkwKTtfOGVbXzkwXT10cnVlO2Rvam8uX3hkRXZhbFJlcXMo
XzhlKTt9fX19XzhlLnBvcCgpO319O2Rvam8uX3hkV2F0Y2hJbkZsaWdodD1mdW5jdGlvbigpe3Zh
ciBfOTM9IiI7dmFyIF85ND0oZG9qby5jb25maWcueGRXYWl0U2Vjb25kc3x8MTUpKjEwMDA7dmFy
IF85NT0oZG9qby5feGRTdGFydFRpbWUrXzk0KTwobmV3IERhdGUoKSkuZ2V0VGltZSgpO2Zvcih2
YXIgXzk2IGluIGRvam8uX3hkSW5GbGlnaHQpe2lmKGRvam8uX3hkSW5GbGlnaHRbXzk2XT09PXRy
dWUpe2lmKF85NSl7XzkzKz1fOTYrIiAiO31lbHNle3JldHVybjt9fX1kb2pvLl94ZENsZWFySW50
ZXJ2YWwoKTtpZihfOTUpe3Rocm93ICJDb3VsZCBub3QgbG9hZCBjcm9zcy1kb21haW4gcmVzb3Vy
Y2VzOiAiK185Mzt9ZG9qby5feGRXYWxrUmVxcygpO3ZhciBfOTc9ZG9qby5feGREZWZMaXN0Lmxl
bmd0aDtmb3IodmFyIGk9MDtpPF85NztpKyspe3ZhciBfOTg9ZG9qby5feGREZWZMaXN0W2ldO2lm
KGRvam8uY29uZmlnWyJkZWJ1Z0F0QWxsQ29zdHMiXSYmXzk4WyJyZXNvdXJjZU5hbWUiXSl7aWYo
IWRvam9bIl94ZERlYnVnUXVldWUiXSl7ZG9qby5feGREZWJ1Z1F1ZXVlPVtdO31kb2pvLl94ZERl
YnVnUXVldWUucHVzaCh7cmVzb3VyY2VOYW1lOl85OC5yZXNvdXJjZU5hbWUscmVzb3VyY2VQYXRo
Ol85OC5yZXNvdXJjZVBhdGh9KTt9ZWxzZXtfOTguYXBwbHkoZG9qby5nbG9iYWwsZG9qby5fc2Nv
cGVBcmdzKTt9fWZvcihpPTA7aTxkb2pvLl94ZENvbnRlbnRzLmxlbmd0aDtpKyspe3ZhciBfOTk9
ZG9qby5feGRDb250ZW50c1tpXTtpZihfOTkuY29udGVudCYmIV85OS5pc0RlZmluZWQpe185OS5j
b250ZW50LmFwcGx5KGRvam8uZ2xvYmFsLGRvam8uX3Njb3BlQXJncyk7fX1kb2pvLl94ZFJlc2V0
KCk7aWYoZG9qb1siX3hkRGVidWdRdWV1ZSJdJiZkb2pvLl94ZERlYnVnUXVldWUubGVuZ3RoPjAp
e2Rvam8uX3hkRGVidWdGaWxlTG9hZGVkKCk7fWVsc2V7ZG9qby5feGROb3RpZnlMb2FkZWQoKTt9
fTtkb2pvLl94ZE5vdGlmeUxvYWRlZD1mdW5jdGlvbigpe2Zvcih2YXIgXzlhIGluIGRvam8uX3hk
SW5GbGlnaHQpe2lmKHR5cGVvZiBkb2pvLl94ZEluRmxpZ2h0W185YV09PSJib29sZWFuIil7cmV0
dXJuO319ZG9qby5faW5GbGlnaHRDb3VudD0wO2lmKGRvam8uX2luaXRGaXJlZCYmIWRvam8uX2xv
YWROb3RpZnlpbmcpe2Rvam8uX2NhbGxMb2FkZWQoKTt9fTtpZih0eXBlb2Ygd2luZG93IT0idW5k
ZWZpbmVkIil7ZG9qby5pc0Jyb3dzZXI9dHJ1ZTtkb2pvLl9uYW1lPSJicm93c2VyIjsoZnVuY3Rp
b24oKXt2YXIgZD1kb2pvO2lmKGRvY3VtZW50JiZkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFt
ZSl7dmFyIF85Yj1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0Iik7dmFyIF85
Yz0vZG9qbyhcLnhkKT9cLmpzKFxXfCQpL2k7Zm9yKHZhciBpPTA7aTxfOWIubGVuZ3RoO2krKyl7
dmFyIHNyYz1fOWJbaV0uZ2V0QXR0cmlidXRlKCJzcmMiKTtpZighc3JjKXtjb250aW51ZTt9dmFy
IG09c3JjLm1hdGNoKF85Yyk7aWYobSl7aWYoIWQuY29uZmlnLmJhc2VVcmwpe2QuY29uZmlnLmJh
c2VVcmw9c3JjLnN1YnN0cmluZygwLG0uaW5kZXgpO312YXIgY2ZnPShfOWJbaV0uZ2V0QXR0cmli
dXRlKCJkakNvbmZpZyIpfHxfOWJbaV0uZ2V0QXR0cmlidXRlKCJkYXRhLWRvam8tY29uZmlnIikp
O2lmKGNmZyl7dmFyIF85ZD1ldmFsKCIoeyAiK2NmZysiIH0pIik7Zm9yKHZhciB4IGluIF85ZCl7
ZG9qby5jb25maWdbeF09XzlkW3hdO319YnJlYWs7fX19ZC5iYXNlVXJsPWQuY29uZmlnLmJhc2VV
cmw7dmFyIG49bmF2aWdhdG9yO3ZhciBkdWE9bi51c2VyQWdlbnQsZGF2PW4uYXBwVmVyc2lvbix0
dj1wYXJzZUZsb2F0KGRhdik7aWYoZHVhLmluZGV4T2YoIk9wZXJhIik+PTApe2QuaXNPcGVyYT10
djt9aWYoZHVhLmluZGV4T2YoIkFkb2JlQUlSIik+PTApe2QuaXNBSVI9MTt9ZC5pc0todG1sPShk
YXYuaW5kZXhPZigiS29ucXVlcm9yIik+PTApP3R2OjA7ZC5pc1dlYktpdD1wYXJzZUZsb2F0KGR1
YS5zcGxpdCgiV2ViS2l0LyIpWzFdKXx8dW5kZWZpbmVkO2QuaXNDaHJvbWU9cGFyc2VGbG9hdChk
dWEuc3BsaXQoIkNocm9tZS8iKVsxXSl8fHVuZGVmaW5lZDtkLmlzTWFjPWRhdi5pbmRleE9mKCJN
YWNpbnRvc2giKT49MDt2YXIgXzllPU1hdGgubWF4KGRhdi5pbmRleE9mKCJXZWJLaXQiKSxkYXYu
aW5kZXhPZigiU2FmYXJpIiksMCk7aWYoXzllJiYhZG9qby5pc0Nocm9tZSl7ZC5pc1NhZmFyaT1w
YXJzZUZsb2F0KGRhdi5zcGxpdCgiVmVyc2lvbi8iKVsxXSk7aWYoIWQuaXNTYWZhcml8fHBhcnNl
RmxvYXQoZGF2LnN1YnN0cihfOWUrNykpPD00MTkuMyl7ZC5pc1NhZmFyaT0yO319aWYoZHVhLmlu
ZGV4T2YoIkdlY2tvIik+PTAmJiFkLmlzS2h0bWwmJiFkLmlzV2ViS2l0KXtkLmlzTW96aWxsYT1k
LmlzTW96PXR2O31pZihkLmlzTW96KXtkLmlzRkY9cGFyc2VGbG9hdChkdWEuc3BsaXQoIkZpcmVm
b3gvIilbMV18fGR1YS5zcGxpdCgiTWluZWZpZWxkLyIpWzFdKXx8dW5kZWZpbmVkO31pZihkb2N1
bWVudC5hbGwmJiFkLmlzT3BlcmEpe2QuaXNJRT1wYXJzZUZsb2F0KGRhdi5zcGxpdCgiTVNJRSAi
KVsxXSl8fHVuZGVmaW5lZDt2YXIgXzlmPWRvY3VtZW50LmRvY3VtZW50TW9kZTtpZihfOWYmJl85
ZiE9NSYmTWF0aC5mbG9vcihkLmlzSUUpIT1fOWYpe2QuaXNJRT1fOWY7fX1pZihkb2pvLmlzSUUm
JndpbmRvdy5sb2NhdGlvbi5wcm90b2NvbD09PSJmaWxlOiIpe2Rvam8uY29uZmlnLmllRm9yY2VB
Y3RpdmVYWGhyPXRydWU7fWQuaXNRdWlya3M9ZG9jdW1lbnQuY29tcGF0TW9kZT09IkJhY2tDb21w
YXQiO2QubG9jYWxlPWRvam8uY29uZmlnLmxvY2FsZXx8KGQuaXNJRT9uLnVzZXJMYW5ndWFnZTpu
Lmxhbmd1YWdlKS50b0xvd2VyQ2FzZSgpO2QuX1hNTEhUVFBfUFJPR0lEUz1bIk1zeG1sMi5YTUxI
VFRQIiwiTWljcm9zb2Z0LlhNTEhUVFAiLCJNc3htbDIuWE1MSFRUUC40LjAiXTtkLl94aHJPYmo9
ZnVuY3Rpb24oKXt2YXIgX2EwLF9hMTtpZighZG9qby5pc0lFfHwhZG9qby5jb25maWcuaWVGb3Jj
ZUFjdGl2ZVhYaHIpe3RyeXtfYTA9bmV3IFhNTEh0dHBSZXF1ZXN0KCk7fWNhdGNoKGUpe319aWYo
IV9hMCl7Zm9yKHZhciBpPTA7aTwzOysraSl7dmFyIF9hMj1kLl9YTUxIVFRQX1BST0dJRFNbaV07
dHJ5e19hMD1uZXcgQWN0aXZlWE9iamVjdChfYTIpO31jYXRjaChlKXtfYTE9ZTt9aWYoX2EwKXtk
Ll9YTUxIVFRQX1BST0dJRFM9W19hMl07YnJlYWs7fX19aWYoIV9hMCl7dGhyb3cgbmV3IEVycm9y
KCJYTUxIVFRQIG5vdCBhdmFpbGFibGU6ICIrX2ExKTt9cmV0dXJuIF9hMDt9O2QuX2lzRG9jdW1l
bnRPaz1mdW5jdGlvbihfYTMpe3ZhciBfYTQ9X2EzLnN0YXR1c3x8MCxscD1sb2NhdGlvbi5wcm90
b2NvbDtyZXR1cm4gKF9hND49MjAwJiZfYTQ8MzAwKXx8X2E0PT0zMDR8fF9hND09MTIyM3x8KCFf
YTQmJihscD09ImZpbGU6Inx8bHA9PSJjaHJvbWU6Inx8bHA9PSJjaHJvbWUtZXh0ZW5zaW9uOiJ8
fGxwPT0iYXBwOiIpKTt9O3ZhciBfYTU9d2luZG93LmxvY2F0aW9uKyIiO3ZhciBfYTY9ZG9jdW1l
bnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJhc2UiKTt2YXIgX2E3PShfYTYmJl9hNi5sZW5ndGg+
MCk7ZC5fZ2V0VGV4dD1mdW5jdGlvbih1cmksX2E4KXt2YXIgX2E5PWQuX3hock9iaigpO2lmKCFf
YTcmJmRvam8uX1VybCl7dXJpPShuZXcgZG9qby5fVXJsKF9hNSx1cmkpKS50b1N0cmluZygpO31p
ZihkLmNvbmZpZy5jYWNoZUJ1c3Qpe3VyaSs9IiI7dXJpKz0odXJpLmluZGV4T2YoIj8iKT09LTE/
Ij8iOiImIikrU3RyaW5nKGQuY29uZmlnLmNhY2hlQnVzdCkucmVwbGFjZSgvXFcrL2csIiIpO31f
YTkub3BlbigiR0VUIix1cmksZmFsc2UpO3RyeXtfYTkuc2VuZChudWxsKTtpZighZC5faXNEb2N1
bWVudE9rKF9hOSkpe3ZhciBlcnI9RXJyb3IoIlVuYWJsZSB0byBsb2FkICIrdXJpKyIgc3RhdHVz
OiIrX2E5LnN0YXR1cyk7ZXJyLnN0YXR1cz1fYTkuc3RhdHVzO2Vyci5yZXNwb25zZVRleHQ9X2E5
LnJlc3BvbnNlVGV4dDt0aHJvdyBlcnI7fX1jYXRjaChlKXtpZihfYTgpe3JldHVybiBudWxsO310
aHJvdyBlO31yZXR1cm4gX2E5LnJlc3BvbnNlVGV4dDt9O3ZhciBfYWE9d2luZG93O3ZhciBfYWI9
ZnVuY3Rpb24oX2FjLGZwKXt2YXIgX2FkPV9hYS5hdHRhY2hFdmVudHx8X2FhLmFkZEV2ZW50TGlz
dGVuZXI7X2FjPV9hYS5hdHRhY2hFdmVudD9fYWM6X2FjLnN1YnN0cmluZygyKTtfYWQoX2FjLGZ1
bmN0aW9uKCl7ZnAuYXBwbHkoX2FhLGFyZ3VtZW50cyk7fSxmYWxzZSk7fTtkLl93aW5kb3dVbmxv
YWRlcnM9W107ZC53aW5kb3dVbmxvYWRlZD1mdW5jdGlvbigpe3ZhciBtbGw9ZC5fd2luZG93VW5s
b2FkZXJzO3doaWxlKG1sbC5sZW5ndGgpeyhtbGwucG9wKCkpKCk7fWQ9bnVsbDt9O3ZhciBfYWU9
MDtkLmFkZE9uV2luZG93VW5sb2FkPWZ1bmN0aW9uKG9iaixfYWYpe2QuX29udG8oZC5fd2luZG93
VW5sb2FkZXJzLG9iaixfYWYpO2lmKCFfYWUpe19hZT0xO19hYigib251bmxvYWQiLGQud2luZG93
VW5sb2FkZWQpO319O3ZhciBfYjA9MDtkLmFkZE9uVW5sb2FkPWZ1bmN0aW9uKG9iaixfYjEpe2Qu
X29udG8oZC5fdW5sb2FkZXJzLG9iaixfYjEpO2lmKCFfYjApe19iMD0xO19hYigib25iZWZvcmV1
bmxvYWQiLGRvam8udW5sb2FkZWQpO319O30pKCk7ZG9qby5faW5pdEZpcmVkPWZhbHNlO2Rvam8u
X2xvYWRJbml0PWZ1bmN0aW9uKGUpe2lmKGRvam8uX3Njcm9sbEludGVydmFsSWQpe2NsZWFySW50
ZXJ2YWwoZG9qby5fc2Nyb2xsSW50ZXJ2YWxJZCk7ZG9qby5fc2Nyb2xsSW50ZXJ2YWxJZD0wO31p
ZighZG9qby5faW5pdEZpcmVkKXtkb2pvLl9pbml0RmlyZWQ9dHJ1ZTtpZighZG9qby5jb25maWcu
YWZ0ZXJPbkxvYWQmJndpbmRvdy5kZXRhY2hFdmVudCl7d2luZG93LmRldGFjaEV2ZW50KCJvbmxv
YWQiLGRvam8uX2xvYWRJbml0KTt9aWYoZG9qby5faW5GbGlnaHRDb3VudD09MCl7ZG9qby5fbW9k
dWxlc0xvYWRlZCgpO319fTtpZighZG9qby5jb25maWcuYWZ0ZXJPbkxvYWQpe2lmKGRvY3VtZW50
LmFkZEV2ZW50TGlzdGVuZXIpe2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRM
b2FkZWQiLGRvam8uX2xvYWRJbml0LGZhbHNlKTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibG9h
ZCIsZG9qby5fbG9hZEluaXQsZmFsc2UpO31lbHNle2lmKHdpbmRvdy5hdHRhY2hFdmVudCl7d2lu
ZG93LmF0dGFjaEV2ZW50KCJvbmxvYWQiLGRvam8uX2xvYWRJbml0KTtpZighZG9qby5jb25maWcu
c2tpcEllRG9tTG9hZGVkJiZzZWxmPT09c2VsZi50b3Ape2Rvam8uX3Njcm9sbEludGVydmFsSWQ9
c2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXt0cnl7aWYoZG9jdW1lbnQuYm9keSl7ZG9jdW1lbnQuZG9j
dW1lbnRFbGVtZW50LmRvU2Nyb2xsKCJsZWZ0Iik7ZG9qby5fbG9hZEluaXQoKTt9fWNhdGNoKGUp
e319LDMwKTt9fX19aWYoZG9qby5pc0lFKXt0cnl7KGZ1bmN0aW9uKCl7ZG9jdW1lbnQubmFtZXNw
YWNlcy5hZGQoInYiLCJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOnZtbCIpO3ZhciBfYjI9WyIq
IiwiZ3JvdXAiLCJyb3VuZHJlY3QiLCJvdmFsIiwic2hhcGUiLCJyZWN0IiwiaW1hZ2VkYXRhIiwi
cGF0aCIsInRleHRwYXRoIiwidGV4dCJdLGk9MCxsPTEscz1kb2N1bWVudC5jcmVhdGVTdHlsZVNo
ZWV0KCk7aWYoZG9qby5pc0lFPj04KXtpPTE7bD1fYjIubGVuZ3RoO31mb3IoO2k8bDsrK2kpe3Mu
YWRkUnVsZSgidlxcOiIrX2IyW2ldLCJiZWhhdmlvcjp1cmwoI2RlZmF1bHQjVk1MKTsgZGlzcGxh
eTppbmxpbmUtYmxvY2siKTt9fSkoKTt9Y2F0Y2goZSl7fX19KGZ1bmN0aW9uKCl7dmFyIG1wPWRv
am8uY29uZmlnWyJtb2R1bGVQYXRocyJdO2lmKG1wKXtmb3IodmFyIF9iMyBpbiBtcCl7ZG9qby5y
ZWdpc3Rlck1vZHVsZVBhdGgoX2IzLG1wW19iM10pO319fSkoKTtpZihkb2pvLmNvbmZpZy5pc0Rl
YnVnKXtkb2pvLnJlcXVpcmUoImRvam8uX2ZpcmVidWcuZmlyZWJ1ZyIpO31pZihkb2pvLmNvbmZp
Zy5kZWJ1Z0F0QWxsQ29zdHMpe2Rvam8ucmVxdWlyZSgiZG9qby5fYmFzZS5fbG9hZGVyLmxvYWRl
cl9kZWJ1ZyIpO31pZighZG9qby5faGFzUmVzb3VyY2VbImRvam8uX2Jhc2UubGFuZyJdKXtkb2pv
Ll9oYXNSZXNvdXJjZVsiZG9qby5fYmFzZS5sYW5nIl09dHJ1ZTtkb2pvLnByb3ZpZGUoImRvam8u
X2Jhc2UubGFuZyIpOyhmdW5jdGlvbigpe3ZhciBkPWRvam8sX2I0PU9iamVjdC5wcm90b3R5cGUu
dG9TdHJpbmc7ZG9qby5pc1N0cmluZz1mdW5jdGlvbihpdCl7cmV0dXJuICh0eXBlb2YgaXQ9PSJz
dHJpbmcifHxpdCBpbnN0YW5jZW9mIFN0cmluZyk7fTtkb2pvLmlzQXJyYXk9ZnVuY3Rpb24oaXQp
e3JldHVybiBpdCYmKGl0IGluc3RhbmNlb2YgQXJyYXl8fHR5cGVvZiBpdD09ImFycmF5Iik7fTtk
b2pvLmlzRnVuY3Rpb249ZnVuY3Rpb24oaXQpe3JldHVybiBfYjQuY2FsbChpdCk9PT0iW29iamVj
dCBGdW5jdGlvbl0iO307ZG9qby5pc09iamVjdD1mdW5jdGlvbihpdCl7cmV0dXJuIGl0IT09dW5k
ZWZpbmVkJiYoaXQ9PT1udWxsfHx0eXBlb2YgaXQ9PSJvYmplY3QifHxkLmlzQXJyYXkoaXQpfHxk
LmlzRnVuY3Rpb24oaXQpKTt9O2Rvam8uaXNBcnJheUxpa2U9ZnVuY3Rpb24oaXQpe3JldHVybiBp
dCYmaXQhPT11bmRlZmluZWQmJiFkLmlzU3RyaW5nKGl0KSYmIWQuaXNGdW5jdGlvbihpdCkmJiEo
aXQudGFnTmFtZSYmaXQudGFnTmFtZS50b0xvd2VyQ2FzZSgpPT0iZm9ybSIpJiYoZC5pc0FycmF5
KGl0KXx8aXNGaW5pdGUoaXQubGVuZ3RoKSk7fTtkb2pvLmlzQWxpZW49ZnVuY3Rpb24oaXQpe3Jl
dHVybiBpdCYmIWQuaXNGdW5jdGlvbihpdCkmJi9ce1xzKlxbbmF0aXZlIGNvZGVcXVxzKlx9Ly50
ZXN0KFN0cmluZyhpdCkpO307ZG9qby5leHRlbmQ9ZnVuY3Rpb24oX2I1LF9iNil7Zm9yKHZhciBp
PTEsbD1hcmd1bWVudHMubGVuZ3RoO2k8bDtpKyspe2QuX21peGluKF9iNS5wcm90b3R5cGUsYXJn
dW1lbnRzW2ldKTt9cmV0dXJuIF9iNTt9O2Rvam8uX2hpdGNoQXJncz1mdW5jdGlvbihfYjcsX2I4
KXt2YXIgcHJlPWQuX3RvQXJyYXkoYXJndW1lbnRzLDIpO3ZhciBfYjk9ZC5pc1N0cmluZyhfYjgp
O3JldHVybiBmdW5jdGlvbigpe3ZhciBfYmE9ZC5fdG9BcnJheShhcmd1bWVudHMpO3ZhciBmPV9i
OT8oX2I3fHxkLmdsb2JhbClbX2I4XTpfYjg7cmV0dXJuIGYmJmYuYXBwbHkoX2I3fHx0aGlzLHBy
ZS5jb25jYXQoX2JhKSk7fTt9O2Rvam8uaGl0Y2g9ZnVuY3Rpb24oX2JiLF9iYyl7aWYoYXJndW1l
bnRzLmxlbmd0aD4yKXtyZXR1cm4gZC5faGl0Y2hBcmdzLmFwcGx5KGQsYXJndW1lbnRzKTt9aWYo
IV9iYyl7X2JjPV9iYjtfYmI9bnVsbDt9aWYoZC5pc1N0cmluZyhfYmMpKXtfYmI9X2JifHxkLmds
b2JhbDtpZighX2JiW19iY10pe3Rocm93IChbImRvam8uaGl0Y2g6IHNjb3BlW1wiIixfYmMsIlwi
XSBpcyBudWxsIChzY29wZT1cIiIsX2JiLCJcIikiXS5qb2luKCIiKSk7fXJldHVybiBmdW5jdGlv
bigpe3JldHVybiBfYmJbX2JjXS5hcHBseShfYmIsYXJndW1lbnRzfHxbXSk7fTt9cmV0dXJuICFf
YmI/X2JjOmZ1bmN0aW9uKCl7cmV0dXJuIF9iYy5hcHBseShfYmIsYXJndW1lbnRzfHxbXSk7fTt9
O2Rvam8uZGVsZWdhdGU9ZG9qby5fZGVsZWdhdGU9KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gVE1QKCl7
fTtyZXR1cm4gZnVuY3Rpb24ob2JqLF9iZCl7VE1QLnByb3RvdHlwZT1vYmo7dmFyIHRtcD1uZXcg
VE1QKCk7VE1QLnByb3RvdHlwZT1udWxsO2lmKF9iZCl7ZC5fbWl4aW4odG1wLF9iZCk7fXJldHVy
biB0bXA7fTt9KSgpO3ZhciBfYmU9ZnVuY3Rpb24ob2JqLF9iZixfYzApe3JldHVybiAoX2MwfHxb
XSkuY29uY2F0KEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKG9iaixfYmZ8fDApKTt9O3ZhciBf
YzE9ZnVuY3Rpb24ob2JqLF9jMixfYzMpe3ZhciBhcnI9X2MzfHxbXTtmb3IodmFyIHg9X2MyfHww
O3g8b2JqLmxlbmd0aDt4Kyspe2Fyci5wdXNoKG9ialt4XSk7fXJldHVybiBhcnI7fTtkb2pvLl90
b0FycmF5PWQuaXNJRT9mdW5jdGlvbihvYmope3JldHVybiAoKG9iai5pdGVtKT9fYzE6X2JlKS5h
cHBseSh0aGlzLGFyZ3VtZW50cyk7fTpfYmU7ZG9qby5wYXJ0aWFsPWZ1bmN0aW9uKF9jNCl7dmFy
IGFycj1bbnVsbF07cmV0dXJuIGQuaGl0Y2guYXBwbHkoZCxhcnIuY29uY2F0KGQuX3RvQXJyYXko
YXJndW1lbnRzKSkpO307dmFyIF9jNT1kLl9leHRyYU5hbWVzLF9jNj1fYzUubGVuZ3RoLF9jNz17
fTtkb2pvLmNsb25lPWZ1bmN0aW9uKG8pe2lmKCFvfHx0eXBlb2YgbyE9Im9iamVjdCJ8fGQuaXNG
dW5jdGlvbihvKSl7cmV0dXJuIG87fWlmKG8ubm9kZVR5cGUmJiJjbG9uZU5vZGUiIGluIG8pe3Jl
dHVybiBvLmNsb25lTm9kZSh0cnVlKTt9aWYobyBpbnN0YW5jZW9mIERhdGUpe3JldHVybiBuZXcg
RGF0ZShvLmdldFRpbWUoKSk7fWlmKG8gaW5zdGFuY2VvZiBSZWdFeHApe3JldHVybiBuZXcgUmVn
RXhwKG8pO312YXIgcixpLGwscyxfYzg7aWYoZC5pc0FycmF5KG8pKXtyPVtdO2ZvcihpPTAsbD1v
Lmxlbmd0aDtpPGw7KytpKXtpZihpIGluIG8pe3IucHVzaChkLmNsb25lKG9baV0pKTt9fX1lbHNl
e3I9by5jb25zdHJ1Y3Rvcj9uZXcgby5jb25zdHJ1Y3RvcigpOnt9O31mb3IoX2M4IGluIG8pe3M9
b1tfYzhdO2lmKCEoX2M4IGluIHIpfHwocltfYzhdIT09cyYmKCEoX2M4IGluIF9jNyl8fF9jN1tf
YzhdIT09cykpKXtyW19jOF09ZC5jbG9uZShzKTt9fWlmKF9jNil7Zm9yKGk9MDtpPF9jNjsrK2kp
e19jOD1fYzVbaV07cz1vW19jOF07aWYoIShfYzggaW4gcil8fChyW19jOF0hPT1zJiYoIShfYzgg
aW4gX2M3KXx8X2M3W19jOF0hPT1zKSkpe3JbX2M4XT1zO319fXJldHVybiByO307ZG9qby50cmlt
PVN0cmluZy5wcm90b3R5cGUudHJpbT9mdW5jdGlvbihzdHIpe3JldHVybiBzdHIudHJpbSgpO306
ZnVuY3Rpb24oc3RyKXtyZXR1cm4gc3RyLnJlcGxhY2UoL15cc1xzKi8sIiIpLnJlcGxhY2UoL1xz
XHMqJC8sIiIpO307dmFyIF9jOT0vXHsoW15cfV0rKVx9L2c7ZG9qby5yZXBsYWNlPWZ1bmN0aW9u
KF9jYSxtYXAsX2NiKXtyZXR1cm4gX2NhLnJlcGxhY2UoX2NifHxfYzksZC5pc0Z1bmN0aW9uKG1h
cCk/bWFwOmZ1bmN0aW9uKF9jYyxrKXtyZXR1cm4gZC5nZXRPYmplY3QoayxmYWxzZSxtYXApO30p
O307fSkoKTt9aWYoIWRvam8uX2hhc1Jlc291cmNlWyJkb2pvLl9iYXNlLmFycmF5Il0pe2Rvam8u
X2hhc1Jlc291cmNlWyJkb2pvLl9iYXNlLmFycmF5Il09dHJ1ZTtkb2pvLnByb3ZpZGUoImRvam8u
X2Jhc2UuYXJyYXkiKTsoZnVuY3Rpb24oKXt2YXIgX2NkPWZ1bmN0aW9uKGFycixvYmosY2Ipe3Jl
dHVybiBbKHR5cGVvZiBhcnI9PSJzdHJpbmciKT9hcnIuc3BsaXQoIiIpOmFycixvYmp8fGRvam8u
Z2xvYmFsLCh0eXBlb2YgY2I9PSJzdHJpbmciKT9uZXcgRnVuY3Rpb24oIml0ZW0iLCJpbmRleCIs
ImFycmF5IixjYik6Y2JdO307dmFyIF9jZT1mdW5jdGlvbihfY2YsYXJyLF9kMCxfZDEpe3ZhciBf
ZDI9X2NkKGFycixfZDEsX2QwKTthcnI9X2QyWzBdO2Zvcih2YXIgaT0wLGw9YXJyLmxlbmd0aDtp
PGw7KytpKXt2YXIgX2QzPSEhX2QyWzJdLmNhbGwoX2QyWzFdLGFycltpXSxpLGFycik7aWYoX2Nm
Xl9kMyl7cmV0dXJuIF9kMzt9fXJldHVybiBfY2Y7fTtkb2pvLm1peGluKGRvam8se2luZGV4T2Y6
ZnVuY3Rpb24oX2Q0LF9kNSxfZDYsX2Q3KXt2YXIgX2Q4PTEsZW5kPV9kNC5sZW5ndGh8fDAsaT0w
O2lmKF9kNyl7aT1lbmQtMTtfZDg9ZW5kPS0xO31pZihfZDYhPXVuZGVmaW5lZCl7aT1fZDY7fWlm
KChfZDcmJmk+ZW5kKXx8aTxlbmQpe2Zvcig7aSE9ZW5kO2krPV9kOCl7aWYoX2Q0W2ldPT1fZDUp
e3JldHVybiBpO319fXJldHVybiAtMTt9LGxhc3RJbmRleE9mOmZ1bmN0aW9uKF9kOSxfZGEsX2Ri
KXtyZXR1cm4gZG9qby5pbmRleE9mKF9kOSxfZGEsX2RiLHRydWUpO30sZm9yRWFjaDpmdW5jdGlv
bihhcnIsX2RjLF9kZCl7aWYoIWFycnx8IWFyci5sZW5ndGgpe3JldHVybjt9dmFyIF9kZT1fY2Qo
YXJyLF9kZCxfZGMpO2Fycj1fZGVbMF07Zm9yKHZhciBpPTAsbD1hcnIubGVuZ3RoO2k8bDsrK2kp
e19kZVsyXS5jYWxsKF9kZVsxXSxhcnJbaV0saSxhcnIpO319LGV2ZXJ5OmZ1bmN0aW9uKGFycixf
ZGYsX2UwKXtyZXR1cm4gX2NlKHRydWUsYXJyLF9kZixfZTApO30sc29tZTpmdW5jdGlvbihhcnIs
X2UxLF9lMil7cmV0dXJuIF9jZShmYWxzZSxhcnIsX2UxLF9lMik7fSxtYXA6ZnVuY3Rpb24oYXJy
LF9lMyxfZTQpe3ZhciBfZTU9X2NkKGFycixfZTQsX2UzKTthcnI9X2U1WzBdO3ZhciBfZTY9KGFy
Z3VtZW50c1szXT8obmV3IGFyZ3VtZW50c1szXSgpKTpbXSk7Zm9yKHZhciBpPTAsbD1hcnIubGVu
Z3RoO2k8bDsrK2kpe19lNi5wdXNoKF9lNVsyXS5jYWxsKF9lNVsxXSxhcnJbaV0saSxhcnIpKTt9
cmV0dXJuIF9lNjt9LGZpbHRlcjpmdW5jdGlvbihhcnIsX2U3LF9lOCl7dmFyIF9lOT1fY2QoYXJy
LF9lOCxfZTcpO2Fycj1fZTlbMF07dmFyIF9lYT1bXTtmb3IodmFyIGk9MCxsPWFyci5sZW5ndGg7
aTxsOysraSl7aWYoX2U5WzJdLmNhbGwoX2U5WzFdLGFycltpXSxpLGFycikpe19lYS5wdXNoKGFy
cltpXSk7fX1yZXR1cm4gX2VhO319KTt9KSgpO31pZighZG9qby5faGFzUmVzb3VyY2VbImRvam8u
X2Jhc2UuZGVjbGFyZSJdKXtkb2pvLl9oYXNSZXNvdXJjZVsiZG9qby5fYmFzZS5kZWNsYXJlIl09
dHJ1ZTtkb2pvLnByb3ZpZGUoImRvam8uX2Jhc2UuZGVjbGFyZSIpOyhmdW5jdGlvbigpe3ZhciBk
PWRvam8sbWl4PWQuX21peGluLG9wPU9iamVjdC5wcm90b3R5cGUsX2ViPW9wLnRvU3RyaW5nLF9l
Yz1uZXcgRnVuY3Rpb24sX2VkPTAsX2VlPSJjb25zdHJ1Y3RvciI7ZnVuY3Rpb24gZXJyKG1zZyxj
bHMpe3Rocm93IG5ldyBFcnJvcigiZGVjbGFyZSIrKGNscz8iICIrY2xzOiIiKSsiOiAiK21zZyk7
fTtmdW5jdGlvbiBfZWYoX2YwLF9mMSl7dmFyIF9mMj1bXSxfZjM9W3tjbHM6MCxyZWZzOltdfV0s
X2Y0PXt9LF9mNT0xLGw9X2YwLmxlbmd0aCxpPTAsaixsaW4sX2Y2LHRvcCxfZjcscmVjLF9mOCxf
Zjk7Zm9yKDtpPGw7KytpKXtfZjY9X2YwW2ldO2lmKCFfZjYpe2VycigibWl4aW4gIyIraSsiIGlz
IHVua25vd24uIERpZCB5b3UgdXNlIGRvam8ucmVxdWlyZSB0byBwdWxsIGl0IGluPyIsX2YxKTt9
ZWxzZXtpZihfZWIuY2FsbChfZjYpIT0iW29iamVjdCBGdW5jdGlvbl0iKXtlcnIoIm1peGluICMi
K2krIiBpcyBub3QgYSBjYWxsYWJsZSBjb25zdHJ1Y3Rvci4iLF9mMSk7fX1saW49X2Y2Ll9tZXRh
P19mNi5fbWV0YS5iYXNlczpbX2Y2XTt0b3A9MDtmb3Ioaj1saW4ubGVuZ3RoLTE7aj49MDstLWop
e19mNz1saW5bal0ucHJvdG90eXBlO2lmKCFfZjcuaGFzT3duUHJvcGVydHkoImRlY2xhcmVkQ2xh
c3MiKSl7X2Y3LmRlY2xhcmVkQ2xhc3M9InVuaXFOYW1lXyIrKF9lZCsrKTt9X2Y4PV9mNy5kZWNs
YXJlZENsYXNzO2lmKCFfZjQuaGFzT3duUHJvcGVydHkoX2Y4KSl7X2Y0W19mOF09e2NvdW50OjAs
cmVmczpbXSxjbHM6bGluW2pdfTsrK19mNTt9cmVjPV9mNFtfZjhdO2lmKHRvcCYmdG9wIT09cmVj
KXtyZWMucmVmcy5wdXNoKHRvcCk7Kyt0b3AuY291bnQ7fXRvcD1yZWM7fSsrdG9wLmNvdW50O19m
M1swXS5yZWZzLnB1c2godG9wKTt9d2hpbGUoX2YzLmxlbmd0aCl7dG9wPV9mMy5wb3AoKTtfZjIu
cHVzaCh0b3AuY2xzKTstLV9mNTt3aGlsZShfZjk9dG9wLnJlZnMsX2Y5Lmxlbmd0aD09MSl7dG9w
PV9mOVswXTtpZighdG9wfHwtLXRvcC5jb3VudCl7dG9wPTA7YnJlYWs7fV9mMi5wdXNoKHRvcC5j
bHMpOy0tX2Y1O31pZih0b3Ape2ZvcihpPTAsbD1fZjkubGVuZ3RoO2k8bDsrK2kpe3RvcD1fZjlb
aV07aWYoIS0tdG9wLmNvdW50KXtfZjMucHVzaCh0b3ApO319fX1pZihfZjUpe2VycigiY2FuJ3Qg
YnVpbGQgY29uc2lzdGVudCBsaW5lYXJpemF0aW9uIixfZjEpO31fZjY9X2YwWzBdO19mMlswXT1f
ZjY/X2Y2Ll9tZXRhJiZfZjY9PT1fZjJbX2YyLmxlbmd0aC1fZjYuX21ldGEuYmFzZXMubGVuZ3Ro
XT9fZjYuX21ldGEuYmFzZXMubGVuZ3RoOjE6MDtyZXR1cm4gX2YyO307ZnVuY3Rpb24gX2ZhKF9m
YixhLGYpe3ZhciBfZmMsX2ZkLF9mZSxfZmYsbWV0YSxiYXNlLF8xMDAsb3BmLHBvcyxfMTAxPXRo
aXMuX2luaGVyaXRlZD10aGlzLl9pbmhlcml0ZWR8fHt9O2lmKHR5cGVvZiBfZmI9PSJzdHJpbmci
KXtfZmM9X2ZiO19mYj1hO2E9Zjt9Zj0wO19mZj1fZmIuY2FsbGVlO19mYz1fZmN8fF9mZi5ub207
aWYoIV9mYyl7ZXJyKCJjYW4ndCBkZWR1Y2UgYSBuYW1lIHRvIGNhbGwgaW5oZXJpdGVkKCkiLHRo
aXMuZGVjbGFyZWRDbGFzcyk7fW1ldGE9dGhpcy5jb25zdHJ1Y3Rvci5fbWV0YTtfZmU9bWV0YS5i
YXNlcztwb3M9XzEwMS5wO2lmKF9mYyE9X2VlKXtpZihfMTAxLmMhPT1fZmYpe3Bvcz0wO2Jhc2U9
X2ZlWzBdO21ldGE9YmFzZS5fbWV0YTtpZihtZXRhLmhpZGRlbltfZmNdIT09X2ZmKXtfZmQ9bWV0
YS5jaGFpbnM7aWYoX2ZkJiZ0eXBlb2YgX2ZkW19mY109PSJzdHJpbmciKXtlcnIoImNhbGxpbmcg
Y2hhaW5lZCBtZXRob2Qgd2l0aCBpbmhlcml0ZWQ6ICIrX2ZjLHRoaXMuZGVjbGFyZWRDbGFzcyk7
fWRve21ldGE9YmFzZS5fbWV0YTtfMTAwPWJhc2UucHJvdG90eXBlO2lmKG1ldGEmJihfMTAwW19m
Y109PT1fZmYmJl8xMDAuaGFzT3duUHJvcGVydHkoX2ZjKXx8bWV0YS5oaWRkZW5bX2ZjXT09PV9m
Zikpe2JyZWFrO319d2hpbGUoYmFzZT1fZmVbKytwb3NdKTtwb3M9YmFzZT9wb3M6LTE7fX1iYXNl
PV9mZVsrK3Bvc107aWYoYmFzZSl7XzEwMD1iYXNlLnByb3RvdHlwZTtpZihiYXNlLl9tZXRhJiZf
MTAwLmhhc093blByb3BlcnR5KF9mYykpe2Y9XzEwMFtfZmNdO31lbHNle29wZj1vcFtfZmNdO2Rv
e18xMDA9YmFzZS5wcm90b3R5cGU7Zj1fMTAwW19mY107aWYoZiYmKGJhc2UuX21ldGE/XzEwMC5o
YXNPd25Qcm9wZXJ0eShfZmMpOmYhPT1vcGYpKXticmVhazt9fXdoaWxlKGJhc2U9X2ZlWysrcG9z
XSk7fX1mPWJhc2UmJmZ8fG9wW19mY107fWVsc2V7aWYoXzEwMS5jIT09X2ZmKXtwb3M9MDttZXRh
PV9mZVswXS5fbWV0YTtpZihtZXRhJiZtZXRhLmN0b3IhPT1fZmYpe19mZD1tZXRhLmNoYWlucztp
ZighX2ZkfHxfZmQuY29uc3RydWN0b3IhPT0ibWFudWFsIil7ZXJyKCJjYWxsaW5nIGNoYWluZWQg
Y29uc3RydWN0b3Igd2l0aCBpbmhlcml0ZWQiLHRoaXMuZGVjbGFyZWRDbGFzcyk7fXdoaWxlKGJh
c2U9X2ZlWysrcG9zXSl7bWV0YT1iYXNlLl9tZXRhO2lmKG1ldGEmJm1ldGEuY3Rvcj09PV9mZil7
YnJlYWs7fX1wb3M9YmFzZT9wb3M6LTE7fX13aGlsZShiYXNlPV9mZVsrK3Bvc10pe21ldGE9YmFz
ZS5fbWV0YTtmPW1ldGE/bWV0YS5jdG9yOmJhc2U7aWYoZil7YnJlYWs7fX1mPWJhc2UmJmY7fV8x
MDEuYz1mO18xMDEucD1wb3M7aWYoZil7cmV0dXJuIGE9PT10cnVlP2Y6Zi5hcHBseSh0aGlzLGF8
fF9mYik7fX07ZnVuY3Rpb24gXzEwMihuYW1lLGFyZ3Mpe2lmKHR5cGVvZiBuYW1lPT0ic3RyaW5n
Iil7cmV0dXJuIHRoaXMuaW5oZXJpdGVkKG5hbWUsYXJncyx0cnVlKTt9cmV0dXJuIHRoaXMuaW5o
ZXJpdGVkKG5hbWUsdHJ1ZSk7fTtmdW5jdGlvbiBfMTAzKGNscyl7dmFyIF8xMDQ9dGhpcy5jb25z
dHJ1Y3Rvci5fbWV0YS5iYXNlcztmb3IodmFyIGk9MCxsPV8xMDQubGVuZ3RoO2k8bDsrK2kpe2lm
KF8xMDRbaV09PT1jbHMpe3JldHVybiB0cnVlO319cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBjbHM7
fTtmdW5jdGlvbiBfMTA1KF8xMDYsXzEwNyl7dmFyIG5hbWUsaT0wLGw9ZC5fZXh0cmFOYW1lcy5s
ZW5ndGg7Zm9yKG5hbWUgaW4gXzEwNyl7aWYobmFtZSE9X2VlJiZfMTA3Lmhhc093blByb3BlcnR5
KG5hbWUpKXtfMTA2W25hbWVdPV8xMDdbbmFtZV07fX1mb3IoO2k8bDsrK2kpe25hbWU9ZC5fZXh0
cmFOYW1lc1tpXTtpZihuYW1lIT1fZWUmJl8xMDcuaGFzT3duUHJvcGVydHkobmFtZSkpe18xMDZb
bmFtZV09XzEwN1tuYW1lXTt9fX07ZnVuY3Rpb24gXzEwOChfMTA5LF8xMGEpe3ZhciBuYW1lLHQs
aT0wLGw9ZC5fZXh0cmFOYW1lcy5sZW5ndGg7Zm9yKG5hbWUgaW4gXzEwYSl7dD1fMTBhW25hbWVd
O2lmKCh0IT09b3BbbmFtZV18fCEobmFtZSBpbiBvcCkpJiZuYW1lIT1fZWUpe2lmKF9lYi5jYWxs
KHQpPT0iW29iamVjdCBGdW5jdGlvbl0iKXt0Lm5vbT1uYW1lO31fMTA5W25hbWVdPXQ7fX1mb3Io
O2k8bDsrK2kpe25hbWU9ZC5fZXh0cmFOYW1lc1tpXTt0PV8xMGFbbmFtZV07aWYoKHQhPT1vcFtu
YW1lXXx8IShuYW1lIGluIG9wKSkmJm5hbWUhPV9lZSl7aWYoX2ViLmNhbGwodCk9PSJbb2JqZWN0
IEZ1bmN0aW9uXSIpe3Qubm9tPW5hbWU7fV8xMDlbbmFtZV09dDt9fXJldHVybiBfMTA5O307ZnVu
Y3Rpb24gXzEwYihfMTBjKXtfMTA4KHRoaXMucHJvdG90eXBlLF8xMGMpO3JldHVybiB0aGlzO307
ZnVuY3Rpb24gXzEwZChfMTBlLF8xMGYpe3JldHVybiBmdW5jdGlvbigpe3ZhciBhPWFyZ3VtZW50
cyxhcmdzPWEsYTA9YVswXSxmLGksbSxsPV8xMGUubGVuZ3RoLF8xMTA7aWYoISh0aGlzIGluc3Rh
bmNlb2YgYS5jYWxsZWUpKXtyZXR1cm4gXzExMShhKTt9aWYoXzEwZiYmKGEwJiZhMC5wcmVhbWJs
ZXx8dGhpcy5wcmVhbWJsZSkpe18xMTA9bmV3IEFycmF5KF8xMGUubGVuZ3RoKTtfMTEwWzBdPWE7
Zm9yKGk9MDs7KXthMD1hWzBdO2lmKGEwKXtmPWEwLnByZWFtYmxlO2lmKGYpe2E9Zi5hcHBseSh0
aGlzLGEpfHxhO319Zj1fMTBlW2ldLnByb3RvdHlwZTtmPWYuaGFzT3duUHJvcGVydHkoInByZWFt
YmxlIikmJmYucHJlYW1ibGU7aWYoZil7YT1mLmFwcGx5KHRoaXMsYSl8fGE7fWlmKCsraT09bCl7
YnJlYWs7fV8xMTBbaV09YTt9fWZvcihpPWwtMTtpPj0wOy0taSl7Zj1fMTBlW2ldO209Zi5fbWV0
YTtmPW0/bS5jdG9yOmY7aWYoZil7Zi5hcHBseSh0aGlzLF8xMTA/XzExMFtpXTphKTt9fWY9dGhp
cy5wb3N0c2NyaXB0O2lmKGYpe2YuYXBwbHkodGhpcyxhcmdzKTt9fTt9O2Z1bmN0aW9uIF8xMTIo
Y3RvcixfMTEzKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1hcmd1bWVudHMsdD1hLGEwPWFbMF0s
ZjtpZighKHRoaXMgaW5zdGFuY2VvZiBhLmNhbGxlZSkpe3JldHVybiBfMTExKGEpO31pZihfMTEz
KXtpZihhMCl7Zj1hMC5wcmVhbWJsZTtpZihmKXt0PWYuYXBwbHkodGhpcyx0KXx8dDt9fWY9dGhp
cy5wcmVhbWJsZTtpZihmKXtmLmFwcGx5KHRoaXMsdCk7fX1pZihjdG9yKXtjdG9yLmFwcGx5KHRo
aXMsYSk7fWY9dGhpcy5wb3N0c2NyaXB0O2lmKGYpe2YuYXBwbHkodGhpcyxhKTt9fTt9O2Z1bmN0
aW9uIF8xMTQoXzExNSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9YXJndW1lbnRzLGk9MCxmLG07
aWYoISh0aGlzIGluc3RhbmNlb2YgYS5jYWxsZWUpKXtyZXR1cm4gXzExMShhKTt9Zm9yKDtmPV8x
MTVbaV07KytpKXttPWYuX21ldGE7Zj1tP20uY3RvcjpmO2lmKGYpe2YuYXBwbHkodGhpcyxhKTti
cmVhazt9fWY9dGhpcy5wb3N0c2NyaXB0O2lmKGYpe2YuYXBwbHkodGhpcyxhKTt9fTt9O2Z1bmN0
aW9uIF8xMTYobmFtZSxfMTE3LF8xMTgpe3JldHVybiBmdW5jdGlvbigpe3ZhciBiLG0sZixpPTAs
c3RlcD0xO2lmKF8xMTgpe2k9XzExNy5sZW5ndGgtMTtzdGVwPS0xO31mb3IoO2I9XzExN1tpXTtp
Kz1zdGVwKXttPWIuX21ldGE7Zj0obT9tLmhpZGRlbjpiLnByb3RvdHlwZSlbbmFtZV07aWYoZil7
Zi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7fX19O307ZnVuY3Rpb24gXzExOShjdG9yKXtfZWMucHJv
dG90eXBlPWN0b3IucHJvdG90eXBlO3ZhciB0PW5ldyBfZWM7X2VjLnByb3RvdHlwZT1udWxsO3Jl
dHVybiB0O307ZnVuY3Rpb24gXzExMShhcmdzKXt2YXIgY3Rvcj1hcmdzLmNhbGxlZSx0PV8xMTko
Y3Rvcik7Y3Rvci5hcHBseSh0LGFyZ3MpO3JldHVybiB0O307ZC5kZWNsYXJlPWZ1bmN0aW9uKF8x
MWEsXzExYixfMTFjKXtpZih0eXBlb2YgXzExYSE9InN0cmluZyIpe18xMWM9XzExYjtfMTFiPV8x
MWE7XzExYT0iIjt9XzExYz1fMTFjfHx7fTt2YXIgXzExZCxpLHQsY3RvcixuYW1lLF8xMWUsXzEx
ZixfMTIwPTEsXzEyMT1fMTFiO2lmKF9lYi5jYWxsKF8xMWIpPT0iW29iamVjdCBBcnJheV0iKXtf
MTFlPV9lZihfMTFiLF8xMWEpO3Q9XzExZVswXTtfMTIwPV8xMWUubGVuZ3RoLXQ7XzExYj1fMTFl
W18xMjBdO31lbHNle18xMWU9WzBdO2lmKF8xMWIpe2lmKF9lYi5jYWxsKF8xMWIpPT0iW29iamVj
dCBGdW5jdGlvbl0iKXt0PV8xMWIuX21ldGE7XzExZT1fMTFlLmNvbmNhdCh0P3QuYmFzZXM6XzEx
Yik7fWVsc2V7ZXJyKCJiYXNlIGNsYXNzIGlzIG5vdCBhIGNhbGxhYmxlIGNvbnN0cnVjdG9yLiIs
XzExYSk7fX1lbHNle2lmKF8xMWIhPT1udWxsKXtlcnIoInVua25vd24gYmFzZSBjbGFzcy4gRGlk
IHlvdSB1c2UgZG9qby5yZXF1aXJlIHRvIHB1bGwgaXQgaW4/IixfMTFhKTt9fX1pZihfMTFiKXtm
b3IoaT1fMTIwLTE7Oy0taSl7XzExZD1fMTE5KF8xMWIpO2lmKCFpKXticmVhazt9dD1fMTFlW2ld
Oyh0Ll9tZXRhP18xMDU6bWl4KShfMTFkLHQucHJvdG90eXBlKTtjdG9yPW5ldyBGdW5jdGlvbjtj
dG9yLnN1cGVyY2xhc3M9XzExYjtjdG9yLnByb3RvdHlwZT1fMTFkO18xMWI9XzExZC5jb25zdHJ1
Y3Rvcj1jdG9yO319ZWxzZXtfMTFkPXt9O31fMTA4KF8xMWQsXzExYyk7dD1fMTFjLmNvbnN0cnVj
dG9yO2lmKHQhPT1vcC5jb25zdHJ1Y3Rvcil7dC5ub209X2VlO18xMWQuY29uc3RydWN0b3I9dDt9
Zm9yKGk9XzEyMC0xO2k7LS1pKXt0PV8xMWVbaV0uX21ldGE7aWYodCYmdC5jaGFpbnMpe18xMWY9
bWl4KF8xMWZ8fHt9LHQuY2hhaW5zKTt9fWlmKF8xMWRbIi1jaGFpbnMtIl0pe18xMWY9bWl4KF8x
MWZ8fHt9LF8xMWRbIi1jaGFpbnMtIl0pO310PSFfMTFmfHwhXzExZi5oYXNPd25Qcm9wZXJ0eShf
ZWUpO18xMWVbMF09Y3Rvcj0oXzExZiYmXzExZi5jb25zdHJ1Y3Rvcj09PSJtYW51YWwiKT9fMTE0
KF8xMWUpOihfMTFlLmxlbmd0aD09MT9fMTEyKF8xMWMuY29uc3RydWN0b3IsdCk6XzEwZChfMTFl
LHQpKTtjdG9yLl9tZXRhPXtiYXNlczpfMTFlLGhpZGRlbjpfMTFjLGNoYWluczpfMTFmLHBhcmVu
dHM6XzEyMSxjdG9yOl8xMWMuY29uc3RydWN0b3J9O2N0b3Iuc3VwZXJjbGFzcz1fMTFiJiZfMTFi
LnByb3RvdHlwZTtjdG9yLmV4dGVuZD1fMTBiO2N0b3IucHJvdG90eXBlPV8xMWQ7XzExZC5jb25z
dHJ1Y3Rvcj1jdG9yO18xMWQuZ2V0SW5oZXJpdGVkPV8xMDI7XzExZC5pbmhlcml0ZWQ9X2ZhO18x
MWQuaXNJbnN0YW5jZU9mPV8xMDM7aWYoXzExYSl7XzExZC5kZWNsYXJlZENsYXNzPV8xMWE7ZC5z
ZXRPYmplY3QoXzExYSxjdG9yKTt9aWYoXzExZil7Zm9yKG5hbWUgaW4gXzExZil7aWYoXzExZFtu
YW1lXSYmdHlwZW9mIF8xMWZbbmFtZV09PSJzdHJpbmciJiZuYW1lIT1fZWUpe3Q9XzExZFtuYW1l
XT1fMTE2KG5hbWUsXzExZSxfMTFmW25hbWVdPT09ImFmdGVyIik7dC5ub209bmFtZTt9fX1yZXR1
cm4gY3Rvcjt9O2Quc2FmZU1peGluPV8xMDg7fSkoKTt9aWYoIWRvam8uX2hhc1Jlc291cmNlWyJk
b2pvLl9iYXNlLmNvbm5lY3QiXSl7ZG9qby5faGFzUmVzb3VyY2VbImRvam8uX2Jhc2UuY29ubmVj
dCJdPXRydWU7ZG9qby5wcm92aWRlKCJkb2pvLl9iYXNlLmNvbm5lY3QiKTtkb2pvLl9saXN0ZW5l
cj17Z2V0RGlzcGF0Y2hlcjpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbigpe3ZhciBhcD1BcnJh
eS5wcm90b3R5cGUsYz1hcmd1bWVudHMuY2FsbGVlLGxzPWMuX2xpc3RlbmVycyx0PWMudGFyZ2V0
LHI9dCYmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyksaSxsbHM9W10uY29uY2F0KGxzKTtmb3IoaSBp
biBsbHMpe2lmKCEoaSBpbiBhcCkpe2xsc1tpXS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7fX1yZXR1
cm4gcjt9O30sYWRkOmZ1bmN0aW9uKF8xMjIsXzEyMyxfMTI0KXtfMTIyPV8xMjJ8fGRvam8uZ2xv
YmFsO3ZhciBmPV8xMjJbXzEyM107aWYoIWZ8fCFmLl9saXN0ZW5lcnMpe3ZhciBkPWRvam8uX2xp
c3RlbmVyLmdldERpc3BhdGNoZXIoKTtkLnRhcmdldD1mO2QuX2xpc3RlbmVycz1bXTtmPV8xMjJb
XzEyM109ZDt9cmV0dXJuIGYuX2xpc3RlbmVycy5wdXNoKF8xMjQpO30scmVtb3ZlOmZ1bmN0aW9u
KF8xMjUsXzEyNixfMTI3KXt2YXIgZj0oXzEyNXx8ZG9qby5nbG9iYWwpW18xMjZdO2lmKGYmJmYu
X2xpc3RlbmVycyYmXzEyNy0tKXtkZWxldGUgZi5fbGlzdGVuZXJzW18xMjddO319fTtkb2pvLmNv
bm5lY3Q9ZnVuY3Rpb24ob2JqLF8xMjgsXzEyOSxfMTJhLF8xMmIpe3ZhciBhPWFyZ3VtZW50cyxh
cmdzPVtdLGk9MDthcmdzLnB1c2goZG9qby5pc1N0cmluZyhhWzBdKT9udWxsOmFbaSsrXSxhW2kr
K10pO3ZhciBhMT1hW2krMV07YXJncy5wdXNoKGRvam8uaXNTdHJpbmcoYTEpfHxkb2pvLmlzRnVu
Y3Rpb24oYTEpP2FbaSsrXTpudWxsLGFbaSsrXSk7Zm9yKHZhciBsPWEubGVuZ3RoO2k8bDtpKysp
e2FyZ3MucHVzaChhW2ldKTt9cmV0dXJuIGRvam8uX2Nvbm5lY3QuYXBwbHkodGhpcyxhcmdzKTt9
O2Rvam8uX2Nvbm5lY3Q9ZnVuY3Rpb24ob2JqLF8xMmMsXzEyZCxfMTJlKXt2YXIgbD1kb2pvLl9s
aXN0ZW5lcixoPWwuYWRkKG9iaixfMTJjLGRvam8uaGl0Y2goXzEyZCxfMTJlKSk7cmV0dXJuIFtv
YmosXzEyYyxoLGxdO307ZG9qby5kaXNjb25uZWN0PWZ1bmN0aW9uKF8xMmYpe2lmKF8xMmYmJl8x
MmZbMF0hPT11bmRlZmluZWQpe2Rvam8uX2Rpc2Nvbm5lY3QuYXBwbHkodGhpcyxfMTJmKTtkZWxl
dGUgXzEyZlswXTt9fTtkb2pvLl9kaXNjb25uZWN0PWZ1bmN0aW9uKG9iaixfMTMwLF8xMzEsXzEz
Mil7XzEzMi5yZW1vdmUob2JqLF8xMzAsXzEzMSk7fTtkb2pvLl90b3BpY3M9e307ZG9qby5zdWJz
Y3JpYmU9ZnVuY3Rpb24oXzEzMyxfMTM0LF8xMzUpe3JldHVybiBbXzEzMyxkb2pvLl9saXN0ZW5l
ci5hZGQoZG9qby5fdG9waWNzLF8xMzMsZG9qby5oaXRjaChfMTM0LF8xMzUpKV07fTtkb2pvLnVu
c3Vic2NyaWJlPWZ1bmN0aW9uKF8xMzYpe2lmKF8xMzYpe2Rvam8uX2xpc3RlbmVyLnJlbW92ZShk
b2pvLl90b3BpY3MsXzEzNlswXSxfMTM2WzFdKTt9fTtkb2pvLnB1Ymxpc2g9ZnVuY3Rpb24oXzEz
NyxhcmdzKXt2YXIgZj1kb2pvLl90b3BpY3NbXzEzN107aWYoZil7Zi5hcHBseSh0aGlzLGFyZ3N8
fFtdKTt9fTtkb2pvLmNvbm5lY3RQdWJsaXNoZXI9ZnVuY3Rpb24oXzEzOCxvYmosXzEzOSl7dmFy
IHBmPWZ1bmN0aW9uKCl7ZG9qby5wdWJsaXNoKF8xMzgsYXJndW1lbnRzKTt9O3JldHVybiBfMTM5
P2Rvam8uY29ubmVjdChvYmosXzEzOSxwZik6ZG9qby5jb25uZWN0KG9iaixwZik7fTt9aWYoIWRv
am8uX2hhc1Jlc291cmNlWyJkb2pvLl9iYXNlLkRlZmVycmVkIl0pe2Rvam8uX2hhc1Jlc291cmNl
WyJkb2pvLl9iYXNlLkRlZmVycmVkIl09dHJ1ZTtkb2pvLnByb3ZpZGUoImRvam8uX2Jhc2UuRGVm
ZXJyZWQiKTsoZnVuY3Rpb24oKXt2YXIgXzEzYT1mdW5jdGlvbigpe307dmFyIF8xM2I9T2JqZWN0
LmZyZWV6ZXx8ZnVuY3Rpb24oKXt9O2Rvam8uRGVmZXJyZWQ9ZnVuY3Rpb24oXzEzYyl7dmFyIF8x
M2QsXzEzZSxfMTNmLGhlYWQsXzE0MDt2YXIgXzE0MT0odGhpcy5wcm9taXNlPXt9KTtmdW5jdGlv
biBfMTQyKF8xNDMpe2lmKF8xM2Upe3Rocm93IG5ldyBFcnJvcigiVGhpcyBkZWZlcnJlZCBoYXMg
YWxyZWFkeSBiZWVuIHJlc29sdmVkIik7fV8xM2Q9XzE0MztfMTNlPXRydWU7XzE0NCgpO307ZnVu
Y3Rpb24gXzE0NCgpe3ZhciBfMTQ1O3doaWxlKCFfMTQ1JiZfMTQwKXt2YXIgXzE0Nj1fMTQwO18x
NDA9XzE0MC5uZXh0O2lmKChfMTQ1PShfMTQ2LnByb2dyZXNzPT1fMTNhKSkpe18xM2U9ZmFsc2U7
fXZhciBmdW5jPShfMTNmP18xNDYuZXJyb3I6XzE0Ni5yZXNvbHZlZCk7aWYoZnVuYyl7dHJ5e3Zh
ciBfMTQ3PWZ1bmMoXzEzZCk7aWYoXzE0NyYmdHlwZW9mIF8xNDcudGhlbj09PSJmdW5jdGlvbiIp
e18xNDcudGhlbihkb2pvLmhpdGNoKF8xNDYuZGVmZXJyZWQsInJlc29sdmUiKSxkb2pvLmhpdGNo
KF8xNDYuZGVmZXJyZWQsInJlamVjdCIpKTtjb250aW51ZTt9dmFyIF8xNDg9XzE0NSYmXzE0Nz09
PXVuZGVmaW5lZDtpZihfMTQ1JiYhXzE0OCl7XzEzZj1fMTQ3IGluc3RhbmNlb2YgRXJyb3I7fV8x
NDYuZGVmZXJyZWRbXzE0OCYmXzEzZj8icmVqZWN0IjoicmVzb2x2ZSJdKF8xNDg/XzEzZDpfMTQ3
KTt9Y2F0Y2goZSl7XzE0Ni5kZWZlcnJlZC5yZWplY3QoZSk7fX1lbHNle2lmKF8xM2Ype18xNDYu
ZGVmZXJyZWQucmVqZWN0KF8xM2QpO31lbHNle18xNDYuZGVmZXJyZWQucmVzb2x2ZShfMTNkKTt9
fX19O3RoaXMucmVzb2x2ZT10aGlzLmNhbGxiYWNrPWZ1bmN0aW9uKF8xNDkpe3RoaXMuZmlyZWQ9
MDt0aGlzLnJlc3VsdHM9W18xNDksbnVsbF07XzE0MihfMTQ5KTt9O3RoaXMucmVqZWN0PXRoaXMu
ZXJyYmFjaz1mdW5jdGlvbihfMTRhKXtfMTNmPXRydWU7dGhpcy5maXJlZD0xO18xNDIoXzE0YSk7
dGhpcy5yZXN1bHRzPVtudWxsLF8xNGFdO2lmKCFfMTRhfHxfMTRhLmxvZyE9PWZhbHNlKXsoZG9q
by5jb25maWcuZGVmZXJyZWRPbkVycm9yfHxmdW5jdGlvbih4KXtjb25zb2xlLmVycm9yKHgpO30p
KF8xNGEpO319O3RoaXMucHJvZ3Jlc3M9ZnVuY3Rpb24oXzE0Yil7dmFyIF8xNGM9XzE0MDt3aGls
ZShfMTRjKXt2YXIgXzE0ZD1fMTRjLnByb2dyZXNzO18xNGQmJl8xNGQoXzE0Yik7XzE0Yz1fMTRj
Lm5leHQ7fX07dGhpcy5hZGRDYWxsYmFja3M9ZnVuY3Rpb24oXzE0ZSxfMTRmKXt0aGlzLnRoZW4o
XzE0ZSxfMTRmLF8xM2EpO3JldHVybiB0aGlzO307dGhpcy50aGVuPV8xNDEudGhlbj1mdW5jdGlv
bihfMTUwLF8xNTEsXzE1Mil7dmFyIF8xNTM9XzE1Mj09XzEzYT90aGlzOm5ldyBkb2pvLkRlZmVy
cmVkKF8xNDEuY2FuY2VsKTt2YXIgXzE1ND17cmVzb2x2ZWQ6XzE1MCxlcnJvcjpfMTUxLHByb2dy
ZXNzOl8xNTIsZGVmZXJyZWQ6XzE1M307aWYoXzE0MCl7aGVhZD1oZWFkLm5leHQ9XzE1NDt9ZWxz
ZXtfMTQwPWhlYWQ9XzE1NDt9aWYoXzEzZSl7XzE0NCgpO31yZXR1cm4gXzE1My5wcm9taXNlO307
dmFyIF8xNTU9dGhpczt0aGlzLmNhbmNlbD1fMTQxLmNhbmNlbD1mdW5jdGlvbigpe2lmKCFfMTNl
KXt2YXIgXzE1Nj1fMTNjJiZfMTNjKF8xNTUpO2lmKCFfMTNlKXtpZighKF8xNTYgaW5zdGFuY2Vv
ZiBFcnJvcikpe18xNTY9bmV3IEVycm9yKF8xNTYpO31fMTU2LmxvZz1mYWxzZTtfMTU1LnJlamVj
dChfMTU2KTt9fX07XzEzYihfMTQxKTt9O2Rvam8uZXh0ZW5kKGRvam8uRGVmZXJyZWQse2FkZENh
bGxiYWNrOmZ1bmN0aW9uKF8xNTcpe3JldHVybiB0aGlzLmFkZENhbGxiYWNrcyhkb2pvLmhpdGNo
LmFwcGx5KGRvam8sYXJndW1lbnRzKSk7fSxhZGRFcnJiYWNrOmZ1bmN0aW9uKF8xNTgpe3JldHVy
biB0aGlzLmFkZENhbGxiYWNrcyhudWxsLGRvam8uaGl0Y2guYXBwbHkoZG9qbyxhcmd1bWVudHMp
KTt9LGFkZEJvdGg6ZnVuY3Rpb24oXzE1OSl7dmFyIF8xNWE9ZG9qby5oaXRjaC5hcHBseShkb2pv
LGFyZ3VtZW50cyk7cmV0dXJuIHRoaXMuYWRkQ2FsbGJhY2tzKF8xNWEsXzE1YSk7fSxmaXJlZDot
MX0pO30pKCk7ZG9qby53aGVuPWZ1bmN0aW9uKF8xNWIsXzE1YyxfMTVkLF8xNWUpe2lmKF8xNWIm
JnR5cGVvZiBfMTViLnRoZW49PT0iZnVuY3Rpb24iKXtyZXR1cm4gXzE1Yi50aGVuKF8xNWMsXzE1
ZCxfMTVlKTt9cmV0dXJuIF8xNWMoXzE1Yik7fTt9aWYoIWRvam8uX2hhc1Jlc291cmNlWyJkb2pv
Ll9iYXNlLmpzb24iXSl7ZG9qby5faGFzUmVzb3VyY2VbImRvam8uX2Jhc2UuanNvbiJdPXRydWU7
ZG9qby5wcm92aWRlKCJkb2pvLl9iYXNlLmpzb24iKTtkb2pvLmZyb21Kc29uPWZ1bmN0aW9uKGpz
b24pe3JldHVybiBldmFsKCIoIitqc29uKyIpIik7fTtkb2pvLl9lc2NhcGVTdHJpbmc9ZnVuY3Rp
b24oc3RyKXtyZXR1cm4gKCJcIiIrc3RyLnJlcGxhY2UoLyhbIlxcXSkvZywiXFwkMSIpKyJcIiIp
LnJlcGxhY2UoL1tcZl0vZywiXFxmIikucmVwbGFjZSgvW1xiXS9nLCJcXGIiKS5yZXBsYWNlKC9b
XG5dL2csIlxcbiIpLnJlcGxhY2UoL1tcdF0vZywiXFx0IikucmVwbGFjZSgvW1xyXS9nLCJcXHIi
KTt9O2Rvam8udG9Kc29uSW5kZW50U3RyPSJcdCI7ZG9qby50b0pzb249ZnVuY3Rpb24oaXQsXzE1
ZixfMTYwKXtpZihpdD09PXVuZGVmaW5lZCl7cmV0dXJuICJ1bmRlZmluZWQiO312YXIgXzE2MT10
eXBlb2YgaXQ7aWYoXzE2MT09Im51bWJlciJ8fF8xNjE9PSJib29sZWFuIil7cmV0dXJuIGl0KyIi
O31pZihpdD09PW51bGwpe3JldHVybiAibnVsbCI7fWlmKGRvam8uaXNTdHJpbmcoaXQpKXtyZXR1
cm4gZG9qby5fZXNjYXBlU3RyaW5nKGl0KTt9dmFyIF8xNjI9YXJndW1lbnRzLmNhbGxlZTt2YXIg
XzE2MztfMTYwPV8xNjB8fCIiO3ZhciBfMTY0PV8xNWY/XzE2MCtkb2pvLnRvSnNvbkluZGVudFN0
cjoiIjt2YXIgdGY9aXQuX19qc29uX198fGl0Lmpzb247aWYoZG9qby5pc0Z1bmN0aW9uKHRmKSl7
XzE2Mz10Zi5jYWxsKGl0KTtpZihpdCE9PV8xNjMpe3JldHVybiBfMTYyKF8xNjMsXzE1ZixfMTY0
KTt9fWlmKGl0Lm5vZGVUeXBlJiZpdC5jbG9uZU5vZGUpe3Rocm93IG5ldyBFcnJvcigiQ2FuJ3Qg
c2VyaWFsaXplIERPTSBub2RlcyIpO312YXIgc2VwPV8xNWY/IiAiOiIiO3ZhciBfMTY1PV8xNWY/
IlxuIjoiIjtpZihkb2pvLmlzQXJyYXkoaXQpKXt2YXIgcmVzPWRvam8ubWFwKGl0LGZ1bmN0aW9u
KG9iail7dmFyIHZhbD1fMTYyKG9iaixfMTVmLF8xNjQpO2lmKHR5cGVvZiB2YWwhPSJzdHJpbmci
KXt2YWw9InVuZGVmaW5lZCI7fXJldHVybiBfMTY1K18xNjQrdmFsO30pO3JldHVybiAiWyIrcmVz
LmpvaW4oIiwiK3NlcCkrXzE2NStfMTYwKyJdIjt9aWYoXzE2MT09ImZ1bmN0aW9uIil7cmV0dXJu
IG51bGw7fXZhciBfMTY2PVtdLGtleTtmb3Ioa2V5IGluIGl0KXt2YXIgXzE2Nyx2YWw7aWYodHlw
ZW9mIGtleT09Im51bWJlciIpe18xNjc9IlwiIitrZXkrIlwiIjt9ZWxzZXtpZih0eXBlb2Yga2V5
PT0ic3RyaW5nIil7XzE2Nz1kb2pvLl9lc2NhcGVTdHJpbmcoa2V5KTt9ZWxzZXtjb250aW51ZTt9
fXZhbD1fMTYyKGl0W2tleV0sXzE1ZixfMTY0KTtpZih0eXBlb2YgdmFsIT0ic3RyaW5nIil7Y29u
dGludWU7fV8xNjYucHVzaChfMTY1K18xNjQrXzE2NysiOiIrc2VwK3ZhbCk7fXJldHVybiAieyIr
XzE2Ni5qb2luKCIsIitzZXApK18xNjUrXzE2MCsifSI7fTt9aWYoIWRvam8uX2hhc1Jlc291cmNl
WyJkb2pvLl9iYXNlLkNvbG9yIl0pe2Rvam8uX2hhc1Jlc291cmNlWyJkb2pvLl9iYXNlLkNvbG9y
Il09dHJ1ZTtkb2pvLnByb3ZpZGUoImRvam8uX2Jhc2UuQ29sb3IiKTsoZnVuY3Rpb24oKXt2YXIg
ZD1kb2pvO2Rvam8uQ29sb3I9ZnVuY3Rpb24oXzE2OCl7aWYoXzE2OCl7dGhpcy5zZXRDb2xvcihf
MTY4KTt9fTtkb2pvLkNvbG9yLm5hbWVkPXtibGFjazpbMCwwLDBdLHNpbHZlcjpbMTkyLDE5Miwx
OTJdLGdyYXk6WzEyOCwxMjgsMTI4XSx3aGl0ZTpbMjU1LDI1NSwyNTVdLG1hcm9vbjpbMTI4LDAs
MF0scmVkOlsyNTUsMCwwXSxwdXJwbGU6WzEyOCwwLDEyOF0sZnVjaHNpYTpbMjU1LDAsMjU1XSxn
cmVlbjpbMCwxMjgsMF0sbGltZTpbMCwyNTUsMF0sb2xpdmU6WzEyOCwxMjgsMF0seWVsbG93Olsy
NTUsMjU1LDBdLG5hdnk6WzAsMCwxMjhdLGJsdWU6WzAsMCwyNTVdLHRlYWw6WzAsMTI4LDEyOF0s
YXF1YTpbMCwyNTUsMjU1XSx0cmFuc3BhcmVudDpkLmNvbmZpZy50cmFuc3BhcmVudENvbG9yfHxb
MjU1LDI1NSwyNTVdfTtkb2pvLmV4dGVuZChkb2pvLkNvbG9yLHtyOjI1NSxnOjI1NSxiOjI1NSxh
OjEsX3NldDpmdW5jdGlvbihyLGcsYixhKXt2YXIgdD10aGlzO3Qucj1yO3QuZz1nO3QuYj1iO3Qu
YT1hO30sc2V0Q29sb3I6ZnVuY3Rpb24oXzE2OSl7aWYoZC5pc1N0cmluZyhfMTY5KSl7ZC5jb2xv
ckZyb21TdHJpbmcoXzE2OSx0aGlzKTt9ZWxzZXtpZihkLmlzQXJyYXkoXzE2OSkpe2QuY29sb3JG
cm9tQXJyYXkoXzE2OSx0aGlzKTt9ZWxzZXt0aGlzLl9zZXQoXzE2OS5yLF8xNjkuZyxfMTY5LmIs
XzE2OS5hKTtpZighKF8xNjkgaW5zdGFuY2VvZiBkLkNvbG9yKSl7dGhpcy5zYW5pdGl6ZSgpO319
fXJldHVybiB0aGlzO30sc2FuaXRpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpczt9LHRvUmdiOmZ1
bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gW3Qucix0LmcsdC5iXTt9LHRvUmdiYTpmdW5jdGlv
bigpe3ZhciB0PXRoaXM7cmV0dXJuIFt0LnIsdC5nLHQuYix0LmFdO30sdG9IZXg6ZnVuY3Rpb24o
KXt2YXIgYXJyPWQubWFwKFsiciIsImciLCJiIl0sZnVuY3Rpb24oeCl7dmFyIHM9dGhpc1t4XS50
b1N0cmluZygxNik7cmV0dXJuIHMubGVuZ3RoPDI/IjAiK3M6czt9LHRoaXMpO3JldHVybiAiIyIr
YXJyLmpvaW4oIiIpO30sdG9Dc3M6ZnVuY3Rpb24oXzE2YSl7dmFyIHQ9dGhpcyxyZ2I9dC5yKyIs
ICIrdC5nKyIsICIrdC5iO3JldHVybiAoXzE2YT8icmdiYSgiK3JnYisiLCAiK3QuYToicmdiKCIr
cmdiKSsiKSI7fSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRvQ3NzKHRydWUpO319
KTtkb2pvLmJsZW5kQ29sb3JzPWZ1bmN0aW9uKF8xNmIsZW5kLF8xNmMsb2JqKXt2YXIgdD1vYmp8
fG5ldyBkLkNvbG9yKCk7ZC5mb3JFYWNoKFsiciIsImciLCJiIiwiYSJdLGZ1bmN0aW9uKHgpe3Rb
eF09XzE2Ylt4XSsoZW5kW3hdLV8xNmJbeF0pKl8xNmM7aWYoeCE9ImEiKXt0W3hdPU1hdGgucm91
bmQodFt4XSk7fX0pO3JldHVybiB0LnNhbml0aXplKCk7fTtkb2pvLmNvbG9yRnJvbVJnYj1mdW5j
dGlvbihfMTZkLG9iail7dmFyIG09XzE2ZC50b0xvd2VyQ2FzZSgpLm1hdGNoKC9ecmdiYT9cKChb
XHNcLiwwLTldKylcKS8pO3JldHVybiBtJiZkb2pvLmNvbG9yRnJvbUFycmF5KG1bMV0uc3BsaXQo
L1xzKixccyovKSxvYmopO307ZG9qby5jb2xvckZyb21IZXg9ZnVuY3Rpb24oXzE2ZSxvYmope3Zh
ciB0PW9ianx8bmV3IGQuQ29sb3IoKSxiaXRzPShfMTZlLmxlbmd0aD09NCk/NDo4LG1hc2s9KDE8
PGJpdHMpLTE7XzE2ZT1OdW1iZXIoIjB4IitfMTZlLnN1YnN0cigxKSk7aWYoaXNOYU4oXzE2ZSkp
e3JldHVybiBudWxsO31kLmZvckVhY2goWyJiIiwiZyIsInIiXSxmdW5jdGlvbih4KXt2YXIgYz1f
MTZlJm1hc2s7XzE2ZT4+PWJpdHM7dFt4XT1iaXRzPT00PzE3KmM6Yzt9KTt0LmE9MTtyZXR1cm4g
dDt9O2Rvam8uY29sb3JGcm9tQXJyYXk9ZnVuY3Rpb24oYSxvYmope3ZhciB0PW9ianx8bmV3IGQu
Q29sb3IoKTt0Ll9zZXQoTnVtYmVyKGFbMF0pLE51bWJlcihhWzFdKSxOdW1iZXIoYVsyXSksTnVt
YmVyKGFbM10pKTtpZihpc05hTih0LmEpKXt0LmE9MTt9cmV0dXJuIHQuc2FuaXRpemUoKTt9O2Rv
am8uY29sb3JGcm9tU3RyaW5nPWZ1bmN0aW9uKHN0cixvYmope3ZhciBhPWQuQ29sb3IubmFtZWRb
c3RyXTtyZXR1cm4gYSYmZC5jb2xvckZyb21BcnJheShhLG9iail8fGQuY29sb3JGcm9tUmdiKHN0
cixvYmopfHxkLmNvbG9yRnJvbUhleChzdHIsb2JqKTt9O30pKCk7fWlmKCFkb2pvLl9oYXNSZXNv
dXJjZVsiZG9qby5fYmFzZS53aW5kb3ciXSl7ZG9qby5faGFzUmVzb3VyY2VbImRvam8uX2Jhc2Uu
d2luZG93Il09dHJ1ZTtkb2pvLnByb3ZpZGUoImRvam8uX2Jhc2Uud2luZG93Iik7ZG9qby5kb2M9
d2luZG93WyJkb2N1bWVudCJdfHxudWxsO2Rvam8uYm9keT1mdW5jdGlvbigpe3JldHVybiBkb2pv
LmRvYy5ib2R5fHxkb2pvLmRvYy5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIpWzBdO307ZG9q
by5zZXRDb250ZXh0PWZ1bmN0aW9uKF8xNmYsXzE3MCl7ZG9qby5nbG9iYWw9XzE2Zjtkb2pvLmRv
Yz1fMTcwO307ZG9qby53aXRoR2xvYmFsPWZ1bmN0aW9uKF8xNzEsXzE3MixfMTczLF8xNzQpe3Zh
ciBfMTc1PWRvam8uZ2xvYmFsO3RyeXtkb2pvLmdsb2JhbD1fMTcxO3JldHVybiBkb2pvLndpdGhE
b2MuY2FsbChudWxsLF8xNzEuZG9jdW1lbnQsXzE3MixfMTczLF8xNzQpO31maW5hbGx5e2Rvam8u
Z2xvYmFsPV8xNzU7fX07ZG9qby53aXRoRG9jPWZ1bmN0aW9uKF8xNzYsXzE3NyxfMTc4LF8xNzkp
e3ZhciBfMTdhPWRvam8uZG9jLF8xN2I9ZG9qby5fYm9keUx0cixvbGRRPWRvam8uaXNRdWlya3M7
dHJ5e2Rvam8uZG9jPV8xNzY7ZGVsZXRlIGRvam8uX2JvZHlMdHI7ZG9qby5pc1F1aXJrcz1kb2pv
LmRvYy5jb21wYXRNb2RlPT0iQmFja0NvbXBhdCI7aWYoXzE3OCYmdHlwZW9mIF8xNzc9PSJzdHJp
bmciKXtfMTc3PV8xNzhbXzE3N107fXJldHVybiBfMTc3LmFwcGx5KF8xNzgsXzE3OXx8W10pO31m
aW5hbGx5e2Rvam8uZG9jPV8xN2E7ZGVsZXRlIGRvam8uX2JvZHlMdHI7aWYoXzE3YiE9PXVuZGVm
aW5lZCl7ZG9qby5fYm9keUx0cj1fMTdiO31kb2pvLmlzUXVpcmtzPW9sZFE7fX07fWlmKCFkb2pv
Ll9oYXNSZXNvdXJjZVsiZG9qby5fYmFzZS5ldmVudCJdKXtkb2pvLl9oYXNSZXNvdXJjZVsiZG9q
by5fYmFzZS5ldmVudCJdPXRydWU7ZG9qby5wcm92aWRlKCJkb2pvLl9iYXNlLmV2ZW50Iik7KGZ1
bmN0aW9uKCl7dmFyIGRlbD0oZG9qby5fZXZlbnRfbGlzdGVuZXI9e2FkZDpmdW5jdGlvbihub2Rl
LG5hbWUsZnApe2lmKCFub2RlKXtyZXR1cm47fW5hbWU9ZGVsLl9ub3JtYWxpemVFdmVudE5hbWUo
bmFtZSk7ZnA9ZGVsLl9maXhDYWxsYmFjayhuYW1lLGZwKTtpZighZG9qby5pc0lFJiYobmFtZT09
Im1vdXNlZW50ZXIifHxuYW1lPT0ibW91c2VsZWF2ZSIpKXt2YXIgb2ZwPWZwO25hbWU9KG5hbWU9
PSJtb3VzZWVudGVyIik/Im1vdXNlb3ZlciI6Im1vdXNlb3V0IjtmcD1mdW5jdGlvbihlKXtpZigh
ZG9qby5pc0Rlc2NlbmRhbnQoZS5yZWxhdGVkVGFyZ2V0LG5vZGUpKXtyZXR1cm4gb2ZwLmNhbGwo
dGhpcyxlKTt9fTt9bm9kZS5hZGRFdmVudExpc3RlbmVyKG5hbWUsZnAsZmFsc2UpO3JldHVybiBm
cDt9LHJlbW92ZTpmdW5jdGlvbihub2RlLF8xN2MsXzE3ZCl7aWYobm9kZSl7XzE3Yz1kZWwuX25v
cm1hbGl6ZUV2ZW50TmFtZShfMTdjKTtpZighZG9qby5pc0lFJiYoXzE3Yz09Im1vdXNlZW50ZXIi
fHxfMTdjPT0ibW91c2VsZWF2ZSIpKXtfMTdjPShfMTdjPT0ibW91c2VlbnRlciIpPyJtb3VzZW92
ZXIiOiJtb3VzZW91dCI7fW5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihfMTdjLF8xN2QsZmFsc2Up
O319LF9ub3JtYWxpemVFdmVudE5hbWU6ZnVuY3Rpb24obmFtZSl7cmV0dXJuIG5hbWUuc2xpY2Uo
MCwyKT09Im9uIj9uYW1lLnNsaWNlKDIpOm5hbWU7fSxfZml4Q2FsbGJhY2s6ZnVuY3Rpb24obmFt
ZSxmcCl7cmV0dXJuIG5hbWUhPSJrZXlwcmVzcyI/ZnA6ZnVuY3Rpb24oZSl7cmV0dXJuIGZwLmNh
bGwodGhpcyxkZWwuX2ZpeEV2ZW50KGUsdGhpcykpO307fSxfZml4RXZlbnQ6ZnVuY3Rpb24oZXZ0
LF8xN2Upe3N3aXRjaChldnQudHlwZSl7Y2FzZSAia2V5cHJlc3MiOmRlbC5fc2V0S2V5Q2hhcihl
dnQpO2JyZWFrO31yZXR1cm4gZXZ0O30sX3NldEtleUNoYXI6ZnVuY3Rpb24oZXZ0KXtldnQua2V5
Q2hhcj1ldnQuY2hhckNvZGU+PTMyP1N0cmluZy5mcm9tQ2hhckNvZGUoZXZ0LmNoYXJDb2RlKToi
IjtldnQuY2hhck9yQ29kZT1ldnQua2V5Q2hhcnx8ZXZ0LmtleUNvZGU7fSxfcHVuY3RNYXA6ezEw
Njo0MiwxMTE6NDcsMTg2OjU5LDE4Nzo0MywxODg6NDQsMTg5OjQ1LDE5MDo0NiwxOTE6NDcsMTky
Ojk2LDIxOTo5MSwyMjA6OTIsMjIxOjkzLDIyMjozOX19KTtkb2pvLmZpeEV2ZW50PWZ1bmN0aW9u
KGV2dCxfMTdmKXtyZXR1cm4gZGVsLl9maXhFdmVudChldnQsXzE3Zik7fTtkb2pvLnN0b3BFdmVu
dD1mdW5jdGlvbihldnQpe2V2dC5wcmV2ZW50RGVmYXVsdCgpO2V2dC5zdG9wUHJvcGFnYXRpb24o
KTt9O3ZhciBfMTgwPWRvam8uX2xpc3RlbmVyO2Rvam8uX2Nvbm5lY3Q9ZnVuY3Rpb24ob2JqLF8x
ODEsXzE4MixfMTgzLF8xODQpe3ZhciBfMTg1PW9iaiYmKG9iai5ub2RlVHlwZXx8b2JqLmF0dGFj
aEV2ZW50fHxvYmouYWRkRXZlbnRMaXN0ZW5lcik7dmFyIGxpZD1fMTg1PyhfMTg0PzI6MSk6MCxs
PVtkb2pvLl9saXN0ZW5lcixkZWwsXzE4MF1bbGlkXTt2YXIgaD1sLmFkZChvYmosXzE4MSxkb2pv
LmhpdGNoKF8xODIsXzE4MykpO3JldHVybiBbb2JqLF8xODEsaCxsaWRdO307ZG9qby5fZGlzY29u
bmVjdD1mdW5jdGlvbihvYmosXzE4NixfMTg3LF8xODgpeyhbZG9qby5fbGlzdGVuZXIsZGVsLF8x
ODBdW18xODhdKS5yZW1vdmUob2JqLF8xODYsXzE4Nyk7fTtkb2pvLmtleXM9e0JBQ0tTUEFDRTo4
LFRBQjo5LENMRUFSOjEyLEVOVEVSOjEzLFNISUZUOjE2LENUUkw6MTcsQUxUOjE4LE1FVEE6ZG9q
by5pc1NhZmFyaT85MToyMjQsUEFVU0U6MTksQ0FQU19MT0NLOjIwLEVTQ0FQRToyNyxTUEFDRToz
MixQQUdFX1VQOjMzLFBBR0VfRE9XTjozNCxFTkQ6MzUsSE9NRTozNixMRUZUX0FSUk9XOjM3LFVQ
X0FSUk9XOjM4LFJJR0hUX0FSUk9XOjM5LERPV05fQVJST1c6NDAsSU5TRVJUOjQ1LERFTEVURTo0
NixIRUxQOjQ3LExFRlRfV0lORE9XOjkxLFJJR0hUX1dJTkRPVzo5MixTRUxFQ1Q6OTMsTlVNUEFE
XzA6OTYsTlVNUEFEXzE6OTcsTlVNUEFEXzI6OTgsTlVNUEFEXzM6OTksTlVNUEFEXzQ6MTAwLE5V
TVBBRF81OjEwMSxOVU1QQURfNjoxMDIsTlVNUEFEXzc6MTAzLE5VTVBBRF84OjEwNCxOVU1QQURf
OToxMDUsTlVNUEFEX01VTFRJUExZOjEwNixOVU1QQURfUExVUzoxMDcsTlVNUEFEX0VOVEVSOjEw
OCxOVU1QQURfTUlOVVM6MTA5LE5VTVBBRF9QRVJJT0Q6MTEwLE5VTVBBRF9ESVZJREU6MTExLEYx
OjExMixGMjoxMTMsRjM6MTE0LEY0OjExNSxGNToxMTYsRjY6MTE3LEY3OjExOCxGODoxMTksRjk6
MTIwLEYxMDoxMjEsRjExOjEyMixGMTI6MTIzLEYxMzoxMjQsRjE0OjEyNSxGMTU6MTI2LE5VTV9M
T0NLOjE0NCxTQ1JPTExfTE9DSzoxNDUsY29weUtleTpkb2pvLmlzTWFjJiYhZG9qby5pc0FJUj8o
ZG9qby5pc1NhZmFyaT85MToyMjQpOjE3fTt2YXIgXzE4OT1kb2pvLmlzTWFjPyJtZXRhS2V5Ijoi
Y3RybEtleSI7ZG9qby5pc0NvcHlLZXk9ZnVuY3Rpb24oZSl7cmV0dXJuIGVbXzE4OV07fTtpZihk
b2pvLmlzSUU8OXx8KGRvam8uaXNJRSYmZG9qby5pc1F1aXJrcykpe2Rvam8ubW91c2VCdXR0b25z
PXtMRUZUOjEsTUlERExFOjQsUklHSFQ6Mixpc0J1dHRvbjpmdW5jdGlvbihlLF8xOGEpe3JldHVy
biBlLmJ1dHRvbiZfMThhO30saXNMZWZ0OmZ1bmN0aW9uKGUpe3JldHVybiBlLmJ1dHRvbiYxO30s
aXNNaWRkbGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuYnV0dG9uJjQ7fSxpc1JpZ2h0OmZ1bmN0aW9u
KGUpe3JldHVybiBlLmJ1dHRvbiYyO319O31lbHNle2Rvam8ubW91c2VCdXR0b25zPXtMRUZUOjAs
TUlERExFOjEsUklHSFQ6Mixpc0J1dHRvbjpmdW5jdGlvbihlLF8xOGIpe3JldHVybiBlLmJ1dHRv
bj09XzE4Yjt9LGlzTGVmdDpmdW5jdGlvbihlKXtyZXR1cm4gZS5idXR0b249PTA7fSxpc01pZGRs
ZTpmdW5jdGlvbihlKXtyZXR1cm4gZS5idXR0b249PTE7fSxpc1JpZ2h0OmZ1bmN0aW9uKGUpe3Jl
dHVybiBlLmJ1dHRvbj09Mjt9fTt9aWYoZG9qby5pc0lFKXt2YXIgXzE4Yz1mdW5jdGlvbihlLGNv
ZGUpe3RyeXtyZXR1cm4gKGUua2V5Q29kZT1jb2RlKTt9Y2F0Y2goZSl7cmV0dXJuIDA7fX07dmFy
IGllbD1kb2pvLl9saXN0ZW5lcjt2YXIgXzE4ZD0oZG9qby5faWVMaXN0ZW5lcnNOYW1lPSJfIitk
b2pvLl9zY29wZU5hbWUrIl9saXN0ZW5lcnMiKTtpZighZG9qby5jb25maWcuX2FsbG93X2xlYWtz
KXtfMTgwPWllbD1kb2pvLl9pZV9saXN0ZW5lcj17aGFuZGxlcnM6W10sYWRkOmZ1bmN0aW9uKF8x
OGUsXzE4ZixfMTkwKXtfMThlPV8xOGV8fGRvam8uZ2xvYmFsO3ZhciBmPV8xOGVbXzE4Zl07aWYo
IWZ8fCFmW18xOGRdKXt2YXIgZD1kb2pvLl9nZXRJZURpc3BhdGNoZXIoKTtkLnRhcmdldD1mJiYo
aWVoLnB1c2goZiktMSk7ZFtfMThkXT1bXTtmPV8xOGVbXzE4Zl09ZDt9cmV0dXJuIGZbXzE4ZF0u
cHVzaChpZWgucHVzaChfMTkwKS0xKTt9LHJlbW92ZTpmdW5jdGlvbihfMTkxLF8xOTIsXzE5Myl7
dmFyIGY9KF8xOTF8fGRvam8uZ2xvYmFsKVtfMTkyXSxsPWYmJmZbXzE4ZF07aWYoZiYmbCYmXzE5
My0tKXtkZWxldGUgaWVoW2xbXzE5M11dO2RlbGV0ZSBsW18xOTNdO319fTt2YXIgaWVoPWllbC5o
YW5kbGVyczt9ZG9qby5taXhpbihkZWwse2FkZDpmdW5jdGlvbihub2RlLF8xOTQsZnApe2lmKCFu
b2RlKXtyZXR1cm47fV8xOTQ9ZGVsLl9ub3JtYWxpemVFdmVudE5hbWUoXzE5NCk7aWYoXzE5ND09
Im9ua2V5cHJlc3MiKXt2YXIga2Q9bm9kZS5vbmtleWRvd247aWYoIWtkfHwha2RbXzE4ZF18fCFr
ZC5fc3RlYWx0aEtleWRvd25IYW5kbGUpe3ZhciBoPWRlbC5hZGQobm9kZSwib25rZXlkb3duIixk
ZWwuX3N0ZWFsdGhLZXlEb3duKTtrZD1ub2RlLm9ua2V5ZG93bjtrZC5fc3RlYWx0aEtleWRvd25I
YW5kbGU9aDtrZC5fc3RlYWx0aEtleWRvd25SZWZzPTE7fWVsc2V7a2QuX3N0ZWFsdGhLZXlkb3du
UmVmcysrO319cmV0dXJuIGllbC5hZGQobm9kZSxfMTk0LGRlbC5fZml4Q2FsbGJhY2soZnApKTt9
LHJlbW92ZTpmdW5jdGlvbihub2RlLF8xOTUsXzE5Nil7XzE5NT1kZWwuX25vcm1hbGl6ZUV2ZW50
TmFtZShfMTk1KTtpZWwucmVtb3ZlKG5vZGUsXzE5NSxfMTk2KTtpZihfMTk1PT0ib25rZXlwcmVz
cyIpe3ZhciBrZD1ub2RlLm9ua2V5ZG93bjtpZigtLWtkLl9zdGVhbHRoS2V5ZG93blJlZnM8PTAp
e2llbC5yZW1vdmUobm9kZSwib25rZXlkb3duIixrZC5fc3RlYWx0aEtleWRvd25IYW5kbGUpO2Rl
bGV0ZSBrZC5fc3RlYWx0aEtleWRvd25IYW5kbGU7fX19LF9ub3JtYWxpemVFdmVudE5hbWU6ZnVu
Y3Rpb24oXzE5Nyl7cmV0dXJuIF8xOTcuc2xpY2UoMCwyKSE9Im9uIj8ib24iK18xOTc6XzE5Nzt9
LF9ub3A6ZnVuY3Rpb24oKXt9LF9maXhFdmVudDpmdW5jdGlvbihldnQsXzE5OCl7aWYoIWV2dCl7
dmFyIHc9XzE5OCYmKF8xOTgub3duZXJEb2N1bWVudHx8XzE5OC5kb2N1bWVudHx8XzE5OCkucGFy
ZW50V2luZG93fHx3aW5kb3c7ZXZ0PXcuZXZlbnQ7fWlmKCFldnQpe3JldHVybiAoZXZ0KTt9ZXZ0
LnRhcmdldD1ldnQuc3JjRWxlbWVudDtldnQuY3VycmVudFRhcmdldD0oXzE5OHx8ZXZ0LnNyY0Vs
ZW1lbnQpO2V2dC5sYXllclg9ZXZ0Lm9mZnNldFg7ZXZ0LmxheWVyWT1ldnQub2Zmc2V0WTt2YXIg
c2U9ZXZ0LnNyY0VsZW1lbnQsZG9jPShzZSYmc2Uub3duZXJEb2N1bWVudCl8fGRvY3VtZW50O3Zh
ciBfMTk5PSgoZG9qby5pc0lFPDYpfHwoZG9jWyJjb21wYXRNb2RlIl09PSJCYWNrQ29tcGF0Iikp
P2RvYy5ib2R5OmRvYy5kb2N1bWVudEVsZW1lbnQ7dmFyIF8xOWE9ZG9qby5fZ2V0SWVEb2N1bWVu
dEVsZW1lbnRPZmZzZXQoKTtldnQucGFnZVg9ZXZ0LmNsaWVudFgrZG9qby5fZml4SWVCaURpU2Ny
b2xsTGVmdChfMTk5LnNjcm9sbExlZnR8fDApLV8xOWEueDtldnQucGFnZVk9ZXZ0LmNsaWVudFkr
KF8xOTkuc2Nyb2xsVG9wfHwwKS1fMTlhLnk7aWYoZXZ0LnR5cGU9PSJtb3VzZW92ZXIiKXtldnQu
cmVsYXRlZFRhcmdldD1ldnQuZnJvbUVsZW1lbnQ7fWlmKGV2dC50eXBlPT0ibW91c2VvdXQiKXtl
dnQucmVsYXRlZFRhcmdldD1ldnQudG9FbGVtZW50O31pZihkb2pvLmlzSUU8OXx8ZG9qby5pc1F1
aXJrcyl7ZXZ0LnN0b3BQcm9wYWdhdGlvbj1kZWwuX3N0b3BQcm9wYWdhdGlvbjtldnQucHJldmVu
dERlZmF1bHQ9ZGVsLl9wcmV2ZW50RGVmYXVsdDt9cmV0dXJuIGRlbC5fZml4S2V5cyhldnQpO30s
X2ZpeEtleXM6ZnVuY3Rpb24oZXZ0KXtzd2l0Y2goZXZ0LnR5cGUpe2Nhc2UgImtleXByZXNzIjp2
YXIgYz0oImNoYXJDb2RlIiBpbiBldnQ/ZXZ0LmNoYXJDb2RlOmV2dC5rZXlDb2RlKTtpZihjPT0x
MCl7Yz0wO2V2dC5rZXlDb2RlPTEzO31lbHNle2lmKGM9PTEzfHxjPT0yNyl7Yz0wO31lbHNle2lm
KGM9PTMpe2M9OTk7fX19ZXZ0LmNoYXJDb2RlPWM7ZGVsLl9zZXRLZXlDaGFyKGV2dCk7YnJlYWs7
fXJldHVybiBldnQ7fSxfc3RlYWx0aEtleURvd246ZnVuY3Rpb24oZXZ0KXt2YXIga3A9ZXZ0LmN1
cnJlbnRUYXJnZXQub25rZXlwcmVzcztpZigha3B8fCFrcFtfMThkXSl7cmV0dXJuO312YXIgaz1l
dnQua2V5Q29kZTt2YXIgXzE5Yj0oayE9MTN8fChkb2pvLmlzSUU+PTkmJiFkb2pvLmlzUXVpcmtz
KSkmJmshPTMyJiZrIT0yNyYmKGs8NDh8fGs+OTApJiYoazw5Nnx8az4xMTEpJiYoazwxODZ8fGs+
MTkyKSYmKGs8MjE5fHxrPjIyMik7aWYoXzE5Ynx8ZXZ0LmN0cmxLZXkpe3ZhciBjPV8xOWI/MDpr
O2lmKGV2dC5jdHJsS2V5KXtpZihrPT0zfHxrPT0xMyl7cmV0dXJuO31lbHNle2lmKGM+OTUmJmM8
MTA2KXtjLT00ODt9ZWxzZXtpZigoIWV2dC5zaGlmdEtleSkmJihjPj02NSYmYzw9OTApKXtjKz0z
Mjt9ZWxzZXtjPWRlbC5fcHVuY3RNYXBbY118fGM7fX19fXZhciBmYXV4PWRlbC5fc3ludGhlc2l6
ZUV2ZW50KGV2dCx7dHlwZToia2V5cHJlc3MiLGZhdXg6dHJ1ZSxjaGFyQ29kZTpjfSk7a3AuY2Fs
bChldnQuY3VycmVudFRhcmdldCxmYXV4KTtpZihkb2pvLmlzSUU8OXx8KGRvam8uaXNJRSYmZG9q
by5pc1F1aXJrcykpe2V2dC5jYW5jZWxCdWJibGU9ZmF1eC5jYW5jZWxCdWJibGU7fWV2dC5yZXR1
cm5WYWx1ZT1mYXV4LnJldHVyblZhbHVlO18xOGMoZXZ0LGZhdXgua2V5Q29kZSk7fX0sX3N0b3BQ
cm9wYWdhdGlvbjpmdW5jdGlvbigpe3RoaXMuY2FuY2VsQnViYmxlPXRydWU7fSxfcHJldmVudERl
ZmF1bHQ6ZnVuY3Rpb24oKXt0aGlzLmJ1YmJsZWRLZXlDb2RlPXRoaXMua2V5Q29kZTtpZih0aGlz
LmN0cmxLZXkpe18xOGModGhpcywwKTt9dGhpcy5yZXR1cm5WYWx1ZT1mYWxzZTt9fSk7ZG9qby5z
dG9wRXZlbnQ9KGRvam8uaXNJRTw5fHxkb2pvLmlzUXVpcmtzKT9mdW5jdGlvbihldnQpe2V2dD1l
dnR8fHdpbmRvdy5ldmVudDtkZWwuX3N0b3BQcm9wYWdhdGlvbi5jYWxsKGV2dCk7ZGVsLl9wcmV2
ZW50RGVmYXVsdC5jYWxsKGV2dCk7fTpkb2pvLnN0b3BFdmVudDt9ZGVsLl9zeW50aGVzaXplRXZl
bnQ9ZnVuY3Rpb24oZXZ0LF8xOWMpe3ZhciBmYXV4PWRvam8ubWl4aW4oe30sZXZ0LF8xOWMpO2Rl
bC5fc2V0S2V5Q2hhcihmYXV4KTtmYXV4LnByZXZlbnREZWZhdWx0PWZ1bmN0aW9uKCl7ZXZ0LnBy
ZXZlbnREZWZhdWx0KCk7fTtmYXV4LnN0b3BQcm9wYWdhdGlvbj1mdW5jdGlvbigpe2V2dC5zdG9w
UHJvcGFnYXRpb24oKTt9O3JldHVybiBmYXV4O307aWYoZG9qby5pc09wZXJhKXtkb2pvLm1peGlu
KGRlbCx7X2ZpeEV2ZW50OmZ1bmN0aW9uKGV2dCxfMTlkKXtzd2l0Y2goZXZ0LnR5cGUpe2Nhc2Ug
ImtleXByZXNzIjp2YXIgYz1ldnQud2hpY2g7aWYoYz09Myl7Yz05OTt9Yz1jPDQxJiYhZXZ0LnNo
aWZ0S2V5PzA6YztpZihldnQuY3RybEtleSYmIWV2dC5zaGlmdEtleSYmYz49NjUmJmM8PTkwKXtj
Kz0zMjt9cmV0dXJuIGRlbC5fc3ludGhlc2l6ZUV2ZW50KGV2dCx7Y2hhckNvZGU6Y30pO31yZXR1
cm4gZXZ0O319KTt9aWYoZG9qby5pc1dlYktpdCl7ZGVsLl9hZGQ9ZGVsLmFkZDtkZWwuX3JlbW92
ZT1kZWwucmVtb3ZlO2Rvam8ubWl4aW4oZGVsLHthZGQ6ZnVuY3Rpb24obm9kZSxfMTllLGZwKXtp
Zighbm9kZSl7cmV0dXJuO312YXIgXzE5Zj1kZWwuX2FkZChub2RlLF8xOWUsZnApO2lmKGRlbC5f
bm9ybWFsaXplRXZlbnROYW1lKF8xOWUpPT0ia2V5cHJlc3MiKXtfMTlmLl9zdGVhbHRoS2V5RG93
bkhhbmRsZT1kZWwuX2FkZChub2RlLCJrZXlkb3duIixmdW5jdGlvbihldnQpe3ZhciBrPWV2dC5r
ZXlDb2RlO3ZhciBfMWEwPWshPTEzJiZrIT0zMiYmKGs8NDh8fGs+OTApJiYoazw5Nnx8az4xMTEp
JiYoazwxODZ8fGs+MTkyKSYmKGs8MjE5fHxrPjIyMik7aWYoXzFhMHx8ZXZ0LmN0cmxLZXkpe3Zh
ciBjPV8xYTA/MDprO2lmKGV2dC5jdHJsS2V5KXtpZihrPT0zfHxrPT0xMyl7cmV0dXJuO31lbHNl
e2lmKGM+OTUmJmM8MTA2KXtjLT00ODt9ZWxzZXtpZighZXZ0LnNoaWZ0S2V5JiZjPj02NSYmYzw9
OTApe2MrPTMyO31lbHNle2M9ZGVsLl9wdW5jdE1hcFtjXXx8Yzt9fX19dmFyIGZhdXg9ZGVsLl9z
eW50aGVzaXplRXZlbnQoZXZ0LHt0eXBlOiJrZXlwcmVzcyIsZmF1eDp0cnVlLGNoYXJDb2RlOmN9
KTtmcC5jYWxsKGV2dC5jdXJyZW50VGFyZ2V0LGZhdXgpO319KTt9cmV0dXJuIF8xOWY7fSxyZW1v
dmU6ZnVuY3Rpb24obm9kZSxfMWExLF8xYTIpe2lmKG5vZGUpe2lmKF8xYTIuX3N0ZWFsdGhLZXlE
b3duSGFuZGxlKXtkZWwuX3JlbW92ZShub2RlLCJrZXlkb3duIixfMWEyLl9zdGVhbHRoS2V5RG93
bkhhbmRsZSk7fWRlbC5fcmVtb3ZlKG5vZGUsXzFhMSxfMWEyKTt9fSxfZml4RXZlbnQ6ZnVuY3Rp
b24oZXZ0LF8xYTMpe3N3aXRjaChldnQudHlwZSl7Y2FzZSAia2V5cHJlc3MiOmlmKGV2dC5mYXV4
KXtyZXR1cm4gZXZ0O312YXIgYz1ldnQuY2hhckNvZGU7Yz1jPj0zMj9jOjA7cmV0dXJuIGRlbC5f
c3ludGhlc2l6ZUV2ZW50KGV2dCx7Y2hhckNvZGU6YyxmYXV4OnRydWV9KTt9cmV0dXJuIGV2dDt9
fSk7fX0pKCk7aWYoZG9qby5pc0lFKXtkb2pvLl9pZURpc3BhdGNoZXI9ZnVuY3Rpb24oYXJncyxf
MWE0KXt2YXIgYXA9QXJyYXkucHJvdG90eXBlLGg9ZG9qby5faWVfbGlzdGVuZXIuaGFuZGxlcnMs
Yz1hcmdzLmNhbGxlZSxscz1jW2Rvam8uX2llTGlzdGVuZXJzTmFtZV0sdD1oW2MudGFyZ2V0XTt2
YXIgcj10JiZ0LmFwcGx5KF8xYTQsYXJncyk7dmFyIGxscz1bXS5jb25jYXQobHMpO2Zvcih2YXIg
aSBpbiBsbHMpe3ZhciBmPWhbbGxzW2ldXTtpZighKGkgaW4gYXApJiZmKXtmLmFwcGx5KF8xYTQs
YXJncyk7fX1yZXR1cm4gcjt9O2Rvam8uX2dldEllRGlzcGF0Y2hlcj1mdW5jdGlvbigpe3JldHVy
biBuZXcgRnVuY3Rpb24oZG9qby5fc2NvcGVOYW1lKyIuX2llRGlzcGF0Y2hlcihhcmd1bWVudHMs
IHRoaXMpIik7fTtkb2pvLl9ldmVudF9saXN0ZW5lci5fZml4Q2FsbGJhY2s9ZnVuY3Rpb24oZnAp
e3ZhciBmPWRvam8uX2V2ZW50X2xpc3RlbmVyLl9maXhFdmVudDtyZXR1cm4gZnVuY3Rpb24oZSl7
cmV0dXJuIGZwLmNhbGwodGhpcyxmKGUsdGhpcykpO307fTt9fWlmKCFkb2pvLl9oYXNSZXNvdXJj
ZVsiZG9qby5fYmFzZS5odG1sIl0pe2Rvam8uX2hhc1Jlc291cmNlWyJkb2pvLl9iYXNlLmh0bWwi
XT10cnVlO2Rvam8ucHJvdmlkZSgiZG9qby5fYmFzZS5odG1sIik7dHJ5e2RvY3VtZW50LmV4ZWND
b21tYW5kKCJCYWNrZ3JvdW5kSW1hZ2VDYWNoZSIsZmFsc2UsdHJ1ZSk7fWNhdGNoKGUpe31pZihk
b2pvLmlzSUUpe2Rvam8uYnlJZD1mdW5jdGlvbihpZCxkb2Mpe2lmKHR5cGVvZiBpZCE9InN0cmlu
ZyIpe3JldHVybiBpZDt9dmFyIF8xYTU9ZG9jfHxkb2pvLmRvYyx0ZT1fMWE1LmdldEVsZW1lbnRC
eUlkKGlkKTtpZih0ZSYmKHRlLmF0dHJpYnV0ZXMuaWQudmFsdWU9PWlkfHx0ZS5pZD09aWQpKXty
ZXR1cm4gdGU7fWVsc2V7dmFyIGVsZXM9XzFhNS5hbGxbaWRdO2lmKCFlbGVzfHxlbGVzLm5vZGVO
YW1lKXtlbGVzPVtlbGVzXTt9dmFyIGk9MDt3aGlsZSgodGU9ZWxlc1tpKytdKSl7aWYoKHRlLmF0
dHJpYnV0ZXMmJnRlLmF0dHJpYnV0ZXMuaWQmJnRlLmF0dHJpYnV0ZXMuaWQudmFsdWU9PWlkKXx8
dGUuaWQ9PWlkKXtyZXR1cm4gdGU7fX19fTt9ZWxzZXtkb2pvLmJ5SWQ9ZnVuY3Rpb24oaWQsZG9j
KXtyZXR1cm4gKCh0eXBlb2YgaWQ9PSJzdHJpbmciKT8oZG9jfHxkb2pvLmRvYykuZ2V0RWxlbWVu
dEJ5SWQoaWQpOmlkKXx8bnVsbDt9O30oZnVuY3Rpb24oKXt2YXIgZD1kb2pvO3ZhciBieUlkPWQu
YnlJZDt2YXIgXzFhNj1udWxsLF8xYTc7ZC5hZGRPbldpbmRvd1VubG9hZChmdW5jdGlvbigpe18x
YTY9bnVsbDt9KTtkb2pvLl9kZXN0cm95RWxlbWVudD1kb2pvLmRlc3Ryb3k9ZnVuY3Rpb24obm9k
ZSl7bm9kZT1ieUlkKG5vZGUpO3RyeXt2YXIgZG9jPW5vZGUub3duZXJEb2N1bWVudDtpZighXzFh
Nnx8XzFhNyE9ZG9jKXtfMWE2PWRvYy5jcmVhdGVFbGVtZW50KCJkaXYiKTtfMWE3PWRvYzt9XzFh
Ni5hcHBlbmRDaGlsZChub2RlLnBhcmVudE5vZGU/bm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxk
KG5vZGUpOm5vZGUpO18xYTYuaW5uZXJIVE1MPSIiO31jYXRjaChlKXt9fTtkb2pvLmlzRGVzY2Vu
ZGFudD1mdW5jdGlvbihub2RlLF8xYTgpe3RyeXtub2RlPWJ5SWQobm9kZSk7XzFhOD1ieUlkKF8x
YTgpO3doaWxlKG5vZGUpe2lmKG5vZGU9PV8xYTgpe3JldHVybiB0cnVlO31ub2RlPW5vZGUucGFy
ZW50Tm9kZTt9fWNhdGNoKGUpe31yZXR1cm4gZmFsc2U7fTtkb2pvLnNldFNlbGVjdGFibGU9ZnVu
Y3Rpb24obm9kZSxfMWE5KXtub2RlPWJ5SWQobm9kZSk7aWYoZC5pc01vemlsbGEpe25vZGUuc3R5
bGUuTW96VXNlclNlbGVjdD1fMWE5PyIiOiJub25lIjt9ZWxzZXtpZihkLmlzS2h0bWx8fGQuaXNX
ZWJLaXQpe25vZGUuc3R5bGUuS2h0bWxVc2VyU2VsZWN0PV8xYTk/ImF1dG8iOiJub25lIjt9ZWxz
ZXtpZihkLmlzSUUpe3ZhciB2PShub2RlLnVuc2VsZWN0YWJsZT1fMWE5PyIiOiJvbiIpO2QucXVl
cnkoIioiLG5vZGUpLmZvckVhY2goIml0ZW0udW5zZWxlY3RhYmxlID0gJyIrdisiJyIpO319fX07
dmFyIF8xYWE9ZnVuY3Rpb24obm9kZSxyZWYpe3ZhciBfMWFiPXJlZi5wYXJlbnROb2RlO2lmKF8x
YWIpe18xYWIuaW5zZXJ0QmVmb3JlKG5vZGUscmVmKTt9fTt2YXIgXzFhYz1mdW5jdGlvbihub2Rl
LHJlZil7dmFyIF8xYWQ9cmVmLnBhcmVudE5vZGU7aWYoXzFhZCl7aWYoXzFhZC5sYXN0Q2hpbGQ9
PXJlZil7XzFhZC5hcHBlbmRDaGlsZChub2RlKTt9ZWxzZXtfMWFkLmluc2VydEJlZm9yZShub2Rl
LHJlZi5uZXh0U2libGluZyk7fX19O2Rvam8ucGxhY2U9ZnVuY3Rpb24obm9kZSxfMWFlLF8xYWYp
e18xYWU9YnlJZChfMWFlKTtpZih0eXBlb2Ygbm9kZT09InN0cmluZyIpe25vZGU9L15ccyo8Ly50
ZXN0KG5vZGUpP2QuX3RvRG9tKG5vZGUsXzFhZS5vd25lckRvY3VtZW50KTpieUlkKG5vZGUpO31p
Zih0eXBlb2YgXzFhZj09Im51bWJlciIpe3ZhciBjbj1fMWFlLmNoaWxkTm9kZXM7aWYoIWNuLmxl
bmd0aHx8Y24ubGVuZ3RoPD1fMWFmKXtfMWFlLmFwcGVuZENoaWxkKG5vZGUpO31lbHNle18xYWEo
bm9kZSxjbltfMWFmPDA/MDpfMWFmXSk7fX1lbHNle3N3aXRjaChfMWFmKXtjYXNlICJiZWZvcmUi
Ol8xYWEobm9kZSxfMWFlKTticmVhaztjYXNlICJhZnRlciI6XzFhYyhub2RlLF8xYWUpO2JyZWFr
O2Nhc2UgInJlcGxhY2UiOl8xYWUucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQobm9kZSxfMWFlKTti
cmVhaztjYXNlICJvbmx5IjpkLmVtcHR5KF8xYWUpO18xYWUuYXBwZW5kQ2hpbGQobm9kZSk7YnJl
YWs7Y2FzZSAiZmlyc3QiOmlmKF8xYWUuZmlyc3RDaGlsZCl7XzFhYShub2RlLF8xYWUuZmlyc3RD
aGlsZCk7YnJlYWs7fWRlZmF1bHQ6XzFhZS5hcHBlbmRDaGlsZChub2RlKTt9fXJldHVybiBub2Rl
O307ZG9qby5ib3hNb2RlbD0iY29udGVudC1ib3giO2lmKGQuaXNJRSl7ZC5ib3hNb2RlbD1kb2N1
bWVudC5jb21wYXRNb2RlPT0iQmFja0NvbXBhdCI/ImJvcmRlci1ib3giOiJjb250ZW50LWJveCI7
fXZhciBnY3M7aWYoZC5pc1dlYktpdCl7Z2NzPWZ1bmN0aW9uKG5vZGUpe3ZhciBzO2lmKG5vZGUu
bm9kZVR5cGU9PTEpe3ZhciBkdj1ub2RlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc7cz1kdi5n
ZXRDb21wdXRlZFN0eWxlKG5vZGUsbnVsbCk7aWYoIXMmJm5vZGUuc3R5bGUpe25vZGUuc3R5bGUu
ZGlzcGxheT0iIjtzPWR2LmdldENvbXB1dGVkU3R5bGUobm9kZSxudWxsKTt9fXJldHVybiBzfHx7
fTt9O31lbHNle2lmKGQuaXNJRSl7Z2NzPWZ1bmN0aW9uKG5vZGUpe3JldHVybiBub2RlLm5vZGVU
eXBlPT0xP25vZGUuY3VycmVudFN0eWxlOnt9O307fWVsc2V7Z2NzPWZ1bmN0aW9uKG5vZGUpe3Jl
dHVybiBub2RlLm5vZGVUeXBlPT0xP25vZGUub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRD
b21wdXRlZFN0eWxlKG5vZGUsbnVsbCk6e307fTt9fWRvam8uZ2V0Q29tcHV0ZWRTdHlsZT1nY3M7
aWYoIWQuaXNJRSl7ZC5fdG9QaXhlbFZhbHVlPWZ1bmN0aW9uKF8xYjAsXzFiMSl7cmV0dXJuIHBh
cnNlRmxvYXQoXzFiMSl8fDA7fTt9ZWxzZXtkLl90b1BpeGVsVmFsdWU9ZnVuY3Rpb24oXzFiMixf
MWIzKXtpZighXzFiMyl7cmV0dXJuIDA7fWlmKF8xYjM9PSJtZWRpdW0iKXtyZXR1cm4gNDt9aWYo
XzFiMy5zbGljZSYmXzFiMy5zbGljZSgtMik9PSJweCIpe3JldHVybiBwYXJzZUZsb2F0KF8xYjMp
O313aXRoKF8xYjIpe3ZhciBfMWI0PXN0eWxlLmxlZnQ7dmFyIF8xYjU9cnVudGltZVN0eWxlLmxl
ZnQ7cnVudGltZVN0eWxlLmxlZnQ9Y3VycmVudFN0eWxlLmxlZnQ7dHJ5e3N0eWxlLmxlZnQ9XzFi
MztfMWIzPXN0eWxlLnBpeGVsTGVmdDt9Y2F0Y2goZSl7XzFiMz0wO31zdHlsZS5sZWZ0PV8xYjQ7
cnVudGltZVN0eWxlLmxlZnQ9XzFiNTt9cmV0dXJuIF8xYjM7fTt9dmFyIHB4PWQuX3RvUGl4ZWxW
YWx1ZTt2YXIgYXN0cj0iRFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQWxwaGEiO3ZhciBhZj1m
dW5jdGlvbihuLGYpe3RyeXtyZXR1cm4gbi5maWx0ZXJzLml0ZW0oYXN0cik7fWNhdGNoKGUpe3Jl
dHVybiBmP3t9Om51bGw7fX07ZG9qby5fZ2V0T3BhY2l0eT1kLmlzSUU8OT9mdW5jdGlvbihub2Rl
KXt0cnl7cmV0dXJuIGFmKG5vZGUpLk9wYWNpdHkvMTAwO31jYXRjaChlKXtyZXR1cm4gMTt9fTpm
dW5jdGlvbihub2RlKXtyZXR1cm4gZ2NzKG5vZGUpLm9wYWNpdHk7fTtkb2pvLl9zZXRPcGFjaXR5
PWQuaXNJRTw5P2Z1bmN0aW9uKG5vZGUsXzFiNil7dmFyIG92PV8xYjYqMTAwLF8xYjc9XzFiNj09
MTtub2RlLnN0eWxlLnpvb209XzFiNz8iIjoxO2lmKCFhZihub2RlKSl7aWYoXzFiNyl7cmV0dXJu
IF8xYjY7fW5vZGUuc3R5bGUuZmlsdGVyKz0iIHByb2dpZDoiK2FzdHIrIihPcGFjaXR5PSIrb3Yr
IikiO31lbHNle2FmKG5vZGUsMSkuT3BhY2l0eT1vdjt9YWYobm9kZSwxKS5FbmFibGVkPSFfMWI3
O2lmKG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09InRyIil7ZC5xdWVyeSgiPiB0ZCIsbm9k
ZSkuZm9yRWFjaChmdW5jdGlvbihpKXtkLl9zZXRPcGFjaXR5KGksXzFiNik7fSk7fXJldHVybiBf
MWI2O306ZnVuY3Rpb24obm9kZSxfMWI4KXtyZXR1cm4gbm9kZS5zdHlsZS5vcGFjaXR5PV8xYjg7
fTt2YXIgXzFiOT17bGVmdDp0cnVlLHRvcDp0cnVlfTt2YXIgXzFiYT0vbWFyZ2lufHBhZGRpbmd8
d2lkdGh8aGVpZ2h0fG1heHxtaW58b2Zmc2V0Lzt2YXIgXzFiYj1mdW5jdGlvbihub2RlLHR5cGUs
XzFiYyl7dHlwZT10eXBlLnRvTG93ZXJDYXNlKCk7aWYoZC5pc0lFKXtpZihfMWJjPT0iYXV0byIp
e2lmKHR5cGU9PSJoZWlnaHQiKXtyZXR1cm4gbm9kZS5vZmZzZXRIZWlnaHQ7fWlmKHR5cGU9PSJ3
aWR0aCIpe3JldHVybiBub2RlLm9mZnNldFdpZHRoO319aWYodHlwZT09ImZvbnR3ZWlnaHQiKXtz
d2l0Y2goXzFiYyl7Y2FzZSA3MDA6cmV0dXJuICJib2xkIjtjYXNlIDQwMDpkZWZhdWx0OnJldHVy
biAibm9ybWFsIjt9fX1pZighKHR5cGUgaW4gXzFiOSkpe18xYjlbdHlwZV09XzFiYS50ZXN0KHR5
cGUpO31yZXR1cm4gXzFiOVt0eXBlXT9weChub2RlLF8xYmMpOl8xYmM7fTt2YXIgXzFiZD1kLmlz
SUU/InN0eWxlRmxvYXQiOiJjc3NGbG9hdCIsXzFiZT17ImNzc0Zsb2F0IjpfMWJkLCJzdHlsZUZs
b2F0IjpfMWJkLCJmbG9hdCI6XzFiZH07ZG9qby5zdHlsZT1mdW5jdGlvbihub2RlLF8xYmYsXzFj
MCl7dmFyIG49YnlJZChub2RlKSxhcmdzPWFyZ3VtZW50cy5sZW5ndGgsb3A9KF8xYmY9PSJvcGFj
aXR5Iik7XzFiZj1fMWJlW18xYmZdfHxfMWJmO2lmKGFyZ3M9PTMpe3JldHVybiBvcD9kLl9zZXRP
cGFjaXR5KG4sXzFjMCk6bi5zdHlsZVtfMWJmXT1fMWMwO31pZihhcmdzPT0yJiZvcCl7cmV0dXJu
IGQuX2dldE9wYWNpdHkobik7fXZhciBzPWdjcyhuKTtpZihhcmdzPT0yJiZ0eXBlb2YgXzFiZiE9
InN0cmluZyIpe2Zvcih2YXIgeCBpbiBfMWJmKXtkLnN0eWxlKG5vZGUseCxfMWJmW3hdKTt9cmV0
dXJuIHM7fXJldHVybiAoYXJncz09MSk/czpfMWJiKG4sXzFiZixzW18xYmZdfHxuLnN0eWxlW18x
YmZdKTt9O2Rvam8uX2dldFBhZEV4dGVudHM9ZnVuY3Rpb24obixfMWMxKXt2YXIgcz1fMWMxfHxn
Y3MobiksbD1weChuLHMucGFkZGluZ0xlZnQpLHQ9cHgobixzLnBhZGRpbmdUb3ApO3JldHVybiB7
bDpsLHQ6dCx3OmwrcHgobixzLnBhZGRpbmdSaWdodCksaDp0K3B4KG4scy5wYWRkaW5nQm90dG9t
KX07fTtkb2pvLl9nZXRCb3JkZXJFeHRlbnRzPWZ1bmN0aW9uKG4sXzFjMil7dmFyIG5lPSJub25l
IixzPV8xYzJ8fGdjcyhuKSxibD0ocy5ib3JkZXJMZWZ0U3R5bGUhPW5lP3B4KG4scy5ib3JkZXJM
ZWZ0V2lkdGgpOjApLGJ0PShzLmJvcmRlclRvcFN0eWxlIT1uZT9weChuLHMuYm9yZGVyVG9wV2lk
dGgpOjApO3JldHVybiB7bDpibCx0OmJ0LHc6YmwrKHMuYm9yZGVyUmlnaHRTdHlsZSE9bmU/cHgo
bixzLmJvcmRlclJpZ2h0V2lkdGgpOjApLGg6YnQrKHMuYm9yZGVyQm90dG9tU3R5bGUhPW5lP3B4
KG4scy5ib3JkZXJCb3R0b21XaWR0aCk6MCl9O307ZG9qby5fZ2V0UGFkQm9yZGVyRXh0ZW50cz1m
dW5jdGlvbihuLF8xYzMpe3ZhciBzPV8xYzN8fGdjcyhuKSxwPWQuX2dldFBhZEV4dGVudHMobixz
KSxiPWQuX2dldEJvcmRlckV4dGVudHMobixzKTtyZXR1cm4ge2w6cC5sK2IubCx0OnAudCtiLnQs
dzpwLncrYi53LGg6cC5oK2IuaH07fTtkb2pvLl9nZXRNYXJnaW5FeHRlbnRzPWZ1bmN0aW9uKG4s
XzFjNCl7dmFyIHM9XzFjNHx8Z2NzKG4pLGw9cHgobixzLm1hcmdpbkxlZnQpLHQ9cHgobixzLm1h
cmdpblRvcCkscj1weChuLHMubWFyZ2luUmlnaHQpLGI9cHgobixzLm1hcmdpbkJvdHRvbSk7aWYo
ZC5pc1dlYktpdCYmKHMucG9zaXRpb24hPSJhYnNvbHV0ZSIpKXtyPWw7fXJldHVybiB7bDpsLHQ6
dCx3OmwrcixoOnQrYn07fTtkb2pvLl9nZXRNYXJnaW5Cb3g9ZnVuY3Rpb24obm9kZSxfMWM1KXt2
YXIgcz1fMWM1fHxnY3Mobm9kZSksbWU9ZC5fZ2V0TWFyZ2luRXh0ZW50cyhub2RlLHMpO3ZhciBs
PW5vZGUub2Zmc2V0TGVmdC1tZS5sLHQ9bm9kZS5vZmZzZXRUb3AtbWUudCxwPW5vZGUucGFyZW50
Tm9kZTtpZihkLmlzTW96KXt2YXIgc2w9cGFyc2VGbG9hdChzLmxlZnQpLHN0PXBhcnNlRmxvYXQo
cy50b3ApO2lmKCFpc05hTihzbCkmJiFpc05hTihzdCkpe2w9c2wsdD1zdDt9ZWxzZXtpZihwJiZw
LnN0eWxlKXt2YXIgcGNzPWdjcyhwKTtpZihwY3Mub3ZlcmZsb3chPSJ2aXNpYmxlIil7dmFyIGJl
PWQuX2dldEJvcmRlckV4dGVudHMocCxwY3MpO2wrPWJlLmwsdCs9YmUudDt9fX19ZWxzZXtpZihk
LmlzT3BlcmF8fChkLmlzSUU+NyYmIWQuaXNRdWlya3MpKXtpZihwKXtiZT1kLl9nZXRCb3JkZXJF
eHRlbnRzKHApO2wtPWJlLmw7dC09YmUudDt9fX1yZXR1cm4ge2w6bCx0OnQsdzpub2RlLm9mZnNl
dFdpZHRoK21lLncsaDpub2RlLm9mZnNldEhlaWdodCttZS5ofTt9O2Rvam8uX2dldE1hcmdpblNp
emU9ZnVuY3Rpb24obm9kZSxfMWM2KXtub2RlPWJ5SWQobm9kZSk7dmFyIG1lPWQuX2dldE1hcmdp
bkV4dGVudHMobm9kZSxfMWM2fHxnY3Mobm9kZSkpO3ZhciBzaXplPW5vZGUuZ2V0Qm91bmRpbmdD
bGllbnRSZWN0KCk7cmV0dXJuIHt3OihzaXplLnJpZ2h0LXNpemUubGVmdCkrbWUudyxoOihzaXpl
LmJvdHRvbS1zaXplLnRvcCkrbWUuaH07fTtkb2pvLl9nZXRDb250ZW50Qm94PWZ1bmN0aW9uKG5v
ZGUsXzFjNyl7dmFyIHM9XzFjN3x8Z2NzKG5vZGUpLHBlPWQuX2dldFBhZEV4dGVudHMobm9kZSxz
KSxiZT1kLl9nZXRCb3JkZXJFeHRlbnRzKG5vZGUscyksdz1ub2RlLmNsaWVudFdpZHRoLGg7aWYo
IXcpe3c9bm9kZS5vZmZzZXRXaWR0aCxoPW5vZGUub2Zmc2V0SGVpZ2h0O31lbHNle2g9bm9kZS5j
bGllbnRIZWlnaHQsYmUudz1iZS5oPTA7fWlmKGQuaXNPcGVyYSl7cGUubCs9YmUubDtwZS50Kz1i
ZS50O31yZXR1cm4ge2w6cGUubCx0OnBlLnQsdzp3LXBlLnctYmUudyxoOmgtcGUuaC1iZS5ofTt9
O2Rvam8uX2dldEJvcmRlckJveD1mdW5jdGlvbihub2RlLF8xYzgpe3ZhciBzPV8xYzh8fGdjcyhu
b2RlKSxwZT1kLl9nZXRQYWRFeHRlbnRzKG5vZGUscyksY2I9ZC5fZ2V0Q29udGVudEJveChub2Rl
LHMpO3JldHVybiB7bDpjYi5sLXBlLmwsdDpjYi50LXBlLnQsdzpjYi53K3BlLncsaDpjYi5oK3Bl
Lmh9O307ZG9qby5fc2V0Qm94PWZ1bmN0aW9uKG5vZGUsbCx0LHcsaCx1KXt1PXV8fCJweCI7dmFy
IHM9bm9kZS5zdHlsZTtpZighaXNOYU4obCkpe3MubGVmdD1sK3U7fWlmKCFpc05hTih0KSl7cy50
b3A9dCt1O31pZih3Pj0wKXtzLndpZHRoPXcrdTt9aWYoaD49MCl7cy5oZWlnaHQ9aCt1O319O2Rv
am8uX2lzQnV0dG9uVGFnPWZ1bmN0aW9uKG5vZGUpe3JldHVybiBub2RlLnRhZ05hbWU9PSJCVVRU
T04ifHxub2RlLnRhZ05hbWU9PSJJTlBVVCImJihub2RlLmdldEF0dHJpYnV0ZSgidHlwZSIpfHwi
IikudG9VcHBlckNhc2UoKT09IkJVVFRPTiI7fTtkb2pvLl91c2VzQm9yZGVyQm94PWZ1bmN0aW9u
KG5vZGUpe3ZhciBuPW5vZGUudGFnTmFtZTtyZXR1cm4gZC5ib3hNb2RlbD09ImJvcmRlci1ib3gi
fHxuPT0iVEFCTEUifHxkLl9pc0J1dHRvblRhZyhub2RlKTt9O2Rvam8uX3NldENvbnRlbnRTaXpl
PWZ1bmN0aW9uKG5vZGUsXzFjOSxfMWNhLF8xY2Ipe2lmKGQuX3VzZXNCb3JkZXJCb3gobm9kZSkp
e3ZhciBwYj1kLl9nZXRQYWRCb3JkZXJFeHRlbnRzKG5vZGUsXzFjYik7aWYoXzFjOT49MCl7XzFj
OSs9cGIudzt9aWYoXzFjYT49MCl7XzFjYSs9cGIuaDt9fWQuX3NldEJveChub2RlLE5hTixOYU4s
XzFjOSxfMWNhKTt9O2Rvam8uX3NldE1hcmdpbkJveD1mdW5jdGlvbihub2RlLF8xY2MsXzFjZCxf
MWNlLF8xY2YsXzFkMCl7dmFyIHM9XzFkMHx8Z2NzKG5vZGUpLGJiPWQuX3VzZXNCb3JkZXJCb3go
bm9kZSkscGI9YmI/XzFkMTpkLl9nZXRQYWRCb3JkZXJFeHRlbnRzKG5vZGUscyk7aWYoZC5pc1dl
YktpdCl7aWYoZC5faXNCdXR0b25UYWcobm9kZSkpe3ZhciBucz1ub2RlLnN0eWxlO2lmKF8xY2U+
PTAmJiFucy53aWR0aCl7bnMud2lkdGg9IjRweCI7fWlmKF8xY2Y+PTAmJiFucy5oZWlnaHQpe25z
LmhlaWdodD0iNHB4Ijt9fX12YXIgbWI9ZC5fZ2V0TWFyZ2luRXh0ZW50cyhub2RlLHMpO2lmKF8x
Y2U+PTApe18xY2U9TWF0aC5tYXgoXzFjZS1wYi53LW1iLncsMCk7fWlmKF8xY2Y+PTApe18xY2Y9
TWF0aC5tYXgoXzFjZi1wYi5oLW1iLmgsMCk7fWQuX3NldEJveChub2RlLF8xY2MsXzFjZCxfMWNl
LF8xY2YpO307dmFyIF8xZDE9e2w6MCx0OjAsdzowLGg6MH07ZG9qby5tYXJnaW5Cb3g9ZnVuY3Rp
b24obm9kZSxib3gpe3ZhciBuPWJ5SWQobm9kZSkscz1nY3MobiksYj1ib3g7cmV0dXJuICFiP2Qu
X2dldE1hcmdpbkJveChuLHMpOmQuX3NldE1hcmdpbkJveChuLGIubCxiLnQsYi53LGIuaCxzKTt9
O2Rvam8uY29udGVudEJveD1mdW5jdGlvbihub2RlLGJveCl7dmFyIG49YnlJZChub2RlKSxzPWdj
cyhuKSxiPWJveDtyZXR1cm4gIWI/ZC5fZ2V0Q29udGVudEJveChuLHMpOmQuX3NldENvbnRlbnRT
aXplKG4sYi53LGIuaCxzKTt9O3ZhciBfMWQyPWZ1bmN0aW9uKG5vZGUscHJvcCl7aWYoIShub2Rl
PShub2RlfHwwKS5wYXJlbnROb2RlKSl7cmV0dXJuIDA7fXZhciB2YWwsXzFkMz0wLF8xZDQ9ZC5i
b2R5KCk7d2hpbGUobm9kZSYmbm9kZS5zdHlsZSl7aWYoZ2NzKG5vZGUpLnBvc2l0aW9uPT0iZml4
ZWQiKXtyZXR1cm4gMDt9dmFsPW5vZGVbcHJvcF07aWYodmFsKXtfMWQzKz12YWwtMDtpZihub2Rl
PT1fMWQ0KXticmVhazt9fW5vZGU9bm9kZS5wYXJlbnROb2RlO31yZXR1cm4gXzFkMzt9O2Rvam8u
X2RvY1Njcm9sbD1mdW5jdGlvbigpe3ZhciBuPWQuZ2xvYmFsO3JldHVybiAicGFnZVhPZmZzZXQi
IGluIG4/e3g6bi5wYWdlWE9mZnNldCx5Om4ucGFnZVlPZmZzZXR9OihuPWQuaXNRdWlya3M/ZC5k
b2MuYm9keTpkLmRvYy5kb2N1bWVudEVsZW1lbnQse3g6ZC5fZml4SWVCaURpU2Nyb2xsTGVmdChu
LnNjcm9sbExlZnR8fDApLHk6bi5zY3JvbGxUb3B8fDB9KTt9O2Rvam8uX2lzQm9keUx0cj1mdW5j
dGlvbigpe3JldHVybiAiX2JvZHlMdHIiIGluIGQ/ZC5fYm9keUx0cjpkLl9ib2R5THRyPShkLmJv
ZHkoKS5kaXJ8fGQuZG9jLmRvY3VtZW50RWxlbWVudC5kaXJ8fCJsdHIiKS50b0xvd2VyQ2FzZSgp
PT0ibHRyIjt9O2Rvam8uX2dldEllRG9jdW1lbnRFbGVtZW50T2Zmc2V0PWZ1bmN0aW9uKCl7dmFy
IGRlPWQuZG9jLmRvY3VtZW50RWxlbWVudDtpZihkLmlzSUU8OCl7dmFyIHI9ZGUuZ2V0Qm91bmRp
bmdDbGllbnRSZWN0KCk7dmFyIGw9ci5sZWZ0LHQ9ci50b3A7aWYoZC5pc0lFPDcpe2wrPWRlLmNs
aWVudExlZnQ7dCs9ZGUuY2xpZW50VG9wO31yZXR1cm4ge3g6bDwwPzA6bCx5OnQ8MD8wOnR9O31l
bHNle3JldHVybiB7eDowLHk6MH07fX07ZG9qby5fZml4SWVCaURpU2Nyb2xsTGVmdD1mdW5jdGlv
bihfMWQ1KXt2YXIgaWU9ZC5pc0lFO2lmKGllJiYhZC5faXNCb2R5THRyKCkpe3ZhciBxaz1kLmlz
UXVpcmtzLGRlPXFrP2QuZG9jLmJvZHk6ZC5kb2MuZG9jdW1lbnRFbGVtZW50O2lmKGllPT02JiYh
cWsmJmQuZ2xvYmFsLmZyYW1lRWxlbWVudCYmZGUuc2Nyb2xsSGVpZ2h0PmRlLmNsaWVudEhlaWdo
dCl7XzFkNSs9ZGUuY2xpZW50TGVmdDt9cmV0dXJuIChpZTw4fHxxayk/KF8xZDUrZGUuY2xpZW50
V2lkdGgtZGUuc2Nyb2xsV2lkdGgpOi1fMWQ1O31yZXR1cm4gXzFkNTt9O2Rvam8uX2Ficz1kb2pv
LnBvc2l0aW9uPWZ1bmN0aW9uKG5vZGUsXzFkNil7bm9kZT1ieUlkKG5vZGUpO3ZhciBkYj1kLmJv
ZHkoKSxkaD1kYi5wYXJlbnROb2RlLHJldD1ub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3Jl
dD17eDpyZXQubGVmdCx5OnJldC50b3AsdzpyZXQucmlnaHQtcmV0LmxlZnQsaDpyZXQuYm90dG9t
LXJldC50b3B9O2lmKGQuaXNJRSl7dmFyIF8xZDc9ZC5fZ2V0SWVEb2N1bWVudEVsZW1lbnRPZmZz
ZXQoKTtyZXQueC09XzFkNy54KyhkLmlzUXVpcmtzP2RiLmNsaWVudExlZnQrZGIub2Zmc2V0TGVm
dDowKTtyZXQueS09XzFkNy55KyhkLmlzUXVpcmtzP2RiLmNsaWVudFRvcCtkYi5vZmZzZXRUb3A6
MCk7fWVsc2V7aWYoZC5pc0ZGPT0zKXt2YXIgY3M9Z2NzKGRoKTtyZXQueC09cHgoZGgsY3MubWFy
Z2luTGVmdCkrcHgoZGgsY3MuYm9yZGVyTGVmdFdpZHRoKTtyZXQueS09cHgoZGgsY3MubWFyZ2lu
VG9wKStweChkaCxjcy5ib3JkZXJUb3BXaWR0aCk7fX1pZihfMWQ2KXt2YXIgXzFkOD1kLl9kb2NT
Y3JvbGwoKTtyZXQueCs9XzFkOC54O3JldC55Kz1fMWQ4Lnk7fXJldHVybiByZXQ7fTtkb2pvLmNv
b3Jkcz1mdW5jdGlvbihub2RlLF8xZDkpe3ZhciBuPWJ5SWQobm9kZSkscz1nY3MobiksbWI9ZC5f
Z2V0TWFyZ2luQm94KG4scyk7dmFyIGFicz1kLnBvc2l0aW9uKG4sXzFkOSk7bWIueD1hYnMueDtt
Yi55PWFicy55O3JldHVybiBtYjt9O3ZhciBfMWRhPXsiY2xhc3MiOiJjbGFzc05hbWUiLCJmb3Ii
OiJodG1sRm9yIix0YWJpbmRleDoidGFiSW5kZXgiLHJlYWRvbmx5OiJyZWFkT25seSIsY29sc3Bh
bjoiY29sU3BhbiIsZnJhbWVib3JkZXI6ImZyYW1lQm9yZGVyIixyb3dzcGFuOiJyb3dTcGFuIix2
YWx1ZXR5cGU6InZhbHVlVHlwZSJ9LF8xZGI9e2NsYXNzbmFtZToiY2xhc3MiLGh0bWxmb3I6ImZv
ciIsdGFiaW5kZXg6InRhYkluZGV4IixyZWFkb25seToicmVhZE9ubHkifSxfMWRjPXtpbm5lckhU
TUw6MSxjbGFzc05hbWU6MSxodG1sRm9yOmQuaXNJRSx2YWx1ZToxfTt2YXIgXzFkZD1mdW5jdGlv
bihuYW1lKXtyZXR1cm4gXzFkYltuYW1lLnRvTG93ZXJDYXNlKCldfHxuYW1lO307dmFyIF8xZGU9
ZnVuY3Rpb24obm9kZSxuYW1lKXt2YXIgYXR0cj1ub2RlLmdldEF0dHJpYnV0ZU5vZGUmJm5vZGUu
Z2V0QXR0cmlidXRlTm9kZShuYW1lKTtyZXR1cm4gYXR0ciYmYXR0ci5zcGVjaWZpZWQ7fTtkb2pv
Lmhhc0F0dHI9ZnVuY3Rpb24obm9kZSxuYW1lKXt2YXIgbGM9bmFtZS50b0xvd2VyQ2FzZSgpO3Jl
dHVybiBfMWRjW18xZGFbbGNdfHxuYW1lXXx8XzFkZShieUlkKG5vZGUpLF8xZGJbbGNdfHxuYW1l
KTt9O3ZhciBfMWRmPXt9LF8xZTA9MCxfMWUxPWRvam8uX3Njb3BlTmFtZSsiYXR0cmlkIixfMWUy
PXtjb2w6MSxjb2xncm91cDoxLHRhYmxlOjEsdGJvZHk6MSx0Zm9vdDoxLHRoZWFkOjEsdHI6MSx0
aXRsZToxfTtkb2pvLmF0dHI9ZnVuY3Rpb24obm9kZSxuYW1lLF8xZTMpe25vZGU9YnlJZChub2Rl
KTt2YXIgYXJncz1hcmd1bWVudHMubGVuZ3RoLHByb3A7aWYoYXJncz09MiYmdHlwZW9mIG5hbWUh
PSJzdHJpbmciKXtmb3IodmFyIHggaW4gbmFtZSl7ZC5hdHRyKG5vZGUseCxuYW1lW3hdKTt9cmV0
dXJuIG5vZGU7fXZhciBsYz1uYW1lLnRvTG93ZXJDYXNlKCksXzFlND1fMWRhW2xjXXx8bmFtZSxf
MWU1PV8xZGNbXzFlNF0sXzFlNj1fMWRiW2xjXXx8bmFtZTtpZihhcmdzPT0zKXtkb3tpZihfMWU0
PT0ic3R5bGUiJiZ0eXBlb2YgXzFlMyE9InN0cmluZyIpe2Quc3R5bGUobm9kZSxfMWUzKTticmVh
azt9aWYoXzFlND09ImlubmVySFRNTCIpe2lmKGQuaXNJRSYmbm9kZS50YWdOYW1lLnRvTG93ZXJD
YXNlKCkgaW4gXzFlMil7ZC5lbXB0eShub2RlKTtub2RlLmFwcGVuZENoaWxkKGQuX3RvRG9tKF8x
ZTMsbm9kZS5vd25lckRvY3VtZW50KSk7fWVsc2V7bm9kZVtfMWU0XT1fMWUzO31icmVhazt9aWYo
ZC5pc0Z1bmN0aW9uKF8xZTMpKXt2YXIgXzFlNz1kLmF0dHIobm9kZSxfMWUxKTtpZighXzFlNyl7
XzFlNz1fMWUwKys7ZC5hdHRyKG5vZGUsXzFlMSxfMWU3KTt9aWYoIV8xZGZbXzFlN10pe18xZGZb
XzFlN109e307fXZhciBoPV8xZGZbXzFlN11bXzFlNF07aWYoaCl7ZC5kaXNjb25uZWN0KGgpO31l
bHNle3RyeXtkZWxldGUgbm9kZVtfMWU0XTt9Y2F0Y2goZSl7fX1fMWRmW18xZTddW18xZTRdPWQu
Y29ubmVjdChub2RlLF8xZTQsXzFlMyk7YnJlYWs7fWlmKF8xZTV8fHR5cGVvZiBfMWUzPT0iYm9v
bGVhbiIpe25vZGVbXzFlNF09XzFlMzticmVhazt9bm9kZS5zZXRBdHRyaWJ1dGUoXzFlNixfMWUz
KTt9d2hpbGUoZmFsc2UpO3JldHVybiBub2RlO31fMWUzPW5vZGVbXzFlNF07aWYoXzFlNSYmdHlw
ZW9mIF8xZTMhPSJ1bmRlZmluZWQiKXtyZXR1cm4gXzFlMzt9aWYoXzFlNCE9ImhyZWYiJiYodHlw
ZW9mIF8xZTM9PSJib29sZWFuInx8ZC5pc0Z1bmN0aW9uKF8xZTMpKSl7cmV0dXJuIF8xZTM7fXJl
dHVybiBfMWRlKG5vZGUsXzFlNik/bm9kZS5nZXRBdHRyaWJ1dGUoXzFlNik6bnVsbDt9O2Rvam8u
cmVtb3ZlQXR0cj1mdW5jdGlvbihub2RlLG5hbWUpe2J5SWQobm9kZSkucmVtb3ZlQXR0cmlidXRl
KF8xZGQobmFtZSkpO307ZG9qby5nZXROb2RlUHJvcD1mdW5jdGlvbihub2RlLG5hbWUpe25vZGU9
YnlJZChub2RlKTt2YXIgbGM9bmFtZS50b0xvd2VyQ2FzZSgpLF8xZTg9XzFkYVtsY118fG5hbWU7
aWYoKF8xZTggaW4gbm9kZSkmJl8xZTghPSJocmVmIil7cmV0dXJuIG5vZGVbXzFlOF07fXZhciBf
MWU5PV8xZGJbbGNdfHxuYW1lO3JldHVybiBfMWRlKG5vZGUsXzFlOSk/bm9kZS5nZXRBdHRyaWJ1
dGUoXzFlOSk6bnVsbDt9O2Rvam8uY3JlYXRlPWZ1bmN0aW9uKHRhZyxfMWVhLF8xZWIscG9zKXt2
YXIgZG9jPWQuZG9jO2lmKF8xZWIpe18xZWI9YnlJZChfMWViKTtkb2M9XzFlYi5vd25lckRvY3Vt
ZW50O31pZih0eXBlb2YgdGFnPT0ic3RyaW5nIil7dGFnPWRvYy5jcmVhdGVFbGVtZW50KHRhZyk7
fWlmKF8xZWEpe2QuYXR0cih0YWcsXzFlYSk7fWlmKF8xZWIpe2QucGxhY2UodGFnLF8xZWIscG9z
KTt9cmV0dXJuIHRhZzt9O2QuZW1wdHk9ZC5pc0lFP2Z1bmN0aW9uKG5vZGUpe25vZGU9YnlJZChu
b2RlKTtmb3IodmFyIGM7Yz1ub2RlLmxhc3RDaGlsZDspe2QuZGVzdHJveShjKTt9fTpmdW5jdGlv
bihub2RlKXtieUlkKG5vZGUpLmlubmVySFRNTD0iIjt9O3ZhciBfMWVjPXtvcHRpb246WyJzZWxl
Y3QiXSx0Ym9keTpbInRhYmxlIl0sdGhlYWQ6WyJ0YWJsZSJdLHRmb290OlsidGFibGUiXSx0cjpb
InRhYmxlIiwidGJvZHkiXSx0ZDpbInRhYmxlIiwidGJvZHkiLCJ0ciJdLHRoOlsidGFibGUiLCJ0
aGVhZCIsInRyIl0sbGVnZW5kOlsiZmllbGRzZXQiXSxjYXB0aW9uOlsidGFibGUiXSxjb2xncm91
cDpbInRhYmxlIl0sY29sOlsidGFibGUiLCJjb2xncm91cCJdLGxpOlsidWwiXX0sXzFlZD0vPFxz
KihbXHdcOl0rKS8sXzFlZT17fSxfMWVmPTAsXzFmMD0iX18iK2QuX3Njb3BlTmFtZSsiVG9Eb21J
ZCI7Zm9yKHZhciBfMWYxIGluIF8xZWMpe2lmKF8xZWMuaGFzT3duUHJvcGVydHkoXzFmMSkpe3Zh
ciB0dz1fMWVjW18xZjFdO3R3LnByZT1fMWYxPT0ib3B0aW9uIj8iPHNlbGVjdCBtdWx0aXBsZT1c
Im11bHRpcGxlXCI+IjoiPCIrdHcuam9pbigiPjwiKSsiPiI7dHcucG9zdD0iPC8iK3R3LnJldmVy
c2UoKS5qb2luKCI+PC8iKSsiPiI7fX1kLl90b0RvbT1mdW5jdGlvbihmcmFnLGRvYyl7ZG9jPWRv
Y3x8ZC5kb2M7dmFyIF8xZjI9ZG9jW18xZjBdO2lmKCFfMWYyKXtkb2NbXzFmMF09XzFmMj0rK18x
ZWYrIiI7XzFlZVtfMWYyXT1kb2MuY3JlYXRlRWxlbWVudCgiZGl2Iik7fWZyYWcrPSIiO3ZhciBf
MWYzPWZyYWcubWF0Y2goXzFlZCksdGFnPV8xZjM/XzFmM1sxXS50b0xvd2VyQ2FzZSgpOiIiLF8x
ZjQ9XzFlZVtfMWYyXSx3cmFwLGksZmMsZGY7aWYoXzFmMyYmXzFlY1t0YWddKXt3cmFwPV8xZWNb
dGFnXTtfMWY0LmlubmVySFRNTD13cmFwLnByZStmcmFnK3dyYXAucG9zdDtmb3IoaT13cmFwLmxl
bmd0aDtpOy0taSl7XzFmND1fMWY0LmZpcnN0Q2hpbGQ7fX1lbHNle18xZjQuaW5uZXJIVE1MPWZy
YWc7fWlmKF8xZjQuY2hpbGROb2Rlcy5sZW5ndGg9PTEpe3JldHVybiBfMWY0LnJlbW92ZUNoaWxk
KF8xZjQuZmlyc3RDaGlsZCk7fWRmPWRvYy5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7d2hpbGUo
ZmM9XzFmNC5maXJzdENoaWxkKXtkZi5hcHBlbmRDaGlsZChmYyk7fXJldHVybiBkZjt9O3ZhciBf
MWY1PSJjbGFzc05hbWUiO2Rvam8uaGFzQ2xhc3M9ZnVuY3Rpb24obm9kZSxfMWY2KXtyZXR1cm4g
KCgiICIrYnlJZChub2RlKVtfMWY1XSsiICIpLmluZGV4T2YoIiAiK18xZjYrIiAiKT49MCk7fTt2
YXIgXzFmNz0vXHMrLyxhMT1bIiJdLF8xZjg9e30sXzFmOT1mdW5jdGlvbihzKXtpZih0eXBlb2Yg
cz09InN0cmluZyJ8fHMgaW5zdGFuY2VvZiBTdHJpbmcpe2lmKHMuaW5kZXhPZigiICIpPDApe2Ex
WzBdPXM7cmV0dXJuIGExO31lbHNle3JldHVybiBzLnNwbGl0KF8xZjcpO319cmV0dXJuIHN8fCIi
O307ZG9qby5hZGRDbGFzcz1mdW5jdGlvbihub2RlLF8xZmEpe25vZGU9YnlJZChub2RlKTtfMWZh
PV8xZjkoXzFmYSk7dmFyIGNscz1ub2RlW18xZjVdLF8xZmI7Y2xzPWNscz8iICIrY2xzKyIgIjoi
ICI7XzFmYj1jbHMubGVuZ3RoO2Zvcih2YXIgaT0wLGxlbj1fMWZhLmxlbmd0aCxjO2k8bGVuOysr
aSl7Yz1fMWZhW2ldO2lmKGMmJmNscy5pbmRleE9mKCIgIitjKyIgIik8MCl7Y2xzKz1jKyIgIjt9
fWlmKF8xZmI8Y2xzLmxlbmd0aCl7bm9kZVtfMWY1XT1jbHMuc3Vic3RyKDEsY2xzLmxlbmd0aC0y
KTt9fTtkb2pvLnJlbW92ZUNsYXNzPWZ1bmN0aW9uKG5vZGUsXzFmYyl7bm9kZT1ieUlkKG5vZGUp
O3ZhciBjbHM7aWYoXzFmYyE9PXVuZGVmaW5lZCl7XzFmYz1fMWY5KF8xZmMpO2Nscz0iICIrbm9k
ZVtfMWY1XSsiICI7Zm9yKHZhciBpPTAsbGVuPV8xZmMubGVuZ3RoO2k8bGVuOysraSl7Y2xzPWNs
cy5yZXBsYWNlKCIgIitfMWZjW2ldKyIgIiwiICIpO31jbHM9ZC50cmltKGNscyk7fWVsc2V7Y2xz
PSIiO31pZihub2RlW18xZjVdIT1jbHMpe25vZGVbXzFmNV09Y2xzO319O2Rvam8ucmVwbGFjZUNs
YXNzPWZ1bmN0aW9uKG5vZGUsXzFmZCxfMWZlKXtub2RlPWJ5SWQobm9kZSk7XzFmOC5jbGFzc05h
bWU9bm9kZS5jbGFzc05hbWU7ZG9qby5yZW1vdmVDbGFzcyhfMWY4LF8xZmUpO2Rvam8uYWRkQ2xh
c3MoXzFmOCxfMWZkKTtpZihub2RlLmNsYXNzTmFtZSE9PV8xZjguY2xhc3NOYW1lKXtub2RlLmNs
YXNzTmFtZT1fMWY4LmNsYXNzTmFtZTt9fTtkb2pvLnRvZ2dsZUNsYXNzPWZ1bmN0aW9uKG5vZGUs
XzFmZixfMjAwKXtpZihfMjAwPT09dW5kZWZpbmVkKXtfMjAwPSFkLmhhc0NsYXNzKG5vZGUsXzFm
Zik7fWRbXzIwMD8iYWRkQ2xhc3MiOiJyZW1vdmVDbGFzcyJdKG5vZGUsXzFmZik7fTt9KSgpO31p
ZighZG9qby5faGFzUmVzb3VyY2VbImRvam8uX2Jhc2UuTm9kZUxpc3QiXSl7ZG9qby5faGFzUmVz
b3VyY2VbImRvam8uX2Jhc2UuTm9kZUxpc3QiXT10cnVlO2Rvam8ucHJvdmlkZSgiZG9qby5fYmFz
ZS5Ob2RlTGlzdCIpOyhmdW5jdGlvbigpe3ZhciBkPWRvam87dmFyIGFwPUFycmF5LnByb3RvdHlw
ZSxhcHM9YXAuc2xpY2UsYXBjPWFwLmNvbmNhdDt2YXIgdG5sPWZ1bmN0aW9uKGEsXzIwMSxfMjAy
KXtpZighYS5zb3J0KXthPWFwcy5jYWxsKGEsMCk7fXZhciBjdG9yPV8yMDJ8fHRoaXMuX05vZGVM
aXN0Q3Rvcnx8ZC5fTm9kZUxpc3RDdG9yO2EuY29uc3RydWN0b3I9Y3Rvcjtkb2pvLl9taXhpbihh
LGN0b3IucHJvdG90eXBlKTthLl9Ob2RlTGlzdEN0b3I9Y3RvcjtyZXR1cm4gXzIwMT9hLl9zdGFz
aChfMjAxKTphO307dmFyIF8yMDM9ZnVuY3Rpb24oZixhLG8pe2E9WzBdLmNvbmNhdChhcHMuY2Fs
bChhLDApKTtvPW98fGQuZ2xvYmFsO3JldHVybiBmdW5jdGlvbihub2RlKXthWzBdPW5vZGU7cmV0
dXJuIGYuYXBwbHkobyxhKTt9O307dmFyIF8yMDQ9ZnVuY3Rpb24oZixvKXtyZXR1cm4gZnVuY3Rp
b24oKXt0aGlzLmZvckVhY2goXzIwMyhmLGFyZ3VtZW50cyxvKSk7cmV0dXJuIHRoaXM7fTt9O3Zh
ciBfMjA1PWZ1bmN0aW9uKGYsbyl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwKF8y
MDMoZixhcmd1bWVudHMsbykpO307fTt2YXIgXzIwNj1mdW5jdGlvbihmLG8pe3JldHVybiBmdW5j
dGlvbigpe3JldHVybiB0aGlzLmZpbHRlcihfMjAzKGYsYXJndW1lbnRzLG8pKTt9O307dmFyIF8y
MDc9ZnVuY3Rpb24oZixnLG8pe3JldHVybiBmdW5jdGlvbigpe3ZhciBhPWFyZ3VtZW50cyxib2R5
PV8yMDMoZixhLG8pO2lmKGcuY2FsbChvfHxkLmdsb2JhbCxhKSl7cmV0dXJuIHRoaXMubWFwKGJv
ZHkpO310aGlzLmZvckVhY2goYm9keSk7cmV0dXJuIHRoaXM7fTt9O3ZhciBfMjA4PWZ1bmN0aW9u
KGEpe3JldHVybiBhLmxlbmd0aD09MSYmKHR5cGVvZiBhWzBdPT0ic3RyaW5nIik7fTt2YXIgXzIw
OT1mdW5jdGlvbihub2RlKXt2YXIgcD1ub2RlLnBhcmVudE5vZGU7aWYocCl7cC5yZW1vdmVDaGls
ZChub2RlKTt9fTtkb2pvLk5vZGVMaXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRubChBcnJheS5hcHBs
eShudWxsLGFyZ3VtZW50cykpO307ZC5fTm9kZUxpc3RDdG9yPWQuTm9kZUxpc3Q7dmFyIG5sPWQu
Tm9kZUxpc3QsbmxwPW5sLnByb3RvdHlwZTtubC5fd3JhcD1ubHAuX3dyYXA9dG5sO25sLl9hZGFw
dEFzTWFwPV8yMDU7bmwuX2FkYXB0QXNGb3JFYWNoPV8yMDQ7bmwuX2FkYXB0QXNGaWx0ZXI9XzIw
NjtubC5fYWRhcHRXaXRoQ29uZGl0aW9uPV8yMDc7ZC5mb3JFYWNoKFsic2xpY2UiLCJzcGxpY2Ui
XSxmdW5jdGlvbihuYW1lKXt2YXIgZj1hcFtuYW1lXTtubHBbbmFtZV09ZnVuY3Rpb24oKXtyZXR1
cm4gdGhpcy5fd3JhcChmLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxuYW1lPT0ic2xpY2UiP3RoaXM6
bnVsbCk7fTt9KTtkLmZvckVhY2goWyJpbmRleE9mIiwibGFzdEluZGV4T2YiLCJldmVyeSIsInNv
bWUiXSxmdW5jdGlvbihuYW1lKXt2YXIgZj1kW25hbWVdO25scFtuYW1lXT1mdW5jdGlvbigpe3Jl
dHVybiBmLmFwcGx5KGQsW3RoaXNdLmNvbmNhdChhcHMuY2FsbChhcmd1bWVudHMsMCkpKTt9O30p
O2QuZm9yRWFjaChbImF0dHIiLCJzdHlsZSJdLGZ1bmN0aW9uKG5hbWUpe25scFtuYW1lXT1fMjA3
KGRbbmFtZV0sXzIwOCk7fSk7ZC5mb3JFYWNoKFsiY29ubmVjdCIsImFkZENsYXNzIiwicmVtb3Zl
Q2xhc3MiLCJyZXBsYWNlQ2xhc3MiLCJ0b2dnbGVDbGFzcyIsImVtcHR5IiwicmVtb3ZlQXR0ciJd
LGZ1bmN0aW9uKG5hbWUpe25scFtuYW1lXT1fMjA0KGRbbmFtZV0pO30pO2Rvam8uZXh0ZW5kKGRv
am8uTm9kZUxpc3Qse19ub3JtYWxpemU6ZnVuY3Rpb24oXzIwYSxfMjBiKXt2YXIgXzIwYz1fMjBh
LnBhcnNlPT09dHJ1ZT90cnVlOmZhbHNlO2lmKHR5cGVvZiBfMjBhLnRlbXBsYXRlPT0ic3RyaW5n
Iil7dmFyIF8yMGQ9XzIwYS50ZW1wbGF0ZUZ1bmN8fChkb2pvLnN0cmluZyYmZG9qby5zdHJpbmcu
c3Vic3RpdHV0ZSk7XzIwYT1fMjBkP18yMGQoXzIwYS50ZW1wbGF0ZSxfMjBhKTpfMjBhO312YXIg
dHlwZT0odHlwZW9mIF8yMGEpO2lmKHR5cGU9PSJzdHJpbmcifHx0eXBlPT0ibnVtYmVyIil7XzIw
YT1kb2pvLl90b0RvbShfMjBhLChfMjBiJiZfMjBiLm93bmVyRG9jdW1lbnQpKTtpZihfMjBhLm5v
ZGVUeXBlPT0xMSl7XzIwYT1kb2pvLl90b0FycmF5KF8yMGEuY2hpbGROb2Rlcyk7fWVsc2V7XzIw
YT1bXzIwYV07fX1lbHNle2lmKCFkb2pvLmlzQXJyYXlMaWtlKF8yMGEpKXtfMjBhPVtfMjBhXTt9
ZWxzZXtpZighZG9qby5pc0FycmF5KF8yMGEpKXtfMjBhPWRvam8uX3RvQXJyYXkoXzIwYSk7fX19
aWYoXzIwYyl7XzIwYS5fcnVuUGFyc2U9dHJ1ZTt9cmV0dXJuIF8yMGE7fSxfY2xvbmVOb2RlOmZ1
bmN0aW9uKG5vZGUpe3JldHVybiBub2RlLmNsb25lTm9kZSh0cnVlKTt9LF9wbGFjZTpmdW5jdGlv
bihhcnksXzIwZSxfMjBmLF8yMTApe2lmKF8yMGUubm9kZVR5cGUhPTEmJl8yMGY9PSJvbmx5Iil7
cmV0dXJuO312YXIgXzIxMT1fMjBlLF8yMTI7dmFyIF8yMTM9YXJ5Lmxlbmd0aDtmb3IodmFyIGk9
XzIxMy0xO2k+PTA7aS0tKXt2YXIgbm9kZT0oXzIxMD90aGlzLl9jbG9uZU5vZGUoYXJ5W2ldKTph
cnlbaV0pO2lmKGFyeS5fcnVuUGFyc2UmJmRvam8ucGFyc2VyJiZkb2pvLnBhcnNlci5wYXJzZSl7
aWYoIV8yMTIpe18yMTI9XzIxMS5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO31f
MjEyLmFwcGVuZENoaWxkKG5vZGUpO2Rvam8ucGFyc2VyLnBhcnNlKF8yMTIpO25vZGU9XzIxMi5m
aXJzdENoaWxkO3doaWxlKF8yMTIuZmlyc3RDaGlsZCl7XzIxMi5yZW1vdmVDaGlsZChfMjEyLmZp
cnN0Q2hpbGQpO319aWYoaT09XzIxMy0xKXtkb2pvLnBsYWNlKG5vZGUsXzIxMSxfMjBmKTt9ZWxz
ZXtfMjExLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG5vZGUsXzIxMSk7fV8yMTE9bm9kZTt9fSxf
c3Rhc2g6ZnVuY3Rpb24oXzIxNCl7dGhpcy5fcGFyZW50PV8yMTQ7cmV0dXJuIHRoaXM7fSxlbmQ6
ZnVuY3Rpb24oKXtpZih0aGlzLl9wYXJlbnQpe3JldHVybiB0aGlzLl9wYXJlbnQ7fWVsc2V7cmV0
dXJuIG5ldyB0aGlzLl9Ob2RlTGlzdEN0b3IoKTt9fSxjb25jYXQ6ZnVuY3Rpb24oaXRlbSl7dmFy
IHQ9ZC5pc0FycmF5KHRoaXMpP3RoaXM6YXBzLmNhbGwodGhpcywwKSxtPWQubWFwKGFyZ3VtZW50
cyxmdW5jdGlvbihhKXtyZXR1cm4gYSYmIWQuaXNBcnJheShhKSYmKHR5cGVvZiBOb2RlTGlzdCE9
InVuZGVmaW5lZCImJmEuY29uc3RydWN0b3I9PT1Ob2RlTGlzdHx8YS5jb25zdHJ1Y3Rvcj09PXRo
aXMuX05vZGVMaXN0Q3Rvcik/YXBzLmNhbGwoYSwwKTphO30pO3JldHVybiB0aGlzLl93cmFwKGFw
Yy5hcHBseSh0LG0pLHRoaXMpO30sbWFwOmZ1bmN0aW9uKGZ1bmMsb2JqKXtyZXR1cm4gdGhpcy5f
d3JhcChkLm1hcCh0aGlzLGZ1bmMsb2JqKSx0aGlzKTt9LGZvckVhY2g6ZnVuY3Rpb24oXzIxNSxf
MjE2KXtkLmZvckVhY2godGhpcyxfMjE1LF8yMTYpO3JldHVybiB0aGlzO30sY29vcmRzOl8yMDUo
ZC5jb29yZHMpLHBvc2l0aW9uOl8yMDUoZC5wb3NpdGlvbikscGxhY2U6ZnVuY3Rpb24oXzIxNyxf
MjE4KXt2YXIgaXRlbT1kLnF1ZXJ5KF8yMTcpWzBdO3JldHVybiB0aGlzLmZvckVhY2goZnVuY3Rp
b24obm9kZSl7ZC5wbGFjZShub2RlLGl0ZW0sXzIxOCk7fSk7fSxvcnBoYW46ZnVuY3Rpb24oXzIx
OSl7cmV0dXJuIChfMjE5P2QuX2ZpbHRlclF1ZXJ5UmVzdWx0KHRoaXMsXzIxOSk6dGhpcykuZm9y
RWFjaChfMjA5KTt9LGFkb3B0OmZ1bmN0aW9uKF8yMWEsXzIxYil7cmV0dXJuIGQucXVlcnkoXzIx
YSkucGxhY2UodGhpc1swXSxfMjFiKS5fc3Rhc2godGhpcyk7fSxxdWVyeTpmdW5jdGlvbihfMjFj
KXtpZighXzIxYyl7cmV0dXJuIHRoaXM7fXZhciByZXQ9dGhpcy5tYXAoZnVuY3Rpb24obm9kZSl7
cmV0dXJuIGQucXVlcnkoXzIxYyxub2RlKS5maWx0ZXIoZnVuY3Rpb24oXzIxZCl7cmV0dXJuIF8y
MWQhPT11bmRlZmluZWQ7fSk7fSk7cmV0dXJuIHRoaXMuX3dyYXAoYXBjLmFwcGx5KFtdLHJldCks
dGhpcyk7fSxmaWx0ZXI6ZnVuY3Rpb24oXzIxZSl7dmFyIGE9YXJndW1lbnRzLF8yMWY9dGhpcyxf
MjIwPTA7aWYodHlwZW9mIF8yMWU9PSJzdHJpbmciKXtfMjFmPWQuX2ZpbHRlclF1ZXJ5UmVzdWx0
KHRoaXMsYVswXSk7aWYoYS5sZW5ndGg9PTEpe3JldHVybiBfMjFmLl9zdGFzaCh0aGlzKTt9XzIy
MD0xO31yZXR1cm4gdGhpcy5fd3JhcChkLmZpbHRlcihfMjFmLGFbXzIyMF0sYVtfMjIwKzFdKSx0
aGlzKTt9LGFkZENvbnRlbnQ6ZnVuY3Rpb24oXzIyMSxfMjIyKXtfMjIxPXRoaXMuX25vcm1hbGl6
ZShfMjIxLHRoaXNbMF0pO2Zvcih2YXIgaT0wLG5vZGU7KG5vZGU9dGhpc1tpXSk7aSsrKXt0aGlz
Ll9wbGFjZShfMjIxLG5vZGUsXzIyMixpPjApO31yZXR1cm4gdGhpczt9LGluc3RhbnRpYXRlOmZ1
bmN0aW9uKF8yMjMsXzIyNCl7dmFyIGM9ZC5pc0Z1bmN0aW9uKF8yMjMpP18yMjM6ZC5nZXRPYmpl
Y3QoXzIyMyk7XzIyND1fMjI0fHx7fTtyZXR1cm4gdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKG5vZGUp
e25ldyBjKF8yMjQsbm9kZSk7fSk7fSxhdDpmdW5jdGlvbigpe3ZhciB0PW5ldyB0aGlzLl9Ob2Rl
TGlzdEN0b3IoKTtkLmZvckVhY2goYXJndW1lbnRzLGZ1bmN0aW9uKGkpe2lmKGk8MCl7aT10aGlz
Lmxlbmd0aCtpO31pZih0aGlzW2ldKXt0LnB1c2godGhpc1tpXSk7fX0sdGhpcyk7cmV0dXJuIHQu
X3N0YXNoKHRoaXMpO319KTtubC5ldmVudHM9WyJibHVyIiwiZm9jdXMiLCJjaGFuZ2UiLCJjbGlj
ayIsImVycm9yIiwia2V5ZG93biIsImtleXByZXNzIiwia2V5dXAiLCJsb2FkIiwibW91c2Vkb3du
IiwibW91c2VlbnRlciIsIm1vdXNlbGVhdmUiLCJtb3VzZW1vdmUiLCJtb3VzZW91dCIsIm1vdXNl
b3ZlciIsIm1vdXNldXAiLCJzdWJtaXQiXTtkLmZvckVhY2gobmwuZXZlbnRzLGZ1bmN0aW9uKGV2
dCl7dmFyIF8yMjU9Im9uIitldnQ7bmxwW18yMjVdPWZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMu
Y29ubmVjdChfMjI1LGEsYik7fTt9KTt9KSgpO31pZighZG9qby5faGFzUmVzb3VyY2VbImRvam8u
X2Jhc2UucXVlcnkiXSl7ZG9qby5faGFzUmVzb3VyY2VbImRvam8uX2Jhc2UucXVlcnkiXT10cnVl
OyhmdW5jdGlvbigpe3ZhciBfMjI2PWZ1bmN0aW9uKGQpe3ZhciB0cmltPWQudHJpbTt2YXIgZWFj
aD1kLmZvckVhY2g7dmFyIHFsYz0oZC5fTm9kZUxpc3RDdG9yPWQuTm9kZUxpc3QpO3ZhciBfMjI3
PWZ1bmN0aW9uKCl7cmV0dXJuIGQuZG9jO307dmFyIF8yMjg9KChkLmlzV2ViS2l0fHxkLmlzTW96
aWxsYSkmJigoXzIyNygpLmNvbXBhdE1vZGUpPT0iQmFja0NvbXBhdCIpKTt2YXIgXzIyOT0hIV8y
MjcoKS5maXJzdENoaWxkWyJjaGlsZHJlbiJdPyJjaGlsZHJlbiI6ImNoaWxkTm9kZXMiO3ZhciBf
MjJhPSI+fisiO3ZhciBfMjJiPWZhbHNlO3ZhciBfMjJjPWZ1bmN0aW9uKCl7cmV0dXJuIHRydWU7
fTt2YXIgXzIyZD1mdW5jdGlvbihfMjJlKXtpZihfMjJhLmluZGV4T2YoXzIyZS5zbGljZSgtMSkp
Pj0wKXtfMjJlKz0iICogIjt9ZWxzZXtfMjJlKz0iICI7fXZhciB0cz1mdW5jdGlvbihzLGUpe3Jl
dHVybiB0cmltKF8yMmUuc2xpY2UocyxlKSk7fTt2YXIgXzIyZj1bXTt2YXIgXzIzMD0tMSxfMjMx
PS0xLF8yMzI9LTEsXzIzMz0tMSxfMjM0PS0xLGluSWQ9LTEsXzIzNT0tMSxsYz0iIixjYz0iIixf
MjM2O3ZhciB4PTAscWw9XzIyZS5sZW5ndGgsXzIzNz1udWxsLF8yMzg9bnVsbDt2YXIgXzIzOT1m
dW5jdGlvbigpe2lmKF8yMzU+PTApe3ZhciB0dj0oXzIzNT09eCk/bnVsbDp0cyhfMjM1LHgpO18y
MzdbKF8yMmEuaW5kZXhPZih0dik8MCk/InRhZyI6Im9wZXIiXT10djtfMjM1PS0xO319O3ZhciBf
MjNhPWZ1bmN0aW9uKCl7aWYoaW5JZD49MCl7XzIzNy5pZD10cyhpbklkLHgpLnJlcGxhY2UoL1xc
L2csIiIpO2luSWQ9LTE7fX07dmFyIF8yM2I9ZnVuY3Rpb24oKXtpZihfMjM0Pj0wKXtfMjM3LmNs
YXNzZXMucHVzaCh0cyhfMjM0KzEseCkucmVwbGFjZSgvXFwvZywiIikpO18yMzQ9LTE7fX07dmFy
IF8yM2M9ZnVuY3Rpb24oKXtfMjNhKCk7XzIzOSgpO18yM2IoKTt9O3ZhciBfMjNkPWZ1bmN0aW9u
KCl7XzIzYygpO2lmKF8yMzM+PTApe18yMzcucHNldWRvcy5wdXNoKHtuYW1lOnRzKF8yMzMrMSx4
KX0pO31fMjM3Lmxvb3BzPShfMjM3LnBzZXVkb3MubGVuZ3RofHxfMjM3LmF0dHJzLmxlbmd0aHx8
XzIzNy5jbGFzc2VzLmxlbmd0aCk7XzIzNy5vcXVlcnk9XzIzNy5xdWVyeT10cyhfMjM2LHgpO18y
Mzcub3RhZz1fMjM3LnRhZz0oXzIzN1sib3BlciJdKT9udWxsOihfMjM3LnRhZ3x8IioiKTtpZihf
MjM3LnRhZyl7XzIzNy50YWc9XzIzNy50YWcudG9VcHBlckNhc2UoKTt9aWYoXzIyZi5sZW5ndGgm
JihfMjJmW18yMmYubGVuZ3RoLTFdLm9wZXIpKXtfMjM3LmluZml4T3Blcj1fMjJmLnBvcCgpO18y
MzcucXVlcnk9XzIzNy5pbmZpeE9wZXIucXVlcnkrIiAiK18yMzcucXVlcnk7fV8yMmYucHVzaChf
MjM3KTtfMjM3PW51bGw7fTtmb3IoO2xjPWNjLGNjPV8yMmUuY2hhckF0KHgpLHg8cWw7eCsrKXtp
ZihsYz09IlxcIil7Y29udGludWU7fWlmKCFfMjM3KXtfMjM2PXg7XzIzNz17cXVlcnk6bnVsbCxw
c2V1ZG9zOltdLGF0dHJzOltdLGNsYXNzZXM6W10sdGFnOm51bGwsb3BlcjpudWxsLGlkOm51bGws
Z2V0VGFnOmZ1bmN0aW9uKCl7cmV0dXJuIChfMjJiKT90aGlzLm90YWc6dGhpcy50YWc7fX07XzIz
NT14O31pZihfMjMwPj0wKXtpZihjYz09Il0iKXtpZighXzIzOC5hdHRyKXtfMjM4LmF0dHI9dHMo
XzIzMCsxLHgpO31lbHNle18yMzgubWF0Y2hGb3I9dHMoKF8yMzJ8fF8yMzArMSkseCk7fXZhciBj
bWY9XzIzOC5tYXRjaEZvcjtpZihjbWYpe2lmKChjbWYuY2hhckF0KDApPT0iXCIiKXx8KGNtZi5j
aGFyQXQoMCk9PSInIikpe18yMzgubWF0Y2hGb3I9Y21mLnNsaWNlKDEsLTEpO319XzIzNy5hdHRy
cy5wdXNoKF8yMzgpO18yMzg9bnVsbDtfMjMwPV8yMzI9LTE7fWVsc2V7aWYoY2M9PSI9Iil7dmFy
IF8yM2U9KCJ8fl4kKiIuaW5kZXhPZihsYyk+PTApP2xjOiIiO18yMzgudHlwZT1fMjNlK2NjO18y
MzguYXR0cj10cyhfMjMwKzEseC1fMjNlLmxlbmd0aCk7XzIzMj14KzE7fX19ZWxzZXtpZihfMjMx
Pj0wKXtpZihjYz09IikiKXtpZihfMjMzPj0wKXtfMjM4LnZhbHVlPXRzKF8yMzErMSx4KTt9XzIz
Mz1fMjMxPS0xO319ZWxzZXtpZihjYz09IiMiKXtfMjNjKCk7aW5JZD14KzE7fWVsc2V7aWYoY2M9
PSIuIil7XzIzYygpO18yMzQ9eDt9ZWxzZXtpZihjYz09IjoiKXtfMjNjKCk7XzIzMz14O31lbHNl
e2lmKGNjPT0iWyIpe18yM2MoKTtfMjMwPXg7XzIzOD17fTt9ZWxzZXtpZihjYz09IigiKXtpZihf
MjMzPj0wKXtfMjM4PXtuYW1lOnRzKF8yMzMrMSx4KSx2YWx1ZTpudWxsfTtfMjM3LnBzZXVkb3Mu
cHVzaChfMjM4KTt9XzIzMT14O31lbHNle2lmKChjYz09IiAiKSYmKGxjIT1jYykpe18yM2QoKTt9
fX19fX19fX1yZXR1cm4gXzIyZjt9O3ZhciBfMjNmPWZ1bmN0aW9uKF8yNDAsXzI0MSl7aWYoIV8y
NDApe3JldHVybiBfMjQxO31pZighXzI0MSl7cmV0dXJuIF8yNDA7fXJldHVybiBmdW5jdGlvbigp
e3JldHVybiBfMjQwLmFwcGx5KHdpbmRvdyxhcmd1bWVudHMpJiZfMjQxLmFwcGx5KHdpbmRvdyxh
cmd1bWVudHMpO307fTt2YXIgXzI0Mj1mdW5jdGlvbihpLGFycil7dmFyIHI9YXJyfHxbXTtpZihp
KXtyLnB1c2goaSk7fXJldHVybiByO307dmFyIF8yNDM9ZnVuY3Rpb24obil7cmV0dXJuICgxPT1u
Lm5vZGVUeXBlKTt9O3ZhciBfMjQ0PSIiO3ZhciBfMjQ1PWZ1bmN0aW9uKGVsZW0sYXR0cil7aWYo
IWVsZW0pe3JldHVybiBfMjQ0O31pZihhdHRyPT0iY2xhc3MiKXtyZXR1cm4gZWxlbS5jbGFzc05h
bWV8fF8yNDQ7fWlmKGF0dHI9PSJmb3IiKXtyZXR1cm4gZWxlbS5odG1sRm9yfHxfMjQ0O31pZihh
dHRyPT0ic3R5bGUiKXtyZXR1cm4gZWxlbS5zdHlsZS5jc3NUZXh0fHxfMjQ0O31yZXR1cm4gKF8y
MmI/ZWxlbS5nZXRBdHRyaWJ1dGUoYXR0cik6ZWxlbS5nZXRBdHRyaWJ1dGUoYXR0ciwyKSl8fF8y
NDQ7fTt2YXIgXzI0Nj17Iio9IjpmdW5jdGlvbihhdHRyLF8yNDcpe3JldHVybiBmdW5jdGlvbihl
bGVtKXtyZXR1cm4gKF8yNDUoZWxlbSxhdHRyKS5pbmRleE9mKF8yNDcpPj0wKTt9O30sIl49Ijpm
dW5jdGlvbihhdHRyLF8yNDgpe3JldHVybiBmdW5jdGlvbihlbGVtKXtyZXR1cm4gKF8yNDUoZWxl
bSxhdHRyKS5pbmRleE9mKF8yNDgpPT0wKTt9O30sIiQ9IjpmdW5jdGlvbihhdHRyLF8yNDkpe3Zh
ciB0dmFsPSIgIitfMjQ5O3JldHVybiBmdW5jdGlvbihlbGVtKXt2YXIgZWE9IiAiK18yNDUoZWxl
bSxhdHRyKTtyZXR1cm4gKGVhLmxhc3RJbmRleE9mKF8yNDkpPT0oZWEubGVuZ3RoLV8yNDkubGVu
Z3RoKSk7fTt9LCJ+PSI6ZnVuY3Rpb24oYXR0cixfMjRhKXt2YXIgdHZhbD0iICIrXzI0YSsiICI7
cmV0dXJuIGZ1bmN0aW9uKGVsZW0pe3ZhciBlYT0iICIrXzI0NShlbGVtLGF0dHIpKyIgIjtyZXR1
cm4gKGVhLmluZGV4T2YodHZhbCk+PTApO307fSwifD0iOmZ1bmN0aW9uKGF0dHIsXzI0Yil7dmFy
IF8yNGM9IiAiK18yNGIrIi0iO3JldHVybiBmdW5jdGlvbihlbGVtKXt2YXIgZWE9IiAiK18yNDUo
ZWxlbSxhdHRyKTtyZXR1cm4gKChlYT09XzI0Yil8fChlYS5pbmRleE9mKF8yNGMpPT0wKSk7fTt9
LCI9IjpmdW5jdGlvbihhdHRyLF8yNGQpe3JldHVybiBmdW5jdGlvbihlbGVtKXtyZXR1cm4gKF8y
NDUoZWxlbSxhdHRyKT09XzI0ZCk7fTt9fTt2YXIgXzI0ZT0odHlwZW9mIF8yMjcoKS5maXJzdENo
aWxkLm5leHRFbGVtZW50U2libGluZz09InVuZGVmaW5lZCIpO3ZhciBfMjRmPSFfMjRlPyJuZXh0
RWxlbWVudFNpYmxpbmciOiJuZXh0U2libGluZyI7dmFyIF8yNTA9IV8yNGU/InByZXZpb3VzRWxl
bWVudFNpYmxpbmciOiJwcmV2aW91c1NpYmxpbmciO3ZhciBfMjUxPShfMjRlP18yNDM6XzIyYyk7
dmFyIF8yNTI9ZnVuY3Rpb24obm9kZSl7d2hpbGUobm9kZT1ub2RlW18yNTBdKXtpZihfMjUxKG5v
ZGUpKXtyZXR1cm4gZmFsc2U7fX1yZXR1cm4gdHJ1ZTt9O3ZhciBfMjUzPWZ1bmN0aW9uKG5vZGUp
e3doaWxlKG5vZGU9bm9kZVtfMjRmXSl7aWYoXzI1MShub2RlKSl7cmV0dXJuIGZhbHNlO319cmV0
dXJuIHRydWU7fTt2YXIgXzI1ND1mdW5jdGlvbihub2RlKXt2YXIgcm9vdD1ub2RlLnBhcmVudE5v
ZGU7dmFyIGk9MCx0cmV0PXJvb3RbXzIyOV0sY2k9KG5vZGVbIl9pIl18fC0xKSxjbD0ocm9vdFsi
X2wiXXx8LTEpO2lmKCF0cmV0KXtyZXR1cm4gLTE7fXZhciBsPXRyZXQubGVuZ3RoO2lmKGNsPT1s
JiZjaT49MCYmY2w+PTApe3JldHVybiBjaTt9cm9vdFsiX2wiXT1sO2NpPS0xO2Zvcih2YXIgdGU9
cm9vdFsiZmlyc3RFbGVtZW50Q2hpbGQiXXx8cm9vdFsiZmlyc3RDaGlsZCJdO3RlO3RlPXRlW18y
NGZdKXtpZihfMjUxKHRlKSl7dGVbIl9pIl09KytpO2lmKG5vZGU9PT10ZSl7Y2k9aTt9fX1yZXR1
cm4gY2k7fTt2YXIgXzI1NT1mdW5jdGlvbihlbGVtKXtyZXR1cm4gISgoXzI1NChlbGVtKSklMik7
fTt2YXIgXzI1Nj1mdW5jdGlvbihlbGVtKXtyZXR1cm4gKChfMjU0KGVsZW0pKSUyKTt9O3ZhciBf
MjU3PXsiY2hlY2tlZCI6ZnVuY3Rpb24obmFtZSxfMjU4KXtyZXR1cm4gZnVuY3Rpb24oZWxlbSl7
cmV0dXJuICEhKCJjaGVja2VkIiBpbiBlbGVtP2VsZW0uY2hlY2tlZDplbGVtLnNlbGVjdGVkKTt9
O30sImZpcnN0LWNoaWxkIjpmdW5jdGlvbigpe3JldHVybiBfMjUyO30sImxhc3QtY2hpbGQiOmZ1
bmN0aW9uKCl7cmV0dXJuIF8yNTM7fSwib25seS1jaGlsZCI6ZnVuY3Rpb24obmFtZSxfMjU5KXty
ZXR1cm4gZnVuY3Rpb24obm9kZSl7aWYoIV8yNTIobm9kZSkpe3JldHVybiBmYWxzZTt9aWYoIV8y
NTMobm9kZSkpe3JldHVybiBmYWxzZTt9cmV0dXJuIHRydWU7fTt9LCJlbXB0eSI6ZnVuY3Rpb24o
bmFtZSxfMjVhKXtyZXR1cm4gZnVuY3Rpb24oZWxlbSl7dmFyIGNuPWVsZW0uY2hpbGROb2Rlczt2
YXIgY25sPWVsZW0uY2hpbGROb2Rlcy5sZW5ndGg7Zm9yKHZhciB4PWNubC0xO3g+PTA7eC0tKXt2
YXIgbnQ9Y25beF0ubm9kZVR5cGU7aWYoKG50PT09MSl8fChudD09Mykpe3JldHVybiBmYWxzZTt9
fXJldHVybiB0cnVlO307fSwiY29udGFpbnMiOmZ1bmN0aW9uKG5hbWUsXzI1Yil7dmFyIGN6PV8y
NWIuY2hhckF0KDApO2lmKGN6PT0iXCIifHxjej09IiciKXtfMjViPV8yNWIuc2xpY2UoMSwtMSk7
fXJldHVybiBmdW5jdGlvbihlbGVtKXtyZXR1cm4gKGVsZW0uaW5uZXJIVE1MLmluZGV4T2YoXzI1
Yik+PTApO307fSwibm90IjpmdW5jdGlvbihuYW1lLF8yNWMpe3ZhciBwPV8yMmQoXzI1YylbMF07
dmFyIF8yNWQ9e2VsOjF9O2lmKHAudGFnIT0iKiIpe18yNWQudGFnPTE7fWlmKCFwLmNsYXNzZXMu
bGVuZ3RoKXtfMjVkLmNsYXNzZXM9MTt9dmFyIG50Zj1fMjVlKHAsXzI1ZCk7cmV0dXJuIGZ1bmN0
aW9uKGVsZW0pe3JldHVybiAoIW50ZihlbGVtKSk7fTt9LCJudGgtY2hpbGQiOmZ1bmN0aW9uKG5h
bWUsXzI1Zil7dmFyIHBpPXBhcnNlSW50O2lmKF8yNWY9PSJvZGQiKXtyZXR1cm4gXzI1Njt9ZWxz
ZXtpZihfMjVmPT0iZXZlbiIpe3JldHVybiBfMjU1O319aWYoXzI1Zi5pbmRleE9mKCJuIikhPS0x
KXt2YXIgXzI2MD1fMjVmLnNwbGl0KCJuIiwyKTt2YXIgcHJlZD1fMjYwWzBdPygoXzI2MFswXT09
Ii0iKT8tMTpwaShfMjYwWzBdKSk6MTt2YXIgaWR4PV8yNjBbMV0/cGkoXzI2MFsxXSk6MDt2YXIg
bGI9MCx1Yj0tMTtpZihwcmVkPjApe2lmKGlkeDwwKXtpZHg9KGlkeCVwcmVkKSYmKHByZWQrKGlk
eCVwcmVkKSk7fWVsc2V7aWYoaWR4PjApe2lmKGlkeD49cHJlZCl7bGI9aWR4LWlkeCVwcmVkO31p
ZHg9aWR4JXByZWQ7fX19ZWxzZXtpZihwcmVkPDApe3ByZWQqPS0xO2lmKGlkeD4wKXt1Yj1pZHg7
aWR4PWlkeCVwcmVkO319fWlmKHByZWQ+MCl7cmV0dXJuIGZ1bmN0aW9uKGVsZW0pe3ZhciBpPV8y
NTQoZWxlbSk7cmV0dXJuIChpPj1sYikmJih1YjwwfHxpPD11YikmJigoaSVwcmVkKT09aWR4KTt9
O31lbHNle18yNWY9aWR4O319dmFyIF8yNjE9cGkoXzI1Zik7cmV0dXJuIGZ1bmN0aW9uKGVsZW0p
e3JldHVybiAoXzI1NChlbGVtKT09XzI2MSk7fTt9fTt2YXIgXzI2Mj0oZC5pc0lFPDl8fChkb2pv
LmlzSUUmJmRvam8uaXNRdWlya3MpKT9mdW5jdGlvbihjb25kKXt2YXIgY2xjPWNvbmQudG9Mb3dl
ckNhc2UoKTtpZihjbGM9PSJjbGFzcyIpe2NvbmQ9ImNsYXNzTmFtZSI7fXJldHVybiBmdW5jdGlv
bihlbGVtKXtyZXR1cm4gKF8yMmI/ZWxlbS5nZXRBdHRyaWJ1dGUoY29uZCk6ZWxlbVtjb25kXXx8
ZWxlbVtjbGNdKTt9O306ZnVuY3Rpb24oY29uZCl7cmV0dXJuIGZ1bmN0aW9uKGVsZW0pe3JldHVy
biAoZWxlbSYmZWxlbS5nZXRBdHRyaWJ1dGUmJmVsZW0uaGFzQXR0cmlidXRlKGNvbmQpKTt9O307
dmFyIF8yNWU9ZnVuY3Rpb24oXzI2MyxfMjY0KXtpZighXzI2Myl7cmV0dXJuIF8yMmM7fV8yNjQ9
XzI2NHx8e307dmFyIGZmPW51bGw7aWYoISgiZWwiIGluIF8yNjQpKXtmZj1fMjNmKGZmLF8yNDMp
O31pZighKCJ0YWciIGluIF8yNjQpKXtpZihfMjYzLnRhZyE9IioiKXtmZj1fMjNmKGZmLGZ1bmN0
aW9uKGVsZW0pe3JldHVybiAoZWxlbSYmKGVsZW0udGFnTmFtZT09XzI2My5nZXRUYWcoKSkpO30p
O319aWYoISgiY2xhc3NlcyIgaW4gXzI2NCkpe2VhY2goXzI2My5jbGFzc2VzLGZ1bmN0aW9uKF8y
NjUsaWR4LGFycil7dmFyIHJlPW5ldyBSZWdFeHAoIig/Ol58XFxzKSIrXzI2NSsiKD86XFxzfCQp
Iik7ZmY9XzIzZihmZixmdW5jdGlvbihlbGVtKXtyZXR1cm4gcmUudGVzdChlbGVtLmNsYXNzTmFt
ZSk7fSk7ZmYuY291bnQ9aWR4O30pO31pZighKCJwc2V1ZG9zIiBpbiBfMjY0KSl7ZWFjaChfMjYz
LnBzZXVkb3MsZnVuY3Rpb24oXzI2Nil7dmFyIHBuPV8yNjYubmFtZTtpZihfMjU3W3BuXSl7ZmY9
XzIzZihmZixfMjU3W3BuXShwbixfMjY2LnZhbHVlKSk7fX0pO31pZighKCJhdHRycyIgaW4gXzI2
NCkpe2VhY2goXzI2My5hdHRycyxmdW5jdGlvbihhdHRyKXt2YXIgXzI2Nzt2YXIgYT1hdHRyLmF0
dHI7aWYoYXR0ci50eXBlJiZfMjQ2W2F0dHIudHlwZV0pe18yNjc9XzI0NlthdHRyLnR5cGVdKGEs
YXR0ci5tYXRjaEZvcik7fWVsc2V7aWYoYS5sZW5ndGgpe18yNjc9XzI2MihhKTt9fWlmKF8yNjcp
e2ZmPV8yM2YoZmYsXzI2Nyk7fX0pO31pZighKCJpZCIgaW4gXzI2NCkpe2lmKF8yNjMuaWQpe2Zm
PV8yM2YoZmYsZnVuY3Rpb24oZWxlbSl7cmV0dXJuICghIWVsZW0mJihlbGVtLmlkPT1fMjYzLmlk
KSk7fSk7fX1pZighZmYpe2lmKCEoImRlZmF1bHQiIGluIF8yNjQpKXtmZj1fMjJjO319cmV0dXJu
IGZmO307dmFyIF8yNjg9ZnVuY3Rpb24oXzI2OSl7cmV0dXJuIGZ1bmN0aW9uKG5vZGUscmV0LGJh
Zyl7d2hpbGUobm9kZT1ub2RlW18yNGZdKXtpZihfMjRlJiYoIV8yNDMobm9kZSkpKXtjb250aW51
ZTt9aWYoKCFiYWd8fF8yNmEobm9kZSxiYWcpKSYmXzI2OShub2RlKSl7cmV0LnB1c2gobm9kZSk7
fWJyZWFrO31yZXR1cm4gcmV0O307fTt2YXIgXzI2Yj1mdW5jdGlvbihfMjZjKXtyZXR1cm4gZnVu
Y3Rpb24ocm9vdCxyZXQsYmFnKXt2YXIgdGU9cm9vdFtfMjRmXTt3aGlsZSh0ZSl7aWYoXzI1MSh0
ZSkpe2lmKGJhZyYmIV8yNmEodGUsYmFnKSl7YnJlYWs7fWlmKF8yNmModGUpKXtyZXQucHVzaCh0
ZSk7fX10ZT10ZVtfMjRmXTt9cmV0dXJuIHJldDt9O307dmFyIF8yNmQ9ZnVuY3Rpb24oXzI2ZSl7
XzI2ZT1fMjZlfHxfMjJjO3JldHVybiBmdW5jdGlvbihyb290LHJldCxiYWcpe3ZhciB0ZSx4PTAs
dHJldD1yb290W18yMjldO3doaWxlKHRlPXRyZXRbeCsrXSl7aWYoXzI1MSh0ZSkmJighYmFnfHxf
MjZhKHRlLGJhZykpJiYoXzI2ZSh0ZSx4KSkpe3JldC5wdXNoKHRlKTt9fXJldHVybiByZXQ7fTt9
O3ZhciBfMjZmPWZ1bmN0aW9uKG5vZGUscm9vdCl7dmFyIHBuPW5vZGUucGFyZW50Tm9kZTt3aGls
ZShwbil7aWYocG49PXJvb3Qpe2JyZWFrO31wbj1wbi5wYXJlbnROb2RlO31yZXR1cm4gISFwbjt9
O3ZhciBfMjcwPXt9O3ZhciBfMjcxPWZ1bmN0aW9uKF8yNzIpe3ZhciBfMjczPV8yNzBbXzI3Mi5x
dWVyeV07aWYoXzI3Myl7cmV0dXJuIF8yNzM7fXZhciBpbz1fMjcyLmluZml4T3Blcjt2YXIgb3Bl
cj0oaW8/aW8ub3BlcjoiIik7dmFyIF8yNzQ9XzI1ZShfMjcyLHtlbDoxfSk7dmFyIHF0PV8yNzIu
dGFnO3ZhciBfMjc1PSgiKiI9PXF0KTt2YXIgZWNzPV8yMjcoKVsiZ2V0RWxlbWVudHNCeUNsYXNz
TmFtZSJdO2lmKCFvcGVyKXtpZihfMjcyLmlkKXtfMjc0PSghXzI3Mi5sb29wcyYmXzI3NSk/XzIy
YzpfMjVlKF8yNzIse2VsOjEsaWQ6MX0pO18yNzM9ZnVuY3Rpb24ocm9vdCxhcnIpe3ZhciB0ZT1k
LmJ5SWQoXzI3Mi5pZCwocm9vdC5vd25lckRvY3VtZW50fHxyb290KSk7aWYoIXRlfHwhXzI3NCh0
ZSkpe3JldHVybjt9aWYoOT09cm9vdC5ub2RlVHlwZSl7cmV0dXJuIF8yNDIodGUsYXJyKTt9ZWxz
ZXtpZihfMjZmKHRlLHJvb3QpKXtyZXR1cm4gXzI0Mih0ZSxhcnIpO319fTt9ZWxzZXtpZihlY3Mm
Ji9ce1xzKlxbbmF0aXZlIGNvZGVcXVxzKlx9Ly50ZXN0KFN0cmluZyhlY3MpKSYmXzI3Mi5jbGFz
c2VzLmxlbmd0aCYmIV8yMjgpe18yNzQ9XzI1ZShfMjcyLHtlbDoxLGNsYXNzZXM6MSxpZDoxfSk7
dmFyIF8yNzY9XzI3Mi5jbGFzc2VzLmpvaW4oIiAiKTtfMjczPWZ1bmN0aW9uKHJvb3QsYXJyLGJh
Zyl7dmFyIHJldD1fMjQyKDAsYXJyKSx0ZSx4PTA7dmFyIHRyZXQ9cm9vdC5nZXRFbGVtZW50c0J5
Q2xhc3NOYW1lKF8yNzYpO3doaWxlKCh0ZT10cmV0W3grK10pKXtpZihfMjc0KHRlLHJvb3QpJiZf
MjZhKHRlLGJhZykpe3JldC5wdXNoKHRlKTt9fXJldHVybiByZXQ7fTt9ZWxzZXtpZighXzI3NSYm
IV8yNzIubG9vcHMpe18yNzM9ZnVuY3Rpb24ocm9vdCxhcnIsYmFnKXt2YXIgcmV0PV8yNDIoMCxh
cnIpLHRlLHg9MDt2YXIgdHJldD1yb290LmdldEVsZW1lbnRzQnlUYWdOYW1lKF8yNzIuZ2V0VGFn
KCkpO3doaWxlKCh0ZT10cmV0W3grK10pKXtpZihfMjZhKHRlLGJhZykpe3JldC5wdXNoKHRlKTt9
fXJldHVybiByZXQ7fTt9ZWxzZXtfMjc0PV8yNWUoXzI3Mix7ZWw6MSx0YWc6MSxpZDoxfSk7XzI3
Mz1mdW5jdGlvbihyb290LGFycixiYWcpe3ZhciByZXQ9XzI0MigwLGFyciksdGUseD0wO3ZhciB0
cmV0PXJvb3QuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXzI3Mi5nZXRUYWcoKSk7d2hpbGUoKHRlPXRy
ZXRbeCsrXSkpe2lmKF8yNzQodGUscm9vdCkmJl8yNmEodGUsYmFnKSl7cmV0LnB1c2godGUpO319
cmV0dXJuIHJldDt9O319fX1lbHNle3ZhciBfMjc3PXtlbDoxfTtpZihfMjc1KXtfMjc3LnRhZz0x
O31fMjc0PV8yNWUoXzI3MixfMjc3KTtpZigiKyI9PW9wZXIpe18yNzM9XzI2OChfMjc0KTt9ZWxz
ZXtpZigifiI9PW9wZXIpe18yNzM9XzI2YihfMjc0KTt9ZWxzZXtpZigiPiI9PW9wZXIpe18yNzM9
XzI2ZChfMjc0KTt9fX19cmV0dXJuIF8yNzBbXzI3Mi5xdWVyeV09XzI3Mzt9O3ZhciBfMjc4PWZ1
bmN0aW9uKHJvb3QsXzI3OSl7dmFyIF8yN2E9XzI0Mihyb290KSxxcCx4LHRlLHFwbD1fMjc5Lmxl
bmd0aCxiYWcscmV0O2Zvcih2YXIgaT0wO2k8cXBsO2krKyl7cmV0PVtdO3FwPV8yNzlbaV07eD1f
MjdhLmxlbmd0aC0xO2lmKHg+MCl7YmFnPXt9O3JldC5ub3ppcD10cnVlO312YXIgZ2VmPV8yNzEo
cXApO2Zvcih2YXIgaj0wOyh0ZT1fMjdhW2pdKTtqKyspe2dlZih0ZSxyZXQsYmFnKTt9aWYoIXJl
dC5sZW5ndGgpe2JyZWFrO31fMjdhPXJldDt9cmV0dXJuIHJldDt9O3ZhciBfMjdiPXt9LF8yN2M9
e307dmFyIF8yN2Q9ZnVuY3Rpb24oXzI3ZSl7dmFyIF8yN2Y9XzIyZCh0cmltKF8yN2UpKTtpZihf
MjdmLmxlbmd0aD09MSl7dmFyIHRlZj1fMjcxKF8yN2ZbMF0pO3JldHVybiBmdW5jdGlvbihyb290
KXt2YXIgcj10ZWYocm9vdCxuZXcgcWxjKCkpO2lmKHIpe3Iubm96aXA9dHJ1ZTt9cmV0dXJuIHI7
fTt9cmV0dXJuIGZ1bmN0aW9uKHJvb3Qpe3JldHVybiBfMjc4KHJvb3QsXzI3Zik7fTt9O3ZhciBu
dWE9bmF2aWdhdG9yLnVzZXJBZ2VudDt2YXIgd2s9IldlYktpdC8iO3ZhciBfMjgwPShkLmlzV2Vi
S2l0JiYobnVhLmluZGV4T2Yod2spPjApJiYocGFyc2VGbG9hdChudWEuc3BsaXQod2spWzFdKT41
MjgpKTt2YXIgXzI4MT1kLmlzSUU/ImNvbW1lbnRTdHJpcCI6Im5vemlwIjt2YXIgcXNhPSJxdWVy
eVNlbGVjdG9yQWxsIjt2YXIgXzI4Mj0oISFfMjI3KClbcXNhXSYmKCFkLmlzU2FmYXJpfHwoZC5p
c1NhZmFyaT4zLjEpfHxfMjgwKSk7dmFyIF8yODM9L25cK1xkfChbXiBdKT8oWz5+K10pKFteID1d
KT8vZzt2YXIgXzI4ND1mdW5jdGlvbihfMjg1LHByZSxjaCxwb3N0KXtyZXR1cm4gY2g/KHByZT9w
cmUrIiAiOiIiKStjaCsocG9zdD8iICIrcG9zdDoiIik6XzI4NTt9O3ZhciBfMjg2PWZ1bmN0aW9u
KF8yODcsXzI4OCl7XzI4Nz1fMjg3LnJlcGxhY2UoXzI4MyxfMjg0KTtpZihfMjgyKXt2YXIgXzI4
OT1fMjdjW18yODddO2lmKF8yODkmJiFfMjg4KXtyZXR1cm4gXzI4OTt9fXZhciBfMjhhPV8yN2Jb
XzI4N107aWYoXzI4YSl7cmV0dXJuIF8yOGE7fXZhciBxY3o9XzI4Ny5jaGFyQXQoMCk7dmFyIF8y
OGI9KC0xPT1fMjg3LmluZGV4T2YoIiAiKSk7aWYoKF8yODcuaW5kZXhPZigiIyIpPj0wKSYmKF8y
OGIpKXtfMjg4PXRydWU7fXZhciBfMjhjPShfMjgyJiYoIV8yODgpJiYoXzIyYS5pbmRleE9mKHFj
eik9PS0xKSYmKCFkLmlzSUV8fChfMjg3LmluZGV4T2YoIjoiKT09LTEpKSYmKCEoXzIyOCYmKF8y
ODcuaW5kZXhPZigiLiIpPj0wKSkpJiYoXzI4Ny5pbmRleE9mKCI6Y29udGFpbnMiKT09LTEpJiYo
XzI4Ny5pbmRleE9mKCI6Y2hlY2tlZCIpPT0tMSkmJihfMjg3LmluZGV4T2YoInw9Iik9PS0xKSk7
aWYoXzI4Yyl7dmFyIHRxPShfMjJhLmluZGV4T2YoXzI4Ny5jaGFyQXQoXzI4Ny5sZW5ndGgtMSkp
Pj0wKT8oXzI4NysiICoiKTpfMjg3O3JldHVybiBfMjdjW18yODddPWZ1bmN0aW9uKHJvb3Qpe3Ry
eXtpZighKCg5PT1yb290Lm5vZGVUeXBlKXx8XzI4Yikpe3Rocm93ICIiO312YXIgcj1yb290W3Fz
YV0odHEpO3JbXzI4MV09dHJ1ZTtyZXR1cm4gcjt9Y2F0Y2goZSl7cmV0dXJuIF8yODYoXzI4Nyx0
cnVlKShyb290KTt9fTt9ZWxzZXt2YXIgXzI4ZD1fMjg3LnNwbGl0KC9ccyosXHMqLyk7cmV0dXJu
IF8yN2JbXzI4N109KChfMjhkLmxlbmd0aDwyKT9fMjdkKF8yODcpOmZ1bmN0aW9uKHJvb3Qpe3Zh
ciBfMjhlPTAscmV0PVtdLHRwO3doaWxlKCh0cD1fMjhkW18yOGUrK10pKXtyZXQ9cmV0LmNvbmNh
dChfMjdkKHRwKShyb290KSk7fXJldHVybiByZXQ7fSk7fX07dmFyIF8yOGY9MDt2YXIgXzI5MD1k
LmlzSUU/ZnVuY3Rpb24obm9kZSl7aWYoXzIyYil7cmV0dXJuIChub2RlLmdldEF0dHJpYnV0ZSgi
X3VpZCIpfHxub2RlLnNldEF0dHJpYnV0ZSgiX3VpZCIsKytfMjhmKXx8XzI4Zik7fWVsc2V7cmV0
dXJuIG5vZGUudW5pcXVlSUQ7fX06ZnVuY3Rpb24obm9kZSl7cmV0dXJuIChub2RlLl91aWR8fChu
b2RlLl91aWQ9KytfMjhmKSk7fTt2YXIgXzI2YT1mdW5jdGlvbihub2RlLGJhZyl7aWYoIWJhZyl7
cmV0dXJuIDE7fXZhciBpZD1fMjkwKG5vZGUpO2lmKCFiYWdbaWRdKXtyZXR1cm4gYmFnW2lkXT0x
O31yZXR1cm4gMDt9O3ZhciBfMjkxPSJfemlwSWR4Ijt2YXIgXzI5Mj1mdW5jdGlvbihhcnIpe2lm
KGFyciYmYXJyLm5vemlwKXtyZXR1cm4gKHFsYy5fd3JhcCk/cWxjLl93cmFwKGFycik6YXJyO312
YXIgcmV0PW5ldyBxbGMoKTtpZighYXJyfHwhYXJyLmxlbmd0aCl7cmV0dXJuIHJldDt9aWYoYXJy
WzBdKXtyZXQucHVzaChhcnJbMF0pO31pZihhcnIubGVuZ3RoPDIpe3JldHVybiByZXQ7fV8yOGYr
KztpZihkLmlzSUUmJl8yMmIpe3ZhciBfMjkzPV8yOGYrIiI7YXJyWzBdLnNldEF0dHJpYnV0ZShf
MjkxLF8yOTMpO2Zvcih2YXIgeD0xLHRlO3RlPWFyclt4XTt4Kyspe2lmKGFyclt4XS5nZXRBdHRy
aWJ1dGUoXzI5MSkhPV8yOTMpe3JldC5wdXNoKHRlKTt9dGUuc2V0QXR0cmlidXRlKF8yOTEsXzI5
Myk7fX1lbHNle2lmKGQuaXNJRSYmYXJyLmNvbW1lbnRTdHJpcCl7dHJ5e2Zvcih2YXIgeD0xLHRl
O3RlPWFyclt4XTt4Kyspe2lmKF8yNDModGUpKXtyZXQucHVzaCh0ZSk7fX19Y2F0Y2goZSl7fX1l
bHNle2lmKGFyclswXSl7YXJyWzBdW18yOTFdPV8yOGY7fWZvcih2YXIgeD0xLHRlO3RlPWFyclt4
XTt4Kyspe2lmKGFyclt4XVtfMjkxXSE9XzI4Zil7cmV0LnB1c2godGUpO310ZVtfMjkxXT1fMjhm
O319fXJldHVybiByZXQ7fTtkLnF1ZXJ5PWZ1bmN0aW9uKF8yOTQscm9vdCl7cWxjPWQuX05vZGVM
aXN0Q3RvcjtpZighXzI5NCl7cmV0dXJuIG5ldyBxbGMoKTt9aWYoXzI5NC5jb25zdHJ1Y3Rvcj09
cWxjKXtyZXR1cm4gXzI5NDt9aWYodHlwZW9mIF8yOTQhPSJzdHJpbmciKXtyZXR1cm4gbmV3IHFs
YyhfMjk0KTt9aWYodHlwZW9mIHJvb3Q9PSJzdHJpbmciKXtyb290PWQuYnlJZChyb290KTtpZigh
cm9vdCl7cmV0dXJuIG5ldyBxbGMoKTt9fXJvb3Q9cm9vdHx8XzIyNygpO3ZhciBvZD1yb290Lm93
bmVyRG9jdW1lbnR8fHJvb3QuZG9jdW1lbnRFbGVtZW50O18yMmI9KHJvb3QuY29udGVudFR5cGUm
JnJvb3QuY29udGVudFR5cGU9PSJhcHBsaWNhdGlvbi94bWwiKXx8KGQuaXNPcGVyYSYmKHJvb3Qu
ZG9jdHlwZXx8b2QudG9TdHJpbmcoKT09IltvYmplY3QgWE1MRG9jdW1lbnRdIikpfHwoISFvZCkm
JihkLmlzSUU/b2QueG1sOihyb290LnhtbFZlcnNpb258fG9kLnhtbFZlcnNpb24pKTt2YXIgcj1f
Mjg2KF8yOTQpKHJvb3QpO2lmKHImJnIubm96aXAmJiFxbGMuX3dyYXApe3JldHVybiByO31yZXR1
cm4gXzI5MihyKTt9O2QucXVlcnkucHNldWRvcz1fMjU3O2QuX2ZpbHRlclF1ZXJ5UmVzdWx0PWZ1
bmN0aW9uKF8yOTUsXzI5Nixyb290KXt2YXIgXzI5Nz1uZXcgZC5fTm9kZUxpc3RDdG9yKCksXzI5
OD1fMjJkKF8yOTYpLF8yOTk9KF8yOTgubGVuZ3RoPT0xJiYhL1teXHcjXC5dLy50ZXN0KF8yOTYp
KT9fMjVlKF8yOThbMF0pOmZ1bmN0aW9uKG5vZGUpe3JldHVybiBkb2pvLnF1ZXJ5KF8yOTYscm9v
dCkuaW5kZXhPZihub2RlKSE9LTE7fTtmb3IodmFyIHg9MCx0ZTt0ZT1fMjk1W3hdO3grKyl7aWYo
XzI5OSh0ZSkpe18yOTcucHVzaCh0ZSk7fX1yZXR1cm4gXzI5Nzt9O307dmFyIF8yOWE9ZnVuY3Rp
b24oKXthY21lPXt0cmltOmZ1bmN0aW9uKHN0cil7c3RyPXN0ci5yZXBsYWNlKC9eXHMrLywiIik7
Zm9yKHZhciBpPXN0ci5sZW5ndGgtMTtpPj0wO2ktLSl7aWYoL1xTLy50ZXN0KHN0ci5jaGFyQXQo
aSkpKXtzdHI9c3RyLnN1YnN0cmluZygwLGkrMSk7YnJlYWs7fX1yZXR1cm4gc3RyO30sZm9yRWFj
aDpmdW5jdGlvbihhcnIsXzI5YixfMjljKXtpZighYXJyfHwhYXJyLmxlbmd0aCl7cmV0dXJuO31m
b3IodmFyIGk9MCxsPWFyci5sZW5ndGg7aTxsOysraSl7XzI5Yi5jYWxsKF8yOWN8fHdpbmRvdyxh
cnJbaV0saSxhcnIpO319LGJ5SWQ6ZnVuY3Rpb24oaWQsZG9jKXtpZih0eXBlb2YgaWQ9PSJzdHJp
bmciKXtyZXR1cm4gKGRvY3x8ZG9jdW1lbnQpLmdldEVsZW1lbnRCeUlkKGlkKTt9ZWxzZXtyZXR1
cm4gaWQ7fX0sZG9jOmRvY3VtZW50LE5vZGVMaXN0OkFycmF5fTt2YXIgbj1uYXZpZ2F0b3I7dmFy
IGR1YT1uLnVzZXJBZ2VudDt2YXIgZGF2PW4uYXBwVmVyc2lvbjt2YXIgdHY9cGFyc2VGbG9hdChk
YXYpO2FjbWUuaXNPcGVyYT0oZHVhLmluZGV4T2YoIk9wZXJhIik+PTApP3R2OnVuZGVmaW5lZDth
Y21lLmlzS2h0bWw9KGRhdi5pbmRleE9mKCJLb25xdWVyb3IiKT49MCk/dHY6dW5kZWZpbmVkO2Fj
bWUuaXNXZWJLaXQ9cGFyc2VGbG9hdChkdWEuc3BsaXQoIldlYktpdC8iKVsxXSl8fHVuZGVmaW5l
ZDthY21lLmlzQ2hyb21lPXBhcnNlRmxvYXQoZHVhLnNwbGl0KCJDaHJvbWUvIilbMV0pfHx1bmRl
ZmluZWQ7dmFyIF8yOWQ9TWF0aC5tYXgoZGF2LmluZGV4T2YoIldlYktpdCIpLGRhdi5pbmRleE9m
KCJTYWZhcmkiKSwwKTtpZihfMjlkJiYhYWNtZS5pc0Nocm9tZSl7YWNtZS5pc1NhZmFyaT1wYXJz
ZUZsb2F0KGRhdi5zcGxpdCgiVmVyc2lvbi8iKVsxXSk7aWYoIWFjbWUuaXNTYWZhcml8fHBhcnNl
RmxvYXQoZGF2LnN1YnN0cihfMjlkKzcpKTw9NDE5LjMpe2FjbWUuaXNTYWZhcmk9Mjt9fWlmKGRv
Y3VtZW50LmFsbCYmIWFjbWUuaXNPcGVyYSl7YWNtZS5pc0lFPXBhcnNlRmxvYXQoZGF2LnNwbGl0
KCJNU0lFICIpWzFdKXx8dW5kZWZpbmVkO31BcnJheS5fd3JhcD1mdW5jdGlvbihhcnIpe3JldHVy
biBhcnI7fTtyZXR1cm4gYWNtZTt9O2lmKHRoaXNbImRvam8iXSl7ZG9qby5wcm92aWRlKCJkb2pv
Ll9iYXNlLnF1ZXJ5Iik7XzIyNih0aGlzWyJxdWVyeVBvcnRhYmlsaXR5Il18fHRoaXNbImFjbWUi
XXx8ZG9qbyk7fWVsc2V7XzIyNih0aGlzWyJxdWVyeVBvcnRhYmlsaXR5Il18fHRoaXNbImFjbWUi
XXx8XzI5YSgpKTt9fSkoKTt9aWYoIWRvam8uX2hhc1Jlc291cmNlWyJkb2pvLl9iYXNlLnhociJd
KXtkb2pvLl9oYXNSZXNvdXJjZVsiZG9qby5fYmFzZS54aHIiXT10cnVlO2Rvam8ucHJvdmlkZSgi
ZG9qby5fYmFzZS54aHIiKTsoZnVuY3Rpb24oKXt2YXIgXzI5ZT1kb2pvLGNmZz1fMjllLmNvbmZp
ZztmdW5jdGlvbiBfMjlmKG9iaixuYW1lLF8yYTApe2lmKF8yYTA9PT1udWxsKXtyZXR1cm47fXZh
ciB2YWw9b2JqW25hbWVdO2lmKHR5cGVvZiB2YWw9PSJzdHJpbmciKXtvYmpbbmFtZV09W3ZhbCxf
MmEwXTt9ZWxzZXtpZihfMjllLmlzQXJyYXkodmFsKSl7dmFsLnB1c2goXzJhMCk7fWVsc2V7b2Jq
W25hbWVdPV8yYTA7fX19O2Rvam8uZmllbGRUb09iamVjdD1mdW5jdGlvbihfMmExKXt2YXIgcmV0
PW51bGw7dmFyIGl0ZW09XzI5ZS5ieUlkKF8yYTEpO2lmKGl0ZW0pe3ZhciBfMmEyPWl0ZW0ubmFt
ZTt2YXIgdHlwZT0oaXRlbS50eXBlfHwiIikudG9Mb3dlckNhc2UoKTtpZihfMmEyJiZ0eXBlJiYh
aXRlbS5kaXNhYmxlZCl7aWYodHlwZT09InJhZGlvInx8dHlwZT09ImNoZWNrYm94Iil7aWYoaXRl
bS5jaGVja2VkKXtyZXQ9aXRlbS52YWx1ZTt9fWVsc2V7aWYoaXRlbS5tdWx0aXBsZSl7cmV0PVtd
O18yOWUucXVlcnkoIm9wdGlvbiIsaXRlbSkuZm9yRWFjaChmdW5jdGlvbihvcHQpe2lmKG9wdC5z
ZWxlY3RlZCl7cmV0LnB1c2gob3B0LnZhbHVlKTt9fSk7fWVsc2V7cmV0PWl0ZW0udmFsdWU7fX19
fXJldHVybiByZXQ7fTtkb2pvLmZvcm1Ub09iamVjdD1mdW5jdGlvbihfMmEzKXt2YXIgcmV0PXt9
O3ZhciBfMmE0PSJmaWxlfHN1Ym1pdHxpbWFnZXxyZXNldHxidXR0b258IjtfMjllLmZvckVhY2go
ZG9qby5ieUlkKF8yYTMpLmVsZW1lbnRzLGZ1bmN0aW9uKGl0ZW0pe3ZhciBfMmE1PWl0ZW0ubmFt
ZTt2YXIgdHlwZT0oaXRlbS50eXBlfHwiIikudG9Mb3dlckNhc2UoKTtpZihfMmE1JiZ0eXBlJiZf
MmE0LmluZGV4T2YodHlwZSk9PS0xJiYhaXRlbS5kaXNhYmxlZCl7XzI5ZihyZXQsXzJhNSxfMjll
LmZpZWxkVG9PYmplY3QoaXRlbSkpO2lmKHR5cGU9PSJpbWFnZSIpe3JldFtfMmE1KyIueCJdPXJl
dFtfMmE1KyIueSJdPXJldFtfMmE1XS54PXJldFtfMmE1XS55PTA7fX19KTtyZXR1cm4gcmV0O307
ZG9qby5vYmplY3RUb1F1ZXJ5PWZ1bmN0aW9uKG1hcCl7dmFyIGVuYz1lbmNvZGVVUklDb21wb25l
bnQ7dmFyIF8yYTY9W107dmFyIF8yYTc9e307Zm9yKHZhciBuYW1lIGluIG1hcCl7dmFyIF8yYTg9
bWFwW25hbWVdO2lmKF8yYTghPV8yYTdbbmFtZV0pe3ZhciBfMmE5PWVuYyhuYW1lKSsiPSI7aWYo
XzI5ZS5pc0FycmF5KF8yYTgpKXtmb3IodmFyIGk9MDtpPF8yYTgubGVuZ3RoO2krKyl7XzJhNi5w
dXNoKF8yYTkrZW5jKF8yYThbaV0pKTt9fWVsc2V7XzJhNi5wdXNoKF8yYTkrZW5jKF8yYTgpKTt9
fX1yZXR1cm4gXzJhNi5qb2luKCImIik7fTtkb2pvLmZvcm1Ub1F1ZXJ5PWZ1bmN0aW9uKF8yYWEp
e3JldHVybiBfMjllLm9iamVjdFRvUXVlcnkoXzI5ZS5mb3JtVG9PYmplY3QoXzJhYSkpO307ZG9q
by5mb3JtVG9Kc29uPWZ1bmN0aW9uKF8yYWIsXzJhYyl7cmV0dXJuIF8yOWUudG9Kc29uKF8yOWUu
Zm9ybVRvT2JqZWN0KF8yYWIpLF8yYWMpO307ZG9qby5xdWVyeVRvT2JqZWN0PWZ1bmN0aW9uKHN0
cil7dmFyIHJldD17fTt2YXIgcXA9c3RyLnNwbGl0KCImIik7dmFyIGRlYz1kZWNvZGVVUklDb21w
b25lbnQ7XzI5ZS5mb3JFYWNoKHFwLGZ1bmN0aW9uKGl0ZW0pe2lmKGl0ZW0ubGVuZ3RoKXt2YXIg
XzJhZD1pdGVtLnNwbGl0KCI9Iik7dmFyIG5hbWU9ZGVjKF8yYWQuc2hpZnQoKSk7dmFyIHZhbD1k
ZWMoXzJhZC5qb2luKCI9IikpO2lmKHR5cGVvZiByZXRbbmFtZV09PSJzdHJpbmciKXtyZXRbbmFt
ZV09W3JldFtuYW1lXV07fWlmKF8yOWUuaXNBcnJheShyZXRbbmFtZV0pKXtyZXRbbmFtZV0ucHVz
aCh2YWwpO31lbHNle3JldFtuYW1lXT12YWw7fX19KTtyZXR1cm4gcmV0O307ZG9qby5fYmxvY2tB
c3luYz1mYWxzZTt2YXIgXzJhZT1fMjllLl9jb250ZW50SGFuZGxlcnM9ZG9qby5jb250ZW50SGFu
ZGxlcnM9e3RleHQ6ZnVuY3Rpb24oeGhyKXtyZXR1cm4geGhyLnJlc3BvbnNlVGV4dDt9LGpzb246
ZnVuY3Rpb24oeGhyKXtyZXR1cm4gXzI5ZS5mcm9tSnNvbih4aHIucmVzcG9uc2VUZXh0fHxudWxs
KTt9LCJqc29uLWNvbW1lbnQtZmlsdGVyZWQiOmZ1bmN0aW9uKHhocil7aWYoIWRvam8uY29uZmln
LnVzZUNvbW1lbnRlZEpzb24pe2NvbnNvbGUud2FybigiQ29uc2lkZXIgdXNpbmcgdGhlIHN0YW5k
YXJkIG1pbWV0eXBlOmFwcGxpY2F0aW9uL2pzb24uIisiIGpzb24tY29tbWVudGluZyBjYW4gaW50
cm9kdWNlIHNlY3VyaXR5IGlzc3Vlcy4gVG8iKyIgZGVjcmVhc2UgdGhlIGNoYW5jZXMgb2YgaGlq
YWNraW5nLCB1c2UgdGhlIHN0YW5kYXJkIHRoZSAnanNvbicgaGFuZGxlciBhbmQiKyIgcHJlZml4
IHlvdXIganNvbiB3aXRoOiB7fSYmXG4iKyJVc2UgZGpDb25maWcudXNlQ29tbWVudGVkSnNvbj10
cnVlIHRvIHR1cm4gb2ZmIHRoaXMgbWVzc2FnZS4iKTt9dmFyIF8yYWY9eGhyLnJlc3BvbnNlVGV4
dDt2YXIgXzJiMD1fMmFmLmluZGV4T2YoIi8qIik7dmFyIF8yYjE9XzJhZi5sYXN0SW5kZXhPZigi
Ki8iKTtpZihfMmIwPT0tMXx8XzJiMT09LTEpe3Rocm93IG5ldyBFcnJvcigiSlNPTiB3YXMgbm90
IGNvbW1lbnQgZmlsdGVyZWQiKTt9cmV0dXJuIF8yOWUuZnJvbUpzb24oXzJhZi5zdWJzdHJpbmco
XzJiMCsyLF8yYjEpKTt9LGphdmFzY3JpcHQ6ZnVuY3Rpb24oeGhyKXtyZXR1cm4gXzI5ZS5ldmFs
KHhoci5yZXNwb25zZVRleHQpO30seG1sOmZ1bmN0aW9uKHhocil7dmFyIF8yYjI9eGhyLnJlc3Bv
bnNlWE1MO2lmKF8yOWUuaXNJRSYmKCFfMmIyfHwhXzJiMi5kb2N1bWVudEVsZW1lbnQpKXt2YXIg
bXM9ZnVuY3Rpb24obil7cmV0dXJuICJNU1hNTCIrbisiLkRPTURvY3VtZW50Ijt9O3ZhciBkcD1b
Ik1pY3Jvc29mdC5YTUxET00iLG1zKDYpLG1zKDQpLG1zKDMpLG1zKDIpXTtfMjllLnNvbWUoZHAs
ZnVuY3Rpb24ocCl7dHJ5e3ZhciBkb209bmV3IEFjdGl2ZVhPYmplY3QocCk7ZG9tLmFzeW5jPWZh
bHNlO2RvbS5sb2FkWE1MKHhoci5yZXNwb25zZVRleHQpO18yYjI9ZG9tO31jYXRjaChlKXtyZXR1
cm4gZmFsc2U7fXJldHVybiB0cnVlO30pO31yZXR1cm4gXzJiMjt9LCJqc29uLWNvbW1lbnQtb3B0
aW9uYWwiOmZ1bmN0aW9uKHhocil7aWYoeGhyLnJlc3BvbnNlVGV4dCYmL15bXntcW10qXC9cKi8u
dGVzdCh4aHIucmVzcG9uc2VUZXh0KSl7cmV0dXJuIF8yYWVbImpzb24tY29tbWVudC1maWx0ZXJl
ZCJdKHhocik7fWVsc2V7cmV0dXJuIF8yYWVbImpzb24iXSh4aHIpO319fTtkb2pvLl9pb1NldEFy
Z3M9ZnVuY3Rpb24oYXJncyxfMmIzLF8yYjQsXzJiNSl7dmFyIF8yYjY9e2FyZ3M6YXJncyx1cmw6
YXJncy51cmx9O3ZhciBfMmI3PW51bGw7aWYoYXJncy5mb3JtKXt2YXIgZm9ybT1fMjllLmJ5SWQo
YXJncy5mb3JtKTt2YXIgXzJiOD1mb3JtLmdldEF0dHJpYnV0ZU5vZGUoImFjdGlvbiIpO18yYjYu
dXJsPV8yYjYudXJsfHwoXzJiOD9fMmI4LnZhbHVlOm51bGwpO18yYjc9XzI5ZS5mb3JtVG9PYmpl
Y3QoZm9ybSk7fXZhciBfMmI5PVt7fV07aWYoXzJiNyl7XzJiOS5wdXNoKF8yYjcpO31pZihhcmdz
LmNvbnRlbnQpe18yYjkucHVzaChhcmdzLmNvbnRlbnQpO31pZihhcmdzLnByZXZlbnRDYWNoZSl7
XzJiOS5wdXNoKHsiZG9qby5wcmV2ZW50Q2FjaGUiOm5ldyBEYXRlKCkudmFsdWVPZigpfSk7fV8y
YjYucXVlcnk9XzI5ZS5vYmplY3RUb1F1ZXJ5KF8yOWUubWl4aW4uYXBwbHkobnVsbCxfMmI5KSk7
XzJiNi5oYW5kbGVBcz1hcmdzLmhhbmRsZUFzfHwidGV4dCI7dmFyIGQ9bmV3IF8yOWUuRGVmZXJy
ZWQoXzJiMyk7ZC5hZGRDYWxsYmFja3MoXzJiNCxmdW5jdGlvbihfMmJhKXtyZXR1cm4gXzJiNShf
MmJhLGQpO30pO3ZhciBsZD1hcmdzLmxvYWQ7aWYobGQmJl8yOWUuaXNGdW5jdGlvbihsZCkpe2Qu
YWRkQ2FsbGJhY2soZnVuY3Rpb24oXzJiYil7cmV0dXJuIGxkLmNhbGwoYXJncyxfMmJiLF8yYjYp
O30pO312YXIgZXJyPWFyZ3MuZXJyb3I7aWYoZXJyJiZfMjllLmlzRnVuY3Rpb24oZXJyKSl7ZC5h
ZGRFcnJiYWNrKGZ1bmN0aW9uKF8yYmMpe3JldHVybiBlcnIuY2FsbChhcmdzLF8yYmMsXzJiNik7
fSk7fXZhciBfMmJkPWFyZ3MuaGFuZGxlO2lmKF8yYmQmJl8yOWUuaXNGdW5jdGlvbihfMmJkKSl7
ZC5hZGRCb3RoKGZ1bmN0aW9uKF8yYmUpe3JldHVybiBfMmJkLmNhbGwoYXJncyxfMmJlLF8yYjYp
O30pO31pZihjZmcuaW9QdWJsaXNoJiZfMjllLnB1Ymxpc2gmJl8yYjYuYXJncy5pb1B1Ymxpc2gh
PT1mYWxzZSl7ZC5hZGRDYWxsYmFja3MoZnVuY3Rpb24ocmVzKXtfMjllLnB1Ymxpc2goIi9kb2pv
L2lvL2xvYWQiLFtkLHJlc10pO3JldHVybiByZXM7fSxmdW5jdGlvbihyZXMpe18yOWUucHVibGlz
aCgiL2Rvam8vaW8vZXJyb3IiLFtkLHJlc10pO3JldHVybiByZXM7fSk7ZC5hZGRCb3RoKGZ1bmN0
aW9uKHJlcyl7XzI5ZS5wdWJsaXNoKCIvZG9qby9pby9kb25lIixbZCxyZXNdKTtyZXR1cm4gcmVz
O30pO31kLmlvQXJncz1fMmI2O3JldHVybiBkO307dmFyIF8yYmY9ZnVuY3Rpb24oZGZkKXtkZmQu
Y2FuY2VsZWQ9dHJ1ZTt2YXIgeGhyPWRmZC5pb0FyZ3MueGhyO3ZhciBfMmMwPXR5cGVvZiB4aHIu
YWJvcnQ7aWYoXzJjMD09ImZ1bmN0aW9uInx8XzJjMD09Im9iamVjdCJ8fF8yYzA9PSJ1bmtub3du
Iil7eGhyLmFib3J0KCk7fXZhciBlcnI9ZGZkLmlvQXJncy5lcnJvcjtpZighZXJyKXtlcnI9bmV3
IEVycm9yKCJ4aHIgY2FuY2VsbGVkIik7ZXJyLmRvam9UeXBlPSJjYW5jZWwiO31yZXR1cm4gZXJy
O307dmFyIF8yYzE9ZnVuY3Rpb24oZGZkKXt2YXIgcmV0PV8yYWVbZGZkLmlvQXJncy5oYW5kbGVB
c10oZGZkLmlvQXJncy54aHIpO3JldHVybiByZXQ9PT11bmRlZmluZWQ/bnVsbDpyZXQ7fTt2YXIg
XzJjMj1mdW5jdGlvbihfMmMzLGRmZCl7aWYoIWRmZC5pb0FyZ3MuYXJncy5mYWlsT2spe2NvbnNv
bGUuZXJyb3IoXzJjMyk7fXJldHVybiBfMmMzO307dmFyIF8yYzQ9bnVsbDt2YXIgXzJjNT1bXTt2
YXIgXzJjNj0wO3ZhciBfMmM3PWZ1bmN0aW9uKGRmZCl7aWYoXzJjNjw9MCl7XzJjNj0wO2lmKGNm
Zy5pb1B1Ymxpc2gmJl8yOWUucHVibGlzaCYmKCFkZmR8fGRmZCYmZGZkLmlvQXJncy5hcmdzLmlv
UHVibGlzaCE9PWZhbHNlKSl7XzI5ZS5wdWJsaXNoKCIvZG9qby9pby9zdG9wIik7fX19O3ZhciBf
MmM4PWZ1bmN0aW9uKCl7dmFyIG5vdz0obmV3IERhdGUoKSkuZ2V0VGltZSgpO2lmKCFfMjllLl9i
bG9ja0FzeW5jKXtmb3IodmFyIGk9MCx0aWY7aTxfMmM1Lmxlbmd0aCYmKHRpZj1fMmM1W2ldKTtp
Kyspe3ZhciBkZmQ9dGlmLmRmZDt2YXIgZnVuYz1mdW5jdGlvbigpe2lmKCFkZmR8fGRmZC5jYW5j
ZWxlZHx8IXRpZi52YWxpZENoZWNrKGRmZCkpe18yYzUuc3BsaWNlKGktLSwxKTtfMmM2LT0xO31l
bHNle2lmKHRpZi5pb0NoZWNrKGRmZCkpe18yYzUuc3BsaWNlKGktLSwxKTt0aWYucmVzSGFuZGxl
KGRmZCk7XzJjNi09MTt9ZWxzZXtpZihkZmQuc3RhcnRUaW1lKXtpZihkZmQuc3RhcnRUaW1lKyhk
ZmQuaW9BcmdzLmFyZ3MudGltZW91dHx8MCk8bm93KXtfMmM1LnNwbGljZShpLS0sMSk7dmFyIGVy
cj1uZXcgRXJyb3IoInRpbWVvdXQgZXhjZWVkZWQiKTtlcnIuZG9qb1R5cGU9InRpbWVvdXQiO2Rm
ZC5lcnJiYWNrKGVycik7ZGZkLmNhbmNlbCgpO18yYzYtPTE7fX19fX07aWYoZG9qby5jb25maWcu
ZGVidWdBdEFsbENvc3RzKXtmdW5jLmNhbGwodGhpcyk7fWVsc2V7dHJ5e2Z1bmMuY2FsbCh0aGlz
KTt9Y2F0Y2goZSl7ZGZkLmVycmJhY2soZSk7fX19fV8yYzcoZGZkKTtpZighXzJjNS5sZW5ndGgp
e2NsZWFySW50ZXJ2YWwoXzJjNCk7XzJjND1udWxsO3JldHVybjt9fTtkb2pvLl9pb0NhbmNlbEFs
bD1mdW5jdGlvbigpe3RyeXtfMjllLmZvckVhY2goXzJjNSxmdW5jdGlvbihpKXt0cnl7aS5kZmQu
Y2FuY2VsKCk7fWNhdGNoKGUpe319KTt9Y2F0Y2goZSl7fX07aWYoXzI5ZS5pc0lFKXtfMjllLmFk
ZE9uV2luZG93VW5sb2FkKF8yOWUuX2lvQ2FuY2VsQWxsKTt9XzI5ZS5faW9Ob3RpZnlTdGFydD1m
dW5jdGlvbihkZmQpe2lmKGNmZy5pb1B1Ymxpc2gmJl8yOWUucHVibGlzaCYmZGZkLmlvQXJncy5h
cmdzLmlvUHVibGlzaCE9PWZhbHNlKXtpZighXzJjNil7XzI5ZS5wdWJsaXNoKCIvZG9qby9pby9z
dGFydCIpO31fMmM2Kz0xO18yOWUucHVibGlzaCgiL2Rvam8vaW8vc2VuZCIsW2RmZF0pO319O18y
OWUuX2lvV2F0Y2g9ZnVuY3Rpb24oZGZkLF8yYzksXzJjYSxfMmNiKXt2YXIgYXJncz1kZmQuaW9B
cmdzLmFyZ3M7aWYoYXJncy50aW1lb3V0KXtkZmQuc3RhcnRUaW1lPShuZXcgRGF0ZSgpKS5nZXRU
aW1lKCk7fV8yYzUucHVzaCh7ZGZkOmRmZCx2YWxpZENoZWNrOl8yYzksaW9DaGVjazpfMmNhLHJl
c0hhbmRsZTpfMmNifSk7aWYoIV8yYzQpe18yYzQ9c2V0SW50ZXJ2YWwoXzJjOCw1MCk7fWlmKGFy
Z3Muc3luYyl7XzJjOCgpO319O3ZhciBfMmNjPSJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVu
Y29kZWQiO3ZhciBfMmNkPWZ1bmN0aW9uKGRmZCl7cmV0dXJuIGRmZC5pb0FyZ3MueGhyLnJlYWR5
U3RhdGU7fTt2YXIgXzJjZT1mdW5jdGlvbihkZmQpe3JldHVybiA0PT1kZmQuaW9BcmdzLnhoci5y
ZWFkeVN0YXRlO307dmFyIF8yY2Y9ZnVuY3Rpb24oZGZkKXt2YXIgeGhyPWRmZC5pb0FyZ3MueGhy
O2lmKF8yOWUuX2lzRG9jdW1lbnRPayh4aHIpKXtkZmQuY2FsbGJhY2soZGZkKTt9ZWxzZXt2YXIg
ZXJyPW5ldyBFcnJvcigiVW5hYmxlIHRvIGxvYWQgIitkZmQuaW9BcmdzLnVybCsiIHN0YXR1czoi
K3hoci5zdGF0dXMpO2Vyci5zdGF0dXM9eGhyLnN0YXR1cztlcnIucmVzcG9uc2VUZXh0PXhoci5y
ZXNwb25zZVRleHQ7ZGZkLmVycmJhY2soZXJyKTt9fTtkb2pvLl9pb0FkZFF1ZXJ5VG9Vcmw9ZnVu
Y3Rpb24oXzJkMCl7aWYoXzJkMC5xdWVyeS5sZW5ndGgpe18yZDAudXJsKz0oXzJkMC51cmwuaW5k
ZXhPZigiPyIpPT0tMT8iPyI6IiYiKStfMmQwLnF1ZXJ5O18yZDAucXVlcnk9bnVsbDt9fTtkb2pv
Lnhocj1mdW5jdGlvbihfMmQxLGFyZ3MsXzJkMil7dmFyIGRmZD1fMjllLl9pb1NldEFyZ3MoYXJn
cyxfMmJmLF8yYzEsXzJjMik7dmFyIF8yZDM9ZGZkLmlvQXJnczt2YXIgeGhyPV8yZDMueGhyPV8y
OWUuX3hock9iaihfMmQzLmFyZ3MpO2lmKCF4aHIpe2RmZC5jYW5jZWwoKTtyZXR1cm4gZGZkO31p
ZigicG9zdERhdGEiIGluIGFyZ3Mpe18yZDMucXVlcnk9YXJncy5wb3N0RGF0YTt9ZWxzZXtpZigi
cHV0RGF0YSIgaW4gYXJncyl7XzJkMy5xdWVyeT1hcmdzLnB1dERhdGE7fWVsc2V7aWYoInJhd0Jv
ZHkiIGluIGFyZ3Mpe18yZDMucXVlcnk9YXJncy5yYXdCb2R5O31lbHNle2lmKChhcmd1bWVudHMu
bGVuZ3RoPjImJiFfMmQyKXx8IlBPU1R8UFVUIi5pbmRleE9mKF8yZDEudG9VcHBlckNhc2UoKSk9
PS0xKXtfMjllLl9pb0FkZFF1ZXJ5VG9VcmwoXzJkMyk7fX19fXhoci5vcGVuKF8yZDEsXzJkMy51
cmwsYXJncy5zeW5jIT09dHJ1ZSxhcmdzLnVzZXJ8fHVuZGVmaW5lZCxhcmdzLnBhc3N3b3JkfHx1
bmRlZmluZWQpO2lmKGFyZ3MuaGVhZGVycyl7Zm9yKHZhciBoZHIgaW4gYXJncy5oZWFkZXJzKXtp
ZihoZHIudG9Mb3dlckNhc2UoKT09PSJjb250ZW50LXR5cGUiJiYhYXJncy5jb250ZW50VHlwZSl7
YXJncy5jb250ZW50VHlwZT1hcmdzLmhlYWRlcnNbaGRyXTt9ZWxzZXtpZihhcmdzLmhlYWRlcnNb
aGRyXSl7eGhyLnNldFJlcXVlc3RIZWFkZXIoaGRyLGFyZ3MuaGVhZGVyc1toZHJdKTt9fX19eGhy
LnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtVHlwZSIsYXJncy5jb250ZW50VHlwZXx8XzJjYyk7
aWYoIWFyZ3MuaGVhZGVyc3x8ISgiWC1SZXF1ZXN0ZWQtV2l0aCIgaW4gYXJncy5oZWFkZXJzKSl7
eGhyLnNldFJlcXVlc3RIZWFkZXIoIlgtUmVxdWVzdGVkLVdpdGgiLCJYTUxIdHRwUmVxdWVzdCIp
O31fMjllLl9pb05vdGlmeVN0YXJ0KGRmZCk7aWYoZG9qby5jb25maWcuZGVidWdBdEFsbENvc3Rz
KXt4aHIuc2VuZChfMmQzLnF1ZXJ5KTt9ZWxzZXt0cnl7eGhyLnNlbmQoXzJkMy5xdWVyeSk7fWNh
dGNoKGUpe18yZDMuZXJyb3I9ZTtkZmQuY2FuY2VsKCk7fX1fMjllLl9pb1dhdGNoKGRmZCxfMmNk
LF8yY2UsXzJjZik7eGhyPW51bGw7cmV0dXJuIGRmZDt9O2Rvam8ueGhyR2V0PWZ1bmN0aW9uKGFy
Z3Mpe3JldHVybiBfMjllLnhocigiR0VUIixhcmdzKTt9O2Rvam8ucmF3WGhyUG9zdD1kb2pvLnho
clBvc3Q9ZnVuY3Rpb24oYXJncyl7cmV0dXJuIF8yOWUueGhyKCJQT1NUIixhcmdzLHRydWUpO307
ZG9qby5yYXdYaHJQdXQ9ZG9qby54aHJQdXQ9ZnVuY3Rpb24oYXJncyl7cmV0dXJuIF8yOWUueGhy
KCJQVVQiLGFyZ3MsdHJ1ZSk7fTtkb2pvLnhockRlbGV0ZT1mdW5jdGlvbihhcmdzKXtyZXR1cm4g
XzI5ZS54aHIoIkRFTEVURSIsYXJncyk7fTt9KSgpO31pZighZG9qby5faGFzUmVzb3VyY2VbImRv
am8uX2Jhc2UuZngiXSl7ZG9qby5faGFzUmVzb3VyY2VbImRvam8uX2Jhc2UuZngiXT10cnVlO2Rv
am8ucHJvdmlkZSgiZG9qby5fYmFzZS5meCIpOyhmdW5jdGlvbigpe3ZhciBkPWRvam87dmFyIF8y
ZDQ9ZC5fbWl4aW47ZG9qby5fTGluZT1mdW5jdGlvbihfMmQ1LGVuZCl7dGhpcy5zdGFydD1fMmQ1
O3RoaXMuZW5kPWVuZDt9O2Rvam8uX0xpbmUucHJvdG90eXBlLmdldFZhbHVlPWZ1bmN0aW9uKG4p
e3JldHVybiAoKHRoaXMuZW5kLXRoaXMuc3RhcnQpKm4pK3RoaXMuc3RhcnQ7fTtkb2pvLkFuaW1h
dGlvbj1mdW5jdGlvbihhcmdzKXtfMmQ0KHRoaXMsYXJncyk7aWYoZC5pc0FycmF5KHRoaXMuY3Vy
dmUpKXt0aGlzLmN1cnZlPW5ldyBkLl9MaW5lKHRoaXMuY3VydmVbMF0sdGhpcy5jdXJ2ZVsxXSk7
fX07ZC5fQW5pbWF0aW9uPWQuQW5pbWF0aW9uO2QuZXh0ZW5kKGRvam8uQW5pbWF0aW9uLHtkdXJh
dGlvbjozNTAscmVwZWF0OjAscmF0ZToyMCxfcGVyY2VudDowLF9zdGFydFJlcGVhdENvdW50OjAs
X2dldFN0ZXA6ZnVuY3Rpb24oKXt2YXIgXzJkNj10aGlzLl9wZXJjZW50LF8yZDc9dGhpcy5lYXNp
bmc7cmV0dXJuIF8yZDc/XzJkNyhfMmQ2KTpfMmQ2O30sX2ZpcmU6ZnVuY3Rpb24oZXZ0LGFyZ3Mp
e3ZhciBhPWFyZ3N8fFtdO2lmKHRoaXNbZXZ0XSl7aWYoZC5jb25maWcuZGVidWdBdEFsbENvc3Rz
KXt0aGlzW2V2dF0uYXBwbHkodGhpcyxhKTt9ZWxzZXt0cnl7dGhpc1tldnRdLmFwcGx5KHRoaXMs
YSk7fWNhdGNoKGUpe2NvbnNvbGUuZXJyb3IoImV4Y2VwdGlvbiBpbiBhbmltYXRpb24gaGFuZGxl
ciBmb3I6IixldnQpO2NvbnNvbGUuZXJyb3IoZSk7fX19cmV0dXJuIHRoaXM7fSxwbGF5OmZ1bmN0
aW9uKF8yZDgsXzJkOSl7dmFyIF8yZGE9dGhpcztpZihfMmRhLl9kZWxheVRpbWVyKXtfMmRhLl9j
bGVhclRpbWVyKCk7fWlmKF8yZDkpe18yZGEuX3N0b3BUaW1lcigpO18yZGEuX2FjdGl2ZT1fMmRh
Ll9wYXVzZWQ9ZmFsc2U7XzJkYS5fcGVyY2VudD0wO31lbHNle2lmKF8yZGEuX2FjdGl2ZSYmIV8y
ZGEuX3BhdXNlZCl7cmV0dXJuIF8yZGE7fX1fMmRhLl9maXJlKCJiZWZvcmVCZWdpbiIsW18yZGEu
bm9kZV0pO3ZhciBkZT1fMmQ4fHxfMmRhLmRlbGF5LF8yZGI9ZG9qby5oaXRjaChfMmRhLCJfcGxh
eSIsXzJkOSk7aWYoZGU+MCl7XzJkYS5fZGVsYXlUaW1lcj1zZXRUaW1lb3V0KF8yZGIsZGUpO3Jl
dHVybiBfMmRhO31fMmRiKCk7cmV0dXJuIF8yZGE7fSxfcGxheTpmdW5jdGlvbihfMmRjKXt2YXIg
XzJkZD10aGlzO2lmKF8yZGQuX2RlbGF5VGltZXIpe18yZGQuX2NsZWFyVGltZXIoKTt9XzJkZC5f
c3RhcnRUaW1lPW5ldyBEYXRlKCkudmFsdWVPZigpO2lmKF8yZGQuX3BhdXNlZCl7XzJkZC5fc3Rh
cnRUaW1lLT1fMmRkLmR1cmF0aW9uKl8yZGQuX3BlcmNlbnQ7fV8yZGQuX2FjdGl2ZT10cnVlO18y
ZGQuX3BhdXNlZD1mYWxzZTt2YXIgXzJkZT1fMmRkLmN1cnZlLmdldFZhbHVlKF8yZGQuX2dldFN0
ZXAoKSk7aWYoIV8yZGQuX3BlcmNlbnQpe2lmKCFfMmRkLl9zdGFydFJlcGVhdENvdW50KXtfMmRk
Ll9zdGFydFJlcGVhdENvdW50PV8yZGQucmVwZWF0O31fMmRkLl9maXJlKCJvbkJlZ2luIixbXzJk
ZV0pO31fMmRkLl9maXJlKCJvblBsYXkiLFtfMmRlXSk7XzJkZC5fY3ljbGUoKTtyZXR1cm4gXzJk
ZDt9LHBhdXNlOmZ1bmN0aW9uKCl7dmFyIF8yZGY9dGhpcztpZihfMmRmLl9kZWxheVRpbWVyKXtf
MmRmLl9jbGVhclRpbWVyKCk7fV8yZGYuX3N0b3BUaW1lcigpO2lmKCFfMmRmLl9hY3RpdmUpe3Jl
dHVybiBfMmRmO31fMmRmLl9wYXVzZWQ9dHJ1ZTtfMmRmLl9maXJlKCJvblBhdXNlIixbXzJkZi5j
dXJ2ZS5nZXRWYWx1ZShfMmRmLl9nZXRTdGVwKCkpXSk7cmV0dXJuIF8yZGY7fSxnb3RvUGVyY2Vu
dDpmdW5jdGlvbihfMmUwLF8yZTEpe3ZhciBfMmUyPXRoaXM7XzJlMi5fc3RvcFRpbWVyKCk7XzJl
Mi5fYWN0aXZlPV8yZTIuX3BhdXNlZD10cnVlO18yZTIuX3BlcmNlbnQ9XzJlMDtpZihfMmUxKXtf
MmUyLnBsYXkoKTt9cmV0dXJuIF8yZTI7fSxzdG9wOmZ1bmN0aW9uKF8yZTMpe3ZhciBfMmU0PXRo
aXM7aWYoXzJlNC5fZGVsYXlUaW1lcil7XzJlNC5fY2xlYXJUaW1lcigpO31pZighXzJlNC5fdGlt
ZXIpe3JldHVybiBfMmU0O31fMmU0Ll9zdG9wVGltZXIoKTtpZihfMmUzKXtfMmU0Ll9wZXJjZW50
PTE7fV8yZTQuX2ZpcmUoIm9uU3RvcCIsW18yZTQuY3VydmUuZ2V0VmFsdWUoXzJlNC5fZ2V0U3Rl
cCgpKV0pO18yZTQuX2FjdGl2ZT1fMmU0Ll9wYXVzZWQ9ZmFsc2U7cmV0dXJuIF8yZTQ7fSxzdGF0
dXM6ZnVuY3Rpb24oKXtpZih0aGlzLl9hY3RpdmUpe3JldHVybiB0aGlzLl9wYXVzZWQ/InBhdXNl
ZCI6InBsYXlpbmciO31yZXR1cm4gInN0b3BwZWQiO30sX2N5Y2xlOmZ1bmN0aW9uKCl7dmFyIF8y
ZTU9dGhpcztpZihfMmU1Ll9hY3RpdmUpe3ZhciBjdXJyPW5ldyBEYXRlKCkudmFsdWVPZigpO3Zh
ciBzdGVwPShjdXJyLV8yZTUuX3N0YXJ0VGltZSkvKF8yZTUuZHVyYXRpb24pO2lmKHN0ZXA+PTEp
e3N0ZXA9MTt9XzJlNS5fcGVyY2VudD1zdGVwO2lmKF8yZTUuZWFzaW5nKXtzdGVwPV8yZTUuZWFz
aW5nKHN0ZXApO31fMmU1Ll9maXJlKCJvbkFuaW1hdGUiLFtfMmU1LmN1cnZlLmdldFZhbHVlKHN0
ZXApXSk7aWYoXzJlNS5fcGVyY2VudDwxKXtfMmU1Ll9zdGFydFRpbWVyKCk7fWVsc2V7XzJlNS5f
YWN0aXZlPWZhbHNlO2lmKF8yZTUucmVwZWF0PjApe18yZTUucmVwZWF0LS07XzJlNS5wbGF5KG51
bGwsdHJ1ZSk7fWVsc2V7aWYoXzJlNS5yZXBlYXQ9PS0xKXtfMmU1LnBsYXkobnVsbCx0cnVlKTt9
ZWxzZXtpZihfMmU1Ll9zdGFydFJlcGVhdENvdW50KXtfMmU1LnJlcGVhdD1fMmU1Ll9zdGFydFJl
cGVhdENvdW50O18yZTUuX3N0YXJ0UmVwZWF0Q291bnQ9MDt9fX1fMmU1Ll9wZXJjZW50PTA7XzJl
NS5fZmlyZSgib25FbmQiLFtfMmU1Lm5vZGVdKTshXzJlNS5yZXBlYXQmJl8yZTUuX3N0b3BUaW1l
cigpO319cmV0dXJuIF8yZTU7fSxfY2xlYXJUaW1lcjpmdW5jdGlvbigpe2NsZWFyVGltZW91dCh0
aGlzLl9kZWxheVRpbWVyKTtkZWxldGUgdGhpcy5fZGVsYXlUaW1lcjt9fSk7dmFyIGN0cj0wLF8y
ZTY9bnVsbCxfMmU3PXtydW46ZnVuY3Rpb24oKXt9fTtkLmV4dGVuZChkLkFuaW1hdGlvbix7X3N0
YXJ0VGltZXI6ZnVuY3Rpb24oKXtpZighdGhpcy5fdGltZXIpe3RoaXMuX3RpbWVyPWQuY29ubmVj
dChfMmU3LCJydW4iLHRoaXMsIl9jeWNsZSIpO2N0cisrO31pZighXzJlNil7XzJlNj1zZXRJbnRl
cnZhbChkLmhpdGNoKF8yZTcsInJ1biIpLHRoaXMucmF0ZSk7fX0sX3N0b3BUaW1lcjpmdW5jdGlv
bigpe2lmKHRoaXMuX3RpbWVyKXtkLmRpc2Nvbm5lY3QodGhpcy5fdGltZXIpO3RoaXMuX3RpbWVy
PW51bGw7Y3RyLS07fWlmKGN0cjw9MCl7Y2xlYXJJbnRlcnZhbChfMmU2KTtfMmU2PW51bGw7Y3Ry
PTA7fX19KTt2YXIgXzJlOD1kLmlzSUU/ZnVuY3Rpb24obm9kZSl7dmFyIG5zPW5vZGUuc3R5bGU7
aWYoIW5zLndpZHRoLmxlbmd0aCYmZC5zdHlsZShub2RlLCJ3aWR0aCIpPT0iYXV0byIpe25zLndp
ZHRoPSJhdXRvIjt9fTpmdW5jdGlvbigpe307ZG9qby5fZmFkZT1mdW5jdGlvbihhcmdzKXthcmdz
Lm5vZGU9ZC5ieUlkKGFyZ3Mubm9kZSk7dmFyIF8yZTk9XzJkNCh7cHJvcGVydGllczp7fX0sYXJn
cyksXzJlYT0oXzJlOS5wcm9wZXJ0aWVzLm9wYWNpdHk9e30pO18yZWEuc3RhcnQ9ISgic3RhcnQi
IGluIF8yZTkpP2Z1bmN0aW9uKCl7cmV0dXJuICtkLnN0eWxlKF8yZTkubm9kZSwib3BhY2l0eSIp
fHwwO306XzJlOS5zdGFydDtfMmVhLmVuZD1fMmU5LmVuZDt2YXIgYW5pbT1kLmFuaW1hdGVQcm9w
ZXJ0eShfMmU5KTtkLmNvbm5lY3QoYW5pbSwiYmVmb3JlQmVnaW4iLGQucGFydGlhbChfMmU4LF8y
ZTkubm9kZSkpO3JldHVybiBhbmltO307ZG9qby5mYWRlSW49ZnVuY3Rpb24oYXJncyl7cmV0dXJu
IGQuX2ZhZGUoXzJkNCh7ZW5kOjF9LGFyZ3MpKTt9O2Rvam8uZmFkZU91dD1mdW5jdGlvbihhcmdz
KXtyZXR1cm4gZC5fZmFkZShfMmQ0KHtlbmQ6MH0sYXJncykpO307ZG9qby5fZGVmYXVsdEVhc2lu
Zz1mdW5jdGlvbihuKXtyZXR1cm4gMC41KygoTWF0aC5zaW4oKG4rMS41KSpNYXRoLlBJKSkvMik7
fTt2YXIgXzJlYj1mdW5jdGlvbihfMmVjKXt0aGlzLl9wcm9wZXJ0aWVzPV8yZWM7Zm9yKHZhciBw
IGluIF8yZWMpe3ZhciBwcm9wPV8yZWNbcF07aWYocHJvcC5zdGFydCBpbnN0YW5jZW9mIGQuQ29s
b3Ipe3Byb3AudGVtcENvbG9yPW5ldyBkLkNvbG9yKCk7fX19O18yZWIucHJvdG90eXBlLmdldFZh
bHVlPWZ1bmN0aW9uKHIpe3ZhciByZXQ9e307Zm9yKHZhciBwIGluIHRoaXMuX3Byb3BlcnRpZXMp
e3ZhciBwcm9wPXRoaXMuX3Byb3BlcnRpZXNbcF0sXzJlZD1wcm9wLnN0YXJ0O2lmKF8yZWQgaW5z
dGFuY2VvZiBkLkNvbG9yKXtyZXRbcF09ZC5ibGVuZENvbG9ycyhfMmVkLHByb3AuZW5kLHIscHJv
cC50ZW1wQ29sb3IpLnRvQ3NzKCk7fWVsc2V7aWYoIWQuaXNBcnJheShfMmVkKSl7cmV0W3BdPSgo
cHJvcC5lbmQtXzJlZCkqcikrXzJlZCsocCE9Im9wYWNpdHkiP3Byb3AudW5pdHN8fCJweCI6MCk7
fX19cmV0dXJuIHJldDt9O2Rvam8uYW5pbWF0ZVByb3BlcnR5PWZ1bmN0aW9uKGFyZ3Mpe3ZhciBu
PWFyZ3Mubm9kZT1kLmJ5SWQoYXJncy5ub2RlKTtpZighYXJncy5lYXNpbmcpe2FyZ3MuZWFzaW5n
PWQuX2RlZmF1bHRFYXNpbmc7fXZhciBhbmltPW5ldyBkLkFuaW1hdGlvbihhcmdzKTtkLmNvbm5l
Y3QoYW5pbSwiYmVmb3JlQmVnaW4iLGFuaW0sZnVuY3Rpb24oKXt2YXIgcG09e307Zm9yKHZhciBw
IGluIHRoaXMucHJvcGVydGllcyl7aWYocD09IndpZHRoInx8cD09ImhlaWdodCIpe3RoaXMubm9k
ZS5kaXNwbGF5PSJibG9jayI7fXZhciBwcm9wPXRoaXMucHJvcGVydGllc1twXTtpZihkLmlzRnVu
Y3Rpb24ocHJvcCkpe3Byb3A9cHJvcChuKTt9cHJvcD1wbVtwXT1fMmQ0KHt9LChkLmlzT2JqZWN0
KHByb3ApP3Byb3A6e2VuZDpwcm9wfSkpO2lmKGQuaXNGdW5jdGlvbihwcm9wLnN0YXJ0KSl7cHJv
cC5zdGFydD1wcm9wLnN0YXJ0KG4pO31pZihkLmlzRnVuY3Rpb24ocHJvcC5lbmQpKXtwcm9wLmVu
ZD1wcm9wLmVuZChuKTt9dmFyIF8yZWU9KHAudG9Mb3dlckNhc2UoKS5pbmRleE9mKCJjb2xvciIp
Pj0wKTtmdW5jdGlvbiBfMmVmKG5vZGUscCl7dmFyIHY9e2hlaWdodDpub2RlLm9mZnNldEhlaWdo
dCx3aWR0aDpub2RlLm9mZnNldFdpZHRofVtwXTtpZih2IT09dW5kZWZpbmVkKXtyZXR1cm4gdjt9
dj1kLnN0eWxlKG5vZGUscCk7cmV0dXJuIChwPT0ib3BhY2l0eSIpPyt2OihfMmVlP3Y6cGFyc2VG
bG9hdCh2KSk7fTtpZighKCJlbmQiIGluIHByb3ApKXtwcm9wLmVuZD1fMmVmKG4scCk7fWVsc2V7
aWYoISgic3RhcnQiIGluIHByb3ApKXtwcm9wLnN0YXJ0PV8yZWYobixwKTt9fWlmKF8yZWUpe3By
b3Auc3RhcnQ9bmV3IGQuQ29sb3IocHJvcC5zdGFydCk7cHJvcC5lbmQ9bmV3IGQuQ29sb3IocHJv
cC5lbmQpO31lbHNle3Byb3Auc3RhcnQ9KHA9PSJvcGFjaXR5Iik/K3Byb3Auc3RhcnQ6cGFyc2VG
bG9hdChwcm9wLnN0YXJ0KTt9fXRoaXMuY3VydmU9bmV3IF8yZWIocG0pO30pO2QuY29ubmVjdChh
bmltLCJvbkFuaW1hdGUiLGQuaGl0Y2goZCwic3R5bGUiLGFuaW0ubm9kZSkpO3JldHVybiBhbmlt
O307ZG9qby5hbmltPWZ1bmN0aW9uKG5vZGUsXzJmMCxfMmYxLF8yZjIsXzJmMyxfMmY0KXtyZXR1
cm4gZC5hbmltYXRlUHJvcGVydHkoe25vZGU6bm9kZSxkdXJhdGlvbjpfMmYxfHxkLkFuaW1hdGlv
bi5wcm90b3R5cGUuZHVyYXRpb24scHJvcGVydGllczpfMmYwLGVhc2luZzpfMmYyLG9uRW5kOl8y
ZjN9KS5wbGF5KF8yZjR8fDApO307fSkoKTt9aWYoIWRvam8uX2hhc1Jlc291cmNlWyJkb2pvLmkx
OG4iXSl7ZG9qby5faGFzUmVzb3VyY2VbImRvam8uaTE4biJdPXRydWU7ZG9qby5wcm92aWRlKCJk
b2pvLmkxOG4iKTtkb2pvLmdldE9iamVjdCgiaTE4biIsdHJ1ZSxkb2pvKTtkb2pvLmkxOG4uZ2V0
TG9jYWxpemF0aW9uPWRvam8uaTE4bi5nZXRMb2NhbGl6YXRpb258fGZ1bmN0aW9uKF8yZjUsXzJm
NixfMmY3KXtfMmY3PWRvam8uaTE4bi5ub3JtYWxpemVMb2NhbGUoXzJmNyk7dmFyIF8yZjg9XzJm
Ny5zcGxpdCgiLSIpO3ZhciBfMmY5PVtfMmY1LCJubHMiLF8yZjZdLmpvaW4oIi4iKTt2YXIgXzJm
YT1kb2pvLl9sb2FkZWRNb2R1bGVzW18yZjldO2lmKF8yZmEpe3ZhciBfMmZiO2Zvcih2YXIgaT1f
MmY4Lmxlbmd0aDtpPjA7aS0tKXt2YXIgbG9jPV8yZjguc2xpY2UoMCxpKS5qb2luKCJfIik7aWYo
XzJmYVtsb2NdKXtfMmZiPV8yZmFbbG9jXTticmVhazt9fWlmKCFfMmZiKXtfMmZiPV8yZmEuUk9P
VDt9aWYoXzJmYil7dmFyIF8yZmM9ZnVuY3Rpb24oKXt9O18yZmMucHJvdG90eXBlPV8yZmI7cmV0
dXJuIG5ldyBfMmZjKCk7fX10aHJvdyBuZXcgRXJyb3IoIkJ1bmRsZSBub3QgZm91bmQ6ICIrXzJm
NisiIGluICIrXzJmNSsiICwgbG9jYWxlPSIrXzJmNyk7fTtkb2pvLmkxOG4ubm9ybWFsaXplTG9j
YWxlPWZ1bmN0aW9uKF8yZmQpe3ZhciBfMmZlPV8yZmQ/XzJmZC50b0xvd2VyQ2FzZSgpOmRvam8u
bG9jYWxlO2lmKF8yZmU9PSJyb290Iil7XzJmZT0iUk9PVCI7fXJldHVybiBfMmZlO307ZG9qby5p
MThuLl9yZXF1aXJlTG9jYWxpemF0aW9uPWZ1bmN0aW9uKF8yZmYsXzMwMCxfMzAxLF8zMDIpe3Zh
ciBfMzAzPWRvam8uaTE4bi5ub3JtYWxpemVMb2NhbGUoXzMwMSk7dmFyIF8zMDQ9W18yZmYsIm5s
cyIsXzMwMF0uam9pbigiLiIpO3ZhciBfMzA1PSIiO2lmKF8zMDIpe3ZhciBfMzA2PV8zMDIuc3Bs
aXQoIiwiKTtmb3IodmFyIGk9MDtpPF8zMDYubGVuZ3RoO2krKyl7aWYoXzMwM1siaW5kZXhPZiJd
KF8zMDZbaV0pPT0wKXtpZihfMzA2W2ldLmxlbmd0aD5fMzA1Lmxlbmd0aCl7XzMwNT1fMzA2W2ld
O319fWlmKCFfMzA1KXtfMzA1PSJST09UIjt9fXZhciBfMzA3PV8zMDI/XzMwNTpfMzAzO3ZhciBf
MzA4PWRvam8uX2xvYWRlZE1vZHVsZXNbXzMwNF07dmFyIF8zMDk9bnVsbDtpZihfMzA4KXtpZihk
b2pvLmNvbmZpZy5sb2NhbGl6YXRpb25Db21wbGV0ZSYmXzMwOC5fYnVpbHQpe3JldHVybjt9dmFy
IF8zMGE9XzMwNy5yZXBsYWNlKC8tL2csIl8iKTt2YXIgXzMwYj1fMzA0KyIuIitfMzBhO18zMDk9
ZG9qby5fbG9hZGVkTW9kdWxlc1tfMzBiXTt9aWYoIV8zMDkpe18zMDg9ZG9qb1sicHJvdmlkZSJd
KF8zMDQpO3ZhciBzeW1zPWRvam8uX2dldE1vZHVsZVN5bWJvbHMoXzJmZik7dmFyIF8zMGM9c3lt
cy5jb25jYXQoIm5scyIpLmpvaW4oIi8iKTt2YXIgXzMwZDtkb2pvLmkxOG4uX3NlYXJjaExvY2Fs
ZVBhdGgoXzMwNyxfMzAyLGZ1bmN0aW9uKGxvYyl7dmFyIF8zMGU9bG9jLnJlcGxhY2UoLy0vZywi
XyIpO3ZhciBfMzBmPV8zMDQrIi4iK18zMGU7dmFyIF8zMTA9ZmFsc2U7aWYoIWRvam8uX2xvYWRl
ZE1vZHVsZXNbXzMwZl0pe2Rvam9bInByb3ZpZGUiXShfMzBmKTt2YXIgXzMxMT1bXzMwY107aWYo
bG9jIT0iUk9PVCIpe18zMTEucHVzaChsb2MpO31fMzExLnB1c2goXzMwMCk7dmFyIF8zMTI9XzMx
MS5qb2luKCIvIikrIi5qcyI7XzMxMD1kb2pvLl9sb2FkUGF0aChfMzEyLG51bGwsZnVuY3Rpb24o
aGFzaCl7aGFzaD1oYXNoLnJvb3R8fGhhc2g7dmFyIF8zMTM9ZnVuY3Rpb24oKXt9O18zMTMucHJv
dG90eXBlPV8zMGQ7XzMwOFtfMzBlXT1uZXcgXzMxMygpO2Zvcih2YXIgaiBpbiBoYXNoKXtfMzA4
W18zMGVdW2pdPWhhc2hbal07fX0pO31lbHNle18zMTA9dHJ1ZTt9aWYoXzMxMCYmXzMwOFtfMzBl
XSl7XzMwZD1fMzA4W18zMGVdO31lbHNle18zMDhbXzMwZV09XzMwZDt9aWYoXzMwMil7cmV0dXJu
IHRydWU7fX0pO31pZihfMzAyJiZfMzAzIT1fMzA1KXtfMzA4W18zMDMucmVwbGFjZSgvLS9nLCJf
IildPV8zMDhbXzMwNS5yZXBsYWNlKC8tL2csIl8iKV07fX07KGZ1bmN0aW9uKCl7dmFyIF8zMTQ9
ZG9qby5jb25maWcuZXh0cmFMb2NhbGU7aWYoXzMxNCl7aWYoIV8zMTQgaW5zdGFuY2VvZiBBcnJh
eSl7XzMxND1bXzMxNF07fXZhciByZXE9ZG9qby5pMThuLl9yZXF1aXJlTG9jYWxpemF0aW9uO2Rv
am8uaTE4bi5fcmVxdWlyZUxvY2FsaXphdGlvbj1mdW5jdGlvbihtLGIsXzMxNSxfMzE2KXtyZXEo
bSxiLF8zMTUsXzMxNik7aWYoXzMxNSl7cmV0dXJuO31mb3IodmFyIGk9MDtpPF8zMTQubGVuZ3Ro
O2krKyl7cmVxKG0sYixfMzE0W2ldLF8zMTYpO319O319KSgpO2Rvam8uaTE4bi5fc2VhcmNoTG9j
YWxlUGF0aD1mdW5jdGlvbihfMzE3LGRvd24sXzMxOCl7XzMxNz1kb2pvLmkxOG4ubm9ybWFsaXpl
TG9jYWxlKF8zMTcpO3ZhciBfMzE5PV8zMTcuc3BsaXQoIi0iKTt2YXIgXzMxYT1bXTtmb3IodmFy
IGk9XzMxOS5sZW5ndGg7aT4wO2ktLSl7XzMxYS5wdXNoKF8zMTkuc2xpY2UoMCxpKS5qb2luKCIt
IikpO31fMzFhLnB1c2goZmFsc2UpO2lmKGRvd24pe18zMWEucmV2ZXJzZSgpO31mb3IodmFyIGo9
XzMxYS5sZW5ndGgtMTtqPj0wO2otLSl7dmFyIGxvYz1fMzFhW2pdfHwiUk9PVCI7dmFyIHN0b3A9
XzMxOChsb2MpO2lmKHN0b3Ape2JyZWFrO319fTtkb2pvLmkxOG4uX3ByZWxvYWRMb2NhbGl6YXRp
b25zPWZ1bmN0aW9uKF8zMWIsXzMxYyl7ZnVuY3Rpb24gXzMxZChfMzFlKXtfMzFlPWRvam8uaTE4
bi5ub3JtYWxpemVMb2NhbGUoXzMxZSk7ZG9qby5pMThuLl9zZWFyY2hMb2NhbGVQYXRoKF8zMWUs
dHJ1ZSxmdW5jdGlvbihsb2Mpe2Zvcih2YXIgaT0wO2k8XzMxYy5sZW5ndGg7aSsrKXtpZihfMzFj
W2ldPT1sb2Mpe2Rvam9bInJlcXVpcmUiXShfMzFiKyJfIitsb2MpO3JldHVybiB0cnVlO319cmV0
dXJuIGZhbHNlO30pO307XzMxZCgpO3ZhciBfMzFmPWRvam8uY29uZmlnLmV4dHJhTG9jYWxlfHxb
XTtmb3IodmFyIGk9MDtpPF8zMWYubGVuZ3RoO2krKyl7XzMxZChfMzFmW2ldKTt9fTt9aWYoIWRv
am8uX2hhc1Jlc291cmNlWyJkb2pvLl9iYXNlLmJyb3dzZXIiXSl7ZG9qby5faGFzUmVzb3VyY2Vb
ImRvam8uX2Jhc2UuYnJvd3NlciJdPXRydWU7ZG9qby5wcm92aWRlKCJkb2pvLl9iYXNlLmJyb3dz
ZXIiKTtkb2pvLmZvckVhY2goZG9qby5jb25maWcucmVxdWlyZSxmdW5jdGlvbihpKXtkb2pvWyJy
ZXF1aXJlIl0oaSk7fSk7fWlmKCFkb2pvLl9oYXNSZXNvdXJjZVsiZG9qby5fYmFzZSJdKXtkb2pv
Ll9oYXNSZXNvdXJjZVsiZG9qby5fYmFzZSJdPXRydWU7ZG9qby5wcm92aWRlKCJkb2pvLl9iYXNl
Iik7fWlmKGRvam8uaXNCcm93c2VyJiYoZG9jdW1lbnQucmVhZHlTdGF0ZT09PSJjb21wbGV0ZSJ8
fGRvam8uY29uZmlnLmFmdGVyT25Mb2FkKSl7d2luZG93LnNldFRpbWVvdXQoZG9qby5fbG9hZElu
aXQsMTAwKTt9fSkoKTsKK2RpZmYgLS1naXQgYS93ZWIvYWpheC9saWJzL2V4dC1jb3JlLzMuMS4w
L2V4dC1jb3JlLmpzIGIvd2ViL2FqYXgvbGlicy9leHQtY29yZS8zLjEuMC9leHQtY29yZS5qcwor
bmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjlmYzY3MjcKKy0tLSAvZGV2L251
bGwKKysrKyBiL3dlYi9hamF4L2xpYnMvZXh0LWNvcmUvMy4xLjAvZXh0LWNvcmUuanMKK0BAIC0w
LDAgKzEsOCBAQAorKy8qCisrICogRXh0IENvcmUgTGlicmFyeSAzLjAKKysgKiBodHRwOi8vZXh0
anMuY29tLworKyAqIENvcHlyaWdodChjKSAyMDA2LTIwMDksIEV4dCBKUywgTExDLgorKyAqIAor
KyAqIE1JVCBMaWNlbnNlZCAtIGh0dHA6Ly9leHRqcy5jb20vbGljZW5zZS9taXQudHh0CisrICov
Cisrd2luZG93LnVuZGVmaW5lZD13aW5kb3cudW5kZWZpbmVkO0V4dD17dmVyc2lvbjoiMy4xLjAi
fTtFeHQuYXBwbHk9ZnVuY3Rpb24oZCxlLGIpe2lmKGIpe0V4dC5hcHBseShkLGIpfWlmKGQmJmUm
JnR5cGVvZiBlPT0ib2JqZWN0Iil7Zm9yKHZhciBhIGluIGUpe2RbYV09ZVthXX19cmV0dXJuIGR9
OyhmdW5jdGlvbigpe3ZhciBoPTAsdD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLHU9bmF2aWdh
dG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLHo9ZnVuY3Rpb24oZSl7cmV0dXJuIGUudGVzdCh1
KX0saj1kb2N1bWVudCxtPWouY29tcGF0TW9kZT09IkNTUzFDb21wYXQiLEI9eigvb3BlcmEvKSxp
PXooL2Nocm9tZS8pLHY9eigvd2Via2l0LykseT0haSYmeigvc2FmYXJpLyksZz15JiZ6KC9hcHBs
ZXdlYmtpdFwvNC8pLGI9eSYmeigvdmVyc2lvblwvMy8pLEM9eSYmeigvdmVyc2lvblwvNC8pLHM9
IUImJnooL21zaWUvKSxxPXMmJnooL21zaWUgNy8pLHA9cyYmeigvbXNpZSA4Lykscj1zJiYhcSYm
IXAsbz0hdiYmeigvZ2Vja28vKSxkPW8mJnooL3J2OjFcLjgvKSxhPW8mJnooL3J2OjFcLjkvKSx3
PXMmJiFtLEE9eigvd2luZG93c3x3aW4zMi8pLGw9eigvbWFjaW50b3NofG1hYyBvcyB4Lyksaz16
KC9hZG9iZWFpci8pLG49eigvbGludXgvKSxjPS9eaHR0cHMvaS50ZXN0KHdpbmRvdy5sb2NhdGlv
bi5wcm90b2NvbCk7aWYocil7dHJ5e2ouZXhlY0NvbW1hbmQoIkJhY2tncm91bmRJbWFnZUNhY2hl
IixmYWxzZSx0cnVlKX1jYXRjaCh4KXt9fUV4dC5hcHBseShFeHQse1NTTF9TRUNVUkVfVVJMOmMm
JnM/J2phdmFzY3JpcHQ6IiInOiJhYm91dDpibGFuayIsaXNTdHJpY3Q6bSxpc1NlY3VyZTpjLGlz
UmVhZHk6ZmFsc2UsZW5hYmxlR2FyYmFnZUNvbGxlY3Rvcjp0cnVlLGVuYWJsZUxpc3RlbmVyQ29s
bGVjdGlvbjpmYWxzZSxlbmFibGVOZXN0ZWRMaXN0ZW5lclJlbW92YWw6ZmFsc2UsVVNFX05BVElW
RV9KU09OOmZhbHNlLGFwcGx5SWY6ZnVuY3Rpb24oRCxFKXtpZihEKXtmb3IodmFyIGUgaW4gRSl7
aWYoIUV4dC5pc0RlZmluZWQoRFtlXSkpe0RbZV09RVtlXX19fXJldHVybiBEfSxpZDpmdW5jdGlv
bihlLEQpe3JldHVybihlPUV4dC5nZXREb20oZSl8fHt9KS5pZD1lLmlkfHwoRHx8ImV4dC1nZW4i
KSsoKytoKX0sZXh0ZW5kOmZ1bmN0aW9uKCl7dmFyIEQ9ZnVuY3Rpb24oRil7Zm9yKHZhciBFIGlu
IEYpe3RoaXNbRV09RltFXX19O3ZhciBlPU9iamVjdC5wcm90b3R5cGUuY29uc3RydWN0b3I7cmV0
dXJuIGZ1bmN0aW9uKEssSCxKKXtpZihFeHQuaXNPYmplY3QoSCkpe0o9SDtIPUs7Sz1KLmNvbnN0
cnVjdG9yIT1lP0ouY29uc3RydWN0b3I6ZnVuY3Rpb24oKXtILmFwcGx5KHRoaXMsYXJndW1lbnRz
KX19dmFyIEc9ZnVuY3Rpb24oKXt9LEksRT1ILnByb3RvdHlwZTtHLnByb3RvdHlwZT1FO0k9Sy5w
cm90b3R5cGU9bmV3IEcoKTtJLmNvbnN0cnVjdG9yPUs7Sy5zdXBlcmNsYXNzPUU7aWYoRS5jb25z
dHJ1Y3Rvcj09ZSl7RS5jb25zdHJ1Y3Rvcj1IfUsub3ZlcnJpZGU9ZnVuY3Rpb24oRil7RXh0Lm92
ZXJyaWRlKEssRil9O0kuc3VwZXJjbGFzcz1JLnN1cHI9KGZ1bmN0aW9uKCl7cmV0dXJuIEV9KTtJ
Lm92ZXJyaWRlPUQ7RXh0Lm92ZXJyaWRlKEssSik7Sy5leHRlbmQ9ZnVuY3Rpb24oRil7cmV0dXJu
IEV4dC5leHRlbmQoSyxGKX07cmV0dXJuIEt9fSgpLG92ZXJyaWRlOmZ1bmN0aW9uKGUsRSl7aWYo
RSl7dmFyIEQ9ZS5wcm90b3R5cGU7RXh0LmFwcGx5KEQsRSk7aWYoRXh0LmlzSUUmJkUuaGFzT3du
UHJvcGVydHkoInRvU3RyaW5nIikpe0QudG9TdHJpbmc9RS50b1N0cmluZ319fSxuYW1lc3BhY2U6
ZnVuY3Rpb24oKXt2YXIgRCxlO0V4dC5lYWNoKGFyZ3VtZW50cyxmdW5jdGlvbihFKXtlPUUuc3Bs
aXQoIi4iKTtEPXdpbmRvd1tlWzBdXT13aW5kb3dbZVswXV18fHt9O0V4dC5lYWNoKGUuc2xpY2Uo
MSksZnVuY3Rpb24oRil7RD1EW0ZdPURbRl18fHt9fSl9KTtyZXR1cm4gRH0sdXJsRW5jb2RlOmZ1
bmN0aW9uKEgsRyl7dmFyIEUsRD1bXSxGPWVuY29kZVVSSUNvbXBvbmVudDtFeHQuaXRlcmF0ZShI
LGZ1bmN0aW9uKGUsSSl7RT1FeHQuaXNFbXB0eShJKTtFeHQuZWFjaChFP2U6SSxmdW5jdGlvbihK
KXtELnB1c2goIiYiLEYoZSksIj0iLCghRXh0LmlzRW1wdHkoSikmJihKIT1lfHwhRSkpPyhFeHQu
aXNEYXRlKEopP0V4dC5lbmNvZGUoSikucmVwbGFjZSgvIi9nLCIiKTpGKEopKToiIil9KX0pO2lm
KCFHKXtELnNoaWZ0KCk7Rz0iIn1yZXR1cm4gRytELmpvaW4oIiIpfSx1cmxEZWNvZGU6ZnVuY3Rp
b24oRSxEKXtpZihFeHQuaXNFbXB0eShFKSl7cmV0dXJue319dmFyIEg9e30sRz1FLnNwbGl0KCIm
IiksST1kZWNvZGVVUklDb21wb25lbnQsZSxGO0V4dC5lYWNoKEcsZnVuY3Rpb24oSil7Sj1KLnNw
bGl0KCI9Iik7ZT1JKEpbMF0pO0Y9SShKWzFdKTtIW2VdPUR8fCFIW2VdP0Y6W10uY29uY2F0KEhb
ZV0pLmNvbmNhdChGKX0pO3JldHVybiBIfSx1cmxBcHBlbmQ6ZnVuY3Rpb24oZSxEKXtpZighRXh0
LmlzRW1wdHkoRCkpe3JldHVybiBlKyhlLmluZGV4T2YoIj8iKT09PS0xPyI/IjoiJiIpK0R9cmV0
dXJuIGV9LHRvQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gcz9mdW5jdGlvbihFLEgsRixHKXtHPVtd
O2Zvcih2YXIgRD0wLGU9RS5sZW5ndGg7RDxlO0QrKyl7Ry5wdXNoKEVbRF0pfXJldHVybiBHLnNs
aWNlKEh8fDAsRnx8Ry5sZW5ndGgpfTpmdW5jdGlvbihlLEUsRCl7cmV0dXJuIEFycmF5LnByb3Rv
dHlwZS5zbGljZS5jYWxsKGUsRXx8MCxEfHxlLmxlbmd0aCl9fSgpLGlzSXRlcmFibGU6ZnVuY3Rp
b24oZSl7aWYoRXh0LmlzQXJyYXkoZSl8fGUuY2FsbGVlKXtyZXR1cm4gdHJ1ZX1pZigvTm9kZUxp
c3R8SFRNTENvbGxlY3Rpb24vLnRlc3QodC5jYWxsKGUpKSl7cmV0dXJuIHRydWV9cmV0dXJuKCh0
eXBlb2YgZS5uZXh0Tm9kZSE9InVuZGVmaW5lZCJ8fGUuaXRlbSkmJkV4dC5pc051bWJlcihlLmxl
bmd0aCkpfSxlYWNoOmZ1bmN0aW9uKEcsRixFKXtpZihFeHQuaXNFbXB0eShHLHRydWUpKXtyZXR1
cm59aWYoIUV4dC5pc0l0ZXJhYmxlKEcpfHxFeHQuaXNQcmltaXRpdmUoRykpe0c9W0ddfWZvcih2
YXIgRD0wLGU9Ry5sZW5ndGg7RDxlO0QrKyl7aWYoRi5jYWxsKEV8fEdbRF0sR1tEXSxELEcpPT09
ZmFsc2Upe3JldHVybiBEfX19LGl0ZXJhdGU6ZnVuY3Rpb24oRSxELGUpe2lmKEV4dC5pc0VtcHR5
KEUpKXtyZXR1cm59aWYoRXh0LmlzSXRlcmFibGUoRSkpe0V4dC5lYWNoKEUsRCxlKTtyZXR1cm59
ZWxzZXtpZihFeHQuaXNPYmplY3QoRSkpe2Zvcih2YXIgRiBpbiBFKXtpZihFLmhhc093blByb3Bl
cnR5KEYpKXtpZihELmNhbGwoZXx8RSxGLEVbRl0sRSk9PT1mYWxzZSl7cmV0dXJufX19fX19LGdl
dERvbTpmdW5jdGlvbihlKXtpZighZXx8IWope3JldHVybiBudWxsfXJldHVybiBlLmRvbT9lLmRv
bTooRXh0LmlzU3RyaW5nKGUpP2ouZ2V0RWxlbWVudEJ5SWQoZSk6ZSl9LGdldEJvZHk6ZnVuY3Rp
b24oKXtyZXR1cm4gRXh0LmdldChqLmJvZHl8fGouZG9jdW1lbnRFbGVtZW50KX0scmVtb3ZlTm9k
ZTpzJiYhcD9mdW5jdGlvbigpe3ZhciBlO3JldHVybiBmdW5jdGlvbihEKXtpZihEJiZELnRhZ05h
bWUhPSJCT0RZIil7KEV4dC5lbmFibGVOZXN0ZWRMaXN0ZW5lclJlbW92YWwpP0V4dC5FdmVudE1h
bmFnZXIucHVyZ2VFbGVtZW50KEQsdHJ1ZSk6RXh0LkV2ZW50TWFuYWdlci5yZW1vdmVBbGwoRCk7
ZT1lfHxqLmNyZWF0ZUVsZW1lbnQoImRpdiIpO2UuYXBwZW5kQ2hpbGQoRCk7ZS5pbm5lckhUTUw9
IiI7ZGVsZXRlIEV4dC5lbENhY2hlW0QuaWRdfX19KCk6ZnVuY3Rpb24oZSl7aWYoZSYmZS5wYXJl
bnROb2RlJiZlLnRhZ05hbWUhPSJCT0RZIil7KEV4dC5lbmFibGVOZXN0ZWRMaXN0ZW5lclJlbW92
YWwpP0V4dC5FdmVudE1hbmFnZXIucHVyZ2VFbGVtZW50KGUsdHJ1ZSk6RXh0LkV2ZW50TWFuYWdl
ci5yZW1vdmVBbGwoZSk7ZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGUpO2RlbGV0ZSBFeHQuZWxD
YWNoZVtlLmlkXX19LGlzRW1wdHk6ZnVuY3Rpb24oRCxlKXtyZXR1cm4gRD09PW51bGx8fEQ9PT11
bmRlZmluZWR8fCgoRXh0LmlzQXJyYXkoRCkmJiFELmxlbmd0aCkpfHwoIWU/RD09PSIiOmZhbHNl
KX0saXNBcnJheTpmdW5jdGlvbihlKXtyZXR1cm4gdC5hcHBseShlKT09PSJbb2JqZWN0IEFycmF5
XSJ9LGlzRGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gdC5hcHBseShlKT09PSJbb2JqZWN0IERhdGVd
In0saXNPYmplY3Q6ZnVuY3Rpb24oZSl7cmV0dXJuICEhZSYmT2JqZWN0LnByb3RvdHlwZS50b1N0
cmluZy5jYWxsKGUpPT09IltvYmplY3QgT2JqZWN0XSJ9LGlzUHJpbWl0aXZlOmZ1bmN0aW9uKGUp
e3JldHVybiBFeHQuaXNTdHJpbmcoZSl8fEV4dC5pc051bWJlcihlKXx8RXh0LmlzQm9vbGVhbihl
KX0saXNGdW5jdGlvbjpmdW5jdGlvbihlKXtyZXR1cm4gdC5hcHBseShlKT09PSJbb2JqZWN0IEZ1
bmN0aW9uXSJ9LGlzTnVtYmVyOmZ1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZT09PSJudW1iZXIi
JiZpc0Zpbml0ZShlKX0saXNTdHJpbmc6ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlPT09InN0
cmluZyJ9LGlzQm9vbGVhbjpmdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGU9PT0iYm9vbGVhbiJ9
LGlzRWxlbWVudDpmdW5jdGlvbihlKXtyZXR1cm4gISFlJiZlLnRhZ05hbWV9LGlzRGVmaW5lZDpm
dW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGUhPT0idW5kZWZpbmVkIn0saXNPcGVyYTpCLGlzV2Vi
S2l0OnYsaXNDaHJvbWU6aSxpc1NhZmFyaTp5LGlzU2FmYXJpMzpiLGlzU2FmYXJpNDpDLGlzU2Fm
YXJpMjpnLGlzSUU6cyxpc0lFNjpyLGlzSUU3OnEsaXNJRTg6cCxpc0dlY2tvOm8saXNHZWNrbzI6
ZCxpc0dlY2tvMzphLGlzQm9yZGVyQm94OncsaXNMaW51eDpuLGlzV2luZG93czpBLGlzTWFjOmws
aXNBaXI6a30pO0V4dC5ucz1FeHQubmFtZXNwYWNlfSkoKTtFeHQubnMoIkV4dC51dGlsIiwiRXh0
LmxpYiIsIkV4dC5kYXRhIik7RXh0LmVsQ2FjaGU9e307RXh0LmFwcGx5KEZ1bmN0aW9uLnByb3Rv
dHlwZSx7Y3JlYXRlSW50ZXJjZXB0b3I6ZnVuY3Rpb24oYixhKXt2YXIgYz10aGlzO3JldHVybiAh
RXh0LmlzRnVuY3Rpb24oYik/dGhpczpmdW5jdGlvbigpe3ZhciBlPXRoaXMsZD1hcmd1bWVudHM7
Yi50YXJnZXQ9ZTtiLm1ldGhvZD1jO3JldHVybihiLmFwcGx5KGF8fGV8fHdpbmRvdyxkKSE9PWZh
bHNlKT9jLmFwcGx5KGV8fHdpbmRvdyxkKTpudWxsfX0sY3JlYXRlQ2FsbGJhY2s6ZnVuY3Rpb24o
KXt2YXIgYT1hcmd1bWVudHMsYj10aGlzO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBiLmFwcGx5
KHdpbmRvdyxhKX19LGNyZWF0ZURlbGVnYXRlOmZ1bmN0aW9uKGMsYixhKXt2YXIgZD10aGlzO3Jl
dHVybiBmdW5jdGlvbigpe3ZhciBnPWJ8fGFyZ3VtZW50cztpZihhPT09dHJ1ZSl7Zz1BcnJheS5w
cm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMCk7Zz1nLmNvbmNhdChiKX1lbHNle2lmKEV4
dC5pc051bWJlcihhKSl7Zz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMCk7
dmFyIGU9W2EsMF0uY29uY2F0KGIpO0FycmF5LnByb3RvdHlwZS5zcGxpY2UuYXBwbHkoZyxlKX19
cmV0dXJuIGQuYXBwbHkoY3x8d2luZG93LGcpfX0sZGVmZXI6ZnVuY3Rpb24oYyxlLGIsYSl7dmFy
IGQ9dGhpcy5jcmVhdGVEZWxlZ2F0ZShlLGIsYSk7aWYoYz4wKXtyZXR1cm4gc2V0VGltZW91dChk
LGMpfWQoKTtyZXR1cm4gMH19KTtFeHQuYXBwbHlJZihTdHJpbmcse2Zvcm1hdDpmdW5jdGlvbihi
KXt2YXIgYT1FeHQudG9BcnJheShhcmd1bWVudHMsMSk7cmV0dXJuIGIucmVwbGFjZSgvXHsoXGQr
KVx9L2csZnVuY3Rpb24oYyxkKXtyZXR1cm4gYVtkXX0pfX0pO0V4dC5hcHBseUlmKEFycmF5LnBy
b3RvdHlwZSx7aW5kZXhPZjpmdW5jdGlvbihiLGMpe3ZhciBhPXRoaXMubGVuZ3RoO2M9Y3x8MDtj
Kz0oYzwwKT9hOjA7Zm9yKDtjPGE7KytjKXtpZih0aGlzW2NdPT09Yil7cmV0dXJuIGN9fXJldHVy
biAtMX0scmVtb3ZlOmZ1bmN0aW9uKGIpe3ZhciBhPXRoaXMuaW5kZXhPZihiKTtpZihhIT0tMSl7
dGhpcy5zcGxpY2UoYSwxKX1yZXR1cm4gdGhpc319KTtFeHQudXRpbC5UYXNrUnVubmVyPWZ1bmN0
aW9uKGUpe2U9ZXx8MTA7dmFyIGc9W10sYT1bXSxiPTAsaD1mYWxzZSxkPWZ1bmN0aW9uKCl7aD1m
YWxzZTtjbGVhckludGVydmFsKGIpO2I9MH0saT1mdW5jdGlvbigpe2lmKCFoKXtoPXRydWU7Yj1z
ZXRJbnRlcnZhbChqLGUpfX0sYz1mdW5jdGlvbihrKXthLnB1c2goayk7aWYoay5vblN0b3Ape2su
b25TdG9wLmFwcGx5KGsuc2NvcGV8fGspfX0saj1mdW5jdGlvbigpe3ZhciBtPWEubGVuZ3RoLG89
bmV3IERhdGUoKS5nZXRUaW1lKCk7aWYobT4wKXtmb3IodmFyIHE9MDtxPG07cSsrKXtnLnJlbW92
ZShhW3FdKX1hPVtdO2lmKGcubGVuZ3RoPDEpe2QoKTtyZXR1cm59fWZvcih2YXIgcT0wLHAsbCxu
LGs9Zy5sZW5ndGg7cTxrOysrcSl7cD1nW3FdO2w9by1wLnRhc2tSdW5UaW1lO2lmKHAuaW50ZXJ2
YWw8PWwpe249cC5ydW4uYXBwbHkocC5zY29wZXx8cCxwLmFyZ3N8fFsrK3AudGFza1J1bkNvdW50
XSk7cC50YXNrUnVuVGltZT1vO2lmKG49PT1mYWxzZXx8cC50YXNrUnVuQ291bnQ9PT1wLnJlcGVh
dCl7YyhwKTtyZXR1cm59fWlmKHAuZHVyYXRpb24mJnAuZHVyYXRpb248PShvLXAudGFza1N0YXJ0
VGltZSkpe2MocCl9fX07dGhpcy5zdGFydD1mdW5jdGlvbihrKXtnLnB1c2goayk7ay50YXNrU3Rh
cnRUaW1lPW5ldyBEYXRlKCkuZ2V0VGltZSgpO2sudGFza1J1blRpbWU9MDtrLnRhc2tSdW5Db3Vu
dD0wO2koKTtyZXR1cm4ga307dGhpcy5zdG9wPWZ1bmN0aW9uKGspe2Moayk7cmV0dXJuIGt9O3Ro
aXMuc3RvcEFsbD1mdW5jdGlvbigpe2QoKTtmb3IodmFyIGw9MCxrPWcubGVuZ3RoO2w8aztsKysp
e2lmKGdbbF0ub25TdG9wKXtnW2xdLm9uU3RvcCgpfX1nPVtdO2E9W119fTtFeHQuVGFza01ncj1u
ZXcgRXh0LnV0aWwuVGFza1J1bm5lcigpO0V4dC51dGlsLkRlbGF5ZWRUYXNrPWZ1bmN0aW9uKGQs
YyxhKXt2YXIgZT10aGlzLGcsYj1mdW5jdGlvbigpe2NsZWFySW50ZXJ2YWwoZyk7Zz1udWxsO2Qu
YXBwbHkoYyxhfHxbXSl9O2UuZGVsYXk9ZnVuY3Rpb24oaSxrLGosaCl7ZS5jYW5jZWwoKTtkPWt8
fGQ7Yz1qfHxjO2E9aHx8YTtnPXNldEludGVydmFsKGIsaSl9O2UuY2FuY2VsPWZ1bmN0aW9uKCl7
aWYoZyl7Y2xlYXJJbnRlcnZhbChnKTtnPW51bGx9fX07KGZ1bmN0aW9uKCl7dmFyIGI7ZnVuY3Rp
b24gYyhkKXtpZighYil7Yj1uZXcgRXh0LkVsZW1lbnQuRmx5d2VpZ2h0KCl9Yi5kb209ZDtyZXR1
cm4gYn0oZnVuY3Rpb24oKXt2YXIgaD1kb2N1bWVudCxlPWguY29tcGF0TW9kZT09IkNTUzFDb21w
YXQiLGc9TWF0aC5tYXgsZD1NYXRoLnJvdW5kLGk9cGFyc2VJbnQ7RXh0LmxpYi5Eb209e2lzQW5j
ZXN0b3I6ZnVuY3Rpb24oayxsKXt2YXIgaj1mYWxzZTtrPUV4dC5nZXREb20oayk7bD1FeHQuZ2V0
RG9tKGwpO2lmKGsmJmwpe2lmKGsuY29udGFpbnMpe3JldHVybiBrLmNvbnRhaW5zKGwpfWVsc2V7
aWYoay5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbil7cmV0dXJuICEhKGsuY29tcGFyZURvY3VtZW50
UG9zaXRpb24obCkmMTYpfWVsc2V7d2hpbGUobD1sLnBhcmVudE5vZGUpe2o9bD09a3x8an19fX1y
ZXR1cm4gan0sZ2V0Vmlld1dpZHRoOmZ1bmN0aW9uKGope3JldHVybiBqP3RoaXMuZ2V0RG9jdW1l
bnRXaWR0aCgpOnRoaXMuZ2V0Vmlld3BvcnRXaWR0aCgpfSxnZXRWaWV3SGVpZ2h0OmZ1bmN0aW9u
KGope3JldHVybiBqP3RoaXMuZ2V0RG9jdW1lbnRIZWlnaHQoKTp0aGlzLmdldFZpZXdwb3J0SGVp
Z2h0KCl9LGdldERvY3VtZW50SGVpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIGcoIWU/aC5ib2R5LnNj
cm9sbEhlaWdodDpoLmRvY3VtZW50RWxlbWVudC5zY3JvbGxIZWlnaHQsdGhpcy5nZXRWaWV3cG9y
dEhlaWdodCgpKX0sZ2V0RG9jdW1lbnRXaWR0aDpmdW5jdGlvbigpe3JldHVybiBnKCFlP2guYm9k
eS5zY3JvbGxXaWR0aDpoLmRvY3VtZW50RWxlbWVudC5zY3JvbGxXaWR0aCx0aGlzLmdldFZpZXdw
b3J0V2lkdGgoKSl9LGdldFZpZXdwb3J0SGVpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIEV4dC5pc0lF
PyhFeHQuaXNTdHJpY3Q/aC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0OmguYm9keS5jbGll
bnRIZWlnaHQpOnNlbGYuaW5uZXJIZWlnaHR9LGdldFZpZXdwb3J0V2lkdGg6ZnVuY3Rpb24oKXty
ZXR1cm4gIUV4dC5pc1N0cmljdCYmIUV4dC5pc09wZXJhP2guYm9keS5jbGllbnRXaWR0aDpFeHQu
aXNJRT9oLmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aDpzZWxmLmlubmVyV2lkdGh9LGdldFk6
ZnVuY3Rpb24oail7cmV0dXJuIHRoaXMuZ2V0WFkoailbMV19LGdldFg6ZnVuY3Rpb24oail7cmV0
dXJuIHRoaXMuZ2V0WFkoailbMF19LGdldFhZOmZ1bmN0aW9uKGwpe3ZhciBrLHIsdCx3LG0sbix2
PTAscz0wLHUsaixvPShoLmJvZHl8fGguZG9jdW1lbnRFbGVtZW50KSxxPVswLDBdO2w9RXh0Lmdl
dERvbShsKTtpZihsIT1vKXtpZihsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCl7dD1sLmdldEJvdW5k
aW5nQ2xpZW50UmVjdCgpO3U9Yyhkb2N1bWVudCkuZ2V0U2Nyb2xsKCk7cT1bZCh0LmxlZnQrdS5s
ZWZ0KSxkKHQudG9wK3UudG9wKV19ZWxzZXtrPWw7aj1jKGwpLmlzU3R5bGUoInBvc2l0aW9uIiwi
YWJzb2x1dGUiKTt3aGlsZShrKXtyPWMoayk7dis9ay5vZmZzZXRMZWZ0O3MrPWsub2Zmc2V0VG9w
O2o9anx8ci5pc1N0eWxlKCJwb3NpdGlvbiIsImFic29sdXRlIik7aWYoRXh0LmlzR2Vja28pe3Mr
PXc9aShyLmdldFN0eWxlKCJib3JkZXJUb3BXaWR0aCIpLDEwKXx8MDt2Kz1tPWkoci5nZXRTdHls
ZSgiYm9yZGVyTGVmdFdpZHRoIiksMTApfHwwO2lmKGshPWwmJiFyLmlzU3R5bGUoIm92ZXJmbG93
IiwidmlzaWJsZSIpKXt2Kz1tO3MrPXd9fWs9ay5vZmZzZXRQYXJlbnR9aWYoRXh0LmlzU2FmYXJp
JiZqKXt2LT1vLm9mZnNldExlZnQ7cy09by5vZmZzZXRUb3B9aWYoRXh0LmlzR2Vja28mJiFqKXtu
PWMobyk7dis9aShuLmdldFN0eWxlKCJib3JkZXJMZWZ0V2lkdGgiKSwxMCl8fDA7cys9aShuLmdl
dFN0eWxlKCJib3JkZXJUb3BXaWR0aCIpLDEwKXx8MH1rPWwucGFyZW50Tm9kZTt3aGlsZShrJiZr
IT1vKXtpZighRXh0LmlzT3BlcmF8fChrLnRhZ05hbWUhPSJUUiImJiFjKGspLmlzU3R5bGUoImRp
c3BsYXkiLCJpbmxpbmUiKSkpe3YtPWsuc2Nyb2xsTGVmdDtzLT1rLnNjcm9sbFRvcH1rPWsucGFy
ZW50Tm9kZX1xPVt2LHNdfX1yZXR1cm4gcX0sc2V0WFk6ZnVuY3Rpb24oayxsKXsoaz1FeHQuZmx5
KGssIl9zZXRYWSIpKS5wb3NpdGlvbigpO3ZhciBtPWsudHJhbnNsYXRlUG9pbnRzKGwpLGo9ay5k
b20uc3R5bGUsbjtmb3IobiBpbiBtKXtpZighaXNOYU4obVtuXSkpe2pbbl09bVtuXSsicHgifX19
LHNldFg6ZnVuY3Rpb24oayxqKXt0aGlzLnNldFhZKGssW2osZmFsc2VdKX0sc2V0WTpmdW5jdGlv
bihqLGspe3RoaXMuc2V0WFkoaixbZmFsc2Usa10pfX19KSgpO0V4dC5saWIuRXZlbnQ9ZnVuY3Rp
b24oKXt2YXIgeD1mYWxzZSxoPXt9LEI9MCxxPVtdLGQsRD1mYWxzZSxsPXdpbmRvdyxIPWRvY3Vt
ZW50LG09MjAwLHQ9MjAsQz0wLHM9MCxqPTEsbj0yLHU9Mix5PTMsdj0ic2Nyb2xsTGVmdCIscj0i
c2Nyb2xsVG9wIixnPSJ1bmxvYWQiLEE9Im1vdXNlb3ZlciIsRz0ibW91c2VvdXQiLGU9ZnVuY3Rp
b24oKXt2YXIgSTtpZihsLmFkZEV2ZW50TGlzdGVuZXIpe0k9ZnVuY3Rpb24oTSxLLEwsSil7aWYo
Sz09Im1vdXNlZW50ZXIiKXtMPUwuY3JlYXRlSW50ZXJjZXB0b3IocCk7TS5hZGRFdmVudExpc3Rl
bmVyKEEsTCwoSikpfWVsc2V7aWYoSz09Im1vdXNlbGVhdmUiKXtMPUwuY3JlYXRlSW50ZXJjZXB0
b3IocCk7TS5hZGRFdmVudExpc3RlbmVyKEcsTCwoSikpfWVsc2V7TS5hZGRFdmVudExpc3RlbmVy
KEssTCwoSikpfX1yZXR1cm4gTH19ZWxzZXtpZihsLmF0dGFjaEV2ZW50KXtJPWZ1bmN0aW9uKE0s
SyxMLEope00uYXR0YWNoRXZlbnQoIm9uIitLLEwpO3JldHVybiBMfX1lbHNle0k9ZnVuY3Rpb24o
KXt9fX1yZXR1cm4gSX0oKSxpPWZ1bmN0aW9uKCl7dmFyIEk7aWYobC5yZW1vdmVFdmVudExpc3Rl
bmVyKXtJPWZ1bmN0aW9uKE0sSyxMLEope2lmKEs9PSJtb3VzZWVudGVyIil7Sz1BfWVsc2V7aWYo
Sz09Im1vdXNlbGVhdmUiKXtLPUd9fU0ucmVtb3ZlRXZlbnRMaXN0ZW5lcihLLEwsKEopKX19ZWxz
ZXtpZihsLmRldGFjaEV2ZW50KXtJPWZ1bmN0aW9uKEwsSixLKXtMLmRldGFjaEV2ZW50KCJvbiIr
SixLKX19ZWxzZXtJPWZ1bmN0aW9uKCl7fX19cmV0dXJuIEl9KCk7ZnVuY3Rpb24gcChJKXtyZXR1
cm4gIXcoSS5jdXJyZW50VGFyZ2V0LHouZ2V0UmVsYXRlZFRhcmdldChJKSl9ZnVuY3Rpb24gdyhJ
LEope2lmKEkmJkkuZmlyc3RDaGlsZCl7d2hpbGUoSil7aWYoSj09PUkpe3JldHVybiB0cnVlfUo9
Si5wYXJlbnROb2RlO2lmKEomJihKLm5vZGVUeXBlIT0xKSl7Sj1udWxsfX19cmV0dXJuIGZhbHNl
fWZ1bmN0aW9uIEUoKXt2YXIgSz1mYWxzZSxPPVtdLE0sTCxJLEosTj0heHx8KEI+MCk7aWYoIUQp
e0Q9dHJ1ZTtmb3IoTD0wLEk9cS5sZW5ndGg7TDxJO0wrKyl7Sj1xW0xdO2lmKEomJihNPUguZ2V0
RWxlbWVudEJ5SWQoSi5pZCkpKXtpZighSi5jaGVja1JlYWR5fHx4fHxNLm5leHRTaWJsaW5nfHwo
SCYmSC5ib2R5KSl7TT1KLm92ZXJyaWRlPyhKLm92ZXJyaWRlPT09dHJ1ZT9KLm9iajpKLm92ZXJy
aWRlKTpNO0ouZm4uY2FsbChNLEoub2JqKTtxLnJlbW92ZShKKX1lbHNle08ucHVzaChKKX19fUI9
KE8ubGVuZ3RoPT09MCk/MDpCLTE7aWYoTil7bygpfWVsc2V7Y2xlYXJJbnRlcnZhbChkKTtkPW51
bGx9Sz0hKEQ9ZmFsc2UpfXJldHVybiBLfWZ1bmN0aW9uIG8oKXtpZighZCl7dmFyIEk9ZnVuY3Rp
b24oKXtFKCl9O2Q9c2V0SW50ZXJ2YWwoSSx0KX19ZnVuY3Rpb24gRigpe3ZhciBJPUguZG9jdW1l
bnRFbGVtZW50LEo9SC5ib2R5O2lmKEkmJihJW3JdfHxJW3ZdKSl7cmV0dXJuW0lbdl0sSVtyXV19
ZWxzZXtpZihKKXtyZXR1cm5bSlt2XSxKW3JdXX1lbHNle3JldHVyblswLDBdfX19ZnVuY3Rpb24g
ayhJLEope0k9SS5icm93c2VyRXZlbnR8fEk7dmFyIEs9SVsicGFnZSIrSl07aWYoIUsmJkshPT0w
KXtLPUlbImNsaWVudCIrSl18fDA7aWYoRXh0LmlzSUUpe0srPUYoKVtKPT0iWCI/MDoxXX19cmV0
dXJuIEt9dmFyIHo9e2V4dEFkYXB0ZXI6dHJ1ZSxvbkF2YWlsYWJsZTpmdW5jdGlvbihLLEksTCxK
KXtxLnB1c2goe2lkOkssZm46SSxvYmo6TCxvdmVycmlkZTpKLGNoZWNrUmVhZHk6ZmFsc2V9KTtC
PW07bygpfSxhZGRMaXN0ZW5lcjpmdW5jdGlvbihLLEksSil7Sz1FeHQuZ2V0RG9tKEspO2lmKEsm
Jkope2lmKEk9PWcpe2lmKGhbSy5pZF09PT11bmRlZmluZWQpe2hbSy5pZF09W119aFtLLmlkXS5w
dXNoKFtJLEpdKTtyZXR1cm4gSn1yZXR1cm4gZShLLEksSixmYWxzZSl9cmV0dXJuIGZhbHNlfSxy
ZW1vdmVMaXN0ZW5lcjpmdW5jdGlvbihPLEssTil7Tz1FeHQuZ2V0RG9tKE8pO3ZhciBNLEosSSxM
O2lmKE8mJk4pe2lmKEs9PWcpe2lmKChMPWhbTy5pZF0pIT09dW5kZWZpbmVkKXtmb3IoTT0wLEo9
TC5sZW5ndGg7TTxKO00rKyl7aWYoKEk9TFtNXSkmJklbc109PUsmJklbal09PU4pe2hbaWRdLnNw
bGljZShNLDEpfX19cmV0dXJufWkoTyxLLE4sZmFsc2UpfX0sZ2V0VGFyZ2V0OmZ1bmN0aW9uKEkp
e0k9SS5icm93c2VyRXZlbnR8fEk7cmV0dXJuIHRoaXMucmVzb2x2ZVRleHROb2RlKEkudGFyZ2V0
fHxJLnNyY0VsZW1lbnQpfSxyZXNvbHZlVGV4dE5vZGU6RXh0LmlzR2Vja28/ZnVuY3Rpb24oSil7
aWYoIUope3JldHVybn12YXIgST1IVE1MRWxlbWVudC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChK
KTtpZihJPT0iW3hwY29ubmVjdCB3cmFwcGVkIG5hdGl2ZSBwcm90b3R5cGVdInx8ST09IltvYmpl
Y3QgWFVMRWxlbWVudF0iKXtyZXR1cm59cmV0dXJuIEoubm9kZVR5cGU9PTM/Si5wYXJlbnROb2Rl
Okp9OmZ1bmN0aW9uKEkpe3JldHVybiBJJiZJLm5vZGVUeXBlPT0zP0kucGFyZW50Tm9kZTpJfSxn
ZXRSZWxhdGVkVGFyZ2V0OmZ1bmN0aW9uKEkpe0k9SS5icm93c2VyRXZlbnR8fEk7cmV0dXJuIHRo
aXMucmVzb2x2ZVRleHROb2RlKEkucmVsYXRlZFRhcmdldHx8KEkudHlwZT09Rz9JLnRvRWxlbWVu
dDpJLnR5cGU9PUE/SS5mcm9tRWxlbWVudDpudWxsKSl9LGdldFBhZ2VYOmZ1bmN0aW9uKEkpe3Jl
dHVybiBrKEksIlgiKX0sZ2V0UGFnZVk6ZnVuY3Rpb24oSSl7cmV0dXJuIGsoSSwiWSIpfSxnZXRY
WTpmdW5jdGlvbihJKXtyZXR1cm5bdGhpcy5nZXRQYWdlWChJKSx0aGlzLmdldFBhZ2VZKEkpXX0s
c3RvcEV2ZW50OmZ1bmN0aW9uKEkpe3RoaXMuc3RvcFByb3BhZ2F0aW9uKEkpO3RoaXMucHJldmVu
dERlZmF1bHQoSSl9LHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbihJKXtJPUkuYnJvd3NlckV2ZW50
fHxJO2lmKEkuc3RvcFByb3BhZ2F0aW9uKXtJLnN0b3BQcm9wYWdhdGlvbigpfWVsc2V7SS5jYW5j
ZWxCdWJibGU9dHJ1ZX19LHByZXZlbnREZWZhdWx0OmZ1bmN0aW9uKEkpe0k9SS5icm93c2VyRXZl
bnR8fEk7aWYoSS5wcmV2ZW50RGVmYXVsdCl7SS5wcmV2ZW50RGVmYXVsdCgpfWVsc2V7SS5yZXR1
cm5WYWx1ZT1mYWxzZX19LGdldEV2ZW50OmZ1bmN0aW9uKEkpe0k9SXx8bC5ldmVudDtpZighSSl7
dmFyIEo9dGhpcy5nZXRFdmVudC5jYWxsZXI7d2hpbGUoSil7ST1KLmFyZ3VtZW50c1swXTtpZihJ
JiZFdmVudD09SS5jb25zdHJ1Y3Rvcil7YnJlYWt9Sj1KLmNhbGxlcn19cmV0dXJuIEl9LGdldENo
YXJDb2RlOmZ1bmN0aW9uKEkpe0k9SS5icm93c2VyRXZlbnR8fEk7cmV0dXJuIEkuY2hhckNvZGV8
fEkua2V5Q29kZXx8MH0sZ2V0TGlzdGVuZXJzOmZ1bmN0aW9uKEosSSl7RXh0LkV2ZW50TWFuYWdl
ci5nZXRMaXN0ZW5lcnMoSixJKX0scHVyZ2VFbGVtZW50OmZ1bmN0aW9uKEosSyxJKXtFeHQuRXZl
bnRNYW5hZ2VyLnB1cmdlRWxlbWVudChKLEssSSl9LF9sb2FkOmZ1bmN0aW9uKEope3g9dHJ1ZTt2
YXIgST1FeHQubGliLkV2ZW50O2lmKEV4dC5pc0lFJiZKIT09dHJ1ZSl7aShsLCJsb2FkIixhcmd1
bWVudHMuY2FsbGVlKX19LF91bmxvYWQ6ZnVuY3Rpb24oUCl7dmFyIEo9RXh0LmxpYi5FdmVudCxN
LEwsSyxTLFEsSSxPLE4sVDtmb3IoSSBpbiBoKXtRPWhbSV07Zm9yKE09MCxPPVEubGVuZ3RoO008
TztNKyspe1M9UVtNXTtpZihTKXt0cnl7VD1TW3ldPyhTW3ldPT09dHJ1ZT9TW3VdOlNbeV0pOmw7
U1tqXS5jYWxsKFQsSi5nZXRFdmVudChQKSxTW3VdKX1jYXRjaChSKXt9fX19aD1udWxsO0V4dC5F
dmVudE1hbmFnZXIuX3VubG9hZCgpO2kobCxnLEouX3VubG9hZCl9fTt6Lm9uPXouYWRkTGlzdGVu
ZXI7ei51bj16LnJlbW92ZUxpc3RlbmVyO2lmKEgmJkguYm9keSl7ei5fbG9hZCh0cnVlKX1lbHNl
e2UobCwibG9hZCIsei5fbG9hZCl9ZShsLGcsei5fdW5sb2FkKTtFKCk7cmV0dXJuIHp9KCk7RXh0
LmxpYi5BamF4PWZ1bmN0aW9uKCl7dmFyIGg9WyJNU1hNTDIuWE1MSFRUUC4zLjAiLCJNU1hNTDIu
WE1MSFRUUCIsIk1pY3Jvc29mdC5YTUxIVFRQIl0sZD0iQ29udGVudC1UeXBlIjtmdW5jdGlvbiBp
KHQpe3ZhciBzPXQuY29ubix1O2Z1bmN0aW9uIHIodix3KXtmb3IodSBpbiB3KXtpZih3Lmhhc093
blByb3BlcnR5KHUpKXt2LnNldFJlcXVlc3RIZWFkZXIodSx3W3VdKX19fWlmKGwuZGVmYXVsdEhl
YWRlcnMpe3IocyxsLmRlZmF1bHRIZWFkZXJzKX1pZihsLmhlYWRlcnMpe3IocyxsLmhlYWRlcnMp
O2RlbGV0ZSBsLmhlYWRlcnN9fWZ1bmN0aW9uIGUodSx0LHMscil7cmV0dXJue3RJZDp1LHN0YXR1
czpzPy0xOjAsc3RhdHVzVGV4dDpzPyJ0cmFuc2FjdGlvbiBhYm9ydGVkIjoiY29tbXVuaWNhdGlv
biBmYWlsdXJlIixpc0Fib3J0OnMsaXNUaW1lb3V0OnIsYXJndW1lbnQ6dH19ZnVuY3Rpb24gayhy
LHMpeyhsLmhlYWRlcnM9bC5oZWFkZXJzfHx7fSlbcl09c31mdW5jdGlvbiBwKEEseSl7dmFyIHU9
e30sdyx4PUEuY29ubixyLHY7dHJ5e3c9QS5jb25uLmdldEFsbFJlc3BvbnNlSGVhZGVycygpO0V4
dC5lYWNoKHcucmVwbGFjZSgvXHJcbi9nLCJcbiIpLnNwbGl0KCJcbiIpLGZ1bmN0aW9uKHMpe3I9
cy5pbmRleE9mKCI6Iik7aWYocj49MCl7dj1zLnN1YnN0cigwLHIpLnRvTG93ZXJDYXNlKCk7aWYo
cy5jaGFyQXQocisxKT09IiAiKXsrK3J9dVt2XT1zLnN1YnN0cihyKzEpfX0pfWNhdGNoKHope31y
ZXR1cm57dElkOkEudElkLHN0YXR1czp4LnN0YXR1cyxzdGF0dXNUZXh0Onguc3RhdHVzVGV4dCxn
ZXRSZXNwb25zZUhlYWRlcjpmdW5jdGlvbihzKXtyZXR1cm4gdVtzLnRvTG93ZXJDYXNlKCldfSxn
ZXRBbGxSZXNwb25zZUhlYWRlcnM6ZnVuY3Rpb24oKXtyZXR1cm4gd30scmVzcG9uc2VUZXh0Ongu
cmVzcG9uc2VUZXh0LHJlc3BvbnNlWE1MOngucmVzcG9uc2VYTUwsYXJndW1lbnQ6eX19ZnVuY3Rp
b24gbyhyKXtyLmNvbm49bnVsbDtyPW51bGx9ZnVuY3Rpb24gZyh3LHgscyxyKXtpZigheCl7byh3
KTtyZXR1cm59dmFyIHUsdDt0cnl7aWYody5jb25uLnN0YXR1cyE9PXVuZGVmaW5lZCYmdy5jb25u
LnN0YXR1cyE9MCl7dT13LmNvbm4uc3RhdHVzfWVsc2V7dT0xMzAzMH19Y2F0Y2godil7dT0xMzAz
MH1pZigodT49MjAwJiZ1PDMwMCl8fChFeHQuaXNJRSYmdT09MTIyMykpe3Q9cCh3LHguYXJndW1l
bnQpO2lmKHguc3VjY2Vzcyl7aWYoIXguc2NvcGUpe3guc3VjY2Vzcyh0KX1lbHNle3guc3VjY2Vz
cy5hcHBseSh4LnNjb3BlLFt0XSl9fX1lbHNle3N3aXRjaCh1KXtjYXNlIDEyMDAyOmNhc2UgMTIw
Mjk6Y2FzZSAxMjAzMDpjYXNlIDEyMDMxOmNhc2UgMTIxNTI6Y2FzZSAxMzAzMDp0PWUody50SWQs
eC5hcmd1bWVudCwocz9zOmZhbHNlKSxyKTtpZih4LmZhaWx1cmUpe2lmKCF4LnNjb3BlKXt4LmZh
aWx1cmUodCl9ZWxzZXt4LmZhaWx1cmUuYXBwbHkoeC5zY29wZSxbdF0pfX1icmVhaztkZWZhdWx0
OnQ9cCh3LHguYXJndW1lbnQpO2lmKHguZmFpbHVyZSl7aWYoIXguc2NvcGUpe3guZmFpbHVyZSh0
KX1lbHNle3guZmFpbHVyZS5hcHBseSh4LnNjb3BlLFt0XSl9fX19byh3KTt0PW51bGx9ZnVuY3Rp
b24gbih0LHcpe3c9d3x8e307dmFyIHI9dC5jb25uLHY9dC50SWQscz1sLnBvbGwsdT13LnRpbWVv
dXR8fG51bGw7aWYodSl7bC50aW1lb3V0W3ZdPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtsLmFib3J0
KHQsdyx0cnVlKX0sdSl9c1t2XT1zZXRJbnRlcnZhbChmdW5jdGlvbigpe2lmKHImJnIucmVhZHlT
dGF0ZT09NCl7Y2xlYXJJbnRlcnZhbChzW3ZdKTtzW3ZdPW51bGw7aWYodSl7Y2xlYXJUaW1lb3V0
KGwudGltZW91dFt2XSk7bC50aW1lb3V0W3ZdPW51bGx9Zyh0LHcpfX0sbC5wb2xsSW50ZXJ2YWwp
fWZ1bmN0aW9uIGoodixzLHUscil7dmFyIHQ9bSgpfHxudWxsO2lmKHQpe3QuY29ubi5vcGVuKHYs
cyx0cnVlKTtpZihsLnVzZURlZmF1bHRYaHJIZWFkZXIpe2soIlgtUmVxdWVzdGVkLVdpdGgiLGwu
ZGVmYXVsdFhockhlYWRlcil9aWYociYmbC51c2VEZWZhdWx0SGVhZGVyJiYoIWwuaGVhZGVyc3x8
IWwuaGVhZGVyc1tkXSkpe2soZCxsLmRlZmF1bHRQb3N0SGVhZGVyKX1pZihsLmRlZmF1bHRIZWFk
ZXJzfHxsLmhlYWRlcnMpe2kodCl9bih0LHUpO3QuY29ubi5zZW5kKHJ8fG51bGwpfXJldHVybiB0
fWZ1bmN0aW9uIG0oKXt2YXIgczt0cnl7aWYocz1xKGwudHJhbnNhY3Rpb25JZCkpe2wudHJhbnNh
Y3Rpb25JZCsrfX1jYXRjaChyKXt9ZmluYWxseXtyZXR1cm4gc319ZnVuY3Rpb24gcSh1KXt2YXIg
cjt0cnl7cj1uZXcgWE1MSHR0cFJlcXVlc3QoKX1jYXRjaCh0KXtmb3IodmFyIHM9MDtzPGgubGVu
Z3RoOysrcyl7dHJ5e3I9bmV3IEFjdGl2ZVhPYmplY3QoaFtzXSk7YnJlYWt9Y2F0Y2godCl7fX19
ZmluYWxseXtyZXR1cm57Y29ubjpyLHRJZDp1fX19dmFyIGw9e3JlcXVlc3Q6ZnVuY3Rpb24ocix0
LHUsdix6KXtpZih6KXt2YXIgdz10aGlzLHM9ei54bWxEYXRhLHg9ei5qc29uRGF0YSx5O0V4dC5h
cHBseUlmKHcseik7aWYoc3x8eCl7eT13LmhlYWRlcnM7aWYoIXl8fCF5W2RdKXtrKGQscz8idGV4
dC94bWwiOiJhcHBsaWNhdGlvbi9qc29uIil9dj1zfHwoIUV4dC5pc1ByaW1pdGl2ZSh4KT9FeHQu
ZW5jb2RlKHgpOngpfX1yZXR1cm4gaihyfHx6Lm1ldGhvZHx8IlBPU1QiLHQsdSx2KX0sc2VyaWFs
aXplRm9ybTpmdW5jdGlvbihzKXt2YXIgdD1zLmVsZW1lbnRzfHwoZG9jdW1lbnQuZm9ybXNbc118
fEV4dC5nZXREb20ocykpLmVsZW1lbnRzLHo9ZmFsc2UseT1lbmNvZGVVUklDb21wb25lbnQsdyxB
LHIsdSx2PSIiLHg7RXh0LmVhY2godCxmdW5jdGlvbihCKXtyPUIubmFtZTt4PUIudHlwZTtpZigh
Qi5kaXNhYmxlZCYmcil7aWYoL3NlbGVjdC0ob25lfG11bHRpcGxlKS9pLnRlc3QoeCkpe0V4dC5l
YWNoKEIub3B0aW9ucyxmdW5jdGlvbihDKXtpZihDLnNlbGVjdGVkKXt2Kz1TdHJpbmcuZm9ybWF0
KCJ7MH09ezF9JiIseShyKSx5KChDLmhhc0F0dHJpYnV0ZT9DLmhhc0F0dHJpYnV0ZSgidmFsdWUi
KTpDLmdldEF0dHJpYnV0ZSgidmFsdWUiKSE9PW51bGwpP0MudmFsdWU6Qy50ZXh0KSl9fSl9ZWxz
ZXtpZighL2ZpbGV8dW5kZWZpbmVkfHJlc2V0fGJ1dHRvbi9pLnRlc3QoeCkpe2lmKCEoL3JhZGlv
fGNoZWNrYm94L2kudGVzdCh4KSYmIUIuY2hlY2tlZCkmJiEoeD09InN1Ym1pdCImJnopKXt2Kz15
KHIpKyI9Iit5KEIudmFsdWUpKyImIjt6PS9zdWJtaXQvaS50ZXN0KHgpfX19fX0pO3JldHVybiB2
LnN1YnN0cigwLHYubGVuZ3RoLTEpfSx1c2VEZWZhdWx0SGVhZGVyOnRydWUsZGVmYXVsdFBvc3RI
ZWFkZXI6ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDsgY2hhcnNldD1VVEYtOCIs
dXNlRGVmYXVsdFhockhlYWRlcjp0cnVlLGRlZmF1bHRYaHJIZWFkZXI6IlhNTEh0dHBSZXF1ZXN0
Iixwb2xsOnt9LHRpbWVvdXQ6e30scG9sbEludGVydmFsOjUwLHRyYW5zYWN0aW9uSWQ6MCxhYm9y
dDpmdW5jdGlvbih1LHcscil7dmFyIHQ9dGhpcyx2PXUudElkLHM9ZmFsc2U7aWYodC5pc0NhbGxJ
blByb2dyZXNzKHUpKXt1LmNvbm4uYWJvcnQoKTtjbGVhckludGVydmFsKHQucG9sbFt2XSk7dC5w
b2xsW3ZdPW51bGw7Y2xlYXJUaW1lb3V0KGwudGltZW91dFt2XSk7dC50aW1lb3V0W3ZdPW51bGw7
Zyh1LHcsKHM9dHJ1ZSkscil9cmV0dXJuIHN9LGlzQ2FsbEluUHJvZ3Jlc3M6ZnVuY3Rpb24ocil7
cmV0dXJuIHIuY29ubiYmIXswOnRydWUsNDp0cnVlfVtyLmNvbm4ucmVhZHlTdGF0ZV19fTtyZXR1
cm4gbH0oKTsoZnVuY3Rpb24oKXt2YXIgaD1FeHQubGliLGo9L3dpZHRofGhlaWdodHxvcGFjaXR5
fHBhZGRpbmcvaSxnPS9eKCh3aWR0aHxoZWlnaHQpfCh0b3B8bGVmdCkpJC8sZD0vd2lkdGh8aGVp
Z2h0fHRvcCR8Ym90dG9tJHxsZWZ0JHxyaWdodCQvaSxpPS9cZCsoZW18JXxlbnxleHxwdHxpbnxj
bXxtbXxwYykkL2ksaz1mdW5jdGlvbihsKXtyZXR1cm4gdHlwZW9mIGwhPT0idW5kZWZpbmVkIn0s
ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgRGF0ZSgpfTtoLkFuaW09e21vdGlvbjpmdW5jdGlvbihv
LG0scCxxLGwsbil7cmV0dXJuIHRoaXMucnVuKG8sbSxwLHEsbCxuLEV4dC5saWIuTW90aW9uKX0s
cnVuOmZ1bmN0aW9uKHAsbSxyLHMsbCxvLG4pe249bnx8RXh0LmxpYi5BbmltQmFzZTtpZih0eXBl
b2Ygcz09InN0cmluZyIpe3M9RXh0LmxpYi5FYXNpbmdbc119dmFyIHE9bmV3IG4ocCxtLHIscyk7
cS5hbmltYXRlWChmdW5jdGlvbigpe2lmKEV4dC5pc0Z1bmN0aW9uKGwpKXtsLmNhbGwobyl9fSk7
cmV0dXJuIHF9fTtoLkFuaW1CYXNlPWZ1bmN0aW9uKG0sbCxuLG8pe2lmKG0pe3RoaXMuaW5pdCht
LGwsbixvKX19O2guQW5pbUJhc2UucHJvdG90eXBlPXtkb01ldGhvZDpmdW5jdGlvbihsLG8sbSl7
dmFyIG49dGhpcztyZXR1cm4gbi5tZXRob2Qobi5jdXJGcmFtZSxvLG0tbyxuLnRvdGFsRnJhbWVz
KX0sc2V0QXR0cjpmdW5jdGlvbihsLG4sbSl7aWYoai50ZXN0KGwpJiZuPDApe249MH1FeHQuZmx5
KHRoaXMuZWwsIl9hbmltIikuc2V0U3R5bGUobCxuK20pfSxnZXRBdHRyOmZ1bmN0aW9uKGwpe3Zh
ciBuPUV4dC5mbHkodGhpcy5lbCksbz1uLmdldFN0eWxlKGwpLG09Zy5leGVjKGwpfHxbXTtpZihv
IT09ImF1dG8iJiYhaS50ZXN0KG8pKXtyZXR1cm4gcGFyc2VGbG9hdChvKX1yZXR1cm4oISEobVsy
XSl8fChuLmdldFN0eWxlKCJwb3NpdGlvbiIpPT0iYWJzb2x1dGUiJiYhIShtWzNdKSkpP24uZG9t
WyJvZmZzZXQiK21bMF0uY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrbVswXS5zdWJzdHIoMSldOjB9
LGdldERlZmF1bHRVbml0OmZ1bmN0aW9uKGwpe3JldHVybiBkLnRlc3QobCk/InB4IjoiIn0sYW5p
bWF0ZVg6ZnVuY3Rpb24obyxsKXt2YXIgbT10aGlzLG49ZnVuY3Rpb24oKXttLm9uQ29tcGxldGUu
cmVtb3ZlTGlzdGVuZXIobik7aWYoRXh0LmlzRnVuY3Rpb24obykpe28uY2FsbChsfHxtLG0pfX07
bS5vbkNvbXBsZXRlLmFkZExpc3RlbmVyKG4sbSk7bS5hbmltYXRlKCl9LHNldFJ1bkF0dHI6ZnVu
Y3Rpb24ocSl7dmFyIHM9dGhpcyx0PXRoaXMuYXR0cmlidXRlc1txXSx1PXQudG8scj10LmJ5LHY9
dC5mcm9tLHc9dC51bml0LG09KHRoaXMucnVuQXR0cnNbcV09e30pLG47aWYoIWsodSkmJiFrKHIp
KXtyZXR1cm4gZmFsc2V9dmFyIGw9ayh2KT92OnMuZ2V0QXR0cihxKTtpZihrKHUpKXtuPXV9ZWxz
ZXtpZihrKHIpKXtpZihFeHQuaXNBcnJheShsKSl7bj1bXTtmb3IodmFyIG89MCxwPWwubGVuZ3Ro
O288cDtvKyspe25bb109bFtvXStyW29dfX1lbHNle249bCtyfX19RXh0LmFwcGx5KG0se3N0YXJ0
OmwsZW5kOm4sdW5pdDprKHcpP3c6cy5nZXREZWZhdWx0VW5pdChxKX0pfSxpbml0OmZ1bmN0aW9u
KG0scSxwLGwpe3ZhciBzPXRoaXMsbz0wLHQ9aC5BbmltTWdyO0V4dC5hcHBseShzLHtpc0FuaW1h
dGVkOmZhbHNlLHN0YXJ0VGltZTpudWxsLGVsOkV4dC5nZXREb20obSksYXR0cmlidXRlczpxfHx7
fSxkdXJhdGlvbjpwfHwxLG1ldGhvZDpsfHxoLkVhc2luZy5lYXNlTm9uZSx1c2VTZWM6dHJ1ZSxj
dXJGcmFtZTowLHRvdGFsRnJhbWVzOnQuZnBzLHJ1bkF0dHJzOnt9LGFuaW1hdGU6ZnVuY3Rpb24o
KXt2YXIgdj10aGlzLHc9di5kdXJhdGlvbjtpZih2LmlzQW5pbWF0ZWQpe3JldHVybiBmYWxzZX12
LmN1ckZyYW1lPTA7di50b3RhbEZyYW1lcz12LnVzZVNlYz9NYXRoLmNlaWwodC5mcHMqdyk6dzt0
LnJlZ2lzdGVyRWxlbWVudCh2KX0sc3RvcDpmdW5jdGlvbih2KXt2YXIgdz10aGlzO2lmKHYpe3cu
Y3VyRnJhbWU9dy50b3RhbEZyYW1lczt3Ll9vblR3ZWVuLmZpcmUoKX10LnN0b3Aodyl9fSk7dmFy
IHU9ZnVuY3Rpb24oKXt2YXIgdz10aGlzLHY7dy5vblN0YXJ0LmZpcmUoKTt3LnJ1bkF0dHJzPXt9
O2Zvcih2IGluIHRoaXMuYXR0cmlidXRlcyl7dGhpcy5zZXRSdW5BdHRyKHYpfXcuaXNBbmltYXRl
ZD10cnVlO3cuc3RhcnRUaW1lPWUoKTtvPTB9O3ZhciByPWZ1bmN0aW9uKCl7dmFyIHc9dGhpczt3
Lm9uVHdlZW4uZmlyZSh7ZHVyYXRpb246ZSgpLXcuc3RhcnRUaW1lLGN1ckZyYW1lOncuY3VyRnJh
bWV9KTt2YXIgeD13LnJ1bkF0dHJzO2Zvcih2YXIgdiBpbiB4KXt0aGlzLnNldEF0dHIodix3LmRv
TWV0aG9kKHYseFt2XS5zdGFydCx4W3ZdLmVuZCkseFt2XS51bml0KX0rK299O3ZhciBuPWZ1bmN0
aW9uKCl7dmFyIHY9dGhpcyx4PShlKCktdi5zdGFydFRpbWUpLzEwMDAsdz17ZHVyYXRpb246eCxm
cmFtZXM6byxmcHM6by94fTt2LmlzQW5pbWF0ZWQ9ZmFsc2U7bz0wO3Yub25Db21wbGV0ZS5maXJl
KHcpfTtzLm9uU3RhcnQ9bmV3IEV4dC51dGlsLkV2ZW50KHMpO3Mub25Ud2Vlbj1uZXcgRXh0LnV0
aWwuRXZlbnQocyk7cy5vbkNvbXBsZXRlPW5ldyBFeHQudXRpbC5FdmVudChzKTsocy5fb25TdGFy
dD1uZXcgRXh0LnV0aWwuRXZlbnQocykpLmFkZExpc3RlbmVyKHUpOyhzLl9vblR3ZWVuPW5ldyBF
eHQudXRpbC5FdmVudChzKSkuYWRkTGlzdGVuZXIocik7KHMuX29uQ29tcGxldGU9bmV3IEV4dC51
dGlsLkV2ZW50KHMpKS5hZGRMaXN0ZW5lcihuKX19O0V4dC5saWIuQW5pbU1ncj1uZXcgZnVuY3Rp
b24oKXt2YXIgcD10aGlzLG49bnVsbCxtPVtdLGw9MDtFeHQuYXBwbHkocCx7ZnBzOjEwMDAsZGVs
YXk6MSxyZWdpc3RlckVsZW1lbnQ6ZnVuY3Rpb24ocil7bS5wdXNoKHIpOysrbDtyLl9vblN0YXJ0
LmZpcmUoKTtwLnN0YXJ0KCl9LHVuUmVnaXN0ZXI6ZnVuY3Rpb24ocyxyKXtzLl9vbkNvbXBsZXRl
LmZpcmUoKTtyPXJ8fHEocyk7aWYociE9LTEpe20uc3BsaWNlKHIsMSl9aWYoLS1sPD0wKXtwLnN0
b3AoKX19LHN0YXJ0OmZ1bmN0aW9uKCl7aWYobj09PW51bGwpe249c2V0SW50ZXJ2YWwocC5ydW4s
cC5kZWxheSl9fSxzdG9wOmZ1bmN0aW9uKHQpe2lmKCF0KXtjbGVhckludGVydmFsKG4pO2Zvcih2
YXIgcz0wLHI9bS5sZW5ndGg7czxyOysrcyl7aWYobVswXS5pc0FuaW1hdGVkKXtwLnVuUmVnaXN0
ZXIobVswXSwwKX19bT1bXTtuPW51bGw7bD0wfWVsc2V7cC51blJlZ2lzdGVyKHQpfX0scnVuOmZ1
bmN0aW9uKCl7dmFyIHUsdCxyLHM7Zm9yKHQ9MCxyPW0ubGVuZ3RoO3Q8cjt0Kyspe3M9bVt0XTtp
ZihzJiZzLmlzQW5pbWF0ZWQpe3U9cy50b3RhbEZyYW1lcztpZihzLmN1ckZyYW1lPHV8fHU9PT1u
dWxsKXsrK3MuY3VyRnJhbWU7aWYocy51c2VTZWMpe28ocyl9cy5fb25Ud2Vlbi5maXJlKCl9ZWxz
ZXtwLnN0b3Aocyl9fX19fSk7dmFyIHE9ZnVuY3Rpb24odCl7dmFyIHMscjtmb3Iocz0wLHI9bS5s
ZW5ndGg7czxyO3MrKyl7aWYobVtzXT09PXQpe3JldHVybiBzfX1yZXR1cm4gLTF9O3ZhciBvPWZ1
bmN0aW9uKHMpe3ZhciB3PXMudG90YWxGcmFtZXMsdj1zLmN1ckZyYW1lLHU9cy5kdXJhdGlvbix0
PSh2KnUqMTAwMC93KSxyPShlKCktcy5zdGFydFRpbWUpLHg9MDtpZihyPHUqMTAwMCl7eD1NYXRo
LnJvdW5kKChyL3QtMSkqdil9ZWxzZXt4PXctKHYrMSl9aWYoeD4wJiZpc0Zpbml0ZSh4KSl7aWYo
cy5jdXJGcmFtZSt4Pj13KXt4PXctKHYrMSl9cy5jdXJGcmFtZSs9eH19fTtoLkJlemllcj1uZXcg
ZnVuY3Rpb24oKXt0aGlzLmdldFBvc2l0aW9uPWZ1bmN0aW9uKHEscCl7dmFyIHM9cS5sZW5ndGgs
bz1bXSxyPTEtcCxtLGw7Zm9yKG09MDttPHM7KyttKXtvW21dPVtxW21dWzBdLHFbbV1bMV1dfWZv
cihsPTE7bDxzOysrbCl7Zm9yKG09MDttPHMtbDsrK20pe29bbV1bMF09cipvW21dWzBdK3Aqb1tw
YXJzZUludChtKzEsMTApXVswXTtvW21dWzFdPXIqb1ttXVsxXStwKm9bcGFyc2VJbnQobSsxLDEw
KV1bMV19fXJldHVybltvWzBdWzBdLG9bMF1bMV1dfX07aC5FYXNpbmc9e2Vhc2VOb25lOmZ1bmN0
aW9uKG0sbCxvLG4pe3JldHVybiBvKm0vbitsfSxlYXNlSW46ZnVuY3Rpb24obSxsLG8sbil7cmV0
dXJuIG8qKG0vPW4pKm0rbH0sZWFzZU91dDpmdW5jdGlvbihtLGwsbyxuKXtyZXR1cm4gLW8qKG0v
PW4pKihtLTIpK2x9fTsoZnVuY3Rpb24oKXtoLk1vdGlvbj1mdW5jdGlvbihxLHAscixzKXtpZihx
KXtoLk1vdGlvbi5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyxxLHAscixzKX19O0V4
dC5leHRlbmQoaC5Nb3Rpb24sRXh0LmxpYi5BbmltQmFzZSk7dmFyIG89aC5Nb3Rpb24uc3VwZXJj
bGFzcyxuPWguTW90aW9uLnByb3RvdHlwZSxtPS9ecG9pbnRzJC9pO0V4dC5hcHBseShoLk1vdGlv
bi5wcm90b3R5cGUse3NldEF0dHI6ZnVuY3Rpb24ocCx0LHMpe3ZhciByPXRoaXMscT1vLnNldEF0
dHI7aWYobS50ZXN0KHApKXtzPXN8fCJweCI7cS5jYWxsKHIsImxlZnQiLHRbMF0scyk7cS5jYWxs
KHIsInRvcCIsdFsxXSxzKX1lbHNle3EuY2FsbChyLHAsdCxzKX19LGdldEF0dHI6ZnVuY3Rpb24o
cCl7dmFyIHI9dGhpcyxxPW8uZ2V0QXR0cjtyZXR1cm4gbS50ZXN0KHApP1txLmNhbGwociwibGVm
dCIpLHEuY2FsbChyLCJ0b3AiKV06cS5jYWxsKHIscCl9LGRvTWV0aG9kOmZ1bmN0aW9uKHAscyxx
KXt2YXIgcj10aGlzO3JldHVybiBtLnRlc3QocCk/aC5CZXppZXIuZ2V0UG9zaXRpb24oci5ydW5B
dHRyc1twXSxyLm1ldGhvZChyLmN1ckZyYW1lLDAsMTAwLHIudG90YWxGcmFtZXMpLzEwMCk6by5k
b01ldGhvZC5jYWxsKHIscCxzLHEpfSxzZXRSdW5BdHRyOmZ1bmN0aW9uKHcpe2lmKG0udGVzdCh3
KSl7dmFyIHk9dGhpcyxyPXRoaXMuZWwsQj10aGlzLmF0dHJpYnV0ZXMucG9pbnRzLHU9Qi5jb250
cm9sfHxbXSx6PUIuZnJvbSxBPUIudG8seD1CLmJ5LEM9aC5Eb20scSx0LHMsdixwO2lmKHUubGVu
Z3RoPjAmJiFFeHQuaXNBcnJheSh1WzBdKSl7dT1bdV19ZWxzZXt9RXh0LmZseShyLCJfYW5pbSIp
LnBvc2l0aW9uKCk7Qy5zZXRYWShyLGsoeik/ejpDLmdldFhZKHIpKTtxPXkuZ2V0QXR0cigicG9p
bnRzIik7aWYoayhBKSl7cz1sLmNhbGwoeSxBLHEpO2Zvcih0PTAsdj11Lmxlbmd0aDt0PHY7Kyt0
KXt1W3RdPWwuY2FsbCh5LHVbdF0scSl9fWVsc2V7aWYoayh4KSl7cz1bcVswXSt4WzBdLHFbMV0r
eFsxXV07Zm9yKHQ9MCx2PXUubGVuZ3RoO3Q8djsrK3Qpe3VbdF09W3FbMF0rdVt0XVswXSxxWzFd
K3VbdF1bMV1dfX19cD10aGlzLnJ1bkF0dHJzW3ddPVtxXTtpZih1Lmxlbmd0aD4wKXtwPXAuY29u
Y2F0KHUpfXBbcC5sZW5ndGhdPXN9ZWxzZXtvLnNldFJ1bkF0dHIuY2FsbCh0aGlzLHcpfX19KTt2
YXIgbD1mdW5jdGlvbihwLHIpe3ZhciBxPWguRG9tLmdldFhZKHRoaXMuZWwpO3JldHVybltwWzBd
LXFbMF0rclswXSxwWzFdLXFbMV0rclsxXV19fSkoKX0pKCk7KGZ1bmN0aW9uKCl7dmFyIGQ9TWF0
aC5hYnMsaj1NYXRoLlBJLGk9TWF0aC5hc2luLGg9TWF0aC5wb3csZT1NYXRoLnNpbixnPUV4dC5s
aWI7RXh0LmFwcGx5KGcuRWFzaW5nLHtlYXNlQm90aDpmdW5jdGlvbihsLGssbixtKXtyZXR1cm4o
KGwvPW0vMik8MSk/bi8yKmwqbCtrOi1uLzIqKCgtLWwpKihsLTIpLTEpK2t9LGVhc2VJblN0cm9u
ZzpmdW5jdGlvbihsLGssbixtKXtyZXR1cm4gbioobC89bSkqbCpsKmwra30sZWFzZU91dFN0cm9u
ZzpmdW5jdGlvbihsLGssbixtKXtyZXR1cm4gLW4qKChsPWwvbS0xKSpsKmwqbC0xKStrfSxlYXNl
Qm90aFN0cm9uZzpmdW5jdGlvbihsLGssbixtKXtyZXR1cm4oKGwvPW0vMik8MSk/bi8yKmwqbCps
Kmwrazotbi8yKigobC09MikqbCpsKmwtMikra30sZWxhc3RpY0luOmZ1bmN0aW9uKG0sayxyLHEs
bCxvKXtpZihtPT0wfHwobS89cSk9PTEpe3JldHVybiBtPT0wP2s6aytyfW89b3x8KHEqMC4zKTt2
YXIgbjtpZihsPj1kKHIpKXtuPW8vKDIqaikqaShyL2wpfWVsc2V7bD1yO249by80fXJldHVybiAt
KGwqaCgyLDEwKihtLT0xKSkqZSgobSpxLW4pKigyKmopL28pKStrfSxlbGFzdGljT3V0OmZ1bmN0
aW9uKG0sayxyLHEsbCxvKXtpZihtPT0wfHwobS89cSk9PTEpe3JldHVybiBtPT0wP2s6aytyfW89
b3x8KHEqMC4zKTt2YXIgbjtpZihsPj1kKHIpKXtuPW8vKDIqaikqaShyL2wpfWVsc2V7bD1yO249
by80fXJldHVybiBsKmgoMiwtMTAqbSkqZSgobSpxLW4pKigyKmopL28pK3Ira30sZWxhc3RpY0Jv
dGg6ZnVuY3Rpb24obSxrLHIscSxsLG8pe2lmKG09PTB8fChtLz1xLzIpPT0yKXtyZXR1cm4gbT09
MD9rOmsrcn1vPW98fChxKigwLjMqMS41KSk7dmFyIG47aWYobD49ZChyKSl7bj1vLygyKmopKmko
ci9sKX1lbHNle2w9cjtuPW8vNH1yZXR1cm4gbTwxPy0wLjUqKGwqaCgyLDEwKihtLT0xKSkqZSgo
bSpxLW4pKigyKmopL28pKStrOmwqaCgyLC0xMCoobS09MSkpKmUoKG0qcS1uKSooMipqKS9vKSow
LjUrcitrfSxiYWNrSW46ZnVuY3Rpb24obCxrLG8sbixtKXttPW18fDEuNzAxNTg7cmV0dXJuIG8q
KGwvPW4pKmwqKChtKzEpKmwtbSkra30sYmFja091dDpmdW5jdGlvbihsLGssbyxuLG0pe2lmKCFt
KXttPTEuNzAxNTh9cmV0dXJuIG8qKChsPWwvbi0xKSpsKigobSsxKSpsK20pKzEpK2t9LGJhY2tC
b3RoOmZ1bmN0aW9uKGwsayxvLG4sbSl7bT1tfHwxLjcwMTU4O3JldHVybigobC89bi8yKTwxKT9v
LzIqKGwqbCooKChtKj0oMS41MjUpKSsxKSpsLW0pKStrOm8vMiooKGwtPTIpKmwqKCgobSo9KDEu
NTI1KSkrMSkqbCttKSsyKStrfSxib3VuY2VJbjpmdW5jdGlvbihsLGssbixtKXtyZXR1cm4gbi1n
LkVhc2luZy5ib3VuY2VPdXQobS1sLDAsbixtKStrfSxib3VuY2VPdXQ6ZnVuY3Rpb24obCxrLG4s
bSl7aWYoKGwvPW0pPCgxLzIuNzUpKXtyZXR1cm4gbiooNy41NjI1KmwqbCkra31lbHNle2lmKGw8
KDIvMi43NSkpe3JldHVybiBuKig3LjU2MjUqKGwtPSgxLjUvMi43NSkpKmwrMC43NSkra31lbHNl
e2lmKGw8KDIuNS8yLjc1KSl7cmV0dXJuIG4qKDcuNTYyNSoobC09KDIuMjUvMi43NSkpKmwrMC45
Mzc1KStrfX19cmV0dXJuIG4qKDcuNTYyNSoobC09KDIuNjI1LzIuNzUpKSpsKzAuOTg0Mzc1KStr
fSxib3VuY2VCb3RoOmZ1bmN0aW9uKGwsayxuLG0pe3JldHVybihsPG0vMik/Zy5FYXNpbmcuYm91
bmNlSW4obCoyLDAsbixtKSowLjUrazpnLkVhc2luZy5ib3VuY2VPdXQobCoyLW0sMCxuLG0pKjAu
NStuKjAuNStrfX0pfSkoKTsoZnVuY3Rpb24oKXt2YXIgaT1FeHQubGliO2kuQW5pbS5jb2xvcj1m
dW5jdGlvbihxLG8scixzLG4scCl7cmV0dXJuIGkuQW5pbS5ydW4ocSxvLHIscyxuLHAsaS5Db2xv
ckFuaW0pfTtpLkNvbG9yQW5pbT1mdW5jdGlvbihvLG4scCxxKXtpLkNvbG9yQW5pbS5zdXBlcmNs
YXNzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyxvLG4scCxxKX07RXh0LmV4dGVuZChpLkNvbG9yQW5p
bSxpLkFuaW1CYXNlKTt2YXIgaz1pLkNvbG9yQW5pbS5zdXBlcmNsYXNzLGo9L2NvbG9yJC9pLGc9
L150cmFuc3BhcmVudHxyZ2JhXCgwLCAwLCAwLCAwXCkkLyxtPS9ecmdiXCgoWzAtOV0rKVxzKixc
cyooWzAtOV0rKVxzKixccyooWzAtOV0rKVwpJC9pLGQ9L14jPyhbMC05QS1GXXsyfSkoWzAtOUEt
Rl17Mn0pKFswLTlBLUZdezJ9KSQvaSxlPS9eIz8oWzAtOUEtRl17MX0pKFswLTlBLUZdezF9KShb
MC05QS1GXXsxfSkkL2ksaD1mdW5jdGlvbihuKXtyZXR1cm4gdHlwZW9mIG4hPT0idW5kZWZpbmVk
In07ZnVuY3Rpb24gbChvKXt2YXIgcT1wYXJzZUludCxwLG49bnVsbCxyO2lmKG8ubGVuZ3RoPT0z
KXtyZXR1cm4gb31FeHQuZWFjaChbZCxtLGVdLGZ1bmN0aW9uKHQscyl7cD0ocyUyPT0wKT8xNjox
MDtyPXQuZXhlYyhvKTtpZihyJiZyLmxlbmd0aD09NCl7bj1bcShyWzFdLHApLHEoclsyXSxwKSxx
KHJbM10scCldO3JldHVybiBmYWxzZX19KTtyZXR1cm4gbn1FeHQuYXBwbHkoaS5Db2xvckFuaW0u
cHJvdG90eXBlLHtnZXRBdHRyOmZ1bmN0aW9uKG4pe3ZhciBwPXRoaXMsbz1wLmVsLHE7aWYoai50
ZXN0KG4pKXt3aGlsZShvJiZnLnRlc3QocT1FeHQuZmx5KG8pLmdldFN0eWxlKG4pKSl7bz1vLnBh
cmVudE5vZGU7cT0iZmZmIn19ZWxzZXtxPWsuZ2V0QXR0ci5jYWxsKHAsbil9cmV0dXJuIHF9LGRv
TWV0aG9kOmZ1bmN0aW9uKHQsbixwKXt2YXIgdT10aGlzLG8scj1NYXRoLmZsb29yLHEscyx3O2lm
KGoudGVzdCh0KSl7bz1bXTtmb3IocT0wLHM9bi5sZW5ndGg7cTxzO3ErKyl7dz1uW3FdO29bcV09
ay5kb01ldGhvZC5jYWxsKHUsdCx3LHBbcV0pfW89InJnYigiK3Iob1swXSkrIiwiK3Iob1sxXSkr
IiwiK3Iob1syXSkrIikifWVsc2V7bz1rLmRvTWV0aG9kLmNhbGwodSx0LG4scCl9cmV0dXJuIG99
LHNldFJ1bkF0dHI6ZnVuY3Rpb24ocyl7dmFyIHU9dGhpcyx2PXUuYXR0cmlidXRlc1tzXSx3PXYu
dG8sdD12LmJ5LG87ay5zZXRSdW5BdHRyLmNhbGwodSxzKTtvPXUucnVuQXR0cnNbc107aWYoai50
ZXN0KHMpKXt2YXIgbj1sKG8uc3RhcnQpLHA9bChvLmVuZCk7aWYoIWgodykmJmgodCkpe3A9bCh0
KTtmb3IodmFyIHE9MCxyPW4ubGVuZ3RoO3E8cjtxKyspe3BbcV09bltxXStwW3FdfX1vLnN0YXJ0
PW47by5lbmQ9cH19fSl9KSgpOyhmdW5jdGlvbigpe3ZhciBkPUV4dC5saWI7ZC5BbmltLnNjcm9s
bD1mdW5jdGlvbihrLGksbCxtLGgsail7cmV0dXJuIGQuQW5pbS5ydW4oayxpLGwsbSxoLGosZC5T
Y3JvbGwpfTtkLlNjcm9sbD1mdW5jdGlvbihpLGgsaixrKXtpZihpKXtkLlNjcm9sbC5zdXBlcmNs
YXNzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyxpLGgsaixrKX19O0V4dC5leHRlbmQoZC5TY3JvbGws
ZC5Db2xvckFuaW0pO3ZhciBnPWQuU2Nyb2xsLnN1cGVyY2xhc3MsZT0ic2Nyb2xsIjtFeHQuYXBw
bHkoZC5TY3JvbGwucHJvdG90eXBlLHtkb01ldGhvZDpmdW5jdGlvbihoLG4saSl7dmFyIGwsaz10
aGlzLG09ay5jdXJGcmFtZSxqPWsudG90YWxGcmFtZXM7aWYoaD09ZSl7bD1bay5tZXRob2QobSxu
WzBdLGlbMF0tblswXSxqKSxrLm1ldGhvZChtLG5bMV0saVsxXS1uWzFdLGopXX1lbHNle2w9Zy5k
b01ldGhvZC5jYWxsKGssaCxuLGkpfXJldHVybiBsfSxnZXRBdHRyOmZ1bmN0aW9uKGgpe3ZhciBp
PXRoaXM7aWYoaD09ZSl7cmV0dXJuW2kuZWwuc2Nyb2xsTGVmdCxpLmVsLnNjcm9sbFRvcF19ZWxz
ZXtyZXR1cm4gZy5nZXRBdHRyLmNhbGwoaSxoKX19LHNldEF0dHI6ZnVuY3Rpb24oaCxrLGope3Zh
ciBpPXRoaXM7aWYoaD09ZSl7aS5lbC5zY3JvbGxMZWZ0PWtbMF07aS5lbC5zY3JvbGxUb3A9a1sx
XX1lbHNle2cuc2V0QXR0ci5jYWxsKGksaCxrLGopfX19KX0pKCk7aWYoRXh0LmlzSUUpe2Z1bmN0
aW9uIGEoKXt2YXIgZD1GdW5jdGlvbi5wcm90b3R5cGU7ZGVsZXRlIGQuY3JlYXRlU2VxdWVuY2U7
ZGVsZXRlIGQuZGVmZXI7ZGVsZXRlIGQuY3JlYXRlRGVsZWdhdGU7ZGVsZXRlIGQuY3JlYXRlQ2Fs
bGJhY2s7ZGVsZXRlIGQuY3JlYXRlSW50ZXJjZXB0b3I7d2luZG93LmRldGFjaEV2ZW50KCJvbnVu
bG9hZCIsYSl9d2luZG93LmF0dGFjaEV2ZW50KCJvbnVubG9hZCIsYSl9fSkoKTsoZnVuY3Rpb24o
KXt2YXIgaT1FeHQudXRpbCxsPUV4dC50b0FycmF5LGs9RXh0LmVhY2gsYT1FeHQuaXNPYmplY3Qs
aD10cnVlLGo9ZmFsc2U7aS5PYnNlcnZhYmxlPWZ1bmN0aW9uKCl7dmFyIG09dGhpcyxuPW0uZXZl
bnRzO2lmKG0ubGlzdGVuZXJzKXttLm9uKG0ubGlzdGVuZXJzKTtkZWxldGUgbS5saXN0ZW5lcnN9
bS5ldmVudHM9bnx8e319O2kuT2JzZXJ2YWJsZS5wcm90b3R5cGU9e2ZpbHRlck9wdFJlOi9eKD86
c2NvcGV8ZGVsYXl8YnVmZmVyfHNpbmdsZSkkLyxmaXJlRXZlbnQ6ZnVuY3Rpb24oKXt2YXIgbT1s
KGFyZ3VtZW50cyksbz1tWzBdLnRvTG93ZXJDYXNlKCkscD10aGlzLG49aCxzPXAuZXZlbnRzW29d
LHIsdDtpZihwLmV2ZW50c1N1c3BlbmRlZD09PWgpe2lmKHI9cC5ldmVudFF1ZXVlKXtyLnB1c2go
bSl9fWVsc2V7aWYoYShzKSYmcy5idWJibGUpe2lmKHMuZmlyZS5hcHBseShzLG0uc2xpY2UoMSkp
PT09ail7cmV0dXJuIGp9dD1wLmdldEJ1YmJsZVRhcmdldCYmcC5nZXRCdWJibGVUYXJnZXQoKTtp
Zih0JiZ0LmVuYWJsZUJ1YmJsZSl7aWYoIXQuZXZlbnRzW29dfHwhRXh0LmlzT2JqZWN0KHQuZXZl
bnRzW29dKXx8IXQuZXZlbnRzW29dLmJ1YmJsZSl7dC5lbmFibGVCdWJibGUobyl9cmV0dXJuIHQu
ZmlyZUV2ZW50LmFwcGx5KHQsbSl9fWVsc2V7aWYoYShzKSl7bS5zaGlmdCgpO249cy5maXJlLmFw
cGx5KHMsbSl9fX1yZXR1cm4gbn0sYWRkTGlzdGVuZXI6ZnVuY3Rpb24ocCxzLHUsbil7dmFyIHI9
dGhpcyxxLHYsdCxtO2lmKGEocCkpe249cDtmb3IocSBpbiBuKXt2PW5bcV07aWYoIXIuZmlsdGVy
T3B0UmUudGVzdChxKSl7ci5hZGRMaXN0ZW5lcihxLHYuZm58fHYsdi5zY29wZXx8bi5zY29wZSx2
LmZuP3Y6bil9fX1lbHNle3A9cC50b0xvd2VyQ2FzZSgpO209ci5ldmVudHNbcF18fGg7aWYoRXh0
LmlzQm9vbGVhbihtKSl7ci5ldmVudHNbcF09bT1uZXcgaS5FdmVudChyLHApfW0uYWRkTGlzdGVu
ZXIocyx1LGEobik/bjp7fSl9fSxyZW1vdmVMaXN0ZW5lcjpmdW5jdGlvbihtLG8sbil7dmFyIHA9
dGhpcy5ldmVudHNbbS50b0xvd2VyQ2FzZSgpXTtpZihhKHApKXtwLnJlbW92ZUxpc3RlbmVyKG8s
bil9fSxwdXJnZUxpc3RlbmVyczpmdW5jdGlvbigpe3ZhciBvPXRoaXMuZXZlbnRzLG0sbjtmb3Io
biBpbiBvKXttPW9bbl07aWYoYShtKSl7bS5jbGVhckxpc3RlbmVycygpfX19LGFkZEV2ZW50czpm
dW5jdGlvbihxKXt2YXIgcD10aGlzO3AuZXZlbnRzPXAuZXZlbnRzfHx7fTtpZihFeHQuaXNTdHJp
bmcocSkpe3ZhciBtPWFyZ3VtZW50cyxuPW0ubGVuZ3RoO3doaWxlKG4tLSl7cC5ldmVudHNbbVtu
XV09cC5ldmVudHNbbVtuXV18fGh9fWVsc2V7RXh0LmFwcGx5SWYocC5ldmVudHMscSl9fSxoYXNM
aXN0ZW5lcjpmdW5jdGlvbihtKXt2YXIgbj10aGlzLmV2ZW50c1ttXTtyZXR1cm4gYShuKSYmbi5s
aXN0ZW5lcnMubGVuZ3RoPjB9LHN1c3BlbmRFdmVudHM6ZnVuY3Rpb24obSl7dGhpcy5ldmVudHNT
dXNwZW5kZWQ9aDtpZihtJiYhdGhpcy5ldmVudFF1ZXVlKXt0aGlzLmV2ZW50UXVldWU9W119fSxy
ZXN1bWVFdmVudHM6ZnVuY3Rpb24oKXt2YXIgbT10aGlzLG49bS5ldmVudFF1ZXVlfHxbXTttLmV2
ZW50c1N1c3BlbmRlZD1qO2RlbGV0ZSBtLmV2ZW50UXVldWU7ayhuLGZ1bmN0aW9uKG8pe20uZmly
ZUV2ZW50LmFwcGx5KG0sbyl9KX19O3ZhciBlPWkuT2JzZXJ2YWJsZS5wcm90b3R5cGU7ZS5vbj1l
LmFkZExpc3RlbmVyO2UudW49ZS5yZW1vdmVMaXN0ZW5lcjtpLk9ic2VydmFibGUucmVsZWFzZUNh
cHR1cmU9ZnVuY3Rpb24obSl7bS5maXJlRXZlbnQ9ZS5maXJlRXZlbnR9O2Z1bmN0aW9uIGcobixw
LG0pe3JldHVybiBmdW5jdGlvbigpe2lmKHAudGFyZ2V0PT1hcmd1bWVudHNbMF0pe24uYXBwbHko
bSxsKGFyZ3VtZW50cykpfX19ZnVuY3Rpb24gYyhwLHEsbSxuKXttLnRhc2s9bmV3IGkuRGVsYXll
ZFRhc2soKTtyZXR1cm4gZnVuY3Rpb24oKXttLnRhc2suZGVsYXkocS5idWZmZXIscCxuLGwoYXJn
dW1lbnRzKSl9fWZ1bmN0aW9uIGQobyxwLG4sbSl7cmV0dXJuIGZ1bmN0aW9uKCl7cC5yZW1vdmVM
aXN0ZW5lcihuLG0pO3JldHVybiBvLmFwcGx5KG0sYXJndW1lbnRzKX19ZnVuY3Rpb24gYihwLHEs
bSxuKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1uZXcgaS5EZWxheWVkVGFzaygpO2lmKCFtLnRh
c2tzKXttLnRhc2tzPVtdfW0udGFza3MucHVzaChvKTtvLmRlbGF5KHEuZGVsYXl8fDEwLHAsbixs
KGFyZ3VtZW50cykpfX1pLkV2ZW50PWZ1bmN0aW9uKG4sbSl7dGhpcy5uYW1lPW07dGhpcy5vYmo9
bjt0aGlzLmxpc3RlbmVycz1bXX07aS5FdmVudC5wcm90b3R5cGU9e2FkZExpc3RlbmVyOmZ1bmN0
aW9uKHAsbyxuKXt2YXIgcT10aGlzLG07bz1vfHxxLm9iajtpZighcS5pc0xpc3RlbmluZyhwLG8p
KXttPXEuY3JlYXRlTGlzdGVuZXIocCxvLG4pO2lmKHEuZmlyaW5nKXtxLmxpc3RlbmVycz1xLmxp
c3RlbmVycy5zbGljZSgwKX1xLmxpc3RlbmVycy5wdXNoKG0pfX0sY3JlYXRlTGlzdGVuZXI6ZnVu
Y3Rpb24ocSxwLHIpe3I9cnx8e30scD1wfHx0aGlzLm9iajt2YXIgbT17Zm46cSxzY29wZTpwLG9w
dGlvbnM6cn0sbj1xO2lmKHIudGFyZ2V0KXtuPWcobixyLHApfWlmKHIuZGVsYXkpe249YihuLHIs
bSxwKX1pZihyLnNpbmdsZSl7bj1kKG4sdGhpcyxxLHApfWlmKHIuYnVmZmVyKXtuPWMobixyLG0s
cCl9bS5maXJlRm49bjtyZXR1cm4gbX0sZmluZExpc3RlbmVyOmZ1bmN0aW9uKHEscCl7dmFyIHI9
dGhpcy5saXN0ZW5lcnMsbj1yLmxlbmd0aCxtLG87d2hpbGUobi0tKXttPXJbbl07aWYobSl7bz1t
LnNjb3BlO2lmKG0uZm49PXEmJihvPT1wfHxvPT10aGlzLm9iaikpe3JldHVybiBufX19cmV0dXJu
IC0xfSxpc0xpc3RlbmluZzpmdW5jdGlvbihuLG0pe3JldHVybiB0aGlzLmZpbmRMaXN0ZW5lcihu
LG0pIT0tMX0scmVtb3ZlTGlzdGVuZXI6ZnVuY3Rpb24ocixxKXt2YXIgcCxtLG4scz10aGlzLG89
ajtpZigocD1zLmZpbmRMaXN0ZW5lcihyLHEpKSE9LTEpe2lmKHMuZmlyaW5nKXtzLmxpc3RlbmVy
cz1zLmxpc3RlbmVycy5zbGljZSgwKX1tPXMubGlzdGVuZXJzW3BdO2lmKG0udGFzayl7bS50YXNr
LmNhbmNlbCgpO2RlbGV0ZSBtLnRhc2t9bj1tLnRhc2tzJiZtLnRhc2tzLmxlbmd0aDtpZihuKXt3
aGlsZShuLS0pe20udGFza3Nbbl0uY2FuY2VsKCl9ZGVsZXRlIG0udGFza3N9cy5saXN0ZW5lcnMu
c3BsaWNlKHAsMSk7bz1ofXJldHVybiBvfSxjbGVhckxpc3RlbmVyczpmdW5jdGlvbigpe3ZhciBv
PXRoaXMsbT1vLmxpc3RlbmVycyxuPW0ubGVuZ3RoO3doaWxlKG4tLSl7by5yZW1vdmVMaXN0ZW5l
cihtW25dLmZuLG1bbl0uc2NvcGUpfX0sZmlyZTpmdW5jdGlvbigpe3ZhciByPXRoaXMsbz1sKGFy
Z3VtZW50cykscT1yLmxpc3RlbmVycyxtPXEubGVuZ3RoLHA9MCxuO2lmKG0+MCl7ci5maXJpbmc9
aDtmb3IoO3A8bTtwKyspe249cVtwXTtpZihuJiZuLmZpcmVGbi5hcHBseShuLnNjb3BlfHxyLm9i
anx8d2luZG93LG8pPT09ail7cmV0dXJuKHIuZmlyaW5nPWopfX19ci5maXJpbmc9ajtyZXR1cm4g
aH19fSkoKTtFeHQuRG9tSGVscGVyPWZ1bmN0aW9uKCl7dmFyIHM9bnVsbCxqPS9eKD86YnJ8ZnJh
bWV8aHJ8aW1nfGlucHV0fGxpbmt8bWV0YXxyYW5nZXxzcGFjZXJ8d2JyfGFyZWF8cGFyYW18Y29s
KSQvaSxsPS9edGFibGV8dGJvZHl8dHJ8dGQkL2kscCxtPSJhZnRlcmJlZ2luIixuPSJhZnRlcmVu
ZCIsYz0iYmVmb3JlYmVnaW4iLG89ImJlZm9yZWVuZCIsYT0iPHRhYmxlPiIsaD0iPC90YWJsZT4i
LGI9YSsiPHRib2R5PiIsaT0iPC90Ym9keT4iK2gsaz1iKyI8dHI+IixyPSI8L3RyPiIraTtmdW5j
dGlvbiBnKHcseSx4LHosdix0KXt2YXIgdT1wLmluc2VydEh0bWwoeixFeHQuZ2V0RG9tKHcpLHEo
eSkpO3JldHVybiB4P0V4dC5nZXQodSx0cnVlKTp1fWZ1bmN0aW9uIHEoeil7dmFyIHY9IiIsdSx5
LHgsdCxBO2lmKEV4dC5pc1N0cmluZyh6KSl7dj16fWVsc2V7aWYoRXh0LmlzQXJyYXkoeikpe2Zv
cih2YXIgdz0wO3c8ei5sZW5ndGg7dysrKXtpZih6W3ddKXt2Kz1xKHpbd10pfX19ZWxzZXt2Kz0i
PCIrKHoudGFnPXoudGFnfHwiZGl2Iik7RXh0Lml0ZXJhdGUoeixmdW5jdGlvbihCLEMpe2lmKCEv
dGFnfGNoaWxkcmVufGNufGh0bWwkL2kudGVzdChCKSl7aWYoRXh0LmlzT2JqZWN0KEMpKXt2Kz0i
ICIrQisnPSInO0V4dC5pdGVyYXRlKEMsZnVuY3Rpb24oRSxEKXt2Kz1FKyI6IitEKyI7In0pO3Yr
PSciJ31lbHNle3YrPSIgIisoe2NsczoiY2xhc3MiLGh0bWxGb3I6ImZvciJ9W0JdfHxCKSsnPSIn
K0MrJyInfX19KTtpZihqLnRlc3Qoei50YWcpKXt2Kz0iLz4ifWVsc2V7dis9Ij4iO2lmKChBPXou
Y2hpbGRyZW58fHouY24pKXt2Kz1xKEEpfWVsc2V7aWYoei5odG1sKXt2Kz16Lmh0bWx9fXYrPSI8
LyIrei50YWcrIj4ifX19cmV0dXJuIHZ9ZnVuY3Rpb24gZShBLHgsdyx5KXtzLmlubmVySFRNTD1b
eCx3LHldLmpvaW4oIiIpO3ZhciB0PS0xLHY9cyx1O3doaWxlKCsrdDxBKXt2PXYuZmlyc3RDaGls
ZH1pZih1PXYubmV4dFNpYmxpbmcpe3ZhciB6PWRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21l
bnQoKTt3aGlsZSh2KXt1PXYubmV4dFNpYmxpbmc7ei5hcHBlbmRDaGlsZCh2KTt2PXV9dj16fXJl
dHVybiB2fWZ1bmN0aW9uIGQodCx1LHcsdil7dmFyIHgseTtzPXN8fGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoImRpdiIpO2lmKHQ9PSJ0ZCImJih1PT1tfHx1PT1vKXx8IS90ZHx0cnx0Ym9keS9pLnRl
c3QodCkmJih1PT1jfHx1PT1uKSl7cmV0dXJufXk9dT09Yz93OnU9PW4/dy5uZXh0U2libGluZzp1
PT1tP3cuZmlyc3RDaGlsZDpudWxsO2lmKHU9PWN8fHU9PW4pe3c9dy5wYXJlbnROb2RlfWlmKHQ9
PSJ0ZCJ8fCh0PT0idHIiJiYodT09b3x8dT09bSkpKXt4PWUoNCxrLHYscil9ZWxzZXtpZigodD09
InRib2R5IiYmKHU9PW98fHU9PW0pKXx8KHQ9PSJ0ciImJih1PT1jfHx1PT1uKSkpe3g9ZSgzLGIs
dixpKX1lbHNle3g9ZSgyLGEsdixoKX19dy5pbnNlcnRCZWZvcmUoeCx5KTtyZXR1cm4geH1wPXtt
YXJrdXA6ZnVuY3Rpb24odCl7cmV0dXJuIHEodCl9LGFwcGx5U3R5bGVzOmZ1bmN0aW9uKHcseCl7
aWYoeCl7dmFyIHU9MCx0LHY7dz1FeHQuZmx5KHcpO2lmKEV4dC5pc0Z1bmN0aW9uKHgpKXt4PXgu
Y2FsbCgpfWlmKEV4dC5pc1N0cmluZyh4KSl7eD14LnRyaW0oKS5zcGxpdCgvXHMqKD86Onw7KVxz
Ki8pO2Zvcih0PXgubGVuZ3RoO3U8dDspe3cuc2V0U3R5bGUoeFt1KytdLHhbdSsrXSl9fWVsc2V7
aWYoRXh0LmlzT2JqZWN0KHgpKXt3LnNldFN0eWxlKHgpfX19fSxpbnNlcnRIdG1sOmZ1bmN0aW9u
KHksdCx6KXt2YXIgeD17fSx2LEIsQSxDLHcsdTt5PXkudG9Mb3dlckNhc2UoKTt4W2NdPVsiQmVm
b3JlQmVnaW4iLCJwcmV2aW91c1NpYmxpbmciXTt4W25dPVsiQWZ0ZXJFbmQiLCJuZXh0U2libGlu
ZyJdO2lmKHQuaW5zZXJ0QWRqYWNlbnRIVE1MKXtpZihsLnRlc3QodC50YWdOYW1lKSYmKHU9ZCh0
LnRhZ05hbWUudG9Mb3dlckNhc2UoKSx5LHQseikpKXtyZXR1cm4gdX14W21dPVsiQWZ0ZXJCZWdp
biIsImZpcnN0Q2hpbGQiXTt4W29dPVsiQmVmb3JlRW5kIiwibGFzdENoaWxkIl07aWYoKHY9eFt5
XSkpe3QuaW5zZXJ0QWRqYWNlbnRIVE1MKHZbMF0seik7cmV0dXJuIHRbdlsxXV19fWVsc2V7QT10
Lm93bmVyRG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtCPSJzZXRTdGFydCIrKC9lbmQvaS50ZXN0KHkp
PyJBZnRlciI6IkJlZm9yZSIpO2lmKHhbeV0pe0FbQl0odCk7Qz1BLmNyZWF0ZUNvbnRleHR1YWxG
cmFnbWVudCh6KTt0LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKEMseT09Yz90OnQubmV4dFNpYmxp
bmcpO3JldHVybiB0Wyh5PT1jPyJwcmV2aW91cyI6Im5leHQiKSsiU2libGluZyJdfWVsc2V7dz0o
eT09bT8iZmlyc3QiOiJsYXN0IikrIkNoaWxkIjtpZih0LmZpcnN0Q2hpbGQpe0FbQl0odFt3XSk7
Qz1BLmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCh6KTtpZih5PT1tKXt0Lmluc2VydEJlZm9yZShD
LHQuZmlyc3RDaGlsZCl9ZWxzZXt0LmFwcGVuZENoaWxkKEMpfX1lbHNle3QuaW5uZXJIVE1MPXp9
cmV0dXJuIHRbd119fXRocm93J0lsbGVnYWwgaW5zZXJ0aW9uIHBvaW50IC0+ICInK3krJyInfSxp
bnNlcnRCZWZvcmU6ZnVuY3Rpb24odCx2LHUpe3JldHVybiBnKHQsdix1LGMpfSxpbnNlcnRBZnRl
cjpmdW5jdGlvbih0LHYsdSl7cmV0dXJuIGcodCx2LHUsbiwibmV4dFNpYmxpbmciKX0saW5zZXJ0
Rmlyc3Q6ZnVuY3Rpb24odCx2LHUpe3JldHVybiBnKHQsdix1LG0sImZpcnN0Q2hpbGQiKX0sYXBw
ZW5kOmZ1bmN0aW9uKHQsdix1KXtyZXR1cm4gZyh0LHYsdSxvLCIiLHRydWUpfSxvdmVyd3JpdGU6
ZnVuY3Rpb24odCx2LHUpe3Q9RXh0LmdldERvbSh0KTt0LmlubmVySFRNTD1xKHYpO3JldHVybiB1
P0V4dC5nZXQodC5maXJzdENoaWxkKTp0LmZpcnN0Q2hpbGR9LGNyZWF0ZUh0bWw6cX07cmV0dXJu
IHB9KCk7RXh0LlRlbXBsYXRlPWZ1bmN0aW9uKGQpe3ZhciBlPXRoaXMsYj1hcmd1bWVudHMsYz1b
XTtpZihFeHQuaXNBcnJheShkKSl7ZD1kLmpvaW4oIiIpfWVsc2V7aWYoYi5sZW5ndGg+MSl7RXh0
LmVhY2goYixmdW5jdGlvbihhKXtpZihFeHQuaXNPYmplY3QoYSkpe0V4dC5hcHBseShlLGEpfWVs
c2V7Yy5wdXNoKGEpfX0pO2Q9Yy5qb2luKCIiKX19ZS5odG1sPWQ7aWYoZS5jb21waWxlZCl7ZS5j
b21waWxlKCl9fTtFeHQuVGVtcGxhdGUucHJvdG90eXBlPXtyZTovXHsoW1x3LV0rKVx9L2csYXBw
bHlUZW1wbGF0ZTpmdW5jdGlvbihhKXt2YXIgYj10aGlzO3JldHVybiBiLmNvbXBpbGVkP2IuY29t
cGlsZWQoYSk6Yi5odG1sLnJlcGxhY2UoYi5yZSxmdW5jdGlvbihjLGQpe3JldHVybiBhW2RdIT09
dW5kZWZpbmVkP2FbZF06IiJ9KX0sc2V0OmZ1bmN0aW9uKGEsYyl7dmFyIGI9dGhpcztiLmh0bWw9
YTtiLmNvbXBpbGVkPW51bGw7cmV0dXJuIGM/Yi5jb21waWxlKCk6Yn0sY29tcGlsZTpmdW5jdGlv
bigpe3ZhciBtZT10aGlzLHNlcD1FeHQuaXNHZWNrbz8iKyI6IiwiO2Z1bmN0aW9uIGZuKG0sbmFt
ZSl7bmFtZT0idmFsdWVzWyciK25hbWUrIiddIjtyZXR1cm4iJyIrc2VwKyIoIituYW1lKyIgPT0g
dW5kZWZpbmVkID8gJycgOiAiK25hbWUrIikiK3NlcCsiJyJ9ZXZhbCgidGhpcy5jb21waWxlZCA9
IGZ1bmN0aW9uKHZhbHVlcyl7IHJldHVybiAiKyhFeHQuaXNHZWNrbz8iJyI6IlsnIikrbWUuaHRt
bC5yZXBsYWNlKC9cXC9nLCJcXFxcIikucmVwbGFjZSgvKFxyXG58XG4pL2csIlxcbiIpLnJlcGxh
Y2UoLycvZywiXFwnIikucmVwbGFjZSh0aGlzLnJlLGZuKSsoRXh0LmlzR2Vja28/Iic7fTsiOiIn
XS5qb2luKCcnKTt9OyIpKTtyZXR1cm4gbWV9LGluc2VydEZpcnN0OmZ1bmN0aW9uKGIsYSxjKXty
ZXR1cm4gdGhpcy5kb0luc2VydCgiYWZ0ZXJCZWdpbiIsYixhLGMpfSxpbnNlcnRCZWZvcmU6ZnVu
Y3Rpb24oYixhLGMpe3JldHVybiB0aGlzLmRvSW5zZXJ0KCJiZWZvcmVCZWdpbiIsYixhLGMpfSxp
bnNlcnRBZnRlcjpmdW5jdGlvbihiLGEsYyl7cmV0dXJuIHRoaXMuZG9JbnNlcnQoImFmdGVyRW5k
IixiLGEsYyl9LGFwcGVuZDpmdW5jdGlvbihiLGEsYyl7cmV0dXJuIHRoaXMuZG9JbnNlcnQoImJl
Zm9yZUVuZCIsYixhLGMpfSxkb0luc2VydDpmdW5jdGlvbihjLGUsYixhKXtlPUV4dC5nZXREb20o
ZSk7dmFyIGQ9RXh0LkRvbUhlbHBlci5pbnNlcnRIdG1sKGMsZSx0aGlzLmFwcGx5VGVtcGxhdGUo
YikpO3JldHVybiBhP0V4dC5nZXQoZCx0cnVlKTpkfSxvdmVyd3JpdGU6ZnVuY3Rpb24oYixhLGMp
e2I9RXh0LmdldERvbShiKTtiLmlubmVySFRNTD10aGlzLmFwcGx5VGVtcGxhdGUoYSk7cmV0dXJu
IGM/RXh0LmdldChiLmZpcnN0Q2hpbGQsdHJ1ZSk6Yi5maXJzdENoaWxkfX07RXh0LlRlbXBsYXRl
LnByb3RvdHlwZS5hcHBseT1FeHQuVGVtcGxhdGUucHJvdG90eXBlLmFwcGx5VGVtcGxhdGU7RXh0
LlRlbXBsYXRlLmZyb209ZnVuY3Rpb24oYixhKXtiPUV4dC5nZXREb20oYik7cmV0dXJuIG5ldyBF
eHQuVGVtcGxhdGUoYi52YWx1ZXx8Yi5pbm5lckhUTUwsYXx8IiIpfTtFeHQuRG9tUXVlcnk9ZnVu
Y3Rpb24oKXt2YXIgY2FjaGU9e30sc2ltcGxlQ2FjaGU9e30sdmFsdWVDYWNoZT17fSxub25TcGFj
ZT0vXFMvLHRyaW1SZT0vXlxzK3xccyskL2csdHBsUmU9L1x7KFxkKylcfS9nLG1vZGVSZT0vXihc
cz9bXC8+K35dXHM/fFxzfCQpLyx0YWdUb2tlblJlPS9eKCMpPyhbXHctXCpdKykvLG50aFJlPS8o
XGQqKW5cKz8oXGQqKS8sbnRoUmUyPS9cRC8saXNJRT13aW5kb3cuQWN0aXZlWE9iamVjdD90cnVl
OmZhbHNlLGtleT0zMDgwMztldmFsKCJ2YXIgYmF0Y2ggPSAzMDgwMzsiKTtmdW5jdGlvbiBjaGls
ZChwLGluZGV4KXt2YXIgaT0wLG49cC5maXJzdENoaWxkO3doaWxlKG4pe2lmKG4ubm9kZVR5cGU9
PTEpe2lmKCsraT09aW5kZXgpe3JldHVybiBufX1uPW4ubmV4dFNpYmxpbmd9cmV0dXJuIG51bGx9
ZnVuY3Rpb24gbmV4dChuKXt3aGlsZSgobj1uLm5leHRTaWJsaW5nKSYmbi5ub2RlVHlwZSE9MSl7
fXJldHVybiBufWZ1bmN0aW9uIHByZXYobil7d2hpbGUoKG49bi5wcmV2aW91c1NpYmxpbmcpJiZu
Lm5vZGVUeXBlIT0xKXt9cmV0dXJuIG59ZnVuY3Rpb24gY2hpbGRyZW4oZCl7dmFyIG49ZC5maXJz
dENoaWxkLG5pPS0xLG54O3doaWxlKG4pe254PW4ubmV4dFNpYmxpbmc7aWYobi5ub2RlVHlwZT09
MyYmIW5vblNwYWNlLnRlc3Qobi5ub2RlVmFsdWUpKXtkLnJlbW92ZUNoaWxkKG4pfWVsc2V7bi5u
b2RlSW5kZXg9KytuaX1uPW54fXJldHVybiB0aGlzfWZ1bmN0aW9uIGJ5Q2xhc3NOYW1lKGMsYSx2
KXtpZighdil7cmV0dXJuIGN9dmFyIHI9W10scmk9LTEsY247Zm9yKHZhciBpPTAsY2k7Y2k9Y1tp
XTtpKyspe2lmKCgiICIrY2kuY2xhc3NOYW1lKyIgIikuaW5kZXhPZih2KSE9LTEpe3JbKytyaV09
Y2l9fXJldHVybiByfWZ1bmN0aW9uIGF0dHJWYWx1ZShuLGF0dHIpe2lmKCFuLnRhZ05hbWUmJnR5
cGVvZiBuLmxlbmd0aCE9InVuZGVmaW5lZCIpe249blswXX1pZighbil7cmV0dXJuIG51bGx9aWYo
YXR0cj09ImZvciIpe3JldHVybiBuLmh0bWxGb3J9aWYoYXR0cj09ImNsYXNzInx8YXR0cj09ImNs
YXNzTmFtZSIpe3JldHVybiBuLmNsYXNzTmFtZX1yZXR1cm4gbi5nZXRBdHRyaWJ1dGUoYXR0cil8
fG5bYXR0cl19ZnVuY3Rpb24gZ2V0Tm9kZXMobnMsbW9kZSx0YWdOYW1lKXt2YXIgcmVzdWx0PVtd
LHJpPS0xLGNzO2lmKCFucyl7cmV0dXJuIHJlc3VsdH10YWdOYW1lPXRhZ05hbWV8fCIqIjtpZih0
eXBlb2YgbnMuZ2V0RWxlbWVudHNCeVRhZ05hbWUhPSJ1bmRlZmluZWQiKXtucz1bbnNdfWlmKCFt
b2RlKXtmb3IodmFyIGk9MCxuaTtuaT1uc1tpXTtpKyspe2NzPW5pLmdldEVsZW1lbnRzQnlUYWdO
YW1lKHRhZ05hbWUpO2Zvcih2YXIgaj0wLGNpO2NpPWNzW2pdO2orKyl7cmVzdWx0WysrcmldPWNp
fX19ZWxzZXtpZihtb2RlPT0iLyJ8fG1vZGU9PSI+Iil7dmFyIHV0YWc9dGFnTmFtZS50b1VwcGVy
Q2FzZSgpO2Zvcih2YXIgaT0wLG5pLGNuO25pPW5zW2ldO2krKyl7Y249bmkuY2hpbGROb2Rlcztm
b3IodmFyIGo9MCxjajtjaj1jbltqXTtqKyspe2lmKGNqLm5vZGVOYW1lPT11dGFnfHxjai5ub2Rl
TmFtZT09dGFnTmFtZXx8dGFnTmFtZT09IioiKXtyZXN1bHRbKytyaV09Y2p9fX19ZWxzZXtpZiht
b2RlPT0iKyIpe3ZhciB1dGFnPXRhZ05hbWUudG9VcHBlckNhc2UoKTtmb3IodmFyIGk9MCxuO249
bnNbaV07aSsrKXt3aGlsZSgobj1uLm5leHRTaWJsaW5nKSYmbi5ub2RlVHlwZSE9MSl7fWlmKG4m
JihuLm5vZGVOYW1lPT11dGFnfHxuLm5vZGVOYW1lPT10YWdOYW1lfHx0YWdOYW1lPT0iKiIpKXty
ZXN1bHRbKytyaV09bn19fWVsc2V7aWYobW9kZT09In4iKXt2YXIgdXRhZz10YWdOYW1lLnRvVXBw
ZXJDYXNlKCk7Zm9yKHZhciBpPTAsbjtuPW5zW2ldO2krKyl7d2hpbGUoKG49bi5uZXh0U2libGlu
Zykpe2lmKG4ubm9kZU5hbWU9PXV0YWd8fG4ubm9kZU5hbWU9PXRhZ05hbWV8fHRhZ05hbWU9PSIq
Iil7cmVzdWx0WysrcmldPW59fX19fX19cmV0dXJuIHJlc3VsdH1mdW5jdGlvbiBjb25jYXQoYSxi
KXtpZihiLnNsaWNlKXtyZXR1cm4gYS5jb25jYXQoYil9Zm9yKHZhciBpPTAsbD1iLmxlbmd0aDtp
PGw7aSsrKXthW2EubGVuZ3RoXT1iW2ldfXJldHVybiBhfWZ1bmN0aW9uIGJ5VGFnKGNzLHRhZ05h
bWUpe2lmKGNzLnRhZ05hbWV8fGNzPT1kb2N1bWVudCl7Y3M9W2NzXX1pZighdGFnTmFtZSl7cmV0
dXJuIGNzfXZhciByPVtdLHJpPS0xO3RhZ05hbWU9dGFnTmFtZS50b0xvd2VyQ2FzZSgpO2Zvcih2
YXIgaT0wLGNpO2NpPWNzW2ldO2krKyl7aWYoY2kubm9kZVR5cGU9PTEmJmNpLnRhZ05hbWUudG9M
b3dlckNhc2UoKT09dGFnTmFtZSl7clsrK3JpXT1jaX19cmV0dXJuIHJ9ZnVuY3Rpb24gYnlJZChj
cyxhdHRyLGlkKXtpZihjcy50YWdOYW1lfHxjcz09ZG9jdW1lbnQpe2NzPVtjc119aWYoIWlkKXty
ZXR1cm4gY3N9dmFyIHI9W10scmk9LTE7Zm9yKHZhciBpPTAsY2k7Y2k9Y3NbaV07aSsrKXtpZihj
aSYmY2kuaWQ9PWlkKXtyWysrcmldPWNpO3JldHVybiByfX1yZXR1cm4gcn1mdW5jdGlvbiBieUF0
dHJpYnV0ZShjcyxhdHRyLHZhbHVlLG9wLGN1c3RvbSl7dmFyIHI9W10scmk9LTEsc3Q9Y3VzdG9t
PT0ieyIsZj1FeHQuRG9tUXVlcnkub3BlcmF0b3JzW29wXSxhLGloO2Zvcih2YXIgaT0wLGNpO2Np
PWNzW2ldO2krKyl7aWYoY2kubm9kZVR5cGUhPTEpe2NvbnRpbnVlfWloPWNpLmlubmVySFRNTDtp
ZihpaCE9PW51bGwmJmloIT09dW5kZWZpbmVkKXtpZihzdCl7YT1FeHQuRG9tUXVlcnkuZ2V0U3R5
bGUoY2ksYXR0cil9ZWxzZXtpZihhdHRyPT0iY2xhc3MifHxhdHRyPT0iY2xhc3NOYW1lIil7YT1j
aS5jbGFzc05hbWV9ZWxzZXtpZihhdHRyPT0iZm9yIil7YT1jaS5odG1sRm9yfWVsc2V7aWYoYXR0
cj09ImhyZWYiKXthPWNpLmdldEF0dHJpYnV0ZSgiaHJlZiIsMil9ZWxzZXthPWNpLmdldEF0dHJp
YnV0ZShhdHRyKX19fX19ZWxzZXthPWNpLmdldEF0dHJpYnV0ZShhdHRyKX1pZigoZiYmZihhLHZh
bHVlKSl8fCghZiYmYSkpe3JbKytyaV09Y2l9fXJldHVybiByfWZ1bmN0aW9uIGJ5UHNldWRvKGNz
LG5hbWUsdmFsdWUpe3JldHVybiBFeHQuRG9tUXVlcnkucHNldWRvc1tuYW1lXShjcyx2YWx1ZSl9
ZnVuY3Rpb24gbm9kdXBJRVhtbChjcyl7dmFyIGQ9KytrZXkscjtjc1swXS5zZXRBdHRyaWJ1dGUo
Il9ub2R1cCIsZCk7cj1bY3NbMF1dO2Zvcih2YXIgaT0xLGxlbj1jcy5sZW5ndGg7aTxsZW47aSsr
KXt2YXIgYz1jc1tpXTtpZighYy5nZXRBdHRyaWJ1dGUoIl9ub2R1cCIpIT1kKXtjLnNldEF0dHJp
YnV0ZSgiX25vZHVwIixkKTtyW3IubGVuZ3RoXT1jfX1mb3IodmFyIGk9MCxsZW49Y3MubGVuZ3Ro
O2k8bGVuO2krKyl7Y3NbaV0ucmVtb3ZlQXR0cmlidXRlKCJfbm9kdXAiKX1yZXR1cm4gcn1mdW5j
dGlvbiBub2R1cChjcyl7aWYoIWNzKXtyZXR1cm5bXX12YXIgbGVuPWNzLmxlbmd0aCxjLGkscj1j
cyxjaixyaT0tMTtpZighbGVufHx0eXBlb2YgY3Mubm9kZVR5cGUhPSJ1bmRlZmluZWQifHxsZW49
PTEpe3JldHVybiBjc31pZihpc0lFJiZ0eXBlb2YgY3NbMF0uc2VsZWN0U2luZ2xlTm9kZSE9InVu
ZGVmaW5lZCIpe3JldHVybiBub2R1cElFWG1sKGNzKX12YXIgZD0rK2tleTtjc1swXS5fbm9kdXA9
ZDtmb3IoaT0xO2M9Y3NbaV07aSsrKXtpZihjLl9ub2R1cCE9ZCl7Yy5fbm9kdXA9ZH1lbHNle3I9
W107Zm9yKHZhciBqPTA7ajxpO2orKyl7clsrK3JpXT1jc1tqXX1mb3Ioaj1pKzE7Y2o9Y3Nbal07
aisrKXtpZihjai5fbm9kdXAhPWQpe2NqLl9ub2R1cD1kO3JbKytyaV09Y2p9fXJldHVybiByfX1y
ZXR1cm4gcn1mdW5jdGlvbiBxdWlja0RpZmZJRVhtbChjMSxjMil7dmFyIGQ9KytrZXkscj1bXTtm
b3IodmFyIGk9MCxsZW49YzEubGVuZ3RoO2k8bGVuO2krKyl7YzFbaV0uc2V0QXR0cmlidXRlKCJf
cWRpZmYiLGQpfWZvcih2YXIgaT0wLGxlbj1jMi5sZW5ndGg7aTxsZW47aSsrKXtpZihjMltpXS5n
ZXRBdHRyaWJ1dGUoIl9xZGlmZiIpIT1kKXtyW3IubGVuZ3RoXT1jMltpXX19Zm9yKHZhciBpPTAs
bGVuPWMxLmxlbmd0aDtpPGxlbjtpKyspe2MxW2ldLnJlbW92ZUF0dHJpYnV0ZSgiX3FkaWZmIil9
cmV0dXJuIHJ9ZnVuY3Rpb24gcXVpY2tEaWZmKGMxLGMyKXt2YXIgbGVuMT1jMS5sZW5ndGgsZD0r
K2tleSxyPVtdO2lmKCFsZW4xKXtyZXR1cm4gYzJ9aWYoaXNJRSYmdHlwZW9mIGMxWzBdLnNlbGVj
dFNpbmdsZU5vZGUhPSJ1bmRlZmluZWQiKXtyZXR1cm4gcXVpY2tEaWZmSUVYbWwoYzEsYzIpfWZv
cih2YXIgaT0wO2k8bGVuMTtpKyspe2MxW2ldLl9xZGlmZj1kfWZvcih2YXIgaT0wLGxlbj1jMi5s
ZW5ndGg7aTxsZW47aSsrKXtpZihjMltpXS5fcWRpZmYhPWQpe3Jbci5sZW5ndGhdPWMyW2ldfX1y
ZXR1cm4gcn1mdW5jdGlvbiBxdWlja0lkKG5zLG1vZGUscm9vdCxpZCl7aWYobnM9PXJvb3Qpe3Zh
ciBkPXJvb3Qub3duZXJEb2N1bWVudHx8cm9vdDtyZXR1cm4gZC5nZXRFbGVtZW50QnlJZChpZCl9
bnM9Z2V0Tm9kZXMobnMsbW9kZSwiKiIpO3JldHVybiBieUlkKG5zLG51bGwsaWQpfXJldHVybntn
ZXRTdHlsZTpmdW5jdGlvbihlbCxuYW1lKXtyZXR1cm4gRXh0LmZseShlbCkuZ2V0U3R5bGUobmFt
ZSl9LGNvbXBpbGU6ZnVuY3Rpb24ocGF0aCx0eXBlKXt0eXBlPXR5cGV8fCJzZWxlY3QiO3ZhciBm
bj1bInZhciBmID0gZnVuY3Rpb24ocm9vdCl7XG4gdmFyIG1vZGU7ICsrYmF0Y2g7IHZhciBuID0g
cm9vdCB8fCBkb2N1bWVudDtcbiJdLHE9cGF0aCxtb2RlLGxxLHRrPUV4dC5Eb21RdWVyeS5tYXRj
aGVycyx0a2xlbj10ay5sZW5ndGgsbW0sbG1vZGU9cS5tYXRjaChtb2RlUmUpO2lmKGxtb2RlJiZs
bW9kZVsxXSl7Zm5bZm4ubGVuZ3RoXT0nbW9kZT0iJytsbW9kZVsxXS5yZXBsYWNlKHRyaW1SZSwi
IikrJyI7JztxPXEucmVwbGFjZShsbW9kZVsxXSwiIil9d2hpbGUocGF0aC5zdWJzdHIoMCwxKT09
Ii8iKXtwYXRoPXBhdGguc3Vic3RyKDEpfXdoaWxlKHEmJmxxIT1xKXtscT1xO3ZhciB0bT1xLm1h
dGNoKHRhZ1Rva2VuUmUpO2lmKHR5cGU9PSJzZWxlY3QiKXtpZih0bSl7aWYodG1bMV09PSIjIil7
Zm5bZm4ubGVuZ3RoXT0nbiA9IHF1aWNrSWQobiwgbW9kZSwgcm9vdCwgIicrdG1bMl0rJyIpOyd9
ZWxzZXtmbltmbi5sZW5ndGhdPSduID0gZ2V0Tm9kZXMobiwgbW9kZSwgIicrdG1bMl0rJyIpOyd9
cT1xLnJlcGxhY2UodG1bMF0sIiIpfWVsc2V7aWYocS5zdWJzdHIoMCwxKSE9IkAiKXtmbltmbi5s
ZW5ndGhdPSduID0gZ2V0Tm9kZXMobiwgbW9kZSwgIioiKTsnfX19ZWxzZXtpZih0bSl7aWYodG1b
MV09PSIjIil7Zm5bZm4ubGVuZ3RoXT0nbiA9IGJ5SWQobiwgbnVsbCwgIicrdG1bMl0rJyIpOyd9
ZWxzZXtmbltmbi5sZW5ndGhdPSduID0gYnlUYWcobiwgIicrdG1bMl0rJyIpOyd9cT1xLnJlcGxh
Y2UodG1bMF0sIiIpfX13aGlsZSghKG1tPXEubWF0Y2gobW9kZVJlKSkpe3ZhciBtYXRjaGVkPWZh
bHNlO2Zvcih2YXIgaj0wO2o8dGtsZW47aisrKXt2YXIgdD10a1tqXTt2YXIgbT1xLm1hdGNoKHQu
cmUpO2lmKG0pe2ZuW2ZuLmxlbmd0aF09dC5zZWxlY3QucmVwbGFjZSh0cGxSZSxmdW5jdGlvbih4
LGkpe3JldHVybiBtW2ldfSk7cT1xLnJlcGxhY2UobVswXSwiIik7bWF0Y2hlZD10cnVlO2JyZWFr
fX1pZighbWF0Y2hlZCl7dGhyb3cnRXJyb3IgcGFyc2luZyBzZWxlY3RvciwgcGFyc2luZyBmYWls
ZWQgYXQgIicrcSsnIid9fWlmKG1tWzFdKXtmbltmbi5sZW5ndGhdPSdtb2RlPSInK21tWzFdLnJl
cGxhY2UodHJpbVJlLCIiKSsnIjsnO3E9cS5yZXBsYWNlKG1tWzFdLCIiKX19Zm5bZm4ubGVuZ3Ro
XT0icmV0dXJuIG5vZHVwKG4pO1xufSI7ZXZhbChmbi5qb2luKCIiKSk7cmV0dXJuIGZ9LHNlbGVj
dDpmdW5jdGlvbihwYXRoLHJvb3QsdHlwZSl7aWYoIXJvb3R8fHJvb3Q9PWRvY3VtZW50KXtyb290
PWRvY3VtZW50fWlmKHR5cGVvZiByb290PT0ic3RyaW5nIil7cm9vdD1kb2N1bWVudC5nZXRFbGVt
ZW50QnlJZChyb290KX12YXIgcGF0aHM9cGF0aC5zcGxpdCgiLCIpLHJlc3VsdHM9W107Zm9yKHZh
ciBpPTAsbGVuPXBhdGhzLmxlbmd0aDtpPGxlbjtpKyspe3ZhciBwPXBhdGhzW2ldLnJlcGxhY2Uo
dHJpbVJlLCIiKTtpZighY2FjaGVbcF0pe2NhY2hlW3BdPUV4dC5Eb21RdWVyeS5jb21waWxlKHAp
O2lmKCFjYWNoZVtwXSl7dGhyb3cgcCsiIGlzIG5vdCBhIHZhbGlkIHNlbGVjdG9yIn19dmFyIHJl
c3VsdD1jYWNoZVtwXShyb290KTtpZihyZXN1bHQmJnJlc3VsdCE9ZG9jdW1lbnQpe3Jlc3VsdHM9
cmVzdWx0cy5jb25jYXQocmVzdWx0KX19aWYocGF0aHMubGVuZ3RoPjEpe3JldHVybiBub2R1cChy
ZXN1bHRzKX1yZXR1cm4gcmVzdWx0c30sc2VsZWN0Tm9kZTpmdW5jdGlvbihwYXRoLHJvb3Qpe3Jl
dHVybiBFeHQuRG9tUXVlcnkuc2VsZWN0KHBhdGgscm9vdClbMF19LHNlbGVjdFZhbHVlOmZ1bmN0
aW9uKHBhdGgscm9vdCxkZWZhdWx0VmFsdWUpe3BhdGg9cGF0aC5yZXBsYWNlKHRyaW1SZSwiIik7
aWYoIXZhbHVlQ2FjaGVbcGF0aF0pe3ZhbHVlQ2FjaGVbcGF0aF09RXh0LkRvbVF1ZXJ5LmNvbXBp
bGUocGF0aCwic2VsZWN0Iil9dmFyIG49dmFsdWVDYWNoZVtwYXRoXShyb290KSx2O249blswXT9u
WzBdOm47aWYodHlwZW9mIG4ubm9ybWFsaXplPT0iZnVuY3Rpb24iKXtuLm5vcm1hbGl6ZSgpfXY9
KG4mJm4uZmlyc3RDaGlsZD9uLmZpcnN0Q2hpbGQubm9kZVZhbHVlOm51bGwpO3JldHVybigodj09
PW51bGx8fHY9PT11bmRlZmluZWR8fHY9PT0iIik/ZGVmYXVsdFZhbHVlOnYpfSxzZWxlY3ROdW1i
ZXI6ZnVuY3Rpb24ocGF0aCxyb290LGRlZmF1bHRWYWx1ZSl7dmFyIHY9RXh0LkRvbVF1ZXJ5LnNl
bGVjdFZhbHVlKHBhdGgscm9vdCxkZWZhdWx0VmFsdWV8fDApO3JldHVybiBwYXJzZUZsb2F0KHYp
fSxpczpmdW5jdGlvbihlbCxzcyl7aWYodHlwZW9mIGVsPT0ic3RyaW5nIil7ZWw9ZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoZWwpfXZhciBpc0FycmF5PUV4dC5pc0FycmF5KGVsKSxyZXN1bHQ9RXh0
LkRvbVF1ZXJ5LmZpbHRlcihpc0FycmF5P2VsOltlbF0sc3MpO3JldHVybiBpc0FycmF5PyhyZXN1
bHQubGVuZ3RoPT1lbC5sZW5ndGgpOihyZXN1bHQubGVuZ3RoPjApfSxmaWx0ZXI6ZnVuY3Rpb24o
ZWxzLHNzLG5vbk1hdGNoZXMpe3NzPXNzLnJlcGxhY2UodHJpbVJlLCIiKTtpZighc2ltcGxlQ2Fj
aGVbc3NdKXtzaW1wbGVDYWNoZVtzc109RXh0LkRvbVF1ZXJ5LmNvbXBpbGUoc3MsInNpbXBsZSIp
fXZhciByZXN1bHQ9c2ltcGxlQ2FjaGVbc3NdKGVscyk7cmV0dXJuIG5vbk1hdGNoZXM/cXVpY2tE
aWZmKHJlc3VsdCxlbHMpOnJlc3VsdH0sbWF0Y2hlcnM6W3tyZTovXlwuKFtcdy1dKykvLHNlbGVj
dDonbiA9IGJ5Q2xhc3NOYW1lKG4sIG51bGwsICIgezF9ICIpOyd9LHtyZTovXlw6KFtcdy1dKyko
PzpcKCgoPzpbXlxzPlwvXSp8Lio/KSlcKSk/LyxzZWxlY3Q6J24gPSBieVBzZXVkbyhuLCAiezF9
IiwgInsyfSIpOyd9LHtyZTovXig/OihbXFtce10pKD86QCk/KFtcdy1dKylccz8oPzooPXwuPSlc
cz9bJyJdPyguKj8pWyInXT8pP1tcXVx9XSkvLHNlbGVjdDonbiA9IGJ5QXR0cmlidXRlKG4sICJ7
Mn0iLCAiezR9IiwgInszfSIsICJ7MX0iKTsnfSx7cmU6L14jKFtcdy1dKykvLHNlbGVjdDonbiA9
IGJ5SWQobiwgbnVsbCwgInsxfSIpOyd9LHtyZTovXkAoW1x3LV0rKS8sc2VsZWN0OidyZXR1cm4g
e2ZpcnN0Q2hpbGQ6e25vZGVWYWx1ZTphdHRyVmFsdWUobiwgInsxfSIpfX07J31dLG9wZXJhdG9y
czp7Ij0iOmZ1bmN0aW9uKGEsdil7cmV0dXJuIGE9PXZ9LCIhPSI6ZnVuY3Rpb24oYSx2KXtyZXR1
cm4gYSE9dn0sIl49IjpmdW5jdGlvbihhLHYpe3JldHVybiBhJiZhLnN1YnN0cigwLHYubGVuZ3Ro
KT09dn0sIiQ9IjpmdW5jdGlvbihhLHYpe3JldHVybiBhJiZhLnN1YnN0cihhLmxlbmd0aC12Lmxl
bmd0aCk9PXZ9LCIqPSI6ZnVuY3Rpb24oYSx2KXtyZXR1cm4gYSYmYS5pbmRleE9mKHYpIT09LTF9
LCIlPSI6ZnVuY3Rpb24oYSx2KXtyZXR1cm4oYSV2KT09MH0sInw9IjpmdW5jdGlvbihhLHYpe3Jl
dHVybiBhJiYoYT09dnx8YS5zdWJzdHIoMCx2Lmxlbmd0aCsxKT09disiLSIpfSwifj0iOmZ1bmN0
aW9uKGEsdil7cmV0dXJuIGEmJigiICIrYSsiICIpLmluZGV4T2YoIiAiK3YrIiAiKSE9LTF9fSxw
c2V1ZG9zOnsiZmlyc3QtY2hpbGQiOmZ1bmN0aW9uKGMpe3ZhciByPVtdLHJpPS0xLG47Zm9yKHZh
ciBpPTAsY2k7Y2k9bj1jW2ldO2krKyl7d2hpbGUoKG49bi5wcmV2aW91c1NpYmxpbmcpJiZuLm5v
ZGVUeXBlIT0xKXt9aWYoIW4pe3JbKytyaV09Y2l9fXJldHVybiByfSwibGFzdC1jaGlsZCI6ZnVu
Y3Rpb24oYyl7dmFyIHI9W10scmk9LTEsbjtmb3IodmFyIGk9MCxjaTtjaT1uPWNbaV07aSsrKXt3
aGlsZSgobj1uLm5leHRTaWJsaW5nKSYmbi5ub2RlVHlwZSE9MSl7fWlmKCFuKXtyWysrcmldPWNp
fX1yZXR1cm4gcn0sIm50aC1jaGlsZCI6ZnVuY3Rpb24oYyxhKXt2YXIgcj1bXSxyaT0tMSxtPW50
aFJlLmV4ZWMoYT09ImV2ZW4iJiYiMm4ifHxhPT0ib2RkIiYmIjJuKzEifHwhbnRoUmUyLnRlc3Qo
YSkmJiJuKyIrYXx8YSksZj0obVsxXXx8MSktMCxsPW1bMl0tMDtmb3IodmFyIGk9MCxuO249Y1tp
XTtpKyspe3ZhciBwbj1uLnBhcmVudE5vZGU7aWYoYmF0Y2ghPXBuLl9iYXRjaCl7dmFyIGo9MDtm
b3IodmFyIGNuPXBuLmZpcnN0Q2hpbGQ7Y247Y249Y24ubmV4dFNpYmxpbmcpe2lmKGNuLm5vZGVU
eXBlPT0xKXtjbi5ub2RlSW5kZXg9KytqfX1wbi5fYmF0Y2g9YmF0Y2h9aWYoZj09MSl7aWYobD09
MHx8bi5ub2RlSW5kZXg9PWwpe3JbKytyaV09bn19ZWxzZXtpZigobi5ub2RlSW5kZXgrbCklZj09
MCl7clsrK3JpXT1ufX19cmV0dXJuIHJ9LCJvbmx5LWNoaWxkIjpmdW5jdGlvbihjKXt2YXIgcj1b
XSxyaT0tMTtmb3IodmFyIGk9MCxjaTtjaT1jW2ldO2krKyl7aWYoIXByZXYoY2kpJiYhbmV4dChj
aSkpe3JbKytyaV09Y2l9fXJldHVybiByfSxlbXB0eTpmdW5jdGlvbihjKXt2YXIgcj1bXSxyaT0t
MTtmb3IodmFyIGk9MCxjaTtjaT1jW2ldO2krKyl7dmFyIGNucz1jaS5jaGlsZE5vZGVzLGo9MCxj
bixlbXB0eT10cnVlO3doaWxlKGNuPWNuc1tqXSl7KytqO2lmKGNuLm5vZGVUeXBlPT0xfHxjbi5u
b2RlVHlwZT09Myl7ZW1wdHk9ZmFsc2U7YnJlYWt9fWlmKGVtcHR5KXtyWysrcmldPWNpfX1yZXR1
cm4gcn0sY29udGFpbnM6ZnVuY3Rpb24oYyx2KXt2YXIgcj1bXSxyaT0tMTtmb3IodmFyIGk9MCxj
aTtjaT1jW2ldO2krKyl7aWYoKGNpLnRleHRDb250ZW50fHxjaS5pbm5lclRleHR8fCIiKS5pbmRl
eE9mKHYpIT0tMSl7clsrK3JpXT1jaX19cmV0dXJuIHJ9LG5vZGVWYWx1ZTpmdW5jdGlvbihjLHYp
e3ZhciByPVtdLHJpPS0xO2Zvcih2YXIgaT0wLGNpO2NpPWNbaV07aSsrKXtpZihjaS5maXJzdENo
aWxkJiZjaS5maXJzdENoaWxkLm5vZGVWYWx1ZT09dil7clsrK3JpXT1jaX19cmV0dXJuIHJ9LGNo
ZWNrZWQ6ZnVuY3Rpb24oYyl7dmFyIHI9W10scmk9LTE7Zm9yKHZhciBpPTAsY2k7Y2k9Y1tpXTtp
Kyspe2lmKGNpLmNoZWNrZWQ9PXRydWUpe3JbKytyaV09Y2l9fXJldHVybiByfSxub3Q6ZnVuY3Rp
b24oYyxzcyl7cmV0dXJuIEV4dC5Eb21RdWVyeS5maWx0ZXIoYyxzcyx0cnVlKX0sYW55OmZ1bmN0
aW9uKGMsc2VsZWN0b3JzKXt2YXIgc3M9c2VsZWN0b3JzLnNwbGl0KCJ8Iikscj1bXSxyaT0tMSxz
O2Zvcih2YXIgaT0wLGNpO2NpPWNbaV07aSsrKXtmb3IodmFyIGo9MDtzPXNzW2pdO2orKyl7aWYo
RXh0LkRvbVF1ZXJ5LmlzKGNpLHMpKXtyWysrcmldPWNpO2JyZWFrfX19cmV0dXJuIHJ9LG9kZDpm
dW5jdGlvbihjKXtyZXR1cm4gdGhpc1sibnRoLWNoaWxkIl0oYywib2RkIil9LGV2ZW46ZnVuY3Rp
b24oYyl7cmV0dXJuIHRoaXNbIm50aC1jaGlsZCJdKGMsImV2ZW4iKX0sbnRoOmZ1bmN0aW9uKGMs
YSl7cmV0dXJuIGNbYS0xXXx8W119LGZpcnN0OmZ1bmN0aW9uKGMpe3JldHVybiBjWzBdfHxbXX0s
bGFzdDpmdW5jdGlvbihjKXtyZXR1cm4gY1tjLmxlbmd0aC0xXXx8W119LGhhczpmdW5jdGlvbihj
LHNzKXt2YXIgcz1FeHQuRG9tUXVlcnkuc2VsZWN0LHI9W10scmk9LTE7Zm9yKHZhciBpPTAsY2k7
Y2k9Y1tpXTtpKyspe2lmKHMoc3MsY2kpLmxlbmd0aD4wKXtyWysrcmldPWNpfX1yZXR1cm4gcn0s
bmV4dDpmdW5jdGlvbihjLHNzKXt2YXIgaXM9RXh0LkRvbVF1ZXJ5LmlzLHI9W10scmk9LTE7Zm9y
KHZhciBpPTAsY2k7Y2k9Y1tpXTtpKyspe3ZhciBuPW5leHQoY2kpO2lmKG4mJmlzKG4sc3MpKXty
WysrcmldPWNpfX1yZXR1cm4gcn0scHJldjpmdW5jdGlvbihjLHNzKXt2YXIgaXM9RXh0LkRvbVF1
ZXJ5LmlzLHI9W10scmk9LTE7Zm9yKHZhciBpPTAsY2k7Y2k9Y1tpXTtpKyspe3ZhciBuPXByZXYo
Y2kpO2lmKG4mJmlzKG4sc3MpKXtyWysrcmldPWNpfX1yZXR1cm4gcn19fX0oKTtFeHQucXVlcnk9
RXh0LkRvbVF1ZXJ5LnNlbGVjdDtFeHQuRXZlbnRNYW5hZ2VyPWZ1bmN0aW9uKCl7dmFyIHUsbSxp
PWZhbHNlLGw9RXh0LmxpYi5FdmVudCxuPUV4dC5saWIuRG9tLGI9ZG9jdW1lbnQsdj13aW5kb3cs
ZT0iaWUtZGVmZXJyZWQtbG9hZGVyIixvPSJET01Db250ZW50TG9hZGVkIixnPS9eKD86c2NvcGV8
ZGVsYXl8YnVmZmVyfHNpbmdsZXxzdG9wRXZlbnR8cHJldmVudERlZmF1bHR8c3RvcFByb3BhZ2F0
aW9ufG5vcm1hbGl6ZWR8YXJnc3xkZWxlZ2F0ZSkkLyxxPVtdO2Z1bmN0aW9uIGsoeSl7dmFyIEI9
ZmFsc2UseD0wLHc9cS5sZW5ndGgsQj1mYWxzZSx6PWZhbHNlLEE7aWYoeSl7aWYoeS5nZXRFbGVt
ZW50QnlJZHx8eS5uYXZpZ2F0b3Ipe2Zvcig7eDx3OysreCl7QT1xW3hdO2lmKEEuZWw9PT15KXtC
PUEuaWQ7YnJlYWt9fWlmKCFCKXtCPUV4dC5pZCh5KTtxLnB1c2goe2lkOkIsZWw6eX0pO3o9dHJ1
ZX19ZWxzZXtCPUV4dC5pZCh5KX1pZighRXh0LmVsQ2FjaGVbQl0pe0V4dC5FbGVtZW50LmFkZFRv
Q2FjaGUobmV3IEV4dC5FbGVtZW50KHkpLEIpO2lmKHope0V4dC5lbENhY2hlW0JdLnNraXBHQz10
cnVlfX19cmV0dXJuIEJ9ZnVuY3Rpb24gaih5LEEsRCx6LHgsRil7eT1FeHQuZ2V0RG9tKHkpO3Zh
ciB3PWsoeSksRT1FeHQuZWxDYWNoZVt3XS5ldmVudHMsQjtCPWwub24oeSxBLHgpO0VbQV09RVtB
XXx8W107RVtBXS5wdXNoKFtELHgsRixCLHpdKTtpZihBPT0ibW91c2V3aGVlbCImJnkuYWRkRXZl
bnRMaXN0ZW5lcil7dmFyIEM9WyJET01Nb3VzZVNjcm9sbCIseCxmYWxzZV07eS5hZGRFdmVudExp
c3RlbmVyLmFwcGx5KHksQyk7RXh0LkV2ZW50TWFuYWdlci5hZGRMaXN0ZW5lcih2LCJ1bmxvYWQi
LGZ1bmN0aW9uKCl7eS5yZW1vdmVFdmVudExpc3RlbmVyLmFwcGx5KHksQyl9KX1pZihBPT0ibW91
c2Vkb3duIiYmeT09ZG9jdW1lbnQpe0V4dC5FdmVudE1hbmFnZXIuc3RvcHBlZE1vdXNlRG93bkV2
ZW50LmFkZExpc3RlbmVyKHgpfX1mdW5jdGlvbiBjKCl7aWYoIWkpe0V4dC5pc1JlYWR5PWk9dHJ1
ZTtpZihtKXtjbGVhckludGVydmFsKG0pfWlmKEV4dC5pc0dlY2tvfHxFeHQuaXNPcGVyYSl7Yi5y
ZW1vdmVFdmVudExpc3RlbmVyKG8sYyxmYWxzZSl9aWYoRXh0LmlzSUUpe3ZhciB3PWIuZ2V0RWxl
bWVudEJ5SWQoZSk7aWYodyl7dy5vbnJlYWR5c3RhdGVjaGFuZ2U9bnVsbDt3LnBhcmVudE5vZGUu
cmVtb3ZlQ2hpbGQodyl9fWlmKHUpe3UuZmlyZSgpO3UubGlzdGVuZXJzPVtdfX19ZnVuY3Rpb24g
YSgpe3ZhciB3PSJjb21wbGV0ZSI7dT1uZXcgRXh0LnV0aWwuRXZlbnQoKTtpZihFeHQuaXNHZWNr
b3x8RXh0LmlzT3BlcmEpe2IuYWRkRXZlbnRMaXN0ZW5lcihvLGMsZmFsc2UpfWVsc2V7aWYoRXh0
LmlzSUUpe2Iud3JpdGUoIjxzY3JpcHQgaWQ9IitlKycgZGVmZXI9ImRlZmVyIiBzcmM9Ii8vOiI+
PFwvc2NyaXB0PicpO2IuZ2V0RWxlbWVudEJ5SWQoZSkub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0
aW9uKCl7aWYodGhpcy5yZWFkeVN0YXRlPT13KXtjKCl9fX1lbHNle2lmKEV4dC5pc1dlYktpdCl7
bT1zZXRJbnRlcnZhbChmdW5jdGlvbigpe2lmKGIucmVhZHlTdGF0ZT09dyl7YygpfX0sMTApfX19
bC5vbih2LCJsb2FkIixjKX1mdW5jdGlvbiBzKHcseCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHk9
RXh0LnRvQXJyYXkoYXJndW1lbnRzKTtpZih4LnRhcmdldD09RXh0LkV2ZW50T2JqZWN0LnNldEV2
ZW50KHlbMF0pLnRhcmdldCl7dy5hcHBseSh0aGlzLHkpfX19ZnVuY3Rpb24gdCh4LHksdyl7cmV0
dXJuIGZ1bmN0aW9uKHope3cuZGVsYXkoeS5idWZmZXIseCxudWxsLFtuZXcgRXh0LkV2ZW50T2Jq
ZWN0SW1wbCh6KV0pfX1mdW5jdGlvbiBwKEEseix3LHkseCl7cmV0dXJuIGZ1bmN0aW9uKEIpe0V4
dC5FdmVudE1hbmFnZXIucmVtb3ZlTGlzdGVuZXIoeix3LHkseCk7QShCKX19ZnVuY3Rpb24gZCh4
LHksdyl7cmV0dXJuIGZ1bmN0aW9uKEEpe3ZhciB6PW5ldyBFeHQudXRpbC5EZWxheWVkVGFzayh4
KTtpZighdy50YXNrcyl7dy50YXNrcz1bXX13LnRhc2tzLnB1c2goeik7ei5kZWxheSh5LmRlbGF5
fHwxMCx4LG51bGwsW25ldyBFeHQuRXZlbnRPYmplY3RJbXBsKEEpXSl9fWZ1bmN0aW9uIGgoQixB
LHcsRCxFKXt2YXIgeD0hRXh0LmlzT2JqZWN0KHcpP3t9OncseT1FeHQuZ2V0RG9tKEIpLHo7RD1E
fHx4LmZuO0U9RXx8eC5zY29wZTtpZigheSl7dGhyb3cnRXJyb3IgbGlzdGVuaW5nIGZvciAiJytB
KyciLiBFbGVtZW50ICInK0IrIlwiIGRvZXNuJ3QgZXhpc3QuIn1mdW5jdGlvbiBDKEcpe2lmKCFF
eHQpe3JldHVybn1HPUV4dC5FdmVudE9iamVjdC5zZXRFdmVudChHKTt2YXIgRjtpZih4LmRlbGVn
YXRlKXtpZighKEY9Ry5nZXRUYXJnZXQoeC5kZWxlZ2F0ZSx5KSkpe3JldHVybn19ZWxzZXtGPUcu
dGFyZ2V0fWlmKHguc3RvcEV2ZW50KXtHLnN0b3BFdmVudCgpfWlmKHgucHJldmVudERlZmF1bHQp
e0cucHJldmVudERlZmF1bHQoKX1pZih4LnN0b3BQcm9wYWdhdGlvbil7Ry5zdG9wUHJvcGFnYXRp
b24oKX1pZih4Lm5vcm1hbGl6ZWQpe0c9Ry5icm93c2VyRXZlbnR9RC5jYWxsKEV8fHksRyxGLHgp
fWlmKHgudGFyZ2V0KXtDPXMoQyx4KX1pZih4LmRlbGF5KXtDPWQoQyx4LEQpfWlmKHguc2luZ2xl
KXtDPXAoQyx5LEEsRCxFKX1pZih4LmJ1ZmZlcil7ej1uZXcgRXh0LnV0aWwuRGVsYXllZFRhc2so
Qyk7Qz10KEMseCx6KX1qKHksQSxELHosQyxFKTtyZXR1cm4gQ312YXIgcj17YWRkTGlzdGVuZXI6
ZnVuY3Rpb24oeSx3LEEseix4KXtpZihFeHQuaXNPYmplY3Qodykpe3ZhciBEPXcsQixDO2ZvcihC
IGluIEQpe0M9RFtCXTtpZighZy50ZXN0KEIpKXtpZihFeHQuaXNGdW5jdGlvbihDKSl7aCh5LEIs
RCxDLEQuc2NvcGUpfWVsc2V7aCh5LEIsQyl9fX19ZWxzZXtoKHksdyx4LEEseil9fSxyZW1vdmVM
aXN0ZW5lcjpmdW5jdGlvbih6LEQsSCxJKXt6PUV4dC5nZXREb20oeik7dmFyIHc9ayh6KSxGPXom
JihFeHQuZWxDYWNoZVt3XS5ldmVudHMpW0RdfHxbXSx4LEMsQSxCLHksRSxHO2ZvcihDPTAsRT1G
Lmxlbmd0aDtDPEU7QysrKXtpZihFeHQuaXNBcnJheShHPUZbQ10pJiZHWzBdPT1IJiYoIUl8fEdb
Ml09PUkpKXtpZihHWzRdKXtHWzRdLmNhbmNlbCgpfUI9SC50YXNrcyYmSC50YXNrcy5sZW5ndGg7
aWYoQil7d2hpbGUoQi0tKXtILnRhc2tzW0JdLmNhbmNlbCgpfWRlbGV0ZSBILnRhc2tzfXk9eD1H
WzFdO2lmKGwuZXh0QWRhcHRlcil7eT1HWzNdfWwudW4oeixELHkpO0Yuc3BsaWNlKEMsMSk7aWYo
Ri5sZW5ndGg9PT0wKXtkZWxldGUgRXh0LmVsQ2FjaGVbd10uZXZlbnRzW0RdfWZvcihCIGluIEV4
dC5lbENhY2hlW3ddLmV2ZW50cyl7cmV0dXJuIGZhbHNlfUV4dC5lbENhY2hlW3ddLmV2ZW50cz17
fTtyZXR1cm4gZmFsc2V9fWlmKEQ9PSJtb3VzZXdoZWVsIiYmei5hZGRFdmVudExpc3RlbmVyJiZ4
KXt6LnJlbW92ZUV2ZW50TGlzdGVuZXIoIkRPTU1vdXNlU2Nyb2xsIix4LGZhbHNlKX1pZihEPT0i
bW91c2Vkb3duIiYmej09YiYmeCl7RXh0LkV2ZW50TWFuYWdlci5zdG9wcGVkTW91c2VEb3duRXZl
bnQucmVtb3ZlTGlzdGVuZXIoeCl9fSxyZW1vdmVBbGw6ZnVuY3Rpb24oeCl7eD1FeHQuZ2V0RG9t
KHgpO3ZhciB3PWsoeCksQz1FeHQuZWxDYWNoZVt3XXx8e30sRj1DLmV2ZW50c3x8e30sQixBLEQs
eSxFLHo7Zm9yKHkgaW4gRil7aWYoRi5oYXNPd25Qcm9wZXJ0eSh5KSl7Qj1GW3ldO2ZvcihBPTAs
RD1CLmxlbmd0aDtBPEQ7QSsrKXtFPUJbQV07aWYoRVs0XSl7RVs0XS5jYW5jZWwoKX1pZihFWzBd
LnRhc2tzJiYoej1FWzBdLnRhc2tzLmxlbmd0aCkpe3doaWxlKHotLSl7RVswXS50YXNrc1t6XS5j
YW5jZWwoKX1kZWxldGUgRS50YXNrc31sLnVuKHgseSxsLmV4dEFkYXB0ZXI/RVszXTpFWzFdKX19
fWlmKEV4dC5lbENhY2hlW3ddKXtFeHQuZWxDYWNoZVt3XS5ldmVudHM9e319fSxnZXRMaXN0ZW5l
cnM6ZnVuY3Rpb24oeix3KXt6PUV4dC5nZXREb20oeik7dmFyIEI9ayh6KSx4PUV4dC5lbENhY2hl
W0JdfHx7fSxBPXguZXZlbnRzfHx7fSx5PVtdO2lmKEEmJkFbd10pe3JldHVybiBBW3ddfWVsc2V7
cmV0dXJuIG51bGx9fSxwdXJnZUVsZW1lbnQ6ZnVuY3Rpb24oeSx3LEEpe3k9RXh0LmdldERvbSh5
KTt2YXIgeD1rKHkpLEQ9RXh0LmVsQ2FjaGVbeF18fHt9LEU9RC5ldmVudHN8fHt9LHosQyxCO2lm
KEEpe2lmKEUmJkUuaGFzT3duUHJvcGVydHkoQSkpe0M9RVtBXTtmb3Ioej0wLEI9Qy5sZW5ndGg7
ejxCO3orKyl7RXh0LkV2ZW50TWFuYWdlci5yZW1vdmVMaXN0ZW5lcih5LEEsQ1t6XVswXSl9fX1l
bHNle0V4dC5FdmVudE1hbmFnZXIucmVtb3ZlQWxsKHkpfWlmKHcmJnkmJnkuY2hpbGROb2Rlcyl7
Zm9yKHo9MCxCPXkuY2hpbGROb2Rlcy5sZW5ndGg7ejxCO3orKyl7RXh0LkV2ZW50TWFuYWdlci5w
dXJnZUVsZW1lbnQoeS5jaGlsZE5vZGVzW3pdLHcsQSl9fX0sX3VubG9hZDpmdW5jdGlvbigpe3Zh
ciB3O2Zvcih3IGluIEV4dC5lbENhY2hlKXtFeHQuRXZlbnRNYW5hZ2VyLnJlbW92ZUFsbCh3KX19
LG9uRG9jdW1lbnRSZWFkeTpmdW5jdGlvbih5LHgsdyl7aWYoaSl7dS5hZGRMaXN0ZW5lcih5LHgs
dyk7dS5maXJlKCk7dS5saXN0ZW5lcnM9W119ZWxzZXtpZighdSl7YSgpfXc9d3x8e307dy5kZWxh
eT13LmRlbGF5fHwxO3UuYWRkTGlzdGVuZXIoeSx4LHcpfX19O3Iub249ci5hZGRMaXN0ZW5lcjty
LnVuPXIucmVtb3ZlTGlzdGVuZXI7ci5zdG9wcGVkTW91c2VEb3duRXZlbnQ9bmV3IEV4dC51dGls
LkV2ZW50KCk7cmV0dXJuIHJ9KCk7RXh0Lm9uUmVhZHk9RXh0LkV2ZW50TWFuYWdlci5vbkRvY3Vt
ZW50UmVhZHk7KGZ1bmN0aW9uKCl7dmFyIGE9ZnVuY3Rpb24oKXt2YXIgYz1kb2N1bWVudC5ib2R5
fHxkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIpWzBdO2lmKCFjKXtyZXR1cm4g
ZmFsc2V9dmFyIGI9WyIgIixFeHQuaXNJRT8iZXh0LWllICIrKEV4dC5pc0lFNj8iZXh0LWllNiI6
KEV4dC5pc0lFNz8iZXh0LWllNyI6ImV4dC1pZTgiKSk6RXh0LmlzR2Vja28/ImV4dC1nZWNrbyAi
KyhFeHQuaXNHZWNrbzI/ImV4dC1nZWNrbzIiOiJleHQtZ2Vja28zIik6RXh0LmlzT3BlcmE/ImV4
dC1vcGVyYSI6RXh0LmlzV2ViS2l0PyJleHQtd2Via2l0IjoiIl07aWYoRXh0LmlzU2FmYXJpKXti
LnB1c2goImV4dC1zYWZhcmkgIisoRXh0LmlzU2FmYXJpMj8iZXh0LXNhZmFyaTIiOihFeHQuaXNT
YWZhcmkzPyJleHQtc2FmYXJpMyI6ImV4dC1zYWZhcmk0IikpKX1lbHNle2lmKEV4dC5pc0Nocm9t
ZSl7Yi5wdXNoKCJleHQtY2hyb21lIil9fWlmKEV4dC5pc01hYyl7Yi5wdXNoKCJleHQtbWFjIil9
aWYoRXh0LmlzTGludXgpe2IucHVzaCgiZXh0LWxpbnV4Iil9aWYoRXh0LmlzU3RyaWN0fHxFeHQu
aXNCb3JkZXJCb3gpe3ZhciBkPWMucGFyZW50Tm9kZTtpZihkKXtkLmNsYXNzTmFtZSs9RXh0Lmlz
U3RyaWN0PyIgZXh0LXN0cmljdCI6IiBleHQtYm9yZGVyLWJveCJ9fWMuY2xhc3NOYW1lKz1iLmpv
aW4oIiAiKTtyZXR1cm4gdHJ1ZX07aWYoIWEoKSl7RXh0Lm9uUmVhZHkoYSl9fSkoKTtFeHQuRXZl
bnRPYmplY3Q9ZnVuY3Rpb24oKXt2YXIgYj1FeHQubGliLkV2ZW50LGE9ezM6MTMsNjMyMzQ6Mzcs
NjMyMzU6MzksNjMyMzI6MzgsNjMyMzM6NDAsNjMyNzY6MzMsNjMyNzc6MzQsNjMyNzI6NDYsNjMy
NzM6MzYsNjMyNzU6MzV9LGM9RXh0LmlzSUU/ezE6MCw0OjEsMjoyfTooRXh0LmlzV2ViS2l0P3sx
OjAsMjoxLDM6Mn06ezA6MCwxOjEsMjoyfSk7RXh0LkV2ZW50T2JqZWN0SW1wbD1mdW5jdGlvbihk
KXtpZihkKXt0aGlzLnNldEV2ZW50KGQuYnJvd3NlckV2ZW50fHxkKX19O0V4dC5FdmVudE9iamVj
dEltcGwucHJvdG90eXBlPXtzZXRFdmVudDpmdW5jdGlvbihnKXt2YXIgZD10aGlzO2lmKGc9PWR8
fChnJiZnLmJyb3dzZXJFdmVudCkpe3JldHVybiBnfWQuYnJvd3NlckV2ZW50PWc7aWYoZyl7ZC5i
dXR0b249Zy5idXR0b24/Y1tnLmJ1dHRvbl06KGcud2hpY2g/Zy53aGljaC0xOi0xKTtpZihnLnR5
cGU9PSJjbGljayImJmQuYnV0dG9uPT0tMSl7ZC5idXR0b249MH1kLnR5cGU9Zy50eXBlO2Quc2hp
ZnRLZXk9Zy5zaGlmdEtleTtkLmN0cmxLZXk9Zy5jdHJsS2V5fHxnLm1ldGFLZXl8fGZhbHNlO2Qu
YWx0S2V5PWcuYWx0S2V5O2Qua2V5Q29kZT1nLmtleUNvZGU7ZC5jaGFyQ29kZT1nLmNoYXJDb2Rl
O2QudGFyZ2V0PWIuZ2V0VGFyZ2V0KGcpO2QueHk9Yi5nZXRYWShnKX1lbHNle2QuYnV0dG9uPS0x
O2Quc2hpZnRLZXk9ZmFsc2U7ZC5jdHJsS2V5PWZhbHNlO2QuYWx0S2V5PWZhbHNlO2Qua2V5Q29k
ZT0wO2QuY2hhckNvZGU9MDtkLnRhcmdldD1udWxsO2QueHk9WzAsMF19cmV0dXJuIGR9LHN0b3BF
dmVudDpmdW5jdGlvbigpe3ZhciBkPXRoaXM7aWYoZC5icm93c2VyRXZlbnQpe2lmKGQuYnJvd3Nl
ckV2ZW50LnR5cGU9PSJtb3VzZWRvd24iKXtFeHQuRXZlbnRNYW5hZ2VyLnN0b3BwZWRNb3VzZURv
d25FdmVudC5maXJlKGQpfWIuc3RvcEV2ZW50KGQuYnJvd3NlckV2ZW50KX19LHByZXZlbnREZWZh
dWx0OmZ1bmN0aW9uKCl7aWYodGhpcy5icm93c2VyRXZlbnQpe2IucHJldmVudERlZmF1bHQodGhp
cy5icm93c2VyRXZlbnQpfX0sc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcztp
ZihkLmJyb3dzZXJFdmVudCl7aWYoZC5icm93c2VyRXZlbnQudHlwZT09Im1vdXNlZG93biIpe0V4
dC5FdmVudE1hbmFnZXIuc3RvcHBlZE1vdXNlRG93bkV2ZW50LmZpcmUoZCl9Yi5zdG9wUHJvcGFn
YXRpb24oZC5icm93c2VyRXZlbnQpfX0sZ2V0Q2hhckNvZGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhp
cy5jaGFyQ29kZXx8dGhpcy5rZXlDb2RlfSxnZXRLZXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5u
b3JtYWxpemVLZXkodGhpcy5rZXlDb2RlfHx0aGlzLmNoYXJDb2RlKX0sbm9ybWFsaXplS2V5OmZ1
bmN0aW9uKGQpe3JldHVybiBFeHQuaXNTYWZhcmk/KGFbZF18fGQpOmR9LGdldFBhZ2VYOmZ1bmN0
aW9uKCl7cmV0dXJuIHRoaXMueHlbMF19LGdldFBhZ2VZOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMu
eHlbMV19LGdldFhZOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueHl9LGdldFRhcmdldDpmdW5jdGlv
bihlLGcsZCl7cmV0dXJuIGU/RXh0LmZseSh0aGlzLnRhcmdldCkuZmluZFBhcmVudChlLGcsZCk6
KGQ/RXh0LmdldCh0aGlzLnRhcmdldCk6dGhpcy50YXJnZXQpfSxnZXRSZWxhdGVkVGFyZ2V0OmZ1
bmN0aW9uKCl7cmV0dXJuIHRoaXMuYnJvd3NlckV2ZW50P2IuZ2V0UmVsYXRlZFRhcmdldCh0aGlz
LmJyb3dzZXJFdmVudCk6bnVsbH0sZ2V0V2hlZWxEZWx0YTpmdW5jdGlvbigpe3ZhciBkPXRoaXMu
YnJvd3NlckV2ZW50O3ZhciBnPTA7aWYoZC53aGVlbERlbHRhKXtnPWQud2hlZWxEZWx0YS8xMjB9
ZWxzZXtpZihkLmRldGFpbCl7Zz0tZC5kZXRhaWwvM319cmV0dXJuIGd9LHdpdGhpbjpmdW5jdGlv
bihnLGgsZCl7aWYoZyl7dmFyIGU9dGhpc1toPyJnZXRSZWxhdGVkVGFyZ2V0IjoiZ2V0VGFyZ2V0
Il0oKTtyZXR1cm4gZSYmKChkPyhlPT1FeHQuZ2V0RG9tKGcpKTpmYWxzZSl8fEV4dC5mbHkoZyku
Y29udGFpbnMoZSkpfXJldHVybiBmYWxzZX19O3JldHVybiBuZXcgRXh0LkV2ZW50T2JqZWN0SW1w
bCgpfSgpOyhmdW5jdGlvbigpe3ZhciBqPWRvY3VtZW50O0V4dC5FbGVtZW50PWZ1bmN0aW9uKG8s
cCl7dmFyIHE9dHlwZW9mIG89PSJzdHJpbmciP2ouZ2V0RWxlbWVudEJ5SWQobyk6byxyO2lmKCFx
KXtyZXR1cm4gbnVsbH1yPXEuaWQ7aWYoIXAmJnImJkV4dC5lbENhY2hlW3JdKXtyZXR1cm4gRXh0
LmVsQ2FjaGVbcl0uZWx9dGhpcy5kb209cTt0aGlzLmlkPXJ8fEV4dC5pZChxKX07dmFyIGE9RXh0
LmxpYi5Eb20sZz1FeHQuRG9tSGVscGVyLG09RXh0LmxpYi5FdmVudCxlPUV4dC5saWIuQW5pbSxo
PUV4dC5FbGVtZW50LGI9RXh0LmVsQ2FjaGU7aC5wcm90b3R5cGU9e3NldDpmdW5jdGlvbih0LHEp
e3ZhciByPXRoaXMuZG9tLHAscyxxPShxIT09ZmFsc2UpJiYhIXIuc2V0QXR0cmlidXRlO2Zvcihw
IGluIHQpe2lmKHQuaGFzT3duUHJvcGVydHkocCkpe3M9dFtwXTtpZihwPT0ic3R5bGUiKXtnLmFw
cGx5U3R5bGVzKHIscyl9ZWxzZXtpZihwPT0iY2xzIil7ci5jbGFzc05hbWU9c31lbHNle2lmKHEp
e3Iuc2V0QXR0cmlidXRlKHAscyl9ZWxzZXtyW3BdPXN9fX19fXJldHVybiB0aGlzfSxkZWZhdWx0
VW5pdDoicHgiLGlzOmZ1bmN0aW9uKG8pe3JldHVybiBFeHQuRG9tUXVlcnkuaXModGhpcy5kb20s
byl9LGZvY3VzOmZ1bmN0aW9uKHIscSl7dmFyIG89dGhpcyxxPXF8fG8uZG9tO3RyeXtpZihOdW1i
ZXIocikpe28uZm9jdXMuZGVmZXIocixudWxsLFtudWxsLHFdKX1lbHNle3EuZm9jdXMoKX19Y2F0
Y2gocCl7fXJldHVybiBvfSxibHVyOmZ1bmN0aW9uKCl7dHJ5e3RoaXMuZG9tLmJsdXIoKX1jYXRj
aChvKXt9cmV0dXJuIHRoaXN9LGdldFZhbHVlOmZ1bmN0aW9uKG8pe3ZhciBwPXRoaXMuZG9tLnZh
bHVlO3JldHVybiBvP3BhcnNlSW50KHAsMTApOnB9LGFkZExpc3RlbmVyOmZ1bmN0aW9uKG8scixx
LHApe0V4dC5FdmVudE1hbmFnZXIub24odGhpcy5kb20sbyxyLHF8fHRoaXMscCk7cmV0dXJuIHRo
aXN9LHJlbW92ZUxpc3RlbmVyOmZ1bmN0aW9uKG8scSxwKXtFeHQuRXZlbnRNYW5hZ2VyLnJlbW92
ZUxpc3RlbmVyKHRoaXMuZG9tLG8scSxwfHx0aGlzKTtyZXR1cm4gdGhpc30scmVtb3ZlQWxsTGlz
dGVuZXJzOmZ1bmN0aW9uKCl7RXh0LkV2ZW50TWFuYWdlci5yZW1vdmVBbGwodGhpcy5kb20pO3Jl
dHVybiB0aGlzfSxwdXJnZUFsbExpc3RlbmVyczpmdW5jdGlvbigpe0V4dC5FdmVudE1hbmFnZXIu
cHVyZ2VFbGVtZW50KHRoaXMsdHJ1ZSk7cmV0dXJuIHRoaXN9LGFkZFVuaXRzOmZ1bmN0aW9uKG8p
e2lmKG89PT0iInx8bz09ImF1dG8ifHxvPT09dW5kZWZpbmVkKXtvPW98fCIifWVsc2V7aWYoIWlz
TmFOKG8pfHwhay50ZXN0KG8pKXtvPW8rKHRoaXMuZGVmYXVsdFVuaXR8fCJweCIpfX1yZXR1cm4g
b30sbG9hZDpmdW5jdGlvbihwLHEsbyl7RXh0LkFqYXgucmVxdWVzdChFeHQuYXBwbHkoe3BhcmFt
czpxLHVybDpwLnVybHx8cCxjYWxsYmFjazpvLGVsOnRoaXMuZG9tLGluZGljYXRvclRleHQ6cC5p
bmRpY2F0b3JUZXh0fHwiIn0sRXh0LmlzT2JqZWN0KHApP3A6e30pKTtyZXR1cm4gdGhpc30saXNC
b3JkZXJCb3g6ZnVuY3Rpb24oKXtyZXR1cm4gaVsodGhpcy5kb20udGFnTmFtZXx8IiIpLnRvTG93
ZXJDYXNlKCldfHxFeHQuaXNCb3JkZXJCb3h9LHJlbW92ZTpmdW5jdGlvbigpe3ZhciBvPXRoaXMs
cD1vLmRvbTtpZihwKXtkZWxldGUgby5kb207RXh0LnJlbW92ZU5vZGUocCl9fSxob3ZlcjpmdW5j
dGlvbihwLG8scixxKXt2YXIgcz10aGlzO3Mub24oIm1vdXNlZW50ZXIiLHAscnx8cy5kb20scSk7
cy5vbigibW91c2VsZWF2ZSIsbyxyfHxzLmRvbSxxKTtyZXR1cm4gc30sY29udGFpbnM6ZnVuY3Rp
b24obyl7cmV0dXJuICFvP2ZhbHNlOkV4dC5saWIuRG9tLmlzQW5jZXN0b3IodGhpcy5kb20sby5k
b20/by5kb206byl9LGdldEF0dHJpYnV0ZU5TOmZ1bmN0aW9uKHAsbyl7cmV0dXJuIHRoaXMuZ2V0
QXR0cmlidXRlKG8scCl9LGdldEF0dHJpYnV0ZTpFeHQuaXNJRT9mdW5jdGlvbihvLHEpe3ZhciBy
PXRoaXMuZG9tLHA9dHlwZW9mIHJbcSsiOiIrb107aWYoWyJ1bmRlZmluZWQiLCJ1bmtub3duIl0u
aW5kZXhPZihwKT09LTEpe3JldHVybiByW3ErIjoiK29dfXJldHVybiByW29dfTpmdW5jdGlvbihv
LHApe3ZhciBxPXRoaXMuZG9tO3JldHVybiBxLmdldEF0dHJpYnV0ZU5TKHAsbyl8fHEuZ2V0QXR0
cmlidXRlKHArIjoiK28pfHxxLmdldEF0dHJpYnV0ZShvKXx8cVtvXX0sdXBkYXRlOmZ1bmN0aW9u
KG8pe2lmKHRoaXMuZG9tKXt0aGlzLmRvbS5pbm5lckhUTUw9b31yZXR1cm4gdGhpc319O3ZhciBu
PWgucHJvdG90eXBlO2guYWRkTWV0aG9kcz1mdW5jdGlvbihwKXtFeHQuYXBwbHkobixwKX07bi5v
bj1uLmFkZExpc3RlbmVyO24udW49bi5yZW1vdmVMaXN0ZW5lcjtuLmF1dG9Cb3hBZGp1c3Q9dHJ1
ZTt2YXIgaz0vXGQrKHB4fGVtfCV8ZW58ZXh8cHR8aW58Y218bW18cGMpJC9pLGQ7aC5nZXQ9ZnVu
Y3Rpb24ocCl7dmFyIG8scyxyO2lmKCFwKXtyZXR1cm4gbnVsbH1pZih0eXBlb2YgcD09InN0cmlu
ZyIpe2lmKCEocz1qLmdldEVsZW1lbnRCeUlkKHApKSl7cmV0dXJuIG51bGx9aWYoYltwXSYmYltw
XS5lbCl7bz1iW3BdLmVsO28uZG9tPXN9ZWxzZXtvPWguYWRkVG9DYWNoZShuZXcgaChzKSl9cmV0
dXJuIG99ZWxzZXtpZihwLnRhZ05hbWUpe2lmKCEocj1wLmlkKSl7cj1FeHQuaWQocCl9aWYoYlty
XSYmYltyXS5lbCl7bz1iW3JdLmVsO28uZG9tPXB9ZWxzZXtvPWguYWRkVG9DYWNoZShuZXcgaChw
KSl9cmV0dXJuIG99ZWxzZXtpZihwIGluc3RhbmNlb2YgaCl7aWYocCE9ZCl7cC5kb209ai5nZXRF
bGVtZW50QnlJZChwLmlkKXx8cC5kb219cmV0dXJuIHB9ZWxzZXtpZihwLmlzQ29tcG9zaXRlKXty
ZXR1cm4gcH1lbHNle2lmKEV4dC5pc0FycmF5KHApKXtyZXR1cm4gaC5zZWxlY3QocCl9ZWxzZXtp
ZihwPT1qKXtpZighZCl7dmFyIHE9ZnVuY3Rpb24oKXt9O3EucHJvdG90eXBlPWgucHJvdG90eXBl
O2Q9bmV3IHEoKTtkLmRvbT1qfXJldHVybiBkfX19fX19cmV0dXJuIG51bGx9O2guYWRkVG9DYWNo
ZT1mdW5jdGlvbihvLHApe3A9cHx8by5pZDtiW3BdPXtlbDpvLGRhdGE6e30sZXZlbnRzOnt9fTty
ZXR1cm4gb307aC5kYXRhPWZ1bmN0aW9uKHAsbyxxKXtwPWguZ2V0KHApO2lmKCFwKXtyZXR1cm4g
bnVsbH12YXIgcj1iW3AuaWRdLmRhdGE7aWYoYXJndW1lbnRzLmxlbmd0aD09Mil7cmV0dXJuIHJb
b119ZWxzZXtyZXR1cm4ocltvXT1xKX19O2Z1bmN0aW9uIGwoKXtpZighRXh0LmVuYWJsZUdhcmJh
Z2VDb2xsZWN0b3Ipe2NsZWFySW50ZXJ2YWwoaC5jb2xsZWN0b3JUaHJlYWRJZCl9ZWxzZXt2YXIg
cCxyLHUscztmb3IocCBpbiBiKXtzPWJbcF07aWYocy5za2lwR0Mpe2NvbnRpbnVlfXI9cy5lbDt1
PXIuZG9tO2lmKCF1fHwhdS5wYXJlbnROb2RlfHwoIXUub2Zmc2V0UGFyZW50JiYhai5nZXRFbGVt
ZW50QnlJZChwKSkpe2lmKEV4dC5lbmFibGVMaXN0ZW5lckNvbGxlY3Rpb24pe0V4dC5FdmVudE1h
bmFnZXIucmVtb3ZlQWxsKHUpfWRlbGV0ZSBiW3BdfX1pZihFeHQuaXNJRSl7dmFyIHE9e307Zm9y
KHAgaW4gYil7cVtwXT1iW3BdfWI9RXh0LmVsQ2FjaGU9cX19fWguY29sbGVjdG9yVGhyZWFkSWQ9
c2V0SW50ZXJ2YWwobCwzMDAwMCk7dmFyIGM9ZnVuY3Rpb24oKXt9O2MucHJvdG90eXBlPWgucHJv
dG90eXBlO2guRmx5d2VpZ2h0PWZ1bmN0aW9uKG8pe3RoaXMuZG9tPW99O2guRmx5d2VpZ2h0LnBy
b3RvdHlwZT1uZXcgYygpO2guRmx5d2VpZ2h0LnByb3RvdHlwZS5pc0ZseXdlaWdodD10cnVlO2gu
X2ZseXdlaWdodHM9e307aC5mbHk9ZnVuY3Rpb24ocSxvKXt2YXIgcD1udWxsO289b3x8Il9nbG9i
YWwiO2lmKHE9RXh0LmdldERvbShxKSl7KGguX2ZseXdlaWdodHNbb109aC5fZmx5d2VpZ2h0c1tv
XXx8bmV3IGguRmx5d2VpZ2h0KCkpLmRvbT1xO3A9aC5fZmx5d2VpZ2h0c1tvXX1yZXR1cm4gcH07
RXh0LmdldD1oLmdldDtFeHQuZmx5PWguZmx5O3ZhciBpPUV4dC5pc1N0cmljdD97c2VsZWN0OjF9
OntpbnB1dDoxLHNlbGVjdDoxLHRleHRhcmVhOjF9O2lmKEV4dC5pc0lFfHxFeHQuaXNHZWNrbyl7
aS5idXR0b249MX1FeHQuRXZlbnRNYW5hZ2VyLm9uKHdpbmRvdywidW5sb2FkIixmdW5jdGlvbigp
e2RlbGV0ZSBiO2RlbGV0ZSBoLl9mbHl3ZWlnaHRzfSl9KSgpO0V4dC5FbGVtZW50LmFkZE1ldGhv
ZHMoZnVuY3Rpb24oKXt2YXIgZD0icGFyZW50Tm9kZSIsYj0ibmV4dFNpYmxpbmciLGM9InByZXZp
b3VzU2libGluZyIsZT1FeHQuRG9tUXVlcnksYT1FeHQuZ2V0O3JldHVybntmaW5kUGFyZW50OmZ1
bmN0aW9uKG0sbCxoKXt2YXIgaj10aGlzLmRvbSxnPWRvY3VtZW50LmJvZHksaz0wLGk7aWYoRXh0
LmlzR2Vja28mJk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChqKT09IltvYmplY3QgWFVM
RWxlbWVudF0iKXtyZXR1cm4gbnVsbH1sPWx8fDUwO2lmKGlzTmFOKGwpKXtpPUV4dC5nZXREb20o
bCk7bD1OdW1iZXIuTUFYX1ZBTFVFfXdoaWxlKGomJmoubm9kZVR5cGU9PTEmJms8bCYmaiE9ZyYm
aiE9aSl7aWYoZS5pcyhqLG0pKXtyZXR1cm4gaD9hKGopOmp9aysrO2o9ai5wYXJlbnROb2RlfXJl
dHVybiBudWxsfSxmaW5kUGFyZW50Tm9kZTpmdW5jdGlvbihqLGksZyl7dmFyIGg9RXh0LmZseSh0
aGlzLmRvbS5wYXJlbnROb2RlLCJfaW50ZXJuYWwiKTtyZXR1cm4gaD9oLmZpbmRQYXJlbnQoaixp
LGcpOm51bGx9LHVwOmZ1bmN0aW9uKGgsZyl7cmV0dXJuIHRoaXMuZmluZFBhcmVudE5vZGUoaCxn
LHRydWUpfSxzZWxlY3Q6ZnVuY3Rpb24oZyl7cmV0dXJuIEV4dC5FbGVtZW50LnNlbGVjdChnLHRo
aXMuZG9tKX0scXVlcnk6ZnVuY3Rpb24oZyl7cmV0dXJuIGUuc2VsZWN0KGcsdGhpcy5kb20pfSxj
aGlsZDpmdW5jdGlvbihnLGgpe3ZhciBpPWUuc2VsZWN0Tm9kZShnLHRoaXMuZG9tKTtyZXR1cm4g
aD9pOmEoaSl9LGRvd246ZnVuY3Rpb24oZyxoKXt2YXIgaT1lLnNlbGVjdE5vZGUoIiA+ICIrZyx0
aGlzLmRvbSk7cmV0dXJuIGg/aTphKGkpfSxwYXJlbnQ6ZnVuY3Rpb24oZyxoKXtyZXR1cm4gdGhp
cy5tYXRjaE5vZGUoZCxkLGcsaCl9LG5leHQ6ZnVuY3Rpb24oZyxoKXtyZXR1cm4gdGhpcy5tYXRj
aE5vZGUoYixiLGcsaCl9LHByZXY6ZnVuY3Rpb24oZyxoKXtyZXR1cm4gdGhpcy5tYXRjaE5vZGUo
YyxjLGcsaCl9LGZpcnN0OmZ1bmN0aW9uKGcsaCl7cmV0dXJuIHRoaXMubWF0Y2hOb2RlKGIsImZp
cnN0Q2hpbGQiLGcsaCl9LGxhc3Q6ZnVuY3Rpb24oZyxoKXtyZXR1cm4gdGhpcy5tYXRjaE5vZGUo
YywibGFzdENoaWxkIixnLGgpfSxtYXRjaE5vZGU6ZnVuY3Rpb24oaCxrLGcsaSl7dmFyIGo9dGhp
cy5kb21ba107d2hpbGUoail7aWYoai5ub2RlVHlwZT09MSYmKCFnfHxlLmlzKGosZykpKXtyZXR1
cm4gIWk/YShqKTpqfWo9altoXX1yZXR1cm4gbnVsbH19fSgpKTtFeHQuRWxlbWVudC5hZGRNZXRo
b2RzKGZ1bmN0aW9uKCl7dmFyIGM9RXh0LmdldERvbSxhPUV4dC5nZXQsYj1FeHQuRG9tSGVscGVy
O3JldHVybnthcHBlbmRDaGlsZDpmdW5jdGlvbihkKXtyZXR1cm4gYShkKS5hcHBlbmRUbyh0aGlz
KX0sYXBwZW5kVG86ZnVuY3Rpb24oZCl7YyhkKS5hcHBlbmRDaGlsZCh0aGlzLmRvbSk7cmV0dXJu
IHRoaXN9LGluc2VydEJlZm9yZTpmdW5jdGlvbihkKXsoZD1jKGQpKS5wYXJlbnROb2RlLmluc2Vy
dEJlZm9yZSh0aGlzLmRvbSxkKTtyZXR1cm4gdGhpc30saW5zZXJ0QWZ0ZXI6ZnVuY3Rpb24oZCl7
KGQ9YyhkKSkucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcy5kb20sZC5uZXh0U2libGluZyk7
cmV0dXJuIHRoaXN9LGluc2VydEZpcnN0OmZ1bmN0aW9uKGUsZCl7ZT1lfHx7fTtpZihlLm5vZGVU
eXBlfHxlLmRvbXx8dHlwZW9mIGU9PSJzdHJpbmciKXtlPWMoZSk7dGhpcy5kb20uaW5zZXJ0QmVm
b3JlKGUsdGhpcy5kb20uZmlyc3RDaGlsZCk7cmV0dXJuICFkP2EoZSk6ZX1lbHNle3JldHVybiB0
aGlzLmNyZWF0ZUNoaWxkKGUsdGhpcy5kb20uZmlyc3RDaGlsZCxkKX19LHJlcGxhY2U6ZnVuY3Rp
b24oZCl7ZD1hKGQpO3RoaXMuaW5zZXJ0QmVmb3JlKGQpO2QucmVtb3ZlKCk7cmV0dXJuIHRoaXN9
LHJlcGxhY2VXaXRoOmZ1bmN0aW9uKGQpe3ZhciBlPXRoaXM7aWYoZC5ub2RlVHlwZXx8ZC5kb218
fHR5cGVvZiBkPT0ic3RyaW5nIil7ZD1jKGQpO2UuZG9tLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3Jl
KGQsZS5kb20pfWVsc2V7ZD1iLmluc2VydEJlZm9yZShlLmRvbSxkKX1kZWxldGUgRXh0LmVsQ2Fj
aGVbZS5pZF07RXh0LnJlbW92ZU5vZGUoZS5kb20pO2UuaWQ9RXh0LmlkKGUuZG9tPWQpO0V4dC5F
bGVtZW50LmFkZFRvQ2FjaGUoZS5pc0ZseXdlaWdodD9uZXcgRXh0LkVsZW1lbnQoZS5kb20pOmUp
O3JldHVybiBlfSxjcmVhdGVDaGlsZDpmdW5jdGlvbihlLGQsZyl7ZT1lfHx7dGFnOiJkaXYifTty
ZXR1cm4gZD9iLmluc2VydEJlZm9yZShkLGUsZyE9PXRydWUpOmJbIXRoaXMuZG9tLmZpcnN0Q2hp
bGQ/Im92ZXJ3cml0ZSI6ImFwcGVuZCJdKHRoaXMuZG9tLGUsZyE9PXRydWUpfSx3cmFwOmZ1bmN0
aW9uKGQsZSl7dmFyIGc9Yi5pbnNlcnRCZWZvcmUodGhpcy5kb20sZHx8e3RhZzoiZGl2In0sIWUp
O2cuZG9tP2cuZG9tLmFwcGVuZENoaWxkKHRoaXMuZG9tKTpnLmFwcGVuZENoaWxkKHRoaXMuZG9t
KTtyZXR1cm4gZ30saW5zZXJ0SHRtbDpmdW5jdGlvbihlLGcsZCl7dmFyIGg9Yi5pbnNlcnRIdG1s
KGUsdGhpcy5kb20sZyk7cmV0dXJuIGQ/RXh0LmdldChoKTpofX19KCkpO0V4dC5FbGVtZW50LmFk
ZE1ldGhvZHMoZnVuY3Rpb24oKXt2YXIgaD17fSx4PS8oLVthLXpdKS9naSxiPXt9LHM9ZG9jdW1l
bnQuZGVmYXVsdFZpZXcsdT1FeHQuaXNJRT8ic3R5bGVGbG9hdCI6ImNzc0Zsb2F0IixDPS9hbHBo
YVwob3BhY2l0eT0oLiopXCkvaSxsPS9eXHMrfFxzKyQvZyxBPUV4dC5FbGVtZW50LGQ9InBhZGRp
bmciLGM9Im1hcmdpbiIseT0iYm9yZGVyIix0PSItbGVmdCIscT0iLXJpZ2h0Iix3PSItdG9wIixv
PSItYm90dG9tIixqPSItd2lkdGgiLHI9TWF0aCx6PSJoaWRkZW4iLGU9ImlzQ2xpcHBlZCIsaz0i
b3ZlcmZsb3ciLG49Im92ZXJmbG93LXgiLG09Im92ZXJmbG93LXkiLEI9Im9yaWdpbmFsQ2xpcCIs
aT17bDp5K3QraixyOnkrcStqLHQ6eSt3K2osYjp5K28ran0sZz17bDpkK3QscjpkK3EsdDpkK3cs
YjpkK299LGE9e2w6Yyt0LHI6YytxLHQ6Yyt3LGI6YytvfSxEPUV4dC5FbGVtZW50LmRhdGE7ZnVu
Y3Rpb24gcChFLEYpe3JldHVybiBGLmNoYXJBdCgxKS50b1VwcGVyQ2FzZSgpfWZ1bmN0aW9uIHYo
RSl7cmV0dXJuIGhbRV18fChoW0VdPUU9PSJmbG9hdCI/dTpFLnJlcGxhY2UoeCxwKSl9cmV0dXJu
e2FkanVzdFdpZHRoOmZ1bmN0aW9uKEUpe3ZhciBGPXRoaXM7dmFyIEc9RXh0LmlzTnVtYmVyKEUp
O2lmKEcmJkYuYXV0b0JveEFkanVzdCYmIUYuaXNCb3JkZXJCb3goKSl7RS09KEYuZ2V0Qm9yZGVy
V2lkdGgoImxyIikrRi5nZXRQYWRkaW5nKCJsciIpKX1yZXR1cm4oRyYmRTwwKT8wOkV9LGFkanVz
dEhlaWdodDpmdW5jdGlvbihFKXt2YXIgRj10aGlzO3ZhciBHPUV4dC5pc051bWJlcihFKTtpZihH
JiZGLmF1dG9Cb3hBZGp1c3QmJiFGLmlzQm9yZGVyQm94KCkpe0UtPShGLmdldEJvcmRlcldpZHRo
KCJ0YiIpK0YuZ2V0UGFkZGluZygidGIiKSl9cmV0dXJuKEcmJkU8MCk/MDpFfSxhZGRDbGFzczpm
dW5jdGlvbihIKXt2YXIgST10aGlzLEcsRSxGO0g9RXh0LmlzQXJyYXkoSCk/SDpbSF07Zm9yKEc9
MCxFPUgubGVuZ3RoO0c8RTtHKyspe0Y9SFtHXTtpZihGKXtJLmRvbS5jbGFzc05hbWUrPSghSS5o
YXNDbGFzcyhGKSYmRj8iICIrRjoiIil9fXJldHVybiBJfSxyYWRpb0NsYXNzOmZ1bmN0aW9uKEgp
e3ZhciBJPXRoaXMuZG9tLnBhcmVudE5vZGUuY2hpbGROb2RlcyxGO0g9RXh0LmlzQXJyYXkoSCk/
SDpbSF07Zm9yKHZhciBHPTAsRT1JLmxlbmd0aDtHPEU7RysrKXtGPUlbR107aWYoRiYmRi5ub2Rl
VHlwZT09MSl7RXh0LmZseShGLCJfaW50ZXJuYWwiKS5yZW1vdmVDbGFzcyhIKX19cmV0dXJuIHRo
aXMuYWRkQ2xhc3MoSCl9LHJlbW92ZUNsYXNzOmZ1bmN0aW9uKEgpe3ZhciBJPXRoaXMsRjtIPUV4
dC5pc0FycmF5KEgpP0g6W0hdO2lmKEkuZG9tJiZJLmRvbS5jbGFzc05hbWUpe2Zvcih2YXIgRz0w
LEU9SC5sZW5ndGg7RzxFO0crKyl7Rj1IW0ddO2lmKEYpe0kuZG9tLmNsYXNzTmFtZT1JLmRvbS5j
bGFzc05hbWUucmVwbGFjZShiW0ZdPWJbRl18fG5ldyBSZWdFeHAoIig/Ol58XFxzKykiK0YrIig/
Olxccyt8JCkiLCJnIiksIiAiKX19fXJldHVybiBJfSx0b2dnbGVDbGFzczpmdW5jdGlvbihFKXty
ZXR1cm4gdGhpcy5oYXNDbGFzcyhFKT90aGlzLnJlbW92ZUNsYXNzKEUpOnRoaXMuYWRkQ2xhc3Mo
RSl9LGhhc0NsYXNzOmZ1bmN0aW9uKEUpe3JldHVybiBFJiYoIiAiK3RoaXMuZG9tLmNsYXNzTmFt
ZSsiICIpLmluZGV4T2YoIiAiK0UrIiAiKSE9LTF9LHJlcGxhY2VDbGFzczpmdW5jdGlvbihGLEUp
e3JldHVybiB0aGlzLnJlbW92ZUNsYXNzKEYpLmFkZENsYXNzKEUpfSxpc1N0eWxlOmZ1bmN0aW9u
KEUsRil7cmV0dXJuIHRoaXMuZ2V0U3R5bGUoRSk9PUZ9LGdldFN0eWxlOmZ1bmN0aW9uKCl7cmV0
dXJuIHMmJnMuZ2V0Q29tcHV0ZWRTdHlsZT9mdW5jdGlvbihLKXt2YXIgSD10aGlzLmRvbSxFLEcs
RixJLEo9RXh0LmlzV2ViS2l0LEk7aWYoSD09ZG9jdW1lbnQpe3JldHVybiBudWxsfUs9dihLKTtp
ZihKJiYvbWFyZ2luUmlnaHQvLnRlc3QoSykpe0k9dGhpcy5nZXRTdHlsZSgiZGlzcGxheSIpO0gu
c3R5bGUuZGlzcGxheT0iaW5saW5lLWJsb2NrIn1GPShFPUguc3R5bGVbS10pP0U6KEc9cy5nZXRD
b21wdXRlZFN0eWxlKEgsIiIpKT9HW0tdOm51bGw7aWYoSil7aWYoRj09InJnYmEoMCwgMCwgMCwg
MCkiKXtGPSJ0cmFuc3BhcmVudCJ9ZWxzZXtpZihJKXtILnN0eWxlLmRpc3BsYXk9SX19fXJldHVy
biBGfTpmdW5jdGlvbihJKXt2YXIgRz10aGlzLmRvbSxFLEY7aWYoRz09ZG9jdW1lbnQpe3JldHVy
biBudWxsfWlmKEk9PSJvcGFjaXR5Iil7aWYoRy5zdHlsZS5maWx0ZXIubWF0Y2gpe2lmKEU9Ry5z
dHlsZS5maWx0ZXIubWF0Y2goQykpe3ZhciBIPXBhcnNlRmxvYXQoRVsxXSk7aWYoIWlzTmFOKEgp
KXtyZXR1cm4gSD9ILzEwMDowfX19cmV0dXJuIDF9ST12KEkpO3JldHVybiBHLnN0eWxlW0ldfHwo
KEY9Ry5jdXJyZW50U3R5bGUpP0ZbSV06bnVsbCl9fSgpLGdldENvbG9yOmZ1bmN0aW9uKEUsRixK
KXt2YXIgSD10aGlzLmdldFN0eWxlKEUpLEc9RXh0LmlzRGVmaW5lZChKKT9KOiIjIixJO2lmKCFI
fHwvdHJhbnNwYXJlbnR8aW5oZXJpdC8udGVzdChIKSl7cmV0dXJuIEZ9aWYoL15yLy50ZXN0KEgp
KXtFeHQuZWFjaChILnNsaWNlKDQsSC5sZW5ndGgtMSkuc3BsaXQoIiwiKSxmdW5jdGlvbihLKXtJ
PXBhcnNlSW50KEssMTApO0crPShJPDE2PyIwIjoiIikrSS50b1N0cmluZygxNil9KX1lbHNle0g9
SC5yZXBsYWNlKCIjIiwiIik7Rys9SC5sZW5ndGg9PTM/SC5yZXBsYWNlKC9eKFx3KShcdykoXHcp
JC8sIiQxJDEkMiQyJDMkMyIpOkh9cmV0dXJuKEcubGVuZ3RoPjU/Ry50b0xvd2VyQ2FzZSgpOkYp
fSxzZXRTdHlsZTpmdW5jdGlvbihJLEgpe3ZhciBGLEcsRTtpZighRXh0LmlzT2JqZWN0KEkpKXtG
PXt9O0ZbSV09SDtJPUZ9Zm9yKEcgaW4gSSl7SD1JW0ddO0c9PSJvcGFjaXR5Ij90aGlzLnNldE9w
YWNpdHkoSCk6dGhpcy5kb20uc3R5bGVbdihHKV09SH1yZXR1cm4gdGhpc30sc2V0T3BhY2l0eTpm
dW5jdGlvbihGLEUpe3ZhciBJPXRoaXMsRz1JLmRvbS5zdHlsZTtpZighRXx8IUkuYW5pbSl7aWYo
RXh0LmlzSUUpe3ZhciBIPUY8MT8iYWxwaGEob3BhY2l0eT0iK0YqMTAwKyIpIjoiIixKPUcuZmls
dGVyLnJlcGxhY2UoQywiIikucmVwbGFjZShsLCIiKTtHLnpvb209MTtHLmZpbHRlcj1KKyhKLmxl
bmd0aD4wPyIgIjoiIikrSH1lbHNle0cub3BhY2l0eT1GfX1lbHNle0kuYW5pbSh7b3BhY2l0eTp7
dG86Rn19LEkucHJlYW5pbShhcmd1bWVudHMsMSksbnVsbCwwLjM1LCJlYXNlSW4iKX1yZXR1cm4g
SX0sY2xlYXJPcGFjaXR5OmZ1bmN0aW9uKCl7dmFyIEU9dGhpcy5kb20uc3R5bGU7aWYoRXh0Lmlz
SUUpe2lmKCFFeHQuaXNFbXB0eShFLmZpbHRlcikpe0UuZmlsdGVyPUUuZmlsdGVyLnJlcGxhY2Uo
QywiIikucmVwbGFjZShsLCIiKX19ZWxzZXtFLm9wYWNpdHk9RVsiLW1vei1vcGFjaXR5Il09RVsi
LWtodG1sLW9wYWNpdHkiXT0iIn1yZXR1cm4gdGhpc30sZ2V0SGVpZ2h0OmZ1bmN0aW9uKEcpe3Zh
ciBGPXRoaXMsST1GLmRvbSxIPUV4dC5pc0lFJiZGLmlzU3R5bGUoImRpc3BsYXkiLCJub25lIiks
RT1yLm1heChJLm9mZnNldEhlaWdodCxIPzA6SS5jbGllbnRIZWlnaHQpfHwwO0U9IUc/RTpFLUYu
Z2V0Qm9yZGVyV2lkdGgoInRiIiktRi5nZXRQYWRkaW5nKCJ0YiIpO3JldHVybiBFPDA/MDpFfSxn
ZXRXaWR0aDpmdW5jdGlvbihGKXt2YXIgRz10aGlzLEk9Ry5kb20sSD1FeHQuaXNJRSYmRy5pc1N0
eWxlKCJkaXNwbGF5Iiwibm9uZSIpLEU9ci5tYXgoSS5vZmZzZXRXaWR0aCxIPzA6SS5jbGllbnRX
aWR0aCl8fDA7RT0hRj9FOkUtRy5nZXRCb3JkZXJXaWR0aCgibHIiKS1HLmdldFBhZGRpbmcoImxy
Iik7cmV0dXJuIEU8MD8wOkV9LHNldFdpZHRoOmZ1bmN0aW9uKEYsRSl7dmFyIEc9dGhpcztGPUcu
YWRqdXN0V2lkdGgoRik7IUV8fCFHLmFuaW0/Ry5kb20uc3R5bGUud2lkdGg9Ry5hZGRVbml0cyhG
KTpHLmFuaW0oe3dpZHRoOnt0bzpGfX0sRy5wcmVhbmltKGFyZ3VtZW50cywxKSk7cmV0dXJuIEd9
LHNldEhlaWdodDpmdW5jdGlvbihFLEYpe3ZhciBHPXRoaXM7RT1HLmFkanVzdEhlaWdodChFKTsh
Rnx8IUcuYW5pbT9HLmRvbS5zdHlsZS5oZWlnaHQ9Ry5hZGRVbml0cyhFKTpHLmFuaW0oe2hlaWdo
dDp7dG86RX19LEcucHJlYW5pbShhcmd1bWVudHMsMSkpO3JldHVybiBHfSxnZXRCb3JkZXJXaWR0
aDpmdW5jdGlvbihFKXtyZXR1cm4gdGhpcy5hZGRTdHlsZXMoRSxpKX0sZ2V0UGFkZGluZzpmdW5j
dGlvbihFKXtyZXR1cm4gdGhpcy5hZGRTdHlsZXMoRSxnKX0sY2xpcDpmdW5jdGlvbigpe3ZhciBF
PXRoaXMsRj1FLmRvbTtpZighRChGLGUpKXtEKEYsZSx0cnVlKTtEKEYsQix7bzpFLmdldFN0eWxl
KGspLHg6RS5nZXRTdHlsZShuKSx5OkUuZ2V0U3R5bGUobSl9KTtFLnNldFN0eWxlKGsseik7RS5z
ZXRTdHlsZShuLHopO0Uuc2V0U3R5bGUobSx6KX1yZXR1cm4gRX0sdW5jbGlwOmZ1bmN0aW9uKCl7
dmFyIEU9dGhpcyxHPUUuZG9tO2lmKEQoRyxlKSl7RChHLGUsZmFsc2UpO3ZhciBGPUQoRyxCKTtp
ZihGLm8pe0Uuc2V0U3R5bGUoayxGLm8pfWlmKEYueCl7RS5zZXRTdHlsZShuLEYueCl9aWYoRi55
KXtFLnNldFN0eWxlKG0sRi55KX19cmV0dXJuIEV9LGFkZFN0eWxlczpmdW5jdGlvbihKLEkpe3Zh
ciBLPTAsRj1KLm1hdGNoKC9cdy9nKSxIO2Zvcih2YXIgRz0wLEU9Ri5sZW5ndGg7RzxFO0crKyl7
SD1GW0ddJiZwYXJzZUludCh0aGlzLmdldFN0eWxlKElbRltHXV0pLDEwKTtpZihIKXtLKz1yLmFi
cyhIKX19cmV0dXJuIEt9LG1hcmdpbnM6YX19KCkpOyhmdW5jdGlvbigpe3ZhciBhPUV4dC5saWIu
RG9tLGI9ImxlZnQiLGc9InJpZ2h0IixkPSJ0b3AiLGk9ImJvdHRvbSIsaD0icG9zaXRpb24iLGM9
InN0YXRpYyIsZT0icmVsYXRpdmUiLGo9ImF1dG8iLGs9InotaW5kZXgiO0V4dC5FbGVtZW50LmFk
ZE1ldGhvZHMoe2dldFg6ZnVuY3Rpb24oKXtyZXR1cm4gYS5nZXRYKHRoaXMuZG9tKX0sZ2V0WTpm
dW5jdGlvbigpe3JldHVybiBhLmdldFkodGhpcy5kb20pfSxnZXRYWTpmdW5jdGlvbigpe3JldHVy
biBhLmdldFhZKHRoaXMuZG9tKX0sZ2V0T2Zmc2V0c1RvOmZ1bmN0aW9uKGwpe3ZhciBuPXRoaXMu
Z2V0WFkoKSxtPUV4dC5mbHkobCwiX2ludGVybmFsIikuZ2V0WFkoKTtyZXR1cm5bblswXS1tWzBd
LG5bMV0tbVsxXV19LHNldFg6ZnVuY3Rpb24obCxtKXtyZXR1cm4gdGhpcy5zZXRYWShbbCx0aGlz
LmdldFkoKV0sdGhpcy5hbmltVGVzdChhcmd1bWVudHMsbSwxKSl9LHNldFk6ZnVuY3Rpb24obSxs
KXtyZXR1cm4gdGhpcy5zZXRYWShbdGhpcy5nZXRYKCksbV0sdGhpcy5hbmltVGVzdChhcmd1bWVu
dHMsbCwxKSl9LHNldExlZnQ6ZnVuY3Rpb24obCl7dGhpcy5zZXRTdHlsZShiLHRoaXMuYWRkVW5p
dHMobCkpO3JldHVybiB0aGlzfSxzZXRUb3A6ZnVuY3Rpb24obCl7dGhpcy5zZXRTdHlsZShkLHRo
aXMuYWRkVW5pdHMobCkpO3JldHVybiB0aGlzfSxzZXRSaWdodDpmdW5jdGlvbihsKXt0aGlzLnNl
dFN0eWxlKGcsdGhpcy5hZGRVbml0cyhsKSk7cmV0dXJuIHRoaXN9LHNldEJvdHRvbTpmdW5jdGlv
bihsKXt0aGlzLnNldFN0eWxlKGksdGhpcy5hZGRVbml0cyhsKSk7cmV0dXJuIHRoaXN9LHNldFhZ
OmZ1bmN0aW9uKG4sbCl7dmFyIG09dGhpcztpZighbHx8IW0uYW5pbSl7YS5zZXRYWShtLmRvbSxu
KX1lbHNle20uYW5pbSh7cG9pbnRzOnt0bzpufX0sbS5wcmVhbmltKGFyZ3VtZW50cywxKSwibW90
aW9uIil9cmV0dXJuIG19LHNldExvY2F0aW9uOmZ1bmN0aW9uKGwsbixtKXtyZXR1cm4gdGhpcy5z
ZXRYWShbbCxuXSx0aGlzLmFuaW1UZXN0KGFyZ3VtZW50cyxtLDIpKX0sbW92ZVRvOmZ1bmN0aW9u
KGwsbixtKXtyZXR1cm4gdGhpcy5zZXRYWShbbCxuXSx0aGlzLmFuaW1UZXN0KGFyZ3VtZW50cyxt
LDIpKX0sZ2V0TGVmdDpmdW5jdGlvbihsKXtyZXR1cm4gIWw/dGhpcy5nZXRYKCk6cGFyc2VJbnQo
dGhpcy5nZXRTdHlsZShiKSwxMCl8fDB9LGdldFJpZ2h0OmZ1bmN0aW9uKGwpe3ZhciBtPXRoaXM7
cmV0dXJuICFsP20uZ2V0WCgpK20uZ2V0V2lkdGgoKToobS5nZXRMZWZ0KHRydWUpK20uZ2V0V2lk
dGgoKSl8fDB9LGdldFRvcDpmdW5jdGlvbihsKXtyZXR1cm4gIWw/dGhpcy5nZXRZKCk6cGFyc2VJ
bnQodGhpcy5nZXRTdHlsZShkKSwxMCl8fDB9LGdldEJvdHRvbTpmdW5jdGlvbihsKXt2YXIgbT10
aGlzO3JldHVybiAhbD9tLmdldFkoKSttLmdldEhlaWdodCgpOihtLmdldFRvcCh0cnVlKSttLmdl
dEhlaWdodCgpKXx8MH0scG9zaXRpb246ZnVuY3Rpb24ocCxvLGwsbil7dmFyIG09dGhpcztpZigh
cCYmbS5pc1N0eWxlKGgsYykpe20uc2V0U3R5bGUoaCxlKX1lbHNle2lmKHApe20uc2V0U3R5bGUo
aCxwKX19aWYobyl7bS5zZXRTdHlsZShrLG8pfWlmKGx8fG4pe20uc2V0WFkoW2x8fGZhbHNlLG58
fGZhbHNlXSl9fSxjbGVhclBvc2l0aW9uaW5nOmZ1bmN0aW9uKGwpe2w9bHx8IiI7dGhpcy5zZXRT
dHlsZSh7bGVmdDpsLHJpZ2h0OmwsdG9wOmwsYm90dG9tOmwsInotaW5kZXgiOiIiLHBvc2l0aW9u
OmN9KTtyZXR1cm4gdGhpc30sZ2V0UG9zaXRpb25pbmc6ZnVuY3Rpb24oKXt2YXIgbT10aGlzLmdl
dFN0eWxlKGIpO3ZhciBuPXRoaXMuZ2V0U3R5bGUoZCk7cmV0dXJue3Bvc2l0aW9uOnRoaXMuZ2V0
U3R5bGUoaCksbGVmdDptLHJpZ2h0Om0/IiI6dGhpcy5nZXRTdHlsZShnKSx0b3A6bixib3R0b206
bj8iIjp0aGlzLmdldFN0eWxlKGkpLCJ6LWluZGV4Ijp0aGlzLmdldFN0eWxlKGspfX0sc2V0UG9z
aXRpb25pbmc6ZnVuY3Rpb24obCl7dmFyIG49dGhpcyxtPW4uZG9tLnN0eWxlO24uc2V0U3R5bGUo
bCk7aWYobC5yaWdodD09ail7bS5yaWdodD0iIn1pZihsLmJvdHRvbT09ail7bS5ib3R0b209IiJ9
cmV0dXJuIG59LHRyYW5zbGF0ZVBvaW50czpmdW5jdGlvbihtLHUpe3U9aXNOYU4obVsxXSk/dTpt
WzFdO209aXNOYU4obVswXSk/bTptWzBdO3ZhciBxPXRoaXMscj1xLmlzU3R5bGUoaCxlKSxzPXEu
Z2V0WFkoKSxuPXBhcnNlSW50KHEuZ2V0U3R5bGUoYiksMTApLHA9cGFyc2VJbnQocS5nZXRTdHls
ZShkKSwxMCk7bj0haXNOYU4obik/bjoocj8wOnEuZG9tLm9mZnNldExlZnQpO3A9IWlzTmFOKHAp
P3A6KHI/MDpxLmRvbS5vZmZzZXRUb3ApO3JldHVybntsZWZ0OihtLXNbMF0rbiksdG9wOih1LXNb
MV0rcCl9fSxhbmltVGVzdDpmdW5jdGlvbihtLGwsbil7cmV0dXJuICEhbCYmdGhpcy5wcmVhbmlt
P3RoaXMucHJlYW5pbShtLG4pOmZhbHNlfX0pfSkoKTtFeHQuRWxlbWVudC5hZGRNZXRob2RzKHtp
c1Njcm9sbGFibGU6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmRvbTtyZXR1cm4gYS5zY3JvbGxIZWln
aHQ+YS5jbGllbnRIZWlnaHR8fGEuc2Nyb2xsV2lkdGg+YS5jbGllbnRXaWR0aH0sc2Nyb2xsVG86
ZnVuY3Rpb24oYSxiKXt0aGlzLmRvbVsic2Nyb2xsIisoL3RvcC9pLnRlc3QoYSk/IlRvcCI6Ikxl
ZnQiKV09YjtyZXR1cm4gdGhpc30sZ2V0U2Nyb2xsOmZ1bmN0aW9uKCl7dmFyIGk9dGhpcy5kb20s
aD1kb2N1bWVudCxhPWguYm9keSxjPWguZG9jdW1lbnRFbGVtZW50LGIsZyxlO2lmKGk9PWh8fGk9
PWEpe2lmKEV4dC5pc0lFJiZFeHQuaXNTdHJpY3Qpe2I9Yy5zY3JvbGxMZWZ0O2c9Yy5zY3JvbGxU
b3B9ZWxzZXtiPXdpbmRvdy5wYWdlWE9mZnNldDtnPXdpbmRvdy5wYWdlWU9mZnNldH1lPXtsZWZ0
OmJ8fChhP2Euc2Nyb2xsTGVmdDowKSx0b3A6Z3x8KGE/YS5zY3JvbGxUb3A6MCl9fWVsc2V7ZT17
bGVmdDppLnNjcm9sbExlZnQsdG9wOmkuc2Nyb2xsVG9wfX1yZXR1cm4gZX19KTtFeHQuRWxlbWVu
dC5WSVNJQklMSVRZPTE7RXh0LkVsZW1lbnQuRElTUExBWT0yO0V4dC5FbGVtZW50LmFkZE1ldGhv
ZHMoZnVuY3Rpb24oKXt2YXIgaD0idmlzaWJpbGl0eSIsZD0iZGlzcGxheSIsYj0iaGlkZGVuIixq
PSJub25lIixhPSJvcmlnaW5hbERpc3BsYXkiLGM9InZpc2liaWxpdHlNb2RlIixlPUV4dC5FbGVt
ZW50LkRJU1BMQVksZz1FeHQuRWxlbWVudC5kYXRhLGk9ZnVuY3Rpb24obSl7dmFyIGw9ZyhtLGEp
O2lmKGw9PT11bmRlZmluZWQpe2cobSxhLGw9IiIpfXJldHVybiBsfSxrPWZ1bmN0aW9uKG4pe3Zh
ciBsPWcobixjKTtpZihsPT09dW5kZWZpbmVkKXtnKG4sYyxsPTEpfXJldHVybiBsfTtyZXR1cm57
b3JpZ2luYWxEaXNwbGF5OiIiLHZpc2liaWxpdHlNb2RlOjEsc2V0VmlzaWJpbGl0eU1vZGU6ZnVu
Y3Rpb24obCl7Zyh0aGlzLmRvbSxjLGwpO3JldHVybiB0aGlzfSxhbmltYXRlOmZ1bmN0aW9uKG0s
byxuLHAsbCl7dGhpcy5hbmltKG0se2R1cmF0aW9uOm8sY2FsbGJhY2s6bixlYXNpbmc6cH0sbCk7
cmV0dXJuIHRoaXN9LGFuaW06ZnVuY3Rpb24obyxwLG0scixuLGwpe209bXx8InJ1biI7cD1wfHx7
fTt2YXIgcT10aGlzLHM9RXh0LmxpYi5BbmltW21dKHEuZG9tLG8sKHAuZHVyYXRpb258fHIpfHww
LjM1LChwLmVhc2luZ3x8bil8fCJlYXNlT3V0IixmdW5jdGlvbigpe2lmKGwpe2wuY2FsbChxKX1p
ZihwLmNhbGxiYWNrKXtwLmNhbGxiYWNrLmNhbGwocC5zY29wZXx8cSxxLHApfX0scSk7cC5hbmlt
PXM7cmV0dXJuIHN9LHByZWFuaW06ZnVuY3Rpb24obCxtKXtyZXR1cm4gIWxbbV0/ZmFsc2U6KEV4
dC5pc09iamVjdChsW21dKT9sW21dOntkdXJhdGlvbjpsW20rMV0sY2FsbGJhY2s6bFttKzJdLGVh
c2luZzpsW20rM119KX0saXNWaXNpYmxlOmZ1bmN0aW9uKCl7cmV0dXJuICF0aGlzLmlzU3R5bGUo
aCxiKSYmIXRoaXMuaXNTdHlsZShkLGopfSxzZXRWaXNpYmxlOmZ1bmN0aW9uKHAsbSl7dmFyIG49
dGhpcyxvPW4uZG9tLGw9ayh0aGlzLmRvbSk9PWU7aWYoIW18fCFuLmFuaW0pe2lmKGwpe24uc2V0
RGlzcGxheWVkKHApfWVsc2V7bi5maXhEaXNwbGF5KCk7by5zdHlsZS52aXNpYmlsaXR5PXA/InZp
c2libGUiOmJ9fWVsc2V7aWYocCl7bi5zZXRPcGFjaXR5KDAuMDEpO24uc2V0VmlzaWJsZSh0cnVl
KX1uLmFuaW0oe29wYWNpdHk6e3RvOihwPzE6MCl9fSxuLnByZWFuaW0oYXJndW1lbnRzLDEpLG51
bGwsMC4zNSwiZWFzZUluIixmdW5jdGlvbigpe2lmKCFwKXtvLnN0eWxlW2w/ZDpoXT0obCk/ajpi
O0V4dC5mbHkobykuc2V0T3BhY2l0eSgxKX19KX1yZXR1cm4gbn0sdG9nZ2xlOmZ1bmN0aW9uKGwp
e3ZhciBtPXRoaXM7bS5zZXRWaXNpYmxlKCFtLmlzVmlzaWJsZSgpLG0ucHJlYW5pbShhcmd1bWVu
dHMsMCkpO3JldHVybiBtfSxzZXREaXNwbGF5ZWQ6ZnVuY3Rpb24obCl7aWYodHlwZW9mIGw9PSJi
b29sZWFuIil7bD1sP2kodGhpcy5kb20pOmp9dGhpcy5zZXRTdHlsZShkLGwpO3JldHVybiB0aGlz
fSxmaXhEaXNwbGF5OmZ1bmN0aW9uKCl7dmFyIGw9dGhpcztpZihsLmlzU3R5bGUoZCxqKSl7bC5z
ZXRTdHlsZShoLGIpO2wuc2V0U3R5bGUoZCxpKHRoaXMuZG9tKSk7aWYobC5pc1N0eWxlKGQsaikp
e2wuc2V0U3R5bGUoZCwiYmxvY2siKX19fSxoaWRlOmZ1bmN0aW9uKGwpe3RoaXMuc2V0VmlzaWJs
ZShmYWxzZSx0aGlzLnByZWFuaW0oYXJndW1lbnRzLDApKTtyZXR1cm4gdGhpc30sc2hvdzpmdW5j
dGlvbihsKXt0aGlzLnNldFZpc2libGUodHJ1ZSx0aGlzLnByZWFuaW0oYXJndW1lbnRzLDApKTty
ZXR1cm4gdGhpc319fSgpKTsoZnVuY3Rpb24oKXt2YXIgeT1udWxsLEE9dW5kZWZpbmVkLGs9dHJ1
ZSx0PWZhbHNlLGo9InNldFgiLGg9InNldFkiLGE9InNldFhZIixuPSJsZWZ0IixsPSJib3R0b20i
LHM9InRvcCIsbT0icmlnaHQiLHE9ImhlaWdodCIsZz0id2lkdGgiLGk9InBvaW50cyIsdz0iaGlk
ZGVuIix6PSJhYnNvbHV0ZSIsdT0idmlzaWJsZSIsZT0ibW90aW9uIixvPSJwb3NpdGlvbiIscj0i
ZWFzZU91dCIsZD1uZXcgRXh0LkVsZW1lbnQuRmx5d2VpZ2h0KCksdj17fSx4PWZ1bmN0aW9uKEIp
e3JldHVybiBCfHx7fX0scD1mdW5jdGlvbihCKXtkLmRvbT1CO2QuaWQ9RXh0LmlkKEIpO3JldHVy
biBkfSxjPWZ1bmN0aW9uKEIpe2lmKCF2W0JdKXt2W0JdPVtdfXJldHVybiB2W0JdfSxiPWZ1bmN0
aW9uKEMsQil7dltDXT1CfTtFeHQuZW5hYmxlRng9aztFeHQuRng9e3N3aXRjaFN0YXRlbWVudHM6
ZnVuY3Rpb24oQyxELEIpe3JldHVybiBELmFwcGx5KHRoaXMsQltDXSl9LHNsaWRlSW46ZnVuY3Rp
b24oSCxFKXtFPXgoRSk7dmFyIEo9dGhpcyxHPUouZG9tLE09Ry5zdHlsZSxPLEIsTCxELEMsTSxJ
LE4sSyxGO0g9SHx8InQiO0oucXVldWVGeChFLGZ1bmN0aW9uKCl7Tz1wKEcpLmdldFhZKCk7cChH
KS5maXhEaXNwbGF5KCk7Qj1wKEcpLmdldEZ4UmVzdG9yZSgpO0w9e3g6T1swXSx5Ok9bMV0sMDpP
WzBdLDE6T1sxXSx3aWR0aDpHLm9mZnNldFdpZHRoLGhlaWdodDpHLm9mZnNldEhlaWdodH07TC5y
aWdodD1MLngrTC53aWR0aDtMLmJvdHRvbT1MLnkrTC5oZWlnaHQ7cChHKS5zZXRXaWR0aChMLndp
ZHRoKS5zZXRIZWlnaHQoTC5oZWlnaHQpO0Q9cChHKS5meFdyYXAoQi5wb3MsRSx3KTtNLnZpc2li
aWxpdHk9dTtNLnBvc2l0aW9uPXo7ZnVuY3Rpb24gUCgpe3AoRykuZnhVbndyYXAoRCxCLnBvcyxF
KTtNLndpZHRoPUIud2lkdGg7TS5oZWlnaHQ9Qi5oZWlnaHQ7cChHKS5hZnRlckZ4KEUpfU49e3Rv
OltMLngsTC55XX07Sz17dG86TC53aWR0aH07Rj17dG86TC5oZWlnaHR9O2Z1bmN0aW9uIFEoVSxS
LFYsUyxYLFosYWMsYWIsYWEsVyxUKXt2YXIgWT17fTtwKFUpLnNldFdpZHRoKFYpLnNldEhlaWdo
dChTKTtpZihwKFUpW1hdKXtwKFUpW1hdKFopfVJbYWNdPVJbYWJdPSIwIjtpZihhYSl7WS53aWR0
aD1hYX1pZihXKXtZLmhlaWdodD1XfWlmKFQpe1kucG9pbnRzPVR9cmV0dXJuIFl9ST1wKEcpLnN3
aXRjaFN0YXRlbWVudHMoSC50b0xvd2VyQ2FzZSgpLFEse3Q6W0QsTSxMLndpZHRoLDAseSx5LG4s
bCx5LEYseV0sbDpbRCxNLDAsTC5oZWlnaHQseSx5LG0scyxLLHkseV0scjpbRCxNLEwud2lkdGgs
TC5oZWlnaHQsaixMLnJpZ2h0LG4scyx5LHksTl0sYjpbRCxNLEwud2lkdGgsTC5oZWlnaHQsaCxM
LmJvdHRvbSxuLHMseSxGLE5dLHRsOltELE0sMCwwLHkseSxtLGwsSyxGLE5dLGJsOltELE0sMCww
LGgsTC55K0wuaGVpZ2h0LG0scyxLLEYsTl0sYnI6W0QsTSwwLDAsYSxbTC5yaWdodCxMLmJvdHRv
bV0sbixzLEssRixOXSx0cjpbRCxNLDAsMCxqLEwueCtMLndpZHRoLG4sbCxLLEYsTl19KTtNLnZp
c2liaWxpdHk9dTtwKEQpLnNob3coKTthcmd1bWVudHMuY2FsbGVlLmFuaW09cChEKS5meGFuaW0o
SSxFLGUsMC41LHIsUCl9KTtyZXR1cm4gSn0sc2xpZGVPdXQ6ZnVuY3Rpb24oRixEKXtEPXgoRCk7
dmFyIEg9dGhpcyxFPUguZG9tLEs9RS5zdHlsZSxMPUguZ2V0WFkoKSxDLEIsSSxKLEc9e3RvOjB9
O0Y9Rnx8InQiO0gucXVldWVGeChELGZ1bmN0aW9uKCl7Qj1wKEUpLmdldEZ4UmVzdG9yZSgpO0k9
e3g6TFswXSx5OkxbMV0sMDpMWzBdLDE6TFsxXSx3aWR0aDpFLm9mZnNldFdpZHRoLGhlaWdodDpF
Lm9mZnNldEhlaWdodH07SS5yaWdodD1JLngrSS53aWR0aDtJLmJvdHRvbT1JLnkrSS5oZWlnaHQ7
cChFKS5zZXRXaWR0aChJLndpZHRoKS5zZXRIZWlnaHQoSS5oZWlnaHQpO0M9cChFKS5meFdyYXAo
Qi5wb3MsRCx1KTtLLnZpc2liaWxpdHk9dTtLLnBvc2l0aW9uPXo7cChDKS5zZXRXaWR0aChJLndp
ZHRoKS5zZXRIZWlnaHQoSS5oZWlnaHQpO2Z1bmN0aW9uIE0oKXtELnVzZURpc3BsYXk/cChFKS5z
ZXREaXNwbGF5ZWQodCk6cChFKS5oaWRlKCk7cChFKS5meFVud3JhcChDLEIucG9zLEQpO0sud2lk
dGg9Qi53aWR0aDtLLmhlaWdodD1CLmhlaWdodDtwKEUpLmFmdGVyRngoRCl9ZnVuY3Rpb24gTihP
LFcsVSxYLFMsVixSLFQsUSl7dmFyIFA9e307T1tXXT1PW1VdPSIwIjtQW1hdPVM7aWYoVil7UFtW
XT1SfWlmKFQpe1BbVF09UX1yZXR1cm4gUH1KPXAoRSkuc3dpdGNoU3RhdGVtZW50cyhGLnRvTG93
ZXJDYXNlKCksTix7dDpbSyxuLGwscSxHXSxsOltLLG0scyxnLEddLHI6W0ssbixzLGcsRyxpLHt0
bzpbSS5yaWdodCxJLnldfV0sYjpbSyxuLHMscSxHLGkse3RvOltJLngsSS5ib3R0b21dfV0sdGw6
W0ssbSxsLGcsRyxxLEddLGJsOltLLG0scyxnLEcscSxHLGkse3RvOltJLngsSS5ib3R0b21dfV0s
YnI6W0ssbixzLGcsRyxxLEcsaSx7dG86W0kueCtJLndpZHRoLEkuYm90dG9tXX1dLHRyOltLLG4s
bCxnLEcscSxHLGkse3RvOltJLnJpZ2h0LEkueV19XX0pO2FyZ3VtZW50cy5jYWxsZWUuYW5pbT1w
KEMpLmZ4YW5pbShKLEQsZSwwLjUscixNKX0pO3JldHVybiBIfSxwdWZmOmZ1bmN0aW9uKEgpe0g9
eChIKTt2YXIgRj10aGlzLEc9Ri5kb20sQz1HLnN0eWxlLEQsQixFO0YucXVldWVGeChILGZ1bmN0
aW9uKCl7RD1wKEcpLmdldFdpZHRoKCk7Qj1wKEcpLmdldEhlaWdodCgpO3AoRykuY2xlYXJPcGFj
aXR5KCk7cChHKS5zaG93KCk7RT1wKEcpLmdldEZ4UmVzdG9yZSgpO2Z1bmN0aW9uIEkoKXtILnVz
ZURpc3BsYXk/cChHKS5zZXREaXNwbGF5ZWQodCk6cChHKS5oaWRlKCk7cChHKS5jbGVhck9wYWNp
dHkoKTtwKEcpLnNldFBvc2l0aW9uaW5nKEUucG9zKTtDLndpZHRoPUUud2lkdGg7Qy5oZWlnaHQ9
RS5oZWlnaHQ7Qy5mb250U2l6ZT0iIjtwKEcpLmFmdGVyRngoSCl9YXJndW1lbnRzLmNhbGxlZS5h
bmltPXAoRykuZnhhbmltKHt3aWR0aDp7dG86cChHKS5hZGp1c3RXaWR0aChEKjIpfSxoZWlnaHQ6
e3RvOnAoRykuYWRqdXN0SGVpZ2h0KEIqMil9LHBvaW50czp7Ynk6Wy1EKjAuNSwtQiowLjVdfSxv
cGFjaXR5Ont0bzowfSxmb250U2l6ZTp7dG86MjAwLHVuaXQ6IiUifX0sSCxlLDAuNSxyLEkpfSk7
cmV0dXJuIEZ9LHN3aXRjaE9mZjpmdW5jdGlvbihGKXtGPXgoRik7dmFyIEQ9dGhpcyxFPUQuZG9t
LEI9RS5zdHlsZSxDO0QucXVldWVGeChGLGZ1bmN0aW9uKCl7cChFKS5jbGVhck9wYWNpdHkoKTtw
KEUpLmNsaXAoKTtDPXAoRSkuZ2V0RnhSZXN0b3JlKCk7ZnVuY3Rpb24gRygpe0YudXNlRGlzcGxh
eT9wKEUpLnNldERpc3BsYXllZCh0KTpwKEUpLmhpZGUoKTtwKEUpLmNsZWFyT3BhY2l0eSgpO3Ao
RSkuc2V0UG9zaXRpb25pbmcoQy5wb3MpO0Iud2lkdGg9Qy53aWR0aDtCLmhlaWdodD1DLmhlaWdo
dDtwKEUpLmFmdGVyRngoRil9cChFKS5meGFuaW0oe29wYWNpdHk6e3RvOjAuM319LHkseSwwLjEs
eSxmdW5jdGlvbigpe3AoRSkuY2xlYXJPcGFjaXR5KCk7KGZ1bmN0aW9uKCl7cChFKS5meGFuaW0o
e2hlaWdodDp7dG86MX0scG9pbnRzOntieTpbMCxwKEUpLmdldEhlaWdodCgpKjAuNV19fSxGLGUs
MC4zLCJlYXNlSW4iLEcpfSkuZGVmZXIoMTAwKX0pfSk7cmV0dXJuIER9LGhpZ2hsaWdodDpmdW5j
dGlvbihELEgpe0g9eChIKTt2YXIgRj10aGlzLEc9Ri5kb20sQj1ILmF0dHJ8fCJiYWNrZ3JvdW5k
Q29sb3IiLEM9e30sRTtGLnF1ZXVlRngoSCxmdW5jdGlvbigpe3AoRykuY2xlYXJPcGFjaXR5KCk7
cChHKS5zaG93KCk7ZnVuY3Rpb24gSSgpe0cuc3R5bGVbQl09RTtwKEcpLmFmdGVyRngoSCl9RT1H
LnN0eWxlW0JdO0NbQl09e2Zyb206RHx8ImZmZmY5YyIsdG86SC5lbmRDb2xvcnx8cChHKS5nZXRD
b2xvcihCKXx8ImZmZmZmZiJ9O2FyZ3VtZW50cy5jYWxsZWUuYW5pbT1wKEcpLmZ4YW5pbShDLEgs
ImNvbG9yIiwxLCJlYXNlSW4iLEkpfSk7cmV0dXJuIEZ9LGZyYW1lOmZ1bmN0aW9uKEIsRSxIKXtI
PXgoSCk7dmFyIEQ9dGhpcyxHPUQuZG9tLEMsRjtELnF1ZXVlRngoSCxmdW5jdGlvbigpe0I9Qnx8
IiNDM0RBRjkiO2lmKEIubGVuZ3RoPT02KXtCPSIjIitCfUU9RXx8MTtwKEcpLnNob3coKTt2YXIg
TD1wKEcpLmdldFhZKCksSj17eDpMWzBdLHk6TFsxXSwwOkxbMF0sMTpMWzFdLHdpZHRoOkcub2Zm
c2V0V2lkdGgsaGVpZ2h0Okcub2Zmc2V0SGVpZ2h0fSxJPWZ1bmN0aW9uKCl7Qz1wKGRvY3VtZW50
LmJvZHl8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkuY3JlYXRlQ2hpbGQoe3N0eWxlOntwb3Np
dGlvbjp6LCJ6LWluZGV4IjozNTAwMCxib3JkZXI6IjBweCBzb2xpZCAiK0J9fSk7cmV0dXJuIEMu
cXVldWVGeCh7fSxLKX07YXJndW1lbnRzLmNhbGxlZS5hbmltPXtpc0FuaW1hdGVkOnRydWUsc3Rv
cDpmdW5jdGlvbigpe0U9MDtDLnN0b3BGeCgpfX07ZnVuY3Rpb24gSygpe3ZhciBNPUV4dC5pc0Jv
cmRlckJveD8yOjE7Rj1DLmFuaW0oe3RvcDp7ZnJvbTpKLnksdG86Si55LTIwfSxsZWZ0Ontmcm9t
OkoueCx0bzpKLngtMjB9LGJvcmRlcldpZHRoOntmcm9tOjAsdG86MTB9LG9wYWNpdHk6e2Zyb206
MSx0bzowfSxoZWlnaHQ6e2Zyb206Si5oZWlnaHQsdG86Si5oZWlnaHQrMjAqTX0sd2lkdGg6e2Zy
b206Si53aWR0aCx0bzpKLndpZHRoKzIwKk19fSx7ZHVyYXRpb246SC5kdXJhdGlvbnx8MSxjYWxs
YmFjazpmdW5jdGlvbigpe0MucmVtb3ZlKCk7LS1FPjA/SSgpOnAoRykuYWZ0ZXJGeChIKX19KTth
cmd1bWVudHMuY2FsbGVlLmFuaW09e2lzQW5pbWF0ZWQ6dHJ1ZSxzdG9wOmZ1bmN0aW9uKCl7Ri5z
dG9wKCl9fX1JKCl9KTtyZXR1cm4gRH0scGF1c2U6ZnVuY3Rpb24oRCl7dmFyIEM9dGhpcy5kb20s
Qjt0aGlzLnF1ZXVlRngoe30sZnVuY3Rpb24oKXtCPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtwKEMp
LmFmdGVyRngoe30pfSxEKjEwMDApO2FyZ3VtZW50cy5jYWxsZWUuYW5pbT17aXNBbmltYXRlZDp0
cnVlLHN0b3A6ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQoQik7cChDKS5hZnRlckZ4KHt9KX19fSk7
cmV0dXJuIHRoaXN9LGZhZGVJbjpmdW5jdGlvbihEKXtEPXgoRCk7dmFyIEI9dGhpcyxDPUIuZG9t
LEU9RC5lbmRPcGFjaXR5fHwxO0IucXVldWVGeChELGZ1bmN0aW9uKCl7cChDKS5zZXRPcGFjaXR5
KDApO3AoQykuZml4RGlzcGxheSgpO0Muc3R5bGUudmlzaWJpbGl0eT11O2FyZ3VtZW50cy5jYWxs
ZWUuYW5pbT1wKEMpLmZ4YW5pbSh7b3BhY2l0eTp7dG86RX19LEQseSwwLjUscixmdW5jdGlvbigp
e2lmKEU9PTEpe3AoQykuY2xlYXJPcGFjaXR5KCl9cChDKS5hZnRlckZ4KEQpfSl9KTtyZXR1cm4g
Qn0sZmFkZU91dDpmdW5jdGlvbihFKXtFPXgoRSk7dmFyIEM9dGhpcyxEPUMuZG9tLEI9RC5zdHls
ZSxGPUUuZW5kT3BhY2l0eXx8MDtDLnF1ZXVlRngoRSxmdW5jdGlvbigpe2FyZ3VtZW50cy5jYWxs
ZWUuYW5pbT1wKEQpLmZ4YW5pbSh7b3BhY2l0eTp7dG86Rn19LEUseSwwLjUscixmdW5jdGlvbigp
e2lmKEY9PTApe0V4dC5FbGVtZW50LmRhdGEoRCwidmlzaWJpbGl0eU1vZGUiKT09RXh0LkVsZW1l
bnQuRElTUExBWXx8RS51c2VEaXNwbGF5P0IuZGlzcGxheT0ibm9uZSI6Qi52aXNpYmlsaXR5PXc7
cChEKS5jbGVhck9wYWNpdHkoKX1wKEQpLmFmdGVyRngoRSl9KX0pO3JldHVybiBDfSxzY2FsZTpm
dW5jdGlvbihCLEMsRCl7dGhpcy5zaGlmdChFeHQuYXBwbHkoe30sRCx7d2lkdGg6QixoZWlnaHQ6
Q30pKTtyZXR1cm4gdGhpc30sc2hpZnQ6ZnVuY3Rpb24oRCl7RD14KEQpO3ZhciBDPXRoaXMuZG9t
LEI9e307dGhpcy5xdWV1ZUZ4KEQsZnVuY3Rpb24oKXtmb3IodmFyIEUgaW4gRCl7aWYoRFtFXSE9
QSl7QltFXT17dG86RFtFXX19fUIud2lkdGg/Qi53aWR0aC50bz1wKEMpLmFkanVzdFdpZHRoKEQu
d2lkdGgpOkI7Qi5oZWlnaHQ/Qi5oZWlnaHQudG89cChDKS5hZGp1c3RXaWR0aChELmhlaWdodCk6
QjtpZihCLnh8fEIueXx8Qi54eSl7Qi5wb2ludHM9Qi54eXx8e3RvOltCLng/Qi54LnRvOnAoQyku
Z2V0WCgpLEIueT9CLnkudG86cChDKS5nZXRZKCldfX1hcmd1bWVudHMuY2FsbGVlLmFuaW09cChD
KS5meGFuaW0oQixELGUsMC4zNSxyLGZ1bmN0aW9uKCl7cChDKS5hZnRlckZ4KEQpfSl9KTtyZXR1
cm4gdGhpc30sZ2hvc3Q6ZnVuY3Rpb24oRSxDKXtDPXgoQyk7dmFyIEc9dGhpcyxEPUcuZG9tLEo9
RC5zdHlsZSxIPXtvcGFjaXR5Ont0bzowfSxwb2ludHM6e319LEs9SC5wb2ludHMsQixJLEY7RT1F
fHwiYiI7Ry5xdWV1ZUZ4KEMsZnVuY3Rpb24oKXtCPXAoRCkuZ2V0RnhSZXN0b3JlKCk7ST1wKEQp
LmdldFdpZHRoKCk7Rj1wKEQpLmdldEhlaWdodCgpO2Z1bmN0aW9uIEwoKXtDLnVzZURpc3BsYXk/
cChEKS5zZXREaXNwbGF5ZWQodCk6cChEKS5oaWRlKCk7cChEKS5jbGVhck9wYWNpdHkoKTtwKEQp
LnNldFBvc2l0aW9uaW5nKEIucG9zKTtKLndpZHRoPUIud2lkdGg7Si5oZWlnaHQ9Qi5oZWlnaHQ7
cChEKS5hZnRlckZ4KEMpfUsuYnk9cChEKS5zd2l0Y2hTdGF0ZW1lbnRzKEUudG9Mb3dlckNhc2Uo
KSxmdW5jdGlvbihOLE0pe3JldHVybltOLE1dfSx7dDpbMCwtRl0sbDpbLUksMF0scjpbSSwwXSxi
OlswLEZdLHRsOlstSSwtRl0sYmw6Wy1JLEZdLGJyOltJLEZdLHRyOltJLC1GXX0pO2FyZ3VtZW50
cy5jYWxsZWUuYW5pbT1wKEQpLmZ4YW5pbShILEMsZSwwLjUscixMKX0pO3JldHVybiBHfSxzeW5j
Rng6ZnVuY3Rpb24oKXt2YXIgQj10aGlzO0IuZnhEZWZhdWx0cz1FeHQuYXBwbHkoQi5meERlZmF1
bHRzfHx7fSx7YmxvY2s6dCxjb25jdXJyZW50Omssc3RvcEZ4OnR9KTtyZXR1cm4gQn0sc2VxdWVu
Y2VGeDpmdW5jdGlvbigpe3ZhciBCPXRoaXM7Qi5meERlZmF1bHRzPUV4dC5hcHBseShCLmZ4RGVm
YXVsdHN8fHt9LHtibG9jazp0LGNvbmN1cnJlbnQ6dCxzdG9wRng6dH0pO3JldHVybiBCfSxuZXh0
Rng6ZnVuY3Rpb24oKXt2YXIgQj1jKHRoaXMuZG9tLmlkKVswXTtpZihCKXtCLmNhbGwodGhpcyl9
fSxoYXNBY3RpdmVGeDpmdW5jdGlvbigpe3JldHVybiBjKHRoaXMuZG9tLmlkKVswXX0sc3RvcEZ4
OmZ1bmN0aW9uKEIpe3ZhciBDPXRoaXMsRT1DLmRvbS5pZDtpZihDLmhhc0FjdGl2ZUZ4KCkpe3Zh
ciBEPWMoRSlbMF07aWYoRCYmRC5hbmltKXtpZihELmFuaW0uaXNBbmltYXRlZCl7YihFLFtEXSk7
RC5hbmltLnN0b3AoQiE9PXVuZGVmaW5lZD9COmspfWVsc2V7YihFLFtdKX19fXJldHVybiBDfSxi
ZWZvcmVGeDpmdW5jdGlvbihCKXtpZih0aGlzLmhhc0FjdGl2ZUZ4KCkmJiFCLmNvbmN1cnJlbnQp
e2lmKEIuc3RvcEZ4KXt0aGlzLnN0b3BGeCgpO3JldHVybiBrfXJldHVybiB0fXJldHVybiBrfSxo
YXNGeEJsb2NrOmZ1bmN0aW9uKCl7dmFyIEI9Yyh0aGlzLmRvbS5pZCk7cmV0dXJuIEImJkJbMF0m
JkJbMF0uYmxvY2t9LHF1ZXVlRng6ZnVuY3Rpb24oRSxCKXt2YXIgQz1wKHRoaXMuZG9tKTtpZigh
Qy5oYXNGeEJsb2NrKCkpe0V4dC5hcHBseUlmKEUsQy5meERlZmF1bHRzKTtpZighRS5jb25jdXJy
ZW50KXt2YXIgRD1DLmJlZm9yZUZ4KEUpO0IuYmxvY2s9RS5ibG9jaztjKEMuZG9tLmlkKS5wdXNo
KEIpO2lmKEQpe0MubmV4dEZ4KCl9fWVsc2V7Qi5jYWxsKEMpfX1yZXR1cm4gQ30sZnhXcmFwOmZ1
bmN0aW9uKEgsRixEKXt2YXIgRT10aGlzLmRvbSxDLEI7aWYoIUYud3JhcHx8IShDPUV4dC5nZXRE
b20oRi53cmFwKSkpe2lmKEYuZml4UG9zaXRpb24pe0I9cChFKS5nZXRYWSgpfXZhciBHPWRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO0cuc3R5bGUudmlzaWJpbGl0eT1EO0M9RS5wYXJlbnRO
b2RlLmluc2VydEJlZm9yZShHLEUpO3AoQykuc2V0UG9zaXRpb25pbmcoSCk7aWYocChDKS5pc1N0
eWxlKG8sInN0YXRpYyIpKXtwKEMpLnBvc2l0aW9uKCJyZWxhdGl2ZSIpfXAoRSkuY2xlYXJQb3Np
dGlvbmluZygiYXV0byIpO3AoQykuY2xpcCgpO0MuYXBwZW5kQ2hpbGQoRSk7aWYoQil7cChDKS5z
ZXRYWShCKX19cmV0dXJuIEN9LGZ4VW53cmFwOmZ1bmN0aW9uKEMsRixFKXt2YXIgRD10aGlzLmRv
bTtwKEQpLmNsZWFyUG9zaXRpb25pbmcoKTtwKEQpLnNldFBvc2l0aW9uaW5nKEYpO2lmKCFFLndy
YXApe3ZhciBCPXAoQykuZG9tLnBhcmVudE5vZGU7Qi5pbnNlcnRCZWZvcmUoRCxDKTtwKEMpLnJl
bW92ZSgpfX0sZ2V0RnhSZXN0b3JlOmZ1bmN0aW9uKCl7dmFyIEI9dGhpcy5kb20uc3R5bGU7cmV0
dXJue3Bvczp0aGlzLmdldFBvc2l0aW9uaW5nKCksd2lkdGg6Qi53aWR0aCxoZWlnaHQ6Qi5oZWln
aHR9fSxhZnRlckZ4OmZ1bmN0aW9uKEMpe3ZhciBCPXRoaXMuZG9tLEQ9Qi5pZDtpZihDLmFmdGVy
U3R5bGUpe3AoQikuc2V0U3R5bGUoQy5hZnRlclN0eWxlKX1pZihDLmFmdGVyQ2xzKXtwKEIpLmFk
ZENsYXNzKEMuYWZ0ZXJDbHMpfWlmKEMucmVtb3ZlPT1rKXtwKEIpLnJlbW92ZSgpfWlmKEMuY2Fs
bGJhY2spe0MuY2FsbGJhY2suY2FsbChDLnNjb3BlLHAoQikpfWlmKCFDLmNvbmN1cnJlbnQpe2Mo
RCkuc2hpZnQoKTtwKEIpLm5leHRGeCgpfX0sZnhhbmltOmZ1bmN0aW9uKEUsRixDLEcsRCxCKXtD
PUN8fCJydW4iO0Y9Rnx8e307dmFyIEg9RXh0LmxpYi5BbmltW0NdKHRoaXMuZG9tLEUsKEYuZHVy
YXRpb258fEcpfHwwLjM1LChGLmVhc2luZ3x8RCl8fHIsQix0aGlzKTtGLmFuaW09SDtyZXR1cm4g
SH19O0V4dC5GeC5yZXNpemU9RXh0LkZ4LnNjYWxlO0V4dC5FbGVtZW50LmFkZE1ldGhvZHMoRXh0
LkZ4KX0pKCk7RXh0LkNvbXBvc2l0ZUVsZW1lbnRMaXRlPWZ1bmN0aW9uKGIsYSl7dGhpcy5lbGVt
ZW50cz1bXTt0aGlzLmFkZChiLGEpO3RoaXMuZWw9bmV3IEV4dC5FbGVtZW50LkZseXdlaWdodCgp
fTtFeHQuQ29tcG9zaXRlRWxlbWVudExpdGUucHJvdG90eXBlPXtpc0NvbXBvc2l0ZTp0cnVlLGdl
dEVsZW1lbnQ6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5lbDtiLmRvbT1hO2IuaWQ9YS5pZDtyZXR1
cm4gYn0sdHJhbnNmb3JtRWxlbWVudDpmdW5jdGlvbihhKXtyZXR1cm4gRXh0LmdldERvbShhKX0s
Z2V0Q291bnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbGVtZW50cy5sZW5ndGh9LGFkZDpmdW5j
dGlvbihkLGIpe3ZhciBlPXRoaXMsZz1lLmVsZW1lbnRzO2lmKCFkKXtyZXR1cm4gdGhpc31pZihF
eHQuaXNTdHJpbmcoZCkpe2Q9RXh0LkVsZW1lbnQuc2VsZWN0b3JGdW5jdGlvbihkLGIpfWVsc2V7
aWYoZC5pc0NvbXBvc2l0ZSl7ZD1kLmVsZW1lbnRzfWVsc2V7aWYoIUV4dC5pc0l0ZXJhYmxlKGQp
KXtkPVtkXX19fWZvcih2YXIgYz0wLGE9ZC5sZW5ndGg7YzxhOysrYyl7Zy5wdXNoKGUudHJhbnNm
b3JtRWxlbWVudChkW2NdKSl9cmV0dXJuIGV9LGludm9rZTpmdW5jdGlvbihnLGIpe3ZhciBoPXRo
aXMsZD1oLmVsZW1lbnRzLGE9ZC5sZW5ndGgsaixjO2ZvcihjPTA7YzxhO2MrKyl7aj1kW2NdO2lm
KGope0V4dC5FbGVtZW50LnByb3RvdHlwZVtnXS5hcHBseShoLmdldEVsZW1lbnQoaiksYil9fXJl
dHVybiBofSxpdGVtOmZ1bmN0aW9uKGIpe3ZhciBkPXRoaXMsYz1kLmVsZW1lbnRzW2JdLGE9bnVs
bDtpZihjKXthPWQuZ2V0RWxlbWVudChjKX1yZXR1cm4gYX0sYWRkTGlzdGVuZXI6ZnVuY3Rpb24o
YixqLGgsZyl7dmFyIGQ9dGhpcy5lbGVtZW50cyxhPWQubGVuZ3RoLGMsaztmb3IoYz0wO2M8YTtj
Kyspe2s9ZFtjXTtpZihrKXtFeHQuRXZlbnRNYW5hZ2VyLm9uKGssYixqLGh8fGssZyl9fXJldHVy
biB0aGlzfSxlYWNoOmZ1bmN0aW9uKGcsZCl7dmFyIGg9dGhpcyxjPWguZWxlbWVudHMsYT1jLmxl
bmd0aCxiLGo7Zm9yKGI9MDtiPGE7YisrKXtqPWNbYl07aWYoail7aj10aGlzLmdldEVsZW1lbnQo
aik7aWYoZy5jYWxsKGR8fGosaixoLGIpKXticmVha319fXJldHVybiBofSxmaWxsOmZ1bmN0aW9u
KGEpe3ZhciBiPXRoaXM7Yi5lbGVtZW50cz1bXTtiLmFkZChhKTtyZXR1cm4gYn0sZmlsdGVyOmZ1
bmN0aW9uKGEpe3ZhciBiPVtdLGQ9dGhpcyxlPWQuZWxlbWVudHMsYz1FeHQuaXNGdW5jdGlvbihh
KT9hOmZ1bmN0aW9uKGcpe3JldHVybiBnLmlzKGEpfTtkLmVhY2goZnVuY3Rpb24oaixnLGgpe2lm
KGMoaixoKSE9PWZhbHNlKXtiW2IubGVuZ3RoXT1kLnRyYW5zZm9ybUVsZW1lbnQoail9fSk7ZC5l
bGVtZW50cz1iO3JldHVybiBkfSxpbmRleE9mOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmVsZW1l
bnRzLmluZGV4T2YodGhpcy50cmFuc2Zvcm1FbGVtZW50KGEpKX0scmVwbGFjZUVsZW1lbnQ6ZnVu
Y3Rpb24oZSxjLGEpe3ZhciBiPSFpc05hTihlKT9lOnRoaXMuaW5kZXhPZihlKSxnO2lmKGI+LTEp
e2M9RXh0LmdldERvbShjKTtpZihhKXtnPXRoaXMuZWxlbWVudHNbYl07Zy5wYXJlbnROb2RlLmlu
c2VydEJlZm9yZShjLGcpO0V4dC5yZW1vdmVOb2RlKGcpfXRoaXMuZWxlbWVudHMuc3BsaWNlKGIs
MSxjKX1yZXR1cm4gdGhpc30sY2xlYXI6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnRzPVtdfX07RXh0
LkNvbXBvc2l0ZUVsZW1lbnRMaXRlLnByb3RvdHlwZS5vbj1FeHQuQ29tcG9zaXRlRWxlbWVudExp
dGUucHJvdG90eXBlLmFkZExpc3RlbmVyOyhmdW5jdGlvbigpe3ZhciBjLGI9RXh0LkVsZW1lbnQu
cHJvdG90eXBlLGE9RXh0LkNvbXBvc2l0ZUVsZW1lbnRMaXRlLnByb3RvdHlwZTtmb3IoYyBpbiBi
KXtpZihFeHQuaXNGdW5jdGlvbihiW2NdKSl7KGZ1bmN0aW9uKGQpe2FbZF09YVtkXXx8ZnVuY3Rp
b24oKXtyZXR1cm4gdGhpcy5pbnZva2UoZCxhcmd1bWVudHMpfX0pLmNhbGwoYSxjKX19fSkoKTtp
ZihFeHQuRG9tUXVlcnkpe0V4dC5FbGVtZW50LnNlbGVjdG9yRnVuY3Rpb249RXh0LkRvbVF1ZXJ5
LnNlbGVjdH1FeHQuRWxlbWVudC5zZWxlY3Q9ZnVuY3Rpb24oYSxiKXt2YXIgYztpZih0eXBlb2Yg
YT09InN0cmluZyIpe2M9RXh0LkVsZW1lbnQuc2VsZWN0b3JGdW5jdGlvbihhLGIpfWVsc2V7aWYo
YS5sZW5ndGghPT11bmRlZmluZWQpe2M9YX1lbHNle3Rocm93IkludmFsaWQgc2VsZWN0b3IifX1y
ZXR1cm4gbmV3IEV4dC5Db21wb3NpdGVFbGVtZW50TGl0ZShjKX07RXh0LnNlbGVjdD1FeHQuRWxl
bWVudC5zZWxlY3Q7KGZ1bmN0aW9uKCl7dmFyIGI9ImJlZm9yZXJlcXVlc3QiLGU9InJlcXVlc3Rj
b21wbGV0ZSIsZD0icmVxdWVzdGV4Y2VwdGlvbiIsaD11bmRlZmluZWQsYz0ibG9hZCIsaT0iUE9T
VCIsYT0iR0VUIixnPXdpbmRvdztFeHQuZGF0YS5Db25uZWN0aW9uPWZ1bmN0aW9uKGope0V4dC5h
cHBseSh0aGlzLGopO3RoaXMuYWRkRXZlbnRzKGIsZSxkKTtFeHQuZGF0YS5Db25uZWN0aW9uLnN1
cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzKX07RXh0LmV4dGVuZChFeHQuZGF0YS5Db25u
ZWN0aW9uLEV4dC51dGlsLk9ic2VydmFibGUse3RpbWVvdXQ6MzAwMDAsYXV0b0Fib3J0OmZhbHNl
LGRpc2FibGVDYWNoaW5nOnRydWUsZGlzYWJsZUNhY2hpbmdQYXJhbToiX2RjIixyZXF1ZXN0OmZ1
bmN0aW9uKG4pe3ZhciBzPXRoaXM7aWYocy5maXJlRXZlbnQoYixzLG4pKXtpZihuLmVsKXtpZigh
RXh0LmlzRW1wdHkobi5pbmRpY2F0b3JUZXh0KSl7cy5pbmRpY2F0b3JUZXh0PSc8ZGl2IGNsYXNz
PSJsb2FkaW5nLWluZGljYXRvciI+JytuLmluZGljYXRvclRleHQrIjwvZGl2PiJ9aWYocy5pbmRp
Y2F0b3JUZXh0KXtFeHQuZ2V0RG9tKG4uZWwpLmlubmVySFRNTD1zLmluZGljYXRvclRleHR9bi5z
dWNjZXNzPShFeHQuaXNGdW5jdGlvbihuLnN1Y2Nlc3MpP24uc3VjY2VzczpmdW5jdGlvbigpe30p
LmNyZWF0ZUludGVyY2VwdG9yKGZ1bmN0aW9uKG8pe0V4dC5nZXREb20obi5lbCkuaW5uZXJIVE1M
PW8ucmVzcG9uc2VUZXh0fSl9dmFyIGw9bi5wYXJhbXMsaz1uLnVybHx8cy51cmwsaixxPXtzdWNj
ZXNzOnMuaGFuZGxlUmVzcG9uc2UsZmFpbHVyZTpzLmhhbmRsZUZhaWx1cmUsc2NvcGU6cyxhcmd1
bWVudDp7b3B0aW9uczpufSx0aW1lb3V0Om4udGltZW91dHx8cy50aW1lb3V0fSxtLHQ7aWYoRXh0
LmlzRnVuY3Rpb24obCkpe2w9bC5jYWxsKG4uc2NvcGV8fGcsbil9bD1FeHQudXJsRW5jb2RlKHMu
ZXh0cmFQYXJhbXMsRXh0LmlzT2JqZWN0KGwpP0V4dC51cmxFbmNvZGUobCk6bCk7aWYoRXh0Lmlz
RnVuY3Rpb24oaykpe2s9ay5jYWxsKG4uc2NvcGV8fGcsbil9aWYoKG09RXh0LmdldERvbShuLmZv
cm0pKSl7az1rfHxtLmFjdGlvbjtpZihuLmlzVXBsb2FkfHwvbXVsdGlwYXJ0XC9mb3JtLWRhdGEv
aS50ZXN0KG0uZ2V0QXR0cmlidXRlKCJlbmN0eXBlIikpKXtyZXR1cm4gcy5kb0Zvcm1VcGxvYWQu
Y2FsbChzLG4sbCxrKX10PUV4dC5saWIuQWpheC5zZXJpYWxpemVGb3JtKG0pO2w9bD8obCsiJiIr
dCk6dH1qPW4ubWV0aG9kfHxzLm1ldGhvZHx8KChsfHxuLnhtbERhdGF8fG4uanNvbkRhdGEpP2k6
YSk7aWYoaj09PWEmJihzLmRpc2FibGVDYWNoaW5nJiZuLmRpc2FibGVDYWNoaW5nIT09ZmFsc2Up
fHxuLmRpc2FibGVDYWNoaW5nPT09dHJ1ZSl7dmFyIHI9bi5kaXNhYmxlQ2FjaGluZ1BhcmFtfHxz
LmRpc2FibGVDYWNoaW5nUGFyYW07az1FeHQudXJsQXBwZW5kKGsscisiPSIrKG5ldyBEYXRlKCku
Z2V0VGltZSgpKSl9bi5oZWFkZXJzPUV4dC5hcHBseShuLmhlYWRlcnN8fHt9LHMuZGVmYXVsdEhl
YWRlcnN8fHt9KTtpZihuLmF1dG9BYm9ydD09PXRydWV8fHMuYXV0b0Fib3J0KXtzLmFib3J0KCl9
aWYoKGo9PWF8fG4ueG1sRGF0YXx8bi5qc29uRGF0YSkmJmwpe2s9RXh0LnVybEFwcGVuZChrLGwp
O2w9IiJ9cmV0dXJuKHMudHJhbnNJZD1FeHQubGliLkFqYXgucmVxdWVzdChqLGsscSxsLG4pKX1l
bHNle3JldHVybiBuLmNhbGxiYWNrP24uY2FsbGJhY2suYXBwbHkobi5zY29wZSxbbixoLGhdKTpu
dWxsfX0saXNMb2FkaW5nOmZ1bmN0aW9uKGope3JldHVybiBqP0V4dC5saWIuQWpheC5pc0NhbGxJ
blByb2dyZXNzKGopOiEhdGhpcy50cmFuc0lkfSxhYm9ydDpmdW5jdGlvbihqKXtpZihqfHx0aGlz
LmlzTG9hZGluZygpKXtFeHQubGliLkFqYXguYWJvcnQoanx8dGhpcy50cmFuc0lkKX19LGhhbmRs
ZVJlc3BvbnNlOmZ1bmN0aW9uKGope3RoaXMudHJhbnNJZD1mYWxzZTt2YXIgaz1qLmFyZ3VtZW50
Lm9wdGlvbnM7ai5hcmd1bWVudD1rP2suYXJndW1lbnQ6bnVsbDt0aGlzLmZpcmVFdmVudChlLHRo
aXMsaixrKTtpZihrLnN1Y2Nlc3Mpe2suc3VjY2Vzcy5jYWxsKGsuc2NvcGUsaixrKX1pZihrLmNh
bGxiYWNrKXtrLmNhbGxiYWNrLmNhbGwoay5zY29wZSxrLHRydWUsail9fSxoYW5kbGVGYWlsdXJl
OmZ1bmN0aW9uKGosbCl7dGhpcy50cmFuc0lkPWZhbHNlO3ZhciBrPWouYXJndW1lbnQub3B0aW9u
cztqLmFyZ3VtZW50PWs/ay5hcmd1bWVudDpudWxsO3RoaXMuZmlyZUV2ZW50KGQsdGhpcyxqLGss
bCk7aWYoay5mYWlsdXJlKXtrLmZhaWx1cmUuY2FsbChrLnNjb3BlLGosayl9aWYoay5jYWxsYmFj
ayl7ay5jYWxsYmFjay5jYWxsKGsuc2NvcGUsayxmYWxzZSxqKX19LGRvRm9ybVVwbG9hZDpmdW5j
dGlvbihxLGosayl7dmFyIGw9RXh0LmlkKCksdj1kb2N1bWVudCxyPXYuY3JlYXRlRWxlbWVudCgi
aWZyYW1lIiksbT1FeHQuZ2V0RG9tKHEuZm9ybSksdT1bXSx0LHA9Im11bHRpcGFydC9mb3JtLWRh
dGEiLG49e3RhcmdldDptLnRhcmdldCxtZXRob2Q6bS5tZXRob2QsZW5jb2Rpbmc6bS5lbmNvZGlu
ZyxlbmN0eXBlOm0uZW5jdHlwZSxhY3Rpb246bS5hY3Rpb259O0V4dC5mbHkocikuc2V0KHtpZDps
LG5hbWU6bCxjbHM6IngtaGlkZGVuIn0pO3YuYm9keS5hcHBlbmRDaGlsZChyKTtFeHQuZmx5KHIp
LnNldCh7c3JjOkV4dC5TU0xfU0VDVVJFX1VSTH0pO2lmKEV4dC5pc0lFKXtkb2N1bWVudC5mcmFt
ZXNbbF0ubmFtZT1sfUV4dC5mbHkobSkuc2V0KHt0YXJnZXQ6bCxtZXRob2Q6aSxlbmN0eXBlOnAs
ZW5jb2Rpbmc6cCxhY3Rpb246a3x8bi5hY3Rpb259KTtFeHQuaXRlcmF0ZShFeHQudXJsRGVjb2Rl
KGosZmFsc2UpLGZ1bmN0aW9uKHcsbyl7dD12LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7RXh0LmZs
eSh0KS5zZXQoe3R5cGU6ImhpZGRlbiIsdmFsdWU6byxuYW1lOnd9KTttLmFwcGVuZENoaWxkKHQp
O3UucHVzaCh0KX0pO2Z1bmN0aW9uIHMoKXt2YXIgeD10aGlzLHc9e3Jlc3BvbnNlVGV4dDoiIixy
ZXNwb25zZVhNTDpudWxsLGFyZ3VtZW50OnEuYXJndW1lbnR9LEEsejt0cnl7QT1yLmNvbnRlbnRX
aW5kb3cuZG9jdW1lbnR8fHIuY29udGVudERvY3VtZW50fHxnLmZyYW1lc1tsXS5kb2N1bWVudDtp
ZihBKXtpZihBLmJvZHkpe2lmKC90ZXh0YXJlYS9pLnRlc3QoKHo9QS5ib2R5LmZpcnN0Q2hpbGR8
fHt9KS50YWdOYW1lKSl7dy5yZXNwb25zZVRleHQ9ei52YWx1ZX1lbHNle3cucmVzcG9uc2VUZXh0
PUEuYm9keS5pbm5lckhUTUx9fXcucmVzcG9uc2VYTUw9QS5YTUxEb2N1bWVudHx8QX19Y2F0Y2go
eSl7fUV4dC5FdmVudE1hbmFnZXIucmVtb3ZlTGlzdGVuZXIocixjLHMseCk7eC5maXJlRXZlbnQo
ZSx4LHcscSk7ZnVuY3Rpb24gbyhELEMsQil7aWYoRXh0LmlzRnVuY3Rpb24oRCkpe0QuYXBwbHko
QyxCKX19byhxLnN1Y2Nlc3MscS5zY29wZSxbdyxxXSk7byhxLmNhbGxiYWNrLHEuc2NvcGUsW3Es
dHJ1ZSx3XSk7aWYoIXguZGVidWdVcGxvYWRzKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7RXh0LnJl
bW92ZU5vZGUocil9LDEwMCl9fUV4dC5FdmVudE1hbmFnZXIub24ocixjLHMsdGhpcyk7bS5zdWJt
aXQoKTtFeHQuZmx5KG0pLnNldChuKTtFeHQuZWFjaCh1LGZ1bmN0aW9uKG8pe0V4dC5yZW1vdmVO
b2RlKG8pfSl9fSl9KSgpO0V4dC5BamF4PW5ldyBFeHQuZGF0YS5Db25uZWN0aW9uKHthdXRvQWJv
cnQ6ZmFsc2Usc2VyaWFsaXplRm9ybTpmdW5jdGlvbihhKXtyZXR1cm4gRXh0LmxpYi5BamF4LnNl
cmlhbGl6ZUZvcm0oYSl9fSk7RXh0LnV0aWwuSlNPTj1uZXcgKGZ1bmN0aW9uKCl7dmFyIHVzZUhh
c093bj0hIXt9Lmhhc093blByb3BlcnR5LGlzTmF0aXZlPWZ1bmN0aW9uKCl7dmFyIHVzZU5hdGl2
ZT1udWxsO3JldHVybiBmdW5jdGlvbigpe2lmKHVzZU5hdGl2ZT09PW51bGwpe3VzZU5hdGl2ZT1F
eHQuVVNFX05BVElWRV9KU09OJiZ3aW5kb3cuSlNPTiYmSlNPTi50b1N0cmluZygpPT0iW29iamVj
dCBKU09OXSJ9cmV0dXJuIHVzZU5hdGl2ZX19KCkscGFkPWZ1bmN0aW9uKG4pe3JldHVybiBuPDEw
PyIwIituOm59LGRvRGVjb2RlPWZ1bmN0aW9uKGpzb24pe3JldHVybiBldmFsKCIoIitqc29uKyIp
Iil9LGRvRW5jb2RlPWZ1bmN0aW9uKG8pe2lmKCFFeHQuaXNEZWZpbmVkKG8pfHxvPT09bnVsbCl7
cmV0dXJuIm51bGwifWVsc2V7aWYoRXh0LmlzQXJyYXkobykpe3JldHVybiBlbmNvZGVBcnJheShv
KX1lbHNle2lmKEV4dC5pc0RhdGUobykpe3JldHVybiBFeHQudXRpbC5KU09OLmVuY29kZURhdGUo
byl9ZWxzZXtpZihFeHQuaXNTdHJpbmcobykpe3JldHVybiBlbmNvZGVTdHJpbmcobyl9ZWxzZXtp
Zih0eXBlb2Ygbz09Im51bWJlciIpe3JldHVybiBpc0Zpbml0ZShvKT9TdHJpbmcobyk6Im51bGwi
fWVsc2V7aWYoRXh0LmlzQm9vbGVhbihvKSl7cmV0dXJuIFN0cmluZyhvKX1lbHNle3ZhciBhPVsi
eyJdLGIsaSx2O2ZvcihpIGluIG8pe2lmKCFvLmdldEVsZW1lbnRzQnlUYWdOYW1lKXtpZighdXNl
SGFzT3dufHxvLmhhc093blByb3BlcnR5KGkpKXt2PW9baV07c3dpdGNoKHR5cGVvZiB2KXtjYXNl
InVuZGVmaW5lZCI6Y2FzZSJmdW5jdGlvbiI6Y2FzZSJ1bmtub3duIjpicmVhaztkZWZhdWx0Omlm
KGIpe2EucHVzaCgiLCIpfWEucHVzaChkb0VuY29kZShpKSwiOiIsdj09PW51bGw/Im51bGwiOmRv
RW5jb2RlKHYpKTtiPXRydWV9fX19YS5wdXNoKCJ9Iik7cmV0dXJuIGEuam9pbigiIil9fX19fX19
LG09eyJcYiI6IlxcYiIsIlx0IjoiXFx0IiwiXG4iOiJcXG4iLCJcZiI6IlxcZiIsIlxyIjoiXFxy
IiwnIic6J1xcIicsIlxcIjoiXFxcXCJ9LGVuY29kZVN0cmluZz1mdW5jdGlvbihzKXtpZigvWyJc
XFx4MDAtXHgxZl0vLnRlc3Qocykpe3JldHVybiciJytzLnJlcGxhY2UoLyhbXHgwMC1ceDFmXFwi
XSkvZyxmdW5jdGlvbihhLGIpe3ZhciBjPW1bYl07aWYoYyl7cmV0dXJuIGN9Yz1iLmNoYXJDb2Rl
QXQoKTtyZXR1cm4iXFx1MDAiK01hdGguZmxvb3IoYy8xNikudG9TdHJpbmcoMTYpKyhjJTE2KS50
b1N0cmluZygxNil9KSsnIid9cmV0dXJuJyInK3MrJyInfSxlbmNvZGVBcnJheT1mdW5jdGlvbihv
KXt2YXIgYT1bIlsiXSxiLGksbD1vLmxlbmd0aCx2O2ZvcihpPTA7aTxsO2krPTEpe3Y9b1tpXTtz
d2l0Y2godHlwZW9mIHYpe2Nhc2UidW5kZWZpbmVkIjpjYXNlImZ1bmN0aW9uIjpjYXNlInVua25v
d24iOmJyZWFrO2RlZmF1bHQ6aWYoYil7YS5wdXNoKCIsIil9YS5wdXNoKHY9PT1udWxsPyJudWxs
IjpFeHQudXRpbC5KU09OLmVuY29kZSh2KSk7Yj10cnVlfX1hLnB1c2goIl0iKTtyZXR1cm4gYS5q
b2luKCIiKX07dGhpcy5lbmNvZGVEYXRlPWZ1bmN0aW9uKG8pe3JldHVybiciJytvLmdldEZ1bGxZ
ZWFyKCkrIi0iK3BhZChvLmdldE1vbnRoKCkrMSkrIi0iK3BhZChvLmdldERhdGUoKSkrIlQiK3Bh
ZChvLmdldEhvdXJzKCkpKyI6IitwYWQoby5nZXRNaW51dGVzKCkpKyI6IitwYWQoby5nZXRTZWNv
bmRzKCkpKyciJ307dGhpcy5lbmNvZGU9ZnVuY3Rpb24oKXt2YXIgZWM7cmV0dXJuIGZ1bmN0aW9u
KG8pe2lmKCFlYyl7ZWM9aXNOYXRpdmUoKT9KU09OLnN0cmluZ2lmeTpkb0VuY29kZX1yZXR1cm4g
ZWMobyl9fSgpO3RoaXMuZGVjb2RlPWZ1bmN0aW9uKCl7dmFyIGRjO3JldHVybiBmdW5jdGlvbihq
c29uKXtpZighZGMpe2RjPWlzTmF0aXZlKCk/SlNPTi5wYXJzZTpkb0RlY29kZX1yZXR1cm4gZGMo
anNvbil9fSgpfSkoKTtFeHQuZW5jb2RlPUV4dC51dGlsLkpTT04uZW5jb2RlO0V4dC5kZWNvZGU9
RXh0LnV0aWwuSlNPTi5kZWNvZGU7CitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK2RpZmYg
LS1naXQgYS93ZWIvYWpheC9saWJzL2pxdWVyeS8xLjEwLjIvanF1ZXJ5Lm1pbi5qcyBiL3dlYi9h
amF4L2xpYnMvanF1ZXJ5LzEuMTAuMi9qcXVlcnkubWluLmpzCituZXcgZmlsZSBtb2RlIDEwMDY0
NAoraW5kZXggMDAwMDAwMC4uMjliM2EyYworLS0tIC9kZXYvbnVsbAorKysrIGIvd2ViL2FqYXgv
bGlicy9qcXVlcnkvMS4xMC4yL2pxdWVyeS5taW4uanMKK0BAIC0wLDAgKzEsNiBAQAorKy8qISBq
UXVlcnkgdjEuMTAuMiB8IChjKSAyMDA1LCAyMDEzIGpRdWVyeSBGb3VuZGF0aW9uLCBJbmMuIHwg
anF1ZXJ5Lm9yZy9saWNlbnNlCisrLy9AIHNvdXJjZU1hcHBpbmdVUkw9anF1ZXJ5Lm1pbi5tYXAK
KysqLworKyhmdW5jdGlvbihlLHQpe3ZhciBuLHIsaT10eXBlb2YgdCxvPWUubG9jYXRpb24sYT1l
LmRvY3VtZW50LHM9YS5kb2N1bWVudEVsZW1lbnQsbD1lLmpRdWVyeSx1PWUuJCxjPXt9LHA9W10s
Zj0iMS4xMC4yIixkPXAuY29uY2F0LGg9cC5wdXNoLGc9cC5zbGljZSxtPXAuaW5kZXhPZix5PWMu
dG9TdHJpbmcsdj1jLmhhc093blByb3BlcnR5LGI9Zi50cmltLHg9ZnVuY3Rpb24oZSx0KXtyZXR1
cm4gbmV3IHguZm4uaW5pdChlLHQscil9LHc9L1srLV0/KD86XGQqXC58KVxkKyg/OltlRV1bKy1d
P1xkK3wpLy5zb3VyY2UsVD0vXFMrL2csQz0vXltcc1x1RkVGRlx4QTBdK3xbXHNcdUZFRkZceEEw
XSskL2csTj0vXig/OlxzKig8W1x3XFddKz4pW14+XSp8IyhbXHctXSopKSQvLGs9L148KFx3Kylc
cypcLz8+KD86PFwvXDE+fCkkLyxFPS9eW1xdLDp7fVxzXSokLyxTPS8oPzpefDp8LCkoPzpccypc
WykrL2csQT0vXFwoPzpbIlxcXC9iZm5ydF18dVtcZGEtZkEtRl17NH0pL2csaj0vIlteIlxcXHJc
bl0qInx0cnVlfGZhbHNlfG51bGx8LT8oPzpcZCtcLnwpXGQrKD86W2VFXVsrLV0/XGQrfCkvZyxE
PS9eLW1zLS8sTD0vLShbXGRhLXpdKS9naSxIPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQudG9VcHBl
ckNhc2UoKX0scT1mdW5jdGlvbihlKXsoYS5hZGRFdmVudExpc3RlbmVyfHwibG9hZCI9PT1lLnR5
cGV8fCJjb21wbGV0ZSI9PT1hLnJlYWR5U3RhdGUpJiYoXygpLHgucmVhZHkoKSl9LF89ZnVuY3Rp
b24oKXthLmFkZEV2ZW50TGlzdGVuZXI/KGEucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVu
dExvYWRlZCIscSwhMSksZS5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixxLCExKSk6KGEuZGV0
YWNoRXZlbnQoIm9ucmVhZHlzdGF0ZWNoYW5nZSIscSksZS5kZXRhY2hFdmVudCgib25sb2FkIixx
KSl9O3guZm49eC5wcm90b3R5cGU9e2pxdWVyeTpmLGNvbnN0cnVjdG9yOngsaW5pdDpmdW5jdGlv
bihlLG4scil7dmFyIGksbztpZighZSlyZXR1cm4gdGhpcztpZigic3RyaW5nIj09dHlwZW9mIGUp
e2lmKGk9IjwiPT09ZS5jaGFyQXQoMCkmJiI+Ij09PWUuY2hhckF0KGUubGVuZ3RoLTEpJiZlLmxl
bmd0aD49Mz9bbnVsbCxlLG51bGxdOk4uZXhlYyhlKSwhaXx8IWlbMV0mJm4pcmV0dXJuIW58fG4u
anF1ZXJ5PyhufHxyKS5maW5kKGUpOnRoaXMuY29uc3RydWN0b3IobikuZmluZChlKTtpZihpWzFd
KXtpZihuPW4gaW5zdGFuY2VvZiB4P25bMF06bix4Lm1lcmdlKHRoaXMseC5wYXJzZUhUTUwoaVsx
XSxuJiZuLm5vZGVUeXBlP24ub3duZXJEb2N1bWVudHx8bjphLCEwKSksay50ZXN0KGlbMV0pJiZ4
LmlzUGxhaW5PYmplY3QobikpZm9yKGkgaW4gbil4LmlzRnVuY3Rpb24odGhpc1tpXSk/dGhpc1tp
XShuW2ldKTp0aGlzLmF0dHIoaSxuW2ldKTtyZXR1cm4gdGhpc31pZihvPWEuZ2V0RWxlbWVudEJ5
SWQoaVsyXSksbyYmby5wYXJlbnROb2RlKXtpZihvLmlkIT09aVsyXSlyZXR1cm4gci5maW5kKGUp
O3RoaXMubGVuZ3RoPTEsdGhpc1swXT1vfXJldHVybiB0aGlzLmNvbnRleHQ9YSx0aGlzLnNlbGVj
dG9yPWUsdGhpc31yZXR1cm4gZS5ub2RlVHlwZT8odGhpcy5jb250ZXh0PXRoaXNbMF09ZSx0aGlz
Lmxlbmd0aD0xLHRoaXMpOnguaXNGdW5jdGlvbihlKT9yLnJlYWR5KGUpOihlLnNlbGVjdG9yIT09
dCYmKHRoaXMuc2VsZWN0b3I9ZS5zZWxlY3Rvcix0aGlzLmNvbnRleHQ9ZS5jb250ZXh0KSx4Lm1h
a2VBcnJheShlLHRoaXMpKX0sc2VsZWN0b3I6IiIsbGVuZ3RoOjAsdG9BcnJheTpmdW5jdGlvbigp
e3JldHVybiBnLmNhbGwodGhpcyl9LGdldDpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT90aGlz
LnRvQXJyYXkoKTowPmU/dGhpc1t0aGlzLmxlbmd0aCtlXTp0aGlzW2VdfSxwdXNoU3RhY2s6ZnVu
Y3Rpb24oZSl7dmFyIHQ9eC5tZXJnZSh0aGlzLmNvbnN0cnVjdG9yKCksZSk7cmV0dXJuIHQucHJl
dk9iamVjdD10aGlzLHQuY29udGV4dD10aGlzLmNvbnRleHQsdH0sZWFjaDpmdW5jdGlvbihlLHQp
e3JldHVybiB4LmVhY2godGhpcyxlLHQpfSxyZWFkeTpmdW5jdGlvbihlKXtyZXR1cm4geC5yZWFk
eS5wcm9taXNlKCkuZG9uZShlKSx0aGlzfSxzbGljZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnB1
c2hTdGFjayhnLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9LGZpcnN0OmZ1bmN0aW9uKCl7cmV0dXJu
IHRoaXMuZXEoMCl9LGxhc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lcSgtMSl9LGVxOmZ1bmN0
aW9uKGUpe3ZhciB0PXRoaXMubGVuZ3RoLG49K2UrKDA+ZT90OjApO3JldHVybiB0aGlzLnB1c2hT
dGFjayhuPj0wJiZ0Pm4/W3RoaXNbbl1dOltdKX0sbWFwOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlz
LnB1c2hTdGFjayh4Lm1hcCh0aGlzLGZ1bmN0aW9uKHQsbil7cmV0dXJuIGUuY2FsbCh0LG4sdCl9
KSl9LGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByZXZPYmplY3R8fHRoaXMuY29uc3RydWN0
b3IobnVsbCl9LHB1c2g6aCxzb3J0OltdLnNvcnQsc3BsaWNlOltdLnNwbGljZX0seC5mbi5pbml0
LnByb3RvdHlwZT14LmZuLHguZXh0ZW5kPXguZm4uZXh0ZW5kPWZ1bmN0aW9uKCl7dmFyIGUsbixy
LGksbyxhLHM9YXJndW1lbnRzWzBdfHx7fSxsPTEsdT1hcmd1bWVudHMubGVuZ3RoLGM9ITE7Zm9y
KCJib29sZWFuIj09dHlwZW9mIHMmJihjPXMscz1hcmd1bWVudHNbMV18fHt9LGw9MiksIm9iamVj
dCI9PXR5cGVvZiBzfHx4LmlzRnVuY3Rpb24ocyl8fChzPXt9KSx1PT09bCYmKHM9dGhpcywtLWwp
O3U+bDtsKyspaWYobnVsbCE9KG89YXJndW1lbnRzW2xdKSlmb3IoaSBpbiBvKWU9c1tpXSxyPW9b
aV0scyE9PXImJihjJiZyJiYoeC5pc1BsYWluT2JqZWN0KHIpfHwobj14LmlzQXJyYXkocikpKT8o
bj8obj0hMSxhPWUmJnguaXNBcnJheShlKT9lOltdKTphPWUmJnguaXNQbGFpbk9iamVjdChlKT9l
Ont9LHNbaV09eC5leHRlbmQoYyxhLHIpKTpyIT09dCYmKHNbaV09cikpO3JldHVybiBzfSx4LmV4
dGVuZCh7ZXhwYW5kbzoialF1ZXJ5IisoZitNYXRoLnJhbmRvbSgpKS5yZXBsYWNlKC9cRC9nLCIi
KSxub0NvbmZsaWN0OmZ1bmN0aW9uKHQpe3JldHVybiBlLiQ9PT14JiYoZS4kPXUpLHQmJmUualF1
ZXJ5PT09eCYmKGUualF1ZXJ5PWwpLHh9LGlzUmVhZHk6ITEscmVhZHlXYWl0OjEsaG9sZFJlYWR5
OmZ1bmN0aW9uKGUpe2U/eC5yZWFkeVdhaXQrKzp4LnJlYWR5KCEwKX0scmVhZHk6ZnVuY3Rpb24o
ZSl7aWYoZT09PSEwPyEtLXgucmVhZHlXYWl0OiF4LmlzUmVhZHkpe2lmKCFhLmJvZHkpcmV0dXJu
IHNldFRpbWVvdXQoeC5yZWFkeSk7eC5pc1JlYWR5PSEwLGUhPT0hMCYmLS14LnJlYWR5V2FpdD4w
fHwobi5yZXNvbHZlV2l0aChhLFt4XSkseC5mbi50cmlnZ2VyJiZ4KGEpLnRyaWdnZXIoInJlYWR5
Iikub2ZmKCJyZWFkeSIpKX19LGlzRnVuY3Rpb246ZnVuY3Rpb24oZSl7cmV0dXJuImZ1bmN0aW9u
Ij09PXgudHlwZShlKX0saXNBcnJheTpBcnJheS5pc0FycmF5fHxmdW5jdGlvbihlKXtyZXR1cm4i
YXJyYXkiPT09eC50eXBlKGUpfSxpc1dpbmRvdzpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9ZSYm
ZT09ZS53aW5kb3d9LGlzTnVtZXJpYzpmdW5jdGlvbihlKXtyZXR1cm4haXNOYU4ocGFyc2VGbG9h
dChlKSkmJmlzRmluaXRlKGUpfSx0eXBlOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP2UrIiI6
Im9iamVjdCI9PXR5cGVvZiBlfHwiZnVuY3Rpb24iPT10eXBlb2YgZT9jW3kuY2FsbChlKV18fCJv
YmplY3QiOnR5cGVvZiBlfSxpc1BsYWluT2JqZWN0OmZ1bmN0aW9uKGUpe3ZhciBuO2lmKCFlfHwi
b2JqZWN0IiE9PXgudHlwZShlKXx8ZS5ub2RlVHlwZXx8eC5pc1dpbmRvdyhlKSlyZXR1cm4hMTt0
cnl7aWYoZS5jb25zdHJ1Y3RvciYmIXYuY2FsbChlLCJjb25zdHJ1Y3RvciIpJiYhdi5jYWxsKGUu
Y29uc3RydWN0b3IucHJvdG90eXBlLCJpc1Byb3RvdHlwZU9mIikpcmV0dXJuITF9Y2F0Y2gocil7
cmV0dXJuITF9aWYoeC5zdXBwb3J0Lm93bkxhc3QpZm9yKG4gaW4gZSlyZXR1cm4gdi5jYWxsKGUs
bik7Zm9yKG4gaW4gZSk7cmV0dXJuIG49PT10fHx2LmNhbGwoZSxuKX0saXNFbXB0eU9iamVjdDpm
dW5jdGlvbihlKXt2YXIgdDtmb3IodCBpbiBlKXJldHVybiExO3JldHVybiEwfSxlcnJvcjpmdW5j
dGlvbihlKXt0aHJvdyBFcnJvcihlKX0scGFyc2VIVE1MOmZ1bmN0aW9uKGUsdCxuKXtpZighZXx8
InN0cmluZyIhPXR5cGVvZiBlKXJldHVybiBudWxsOyJib29sZWFuIj09dHlwZW9mIHQmJihuPXQs
dD0hMSksdD10fHxhO3ZhciByPWsuZXhlYyhlKSxpPSFuJiZbXTtyZXR1cm4gcj9bdC5jcmVhdGVF
bGVtZW50KHJbMV0pXToocj14LmJ1aWxkRnJhZ21lbnQoW2VdLHQsaSksaSYmeChpKS5yZW1vdmUo
KSx4Lm1lcmdlKFtdLHIuY2hpbGROb2RlcykpfSxwYXJzZUpTT046ZnVuY3Rpb24obil7cmV0dXJu
IGUuSlNPTiYmZS5KU09OLnBhcnNlP2UuSlNPTi5wYXJzZShuKTpudWxsPT09bj9uOiJzdHJpbmci
PT10eXBlb2YgbiYmKG49eC50cmltKG4pLG4mJkUudGVzdChuLnJlcGxhY2UoQSwiQCIpLnJlcGxh
Y2UoaiwiXSIpLnJlcGxhY2UoUywiIikpKT9GdW5jdGlvbigicmV0dXJuICIrbikoKTooeC5lcnJv
cigiSW52YWxpZCBKU09OOiAiK24pLHQpfSxwYXJzZVhNTDpmdW5jdGlvbihuKXt2YXIgcixpO2lm
KCFufHwic3RyaW5nIiE9dHlwZW9mIG4pcmV0dXJuIG51bGw7dHJ5e2UuRE9NUGFyc2VyPyhpPW5l
dyBET01QYXJzZXIscj1pLnBhcnNlRnJvbVN0cmluZyhuLCJ0ZXh0L3htbCIpKToocj1uZXcgQWN0
aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTERPTSIpLHIuYXN5bmM9ImZhbHNlIixyLmxvYWRYTUwo
bikpfWNhdGNoKG8pe3I9dH1yZXR1cm4gciYmci5kb2N1bWVudEVsZW1lbnQmJiFyLmdldEVsZW1l
bnRzQnlUYWdOYW1lKCJwYXJzZXJlcnJvciIpLmxlbmd0aHx8eC5lcnJvcigiSW52YWxpZCBYTUw6
ICIrbikscn0sbm9vcDpmdW5jdGlvbigpe30sZ2xvYmFsRXZhbDpmdW5jdGlvbih0KXt0JiZ4LnRy
aW0odCkmJihlLmV4ZWNTY3JpcHR8fGZ1bmN0aW9uKHQpe2UuZXZhbC5jYWxsKGUsdCl9KSh0KX0s
Y2FtZWxDYXNlOmZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoRCwibXMtIikucmVwbGFjZShM
LEgpfSxub2RlTmFtZTpmdW5jdGlvbihlLHQpe3JldHVybiBlLm5vZGVOYW1lJiZlLm5vZGVOYW1l
LnRvTG93ZXJDYXNlKCk9PT10LnRvTG93ZXJDYXNlKCl9LGVhY2g6ZnVuY3Rpb24oZSx0LG4pe3Zh
ciByLGk9MCxvPWUubGVuZ3RoLGE9TShlKTtpZihuKXtpZihhKXtmb3IoO28+aTtpKyspaWYocj10
LmFwcGx5KGVbaV0sbikscj09PSExKWJyZWFrfWVsc2UgZm9yKGkgaW4gZSlpZihyPXQuYXBwbHko
ZVtpXSxuKSxyPT09ITEpYnJlYWt9ZWxzZSBpZihhKXtmb3IoO28+aTtpKyspaWYocj10LmNhbGwo
ZVtpXSxpLGVbaV0pLHI9PT0hMSlicmVha31lbHNlIGZvcihpIGluIGUpaWYocj10LmNhbGwoZVtp
XSxpLGVbaV0pLHI9PT0hMSlicmVhaztyZXR1cm4gZX0sdHJpbTpiJiYhYi5jYWxsKCJcdWZlZmZc
dTAwYTAiKT9mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT8iIjpiLmNhbGwoZSl9OmZ1bmN0aW9u
KGUpe3JldHVybiBudWxsPT1lPyIiOihlKyIiKS5yZXBsYWNlKEMsIiIpfSxtYWtlQXJyYXk6ZnVu
Y3Rpb24oZSx0KXt2YXIgbj10fHxbXTtyZXR1cm4gbnVsbCE9ZSYmKE0oT2JqZWN0KGUpKT94Lm1l
cmdlKG4sInN0cmluZyI9PXR5cGVvZiBlP1tlXTplKTpoLmNhbGwobixlKSksbn0saW5BcnJheTpm
dW5jdGlvbihlLHQsbil7dmFyIHI7aWYodCl7aWYobSlyZXR1cm4gbS5jYWxsKHQsZSxuKTtmb3Io
cj10Lmxlbmd0aCxuPW4/MD5uP01hdGgubWF4KDAscituKTpuOjA7cj5uO24rKylpZihuIGluIHQm
JnRbbl09PT1lKXJldHVybiBufXJldHVybi0xfSxtZXJnZTpmdW5jdGlvbihlLG4pe3ZhciByPW4u
bGVuZ3RoLGk9ZS5sZW5ndGgsbz0wO2lmKCJudW1iZXIiPT10eXBlb2Ygcilmb3IoO3I+bztvKysp
ZVtpKytdPW5bb107ZWxzZSB3aGlsZShuW29dIT09dCllW2krK109bltvKytdO3JldHVybiBlLmxl
bmd0aD1pLGV9LGdyZXA6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk9W10sbz0wLGE9ZS5sZW5ndGg7
Zm9yKG49ISFuO2E+bztvKyspcj0hIXQoZVtvXSxvKSxuIT09ciYmaS5wdXNoKGVbb10pO3JldHVy
biBpfSxtYXA6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk9MCxvPWUubGVuZ3RoLGE9TShlKSxzPVtd
O2lmKGEpZm9yKDtvPmk7aSsrKXI9dChlW2ldLGksbiksbnVsbCE9ciYmKHNbcy5sZW5ndGhdPXIp
O2Vsc2UgZm9yKGkgaW4gZSlyPXQoZVtpXSxpLG4pLG51bGwhPXImJihzW3MubGVuZ3RoXT1yKTty
ZXR1cm4gZC5hcHBseShbXSxzKX0sZ3VpZDoxLHByb3h5OmZ1bmN0aW9uKGUsbil7dmFyIHIsaSxv
O3JldHVybiJzdHJpbmciPT10eXBlb2YgbiYmKG89ZVtuXSxuPWUsZT1vKSx4LmlzRnVuY3Rpb24o
ZSk/KHI9Zy5jYWxsKGFyZ3VtZW50cywyKSxpPWZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkobnx8
dGhpcyxyLmNvbmNhdChnLmNhbGwoYXJndW1lbnRzKSkpfSxpLmd1aWQ9ZS5ndWlkPWUuZ3VpZHx8
eC5ndWlkKyssaSk6dH0sYWNjZXNzOmZ1bmN0aW9uKGUsbixyLGksbyxhLHMpe3ZhciBsPTAsdT1l
Lmxlbmd0aCxjPW51bGw9PXI7aWYoIm9iamVjdCI9PT14LnR5cGUocikpe289ITA7Zm9yKGwgaW4g
cil4LmFjY2VzcyhlLG4sbCxyW2xdLCEwLGEscyl9ZWxzZSBpZihpIT09dCYmKG89ITAseC5pc0Z1
bmN0aW9uKGkpfHwocz0hMCksYyYmKHM/KG4uY2FsbChlLGkpLG49bnVsbCk6KGM9bixuPWZ1bmN0
aW9uKGUsdCxuKXtyZXR1cm4gYy5jYWxsKHgoZSksbil9KSksbikpZm9yKDt1Pmw7bCsrKW4oZVts
XSxyLHM/aTppLmNhbGwoZVtsXSxsLG4oZVtsXSxyKSkpO3JldHVybiBvP2U6Yz9uLmNhbGwoZSk6
dT9uKGVbMF0scik6YX0sbm93OmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRUaW1lKCl9
LHN3YXA6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksbyxhPXt9O2ZvcihvIGluIHQpYVtvXT1lLnN0
eWxlW29dLGUuc3R5bGVbb109dFtvXTtpPW4uYXBwbHkoZSxyfHxbXSk7Zm9yKG8gaW4gdCllLnN0
eWxlW29dPWFbb107cmV0dXJuIGl9fSkseC5yZWFkeS5wcm9taXNlPWZ1bmN0aW9uKHQpe2lmKCFu
KWlmKG49eC5EZWZlcnJlZCgpLCJjb21wbGV0ZSI9PT1hLnJlYWR5U3RhdGUpc2V0VGltZW91dCh4
LnJlYWR5KTtlbHNlIGlmKGEuYWRkRXZlbnRMaXN0ZW5lcilhLmFkZEV2ZW50TGlzdGVuZXIoIkRP
TUNvbnRlbnRMb2FkZWQiLHEsITEpLGUuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIscSwhMSk7ZWxz
ZXthLmF0dGFjaEV2ZW50KCJvbnJlYWR5c3RhdGVjaGFuZ2UiLHEpLGUuYXR0YWNoRXZlbnQoIm9u
bG9hZCIscSk7dmFyIHI9ITE7dHJ5e3I9bnVsbD09ZS5mcmFtZUVsZW1lbnQmJmEuZG9jdW1lbnRF
bGVtZW50fWNhdGNoKGkpe31yJiZyLmRvU2Nyb2xsJiZmdW5jdGlvbiBvKCl7aWYoIXguaXNSZWFk
eSl7dHJ5e3IuZG9TY3JvbGwoImxlZnQiKX1jYXRjaChlKXtyZXR1cm4gc2V0VGltZW91dChvLDUw
KX1fKCkseC5yZWFkeSgpfX0oKX1yZXR1cm4gbi5wcm9taXNlKHQpfSx4LmVhY2goIkJvb2xlYW4g
TnVtYmVyIFN0cmluZyBGdW5jdGlvbiBBcnJheSBEYXRlIFJlZ0V4cCBPYmplY3QgRXJyb3IiLnNw
bGl0KCIgIiksZnVuY3Rpb24oZSx0KXtjWyJbb2JqZWN0ICIrdCsiXSJdPXQudG9Mb3dlckNhc2Uo
KX0pO2Z1bmN0aW9uIE0oZSl7dmFyIHQ9ZS5sZW5ndGgsbj14LnR5cGUoZSk7cmV0dXJuIHguaXNX
aW5kb3coZSk/ITE6MT09PWUubm9kZVR5cGUmJnQ/ITA6ImFycmF5Ij09PW58fCJmdW5jdGlvbiIh
PT1uJiYoMD09PXR8fCJudW1iZXIiPT10eXBlb2YgdCYmdD4wJiZ0LTEgaW4gZSl9cj14KGEpLGZ1
bmN0aW9uKGUsdCl7dmFyIG4scixpLG8sYSxzLGwsdSxjLHAsZixkLGgsZyxtLHksdixiPSJzaXp6
bGUiKy1uZXcgRGF0ZSx3PWUuZG9jdW1lbnQsVD0wLEM9MCxOPXN0KCksaz1zdCgpLEU9c3QoKSxT
PSExLEE9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09PXQ/KFM9ITAsMCk6MH0saj10eXBlb2YgdCxE
PTE8PDMxLEw9e30uaGFzT3duUHJvcGVydHksSD1bXSxxPUgucG9wLF89SC5wdXNoLE09SC5wdXNo
LE89SC5zbGljZSxGPUguaW5kZXhPZnx8ZnVuY3Rpb24oZSl7dmFyIHQ9MCxuPXRoaXMubGVuZ3Ro
O2Zvcig7bj50O3QrKylpZih0aGlzW3RdPT09ZSlyZXR1cm4gdDtyZXR1cm4tMX0sQj0iY2hlY2tl
ZHxzZWxlY3RlZHxhc3luY3xhdXRvZm9jdXN8YXV0b3BsYXl8Y29udHJvbHN8ZGVmZXJ8ZGlzYWJs
ZWR8aGlkZGVufGlzbWFwfGxvb3B8bXVsdGlwbGV8b3BlbnxyZWFkb25seXxyZXF1aXJlZHxzY29w
ZWQiLFA9IltcXHgyMFxcdFxcclxcblxcZl0iLFI9Iig/OlxcXFwufFtcXHctXXxbXlxceDAwLVxc
eGEwXSkrIixXPVIucmVwbGFjZSgidyIsIncjIiksJD0iXFxbIitQKyIqKCIrUisiKSIrUCsiKig/
OihbKl4kfCF+XT89KSIrUCsiKig/OihbJ1wiXSkoKD86XFxcXC58W15cXFxcXSkqPylcXDN8KCIr
VysiKXwpfCkiK1ArIipcXF0iLEk9IjooIitSKyIpKD86XFwoKChbJ1wiXSkoKD86XFxcXC58W15c
XFxcXSkqPylcXDN8KCg/OlxcXFwufFteXFxcXCgpW1xcXV18IiskLnJlcGxhY2UoMyw4KSsiKSop
fC4qKVxcKXwpIix6PVJlZ0V4cCgiXiIrUCsiK3woKD86XnxbXlxcXFxdKSg/OlxcXFwuKSopIitQ
KyIrJCIsImciKSxYPVJlZ0V4cCgiXiIrUCsiKiwiK1ArIioiKSxVPVJlZ0V4cCgiXiIrUCsiKihb
Pit+XXwiK1ArIikiK1ArIioiKSxWPVJlZ0V4cChQKyIqWyt+XSIpLFk9UmVnRXhwKCI9IitQKyIq
KFteXFxdJ1wiXSopIitQKyIqXFxdIiwiZyIpLEo9UmVnRXhwKEkpLEc9UmVnRXhwKCJeIitXKyIk
IiksUT17SUQ6UmVnRXhwKCJeIygiK1IrIikiKSxDTEFTUzpSZWdFeHAoIl5cXC4oIitSKyIpIiks
VEFHOlJlZ0V4cCgiXigiK1IucmVwbGFjZSgidyIsIncqIikrIikiKSxBVFRSOlJlZ0V4cCgiXiIr
JCksUFNFVURPOlJlZ0V4cCgiXiIrSSksQ0hJTEQ6UmVnRXhwKCJeOihvbmx5fGZpcnN0fGxhc3R8
bnRofG50aC1sYXN0KS0oY2hpbGR8b2YtdHlwZSkoPzpcXCgiK1ArIiooZXZlbnxvZGR8KChbKy1d
fCkoXFxkKilufCkiK1ArIiooPzooWystXXwpIitQKyIqKFxcZCspfCkpIitQKyIqXFwpfCkiLCJp
IiksYm9vbDpSZWdFeHAoIl4oPzoiK0IrIikkIiwiaSIpLG5lZWRzQ29udGV4dDpSZWdFeHAoIl4i
K1ArIipbPit+XXw6KGV2ZW58b2RkfGVxfGd0fGx0fG50aHxmaXJzdHxsYXN0KSg/OlxcKCIrUCsi
KigoPzotXFxkKT9cXGQqKSIrUCsiKlxcKXwpKD89W14tXXwkKSIsImkiKX0sSz0vXltee10rXHtc
cypcW25hdGl2ZSBcdy8sWj0vXig/OiMoW1x3LV0rKXwoXHcrKXxcLihbXHctXSspKSQvLGV0PS9e
KD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbikkL2ksdHQ9L15oXGQkL2ksbnQ9Lyd8XFwv
ZyxydD1SZWdFeHAoIlxcXFwoW1xcZGEtZl17MSw2fSIrUCsiP3woIitQKyIpfC4pIiwiaWciKSxp
dD1mdW5jdGlvbihlLHQsbil7dmFyIHI9IjB4Iit0LTY1NTM2O3JldHVybiByIT09cnx8bj90OjA+
cj9TdHJpbmcuZnJvbUNoYXJDb2RlKHIrNjU1MzYpOlN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTZ8
cj4+MTAsNTYzMjB8MTAyMyZyKX07dHJ5e00uYXBwbHkoSD1PLmNhbGwody5jaGlsZE5vZGVzKSx3
LmNoaWxkTm9kZXMpLEhbdy5jaGlsZE5vZGVzLmxlbmd0aF0ubm9kZVR5cGV9Y2F0Y2gob3Qpe009
e2FwcGx5OkgubGVuZ3RoP2Z1bmN0aW9uKGUsdCl7Xy5hcHBseShlLE8uY2FsbCh0KSl9OmZ1bmN0
aW9uKGUsdCl7dmFyIG49ZS5sZW5ndGgscj0wO3doaWxlKGVbbisrXT10W3IrK10pO2UubGVuZ3Ro
PW4tMX19fWZ1bmN0aW9uIGF0KGUsdCxuLGkpe3ZhciBvLGEscyxsLHUsYyxkLG0seSx4O2lmKCh0
P3Qub3duZXJEb2N1bWVudHx8dDp3KSE9PWYmJnAodCksdD10fHxmLG49bnx8W10sIWV8fCJzdHJp
bmciIT10eXBlb2YgZSlyZXR1cm4gbjtpZigxIT09KGw9dC5ub2RlVHlwZSkmJjkhPT1sKXJldHVy
bltdO2lmKGgmJiFpKXtpZihvPVouZXhlYyhlKSlpZihzPW9bMV0pe2lmKDk9PT1sKXtpZihhPXQu
Z2V0RWxlbWVudEJ5SWQocyksIWF8fCFhLnBhcmVudE5vZGUpcmV0dXJuIG47aWYoYS5pZD09PXMp
cmV0dXJuIG4ucHVzaChhKSxufWVsc2UgaWYodC5vd25lckRvY3VtZW50JiYoYT10Lm93bmVyRG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQocykpJiZ2KHQsYSkmJmEuaWQ9PT1zKXJldHVybiBuLnB1c2go
YSksbn1lbHNle2lmKG9bMl0pcmV0dXJuIE0uYXBwbHkobix0LmdldEVsZW1lbnRzQnlUYWdOYW1l
KGUpKSxuO2lmKChzPW9bM10pJiZyLmdldEVsZW1lbnRzQnlDbGFzc05hbWUmJnQuZ2V0RWxlbWVu
dHNCeUNsYXNzTmFtZSlyZXR1cm4gTS5hcHBseShuLHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShz
KSksbn1pZihyLnFzYSYmKCFnfHwhZy50ZXN0KGUpKSl7aWYobT1kPWIseT10LHg9OT09PWwmJmUs
MT09PWwmJiJvYmplY3QiIT09dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKXtjPW10KGUpLChkPXQu
Z2V0QXR0cmlidXRlKCJpZCIpKT9tPWQucmVwbGFjZShudCwiXFwkJiIpOnQuc2V0QXR0cmlidXRl
KCJpZCIsbSksbT0iW2lkPSciK20rIiddICIsdT1jLmxlbmd0aDt3aGlsZSh1LS0pY1t1XT1tK3l0
KGNbdV0pO3k9Vi50ZXN0KGUpJiZ0LnBhcmVudE5vZGV8fHQseD1jLmpvaW4oIiwiKX1pZih4KXRy
eXtyZXR1cm4gTS5hcHBseShuLHkucXVlcnlTZWxlY3RvckFsbCh4KSksbn1jYXRjaChUKXt9Zmlu
YWxseXtkfHx0LnJlbW92ZUF0dHJpYnV0ZSgiaWQiKX19fXJldHVybiBrdChlLnJlcGxhY2Uoeiwi
JDEiKSx0LG4saSl9ZnVuY3Rpb24gc3QoKXt2YXIgZT1bXTtmdW5jdGlvbiB0KG4scil7cmV0dXJu
IGUucHVzaChuKz0iICIpPm8uY2FjaGVMZW5ndGgmJmRlbGV0ZSB0W2Uuc2hpZnQoKV0sdFtuXT1y
fXJldHVybiB0fWZ1bmN0aW9uIGx0KGUpe3JldHVybiBlW2JdPSEwLGV9ZnVuY3Rpb24gdXQoZSl7
dmFyIHQ9Zi5jcmVhdGVFbGVtZW50KCJkaXYiKTt0cnl7cmV0dXJuISFlKHQpfWNhdGNoKG4pe3Jl
dHVybiExfWZpbmFsbHl7dC5wYXJlbnROb2RlJiZ0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCks
dD1udWxsfX1mdW5jdGlvbiBjdChlLHQpe3ZhciBuPWUuc3BsaXQoInwiKSxyPWUubGVuZ3RoO3do
aWxlKHItLSlvLmF0dHJIYW5kbGVbbltyXV09dH1mdW5jdGlvbiBwdChlLHQpe3ZhciBuPXQmJmUs
cj1uJiYxPT09ZS5ub2RlVHlwZSYmMT09PXQubm9kZVR5cGUmJih+dC5zb3VyY2VJbmRleHx8RCkt
KH5lLnNvdXJjZUluZGV4fHxEKTtpZihyKXJldHVybiByO2lmKG4pd2hpbGUobj1uLm5leHRTaWJs
aW5nKWlmKG49PT10KXJldHVybi0xO3JldHVybiBlPzE6LTF9ZnVuY3Rpb24gZnQoZSl7cmV0dXJu
IGZ1bmN0aW9uKHQpe3ZhciBuPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4iaW5wdXQi
PT09biYmdC50eXBlPT09ZX19ZnVuY3Rpb24gZHQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBu
PXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4oImlucHV0Ij09PW58fCJidXR0b24iPT09
bikmJnQudHlwZT09PWV9fWZ1bmN0aW9uIGh0KGUpe3JldHVybiBsdChmdW5jdGlvbih0KXtyZXR1
cm4gdD0rdCxsdChmdW5jdGlvbihuLHIpe3ZhciBpLG89ZShbXSxuLmxlbmd0aCx0KSxhPW8ubGVu
Z3RoO3doaWxlKGEtLSluW2k9b1thXV0mJihuW2ldPSEocltpXT1uW2ldKSl9KX0pfXM9YXQuaXNY
TUw9ZnVuY3Rpb24oZSl7dmFyIHQ9ZSYmKGUub3duZXJEb2N1bWVudHx8ZSkuZG9jdW1lbnRFbGVt
ZW50O3JldHVybiB0PyJIVE1MIiE9PXQubm9kZU5hbWU6ITF9LHI9YXQuc3VwcG9ydD17fSxwPWF0
LnNldERvY3VtZW50PWZ1bmN0aW9uKGUpe3ZhciBuPWU/ZS5vd25lckRvY3VtZW50fHxlOncsaT1u
LmRlZmF1bHRWaWV3O3JldHVybiBuIT09ZiYmOT09PW4ubm9kZVR5cGUmJm4uZG9jdW1lbnRFbGVt
ZW50PyhmPW4sZD1uLmRvY3VtZW50RWxlbWVudCxoPSFzKG4pLGkmJmkuYXR0YWNoRXZlbnQmJmkh
PT1pLnRvcCYmaS5hdHRhY2hFdmVudCgib25iZWZvcmV1bmxvYWQiLGZ1bmN0aW9uKCl7cCgpfSks
ci5hdHRyaWJ1dGVzPXV0KGZ1bmN0aW9uKGUpe3JldHVybiBlLmNsYXNzTmFtZT0iaSIsIWUuZ2V0
QXR0cmlidXRlKCJjbGFzc05hbWUiKX0pLHIuZ2V0RWxlbWVudHNCeVRhZ05hbWU9dXQoZnVuY3Rp
b24oZSl7cmV0dXJuIGUuYXBwZW5kQ2hpbGQobi5jcmVhdGVDb21tZW50KCIiKSksIWUuZ2V0RWxl
bWVudHNCeVRhZ05hbWUoIioiKS5sZW5ndGh9KSxyLmdldEVsZW1lbnRzQnlDbGFzc05hbWU9dXQo
ZnVuY3Rpb24oZSl7cmV0dXJuIGUuaW5uZXJIVE1MPSI8ZGl2IGNsYXNzPSdhJz48L2Rpdj48ZGl2
IGNsYXNzPSdhIGknPjwvZGl2PiIsZS5maXJzdENoaWxkLmNsYXNzTmFtZT0iaSIsMj09PWUuZ2V0
RWxlbWVudHNCeUNsYXNzTmFtZSgiaSIpLmxlbmd0aH0pLHIuZ2V0QnlJZD11dChmdW5jdGlvbihl
KXtyZXR1cm4gZC5hcHBlbmRDaGlsZChlKS5pZD1iLCFuLmdldEVsZW1lbnRzQnlOYW1lfHwhbi5n
ZXRFbGVtZW50c0J5TmFtZShiKS5sZW5ndGh9KSxyLmdldEJ5SWQ/KG8uZmluZC5JRD1mdW5jdGlv
bihlLHQpe2lmKHR5cGVvZiB0LmdldEVsZW1lbnRCeUlkIT09aiYmaCl7dmFyIG49dC5nZXRFbGVt
ZW50QnlJZChlKTtyZXR1cm4gbiYmbi5wYXJlbnROb2RlP1tuXTpbXX19LG8uZmlsdGVyLklEPWZ1
bmN0aW9uKGUpe3ZhciB0PWUucmVwbGFjZShydCxpdCk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVy
biBlLmdldEF0dHJpYnV0ZSgiaWQiKT09PXR9fSk6KGRlbGV0ZSBvLmZpbmQuSUQsby5maWx0ZXIu
SUQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yZXBsYWNlKHJ0LGl0KTtyZXR1cm4gZnVuY3Rpb24oZSl7
dmFyIG49dHlwZW9mIGUuZ2V0QXR0cmlidXRlTm9kZSE9PWomJmUuZ2V0QXR0cmlidXRlTm9kZSgi
aWQiKTtyZXR1cm4gbiYmbi52YWx1ZT09PXR9fSksby5maW5kLlRBRz1yLmdldEVsZW1lbnRzQnlU
YWdOYW1lP2Z1bmN0aW9uKGUsbil7cmV0dXJuIHR5cGVvZiBuLmdldEVsZW1lbnRzQnlUYWdOYW1l
IT09aj9uLmdldEVsZW1lbnRzQnlUYWdOYW1lKGUpOnR9OmZ1bmN0aW9uKGUsdCl7dmFyIG4scj1b
XSxpPTAsbz10LmdldEVsZW1lbnRzQnlUYWdOYW1lKGUpO2lmKCIqIj09PWUpe3doaWxlKG49b1tp
KytdKTE9PT1uLm5vZGVUeXBlJiZyLnB1c2gobik7cmV0dXJuIHJ9cmV0dXJuIG99LG8uZmluZC5D
TEFTUz1yLmdldEVsZW1lbnRzQnlDbGFzc05hbWUmJmZ1bmN0aW9uKGUsbil7cmV0dXJuIHR5cGVv
ZiBuLmdldEVsZW1lbnRzQnlDbGFzc05hbWUhPT1qJiZoP24uZ2V0RWxlbWVudHNCeUNsYXNzTmFt
ZShlKTp0fSxtPVtdLGc9W10sKHIucXNhPUsudGVzdChuLnF1ZXJ5U2VsZWN0b3JBbGwpKSYmKHV0
KGZ1bmN0aW9uKGUpe2UuaW5uZXJIVE1MPSI8c2VsZWN0PjxvcHRpb24gc2VsZWN0ZWQ9Jyc+PC9v
cHRpb24+PC9zZWxlY3Q+IixlLnF1ZXJ5U2VsZWN0b3JBbGwoIltzZWxlY3RlZF0iKS5sZW5ndGh8
fGcucHVzaCgiXFxbIitQKyIqKD86dmFsdWV8IitCKyIpIiksZS5xdWVyeVNlbGVjdG9yQWxsKCI6
Y2hlY2tlZCIpLmxlbmd0aHx8Zy5wdXNoKCI6Y2hlY2tlZCIpfSksdXQoZnVuY3Rpb24oZSl7dmFy
IHQ9bi5jcmVhdGVFbGVtZW50KCJpbnB1dCIpO3Quc2V0QXR0cmlidXRlKCJ0eXBlIiwiaGlkZGVu
IiksZS5hcHBlbmRDaGlsZCh0KS5zZXRBdHRyaWJ1dGUoInQiLCIiKSxlLnF1ZXJ5U2VsZWN0b3JB
bGwoIlt0Xj0nJ10iKS5sZW5ndGgmJmcucHVzaCgiWypeJF09IitQKyIqKD86Jyd8XCJcIikiKSxl
LnF1ZXJ5U2VsZWN0b3JBbGwoIjplbmFibGVkIikubGVuZ3RofHxnLnB1c2goIjplbmFibGVkIiwi
OmRpc2FibGVkIiksZS5xdWVyeVNlbGVjdG9yQWxsKCIqLDp4IiksZy5wdXNoKCIsLio6Iil9KSks
KHIubWF0Y2hlc1NlbGVjdG9yPUsudGVzdCh5PWQud2Via2l0TWF0Y2hlc1NlbGVjdG9yfHxkLm1v
ek1hdGNoZXNTZWxlY3Rvcnx8ZC5vTWF0Y2hlc1NlbGVjdG9yfHxkLm1zTWF0Y2hlc1NlbGVjdG9y
KSkmJnV0KGZ1bmN0aW9uKGUpe3IuZGlzY29ubmVjdGVkTWF0Y2g9eS5jYWxsKGUsImRpdiIpLHku
Y2FsbChlLCJbcyE9JyddOngiKSxtLnB1c2goIiE9IixJKX0pLGc9Zy5sZW5ndGgmJlJlZ0V4cChn
LmpvaW4oInwiKSksbT1tLmxlbmd0aCYmUmVnRXhwKG0uam9pbigifCIpKSx2PUsudGVzdChkLmNv
bnRhaW5zKXx8ZC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbj9mdW5jdGlvbihlLHQpe3ZhciBuPTk9
PT1lLm5vZGVUeXBlP2UuZG9jdW1lbnRFbGVtZW50OmUscj10JiZ0LnBhcmVudE5vZGU7cmV0dXJu
IGU9PT1yfHwhKCFyfHwxIT09ci5ub2RlVHlwZXx8IShuLmNvbnRhaW5zP24uY29udGFpbnMocik6
ZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiYmMTYmZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihy
KSkpfTpmdW5jdGlvbihlLHQpe2lmKHQpd2hpbGUodD10LnBhcmVudE5vZGUpaWYodD09PWUpcmV0
dXJuITA7cmV0dXJuITF9LEE9ZC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbj9mdW5jdGlvbihlLHQp
e2lmKGU9PT10KXJldHVybiBTPSEwLDA7dmFyIGk9dC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiYm
ZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiYmZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0KTty
ZXR1cm4gaT8xJml8fCFyLnNvcnREZXRhY2hlZCYmdC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihl
KT09PWk/ZT09PW58fHYodyxlKT8tMTp0PT09bnx8dih3LHQpPzE6Yz9GLmNhbGwoYyxlKS1GLmNh
bGwoYyx0KTowOjQmaT8tMToxOmUuY29tcGFyZURvY3VtZW50UG9zaXRpb24/LTE6MX06ZnVuY3Rp
b24oZSx0KXt2YXIgcixpPTAsbz1lLnBhcmVudE5vZGUsYT10LnBhcmVudE5vZGUscz1bZV0sbD1b
dF07aWYoZT09PXQpcmV0dXJuIFM9ITAsMDtpZighb3x8IWEpcmV0dXJuIGU9PT1uPy0xOnQ9PT1u
PzE6bz8tMTphPzE6Yz9GLmNhbGwoYyxlKS1GLmNhbGwoYyx0KTowO2lmKG89PT1hKXJldHVybiBw
dChlLHQpO3I9ZTt3aGlsZShyPXIucGFyZW50Tm9kZSlzLnVuc2hpZnQocik7cj10O3doaWxlKHI9
ci5wYXJlbnROb2RlKWwudW5zaGlmdChyKTt3aGlsZShzW2ldPT09bFtpXSlpKys7cmV0dXJuIGk/
cHQoc1tpXSxsW2ldKTpzW2ldPT09dz8tMTpsW2ldPT09dz8xOjB9LG4pOmZ9LGF0Lm1hdGNoZXM9
ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYXQoZSxudWxsLG51bGwsdCl9LGF0Lm1hdGNoZXNTZWxlY3Rv
cj1mdW5jdGlvbihlLHQpe2lmKChlLm93bmVyRG9jdW1lbnR8fGUpIT09ZiYmcChlKSx0PXQucmVw
bGFjZShZLCI9JyQxJ10iKSwhKCFyLm1hdGNoZXNTZWxlY3Rvcnx8IWh8fG0mJm0udGVzdCh0KXx8
ZyYmZy50ZXN0KHQpKSl0cnl7dmFyIG49eS5jYWxsKGUsdCk7aWYobnx8ci5kaXNjb25uZWN0ZWRN
YXRjaHx8ZS5kb2N1bWVudCYmMTEhPT1lLmRvY3VtZW50Lm5vZGVUeXBlKXJldHVybiBufWNhdGNo
KGkpe31yZXR1cm4gYXQodCxmLG51bGwsW2VdKS5sZW5ndGg+MH0sYXQuY29udGFpbnM9ZnVuY3Rp
b24oZSx0KXtyZXR1cm4oZS5vd25lckRvY3VtZW50fHxlKSE9PWYmJnAoZSksdihlLHQpfSxhdC5h
dHRyPWZ1bmN0aW9uKGUsbil7KGUub3duZXJEb2N1bWVudHx8ZSkhPT1mJiZwKGUpO3ZhciBpPW8u
YXR0ckhhbmRsZVtuLnRvTG93ZXJDYXNlKCldLGE9aSYmTC5jYWxsKG8uYXR0ckhhbmRsZSxuLnRv
TG93ZXJDYXNlKCkpP2koZSxuLCFoKTp0O3JldHVybiBhPT09dD9yLmF0dHJpYnV0ZXN8fCFoP2Uu
Z2V0QXR0cmlidXRlKG4pOihhPWUuZ2V0QXR0cmlidXRlTm9kZShuKSkmJmEuc3BlY2lmaWVkP2Eu
dmFsdWU6bnVsbDphfSxhdC5lcnJvcj1mdW5jdGlvbihlKXt0aHJvdyBFcnJvcigiU3ludGF4IGVy
cm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogIitlKX0sYXQudW5pcXVlU29ydD1mdW5jdGlv
bihlKXt2YXIgdCxuPVtdLGk9MCxvPTA7aWYoUz0hci5kZXRlY3REdXBsaWNhdGVzLGM9IXIuc29y
dFN0YWJsZSYmZS5zbGljZSgwKSxlLnNvcnQoQSksUyl7d2hpbGUodD1lW28rK10pdD09PWVbb10m
JihpPW4ucHVzaChvKSk7d2hpbGUoaS0tKWUuc3BsaWNlKG5baV0sMSl9cmV0dXJuIGV9LGE9YXQu
Z2V0VGV4dD1mdW5jdGlvbihlKXt2YXIgdCxuPSIiLHI9MCxpPWUubm9kZVR5cGU7aWYoaSl7aWYo
MT09PWl8fDk9PT1pfHwxMT09PWkpe2lmKCJzdHJpbmciPT10eXBlb2YgZS50ZXh0Q29udGVudCly
ZXR1cm4gZS50ZXh0Q29udGVudDtmb3IoZT1lLmZpcnN0Q2hpbGQ7ZTtlPWUubmV4dFNpYmxpbmcp
bis9YShlKX1lbHNlIGlmKDM9PT1pfHw0PT09aSlyZXR1cm4gZS5ub2RlVmFsdWV9ZWxzZSBmb3Io
O3Q9ZVtyXTtyKyspbis9YSh0KTtyZXR1cm4gbn0sbz1hdC5zZWxlY3RvcnM9e2NhY2hlTGVuZ3Ro
OjUwLGNyZWF0ZVBzZXVkbzpsdCxtYXRjaDpRLGF0dHJIYW5kbGU6e30sZmluZDp7fSxyZWxhdGl2
ZTp7Ij4iOntkaXI6InBhcmVudE5vZGUiLGZpcnN0OiEwfSwiICI6e2RpcjoicGFyZW50Tm9kZSJ9
LCIrIjp7ZGlyOiJwcmV2aW91c1NpYmxpbmciLGZpcnN0OiEwfSwifiI6e2RpcjoicHJldmlvdXNT
aWJsaW5nIn19LHByZUZpbHRlcjp7QVRUUjpmdW5jdGlvbihlKXtyZXR1cm4gZVsxXT1lWzFdLnJl
cGxhY2UocnQsaXQpLGVbM109KGVbNF18fGVbNV18fCIiKS5yZXBsYWNlKHJ0LGl0KSwifj0iPT09
ZVsyXSYmKGVbM109IiAiK2VbM10rIiAiKSxlLnNsaWNlKDAsNCl9LENISUxEOmZ1bmN0aW9uKGUp
e3JldHVybiBlWzFdPWVbMV0udG9Mb3dlckNhc2UoKSwibnRoIj09PWVbMV0uc2xpY2UoMCwzKT8o
ZVszXXx8YXQuZXJyb3IoZVswXSksZVs0XT0rKGVbNF0/ZVs1XSsoZVs2XXx8MSk6MiooImV2ZW4i
PT09ZVszXXx8Im9kZCI9PT1lWzNdKSksZVs1XT0rKGVbN10rZVs4XXx8Im9kZCI9PT1lWzNdKSk6
ZVszXSYmYXQuZXJyb3IoZVswXSksZX0sUFNFVURPOmZ1bmN0aW9uKGUpe3ZhciBuLHI9IWVbNV0m
JmVbMl07cmV0dXJuIFEuQ0hJTEQudGVzdChlWzBdKT9udWxsOihlWzNdJiZlWzRdIT09dD9lWzJd
PWVbNF06ciYmSi50ZXN0KHIpJiYobj1tdChyLCEwKSkmJihuPXIuaW5kZXhPZigiKSIsci5sZW5n
dGgtbiktci5sZW5ndGgpJiYoZVswXT1lWzBdLnNsaWNlKDAsbiksZVsyXT1yLnNsaWNlKDAsbikp
LGUuc2xpY2UoMCwzKSl9fSxmaWx0ZXI6e1RBRzpmdW5jdGlvbihlKXt2YXIgdD1lLnJlcGxhY2Uo
cnQsaXQpLnRvTG93ZXJDYXNlKCk7cmV0dXJuIioiPT09ZT9mdW5jdGlvbigpe3JldHVybiEwfTpm
dW5jdGlvbihlKXtyZXR1cm4gZS5ub2RlTmFtZSYmZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09
dH19LENMQVNTOmZ1bmN0aW9uKGUpe3ZhciB0PU5bZSsiICJdO3JldHVybiB0fHwodD1SZWdFeHAo
IihefCIrUCsiKSIrZSsiKCIrUCsifCQpIikpJiZOKGUsZnVuY3Rpb24oZSl7cmV0dXJuIHQudGVz
dCgic3RyaW5nIj09dHlwZW9mIGUuY2xhc3NOYW1lJiZlLmNsYXNzTmFtZXx8dHlwZW9mIGUuZ2V0
QXR0cmlidXRlIT09aiYmZS5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKX0pfSxBVFRSOmZ1bmN0
aW9uKGUsdCxuKXtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIGk9YXQuYXR0cihyLGUpO3JldHVybiBu
dWxsPT1pPyIhPSI9PT10OnQ/KGkrPSIiLCI9Ij09PXQ/aT09PW46IiE9Ij09PXQ/aSE9PW46Il49
Ij09PXQ/biYmMD09PWkuaW5kZXhPZihuKToiKj0iPT09dD9uJiZpLmluZGV4T2Yobik+LTE6IiQ9
Ij09PXQ/biYmaS5zbGljZSgtbi5sZW5ndGgpPT09bjoifj0iPT09dD8oIiAiK2krIiAiKS5pbmRl
eE9mKG4pPi0xOiJ8PSI9PT10P2k9PT1ufHxpLnNsaWNlKDAsbi5sZW5ndGgrMSk9PT1uKyItIjoh
MSk6ITB9fSxDSElMRDpmdW5jdGlvbihlLHQsbixyLGkpe3ZhciBvPSJudGgiIT09ZS5zbGljZSgw
LDMpLGE9Imxhc3QiIT09ZS5zbGljZSgtNCkscz0ib2YtdHlwZSI9PT10O3JldHVybiAxPT09ciYm
MD09PWk/ZnVuY3Rpb24oZSl7cmV0dXJuISFlLnBhcmVudE5vZGV9OmZ1bmN0aW9uKHQsbixsKXt2
YXIgdSxjLHAsZixkLGgsZz1vIT09YT8ibmV4dFNpYmxpbmciOiJwcmV2aW91c1NpYmxpbmciLG09
dC5wYXJlbnROb2RlLHk9cyYmdC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLHY9IWwmJiFzO2lmKG0p
e2lmKG8pe3doaWxlKGcpe3A9dDt3aGlsZShwPXBbZ10paWYocz9wLm5vZGVOYW1lLnRvTG93ZXJD
YXNlKCk9PT15OjE9PT1wLm5vZGVUeXBlKXJldHVybiExO2g9Zz0ib25seSI9PT1lJiYhaCYmIm5l
eHRTaWJsaW5nIn1yZXR1cm4hMH1pZihoPVthP20uZmlyc3RDaGlsZDptLmxhc3RDaGlsZF0sYSYm
dil7Yz1tW2JdfHwobVtiXT17fSksdT1jW2VdfHxbXSxkPXVbMF09PT1UJiZ1WzFdLGY9dVswXT09
PVQmJnVbMl0scD1kJiZtLmNoaWxkTm9kZXNbZF07d2hpbGUocD0rK2QmJnAmJnBbZ118fChmPWQ9
MCl8fGgucG9wKCkpaWYoMT09PXAubm9kZVR5cGUmJisrZiYmcD09PXQpe2NbZV09W1QsZCxmXTti
cmVha319ZWxzZSBpZih2JiYodT0odFtiXXx8KHRbYl09e30pKVtlXSkmJnVbMF09PT1UKWY9dVsx
XTtlbHNlIHdoaWxlKHA9KytkJiZwJiZwW2ddfHwoZj1kPTApfHxoLnBvcCgpKWlmKChzP3Aubm9k
ZU5hbWUudG9Mb3dlckNhc2UoKT09PXk6MT09PXAubm9kZVR5cGUpJiYrK2YmJih2JiYoKHBbYl18
fChwW2JdPXt9KSlbZV09W1QsZl0pLHA9PT10KSlicmVhaztyZXR1cm4gZi09aSxmPT09cnx8MD09
PWYlciYmZi9yPj0wfX19LFBTRVVETzpmdW5jdGlvbihlLHQpe3ZhciBuLHI9by5wc2V1ZG9zW2Vd
fHxvLnNldEZpbHRlcnNbZS50b0xvd2VyQ2FzZSgpXXx8YXQuZXJyb3IoInVuc3VwcG9ydGVkIHBz
ZXVkbzogIitlKTtyZXR1cm4gcltiXT9yKHQpOnIubGVuZ3RoPjE/KG49W2UsZSwiIix0XSxvLnNl
dEZpbHRlcnMuaGFzT3duUHJvcGVydHkoZS50b0xvd2VyQ2FzZSgpKT9sdChmdW5jdGlvbihlLG4p
e3ZhciBpLG89cihlLHQpLGE9by5sZW5ndGg7d2hpbGUoYS0tKWk9Ri5jYWxsKGUsb1thXSksZVtp
XT0hKG5baV09b1thXSl9KTpmdW5jdGlvbihlKXtyZXR1cm4gcihlLDAsbil9KTpyfX0scHNldWRv
czp7bm90Omx0KGZ1bmN0aW9uKGUpe3ZhciB0PVtdLG49W10scj1sKGUucmVwbGFjZSh6LCIkMSIp
KTtyZXR1cm4gcltiXT9sdChmdW5jdGlvbihlLHQsbixpKXt2YXIgbyxhPXIoZSxudWxsLGksW10p
LHM9ZS5sZW5ndGg7d2hpbGUocy0tKShvPWFbc10pJiYoZVtzXT0hKHRbc109bykpfSk6ZnVuY3Rp
b24oZSxpLG8pe3JldHVybiB0WzBdPWUscih0LG51bGwsbyxuKSwhbi5wb3AoKX19KSxoYXM6bHQo
ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBhdChlLHQpLmxlbmd0aD4wfX0p
LGNvbnRhaW5zOmx0KGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4odC50ZXh0
Q29udGVudHx8dC5pbm5lclRleHR8fGEodCkpLmluZGV4T2YoZSk+LTF9fSksbGFuZzpsdChmdW5j
dGlvbihlKXtyZXR1cm4gRy50ZXN0KGV8fCIiKXx8YXQuZXJyb3IoInVuc3VwcG9ydGVkIGxhbmc6
ICIrZSksZT1lLnJlcGxhY2UocnQsaXQpLnRvTG93ZXJDYXNlKCksZnVuY3Rpb24odCl7dmFyIG47
ZG8gaWYobj1oP3QubGFuZzp0LmdldEF0dHJpYnV0ZSgieG1sOmxhbmciKXx8dC5nZXRBdHRyaWJ1
dGUoImxhbmciKSlyZXR1cm4gbj1uLnRvTG93ZXJDYXNlKCksbj09PWV8fDA9PT1uLmluZGV4T2Yo
ZSsiLSIpO3doaWxlKCh0PXQucGFyZW50Tm9kZSkmJjE9PT10Lm5vZGVUeXBlKTtyZXR1cm4hMX19
KSx0YXJnZXQ6ZnVuY3Rpb24odCl7dmFyIG49ZS5sb2NhdGlvbiYmZS5sb2NhdGlvbi5oYXNoO3Jl
dHVybiBuJiZuLnNsaWNlKDEpPT09dC5pZH0scm9vdDpmdW5jdGlvbihlKXtyZXR1cm4gZT09PWR9
LGZvY3VzOmZ1bmN0aW9uKGUpe3JldHVybiBlPT09Zi5hY3RpdmVFbGVtZW50JiYoIWYuaGFzRm9j
dXN8fGYuaGFzRm9jdXMoKSkmJiEhKGUudHlwZXx8ZS5ocmVmfHx+ZS50YWJJbmRleCl9LGVuYWJs
ZWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZGlzYWJsZWQ9PT0hMX0sZGlzYWJsZWQ6ZnVuY3Rpb24o
ZSl7cmV0dXJuIGUuZGlzYWJsZWQ9PT0hMH0sY2hlY2tlZDpmdW5jdGlvbihlKXt2YXIgdD1lLm5v
ZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PXQmJiEhZS5jaGVja2VkfHwib3B0
aW9uIj09PXQmJiEhZS5zZWxlY3RlZH0sc2VsZWN0ZWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucGFy
ZW50Tm9kZSYmZS5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXgsZS5zZWxlY3RlZD09PSEwfSxlbXB0
eTpmdW5jdGlvbihlKXtmb3IoZT1lLmZpcnN0Q2hpbGQ7ZTtlPWUubmV4dFNpYmxpbmcpaWYoZS5u
b2RlTmFtZT4iQCJ8fDM9PT1lLm5vZGVUeXBlfHw0PT09ZS5ub2RlVHlwZSlyZXR1cm4hMTtyZXR1
cm4hMH0scGFyZW50OmZ1bmN0aW9uKGUpe3JldHVybiFvLnBzZXVkb3MuZW1wdHkoZSl9LGhlYWRl
cjpmdW5jdGlvbihlKXtyZXR1cm4gdHQudGVzdChlLm5vZGVOYW1lKX0saW5wdXQ6ZnVuY3Rpb24o
ZSl7cmV0dXJuIGV0LnRlc3QoZS5ub2RlTmFtZSl9LGJ1dHRvbjpmdW5jdGlvbihlKXt2YXIgdD1l
Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PXQmJiJidXR0b24iPT09ZS50
eXBlfHwiYnV0dG9uIj09PXR9LHRleHQ6ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuImlucHV0Ij09
PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSYmInRleHQiPT09ZS50eXBlJiYobnVsbD09KHQ9ZS5n
ZXRBdHRyaWJ1dGUoInR5cGUiKSl8fHQudG9Mb3dlckNhc2UoKT09PWUudHlwZSl9LGZpcnN0Omh0
KGZ1bmN0aW9uKCl7cmV0dXJuWzBdfSksbGFzdDpodChmdW5jdGlvbihlLHQpe3JldHVyblt0LTFd
fSksZXE6aHQoZnVuY3Rpb24oZSx0LG4pe3JldHVyblswPm4/bit0Om5dfSksZXZlbjpodChmdW5j
dGlvbihlLHQpe3ZhciBuPTA7Zm9yKDt0Pm47bis9MillLnB1c2gobik7cmV0dXJuIGV9KSxvZGQ6
aHQoZnVuY3Rpb24oZSx0KXt2YXIgbj0xO2Zvcig7dD5uO24rPTIpZS5wdXNoKG4pO3JldHVybiBl
fSksbHQ6aHQoZnVuY3Rpb24oZSx0LG4pe3ZhciByPTA+bj9uK3Q6bjtmb3IoOy0tcj49MDspZS5w
dXNoKHIpO3JldHVybiBlfSksZ3Q6aHQoZnVuY3Rpb24oZSx0LG4pe3ZhciByPTA+bj9uK3Q6bjtm
b3IoO3Q+KytyOyllLnB1c2gocik7cmV0dXJuIGV9KX19LG8ucHNldWRvcy5udGg9by5wc2V1ZG9z
LmVxO2ZvcihuIGlue3JhZGlvOiEwLGNoZWNrYm94OiEwLGZpbGU6ITAscGFzc3dvcmQ6ITAsaW1h
Z2U6ITB9KW8ucHNldWRvc1tuXT1mdChuKTtmb3IobiBpbntzdWJtaXQ6ITAscmVzZXQ6ITB9KW8u
cHNldWRvc1tuXT1kdChuKTtmdW5jdGlvbiBndCgpe31ndC5wcm90b3R5cGU9by5maWx0ZXJzPW8u
cHNldWRvcyxvLnNldEZpbHRlcnM9bmV3IGd0O2Z1bmN0aW9uIG10KGUsdCl7dmFyIG4scixpLGEs
cyxsLHUsYz1rW2UrIiAiXTtpZihjKXJldHVybiB0PzA6Yy5zbGljZSgwKTtzPWUsbD1bXSx1PW8u
cHJlRmlsdGVyO3doaWxlKHMpeyghbnx8KHI9WC5leGVjKHMpKSkmJihyJiYocz1zLnNsaWNlKHJb
MF0ubGVuZ3RoKXx8cyksbC5wdXNoKGk9W10pKSxuPSExLChyPVUuZXhlYyhzKSkmJihuPXIuc2hp
ZnQoKSxpLnB1c2goe3ZhbHVlOm4sdHlwZTpyWzBdLnJlcGxhY2UoeiwiICIpfSkscz1zLnNsaWNl
KG4ubGVuZ3RoKSk7Zm9yKGEgaW4gby5maWx0ZXIpIShyPVFbYV0uZXhlYyhzKSl8fHVbYV0mJiEo
cj11W2FdKHIpKXx8KG49ci5zaGlmdCgpLGkucHVzaCh7dmFsdWU6bix0eXBlOmEsbWF0Y2hlczpy
fSkscz1zLnNsaWNlKG4ubGVuZ3RoKSk7aWYoIW4pYnJlYWt9cmV0dXJuIHQ/cy5sZW5ndGg6cz9h
dC5lcnJvcihlKTprKGUsbCkuc2xpY2UoMCl9ZnVuY3Rpb24geXQoZSl7dmFyIHQ9MCxuPWUubGVu
Z3RoLHI9IiI7Zm9yKDtuPnQ7dCsrKXIrPWVbdF0udmFsdWU7cmV0dXJuIHJ9ZnVuY3Rpb24gdnQo
ZSx0LG4pe3ZhciByPXQuZGlyLG89biYmInBhcmVudE5vZGUiPT09cixhPUMrKztyZXR1cm4gdC5m
aXJzdD9mdW5jdGlvbih0LG4saSl7d2hpbGUodD10W3JdKWlmKDE9PT10Lm5vZGVUeXBlfHxvKXJl
dHVybiBlKHQsbixpKX06ZnVuY3Rpb24odCxuLHMpe3ZhciBsLHUsYyxwPVQrIiAiK2E7aWYocyl7
d2hpbGUodD10W3JdKWlmKCgxPT09dC5ub2RlVHlwZXx8bykmJmUodCxuLHMpKXJldHVybiEwfWVs
c2Ugd2hpbGUodD10W3JdKWlmKDE9PT10Lm5vZGVUeXBlfHxvKWlmKGM9dFtiXXx8KHRbYl09e30p
LCh1PWNbcl0pJiZ1WzBdPT09cCl7aWYoKGw9dVsxXSk9PT0hMHx8bD09PWkpcmV0dXJuIGw9PT0h
MH1lbHNlIGlmKHU9Y1tyXT1bcF0sdVsxXT1lKHQsbixzKXx8aSx1WzFdPT09ITApcmV0dXJuITB9
fWZ1bmN0aW9uIGJ0KGUpe3JldHVybiBlLmxlbmd0aD4xP2Z1bmN0aW9uKHQsbixyKXt2YXIgaT1l
Lmxlbmd0aDt3aGlsZShpLS0paWYoIWVbaV0odCxuLHIpKXJldHVybiExO3JldHVybiEwfTplWzBd
fWZ1bmN0aW9uIHh0KGUsdCxuLHIsaSl7dmFyIG8sYT1bXSxzPTAsbD1lLmxlbmd0aCx1PW51bGwh
PXQ7Zm9yKDtsPnM7cysrKShvPWVbc10pJiYoIW58fG4obyxyLGkpKSYmKGEucHVzaChvKSx1JiZ0
LnB1c2gocykpO3JldHVybiBhfWZ1bmN0aW9uIHd0KGUsdCxuLHIsaSxvKXtyZXR1cm4gciYmIXJb
Yl0mJihyPXd0KHIpKSxpJiYhaVtiXSYmKGk9d3QoaSxvKSksbHQoZnVuY3Rpb24obyxhLHMsbCl7
dmFyIHUsYyxwLGY9W10sZD1bXSxoPWEubGVuZ3RoLGc9b3x8TnQodHx8IioiLHMubm9kZVR5cGU/
W3NdOnMsW10pLG09IWV8fCFvJiZ0P2c6eHQoZyxmLGUscyxsKSx5PW4/aXx8KG8/ZTpofHxyKT9b
XTphOm07aWYobiYmbihtLHkscyxsKSxyKXt1PXh0KHksZCkscih1LFtdLHMsbCksYz11Lmxlbmd0
aDt3aGlsZShjLS0pKHA9dVtjXSkmJih5W2RbY11dPSEobVtkW2NdXT1wKSl9aWYobyl7aWYoaXx8
ZSl7aWYoaSl7dT1bXSxjPXkubGVuZ3RoO3doaWxlKGMtLSkocD15W2NdKSYmdS5wdXNoKG1bY109
cCk7aShudWxsLHk9W10sdSxsKX1jPXkubGVuZ3RoO3doaWxlKGMtLSkocD15W2NdKSYmKHU9aT9G
LmNhbGwobyxwKTpmW2NdKT4tMSYmKG9bdV09IShhW3VdPXApKX19ZWxzZSB5PXh0KHk9PT1hP3ku
c3BsaWNlKGgseS5sZW5ndGgpOnkpLGk/aShudWxsLGEseSxsKTpNLmFwcGx5KGEseSl9KX1mdW5j
dGlvbiBUdChlKXt2YXIgdCxuLHIsaT1lLmxlbmd0aCxhPW8ucmVsYXRpdmVbZVswXS50eXBlXSxz
PWF8fG8ucmVsYXRpdmVbIiAiXSxsPWE/MTowLGM9dnQoZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT10
fSxzLCEwKSxwPXZ0KGZ1bmN0aW9uKGUpe3JldHVybiBGLmNhbGwodCxlKT4tMX0scywhMCksZj1b
ZnVuY3Rpb24oZSxuLHIpe3JldHVybiFhJiYocnx8biE9PXUpfHwoKHQ9bikubm9kZVR5cGU/Yyhl
LG4scik6cChlLG4scikpfV07Zm9yKDtpPmw7bCsrKWlmKG49by5yZWxhdGl2ZVtlW2xdLnR5cGVd
KWY9W3Z0KGJ0KGYpLG4pXTtlbHNle2lmKG49by5maWx0ZXJbZVtsXS50eXBlXS5hcHBseShudWxs
LGVbbF0ubWF0Y2hlcyksbltiXSl7Zm9yKHI9KytsO2k+cjtyKyspaWYoby5yZWxhdGl2ZVtlW3Jd
LnR5cGVdKWJyZWFrO3JldHVybiB3dChsPjEmJmJ0KGYpLGw+MSYmeXQoZS5zbGljZSgwLGwtMSku
Y29uY2F0KHt2YWx1ZToiICI9PT1lW2wtMl0udHlwZT8iKiI6IiJ9KSkucmVwbGFjZSh6LCIkMSIp
LG4scj5sJiZUdChlLnNsaWNlKGwscikpLGk+ciYmVHQoZT1lLnNsaWNlKHIpKSxpPnImJnl0KGUp
KX1mLnB1c2gobil9cmV0dXJuIGJ0KGYpfWZ1bmN0aW9uIEN0KGUsdCl7dmFyIG49MCxyPXQubGVu
Z3RoPjAsYT1lLmxlbmd0aD4wLHM9ZnVuY3Rpb24ocyxsLGMscCxkKXt2YXIgaCxnLG0seT1bXSx2
PTAsYj0iMCIseD1zJiZbXSx3PW51bGwhPWQsQz11LE49c3x8YSYmby5maW5kLlRBRygiKiIsZCYm
bC5wYXJlbnROb2RlfHxsKSxrPVQrPW51bGw9PUM/MTpNYXRoLnJhbmRvbSgpfHwuMTtmb3IodyYm
KHU9bCE9PWYmJmwsaT1uKTtudWxsIT0oaD1OW2JdKTtiKyspe2lmKGEmJmgpe2c9MDt3aGlsZSht
PWVbZysrXSlpZihtKGgsbCxjKSl7cC5wdXNoKGgpO2JyZWFrfXcmJihUPWssaT0rK24pfXImJigo
aD0hbSYmaCkmJnYtLSxzJiZ4LnB1c2goaCkpfWlmKHYrPWIsciYmYiE9PXYpe2c9MDt3aGlsZSht
PXRbZysrXSltKHgseSxsLGMpO2lmKHMpe2lmKHY+MCl3aGlsZShiLS0peFtiXXx8eVtiXXx8KHlb
Yl09cS5jYWxsKHApKTt5PXh0KHkpfU0uYXBwbHkocCx5KSx3JiYhcyYmeS5sZW5ndGg+MCYmdit0
Lmxlbmd0aD4xJiZhdC51bmlxdWVTb3J0KHApfXJldHVybiB3JiYoVD1rLHU9QykseH07cmV0dXJu
IHI/bHQocyk6c31sPWF0LmNvbXBpbGU9ZnVuY3Rpb24oZSx0KXt2YXIgbixyPVtdLGk9W10sbz1F
W2UrIiAiXTtpZighbyl7dHx8KHQ9bXQoZSkpLG49dC5sZW5ndGg7d2hpbGUobi0tKW89VHQodFtu
XSksb1tiXT9yLnB1c2gobyk6aS5wdXNoKG8pO289RShlLEN0KGkscikpfXJldHVybiBvfTtmdW5j
dGlvbiBOdChlLHQsbil7dmFyIHI9MCxpPXQubGVuZ3RoO2Zvcig7aT5yO3IrKylhdChlLHRbcl0s
bik7cmV0dXJuIG59ZnVuY3Rpb24ga3QoZSx0LG4saSl7dmFyIGEscyx1LGMscCxmPW10KGUpO2lm
KCFpJiYxPT09Zi5sZW5ndGgpe2lmKHM9ZlswXT1mWzBdLnNsaWNlKDApLHMubGVuZ3RoPjImJiJJ
RCI9PT0odT1zWzBdKS50eXBlJiZyLmdldEJ5SWQmJjk9PT10Lm5vZGVUeXBlJiZoJiZvLnJlbGF0
aXZlW3NbMV0udHlwZV0pe2lmKHQ9KG8uZmluZC5JRCh1Lm1hdGNoZXNbMF0ucmVwbGFjZShydCxp
dCksdCl8fFtdKVswXSwhdClyZXR1cm4gbjtlPWUuc2xpY2Uocy5zaGlmdCgpLnZhbHVlLmxlbmd0
aCl9YT1RLm5lZWRzQ29udGV4dC50ZXN0KGUpPzA6cy5sZW5ndGg7d2hpbGUoYS0tKXtpZih1PXNb
YV0sby5yZWxhdGl2ZVtjPXUudHlwZV0pYnJlYWs7aWYoKHA9by5maW5kW2NdKSYmKGk9cCh1Lm1h
dGNoZXNbMF0ucmVwbGFjZShydCxpdCksVi50ZXN0KHNbMF0udHlwZSkmJnQucGFyZW50Tm9kZXx8
dCkpKXtpZihzLnNwbGljZShhLDEpLGU9aS5sZW5ndGgmJnl0KHMpLCFlKXJldHVybiBNLmFwcGx5
KG4saSksbjticmVha319fXJldHVybiBsKGUsZikoaSx0LCFoLG4sVi50ZXN0KGUpKSxufXIuc29y
dFN0YWJsZT1iLnNwbGl0KCIiKS5zb3J0KEEpLmpvaW4oIiIpPT09YixyLmRldGVjdER1cGxpY2F0
ZXM9UyxwKCksci5zb3J0RGV0YWNoZWQ9dXQoZnVuY3Rpb24oZSl7cmV0dXJuIDEmZS5jb21wYXJl
RG9jdW1lbnRQb3NpdGlvbihmLmNyZWF0ZUVsZW1lbnQoImRpdiIpKX0pLHV0KGZ1bmN0aW9uKGUp
e3JldHVybiBlLmlubmVySFRNTD0iPGEgaHJlZj0nIyc+PC9hPiIsIiMiPT09ZS5maXJzdENoaWxk
LmdldEF0dHJpYnV0ZSgiaHJlZiIpfSl8fGN0KCJ0eXBlfGhyZWZ8aGVpZ2h0fHdpZHRoIixmdW5j
dGlvbihlLG4scil7cmV0dXJuIHI/dDplLmdldEF0dHJpYnV0ZShuLCJ0eXBlIj09PW4udG9Mb3dl
ckNhc2UoKT8xOjIpfSksci5hdHRyaWJ1dGVzJiZ1dChmdW5jdGlvbihlKXtyZXR1cm4gZS5pbm5l
ckhUTUw9IjxpbnB1dC8+IixlLmZpcnN0Q2hpbGQuc2V0QXR0cmlidXRlKCJ2YWx1ZSIsIiIpLCIi
PT09ZS5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSgidmFsdWUiKX0pfHxjdCgidmFsdWUiLGZ1bmN0
aW9uKGUsbixyKXtyZXR1cm4gcnx8ImlucHV0IiE9PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKT90
OmUuZGVmYXVsdFZhbHVlfSksdXQoZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWUuZ2V0QXR0cmli
dXRlKCJkaXNhYmxlZCIpfSl8fGN0KEIsZnVuY3Rpb24oZSxuLHIpe3ZhciBpO3JldHVybiByP3Q6
KGk9ZS5nZXRBdHRyaWJ1dGVOb2RlKG4pKSYmaS5zcGVjaWZpZWQ/aS52YWx1ZTplW25dPT09ITA/
bi50b0xvd2VyQ2FzZSgpOm51bGx9KSx4LmZpbmQ9YXQseC5leHByPWF0LnNlbGVjdG9ycyx4LmV4
cHJbIjoiXT14LmV4cHIucHNldWRvcyx4LnVuaXF1ZT1hdC51bmlxdWVTb3J0LHgudGV4dD1hdC5n
ZXRUZXh0LHguaXNYTUxEb2M9YXQuaXNYTUwseC5jb250YWlucz1hdC5jb250YWluc30oZSk7dmFy
IE89e307ZnVuY3Rpb24gRihlKXt2YXIgdD1PW2VdPXt9O3JldHVybiB4LmVhY2goZS5tYXRjaChU
KXx8W10sZnVuY3Rpb24oZSxuKXt0W25dPSEwfSksdH14LkNhbGxiYWNrcz1mdW5jdGlvbihlKXtl
PSJzdHJpbmciPT10eXBlb2YgZT9PW2VdfHxGKGUpOnguZXh0ZW5kKHt9LGUpO3ZhciBuLHIsaSxv
LGEscyxsPVtdLHU9IWUub25jZSYmW10sYz1mdW5jdGlvbih0KXtmb3Iocj1lLm1lbW9yeSYmdCxp
PSEwLGE9c3x8MCxzPTAsbz1sLmxlbmd0aCxuPSEwO2wmJm8+YTthKyspaWYobFthXS5hcHBseSh0
WzBdLHRbMV0pPT09ITEmJmUuc3RvcE9uRmFsc2Upe3I9ITE7YnJlYWt9bj0hMSxsJiYodT91Lmxl
bmd0aCYmYyh1LnNoaWZ0KCkpOnI/bD1bXTpwLmRpc2FibGUoKSl9LHA9e2FkZDpmdW5jdGlvbigp
e2lmKGwpe3ZhciB0PWwubGVuZ3RoOyhmdW5jdGlvbiBpKHQpe3guZWFjaCh0LGZ1bmN0aW9uKHQs
bil7dmFyIHI9eC50eXBlKG4pOyJmdW5jdGlvbiI9PT1yP2UudW5pcXVlJiZwLmhhcyhuKXx8bC5w
dXNoKG4pOm4mJm4ubGVuZ3RoJiYic3RyaW5nIiE9PXImJmkobil9KX0pKGFyZ3VtZW50cyksbj9v
PWwubGVuZ3RoOnImJihzPXQsYyhyKSl9cmV0dXJuIHRoaXN9LHJlbW92ZTpmdW5jdGlvbigpe3Jl
dHVybiBsJiZ4LmVhY2goYXJndW1lbnRzLGZ1bmN0aW9uKGUsdCl7dmFyIHI7d2hpbGUoKHI9eC5p
bkFycmF5KHQsbCxyKSk+LTEpbC5zcGxpY2UociwxKSxuJiYobz49ciYmby0tLGE+PXImJmEtLSl9
KSx0aGlzfSxoYXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGU/eC5pbkFycmF5KGUsbCk+LTE6ISghbHx8
IWwubGVuZ3RoKX0sZW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4gbD1bXSxvPTAsdGhpc30sZGlzYWJs
ZTpmdW5jdGlvbigpe3JldHVybiBsPXU9cj10LHRoaXN9LGRpc2FibGVkOmZ1bmN0aW9uKCl7cmV0
dXJuIWx9LGxvY2s6ZnVuY3Rpb24oKXtyZXR1cm4gdT10LHJ8fHAuZGlzYWJsZSgpLHRoaXN9LGxv
Y2tlZDpmdW5jdGlvbigpe3JldHVybiF1fSxmaXJlV2l0aDpmdW5jdGlvbihlLHQpe3JldHVybiFs
fHxpJiYhdXx8KHQ9dHx8W10sdD1bZSx0LnNsaWNlP3Quc2xpY2UoKTp0XSxuP3UucHVzaCh0KTpj
KHQpKSx0aGlzfSxmaXJlOmZ1bmN0aW9uKCl7cmV0dXJuIHAuZmlyZVdpdGgodGhpcyxhcmd1bWVu
dHMpLHRoaXN9LGZpcmVkOmZ1bmN0aW9uKCl7cmV0dXJuISFpfX07cmV0dXJuIHB9LHguZXh0ZW5k
KHtEZWZlcnJlZDpmdW5jdGlvbihlKXt2YXIgdD1bWyJyZXNvbHZlIiwiZG9uZSIseC5DYWxsYmFj
a3MoIm9uY2UgbWVtb3J5IiksInJlc29sdmVkIl0sWyJyZWplY3QiLCJmYWlsIix4LkNhbGxiYWNr
cygib25jZSBtZW1vcnkiKSwicmVqZWN0ZWQiXSxbIm5vdGlmeSIsInByb2dyZXNzIix4LkNhbGxi
YWNrcygibWVtb3J5IildXSxuPSJwZW5kaW5nIixyPXtzdGF0ZTpmdW5jdGlvbigpe3JldHVybiBu
fSxhbHdheXM6ZnVuY3Rpb24oKXtyZXR1cm4gaS5kb25lKGFyZ3VtZW50cykuZmFpbChhcmd1bWVu
dHMpLHRoaXN9LHRoZW46ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHM7cmV0dXJuIHguRGVmZXJy
ZWQoZnVuY3Rpb24obil7eC5lYWNoKHQsZnVuY3Rpb24odCxvKXt2YXIgYT1vWzBdLHM9eC5pc0Z1
bmN0aW9uKGVbdF0pJiZlW3RdO2lbb1sxXV0oZnVuY3Rpb24oKXt2YXIgZT1zJiZzLmFwcGx5KHRo
aXMsYXJndW1lbnRzKTtlJiZ4LmlzRnVuY3Rpb24oZS5wcm9taXNlKT9lLnByb21pc2UoKS5kb25l
KG4ucmVzb2x2ZSkuZmFpbChuLnJlamVjdCkucHJvZ3Jlc3Mobi5ub3RpZnkpOm5bYSsiV2l0aCJd
KHRoaXM9PT1yP24ucHJvbWlzZSgpOnRoaXMscz9bZV06YXJndW1lbnRzKX0pfSksZT1udWxsfSku
cHJvbWlzZSgpfSxwcm9taXNlOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT1lP3guZXh0ZW5kKGUs
cik6cn19LGk9e307cmV0dXJuIHIucGlwZT1yLnRoZW4seC5lYWNoKHQsZnVuY3Rpb24oZSxvKXt2
YXIgYT1vWzJdLHM9b1szXTtyW29bMV1dPWEuYWRkLHMmJmEuYWRkKGZ1bmN0aW9uKCl7bj1zfSx0
WzFeZV1bMl0uZGlzYWJsZSx0WzJdWzJdLmxvY2spLGlbb1swXV09ZnVuY3Rpb24oKXtyZXR1cm4g
aVtvWzBdKyJXaXRoIl0odGhpcz09PWk/cjp0aGlzLGFyZ3VtZW50cyksdGhpc30saVtvWzBdKyJX
aXRoIl09YS5maXJlV2l0aH0pLHIucHJvbWlzZShpKSxlJiZlLmNhbGwoaSxpKSxpfSx3aGVuOmZ1
bmN0aW9uKGUpe3ZhciB0PTAsbj1nLmNhbGwoYXJndW1lbnRzKSxyPW4ubGVuZ3RoLGk9MSE9PXJ8
fGUmJnguaXNGdW5jdGlvbihlLnByb21pc2UpP3I6MCxvPTE9PT1pP2U6eC5EZWZlcnJlZCgpLGE9
ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBmdW5jdGlvbihyKXt0W2VdPXRoaXMsbltlXT1hcmd1bWVu
dHMubGVuZ3RoPjE/Zy5jYWxsKGFyZ3VtZW50cyk6cixuPT09cz9vLm5vdGlmeVdpdGgodCxuKTot
LWl8fG8ucmVzb2x2ZVdpdGgodCxuKX19LHMsbCx1O2lmKHI+MSlmb3Iocz1BcnJheShyKSxsPUFy
cmF5KHIpLHU9QXJyYXkocik7cj50O3QrKyluW3RdJiZ4LmlzRnVuY3Rpb24oblt0XS5wcm9taXNl
KT9uW3RdLnByb21pc2UoKS5kb25lKGEodCx1LG4pKS5mYWlsKG8ucmVqZWN0KS5wcm9ncmVzcyhh
KHQsbCxzKSk6LS1pO3JldHVybiBpfHxvLnJlc29sdmVXaXRoKHUsbiksby5wcm9taXNlKCl9fSks
eC5zdXBwb3J0PWZ1bmN0aW9uKHQpe3ZhciBuLHIsbyxzLGwsdSxjLHAsZixkPWEuY3JlYXRlRWxl
bWVudCgiZGl2Iik7aWYoZC5zZXRBdHRyaWJ1dGUoImNsYXNzTmFtZSIsInQiKSxkLmlubmVySFRN
TD0iICA8bGluay8+PHRhYmxlPjwvdGFibGU+PGEgaHJlZj0nL2EnPmE8L2E+PGlucHV0IHR5cGU9
J2NoZWNrYm94Jy8+IixuPWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKXx8W10scj1kLmdldEVs
ZW1lbnRzQnlUYWdOYW1lKCJhIilbMF0sIXJ8fCFyLnN0eWxlfHwhbi5sZW5ndGgpcmV0dXJuIHQ7
cz1hLmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpLHU9cy5hcHBlbmRDaGlsZChhLmNyZWF0ZUVsZW1l
bnQoIm9wdGlvbiIpKSxvPWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IilbMF0sci5zdHls
ZS5jc3NUZXh0PSJ0b3A6MXB4O2Zsb2F0OmxlZnQ7b3BhY2l0eTouNSIsdC5nZXRTZXRBdHRyaWJ1
dGU9InQiIT09ZC5jbGFzc05hbWUsdC5sZWFkaW5nV2hpdGVzcGFjZT0zPT09ZC5maXJzdENoaWxk
Lm5vZGVUeXBlLHQudGJvZHk9IWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRib2R5IikubGVuZ3Ro
LHQuaHRtbFNlcmlhbGl6ZT0hIWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImxpbmsiKS5sZW5ndGgs
dC5zdHlsZT0vdG9wLy50ZXN0KHIuZ2V0QXR0cmlidXRlKCJzdHlsZSIpKSx0LmhyZWZOb3JtYWxp
emVkPSIvYSI9PT1yLmdldEF0dHJpYnV0ZSgiaHJlZiIpLHQub3BhY2l0eT0vXjAuNS8udGVzdChy
LnN0eWxlLm9wYWNpdHkpLHQuY3NzRmxvYXQ9ISFyLnN0eWxlLmNzc0Zsb2F0LHQuY2hlY2tPbj0h
IW8udmFsdWUsdC5vcHRTZWxlY3RlZD11LnNlbGVjdGVkLHQuZW5jdHlwZT0hIWEuY3JlYXRlRWxl
bWVudCgiZm9ybSIpLmVuY3R5cGUsdC5odG1sNUNsb25lPSI8Om5hdj48LzpuYXY+IiE9PWEuY3Jl
YXRlRWxlbWVudCgibmF2IikuY2xvbmVOb2RlKCEwKS5vdXRlckhUTUwsdC5pbmxpbmVCbG9ja05l
ZWRzTGF5b3V0PSExLHQuc2hyaW5rV3JhcEJsb2Nrcz0hMSx0LnBpeGVsUG9zaXRpb249ITEsdC5k
ZWxldGVFeHBhbmRvPSEwLHQubm9DbG9uZUV2ZW50PSEwLHQucmVsaWFibGVNYXJnaW5SaWdodD0h
MCx0LmJveFNpemluZ1JlbGlhYmxlPSEwLG8uY2hlY2tlZD0hMCx0Lm5vQ2xvbmVDaGVja2VkPW8u
Y2xvbmVOb2RlKCEwKS5jaGVja2VkLHMuZGlzYWJsZWQ9ITAsdC5vcHREaXNhYmxlZD0hdS5kaXNh
YmxlZDt0cnl7ZGVsZXRlIGQudGVzdH1jYXRjaChoKXt0LmRlbGV0ZUV4cGFuZG89ITF9bz1hLmNy
ZWF0ZUVsZW1lbnQoImlucHV0Iiksby5zZXRBdHRyaWJ1dGUoInZhbHVlIiwiIiksdC5pbnB1dD0i
Ij09PW8uZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpLG8udmFsdWU9InQiLG8uc2V0QXR0cmlidXRlKCJ0
eXBlIiwicmFkaW8iKSx0LnJhZGlvVmFsdWU9InQiPT09by52YWx1ZSxvLnNldEF0dHJpYnV0ZSgi
Y2hlY2tlZCIsInQiKSxvLnNldEF0dHJpYnV0ZSgibmFtZSIsInQiKSxsPWEuY3JlYXRlRG9jdW1l
bnRGcmFnbWVudCgpLGwuYXBwZW5kQ2hpbGQobyksdC5hcHBlbmRDaGVja2VkPW8uY2hlY2tlZCx0
LmNoZWNrQ2xvbmU9bC5jbG9uZU5vZGUoITApLmNsb25lTm9kZSghMCkubGFzdENoaWxkLmNoZWNr
ZWQsZC5hdHRhY2hFdmVudCYmKGQuYXR0YWNoRXZlbnQoIm9uY2xpY2siLGZ1bmN0aW9uKCl7dC5u
b0Nsb25lRXZlbnQ9ITF9KSxkLmNsb25lTm9kZSghMCkuY2xpY2soKSk7Zm9yKGYgaW57c3VibWl0
OiEwLGNoYW5nZTohMCxmb2N1c2luOiEwfSlkLnNldEF0dHJpYnV0ZShjPSJvbiIrZiwidCIpLHRb
ZisiQnViYmxlcyJdPWMgaW4gZXx8ZC5hdHRyaWJ1dGVzW2NdLmV4cGFuZG89PT0hMTtkLnN0eWxl
LmJhY2tncm91bmRDbGlwPSJjb250ZW50LWJveCIsZC5jbG9uZU5vZGUoITApLnN0eWxlLmJhY2tn
cm91bmRDbGlwPSIiLHQuY2xlYXJDbG9uZVN0eWxlPSJjb250ZW50LWJveCI9PT1kLnN0eWxlLmJh
Y2tncm91bmRDbGlwO2ZvcihmIGluIHgodCkpYnJlYWs7cmV0dXJuIHQub3duTGFzdD0iMCIhPT1m
LHgoZnVuY3Rpb24oKXt2YXIgbixyLG8scz0icGFkZGluZzowO21hcmdpbjowO2JvcmRlcjowO2Rp
c3BsYXk6YmxvY2s7Ym94LXNpemluZzpjb250ZW50LWJveDstbW96LWJveC1zaXppbmc6Y29udGVu
dC1ib3g7LXdlYmtpdC1ib3gtc2l6aW5nOmNvbnRlbnQtYm94OyIsbD1hLmdldEVsZW1lbnRzQnlU
YWdOYW1lKCJib2R5IilbMF07bCYmKG49YS5jcmVhdGVFbGVtZW50KCJkaXYiKSxuLnN0eWxlLmNz
c1RleHQ9ImJvcmRlcjowO3dpZHRoOjA7aGVpZ2h0OjA7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7
bGVmdDotOTk5OXB4O21hcmdpbi10b3A6MXB4IixsLmFwcGVuZENoaWxkKG4pLmFwcGVuZENoaWxk
KGQpLGQuaW5uZXJIVE1MPSI8dGFibGU+PHRyPjx0ZD48L3RkPjx0ZD50PC90ZD48L3RyPjwvdGFi
bGU+IixvPWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIiksb1swXS5zdHlsZS5jc3NUZXh0PSJw
YWRkaW5nOjA7bWFyZ2luOjA7Ym9yZGVyOjA7ZGlzcGxheTpub25lIixwPTA9PT1vWzBdLm9mZnNl
dEhlaWdodCxvWzBdLnN0eWxlLmRpc3BsYXk9IiIsb1sxXS5zdHlsZS5kaXNwbGF5PSJub25lIix0
LnJlbGlhYmxlSGlkZGVuT2Zmc2V0cz1wJiYwPT09b1swXS5vZmZzZXRIZWlnaHQsZC5pbm5lckhU
TUw9IiIsZC5zdHlsZS5jc3NUZXh0PSJib3gtc2l6aW5nOmJvcmRlci1ib3g7LW1vei1ib3gtc2l6
aW5nOmJvcmRlci1ib3g7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzoxcHg7
Ym9yZGVyOjFweDtkaXNwbGF5OmJsb2NrO3dpZHRoOjRweDttYXJnaW4tdG9wOjElO3Bvc2l0aW9u
OmFic29sdXRlO3RvcDoxJTsiLHguc3dhcChsLG51bGwhPWwuc3R5bGUuem9vbT97em9vbToxfTp7
fSxmdW5jdGlvbigpe3QuYm94U2l6aW5nPTQ9PT1kLm9mZnNldFdpZHRofSksZS5nZXRDb21wdXRl
ZFN0eWxlJiYodC5waXhlbFBvc2l0aW9uPSIxJSIhPT0oZS5nZXRDb21wdXRlZFN0eWxlKGQsbnVs
bCl8fHt9KS50b3AsdC5ib3hTaXppbmdSZWxpYWJsZT0iNHB4Ij09PShlLmdldENvbXB1dGVkU3R5
bGUoZCxudWxsKXx8e3dpZHRoOiI0cHgifSkud2lkdGgscj1kLmFwcGVuZENoaWxkKGEuY3JlYXRl
RWxlbWVudCgiZGl2IikpLHIuc3R5bGUuY3NzVGV4dD1kLnN0eWxlLmNzc1RleHQ9cyxyLnN0eWxl
Lm1hcmdpblJpZ2h0PXIuc3R5bGUud2lkdGg9IjAiLGQuc3R5bGUud2lkdGg9IjFweCIsdC5yZWxp
YWJsZU1hcmdpblJpZ2h0PSFwYXJzZUZsb2F0KChlLmdldENvbXB1dGVkU3R5bGUocixudWxsKXx8
e30pLm1hcmdpblJpZ2h0KSksdHlwZW9mIGQuc3R5bGUuem9vbSE9PWkmJihkLmlubmVySFRNTD0i
IixkLnN0eWxlLmNzc1RleHQ9cysid2lkdGg6MXB4O3BhZGRpbmc6MXB4O2Rpc3BsYXk6aW5saW5l
O3pvb206MSIsdC5pbmxpbmVCbG9ja05lZWRzTGF5b3V0PTM9PT1kLm9mZnNldFdpZHRoLGQuc3R5
bGUuZGlzcGxheT0iYmxvY2siLGQuaW5uZXJIVE1MPSI8ZGl2PjwvZGl2PiIsZC5maXJzdENoaWxk
LnN0eWxlLndpZHRoPSI1cHgiLHQuc2hyaW5rV3JhcEJsb2Nrcz0zIT09ZC5vZmZzZXRXaWR0aCx0
LmlubGluZUJsb2NrTmVlZHNMYXlvdXQmJihsLnN0eWxlLnpvb209MSkpLGwucmVtb3ZlQ2hpbGQo
biksbj1kPW89cj1udWxsKX0pLG49cz1sPXU9cj1vPW51bGwsdAorK30oe30pO3ZhciBCPS8oPzpc
e1tcc1xTXSpcfXxcW1tcc1xTXSpcXSkkLyxQPS8oW0EtWl0pL2c7ZnVuY3Rpb24gUihlLG4scixp
KXtpZih4LmFjY2VwdERhdGEoZSkpe3ZhciBvLGEscz14LmV4cGFuZG8sbD1lLm5vZGVUeXBlLHU9
bD94LmNhY2hlOmUsYz1sP2Vbc106ZVtzXSYmcztpZihjJiZ1W2NdJiYoaXx8dVtjXS5kYXRhKXx8
ciE9PXR8fCJzdHJpbmciIT10eXBlb2YgbilyZXR1cm4gY3x8KGM9bD9lW3NdPXAucG9wKCl8fHgu
Z3VpZCsrOnMpLHVbY118fCh1W2NdPWw/e306e3RvSlNPTjp4Lm5vb3B9KSwoIm9iamVjdCI9PXR5
cGVvZiBufHwiZnVuY3Rpb24iPT10eXBlb2YgbikmJihpP3VbY109eC5leHRlbmQodVtjXSxuKTp1
W2NdLmRhdGE9eC5leHRlbmQodVtjXS5kYXRhLG4pKSxhPXVbY10saXx8KGEuZGF0YXx8KGEuZGF0
YT17fSksYT1hLmRhdGEpLHIhPT10JiYoYVt4LmNhbWVsQ2FzZShuKV09ciksInN0cmluZyI9PXR5
cGVvZiBuPyhvPWFbbl0sbnVsbD09byYmKG89YVt4LmNhbWVsQ2FzZShuKV0pKTpvPWEsb319ZnVu
Y3Rpb24gVyhlLHQsbil7aWYoeC5hY2NlcHREYXRhKGUpKXt2YXIgcixpLG89ZS5ub2RlVHlwZSxh
PW8/eC5jYWNoZTplLHM9bz9lW3guZXhwYW5kb106eC5leHBhbmRvO2lmKGFbc10pe2lmKHQmJihy
PW4/YVtzXTphW3NdLmRhdGEpKXt4LmlzQXJyYXkodCk/dD10LmNvbmNhdCh4Lm1hcCh0LHguY2Ft
ZWxDYXNlKSk6dCBpbiByP3Q9W3RdOih0PXguY2FtZWxDYXNlKHQpLHQ9dCBpbiByP1t0XTp0LnNw
bGl0KCIgIikpLGk9dC5sZW5ndGg7d2hpbGUoaS0tKWRlbGV0ZSByW3RbaV1dO2lmKG4/IUkocik6
IXguaXNFbXB0eU9iamVjdChyKSlyZXR1cm59KG58fChkZWxldGUgYVtzXS5kYXRhLEkoYVtzXSkp
KSYmKG8/eC5jbGVhbkRhdGEoW2VdLCEwKTp4LnN1cHBvcnQuZGVsZXRlRXhwYW5kb3x8YSE9YS53
aW5kb3c/ZGVsZXRlIGFbc106YVtzXT1udWxsKX19fXguZXh0ZW5kKHtjYWNoZTp7fSxub0RhdGE6
e2FwcGxldDohMCxlbWJlZDohMCxvYmplY3Q6ImNsc2lkOkQyN0NEQjZFLUFFNkQtMTFjZi05NkI4
LTQ0NDU1MzU0MDAwMCJ9LGhhc0RhdGE6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZS5ub2RlVHlwZT94
LmNhY2hlW2VbeC5leHBhbmRvXV06ZVt4LmV4cGFuZG9dLCEhZSYmIUkoZSl9LGRhdGE6ZnVuY3Rp
b24oZSx0LG4pe3JldHVybiBSKGUsdCxuKX0scmVtb3ZlRGF0YTpmdW5jdGlvbihlLHQpe3JldHVy
biBXKGUsdCl9LF9kYXRhOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gUihlLHQsbiwhMCl9LF9yZW1v
dmVEYXRhOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIFcoZSx0LCEwKX0sYWNjZXB0RGF0YTpmdW5jdGlv
bihlKXtpZihlLm5vZGVUeXBlJiYxIT09ZS5ub2RlVHlwZSYmOSE9PWUubm9kZVR5cGUpcmV0dXJu
ITE7dmFyIHQ9ZS5ub2RlTmFtZSYmeC5ub0RhdGFbZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXTty
ZXR1cm4hdHx8dCE9PSEwJiZlLmdldEF0dHJpYnV0ZSgiY2xhc3NpZCIpPT09dH19KSx4LmZuLmV4
dGVuZCh7ZGF0YTpmdW5jdGlvbihlLG4pe3ZhciByLGksbz1udWxsLGE9MCxzPXRoaXNbMF07aWYo
ZT09PXQpe2lmKHRoaXMubGVuZ3RoJiYobz14LmRhdGEocyksMT09PXMubm9kZVR5cGUmJiF4Ll9k
YXRhKHMsInBhcnNlZEF0dHJzIikpKXtmb3Iocj1zLmF0dHJpYnV0ZXM7ci5sZW5ndGg+YTthKysp
aT1yW2FdLm5hbWUsMD09PWkuaW5kZXhPZigiZGF0YS0iKSYmKGk9eC5jYW1lbENhc2UoaS5zbGlj
ZSg1KSksJChzLGksb1tpXSkpO3guX2RhdGEocywicGFyc2VkQXR0cnMiLCEwKX1yZXR1cm4gb31y
ZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGU/dGhpcy5lYWNoKGZ1bmN0aW9uKCl7eC5kYXRhKHRoaXMs
ZSl9KTphcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKGZ1bmN0aW9uKCl7eC5kYXRhKHRoaXMs
ZSxuKX0pOnM/JChzLGUseC5kYXRhKHMsZSkpOm51bGx9LHJlbW92ZURhdGE6ZnVuY3Rpb24oZSl7
cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3gucmVtb3ZlRGF0YSh0aGlzLGUpfSl9fSk7ZnVu
Y3Rpb24gJChlLG4scil7aWYocj09PXQmJjE9PT1lLm5vZGVUeXBlKXt2YXIgaT0iZGF0YS0iK24u
cmVwbGFjZShQLCItJDEiKS50b0xvd2VyQ2FzZSgpO2lmKHI9ZS5nZXRBdHRyaWJ1dGUoaSksInN0
cmluZyI9PXR5cGVvZiByKXt0cnl7cj0idHJ1ZSI9PT1yPyEwOiJmYWxzZSI9PT1yPyExOiJudWxs
Ij09PXI/bnVsbDorcisiIj09PXI/K3I6Qi50ZXN0KHIpP3gucGFyc2VKU09OKHIpOnJ9Y2F0Y2go
byl7fXguZGF0YShlLG4scil9ZWxzZSByPXR9cmV0dXJuIHJ9ZnVuY3Rpb24gSShlKXt2YXIgdDtm
b3IodCBpbiBlKWlmKCgiZGF0YSIhPT10fHwheC5pc0VtcHR5T2JqZWN0KGVbdF0pKSYmInRvSlNP
TiIhPT10KXJldHVybiExO3JldHVybiEwfXguZXh0ZW5kKHtxdWV1ZTpmdW5jdGlvbihlLG4scil7
dmFyIGk7cmV0dXJuIGU/KG49KG58fCJmeCIpKyJxdWV1ZSIsaT14Ll9kYXRhKGUsbiksciYmKCFp
fHx4LmlzQXJyYXkocik/aT14Ll9kYXRhKGUsbix4Lm1ha2VBcnJheShyKSk6aS5wdXNoKHIpKSxp
fHxbXSk6dH0sZGVxdWV1ZTpmdW5jdGlvbihlLHQpe3Q9dHx8ImZ4Ijt2YXIgbj14LnF1ZXVlKGUs
dCkscj1uLmxlbmd0aCxpPW4uc2hpZnQoKSxvPXguX3F1ZXVlSG9va3MoZSx0KSxhPWZ1bmN0aW9u
KCl7eC5kZXF1ZXVlKGUsdCl9OyJpbnByb2dyZXNzIj09PWkmJihpPW4uc2hpZnQoKSxyLS0pLGkm
JigiZngiPT09dCYmbi51bnNoaWZ0KCJpbnByb2dyZXNzIiksZGVsZXRlIG8uc3RvcCxpLmNhbGwo
ZSxhLG8pKSwhciYmbyYmby5lbXB0eS5maXJlKCl9LF9xdWV1ZUhvb2tzOmZ1bmN0aW9uKGUsdCl7
dmFyIG49dCsicXVldWVIb29rcyI7cmV0dXJuIHguX2RhdGEoZSxuKXx8eC5fZGF0YShlLG4se2Vt
cHR5OnguQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLmFkZChmdW5jdGlvbigpe3guX3JlbW92ZURh
dGEoZSx0KyJxdWV1ZSIpLHguX3JlbW92ZURhdGEoZSxuKX0pfSl9fSkseC5mbi5leHRlbmQoe3F1
ZXVlOmZ1bmN0aW9uKGUsbil7dmFyIHI9MjtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGUmJihuPWUs
ZT0iZngiLHItLSkscj5hcmd1bWVudHMubGVuZ3RoP3gucXVldWUodGhpc1swXSxlKTpuPT09dD90
aGlzOnRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciB0PXgucXVldWUodGhpcyxlLG4pO3guX3F1ZXVl
SG9va3ModGhpcyxlKSwiZngiPT09ZSYmImlucHJvZ3Jlc3MiIT09dFswXSYmeC5kZXF1ZXVlKHRo
aXMsZSl9KX0sZGVxdWV1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7
eC5kZXF1ZXVlKHRoaXMsZSl9KX0sZGVsYXk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT14LmZ4P3gu
Znguc3BlZWRzW2VdfHxlOmUsdD10fHwiZngiLHRoaXMucXVldWUodCxmdW5jdGlvbih0LG4pe3Zh
ciByPXNldFRpbWVvdXQodCxlKTtuLnN0b3A9ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQocil9fSl9
LGNsZWFyUXVldWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucXVldWUoZXx8ImZ4IixbXSl9LHBy
b21pc2U6ZnVuY3Rpb24oZSxuKXt2YXIgcixpPTEsbz14LkRlZmVycmVkKCksYT10aGlzLHM9dGhp
cy5sZW5ndGgsbD1mdW5jdGlvbigpey0taXx8by5yZXNvbHZlV2l0aChhLFthXSl9OyJzdHJpbmci
IT10eXBlb2YgZSYmKG49ZSxlPXQpLGU9ZXx8ImZ4Ijt3aGlsZShzLS0pcj14Ll9kYXRhKGFbc10s
ZSsicXVldWVIb29rcyIpLHImJnIuZW1wdHkmJihpKyssci5lbXB0eS5hZGQobCkpO3JldHVybiBs
KCksby5wcm9taXNlKG4pfX0pO3ZhciB6LFgsVT0vW1x0XHJcblxmXS9nLFY9L1xyL2csWT0vXig/
OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b258b2JqZWN0KSQvaSxKPS9eKD86YXxhcmVhKSQv
aSxHPS9eKD86Y2hlY2tlZHxzZWxlY3RlZCkkL2ksUT14LnN1cHBvcnQuZ2V0U2V0QXR0cmlidXRl
LEs9eC5zdXBwb3J0LmlucHV0O3guZm4uZXh0ZW5kKHthdHRyOmZ1bmN0aW9uKGUsdCl7cmV0dXJu
IHguYWNjZXNzKHRoaXMseC5hdHRyLGUsdCxhcmd1bWVudHMubGVuZ3RoPjEpfSxyZW1vdmVBdHRy
OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt4LnJlbW92ZUF0dHIodGhp
cyxlKX0pfSxwcm9wOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHguYWNjZXNzKHRoaXMseC5wcm9wLGUs
dCxhcmd1bWVudHMubGVuZ3RoPjEpfSxyZW1vdmVQcm9wOmZ1bmN0aW9uKGUpe3JldHVybiBlPXgu
cHJvcEZpeFtlXXx8ZSx0aGlzLmVhY2goZnVuY3Rpb24oKXt0cnl7dGhpc1tlXT10LGRlbGV0ZSB0
aGlzW2VdfWNhdGNoKG4pe319KX0sYWRkQ2xhc3M6ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGksbyxh
PTAscz10aGlzLmxlbmd0aCxsPSJzdHJpbmciPT10eXBlb2YgZSYmZTtpZih4LmlzRnVuY3Rpb24o
ZSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbih0KXt4KHRoaXMpLmFkZENsYXNzKGUuY2FsbCh0
aGlzLHQsdGhpcy5jbGFzc05hbWUpKX0pO2lmKGwpZm9yKHQ9KGV8fCIiKS5tYXRjaChUKXx8W107
cz5hO2ErKylpZihuPXRoaXNbYV0scj0xPT09bi5ub2RlVHlwZSYmKG4uY2xhc3NOYW1lPygiICIr
bi5jbGFzc05hbWUrIiAiKS5yZXBsYWNlKFUsIiAiKToiICIpKXtvPTA7d2hpbGUoaT10W28rK10p
MD5yLmluZGV4T2YoIiAiK2krIiAiKSYmKHIrPWkrIiAiKTtuLmNsYXNzTmFtZT14LnRyaW0ocil9
cmV0dXJuIHRoaXN9LHJlbW92ZUNsYXNzOmZ1bmN0aW9uKGUpe3ZhciB0LG4scixpLG8sYT0wLHM9
dGhpcy5sZW5ndGgsbD0wPT09YXJndW1lbnRzLmxlbmd0aHx8InN0cmluZyI9PXR5cGVvZiBlJiZl
O2lmKHguaXNGdW5jdGlvbihlKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKHQpe3godGhpcyku
cmVtb3ZlQ2xhc3MoZS5jYWxsKHRoaXMsdCx0aGlzLmNsYXNzTmFtZSkpfSk7aWYobClmb3IodD0o
ZXx8IiIpLm1hdGNoKFQpfHxbXTtzPmE7YSsrKWlmKG49dGhpc1thXSxyPTE9PT1uLm5vZGVUeXBl
JiYobi5jbGFzc05hbWU/KCIgIituLmNsYXNzTmFtZSsiICIpLnJlcGxhY2UoVSwiICIpOiIiKSl7
bz0wO3doaWxlKGk9dFtvKytdKXdoaWxlKHIuaW5kZXhPZigiICIraSsiICIpPj0wKXI9ci5yZXBs
YWNlKCIgIitpKyIgIiwiICIpO24uY2xhc3NOYW1lPWU/eC50cmltKHIpOiIifXJldHVybiB0aGlz
fSx0b2dnbGVDbGFzczpmdW5jdGlvbihlLHQpe3ZhciBuPXR5cGVvZiBlO3JldHVybiJib29sZWFu
Ij09dHlwZW9mIHQmJiJzdHJpbmciPT09bj90P3RoaXMuYWRkQ2xhc3MoZSk6dGhpcy5yZW1vdmVD
bGFzcyhlKTp4LmlzRnVuY3Rpb24oZSk/dGhpcy5lYWNoKGZ1bmN0aW9uKG4pe3godGhpcykudG9n
Z2xlQ2xhc3MoZS5jYWxsKHRoaXMsbix0aGlzLmNsYXNzTmFtZSx0KSx0KX0pOnRoaXMuZWFjaChm
dW5jdGlvbigpe2lmKCJzdHJpbmciPT09bil7dmFyIHQscj0wLG89eCh0aGlzKSxhPWUubWF0Y2go
VCl8fFtdO3doaWxlKHQ9YVtyKytdKW8uaGFzQ2xhc3ModCk/by5yZW1vdmVDbGFzcyh0KTpvLmFk
ZENsYXNzKHQpfWVsc2Uobj09PWl8fCJib29sZWFuIj09PW4pJiYodGhpcy5jbGFzc05hbWUmJngu
X2RhdGEodGhpcywiX19jbGFzc05hbWVfXyIsdGhpcy5jbGFzc05hbWUpLHRoaXMuY2xhc3NOYW1l
PXRoaXMuY2xhc3NOYW1lfHxlPT09ITE/IiI6eC5fZGF0YSh0aGlzLCJfX2NsYXNzTmFtZV9fIil8
fCIiKX0pfSxoYXNDbGFzczpmdW5jdGlvbihlKXt2YXIgdD0iICIrZSsiICIsbj0wLHI9dGhpcy5s
ZW5ndGg7Zm9yKDtyPm47bisrKWlmKDE9PT10aGlzW25dLm5vZGVUeXBlJiYoIiAiK3RoaXNbbl0u
Y2xhc3NOYW1lKyIgIikucmVwbGFjZShVLCIgIikuaW5kZXhPZih0KT49MClyZXR1cm4hMDtyZXR1
cm4hMX0sdmFsOmZ1bmN0aW9uKGUpe3ZhciBuLHIsaSxvPXRoaXNbMF07e2lmKGFyZ3VtZW50cy5s
ZW5ndGgpcmV0dXJuIGk9eC5pc0Z1bmN0aW9uKGUpLHRoaXMuZWFjaChmdW5jdGlvbihuKXt2YXIg
bzsxPT09dGhpcy5ub2RlVHlwZSYmKG89aT9lLmNhbGwodGhpcyxuLHgodGhpcykudmFsKCkpOmUs
bnVsbD09bz9vPSIiOiJudW1iZXIiPT10eXBlb2Ygbz9vKz0iIjp4LmlzQXJyYXkobykmJihvPXgu
bWFwKG8sZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWU/IiI6ZSsiIn0pKSxyPXgudmFsSG9va3Nb
dGhpcy50eXBlXXx8eC52YWxIb29rc1t0aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldLHImJiJz
ZXQiaW4gciYmci5zZXQodGhpcyxvLCJ2YWx1ZSIpIT09dHx8KHRoaXMudmFsdWU9bykpfSk7aWYo
bylyZXR1cm4gcj14LnZhbEhvb2tzW28udHlwZV18fHgudmFsSG9va3Nbby5ub2RlTmFtZS50b0xv
d2VyQ2FzZSgpXSxyJiYiZ2V0ImluIHImJihuPXIuZ2V0KG8sInZhbHVlIikpIT09dD9uOihuPW8u
dmFsdWUsInN0cmluZyI9PXR5cGVvZiBuP24ucmVwbGFjZShWLCIiKTpudWxsPT1uPyIiOm4pfX19
KSx4LmV4dGVuZCh7dmFsSG9va3M6e29wdGlvbjp7Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0PXguZmlu
ZC5hdHRyKGUsInZhbHVlIik7cmV0dXJuIG51bGwhPXQ/dDplLnRleHR9fSxzZWxlY3Q6e2dldDpm
dW5jdGlvbihlKXt2YXIgdCxuLHI9ZS5vcHRpb25zLGk9ZS5zZWxlY3RlZEluZGV4LG89InNlbGVj
dC1vbmUiPT09ZS50eXBlfHwwPmksYT1vP251bGw6W10scz1vP2krMTpyLmxlbmd0aCxsPTA+aT9z
Om8/aTowO2Zvcig7cz5sO2wrKylpZihuPXJbbF0sISghbi5zZWxlY3RlZCYmbCE9PWl8fCh4LnN1
cHBvcnQub3B0RGlzYWJsZWQ/bi5kaXNhYmxlZDpudWxsIT09bi5nZXRBdHRyaWJ1dGUoImRpc2Fi
bGVkIikpfHxuLnBhcmVudE5vZGUuZGlzYWJsZWQmJngubm9kZU5hbWUobi5wYXJlbnROb2RlLCJv
cHRncm91cCIpKSl7aWYodD14KG4pLnZhbCgpLG8pcmV0dXJuIHQ7YS5wdXNoKHQpfXJldHVybiBh
fSxzZXQ6ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGk9ZS5vcHRpb25zLG89eC5tYWtlQXJyYXkodCks
YT1pLmxlbmd0aDt3aGlsZShhLS0pcj1pW2FdLChyLnNlbGVjdGVkPXguaW5BcnJheSh4KHIpLnZh
bCgpLG8pPj0wKSYmKG49ITApO3JldHVybiBufHwoZS5zZWxlY3RlZEluZGV4PS0xKSxvfX19LGF0
dHI6ZnVuY3Rpb24oZSxuLHIpe3ZhciBvLGEscz1lLm5vZGVUeXBlO2lmKGUmJjMhPT1zJiY4IT09
cyYmMiE9PXMpcmV0dXJuIHR5cGVvZiBlLmdldEF0dHJpYnV0ZT09PWk/eC5wcm9wKGUsbixyKToo
MT09PXMmJnguaXNYTUxEb2MoZSl8fChuPW4udG9Mb3dlckNhc2UoKSxvPXguYXR0ckhvb2tzW25d
fHwoeC5leHByLm1hdGNoLmJvb2wudGVzdChuKT9YOnopKSxyPT09dD9vJiYiZ2V0ImluIG8mJm51
bGwhPT0oYT1vLmdldChlLG4pKT9hOihhPXguZmluZC5hdHRyKGUsbiksbnVsbD09YT90OmEpOm51
bGwhPT1yP28mJiJzZXQiaW4gbyYmKGE9by5zZXQoZSxyLG4pKSE9PXQ/YTooZS5zZXRBdHRyaWJ1
dGUobixyKyIiKSxyKTooeC5yZW1vdmVBdHRyKGUsbiksdCkpfSxyZW1vdmVBdHRyOmZ1bmN0aW9u
KGUsdCl7dmFyIG4scixpPTAsbz10JiZ0Lm1hdGNoKFQpO2lmKG8mJjE9PT1lLm5vZGVUeXBlKXdo
aWxlKG49b1tpKytdKXI9eC5wcm9wRml4W25dfHxuLHguZXhwci5tYXRjaC5ib29sLnRlc3Qobik/
SyYmUXx8IUcudGVzdChuKT9lW3JdPSExOmVbeC5jYW1lbENhc2UoImRlZmF1bHQtIituKV09ZVty
XT0hMTp4LmF0dHIoZSxuLCIiKSxlLnJlbW92ZUF0dHJpYnV0ZShRP246cil9LGF0dHJIb29rczp7
dHlwZTp7c2V0OmZ1bmN0aW9uKGUsdCl7aWYoIXguc3VwcG9ydC5yYWRpb1ZhbHVlJiYicmFkaW8i
PT09dCYmeC5ub2RlTmFtZShlLCJpbnB1dCIpKXt2YXIgbj1lLnZhbHVlO3JldHVybiBlLnNldEF0
dHJpYnV0ZSgidHlwZSIsdCksbiYmKGUudmFsdWU9biksdH19fX0scHJvcEZpeDp7ImZvciI6Imh0
bWxGb3IiLCJjbGFzcyI6ImNsYXNzTmFtZSJ9LHByb3A6ZnVuY3Rpb24oZSxuLHIpe3ZhciBpLG8s
YSxzPWUubm9kZVR5cGU7aWYoZSYmMyE9PXMmJjghPT1zJiYyIT09cylyZXR1cm4gYT0xIT09c3x8
IXguaXNYTUxEb2MoZSksYSYmKG49eC5wcm9wRml4W25dfHxuLG89eC5wcm9wSG9va3Nbbl0pLHIh
PT10P28mJiJzZXQiaW4gbyYmKGk9by5zZXQoZSxyLG4pKSE9PXQ/aTplW25dPXI6byYmImdldCJp
biBvJiZudWxsIT09KGk9by5nZXQoZSxuKSk/aTplW25dfSxwcm9wSG9va3M6e3RhYkluZGV4Ontn
ZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9eC5maW5kLmF0dHIoZSwidGFiaW5kZXgiKTtyZXR1cm4gdD9w
YXJzZUludCh0LDEwKTpZLnRlc3QoZS5ub2RlTmFtZSl8fEoudGVzdChlLm5vZGVOYW1lKSYmZS5o
cmVmPzA6LTF9fX19KSxYPXtzZXQ6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0PT09ITE/eC5yZW1v
dmVBdHRyKGUsbik6SyYmUXx8IUcudGVzdChuKT9lLnNldEF0dHJpYnV0ZSghUSYmeC5wcm9wRml4
W25dfHxuLG4pOmVbeC5jYW1lbENhc2UoImRlZmF1bHQtIituKV09ZVtuXT0hMCxufX0seC5lYWNo
KHguZXhwci5tYXRjaC5ib29sLnNvdXJjZS5tYXRjaCgvXHcrL2cpLGZ1bmN0aW9uKGUsbil7dmFy
IHI9eC5leHByLmF0dHJIYW5kbGVbbl18fHguZmluZC5hdHRyO3guZXhwci5hdHRySGFuZGxlW25d
PUsmJlF8fCFHLnRlc3Qobik/ZnVuY3Rpb24oZSxuLGkpe3ZhciBvPXguZXhwci5hdHRySGFuZGxl
W25dLGE9aT90Oih4LmV4cHIuYXR0ckhhbmRsZVtuXT10KSE9cihlLG4saSk/bi50b0xvd2VyQ2Fz
ZSgpOm51bGw7cmV0dXJuIHguZXhwci5hdHRySGFuZGxlW25dPW8sYX06ZnVuY3Rpb24oZSxuLHIp
e3JldHVybiByP3Q6ZVt4LmNhbWVsQ2FzZSgiZGVmYXVsdC0iK24pXT9uLnRvTG93ZXJDYXNlKCk6
bnVsbH19KSxLJiZRfHwoeC5hdHRySG9va3MudmFsdWU9e3NldDpmdW5jdGlvbihlLG4scil7cmV0
dXJuIHgubm9kZU5hbWUoZSwiaW5wdXQiKT8oZS5kZWZhdWx0VmFsdWU9bix0KTp6JiZ6LnNldChl
LG4scil9fSksUXx8KHo9e3NldDpmdW5jdGlvbihlLG4scil7dmFyIGk9ZS5nZXRBdHRyaWJ1dGVO
b2RlKHIpO3JldHVybiBpfHxlLnNldEF0dHJpYnV0ZU5vZGUoaT1lLm93bmVyRG9jdW1lbnQuY3Jl
YXRlQXR0cmlidXRlKHIpKSxpLnZhbHVlPW4rPSIiLCJ2YWx1ZSI9PT1yfHxuPT09ZS5nZXRBdHRy
aWJ1dGUocik/bjp0fX0seC5leHByLmF0dHJIYW5kbGUuaWQ9eC5leHByLmF0dHJIYW5kbGUubmFt
ZT14LmV4cHIuYXR0ckhhbmRsZS5jb29yZHM9ZnVuY3Rpb24oZSxuLHIpe3ZhciBpO3JldHVybiBy
P3Q6KGk9ZS5nZXRBdHRyaWJ1dGVOb2RlKG4pKSYmIiIhPT1pLnZhbHVlP2kudmFsdWU6bnVsbH0s
eC52YWxIb29rcy5idXR0b249e2dldDpmdW5jdGlvbihlLG4pe3ZhciByPWUuZ2V0QXR0cmlidXRl
Tm9kZShuKTtyZXR1cm4gciYmci5zcGVjaWZpZWQ/ci52YWx1ZTp0fSxzZXQ6ei5zZXR9LHguYXR0
ckhvb2tzLmNvbnRlbnRlZGl0YWJsZT17c2V0OmZ1bmN0aW9uKGUsdCxuKXt6LnNldChlLCIiPT09
dD8hMTp0LG4pfX0seC5lYWNoKFsid2lkdGgiLCJoZWlnaHQiXSxmdW5jdGlvbihlLG4pe3guYXR0
ckhvb2tzW25dPXtzZXQ6ZnVuY3Rpb24oZSxyKXtyZXR1cm4iIj09PXI/KGUuc2V0QXR0cmlidXRl
KG4sImF1dG8iKSxyKTp0fX19KSkseC5zdXBwb3J0LmhyZWZOb3JtYWxpemVkfHx4LmVhY2goWyJo
cmVmIiwic3JjIl0sZnVuY3Rpb24oZSx0KXt4LnByb3BIb29rc1t0XT17Z2V0OmZ1bmN0aW9uKGUp
e3JldHVybiBlLmdldEF0dHJpYnV0ZSh0LDQpfX19KSx4LnN1cHBvcnQuc3R5bGV8fCh4LmF0dHJI
b29rcy5zdHlsZT17Z2V0OmZ1bmN0aW9uKGUpe3JldHVybiBlLnN0eWxlLmNzc1RleHR8fHR9LHNl
dDpmdW5jdGlvbihlLHQpe3JldHVybiBlLnN0eWxlLmNzc1RleHQ9dCsiIn19KSx4LnN1cHBvcnQu
b3B0U2VsZWN0ZWR8fCh4LnByb3BIb29rcy5zZWxlY3RlZD17Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0
PWUucGFyZW50Tm9kZTtyZXR1cm4gdCYmKHQuc2VsZWN0ZWRJbmRleCx0LnBhcmVudE5vZGUmJnQu
cGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4KSxudWxsfX0pLHguZWFjaChbInRhYkluZGV4IiwicmVh
ZE9ubHkiLCJtYXhMZW5ndGgiLCJjZWxsU3BhY2luZyIsImNlbGxQYWRkaW5nIiwicm93U3BhbiIs
ImNvbFNwYW4iLCJ1c2VNYXAiLCJmcmFtZUJvcmRlciIsImNvbnRlbnRFZGl0YWJsZSJdLGZ1bmN0
aW9uKCl7eC5wcm9wRml4W3RoaXMudG9Mb3dlckNhc2UoKV09dGhpc30pLHguc3VwcG9ydC5lbmN0
eXBlfHwoeC5wcm9wRml4LmVuY3R5cGU9ImVuY29kaW5nIikseC5lYWNoKFsicmFkaW8iLCJjaGVj
a2JveCJdLGZ1bmN0aW9uKCl7eC52YWxIb29rc1t0aGlzXT17c2V0OmZ1bmN0aW9uKGUsbil7cmV0
dXJuIHguaXNBcnJheShuKT9lLmNoZWNrZWQ9eC5pbkFycmF5KHgoZSkudmFsKCksbik+PTA6dH19
LHguc3VwcG9ydC5jaGVja09ufHwoeC52YWxIb29rc1t0aGlzXS5nZXQ9ZnVuY3Rpb24oZSl7cmV0
dXJuIG51bGw9PT1lLmdldEF0dHJpYnV0ZSgidmFsdWUiKT8ib24iOmUudmFsdWV9KX0pO3ZhciBa
PS9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhKSQvaSxldD0vXmtleS8sdHQ9L14oPzptb3VzZXxj
b250ZXh0bWVudSl8Y2xpY2svLG50PS9eKD86Zm9jdXNpbmZvY3VzfGZvY3Vzb3V0Ymx1cikkLyxy
dD0vXihbXi5dKikoPzpcLiguKyl8KSQvO2Z1bmN0aW9uIGl0KCl7cmV0dXJuITB9ZnVuY3Rpb24g
b3QoKXtyZXR1cm4hMX1mdW5jdGlvbiBhdCgpe3RyeXtyZXR1cm4gYS5hY3RpdmVFbGVtZW50fWNh
dGNoKGUpe319eC5ldmVudD17Z2xvYmFsOnt9LGFkZDpmdW5jdGlvbihlLG4scixvLGEpe3ZhciBz
LGwsdSxjLHAsZixkLGgsZyxtLHksdj14Ll9kYXRhKGUpO2lmKHYpe3IuaGFuZGxlciYmKGM9cixy
PWMuaGFuZGxlcixhPWMuc2VsZWN0b3IpLHIuZ3VpZHx8KHIuZ3VpZD14Lmd1aWQrKyksKGw9di5l
dmVudHMpfHwobD12LmV2ZW50cz17fSksKGY9di5oYW5kbGUpfHwoZj12LmhhbmRsZT1mdW5jdGlv
bihlKXtyZXR1cm4gdHlwZW9mIHg9PT1pfHxlJiZ4LmV2ZW50LnRyaWdnZXJlZD09PWUudHlwZT90
OnguZXZlbnQuZGlzcGF0Y2guYXBwbHkoZi5lbGVtLGFyZ3VtZW50cyl9LGYuZWxlbT1lKSxuPShu
fHwiIikubWF0Y2goVCl8fFsiIl0sdT1uLmxlbmd0aDt3aGlsZSh1LS0pcz1ydC5leGVjKG5bdV0p
fHxbXSxnPXk9c1sxXSxtPShzWzJdfHwiIikuc3BsaXQoIi4iKS5zb3J0KCksZyYmKHA9eC5ldmVu
dC5zcGVjaWFsW2ddfHx7fSxnPShhP3AuZGVsZWdhdGVUeXBlOnAuYmluZFR5cGUpfHxnLHA9eC5l
dmVudC5zcGVjaWFsW2ddfHx7fSxkPXguZXh0ZW5kKHt0eXBlOmcsb3JpZ1R5cGU6eSxkYXRhOm8s
aGFuZGxlcjpyLGd1aWQ6ci5ndWlkLHNlbGVjdG9yOmEsbmVlZHNDb250ZXh0OmEmJnguZXhwci5t
YXRjaC5uZWVkc0NvbnRleHQudGVzdChhKSxuYW1lc3BhY2U6bS5qb2luKCIuIil9LGMpLChoPWxb
Z10pfHwoaD1sW2ddPVtdLGguZGVsZWdhdGVDb3VudD0wLHAuc2V0dXAmJnAuc2V0dXAuY2FsbChl
LG8sbSxmKSE9PSExfHwoZS5hZGRFdmVudExpc3RlbmVyP2UuYWRkRXZlbnRMaXN0ZW5lcihnLGYs
ITEpOmUuYXR0YWNoRXZlbnQmJmUuYXR0YWNoRXZlbnQoIm9uIitnLGYpKSkscC5hZGQmJihwLmFk
ZC5jYWxsKGUsZCksZC5oYW5kbGVyLmd1aWR8fChkLmhhbmRsZXIuZ3VpZD1yLmd1aWQpKSxhP2gu
c3BsaWNlKGguZGVsZWdhdGVDb3VudCsrLDAsZCk6aC5wdXNoKGQpLHguZXZlbnQuZ2xvYmFsW2dd
PSEwKTtlPW51bGx9fSxyZW1vdmU6ZnVuY3Rpb24oZSx0LG4scixpKXt2YXIgbyxhLHMsbCx1LGMs
cCxmLGQsaCxnLG09eC5oYXNEYXRhKGUpJiZ4Ll9kYXRhKGUpO2lmKG0mJihjPW0uZXZlbnRzKSl7
dD0odHx8IiIpLm1hdGNoKFQpfHxbIiJdLHU9dC5sZW5ndGg7d2hpbGUodS0tKWlmKHM9cnQuZXhl
Yyh0W3VdKXx8W10sZD1nPXNbMV0saD0oc1syXXx8IiIpLnNwbGl0KCIuIikuc29ydCgpLGQpe3A9
eC5ldmVudC5zcGVjaWFsW2RdfHx7fSxkPShyP3AuZGVsZWdhdGVUeXBlOnAuYmluZFR5cGUpfHxk
LGY9Y1tkXXx8W10scz1zWzJdJiZSZWdFeHAoIihefFxcLikiK2guam9pbigiXFwuKD86LipcXC58
KSIpKyIoXFwufCQpIiksbD1vPWYubGVuZ3RoO3doaWxlKG8tLSlhPWZbb10sIWkmJmchPT1hLm9y
aWdUeXBlfHxuJiZuLmd1aWQhPT1hLmd1aWR8fHMmJiFzLnRlc3QoYS5uYW1lc3BhY2UpfHxyJiZy
IT09YS5zZWxlY3RvciYmKCIqKiIhPT1yfHwhYS5zZWxlY3Rvcil8fChmLnNwbGljZShvLDEpLGEu
c2VsZWN0b3ImJmYuZGVsZWdhdGVDb3VudC0tLHAucmVtb3ZlJiZwLnJlbW92ZS5jYWxsKGUsYSkp
O2wmJiFmLmxlbmd0aCYmKHAudGVhcmRvd24mJnAudGVhcmRvd24uY2FsbChlLGgsbS5oYW5kbGUp
IT09ITF8fHgucmVtb3ZlRXZlbnQoZSxkLG0uaGFuZGxlKSxkZWxldGUgY1tkXSl9ZWxzZSBmb3Io
ZCBpbiBjKXguZXZlbnQucmVtb3ZlKGUsZCt0W3VdLG4sciwhMCk7eC5pc0VtcHR5T2JqZWN0KGMp
JiYoZGVsZXRlIG0uaGFuZGxlLHguX3JlbW92ZURhdGEoZSwiZXZlbnRzIikpfX0sdHJpZ2dlcjpm
dW5jdGlvbihuLHIsaSxvKXt2YXIgcyxsLHUsYyxwLGYsZCxoPVtpfHxhXSxnPXYuY2FsbChuLCJ0
eXBlIik/bi50eXBlOm4sbT12LmNhbGwobiwibmFtZXNwYWNlIik/bi5uYW1lc3BhY2Uuc3BsaXQo
Ii4iKTpbXTtpZih1PWY9aT1pfHxhLDMhPT1pLm5vZGVUeXBlJiY4IT09aS5ub2RlVHlwZSYmIW50
LnRlc3QoZyt4LmV2ZW50LnRyaWdnZXJlZCkmJihnLmluZGV4T2YoIi4iKT49MCYmKG09Zy5zcGxp
dCgiLiIpLGc9bS5zaGlmdCgpLG0uc29ydCgpKSxsPTA+Zy5pbmRleE9mKCI6IikmJiJvbiIrZyxu
PW5beC5leHBhbmRvXT9uOm5ldyB4LkV2ZW50KGcsIm9iamVjdCI9PXR5cGVvZiBuJiZuKSxuLmlz
VHJpZ2dlcj1vPzI6MyxuLm5hbWVzcGFjZT1tLmpvaW4oIi4iKSxuLm5hbWVzcGFjZV9yZT1uLm5h
bWVzcGFjZT9SZWdFeHAoIihefFxcLikiK20uam9pbigiXFwuKD86LipcXC58KSIpKyIoXFwufCQp
Iik6bnVsbCxuLnJlc3VsdD10LG4udGFyZ2V0fHwobi50YXJnZXQ9aSkscj1udWxsPT1yP1tuXTp4
Lm1ha2VBcnJheShyLFtuXSkscD14LmV2ZW50LnNwZWNpYWxbZ118fHt9LG98fCFwLnRyaWdnZXJ8
fHAudHJpZ2dlci5hcHBseShpLHIpIT09ITEpKXtpZighbyYmIXAubm9CdWJibGUmJiF4LmlzV2lu
ZG93KGkpKXtmb3IoYz1wLmRlbGVnYXRlVHlwZXx8ZyxudC50ZXN0KGMrZyl8fCh1PXUucGFyZW50
Tm9kZSk7dTt1PXUucGFyZW50Tm9kZSloLnB1c2godSksZj11O2Y9PT0oaS5vd25lckRvY3VtZW50
fHxhKSYmaC5wdXNoKGYuZGVmYXVsdFZpZXd8fGYucGFyZW50V2luZG93fHxlKX1kPTA7d2hpbGUo
KHU9aFtkKytdKSYmIW4uaXNQcm9wYWdhdGlvblN0b3BwZWQoKSluLnR5cGU9ZD4xP2M6cC5iaW5k
VHlwZXx8ZyxzPSh4Ll9kYXRhKHUsImV2ZW50cyIpfHx7fSlbbi50eXBlXSYmeC5fZGF0YSh1LCJo
YW5kbGUiKSxzJiZzLmFwcGx5KHUscikscz1sJiZ1W2xdLHMmJnguYWNjZXB0RGF0YSh1KSYmcy5h
cHBseSYmcy5hcHBseSh1LHIpPT09ITEmJm4ucHJldmVudERlZmF1bHQoKTtpZihuLnR5cGU9Zywh
byYmIW4uaXNEZWZhdWx0UHJldmVudGVkKCkmJighcC5fZGVmYXVsdHx8cC5fZGVmYXVsdC5hcHBs
eShoLnBvcCgpLHIpPT09ITEpJiZ4LmFjY2VwdERhdGEoaSkmJmwmJmlbZ10mJiF4LmlzV2luZG93
KGkpKXtmPWlbbF0sZiYmKGlbbF09bnVsbCkseC5ldmVudC50cmlnZ2VyZWQ9Zzt0cnl7aVtnXSgp
fWNhdGNoKHkpe314LmV2ZW50LnRyaWdnZXJlZD10LGYmJihpW2xdPWYpfXJldHVybiBuLnJlc3Vs
dH19LGRpc3BhdGNoOmZ1bmN0aW9uKGUpe2U9eC5ldmVudC5maXgoZSk7dmFyIG4scixpLG8sYSxz
PVtdLGw9Zy5jYWxsKGFyZ3VtZW50cyksdT0oeC5fZGF0YSh0aGlzLCJldmVudHMiKXx8e30pW2Uu
dHlwZV18fFtdLGM9eC5ldmVudC5zcGVjaWFsW2UudHlwZV18fHt9O2lmKGxbMF09ZSxlLmRlbGVn
YXRlVGFyZ2V0PXRoaXMsIWMucHJlRGlzcGF0Y2h8fGMucHJlRGlzcGF0Y2guY2FsbCh0aGlzLGUp
IT09ITEpe3M9eC5ldmVudC5oYW5kbGVycy5jYWxsKHRoaXMsZSx1KSxuPTA7d2hpbGUoKG89c1tu
KytdKSYmIWUuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSl7ZS5jdXJyZW50VGFyZ2V0PW8uZWxlbSxh
PTA7d2hpbGUoKGk9by5oYW5kbGVyc1thKytdKSYmIWUuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0
b3BwZWQoKSkoIWUubmFtZXNwYWNlX3JlfHxlLm5hbWVzcGFjZV9yZS50ZXN0KGkubmFtZXNwYWNl
KSkmJihlLmhhbmRsZU9iaj1pLGUuZGF0YT1pLmRhdGEscj0oKHguZXZlbnQuc3BlY2lhbFtpLm9y
aWdUeXBlXXx8e30pLmhhbmRsZXx8aS5oYW5kbGVyKS5hcHBseShvLmVsZW0sbCksciE9PXQmJihl
LnJlc3VsdD1yKT09PSExJiYoZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcFByb3BhZ2F0aW9uKCkp
KX1yZXR1cm4gYy5wb3N0RGlzcGF0Y2gmJmMucG9zdERpc3BhdGNoLmNhbGwodGhpcyxlKSxlLnJl
c3VsdH19LGhhbmRsZXJzOmZ1bmN0aW9uKGUsbil7dmFyIHIsaSxvLGEscz1bXSxsPW4uZGVsZWdh
dGVDb3VudCx1PWUudGFyZ2V0O2lmKGwmJnUubm9kZVR5cGUmJighZS5idXR0b258fCJjbGljayIh
PT1lLnR5cGUpKWZvcig7dSE9dGhpczt1PXUucGFyZW50Tm9kZXx8dGhpcylpZigxPT09dS5ub2Rl
VHlwZSYmKHUuZGlzYWJsZWQhPT0hMHx8ImNsaWNrIiE9PWUudHlwZSkpe2ZvcihvPVtdLGE9MDts
PmE7YSsrKWk9blthXSxyPWkuc2VsZWN0b3IrIiAiLG9bcl09PT10JiYob1tyXT1pLm5lZWRzQ29u
dGV4dD94KHIsdGhpcykuaW5kZXgodSk+PTA6eC5maW5kKHIsdGhpcyxudWxsLFt1XSkubGVuZ3Ro
KSxvW3JdJiZvLnB1c2goaSk7by5sZW5ndGgmJnMucHVzaCh7ZWxlbTp1LGhhbmRsZXJzOm99KX1y
ZXR1cm4gbi5sZW5ndGg+bCYmcy5wdXNoKHtlbGVtOnRoaXMsaGFuZGxlcnM6bi5zbGljZShsKX0p
LHN9LGZpeDpmdW5jdGlvbihlKXtpZihlW3guZXhwYW5kb10pcmV0dXJuIGU7dmFyIHQsbixyLGk9
ZS50eXBlLG89ZSxzPXRoaXMuZml4SG9va3NbaV07c3x8KHRoaXMuZml4SG9va3NbaV09cz10dC50
ZXN0KGkpP3RoaXMubW91c2VIb29rczpldC50ZXN0KGkpP3RoaXMua2V5SG9va3M6e30pLHI9cy5w
cm9wcz90aGlzLnByb3BzLmNvbmNhdChzLnByb3BzKTp0aGlzLnByb3BzLGU9bmV3IHguRXZlbnQo
byksdD1yLmxlbmd0aDt3aGlsZSh0LS0pbj1yW3RdLGVbbl09b1tuXTtyZXR1cm4gZS50YXJnZXR8
fChlLnRhcmdldD1vLnNyY0VsZW1lbnR8fGEpLDM9PT1lLnRhcmdldC5ub2RlVHlwZSYmKGUudGFy
Z2V0PWUudGFyZ2V0LnBhcmVudE5vZGUpLGUubWV0YUtleT0hIWUubWV0YUtleSxzLmZpbHRlcj9z
LmZpbHRlcihlLG8pOmV9LHByb3BzOiJhbHRLZXkgYnViYmxlcyBjYW5jZWxhYmxlIGN0cmxLZXkg
Y3VycmVudFRhcmdldCBldmVudFBoYXNlIG1ldGFLZXkgcmVsYXRlZFRhcmdldCBzaGlmdEtleSB0
YXJnZXQgdGltZVN0YW1wIHZpZXcgd2hpY2giLnNwbGl0KCIgIiksZml4SG9va3M6e30sa2V5SG9v
a3M6e3Byb3BzOiJjaGFyIGNoYXJDb2RlIGtleSBrZXlDb2RlIi5zcGxpdCgiICIpLGZpbHRlcjpm
dW5jdGlvbihlLHQpe3JldHVybiBudWxsPT1lLndoaWNoJiYoZS53aGljaD1udWxsIT10LmNoYXJD
b2RlP3QuY2hhckNvZGU6dC5rZXlDb2RlKSxlfX0sbW91c2VIb29rczp7cHJvcHM6ImJ1dHRvbiBi
dXR0b25zIGNsaWVudFggY2xpZW50WSBmcm9tRWxlbWVudCBvZmZzZXRYIG9mZnNldFkgcGFnZVgg
cGFnZVkgc2NyZWVuWCBzY3JlZW5ZIHRvRWxlbWVudCIuc3BsaXQoIiAiKSxmaWx0ZXI6ZnVuY3Rp
b24oZSxuKXt2YXIgcixpLG8scz1uLmJ1dHRvbixsPW4uZnJvbUVsZW1lbnQ7cmV0dXJuIG51bGw9
PWUucGFnZVgmJm51bGwhPW4uY2xpZW50WCYmKGk9ZS50YXJnZXQub3duZXJEb2N1bWVudHx8YSxv
PWkuZG9jdW1lbnRFbGVtZW50LHI9aS5ib2R5LGUucGFnZVg9bi5jbGllbnRYKyhvJiZvLnNjcm9s
bExlZnR8fHImJnIuc2Nyb2xsTGVmdHx8MCktKG8mJm8uY2xpZW50TGVmdHx8ciYmci5jbGllbnRM
ZWZ0fHwwKSxlLnBhZ2VZPW4uY2xpZW50WSsobyYmby5zY3JvbGxUb3B8fHImJnIuc2Nyb2xsVG9w
fHwwKS0obyYmby5jbGllbnRUb3B8fHImJnIuY2xpZW50VG9wfHwwKSksIWUucmVsYXRlZFRhcmdl
dCYmbCYmKGUucmVsYXRlZFRhcmdldD1sPT09ZS50YXJnZXQ/bi50b0VsZW1lbnQ6bCksZS53aGlj
aHx8cz09PXR8fChlLndoaWNoPTEmcz8xOjImcz8zOjQmcz8yOjApLGV9fSxzcGVjaWFsOntsb2Fk
Ontub0J1YmJsZTohMH0sZm9jdXM6e3RyaWdnZXI6ZnVuY3Rpb24oKXtpZih0aGlzIT09YXQoKSYm
dGhpcy5mb2N1cyl0cnl7cmV0dXJuIHRoaXMuZm9jdXMoKSwhMX1jYXRjaChlKXt9fSxkZWxlZ2F0
ZVR5cGU6ImZvY3VzaW4ifSxibHVyOnt0cmlnZ2VyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXM9PT1h
dCgpJiZ0aGlzLmJsdXI/KHRoaXMuYmx1cigpLCExKTp0fSxkZWxlZ2F0ZVR5cGU6ImZvY3Vzb3V0
In0sY2xpY2s6e3RyaWdnZXI6ZnVuY3Rpb24oKXtyZXR1cm4geC5ub2RlTmFtZSh0aGlzLCJpbnB1
dCIpJiYiY2hlY2tib3giPT09dGhpcy50eXBlJiZ0aGlzLmNsaWNrPyh0aGlzLmNsaWNrKCksITEp
OnR9LF9kZWZhdWx0OmZ1bmN0aW9uKGUpe3JldHVybiB4Lm5vZGVOYW1lKGUudGFyZ2V0LCJhIil9
fSxiZWZvcmV1bmxvYWQ6e3Bvc3REaXNwYXRjaDpmdW5jdGlvbihlKXtlLnJlc3VsdCE9PXQmJihl
Lm9yaWdpbmFsRXZlbnQucmV0dXJuVmFsdWU9ZS5yZXN1bHQpfX19LHNpbXVsYXRlOmZ1bmN0aW9u
KGUsdCxuLHIpe3ZhciBpPXguZXh0ZW5kKG5ldyB4LkV2ZW50LG4se3R5cGU6ZSxpc1NpbXVsYXRl
ZDohMCxvcmlnaW5hbEV2ZW50Ont9fSk7cj94LmV2ZW50LnRyaWdnZXIoaSxudWxsLHQpOnguZXZl
bnQuZGlzcGF0Y2guY2FsbCh0LGkpLGkuaXNEZWZhdWx0UHJldmVudGVkKCkmJm4ucHJldmVudERl
ZmF1bHQoKX19LHgucmVtb3ZlRXZlbnQ9YS5yZW1vdmVFdmVudExpc3RlbmVyP2Z1bmN0aW9uKGUs
dCxuKXtlLnJlbW92ZUV2ZW50TGlzdGVuZXImJmUucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LG4sITEp
fTpmdW5jdGlvbihlLHQsbil7dmFyIHI9Im9uIit0O2UuZGV0YWNoRXZlbnQmJih0eXBlb2YgZVty
XT09PWkmJihlW3JdPW51bGwpLGUuZGV0YWNoRXZlbnQocixuKSl9LHguRXZlbnQ9ZnVuY3Rpb24o
ZSxuKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIHguRXZlbnQ/KGUmJmUudHlwZT8odGhpcy5vcmln
aW5hbEV2ZW50PWUsdGhpcy50eXBlPWUudHlwZSx0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1lLmRl
ZmF1bHRQcmV2ZW50ZWR8fGUucmV0dXJuVmFsdWU9PT0hMXx8ZS5nZXRQcmV2ZW50RGVmYXVsdCYm
ZS5nZXRQcmV2ZW50RGVmYXVsdCgpP2l0Om90KTp0aGlzLnR5cGU9ZSxuJiZ4LmV4dGVuZCh0aGlz
LG4pLHRoaXMudGltZVN0YW1wPWUmJmUudGltZVN0YW1wfHx4Lm5vdygpLHRoaXNbeC5leHBhbmRv
XT0hMCx0KTpuZXcgeC5FdmVudChlLG4pfSx4LkV2ZW50LnByb3RvdHlwZT17aXNEZWZhdWx0UHJl
dmVudGVkOm90LGlzUHJvcGFnYXRpb25TdG9wcGVkOm90LGlzSW1tZWRpYXRlUHJvcGFnYXRpb25T
dG9wcGVkOm90LHByZXZlbnREZWZhdWx0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcmlnaW5hbEV2
ZW50O3RoaXMuaXNEZWZhdWx0UHJldmVudGVkPWl0LGUmJihlLnByZXZlbnREZWZhdWx0P2UucHJl
dmVudERlZmF1bHQoKTplLnJldHVyblZhbHVlPSExKX0sc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9u
KCl7dmFyIGU9dGhpcy5vcmlnaW5hbEV2ZW50O3RoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQ9aXQs
ZSYmKGUuc3RvcFByb3BhZ2F0aW9uJiZlLnN0b3BQcm9wYWdhdGlvbigpLGUuY2FuY2VsQnViYmxl
PSEwKX0sc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dGhpcy5pc0ltbWVkaWF0
ZVByb3BhZ2F0aW9uU3RvcHBlZD1pdCx0aGlzLnN0b3BQcm9wYWdhdGlvbigpfX0seC5lYWNoKHtt
b3VzZWVudGVyOiJtb3VzZW92ZXIiLG1vdXNlbGVhdmU6Im1vdXNlb3V0In0sZnVuY3Rpb24oZSx0
KXt4LmV2ZW50LnNwZWNpYWxbZV09e2RlbGVnYXRlVHlwZTp0LGJpbmRUeXBlOnQsaGFuZGxlOmZ1
bmN0aW9uKGUpe3ZhciBuLHI9dGhpcyxpPWUucmVsYXRlZFRhcmdldCxvPWUuaGFuZGxlT2JqO3Jl
dHVybighaXx8aSE9PXImJiF4LmNvbnRhaW5zKHIsaSkpJiYoZS50eXBlPW8ub3JpZ1R5cGUsbj1v
LmhhbmRsZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpLGUudHlwZT10KSxufX19KSx4LnN1cHBvcnQu
c3VibWl0QnViYmxlc3x8KHguZXZlbnQuc3BlY2lhbC5zdWJtaXQ9e3NldHVwOmZ1bmN0aW9uKCl7
cmV0dXJuIHgubm9kZU5hbWUodGhpcywiZm9ybSIpPyExOih4LmV2ZW50LmFkZCh0aGlzLCJjbGlj
ay5fc3VibWl0IGtleXByZXNzLl9zdWJtaXQiLGZ1bmN0aW9uKGUpe3ZhciBuPWUudGFyZ2V0LHI9
eC5ub2RlTmFtZShuLCJpbnB1dCIpfHx4Lm5vZGVOYW1lKG4sImJ1dHRvbiIpP24uZm9ybTp0O3Im
JiF4Ll9kYXRhKHIsInN1Ym1pdEJ1YmJsZXMiKSYmKHguZXZlbnQuYWRkKHIsInN1Ym1pdC5fc3Vi
bWl0IixmdW5jdGlvbihlKXtlLl9zdWJtaXRfYnViYmxlPSEwfSkseC5fZGF0YShyLCJzdWJtaXRC
dWJibGVzIiwhMCkpfSksdCl9LHBvc3REaXNwYXRjaDpmdW5jdGlvbihlKXtlLl9zdWJtaXRfYnVi
YmxlJiYoZGVsZXRlIGUuX3N1Ym1pdF9idWJibGUsdGhpcy5wYXJlbnROb2RlJiYhZS5pc1RyaWdn
ZXImJnguZXZlbnQuc2ltdWxhdGUoInN1Ym1pdCIsdGhpcy5wYXJlbnROb2RlLGUsITApKX0sdGVh
cmRvd246ZnVuY3Rpb24oKXtyZXR1cm4geC5ub2RlTmFtZSh0aGlzLCJmb3JtIik/ITE6KHguZXZl
bnQucmVtb3ZlKHRoaXMsIi5fc3VibWl0IiksdCl9fSkseC5zdXBwb3J0LmNoYW5nZUJ1YmJsZXN8
fCh4LmV2ZW50LnNwZWNpYWwuY2hhbmdlPXtzZXR1cDpmdW5jdGlvbigpe3JldHVybiBaLnRlc3Qo
dGhpcy5ub2RlTmFtZSk/KCgiY2hlY2tib3giPT09dGhpcy50eXBlfHwicmFkaW8iPT09dGhpcy50
eXBlKSYmKHguZXZlbnQuYWRkKHRoaXMsInByb3BlcnR5Y2hhbmdlLl9jaGFuZ2UiLGZ1bmN0aW9u
KGUpeyJjaGVja2VkIj09PWUub3JpZ2luYWxFdmVudC5wcm9wZXJ0eU5hbWUmJih0aGlzLl9qdXN0
X2NoYW5nZWQ9ITApfSkseC5ldmVudC5hZGQodGhpcywiY2xpY2suX2NoYW5nZSIsZnVuY3Rpb24o
ZSl7dGhpcy5fanVzdF9jaGFuZ2VkJiYhZS5pc1RyaWdnZXImJih0aGlzLl9qdXN0X2NoYW5nZWQ9
ITEpLHguZXZlbnQuc2ltdWxhdGUoImNoYW5nZSIsdGhpcyxlLCEwKX0pKSwhMSk6KHguZXZlbnQu
YWRkKHRoaXMsImJlZm9yZWFjdGl2YXRlLl9jaGFuZ2UiLGZ1bmN0aW9uKGUpe3ZhciB0PWUudGFy
Z2V0O1oudGVzdCh0Lm5vZGVOYW1lKSYmIXguX2RhdGEodCwiY2hhbmdlQnViYmxlcyIpJiYoeC5l
dmVudC5hZGQodCwiY2hhbmdlLl9jaGFuZ2UiLGZ1bmN0aW9uKGUpeyF0aGlzLnBhcmVudE5vZGV8
fGUuaXNTaW11bGF0ZWR8fGUuaXNUcmlnZ2VyfHx4LmV2ZW50LnNpbXVsYXRlKCJjaGFuZ2UiLHRo
aXMucGFyZW50Tm9kZSxlLCEwKX0pLHguX2RhdGEodCwiY2hhbmdlQnViYmxlcyIsITApKX0pLHQp
fSxoYW5kbGU6ZnVuY3Rpb24oZSl7dmFyIG49ZS50YXJnZXQ7cmV0dXJuIHRoaXMhPT1ufHxlLmlz
U2ltdWxhdGVkfHxlLmlzVHJpZ2dlcnx8InJhZGlvIiE9PW4udHlwZSYmImNoZWNrYm94IiE9PW4u
dHlwZT9lLmhhbmRsZU9iai5oYW5kbGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTp0fSx0ZWFyZG93
bjpmdW5jdGlvbigpe3JldHVybiB4LmV2ZW50LnJlbW92ZSh0aGlzLCIuX2NoYW5nZSIpLCFaLnRl
c3QodGhpcy5ub2RlTmFtZSl9fSkseC5zdXBwb3J0LmZvY3VzaW5CdWJibGVzfHx4LmVhY2goe2Zv
Y3VzOiJmb2N1c2luIixibHVyOiJmb2N1c291dCJ9LGZ1bmN0aW9uKGUsdCl7dmFyIG49MCxyPWZ1
bmN0aW9uKGUpe3guZXZlbnQuc2ltdWxhdGUodCxlLnRhcmdldCx4LmV2ZW50LmZpeChlKSwhMCl9
O3guZXZlbnQuc3BlY2lhbFt0XT17c2V0dXA6ZnVuY3Rpb24oKXswPT09bisrJiZhLmFkZEV2ZW50
TGlzdGVuZXIoZSxyLCEwKX0sdGVhcmRvd246ZnVuY3Rpb24oKXswPT09LS1uJiZhLnJlbW92ZUV2
ZW50TGlzdGVuZXIoZSxyLCEwKX19fSkseC5mbi5leHRlbmQoe29uOmZ1bmN0aW9uKGUsbixyLGks
byl7dmFyIGEscztpZigib2JqZWN0Ij09dHlwZW9mIGUpeyJzdHJpbmciIT10eXBlb2YgbiYmKHI9
cnx8bixuPXQpO2ZvcihhIGluIGUpdGhpcy5vbihhLG4scixlW2FdLG8pO3JldHVybiB0aGlzfWlm
KG51bGw9PXImJm51bGw9PWk/KGk9bixyPW49dCk6bnVsbD09aSYmKCJzdHJpbmciPT10eXBlb2Yg
bj8oaT1yLHI9dCk6KGk9cixyPW4sbj10KSksaT09PSExKWk9b3Q7ZWxzZSBpZighaSlyZXR1cm4g
dGhpcztyZXR1cm4gMT09PW8mJihzPWksaT1mdW5jdGlvbihlKXtyZXR1cm4geCgpLm9mZihlKSxz
LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0saS5ndWlkPXMuZ3VpZHx8KHMuZ3VpZD14Lmd1aWQrKykp
LHRoaXMuZWFjaChmdW5jdGlvbigpe3guZXZlbnQuYWRkKHRoaXMsZSxpLHIsbil9KX0sb25lOmZ1
bmN0aW9uKGUsdCxuLHIpe3JldHVybiB0aGlzLm9uKGUsdCxuLHIsMSl9LG9mZjpmdW5jdGlvbihl
LG4scil7dmFyIGksbztpZihlJiZlLnByZXZlbnREZWZhdWx0JiZlLmhhbmRsZU9iailyZXR1cm4g
aT1lLmhhbmRsZU9iaix4KGUuZGVsZWdhdGVUYXJnZXQpLm9mZihpLm5hbWVzcGFjZT9pLm9yaWdU
eXBlKyIuIitpLm5hbWVzcGFjZTppLm9yaWdUeXBlLGkuc2VsZWN0b3IsaS5oYW5kbGVyKSx0aGlz
O2lmKCJvYmplY3QiPT10eXBlb2YgZSl7Zm9yKG8gaW4gZSl0aGlzLm9mZihvLG4sZVtvXSk7cmV0
dXJuIHRoaXN9cmV0dXJuKG49PT0hMXx8ImZ1bmN0aW9uIj09dHlwZW9mIG4pJiYocj1uLG49dCks
cj09PSExJiYocj1vdCksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7eC5ldmVudC5yZW1vdmUodGhpcyxl
LHIsbil9KX0sdHJpZ2dlcjpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24o
KXt4LmV2ZW50LnRyaWdnZXIoZSx0LHRoaXMpfSl9LHRyaWdnZXJIYW5kbGVyOmZ1bmN0aW9uKGUs
bil7dmFyIHI9dGhpc1swXTtyZXR1cm4gcj94LmV2ZW50LnRyaWdnZXIoZSxuLHIsITApOnR9fSk7
dmFyIHN0PS9eLlteOiNcW1wuLF0qJC8sbHQ9L14oPzpwYXJlbnRzfHByZXYoPzpVbnRpbHxBbGwp
KS8sdXQ9eC5leHByLm1hdGNoLm5lZWRzQ29udGV4dCxjdD17Y2hpbGRyZW46ITAsY29udGVudHM6
ITAsbmV4dDohMCxwcmV2OiEwfTt4LmZuLmV4dGVuZCh7ZmluZDpmdW5jdGlvbihlKXt2YXIgdCxu
PVtdLHI9dGhpcyxpPXIubGVuZ3RoO2lmKCJzdHJpbmciIT10eXBlb2YgZSlyZXR1cm4gdGhpcy5w
dXNoU3RhY2soeChlKS5maWx0ZXIoZnVuY3Rpb24oKXtmb3IodD0wO2k+dDt0KyspaWYoeC5jb250
YWlucyhyW3RdLHRoaXMpKXJldHVybiEwfSkpO2Zvcih0PTA7aT50O3QrKyl4LmZpbmQoZSxyW3Rd
LG4pO3JldHVybiBuPXRoaXMucHVzaFN0YWNrKGk+MT94LnVuaXF1ZShuKTpuKSxuLnNlbGVjdG9y
PXRoaXMuc2VsZWN0b3I/dGhpcy5zZWxlY3RvcisiICIrZTplLG59LGhhczpmdW5jdGlvbihlKXt2
YXIgdCxuPXgoZSx0aGlzKSxyPW4ubGVuZ3RoO3JldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbigp
e2Zvcih0PTA7cj50O3QrKylpZih4LmNvbnRhaW5zKHRoaXMsblt0XSkpcmV0dXJuITB9KX0sbm90
OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnB1c2hTdGFjayhmdCh0aGlzLGV8fFtdLCEwKSl9LGZp
bHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soZnQodGhpcyxlfHxbXSwhMSkp
fSxpczpmdW5jdGlvbihlKXtyZXR1cm4hIWZ0KHRoaXMsInN0cmluZyI9PXR5cGVvZiBlJiZ1dC50
ZXN0KGUpP3goZSk6ZXx8W10sITEpLmxlbmd0aH0sY2xvc2VzdDpmdW5jdGlvbihlLHQpe3ZhciBu
LHI9MCxpPXRoaXMubGVuZ3RoLG89W10sYT11dC50ZXN0KGUpfHwic3RyaW5nIiE9dHlwZW9mIGU/
eChlLHR8fHRoaXMuY29udGV4dCk6MDtmb3IoO2k+cjtyKyspZm9yKG49dGhpc1tyXTtuJiZuIT09
dDtuPW4ucGFyZW50Tm9kZSlpZigxMT5uLm5vZGVUeXBlJiYoYT9hLmluZGV4KG4pPi0xOjE9PT1u
Lm5vZGVUeXBlJiZ4LmZpbmQubWF0Y2hlc1NlbGVjdG9yKG4sZSkpKXtuPW8ucHVzaChuKTticmVh
a31yZXR1cm4gdGhpcy5wdXNoU3RhY2soby5sZW5ndGg+MT94LnVuaXF1ZShvKTpvKX0saW5kZXg6
ZnVuY3Rpb24oZSl7cmV0dXJuIGU/InN0cmluZyI9PXR5cGVvZiBlP3guaW5BcnJheSh0aGlzWzBd
LHgoZSkpOnguaW5BcnJheShlLmpxdWVyeT9lWzBdOmUsdGhpcyk6dGhpc1swXSYmdGhpc1swXS5w
YXJlbnROb2RlP3RoaXMuZmlyc3QoKS5wcmV2QWxsKCkubGVuZ3RoOi0xfSxhZGQ6ZnVuY3Rpb24o
ZSx0KXt2YXIgbj0ic3RyaW5nIj09dHlwZW9mIGU/eChlLHQpOngubWFrZUFycmF5KGUmJmUubm9k
ZVR5cGU/W2VdOmUpLHI9eC5tZXJnZSh0aGlzLmdldCgpLG4pO3JldHVybiB0aGlzLnB1c2hTdGFj
ayh4LnVuaXF1ZShyKSl9LGFkZEJhY2s6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYWRkKG51bGw9
PWU/dGhpcy5wcmV2T2JqZWN0OnRoaXMucHJldk9iamVjdC5maWx0ZXIoZSkpfX0pO2Z1bmN0aW9u
IHB0KGUsdCl7ZG8gZT1lW3RdO3doaWxlKGUmJjEhPT1lLm5vZGVUeXBlKTtyZXR1cm4gZX14LmVh
Y2goe3BhcmVudDpmdW5jdGlvbihlKXt2YXIgdD1lLnBhcmVudE5vZGU7cmV0dXJuIHQmJjExIT09
dC5ub2RlVHlwZT90Om51bGx9LHBhcmVudHM6ZnVuY3Rpb24oZSl7cmV0dXJuIHguZGlyKGUsInBh
cmVudE5vZGUiKX0scGFyZW50c1VudGlsOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4geC5kaXIoZSwi
cGFyZW50Tm9kZSIsbil9LG5leHQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHB0KGUsIm5leHRTaWJsaW5n
Iil9LHByZXY6ZnVuY3Rpb24oZSl7cmV0dXJuIHB0KGUsInByZXZpb3VzU2libGluZyIpfSxuZXh0
QWxsOmZ1bmN0aW9uKGUpe3JldHVybiB4LmRpcihlLCJuZXh0U2libGluZyIpfSxwcmV2QWxsOmZ1
bmN0aW9uKGUpe3JldHVybiB4LmRpcihlLCJwcmV2aW91c1NpYmxpbmciKX0sbmV4dFVudGlsOmZ1
bmN0aW9uKGUsdCxuKXtyZXR1cm4geC5kaXIoZSwibmV4dFNpYmxpbmciLG4pfSxwcmV2VW50aWw6
ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB4LmRpcihlLCJwcmV2aW91c1NpYmxpbmciLG4pfSxzaWJs
aW5nczpmdW5jdGlvbihlKXtyZXR1cm4geC5zaWJsaW5nKChlLnBhcmVudE5vZGV8fHt9KS5maXJz
dENoaWxkLGUpfSxjaGlsZHJlbjpmdW5jdGlvbihlKXtyZXR1cm4geC5zaWJsaW5nKGUuZmlyc3RD
aGlsZCl9LGNvbnRlbnRzOmZ1bmN0aW9uKGUpe3JldHVybiB4Lm5vZGVOYW1lKGUsImlmcmFtZSIp
P2UuY29udGVudERvY3VtZW50fHxlLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ6eC5tZXJnZShbXSxl
LmNoaWxkTm9kZXMpfX0sZnVuY3Rpb24oZSx0KXt4LmZuW2VdPWZ1bmN0aW9uKG4scil7dmFyIGk9
eC5tYXAodGhpcyx0LG4pO3JldHVybiJVbnRpbCIhPT1lLnNsaWNlKC01KSYmKHI9biksciYmInN0
cmluZyI9PXR5cGVvZiByJiYoaT14LmZpbHRlcihyLGkpKSx0aGlzLmxlbmd0aD4xJiYoY3RbZV18
fChpPXgudW5pcXVlKGkpKSxsdC50ZXN0KGUpJiYoaT1pLnJldmVyc2UoKSkpLHRoaXMucHVzaFN0
YWNrKGkpfX0pLHguZXh0ZW5kKHtmaWx0ZXI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRbMF07cmV0
dXJuIG4mJihlPSI6bm90KCIrZSsiKSIpLDE9PT10Lmxlbmd0aCYmMT09PXIubm9kZVR5cGU/eC5m
aW5kLm1hdGNoZXNTZWxlY3RvcihyLGUpP1tyXTpbXTp4LmZpbmQubWF0Y2hlcyhlLHguZ3JlcCh0
LGZ1bmN0aW9uKGUpe3JldHVybiAxPT09ZS5ub2RlVHlwZX0pKX0sZGlyOmZ1bmN0aW9uKGUsbixy
KXt2YXIgaT1bXSxvPWVbbl07d2hpbGUobyYmOSE9PW8ubm9kZVR5cGUmJihyPT09dHx8MSE9PW8u
bm9kZVR5cGV8fCF4KG8pLmlzKHIpKSkxPT09by5ub2RlVHlwZSYmaS5wdXNoKG8pLG89b1tuXTty
ZXR1cm4gaX0sc2libGluZzpmdW5jdGlvbihlLHQpe3ZhciBuPVtdO2Zvcig7ZTtlPWUubmV4dFNp
YmxpbmcpMT09PWUubm9kZVR5cGUmJmUhPT10JiZuLnB1c2goZSk7cmV0dXJuIG59fSk7ZnVuY3Rp
b24gZnQoZSx0LG4pe2lmKHguaXNGdW5jdGlvbih0KSlyZXR1cm4geC5ncmVwKGUsZnVuY3Rpb24o
ZSxyKXtyZXR1cm4hIXQuY2FsbChlLHIsZSkhPT1ufSk7aWYodC5ub2RlVHlwZSlyZXR1cm4geC5n
cmVwKGUsZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT10IT09bn0pO2lmKCJzdHJpbmciPT10eXBlb2Yg
dCl7aWYoc3QudGVzdCh0KSlyZXR1cm4geC5maWx0ZXIodCxlLG4pO3Q9eC5maWx0ZXIodCxlKX1y
ZXR1cm4geC5ncmVwKGUsZnVuY3Rpb24oZSl7cmV0dXJuIHguaW5BcnJheShlLHQpPj0wIT09bn0p
fWZ1bmN0aW9uIGR0KGUpe3ZhciB0PWh0LnNwbGl0KCJ8Iiksbj1lLmNyZWF0ZURvY3VtZW50RnJh
Z21lbnQoKTtpZihuLmNyZWF0ZUVsZW1lbnQpd2hpbGUodC5sZW5ndGgpbi5jcmVhdGVFbGVtZW50
KHQucG9wKCkpO3JldHVybiBufXZhciBodD0iYWJicnxhcnRpY2xlfGFzaWRlfGF1ZGlvfGJkaXxj
YW52YXN8ZGF0YXxkYXRhbGlzdHxkZXRhaWxzfGZpZ2NhcHRpb258ZmlndXJlfGZvb3RlcnxoZWFk
ZXJ8aGdyb3VwfG1hcmt8bWV0ZXJ8bmF2fG91dHB1dHxwcm9ncmVzc3xzZWN0aW9ufHN1bW1hcnl8
dGltZXx2aWRlbyIsZ3Q9LyBqUXVlcnlcZCs9Iig/Om51bGx8XGQrKSIvZyxtdD1SZWdFeHAoIjwo
PzoiK2h0KyIpW1xccy8+XSIsImkiKSx5dD0vXlxzKy8sdnQ9LzwoPyFhcmVhfGJyfGNvbHxlbWJl
ZHxocnxpbWd8aW5wdXR8bGlua3xtZXRhfHBhcmFtKSgoW1x3Ol0rKVtePl0qKVwvPi9naSxidD0v
PChbXHc6XSspLyx4dD0vPHRib2R5L2ksd3Q9Lzx8JiM/XHcrOy8sVHQ9LzwoPzpzY3JpcHR8c3R5
bGV8bGluaykvaSxDdD0vXig/OmNoZWNrYm94fHJhZGlvKSQvaSxOdD0vY2hlY2tlZFxzKig/Olte
PV18PVxzKi5jaGVja2VkLikvaSxrdD0vXiR8XC8oPzpqYXZhfGVjbWEpc2NyaXB0L2ksRXQ9L150
cnVlXC8oLiopLyxTdD0vXlxzKjwhKD86XFtDREFUQVxbfC0tKXwoPzpcXVxdfC0tKT5ccyokL2cs
QXQ9e29wdGlvbjpbMSwiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPiIsIjwvc2VsZWN0PiJd
LGxlZ2VuZDpbMSwiPGZpZWxkc2V0PiIsIjwvZmllbGRzZXQ+Il0sYXJlYTpbMSwiPG1hcD4iLCI8
L21hcD4iXSxwYXJhbTpbMSwiPG9iamVjdD4iLCI8L29iamVjdD4iXSx0aGVhZDpbMSwiPHRhYmxl
PiIsIjwvdGFibGU+Il0sdHI6WzIsIjx0YWJsZT48dGJvZHk+IiwiPC90Ym9keT48L3RhYmxlPiJd
LGNvbDpbMiwiPHRhYmxlPjx0Ym9keT48L3Rib2R5Pjxjb2xncm91cD4iLCI8L2NvbGdyb3VwPjwv
dGFibGU+Il0sdGQ6WzMsIjx0YWJsZT48dGJvZHk+PHRyPiIsIjwvdHI+PC90Ym9keT48L3RhYmxl
PiJdLF9kZWZhdWx0Onguc3VwcG9ydC5odG1sU2VyaWFsaXplP1swLCIiLCIiXTpbMSwiWDxkaXY+
IiwiPC9kaXY+Il19LGp0PWR0KGEpLER0PWp0LmFwcGVuZENoaWxkKGEuY3JlYXRlRWxlbWVudCgi
ZGl2IikpO0F0Lm9wdGdyb3VwPUF0Lm9wdGlvbixBdC50Ym9keT1BdC50Zm9vdD1BdC5jb2xncm91
cD1BdC5jYXB0aW9uPUF0LnRoZWFkLEF0LnRoPUF0LnRkLHguZm4uZXh0ZW5kKHt0ZXh0OmZ1bmN0
aW9uKGUpe3JldHVybiB4LmFjY2Vzcyh0aGlzLGZ1bmN0aW9uKGUpe3JldHVybiBlPT09dD94LnRl
eHQodGhpcyk6dGhpcy5lbXB0eSgpLmFwcGVuZCgodGhpc1swXSYmdGhpc1swXS5vd25lckRvY3Vt
ZW50fHxhKS5jcmVhdGVUZXh0Tm9kZShlKSl9LG51bGwsZSxhcmd1bWVudHMubGVuZ3RoKX0sYXBw
ZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLGZ1bmN0aW9uKGUp
e2lmKDE9PT10aGlzLm5vZGVUeXBlfHwxMT09PXRoaXMubm9kZVR5cGV8fDk9PT10aGlzLm5vZGVU
eXBlKXt2YXIgdD1MdCh0aGlzLGUpO3QuYXBwZW5kQ2hpbGQoZSl9fSl9LHByZXBlbmQ6ZnVuY3Rp
b24oKXtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsZnVuY3Rpb24oZSl7aWYoMT09PXRo
aXMubm9kZVR5cGV8fDExPT09dGhpcy5ub2RlVHlwZXx8OT09PXRoaXMubm9kZVR5cGUpe3ZhciB0
PUx0KHRoaXMsZSk7dC5pbnNlcnRCZWZvcmUoZSx0LmZpcnN0Q2hpbGQpfX0pfSxiZWZvcmU6ZnVu
Y3Rpb24oKXtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsZnVuY3Rpb24oZSl7dGhpcy5w
YXJlbnROb2RlJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGUsdGhpcyl9KX0sYWZ0ZXI6
ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsZnVuY3Rpb24oZSl7dGhp
cy5wYXJlbnROb2RlJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGUsdGhpcy5uZXh0U2li
bGluZyl9KX0scmVtb3ZlOmZ1bmN0aW9uKGUsdCl7dmFyIG4scj1lP3guZmlsdGVyKGUsdGhpcyk6
dGhpcyxpPTA7Zm9yKDtudWxsIT0obj1yW2ldKTtpKyspdHx8MSE9PW4ubm9kZVR5cGV8fHguY2xl
YW5EYXRhKEZ0KG4pKSxuLnBhcmVudE5vZGUmJih0JiZ4LmNvbnRhaW5zKG4ub3duZXJEb2N1bWVu
dCxuKSYmX3QoRnQobiwic2NyaXB0IikpLG4ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChuKSk7cmV0
dXJuIHRoaXN9LGVtcHR5OmZ1bmN0aW9uKCl7dmFyIGUsdD0wO2Zvcig7bnVsbCE9KGU9dGhpc1t0
XSk7dCsrKXsxPT09ZS5ub2RlVHlwZSYmeC5jbGVhbkRhdGEoRnQoZSwhMSkpO3doaWxlKGUuZmly
c3RDaGlsZCllLnJlbW92ZUNoaWxkKGUuZmlyc3RDaGlsZCk7ZS5vcHRpb25zJiZ4Lm5vZGVOYW1l
KGUsInNlbGVjdCIpJiYoZS5vcHRpb25zLmxlbmd0aD0wKX1yZXR1cm4gdGhpc30sY2xvbmU6ZnVu
Y3Rpb24oZSx0KXtyZXR1cm4gZT1udWxsPT1lPyExOmUsdD1udWxsPT10P2U6dCx0aGlzLm1hcChm
dW5jdGlvbigpe3JldHVybiB4LmNsb25lKHRoaXMsZSx0KX0pfSxodG1sOmZ1bmN0aW9uKGUpe3Jl
dHVybiB4LmFjY2Vzcyh0aGlzLGZ1bmN0aW9uKGUpe3ZhciBuPXRoaXNbMF18fHt9LHI9MCxpPXRo
aXMubGVuZ3RoO2lmKGU9PT10KXJldHVybiAxPT09bi5ub2RlVHlwZT9uLmlubmVySFRNTC5yZXBs
YWNlKGd0LCIiKTp0O2lmKCEoInN0cmluZyIhPXR5cGVvZiBlfHxUdC50ZXN0KGUpfHwheC5zdXBw
b3J0Lmh0bWxTZXJpYWxpemUmJm10LnRlc3QoZSl8fCF4LnN1cHBvcnQubGVhZGluZ1doaXRlc3Bh
Y2UmJnl0LnRlc3QoZSl8fEF0WyhidC5leGVjKGUpfHxbIiIsIiJdKVsxXS50b0xvd2VyQ2FzZSgp
XSkpe2U9ZS5yZXBsYWNlKHZ0LCI8JDE+PC8kMj4iKTt0cnl7Zm9yKDtpPnI7cisrKW49dGhpc1ty
XXx8e30sMT09PW4ubm9kZVR5cGUmJih4LmNsZWFuRGF0YShGdChuLCExKSksbi5pbm5lckhUTUw9
ZSk7bj0wfWNhdGNoKG8pe319biYmdGhpcy5lbXB0eSgpLmFwcGVuZChlKX0sbnVsbCxlLGFyZ3Vt
ZW50cy5sZW5ndGgpfSxyZXBsYWNlV2l0aDpmdW5jdGlvbigpe3ZhciBlPXgubWFwKHRoaXMsZnVu
Y3Rpb24oZSl7cmV0dXJuW2UubmV4dFNpYmxpbmcsZS5wYXJlbnROb2RlXX0pLHQ9MDtyZXR1cm4g
dGhpcy5kb21NYW5pcChhcmd1bWVudHMsZnVuY3Rpb24obil7dmFyIHI9ZVt0KytdLGk9ZVt0Kytd
O2kmJihyJiZyLnBhcmVudE5vZGUhPT1pJiYocj10aGlzLm5leHRTaWJsaW5nKSx4KHRoaXMpLnJl
bW92ZSgpLGkuaW5zZXJ0QmVmb3JlKG4scikpfSwhMCksdD90aGlzOnRoaXMucmVtb3ZlKCl9LGRl
dGFjaDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5yZW1vdmUoZSwhMCl9LGRvbU1hbmlwOmZ1bmN0
aW9uKGUsdCxuKXtlPWQuYXBwbHkoW10sZSk7dmFyIHIsaSxvLGEscyxsLHU9MCxjPXRoaXMubGVu
Z3RoLHA9dGhpcyxmPWMtMSxoPWVbMF0sZz14LmlzRnVuY3Rpb24oaCk7aWYoZ3x8ISgxPj1jfHwi
c3RyaW5nIiE9dHlwZW9mIGh8fHguc3VwcG9ydC5jaGVja0Nsb25lKSYmTnQudGVzdChoKSlyZXR1
cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKHIpe3ZhciBpPXAuZXEocik7ZyYmKGVbMF09aC5jYWxsKHRo
aXMscixpLmh0bWwoKSkpLGkuZG9tTWFuaXAoZSx0LG4pfSk7aWYoYyYmKGw9eC5idWlsZEZyYWdt
ZW50KGUsdGhpc1swXS5vd25lckRvY3VtZW50LCExLCFuJiZ0aGlzKSxyPWwuZmlyc3RDaGlsZCwx
PT09bC5jaGlsZE5vZGVzLmxlbmd0aCYmKGw9cikscikpe2ZvcihhPXgubWFwKEZ0KGwsInNjcmlw
dCIpLEh0KSxvPWEubGVuZ3RoO2M+dTt1KyspaT1sLHUhPT1mJiYoaT14LmNsb25lKGksITAsITAp
LG8mJngubWVyZ2UoYSxGdChpLCJzY3JpcHQiKSkpLHQuY2FsbCh0aGlzW3VdLGksdSk7aWYobylm
b3Iocz1hW2EubGVuZ3RoLTFdLm93bmVyRG9jdW1lbnQseC5tYXAoYSxxdCksdT0wO28+dTt1Kysp
aT1hW3VdLGt0LnRlc3QoaS50eXBlfHwiIikmJiF4Ll9kYXRhKGksImdsb2JhbEV2YWwiKSYmeC5j
b250YWlucyhzLGkpJiYoaS5zcmM/eC5fZXZhbFVybChpLnNyYyk6eC5nbG9iYWxFdmFsKChpLnRl
eHR8fGkudGV4dENvbnRlbnR8fGkuaW5uZXJIVE1MfHwiIikucmVwbGFjZShTdCwiIikpKTtsPXI9
bnVsbH1yZXR1cm4gdGhpc319KTtmdW5jdGlvbiBMdChlLHQpe3JldHVybiB4Lm5vZGVOYW1lKGUs
InRhYmxlIikmJngubm9kZU5hbWUoMT09PXQubm9kZVR5cGU/dDp0LmZpcnN0Q2hpbGQsInRyIik/
ZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGJvZHkiKVswXXx8ZS5hcHBlbmRDaGlsZChlLm93bmVy
RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGJvZHkiKSk6ZX1mdW5jdGlvbiBIdChlKXtyZXR1cm4g
ZS50eXBlPShudWxsIT09eC5maW5kLmF0dHIoZSwidHlwZSIpKSsiLyIrZS50eXBlLGV9ZnVuY3Rp
b24gcXQoZSl7dmFyIHQ9RXQuZXhlYyhlLnR5cGUpO3JldHVybiB0P2UudHlwZT10WzFdOmUucmVt
b3ZlQXR0cmlidXRlKCJ0eXBlIiksZX1mdW5jdGlvbiBfdChlLHQpe3ZhciBuLHI9MDtmb3IoO251
bGwhPShuPWVbcl0pO3IrKyl4Ll9kYXRhKG4sImdsb2JhbEV2YWwiLCF0fHx4Ll9kYXRhKHRbcl0s
Imdsb2JhbEV2YWwiKSl9ZnVuY3Rpb24gTXQoZSx0KXtpZigxPT09dC5ub2RlVHlwZSYmeC5oYXNE
YXRhKGUpKXt2YXIgbixyLGksbz14Ll9kYXRhKGUpLGE9eC5fZGF0YSh0LG8pLHM9by5ldmVudHM7
aWYocyl7ZGVsZXRlIGEuaGFuZGxlLGEuZXZlbnRzPXt9O2ZvcihuIGluIHMpZm9yKHI9MCxpPXNb
bl0ubGVuZ3RoO2k+cjtyKyspeC5ldmVudC5hZGQodCxuLHNbbl1bcl0pfWEuZGF0YSYmKGEuZGF0
YT14LmV4dGVuZCh7fSxhLmRhdGEpKX19ZnVuY3Rpb24gT3QoZSx0KXt2YXIgbixyLGk7aWYoMT09
PXQubm9kZVR5cGUpe2lmKG49dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLCF4LnN1cHBvcnQubm9D
bG9uZUV2ZW50JiZ0W3guZXhwYW5kb10pe2k9eC5fZGF0YSh0KTtmb3IociBpbiBpLmV2ZW50cyl4
LnJlbW92ZUV2ZW50KHQscixpLmhhbmRsZSk7dC5yZW1vdmVBdHRyaWJ1dGUoeC5leHBhbmRvKX0i
c2NyaXB0Ij09PW4mJnQudGV4dCE9PWUudGV4dD8oSHQodCkudGV4dD1lLnRleHQscXQodCkpOiJv
YmplY3QiPT09bj8odC5wYXJlbnROb2RlJiYodC5vdXRlckhUTUw9ZS5vdXRlckhUTUwpLHguc3Vw
cG9ydC5odG1sNUNsb25lJiZlLmlubmVySFRNTCYmIXgudHJpbSh0LmlubmVySFRNTCkmJih0Lmlu
bmVySFRNTD1lLmlubmVySFRNTCkpOiJpbnB1dCI9PT1uJiZDdC50ZXN0KGUudHlwZSk/KHQuZGVm
YXVsdENoZWNrZWQ9dC5jaGVja2VkPWUuY2hlY2tlZCx0LnZhbHVlIT09ZS52YWx1ZSYmKHQudmFs
dWU9ZS52YWx1ZSkpOiJvcHRpb24iPT09bj90LmRlZmF1bHRTZWxlY3RlZD10LnNlbGVjdGVkPWUu
ZGVmYXVsdFNlbGVjdGVkOigiaW5wdXQiPT09bnx8InRleHRhcmVhIj09PW4pJiYodC5kZWZhdWx0
VmFsdWU9ZS5kZWZhdWx0VmFsdWUpfX14LmVhY2goe2FwcGVuZFRvOiJhcHBlbmQiLHByZXBlbmRU
bzoicHJlcGVuZCIsaW5zZXJ0QmVmb3JlOiJiZWZvcmUiLGluc2VydEFmdGVyOiJhZnRlciIscmVw
bGFjZUFsbDoicmVwbGFjZVdpdGgifSxmdW5jdGlvbihlLHQpe3guZm5bZV09ZnVuY3Rpb24oZSl7
dmFyIG4scj0wLGk9W10sbz14KGUpLGE9by5sZW5ndGgtMTtmb3IoO2E+PXI7cisrKW49cj09PWE/
dGhpczp0aGlzLmNsb25lKCEwKSx4KG9bcl0pW3RdKG4pLGguYXBwbHkoaSxuLmdldCgpKTtyZXR1
cm4gdGhpcy5wdXNoU3RhY2soaSl9fSk7ZnVuY3Rpb24gRnQoZSxuKXt2YXIgcixvLGE9MCxzPXR5
cGVvZiBlLmdldEVsZW1lbnRzQnlUYWdOYW1lIT09aT9lLmdldEVsZW1lbnRzQnlUYWdOYW1lKG58
fCIqIik6dHlwZW9mIGUucXVlcnlTZWxlY3RvckFsbCE9PWk/ZS5xdWVyeVNlbGVjdG9yQWxsKG58
fCIqIik6dDtpZighcylmb3Iocz1bXSxyPWUuY2hpbGROb2Rlc3x8ZTtudWxsIT0obz1yW2FdKTth
KyspIW58fHgubm9kZU5hbWUobyxuKT9zLnB1c2gobyk6eC5tZXJnZShzLEZ0KG8sbikpO3JldHVy
biBuPT09dHx8biYmeC5ub2RlTmFtZShlLG4pP3gubWVyZ2UoW2VdLHMpOnN9ZnVuY3Rpb24gQnQo
ZSl7Q3QudGVzdChlLnR5cGUpJiYoZS5kZWZhdWx0Q2hlY2tlZD1lLmNoZWNrZWQpfXguZXh0ZW5k
KHtjbG9uZTpmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvLGEscyxsPXguY29udGFpbnMoZS5vd25l
ckRvY3VtZW50LGUpO2lmKHguc3VwcG9ydC5odG1sNUNsb25lfHx4LmlzWE1MRG9jKGUpfHwhbXQu
dGVzdCgiPCIrZS5ub2RlTmFtZSsiPiIpP289ZS5jbG9uZU5vZGUoITApOihEdC5pbm5lckhUTUw9
ZS5vdXRlckhUTUwsRHQucmVtb3ZlQ2hpbGQobz1EdC5maXJzdENoaWxkKSksISh4LnN1cHBvcnQu
bm9DbG9uZUV2ZW50JiZ4LnN1cHBvcnQubm9DbG9uZUNoZWNrZWR8fDEhPT1lLm5vZGVUeXBlJiYx
MSE9PWUubm9kZVR5cGV8fHguaXNYTUxEb2MoZSkpKWZvcihyPUZ0KG8pLHM9RnQoZSksYT0wO251
bGwhPShpPXNbYV0pOysrYSlyW2FdJiZPdChpLHJbYV0pO2lmKHQpaWYobilmb3Iocz1zfHxGdChl
KSxyPXJ8fEZ0KG8pLGE9MDtudWxsIT0oaT1zW2FdKTthKyspTXQoaSxyW2FdKTtlbHNlIE10KGUs
byk7cmV0dXJuIHI9RnQobywic2NyaXB0Iiksci5sZW5ndGg+MCYmX3QociwhbCYmRnQoZSwic2Ny
aXB0IikpLHI9cz1pPW51bGwsb30sYnVpbGRGcmFnbWVudDpmdW5jdGlvbihlLHQsbixyKXt2YXIg
aSxvLGEscyxsLHUsYyxwPWUubGVuZ3RoLGY9ZHQodCksZD1bXSxoPTA7Zm9yKDtwPmg7aCsrKWlm
KG89ZVtoXSxvfHwwPT09bylpZigib2JqZWN0Ij09PXgudHlwZShvKSl4Lm1lcmdlKGQsby5ub2Rl
VHlwZT9bb106byk7ZWxzZSBpZih3dC50ZXN0KG8pKXtzPXN8fGYuYXBwZW5kQ2hpbGQodC5jcmVh
dGVFbGVtZW50KCJkaXYiKSksbD0oYnQuZXhlYyhvKXx8WyIiLCIiXSlbMV0udG9Mb3dlckNhc2Uo
KSxjPUF0W2xdfHxBdC5fZGVmYXVsdCxzLmlubmVySFRNTD1jWzFdK28ucmVwbGFjZSh2dCwiPCQx
PjwvJDI+IikrY1syXSxpPWNbMF07d2hpbGUoaS0tKXM9cy5sYXN0Q2hpbGQ7aWYoIXguc3VwcG9y
dC5sZWFkaW5nV2hpdGVzcGFjZSYmeXQudGVzdChvKSYmZC5wdXNoKHQuY3JlYXRlVGV4dE5vZGUo
eXQuZXhlYyhvKVswXSkpLCF4LnN1cHBvcnQudGJvZHkpe289InRhYmxlIiE9PWx8fHh0LnRlc3Qo
byk/Ijx0YWJsZT4iIT09Y1sxXXx8eHQudGVzdChvKT8wOnM6cy5maXJzdENoaWxkLGk9byYmby5j
aGlsZE5vZGVzLmxlbmd0aDt3aGlsZShpLS0peC5ub2RlTmFtZSh1PW8uY2hpbGROb2Rlc1tpXSwi
dGJvZHkiKSYmIXUuY2hpbGROb2Rlcy5sZW5ndGgmJm8ucmVtb3ZlQ2hpbGQodSl9eC5tZXJnZShk
LHMuY2hpbGROb2Rlcykscy50ZXh0Q29udGVudD0iIjt3aGlsZShzLmZpcnN0Q2hpbGQpcy5yZW1v
dmVDaGlsZChzLmZpcnN0Q2hpbGQpO3M9Zi5sYXN0Q2hpbGR9ZWxzZSBkLnB1c2godC5jcmVhdGVU
ZXh0Tm9kZShvKSk7cyYmZi5yZW1vdmVDaGlsZChzKSx4LnN1cHBvcnQuYXBwZW5kQ2hlY2tlZHx8
eC5ncmVwKEZ0KGQsImlucHV0IiksQnQpLGg9MDt3aGlsZShvPWRbaCsrXSlpZigoIXJ8fC0xPT09
eC5pbkFycmF5KG8scikpJiYoYT14LmNvbnRhaW5zKG8ub3duZXJEb2N1bWVudCxvKSxzPUZ0KGYu
YXBwZW5kQ2hpbGQobyksInNjcmlwdCIpLGEmJl90KHMpLG4pKXtpPTA7d2hpbGUobz1zW2krK10p
a3QudGVzdChvLnR5cGV8fCIiKSYmbi5wdXNoKG8pfXJldHVybiBzPW51bGwsZn0sY2xlYW5EYXRh
OmZ1bmN0aW9uKGUsdCl7dmFyIG4scixvLGEscz0wLGw9eC5leHBhbmRvLHU9eC5jYWNoZSxjPXgu
c3VwcG9ydC5kZWxldGVFeHBhbmRvLGY9eC5ldmVudC5zcGVjaWFsO2Zvcig7bnVsbCE9KG49ZVtz
XSk7cysrKWlmKCh0fHx4LmFjY2VwdERhdGEobikpJiYobz1uW2xdLGE9byYmdVtvXSkpe2lmKGEu
ZXZlbnRzKWZvcihyIGluIGEuZXZlbnRzKWZbcl0/eC5ldmVudC5yZW1vdmUobixyKTp4LnJlbW92
ZUV2ZW50KG4scixhLmhhbmRsZSk7CisrdVtvXSYmKGRlbGV0ZSB1W29dLGM/ZGVsZXRlIG5bbF06
dHlwZW9mIG4ucmVtb3ZlQXR0cmlidXRlIT09aT9uLnJlbW92ZUF0dHJpYnV0ZShsKTpuW2xdPW51
bGwscC5wdXNoKG8pKX19LF9ldmFsVXJsOmZ1bmN0aW9uKGUpe3JldHVybiB4LmFqYXgoe3VybDpl
LHR5cGU6IkdFVCIsZGF0YVR5cGU6InNjcmlwdCIsYXN5bmM6ITEsZ2xvYmFsOiExLCJ0aHJvd3Mi
OiEwfSl9fSkseC5mbi5leHRlbmQoe3dyYXBBbGw6ZnVuY3Rpb24oZSl7aWYoeC5pc0Z1bmN0aW9u
KGUpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24odCl7eCh0aGlzKS53cmFwQWxsKGUuY2FsbCh0
aGlzLHQpKX0pO2lmKHRoaXNbMF0pe3ZhciB0PXgoZSx0aGlzWzBdLm93bmVyRG9jdW1lbnQpLmVx
KDApLmNsb25lKCEwKTt0aGlzWzBdLnBhcmVudE5vZGUmJnQuaW5zZXJ0QmVmb3JlKHRoaXNbMF0p
LHQubWFwKGZ1bmN0aW9uKCl7dmFyIGU9dGhpczt3aGlsZShlLmZpcnN0Q2hpbGQmJjE9PT1lLmZp
cnN0Q2hpbGQubm9kZVR5cGUpZT1lLmZpcnN0Q2hpbGQ7cmV0dXJuIGV9KS5hcHBlbmQodGhpcyl9
cmV0dXJuIHRoaXN9LHdyYXBJbm5lcjpmdW5jdGlvbihlKXtyZXR1cm4geC5pc0Z1bmN0aW9uKGUp
P3RoaXMuZWFjaChmdW5jdGlvbih0KXt4KHRoaXMpLndyYXBJbm5lcihlLmNhbGwodGhpcyx0KSl9
KTp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgdD14KHRoaXMpLG49dC5jb250ZW50cygpO24ubGVu
Z3RoP24ud3JhcEFsbChlKTp0LmFwcGVuZChlKX0pfSx3cmFwOmZ1bmN0aW9uKGUpe3ZhciB0PXgu
aXNGdW5jdGlvbihlKTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKG4pe3godGhpcykud3JhcEFs
bCh0P2UuY2FsbCh0aGlzLG4pOmUpfSl9LHVud3JhcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBh
cmVudCgpLmVhY2goZnVuY3Rpb24oKXt4Lm5vZGVOYW1lKHRoaXMsImJvZHkiKXx8eCh0aGlzKS5y
ZXBsYWNlV2l0aCh0aGlzLmNoaWxkTm9kZXMpfSkuZW5kKCl9fSk7dmFyIFB0LFJ0LFd0LCR0PS9h
bHBoYVwoW14pXSpcKS9pLEl0PS9vcGFjaXR5XHMqPVxzKihbXildKikvLHp0PS9eKHRvcHxyaWdo
dHxib3R0b218bGVmdCkkLyxYdD0vXihub25lfHRhYmxlKD8hLWNbZWFdKS4rKS8sVXQ9L15tYXJn
aW4vLFZ0PVJlZ0V4cCgiXigiK3crIikoLiopJCIsImkiKSxZdD1SZWdFeHAoIl4oIit3KyIpKD8h
cHgpW2EteiVdKyQiLCJpIiksSnQ9UmVnRXhwKCJeKFsrLV0pPSgiK3crIikiLCJpIiksR3Q9e0JP
RFk6ImJsb2NrIn0sUXQ9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdmlzaWJpbGl0eToiaGlkZGVuIixk
aXNwbGF5OiJibG9jayJ9LEt0PXtsZXR0ZXJTcGFjaW5nOjAsZm9udFdlaWdodDo0MDB9LFp0PVsi
VG9wIiwiUmlnaHQiLCJCb3R0b20iLCJMZWZ0Il0sZW49WyJXZWJraXQiLCJPIiwiTW96IiwibXMi
XTtmdW5jdGlvbiB0bihlLHQpe2lmKHQgaW4gZSlyZXR1cm4gdDt2YXIgbj10LmNoYXJBdCgwKS50
b1VwcGVyQ2FzZSgpK3Quc2xpY2UoMSkscj10LGk9ZW4ubGVuZ3RoO3doaWxlKGktLSlpZih0PWVu
W2ldK24sdCBpbiBlKXJldHVybiB0O3JldHVybiByfWZ1bmN0aW9uIG5uKGUsdCl7cmV0dXJuIGU9
dHx8ZSwibm9uZSI9PT14LmNzcyhlLCJkaXNwbGF5Iil8fCF4LmNvbnRhaW5zKGUub3duZXJEb2N1
bWVudCxlKX1mdW5jdGlvbiBybihlLHQpe3ZhciBuLHIsaSxvPVtdLGE9MCxzPWUubGVuZ3RoO2Zv
cig7cz5hO2ErKylyPWVbYV0sci5zdHlsZSYmKG9bYV09eC5fZGF0YShyLCJvbGRkaXNwbGF5Iiks
bj1yLnN0eWxlLmRpc3BsYXksdD8ob1thXXx8Im5vbmUiIT09bnx8KHIuc3R5bGUuZGlzcGxheT0i
IiksIiI9PT1yLnN0eWxlLmRpc3BsYXkmJm5uKHIpJiYob1thXT14Ll9kYXRhKHIsIm9sZGRpc3Bs
YXkiLGxuKHIubm9kZU5hbWUpKSkpOm9bYV18fChpPW5uKHIpLChuJiYibm9uZSIhPT1ufHwhaSkm
JnguX2RhdGEociwib2xkZGlzcGxheSIsaT9uOnguY3NzKHIsImRpc3BsYXkiKSkpKTtmb3IoYT0w
O3M+YTthKyspcj1lW2FdLHIuc3R5bGUmJih0JiYibm9uZSIhPT1yLnN0eWxlLmRpc3BsYXkmJiIi
IT09ci5zdHlsZS5kaXNwbGF5fHwoci5zdHlsZS5kaXNwbGF5PXQ/b1thXXx8IiI6Im5vbmUiKSk7
cmV0dXJuIGV9eC5mbi5leHRlbmQoe2NzczpmdW5jdGlvbihlLG4pe3JldHVybiB4LmFjY2Vzcyh0
aGlzLGZ1bmN0aW9uKGUsbixyKXt2YXIgaSxvLGE9e30scz0wO2lmKHguaXNBcnJheShuKSl7Zm9y
KG89UnQoZSksaT1uLmxlbmd0aDtpPnM7cysrKWFbbltzXV09eC5jc3MoZSxuW3NdLCExLG8pO3Jl
dHVybiBhfXJldHVybiByIT09dD94LnN0eWxlKGUsbixyKTp4LmNzcyhlLG4pfSxlLG4sYXJndW1l
bnRzLmxlbmd0aD4xKX0sc2hvdzpmdW5jdGlvbigpe3JldHVybiBybih0aGlzLCEwKX0saGlkZTpm
dW5jdGlvbigpe3JldHVybiBybih0aGlzKX0sdG9nZ2xlOmZ1bmN0aW9uKGUpe3JldHVybiJib29s
ZWFuIj09dHlwZW9mIGU/ZT90aGlzLnNob3coKTp0aGlzLmhpZGUoKTp0aGlzLmVhY2goZnVuY3Rp
b24oKXtubih0aGlzKT94KHRoaXMpLnNob3coKTp4KHRoaXMpLmhpZGUoKX0pfX0pLHguZXh0ZW5k
KHtjc3NIb29rczp7b3BhY2l0eTp7Z2V0OmZ1bmN0aW9uKGUsdCl7aWYodCl7dmFyIG49V3QoZSwi
b3BhY2l0eSIpO3JldHVybiIiPT09bj8iMSI6bn19fX0sY3NzTnVtYmVyOntjb2x1bW5Db3VudDoh
MCxmaWxsT3BhY2l0eTohMCxmb250V2VpZ2h0OiEwLGxpbmVIZWlnaHQ6ITAsb3BhY2l0eTohMCxv
cmRlcjohMCxvcnBoYW5zOiEwLHdpZG93czohMCx6SW5kZXg6ITAsem9vbTohMH0sY3NzUHJvcHM6
eyJmbG9hdCI6eC5zdXBwb3J0LmNzc0Zsb2F0PyJjc3NGbG9hdCI6InN0eWxlRmxvYXQifSxzdHls
ZTpmdW5jdGlvbihlLG4scixpKXtpZihlJiYzIT09ZS5ub2RlVHlwZSYmOCE9PWUubm9kZVR5cGUm
JmUuc3R5bGUpe3ZhciBvLGEscyxsPXguY2FtZWxDYXNlKG4pLHU9ZS5zdHlsZTtpZihuPXguY3Nz
UHJvcHNbbF18fCh4LmNzc1Byb3BzW2xdPXRuKHUsbCkpLHM9eC5jc3NIb29rc1tuXXx8eC5jc3NI
b29rc1tsXSxyPT09dClyZXR1cm4gcyYmImdldCJpbiBzJiYobz1zLmdldChlLCExLGkpKSE9PXQ/
bzp1W25dO2lmKGE9dHlwZW9mIHIsInN0cmluZyI9PT1hJiYobz1KdC5leGVjKHIpKSYmKHI9KG9b
MV0rMSkqb1syXStwYXJzZUZsb2F0KHguY3NzKGUsbikpLGE9Im51bWJlciIpLCEobnVsbD09cnx8
Im51bWJlciI9PT1hJiZpc05hTihyKXx8KCJudW1iZXIiIT09YXx8eC5jc3NOdW1iZXJbbF18fChy
Kz0icHgiKSx4LnN1cHBvcnQuY2xlYXJDbG9uZVN0eWxlfHwiIiE9PXJ8fDAhPT1uLmluZGV4T2Yo
ImJhY2tncm91bmQiKXx8KHVbbl09ImluaGVyaXQiKSxzJiYic2V0ImluIHMmJihyPXMuc2V0KGUs
cixpKSk9PT10KSkpdHJ5e3Vbbl09cn1jYXRjaChjKXt9fX0sY3NzOmZ1bmN0aW9uKGUsbixyLGkp
e3ZhciBvLGEscyxsPXguY2FtZWxDYXNlKG4pO3JldHVybiBuPXguY3NzUHJvcHNbbF18fCh4LmNz
c1Byb3BzW2xdPXRuKGUuc3R5bGUsbCkpLHM9eC5jc3NIb29rc1tuXXx8eC5jc3NIb29rc1tsXSxz
JiYiZ2V0ImluIHMmJihhPXMuZ2V0KGUsITAscikpLGE9PT10JiYoYT1XdChlLG4saSkpLCJub3Jt
YWwiPT09YSYmbiBpbiBLdCYmKGE9S3Rbbl0pLCIiPT09cnx8cj8obz1wYXJzZUZsb2F0KGEpLHI9
PT0hMHx8eC5pc051bWVyaWMobyk/b3x8MDphKTphfX0pLGUuZ2V0Q29tcHV0ZWRTdHlsZT8oUnQ9
ZnVuY3Rpb24odCl7cmV0dXJuIGUuZ2V0Q29tcHV0ZWRTdHlsZSh0LG51bGwpfSxXdD1mdW5jdGlv
bihlLG4scil7dmFyIGksbyxhLHM9cnx8UnQoZSksbD1zP3MuZ2V0UHJvcGVydHlWYWx1ZShuKXx8
c1tuXTp0LHU9ZS5zdHlsZTtyZXR1cm4gcyYmKCIiIT09bHx8eC5jb250YWlucyhlLm93bmVyRG9j
dW1lbnQsZSl8fChsPXguc3R5bGUoZSxuKSksWXQudGVzdChsKSYmVXQudGVzdChuKSYmKGk9dS53
aWR0aCxvPXUubWluV2lkdGgsYT11Lm1heFdpZHRoLHUubWluV2lkdGg9dS5tYXhXaWR0aD11Lndp
ZHRoPWwsbD1zLndpZHRoLHUud2lkdGg9aSx1Lm1pbldpZHRoPW8sdS5tYXhXaWR0aD1hKSksbH0p
OmEuZG9jdW1lbnRFbGVtZW50LmN1cnJlbnRTdHlsZSYmKFJ0PWZ1bmN0aW9uKGUpe3JldHVybiBl
LmN1cnJlbnRTdHlsZX0sV3Q9ZnVuY3Rpb24oZSxuLHIpe3ZhciBpLG8sYSxzPXJ8fFJ0KGUpLGw9
cz9zW25dOnQsdT1lLnN0eWxlO3JldHVybiBudWxsPT1sJiZ1JiZ1W25dJiYobD11W25dKSxZdC50
ZXN0KGwpJiYhenQudGVzdChuKSYmKGk9dS5sZWZ0LG89ZS5ydW50aW1lU3R5bGUsYT1vJiZvLmxl
ZnQsYSYmKG8ubGVmdD1lLmN1cnJlbnRTdHlsZS5sZWZ0KSx1LmxlZnQ9ImZvbnRTaXplIj09PW4/
IjFlbSI6bCxsPXUucGl4ZWxMZWZ0KyJweCIsdS5sZWZ0PWksYSYmKG8ubGVmdD1hKSksIiI9PT1s
PyJhdXRvIjpsfSk7ZnVuY3Rpb24gb24oZSx0LG4pe3ZhciByPVZ0LmV4ZWModCk7cmV0dXJuIHI/
TWF0aC5tYXgoMCxyWzFdLShufHwwKSkrKHJbMl18fCJweCIpOnR9ZnVuY3Rpb24gYW4oZSx0LG4s
cixpKXt2YXIgbz1uPT09KHI/ImJvcmRlciI6ImNvbnRlbnQiKT80OiJ3aWR0aCI9PT10PzE6MCxh
PTA7Zm9yKDs0Pm87bys9MikibWFyZ2luIj09PW4mJihhKz14LmNzcyhlLG4rWnRbb10sITAsaSkp
LHI/KCJjb250ZW50Ij09PW4mJihhLT14LmNzcyhlLCJwYWRkaW5nIitadFtvXSwhMCxpKSksIm1h
cmdpbiIhPT1uJiYoYS09eC5jc3MoZSwiYm9yZGVyIitadFtvXSsiV2lkdGgiLCEwLGkpKSk6KGEr
PXguY3NzKGUsInBhZGRpbmciK1p0W29dLCEwLGkpLCJwYWRkaW5nIiE9PW4mJihhKz14LmNzcyhl
LCJib3JkZXIiK1p0W29dKyJXaWR0aCIsITAsaSkpKTtyZXR1cm4gYX1mdW5jdGlvbiBzbihlLHQs
bil7dmFyIHI9ITAsaT0id2lkdGgiPT09dD9lLm9mZnNldFdpZHRoOmUub2Zmc2V0SGVpZ2h0LG89
UnQoZSksYT14LnN1cHBvcnQuYm94U2l6aW5nJiYiYm9yZGVyLWJveCI9PT14LmNzcyhlLCJib3hT
aXppbmciLCExLG8pO2lmKDA+PWl8fG51bGw9PWkpe2lmKGk9V3QoZSx0LG8pLCgwPml8fG51bGw9
PWkpJiYoaT1lLnN0eWxlW3RdKSxZdC50ZXN0KGkpKXJldHVybiBpO3I9YSYmKHguc3VwcG9ydC5i
b3hTaXppbmdSZWxpYWJsZXx8aT09PWUuc3R5bGVbdF0pLGk9cGFyc2VGbG9hdChpKXx8MH1yZXR1
cm4gaSthbihlLHQsbnx8KGE/ImJvcmRlciI6ImNvbnRlbnQiKSxyLG8pKyJweCJ9ZnVuY3Rpb24g
bG4oZSl7dmFyIHQ9YSxuPUd0W2VdO3JldHVybiBufHwobj11bihlLHQpLCJub25lIiE9PW4mJm58
fChQdD0oUHR8fHgoIjxpZnJhbWUgZnJhbWVib3JkZXI9JzAnIHdpZHRoPScwJyBoZWlnaHQ9JzAn
Lz4iKS5jc3MoImNzc1RleHQiLCJkaXNwbGF5OmJsb2NrICFpbXBvcnRhbnQiKSkuYXBwZW5kVG8o
dC5kb2N1bWVudEVsZW1lbnQpLHQ9KFB0WzBdLmNvbnRlbnRXaW5kb3d8fFB0WzBdLmNvbnRlbnRE
b2N1bWVudCkuZG9jdW1lbnQsdC53cml0ZSgiPCFkb2N0eXBlIGh0bWw+PGh0bWw+PGJvZHk+Iiks
dC5jbG9zZSgpLG49dW4oZSx0KSxQdC5kZXRhY2goKSksR3RbZV09biksbn1mdW5jdGlvbiB1bihl
LHQpe3ZhciBuPXgodC5jcmVhdGVFbGVtZW50KGUpKS5hcHBlbmRUbyh0LmJvZHkpLHI9eC5jc3Mo
blswXSwiZGlzcGxheSIpO3JldHVybiBuLnJlbW92ZSgpLHJ9eC5lYWNoKFsiaGVpZ2h0Iiwid2lk
dGgiXSxmdW5jdGlvbihlLG4pe3guY3NzSG9va3Nbbl09e2dldDpmdW5jdGlvbihlLHIsaSl7cmV0
dXJuIHI/MD09PWUub2Zmc2V0V2lkdGgmJlh0LnRlc3QoeC5jc3MoZSwiZGlzcGxheSIpKT94LnN3
YXAoZSxRdCxmdW5jdGlvbigpe3JldHVybiBzbihlLG4saSl9KTpzbihlLG4saSk6dH0sc2V0OmZ1
bmN0aW9uKGUsdCxyKXt2YXIgaT1yJiZSdChlKTtyZXR1cm4gb24oZSx0LHI/YW4oZSxuLHIseC5z
dXBwb3J0LmJveFNpemluZyYmImJvcmRlci1ib3giPT09eC5jc3MoZSwiYm94U2l6aW5nIiwhMSxp
KSxpKTowKX19fSkseC5zdXBwb3J0Lm9wYWNpdHl8fCh4LmNzc0hvb2tzLm9wYWNpdHk9e2dldDpm
dW5jdGlvbihlLHQpe3JldHVybiBJdC50ZXN0KCh0JiZlLmN1cnJlbnRTdHlsZT9lLmN1cnJlbnRT
dHlsZS5maWx0ZXI6ZS5zdHlsZS5maWx0ZXIpfHwiIik/LjAxKnBhcnNlRmxvYXQoUmVnRXhwLiQx
KSsiIjp0PyIxIjoiIn0sc2V0OmZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5zdHlsZSxyPWUuY3VycmVu
dFN0eWxlLGk9eC5pc051bWVyaWModCk/ImFscGhhKG9wYWNpdHk9IisxMDAqdCsiKSI6IiIsbz1y
JiZyLmZpbHRlcnx8bi5maWx0ZXJ8fCIiO24uem9vbT0xLCh0Pj0xfHwiIj09PXQpJiYiIj09PXgu
dHJpbShvLnJlcGxhY2UoJHQsIiIpKSYmbi5yZW1vdmVBdHRyaWJ1dGUmJihuLnJlbW92ZUF0dHJp
YnV0ZSgiZmlsdGVyIiksIiI9PT10fHxyJiYhci5maWx0ZXIpfHwobi5maWx0ZXI9JHQudGVzdChv
KT9vLnJlcGxhY2UoJHQsaSk6bysiICIraSl9fSkseChmdW5jdGlvbigpe3guc3VwcG9ydC5yZWxp
YWJsZU1hcmdpblJpZ2h0fHwoeC5jc3NIb29rcy5tYXJnaW5SaWdodD17Z2V0OmZ1bmN0aW9uKGUs
bil7cmV0dXJuIG4/eC5zd2FwKGUse2Rpc3BsYXk6ImlubGluZS1ibG9jayJ9LFd0LFtlLCJtYXJn
aW5SaWdodCJdKTp0fX0pLCF4LnN1cHBvcnQucGl4ZWxQb3NpdGlvbiYmeC5mbi5wb3NpdGlvbiYm
eC5lYWNoKFsidG9wIiwibGVmdCJdLGZ1bmN0aW9uKGUsbil7eC5jc3NIb29rc1tuXT17Z2V0OmZ1
bmN0aW9uKGUscil7cmV0dXJuIHI/KHI9V3QoZSxuKSxZdC50ZXN0KHIpP3goZSkucG9zaXRpb24o
KVtuXSsicHgiOnIpOnR9fX0pfSkseC5leHByJiZ4LmV4cHIuZmlsdGVycyYmKHguZXhwci5maWx0
ZXJzLmhpZGRlbj1mdW5jdGlvbihlKXtyZXR1cm4gMD49ZS5vZmZzZXRXaWR0aCYmMD49ZS5vZmZz
ZXRIZWlnaHR8fCF4LnN1cHBvcnQucmVsaWFibGVIaWRkZW5PZmZzZXRzJiYibm9uZSI9PT0oZS5z
dHlsZSYmZS5zdHlsZS5kaXNwbGF5fHx4LmNzcyhlLCJkaXNwbGF5IikpfSx4LmV4cHIuZmlsdGVy
cy52aXNpYmxlPWZ1bmN0aW9uKGUpe3JldHVybiF4LmV4cHIuZmlsdGVycy5oaWRkZW4oZSl9KSx4
LmVhY2goe21hcmdpbjoiIixwYWRkaW5nOiIiLGJvcmRlcjoiV2lkdGgifSxmdW5jdGlvbihlLHQp
e3guY3NzSG9va3NbZSt0XT17ZXhwYW5kOmZ1bmN0aW9uKG4pe3ZhciByPTAsaT17fSxvPSJzdHJp
bmciPT10eXBlb2Ygbj9uLnNwbGl0KCIgIik6W25dO2Zvcig7ND5yO3IrKylpW2UrWnRbcl0rdF09
b1tyXXx8b1tyLTJdfHxvWzBdO3JldHVybiBpfX0sVXQudGVzdChlKXx8KHguY3NzSG9va3NbZSt0
XS5zZXQ9b24pfSk7dmFyIGNuPS8lMjAvZyxwbj0vXFtcXSQvLGZuPS9ccj9cbi9nLGRuPS9eKD86
c3VibWl0fGJ1dHRvbnxpbWFnZXxyZXNldHxmaWxlKSQvaSxobj0vXig/OmlucHV0fHNlbGVjdHx0
ZXh0YXJlYXxrZXlnZW4pL2k7eC5mbi5leHRlbmQoe3NlcmlhbGl6ZTpmdW5jdGlvbigpe3JldHVy
biB4LnBhcmFtKHRoaXMuc2VyaWFsaXplQXJyYXkoKSl9LHNlcmlhbGl6ZUFycmF5OmZ1bmN0aW9u
KCl7cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCl7dmFyIGU9eC5wcm9wKHRoaXMsImVsZW1lbnRz
Iik7cmV0dXJuIGU/eC5tYWtlQXJyYXkoZSk6dGhpc30pLmZpbHRlcihmdW5jdGlvbigpe3ZhciBl
PXRoaXMudHlwZTtyZXR1cm4gdGhpcy5uYW1lJiYheCh0aGlzKS5pcygiOmRpc2FibGVkIikmJmhu
LnRlc3QodGhpcy5ub2RlTmFtZSkmJiFkbi50ZXN0KGUpJiYodGhpcy5jaGVja2VkfHwhQ3QudGVz
dChlKSl9KS5tYXAoZnVuY3Rpb24oZSx0KXt2YXIgbj14KHRoaXMpLnZhbCgpO3JldHVybiBudWxs
PT1uP251bGw6eC5pc0FycmF5KG4pP3gubWFwKG4sZnVuY3Rpb24oZSl7cmV0dXJue25hbWU6dC5u
YW1lLHZhbHVlOmUucmVwbGFjZShmbiwiXHJcbiIpfX0pOntuYW1lOnQubmFtZSx2YWx1ZTpuLnJl
cGxhY2UoZm4sIlxyXG4iKX19KS5nZXQoKX19KSx4LnBhcmFtPWZ1bmN0aW9uKGUsbil7dmFyIHIs
aT1bXSxvPWZ1bmN0aW9uKGUsdCl7dD14LmlzRnVuY3Rpb24odCk/dCgpOm51bGw9PXQ/IiI6dCxp
W2kubGVuZ3RoXT1lbmNvZGVVUklDb21wb25lbnQoZSkrIj0iK2VuY29kZVVSSUNvbXBvbmVudCh0
KX07aWYobj09PXQmJihuPXguYWpheFNldHRpbmdzJiZ4LmFqYXhTZXR0aW5ncy50cmFkaXRpb25h
bCkseC5pc0FycmF5KGUpfHxlLmpxdWVyeSYmIXguaXNQbGFpbk9iamVjdChlKSl4LmVhY2goZSxm
dW5jdGlvbigpe28odGhpcy5uYW1lLHRoaXMudmFsdWUpfSk7ZWxzZSBmb3IociBpbiBlKWduKHIs
ZVtyXSxuLG8pO3JldHVybiBpLmpvaW4oIiYiKS5yZXBsYWNlKGNuLCIrIil9O2Z1bmN0aW9uIGdu
KGUsdCxuLHIpe3ZhciBpO2lmKHguaXNBcnJheSh0KSl4LmVhY2godCxmdW5jdGlvbih0LGkpe258
fHBuLnRlc3QoZSk/cihlLGkpOmduKGUrIlsiKygib2JqZWN0Ij09dHlwZW9mIGk/dDoiIikrIl0i
LGksbixyKX0pO2Vsc2UgaWYobnx8Im9iamVjdCIhPT14LnR5cGUodCkpcihlLHQpO2Vsc2UgZm9y
KGkgaW4gdClnbihlKyJbIitpKyJdIix0W2ldLG4scil9eC5lYWNoKCJibHVyIGZvY3VzIGZvY3Vz
aW4gZm9jdXNvdXQgbG9hZCByZXNpemUgc2Nyb2xsIHVubG9hZCBjbGljayBkYmxjbGljayBtb3Vz
ZWRvd24gbW91c2V1cCBtb3VzZW1vdmUgbW91c2VvdmVyIG1vdXNlb3V0IG1vdXNlZW50ZXIgbW91
c2VsZWF2ZSBjaGFuZ2Ugc2VsZWN0IHN1Ym1pdCBrZXlkb3duIGtleXByZXNzIGtleXVwIGVycm9y
IGNvbnRleHRtZW51Ii5zcGxpdCgiICIpLGZ1bmN0aW9uKGUsdCl7eC5mblt0XT1mdW5jdGlvbihl
LG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjA/dGhpcy5vbih0LG51bGwsZSxuKTp0aGlzLnRy
aWdnZXIodCl9fSkseC5mbi5leHRlbmQoe2hvdmVyOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMu
bW91c2VlbnRlcihlKS5tb3VzZWxlYXZlKHR8fGUpfSxiaW5kOmZ1bmN0aW9uKGUsdCxuKXtyZXR1
cm4gdGhpcy5vbihlLG51bGwsdCxuKX0sdW5iaW5kOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMu
b2ZmKGUsbnVsbCx0KX0sZGVsZWdhdGU6ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHRoaXMub24o
dCxlLG4scil9LHVuZGVsZWdhdGU6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiAxPT09YXJndW1lbnRz
Lmxlbmd0aD90aGlzLm9mZihlLCIqKiIpOnRoaXMub2ZmKHQsZXx8IioqIixuKX19KTt2YXIgbW4s
eW4sdm49eC5ub3coKSxibj0vXD8vLHhuPS8jLiokLyx3bj0vKFs/Jl0pXz1bXiZdKi8sVG49L14o
Lio/KTpbIFx0XSooW15cclxuXSopXHI/JC9nbSxDbj0vXig/OmFib3V0fGFwcHxhcHAtc3RvcmFn
ZXwuKy1leHRlbnNpb258ZmlsZXxyZXN8d2lkZ2V0KTokLyxObj0vXig/OkdFVHxIRUFEKSQvLGtu
PS9eXC9cLy8sRW49L14oW1x3ListXSs6KSg/OlwvXC8oW15cLz8jOl0qKSg/OjooXGQrKXwpfCkv
LFNuPXguZm4ubG9hZCxBbj17fSxqbj17fSxEbj0iKi8iLmNvbmNhdCgiKiIpO3RyeXt5bj1vLmhy
ZWZ9Y2F0Y2goTG4pe3luPWEuY3JlYXRlRWxlbWVudCgiYSIpLHluLmhyZWY9IiIseW49eW4uaHJl
Zn1tbj1Fbi5leGVjKHluLnRvTG93ZXJDYXNlKCkpfHxbXTtmdW5jdGlvbiBIbihlKXtyZXR1cm4g
ZnVuY3Rpb24odCxuKXsic3RyaW5nIiE9dHlwZW9mIHQmJihuPXQsdD0iKiIpO3ZhciByLGk9MCxv
PXQudG9Mb3dlckNhc2UoKS5tYXRjaChUKXx8W107aWYoeC5pc0Z1bmN0aW9uKG4pKXdoaWxlKHI9
b1tpKytdKSIrIj09PXJbMF0/KHI9ci5zbGljZSgxKXx8IioiLChlW3JdPWVbcl18fFtdKS51bnNo
aWZ0KG4pKTooZVtyXT1lW3JdfHxbXSkucHVzaChuKX19ZnVuY3Rpb24gcW4oZSxuLHIsaSl7dmFy
IG89e30sYT1lPT09am47ZnVuY3Rpb24gcyhsKXt2YXIgdTtyZXR1cm4gb1tsXT0hMCx4LmVhY2go
ZVtsXXx8W10sZnVuY3Rpb24oZSxsKXt2YXIgYz1sKG4scixpKTtyZXR1cm4ic3RyaW5nIiE9dHlw
ZW9mIGN8fGF8fG9bY10/YT8hKHU9Yyk6dDoobi5kYXRhVHlwZXMudW5zaGlmdChjKSxzKGMpLCEx
KX0pLHV9cmV0dXJuIHMobi5kYXRhVHlwZXNbMF0pfHwhb1siKiJdJiZzKCIqIil9ZnVuY3Rpb24g
X24oZSxuKXt2YXIgcixpLG89eC5hamF4U2V0dGluZ3MuZmxhdE9wdGlvbnN8fHt9O2ZvcihpIGlu
IG4pbltpXSE9PXQmJigob1tpXT9lOnJ8fChyPXt9KSlbaV09bltpXSk7cmV0dXJuIHImJnguZXh0
ZW5kKCEwLGUsciksZX14LmZuLmxvYWQ9ZnVuY3Rpb24oZSxuLHIpe2lmKCJzdHJpbmciIT10eXBl
b2YgZSYmU24pcmV0dXJuIFNuLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt2YXIgaSxvLGEscz10aGlz
LGw9ZS5pbmRleE9mKCIgIik7cmV0dXJuIGw+PTAmJihpPWUuc2xpY2UobCxlLmxlbmd0aCksZT1l
LnNsaWNlKDAsbCkpLHguaXNGdW5jdGlvbihuKT8ocj1uLG49dCk6biYmIm9iamVjdCI9PXR5cGVv
ZiBuJiYoYT0iUE9TVCIpLHMubGVuZ3RoPjAmJnguYWpheCh7dXJsOmUsdHlwZTphLGRhdGFUeXBl
OiJodG1sIixkYXRhOm59KS5kb25lKGZ1bmN0aW9uKGUpe289YXJndW1lbnRzLHMuaHRtbChpP3go
IjxkaXY+IikuYXBwZW5kKHgucGFyc2VIVE1MKGUpKS5maW5kKGkpOmUpfSkuY29tcGxldGUociYm
ZnVuY3Rpb24oZSx0KXtzLmVhY2gocixvfHxbZS5yZXNwb25zZVRleHQsdCxlXSl9KSx0aGlzfSx4
LmVhY2goWyJhamF4U3RhcnQiLCJhamF4U3RvcCIsImFqYXhDb21wbGV0ZSIsImFqYXhFcnJvciIs
ImFqYXhTdWNjZXNzIiwiYWpheFNlbmQiXSxmdW5jdGlvbihlLHQpe3guZm5bdF09ZnVuY3Rpb24o
ZSl7cmV0dXJuIHRoaXMub24odCxlKX19KSx4LmV4dGVuZCh7YWN0aXZlOjAsbGFzdE1vZGlmaWVk
Ont9LGV0YWc6e30sYWpheFNldHRpbmdzOnt1cmw6eW4sdHlwZToiR0VUIixpc0xvY2FsOkNuLnRl
c3QobW5bMV0pLGdsb2JhbDohMCxwcm9jZXNzRGF0YTohMCxhc3luYzohMCxjb250ZW50VHlwZToi
YXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04IixhY2NlcHRz
OnsiKiI6RG4sdGV4dDoidGV4dC9wbGFpbiIsaHRtbDoidGV4dC9odG1sIix4bWw6ImFwcGxpY2F0
aW9uL3htbCwgdGV4dC94bWwiLGpzb246ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvamF2YXNjcmlw
dCJ9LGNvbnRlbnRzOnt4bWw6L3htbC8saHRtbDovaHRtbC8sanNvbjovanNvbi99LHJlc3BvbnNl
RmllbGRzOnt4bWw6InJlc3BvbnNlWE1MIix0ZXh0OiJyZXNwb25zZVRleHQiLGpzb246InJlc3Bv
bnNlSlNPTiJ9LGNvbnZlcnRlcnM6eyIqIHRleHQiOlN0cmluZywidGV4dCBodG1sIjohMCwidGV4
dCBqc29uIjp4LnBhcnNlSlNPTiwidGV4dCB4bWwiOngucGFyc2VYTUx9LGZsYXRPcHRpb25zOnt1
cmw6ITAsY29udGV4dDohMH19LGFqYXhTZXR1cDpmdW5jdGlvbihlLHQpe3JldHVybiB0P19uKF9u
KGUseC5hamF4U2V0dGluZ3MpLHQpOl9uKHguYWpheFNldHRpbmdzLGUpfSxhamF4UHJlZmlsdGVy
OkhuKEFuKSxhamF4VHJhbnNwb3J0OkhuKGpuKSxhamF4OmZ1bmN0aW9uKGUsbil7Im9iamVjdCI9
PXR5cGVvZiBlJiYobj1lLGU9dCksbj1ufHx7fTt2YXIgcixpLG8sYSxzLGwsdSxjLHA9eC5hamF4
U2V0dXAoe30sbiksZj1wLmNvbnRleHR8fHAsZD1wLmNvbnRleHQmJihmLm5vZGVUeXBlfHxmLmpx
dWVyeSk/eChmKTp4LmV2ZW50LGg9eC5EZWZlcnJlZCgpLGc9eC5DYWxsYmFja3MoIm9uY2UgbWVt
b3J5IiksbT1wLnN0YXR1c0NvZGV8fHt9LHk9e30sdj17fSxiPTAsdz0iY2FuY2VsZWQiLEM9e3Jl
YWR5U3RhdGU6MCxnZXRSZXNwb25zZUhlYWRlcjpmdW5jdGlvbihlKXt2YXIgdDtpZigyPT09Yil7
aWYoIWMpe2M9e307d2hpbGUodD1Ubi5leGVjKGEpKWNbdFsxXS50b0xvd2VyQ2FzZSgpXT10WzJd
fXQ9Y1tlLnRvTG93ZXJDYXNlKCldfXJldHVybiBudWxsPT10P251bGw6dH0sZ2V0QWxsUmVzcG9u
c2VIZWFkZXJzOmZ1bmN0aW9uKCl7cmV0dXJuIDI9PT1iP2E6bnVsbH0sc2V0UmVxdWVzdEhlYWRl
cjpmdW5jdGlvbihlLHQpe3ZhciBuPWUudG9Mb3dlckNhc2UoKTtyZXR1cm4gYnx8KGU9dltuXT12
W25dfHxlLHlbZV09dCksdGhpc30sb3ZlcnJpZGVNaW1lVHlwZTpmdW5jdGlvbihlKXtyZXR1cm4g
Ynx8KHAubWltZVR5cGU9ZSksdGhpc30sc3RhdHVzQ29kZTpmdW5jdGlvbihlKXt2YXIgdDtpZihl
KWlmKDI+Yilmb3IodCBpbiBlKW1bdF09W21bdF0sZVt0XV07ZWxzZSBDLmFsd2F5cyhlW0Muc3Rh
dHVzXSk7cmV0dXJuIHRoaXN9LGFib3J0OmZ1bmN0aW9uKGUpe3ZhciB0PWV8fHc7cmV0dXJuIHUm
JnUuYWJvcnQodCksaygwLHQpLHRoaXN9fTtpZihoLnByb21pc2UoQykuY29tcGxldGU9Zy5hZGQs
Qy5zdWNjZXNzPUMuZG9uZSxDLmVycm9yPUMuZmFpbCxwLnVybD0oKGV8fHAudXJsfHx5bikrIiIp
LnJlcGxhY2UoeG4sIiIpLnJlcGxhY2Uoa24sbW5bMV0rIi8vIikscC50eXBlPW4ubWV0aG9kfHxu
LnR5cGV8fHAubWV0aG9kfHxwLnR5cGUscC5kYXRhVHlwZXM9eC50cmltKHAuZGF0YVR5cGV8fCIq
IikudG9Mb3dlckNhc2UoKS5tYXRjaChUKXx8WyIiXSxudWxsPT1wLmNyb3NzRG9tYWluJiYocj1F
bi5leGVjKHAudXJsLnRvTG93ZXJDYXNlKCkpLHAuY3Jvc3NEb21haW49ISghcnx8clsxXT09PW1u
WzFdJiZyWzJdPT09bW5bMl0mJihyWzNdfHwoImh0dHA6Ij09PXJbMV0/IjgwIjoiNDQzIikpPT09
KG1uWzNdfHwoImh0dHA6Ij09PW1uWzFdPyI4MCI6IjQ0MyIpKSkpLHAuZGF0YSYmcC5wcm9jZXNz
RGF0YSYmInN0cmluZyIhPXR5cGVvZiBwLmRhdGEmJihwLmRhdGE9eC5wYXJhbShwLmRhdGEscC50
cmFkaXRpb25hbCkpLHFuKEFuLHAsbixDKSwyPT09YilyZXR1cm4gQztsPXAuZ2xvYmFsLGwmJjA9
PT14LmFjdGl2ZSsrJiZ4LmV2ZW50LnRyaWdnZXIoImFqYXhTdGFydCIpLHAudHlwZT1wLnR5cGUu
dG9VcHBlckNhc2UoKSxwLmhhc0NvbnRlbnQ9IU5uLnRlc3QocC50eXBlKSxvPXAudXJsLHAuaGFz
Q29udGVudHx8KHAuZGF0YSYmKG89cC51cmwrPShibi50ZXN0KG8pPyImIjoiPyIpK3AuZGF0YSxk
ZWxldGUgcC5kYXRhKSxwLmNhY2hlPT09ITEmJihwLnVybD13bi50ZXN0KG8pP28ucmVwbGFjZSh3
biwiJDFfPSIrdm4rKyk6bysoYm4udGVzdChvKT8iJiI6Ij8iKSsiXz0iK3ZuKyspKSxwLmlmTW9k
aWZpZWQmJih4Lmxhc3RNb2RpZmllZFtvXSYmQy5zZXRSZXF1ZXN0SGVhZGVyKCJJZi1Nb2RpZmll
ZC1TaW5jZSIseC5sYXN0TW9kaWZpZWRbb10pLHguZXRhZ1tvXSYmQy5zZXRSZXF1ZXN0SGVhZGVy
KCJJZi1Ob25lLU1hdGNoIix4LmV0YWdbb10pKSwocC5kYXRhJiZwLmhhc0NvbnRlbnQmJnAuY29u
dGVudFR5cGUhPT0hMXx8bi5jb250ZW50VHlwZSkmJkMuc2V0UmVxdWVzdEhlYWRlcigiQ29udGVu
dC1UeXBlIixwLmNvbnRlbnRUeXBlKSxDLnNldFJlcXVlc3RIZWFkZXIoIkFjY2VwdCIscC5kYXRh
VHlwZXNbMF0mJnAuYWNjZXB0c1twLmRhdGFUeXBlc1swXV0/cC5hY2NlcHRzW3AuZGF0YVR5cGVz
WzBdXSsoIioiIT09cC5kYXRhVHlwZXNbMF0/IiwgIitEbisiOyBxPTAuMDEiOiIiKTpwLmFjY2Vw
dHNbIioiXSk7Zm9yKGkgaW4gcC5oZWFkZXJzKUMuc2V0UmVxdWVzdEhlYWRlcihpLHAuaGVhZGVy
c1tpXSk7aWYocC5iZWZvcmVTZW5kJiYocC5iZWZvcmVTZW5kLmNhbGwoZixDLHApPT09ITF8fDI9
PT1iKSlyZXR1cm4gQy5hYm9ydCgpO3c9ImFib3J0Ijtmb3IoaSBpbntzdWNjZXNzOjEsZXJyb3I6
MSxjb21wbGV0ZToxfSlDW2ldKHBbaV0pO2lmKHU9cW4oam4scCxuLEMpKXtDLnJlYWR5U3RhdGU9
MSxsJiZkLnRyaWdnZXIoImFqYXhTZW5kIixbQyxwXSkscC5hc3luYyYmcC50aW1lb3V0PjAmJihz
PXNldFRpbWVvdXQoZnVuY3Rpb24oKXtDLmFib3J0KCJ0aW1lb3V0Iil9LHAudGltZW91dCkpO3Ry
eXtiPTEsdS5zZW5kKHksayl9Y2F0Y2goTil7aWYoISgyPmIpKXRocm93IE47aygtMSxOKX19ZWxz
ZSBrKC0xLCJObyBUcmFuc3BvcnQiKTtmdW5jdGlvbiBrKGUsbixyLGkpe3ZhciBjLHksdix3LFQs
Tj1uOzIhPT1iJiYoYj0yLHMmJmNsZWFyVGltZW91dChzKSx1PXQsYT1pfHwiIixDLnJlYWR5U3Rh
dGU9ZT4wPzQ6MCxjPWU+PTIwMCYmMzAwPmV8fDMwND09PWUsciYmKHc9TW4ocCxDLHIpKSx3PU9u
KHAsdyxDLGMpLGM/KHAuaWZNb2RpZmllZCYmKFQ9Qy5nZXRSZXNwb25zZUhlYWRlcigiTGFzdC1N
b2RpZmllZCIpLFQmJih4Lmxhc3RNb2RpZmllZFtvXT1UKSxUPUMuZ2V0UmVzcG9uc2VIZWFkZXIo
ImV0YWciKSxUJiYoeC5ldGFnW29dPVQpKSwyMDQ9PT1lfHwiSEVBRCI9PT1wLnR5cGU/Tj0ibm9j
b250ZW50IjozMDQ9PT1lP049Im5vdG1vZGlmaWVkIjooTj13LnN0YXRlLHk9dy5kYXRhLHY9dy5l
cnJvcixjPSF2KSk6KHY9TiwoZXx8IU4pJiYoTj0iZXJyb3IiLDA+ZSYmKGU9MCkpKSxDLnN0YXR1
cz1lLEMuc3RhdHVzVGV4dD0obnx8TikrIiIsYz9oLnJlc29sdmVXaXRoKGYsW3ksTixDXSk6aC5y
ZWplY3RXaXRoKGYsW0MsTix2XSksQy5zdGF0dXNDb2RlKG0pLG09dCxsJiZkLnRyaWdnZXIoYz8i
YWpheFN1Y2Nlc3MiOiJhamF4RXJyb3IiLFtDLHAsYz95OnZdKSxnLmZpcmVXaXRoKGYsW0MsTl0p
LGwmJihkLnRyaWdnZXIoImFqYXhDb21wbGV0ZSIsW0MscF0pLC0teC5hY3RpdmV8fHguZXZlbnQu
dHJpZ2dlcigiYWpheFN0b3AiKSkpfXJldHVybiBDfSxnZXRKU09OOmZ1bmN0aW9uKGUsdCxuKXty
ZXR1cm4geC5nZXQoZSx0LG4sImpzb24iKX0sZ2V0U2NyaXB0OmZ1bmN0aW9uKGUsbil7cmV0dXJu
IHguZ2V0KGUsdCxuLCJzY3JpcHQiKX19KSx4LmVhY2goWyJnZXQiLCJwb3N0Il0sZnVuY3Rpb24o
ZSxuKXt4W25dPWZ1bmN0aW9uKGUscixpLG8pe3JldHVybiB4LmlzRnVuY3Rpb24ocikmJihvPW98
fGksaT1yLHI9dCkseC5hamF4KHt1cmw6ZSx0eXBlOm4sZGF0YVR5cGU6byxkYXRhOnIsc3VjY2Vz
czppfSl9fSk7ZnVuY3Rpb24gTW4oZSxuLHIpe3ZhciBpLG8sYSxzLGw9ZS5jb250ZW50cyx1PWUu
ZGF0YVR5cGVzO3doaWxlKCIqIj09PXVbMF0pdS5zaGlmdCgpLG89PT10JiYobz1lLm1pbWVUeXBl
fHxuLmdldFJlc3BvbnNlSGVhZGVyKCJDb250ZW50LVR5cGUiKSk7aWYobylmb3IocyBpbiBsKWlm
KGxbc10mJmxbc10udGVzdChvKSl7dS51bnNoaWZ0KHMpO2JyZWFrfWlmKHVbMF1pbiByKWE9dVsw
XTtlbHNle2ZvcihzIGluIHIpe2lmKCF1WzBdfHxlLmNvbnZlcnRlcnNbcysiICIrdVswXV0pe2E9
czticmVha31pfHwoaT1zKX1hPWF8fGl9cmV0dXJuIGE/KGEhPT11WzBdJiZ1LnVuc2hpZnQoYSks
clthXSk6dH1mdW5jdGlvbiBPbihlLHQsbixyKXt2YXIgaSxvLGEscyxsLHU9e30sYz1lLmRhdGFU
eXBlcy5zbGljZSgpO2lmKGNbMV0pZm9yKGEgaW4gZS5jb252ZXJ0ZXJzKXVbYS50b0xvd2VyQ2Fz
ZSgpXT1lLmNvbnZlcnRlcnNbYV07bz1jLnNoaWZ0KCk7d2hpbGUobylpZihlLnJlc3BvbnNlRmll
bGRzW29dJiYobltlLnJlc3BvbnNlRmllbGRzW29dXT10KSwhbCYmciYmZS5kYXRhRmlsdGVyJiYo
dD1lLmRhdGFGaWx0ZXIodCxlLmRhdGFUeXBlKSksbD1vLG89Yy5zaGlmdCgpKWlmKCIqIj09PW8p
bz1sO2Vsc2UgaWYoIioiIT09bCYmbCE9PW8pe2lmKGE9dVtsKyIgIitvXXx8dVsiKiAiK29dLCFh
KWZvcihpIGluIHUpaWYocz1pLnNwbGl0KCIgIiksc1sxXT09PW8mJihhPXVbbCsiICIrc1swXV18
fHVbIiogIitzWzBdXSkpe2E9PT0hMD9hPXVbaV06dVtpXSE9PSEwJiYobz1zWzBdLGMudW5zaGlm
dChzWzFdKSk7YnJlYWt9aWYoYSE9PSEwKWlmKGEmJmVbInRocm93cyJdKXQ9YSh0KTtlbHNlIHRy
eXt0PWEodCl9Y2F0Y2gocCl7cmV0dXJue3N0YXRlOiJwYXJzZXJlcnJvciIsZXJyb3I6YT9wOiJO
byBjb252ZXJzaW9uIGZyb20gIitsKyIgdG8gIitvfX19cmV0dXJue3N0YXRlOiJzdWNjZXNzIixk
YXRhOnR9fXguYWpheFNldHVwKHthY2NlcHRzOntzY3JpcHQ6InRleHQvamF2YXNjcmlwdCwgYXBw
bGljYXRpb24vamF2YXNjcmlwdCwgYXBwbGljYXRpb24vZWNtYXNjcmlwdCwgYXBwbGljYXRpb24v
eC1lY21hc2NyaXB0In0sY29udGVudHM6e3NjcmlwdDovKD86amF2YXxlY21hKXNjcmlwdC99LGNv
bnZlcnRlcnM6eyJ0ZXh0IHNjcmlwdCI6ZnVuY3Rpb24oZSl7cmV0dXJuIHguZ2xvYmFsRXZhbChl
KSxlfX19KSx4LmFqYXhQcmVmaWx0ZXIoInNjcmlwdCIsZnVuY3Rpb24oZSl7ZS5jYWNoZT09PXQm
JihlLmNhY2hlPSExKSxlLmNyb3NzRG9tYWluJiYoZS50eXBlPSJHRVQiLGUuZ2xvYmFsPSExKX0p
LHguYWpheFRyYW5zcG9ydCgic2NyaXB0IixmdW5jdGlvbihlKXtpZihlLmNyb3NzRG9tYWluKXt2
YXIgbixyPWEuaGVhZHx8eCgiaGVhZCIpWzBdfHxhLmRvY3VtZW50RWxlbWVudDtyZXR1cm57c2Vu
ZDpmdW5jdGlvbih0LGkpe249YS5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKSxuLmFzeW5jPSEwLGUu
c2NyaXB0Q2hhcnNldCYmKG4uY2hhcnNldD1lLnNjcmlwdENoYXJzZXQpLG4uc3JjPWUudXJsLG4u
b25sb2FkPW4ub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKGUsdCl7KHR8fCFuLnJlYWR5U3Rh
dGV8fC9sb2FkZWR8Y29tcGxldGUvLnRlc3Qobi5yZWFkeVN0YXRlKSkmJihuLm9ubG9hZD1uLm9u
cmVhZHlzdGF0ZWNoYW5nZT1udWxsLG4ucGFyZW50Tm9kZSYmbi5wYXJlbnROb2RlLnJlbW92ZUNo
aWxkKG4pLG49bnVsbCx0fHxpKDIwMCwic3VjY2VzcyIpKX0sci5pbnNlcnRCZWZvcmUobixyLmZp
cnN0Q2hpbGQpfSxhYm9ydDpmdW5jdGlvbigpe24mJm4ub25sb2FkKHQsITApfX19fSk7dmFyIEZu
PVtdLEJuPS8oPSlcPyg/PSZ8JCl8XD9cPy87eC5hamF4U2V0dXAoe2pzb25wOiJjYWxsYmFjayIs
anNvbnBDYWxsYmFjazpmdW5jdGlvbigpe3ZhciBlPUZuLnBvcCgpfHx4LmV4cGFuZG8rIl8iK3Zu
Kys7cmV0dXJuIHRoaXNbZV09ITAsZX19KSx4LmFqYXhQcmVmaWx0ZXIoImpzb24ganNvbnAiLGZ1
bmN0aW9uKG4scixpKXt2YXIgbyxhLHMsbD1uLmpzb25wIT09ITEmJihCbi50ZXN0KG4udXJsKT8i
dXJsIjoic3RyaW5nIj09dHlwZW9mIG4uZGF0YSYmIShuLmNvbnRlbnRUeXBlfHwiIikuaW5kZXhP
ZigiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIikmJkJuLnRlc3Qobi5kYXRhKSYm
ImRhdGEiKTtyZXR1cm4gbHx8Impzb25wIj09PW4uZGF0YVR5cGVzWzBdPyhvPW4uanNvbnBDYWxs
YmFjaz14LmlzRnVuY3Rpb24obi5qc29ucENhbGxiYWNrKT9uLmpzb25wQ2FsbGJhY2soKTpuLmpz
b25wQ2FsbGJhY2ssbD9uW2xdPW5bbF0ucmVwbGFjZShCbiwiJDEiK28pOm4uanNvbnAhPT0hMSYm
KG4udXJsKz0oYm4udGVzdChuLnVybCk/IiYiOiI/Iikrbi5qc29ucCsiPSIrbyksbi5jb252ZXJ0
ZXJzWyJzY3JpcHQganNvbiJdPWZ1bmN0aW9uKCl7cmV0dXJuIHN8fHguZXJyb3IobysiIHdhcyBu
b3QgY2FsbGVkIiksc1swXX0sbi5kYXRhVHlwZXNbMF09Impzb24iLGE9ZVtvXSxlW29dPWZ1bmN0
aW9uKCl7cz1hcmd1bWVudHN9LGkuYWx3YXlzKGZ1bmN0aW9uKCl7ZVtvXT1hLG5bb10mJihuLmpz
b25wQ2FsbGJhY2s9ci5qc29ucENhbGxiYWNrLEZuLnB1c2gobykpLHMmJnguaXNGdW5jdGlvbihh
KSYmYShzWzBdKSxzPWE9dH0pLCJzY3JpcHQiKTp0fSk7dmFyIFBuLFJuLFduPTAsJG49ZS5BY3Rp
dmVYT2JqZWN0JiZmdW5jdGlvbigpe3ZhciBlO2ZvcihlIGluIFBuKVBuW2VdKHQsITApfTtmdW5j
dGlvbiBJbigpe3RyeXtyZXR1cm4gbmV3IGUuWE1MSHR0cFJlcXVlc3R9Y2F0Y2godCl7fX1mdW5j
dGlvbiB6bigpe3RyeXtyZXR1cm4gbmV3IGUuQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTEhU
VFAiKX1jYXRjaCh0KXt9fXguYWpheFNldHRpbmdzLnhocj1lLkFjdGl2ZVhPYmplY3Q/ZnVuY3Rp
b24oKXtyZXR1cm4hdGhpcy5pc0xvY2FsJiZJbigpfHx6bigpfTpJbixSbj14LmFqYXhTZXR0aW5n
cy54aHIoKSx4LnN1cHBvcnQuY29ycz0hIVJuJiYid2l0aENyZWRlbnRpYWxzImluIFJuLFJuPXgu
c3VwcG9ydC5hamF4PSEhUm4sUm4mJnguYWpheFRyYW5zcG9ydChmdW5jdGlvbihuKXtpZighbi5j
cm9zc0RvbWFpbnx8eC5zdXBwb3J0LmNvcnMpe3ZhciByO3JldHVybntzZW5kOmZ1bmN0aW9uKGks
byl7dmFyIGEscyxsPW4ueGhyKCk7aWYobi51c2VybmFtZT9sLm9wZW4obi50eXBlLG4udXJsLG4u
YXN5bmMsbi51c2VybmFtZSxuLnBhc3N3b3JkKTpsLm9wZW4obi50eXBlLG4udXJsLG4uYXN5bmMp
LG4ueGhyRmllbGRzKWZvcihzIGluIG4ueGhyRmllbGRzKWxbc109bi54aHJGaWVsZHNbc107bi5t
aW1lVHlwZSYmbC5vdmVycmlkZU1pbWVUeXBlJiZsLm92ZXJyaWRlTWltZVR5cGUobi5taW1lVHlw
ZSksbi5jcm9zc0RvbWFpbnx8aVsiWC1SZXF1ZXN0ZWQtV2l0aCJdfHwoaVsiWC1SZXF1ZXN0ZWQt
V2l0aCJdPSJYTUxIdHRwUmVxdWVzdCIpO3RyeXtmb3IocyBpbiBpKWwuc2V0UmVxdWVzdEhlYWRl
cihzLGlbc10pfWNhdGNoKHUpe31sLnNlbmQobi5oYXNDb250ZW50JiZuLmRhdGF8fG51bGwpLHI9
ZnVuY3Rpb24oZSxpKXt2YXIgcyx1LGMscDt0cnl7aWYociYmKGl8fDQ9PT1sLnJlYWR5U3RhdGUp
KWlmKHI9dCxhJiYobC5vbnJlYWR5c3RhdGVjaGFuZ2U9eC5ub29wLCRuJiZkZWxldGUgUG5bYV0p
LGkpNCE9PWwucmVhZHlTdGF0ZSYmbC5hYm9ydCgpO2Vsc2V7cD17fSxzPWwuc3RhdHVzLHU9bC5n
ZXRBbGxSZXNwb25zZUhlYWRlcnMoKSwic3RyaW5nIj09dHlwZW9mIGwucmVzcG9uc2VUZXh0JiYo
cC50ZXh0PWwucmVzcG9uc2VUZXh0KTt0cnl7Yz1sLnN0YXR1c1RleHR9Y2F0Y2goZil7Yz0iIn1z
fHwhbi5pc0xvY2FsfHxuLmNyb3NzRG9tYWluPzEyMjM9PT1zJiYocz0yMDQpOnM9cC50ZXh0PzIw
MDo0MDR9fWNhdGNoKGQpe2l8fG8oLTEsZCl9cCYmbyhzLGMscCx1KX0sbi5hc3luYz80PT09bC5y
ZWFkeVN0YXRlP3NldFRpbWVvdXQocik6KGE9KytXbiwkbiYmKFBufHwoUG49e30seChlKS51bmxv
YWQoJG4pKSxQblthXT1yKSxsLm9ucmVhZHlzdGF0ZWNoYW5nZT1yKTpyKCl9LGFib3J0OmZ1bmN0
aW9uKCl7ciYmcih0LCEwKX19fX0pO3ZhciBYbixVbixWbj0vXig/OnRvZ2dsZXxzaG93fGhpZGUp
JC8sWW49UmVnRXhwKCJeKD86KFsrLV0pPXwpKCIrdysiKShbYS16JV0qKSQiLCJpIiksSm49L3F1
ZXVlSG9va3MkLyxHbj1bbnJdLFFuPXsiKiI6W2Z1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5jcmVh
dGVUd2VlbihlLHQpLHI9bi5jdXIoKSxpPVluLmV4ZWModCksbz1pJiZpWzNdfHwoeC5jc3NOdW1i
ZXJbZV0/IiI6InB4IiksYT0oeC5jc3NOdW1iZXJbZV18fCJweCIhPT1vJiYrcikmJlluLmV4ZWMo
eC5jc3Mobi5lbGVtLGUpKSxzPTEsbD0yMDtpZihhJiZhWzNdIT09byl7bz1vfHxhWzNdLGk9aXx8
W10sYT0rcnx8MTtkbyBzPXN8fCIuNSIsYS89cyx4LnN0eWxlKG4uZWxlbSxlLGErbyk7d2hpbGUo
cyE9PShzPW4uY3VyKCkvcikmJjEhPT1zJiYtLWwpfXJldHVybiBpJiYoYT1uLnN0YXJ0PSthfHwr
cnx8MCxuLnVuaXQ9byxuLmVuZD1pWzFdP2ErKGlbMV0rMSkqaVsyXToraVsyXSksbn1dfTtmdW5j
dGlvbiBLbigpe3JldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7WG49dH0pLFhuPXgubm93KCl9
ZnVuY3Rpb24gWm4oZSx0LG4pe3ZhciByLGk9KFFuW3RdfHxbXSkuY29uY2F0KFFuWyIqIl0pLG89
MCxhPWkubGVuZ3RoO2Zvcig7YT5vO28rKylpZihyPWlbb10uY2FsbChuLHQsZSkpcmV0dXJuIHJ9
ZnVuY3Rpb24gZXIoZSx0LG4pe3ZhciByLGksbz0wLGE9R24ubGVuZ3RoLHM9eC5EZWZlcnJlZCgp
LmFsd2F5cyhmdW5jdGlvbigpe2RlbGV0ZSBsLmVsZW19KSxsPWZ1bmN0aW9uKCl7aWYoaSlyZXR1
cm4hMTt2YXIgdD1Ybnx8S24oKSxuPU1hdGgubWF4KDAsdS5zdGFydFRpbWUrdS5kdXJhdGlvbi10
KSxyPW4vdS5kdXJhdGlvbnx8MCxvPTEtcixhPTAsbD11LnR3ZWVucy5sZW5ndGg7Zm9yKDtsPmE7
YSsrKXUudHdlZW5zW2FdLnJ1bihvKTtyZXR1cm4gcy5ub3RpZnlXaXRoKGUsW3UsbyxuXSksMT5v
JiZsP246KHMucmVzb2x2ZVdpdGgoZSxbdV0pLCExKX0sdT1zLnByb21pc2Uoe2VsZW06ZSxwcm9w
czp4LmV4dGVuZCh7fSx0KSxvcHRzOnguZXh0ZW5kKCEwLHtzcGVjaWFsRWFzaW5nOnt9fSxuKSxv
cmlnaW5hbFByb3BlcnRpZXM6dCxvcmlnaW5hbE9wdGlvbnM6bixzdGFydFRpbWU6WG58fEtuKCks
ZHVyYXRpb246bi5kdXJhdGlvbix0d2VlbnM6W10sY3JlYXRlVHdlZW46ZnVuY3Rpb24odCxuKXt2
YXIgcj14LlR3ZWVuKGUsdS5vcHRzLHQsbix1Lm9wdHMuc3BlY2lhbEVhc2luZ1t0XXx8dS5vcHRz
LmVhc2luZyk7cmV0dXJuIHUudHdlZW5zLnB1c2gocikscn0sc3RvcDpmdW5jdGlvbih0KXt2YXIg
bj0wLHI9dD91LnR3ZWVucy5sZW5ndGg6MDtpZihpKXJldHVybiB0aGlzO2ZvcihpPSEwO3I+bjtu
KyspdS50d2VlbnNbbl0ucnVuKDEpO3JldHVybiB0P3MucmVzb2x2ZVdpdGgoZSxbdSx0XSk6cy5y
ZWplY3RXaXRoKGUsW3UsdF0pLHRoaXN9fSksYz11LnByb3BzO2Zvcih0cihjLHUub3B0cy5zcGVj
aWFsRWFzaW5nKTthPm87bysrKWlmKHI9R25bb10uY2FsbCh1LGUsYyx1Lm9wdHMpKXJldHVybiBy
O3JldHVybiB4Lm1hcChjLFpuLHUpLHguaXNGdW5jdGlvbih1Lm9wdHMuc3RhcnQpJiZ1Lm9wdHMu
c3RhcnQuY2FsbChlLHUpLHguZngudGltZXIoeC5leHRlbmQobCx7ZWxlbTplLGFuaW06dSxxdWV1
ZTp1Lm9wdHMucXVldWV9KSksdS5wcm9ncmVzcyh1Lm9wdHMucHJvZ3Jlc3MpLmRvbmUodS5vcHRz
LmRvbmUsdS5vcHRzLmNvbXBsZXRlKS5mYWlsKHUub3B0cy5mYWlsKS5hbHdheXModS5vcHRzLmFs
d2F5cyl9ZnVuY3Rpb24gdHIoZSx0KXt2YXIgbixyLGksbyxhO2ZvcihuIGluIGUpaWYocj14LmNh
bWVsQ2FzZShuKSxpPXRbcl0sbz1lW25dLHguaXNBcnJheShvKSYmKGk9b1sxXSxvPWVbbl09b1sw
XSksbiE9PXImJihlW3JdPW8sZGVsZXRlIGVbbl0pLGE9eC5jc3NIb29rc1tyXSxhJiYiZXhwYW5k
ImluIGEpe289YS5leHBhbmQobyksZGVsZXRlIGVbcl07Zm9yKG4gaW4gbyluIGluIGV8fChlW25d
PW9bbl0sdFtuXT1pKX1lbHNlIHRbcl09aX14LkFuaW1hdGlvbj14LmV4dGVuZChlcix7dHdlZW5l
cjpmdW5jdGlvbihlLHQpe3guaXNGdW5jdGlvbihlKT8odD1lLGU9WyIqIl0pOmU9ZS5zcGxpdCgi
ICIpO3ZhciBuLHI9MCxpPWUubGVuZ3RoO2Zvcig7aT5yO3IrKyluPWVbcl0sUW5bbl09UW5bbl18
fFtdLFFuW25dLnVuc2hpZnQodCl9LHByZWZpbHRlcjpmdW5jdGlvbihlLHQpe3Q/R24udW5zaGlm
dChlKTpHbi5wdXNoKGUpfX0pO2Z1bmN0aW9uIG5yKGUsdCxuKXt2YXIgcixpLG8sYSxzLGwsdT10
aGlzLGM9e30scD1lLnN0eWxlLGY9ZS5ub2RlVHlwZSYmbm4oZSksZD14Ll9kYXRhKGUsImZ4c2hv
dyIpO24ucXVldWV8fChzPXguX3F1ZXVlSG9va3MoZSwiZngiKSxudWxsPT1zLnVucXVldWVkJiYo
cy51bnF1ZXVlZD0wLGw9cy5lbXB0eS5maXJlLHMuZW1wdHkuZmlyZT1mdW5jdGlvbigpe3MudW5x
dWV1ZWR8fGwoKX0pLHMudW5xdWV1ZWQrKyx1LmFsd2F5cyhmdW5jdGlvbigpe3UuYWx3YXlzKGZ1
bmN0aW9uKCl7cy51bnF1ZXVlZC0tLHgucXVldWUoZSwiZngiKS5sZW5ndGh8fHMuZW1wdHkuZmly
ZSgpfSl9KSksMT09PWUubm9kZVR5cGUmJigiaGVpZ2h0ImluIHR8fCJ3aWR0aCJpbiB0KSYmKG4u
b3ZlcmZsb3c9W3Aub3ZlcmZsb3cscC5vdmVyZmxvd1gscC5vdmVyZmxvd1ldLCJpbmxpbmUiPT09
eC5jc3MoZSwiZGlzcGxheSIpJiYibm9uZSI9PT14LmNzcyhlLCJmbG9hdCIpJiYoeC5zdXBwb3J0
LmlubGluZUJsb2NrTmVlZHNMYXlvdXQmJiJpbmxpbmUiIT09bG4oZS5ub2RlTmFtZSk/cC56b29t
PTE6cC5kaXNwbGF5PSJpbmxpbmUtYmxvY2siKSksbi5vdmVyZmxvdyYmKHAub3ZlcmZsb3c9Imhp
ZGRlbiIseC5zdXBwb3J0LnNocmlua1dyYXBCbG9ja3N8fHUuYWx3YXlzKGZ1bmN0aW9uKCl7cC5v
dmVyZmxvdz1uLm92ZXJmbG93WzBdLHAub3ZlcmZsb3dYPW4ub3ZlcmZsb3dbMV0scC5vdmVyZmxv
d1k9bi5vdmVyZmxvd1syXX0pKTtmb3IociBpbiB0KWlmKGk9dFtyXSxWbi5leGVjKGkpKXtpZihk
ZWxldGUgdFtyXSxvPW98fCJ0b2dnbGUiPT09aSxpPT09KGY/ImhpZGUiOiJzaG93IikpY29udGlu
dWU7Y1tyXT1kJiZkW3JdfHx4LnN0eWxlKGUscil9aWYoIXguaXNFbXB0eU9iamVjdChjKSl7ZD8i
aGlkZGVuImluIGQmJihmPWQuaGlkZGVuKTpkPXguX2RhdGEoZSwiZnhzaG93Iix7fSksbyYmKGQu
aGlkZGVuPSFmKSxmP3goZSkuc2hvdygpOnUuZG9uZShmdW5jdGlvbigpe3goZSkuaGlkZSgpfSks
dS5kb25lKGZ1bmN0aW9uKCl7dmFyIHQ7eC5fcmVtb3ZlRGF0YShlLCJmeHNob3ciKTtmb3IodCBp
biBjKXguc3R5bGUoZSx0LGNbdF0pfSk7Zm9yKHIgaW4gYylhPVpuKGY/ZFtyXTowLHIsdSksciBp
biBkfHwoZFtyXT1hLnN0YXJ0LGYmJihhLmVuZD1hLnN0YXJ0LGEuc3RhcnQ9IndpZHRoIj09PXJ8
fCJoZWlnaHQiPT09cj8xOjApKX19ZnVuY3Rpb24gcnIoZSx0LG4scixpKXtyZXR1cm4gbmV3IHJy
LnByb3RvdHlwZS5pbml0KGUsdCxuLHIsaSl9eC5Ud2Vlbj1ycixyci5wcm90b3R5cGU9e2NvbnN0
cnVjdG9yOnJyLGluaXQ6ZnVuY3Rpb24oZSx0LG4scixpLG8pe3RoaXMuZWxlbT1lLHRoaXMucHJv
cD1uLHRoaXMuZWFzaW5nPWl8fCJzd2luZyIsdGhpcy5vcHRpb25zPXQsdGhpcy5zdGFydD10aGlz
Lm5vdz10aGlzLmN1cigpLHRoaXMuZW5kPXIsdGhpcy51bml0PW98fCh4LmNzc051bWJlcltuXT8i
IjoicHgiKX0sY3VyOmZ1bmN0aW9uKCl7dmFyIGU9cnIucHJvcEhvb2tzW3RoaXMucHJvcF07cmV0
dXJuIGUmJmUuZ2V0P2UuZ2V0KHRoaXMpOnJyLnByb3BIb29rcy5fZGVmYXVsdC5nZXQodGhpcyl9
LHJ1bjpmdW5jdGlvbihlKXt2YXIgdCxuPXJyLnByb3BIb29rc1t0aGlzLnByb3BdO3JldHVybiB0
aGlzLnBvcz10PXRoaXMub3B0aW9ucy5kdXJhdGlvbj94LmVhc2luZ1t0aGlzLmVhc2luZ10oZSx0
aGlzLm9wdGlvbnMuZHVyYXRpb24qZSwwLDEsdGhpcy5vcHRpb25zLmR1cmF0aW9uKTplLHRoaXMu
bm93PSh0aGlzLmVuZC10aGlzLnN0YXJ0KSp0K3RoaXMuc3RhcnQsdGhpcy5vcHRpb25zLnN0ZXAm
JnRoaXMub3B0aW9ucy5zdGVwLmNhbGwodGhpcy5lbGVtLHRoaXMubm93LHRoaXMpLG4mJm4uc2V0
P24uc2V0KHRoaXMpOnJyLnByb3BIb29rcy5fZGVmYXVsdC5zZXQodGhpcyksdGhpc319LHJyLnBy
b3RvdHlwZS5pbml0LnByb3RvdHlwZT1yci5wcm90b3R5cGUscnIucHJvcEhvb2tzPXtfZGVmYXVs
dDp7Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiBudWxsPT1lLmVsZW1bZS5wcm9wXXx8ZS5l
bGVtLnN0eWxlJiZudWxsIT1lLmVsZW0uc3R5bGVbZS5wcm9wXT8odD14LmNzcyhlLmVsZW0sZS5w
cm9wLCIiKSx0JiYiYXV0byIhPT10P3Q6MCk6ZS5lbGVtW2UucHJvcF19LHNldDpmdW5jdGlvbihl
KXt4LmZ4LnN0ZXBbZS5wcm9wXT94LmZ4LnN0ZXBbZS5wcm9wXShlKTplLmVsZW0uc3R5bGUmJihu
dWxsIT1lLmVsZW0uc3R5bGVbeC5jc3NQcm9wc1tlLnByb3BdXXx8eC5jc3NIb29rc1tlLnByb3Bd
KT94LnN0eWxlKGUuZWxlbSxlLnByb3AsZS5ub3crZS51bml0KTplLmVsZW1bZS5wcm9wXT1lLm5v
d319fSxyci5wcm9wSG9va3Muc2Nyb2xsVG9wPXJyLnByb3BIb29rcy5zY3JvbGxMZWZ0PXtzZXQ6
ZnVuY3Rpb24oZSl7ZS5lbGVtLm5vZGVUeXBlJiZlLmVsZW0ucGFyZW50Tm9kZSYmKGUuZWxlbVtl
LnByb3BdPWUubm93KX19LHguZWFjaChbInRvZ2dsZSIsInNob3ciLCJoaWRlIl0sZnVuY3Rpb24o
ZSx0KXt2YXIgbj14LmZuW3RdO3guZm5bdF09ZnVuY3Rpb24oZSxyLGkpe3JldHVybiBudWxsPT1l
fHwiYm9vbGVhbiI9PXR5cGVvZiBlP24uYXBwbHkodGhpcyxhcmd1bWVudHMpOnRoaXMuYW5pbWF0
ZShpcih0LCEwKSxlLHIsaSl9fSkseC5mbi5leHRlbmQoe2ZhZGVUbzpmdW5jdGlvbihlLHQsbixy
KXtyZXR1cm4gdGhpcy5maWx0ZXIobm4pLmNzcygib3BhY2l0eSIsMCkuc2hvdygpLmVuZCgpLmFu
aW1hdGUoe29wYWNpdHk6dH0sZSxuLHIpfSxhbmltYXRlOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBp
PXguaXNFbXB0eU9iamVjdChlKSxvPXguc3BlZWQodCxuLHIpLGE9ZnVuY3Rpb24oKXt2YXIgdD1l
cih0aGlzLHguZXh0ZW5kKHt9LGUpLG8pOyhpfHx4Ll9kYXRhKHRoaXMsImZpbmlzaCIpKSYmdC5z
dG9wKCEwKX07cmV0dXJuIGEuZmluaXNoPWEsaXx8by5xdWV1ZT09PSExP3RoaXMuZWFjaChhKTp0
aGlzLnF1ZXVlKG8ucXVldWUsYSl9LHN0b3A6ZnVuY3Rpb24oZSxuLHIpe3ZhciBpPWZ1bmN0aW9u
KGUpe3ZhciB0PWUuc3RvcDtkZWxldGUgZS5zdG9wLHQocil9O3JldHVybiJzdHJpbmciIT10eXBl
b2YgZSYmKHI9bixuPWUsZT10KSxuJiZlIT09ITEmJnRoaXMucXVldWUoZXx8ImZ4IixbXSksdGhp
cy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9ITAsbj1udWxsIT1lJiZlKyJxdWV1ZUhvb2tzIixvPXgu
dGltZXJzLGE9eC5fZGF0YSh0aGlzKTtpZihuKWFbbl0mJmFbbl0uc3RvcCYmaShhW25dKTtlbHNl
IGZvcihuIGluIGEpYVtuXSYmYVtuXS5zdG9wJiZKbi50ZXN0KG4pJiZpKGFbbl0pO2ZvcihuPW8u
bGVuZ3RoO24tLTspb1tuXS5lbGVtIT09dGhpc3x8bnVsbCE9ZSYmb1tuXS5xdWV1ZSE9PWV8fChv
W25dLmFuaW0uc3RvcChyKSx0PSExLG8uc3BsaWNlKG4sMSkpOyh0fHwhcikmJnguZGVxdWV1ZSh0
aGlzLGUpfSl9LGZpbmlzaDpmdW5jdGlvbihlKXtyZXR1cm4gZSE9PSExJiYoZT1lfHwiZngiKSx0
aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgdCxuPXguX2RhdGEodGhpcykscj1uW2UrInF1ZXVlIl0s
aT1uW2UrInF1ZXVlSG9va3MiXSxvPXgudGltZXJzLGE9cj9yLmxlbmd0aDowO2ZvcihuLmZpbmlz
aD0hMCx4LnF1ZXVlKHRoaXMsZSxbXSksaSYmaS5zdG9wJiZpLnN0b3AuY2FsbCh0aGlzLCEwKSx0
PW8ubGVuZ3RoO3QtLTspb1t0XS5lbGVtPT09dGhpcyYmb1t0XS5xdWV1ZT09PWUmJihvW3RdLmFu
aW0uc3RvcCghMCksby5zcGxpY2UodCwxKSk7Zm9yKHQ9MDthPnQ7dCsrKXJbdF0mJnJbdF0uZmlu
aXNoJiZyW3RdLmZpbmlzaC5jYWxsKHRoaXMpO2RlbGV0ZSBuLmZpbmlzaH0pfX0pO2Z1bmN0aW9u
IGlyKGUsdCl7dmFyIG4scj17aGVpZ2h0OmV9LGk9MDtmb3IodD10PzE6MDs0Pmk7aSs9Mi10KW49
WnRbaV0sclsibWFyZ2luIituXT1yWyJwYWRkaW5nIituXT1lO3JldHVybiB0JiYoci5vcGFjaXR5
PXIud2lkdGg9ZSkscn14LmVhY2goe3NsaWRlRG93bjppcigic2hvdyIpLHNsaWRlVXA6aXIoImhp
ZGUiKSxzbGlkZVRvZ2dsZTppcigidG9nZ2xlIiksZmFkZUluOntvcGFjaXR5OiJzaG93In0sZmFk
ZU91dDp7b3BhY2l0eToiaGlkZSJ9LGZhZGVUb2dnbGU6e29wYWNpdHk6InRvZ2dsZSJ9fSxmdW5j
dGlvbihlLHQpe3guZm5bZV09ZnVuY3Rpb24oZSxuLHIpe3JldHVybiB0aGlzLmFuaW1hdGUodCxl
LG4scil9fSkseC5zcGVlZD1mdW5jdGlvbihlLHQsbil7dmFyIHI9ZSYmIm9iamVjdCI9PXR5cGVv
ZiBlP3guZXh0ZW5kKHt9LGUpOntjb21wbGV0ZTpufHwhbiYmdHx8eC5pc0Z1bmN0aW9uKGUpJiZl
LGR1cmF0aW9uOmUsZWFzaW5nOm4mJnR8fHQmJiF4LmlzRnVuY3Rpb24odCkmJnR9O3JldHVybiBy
LmR1cmF0aW9uPXguZngub2ZmPzA6Im51bWJlciI9PXR5cGVvZiByLmR1cmF0aW9uP3IuZHVyYXRp
b246ci5kdXJhdGlvbiBpbiB4LmZ4LnNwZWVkcz94LmZ4LnNwZWVkc1tyLmR1cmF0aW9uXTp4LmZ4
LnNwZWVkcy5fZGVmYXVsdCwobnVsbD09ci5xdWV1ZXx8ci5xdWV1ZT09PSEwKSYmKHIucXVldWU9
ImZ4Iiksci5vbGQ9ci5jb21wbGV0ZSxyLmNvbXBsZXRlPWZ1bmN0aW9uKCl7eC5pc0Z1bmN0aW9u
KHIub2xkKSYmci5vbGQuY2FsbCh0aGlzKSxyLnF1ZXVlJiZ4LmRlcXVldWUodGhpcyxyLnF1ZXVl
KX0scn0seC5lYXNpbmc9e2xpbmVhcjpmdW5jdGlvbihlKXtyZXR1cm4gZX0sc3dpbmc6ZnVuY3Rp
b24oZSl7cmV0dXJuLjUtTWF0aC5jb3MoZSpNYXRoLlBJKS8yfX0seC50aW1lcnM9W10seC5meD1y
ci5wcm90b3R5cGUuaW5pdCx4LmZ4LnRpY2s9ZnVuY3Rpb24oKXt2YXIgZSxuPXgudGltZXJzLHI9
MDtmb3IoWG49eC5ub3coKTtuLmxlbmd0aD5yO3IrKyllPW5bcl0sZSgpfHxuW3JdIT09ZXx8bi5z
cGxpY2Uoci0tLDEpO24ubGVuZ3RofHx4LmZ4LnN0b3AoKSxYbj10fSx4LmZ4LnRpbWVyPWZ1bmN0
aW9uKGUpe2UoKSYmeC50aW1lcnMucHVzaChlKSYmeC5meC5zdGFydCgpfSx4LmZ4LmludGVydmFs
PTEzLHguZnguc3RhcnQ9ZnVuY3Rpb24oKXtVbnx8KFVuPXNldEludGVydmFsKHguZngudGljayx4
LmZ4LmludGVydmFsKSl9LHguZnguc3RvcD1mdW5jdGlvbigpe2NsZWFySW50ZXJ2YWwoVW4pLFVu
PW51bGx9LHguZnguc3BlZWRzPXtzbG93OjYwMCxmYXN0OjIwMCxfZGVmYXVsdDo0MDB9LHguZngu
c3RlcD17fSx4LmV4cHImJnguZXhwci5maWx0ZXJzJiYoeC5leHByLmZpbHRlcnMuYW5pbWF0ZWQ9
ZnVuY3Rpb24oZSl7cmV0dXJuIHguZ3JlcCh4LnRpbWVycyxmdW5jdGlvbih0KXtyZXR1cm4gZT09
PXQuZWxlbX0pLmxlbmd0aH0pLHguZm4ub2Zmc2V0PWZ1bmN0aW9uKGUpe2lmKGFyZ3VtZW50cy5s
ZW5ndGgpcmV0dXJuIGU9PT10P3RoaXM6dGhpcy5lYWNoKGZ1bmN0aW9uKHQpe3gub2Zmc2V0LnNl
dE9mZnNldCh0aGlzLGUsdCl9KTt2YXIgbixyLG89e3RvcDowLGxlZnQ6MH0sYT10aGlzWzBdLHM9
YSYmYS5vd25lckRvY3VtZW50O2lmKHMpcmV0dXJuIG49cy5kb2N1bWVudEVsZW1lbnQseC5jb250
YWlucyhuLGEpPyh0eXBlb2YgYS5nZXRCb3VuZGluZ0NsaWVudFJlY3QhPT1pJiYobz1hLmdldEJv
dW5kaW5nQ2xpZW50UmVjdCgpKSxyPW9yKHMpLHt0b3A6by50b3ArKHIucGFnZVlPZmZzZXR8fG4u
c2Nyb2xsVG9wKS0obi5jbGllbnRUb3B8fDApLGxlZnQ6by5sZWZ0KyhyLnBhZ2VYT2Zmc2V0fHxu
LnNjcm9sbExlZnQpLShuLmNsaWVudExlZnR8fDApfSk6b30seC5vZmZzZXQ9e3NldE9mZnNldDpm
dW5jdGlvbihlLHQsbil7dmFyIHI9eC5jc3MoZSwicG9zaXRpb24iKTsic3RhdGljIj09PXImJihl
LnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIpO3ZhciBpPXgoZSksbz1pLm9mZnNldCgpLGE9eC5j
c3MoZSwidG9wIikscz14LmNzcyhlLCJsZWZ0IiksbD0oImFic29sdXRlIj09PXJ8fCJmaXhlZCI9
PT1yKSYmeC5pbkFycmF5KCJhdXRvIixbYSxzXSk+LTEsdT17fSxjPXt9LHAsZjtsPyhjPWkucG9z
aXRpb24oKSxwPWMudG9wLGY9Yy5sZWZ0KToocD1wYXJzZUZsb2F0KGEpfHwwLGY9cGFyc2VGbG9h
dChzKXx8MCkseC5pc0Z1bmN0aW9uKHQpJiYodD10LmNhbGwoZSxuLG8pKSxudWxsIT10LnRvcCYm
KHUudG9wPXQudG9wLW8udG9wK3ApLG51bGwhPXQubGVmdCYmKHUubGVmdD10LmxlZnQtby5sZWZ0
K2YpLCJ1c2luZyJpbiB0P3QudXNpbmcuY2FsbChlLHUpOmkuY3NzKHUpfX0seC5mbi5leHRlbmQo
e3Bvc2l0aW9uOmZ1bmN0aW9uKCl7aWYodGhpc1swXSl7dmFyIGUsdCxuPXt0b3A6MCxsZWZ0OjB9
LHI9dGhpc1swXTtyZXR1cm4iZml4ZWQiPT09eC5jc3MociwicG9zaXRpb24iKT90PXIuZ2V0Qm91
bmRpbmdDbGllbnRSZWN0KCk6KGU9dGhpcy5vZmZzZXRQYXJlbnQoKSx0PXRoaXMub2Zmc2V0KCks
eC5ub2RlTmFtZShlWzBdLCJodG1sIil8fChuPWUub2Zmc2V0KCkpLG4udG9wKz14LmNzcyhlWzBd
LCJib3JkZXJUb3BXaWR0aCIsITApLG4ubGVmdCs9eC5jc3MoZVswXSwiYm9yZGVyTGVmdFdpZHRo
IiwhMCkpLHt0b3A6dC50b3Atbi50b3AteC5jc3MociwibWFyZ2luVG9wIiwhMCksbGVmdDp0Lmxl
ZnQtbi5sZWZ0LXguY3NzKHIsIm1hcmdpbkxlZnQiLCEwKX19fSxvZmZzZXRQYXJlbnQ6ZnVuY3Rp
b24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9mZnNldFBhcmVudHx8
czt3aGlsZShlJiYheC5ub2RlTmFtZShlLCJodG1sIikmJiJzdGF0aWMiPT09eC5jc3MoZSwicG9z
aXRpb24iKSllPWUub2Zmc2V0UGFyZW50O3JldHVybiBlfHxzfSl9fSkseC5lYWNoKHtzY3JvbGxM
ZWZ0OiJwYWdlWE9mZnNldCIsc2Nyb2xsVG9wOiJwYWdlWU9mZnNldCJ9LGZ1bmN0aW9uKGUsbil7
dmFyIHI9L1kvLnRlc3Qobik7eC5mbltlXT1mdW5jdGlvbihpKXtyZXR1cm4geC5hY2Nlc3ModGhp
cyxmdW5jdGlvbihlLGksbyl7dmFyIGE9b3IoZSk7cmV0dXJuIG89PT10P2E/biBpbiBhP2Fbbl06
YS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbaV06ZVtpXTooYT9hLnNjcm9sbFRvKHI/eChhKS5z
Y3JvbGxMZWZ0KCk6byxyP286eChhKS5zY3JvbGxUb3AoKSk6ZVtpXT1vLHQpfSxlLGksYXJndW1l
bnRzLmxlbmd0aCxudWxsKX19KTtmdW5jdGlvbiBvcihlKXtyZXR1cm4geC5pc1dpbmRvdyhlKT9l
Ojk9PT1lLm5vZGVUeXBlP2UuZGVmYXVsdFZpZXd8fGUucGFyZW50V2luZG93OiExfXguZWFjaCh7
SGVpZ2h0OiJoZWlnaHQiLFdpZHRoOiJ3aWR0aCJ9LGZ1bmN0aW9uKGUsbil7eC5lYWNoKHtwYWRk
aW5nOiJpbm5lciIrZSxjb250ZW50Om4sIiI6Im91dGVyIitlfSxmdW5jdGlvbihyLGkpe3guZm5b
aV09ZnVuY3Rpb24oaSxvKXt2YXIgYT1hcmd1bWVudHMubGVuZ3RoJiYocnx8ImJvb2xlYW4iIT10
eXBlb2YgaSkscz1yfHwoaT09PSEwfHxvPT09ITA/Im1hcmdpbiI6ImJvcmRlciIpO3JldHVybiB4
LmFjY2Vzcyh0aGlzLGZ1bmN0aW9uKG4scixpKXt2YXIgbztyZXR1cm4geC5pc1dpbmRvdyhuKT9u
LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFsiY2xpZW50IitlXTo5PT09bi5ub2RlVHlwZT8obz1u
LmRvY3VtZW50RWxlbWVudCxNYXRoLm1heChuLmJvZHlbInNjcm9sbCIrZV0sb1sic2Nyb2xsIitl
XSxuLmJvZHlbIm9mZnNldCIrZV0sb1sib2Zmc2V0IitlXSxvWyJjbGllbnQiK2VdKSk6aT09PXQ/
eC5jc3MobixyLHMpOnguc3R5bGUobixyLGkscyl9LG4sYT9pOnQsYSxudWxsKX19KX0pLHguZm4u
c2l6ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxlbmd0aH0seC5mbi5hbmRTZWxmPXguZm4uYWRk
QmFjaywib2JqZWN0Ij09dHlwZW9mIG1vZHVsZSYmbW9kdWxlJiYib2JqZWN0Ij09dHlwZW9mIG1v
ZHVsZS5leHBvcnRzP21vZHVsZS5leHBvcnRzPXg6KGUualF1ZXJ5PWUuJD14LCJmdW5jdGlvbiI9
PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQmJmRlZmluZSgianF1ZXJ5IixbXSxmdW5jdGlvbigp
e3JldHVybiB4fSkpfSkod2luZG93KTsKK2RpZmYgLS1naXQgYS93ZWIvYWpheC9saWJzL2pxdWVy
eS8yLjAuMy9qcXVlcnkubWluLmpzIGIvd2ViL2FqYXgvbGlicy9qcXVlcnkvMi4wLjMvanF1ZXJ5
Lm1pbi5qcworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjlhODViZDMKKy0t
LSAvZGV2L251bGwKKysrKyBiL3dlYi9hamF4L2xpYnMvanF1ZXJ5LzIuMC4zL2pxdWVyeS5taW4u
anMKK0BAIC0wLDAgKzEsNiBAQAorKy8qISBqUXVlcnkgdjIuMC4zIHwgKGMpIDIwMDUsIDIwMTMg
alF1ZXJ5IEZvdW5kYXRpb24sIEluYy4gfCBqcXVlcnkub3JnL2xpY2Vuc2UKKysvL0Agc291cmNl
TWFwcGluZ1VSTD1qcXVlcnkubWluLm1hcAorKyovCisrKGZ1bmN0aW9uKGUsdW5kZWZpbmVkKXt2
YXIgdCxuLHI9dHlwZW9mIHVuZGVmaW5lZCxpPWUubG9jYXRpb24sbz1lLmRvY3VtZW50LHM9by5k
b2N1bWVudEVsZW1lbnQsYT1lLmpRdWVyeSx1PWUuJCxsPXt9LGM9W10scD0iMi4wLjMiLGY9Yy5j
b25jYXQsaD1jLnB1c2gsZD1jLnNsaWNlLGc9Yy5pbmRleE9mLG09bC50b1N0cmluZyx5PWwuaGFz
T3duUHJvcGVydHksdj1wLnRyaW0seD1mdW5jdGlvbihlLG4pe3JldHVybiBuZXcgeC5mbi5pbml0
KGUsbix0KX0sYj0vWystXT8oPzpcZCpcLnwpXGQrKD86W2VFXVsrLV0/XGQrfCkvLnNvdXJjZSx3
PS9cUysvZyxUPS9eKD86XHMqKDxbXHdcV10rPilbXj5dKnwjKFtcdy1dKikpJC8sQz0vXjwoXHcr
KVxzKlwvPz4oPzo8XC9cMT58KSQvLGs9L14tbXMtLyxOPS8tKFtcZGEtel0pL2dpLEU9ZnVuY3Rp
b24oZSx0KXtyZXR1cm4gdC50b1VwcGVyQ2FzZSgpfSxTPWZ1bmN0aW9uKCl7by5yZW1vdmVFdmVu
dExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixTLCExKSxlLnJlbW92ZUV2ZW50TGlzdGVuZXIo
ImxvYWQiLFMsITEpLHgucmVhZHkoKX07eC5mbj14LnByb3RvdHlwZT17anF1ZXJ5OnAsY29uc3Ry
dWN0b3I6eCxpbml0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpO2lmKCFlKXJldHVybiB0aGlzO2lm
KCJzdHJpbmciPT10eXBlb2YgZSl7aWYocj0iPCI9PT1lLmNoYXJBdCgwKSYmIj4iPT09ZS5jaGFy
QXQoZS5sZW5ndGgtMSkmJmUubGVuZ3RoPj0zP1tudWxsLGUsbnVsbF06VC5leGVjKGUpLCFyfHwh
clsxXSYmdClyZXR1cm4hdHx8dC5qcXVlcnk/KHR8fG4pLmZpbmQoZSk6dGhpcy5jb25zdHJ1Y3Rv
cih0KS5maW5kKGUpO2lmKHJbMV0pe2lmKHQ9dCBpbnN0YW5jZW9mIHg/dFswXTp0LHgubWVyZ2Uo
dGhpcyx4LnBhcnNlSFRNTChyWzFdLHQmJnQubm9kZVR5cGU/dC5vd25lckRvY3VtZW50fHx0Om8s
ITApKSxDLnRlc3QoclsxXSkmJnguaXNQbGFpbk9iamVjdCh0KSlmb3IociBpbiB0KXguaXNGdW5j
dGlvbih0aGlzW3JdKT90aGlzW3JdKHRbcl0pOnRoaXMuYXR0cihyLHRbcl0pO3JldHVybiB0aGlz
fXJldHVybiBpPW8uZ2V0RWxlbWVudEJ5SWQoclsyXSksaSYmaS5wYXJlbnROb2RlJiYodGhpcy5s
ZW5ndGg9MSx0aGlzWzBdPWkpLHRoaXMuY29udGV4dD1vLHRoaXMuc2VsZWN0b3I9ZSx0aGlzfXJl
dHVybiBlLm5vZGVUeXBlPyh0aGlzLmNvbnRleHQ9dGhpc1swXT1lLHRoaXMubGVuZ3RoPTEsdGhp
cyk6eC5pc0Z1bmN0aW9uKGUpP24ucmVhZHkoZSk6KGUuc2VsZWN0b3IhPT11bmRlZmluZWQmJih0
aGlzLnNlbGVjdG9yPWUuc2VsZWN0b3IsdGhpcy5jb250ZXh0PWUuY29udGV4dCkseC5tYWtlQXJy
YXkoZSx0aGlzKSl9LHNlbGVjdG9yOiIiLGxlbmd0aDowLHRvQXJyYXk6ZnVuY3Rpb24oKXtyZXR1
cm4gZC5jYWxsKHRoaXMpfSxnZXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWU/dGhpcy50b0Fy
cmF5KCk6MD5lP3RoaXNbdGhpcy5sZW5ndGgrZV06dGhpc1tlXX0scHVzaFN0YWNrOmZ1bmN0aW9u
KGUpe3ZhciB0PXgubWVyZ2UodGhpcy5jb25zdHJ1Y3RvcigpLGUpO3JldHVybiB0LnByZXZPYmpl
Y3Q9dGhpcyx0LmNvbnRleHQ9dGhpcy5jb250ZXh0LHR9LGVhY2g6ZnVuY3Rpb24oZSx0KXtyZXR1
cm4geC5lYWNoKHRoaXMsZSx0KX0scmVhZHk6ZnVuY3Rpb24oZSl7cmV0dXJuIHgucmVhZHkucHJv
bWlzZSgpLmRvbmUoZSksdGhpc30sc2xpY2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wdXNoU3Rh
Y2soZC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSxmaXJzdDpmdW5jdGlvbigpe3JldHVybiB0aGlz
LmVxKDApfSxsYXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEoLTEpfSxlcTpmdW5jdGlvbihl
KXt2YXIgdD10aGlzLmxlbmd0aCxuPStlKygwPmU/dDowKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2so
bj49MCYmdD5uP1t0aGlzW25dXTpbXSl9LG1hcDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wdXNo
U3RhY2soeC5tYXAodGhpcyxmdW5jdGlvbih0LG4pe3JldHVybiBlLmNhbGwodCxuLHQpfSkpfSxl
bmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcmV2T2JqZWN0fHx0aGlzLmNvbnN0cnVjdG9yKG51
bGwpfSxwdXNoOmgsc29ydDpbXS5zb3J0LHNwbGljZTpbXS5zcGxpY2V9LHguZm4uaW5pdC5wcm90
b3R5cGU9eC5mbix4LmV4dGVuZD14LmZuLmV4dGVuZD1mdW5jdGlvbigpe3ZhciBlLHQsbixyLGks
byxzPWFyZ3VtZW50c1swXXx8e30sYT0xLHU9YXJndW1lbnRzLmxlbmd0aCxsPSExO2ZvcigiYm9v
bGVhbiI9PXR5cGVvZiBzJiYobD1zLHM9YXJndW1lbnRzWzFdfHx7fSxhPTIpLCJvYmplY3QiPT10
eXBlb2Ygc3x8eC5pc0Z1bmN0aW9uKHMpfHwocz17fSksdT09PWEmJihzPXRoaXMsLS1hKTt1PmE7
YSsrKWlmKG51bGwhPShlPWFyZ3VtZW50c1thXSkpZm9yKHQgaW4gZSluPXNbdF0scj1lW3RdLHMh
PT1yJiYobCYmciYmKHguaXNQbGFpbk9iamVjdChyKXx8KGk9eC5pc0FycmF5KHIpKSk/KGk/KGk9
ITEsbz1uJiZ4LmlzQXJyYXkobik/bjpbXSk6bz1uJiZ4LmlzUGxhaW5PYmplY3Qobik/bjp7fSxz
W3RdPXguZXh0ZW5kKGwsbyxyKSk6ciE9PXVuZGVmaW5lZCYmKHNbdF09cikpO3JldHVybiBzfSx4
LmV4dGVuZCh7ZXhwYW5kbzoialF1ZXJ5IisocCtNYXRoLnJhbmRvbSgpKS5yZXBsYWNlKC9cRC9n
LCIiKSxub0NvbmZsaWN0OmZ1bmN0aW9uKHQpe3JldHVybiBlLiQ9PT14JiYoZS4kPXUpLHQmJmUu
alF1ZXJ5PT09eCYmKGUualF1ZXJ5PWEpLHh9LGlzUmVhZHk6ITEscmVhZHlXYWl0OjEsaG9sZFJl
YWR5OmZ1bmN0aW9uKGUpe2U/eC5yZWFkeVdhaXQrKzp4LnJlYWR5KCEwKX0scmVhZHk6ZnVuY3Rp
b24oZSl7KGU9PT0hMD8tLXgucmVhZHlXYWl0OnguaXNSZWFkeSl8fCh4LmlzUmVhZHk9ITAsZSE9
PSEwJiYtLXgucmVhZHlXYWl0PjB8fChuLnJlc29sdmVXaXRoKG8sW3hdKSx4LmZuLnRyaWdnZXIm
JngobykudHJpZ2dlcigicmVhZHkiKS5vZmYoInJlYWR5IikpKX0saXNGdW5jdGlvbjpmdW5jdGlv
bihlKXtyZXR1cm4iZnVuY3Rpb24iPT09eC50eXBlKGUpfSxpc0FycmF5OkFycmF5LmlzQXJyYXks
aXNXaW5kb3c6ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPWUmJmU9PT1lLndpbmRvd30saXNOdW1l
cmljOmZ1bmN0aW9uKGUpe3JldHVybiFpc05hTihwYXJzZUZsb2F0KGUpKSYmaXNGaW5pdGUoZSl9
LHR5cGU6ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWU/ZSsiIjoib2JqZWN0Ij09dHlwZW9mIGV8
fCJmdW5jdGlvbiI9PXR5cGVvZiBlP2xbbS5jYWxsKGUpXXx8Im9iamVjdCI6dHlwZW9mIGV9LGlz
UGxhaW5PYmplY3Q6ZnVuY3Rpb24oZSl7aWYoIm9iamVjdCIhPT14LnR5cGUoZSl8fGUubm9kZVR5
cGV8fHguaXNXaW5kb3coZSkpcmV0dXJuITE7dHJ5e2lmKGUuY29uc3RydWN0b3ImJiF5LmNhbGwo
ZS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsImlzUHJvdG90eXBlT2YiKSlyZXR1cm4hMX1jYXRjaCh0
KXtyZXR1cm4hMX1yZXR1cm4hMH0saXNFbXB0eU9iamVjdDpmdW5jdGlvbihlKXt2YXIgdDtmb3Io
dCBpbiBlKXJldHVybiExO3JldHVybiEwfSxlcnJvcjpmdW5jdGlvbihlKXt0aHJvdyBFcnJvcihl
KX0scGFyc2VIVE1MOmZ1bmN0aW9uKGUsdCxuKXtpZighZXx8InN0cmluZyIhPXR5cGVvZiBlKXJl
dHVybiBudWxsOyJib29sZWFuIj09dHlwZW9mIHQmJihuPXQsdD0hMSksdD10fHxvO3ZhciByPUMu
ZXhlYyhlKSxpPSFuJiZbXTtyZXR1cm4gcj9bdC5jcmVhdGVFbGVtZW50KHJbMV0pXToocj14LmJ1
aWxkRnJhZ21lbnQoW2VdLHQsaSksaSYmeChpKS5yZW1vdmUoKSx4Lm1lcmdlKFtdLHIuY2hpbGRO
b2RlcykpfSxwYXJzZUpTT046SlNPTi5wYXJzZSxwYXJzZVhNTDpmdW5jdGlvbihlKXt2YXIgdCxu
O2lmKCFlfHwic3RyaW5nIiE9dHlwZW9mIGUpcmV0dXJuIG51bGw7dHJ5e249bmV3IERPTVBhcnNl
cix0PW4ucGFyc2VGcm9tU3RyaW5nKGUsInRleHQveG1sIil9Y2F0Y2gocil7dD11bmRlZmluZWR9
cmV0dXJuKCF0fHx0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJwYXJzZXJlcnJvciIpLmxlbmd0aCkm
JnguZXJyb3IoIkludmFsaWQgWE1MOiAiK2UpLHR9LG5vb3A6ZnVuY3Rpb24oKXt9LGdsb2JhbEV2
YWw6ZnVuY3Rpb24oZSl7dmFyIHQsbj1ldmFsO2U9eC50cmltKGUpLGUmJigxPT09ZS5pbmRleE9m
KCJ1c2Ugc3RyaWN0Iik/KHQ9by5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKSx0LnRleHQ9ZSxvLmhl
YWQuYXBwZW5kQ2hpbGQodCkucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0KSk6bihlKSl9LGNhbWVs
Q2FzZTpmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKGssIm1zLSIpLnJlcGxhY2UoTixFKX0s
bm9kZU5hbWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5ub2RlTmFtZSYmZS5ub2RlTmFtZS50b0xv
d2VyQ2FzZSgpPT09dC50b0xvd2VyQ2FzZSgpfSxlYWNoOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixp
PTAsbz1lLmxlbmd0aCxzPWooZSk7aWYobil7aWYocyl7Zm9yKDtvPmk7aSsrKWlmKHI9dC5hcHBs
eShlW2ldLG4pLHI9PT0hMSlicmVha31lbHNlIGZvcihpIGluIGUpaWYocj10LmFwcGx5KGVbaV0s
bikscj09PSExKWJyZWFrfWVsc2UgaWYocyl7Zm9yKDtvPmk7aSsrKWlmKHI9dC5jYWxsKGVbaV0s
aSxlW2ldKSxyPT09ITEpYnJlYWt9ZWxzZSBmb3IoaSBpbiBlKWlmKHI9dC5jYWxsKGVbaV0saSxl
W2ldKSxyPT09ITEpYnJlYWs7cmV0dXJuIGV9LHRyaW06ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9
PWU/IiI6di5jYWxsKGUpfSxtYWtlQXJyYXk6ZnVuY3Rpb24oZSx0KXt2YXIgbj10fHxbXTtyZXR1
cm4gbnVsbCE9ZSYmKGooT2JqZWN0KGUpKT94Lm1lcmdlKG4sInN0cmluZyI9PXR5cGVvZiBlP1tl
XTplKTpoLmNhbGwobixlKSksbn0saW5BcnJheTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIG51bGw9
PXQ/LTE6Zy5jYWxsKHQsZSxuKX0sbWVyZ2U6ZnVuY3Rpb24oZSx0KXt2YXIgbj10Lmxlbmd0aCxy
PWUubGVuZ3RoLGk9MDtpZigibnVtYmVyIj09dHlwZW9mIG4pZm9yKDtuPmk7aSsrKWVbcisrXT10
W2ldO2Vsc2Ugd2hpbGUodFtpXSE9PXVuZGVmaW5lZCllW3IrK109dFtpKytdO3JldHVybiBlLmxl
bmd0aD1yLGV9LGdyZXA6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk9W10sbz0wLHM9ZS5sZW5ndGg7
Zm9yKG49ISFuO3M+bztvKyspcj0hIXQoZVtvXSxvKSxuIT09ciYmaS5wdXNoKGVbb10pO3JldHVy
biBpfSxtYXA6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk9MCxvPWUubGVuZ3RoLHM9aihlKSxhPVtd
O2lmKHMpZm9yKDtvPmk7aSsrKXI9dChlW2ldLGksbiksbnVsbCE9ciYmKGFbYS5sZW5ndGhdPXIp
O2Vsc2UgZm9yKGkgaW4gZSlyPXQoZVtpXSxpLG4pLG51bGwhPXImJihhW2EubGVuZ3RoXT1yKTty
ZXR1cm4gZi5hcHBseShbXSxhKX0sZ3VpZDoxLHByb3h5OmZ1bmN0aW9uKGUsdCl7dmFyIG4scixp
O3JldHVybiJzdHJpbmciPT10eXBlb2YgdCYmKG49ZVt0XSx0PWUsZT1uKSx4LmlzRnVuY3Rpb24o
ZSk/KHI9ZC5jYWxsKGFyZ3VtZW50cywyKSxpPWZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkodHx8
dGhpcyxyLmNvbmNhdChkLmNhbGwoYXJndW1lbnRzKSkpfSxpLmd1aWQ9ZS5ndWlkPWUuZ3VpZHx8
eC5ndWlkKyssaSk6dW5kZWZpbmVkfSxhY2Nlc3M6ZnVuY3Rpb24oZSx0LG4scixpLG8scyl7dmFy
IGE9MCx1PWUubGVuZ3RoLGw9bnVsbD09bjtpZigib2JqZWN0Ij09PXgudHlwZShuKSl7aT0hMDtm
b3IoYSBpbiBuKXguYWNjZXNzKGUsdCxhLG5bYV0sITAsbyxzKX1lbHNlIGlmKHIhPT11bmRlZmlu
ZWQmJihpPSEwLHguaXNGdW5jdGlvbihyKXx8KHM9ITApLGwmJihzPyh0LmNhbGwoZSxyKSx0PW51
bGwpOihsPXQsdD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGwuY2FsbCh4KGUpLG4pfSkpLHQpKWZv
cig7dT5hO2ErKyl0KGVbYV0sbixzP3I6ci5jYWxsKGVbYV0sYSx0KGVbYV0sbikpKTtyZXR1cm4g
aT9lOmw/dC5jYWxsKGUpOnU/dChlWzBdLG4pOm99LG5vdzpEYXRlLm5vdyxzd2FwOmZ1bmN0aW9u
KGUsdCxuLHIpe3ZhciBpLG8scz17fTtmb3IobyBpbiB0KXNbb109ZS5zdHlsZVtvXSxlLnN0eWxl
W29dPXRbb107aT1uLmFwcGx5KGUscnx8W10pO2ZvcihvIGluIHQpZS5zdHlsZVtvXT1zW29dO3Jl
dHVybiBpfX0pLHgucmVhZHkucHJvbWlzZT1mdW5jdGlvbih0KXtyZXR1cm4gbnx8KG49eC5EZWZl
cnJlZCgpLCJjb21wbGV0ZSI9PT1vLnJlYWR5U3RhdGU/c2V0VGltZW91dCh4LnJlYWR5KTooby5h
ZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixTLCExKSxlLmFkZEV2ZW50TGlzdGVu
ZXIoImxvYWQiLFMsITEpKSksbi5wcm9taXNlKHQpfSx4LmVhY2goIkJvb2xlYW4gTnVtYmVyIFN0
cmluZyBGdW5jdGlvbiBBcnJheSBEYXRlIFJlZ0V4cCBPYmplY3QgRXJyb3IiLnNwbGl0KCIgIiks
ZnVuY3Rpb24oZSx0KXtsWyJbb2JqZWN0ICIrdCsiXSJdPXQudG9Mb3dlckNhc2UoKX0pO2Z1bmN0
aW9uIGooZSl7dmFyIHQ9ZS5sZW5ndGgsbj14LnR5cGUoZSk7cmV0dXJuIHguaXNXaW5kb3coZSk/
ITE6MT09PWUubm9kZVR5cGUmJnQ/ITA6ImFycmF5Ij09PW58fCJmdW5jdGlvbiIhPT1uJiYoMD09
PXR8fCJudW1iZXIiPT10eXBlb2YgdCYmdD4wJiZ0LTEgaW4gZSl9dD14KG8pLGZ1bmN0aW9uKGUs
dW5kZWZpbmVkKXt2YXIgdCxuLHIsaSxvLHMsYSx1LGwsYyxwLGYsaCxkLGcsbSx5LHY9InNpenps
ZSIrLW5ldyBEYXRlLGI9ZS5kb2N1bWVudCx3PTAsVD0wLEM9c3QoKSxrPXN0KCksTj1zdCgpLEU9
ITEsUz1mdW5jdGlvbihlLHQpe3JldHVybiBlPT09dD8oRT0hMCwwKTowfSxqPXR5cGVvZiB1bmRl
ZmluZWQsRD0xPDwzMSxBPXt9Lmhhc093blByb3BlcnR5LEw9W10scT1MLnBvcCxIPUwucHVzaCxP
PUwucHVzaCxGPUwuc2xpY2UsUD1MLmluZGV4T2Z8fGZ1bmN0aW9uKGUpe3ZhciB0PTAsbj10aGlz
Lmxlbmd0aDtmb3IoO24+dDt0KyspaWYodGhpc1t0XT09PWUpcmV0dXJuIHQ7cmV0dXJuLTF9LFI9
ImNoZWNrZWR8c2VsZWN0ZWR8YXN5bmN8YXV0b2ZvY3VzfGF1dG9wbGF5fGNvbnRyb2xzfGRlZmVy
fGRpc2FibGVkfGhpZGRlbnxpc21hcHxsb29wfG11bHRpcGxlfG9wZW58cmVhZG9ubHl8cmVxdWly
ZWR8c2NvcGVkIixNPSJbXFx4MjBcXHRcXHJcXG5cXGZdIixXPSIoPzpcXFxcLnxbXFx3LV18W15c
XHgwMC1cXHhhMF0pKyIsJD1XLnJlcGxhY2UoInciLCJ3IyIpLEI9IlxcWyIrTSsiKigiK1crIiki
K00rIiooPzooWypeJHwhfl0/PSkiK00rIiooPzooWydcIl0pKCg/OlxcXFwufFteXFxcXF0pKj8p
XFwzfCgiKyQrIil8KXwpIitNKyIqXFxdIixJPSI6KCIrVysiKSg/OlxcKCgoWydcIl0pKCg/Olxc
XFwufFteXFxcXF0pKj8pXFwzfCgoPzpcXFxcLnxbXlxcXFwoKVtcXF1dfCIrQi5yZXBsYWNlKDMs
OCkrIikqKXwuKilcXCl8KSIsej1SZWdFeHAoIl4iK00rIit8KCg/Ol58W15cXFxcXSkoPzpcXFxc
LikqKSIrTSsiKyQiLCJnIiksXz1SZWdFeHAoIl4iK00rIiosIitNKyIqIiksWD1SZWdFeHAoIl4i
K00rIiooWz4rfl18IitNKyIpIitNKyIqIiksVT1SZWdFeHAoTSsiKlsrfl0iKSxZPVJlZ0V4cCgi
PSIrTSsiKihbXlxcXSdcIl0qKSIrTSsiKlxcXSIsImciKSxWPVJlZ0V4cChJKSxHPVJlZ0V4cCgi
XiIrJCsiJCIpLEo9e0lEOlJlZ0V4cCgiXiMoIitXKyIpIiksQ0xBU1M6UmVnRXhwKCJeXFwuKCIr
VysiKSIpLFRBRzpSZWdFeHAoIl4oIitXLnJlcGxhY2UoInciLCJ3KiIpKyIpIiksQVRUUjpSZWdF
eHAoIl4iK0IpLFBTRVVETzpSZWdFeHAoIl4iK0kpLENISUxEOlJlZ0V4cCgiXjoob25seXxmaXJz
dHxsYXN0fG50aHxudGgtbGFzdCktKGNoaWxkfG9mLXR5cGUpKD86XFwoIitNKyIqKGV2ZW58b2Rk
fCgoWystXXwpKFxcZCopbnwpIitNKyIqKD86KFsrLV18KSIrTSsiKihcXGQrKXwpKSIrTSsiKlxc
KXwpIiwiaSIpLGJvb2w6UmVnRXhwKCJeKD86IitSKyIpJCIsImkiKSxuZWVkc0NvbnRleHQ6UmVn
RXhwKCJeIitNKyIqWz4rfl18OihldmVufG9kZHxlcXxndHxsdHxudGh8Zmlyc3R8bGFzdCkoPzpc
XCgiK00rIiooKD86LVxcZCk/XFxkKikiK00rIipcXCl8KSg/PVteLV18JCkiLCJpIil9LFE9L15b
XntdK1x7XHMqXFtuYXRpdmUgXHcvLEs9L14oPzojKFtcdy1dKyl8KFx3Kyl8XC4oW1x3LV0rKSkk
LyxaPS9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbikkL2ksZXQ9L15oXGQkL2ksdHQ9
Lyd8XFwvZyxudD1SZWdFeHAoIlxcXFwoW1xcZGEtZl17MSw2fSIrTSsiP3woIitNKyIpfC4pIiwi
aWciKSxydD1mdW5jdGlvbihlLHQsbil7dmFyIHI9IjB4Iit0LTY1NTM2O3JldHVybiByIT09cnx8
bj90OjA+cj9TdHJpbmcuZnJvbUNoYXJDb2RlKHIrNjU1MzYpOlN0cmluZy5mcm9tQ2hhckNvZGUo
NTUyOTZ8cj4+MTAsNTYzMjB8MTAyMyZyKX07dHJ5e08uYXBwbHkoTD1GLmNhbGwoYi5jaGlsZE5v
ZGVzKSxiLmNoaWxkTm9kZXMpLExbYi5jaGlsZE5vZGVzLmxlbmd0aF0ubm9kZVR5cGV9Y2F0Y2go
aXQpe089e2FwcGx5OkwubGVuZ3RoP2Z1bmN0aW9uKGUsdCl7SC5hcHBseShlLEYuY2FsbCh0KSl9
OmZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5sZW5ndGgscj0wO3doaWxlKGVbbisrXT10W3IrK10pO2Uu
bGVuZ3RoPW4tMX19fWZ1bmN0aW9uIG90KGUsdCxyLGkpe3ZhciBvLHMsYSx1LGwsZixnLG0seCx3
O2lmKCh0P3Qub3duZXJEb2N1bWVudHx8dDpiKSE9PXAmJmModCksdD10fHxwLHI9cnx8W10sIWV8
fCJzdHJpbmciIT10eXBlb2YgZSlyZXR1cm4gcjtpZigxIT09KHU9dC5ub2RlVHlwZSkmJjkhPT11
KXJldHVybltdO2lmKGgmJiFpKXtpZihvPUsuZXhlYyhlKSlpZihhPW9bMV0pe2lmKDk9PT11KXtp
ZihzPXQuZ2V0RWxlbWVudEJ5SWQoYSksIXN8fCFzLnBhcmVudE5vZGUpcmV0dXJuIHI7aWYocy5p
ZD09PWEpcmV0dXJuIHIucHVzaChzKSxyfWVsc2UgaWYodC5vd25lckRvY3VtZW50JiYocz10Lm93
bmVyRG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYSkpJiZ5KHQscykmJnMuaWQ9PT1hKXJldHVybiBy
LnB1c2gocykscn1lbHNle2lmKG9bMl0pcmV0dXJuIE8uYXBwbHkocix0LmdldEVsZW1lbnRzQnlU
YWdOYW1lKGUpKSxyO2lmKChhPW9bM10pJiZuLmdldEVsZW1lbnRzQnlDbGFzc05hbWUmJnQuZ2V0
RWxlbWVudHNCeUNsYXNzTmFtZSlyZXR1cm4gTy5hcHBseShyLHQuZ2V0RWxlbWVudHNCeUNsYXNz
TmFtZShhKSkscn1pZihuLnFzYSYmKCFkfHwhZC50ZXN0KGUpKSl7aWYobT1nPXYseD10LHc9OT09
PXUmJmUsMT09PXUmJiJvYmplY3QiIT09dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKXtmPWd0KGUp
LChnPXQuZ2V0QXR0cmlidXRlKCJpZCIpKT9tPWcucmVwbGFjZSh0dCwiXFwkJiIpOnQuc2V0QXR0
cmlidXRlKCJpZCIsbSksbT0iW2lkPSciK20rIiddICIsbD1mLmxlbmd0aDt3aGlsZShsLS0pZlts
XT1tK210KGZbbF0pO3g9VS50ZXN0KGUpJiZ0LnBhcmVudE5vZGV8fHQsdz1mLmpvaW4oIiwiKX1p
Zih3KXRyeXtyZXR1cm4gTy5hcHBseShyLHgucXVlcnlTZWxlY3RvckFsbCh3KSkscn1jYXRjaChU
KXt9ZmluYWxseXtnfHx0LnJlbW92ZUF0dHJpYnV0ZSgiaWQiKX19fXJldHVybiBrdChlLnJlcGxh
Y2UoeiwiJDEiKSx0LHIsaSl9ZnVuY3Rpb24gc3QoKXt2YXIgZT1bXTtmdW5jdGlvbiB0KG4scil7
cmV0dXJuIGUucHVzaChuKz0iICIpPmkuY2FjaGVMZW5ndGgmJmRlbGV0ZSB0W2Uuc2hpZnQoKV0s
dFtuXT1yfXJldHVybiB0fWZ1bmN0aW9uIGF0KGUpe3JldHVybiBlW3ZdPSEwLGV9ZnVuY3Rpb24g
dXQoZSl7dmFyIHQ9cC5jcmVhdGVFbGVtZW50KCJkaXYiKTt0cnl7cmV0dXJuISFlKHQpfWNhdGNo
KG4pe3JldHVybiExfWZpbmFsbHl7dC5wYXJlbnROb2RlJiZ0LnBhcmVudE5vZGUucmVtb3ZlQ2hp
bGQodCksdD1udWxsfX1mdW5jdGlvbiBsdChlLHQpe3ZhciBuPWUuc3BsaXQoInwiKSxyPWUubGVu
Z3RoO3doaWxlKHItLSlpLmF0dHJIYW5kbGVbbltyXV09dH1mdW5jdGlvbiBjdChlLHQpe3ZhciBu
PXQmJmUscj1uJiYxPT09ZS5ub2RlVHlwZSYmMT09PXQubm9kZVR5cGUmJih+dC5zb3VyY2VJbmRl
eHx8RCktKH5lLnNvdXJjZUluZGV4fHxEKTtpZihyKXJldHVybiByO2lmKG4pd2hpbGUobj1uLm5l
eHRTaWJsaW5nKWlmKG49PT10KXJldHVybi0xO3JldHVybiBlPzE6LTF9ZnVuY3Rpb24gcHQoZSl7
cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBuPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4i
aW5wdXQiPT09biYmdC50eXBlPT09ZX19ZnVuY3Rpb24gZnQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQp
e3ZhciBuPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4oImlucHV0Ij09PW58fCJidXR0
b24iPT09bikmJnQudHlwZT09PWV9fWZ1bmN0aW9uIGh0KGUpe3JldHVybiBhdChmdW5jdGlvbih0
KXtyZXR1cm4gdD0rdCxhdChmdW5jdGlvbihuLHIpe3ZhciBpLG89ZShbXSxuLmxlbmd0aCx0KSxz
PW8ubGVuZ3RoO3doaWxlKHMtLSluW2k9b1tzXV0mJihuW2ldPSEocltpXT1uW2ldKSl9KX0pfXM9
b3QuaXNYTUw9ZnVuY3Rpb24oZSl7dmFyIHQ9ZSYmKGUub3duZXJEb2N1bWVudHx8ZSkuZG9jdW1l
bnRFbGVtZW50O3JldHVybiB0PyJIVE1MIiE9PXQubm9kZU5hbWU6ITF9LG49b3Quc3VwcG9ydD17
fSxjPW90LnNldERvY3VtZW50PWZ1bmN0aW9uKGUpe3ZhciB0PWU/ZS5vd25lckRvY3VtZW50fHxl
OmIscj10LmRlZmF1bHRWaWV3O3JldHVybiB0IT09cCYmOT09PXQubm9kZVR5cGUmJnQuZG9jdW1l
bnRFbGVtZW50PyhwPXQsZj10LmRvY3VtZW50RWxlbWVudCxoPSFzKHQpLHImJnIuYXR0YWNoRXZl
bnQmJnIhPT1yLnRvcCYmci5hdHRhY2hFdmVudCgib25iZWZvcmV1bmxvYWQiLGZ1bmN0aW9uKCl7
YygpfSksbi5hdHRyaWJ1dGVzPXV0KGZ1bmN0aW9uKGUpe3JldHVybiBlLmNsYXNzTmFtZT0iaSIs
IWUuZ2V0QXR0cmlidXRlKCJjbGFzc05hbWUiKX0pLG4uZ2V0RWxlbWVudHNCeVRhZ05hbWU9dXQo
ZnVuY3Rpb24oZSl7cmV0dXJuIGUuYXBwZW5kQ2hpbGQodC5jcmVhdGVDb21tZW50KCIiKSksIWUu
Z2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKS5sZW5ndGh9KSxuLmdldEVsZW1lbnRzQnlDbGFzc05h
bWU9dXQoZnVuY3Rpb24oZSl7cmV0dXJuIGUuaW5uZXJIVE1MPSI8ZGl2IGNsYXNzPSdhJz48L2Rp
dj48ZGl2IGNsYXNzPSdhIGknPjwvZGl2PiIsZS5maXJzdENoaWxkLmNsYXNzTmFtZT0iaSIsMj09
PWUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiaSIpLmxlbmd0aH0pLG4uZ2V0QnlJZD11dChmdW5j
dGlvbihlKXtyZXR1cm4gZi5hcHBlbmRDaGlsZChlKS5pZD12LCF0LmdldEVsZW1lbnRzQnlOYW1l
fHwhdC5nZXRFbGVtZW50c0J5TmFtZSh2KS5sZW5ndGh9KSxuLmdldEJ5SWQ/KGkuZmluZC5JRD1m
dW5jdGlvbihlLHQpe2lmKHR5cGVvZiB0LmdldEVsZW1lbnRCeUlkIT09aiYmaCl7dmFyIG49dC5n
ZXRFbGVtZW50QnlJZChlKTtyZXR1cm4gbiYmbi5wYXJlbnROb2RlP1tuXTpbXX19LGkuZmlsdGVy
LklEPWZ1bmN0aW9uKGUpe3ZhciB0PWUucmVwbGFjZShudCxydCk7cmV0dXJuIGZ1bmN0aW9uKGUp
e3JldHVybiBlLmdldEF0dHJpYnV0ZSgiaWQiKT09PXR9fSk6KGRlbGV0ZSBpLmZpbmQuSUQsaS5m
aWx0ZXIuSUQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yZXBsYWNlKG50LHJ0KTtyZXR1cm4gZnVuY3Rp
b24oZSl7dmFyIG49dHlwZW9mIGUuZ2V0QXR0cmlidXRlTm9kZSE9PWomJmUuZ2V0QXR0cmlidXRl
Tm9kZSgiaWQiKTtyZXR1cm4gbiYmbi52YWx1ZT09PXR9fSksaS5maW5kLlRBRz1uLmdldEVsZW1l
bnRzQnlUYWdOYW1lP2Z1bmN0aW9uKGUsdCl7cmV0dXJuIHR5cGVvZiB0LmdldEVsZW1lbnRzQnlU
YWdOYW1lIT09aj90LmdldEVsZW1lbnRzQnlUYWdOYW1lKGUpOnVuZGVmaW5lZH06ZnVuY3Rpb24o
ZSx0KXt2YXIgbixyPVtdLGk9MCxvPXQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoZSk7aWYoIioiPT09
ZSl7d2hpbGUobj1vW2krK10pMT09PW4ubm9kZVR5cGUmJnIucHVzaChuKTtyZXR1cm4gcn1yZXR1
cm4gb30saS5maW5kLkNMQVNTPW4uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSYmZnVuY3Rpb24oZSx0
KXtyZXR1cm4gdHlwZW9mIHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSE9PWomJmg/dC5nZXRFbGVt
ZW50c0J5Q2xhc3NOYW1lKGUpOnVuZGVmaW5lZH0sZz1bXSxkPVtdLChuLnFzYT1RLnRlc3QodC5x
dWVyeVNlbGVjdG9yQWxsKSkmJih1dChmdW5jdGlvbihlKXtlLmlubmVySFRNTD0iPHNlbGVjdD48
b3B0aW9uIHNlbGVjdGVkPScnPjwvb3B0aW9uPjwvc2VsZWN0PiIsZS5xdWVyeVNlbGVjdG9yQWxs
KCJbc2VsZWN0ZWRdIikubGVuZ3RofHxkLnB1c2goIlxcWyIrTSsiKig/OnZhbHVlfCIrUisiKSIp
LGUucXVlcnlTZWxlY3RvckFsbCgiOmNoZWNrZWQiKS5sZW5ndGh8fGQucHVzaCgiOmNoZWNrZWQi
KX0pLHV0KGZ1bmN0aW9uKGUpe3ZhciBuPXQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTtuLnNldEF0
dHJpYnV0ZSgidHlwZSIsImhpZGRlbiIpLGUuYXBwZW5kQ2hpbGQobikuc2V0QXR0cmlidXRlKCJ0
IiwiIiksZS5xdWVyeVNlbGVjdG9yQWxsKCJbdF49JyddIikubGVuZ3RoJiZkLnB1c2goIlsqXiRd
PSIrTSsiKig/OicnfFwiXCIpIiksZS5xdWVyeVNlbGVjdG9yQWxsKCI6ZW5hYmxlZCIpLmxlbmd0
aHx8ZC5wdXNoKCI6ZW5hYmxlZCIsIjpkaXNhYmxlZCIpLGUucXVlcnlTZWxlY3RvckFsbCgiKiw6
eCIpLGQucHVzaCgiLC4qOiIpfSkpLChuLm1hdGNoZXNTZWxlY3Rvcj1RLnRlc3QobT1mLndlYmtp
dE1hdGNoZXNTZWxlY3Rvcnx8Zi5tb3pNYXRjaGVzU2VsZWN0b3J8fGYub01hdGNoZXNTZWxlY3Rv
cnx8Zi5tc01hdGNoZXNTZWxlY3RvcikpJiZ1dChmdW5jdGlvbihlKXtuLmRpc2Nvbm5lY3RlZE1h
dGNoPW0uY2FsbChlLCJkaXYiKSxtLmNhbGwoZSwiW3MhPScnXTp4IiksZy5wdXNoKCIhPSIsSSl9
KSxkPWQubGVuZ3RoJiZSZWdFeHAoZC5qb2luKCJ8IikpLGc9Zy5sZW5ndGgmJlJlZ0V4cChnLmpv
aW4oInwiKSkseT1RLnRlc3QoZi5jb250YWlucyl8fGYuY29tcGFyZURvY3VtZW50UG9zaXRpb24/
ZnVuY3Rpb24oZSx0KXt2YXIgbj05PT09ZS5ub2RlVHlwZT9lLmRvY3VtZW50RWxlbWVudDplLHI9
dCYmdC5wYXJlbnROb2RlO3JldHVybiBlPT09cnx8ISghcnx8MSE9PXIubm9kZVR5cGV8fCEobi5j
b250YWlucz9uLmNvbnRhaW5zKHIpOmUuY29tcGFyZURvY3VtZW50UG9zaXRpb24mJjE2JmUuY29t
cGFyZURvY3VtZW50UG9zaXRpb24ocikpKX06ZnVuY3Rpb24oZSx0KXtpZih0KXdoaWxlKHQ9dC5w
YXJlbnROb2RlKWlmKHQ9PT1lKXJldHVybiEwO3JldHVybiExfSxTPWYuY29tcGFyZURvY3VtZW50
UG9zaXRpb24/ZnVuY3Rpb24oZSxyKXtpZihlPT09cilyZXR1cm4gRT0hMCwwO3ZhciBpPXIuY29t
cGFyZURvY3VtZW50UG9zaXRpb24mJmUuY29tcGFyZURvY3VtZW50UG9zaXRpb24mJmUuY29tcGFy
ZURvY3VtZW50UG9zaXRpb24ocik7cmV0dXJuIGk/MSZpfHwhbi5zb3J0RGV0YWNoZWQmJnIuY29t
cGFyZURvY3VtZW50UG9zaXRpb24oZSk9PT1pP2U9PT10fHx5KGIsZSk/LTE6cj09PXR8fHkoYixy
KT8xOmw/UC5jYWxsKGwsZSktUC5jYWxsKGwscik6MDo0Jmk/LTE6MTplLmNvbXBhcmVEb2N1bWVu
dFBvc2l0aW9uPy0xOjF9OmZ1bmN0aW9uKGUsbil7dmFyIHIsaT0wLG89ZS5wYXJlbnROb2RlLHM9
bi5wYXJlbnROb2RlLGE9W2VdLHU9W25dO2lmKGU9PT1uKXJldHVybiBFPSEwLDA7aWYoIW98fCFz
KXJldHVybiBlPT09dD8tMTpuPT09dD8xOm8/LTE6cz8xOmw/UC5jYWxsKGwsZSktUC5jYWxsKGws
bik6MDtpZihvPT09cylyZXR1cm4gY3QoZSxuKTtyPWU7d2hpbGUocj1yLnBhcmVudE5vZGUpYS51
bnNoaWZ0KHIpO3I9bjt3aGlsZShyPXIucGFyZW50Tm9kZSl1LnVuc2hpZnQocik7d2hpbGUoYVtp
XT09PXVbaV0paSsrO3JldHVybiBpP2N0KGFbaV0sdVtpXSk6YVtpXT09PWI/LTE6dVtpXT09PWI/
MTowfSx0KTpwfSxvdC5tYXRjaGVzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG90KGUsbnVsbCxudWxs
LHQpfSxvdC5tYXRjaGVzU2VsZWN0b3I9ZnVuY3Rpb24oZSx0KXtpZigoZS5vd25lckRvY3VtZW50
fHxlKSE9PXAmJmMoZSksdD10LnJlcGxhY2UoWSwiPSckMSddIiksISghbi5tYXRjaGVzU2VsZWN0
b3J8fCFofHxnJiZnLnRlc3QodCl8fGQmJmQudGVzdCh0KSkpdHJ5e3ZhciByPW0uY2FsbChlLHQp
O2lmKHJ8fG4uZGlzY29ubmVjdGVkTWF0Y2h8fGUuZG9jdW1lbnQmJjExIT09ZS5kb2N1bWVudC5u
b2RlVHlwZSlyZXR1cm4gcn1jYXRjaChpKXt9cmV0dXJuIG90KHQscCxudWxsLFtlXSkubGVuZ3Ro
PjB9LG90LmNvbnRhaW5zPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKGUub3duZXJEb2N1bWVudHx8ZSkh
PT1wJiZjKGUpLHkoZSx0KX0sb3QuYXR0cj1mdW5jdGlvbihlLHQpeyhlLm93bmVyRG9jdW1lbnR8
fGUpIT09cCYmYyhlKTt2YXIgcj1pLmF0dHJIYW5kbGVbdC50b0xvd2VyQ2FzZSgpXSxvPXImJkEu
Y2FsbChpLmF0dHJIYW5kbGUsdC50b0xvd2VyQ2FzZSgpKT9yKGUsdCwhaCk6dW5kZWZpbmVkO3Jl
dHVybiBvPT09dW5kZWZpbmVkP24uYXR0cmlidXRlc3x8IWg/ZS5nZXRBdHRyaWJ1dGUodCk6KG89
ZS5nZXRBdHRyaWJ1dGVOb2RlKHQpKSYmby5zcGVjaWZpZWQ/by52YWx1ZTpudWxsOm99LG90LmVy
cm9yPWZ1bmN0aW9uKGUpe3Rocm93IEVycm9yKCJTeW50YXggZXJyb3IsIHVucmVjb2duaXplZCBl
eHByZXNzaW9uOiAiK2UpfSxvdC51bmlxdWVTb3J0PWZ1bmN0aW9uKGUpe3ZhciB0LHI9W10saT0w
LG89MDtpZihFPSFuLmRldGVjdER1cGxpY2F0ZXMsbD0hbi5zb3J0U3RhYmxlJiZlLnNsaWNlKDAp
LGUuc29ydChTKSxFKXt3aGlsZSh0PWVbbysrXSl0PT09ZVtvXSYmKGk9ci5wdXNoKG8pKTt3aGls
ZShpLS0pZS5zcGxpY2UocltpXSwxKX1yZXR1cm4gZX0sbz1vdC5nZXRUZXh0PWZ1bmN0aW9uKGUp
e3ZhciB0LG49IiIscj0wLGk9ZS5ub2RlVHlwZTtpZihpKXtpZigxPT09aXx8OT09PWl8fDExPT09
aSl7aWYoInN0cmluZyI9PXR5cGVvZiBlLnRleHRDb250ZW50KXJldHVybiBlLnRleHRDb250ZW50
O2ZvcihlPWUuZmlyc3RDaGlsZDtlO2U9ZS5uZXh0U2libGluZyluKz1vKGUpfWVsc2UgaWYoMz09
PWl8fDQ9PT1pKXJldHVybiBlLm5vZGVWYWx1ZX1lbHNlIGZvcig7dD1lW3JdO3IrKyluKz1vKHQp
O3JldHVybiBufSxpPW90LnNlbGVjdG9ycz17Y2FjaGVMZW5ndGg6NTAsY3JlYXRlUHNldWRvOmF0
LG1hdGNoOkosYXR0ckhhbmRsZTp7fSxmaW5kOnt9LHJlbGF0aXZlOnsiPiI6e2RpcjoicGFyZW50
Tm9kZSIsZmlyc3Q6ITB9LCIgIjp7ZGlyOiJwYXJlbnROb2RlIn0sIisiOntkaXI6InByZXZpb3Vz
U2libGluZyIsZmlyc3Q6ITB9LCJ+Ijp7ZGlyOiJwcmV2aW91c1NpYmxpbmcifX0scHJlRmlsdGVy
OntBVFRSOmZ1bmN0aW9uKGUpe3JldHVybiBlWzFdPWVbMV0ucmVwbGFjZShudCxydCksZVszXT0o
ZVs0XXx8ZVs1XXx8IiIpLnJlcGxhY2UobnQscnQpLCJ+PSI9PT1lWzJdJiYoZVszXT0iICIrZVsz
XSsiICIpLGUuc2xpY2UoMCw0KX0sQ0hJTEQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGVbMV09ZVsxXS50
b0xvd2VyQ2FzZSgpLCJudGgiPT09ZVsxXS5zbGljZSgwLDMpPyhlWzNdfHxvdC5lcnJvcihlWzBd
KSxlWzRdPSsoZVs0XT9lWzVdKyhlWzZdfHwxKToyKigiZXZlbiI9PT1lWzNdfHwib2RkIj09PWVb
M10pKSxlWzVdPSsoZVs3XStlWzhdfHwib2RkIj09PWVbM10pKTplWzNdJiZvdC5lcnJvcihlWzBd
KSxlfSxQU0VVRE86ZnVuY3Rpb24oZSl7dmFyIHQsbj0hZVs1XSYmZVsyXTtyZXR1cm4gSi5DSElM
RC50ZXN0KGVbMF0pP251bGw6KGVbM10mJmVbNF0hPT11bmRlZmluZWQ/ZVsyXT1lWzRdOm4mJlYu
dGVzdChuKSYmKHQ9Z3QobiwhMCkpJiYodD1uLmluZGV4T2YoIikiLG4ubGVuZ3RoLXQpLW4ubGVu
Z3RoKSYmKGVbMF09ZVswXS5zbGljZSgwLHQpLGVbMl09bi5zbGljZSgwLHQpKSxlLnNsaWNlKDAs
MykpfX0sZmlsdGVyOntUQUc6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yZXBsYWNlKG50LHJ0KS50b0xv
d2VyQ2FzZSgpO3JldHVybiIqIj09PWU/ZnVuY3Rpb24oKXtyZXR1cm4hMH06ZnVuY3Rpb24oZSl7
cmV0dXJuIGUubm9kZU5hbWUmJmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PXR9fSxDTEFTUzpm
dW5jdGlvbihlKXt2YXIgdD1DW2UrIiAiXTtyZXR1cm4gdHx8KHQ9UmVnRXhwKCIoXnwiK00rIiki
K2UrIigiK00rInwkKSIpKSYmQyhlLGZ1bmN0aW9uKGUpe3JldHVybiB0LnRlc3QoInN0cmluZyI9
PXR5cGVvZiBlLmNsYXNzTmFtZSYmZS5jbGFzc05hbWV8fHR5cGVvZiBlLmdldEF0dHJpYnV0ZSE9
PWomJmUuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9KX0sQVRUUjpmdW5jdGlvbihlLHQsbil7
cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBpPW90LmF0dHIocixlKTtyZXR1cm4gbnVsbD09aT8iIT0i
PT09dDp0PyhpKz0iIiwiPSI9PT10P2k9PT1uOiIhPSI9PT10P2khPT1uOiJePSI9PT10P24mJjA9
PT1pLmluZGV4T2Yobik6Iio9Ij09PXQ/biYmaS5pbmRleE9mKG4pPi0xOiIkPSI9PT10P24mJmku
c2xpY2UoLW4ubGVuZ3RoKT09PW46In49Ij09PXQ/KCIgIitpKyIgIikuaW5kZXhPZihuKT4tMToi
fD0iPT09dD9pPT09bnx8aS5zbGljZSgwLG4ubGVuZ3RoKzEpPT09bisiLSI6ITEpOiEwfX0sQ0hJ
TEQ6ZnVuY3Rpb24oZSx0LG4scixpKXt2YXIgbz0ibnRoIiE9PWUuc2xpY2UoMCwzKSxzPSJsYXN0
IiE9PWUuc2xpY2UoLTQpLGE9Im9mLXR5cGUiPT09dDtyZXR1cm4gMT09PXImJjA9PT1pP2Z1bmN0
aW9uKGUpe3JldHVybiEhZS5wYXJlbnROb2RlfTpmdW5jdGlvbih0LG4sdSl7dmFyIGwsYyxwLGYs
aCxkLGc9byE9PXM/Im5leHRTaWJsaW5nIjoicHJldmlvdXNTaWJsaW5nIixtPXQucGFyZW50Tm9k
ZSx5PWEmJnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSx4PSF1JiYhYTtpZihtKXtpZihvKXt3aGls
ZShnKXtwPXQ7d2hpbGUocD1wW2ddKWlmKGE/cC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09eTox
PT09cC5ub2RlVHlwZSlyZXR1cm4hMTtkPWc9Im9ubHkiPT09ZSYmIWQmJiJuZXh0U2libGluZyJ9
cmV0dXJuITB9aWYoZD1bcz9tLmZpcnN0Q2hpbGQ6bS5sYXN0Q2hpbGRdLHMmJngpe2M9bVt2XXx8
KG1bdl09e30pLGw9Y1tlXXx8W10saD1sWzBdPT09dyYmbFsxXSxmPWxbMF09PT13JiZsWzJdLHA9
aCYmbS5jaGlsZE5vZGVzW2hdO3doaWxlKHA9KytoJiZwJiZwW2ddfHwoZj1oPTApfHxkLnBvcCgp
KWlmKDE9PT1wLm5vZGVUeXBlJiYrK2YmJnA9PT10KXtjW2VdPVt3LGgsZl07YnJlYWt9fWVsc2Ug
aWYoeCYmKGw9KHRbdl18fCh0W3ZdPXt9KSlbZV0pJiZsWzBdPT09dylmPWxbMV07ZWxzZSB3aGls
ZShwPSsraCYmcCYmcFtnXXx8KGY9aD0wKXx8ZC5wb3AoKSlpZigoYT9wLm5vZGVOYW1lLnRvTG93
ZXJDYXNlKCk9PT15OjE9PT1wLm5vZGVUeXBlKSYmKytmJiYoeCYmKChwW3ZdfHwocFt2XT17fSkp
W2VdPVt3LGZdKSxwPT09dCkpYnJlYWs7cmV0dXJuIGYtPWksZj09PXJ8fDA9PT1mJXImJmYvcj49
MH19fSxQU0VVRE86ZnVuY3Rpb24oZSx0KXt2YXIgbixyPWkucHNldWRvc1tlXXx8aS5zZXRGaWx0
ZXJzW2UudG9Mb3dlckNhc2UoKV18fG90LmVycm9yKCJ1bnN1cHBvcnRlZCBwc2V1ZG86ICIrZSk7
cmV0dXJuIHJbdl0/cih0KTpyLmxlbmd0aD4xPyhuPVtlLGUsIiIsdF0saS5zZXRGaWx0ZXJzLmhh
c093blByb3BlcnR5KGUudG9Mb3dlckNhc2UoKSk/YXQoZnVuY3Rpb24oZSxuKXt2YXIgaSxvPXIo
ZSx0KSxzPW8ubGVuZ3RoO3doaWxlKHMtLSlpPVAuY2FsbChlLG9bc10pLGVbaV09IShuW2ldPW9b
c10pfSk6ZnVuY3Rpb24oZSl7cmV0dXJuIHIoZSwwLG4pfSk6cn19LHBzZXVkb3M6e25vdDphdChm
dW5jdGlvbihlKXt2YXIgdD1bXSxuPVtdLHI9YShlLnJlcGxhY2UoeiwiJDEiKSk7cmV0dXJuIHJb
dl0/YXQoZnVuY3Rpb24oZSx0LG4saSl7dmFyIG8scz1yKGUsbnVsbCxpLFtdKSxhPWUubGVuZ3Ro
O3doaWxlKGEtLSkobz1zW2FdKSYmKGVbYV09ISh0W2FdPW8pKX0pOmZ1bmN0aW9uKGUsaSxvKXty
ZXR1cm4gdFswXT1lLHIodCxudWxsLG8sbiksIW4ucG9wKCl9fSksaGFzOmF0KGZ1bmN0aW9uKGUp
e3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gb3QoZSx0KS5sZW5ndGg+MH19KSxjb250YWluczph
dChmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuKHQudGV4dENvbnRlbnR8fHQu
aW5uZXJUZXh0fHxvKHQpKS5pbmRleE9mKGUpPi0xfX0pLGxhbmc6YXQoZnVuY3Rpb24oZSl7cmV0
dXJuIEcudGVzdChlfHwiIil8fG90LmVycm9yKCJ1bnN1cHBvcnRlZCBsYW5nOiAiK2UpLGU9ZS5y
ZXBsYWNlKG50LHJ0KS50b0xvd2VyQ2FzZSgpLGZ1bmN0aW9uKHQpe3ZhciBuO2RvIGlmKG49aD90
Lmxhbmc6dC5nZXRBdHRyaWJ1dGUoInhtbDpsYW5nIil8fHQuZ2V0QXR0cmlidXRlKCJsYW5nIikp
cmV0dXJuIG49bi50b0xvd2VyQ2FzZSgpLG49PT1lfHwwPT09bi5pbmRleE9mKGUrIi0iKTt3aGls
ZSgodD10LnBhcmVudE5vZGUpJiYxPT09dC5ub2RlVHlwZSk7cmV0dXJuITF9fSksdGFyZ2V0OmZ1
bmN0aW9uKHQpe3ZhciBuPWUubG9jYXRpb24mJmUubG9jYXRpb24uaGFzaDtyZXR1cm4gbiYmbi5z
bGljZSgxKT09PXQuaWR9LHJvb3Q6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1mfSxmb2N1czpmdW5j
dGlvbihlKXtyZXR1cm4gZT09PXAuYWN0aXZlRWxlbWVudCYmKCFwLmhhc0ZvY3VzfHxwLmhhc0Zv
Y3VzKCkpJiYhIShlLnR5cGV8fGUuaHJlZnx8fmUudGFiSW5kZXgpfSxlbmFibGVkOmZ1bmN0aW9u
KGUpe3JldHVybiBlLmRpc2FibGVkPT09ITF9LGRpc2FibGVkOmZ1bmN0aW9uKGUpe3JldHVybiBl
LmRpc2FibGVkPT09ITB9LGNoZWNrZWQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5ub2RlTmFtZS50b0xv
d2VyQ2FzZSgpO3JldHVybiJpbnB1dCI9PT10JiYhIWUuY2hlY2tlZHx8Im9wdGlvbiI9PT10JiYh
IWUuc2VsZWN0ZWR9LHNlbGVjdGVkOmZ1bmN0aW9uKGUpe3JldHVybiBlLnBhcmVudE5vZGUmJmUu
cGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4LGUuc2VsZWN0ZWQ9PT0hMH0sZW1wdHk6ZnVuY3Rpb24o
ZSl7Zm9yKGU9ZS5maXJzdENoaWxkO2U7ZT1lLm5leHRTaWJsaW5nKWlmKGUubm9kZU5hbWU+IkAi
fHwzPT09ZS5ub2RlVHlwZXx8ND09PWUubm9kZVR5cGUpcmV0dXJuITE7cmV0dXJuITB9LHBhcmVu
dDpmdW5jdGlvbihlKXtyZXR1cm4haS5wc2V1ZG9zLmVtcHR5KGUpfSxoZWFkZXI6ZnVuY3Rpb24o
ZSl7cmV0dXJuIGV0LnRlc3QoZS5ub2RlTmFtZSl9LGlucHV0OmZ1bmN0aW9uKGUpe3JldHVybiBa
LnRlc3QoZS5ub2RlTmFtZSl9LGJ1dHRvbjpmdW5jdGlvbihlKXt2YXIgdD1lLm5vZGVOYW1lLnRv
TG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PXQmJiJidXR0b24iPT09ZS50eXBlfHwiYnV0dG9u
Ij09PXR9LHRleHQ6ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuImlucHV0Ij09PWUubm9kZU5hbWUu
dG9Mb3dlckNhc2UoKSYmInRleHQiPT09ZS50eXBlJiYobnVsbD09KHQ9ZS5nZXRBdHRyaWJ1dGUo
InR5cGUiKSl8fHQudG9Mb3dlckNhc2UoKT09PWUudHlwZSl9LGZpcnN0Omh0KGZ1bmN0aW9uKCl7
cmV0dXJuWzBdfSksbGFzdDpodChmdW5jdGlvbihlLHQpe3JldHVyblt0LTFdfSksZXE6aHQoZnVu
Y3Rpb24oZSx0LG4pe3JldHVyblswPm4/bit0Om5dfSksZXZlbjpodChmdW5jdGlvbihlLHQpe3Zh
ciBuPTA7Zm9yKDt0Pm47bis9MillLnB1c2gobik7cmV0dXJuIGV9KSxvZGQ6aHQoZnVuY3Rpb24o
ZSx0KXt2YXIgbj0xO2Zvcig7dD5uO24rPTIpZS5wdXNoKG4pO3JldHVybiBlfSksbHQ6aHQoZnVu
Y3Rpb24oZSx0LG4pe3ZhciByPTA+bj9uK3Q6bjtmb3IoOy0tcj49MDspZS5wdXNoKHIpO3JldHVy
biBlfSksZ3Q6aHQoZnVuY3Rpb24oZSx0LG4pe3ZhciByPTA+bj9uK3Q6bjtmb3IoO3Q+KytyOyll
LnB1c2gocik7cmV0dXJuIGV9KX19LGkucHNldWRvcy5udGg9aS5wc2V1ZG9zLmVxO2Zvcih0IGlu
e3JhZGlvOiEwLGNoZWNrYm94OiEwLGZpbGU6ITAscGFzc3dvcmQ6ITAsaW1hZ2U6ITB9KWkucHNl
dWRvc1t0XT1wdCh0KTtmb3IodCBpbntzdWJtaXQ6ITAscmVzZXQ6ITB9KWkucHNldWRvc1t0XT1m
dCh0KTtmdW5jdGlvbiBkdCgpe31kdC5wcm90b3R5cGU9aS5maWx0ZXJzPWkucHNldWRvcyxpLnNl
dEZpbHRlcnM9bmV3IGR0O2Z1bmN0aW9uIGd0KGUsdCl7dmFyIG4scixvLHMsYSx1LGwsYz1rW2Ur
IiAiXTtpZihjKXJldHVybiB0PzA6Yy5zbGljZSgwKTthPWUsdT1bXSxsPWkucHJlRmlsdGVyO3do
aWxlKGEpeyghbnx8KHI9Xy5leGVjKGEpKSkmJihyJiYoYT1hLnNsaWNlKHJbMF0ubGVuZ3RoKXx8
YSksdS5wdXNoKG89W10pKSxuPSExLChyPVguZXhlYyhhKSkmJihuPXIuc2hpZnQoKSxvLnB1c2go
e3ZhbHVlOm4sdHlwZTpyWzBdLnJlcGxhY2UoeiwiICIpfSksYT1hLnNsaWNlKG4ubGVuZ3RoKSk7
Zm9yKHMgaW4gaS5maWx0ZXIpIShyPUpbc10uZXhlYyhhKSl8fGxbc10mJiEocj1sW3NdKHIpKXx8
KG49ci5zaGlmdCgpLG8ucHVzaCh7dmFsdWU6bix0eXBlOnMsbWF0Y2hlczpyfSksYT1hLnNsaWNl
KG4ubGVuZ3RoKSk7aWYoIW4pYnJlYWt9cmV0dXJuIHQ/YS5sZW5ndGg6YT9vdC5lcnJvcihlKTpr
KGUsdSkuc2xpY2UoMCl9ZnVuY3Rpb24gbXQoZSl7dmFyIHQ9MCxuPWUubGVuZ3RoLHI9IiI7Zm9y
KDtuPnQ7dCsrKXIrPWVbdF0udmFsdWU7cmV0dXJuIHJ9ZnVuY3Rpb24geXQoZSx0LG4pe3ZhciBp
PXQuZGlyLG89biYmInBhcmVudE5vZGUiPT09aSxzPVQrKztyZXR1cm4gdC5maXJzdD9mdW5jdGlv
bih0LG4scil7d2hpbGUodD10W2ldKWlmKDE9PT10Lm5vZGVUeXBlfHxvKXJldHVybiBlKHQsbixy
KX06ZnVuY3Rpb24odCxuLGEpe3ZhciB1LGwsYyxwPXcrIiAiK3M7aWYoYSl7d2hpbGUodD10W2ld
KWlmKCgxPT09dC5ub2RlVHlwZXx8bykmJmUodCxuLGEpKXJldHVybiEwfWVsc2Ugd2hpbGUodD10
W2ldKWlmKDE9PT10Lm5vZGVUeXBlfHxvKWlmKGM9dFt2XXx8KHRbdl09e30pLChsPWNbaV0pJiZs
WzBdPT09cCl7aWYoKHU9bFsxXSk9PT0hMHx8dT09PXIpcmV0dXJuIHU9PT0hMH1lbHNlIGlmKGw9
Y1tpXT1bcF0sbFsxXT1lKHQsbixhKXx8cixsWzFdPT09ITApcmV0dXJuITB9fWZ1bmN0aW9uIHZ0
KGUpe3JldHVybiBlLmxlbmd0aD4xP2Z1bmN0aW9uKHQsbixyKXt2YXIgaT1lLmxlbmd0aDt3aGls
ZShpLS0paWYoIWVbaV0odCxuLHIpKXJldHVybiExO3JldHVybiEwfTplWzBdfWZ1bmN0aW9uIHh0
KGUsdCxuLHIsaSl7dmFyIG8scz1bXSxhPTAsdT1lLmxlbmd0aCxsPW51bGwhPXQ7Zm9yKDt1PmE7
YSsrKShvPWVbYV0pJiYoIW58fG4obyxyLGkpKSYmKHMucHVzaChvKSxsJiZ0LnB1c2goYSkpO3Jl
dHVybiBzfWZ1bmN0aW9uIGJ0KGUsdCxuLHIsaSxvKXtyZXR1cm4gciYmIXJbdl0mJihyPWJ0KHIp
KSxpJiYhaVt2XSYmKGk9YnQoaSxvKSksYXQoZnVuY3Rpb24obyxzLGEsdSl7dmFyIGwsYyxwLGY9
W10saD1bXSxkPXMubGVuZ3RoLGc9b3x8Q3QodHx8IioiLGEubm9kZVR5cGU/W2FdOmEsW10pLG09
IWV8fCFvJiZ0P2c6eHQoZyxmLGUsYSx1KSx5PW4/aXx8KG8/ZTpkfHxyKT9bXTpzOm07aWYobiYm
bihtLHksYSx1KSxyKXtsPXh0KHksaCkscihsLFtdLGEsdSksYz1sLmxlbmd0aDt3aGlsZShjLS0p
KHA9bFtjXSkmJih5W2hbY11dPSEobVtoW2NdXT1wKSl9aWYobyl7aWYoaXx8ZSl7aWYoaSl7bD1b
XSxjPXkubGVuZ3RoO3doaWxlKGMtLSkocD15W2NdKSYmbC5wdXNoKG1bY109cCk7aShudWxsLHk9
W10sbCx1KX1jPXkubGVuZ3RoO3doaWxlKGMtLSkocD15W2NdKSYmKGw9aT9QLmNhbGwobyxwKTpm
W2NdKT4tMSYmKG9bbF09IShzW2xdPXApKX19ZWxzZSB5PXh0KHk9PT1zP3kuc3BsaWNlKGQseS5s
ZW5ndGgpOnkpLGk/aShudWxsLHMseSx1KTpPLmFwcGx5KHMseSl9KX1mdW5jdGlvbiB3dChlKXt2
YXIgdCxuLHIsbz1lLmxlbmd0aCxzPWkucmVsYXRpdmVbZVswXS50eXBlXSxhPXN8fGkucmVsYXRp
dmVbIiAiXSxsPXM/MTowLGM9eXQoZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT10fSxhLCEwKSxwPXl0
KGZ1bmN0aW9uKGUpe3JldHVybiBQLmNhbGwodCxlKT4tMX0sYSwhMCksZj1bZnVuY3Rpb24oZSxu
LHIpe3JldHVybiFzJiYocnx8biE9PXUpfHwoKHQ9bikubm9kZVR5cGU/YyhlLG4scik6cChlLG4s
cikpfV07Zm9yKDtvPmw7bCsrKWlmKG49aS5yZWxhdGl2ZVtlW2xdLnR5cGVdKWY9W3l0KHZ0KGYp
LG4pXTtlbHNle2lmKG49aS5maWx0ZXJbZVtsXS50eXBlXS5hcHBseShudWxsLGVbbF0ubWF0Y2hl
cyksblt2XSl7Zm9yKHI9KytsO28+cjtyKyspaWYoaS5yZWxhdGl2ZVtlW3JdLnR5cGVdKWJyZWFr
O3JldHVybiBidChsPjEmJnZ0KGYpLGw+MSYmbXQoZS5zbGljZSgwLGwtMSkuY29uY2F0KHt2YWx1
ZToiICI9PT1lW2wtMl0udHlwZT8iKiI6IiJ9KSkucmVwbGFjZSh6LCIkMSIpLG4scj5sJiZ3dChl
LnNsaWNlKGwscikpLG8+ciYmd3QoZT1lLnNsaWNlKHIpKSxvPnImJm10KGUpKX1mLnB1c2gobil9
cmV0dXJuIHZ0KGYpfWZ1bmN0aW9uIFR0KGUsdCl7dmFyIG49MCxvPXQubGVuZ3RoPjAscz1lLmxl
bmd0aD4wLGE9ZnVuY3Rpb24oYSxsLGMsZixoKXt2YXIgZCxnLG0seT1bXSx2PTAseD0iMCIsYj1h
JiZbXSxUPW51bGwhPWgsQz11LGs9YXx8cyYmaS5maW5kLlRBRygiKiIsaCYmbC5wYXJlbnROb2Rl
fHxsKSxOPXcrPW51bGw9PUM/MTpNYXRoLnJhbmRvbSgpfHwuMTtmb3IoVCYmKHU9bCE9PXAmJmws
cj1uKTtudWxsIT0oZD1rW3hdKTt4Kyspe2lmKHMmJmQpe2c9MDt3aGlsZShtPWVbZysrXSlpZiht
KGQsbCxjKSl7Zi5wdXNoKGQpO2JyZWFrfVQmJih3PU4scj0rK24pfW8mJigoZD0hbSYmZCkmJnYt
LSxhJiZiLnB1c2goZCkpfWlmKHYrPXgsbyYmeCE9PXYpe2c9MDt3aGlsZShtPXRbZysrXSltKGIs
eSxsLGMpO2lmKGEpe2lmKHY+MCl3aGlsZSh4LS0pYlt4XXx8eVt4XXx8KHlbeF09cS5jYWxsKGYp
KTt5PXh0KHkpfU8uYXBwbHkoZix5KSxUJiYhYSYmeS5sZW5ndGg+MCYmdit0Lmxlbmd0aD4xJiZv
dC51bmlxdWVTb3J0KGYpfXJldHVybiBUJiYodz1OLHU9QyksYn07cmV0dXJuIG8/YXQoYSk6YX1h
PW90LmNvbXBpbGU9ZnVuY3Rpb24oZSx0KXt2YXIgbixyPVtdLGk9W10sbz1OW2UrIiAiXTtpZigh
byl7dHx8KHQ9Z3QoZSkpLG49dC5sZW5ndGg7d2hpbGUobi0tKW89d3QodFtuXSksb1t2XT9yLnB1
c2gobyk6aS5wdXNoKG8pO289TihlLFR0KGkscikpfXJldHVybiBvfTtmdW5jdGlvbiBDdChlLHQs
bil7dmFyIHI9MCxpPXQubGVuZ3RoO2Zvcig7aT5yO3IrKylvdChlLHRbcl0sbik7cmV0dXJuIG59
ZnVuY3Rpb24ga3QoZSx0LHIsbyl7dmFyIHMsdSxsLGMscCxmPWd0KGUpO2lmKCFvJiYxPT09Zi5s
ZW5ndGgpe2lmKHU9ZlswXT1mWzBdLnNsaWNlKDApLHUubGVuZ3RoPjImJiJJRCI9PT0obD11WzBd
KS50eXBlJiZuLmdldEJ5SWQmJjk9PT10Lm5vZGVUeXBlJiZoJiZpLnJlbGF0aXZlW3VbMV0udHlw
ZV0pe2lmKHQ9KGkuZmluZC5JRChsLm1hdGNoZXNbMF0ucmVwbGFjZShudCxydCksdCl8fFtdKVsw
XSwhdClyZXR1cm4gcjtlPWUuc2xpY2UodS5zaGlmdCgpLnZhbHVlLmxlbmd0aCl9cz1KLm5lZWRz
Q29udGV4dC50ZXN0KGUpPzA6dS5sZW5ndGg7d2hpbGUocy0tKXtpZihsPXVbc10saS5yZWxhdGl2
ZVtjPWwudHlwZV0pYnJlYWs7aWYoKHA9aS5maW5kW2NdKSYmKG89cChsLm1hdGNoZXNbMF0ucmVw
bGFjZShudCxydCksVS50ZXN0KHVbMF0udHlwZSkmJnQucGFyZW50Tm9kZXx8dCkpKXtpZih1LnNw
bGljZShzLDEpLGU9by5sZW5ndGgmJm10KHUpLCFlKXJldHVybiBPLmFwcGx5KHIsbykscjticmVh
a319fXJldHVybiBhKGUsZikobyx0LCFoLHIsVS50ZXN0KGUpKSxyfW4uc29ydFN0YWJsZT12LnNw
bGl0KCIiKS5zb3J0KFMpLmpvaW4oIiIpPT09dixuLmRldGVjdER1cGxpY2F0ZXM9RSxjKCksbi5z
b3J0RGV0YWNoZWQ9dXQoZnVuY3Rpb24oZSl7cmV0dXJuIDEmZS5jb21wYXJlRG9jdW1lbnRQb3Np
dGlvbihwLmNyZWF0ZUVsZW1lbnQoImRpdiIpKX0pLHV0KGZ1bmN0aW9uKGUpe3JldHVybiBlLmlu
bmVySFRNTD0iPGEgaHJlZj0nIyc+PC9hPiIsIiMiPT09ZS5maXJzdENoaWxkLmdldEF0dHJpYnV0
ZSgiaHJlZiIpfSl8fGx0KCJ0eXBlfGhyZWZ8aGVpZ2h0fHdpZHRoIixmdW5jdGlvbihlLHQsbil7
cmV0dXJuIG4/dW5kZWZpbmVkOmUuZ2V0QXR0cmlidXRlKHQsInR5cGUiPT09dC50b0xvd2VyQ2Fz
ZSgpPzE6Mil9KSxuLmF0dHJpYnV0ZXMmJnV0KGZ1bmN0aW9uKGUpe3JldHVybiBlLmlubmVySFRN
TD0iPGlucHV0Lz4iLGUuZmlyc3RDaGlsZC5zZXRBdHRyaWJ1dGUoInZhbHVlIiwiIiksIiI9PT1l
LmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpfSl8fGx0KCJ2YWx1ZSIsZnVuY3Rpb24o
ZSx0LG4pe3JldHVybiBufHwiaW5wdXQiIT09ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpP3VuZGVm
aW5lZDplLmRlZmF1bHRWYWx1ZX0pLHV0KGZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lLmdldEF0
dHJpYnV0ZSgiZGlzYWJsZWQiKX0pfHxsdChSLGZ1bmN0aW9uKGUsdCxuKXt2YXIgcjtyZXR1cm4g
bj91bmRlZmluZWQ6KHI9ZS5nZXRBdHRyaWJ1dGVOb2RlKHQpKSYmci5zcGVjaWZpZWQ/ci52YWx1
ZTplW3RdPT09ITA/dC50b0xvd2VyQ2FzZSgpOm51bGx9KSx4LmZpbmQ9b3QseC5leHByPW90LnNl
bGVjdG9ycyx4LmV4cHJbIjoiXT14LmV4cHIucHNldWRvcyx4LnVuaXF1ZT1vdC51bmlxdWVTb3J0
LHgudGV4dD1vdC5nZXRUZXh0LHguaXNYTUxEb2M9b3QuaXNYTUwseC5jb250YWlucz1vdC5jb250
YWluc30oZSk7dmFyIEQ9e307ZnVuY3Rpb24gQShlKXt2YXIgdD1EW2VdPXt9O3JldHVybiB4LmVh
Y2goZS5tYXRjaCh3KXx8W10sZnVuY3Rpb24oZSxuKXt0W25dPSEwfSksdH14LkNhbGxiYWNrcz1m
dW5jdGlvbihlKXtlPSJzdHJpbmciPT10eXBlb2YgZT9EW2VdfHxBKGUpOnguZXh0ZW5kKHt9LGUp
O3ZhciB0LG4scixpLG8scyxhPVtdLHU9IWUub25jZSYmW10sbD1mdW5jdGlvbihwKXtmb3IodD1l
Lm1lbW9yeSYmcCxuPSEwLHM9aXx8MCxpPTAsbz1hLmxlbmd0aCxyPSEwO2EmJm8+cztzKyspaWYo
YVtzXS5hcHBseShwWzBdLHBbMV0pPT09ITEmJmUuc3RvcE9uRmFsc2Upe3Q9ITE7YnJlYWt9cj0h
MSxhJiYodT91Lmxlbmd0aCYmbCh1LnNoaWZ0KCkpOnQ/YT1bXTpjLmRpc2FibGUoKSl9LGM9e2Fk
ZDpmdW5jdGlvbigpe2lmKGEpe3ZhciBuPWEubGVuZ3RoOyhmdW5jdGlvbiBzKHQpe3guZWFjaCh0
LGZ1bmN0aW9uKHQsbil7dmFyIHI9eC50eXBlKG4pOyJmdW5jdGlvbiI9PT1yP2UudW5pcXVlJiZj
LmhhcyhuKXx8YS5wdXNoKG4pOm4mJm4ubGVuZ3RoJiYic3RyaW5nIiE9PXImJnMobil9KX0pKGFy
Z3VtZW50cykscj9vPWEubGVuZ3RoOnQmJihpPW4sbCh0KSl9cmV0dXJuIHRoaXN9LHJlbW92ZTpm
dW5jdGlvbigpe3JldHVybiBhJiZ4LmVhY2goYXJndW1lbnRzLGZ1bmN0aW9uKGUsdCl7dmFyIG47
d2hpbGUoKG49eC5pbkFycmF5KHQsYSxuKSk+LTEpYS5zcGxpY2UobiwxKSxyJiYobz49biYmby0t
LHM+PW4mJnMtLSl9KSx0aGlzfSxoYXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGU/eC5pbkFycmF5KGUs
YSk+LTE6ISghYXx8IWEubGVuZ3RoKX0sZW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4gYT1bXSxvPTAs
dGhpc30sZGlzYWJsZTpmdW5jdGlvbigpe3JldHVybiBhPXU9dD11bmRlZmluZWQsdGhpc30sZGlz
YWJsZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hYX0sbG9jazpmdW5jdGlvbigpe3JldHVybiB1PXVuZGVm
aW5lZCx0fHxjLmRpc2FibGUoKSx0aGlzfSxsb2NrZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hdX0sZmly
ZVdpdGg6ZnVuY3Rpb24oZSx0KXtyZXR1cm4hYXx8biYmIXV8fCh0PXR8fFtdLHQ9W2UsdC5zbGlj
ZT90LnNsaWNlKCk6dF0scj91LnB1c2godCk6bCh0KSksdGhpc30sZmlyZTpmdW5jdGlvbigpe3Jl
dHVybiBjLmZpcmVXaXRoKHRoaXMsYXJndW1lbnRzKSx0aGlzfSxmaXJlZDpmdW5jdGlvbigpe3Jl
dHVybiEhbn19O3JldHVybiBjfSx4LmV4dGVuZCh7RGVmZXJyZWQ6ZnVuY3Rpb24oZSl7dmFyIHQ9
W1sicmVzb2x2ZSIsImRvbmUiLHguQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLCJyZXNvbHZlZCJd
LFsicmVqZWN0IiwiZmFpbCIseC5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksInJlamVjdGVkIl0s
WyJub3RpZnkiLCJwcm9ncmVzcyIseC5DYWxsYmFja3MoIm1lbW9yeSIpXV0sbj0icGVuZGluZyIs
cj17c3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gbn0sYWx3YXlzOmZ1bmN0aW9uKCl7cmV0dXJuIGku
ZG9uZShhcmd1bWVudHMpLmZhaWwoYXJndW1lbnRzKSx0aGlzfSx0aGVuOmZ1bmN0aW9uKCl7dmFy
IGU9YXJndW1lbnRzO3JldHVybiB4LkRlZmVycmVkKGZ1bmN0aW9uKG4pe3guZWFjaCh0LGZ1bmN0
aW9uKHQsbyl7dmFyIHM9b1swXSxhPXguaXNGdW5jdGlvbihlW3RdKSYmZVt0XTtpW29bMV1dKGZ1
bmN0aW9uKCl7dmFyIGU9YSYmYS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7ZSYmeC5pc0Z1bmN0aW9u
KGUucHJvbWlzZSk/ZS5wcm9taXNlKCkuZG9uZShuLnJlc29sdmUpLmZhaWwobi5yZWplY3QpLnBy
b2dyZXNzKG4ubm90aWZ5KTpuW3MrIldpdGgiXSh0aGlzPT09cj9uLnByb21pc2UoKTp0aGlzLGE/
W2VdOmFyZ3VtZW50cyl9KX0pLGU9bnVsbH0pLnByb21pc2UoKX0scHJvbWlzZTpmdW5jdGlvbihl
KXtyZXR1cm4gbnVsbCE9ZT94LmV4dGVuZChlLHIpOnJ9fSxpPXt9O3JldHVybiByLnBpcGU9ci50
aGVuLHguZWFjaCh0LGZ1bmN0aW9uKGUsbyl7dmFyIHM9b1syXSxhPW9bM107cltvWzFdXT1zLmFk
ZCxhJiZzLmFkZChmdW5jdGlvbigpe249YX0sdFsxXmVdWzJdLmRpc2FibGUsdFsyXVsyXS5sb2Nr
KSxpW29bMF1dPWZ1bmN0aW9uKCl7cmV0dXJuIGlbb1swXSsiV2l0aCJdKHRoaXM9PT1pP3I6dGhp
cyxhcmd1bWVudHMpLHRoaXN9LGlbb1swXSsiV2l0aCJdPXMuZmlyZVdpdGh9KSxyLnByb21pc2Uo
aSksZSYmZS5jYWxsKGksaSksaX0sd2hlbjpmdW5jdGlvbihlKXt2YXIgdD0wLG49ZC5jYWxsKGFy
Z3VtZW50cykscj1uLmxlbmd0aCxpPTEhPT1yfHxlJiZ4LmlzRnVuY3Rpb24oZS5wcm9taXNlKT9y
OjAsbz0xPT09aT9lOnguRGVmZXJyZWQoKSxzPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZnVuY3Rp
b24ocil7dFtlXT10aGlzLG5bZV09YXJndW1lbnRzLmxlbmd0aD4xP2QuY2FsbChhcmd1bWVudHMp
OnIsbj09PWE/by5ub3RpZnlXaXRoKHQsbik6LS1pfHxvLnJlc29sdmVXaXRoKHQsbil9fSxhLHUs
bDtpZihyPjEpZm9yKGE9QXJyYXkociksdT1BcnJheShyKSxsPUFycmF5KHIpO3I+dDt0Kyspblt0
XSYmeC5pc0Z1bmN0aW9uKG5bdF0ucHJvbWlzZSk/blt0XS5wcm9taXNlKCkuZG9uZShzKHQsbCxu
KSkuZmFpbChvLnJlamVjdCkucHJvZ3Jlc3Mocyh0LHUsYSkpOi0taTtyZXR1cm4gaXx8by5yZXNv
bHZlV2l0aChsLG4pLG8ucHJvbWlzZSgpfX0pLHguc3VwcG9ydD1mdW5jdGlvbih0KXt2YXIgbj1v
LmNyZWF0ZUVsZW1lbnQoImlucHV0Iikscj1vLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxpPW8u
Y3JlYXRlRWxlbWVudCgiZGl2Iikscz1vLmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpLGE9cy5hcHBl
bmRDaGlsZChvLmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIpKTtyZXR1cm4gbi50eXBlPyhuLnR5cGU9
ImNoZWNrYm94Iix0LmNoZWNrT249IiIhPT1uLnZhbHVlLHQub3B0U2VsZWN0ZWQ9YS5zZWxlY3Rl
ZCx0LnJlbGlhYmxlTWFyZ2luUmlnaHQ9ITAsdC5ib3hTaXppbmdSZWxpYWJsZT0hMCx0LnBpeGVs
UG9zaXRpb249ITEsbi5jaGVja2VkPSEwLHQubm9DbG9uZUNoZWNrZWQ9bi5jbG9uZU5vZGUoITAp
LmNoZWNrZWQscy5kaXNhYmxlZD0hMCx0Lm9wdERpc2FibGVkPSFhLmRpc2FibGVkLG49by5jcmVh
dGVFbGVtZW50KCJpbnB1dCIpLG4udmFsdWU9InQiLG4udHlwZT0icmFkaW8iLHQucmFkaW9WYWx1
ZT0idCI9PT1uLnZhbHVlLG4uc2V0QXR0cmlidXRlKCJjaGVja2VkIiwidCIpLG4uc2V0QXR0cmli
dXRlKCJuYW1lIiwidCIpLHIuYXBwZW5kQ2hpbGQobiksdC5jaGVja0Nsb25lPXIuY2xvbmVOb2Rl
KCEwKS5jbG9uZU5vZGUoITApLmxhc3RDaGlsZC5jaGVja2VkLHQuZm9jdXNpbkJ1YmJsZXM9Im9u
Zm9jdXNpbiJpbiBlLGkuc3R5bGUuYmFja2dyb3VuZENsaXA9ImNvbnRlbnQtYm94IixpLmNsb25l
Tm9kZSghMCkuc3R5bGUuYmFja2dyb3VuZENsaXA9IiIsdC5jbGVhckNsb25lU3R5bGU9ImNvbnRl
bnQtYm94Ij09PWkuc3R5bGUuYmFja2dyb3VuZENsaXAseChmdW5jdGlvbigpe3ZhciBuLHIscz0i
cGFkZGluZzowO21hcmdpbjowO2JvcmRlcjowO2Rpc3BsYXk6YmxvY2s7LXdlYmtpdC1ib3gtc2l6
aW5nOmNvbnRlbnQtYm94Oy1tb3otYm94LXNpemluZzpjb250ZW50LWJveDtib3gtc2l6aW5nOmNv
bnRlbnQtYm94IixhPW8uZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXTthJiYobj1vLmNy
ZWF0ZUVsZW1lbnQoImRpdiIpLG4uc3R5bGUuY3NzVGV4dD0iYm9yZGVyOjA7d2lkdGg6MDtoZWln
aHQ6MDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0Oi05OTk5cHg7bWFyZ2luLXRvcDoxcHgi
LGEuYXBwZW5kQ2hpbGQobikuYXBwZW5kQ2hpbGQoaSksaS5pbm5lckhUTUw9IiIsaS5zdHlsZS5j
c3NUZXh0PSItd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDstbW96LWJveC1zaXppbmc6Ym9y
ZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzoxcHg7Ym9yZGVyOjFweDtkaXNw
bGF5OmJsb2NrO3dpZHRoOjRweDttYXJnaW4tdG9wOjElO3Bvc2l0aW9uOmFic29sdXRlO3RvcDox
JSIseC5zd2FwKGEsbnVsbCE9YS5zdHlsZS56b29tP3t6b29tOjF9Ont9LGZ1bmN0aW9uKCl7dC5i
b3hTaXppbmc9ND09PWkub2Zmc2V0V2lkdGh9KSxlLmdldENvbXB1dGVkU3R5bGUmJih0LnBpeGVs
UG9zaXRpb249IjElIiE9PShlLmdldENvbXB1dGVkU3R5bGUoaSxudWxsKXx8e30pLnRvcCx0LmJv
eFNpemluZ1JlbGlhYmxlPSI0cHgiPT09KGUuZ2V0Q29tcHV0ZWRTdHlsZShpLG51bGwpfHx7d2lk
dGg6IjRweCJ9KS53aWR0aCxyPWkuYXBwZW5kQ2hpbGQoby5jcmVhdGVFbGVtZW50KCJkaXYiKSks
ci5zdHlsZS5jc3NUZXh0PWkuc3R5bGUuY3NzVGV4dD1zLHIuc3R5bGUubWFyZ2luUmlnaHQ9ci5z
dHlsZS53aWR0aD0iMCIsaS5zdHlsZS53aWR0aD0iMXB4Iix0LnJlbGlhYmxlTWFyZ2luUmlnaHQ9
IXBhcnNlRmxvYXQoKGUuZ2V0Q29tcHV0ZWRTdHlsZShyLG51bGwpfHx7fSkubWFyZ2luUmlnaHQp
KSxhLnJlbW92ZUNoaWxkKG4pKX0pLHQpOnR9KHt9KTt2YXIgTCxxLEg9Lyg/Olx7W1xzXFNdKlx9
fFxbW1xzXFNdKlxdKSQvLE89LyhbQS1aXSkvZztmdW5jdGlvbiBGKCl7T2JqZWN0LmRlZmluZVBy
b3BlcnR5KHRoaXMuY2FjaGU9e30sMCx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJue319fSksdGhpcy5l
eHBhbmRvPXguZXhwYW5kbytNYXRoLnJhbmRvbSgpfUYudWlkPTEsRi5hY2NlcHRzPWZ1bmN0aW9u
KGUpe3JldHVybiBlLm5vZGVUeXBlPzE9PT1lLm5vZGVUeXBlfHw5PT09ZS5ub2RlVHlwZTohMH0s
Ri5wcm90b3R5cGU9e2tleTpmdW5jdGlvbihlKXtpZighRi5hY2NlcHRzKGUpKXJldHVybiAwO3Zh
ciB0PXt9LG49ZVt0aGlzLmV4cGFuZG9dO2lmKCFuKXtuPUYudWlkKys7dHJ5e3RbdGhpcy5leHBh
bmRvXT17dmFsdWU6bn0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSx0KX1jYXRjaChyKXt0W3Ro
aXMuZXhwYW5kb109bix4LmV4dGVuZChlLHQpfX1yZXR1cm4gdGhpcy5jYWNoZVtuXXx8KHRoaXMu
Y2FjaGVbbl09e30pLG59LHNldDpmdW5jdGlvbihlLHQsbil7dmFyIHIsaT10aGlzLmtleShlKSxv
PXRoaXMuY2FjaGVbaV07aWYoInN0cmluZyI9PXR5cGVvZiB0KW9bdF09bjtlbHNlIGlmKHguaXNF
bXB0eU9iamVjdChvKSl4LmV4dGVuZCh0aGlzLmNhY2hlW2ldLHQpO2Vsc2UgZm9yKHIgaW4gdClv
W3JdPXRbcl07cmV0dXJuIG99LGdldDpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuY2FjaGVbdGhp
cy5rZXkoZSldO3JldHVybiB0PT09dW5kZWZpbmVkP246blt0XX0sYWNjZXNzOmZ1bmN0aW9uKGUs
dCxuKXt2YXIgcjtyZXR1cm4gdD09PXVuZGVmaW5lZHx8dCYmInN0cmluZyI9PXR5cGVvZiB0JiZu
PT09dW5kZWZpbmVkPyhyPXRoaXMuZ2V0KGUsdCksciE9PXVuZGVmaW5lZD9yOnRoaXMuZ2V0KGUs
eC5jYW1lbENhc2UodCkpKToodGhpcy5zZXQoZSx0LG4pLG4hPT11bmRlZmluZWQ/bjp0KX0scmVt
b3ZlOmZ1bmN0aW9uKGUsdCl7dmFyIG4scixpLG89dGhpcy5rZXkoZSkscz10aGlzLmNhY2hlW29d
O2lmKHQ9PT11bmRlZmluZWQpdGhpcy5jYWNoZVtvXT17fTtlbHNle3guaXNBcnJheSh0KT9yPXQu
Y29uY2F0KHQubWFwKHguY2FtZWxDYXNlKSk6KGk9eC5jYW1lbENhc2UodCksdCBpbiBzP3I9W3Qs
aV06KHI9aSxyPXIgaW4gcz9bcl06ci5tYXRjaCh3KXx8W10pKSxuPXIubGVuZ3RoO3doaWxlKG4t
LSlkZWxldGUgc1tyW25dXX19LGhhc0RhdGE6ZnVuY3Rpb24oZSl7cmV0dXJuIXguaXNFbXB0eU9i
amVjdCh0aGlzLmNhY2hlW2VbdGhpcy5leHBhbmRvXV18fHt9KX0sZGlzY2FyZDpmdW5jdGlvbihl
KXtlW3RoaXMuZXhwYW5kb10mJmRlbGV0ZSB0aGlzLmNhY2hlW2VbdGhpcy5leHBhbmRvXV19fSxM
PW5ldyBGLHE9bmV3IEYseC5leHRlbmQoe2FjY2VwdERhdGE6Ri5hY2NlcHRzLGhhc0RhdGE6ZnVu
Y3Rpb24oZSl7cmV0dXJuIEwuaGFzRGF0YShlKXx8cS5oYXNEYXRhKGUpfSxkYXRhOmZ1bmN0aW9u
KGUsdCxuKXtyZXR1cm4gTC5hY2Nlc3MoZSx0LG4pfSxyZW1vdmVEYXRhOmZ1bmN0aW9uKGUsdCl7
TC5yZW1vdmUoZSx0KX0sX2RhdGE6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBxLmFjY2VzcyhlLHQs
bil9LF9yZW1vdmVEYXRhOmZ1bmN0aW9uKGUsdCl7cS5yZW1vdmUoZSx0KX19KSx4LmZuLmV4dGVu
ZCh7ZGF0YTpmdW5jdGlvbihlLHQpe3ZhciBuLHIsaT10aGlzWzBdLG89MCxzPW51bGw7aWYoZT09
PXVuZGVmaW5lZCl7aWYodGhpcy5sZW5ndGgmJihzPUwuZ2V0KGkpLDE9PT1pLm5vZGVUeXBlJiYh
cS5nZXQoaSwiaGFzRGF0YUF0dHJzIikpKXtmb3Iobj1pLmF0dHJpYnV0ZXM7bi5sZW5ndGg+bztv
Kyspcj1uW29dLm5hbWUsMD09PXIuaW5kZXhPZigiZGF0YS0iKSYmKHI9eC5jYW1lbENhc2Uoci5z
bGljZSg1KSksUChpLHIsc1tyXSkpO3Euc2V0KGksImhhc0RhdGFBdHRycyIsITApfXJldHVybiBz
fXJldHVybiJvYmplY3QiPT10eXBlb2YgZT90aGlzLmVhY2goZnVuY3Rpb24oKXtMLnNldCh0aGlz
LGUpfSk6eC5hY2Nlc3ModGhpcyxmdW5jdGlvbih0KXt2YXIgbixyPXguY2FtZWxDYXNlKGUpO2lm
KGkmJnQ9PT11bmRlZmluZWQpe2lmKG49TC5nZXQoaSxlKSxuIT09dW5kZWZpbmVkKXJldHVybiBu
O2lmKG49TC5nZXQoaSxyKSxuIT09dW5kZWZpbmVkKXJldHVybiBuO2lmKG49UChpLHIsdW5kZWZp
bmVkKSxuIT09dW5kZWZpbmVkKXJldHVybiBufWVsc2UgdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFy
IG49TC5nZXQodGhpcyxyKTtMLnNldCh0aGlzLHIsdCksLTEhPT1lLmluZGV4T2YoIi0iKSYmbiE9
PXVuZGVmaW5lZCYmTC5zZXQodGhpcyxlLHQpfSl9LG51bGwsdCxhcmd1bWVudHMubGVuZ3RoPjEs
bnVsbCwhMCl9LHJlbW92ZURhdGE6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlv
bigpe0wucmVtb3ZlKHRoaXMsZSl9KX19KTtmdW5jdGlvbiBQKGUsdCxuKXt2YXIgcjtpZihuPT09
dW5kZWZpbmVkJiYxPT09ZS5ub2RlVHlwZSlpZihyPSJkYXRhLSIrdC5yZXBsYWNlKE8sIi0kMSIp
LnRvTG93ZXJDYXNlKCksbj1lLmdldEF0dHJpYnV0ZShyKSwic3RyaW5nIj09dHlwZW9mIG4pe3Ry
eXtuPSJ0cnVlIj09PW4/ITA6ImZhbHNlIj09PW4/ITE6Im51bGwiPT09bj9udWxsOituKyIiPT09
bj8rbjpILnRlc3Qobik/SlNPTi5wYXJzZShuKTpufWNhdGNoKGkpe31MLnNldChlLHQsbil9ZWxz
ZSBuPXVuZGVmaW5lZDtyZXR1cm4gbn14LmV4dGVuZCh7cXVldWU6ZnVuY3Rpb24oZSx0LG4pe3Zh
ciByO3JldHVybiBlPyh0PSh0fHwiZngiKSsicXVldWUiLHI9cS5nZXQoZSx0KSxuJiYoIXJ8fHgu
aXNBcnJheShuKT9yPXEuYWNjZXNzKGUsdCx4Lm1ha2VBcnJheShuKSk6ci5wdXNoKG4pKSxyfHxb
XSk6dW5kZWZpbmVkfSxkZXF1ZXVlOmZ1bmN0aW9uKGUsdCl7dD10fHwiZngiO3ZhciBuPXgucXVl
dWUoZSx0KSxyPW4ubGVuZ3RoLGk9bi5zaGlmdCgpLG89eC5fcXVldWVIb29rcyhlLHQpLHM9ZnVu
Y3Rpb24oKXt4LmRlcXVldWUoZSx0KQorK307ImlucHJvZ3Jlc3MiPT09aSYmKGk9bi5zaGlmdCgp
LHItLSksaSYmKCJmeCI9PT10JiZuLnVuc2hpZnQoImlucHJvZ3Jlc3MiKSxkZWxldGUgby5zdG9w
LGkuY2FsbChlLHMsbykpLCFyJiZvJiZvLmVtcHR5LmZpcmUoKX0sX3F1ZXVlSG9va3M6ZnVuY3Rp
b24oZSx0KXt2YXIgbj10KyJxdWV1ZUhvb2tzIjtyZXR1cm4gcS5nZXQoZSxuKXx8cS5hY2Nlc3Mo
ZSxuLHtlbXB0eTp4LkNhbGxiYWNrcygib25jZSBtZW1vcnkiKS5hZGQoZnVuY3Rpb24oKXtxLnJl
bW92ZShlLFt0KyJxdWV1ZSIsbl0pfSl9KX19KSx4LmZuLmV4dGVuZCh7cXVldWU6ZnVuY3Rpb24o
ZSx0KXt2YXIgbj0yO3JldHVybiJzdHJpbmciIT10eXBlb2YgZSYmKHQ9ZSxlPSJmeCIsbi0tKSxu
PmFyZ3VtZW50cy5sZW5ndGg/eC5xdWV1ZSh0aGlzWzBdLGUpOnQ9PT11bmRlZmluZWQ/dGhpczp0
aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgbj14LnF1ZXVlKHRoaXMsZSx0KTt4Ll9xdWV1ZUhvb2tz
KHRoaXMsZSksImZ4Ij09PWUmJiJpbnByb2dyZXNzIiE9PW5bMF0mJnguZGVxdWV1ZSh0aGlzLGUp
fSl9LGRlcXVldWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3guZGVx
dWV1ZSh0aGlzLGUpfSl9LGRlbGF5OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9eC5meD94LmZ4LnNw
ZWVkc1tlXXx8ZTplLHQ9dHx8ImZ4Iix0aGlzLnF1ZXVlKHQsZnVuY3Rpb24odCxuKXt2YXIgcj1z
ZXRUaW1lb3V0KHQsZSk7bi5zdG9wPWZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KHIpfX0pfSxjbGVh
clF1ZXVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnF1ZXVlKGV8fCJmeCIsW10pfSxwcm9taXNl
OmZ1bmN0aW9uKGUsdCl7dmFyIG4scj0xLGk9eC5EZWZlcnJlZCgpLG89dGhpcyxzPXRoaXMubGVu
Z3RoLGE9ZnVuY3Rpb24oKXstLXJ8fGkucmVzb2x2ZVdpdGgobyxbb10pfTsic3RyaW5nIiE9dHlw
ZW9mIGUmJih0PWUsZT11bmRlZmluZWQpLGU9ZXx8ImZ4Ijt3aGlsZShzLS0pbj1xLmdldChvW3Nd
LGUrInF1ZXVlSG9va3MiKSxuJiZuLmVtcHR5JiYocisrLG4uZW1wdHkuYWRkKGEpKTtyZXR1cm4g
YSgpLGkucHJvbWlzZSh0KX19KTt2YXIgUixNLFc9L1tcdFxyXG5cZl0vZywkPS9cci9nLEI9L14o
PzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaTt4LmZuLmV4dGVuZCh7YXR0cjpmdW5j
dGlvbihlLHQpe3JldHVybiB4LmFjY2Vzcyh0aGlzLHguYXR0cixlLHQsYXJndW1lbnRzLmxlbmd0
aD4xKX0scmVtb3ZlQXR0cjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7
eC5yZW1vdmVBdHRyKHRoaXMsZSl9KX0scHJvcDpmdW5jdGlvbihlLHQpe3JldHVybiB4LmFjY2Vz
cyh0aGlzLHgucHJvcCxlLHQsYXJndW1lbnRzLmxlbmd0aD4xKX0scmVtb3ZlUHJvcDpmdW5jdGlv
bihlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbeC5wcm9wRml4W2Vd
fHxlXX0pfSxhZGRDbGFzczpmdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxvLHM9MCxhPXRoaXMubGVu
Z3RoLHU9InN0cmluZyI9PXR5cGVvZiBlJiZlO2lmKHguaXNGdW5jdGlvbihlKSlyZXR1cm4gdGhp
cy5lYWNoKGZ1bmN0aW9uKHQpe3godGhpcykuYWRkQ2xhc3MoZS5jYWxsKHRoaXMsdCx0aGlzLmNs
YXNzTmFtZSkpfSk7aWYodSlmb3IodD0oZXx8IiIpLm1hdGNoKHcpfHxbXTthPnM7cysrKWlmKG49
dGhpc1tzXSxyPTE9PT1uLm5vZGVUeXBlJiYobi5jbGFzc05hbWU/KCIgIituLmNsYXNzTmFtZSsi
ICIpLnJlcGxhY2UoVywiICIpOiIgIikpe289MDt3aGlsZShpPXRbbysrXSkwPnIuaW5kZXhPZigi
ICIraSsiICIpJiYocis9aSsiICIpO24uY2xhc3NOYW1lPXgudHJpbShyKX1yZXR1cm4gdGhpc30s
cmVtb3ZlQ2xhc3M6ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGksbyxzPTAsYT10aGlzLmxlbmd0aCx1
PTA9PT1hcmd1bWVudHMubGVuZ3RofHwic3RyaW5nIj09dHlwZW9mIGUmJmU7aWYoeC5pc0Z1bmN0
aW9uKGUpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24odCl7eCh0aGlzKS5yZW1vdmVDbGFzcyhl
LmNhbGwodGhpcyx0LHRoaXMuY2xhc3NOYW1lKSl9KTtpZih1KWZvcih0PShlfHwiIikubWF0Y2go
dyl8fFtdO2E+cztzKyspaWYobj10aGlzW3NdLHI9MT09PW4ubm9kZVR5cGUmJihuLmNsYXNzTmFt
ZT8oIiAiK24uY2xhc3NOYW1lKyIgIikucmVwbGFjZShXLCIgIik6IiIpKXtvPTA7d2hpbGUoaT10
W28rK10pd2hpbGUoci5pbmRleE9mKCIgIitpKyIgIik+PTApcj1yLnJlcGxhY2UoIiAiK2krIiAi
LCIgIik7bi5jbGFzc05hbWU9ZT94LnRyaW0ocik6IiJ9cmV0dXJuIHRoaXN9LHRvZ2dsZUNsYXNz
OmZ1bmN0aW9uKGUsdCl7dmFyIG49dHlwZW9mIGU7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgdCYm
InN0cmluZyI9PT1uP3Q/dGhpcy5hZGRDbGFzcyhlKTp0aGlzLnJlbW92ZUNsYXNzKGUpOnguaXNG
dW5jdGlvbihlKT90aGlzLmVhY2goZnVuY3Rpb24obil7eCh0aGlzKS50b2dnbGVDbGFzcyhlLmNh
bGwodGhpcyxuLHRoaXMuY2xhc3NOYW1lLHQpLHQpfSk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7aWYo
InN0cmluZyI9PT1uKXt2YXIgdCxpPTAsbz14KHRoaXMpLHM9ZS5tYXRjaCh3KXx8W107d2hpbGUo
dD1zW2krK10pby5oYXNDbGFzcyh0KT9vLnJlbW92ZUNsYXNzKHQpOm8uYWRkQ2xhc3ModCl9ZWxz
ZShuPT09cnx8ImJvb2xlYW4iPT09bikmJih0aGlzLmNsYXNzTmFtZSYmcS5zZXQodGhpcywiX19j
bGFzc05hbWVfXyIsdGhpcy5jbGFzc05hbWUpLHRoaXMuY2xhc3NOYW1lPXRoaXMuY2xhc3NOYW1l
fHxlPT09ITE/IiI6cS5nZXQodGhpcywiX19jbGFzc05hbWVfXyIpfHwiIil9KX0saGFzQ2xhc3M6
ZnVuY3Rpb24oZSl7dmFyIHQ9IiAiK2UrIiAiLG49MCxyPXRoaXMubGVuZ3RoO2Zvcig7cj5uO24r
KylpZigxPT09dGhpc1tuXS5ub2RlVHlwZSYmKCIgIit0aGlzW25dLmNsYXNzTmFtZSsiICIpLnJl
cGxhY2UoVywiICIpLmluZGV4T2YodCk+PTApcmV0dXJuITA7cmV0dXJuITF9LHZhbDpmdW5jdGlv
bihlKXt2YXIgdCxuLHIsaT10aGlzWzBdO3tpZihhcmd1bWVudHMubGVuZ3RoKXJldHVybiByPXgu
aXNGdW5jdGlvbihlKSx0aGlzLmVhY2goZnVuY3Rpb24obil7dmFyIGk7MT09PXRoaXMubm9kZVR5
cGUmJihpPXI/ZS5jYWxsKHRoaXMsbix4KHRoaXMpLnZhbCgpKTplLG51bGw9PWk/aT0iIjoibnVt
YmVyIj09dHlwZW9mIGk/aSs9IiI6eC5pc0FycmF5KGkpJiYoaT14Lm1hcChpLGZ1bmN0aW9uKGUp
e3JldHVybiBudWxsPT1lPyIiOmUrIiJ9KSksdD14LnZhbEhvb2tzW3RoaXMudHlwZV18fHgudmFs
SG9va3NbdGhpcy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXSx0JiYic2V0ImluIHQmJnQuc2V0KHRo
aXMsaSwidmFsdWUiKSE9PXVuZGVmaW5lZHx8KHRoaXMudmFsdWU9aSkpfSk7aWYoaSlyZXR1cm4g
dD14LnZhbEhvb2tzW2kudHlwZV18fHgudmFsSG9va3NbaS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgp
XSx0JiYiZ2V0ImluIHQmJihuPXQuZ2V0KGksInZhbHVlIikpIT09dW5kZWZpbmVkP246KG49aS52
YWx1ZSwic3RyaW5nIj09dHlwZW9mIG4/bi5yZXBsYWNlKCQsIiIpOm51bGw9PW4/IiI6bil9fX0p
LHguZXh0ZW5kKHt2YWxIb29rczp7b3B0aW9uOntnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5hdHRy
aWJ1dGVzLnZhbHVlO3JldHVybiF0fHx0LnNwZWNpZmllZD9lLnZhbHVlOmUudGV4dH19LHNlbGVj
dDp7Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0LG4scj1lLm9wdGlvbnMsaT1lLnNlbGVjdGVkSW5kZXgs
bz0ic2VsZWN0LW9uZSI9PT1lLnR5cGV8fDA+aSxzPW8/bnVsbDpbXSxhPW8/aSsxOnIubGVuZ3Ro
LHU9MD5pP2E6bz9pOjA7Zm9yKDthPnU7dSsrKWlmKG49clt1XSwhKCFuLnNlbGVjdGVkJiZ1IT09
aXx8KHguc3VwcG9ydC5vcHREaXNhYmxlZD9uLmRpc2FibGVkOm51bGwhPT1uLmdldEF0dHJpYnV0
ZSgiZGlzYWJsZWQiKSl8fG4ucGFyZW50Tm9kZS5kaXNhYmxlZCYmeC5ub2RlTmFtZShuLnBhcmVu
dE5vZGUsIm9wdGdyb3VwIikpKXtpZih0PXgobikudmFsKCksbylyZXR1cm4gdDtzLnB1c2godCl9
cmV0dXJuIHN9LHNldDpmdW5jdGlvbihlLHQpe3ZhciBuLHIsaT1lLm9wdGlvbnMsbz14Lm1ha2VB
cnJheSh0KSxzPWkubGVuZ3RoO3doaWxlKHMtLSlyPWlbc10sKHIuc2VsZWN0ZWQ9eC5pbkFycmF5
KHgocikudmFsKCksbyk+PTApJiYobj0hMCk7cmV0dXJuIG58fChlLnNlbGVjdGVkSW5kZXg9LTEp
LG99fX0sYXR0cjpmdW5jdGlvbihlLHQsbil7dmFyIGksbyxzPWUubm9kZVR5cGU7aWYoZSYmMyE9
PXMmJjghPT1zJiYyIT09cylyZXR1cm4gdHlwZW9mIGUuZ2V0QXR0cmlidXRlPT09cj94LnByb3Ao
ZSx0LG4pOigxPT09cyYmeC5pc1hNTERvYyhlKXx8KHQ9dC50b0xvd2VyQ2FzZSgpLGk9eC5hdHRy
SG9va3NbdF18fCh4LmV4cHIubWF0Y2guYm9vbC50ZXN0KHQpP006UikpLG49PT11bmRlZmluZWQ/
aSYmImdldCJpbiBpJiZudWxsIT09KG89aS5nZXQoZSx0KSk/bzoobz14LmZpbmQuYXR0cihlLHQp
LG51bGw9PW8/dW5kZWZpbmVkOm8pOm51bGwhPT1uP2kmJiJzZXQiaW4gaSYmKG89aS5zZXQoZSxu
LHQpKSE9PXVuZGVmaW5lZD9vOihlLnNldEF0dHJpYnV0ZSh0LG4rIiIpLG4pOih4LnJlbW92ZUF0
dHIoZSx0KSx1bmRlZmluZWQpKX0scmVtb3ZlQXR0cjpmdW5jdGlvbihlLHQpe3ZhciBuLHIsaT0w
LG89dCYmdC5tYXRjaCh3KTtpZihvJiYxPT09ZS5ub2RlVHlwZSl3aGlsZShuPW9baSsrXSlyPXgu
cHJvcEZpeFtuXXx8bix4LmV4cHIubWF0Y2guYm9vbC50ZXN0KG4pJiYoZVtyXT0hMSksZS5yZW1v
dmVBdHRyaWJ1dGUobil9LGF0dHJIb29rczp7dHlwZTp7c2V0OmZ1bmN0aW9uKGUsdCl7aWYoIXgu
c3VwcG9ydC5yYWRpb1ZhbHVlJiYicmFkaW8iPT09dCYmeC5ub2RlTmFtZShlLCJpbnB1dCIpKXt2
YXIgbj1lLnZhbHVlO3JldHVybiBlLnNldEF0dHJpYnV0ZSgidHlwZSIsdCksbiYmKGUudmFsdWU9
biksdH19fX0scHJvcEZpeDp7ImZvciI6Imh0bWxGb3IiLCJjbGFzcyI6ImNsYXNzTmFtZSJ9LHBy
b3A6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbyxzPWUubm9kZVR5cGU7aWYoZSYmMyE9PXMmJjgh
PT1zJiYyIT09cylyZXR1cm4gbz0xIT09c3x8IXguaXNYTUxEb2MoZSksbyYmKHQ9eC5wcm9wRml4
W3RdfHx0LGk9eC5wcm9wSG9va3NbdF0pLG4hPT11bmRlZmluZWQ/aSYmInNldCJpbiBpJiYocj1p
LnNldChlLG4sdCkpIT09dW5kZWZpbmVkP3I6ZVt0XT1uOmkmJiJnZXQiaW4gaSYmbnVsbCE9PShy
PWkuZ2V0KGUsdCkpP3I6ZVt0XX0scHJvcEhvb2tzOnt0YWJJbmRleDp7Z2V0OmZ1bmN0aW9uKGUp
e3JldHVybiBlLmhhc0F0dHJpYnV0ZSgidGFiaW5kZXgiKXx8Qi50ZXN0KGUubm9kZU5hbWUpfHxl
LmhyZWY/ZS50YWJJbmRleDotMX19fX0pLE09e3NldDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHQ9
PT0hMT94LnJlbW92ZUF0dHIoZSxuKTplLnNldEF0dHJpYnV0ZShuLG4pLG59fSx4LmVhY2goeC5l
eHByLm1hdGNoLmJvb2wuc291cmNlLm1hdGNoKC9cdysvZyksZnVuY3Rpb24oZSx0KXt2YXIgbj14
LmV4cHIuYXR0ckhhbmRsZVt0XXx8eC5maW5kLmF0dHI7eC5leHByLmF0dHJIYW5kbGVbdF09ZnVu
Y3Rpb24oZSx0LHIpe3ZhciBpPXguZXhwci5hdHRySGFuZGxlW3RdLG89cj91bmRlZmluZWQ6KHgu
ZXhwci5hdHRySGFuZGxlW3RdPXVuZGVmaW5lZCkhPW4oZSx0LHIpP3QudG9Mb3dlckNhc2UoKTpu
dWxsO3JldHVybiB4LmV4cHIuYXR0ckhhbmRsZVt0XT1pLG99fSkseC5zdXBwb3J0Lm9wdFNlbGVj
dGVkfHwoeC5wcm9wSG9va3Muc2VsZWN0ZWQ9e2dldDpmdW5jdGlvbihlKXt2YXIgdD1lLnBhcmVu
dE5vZGU7cmV0dXJuIHQmJnQucGFyZW50Tm9kZSYmdC5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXgs
bnVsbH19KSx4LmVhY2goWyJ0YWJJbmRleCIsInJlYWRPbmx5IiwibWF4TGVuZ3RoIiwiY2VsbFNw
YWNpbmciLCJjZWxsUGFkZGluZyIsInJvd1NwYW4iLCJjb2xTcGFuIiwidXNlTWFwIiwiZnJhbWVC
b3JkZXIiLCJjb250ZW50RWRpdGFibGUiXSxmdW5jdGlvbigpe3gucHJvcEZpeFt0aGlzLnRvTG93
ZXJDYXNlKCldPXRoaXN9KSx4LmVhY2goWyJyYWRpbyIsImNoZWNrYm94Il0sZnVuY3Rpb24oKXt4
LnZhbEhvb2tzW3RoaXNdPXtzZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4geC5pc0FycmF5KHQpP2Uu
Y2hlY2tlZD14LmluQXJyYXkoeChlKS52YWwoKSx0KT49MDp1bmRlZmluZWR9fSx4LnN1cHBvcnQu
Y2hlY2tPbnx8KHgudmFsSG9va3NbdGhpc10uZ2V0PWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT09
ZS5nZXRBdHRyaWJ1dGUoInZhbHVlIik/Im9uIjplLnZhbHVlfSl9KTt2YXIgST0vXmtleS8sej0v
Xig/Om1vdXNlfGNvbnRleHRtZW51KXxjbGljay8sXz0vXig/OmZvY3VzaW5mb2N1c3xmb2N1c291
dGJsdXIpJC8sWD0vXihbXi5dKikoPzpcLiguKyl8KSQvO2Z1bmN0aW9uIFUoKXtyZXR1cm4hMH1m
dW5jdGlvbiBZKCl7cmV0dXJuITF9ZnVuY3Rpb24gVigpe3RyeXtyZXR1cm4gby5hY3RpdmVFbGVt
ZW50fWNhdGNoKGUpe319eC5ldmVudD17Z2xvYmFsOnt9LGFkZDpmdW5jdGlvbihlLHQsbixpLG8p
e3ZhciBzLGEsdSxsLGMscCxmLGgsZCxnLG0seT1xLmdldChlKTtpZih5KXtuLmhhbmRsZXImJihz
PW4sbj1zLmhhbmRsZXIsbz1zLnNlbGVjdG9yKSxuLmd1aWR8fChuLmd1aWQ9eC5ndWlkKyspLChs
PXkuZXZlbnRzKXx8KGw9eS5ldmVudHM9e30pLChhPXkuaGFuZGxlKXx8KGE9eS5oYW5kbGU9ZnVu
Y3Rpb24oZSl7cmV0dXJuIHR5cGVvZiB4PT09cnx8ZSYmeC5ldmVudC50cmlnZ2VyZWQ9PT1lLnR5
cGU/dW5kZWZpbmVkOnguZXZlbnQuZGlzcGF0Y2guYXBwbHkoYS5lbGVtLGFyZ3VtZW50cyl9LGEu
ZWxlbT1lKSx0PSh0fHwiIikubWF0Y2godyl8fFsiIl0sYz10Lmxlbmd0aDt3aGlsZShjLS0pdT1Y
LmV4ZWModFtjXSl8fFtdLGQ9bT11WzFdLGc9KHVbMl18fCIiKS5zcGxpdCgiLiIpLnNvcnQoKSxk
JiYoZj14LmV2ZW50LnNwZWNpYWxbZF18fHt9LGQ9KG8/Zi5kZWxlZ2F0ZVR5cGU6Zi5iaW5kVHlw
ZSl8fGQsZj14LmV2ZW50LnNwZWNpYWxbZF18fHt9LHA9eC5leHRlbmQoe3R5cGU6ZCxvcmlnVHlw
ZTptLGRhdGE6aSxoYW5kbGVyOm4sZ3VpZDpuLmd1aWQsc2VsZWN0b3I6byxuZWVkc0NvbnRleHQ6
byYmeC5leHByLm1hdGNoLm5lZWRzQ29udGV4dC50ZXN0KG8pLG5hbWVzcGFjZTpnLmpvaW4oIi4i
KX0scyksKGg9bFtkXSl8fChoPWxbZF09W10saC5kZWxlZ2F0ZUNvdW50PTAsZi5zZXR1cCYmZi5z
ZXR1cC5jYWxsKGUsaSxnLGEpIT09ITF8fGUuYWRkRXZlbnRMaXN0ZW5lciYmZS5hZGRFdmVudExp
c3RlbmVyKGQsYSwhMSkpLGYuYWRkJiYoZi5hZGQuY2FsbChlLHApLHAuaGFuZGxlci5ndWlkfHwo
cC5oYW5kbGVyLmd1aWQ9bi5ndWlkKSksbz9oLnNwbGljZShoLmRlbGVnYXRlQ291bnQrKywwLHAp
OmgucHVzaChwKSx4LmV2ZW50Lmdsb2JhbFtkXT0hMCk7ZT1udWxsfX0scmVtb3ZlOmZ1bmN0aW9u
KGUsdCxuLHIsaSl7dmFyIG8scyxhLHUsbCxjLHAsZixoLGQsZyxtPXEuaGFzRGF0YShlKSYmcS5n
ZXQoZSk7aWYobSYmKHU9bS5ldmVudHMpKXt0PSh0fHwiIikubWF0Y2godyl8fFsiIl0sbD10Lmxl
bmd0aDt3aGlsZShsLS0paWYoYT1YLmV4ZWModFtsXSl8fFtdLGg9Zz1hWzFdLGQ9KGFbMl18fCIi
KS5zcGxpdCgiLiIpLnNvcnQoKSxoKXtwPXguZXZlbnQuc3BlY2lhbFtoXXx8e30saD0ocj9wLmRl
bGVnYXRlVHlwZTpwLmJpbmRUeXBlKXx8aCxmPXVbaF18fFtdLGE9YVsyXSYmUmVnRXhwKCIoXnxc
XC4pIitkLmpvaW4oIlxcLig/Oi4qXFwufCkiKSsiKFxcLnwkKSIpLHM9bz1mLmxlbmd0aDt3aGls
ZShvLS0pYz1mW29dLCFpJiZnIT09Yy5vcmlnVHlwZXx8biYmbi5ndWlkIT09Yy5ndWlkfHxhJiYh
YS50ZXN0KGMubmFtZXNwYWNlKXx8ciYmciE9PWMuc2VsZWN0b3ImJigiKioiIT09cnx8IWMuc2Vs
ZWN0b3IpfHwoZi5zcGxpY2UobywxKSxjLnNlbGVjdG9yJiZmLmRlbGVnYXRlQ291bnQtLSxwLnJl
bW92ZSYmcC5yZW1vdmUuY2FsbChlLGMpKTtzJiYhZi5sZW5ndGgmJihwLnRlYXJkb3duJiZwLnRl
YXJkb3duLmNhbGwoZSxkLG0uaGFuZGxlKSE9PSExfHx4LnJlbW92ZUV2ZW50KGUsaCxtLmhhbmRs
ZSksZGVsZXRlIHVbaF0pfWVsc2UgZm9yKGggaW4gdSl4LmV2ZW50LnJlbW92ZShlLGgrdFtsXSxu
LHIsITApO3guaXNFbXB0eU9iamVjdCh1KSYmKGRlbGV0ZSBtLmhhbmRsZSxxLnJlbW92ZShlLCJl
dmVudHMiKSl9fSx0cmlnZ2VyOmZ1bmN0aW9uKHQsbixyLGkpe3ZhciBzLGEsdSxsLGMscCxmLGg9
W3J8fG9dLGQ9eS5jYWxsKHQsInR5cGUiKT90LnR5cGU6dCxnPXkuY2FsbCh0LCJuYW1lc3BhY2Ui
KT90Lm5hbWVzcGFjZS5zcGxpdCgiLiIpOltdO2lmKGE9dT1yPXJ8fG8sMyE9PXIubm9kZVR5cGUm
JjghPT1yLm5vZGVUeXBlJiYhXy50ZXN0KGQreC5ldmVudC50cmlnZ2VyZWQpJiYoZC5pbmRleE9m
KCIuIik+PTAmJihnPWQuc3BsaXQoIi4iKSxkPWcuc2hpZnQoKSxnLnNvcnQoKSksYz0wPmQuaW5k
ZXhPZigiOiIpJiYib24iK2QsdD10W3guZXhwYW5kb10/dDpuZXcgeC5FdmVudChkLCJvYmplY3Qi
PT10eXBlb2YgdCYmdCksdC5pc1RyaWdnZXI9aT8yOjMsdC5uYW1lc3BhY2U9Zy5qb2luKCIuIiks
dC5uYW1lc3BhY2VfcmU9dC5uYW1lc3BhY2U/UmVnRXhwKCIoXnxcXC4pIitnLmpvaW4oIlxcLig/
Oi4qXFwufCkiKSsiKFxcLnwkKSIpOm51bGwsdC5yZXN1bHQ9dW5kZWZpbmVkLHQudGFyZ2V0fHwo
dC50YXJnZXQ9ciksbj1udWxsPT1uP1t0XTp4Lm1ha2VBcnJheShuLFt0XSksZj14LmV2ZW50LnNw
ZWNpYWxbZF18fHt9LGl8fCFmLnRyaWdnZXJ8fGYudHJpZ2dlci5hcHBseShyLG4pIT09ITEpKXtp
ZighaSYmIWYubm9CdWJibGUmJiF4LmlzV2luZG93KHIpKXtmb3IobD1mLmRlbGVnYXRlVHlwZXx8
ZCxfLnRlc3QobCtkKXx8KGE9YS5wYXJlbnROb2RlKTthO2E9YS5wYXJlbnROb2RlKWgucHVzaChh
KSx1PWE7dT09PShyLm93bmVyRG9jdW1lbnR8fG8pJiZoLnB1c2godS5kZWZhdWx0Vmlld3x8dS5w
YXJlbnRXaW5kb3d8fGUpfXM9MDt3aGlsZSgoYT1oW3MrK10pJiYhdC5pc1Byb3BhZ2F0aW9uU3Rv
cHBlZCgpKXQudHlwZT1zPjE/bDpmLmJpbmRUeXBlfHxkLHA9KHEuZ2V0KGEsImV2ZW50cyIpfHx7
fSlbdC50eXBlXSYmcS5nZXQoYSwiaGFuZGxlIikscCYmcC5hcHBseShhLG4pLHA9YyYmYVtjXSxw
JiZ4LmFjY2VwdERhdGEoYSkmJnAuYXBwbHkmJnAuYXBwbHkoYSxuKT09PSExJiZ0LnByZXZlbnRE
ZWZhdWx0KCk7cmV0dXJuIHQudHlwZT1kLGl8fHQuaXNEZWZhdWx0UHJldmVudGVkKCl8fGYuX2Rl
ZmF1bHQmJmYuX2RlZmF1bHQuYXBwbHkoaC5wb3AoKSxuKSE9PSExfHwheC5hY2NlcHREYXRhKHIp
fHxjJiZ4LmlzRnVuY3Rpb24ocltkXSkmJiF4LmlzV2luZG93KHIpJiYodT1yW2NdLHUmJihyW2Nd
PW51bGwpLHguZXZlbnQudHJpZ2dlcmVkPWQscltkXSgpLHguZXZlbnQudHJpZ2dlcmVkPXVuZGVm
aW5lZCx1JiYocltjXT11KSksdC5yZXN1bHR9fSxkaXNwYXRjaDpmdW5jdGlvbihlKXtlPXguZXZl
bnQuZml4KGUpO3ZhciB0LG4scixpLG8scz1bXSxhPWQuY2FsbChhcmd1bWVudHMpLHU9KHEuZ2V0
KHRoaXMsImV2ZW50cyIpfHx7fSlbZS50eXBlXXx8W10sbD14LmV2ZW50LnNwZWNpYWxbZS50eXBl
XXx8e307aWYoYVswXT1lLGUuZGVsZWdhdGVUYXJnZXQ9dGhpcywhbC5wcmVEaXNwYXRjaHx8bC5w
cmVEaXNwYXRjaC5jYWxsKHRoaXMsZSkhPT0hMSl7cz14LmV2ZW50LmhhbmRsZXJzLmNhbGwodGhp
cyxlLHUpLHQ9MDt3aGlsZSgoaT1zW3QrK10pJiYhZS5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKXtl
LmN1cnJlbnRUYXJnZXQ9aS5lbGVtLG49MDt3aGlsZSgobz1pLmhhbmRsZXJzW24rK10pJiYhZS5p
c0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpKSghZS5uYW1lc3BhY2VfcmV8fGUubmFtZXNw
YWNlX3JlLnRlc3Qoby5uYW1lc3BhY2UpKSYmKGUuaGFuZGxlT2JqPW8sZS5kYXRhPW8uZGF0YSxy
PSgoeC5ldmVudC5zcGVjaWFsW28ub3JpZ1R5cGVdfHx7fSkuaGFuZGxlfHxvLmhhbmRsZXIpLmFw
cGx5KGkuZWxlbSxhKSxyIT09dW5kZWZpbmVkJiYoZS5yZXN1bHQ9cik9PT0hMSYmKGUucHJldmVu
dERlZmF1bHQoKSxlLnN0b3BQcm9wYWdhdGlvbigpKSl9cmV0dXJuIGwucG9zdERpc3BhdGNoJiZs
LnBvc3REaXNwYXRjaC5jYWxsKHRoaXMsZSksZS5yZXN1bHR9fSxoYW5kbGVyczpmdW5jdGlvbihl
LHQpe3ZhciBuLHIsaSxvLHM9W10sYT10LmRlbGVnYXRlQ291bnQsdT1lLnRhcmdldDtpZihhJiZ1
Lm5vZGVUeXBlJiYoIWUuYnV0dG9ufHwiY2xpY2siIT09ZS50eXBlKSlmb3IoO3UhPT10aGlzO3U9
dS5wYXJlbnROb2RlfHx0aGlzKWlmKHUuZGlzYWJsZWQhPT0hMHx8ImNsaWNrIiE9PWUudHlwZSl7
Zm9yKHI9W10sbj0wO2E+bjtuKyspbz10W25dLGk9by5zZWxlY3RvcisiICIscltpXT09PXVuZGVm
aW5lZCYmKHJbaV09by5uZWVkc0NvbnRleHQ/eChpLHRoaXMpLmluZGV4KHUpPj0wOnguZmluZChp
LHRoaXMsbnVsbCxbdV0pLmxlbmd0aCkscltpXSYmci5wdXNoKG8pO3IubGVuZ3RoJiZzLnB1c2go
e2VsZW06dSxoYW5kbGVyczpyfSl9cmV0dXJuIHQubGVuZ3RoPmEmJnMucHVzaCh7ZWxlbTp0aGlz
LGhhbmRsZXJzOnQuc2xpY2UoYSl9KSxzfSxwcm9wczoiYWx0S2V5IGJ1YmJsZXMgY2FuY2VsYWJs
ZSBjdHJsS2V5IGN1cnJlbnRUYXJnZXQgZXZlbnRQaGFzZSBtZXRhS2V5IHJlbGF0ZWRUYXJnZXQg
c2hpZnRLZXkgdGFyZ2V0IHRpbWVTdGFtcCB2aWV3IHdoaWNoIi5zcGxpdCgiICIpLGZpeEhvb2tz
Ont9LGtleUhvb2tzOntwcm9wczoiY2hhciBjaGFyQ29kZSBrZXkga2V5Q29kZSIuc3BsaXQoIiAi
KSxmaWx0ZXI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbD09ZS53aGljaCYmKGUud2hpY2g9bnVs
bCE9dC5jaGFyQ29kZT90LmNoYXJDb2RlOnQua2V5Q29kZSksZX19LG1vdXNlSG9va3M6e3Byb3Bz
OiJidXR0b24gYnV0dG9ucyBjbGllbnRYIGNsaWVudFkgb2Zmc2V0WCBvZmZzZXRZIHBhZ2VYIHBh
Z2VZIHNjcmVlblggc2NyZWVuWSB0b0VsZW1lbnQiLnNwbGl0KCIgIiksZmlsdGVyOmZ1bmN0aW9u
KGUsdCl7dmFyIG4scixpLHM9dC5idXR0b247cmV0dXJuIG51bGw9PWUucGFnZVgmJm51bGwhPXQu
Y2xpZW50WCYmKG49ZS50YXJnZXQub3duZXJEb2N1bWVudHx8byxyPW4uZG9jdW1lbnRFbGVtZW50
LGk9bi5ib2R5LGUucGFnZVg9dC5jbGllbnRYKyhyJiZyLnNjcm9sbExlZnR8fGkmJmkuc2Nyb2xs
TGVmdHx8MCktKHImJnIuY2xpZW50TGVmdHx8aSYmaS5jbGllbnRMZWZ0fHwwKSxlLnBhZ2VZPXQu
Y2xpZW50WSsociYmci5zY3JvbGxUb3B8fGkmJmkuc2Nyb2xsVG9wfHwwKS0ociYmci5jbGllbnRU
b3B8fGkmJmkuY2xpZW50VG9wfHwwKSksZS53aGljaHx8cz09PXVuZGVmaW5lZHx8KGUud2hpY2g9
MSZzPzE6MiZzPzM6NCZzPzI6MCksZX19LGZpeDpmdW5jdGlvbihlKXtpZihlW3guZXhwYW5kb10p
cmV0dXJuIGU7dmFyIHQsbixyLGk9ZS50eXBlLHM9ZSxhPXRoaXMuZml4SG9va3NbaV07YXx8KHRo
aXMuZml4SG9va3NbaV09YT16LnRlc3QoaSk/dGhpcy5tb3VzZUhvb2tzOkkudGVzdChpKT90aGlz
LmtleUhvb2tzOnt9KSxyPWEucHJvcHM/dGhpcy5wcm9wcy5jb25jYXQoYS5wcm9wcyk6dGhpcy5w
cm9wcyxlPW5ldyB4LkV2ZW50KHMpLHQ9ci5sZW5ndGg7d2hpbGUodC0tKW49clt0XSxlW25dPXNb
bl07cmV0dXJuIGUudGFyZ2V0fHwoZS50YXJnZXQ9byksMz09PWUudGFyZ2V0Lm5vZGVUeXBlJiYo
ZS50YXJnZXQ9ZS50YXJnZXQucGFyZW50Tm9kZSksYS5maWx0ZXI/YS5maWx0ZXIoZSxzKTplfSxz
cGVjaWFsOntsb2FkOntub0J1YmJsZTohMH0sZm9jdXM6e3RyaWdnZXI6ZnVuY3Rpb24oKXtyZXR1
cm4gdGhpcyE9PVYoKSYmdGhpcy5mb2N1cz8odGhpcy5mb2N1cygpLCExKTp1bmRlZmluZWR9LGRl
bGVnYXRlVHlwZToiZm9jdXNpbiJ9LGJsdXI6e3RyaWdnZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhp
cz09PVYoKSYmdGhpcy5ibHVyPyh0aGlzLmJsdXIoKSwhMSk6dW5kZWZpbmVkfSxkZWxlZ2F0ZVR5
cGU6ImZvY3Vzb3V0In0sY2xpY2s6e3RyaWdnZXI6ZnVuY3Rpb24oKXtyZXR1cm4iY2hlY2tib3gi
PT09dGhpcy50eXBlJiZ0aGlzLmNsaWNrJiZ4Lm5vZGVOYW1lKHRoaXMsImlucHV0Iik/KHRoaXMu
Y2xpY2soKSwhMSk6dW5kZWZpbmVkfSxfZGVmYXVsdDpmdW5jdGlvbihlKXtyZXR1cm4geC5ub2Rl
TmFtZShlLnRhcmdldCwiYSIpfX0sYmVmb3JldW5sb2FkOntwb3N0RGlzcGF0Y2g6ZnVuY3Rpb24o
ZSl7ZS5yZXN1bHQhPT11bmRlZmluZWQmJihlLm9yaWdpbmFsRXZlbnQucmV0dXJuVmFsdWU9ZS5y
ZXN1bHQpfX19LHNpbXVsYXRlOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPXguZXh0ZW5kKG5ldyB4
LkV2ZW50LG4se3R5cGU6ZSxpc1NpbXVsYXRlZDohMCxvcmlnaW5hbEV2ZW50Ont9fSk7cj94LmV2
ZW50LnRyaWdnZXIoaSxudWxsLHQpOnguZXZlbnQuZGlzcGF0Y2guY2FsbCh0LGkpLGkuaXNEZWZh
dWx0UHJldmVudGVkKCkmJm4ucHJldmVudERlZmF1bHQoKX19LHgucmVtb3ZlRXZlbnQ9ZnVuY3Rp
b24oZSx0LG4pe2UucmVtb3ZlRXZlbnRMaXN0ZW5lciYmZS5yZW1vdmVFdmVudExpc3RlbmVyKHQs
biwhMSl9LHguRXZlbnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIHguRXZl
bnQ/KGUmJmUudHlwZT8odGhpcy5vcmlnaW5hbEV2ZW50PWUsdGhpcy50eXBlPWUudHlwZSx0aGlz
LmlzRGVmYXVsdFByZXZlbnRlZD1lLmRlZmF1bHRQcmV2ZW50ZWR8fGUuZ2V0UHJldmVudERlZmF1
bHQmJmUuZ2V0UHJldmVudERlZmF1bHQoKT9VOlkpOnRoaXMudHlwZT1lLHQmJnguZXh0ZW5kKHRo
aXMsdCksdGhpcy50aW1lU3RhbXA9ZSYmZS50aW1lU3RhbXB8fHgubm93KCksdGhpc1t4LmV4cGFu
ZG9dPSEwLHVuZGVmaW5lZCk6bmV3IHguRXZlbnQoZSx0KX0seC5FdmVudC5wcm90b3R5cGU9e2lz
RGVmYXVsdFByZXZlbnRlZDpZLGlzUHJvcGFnYXRpb25TdG9wcGVkOlksaXNJbW1lZGlhdGVQcm9w
YWdhdGlvblN0b3BwZWQ6WSxwcmV2ZW50RGVmYXVsdDpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3Jp
Z2luYWxFdmVudDt0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1VLGUmJmUucHJldmVudERlZmF1bHQm
JmUucHJldmVudERlZmF1bHQoKX0sc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dmFyIGU9dGhp
cy5vcmlnaW5hbEV2ZW50O3RoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQ9VSxlJiZlLnN0b3BQcm9w
YWdhdGlvbiYmZS5zdG9wUHJvcGFnYXRpb24oKX0sc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOmZ1
bmN0aW9uKCl7dGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZD1VLHRoaXMuc3RvcFBy
b3BhZ2F0aW9uKCl9fSx4LmVhY2goe21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToi
bW91c2VvdXQifSxmdW5jdGlvbihlLHQpe3guZXZlbnQuc3BlY2lhbFtlXT17ZGVsZWdhdGVUeXBl
OnQsYmluZFR5cGU6dCxoYW5kbGU6ZnVuY3Rpb24oZSl7dmFyIG4scj10aGlzLGk9ZS5yZWxhdGVk
VGFyZ2V0LG89ZS5oYW5kbGVPYmo7cmV0dXJuKCFpfHxpIT09ciYmIXguY29udGFpbnMocixpKSkm
JihlLnR5cGU9by5vcmlnVHlwZSxuPW8uaGFuZGxlci5hcHBseSh0aGlzLGFyZ3VtZW50cyksZS50
eXBlPXQpLG59fX0pLHguc3VwcG9ydC5mb2N1c2luQnViYmxlc3x8eC5lYWNoKHtmb2N1czoiZm9j
dXNpbiIsYmx1cjoiZm9jdXNvdXQifSxmdW5jdGlvbihlLHQpe3ZhciBuPTAscj1mdW5jdGlvbihl
KXt4LmV2ZW50LnNpbXVsYXRlKHQsZS50YXJnZXQseC5ldmVudC5maXgoZSksITApfTt4LmV2ZW50
LnNwZWNpYWxbdF09e3NldHVwOmZ1bmN0aW9uKCl7MD09PW4rKyYmby5hZGRFdmVudExpc3RlbmVy
KGUsciwhMCl9LHRlYXJkb3duOmZ1bmN0aW9uKCl7MD09PS0tbiYmby5yZW1vdmVFdmVudExpc3Rl
bmVyKGUsciwhMCl9fX0pLHguZm4uZXh0ZW5kKHtvbjpmdW5jdGlvbihlLHQsbixyLGkpe3ZhciBv
LHM7aWYoIm9iamVjdCI9PXR5cGVvZiBlKXsic3RyaW5nIiE9dHlwZW9mIHQmJihuPW58fHQsdD11
bmRlZmluZWQpO2ZvcihzIGluIGUpdGhpcy5vbihzLHQsbixlW3NdLGkpO3JldHVybiB0aGlzfWlm
KG51bGw9PW4mJm51bGw9PXI/KHI9dCxuPXQ9dW5kZWZpbmVkKTpudWxsPT1yJiYoInN0cmluZyI9
PXR5cGVvZiB0PyhyPW4sbj11bmRlZmluZWQpOihyPW4sbj10LHQ9dW5kZWZpbmVkKSkscj09PSEx
KXI9WTtlbHNlIGlmKCFyKXJldHVybiB0aGlzO3JldHVybiAxPT09aSYmKG89cixyPWZ1bmN0aW9u
KGUpe3JldHVybiB4KCkub2ZmKGUpLG8uYXBwbHkodGhpcyxhcmd1bWVudHMpfSxyLmd1aWQ9by5n
dWlkfHwoby5ndWlkPXguZ3VpZCsrKSksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7eC5ldmVudC5hZGQo
dGhpcyxlLHIsbix0KX0pfSxvbmU6ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHRoaXMub24oZSx0
LG4sciwxKX0sb2ZmOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpO2lmKGUmJmUucHJldmVudERlZmF1
bHQmJmUuaGFuZGxlT2JqKXJldHVybiByPWUuaGFuZGxlT2JqLHgoZS5kZWxlZ2F0ZVRhcmdldCku
b2ZmKHIubmFtZXNwYWNlP3Iub3JpZ1R5cGUrIi4iK3IubmFtZXNwYWNlOnIub3JpZ1R5cGUsci5z
ZWxlY3RvcixyLmhhbmRsZXIpLHRoaXM7aWYoIm9iamVjdCI9PXR5cGVvZiBlKXtmb3IoaSBpbiBl
KXRoaXMub2ZmKGksdCxlW2ldKTtyZXR1cm4gdGhpc31yZXR1cm4odD09PSExfHwiZnVuY3Rpb24i
PT10eXBlb2YgdCkmJihuPXQsdD11bmRlZmluZWQpLG49PT0hMSYmKG49WSksdGhpcy5lYWNoKGZ1
bmN0aW9uKCl7eC5ldmVudC5yZW1vdmUodGhpcyxlLG4sdCl9KX0sdHJpZ2dlcjpmdW5jdGlvbihl
LHQpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt4LmV2ZW50LnRyaWdnZXIoZSx0LHRoaXMp
fSl9LHRyaWdnZXJIYW5kbGVyOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpc1swXTtyZXR1cm4gbj94
LmV2ZW50LnRyaWdnZXIoZSx0LG4sITApOnVuZGVmaW5lZH19KTt2YXIgRz0vXi5bXjojXFtcLixd
KiQvLEo9L14oPzpwYXJlbnRzfHByZXYoPzpVbnRpbHxBbGwpKS8sUT14LmV4cHIubWF0Y2gubmVl
ZHNDb250ZXh0LEs9e2NoaWxkcmVuOiEwLGNvbnRlbnRzOiEwLG5leHQ6ITAscHJldjohMH07eC5m
bi5leHRlbmQoe2ZpbmQ6ZnVuY3Rpb24oZSl7dmFyIHQsbj1bXSxyPXRoaXMsaT1yLmxlbmd0aDtp
Zigic3RyaW5nIiE9dHlwZW9mIGUpcmV0dXJuIHRoaXMucHVzaFN0YWNrKHgoZSkuZmlsdGVyKGZ1
bmN0aW9uKCl7Zm9yKHQ9MDtpPnQ7dCsrKWlmKHguY29udGFpbnMoclt0XSx0aGlzKSlyZXR1cm4h
MH0pKTtmb3IodD0wO2k+dDt0KyspeC5maW5kKGUsclt0XSxuKTtyZXR1cm4gbj10aGlzLnB1c2hT
dGFjayhpPjE/eC51bmlxdWUobik6biksbi5zZWxlY3Rvcj10aGlzLnNlbGVjdG9yP3RoaXMuc2Vs
ZWN0b3IrIiAiK2U6ZSxufSxoYXM6ZnVuY3Rpb24oZSl7dmFyIHQ9eChlLHRoaXMpLG49dC5sZW5n
dGg7cmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uKCl7dmFyIGU9MDtmb3IoO24+ZTtlKyspaWYo
eC5jb250YWlucyh0aGlzLHRbZV0pKXJldHVybiEwfSl9LG5vdDpmdW5jdGlvbihlKXtyZXR1cm4g
dGhpcy5wdXNoU3RhY2soZXQodGhpcyxlfHxbXSwhMCkpfSxmaWx0ZXI6ZnVuY3Rpb24oZSl7cmV0
dXJuIHRoaXMucHVzaFN0YWNrKGV0KHRoaXMsZXx8W10sITEpKX0saXM6ZnVuY3Rpb24oZSl7cmV0
dXJuISFldCh0aGlzLCJzdHJpbmciPT10eXBlb2YgZSYmUS50ZXN0KGUpP3goZSk6ZXx8W10sITEp
Lmxlbmd0aH0sY2xvc2VzdDpmdW5jdGlvbihlLHQpe3ZhciBuLHI9MCxpPXRoaXMubGVuZ3RoLG89
W10scz1RLnRlc3QoZSl8fCJzdHJpbmciIT10eXBlb2YgZT94KGUsdHx8dGhpcy5jb250ZXh0KTow
O2Zvcig7aT5yO3IrKylmb3Iobj10aGlzW3JdO24mJm4hPT10O249bi5wYXJlbnROb2RlKWlmKDEx
Pm4ubm9kZVR5cGUmJihzP3MuaW5kZXgobik+LTE6MT09PW4ubm9kZVR5cGUmJnguZmluZC5tYXRj
aGVzU2VsZWN0b3IobixlKSkpe249by5wdXNoKG4pO2JyZWFrfXJldHVybiB0aGlzLnB1c2hTdGFj
ayhvLmxlbmd0aD4xP3gudW5pcXVlKG8pOm8pfSxpbmRleDpmdW5jdGlvbihlKXtyZXR1cm4gZT8i
c3RyaW5nIj09dHlwZW9mIGU/Zy5jYWxsKHgoZSksdGhpc1swXSk6Zy5jYWxsKHRoaXMsZS5qcXVl
cnk/ZVswXTplKTp0aGlzWzBdJiZ0aGlzWzBdLnBhcmVudE5vZGU/dGhpcy5maXJzdCgpLnByZXZB
bGwoKS5sZW5ndGg6LTF9LGFkZDpmdW5jdGlvbihlLHQpe3ZhciBuPSJzdHJpbmciPT10eXBlb2Yg
ZT94KGUsdCk6eC5tYWtlQXJyYXkoZSYmZS5ub2RlVHlwZT9bZV06ZSkscj14Lm1lcmdlKHRoaXMu
Z2V0KCksbik7cmV0dXJuIHRoaXMucHVzaFN0YWNrKHgudW5pcXVlKHIpKX0sYWRkQmFjazpmdW5j
dGlvbihlKXtyZXR1cm4gdGhpcy5hZGQobnVsbD09ZT90aGlzLnByZXZPYmplY3Q6dGhpcy5wcmV2
T2JqZWN0LmZpbHRlcihlKSl9fSk7ZnVuY3Rpb24gWihlLHQpe3doaWxlKChlPWVbdF0pJiYxIT09
ZS5ub2RlVHlwZSk7cmV0dXJuIGV9eC5lYWNoKHtwYXJlbnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5w
YXJlbnROb2RlO3JldHVybiB0JiYxMSE9PXQubm9kZVR5cGU/dDpudWxsfSxwYXJlbnRzOmZ1bmN0
aW9uKGUpe3JldHVybiB4LmRpcihlLCJwYXJlbnROb2RlIil9LHBhcmVudHNVbnRpbDpmdW5jdGlv
bihlLHQsbil7cmV0dXJuIHguZGlyKGUsInBhcmVudE5vZGUiLG4pfSxuZXh0OmZ1bmN0aW9uKGUp
e3JldHVybiBaKGUsIm5leHRTaWJsaW5nIil9LHByZXY6ZnVuY3Rpb24oZSl7cmV0dXJuIFooZSwi
cHJldmlvdXNTaWJsaW5nIil9LG5leHRBbGw6ZnVuY3Rpb24oZSl7cmV0dXJuIHguZGlyKGUsIm5l
eHRTaWJsaW5nIil9LHByZXZBbGw6ZnVuY3Rpb24oZSl7cmV0dXJuIHguZGlyKGUsInByZXZpb3Vz
U2libGluZyIpfSxuZXh0VW50aWw6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB4LmRpcihlLCJuZXh0
U2libGluZyIsbil9LHByZXZVbnRpbDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHguZGlyKGUsInBy
ZXZpb3VzU2libGluZyIsbil9LHNpYmxpbmdzOmZ1bmN0aW9uKGUpe3JldHVybiB4LnNpYmxpbmco
KGUucGFyZW50Tm9kZXx8e30pLmZpcnN0Q2hpbGQsZSl9LGNoaWxkcmVuOmZ1bmN0aW9uKGUpe3Jl
dHVybiB4LnNpYmxpbmcoZS5maXJzdENoaWxkKX0sY29udGVudHM6ZnVuY3Rpb24oZSl7cmV0dXJu
IGUuY29udGVudERvY3VtZW50fHx4Lm1lcmdlKFtdLGUuY2hpbGROb2Rlcyl9fSxmdW5jdGlvbihl
LHQpe3guZm5bZV09ZnVuY3Rpb24obixyKXt2YXIgaT14Lm1hcCh0aGlzLHQsbik7cmV0dXJuIlVu
dGlsIiE9PWUuc2xpY2UoLTUpJiYocj1uKSxyJiYic3RyaW5nIj09dHlwZW9mIHImJihpPXguZmls
dGVyKHIsaSkpLHRoaXMubGVuZ3RoPjEmJihLW2VdfHx4LnVuaXF1ZShpKSxKLnRlc3QoZSkmJmku
cmV2ZXJzZSgpKSx0aGlzLnB1c2hTdGFjayhpKX19KSx4LmV4dGVuZCh7ZmlsdGVyOmZ1bmN0aW9u
KGUsdCxuKXt2YXIgcj10WzBdO3JldHVybiBuJiYoZT0iOm5vdCgiK2UrIikiKSwxPT09dC5sZW5n
dGgmJjE9PT1yLm5vZGVUeXBlP3guZmluZC5tYXRjaGVzU2VsZWN0b3IocixlKT9bcl06W106eC5m
aW5kLm1hdGNoZXMoZSx4LmdyZXAodCxmdW5jdGlvbihlKXtyZXR1cm4gMT09PWUubm9kZVR5cGV9
KSl9LGRpcjpmdW5jdGlvbihlLHQsbil7dmFyIHI9W10saT1uIT09dW5kZWZpbmVkO3doaWxlKChl
PWVbdF0pJiY5IT09ZS5ub2RlVHlwZSlpZigxPT09ZS5ub2RlVHlwZSl7aWYoaSYmeChlKS5pcyhu
KSlicmVhaztyLnB1c2goZSl9cmV0dXJuIHJ9LHNpYmxpbmc6ZnVuY3Rpb24oZSx0KXt2YXIgbj1b
XTtmb3IoO2U7ZT1lLm5leHRTaWJsaW5nKTE9PT1lLm5vZGVUeXBlJiZlIT09dCYmbi5wdXNoKGUp
O3JldHVybiBufX0pO2Z1bmN0aW9uIGV0KGUsdCxuKXtpZih4LmlzRnVuY3Rpb24odCkpcmV0dXJu
IHguZ3JlcChlLGZ1bmN0aW9uKGUscil7cmV0dXJuISF0LmNhbGwoZSxyLGUpIT09bn0pO2lmKHQu
bm9kZVR5cGUpcmV0dXJuIHguZ3JlcChlLGZ1bmN0aW9uKGUpe3JldHVybiBlPT09dCE9PW59KTtp
Zigic3RyaW5nIj09dHlwZW9mIHQpe2lmKEcudGVzdCh0KSlyZXR1cm4geC5maWx0ZXIodCxlLG4p
O3Q9eC5maWx0ZXIodCxlKX1yZXR1cm4geC5ncmVwKGUsZnVuY3Rpb24oZSl7cmV0dXJuIGcuY2Fs
bCh0LGUpPj0wIT09bn0pfXZhciB0dD0vPCg/IWFyZWF8YnJ8Y29sfGVtYmVkfGhyfGltZ3xpbnB1
dHxsaW5rfG1ldGF8cGFyYW0pKChbXHc6XSspW14+XSopXC8+L2dpLG50PS88KFtcdzpdKykvLHJ0
PS88fCYjP1x3KzsvLGl0PS88KD86c2NyaXB0fHN0eWxlfGxpbmspL2ksb3Q9L14oPzpjaGVja2Jv
eHxyYWRpbykkL2ksc3Q9L2NoZWNrZWRccyooPzpbXj1dfD1ccyouY2hlY2tlZC4pL2ksYXQ9L14k
fFwvKD86amF2YXxlY21hKXNjcmlwdC9pLHV0PS9edHJ1ZVwvKC4qKS8sbHQ9L15ccyo8ISg/Olxb
Q0RBVEFcW3wtLSl8KD86XF1cXXwtLSk+XHMqJC9nLGN0PXtvcHRpb246WzEsIjxzZWxlY3QgbXVs
dGlwbGU9J211bHRpcGxlJz4iLCI8L3NlbGVjdD4iXSx0aGVhZDpbMSwiPHRhYmxlPiIsIjwvdGFi
bGU+Il0sY29sOlsyLCI8dGFibGU+PGNvbGdyb3VwPiIsIjwvY29sZ3JvdXA+PC90YWJsZT4iXSx0
cjpbMiwiPHRhYmxlPjx0Ym9keT4iLCI8L3Rib2R5PjwvdGFibGU+Il0sdGQ6WzMsIjx0YWJsZT48
dGJvZHk+PHRyPiIsIjwvdHI+PC90Ym9keT48L3RhYmxlPiJdLF9kZWZhdWx0OlswLCIiLCIiXX07
Y3Qub3B0Z3JvdXA9Y3Qub3B0aW9uLGN0LnRib2R5PWN0LnRmb290PWN0LmNvbGdyb3VwPWN0LmNh
cHRpb249Y3QudGhlYWQsY3QudGg9Y3QudGQseC5mbi5leHRlbmQoe3RleHQ6ZnVuY3Rpb24oZSl7
cmV0dXJuIHguYWNjZXNzKHRoaXMsZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT11bmRlZmluZWQ/eC50
ZXh0KHRoaXMpOnRoaXMuZW1wdHkoKS5hcHBlbmQoKHRoaXNbMF0mJnRoaXNbMF0ub3duZXJEb2N1
bWVudHx8bykuY3JlYXRlVGV4dE5vZGUoZSkpfSxudWxsLGUsYXJndW1lbnRzLmxlbmd0aCl9LGFw
cGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cyxmdW5jdGlvbihl
KXtpZigxPT09dGhpcy5ub2RlVHlwZXx8MTE9PT10aGlzLm5vZGVUeXBlfHw5PT09dGhpcy5ub2Rl
VHlwZSl7dmFyIHQ9cHQodGhpcyxlKTt0LmFwcGVuZENoaWxkKGUpfX0pfSxwcmVwZW5kOmZ1bmN0
aW9uKCl7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLGZ1bmN0aW9uKGUpe2lmKDE9PT10
aGlzLm5vZGVUeXBlfHwxMT09PXRoaXMubm9kZVR5cGV8fDk9PT10aGlzLm5vZGVUeXBlKXt2YXIg
dD1wdCh0aGlzLGUpO3QuaW5zZXJ0QmVmb3JlKGUsdC5maXJzdENoaWxkKX19KX0sYmVmb3JlOmZ1
bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLGZ1bmN0aW9uKGUpe3RoaXMu
cGFyZW50Tm9kZSYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlLHRoaXMpfSl9LGFmdGVy
OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLGZ1bmN0aW9uKGUpe3Ro
aXMucGFyZW50Tm9kZSYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlLHRoaXMubmV4dFNp
YmxpbmcpfSl9LHJlbW92ZTpmdW5jdGlvbihlLHQpe3ZhciBuLHI9ZT94LmZpbHRlcihlLHRoaXMp
OnRoaXMsaT0wO2Zvcig7bnVsbCE9KG49cltpXSk7aSsrKXR8fDEhPT1uLm5vZGVUeXBlfHx4LmNs
ZWFuRGF0YShtdChuKSksbi5wYXJlbnROb2RlJiYodCYmeC5jb250YWlucyhuLm93bmVyRG9jdW1l
bnQsbikmJmR0KG10KG4sInNjcmlwdCIpKSxuLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobikpO3Jl
dHVybiB0aGlzfSxlbXB0eTpmdW5jdGlvbigpe3ZhciBlLHQ9MDtmb3IoO251bGwhPShlPXRoaXNb
dF0pO3QrKykxPT09ZS5ub2RlVHlwZSYmKHguY2xlYW5EYXRhKG10KGUsITEpKSxlLnRleHRDb250
ZW50PSIiKTtyZXR1cm4gdGhpc30sY2xvbmU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT1udWxsPT1l
PyExOmUsdD1udWxsPT10P2U6dCx0aGlzLm1hcChmdW5jdGlvbigpe3JldHVybiB4LmNsb25lKHRo
aXMsZSx0KX0pfSxodG1sOmZ1bmN0aW9uKGUpe3JldHVybiB4LmFjY2Vzcyh0aGlzLGZ1bmN0aW9u
KGUpe3ZhciB0PXRoaXNbMF18fHt9LG49MCxyPXRoaXMubGVuZ3RoO2lmKGU9PT11bmRlZmluZWQm
JjE9PT10Lm5vZGVUeXBlKXJldHVybiB0LmlubmVySFRNTDtpZigic3RyaW5nIj09dHlwZW9mIGUm
JiFpdC50ZXN0KGUpJiYhY3RbKG50LmV4ZWMoZSl8fFsiIiwiIl0pWzFdLnRvTG93ZXJDYXNlKCld
KXtlPWUucmVwbGFjZSh0dCwiPCQxPjwvJDI+Iik7dHJ5e2Zvcig7cj5uO24rKyl0PXRoaXNbbl18
fHt9LDE9PT10Lm5vZGVUeXBlJiYoeC5jbGVhbkRhdGEobXQodCwhMSkpLHQuaW5uZXJIVE1MPWUp
O3Q9MH1jYXRjaChpKXt9fXQmJnRoaXMuZW1wdHkoKS5hcHBlbmQoZSl9LG51bGwsZSxhcmd1bWVu
dHMubGVuZ3RoKX0scmVwbGFjZVdpdGg6ZnVuY3Rpb24oKXt2YXIgZT14Lm1hcCh0aGlzLGZ1bmN0
aW9uKGUpe3JldHVybltlLm5leHRTaWJsaW5nLGUucGFyZW50Tm9kZV19KSx0PTA7cmV0dXJuIHRo
aXMuZG9tTWFuaXAoYXJndW1lbnRzLGZ1bmN0aW9uKG4pe3ZhciByPWVbdCsrXSxpPWVbdCsrXTtp
JiYociYmci5wYXJlbnROb2RlIT09aSYmKHI9dGhpcy5uZXh0U2libGluZykseCh0aGlzKS5yZW1v
dmUoKSxpLmluc2VydEJlZm9yZShuLHIpKX0sITApLHQ/dGhpczp0aGlzLnJlbW92ZSgpfSxkZXRh
Y2g6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucmVtb3ZlKGUsITApfSxkb21NYW5pcDpmdW5jdGlv
bihlLHQsbil7ZT1mLmFwcGx5KFtdLGUpO3ZhciByLGksbyxzLGEsdSxsPTAsYz10aGlzLmxlbmd0
aCxwPXRoaXMsaD1jLTEsZD1lWzBdLGc9eC5pc0Z1bmN0aW9uKGQpO2lmKGd8fCEoMT49Y3x8InN0
cmluZyIhPXR5cGVvZiBkfHx4LnN1cHBvcnQuY2hlY2tDbG9uZSkmJnN0LnRlc3QoZCkpcmV0dXJu
IHRoaXMuZWFjaChmdW5jdGlvbihyKXt2YXIgaT1wLmVxKHIpO2cmJihlWzBdPWQuY2FsbCh0aGlz
LHIsaS5odG1sKCkpKSxpLmRvbU1hbmlwKGUsdCxuKX0pO2lmKGMmJihyPXguYnVpbGRGcmFnbWVu
dChlLHRoaXNbMF0ub3duZXJEb2N1bWVudCwhMSwhbiYmdGhpcyksaT1yLmZpcnN0Q2hpbGQsMT09
PXIuY2hpbGROb2Rlcy5sZW5ndGgmJihyPWkpLGkpKXtmb3Iobz14Lm1hcChtdChyLCJzY3JpcHQi
KSxmdCkscz1vLmxlbmd0aDtjPmw7bCsrKWE9cixsIT09aCYmKGE9eC5jbG9uZShhLCEwLCEwKSxz
JiZ4Lm1lcmdlKG8sbXQoYSwic2NyaXB0IikpKSx0LmNhbGwodGhpc1tsXSxhLGwpO2lmKHMpZm9y
KHU9b1tvLmxlbmd0aC0xXS5vd25lckRvY3VtZW50LHgubWFwKG8saHQpLGw9MDtzPmw7bCsrKWE9
b1tsXSxhdC50ZXN0KGEudHlwZXx8IiIpJiYhcS5hY2Nlc3MoYSwiZ2xvYmFsRXZhbCIpJiZ4LmNv
bnRhaW5zKHUsYSkmJihhLnNyYz94Ll9ldmFsVXJsKGEuc3JjKTp4Lmdsb2JhbEV2YWwoYS50ZXh0
Q29udGVudC5yZXBsYWNlKGx0LCIiKSkpfXJldHVybiB0aGlzfX0pLHguZWFjaCh7YXBwZW5kVG86
ImFwcGVuZCIscHJlcGVuZFRvOiJwcmVwZW5kIixpbnNlcnRCZWZvcmU6ImJlZm9yZSIsaW5zZXJ0
QWZ0ZXI6ImFmdGVyIixyZXBsYWNlQWxsOiJyZXBsYWNlV2l0aCJ9LGZ1bmN0aW9uKGUsdCl7eC5m
bltlXT1mdW5jdGlvbihlKXt2YXIgbixyPVtdLGk9eChlKSxvPWkubGVuZ3RoLTEscz0wO2Zvcig7
bz49cztzKyspbj1zPT09bz90aGlzOnRoaXMuY2xvbmUoITApLHgoaVtzXSlbdF0obiksaC5hcHBs
eShyLG4uZ2V0KCkpO3JldHVybiB0aGlzLnB1c2hTdGFjayhyKX19KSx4LmV4dGVuZCh7Y2xvbmU6
ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbyxzLGE9ZS5jbG9uZU5vZGUoITApLHU9eC5jb250YWlu
cyhlLm93bmVyRG9jdW1lbnQsZSk7aWYoISh4LnN1cHBvcnQubm9DbG9uZUNoZWNrZWR8fDEhPT1l
Lm5vZGVUeXBlJiYxMSE9PWUubm9kZVR5cGV8fHguaXNYTUxEb2MoZSkpKWZvcihzPW10KGEpLG89
bXQoZSkscj0wLGk9by5sZW5ndGg7aT5yO3IrKyl5dChvW3JdLHNbcl0pO2lmKHQpaWYobilmb3Io
bz1vfHxtdChlKSxzPXN8fG10KGEpLHI9MCxpPW8ubGVuZ3RoO2k+cjtyKyspZ3Qob1tyXSxzW3Jd
KTtlbHNlIGd0KGUsYSk7cmV0dXJuIHM9bXQoYSwic2NyaXB0Iikscy5sZW5ndGg+MCYmZHQocywh
dSYmbXQoZSwic2NyaXB0IikpLGF9LGJ1aWxkRnJhZ21lbnQ6ZnVuY3Rpb24oZSx0LG4scil7dmFy
IGksbyxzLGEsdSxsLGM9MCxwPWUubGVuZ3RoLGY9dC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCks
aD1bXTtmb3IoO3A+YztjKyspaWYoaT1lW2NdLGl8fDA9PT1pKWlmKCJvYmplY3QiPT09eC50eXBl
KGkpKXgubWVyZ2UoaCxpLm5vZGVUeXBlP1tpXTppKTtlbHNlIGlmKHJ0LnRlc3QoaSkpe289b3x8
Zi5hcHBlbmRDaGlsZCh0LmNyZWF0ZUVsZW1lbnQoImRpdiIpKSxzPShudC5leGVjKGkpfHxbIiIs
IiJdKVsxXS50b0xvd2VyQ2FzZSgpLGE9Y3Rbc118fGN0Ll9kZWZhdWx0LG8uaW5uZXJIVE1MPWFb
MV0raS5yZXBsYWNlKHR0LCI8JDE+PC8kMj4iKSthWzJdLGw9YVswXTt3aGlsZShsLS0pbz1vLmxh
c3RDaGlsZDt4Lm1lcmdlKGgsby5jaGlsZE5vZGVzKSxvPWYuZmlyc3RDaGlsZCxvLnRleHRDb250
ZW50PSIifWVsc2UgaC5wdXNoKHQuY3JlYXRlVGV4dE5vZGUoaSkpO2YudGV4dENvbnRlbnQ9IiIs
Yz0wO3doaWxlKGk9aFtjKytdKWlmKCghcnx8LTE9PT14LmluQXJyYXkoaSxyKSkmJih1PXguY29u
dGFpbnMoaS5vd25lckRvY3VtZW50LGkpLG89bXQoZi5hcHBlbmRDaGlsZChpKSwic2NyaXB0Iiks
dSYmZHQobyksbikpe2w9MDt3aGlsZShpPW9bbCsrXSlhdC50ZXN0KGkudHlwZXx8IiIpJiZuLnB1
c2goaSl9cmV0dXJuIGZ9LGNsZWFuRGF0YTpmdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxvLHMsYT14
LmV2ZW50LnNwZWNpYWwsdT0wO2Zvcig7KG49ZVt1XSkhPT11bmRlZmluZWQ7dSsrKXtpZihGLmFj
Y2VwdHMobikmJihvPW5bcS5leHBhbmRvXSxvJiYodD1xLmNhY2hlW29dKSkpe2lmKHI9T2JqZWN0
LmtleXModC5ldmVudHN8fHt9KSxyLmxlbmd0aClmb3Iocz0wOyhpPXJbc10pIT09dW5kZWZpbmVk
O3MrKylhW2ldP3guZXZlbnQucmVtb3ZlKG4saSk6eC5yZW1vdmVFdmVudChuLGksdC5oYW5kbGUp
O3EuY2FjaGVbb10mJmRlbGV0ZSBxLmNhY2hlW29dfWRlbGV0ZSBMLmNhY2hlW25bTC5leHBhbmRv
XV19fSxfZXZhbFVybDpmdW5jdGlvbihlKXtyZXR1cm4geC5hamF4KHt1cmw6ZSx0eXBlOiJHRVQi
LGRhdGFUeXBlOiJzY3JpcHQiLGFzeW5jOiExLGdsb2JhbDohMSwidGhyb3dzIjohMH0pfX0pO2Z1
bmN0aW9uIHB0KGUsdCl7cmV0dXJuIHgubm9kZU5hbWUoZSwidGFibGUiKSYmeC5ub2RlTmFtZSgx
PT09dC5ub2RlVHlwZT90OnQuZmlyc3RDaGlsZCwidHIiKT9lLmdldEVsZW1lbnRzQnlUYWdOYW1l
KCJ0Ym9keSIpWzBdfHxlLmFwcGVuZENoaWxkKGUub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50
KCJ0Ym9keSIpKTplfWZ1bmN0aW9uIGZ0KGUpe3JldHVybiBlLnR5cGU9KG51bGwhPT1lLmdldEF0
dHJpYnV0ZSgidHlwZSIpKSsiLyIrZS50eXBlLGV9ZnVuY3Rpb24gaHQoZSl7dmFyIHQ9dXQuZXhl
YyhlLnR5cGUpO3JldHVybiB0P2UudHlwZT10WzFdOmUucmVtb3ZlQXR0cmlidXRlKCJ0eXBlIiks
ZX1mdW5jdGlvbiBkdChlLHQpe3ZhciBuPWUubGVuZ3RoLHI9MDtmb3IoO24+cjtyKyspcS5zZXQo
ZVtyXSwiZ2xvYmFsRXZhbCIsIXR8fHEuZ2V0KHRbcl0sImdsb2JhbEV2YWwiKSl9ZnVuY3Rpb24g
Z3QoZSx0KXt2YXIgbixyLGksbyxzLGEsdSxsO2lmKDE9PT10Lm5vZGVUeXBlKXtpZihxLmhhc0Rh
dGEoZSkmJihvPXEuYWNjZXNzKGUpLHM9cS5zZXQodCxvKSxsPW8uZXZlbnRzKSl7ZGVsZXRlIHMu
aGFuZGxlLHMuZXZlbnRzPXt9O2ZvcihpIGluIGwpZm9yKG49MCxyPWxbaV0ubGVuZ3RoO3I+bjtu
KyspeC5ldmVudC5hZGQodCxpLGxbaV1bbl0pfUwuaGFzRGF0YShlKSYmKGE9TC5hY2Nlc3MoZSks
dT14LmV4dGVuZCh7fSxhKSxMLnNldCh0LHUpKX19ZnVuY3Rpb24gbXQoZSx0KXt2YXIgbj1lLmdl
dEVsZW1lbnRzQnlUYWdOYW1lP2UuZ2V0RWxlbWVudHNCeVRhZ05hbWUodHx8IioiKTplLnF1ZXJ5
U2VsZWN0b3JBbGw/ZS5xdWVyeVNlbGVjdG9yQWxsKHR8fCIqIik6W107cmV0dXJuIHQ9PT11bmRl
ZmluZWR8fHQmJngubm9kZU5hbWUoZSx0KT94Lm1lcmdlKFtlXSxuKTpufWZ1bmN0aW9uIHl0KGUs
dCl7dmFyIG49dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOyJpbnB1dCI9PT1uJiZvdC50ZXN0KGUu
dHlwZSk/dC5jaGVja2VkPWUuY2hlY2tlZDooImlucHV0Ij09PW58fCJ0ZXh0YXJlYSI9PT1uKSYm
KHQuZGVmYXVsdFZhbHVlPWUuZGVmYXVsdFZhbHVlKX14LmZuLmV4dGVuZCh7d3JhcEFsbDpmdW5j
dGlvbihlKXt2YXIgdDtyZXR1cm4geC5pc0Z1bmN0aW9uKGUpP3RoaXMuZWFjaChmdW5jdGlvbih0
KXt4KHRoaXMpLndyYXBBbGwoZS5jYWxsKHRoaXMsdCkpfSk6KHRoaXNbMF0mJih0PXgoZSx0aGlz
WzBdLm93bmVyRG9jdW1lbnQpLmVxKDApLmNsb25lKCEwKSx0aGlzWzBdLnBhcmVudE5vZGUmJnQu
aW5zZXJ0QmVmb3JlKHRoaXNbMF0pLHQubWFwKGZ1bmN0aW9uKCl7dmFyIGU9dGhpczt3aGlsZShl
LmZpcnN0RWxlbWVudENoaWxkKWU9ZS5maXJzdEVsZW1lbnRDaGlsZDtyZXR1cm4gZX0pLmFwcGVu
ZCh0aGlzKSksdGhpcyl9LHdyYXBJbm5lcjpmdW5jdGlvbihlKXtyZXR1cm4geC5pc0Z1bmN0aW9u
KGUpP3RoaXMuZWFjaChmdW5jdGlvbih0KXt4KHRoaXMpLndyYXBJbm5lcihlLmNhbGwodGhpcyx0
KSl9KTp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgdD14KHRoaXMpLG49dC5jb250ZW50cygpO24u
bGVuZ3RoP24ud3JhcEFsbChlKTp0LmFwcGVuZChlKX0pfSx3cmFwOmZ1bmN0aW9uKGUpe3ZhciB0
PXguaXNGdW5jdGlvbihlKTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKG4pe3godGhpcykud3Jh
cEFsbCh0P2UuY2FsbCh0aGlzLG4pOmUpfSl9LHVud3JhcDpmdW5jdGlvbigpe3JldHVybiB0aGlz
LnBhcmVudCgpLmVhY2goZnVuY3Rpb24oKXt4Lm5vZGVOYW1lKHRoaXMsImJvZHkiKXx8eCh0aGlz
KS5yZXBsYWNlV2l0aCh0aGlzLmNoaWxkTm9kZXMpfSkuZW5kKCl9fSk7dmFyIHZ0LHh0LGJ0PS9e
KG5vbmV8dGFibGUoPyEtY1tlYV0pLispLyx3dD0vXm1hcmdpbi8sVHQ9UmVnRXhwKCJeKCIrYisi
KSguKikkIiwiaSIpLEN0PVJlZ0V4cCgiXigiK2IrIikoPyFweClbYS16JV0rJCIsImkiKSxrdD1S
ZWdFeHAoIl4oWystXSk9KCIrYisiKSIsImkiKSxOdD17Qk9EWToiYmxvY2sifSxFdD17cG9zaXRp
b246ImFic29sdXRlIix2aXNpYmlsaXR5OiJoaWRkZW4iLGRpc3BsYXk6ImJsb2NrIn0sU3Q9e2xl
dHRlclNwYWNpbmc6MCxmb250V2VpZ2h0OjQwMH0sanQ9WyJUb3AiLCJSaWdodCIsIkJvdHRvbSIs
IkxlZnQiXSxEdD1bIldlYmtpdCIsIk8iLCJNb3oiLCJtcyJdO2Z1bmN0aW9uIEF0KGUsdCl7aWYo
dCBpbiBlKXJldHVybiB0O3ZhciBuPXQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrdC5zbGljZSgx
KSxyPXQsaT1EdC5sZW5ndGg7d2hpbGUoaS0tKWlmKHQ9RHRbaV0rbix0IGluIGUpcmV0dXJuIHQ7
cmV0dXJuIHJ9ZnVuY3Rpb24gTHQoZSx0KXtyZXR1cm4gZT10fHxlLCJub25lIj09PXguY3NzKGUs
ImRpc3BsYXkiKXx8IXguY29udGFpbnMoZS5vd25lckRvY3VtZW50LGUpfWZ1bmN0aW9uIHF0KHQp
e3JldHVybiBlLmdldENvbXB1dGVkU3R5bGUodCxudWxsKX1mdW5jdGlvbiBIdChlLHQpe3ZhciBu
LHIsaSxvPVtdLHM9MCxhPWUubGVuZ3RoO2Zvcig7YT5zO3MrKylyPWVbc10sci5zdHlsZSYmKG9b
c109cS5nZXQociwib2xkZGlzcGxheSIpLG49ci5zdHlsZS5kaXNwbGF5LHQ/KG9bc118fCJub25l
IiE9PW58fChyLnN0eWxlLmRpc3BsYXk9IiIpLCIiPT09ci5zdHlsZS5kaXNwbGF5JiZMdChyKSYm
KG9bc109cS5hY2Nlc3Mociwib2xkZGlzcGxheSIsUnQoci5ub2RlTmFtZSkpKSk6b1tzXXx8KGk9
THQociksKG4mJiJub25lIiE9PW58fCFpKSYmcS5zZXQociwib2xkZGlzcGxheSIsaT9uOnguY3Nz
KHIsImRpc3BsYXkiKSkpKTtmb3Iocz0wO2E+cztzKyspcj1lW3NdLHIuc3R5bGUmJih0JiYibm9u
ZSIhPT1yLnN0eWxlLmRpc3BsYXkmJiIiIT09ci5zdHlsZS5kaXNwbGF5fHwoci5zdHlsZS5kaXNw
bGF5PXQ/b1tzXXx8IiI6Im5vbmUiKSk7cmV0dXJuIGV9eC5mbi5leHRlbmQoe2NzczpmdW5jdGlv
bihlLHQpe3JldHVybiB4LmFjY2Vzcyh0aGlzLGZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG89e30s
cz0wO2lmKHguaXNBcnJheSh0KSl7Zm9yKHI9cXQoZSksaT10Lmxlbmd0aDtpPnM7cysrKW9bdFtz
XV09eC5jc3MoZSx0W3NdLCExLHIpO3JldHVybiBvfXJldHVybiBuIT09dW5kZWZpbmVkP3guc3R5
bGUoZSx0LG4pOnguY3NzKGUsdCl9LGUsdCxhcmd1bWVudHMubGVuZ3RoPjEpfSxzaG93OmZ1bmN0
aW9uKCl7cmV0dXJuIEh0KHRoaXMsITApfSxoaWRlOmZ1bmN0aW9uKCl7cmV0dXJuIEh0KHRoaXMp
fSx0b2dnbGU6ZnVuY3Rpb24oZSl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgZT9lP3RoaXMuc2hv
dygpOnRoaXMuaGlkZSgpOnRoaXMuZWFjaChmdW5jdGlvbigpe0x0KHRoaXMpP3godGhpcykuc2hv
dygpOngodGhpcykuaGlkZSgpfSl9fSkseC5leHRlbmQoe2Nzc0hvb2tzOntvcGFjaXR5OntnZXQ6
ZnVuY3Rpb24oZSx0KXtpZih0KXt2YXIgbj12dChlLCJvcGFjaXR5Iik7cmV0dXJuIiI9PT1uPyIx
IjpufX19fSxjc3NOdW1iZXI6e2NvbHVtbkNvdW50OiEwLGZpbGxPcGFjaXR5OiEwLGZvbnRXZWln
aHQ6ITAsbGluZUhlaWdodDohMCxvcGFjaXR5OiEwLG9yZGVyOiEwLG9ycGhhbnM6ITAsd2lkb3dz
OiEwLHpJbmRleDohMCx6b29tOiEwfSxjc3NQcm9wczp7ImZsb2F0IjoiY3NzRmxvYXQifSxzdHls
ZTpmdW5jdGlvbihlLHQsbixyKXtpZihlJiYzIT09ZS5ub2RlVHlwZSYmOCE9PWUubm9kZVR5cGUm
JmUuc3R5bGUpe3ZhciBpLG8scyxhPXguY2FtZWxDYXNlKHQpLHU9ZS5zdHlsZTtyZXR1cm4gdD14
LmNzc1Byb3BzW2FdfHwoeC5jc3NQcm9wc1thXT1BdCh1LGEpKSxzPXguY3NzSG9va3NbdF18fHgu
Y3NzSG9va3NbYV0sbj09PXVuZGVmaW5lZD9zJiYiZ2V0ImluIHMmJihpPXMuZ2V0KGUsITEscikp
IT09dW5kZWZpbmVkP2k6dVt0XToobz10eXBlb2Ygbiwic3RyaW5nIj09PW8mJihpPWt0LmV4ZWMo
bikpJiYobj0oaVsxXSsxKSppWzJdK3BhcnNlRmxvYXQoeC5jc3MoZSx0KSksbz0ibnVtYmVyIiks
bnVsbD09bnx8Im51bWJlciI9PT1vJiZpc05hTihuKXx8KCJudW1iZXIiIT09b3x8eC5jc3NOdW1i
ZXJbYV18fChuKz0icHgiKSx4LnN1cHBvcnQuY2xlYXJDbG9uZVN0eWxlfHwiIiE9PW58fDAhPT10
LmluZGV4T2YoImJhY2tncm91bmQiKXx8KHVbdF09ImluaGVyaXQiKSxzJiYic2V0ImluIHMmJihu
PXMuc2V0KGUsbixyKSk9PT11bmRlZmluZWR8fCh1W3RdPW4pKSx1bmRlZmluZWQpfX0sY3NzOmZ1
bmN0aW9uKGUsdCxuLHIpe3ZhciBpLG8scyxhPXguY2FtZWxDYXNlKHQpO3JldHVybiB0PXguY3Nz
UHJvcHNbYV18fCh4LmNzc1Byb3BzW2FdPUF0KGUuc3R5bGUsYSkpLHM9eC5jc3NIb29rc1t0XXx8
eC5jc3NIb29rc1thXSxzJiYiZ2V0ImluIHMmJihpPXMuZ2V0KGUsITAsbikpLGk9PT11bmRlZmlu
ZWQmJihpPXZ0KGUsdCxyKSksIm5vcm1hbCI9PT1pJiZ0IGluIFN0JiYoaT1TdFt0XSksIiI9PT1u
fHxuPyhvPXBhcnNlRmxvYXQoaSksbj09PSEwfHx4LmlzTnVtZXJpYyhvKT9vfHwwOmkpOml9fSks
dnQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbyxzPW58fHF0KGUpLGE9cz9zLmdldFByb3BlcnR5
VmFsdWUodCl8fHNbdF06dW5kZWZpbmVkLHU9ZS5zdHlsZTtyZXR1cm4gcyYmKCIiIT09YXx8eC5j
b250YWlucyhlLm93bmVyRG9jdW1lbnQsZSl8fChhPXguc3R5bGUoZSx0KSksQ3QudGVzdChhKSYm
d3QudGVzdCh0KSYmKHI9dS53aWR0aCxpPXUubWluV2lkdGgsbz11Lm1heFdpZHRoLHUubWluV2lk
dGg9dS5tYXhXaWR0aD11LndpZHRoPWEsYT1zLndpZHRoLHUud2lkdGg9cix1Lm1pbldpZHRoPWks
dS5tYXhXaWR0aD1vKSksYX07ZnVuY3Rpb24gT3QoZSx0LG4pe3ZhciByPVR0LmV4ZWModCk7cmV0
dXJuIHI/TWF0aC5tYXgoMCxyWzFdLShufHwwKSkrKHJbMl18fCJweCIpOnR9ZnVuY3Rpb24gRnQo
ZSx0LG4scixpKXt2YXIgbz1uPT09KHI/ImJvcmRlciI6ImNvbnRlbnQiKT80OiJ3aWR0aCI9PT10
PzE6MCxzPTA7Zm9yKDs0Pm87bys9MikibWFyZ2luIj09PW4mJihzKz14LmNzcyhlLG4ranRbb10s
ITAsaSkpLHI/KCJjb250ZW50Ij09PW4mJihzLT14LmNzcyhlLCJwYWRkaW5nIitqdFtvXSwhMCxp
KSksIm1hcmdpbiIhPT1uJiYocy09eC5jc3MoZSwiYm9yZGVyIitqdFtvXSsiV2lkdGgiLCEwLGkp
KSk6KHMrPXguY3NzKGUsInBhZGRpbmciK2p0W29dLCEwLGkpLCJwYWRkaW5nIiE9PW4mJihzKz14
LmNzcyhlLCJib3JkZXIiK2p0W29dKyJXaWR0aCIsITAsaSkpKTtyZXR1cm4gc31mdW5jdGlvbiBQ
dChlLHQsbil7dmFyIHI9ITAsaT0id2lkdGgiPT09dD9lLm9mZnNldFdpZHRoOmUub2Zmc2V0SGVp
Z2h0LG89cXQoZSkscz14LnN1cHBvcnQuYm94U2l6aW5nJiYiYm9yZGVyLWJveCI9PT14LmNzcyhl
LCJib3hTaXppbmciLCExLG8pO2lmKDA+PWl8fG51bGw9PWkpe2lmKGk9dnQoZSx0LG8pLCgwPml8
fG51bGw9PWkpJiYoaT1lLnN0eWxlW3RdKSxDdC50ZXN0KGkpKXJldHVybiBpO3I9cyYmKHguc3Vw
cG9ydC5ib3hTaXppbmdSZWxpYWJsZXx8aT09PWUuc3R5bGVbdF0pLGk9cGFyc2VGbG9hdChpKXx8
MH1yZXR1cm4gaStGdChlLHQsbnx8KHM/ImJvcmRlciI6ImNvbnRlbnQiKSxyLG8pKyJweCJ9ZnVu
Y3Rpb24gUnQoZSl7dmFyIHQ9byxuPU50W2VdO3JldHVybiBufHwobj1NdChlLHQpLCJub25lIiE9
PW4mJm58fCh4dD0oeHR8fHgoIjxpZnJhbWUgZnJhbWVib3JkZXI9JzAnIHdpZHRoPScwJyBoZWln
aHQ9JzAnLz4iKS5jc3MoImNzc1RleHQiLCJkaXNwbGF5OmJsb2NrICFpbXBvcnRhbnQiKSkuYXBw
ZW5kVG8odC5kb2N1bWVudEVsZW1lbnQpLHQ9KHh0WzBdLmNvbnRlbnRXaW5kb3d8fHh0WzBdLmNv
bnRlbnREb2N1bWVudCkuZG9jdW1lbnQsdC53cml0ZSgiPCFkb2N0eXBlIGh0bWw+PGh0bWw+PGJv
ZHk+IiksdC5jbG9zZSgpLG49TXQoZSx0KSx4dC5kZXRhY2goKSksTnRbZV09biksbn1mdW5jdGlv
biBNdChlLHQpe3ZhciBuPXgodC5jcmVhdGVFbGVtZW50KGUpKS5hcHBlbmRUbyh0LmJvZHkpLHI9
eC5jc3MoblswXSwiZGlzcGxheSIpO3JldHVybiBuLnJlbW92ZSgpLHJ9eC5lYWNoKFsiaGVpZ2h0
Iiwid2lkdGgiXSxmdW5jdGlvbihlLHQpe3guY3NzSG9va3NbdF09e2dldDpmdW5jdGlvbihlLG4s
cil7cmV0dXJuIG4/MD09PWUub2Zmc2V0V2lkdGgmJmJ0LnRlc3QoeC5jc3MoZSwiZGlzcGxheSIp
KT94LnN3YXAoZSxFdCxmdW5jdGlvbigpe3JldHVybiBQdChlLHQscil9KTpQdChlLHQscik6dW5k
ZWZpbmVkfSxzZXQ6ZnVuY3Rpb24oZSxuLHIpe3ZhciBpPXImJnF0KGUpO3JldHVybiBPdChlLG4s
cj9GdChlLHQscix4LnN1cHBvcnQuYm94U2l6aW5nJiYiYm9yZGVyLWJveCI9PT14LmNzcyhlLCJi
b3hTaXppbmciLCExLGkpLGkpOjApfX19KSx4KGZ1bmN0aW9uKCl7eC5zdXBwb3J0LnJlbGlhYmxl
TWFyZ2luUmlnaHR8fCh4LmNzc0hvb2tzLm1hcmdpblJpZ2h0PXtnZXQ6ZnVuY3Rpb24oZSx0KXty
ZXR1cm4gdD94LnN3YXAoZSx7ZGlzcGxheToiaW5saW5lLWJsb2NrIn0sdnQsW2UsIm1hcmdpblJp
Z2h0Il0pOnVuZGVmaW5lZH19KSwheC5zdXBwb3J0LnBpeGVsUG9zaXRpb24mJnguZm4ucG9zaXRp
b24mJnguZWFjaChbInRvcCIsImxlZnQiXSxmdW5jdGlvbihlLHQpe3guY3NzSG9va3NbdF09e2dl
dDpmdW5jdGlvbihlLG4pe3JldHVybiBuPyhuPXZ0KGUsdCksQ3QudGVzdChuKT94KGUpLnBvc2l0
aW9uKClbdF0rInB4IjpuKTp1bmRlZmluZWR9fX0pfSkseC5leHByJiZ4LmV4cHIuZmlsdGVycyYm
KHguZXhwci5maWx0ZXJzLmhpZGRlbj1mdW5jdGlvbihlKXtyZXR1cm4gMD49ZS5vZmZzZXRXaWR0
aCYmMD49ZS5vZmZzZXRIZWlnaHR9LHguZXhwci5maWx0ZXJzLnZpc2libGU9ZnVuY3Rpb24oZSl7
cmV0dXJuIXguZXhwci5maWx0ZXJzLmhpZGRlbihlKX0pLHguZWFjaCh7bWFyZ2luOiIiLHBhZGRp
bmc6IiIsYm9yZGVyOiJXaWR0aCJ9LGZ1bmN0aW9uKGUsdCl7eC5jc3NIb29rc1tlK3RdPXtleHBh
bmQ6ZnVuY3Rpb24obil7dmFyIHI9MCxpPXt9LG89InN0cmluZyI9PXR5cGVvZiBuP24uc3BsaXQo
IiAiKTpbbl07Zm9yKDs0PnI7cisrKWlbZStqdFtyXSt0XT1vW3JdfHxvW3ItMl18fG9bMF07cmV0
dXJuIGl9fSx3dC50ZXN0KGUpfHwoeC5jc3NIb29rc1tlK3RdLnNldD1PdCl9KTt2YXIgV3Q9LyUy
MC9nLCR0PS9cW1xdJC8sQnQ9L1xyP1xuL2csSXQ9L14oPzpzdWJtaXR8YnV0dG9ufGltYWdlfHJl
c2V0fGZpbGUpJC9pLHp0PS9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGtleWdlbikvaTt4LmZu
LmV4dGVuZCh7c2VyaWFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHgucGFyYW0odGhpcy5zZXJpYWxp
emVBcnJheSgpKX0sc2VyaWFsaXplQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVu
Y3Rpb24oKXt2YXIgZT14LnByb3AodGhpcywiZWxlbWVudHMiKTtyZXR1cm4gZT94Lm1ha2VBcnJh
eShlKTp0aGlzfSkuZmlsdGVyKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy50eXBlO3JldHVybiB0aGlz
Lm5hbWUmJiF4KHRoaXMpLmlzKCI6ZGlzYWJsZWQiKSYmenQudGVzdCh0aGlzLm5vZGVOYW1lKSYm
IUl0LnRlc3QoZSkmJih0aGlzLmNoZWNrZWR8fCFvdC50ZXN0KGUpKX0pLm1hcChmdW5jdGlvbihl
LHQpe3ZhciBuPXgodGhpcykudmFsKCk7cmV0dXJuIG51bGw9PW4/bnVsbDp4LmlzQXJyYXkobik/
eC5tYXAobixmdW5jdGlvbihlKXtyZXR1cm57bmFtZTp0Lm5hbWUsdmFsdWU6ZS5yZXBsYWNlKEJ0
LCJcclxuIil9fSk6e25hbWU6dC5uYW1lLHZhbHVlOm4ucmVwbGFjZShCdCwiXHJcbiIpfX0pLmdl
dCgpfX0pLHgucGFyYW09ZnVuY3Rpb24oZSx0KXt2YXIgbixyPVtdLGk9ZnVuY3Rpb24oZSx0KXt0
PXguaXNGdW5jdGlvbih0KT90KCk6bnVsbD09dD8iIjp0LHJbci5sZW5ndGhdPWVuY29kZVVSSUNv
bXBvbmVudChlKSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KHQpfTtpZih0PT09dW5kZWZpbmVkJiYo
dD14LmFqYXhTZXR0aW5ncyYmeC5hamF4U2V0dGluZ3MudHJhZGl0aW9uYWwpLHguaXNBcnJheShl
KXx8ZS5qcXVlcnkmJiF4LmlzUGxhaW5PYmplY3QoZSkpeC5lYWNoKGUsZnVuY3Rpb24oKXtpKHRo
aXMubmFtZSx0aGlzLnZhbHVlKX0pO2Vsc2UgZm9yKG4gaW4gZSlfdChuLGVbbl0sdCxpKTtyZXR1
cm4gci5qb2luKCImIikucmVwbGFjZShXdCwiKyIpfTtmdW5jdGlvbiBfdChlLHQsbixyKXt2YXIg
aTtpZih4LmlzQXJyYXkodCkpeC5lYWNoKHQsZnVuY3Rpb24odCxpKXtufHwkdC50ZXN0KGUpP3Io
ZSxpKTpfdChlKyJbIisoIm9iamVjdCI9PXR5cGVvZiBpP3Q6IiIpKyJdIixpLG4scil9KTtlbHNl
IGlmKG58fCJvYmplY3QiIT09eC50eXBlKHQpKXIoZSx0KTtlbHNlIGZvcihpIGluIHQpX3QoZSsi
WyIraSsiXSIsdFtpXSxuLHIpfXguZWFjaCgiYmx1ciBmb2N1cyBmb2N1c2luIGZvY3Vzb3V0IGxv
YWQgcmVzaXplIHNjcm9sbCB1bmxvYWQgY2xpY2sgZGJsY2xpY2sgbW91c2Vkb3duIG1vdXNldXAg
bW91c2Vtb3ZlIG1vdXNlb3ZlciBtb3VzZW91dCBtb3VzZWVudGVyIG1vdXNlbGVhdmUgY2hhbmdl
IHNlbGVjdCBzdWJtaXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBlcnJvciBjb250ZXh0bWVudSIu
c3BsaXQoIiAiKSxmdW5jdGlvbihlLHQpe3guZm5bdF09ZnVuY3Rpb24oZSxuKXtyZXR1cm4gYXJn
dW1lbnRzLmxlbmd0aD4wP3RoaXMub24odCxudWxsLGUsbik6dGhpcy50cmlnZ2VyKHQpfX0pLHgu
Zm4uZXh0ZW5kKHtob3ZlcjpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLm1vdXNlZW50ZXIoZSku
bW91c2VsZWF2ZSh0fHxlKX0sYmluZDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHRoaXMub24oZSxu
dWxsLHQsbil9LHVuYmluZDpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLm9mZihlLG51bGwsdCkK
Kyt9LGRlbGVnYXRlOmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiB0aGlzLm9uKHQsZSxuLHIpfSx1
bmRlbGVnYXRlOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/dGhp
cy5vZmYoZSwiKioiKTp0aGlzLm9mZih0LGV8fCIqKiIsbil9fSk7dmFyIFh0LFV0LFl0PXgubm93
KCksVnQ9L1w/LyxHdD0vIy4qJC8sSnQ9LyhbPyZdKV89W14mXSovLFF0PS9eKC4qPyk6WyBcdF0q
KFteXHJcbl0qKSQvZ20sS3Q9L14oPzphYm91dHxhcHB8YXBwLXN0b3JhZ2V8ListZXh0ZW5zaW9u
fGZpbGV8cmVzfHdpZGdldCk6JC8sWnQ9L14oPzpHRVR8SEVBRCkkLyxlbj0vXlwvXC8vLHRuPS9e
KFtcdy4rLV0rOikoPzpcL1wvKFteXC8/IzpdKikoPzo6KFxkKyl8KXwpLyxubj14LmZuLmxvYWQs
cm49e30sb249e30sc249IiovIi5jb25jYXQoIioiKTt0cnl7VXQ9aS5ocmVmfWNhdGNoKGFuKXtV
dD1vLmNyZWF0ZUVsZW1lbnQoImEiKSxVdC5ocmVmPSIiLFV0PVV0LmhyZWZ9WHQ9dG4uZXhlYyhV
dC50b0xvd2VyQ2FzZSgpKXx8W107ZnVuY3Rpb24gdW4oZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbil7
InN0cmluZyIhPXR5cGVvZiB0JiYobj10LHQ9IioiKTt2YXIgcixpPTAsbz10LnRvTG93ZXJDYXNl
KCkubWF0Y2godyl8fFtdO2lmKHguaXNGdW5jdGlvbihuKSl3aGlsZShyPW9baSsrXSkiKyI9PT1y
WzBdPyhyPXIuc2xpY2UoMSl8fCIqIiwoZVtyXT1lW3JdfHxbXSkudW5zaGlmdChuKSk6KGVbcl09
ZVtyXXx8W10pLnB1c2gobil9fWZ1bmN0aW9uIGxuKGUsdCxuLHIpe3ZhciBpPXt9LG89ZT09PW9u
O2Z1bmN0aW9uIHMoYSl7dmFyIHU7cmV0dXJuIGlbYV09ITAseC5lYWNoKGVbYV18fFtdLGZ1bmN0
aW9uKGUsYSl7dmFyIGw9YSh0LG4scik7cmV0dXJuInN0cmluZyIhPXR5cGVvZiBsfHxvfHxpW2xd
P28/ISh1PWwpOnVuZGVmaW5lZDoodC5kYXRhVHlwZXMudW5zaGlmdChsKSxzKGwpLCExKX0pLHV9
cmV0dXJuIHModC5kYXRhVHlwZXNbMF0pfHwhaVsiKiJdJiZzKCIqIil9ZnVuY3Rpb24gY24oZSx0
KXt2YXIgbixyLGk9eC5hamF4U2V0dGluZ3MuZmxhdE9wdGlvbnN8fHt9O2ZvcihuIGluIHQpdFtu
XSE9PXVuZGVmaW5lZCYmKChpW25dP2U6cnx8KHI9e30pKVtuXT10W25dKTtyZXR1cm4gciYmeC5l
eHRlbmQoITAsZSxyKSxlfXguZm4ubG9hZD1mdW5jdGlvbihlLHQsbil7aWYoInN0cmluZyIhPXR5
cGVvZiBlJiZubilyZXR1cm4gbm4uYXBwbHkodGhpcyxhcmd1bWVudHMpO3ZhciByLGksbyxzPXRo
aXMsYT1lLmluZGV4T2YoIiAiKTtyZXR1cm4gYT49MCYmKHI9ZS5zbGljZShhKSxlPWUuc2xpY2Uo
MCxhKSkseC5pc0Z1bmN0aW9uKHQpPyhuPXQsdD11bmRlZmluZWQpOnQmJiJvYmplY3QiPT10eXBl
b2YgdCYmKGk9IlBPU1QiKSxzLmxlbmd0aD4wJiZ4LmFqYXgoe3VybDplLHR5cGU6aSxkYXRhVHlw
ZToiaHRtbCIsZGF0YTp0fSkuZG9uZShmdW5jdGlvbihlKXtvPWFyZ3VtZW50cyxzLmh0bWwocj94
KCI8ZGl2PiIpLmFwcGVuZCh4LnBhcnNlSFRNTChlKSkuZmluZChyKTplKX0pLmNvbXBsZXRlKG4m
JmZ1bmN0aW9uKGUsdCl7cy5lYWNoKG4sb3x8W2UucmVzcG9uc2VUZXh0LHQsZV0pfSksdGhpc30s
eC5lYWNoKFsiYWpheFN0YXJ0IiwiYWpheFN0b3AiLCJhamF4Q29tcGxldGUiLCJhamF4RXJyb3Ii
LCJhamF4U3VjY2VzcyIsImFqYXhTZW5kIl0sZnVuY3Rpb24oZSx0KXt4LmZuW3RdPWZ1bmN0aW9u
KGUpe3JldHVybiB0aGlzLm9uKHQsZSl9fSkseC5leHRlbmQoe2FjdGl2ZTowLGxhc3RNb2RpZmll
ZDp7fSxldGFnOnt9LGFqYXhTZXR0aW5nczp7dXJsOlV0LHR5cGU6IkdFVCIsaXNMb2NhbDpLdC50
ZXN0KFh0WzFdKSxnbG9iYWw6ITAscHJvY2Vzc0RhdGE6ITAsYXN5bmM6ITAsY29udGVudFR5cGU6
ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDsgY2hhcnNldD1VVEYtOCIsYWNjZXB0
czp7IioiOnNuLHRleHQ6InRleHQvcGxhaW4iLGh0bWw6InRleHQvaHRtbCIseG1sOiJhcHBsaWNh
dGlvbi94bWwsIHRleHQveG1sIixqc29uOiJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L2phdmFzY3Jp
cHQifSxjb250ZW50czp7eG1sOi94bWwvLGh0bWw6L2h0bWwvLGpzb246L2pzb24vfSxyZXNwb25z
ZUZpZWxkczp7eG1sOiJyZXNwb25zZVhNTCIsdGV4dDoicmVzcG9uc2VUZXh0Iixqc29uOiJyZXNw
b25zZUpTT04ifSxjb252ZXJ0ZXJzOnsiKiB0ZXh0IjpTdHJpbmcsInRleHQgaHRtbCI6ITAsInRl
eHQganNvbiI6eC5wYXJzZUpTT04sInRleHQgeG1sIjp4LnBhcnNlWE1MfSxmbGF0T3B0aW9uczp7
dXJsOiEwLGNvbnRleHQ6ITB9fSxhamF4U2V0dXA6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD9jbihj
bihlLHguYWpheFNldHRpbmdzKSx0KTpjbih4LmFqYXhTZXR0aW5ncyxlKX0sYWpheFByZWZpbHRl
cjp1bihybiksYWpheFRyYW5zcG9ydDp1bihvbiksYWpheDpmdW5jdGlvbihlLHQpeyJvYmplY3Qi
PT10eXBlb2YgZSYmKHQ9ZSxlPXVuZGVmaW5lZCksdD10fHx7fTt2YXIgbixyLGksbyxzLGEsdSxs
LGM9eC5hamF4U2V0dXAoe30sdCkscD1jLmNvbnRleHR8fGMsZj1jLmNvbnRleHQmJihwLm5vZGVU
eXBlfHxwLmpxdWVyeSk/eChwKTp4LmV2ZW50LGg9eC5EZWZlcnJlZCgpLGQ9eC5DYWxsYmFja3Mo
Im9uY2UgbWVtb3J5IiksZz1jLnN0YXR1c0NvZGV8fHt9LG09e30seT17fSx2PTAsYj0iY2FuY2Vs
ZWQiLFQ9e3JlYWR5U3RhdGU6MCxnZXRSZXNwb25zZUhlYWRlcjpmdW5jdGlvbihlKXt2YXIgdDtp
ZigyPT09dil7aWYoIW8pe289e307d2hpbGUodD1RdC5leGVjKGkpKW9bdFsxXS50b0xvd2VyQ2Fz
ZSgpXT10WzJdfXQ9b1tlLnRvTG93ZXJDYXNlKCldfXJldHVybiBudWxsPT10P251bGw6dH0sZ2V0
QWxsUmVzcG9uc2VIZWFkZXJzOmZ1bmN0aW9uKCl7cmV0dXJuIDI9PT12P2k6bnVsbH0sc2V0UmVx
dWVzdEhlYWRlcjpmdW5jdGlvbihlLHQpe3ZhciBuPWUudG9Mb3dlckNhc2UoKTtyZXR1cm4gdnx8
KGU9eVtuXT15W25dfHxlLG1bZV09dCksdGhpc30sb3ZlcnJpZGVNaW1lVHlwZTpmdW5jdGlvbihl
KXtyZXR1cm4gdnx8KGMubWltZVR5cGU9ZSksdGhpc30sc3RhdHVzQ29kZTpmdW5jdGlvbihlKXt2
YXIgdDtpZihlKWlmKDI+dilmb3IodCBpbiBlKWdbdF09W2dbdF0sZVt0XV07ZWxzZSBULmFsd2F5
cyhlW1Quc3RhdHVzXSk7cmV0dXJuIHRoaXN9LGFib3J0OmZ1bmN0aW9uKGUpe3ZhciB0PWV8fGI7
cmV0dXJuIG4mJm4uYWJvcnQodCksaygwLHQpLHRoaXN9fTtpZihoLnByb21pc2UoVCkuY29tcGxl
dGU9ZC5hZGQsVC5zdWNjZXNzPVQuZG9uZSxULmVycm9yPVQuZmFpbCxjLnVybD0oKGV8fGMudXJs
fHxVdCkrIiIpLnJlcGxhY2UoR3QsIiIpLnJlcGxhY2UoZW4sWHRbMV0rIi8vIiksYy50eXBlPXQu
bWV0aG9kfHx0LnR5cGV8fGMubWV0aG9kfHxjLnR5cGUsYy5kYXRhVHlwZXM9eC50cmltKGMuZGF0
YVR5cGV8fCIqIikudG9Mb3dlckNhc2UoKS5tYXRjaCh3KXx8WyIiXSxudWxsPT1jLmNyb3NzRG9t
YWluJiYoYT10bi5leGVjKGMudXJsLnRvTG93ZXJDYXNlKCkpLGMuY3Jvc3NEb21haW49ISghYXx8
YVsxXT09PVh0WzFdJiZhWzJdPT09WHRbMl0mJihhWzNdfHwoImh0dHA6Ij09PWFbMV0/IjgwIjoi
NDQzIikpPT09KFh0WzNdfHwoImh0dHA6Ij09PVh0WzFdPyI4MCI6IjQ0MyIpKSkpLGMuZGF0YSYm
Yy5wcm9jZXNzRGF0YSYmInN0cmluZyIhPXR5cGVvZiBjLmRhdGEmJihjLmRhdGE9eC5wYXJhbShj
LmRhdGEsYy50cmFkaXRpb25hbCkpLGxuKHJuLGMsdCxUKSwyPT09dilyZXR1cm4gVDt1PWMuZ2xv
YmFsLHUmJjA9PT14LmFjdGl2ZSsrJiZ4LmV2ZW50LnRyaWdnZXIoImFqYXhTdGFydCIpLGMudHlw
ZT1jLnR5cGUudG9VcHBlckNhc2UoKSxjLmhhc0NvbnRlbnQ9IVp0LnRlc3QoYy50eXBlKSxyPWMu
dXJsLGMuaGFzQ29udGVudHx8KGMuZGF0YSYmKHI9Yy51cmwrPShWdC50ZXN0KHIpPyImIjoiPyIp
K2MuZGF0YSxkZWxldGUgYy5kYXRhKSxjLmNhY2hlPT09ITEmJihjLnVybD1KdC50ZXN0KHIpP3Iu
cmVwbGFjZShKdCwiJDFfPSIrWXQrKyk6cisoVnQudGVzdChyKT8iJiI6Ij8iKSsiXz0iK1l0Kysp
KSxjLmlmTW9kaWZpZWQmJih4Lmxhc3RNb2RpZmllZFtyXSYmVC5zZXRSZXF1ZXN0SGVhZGVyKCJJ
Zi1Nb2RpZmllZC1TaW5jZSIseC5sYXN0TW9kaWZpZWRbcl0pLHguZXRhZ1tyXSYmVC5zZXRSZXF1
ZXN0SGVhZGVyKCJJZi1Ob25lLU1hdGNoIix4LmV0YWdbcl0pKSwoYy5kYXRhJiZjLmhhc0NvbnRl
bnQmJmMuY29udGVudFR5cGUhPT0hMXx8dC5jb250ZW50VHlwZSkmJlQuc2V0UmVxdWVzdEhlYWRl
cigiQ29udGVudC1UeXBlIixjLmNvbnRlbnRUeXBlKSxULnNldFJlcXVlc3RIZWFkZXIoIkFjY2Vw
dCIsYy5kYXRhVHlwZXNbMF0mJmMuYWNjZXB0c1tjLmRhdGFUeXBlc1swXV0/Yy5hY2NlcHRzW2Mu
ZGF0YVR5cGVzWzBdXSsoIioiIT09Yy5kYXRhVHlwZXNbMF0/IiwgIitzbisiOyBxPTAuMDEiOiIi
KTpjLmFjY2VwdHNbIioiXSk7Zm9yKGwgaW4gYy5oZWFkZXJzKVQuc2V0UmVxdWVzdEhlYWRlcihs
LGMuaGVhZGVyc1tsXSk7aWYoYy5iZWZvcmVTZW5kJiYoYy5iZWZvcmVTZW5kLmNhbGwocCxULGMp
PT09ITF8fDI9PT12KSlyZXR1cm4gVC5hYm9ydCgpO2I9ImFib3J0Ijtmb3IobCBpbntzdWNjZXNz
OjEsZXJyb3I6MSxjb21wbGV0ZToxfSlUW2xdKGNbbF0pO2lmKG49bG4ob24sYyx0LFQpKXtULnJl
YWR5U3RhdGU9MSx1JiZmLnRyaWdnZXIoImFqYXhTZW5kIixbVCxjXSksYy5hc3luYyYmYy50aW1l
b3V0PjAmJihzPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtULmFib3J0KCJ0aW1lb3V0Iil9LGMudGlt
ZW91dCkpO3RyeXt2PTEsbi5zZW5kKG0sayl9Y2F0Y2goQyl7aWYoISgyPnYpKXRocm93IEM7aygt
MSxDKX19ZWxzZSBrKC0xLCJObyBUcmFuc3BvcnQiKTtmdW5jdGlvbiBrKGUsdCxvLGEpe3ZhciBs
LG0seSxiLHcsQz10OzIhPT12JiYodj0yLHMmJmNsZWFyVGltZW91dChzKSxuPXVuZGVmaW5lZCxp
PWF8fCIiLFQucmVhZHlTdGF0ZT1lPjA/NDowLGw9ZT49MjAwJiYzMDA+ZXx8MzA0PT09ZSxvJiYo
Yj1wbihjLFQsbykpLGI9Zm4oYyxiLFQsbCksbD8oYy5pZk1vZGlmaWVkJiYodz1ULmdldFJlc3Bv
bnNlSGVhZGVyKCJMYXN0LU1vZGlmaWVkIiksdyYmKHgubGFzdE1vZGlmaWVkW3JdPXcpLHc9VC5n
ZXRSZXNwb25zZUhlYWRlcigiZXRhZyIpLHcmJih4LmV0YWdbcl09dykpLDIwND09PWV8fCJIRUFE
Ij09PWMudHlwZT9DPSJub2NvbnRlbnQiOjMwND09PWU/Qz0ibm90bW9kaWZpZWQiOihDPWIuc3Rh
dGUsbT1iLmRhdGEseT1iLmVycm9yLGw9IXkpKTooeT1DLChlfHwhQykmJihDPSJlcnJvciIsMD5l
JiYoZT0wKSkpLFQuc3RhdHVzPWUsVC5zdGF0dXNUZXh0PSh0fHxDKSsiIixsP2gucmVzb2x2ZVdp
dGgocCxbbSxDLFRdKTpoLnJlamVjdFdpdGgocCxbVCxDLHldKSxULnN0YXR1c0NvZGUoZyksZz11
bmRlZmluZWQsdSYmZi50cmlnZ2VyKGw/ImFqYXhTdWNjZXNzIjoiYWpheEVycm9yIixbVCxjLGw/
bTp5XSksZC5maXJlV2l0aChwLFtULENdKSx1JiYoZi50cmlnZ2VyKCJhamF4Q29tcGxldGUiLFtU
LGNdKSwtLXguYWN0aXZlfHx4LmV2ZW50LnRyaWdnZXIoImFqYXhTdG9wIikpKX1yZXR1cm4gVH0s
Z2V0SlNPTjpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHguZ2V0KGUsdCxuLCJqc29uIil9LGdldFNj
cmlwdDpmdW5jdGlvbihlLHQpe3JldHVybiB4LmdldChlLHVuZGVmaW5lZCx0LCJzY3JpcHQiKX19
KSx4LmVhY2goWyJnZXQiLCJwb3N0Il0sZnVuY3Rpb24oZSx0KXt4W3RdPWZ1bmN0aW9uKGUsbixy
LGkpe3JldHVybiB4LmlzRnVuY3Rpb24obikmJihpPWl8fHIscj1uLG49dW5kZWZpbmVkKSx4LmFq
YXgoe3VybDplLHR5cGU6dCxkYXRhVHlwZTppLGRhdGE6bixzdWNjZXNzOnJ9KX19KTtmdW5jdGlv
biBwbihlLHQsbil7dmFyIHIsaSxvLHMsYT1lLmNvbnRlbnRzLHU9ZS5kYXRhVHlwZXM7d2hpbGUo
IioiPT09dVswXSl1LnNoaWZ0KCkscj09PXVuZGVmaW5lZCYmKHI9ZS5taW1lVHlwZXx8dC5nZXRS
ZXNwb25zZUhlYWRlcigiQ29udGVudC1UeXBlIikpO2lmKHIpZm9yKGkgaW4gYSlpZihhW2ldJiZh
W2ldLnRlc3Qocikpe3UudW5zaGlmdChpKTticmVha31pZih1WzBdaW4gbilvPXVbMF07ZWxzZXtm
b3IoaSBpbiBuKXtpZighdVswXXx8ZS5jb252ZXJ0ZXJzW2krIiAiK3VbMF1dKXtvPWk7YnJlYWt9
c3x8KHM9aSl9bz1vfHxzfXJldHVybiBvPyhvIT09dVswXSYmdS51bnNoaWZ0KG8pLG5bb10pOnVu
ZGVmaW5lZH1mdW5jdGlvbiBmbihlLHQsbixyKXt2YXIgaSxvLHMsYSx1LGw9e30sYz1lLmRhdGFU
eXBlcy5zbGljZSgpO2lmKGNbMV0pZm9yKHMgaW4gZS5jb252ZXJ0ZXJzKWxbcy50b0xvd2VyQ2Fz
ZSgpXT1lLmNvbnZlcnRlcnNbc107bz1jLnNoaWZ0KCk7d2hpbGUobylpZihlLnJlc3BvbnNlRmll
bGRzW29dJiYobltlLnJlc3BvbnNlRmllbGRzW29dXT10KSwhdSYmciYmZS5kYXRhRmlsdGVyJiYo
dD1lLmRhdGFGaWx0ZXIodCxlLmRhdGFUeXBlKSksdT1vLG89Yy5zaGlmdCgpKWlmKCIqIj09PW8p
bz11O2Vsc2UgaWYoIioiIT09dSYmdSE9PW8pe2lmKHM9bFt1KyIgIitvXXx8bFsiKiAiK29dLCFz
KWZvcihpIGluIGwpaWYoYT1pLnNwbGl0KCIgIiksYVsxXT09PW8mJihzPWxbdSsiICIrYVswXV18
fGxbIiogIithWzBdXSkpe3M9PT0hMD9zPWxbaV06bFtpXSE9PSEwJiYobz1hWzBdLGMudW5zaGlm
dChhWzFdKSk7YnJlYWt9aWYocyE9PSEwKWlmKHMmJmVbInRocm93cyJdKXQ9cyh0KTtlbHNlIHRy
eXt0PXModCl9Y2F0Y2gocCl7cmV0dXJue3N0YXRlOiJwYXJzZXJlcnJvciIsZXJyb3I6cz9wOiJO
byBjb252ZXJzaW9uIGZyb20gIit1KyIgdG8gIitvfX19cmV0dXJue3N0YXRlOiJzdWNjZXNzIixk
YXRhOnR9fXguYWpheFNldHVwKHthY2NlcHRzOntzY3JpcHQ6InRleHQvamF2YXNjcmlwdCwgYXBw
bGljYXRpb24vamF2YXNjcmlwdCwgYXBwbGljYXRpb24vZWNtYXNjcmlwdCwgYXBwbGljYXRpb24v
eC1lY21hc2NyaXB0In0sY29udGVudHM6e3NjcmlwdDovKD86amF2YXxlY21hKXNjcmlwdC99LGNv
bnZlcnRlcnM6eyJ0ZXh0IHNjcmlwdCI6ZnVuY3Rpb24oZSl7cmV0dXJuIHguZ2xvYmFsRXZhbChl
KSxlfX19KSx4LmFqYXhQcmVmaWx0ZXIoInNjcmlwdCIsZnVuY3Rpb24oZSl7ZS5jYWNoZT09PXVu
ZGVmaW5lZCYmKGUuY2FjaGU9ITEpLGUuY3Jvc3NEb21haW4mJihlLnR5cGU9IkdFVCIpfSkseC5h
amF4VHJhbnNwb3J0KCJzY3JpcHQiLGZ1bmN0aW9uKGUpe2lmKGUuY3Jvc3NEb21haW4pe3ZhciB0
LG47cmV0dXJue3NlbmQ6ZnVuY3Rpb24ocixpKXt0PXgoIjxzY3JpcHQ+IikucHJvcCh7YXN5bmM6
ITAsY2hhcnNldDplLnNjcmlwdENoYXJzZXQsc3JjOmUudXJsfSkub24oImxvYWQgZXJyb3IiLG49
ZnVuY3Rpb24oZSl7dC5yZW1vdmUoKSxuPW51bGwsZSYmaSgiZXJyb3IiPT09ZS50eXBlPzQwNDoy
MDAsZS50eXBlKX0pLG8uaGVhZC5hcHBlbmRDaGlsZCh0WzBdKX0sYWJvcnQ6ZnVuY3Rpb24oKXtu
JiZuKCl9fX19KTt2YXIgaG49W10sZG49Lyg9KVw/KD89JnwkKXxcP1w/Lzt4LmFqYXhTZXR1cCh7
anNvbnA6ImNhbGxiYWNrIixqc29ucENhbGxiYWNrOmZ1bmN0aW9uKCl7dmFyIGU9aG4ucG9wKCl8
fHguZXhwYW5kbysiXyIrWXQrKztyZXR1cm4gdGhpc1tlXT0hMCxlfX0pLHguYWpheFByZWZpbHRl
cigianNvbiBqc29ucCIsZnVuY3Rpb24odCxuLHIpe3ZhciBpLG8scyxhPXQuanNvbnAhPT0hMSYm
KGRuLnRlc3QodC51cmwpPyJ1cmwiOiJzdHJpbmciPT10eXBlb2YgdC5kYXRhJiYhKHQuY29udGVu
dFR5cGV8fCIiKS5pbmRleE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKSYm
ZG4udGVzdCh0LmRhdGEpJiYiZGF0YSIpO3JldHVybiBhfHwianNvbnAiPT09dC5kYXRhVHlwZXNb
MF0/KGk9dC5qc29ucENhbGxiYWNrPXguaXNGdW5jdGlvbih0Lmpzb25wQ2FsbGJhY2spP3QuanNv
bnBDYWxsYmFjaygpOnQuanNvbnBDYWxsYmFjayxhP3RbYV09dFthXS5yZXBsYWNlKGRuLCIkMSIr
aSk6dC5qc29ucCE9PSExJiYodC51cmwrPShWdC50ZXN0KHQudXJsKT8iJiI6Ij8iKSt0Lmpzb25w
KyI9IitpKSx0LmNvbnZlcnRlcnNbInNjcmlwdCBqc29uIl09ZnVuY3Rpb24oKXtyZXR1cm4gc3x8
eC5lcnJvcihpKyIgd2FzIG5vdCBjYWxsZWQiKSxzWzBdfSx0LmRhdGFUeXBlc1swXT0ianNvbiIs
bz1lW2ldLGVbaV09ZnVuY3Rpb24oKXtzPWFyZ3VtZW50c30sci5hbHdheXMoZnVuY3Rpb24oKXtl
W2ldPW8sdFtpXSYmKHQuanNvbnBDYWxsYmFjaz1uLmpzb25wQ2FsbGJhY2ssaG4ucHVzaChpKSks
cyYmeC5pc0Z1bmN0aW9uKG8pJiZvKHNbMF0pLHM9bz11bmRlZmluZWR9KSwic2NyaXB0Iik6dW5k
ZWZpbmVkfSkseC5hamF4U2V0dGluZ3MueGhyPWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBuZXcgWE1M
SHR0cFJlcXVlc3R9Y2F0Y2goZSl7fX07dmFyIGduPXguYWpheFNldHRpbmdzLnhocigpLG1uPXsw
OjIwMCwxMjIzOjIwNH0seW49MCx2bj17fTtlLkFjdGl2ZVhPYmplY3QmJngoZSkub24oInVubG9h
ZCIsZnVuY3Rpb24oKXtmb3IodmFyIGUgaW4gdm4pdm5bZV0oKTt2bj11bmRlZmluZWR9KSx4LnN1
cHBvcnQuY29ycz0hIWduJiYid2l0aENyZWRlbnRpYWxzImluIGduLHguc3VwcG9ydC5hamF4PWdu
PSEhZ24seC5hamF4VHJhbnNwb3J0KGZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiB4LnN1cHBvcnQu
Y29yc3x8Z24mJiFlLmNyb3NzRG9tYWluP3tzZW5kOmZ1bmN0aW9uKG4scil7dmFyIGksbyxzPWUu
eGhyKCk7aWYocy5vcGVuKGUudHlwZSxlLnVybCxlLmFzeW5jLGUudXNlcm5hbWUsZS5wYXNzd29y
ZCksZS54aHJGaWVsZHMpZm9yKGkgaW4gZS54aHJGaWVsZHMpc1tpXT1lLnhockZpZWxkc1tpXTtl
Lm1pbWVUeXBlJiZzLm92ZXJyaWRlTWltZVR5cGUmJnMub3ZlcnJpZGVNaW1lVHlwZShlLm1pbWVU
eXBlKSxlLmNyb3NzRG9tYWlufHxuWyJYLVJlcXVlc3RlZC1XaXRoIl18fChuWyJYLVJlcXVlc3Rl
ZC1XaXRoIl09IlhNTEh0dHBSZXF1ZXN0Iik7Zm9yKGkgaW4gbilzLnNldFJlcXVlc3RIZWFkZXIo
aSxuW2ldKTt0PWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3QmJihkZWxldGUgdm5bb10s
dD1zLm9ubG9hZD1zLm9uZXJyb3I9bnVsbCwiYWJvcnQiPT09ZT9zLmFib3J0KCk6ImVycm9yIj09
PWU/cihzLnN0YXR1c3x8NDA0LHMuc3RhdHVzVGV4dCk6cihtbltzLnN0YXR1c118fHMuc3RhdHVz
LHMuc3RhdHVzVGV4dCwic3RyaW5nIj09dHlwZW9mIHMucmVzcG9uc2VUZXh0P3t0ZXh0OnMucmVz
cG9uc2VUZXh0fTp1bmRlZmluZWQscy5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSkpfX0scy5vbmxv
YWQ9dCgpLHMub25lcnJvcj10KCJlcnJvciIpLHQ9dm5bbz15bisrXT10KCJhYm9ydCIpLHMuc2Vu
ZChlLmhhc0NvbnRlbnQmJmUuZGF0YXx8bnVsbCl9LGFib3J0OmZ1bmN0aW9uKCl7dCYmdCgpfX06
dW5kZWZpbmVkfSk7dmFyIHhuLGJuLHduPS9eKD86dG9nZ2xlfHNob3d8aGlkZSkkLyxUbj1SZWdF
eHAoIl4oPzooWystXSk9fCkoIitiKyIpKFthLXolXSopJCIsImkiKSxDbj0vcXVldWVIb29rcyQv
LGtuPVtBbl0sTm49eyIqIjpbZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmNyZWF0ZVR3ZWVuKGUs
dCkscj1uLmN1cigpLGk9VG4uZXhlYyh0KSxvPWkmJmlbM118fCh4LmNzc051bWJlcltlXT8iIjoi
cHgiKSxzPSh4LmNzc051bWJlcltlXXx8InB4IiE9PW8mJityKSYmVG4uZXhlYyh4LmNzcyhuLmVs
ZW0sZSkpLGE9MSx1PTIwO2lmKHMmJnNbM10hPT1vKXtvPW98fHNbM10saT1pfHxbXSxzPStyfHwx
O2RvIGE9YXx8Ii41IixzLz1hLHguc3R5bGUobi5lbGVtLGUscytvKTt3aGlsZShhIT09KGE9bi5j
dXIoKS9yKSYmMSE9PWEmJi0tdSl9cmV0dXJuIGkmJihzPW4uc3RhcnQ9K3N8fCtyfHwwLG4udW5p
dD1vLG4uZW5kPWlbMV0/cysoaVsxXSsxKSppWzJdOitpWzJdKSxufV19O2Z1bmN0aW9uIEVuKCl7
cmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24oKXt4bj11bmRlZmluZWR9KSx4bj14Lm5vdygpfWZ1
bmN0aW9uIFNuKGUsdCxuKXt2YXIgcixpPShOblt0XXx8W10pLmNvbmNhdChOblsiKiJdKSxvPTAs
cz1pLmxlbmd0aDtmb3IoO3M+bztvKyspaWYocj1pW29dLmNhbGwobix0LGUpKXJldHVybiByfWZ1
bmN0aW9uIGpuKGUsdCxuKXt2YXIgcixpLG89MCxzPWtuLmxlbmd0aCxhPXguRGVmZXJyZWQoKS5h
bHdheXMoZnVuY3Rpb24oKXtkZWxldGUgdS5lbGVtfSksdT1mdW5jdGlvbigpe2lmKGkpcmV0dXJu
ITE7dmFyIHQ9eG58fEVuKCksbj1NYXRoLm1heCgwLGwuc3RhcnRUaW1lK2wuZHVyYXRpb24tdCks
cj1uL2wuZHVyYXRpb258fDAsbz0xLXIscz0wLHU9bC50d2VlbnMubGVuZ3RoO2Zvcig7dT5zO3Mr
KylsLnR3ZWVuc1tzXS5ydW4obyk7cmV0dXJuIGEubm90aWZ5V2l0aChlLFtsLG8sbl0pLDE+byYm
dT9uOihhLnJlc29sdmVXaXRoKGUsW2xdKSwhMSl9LGw9YS5wcm9taXNlKHtlbGVtOmUscHJvcHM6
eC5leHRlbmQoe30sdCksb3B0czp4LmV4dGVuZCghMCx7c3BlY2lhbEVhc2luZzp7fX0sbiksb3Jp
Z2luYWxQcm9wZXJ0aWVzOnQsb3JpZ2luYWxPcHRpb25zOm4sc3RhcnRUaW1lOnhufHxFbigpLGR1
cmF0aW9uOm4uZHVyYXRpb24sdHdlZW5zOltdLGNyZWF0ZVR3ZWVuOmZ1bmN0aW9uKHQsbil7dmFy
IHI9eC5Ud2VlbihlLGwub3B0cyx0LG4sbC5vcHRzLnNwZWNpYWxFYXNpbmdbdF18fGwub3B0cy5l
YXNpbmcpO3JldHVybiBsLnR3ZWVucy5wdXNoKHIpLHJ9LHN0b3A6ZnVuY3Rpb24odCl7dmFyIG49
MCxyPXQ/bC50d2VlbnMubGVuZ3RoOjA7aWYoaSlyZXR1cm4gdGhpcztmb3IoaT0hMDtyPm47bisr
KWwudHdlZW5zW25dLnJ1bigxKTtyZXR1cm4gdD9hLnJlc29sdmVXaXRoKGUsW2wsdF0pOmEucmVq
ZWN0V2l0aChlLFtsLHRdKSx0aGlzfX0pLGM9bC5wcm9wcztmb3IoRG4oYyxsLm9wdHMuc3BlY2lh
bEVhc2luZyk7cz5vO28rKylpZihyPWtuW29dLmNhbGwobCxlLGMsbC5vcHRzKSlyZXR1cm4gcjty
ZXR1cm4geC5tYXAoYyxTbixsKSx4LmlzRnVuY3Rpb24obC5vcHRzLnN0YXJ0KSYmbC5vcHRzLnN0
YXJ0LmNhbGwoZSxsKSx4LmZ4LnRpbWVyKHguZXh0ZW5kKHUse2VsZW06ZSxhbmltOmwscXVldWU6
bC5vcHRzLnF1ZXVlfSkpLGwucHJvZ3Jlc3MobC5vcHRzLnByb2dyZXNzKS5kb25lKGwub3B0cy5k
b25lLGwub3B0cy5jb21wbGV0ZSkuZmFpbChsLm9wdHMuZmFpbCkuYWx3YXlzKGwub3B0cy5hbHdh
eXMpfWZ1bmN0aW9uIERuKGUsdCl7dmFyIG4scixpLG8scztmb3IobiBpbiBlKWlmKHI9eC5jYW1l
bENhc2UobiksaT10W3JdLG89ZVtuXSx4LmlzQXJyYXkobykmJihpPW9bMV0sbz1lW25dPW9bMF0p
LG4hPT1yJiYoZVtyXT1vLGRlbGV0ZSBlW25dKSxzPXguY3NzSG9va3Nbcl0scyYmImV4cGFuZCJp
biBzKXtvPXMuZXhwYW5kKG8pLGRlbGV0ZSBlW3JdO2ZvcihuIGluIG8pbiBpbiBlfHwoZVtuXT1v
W25dLHRbbl09aSl9ZWxzZSB0W3JdPWl9eC5BbmltYXRpb249eC5leHRlbmQoam4se3R3ZWVuZXI6
ZnVuY3Rpb24oZSx0KXt4LmlzRnVuY3Rpb24oZSk/KHQ9ZSxlPVsiKiJdKTplPWUuc3BsaXQoIiAi
KTt2YXIgbixyPTAsaT1lLmxlbmd0aDtmb3IoO2k+cjtyKyspbj1lW3JdLE5uW25dPU5uW25dfHxb
XSxObltuXS51bnNoaWZ0KHQpfSxwcmVmaWx0ZXI6ZnVuY3Rpb24oZSx0KXt0P2tuLnVuc2hpZnQo
ZSk6a24ucHVzaChlKX19KTtmdW5jdGlvbiBBbihlLHQsbil7dmFyIHIsaSxvLHMsYSx1LGw9dGhp
cyxjPXt9LHA9ZS5zdHlsZSxmPWUubm9kZVR5cGUmJkx0KGUpLGg9cS5nZXQoZSwiZnhzaG93Iik7
bi5xdWV1ZXx8KGE9eC5fcXVldWVIb29rcyhlLCJmeCIpLG51bGw9PWEudW5xdWV1ZWQmJihhLnVu
cXVldWVkPTAsdT1hLmVtcHR5LmZpcmUsYS5lbXB0eS5maXJlPWZ1bmN0aW9uKCl7YS51bnF1ZXVl
ZHx8dSgpfSksYS51bnF1ZXVlZCsrLGwuYWx3YXlzKGZ1bmN0aW9uKCl7bC5hbHdheXMoZnVuY3Rp
b24oKXthLnVucXVldWVkLS0seC5xdWV1ZShlLCJmeCIpLmxlbmd0aHx8YS5lbXB0eS5maXJlKCl9
KX0pKSwxPT09ZS5ub2RlVHlwZSYmKCJoZWlnaHQiaW4gdHx8IndpZHRoImluIHQpJiYobi5vdmVy
Zmxvdz1bcC5vdmVyZmxvdyxwLm92ZXJmbG93WCxwLm92ZXJmbG93WV0sImlubGluZSI9PT14LmNz
cyhlLCJkaXNwbGF5IikmJiJub25lIj09PXguY3NzKGUsImZsb2F0IikmJihwLmRpc3BsYXk9Imlu
bGluZS1ibG9jayIpKSxuLm92ZXJmbG93JiYocC5vdmVyZmxvdz0iaGlkZGVuIixsLmFsd2F5cyhm
dW5jdGlvbigpe3Aub3ZlcmZsb3c9bi5vdmVyZmxvd1swXSxwLm92ZXJmbG93WD1uLm92ZXJmbG93
WzFdLHAub3ZlcmZsb3dZPW4ub3ZlcmZsb3dbMl19KSk7Zm9yKHIgaW4gdClpZihpPXRbcl0sd24u
ZXhlYyhpKSl7aWYoZGVsZXRlIHRbcl0sbz1vfHwidG9nZ2xlIj09PWksaT09PShmPyJoaWRlIjoi
c2hvdyIpKXtpZigic2hvdyIhPT1pfHwhaHx8aFtyXT09PXVuZGVmaW5lZCljb250aW51ZTtmPSEw
fWNbcl09aCYmaFtyXXx8eC5zdHlsZShlLHIpfWlmKCF4LmlzRW1wdHlPYmplY3QoYykpe2g/Imhp
ZGRlbiJpbiBoJiYoZj1oLmhpZGRlbik6aD1xLmFjY2VzcyhlLCJmeHNob3ciLHt9KSxvJiYoaC5o
aWRkZW49IWYpLGY/eChlKS5zaG93KCk6bC5kb25lKGZ1bmN0aW9uKCl7eChlKS5oaWRlKCl9KSxs
LmRvbmUoZnVuY3Rpb24oKXt2YXIgdDtxLnJlbW92ZShlLCJmeHNob3ciKTtmb3IodCBpbiBjKXgu
c3R5bGUoZSx0LGNbdF0pfSk7Zm9yKHIgaW4gYylzPVNuKGY/aFtyXTowLHIsbCksciBpbiBofHwo
aFtyXT1zLnN0YXJ0LGYmJihzLmVuZD1zLnN0YXJ0LHMuc3RhcnQ9IndpZHRoIj09PXJ8fCJoZWln
aHQiPT09cj8xOjApKX19ZnVuY3Rpb24gTG4oZSx0LG4scixpKXtyZXR1cm4gbmV3IExuLnByb3Rv
dHlwZS5pbml0KGUsdCxuLHIsaSl9eC5Ud2Vlbj1MbixMbi5wcm90b3R5cGU9e2NvbnN0cnVjdG9y
OkxuLGluaXQ6ZnVuY3Rpb24oZSx0LG4scixpLG8pe3RoaXMuZWxlbT1lLHRoaXMucHJvcD1uLHRo
aXMuZWFzaW5nPWl8fCJzd2luZyIsdGhpcy5vcHRpb25zPXQsdGhpcy5zdGFydD10aGlzLm5vdz10
aGlzLmN1cigpLHRoaXMuZW5kPXIsdGhpcy51bml0PW98fCh4LmNzc051bWJlcltuXT8iIjoicHgi
KX0sY3VyOmZ1bmN0aW9uKCl7dmFyIGU9TG4ucHJvcEhvb2tzW3RoaXMucHJvcF07cmV0dXJuIGUm
JmUuZ2V0P2UuZ2V0KHRoaXMpOkxuLnByb3BIb29rcy5fZGVmYXVsdC5nZXQodGhpcyl9LHJ1bjpm
dW5jdGlvbihlKXt2YXIgdCxuPUxuLnByb3BIb29rc1t0aGlzLnByb3BdO3JldHVybiB0aGlzLnBv
cz10PXRoaXMub3B0aW9ucy5kdXJhdGlvbj94LmVhc2luZ1t0aGlzLmVhc2luZ10oZSx0aGlzLm9w
dGlvbnMuZHVyYXRpb24qZSwwLDEsdGhpcy5vcHRpb25zLmR1cmF0aW9uKTplLHRoaXMubm93PSh0
aGlzLmVuZC10aGlzLnN0YXJ0KSp0K3RoaXMuc3RhcnQsdGhpcy5vcHRpb25zLnN0ZXAmJnRoaXMu
b3B0aW9ucy5zdGVwLmNhbGwodGhpcy5lbGVtLHRoaXMubm93LHRoaXMpLG4mJm4uc2V0P24uc2V0
KHRoaXMpOkxuLnByb3BIb29rcy5fZGVmYXVsdC5zZXQodGhpcyksdGhpc319LExuLnByb3RvdHlw
ZS5pbml0LnByb3RvdHlwZT1Mbi5wcm90b3R5cGUsTG4ucHJvcEhvb2tzPXtfZGVmYXVsdDp7Z2V0
OmZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiBudWxsPT1lLmVsZW1bZS5wcm9wXXx8ZS5lbGVtLnN0
eWxlJiZudWxsIT1lLmVsZW0uc3R5bGVbZS5wcm9wXT8odD14LmNzcyhlLmVsZW0sZS5wcm9wLCIi
KSx0JiYiYXV0byIhPT10P3Q6MCk6ZS5lbGVtW2UucHJvcF19LHNldDpmdW5jdGlvbihlKXt4LmZ4
LnN0ZXBbZS5wcm9wXT94LmZ4LnN0ZXBbZS5wcm9wXShlKTplLmVsZW0uc3R5bGUmJihudWxsIT1l
LmVsZW0uc3R5bGVbeC5jc3NQcm9wc1tlLnByb3BdXXx8eC5jc3NIb29rc1tlLnByb3BdKT94LnN0
eWxlKGUuZWxlbSxlLnByb3AsZS5ub3crZS51bml0KTplLmVsZW1bZS5wcm9wXT1lLm5vd319fSxM
bi5wcm9wSG9va3Muc2Nyb2xsVG9wPUxuLnByb3BIb29rcy5zY3JvbGxMZWZ0PXtzZXQ6ZnVuY3Rp
b24oZSl7ZS5lbGVtLm5vZGVUeXBlJiZlLmVsZW0ucGFyZW50Tm9kZSYmKGUuZWxlbVtlLnByb3Bd
PWUubm93KX19LHguZWFjaChbInRvZ2dsZSIsInNob3ciLCJoaWRlIl0sZnVuY3Rpb24oZSx0KXt2
YXIgbj14LmZuW3RdO3guZm5bdF09ZnVuY3Rpb24oZSxyLGkpe3JldHVybiBudWxsPT1lfHwiYm9v
bGVhbiI9PXR5cGVvZiBlP24uYXBwbHkodGhpcyxhcmd1bWVudHMpOnRoaXMuYW5pbWF0ZShxbih0
LCEwKSxlLHIsaSl9fSkseC5mbi5leHRlbmQoe2ZhZGVUbzpmdW5jdGlvbihlLHQsbixyKXtyZXR1
cm4gdGhpcy5maWx0ZXIoTHQpLmNzcygib3BhY2l0eSIsMCkuc2hvdygpLmVuZCgpLmFuaW1hdGUo
e29wYWNpdHk6dH0sZSxuLHIpfSxhbmltYXRlOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPXguaXNF
bXB0eU9iamVjdChlKSxvPXguc3BlZWQodCxuLHIpLHM9ZnVuY3Rpb24oKXt2YXIgdD1qbih0aGlz
LHguZXh0ZW5kKHt9LGUpLG8pOyhpfHxxLmdldCh0aGlzLCJmaW5pc2giKSkmJnQuc3RvcCghMCl9
O3JldHVybiBzLmZpbmlzaD1zLGl8fG8ucXVldWU9PT0hMT90aGlzLmVhY2gocyk6dGhpcy5xdWV1
ZShvLnF1ZXVlLHMpfSxzdG9wOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1mdW5jdGlvbihlKXt2YXIg
dD1lLnN0b3A7ZGVsZXRlIGUuc3RvcCx0KG4pfTtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGUmJihu
PXQsdD1lLGU9dW5kZWZpbmVkKSx0JiZlIT09ITEmJnRoaXMucXVldWUoZXx8ImZ4IixbXSksdGhp
cy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9ITAsaT1udWxsIT1lJiZlKyJxdWV1ZUhvb2tzIixvPXgu
dGltZXJzLHM9cS5nZXQodGhpcyk7aWYoaSlzW2ldJiZzW2ldLnN0b3AmJnIoc1tpXSk7ZWxzZSBm
b3IoaSBpbiBzKXNbaV0mJnNbaV0uc3RvcCYmQ24udGVzdChpKSYmcihzW2ldKTtmb3IoaT1vLmxl
bmd0aDtpLS07KW9baV0uZWxlbSE9PXRoaXN8fG51bGwhPWUmJm9baV0ucXVldWUhPT1lfHwob1tp
XS5hbmltLnN0b3AobiksdD0hMSxvLnNwbGljZShpLDEpKTsodHx8IW4pJiZ4LmRlcXVldWUodGhp
cyxlKX0pfSxmaW5pc2g6ZnVuY3Rpb24oZSl7cmV0dXJuIGUhPT0hMSYmKGU9ZXx8ImZ4IiksdGhp
cy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQsbj1xLmdldCh0aGlzKSxyPW5bZSsicXVldWUiXSxpPW5b
ZSsicXVldWVIb29rcyJdLG89eC50aW1lcnMscz1yP3IubGVuZ3RoOjA7Zm9yKG4uZmluaXNoPSEw
LHgucXVldWUodGhpcyxlLFtdKSxpJiZpLnN0b3AmJmkuc3RvcC5jYWxsKHRoaXMsITApLHQ9by5s
ZW5ndGg7dC0tOylvW3RdLmVsZW09PT10aGlzJiZvW3RdLnF1ZXVlPT09ZSYmKG9bdF0uYW5pbS5z
dG9wKCEwKSxvLnNwbGljZSh0LDEpKTtmb3IodD0wO3M+dDt0Kyspclt0XSYmclt0XS5maW5pc2gm
JnJbdF0uZmluaXNoLmNhbGwodGhpcyk7ZGVsZXRlIG4uZmluaXNofSl9fSk7ZnVuY3Rpb24gcW4o
ZSx0KXt2YXIgbixyPXtoZWlnaHQ6ZX0saT0wO2Zvcih0PXQ/MTowOzQ+aTtpKz0yLXQpbj1qdFtp
XSxyWyJtYXJnaW4iK25dPXJbInBhZGRpbmciK25dPWU7cmV0dXJuIHQmJihyLm9wYWNpdHk9ci53
aWR0aD1lKSxyfXguZWFjaCh7c2xpZGVEb3duOnFuKCJzaG93Iiksc2xpZGVVcDpxbigiaGlkZSIp
LHNsaWRlVG9nZ2xlOnFuKCJ0b2dnbGUiKSxmYWRlSW46e29wYWNpdHk6InNob3cifSxmYWRlT3V0
OntvcGFjaXR5OiJoaWRlIn0sZmFkZVRvZ2dsZTp7b3BhY2l0eToidG9nZ2xlIn19LGZ1bmN0aW9u
KGUsdCl7eC5mbltlXT1mdW5jdGlvbihlLG4scil7cmV0dXJuIHRoaXMuYW5pbWF0ZSh0LGUsbixy
KX19KSx4LnNwZWVkPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lJiYib2JqZWN0Ij09dHlwZW9mIGU/
eC5leHRlbmQoe30sZSk6e2NvbXBsZXRlOm58fCFuJiZ0fHx4LmlzRnVuY3Rpb24oZSkmJmUsZHVy
YXRpb246ZSxlYXNpbmc6biYmdHx8dCYmIXguaXNGdW5jdGlvbih0KSYmdH07cmV0dXJuIHIuZHVy
YXRpb249eC5meC5vZmY/MDoibnVtYmVyIj09dHlwZW9mIHIuZHVyYXRpb24/ci5kdXJhdGlvbjpy
LmR1cmF0aW9uIGluIHguZnguc3BlZWRzP3guZnguc3BlZWRzW3IuZHVyYXRpb25dOnguZnguc3Bl
ZWRzLl9kZWZhdWx0LChudWxsPT1yLnF1ZXVlfHxyLnF1ZXVlPT09ITApJiYoci5xdWV1ZT0iZngi
KSxyLm9sZD1yLmNvbXBsZXRlLHIuY29tcGxldGU9ZnVuY3Rpb24oKXt4LmlzRnVuY3Rpb24oci5v
bGQpJiZyLm9sZC5jYWxsKHRoaXMpLHIucXVldWUmJnguZGVxdWV1ZSh0aGlzLHIucXVldWUpfSxy
fSx4LmVhc2luZz17bGluZWFyOmZ1bmN0aW9uKGUpe3JldHVybiBlfSxzd2luZzpmdW5jdGlvbihl
KXtyZXR1cm4uNS1NYXRoLmNvcyhlKk1hdGguUEkpLzJ9fSx4LnRpbWVycz1bXSx4LmZ4PUxuLnBy
b3RvdHlwZS5pbml0LHguZngudGljaz1mdW5jdGlvbigpe3ZhciBlLHQ9eC50aW1lcnMsbj0wO2Zv
cih4bj14Lm5vdygpO3QubGVuZ3RoPm47bisrKWU9dFtuXSxlKCl8fHRbbl0hPT1lfHx0LnNwbGlj
ZShuLS0sMSk7dC5sZW5ndGh8fHguZnguc3RvcCgpLHhuPXVuZGVmaW5lZH0seC5meC50aW1lcj1m
dW5jdGlvbihlKXtlKCkmJngudGltZXJzLnB1c2goZSkmJnguZnguc3RhcnQoKX0seC5meC5pbnRl
cnZhbD0xMyx4LmZ4LnN0YXJ0PWZ1bmN0aW9uKCl7Ym58fChibj1zZXRJbnRlcnZhbCh4LmZ4LnRp
Y2sseC5meC5pbnRlcnZhbCkpfSx4LmZ4LnN0b3A9ZnVuY3Rpb24oKXtjbGVhckludGVydmFsKGJu
KSxibj1udWxsfSx4LmZ4LnNwZWVkcz17c2xvdzo2MDAsZmFzdDoyMDAsX2RlZmF1bHQ6NDAwfSx4
LmZ4LnN0ZXA9e30seC5leHByJiZ4LmV4cHIuZmlsdGVycyYmKHguZXhwci5maWx0ZXJzLmFuaW1h
dGVkPWZ1bmN0aW9uKGUpe3JldHVybiB4LmdyZXAoeC50aW1lcnMsZnVuY3Rpb24odCl7cmV0dXJu
IGU9PT10LmVsZW19KS5sZW5ndGh9KSx4LmZuLm9mZnNldD1mdW5jdGlvbihlKXtpZihhcmd1bWVu
dHMubGVuZ3RoKXJldHVybiBlPT09dW5kZWZpbmVkP3RoaXM6dGhpcy5lYWNoKGZ1bmN0aW9uKHQp
e3gub2Zmc2V0LnNldE9mZnNldCh0aGlzLGUsdCl9KTt2YXIgdCxuLGk9dGhpc1swXSxvPXt0b3A6
MCxsZWZ0OjB9LHM9aSYmaS5vd25lckRvY3VtZW50O2lmKHMpcmV0dXJuIHQ9cy5kb2N1bWVudEVs
ZW1lbnQseC5jb250YWlucyh0LGkpPyh0eXBlb2YgaS5nZXRCb3VuZGluZ0NsaWVudFJlY3QhPT1y
JiYobz1pLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKSxuPUhuKHMpLHt0b3A6by50b3Arbi5wYWdl
WU9mZnNldC10LmNsaWVudFRvcCxsZWZ0Om8ubGVmdCtuLnBhZ2VYT2Zmc2V0LXQuY2xpZW50TGVm
dH0pOm99LHgub2Zmc2V0PXtzZXRPZmZzZXQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbyxzLGEs
dSxsLGM9eC5jc3MoZSwicG9zaXRpb24iKSxwPXgoZSksZj17fTsic3RhdGljIj09PWMmJihlLnN0
eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIpLGE9cC5vZmZzZXQoKSxvPXguY3NzKGUsInRvcCIpLHU9
eC5jc3MoZSwibGVmdCIpLGw9KCJhYnNvbHV0ZSI9PT1jfHwiZml4ZWQiPT09YykmJihvK3UpLmlu
ZGV4T2YoImF1dG8iKT4tMSxsPyhyPXAucG9zaXRpb24oKSxzPXIudG9wLGk9ci5sZWZ0KToocz1w
YXJzZUZsb2F0KG8pfHwwLGk9cGFyc2VGbG9hdCh1KXx8MCkseC5pc0Z1bmN0aW9uKHQpJiYodD10
LmNhbGwoZSxuLGEpKSxudWxsIT10LnRvcCYmKGYudG9wPXQudG9wLWEudG9wK3MpLG51bGwhPXQu
bGVmdCYmKGYubGVmdD10LmxlZnQtYS5sZWZ0K2kpLCJ1c2luZyJpbiB0P3QudXNpbmcuY2FsbChl
LGYpOnAuY3NzKGYpfX0seC5mbi5leHRlbmQoe3Bvc2l0aW9uOmZ1bmN0aW9uKCl7aWYodGhpc1sw
XSl7dmFyIGUsdCxuPXRoaXNbMF0scj17dG9wOjAsbGVmdDowfTtyZXR1cm4iZml4ZWQiPT09eC5j
c3MobiwicG9zaXRpb24iKT90PW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk6KGU9dGhpcy5vZmZz
ZXRQYXJlbnQoKSx0PXRoaXMub2Zmc2V0KCkseC5ub2RlTmFtZShlWzBdLCJodG1sIil8fChyPWUu
b2Zmc2V0KCkpLHIudG9wKz14LmNzcyhlWzBdLCJib3JkZXJUb3BXaWR0aCIsITApLHIubGVmdCs9
eC5jc3MoZVswXSwiYm9yZGVyTGVmdFdpZHRoIiwhMCkpLHt0b3A6dC50b3Atci50b3AteC5jc3Mo
biwibWFyZ2luVG9wIiwhMCksbGVmdDp0LmxlZnQtci5sZWZ0LXguY3NzKG4sIm1hcmdpbkxlZnQi
LCEwKX19fSxvZmZzZXRQYXJlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24o
KXt2YXIgZT10aGlzLm9mZnNldFBhcmVudHx8czt3aGlsZShlJiYheC5ub2RlTmFtZShlLCJodG1s
IikmJiJzdGF0aWMiPT09eC5jc3MoZSwicG9zaXRpb24iKSllPWUub2Zmc2V0UGFyZW50O3JldHVy
biBlfHxzfSl9fSkseC5lYWNoKHtzY3JvbGxMZWZ0OiJwYWdlWE9mZnNldCIsc2Nyb2xsVG9wOiJw
YWdlWU9mZnNldCJ9LGZ1bmN0aW9uKHQsbil7dmFyIHI9InBhZ2VZT2Zmc2V0Ij09PW47eC5mblt0
XT1mdW5jdGlvbihpKXtyZXR1cm4geC5hY2Nlc3ModGhpcyxmdW5jdGlvbih0LGksbyl7dmFyIHM9
SG4odCk7cmV0dXJuIG89PT11bmRlZmluZWQ/cz9zW25dOnRbaV06KHM/cy5zY3JvbGxUbyhyP2Uu
cGFnZVhPZmZzZXQ6byxyP286ZS5wYWdlWU9mZnNldCk6dFtpXT1vLHVuZGVmaW5lZCl9LHQsaSxh
cmd1bWVudHMubGVuZ3RoLG51bGwpfX0pO2Z1bmN0aW9uIEhuKGUpe3JldHVybiB4LmlzV2luZG93
KGUpP2U6OT09PWUubm9kZVR5cGUmJmUuZGVmYXVsdFZpZXd9eC5lYWNoKHtIZWlnaHQ6ImhlaWdo
dCIsV2lkdGg6IndpZHRoIn0sZnVuY3Rpb24oZSx0KXt4LmVhY2goe3BhZGRpbmc6ImlubmVyIitl
LGNvbnRlbnQ6dCwiIjoib3V0ZXIiK2V9LGZ1bmN0aW9uKG4scil7eC5mbltyXT1mdW5jdGlvbihy
LGkpe3ZhciBvPWFyZ3VtZW50cy5sZW5ndGgmJihufHwiYm9vbGVhbiIhPXR5cGVvZiByKSxzPW58
fChyPT09ITB8fGk9PT0hMD8ibWFyZ2luIjoiYm9yZGVyIik7cmV0dXJuIHguYWNjZXNzKHRoaXMs
ZnVuY3Rpb24odCxuLHIpe3ZhciBpO3JldHVybiB4LmlzV2luZG93KHQpP3QuZG9jdW1lbnQuZG9j
dW1lbnRFbGVtZW50WyJjbGllbnQiK2VdOjk9PT10Lm5vZGVUeXBlPyhpPXQuZG9jdW1lbnRFbGVt
ZW50LE1hdGgubWF4KHQuYm9keVsic2Nyb2xsIitlXSxpWyJzY3JvbGwiK2VdLHQuYm9keVsib2Zm
c2V0IitlXSxpWyJvZmZzZXQiK2VdLGlbImNsaWVudCIrZV0pKTpyPT09dW5kZWZpbmVkP3guY3Nz
KHQsbixzKTp4LnN0eWxlKHQsbixyLHMpfSx0LG8/cjp1bmRlZmluZWQsbyxudWxsKX19KX0pLHgu
Zm4uc2l6ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxlbmd0aH0seC5mbi5hbmRTZWxmPXguZm4u
YWRkQmFjaywib2JqZWN0Ij09dHlwZW9mIG1vZHVsZSYmbW9kdWxlJiYib2JqZWN0Ij09dHlwZW9m
IG1vZHVsZS5leHBvcnRzP21vZHVsZS5leHBvcnRzPXg6ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmlu
ZSYmZGVmaW5lLmFtZCYmZGVmaW5lKCJqcXVlcnkiLFtdLGZ1bmN0aW9uKCl7cmV0dXJuIHh9KSwi
b2JqZWN0Ij09dHlwZW9mIGUmJiJvYmplY3QiPT10eXBlb2YgZS5kb2N1bWVudCYmKGUualF1ZXJ5
PWUuJD14KX0pKHdpbmRvdyk7CitkaWZmIC0tZ2l0IGEvd2ViL2FqYXgvbGlicy9tb290b29scy8x
LjQuMS9tb290b29scy15dWktY29tcHJlc3NlZC5qcyBiL3dlYi9hamF4L2xpYnMvbW9vdG9vbHMv
MS40LjEvbW9vdG9vbHMteXVpLWNvbXByZXNzZWQuanMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0Citp
bmRleCAwMDAwMDAwLi5lMDNmYjdjCistLS0gL2Rldi9udWxsCisrKysgYi93ZWIvYWpheC9saWJz
L21vb3Rvb2xzLzEuNC4xL21vb3Rvb2xzLXl1aS1jb21wcmVzc2VkLmpzCitAQCAtMCwwICsxLDUx
NSBAQAorKy8qCisrLS0tCisrTW9vVG9vbHM6IHRoZSBqYXZhc2NyaXB0IGZyYW1ld29yaworKwor
K3dlYiBidWlsZDoKKysgLSBodHRwOi8vbW9vdG9vbHMubmV0L2NvcmUvNzZiZjQ3MDYyZDZjMTk4
M2Q2NmNlNDdhZDY2YWEwZTAKKysKKytwYWNrYWdlciBidWlsZDoKKysgLSBwYWNrYWdlciBidWls
ZCBDb3JlL0NvcmUgQ29yZS9BcnJheSBDb3JlL1N0cmluZyBDb3JlL051bWJlciBDb3JlL0Z1bmN0
aW9uIENvcmUvT2JqZWN0IENvcmUvRXZlbnQgQ29yZS9Ccm93c2VyIENvcmUvQ2xhc3MgQ29yZS9D
bGFzcy5FeHRyYXMgQ29yZS9TbGljay5QYXJzZXIgQ29yZS9TbGljay5GaW5kZXIgQ29yZS9FbGVt
ZW50IENvcmUvRWxlbWVudC5TdHlsZSBDb3JlL0VsZW1lbnQuRXZlbnQgQ29yZS9FbGVtZW50LkRl
bGVnYXRpb24gQ29yZS9FbGVtZW50LkRpbWVuc2lvbnMgQ29yZS9GeCBDb3JlL0Z4LkNTUyBDb3Jl
L0Z4LlR3ZWVuIENvcmUvRnguTW9ycGggQ29yZS9GeC5UcmFuc2l0aW9ucyBDb3JlL1JlcXVlc3Qg
Q29yZS9SZXF1ZXN0LkhUTUwgQ29yZS9SZXF1ZXN0LkpTT04gQ29yZS9Db29raWUgQ29yZS9KU09O
IENvcmUvRE9NUmVhZHkgQ29yZS9Td2lmZgorKworK2NvcHlyaWdodHM6CisrICAtIFtNb29Ub29s
c10oaHR0cDovL21vb3Rvb2xzLm5ldCkKKysKKytsaWNlbnNlczoKKysgIC0gW01JVCBMaWNlbnNl
XShodHRwOi8vbW9vdG9vbHMubmV0L2xpY2Vuc2UudHh0KQorKy4uLgorKyovCisrKGZ1bmN0aW9u
KCl7dGhpcy5Nb29Ub29scz17dmVyc2lvbjoiMS40LjEiLGJ1aWxkOiJkMWZiMjU3MTBlM2M1NDgy
YTIxOWFiOWRjNjc1YTRlMGFkMjE3NmI2In07dmFyIGU9dGhpcy50eXBlT2Y9ZnVuY3Rpb24oaSl7
aWYoaT09bnVsbCl7cmV0dXJuIm51bGwiO31pZihpLiRmYW1pbHkpe3JldHVybiBpLiRmYW1pbHko
KTsKKyt9aWYoaS5ub2RlTmFtZSl7aWYoaS5ub2RlVHlwZT09MSl7cmV0dXJuImVsZW1lbnQiO31p
ZihpLm5vZGVUeXBlPT0zKXtyZXR1cm4oL1xTLykudGVzdChpLm5vZGVWYWx1ZSk/InRleHRub2Rl
Ijoid2hpdGVzcGFjZSI7fX1lbHNle2lmKHR5cGVvZiBpLmxlbmd0aD09Im51bWJlciIpe2lmKGku
Y2FsbGVlKXtyZXR1cm4iYXJndW1lbnRzIjsKKyt9aWYoIml0ZW0iIGluIGkpe3JldHVybiJjb2xs
ZWN0aW9uIjt9fX1yZXR1cm4gdHlwZW9mIGk7fTt2YXIgdT10aGlzLmluc3RhbmNlT2Y9ZnVuY3Rp
b24odyxpKXtpZih3PT1udWxsKXtyZXR1cm4gZmFsc2U7fXZhciB2PXcuJGNvbnN0cnVjdG9yfHx3
LmNvbnN0cnVjdG9yOworK3doaWxlKHYpe2lmKHY9PT1pKXtyZXR1cm4gdHJ1ZTt9dj12LnBhcmVu
dDt9cmV0dXJuIHcgaW5zdGFuY2VvZiBpO307dmFyIGY9dGhpcy5GdW5jdGlvbjt2YXIgcj10cnVl
O2Zvcih2YXIgcSBpbiB7dG9TdHJpbmc6MX0pe3I9bnVsbDt9aWYocil7cj1bImhhc093blByb3Bl
cnR5IiwidmFsdWVPZiIsImlzUHJvdG90eXBlT2YiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsInRv
TG9jYWxlU3RyaW5nIiwidG9TdHJpbmciLCJjb25zdHJ1Y3RvciJdOworK31mLnByb3RvdHlwZS5v
dmVybG9hZFNldHRlcj1mdW5jdGlvbih2KXt2YXIgaT10aGlzO3JldHVybiBmdW5jdGlvbih4LHcp
e2lmKHg9PW51bGwpe3JldHVybiB0aGlzO31pZih2fHx0eXBlb2YgeCE9InN0cmluZyIpe2Zvcih2
YXIgeSBpbiB4KXtpLmNhbGwodGhpcyx5LHhbeV0pOworK31pZihyKXtmb3IodmFyIHo9ci5sZW5n
dGg7ei0tOyl7eT1yW3pdO2lmKHguaGFzT3duUHJvcGVydHkoeSkpe2kuY2FsbCh0aGlzLHkseFt5
XSk7fX19fWVsc2V7aS5jYWxsKHRoaXMseCx3KTt9cmV0dXJuIHRoaXM7fTt9O2YucHJvdG90eXBl
Lm92ZXJsb2FkR2V0dGVyPWZ1bmN0aW9uKHYpe3ZhciBpPXRoaXM7CisrcmV0dXJuIGZ1bmN0aW9u
KHgpe3ZhciB5LHc7aWYodnx8dHlwZW9mIHghPSJzdHJpbmciKXt5PXg7fWVsc2V7aWYoYXJndW1l
bnRzLmxlbmd0aD4xKXt5PWFyZ3VtZW50czt9fWlmKHkpe3c9e307Zm9yKHZhciB6PTA7ejx5Lmxl
bmd0aDt6Kyspe3dbeVt6XV09aS5jYWxsKHRoaXMseVt6XSk7CisrfX1lbHNle3c9aS5jYWxsKHRo
aXMseCk7fXJldHVybiB3O307fTtmLnByb3RvdHlwZS5leHRlbmQ9ZnVuY3Rpb24oaSx2KXt0aGlz
W2ldPXY7fS5vdmVybG9hZFNldHRlcigpO2YucHJvdG90eXBlLmltcGxlbWVudD1mdW5jdGlvbihp
LHYpe3RoaXMucHJvdG90eXBlW2ldPXY7CisrfS5vdmVybG9hZFNldHRlcigpO3ZhciBvPUFycmF5
LnByb3RvdHlwZS5zbGljZTtmLmZyb209ZnVuY3Rpb24oaSl7cmV0dXJuKGUoaSk9PSJmdW5jdGlv
biIpP2k6ZnVuY3Rpb24oKXtyZXR1cm4gaTt9O307QXJyYXkuZnJvbT1mdW5jdGlvbihpKXtpZihp
PT1udWxsKXtyZXR1cm5bXTsKKyt9cmV0dXJuKGsuaXNFbnVtZXJhYmxlKGkpJiZ0eXBlb2YgaSE9
InN0cmluZyIpPyhlKGkpPT0iYXJyYXkiKT9pOm8uY2FsbChpKTpbaV07fTtOdW1iZXIuZnJvbT1m
dW5jdGlvbih2KXt2YXIgaT1wYXJzZUZsb2F0KHYpO3JldHVybiBpc0Zpbml0ZShpKT9pOm51bGw7
CisrfTtTdHJpbmcuZnJvbT1mdW5jdGlvbihpKXtyZXR1cm4gaSsiIjt9O2YuaW1wbGVtZW50KHto
aWRlOmZ1bmN0aW9uKCl7dGhpcy4kaGlkZGVuPXRydWU7cmV0dXJuIHRoaXM7fSxwcm90ZWN0OmZ1
bmN0aW9uKCl7dGhpcy4kcHJvdGVjdGVkPXRydWU7cmV0dXJuIHRoaXM7CisrfX0pO3ZhciBrPXRo
aXMuVHlwZT1mdW5jdGlvbih4LHcpe2lmKHgpe3ZhciB2PXgudG9Mb3dlckNhc2UoKTt2YXIgaT1m
dW5jdGlvbih5KXtyZXR1cm4oZSh5KT09dik7fTtrWyJpcyIreF09aTtpZih3IT1udWxsKXt3LnBy
b3RvdHlwZS4kZmFtaWx5PShmdW5jdGlvbigpe3JldHVybiB2OworK30pLmhpZGUoKTt3LnR5cGU9
aTt9fWlmKHc9PW51bGwpe3JldHVybiBudWxsO313LmV4dGVuZCh0aGlzKTt3LiRjb25zdHJ1Y3Rv
cj1rO3cucHJvdG90eXBlLiRjb25zdHJ1Y3Rvcj13O3JldHVybiB3O307dmFyIHA9T2JqZWN0LnBy
b3RvdHlwZS50b1N0cmluZztrLmlzRW51bWVyYWJsZT1mdW5jdGlvbihpKXtyZXR1cm4oaSE9bnVs
bCYmdHlwZW9mIGkubGVuZ3RoPT0ibnVtYmVyIiYmcC5jYWxsKGkpIT0iW29iamVjdCBGdW5jdGlv
bl0iKTsKKyt9O3ZhciBiPXt9O3ZhciBkPWZ1bmN0aW9uKGkpe3ZhciB2PWUoaS5wcm90b3R5cGUp
O3JldHVybiBiW3ZdfHwoYlt2XT1bXSk7fTt2YXIgaD1mdW5jdGlvbih3LEEpe2lmKEEmJkEuJGhp
ZGRlbil7cmV0dXJuO312YXIgdj1kKHRoaXMpO2Zvcih2YXIgeD0wO3g8di5sZW5ndGg7CisreCsr
KXt2YXIgej12W3hdO2lmKGUoeik9PSJ0eXBlIil7aC5jYWxsKHosdyxBKTt9ZWxzZXt6LmNhbGwo
dGhpcyx3LEEpO319dmFyIHk9dGhpcy5wcm90b3R5cGVbd107aWYoeT09bnVsbHx8IXkuJHByb3Rl
Y3RlZCl7dGhpcy5wcm90b3R5cGVbd109QTt9aWYodGhpc1t3XT09bnVsbCYmZShBKT09ImZ1bmN0
aW9uIil7dC5jYWxsKHRoaXMsdyxmdW5jdGlvbihpKXtyZXR1cm4gQS5hcHBseShpLG8uY2FsbChh
cmd1bWVudHMsMSkpOworK30pO319O3ZhciB0PWZ1bmN0aW9uKGksdyl7aWYodyYmdy4kaGlkZGVu
KXtyZXR1cm47fXZhciB2PXRoaXNbaV07aWYodj09bnVsbHx8IXYuJHByb3RlY3RlZCl7dGhpc1tp
XT13O319O2suaW1wbGVtZW50KHtpbXBsZW1lbnQ6aC5vdmVybG9hZFNldHRlcigpLGV4dGVuZDp0
Lm92ZXJsb2FkU2V0dGVyKCksYWxpYXM6ZnVuY3Rpb24oaSx2KXtoLmNhbGwodGhpcyxpLHRoaXMu
cHJvdG90eXBlW3ZdKTsKKyt9Lm92ZXJsb2FkU2V0dGVyKCksbWlycm9yOmZ1bmN0aW9uKGkpe2Qo
dGhpcykucHVzaChpKTtyZXR1cm4gdGhpczt9fSk7bmV3IGsoIlR5cGUiLGspO3ZhciBjPWZ1bmN0
aW9uKHYseix4KXt2YXIgdz0oeiE9T2JqZWN0KSxEPXoucHJvdG90eXBlO2lmKHcpe3o9bmV3IGso
dix6KTsKKyt9Zm9yKHZhciBBPTAseT14Lmxlbmd0aDtBPHk7QSsrKXt2YXIgRT14W0FdLEM9eltF
XSxCPURbRV07aWYoQyl7Qy5wcm90ZWN0KCk7fWlmKHcmJkIpe2RlbGV0ZSBEW0VdO0RbRV09Qi5w
cm90ZWN0KCk7fX1pZih3KXt6LmltcGxlbWVudChEKTt9cmV0dXJuIGM7fTtjKCJTdHJpbmciLFN0
cmluZyxbImNoYXJBdCIsImNoYXJDb2RlQXQiLCJjb25jYXQiLCJpbmRleE9mIiwibGFzdEluZGV4
T2YiLCJtYXRjaCIsInF1b3RlIiwicmVwbGFjZSIsInNlYXJjaCIsInNsaWNlIiwic3BsaXQiLCJz
dWJzdHIiLCJzdWJzdHJpbmciLCJ0cmltIiwidG9Mb3dlckNhc2UiLCJ0b1VwcGVyQ2FzZSJdKSgi
QXJyYXkiLEFycmF5LFsicG9wIiwicHVzaCIsInJldmVyc2UiLCJzaGlmdCIsInNvcnQiLCJzcGxp
Y2UiLCJ1bnNoaWZ0IiwiY29uY2F0Iiwiam9pbiIsInNsaWNlIiwiaW5kZXhPZiIsImxhc3RJbmRl
eE9mIiwiZmlsdGVyIiwiZm9yRWFjaCIsImV2ZXJ5IiwibWFwIiwic29tZSIsInJlZHVjZSIsInJl
ZHVjZVJpZ2h0Il0pKCJOdW1iZXIiLE51bWJlcixbInRvRXhwb25lbnRpYWwiLCJ0b0ZpeGVkIiwi
dG9Mb2NhbGVTdHJpbmciLCJ0b1ByZWNpc2lvbiJdKSgiRnVuY3Rpb24iLGYsWyJhcHBseSIsImNh
bGwiLCJiaW5kIl0pKCJSZWdFeHAiLFJlZ0V4cCxbImV4ZWMiLCJ0ZXN0Il0pKCJPYmplY3QiLE9i
amVjdCxbImNyZWF0ZSIsImRlZmluZVByb3BlcnR5IiwiZGVmaW5lUHJvcGVydGllcyIsImtleXMi
LCJnZXRQcm90b3R5cGVPZiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImdldE93blByb3Bl
cnR5TmFtZXMiLCJwcmV2ZW50RXh0ZW5zaW9ucyIsImlzRXh0ZW5zaWJsZSIsInNlYWwiLCJpc1Nl
YWxlZCIsImZyZWV6ZSIsImlzRnJvemVuIl0pKCJEYXRlIixEYXRlLFsibm93Il0pOworK09iamVj
dC5leHRlbmQ9dC5vdmVybG9hZFNldHRlcigpO0RhdGUuZXh0ZW5kKCJub3ciLGZ1bmN0aW9uKCl7
cmV0dXJuICsobmV3IERhdGUpO30pO25ldyBrKCJCb29sZWFuIixCb29sZWFuKTtOdW1iZXIucHJv
dG90eXBlLiRmYW1pbHk9ZnVuY3Rpb24oKXtyZXR1cm4gaXNGaW5pdGUodGhpcyk/Im51bWJlciI6
Im51bGwiOworK30uaGlkZSgpO051bWJlci5leHRlbmQoInJhbmRvbSIsZnVuY3Rpb24odixpKXty
ZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKihpLXYrMSkrdik7fSk7dmFyIGw9T2JqZWN0
LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtPYmplY3QuZXh0ZW5kKCJmb3JFYWNoIixmdW5jdGlv
bihpLHcseCl7Zm9yKHZhciB2IGluIGkpe2lmKGwuY2FsbChpLHYpKXt3LmNhbGwoeCxpW3ZdLHYs
aSk7CisrfX19KTtPYmplY3QuZWFjaD1PYmplY3QuZm9yRWFjaDtBcnJheS5pbXBsZW1lbnQoe2Zv
ckVhY2g6ZnVuY3Rpb24oeCx5KXtmb3IodmFyIHc9MCx2PXRoaXMubGVuZ3RoO3c8djt3Kyspe2lm
KHcgaW4gdGhpcyl7eC5jYWxsKHksdGhpc1t3XSx3LHRoaXMpO319fSxlYWNoOmZ1bmN0aW9uKGks
dil7QXJyYXkuZm9yRWFjaCh0aGlzLGksdik7CisrcmV0dXJuIHRoaXM7fX0pO3ZhciBzPWZ1bmN0
aW9uKGkpe3N3aXRjaChlKGkpKXtjYXNlImFycmF5IjpyZXR1cm4gaS5jbG9uZSgpO2Nhc2Uib2Jq
ZWN0IjpyZXR1cm4gT2JqZWN0LmNsb25lKGkpO2RlZmF1bHQ6cmV0dXJuIGk7fX07QXJyYXkuaW1w
bGVtZW50KCJjbG9uZSIsZnVuY3Rpb24oKXt2YXIgdj10aGlzLmxlbmd0aCx3PW5ldyBBcnJheSh2
KTsKKyt3aGlsZSh2LS0pe3dbdl09cyh0aGlzW3ZdKTt9cmV0dXJuIHc7fSk7dmFyIGE9ZnVuY3Rp
b24odixpLHcpe3N3aXRjaChlKHcpKXtjYXNlIm9iamVjdCI6aWYoZSh2W2ldKT09Im9iamVjdCIp
e09iamVjdC5tZXJnZSh2W2ldLHcpO31lbHNle3ZbaV09T2JqZWN0LmNsb25lKHcpOworK31icmVh
aztjYXNlImFycmF5Ijp2W2ldPXcuY2xvbmUoKTticmVhaztkZWZhdWx0OnZbaV09dzt9cmV0dXJu
IHY7fTtPYmplY3QuZXh0ZW5kKHttZXJnZTpmdW5jdGlvbihDLHkseCl7aWYoZSh5KT09InN0cmlu
ZyIpe3JldHVybiBhKEMseSx4KTt9Zm9yKHZhciBCPTEsdz1hcmd1bWVudHMubGVuZ3RoOworK0I8
dztCKyspe3ZhciB6PWFyZ3VtZW50c1tCXTtmb3IodmFyIEEgaW4geil7YShDLEEseltBXSk7fX1y
ZXR1cm4gQzt9LGNsb25lOmZ1bmN0aW9uKGkpe3ZhciB3PXt9O2Zvcih2YXIgdiBpbiBpKXt3W3Zd
PXMoaVt2XSk7fXJldHVybiB3O30sYXBwZW5kOmZ1bmN0aW9uKHope2Zvcih2YXIgeT0xLHc9YXJn
dW1lbnRzLmxlbmd0aDsKKyt5PHc7eSsrKXt2YXIgdj1hcmd1bWVudHNbeV18fHt9O2Zvcih2YXIg
eCBpbiB2KXt6W3hdPXZbeF07fX1yZXR1cm4gejt9fSk7WyJPYmplY3QiLCJXaGl0ZVNwYWNlIiwi
VGV4dE5vZGUiLCJDb2xsZWN0aW9uIiwiQXJndW1lbnRzIl0uZWFjaChmdW5jdGlvbihpKXtuZXcg
ayhpKTsKKyt9KTt2YXIgaj1EYXRlLm5vdygpO1N0cmluZy5leHRlbmQoInVuaXF1ZUlEIixmdW5j
dGlvbigpe3JldHVybihqKyspLnRvU3RyaW5nKDM2KTt9KTt2YXIgZz10aGlzLkhhc2g9bmV3IGso
Ikhhc2giLGZ1bmN0aW9uKGkpe2lmKGUoaSk9PSJoYXNoIil7aT1PYmplY3QuY2xvbmUoaS5nZXRD
bGVhbigpKTsKKyt9Zm9yKHZhciB2IGluIGkpe3RoaXNbdl09aVt2XTt9cmV0dXJuIHRoaXM7fSk7
Zy5pbXBsZW1lbnQoe2ZvckVhY2g6ZnVuY3Rpb24oaSx2KXtPYmplY3QuZm9yRWFjaCh0aGlzLGks
dik7fSxnZXRDbGVhbjpmdW5jdGlvbigpe3ZhciB2PXt9O2Zvcih2YXIgaSBpbiB0aGlzKXtpZih0
aGlzLmhhc093blByb3BlcnR5KGkpKXt2W2ldPXRoaXNbaV07CisrfX1yZXR1cm4gdjt9LGdldExl
bmd0aDpmdW5jdGlvbigpe3ZhciB2PTA7Zm9yKHZhciBpIGluIHRoaXMpe2lmKHRoaXMuaGFzT3du
UHJvcGVydHkoaSkpe3YrKzt9fXJldHVybiB2O319KTtnLmFsaWFzKCJlYWNoIiwiZm9yRWFjaCIp
O09iamVjdC50eXBlPWsuaXNPYmplY3Q7CisrdmFyIG49dGhpcy5OYXRpdmU9ZnVuY3Rpb24oaSl7
cmV0dXJuIG5ldyBrKGkubmFtZSxpLmluaXRpYWxpemUpO307bi50eXBlPWsudHlwZTtuLmltcGxl
bWVudD1mdW5jdGlvbih4LHYpe2Zvcih2YXIgdz0wO3c8eC5sZW5ndGg7dysrKXt4W3ddLmltcGxl
bWVudCh2KTsKKyt9cmV0dXJuIG47fTt2YXIgbT1BcnJheS50eXBlO0FycmF5LnR5cGU9ZnVuY3Rp
b24oaSl7cmV0dXJuIHUoaSxBcnJheSl8fG0oaSk7fTt0aGlzLiRBPWZ1bmN0aW9uKGkpe3JldHVy
biBBcnJheS5mcm9tKGkpLnNsaWNlKCk7fTt0aGlzLiRhcmd1bWVudHM9ZnVuY3Rpb24odil7cmV0
dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c1t2XTsKKyt9O307dGhpcy4kY2hrPWZ1bmN0
aW9uKGkpe3JldHVybiAhIShpfHxpPT09MCk7fTt0aGlzLiRjbGVhcj1mdW5jdGlvbihpKXtjbGVh
clRpbWVvdXQoaSk7Y2xlYXJJbnRlcnZhbChpKTtyZXR1cm4gbnVsbDt9O3RoaXMuJGRlZmluZWQ9
ZnVuY3Rpb24oaSl7cmV0dXJuKGkhPW51bGwpOworK307dGhpcy4kZWFjaD1mdW5jdGlvbih3LHYs
eCl7dmFyIGk9ZSh3KTsoKGk9PSJhcmd1bWVudHMifHxpPT0iY29sbGVjdGlvbiJ8fGk9PSJhcnJh
eSJ8fGk9PSJlbGVtZW50cyIpP0FycmF5Ok9iamVjdCkuZWFjaCh3LHYseCk7fTt0aGlzLiRlbXB0
eT1mdW5jdGlvbigpe307CisrdGhpcy4kZXh0ZW5kPWZ1bmN0aW9uKHYsaSl7cmV0dXJuIE9iamVj
dC5hcHBlbmQodixpKTt9O3RoaXMuJEg9ZnVuY3Rpb24oaSl7cmV0dXJuIG5ldyBnKGkpO307dGhp
cy4kbWVyZ2U9ZnVuY3Rpb24oKXt2YXIgaT1BcnJheS5zbGljZShhcmd1bWVudHMpO2kudW5zaGlm
dCh7fSk7CisrcmV0dXJuIE9iamVjdC5tZXJnZS5hcHBseShudWxsLGkpO307dGhpcy4kbGFtYmRh
PWYuZnJvbTt0aGlzLiRtaXhpbj1PYmplY3QubWVyZ2U7dGhpcy4kcmFuZG9tPU51bWJlci5yYW5k
b207dGhpcy4kc3BsYXQ9QXJyYXkuZnJvbTt0aGlzLiR0aW1lPURhdGUubm93OworK3RoaXMuJHR5
cGU9ZnVuY3Rpb24oaSl7dmFyIHY9ZShpKTtpZih2PT0iZWxlbWVudHMiKXtyZXR1cm4iYXJyYXki
O31yZXR1cm4odj09Im51bGwiKT9mYWxzZTp2O307dGhpcy4kdW5saW5rPWZ1bmN0aW9uKGkpe3N3
aXRjaChlKGkpKXtjYXNlIm9iamVjdCI6cmV0dXJuIE9iamVjdC5jbG9uZShpKTsKKytjYXNlImFy
cmF5IjpyZXR1cm4gQXJyYXkuY2xvbmUoaSk7Y2FzZSJoYXNoIjpyZXR1cm4gbmV3IGcoaSk7ZGVm
YXVsdDpyZXR1cm4gaTt9fTt9KSgpO0FycmF5LmltcGxlbWVudCh7ZXZlcnk6ZnVuY3Rpb24oYyxk
KXtmb3IodmFyIGI9MCxhPXRoaXMubGVuZ3RoPj4+MDsKKytiPGE7YisrKXtpZigoYiBpbiB0aGlz
KSYmIWMuY2FsbChkLHRoaXNbYl0sYix0aGlzKSl7cmV0dXJuIGZhbHNlO319cmV0dXJuIHRydWU7
fSxmaWx0ZXI6ZnVuY3Rpb24oZCxlKXt2YXIgYz1bXTtmb3IodmFyIGI9MCxhPXRoaXMubGVuZ3Ro
Pj4+MDtiPGE7YisrKXtpZigoYiBpbiB0aGlzKSYmZC5jYWxsKGUsdGhpc1tiXSxiLHRoaXMpKXtj
LnB1c2godGhpc1tiXSk7CisrfX1yZXR1cm4gYzt9LGluZGV4T2Y6ZnVuY3Rpb24oYyxkKXt2YXIg
Yj10aGlzLmxlbmd0aD4+PjA7Zm9yKHZhciBhPShkPDApP01hdGgubWF4KDAsYitkKTpkfHwwO2E8
YjthKyspe2lmKHRoaXNbYV09PT1jKXtyZXR1cm4gYTt9fXJldHVybiAtMTt9LG1hcDpmdW5jdGlv
bihjLGUpe3ZhciBkPXRoaXMubGVuZ3RoPj4+MCxiPUFycmF5KGQpOworK2Zvcih2YXIgYT0wO2E8
ZDthKyspe2lmKGEgaW4gdGhpcyl7YlthXT1jLmNhbGwoZSx0aGlzW2FdLGEsdGhpcyk7fX1yZXR1
cm4gYjt9LHNvbWU6ZnVuY3Rpb24oYyxkKXtmb3IodmFyIGI9MCxhPXRoaXMubGVuZ3RoPj4+MDti
PGE7YisrKXtpZigoYiBpbiB0aGlzKSYmYy5jYWxsKGQsdGhpc1tiXSxiLHRoaXMpKXtyZXR1cm4g
dHJ1ZTsKKyt9fXJldHVybiBmYWxzZTt9LGNsZWFuOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmls
dGVyKGZ1bmN0aW9uKGEpe3JldHVybiBhIT1udWxsO30pO30saW52b2tlOmZ1bmN0aW9uKGEpe3Zh
ciBiPUFycmF5LnNsaWNlKGFyZ3VtZW50cywxKTtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oYyl7
cmV0dXJuIGNbYV0uYXBwbHkoYyxiKTsKKyt9KTt9LGFzc29jaWF0ZTpmdW5jdGlvbihjKXt2YXIg
ZD17fSxiPU1hdGgubWluKHRoaXMubGVuZ3RoLGMubGVuZ3RoKTtmb3IodmFyIGE9MDthPGI7YSsr
KXtkW2NbYV1dPXRoaXNbYV07fXJldHVybiBkO30sbGluazpmdW5jdGlvbihjKXt2YXIgYT17fTtm
b3IodmFyIGU9MCxiPXRoaXMubGVuZ3RoOworK2U8YjtlKyspe2Zvcih2YXIgZCBpbiBjKXtpZihj
W2RdKHRoaXNbZV0pKXthW2RdPXRoaXNbZV07ZGVsZXRlIGNbZF07YnJlYWs7fX19cmV0dXJuIGE7
fSxjb250YWluczpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLmluZGV4T2YoYSxiKSE9LTE7fSxh
cHBlbmQ6ZnVuY3Rpb24oYSl7dGhpcy5wdXNoLmFwcGx5KHRoaXMsYSk7CisrcmV0dXJuIHRoaXM7
fSxnZXRMYXN0OmZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMubGVuZ3RoKT90aGlzW3RoaXMubGVuZ3Ro
LTFdOm51bGw7fSxnZXRSYW5kb206ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5sZW5ndGgpP3RoaXNb
TnVtYmVyLnJhbmRvbSgwLHRoaXMubGVuZ3RoLTEpXTpudWxsOworK30saW5jbHVkZTpmdW5jdGlv
bihhKXtpZighdGhpcy5jb250YWlucyhhKSl7dGhpcy5wdXNoKGEpO31yZXR1cm4gdGhpczt9LGNv
bWJpbmU6ZnVuY3Rpb24oYyl7Zm9yKHZhciBiPTAsYT1jLmxlbmd0aDtiPGE7YisrKXt0aGlzLmlu
Y2x1ZGUoY1tiXSk7fXJldHVybiB0aGlzOworK30sZXJhc2U6ZnVuY3Rpb24oYil7Zm9yKHZhciBh
PXRoaXMubGVuZ3RoO2EtLTspe2lmKHRoaXNbYV09PT1iKXt0aGlzLnNwbGljZShhLDEpO319cmV0
dXJuIHRoaXM7fSxlbXB0eTpmdW5jdGlvbigpe3RoaXMubGVuZ3RoPTA7cmV0dXJuIHRoaXM7fSxm
bGF0dGVuOmZ1bmN0aW9uKCl7dmFyIGQ9W107CisrZm9yKHZhciBiPTAsYT10aGlzLmxlbmd0aDti
PGE7YisrKXt2YXIgYz10eXBlT2YodGhpc1tiXSk7aWYoYz09Im51bGwiKXtjb250aW51ZTt9ZD1k
LmNvbmNhdCgoYz09ImFycmF5Inx8Yz09ImNvbGxlY3Rpb24ifHxjPT0iYXJndW1lbnRzInx8aW5z
dGFuY2VPZih0aGlzW2JdLEFycmF5KSk/QXJyYXkuZmxhdHRlbih0aGlzW2JdKTp0aGlzW2JdKTsK
Kyt9cmV0dXJuIGQ7fSxwaWNrOmZ1bmN0aW9uKCl7Zm9yKHZhciBiPTAsYT10aGlzLmxlbmd0aDti
PGE7YisrKXtpZih0aGlzW2JdIT1udWxsKXtyZXR1cm4gdGhpc1tiXTt9fXJldHVybiBudWxsO30s
aGV4VG9SZ2I6ZnVuY3Rpb24oYil7aWYodGhpcy5sZW5ndGghPTMpe3JldHVybiBudWxsOworK312
YXIgYT10aGlzLm1hcChmdW5jdGlvbihjKXtpZihjLmxlbmd0aD09MSl7Yys9Yzt9cmV0dXJuIGMu
dG9JbnQoMTYpO30pO3JldHVybihiKT9hOiJyZ2IoIithKyIpIjt9LHJnYlRvSGV4OmZ1bmN0aW9u
KGQpe2lmKHRoaXMubGVuZ3RoPDMpe3JldHVybiBudWxsO31pZih0aGlzLmxlbmd0aD09NCYmdGhp
c1szXT09MCYmIWQpe3JldHVybiJ0cmFuc3BhcmVudCI7CisrfXZhciBiPVtdO2Zvcih2YXIgYT0w
O2E8MzthKyspe3ZhciBjPSh0aGlzW2FdLTApLnRvU3RyaW5nKDE2KTtiLnB1c2goKGMubGVuZ3Ro
PT0xKT8iMCIrYzpjKTt9cmV0dXJuKGQpP2I6IiMiK2Iuam9pbigiIik7fX0pO0FycmF5LmFsaWFz
KCJleHRlbmQiLCJhcHBlbmQiKTsKKyt2YXIgJHBpY2s9ZnVuY3Rpb24oKXtyZXR1cm4gQXJyYXku
ZnJvbShhcmd1bWVudHMpLnBpY2soKTt9O1N0cmluZy5pbXBsZW1lbnQoe3Rlc3Q6ZnVuY3Rpb24o
YSxiKXtyZXR1cm4oKHR5cGVPZihhKT09InJlZ2V4cCIpP2E6bmV3IFJlZ0V4cCgiIithLGIpKS50
ZXN0KHRoaXMpOworK30sY29udGFpbnM6ZnVuY3Rpb24oYSxiKXtyZXR1cm4oYik/KGIrdGhpcyti
KS5pbmRleE9mKGIrYStiKT4tMTpTdHJpbmcodGhpcykuaW5kZXhPZihhKT4tMTt9LHRyaW06ZnVu
Y3Rpb24oKXtyZXR1cm4gU3RyaW5nKHRoaXMpLnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKTsKKyt9
LGNsZWFuOmZ1bmN0aW9uKCl7cmV0dXJuIFN0cmluZyh0aGlzKS5yZXBsYWNlKC9ccysvZywiICIp
LnRyaW0oKTt9LGNhbWVsQ2FzZTpmdW5jdGlvbigpe3JldHVybiBTdHJpbmcodGhpcykucmVwbGFj
ZSgvLVxEL2csZnVuY3Rpb24oYSl7cmV0dXJuIGEuY2hhckF0KDEpLnRvVXBwZXJDYXNlKCk7Cisr
fSk7fSxoeXBoZW5hdGU6ZnVuY3Rpb24oKXtyZXR1cm4gU3RyaW5nKHRoaXMpLnJlcGxhY2UoL1tB
LVpdL2csZnVuY3Rpb24oYSl7cmV0dXJuKCItIithLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpKTt9
KTt9LGNhcGl0YWxpemU6ZnVuY3Rpb24oKXtyZXR1cm4gU3RyaW5nKHRoaXMpLnJlcGxhY2UoL1xi
W2Etel0vZyxmdW5jdGlvbihhKXtyZXR1cm4gYS50b1VwcGVyQ2FzZSgpOworK30pO30sZXNjYXBl
UmVnRXhwOmZ1bmN0aW9uKCl7cmV0dXJuIFN0cmluZyh0aGlzKS5yZXBsYWNlKC8oWy0uKis/XiR7
fSgpfFtcXVwvXFxdKS9nLCJcXCQxIik7fSx0b0ludDpmdW5jdGlvbihhKXtyZXR1cm4gcGFyc2VJ
bnQodGhpcyxhfHwxMCk7fSx0b0Zsb2F0OmZ1bmN0aW9uKCl7cmV0dXJuIHBhcnNlRmxvYXQodGhp
cyk7CisrfSxoZXhUb1JnYjpmdW5jdGlvbihiKXt2YXIgYT1TdHJpbmcodGhpcykubWF0Y2goL14j
Pyhcd3sxLDJ9KShcd3sxLDJ9KShcd3sxLDJ9KSQvKTtyZXR1cm4oYSk/YS5zbGljZSgxKS5oZXhU
b1JnYihiKTpudWxsO30scmdiVG9IZXg6ZnVuY3Rpb24oYil7dmFyIGE9U3RyaW5nKHRoaXMpLm1h
dGNoKC9cZHsxLDN9L2cpOworK3JldHVybihhKT9hLnJnYlRvSGV4KGIpOm51bGw7fSxzdWJzdGl0
dXRlOmZ1bmN0aW9uKGEsYil7cmV0dXJuIFN0cmluZyh0aGlzKS5yZXBsYWNlKGJ8fCgvXFw/XHso
W157fV0rKVx9L2cpLGZ1bmN0aW9uKGQsYyl7aWYoZC5jaGFyQXQoMCk9PSJcXCIpe3JldHVybiBk
LnNsaWNlKDEpOworK31yZXR1cm4oYVtjXSE9bnVsbCk/YVtjXToiIjt9KTt9fSk7TnVtYmVyLmlt
cGxlbWVudCh7bGltaXQ6ZnVuY3Rpb24oYixhKXtyZXR1cm4gTWF0aC5taW4oYSxNYXRoLm1heChi
LHRoaXMpKTt9LHJvdW5kOmZ1bmN0aW9uKGEpe2E9TWF0aC5wb3coMTAsYXx8MCkudG9GaXhlZChh
PDA/LWE6MCk7CisrcmV0dXJuIE1hdGgucm91bmQodGhpcyphKS9hO30sdGltZXM6ZnVuY3Rpb24o
YixjKXtmb3IodmFyIGE9MDthPHRoaXM7YSsrKXtiLmNhbGwoYyxhLHRoaXMpO319LHRvRmxvYXQ6
ZnVuY3Rpb24oKXtyZXR1cm4gcGFyc2VGbG9hdCh0aGlzKTt9LHRvSW50OmZ1bmN0aW9uKGEpe3Jl
dHVybiBwYXJzZUludCh0aGlzLGF8fDEwKTsKKyt9fSk7TnVtYmVyLmFsaWFzKCJlYWNoIiwidGlt
ZXMiKTsoZnVuY3Rpb24oYil7dmFyIGE9e307Yi5lYWNoKGZ1bmN0aW9uKGMpe2lmKCFOdW1iZXJb
Y10pe2FbY109ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aFtjXS5hcHBseShudWxsLFt0aGlzXS5jb25j
YXQoQXJyYXkuZnJvbShhcmd1bWVudHMpKSk7CisrfTt9fSk7TnVtYmVyLmltcGxlbWVudChhKTt9
KShbImFicyIsImFjb3MiLCJhc2luIiwiYXRhbiIsImF0YW4yIiwiY2VpbCIsImNvcyIsImV4cCIs
ImZsb29yIiwibG9nIiwibWF4IiwibWluIiwicG93Iiwic2luIiwic3FydCIsInRhbiJdKTtGdW5j
dGlvbi5leHRlbmQoe2F0dGVtcHQ6ZnVuY3Rpb24oKXtmb3IodmFyIGI9MCxhPWFyZ3VtZW50cy5s
ZW5ndGg7CisrYjxhO2IrKyl7dHJ5e3JldHVybiBhcmd1bWVudHNbYl0oKTt9Y2F0Y2goYyl7fX1y
ZXR1cm4gbnVsbDt9fSk7RnVuY3Rpb24uaW1wbGVtZW50KHthdHRlbXB0OmZ1bmN0aW9uKGEsYyl7
dHJ5e3JldHVybiB0aGlzLmFwcGx5KGMsQXJyYXkuZnJvbShhKSk7fWNhdGNoKGIpe31yZXR1cm4g
bnVsbDsKKyt9LGJpbmQ6ZnVuY3Rpb24oZSl7dmFyIGE9dGhpcyxiPWFyZ3VtZW50cy5sZW5ndGg+
MT9BcnJheS5zbGljZShhcmd1bWVudHMsMSk6bnVsbCxkPWZ1bmN0aW9uKCl7fTt2YXIgYz1mdW5j
dGlvbigpe3ZhciBnPWUsaD1hcmd1bWVudHMubGVuZ3RoO2lmKHRoaXMgaW5zdGFuY2VvZiBjKXtk
LnByb3RvdHlwZT1hLnByb3RvdHlwZTsKKytnPW5ldyBkO312YXIgZj0oIWImJiFoKT9hLmNhbGwo
Zyk6YS5hcHBseShnLGImJmg/Yi5jb25jYXQoQXJyYXkuc2xpY2UoYXJndW1lbnRzKSk6Ynx8YXJn
dW1lbnRzKTtyZXR1cm4gZz09ZT9mOmc7fTtyZXR1cm4gYzt9LHBhc3M6ZnVuY3Rpb24oYixjKXt2
YXIgYT10aGlzOworK2lmKGIhPW51bGwpe2I9QXJyYXkuZnJvbShiKTt9cmV0dXJuIGZ1bmN0aW9u
KCl7cmV0dXJuIGEuYXBwbHkoYyxifHxhcmd1bWVudHMpO307fSxkZWxheTpmdW5jdGlvbihiLGMs
YSl7cmV0dXJuIHNldFRpbWVvdXQodGhpcy5wYXNzKChhPT1udWxsP1tdOmEpLGMpLGIpOworK30s
cGVyaW9kaWNhbDpmdW5jdGlvbihjLGIsYSl7cmV0dXJuIHNldEludGVydmFsKHRoaXMucGFzcygo
YT09bnVsbD9bXTphKSxiKSxjKTt9fSk7ZGVsZXRlIEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kO0Z1
bmN0aW9uLmltcGxlbWVudCh7Y3JlYXRlOmZ1bmN0aW9uKGIpe3ZhciBhPXRoaXM7CisrYj1ifHx7
fTtyZXR1cm4gZnVuY3Rpb24oZCl7dmFyIGM9Yi5hcmd1bWVudHM7Yz0oYyE9bnVsbCk/QXJyYXku
ZnJvbShjKTpBcnJheS5zbGljZShhcmd1bWVudHMsKGIuZXZlbnQpPzE6MCk7aWYoYi5ldmVudCl7
Yz1bZHx8d2luZG93LmV2ZW50XS5leHRlbmQoYyk7fXZhciBlPWZ1bmN0aW9uKCl7cmV0dXJuIGEu
YXBwbHkoYi5iaW5kfHxudWxsLGMpOworK307aWYoYi5kZWxheSl7cmV0dXJuIHNldFRpbWVvdXQo
ZSxiLmRlbGF5KTt9aWYoYi5wZXJpb2RpY2FsKXtyZXR1cm4gc2V0SW50ZXJ2YWwoZSxiLnBlcmlv
ZGljYWwpO31pZihiLmF0dGVtcHQpe3JldHVybiBGdW5jdGlvbi5hdHRlbXB0KGUpO31yZXR1cm4g
ZSgpO307CisrfSxiaW5kOmZ1bmN0aW9uKGMsYil7dmFyIGE9dGhpcztpZihiIT1udWxsKXtiPUFy
cmF5LmZyb20oYik7fXJldHVybiBmdW5jdGlvbigpe3JldHVybiBhLmFwcGx5KGMsYnx8YXJndW1l
bnRzKTt9O30sYmluZFdpdGhFdmVudDpmdW5jdGlvbihjLGIpe3ZhciBhPXRoaXM7CisraWYoYiE9
bnVsbCl7Yj1BcnJheS5mcm9tKGIpO31yZXR1cm4gZnVuY3Rpb24oZCl7cmV0dXJuIGEuYXBwbHko
YywoYj09bnVsbCk/YXJndW1lbnRzOltkXS5jb25jYXQoYikpO307fSxydW46ZnVuY3Rpb24oYSxi
KXtyZXR1cm4gdGhpcy5hcHBseShiLEFycmF5LmZyb20oYSkpOworK319KTtpZihPYmplY3QuY3Jl
YXRlPT1GdW5jdGlvbi5wcm90b3R5cGUuY3JlYXRlKXtPYmplY3QuY3JlYXRlPW51bGw7fXZhciAk
dHJ5PUZ1bmN0aW9uLmF0dGVtcHQ7KGZ1bmN0aW9uKCl7dmFyIGE9T2JqZWN0LnByb3RvdHlwZS5o
YXNPd25Qcm9wZXJ0eTtPYmplY3QuZXh0ZW5kKHtzdWJzZXQ6ZnVuY3Rpb24oZCxnKXt2YXIgZj17
fTsKKytmb3IodmFyIGU9MCxiPWcubGVuZ3RoO2U8YjtlKyspe3ZhciBjPWdbZV07aWYoYyBpbiBk
KXtmW2NdPWRbY107fX1yZXR1cm4gZjt9LG1hcDpmdW5jdGlvbihiLGUsZil7dmFyIGQ9e307Zm9y
KHZhciBjIGluIGIpe2lmKGEuY2FsbChiLGMpKXtkW2NdPWUuY2FsbChmLGJbY10sYyxiKTsKKyt9
fXJldHVybiBkO30sZmlsdGVyOmZ1bmN0aW9uKGIsZSxnKXt2YXIgZD17fTtmb3IodmFyIGMgaW4g
Yil7dmFyIGY9YltjXTtpZihhLmNhbGwoYixjKSYmZS5jYWxsKGcsZixjLGIpKXtkW2NdPWY7fX1y
ZXR1cm4gZDt9LGV2ZXJ5OmZ1bmN0aW9uKGIsZCxlKXtmb3IodmFyIGMgaW4gYil7aWYoYS5jYWxs
KGIsYykmJiFkLmNhbGwoZSxiW2NdLGMpKXtyZXR1cm4gZmFsc2U7CisrfX1yZXR1cm4gdHJ1ZTt9
LHNvbWU6ZnVuY3Rpb24oYixkLGUpe2Zvcih2YXIgYyBpbiBiKXtpZihhLmNhbGwoYixjKSYmZC5j
YWxsKGUsYltjXSxjKSl7cmV0dXJuIHRydWU7fX1yZXR1cm4gZmFsc2U7fSxrZXlzOmZ1bmN0aW9u
KGIpe3ZhciBkPVtdO2Zvcih2YXIgYyBpbiBiKXtpZihhLmNhbGwoYixjKSl7ZC5wdXNoKGMpOwor
K319cmV0dXJuIGQ7fSx2YWx1ZXM6ZnVuY3Rpb24oYyl7dmFyIGI9W107Zm9yKHZhciBkIGluIGMp
e2lmKGEuY2FsbChjLGQpKXtiLnB1c2goY1tkXSk7fX1yZXR1cm4gYjt9LGdldExlbmd0aDpmdW5j
dGlvbihiKXtyZXR1cm4gT2JqZWN0LmtleXMoYikubGVuZ3RoO30sa2V5T2Y6ZnVuY3Rpb24oYixk
KXtmb3IodmFyIGMgaW4gYil7aWYoYS5jYWxsKGIsYykmJmJbY109PT1kKXtyZXR1cm4gYzsKKyt9
fXJldHVybiBudWxsO30sY29udGFpbnM6ZnVuY3Rpb24oYixjKXtyZXR1cm4gT2JqZWN0LmtleU9m
KGIsYykhPW51bGw7fSx0b1F1ZXJ5U3RyaW5nOmZ1bmN0aW9uKGIsYyl7dmFyIGQ9W107T2JqZWN0
LmVhY2goYixmdW5jdGlvbihoLGcpe2lmKGMpe2c9YysiWyIrZysiXSI7CisrfXZhciBmO3N3aXRj
aCh0eXBlT2YoaCkpe2Nhc2Uib2JqZWN0IjpmPU9iamVjdC50b1F1ZXJ5U3RyaW5nKGgsZyk7YnJl
YWs7Y2FzZSJhcnJheSI6dmFyIGU9e307aC5lYWNoKGZ1bmN0aW9uKGssail7ZVtqXT1rO30pO2Y9
T2JqZWN0LnRvUXVlcnlTdHJpbmcoZSxnKTsKKyticmVhaztkZWZhdWx0OmY9ZysiPSIrZW5jb2Rl
VVJJQ29tcG9uZW50KGgpO31pZihoIT1udWxsKXtkLnB1c2goZik7fX0pO3JldHVybiBkLmpvaW4o
IiYiKTt9fSk7fSkoKTtIYXNoLmltcGxlbWVudCh7aGFzOk9iamVjdC5wcm90b3R5cGUuaGFzT3du
UHJvcGVydHksa2V5T2Y6ZnVuY3Rpb24oYSl7cmV0dXJuIE9iamVjdC5rZXlPZih0aGlzLGEpOwor
K30saGFzVmFsdWU6ZnVuY3Rpb24oYSl7cmV0dXJuIE9iamVjdC5jb250YWlucyh0aGlzLGEpO30s
ZXh0ZW5kOmZ1bmN0aW9uKGEpe0hhc2guZWFjaChhfHx7fSxmdW5jdGlvbihjLGIpe0hhc2guc2V0
KHRoaXMsYixjKTt9LHRoaXMpO3JldHVybiB0aGlzO30sY29tYmluZTpmdW5jdGlvbihhKXtIYXNo
LmVhY2goYXx8e30sZnVuY3Rpb24oYyxiKXtIYXNoLmluY2x1ZGUodGhpcyxiLGMpOworK30sdGhp
cyk7cmV0dXJuIHRoaXM7fSxlcmFzZTpmdW5jdGlvbihhKXtpZih0aGlzLmhhc093blByb3BlcnR5
KGEpKXtkZWxldGUgdGhpc1thXTt9cmV0dXJuIHRoaXM7fSxnZXQ6ZnVuY3Rpb24oYSl7cmV0dXJu
KHRoaXMuaGFzT3duUHJvcGVydHkoYSkpP3RoaXNbYV06bnVsbDsKKyt9LHNldDpmdW5jdGlvbihh
LGIpe2lmKCF0aGlzW2FdfHx0aGlzLmhhc093blByb3BlcnR5KGEpKXt0aGlzW2FdPWI7fXJldHVy
biB0aGlzO30sZW1wdHk6ZnVuY3Rpb24oKXtIYXNoLmVhY2godGhpcyxmdW5jdGlvbihiLGEpe2Rl
bGV0ZSB0aGlzW2FdO30sdGhpcyk7CisrcmV0dXJuIHRoaXM7fSxpbmNsdWRlOmZ1bmN0aW9uKGEs
Yil7aWYodGhpc1thXT09bnVsbCl7dGhpc1thXT1iO31yZXR1cm4gdGhpczt9LG1hcDpmdW5jdGlv
bihhLGIpe3JldHVybiBuZXcgSGFzaChPYmplY3QubWFwKHRoaXMsYSxiKSk7fSxmaWx0ZXI6ZnVu
Y3Rpb24oYSxiKXtyZXR1cm4gbmV3IEhhc2goT2JqZWN0LmZpbHRlcih0aGlzLGEsYikpOworK30s
ZXZlcnk6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gT2JqZWN0LmV2ZXJ5KHRoaXMsYSxiKTt9LHNvbWU6
ZnVuY3Rpb24oYSxiKXtyZXR1cm4gT2JqZWN0LnNvbWUodGhpcyxhLGIpO30sZ2V0S2V5czpmdW5j
dGlvbigpe3JldHVybiBPYmplY3Qua2V5cyh0aGlzKTt9LGdldFZhbHVlczpmdW5jdGlvbigpe3Jl
dHVybiBPYmplY3QudmFsdWVzKHRoaXMpOworK30sdG9RdWVyeVN0cmluZzpmdW5jdGlvbihhKXty
ZXR1cm4gT2JqZWN0LnRvUXVlcnlTdHJpbmcodGhpcyxhKTt9fSk7SGFzaC5leHRlbmQ9T2JqZWN0
LmFwcGVuZDtIYXNoLmFsaWFzKHtpbmRleE9mOiJrZXlPZiIsY29udGFpbnM6Imhhc1ZhbHVlIn0p
OyhmdW5jdGlvbigpe3ZhciBsPXRoaXMuZG9jdW1lbnQ7CisrdmFyIGo9bC53aW5kb3c9dGhpczt2
YXIgYj0xO3RoaXMuJHVpZD0oai5BY3RpdmVYT2JqZWN0KT9mdW5jdGlvbihlKXtyZXR1cm4oZS51
aWR8fChlLnVpZD1bYisrXSkpWzBdO306ZnVuY3Rpb24oZSl7cmV0dXJuIGUudWlkfHwoZS51aWQ9
YisrKTt9OyR1aWQoaik7JHVpZChsKTsKKyt2YXIgYT1uYXZpZ2F0b3IudXNlckFnZW50LnRvTG93
ZXJDYXNlKCksYz1uYXZpZ2F0b3IucGxhdGZvcm0udG9Mb3dlckNhc2UoKSxrPWEubWF0Y2goLyhv
cGVyYXxpZXxmaXJlZm94fGNocm9tZXx2ZXJzaW9uKVtcc1wvOl0oW1x3XGRcLl0rKT8uKj8oc2Fm
YXJpfHZlcnNpb25bXHNcLzpdKFtcd1xkXC5dKyl8JCkvKXx8W251bGwsInVua25vd24iLDBdLGc9
a1sxXT09ImllIiYmbC5kb2N1bWVudE1vZGU7CisrdmFyIHA9dGhpcy5Ccm93c2VyPXtleHRlbmQ6
RnVuY3Rpb24ucHJvdG90eXBlLmV4dGVuZCxuYW1lOihrWzFdPT0idmVyc2lvbiIpP2tbM106a1sx
XSx2ZXJzaW9uOmd8fHBhcnNlRmxvYXQoKGtbMV09PSJvcGVyYSImJmtbNF0pP2tbNF06a1syXSks
UGxhdGZvcm06e25hbWU6YS5tYXRjaCgvaXAoPzphZHxvZHxob25lKS8pPyJpb3MiOihhLm1hdGNo
KC8oPzp3ZWJvc3xhbmRyb2lkKS8pfHxjLm1hdGNoKC9tYWN8d2lufGxpbnV4Lyl8fFsib3RoZXIi
XSlbMF19LEZlYXR1cmVzOnt4cGF0aDohIShsLmV2YWx1YXRlKSxhaXI6ISEoai5ydW50aW1lKSxx
dWVyeTohIShsLnF1ZXJ5U2VsZWN0b3IpLGpzb246ISEoai5KU09OKX0sUGx1Z2luczp7fX07Cisr
cFtwLm5hbWVdPXRydWU7cFtwLm5hbWUrcGFyc2VJbnQocC52ZXJzaW9uLDEwKV09dHJ1ZTtwLlBs
YXRmb3JtW3AuUGxhdGZvcm0ubmFtZV09dHJ1ZTtwLlJlcXVlc3Q9KGZ1bmN0aW9uKCl7dmFyIHI9
ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisrfTt2YXIgcT1mdW5jdGlv
bigpe3JldHVybiBuZXcgQWN0aXZlWE9iamVjdCgiTVNYTUwyLlhNTEhUVFAiKTt9O3ZhciBlPWZ1
bmN0aW9uKCl7cmV0dXJuIG5ldyBBY3RpdmVYT2JqZWN0KCJNaWNyb3NvZnQuWE1MSFRUUCIpO307
cmV0dXJuIEZ1bmN0aW9uLmF0dGVtcHQoZnVuY3Rpb24oKXtyKCk7CisrcmV0dXJuIHI7fSxmdW5j
dGlvbigpe3EoKTtyZXR1cm4gcTt9LGZ1bmN0aW9uKCl7ZSgpO3JldHVybiBlO30pO30pKCk7cC5G
ZWF0dXJlcy54aHI9ISEocC5SZXF1ZXN0KTt2YXIgaT0oRnVuY3Rpb24uYXR0ZW1wdChmdW5jdGlv
bigpe3JldHVybiBuYXZpZ2F0b3IucGx1Z2luc1siU2hvY2t3YXZlIEZsYXNoIl0uZGVzY3JpcHRp
b247CisrfSxmdW5jdGlvbigpe3JldHVybiBuZXcgQWN0aXZlWE9iamVjdCgiU2hvY2t3YXZlRmxh
c2guU2hvY2t3YXZlRmxhc2giKS5HZXRWYXJpYWJsZSgiJHZlcnNpb24iKTt9KXx8IjAgcjAiKS5t
YXRjaCgvXGQrL2cpO3AuUGx1Z2lucy5GbGFzaD17dmVyc2lvbjpOdW1iZXIoaVswXXx8IjAuIitp
WzFdKXx8MCxidWlsZDpOdW1iZXIoaVsyXSl8fDB9OworK3AuZXhlYz1mdW5jdGlvbihxKXtpZigh
cSl7cmV0dXJuIHE7fWlmKGouZXhlY1NjcmlwdCl7ai5leGVjU2NyaXB0KHEpO31lbHNle3ZhciBl
PWwuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7ZS5zZXRBdHRyaWJ1dGUoInR5cGUiLCJ0ZXh0L2ph
dmFzY3JpcHQiKTtlLnRleHQ9cTsKKytsLmhlYWQuYXBwZW5kQ2hpbGQoZSk7bC5oZWFkLnJlbW92
ZUNoaWxkKGUpO31yZXR1cm4gcTt9O1N0cmluZy5pbXBsZW1lbnQoInN0cmlwU2NyaXB0cyIsZnVu
Y3Rpb24ocSl7dmFyIGU9IiI7dmFyIHI9dGhpcy5yZXBsYWNlKC88c2NyaXB0W14+XSo+KFtcc1xT
XSo/KTxcL3NjcmlwdD4vZ2ksZnVuY3Rpb24ocyx0KXtlKz10KyJcbiI7CisrcmV0dXJuIiI7fSk7
aWYocT09PXRydWUpe3AuZXhlYyhlKTt9ZWxzZXtpZih0eXBlT2YocSk9PSJmdW5jdGlvbiIpe3Eo
ZSxyKTt9fXJldHVybiByO30pO3AuZXh0ZW5kKHtEb2N1bWVudDp0aGlzLkRvY3VtZW50LFdpbmRv
dzp0aGlzLldpbmRvdyxFbGVtZW50OnRoaXMuRWxlbWVudCxFdmVudDp0aGlzLkV2ZW50fSk7Cisr
dGhpcy5XaW5kb3c9dGhpcy4kY29uc3RydWN0b3I9bmV3IFR5cGUoIldpbmRvdyIsZnVuY3Rpb24o
KXt9KTt0aGlzLiRmYW1pbHk9RnVuY3Rpb24uZnJvbSgid2luZG93IikuaGlkZSgpO1dpbmRvdy5t
aXJyb3IoZnVuY3Rpb24oZSxxKXtqW2VdPXE7fSk7dGhpcy5Eb2N1bWVudD1sLiRjb25zdHJ1Y3Rv
cj1uZXcgVHlwZSgiRG9jdW1lbnQiLGZ1bmN0aW9uKCl7fSk7CisrbC4kZmFtaWx5PUZ1bmN0aW9u
LmZyb20oImRvY3VtZW50IikuaGlkZSgpO0RvY3VtZW50Lm1pcnJvcihmdW5jdGlvbihlLHEpe2xb
ZV09cTt9KTtsLmh0bWw9bC5kb2N1bWVudEVsZW1lbnQ7aWYoIWwuaGVhZCl7bC5oZWFkPWwuZ2V0
RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXTsKKyt9aWYobC5leGVjQ29tbWFuZCl7dHJ5e2wu
ZXhlY0NvbW1hbmQoIkJhY2tncm91bmRJbWFnZUNhY2hlIixmYWxzZSx0cnVlKTt9Y2F0Y2goaCl7
fX1pZih0aGlzLmF0dGFjaEV2ZW50JiYhdGhpcy5hZGRFdmVudExpc3RlbmVyKXt2YXIgZD1mdW5j
dGlvbigpe3RoaXMuZGV0YWNoRXZlbnQoIm9udW5sb2FkIixkKTsKKytsLmhlYWQ9bC5odG1sPWwu
d2luZG93PW51bGw7fTt0aGlzLmF0dGFjaEV2ZW50KCJvbnVubG9hZCIsZCk7fXZhciBuPUFycmF5
LmZyb207dHJ5e24obC5odG1sLmNoaWxkTm9kZXMpO31jYXRjaChoKXtBcnJheS5mcm9tPWZ1bmN0
aW9uKHEpe2lmKHR5cGVvZiBxIT0ic3RyaW5nIiYmVHlwZS5pc0VudW1lcmFibGUocSkmJnR5cGVP
ZihxKSE9ImFycmF5Iil7dmFyIGU9cS5sZW5ndGgscj1uZXcgQXJyYXkoZSk7Cisrd2hpbGUoZS0t
KXtyW2VdPXFbZV07fXJldHVybiByO31yZXR1cm4gbihxKTt9O3ZhciBtPUFycmF5LnByb3RvdHlw
ZSxvPW0uc2xpY2U7WyJwb3AiLCJwdXNoIiwicmV2ZXJzZSIsInNoaWZ0Iiwic29ydCIsInNwbGlj
ZSIsInVuc2hpZnQiLCJjb25jYXQiLCJqb2luIiwic2xpY2UiXS5lYWNoKGZ1bmN0aW9uKGUpe3Zh
ciBxPW1bZV07CisrQXJyYXlbZV09ZnVuY3Rpb24ocil7cmV0dXJuIHEuYXBwbHkoQXJyYXkuZnJv
bShyKSxvLmNhbGwoYXJndW1lbnRzLDEpKTt9O30pO31pZihwLlBsYXRmb3JtLmlvcyl7cC5QbGF0
Zm9ybS5pcG9kPXRydWU7fXAuRW5naW5lPXt9O3ZhciBmPWZ1bmN0aW9uKHEsZSl7cC5FbmdpbmUu
bmFtZT1xOworK3AuRW5naW5lW3ErZV09dHJ1ZTtwLkVuZ2luZS52ZXJzaW9uPWU7fTtpZihwLmll
KXtwLkVuZ2luZS50cmlkZW50PXRydWU7c3dpdGNoKHAudmVyc2lvbil7Y2FzZSA2OmYoInRyaWRl
bnQiLDQpO2JyZWFrO2Nhc2UgNzpmKCJ0cmlkZW50Iiw1KTticmVhaztjYXNlIDg6ZigidHJpZGVu
dCIsNik7CisrfX1pZihwLmZpcmVmb3gpe3AuRW5naW5lLmdlY2tvPXRydWU7aWYocC52ZXJzaW9u
Pj0zKXtmKCJnZWNrbyIsMTkpO31lbHNle2YoImdlY2tvIiwxOCk7fX1pZihwLnNhZmFyaXx8cC5j
aHJvbWUpe3AuRW5naW5lLndlYmtpdD10cnVlO3N3aXRjaChwLnZlcnNpb24pe2Nhc2UgMjpmKCJ3
ZWJraXQiLDQxOSk7CisrYnJlYWs7Y2FzZSAzOmYoIndlYmtpdCIsNDIwKTticmVhaztjYXNlIDQ6
Zigid2Via2l0Iiw1MjUpO319aWYocC5vcGVyYSl7cC5FbmdpbmUucHJlc3RvPXRydWU7aWYocC52
ZXJzaW9uPj05LjYpe2YoInByZXN0byIsOTYwKTt9ZWxzZXtpZihwLnZlcnNpb24+PTkuNSl7Zigi
cHJlc3RvIiw5NTApOworK31lbHNle2YoInByZXN0byIsOTI1KTt9fX1pZihwLm5hbWU9PSJ1bmtu
b3duIil7c3dpdGNoKChhLm1hdGNoKC8oPzp3ZWJraXR8a2h0bWx8Z2Vja28pLyl8fFtdKVswXSl7
Y2FzZSJ3ZWJraXQiOmNhc2Uia2h0bWwiOnAuRW5naW5lLndlYmtpdD10cnVlO2JyZWFrO2Nhc2Ui
Z2Vja28iOnAuRW5naW5lLmdlY2tvPXRydWU7CisrfX10aGlzLiRleGVjPXAuZXhlYzt9KSgpOyhm
dW5jdGlvbigpe3ZhciBiPXt9O3ZhciBhPXRoaXMuRE9NRXZlbnQ9bmV3IFR5cGUoIkRPTUV2ZW50
IixmdW5jdGlvbihjLGcpe2lmKCFnKXtnPXdpbmRvdzt9Yz1jfHxnLmV2ZW50O2lmKGMuJGV4dGVu
ZGVkKXtyZXR1cm4gYzsKKyt9dGhpcy5ldmVudD1jO3RoaXMuJGV4dGVuZGVkPXRydWU7dGhpcy5z
aGlmdD1jLnNoaWZ0S2V5O3RoaXMuY29udHJvbD1jLmN0cmxLZXk7dGhpcy5hbHQ9Yy5hbHRLZXk7
dGhpcy5tZXRhPWMubWV0YUtleTt2YXIgaT10aGlzLnR5cGU9Yy50eXBlO3ZhciBoPWMudGFyZ2V0
fHxjLnNyY0VsZW1lbnQ7Cisrd2hpbGUoaCYmaC5ub2RlVHlwZT09Myl7aD1oLnBhcmVudE5vZGU7
fXRoaXMudGFyZ2V0PWRvY3VtZW50LmlkKGgpO2lmKGkuaW5kZXhPZigia2V5Iik9PTApe3ZhciBk
PXRoaXMuY29kZT0oYy53aGljaHx8Yy5rZXlDb2RlKTt0aGlzLmtleT1iW2RdfHxPYmplY3Qua2V5
T2YoRXZlbnQuS2V5cyxkKTsKKytpZihpPT0ia2V5ZG93biIpe2lmKGQ+MTExJiZkPDEyNCl7dGhp
cy5rZXk9ImYiKyhkLTExMSk7fWVsc2V7aWYoZD45NSYmZDwxMDYpe3RoaXMua2V5PWQtOTY7fX19
aWYodGhpcy5rZXk9PW51bGwpe3RoaXMua2V5PVN0cmluZy5mcm9tQ2hhckNvZGUoZCkudG9Mb3dl
ckNhc2UoKTsKKyt9fWVsc2V7aWYoaT09ImNsaWNrInx8aT09ImRibGNsaWNrInx8aT09ImNvbnRl
eHRtZW51Inx8aT09IkRPTU1vdXNlU2Nyb2xsInx8aS5pbmRleE9mKCJtb3VzZSIpPT0wKXt2YXIg
aj1nLmRvY3VtZW50O2o9KCFqLmNvbXBhdE1vZGV8fGouY29tcGF0TW9kZT09IkNTUzFDb21wYXQi
KT9qLmh0bWw6ai5ib2R5OworK3RoaXMucGFnZT17eDooYy5wYWdlWCE9bnVsbCk/Yy5wYWdlWDpj
LmNsaWVudFgrai5zY3JvbGxMZWZ0LHk6KGMucGFnZVkhPW51bGwpP2MucGFnZVk6Yy5jbGllbnRZ
K2ouc2Nyb2xsVG9wfTt0aGlzLmNsaWVudD17eDooYy5wYWdlWCE9bnVsbCk/Yy5wYWdlWC1nLnBh
Z2VYT2Zmc2V0OmMuY2xpZW50WCx5OihjLnBhZ2VZIT1udWxsKT9jLnBhZ2VZLWcucGFnZVlPZmZz
ZXQ6Yy5jbGllbnRZfTsKKytpZihpPT0iRE9NTW91c2VTY3JvbGwifHxpPT0ibW91c2V3aGVlbCIp
e3RoaXMud2hlZWw9KGMud2hlZWxEZWx0YSk/Yy53aGVlbERlbHRhLzEyMDotKGMuZGV0YWlsfHww
KS8zO310aGlzLnJpZ2h0Q2xpY2s9KGMud2hpY2g9PTN8fGMuYnV0dG9uPT0yKTtpZihpPT0ibW91
c2VvdmVyInx8aT09Im1vdXNlb3V0Iil7dmFyIGs9Yy5yZWxhdGVkVGFyZ2V0fHxjWyhpPT0ibW91
c2VvdmVyIj8iZnJvbSI6InRvIikrIkVsZW1lbnQiXTsKKyt3aGlsZShrJiZrLm5vZGVUeXBlPT0z
KXtrPWsucGFyZW50Tm9kZTt9dGhpcy5yZWxhdGVkVGFyZ2V0PWRvY3VtZW50LmlkKGspO319ZWxz
ZXtpZihpLmluZGV4T2YoInRvdWNoIik9PTB8fGkuaW5kZXhPZigiZ2VzdHVyZSIpPT0wKXt0aGlz
LnJvdGF0aW9uPWMucm90YXRpb247CisrdGhpcy5zY2FsZT1jLnNjYWxlO3RoaXMudGFyZ2V0VG91
Y2hlcz1jLnRhcmdldFRvdWNoZXM7dGhpcy5jaGFuZ2VkVG91Y2hlcz1jLmNoYW5nZWRUb3VjaGVz
O3ZhciBmPXRoaXMudG91Y2hlcz1jLnRvdWNoZXM7aWYoZiYmZlswXSl7dmFyIGU9ZlswXTt0aGlz
LnBhZ2U9e3g6ZS5wYWdlWCx5OmUucGFnZVl9OworK3RoaXMuY2xpZW50PXt4OmUuY2xpZW50WCx5
OmUuY2xpZW50WX07fX19fWlmKCF0aGlzLmNsaWVudCl7dGhpcy5jbGllbnQ9e307fWlmKCF0aGlz
LnBhZ2Upe3RoaXMucGFnZT17fTt9fSk7YS5pbXBsZW1lbnQoe3N0b3A6ZnVuY3Rpb24oKXtyZXR1
cm4gdGhpcy5wcmV2ZW50RGVmYXVsdCgpLnN0b3BQcm9wYWdhdGlvbigpOworK30sc3RvcFByb3Bh
Z2F0aW9uOmZ1bmN0aW9uKCl7aWYodGhpcy5ldmVudC5zdG9wUHJvcGFnYXRpb24pe3RoaXMuZXZl
bnQuc3RvcFByb3BhZ2F0aW9uKCk7fWVsc2V7dGhpcy5ldmVudC5jYW5jZWxCdWJibGU9dHJ1ZTt9
cmV0dXJuIHRoaXM7fSxwcmV2ZW50RGVmYXVsdDpmdW5jdGlvbigpe2lmKHRoaXMuZXZlbnQucHJl
dmVudERlZmF1bHQpe3RoaXMuZXZlbnQucHJldmVudERlZmF1bHQoKTsKKyt9ZWxzZXt0aGlzLmV2
ZW50LnJldHVyblZhbHVlPWZhbHNlO31yZXR1cm4gdGhpczt9fSk7YS5kZWZpbmVLZXk9ZnVuY3Rp
b24oZCxjKXtiW2RdPWM7cmV0dXJuIHRoaXM7fTthLmRlZmluZUtleXM9YS5kZWZpbmVLZXkub3Zl
cmxvYWRTZXR0ZXIodHJ1ZSk7YS5kZWZpbmVLZXlzKHsiMzgiOiJ1cCIsIjQwIjoiZG93biIsIjM3
IjoibGVmdCIsIjM5IjoicmlnaHQiLCIyNyI6ImVzYyIsIjMyIjoic3BhY2UiLCI4IjoiYmFja3Nw
YWNlIiwiOSI6InRhYiIsIjQ2IjoiZGVsZXRlIiwiMTMiOiJlbnRlciJ9KTsKKyt9KSgpO3ZhciBF
dmVudD1ET01FdmVudDtFdmVudC5LZXlzPXt9O0V2ZW50LktleXM9bmV3IEhhc2goRXZlbnQuS2V5
cyk7KGZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5DbGFzcz1uZXcgVHlwZSgiQ2xhc3MiLGZ1bmN0aW9u
KGgpe2lmKGluc3RhbmNlT2YoaCxGdW5jdGlvbikpe2g9e2luaXRpYWxpemU6aH07CisrfXZhciBn
PWZ1bmN0aW9uKCl7ZSh0aGlzKTtpZihnLiRwcm90b3R5cGluZyl7cmV0dXJuIHRoaXM7fXRoaXMu
JGNhbGxlcj1udWxsO3ZhciBpPSh0aGlzLmluaXRpYWxpemUpP3RoaXMuaW5pdGlhbGl6ZS5hcHBs
eSh0aGlzLGFyZ3VtZW50cyk6dGhpczt0aGlzLiRjYWxsZXI9dGhpcy5jYWxsZXI9bnVsbDsKKyty
ZXR1cm4gaTt9LmV4dGVuZCh0aGlzKS5pbXBsZW1lbnQoaCk7Zy4kY29uc3RydWN0b3I9YTtnLnBy
b3RvdHlwZS4kY29uc3RydWN0b3I9ZztnLnByb3RvdHlwZS5wYXJlbnQ9YztyZXR1cm4gZzt9KTt2
YXIgYz1mdW5jdGlvbigpe2lmKCF0aGlzLiRjYWxsZXIpe3Rocm93IG5ldyBFcnJvcignVGhlIG1l
dGhvZCAicGFyZW50IiBjYW5ub3QgYmUgY2FsbGVkLicpOworK312YXIgZz10aGlzLiRjYWxsZXIu
JG5hbWUsaD10aGlzLiRjYWxsZXIuJG93bmVyLnBhcmVudCxpPShoKT9oLnByb3RvdHlwZVtnXTpu
dWxsO2lmKCFpKXt0aHJvdyBuZXcgRXJyb3IoJ1RoZSBtZXRob2QgIicrZysnIiBoYXMgbm8gcGFy
ZW50LicpO31yZXR1cm4gaS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7CisrfTt2YXIgZT1mdW5jdGlv
bihnKXtmb3IodmFyIGggaW4gZyl7dmFyIGo9Z1toXTtzd2l0Y2godHlwZU9mKGopKXtjYXNlIm9i
amVjdCI6dmFyIGk9ZnVuY3Rpb24oKXt9O2kucHJvdG90eXBlPWo7Z1toXT1lKG5ldyBpKTticmVh
aztjYXNlImFycmF5IjpnW2hdPWouY2xvbmUoKTsKKyticmVhazt9fXJldHVybiBnO307dmFyIGI9
ZnVuY3Rpb24oZyxoLGope2lmKGouJG9yaWdpbil7aj1qLiRvcmlnaW47fXZhciBpPWZ1bmN0aW9u
KCl7aWYoai4kcHJvdGVjdGVkJiZ0aGlzLiRjYWxsZXI9PW51bGwpe3Rocm93IG5ldyBFcnJvcign
VGhlIG1ldGhvZCAiJytoKyciIGNhbm5vdCBiZSBjYWxsZWQuJyk7CisrfXZhciBsPXRoaXMuY2Fs
bGVyLG09dGhpcy4kY2FsbGVyO3RoaXMuY2FsbGVyPW07dGhpcy4kY2FsbGVyPWk7dmFyIGs9ai5h
cHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy4kY2FsbGVyPW07dGhpcy5jYWxsZXI9bDtyZXR1cm4g
azt9LmV4dGVuZCh7JG93bmVyOmcsJG9yaWdpbjpqLCRuYW1lOmh9KTsKKytyZXR1cm4gaTt9O3Zh
ciBmPWZ1bmN0aW9uKGgsaSxnKXtpZihhLk11dGF0b3JzLmhhc093blByb3BlcnR5KGgpKXtpPWEu
TXV0YXRvcnNbaF0uY2FsbCh0aGlzLGkpO2lmKGk9PW51bGwpe3JldHVybiB0aGlzO319aWYodHlw
ZU9mKGkpPT0iZnVuY3Rpb24iKXtpZihpLiRoaWRkZW4pe3JldHVybiB0aGlzOworK310aGlzLnBy
b3RvdHlwZVtoXT0oZyk/aTpiKHRoaXMsaCxpKTt9ZWxzZXtPYmplY3QubWVyZ2UodGhpcy5wcm90
b3R5cGUsaCxpKTt9cmV0dXJuIHRoaXM7fTt2YXIgZD1mdW5jdGlvbihnKXtnLiRwcm90b3R5cGlu
Zz10cnVlO3ZhciBoPW5ldyBnO2RlbGV0ZSBnLiRwcm90b3R5cGluZzsKKytyZXR1cm4gaDt9O2Eu
aW1wbGVtZW50KCJpbXBsZW1lbnQiLGYub3ZlcmxvYWRTZXR0ZXIoKSk7YS5NdXRhdG9ycz17RXh0
ZW5kczpmdW5jdGlvbihnKXt0aGlzLnBhcmVudD1nO3RoaXMucHJvdG90eXBlPWQoZyk7fSxJbXBs
ZW1lbnRzOmZ1bmN0aW9uKGcpe0FycmF5LmZyb20oZykuZWFjaChmdW5jdGlvbihqKXt2YXIgaD1u
ZXcgajsKKytmb3IodmFyIGkgaW4gaCl7Zi5jYWxsKHRoaXMsaSxoW2ldLHRydWUpO319LHRoaXMp
O319O30pKCk7KGZ1bmN0aW9uKCl7dGhpcy5DaGFpbj1uZXcgQ2xhc3MoeyRjaGFpbjpbXSxjaGFp
bjpmdW5jdGlvbigpe3RoaXMuJGNoYWluLmFwcGVuZChBcnJheS5mbGF0dGVuKGFyZ3VtZW50cykp
OworK3JldHVybiB0aGlzO30sY2FsbENoYWluOmZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuJGNoYWlu
Lmxlbmd0aCk/dGhpcy4kY2hhaW4uc2hpZnQoKS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6ZmFsc2U7
fSxjbGVhckNoYWluOmZ1bmN0aW9uKCl7dGhpcy4kY2hhaW4uZW1wdHkoKTsKKytyZXR1cm4gdGhp
czt9fSk7dmFyIGE9ZnVuY3Rpb24oYil7cmV0dXJuIGIucmVwbGFjZSgvXm9uKFtBLVpdKS8sZnVu
Y3Rpb24oYyxkKXtyZXR1cm4gZC50b0xvd2VyQ2FzZSgpO30pO307dGhpcy5FdmVudHM9bmV3IENs
YXNzKHskZXZlbnRzOnt9LGFkZEV2ZW50OmZ1bmN0aW9uKGQsYyxiKXtkPWEoZCk7CisraWYoYz09
JGVtcHR5KXtyZXR1cm4gdGhpczt9dGhpcy4kZXZlbnRzW2RdPSh0aGlzLiRldmVudHNbZF18fFtd
KS5pbmNsdWRlKGMpO2lmKGIpe2MuaW50ZXJuYWw9dHJ1ZTt9cmV0dXJuIHRoaXM7fSxhZGRFdmVu
dHM6ZnVuY3Rpb24oYil7Zm9yKHZhciBjIGluIGIpe3RoaXMuYWRkRXZlbnQoYyxiW2NdKTsKKyt9
cmV0dXJuIHRoaXM7fSxmaXJlRXZlbnQ6ZnVuY3Rpb24oZSxjLGIpe2U9YShlKTt2YXIgZD10aGlz
LiRldmVudHNbZV07aWYoIWQpe3JldHVybiB0aGlzO31jPUFycmF5LmZyb20oYyk7ZC5lYWNoKGZ1
bmN0aW9uKGYpe2lmKGIpe2YuZGVsYXkoYix0aGlzLGMpO31lbHNle2YuYXBwbHkodGhpcyxjKTsK
Kyt9fSx0aGlzKTtyZXR1cm4gdGhpczt9LHJlbW92ZUV2ZW50OmZ1bmN0aW9uKGUsZCl7ZT1hKGUp
O3ZhciBjPXRoaXMuJGV2ZW50c1tlXTtpZihjJiYhZC5pbnRlcm5hbCl7dmFyIGI9Yy5pbmRleE9m
KGQpO2lmKGIhPS0xKXtkZWxldGUgY1tiXTt9fXJldHVybiB0aGlzOworK30scmVtb3ZlRXZlbnRz
OmZ1bmN0aW9uKGQpe3ZhciBlO2lmKHR5cGVPZihkKT09Im9iamVjdCIpe2ZvcihlIGluIGQpe3Ro
aXMucmVtb3ZlRXZlbnQoZSxkW2VdKTt9cmV0dXJuIHRoaXM7fWlmKGQpe2Q9YShkKTt9Zm9yKGUg
aW4gdGhpcy4kZXZlbnRzKXtpZihkJiZkIT1lKXtjb250aW51ZTsKKyt9dmFyIGM9dGhpcy4kZXZl
bnRzW2VdO2Zvcih2YXIgYj1jLmxlbmd0aDtiLS07KXtpZihiIGluIGMpe3RoaXMucmVtb3ZlRXZl
bnQoZSxjW2JdKTt9fX1yZXR1cm4gdGhpczt9fSk7dGhpcy5PcHRpb25zPW5ldyBDbGFzcyh7c2V0
T3B0aW9uczpmdW5jdGlvbigpe3ZhciBiPXRoaXMub3B0aW9ucz1PYmplY3QubWVyZ2UuYXBwbHko
bnVsbCxbe30sdGhpcy5vcHRpb25zXS5hcHBlbmQoYXJndW1lbnRzKSk7CisraWYodGhpcy5hZGRF
dmVudCl7Zm9yKHZhciBjIGluIGIpe2lmKHR5cGVPZihiW2NdKSE9ImZ1bmN0aW9uInx8ISgvXm9u
W0EtWl0vKS50ZXN0KGMpKXtjb250aW51ZTt9dGhpcy5hZGRFdmVudChjLGJbY10pO2RlbGV0ZSBi
W2NdO319cmV0dXJuIHRoaXM7fX0pO30pKCk7CisrKGZ1bmN0aW9uKCl7dmFyIGssbixsLGcsYT17
fSxjPXt9LG09L1xcL2c7dmFyIGU9ZnVuY3Rpb24ocSxwKXtpZihxPT1udWxsKXtyZXR1cm4gbnVs
bDt9aWYocS5TbGljaz09PXRydWUpe3JldHVybiBxO31xPSgiIitxKS5yZXBsYWNlKC9eXHMrfFxz
KyQvZywiIik7Zz0hIXA7CisrdmFyIG89KGcpP2M6YTtpZihvW3FdKXtyZXR1cm4gb1txXTt9az17
U2xpY2s6dHJ1ZSxleHByZXNzaW9uczpbXSxyYXc6cSxyZXZlcnNlOmZ1bmN0aW9uKCl7cmV0dXJu
IGUodGhpcy5yYXcsdHJ1ZSk7fX07bj0tMTt3aGlsZShxIT0ocT1xLnJlcGxhY2UoaixiKSkpe31r
Lmxlbmd0aD1rLmV4cHJlc3Npb25zLmxlbmd0aDsKKytyZXR1cm4gb1trLnJhd109KGcpP2goayk6
azt9O3ZhciBpPWZ1bmN0aW9uKG8pe2lmKG89PT0iISIpe3JldHVybiIgIjt9ZWxzZXtpZihvPT09
IiAiKXtyZXR1cm4iISI7fWVsc2V7aWYoKC9eIS8pLnRlc3Qobykpe3JldHVybiBvLnJlcGxhY2Uo
L14hLywiIik7fWVsc2V7cmV0dXJuIiEiK287CisrfX19fTt2YXIgaD1mdW5jdGlvbih1KXt2YXIg
cj11LmV4cHJlc3Npb25zO2Zvcih2YXIgcD0wO3A8ci5sZW5ndGg7cCsrKXt2YXIgdD1yW3BdO3Zh
ciBxPXtwYXJ0czpbXSx0YWc6IioiLGNvbWJpbmF0b3I6aSh0WzBdLmNvbWJpbmF0b3IpfTtmb3Io
dmFyIG89MDtvPHQubGVuZ3RoOworK28rKyl7dmFyIHM9dFtvXTtpZighcy5yZXZlcnNlQ29tYmlu
YXRvcil7cy5yZXZlcnNlQ29tYmluYXRvcj0iICI7fXMuY29tYmluYXRvcj1zLnJldmVyc2VDb21i
aW5hdG9yO2RlbGV0ZSBzLnJldmVyc2VDb21iaW5hdG9yO310LnJldmVyc2UoKS5wdXNoKHEpO31y
ZXR1cm4gdTsKKyt9O3ZhciBmPWZ1bmN0aW9uKG8pe3JldHVybiBvLnJlcGxhY2UoL1stW1xde30o
KSorPy5cXF4kfCwjXHNdL2csZnVuY3Rpb24ocCl7cmV0dXJuIlxcIitwO30pO307dmFyIGo9bmV3
IFJlZ0V4cCgiXig/OlxccyooLClcXHMqfFxccyooPGNvbWJpbmF0b3I+KylcXHMqfChcXHMrKXwo
PHVuaWNvZGU+K3xcXCopfFxcIyg8dW5pY29kZT4rKXxcXC4oPHVuaWNvZGU+Kyl8XFxbXFxzKig8
dW5pY29kZTE+KykoPzpcXHMqKFsqXiQhfnxdPz0pKD86XFxzKig/OihbXCInXT8pKC4qPylcXDkp
KSk/XFxzKlxcXSg/IVxcXSl8KDorKSg8dW5pY29kZT4rKSg/OlxcKCg/Oig/OihbXCInXSkoW15c
XDEzXSopXFwxMyl8KCg/OlxcKFteKV0rXFwpfFteKCldKikrKSlcXCkpPykiLnJlcGxhY2UoLzxj
b21iaW5hdG9yPi8sIlsiK2YoIj4rfmAhQCQlXiY9e31cXDs8LyIpKyJdIikucmVwbGFjZSgvPHVu
aWNvZGU+L2csIig/OltcXHdcXHUwMGExLVxcdUZGRkYtXXxcXFxcW15cXHMwLTlhLWZdKSIpLnJl
cGxhY2UoLzx1bmljb2RlMT4vZywiKD86WzpcXHdcXHUwMGExLVxcdUZGRkYtXXxcXFxcW15cXHMw
LTlhLWZdKSIpKTsKKytmdW5jdGlvbiBiKHgscyxELHoscixDLHEsQixBLHksdSxGLEcsdixwLHcp
e2lmKHN8fG49PT0tMSl7ay5leHByZXNzaW9uc1srK25dPVtdO2w9LTE7aWYocyl7cmV0dXJuIiI7
fX1pZihEfHx6fHxsPT09LTEpe0Q9RHx8IiAiO3ZhciB0PWsuZXhwcmVzc2lvbnNbbl07CisraWYo
ZyYmdFtsXSl7dFtsXS5yZXZlcnNlQ29tYmluYXRvcj1pKEQpO310WysrbF09e2NvbWJpbmF0b3I6
RCx0YWc6IioifTt9dmFyIG89ay5leHByZXNzaW9uc1tuXVtsXTtpZihyKXtvLnRhZz1yLnJlcGxh
Y2UobSwiIik7fWVsc2V7aWYoQyl7by5pZD1DLnJlcGxhY2UobSwiIik7CisrfWVsc2V7aWYocSl7
cT1xLnJlcGxhY2UobSwiIik7aWYoIW8uY2xhc3NMaXN0KXtvLmNsYXNzTGlzdD1bXTt9aWYoIW8u
Y2xhc3Nlcyl7by5jbGFzc2VzPVtdO31vLmNsYXNzTGlzdC5wdXNoKHEpO28uY2xhc3Nlcy5wdXNo
KHt2YWx1ZTpxLHJlZ2V4cDpuZXcgUmVnRXhwKCIoXnxcXHMpIitmKHEpKyIoXFxzfCQpIil9KTsK
Kyt9ZWxzZXtpZihHKXt3PXd8fHA7dz13P3cucmVwbGFjZShtLCIiKTpudWxsO2lmKCFvLnBzZXVk
b3Mpe28ucHNldWRvcz1bXTt9by5wc2V1ZG9zLnB1c2goe2tleTpHLnJlcGxhY2UobSwiIiksdmFs
dWU6dyx0eXBlOkYubGVuZ3RoPT0xPyJjbGFzcyI6ImVsZW1lbnQifSk7CisrfWVsc2V7aWYoQil7
Qj1CLnJlcGxhY2UobSwiIik7dT0odXx8IiIpLnJlcGxhY2UobSwiIik7dmFyIEUsSDtzd2l0Y2go
QSl7Y2FzZSJePSI6SD1uZXcgUmVnRXhwKCJeIitmKHUpKTticmVhaztjYXNlIiQ9IjpIPW5ldyBS
ZWdFeHAoZih1KSsiJCIpO2JyZWFrO2Nhc2Uifj0iOkg9bmV3IFJlZ0V4cCgiKF58XFxzKSIrZih1
KSsiKFxcc3wkKSIpOworK2JyZWFrO2Nhc2UifD0iOkg9bmV3IFJlZ0V4cCgiXiIrZih1KSsiKC18
JCkiKTticmVhaztjYXNlIj0iOkU9ZnVuY3Rpb24oSSl7cmV0dXJuIHU9PUk7fTticmVhaztjYXNl
Iio9IjpFPWZ1bmN0aW9uKEkpe3JldHVybiBJJiZJLmluZGV4T2YodSk+LTE7fTticmVhazsKKytj
YXNlIiE9IjpFPWZ1bmN0aW9uKEkpe3JldHVybiB1IT1JO307YnJlYWs7ZGVmYXVsdDpFPWZ1bmN0
aW9uKEkpe3JldHVybiAhIUk7fTt9aWYodT09IiImJigvXlsqJF5dPSQvKS50ZXN0KEEpKXtFPWZ1
bmN0aW9uKCl7cmV0dXJuIGZhbHNlO307fWlmKCFFKXtFPWZ1bmN0aW9uKEkpe3JldHVybiBJJiZI
LnRlc3QoSSk7CisrfTt9aWYoIW8uYXR0cmlidXRlcyl7by5hdHRyaWJ1dGVzPVtdO31vLmF0dHJp
YnV0ZXMucHVzaCh7a2V5OkIsb3BlcmF0b3I6QSx2YWx1ZTp1LHRlc3Q6RX0pO319fX19cmV0dXJu
IiI7fXZhciBkPSh0aGlzLlNsaWNrfHx7fSk7ZC5wYXJzZT1mdW5jdGlvbihvKXtyZXR1cm4gZShv
KTsKKyt9O2QuZXNjYXBlUmVnRXhwPWY7aWYoIXRoaXMuU2xpY2spe3RoaXMuU2xpY2s9ZDt9fSku
YXBwbHkoKHR5cGVvZiBleHBvcnRzIT0idW5kZWZpbmVkIik/ZXhwb3J0czp0aGlzKTsoZnVuY3Rp
b24oKXt2YXIgaz17fSxtPXt9LGQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZzsKKytrLmlzTmF0
aXZlQ29kZT1mdW5jdGlvbihjKXtyZXR1cm4oL1x7XHMqXFtuYXRpdmUgY29kZVxdXHMqXH0vKS50
ZXN0KCIiK2MpO307ay5pc1hNTD1mdW5jdGlvbihjKXtyZXR1cm4oISFjLnhtbFZlcnNpb24pfHwo
ISFjLnhtbCl8fChkLmNhbGwoYyk9PSJbb2JqZWN0IFhNTERvY3VtZW50XSIpfHwoYy5ub2RlVHlw
ZT09OSYmYy5kb2N1bWVudEVsZW1lbnQubm9kZU5hbWUhPSJIVE1MIik7CisrfTtrLnNldERvY3Vt
ZW50PWZ1bmN0aW9uKHgpe3ZhciB1PXgubm9kZVR5cGU7aWYodT09OSl7fWVsc2V7aWYodSl7eD14
Lm93bmVyRG9jdW1lbnQ7fWVsc2V7aWYoeC5uYXZpZ2F0b3Ipe3g9eC5kb2N1bWVudDt9ZWxzZXty
ZXR1cm47fX19aWYodGhpcy5kb2N1bWVudD09PXgpe3JldHVybjsKKyt9dGhpcy5kb2N1bWVudD14
O3ZhciB6PXguZG9jdW1lbnRFbGVtZW50LHY9dGhpcy5nZXRVSURYTUwoeikscD1tW3ZdLEI7aWYo
cCl7Zm9yKEIgaW4gcCl7dGhpc1tCXT1wW0JdO31yZXR1cm47fXA9bVt2XT17fTtwLnJvb3Q9ejtw
LmlzWE1MRG9jdW1lbnQ9dGhpcy5pc1hNTCh4KTsKKytwLmJyb2tlblN0YXJHRUJUTj1wLnN0YXJT
ZWxlY3RzQ2xvc2VkUVNBPXAuaWRHZXRzTmFtZT1wLmJyb2tlbk1peGVkQ2FzZVFTQT1wLmJyb2tl
bkdFQkNOPXAuYnJva2VuQ2hlY2tlZFFTQT1wLmJyb2tlbkVtcHR5QXR0cmlidXRlUVNBPXAuaXNI
VE1MRG9jdW1lbnQ9cC5uYXRpdmVNYXRjaGVzU2VsZWN0b3I9ZmFsc2U7CisrdmFyIG4sbyx5LHIs
czt2YXIgdCxjPSJzbGlja191bmlxdWVpZCI7dmFyIEE9eC5jcmVhdGVFbGVtZW50KCJkaXYiKTt2
YXIgcT14LmJvZHl8fHguZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXXx8ejtxLmFwcGVu
ZENoaWxkKEEpO3RyeXtBLmlubmVySFRNTD0nPGEgaWQ9IicrYysnIj48L2E+JzsKKytwLmlzSFRN
TERvY3VtZW50PSEheC5nZXRFbGVtZW50QnlJZChjKTt9Y2F0Y2godyl7fWlmKHAuaXNIVE1MRG9j
dW1lbnQpe0Euc3R5bGUuZGlzcGxheT0ibm9uZSI7QS5hcHBlbmRDaGlsZCh4LmNyZWF0ZUNvbW1l
bnQoIiIpKTtvPShBLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikubGVuZ3RoPjEpOworK3RyeXtB
LmlubmVySFRNTD0iZm9vPC9mb28+Ijt0PUEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKTtuPSh0
JiYhIXQubGVuZ3RoJiZ0WzBdLm5vZGVOYW1lLmNoYXJBdCgwKT09Ii8iKTt9Y2F0Y2godyl7fXAu
YnJva2VuU3RhckdFQlROPW98fG47dHJ5e0EuaW5uZXJIVE1MPSc8YSBuYW1lPSInK2MrJyI+PC9h
PjxiIGlkPSInK2MrJyI+PC9iPic7CisrcC5pZEdldHNOYW1lPXguZ2V0RWxlbWVudEJ5SWQoYyk9
PT1BLmZpcnN0Q2hpbGQ7fWNhdGNoKHcpe31pZihBLmdldEVsZW1lbnRzQnlDbGFzc05hbWUpe3Ry
eXtBLmlubmVySFRNTD0nPGEgY2xhc3M9ImYiPjwvYT48YSBjbGFzcz0iYiI+PC9hPic7QS5nZXRF
bGVtZW50c0J5Q2xhc3NOYW1lKCJiIikubGVuZ3RoOworK0EuZmlyc3RDaGlsZC5jbGFzc05hbWU9
ImIiO3I9KEEuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiYiIpLmxlbmd0aCE9Mik7fWNhdGNoKHcp
e310cnl7QS5pbm5lckhUTUw9JzxhIGNsYXNzPSJhIj48L2E+PGEgY2xhc3M9ImYgYiBhIj48L2E+
Jzt5PShBLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImEiKS5sZW5ndGghPTIpOworK31jYXRjaCh3
KXt9cC5icm9rZW5HRUJDTj1yfHx5O31pZihBLnF1ZXJ5U2VsZWN0b3JBbGwpe3RyeXtBLmlubmVy
SFRNTD0iZm9vPC9mb28+Ijt0PUEucXVlcnlTZWxlY3RvckFsbCgiKiIpO3Auc3RhclNlbGVjdHND
bG9zZWRRU0E9KHQmJiEhdC5sZW5ndGgmJnRbMF0ubm9kZU5hbWUuY2hhckF0KDApPT0iLyIpOwor
K31jYXRjaCh3KXt9dHJ5e0EuaW5uZXJIVE1MPSc8YSBjbGFzcz0iTWlYIj48L2E+JztwLmJyb2tl
bk1peGVkQ2FzZVFTQT0hQS5xdWVyeVNlbGVjdG9yQWxsKCIuTWlYIikubGVuZ3RoO31jYXRjaCh3
KXt9dHJ5e0EuaW5uZXJIVE1MPSc8c2VsZWN0PjxvcHRpb24gc2VsZWN0ZWQ9InNlbGVjdGVkIj5h
PC9vcHRpb24+PC9zZWxlY3Q+JzsKKytwLmJyb2tlbkNoZWNrZWRRU0E9KEEucXVlcnlTZWxlY3Rv
ckFsbCgiOmNoZWNrZWQiKS5sZW5ndGg9PTApO31jYXRjaCh3KXt9dHJ5e0EuaW5uZXJIVE1MPSc8
YSBjbGFzcz0iIj48L2E+JztwLmJyb2tlbkVtcHR5QXR0cmlidXRlUVNBPShBLnF1ZXJ5U2VsZWN0
b3JBbGwoJ1tjbGFzcyo9IiJdJykubGVuZ3RoIT0wKTsKKyt9Y2F0Y2godyl7fX10cnl7QS5pbm5l
ckhUTUw9Jzxmb3JtIGFjdGlvbj0icyI+PGlucHV0IGlkPSJhY3Rpb24iLz48L2Zvcm0+JztzPShB
LmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJhY3Rpb24iKSE9InMiKTt9Y2F0Y2godyl7fXAubmF0
aXZlTWF0Y2hlc1NlbGVjdG9yPXoubWF0Y2hlc1NlbGVjdG9yfHx6Lm1vek1hdGNoZXNTZWxlY3Rv
cnx8ei53ZWJraXRNYXRjaGVzU2VsZWN0b3I7CisraWYocC5uYXRpdmVNYXRjaGVzU2VsZWN0b3Ip
e3RyeXtwLm5hdGl2ZU1hdGNoZXNTZWxlY3Rvci5jYWxsKHosIjpzbGljayIpO3AubmF0aXZlTWF0
Y2hlc1NlbGVjdG9yPW51bGw7fWNhdGNoKHcpe319fXRyeXt6LnNsaWNrX2V4cGFuZG89MTtkZWxl
dGUgei5zbGlja19leHBhbmRvOworK3AuZ2V0VUlEPXRoaXMuZ2V0VUlESFRNTDt9Y2F0Y2godyl7
cC5nZXRVSUQ9dGhpcy5nZXRVSURYTUw7fXEucmVtb3ZlQ2hpbGQoQSk7QT10PXE9bnVsbDtwLmdl
dEF0dHJpYnV0ZT0ocC5pc0hUTUxEb2N1bWVudCYmcyk/ZnVuY3Rpb24oRSxDKXt2YXIgRj10aGlz
LmF0dHJpYnV0ZUdldHRlcnNbQ107CisraWYoRil7cmV0dXJuIEYuY2FsbChFKTt9dmFyIEQ9RS5n
ZXRBdHRyaWJ1dGVOb2RlKEMpO3JldHVybihEKT9ELm5vZGVWYWx1ZTpudWxsO306ZnVuY3Rpb24o
RCxDKXt2YXIgRT10aGlzLmF0dHJpYnV0ZUdldHRlcnNbQ107cmV0dXJuKEUpP0UuY2FsbChEKTpE
LmdldEF0dHJpYnV0ZShDKTsKKyt9O3AuaGFzQXR0cmlidXRlPSh6JiZ0aGlzLmlzTmF0aXZlQ29k
ZSh6Lmhhc0F0dHJpYnV0ZSkpP2Z1bmN0aW9uKEQsQyl7cmV0dXJuIEQuaGFzQXR0cmlidXRlKEMp
O306ZnVuY3Rpb24oRCxDKXtEPUQuZ2V0QXR0cmlidXRlTm9kZShDKTtyZXR1cm4gISEoRCYmKEQu
c3BlY2lmaWVkfHxELm5vZGVWYWx1ZSkpOworK307cC5jb250YWlucz0oeiYmdGhpcy5pc05hdGl2
ZUNvZGUoei5jb250YWlucykpP2Z1bmN0aW9uKEMsRCl7cmV0dXJuIEMuY29udGFpbnMoRCk7fToo
eiYmei5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbik/ZnVuY3Rpb24oQyxEKXtyZXR1cm4gQz09PUR8
fCEhKEMuY29tcGFyZURvY3VtZW50UG9zaXRpb24oRCkmMTYpOworK306ZnVuY3Rpb24oQyxEKXtp
ZihEKXtkb3tpZihEPT09Qyl7cmV0dXJuIHRydWU7fX13aGlsZSgoRD1ELnBhcmVudE5vZGUpKTt9
cmV0dXJuIGZhbHNlO307cC5kb2N1bWVudFNvcnRlcj0oei5jb21wYXJlRG9jdW1lbnRQb3NpdGlv
bik/ZnVuY3Rpb24oRCxDKXtpZighRC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbnx8IUMuY29tcGFy
ZURvY3VtZW50UG9zaXRpb24pe3JldHVybiAwOworK31yZXR1cm4gRC5jb21wYXJlRG9jdW1lbnRQ
b3NpdGlvbihDKSY0Py0xOkQ9PT1DPzA6MTt9Oigic291cmNlSW5kZXgiIGluIHopP2Z1bmN0aW9u
KEQsQyl7aWYoIUQuc291cmNlSW5kZXh8fCFDLnNvdXJjZUluZGV4KXtyZXR1cm4gMDt9cmV0dXJu
IEQuc291cmNlSW5kZXgtQy5zb3VyY2VJbmRleDsKKyt9Oih4LmNyZWF0ZVJhbmdlKT9mdW5jdGlv
bihGLEQpe2lmKCFGLm93bmVyRG9jdW1lbnR8fCFELm93bmVyRG9jdW1lbnQpe3JldHVybiAwO312
YXIgRT1GLm93bmVyRG9jdW1lbnQuY3JlYXRlUmFuZ2UoKSxDPUQub3duZXJEb2N1bWVudC5jcmVh
dGVSYW5nZSgpO0Uuc2V0U3RhcnQoRiwwKTsKKytFLnNldEVuZChGLDApO0Muc2V0U3RhcnQoRCww
KTtDLnNldEVuZChELDApO3JldHVybiBFLmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZS5TVEFS
VF9UT19FTkQsQyk7fTpudWxsO3o9bnVsbDtmb3IoQiBpbiBwKXt0aGlzW0JdPXBbQl07fX07dmFy
IGY9L14oWyMuXT8pKCg/Oltcdy1dK3xcKikpJC8saD0vXFsuK1sqJF5dPSg/OiIifCcnKT9cXS8s
Zz17fTsKKytrLnNlYXJjaD1mdW5jdGlvbihVLHosSCxzKXt2YXIgcD10aGlzLmZvdW5kPShzKT9u
dWxsOihIfHxbXSk7aWYoIVUpe3JldHVybiBwO31lbHNle2lmKFUubmF2aWdhdG9yKXtVPVUuZG9j
dW1lbnQ7fWVsc2V7aWYoIVUubm9kZVR5cGUpe3JldHVybiBwO319fXZhciBGLE8sVj10aGlzLnVu
aXF1ZXM9e30sST0hIShIJiZILmxlbmd0aCkseT0oVS5ub2RlVHlwZT09OSk7CisraWYodGhpcy5k
b2N1bWVudCE9PSh5P1U6VS5vd25lckRvY3VtZW50KSl7dGhpcy5zZXREb2N1bWVudChVKTt9aWYo
SSl7Zm9yKE89cC5sZW5ndGg7Ty0tOyl7Vlt0aGlzLmdldFVJRChwW09dKV09dHJ1ZTt9fWlmKHR5
cGVvZiB6PT0ic3RyaW5nIil7dmFyIHI9ei5tYXRjaChmKTsKKytzaW1wbGVTZWxlY3RvcnM6aWYo
cil7dmFyIHU9clsxXSx2PXJbMl0sQSxFO2lmKCF1KXtpZih2PT0iKiImJnRoaXMuYnJva2VuU3Rh
ckdFQlROKXticmVhayBzaW1wbGVTZWxlY3RvcnM7fUU9VS5nZXRFbGVtZW50c0J5VGFnTmFtZSh2
KTtpZihzKXtyZXR1cm4gRVswXXx8bnVsbDsKKyt9Zm9yKE89MDtBPUVbTysrXTspe2lmKCEoSSYm
Vlt0aGlzLmdldFVJRChBKV0pKXtwLnB1c2goQSk7fX19ZWxzZXtpZih1PT0iIyIpe2lmKCF0aGlz
LmlzSFRNTERvY3VtZW50fHwheSl7YnJlYWsgc2ltcGxlU2VsZWN0b3JzO31BPVUuZ2V0RWxlbWVu
dEJ5SWQodik7CisraWYoIUEpe3JldHVybiBwO31pZih0aGlzLmlkR2V0c05hbWUmJkEuZ2V0QXR0
cmlidXRlTm9kZSgiaWQiKS5ub2RlVmFsdWUhPXYpe2JyZWFrIHNpbXBsZVNlbGVjdG9yczt9aWYo
cyl7cmV0dXJuIEF8fG51bGw7fWlmKCEoSSYmVlt0aGlzLmdldFVJRChBKV0pKXtwLnB1c2goQSk7
CisrfX1lbHNle2lmKHU9PSIuIil7aWYoIXRoaXMuaXNIVE1MRG9jdW1lbnR8fCgoIVUuZ2V0RWxl
bWVudHNCeUNsYXNzTmFtZXx8dGhpcy5icm9rZW5HRUJDTikmJlUucXVlcnlTZWxlY3RvckFsbCkp
e2JyZWFrIHNpbXBsZVNlbGVjdG9yczt9aWYoVS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lJiYhdGhp
cy5icm9rZW5HRUJDTil7RT1VLmdldEVsZW1lbnRzQnlDbGFzc05hbWUodik7CisraWYocyl7cmV0
dXJuIEVbMF18fG51bGw7fWZvcihPPTA7QT1FW08rK107KXtpZighKEkmJlZbdGhpcy5nZXRVSUQo
QSldKSl7cC5wdXNoKEEpO319fWVsc2V7dmFyIFQ9bmV3IFJlZ0V4cCgiKF58XFxzKSIrZS5lc2Nh
cGVSZWdFeHAodikrIihcXHN8JCkiKTtFPVUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKTsKKytm
b3IoTz0wO0E9RVtPKytdOyl7Y2xhc3NOYW1lPUEuY2xhc3NOYW1lO2lmKCEoY2xhc3NOYW1lJiZU
LnRlc3QoY2xhc3NOYW1lKSkpe2NvbnRpbnVlO31pZihzKXtyZXR1cm4gQTt9aWYoIShJJiZWW3Ro
aXMuZ2V0VUlEKEEpXSkpe3AucHVzaChBKTt9fX19fX1pZihJKXt0aGlzLnNvcnQocCk7CisrfXJl
dHVybihzKT9udWxsOnA7fXF1ZXJ5U2VsZWN0b3I6aWYoVS5xdWVyeVNlbGVjdG9yQWxsKXtpZigh
dGhpcy5pc0hUTUxEb2N1bWVudHx8Z1t6XXx8dGhpcy5icm9rZW5NaXhlZENhc2VRU0F8fCh0aGlz
LmJyb2tlbkNoZWNrZWRRU0EmJnouaW5kZXhPZigiOmNoZWNrZWQiKT4tMSl8fCh0aGlzLmJyb2tl
bkVtcHR5QXR0cmlidXRlUVNBJiZoLnRlc3QoeikpfHwoIXkmJnouaW5kZXhPZigiLCIpPi0xKXx8
ZS5kaXNhYmxlUVNBKXticmVhayBxdWVyeVNlbGVjdG9yOworK312YXIgUz16LHg9VTtpZigheSl7
dmFyIEM9eC5nZXRBdHRyaWJ1dGUoImlkIiksdD0ic2xpY2tpZF9fIjt4LnNldEF0dHJpYnV0ZSgi
aWQiLHQpO1M9IiMiK3QrIiAiK1M7VT14LnBhcmVudE5vZGU7fXRyeXtpZihzKXtyZXR1cm4gVS5x
dWVyeVNlbGVjdG9yKFMpfHxudWxsOworK31lbHNle0U9VS5xdWVyeVNlbGVjdG9yQWxsKFMpO319
Y2F0Y2goUSl7Z1t6XT0xO2JyZWFrIHF1ZXJ5U2VsZWN0b3I7fWZpbmFsbHl7aWYoIXkpe2lmKEMp
e3guc2V0QXR0cmlidXRlKCJpZCIsQyk7fWVsc2V7eC5yZW1vdmVBdHRyaWJ1dGUoImlkIik7fVU9
eDt9fWlmKHRoaXMuc3RhclNlbGVjdHNDbG9zZWRRU0Epe2ZvcihPPTA7CisrQT1FW08rK107KXtp
ZihBLm5vZGVOYW1lPiJAIiYmIShJJiZWW3RoaXMuZ2V0VUlEKEEpXSkpe3AucHVzaChBKTt9fX1l
bHNle2ZvcihPPTA7QT1FW08rK107KXtpZighKEkmJlZbdGhpcy5nZXRVSUQoQSldKSl7cC5wdXNo
KEEpO319fWlmKEkpe3RoaXMuc29ydChwKTsKKyt9cmV0dXJuIHA7fUY9dGhpcy5TbGljay5wYXJz
ZSh6KTtpZighRi5sZW5ndGgpe3JldHVybiBwO319ZWxzZXtpZih6PT1udWxsKXtyZXR1cm4gcDt9
ZWxzZXtpZih6LlNsaWNrKXtGPXo7fWVsc2V7aWYodGhpcy5jb250YWlucyhVLmRvY3VtZW50RWxl
bWVudHx8VSx6KSl7KHApP3AucHVzaCh6KTpwPXo7CisrcmV0dXJuIHA7fWVsc2V7cmV0dXJuIHA7
fX19fXRoaXMucG9zTlRIPXt9O3RoaXMucG9zTlRITGFzdD17fTt0aGlzLnBvc05USFR5cGU9e307
dGhpcy5wb3NOVEhUeXBlTGFzdD17fTt0aGlzLnB1c2g9KCFJJiYoc3x8KEYubGVuZ3RoPT0xJiZG
LmV4cHJlc3Npb25zWzBdLmxlbmd0aD09MSkpKT90aGlzLnB1c2hBcnJheTp0aGlzLnB1c2hVSUQ7
CisraWYocD09bnVsbCl7cD1bXTt9dmFyIE0sTCxLO3ZhciBCLEosRCxjLHEsRyxXO3ZhciBOLFAs
byx3LFI9Ri5leHByZXNzaW9ucztzZWFyY2g6Zm9yKE89MDsoUD1SW09dKTtPKyspe2ZvcihNPTA7
KG89UFtNXSk7TSsrKXtCPSJjb21iaW5hdG9yOiIrby5jb21iaW5hdG9yOworK2lmKCF0aGlzW0Jd
KXtjb250aW51ZSBzZWFyY2g7fUo9KHRoaXMuaXNYTUxEb2N1bWVudCk/by50YWc6by50YWcudG9V
cHBlckNhc2UoKTtEPW8uaWQ7Yz1vLmNsYXNzTGlzdDtxPW8uY2xhc3NlcztHPW8uYXR0cmlidXRl
cztXPW8ucHNldWRvczt3PShNPT09KFAubGVuZ3RoLTEpKTsKKyt0aGlzLmJpdFVuaXF1ZXM9e307
aWYodyl7dGhpcy51bmlxdWVzPVY7dGhpcy5mb3VuZD1wO31lbHNle3RoaXMudW5pcXVlcz17fTt0
aGlzLmZvdW5kPVtdO31pZihNPT09MCl7dGhpc1tCXShVLEosRCxxLEcsVyxjKTtpZihzJiZ3JiZw
Lmxlbmd0aCl7YnJlYWsgc2VhcmNoOworK319ZWxzZXtpZihzJiZ3KXtmb3IoTD0wLEs9Ti5sZW5n
dGg7TDxLO0wrKyl7dGhpc1tCXShOW0xdLEosRCxxLEcsVyxjKTtpZihwLmxlbmd0aCl7YnJlYWsg
c2VhcmNoO319fWVsc2V7Zm9yKEw9MCxLPU4ubGVuZ3RoO0w8SztMKyspe3RoaXNbQl0oTltMXSxK
LEQscSxHLFcsYyk7CisrfX19Tj10aGlzLmZvdW5kO319aWYoSXx8KEYuZXhwcmVzc2lvbnMubGVu
Z3RoPjEpKXt0aGlzLnNvcnQocCk7fXJldHVybihzKT8ocFswXXx8bnVsbCk6cDt9O2sudWlkeD0x
O2sudWlkaz0ic2xpY2stdW5pcXVlaWQiO2suZ2V0VUlEWE1MPWZ1bmN0aW9uKG4pe3ZhciBjPW4u
Z2V0QXR0cmlidXRlKHRoaXMudWlkayk7CisraWYoIWMpe2M9dGhpcy51aWR4Kys7bi5zZXRBdHRy
aWJ1dGUodGhpcy51aWRrLGMpO31yZXR1cm4gYzt9O2suZ2V0VUlESFRNTD1mdW5jdGlvbihjKXty
ZXR1cm4gYy51bmlxdWVOdW1iZXJ8fChjLnVuaXF1ZU51bWJlcj10aGlzLnVpZHgrKyk7fTtrLnNv
cnQ9ZnVuY3Rpb24oYyl7aWYoIXRoaXMuZG9jdW1lbnRTb3J0ZXIpe3JldHVybiBjOworK31jLnNv
cnQodGhpcy5kb2N1bWVudFNvcnRlcik7cmV0dXJuIGM7fTtrLmNhY2hlTlRIPXt9O2subWF0Y2hO
VEg9L14oWystXT9cZCopPyhbYS16XSspPyhbKy1dXGQrKT8kLztrLnBhcnNlTlRIQXJndW1lbnQ9
ZnVuY3Rpb24ocSl7dmFyIG89cS5tYXRjaCh0aGlzLm1hdGNoTlRIKTsKKytpZighbyl7cmV0dXJu
IGZhbHNlO312YXIgcD1vWzJdfHxmYWxzZTt2YXIgbj1vWzFdfHwxO2lmKG49PSItIil7bj0tMTt9
dmFyIGM9K29bM118fDA7bz0ocD09Im4iKT97YTpuLGI6Y306KHA9PSJvZGQiKT97YToyLGI6MX06
KHA9PSJldmVuIik/e2E6MixiOjB9OnthOjAsYjpufTsKKytyZXR1cm4odGhpcy5jYWNoZU5USFtx
XT1vKTt9O2suY3JlYXRlTlRIUHNldWRvPWZ1bmN0aW9uKHAsbixjLG8pe3JldHVybiBmdW5jdGlv
bihzLHEpe3ZhciB1PXRoaXMuZ2V0VUlEKHMpO2lmKCF0aGlzW2NdW3VdKXt2YXIgQT1zLnBhcmVu
dE5vZGU7aWYoIUEpe3JldHVybiBmYWxzZTsKKyt9dmFyIHI9QVtwXSx0PTE7aWYobyl7dmFyIHo9
cy5ub2RlTmFtZTtkb3tpZihyLm5vZGVOYW1lIT16KXtjb250aW51ZTt9dGhpc1tjXVt0aGlzLmdl
dFVJRChyKV09dCsrO313aGlsZSgocj1yW25dKSk7fWVsc2V7ZG97aWYoci5ub2RlVHlwZSE9MSl7
Y29udGludWU7CisrfXRoaXNbY11bdGhpcy5nZXRVSUQocildPXQrKzt9d2hpbGUoKHI9cltuXSkp
O319cT1xfHwibiI7dmFyIHY9dGhpcy5jYWNoZU5USFtxXXx8dGhpcy5wYXJzZU5USEFyZ3VtZW50
KHEpO2lmKCF2KXtyZXR1cm4gZmFsc2U7fXZhciB5PXYuYSx4PXYuYix3PXRoaXNbY11bdV07Cisr
aWYoeT09MCl7cmV0dXJuIHg9PXc7fWlmKHk+MCl7aWYodzx4KXtyZXR1cm4gZmFsc2U7fX1lbHNl
e2lmKHg8dyl7cmV0dXJuIGZhbHNlO319cmV0dXJuKCh3LXgpJXkpPT0wO307fTtrLnB1c2hBcnJh
eT1mdW5jdGlvbihwLGMscixvLG4scSl7aWYodGhpcy5tYXRjaFNlbGVjdG9yKHAsYyxyLG8sbixx
KSl7dGhpcy5mb3VuZC5wdXNoKHApOworK319O2sucHVzaFVJRD1mdW5jdGlvbihxLGMscyxwLG4s
cil7dmFyIG89dGhpcy5nZXRVSUQocSk7aWYoIXRoaXMudW5pcXVlc1tvXSYmdGhpcy5tYXRjaFNl
bGVjdG9yKHEsYyxzLHAsbixyKSl7dGhpcy51bmlxdWVzW29dPXRydWU7dGhpcy5mb3VuZC5wdXNo
KHEpO319OworK2subWF0Y2hOb2RlPWZ1bmN0aW9uKG4sbyl7aWYodGhpcy5pc0hUTUxEb2N1bWVu
dCYmdGhpcy5uYXRpdmVNYXRjaGVzU2VsZWN0b3Ipe3RyeXtyZXR1cm4gdGhpcy5uYXRpdmVNYXRj
aGVzU2VsZWN0b3IuY2FsbChuLG8ucmVwbGFjZSgvXFsoW149XSspPVxzKihbXiciXF1dKz8pXHMq
XF0vZywnWyQxPSIkMiJdJykpOworK31jYXRjaCh1KXt9fXZhciB0PXRoaXMuU2xpY2sucGFyc2Uo
byk7aWYoIXQpe3JldHVybiB0cnVlO312YXIgcj10LmV4cHJlc3Npb25zLHM9MCxxO2ZvcihxPTA7
KGN1cnJlbnRFeHByZXNzaW9uPXJbcV0pO3ErKyl7aWYoY3VycmVudEV4cHJlc3Npb24ubGVuZ3Ro
PT0xKXt2YXIgcD1jdXJyZW50RXhwcmVzc2lvblswXTsKKytpZih0aGlzLm1hdGNoU2VsZWN0b3Io
biwodGhpcy5pc1hNTERvY3VtZW50KT9wLnRhZzpwLnRhZy50b1VwcGVyQ2FzZSgpLHAuaWQscC5j
bGFzc2VzLHAuYXR0cmlidXRlcyxwLnBzZXVkb3MpKXtyZXR1cm4gdHJ1ZTt9cysrO319aWYocz09
dC5sZW5ndGgpe3JldHVybiBmYWxzZTsKKyt9dmFyIGM9dGhpcy5zZWFyY2godGhpcy5kb2N1bWVu
dCx0KSx2O2ZvcihxPTA7dj1jW3ErK107KXtpZih2PT09bil7cmV0dXJuIHRydWU7fX1yZXR1cm4g
ZmFsc2U7fTtrLm1hdGNoUHNldWRvPWZ1bmN0aW9uKHEsYyxwKXt2YXIgbj0icHNldWRvOiIrYztp
Zih0aGlzW25dKXtyZXR1cm4gdGhpc1tuXShxLHApOworK312YXIgbz10aGlzLmdldEF0dHJpYnV0
ZShxLGMpO3JldHVybihwKT9wPT1vOiEhbzt9O2subWF0Y2hTZWxlY3Rvcj1mdW5jdGlvbihvLHYs
YyxwLHEscyl7aWYodil7dmFyIHQ9KHRoaXMuaXNYTUxEb2N1bWVudCk/by5ub2RlTmFtZTpvLm5v
ZGVOYW1lLnRvVXBwZXJDYXNlKCk7CisraWYodj09IioiKXtpZih0PCJAIil7cmV0dXJuIGZhbHNl
O319ZWxzZXtpZih0IT12KXtyZXR1cm4gZmFsc2U7fX19aWYoYyYmby5nZXRBdHRyaWJ1dGUoImlk
IikhPWMpe3JldHVybiBmYWxzZTt9dmFyIHIsbix1O2lmKHApe2ZvcihyPXAubGVuZ3RoO3ItLTsp
e3U9by5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fG8uY2xhc3NOYW1lOworK2lmKCEodSYmcFtyXS5y
ZWdleHAudGVzdCh1KSkpe3JldHVybiBmYWxzZTt9fX1pZihxKXtmb3Iocj1xLmxlbmd0aDtyLS07
KXtuPXFbcl07aWYobi5vcGVyYXRvcj8hbi50ZXN0KHRoaXMuZ2V0QXR0cmlidXRlKG8sbi5rZXkp
KTohdGhpcy5oYXNBdHRyaWJ1dGUobyxuLmtleSkpe3JldHVybiBmYWxzZTsKKyt9fX1pZihzKXtm
b3Iocj1zLmxlbmd0aDtyLS07KXtuPXNbcl07aWYoIXRoaXMubWF0Y2hQc2V1ZG8obyxuLmtleSxu
LnZhbHVlKSl7cmV0dXJuIGZhbHNlO319fXJldHVybiB0cnVlO307dmFyIGo9eyIgIjpmdW5jdGlv
bihxLHcsbixyLHMsdSxwKXt2YXIgdCx2LG87CisraWYodGhpcy5pc0hUTUxEb2N1bWVudCl7Z2V0
QnlJZDppZihuKXt2PXRoaXMuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQobik7aWYoKCF2JiZxLmFs
bCl8fCh0aGlzLmlkR2V0c05hbWUmJnYmJnYuZ2V0QXR0cmlidXRlTm9kZSgiaWQiKS5ub2RlVmFs
dWUhPW4pKXtvPXEuYWxsW25dOworK2lmKCFvKXtyZXR1cm47fWlmKCFvWzBdKXtvPVtvXTt9Zm9y
KHQ9MDt2PW9bdCsrXTspe3ZhciBjPXYuZ2V0QXR0cmlidXRlTm9kZSgiaWQiKTtpZihjJiZjLm5v
ZGVWYWx1ZT09bil7dGhpcy5wdXNoKHYsdyxudWxsLHIscyx1KTticmVhazt9fXJldHVybjt9aWYo
IXYpe2lmKHRoaXMuY29udGFpbnModGhpcy5yb290LHEpKXtyZXR1cm47CisrfWVsc2V7YnJlYWsg
Z2V0QnlJZDt9fWVsc2V7aWYodGhpcy5kb2N1bWVudCE9PXEmJiF0aGlzLmNvbnRhaW5zKHEsdikp
e3JldHVybjt9fXRoaXMucHVzaCh2LHcsbnVsbCxyLHMsdSk7cmV0dXJuO31nZXRCeUNsYXNzOmlm
KHImJnEuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSYmIXRoaXMuYnJva2VuR0VCQ04pe289cS5nZXRF
bGVtZW50c0J5Q2xhc3NOYW1lKHAuam9pbigiICIpKTsKKytpZighKG8mJm8ubGVuZ3RoKSl7YnJl
YWsgZ2V0QnlDbGFzczt9Zm9yKHQ9MDt2PW9bdCsrXTspe3RoaXMucHVzaCh2LHcsbixudWxsLHMs
dSk7fXJldHVybjt9fWdldEJ5VGFnOntvPXEuZ2V0RWxlbWVudHNCeVRhZ05hbWUodyk7aWYoIShv
JiZvLmxlbmd0aCkpe2JyZWFrIGdldEJ5VGFnOworK31pZighdGhpcy5icm9rZW5TdGFyR0VCVE4p
e3c9bnVsbDt9Zm9yKHQ9MDt2PW9bdCsrXTspe3RoaXMucHVzaCh2LHcsbixyLHMsdSk7fX19LCI+
IjpmdW5jdGlvbihwLGMscixvLG4scSl7aWYoKHA9cC5maXJzdENoaWxkKSl7ZG97aWYocC5ub2Rl
VHlwZT09MSl7dGhpcy5wdXNoKHAsYyxyLG8sbixxKTsKKyt9fXdoaWxlKChwPXAubmV4dFNpYmxp
bmcpKTt9fSwiKyI6ZnVuY3Rpb24ocCxjLHIsbyxuLHEpe3doaWxlKChwPXAubmV4dFNpYmxpbmcp
KXtpZihwLm5vZGVUeXBlPT0xKXt0aGlzLnB1c2gocCxjLHIsbyxuLHEpO2JyZWFrO319fSwiXiI6
ZnVuY3Rpb24ocCxjLHIsbyxuLHEpe3A9cC5maXJzdENoaWxkOworK2lmKHApe2lmKHAubm9kZVR5
cGU9PTEpe3RoaXMucHVzaChwLGMscixvLG4scSk7fWVsc2V7dGhpc1siY29tYmluYXRvcjorIl0o
cCxjLHIsbyxuLHEpO319fSwifiI6ZnVuY3Rpb24ocSxjLHMscCxuLHIpe3doaWxlKChxPXEubmV4
dFNpYmxpbmcpKXtpZihxLm5vZGVUeXBlIT0xKXtjb250aW51ZTsKKyt9dmFyIG89dGhpcy5nZXRV
SUQocSk7aWYodGhpcy5iaXRVbmlxdWVzW29dKXticmVhazt9dGhpcy5iaXRVbmlxdWVzW29dPXRy
dWU7dGhpcy5wdXNoKHEsYyxzLHAsbixyKTt9fSwiKysiOmZ1bmN0aW9uKHAsYyxyLG8sbixxKXt0
aGlzWyJjb21iaW5hdG9yOisiXShwLGMscixvLG4scSk7CisrdGhpc1siY29tYmluYXRvcjohKyJd
KHAsYyxyLG8sbixxKTt9LCJ+fiI6ZnVuY3Rpb24ocCxjLHIsbyxuLHEpe3RoaXNbImNvbWJpbmF0
b3I6fiJdKHAsYyxyLG8sbixxKTt0aGlzWyJjb21iaW5hdG9yOiF+Il0ocCxjLHIsbyxuLHEpO30s
IiEiOmZ1bmN0aW9uKHAsYyxyLG8sbixxKXt3aGlsZSgocD1wLnBhcmVudE5vZGUpKXtpZihwIT09
dGhpcy5kb2N1bWVudCl7dGhpcy5wdXNoKHAsYyxyLG8sbixxKTsKKyt9fX0sIiE+IjpmdW5jdGlv
bihwLGMscixvLG4scSl7cD1wLnBhcmVudE5vZGU7aWYocCE9PXRoaXMuZG9jdW1lbnQpe3RoaXMu
cHVzaChwLGMscixvLG4scSk7fX0sIiErIjpmdW5jdGlvbihwLGMscixvLG4scSl7d2hpbGUoKHA9
cC5wcmV2aW91c1NpYmxpbmcpKXtpZihwLm5vZGVUeXBlPT0xKXt0aGlzLnB1c2gocCxjLHIsbyxu
LHEpOworK2JyZWFrO319fSwiIV4iOmZ1bmN0aW9uKHAsYyxyLG8sbixxKXtwPXAubGFzdENoaWxk
O2lmKHApe2lmKHAubm9kZVR5cGU9PTEpe3RoaXMucHVzaChwLGMscixvLG4scSk7fWVsc2V7dGhp
c1siY29tYmluYXRvcjohKyJdKHAsYyxyLG8sbixxKTt9fX0sIiF+IjpmdW5jdGlvbihxLGMscyxw
LG4scil7d2hpbGUoKHE9cS5wcmV2aW91c1NpYmxpbmcpKXtpZihxLm5vZGVUeXBlIT0xKXtjb250
aW51ZTsKKyt9dmFyIG89dGhpcy5nZXRVSUQocSk7aWYodGhpcy5iaXRVbmlxdWVzW29dKXticmVh
azt9dGhpcy5iaXRVbmlxdWVzW29dPXRydWU7dGhpcy5wdXNoKHEsYyxzLHAsbixyKTt9fX07Zm9y
KHZhciBpIGluIGope2tbImNvbWJpbmF0b3I6IitpXT1qW2ldO312YXIgbD17ZW1wdHk6ZnVuY3Rp
b24oYyl7dmFyIG49Yy5maXJzdENoaWxkOworK3JldHVybiAhKG4mJm4ubm9kZVR5cGU9PTEpJiYh
KGMuaW5uZXJUZXh0fHxjLnRleHRDb250ZW50fHwiIikubGVuZ3RoO30sbm90OmZ1bmN0aW9uKGMs
bil7cmV0dXJuICF0aGlzLm1hdGNoTm9kZShjLG4pO30sY29udGFpbnM6ZnVuY3Rpb24oYyxuKXty
ZXR1cm4oYy5pbm5lclRleHR8fGMudGV4dENvbnRlbnR8fCIiKS5pbmRleE9mKG4pPi0xOworK30s
ImZpcnN0LWNoaWxkIjpmdW5jdGlvbihjKXt3aGlsZSgoYz1jLnByZXZpb3VzU2libGluZykpe2lm
KGMubm9kZVR5cGU9PTEpe3JldHVybiBmYWxzZTt9fXJldHVybiB0cnVlO30sImxhc3QtY2hpbGQi
OmZ1bmN0aW9uKGMpe3doaWxlKChjPWMubmV4dFNpYmxpbmcpKXtpZihjLm5vZGVUeXBlPT0xKXty
ZXR1cm4gZmFsc2U7CisrfX1yZXR1cm4gdHJ1ZTt9LCJvbmx5LWNoaWxkIjpmdW5jdGlvbihvKXt2
YXIgbj1vO3doaWxlKChuPW4ucHJldmlvdXNTaWJsaW5nKSl7aWYobi5ub2RlVHlwZT09MSl7cmV0
dXJuIGZhbHNlO319dmFyIGM9bzt3aGlsZSgoYz1jLm5leHRTaWJsaW5nKSl7aWYoYy5ub2RlVHlw
ZT09MSl7cmV0dXJuIGZhbHNlOworK319cmV0dXJuIHRydWU7fSwibnRoLWNoaWxkIjprLmNyZWF0
ZU5USFBzZXVkbygiZmlyc3RDaGlsZCIsIm5leHRTaWJsaW5nIiwicG9zTlRIIiksIm50aC1sYXN0
LWNoaWxkIjprLmNyZWF0ZU5USFBzZXVkbygibGFzdENoaWxkIiwicHJldmlvdXNTaWJsaW5nIiwi
cG9zTlRITGFzdCIpLCJudGgtb2YtdHlwZSI6ay5jcmVhdGVOVEhQc2V1ZG8oImZpcnN0Q2hpbGQi
LCJuZXh0U2libGluZyIsInBvc05USFR5cGUiLHRydWUpLCJudGgtbGFzdC1vZi10eXBlIjprLmNy
ZWF0ZU5USFBzZXVkbygibGFzdENoaWxkIiwicHJldmlvdXNTaWJsaW5nIiwicG9zTlRIVHlwZUxh
c3QiLHRydWUpLGluZGV4OmZ1bmN0aW9uKG4sYyl7cmV0dXJuIHRoaXNbInBzZXVkbzpudGgtY2hp
bGQiXShuLCIiK2MrMSk7CisrfSxldmVuOmZ1bmN0aW9uKGMpe3JldHVybiB0aGlzWyJwc2V1ZG86
bnRoLWNoaWxkIl0oYywiMm4iKTt9LG9kZDpmdW5jdGlvbihjKXtyZXR1cm4gdGhpc1sicHNldWRv
Om50aC1jaGlsZCJdKGMsIjJuKzEiKTt9LCJmaXJzdC1vZi10eXBlIjpmdW5jdGlvbihjKXt2YXIg
bj1jLm5vZGVOYW1lOworK3doaWxlKChjPWMucHJldmlvdXNTaWJsaW5nKSl7aWYoYy5ub2RlTmFt
ZT09bil7cmV0dXJuIGZhbHNlO319cmV0dXJuIHRydWU7fSwibGFzdC1vZi10eXBlIjpmdW5jdGlv
bihjKXt2YXIgbj1jLm5vZGVOYW1lO3doaWxlKChjPWMubmV4dFNpYmxpbmcpKXtpZihjLm5vZGVO
YW1lPT1uKXtyZXR1cm4gZmFsc2U7CisrfX1yZXR1cm4gdHJ1ZTt9LCJvbmx5LW9mLXR5cGUiOmZ1
bmN0aW9uKG8pe3ZhciBuPW8scD1vLm5vZGVOYW1lO3doaWxlKChuPW4ucHJldmlvdXNTaWJsaW5n
KSl7aWYobi5ub2RlTmFtZT09cCl7cmV0dXJuIGZhbHNlO319dmFyIGM9bzt3aGlsZSgoYz1jLm5l
eHRTaWJsaW5nKSl7aWYoYy5ub2RlTmFtZT09cCl7cmV0dXJuIGZhbHNlOworK319cmV0dXJuIHRy
dWU7fSxlbmFibGVkOmZ1bmN0aW9uKGMpe3JldHVybiAhYy5kaXNhYmxlZDt9LGRpc2FibGVkOmZ1
bmN0aW9uKGMpe3JldHVybiBjLmRpc2FibGVkO30sY2hlY2tlZDpmdW5jdGlvbihjKXtyZXR1cm4g
Yy5jaGVja2VkfHxjLnNlbGVjdGVkO30sZm9jdXM6ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMuaXNI
VE1MRG9jdW1lbnQmJnRoaXMuZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PWMmJihjLmhyZWZ8fGMu
dHlwZXx8dGhpcy5oYXNBdHRyaWJ1dGUoYywidGFiaW5kZXgiKSk7CisrfSxyb290OmZ1bmN0aW9u
KGMpe3JldHVybihjPT09dGhpcy5yb290KTt9LHNlbGVjdGVkOmZ1bmN0aW9uKGMpe3JldHVybiBj
LnNlbGVjdGVkO319O2Zvcih2YXIgYiBpbiBsKXtrWyJwc2V1ZG86IitiXT1sW2JdO312YXIgYT1r
LmF0dHJpYnV0ZUdldHRlcnM9eyJjbGFzcyI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRBdHRy
aWJ1dGUoImNsYXNzIil8fHRoaXMuY2xhc3NOYW1lOworK30sImZvciI6ZnVuY3Rpb24oKXtyZXR1
cm4oImh0bWxGb3IiIGluIHRoaXMpP3RoaXMuaHRtbEZvcjp0aGlzLmdldEF0dHJpYnV0ZSgiZm9y
Iik7fSxocmVmOmZ1bmN0aW9uKCl7cmV0dXJuKCJocmVmIiBpbiB0aGlzKT90aGlzLmdldEF0dHJp
YnV0ZSgiaHJlZiIsMik6dGhpcy5nZXRBdHRyaWJ1dGUoImhyZWYiKTsKKyt9LHN0eWxlOmZ1bmN0
aW9uKCl7cmV0dXJuKHRoaXMuc3R5bGUpP3RoaXMuc3R5bGUuY3NzVGV4dDp0aGlzLmdldEF0dHJp
YnV0ZSgic3R5bGUiKTt9LHRhYmluZGV4OmZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5nZXRBdHRyaWJ1
dGVOb2RlKCJ0YWJpbmRleCIpO3JldHVybihjJiZjLnNwZWNpZmllZCk/Yy5ub2RlVmFsdWU6bnVs
bDsKKyt9LHR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGUoInR5cGUiKTt9
LG1heGxlbmd0aDpmdW5jdGlvbigpe3ZhciBjPXRoaXMuZ2V0QXR0cmlidXRlTm9kZSgibWF4TGVu
Z3RoIik7cmV0dXJuKGMmJmMuc3BlY2lmaWVkKT9jLm5vZGVWYWx1ZTpudWxsOworK319O2EuTUFY
TEVOR1RIPWEubWF4TGVuZ3RoPWEubWF4bGVuZ3RoO3ZhciBlPWsuU2xpY2s9KHRoaXMuU2xpY2t8
fHt9KTtlLnZlcnNpb249IjEuMS42IjtlLnNlYXJjaD1mdW5jdGlvbihuLG8sYyl7cmV0dXJuIGsu
c2VhcmNoKG4sbyxjKTt9O2UuZmluZD1mdW5jdGlvbihjLG4pe3JldHVybiBrLnNlYXJjaChjLG4s
bnVsbCx0cnVlKTsKKyt9O2UuY29udGFpbnM9ZnVuY3Rpb24oYyxuKXtrLnNldERvY3VtZW50KGMp
O3JldHVybiBrLmNvbnRhaW5zKGMsbik7fTtlLmdldEF0dHJpYnV0ZT1mdW5jdGlvbihuLGMpe2su
c2V0RG9jdW1lbnQobik7cmV0dXJuIGsuZ2V0QXR0cmlidXRlKG4sYyk7fTtlLmhhc0F0dHJpYnV0
ZT1mdW5jdGlvbihuLGMpe2suc2V0RG9jdW1lbnQobik7CisrcmV0dXJuIGsuaGFzQXR0cmlidXRl
KG4sYyk7fTtlLm1hdGNoPWZ1bmN0aW9uKG4sYyl7aWYoIShuJiZjKSl7cmV0dXJuIGZhbHNlO31p
ZighY3x8Yz09PW4pe3JldHVybiB0cnVlO31rLnNldERvY3VtZW50KG4pO3JldHVybiBrLm1hdGNo
Tm9kZShuLGMpO307ZS5kZWZpbmVBdHRyaWJ1dGVHZXR0ZXI9ZnVuY3Rpb24oYyxuKXtrLmF0dHJp
YnV0ZUdldHRlcnNbY109bjsKKytyZXR1cm4gdGhpczt9O2UubG9va3VwQXR0cmlidXRlR2V0dGVy
PWZ1bmN0aW9uKGMpe3JldHVybiBrLmF0dHJpYnV0ZUdldHRlcnNbY107fTtlLmRlZmluZVBzZXVk
bz1mdW5jdGlvbihjLG4pe2tbInBzZXVkbzoiK2NdPWZ1bmN0aW9uKHAsbyl7cmV0dXJuIG4uY2Fs
bChwLG8pOworK307cmV0dXJuIHRoaXM7fTtlLmxvb2t1cFBzZXVkbz1mdW5jdGlvbihjKXt2YXIg
bj1rWyJwc2V1ZG86IitjXTtpZihuKXtyZXR1cm4gZnVuY3Rpb24obyl7cmV0dXJuIG4uY2FsbCh0
aGlzLG8pO307fXJldHVybiBudWxsO307ZS5vdmVycmlkZT1mdW5jdGlvbihuLGMpe2sub3ZlcnJp
ZGUobixjKTsKKytyZXR1cm4gdGhpczt9O2UuaXNYTUw9ay5pc1hNTDtlLnVpZE9mPWZ1bmN0aW9u
KGMpe3JldHVybiBrLmdldFVJREhUTUwoYyk7fTtpZighdGhpcy5TbGljayl7dGhpcy5TbGljaz1l
O319KS5hcHBseSgodHlwZW9mIGV4cG9ydHMhPSJ1bmRlZmluZWQiKT9leHBvcnRzOnRoaXMpOwor
K3ZhciBFbGVtZW50PWZ1bmN0aW9uKGIsZyl7dmFyIGg9RWxlbWVudC5Db25zdHJ1Y3RvcnNbYl07
aWYoaCl7cmV0dXJuIGgoZyk7fWlmKHR5cGVvZiBiIT0ic3RyaW5nIil7cmV0dXJuIGRvY3VtZW50
LmlkKGIpLnNldChnKTt9aWYoIWcpe2c9e307fWlmKCEoL15bXHctXSskLykudGVzdChiKSl7dmFy
IGU9U2xpY2sucGFyc2UoYikuZXhwcmVzc2lvbnNbMF1bMF07CisrYj0oZS50YWc9PSIqIik/ImRp
diI6ZS50YWc7aWYoZS5pZCYmZy5pZD09bnVsbCl7Zy5pZD1lLmlkO312YXIgZD1lLmF0dHJpYnV0
ZXM7aWYoZCl7Zm9yKHZhciBhLGY9MCxjPWQubGVuZ3RoO2Y8YztmKyspe2E9ZFtmXTtpZihnW2Eu
a2V5XSE9bnVsbCl7Y29udGludWU7CisrfWlmKGEudmFsdWUhPW51bGwmJmEub3BlcmF0b3I9PSI9
Iil7Z1thLmtleV09YS52YWx1ZTt9ZWxzZXtpZighYS52YWx1ZSYmIWEub3BlcmF0b3Ipe2dbYS5r
ZXldPXRydWU7fX19fWlmKGUuY2xhc3NMaXN0JiZnWyJjbGFzcyJdPT1udWxsKXtnWyJjbGFzcyJd
PWUuY2xhc3NMaXN0LmpvaW4oIiAiKTsKKyt9fXJldHVybiBkb2N1bWVudC5uZXdFbGVtZW50KGIs
Zyk7fTtpZihCcm93c2VyLkVsZW1lbnQpe0VsZW1lbnQucHJvdG90eXBlPUJyb3dzZXIuRWxlbWVu
dC5wcm90b3R5cGU7fW5ldyBUeXBlKCJFbGVtZW50IixFbGVtZW50KS5taXJyb3IoZnVuY3Rpb24o
YSl7aWYoQXJyYXkucHJvdG90eXBlW2FdKXtyZXR1cm47CisrfXZhciBiPXt9O2JbYV09ZnVuY3Rp
b24oKXt2YXIgaD1bXSxlPWFyZ3VtZW50cyxqPXRydWU7Zm9yKHZhciBnPTAsZD10aGlzLmxlbmd0
aDtnPGQ7ZysrKXt2YXIgZj10aGlzW2ddLGM9aFtnXT1mW2FdLmFwcGx5KGYsZSk7aj0oaiYmdHlw
ZU9mKGMpPT0iZWxlbWVudCIpOworK31yZXR1cm4oaik/bmV3IEVsZW1lbnRzKGgpOmg7fTtFbGVt
ZW50cy5pbXBsZW1lbnQoYik7fSk7aWYoIUJyb3dzZXIuRWxlbWVudCl7RWxlbWVudC5wYXJlbnQ9
T2JqZWN0O0VsZW1lbnQuUHJvdG90eXBlPXsiJGZhbWlseSI6RnVuY3Rpb24uZnJvbSgiZWxlbWVu
dCIpLmhpZGUoKX07CisrRWxlbWVudC5taXJyb3IoZnVuY3Rpb24oYSxiKXtFbGVtZW50LlByb3Rv
dHlwZVthXT1iO30pO31FbGVtZW50LkNvbnN0cnVjdG9ycz17fTtFbGVtZW50LkNvbnN0cnVjdG9y
cz1uZXcgSGFzaDt2YXIgSUZyYW1lPW5ldyBUeXBlKCJJRnJhbWUiLGZ1bmN0aW9uKCl7dmFyIGU9
QXJyYXkubGluayhhcmd1bWVudHMse3Byb3BlcnRpZXM6VHlwZS5pc09iamVjdCxpZnJhbWU6ZnVu
Y3Rpb24oZil7cmV0dXJuKGYhPW51bGwpOworK319KTt2YXIgYz1lLnByb3BlcnRpZXN8fHt9LGI7
aWYoZS5pZnJhbWUpe2I9ZG9jdW1lbnQuaWQoZS5pZnJhbWUpO312YXIgZD1jLm9ubG9hZHx8ZnVu
Y3Rpb24oKXt9O2RlbGV0ZSBjLm9ubG9hZDtjLmlkPWMubmFtZT1bYy5pZCxjLm5hbWUsYj8oYi5p
ZHx8Yi5uYW1lKToiSUZyYW1lXyIrU3RyaW5nLnVuaXF1ZUlEKCldLnBpY2soKTsKKytiPW5ldyBF
bGVtZW50KGJ8fCJpZnJhbWUiLGMpO3ZhciBhPWZ1bmN0aW9uKCl7ZC5jYWxsKGIuY29udGVudFdp
bmRvdyk7fTtpZih3aW5kb3cuZnJhbWVzW2MuaWRdKXthKCk7fWVsc2V7Yi5hZGRMaXN0ZW5lcigi
bG9hZCIsYSk7fXJldHVybiBiO30pO3ZhciBFbGVtZW50cz10aGlzLkVsZW1lbnRzPWZ1bmN0aW9u
KGEpe2lmKGEmJmEubGVuZ3RoKXt2YXIgZT17fSxkOworK2Zvcih2YXIgYz0wO2Q9YVtjKytdOyl7
dmFyIGI9U2xpY2sudWlkT2YoZCk7aWYoIWVbYl0pe2VbYl09dHJ1ZTt0aGlzLnB1c2goZCk7fX19
fTtFbGVtZW50cy5wcm90b3R5cGU9e2xlbmd0aDowfTtFbGVtZW50cy5wYXJlbnQ9QXJyYXk7bmV3
IFR5cGUoIkVsZW1lbnRzIixFbGVtZW50cykuaW1wbGVtZW50KHtmaWx0ZXI6ZnVuY3Rpb24oYSxi
KXtpZighYSl7cmV0dXJuIHRoaXM7CisrfXJldHVybiBuZXcgRWxlbWVudHMoQXJyYXkuZmlsdGVy
KHRoaXMsKHR5cGVPZihhKT09InN0cmluZyIpP2Z1bmN0aW9uKGMpe3JldHVybiBjLm1hdGNoKGEp
O306YSxiKSk7fS5wcm90ZWN0KCkscHVzaDpmdW5jdGlvbigpe3ZhciBkPXRoaXMubGVuZ3RoO2Zv
cih2YXIgYj0wLGE9YXJndW1lbnRzLmxlbmd0aDsKKytiPGE7YisrKXt2YXIgYz1kb2N1bWVudC5p
ZChhcmd1bWVudHNbYl0pO2lmKGMpe3RoaXNbZCsrXT1jO319cmV0dXJuKHRoaXMubGVuZ3RoPWQp
O30ucHJvdGVjdCgpLHVuc2hpZnQ6ZnVuY3Rpb24oKXt2YXIgYj1bXTtmb3IodmFyIGM9MCxhPWFy
Z3VtZW50cy5sZW5ndGg7CisrYzxhO2MrKyl7dmFyIGQ9ZG9jdW1lbnQuaWQoYXJndW1lbnRzW2Nd
KTtpZihkKXtiLnB1c2goZCk7fX1yZXR1cm4gQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuYXBwbHko
dGhpcyxiKTt9LnByb3RlY3QoKSxjb25jYXQ6ZnVuY3Rpb24oKXt2YXIgYj1uZXcgRWxlbWVudHMo
dGhpcyk7CisrZm9yKHZhciBjPTAsYT1hcmd1bWVudHMubGVuZ3RoO2M8YTtjKyspe3ZhciBkPWFy
Z3VtZW50c1tjXTtpZihUeXBlLmlzRW51bWVyYWJsZShkKSl7Yi5hcHBlbmQoZCk7fWVsc2V7Yi5w
dXNoKGQpO319cmV0dXJuIGI7fS5wcm90ZWN0KCksYXBwZW5kOmZ1bmN0aW9uKGMpe2Zvcih2YXIg
Yj0wLGE9Yy5sZW5ndGg7CisrYjxhO2IrKyl7dGhpcy5wdXNoKGNbYl0pO31yZXR1cm4gdGhpczt9
LnByb3RlY3QoKSxlbXB0eTpmdW5jdGlvbigpe3doaWxlKHRoaXMubGVuZ3RoKXtkZWxldGUgdGhp
c1stLXRoaXMubGVuZ3RoXTt9cmV0dXJuIHRoaXM7fS5wcm90ZWN0KCl9KTtFbGVtZW50cy5hbGlh
cygiZXh0ZW5kIiwiYXBwZW5kIik7CisrKGZ1bmN0aW9uKCl7dmFyIGc9QXJyYXkucHJvdG90eXBl
LnNwbGljZSxiPXsiMCI6MCwiMSI6MSxsZW5ndGg6Mn07Zy5jYWxsKGIsMSwxKTtpZihiWzFdPT0x
KXtFbGVtZW50cy5pbXBsZW1lbnQoInNwbGljZSIsZnVuY3Rpb24oKXt2YXIgaD10aGlzLmxlbmd0
aDt2YXIgZT1nLmFwcGx5KHRoaXMsYXJndW1lbnRzKTsKKyt3aGlsZShoPj10aGlzLmxlbmd0aCl7
ZGVsZXRlIHRoaXNbaC0tXTt9cmV0dXJuIGU7fS5wcm90ZWN0KCkpO31FbGVtZW50cy5pbXBsZW1l
bnQoQXJyYXkucHJvdG90eXBlKTtBcnJheS5taXJyb3IoRWxlbWVudHMpO3ZhciBmO3RyeXt2YXIg
YT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCI8aW5wdXQgbmFtZT14PiIpOworK2Y9KGEubmFtZT09
IngiKTt9Y2F0Y2goYyl7fXZhciBkPWZ1bmN0aW9uKGUpe3JldHVybigiIitlKS5yZXBsYWNlKC8m
L2csIiZhbXA7IikucmVwbGFjZSgvIi9nLCImcXVvdDsiKTt9O0RvY3VtZW50LmltcGxlbWVudCh7
bmV3RWxlbWVudDpmdW5jdGlvbihlLGgpe2lmKGgmJmguY2hlY2tlZCE9bnVsbCl7aC5kZWZhdWx0
Q2hlY2tlZD1oLmNoZWNrZWQ7CisrfWlmKGYmJmgpe2U9IjwiK2U7aWYoaC5uYW1lKXtlKz0nIG5h
bWU9IicrZChoLm5hbWUpKyciJzt9aWYoaC50eXBlKXtlKz0nIHR5cGU9IicrZChoLnR5cGUpKyci
Jzt9ZSs9Ij4iO2RlbGV0ZSBoLm5hbWU7ZGVsZXRlIGgudHlwZTt9cmV0dXJuIHRoaXMuaWQodGhp
cy5jcmVhdGVFbGVtZW50KGUpKS5zZXQoaCk7CisrfX0pO30pKCk7RG9jdW1lbnQuaW1wbGVtZW50
KHtuZXdUZXh0Tm9kZTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5jcmVhdGVUZXh0Tm9kZShhKTt9
LGdldERvY3VtZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXM7fSxnZXRXaW5kb3c6ZnVuY3Rpb24o
KXtyZXR1cm4gdGhpcy53aW5kb3c7CisrfSxpZDooZnVuY3Rpb24oKXt2YXIgYT17c3RyaW5nOmZ1
bmN0aW9uKGQsYyxiKXtkPVNsaWNrLmZpbmQoYiwiIyIrZC5yZXBsYWNlKC8oXFcpL2csIlxcJDEi
KSk7cmV0dXJuKGQpP2EuZWxlbWVudChkLGMpOm51bGw7fSxlbGVtZW50OmZ1bmN0aW9uKGIsYyl7
JHVpZChiKTsKKytpZighYyYmIWIuJGZhbWlseSYmISgvXig/Om9iamVjdHxlbWJlZCkkL2kpLnRl
c3QoYi50YWdOYW1lKSl7T2JqZWN0LmFwcGVuZChiLEVsZW1lbnQuUHJvdG90eXBlKTt9cmV0dXJu
IGI7fSxvYmplY3Q6ZnVuY3Rpb24oYyxkLGIpe2lmKGMudG9FbGVtZW50KXtyZXR1cm4gYS5lbGVt
ZW50KGMudG9FbGVtZW50KGIpLGQpOworK31yZXR1cm4gbnVsbDt9fTthLnRleHRub2RlPWEud2hp
dGVzcGFjZT1hLndpbmRvdz1hLmRvY3VtZW50PWZ1bmN0aW9uKGIpe3JldHVybiBiO307cmV0dXJu
IGZ1bmN0aW9uKGMsZSxkKXtpZihjJiZjLiRmYW1pbHkmJmMudWlkKXtyZXR1cm4gYzt9dmFyIGI9
dHlwZU9mKGMpOworK3JldHVybihhW2JdKT9hW2JdKGMsZSxkfHxkb2N1bWVudCk6bnVsbDt9O30p
KCl9KTtpZih3aW5kb3cuJD09bnVsbCl7V2luZG93LmltcGxlbWVudCgiJCIsZnVuY3Rpb24oYSxi
KXtyZXR1cm4gZG9jdW1lbnQuaWQoYSxiLHRoaXMuZG9jdW1lbnQpO30pO31XaW5kb3cuaW1wbGVt
ZW50KHtnZXREb2N1bWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvY3VtZW50OworK30sZ2V0
V2luZG93OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXM7fX0pO1tEb2N1bWVudCxFbGVtZW50XS5pbnZv
a2UoImltcGxlbWVudCIse2dldEVsZW1lbnRzOmZ1bmN0aW9uKGEpe3JldHVybiBTbGljay5zZWFy
Y2godGhpcyxhLG5ldyBFbGVtZW50cyk7fSxnZXRFbGVtZW50OmZ1bmN0aW9uKGEpe3JldHVybiBk
b2N1bWVudC5pZChTbGljay5maW5kKHRoaXMsYSkpOworK319KTt2YXIgY29udGFpbnM9e2NvbnRh
aW5zOmZ1bmN0aW9uKGEpe3JldHVybiBTbGljay5jb250YWlucyh0aGlzLGEpO319O2lmKCFkb2N1
bWVudC5jb250YWlucyl7RG9jdW1lbnQuaW1wbGVtZW50KGNvbnRhaW5zKTt9aWYoIWRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoImRpdiIpLmNvbnRhaW5zKXtFbGVtZW50LmltcGxlbWVudChjb250YWlu
cyk7CisrfUVsZW1lbnQuaW1wbGVtZW50KCJoYXNDaGlsZCIsZnVuY3Rpb24oYSl7cmV0dXJuIHRo
aXMhPT1hJiZ0aGlzLmNvbnRhaW5zKGEpO30pOyhmdW5jdGlvbihiLGQsYSl7dGhpcy5TZWxlY3Rv
cnM9e307dmFyIGU9dGhpcy5TZWxlY3RvcnMuUHNldWRvPW5ldyBIYXNoKCk7CisrdmFyIGM9ZnVu
Y3Rpb24oKXtmb3IodmFyIGYgaW4gZSl7aWYoZS5oYXNPd25Qcm9wZXJ0eShmKSl7U2xpY2suZGVm
aW5lUHNldWRvKGYsZVtmXSk7ZGVsZXRlIGVbZl07fX19O1NsaWNrLnNlYXJjaD1mdW5jdGlvbihn
LGgsZil7YygpO3JldHVybiBiLmNhbGwodGhpcyxnLGgsZik7CisrfTtTbGljay5maW5kPWZ1bmN0
aW9uKGYsZyl7YygpO3JldHVybiBkLmNhbGwodGhpcyxmLGcpO307U2xpY2subWF0Y2g9ZnVuY3Rp
b24oZyxmKXtjKCk7cmV0dXJuIGEuY2FsbCh0aGlzLGcsZik7fTt9KShTbGljay5zZWFyY2gsU2xp
Y2suZmluZCxTbGljay5tYXRjaCk7CisrdmFyIGluamVjdENvbWJpbmF0b3I9ZnVuY3Rpb24oZCxj
KXtpZighZCl7cmV0dXJuIGM7fWQ9T2JqZWN0LmNsb25lKFNsaWNrLnBhcnNlKGQpKTt2YXIgYj1k
LmV4cHJlc3Npb25zO2Zvcih2YXIgYT1iLmxlbmd0aDthLS07KXtiW2FdWzBdLmNvbWJpbmF0b3I9
Yzt9cmV0dXJuIGQ7CisrfTtPYmplY3QuZm9yRWFjaCh7Z2V0TmV4dDoifiIsZ2V0UHJldmlvdXM6
IiF+IixnZXRQYXJlbnQ6IiEifSxmdW5jdGlvbihhLGIpe0VsZW1lbnQuaW1wbGVtZW50KGIsZnVu
Y3Rpb24oYyl7cmV0dXJuIHRoaXMuZ2V0RWxlbWVudChpbmplY3RDb21iaW5hdG9yKGMsYSkpOwor
K30pO30pO09iamVjdC5mb3JFYWNoKHtnZXRBbGxOZXh0OiJ+IixnZXRBbGxQcmV2aW91czoiIX4i
LGdldFNpYmxpbmdzOiJ+fiIsZ2V0Q2hpbGRyZW46Ij4iLGdldFBhcmVudHM6IiEifSxmdW5jdGlv
bihhLGIpe0VsZW1lbnQuaW1wbGVtZW50KGIsZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMuZ2V0RWxl
bWVudHMoaW5qZWN0Q29tYmluYXRvcihjLGEpKTsKKyt9KTt9KTtFbGVtZW50LmltcGxlbWVudCh7
Z2V0Rmlyc3Q6ZnVuY3Rpb24oYSl7cmV0dXJuIGRvY3VtZW50LmlkKFNsaWNrLnNlYXJjaCh0aGlz
LGluamVjdENvbWJpbmF0b3IoYSwiPiIpKVswXSk7fSxnZXRMYXN0OmZ1bmN0aW9uKGEpe3JldHVy
biBkb2N1bWVudC5pZChTbGljay5zZWFyY2godGhpcyxpbmplY3RDb21iaW5hdG9yKGEsIj4iKSku
Z2V0TGFzdCgpKTsKKyt9LGdldFdpbmRvdzpmdW5jdGlvbigpe3JldHVybiB0aGlzLm93bmVyRG9j
dW1lbnQud2luZG93O30sZ2V0RG9jdW1lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRv
Y3VtZW50O30sZ2V0RWxlbWVudEJ5SWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGRvY3VtZW50LmlkKFNs
aWNrLmZpbmQodGhpcywiIyIrKCIiK2EpLnJlcGxhY2UoLyhcVykvZywiXFwkMSIpKSk7CisrfSxt
YXRjaDpmdW5jdGlvbihhKXtyZXR1cm4gIWF8fFNsaWNrLm1hdGNoKHRoaXMsYSk7fX0pO2lmKHdp
bmRvdy4kJD09bnVsbCl7V2luZG93LmltcGxlbWVudCgiJCQiLGZ1bmN0aW9uKGEpe3ZhciBmPW5l
dyBFbGVtZW50cztpZihhcmd1bWVudHMubGVuZ3RoPT0xJiZ0eXBlb2YgYT09InN0cmluZyIpe3Jl
dHVybiBTbGljay5zZWFyY2godGhpcy5kb2N1bWVudCxhLGYpOworK312YXIgYz1BcnJheS5mbGF0
dGVuKGFyZ3VtZW50cyk7Zm9yKHZhciBkPTAsYj1jLmxlbmd0aDtkPGI7ZCsrKXt2YXIgZT1jW2Rd
O3N3aXRjaCh0eXBlT2YoZSkpe2Nhc2UiZWxlbWVudCI6Zi5wdXNoKGUpO2JyZWFrO2Nhc2Uic3Ry
aW5nIjpTbGljay5zZWFyY2godGhpcy5kb2N1bWVudCxlLGYpOworK319cmV0dXJuIGY7fSk7fWlm
KHdpbmRvdy4kJD09bnVsbCl7V2luZG93LmltcGxlbWVudCgiJCQiLGZ1bmN0aW9uKGEpe2lmKGFy
Z3VtZW50cy5sZW5ndGg9PTEpe2lmKHR5cGVvZiBhPT0ic3RyaW5nIil7cmV0dXJuIFNsaWNrLnNl
YXJjaCh0aGlzLmRvY3VtZW50LGEsbmV3IEVsZW1lbnRzKTsKKyt9ZWxzZXtpZihUeXBlLmlzRW51
bWVyYWJsZShhKSl7cmV0dXJuIG5ldyBFbGVtZW50cyhhKTt9fX1yZXR1cm4gbmV3IEVsZW1lbnRz
KGFyZ3VtZW50cyk7fSk7fShmdW5jdGlvbigpe3ZhciBiPXtiZWZvcmU6ZnVuY3Rpb24obixtKXt2
YXIgbz1tLnBhcmVudE5vZGU7CisraWYobyl7by5pbnNlcnRCZWZvcmUobixtKTt9fSxhZnRlcjpm
dW5jdGlvbihuLG0pe3ZhciBvPW0ucGFyZW50Tm9kZTtpZihvKXtvLmluc2VydEJlZm9yZShuLG0u
bmV4dFNpYmxpbmcpO319LGJvdHRvbTpmdW5jdGlvbihuLG0pe20uYXBwZW5kQ2hpbGQobik7fSx0
b3A6ZnVuY3Rpb24obixtKXttLmluc2VydEJlZm9yZShuLG0uZmlyc3RDaGlsZCk7CisrfX07Yi5p
bnNpZGU9Yi5ib3R0b207T2JqZWN0LmVhY2goYixmdW5jdGlvbihuLG8pe289by5jYXBpdGFsaXpl
KCk7dmFyIG09e307bVsiaW5qZWN0IitvXT1mdW5jdGlvbihwKXtuKHRoaXMsZG9jdW1lbnQuaWQo
cCx0cnVlKSk7cmV0dXJuIHRoaXM7fTttWyJncmFiIitvXT1mdW5jdGlvbihwKXtuKGRvY3VtZW50
LmlkKHAsdHJ1ZSksdGhpcyk7CisrcmV0dXJuIHRoaXM7fTtFbGVtZW50LmltcGxlbWVudChtKTt9
KTt2YXIgaz17fSxkPXt9O3ZhciBpPXt9O0FycmF5LmZvckVhY2goWyJ0eXBlIiwidmFsdWUiLCJk
ZWZhdWx0VmFsdWUiLCJhY2Nlc3NLZXkiLCJjZWxsUGFkZGluZyIsImNlbGxTcGFjaW5nIiwiY29s
U3BhbiIsImZyYW1lQm9yZGVyIiwicmVhZE9ubHkiLCJyb3dTcGFuIiwidGFiSW5kZXgiLCJ1c2VN
YXAiXSxmdW5jdGlvbihtKXtpW20udG9Mb3dlckNhc2UoKV09bTsKKyt9KTtPYmplY3QuYXBwZW5k
KGkse2h0bWw6ImlubmVySFRNTCIsdGV4dDooZnVuY3Rpb24oKXt2YXIgbT1kb2N1bWVudC5jcmVh
dGVFbGVtZW50KCJkaXYiKTtyZXR1cm4obS50ZXh0Q29udGVudD09bnVsbCk/ImlubmVyVGV4dCI6
InRleHRDb250ZW50Ijt9KSgpfSk7CisrT2JqZWN0LmZvckVhY2goaSxmdW5jdGlvbihuLG0pe2Rb
bV09ZnVuY3Rpb24obyxwKXtvW25dPXA7fTtrW21dPWZ1bmN0aW9uKG8pe3JldHVybiBvW25dO307
fSk7dmFyIGE9WyJjb21wYWN0Iiwibm93cmFwIiwiaXNtYXAiLCJkZWNsYXJlIiwibm9zaGFkZSIs
ImNoZWNrZWQiLCJkaXNhYmxlZCIsInJlYWRPbmx5IiwibXVsdGlwbGUiLCJzZWxlY3RlZCIsIm5v
cmVzaXplIiwiZGVmZXIiLCJkZWZhdWx0Q2hlY2tlZCIsImF1dG9mb2N1cyIsImNvbnRyb2xzIiwi
YXV0b3BsYXkiLCJsb29wIl07CisrdmFyIGg9e307QXJyYXkuZm9yRWFjaChhLGZ1bmN0aW9uKG0p
e3ZhciBuPW0udG9Mb3dlckNhc2UoKTtoW25dPW07ZFtuXT1mdW5jdGlvbihvLHApe29bbV09ISFw
O307a1tuXT1mdW5jdGlvbihvKXtyZXR1cm4gISFvW21dO307fSk7T2JqZWN0LmFwcGVuZChkLHsi
Y2xhc3MiOmZ1bmN0aW9uKG0sbil7KCJjbGFzc05hbWUiIGluIG0pP20uY2xhc3NOYW1lPW46bS5z
ZXRBdHRyaWJ1dGUoImNsYXNzIixuKTsKKyt9LCJmb3IiOmZ1bmN0aW9uKG0sbil7KCJodG1sRm9y
IiBpbiBtKT9tLmh0bWxGb3I9bjptLnNldEF0dHJpYnV0ZSgiZm9yIixuKTt9LHN0eWxlOmZ1bmN0
aW9uKG0sbil7KG0uc3R5bGUpP20uc3R5bGUuY3NzVGV4dD1uOm0uc2V0QXR0cmlidXRlKCJzdHls
ZSIsbik7CisrfX0pO0VsZW1lbnQuaW1wbGVtZW50KHtzZXRQcm9wZXJ0eTpmdW5jdGlvbihuLG8p
e3ZhciBtPW4udG9Mb3dlckNhc2UoKTtpZihvPT1udWxsKXtpZighaFttXSl7dGhpcy5yZW1vdmVB
dHRyaWJ1dGUobik7cmV0dXJuIHRoaXM7fW89ZmFsc2U7fXZhciBwPWRbbV07aWYocCl7cCh0aGlz
LG8pOworK31lbHNle3RoaXMuc2V0QXR0cmlidXRlKG4sbyk7fXJldHVybiB0aGlzO30sc2V0UHJv
cGVydGllczpmdW5jdGlvbihtKXtmb3IodmFyIG4gaW4gbSl7dGhpcy5zZXRQcm9wZXJ0eShuLG1b
bl0pO31yZXR1cm4gdGhpczt9LGdldFByb3BlcnR5OmZ1bmN0aW9uKG8pe3ZhciBuPWtbby50b0xv
d2VyQ2FzZSgpXTsKKytpZihuKXtyZXR1cm4gbih0aGlzKTt9dmFyIG09U2xpY2suZ2V0QXR0cmli
dXRlKHRoaXMsbyk7cmV0dXJuKCFtJiYhU2xpY2suaGFzQXR0cmlidXRlKHRoaXMsbykpP251bGw6
bTt9LGdldFByb3BlcnRpZXM6ZnVuY3Rpb24oKXt2YXIgbT1BcnJheS5mcm9tKGFyZ3VtZW50cyk7
CisrcmV0dXJuIG0ubWFwKHRoaXMuZ2V0UHJvcGVydHksdGhpcykuYXNzb2NpYXRlKG0pO30scmVt
b3ZlUHJvcGVydHk6ZnVuY3Rpb24obSl7cmV0dXJuIHRoaXMuc2V0UHJvcGVydHkobSxudWxsKTt9
LHJlbW92ZVByb3BlcnRpZXM6ZnVuY3Rpb24oKXtBcnJheS5lYWNoKGFyZ3VtZW50cyx0aGlzLnJl
bW92ZVByb3BlcnR5LHRoaXMpOworK3JldHVybiB0aGlzO30sc2V0OmZ1bmN0aW9uKG8sbil7dmFy
IG09RWxlbWVudC5Qcm9wZXJ0aWVzW29dOyhtJiZtLnNldCk/bS5zZXQuY2FsbCh0aGlzLG4pOnRo
aXMuc2V0UHJvcGVydHkobyxuKTt9Lm92ZXJsb2FkU2V0dGVyKCksZ2V0OmZ1bmN0aW9uKG4pe3Zh
ciBtPUVsZW1lbnQuUHJvcGVydGllc1tuXTsKKytyZXR1cm4obSYmbS5nZXQpP20uZ2V0LmFwcGx5
KHRoaXMpOnRoaXMuZ2V0UHJvcGVydHkobik7fS5vdmVybG9hZEdldHRlcigpLGVyYXNlOmZ1bmN0
aW9uKG4pe3ZhciBtPUVsZW1lbnQuUHJvcGVydGllc1tuXTsobSYmbS5lcmFzZSk/bS5lcmFzZS5h
cHBseSh0aGlzKTp0aGlzLnJlbW92ZVByb3BlcnR5KG4pOworK3JldHVybiB0aGlzO30saGFzQ2xh
c3M6ZnVuY3Rpb24obSl7cmV0dXJuIHRoaXMuY2xhc3NOYW1lLmNsZWFuKCkuY29udGFpbnMobSwi
ICIpO30sYWRkQ2xhc3M6ZnVuY3Rpb24obSl7aWYoIXRoaXMuaGFzQ2xhc3MobSkpe3RoaXMuY2xh
c3NOYW1lPSh0aGlzLmNsYXNzTmFtZSsiICIrbSkuY2xlYW4oKTsKKyt9cmV0dXJuIHRoaXM7fSxy
ZW1vdmVDbGFzczpmdW5jdGlvbihtKXt0aGlzLmNsYXNzTmFtZT10aGlzLmNsYXNzTmFtZS5yZXBs
YWNlKG5ldyBSZWdFeHAoIihefFxccykiK20rIig/Olxcc3wkKSIpLCIkMSIpO3JldHVybiB0aGlz
O30sdG9nZ2xlQ2xhc3M6ZnVuY3Rpb24obSxuKXtpZihuPT1udWxsKXtuPSF0aGlzLmhhc0NsYXNz
KG0pOworK31yZXR1cm4obik/dGhpcy5hZGRDbGFzcyhtKTp0aGlzLnJlbW92ZUNsYXNzKG0pO30s
YWRvcHQ6ZnVuY3Rpb24oKXt2YXIgcD10aGlzLG0scj1BcnJheS5mbGF0dGVuKGFyZ3VtZW50cyks
cT1yLmxlbmd0aDtpZihxPjEpe3A9bT1kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7
CisrfWZvcih2YXIgbz0wO288cTtvKyspe3ZhciBuPWRvY3VtZW50LmlkKHJbb10sdHJ1ZSk7aWYo
bil7cC5hcHBlbmRDaGlsZChuKTt9fWlmKG0pe3RoaXMuYXBwZW5kQ2hpbGQobSk7fXJldHVybiB0
aGlzO30sYXBwZW5kVGV4dDpmdW5jdGlvbihuLG0pe3JldHVybiB0aGlzLmdyYWIodGhpcy5nZXRE
b2N1bWVudCgpLm5ld1RleHROb2RlKG4pLG0pOworK30sZ3JhYjpmdW5jdGlvbihuLG0pe2JbbXx8
ImJvdHRvbSJdKGRvY3VtZW50LmlkKG4sdHJ1ZSksdGhpcyk7cmV0dXJuIHRoaXM7fSxpbmplY3Q6
ZnVuY3Rpb24obixtKXtiW218fCJib3R0b20iXSh0aGlzLGRvY3VtZW50LmlkKG4sdHJ1ZSkpO3Jl
dHVybiB0aGlzO30scmVwbGFjZXM6ZnVuY3Rpb24obSl7bT1kb2N1bWVudC5pZChtLHRydWUpOwor
K20ucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQodGhpcyxtKTtyZXR1cm4gdGhpczt9LHdyYXBzOmZ1
bmN0aW9uKG4sbSl7bj1kb2N1bWVudC5pZChuLHRydWUpO3JldHVybiB0aGlzLnJlcGxhY2VzKG4p
LmdyYWIobixtKTt9LGdldFNlbGVjdGVkOmZ1bmN0aW9uKCl7dGhpcy5zZWxlY3RlZEluZGV4Owor
K3JldHVybiBuZXcgRWxlbWVudHMoQXJyYXkuZnJvbSh0aGlzLm9wdGlvbnMpLmZpbHRlcihmdW5j
dGlvbihtKXtyZXR1cm4gbS5zZWxlY3RlZDt9KSk7fSx0b1F1ZXJ5U3RyaW5nOmZ1bmN0aW9uKCl7
dmFyIG09W107dGhpcy5nZXRFbGVtZW50cygiaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEiKS5lYWNo
KGZ1bmN0aW9uKG8pe3ZhciBuPW8udHlwZTsKKytpZighby5uYW1lfHxvLmRpc2FibGVkfHxuPT0i
c3VibWl0Inx8bj09InJlc2V0Inx8bj09ImZpbGUifHxuPT0iaW1hZ2UiKXtyZXR1cm47fXZhciBw
PShvLmdldCgidGFnIik9PSJzZWxlY3QiKT9vLmdldFNlbGVjdGVkKCkubWFwKGZ1bmN0aW9uKHEp
e3JldHVybiBkb2N1bWVudC5pZChxKS5nZXQoInZhbHVlIik7CisrfSk6KChuPT0icmFkaW8ifHxu
PT0iY2hlY2tib3giKSYmIW8uY2hlY2tlZCk/bnVsbDpvLmdldCgidmFsdWUiKTtBcnJheS5mcm9t
KHApLmVhY2goZnVuY3Rpb24ocSl7aWYodHlwZW9mIHEhPSJ1bmRlZmluZWQiKXttLnB1c2goZW5j
b2RlVVJJQ29tcG9uZW50KG8ubmFtZSkrIj0iK2VuY29kZVVSSUNvbXBvbmVudChxKSk7CisrfX0p
O30pO3JldHVybiBtLmpvaW4oIiYiKTt9fSk7dmFyIGo9e30sZT17fTt2YXIgYz1mdW5jdGlvbiht
KXtyZXR1cm4oZVttXXx8KGVbbV09e30pKTt9O3ZhciBnPWZ1bmN0aW9uKG4pe3ZhciBtPW4udWlk
O2lmKG4ucmVtb3ZlRXZlbnRzKXtuLnJlbW92ZUV2ZW50cygpOworK31pZihuLmNsZWFyQXR0cmli
dXRlcyl7bi5jbGVhckF0dHJpYnV0ZXMoKTt9aWYobSE9bnVsbCl7ZGVsZXRlIGpbbV07ZGVsZXRl
IGVbbV07fXJldHVybiBuO307dmFyIGw9e2lucHV0OiJjaGVja2VkIixvcHRpb246InNlbGVjdGVk
Iix0ZXh0YXJlYToidmFsdWUifTsKKytFbGVtZW50LmltcGxlbWVudCh7ZGVzdHJveTpmdW5jdGlv
bigpe3ZhciBtPWcodGhpcykuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKTtBcnJheS5lYWNoKG0s
Zyk7RWxlbWVudC5kaXNwb3NlKHRoaXMpO3JldHVybiBudWxsO30sZW1wdHk6ZnVuY3Rpb24oKXtB
cnJheS5mcm9tKHRoaXMuY2hpbGROb2RlcykuZWFjaChFbGVtZW50LmRpc3Bvc2UpOworK3JldHVy
biB0aGlzO30sZGlzcG9zZTpmdW5jdGlvbigpe3JldHVybih0aGlzLnBhcmVudE5vZGUpP3RoaXMu
cGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzKTp0aGlzO30sY2xvbmU6ZnVuY3Rpb24ocixwKXty
PXIhPT1mYWxzZTt2YXIgdz10aGlzLmNsb25lTm9kZShyKSxvPVt3XSxxPVt0aGlzXSx1OworK2lm
KHIpe28uYXBwZW5kKEFycmF5LmZyb20ody5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpKSk7cS5h
cHBlbmQoQXJyYXkuZnJvbSh0aGlzLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikpKTt9Zm9yKHU9
by5sZW5ndGg7dS0tOyl7dmFyIHM9b1t1XSx2PXFbdV07aWYoIXApe3MucmVtb3ZlQXR0cmlidXRl
KCJpZCIpOworK31pZihzLmNsZWFyQXR0cmlidXRlcyl7cy5jbGVhckF0dHJpYnV0ZXMoKTtzLm1l
cmdlQXR0cmlidXRlcyh2KTtzLnJlbW92ZUF0dHJpYnV0ZSgidWlkIik7aWYocy5vcHRpb25zKXt2
YXIgej1zLm9wdGlvbnMsbT12Lm9wdGlvbnM7Zm9yKHZhciB0PXoubGVuZ3RoO3QtLTsKKyspe3pb
dF0uc2VsZWN0ZWQ9bVt0XS5zZWxlY3RlZDt9fX12YXIgbj1sW3YudGFnTmFtZS50b0xvd2VyQ2Fz
ZSgpXTtpZihuJiZ2W25dKXtzW25dPXZbbl07fX1pZihCcm93c2VyLmllKXt2YXIgeD13LmdldEVs
ZW1lbnRzQnlUYWdOYW1lKCJvYmplY3QiKSx5PXRoaXMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIm9i
amVjdCIpOworK2Zvcih1PXgubGVuZ3RoO3UtLTspe3hbdV0ub3V0ZXJIVE1MPXlbdV0ub3V0ZXJI
VE1MO319cmV0dXJuIGRvY3VtZW50LmlkKHcpO319KTtbRWxlbWVudCxXaW5kb3csRG9jdW1lbnRd
Lmludm9rZSgiaW1wbGVtZW50Iix7YWRkTGlzdGVuZXI6ZnVuY3Rpb24ocCxvKXtpZihwPT0idW5s
b2FkIil7dmFyIG09byxuPXRoaXM7Cisrbz1mdW5jdGlvbigpe24ucmVtb3ZlTGlzdGVuZXIoInVu
bG9hZCIsbyk7bSgpO307fWVsc2V7alskdWlkKHRoaXMpXT10aGlzO31pZih0aGlzLmFkZEV2ZW50
TGlzdGVuZXIpe3RoaXMuYWRkRXZlbnRMaXN0ZW5lcihwLG8sISFhcmd1bWVudHNbMl0pO31lbHNl
e3RoaXMuYXR0YWNoRXZlbnQoIm9uIitwLG8pOworK31yZXR1cm4gdGhpczt9LHJlbW92ZUxpc3Rl
bmVyOmZ1bmN0aW9uKG4sbSl7aWYodGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKXt0aGlzLnJlbW92
ZUV2ZW50TGlzdGVuZXIobixtLCEhYXJndW1lbnRzWzJdKTt9ZWxzZXt0aGlzLmRldGFjaEV2ZW50
KCJvbiIrbixtKTsKKyt9cmV0dXJuIHRoaXM7fSxyZXRyaWV2ZTpmdW5jdGlvbihuLG0pe3ZhciBw
PWMoJHVpZCh0aGlzKSksbz1wW25dO2lmKG0hPW51bGwmJm89PW51bGwpe289cFtuXT1tO31yZXR1
cm4gbyE9bnVsbD9vOm51bGw7fSxzdG9yZTpmdW5jdGlvbihuLG0pe3ZhciBvPWMoJHVpZCh0aGlz
KSk7Cisrb1tuXT1tO3JldHVybiB0aGlzO30sZWxpbWluYXRlOmZ1bmN0aW9uKG0pe3ZhciBuPWMo
JHVpZCh0aGlzKSk7ZGVsZXRlIG5bbV07cmV0dXJuIHRoaXM7fX0pO2lmKHdpbmRvdy5hdHRhY2hF
dmVudCYmIXdpbmRvdy5hZGRFdmVudExpc3RlbmVyKXt3aW5kb3cuYWRkTGlzdGVuZXIoInVubG9h
ZCIsZnVuY3Rpb24oKXtPYmplY3QuZWFjaChqLGcpOworK2lmKHdpbmRvdy5Db2xsZWN0R2FyYmFn
ZSl7Q29sbGVjdEdhcmJhZ2UoKTt9fSk7fUVsZW1lbnQuUHJvcGVydGllcz17fTtFbGVtZW50LlBy
b3BlcnRpZXM9bmV3IEhhc2g7RWxlbWVudC5Qcm9wZXJ0aWVzLnN0eWxlPXtzZXQ6ZnVuY3Rpb24o
bSl7dGhpcy5zdHlsZS5jc3NUZXh0PW07CisrfSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5z
dHlsZS5jc3NUZXh0O30sZXJhc2U6ZnVuY3Rpb24oKXt0aGlzLnN0eWxlLmNzc1RleHQ9IiI7fX07
RWxlbWVudC5Qcm9wZXJ0aWVzLnRhZz17Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGFnTmFt
ZS50b0xvd2VyQ2FzZSgpOworK319O0VsZW1lbnQuUHJvcGVydGllcy5odG1sPShmdW5jdGlvbigp
e3ZhciBzPUZ1bmN0aW9uLmF0dGVtcHQoZnVuY3Rpb24oKXt2YXIgdT1kb2N1bWVudC5jcmVhdGVF
bGVtZW50KCJ0YWJsZSIpO3UuaW5uZXJIVE1MPSI8dHI+PHRkPjwvdGQ+PC90cj4iO30pO3ZhciB0
PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworK3ZhciBvPXt0YWJsZTpbMSwiPHRhYmxl
PiIsIjwvdGFibGU+Il0sc2VsZWN0OlsxLCI8c2VsZWN0PiIsIjwvc2VsZWN0PiJdLHRib2R5Olsy
LCI8dGFibGU+PHRib2R5PiIsIjwvdGJvZHk+PC90YWJsZT4iXSx0cjpbMywiPHRhYmxlPjx0Ym9k
eT48dHI+IiwiPC90cj48L3Rib2R5PjwvdGFibGU+Il19OworK28udGhlYWQ9by50Zm9vdD1vLnRi
b2R5O3QuaW5uZXJIVE1MPSI8bmF2PjwvbmF2PiI7dmFyIG49dC5jaGlsZE5vZGVzLmxlbmd0aD09
MTtpZighbil7dmFyIHE9ImFiYnIgYXJ0aWNsZSBhc2lkZSBhdWRpbyBjYW52YXMgZGF0YWxpc3Qg
ZGV0YWlscyBmaWdjYXB0aW9uIGZpZ3VyZSBmb290ZXIgaGVhZGVyIGhncm91cCBtYXJrIG1ldGVy
IG5hdiBvdXRwdXQgcHJvZ3Jlc3Mgc2VjdGlvbiBzdW1tYXJ5IHRpbWUgdmlkZW8iLnNwbGl0KCIg
IikscD1kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksbT1xLmxlbmd0aDsKKyt3aGls
ZShtLS0pe3AuY3JlYXRlRWxlbWVudChxW21dKTt9cC5hcHBlbmRDaGlsZCh0KTt9dmFyIHI9e3Nl
dDpmdW5jdGlvbih2KXtpZih0eXBlT2Yodik9PSJhcnJheSIpe3Y9di5qb2luKCIiKTt9dmFyIHc9
KCFzJiZvW3RoaXMuZ2V0KCJ0YWciKV0pO2lmKCF3JiYhbil7dz1bMCwiIiwiIl07CisrfWlmKHcp
e3ZhciB4PXQ7eC5pbm5lckhUTUw9d1sxXSt2K3dbMl07Zm9yKHZhciB1PXdbMF07dS0tOyl7eD14
LmZpcnN0Q2hpbGQ7fXRoaXMuZW1wdHkoKS5hZG9wdCh4LmNoaWxkTm9kZXMpO31lbHNle3RoaXMu
aW5uZXJIVE1MPXY7fX19O3IuZXJhc2U9ci5zZXQ7cmV0dXJuIHI7CisrfSkoKTt2YXIgZj1kb2N1
bWVudC5jcmVhdGVFbGVtZW50KCJmb3JtIik7Zi5pbm5lckhUTUw9IjxzZWxlY3Q+PG9wdGlvbj5z
PC9vcHRpb24+PC9zZWxlY3Q+IjtpZihmLmZpcnN0Q2hpbGQudmFsdWUhPSJzIil7RWxlbWVudC5Q
cm9wZXJ0aWVzLnZhbHVlPXtzZXQ6ZnVuY3Rpb24ocil7dmFyIG49dGhpcy5nZXQoInRhZyIpOwor
K2lmKG4hPSJzZWxlY3QiKXtyZXR1cm4gdGhpcy5zZXRQcm9wZXJ0eSgidmFsdWUiLHIpO312YXIg
bz10aGlzLmdldEVsZW1lbnRzKCJvcHRpb24iKTtmb3IodmFyIHA9MDtwPG8ubGVuZ3RoO3ArKyl7
dmFyIHE9b1twXSxtPXEuZ2V0QXR0cmlidXRlTm9kZSgidmFsdWUiKSxzPShtJiZtLnNwZWNpZmll
ZCk/cS52YWx1ZTpxLmdldCgidGV4dCIpOworK2lmKHM9PXIpe3JldHVybiBxLnNlbGVjdGVkPXRy
dWU7fX19LGdldDpmdW5jdGlvbigpe3ZhciBvPXRoaXMsbj1vLmdldCgidGFnIik7aWYobiE9InNl
bGVjdCImJm4hPSJvcHRpb24iKXtyZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eSgidmFsdWUiKTt9aWYo
bj09InNlbGVjdCImJiEobz1vLmdldFNlbGVjdGVkKClbMF0pKXtyZXR1cm4iIjsKKyt9dmFyIG09
by5nZXRBdHRyaWJ1dGVOb2RlKCJ2YWx1ZSIpO3JldHVybihtJiZtLnNwZWNpZmllZCk/by52YWx1
ZTpvLmdldCgidGV4dCIpO319O319KSgpOyhmdW5jdGlvbigpe3ZhciBmPWRvY3VtZW50Lmh0bWw7
RWxlbWVudC5Qcm9wZXJ0aWVzLnN0eWxlcz17c2V0OmZ1bmN0aW9uKGkpe3RoaXMuc2V0U3R5bGVz
KGkpOworK319O3ZhciBoPShmLnN0eWxlLm9wYWNpdHkhPW51bGwpLGE9KGYuc3R5bGUuZmlsdGVy
IT1udWxsKSxnPS9hbHBoYVwob3BhY2l0eT0oW1xkLl0rKVwpL2k7dmFyIGI9ZnVuY3Rpb24oaixp
KXtqLnN0b3JlKCIkb3BhY2l0eSIsaSk7ai5zdHlsZS52aXNpYmlsaXR5PWk+MD8idmlzaWJsZSI6
ImhpZGRlbiI7CisrfTt2YXIgZD0oaD9mdW5jdGlvbihqLGkpe2ouc3R5bGUub3BhY2l0eT1pO306
KGE/ZnVuY3Rpb24oaixpKXtpZighai5jdXJyZW50U3R5bGV8fCFqLmN1cnJlbnRTdHlsZS5oYXNM
YXlvdXQpe2ouc3R5bGUuem9vbT0xO31pPShpKjEwMCkubGltaXQoMCwxMDApLnJvdW5kKCk7Cisr
aT0oaT09MTAwKT8iIjoiYWxwaGEob3BhY2l0eT0iK2krIikiO3ZhciBrPWouc3R5bGUuZmlsdGVy
fHxqLmdldENvbXB1dGVkU3R5bGUoImZpbHRlciIpfHwiIjtqLnN0eWxlLmZpbHRlcj1nLnRlc3Qo
ayk/ay5yZXBsYWNlKGcsaSk6aytpO306YikpO3ZhciBlPShoP2Z1bmN0aW9uKGope3ZhciBpPWou
c3R5bGUub3BhY2l0eXx8ai5nZXRDb21wdXRlZFN0eWxlKCJvcGFjaXR5Iik7CisrcmV0dXJuKGk9
PSIiKT8xOmkudG9GbG9hdCgpO306KGE/ZnVuY3Rpb24oail7dmFyIGs9KGouc3R5bGUuZmlsdGVy
fHxqLmdldENvbXB1dGVkU3R5bGUoImZpbHRlciIpKSxpO2lmKGspe2k9ay5tYXRjaChnKTt9cmV0
dXJuKGk9PW51bGx8fGs9PW51bGwpPzE6KGlbMV0vMTAwKTsKKyt9OmZ1bmN0aW9uKGope3ZhciBp
PWoucmV0cmlldmUoIiRvcGFjaXR5Iik7aWYoaT09bnVsbCl7aT0oai5zdHlsZS52aXNpYmlsaXR5
PT0iaGlkZGVuIj8wOjEpO31yZXR1cm4gaTt9KSk7dmFyIGM9KGYuc3R5bGUuY3NzRmxvYXQ9PW51
bGwpPyJzdHlsZUZsb2F0IjoiY3NzRmxvYXQiOworK0VsZW1lbnQuaW1wbGVtZW50KHtnZXRDb21w
dXRlZFN0eWxlOmZ1bmN0aW9uKGspe2lmKHRoaXMuY3VycmVudFN0eWxlKXtyZXR1cm4gdGhpcy5j
dXJyZW50U3R5bGVbay5jYW1lbENhc2UoKV07fXZhciBqPUVsZW1lbnQuZ2V0RG9jdW1lbnQodGhp
cykuZGVmYXVsdFZpZXcsaT1qP2ouZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLG51bGwpOm51bGw7Cisr
cmV0dXJuKGkpP2kuZ2V0UHJvcGVydHlWYWx1ZSgoaz09Yyk/ImZsb2F0IjprLmh5cGhlbmF0ZSgp
KTpudWxsO30sc2V0U3R5bGU6ZnVuY3Rpb24oaixpKXtpZihqPT0ib3BhY2l0eSIpe2QodGhpcyxw
YXJzZUZsb2F0KGkpKTtyZXR1cm4gdGhpczt9aj0oaj09ImZsb2F0Ij9jOmopLmNhbWVsQ2FzZSgp
OworK2lmKHR5cGVPZihpKSE9InN0cmluZyIpe3ZhciBrPShFbGVtZW50LlN0eWxlc1tqXXx8IkAi
KS5zcGxpdCgiICIpO2k9QXJyYXkuZnJvbShpKS5tYXAoZnVuY3Rpb24obSxsKXtpZigha1tsXSl7
cmV0dXJuIiI7fXJldHVybih0eXBlT2YobSk9PSJudW1iZXIiKT9rW2xdLnJlcGxhY2UoIkAiLE1h
dGgucm91bmQobSkpOm07CisrfSkuam9pbigiICIpO31lbHNle2lmKGk9PVN0cmluZyhOdW1iZXIo
aSkpKXtpPU1hdGgucm91bmQoaSk7fX10aGlzLnN0eWxlW2pdPWk7cmV0dXJuIHRoaXM7fSxnZXRT
dHlsZTpmdW5jdGlvbihvKXtpZihvPT0ib3BhY2l0eSIpe3JldHVybiBlKHRoaXMpO31vPShvPT0i
ZmxvYXQiP2M6bykuY2FtZWxDYXNlKCk7CisrdmFyIGk9dGhpcy5zdHlsZVtvXTtpZighaXx8bz09
InpJbmRleCIpe2k9W107Zm9yKHZhciBuIGluIEVsZW1lbnQuU2hvcnRTdHlsZXMpe2lmKG8hPW4p
e2NvbnRpbnVlO31mb3IodmFyIG0gaW4gRWxlbWVudC5TaG9ydFN0eWxlc1tuXSl7aS5wdXNoKHRo
aXMuZ2V0U3R5bGUobSkpOworK31yZXR1cm4gaS5qb2luKCIgIik7fWk9dGhpcy5nZXRDb21wdXRl
ZFN0eWxlKG8pO31pZihpKXtpPVN0cmluZyhpKTt2YXIgaz1pLm1hdGNoKC9yZ2JhP1woW1xkXHMs
XStcKS8pO2lmKGspe2k9aS5yZXBsYWNlKGtbMF0sa1swXS5yZ2JUb0hleCgpKTt9fWlmKEJyb3dz
ZXIub3BlcmF8fChCcm93c2VyLmllJiZpc05hTihwYXJzZUZsb2F0KGkpKSkpe2lmKCgvXihoZWln
aHR8d2lkdGgpJC8pLnRlc3Qobykpe3ZhciBqPShvPT0id2lkdGgiKT9bImxlZnQiLCJyaWdodCJd
OlsidG9wIiwiYm90dG9tIl0sbD0wOworK2ouZWFjaChmdW5jdGlvbihwKXtsKz10aGlzLmdldFN0
eWxlKCJib3JkZXItIitwKyItd2lkdGgiKS50b0ludCgpK3RoaXMuZ2V0U3R5bGUoInBhZGRpbmct
IitwKS50b0ludCgpO30sdGhpcyk7cmV0dXJuIHRoaXNbIm9mZnNldCIrby5jYXBpdGFsaXplKCld
LWwrInB4IjsKKyt9aWYoQnJvd3Nlci5vcGVyYSYmU3RyaW5nKGkpLmluZGV4T2YoInB4IikhPS0x
KXtyZXR1cm4gaTt9aWYoKC9eYm9yZGVyKC4rKVdpZHRofG1hcmdpbnxwYWRkaW5nLykudGVzdChv
KSl7cmV0dXJuIjBweCI7fX1yZXR1cm4gaTt9LHNldFN0eWxlczpmdW5jdGlvbihqKXtmb3IodmFy
IGkgaW4gail7dGhpcy5zZXRTdHlsZShpLGpbaV0pOworK31yZXR1cm4gdGhpczt9LGdldFN0eWxl
czpmdW5jdGlvbigpe3ZhciBpPXt9O0FycmF5LmZsYXR0ZW4oYXJndW1lbnRzKS5lYWNoKGZ1bmN0
aW9uKGope2lbal09dGhpcy5nZXRTdHlsZShqKTt9LHRoaXMpO3JldHVybiBpO319KTtFbGVtZW50
LlN0eWxlcz17bGVmdDoiQHB4Iix0b3A6IkBweCIsYm90dG9tOiJAcHgiLHJpZ2h0OiJAcHgiLHdp
ZHRoOiJAcHgiLGhlaWdodDoiQHB4IixtYXhXaWR0aDoiQHB4IixtYXhIZWlnaHQ6IkBweCIsbWlu
V2lkdGg6IkBweCIsbWluSGVpZ2h0OiJAcHgiLGJhY2tncm91bmRDb2xvcjoicmdiKEAsIEAsIEAp
IixiYWNrZ3JvdW5kUG9zaXRpb246IkBweCBAcHgiLGNvbG9yOiJyZ2IoQCwgQCwgQCkiLGZvbnRT
aXplOiJAcHgiLGxldHRlclNwYWNpbmc6IkBweCIsbGluZUhlaWdodDoiQHB4IixjbGlwOiJyZWN0
KEBweCBAcHggQHB4IEBweCkiLG1hcmdpbjoiQHB4IEBweCBAcHggQHB4IixwYWRkaW5nOiJAcHgg
QHB4IEBweCBAcHgiLGJvcmRlcjoiQHB4IEAgcmdiKEAsIEAsIEApIEBweCBAIHJnYihALCBALCBA
KSBAcHggQCByZ2IoQCwgQCwgQCkiLGJvcmRlcldpZHRoOiJAcHggQHB4IEBweCBAcHgiLGJvcmRl
clN0eWxlOiJAIEAgQCBAIixib3JkZXJDb2xvcjoicmdiKEAsIEAsIEApIHJnYihALCBALCBAKSBy
Z2IoQCwgQCwgQCkgcmdiKEAsIEAsIEApIix6SW5kZXg6IkAiLHpvb206IkAiLGZvbnRXZWlnaHQ6
IkAiLHRleHRJbmRlbnQ6IkBweCIsb3BhY2l0eToiQCJ9OworK0VsZW1lbnQuaW1wbGVtZW50KHtz
ZXRPcGFjaXR5OmZ1bmN0aW9uKGkpe2QodGhpcyxpKTtyZXR1cm4gdGhpczt9LGdldE9wYWNpdHk6
ZnVuY3Rpb24oKXtyZXR1cm4gZSh0aGlzKTt9fSk7RWxlbWVudC5Qcm9wZXJ0aWVzLm9wYWNpdHk9
e3NldDpmdW5jdGlvbihpKXtkKHRoaXMsaSk7CisrYih0aGlzLGkpO30sZ2V0OmZ1bmN0aW9uKCl7
cmV0dXJuIGUodGhpcyk7fX07RWxlbWVudC5TdHlsZXM9bmV3IEhhc2goRWxlbWVudC5TdHlsZXMp
O0VsZW1lbnQuU2hvcnRTdHlsZXM9e21hcmdpbjp7fSxwYWRkaW5nOnt9LGJvcmRlcjp7fSxib3Jk
ZXJXaWR0aDp7fSxib3JkZXJTdHlsZTp7fSxib3JkZXJDb2xvcjp7fX07CisrWyJUb3AiLCJSaWdo
dCIsIkJvdHRvbSIsIkxlZnQiXS5lYWNoKGZ1bmN0aW9uKG8pe3ZhciBuPUVsZW1lbnQuU2hvcnRT
dHlsZXM7dmFyIGo9RWxlbWVudC5TdHlsZXM7WyJtYXJnaW4iLCJwYWRkaW5nIl0uZWFjaChmdW5j
dGlvbihwKXt2YXIgcT1wK287bltwXVtxXT1qW3FdPSJAcHgiOworK30pO3ZhciBtPSJib3JkZXIi
K287bi5ib3JkZXJbbV09alttXT0iQHB4IEAgcmdiKEAsIEAsIEApIjt2YXIgbD1tKyJXaWR0aCIs
aT1tKyJTdHlsZSIsaz1tKyJDb2xvciI7blttXT17fTtuLmJvcmRlcldpZHRoW2xdPW5bbV1bbF09
altsXT0iQHB4IjtuLmJvcmRlclN0eWxlW2ldPW5bbV1baV09altpXT0iQCI7Cisrbi5ib3JkZXJD
b2xvcltrXT1uW21dW2tdPWpba109InJnYihALCBALCBAKSI7fSk7fSkoKTsoZnVuY3Rpb24oKXtF
bGVtZW50LlByb3BlcnRpZXMuZXZlbnRzPXtzZXQ6ZnVuY3Rpb24oYil7dGhpcy5hZGRFdmVudHMo
Yik7fX07W0VsZW1lbnQsV2luZG93LERvY3VtZW50XS5pbnZva2UoImltcGxlbWVudCIse2FkZEV2
ZW50OmZ1bmN0aW9uKGYsaCl7dmFyIGk9dGhpcy5yZXRyaWV2ZSgiZXZlbnRzIix7fSk7CisraWYo
IWlbZl0pe2lbZl09e2tleXM6W10sdmFsdWVzOltdfTt9aWYoaVtmXS5rZXlzLmNvbnRhaW5zKGgp
KXtyZXR1cm4gdGhpczt9aVtmXS5rZXlzLnB1c2goaCk7dmFyIGc9ZixiPUVsZW1lbnQuRXZlbnRz
W2ZdLGQ9aCxqPXRoaXM7aWYoYil7aWYoYi5vbkFkZCl7Yi5vbkFkZC5jYWxsKHRoaXMsaCxmKTsK
Kyt9aWYoYi5jb25kaXRpb24pe2Q9ZnVuY3Rpb24oayl7aWYoYi5jb25kaXRpb24uY2FsbCh0aGlz
LGssZikpe3JldHVybiBoLmNhbGwodGhpcyxrKTt9cmV0dXJuIHRydWU7fTt9aWYoYi5iYXNlKXtn
PUZ1bmN0aW9uLmZyb20oYi5iYXNlKS5jYWxsKHRoaXMsZik7fX12YXIgZT1mdW5jdGlvbigpe3Jl
dHVybiBoLmNhbGwoaik7CisrfTt2YXIgYz1FbGVtZW50Lk5hdGl2ZUV2ZW50c1tnXTtpZihjKXtp
ZihjPT0yKXtlPWZ1bmN0aW9uKGspe2s9bmV3IERPTUV2ZW50KGssai5nZXRXaW5kb3coKSk7aWYo
ZC5jYWxsKGosayk9PT1mYWxzZSl7ay5zdG9wKCk7fX07fXRoaXMuYWRkTGlzdGVuZXIoZyxlLGFy
Z3VtZW50c1syXSk7CisrfWlbZl0udmFsdWVzLnB1c2goZSk7cmV0dXJuIHRoaXM7fSxyZW1vdmVF
dmVudDpmdW5jdGlvbihlLGQpe3ZhciBjPXRoaXMucmV0cmlldmUoImV2ZW50cyIpO2lmKCFjfHwh
Y1tlXSl7cmV0dXJuIHRoaXM7fXZhciBoPWNbZV07dmFyIGI9aC5rZXlzLmluZGV4T2YoZCk7Cisr
aWYoYj09LTEpe3JldHVybiB0aGlzO312YXIgZz1oLnZhbHVlc1tiXTtkZWxldGUgaC5rZXlzW2Jd
O2RlbGV0ZSBoLnZhbHVlc1tiXTt2YXIgZj1FbGVtZW50LkV2ZW50c1tlXTtpZihmKXtpZihmLm9u
UmVtb3ZlKXtmLm9uUmVtb3ZlLmNhbGwodGhpcyxkLGUpO31pZihmLmJhc2Upe2U9RnVuY3Rpb24u
ZnJvbShmLmJhc2UpLmNhbGwodGhpcyxlKTsKKyt9fXJldHVybihFbGVtZW50Lk5hdGl2ZUV2ZW50
c1tlXSk/dGhpcy5yZW1vdmVMaXN0ZW5lcihlLGcsYXJndW1lbnRzWzJdKTp0aGlzO30sYWRkRXZl
bnRzOmZ1bmN0aW9uKGIpe2Zvcih2YXIgYyBpbiBiKXt0aGlzLmFkZEV2ZW50KGMsYltjXSk7fXJl
dHVybiB0aGlzOworK30scmVtb3ZlRXZlbnRzOmZ1bmN0aW9uKGIpe3ZhciBkO2lmKHR5cGVPZihi
KT09Im9iamVjdCIpe2ZvcihkIGluIGIpe3RoaXMucmVtb3ZlRXZlbnQoZCxiW2RdKTt9cmV0dXJu
IHRoaXM7fXZhciBjPXRoaXMucmV0cmlldmUoImV2ZW50cyIpO2lmKCFjKXtyZXR1cm4gdGhpczsK
Kyt9aWYoIWIpe2ZvcihkIGluIGMpe3RoaXMucmVtb3ZlRXZlbnRzKGQpO310aGlzLmVsaW1pbmF0
ZSgiZXZlbnRzIik7fWVsc2V7aWYoY1tiXSl7Y1tiXS5rZXlzLmVhY2goZnVuY3Rpb24oZSl7dGhp
cy5yZW1vdmVFdmVudChiLGUpO30sdGhpcyk7ZGVsZXRlIGNbYl07CisrfX1yZXR1cm4gdGhpczt9
LGZpcmVFdmVudDpmdW5jdGlvbihlLGMsYil7dmFyIGQ9dGhpcy5yZXRyaWV2ZSgiZXZlbnRzIik7
aWYoIWR8fCFkW2VdKXtyZXR1cm4gdGhpczt9Yz1BcnJheS5mcm9tKGMpO2RbZV0ua2V5cy5lYWNo
KGZ1bmN0aW9uKGYpe2lmKGIpe2YuZGVsYXkoYix0aGlzLGMpOworK31lbHNle2YuYXBwbHkodGhp
cyxjKTt9fSx0aGlzKTtyZXR1cm4gdGhpczt9LGNsb25lRXZlbnRzOmZ1bmN0aW9uKGUsZCl7ZT1k
b2N1bWVudC5pZChlKTt2YXIgYz1lLnJldHJpZXZlKCJldmVudHMiKTtpZighYyl7cmV0dXJuIHRo
aXM7fWlmKCFkKXtmb3IodmFyIGIgaW4gYyl7dGhpcy5jbG9uZUV2ZW50cyhlLGIpOworK319ZWxz
ZXtpZihjW2RdKXtjW2RdLmtleXMuZWFjaChmdW5jdGlvbihmKXt0aGlzLmFkZEV2ZW50KGQsZik7
fSx0aGlzKTt9fXJldHVybiB0aGlzO319KTtFbGVtZW50Lk5hdGl2ZUV2ZW50cz17Y2xpY2s6Mixk
YmxjbGljazoyLG1vdXNldXA6Mixtb3VzZWRvd246Mixjb250ZXh0bWVudToyLG1vdXNld2hlZWw6
MixET01Nb3VzZVNjcm9sbDoyLG1vdXNlb3ZlcjoyLG1vdXNlb3V0OjIsbW91c2Vtb3ZlOjIsc2Vs
ZWN0c3RhcnQ6MixzZWxlY3RlbmQ6MixrZXlkb3duOjIsa2V5cHJlc3M6MixrZXl1cDoyLG9yaWVu
dGF0aW9uY2hhbmdlOjIsdG91Y2hzdGFydDoyLHRvdWNobW92ZToyLHRvdWNoZW5kOjIsdG91Y2hj
YW5jZWw6MixnZXN0dXJlc3RhcnQ6MixnZXN0dXJlY2hhbmdlOjIsZ2VzdHVyZWVuZDoyLGZvY3Vz
OjIsYmx1cjoyLGNoYW5nZToyLHJlc2V0OjIsc2VsZWN0OjIsc3VibWl0OjIscGFzdGU6MixpbnB1
dDoyLGxvYWQ6Mix1bmxvYWQ6MSxiZWZvcmV1bmxvYWQ6MixyZXNpemU6MSxtb3ZlOjEsRE9NQ29u
dGVudExvYWRlZDoxLHJlYWR5c3RhdGVjaGFuZ2U6MSxlcnJvcjoxLGFib3J0OjEsc2Nyb2xsOjF9
OworK3ZhciBhPWZ1bmN0aW9uKGIpe3ZhciBjPWIucmVsYXRlZFRhcmdldDtpZihjPT1udWxsKXty
ZXR1cm4gdHJ1ZTt9aWYoIWMpe3JldHVybiBmYWxzZTt9cmV0dXJuKGMhPXRoaXMmJmMucHJlZml4
IT0ieHVsIiYmdHlwZU9mKHRoaXMpIT0iZG9jdW1lbnQiJiYhdGhpcy5jb250YWlucyhjKSk7Cisr
fTtFbGVtZW50LkV2ZW50cz17bW91c2VlbnRlcjp7YmFzZToibW91c2VvdmVyIixjb25kaXRpb246
YX0sbW91c2VsZWF2ZTp7YmFzZToibW91c2VvdXQiLGNvbmRpdGlvbjphfSxtb3VzZXdoZWVsOnti
YXNlOihCcm93c2VyLmZpcmVmb3gpPyJET01Nb3VzZVNjcm9sbCI6Im1vdXNld2hlZWwifX07Cisr
aWYoIXdpbmRvdy5hZGRFdmVudExpc3RlbmVyKXtFbGVtZW50Lk5hdGl2ZUV2ZW50cy5wcm9wZXJ0
eWNoYW5nZT0yO0VsZW1lbnQuRXZlbnRzLmNoYW5nZT17YmFzZTpmdW5jdGlvbigpe3ZhciBiPXRo
aXMudHlwZTtyZXR1cm4odGhpcy5nZXQoInRhZyIpPT0iaW5wdXQiJiYoYj09InJhZGlvInx8Yj09
ImNoZWNrYm94IikpPyJwcm9wZXJ0eWNoYW5nZSI6ImNoYW5nZSI7CisrfSxjb25kaXRpb246ZnVu
Y3Rpb24oYil7cmV0dXJuICEhKHRoaXMudHlwZSE9InJhZGlvInx8dGhpcy5jaGVja2VkKTt9fTt9
RWxlbWVudC5FdmVudHM9bmV3IEhhc2goRWxlbWVudC5FdmVudHMpO30pKCk7KGZ1bmN0aW9uKCl7
dmFyIGM9ISF3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcjsKKytFbGVtZW50Lk5hdGl2ZUV2ZW50cy5m
b2N1c2luPUVsZW1lbnQuTmF0aXZlRXZlbnRzLmZvY3Vzb3V0PTI7dmFyIGs9ZnVuY3Rpb24obCxt
LG4sbyxwKXt3aGlsZShwJiZwIT1sKXtpZihtKHAsbykpe3JldHVybiBuLmNhbGwocCxvLHApO31w
PWRvY3VtZW50LmlkKHAucGFyZW50Tm9kZSk7CisrfX07dmFyIGE9e21vdXNlZW50ZXI6e2Jhc2U6
Im1vdXNlb3ZlciJ9LG1vdXNlbGVhdmU6e2Jhc2U6Im1vdXNlb3V0In0sZm9jdXM6e2Jhc2U6ImZv
Y3VzIisoYz8iIjoiaW4iKSxjYXB0dXJlOnRydWV9LGJsdXI6e2Jhc2U6Yz8iYmx1ciI6ImZvY3Vz
b3V0IixjYXB0dXJlOnRydWV9fTsKKyt2YXIgYj0iJGRlbGVnYXRpb246Ijt2YXIgaT1mdW5jdGlv
bihsKXtyZXR1cm57YmFzZToiZm9jdXNpbiIscmVtb3ZlOmZ1bmN0aW9uKG0sbyl7dmFyIHA9bS5y
ZXRyaWV2ZShiK2wrImxpc3RlbmVycyIse30pW29dO2lmKHAmJnAuZm9ybXMpe2Zvcih2YXIgbj1w
LmZvcm1zLmxlbmd0aDsKKytuLS07KXtwLmZvcm1zW25dLnJlbW92ZUV2ZW50KGwscC5mbnNbbl0p
O319fSxsaXN0ZW46ZnVuY3Rpb24oeCxyLHYsbix0LHMpe3ZhciBvPSh0LmdldCgidGFnIik9PSJm
b3JtIik/dDpuLnRhcmdldC5nZXRQYXJlbnQoImZvcm0iKTtpZighbyl7cmV0dXJuO312YXIgdT14
LnJldHJpZXZlKGIrbCsibGlzdGVuZXJzIix7fSkscD11W3NdfHx7Zm9ybXM6W10sZm5zOltdfSxt
PXAuZm9ybXMsdz1wLmZuczsKKytpZihtLmluZGV4T2YobykhPS0xKXtyZXR1cm47fW0ucHVzaChv
KTt2YXIgcT1mdW5jdGlvbih5KXtrKHgscix2LHksdCk7fTtvLmFkZEV2ZW50KGwscSk7dy5wdXNo
KHEpO3Vbc109cDt4LnN0b3JlKGIrbCsibGlzdGVuZXJzIix1KTt9fTt9O3ZhciBkPWZ1bmN0aW9u
KGwpe3JldHVybntiYXNlOiJmb2N1c2luIixsaXN0ZW46ZnVuY3Rpb24obSxuLHAscSxyKXt2YXIg
bz17Ymx1cjpmdW5jdGlvbigpe3RoaXMucmVtb3ZlRXZlbnRzKG8pOworK319O29bbF09ZnVuY3Rp
b24ocyl7ayhtLG4scCxzLHIpO307cS50YXJnZXQuYWRkRXZlbnRzKG8pO319O307aWYoIWMpe09i
amVjdC5hcHBlbmQoYSx7c3VibWl0OmkoInN1Ym1pdCIpLHJlc2V0OmkoInJlc2V0IiksY2hhbmdl
OmQoImNoYW5nZSIpLHNlbGVjdDpkKCJzZWxlY3QiKX0pOworK312YXIgaD1FbGVtZW50LnByb3Rv
dHlwZSxmPWguYWRkRXZlbnQsaj1oLnJlbW92ZUV2ZW50O3ZhciBlPWZ1bmN0aW9uKGwsbSl7cmV0
dXJuIGZ1bmN0aW9uKHIscSxuKXtpZihyLmluZGV4T2YoIjpyZWxheSIpPT0tMSl7cmV0dXJuIGwu
Y2FsbCh0aGlzLHIscSxuKTsKKyt9dmFyIG89U2xpY2sucGFyc2UocikuZXhwcmVzc2lvbnNbMF1b
MF07aWYoby5wc2V1ZG9zWzBdLmtleSE9InJlbGF5Iil7cmV0dXJuIGwuY2FsbCh0aGlzLHIscSxu
KTt9dmFyIHA9by50YWc7by5wc2V1ZG9zLnNsaWNlKDEpLmVhY2goZnVuY3Rpb24ocyl7cCs9Ijoi
K3Mua2V5KyhzLnZhbHVlPyIoIitzLnZhbHVlKyIpIjoiIik7CisrfSk7bC5jYWxsKHRoaXMscixx
KTtyZXR1cm4gbS5jYWxsKHRoaXMscCxvLnBzZXVkb3NbMF0udmFsdWUscSk7fTt9O3ZhciBnPXth
ZGRFdmVudDpmdW5jdGlvbih2LHEseCl7dmFyIHQ9dGhpcy5yZXRyaWV2ZSgiJGRlbGVnYXRlcyIs
e30pLHI9dFt2XTtpZihyKXtmb3IodmFyIHkgaW4gcil7aWYoclt5XS5mbj09eCYmclt5XS5tYXRj
aD09cSl7cmV0dXJuIHRoaXM7CisrfX19dmFyIHA9dix1PXEsbz14LG49YVt2XXx8e307dj1uLmJh
c2V8fHA7cT1mdW5jdGlvbihCKXtyZXR1cm4gU2xpY2subWF0Y2goQix1KTt9O3ZhciB3PUVsZW1l
bnQuRXZlbnRzW3BdO2lmKHcmJncuY29uZGl0aW9uKXt2YXIgbD1xLG09dy5jb25kaXRpb247cT1m
dW5jdGlvbihDLEIpe3JldHVybiBsKEMsQikmJm0uY2FsbChDLEIsdik7CisrfTt9dmFyIHo9dGhp
cyxzPVN0cmluZy51bmlxdWVJRCgpO3ZhciBBPW4ubGlzdGVuP2Z1bmN0aW9uKEIsQyl7aWYoIUMm
JkImJkIudGFyZ2V0KXtDPUIudGFyZ2V0O31pZihDKXtuLmxpc3Rlbih6LHEseCxCLEMscyk7fX06
ZnVuY3Rpb24oQixDKXtpZighQyYmQiYmQi50YXJnZXQpe0M9Qi50YXJnZXQ7CisrfWlmKEMpe2so
eixxLHgsQixDKTt9fTtpZighcil7cj17fTt9cltzXT17bWF0Y2g6dSxmbjpvLGRlbGVnYXRvcjpB
fTt0W3BdPXI7cmV0dXJuIGYuY2FsbCh0aGlzLHYsQSxuLmNhcHR1cmUpO30scmVtb3ZlRXZlbnQ6
ZnVuY3Rpb24ocixuLHQsdSl7dmFyIHE9dGhpcy5yZXRyaWV2ZSgiJGRlbGVnYXRlcyIse30pLHA9
cVtyXTsKKytpZighcCl7cmV0dXJuIHRoaXM7fWlmKHUpe3ZhciBtPXIsdz1wW3VdLmRlbGVnYXRv
cixsPWFbcl18fHt9O3I9bC5iYXNlfHxtO2lmKGwucmVtb3ZlKXtsLnJlbW92ZSh0aGlzLHUpO31k
ZWxldGUgcFt1XTtxW21dPXA7cmV0dXJuIGouY2FsbCh0aGlzLHIsdyk7fXZhciBvLHY7CisraWYo
dCl7Zm9yKG8gaW4gcCl7dj1wW29dO2lmKHYubWF0Y2g9PW4mJnYuZm49PXQpe3JldHVybiBnLnJl
bW92ZUV2ZW50LmNhbGwodGhpcyxyLG4sdCxvKTt9fX1lbHNle2ZvcihvIGluIHApe3Y9cFtvXTtp
Zih2Lm1hdGNoPT1uKXtnLnJlbW92ZUV2ZW50LmNhbGwodGhpcyxyLG4sdi5mbixvKTsKKyt9fX1y
ZXR1cm4gdGhpczt9fTtbRWxlbWVudCxXaW5kb3csRG9jdW1lbnRdLmludm9rZSgiaW1wbGVtZW50
Iix7YWRkRXZlbnQ6ZShmLGcuYWRkRXZlbnQpLHJlbW92ZUV2ZW50OmUoaixnLnJlbW92ZUV2ZW50
KX0pO30pKCk7KGZ1bmN0aW9uKCl7dmFyIGg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iiks
ZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKytoLnN0eWxlLmhlaWdodD0iMCI7aC5h
cHBlbmRDaGlsZChlKTt2YXIgZD0oZS5vZmZzZXRQYXJlbnQ9PT1oKTtoPWU9bnVsbDt2YXIgbD1m
dW5jdGlvbihtKXtyZXR1cm4gayhtLCJwb3NpdGlvbiIpIT0ic3RhdGljInx8YShtKTt9O3ZhciBp
PWZ1bmN0aW9uKG0pe3JldHVybiBsKG0pfHwoL14oPzp0YWJsZXx0ZHx0aCkkL2kpLnRlc3QobS50
YWdOYW1lKTsKKyt9O0VsZW1lbnQuaW1wbGVtZW50KHtzY3JvbGxUbzpmdW5jdGlvbihtLG4pe2lm
KGEodGhpcykpe3RoaXMuZ2V0V2luZG93KCkuc2Nyb2xsVG8obSxuKTt9ZWxzZXt0aGlzLnNjcm9s
bExlZnQ9bTt0aGlzLnNjcm9sbFRvcD1uO31yZXR1cm4gdGhpczt9LGdldFNpemU6ZnVuY3Rpb24o
KXtpZihhKHRoaXMpKXtyZXR1cm4gdGhpcy5nZXRXaW5kb3coKS5nZXRTaXplKCk7CisrfXJldHVy
bnt4OnRoaXMub2Zmc2V0V2lkdGgseTp0aGlzLm9mZnNldEhlaWdodH07fSxnZXRTY3JvbGxTaXpl
OmZ1bmN0aW9uKCl7aWYoYSh0aGlzKSl7cmV0dXJuIHRoaXMuZ2V0V2luZG93KCkuZ2V0U2Nyb2xs
U2l6ZSgpO31yZXR1cm57eDp0aGlzLnNjcm9sbFdpZHRoLHk6dGhpcy5zY3JvbGxIZWlnaHR9Owor
K30sZ2V0U2Nyb2xsOmZ1bmN0aW9uKCl7aWYoYSh0aGlzKSl7cmV0dXJuIHRoaXMuZ2V0V2luZG93
KCkuZ2V0U2Nyb2xsKCk7fXJldHVybnt4OnRoaXMuc2Nyb2xsTGVmdCx5OnRoaXMuc2Nyb2xsVG9w
fTt9LGdldFNjcm9sbHM6ZnVuY3Rpb24oKXt2YXIgbj10aGlzLnBhcmVudE5vZGUsbT17eDowLHk6
MH07Cisrd2hpbGUobiYmIWEobikpe20ueCs9bi5zY3JvbGxMZWZ0O20ueSs9bi5zY3JvbGxUb3A7
bj1uLnBhcmVudE5vZGU7fXJldHVybiBtO30sZ2V0T2Zmc2V0UGFyZW50OmQ/ZnVuY3Rpb24oKXt2
YXIgbT10aGlzO2lmKGEobSl8fGsobSwicG9zaXRpb24iKT09ImZpeGVkIil7cmV0dXJuIG51bGw7
CisrfXZhciBuPShrKG0sInBvc2l0aW9uIik9PSJzdGF0aWMiKT9pOmw7d2hpbGUoKG09bS5wYXJl
bnROb2RlKSl7aWYobihtKSl7cmV0dXJuIG07fX1yZXR1cm4gbnVsbDt9OmZ1bmN0aW9uKCl7dmFy
IG09dGhpcztpZihhKG0pfHxrKG0sInBvc2l0aW9uIik9PSJmaXhlZCIpe3JldHVybiBudWxsOwor
K310cnl7cmV0dXJuIG0ub2Zmc2V0UGFyZW50O31jYXRjaChuKXt9cmV0dXJuIG51bGw7fSxnZXRP
ZmZzZXRzOmZ1bmN0aW9uKCl7aWYodGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QmJiFCcm93c2Vy
LlBsYXRmb3JtLmlvcyl7dmFyIHI9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxvPWRvY3Vt
ZW50LmlkKHRoaXMuZ2V0RG9jdW1lbnQoKS5kb2N1bWVudEVsZW1lbnQpLHE9by5nZXRTY3JvbGwo
KSx0PXRoaXMuZ2V0U2Nyb2xscygpLHM9KGsodGhpcywicG9zaXRpb24iKT09ImZpeGVkIik7Cisr
cmV0dXJue3g6ci5sZWZ0LnRvSW50KCkrdC54Kygocyk/MDpxLngpLW8uY2xpZW50TGVmdCx5OnIu
dG9wLnRvSW50KCkrdC55Kygocyk/MDpxLnkpLW8uY2xpZW50VG9wfTt9dmFyIG49dGhpcyxtPXt4
OjAseTowfTtpZihhKHRoaXMpKXtyZXR1cm4gbTt9d2hpbGUobiYmIWEobikpe20ueCs9bi5vZmZz
ZXRMZWZ0OworK20ueSs9bi5vZmZzZXRUb3A7aWYoQnJvd3Nlci5maXJlZm94KXtpZighYyhuKSl7
bS54Kz1iKG4pO20ueSs9ZyhuKTt9dmFyIHA9bi5wYXJlbnROb2RlO2lmKHAmJmsocCwib3ZlcmZs
b3ciKSE9InZpc2libGUiKXttLngrPWIocCk7bS55Kz1nKHApO319ZWxzZXtpZihuIT10aGlzJiZC
cm93c2VyLnNhZmFyaSl7bS54Kz1iKG4pOworK20ueSs9ZyhuKTt9fW49bi5vZmZzZXRQYXJlbnQ7
fWlmKEJyb3dzZXIuZmlyZWZveCYmIWModGhpcykpe20ueC09Yih0aGlzKTttLnktPWcodGhpcyk7
fXJldHVybiBtO30sZ2V0UG9zaXRpb246ZnVuY3Rpb24ocCl7dmFyIHE9dGhpcy5nZXRPZmZzZXRz
KCksbj10aGlzLmdldFNjcm9sbHMoKTsKKyt2YXIgbT17eDpxLngtbi54LHk6cS55LW4ueX07aWYo
cCYmKHA9ZG9jdW1lbnQuaWQocCkpKXt2YXIgbz1wLmdldFBvc2l0aW9uKCk7cmV0dXJue3g6bS54
LW8ueC1iKHApLHk6bS55LW8ueS1nKHApfTt9cmV0dXJuIG07fSxnZXRDb29yZGluYXRlczpmdW5j
dGlvbihvKXtpZihhKHRoaXMpKXtyZXR1cm4gdGhpcy5nZXRXaW5kb3coKS5nZXRDb29yZGluYXRl
cygpOworK312YXIgbT10aGlzLmdldFBvc2l0aW9uKG8pLG49dGhpcy5nZXRTaXplKCk7dmFyIHA9
e2xlZnQ6bS54LHRvcDptLnksd2lkdGg6bi54LGhlaWdodDpuLnl9O3AucmlnaHQ9cC5sZWZ0K3Au
d2lkdGg7cC5ib3R0b209cC50b3ArcC5oZWlnaHQ7cmV0dXJuIHA7fSxjb21wdXRlUG9zaXRpb246
ZnVuY3Rpb24obSl7cmV0dXJue2xlZnQ6bS54LWoodGhpcywibWFyZ2luLWxlZnQiKSx0b3A6bS55
LWoodGhpcywibWFyZ2luLXRvcCIpfTsKKyt9LHNldFBvc2l0aW9uOmZ1bmN0aW9uKG0pe3JldHVy
biB0aGlzLnNldFN0eWxlcyh0aGlzLmNvbXB1dGVQb3NpdGlvbihtKSk7fX0pO1tEb2N1bWVudCxX
aW5kb3ddLmludm9rZSgiaW1wbGVtZW50Iix7Z2V0U2l6ZTpmdW5jdGlvbigpe3ZhciBtPWYodGhp
cyk7cmV0dXJue3g6bS5jbGllbnRXaWR0aCx5Om0uY2xpZW50SGVpZ2h0fTsKKyt9LGdldFNjcm9s
bDpmdW5jdGlvbigpe3ZhciBuPXRoaXMuZ2V0V2luZG93KCksbT1mKHRoaXMpO3JldHVybnt4Om4u
cGFnZVhPZmZzZXR8fG0uc2Nyb2xsTGVmdCx5Om4ucGFnZVlPZmZzZXR8fG0uc2Nyb2xsVG9wfTt9
LGdldFNjcm9sbFNpemU6ZnVuY3Rpb24oKXt2YXIgbz1mKHRoaXMpLG49dGhpcy5nZXRTaXplKCks
bT10aGlzLmdldERvY3VtZW50KCkuYm9keTsKKytyZXR1cm57eDpNYXRoLm1heChvLnNjcm9sbFdp
ZHRoLG0uc2Nyb2xsV2lkdGgsbi54KSx5Ok1hdGgubWF4KG8uc2Nyb2xsSGVpZ2h0LG0uc2Nyb2xs
SGVpZ2h0LG4ueSl9O30sZ2V0UG9zaXRpb246ZnVuY3Rpb24oKXtyZXR1cm57eDowLHk6MH07fSxn
ZXRDb29yZGluYXRlczpmdW5jdGlvbigpe3ZhciBtPXRoaXMuZ2V0U2l6ZSgpOworK3JldHVybnt0
b3A6MCxsZWZ0OjAsYm90dG9tOm0ueSxyaWdodDptLngsaGVpZ2h0Om0ueSx3aWR0aDptLnh9O319
KTt2YXIgaz1FbGVtZW50LmdldENvbXB1dGVkU3R5bGU7ZnVuY3Rpb24gaihtLG4pe3JldHVybiBr
KG0sbikudG9JbnQoKXx8MDt9ZnVuY3Rpb24gYyhtKXtyZXR1cm4gayhtLCItbW96LWJveC1zaXpp
bmciKT09ImJvcmRlci1ib3giOworK31mdW5jdGlvbiBnKG0pe3JldHVybiBqKG0sImJvcmRlci10
b3Atd2lkdGgiKTt9ZnVuY3Rpb24gYihtKXtyZXR1cm4gaihtLCJib3JkZXItbGVmdC13aWR0aCIp
O31mdW5jdGlvbiBhKG0pe3JldHVybigvXig/OmJvZHl8aHRtbCkkL2kpLnRlc3QobS50YWdOYW1l
KTsKKyt9ZnVuY3Rpb24gZihtKXt2YXIgbj1tLmdldERvY3VtZW50KCk7cmV0dXJuKCFuLmNvbXBh
dE1vZGV8fG4uY29tcGF0TW9kZT09IkNTUzFDb21wYXQiKT9uLmh0bWw6bi5ib2R5O319KSgpO0Vs
ZW1lbnQuYWxpYXMoe3Bvc2l0aW9uOiJzZXRQb3NpdGlvbiJ9KTtbV2luZG93LERvY3VtZW50LEVs
ZW1lbnRdLmludm9rZSgiaW1wbGVtZW50Iix7Z2V0SGVpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIHRo
aXMuZ2V0U2l6ZSgpLnk7CisrfSxnZXRXaWR0aDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFNp
emUoKS54O30sZ2V0U2Nyb2xsVG9wOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0U2Nyb2xsKCku
eTt9LGdldFNjcm9sbExlZnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRTY3JvbGwoKS54Owor
K30sZ2V0U2Nyb2xsSGVpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0U2Nyb2xsU2l6ZSgp
Lnk7fSxnZXRTY3JvbGxXaWR0aDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFNjcm9sbFNpemUo
KS54O30sZ2V0VG9wOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0UG9zaXRpb24oKS55OworK30s
Z2V0TGVmdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFBvc2l0aW9uKCkueDt9fSk7KGZ1bmN0
aW9uKCl7dmFyIGY9dGhpcy5GeD1uZXcgQ2xhc3Moe0ltcGxlbWVudHM6W0NoYWluLEV2ZW50cyxP
cHRpb25zXSxvcHRpb25zOntmcHM6NjAsdW5pdDpmYWxzZSxkdXJhdGlvbjo1MDAsZnJhbWVzOm51
bGwsZnJhbWVTa2lwOnRydWUsbGluazoiaWdub3JlIn0saW5pdGlhbGl6ZTpmdW5jdGlvbihnKXt0
aGlzLnN1YmplY3Q9dGhpcy5zdWJqZWN0fHx0aGlzOworK3RoaXMuc2V0T3B0aW9ucyhnKTt9LGdl
dFRyYW5zaXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oZyl7cmV0dXJuIC0oTWF0aC5j
b3MoTWF0aC5QSSpnKS0xKS8yO307fSxzdGVwOmZ1bmN0aW9uKGcpe2lmKHRoaXMub3B0aW9ucy5m
cmFtZVNraXApe3ZhciBoPSh0aGlzLnRpbWUhPW51bGwpPyhnLXRoaXMudGltZSk6MCxpPWgvdGhp
cy5mcmFtZUludGVydmFsOworK3RoaXMudGltZT1nO3RoaXMuZnJhbWUrPWk7fWVsc2V7dGhpcy5m
cmFtZSsrO31pZih0aGlzLmZyYW1lPHRoaXMuZnJhbWVzKXt2YXIgaj10aGlzLnRyYW5zaXRpb24o
dGhpcy5mcmFtZS90aGlzLmZyYW1lcyk7dGhpcy5zZXQodGhpcy5jb21wdXRlKHRoaXMuZnJvbSx0
aGlzLnRvLGopKTsKKyt9ZWxzZXt0aGlzLmZyYW1lPXRoaXMuZnJhbWVzO3RoaXMuc2V0KHRoaXMu
Y29tcHV0ZSh0aGlzLmZyb20sdGhpcy50bywxKSk7dGhpcy5zdG9wKCk7fX0sc2V0OmZ1bmN0aW9u
KGcpe3JldHVybiBnO30sY29tcHV0ZTpmdW5jdGlvbihpLGgsZyl7cmV0dXJuIGYuY29tcHV0ZShp
LGgsZyk7CisrfSxjaGVjazpmdW5jdGlvbigpe2lmKCF0aGlzLmlzUnVubmluZygpKXtyZXR1cm4g
dHJ1ZTt9c3dpdGNoKHRoaXMub3B0aW9ucy5saW5rKXtjYXNlImNhbmNlbCI6dGhpcy5jYW5jZWwo
KTtyZXR1cm4gdHJ1ZTtjYXNlImNoYWluIjp0aGlzLmNoYWluKHRoaXMuY2FsbGVyLnBhc3MoYXJn
dW1lbnRzLHRoaXMpKTsKKytyZXR1cm4gZmFsc2U7fXJldHVybiBmYWxzZTt9LHN0YXJ0OmZ1bmN0
aW9uKGssail7aWYoIXRoaXMuY2hlY2soayxqKSl7cmV0dXJuIHRoaXM7fXRoaXMuZnJvbT1rO3Ro
aXMudG89ajt0aGlzLmZyYW1lPSh0aGlzLm9wdGlvbnMuZnJhbWVTa2lwKT8wOi0xO3RoaXMudGlt
ZT1udWxsOworK3RoaXMudHJhbnNpdGlvbj10aGlzLmdldFRyYW5zaXRpb24oKTt2YXIgaT10aGlz
Lm9wdGlvbnMuZnJhbWVzLGg9dGhpcy5vcHRpb25zLmZwcyxnPXRoaXMub3B0aW9ucy5kdXJhdGlv
bjt0aGlzLmR1cmF0aW9uPWYuRHVyYXRpb25zW2ddfHxnLnRvSW50KCk7dGhpcy5mcmFtZUludGVy
dmFsPTEwMDAvaDsKKyt0aGlzLmZyYW1lcz1pfHxNYXRoLnJvdW5kKHRoaXMuZHVyYXRpb24vdGhp
cy5mcmFtZUludGVydmFsKTt0aGlzLmZpcmVFdmVudCgic3RhcnQiLHRoaXMuc3ViamVjdCk7Yi5j
YWxsKHRoaXMsaCk7cmV0dXJuIHRoaXM7fSxzdG9wOmZ1bmN0aW9uKCl7aWYodGhpcy5pc1J1bm5p
bmcoKSl7dGhpcy50aW1lPW51bGw7CisrZC5jYWxsKHRoaXMsdGhpcy5vcHRpb25zLmZwcyk7aWYo
dGhpcy5mcmFtZXM9PXRoaXMuZnJhbWUpe3RoaXMuZmlyZUV2ZW50KCJjb21wbGV0ZSIsdGhpcy5z
dWJqZWN0KTtpZighdGhpcy5jYWxsQ2hhaW4oKSl7dGhpcy5maXJlRXZlbnQoImNoYWluQ29tcGxl
dGUiLHRoaXMuc3ViamVjdCk7CisrfX1lbHNle3RoaXMuZmlyZUV2ZW50KCJzdG9wIix0aGlzLnN1
YmplY3QpO319cmV0dXJuIHRoaXM7fSxjYW5jZWw6ZnVuY3Rpb24oKXtpZih0aGlzLmlzUnVubmlu
ZygpKXt0aGlzLnRpbWU9bnVsbDtkLmNhbGwodGhpcyx0aGlzLm9wdGlvbnMuZnBzKTt0aGlzLmZy
YW1lPXRoaXMuZnJhbWVzOworK3RoaXMuZmlyZUV2ZW50KCJjYW5jZWwiLHRoaXMuc3ViamVjdCku
Y2xlYXJDaGFpbigpO31yZXR1cm4gdGhpczt9LHBhdXNlOmZ1bmN0aW9uKCl7aWYodGhpcy5pc1J1
bm5pbmcoKSl7dGhpcy50aW1lPW51bGw7ZC5jYWxsKHRoaXMsdGhpcy5vcHRpb25zLmZwcyk7fXJl
dHVybiB0aGlzOworK30scmVzdW1lOmZ1bmN0aW9uKCl7aWYoKHRoaXMuZnJhbWU8dGhpcy5mcmFt
ZXMpJiYhdGhpcy5pc1J1bm5pbmcoKSl7Yi5jYWxsKHRoaXMsdGhpcy5vcHRpb25zLmZwcyk7fXJl
dHVybiB0aGlzO30saXNSdW5uaW5nOmZ1bmN0aW9uKCl7dmFyIGc9ZVt0aGlzLm9wdGlvbnMuZnBz
XTsKKytyZXR1cm4gZyYmZy5jb250YWlucyh0aGlzKTt9fSk7Zi5jb21wdXRlPWZ1bmN0aW9uKGks
aCxnKXtyZXR1cm4oaC1pKSpnK2k7fTtmLkR1cmF0aW9ucz17InNob3J0IjoyNTAsbm9ybWFsOjUw
MCwibG9uZyI6MTAwMH07dmFyIGU9e30sYz17fTt2YXIgYT1mdW5jdGlvbigpe3ZhciBoPURhdGUu
bm93KCk7CisrZm9yKHZhciBqPXRoaXMubGVuZ3RoO2otLTspe3ZhciBnPXRoaXNbal07aWYoZyl7
Zy5zdGVwKGgpO319fTt2YXIgYj1mdW5jdGlvbihoKXt2YXIgZz1lW2hdfHwoZVtoXT1bXSk7Zy5w
dXNoKHRoaXMpO2lmKCFjW2hdKXtjW2hdPWEucGVyaW9kaWNhbChNYXRoLnJvdW5kKDEwMDAvaCks
Zyk7CisrfX07dmFyIGQ9ZnVuY3Rpb24oaCl7dmFyIGc9ZVtoXTtpZihnKXtnLmVyYXNlKHRoaXMp
O2lmKCFnLmxlbmd0aCYmY1toXSl7ZGVsZXRlIGVbaF07Y1toXT1jbGVhckludGVydmFsKGNbaF0p
O319fTt9KSgpO0Z4LkNTUz1uZXcgQ2xhc3Moe0V4dGVuZHM6RngscHJlcGFyZTpmdW5jdGlvbihj
LGQsYil7Yj1BcnJheS5mcm9tKGIpOworK2lmKGJbMV09PW51bGwpe2JbMV09YlswXTtiWzBdPWMu
Z2V0U3R5bGUoZCk7fXZhciBhPWIubWFwKHRoaXMucGFyc2UpO3JldHVybntmcm9tOmFbMF0sdG86
YVsxXX07fSxwYXJzZTpmdW5jdGlvbihhKXthPUZ1bmN0aW9uLmZyb20oYSkoKTthPSh0eXBlb2Yg
YT09InN0cmluZyIpP2Euc3BsaXQoIiAiKTpBcnJheS5mcm9tKGEpOworK3JldHVybiBhLm1hcChm
dW5jdGlvbihjKXtjPVN0cmluZyhjKTt2YXIgYj1mYWxzZTtPYmplY3QuZWFjaChGeC5DU1MuUGFy
c2VycyxmdW5jdGlvbihmLGUpe2lmKGIpe3JldHVybjt9dmFyIGQ9Zi5wYXJzZShjKTtpZihkfHxk
PT09MCl7Yj17dmFsdWU6ZCxwYXJzZXI6Zn07CisrfX0pO2I9Ynx8e3ZhbHVlOmMscGFyc2VyOkZ4
LkNTUy5QYXJzZXJzLlN0cmluZ307cmV0dXJuIGI7fSk7fSxjb21wdXRlOmZ1bmN0aW9uKGQsYyxi
KXt2YXIgYT1bXTsoTWF0aC5taW4oZC5sZW5ndGgsYy5sZW5ndGgpKS50aW1lcyhmdW5jdGlvbihl
KXthLnB1c2goe3ZhbHVlOmRbZV0ucGFyc2VyLmNvbXB1dGUoZFtlXS52YWx1ZSxjW2VdLnZhbHVl
LGIpLHBhcnNlcjpkW2VdLnBhcnNlcn0pOworK30pO2EuJGZhbWlseT1GdW5jdGlvbi5mcm9tKCJm
eDpjc3M6dmFsdWUiKTtyZXR1cm4gYTt9LHNlcnZlOmZ1bmN0aW9uKGMsYil7aWYodHlwZU9mKGMp
IT0iZng6Y3NzOnZhbHVlIil7Yz10aGlzLnBhcnNlKGMpO312YXIgYT1bXTtjLmVhY2goZnVuY3Rp
b24oZCl7YT1hLmNvbmNhdChkLnBhcnNlci5zZXJ2ZShkLnZhbHVlLGIpKTsKKyt9KTtyZXR1cm4g
YTt9LHJlbmRlcjpmdW5jdGlvbihhLGQsYyxiKXthLnNldFN0eWxlKGQsdGhpcy5zZXJ2ZShjLGIp
KTt9LHNlYXJjaDpmdW5jdGlvbihhKXtpZihGeC5DU1MuQ2FjaGVbYV0pe3JldHVybiBGeC5DU1Mu
Q2FjaGVbYV07fXZhciBjPXt9LGI9bmV3IFJlZ0V4cCgiXiIrYS5lc2NhcGVSZWdFeHAoKSsiJCIp
OworK0FycmF5LmVhY2goZG9jdW1lbnQuc3R5bGVTaGVldHMsZnVuY3Rpb24oZixlKXt2YXIgZD1m
LmhyZWY7aWYoZCYmZC5jb250YWlucygiOi8vIikmJiFkLmNvbnRhaW5zKGRvY3VtZW50LmRvbWFp
bikpe3JldHVybjt9dmFyIGc9Zi5ydWxlc3x8Zi5jc3NSdWxlcztBcnJheS5lYWNoKGcsZnVuY3Rp
b24oayxoKXtpZighay5zdHlsZSl7cmV0dXJuOworK312YXIgaj0oay5zZWxlY3RvclRleHQpP2su
c2VsZWN0b3JUZXh0LnJlcGxhY2UoL15cdysvLGZ1bmN0aW9uKGkpe3JldHVybiBpLnRvTG93ZXJD
YXNlKCk7fSk6bnVsbDtpZighanx8IWIudGVzdChqKSl7cmV0dXJuO31PYmplY3QuZWFjaChFbGVt
ZW50LlN0eWxlcyxmdW5jdGlvbihsLGkpe2lmKCFrLnN0eWxlW2ldfHxFbGVtZW50LlNob3J0U3R5
bGVzW2ldKXtyZXR1cm47CisrfWw9U3RyaW5nKGsuc3R5bGVbaV0pO2NbaV09KCgvXnJnYi8pLnRl
c3QobCkpP2wucmdiVG9IZXgoKTpsO30pO30pO30pO3JldHVybiBGeC5DU1MuQ2FjaGVbYV09Yzt9
fSk7RnguQ1NTLkNhY2hlPXt9O0Z4LkNTUy5QYXJzZXJzPXtDb2xvcjp7cGFyc2U6ZnVuY3Rpb24o
YSl7aWYoYS5tYXRjaCgvXiNbMC05YS1mXXszLDZ9JC9pKSl7cmV0dXJuIGEuaGV4VG9SZ2IodHJ1
ZSk7CisrfXJldHVybigoYT1hLm1hdGNoKC8oXGQrKSxccyooXGQrKSxccyooXGQrKS8pKSk/W2Fb
MV0sYVsyXSxhWzNdXTpmYWxzZTt9LGNvbXB1dGU6ZnVuY3Rpb24oYyxiLGEpe3JldHVybiBjLm1h
cChmdW5jdGlvbihlLGQpe3JldHVybiBNYXRoLnJvdW5kKEZ4LmNvbXB1dGUoY1tkXSxiW2RdLGEp
KTsKKyt9KTt9LHNlcnZlOmZ1bmN0aW9uKGEpe3JldHVybiBhLm1hcChOdW1iZXIpO319LE51bWJl
cjp7cGFyc2U6cGFyc2VGbG9hdCxjb21wdXRlOkZ4LmNvbXB1dGUsc2VydmU6ZnVuY3Rpb24oYixh
KXtyZXR1cm4oYSk/YithOmI7fX0sU3RyaW5nOntwYXJzZTpGdW5jdGlvbi5mcm9tKGZhbHNlKSxj
b21wdXRlOmZ1bmN0aW9uKGIsYSl7cmV0dXJuIGE7CisrfSxzZXJ2ZTpmdW5jdGlvbihhKXtyZXR1
cm4gYTt9fX07RnguQ1NTLlBhcnNlcnM9bmV3IEhhc2goRnguQ1NTLlBhcnNlcnMpO0Z4LlR3ZWVu
PW5ldyBDbGFzcyh7RXh0ZW5kczpGeC5DU1MsaW5pdGlhbGl6ZTpmdW5jdGlvbihiLGEpe3RoaXMu
ZWxlbWVudD10aGlzLnN1YmplY3Q9ZG9jdW1lbnQuaWQoYik7CisrdGhpcy5wYXJlbnQoYSk7fSxz
ZXQ6ZnVuY3Rpb24oYixhKXtpZihhcmd1bWVudHMubGVuZ3RoPT0xKXthPWI7Yj10aGlzLnByb3Bl
cnR5fHx0aGlzLm9wdGlvbnMucHJvcGVydHk7fXRoaXMucmVuZGVyKHRoaXMuZWxlbWVudCxiLGEs
dGhpcy5vcHRpb25zLnVuaXQpOworK3JldHVybiB0aGlzO30sc3RhcnQ6ZnVuY3Rpb24oYyxlLGQp
e2lmKCF0aGlzLmNoZWNrKGMsZSxkKSl7cmV0dXJuIHRoaXM7fXZhciBiPUFycmF5LmZsYXR0ZW4o
YXJndW1lbnRzKTt0aGlzLnByb3BlcnR5PXRoaXMub3B0aW9ucy5wcm9wZXJ0eXx8Yi5zaGlmdCgp
O3ZhciBhPXRoaXMucHJlcGFyZSh0aGlzLmVsZW1lbnQsdGhpcy5wcm9wZXJ0eSxiKTsKKytyZXR1
cm4gdGhpcy5wYXJlbnQoYS5mcm9tLGEudG8pO319KTtFbGVtZW50LlByb3BlcnRpZXMudHdlZW49
e3NldDpmdW5jdGlvbihhKXt0aGlzLmdldCgidHdlZW4iKS5jYW5jZWwoKS5zZXRPcHRpb25zKGEp
O3JldHVybiB0aGlzO30sZ2V0OmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5yZXRyaWV2ZSgidHdlZW4i
KTsKKytpZighYSl7YT1uZXcgRnguVHdlZW4odGhpcyx7bGluazoiY2FuY2VsIn0pO3RoaXMuc3Rv
cmUoInR3ZWVuIixhKTt9cmV0dXJuIGE7fX07RWxlbWVudC5pbXBsZW1lbnQoe3R3ZWVuOmZ1bmN0
aW9uKGEsYyxiKXt0aGlzLmdldCgidHdlZW4iKS5zdGFydChhLGMsYik7CisrcmV0dXJuIHRoaXM7
fSxmYWRlOmZ1bmN0aW9uKGMpe3ZhciBkPXRoaXMuZ2V0KCJ0d2VlbiIpLGYsZSxhO2lmKGM9PW51
bGwpe2M9InRvZ2dsZSI7fXN3aXRjaChjKXtjYXNlImluIjpmPSJzdGFydCI7ZT0xO2JyZWFrO2Nh
c2Uib3V0IjpmPSJzdGFydCI7ZT0wO2JyZWFrOworK2Nhc2Uic2hvdyI6Zj0ic2V0IjtlPTE7YnJl
YWs7Y2FzZSJoaWRlIjpmPSJzZXQiO2U9MDticmVhaztjYXNlInRvZ2dsZSI6dmFyIGI9dGhpcy5y
ZXRyaWV2ZSgiZmFkZTpmbGFnIix0aGlzLmdldFN0eWxlKCJvcGFjaXR5Iik9PTEpO2Y9InN0YXJ0
IjtlPWI/MDoxO3RoaXMuc3RvcmUoImZhZGU6ZmxhZyIsIWIpOworK2E9dHJ1ZTticmVhaztkZWZh
dWx0OmY9InN0YXJ0IjtlPWM7fWlmKCFhKXt0aGlzLmVsaW1pbmF0ZSgiZmFkZTpmbGFnIik7fWRb
Zl0oIm9wYWNpdHkiLGUpO2lmKGY9PSJzZXQifHxlIT0wKXt0aGlzLnNldFN0eWxlKCJ2aXNpYmls
aXR5IixlPT0wPyJoaWRkZW4iOiJ2aXNpYmxlIik7CisrfWVsc2V7ZC5jaGFpbihmdW5jdGlvbigp
e3RoaXMuZWxlbWVudC5zZXRTdHlsZSgidmlzaWJpbGl0eSIsImhpZGRlbiIpO30pO31yZXR1cm4g
dGhpczt9LGhpZ2hsaWdodDpmdW5jdGlvbihjLGEpe2lmKCFhKXthPXRoaXMucmV0cmlldmUoImhp
Z2hsaWdodDpvcmlnaW5hbCIsdGhpcy5nZXRTdHlsZSgiYmFja2dyb3VuZC1jb2xvciIpKTsKKyth
PShhPT0idHJhbnNwYXJlbnQiKT8iI2ZmZiI6YTt9dmFyIGI9dGhpcy5nZXQoInR3ZWVuIik7Yi5z
dGFydCgiYmFja2dyb3VuZC1jb2xvciIsY3x8IiNmZmZmODgiLGEpLmNoYWluKGZ1bmN0aW9uKCl7
dGhpcy5zZXRTdHlsZSgiYmFja2dyb3VuZC1jb2xvciIsdGhpcy5yZXRyaWV2ZSgiaGlnaGxpZ2h0
Om9yaWdpbmFsIikpOworK2IuY2FsbENoYWluKCk7fS5iaW5kKHRoaXMpKTtyZXR1cm4gdGhpczt9
fSk7RnguTW9ycGg9bmV3IENsYXNzKHtFeHRlbmRzOkZ4LkNTUyxpbml0aWFsaXplOmZ1bmN0aW9u
KGIsYSl7dGhpcy5lbGVtZW50PXRoaXMuc3ViamVjdD1kb2N1bWVudC5pZChiKTt0aGlzLnBhcmVu
dChhKTsKKyt9LHNldDpmdW5jdGlvbihhKXtpZih0eXBlb2YgYT09InN0cmluZyIpe2E9dGhpcy5z
ZWFyY2goYSk7fWZvcih2YXIgYiBpbiBhKXt0aGlzLnJlbmRlcih0aGlzLmVsZW1lbnQsYixhW2Jd
LHRoaXMub3B0aW9ucy51bml0KTt9cmV0dXJuIHRoaXM7fSxjb21wdXRlOmZ1bmN0aW9uKGUsZCxj
KXt2YXIgYT17fTsKKytmb3IodmFyIGIgaW4gZSl7YVtiXT10aGlzLnBhcmVudChlW2JdLGRbYl0s
Yyk7fXJldHVybiBhO30sc3RhcnQ6ZnVuY3Rpb24oYil7aWYoIXRoaXMuY2hlY2soYikpe3JldHVy
biB0aGlzO31pZih0eXBlb2YgYj09InN0cmluZyIpe2I9dGhpcy5zZWFyY2goYik7fXZhciBlPXt9
LGQ9e307CisrZm9yKHZhciBjIGluIGIpe3ZhciBhPXRoaXMucHJlcGFyZSh0aGlzLmVsZW1lbnQs
YyxiW2NdKTtlW2NdPWEuZnJvbTtkW2NdPWEudG87fXJldHVybiB0aGlzLnBhcmVudChlLGQpO319
KTtFbGVtZW50LlByb3BlcnRpZXMubW9ycGg9e3NldDpmdW5jdGlvbihhKXt0aGlzLmdldCgibW9y
cGgiKS5jYW5jZWwoKS5zZXRPcHRpb25zKGEpOworK3JldHVybiB0aGlzO30sZ2V0OmZ1bmN0aW9u
KCl7dmFyIGE9dGhpcy5yZXRyaWV2ZSgibW9ycGgiKTtpZighYSl7YT1uZXcgRnguTW9ycGgodGhp
cyx7bGluazoiY2FuY2VsIn0pO3RoaXMuc3RvcmUoIm1vcnBoIixhKTt9cmV0dXJuIGE7fX07RWxl
bWVudC5pbXBsZW1lbnQoe21vcnBoOmZ1bmN0aW9uKGEpe3RoaXMuZ2V0KCJtb3JwaCIpLnN0YXJ0
KGEpOworK3JldHVybiB0aGlzO319KTtGeC5pbXBsZW1lbnQoe2dldFRyYW5zaXRpb246ZnVuY3Rp
b24oKXt2YXIgYT10aGlzLm9wdGlvbnMudHJhbnNpdGlvbnx8RnguVHJhbnNpdGlvbnMuU2luZS5l
YXNlSW5PdXQ7aWYodHlwZW9mIGE9PSJzdHJpbmciKXt2YXIgYj1hLnNwbGl0KCI6Iik7CisrYT1G
eC5UcmFuc2l0aW9uczthPWFbYlswXV18fGFbYlswXS5jYXBpdGFsaXplKCldO2lmKGJbMV0pe2E9
YVsiZWFzZSIrYlsxXS5jYXBpdGFsaXplKCkrKGJbMl0/YlsyXS5jYXBpdGFsaXplKCk6IiIpXTt9
fXJldHVybiBhO319KTtGeC5UcmFuc2l0aW9uPWZ1bmN0aW9uKGMsYil7Yj1BcnJheS5mcm9tKGIp
OworK3ZhciBhPWZ1bmN0aW9uKGQpe3JldHVybiBjKGQsYik7fTtyZXR1cm4gT2JqZWN0LmFwcGVu
ZChhLHtlYXNlSW46YSxlYXNlT3V0OmZ1bmN0aW9uKGQpe3JldHVybiAxLWMoMS1kLGIpO30sZWFz
ZUluT3V0OmZ1bmN0aW9uKGQpe3JldHVybihkPD0wLjU/YygyKmQsYik6KDItYygyKigxLWQpLGIp
KSkvMjsKKyt9fSk7fTtGeC5UcmFuc2l0aW9ucz17bGluZWFyOmZ1bmN0aW9uKGEpe3JldHVybiBh
O319O0Z4LlRyYW5zaXRpb25zPW5ldyBIYXNoKEZ4LlRyYW5zaXRpb25zKTtGeC5UcmFuc2l0aW9u
cy5leHRlbmQ9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiIGluIGEpe0Z4LlRyYW5zaXRpb25zW2JdPW5l
dyBGeC5UcmFuc2l0aW9uKGFbYl0pOworK319O0Z4LlRyYW5zaXRpb25zLmV4dGVuZCh7UG93OmZ1
bmN0aW9uKGIsYSl7cmV0dXJuIE1hdGgucG93KGIsYSYmYVswXXx8Nik7fSxFeHBvOmZ1bmN0aW9u
KGEpe3JldHVybiBNYXRoLnBvdygyLDgqKGEtMSkpO30sQ2lyYzpmdW5jdGlvbihhKXtyZXR1cm4g
MS1NYXRoLnNpbihNYXRoLmFjb3MoYSkpOworK30sU2luZTpmdW5jdGlvbihhKXtyZXR1cm4gMS1N
YXRoLmNvcyhhKk1hdGguUEkvMik7fSxCYWNrOmZ1bmN0aW9uKGIsYSl7YT1hJiZhWzBdfHwxLjYx
ODtyZXR1cm4gTWF0aC5wb3coYiwyKSooKGErMSkqYi1hKTt9LEJvdW5jZTpmdW5jdGlvbihmKXt2
YXIgZTtmb3IodmFyIGQ9MCxjPTE7CisrMTtkKz1jLGMvPTIpe2lmKGY+PSg3LTQqZCkvMTEpe2U9
YypjLU1hdGgucG93KCgxMS02KmQtMTEqZikvNCwyKTticmVhazt9fXJldHVybiBlO30sRWxhc3Rp
YzpmdW5jdGlvbihiLGEpe3JldHVybiBNYXRoLnBvdygyLDEwKi0tYikqTWF0aC5jb3MoMjAqYipN
YXRoLlBJKihhJiZhWzBdfHwxKS8zKTsKKyt9fSk7WyJRdWFkIiwiQ3ViaWMiLCJRdWFydCIsIlF1
aW50Il0uZWFjaChmdW5jdGlvbihiLGEpe0Z4LlRyYW5zaXRpb25zW2JdPW5ldyBGeC5UcmFuc2l0
aW9uKGZ1bmN0aW9uKGMpe3JldHVybiBNYXRoLnBvdyhjLGErMik7fSk7fSk7KGZ1bmN0aW9uKCl7
dmFyIGQ9ZnVuY3Rpb24oKXt9LGE9KCJvbnByb2dyZXNzIiBpbiBuZXcgQnJvd3Nlci5SZXF1ZXN0
KTsKKyt2YXIgYz10aGlzLlJlcXVlc3Q9bmV3IENsYXNzKHtJbXBsZW1lbnRzOltDaGFpbixFdmVu
dHMsT3B0aW9uc10sb3B0aW9uczp7dXJsOiIiLGRhdGE6IiIsaGVhZGVyczp7IlgtUmVxdWVzdGVk
LVdpdGgiOiJYTUxIdHRwUmVxdWVzdCIsQWNjZXB0OiJ0ZXh0L2phdmFzY3JpcHQsIHRleHQvaHRt
bCwgYXBwbGljYXRpb24veG1sLCB0ZXh0L3htbCwgKi8qIn0sYXN5bmM6dHJ1ZSxmb3JtYXQ6ZmFs
c2UsbWV0aG9kOiJwb3N0IixsaW5rOiJpZ25vcmUiLGlzU3VjY2VzczpudWxsLGVtdWxhdGlvbjp0
cnVlLHVybEVuY29kZWQ6dHJ1ZSxlbmNvZGluZzoidXRmLTgiLGV2YWxTY3JpcHRzOmZhbHNlLGV2
YWxSZXNwb25zZTpmYWxzZSx0aW1lb3V0OjAsbm9DYWNoZTpmYWxzZX0saW5pdGlhbGl6ZTpmdW5j
dGlvbihlKXt0aGlzLnhocj1uZXcgQnJvd3Nlci5SZXF1ZXN0KCk7CisrdGhpcy5zZXRPcHRpb25z
KGUpO3RoaXMuaGVhZGVycz10aGlzLm9wdGlvbnMuaGVhZGVyczt9LG9uU3RhdGVDaGFuZ2U6ZnVu
Y3Rpb24oKXt2YXIgZT10aGlzLnhocjtpZihlLnJlYWR5U3RhdGUhPTR8fCF0aGlzLnJ1bm5pbmcp
e3JldHVybjt9dGhpcy5ydW5uaW5nPWZhbHNlOworK3RoaXMuc3RhdHVzPTA7RnVuY3Rpb24uYXR0
ZW1wdChmdW5jdGlvbigpe3ZhciBmPWUuc3RhdHVzO3RoaXMuc3RhdHVzPShmPT0xMjIzKT8yMDQ6
Zjt9LmJpbmQodGhpcykpO2Uub25yZWFkeXN0YXRlY2hhbmdlPWQ7aWYoYSl7ZS5vbnByb2dyZXNz
PWUub25sb2Fkc3RhcnQ9ZDsKKyt9Y2xlYXJUaW1lb3V0KHRoaXMudGltZXIpO3RoaXMucmVzcG9u
c2U9e3RleHQ6dGhpcy54aHIucmVzcG9uc2VUZXh0fHwiIix4bWw6dGhpcy54aHIucmVzcG9uc2VY
TUx9O2lmKHRoaXMub3B0aW9ucy5pc1N1Y2Nlc3MuY2FsbCh0aGlzLHRoaXMuc3RhdHVzKSl7dGhp
cy5zdWNjZXNzKHRoaXMucmVzcG9uc2UudGV4dCx0aGlzLnJlc3BvbnNlLnhtbCk7CisrfWVsc2V7
dGhpcy5mYWlsdXJlKCk7fX0saXNTdWNjZXNzOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zdGF0dXM7
cmV0dXJuKGU+PTIwMCYmZTwzMDApO30saXNSdW5uaW5nOmZ1bmN0aW9uKCl7cmV0dXJuICEhdGhp
cy5ydW5uaW5nO30scHJvY2Vzc1NjcmlwdHM6ZnVuY3Rpb24oZSl7aWYodGhpcy5vcHRpb25zLmV2
YWxSZXNwb25zZXx8KC8oZWNtYXxqYXZhKXNjcmlwdC8pLnRlc3QodGhpcy5nZXRIZWFkZXIoIkNv
bnRlbnQtdHlwZSIpKSl7cmV0dXJuIEJyb3dzZXIuZXhlYyhlKTsKKyt9cmV0dXJuIGUuc3RyaXBT
Y3JpcHRzKHRoaXMub3B0aW9ucy5ldmFsU2NyaXB0cyk7fSxzdWNjZXNzOmZ1bmN0aW9uKGYsZSl7
dGhpcy5vblN1Y2Nlc3ModGhpcy5wcm9jZXNzU2NyaXB0cyhmKSxlKTt9LG9uU3VjY2VzczpmdW5j
dGlvbigpe3RoaXMuZmlyZUV2ZW50KCJjb21wbGV0ZSIsYXJndW1lbnRzKS5maXJlRXZlbnQoInN1
Y2Nlc3MiLGFyZ3VtZW50cykuY2FsbENoYWluKCk7CisrfSxmYWlsdXJlOmZ1bmN0aW9uKCl7dGhp
cy5vbkZhaWx1cmUoKTt9LG9uRmFpbHVyZTpmdW5jdGlvbigpe3RoaXMuZmlyZUV2ZW50KCJjb21w
bGV0ZSIpLmZpcmVFdmVudCgiZmFpbHVyZSIsdGhpcy54aHIpO30sbG9hZHN0YXJ0OmZ1bmN0aW9u
KGUpe3RoaXMuZmlyZUV2ZW50KCJsb2Fkc3RhcnQiLFtlLHRoaXMueGhyXSk7CisrfSxwcm9ncmVz
czpmdW5jdGlvbihlKXt0aGlzLmZpcmVFdmVudCgicHJvZ3Jlc3MiLFtlLHRoaXMueGhyXSk7fSx0
aW1lb3V0OmZ1bmN0aW9uKCl7dGhpcy5maXJlRXZlbnQoInRpbWVvdXQiLHRoaXMueGhyKTt9LHNl
dEhlYWRlcjpmdW5jdGlvbihlLGYpe3RoaXMuaGVhZGVyc1tlXT1mOworK3JldHVybiB0aGlzO30s
Z2V0SGVhZGVyOmZ1bmN0aW9uKGUpe3JldHVybiBGdW5jdGlvbi5hdHRlbXB0KGZ1bmN0aW9uKCl7
cmV0dXJuIHRoaXMueGhyLmdldFJlc3BvbnNlSGVhZGVyKGUpO30uYmluZCh0aGlzKSk7fSxjaGVj
azpmdW5jdGlvbigpe2lmKCF0aGlzLnJ1bm5pbmcpe3JldHVybiB0cnVlOworK31zd2l0Y2godGhp
cy5vcHRpb25zLmxpbmspe2Nhc2UiY2FuY2VsIjp0aGlzLmNhbmNlbCgpO3JldHVybiB0cnVlO2Nh
c2UiY2hhaW4iOnRoaXMuY2hhaW4odGhpcy5jYWxsZXIucGFzcyhhcmd1bWVudHMsdGhpcykpO3Jl
dHVybiBmYWxzZTt9cmV0dXJuIGZhbHNlO30sc2VuZDpmdW5jdGlvbihvKXtpZighdGhpcy5jaGVj
ayhvKSl7cmV0dXJuIHRoaXM7CisrfXRoaXMub3B0aW9ucy5pc1N1Y2Nlc3M9dGhpcy5vcHRpb25z
LmlzU3VjY2Vzc3x8dGhpcy5pc1N1Y2Nlc3M7dGhpcy5ydW5uaW5nPXRydWU7dmFyIGw9dHlwZU9m
KG8pO2lmKGw9PSJzdHJpbmcifHxsPT0iZWxlbWVudCIpe289e2RhdGE6b307fXZhciBoPXRoaXMu
b3B0aW9uczsKKytvPU9iamVjdC5hcHBlbmQoe2RhdGE6aC5kYXRhLHVybDpoLnVybCxtZXRob2Q6
aC5tZXRob2R9LG8pO3ZhciBqPW8uZGF0YSxmPVN0cmluZyhvLnVybCksZT1vLm1ldGhvZC50b0xv
d2VyQ2FzZSgpO3N3aXRjaCh0eXBlT2Yoaikpe2Nhc2UiZWxlbWVudCI6aj1kb2N1bWVudC5pZChq
KS50b1F1ZXJ5U3RyaW5nKCk7CisrYnJlYWs7Y2FzZSJvYmplY3QiOmNhc2UiaGFzaCI6aj1PYmpl
Y3QudG9RdWVyeVN0cmluZyhqKTt9aWYodGhpcy5vcHRpb25zLmZvcm1hdCl7dmFyIG09ImZvcm1h
dD0iK3RoaXMub3B0aW9ucy5mb3JtYXQ7aj0oaik/bSsiJiIrajptO31pZih0aGlzLm9wdGlvbnMu
ZW11bGF0aW9uJiYhWyJnZXQiLCJwb3N0Il0uY29udGFpbnMoZSkpe3ZhciBrPSJfbWV0aG9kPSIr
ZTsKKytqPShqKT9rKyImIitqOms7ZT0icG9zdCI7fWlmKHRoaXMub3B0aW9ucy51cmxFbmNvZGVk
JiZbInBvc3QiLCJwdXQiXS5jb250YWlucyhlKSl7dmFyIGc9KHRoaXMub3B0aW9ucy5lbmNvZGlu
Zyk/IjsgY2hhcnNldD0iK3RoaXMub3B0aW9ucy5lbmNvZGluZzoiIjt0aGlzLmhlYWRlcnNbIkNv
bnRlbnQtdHlwZSJdPSJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiK2c7CisrfWlm
KCFmKXtmPWRvY3VtZW50LmxvY2F0aW9uLnBhdGhuYW1lO312YXIgaT1mLmxhc3RJbmRleE9mKCIv
Iik7aWYoaT4tMSYmKGk9Zi5pbmRleE9mKCIjIikpPi0xKXtmPWYuc3Vic3RyKDAsaSk7fWlmKHRo
aXMub3B0aW9ucy5ub0NhY2hlKXtmKz0oZi5jb250YWlucygiPyIpPyImIjoiPyIpK1N0cmluZy51
bmlxdWVJRCgpOworK31pZihqJiZlPT0iZ2V0Iil7Zis9KGYuY29udGFpbnMoIj8iKT8iJiI6Ij8i
KStqO2o9bnVsbDt9dmFyIG49dGhpcy54aHI7aWYoYSl7bi5vbmxvYWRzdGFydD10aGlzLmxvYWRz
dGFydC5iaW5kKHRoaXMpO24ub25wcm9ncmVzcz10aGlzLnByb2dyZXNzLmJpbmQodGhpcyk7Cisr
fW4ub3BlbihlLnRvVXBwZXJDYXNlKCksZix0aGlzLm9wdGlvbnMuYXN5bmMsdGhpcy5vcHRpb25z
LnVzZXIsdGhpcy5vcHRpb25zLnBhc3N3b3JkKTtpZih0aGlzLm9wdGlvbnMudXNlciYmIndpdGhD
cmVkZW50aWFscyIgaW4gbil7bi53aXRoQ3JlZGVudGlhbHM9dHJ1ZTsKKyt9bi5vbnJlYWR5c3Rh
dGVjaGFuZ2U9dGhpcy5vblN0YXRlQ2hhbmdlLmJpbmQodGhpcyk7T2JqZWN0LmVhY2godGhpcy5o
ZWFkZXJzLGZ1bmN0aW9uKHEscCl7dHJ5e24uc2V0UmVxdWVzdEhlYWRlcihwLHEpO31jYXRjaChy
KXt0aGlzLmZpcmVFdmVudCgiZXhjZXB0aW9uIixbcCxxXSk7CisrfX0sdGhpcyk7dGhpcy5maXJl
RXZlbnQoInJlcXVlc3QiKTtuLnNlbmQoaik7aWYoIXRoaXMub3B0aW9ucy5hc3luYyl7dGhpcy5v
blN0YXRlQ2hhbmdlKCk7fWlmKHRoaXMub3B0aW9ucy50aW1lb3V0KXt0aGlzLnRpbWVyPXRoaXMu
dGltZW91dC5kZWxheSh0aGlzLm9wdGlvbnMudGltZW91dCx0aGlzKTsKKyt9cmV0dXJuIHRoaXM7
fSxjYW5jZWw6ZnVuY3Rpb24oKXtpZighdGhpcy5ydW5uaW5nKXtyZXR1cm4gdGhpczt9dGhpcy5y
dW5uaW5nPWZhbHNlO3ZhciBlPXRoaXMueGhyO2UuYWJvcnQoKTtjbGVhclRpbWVvdXQodGhpcy50
aW1lcik7ZS5vbnJlYWR5c3RhdGVjaGFuZ2U9ZDsKKytpZihhKXtlLm9ucHJvZ3Jlc3M9ZS5vbmxv
YWRzdGFydD1kO310aGlzLnhocj1uZXcgQnJvd3Nlci5SZXF1ZXN0KCk7dGhpcy5maXJlRXZlbnQo
ImNhbmNlbCIpO3JldHVybiB0aGlzO319KTt2YXIgYj17fTtbImdldCIsInBvc3QiLCJwdXQiLCJk
ZWxldGUiLCJHRVQiLCJQT1NUIiwiUFVUIiwiREVMRVRFIl0uZWFjaChmdW5jdGlvbihlKXtiW2Vd
PWZ1bmN0aW9uKGcpe3ZhciBmPXttZXRob2Q6ZX07CisraWYoZyE9bnVsbCl7Zi5kYXRhPWc7fXJl
dHVybiB0aGlzLnNlbmQoZik7fTt9KTtjLmltcGxlbWVudChiKTtFbGVtZW50LlByb3BlcnRpZXMu
c2VuZD17c2V0OmZ1bmN0aW9uKGUpe3ZhciBmPXRoaXMuZ2V0KCJzZW5kIikuY2FuY2VsKCk7Zi5z
ZXRPcHRpb25zKGUpOworK3JldHVybiB0aGlzO30sZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5y
ZXRyaWV2ZSgic2VuZCIpO2lmKCFlKXtlPW5ldyBjKHtkYXRhOnRoaXMsbGluazoiY2FuY2VsIixt
ZXRob2Q6dGhpcy5nZXQoIm1ldGhvZCIpfHwicG9zdCIsdXJsOnRoaXMuZ2V0KCJhY3Rpb24iKX0p
OworK3RoaXMuc3RvcmUoInNlbmQiLGUpO31yZXR1cm4gZTt9fTtFbGVtZW50LmltcGxlbWVudCh7
c2VuZDpmdW5jdGlvbihlKXt2YXIgZj10aGlzLmdldCgic2VuZCIpO2Yuc2VuZCh7ZGF0YTp0aGlz
LHVybDplfHxmLm9wdGlvbnMudXJsfSk7cmV0dXJuIHRoaXM7fX0pO30pKCk7CisrUmVxdWVzdC5I
VE1MPW5ldyBDbGFzcyh7RXh0ZW5kczpSZXF1ZXN0LG9wdGlvbnM6e3VwZGF0ZTpmYWxzZSxhcHBl
bmQ6ZmFsc2UsZXZhbFNjcmlwdHM6dHJ1ZSxmaWx0ZXI6ZmFsc2UsaGVhZGVyczp7QWNjZXB0OiJ0
ZXh0L2h0bWwsIGFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWwsICovKiJ9fSxzdWNjZXNzOmZ1bmN0
aW9uKGYpe3ZhciBlPXRoaXMub3B0aW9ucyxjPXRoaXMucmVzcG9uc2U7CisrYy5odG1sPWYuc3Ry
aXBTY3JpcHRzKGZ1bmN0aW9uKGgpe2MuamF2YXNjcmlwdD1oO30pO3ZhciBkPWMuaHRtbC5tYXRj
aCgvPGJvZHlbXj5dKj4oW1xzXFNdKj8pPFwvYm9keT4vaSk7aWYoZCl7Yy5odG1sPWRbMV07fXZh
ciBiPW5ldyBFbGVtZW50KCJkaXYiKS5zZXQoImh0bWwiLGMuaHRtbCk7CisrYy50cmVlPWIuY2hp
bGROb2RlcztjLmVsZW1lbnRzPWIuZ2V0RWxlbWVudHMoZS5maWx0ZXJ8fCIqIik7aWYoZS5maWx0
ZXIpe2MudHJlZT1jLmVsZW1lbnRzO31pZihlLnVwZGF0ZSl7dmFyIGc9ZG9jdW1lbnQuaWQoZS51
cGRhdGUpLmVtcHR5KCk7aWYoZS5maWx0ZXIpe2cuYWRvcHQoYy5lbGVtZW50cyk7CisrfWVsc2V7
Zy5zZXQoImh0bWwiLGMuaHRtbCk7fX1lbHNle2lmKGUuYXBwZW5kKXt2YXIgYT1kb2N1bWVudC5p
ZChlLmFwcGVuZCk7aWYoZS5maWx0ZXIpe2MuZWxlbWVudHMucmV2ZXJzZSgpLmluamVjdChhKTt9
ZWxzZXthLmFkb3B0KGIuZ2V0Q2hpbGRyZW4oKSk7fX19aWYoZS5ldmFsU2NyaXB0cyl7QnJvd3Nl
ci5leGVjKGMuamF2YXNjcmlwdCk7CisrfXRoaXMub25TdWNjZXNzKGMudHJlZSxjLmVsZW1lbnRz
LGMuaHRtbCxjLmphdmFzY3JpcHQpO319KTtFbGVtZW50LlByb3BlcnRpZXMubG9hZD17c2V0OmZ1
bmN0aW9uKGEpe3ZhciBiPXRoaXMuZ2V0KCJsb2FkIikuY2FuY2VsKCk7Yi5zZXRPcHRpb25zKGEp
O3JldHVybiB0aGlzOworK30sZ2V0OmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5yZXRyaWV2ZSgibG9h
ZCIpO2lmKCFhKXthPW5ldyBSZXF1ZXN0LkhUTUwoe2RhdGE6dGhpcyxsaW5rOiJjYW5jZWwiLHVw
ZGF0ZTp0aGlzLG1ldGhvZDoiZ2V0In0pO3RoaXMuc3RvcmUoImxvYWQiLGEpO31yZXR1cm4gYTsK
Kyt9fTtFbGVtZW50LmltcGxlbWVudCh7bG9hZDpmdW5jdGlvbigpe3RoaXMuZ2V0KCJsb2FkIiku
c2VuZChBcnJheS5saW5rKGFyZ3VtZW50cyx7ZGF0YTpUeXBlLmlzT2JqZWN0LHVybDpUeXBlLmlz
U3RyaW5nfSkpO3JldHVybiB0aGlzO319KTtpZih0eXBlb2YgSlNPTj09InVuZGVmaW5lZCIpe3Ro
aXMuSlNPTj17fTsKKyt9SlNPTj1uZXcgSGFzaCh7c3RyaW5naWZ5OkpTT04uc3RyaW5naWZ5LHBh
cnNlOkpTT04ucGFyc2V9KTsoZnVuY3Rpb24oKXt2YXIgc3BlY2lhbD17IlxiIjoiXFxiIiwiXHQi
OiJcXHQiLCJcbiI6IlxcbiIsIlxmIjoiXFxmIiwiXHIiOiJcXHIiLCciJzonXFwiJywiXFwiOiJc
XFxcIn07CisrdmFyIGVzY2FwZT1mdW5jdGlvbihjaHIpe3JldHVybiBzcGVjaWFsW2Nocl18fCJc
XHUiKygiMDAwMCIrY2hyLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpKS5zbGljZSgtNCk7fTtK
U09OLnZhbGlkYXRlPWZ1bmN0aW9uKHN0cmluZyl7c3RyaW5nPXN0cmluZy5yZXBsYWNlKC9cXCg/
OlsiXFxcL2JmbnJ0XXx1WzAtOWEtZkEtRl17NH0pL2csIkAiKS5yZXBsYWNlKC8iW14iXFxcblxy
XSoifHRydWV8ZmFsc2V8bnVsbHwtP1xkKyg/OlwuXGQqKT8oPzpbZUVdWytcLV0/XGQrKT8vZywi
XSIpLnJlcGxhY2UoLyg/Ol58OnwsKSg/OlxzKlxbKSsvZywiIik7CisrcmV0dXJuKC9eW1xdLDp7
fVxzXSokLykudGVzdChzdHJpbmcpO307SlNPTi5lbmNvZGU9SlNPTi5zdHJpbmdpZnk/ZnVuY3Rp
b24ob2JqKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkob2JqKTt9OmZ1bmN0aW9uKG9iail7aWYob2Jq
JiZvYmoudG9KU09OKXtvYmo9b2JqLnRvSlNPTigpOworK31zd2l0Y2godHlwZU9mKG9iaikpe2Nh
c2Uic3RyaW5nIjpyZXR1cm4nIicrb2JqLnJlcGxhY2UoL1tceDAwLVx4MWZcXCJdL2csZXNjYXBl
KSsnIic7Y2FzZSJhcnJheSI6cmV0dXJuIlsiK29iai5tYXAoSlNPTi5lbmNvZGUpLmNsZWFuKCkr
Il0iO2Nhc2Uib2JqZWN0IjpjYXNlImhhc2giOnZhciBzdHJpbmc9W107CisrT2JqZWN0LmVhY2go
b2JqLGZ1bmN0aW9uKHZhbHVlLGtleSl7dmFyIGpzb249SlNPTi5lbmNvZGUodmFsdWUpO2lmKGpz
b24pe3N0cmluZy5wdXNoKEpTT04uZW5jb2RlKGtleSkrIjoiK2pzb24pO319KTtyZXR1cm4ieyIr
c3RyaW5nKyJ9IjtjYXNlIm51bWJlciI6Y2FzZSJib29sZWFuIjpyZXR1cm4iIitvYmo7CisrY2Fz
ZSJudWxsIjpyZXR1cm4ibnVsbCI7fXJldHVybiBudWxsO307SlNPTi5kZWNvZGU9ZnVuY3Rpb24o
c3RyaW5nLHNlY3VyZSl7aWYoIXN0cmluZ3x8dHlwZU9mKHN0cmluZykhPSJzdHJpbmciKXtyZXR1
cm4gbnVsbDt9aWYoc2VjdXJlfHxKU09OLnNlY3VyZSl7aWYoSlNPTi5wYXJzZSl7cmV0dXJuIEpT
T04ucGFyc2Uoc3RyaW5nKTsKKyt9aWYoIUpTT04udmFsaWRhdGUoc3RyaW5nKSl7dGhyb3cgbmV3
IEVycm9yKCJKU09OIGNvdWxkIG5vdCBkZWNvZGUgdGhlIGlucHV0OyBzZWN1cml0eSBpcyBlbmFi
bGVkIGFuZCB0aGUgdmFsdWUgaXMgbm90IHNlY3VyZS4iKTt9fXJldHVybiBldmFsKCIoIitzdHJp
bmcrIikiKTsKKyt9O30pKCk7UmVxdWVzdC5KU09OPW5ldyBDbGFzcyh7RXh0ZW5kczpSZXF1ZXN0
LG9wdGlvbnM6e3NlY3VyZTp0cnVlfSxpbml0aWFsaXplOmZ1bmN0aW9uKGEpe3RoaXMucGFyZW50
KGEpO09iamVjdC5hcHBlbmQodGhpcy5oZWFkZXJzLHtBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24i
LCJYLVJlcXVlc3QiOiJKU09OIn0pOworK30sc3VjY2VzczpmdW5jdGlvbihjKXt2YXIgYjt0cnl7
Yj10aGlzLnJlc3BvbnNlLmpzb249SlNPTi5kZWNvZGUoYyx0aGlzLm9wdGlvbnMuc2VjdXJlKTt9
Y2F0Y2goYSl7dGhpcy5maXJlRXZlbnQoImVycm9yIixbYyxhXSk7cmV0dXJuO31pZihiPT1udWxs
KXt0aGlzLm9uRmFpbHVyZSgpOworK31lbHNle3RoaXMub25TdWNjZXNzKGIsYyk7fX19KTt2YXIg
Q29va2llPW5ldyBDbGFzcyh7SW1wbGVtZW50czpPcHRpb25zLG9wdGlvbnM6e3BhdGg6Ii8iLGRv
bWFpbjpmYWxzZSxkdXJhdGlvbjpmYWxzZSxzZWN1cmU6ZmFsc2UsZG9jdW1lbnQ6ZG9jdW1lbnQs
ZW5jb2RlOnRydWV9LGluaXRpYWxpemU6ZnVuY3Rpb24oYixhKXt0aGlzLmtleT1iOworK3RoaXMu
c2V0T3B0aW9ucyhhKTt9LHdyaXRlOmZ1bmN0aW9uKGIpe2lmKHRoaXMub3B0aW9ucy5lbmNvZGUp
e2I9ZW5jb2RlVVJJQ29tcG9uZW50KGIpO31pZih0aGlzLm9wdGlvbnMuZG9tYWluKXtiKz0iOyBk
b21haW49Iit0aGlzLm9wdGlvbnMuZG9tYWluO31pZih0aGlzLm9wdGlvbnMucGF0aCl7Yis9Ijsg
cGF0aD0iK3RoaXMub3B0aW9ucy5wYXRoOworK31pZih0aGlzLm9wdGlvbnMuZHVyYXRpb24pe3Zh
ciBhPW5ldyBEYXRlKCk7YS5zZXRUaW1lKGEuZ2V0VGltZSgpK3RoaXMub3B0aW9ucy5kdXJhdGlv
bioyNCo2MCo2MCoxMDAwKTtiKz0iOyBleHBpcmVzPSIrYS50b0dNVFN0cmluZygpO31pZih0aGlz
Lm9wdGlvbnMuc2VjdXJlKXtiKz0iOyBzZWN1cmUiOworK310aGlzLm9wdGlvbnMuZG9jdW1lbnQu
Y29va2llPXRoaXMua2V5KyI9IitiO3JldHVybiB0aGlzO30scmVhZDpmdW5jdGlvbigpe3ZhciBh
PXRoaXMub3B0aW9ucy5kb2N1bWVudC5jb29raWUubWF0Y2goIig/Ol58OylcXHMqIit0aGlzLmtl
eS5lc2NhcGVSZWdFeHAoKSsiPShbXjtdKikiKTsKKytyZXR1cm4oYSk/ZGVjb2RlVVJJQ29tcG9u
ZW50KGFbMV0pOm51bGw7fSxkaXNwb3NlOmZ1bmN0aW9uKCl7bmV3IENvb2tpZSh0aGlzLmtleSxP
YmplY3QubWVyZ2Uoe30sdGhpcy5vcHRpb25zLHtkdXJhdGlvbjotMX0pKS53cml0ZSgiIik7cmV0
dXJuIHRoaXM7fX0pOworK0Nvb2tpZS53cml0ZT1mdW5jdGlvbihiLGMsYSl7cmV0dXJuIG5ldyBD
b29raWUoYixhKS53cml0ZShjKTt9O0Nvb2tpZS5yZWFkPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcg
Q29va2llKGEpLnJlYWQoKTt9O0Nvb2tpZS5kaXNwb3NlPWZ1bmN0aW9uKGIsYSl7cmV0dXJuIG5l
dyBDb29raWUoYixhKS5kaXNwb3NlKCk7CisrfTsoZnVuY3Rpb24oaSxrKXt2YXIgbCxmLGU9W10s
YyxiLGQ9ay5jcmVhdGVFbGVtZW50KCJkaXYiKTt2YXIgZz1mdW5jdGlvbigpe2NsZWFyVGltZW91
dChiKTtpZihsKXtyZXR1cm47fUJyb3dzZXIubG9hZGVkPWw9dHJ1ZTtrLnJlbW92ZUxpc3RlbmVy
KCJET01Db250ZW50TG9hZGVkIixnKS5yZW1vdmVMaXN0ZW5lcigicmVhZHlzdGF0ZWNoYW5nZSIs
YSk7Cisray5maXJlRXZlbnQoImRvbXJlYWR5Iik7aS5maXJlRXZlbnQoImRvbXJlYWR5Iik7fTt2
YXIgYT1mdW5jdGlvbigpe2Zvcih2YXIgbT1lLmxlbmd0aDttLS07KXtpZihlW21dKCkpe2coKTty
ZXR1cm4gdHJ1ZTt9fXJldHVybiBmYWxzZTt9O3ZhciBqPWZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0
KGIpOworK2lmKCFhKCkpe2I9c2V0VGltZW91dChqLDEwKTt9fTtrLmFkZExpc3RlbmVyKCJET01D
b250ZW50TG9hZGVkIixnKTt2YXIgaD1mdW5jdGlvbigpe3RyeXtkLmRvU2Nyb2xsKCk7cmV0dXJu
IHRydWU7fWNhdGNoKG0pe31yZXR1cm4gZmFsc2U7fTtpZihkLmRvU2Nyb2xsJiYhaCgpKXtlLnB1
c2goaCk7CisrYz10cnVlO31pZihrLnJlYWR5U3RhdGUpe2UucHVzaChmdW5jdGlvbigpe3ZhciBt
PWsucmVhZHlTdGF0ZTtyZXR1cm4obT09ImxvYWRlZCJ8fG09PSJjb21wbGV0ZSIpO30pO31pZigi
b25yZWFkeXN0YXRlY2hhbmdlIiBpbiBrKXtrLmFkZExpc3RlbmVyKCJyZWFkeXN0YXRlY2hhbmdl
IixhKTsKKyt9ZWxzZXtjPXRydWU7fWlmKGMpe2ooKTt9RWxlbWVudC5FdmVudHMuZG9tcmVhZHk9
e29uQWRkOmZ1bmN0aW9uKG0pe2lmKGwpe20uY2FsbCh0aGlzKTt9fX07RWxlbWVudC5FdmVudHMu
bG9hZD17YmFzZToibG9hZCIsb25BZGQ6ZnVuY3Rpb24obSl7aWYoZiYmdGhpcz09aSl7bS5jYWxs
KHRoaXMpOworK319LGNvbmRpdGlvbjpmdW5jdGlvbigpe2lmKHRoaXM9PWkpe2coKTtkZWxldGUg
RWxlbWVudC5FdmVudHMubG9hZDt9cmV0dXJuIHRydWU7fX07aS5hZGRFdmVudCgibG9hZCIsZnVu
Y3Rpb24oKXtmPXRydWU7fSk7fSkod2luZG93LGRvY3VtZW50KTsoZnVuY3Rpb24oKXt2YXIgU3dp
ZmY9dGhpcy5Td2lmZj1uZXcgQ2xhc3Moe0ltcGxlbWVudHM6T3B0aW9ucyxvcHRpb25zOntpZDpu
dWxsLGhlaWdodDoxLHdpZHRoOjEsY29udGFpbmVyOm51bGwscHJvcGVydGllczp7fSxwYXJhbXM6
e3F1YWxpdHk6ImhpZ2giLGFsbG93U2NyaXB0QWNjZXNzOiJhbHdheXMiLHdNb2RlOiJ3aW5kb3ci
LHN3TGl2ZUNvbm5lY3Q6dHJ1ZX0sY2FsbEJhY2tzOnt9LHZhcnM6e319LHRvRWxlbWVudDpmdW5j
dGlvbigpe3JldHVybiB0aGlzLm9iamVjdDsKKyt9LGluaXRpYWxpemU6ZnVuY3Rpb24ocGF0aCxv
cHRpb25zKXt0aGlzLmluc3RhbmNlPSJTd2lmZl8iK1N0cmluZy51bmlxdWVJRCgpO3RoaXMuc2V0
T3B0aW9ucyhvcHRpb25zKTtvcHRpb25zPXRoaXMub3B0aW9uczt2YXIgaWQ9dGhpcy5pZD1vcHRp
b25zLmlkfHx0aGlzLmluc3RhbmNlOworK3ZhciBjb250YWluZXI9ZG9jdW1lbnQuaWQob3B0aW9u
cy5jb250YWluZXIpO1N3aWZmLkNhbGxCYWNrc1t0aGlzLmluc3RhbmNlXT17fTt2YXIgcGFyYW1z
PW9wdGlvbnMucGFyYW1zLHZhcnM9b3B0aW9ucy52YXJzLGNhbGxCYWNrcz1vcHRpb25zLmNhbGxC
YWNrczsKKyt2YXIgcHJvcGVydGllcz1PYmplY3QuYXBwZW5kKHtoZWlnaHQ6b3B0aW9ucy5oZWln
aHQsd2lkdGg6b3B0aW9ucy53aWR0aH0sb3B0aW9ucy5wcm9wZXJ0aWVzKTt2YXIgc2VsZj10aGlz
O2Zvcih2YXIgY2FsbEJhY2sgaW4gY2FsbEJhY2tzKXtTd2lmZi5DYWxsQmFja3NbdGhpcy5pbnN0
YW5jZV1bY2FsbEJhY2tdPShmdW5jdGlvbihvcHRpb24pe3JldHVybiBmdW5jdGlvbigpe3JldHVy
biBvcHRpb24uYXBwbHkoc2VsZi5vYmplY3QsYXJndW1lbnRzKTsKKyt9O30pKGNhbGxCYWNrc1tj
YWxsQmFja10pO3ZhcnNbY2FsbEJhY2tdPSJTd2lmZi5DYWxsQmFja3MuIit0aGlzLmluc3RhbmNl
KyIuIitjYWxsQmFjazt9cGFyYW1zLmZsYXNoVmFycz1PYmplY3QudG9RdWVyeVN0cmluZyh2YXJz
KTtpZihCcm93c2VyLmllKXtwcm9wZXJ0aWVzLmNsYXNzaWQ9ImNsc2lkOkQyN0NEQjZFLUFFNkQt
MTFjZi05NkI4LTQ0NDU1MzU0MDAwMCI7CisrcGFyYW1zLm1vdmllPXBhdGg7fWVsc2V7cHJvcGVy
dGllcy50eXBlPSJhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCI7fXByb3BlcnRpZXMuZGF0
YT1wYXRoO3ZhciBidWlsZD0nPG9iamVjdCBpZD0iJytpZCsnIic7Zm9yKHZhciBwcm9wZXJ0eSBp
biBwcm9wZXJ0aWVzKXtidWlsZCs9IiAiK3Byb3BlcnR5Kyc9IicrcHJvcGVydGllc1twcm9wZXJ0
eV0rJyInOworK31idWlsZCs9Ij4iO2Zvcih2YXIgcGFyYW0gaW4gcGFyYW1zKXtpZihwYXJhbXNb
cGFyYW1dKXtidWlsZCs9JzxwYXJhbSBuYW1lPSInK3BhcmFtKyciIHZhbHVlPSInK3BhcmFtc1tw
YXJhbV0rJyIgLz4nO319YnVpbGQrPSI8L29iamVjdD4iO3RoaXMub2JqZWN0PSgoY29udGFpbmVy
KT9jb250YWluZXIuZW1wdHkoKTpuZXcgRWxlbWVudCgiZGl2IikpLnNldCgiaHRtbCIsYnVpbGQp
LmZpcnN0Q2hpbGQ7CisrfSxyZXBsYWNlczpmdW5jdGlvbihlbGVtZW50KXtlbGVtZW50PWRvY3Vt
ZW50LmlkKGVsZW1lbnQsdHJ1ZSk7ZWxlbWVudC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZCh0aGlz
LnRvRWxlbWVudCgpLGVsZW1lbnQpO3JldHVybiB0aGlzO30saW5qZWN0OmZ1bmN0aW9uKGVsZW1l
bnQpe2RvY3VtZW50LmlkKGVsZW1lbnQsdHJ1ZSkuYXBwZW5kQ2hpbGQodGhpcy50b0VsZW1lbnQo
KSk7CisrcmV0dXJuIHRoaXM7fSxyZW1vdGU6ZnVuY3Rpb24oKXtyZXR1cm4gU3dpZmYucmVtb3Rl
LmFwcGx5KFN3aWZmLFt0aGlzLnRvRWxlbWVudCgpXS5hcHBlbmQoYXJndW1lbnRzKSk7fX0pO1N3
aWZmLkNhbGxCYWNrcz17fTtTd2lmZi5yZW1vdGU9ZnVuY3Rpb24ob2JqLGZuKXt2YXIgcnM9b2Jq
LkNhbGxGdW5jdGlvbignPGludm9rZSBuYW1lPSInK2ZuKyciIHJldHVybnR5cGU9ImphdmFzY3Jp
cHQiPicrX19mbGFzaF9fYXJndW1lbnRzVG9YTUwoYXJndW1lbnRzLDIpKyI8L2ludm9rZT4iKTsK
KytyZXR1cm4gZXZhbChycyk7fTt9KSgpOworXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitk
aWZmIC0tZ2l0IGEvd2ViL2FqYXgvbGlicy9wcm90b3R5cGUvMS43LjAuMC9wcm90b3R5cGUuanMg
Yi93ZWIvYWpheC9saWJzL3Byb3RvdHlwZS8xLjcuMC4wL3Byb3RvdHlwZS5qcworbmV3IGZpbGUg
bW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjQ3NGIyMjMKKy0tLSAvZGV2L251bGwKKysrKyBi
L3dlYi9hamF4L2xpYnMvcHJvdG90eXBlLzEuNy4wLjAvcHJvdG90eXBlLmpzCitAQCAtMCwwICsx
LDYwODIgQEAKKysvKiAgUHJvdG90eXBlIEphdmFTY3JpcHQgZnJhbWV3b3JrLCB2ZXJzaW9uIDEu
NworKyAqICAoYykgMjAwNS0yMDEwIFNhbSBTdGVwaGVuc29uCisrICoKKysgKiAgUHJvdG90eXBl
IGlzIGZyZWVseSBkaXN0cmlidXRhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiBhbiBNSVQtc3R5bGUg
bGljZW5zZS4KKysgKiAgRm9yIGRldGFpbHMsIHNlZSB0aGUgUHJvdG90eXBlIHdlYiBzaXRlOiBo
dHRwOi8vd3d3LnByb3RvdHlwZWpzLm9yZy8KKysgKgorKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwor
KworK3ZhciBQcm90b3R5cGUgPSB7CisrCisrICBWZXJzaW9uOiAnMS43JywKKysKKysgIEJyb3dz
ZXI6IChmdW5jdGlvbigpeworKyAgICB2YXIgdWEgPSBuYXZpZ2F0b3IudXNlckFnZW50OworKyAg
ICB2YXIgaXNPcGVyYSA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh3aW5kb3cub3Bl
cmEpID09ICdbb2JqZWN0IE9wZXJhXSc7CisrICAgIHJldHVybiB7CisrICAgICAgSUU6ICAgICAg
ICAgICAgICEhd2luZG93LmF0dGFjaEV2ZW50ICYmICFpc09wZXJhLAorKyAgICAgIE9wZXJhOiAg
ICAgICAgICBpc09wZXJhLAorKyAgICAgIFdlYktpdDogICAgICAgICB1YS5pbmRleE9mKCdBcHBs
ZVdlYktpdC8nKSA+IC0xLAorKyAgICAgIEdlY2tvOiAgICAgICAgICB1YS5pbmRleE9mKCdHZWNr
bycpID4gLTEgJiYgdWEuaW5kZXhPZignS0hUTUwnKSA9PT0gLTEsCisrICAgICAgTW9iaWxlU2Fm
YXJpOiAgIC9BcHBsZS4qTW9iaWxlLy50ZXN0KHVhKQorKyAgICB9CisrICB9KSgpLAorKworKyAg
QnJvd3NlckZlYXR1cmVzOiB7CisrICAgIFhQYXRoOiAhIWRvY3VtZW50LmV2YWx1YXRlLAorKwor
KyAgICBTZWxlY3RvcnNBUEk6ICEhZG9jdW1lbnQucXVlcnlTZWxlY3RvciwKKysKKysgICAgRWxl
bWVudEV4dGVuc2lvbnM6IChmdW5jdGlvbigpIHsKKysgICAgICB2YXIgY29uc3RydWN0b3IgPSB3
aW5kb3cuRWxlbWVudCB8fCB3aW5kb3cuSFRNTEVsZW1lbnQ7CisrICAgICAgcmV0dXJuICEhKGNv
bnN0cnVjdG9yICYmIGNvbnN0cnVjdG9yLnByb3RvdHlwZSk7CisrICAgIH0pKCksCisrICAgIFNw
ZWNpZmljRWxlbWVudEV4dGVuc2lvbnM6IChmdW5jdGlvbigpIHsKKysgICAgICBpZiAodHlwZW9m
IHdpbmRvdy5IVE1MRGl2RWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcpCisrICAgICAgICByZXR1cm4g
dHJ1ZTsKKysKKysgICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyks
CisrICAgICAgICAgIGZvcm0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdmb3JtJyksCisrICAg
ICAgICAgIGlzU3VwcG9ydGVkID0gZmFsc2U7CisrCisrICAgICAgaWYgKGRpdlsnX19wcm90b19f
J10gJiYgKGRpdlsnX19wcm90b19fJ10gIT09IGZvcm1bJ19fcHJvdG9fXyddKSkgeworKyAgICAg
ICAgaXNTdXBwb3J0ZWQgPSB0cnVlOworKyAgICAgIH0KKysKKysgICAgICBkaXYgPSBmb3JtID0g
bnVsbDsKKysKKysgICAgICByZXR1cm4gaXNTdXBwb3J0ZWQ7CisrICAgIH0pKCkKKysgIH0sCisr
CisrICBTY3JpcHRGcmFnbWVudDogJzxzY3JpcHRbXj5dKj4oW1xcU1xcc10qPyk8XC9zY3JpcHQ+
JywKKysgIEpTT05GaWx0ZXI6IC9eXC9cKi1zZWN1cmUtKFtcc1xTXSopXCpcL1xzKiQvLAorKwor
KyAgZW1wdHlGdW5jdGlvbjogZnVuY3Rpb24oKSB7IH0sCisrCisrICBLOiBmdW5jdGlvbih4KSB7
IHJldHVybiB4IH0KKyt9OworKworK2lmIChQcm90b3R5cGUuQnJvd3Nlci5Nb2JpbGVTYWZhcmkp
CisrICBQcm90b3R5cGUuQnJvd3NlckZlYXR1cmVzLlNwZWNpZmljRWxlbWVudEV4dGVuc2lvbnMg
PSBmYWxzZTsKKysKKysKKyt2YXIgQWJzdHJhY3QgPSB7IH07CisrCisrCisrdmFyIFRyeSA9IHsK
KysgIHRoZXNlOiBmdW5jdGlvbigpIHsKKysgICAgdmFyIHJldHVyblZhbHVlOworKworKyAgICBm
b3IgKHZhciBpID0gMCwgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsr
KSB7CisrICAgICAgdmFyIGxhbWJkYSA9IGFyZ3VtZW50c1tpXTsKKysgICAgICB0cnkgeworKyAg
ICAgICAgcmV0dXJuVmFsdWUgPSBsYW1iZGEoKTsKKysgICAgICAgIGJyZWFrOworKyAgICAgIH0g
Y2F0Y2ggKGUpIHsgfQorKyAgICB9CisrCisrICAgIHJldHVybiByZXR1cm5WYWx1ZTsKKysgIH0K
Kyt9OworKworKy8qIEJhc2VkIG9uIEFsZXggQXJuZWxsJ3MgaW5oZXJpdGFuY2UgaW1wbGVtZW50
YXRpb24uICovCisrCisrdmFyIENsYXNzID0gKGZ1bmN0aW9uKCkgeworKworKyAgdmFyIElTX0RP
TlRFTlVNX0JVR0dZID0gKGZ1bmN0aW9uKCl7CisrICAgIGZvciAodmFyIHAgaW4geyB0b1N0cmlu
ZzogMSB9KSB7CisrICAgICAgaWYgKHAgPT09ICd0b1N0cmluZycpIHJldHVybiBmYWxzZTsKKysg
ICAgfQorKyAgICByZXR1cm4gdHJ1ZTsKKysgIH0pKCk7CisrCisrICBmdW5jdGlvbiBzdWJjbGFz
cygpIHt9OworKyAgZnVuY3Rpb24gY3JlYXRlKCkgeworKyAgICB2YXIgcGFyZW50ID0gbnVsbCwg
cHJvcGVydGllcyA9ICRBKGFyZ3VtZW50cyk7CisrICAgIGlmIChPYmplY3QuaXNGdW5jdGlvbihw
cm9wZXJ0aWVzWzBdKSkKKysgICAgICBwYXJlbnQgPSBwcm9wZXJ0aWVzLnNoaWZ0KCk7CisrCisr
ICAgIGZ1bmN0aW9uIGtsYXNzKCkgeworKyAgICAgIHRoaXMuaW5pdGlhbGl6ZS5hcHBseSh0aGlz
LCBhcmd1bWVudHMpOworKyAgICB9CisrCisrICAgIE9iamVjdC5leHRlbmQoa2xhc3MsIENsYXNz
Lk1ldGhvZHMpOworKyAgICBrbGFzcy5zdXBlcmNsYXNzID0gcGFyZW50OworKyAgICBrbGFzcy5z
dWJjbGFzc2VzID0gW107CisrCisrICAgIGlmIChwYXJlbnQpIHsKKysgICAgICBzdWJjbGFzcy5w
cm90b3R5cGUgPSBwYXJlbnQucHJvdG90eXBlOworKyAgICAgIGtsYXNzLnByb3RvdHlwZSA9IG5l
dyBzdWJjbGFzczsKKysgICAgICBwYXJlbnQuc3ViY2xhc3Nlcy5wdXNoKGtsYXNzKTsKKysgICAg
fQorKworKyAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gcHJvcGVydGllcy5sZW5ndGg7IGkg
PCBsZW5ndGg7IGkrKykKKysgICAgICBrbGFzcy5hZGRNZXRob2RzKHByb3BlcnRpZXNbaV0pOwor
KworKyAgICBpZiAoIWtsYXNzLnByb3RvdHlwZS5pbml0aWFsaXplKQorKyAgICAgIGtsYXNzLnBy
b3RvdHlwZS5pbml0aWFsaXplID0gUHJvdG90eXBlLmVtcHR5RnVuY3Rpb247CisrCisrICAgIGts
YXNzLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGtsYXNzOworKyAgICByZXR1cm4ga2xhc3M7Cisr
ICB9CisrCisrICBmdW5jdGlvbiBhZGRNZXRob2RzKHNvdXJjZSkgeworKyAgICB2YXIgYW5jZXN0
b3IgICA9IHRoaXMuc3VwZXJjbGFzcyAmJiB0aGlzLnN1cGVyY2xhc3MucHJvdG90eXBlLAorKyAg
ICAgICAgcHJvcGVydGllcyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7CisrCisrICAgIGlmIChJU19E
T05URU5VTV9CVUdHWSkgeworKyAgICAgIGlmIChzb3VyY2UudG9TdHJpbmcgIT0gT2JqZWN0LnBy
b3RvdHlwZS50b1N0cmluZykKKysgICAgICAgIHByb3BlcnRpZXMucHVzaCgidG9TdHJpbmciKTsK
KysgICAgICBpZiAoc291cmNlLnZhbHVlT2YgIT0gT2JqZWN0LnByb3RvdHlwZS52YWx1ZU9mKQor
KyAgICAgICAgcHJvcGVydGllcy5wdXNoKCJ2YWx1ZU9mIik7CisrICAgIH0KKysKKysgICAgZm9y
ICh2YXIgaSA9IDAsIGxlbmd0aCA9IHByb3BlcnRpZXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKysp
IHsKKysgICAgICB2YXIgcHJvcGVydHkgPSBwcm9wZXJ0aWVzW2ldLCB2YWx1ZSA9IHNvdXJjZVtw
cm9wZXJ0eV07CisrICAgICAgaWYgKGFuY2VzdG9yICYmIE9iamVjdC5pc0Z1bmN0aW9uKHZhbHVl
KSAmJgorKyAgICAgICAgICB2YWx1ZS5hcmd1bWVudE5hbWVzKClbMF0gPT0gIiRzdXBlciIpIHsK
KysgICAgICAgIHZhciBtZXRob2QgPSB2YWx1ZTsKKysgICAgICAgIHZhbHVlID0gKGZ1bmN0aW9u
KG0pIHsKKysgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeyByZXR1cm4gYW5jZXN0b3JbbV0u
YXBwbHkodGhpcywgYXJndW1lbnRzKTsgfTsKKysgICAgICAgIH0pKHByb3BlcnR5KS53cmFwKG1l
dGhvZCk7CisrCisrICAgICAgICB2YWx1ZS52YWx1ZU9mID0gbWV0aG9kLnZhbHVlT2YuYmluZCht
ZXRob2QpOworKyAgICAgICAgdmFsdWUudG9TdHJpbmcgPSBtZXRob2QudG9TdHJpbmcuYmluZCht
ZXRob2QpOworKyAgICAgIH0KKysgICAgICB0aGlzLnByb3RvdHlwZVtwcm9wZXJ0eV0gPSB2YWx1
ZTsKKysgICAgfQorKworKyAgICByZXR1cm4gdGhpczsKKysgIH0KKysKKysgIHJldHVybiB7Cisr
ICAgIGNyZWF0ZTogY3JlYXRlLAorKyAgICBNZXRob2RzOiB7CisrICAgICAgYWRkTWV0aG9kczog
YWRkTWV0aG9kcworKyAgICB9CisrICB9OworK30pKCk7CisrKGZ1bmN0aW9uKCkgeworKworKyAg
dmFyIF90b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsCisrICAgICAgTlVMTF9U
WVBFID0gJ051bGwnLAorKyAgICAgIFVOREVGSU5FRF9UWVBFID0gJ1VuZGVmaW5lZCcsCisrICAg
ICAgQk9PTEVBTl9UWVBFID0gJ0Jvb2xlYW4nLAorKyAgICAgIE5VTUJFUl9UWVBFID0gJ051bWJl
cicsCisrICAgICAgU1RSSU5HX1RZUEUgPSAnU3RyaW5nJywKKysgICAgICBPQkpFQ1RfVFlQRSA9
ICdPYmplY3QnLAorKyAgICAgIEZVTkNUSU9OX0NMQVNTID0gJ1tvYmplY3QgRnVuY3Rpb25dJywK
KysgICAgICBCT09MRUFOX0NMQVNTID0gJ1tvYmplY3QgQm9vbGVhbl0nLAorKyAgICAgIE5VTUJF
Ul9DTEFTUyA9ICdbb2JqZWN0IE51bWJlcl0nLAorKyAgICAgIFNUUklOR19DTEFTUyA9ICdbb2Jq
ZWN0IFN0cmluZ10nLAorKyAgICAgIEFSUkFZX0NMQVNTID0gJ1tvYmplY3QgQXJyYXldJywKKysg
ICAgICBEQVRFX0NMQVNTID0gJ1tvYmplY3QgRGF0ZV0nLAorKyAgICAgIE5BVElWRV9KU09OX1NU
UklOR0lGWV9TVVBQT1JUID0gd2luZG93LkpTT04gJiYKKysgICAgICAgIHR5cGVvZiBKU09OLnN0
cmluZ2lmeSA9PT0gJ2Z1bmN0aW9uJyAmJgorKyAgICAgICAgSlNPTi5zdHJpbmdpZnkoMCkgPT09
ICcwJyAmJgorKyAgICAgICAgdHlwZW9mIEpTT04uc3RyaW5naWZ5KFByb3RvdHlwZS5LKSA9PT0g
J3VuZGVmaW5lZCc7CisrCisrICBmdW5jdGlvbiBUeXBlKG8pIHsKKysgICAgc3dpdGNoKG8pIHsK
KysgICAgICBjYXNlIG51bGw6IHJldHVybiBOVUxMX1RZUEU7CisrICAgICAgY2FzZSAodm9pZCAw
KTogcmV0dXJuIFVOREVGSU5FRF9UWVBFOworKyAgICB9CisrICAgIHZhciB0eXBlID0gdHlwZW9m
IG87CisrICAgIHN3aXRjaCh0eXBlKSB7CisrICAgICAgY2FzZSAnYm9vbGVhbic6IHJldHVybiBC
T09MRUFOX1RZUEU7CisrICAgICAgY2FzZSAnbnVtYmVyJzogIHJldHVybiBOVU1CRVJfVFlQRTsK
KysgICAgICBjYXNlICdzdHJpbmcnOiAgcmV0dXJuIFNUUklOR19UWVBFOworKyAgICB9CisrICAg
IHJldHVybiBPQkpFQ1RfVFlQRTsKKysgIH0KKysKKysgIGZ1bmN0aW9uIGV4dGVuZChkZXN0aW5h
dGlvbiwgc291cmNlKSB7CisrICAgIGZvciAodmFyIHByb3BlcnR5IGluIHNvdXJjZSkKKysgICAg
ICBkZXN0aW5hdGlvbltwcm9wZXJ0eV0gPSBzb3VyY2VbcHJvcGVydHldOworKyAgICByZXR1cm4g
ZGVzdGluYXRpb247CisrICB9CisrCisrICBmdW5jdGlvbiBpbnNwZWN0KG9iamVjdCkgeworKyAg
ICB0cnkgeworKyAgICAgIGlmIChpc1VuZGVmaW5lZChvYmplY3QpKSByZXR1cm4gJ3VuZGVmaW5l
ZCc7CisrICAgICAgaWYgKG9iamVjdCA9PT0gbnVsbCkgcmV0dXJuICdudWxsJzsKKysgICAgICBy
ZXR1cm4gb2JqZWN0Lmluc3BlY3QgPyBvYmplY3QuaW5zcGVjdCgpIDogU3RyaW5nKG9iamVjdCk7
CisrICAgIH0gY2F0Y2ggKGUpIHsKKysgICAgICBpZiAoZSBpbnN0YW5jZW9mIFJhbmdlRXJyb3Ip
IHJldHVybiAnLi4uJzsKKysgICAgICB0aHJvdyBlOworKyAgICB9CisrICB9CisrCisrICBmdW5j
dGlvbiB0b0pTT04odmFsdWUpIHsKKysgICAgcmV0dXJuIFN0cignJywgeyAnJzogdmFsdWUgfSwg
W10pOworKyAgfQorKworKyAgZnVuY3Rpb24gU3RyKGtleSwgaG9sZGVyLCBzdGFjaykgeworKyAg
ICB2YXIgdmFsdWUgPSBob2xkZXJba2V5XSwKKysgICAgICAgIHR5cGUgPSB0eXBlb2YgdmFsdWU7
CisrCisrICAgIGlmIChUeXBlKHZhbHVlKSA9PT0gT0JKRUNUX1RZUEUgJiYgdHlwZW9mIHZhbHVl
LnRvSlNPTiA9PT0gJ2Z1bmN0aW9uJykgeworKyAgICAgIHZhbHVlID0gdmFsdWUudG9KU09OKGtl
eSk7CisrICAgIH0KKysKKysgICAgdmFyIF9jbGFzcyA9IF90b1N0cmluZy5jYWxsKHZhbHVlKTsK
KysKKysgICAgc3dpdGNoIChfY2xhc3MpIHsKKysgICAgICBjYXNlIE5VTUJFUl9DTEFTUzoKKysg
ICAgICBjYXNlIEJPT0xFQU5fQ0xBU1M6CisrICAgICAgY2FzZSBTVFJJTkdfQ0xBU1M6CisrICAg
ICAgICB2YWx1ZSA9IHZhbHVlLnZhbHVlT2YoKTsKKysgICAgfQorKworKyAgICBzd2l0Y2ggKHZh
bHVlKSB7CisrICAgICAgY2FzZSBudWxsOiByZXR1cm4gJ251bGwnOworKyAgICAgIGNhc2UgdHJ1
ZTogcmV0dXJuICd0cnVlJzsKKysgICAgICBjYXNlIGZhbHNlOiByZXR1cm4gJ2ZhbHNlJzsKKysg
ICAgfQorKworKyAgICB0eXBlID0gdHlwZW9mIHZhbHVlOworKyAgICBzd2l0Y2ggKHR5cGUpIHsK
KysgICAgICBjYXNlICdzdHJpbmcnOgorKyAgICAgICAgcmV0dXJuIHZhbHVlLmluc3BlY3QodHJ1
ZSk7CisrICAgICAgY2FzZSAnbnVtYmVyJzoKKysgICAgICAgIHJldHVybiBpc0Zpbml0ZSh2YWx1
ZSkgPyBTdHJpbmcodmFsdWUpIDogJ251bGwnOworKyAgICAgIGNhc2UgJ29iamVjdCc6CisrCisr
ICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gc3RhY2subGVuZ3RoOyBpIDwgbGVuZ3Ro
OyBpKyspIHsKKysgICAgICAgICAgaWYgKHN0YWNrW2ldID09PSB2YWx1ZSkgeyB0aHJvdyBuZXcg
VHlwZUVycm9yKCk7IH0KKysgICAgICAgIH0KKysgICAgICAgIHN0YWNrLnB1c2godmFsdWUpOwor
KworKyAgICAgICAgdmFyIHBhcnRpYWwgPSBbXTsKKysgICAgICAgIGlmIChfY2xhc3MgPT09IEFS
UkFZX0NMQVNTKSB7CisrICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSB2YWx1ZS5s
ZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykgeworKyAgICAgICAgICAgIHZhciBzdHIgPSBTdHIoaSwg
dmFsdWUsIHN0YWNrKTsKKysgICAgICAgICAgICBwYXJ0aWFsLnB1c2godHlwZW9mIHN0ciA9PT0g
J3VuZGVmaW5lZCcgPyAnbnVsbCcgOiBzdHIpOworKyAgICAgICAgICB9CisrICAgICAgICAgIHBh
cnRpYWwgPSAnWycgKyBwYXJ0aWFsLmpvaW4oJywnKSArICddJzsKKysgICAgICAgIH0gZWxzZSB7
CisrICAgICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXModmFsdWUpOworKyAgICAgICAgICBm
b3IgKHZhciBpID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykgewor
KyAgICAgICAgICAgIHZhciBrZXkgPSBrZXlzW2ldLCBzdHIgPSBTdHIoa2V5LCB2YWx1ZSwgc3Rh
Y2spOworKyAgICAgICAgICAgIGlmICh0eXBlb2Ygc3RyICE9PSAidW5kZWZpbmVkIikgeworKyAg
ICAgICAgICAgICAgIHBhcnRpYWwucHVzaChrZXkuaW5zcGVjdCh0cnVlKSsgJzonICsgc3RyKTsK
KysgICAgICAgICAgICAgfQorKyAgICAgICAgICB9CisrICAgICAgICAgIHBhcnRpYWwgPSAneycg
KyBwYXJ0aWFsLmpvaW4oJywnKSArICd9JzsKKysgICAgICAgIH0KKysgICAgICAgIHN0YWNrLnBv
cCgpOworKyAgICAgICAgcmV0dXJuIHBhcnRpYWw7CisrICAgIH0KKysgIH0KKysKKysgIGZ1bmN0
aW9uIHN0cmluZ2lmeShvYmplY3QpIHsKKysgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG9iamVj
dCk7CisrICB9CisrCisrICBmdW5jdGlvbiB0b1F1ZXJ5U3RyaW5nKG9iamVjdCkgeworKyAgICBy
ZXR1cm4gJEgob2JqZWN0KS50b1F1ZXJ5U3RyaW5nKCk7CisrICB9CisrCisrICBmdW5jdGlvbiB0
b0hUTUwob2JqZWN0KSB7CisrICAgIHJldHVybiBvYmplY3QgJiYgb2JqZWN0LnRvSFRNTCA/IG9i
amVjdC50b0hUTUwoKSA6IFN0cmluZy5pbnRlcnByZXQob2JqZWN0KTsKKysgIH0KKysKKysgIGZ1
bmN0aW9uIGtleXMob2JqZWN0KSB7CisrICAgIGlmIChUeXBlKG9iamVjdCkgIT09IE9CSkVDVF9U
WVBFKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoKTsgfQorKyAgICB2YXIgcmVzdWx0cyA9IFtdOwor
KyAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBvYmplY3QpIHsKKysgICAgICBpZiAob2JqZWN0Lmhh
c093blByb3BlcnR5KHByb3BlcnR5KSkgeworKyAgICAgICAgcmVzdWx0cy5wdXNoKHByb3BlcnR5
KTsKKysgICAgICB9CisrICAgIH0KKysgICAgcmV0dXJuIHJlc3VsdHM7CisrICB9CisrCisrICBm
dW5jdGlvbiB2YWx1ZXMob2JqZWN0KSB7CisrICAgIHZhciByZXN1bHRzID0gW107CisrICAgIGZv
ciAodmFyIHByb3BlcnR5IGluIG9iamVjdCkKKysgICAgICByZXN1bHRzLnB1c2gob2JqZWN0W3By
b3BlcnR5XSk7CisrICAgIHJldHVybiByZXN1bHRzOworKyAgfQorKworKyAgZnVuY3Rpb24gY2xv
bmUob2JqZWN0KSB7CisrICAgIHJldHVybiBleHRlbmQoeyB9LCBvYmplY3QpOworKyAgfQorKwor
KyAgZnVuY3Rpb24gaXNFbGVtZW50KG9iamVjdCkgeworKyAgICByZXR1cm4gISEob2JqZWN0ICYm
IG9iamVjdC5ub2RlVHlwZSA9PSAxKTsKKysgIH0KKysKKysgIGZ1bmN0aW9uIGlzQXJyYXkob2Jq
ZWN0KSB7CisrICAgIHJldHVybiBfdG9TdHJpbmcuY2FsbChvYmplY3QpID09PSBBUlJBWV9DTEFT
UzsKKysgIH0KKysKKysgIHZhciBoYXNOYXRpdmVJc0FycmF5ID0gKHR5cGVvZiBBcnJheS5pc0Fy
cmF5ID09ICdmdW5jdGlvbicpCisrICAgICYmIEFycmF5LmlzQXJyYXkoW10pICYmICFBcnJheS5p
c0FycmF5KHt9KTsKKysKKysgIGlmIChoYXNOYXRpdmVJc0FycmF5KSB7CisrICAgIGlzQXJyYXkg
PSBBcnJheS5pc0FycmF5OworKyAgfQorKworKyAgZnVuY3Rpb24gaXNIYXNoKG9iamVjdCkgewor
KyAgICByZXR1cm4gb2JqZWN0IGluc3RhbmNlb2YgSGFzaDsKKysgIH0KKysKKysgIGZ1bmN0aW9u
IGlzRnVuY3Rpb24ob2JqZWN0KSB7CisrICAgIHJldHVybiBfdG9TdHJpbmcuY2FsbChvYmplY3Qp
ID09PSBGVU5DVElPTl9DTEFTUzsKKysgIH0KKysKKysgIGZ1bmN0aW9uIGlzU3RyaW5nKG9iamVj
dCkgeworKyAgICByZXR1cm4gX3RvU3RyaW5nLmNhbGwob2JqZWN0KSA9PT0gU1RSSU5HX0NMQVNT
OworKyAgfQorKworKyAgZnVuY3Rpb24gaXNOdW1iZXIob2JqZWN0KSB7CisrICAgIHJldHVybiBf
dG9TdHJpbmcuY2FsbChvYmplY3QpID09PSBOVU1CRVJfQ0xBU1M7CisrICB9CisrCisrICBmdW5j
dGlvbiBpc0RhdGUob2JqZWN0KSB7CisrICAgIHJldHVybiBfdG9TdHJpbmcuY2FsbChvYmplY3Qp
ID09PSBEQVRFX0NMQVNTOworKyAgfQorKworKyAgZnVuY3Rpb24gaXNVbmRlZmluZWQob2JqZWN0
KSB7CisrICAgIHJldHVybiB0eXBlb2Ygb2JqZWN0ID09PSAidW5kZWZpbmVkIjsKKysgIH0KKysK
KysgIGV4dGVuZChPYmplY3QsIHsKKysgICAgZXh0ZW5kOiAgICAgICAgZXh0ZW5kLAorKyAgICBp
bnNwZWN0OiAgICAgICBpbnNwZWN0LAorKyAgICB0b0pTT046ICAgICAgICBOQVRJVkVfSlNPTl9T
VFJJTkdJRllfU1VQUE9SVCA/IHN0cmluZ2lmeSA6IHRvSlNPTiwKKysgICAgdG9RdWVyeVN0cmlu
ZzogdG9RdWVyeVN0cmluZywKKysgICAgdG9IVE1MOiAgICAgICAgdG9IVE1MLAorKyAgICBrZXlz
OiAgICAgICAgICBPYmplY3Qua2V5cyB8fCBrZXlzLAorKyAgICB2YWx1ZXM6ICAgICAgICB2YWx1
ZXMsCisrICAgIGNsb25lOiAgICAgICAgIGNsb25lLAorKyAgICBpc0VsZW1lbnQ6ICAgICBpc0Vs
ZW1lbnQsCisrICAgIGlzQXJyYXk6ICAgICAgIGlzQXJyYXksCisrICAgIGlzSGFzaDogICAgICAg
IGlzSGFzaCwKKysgICAgaXNGdW5jdGlvbjogICAgaXNGdW5jdGlvbiwKKysgICAgaXNTdHJpbmc6
ICAgICAgaXNTdHJpbmcsCisrICAgIGlzTnVtYmVyOiAgICAgIGlzTnVtYmVyLAorKyAgICBpc0Rh
dGU6ICAgICAgICBpc0RhdGUsCisrICAgIGlzVW5kZWZpbmVkOiAgIGlzVW5kZWZpbmVkCisrICB9
KTsKKyt9KSgpOworK09iamVjdC5leHRlbmQoRnVuY3Rpb24ucHJvdG90eXBlLCAoZnVuY3Rpb24o
KSB7CisrICB2YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7CisrCisrICBmdW5jdGlv
biB1cGRhdGUoYXJyYXksIGFyZ3MpIHsKKysgICAgdmFyIGFycmF5TGVuZ3RoID0gYXJyYXkubGVu
Z3RoLCBsZW5ndGggPSBhcmdzLmxlbmd0aDsKKysgICAgd2hpbGUgKGxlbmd0aC0tKSBhcnJheVth
cnJheUxlbmd0aCArIGxlbmd0aF0gPSBhcmdzW2xlbmd0aF07CisrICAgIHJldHVybiBhcnJheTsK
KysgIH0KKysKKysgIGZ1bmN0aW9uIG1lcmdlKGFycmF5LCBhcmdzKSB7CisrICAgIGFycmF5ID0g
c2xpY2UuY2FsbChhcnJheSwgMCk7CisrICAgIHJldHVybiB1cGRhdGUoYXJyYXksIGFyZ3MpOwor
KyAgfQorKworKyAgZnVuY3Rpb24gYXJndW1lbnROYW1lcygpIHsKKysgICAgdmFyIG5hbWVzID0g
dGhpcy50b1N0cmluZygpLm1hdGNoKC9eW1xzXChdKmZ1bmN0aW9uW14oXSpcKChbXildKilcKS8p
WzFdCisrICAgICAgLnJlcGxhY2UoL1wvXC8uKj9bXHJcbl18XC9cKig/Oi58W1xyXG5dKSo/XCpc
Ly9nLCAnJykKKysgICAgICAucmVwbGFjZSgvXHMrL2csICcnKS5zcGxpdCgnLCcpOworKyAgICBy
ZXR1cm4gbmFtZXMubGVuZ3RoID09IDEgJiYgIW5hbWVzWzBdID8gW10gOiBuYW1lczsKKysgIH0K
KysKKysgIGZ1bmN0aW9uIGJpbmQoY29udGV4dCkgeworKyAgICBpZiAoYXJndW1lbnRzLmxlbmd0
aCA8IDIgJiYgT2JqZWN0LmlzVW5kZWZpbmVkKGFyZ3VtZW50c1swXSkpIHJldHVybiB0aGlzOwor
KyAgICB2YXIgX19tZXRob2QgPSB0aGlzLCBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDEp
OworKyAgICByZXR1cm4gZnVuY3Rpb24oKSB7CisrICAgICAgdmFyIGEgPSBtZXJnZShhcmdzLCBh
cmd1bWVudHMpOworKyAgICAgIHJldHVybiBfX21ldGhvZC5hcHBseShjb250ZXh0LCBhKTsKKysg
ICAgfQorKyAgfQorKworKyAgZnVuY3Rpb24gYmluZEFzRXZlbnRMaXN0ZW5lcihjb250ZXh0KSB7
CisrICAgIHZhciBfX21ldGhvZCA9IHRoaXMsIGFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywg
MSk7CisrICAgIHJldHVybiBmdW5jdGlvbihldmVudCkgeworKyAgICAgIHZhciBhID0gdXBkYXRl
KFtldmVudCB8fCB3aW5kb3cuZXZlbnRdLCBhcmdzKTsKKysgICAgICByZXR1cm4gX19tZXRob2Qu
YXBwbHkoY29udGV4dCwgYSk7CisrICAgIH0KKysgIH0KKysKKysgIGZ1bmN0aW9uIGN1cnJ5KCkg
eworKyAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiB0aGlzOworKyAgICB2YXIgX19t
ZXRob2QgPSB0aGlzLCBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDApOworKyAgICByZXR1
cm4gZnVuY3Rpb24oKSB7CisrICAgICAgdmFyIGEgPSBtZXJnZShhcmdzLCBhcmd1bWVudHMpOwor
KyAgICAgIHJldHVybiBfX21ldGhvZC5hcHBseSh0aGlzLCBhKTsKKysgICAgfQorKyAgfQorKwor
KyAgZnVuY3Rpb24gZGVsYXkodGltZW91dCkgeworKyAgICB2YXIgX19tZXRob2QgPSB0aGlzLCBh
cmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpOworKyAgICB0aW1lb3V0ID0gdGltZW91dCAq
IDEwMDA7CisrICAgIHJldHVybiB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpIHsKKysgICAg
ICByZXR1cm4gX19tZXRob2QuYXBwbHkoX19tZXRob2QsIGFyZ3MpOworKyAgICB9LCB0aW1lb3V0
KTsKKysgIH0KKysKKysgIGZ1bmN0aW9uIGRlZmVyKCkgeworKyAgICB2YXIgYXJncyA9IHVwZGF0
ZShbMC4wMV0sIGFyZ3VtZW50cyk7CisrICAgIHJldHVybiB0aGlzLmRlbGF5LmFwcGx5KHRoaXMs
IGFyZ3MpOworKyAgfQorKworKyAgZnVuY3Rpb24gd3JhcCh3cmFwcGVyKSB7CisrICAgIHZhciBf
X21ldGhvZCA9IHRoaXM7CisrICAgIHJldHVybiBmdW5jdGlvbigpIHsKKysgICAgICB2YXIgYSA9
IHVwZGF0ZShbX19tZXRob2QuYmluZCh0aGlzKV0sIGFyZ3VtZW50cyk7CisrICAgICAgcmV0dXJu
IHdyYXBwZXIuYXBwbHkodGhpcywgYSk7CisrICAgIH0KKysgIH0KKysKKysgIGZ1bmN0aW9uIG1l
dGhvZGl6ZSgpIHsKKysgICAgaWYgKHRoaXMuX21ldGhvZGl6ZWQpIHJldHVybiB0aGlzLl9tZXRo
b2RpemVkOworKyAgICB2YXIgX19tZXRob2QgPSB0aGlzOworKyAgICByZXR1cm4gdGhpcy5fbWV0
aG9kaXplZCA9IGZ1bmN0aW9uKCkgeworKyAgICAgIHZhciBhID0gdXBkYXRlKFt0aGlzXSwgYXJn
dW1lbnRzKTsKKysgICAgICByZXR1cm4gX19tZXRob2QuYXBwbHkobnVsbCwgYSk7CisrICAgIH07
CisrICB9CisrCisrICByZXR1cm4geworKyAgICBhcmd1bWVudE5hbWVzOiAgICAgICBhcmd1bWVu
dE5hbWVzLAorKyAgICBiaW5kOiAgICAgICAgICAgICAgICBiaW5kLAorKyAgICBiaW5kQXNFdmVu
dExpc3RlbmVyOiBiaW5kQXNFdmVudExpc3RlbmVyLAorKyAgICBjdXJyeTogICAgICAgICAgICAg
ICBjdXJyeSwKKysgICAgZGVsYXk6ICAgICAgICAgICAgICAgZGVsYXksCisrICAgIGRlZmVyOiAg
ICAgICAgICAgICAgIGRlZmVyLAorKyAgICB3cmFwOiAgICAgICAgICAgICAgICB3cmFwLAorKyAg
ICBtZXRob2RpemU6ICAgICAgICAgICBtZXRob2RpemUKKysgIH0KKyt9KSgpKTsKKysKKysKKysK
KysoZnVuY3Rpb24ocHJvdG8pIHsKKysKKysKKysgIGZ1bmN0aW9uIHRvSVNPU3RyaW5nKCkgewor
KyAgICByZXR1cm4gdGhpcy5nZXRVVENGdWxsWWVhcigpICsgJy0nICsKKysgICAgICAodGhpcy5n
ZXRVVENNb250aCgpICsgMSkudG9QYWRkZWRTdHJpbmcoMikgKyAnLScgKworKyAgICAgIHRoaXMu
Z2V0VVRDRGF0ZSgpLnRvUGFkZGVkU3RyaW5nKDIpICsgJ1QnICsKKysgICAgICB0aGlzLmdldFVU
Q0hvdXJzKCkudG9QYWRkZWRTdHJpbmcoMikgKyAnOicgKworKyAgICAgIHRoaXMuZ2V0VVRDTWlu
dXRlcygpLnRvUGFkZGVkU3RyaW5nKDIpICsgJzonICsKKysgICAgICB0aGlzLmdldFVUQ1NlY29u
ZHMoKS50b1BhZGRlZFN0cmluZygyKSArICdaJzsKKysgIH0KKysKKysKKysgIGZ1bmN0aW9uIHRv
SlNPTigpIHsKKysgICAgcmV0dXJuIHRoaXMudG9JU09TdHJpbmcoKTsKKysgIH0KKysKKysgIGlm
ICghcHJvdG8udG9JU09TdHJpbmcpIHByb3RvLnRvSVNPU3RyaW5nID0gdG9JU09TdHJpbmc7Cisr
ICBpZiAoIXByb3RvLnRvSlNPTikgcHJvdG8udG9KU09OID0gdG9KU09OOworKworK30pKERhdGUu
cHJvdG90eXBlKTsKKysKKysKKytSZWdFeHAucHJvdG90eXBlLm1hdGNoID0gUmVnRXhwLnByb3Rv
dHlwZS50ZXN0OworKworK1JlZ0V4cC5lc2NhcGUgPSBmdW5jdGlvbihzdHIpIHsKKysgIHJldHVy
biBTdHJpbmcoc3RyKS5yZXBsYWNlKC8oWy4qKz9ePSE6JHt9KCl8W1xdXC9cXF0pL2csICdcXCQx
Jyk7CisrfTsKKyt2YXIgUGVyaW9kaWNhbEV4ZWN1dGVyID0gQ2xhc3MuY3JlYXRlKHsKKysgIGlu
aXRpYWxpemU6IGZ1bmN0aW9uKGNhbGxiYWNrLCBmcmVxdWVuY3kpIHsKKysgICAgdGhpcy5jYWxs
YmFjayA9IGNhbGxiYWNrOworKyAgICB0aGlzLmZyZXF1ZW5jeSA9IGZyZXF1ZW5jeTsKKysgICAg
dGhpcy5jdXJyZW50bHlFeGVjdXRpbmcgPSBmYWxzZTsKKysKKysgICAgdGhpcy5yZWdpc3RlckNh
bGxiYWNrKCk7CisrICB9LAorKworKyAgcmVnaXN0ZXJDYWxsYmFjazogZnVuY3Rpb24oKSB7Cisr
ICAgIHRoaXMudGltZXIgPSBzZXRJbnRlcnZhbCh0aGlzLm9uVGltZXJFdmVudC5iaW5kKHRoaXMp
LCB0aGlzLmZyZXF1ZW5jeSAqIDEwMDApOworKyAgfSwKKysKKysgIGV4ZWN1dGU6IGZ1bmN0aW9u
KCkgeworKyAgICB0aGlzLmNhbGxiYWNrKHRoaXMpOworKyAgfSwKKysKKysgIHN0b3A6IGZ1bmN0
aW9uKCkgeworKyAgICBpZiAoIXRoaXMudGltZXIpIHJldHVybjsKKysgICAgY2xlYXJJbnRlcnZh
bCh0aGlzLnRpbWVyKTsKKysgICAgdGhpcy50aW1lciA9IG51bGw7CisrICB9LAorKworKyAgb25U
aW1lckV2ZW50OiBmdW5jdGlvbigpIHsKKysgICAgaWYgKCF0aGlzLmN1cnJlbnRseUV4ZWN1dGlu
ZykgeworKyAgICAgIHRyeSB7CisrICAgICAgICB0aGlzLmN1cnJlbnRseUV4ZWN1dGluZyA9IHRy
dWU7CisrICAgICAgICB0aGlzLmV4ZWN1dGUoKTsKKysgICAgICAgIHRoaXMuY3VycmVudGx5RXhl
Y3V0aW5nID0gZmFsc2U7CisrICAgICAgfSBjYXRjaChlKSB7CisrICAgICAgICB0aGlzLmN1cnJl
bnRseUV4ZWN1dGluZyA9IGZhbHNlOworKyAgICAgICAgdGhyb3cgZTsKKysgICAgICB9CisrICAg
IH0KKysgIH0KKyt9KTsKKytPYmplY3QuZXh0ZW5kKFN0cmluZywgeworKyAgaW50ZXJwcmV0OiBm
dW5jdGlvbih2YWx1ZSkgeworKyAgICByZXR1cm4gdmFsdWUgPT0gbnVsbCA/ICcnIDogU3RyaW5n
KHZhbHVlKTsKKysgIH0sCisrICBzcGVjaWFsQ2hhcjogeworKyAgICAnXGInOiAnXFxiJywKKysg
ICAgJ1x0JzogJ1xcdCcsCisrICAgICdcbic6ICdcXG4nLAorKyAgICAnXGYnOiAnXFxmJywKKysg
ICAgJ1xyJzogJ1xccicsCisrICAgICdcXCc6ICdcXFxcJworKyAgfQorK30pOworKworK09iamVj
dC5leHRlbmQoU3RyaW5nLnByb3RvdHlwZSwgKGZ1bmN0aW9uKCkgeworKyAgdmFyIE5BVElWRV9K
U09OX1BBUlNFX1NVUFBPUlQgPSB3aW5kb3cuSlNPTiAmJgorKyAgICB0eXBlb2YgSlNPTi5wYXJz
ZSA9PT0gJ2Z1bmN0aW9uJyAmJgorKyAgICBKU09OLnBhcnNlKCd7InRlc3QiOiB0cnVlfScpLnRl
c3Q7CisrCisrICBmdW5jdGlvbiBwcmVwYXJlUmVwbGFjZW1lbnQocmVwbGFjZW1lbnQpIHsKKysg
ICAgaWYgKE9iamVjdC5pc0Z1bmN0aW9uKHJlcGxhY2VtZW50KSkgcmV0dXJuIHJlcGxhY2VtZW50
OworKyAgICB2YXIgdGVtcGxhdGUgPSBuZXcgVGVtcGxhdGUocmVwbGFjZW1lbnQpOworKyAgICBy
ZXR1cm4gZnVuY3Rpb24obWF0Y2gpIHsgcmV0dXJuIHRlbXBsYXRlLmV2YWx1YXRlKG1hdGNoKSB9
OworKyAgfQorKworKyAgZnVuY3Rpb24gZ3N1YihwYXR0ZXJuLCByZXBsYWNlbWVudCkgeworKyAg
ICB2YXIgcmVzdWx0ID0gJycsIHNvdXJjZSA9IHRoaXMsIG1hdGNoOworKyAgICByZXBsYWNlbWVu
dCA9IHByZXBhcmVSZXBsYWNlbWVudChyZXBsYWNlbWVudCk7CisrCisrICAgIGlmIChPYmplY3Qu
aXNTdHJpbmcocGF0dGVybikpCisrICAgICAgcGF0dGVybiA9IFJlZ0V4cC5lc2NhcGUocGF0dGVy
bik7CisrCisrICAgIGlmICghKHBhdHRlcm4ubGVuZ3RoIHx8IHBhdHRlcm4uc291cmNlKSkgewor
KyAgICAgIHJlcGxhY2VtZW50ID0gcmVwbGFjZW1lbnQoJycpOworKyAgICAgIHJldHVybiByZXBs
YWNlbWVudCArIHNvdXJjZS5zcGxpdCgnJykuam9pbihyZXBsYWNlbWVudCkgKyByZXBsYWNlbWVu
dDsKKysgICAgfQorKworKyAgICB3aGlsZSAoc291cmNlLmxlbmd0aCA+IDApIHsKKysgICAgICBp
ZiAobWF0Y2ggPSBzb3VyY2UubWF0Y2gocGF0dGVybikpIHsKKysgICAgICAgIHJlc3VsdCArPSBz
b3VyY2Uuc2xpY2UoMCwgbWF0Y2guaW5kZXgpOworKyAgICAgICAgcmVzdWx0ICs9IFN0cmluZy5p
bnRlcnByZXQocmVwbGFjZW1lbnQobWF0Y2gpKTsKKysgICAgICAgIHNvdXJjZSAgPSBzb3VyY2Uu
c2xpY2UobWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGgpOworKyAgICAgIH0gZWxzZSB7Cisr
ICAgICAgICByZXN1bHQgKz0gc291cmNlLCBzb3VyY2UgPSAnJzsKKysgICAgICB9CisrICAgIH0K
KysgICAgcmV0dXJuIHJlc3VsdDsKKysgIH0KKysKKysgIGZ1bmN0aW9uIHN1YihwYXR0ZXJuLCBy
ZXBsYWNlbWVudCwgY291bnQpIHsKKysgICAgcmVwbGFjZW1lbnQgPSBwcmVwYXJlUmVwbGFjZW1l
bnQocmVwbGFjZW1lbnQpOworKyAgICBjb3VudCA9IE9iamVjdC5pc1VuZGVmaW5lZChjb3VudCkg
PyAxIDogY291bnQ7CisrCisrICAgIHJldHVybiB0aGlzLmdzdWIocGF0dGVybiwgZnVuY3Rpb24o
bWF0Y2gpIHsKKysgICAgICBpZiAoLS1jb3VudCA8IDApIHJldHVybiBtYXRjaFswXTsKKysgICAg
ICByZXR1cm4gcmVwbGFjZW1lbnQobWF0Y2gpOworKyAgICB9KTsKKysgIH0KKysKKysgIGZ1bmN0
aW9uIHNjYW4ocGF0dGVybiwgaXRlcmF0b3IpIHsKKysgICAgdGhpcy5nc3ViKHBhdHRlcm4sIGl0
ZXJhdG9yKTsKKysgICAgcmV0dXJuIFN0cmluZyh0aGlzKTsKKysgIH0KKysKKysgIGZ1bmN0aW9u
IHRydW5jYXRlKGxlbmd0aCwgdHJ1bmNhdGlvbikgeworKyAgICBsZW5ndGggPSBsZW5ndGggfHwg
MzA7CisrICAgIHRydW5jYXRpb24gPSBPYmplY3QuaXNVbmRlZmluZWQodHJ1bmNhdGlvbikgPyAn
Li4uJyA6IHRydW5jYXRpb247CisrICAgIHJldHVybiB0aGlzLmxlbmd0aCA+IGxlbmd0aCA/Cisr
ICAgICAgdGhpcy5zbGljZSgwLCBsZW5ndGggLSB0cnVuY2F0aW9uLmxlbmd0aCkgKyB0cnVuY2F0
aW9uIDogU3RyaW5nKHRoaXMpOworKyAgfQorKworKyAgZnVuY3Rpb24gc3RyaXAoKSB7CisrICAg
IHJldHVybiB0aGlzLnJlcGxhY2UoL15ccysvLCAnJykucmVwbGFjZSgvXHMrJC8sICcnKTsKKysg
IH0KKysKKysgIGZ1bmN0aW9uIHN0cmlwVGFncygpIHsKKysgICAgcmV0dXJuIHRoaXMucmVwbGFj
ZSgvPFx3KyhccysoIlteIl0qInwnW14nXSonfFtePl0pKyk/Pnw8XC9cdys+L2dpLCAnJyk7Cisr
ICB9CisrCisrICBmdW5jdGlvbiBzdHJpcFNjcmlwdHMoKSB7CisrICAgIHJldHVybiB0aGlzLnJl
cGxhY2UobmV3IFJlZ0V4cChQcm90b3R5cGUuU2NyaXB0RnJhZ21lbnQsICdpbWcnKSwgJycpOwor
KyAgfQorKworKyAgZnVuY3Rpb24gZXh0cmFjdFNjcmlwdHMoKSB7CisrICAgIHZhciBtYXRjaEFs
bCA9IG5ldyBSZWdFeHAoUHJvdG90eXBlLlNjcmlwdEZyYWdtZW50LCAnaW1nJyksCisrICAgICAg
ICBtYXRjaE9uZSA9IG5ldyBSZWdFeHAoUHJvdG90eXBlLlNjcmlwdEZyYWdtZW50LCAnaW0nKTsK
KysgICAgcmV0dXJuICh0aGlzLm1hdGNoKG1hdGNoQWxsKSB8fCBbXSkubWFwKGZ1bmN0aW9uKHNj
cmlwdFRhZykgeworKyAgICAgIHJldHVybiAoc2NyaXB0VGFnLm1hdGNoKG1hdGNoT25lKSB8fCBb
JycsICcnXSlbMV07CisrICAgIH0pOworKyAgfQorKworKyAgZnVuY3Rpb24gZXZhbFNjcmlwdHMo
KSB7CisrICAgIHJldHVybiB0aGlzLmV4dHJhY3RTY3JpcHRzKCkubWFwKGZ1bmN0aW9uKHNjcmlw
dCkgeyByZXR1cm4gZXZhbChzY3JpcHQpIH0pOworKyAgfQorKworKyAgZnVuY3Rpb24gZXNjYXBl
SFRNTCgpIHsKKysgICAgcmV0dXJuIHRoaXMucmVwbGFjZSgvJi9nLCcmYW1wOycpLnJlcGxhY2Uo
LzwvZywnJmx0OycpLnJlcGxhY2UoLz4vZywnJmd0OycpOworKyAgfQorKworKyAgZnVuY3Rpb24g
dW5lc2NhcGVIVE1MKCkgeworKyAgICByZXR1cm4gdGhpcy5zdHJpcFRhZ3MoKS5yZXBsYWNlKC8m
bHQ7L2csJzwnKS5yZXBsYWNlKC8mZ3Q7L2csJz4nKS5yZXBsYWNlKC8mYW1wOy9nLCcmJyk7Cisr
ICB9CisrCisrCisrICBmdW5jdGlvbiB0b1F1ZXJ5UGFyYW1zKHNlcGFyYXRvcikgeworKyAgICB2
YXIgbWF0Y2ggPSB0aGlzLnN0cmlwKCkubWF0Y2goLyhbXj8jXSopKCMuKik/JC8pOworKyAgICBp
ZiAoIW1hdGNoKSByZXR1cm4geyB9OworKworKyAgICByZXR1cm4gbWF0Y2hbMV0uc3BsaXQoc2Vw
YXJhdG9yIHx8ICcmJykuaW5qZWN0KHsgfSwgZnVuY3Rpb24oaGFzaCwgcGFpcikgeworKyAgICAg
IGlmICgocGFpciA9IHBhaXIuc3BsaXQoJz0nKSlbMF0pIHsKKysgICAgICAgIHZhciBrZXkgPSBk
ZWNvZGVVUklDb21wb25lbnQocGFpci5zaGlmdCgpKSwKKysgICAgICAgICAgICB2YWx1ZSA9IHBh
aXIubGVuZ3RoID4gMSA/IHBhaXIuam9pbignPScpIDogcGFpclswXTsKKysKKysgICAgICAgIGlm
ICh2YWx1ZSAhPSB1bmRlZmluZWQpIHZhbHVlID0gZGVjb2RlVVJJQ29tcG9uZW50KHZhbHVlKTsK
KysKKysgICAgICAgIGlmIChrZXkgaW4gaGFzaCkgeworKyAgICAgICAgICBpZiAoIU9iamVjdC5p
c0FycmF5KGhhc2hba2V5XSkpIGhhc2hba2V5XSA9IFtoYXNoW2tleV1dOworKyAgICAgICAgICBo
YXNoW2tleV0ucHVzaCh2YWx1ZSk7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIGhhc2hba2V5
XSA9IHZhbHVlOworKyAgICAgIH0KKysgICAgICByZXR1cm4gaGFzaDsKKysgICAgfSk7CisrICB9
CisrCisrICBmdW5jdGlvbiB0b0FycmF5KCkgeworKyAgICByZXR1cm4gdGhpcy5zcGxpdCgnJyk7
CisrICB9CisrCisrICBmdW5jdGlvbiBzdWNjKCkgeworKyAgICByZXR1cm4gdGhpcy5zbGljZSgw
LCB0aGlzLmxlbmd0aCAtIDEpICsKKysgICAgICBTdHJpbmcuZnJvbUNoYXJDb2RlKHRoaXMuY2hh
ckNvZGVBdCh0aGlzLmxlbmd0aCAtIDEpICsgMSk7CisrICB9CisrCisrICBmdW5jdGlvbiB0aW1l
cyhjb3VudCkgeworKyAgICByZXR1cm4gY291bnQgPCAxID8gJycgOiBuZXcgQXJyYXkoY291bnQg
KyAxKS5qb2luKHRoaXMpOworKyAgfQorKworKyAgZnVuY3Rpb24gY2FtZWxpemUoKSB7CisrICAg
IHJldHVybiB0aGlzLnJlcGxhY2UoLy0rKC4pPy9nLCBmdW5jdGlvbihtYXRjaCwgY2hyKSB7Cisr
ICAgICAgcmV0dXJuIGNociA/IGNoci50b1VwcGVyQ2FzZSgpIDogJyc7CisrICAgIH0pOworKyAg
fQorKworKyAgZnVuY3Rpb24gY2FwaXRhbGl6ZSgpIHsKKysgICAgcmV0dXJuIHRoaXMuY2hhckF0
KDApLnRvVXBwZXJDYXNlKCkgKyB0aGlzLnN1YnN0cmluZygxKS50b0xvd2VyQ2FzZSgpOworKyAg
fQorKworKyAgZnVuY3Rpb24gdW5kZXJzY29yZSgpIHsKKysgICAgcmV0dXJuIHRoaXMucmVwbGFj
ZSgvOjovZywgJy8nKQorKyAgICAgICAgICAgICAgIC5yZXBsYWNlKC8oW0EtWl0rKShbQS1aXVth
LXpdKS9nLCAnJDFfJDInKQorKyAgICAgICAgICAgICAgIC5yZXBsYWNlKC8oW2EtelxkXSkoW0Et
Wl0pL2csICckMV8kMicpCisrICAgICAgICAgICAgICAgLnJlcGxhY2UoLy0vZywgJ18nKQorKyAg
ICAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpOworKyAgfQorKworKyAgZnVuY3Rpb24gZGFzaGVy
aXplKCkgeworKyAgICByZXR1cm4gdGhpcy5yZXBsYWNlKC9fL2csICctJyk7CisrICB9CisrCisr
ICBmdW5jdGlvbiBpbnNwZWN0KHVzZURvdWJsZVF1b3RlcykgeworKyAgICB2YXIgZXNjYXBlZFN0
cmluZyA9IHRoaXMucmVwbGFjZSgvW1x4MDAtXHgxZlxcXS9nLCBmdW5jdGlvbihjaGFyYWN0ZXIp
IHsKKysgICAgICBpZiAoY2hhcmFjdGVyIGluIFN0cmluZy5zcGVjaWFsQ2hhcikgeworKyAgICAg
ICAgcmV0dXJuIFN0cmluZy5zcGVjaWFsQ2hhcltjaGFyYWN0ZXJdOworKyAgICAgIH0KKysgICAg
ICByZXR1cm4gJ1xcdTAwJyArIGNoYXJhY3Rlci5jaGFyQ29kZUF0KCkudG9QYWRkZWRTdHJpbmco
MiwgMTYpOworKyAgICB9KTsKKysgICAgaWYgKHVzZURvdWJsZVF1b3RlcykgcmV0dXJuICciJyAr
IGVzY2FwZWRTdHJpbmcucmVwbGFjZSgvIi9nLCAnXFwiJykgKyAnIic7CisrICAgIHJldHVybiAi
JyIgKyBlc2NhcGVkU3RyaW5nLnJlcGxhY2UoLycvZywgJ1xcXCcnKSArICInIjsKKysgIH0KKysK
KysgIGZ1bmN0aW9uIHVuZmlsdGVySlNPTihmaWx0ZXIpIHsKKysgICAgcmV0dXJuIHRoaXMucmVw
bGFjZShmaWx0ZXIgfHwgUHJvdG90eXBlLkpTT05GaWx0ZXIsICckMScpOworKyAgfQorKworKyAg
ZnVuY3Rpb24gaXNKU09OKCkgeworKyAgICB2YXIgc3RyID0gdGhpczsKKysgICAgaWYgKHN0ci5i
bGFuaygpKSByZXR1cm4gZmFsc2U7CisrICAgIHN0ciA9IHN0ci5yZXBsYWNlKC9cXCg/OlsiXFxc
L2JmbnJ0XXx1WzAtOWEtZkEtRl17NH0pL2csICdAJyk7CisrICAgIHN0ciA9IHN0ci5yZXBsYWNl
KC8iW14iXFxcblxyXSoifHRydWV8ZmFsc2V8bnVsbHwtP1xkKyg/OlwuXGQqKT8oPzpbZUVdWytc
LV0/XGQrKT8vZywgJ10nKTsKKysgICAgc3RyID0gc3RyLnJlcGxhY2UoLyg/Ol58OnwsKSg/Olxz
KlxbKSsvZywgJycpOworKyAgICByZXR1cm4gKC9eW1xdLDp7fVxzXSokLykudGVzdChzdHIpOwor
KyAgfQorKworKyAgZnVuY3Rpb24gZXZhbEpTT04oc2FuaXRpemUpIHsKKysgICAgdmFyIGpzb24g
PSB0aGlzLnVuZmlsdGVySlNPTigpLAorKyAgICAgICAgY3ggPSAvW1x1MDAwMFx1MDBhZFx1MDYw
MC1cdTA2MDRcdTA3MGZcdTE3YjRcdTE3YjVcdTIwMGMtXHUyMDBmXHUyMDI4LVx1MjAyZlx1MjA2
MC1cdTIwNmZcdWZlZmZcdWZmZjAtXHVmZmZmXS9nOworKyAgICBpZiAoY3gudGVzdChqc29uKSkg
eworKyAgICAgIGpzb24gPSBqc29uLnJlcGxhY2UoY3gsIGZ1bmN0aW9uIChhKSB7CisrICAgICAg
ICByZXR1cm4gJ1xcdScgKyAoJzAwMDAnICsgYS5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSku
c2xpY2UoLTQpOworKyAgICAgIH0pOworKyAgICB9CisrICAgIHRyeSB7CisrICAgICAgaWYgKCFz
YW5pdGl6ZSB8fCBqc29uLmlzSlNPTigpKSByZXR1cm4gZXZhbCgnKCcgKyBqc29uICsgJyknKTsK
KysgICAgfSBjYXRjaCAoZSkgeyB9CisrICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignQmFkbHkg
Zm9ybWVkIEpTT04gc3RyaW5nOiAnICsgdGhpcy5pbnNwZWN0KCkpOworKyAgfQorKworKyAgZnVu
Y3Rpb24gcGFyc2VKU09OKCkgeworKyAgICB2YXIganNvbiA9IHRoaXMudW5maWx0ZXJKU09OKCk7
CisrICAgIHJldHVybiBKU09OLnBhcnNlKGpzb24pOworKyAgfQorKworKyAgZnVuY3Rpb24gaW5j
bHVkZShwYXR0ZXJuKSB7CisrICAgIHJldHVybiB0aGlzLmluZGV4T2YocGF0dGVybikgPiAtMTsK
KysgIH0KKysKKysgIGZ1bmN0aW9uIHN0YXJ0c1dpdGgocGF0dGVybikgeworKyAgICByZXR1cm4g
dGhpcy5sYXN0SW5kZXhPZihwYXR0ZXJuLCAwKSA9PT0gMDsKKysgIH0KKysKKysgIGZ1bmN0aW9u
IGVuZHNXaXRoKHBhdHRlcm4pIHsKKysgICAgdmFyIGQgPSB0aGlzLmxlbmd0aCAtIHBhdHRlcm4u
bGVuZ3RoOworKyAgICByZXR1cm4gZCA+PSAwICYmIHRoaXMuaW5kZXhPZihwYXR0ZXJuLCBkKSA9
PT0gZDsKKysgIH0KKysKKysgIGZ1bmN0aW9uIGVtcHR5KCkgeworKyAgICByZXR1cm4gdGhpcyA9
PSAnJzsKKysgIH0KKysKKysgIGZ1bmN0aW9uIGJsYW5rKCkgeworKyAgICByZXR1cm4gL15ccyok
Ly50ZXN0KHRoaXMpOworKyAgfQorKworKyAgZnVuY3Rpb24gaW50ZXJwb2xhdGUob2JqZWN0LCBw
YXR0ZXJuKSB7CisrICAgIHJldHVybiBuZXcgVGVtcGxhdGUodGhpcywgcGF0dGVybikuZXZhbHVh
dGUob2JqZWN0KTsKKysgIH0KKysKKysgIHJldHVybiB7CisrICAgIGdzdWI6ICAgICAgICAgICBn
c3ViLAorKyAgICBzdWI6ICAgICAgICAgICAgc3ViLAorKyAgICBzY2FuOiAgICAgICAgICAgc2Nh
biwKKysgICAgdHJ1bmNhdGU6ICAgICAgIHRydW5jYXRlLAorKyAgICBzdHJpcDogICAgICAgICAg
U3RyaW5nLnByb3RvdHlwZS50cmltIHx8IHN0cmlwLAorKyAgICBzdHJpcFRhZ3M6ICAgICAgc3Ry
aXBUYWdzLAorKyAgICBzdHJpcFNjcmlwdHM6ICAgc3RyaXBTY3JpcHRzLAorKyAgICBleHRyYWN0
U2NyaXB0czogZXh0cmFjdFNjcmlwdHMsCisrICAgIGV2YWxTY3JpcHRzOiAgICBldmFsU2NyaXB0
cywKKysgICAgZXNjYXBlSFRNTDogICAgIGVzY2FwZUhUTUwsCisrICAgIHVuZXNjYXBlSFRNTDog
ICB1bmVzY2FwZUhUTUwsCisrICAgIHRvUXVlcnlQYXJhbXM6ICB0b1F1ZXJ5UGFyYW1zLAorKyAg
ICBwYXJzZVF1ZXJ5OiAgICAgdG9RdWVyeVBhcmFtcywKKysgICAgdG9BcnJheTogICAgICAgIHRv
QXJyYXksCisrICAgIHN1Y2M6ICAgICAgICAgICBzdWNjLAorKyAgICB0aW1lczogICAgICAgICAg
dGltZXMsCisrICAgIGNhbWVsaXplOiAgICAgICBjYW1lbGl6ZSwKKysgICAgY2FwaXRhbGl6ZTog
ICAgIGNhcGl0YWxpemUsCisrICAgIHVuZGVyc2NvcmU6ICAgICB1bmRlcnNjb3JlLAorKyAgICBk
YXNoZXJpemU6ICAgICAgZGFzaGVyaXplLAorKyAgICBpbnNwZWN0OiAgICAgICAgaW5zcGVjdCwK
KysgICAgdW5maWx0ZXJKU09OOiAgIHVuZmlsdGVySlNPTiwKKysgICAgaXNKU09OOiAgICAgICAg
IGlzSlNPTiwKKysgICAgZXZhbEpTT046ICAgICAgIE5BVElWRV9KU09OX1BBUlNFX1NVUFBPUlQg
PyBwYXJzZUpTT04gOiBldmFsSlNPTiwKKysgICAgaW5jbHVkZTogICAgICAgIGluY2x1ZGUsCisr
ICAgIHN0YXJ0c1dpdGg6ICAgICBzdGFydHNXaXRoLAorKyAgICBlbmRzV2l0aDogICAgICAgZW5k
c1dpdGgsCisrICAgIGVtcHR5OiAgICAgICAgICBlbXB0eSwKKysgICAgYmxhbms6ICAgICAgICAg
IGJsYW5rLAorKyAgICBpbnRlcnBvbGF0ZTogICAgaW50ZXJwb2xhdGUKKysgIH07CisrfSkoKSk7
CisrCisrdmFyIFRlbXBsYXRlID0gQ2xhc3MuY3JlYXRlKHsKKysgIGluaXRpYWxpemU6IGZ1bmN0
aW9uKHRlbXBsYXRlLCBwYXR0ZXJuKSB7CisrICAgIHRoaXMudGVtcGxhdGUgPSB0ZW1wbGF0ZS50
b1N0cmluZygpOworKyAgICB0aGlzLnBhdHRlcm4gPSBwYXR0ZXJuIHx8IFRlbXBsYXRlLlBhdHRl
cm47CisrICB9LAorKworKyAgZXZhbHVhdGU6IGZ1bmN0aW9uKG9iamVjdCkgeworKyAgICBpZiAo
b2JqZWN0ICYmIE9iamVjdC5pc0Z1bmN0aW9uKG9iamVjdC50b1RlbXBsYXRlUmVwbGFjZW1lbnRz
KSkKKysgICAgICBvYmplY3QgPSBvYmplY3QudG9UZW1wbGF0ZVJlcGxhY2VtZW50cygpOworKwor
KyAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZS5nc3ViKHRoaXMucGF0dGVybiwgZnVuY3Rpb24obWF0
Y2gpIHsKKysgICAgICBpZiAob2JqZWN0ID09IG51bGwpIHJldHVybiAobWF0Y2hbMV0gKyAnJyk7
CisrCisrICAgICAgdmFyIGJlZm9yZSA9IG1hdGNoWzFdIHx8ICcnOworKyAgICAgIGlmIChiZWZv
cmUgPT0gJ1xcJykgcmV0dXJuIG1hdGNoWzJdOworKworKyAgICAgIHZhciBjdHggPSBvYmplY3Qs
IGV4cHIgPSBtYXRjaFszXSwKKysgICAgICAgICAgcGF0dGVybiA9IC9eKFteLltdK3xcWygoPzou
Kj9bXlxcXSk/KVxdKShcLnxcW3wkKS87CisrCisrICAgICAgbWF0Y2ggPSBwYXR0ZXJuLmV4ZWMo
ZXhwcik7CisrICAgICAgaWYgKG1hdGNoID09IG51bGwpIHJldHVybiBiZWZvcmU7CisrCisrICAg
ICAgd2hpbGUgKG1hdGNoICE9IG51bGwpIHsKKysgICAgICAgIHZhciBjb21wID0gbWF0Y2hbMV0u
c3RhcnRzV2l0aCgnWycpID8gbWF0Y2hbMl0ucmVwbGFjZSgvXFxcXF0vZywgJ10nKSA6IG1hdGNo
WzFdOworKyAgICAgICAgY3R4ID0gY3R4W2NvbXBdOworKyAgICAgICAgaWYgKG51bGwgPT0gY3R4
IHx8ICcnID09IG1hdGNoWzNdKSBicmVhazsKKysgICAgICAgIGV4cHIgPSBleHByLnN1YnN0cmlu
ZygnWycgPT0gbWF0Y2hbM10gPyBtYXRjaFsxXS5sZW5ndGggOiBtYXRjaFswXS5sZW5ndGgpOwor
KyAgICAgICAgbWF0Y2ggPSBwYXR0ZXJuLmV4ZWMoZXhwcik7CisrICAgICAgfQorKworKyAgICAg
IHJldHVybiBiZWZvcmUgKyBTdHJpbmcuaW50ZXJwcmV0KGN0eCk7CisrICAgIH0pOworKyAgfQor
K30pOworK1RlbXBsYXRlLlBhdHRlcm4gPSAvKF58LnxccnxcbikoI1x7KC4qPylcfSkvOworKwor
K3ZhciAkYnJlYWsgPSB7IH07CisrCisrdmFyIEVudW1lcmFibGUgPSAoZnVuY3Rpb24oKSB7Cisr
ICBmdW5jdGlvbiBlYWNoKGl0ZXJhdG9yLCBjb250ZXh0KSB7CisrICAgIHZhciBpbmRleCA9IDA7
CisrICAgIHRyeSB7CisrICAgICAgdGhpcy5fZWFjaChmdW5jdGlvbih2YWx1ZSkgeworKyAgICAg
ICAgaXRlcmF0b3IuY2FsbChjb250ZXh0LCB2YWx1ZSwgaW5kZXgrKyk7CisrICAgICAgfSk7Cisr
ICAgIH0gY2F0Y2ggKGUpIHsKKysgICAgICBpZiAoZSAhPSAkYnJlYWspIHRocm93IGU7CisrICAg
IH0KKysgICAgcmV0dXJuIHRoaXM7CisrICB9CisrCisrICBmdW5jdGlvbiBlYWNoU2xpY2UobnVt
YmVyLCBpdGVyYXRvciwgY29udGV4dCkgeworKyAgICB2YXIgaW5kZXggPSAtbnVtYmVyLCBzbGlj
ZXMgPSBbXSwgYXJyYXkgPSB0aGlzLnRvQXJyYXkoKTsKKysgICAgaWYgKG51bWJlciA8IDEpIHJl
dHVybiBhcnJheTsKKysgICAgd2hpbGUgKChpbmRleCArPSBudW1iZXIpIDwgYXJyYXkubGVuZ3Ro
KQorKyAgICAgIHNsaWNlcy5wdXNoKGFycmF5LnNsaWNlKGluZGV4LCBpbmRleCtudW1iZXIpKTsK
KysgICAgcmV0dXJuIHNsaWNlcy5jb2xsZWN0KGl0ZXJhdG9yLCBjb250ZXh0KTsKKysgIH0KKysK
KysgIGZ1bmN0aW9uIGFsbChpdGVyYXRvciwgY29udGV4dCkgeworKyAgICBpdGVyYXRvciA9IGl0
ZXJhdG9yIHx8IFByb3RvdHlwZS5LOworKyAgICB2YXIgcmVzdWx0ID0gdHJ1ZTsKKysgICAgdGhp
cy5lYWNoKGZ1bmN0aW9uKHZhbHVlLCBpbmRleCkgeworKyAgICAgIHJlc3VsdCA9IHJlc3VsdCAm
JiAhIWl0ZXJhdG9yLmNhbGwoY29udGV4dCwgdmFsdWUsIGluZGV4KTsKKysgICAgICBpZiAoIXJl
c3VsdCkgdGhyb3cgJGJyZWFrOworKyAgICB9KTsKKysgICAgcmV0dXJuIHJlc3VsdDsKKysgIH0K
KysKKysgIGZ1bmN0aW9uIGFueShpdGVyYXRvciwgY29udGV4dCkgeworKyAgICBpdGVyYXRvciA9
IGl0ZXJhdG9yIHx8IFByb3RvdHlwZS5LOworKyAgICB2YXIgcmVzdWx0ID0gZmFsc2U7CisrICAg
IHRoaXMuZWFjaChmdW5jdGlvbih2YWx1ZSwgaW5kZXgpIHsKKysgICAgICBpZiAocmVzdWx0ID0g
ISFpdGVyYXRvci5jYWxsKGNvbnRleHQsIHZhbHVlLCBpbmRleCkpCisrICAgICAgICB0aHJvdyAk
YnJlYWs7CisrICAgIH0pOworKyAgICByZXR1cm4gcmVzdWx0OworKyAgfQorKworKyAgZnVuY3Rp
b24gY29sbGVjdChpdGVyYXRvciwgY29udGV4dCkgeworKyAgICBpdGVyYXRvciA9IGl0ZXJhdG9y
IHx8IFByb3RvdHlwZS5LOworKyAgICB2YXIgcmVzdWx0cyA9IFtdOworKyAgICB0aGlzLmVhY2go
ZnVuY3Rpb24odmFsdWUsIGluZGV4KSB7CisrICAgICAgcmVzdWx0cy5wdXNoKGl0ZXJhdG9yLmNh
bGwoY29udGV4dCwgdmFsdWUsIGluZGV4KSk7CisrICAgIH0pOworKyAgICByZXR1cm4gcmVzdWx0
czsKKysgIH0KKysKKysgIGZ1bmN0aW9uIGRldGVjdChpdGVyYXRvciwgY29udGV4dCkgeworKyAg
ICB2YXIgcmVzdWx0OworKyAgICB0aGlzLmVhY2goZnVuY3Rpb24odmFsdWUsIGluZGV4KSB7Cisr
ICAgICAgaWYgKGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgdmFsdWUsIGluZGV4KSkgeworKyAgICAg
ICAgcmVzdWx0ID0gdmFsdWU7CisrICAgICAgICB0aHJvdyAkYnJlYWs7CisrICAgICAgfQorKyAg
ICB9KTsKKysgICAgcmV0dXJuIHJlc3VsdDsKKysgIH0KKysKKysgIGZ1bmN0aW9uIGZpbmRBbGwo
aXRlcmF0b3IsIGNvbnRleHQpIHsKKysgICAgdmFyIHJlc3VsdHMgPSBbXTsKKysgICAgdGhpcy5l
YWNoKGZ1bmN0aW9uKHZhbHVlLCBpbmRleCkgeworKyAgICAgIGlmIChpdGVyYXRvci5jYWxsKGNv
bnRleHQsIHZhbHVlLCBpbmRleCkpCisrICAgICAgICByZXN1bHRzLnB1c2godmFsdWUpOworKyAg
ICB9KTsKKysgICAgcmV0dXJuIHJlc3VsdHM7CisrICB9CisrCisrICBmdW5jdGlvbiBncmVwKGZp
bHRlciwgaXRlcmF0b3IsIGNvbnRleHQpIHsKKysgICAgaXRlcmF0b3IgPSBpdGVyYXRvciB8fCBQ
cm90b3R5cGUuSzsKKysgICAgdmFyIHJlc3VsdHMgPSBbXTsKKysKKysgICAgaWYgKE9iamVjdC5p
c1N0cmluZyhmaWx0ZXIpKQorKyAgICAgIGZpbHRlciA9IG5ldyBSZWdFeHAoUmVnRXhwLmVzY2Fw
ZShmaWx0ZXIpKTsKKysKKysgICAgdGhpcy5lYWNoKGZ1bmN0aW9uKHZhbHVlLCBpbmRleCkgewor
KyAgICAgIGlmIChmaWx0ZXIubWF0Y2godmFsdWUpKQorKyAgICAgICAgcmVzdWx0cy5wdXNoKGl0
ZXJhdG9yLmNhbGwoY29udGV4dCwgdmFsdWUsIGluZGV4KSk7CisrICAgIH0pOworKyAgICByZXR1
cm4gcmVzdWx0czsKKysgIH0KKysKKysgIGZ1bmN0aW9uIGluY2x1ZGUob2JqZWN0KSB7CisrICAg
IGlmIChPYmplY3QuaXNGdW5jdGlvbih0aGlzLmluZGV4T2YpKQorKyAgICAgIGlmICh0aGlzLmlu
ZGV4T2Yob2JqZWN0KSAhPSAtMSkgcmV0dXJuIHRydWU7CisrCisrICAgIHZhciBmb3VuZCA9IGZh
bHNlOworKyAgICB0aGlzLmVhY2goZnVuY3Rpb24odmFsdWUpIHsKKysgICAgICBpZiAodmFsdWUg
PT0gb2JqZWN0KSB7CisrICAgICAgICBmb3VuZCA9IHRydWU7CisrICAgICAgICB0aHJvdyAkYnJl
YWs7CisrICAgICAgfQorKyAgICB9KTsKKysgICAgcmV0dXJuIGZvdW5kOworKyAgfQorKworKyAg
ZnVuY3Rpb24gaW5Hcm91cHNPZihudW1iZXIsIGZpbGxXaXRoKSB7CisrICAgIGZpbGxXaXRoID0g
T2JqZWN0LmlzVW5kZWZpbmVkKGZpbGxXaXRoKSA/IG51bGwgOiBmaWxsV2l0aDsKKysgICAgcmV0
dXJuIHRoaXMuZWFjaFNsaWNlKG51bWJlciwgZnVuY3Rpb24oc2xpY2UpIHsKKysgICAgICB3aGls
ZShzbGljZS5sZW5ndGggPCBudW1iZXIpIHNsaWNlLnB1c2goZmlsbFdpdGgpOworKyAgICAgIHJl
dHVybiBzbGljZTsKKysgICAgfSk7CisrICB9CisrCisrICBmdW5jdGlvbiBpbmplY3QobWVtbywg
aXRlcmF0b3IsIGNvbnRleHQpIHsKKysgICAgdGhpcy5lYWNoKGZ1bmN0aW9uKHZhbHVlLCBpbmRl
eCkgeworKyAgICAgIG1lbW8gPSBpdGVyYXRvci5jYWxsKGNvbnRleHQsIG1lbW8sIHZhbHVlLCBp
bmRleCk7CisrICAgIH0pOworKyAgICByZXR1cm4gbWVtbzsKKysgIH0KKysKKysgIGZ1bmN0aW9u
IGludm9rZShtZXRob2QpIHsKKysgICAgdmFyIGFyZ3MgPSAkQShhcmd1bWVudHMpLnNsaWNlKDEp
OworKyAgICByZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24odmFsdWUpIHsKKysgICAgICByZXR1cm4g
dmFsdWVbbWV0aG9kXS5hcHBseSh2YWx1ZSwgYXJncyk7CisrICAgIH0pOworKyAgfQorKworKyAg
ZnVuY3Rpb24gbWF4KGl0ZXJhdG9yLCBjb250ZXh0KSB7CisrICAgIGl0ZXJhdG9yID0gaXRlcmF0
b3IgfHwgUHJvdG90eXBlLks7CisrICAgIHZhciByZXN1bHQ7CisrICAgIHRoaXMuZWFjaChmdW5j
dGlvbih2YWx1ZSwgaW5kZXgpIHsKKysgICAgICB2YWx1ZSA9IGl0ZXJhdG9yLmNhbGwoY29udGV4
dCwgdmFsdWUsIGluZGV4KTsKKysgICAgICBpZiAocmVzdWx0ID09IG51bGwgfHwgdmFsdWUgPj0g
cmVzdWx0KQorKyAgICAgICAgcmVzdWx0ID0gdmFsdWU7CisrICAgIH0pOworKyAgICByZXR1cm4g
cmVzdWx0OworKyAgfQorKworKyAgZnVuY3Rpb24gbWluKGl0ZXJhdG9yLCBjb250ZXh0KSB7Cisr
ICAgIGl0ZXJhdG9yID0gaXRlcmF0b3IgfHwgUHJvdG90eXBlLks7CisrICAgIHZhciByZXN1bHQ7
CisrICAgIHRoaXMuZWFjaChmdW5jdGlvbih2YWx1ZSwgaW5kZXgpIHsKKysgICAgICB2YWx1ZSA9
IGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgdmFsdWUsIGluZGV4KTsKKysgICAgICBpZiAocmVzdWx0
ID09IG51bGwgfHwgdmFsdWUgPCByZXN1bHQpCisrICAgICAgICByZXN1bHQgPSB2YWx1ZTsKKysg
ICAgfSk7CisrICAgIHJldHVybiByZXN1bHQ7CisrICB9CisrCisrICBmdW5jdGlvbiBwYXJ0aXRp
b24oaXRlcmF0b3IsIGNvbnRleHQpIHsKKysgICAgaXRlcmF0b3IgPSBpdGVyYXRvciB8fCBQcm90
b3R5cGUuSzsKKysgICAgdmFyIHRydWVzID0gW10sIGZhbHNlcyA9IFtdOworKyAgICB0aGlzLmVh
Y2goZnVuY3Rpb24odmFsdWUsIGluZGV4KSB7CisrICAgICAgKGl0ZXJhdG9yLmNhbGwoY29udGV4
dCwgdmFsdWUsIGluZGV4KSA/CisrICAgICAgICB0cnVlcyA6IGZhbHNlcykucHVzaCh2YWx1ZSk7
CisrICAgIH0pOworKyAgICByZXR1cm4gW3RydWVzLCBmYWxzZXNdOworKyAgfQorKworKyAgZnVu
Y3Rpb24gcGx1Y2socHJvcGVydHkpIHsKKysgICAgdmFyIHJlc3VsdHMgPSBbXTsKKysgICAgdGhp
cy5lYWNoKGZ1bmN0aW9uKHZhbHVlKSB7CisrICAgICAgcmVzdWx0cy5wdXNoKHZhbHVlW3Byb3Bl
cnR5XSk7CisrICAgIH0pOworKyAgICByZXR1cm4gcmVzdWx0czsKKysgIH0KKysKKysgIGZ1bmN0
aW9uIHJlamVjdChpdGVyYXRvciwgY29udGV4dCkgeworKyAgICB2YXIgcmVzdWx0cyA9IFtdOwor
KyAgICB0aGlzLmVhY2goZnVuY3Rpb24odmFsdWUsIGluZGV4KSB7CisrICAgICAgaWYgKCFpdGVy
YXRvci5jYWxsKGNvbnRleHQsIHZhbHVlLCBpbmRleCkpCisrICAgICAgICByZXN1bHRzLnB1c2go
dmFsdWUpOworKyAgICB9KTsKKysgICAgcmV0dXJuIHJlc3VsdHM7CisrICB9CisrCisrICBmdW5j
dGlvbiBzb3J0QnkoaXRlcmF0b3IsIGNvbnRleHQpIHsKKysgICAgcmV0dXJuIHRoaXMubWFwKGZ1
bmN0aW9uKHZhbHVlLCBpbmRleCkgeworKyAgICAgIHJldHVybiB7CisrICAgICAgICB2YWx1ZTog
dmFsdWUsCisrICAgICAgICBjcml0ZXJpYTogaXRlcmF0b3IuY2FsbChjb250ZXh0LCB2YWx1ZSwg
aW5kZXgpCisrICAgICAgfTsKKysgICAgfSkuc29ydChmdW5jdGlvbihsZWZ0LCByaWdodCkgewor
KyAgICAgIHZhciBhID0gbGVmdC5jcml0ZXJpYSwgYiA9IHJpZ2h0LmNyaXRlcmlhOworKyAgICAg
IHJldHVybiBhIDwgYiA/IC0xIDogYSA+IGIgPyAxIDogMDsKKysgICAgfSkucGx1Y2soJ3ZhbHVl
Jyk7CisrICB9CisrCisrICBmdW5jdGlvbiB0b0FycmF5KCkgeworKyAgICByZXR1cm4gdGhpcy5t
YXAoKTsKKysgIH0KKysKKysgIGZ1bmN0aW9uIHppcCgpIHsKKysgICAgdmFyIGl0ZXJhdG9yID0g
UHJvdG90eXBlLkssIGFyZ3MgPSAkQShhcmd1bWVudHMpOworKyAgICBpZiAoT2JqZWN0LmlzRnVu
Y3Rpb24oYXJncy5sYXN0KCkpKQorKyAgICAgIGl0ZXJhdG9yID0gYXJncy5wb3AoKTsKKysKKysg
ICAgdmFyIGNvbGxlY3Rpb25zID0gW3RoaXNdLmNvbmNhdChhcmdzKS5tYXAoJEEpOworKyAgICBy
ZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24odmFsdWUsIGluZGV4KSB7CisrICAgICAgcmV0dXJuIGl0
ZXJhdG9yKGNvbGxlY3Rpb25zLnBsdWNrKGluZGV4KSk7CisrICAgIH0pOworKyAgfQorKworKyAg
ZnVuY3Rpb24gc2l6ZSgpIHsKKysgICAgcmV0dXJuIHRoaXMudG9BcnJheSgpLmxlbmd0aDsKKysg
IH0KKysKKysgIGZ1bmN0aW9uIGluc3BlY3QoKSB7CisrICAgIHJldHVybiAnIzxFbnVtZXJhYmxl
OicgKyB0aGlzLnRvQXJyYXkoKS5pbnNwZWN0KCkgKyAnPic7CisrICB9CisrCisrCisrCisrCisr
CisrCisrCisrCisrCisrICByZXR1cm4geworKyAgICBlYWNoOiAgICAgICBlYWNoLAorKyAgICBl
YWNoU2xpY2U6ICBlYWNoU2xpY2UsCisrICAgIGFsbDogICAgICAgIGFsbCwKKysgICAgZXZlcnk6
ICAgICAgYWxsLAorKyAgICBhbnk6ICAgICAgICBhbnksCisrICAgIHNvbWU6ICAgICAgIGFueSwK
KysgICAgY29sbGVjdDogICAgY29sbGVjdCwKKysgICAgbWFwOiAgICAgICAgY29sbGVjdCwKKysg
ICAgZGV0ZWN0OiAgICAgZGV0ZWN0LAorKyAgICBmaW5kQWxsOiAgICBmaW5kQWxsLAorKyAgICBz
ZWxlY3Q6ICAgICBmaW5kQWxsLAorKyAgICBmaWx0ZXI6ICAgICBmaW5kQWxsLAorKyAgICBncmVw
OiAgICAgICBncmVwLAorKyAgICBpbmNsdWRlOiAgICBpbmNsdWRlLAorKyAgICBtZW1iZXI6ICAg
ICBpbmNsdWRlLAorKyAgICBpbkdyb3Vwc09mOiBpbkdyb3Vwc09mLAorKyAgICBpbmplY3Q6ICAg
ICBpbmplY3QsCisrICAgIGludm9rZTogICAgIGludm9rZSwKKysgICAgbWF4OiAgICAgICAgbWF4
LAorKyAgICBtaW46ICAgICAgICBtaW4sCisrICAgIHBhcnRpdGlvbjogIHBhcnRpdGlvbiwKKysg
ICAgcGx1Y2s6ICAgICAgcGx1Y2ssCisrICAgIHJlamVjdDogICAgIHJlamVjdCwKKysgICAgc29y
dEJ5OiAgICAgc29ydEJ5LAorKyAgICB0b0FycmF5OiAgICB0b0FycmF5LAorKyAgICBlbnRyaWVz
OiAgICB0b0FycmF5LAorKyAgICB6aXA6ICAgICAgICB6aXAsCisrICAgIHNpemU6ICAgICAgIHNp
emUsCisrICAgIGluc3BlY3Q6ICAgIGluc3BlY3QsCisrICAgIGZpbmQ6ICAgICAgIGRldGVjdAor
KyAgfTsKKyt9KSgpOworKworK2Z1bmN0aW9uICRBKGl0ZXJhYmxlKSB7CisrICBpZiAoIWl0ZXJh
YmxlKSByZXR1cm4gW107CisrICBpZiAoJ3RvQXJyYXknIGluIE9iamVjdChpdGVyYWJsZSkpIHJl
dHVybiBpdGVyYWJsZS50b0FycmF5KCk7CisrICB2YXIgbGVuZ3RoID0gaXRlcmFibGUubGVuZ3Ro
IHx8IDAsIHJlc3VsdHMgPSBuZXcgQXJyYXkobGVuZ3RoKTsKKysgIHdoaWxlIChsZW5ndGgtLSkg
cmVzdWx0c1tsZW5ndGhdID0gaXRlcmFibGVbbGVuZ3RoXTsKKysgIHJldHVybiByZXN1bHRzOwor
K30KKysKKysKKytmdW5jdGlvbiAkdyhzdHJpbmcpIHsKKysgIGlmICghT2JqZWN0LmlzU3RyaW5n
KHN0cmluZykpIHJldHVybiBbXTsKKysgIHN0cmluZyA9IHN0cmluZy5zdHJpcCgpOworKyAgcmV0
dXJuIHN0cmluZyA/IHN0cmluZy5zcGxpdCgvXHMrLykgOiBbXTsKKyt9CisrCisrQXJyYXkuZnJv
bSA9ICRBOworKworKworKyhmdW5jdGlvbigpIHsKKysgIHZhciBhcnJheVByb3RvID0gQXJyYXku
cHJvdG90eXBlLAorKyAgICAgIHNsaWNlID0gYXJyYXlQcm90by5zbGljZSwKKysgICAgICBfZWFj
aCA9IGFycmF5UHJvdG8uZm9yRWFjaDsgLy8gdXNlIG5hdGl2ZSBicm93c2VyIEpTIDEuNiBpbXBs
ZW1lbnRhdGlvbiBpZiBhdmFpbGFibGUKKysKKysgIGZ1bmN0aW9uIGVhY2goaXRlcmF0b3IsIGNv
bnRleHQpIHsKKysgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IHRoaXMubGVuZ3RoID4+PiAw
OyBpIDwgbGVuZ3RoOyBpKyspIHsKKysgICAgICBpZiAoaSBpbiB0aGlzKSBpdGVyYXRvci5jYWxs
KGNvbnRleHQsIHRoaXNbaV0sIGksIHRoaXMpOworKyAgICB9CisrICB9CisrICBpZiAoIV9lYWNo
KSBfZWFjaCA9IGVhY2g7CisrCisrICBmdW5jdGlvbiBjbGVhcigpIHsKKysgICAgdGhpcy5sZW5n
dGggPSAwOworKyAgICByZXR1cm4gdGhpczsKKysgIH0KKysKKysgIGZ1bmN0aW9uIGZpcnN0KCkg
eworKyAgICByZXR1cm4gdGhpc1swXTsKKysgIH0KKysKKysgIGZ1bmN0aW9uIGxhc3QoKSB7Cisr
ICAgIHJldHVybiB0aGlzW3RoaXMubGVuZ3RoIC0gMV07CisrICB9CisrCisrICBmdW5jdGlvbiBj
b21wYWN0KCkgeworKyAgICByZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24odmFsdWUpIHsKKysg
ICAgICByZXR1cm4gdmFsdWUgIT0gbnVsbDsKKysgICAgfSk7CisrICB9CisrCisrICBmdW5jdGlv
biBmbGF0dGVuKCkgeworKyAgICByZXR1cm4gdGhpcy5pbmplY3QoW10sIGZ1bmN0aW9uKGFycmF5
LCB2YWx1ZSkgeworKyAgICAgIGlmIChPYmplY3QuaXNBcnJheSh2YWx1ZSkpCisrICAgICAgICBy
ZXR1cm4gYXJyYXkuY29uY2F0KHZhbHVlLmZsYXR0ZW4oKSk7CisrICAgICAgYXJyYXkucHVzaCh2
YWx1ZSk7CisrICAgICAgcmV0dXJuIGFycmF5OworKyAgICB9KTsKKysgIH0KKysKKysgIGZ1bmN0
aW9uIHdpdGhvdXQoKSB7CisrICAgIHZhciB2YWx1ZXMgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywg
MCk7CisrICAgIHJldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbih2YWx1ZSkgeworKyAgICAgIHJl
dHVybiAhdmFsdWVzLmluY2x1ZGUodmFsdWUpOworKyAgICB9KTsKKysgIH0KKysKKysgIGZ1bmN0
aW9uIHJldmVyc2UoaW5saW5lKSB7CisrICAgIHJldHVybiAoaW5saW5lID09PSBmYWxzZSA/IHRo
aXMudG9BcnJheSgpIDogdGhpcykuX3JldmVyc2UoKTsKKysgIH0KKysKKysgIGZ1bmN0aW9uIHVu
aXEoc29ydGVkKSB7CisrICAgIHJldHVybiB0aGlzLmluamVjdChbXSwgZnVuY3Rpb24oYXJyYXks
IHZhbHVlLCBpbmRleCkgeworKyAgICAgIGlmICgwID09IGluZGV4IHx8IChzb3J0ZWQgPyBhcnJh
eS5sYXN0KCkgIT0gdmFsdWUgOiAhYXJyYXkuaW5jbHVkZSh2YWx1ZSkpKQorKyAgICAgICAgYXJy
YXkucHVzaCh2YWx1ZSk7CisrICAgICAgcmV0dXJuIGFycmF5OworKyAgICB9KTsKKysgIH0KKysK
KysgIGZ1bmN0aW9uIGludGVyc2VjdChhcnJheSkgeworKyAgICByZXR1cm4gdGhpcy51bmlxKCku
ZmluZEFsbChmdW5jdGlvbihpdGVtKSB7CisrICAgICAgcmV0dXJuIGFycmF5LmRldGVjdChmdW5j
dGlvbih2YWx1ZSkgeyByZXR1cm4gaXRlbSA9PT0gdmFsdWUgfSk7CisrICAgIH0pOworKyAgfQor
KworKworKyAgZnVuY3Rpb24gY2xvbmUoKSB7CisrICAgIHJldHVybiBzbGljZS5jYWxsKHRoaXMs
IDApOworKyAgfQorKworKyAgZnVuY3Rpb24gc2l6ZSgpIHsKKysgICAgcmV0dXJuIHRoaXMubGVu
Z3RoOworKyAgfQorKworKyAgZnVuY3Rpb24gaW5zcGVjdCgpIHsKKysgICAgcmV0dXJuICdbJyAr
IHRoaXMubWFwKE9iamVjdC5pbnNwZWN0KS5qb2luKCcsICcpICsgJ10nOworKyAgfQorKworKyAg
ZnVuY3Rpb24gaW5kZXhPZihpdGVtLCBpKSB7CisrICAgIGkgfHwgKGkgPSAwKTsKKysgICAgdmFy
IGxlbmd0aCA9IHRoaXMubGVuZ3RoOworKyAgICBpZiAoaSA8IDApIGkgPSBsZW5ndGggKyBpOwor
KyAgICBmb3IgKDsgaSA8IGxlbmd0aDsgaSsrKQorKyAgICAgIGlmICh0aGlzW2ldID09PSBpdGVt
KSByZXR1cm4gaTsKKysgICAgcmV0dXJuIC0xOworKyAgfQorKworKyAgZnVuY3Rpb24gbGFzdElu
ZGV4T2YoaXRlbSwgaSkgeworKyAgICBpID0gaXNOYU4oaSkgPyB0aGlzLmxlbmd0aCA6IChpIDwg
MCA/IHRoaXMubGVuZ3RoICsgaSA6IGkpICsgMTsKKysgICAgdmFyIG4gPSB0aGlzLnNsaWNlKDAs
IGkpLnJldmVyc2UoKS5pbmRleE9mKGl0ZW0pOworKyAgICByZXR1cm4gKG4gPCAwKSA/IG4gOiBp
IC0gbiAtIDE7CisrICB9CisrCisrICBmdW5jdGlvbiBjb25jYXQoKSB7CisrICAgIHZhciBhcnJh
eSA9IHNsaWNlLmNhbGwodGhpcywgMCksIGl0ZW07CisrICAgIGZvciAodmFyIGkgPSAwLCBsZW5n
dGggPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHsKKysgICAgICBpdGVtID0g
YXJndW1lbnRzW2ldOworKyAgICAgIGlmIChPYmplY3QuaXNBcnJheShpdGVtKSAmJiAhKCdjYWxs
ZWUnIGluIGl0ZW0pKSB7CisrICAgICAgICBmb3IgKHZhciBqID0gMCwgYXJyYXlMZW5ndGggPSBp
dGVtLmxlbmd0aDsgaiA8IGFycmF5TGVuZ3RoOyBqKyspCisrICAgICAgICAgIGFycmF5LnB1c2go
aXRlbVtqXSk7CisrICAgICAgfSBlbHNlIHsKKysgICAgICAgIGFycmF5LnB1c2goaXRlbSk7Cisr
ICAgICAgfQorKyAgICB9CisrICAgIHJldHVybiBhcnJheTsKKysgIH0KKysKKysgIE9iamVjdC5l
eHRlbmQoYXJyYXlQcm90bywgRW51bWVyYWJsZSk7CisrCisrICBpZiAoIWFycmF5UHJvdG8uX3Jl
dmVyc2UpCisrICAgIGFycmF5UHJvdG8uX3JldmVyc2UgPSBhcnJheVByb3RvLnJldmVyc2U7Cisr
CisrICBPYmplY3QuZXh0ZW5kKGFycmF5UHJvdG8sIHsKKysgICAgX2VhY2g6ICAgICBfZWFjaCwK
KysgICAgY2xlYXI6ICAgICBjbGVhciwKKysgICAgZmlyc3Q6ICAgICBmaXJzdCwKKysgICAgbGFz
dDogICAgICBsYXN0LAorKyAgICBjb21wYWN0OiAgIGNvbXBhY3QsCisrICAgIGZsYXR0ZW46ICAg
ZmxhdHRlbiwKKysgICAgd2l0aG91dDogICB3aXRob3V0LAorKyAgICByZXZlcnNlOiAgIHJldmVy
c2UsCisrICAgIHVuaXE6ICAgICAgdW5pcSwKKysgICAgaW50ZXJzZWN0OiBpbnRlcnNlY3QsCisr
ICAgIGNsb25lOiAgICAgY2xvbmUsCisrICAgIHRvQXJyYXk6ICAgY2xvbmUsCisrICAgIHNpemU6
ICAgICAgc2l6ZSwKKysgICAgaW5zcGVjdDogICBpbnNwZWN0CisrICB9KTsKKysKKysgIHZhciBD
T05DQVRfQVJHVU1FTlRTX0JVR0dZID0gKGZ1bmN0aW9uKCkgeworKyAgICByZXR1cm4gW10uY29u
Y2F0KGFyZ3VtZW50cylbMF1bMF0gIT09IDE7CisrICB9KSgxLDIpCisrCisrICBpZiAoQ09OQ0FU
X0FSR1VNRU5UU19CVUdHWSkgYXJyYXlQcm90by5jb25jYXQgPSBjb25jYXQ7CisrCisrICBpZiAo
IWFycmF5UHJvdG8uaW5kZXhPZikgYXJyYXlQcm90by5pbmRleE9mID0gaW5kZXhPZjsKKysgIGlm
ICghYXJyYXlQcm90by5sYXN0SW5kZXhPZikgYXJyYXlQcm90by5sYXN0SW5kZXhPZiA9IGxhc3RJ
bmRleE9mOworK30pKCk7CisrZnVuY3Rpb24gJEgob2JqZWN0KSB7CisrICByZXR1cm4gbmV3IEhh
c2gob2JqZWN0KTsKKyt9OworKworK3ZhciBIYXNoID0gQ2xhc3MuY3JlYXRlKEVudW1lcmFibGUs
IChmdW5jdGlvbigpIHsKKysgIGZ1bmN0aW9uIGluaXRpYWxpemUob2JqZWN0KSB7CisrICAgIHRo
aXMuX29iamVjdCA9IE9iamVjdC5pc0hhc2gob2JqZWN0KSA/IG9iamVjdC50b09iamVjdCgpIDog
T2JqZWN0LmNsb25lKG9iamVjdCk7CisrICB9CisrCisrCisrICBmdW5jdGlvbiBfZWFjaChpdGVy
YXRvcikgeworKyAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5fb2JqZWN0KSB7CisrICAgICAgdmFy
IHZhbHVlID0gdGhpcy5fb2JqZWN0W2tleV0sIHBhaXIgPSBba2V5LCB2YWx1ZV07CisrICAgICAg
cGFpci5rZXkgPSBrZXk7CisrICAgICAgcGFpci52YWx1ZSA9IHZhbHVlOworKyAgICAgIGl0ZXJh
dG9yKHBhaXIpOworKyAgICB9CisrICB9CisrCisrICBmdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSkg
eworKyAgICByZXR1cm4gdGhpcy5fb2JqZWN0W2tleV0gPSB2YWx1ZTsKKysgIH0KKysKKysgIGZ1
bmN0aW9uIGdldChrZXkpIHsKKysgICAgaWYgKHRoaXMuX29iamVjdFtrZXldICE9PSBPYmplY3Qu
cHJvdG90eXBlW2tleV0pCisrICAgICAgcmV0dXJuIHRoaXMuX29iamVjdFtrZXldOworKyAgfQor
KworKyAgZnVuY3Rpb24gdW5zZXQoa2V5KSB7CisrICAgIHZhciB2YWx1ZSA9IHRoaXMuX29iamVj
dFtrZXldOworKyAgICBkZWxldGUgdGhpcy5fb2JqZWN0W2tleV07CisrICAgIHJldHVybiB2YWx1
ZTsKKysgIH0KKysKKysgIGZ1bmN0aW9uIHRvT2JqZWN0KCkgeworKyAgICByZXR1cm4gT2JqZWN0
LmNsb25lKHRoaXMuX29iamVjdCk7CisrICB9CisrCisrCisrCisrICBmdW5jdGlvbiBrZXlzKCkg
eworKyAgICByZXR1cm4gdGhpcy5wbHVjaygna2V5Jyk7CisrICB9CisrCisrICBmdW5jdGlvbiB2
YWx1ZXMoKSB7CisrICAgIHJldHVybiB0aGlzLnBsdWNrKCd2YWx1ZScpOworKyAgfQorKworKyAg
ZnVuY3Rpb24gaW5kZXgodmFsdWUpIHsKKysgICAgdmFyIG1hdGNoID0gdGhpcy5kZXRlY3QoZnVu
Y3Rpb24ocGFpcikgeworKyAgICAgIHJldHVybiBwYWlyLnZhbHVlID09PSB2YWx1ZTsKKysgICAg
fSk7CisrICAgIHJldHVybiBtYXRjaCAmJiBtYXRjaC5rZXk7CisrICB9CisrCisrICBmdW5jdGlv
biBtZXJnZShvYmplY3QpIHsKKysgICAgcmV0dXJuIHRoaXMuY2xvbmUoKS51cGRhdGUob2JqZWN0
KTsKKysgIH0KKysKKysgIGZ1bmN0aW9uIHVwZGF0ZShvYmplY3QpIHsKKysgICAgcmV0dXJuIG5l
dyBIYXNoKG9iamVjdCkuaW5qZWN0KHRoaXMsIGZ1bmN0aW9uKHJlc3VsdCwgcGFpcikgeworKyAg
ICAgIHJlc3VsdC5zZXQocGFpci5rZXksIHBhaXIudmFsdWUpOworKyAgICAgIHJldHVybiByZXN1
bHQ7CisrICAgIH0pOworKyAgfQorKworKyAgZnVuY3Rpb24gdG9RdWVyeVBhaXIoa2V5LCB2YWx1
ZSkgeworKyAgICBpZiAoT2JqZWN0LmlzVW5kZWZpbmVkKHZhbHVlKSkgcmV0dXJuIGtleTsKKysg
ICAgcmV0dXJuIGtleSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudChTdHJpbmcuaW50ZXJwcmV0
KHZhbHVlKSk7CisrICB9CisrCisrICBmdW5jdGlvbiB0b1F1ZXJ5U3RyaW5nKCkgeworKyAgICBy
ZXR1cm4gdGhpcy5pbmplY3QoW10sIGZ1bmN0aW9uKHJlc3VsdHMsIHBhaXIpIHsKKysgICAgICB2
YXIga2V5ID0gZW5jb2RlVVJJQ29tcG9uZW50KHBhaXIua2V5KSwgdmFsdWVzID0gcGFpci52YWx1
ZTsKKysKKysgICAgICBpZiAodmFsdWVzICYmIHR5cGVvZiB2YWx1ZXMgPT0gJ29iamVjdCcpIHsK
KysgICAgICAgIGlmIChPYmplY3QuaXNBcnJheSh2YWx1ZXMpKSB7CisrICAgICAgICAgIHZhciBx
dWVyeVZhbHVlcyA9IFtdOworKyAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gdmFsdWVz
Lmxlbmd0aCwgdmFsdWU7IGkgPCBsZW47IGkrKykgeworKyAgICAgICAgICAgIHZhbHVlID0gdmFs
dWVzW2ldOworKyAgICAgICAgICAgIHF1ZXJ5VmFsdWVzLnB1c2godG9RdWVyeVBhaXIoa2V5LCB2
YWx1ZSkpOworKyAgICAgICAgICB9CisrICAgICAgICAgIHJldHVybiByZXN1bHRzLmNvbmNhdChx
dWVyeVZhbHVlcyk7CisrICAgICAgICB9CisrICAgICAgfSBlbHNlIHJlc3VsdHMucHVzaCh0b1F1
ZXJ5UGFpcihrZXksIHZhbHVlcykpOworKyAgICAgIHJldHVybiByZXN1bHRzOworKyAgICB9KS5q
b2luKCcmJyk7CisrICB9CisrCisrICBmdW5jdGlvbiBpbnNwZWN0KCkgeworKyAgICByZXR1cm4g
JyM8SGFzaDp7JyArIHRoaXMubWFwKGZ1bmN0aW9uKHBhaXIpIHsKKysgICAgICByZXR1cm4gcGFp
ci5tYXAoT2JqZWN0Lmluc3BlY3QpLmpvaW4oJzogJyk7CisrICAgIH0pLmpvaW4oJywgJykgKyAn
fT4nOworKyAgfQorKworKyAgZnVuY3Rpb24gY2xvbmUoKSB7CisrICAgIHJldHVybiBuZXcgSGFz
aCh0aGlzKTsKKysgIH0KKysKKysgIHJldHVybiB7CisrICAgIGluaXRpYWxpemU6ICAgICAgICAg
ICAgIGluaXRpYWxpemUsCisrICAgIF9lYWNoOiAgICAgICAgICAgICAgICAgIF9lYWNoLAorKyAg
ICBzZXQ6ICAgICAgICAgICAgICAgICAgICBzZXQsCisrICAgIGdldDogICAgICAgICAgICAgICAg
ICAgIGdldCwKKysgICAgdW5zZXQ6ICAgICAgICAgICAgICAgICAgdW5zZXQsCisrICAgIHRvT2Jq
ZWN0OiAgICAgICAgICAgICAgIHRvT2JqZWN0LAorKyAgICB0b1RlbXBsYXRlUmVwbGFjZW1lbnRz
OiB0b09iamVjdCwKKysgICAga2V5czogICAgICAgICAgICAgICAgICAga2V5cywKKysgICAgdmFs
dWVzOiAgICAgICAgICAgICAgICAgdmFsdWVzLAorKyAgICBpbmRleDogICAgICAgICAgICAgICAg
ICBpbmRleCwKKysgICAgbWVyZ2U6ICAgICAgICAgICAgICAgICAgbWVyZ2UsCisrICAgIHVwZGF0
ZTogICAgICAgICAgICAgICAgIHVwZGF0ZSwKKysgICAgdG9RdWVyeVN0cmluZzogICAgICAgICAg
dG9RdWVyeVN0cmluZywKKysgICAgaW5zcGVjdDogICAgICAgICAgICAgICAgaW5zcGVjdCwKKysg
ICAgdG9KU09OOiAgICAgICAgICAgICAgICAgdG9PYmplY3QsCisrICAgIGNsb25lOiAgICAgICAg
ICAgICAgICAgIGNsb25lCisrICB9OworK30pKCkpOworKworK0hhc2guZnJvbSA9ICRIOworK09i
amVjdC5leHRlbmQoTnVtYmVyLnByb3RvdHlwZSwgKGZ1bmN0aW9uKCkgeworKyAgZnVuY3Rpb24g
dG9Db2xvclBhcnQoKSB7CisrICAgIHJldHVybiB0aGlzLnRvUGFkZGVkU3RyaW5nKDIsIDE2KTsK
KysgIH0KKysKKysgIGZ1bmN0aW9uIHN1Y2MoKSB7CisrICAgIHJldHVybiB0aGlzICsgMTsKKysg
IH0KKysKKysgIGZ1bmN0aW9uIHRpbWVzKGl0ZXJhdG9yLCBjb250ZXh0KSB7CisrICAgICRSKDAs
IHRoaXMsIHRydWUpLmVhY2goaXRlcmF0b3IsIGNvbnRleHQpOworKyAgICByZXR1cm4gdGhpczsK
KysgIH0KKysKKysgIGZ1bmN0aW9uIHRvUGFkZGVkU3RyaW5nKGxlbmd0aCwgcmFkaXgpIHsKKysg
ICAgdmFyIHN0cmluZyA9IHRoaXMudG9TdHJpbmcocmFkaXggfHwgMTApOworKyAgICByZXR1cm4g
JzAnLnRpbWVzKGxlbmd0aCAtIHN0cmluZy5sZW5ndGgpICsgc3RyaW5nOworKyAgfQorKworKyAg
ZnVuY3Rpb24gYWJzKCkgeworKyAgICByZXR1cm4gTWF0aC5hYnModGhpcyk7CisrICB9CisrCisr
ICBmdW5jdGlvbiByb3VuZCgpIHsKKysgICAgcmV0dXJuIE1hdGgucm91bmQodGhpcyk7CisrICB9
CisrCisrICBmdW5jdGlvbiBjZWlsKCkgeworKyAgICByZXR1cm4gTWF0aC5jZWlsKHRoaXMpOwor
KyAgfQorKworKyAgZnVuY3Rpb24gZmxvb3IoKSB7CisrICAgIHJldHVybiBNYXRoLmZsb29yKHRo
aXMpOworKyAgfQorKworKyAgcmV0dXJuIHsKKysgICAgdG9Db2xvclBhcnQ6ICAgIHRvQ29sb3JQ
YXJ0LAorKyAgICBzdWNjOiAgICAgICAgICAgc3VjYywKKysgICAgdGltZXM6ICAgICAgICAgIHRp
bWVzLAorKyAgICB0b1BhZGRlZFN0cmluZzogdG9QYWRkZWRTdHJpbmcsCisrICAgIGFiczogICAg
ICAgICAgICBhYnMsCisrICAgIHJvdW5kOiAgICAgICAgICByb3VuZCwKKysgICAgY2VpbDogICAg
ICAgICAgIGNlaWwsCisrICAgIGZsb29yOiAgICAgICAgICBmbG9vcgorKyAgfTsKKyt9KSgpKTsK
KysKKytmdW5jdGlvbiAkUihzdGFydCwgZW5kLCBleGNsdXNpdmUpIHsKKysgIHJldHVybiBuZXcg
T2JqZWN0UmFuZ2Uoc3RhcnQsIGVuZCwgZXhjbHVzaXZlKTsKKyt9CisrCisrdmFyIE9iamVjdFJh
bmdlID0gQ2xhc3MuY3JlYXRlKEVudW1lcmFibGUsIChmdW5jdGlvbigpIHsKKysgIGZ1bmN0aW9u
IGluaXRpYWxpemUoc3RhcnQsIGVuZCwgZXhjbHVzaXZlKSB7CisrICAgIHRoaXMuc3RhcnQgPSBz
dGFydDsKKysgICAgdGhpcy5lbmQgPSBlbmQ7CisrICAgIHRoaXMuZXhjbHVzaXZlID0gZXhjbHVz
aXZlOworKyAgfQorKworKyAgZnVuY3Rpb24gX2VhY2goaXRlcmF0b3IpIHsKKysgICAgdmFyIHZh
bHVlID0gdGhpcy5zdGFydDsKKysgICAgd2hpbGUgKHRoaXMuaW5jbHVkZSh2YWx1ZSkpIHsKKysg
ICAgICBpdGVyYXRvcih2YWx1ZSk7CisrICAgICAgdmFsdWUgPSB2YWx1ZS5zdWNjKCk7CisrICAg
IH0KKysgIH0KKysKKysgIGZ1bmN0aW9uIGluY2x1ZGUodmFsdWUpIHsKKysgICAgaWYgKHZhbHVl
IDwgdGhpcy5zdGFydCkKKysgICAgICByZXR1cm4gZmFsc2U7CisrICAgIGlmICh0aGlzLmV4Y2x1
c2l2ZSkKKysgICAgICByZXR1cm4gdmFsdWUgPCB0aGlzLmVuZDsKKysgICAgcmV0dXJuIHZhbHVl
IDw9IHRoaXMuZW5kOworKyAgfQorKworKyAgcmV0dXJuIHsKKysgICAgaW5pdGlhbGl6ZTogaW5p
dGlhbGl6ZSwKKysgICAgX2VhY2g6ICAgICAgX2VhY2gsCisrICAgIGluY2x1ZGU6ICAgIGluY2x1
ZGUKKysgIH07CisrfSkoKSk7CisrCisrCisrCisrdmFyIEFqYXggPSB7CisrICBnZXRUcmFuc3Bv
cnQ6IGZ1bmN0aW9uKCkgeworKyAgICByZXR1cm4gVHJ5LnRoZXNlKAorKyAgICAgIGZ1bmN0aW9u
KCkge3JldHVybiBuZXcgWE1MSHR0cFJlcXVlc3QoKX0sCisrICAgICAgZnVuY3Rpb24oKSB7cmV0
dXJuIG5ldyBBY3RpdmVYT2JqZWN0KCdNc3htbDIuWE1MSFRUUCcpfSwKKysgICAgICBmdW5jdGlv
bigpIHtyZXR1cm4gbmV3IEFjdGl2ZVhPYmplY3QoJ01pY3Jvc29mdC5YTUxIVFRQJyl9CisrICAg
ICkgfHwgZmFsc2U7CisrICB9LAorKworKyAgYWN0aXZlUmVxdWVzdENvdW50OiAwCisrfTsKKysK
KytBamF4LlJlc3BvbmRlcnMgPSB7CisrICByZXNwb25kZXJzOiBbXSwKKysKKysgIF9lYWNoOiBm
dW5jdGlvbihpdGVyYXRvcikgeworKyAgICB0aGlzLnJlc3BvbmRlcnMuX2VhY2goaXRlcmF0b3Ip
OworKyAgfSwKKysKKysgIHJlZ2lzdGVyOiBmdW5jdGlvbihyZXNwb25kZXIpIHsKKysgICAgaWYg
KCF0aGlzLmluY2x1ZGUocmVzcG9uZGVyKSkKKysgICAgICB0aGlzLnJlc3BvbmRlcnMucHVzaChy
ZXNwb25kZXIpOworKyAgfSwKKysKKysgIHVucmVnaXN0ZXI6IGZ1bmN0aW9uKHJlc3BvbmRlcikg
eworKyAgICB0aGlzLnJlc3BvbmRlcnMgPSB0aGlzLnJlc3BvbmRlcnMud2l0aG91dChyZXNwb25k
ZXIpOworKyAgfSwKKysKKysgIGRpc3BhdGNoOiBmdW5jdGlvbihjYWxsYmFjaywgcmVxdWVzdCwg
dHJhbnNwb3J0LCBqc29uKSB7CisrICAgIHRoaXMuZWFjaChmdW5jdGlvbihyZXNwb25kZXIpIHsK
KysgICAgICBpZiAoT2JqZWN0LmlzRnVuY3Rpb24ocmVzcG9uZGVyW2NhbGxiYWNrXSkpIHsKKysg
ICAgICAgIHRyeSB7CisrICAgICAgICAgIHJlc3BvbmRlcltjYWxsYmFja10uYXBwbHkocmVzcG9u
ZGVyLCBbcmVxdWVzdCwgdHJhbnNwb3J0LCBqc29uXSk7CisrICAgICAgICB9IGNhdGNoIChlKSB7
IH0KKysgICAgICB9CisrICAgIH0pOworKyAgfQorK307CisrCisrT2JqZWN0LmV4dGVuZChBamF4
LlJlc3BvbmRlcnMsIEVudW1lcmFibGUpOworKworK0FqYXguUmVzcG9uZGVycy5yZWdpc3Rlcih7
CisrICBvbkNyZWF0ZTogICBmdW5jdGlvbigpIHsgQWpheC5hY3RpdmVSZXF1ZXN0Q291bnQrKyB9
LAorKyAgb25Db21wbGV0ZTogZnVuY3Rpb24oKSB7IEFqYXguYWN0aXZlUmVxdWVzdENvdW50LS0g
fQorK30pOworK0FqYXguQmFzZSA9IENsYXNzLmNyZWF0ZSh7CisrICBpbml0aWFsaXplOiBmdW5j
dGlvbihvcHRpb25zKSB7CisrICAgIHRoaXMub3B0aW9ucyA9IHsKKysgICAgICBtZXRob2Q6ICAg
ICAgICdwb3N0JywKKysgICAgICBhc3luY2hyb25vdXM6IHRydWUsCisrICAgICAgY29udGVudFR5
cGU6ICAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJywKKysgICAgICBlbmNvZGlu
ZzogICAgICdVVEYtOCcsCisrICAgICAgcGFyYW1ldGVyczogICAnJywKKysgICAgICBldmFsSlNP
TjogICAgIHRydWUsCisrICAgICAgZXZhbEpTOiAgICAgICB0cnVlCisrICAgIH07CisrICAgIE9i
amVjdC5leHRlbmQodGhpcy5vcHRpb25zLCBvcHRpb25zIHx8IHsgfSk7CisrCisrICAgIHRoaXMu
b3B0aW9ucy5tZXRob2QgPSB0aGlzLm9wdGlvbnMubWV0aG9kLnRvTG93ZXJDYXNlKCk7CisrCisr
ICAgIGlmIChPYmplY3QuaXNIYXNoKHRoaXMub3B0aW9ucy5wYXJhbWV0ZXJzKSkKKysgICAgICB0
aGlzLm9wdGlvbnMucGFyYW1ldGVycyA9IHRoaXMub3B0aW9ucy5wYXJhbWV0ZXJzLnRvT2JqZWN0
KCk7CisrICB9CisrfSk7CisrQWpheC5SZXF1ZXN0ID0gQ2xhc3MuY3JlYXRlKEFqYXguQmFzZSwg
eworKyAgX2NvbXBsZXRlOiBmYWxzZSwKKysKKysgIGluaXRpYWxpemU6IGZ1bmN0aW9uKCRzdXBl
ciwgdXJsLCBvcHRpb25zKSB7CisrICAgICRzdXBlcihvcHRpb25zKTsKKysgICAgdGhpcy50cmFu
c3BvcnQgPSBBamF4LmdldFRyYW5zcG9ydCgpOworKyAgICB0aGlzLnJlcXVlc3QodXJsKTsKKysg
IH0sCisrCisrICByZXF1ZXN0OiBmdW5jdGlvbih1cmwpIHsKKysgICAgdGhpcy51cmwgPSB1cmw7
CisrICAgIHRoaXMubWV0aG9kID0gdGhpcy5vcHRpb25zLm1ldGhvZDsKKysgICAgdmFyIHBhcmFt
cyA9IE9iamVjdC5pc1N0cmluZyh0aGlzLm9wdGlvbnMucGFyYW1ldGVycykgPworKyAgICAgICAg
ICB0aGlzLm9wdGlvbnMucGFyYW1ldGVycyA6CisrICAgICAgICAgIE9iamVjdC50b1F1ZXJ5U3Ry
aW5nKHRoaXMub3B0aW9ucy5wYXJhbWV0ZXJzKTsKKysKKysgICAgaWYgKCFbJ2dldCcsICdwb3N0
J10uaW5jbHVkZSh0aGlzLm1ldGhvZCkpIHsKKysgICAgICBwYXJhbXMgKz0gKHBhcmFtcyA/ICcm
JyA6ICcnKSArICJfbWV0aG9kPSIgKyB0aGlzLm1ldGhvZDsKKysgICAgICB0aGlzLm1ldGhvZCA9
ICdwb3N0JzsKKysgICAgfQorKworKyAgICBpZiAocGFyYW1zICYmIHRoaXMubWV0aG9kID09PSAn
Z2V0JykgeworKyAgICAgIHRoaXMudXJsICs9ICh0aGlzLnVybC5pbmNsdWRlKCc/JykgPyAnJicg
OiAnPycpICsgcGFyYW1zOworKyAgICB9CisrCisrICAgIHRoaXMucGFyYW1ldGVycyA9IHBhcmFt
cy50b1F1ZXJ5UGFyYW1zKCk7CisrCisrICAgIHRyeSB7CisrICAgICAgdmFyIHJlc3BvbnNlID0g
bmV3IEFqYXguUmVzcG9uc2UodGhpcyk7CisrICAgICAgaWYgKHRoaXMub3B0aW9ucy5vbkNyZWF0
ZSkgdGhpcy5vcHRpb25zLm9uQ3JlYXRlKHJlc3BvbnNlKTsKKysgICAgICBBamF4LlJlc3BvbmRl
cnMuZGlzcGF0Y2goJ29uQ3JlYXRlJywgdGhpcywgcmVzcG9uc2UpOworKworKyAgICAgIHRoaXMu
dHJhbnNwb3J0Lm9wZW4odGhpcy5tZXRob2QudG9VcHBlckNhc2UoKSwgdGhpcy51cmwsCisrICAg
ICAgICB0aGlzLm9wdGlvbnMuYXN5bmNocm9ub3VzKTsKKysKKysgICAgICBpZiAodGhpcy5vcHRp
b25zLmFzeW5jaHJvbm91cykgdGhpcy5yZXNwb25kVG9SZWFkeVN0YXRlLmJpbmQodGhpcykuZGVm
ZXIoMSk7CisrCisrICAgICAgdGhpcy50cmFuc3BvcnQub25yZWFkeXN0YXRlY2hhbmdlID0gdGhp
cy5vblN0YXRlQ2hhbmdlLmJpbmQodGhpcyk7CisrICAgICAgdGhpcy5zZXRSZXF1ZXN0SGVhZGVy
cygpOworKworKyAgICAgIHRoaXMuYm9keSA9IHRoaXMubWV0aG9kID09ICdwb3N0JyA/ICh0aGlz
Lm9wdGlvbnMucG9zdEJvZHkgfHwgcGFyYW1zKSA6IG51bGw7CisrICAgICAgdGhpcy50cmFuc3Bv
cnQuc2VuZCh0aGlzLmJvZHkpOworKworKyAgICAgIC8qIEZvcmNlIEZpcmVmb3ggdG8gaGFuZGxl
IHJlYWR5IHN0YXRlIDQgZm9yIHN5bmNocm9ub3VzIHJlcXVlc3RzICovCisrICAgICAgaWYgKCF0
aGlzLm9wdGlvbnMuYXN5bmNocm9ub3VzICYmIHRoaXMudHJhbnNwb3J0Lm92ZXJyaWRlTWltZVR5
cGUpCisrICAgICAgICB0aGlzLm9uU3RhdGVDaGFuZ2UoKTsKKysKKysgICAgfQorKyAgICBjYXRj
aCAoZSkgeworKyAgICAgIHRoaXMuZGlzcGF0Y2hFeGNlcHRpb24oZSk7CisrICAgIH0KKysgIH0s
CisrCisrICBvblN0YXRlQ2hhbmdlOiBmdW5jdGlvbigpIHsKKysgICAgdmFyIHJlYWR5U3RhdGUg
PSB0aGlzLnRyYW5zcG9ydC5yZWFkeVN0YXRlOworKyAgICBpZiAocmVhZHlTdGF0ZSA+IDEgJiYg
ISgocmVhZHlTdGF0ZSA9PSA0KSAmJiB0aGlzLl9jb21wbGV0ZSkpCisrICAgICAgdGhpcy5yZXNw
b25kVG9SZWFkeVN0YXRlKHRoaXMudHJhbnNwb3J0LnJlYWR5U3RhdGUpOworKyAgfSwKKysKKysg
IHNldFJlcXVlc3RIZWFkZXJzOiBmdW5jdGlvbigpIHsKKysgICAgdmFyIGhlYWRlcnMgPSB7Cisr
ICAgICAgJ1gtUmVxdWVzdGVkLVdpdGgnOiAnWE1MSHR0cFJlcXVlc3QnLAorKyAgICAgICdYLVBy
b3RvdHlwZS1WZXJzaW9uJzogUHJvdG90eXBlLlZlcnNpb24sCisrICAgICAgJ0FjY2VwdCc6ICd0
ZXh0L2phdmFzY3JpcHQsIHRleHQvaHRtbCwgYXBwbGljYXRpb24veG1sLCB0ZXh0L3htbCwgKi8q
JworKyAgICB9OworKworKyAgICBpZiAodGhpcy5tZXRob2QgPT0gJ3Bvc3QnKSB7CisrICAgICAg
aGVhZGVyc1snQ29udGVudC10eXBlJ10gPSB0aGlzLm9wdGlvbnMuY29udGVudFR5cGUgKworKyAg
ICAgICAgKHRoaXMub3B0aW9ucy5lbmNvZGluZyA/ICc7IGNoYXJzZXQ9JyArIHRoaXMub3B0aW9u
cy5lbmNvZGluZyA6ICcnKTsKKysKKysgICAgICAvKiBGb3JjZSAiQ29ubmVjdGlvbjogY2xvc2Ui
IGZvciBvbGRlciBNb3ppbGxhIGJyb3dzZXJzIHRvIHdvcmsKKysgICAgICAgKiBhcm91bmQgYSBi
dWcgd2hlcmUgWE1MSHR0cFJlcXVlc3Qgc2VuZHMgYW4gaW5jb3JyZWN0CisrICAgICAgICogQ29u
dGVudC1sZW5ndGggaGVhZGVyLiBTZWUgTW96aWxsYSBCdWd6aWxsYSAjMjQ2NjUxLgorKyAgICAg
ICAqLworKyAgICAgIGlmICh0aGlzLnRyYW5zcG9ydC5vdmVycmlkZU1pbWVUeXBlICYmCisrICAg
ICAgICAgIChuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9HZWNrb1wvKFxkezR9KS8pIHx8IFsw
LDIwMDVdKVsxXSA8IDIwMDUpCisrICAgICAgICAgICAgaGVhZGVyc1snQ29ubmVjdGlvbiddID0g
J2Nsb3NlJzsKKysgICAgfQorKworKyAgICBpZiAodHlwZW9mIHRoaXMub3B0aW9ucy5yZXF1ZXN0
SGVhZGVycyA9PSAnb2JqZWN0JykgeworKyAgICAgIHZhciBleHRyYXMgPSB0aGlzLm9wdGlvbnMu
cmVxdWVzdEhlYWRlcnM7CisrCisrICAgICAgaWYgKE9iamVjdC5pc0Z1bmN0aW9uKGV4dHJhcy5w
dXNoKSkKKysgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBleHRyYXMubGVuZ3RoOyBp
IDwgbGVuZ3RoOyBpICs9IDIpCisrICAgICAgICAgIGhlYWRlcnNbZXh0cmFzW2ldXSA9IGV4dHJh
c1tpKzFdOworKyAgICAgIGVsc2UKKysgICAgICAgICRIKGV4dHJhcykuZWFjaChmdW5jdGlvbihw
YWlyKSB7IGhlYWRlcnNbcGFpci5rZXldID0gcGFpci52YWx1ZSB9KTsKKysgICAgfQorKworKyAg
ICBmb3IgKHZhciBuYW1lIGluIGhlYWRlcnMpCisrICAgICAgdGhpcy50cmFuc3BvcnQuc2V0UmVx
dWVzdEhlYWRlcihuYW1lLCBoZWFkZXJzW25hbWVdKTsKKysgIH0sCisrCisrICBzdWNjZXNzOiBm
dW5jdGlvbigpIHsKKysgICAgdmFyIHN0YXR1cyA9IHRoaXMuZ2V0U3RhdHVzKCk7CisrICAgIHJl
dHVybiAhc3RhdHVzIHx8IChzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMCkgfHwgc3RhdHVz
ID09IDMwNDsKKysgIH0sCisrCisrICBnZXRTdGF0dXM6IGZ1bmN0aW9uKCkgeworKyAgICB0cnkg
eworKyAgICAgIGlmICh0aGlzLnRyYW5zcG9ydC5zdGF0dXMgPT09IDEyMjMpIHJldHVybiAyMDQ7
CisrICAgICAgcmV0dXJuIHRoaXMudHJhbnNwb3J0LnN0YXR1cyB8fCAwOworKyAgICB9IGNhdGNo
IChlKSB7IHJldHVybiAwIH0KKysgIH0sCisrCisrICByZXNwb25kVG9SZWFkeVN0YXRlOiBmdW5j
dGlvbihyZWFkeVN0YXRlKSB7CisrICAgIHZhciBzdGF0ZSA9IEFqYXguUmVxdWVzdC5FdmVudHNb
cmVhZHlTdGF0ZV0sIHJlc3BvbnNlID0gbmV3IEFqYXguUmVzcG9uc2UodGhpcyk7CisrCisrICAg
IGlmIChzdGF0ZSA9PSAnQ29tcGxldGUnKSB7CisrICAgICAgdHJ5IHsKKysgICAgICAgIHRoaXMu
X2NvbXBsZXRlID0gdHJ1ZTsKKysgICAgICAgICh0aGlzLm9wdGlvbnNbJ29uJyArIHJlc3BvbnNl
LnN0YXR1c10KKysgICAgICAgICB8fCB0aGlzLm9wdGlvbnNbJ29uJyArICh0aGlzLnN1Y2Nlc3Mo
KSA/ICdTdWNjZXNzJyA6ICdGYWlsdXJlJyldCisrICAgICAgICAgfHwgUHJvdG90eXBlLmVtcHR5
RnVuY3Rpb24pKHJlc3BvbnNlLCByZXNwb25zZS5oZWFkZXJKU09OKTsKKysgICAgICB9IGNhdGNo
IChlKSB7CisrICAgICAgICB0aGlzLmRpc3BhdGNoRXhjZXB0aW9uKGUpOworKyAgICAgIH0KKysK
KysgICAgICB2YXIgY29udGVudFR5cGUgPSByZXNwb25zZS5nZXRIZWFkZXIoJ0NvbnRlbnQtdHlw
ZScpOworKyAgICAgIGlmICh0aGlzLm9wdGlvbnMuZXZhbEpTID09ICdmb3JjZScKKysgICAgICAg
ICAgfHwgKHRoaXMub3B0aW9ucy5ldmFsSlMgJiYgdGhpcy5pc1NhbWVPcmlnaW4oKSAmJiBjb250
ZW50VHlwZQorKyAgICAgICAgICAmJiBjb250ZW50VHlwZS5tYXRjaCgvXlxzKih0ZXh0fGFwcGxp
Y2F0aW9uKVwvKHgtKT8oamF2YXxlY21hKXNjcmlwdCg7LiopP1xzKiQvaSkpKQorKyAgICAgICAg
dGhpcy5ldmFsUmVzcG9uc2UoKTsKKysgICAgfQorKworKyAgICB0cnkgeworKyAgICAgICh0aGlz
Lm9wdGlvbnNbJ29uJyArIHN0YXRlXSB8fCBQcm90b3R5cGUuZW1wdHlGdW5jdGlvbikocmVzcG9u
c2UsIHJlc3BvbnNlLmhlYWRlckpTT04pOworKyAgICAgIEFqYXguUmVzcG9uZGVycy5kaXNwYXRj
aCgnb24nICsgc3RhdGUsIHRoaXMsIHJlc3BvbnNlLCByZXNwb25zZS5oZWFkZXJKU09OKTsKKysg
ICAgfSBjYXRjaCAoZSkgeworKyAgICAgIHRoaXMuZGlzcGF0Y2hFeGNlcHRpb24oZSk7CisrICAg
IH0KKysKKysgICAgaWYgKHN0YXRlID09ICdDb21wbGV0ZScpIHsKKysgICAgICB0aGlzLnRyYW5z
cG9ydC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBQcm90b3R5cGUuZW1wdHlGdW5jdGlvbjsKKysgICAg
fQorKyAgfSwKKysKKysgIGlzU2FtZU9yaWdpbjogZnVuY3Rpb24oKSB7CisrICAgIHZhciBtID0g
dGhpcy51cmwubWF0Y2goL15ccypodHRwcz86XC9cL1teXC9dKi8pOworKyAgICByZXR1cm4gIW0g
fHwgKG1bMF0gPT0gJyN7cHJvdG9jb2x9Ly8je2RvbWFpbn0je3BvcnR9Jy5pbnRlcnBvbGF0ZSh7
CisrICAgICAgcHJvdG9jb2w6IGxvY2F0aW9uLnByb3RvY29sLAorKyAgICAgIGRvbWFpbjogZG9j
dW1lbnQuZG9tYWluLAorKyAgICAgIHBvcnQ6IGxvY2F0aW9uLnBvcnQgPyAnOicgKyBsb2NhdGlv
bi5wb3J0IDogJycKKysgICAgfSkpOworKyAgfSwKKysKKysgIGdldEhlYWRlcjogZnVuY3Rpb24o
bmFtZSkgeworKyAgICB0cnkgeworKyAgICAgIHJldHVybiB0aGlzLnRyYW5zcG9ydC5nZXRSZXNw
b25zZUhlYWRlcihuYW1lKSB8fCBudWxsOworKyAgICB9IGNhdGNoIChlKSB7IHJldHVybiBudWxs
OyB9CisrICB9LAorKworKyAgZXZhbFJlc3BvbnNlOiBmdW5jdGlvbigpIHsKKysgICAgdHJ5IHsK
KysgICAgICByZXR1cm4gZXZhbCgodGhpcy50cmFuc3BvcnQucmVzcG9uc2VUZXh0IHx8ICcnKS51
bmZpbHRlckpTT04oKSk7CisrICAgIH0gY2F0Y2ggKGUpIHsKKysgICAgICB0aGlzLmRpc3BhdGNo
RXhjZXB0aW9uKGUpOworKyAgICB9CisrICB9LAorKworKyAgZGlzcGF0Y2hFeGNlcHRpb246IGZ1
bmN0aW9uKGV4Y2VwdGlvbikgeworKyAgICAodGhpcy5vcHRpb25zLm9uRXhjZXB0aW9uIHx8IFBy
b3RvdHlwZS5lbXB0eUZ1bmN0aW9uKSh0aGlzLCBleGNlcHRpb24pOworKyAgICBBamF4LlJlc3Bv
bmRlcnMuZGlzcGF0Y2goJ29uRXhjZXB0aW9uJywgdGhpcywgZXhjZXB0aW9uKTsKKysgIH0KKyt9
KTsKKysKKytBamF4LlJlcXVlc3QuRXZlbnRzID0KKysgIFsnVW5pbml0aWFsaXplZCcsICdMb2Fk
aW5nJywgJ0xvYWRlZCcsICdJbnRlcmFjdGl2ZScsICdDb21wbGV0ZSddOworKworKworKworKwor
KworKworKworKworK0FqYXguUmVzcG9uc2UgPSBDbGFzcy5jcmVhdGUoeworKyAgaW5pdGlhbGl6
ZTogZnVuY3Rpb24ocmVxdWVzdCl7CisrICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7CisrICAg
IHZhciB0cmFuc3BvcnQgID0gdGhpcy50cmFuc3BvcnQgID0gcmVxdWVzdC50cmFuc3BvcnQsCisr
ICAgICAgICByZWFkeVN0YXRlID0gdGhpcy5yZWFkeVN0YXRlID0gdHJhbnNwb3J0LnJlYWR5U3Rh
dGU7CisrCisrICAgIGlmICgocmVhZHlTdGF0ZSA+IDIgJiYgIVByb3RvdHlwZS5Ccm93c2VyLklF
KSB8fCByZWFkeVN0YXRlID09IDQpIHsKKysgICAgICB0aGlzLnN0YXR1cyAgICAgICA9IHRoaXMu
Z2V0U3RhdHVzKCk7CisrICAgICAgdGhpcy5zdGF0dXNUZXh0ICAgPSB0aGlzLmdldFN0YXR1c1Rl
eHQoKTsKKysgICAgICB0aGlzLnJlc3BvbnNlVGV4dCA9IFN0cmluZy5pbnRlcnByZXQodHJhbnNw
b3J0LnJlc3BvbnNlVGV4dCk7CisrICAgICAgdGhpcy5oZWFkZXJKU09OICAgPSB0aGlzLl9nZXRI
ZWFkZXJKU09OKCk7CisrICAgIH0KKysKKysgICAgaWYgKHJlYWR5U3RhdGUgPT0gNCkgeworKyAg
ICAgIHZhciB4bWwgPSB0cmFuc3BvcnQucmVzcG9uc2VYTUw7CisrICAgICAgdGhpcy5yZXNwb25z
ZVhNTCAgPSBPYmplY3QuaXNVbmRlZmluZWQoeG1sKSA/IG51bGwgOiB4bWw7CisrICAgICAgdGhp
cy5yZXNwb25zZUpTT04gPSB0aGlzLl9nZXRSZXNwb25zZUpTT04oKTsKKysgICAgfQorKyAgfSwK
KysKKysgIHN0YXR1czogICAgICAwLAorKworKyAgc3RhdHVzVGV4dDogJycsCisrCisrICBnZXRT
dGF0dXM6IEFqYXguUmVxdWVzdC5wcm90b3R5cGUuZ2V0U3RhdHVzLAorKworKyAgZ2V0U3RhdHVz
VGV4dDogZnVuY3Rpb24oKSB7CisrICAgIHRyeSB7CisrICAgICAgcmV0dXJuIHRoaXMudHJhbnNw
b3J0LnN0YXR1c1RleHQgfHwgJyc7CisrICAgIH0gY2F0Y2ggKGUpIHsgcmV0dXJuICcnIH0KKysg
IH0sCisrCisrICBnZXRIZWFkZXI6IEFqYXguUmVxdWVzdC5wcm90b3R5cGUuZ2V0SGVhZGVyLAor
KworKyAgZ2V0QWxsSGVhZGVyczogZnVuY3Rpb24oKSB7CisrICAgIHRyeSB7CisrICAgICAgcmV0
dXJuIHRoaXMuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCk7CisrICAgIH0gY2F0Y2ggKGUpIHsgcmV0
dXJuIG51bGwgfQorKyAgfSwKKysKKysgIGdldFJlc3BvbnNlSGVhZGVyOiBmdW5jdGlvbihuYW1l
KSB7CisrICAgIHJldHVybiB0aGlzLnRyYW5zcG9ydC5nZXRSZXNwb25zZUhlYWRlcihuYW1lKTsK
KysgIH0sCisrCisrICBnZXRBbGxSZXNwb25zZUhlYWRlcnM6IGZ1bmN0aW9uKCkgeworKyAgICBy
ZXR1cm4gdGhpcy50cmFuc3BvcnQuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCk7CisrICB9LAorKwor
KyAgX2dldEhlYWRlckpTT046IGZ1bmN0aW9uKCkgeworKyAgICB2YXIganNvbiA9IHRoaXMuZ2V0
SGVhZGVyKCdYLUpTT04nKTsKKysgICAgaWYgKCFqc29uKSByZXR1cm4gbnVsbDsKKysgICAganNv
biA9IGRlY29kZVVSSUNvbXBvbmVudChlc2NhcGUoanNvbikpOworKyAgICB0cnkgeworKyAgICAg
IHJldHVybiBqc29uLmV2YWxKU09OKHRoaXMucmVxdWVzdC5vcHRpb25zLnNhbml0aXplSlNPTiB8
fAorKyAgICAgICAgIXRoaXMucmVxdWVzdC5pc1NhbWVPcmlnaW4oKSk7CisrICAgIH0gY2F0Y2gg
KGUpIHsKKysgICAgICB0aGlzLnJlcXVlc3QuZGlzcGF0Y2hFeGNlcHRpb24oZSk7CisrICAgIH0K
KysgIH0sCisrCisrICBfZ2V0UmVzcG9uc2VKU09OOiBmdW5jdGlvbigpIHsKKysgICAgdmFyIG9w
dGlvbnMgPSB0aGlzLnJlcXVlc3Qub3B0aW9uczsKKysgICAgaWYgKCFvcHRpb25zLmV2YWxKU09O
IHx8IChvcHRpb25zLmV2YWxKU09OICE9ICdmb3JjZScgJiYKKysgICAgICAhKHRoaXMuZ2V0SGVh
ZGVyKCdDb250ZW50LXR5cGUnKSB8fCAnJykuaW5jbHVkZSgnYXBwbGljYXRpb24vanNvbicpKSB8
fAorKyAgICAgICAgdGhpcy5yZXNwb25zZVRleHQuYmxhbmsoKSkKKysgICAgICAgICAgcmV0dXJu
IG51bGw7CisrICAgIHRyeSB7CisrICAgICAgcmV0dXJuIHRoaXMucmVzcG9uc2VUZXh0LmV2YWxK
U09OKG9wdGlvbnMuc2FuaXRpemVKU09OIHx8CisrICAgICAgICAhdGhpcy5yZXF1ZXN0LmlzU2Ft
ZU9yaWdpbigpKTsKKysgICAgfSBjYXRjaCAoZSkgeworKyAgICAgIHRoaXMucmVxdWVzdC5kaXNw
YXRjaEV4Y2VwdGlvbihlKTsKKysgICAgfQorKyAgfQorK30pOworKworK0FqYXguVXBkYXRlciA9
IENsYXNzLmNyZWF0ZShBamF4LlJlcXVlc3QsIHsKKysgIGluaXRpYWxpemU6IGZ1bmN0aW9uKCRz
dXBlciwgY29udGFpbmVyLCB1cmwsIG9wdGlvbnMpIHsKKysgICAgdGhpcy5jb250YWluZXIgPSB7
CisrICAgICAgc3VjY2VzczogKGNvbnRhaW5lci5zdWNjZXNzIHx8IGNvbnRhaW5lciksCisrICAg
ICAgZmFpbHVyZTogKGNvbnRhaW5lci5mYWlsdXJlIHx8IChjb250YWluZXIuc3VjY2VzcyA/IG51
bGwgOiBjb250YWluZXIpKQorKyAgICB9OworKworKyAgICBvcHRpb25zID0gT2JqZWN0LmNsb25l
KG9wdGlvbnMpOworKyAgICB2YXIgb25Db21wbGV0ZSA9IG9wdGlvbnMub25Db21wbGV0ZTsKKysg
ICAgb3B0aW9ucy5vbkNvbXBsZXRlID0gKGZ1bmN0aW9uKHJlc3BvbnNlLCBqc29uKSB7CisrICAg
ICAgdGhpcy51cGRhdGVDb250ZW50KHJlc3BvbnNlLnJlc3BvbnNlVGV4dCk7CisrICAgICAgaWYg
KE9iamVjdC5pc0Z1bmN0aW9uKG9uQ29tcGxldGUpKSBvbkNvbXBsZXRlKHJlc3BvbnNlLCBqc29u
KTsKKysgICAgfSkuYmluZCh0aGlzKTsKKysKKysgICAgJHN1cGVyKHVybCwgb3B0aW9ucyk7Cisr
ICB9LAorKworKyAgdXBkYXRlQ29udGVudDogZnVuY3Rpb24ocmVzcG9uc2VUZXh0KSB7CisrICAg
IHZhciByZWNlaXZlciA9IHRoaXMuY29udGFpbmVyW3RoaXMuc3VjY2VzcygpID8gJ3N1Y2Nlc3Mn
IDogJ2ZhaWx1cmUnXSwKKysgICAgICAgIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7CisrCisrICAg
IGlmICghb3B0aW9ucy5ldmFsU2NyaXB0cykgcmVzcG9uc2VUZXh0ID0gcmVzcG9uc2VUZXh0LnN0
cmlwU2NyaXB0cygpOworKworKyAgICBpZiAocmVjZWl2ZXIgPSAkKHJlY2VpdmVyKSkgeworKyAg
ICAgIGlmIChvcHRpb25zLmluc2VydGlvbikgeworKyAgICAgICAgaWYgKE9iamVjdC5pc1N0cmlu
ZyhvcHRpb25zLmluc2VydGlvbikpIHsKKysgICAgICAgICAgdmFyIGluc2VydGlvbiA9IHsgfTsg
aW5zZXJ0aW9uW29wdGlvbnMuaW5zZXJ0aW9uXSA9IHJlc3BvbnNlVGV4dDsKKysgICAgICAgICAg
cmVjZWl2ZXIuaW5zZXJ0KGluc2VydGlvbik7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIG9w
dGlvbnMuaW5zZXJ0aW9uKHJlY2VpdmVyLCByZXNwb25zZVRleHQpOworKyAgICAgIH0KKysgICAg
ICBlbHNlIHJlY2VpdmVyLnVwZGF0ZShyZXNwb25zZVRleHQpOworKyAgICB9CisrICB9CisrfSk7
CisrCisrQWpheC5QZXJpb2RpY2FsVXBkYXRlciA9IENsYXNzLmNyZWF0ZShBamF4LkJhc2UsIHsK
KysgIGluaXRpYWxpemU6IGZ1bmN0aW9uKCRzdXBlciwgY29udGFpbmVyLCB1cmwsIG9wdGlvbnMp
IHsKKysgICAgJHN1cGVyKG9wdGlvbnMpOworKyAgICB0aGlzLm9uQ29tcGxldGUgPSB0aGlzLm9w
dGlvbnMub25Db21wbGV0ZTsKKysKKysgICAgdGhpcy5mcmVxdWVuY3kgPSAodGhpcy5vcHRpb25z
LmZyZXF1ZW5jeSB8fCAyKTsKKysgICAgdGhpcy5kZWNheSA9ICh0aGlzLm9wdGlvbnMuZGVjYXkg
fHwgMSk7CisrCisrICAgIHRoaXMudXBkYXRlciA9IHsgfTsKKysgICAgdGhpcy5jb250YWluZXIg
PSBjb250YWluZXI7CisrICAgIHRoaXMudXJsID0gdXJsOworKworKyAgICB0aGlzLnN0YXJ0KCk7
CisrICB9LAorKworKyAgc3RhcnQ6IGZ1bmN0aW9uKCkgeworKyAgICB0aGlzLm9wdGlvbnMub25D
b21wbGV0ZSA9IHRoaXMudXBkYXRlQ29tcGxldGUuYmluZCh0aGlzKTsKKysgICAgdGhpcy5vblRp
bWVyRXZlbnQoKTsKKysgIH0sCisrCisrICBzdG9wOiBmdW5jdGlvbigpIHsKKysgICAgdGhpcy51
cGRhdGVyLm9wdGlvbnMub25Db21wbGV0ZSA9IHVuZGVmaW5lZDsKKysgICAgY2xlYXJUaW1lb3V0
KHRoaXMudGltZXIpOworKyAgICAodGhpcy5vbkNvbXBsZXRlIHx8IFByb3RvdHlwZS5lbXB0eUZ1
bmN0aW9uKS5hcHBseSh0aGlzLCBhcmd1bWVudHMpOworKyAgfSwKKysKKysgIHVwZGF0ZUNvbXBs
ZXRlOiBmdW5jdGlvbihyZXNwb25zZSkgeworKyAgICBpZiAodGhpcy5vcHRpb25zLmRlY2F5KSB7
CisrICAgICAgdGhpcy5kZWNheSA9IChyZXNwb25zZS5yZXNwb25zZVRleHQgPT0gdGhpcy5sYXN0
VGV4dCA/CisrICAgICAgICB0aGlzLmRlY2F5ICogdGhpcy5vcHRpb25zLmRlY2F5IDogMSk7Cisr
CisrICAgICAgdGhpcy5sYXN0VGV4dCA9IHJlc3BvbnNlLnJlc3BvbnNlVGV4dDsKKysgICAgfQor
KyAgICB0aGlzLnRpbWVyID0gdGhpcy5vblRpbWVyRXZlbnQuYmluZCh0aGlzKS5kZWxheSh0aGlz
LmRlY2F5ICogdGhpcy5mcmVxdWVuY3kpOworKyAgfSwKKysKKysgIG9uVGltZXJFdmVudDogZnVu
Y3Rpb24oKSB7CisrICAgIHRoaXMudXBkYXRlciA9IG5ldyBBamF4LlVwZGF0ZXIodGhpcy5jb250
YWluZXIsIHRoaXMudXJsLCB0aGlzLm9wdGlvbnMpOworKyAgfQorK30pOworKworKworK2Z1bmN0
aW9uICQoZWxlbWVudCkgeworKyAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7CisrICAgIGZv
ciAodmFyIGkgPSAwLCBlbGVtZW50cyA9IFtdLCBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoOyBp
IDwgbGVuZ3RoOyBpKyspCisrICAgICAgZWxlbWVudHMucHVzaCgkKGFyZ3VtZW50c1tpXSkpOwor
KyAgICByZXR1cm4gZWxlbWVudHM7CisrICB9CisrICBpZiAoT2JqZWN0LmlzU3RyaW5nKGVsZW1l
bnQpKQorKyAgICBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWxlbWVudCk7Cisr
ICByZXR1cm4gRWxlbWVudC5leHRlbmQoZWxlbWVudCk7CisrfQorKworK2lmIChQcm90b3R5cGUu
QnJvd3NlckZlYXR1cmVzLlhQYXRoKSB7CisrICBkb2N1bWVudC5fZ2V0RWxlbWVudHNCeVhQYXRo
ID0gZnVuY3Rpb24oZXhwcmVzc2lvbiwgcGFyZW50RWxlbWVudCkgeworKyAgICB2YXIgcmVzdWx0
cyA9IFtdOworKyAgICB2YXIgcXVlcnkgPSBkb2N1bWVudC5ldmFsdWF0ZShleHByZXNzaW9uLCAk
KHBhcmVudEVsZW1lbnQpIHx8IGRvY3VtZW50LAorKyAgICAgIG51bGwsIFhQYXRoUmVzdWx0Lk9S
REVSRURfTk9ERV9TTkFQU0hPVF9UWVBFLCBudWxsKTsKKysgICAgZm9yICh2YXIgaSA9IDAsIGxl
bmd0aCA9IHF1ZXJ5LnNuYXBzaG90TGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspCisrICAgICAgcmVz
dWx0cy5wdXNoKEVsZW1lbnQuZXh0ZW5kKHF1ZXJ5LnNuYXBzaG90SXRlbShpKSkpOworKyAgICBy
ZXR1cm4gcmVzdWx0czsKKysgIH07CisrfQorKworKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworKwor
K2lmICghTm9kZSkgdmFyIE5vZGUgPSB7IH07CisrCisraWYgKCFOb2RlLkVMRU1FTlRfTk9ERSkg
eworKyAgT2JqZWN0LmV4dGVuZChOb2RlLCB7CisrICAgIEVMRU1FTlRfTk9ERTogMSwKKysgICAg
QVRUUklCVVRFX05PREU6IDIsCisrICAgIFRFWFRfTk9ERTogMywKKysgICAgQ0RBVEFfU0VDVElP
Tl9OT0RFOiA0LAorKyAgICBFTlRJVFlfUkVGRVJFTkNFX05PREU6IDUsCisrICAgIEVOVElUWV9O
T0RFOiA2LAorKyAgICBQUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREU6IDcsCisrICAgIENPTU1F
TlRfTk9ERTogOCwKKysgICAgRE9DVU1FTlRfTk9ERTogOSwKKysgICAgRE9DVU1FTlRfVFlQRV9O
T0RFOiAxMCwKKysgICAgRE9DVU1FTlRfRlJBR01FTlRfTk9ERTogMTEsCisrICAgIE5PVEFUSU9O
X05PREU6IDEyCisrICB9KTsKKyt9CisrCisrCisrCisrKGZ1bmN0aW9uKGdsb2JhbCkgeworKyAg
ZnVuY3Rpb24gc2hvdWxkVXNlQ2FjaGUodGFnTmFtZSwgYXR0cmlidXRlcykgeworKyAgICBpZiAo
dGFnTmFtZSA9PT0gJ3NlbGVjdCcpIHJldHVybiBmYWxzZTsKKysgICAgaWYgKCd0eXBlJyBpbiBh
dHRyaWJ1dGVzKSByZXR1cm4gZmFsc2U7CisrICAgIHJldHVybiB0cnVlOworKyAgfQorKworKyAg
dmFyIEhBU19FWFRFTkRFRF9DUkVBVEVfRUxFTUVOVF9TWU5UQVggPSAoZnVuY3Rpb24oKXsKKysg
ICAgdHJ5IHsKKysgICAgICB2YXIgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCc8aW5wdXQg
bmFtZT0ieCI+Jyk7CisrICAgICAgcmV0dXJuIGVsLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0g
J2lucHV0JyAmJiBlbC5uYW1lID09PSAneCc7CisrICAgIH0KKysgICAgY2F0Y2goZXJyKSB7Cisr
ICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrICB9KSgpOworKworKyAgdmFyIGVsZW1lbnQg
PSBnbG9iYWwuRWxlbWVudDsKKysKKysgIGdsb2JhbC5FbGVtZW50ID0gZnVuY3Rpb24odGFnTmFt
ZSwgYXR0cmlidXRlcykgeworKyAgICBhdHRyaWJ1dGVzID0gYXR0cmlidXRlcyB8fCB7IH07Cisr
ICAgIHRhZ05hbWUgPSB0YWdOYW1lLnRvTG93ZXJDYXNlKCk7CisrICAgIHZhciBjYWNoZSA9IEVs
ZW1lbnQuY2FjaGU7CisrCisrICAgIGlmIChIQVNfRVhURU5ERURfQ1JFQVRFX0VMRU1FTlRfU1lO
VEFYICYmIGF0dHJpYnV0ZXMubmFtZSkgeworKyAgICAgIHRhZ05hbWUgPSAnPCcgKyB0YWdOYW1l
ICsgJyBuYW1lPSInICsgYXR0cmlidXRlcy5uYW1lICsgJyI+JzsKKysgICAgICBkZWxldGUgYXR0
cmlidXRlcy5uYW1lOworKyAgICAgIHJldHVybiBFbGVtZW50LndyaXRlQXR0cmlidXRlKGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSksIGF0dHJpYnV0ZXMpOworKyAgICB9CisrCisrICAg
IGlmICghY2FjaGVbdGFnTmFtZV0pIGNhY2hlW3RhZ05hbWVdID0gRWxlbWVudC5leHRlbmQoZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKSk7CisrCisrICAgIHZhciBub2RlID0gc2hvdWxk
VXNlQ2FjaGUodGFnTmFtZSwgYXR0cmlidXRlcykgPworKyAgICAgY2FjaGVbdGFnTmFtZV0uY2xv
bmVOb2RlKGZhbHNlKSA6IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7CisrCisrICAg
IHJldHVybiBFbGVtZW50LndyaXRlQXR0cmlidXRlKG5vZGUsIGF0dHJpYnV0ZXMpOworKyAgfTsK
KysKKysgIE9iamVjdC5leHRlbmQoZ2xvYmFsLkVsZW1lbnQsIGVsZW1lbnQgfHwgeyB9KTsKKysg
IGlmIChlbGVtZW50KSBnbG9iYWwuRWxlbWVudC5wcm90b3R5cGUgPSBlbGVtZW50LnByb3RvdHlw
ZTsKKysKKyt9KSh0aGlzKTsKKysKKytFbGVtZW50LmlkQ291bnRlciA9IDE7CisrRWxlbWVudC5j
YWNoZSA9IHsgfTsKKysKKytFbGVtZW50Ll9wdXJnZUVsZW1lbnQgPSBmdW5jdGlvbihlbGVtZW50
KSB7CisrICB2YXIgdWlkID0gZWxlbWVudC5fcHJvdG90eXBlVUlEOworKyAgaWYgKHVpZCkgewor
KyAgICBFbGVtZW50LnN0b3BPYnNlcnZpbmcoZWxlbWVudCk7CisrICAgIGVsZW1lbnQuX3Byb3Rv
dHlwZVVJRCA9IHZvaWQgMDsKKysgICAgZGVsZXRlIEVsZW1lbnQuU3RvcmFnZVt1aWRdOworKyAg
fQorK30KKysKKytFbGVtZW50Lk1ldGhvZHMgPSB7CisrICB2aXNpYmxlOiBmdW5jdGlvbihlbGVt
ZW50KSB7CisrICAgIHJldHVybiAkKGVsZW1lbnQpLnN0eWxlLmRpc3BsYXkgIT0gJ25vbmUnOwor
KyAgfSwKKysKKysgIHRvZ2dsZTogZnVuY3Rpb24oZWxlbWVudCkgeworKyAgICBlbGVtZW50ID0g
JChlbGVtZW50KTsKKysgICAgRWxlbWVudFtFbGVtZW50LnZpc2libGUoZWxlbWVudCkgPyAnaGlk
ZScgOiAnc2hvdyddKGVsZW1lbnQpOworKyAgICByZXR1cm4gZWxlbWVudDsKKysgIH0sCisrCisr
ICBoaWRlOiBmdW5jdGlvbihlbGVtZW50KSB7CisrICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwor
KyAgICBlbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CisrICAgIHJldHVybiBlbGVtZW50
OworKyAgfSwKKysKKysgIHNob3c6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKysgICAgZWxlbWVudCA9
ICQoZWxlbWVudCk7CisrICAgIGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICcnOworKyAgICByZXR1
cm4gZWxlbWVudDsKKysgIH0sCisrCisrICByZW1vdmU6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKysg
ICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CisrICAgIGVsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVD
aGlsZChlbGVtZW50KTsKKysgICAgcmV0dXJuIGVsZW1lbnQ7CisrICB9LAorKworKyAgdXBkYXRl
OiAoZnVuY3Rpb24oKXsKKysKKysgICAgdmFyIFNFTEVDVF9FTEVNRU5UX0lOTkVSSFRNTF9CVUdH
WSA9IChmdW5jdGlvbigpeworKyAgICAgIHZhciBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
InNlbGVjdCIpLAorKyAgICAgICAgICBpc0J1Z2d5ID0gdHJ1ZTsKKysgICAgICBlbC5pbm5lckhU
TUwgPSAiPG9wdGlvbiB2YWx1ZT1cInRlc3RcIj50ZXN0PC9vcHRpb24+IjsKKysgICAgICBpZiAo
ZWwub3B0aW9ucyAmJiBlbC5vcHRpb25zWzBdKSB7CisrICAgICAgICBpc0J1Z2d5ID0gZWwub3B0
aW9uc1swXS5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpICE9PSAiT1BUSU9OIjsKKysgICAgICB9Cisr
ICAgICAgZWwgPSBudWxsOworKyAgICAgIHJldHVybiBpc0J1Z2d5OworKyAgICB9KSgpOworKwor
KyAgICB2YXIgVEFCTEVfRUxFTUVOVF9JTk5FUkhUTUxfQlVHR1kgPSAoZnVuY3Rpb24oKXsKKysg
ICAgICB0cnkgeworKyAgICAgICAgdmFyIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGFi
bGUiKTsKKysgICAgICAgIGlmIChlbCAmJiBlbC50Qm9kaWVzKSB7CisrICAgICAgICAgIGVsLmlu
bmVySFRNTCA9ICI8dGJvZHk+PHRyPjx0ZD50ZXN0PC90ZD48L3RyPjwvdGJvZHk+IjsKKysgICAg
ICAgICAgdmFyIGlzQnVnZ3kgPSB0eXBlb2YgZWwudEJvZGllc1swXSA9PSAidW5kZWZpbmVkIjsK
KysgICAgICAgICAgZWwgPSBudWxsOworKyAgICAgICAgICByZXR1cm4gaXNCdWdneTsKKysgICAg
ICAgIH0KKysgICAgICB9IGNhdGNoIChlKSB7CisrICAgICAgICByZXR1cm4gdHJ1ZTsKKysgICAg
ICB9CisrICAgIH0pKCk7CisrCisrICAgIHZhciBMSU5LX0VMRU1FTlRfSU5ORVJIVE1MX0JVR0dZ
ID0gKGZ1bmN0aW9uKCkgeworKyAgICAgIHRyeSB7CisrICAgICAgICB2YXIgZWwgPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKysgICAgICAgIGVsLmlubmVySFRNTCA9ICI8bGluaz4i
OworKyAgICAgICAgdmFyIGlzQnVnZ3kgPSAoZWwuY2hpbGROb2Rlcy5sZW5ndGggPT09IDApOwor
KyAgICAgICAgZWwgPSBudWxsOworKyAgICAgICAgcmV0dXJuIGlzQnVnZ3k7CisrICAgICAgfSBj
YXRjaChlKSB7CisrICAgICAgICByZXR1cm4gdHJ1ZTsKKysgICAgICB9CisrICAgIH0pKCk7Cisr
CisrICAgIHZhciBBTllfSU5ORVJIVE1MX0JVR0dZID0gU0VMRUNUX0VMRU1FTlRfSU5ORVJIVE1M
X0JVR0dZIHx8CisrICAgICBUQUJMRV9FTEVNRU5UX0lOTkVSSFRNTF9CVUdHWSB8fCBMSU5LX0VM
RU1FTlRfSU5ORVJIVE1MX0JVR0dZOworKworKyAgICB2YXIgU0NSSVBUX0VMRU1FTlRfUkVKRUNU
U19URVhUTk9ERV9BUFBFTkRJTkcgPSAoZnVuY3Rpb24gKCkgeworKyAgICAgIHZhciBzID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0IiksCisrICAgICAgICAgIGlzQnVnZ3kgPSBmYWxz
ZTsKKysgICAgICB0cnkgeworKyAgICAgICAgcy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVU
ZXh0Tm9kZSgiIikpOworKyAgICAgICAgaXNCdWdneSA9ICFzLmZpcnN0Q2hpbGQgfHwKKysgICAg
ICAgICAgcy5maXJzdENoaWxkICYmIHMuZmlyc3RDaGlsZC5ub2RlVHlwZSAhPT0gMzsKKysgICAg
ICB9IGNhdGNoIChlKSB7CisrICAgICAgICBpc0J1Z2d5ID0gdHJ1ZTsKKysgICAgICB9CisrICAg
ICAgcyA9IG51bGw7CisrICAgICAgcmV0dXJuIGlzQnVnZ3k7CisrICAgIH0pKCk7CisrCisrCisr
ICAgIGZ1bmN0aW9uIHVwZGF0ZShlbGVtZW50LCBjb250ZW50KSB7CisrICAgICAgZWxlbWVudCA9
ICQoZWxlbWVudCk7CisrICAgICAgdmFyIHB1cmdlRWxlbWVudCA9IEVsZW1lbnQuX3B1cmdlRWxl
bWVudDsKKysKKysgICAgICB2YXIgZGVzY2VuZGFudHMgPSBlbGVtZW50LmdldEVsZW1lbnRzQnlU
YWdOYW1lKCcqJyksCisrICAgICAgIGkgPSBkZXNjZW5kYW50cy5sZW5ndGg7CisrICAgICAgd2hp
bGUgKGktLSkgcHVyZ2VFbGVtZW50KGRlc2NlbmRhbnRzW2ldKTsKKysKKysgICAgICBpZiAoY29u
dGVudCAmJiBjb250ZW50LnRvRWxlbWVudCkKKysgICAgICAgIGNvbnRlbnQgPSBjb250ZW50LnRv
RWxlbWVudCgpOworKworKyAgICAgIGlmIChPYmplY3QuaXNFbGVtZW50KGNvbnRlbnQpKQorKyAg
ICAgICAgcmV0dXJuIGVsZW1lbnQudXBkYXRlKCkuaW5zZXJ0KGNvbnRlbnQpOworKworKyAgICAg
IGNvbnRlbnQgPSBPYmplY3QudG9IVE1MKGNvbnRlbnQpOworKworKyAgICAgIHZhciB0YWdOYW1l
ID0gZWxlbWVudC50YWdOYW1lLnRvVXBwZXJDYXNlKCk7CisrCisrICAgICAgaWYgKHRhZ05hbWUg
PT09ICdTQ1JJUFQnICYmIFNDUklQVF9FTEVNRU5UX1JFSkVDVFNfVEVYVE5PREVfQVBQRU5ESU5H
KSB7CisrICAgICAgICBlbGVtZW50LnRleHQgPSBjb250ZW50OworKyAgICAgICAgcmV0dXJuIGVs
ZW1lbnQ7CisrICAgICAgfQorKworKyAgICAgIGlmIChBTllfSU5ORVJIVE1MX0JVR0dZKSB7Cisr
ICAgICAgICBpZiAodGFnTmFtZSBpbiBFbGVtZW50Ll9pbnNlcnRpb25UcmFuc2xhdGlvbnMudGFn
cykgeworKyAgICAgICAgICB3aGlsZSAoZWxlbWVudC5maXJzdENoaWxkKSB7CisrICAgICAgICAg
ICAgZWxlbWVudC5yZW1vdmVDaGlsZChlbGVtZW50LmZpcnN0Q2hpbGQpOworKyAgICAgICAgICB9
CisrICAgICAgICAgIEVsZW1lbnQuX2dldENvbnRlbnRGcm9tQW5vbnltb3VzRWxlbWVudCh0YWdO
YW1lLCBjb250ZW50LnN0cmlwU2NyaXB0cygpKQorKyAgICAgICAgICAgIC5lYWNoKGZ1bmN0aW9u
KG5vZGUpIHsKKysgICAgICAgICAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQobm9kZSkKKysgICAg
ICAgICAgICB9KTsKKysgICAgICAgIH0gZWxzZSBpZiAoTElOS19FTEVNRU5UX0lOTkVSSFRNTF9C
VUdHWSAmJiBPYmplY3QuaXNTdHJpbmcoY29udGVudCkgJiYgY29udGVudC5pbmRleE9mKCc8bGlu
aycpID4gLTEpIHsKKysgICAgICAgICAgd2hpbGUgKGVsZW1lbnQuZmlyc3RDaGlsZCkgeworKyAg
ICAgICAgICAgIGVsZW1lbnQucmVtb3ZlQ2hpbGQoZWxlbWVudC5maXJzdENoaWxkKTsKKysgICAg
ICAgICAgfQorKyAgICAgICAgICB2YXIgbm9kZXMgPSBFbGVtZW50Ll9nZXRDb250ZW50RnJvbUFu
b255bW91c0VsZW1lbnQodGFnTmFtZSwgY29udGVudC5zdHJpcFNjcmlwdHMoKSwgdHJ1ZSk7Cisr
ICAgICAgICAgIG5vZGVzLmVhY2goZnVuY3Rpb24obm9kZSkgeyBlbGVtZW50LmFwcGVuZENoaWxk
KG5vZGUpIH0pOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgIGVsZW1l
bnQuaW5uZXJIVE1MID0gY29udGVudC5zdHJpcFNjcmlwdHMoKTsKKysgICAgICAgIH0KKysgICAg
ICB9CisrICAgICAgZWxzZSB7CisrICAgICAgICBlbGVtZW50LmlubmVySFRNTCA9IGNvbnRlbnQu
c3RyaXBTY3JpcHRzKCk7CisrICAgICAgfQorKworKyAgICAgIGNvbnRlbnQuZXZhbFNjcmlwdHMu
YmluZChjb250ZW50KS5kZWZlcigpOworKyAgICAgIHJldHVybiBlbGVtZW50OworKyAgICB9Cisr
CisrICAgIHJldHVybiB1cGRhdGU7CisrICB9KSgpLAorKworKyAgcmVwbGFjZTogZnVuY3Rpb24o
ZWxlbWVudCwgY29udGVudCkgeworKyAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKKysgICAgaWYg
KGNvbnRlbnQgJiYgY29udGVudC50b0VsZW1lbnQpIGNvbnRlbnQgPSBjb250ZW50LnRvRWxlbWVu
dCgpOworKyAgICBlbHNlIGlmICghT2JqZWN0LmlzRWxlbWVudChjb250ZW50KSkgeworKyAgICAg
IGNvbnRlbnQgPSBPYmplY3QudG9IVE1MKGNvbnRlbnQpOworKyAgICAgIHZhciByYW5nZSA9IGVs
ZW1lbnQub3duZXJEb2N1bWVudC5jcmVhdGVSYW5nZSgpOworKyAgICAgIHJhbmdlLnNlbGVjdE5v
ZGUoZWxlbWVudCk7CisrICAgICAgY29udGVudC5ldmFsU2NyaXB0cy5iaW5kKGNvbnRlbnQpLmRl
ZmVyKCk7CisrICAgICAgY29udGVudCA9IHJhbmdlLmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChj
b250ZW50LnN0cmlwU2NyaXB0cygpKTsKKysgICAgfQorKyAgICBlbGVtZW50LnBhcmVudE5vZGUu
cmVwbGFjZUNoaWxkKGNvbnRlbnQsIGVsZW1lbnQpOworKyAgICByZXR1cm4gZWxlbWVudDsKKysg
IH0sCisrCisrICBpbnNlcnQ6IGZ1bmN0aW9uKGVsZW1lbnQsIGluc2VydGlvbnMpIHsKKysgICAg
ZWxlbWVudCA9ICQoZWxlbWVudCk7CisrCisrICAgIGlmIChPYmplY3QuaXNTdHJpbmcoaW5zZXJ0
aW9ucykgfHwgT2JqZWN0LmlzTnVtYmVyKGluc2VydGlvbnMpIHx8CisrICAgICAgICBPYmplY3Qu
aXNFbGVtZW50KGluc2VydGlvbnMpIHx8IChpbnNlcnRpb25zICYmIChpbnNlcnRpb25zLnRvRWxl
bWVudCB8fCBpbnNlcnRpb25zLnRvSFRNTCkpKQorKyAgICAgICAgICBpbnNlcnRpb25zID0ge2Jv
dHRvbTppbnNlcnRpb25zfTsKKysKKysgICAgdmFyIGNvbnRlbnQsIGluc2VydCwgdGFnTmFtZSwg
Y2hpbGROb2RlczsKKysKKysgICAgZm9yICh2YXIgcG9zaXRpb24gaW4gaW5zZXJ0aW9ucykgewor
KyAgICAgIGNvbnRlbnQgID0gaW5zZXJ0aW9uc1twb3NpdGlvbl07CisrICAgICAgcG9zaXRpb24g
PSBwb3NpdGlvbi50b0xvd2VyQ2FzZSgpOworKyAgICAgIGluc2VydCA9IEVsZW1lbnQuX2luc2Vy
dGlvblRyYW5zbGF0aW9uc1twb3NpdGlvbl07CisrCisrICAgICAgaWYgKGNvbnRlbnQgJiYgY29u
dGVudC50b0VsZW1lbnQpIGNvbnRlbnQgPSBjb250ZW50LnRvRWxlbWVudCgpOworKyAgICAgIGlm
IChPYmplY3QuaXNFbGVtZW50KGNvbnRlbnQpKSB7CisrICAgICAgICBpbnNlcnQoZWxlbWVudCwg
Y29udGVudCk7CisrICAgICAgICBjb250aW51ZTsKKysgICAgICB9CisrCisrICAgICAgY29udGVu
dCA9IE9iamVjdC50b0hUTUwoY29udGVudCk7CisrCisrICAgICAgdGFnTmFtZSA9ICgocG9zaXRp
b24gPT0gJ2JlZm9yZScgfHwgcG9zaXRpb24gPT0gJ2FmdGVyJykKKysgICAgICAgID8gZWxlbWVu
dC5wYXJlbnROb2RlIDogZWxlbWVudCkudGFnTmFtZS50b1VwcGVyQ2FzZSgpOworKworKyAgICAg
IGNoaWxkTm9kZXMgPSBFbGVtZW50Ll9nZXRDb250ZW50RnJvbUFub255bW91c0VsZW1lbnQodGFn
TmFtZSwgY29udGVudC5zdHJpcFNjcmlwdHMoKSk7CisrCisrICAgICAgaWYgKHBvc2l0aW9uID09
ICd0b3AnIHx8IHBvc2l0aW9uID09ICdhZnRlcicpIGNoaWxkTm9kZXMucmV2ZXJzZSgpOworKyAg
ICAgIGNoaWxkTm9kZXMuZWFjaChpbnNlcnQuY3VycnkoZWxlbWVudCkpOworKworKyAgICAgIGNv
bnRlbnQuZXZhbFNjcmlwdHMuYmluZChjb250ZW50KS5kZWZlcigpOworKyAgICB9CisrCisrICAg
IHJldHVybiBlbGVtZW50OworKyAgfSwKKysKKysgIHdyYXA6IGZ1bmN0aW9uKGVsZW1lbnQsIHdy
YXBwZXIsIGF0dHJpYnV0ZXMpIHsKKysgICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CisrICAgIGlm
IChPYmplY3QuaXNFbGVtZW50KHdyYXBwZXIpKQorKyAgICAgICQod3JhcHBlcikud3JpdGVBdHRy
aWJ1dGUoYXR0cmlidXRlcyB8fCB7IH0pOworKyAgICBlbHNlIGlmIChPYmplY3QuaXNTdHJpbmco
d3JhcHBlcikpIHdyYXBwZXIgPSBuZXcgRWxlbWVudCh3cmFwcGVyLCBhdHRyaWJ1dGVzKTsKKysg
ICAgZWxzZSB3cmFwcGVyID0gbmV3IEVsZW1lbnQoJ2RpdicsIHdyYXBwZXIpOworKyAgICBpZiAo
ZWxlbWVudC5wYXJlbnROb2RlKQorKyAgICAgIGVsZW1lbnQucGFyZW50Tm9kZS5yZXBsYWNlQ2hp
bGQod3JhcHBlciwgZWxlbWVudCk7CisrICAgIHdyYXBwZXIuYXBwZW5kQ2hpbGQoZWxlbWVudCk7
CisrICAgIHJldHVybiB3cmFwcGVyOworKyAgfSwKKysKKysgIGluc3BlY3Q6IGZ1bmN0aW9uKGVs
ZW1lbnQpIHsKKysgICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CisrICAgIHZhciByZXN1bHQgPSAn
PCcgKyBlbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKTsKKysgICAgJEgoeydpZCc6ICdpZCcs
ICdjbGFzc05hbWUnOiAnY2xhc3MnfSkuZWFjaChmdW5jdGlvbihwYWlyKSB7CisrICAgICAgdmFy
IHByb3BlcnR5ID0gcGFpci5maXJzdCgpLAorKyAgICAgICAgICBhdHRyaWJ1dGUgPSBwYWlyLmxh
c3QoKSwKKysgICAgICAgICAgdmFsdWUgPSAoZWxlbWVudFtwcm9wZXJ0eV0gfHwgJycpLnRvU3Ry
aW5nKCk7CisrICAgICAgaWYgKHZhbHVlKSByZXN1bHQgKz0gJyAnICsgYXR0cmlidXRlICsgJz0n
ICsgdmFsdWUuaW5zcGVjdCh0cnVlKTsKKysgICAgfSk7CisrICAgIHJldHVybiByZXN1bHQgKyAn
Pic7CisrICB9LAorKworKyAgcmVjdXJzaXZlbHlDb2xsZWN0OiBmdW5jdGlvbihlbGVtZW50LCBw
cm9wZXJ0eSwgbWF4aW11bUxlbmd0aCkgeworKyAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKKysg
ICAgbWF4aW11bUxlbmd0aCA9IG1heGltdW1MZW5ndGggfHwgLTE7CisrICAgIHZhciBlbGVtZW50
cyA9IFtdOworKworKyAgICB3aGlsZSAoZWxlbWVudCA9IGVsZW1lbnRbcHJvcGVydHldKSB7Cisr
ICAgICAgaWYgKGVsZW1lbnQubm9kZVR5cGUgPT0gMSkKKysgICAgICAgIGVsZW1lbnRzLnB1c2go
RWxlbWVudC5leHRlbmQoZWxlbWVudCkpOworKyAgICAgIGlmIChlbGVtZW50cy5sZW5ndGggPT0g
bWF4aW11bUxlbmd0aCkKKysgICAgICAgIGJyZWFrOworKyAgICB9CisrCisrICAgIHJldHVybiBl
bGVtZW50czsKKysgIH0sCisrCisrICBhbmNlc3RvcnM6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKysg
ICAgcmV0dXJuIEVsZW1lbnQucmVjdXJzaXZlbHlDb2xsZWN0KGVsZW1lbnQsICdwYXJlbnROb2Rl
Jyk7CisrICB9LAorKworKyAgZGVzY2VuZGFudHM6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKysgICAg
cmV0dXJuIEVsZW1lbnQuc2VsZWN0KGVsZW1lbnQsICIqIik7CisrICB9LAorKworKyAgZmlyc3RE
ZXNjZW5kYW50OiBmdW5jdGlvbihlbGVtZW50KSB7CisrICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQp
LmZpcnN0Q2hpbGQ7CisrICAgIHdoaWxlIChlbGVtZW50ICYmIGVsZW1lbnQubm9kZVR5cGUgIT0g
MSkgZWxlbWVudCA9IGVsZW1lbnQubmV4dFNpYmxpbmc7CisrICAgIHJldHVybiAkKGVsZW1lbnQp
OworKyAgfSwKKysKKysgIGltbWVkaWF0ZURlc2NlbmRhbnRzOiBmdW5jdGlvbihlbGVtZW50KSB7
CisrICAgIHZhciByZXN1bHRzID0gW10sIGNoaWxkID0gJChlbGVtZW50KS5maXJzdENoaWxkOwor
KyAgICB3aGlsZSAoY2hpbGQpIHsKKysgICAgICBpZiAoY2hpbGQubm9kZVR5cGUgPT09IDEpIHsK
KysgICAgICAgIHJlc3VsdHMucHVzaChFbGVtZW50LmV4dGVuZChjaGlsZCkpOworKyAgICAgIH0K
KysgICAgICBjaGlsZCA9IGNoaWxkLm5leHRTaWJsaW5nOworKyAgICB9CisrICAgIHJldHVybiBy
ZXN1bHRzOworKyAgfSwKKysKKysgIHByZXZpb3VzU2libGluZ3M6IGZ1bmN0aW9uKGVsZW1lbnQs
IG1heGltdW1MZW5ndGgpIHsKKysgICAgcmV0dXJuIEVsZW1lbnQucmVjdXJzaXZlbHlDb2xsZWN0
KGVsZW1lbnQsICdwcmV2aW91c1NpYmxpbmcnKTsKKysgIH0sCisrCisrICBuZXh0U2libGluZ3M6
IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKysgICAgcmV0dXJuIEVsZW1lbnQucmVjdXJzaXZlbHlDb2xs
ZWN0KGVsZW1lbnQsICduZXh0U2libGluZycpOworKyAgfSwKKysKKysgIHNpYmxpbmdzOiBmdW5j
dGlvbihlbGVtZW50KSB7CisrICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOworKyAgICByZXR1cm4g
RWxlbWVudC5wcmV2aW91c1NpYmxpbmdzKGVsZW1lbnQpLnJldmVyc2UoKQorKyAgICAgIC5jb25j
YXQoRWxlbWVudC5uZXh0U2libGluZ3MoZWxlbWVudCkpOworKyAgfSwKKysKKysgIG1hdGNoOiBm
dW5jdGlvbihlbGVtZW50LCBzZWxlY3RvcikgeworKyAgICBlbGVtZW50ID0gJChlbGVtZW50KTsK
KysgICAgaWYgKE9iamVjdC5pc1N0cmluZyhzZWxlY3RvcikpCisrICAgICAgcmV0dXJuIFByb3Rv
dHlwZS5TZWxlY3Rvci5tYXRjaChlbGVtZW50LCBzZWxlY3Rvcik7CisrICAgIHJldHVybiBzZWxl
Y3Rvci5tYXRjaChlbGVtZW50KTsKKysgIH0sCisrCisrICB1cDogZnVuY3Rpb24oZWxlbWVudCwg
ZXhwcmVzc2lvbiwgaW5kZXgpIHsKKysgICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CisrICAgIGlm
IChhcmd1bWVudHMubGVuZ3RoID09IDEpIHJldHVybiAkKGVsZW1lbnQucGFyZW50Tm9kZSk7Cisr
ICAgIHZhciBhbmNlc3RvcnMgPSBFbGVtZW50LmFuY2VzdG9ycyhlbGVtZW50KTsKKysgICAgcmV0
dXJuIE9iamVjdC5pc051bWJlcihleHByZXNzaW9uKSA/IGFuY2VzdG9yc1tleHByZXNzaW9uXSA6
CisrICAgICAgUHJvdG90eXBlLlNlbGVjdG9yLmZpbmQoYW5jZXN0b3JzLCBleHByZXNzaW9uLCBp
bmRleCk7CisrICB9LAorKworKyAgZG93bjogZnVuY3Rpb24oZWxlbWVudCwgZXhwcmVzc2lvbiwg
aW5kZXgpIHsKKysgICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CisrICAgIGlmIChhcmd1bWVudHMu
bGVuZ3RoID09IDEpIHJldHVybiBFbGVtZW50LmZpcnN0RGVzY2VuZGFudChlbGVtZW50KTsKKysg
ICAgcmV0dXJuIE9iamVjdC5pc051bWJlcihleHByZXNzaW9uKSA/IEVsZW1lbnQuZGVzY2VuZGFu
dHMoZWxlbWVudClbZXhwcmVzc2lvbl0gOgorKyAgICAgIEVsZW1lbnQuc2VsZWN0KGVsZW1lbnQs
IGV4cHJlc3Npb24pW2luZGV4IHx8IDBdOworKyAgfSwKKysKKysgIHByZXZpb3VzOiBmdW5jdGlv
bihlbGVtZW50LCBleHByZXNzaW9uLCBpbmRleCkgeworKyAgICBlbGVtZW50ID0gJChlbGVtZW50
KTsKKysgICAgaWYgKE9iamVjdC5pc051bWJlcihleHByZXNzaW9uKSkgaW5kZXggPSBleHByZXNz
aW9uLCBleHByZXNzaW9uID0gZmFsc2U7CisrICAgIGlmICghT2JqZWN0LmlzTnVtYmVyKGluZGV4
KSkgaW5kZXggPSAwOworKworKyAgICBpZiAoZXhwcmVzc2lvbikgeworKyAgICAgIHJldHVybiBQ
cm90b3R5cGUuU2VsZWN0b3IuZmluZChlbGVtZW50LnByZXZpb3VzU2libGluZ3MoKSwgZXhwcmVz
c2lvbiwgaW5kZXgpOworKyAgICB9IGVsc2UgeworKyAgICAgIHJldHVybiBlbGVtZW50LnJlY3Vy
c2l2ZWx5Q29sbGVjdCgicHJldmlvdXNTaWJsaW5nIiwgaW5kZXggKyAxKVtpbmRleF07CisrICAg
IH0KKysgIH0sCisrCisrICBuZXh0OiBmdW5jdGlvbihlbGVtZW50LCBleHByZXNzaW9uLCBpbmRl
eCkgeworKyAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKKysgICAgaWYgKE9iamVjdC5pc051bWJl
cihleHByZXNzaW9uKSkgaW5kZXggPSBleHByZXNzaW9uLCBleHByZXNzaW9uID0gZmFsc2U7Cisr
ICAgIGlmICghT2JqZWN0LmlzTnVtYmVyKGluZGV4KSkgaW5kZXggPSAwOworKworKyAgICBpZiAo
ZXhwcmVzc2lvbikgeworKyAgICAgIHJldHVybiBQcm90b3R5cGUuU2VsZWN0b3IuZmluZChlbGVt
ZW50Lm5leHRTaWJsaW5ncygpLCBleHByZXNzaW9uLCBpbmRleCk7CisrICAgIH0gZWxzZSB7Cisr
ICAgICAgdmFyIG1heGltdW1MZW5ndGggPSBPYmplY3QuaXNOdW1iZXIoaW5kZXgpID8gaW5kZXgg
KyAxIDogMTsKKysgICAgICByZXR1cm4gZWxlbWVudC5yZWN1cnNpdmVseUNvbGxlY3QoIm5leHRT
aWJsaW5nIiwgaW5kZXggKyAxKVtpbmRleF07CisrICAgIH0KKysgIH0sCisrCisrCisrICBzZWxl
Y3Q6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKysgICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CisrICAg
IHZhciBleHByZXNzaW9ucyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywg
MSkuam9pbignLCAnKTsKKysgICAgcmV0dXJuIFByb3RvdHlwZS5TZWxlY3Rvci5zZWxlY3QoZXhw
cmVzc2lvbnMsIGVsZW1lbnQpOworKyAgfSwKKysKKysgIGFkamFjZW50OiBmdW5jdGlvbihlbGVt
ZW50KSB7CisrICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOworKyAgICB2YXIgZXhwcmVzc2lvbnMg
PSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpLmpvaW4oJywgJyk7Cisr
ICAgIHJldHVybiBQcm90b3R5cGUuU2VsZWN0b3Iuc2VsZWN0KGV4cHJlc3Npb25zLCBlbGVtZW50
LnBhcmVudE5vZGUpLndpdGhvdXQoZWxlbWVudCk7CisrICB9LAorKworKyAgaWRlbnRpZnk6IGZ1
bmN0aW9uKGVsZW1lbnQpIHsKKysgICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CisrICAgIHZhciBp
ZCA9IEVsZW1lbnQucmVhZEF0dHJpYnV0ZShlbGVtZW50LCAnaWQnKTsKKysgICAgaWYgKGlkKSBy
ZXR1cm4gaWQ7CisrICAgIGRvIHsgaWQgPSAnYW5vbnltb3VzX2VsZW1lbnRfJyArIEVsZW1lbnQu
aWRDb3VudGVyKysgfSB3aGlsZSAoJChpZCkpOworKyAgICBFbGVtZW50LndyaXRlQXR0cmlidXRl
KGVsZW1lbnQsICdpZCcsIGlkKTsKKysgICAgcmV0dXJuIGlkOworKyAgfSwKKysKKysgIHJlYWRB
dHRyaWJ1dGU6IGZ1bmN0aW9uKGVsZW1lbnQsIG5hbWUpIHsKKysgICAgZWxlbWVudCA9ICQoZWxl
bWVudCk7CisrICAgIGlmIChQcm90b3R5cGUuQnJvd3Nlci5JRSkgeworKyAgICAgIHZhciB0ID0g
RWxlbWVudC5fYXR0cmlidXRlVHJhbnNsYXRpb25zLnJlYWQ7CisrICAgICAgaWYgKHQudmFsdWVz
W25hbWVdKSByZXR1cm4gdC52YWx1ZXNbbmFtZV0oZWxlbWVudCwgbmFtZSk7CisrICAgICAgaWYg
KHQubmFtZXNbbmFtZV0pIG5hbWUgPSB0Lm5hbWVzW25hbWVdOworKyAgICAgIGlmIChuYW1lLmlu
Y2x1ZGUoJzonKSkgeworKyAgICAgICAgcmV0dXJuICghZWxlbWVudC5hdHRyaWJ1dGVzIHx8ICFl
bGVtZW50LmF0dHJpYnV0ZXNbbmFtZV0pID8gbnVsbCA6CisrICAgICAgICAgZWxlbWVudC5hdHRy
aWJ1dGVzW25hbWVdLnZhbHVlOworKyAgICAgIH0KKysgICAgfQorKyAgICByZXR1cm4gZWxlbWVu
dC5nZXRBdHRyaWJ1dGUobmFtZSk7CisrICB9LAorKworKyAgd3JpdGVBdHRyaWJ1dGU6IGZ1bmN0
aW9uKGVsZW1lbnQsIG5hbWUsIHZhbHVlKSB7CisrICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwor
KyAgICB2YXIgYXR0cmlidXRlcyA9IHsgfSwgdCA9IEVsZW1lbnQuX2F0dHJpYnV0ZVRyYW5zbGF0
aW9ucy53cml0ZTsKKysKKysgICAgaWYgKHR5cGVvZiBuYW1lID09ICdvYmplY3QnKSBhdHRyaWJ1
dGVzID0gbmFtZTsKKysgICAgZWxzZSBhdHRyaWJ1dGVzW25hbWVdID0gT2JqZWN0LmlzVW5kZWZp
bmVkKHZhbHVlKSA/IHRydWUgOiB2YWx1ZTsKKysKKysgICAgZm9yICh2YXIgYXR0ciBpbiBhdHRy
aWJ1dGVzKSB7CisrICAgICAgbmFtZSA9IHQubmFtZXNbYXR0cl0gfHwgYXR0cjsKKysgICAgICB2
YWx1ZSA9IGF0dHJpYnV0ZXNbYXR0cl07CisrICAgICAgaWYgKHQudmFsdWVzW2F0dHJdKSBuYW1l
ID0gdC52YWx1ZXNbYXR0cl0oZWxlbWVudCwgdmFsdWUpOworKyAgICAgIGlmICh2YWx1ZSA9PT0g
ZmFsc2UgfHwgdmFsdWUgPT09IG51bGwpCisrICAgICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0
ZShuYW1lKTsKKysgICAgICBlbHNlIGlmICh2YWx1ZSA9PT0gdHJ1ZSkKKysgICAgICAgIGVsZW1l
bnQuc2V0QXR0cmlidXRlKG5hbWUsIG5hbWUpOworKyAgICAgIGVsc2UgZWxlbWVudC5zZXRBdHRy
aWJ1dGUobmFtZSwgdmFsdWUpOworKyAgICB9CisrICAgIHJldHVybiBlbGVtZW50OworKyAgfSwK
KysKKysgIGdldEhlaWdodDogZnVuY3Rpb24oZWxlbWVudCkgeworKyAgICByZXR1cm4gRWxlbWVu
dC5nZXREaW1lbnNpb25zKGVsZW1lbnQpLmhlaWdodDsKKysgIH0sCisrCisrICBnZXRXaWR0aDog
ZnVuY3Rpb24oZWxlbWVudCkgeworKyAgICByZXR1cm4gRWxlbWVudC5nZXREaW1lbnNpb25zKGVs
ZW1lbnQpLndpZHRoOworKyAgfSwKKysKKysgIGNsYXNzTmFtZXM6IGZ1bmN0aW9uKGVsZW1lbnQp
IHsKKysgICAgcmV0dXJuIG5ldyBFbGVtZW50LkNsYXNzTmFtZXMoZWxlbWVudCk7CisrICB9LAor
KworKyAgaGFzQ2xhc3NOYW1lOiBmdW5jdGlvbihlbGVtZW50LCBjbGFzc05hbWUpIHsKKysgICAg
aWYgKCEoZWxlbWVudCA9ICQoZWxlbWVudCkpKSByZXR1cm47CisrICAgIHZhciBlbGVtZW50Q2xh
c3NOYW1lID0gZWxlbWVudC5jbGFzc05hbWU7CisrICAgIHJldHVybiAoZWxlbWVudENsYXNzTmFt
ZS5sZW5ndGggPiAwICYmIChlbGVtZW50Q2xhc3NOYW1lID09IGNsYXNzTmFtZSB8fAorKyAgICAg
IG5ldyBSZWdFeHAoIihefFxccykiICsgY2xhc3NOYW1lICsgIihcXHN8JCkiKS50ZXN0KGVsZW1l
bnRDbGFzc05hbWUpKSk7CisrICB9LAorKworKyAgYWRkQ2xhc3NOYW1lOiBmdW5jdGlvbihlbGVt
ZW50LCBjbGFzc05hbWUpIHsKKysgICAgaWYgKCEoZWxlbWVudCA9ICQoZWxlbWVudCkpKSByZXR1
cm47CisrICAgIGlmICghRWxlbWVudC5oYXNDbGFzc05hbWUoZWxlbWVudCwgY2xhc3NOYW1lKSkK
KysgICAgICBlbGVtZW50LmNsYXNzTmFtZSArPSAoZWxlbWVudC5jbGFzc05hbWUgPyAnICcgOiAn
JykgKyBjbGFzc05hbWU7CisrICAgIHJldHVybiBlbGVtZW50OworKyAgfSwKKysKKysgIHJlbW92
ZUNsYXNzTmFtZTogZnVuY3Rpb24oZWxlbWVudCwgY2xhc3NOYW1lKSB7CisrICAgIGlmICghKGVs
ZW1lbnQgPSAkKGVsZW1lbnQpKSkgcmV0dXJuOworKyAgICBlbGVtZW50LmNsYXNzTmFtZSA9IGVs
ZW1lbnQuY2xhc3NOYW1lLnJlcGxhY2UoCisrICAgICAgbmV3IFJlZ0V4cCgiKF58XFxzKykiICsg
Y2xhc3NOYW1lICsgIihcXHMrfCQpIiksICcgJykuc3RyaXAoKTsKKysgICAgcmV0dXJuIGVsZW1l
bnQ7CisrICB9LAorKworKyAgdG9nZ2xlQ2xhc3NOYW1lOiBmdW5jdGlvbihlbGVtZW50LCBjbGFz
c05hbWUpIHsKKysgICAgaWYgKCEoZWxlbWVudCA9ICQoZWxlbWVudCkpKSByZXR1cm47CisrICAg
IHJldHVybiBFbGVtZW50W0VsZW1lbnQuaGFzQ2xhc3NOYW1lKGVsZW1lbnQsIGNsYXNzTmFtZSkg
PworKyAgICAgICdyZW1vdmVDbGFzc05hbWUnIDogJ2FkZENsYXNzTmFtZSddKGVsZW1lbnQsIGNs
YXNzTmFtZSk7CisrICB9LAorKworKyAgY2xlYW5XaGl0ZXNwYWNlOiBmdW5jdGlvbihlbGVtZW50
KSB7CisrICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOworKyAgICB2YXIgbm9kZSA9IGVsZW1lbnQu
Zmlyc3RDaGlsZDsKKysgICAgd2hpbGUgKG5vZGUpIHsKKysgICAgICB2YXIgbmV4dE5vZGUgPSBu
b2RlLm5leHRTaWJsaW5nOworKyAgICAgIGlmIChub2RlLm5vZGVUeXBlID09IDMgJiYgIS9cUy8u
dGVzdChub2RlLm5vZGVWYWx1ZSkpCisrICAgICAgICBlbGVtZW50LnJlbW92ZUNoaWxkKG5vZGUp
OworKyAgICAgIG5vZGUgPSBuZXh0Tm9kZTsKKysgICAgfQorKyAgICByZXR1cm4gZWxlbWVudDsK
KysgIH0sCisrCisrICBlbXB0eTogZnVuY3Rpb24oZWxlbWVudCkgeworKyAgICByZXR1cm4gJChl
bGVtZW50KS5pbm5lckhUTUwuYmxhbmsoKTsKKysgIH0sCisrCisrICBkZXNjZW5kYW50T2Y6IGZ1
bmN0aW9uKGVsZW1lbnQsIGFuY2VzdG9yKSB7CisrICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpLCBh
bmNlc3RvciA9ICQoYW5jZXN0b3IpOworKworKyAgICBpZiAoZWxlbWVudC5jb21wYXJlRG9jdW1l
bnRQb3NpdGlvbikKKysgICAgICByZXR1cm4gKGVsZW1lbnQuY29tcGFyZURvY3VtZW50UG9zaXRp
b24oYW5jZXN0b3IpICYgOCkgPT09IDg7CisrCisrICAgIGlmIChhbmNlc3Rvci5jb250YWlucykK
KysgICAgICByZXR1cm4gYW5jZXN0b3IuY29udGFpbnMoZWxlbWVudCkgJiYgYW5jZXN0b3IgIT09
IGVsZW1lbnQ7CisrCisrICAgIHdoaWxlIChlbGVtZW50ID0gZWxlbWVudC5wYXJlbnROb2RlKQor
KyAgICAgIGlmIChlbGVtZW50ID09IGFuY2VzdG9yKSByZXR1cm4gdHJ1ZTsKKysKKysgICAgcmV0
dXJuIGZhbHNlOworKyAgfSwKKysKKysgIHNjcm9sbFRvOiBmdW5jdGlvbihlbGVtZW50KSB7Cisr
ICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOworKyAgICB2YXIgcG9zID0gRWxlbWVudC5jdW11bGF0
aXZlT2Zmc2V0KGVsZW1lbnQpOworKyAgICB3aW5kb3cuc2Nyb2xsVG8ocG9zWzBdLCBwb3NbMV0p
OworKyAgICByZXR1cm4gZWxlbWVudDsKKysgIH0sCisrCisrICBnZXRTdHlsZTogZnVuY3Rpb24o
ZWxlbWVudCwgc3R5bGUpIHsKKysgICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CisrICAgIHN0eWxl
ID0gc3R5bGUgPT0gJ2Zsb2F0JyA/ICdjc3NGbG9hdCcgOiBzdHlsZS5jYW1lbGl6ZSgpOworKyAg
ICB2YXIgdmFsdWUgPSBlbGVtZW50LnN0eWxlW3N0eWxlXTsKKysgICAgaWYgKCF2YWx1ZSB8fCB2
YWx1ZSA9PSAnYXV0bycpIHsKKysgICAgICB2YXIgY3NzID0gZG9jdW1lbnQuZGVmYXVsdFZpZXcu
Z2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50LCBudWxsKTsKKysgICAgICB2YWx1ZSA9IGNzcyA/IGNz
c1tzdHlsZV0gOiBudWxsOworKyAgICB9CisrICAgIGlmIChzdHlsZSA9PSAnb3BhY2l0eScpIHJl
dHVybiB2YWx1ZSA/IHBhcnNlRmxvYXQodmFsdWUpIDogMS4wOworKyAgICByZXR1cm4gdmFsdWUg
PT0gJ2F1dG8nID8gbnVsbCA6IHZhbHVlOworKyAgfSwKKysKKysgIGdldE9wYWNpdHk6IGZ1bmN0
aW9uKGVsZW1lbnQpIHsKKysgICAgcmV0dXJuICQoZWxlbWVudCkuZ2V0U3R5bGUoJ29wYWNpdHkn
KTsKKysgIH0sCisrCisrICBzZXRTdHlsZTogZnVuY3Rpb24oZWxlbWVudCwgc3R5bGVzKSB7Cisr
ICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOworKyAgICB2YXIgZWxlbWVudFN0eWxlID0gZWxlbWVu
dC5zdHlsZSwgbWF0Y2g7CisrICAgIGlmIChPYmplY3QuaXNTdHJpbmcoc3R5bGVzKSkgeworKyAg
ICAgIGVsZW1lbnQuc3R5bGUuY3NzVGV4dCArPSAnOycgKyBzdHlsZXM7CisrICAgICAgcmV0dXJu
IHN0eWxlcy5pbmNsdWRlKCdvcGFjaXR5JykgPworKyAgICAgICAgZWxlbWVudC5zZXRPcGFjaXR5
KHN0eWxlcy5tYXRjaCgvb3BhY2l0eTpccyooXGQ/XC4/XGQqKS8pWzFdKSA6IGVsZW1lbnQ7Cisr
ICAgIH0KKysgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gc3R5bGVzKQorKyAgICAgIGlmIChwcm9w
ZXJ0eSA9PSAnb3BhY2l0eScpIGVsZW1lbnQuc2V0T3BhY2l0eShzdHlsZXNbcHJvcGVydHldKTsK
KysgICAgICBlbHNlCisrICAgICAgICBlbGVtZW50U3R5bGVbKHByb3BlcnR5ID09ICdmbG9hdCcg
fHwgcHJvcGVydHkgPT0gJ2Nzc0Zsb2F0JykgPworKyAgICAgICAgICAoT2JqZWN0LmlzVW5kZWZp
bmVkKGVsZW1lbnRTdHlsZS5zdHlsZUZsb2F0KSA/ICdjc3NGbG9hdCcgOiAnc3R5bGVGbG9hdCcp
IDoKKysgICAgICAgICAgICBwcm9wZXJ0eV0gPSBzdHlsZXNbcHJvcGVydHldOworKworKyAgICBy
ZXR1cm4gZWxlbWVudDsKKysgIH0sCisrCisrICBzZXRPcGFjaXR5OiBmdW5jdGlvbihlbGVtZW50
LCB2YWx1ZSkgeworKyAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKKysgICAgZWxlbWVudC5zdHls
ZS5vcGFjaXR5ID0gKHZhbHVlID09IDEgfHwgdmFsdWUgPT09ICcnKSA/ICcnIDoKKysgICAgICAo
dmFsdWUgPCAwLjAwMDAxKSA/IDAgOiB2YWx1ZTsKKysgICAgcmV0dXJuIGVsZW1lbnQ7CisrICB9
LAorKworKyAgbWFrZVBvc2l0aW9uZWQ6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKysgICAgZWxlbWVu
dCA9ICQoZWxlbWVudCk7CisrICAgIHZhciBwb3MgPSBFbGVtZW50LmdldFN0eWxlKGVsZW1lbnQs
ICdwb3NpdGlvbicpOworKyAgICBpZiAocG9zID09ICdzdGF0aWMnIHx8ICFwb3MpIHsKKysgICAg
ICBlbGVtZW50Ll9tYWRlUG9zaXRpb25lZCA9IHRydWU7CisrICAgICAgZWxlbWVudC5zdHlsZS5w
b3NpdGlvbiA9ICdyZWxhdGl2ZSc7CisrICAgICAgaWYgKFByb3RvdHlwZS5Ccm93c2VyLk9wZXJh
KSB7CisrICAgICAgICBlbGVtZW50LnN0eWxlLnRvcCA9IDA7CisrICAgICAgICBlbGVtZW50LnN0
eWxlLmxlZnQgPSAwOworKyAgICAgIH0KKysgICAgfQorKyAgICByZXR1cm4gZWxlbWVudDsKKysg
IH0sCisrCisrICB1bmRvUG9zaXRpb25lZDogZnVuY3Rpb24oZWxlbWVudCkgeworKyAgICBlbGVt
ZW50ID0gJChlbGVtZW50KTsKKysgICAgaWYgKGVsZW1lbnQuX21hZGVQb3NpdGlvbmVkKSB7Cisr
ICAgICAgZWxlbWVudC5fbWFkZVBvc2l0aW9uZWQgPSB1bmRlZmluZWQ7CisrICAgICAgZWxlbWVu
dC5zdHlsZS5wb3NpdGlvbiA9CisrICAgICAgICBlbGVtZW50LnN0eWxlLnRvcCA9CisrICAgICAg
ICBlbGVtZW50LnN0eWxlLmxlZnQgPQorKyAgICAgICAgZWxlbWVudC5zdHlsZS5ib3R0b20gPQor
KyAgICAgICAgZWxlbWVudC5zdHlsZS5yaWdodCA9ICcnOworKyAgICB9CisrICAgIHJldHVybiBl
bGVtZW50OworKyAgfSwKKysKKysgIG1ha2VDbGlwcGluZzogZnVuY3Rpb24oZWxlbWVudCkgewor
KyAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKKysgICAgaWYgKGVsZW1lbnQuX292ZXJmbG93KSBy
ZXR1cm4gZWxlbWVudDsKKysgICAgZWxlbWVudC5fb3ZlcmZsb3cgPSBFbGVtZW50LmdldFN0eWxl
KGVsZW1lbnQsICdvdmVyZmxvdycpIHx8ICdhdXRvJzsKKysgICAgaWYgKGVsZW1lbnQuX292ZXJm
bG93ICE9PSAnaGlkZGVuJykKKysgICAgICBlbGVtZW50LnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRl
bic7CisrICAgIHJldHVybiBlbGVtZW50OworKyAgfSwKKysKKysgIHVuZG9DbGlwcGluZzogZnVu
Y3Rpb24oZWxlbWVudCkgeworKyAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKKysgICAgaWYgKCFl
bGVtZW50Ll9vdmVyZmxvdykgcmV0dXJuIGVsZW1lbnQ7CisrICAgIGVsZW1lbnQuc3R5bGUub3Zl
cmZsb3cgPSBlbGVtZW50Ll9vdmVyZmxvdyA9PSAnYXV0bycgPyAnJyA6IGVsZW1lbnQuX292ZXJm
bG93OworKyAgICBlbGVtZW50Ll9vdmVyZmxvdyA9IG51bGw7CisrICAgIHJldHVybiBlbGVtZW50
OworKyAgfSwKKysKKysgIGNsb25lUG9zaXRpb246IGZ1bmN0aW9uKGVsZW1lbnQsIHNvdXJjZSkg
eworKyAgICB2YXIgb3B0aW9ucyA9IE9iamVjdC5leHRlbmQoeworKyAgICAgIHNldExlZnQ6ICAg
IHRydWUsCisrICAgICAgc2V0VG9wOiAgICAgdHJ1ZSwKKysgICAgICBzZXRXaWR0aDogICB0cnVl
LAorKyAgICAgIHNldEhlaWdodDogIHRydWUsCisrICAgICAgb2Zmc2V0VG9wOiAgMCwKKysgICAg
ICBvZmZzZXRMZWZ0OiAwCisrICAgIH0sIGFyZ3VtZW50c1syXSB8fCB7IH0pOworKworKyAgICBz
b3VyY2UgPSAkKHNvdXJjZSk7CisrICAgIHZhciBwID0gRWxlbWVudC52aWV3cG9ydE9mZnNldChz
b3VyY2UpLCBkZWx0YSA9IFswLCAwXSwgcGFyZW50ID0gbnVsbDsKKysKKysgICAgZWxlbWVudCA9
ICQoZWxlbWVudCk7CisrCisrICAgIGlmIChFbGVtZW50LmdldFN0eWxlKGVsZW1lbnQsICdwb3Np
dGlvbicpID09ICdhYnNvbHV0ZScpIHsKKysgICAgICBwYXJlbnQgPSBFbGVtZW50LmdldE9mZnNl
dFBhcmVudChlbGVtZW50KTsKKysgICAgICBkZWx0YSA9IEVsZW1lbnQudmlld3BvcnRPZmZzZXQo
cGFyZW50KTsKKysgICAgfQorKworKyAgICBpZiAocGFyZW50ID09IGRvY3VtZW50LmJvZHkpIHsK
KysgICAgICBkZWx0YVswXSAtPSBkb2N1bWVudC5ib2R5Lm9mZnNldExlZnQ7CisrICAgICAgZGVs
dGFbMV0gLT0gZG9jdW1lbnQuYm9keS5vZmZzZXRUb3A7CisrICAgIH0KKysKKysgICAgaWYgKG9w
dGlvbnMuc2V0TGVmdCkgICBlbGVtZW50LnN0eWxlLmxlZnQgID0gKHBbMF0gLSBkZWx0YVswXSAr
IG9wdGlvbnMub2Zmc2V0TGVmdCkgKyAncHgnOworKyAgICBpZiAob3B0aW9ucy5zZXRUb3ApICAg
IGVsZW1lbnQuc3R5bGUudG9wICAgPSAocFsxXSAtIGRlbHRhWzFdICsgb3B0aW9ucy5vZmZzZXRU
b3ApICsgJ3B4JzsKKysgICAgaWYgKG9wdGlvbnMuc2V0V2lkdGgpICBlbGVtZW50LnN0eWxlLndp
ZHRoID0gc291cmNlLm9mZnNldFdpZHRoICsgJ3B4JzsKKysgICAgaWYgKG9wdGlvbnMuc2V0SGVp
Z2h0KSBlbGVtZW50LnN0eWxlLmhlaWdodCA9IHNvdXJjZS5vZmZzZXRIZWlnaHQgKyAncHgnOwor
KyAgICByZXR1cm4gZWxlbWVudDsKKysgIH0KKyt9OworKworK09iamVjdC5leHRlbmQoRWxlbWVu
dC5NZXRob2RzLCB7CisrICBnZXRFbGVtZW50c0J5U2VsZWN0b3I6IEVsZW1lbnQuTWV0aG9kcy5z
ZWxlY3QsCisrCisrICBjaGlsZEVsZW1lbnRzOiBFbGVtZW50Lk1ldGhvZHMuaW1tZWRpYXRlRGVz
Y2VuZGFudHMKKyt9KTsKKysKKytFbGVtZW50Ll9hdHRyaWJ1dGVUcmFuc2xhdGlvbnMgPSB7Cisr
ICB3cml0ZTogeworKyAgICBuYW1lczogeworKyAgICAgIGNsYXNzTmFtZTogJ2NsYXNzJywKKysg
ICAgICBodG1sRm9yOiAgICdmb3InCisrICAgIH0sCisrICAgIHZhbHVlczogeyB9CisrICB9Cisr
fTsKKysKKytpZiAoUHJvdG90eXBlLkJyb3dzZXIuT3BlcmEpIHsKKysgIEVsZW1lbnQuTWV0aG9k
cy5nZXRTdHlsZSA9IEVsZW1lbnQuTWV0aG9kcy5nZXRTdHlsZS53cmFwKAorKyAgICBmdW5jdGlv
bihwcm9jZWVkLCBlbGVtZW50LCBzdHlsZSkgeworKyAgICAgIHN3aXRjaCAoc3R5bGUpIHsKKysg
ICAgICAgIGNhc2UgJ2hlaWdodCc6IGNhc2UgJ3dpZHRoJzoKKysgICAgICAgICAgaWYgKCFFbGVt
ZW50LnZpc2libGUoZWxlbWVudCkpIHJldHVybiBudWxsOworKworKyAgICAgICAgICB2YXIgZGlt
ID0gcGFyc2VJbnQocHJvY2VlZChlbGVtZW50LCBzdHlsZSksIDEwKTsKKysKKysgICAgICAgICAg
aWYgKGRpbSAhPT0gZWxlbWVudFsnb2Zmc2V0JyArIHN0eWxlLmNhcGl0YWxpemUoKV0pCisrICAg
ICAgICAgICAgcmV0dXJuIGRpbSArICdweCc7CisrCisrICAgICAgICAgIHZhciBwcm9wZXJ0aWVz
OworKyAgICAgICAgICBpZiAoc3R5bGUgPT09ICdoZWlnaHQnKSB7CisrICAgICAgICAgICAgcHJv
cGVydGllcyA9IFsnYm9yZGVyLXRvcC13aWR0aCcsICdwYWRkaW5nLXRvcCcsCisrICAgICAgICAg
ICAgICdwYWRkaW5nLWJvdHRvbScsICdib3JkZXItYm90dG9tLXdpZHRoJ107CisrICAgICAgICAg
IH0KKysgICAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgcHJvcGVydGllcyA9IFsnYm9yZGVy
LWxlZnQtd2lkdGgnLCAncGFkZGluZy1sZWZ0JywKKysgICAgICAgICAgICAgJ3BhZGRpbmctcmln
aHQnLCAnYm9yZGVyLXJpZ2h0LXdpZHRoJ107CisrICAgICAgICAgIH0KKysgICAgICAgICAgcmV0
dXJuIHByb3BlcnRpZXMuaW5qZWN0KGRpbSwgZnVuY3Rpb24obWVtbywgcHJvcGVydHkpIHsKKysg
ICAgICAgICAgICB2YXIgdmFsID0gcHJvY2VlZChlbGVtZW50LCBwcm9wZXJ0eSk7CisrICAgICAg
ICAgICAgcmV0dXJuIHZhbCA9PT0gbnVsbCA/IG1lbW8gOiBtZW1vIC0gcGFyc2VJbnQodmFsLCAx
MCk7CisrICAgICAgICAgIH0pICsgJ3B4JzsKKysgICAgICAgIGRlZmF1bHQ6IHJldHVybiBwcm9j
ZWVkKGVsZW1lbnQsIHN0eWxlKTsKKysgICAgICB9CisrICAgIH0KKysgICk7CisrCisrICBFbGVt
ZW50Lk1ldGhvZHMucmVhZEF0dHJpYnV0ZSA9IEVsZW1lbnQuTWV0aG9kcy5yZWFkQXR0cmlidXRl
LndyYXAoCisrICAgIGZ1bmN0aW9uKHByb2NlZWQsIGVsZW1lbnQsIGF0dHJpYnV0ZSkgeworKyAg
ICAgIGlmIChhdHRyaWJ1dGUgPT09ICd0aXRsZScpIHJldHVybiBlbGVtZW50LnRpdGxlOworKyAg
ICAgIHJldHVybiBwcm9jZWVkKGVsZW1lbnQsIGF0dHJpYnV0ZSk7CisrICAgIH0KKysgICk7Cisr
fQorKworK2Vsc2UgaWYgKFByb3RvdHlwZS5Ccm93c2VyLklFKSB7CisrICBFbGVtZW50Lk1ldGhv
ZHMuZ2V0U3R5bGUgPSBmdW5jdGlvbihlbGVtZW50LCBzdHlsZSkgeworKyAgICBlbGVtZW50ID0g
JChlbGVtZW50KTsKKysgICAgc3R5bGUgPSAoc3R5bGUgPT0gJ2Zsb2F0JyB8fCBzdHlsZSA9PSAn
Y3NzRmxvYXQnKSA/ICdzdHlsZUZsb2F0JyA6IHN0eWxlLmNhbWVsaXplKCk7CisrICAgIHZhciB2
YWx1ZSA9IGVsZW1lbnQuc3R5bGVbc3R5bGVdOworKyAgICBpZiAoIXZhbHVlICYmIGVsZW1lbnQu
Y3VycmVudFN0eWxlKSB2YWx1ZSA9IGVsZW1lbnQuY3VycmVudFN0eWxlW3N0eWxlXTsKKysKKysg
ICAgaWYgKHN0eWxlID09ICdvcGFjaXR5JykgeworKyAgICAgIGlmICh2YWx1ZSA9IChlbGVtZW50
LmdldFN0eWxlKCdmaWx0ZXInKSB8fCAnJykubWF0Y2goL2FscGhhXChvcGFjaXR5PSguKilcKS8p
KQorKyAgICAgICAgaWYgKHZhbHVlWzFdKSByZXR1cm4gcGFyc2VGbG9hdCh2YWx1ZVsxXSkgLyAx
MDA7CisrICAgICAgcmV0dXJuIDEuMDsKKysgICAgfQorKworKyAgICBpZiAodmFsdWUgPT0gJ2F1
dG8nKSB7CisrICAgICAgaWYgKChzdHlsZSA9PSAnd2lkdGgnIHx8IHN0eWxlID09ICdoZWlnaHQn
KSAmJiAoZWxlbWVudC5nZXRTdHlsZSgnZGlzcGxheScpICE9ICdub25lJykpCisrICAgICAgICBy
ZXR1cm4gZWxlbWVudFsnb2Zmc2V0JyArIHN0eWxlLmNhcGl0YWxpemUoKV0gKyAncHgnOworKyAg
ICAgIHJldHVybiBudWxsOworKyAgICB9CisrICAgIHJldHVybiB2YWx1ZTsKKysgIH07CisrCisr
ICBFbGVtZW50Lk1ldGhvZHMuc2V0T3BhY2l0eSA9IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlKSB7
CisrICAgIGZ1bmN0aW9uIHN0cmlwQWxwaGEoZmlsdGVyKXsKKysgICAgICByZXR1cm4gZmlsdGVy
LnJlcGxhY2UoL2FscGhhXChbXlwpXSpcKS9naSwnJyk7CisrICAgIH0KKysgICAgZWxlbWVudCA9
ICQoZWxlbWVudCk7CisrICAgIHZhciBjdXJyZW50U3R5bGUgPSBlbGVtZW50LmN1cnJlbnRTdHls
ZTsKKysgICAgaWYgKChjdXJyZW50U3R5bGUgJiYgIWN1cnJlbnRTdHlsZS5oYXNMYXlvdXQpIHx8
CisrICAgICAgKCFjdXJyZW50U3R5bGUgJiYgZWxlbWVudC5zdHlsZS56b29tID09ICdub3JtYWwn
KSkKKysgICAgICAgIGVsZW1lbnQuc3R5bGUuem9vbSA9IDE7CisrCisrICAgIHZhciBmaWx0ZXIg
PSBlbGVtZW50LmdldFN0eWxlKCdmaWx0ZXInKSwgc3R5bGUgPSBlbGVtZW50LnN0eWxlOworKyAg
ICBpZiAodmFsdWUgPT0gMSB8fCB2YWx1ZSA9PT0gJycpIHsKKysgICAgICAoZmlsdGVyID0gc3Ry
aXBBbHBoYShmaWx0ZXIpKSA/CisrICAgICAgICBzdHlsZS5maWx0ZXIgPSBmaWx0ZXIgOiBzdHls
ZS5yZW1vdmVBdHRyaWJ1dGUoJ2ZpbHRlcicpOworKyAgICAgIHJldHVybiBlbGVtZW50OworKyAg
ICB9IGVsc2UgaWYgKHZhbHVlIDwgMC4wMDAwMSkgdmFsdWUgPSAwOworKyAgICBzdHlsZS5maWx0
ZXIgPSBzdHJpcEFscGhhKGZpbHRlcikgKworKyAgICAgICdhbHBoYShvcGFjaXR5PScgKyAodmFs
dWUgKiAxMDApICsgJyknOworKyAgICByZXR1cm4gZWxlbWVudDsKKysgIH07CisrCisrICBFbGVt
ZW50Ll9hdHRyaWJ1dGVUcmFuc2xhdGlvbnMgPSAoZnVuY3Rpb24oKXsKKysKKysgICAgdmFyIGNs
YXNzUHJvcCA9ICdjbGFzc05hbWUnLAorKyAgICAgICAgZm9yUHJvcCA9ICdmb3InLAorKyAgICAg
ICAgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKysKKysgICAgZWwuc2V0QXR0
cmlidXRlKGNsYXNzUHJvcCwgJ3gnKTsKKysKKysgICAgaWYgKGVsLmNsYXNzTmFtZSAhPT0gJ3gn
KSB7CisrICAgICAgZWwuc2V0QXR0cmlidXRlKCdjbGFzcycsICd4Jyk7CisrICAgICAgaWYgKGVs
LmNsYXNzTmFtZSA9PT0gJ3gnKSB7CisrICAgICAgICBjbGFzc1Byb3AgPSAnY2xhc3MnOworKyAg
ICAgIH0KKysgICAgfQorKyAgICBlbCA9IG51bGw7CisrCisrICAgIGVsID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgnbGFiZWwnKTsKKysgICAgZWwuc2V0QXR0cmlidXRlKGZvclByb3AsICd4Jyk7
CisrICAgIGlmIChlbC5odG1sRm9yICE9PSAneCcpIHsKKysgICAgICBlbC5zZXRBdHRyaWJ1dGUo
J2h0bWxGb3InLCAneCcpOworKyAgICAgIGlmIChlbC5odG1sRm9yID09PSAneCcpIHsKKysgICAg
ICAgIGZvclByb3AgPSAnaHRtbEZvcic7CisrICAgICAgfQorKyAgICB9CisrICAgIGVsID0gbnVs
bDsKKysKKysgICAgcmV0dXJuIHsKKysgICAgICByZWFkOiB7CisrICAgICAgICBuYW1lczogewor
KyAgICAgICAgICAnY2xhc3MnOiAgICAgIGNsYXNzUHJvcCwKKysgICAgICAgICAgJ2NsYXNzTmFt
ZSc6ICBjbGFzc1Byb3AsCisrICAgICAgICAgICdmb3InOiAgICAgICAgZm9yUHJvcCwKKysgICAg
ICAgICAgJ2h0bWxGb3InOiAgICBmb3JQcm9wCisrICAgICAgICB9LAorKyAgICAgICAgdmFsdWVz
OiB7CisrICAgICAgICAgIF9nZXRBdHRyOiBmdW5jdGlvbihlbGVtZW50LCBhdHRyaWJ1dGUpIHsK
KysgICAgICAgICAgICByZXR1cm4gZWxlbWVudC5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlKTsKKysg
ICAgICAgICAgfSwKKysgICAgICAgICAgX2dldEF0dHIyOiBmdW5jdGlvbihlbGVtZW50LCBhdHRy
aWJ1dGUpIHsKKysgICAgICAgICAgICByZXR1cm4gZWxlbWVudC5nZXRBdHRyaWJ1dGUoYXR0cmli
dXRlLCAyKTsKKysgICAgICAgICAgfSwKKysgICAgICAgICAgX2dldEF0dHJOb2RlOiBmdW5jdGlv
bihlbGVtZW50LCBhdHRyaWJ1dGUpIHsKKysgICAgICAgICAgICB2YXIgbm9kZSA9IGVsZW1lbnQu
Z2V0QXR0cmlidXRlTm9kZShhdHRyaWJ1dGUpOworKyAgICAgICAgICAgIHJldHVybiBub2RlID8g
bm9kZS52YWx1ZSA6ICIiOworKyAgICAgICAgICB9LAorKyAgICAgICAgICBfZ2V0RXY6IChmdW5j
dGlvbigpeworKworKyAgICAgICAgICAgIHZhciBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
J2RpdicpLCBmOworKyAgICAgICAgICAgIGVsLm9uY2xpY2sgPSBQcm90b3R5cGUuZW1wdHlGdW5j
dGlvbjsKKysgICAgICAgICAgICB2YXIgdmFsdWUgPSBlbC5nZXRBdHRyaWJ1dGUoJ29uY2xpY2sn
KTsKKysKKysgICAgICAgICAgICBpZiAoU3RyaW5nKHZhbHVlKS5pbmRleE9mKCd7JykgPiAtMSkg
eworKyAgICAgICAgICAgICAgZiA9IGZ1bmN0aW9uKGVsZW1lbnQsIGF0dHJpYnV0ZSkgeworKyAg
ICAgICAgICAgICAgICBhdHRyaWJ1dGUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGUp
OworKyAgICAgICAgICAgICAgICBpZiAoIWF0dHJpYnV0ZSkgcmV0dXJuIG51bGw7CisrICAgICAg
ICAgICAgICAgIGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZS50b1N0cmluZygpOworKyAgICAgICAgICAg
ICAgICBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGUuc3BsaXQoJ3snKVsxXTsKKysgICAgICAgICAgICAg
ICAgYXR0cmlidXRlID0gYXR0cmlidXRlLnNwbGl0KCd9JylbMF07CisrICAgICAgICAgICAgICAg
IHJldHVybiBhdHRyaWJ1dGUuc3RyaXAoKTsKKysgICAgICAgICAgICAgIH07CisrICAgICAgICAg
ICAgfQorKyAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlID09PSAnJykgeworKyAgICAgICAgICAg
ICAgZiA9IGZ1bmN0aW9uKGVsZW1lbnQsIGF0dHJpYnV0ZSkgeworKyAgICAgICAgICAgICAgICBh
dHRyaWJ1dGUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGUpOworKyAgICAgICAgICAg
ICAgICBpZiAoIWF0dHJpYnV0ZSkgcmV0dXJuIG51bGw7CisrICAgICAgICAgICAgICAgIHJldHVy
biBhdHRyaWJ1dGUuc3RyaXAoKTsKKysgICAgICAgICAgICAgIH07CisrICAgICAgICAgICAgfQor
KyAgICAgICAgICAgIGVsID0gbnVsbDsKKysgICAgICAgICAgICByZXR1cm4gZjsKKysgICAgICAg
ICAgfSkoKSwKKysgICAgICAgICAgX2ZsYWc6IGZ1bmN0aW9uKGVsZW1lbnQsIGF0dHJpYnV0ZSkg
eworKyAgICAgICAgICAgIHJldHVybiAkKGVsZW1lbnQpLmhhc0F0dHJpYnV0ZShhdHRyaWJ1dGUp
ID8gYXR0cmlidXRlIDogbnVsbDsKKysgICAgICAgICAgfSwKKysgICAgICAgICAgc3R5bGU6IGZ1
bmN0aW9uKGVsZW1lbnQpIHsKKysgICAgICAgICAgICByZXR1cm4gZWxlbWVudC5zdHlsZS5jc3NU
ZXh0LnRvTG93ZXJDYXNlKCk7CisrICAgICAgICAgIH0sCisrICAgICAgICAgIHRpdGxlOiBmdW5j
dGlvbihlbGVtZW50KSB7CisrICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQudGl0bGU7CisrICAg
ICAgICAgIH0KKysgICAgICAgIH0KKysgICAgICB9CisrICAgIH0KKysgIH0pKCk7CisrCisrICBF
bGVtZW50Ll9hdHRyaWJ1dGVUcmFuc2xhdGlvbnMud3JpdGUgPSB7CisrICAgIG5hbWVzOiBPYmpl
Y3QuZXh0ZW5kKHsKKysgICAgICBjZWxscGFkZGluZzogJ2NlbGxQYWRkaW5nJywKKysgICAgICBj
ZWxsc3BhY2luZzogJ2NlbGxTcGFjaW5nJworKyAgICB9LCBFbGVtZW50Ll9hdHRyaWJ1dGVUcmFu
c2xhdGlvbnMucmVhZC5uYW1lcyksCisrICAgIHZhbHVlczogeworKyAgICAgIGNoZWNrZWQ6IGZ1
bmN0aW9uKGVsZW1lbnQsIHZhbHVlKSB7CisrICAgICAgICBlbGVtZW50LmNoZWNrZWQgPSAhIXZh
bHVlOworKyAgICAgIH0sCisrCisrICAgICAgc3R5bGU6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVl
KSB7CisrICAgICAgICBlbGVtZW50LnN0eWxlLmNzc1RleHQgPSB2YWx1ZSA/IHZhbHVlIDogJyc7
CisrICAgICAgfQorKyAgICB9CisrICB9OworKworKyAgRWxlbWVudC5fYXR0cmlidXRlVHJhbnNs
YXRpb25zLmhhcyA9IHt9OworKworKyAgJHcoJ2NvbFNwYW4gcm93U3BhbiB2QWxpZ24gZGF0ZVRp
bWUgYWNjZXNzS2V5IHRhYkluZGV4ICcgKworKyAgICAgICdlbmNUeXBlIG1heExlbmd0aCByZWFk
T25seSBsb25nRGVzYyBmcmFtZUJvcmRlcicpLmVhY2goZnVuY3Rpb24oYXR0cikgeworKyAgICBF
bGVtZW50Ll9hdHRyaWJ1dGVUcmFuc2xhdGlvbnMud3JpdGUubmFtZXNbYXR0ci50b0xvd2VyQ2Fz
ZSgpXSA9IGF0dHI7CisrICAgIEVsZW1lbnQuX2F0dHJpYnV0ZVRyYW5zbGF0aW9ucy5oYXNbYXR0
ci50b0xvd2VyQ2FzZSgpXSA9IGF0dHI7CisrICB9KTsKKysKKysgIChmdW5jdGlvbih2KSB7Cisr
ICAgIE9iamVjdC5leHRlbmQodiwgeworKyAgICAgIGhyZWY6ICAgICAgICB2Ll9nZXRBdHRyMiwK
KysgICAgICBzcmM6ICAgICAgICAgdi5fZ2V0QXR0cjIsCisrICAgICAgdHlwZTogICAgICAgIHYu
X2dldEF0dHIsCisrICAgICAgYWN0aW9uOiAgICAgIHYuX2dldEF0dHJOb2RlLAorKyAgICAgIGRp
c2FibGVkOiAgICB2Ll9mbGFnLAorKyAgICAgIGNoZWNrZWQ6ICAgICB2Ll9mbGFnLAorKyAgICAg
IHJlYWRvbmx5OiAgICB2Ll9mbGFnLAorKyAgICAgIG11bHRpcGxlOiAgICB2Ll9mbGFnLAorKyAg
ICAgIG9ubG9hZDogICAgICB2Ll9nZXRFdiwKKysgICAgICBvbnVubG9hZDogICAgdi5fZ2V0RXYs
CisrICAgICAgb25jbGljazogICAgIHYuX2dldEV2LAorKyAgICAgIG9uZGJsY2xpY2s6ICB2Ll9n
ZXRFdiwKKysgICAgICBvbm1vdXNlZG93bjogdi5fZ2V0RXYsCisrICAgICAgb25tb3VzZXVwOiAg
IHYuX2dldEV2LAorKyAgICAgIG9ubW91c2VvdmVyOiB2Ll9nZXRFdiwKKysgICAgICBvbm1vdXNl
bW92ZTogdi5fZ2V0RXYsCisrICAgICAgb25tb3VzZW91dDogIHYuX2dldEV2LAorKyAgICAgIG9u
Zm9jdXM6ICAgICB2Ll9nZXRFdiwKKysgICAgICBvbmJsdXI6ICAgICAgdi5fZ2V0RXYsCisrICAg
ICAgb25rZXlwcmVzczogIHYuX2dldEV2LAorKyAgICAgIG9ua2V5ZG93bjogICB2Ll9nZXRFdiwK
KysgICAgICBvbmtleXVwOiAgICAgdi5fZ2V0RXYsCisrICAgICAgb25zdWJtaXQ6ICAgIHYuX2dl
dEV2LAorKyAgICAgIG9ucmVzZXQ6ICAgICB2Ll9nZXRFdiwKKysgICAgICBvbnNlbGVjdDogICAg
di5fZ2V0RXYsCisrICAgICAgb25jaGFuZ2U6ICAgIHYuX2dldEV2CisrICAgIH0pOworKyAgfSko
RWxlbWVudC5fYXR0cmlidXRlVHJhbnNsYXRpb25zLnJlYWQudmFsdWVzKTsKKysKKysgIGlmIChQ
cm90b3R5cGUuQnJvd3NlckZlYXR1cmVzLkVsZW1lbnRFeHRlbnNpb25zKSB7CisrICAgIChmdW5j
dGlvbigpIHsKKysgICAgICBmdW5jdGlvbiBfZGVzY2VuZGFudHMoZWxlbWVudCkgeworKyAgICAg
ICAgdmFyIG5vZGVzID0gZWxlbWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpLCByZXN1bHRz
ID0gW107CisrICAgICAgICBmb3IgKHZhciBpID0gMCwgbm9kZTsgbm9kZSA9IG5vZGVzW2ldOyBp
KyspCisrICAgICAgICAgIGlmIChub2RlLnRhZ05hbWUgIT09ICIhIikgLy8gRmlsdGVyIG91dCBj
b21tZW50IG5vZGVzLgorKyAgICAgICAgICAgIHJlc3VsdHMucHVzaChub2RlKTsKKysgICAgICAg
IHJldHVybiByZXN1bHRzOworKyAgICAgIH0KKysKKysgICAgICBFbGVtZW50Lk1ldGhvZHMuZG93
biA9IGZ1bmN0aW9uKGVsZW1lbnQsIGV4cHJlc3Npb24sIGluZGV4KSB7CisrICAgICAgICBlbGVt
ZW50ID0gJChlbGVtZW50KTsKKysgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpIHJl
dHVybiBlbGVtZW50LmZpcnN0RGVzY2VuZGFudCgpOworKyAgICAgICAgcmV0dXJuIE9iamVjdC5p
c051bWJlcihleHByZXNzaW9uKSA/IF9kZXNjZW5kYW50cyhlbGVtZW50KVtleHByZXNzaW9uXSA6
CisrICAgICAgICAgIEVsZW1lbnQuc2VsZWN0KGVsZW1lbnQsIGV4cHJlc3Npb24pW2luZGV4IHx8
IDBdOworKyAgICAgIH0KKysgICAgfSkoKTsKKysgIH0KKysKKyt9CisrCisrZWxzZSBpZiAoUHJv
dG90eXBlLkJyb3dzZXIuR2Vja28gJiYgL3J2OjFcLjhcLjAvLnRlc3QobmF2aWdhdG9yLnVzZXJB
Z2VudCkpIHsKKysgIEVsZW1lbnQuTWV0aG9kcy5zZXRPcGFjaXR5ID0gZnVuY3Rpb24oZWxlbWVu
dCwgdmFsdWUpIHsKKysgICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CisrICAgIGVsZW1lbnQuc3R5
bGUub3BhY2l0eSA9ICh2YWx1ZSA9PSAxKSA/IDAuOTk5OTk5IDoKKysgICAgICAodmFsdWUgPT09
ICcnKSA/ICcnIDogKHZhbHVlIDwgMC4wMDAwMSkgPyAwIDogdmFsdWU7CisrICAgIHJldHVybiBl
bGVtZW50OworKyAgfTsKKyt9CisrCisrZWxzZSBpZiAoUHJvdG90eXBlLkJyb3dzZXIuV2ViS2l0
KSB7CisrICBFbGVtZW50Lk1ldGhvZHMuc2V0T3BhY2l0eSA9IGZ1bmN0aW9uKGVsZW1lbnQsIHZh
bHVlKSB7CisrICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOworKyAgICBlbGVtZW50LnN0eWxlLm9w
YWNpdHkgPSAodmFsdWUgPT0gMSB8fCB2YWx1ZSA9PT0gJycpID8gJycgOgorKyAgICAgICh2YWx1
ZSA8IDAuMDAwMDEpID8gMCA6IHZhbHVlOworKworKyAgICBpZiAodmFsdWUgPT0gMSkKKysgICAg
ICBpZiAoZWxlbWVudC50YWdOYW1lLnRvVXBwZXJDYXNlKCkgPT0gJ0lNRycgJiYgZWxlbWVudC53
aWR0aCkgeworKyAgICAgICAgZWxlbWVudC53aWR0aCsrOyBlbGVtZW50LndpZHRoLS07CisrICAg
ICAgfSBlbHNlIHRyeSB7CisrICAgICAgICB2YXIgbiA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2Rl
KCcgJyk7CisrICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKG4pOworKyAgICAgICAgZWxlbWVu
dC5yZW1vdmVDaGlsZChuKTsKKysgICAgICB9IGNhdGNoIChlKSB7IH0KKysKKysgICAgcmV0dXJu
IGVsZW1lbnQ7CisrICB9OworK30KKysKKytpZiAoJ291dGVySFRNTCcgaW4gZG9jdW1lbnQuZG9j
dW1lbnRFbGVtZW50KSB7CisrICBFbGVtZW50Lk1ldGhvZHMucmVwbGFjZSA9IGZ1bmN0aW9uKGVs
ZW1lbnQsIGNvbnRlbnQpIHsKKysgICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CisrCisrICAgIGlm
IChjb250ZW50ICYmIGNvbnRlbnQudG9FbGVtZW50KSBjb250ZW50ID0gY29udGVudC50b0VsZW1l
bnQoKTsKKysgICAgaWYgKE9iamVjdC5pc0VsZW1lbnQoY29udGVudCkpIHsKKysgICAgICBlbGVt
ZW50LnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGNvbnRlbnQsIGVsZW1lbnQpOworKyAgICAgIHJl
dHVybiBlbGVtZW50OworKyAgICB9CisrCisrICAgIGNvbnRlbnQgPSBPYmplY3QudG9IVE1MKGNv
bnRlbnQpOworKyAgICB2YXIgcGFyZW50ID0gZWxlbWVudC5wYXJlbnROb2RlLCB0YWdOYW1lID0g
cGFyZW50LnRhZ05hbWUudG9VcHBlckNhc2UoKTsKKysKKysgICAgaWYgKEVsZW1lbnQuX2luc2Vy
dGlvblRyYW5zbGF0aW9ucy50YWdzW3RhZ05hbWVdKSB7CisrICAgICAgdmFyIG5leHRTaWJsaW5n
ID0gZWxlbWVudC5uZXh0KCksCisrICAgICAgICAgIGZyYWdtZW50cyA9IEVsZW1lbnQuX2dldENv
bnRlbnRGcm9tQW5vbnltb3VzRWxlbWVudCh0YWdOYW1lLCBjb250ZW50LnN0cmlwU2NyaXB0cygp
KTsKKysgICAgICBwYXJlbnQucmVtb3ZlQ2hpbGQoZWxlbWVudCk7CisrICAgICAgaWYgKG5leHRT
aWJsaW5nKQorKyAgICAgICAgZnJhZ21lbnRzLmVhY2goZnVuY3Rpb24obm9kZSkgeyBwYXJlbnQu
aW5zZXJ0QmVmb3JlKG5vZGUsIG5leHRTaWJsaW5nKSB9KTsKKysgICAgICBlbHNlCisrICAgICAg
ICBmcmFnbWVudHMuZWFjaChmdW5jdGlvbihub2RlKSB7IHBhcmVudC5hcHBlbmRDaGlsZChub2Rl
KSB9KTsKKysgICAgfQorKyAgICBlbHNlIGVsZW1lbnQub3V0ZXJIVE1MID0gY29udGVudC5zdHJp
cFNjcmlwdHMoKTsKKysKKysgICAgY29udGVudC5ldmFsU2NyaXB0cy5iaW5kKGNvbnRlbnQpLmRl
ZmVyKCk7CisrICAgIHJldHVybiBlbGVtZW50OworKyAgfTsKKyt9CisrCisrRWxlbWVudC5fcmV0
dXJuT2Zmc2V0ID0gZnVuY3Rpb24obCwgdCkgeworKyAgdmFyIHJlc3VsdCA9IFtsLCB0XTsKKysg
IHJlc3VsdC5sZWZ0ID0gbDsKKysgIHJlc3VsdC50b3AgPSB0OworKyAgcmV0dXJuIHJlc3VsdDsK
Kyt9OworKworK0VsZW1lbnQuX2dldENvbnRlbnRGcm9tQW5vbnltb3VzRWxlbWVudCA9IGZ1bmN0
aW9uKHRhZ05hbWUsIGh0bWwsIGZvcmNlKSB7CisrICB2YXIgZGl2ID0gbmV3IEVsZW1lbnQoJ2Rp
dicpLAorKyAgICAgIHQgPSBFbGVtZW50Ll9pbnNlcnRpb25UcmFuc2xhdGlvbnMudGFnc1t0YWdO
YW1lXTsKKysKKysgIHZhciB3b3JrYXJvdW5kID0gZmFsc2U7CisrICBpZiAodCkgd29ya2Fyb3Vu
ZCA9IHRydWU7CisrICBlbHNlIGlmIChmb3JjZSkgeworKyAgICB3b3JrYXJvdW5kID0gdHJ1ZTsK
KysgICAgdCA9IFsnJywgJycsIDBdOworKyAgfQorKworKyAgaWYgKHdvcmthcm91bmQpIHsKKysg
ICAgZGl2LmlubmVySFRNTCA9ICcmbmJzcDsnICsgdFswXSArIGh0bWwgKyB0WzFdOworKyAgICBk
aXYucmVtb3ZlQ2hpbGQoZGl2LmZpcnN0Q2hpbGQpOworKyAgICBmb3IgKHZhciBpID0gdFsyXTsg
aS0tOyApIHsKKysgICAgICBkaXYgPSBkaXYuZmlyc3RDaGlsZDsKKysgICAgfQorKyAgfQorKyAg
ZWxzZSB7CisrICAgIGRpdi5pbm5lckhUTUwgPSBodG1sOworKyAgfQorKyAgcmV0dXJuICRBKGRp
di5jaGlsZE5vZGVzKTsKKyt9OworKworK0VsZW1lbnQuX2luc2VydGlvblRyYW5zbGF0aW9ucyA9
IHsKKysgIGJlZm9yZTogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkgeworKyAgICBlbGVtZW50LnBh
cmVudE5vZGUuaW5zZXJ0QmVmb3JlKG5vZGUsIGVsZW1lbnQpOworKyAgfSwKKysgIHRvcDogZnVu
Y3Rpb24oZWxlbWVudCwgbm9kZSkgeworKyAgICBlbGVtZW50Lmluc2VydEJlZm9yZShub2RlLCBl
bGVtZW50LmZpcnN0Q2hpbGQpOworKyAgfSwKKysgIGJvdHRvbTogZnVuY3Rpb24oZWxlbWVudCwg
bm9kZSkgeworKyAgICBlbGVtZW50LmFwcGVuZENoaWxkKG5vZGUpOworKyAgfSwKKysgIGFmdGVy
OiBmdW5jdGlvbihlbGVtZW50LCBub2RlKSB7CisrICAgIGVsZW1lbnQucGFyZW50Tm9kZS5pbnNl
cnRCZWZvcmUobm9kZSwgZWxlbWVudC5uZXh0U2libGluZyk7CisrICB9LAorKyAgdGFnczogewor
KyAgICBUQUJMRTogIFsnPHRhYmxlPicsICAgICAgICAgICAgICAgICc8L3RhYmxlPicsICAgICAg
ICAgICAgICAgICAgIDFdLAorKyAgICBUQk9EWTogIFsnPHRhYmxlPjx0Ym9keT4nLCAgICAgICAg
ICc8L3Rib2R5PjwvdGFibGU+JywgICAgICAgICAgIDJdLAorKyAgICBUUjogICAgIFsnPHRhYmxl
Pjx0Ym9keT48dHI+JywgICAgICc8L3RyPjwvdGJvZHk+PC90YWJsZT4nLCAgICAgIDNdLAorKyAg
ICBURDogICAgIFsnPHRhYmxlPjx0Ym9keT48dHI+PHRkPicsICc8L3RkPjwvdHI+PC90Ym9keT48
L3RhYmxlPicsIDRdLAorKyAgICBTRUxFQ1Q6IFsnPHNlbGVjdD4nLCAgICAgICAgICAgICAgICc8
L3NlbGVjdD4nLCAgICAgICAgICAgICAgICAgIDFdCisrICB9CisrfTsKKysKKysoZnVuY3Rpb24o
KSB7CisrICB2YXIgdGFncyA9IEVsZW1lbnQuX2luc2VydGlvblRyYW5zbGF0aW9ucy50YWdzOwor
KyAgT2JqZWN0LmV4dGVuZCh0YWdzLCB7CisrICAgIFRIRUFEOiB0YWdzLlRCT0RZLAorKyAgICBU
Rk9PVDogdGFncy5UQk9EWSwKKysgICAgVEg6ICAgIHRhZ3MuVEQKKysgIH0pOworK30pKCk7Cisr
CisrRWxlbWVudC5NZXRob2RzLlNpbXVsYXRlZCA9IHsKKysgIGhhc0F0dHJpYnV0ZTogZnVuY3Rp
b24oZWxlbWVudCwgYXR0cmlidXRlKSB7CisrICAgIGF0dHJpYnV0ZSA9IEVsZW1lbnQuX2F0dHJp
YnV0ZVRyYW5zbGF0aW9ucy5oYXNbYXR0cmlidXRlXSB8fCBhdHRyaWJ1dGU7CisrICAgIHZhciBu
b2RlID0gJChlbGVtZW50KS5nZXRBdHRyaWJ1dGVOb2RlKGF0dHJpYnV0ZSk7CisrICAgIHJldHVy
biAhIShub2RlICYmIG5vZGUuc3BlY2lmaWVkKTsKKysgIH0KKyt9OworKworK0VsZW1lbnQuTWV0
aG9kcy5CeVRhZyA9IHsgfTsKKysKKytPYmplY3QuZXh0ZW5kKEVsZW1lbnQsIEVsZW1lbnQuTWV0
aG9kcyk7CisrCisrKGZ1bmN0aW9uKGRpdikgeworKworKyAgaWYgKCFQcm90b3R5cGUuQnJvd3Nl
ckZlYXR1cmVzLkVsZW1lbnRFeHRlbnNpb25zICYmIGRpdlsnX19wcm90b19fJ10pIHsKKysgICAg
d2luZG93LkhUTUxFbGVtZW50ID0geyB9OworKyAgICB3aW5kb3cuSFRNTEVsZW1lbnQucHJvdG90
eXBlID0gZGl2WydfX3Byb3RvX18nXTsKKysgICAgUHJvdG90eXBlLkJyb3dzZXJGZWF0dXJlcy5F
bGVtZW50RXh0ZW5zaW9ucyA9IHRydWU7CisrICB9CisrCisrICBkaXYgPSBudWxsOworKworK30p
KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTsKKysKKytFbGVtZW50LmV4dGVuZCA9IChm
dW5jdGlvbigpIHsKKysKKysgIGZ1bmN0aW9uIGNoZWNrRGVmaWNpZW5jeSh0YWdOYW1lKSB7Cisr
ICAgIGlmICh0eXBlb2Ygd2luZG93LkVsZW1lbnQgIT0gJ3VuZGVmaW5lZCcpIHsKKysgICAgICB2
YXIgcHJvdG8gPSB3aW5kb3cuRWxlbWVudC5wcm90b3R5cGU7CisrICAgICAgaWYgKHByb3RvKSB7
CisrICAgICAgICB2YXIgaWQgPSAnXycgKyAoTWF0aC5yYW5kb20oKSsnJykuc2xpY2UoMiksCisr
ICAgICAgICAgICAgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpOworKyAgICAg
ICAgcHJvdG9baWRdID0gJ3gnOworKyAgICAgICAgdmFyIGlzQnVnZ3kgPSAoZWxbaWRdICE9PSAn
eCcpOworKyAgICAgICAgZGVsZXRlIHByb3RvW2lkXTsKKysgICAgICAgIGVsID0gbnVsbDsKKysg
ICAgICAgIHJldHVybiBpc0J1Z2d5OworKyAgICAgIH0KKysgICAgfQorKyAgICByZXR1cm4gZmFs
c2U7CisrICB9CisrCisrICBmdW5jdGlvbiBleHRlbmRFbGVtZW50V2l0aChlbGVtZW50LCBtZXRo
b2RzKSB7CisrICAgIGZvciAodmFyIHByb3BlcnR5IGluIG1ldGhvZHMpIHsKKysgICAgICB2YXIg
dmFsdWUgPSBtZXRob2RzW3Byb3BlcnR5XTsKKysgICAgICBpZiAoT2JqZWN0LmlzRnVuY3Rpb24o
dmFsdWUpICYmICEocHJvcGVydHkgaW4gZWxlbWVudCkpCisrICAgICAgICBlbGVtZW50W3Byb3Bl
cnR5XSA9IHZhbHVlLm1ldGhvZGl6ZSgpOworKyAgICB9CisrICB9CisrCisrICB2YXIgSFRNTE9C
SkVDVEVMRU1FTlRfUFJPVE9UWVBFX0JVR0dZID0gY2hlY2tEZWZpY2llbmN5KCdvYmplY3QnKTsK
KysKKysgIGlmIChQcm90b3R5cGUuQnJvd3NlckZlYXR1cmVzLlNwZWNpZmljRWxlbWVudEV4dGVu
c2lvbnMpIHsKKysgICAgaWYgKEhUTUxPQkpFQ1RFTEVNRU5UX1BST1RPVFlQRV9CVUdHWSkgewor
KyAgICAgIHJldHVybiBmdW5jdGlvbihlbGVtZW50KSB7CisrICAgICAgICBpZiAoZWxlbWVudCAm
JiB0eXBlb2YgZWxlbWVudC5fZXh0ZW5kZWRCeVByb3RvdHlwZSA9PSAndW5kZWZpbmVkJykgewor
KyAgICAgICAgICB2YXIgdCA9IGVsZW1lbnQudGFnTmFtZTsKKysgICAgICAgICAgaWYgKHQgJiYg
KC9eKD86b2JqZWN0fGFwcGxldHxlbWJlZCkkL2kudGVzdCh0KSkpIHsKKysgICAgICAgICAgICBl
eHRlbmRFbGVtZW50V2l0aChlbGVtZW50LCBFbGVtZW50Lk1ldGhvZHMpOworKyAgICAgICAgICAg
IGV4dGVuZEVsZW1lbnRXaXRoKGVsZW1lbnQsIEVsZW1lbnQuTWV0aG9kcy5TaW11bGF0ZWQpOwor
KyAgICAgICAgICAgIGV4dGVuZEVsZW1lbnRXaXRoKGVsZW1lbnQsIEVsZW1lbnQuTWV0aG9kcy5C
eVRhZ1t0LnRvVXBwZXJDYXNlKCldKTsKKysgICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICAg
ICAgcmV0dXJuIGVsZW1lbnQ7CisrICAgICAgfQorKyAgICB9CisrICAgIHJldHVybiBQcm90b3R5
cGUuSzsKKysgIH0KKysKKysgIHZhciBNZXRob2RzID0geyB9LCBCeVRhZyA9IEVsZW1lbnQuTWV0
aG9kcy5CeVRhZzsKKysKKysgIHZhciBleHRlbmQgPSBPYmplY3QuZXh0ZW5kKGZ1bmN0aW9uKGVs
ZW1lbnQpIHsKKysgICAgaWYgKCFlbGVtZW50IHx8IHR5cGVvZiBlbGVtZW50Ll9leHRlbmRlZEJ5
UHJvdG90eXBlICE9ICd1bmRlZmluZWQnIHx8CisrICAgICAgICBlbGVtZW50Lm5vZGVUeXBlICE9
IDEgfHwgZWxlbWVudCA9PSB3aW5kb3cpIHJldHVybiBlbGVtZW50OworKworKyAgICB2YXIgbWV0
aG9kcyA9IE9iamVjdC5jbG9uZShNZXRob2RzKSwKKysgICAgICAgIHRhZ05hbWUgPSBlbGVtZW50
LnRhZ05hbWUudG9VcHBlckNhc2UoKTsKKysKKysgICAgaWYgKEJ5VGFnW3RhZ05hbWVdKSBPYmpl
Y3QuZXh0ZW5kKG1ldGhvZHMsIEJ5VGFnW3RhZ05hbWVdKTsKKysKKysgICAgZXh0ZW5kRWxlbWVu
dFdpdGgoZWxlbWVudCwgbWV0aG9kcyk7CisrCisrICAgIGVsZW1lbnQuX2V4dGVuZGVkQnlQcm90
b3R5cGUgPSBQcm90b3R5cGUuZW1wdHlGdW5jdGlvbjsKKysgICAgcmV0dXJuIGVsZW1lbnQ7Cisr
CisrICB9LCB7CisrICAgIHJlZnJlc2g6IGZ1bmN0aW9uKCkgeworKyAgICAgIGlmICghUHJvdG90
eXBlLkJyb3dzZXJGZWF0dXJlcy5FbGVtZW50RXh0ZW5zaW9ucykgeworKyAgICAgICAgT2JqZWN0
LmV4dGVuZChNZXRob2RzLCBFbGVtZW50Lk1ldGhvZHMpOworKyAgICAgICAgT2JqZWN0LmV4dGVu
ZChNZXRob2RzLCBFbGVtZW50Lk1ldGhvZHMuU2ltdWxhdGVkKTsKKysgICAgICB9CisrICAgIH0K
KysgIH0pOworKworKyAgZXh0ZW5kLnJlZnJlc2goKTsKKysgIHJldHVybiBleHRlbmQ7CisrfSko
KTsKKysKKytpZiAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lmhhc0F0dHJpYnV0ZSkgeworKyAg
RWxlbWVudC5oYXNBdHRyaWJ1dGUgPSBmdW5jdGlvbihlbGVtZW50LCBhdHRyaWJ1dGUpIHsKKysg
ICAgcmV0dXJuIGVsZW1lbnQuaGFzQXR0cmlidXRlKGF0dHJpYnV0ZSk7CisrICB9OworK30KKytl
bHNlIHsKKysgIEVsZW1lbnQuaGFzQXR0cmlidXRlID0gRWxlbWVudC5NZXRob2RzLlNpbXVsYXRl
ZC5oYXNBdHRyaWJ1dGU7CisrfQorKworK0VsZW1lbnQuYWRkTWV0aG9kcyA9IGZ1bmN0aW9uKG1l
dGhvZHMpIHsKKysgIHZhciBGID0gUHJvdG90eXBlLkJyb3dzZXJGZWF0dXJlcywgVCA9IEVsZW1l
bnQuTWV0aG9kcy5CeVRhZzsKKysKKysgIGlmICghbWV0aG9kcykgeworKyAgICBPYmplY3QuZXh0
ZW5kKEZvcm0sIEZvcm0uTWV0aG9kcyk7CisrICAgIE9iamVjdC5leHRlbmQoRm9ybS5FbGVtZW50
LCBGb3JtLkVsZW1lbnQuTWV0aG9kcyk7CisrICAgIE9iamVjdC5leHRlbmQoRWxlbWVudC5NZXRo
b2RzLkJ5VGFnLCB7CisrICAgICAgIkZPUk0iOiAgICAgT2JqZWN0LmNsb25lKEZvcm0uTWV0aG9k
cyksCisrICAgICAgIklOUFVUIjogICAgT2JqZWN0LmNsb25lKEZvcm0uRWxlbWVudC5NZXRob2Rz
KSwKKysgICAgICAiU0VMRUNUIjogICBPYmplY3QuY2xvbmUoRm9ybS5FbGVtZW50Lk1ldGhvZHMp
LAorKyAgICAgICJURVhUQVJFQSI6IE9iamVjdC5jbG9uZShGb3JtLkVsZW1lbnQuTWV0aG9kcyks
CisrICAgICAgIkJVVFRPTiI6ICAgT2JqZWN0LmNsb25lKEZvcm0uRWxlbWVudC5NZXRob2RzKQor
KyAgICB9KTsKKysgIH0KKysKKysgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDIpIHsKKysgICAg
dmFyIHRhZ05hbWUgPSBtZXRob2RzOworKyAgICBtZXRob2RzID0gYXJndW1lbnRzWzFdOworKyAg
fQorKworKyAgaWYgKCF0YWdOYW1lKSBPYmplY3QuZXh0ZW5kKEVsZW1lbnQuTWV0aG9kcywgbWV0
aG9kcyB8fCB7IH0pOworKyAgZWxzZSB7CisrICAgIGlmIChPYmplY3QuaXNBcnJheSh0YWdOYW1l
KSkgdGFnTmFtZS5lYWNoKGV4dGVuZCk7CisrICAgIGVsc2UgZXh0ZW5kKHRhZ05hbWUpOworKyAg
fQorKworKyAgZnVuY3Rpb24gZXh0ZW5kKHRhZ05hbWUpIHsKKysgICAgdGFnTmFtZSA9IHRhZ05h
bWUudG9VcHBlckNhc2UoKTsKKysgICAgaWYgKCFFbGVtZW50Lk1ldGhvZHMuQnlUYWdbdGFnTmFt
ZV0pCisrICAgICAgRWxlbWVudC5NZXRob2RzLkJ5VGFnW3RhZ05hbWVdID0geyB9OworKyAgICBP
YmplY3QuZXh0ZW5kKEVsZW1lbnQuTWV0aG9kcy5CeVRhZ1t0YWdOYW1lXSwgbWV0aG9kcyk7Cisr
ICB9CisrCisrICBmdW5jdGlvbiBjb3B5KG1ldGhvZHMsIGRlc3RpbmF0aW9uLCBvbmx5SWZBYnNl
bnQpIHsKKysgICAgb25seUlmQWJzZW50ID0gb25seUlmQWJzZW50IHx8IGZhbHNlOworKyAgICBm
b3IgKHZhciBwcm9wZXJ0eSBpbiBtZXRob2RzKSB7CisrICAgICAgdmFyIHZhbHVlID0gbWV0aG9k
c1twcm9wZXJ0eV07CisrICAgICAgaWYgKCFPYmplY3QuaXNGdW5jdGlvbih2YWx1ZSkpIGNvbnRp
bnVlOworKyAgICAgIGlmICghb25seUlmQWJzZW50IHx8ICEocHJvcGVydHkgaW4gZGVzdGluYXRp
b24pKQorKyAgICAgICAgZGVzdGluYXRpb25bcHJvcGVydHldID0gdmFsdWUubWV0aG9kaXplKCk7
CisrICAgIH0KKysgIH0KKysKKysgIGZ1bmN0aW9uIGZpbmRET01DbGFzcyh0YWdOYW1lKSB7Cisr
ICAgIHZhciBrbGFzczsKKysgICAgdmFyIHRyYW5zID0geworKyAgICAgICJPUFRHUk9VUCI6ICJP
cHRHcm91cCIsICJURVhUQVJFQSI6ICJUZXh0QXJlYSIsICJQIjogIlBhcmFncmFwaCIsCisrICAg
ICAgIkZJRUxEU0VUIjogIkZpZWxkU2V0IiwgIlVMIjogIlVMaXN0IiwgIk9MIjogIk9MaXN0Iiwg
IkRMIjogIkRMaXN0IiwKKysgICAgICAiRElSIjogIkRpcmVjdG9yeSIsICJIMSI6ICJIZWFkaW5n
IiwgIkgyIjogIkhlYWRpbmciLCAiSDMiOiAiSGVhZGluZyIsCisrICAgICAgIkg0IjogIkhlYWRp
bmciLCAiSDUiOiAiSGVhZGluZyIsICJINiI6ICJIZWFkaW5nIiwgIlEiOiAiUXVvdGUiLAorKyAg
ICAgICJJTlMiOiAiTW9kIiwgIkRFTCI6ICJNb2QiLCAiQSI6ICJBbmNob3IiLCAiSU1HIjogIklt
YWdlIiwgIkNBUFRJT04iOgorKyAgICAgICJUYWJsZUNhcHRpb24iLCAiQ09MIjogIlRhYmxlQ29s
IiwgIkNPTEdST1VQIjogIlRhYmxlQ29sIiwgIlRIRUFEIjoKKysgICAgICAiVGFibGVTZWN0aW9u
IiwgIlRGT09UIjogIlRhYmxlU2VjdGlvbiIsICJUQk9EWSI6ICJUYWJsZVNlY3Rpb24iLCAiVFIi
OgorKyAgICAgICJUYWJsZVJvdyIsICJUSCI6ICJUYWJsZUNlbGwiLCAiVEQiOiAiVGFibGVDZWxs
IiwgIkZSQU1FU0VUIjoKKysgICAgICAiRnJhbWVTZXQiLCAiSUZSQU1FIjogIklGcmFtZSIKKysg
ICAgfTsKKysgICAgaWYgKHRyYW5zW3RhZ05hbWVdKSBrbGFzcyA9ICdIVE1MJyArIHRyYW5zW3Rh
Z05hbWVdICsgJ0VsZW1lbnQnOworKyAgICBpZiAod2luZG93W2tsYXNzXSkgcmV0dXJuIHdpbmRv
d1trbGFzc107CisrICAgIGtsYXNzID0gJ0hUTUwnICsgdGFnTmFtZSArICdFbGVtZW50JzsKKysg
ICAgaWYgKHdpbmRvd1trbGFzc10pIHJldHVybiB3aW5kb3dba2xhc3NdOworKyAgICBrbGFzcyA9
ICdIVE1MJyArIHRhZ05hbWUuY2FwaXRhbGl6ZSgpICsgJ0VsZW1lbnQnOworKyAgICBpZiAod2lu
ZG93W2tsYXNzXSkgcmV0dXJuIHdpbmRvd1trbGFzc107CisrCisrICAgIHZhciBlbGVtZW50ID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKSwKKysgICAgICAgIHByb3RvID0gZWxlbWVu
dFsnX19wcm90b19fJ10gfHwgZWxlbWVudC5jb25zdHJ1Y3Rvci5wcm90b3R5cGU7CisrCisrICAg
IGVsZW1lbnQgPSBudWxsOworKyAgICByZXR1cm4gcHJvdG87CisrICB9CisrCisrICB2YXIgZWxl
bWVudFByb3RvdHlwZSA9IHdpbmRvdy5IVE1MRWxlbWVudCA/IEhUTUxFbGVtZW50LnByb3RvdHlw
ZSA6CisrICAgRWxlbWVudC5wcm90b3R5cGU7CisrCisrICBpZiAoRi5FbGVtZW50RXh0ZW5zaW9u
cykgeworKyAgICBjb3B5KEVsZW1lbnQuTWV0aG9kcywgZWxlbWVudFByb3RvdHlwZSk7CisrICAg
IGNvcHkoRWxlbWVudC5NZXRob2RzLlNpbXVsYXRlZCwgZWxlbWVudFByb3RvdHlwZSwgdHJ1ZSk7
CisrICB9CisrCisrICBpZiAoRi5TcGVjaWZpY0VsZW1lbnRFeHRlbnNpb25zKSB7CisrICAgIGZv
ciAodmFyIHRhZyBpbiBFbGVtZW50Lk1ldGhvZHMuQnlUYWcpIHsKKysgICAgICB2YXIga2xhc3Mg
PSBmaW5kRE9NQ2xhc3ModGFnKTsKKysgICAgICBpZiAoT2JqZWN0LmlzVW5kZWZpbmVkKGtsYXNz
KSkgY29udGludWU7CisrICAgICAgY29weShUW3RhZ10sIGtsYXNzLnByb3RvdHlwZSk7CisrICAg
IH0KKysgIH0KKysKKysgIE9iamVjdC5leHRlbmQoRWxlbWVudCwgRWxlbWVudC5NZXRob2RzKTsK
KysgIGRlbGV0ZSBFbGVtZW50LkJ5VGFnOworKworKyAgaWYgKEVsZW1lbnQuZXh0ZW5kLnJlZnJl
c2gpIEVsZW1lbnQuZXh0ZW5kLnJlZnJlc2goKTsKKysgIEVsZW1lbnQuY2FjaGUgPSB7IH07Cisr
fTsKKysKKysKKytkb2N1bWVudC52aWV3cG9ydCA9IHsKKysKKysgIGdldERpbWVuc2lvbnM6IGZ1
bmN0aW9uKCkgeworKyAgICByZXR1cm4geyB3aWR0aDogdGhpcy5nZXRXaWR0aCgpLCBoZWlnaHQ6
IHRoaXMuZ2V0SGVpZ2h0KCkgfTsKKysgIH0sCisrCisrICBnZXRTY3JvbGxPZmZzZXRzOiBmdW5j
dGlvbigpIHsKKysgICAgcmV0dXJuIEVsZW1lbnQuX3JldHVybk9mZnNldCgKKysgICAgICB3aW5k
b3cucGFnZVhPZmZzZXQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQgfHwg
ZG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0LAorKyAgICAgIHdpbmRvdy5wYWdlWU9mZnNldCB8fCBk
b2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wICB8fCBkb2N1bWVudC5ib2R5LnNjcm9s
bFRvcCk7CisrICB9CisrfTsKKysKKysoZnVuY3Rpb24odmlld3BvcnQpIHsKKysgIHZhciBCID0g
UHJvdG90eXBlLkJyb3dzZXIsIGRvYyA9IGRvY3VtZW50LCBlbGVtZW50LCBwcm9wZXJ0eSA9IHt9
OworKworKyAgZnVuY3Rpb24gZ2V0Um9vdEVsZW1lbnQoKSB7CisrICAgIGlmIChCLldlYktpdCAm
JiAhZG9jLmV2YWx1YXRlKQorKyAgICAgIHJldHVybiBkb2N1bWVudDsKKysKKysgICAgaWYgKEIu
T3BlcmEgJiYgd2luZG93LnBhcnNlRmxvYXQod2luZG93Lm9wZXJhLnZlcnNpb24oKSkgPCA5LjUp
CisrICAgICAgcmV0dXJuIGRvY3VtZW50LmJvZHk7CisrCisrICAgIHJldHVybiBkb2N1bWVudC5k
b2N1bWVudEVsZW1lbnQ7CisrICB9CisrCisrICBmdW5jdGlvbiBkZWZpbmUoRCkgeworKyAgICBp
ZiAoIWVsZW1lbnQpIGVsZW1lbnQgPSBnZXRSb290RWxlbWVudCgpOworKworKyAgICBwcm9wZXJ0
eVtEXSA9ICdjbGllbnQnICsgRDsKKysKKysgICAgdmlld3BvcnRbJ2dldCcgKyBEXSA9IGZ1bmN0
aW9uKCkgeyByZXR1cm4gZWxlbWVudFtwcm9wZXJ0eVtEXV0gfTsKKysgICAgcmV0dXJuIHZpZXdw
b3J0WydnZXQnICsgRF0oKTsKKysgIH0KKysKKysgIHZpZXdwb3J0LmdldFdpZHRoICA9IGRlZmlu
ZS5jdXJyeSgnV2lkdGgnKTsKKysKKysgIHZpZXdwb3J0LmdldEhlaWdodCA9IGRlZmluZS5jdXJy
eSgnSGVpZ2h0Jyk7CisrfSkoZG9jdW1lbnQudmlld3BvcnQpOworKworKworK0VsZW1lbnQuU3Rv
cmFnZSA9IHsKKysgIFVJRDogMQorK307CisrCisrRWxlbWVudC5hZGRNZXRob2RzKHsKKysgIGdl
dFN0b3JhZ2U6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKysgICAgaWYgKCEoZWxlbWVudCA9ICQoZWxl
bWVudCkpKSByZXR1cm47CisrCisrICAgIHZhciB1aWQ7CisrICAgIGlmIChlbGVtZW50ID09PSB3
aW5kb3cpIHsKKysgICAgICB1aWQgPSAwOworKyAgICB9IGVsc2UgeworKyAgICAgIGlmICh0eXBl
b2YgZWxlbWVudC5fcHJvdG90eXBlVUlEID09PSAidW5kZWZpbmVkIikKKysgICAgICAgIGVsZW1l
bnQuX3Byb3RvdHlwZVVJRCA9IEVsZW1lbnQuU3RvcmFnZS5VSUQrKzsKKysgICAgICB1aWQgPSBl
bGVtZW50Ll9wcm90b3R5cGVVSUQ7CisrICAgIH0KKysKKysgICAgaWYgKCFFbGVtZW50LlN0b3Jh
Z2VbdWlkXSkKKysgICAgICBFbGVtZW50LlN0b3JhZ2VbdWlkXSA9ICRIKCk7CisrCisrICAgIHJl
dHVybiBFbGVtZW50LlN0b3JhZ2VbdWlkXTsKKysgIH0sCisrCisrICBzdG9yZTogZnVuY3Rpb24o
ZWxlbWVudCwga2V5LCB2YWx1ZSkgeworKyAgICBpZiAoIShlbGVtZW50ID0gJChlbGVtZW50KSkp
IHJldHVybjsKKysKKysgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHsKKysgICAgICBF
bGVtZW50LmdldFN0b3JhZ2UoZWxlbWVudCkudXBkYXRlKGtleSk7CisrICAgIH0gZWxzZSB7Cisr
ICAgICAgRWxlbWVudC5nZXRTdG9yYWdlKGVsZW1lbnQpLnNldChrZXksIHZhbHVlKTsKKysgICAg
fQorKworKyAgICByZXR1cm4gZWxlbWVudDsKKysgIH0sCisrCisrICByZXRyaWV2ZTogZnVuY3Rp
b24oZWxlbWVudCwga2V5LCBkZWZhdWx0VmFsdWUpIHsKKysgICAgaWYgKCEoZWxlbWVudCA9ICQo
ZWxlbWVudCkpKSByZXR1cm47CisrICAgIHZhciBoYXNoID0gRWxlbWVudC5nZXRTdG9yYWdlKGVs
ZW1lbnQpLCB2YWx1ZSA9IGhhc2guZ2V0KGtleSk7CisrCisrICAgIGlmIChPYmplY3QuaXNVbmRl
ZmluZWQodmFsdWUpKSB7CisrICAgICAgaGFzaC5zZXQoa2V5LCBkZWZhdWx0VmFsdWUpOworKyAg
ICAgIHZhbHVlID0gZGVmYXVsdFZhbHVlOworKyAgICB9CisrCisrICAgIHJldHVybiB2YWx1ZTsK
KysgIH0sCisrCisrICBjbG9uZTogZnVuY3Rpb24oZWxlbWVudCwgZGVlcCkgeworKyAgICBpZiAo
IShlbGVtZW50ID0gJChlbGVtZW50KSkpIHJldHVybjsKKysgICAgdmFyIGNsb25lID0gZWxlbWVu
dC5jbG9uZU5vZGUoZGVlcCk7CisrICAgIGNsb25lLl9wcm90b3R5cGVVSUQgPSB2b2lkIDA7Cisr
ICAgIGlmIChkZWVwKSB7CisrICAgICAgdmFyIGRlc2NlbmRhbnRzID0gRWxlbWVudC5zZWxlY3Qo
Y2xvbmUsICcqJyksCisrICAgICAgICAgIGkgPSBkZXNjZW5kYW50cy5sZW5ndGg7CisrICAgICAg
d2hpbGUgKGktLSkgeworKyAgICAgICAgZGVzY2VuZGFudHNbaV0uX3Byb3RvdHlwZVVJRCA9IHZv
aWQgMDsKKysgICAgICB9CisrICAgIH0KKysgICAgcmV0dXJuIEVsZW1lbnQuZXh0ZW5kKGNsb25l
KTsKKysgIH0sCisrCisrICBwdXJnZTogZnVuY3Rpb24oZWxlbWVudCkgeworKyAgICBpZiAoIShl
bGVtZW50ID0gJChlbGVtZW50KSkpIHJldHVybjsKKysgICAgdmFyIHB1cmdlRWxlbWVudCA9IEVs
ZW1lbnQuX3B1cmdlRWxlbWVudDsKKysKKysgICAgcHVyZ2VFbGVtZW50KGVsZW1lbnQpOworKwor
KyAgICB2YXIgZGVzY2VuZGFudHMgPSBlbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJyks
CisrICAgICBpID0gZGVzY2VuZGFudHMubGVuZ3RoOworKworKyAgICB3aGlsZSAoaS0tKSBwdXJn
ZUVsZW1lbnQoZGVzY2VuZGFudHNbaV0pOworKworKyAgICByZXR1cm4gbnVsbDsKKysgIH0KKyt9
KTsKKysKKysoZnVuY3Rpb24oKSB7CisrCisrICBmdW5jdGlvbiB0b0RlY2ltYWwocGN0U3RyaW5n
KSB7CisrICAgIHZhciBtYXRjaCA9IHBjdFN0cmluZy5tYXRjaCgvXihcZCspJT8kL2kpOworKyAg
ICBpZiAoIW1hdGNoKSByZXR1cm4gbnVsbDsKKysgICAgcmV0dXJuIChOdW1iZXIobWF0Y2hbMV0p
IC8gMTAwKTsKKysgIH0KKysKKysgIGZ1bmN0aW9uIGdldFBpeGVsVmFsdWUodmFsdWUsIHByb3Bl
cnR5LCBjb250ZXh0KSB7CisrICAgIHZhciBlbGVtZW50ID0gbnVsbDsKKysgICAgaWYgKE9iamVj
dC5pc0VsZW1lbnQodmFsdWUpKSB7CisrICAgICAgZWxlbWVudCA9IHZhbHVlOworKyAgICAgIHZh
bHVlID0gZWxlbWVudC5nZXRTdHlsZShwcm9wZXJ0eSk7CisrICAgIH0KKysKKysgICAgaWYgKHZh
bHVlID09PSBudWxsKSB7CisrICAgICAgcmV0dXJuIG51bGw7CisrICAgIH0KKysKKysgICAgaWYg
KCgvXig/Oi0pP1xkKyhcLlxkKyk/KHB4KT8kL2kpLnRlc3QodmFsdWUpKSB7CisrICAgICAgcmV0
dXJuIHdpbmRvdy5wYXJzZUZsb2F0KHZhbHVlKTsKKysgICAgfQorKworKyAgICB2YXIgaXNQZXJj
ZW50YWdlID0gdmFsdWUuaW5jbHVkZSgnJScpLCBpc1ZpZXdwb3J0ID0gKGNvbnRleHQgPT09IGRv
Y3VtZW50LnZpZXdwb3J0KTsKKysKKysgICAgaWYgKC9cZC8udGVzdCh2YWx1ZSkgJiYgZWxlbWVu
dCAmJiBlbGVtZW50LnJ1bnRpbWVTdHlsZSAmJiAhKGlzUGVyY2VudGFnZSAmJiBpc1ZpZXdwb3J0
KSkgeworKyAgICAgIHZhciBzdHlsZSA9IGVsZW1lbnQuc3R5bGUubGVmdCwgclN0eWxlID0gZWxl
bWVudC5ydW50aW1lU3R5bGUubGVmdDsKKysgICAgICBlbGVtZW50LnJ1bnRpbWVTdHlsZS5sZWZ0
ID0gZWxlbWVudC5jdXJyZW50U3R5bGUubGVmdDsKKysgICAgICBlbGVtZW50LnN0eWxlLmxlZnQg
PSB2YWx1ZSB8fCAwOworKyAgICAgIHZhbHVlID0gZWxlbWVudC5zdHlsZS5waXhlbExlZnQ7Cisr
ICAgICAgZWxlbWVudC5zdHlsZS5sZWZ0ID0gc3R5bGU7CisrICAgICAgZWxlbWVudC5ydW50aW1l
U3R5bGUubGVmdCA9IHJTdHlsZTsKKysKKysgICAgICByZXR1cm4gdmFsdWU7CisrICAgIH0KKysK
KysgICAgaWYgKGVsZW1lbnQgJiYgaXNQZXJjZW50YWdlKSB7CisrICAgICAgY29udGV4dCA9IGNv
bnRleHQgfHwgZWxlbWVudC5wYXJlbnROb2RlOworKyAgICAgIHZhciBkZWNpbWFsID0gdG9EZWNp
bWFsKHZhbHVlKTsKKysgICAgICB2YXIgd2hvbGUgPSBudWxsOworKyAgICAgIHZhciBwb3NpdGlv
biA9IGVsZW1lbnQuZ2V0U3R5bGUoJ3Bvc2l0aW9uJyk7CisrCisrICAgICAgdmFyIGlzSG9yaXpv
bnRhbCA9IHByb3BlcnR5LmluY2x1ZGUoJ2xlZnQnKSB8fCBwcm9wZXJ0eS5pbmNsdWRlKCdyaWdo
dCcpIHx8CisrICAgICAgIHByb3BlcnR5LmluY2x1ZGUoJ3dpZHRoJyk7CisrCisrICAgICAgdmFy
IGlzVmVydGljYWwgPSAgcHJvcGVydHkuaW5jbHVkZSgndG9wJykgfHwgcHJvcGVydHkuaW5jbHVk
ZSgnYm90dG9tJykgfHwKKysgICAgICAgIHByb3BlcnR5LmluY2x1ZGUoJ2hlaWdodCcpOworKwor
KyAgICAgIGlmIChjb250ZXh0ID09PSBkb2N1bWVudC52aWV3cG9ydCkgeworKyAgICAgICAgaWYg
KGlzSG9yaXpvbnRhbCkgeworKyAgICAgICAgICB3aG9sZSA9IGRvY3VtZW50LnZpZXdwb3J0Lmdl
dFdpZHRoKCk7CisrICAgICAgICB9IGVsc2UgaWYgKGlzVmVydGljYWwpIHsKKysgICAgICAgICAg
d2hvbGUgPSBkb2N1bWVudC52aWV3cG9ydC5nZXRIZWlnaHQoKTsKKysgICAgICAgIH0KKysgICAg
ICB9IGVsc2UgeworKyAgICAgICAgaWYgKGlzSG9yaXpvbnRhbCkgeworKyAgICAgICAgICB3aG9s
ZSA9ICQoY29udGV4dCkubWVhc3VyZSgnd2lkdGgnKTsKKysgICAgICAgIH0gZWxzZSBpZiAoaXNW
ZXJ0aWNhbCkgeworKyAgICAgICAgICB3aG9sZSA9ICQoY29udGV4dCkubWVhc3VyZSgnaGVpZ2h0
Jyk7CisrICAgICAgICB9CisrICAgICAgfQorKworKyAgICAgIHJldHVybiAod2hvbGUgPT09IG51
bGwpID8gMCA6IHdob2xlICogZGVjaW1hbDsKKysgICAgfQorKworKyAgICByZXR1cm4gMDsKKysg
IH0KKysKKysgIGZ1bmN0aW9uIHRvQ1NTUGl4ZWxzKG51bWJlcikgeworKyAgICBpZiAoT2JqZWN0
LmlzU3RyaW5nKG51bWJlcikgJiYgbnVtYmVyLmVuZHNXaXRoKCdweCcpKSB7CisrICAgICAgcmV0
dXJuIG51bWJlcjsKKysgICAgfQorKyAgICByZXR1cm4gbnVtYmVyICsgJ3B4JzsKKysgIH0KKysK
KysgIGZ1bmN0aW9uIGlzRGlzcGxheWVkKGVsZW1lbnQpIHsKKysgICAgdmFyIG9yaWdpbmFsRWxl
bWVudCA9IGVsZW1lbnQ7CisrICAgIHdoaWxlIChlbGVtZW50ICYmIGVsZW1lbnQucGFyZW50Tm9k
ZSkgeworKyAgICAgIHZhciBkaXNwbGF5ID0gZWxlbWVudC5nZXRTdHlsZSgnZGlzcGxheScpOwor
KyAgICAgIGlmIChkaXNwbGF5ID09PSAnbm9uZScpIHsKKysgICAgICAgIHJldHVybiBmYWxzZTsK
KysgICAgICB9CisrICAgICAgZWxlbWVudCA9ICQoZWxlbWVudC5wYXJlbnROb2RlKTsKKysgICAg
fQorKyAgICByZXR1cm4gdHJ1ZTsKKysgIH0KKysKKysgIHZhciBoYXNMYXlvdXQgPSBQcm90b3R5
cGUuSzsKKysgIGlmICgnY3VycmVudFN0eWxlJyBpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQp
IHsKKysgICAgaGFzTGF5b3V0ID0gZnVuY3Rpb24oZWxlbWVudCkgeworKyAgICAgIGlmICghZWxl
bWVudC5jdXJyZW50U3R5bGUuaGFzTGF5b3V0KSB7CisrICAgICAgICBlbGVtZW50LnN0eWxlLnpv
b20gPSAxOworKyAgICAgIH0KKysgICAgICByZXR1cm4gZWxlbWVudDsKKysgICAgfTsKKysgIH0K
KysKKysgIGZ1bmN0aW9uIGNzc05hbWVGb3Ioa2V5KSB7CisrICAgIGlmIChrZXkuaW5jbHVkZSgn
Ym9yZGVyJykpIGtleSA9IGtleSArICctd2lkdGgnOworKyAgICByZXR1cm4ga2V5LmNhbWVsaXpl
KCk7CisrICB9CisrCisrICBFbGVtZW50LkxheW91dCA9IENsYXNzLmNyZWF0ZShIYXNoLCB7Cisr
ICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uKCRzdXBlciwgZWxlbWVudCwgcHJlQ29tcHV0ZSkgewor
KyAgICAgICRzdXBlcigpOworKyAgICAgIHRoaXMuZWxlbWVudCA9ICQoZWxlbWVudCk7CisrCisr
ICAgICAgRWxlbWVudC5MYXlvdXQuUFJPUEVSVElFUy5lYWNoKCBmdW5jdGlvbihwcm9wZXJ0eSkg
eworKyAgICAgICAgdGhpcy5fc2V0KHByb3BlcnR5LCBudWxsKTsKKysgICAgICB9LCB0aGlzKTsK
KysKKysgICAgICBpZiAocHJlQ29tcHV0ZSkgeworKyAgICAgICAgdGhpcy5fcHJlQ29tcHV0aW5n
ID0gdHJ1ZTsKKysgICAgICAgIHRoaXMuX2JlZ2luKCk7CisrICAgICAgICBFbGVtZW50LkxheW91
dC5QUk9QRVJUSUVTLmVhY2goIHRoaXMuX2NvbXB1dGUsIHRoaXMgKTsKKysgICAgICAgIHRoaXMu
X2VuZCgpOworKyAgICAgICAgdGhpcy5fcHJlQ29tcHV0aW5nID0gZmFsc2U7CisrICAgICAgfQor
KyAgICB9LAorKworKyAgICBfc2V0OiBmdW5jdGlvbihwcm9wZXJ0eSwgdmFsdWUpIHsKKysgICAg
ICByZXR1cm4gSGFzaC5wcm90b3R5cGUuc2V0LmNhbGwodGhpcywgcHJvcGVydHksIHZhbHVlKTsK
KysgICAgfSwKKysKKysgICAgc2V0OiBmdW5jdGlvbihwcm9wZXJ0eSwgdmFsdWUpIHsKKysgICAg
ICB0aHJvdyAiUHJvcGVydGllcyBvZiBFbGVtZW50LkxheW91dCBhcmUgcmVhZC1vbmx5LiI7Cisr
ICAgIH0sCisrCisrICAgIGdldDogZnVuY3Rpb24oJHN1cGVyLCBwcm9wZXJ0eSkgeworKyAgICAg
IHZhciB2YWx1ZSA9ICRzdXBlcihwcm9wZXJ0eSk7CisrICAgICAgcmV0dXJuIHZhbHVlID09PSBu
dWxsID8gdGhpcy5fY29tcHV0ZShwcm9wZXJ0eSkgOiB2YWx1ZTsKKysgICAgfSwKKysKKysgICAg
X2JlZ2luOiBmdW5jdGlvbigpIHsKKysgICAgICBpZiAodGhpcy5fcHJlcGFyZWQpIHJldHVybjsK
KysKKysgICAgICB2YXIgZWxlbWVudCA9IHRoaXMuZWxlbWVudDsKKysgICAgICBpZiAoaXNEaXNw
bGF5ZWQoZWxlbWVudCkpIHsKKysgICAgICAgIHRoaXMuX3ByZXBhcmVkID0gdHJ1ZTsKKysgICAg
ICAgIHJldHVybjsKKysgICAgICB9CisrCisrICAgICAgdmFyIG9yaWdpbmFsU3R5bGVzID0gewor
KyAgICAgICAgcG9zaXRpb246ICAgZWxlbWVudC5zdHlsZS5wb3NpdGlvbiAgIHx8ICcnLAorKyAg
ICAgICAgd2lkdGg6ICAgICAgZWxlbWVudC5zdHlsZS53aWR0aCAgICAgIHx8ICcnLAorKyAgICAg
ICAgdmlzaWJpbGl0eTogZWxlbWVudC5zdHlsZS52aXNpYmlsaXR5IHx8ICcnLAorKyAgICAgICAg
ZGlzcGxheTogICAgZWxlbWVudC5zdHlsZS5kaXNwbGF5ICAgIHx8ICcnCisrICAgICAgfTsKKysK
KysgICAgICBlbGVtZW50LnN0b3JlKCdwcm90b3R5cGVfb3JpZ2luYWxfc3R5bGVzJywgb3JpZ2lu
YWxTdHlsZXMpOworKworKyAgICAgIHZhciBwb3NpdGlvbiA9IGVsZW1lbnQuZ2V0U3R5bGUoJ3Bv
c2l0aW9uJyksCisrICAgICAgIHdpZHRoID0gZWxlbWVudC5nZXRTdHlsZSgnd2lkdGgnKTsKKysK
KysgICAgICBpZiAod2lkdGggPT09ICIwcHgiIHx8IHdpZHRoID09PSBudWxsKSB7CisrICAgICAg
ICBlbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOworKyAgICAgICAgd2lkdGggPSBlbGVt
ZW50LmdldFN0eWxlKCd3aWR0aCcpOworKyAgICAgIH0KKysKKysgICAgICB2YXIgY29udGV4dCA9
IChwb3NpdGlvbiA9PT0gJ2ZpeGVkJykgPyBkb2N1bWVudC52aWV3cG9ydCA6CisrICAgICAgIGVs
ZW1lbnQucGFyZW50Tm9kZTsKKysKKysgICAgICBlbGVtZW50LnNldFN0eWxlKHsKKysgICAgICAg
IHBvc2l0aW9uOiAgICdhYnNvbHV0ZScsCisrICAgICAgICB2aXNpYmlsaXR5OiAnaGlkZGVuJywK
KysgICAgICAgIGRpc3BsYXk6ICAgICdibG9jaycKKysgICAgICB9KTsKKysKKysgICAgICB2YXIg
cG9zaXRpb25lZFdpZHRoID0gZWxlbWVudC5nZXRTdHlsZSgnd2lkdGgnKTsKKysKKysgICAgICB2
YXIgbmV3V2lkdGg7CisrICAgICAgaWYgKHdpZHRoICYmIChwb3NpdGlvbmVkV2lkdGggPT09IHdp
ZHRoKSkgeworKyAgICAgICAgbmV3V2lkdGggPSBnZXRQaXhlbFZhbHVlKGVsZW1lbnQsICd3aWR0
aCcsIGNvbnRleHQpOworKyAgICAgIH0gZWxzZSBpZiAocG9zaXRpb24gPT09ICdhYnNvbHV0ZScg
fHwgcG9zaXRpb24gPT09ICdmaXhlZCcpIHsKKysgICAgICAgIG5ld1dpZHRoID0gZ2V0UGl4ZWxW
YWx1ZShlbGVtZW50LCAnd2lkdGgnLCBjb250ZXh0KTsKKysgICAgICB9IGVsc2UgeworKyAgICAg
ICAgdmFyIHBhcmVudCA9IGVsZW1lbnQucGFyZW50Tm9kZSwgcExheW91dCA9ICQocGFyZW50KS5n
ZXRMYXlvdXQoKTsKKysKKysgICAgICAgIG5ld1dpZHRoID0gcExheW91dC5nZXQoJ3dpZHRoJykg
LQorKyAgICAgICAgIHRoaXMuZ2V0KCdtYXJnaW4tbGVmdCcpIC0KKysgICAgICAgICB0aGlzLmdl
dCgnYm9yZGVyLWxlZnQnKSAtCisrICAgICAgICAgdGhpcy5nZXQoJ3BhZGRpbmctbGVmdCcpIC0K
KysgICAgICAgICB0aGlzLmdldCgncGFkZGluZy1yaWdodCcpIC0KKysgICAgICAgICB0aGlzLmdl
dCgnYm9yZGVyLXJpZ2h0JykgLQorKyAgICAgICAgIHRoaXMuZ2V0KCdtYXJnaW4tcmlnaHQnKTsK
KysgICAgICB9CisrCisrICAgICAgZWxlbWVudC5zZXRTdHlsZSh7IHdpZHRoOiBuZXdXaWR0aCAr
ICdweCcgfSk7CisrCisrICAgICAgdGhpcy5fcHJlcGFyZWQgPSB0cnVlOworKyAgICB9LAorKwor
KyAgICBfZW5kOiBmdW5jdGlvbigpIHsKKysgICAgICB2YXIgZWxlbWVudCA9IHRoaXMuZWxlbWVu
dDsKKysgICAgICB2YXIgb3JpZ2luYWxTdHlsZXMgPSBlbGVtZW50LnJldHJpZXZlKCdwcm90b3R5
cGVfb3JpZ2luYWxfc3R5bGVzJyk7CisrICAgICAgZWxlbWVudC5zdG9yZSgncHJvdG90eXBlX29y
aWdpbmFsX3N0eWxlcycsIG51bGwpOworKyAgICAgIGVsZW1lbnQuc2V0U3R5bGUob3JpZ2luYWxT
dHlsZXMpOworKyAgICAgIHRoaXMuX3ByZXBhcmVkID0gZmFsc2U7CisrICAgIH0sCisrCisrICAg
IF9jb21wdXRlOiBmdW5jdGlvbihwcm9wZXJ0eSkgeworKyAgICAgIHZhciBDT01QVVRBVElPTlMg
PSBFbGVtZW50LkxheW91dC5DT01QVVRBVElPTlM7CisrICAgICAgaWYgKCEocHJvcGVydHkgaW4g
Q09NUFVUQVRJT05TKSkgeworKyAgICAgICAgdGhyb3cgIlByb3BlcnR5IG5vdCBmb3VuZC4iOwor
KyAgICAgIH0KKysKKysgICAgICByZXR1cm4gdGhpcy5fc2V0KHByb3BlcnR5LCBDT01QVVRBVElP
TlNbcHJvcGVydHldLmNhbGwodGhpcywgdGhpcy5lbGVtZW50KSk7CisrICAgIH0sCisrCisrICAg
IHRvT2JqZWN0OiBmdW5jdGlvbigpIHsKKysgICAgICB2YXIgYXJncyA9ICRBKGFyZ3VtZW50cyk7
CisrICAgICAgdmFyIGtleXMgPSAoYXJncy5sZW5ndGggPT09IDApID8gRWxlbWVudC5MYXlvdXQu
UFJPUEVSVElFUyA6CisrICAgICAgIGFyZ3Muam9pbignICcpLnNwbGl0KCcgJyk7CisrICAgICAg
dmFyIG9iaiA9IHt9OworKyAgICAgIGtleXMuZWFjaCggZnVuY3Rpb24oa2V5KSB7CisrICAgICAg
ICBpZiAoIUVsZW1lbnQuTGF5b3V0LlBST1BFUlRJRVMuaW5jbHVkZShrZXkpKSByZXR1cm47Cisr
ICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLmdldChrZXkpOworKyAgICAgICAgaWYgKHZhbHVlICE9
IG51bGwpIG9ialtrZXldID0gdmFsdWU7CisrICAgICAgfSwgdGhpcyk7CisrICAgICAgcmV0dXJu
IG9iajsKKysgICAgfSwKKysKKysgICAgdG9IYXNoOiBmdW5jdGlvbigpIHsKKysgICAgICB2YXIg
b2JqID0gdGhpcy50b09iamVjdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpOworKyAgICAgIHJldHVy
biBuZXcgSGFzaChvYmopOworKyAgICB9LAorKworKyAgICB0b0NTUzogZnVuY3Rpb24oKSB7Cisr
ICAgICAgdmFyIGFyZ3MgPSAkQShhcmd1bWVudHMpOworKyAgICAgIHZhciBrZXlzID0gKGFyZ3Mu
bGVuZ3RoID09PSAwKSA/IEVsZW1lbnQuTGF5b3V0LlBST1BFUlRJRVMgOgorKyAgICAgICBhcmdz
LmpvaW4oJyAnKS5zcGxpdCgnICcpOworKyAgICAgIHZhciBjc3MgPSB7fTsKKysKKysgICAgICBr
ZXlzLmVhY2goIGZ1bmN0aW9uKGtleSkgeworKyAgICAgICAgaWYgKCFFbGVtZW50LkxheW91dC5Q
Uk9QRVJUSUVTLmluY2x1ZGUoa2V5KSkgcmV0dXJuOworKyAgICAgICAgaWYgKEVsZW1lbnQuTGF5
b3V0LkNPTVBPU0lURV9QUk9QRVJUSUVTLmluY2x1ZGUoa2V5KSkgcmV0dXJuOworKworKyAgICAg
ICAgdmFyIHZhbHVlID0gdGhpcy5nZXQoa2V5KTsKKysgICAgICAgIGlmICh2YWx1ZSAhPSBudWxs
KSBjc3NbY3NzTmFtZUZvcihrZXkpXSA9IHZhbHVlICsgJ3B4JzsKKysgICAgICB9LCB0aGlzKTsK
KysgICAgICByZXR1cm4gY3NzOworKyAgICB9LAorKworKyAgICBpbnNwZWN0OiBmdW5jdGlvbigp
IHsKKysgICAgICByZXR1cm4gIiM8RWxlbWVudC5MYXlvdXQ+IjsKKysgICAgfQorKyAgfSk7Cisr
CisrICBPYmplY3QuZXh0ZW5kKEVsZW1lbnQuTGF5b3V0LCB7CisrICAgIFBST1BFUlRJRVM6ICR3
KCdoZWlnaHQgd2lkdGggdG9wIGxlZnQgcmlnaHQgYm90dG9tIGJvcmRlci1sZWZ0IGJvcmRlci1y
aWdodCBib3JkZXItdG9wIGJvcmRlci1ib3R0b20gcGFkZGluZy1sZWZ0IHBhZGRpbmctcmlnaHQg
cGFkZGluZy10b3AgcGFkZGluZy1ib3R0b20gbWFyZ2luLXRvcCBtYXJnaW4tYm90dG9tIG1hcmdp
bi1sZWZ0IG1hcmdpbi1yaWdodCBwYWRkaW5nLWJveC13aWR0aCBwYWRkaW5nLWJveC1oZWlnaHQg
Ym9yZGVyLWJveC13aWR0aCBib3JkZXItYm94LWhlaWdodCBtYXJnaW4tYm94LXdpZHRoIG1hcmdp
bi1ib3gtaGVpZ2h0JyksCisrCisrICAgIENPTVBPU0lURV9QUk9QRVJUSUVTOiAkdygncGFkZGlu
Zy1ib3gtd2lkdGggcGFkZGluZy1ib3gtaGVpZ2h0IG1hcmdpbi1ib3gtd2lkdGggbWFyZ2luLWJv
eC1oZWlnaHQgYm9yZGVyLWJveC13aWR0aCBib3JkZXItYm94LWhlaWdodCcpLAorKworKyAgICBD
T01QVVRBVElPTlM6IHsKKysgICAgICAnaGVpZ2h0JzogZnVuY3Rpb24oZWxlbWVudCkgeworKyAg
ICAgICAgaWYgKCF0aGlzLl9wcmVDb21wdXRpbmcpIHRoaXMuX2JlZ2luKCk7CisrCisrICAgICAg
ICB2YXIgYkhlaWdodCA9IHRoaXMuZ2V0KCdib3JkZXItYm94LWhlaWdodCcpOworKyAgICAgICAg
aWYgKGJIZWlnaHQgPD0gMCkgeworKyAgICAgICAgICBpZiAoIXRoaXMuX3ByZUNvbXB1dGluZykg
dGhpcy5fZW5kKCk7CisrICAgICAgICAgIHJldHVybiAwOworKyAgICAgICAgfQorKworKyAgICAg
ICAgdmFyIGJUb3AgPSB0aGlzLmdldCgnYm9yZGVyLXRvcCcpLAorKyAgICAgICAgIGJCb3R0b20g
PSB0aGlzLmdldCgnYm9yZGVyLWJvdHRvbScpOworKworKyAgICAgICAgdmFyIHBUb3AgPSB0aGlz
LmdldCgncGFkZGluZy10b3AnKSwKKysgICAgICAgICBwQm90dG9tID0gdGhpcy5nZXQoJ3BhZGRp
bmctYm90dG9tJyk7CisrCisrICAgICAgICBpZiAoIXRoaXMuX3ByZUNvbXB1dGluZykgdGhpcy5f
ZW5kKCk7CisrCisrICAgICAgICByZXR1cm4gYkhlaWdodCAtIGJUb3AgLSBiQm90dG9tIC0gcFRv
cCAtIHBCb3R0b207CisrICAgICAgfSwKKysKKysgICAgICAnd2lkdGgnOiBmdW5jdGlvbihlbGVt
ZW50KSB7CisrICAgICAgICBpZiAoIXRoaXMuX3ByZUNvbXB1dGluZykgdGhpcy5fYmVnaW4oKTsK
KysKKysgICAgICAgIHZhciBiV2lkdGggPSB0aGlzLmdldCgnYm9yZGVyLWJveC13aWR0aCcpOwor
KyAgICAgICAgaWYgKGJXaWR0aCA8PSAwKSB7CisrICAgICAgICAgIGlmICghdGhpcy5fcHJlQ29t
cHV0aW5nKSB0aGlzLl9lbmQoKTsKKysgICAgICAgICAgcmV0dXJuIDA7CisrICAgICAgICB9Cisr
CisrICAgICAgICB2YXIgYkxlZnQgPSB0aGlzLmdldCgnYm9yZGVyLWxlZnQnKSwKKysgICAgICAg
ICBiUmlnaHQgPSB0aGlzLmdldCgnYm9yZGVyLXJpZ2h0Jyk7CisrCisrICAgICAgICB2YXIgcExl
ZnQgPSB0aGlzLmdldCgncGFkZGluZy1sZWZ0JyksCisrICAgICAgICAgcFJpZ2h0ID0gdGhpcy5n
ZXQoJ3BhZGRpbmctcmlnaHQnKTsKKysKKysgICAgICAgIGlmICghdGhpcy5fcHJlQ29tcHV0aW5n
KSB0aGlzLl9lbmQoKTsKKysKKysgICAgICAgIHJldHVybiBiV2lkdGggLSBiTGVmdCAtIGJSaWdo
dCAtIHBMZWZ0IC0gcFJpZ2h0OworKyAgICAgIH0sCisrCisrICAgICAgJ3BhZGRpbmctYm94LWhl
aWdodCc6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKysgICAgICAgIHZhciBoZWlnaHQgPSB0aGlzLmdl
dCgnaGVpZ2h0JyksCisrICAgICAgICAgcFRvcCA9IHRoaXMuZ2V0KCdwYWRkaW5nLXRvcCcpLAor
KyAgICAgICAgIHBCb3R0b20gPSB0aGlzLmdldCgncGFkZGluZy1ib3R0b20nKTsKKysKKysgICAg
ICAgIHJldHVybiBoZWlnaHQgKyBwVG9wICsgcEJvdHRvbTsKKysgICAgICB9LAorKworKyAgICAg
ICdwYWRkaW5nLWJveC13aWR0aCc6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKysgICAgICAgIHZhciB3
aWR0aCA9IHRoaXMuZ2V0KCd3aWR0aCcpLAorKyAgICAgICAgIHBMZWZ0ID0gdGhpcy5nZXQoJ3Bh
ZGRpbmctbGVmdCcpLAorKyAgICAgICAgIHBSaWdodCA9IHRoaXMuZ2V0KCdwYWRkaW5nLXJpZ2h0
Jyk7CisrCisrICAgICAgICByZXR1cm4gd2lkdGggKyBwTGVmdCArIHBSaWdodDsKKysgICAgICB9
LAorKworKyAgICAgICdib3JkZXItYm94LWhlaWdodCc6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKysg
ICAgICAgIGlmICghdGhpcy5fcHJlQ29tcHV0aW5nKSB0aGlzLl9iZWdpbigpOworKyAgICAgICAg
dmFyIGhlaWdodCA9IGVsZW1lbnQub2Zmc2V0SGVpZ2h0OworKyAgICAgICAgaWYgKCF0aGlzLl9w
cmVDb21wdXRpbmcpIHRoaXMuX2VuZCgpOworKyAgICAgICAgcmV0dXJuIGhlaWdodDsKKysgICAg
ICB9LAorKworKyAgICAgICdib3JkZXItYm94LXdpZHRoJzogZnVuY3Rpb24oZWxlbWVudCkgewor
KyAgICAgICAgaWYgKCF0aGlzLl9wcmVDb21wdXRpbmcpIHRoaXMuX2JlZ2luKCk7CisrICAgICAg
ICB2YXIgd2lkdGggPSBlbGVtZW50Lm9mZnNldFdpZHRoOworKyAgICAgICAgaWYgKCF0aGlzLl9w
cmVDb21wdXRpbmcpIHRoaXMuX2VuZCgpOworKyAgICAgICAgcmV0dXJuIHdpZHRoOworKyAgICAg
IH0sCisrCisrICAgICAgJ21hcmdpbi1ib3gtaGVpZ2h0JzogZnVuY3Rpb24oZWxlbWVudCkgewor
KyAgICAgICAgdmFyIGJIZWlnaHQgPSB0aGlzLmdldCgnYm9yZGVyLWJveC1oZWlnaHQnKSwKKysg
ICAgICAgICBtVG9wID0gdGhpcy5nZXQoJ21hcmdpbi10b3AnKSwKKysgICAgICAgICBtQm90dG9t
ID0gdGhpcy5nZXQoJ21hcmdpbi1ib3R0b20nKTsKKysKKysgICAgICAgIGlmIChiSGVpZ2h0IDw9
IDApIHJldHVybiAwOworKworKyAgICAgICAgcmV0dXJuIGJIZWlnaHQgKyBtVG9wICsgbUJvdHRv
bTsKKysgICAgICB9LAorKworKyAgICAgICdtYXJnaW4tYm94LXdpZHRoJzogZnVuY3Rpb24oZWxl
bWVudCkgeworKyAgICAgICAgdmFyIGJXaWR0aCA9IHRoaXMuZ2V0KCdib3JkZXItYm94LXdpZHRo
JyksCisrICAgICAgICAgbUxlZnQgPSB0aGlzLmdldCgnbWFyZ2luLWxlZnQnKSwKKysgICAgICAg
ICBtUmlnaHQgPSB0aGlzLmdldCgnbWFyZ2luLXJpZ2h0Jyk7CisrCisrICAgICAgICBpZiAoYldp
ZHRoIDw9IDApIHJldHVybiAwOworKworKyAgICAgICAgcmV0dXJuIGJXaWR0aCArIG1MZWZ0ICsg
bVJpZ2h0OworKyAgICAgIH0sCisrCisrICAgICAgJ3RvcCc6IGZ1bmN0aW9uKGVsZW1lbnQpIHsK
KysgICAgICAgIHZhciBvZmZzZXQgPSBlbGVtZW50LnBvc2l0aW9uZWRPZmZzZXQoKTsKKysgICAg
ICAgIHJldHVybiBvZmZzZXQudG9wOworKyAgICAgIH0sCisrCisrICAgICAgJ2JvdHRvbSc6IGZ1
bmN0aW9uKGVsZW1lbnQpIHsKKysgICAgICAgIHZhciBvZmZzZXQgPSBlbGVtZW50LnBvc2l0aW9u
ZWRPZmZzZXQoKSwKKysgICAgICAgICBwYXJlbnQgPSBlbGVtZW50LmdldE9mZnNldFBhcmVudCgp
LAorKyAgICAgICAgIHBIZWlnaHQgPSBwYXJlbnQubWVhc3VyZSgnaGVpZ2h0Jyk7CisrCisrICAg
ICAgICB2YXIgbUhlaWdodCA9IHRoaXMuZ2V0KCdib3JkZXItYm94LWhlaWdodCcpOworKworKyAg
ICAgICAgcmV0dXJuIHBIZWlnaHQgLSBtSGVpZ2h0IC0gb2Zmc2V0LnRvcDsKKysgICAgICB9LAor
KworKyAgICAgICdsZWZ0JzogZnVuY3Rpb24oZWxlbWVudCkgeworKyAgICAgICAgdmFyIG9mZnNl
dCA9IGVsZW1lbnQucG9zaXRpb25lZE9mZnNldCgpOworKyAgICAgICAgcmV0dXJuIG9mZnNldC5s
ZWZ0OworKyAgICAgIH0sCisrCisrICAgICAgJ3JpZ2h0JzogZnVuY3Rpb24oZWxlbWVudCkgewor
KyAgICAgICAgdmFyIG9mZnNldCA9IGVsZW1lbnQucG9zaXRpb25lZE9mZnNldCgpLAorKyAgICAg
ICAgIHBhcmVudCA9IGVsZW1lbnQuZ2V0T2Zmc2V0UGFyZW50KCksCisrICAgICAgICAgcFdpZHRo
ID0gcGFyZW50Lm1lYXN1cmUoJ3dpZHRoJyk7CisrCisrICAgICAgICB2YXIgbVdpZHRoID0gdGhp
cy5nZXQoJ2JvcmRlci1ib3gtd2lkdGgnKTsKKysKKysgICAgICAgIHJldHVybiBwV2lkdGggLSBt
V2lkdGggLSBvZmZzZXQubGVmdDsKKysgICAgICB9LAorKworKyAgICAgICdwYWRkaW5nLXRvcCc6
IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKysgICAgICAgIHJldHVybiBnZXRQaXhlbFZhbHVlKGVsZW1l
bnQsICdwYWRkaW5nVG9wJyk7CisrICAgICAgfSwKKysKKysgICAgICAncGFkZGluZy1ib3R0b20n
OiBmdW5jdGlvbihlbGVtZW50KSB7CisrICAgICAgICByZXR1cm4gZ2V0UGl4ZWxWYWx1ZShlbGVt
ZW50LCAncGFkZGluZ0JvdHRvbScpOworKyAgICAgIH0sCisrCisrICAgICAgJ3BhZGRpbmctbGVm
dCc6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKysgICAgICAgIHJldHVybiBnZXRQaXhlbFZhbHVlKGVs
ZW1lbnQsICdwYWRkaW5nTGVmdCcpOworKyAgICAgIH0sCisrCisrICAgICAgJ3BhZGRpbmctcmln
aHQnOiBmdW5jdGlvbihlbGVtZW50KSB7CisrICAgICAgICByZXR1cm4gZ2V0UGl4ZWxWYWx1ZShl
bGVtZW50LCAncGFkZGluZ1JpZ2h0Jyk7CisrICAgICAgfSwKKysKKysgICAgICAnYm9yZGVyLXRv
cCc6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKysgICAgICAgIHJldHVybiBnZXRQaXhlbFZhbHVlKGVs
ZW1lbnQsICdib3JkZXJUb3BXaWR0aCcpOworKyAgICAgIH0sCisrCisrICAgICAgJ2JvcmRlci1i
b3R0b20nOiBmdW5jdGlvbihlbGVtZW50KSB7CisrICAgICAgICByZXR1cm4gZ2V0UGl4ZWxWYWx1
ZShlbGVtZW50LCAnYm9yZGVyQm90dG9tV2lkdGgnKTsKKysgICAgICB9LAorKworKyAgICAgICdi
b3JkZXItbGVmdCc6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKysgICAgICAgIHJldHVybiBnZXRQaXhl
bFZhbHVlKGVsZW1lbnQsICdib3JkZXJMZWZ0V2lkdGgnKTsKKysgICAgICB9LAorKworKyAgICAg
ICdib3JkZXItcmlnaHQnOiBmdW5jdGlvbihlbGVtZW50KSB7CisrICAgICAgICByZXR1cm4gZ2V0
UGl4ZWxWYWx1ZShlbGVtZW50LCAnYm9yZGVyUmlnaHRXaWR0aCcpOworKyAgICAgIH0sCisrCisr
ICAgICAgJ21hcmdpbi10b3AnOiBmdW5jdGlvbihlbGVtZW50KSB7CisrICAgICAgICByZXR1cm4g
Z2V0UGl4ZWxWYWx1ZShlbGVtZW50LCAnbWFyZ2luVG9wJyk7CisrICAgICAgfSwKKysKKysgICAg
ICAnbWFyZ2luLWJvdHRvbSc6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKysgICAgICAgIHJldHVybiBn
ZXRQaXhlbFZhbHVlKGVsZW1lbnQsICdtYXJnaW5Cb3R0b20nKTsKKysgICAgICB9LAorKworKyAg
ICAgICdtYXJnaW4tbGVmdCc6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKysgICAgICAgIHJldHVybiBn
ZXRQaXhlbFZhbHVlKGVsZW1lbnQsICdtYXJnaW5MZWZ0Jyk7CisrICAgICAgfSwKKysKKysgICAg
ICAnbWFyZ2luLXJpZ2h0JzogZnVuY3Rpb24oZWxlbWVudCkgeworKyAgICAgICAgcmV0dXJuIGdl
dFBpeGVsVmFsdWUoZWxlbWVudCwgJ21hcmdpblJpZ2h0Jyk7CisrICAgICAgfQorKyAgICB9Cisr
ICB9KTsKKysKKysgIGlmICgnZ2V0Qm91bmRpbmdDbGllbnRSZWN0JyBpbiBkb2N1bWVudC5kb2N1
bWVudEVsZW1lbnQpIHsKKysgICAgT2JqZWN0LmV4dGVuZChFbGVtZW50LkxheW91dC5DT01QVVRB
VElPTlMsIHsKKysgICAgICAncmlnaHQnOiBmdW5jdGlvbihlbGVtZW50KSB7CisrICAgICAgICB2
YXIgcGFyZW50ID0gaGFzTGF5b3V0KGVsZW1lbnQuZ2V0T2Zmc2V0UGFyZW50KCkpOworKyAgICAg
ICAgdmFyIHJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLAorKyAgICAgICAg
IHBSZWN0ID0gcGFyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOworKworKyAgICAgICAgcmV0
dXJuIChwUmVjdC5yaWdodCAtIHJlY3QucmlnaHQpLnJvdW5kKCk7CisrICAgICAgfSwKKysKKysg
ICAgICAnYm90dG9tJzogZnVuY3Rpb24oZWxlbWVudCkgeworKyAgICAgICAgdmFyIHBhcmVudCA9
IGhhc0xheW91dChlbGVtZW50LmdldE9mZnNldFBhcmVudCgpKTsKKysgICAgICAgIHZhciByZWN0
ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSwKKysgICAgICAgICBwUmVjdCA9IHBh
cmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKKysKKysgICAgICAgIHJldHVybiAocFJlY3Qu
Ym90dG9tIC0gcmVjdC5ib3R0b20pLnJvdW5kKCk7CisrICAgICAgfQorKyAgICB9KTsKKysgIH0K
KysKKysgIEVsZW1lbnQuT2Zmc2V0ID0gQ2xhc3MuY3JlYXRlKHsKKysgICAgaW5pdGlhbGl6ZTog
ZnVuY3Rpb24obGVmdCwgdG9wKSB7CisrICAgICAgdGhpcy5sZWZ0ID0gbGVmdC5yb3VuZCgpOwor
KyAgICAgIHRoaXMudG9wICA9IHRvcC5yb3VuZCgpOworKworKyAgICAgIHRoaXNbMF0gPSB0aGlz
LmxlZnQ7CisrICAgICAgdGhpc1sxXSA9IHRoaXMudG9wOworKyAgICB9LAorKworKyAgICByZWxh
dGl2ZVRvOiBmdW5jdGlvbihvZmZzZXQpIHsKKysgICAgICByZXR1cm4gbmV3IEVsZW1lbnQuT2Zm
c2V0KAorKyAgICAgICAgdGhpcy5sZWZ0IC0gb2Zmc2V0LmxlZnQsCisrICAgICAgICB0aGlzLnRv
cCAgLSBvZmZzZXQudG9wCisrICAgICAgKTsKKysgICAgfSwKKysKKysgICAgaW5zcGVjdDogZnVu
Y3Rpb24oKSB7CisrICAgICAgcmV0dXJuICIjPEVsZW1lbnQuT2Zmc2V0IGxlZnQ6ICN7bGVmdH0g
dG9wOiAje3RvcH0+Ii5pbnRlcnBvbGF0ZSh0aGlzKTsKKysgICAgfSwKKysKKysgICAgdG9TdHJp
bmc6IGZ1bmN0aW9uKCkgeworKyAgICAgIHJldHVybiAiWyN7bGVmdH0sICN7dG9wfV0iLmludGVy
cG9sYXRlKHRoaXMpOworKyAgICB9LAorKworKyAgICB0b0FycmF5OiBmdW5jdGlvbigpIHsKKysg
ICAgICByZXR1cm4gW3RoaXMubGVmdCwgdGhpcy50b3BdOworKyAgICB9CisrICB9KTsKKysKKysg
IGZ1bmN0aW9uIGdldExheW91dChlbGVtZW50LCBwcmVDb21wdXRlKSB7CisrICAgIHJldHVybiBu
ZXcgRWxlbWVudC5MYXlvdXQoZWxlbWVudCwgcHJlQ29tcHV0ZSk7CisrICB9CisrCisrICBmdW5j
dGlvbiBtZWFzdXJlKGVsZW1lbnQsIHByb3BlcnR5KSB7CisrICAgIHJldHVybiAkKGVsZW1lbnQp
LmdldExheW91dCgpLmdldChwcm9wZXJ0eSk7CisrICB9CisrCisrICBmdW5jdGlvbiBnZXREaW1l
bnNpb25zKGVsZW1lbnQpIHsKKysgICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CisrICAgIHZhciBk
aXNwbGF5ID0gRWxlbWVudC5nZXRTdHlsZShlbGVtZW50LCAnZGlzcGxheScpOworKworKyAgICBp
ZiAoZGlzcGxheSAmJiBkaXNwbGF5ICE9PSAnbm9uZScpIHsKKysgICAgICByZXR1cm4geyB3aWR0
aDogZWxlbWVudC5vZmZzZXRXaWR0aCwgaGVpZ2h0OiBlbGVtZW50Lm9mZnNldEhlaWdodCB9Owor
KyAgICB9CisrCisrICAgIHZhciBzdHlsZSA9IGVsZW1lbnQuc3R5bGU7CisrICAgIHZhciBvcmln
aW5hbFN0eWxlcyA9IHsKKysgICAgICB2aXNpYmlsaXR5OiBzdHlsZS52aXNpYmlsaXR5LAorKyAg
ICAgIHBvc2l0aW9uOiAgIHN0eWxlLnBvc2l0aW9uLAorKyAgICAgIGRpc3BsYXk6ICAgIHN0eWxl
LmRpc3BsYXkKKysgICAgfTsKKysKKysgICAgdmFyIG5ld1N0eWxlcyA9IHsKKysgICAgICB2aXNp
YmlsaXR5OiAnaGlkZGVuJywKKysgICAgICBkaXNwbGF5OiAgICAnYmxvY2snCisrICAgIH07Cisr
CisrICAgIGlmIChvcmlnaW5hbFN0eWxlcy5wb3NpdGlvbiAhPT0gJ2ZpeGVkJykKKysgICAgICBu
ZXdTdHlsZXMucG9zaXRpb24gPSAnYWJzb2x1dGUnOworKworKyAgICBFbGVtZW50LnNldFN0eWxl
KGVsZW1lbnQsIG5ld1N0eWxlcyk7CisrCisrICAgIHZhciBkaW1lbnNpb25zID0geworKyAgICAg
IHdpZHRoOiAgZWxlbWVudC5vZmZzZXRXaWR0aCwKKysgICAgICBoZWlnaHQ6IGVsZW1lbnQub2Zm
c2V0SGVpZ2h0CisrICAgIH07CisrCisrICAgIEVsZW1lbnQuc2V0U3R5bGUoZWxlbWVudCwgb3Jp
Z2luYWxTdHlsZXMpOworKworKyAgICByZXR1cm4gZGltZW5zaW9uczsKKysgIH0KKysKKysgIGZ1
bmN0aW9uIGdldE9mZnNldFBhcmVudChlbGVtZW50KSB7CisrICAgIGVsZW1lbnQgPSAkKGVsZW1l
bnQpOworKworKyAgICBpZiAoaXNEb2N1bWVudChlbGVtZW50KSB8fCBpc0RldGFjaGVkKGVsZW1l
bnQpIHx8IGlzQm9keShlbGVtZW50KSB8fCBpc0h0bWwoZWxlbWVudCkpCisrICAgICAgcmV0dXJu
ICQoZG9jdW1lbnQuYm9keSk7CisrCisrICAgIHZhciBpc0lubGluZSA9IChFbGVtZW50LmdldFN0
eWxlKGVsZW1lbnQsICdkaXNwbGF5JykgPT09ICdpbmxpbmUnKTsKKysgICAgaWYgKCFpc0lubGlu
ZSAmJiBlbGVtZW50Lm9mZnNldFBhcmVudCkgcmV0dXJuICQoZWxlbWVudC5vZmZzZXRQYXJlbnQp
OworKworKyAgICB3aGlsZSAoKGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudE5vZGUpICYmIGVsZW1l
bnQgIT09IGRvY3VtZW50LmJvZHkpIHsKKysgICAgICBpZiAoRWxlbWVudC5nZXRTdHlsZShlbGVt
ZW50LCAncG9zaXRpb24nKSAhPT0gJ3N0YXRpYycpIHsKKysgICAgICAgIHJldHVybiBpc0h0bWwo
ZWxlbWVudCkgPyAkKGRvY3VtZW50LmJvZHkpIDogJChlbGVtZW50KTsKKysgICAgICB9CisrICAg
IH0KKysKKysgICAgcmV0dXJuICQoZG9jdW1lbnQuYm9keSk7CisrICB9CisrCisrCisrICBmdW5j
dGlvbiBjdW11bGF0aXZlT2Zmc2V0KGVsZW1lbnQpIHsKKysgICAgZWxlbWVudCA9ICQoZWxlbWVu
dCk7CisrICAgIHZhciB2YWx1ZVQgPSAwLCB2YWx1ZUwgPSAwOworKyAgICBpZiAoZWxlbWVudC5w
YXJlbnROb2RlKSB7CisrICAgICAgZG8geworKyAgICAgICAgdmFsdWVUICs9IGVsZW1lbnQub2Zm
c2V0VG9wICB8fCAwOworKyAgICAgICAgdmFsdWVMICs9IGVsZW1lbnQub2Zmc2V0TGVmdCB8fCAw
OworKyAgICAgICAgZWxlbWVudCA9IGVsZW1lbnQub2Zmc2V0UGFyZW50OworKyAgICAgIH0gd2hp
bGUgKGVsZW1lbnQpOworKyAgICB9CisrICAgIHJldHVybiBuZXcgRWxlbWVudC5PZmZzZXQodmFs
dWVMLCB2YWx1ZVQpOworKyAgfQorKworKyAgZnVuY3Rpb24gcG9zaXRpb25lZE9mZnNldChlbGVt
ZW50KSB7CisrICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOworKworKyAgICB2YXIgbGF5b3V0ID0g
ZWxlbWVudC5nZXRMYXlvdXQoKTsKKysKKysgICAgdmFyIHZhbHVlVCA9IDAsIHZhbHVlTCA9IDA7
CisrICAgIGRvIHsKKysgICAgICB2YWx1ZVQgKz0gZWxlbWVudC5vZmZzZXRUb3AgIHx8IDA7Cisr
ICAgICAgdmFsdWVMICs9IGVsZW1lbnQub2Zmc2V0TGVmdCB8fCAwOworKyAgICAgIGVsZW1lbnQg
PSBlbGVtZW50Lm9mZnNldFBhcmVudDsKKysgICAgICBpZiAoZWxlbWVudCkgeworKyAgICAgICAg
aWYgKGlzQm9keShlbGVtZW50KSkgYnJlYWs7CisrICAgICAgICB2YXIgcCA9IEVsZW1lbnQuZ2V0
U3R5bGUoZWxlbWVudCwgJ3Bvc2l0aW9uJyk7CisrICAgICAgICBpZiAocCAhPT0gJ3N0YXRpYycp
IGJyZWFrOworKyAgICAgIH0KKysgICAgfSB3aGlsZSAoZWxlbWVudCk7CisrCisrICAgIHZhbHVl
TCAtPSBsYXlvdXQuZ2V0KCdtYXJnaW4tdG9wJyk7CisrICAgIHZhbHVlVCAtPSBsYXlvdXQuZ2V0
KCdtYXJnaW4tbGVmdCcpOworKworKyAgICByZXR1cm4gbmV3IEVsZW1lbnQuT2Zmc2V0KHZhbHVl
TCwgdmFsdWVUKTsKKysgIH0KKysKKysgIGZ1bmN0aW9uIGN1bXVsYXRpdmVTY3JvbGxPZmZzZXQo
ZWxlbWVudCkgeworKyAgICB2YXIgdmFsdWVUID0gMCwgdmFsdWVMID0gMDsKKysgICAgZG8gewor
KyAgICAgIHZhbHVlVCArPSBlbGVtZW50LnNjcm9sbFRvcCAgfHwgMDsKKysgICAgICB2YWx1ZUwg
Kz0gZWxlbWVudC5zY3JvbGxMZWZ0IHx8IDA7CisrICAgICAgZWxlbWVudCA9IGVsZW1lbnQucGFy
ZW50Tm9kZTsKKysgICAgfSB3aGlsZSAoZWxlbWVudCk7CisrICAgIHJldHVybiBuZXcgRWxlbWVu
dC5PZmZzZXQodmFsdWVMLCB2YWx1ZVQpOworKyAgfQorKworKyAgZnVuY3Rpb24gdmlld3BvcnRP
ZmZzZXQoZm9yRWxlbWVudCkgeworKyAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKKysgICAgdmFy
IHZhbHVlVCA9IDAsIHZhbHVlTCA9IDAsIGRvY0JvZHkgPSBkb2N1bWVudC5ib2R5OworKworKyAg
ICB2YXIgZWxlbWVudCA9IGZvckVsZW1lbnQ7CisrICAgIGRvIHsKKysgICAgICB2YWx1ZVQgKz0g
ZWxlbWVudC5vZmZzZXRUb3AgIHx8IDA7CisrICAgICAgdmFsdWVMICs9IGVsZW1lbnQub2Zmc2V0
TGVmdCB8fCAwOworKyAgICAgIGlmIChlbGVtZW50Lm9mZnNldFBhcmVudCA9PSBkb2NCb2R5ICYm
CisrICAgICAgICBFbGVtZW50LmdldFN0eWxlKGVsZW1lbnQsICdwb3NpdGlvbicpID09ICdhYnNv
bHV0ZScpIGJyZWFrOworKyAgICB9IHdoaWxlIChlbGVtZW50ID0gZWxlbWVudC5vZmZzZXRQYXJl
bnQpOworKworKyAgICBlbGVtZW50ID0gZm9yRWxlbWVudDsKKysgICAgZG8geworKyAgICAgIGlm
IChlbGVtZW50ICE9IGRvY0JvZHkpIHsKKysgICAgICAgIHZhbHVlVCAtPSBlbGVtZW50LnNjcm9s
bFRvcCAgfHwgMDsKKysgICAgICAgIHZhbHVlTCAtPSBlbGVtZW50LnNjcm9sbExlZnQgfHwgMDsK
KysgICAgICB9CisrICAgIH0gd2hpbGUgKGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudE5vZGUpOwor
KyAgICByZXR1cm4gbmV3IEVsZW1lbnQuT2Zmc2V0KHZhbHVlTCwgdmFsdWVUKTsKKysgIH0KKysK
KysgIGZ1bmN0aW9uIGFic29sdXRpemUoZWxlbWVudCkgeworKyAgICBlbGVtZW50ID0gJChlbGVt
ZW50KTsKKysKKysgICAgaWYgKEVsZW1lbnQuZ2V0U3R5bGUoZWxlbWVudCwgJ3Bvc2l0aW9uJykg
PT09ICdhYnNvbHV0ZScpIHsKKysgICAgICByZXR1cm4gZWxlbWVudDsKKysgICAgfQorKworKyAg
ICB2YXIgb2Zmc2V0UGFyZW50ID0gZ2V0T2Zmc2V0UGFyZW50KGVsZW1lbnQpOworKyAgICB2YXIg
ZU9mZnNldCA9IGVsZW1lbnQudmlld3BvcnRPZmZzZXQoKSwKKysgICAgIHBPZmZzZXQgPSBvZmZz
ZXRQYXJlbnQudmlld3BvcnRPZmZzZXQoKTsKKysKKysgICAgdmFyIG9mZnNldCA9IGVPZmZzZXQu
cmVsYXRpdmVUbyhwT2Zmc2V0KTsKKysgICAgdmFyIGxheW91dCA9IGVsZW1lbnQuZ2V0TGF5b3V0
KCk7CisrCisrICAgIGVsZW1lbnQuc3RvcmUoJ3Byb3RvdHlwZV9hYnNvbHV0aXplX29yaWdpbmFs
X3N0eWxlcycsIHsKKysgICAgICBsZWZ0OiAgIGVsZW1lbnQuZ2V0U3R5bGUoJ2xlZnQnKSwKKysg
ICAgICB0b3A6ICAgIGVsZW1lbnQuZ2V0U3R5bGUoJ3RvcCcpLAorKyAgICAgIHdpZHRoOiAgZWxl
bWVudC5nZXRTdHlsZSgnd2lkdGgnKSwKKysgICAgICBoZWlnaHQ6IGVsZW1lbnQuZ2V0U3R5bGUo
J2hlaWdodCcpCisrICAgIH0pOworKworKyAgICBlbGVtZW50LnNldFN0eWxlKHsKKysgICAgICBw
b3NpdGlvbjogJ2Fic29sdXRlJywKKysgICAgICB0b3A6ICAgIG9mZnNldC50b3AgKyAncHgnLAor
KyAgICAgIGxlZnQ6ICAgb2Zmc2V0LmxlZnQgKyAncHgnLAorKyAgICAgIHdpZHRoOiAgbGF5b3V0
LmdldCgnd2lkdGgnKSArICdweCcsCisrICAgICAgaGVpZ2h0OiBsYXlvdXQuZ2V0KCdoZWlnaHQn
KSArICdweCcKKysgICAgfSk7CisrCisrICAgIHJldHVybiBlbGVtZW50OworKyAgfQorKworKyAg
ZnVuY3Rpb24gcmVsYXRpdml6ZShlbGVtZW50KSB7CisrICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQp
OworKyAgICBpZiAoRWxlbWVudC5nZXRTdHlsZShlbGVtZW50LCAncG9zaXRpb24nKSA9PT0gJ3Jl
bGF0aXZlJykgeworKyAgICAgIHJldHVybiBlbGVtZW50OworKyAgICB9CisrCisrICAgIHZhciBv
cmlnaW5hbFN0eWxlcyA9CisrICAgICBlbGVtZW50LnJldHJpZXZlKCdwcm90b3R5cGVfYWJzb2x1
dGl6ZV9vcmlnaW5hbF9zdHlsZXMnKTsKKysKKysgICAgaWYgKG9yaWdpbmFsU3R5bGVzKSBlbGVt
ZW50LnNldFN0eWxlKG9yaWdpbmFsU3R5bGVzKTsKKysgICAgcmV0dXJuIGVsZW1lbnQ7CisrICB9
CisrCisrICBpZiAoUHJvdG90eXBlLkJyb3dzZXIuSUUpIHsKKysgICAgZ2V0T2Zmc2V0UGFyZW50
ID0gZ2V0T2Zmc2V0UGFyZW50LndyYXAoCisrICAgICAgZnVuY3Rpb24ocHJvY2VlZCwgZWxlbWVu
dCkgeworKyAgICAgICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CisrCisrICAgICAgICBpZiAoaXNE
b2N1bWVudChlbGVtZW50KSB8fCBpc0RldGFjaGVkKGVsZW1lbnQpIHx8IGlzQm9keShlbGVtZW50
KSB8fCBpc0h0bWwoZWxlbWVudCkpCisrICAgICAgICAgIHJldHVybiAkKGRvY3VtZW50LmJvZHkp
OworKworKyAgICAgICAgdmFyIHBvc2l0aW9uID0gZWxlbWVudC5nZXRTdHlsZSgncG9zaXRpb24n
KTsKKysgICAgICAgIGlmIChwb3NpdGlvbiAhPT0gJ3N0YXRpYycpIHJldHVybiBwcm9jZWVkKGVs
ZW1lbnQpOworKworKyAgICAgICAgZWxlbWVudC5zZXRTdHlsZSh7IHBvc2l0aW9uOiAncmVsYXRp
dmUnIH0pOworKyAgICAgICAgdmFyIHZhbHVlID0gcHJvY2VlZChlbGVtZW50KTsKKysgICAgICAg
IGVsZW1lbnQuc2V0U3R5bGUoeyBwb3NpdGlvbjogcG9zaXRpb24gfSk7CisrICAgICAgICByZXR1
cm4gdmFsdWU7CisrICAgICAgfQorKyAgICApOworKworKyAgICBwb3NpdGlvbmVkT2Zmc2V0ID0g
cG9zaXRpb25lZE9mZnNldC53cmFwKGZ1bmN0aW9uKHByb2NlZWQsIGVsZW1lbnQpIHsKKysgICAg
ICBlbGVtZW50ID0gJChlbGVtZW50KTsKKysgICAgICBpZiAoIWVsZW1lbnQucGFyZW50Tm9kZSkg
cmV0dXJuIG5ldyBFbGVtZW50Lk9mZnNldCgwLCAwKTsKKysgICAgICB2YXIgcG9zaXRpb24gPSBl
bGVtZW50LmdldFN0eWxlKCdwb3NpdGlvbicpOworKyAgICAgIGlmIChwb3NpdGlvbiAhPT0gJ3N0
YXRpYycpIHJldHVybiBwcm9jZWVkKGVsZW1lbnQpOworKworKyAgICAgIHZhciBvZmZzZXRQYXJl
bnQgPSBlbGVtZW50LmdldE9mZnNldFBhcmVudCgpOworKyAgICAgIGlmIChvZmZzZXRQYXJlbnQg
JiYgb2Zmc2V0UGFyZW50LmdldFN0eWxlKCdwb3NpdGlvbicpID09PSAnZml4ZWQnKQorKyAgICAg
ICAgaGFzTGF5b3V0KG9mZnNldFBhcmVudCk7CisrCisrICAgICAgZWxlbWVudC5zZXRTdHlsZSh7
IHBvc2l0aW9uOiAncmVsYXRpdmUnIH0pOworKyAgICAgIHZhciB2YWx1ZSA9IHByb2NlZWQoZWxl
bWVudCk7CisrICAgICAgZWxlbWVudC5zZXRTdHlsZSh7IHBvc2l0aW9uOiBwb3NpdGlvbiB9KTsK
KysgICAgICByZXR1cm4gdmFsdWU7CisrICAgIH0pOworKyAgfSBlbHNlIGlmIChQcm90b3R5cGUu
QnJvd3Nlci5XZWJraXQpIHsKKysgICAgY3VtdWxhdGl2ZU9mZnNldCA9IGZ1bmN0aW9uKGVsZW1l
bnQpIHsKKysgICAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKKysgICAgICB2YXIgdmFsdWVUID0g
MCwgdmFsdWVMID0gMDsKKysgICAgICBkbyB7CisrICAgICAgICB2YWx1ZVQgKz0gZWxlbWVudC5v
ZmZzZXRUb3AgIHx8IDA7CisrICAgICAgICB2YWx1ZUwgKz0gZWxlbWVudC5vZmZzZXRMZWZ0IHx8
IDA7CisrICAgICAgICBpZiAoZWxlbWVudC5vZmZzZXRQYXJlbnQgPT0gZG9jdW1lbnQuYm9keSkK
KysgICAgICAgICAgaWYgKEVsZW1lbnQuZ2V0U3R5bGUoZWxlbWVudCwgJ3Bvc2l0aW9uJykgPT0g
J2Fic29sdXRlJykgYnJlYWs7CisrCisrICAgICAgICBlbGVtZW50ID0gZWxlbWVudC5vZmZzZXRQ
YXJlbnQ7CisrICAgICAgfSB3aGlsZSAoZWxlbWVudCk7CisrCisrICAgICAgcmV0dXJuIG5ldyBF
bGVtZW50Lk9mZnNldCh2YWx1ZUwsIHZhbHVlVCk7CisrICAgIH07CisrICB9CisrCisrCisrICBF
bGVtZW50LmFkZE1ldGhvZHMoeworKyAgICBnZXRMYXlvdXQ6ICAgICAgICAgICAgICBnZXRMYXlv
dXQsCisrICAgIG1lYXN1cmU6ICAgICAgICAgICAgICAgIG1lYXN1cmUsCisrICAgIGdldERpbWVu
c2lvbnM6ICAgICAgICAgIGdldERpbWVuc2lvbnMsCisrICAgIGdldE9mZnNldFBhcmVudDogICAg
ICAgIGdldE9mZnNldFBhcmVudCwKKysgICAgY3VtdWxhdGl2ZU9mZnNldDogICAgICAgY3VtdWxh
dGl2ZU9mZnNldCwKKysgICAgcG9zaXRpb25lZE9mZnNldDogICAgICAgcG9zaXRpb25lZE9mZnNl
dCwKKysgICAgY3VtdWxhdGl2ZVNjcm9sbE9mZnNldDogY3VtdWxhdGl2ZVNjcm9sbE9mZnNldCwK
KysgICAgdmlld3BvcnRPZmZzZXQ6ICAgICAgICAgdmlld3BvcnRPZmZzZXQsCisrICAgIGFic29s
dXRpemU6ICAgICAgICAgICAgIGFic29sdXRpemUsCisrICAgIHJlbGF0aXZpemU6ICAgICAgICAg
ICAgIHJlbGF0aXZpemUKKysgIH0pOworKworKyAgZnVuY3Rpb24gaXNCb2R5KGVsZW1lbnQpIHsK
KysgICAgcmV0dXJuIGVsZW1lbnQubm9kZU5hbWUudG9VcHBlckNhc2UoKSA9PT0gJ0JPRFknOwor
KyAgfQorKworKyAgZnVuY3Rpb24gaXNIdG1sKGVsZW1lbnQpIHsKKysgICAgcmV0dXJuIGVsZW1l
bnQubm9kZU5hbWUudG9VcHBlckNhc2UoKSA9PT0gJ0hUTUwnOworKyAgfQorKworKyAgZnVuY3Rp
b24gaXNEb2N1bWVudChlbGVtZW50KSB7CisrICAgIHJldHVybiBlbGVtZW50Lm5vZGVUeXBlID09
PSBOb2RlLkRPQ1VNRU5UX05PREU7CisrICB9CisrCisrICBmdW5jdGlvbiBpc0RldGFjaGVkKGVs
ZW1lbnQpIHsKKysgICAgcmV0dXJuIGVsZW1lbnQgIT09IGRvY3VtZW50LmJvZHkgJiYKKysgICAg
ICFFbGVtZW50LmRlc2NlbmRhbnRPZihlbGVtZW50LCBkb2N1bWVudC5ib2R5KTsKKysgIH0KKysK
KysgIGlmICgnZ2V0Qm91bmRpbmdDbGllbnRSZWN0JyBpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1l
bnQpIHsKKysgICAgRWxlbWVudC5hZGRNZXRob2RzKHsKKysgICAgICB2aWV3cG9ydE9mZnNldDog
ZnVuY3Rpb24oZWxlbWVudCkgeworKyAgICAgICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CisrICAg
ICAgICBpZiAoaXNEZXRhY2hlZChlbGVtZW50KSkgcmV0dXJuIG5ldyBFbGVtZW50Lk9mZnNldCgw
LCAwKTsKKysKKysgICAgICAgIHZhciByZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJl
Y3QoKSwKKysgICAgICAgICBkb2NFbCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDsKKysgICAg
ICAgIHJldHVybiBuZXcgRWxlbWVudC5PZmZzZXQocmVjdC5sZWZ0IC0gZG9jRWwuY2xpZW50TGVm
dCwKKysgICAgICAgICByZWN0LnRvcCAtIGRvY0VsLmNsaWVudFRvcCk7CisrICAgICAgfQorKyAg
ICB9KTsKKysgIH0KKyt9KSgpOworK3dpbmRvdy4kJCA9IGZ1bmN0aW9uKCkgeworKyAgdmFyIGV4
cHJlc3Npb24gPSAkQShhcmd1bWVudHMpLmpvaW4oJywgJyk7CisrICByZXR1cm4gUHJvdG90eXBl
LlNlbGVjdG9yLnNlbGVjdChleHByZXNzaW9uLCBkb2N1bWVudCk7CisrfTsKKysKKytQcm90b3R5
cGUuU2VsZWN0b3IgPSAoZnVuY3Rpb24oKSB7CisrCisrICBmdW5jdGlvbiBzZWxlY3QoKSB7Cisr
ICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kICJQcm90b3R5cGUuU2VsZWN0b3Iuc2VsZWN0IiBt
dXN0IGJlIGRlZmluZWQuJyk7CisrICB9CisrCisrICBmdW5jdGlvbiBtYXRjaCgpIHsKKysgICAg
dGhyb3cgbmV3IEVycm9yKCdNZXRob2QgIlByb3RvdHlwZS5TZWxlY3Rvci5tYXRjaCIgbXVzdCBi
ZSBkZWZpbmVkLicpOworKyAgfQorKworKyAgZnVuY3Rpb24gZmluZChlbGVtZW50cywgZXhwcmVz
c2lvbiwgaW5kZXgpIHsKKysgICAgaW5kZXggPSBpbmRleCB8fCAwOworKyAgICB2YXIgbWF0Y2gg
PSBQcm90b3R5cGUuU2VsZWN0b3IubWF0Y2gsIGxlbmd0aCA9IGVsZW1lbnRzLmxlbmd0aCwgbWF0
Y2hJbmRleCA9IDAsIGk7CisrCisrICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewor
KyAgICAgIGlmIChtYXRjaChlbGVtZW50c1tpXSwgZXhwcmVzc2lvbikgJiYgaW5kZXggPT0gbWF0
Y2hJbmRleCsrKSB7CisrICAgICAgICByZXR1cm4gRWxlbWVudC5leHRlbmQoZWxlbWVudHNbaV0p
OworKyAgICAgIH0KKysgICAgfQorKyAgfQorKworKyAgZnVuY3Rpb24gZXh0ZW5kRWxlbWVudHMo
ZWxlbWVudHMpIHsKKysgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGVsZW1lbnRzLmxlbmd0
aDsgaSA8IGxlbmd0aDsgaSsrKSB7CisrICAgICAgRWxlbWVudC5leHRlbmQoZWxlbWVudHNbaV0p
OworKyAgICB9CisrICAgIHJldHVybiBlbGVtZW50czsKKysgIH0KKysKKysKKysgIHZhciBLID0g
UHJvdG90eXBlLks7CisrCisrICByZXR1cm4geworKyAgICBzZWxlY3Q6IHNlbGVjdCwKKysgICAg
bWF0Y2g6IG1hdGNoLAorKyAgICBmaW5kOiBmaW5kLAorKyAgICBleHRlbmRFbGVtZW50czogKEVs
ZW1lbnQuZXh0ZW5kID09PSBLKSA/IEsgOiBleHRlbmRFbGVtZW50cywKKysgICAgZXh0ZW5kRWxl
bWVudDogRWxlbWVudC5leHRlbmQKKysgIH07CisrfSkoKTsKKytQcm90b3R5cGUuX29yaWdpbmFs
X3Byb3BlcnR5ID0gd2luZG93LlNpenpsZTsKKysvKiEKKysgKiBTaXp6bGUgQ1NTIFNlbGVjdG9y
IEVuZ2luZSAtIHYxLjAKKysgKiAgQ29weXJpZ2h0IDIwMDksIFRoZSBEb2pvIEZvdW5kYXRpb24K
KysgKiAgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCwgQlNELCBhbmQgR1BMIExpY2Vuc2VzLgorKyAq
ICBNb3JlIGluZm9ybWF0aW9uOiBodHRwOi8vc2l6emxlanMuY29tLworKyAqLworKyhmdW5jdGlv
bigpeworKworK3ZhciBjaHVua2VyID0gLygoPzpcKCg/OlwoW14oKV0rXCl8W14oKV0rKStcKXxc
Wyg/OlxbW15bXF1dKlxdfFsnIl1bXiciXSpbJyJdfFteW1xdJyJdKykrXF18XFwufFteID4rfiwo
XFtcXF0rKSt8Wz4rfl0pKFxzKixccyopPygoPzoufFxyfFxuKSopL2csCisrCWRvbmUgPSAwLAor
Kwl0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsCisrCWhhc0R1cGxpY2F0ZSA9
IGZhbHNlLAorKwliYXNlSGFzRHVwbGljYXRlID0gdHJ1ZTsKKysKKytbMCwgMF0uc29ydChmdW5j
dGlvbigpeworKwliYXNlSGFzRHVwbGljYXRlID0gZmFsc2U7CisrCXJldHVybiAwOworK30pOwor
KworK3ZhciBTaXp6bGUgPSBmdW5jdGlvbihzZWxlY3RvciwgY29udGV4dCwgcmVzdWx0cywgc2Vl
ZCkgeworKwlyZXN1bHRzID0gcmVzdWx0cyB8fCBbXTsKKysJdmFyIG9yaWdDb250ZXh0ID0gY29u
dGV4dCA9IGNvbnRleHQgfHwgZG9jdW1lbnQ7CisrCisrCWlmICggY29udGV4dC5ub2RlVHlwZSAh
PT0gMSAmJiBjb250ZXh0Lm5vZGVUeXBlICE9PSA5ICkgeworKwkJcmV0dXJuIFtdOworKwl9Cisr
CisrCWlmICggIXNlbGVjdG9yIHx8IHR5cGVvZiBzZWxlY3RvciAhPT0gInN0cmluZyIgKSB7Cisr
CQlyZXR1cm4gcmVzdWx0czsKKysJfQorKworKwl2YXIgcGFydHMgPSBbXSwgbSwgc2V0LCBjaGVj
a1NldCwgY2hlY2ssIG1vZGUsIGV4dHJhLCBwcnVuZSA9IHRydWUsIGNvbnRleHRYTUwgPSBpc1hN
TChjb250ZXh0KSwKKysJCXNvRmFyID0gc2VsZWN0b3I7CisrCisrCXdoaWxlICggKGNodW5rZXIu
ZXhlYygiIiksIG0gPSBjaHVua2VyLmV4ZWMoc29GYXIpKSAhPT0gbnVsbCApIHsKKysJCXNvRmFy
ID0gbVszXTsKKysKKysJCXBhcnRzLnB1c2goIG1bMV0gKTsKKysKKysJCWlmICggbVsyXSApIHsK
KysJCQlleHRyYSA9IG1bM107CisrCQkJYnJlYWs7CisrCQl9CisrCX0KKysKKysJaWYgKCBwYXJ0
cy5sZW5ndGggPiAxICYmIG9yaWdQT1MuZXhlYyggc2VsZWN0b3IgKSApIHsKKysJCWlmICggcGFy
dHMubGVuZ3RoID09PSAyICYmIEV4cHIucmVsYXRpdmVbIHBhcnRzWzBdIF0gKSB7CisrCQkJc2V0
ID0gcG9zUHJvY2VzcyggcGFydHNbMF0gKyBwYXJ0c1sxXSwgY29udGV4dCApOworKwkJfSBlbHNl
IHsKKysJCQlzZXQgPSBFeHByLnJlbGF0aXZlWyBwYXJ0c1swXSBdID8KKysJCQkJWyBjb250ZXh0
IF0gOgorKwkJCQlTaXp6bGUoIHBhcnRzLnNoaWZ0KCksIGNvbnRleHQgKTsKKysKKysJCQl3aGls
ZSAoIHBhcnRzLmxlbmd0aCApIHsKKysJCQkJc2VsZWN0b3IgPSBwYXJ0cy5zaGlmdCgpOworKwor
KwkJCQlpZiAoIEV4cHIucmVsYXRpdmVbIHNlbGVjdG9yIF0gKQorKwkJCQkJc2VsZWN0b3IgKz0g
cGFydHMuc2hpZnQoKTsKKysKKysJCQkJc2V0ID0gcG9zUHJvY2Vzcyggc2VsZWN0b3IsIHNldCAp
OworKwkJCX0KKysJCX0KKysJfSBlbHNlIHsKKysJCWlmICggIXNlZWQgJiYgcGFydHMubGVuZ3Ro
ID4gMSAmJiBjb250ZXh0Lm5vZGVUeXBlID09PSA5ICYmICFjb250ZXh0WE1MICYmCisrCQkJCUV4
cHIubWF0Y2guSUQudGVzdChwYXJ0c1swXSkgJiYgIUV4cHIubWF0Y2guSUQudGVzdChwYXJ0c1tw
YXJ0cy5sZW5ndGggLSAxXSkgKSB7CisrCQkJdmFyIHJldCA9IFNpenpsZS5maW5kKCBwYXJ0cy5z
aGlmdCgpLCBjb250ZXh0LCBjb250ZXh0WE1MICk7CisrCQkJY29udGV4dCA9IHJldC5leHByID8g
U2l6emxlLmZpbHRlciggcmV0LmV4cHIsIHJldC5zZXQgKVswXSA6IHJldC5zZXRbMF07CisrCQl9
CisrCisrCQlpZiAoIGNvbnRleHQgKSB7CisrCQkJdmFyIHJldCA9IHNlZWQgPworKwkJCQl7IGV4
cHI6IHBhcnRzLnBvcCgpLCBzZXQ6IG1ha2VBcnJheShzZWVkKSB9IDoKKysJCQkJU2l6emxlLmZp
bmQoIHBhcnRzLnBvcCgpLCBwYXJ0cy5sZW5ndGggPT09IDEgJiYgKHBhcnRzWzBdID09PSAifiIg
fHwgcGFydHNbMF0gPT09ICIrIikgJiYgY29udGV4dC5wYXJlbnROb2RlID8gY29udGV4dC5wYXJl
bnROb2RlIDogY29udGV4dCwgY29udGV4dFhNTCApOworKwkJCXNldCA9IHJldC5leHByID8gU2l6
emxlLmZpbHRlciggcmV0LmV4cHIsIHJldC5zZXQgKSA6IHJldC5zZXQ7CisrCisrCQkJaWYgKCBw
YXJ0cy5sZW5ndGggPiAwICkgeworKwkJCQljaGVja1NldCA9IG1ha2VBcnJheShzZXQpOworKwkJ
CX0gZWxzZSB7CisrCQkJCXBydW5lID0gZmFsc2U7CisrCQkJfQorKworKwkJCXdoaWxlICggcGFy
dHMubGVuZ3RoICkgeworKwkJCQl2YXIgY3VyID0gcGFydHMucG9wKCksIHBvcCA9IGN1cjsKKysK
KysJCQkJaWYgKCAhRXhwci5yZWxhdGl2ZVsgY3VyIF0gKSB7CisrCQkJCQljdXIgPSAiIjsKKysJ
CQkJfSBlbHNlIHsKKysJCQkJCXBvcCA9IHBhcnRzLnBvcCgpOworKwkJCQl9CisrCisrCQkJCWlm
ICggcG9wID09IG51bGwgKSB7CisrCQkJCQlwb3AgPSBjb250ZXh0OworKwkJCQl9CisrCisrCQkJ
CUV4cHIucmVsYXRpdmVbIGN1ciBdKCBjaGVja1NldCwgcG9wLCBjb250ZXh0WE1MICk7CisrCQkJ
fQorKwkJfSBlbHNlIHsKKysJCQljaGVja1NldCA9IHBhcnRzID0gW107CisrCQl9CisrCX0KKysK
KysJaWYgKCAhY2hlY2tTZXQgKSB7CisrCQljaGVja1NldCA9IHNldDsKKysJfQorKworKwlpZiAo
ICFjaGVja1NldCApIHsKKysJCXRocm93ICJTeW50YXggZXJyb3IsIHVucmVjb2duaXplZCBleHBy
ZXNzaW9uOiAiICsgKGN1ciB8fCBzZWxlY3Rvcik7CisrCX0KKysKKysJaWYgKCB0b1N0cmluZy5j
YWxsKGNoZWNrU2V0KSA9PT0gIltvYmplY3QgQXJyYXldIiApIHsKKysJCWlmICggIXBydW5lICkg
eworKwkJCXJlc3VsdHMucHVzaC5hcHBseSggcmVzdWx0cywgY2hlY2tTZXQgKTsKKysJCX0gZWxz
ZSBpZiAoIGNvbnRleHQgJiYgY29udGV4dC5ub2RlVHlwZSA9PT0gMSApIHsKKysJCQlmb3IgKCB2
YXIgaSA9IDA7IGNoZWNrU2V0W2ldICE9IG51bGw7IGkrKyApIHsKKysJCQkJaWYgKCBjaGVja1Nl
dFtpXSAmJiAoY2hlY2tTZXRbaV0gPT09IHRydWUgfHwgY2hlY2tTZXRbaV0ubm9kZVR5cGUgPT09
IDEgJiYgY29udGFpbnMoY29udGV4dCwgY2hlY2tTZXRbaV0pKSApIHsKKysJCQkJCXJlc3VsdHMu
cHVzaCggc2V0W2ldICk7CisrCQkJCX0KKysJCQl9CisrCQl9IGVsc2UgeworKwkJCWZvciAoIHZh
ciBpID0gMDsgY2hlY2tTZXRbaV0gIT0gbnVsbDsgaSsrICkgeworKwkJCQlpZiAoIGNoZWNrU2V0
W2ldICYmIGNoZWNrU2V0W2ldLm5vZGVUeXBlID09PSAxICkgeworKwkJCQkJcmVzdWx0cy5wdXNo
KCBzZXRbaV0gKTsKKysJCQkJfQorKwkJCX0KKysJCX0KKysJfSBlbHNlIHsKKysJCW1ha2VBcnJh
eSggY2hlY2tTZXQsIHJlc3VsdHMgKTsKKysJfQorKworKwlpZiAoIGV4dHJhICkgeworKwkJU2l6
emxlKCBleHRyYSwgb3JpZ0NvbnRleHQsIHJlc3VsdHMsIHNlZWQgKTsKKysJCVNpenpsZS51bmlx
dWVTb3J0KCByZXN1bHRzICk7CisrCX0KKysKKysJcmV0dXJuIHJlc3VsdHM7CisrfTsKKysKKytT
aXp6bGUudW5pcXVlU29ydCA9IGZ1bmN0aW9uKHJlc3VsdHMpeworKwlpZiAoIHNvcnRPcmRlciAp
IHsKKysJCWhhc0R1cGxpY2F0ZSA9IGJhc2VIYXNEdXBsaWNhdGU7CisrCQlyZXN1bHRzLnNvcnQo
c29ydE9yZGVyKTsKKysKKysJCWlmICggaGFzRHVwbGljYXRlICkgeworKwkJCWZvciAoIHZhciBp
ID0gMTsgaSA8IHJlc3VsdHMubGVuZ3RoOyBpKysgKSB7CisrCQkJCWlmICggcmVzdWx0c1tpXSA9
PT0gcmVzdWx0c1tpLTFdICkgeworKwkJCQkJcmVzdWx0cy5zcGxpY2UoaS0tLCAxKTsKKysJCQkJ
fQorKwkJCX0KKysJCX0KKysJfQorKworKwlyZXR1cm4gcmVzdWx0czsKKyt9OworKworK1Npenps
ZS5tYXRjaGVzID0gZnVuY3Rpb24oZXhwciwgc2V0KXsKKysJcmV0dXJuIFNpenpsZShleHByLCBu
dWxsLCBudWxsLCBzZXQpOworK307CisrCisrU2l6emxlLmZpbmQgPSBmdW5jdGlvbihleHByLCBj
b250ZXh0LCBpc1hNTCl7CisrCXZhciBzZXQsIG1hdGNoOworKworKwlpZiAoICFleHByICkgewor
KwkJcmV0dXJuIFtdOworKwl9CisrCisrCWZvciAoIHZhciBpID0gMCwgbCA9IEV4cHIub3JkZXIu
bGVuZ3RoOyBpIDwgbDsgaSsrICkgeworKwkJdmFyIHR5cGUgPSBFeHByLm9yZGVyW2ldLCBtYXRj
aDsKKysKKysJCWlmICggKG1hdGNoID0gRXhwci5sZWZ0TWF0Y2hbIHR5cGUgXS5leGVjKCBleHBy
ICkpICkgeworKwkJCXZhciBsZWZ0ID0gbWF0Y2hbMV07CisrCQkJbWF0Y2guc3BsaWNlKDEsMSk7
CisrCisrCQkJaWYgKCBsZWZ0LnN1YnN0ciggbGVmdC5sZW5ndGggLSAxICkgIT09ICJcXCIgKSB7
CisrCQkJCW1hdGNoWzFdID0gKG1hdGNoWzFdIHx8ICIiKS5yZXBsYWNlKC9cXC9nLCAiIik7Cisr
CQkJCXNldCA9IEV4cHIuZmluZFsgdHlwZSBdKCBtYXRjaCwgY29udGV4dCwgaXNYTUwgKTsKKysJ
CQkJaWYgKCBzZXQgIT0gbnVsbCApIHsKKysJCQkJCWV4cHIgPSBleHByLnJlcGxhY2UoIEV4cHIu
bWF0Y2hbIHR5cGUgXSwgIiIgKTsKKysJCQkJCWJyZWFrOworKwkJCQl9CisrCQkJfQorKwkJfQor
Kwl9CisrCisrCWlmICggIXNldCApIHsKKysJCXNldCA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeVRh
Z05hbWUoIioiKTsKKysJfQorKworKwlyZXR1cm4ge3NldDogc2V0LCBleHByOiBleHByfTsKKyt9
OworKworK1NpenpsZS5maWx0ZXIgPSBmdW5jdGlvbihleHByLCBzZXQsIGlucGxhY2UsIG5vdCl7
CisrCXZhciBvbGQgPSBleHByLCByZXN1bHQgPSBbXSwgY3VyTG9vcCA9IHNldCwgbWF0Y2gsIGFu
eUZvdW5kLAorKwkJaXNYTUxGaWx0ZXIgPSBzZXQgJiYgc2V0WzBdICYmIGlzWE1MKHNldFswXSk7
CisrCisrCXdoaWxlICggZXhwciAmJiBzZXQubGVuZ3RoICkgeworKwkJZm9yICggdmFyIHR5cGUg
aW4gRXhwci5maWx0ZXIgKSB7CisrCQkJaWYgKCAobWF0Y2ggPSBFeHByLm1hdGNoWyB0eXBlIF0u
ZXhlYyggZXhwciApKSAhPSBudWxsICkgeworKwkJCQl2YXIgZmlsdGVyID0gRXhwci5maWx0ZXJb
IHR5cGUgXSwgZm91bmQsIGl0ZW07CisrCQkJCWFueUZvdW5kID0gZmFsc2U7CisrCisrCQkJCWlm
ICggY3VyTG9vcCA9PSByZXN1bHQgKSB7CisrCQkJCQlyZXN1bHQgPSBbXTsKKysJCQkJfQorKwor
KwkJCQlpZiAoIEV4cHIucHJlRmlsdGVyWyB0eXBlIF0gKSB7CisrCQkJCQltYXRjaCA9IEV4cHIu
cHJlRmlsdGVyWyB0eXBlIF0oIG1hdGNoLCBjdXJMb29wLCBpbnBsYWNlLCByZXN1bHQsIG5vdCwg
aXNYTUxGaWx0ZXIgKTsKKysKKysJCQkJCWlmICggIW1hdGNoICkgeworKwkJCQkJCWFueUZvdW5k
ID0gZm91bmQgPSB0cnVlOworKwkJCQkJfSBlbHNlIGlmICggbWF0Y2ggPT09IHRydWUgKSB7Cisr
CQkJCQkJY29udGludWU7CisrCQkJCQl9CisrCQkJCX0KKysKKysJCQkJaWYgKCBtYXRjaCApIHsK
KysJCQkJCWZvciAoIHZhciBpID0gMDsgKGl0ZW0gPSBjdXJMb29wW2ldKSAhPSBudWxsOyBpKysg
KSB7CisrCQkJCQkJaWYgKCBpdGVtICkgeworKwkJCQkJCQlmb3VuZCA9IGZpbHRlciggaXRlbSwg
bWF0Y2gsIGksIGN1ckxvb3AgKTsKKysJCQkJCQkJdmFyIHBhc3MgPSBub3QgXiAhIWZvdW5kOwor
KworKwkJCQkJCQlpZiAoIGlucGxhY2UgJiYgZm91bmQgIT0gbnVsbCApIHsKKysJCQkJCQkJCWlm
ICggcGFzcyApIHsKKysJCQkJCQkJCQlhbnlGb3VuZCA9IHRydWU7CisrCQkJCQkJCQl9IGVsc2Ug
eworKwkJCQkJCQkJCWN1ckxvb3BbaV0gPSBmYWxzZTsKKysJCQkJCQkJCX0KKysJCQkJCQkJfSBl
bHNlIGlmICggcGFzcyApIHsKKysJCQkJCQkJCXJlc3VsdC5wdXNoKCBpdGVtICk7CisrCQkJCQkJ
CQlhbnlGb3VuZCA9IHRydWU7CisrCQkJCQkJCX0KKysJCQkJCQl9CisrCQkJCQl9CisrCQkJCX0K
KysKKysJCQkJaWYgKCBmb3VuZCAhPT0gdW5kZWZpbmVkICkgeworKwkJCQkJaWYgKCAhaW5wbGFj
ZSApIHsKKysJCQkJCQljdXJMb29wID0gcmVzdWx0OworKwkJCQkJfQorKworKwkJCQkJZXhwciA9
IGV4cHIucmVwbGFjZSggRXhwci5tYXRjaFsgdHlwZSBdLCAiIiApOworKworKwkJCQkJaWYgKCAh
YW55Rm91bmQgKSB7CisrCQkJCQkJcmV0dXJuIFtdOworKwkJCQkJfQorKworKwkJCQkJYnJlYWs7
CisrCQkJCX0KKysJCQl9CisrCQl9CisrCisrCQlpZiAoIGV4cHIgPT0gb2xkICkgeworKwkJCWlm
ICggYW55Rm91bmQgPT0gbnVsbCApIHsKKysJCQkJdGhyb3cgIlN5bnRheCBlcnJvciwgdW5yZWNv
Z25pemVkIGV4cHJlc3Npb246ICIgKyBleHByOworKwkJCX0gZWxzZSB7CisrCQkJCWJyZWFrOwor
KwkJCX0KKysJCX0KKysKKysJCW9sZCA9IGV4cHI7CisrCX0KKysKKysJcmV0dXJuIGN1ckxvb3A7
CisrfTsKKysKKyt2YXIgRXhwciA9IFNpenpsZS5zZWxlY3RvcnMgPSB7CisrCW9yZGVyOiBbICJJ
RCIsICJOQU1FIiwgIlRBRyIgXSwKKysJbWF0Y2g6IHsKKysJCUlEOiAvIygoPzpbXHdcdTAwYzAt
XHVGRkZGLV18XFwuKSspLywKKysJCUNMQVNTOiAvXC4oKD86W1x3XHUwMGMwLVx1RkZGRi1dfFxc
LikrKS8sCisrCQlOQU1FOiAvXFtuYW1lPVsnIl0qKCg/Oltcd1x1MDBjMC1cdUZGRkYtXXxcXC4p
KylbJyJdKlxdLywKKysJCUFUVFI6IC9cW1xzKigoPzpbXHdcdTAwYzAtXHVGRkZGLV18XFwuKSsp
XHMqKD86KFxTPz0pXHMqKFsnIl0qKSguKj8pXDN8KVxzKlxdLywKKysJCVRBRzogL14oKD86W1x3
XHUwMGMwLVx1RkZGRlwqLV18XFwuKSspLywKKysJCUNISUxEOiAvOihvbmx5fG50aHxsYXN0fGZp
cnN0KS1jaGlsZCg/OlwoKGV2ZW58b2RkfFtcZG4rLV0qKVwpKT8vLAorKwkJUE9TOiAvOihudGh8
ZXF8Z3R8bHR8Zmlyc3R8bGFzdHxldmVufG9kZCkoPzpcKChcZCopXCkpPyg/PVteLV18JCkvLAor
KwkJUFNFVURPOiAvOigoPzpbXHdcdTAwYzAtXHVGRkZGLV18XFwuKSspKD86XCgoWyciXSopKCg/
OlwoW15cKV0rXCl8W15cMlwoXCldKikrKVwyXCkpPy8KKysJfSwKKysJbGVmdE1hdGNoOiB7fSwK
KysJYXR0ck1hcDogeworKwkJImNsYXNzIjogImNsYXNzTmFtZSIsCisrCQkiZm9yIjogImh0bWxG
b3IiCisrCX0sCisrCWF0dHJIYW5kbGU6IHsKKysJCWhyZWY6IGZ1bmN0aW9uKGVsZW0peworKwkJ
CXJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSgiaHJlZiIpOworKwkJfQorKwl9LAorKwlyZWxhdGl2
ZTogeworKwkJIisiOiBmdW5jdGlvbihjaGVja1NldCwgcGFydCwgaXNYTUwpeworKwkJCXZhciBp
c1BhcnRTdHIgPSB0eXBlb2YgcGFydCA9PT0gInN0cmluZyIsCisrCQkJCWlzVGFnID0gaXNQYXJ0
U3RyICYmICEvXFcvLnRlc3QocGFydCksCisrCQkJCWlzUGFydFN0ck5vdFRhZyA9IGlzUGFydFN0
ciAmJiAhaXNUYWc7CisrCisrCQkJaWYgKCBpc1RhZyAmJiAhaXNYTUwgKSB7CisrCQkJCXBhcnQg
PSBwYXJ0LnRvVXBwZXJDYXNlKCk7CisrCQkJfQorKworKwkJCWZvciAoIHZhciBpID0gMCwgbCA9
IGNoZWNrU2V0Lmxlbmd0aCwgZWxlbTsgaSA8IGw7IGkrKyApIHsKKysJCQkJaWYgKCAoZWxlbSA9
IGNoZWNrU2V0W2ldKSApIHsKKysJCQkJCXdoaWxlICggKGVsZW0gPSBlbGVtLnByZXZpb3VzU2li
bGluZykgJiYgZWxlbS5ub2RlVHlwZSAhPT0gMSApIHt9CisrCisrCQkJCQljaGVja1NldFtpXSA9
IGlzUGFydFN0ck5vdFRhZyB8fCBlbGVtICYmIGVsZW0ubm9kZU5hbWUgPT09IHBhcnQgPworKwkJ
CQkJCWVsZW0gfHwgZmFsc2UgOgorKwkJCQkJCWVsZW0gPT09IHBhcnQ7CisrCQkJCX0KKysJCQl9
CisrCisrCQkJaWYgKCBpc1BhcnRTdHJOb3RUYWcgKSB7CisrCQkJCVNpenpsZS5maWx0ZXIoIHBh
cnQsIGNoZWNrU2V0LCB0cnVlICk7CisrCQkJfQorKwkJfSwKKysJCSI+IjogZnVuY3Rpb24oY2hl
Y2tTZXQsIHBhcnQsIGlzWE1MKXsKKysJCQl2YXIgaXNQYXJ0U3RyID0gdHlwZW9mIHBhcnQgPT09
ICJzdHJpbmciOworKworKwkJCWlmICggaXNQYXJ0U3RyICYmICEvXFcvLnRlc3QocGFydCkgKSB7
CisrCQkJCXBhcnQgPSBpc1hNTCA/IHBhcnQgOiBwYXJ0LnRvVXBwZXJDYXNlKCk7CisrCisrCQkJ
CWZvciAoIHZhciBpID0gMCwgbCA9IGNoZWNrU2V0Lmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKKysJ
CQkJCXZhciBlbGVtID0gY2hlY2tTZXRbaV07CisrCQkJCQlpZiAoIGVsZW0gKSB7CisrCQkJCQkJ
dmFyIHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZTsKKysJCQkJCQljaGVja1NldFtpXSA9IHBhcmVu
dC5ub2RlTmFtZSA9PT0gcGFydCA/IHBhcmVudCA6IGZhbHNlOworKwkJCQkJfQorKwkJCQl9Cisr
CQkJfSBlbHNlIHsKKysJCQkJZm9yICggdmFyIGkgPSAwLCBsID0gY2hlY2tTZXQubGVuZ3RoOyBp
IDwgbDsgaSsrICkgeworKwkJCQkJdmFyIGVsZW0gPSBjaGVja1NldFtpXTsKKysJCQkJCWlmICgg
ZWxlbSApIHsKKysJCQkJCQljaGVja1NldFtpXSA9IGlzUGFydFN0ciA/CisrCQkJCQkJCWVsZW0u
cGFyZW50Tm9kZSA6CisrCQkJCQkJCWVsZW0ucGFyZW50Tm9kZSA9PT0gcGFydDsKKysJCQkJCX0K
KysJCQkJfQorKworKwkJCQlpZiAoIGlzUGFydFN0ciApIHsKKysJCQkJCVNpenpsZS5maWx0ZXIo
IHBhcnQsIGNoZWNrU2V0LCB0cnVlICk7CisrCQkJCX0KKysJCQl9CisrCQl9LAorKwkJIiI6IGZ1
bmN0aW9uKGNoZWNrU2V0LCBwYXJ0LCBpc1hNTCl7CisrCQkJdmFyIGRvbmVOYW1lID0gZG9uZSsr
LCBjaGVja0ZuID0gZGlyQ2hlY2s7CisrCisrCQkJaWYgKCAhL1xXLy50ZXN0KHBhcnQpICkgewor
KwkJCQl2YXIgbm9kZUNoZWNrID0gcGFydCA9IGlzWE1MID8gcGFydCA6IHBhcnQudG9VcHBlckNh
c2UoKTsKKysJCQkJY2hlY2tGbiA9IGRpck5vZGVDaGVjazsKKysJCQl9CisrCisrCQkJY2hlY2tG
bigicGFyZW50Tm9kZSIsIHBhcnQsIGRvbmVOYW1lLCBjaGVja1NldCwgbm9kZUNoZWNrLCBpc1hN
TCk7CisrCQl9LAorKwkJIn4iOiBmdW5jdGlvbihjaGVja1NldCwgcGFydCwgaXNYTUwpeworKwkJ
CXZhciBkb25lTmFtZSA9IGRvbmUrKywgY2hlY2tGbiA9IGRpckNoZWNrOworKworKwkJCWlmICgg
dHlwZW9mIHBhcnQgPT09ICJzdHJpbmciICYmICEvXFcvLnRlc3QocGFydCkgKSB7CisrCQkJCXZh
ciBub2RlQ2hlY2sgPSBwYXJ0ID0gaXNYTUwgPyBwYXJ0IDogcGFydC50b1VwcGVyQ2FzZSgpOwor
KwkJCQljaGVja0ZuID0gZGlyTm9kZUNoZWNrOworKwkJCX0KKysKKysJCQljaGVja0ZuKCJwcmV2
aW91c1NpYmxpbmciLCBwYXJ0LCBkb25lTmFtZSwgY2hlY2tTZXQsIG5vZGVDaGVjaywgaXNYTUwp
OworKwkJfQorKwl9LAorKwlmaW5kOiB7CisrCQlJRDogZnVuY3Rpb24obWF0Y2gsIGNvbnRleHQs
IGlzWE1MKXsKKysJCQlpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRCeUlkICE9PSAidW5k
ZWZpbmVkIiAmJiAhaXNYTUwgKSB7CisrCQkJCXZhciBtID0gY29udGV4dC5nZXRFbGVtZW50QnlJ
ZChtYXRjaFsxXSk7CisrCQkJCXJldHVybiBtID8gW21dIDogW107CisrCQkJfQorKwkJfSwKKysJ
CU5BTUU6IGZ1bmN0aW9uKG1hdGNoLCBjb250ZXh0LCBpc1hNTCl7CisrCQkJaWYgKCB0eXBlb2Yg
Y29udGV4dC5nZXRFbGVtZW50c0J5TmFtZSAhPT0gInVuZGVmaW5lZCIgKSB7CisrCQkJCXZhciBy
ZXQgPSBbXSwgcmVzdWx0cyA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeU5hbWUobWF0Y2hbMV0pOwor
KworKwkJCQlmb3IgKCB2YXIgaSA9IDAsIGwgPSByZXN1bHRzLmxlbmd0aDsgaSA8IGw7IGkrKyAp
IHsKKysJCQkJCWlmICggcmVzdWx0c1tpXS5nZXRBdHRyaWJ1dGUoIm5hbWUiKSA9PT0gbWF0Y2hb
MV0gKSB7CisrCQkJCQkJcmV0LnB1c2goIHJlc3VsdHNbaV0gKTsKKysJCQkJCX0KKysJCQkJfQor
KworKwkJCQlyZXR1cm4gcmV0Lmxlbmd0aCA9PT0gMCA/IG51bGwgOiByZXQ7CisrCQkJfQorKwkJ
fSwKKysJCVRBRzogZnVuY3Rpb24obWF0Y2gsIGNvbnRleHQpeworKwkJCXJldHVybiBjb250ZXh0
LmdldEVsZW1lbnRzQnlUYWdOYW1lKG1hdGNoWzFdKTsKKysJCX0KKysJfSwKKysJcHJlRmlsdGVy
OiB7CisrCQlDTEFTUzogZnVuY3Rpb24obWF0Y2gsIGN1ckxvb3AsIGlucGxhY2UsIHJlc3VsdCwg
bm90LCBpc1hNTCl7CisrCQkJbWF0Y2ggPSAiICIgKyBtYXRjaFsxXS5yZXBsYWNlKC9cXC9nLCAi
IikgKyAiICI7CisrCisrCQkJaWYgKCBpc1hNTCApIHsKKysJCQkJcmV0dXJuIG1hdGNoOworKwkJ
CX0KKysKKysJCQlmb3IgKCB2YXIgaSA9IDAsIGVsZW07IChlbGVtID0gY3VyTG9vcFtpXSkgIT0g
bnVsbDsgaSsrICkgeworKwkJCQlpZiAoIGVsZW0gKSB7CisrCQkJCQlpZiAoIG5vdCBeIChlbGVt
LmNsYXNzTmFtZSAmJiAoIiAiICsgZWxlbS5jbGFzc05hbWUgKyAiICIpLmluZGV4T2YobWF0Y2gp
ID49IDApICkgeworKwkJCQkJCWlmICggIWlucGxhY2UgKQorKwkJCQkJCQlyZXN1bHQucHVzaCgg
ZWxlbSApOworKwkJCQkJfSBlbHNlIGlmICggaW5wbGFjZSApIHsKKysJCQkJCQljdXJMb29wW2ld
ID0gZmFsc2U7CisrCQkJCQl9CisrCQkJCX0KKysJCQl9CisrCisrCQkJcmV0dXJuIGZhbHNlOwor
KwkJfSwKKysJCUlEOiBmdW5jdGlvbihtYXRjaCl7CisrCQkJcmV0dXJuIG1hdGNoWzFdLnJlcGxh
Y2UoL1xcL2csICIiKTsKKysJCX0sCisrCQlUQUc6IGZ1bmN0aW9uKG1hdGNoLCBjdXJMb29wKXsK
KysJCQlmb3IgKCB2YXIgaSA9IDA7IGN1ckxvb3BbaV0gPT09IGZhbHNlOyBpKysgKXt9CisrCQkJ
cmV0dXJuIGN1ckxvb3BbaV0gJiYgaXNYTUwoY3VyTG9vcFtpXSkgPyBtYXRjaFsxXSA6IG1hdGNo
WzFdLnRvVXBwZXJDYXNlKCk7CisrCQl9LAorKwkJQ0hJTEQ6IGZ1bmN0aW9uKG1hdGNoKXsKKysJ
CQlpZiAoIG1hdGNoWzFdID09ICJudGgiICkgeworKwkJCQl2YXIgdGVzdCA9IC8oLT8pKFxkKilu
KCg/OlwrfC0pP1xkKikvLmV4ZWMoCisrCQkJCQltYXRjaFsyXSA9PSAiZXZlbiIgJiYgIjJuIiB8
fCBtYXRjaFsyXSA9PSAib2RkIiAmJiAiMm4rMSIgfHwKKysJCQkJCSEvXEQvLnRlc3QoIG1hdGNo
WzJdICkgJiYgIjBuKyIgKyBtYXRjaFsyXSB8fCBtYXRjaFsyXSk7CisrCisrCQkJCW1hdGNoWzJd
ID0gKHRlc3RbMV0gKyAodGVzdFsyXSB8fCAxKSkgLSAwOworKwkJCQltYXRjaFszXSA9IHRlc3Rb
M10gLSAwOworKwkJCX0KKysKKysJCQltYXRjaFswXSA9IGRvbmUrKzsKKysKKysJCQlyZXR1cm4g
bWF0Y2g7CisrCQl9LAorKwkJQVRUUjogZnVuY3Rpb24obWF0Y2gsIGN1ckxvb3AsIGlucGxhY2Us
IHJlc3VsdCwgbm90LCBpc1hNTCl7CisrCQkJdmFyIG5hbWUgPSBtYXRjaFsxXS5yZXBsYWNlKC9c
XC9nLCAiIik7CisrCisrCQkJaWYgKCAhaXNYTUwgJiYgRXhwci5hdHRyTWFwW25hbWVdICkgewor
KwkJCQltYXRjaFsxXSA9IEV4cHIuYXR0ck1hcFtuYW1lXTsKKysJCQl9CisrCisrCQkJaWYgKCBt
YXRjaFsyXSA9PT0gIn49IiApIHsKKysJCQkJbWF0Y2hbNF0gPSAiICIgKyBtYXRjaFs0XSArICIg
IjsKKysJCQl9CisrCisrCQkJcmV0dXJuIG1hdGNoOworKwkJfSwKKysJCVBTRVVETzogZnVuY3Rp
b24obWF0Y2gsIGN1ckxvb3AsIGlucGxhY2UsIHJlc3VsdCwgbm90KXsKKysJCQlpZiAoIG1hdGNo
WzFdID09PSAibm90IiApIHsKKysJCQkJaWYgKCAoIGNodW5rZXIuZXhlYyhtYXRjaFszXSkgfHwg
IiIgKS5sZW5ndGggPiAxIHx8IC9eXHcvLnRlc3QobWF0Y2hbM10pICkgeworKwkJCQkJbWF0Y2hb
M10gPSBTaXp6bGUobWF0Y2hbM10sIG51bGwsIG51bGwsIGN1ckxvb3ApOworKwkJCQl9IGVsc2Ug
eworKwkJCQkJdmFyIHJldCA9IFNpenpsZS5maWx0ZXIobWF0Y2hbM10sIGN1ckxvb3AsIGlucGxh
Y2UsIHRydWUgXiBub3QpOworKwkJCQkJaWYgKCAhaW5wbGFjZSApIHsKKysJCQkJCQlyZXN1bHQu
cHVzaC5hcHBseSggcmVzdWx0LCByZXQgKTsKKysJCQkJCX0KKysJCQkJCXJldHVybiBmYWxzZTsK
KysJCQkJfQorKwkJCX0gZWxzZSBpZiAoIEV4cHIubWF0Y2guUE9TLnRlc3QoIG1hdGNoWzBdICkg
fHwgRXhwci5tYXRjaC5DSElMRC50ZXN0KCBtYXRjaFswXSApICkgeworKwkJCQlyZXR1cm4gdHJ1
ZTsKKysJCQl9CisrCisrCQkJcmV0dXJuIG1hdGNoOworKwkJfSwKKysJCVBPUzogZnVuY3Rpb24o
bWF0Y2gpeworKwkJCW1hdGNoLnVuc2hpZnQoIHRydWUgKTsKKysJCQlyZXR1cm4gbWF0Y2g7Cisr
CQl9CisrCX0sCisrCWZpbHRlcnM6IHsKKysJCWVuYWJsZWQ6IGZ1bmN0aW9uKGVsZW0peworKwkJ
CXJldHVybiBlbGVtLmRpc2FibGVkID09PSBmYWxzZSAmJiBlbGVtLnR5cGUgIT09ICJoaWRkZW4i
OworKwkJfSwKKysJCWRpc2FibGVkOiBmdW5jdGlvbihlbGVtKXsKKysJCQlyZXR1cm4gZWxlbS5k
aXNhYmxlZCA9PT0gdHJ1ZTsKKysJCX0sCisrCQljaGVja2VkOiBmdW5jdGlvbihlbGVtKXsKKysJ
CQlyZXR1cm4gZWxlbS5jaGVja2VkID09PSB0cnVlOworKwkJfSwKKysJCXNlbGVjdGVkOiBmdW5j
dGlvbihlbGVtKXsKKysJCQllbGVtLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDsKKysJCQlyZXR1
cm4gZWxlbS5zZWxlY3RlZCA9PT0gdHJ1ZTsKKysJCX0sCisrCQlwYXJlbnQ6IGZ1bmN0aW9uKGVs
ZW0peworKwkJCXJldHVybiAhIWVsZW0uZmlyc3RDaGlsZDsKKysJCX0sCisrCQllbXB0eTogZnVu
Y3Rpb24oZWxlbSl7CisrCQkJcmV0dXJuICFlbGVtLmZpcnN0Q2hpbGQ7CisrCQl9LAorKwkJaGFz
OiBmdW5jdGlvbihlbGVtLCBpLCBtYXRjaCl7CisrCQkJcmV0dXJuICEhU2l6emxlKCBtYXRjaFsz
XSwgZWxlbSApLmxlbmd0aDsKKysJCX0sCisrCQloZWFkZXI6IGZ1bmN0aW9uKGVsZW0peworKwkJ
CXJldHVybiAvaFxkL2kudGVzdCggZWxlbS5ub2RlTmFtZSApOworKwkJfSwKKysJCXRleHQ6IGZ1
bmN0aW9uKGVsZW0peworKwkJCXJldHVybiAidGV4dCIgPT09IGVsZW0udHlwZTsKKysJCX0sCisr
CQlyYWRpbzogZnVuY3Rpb24oZWxlbSl7CisrCQkJcmV0dXJuICJyYWRpbyIgPT09IGVsZW0udHlw
ZTsKKysJCX0sCisrCQljaGVja2JveDogZnVuY3Rpb24oZWxlbSl7CisrCQkJcmV0dXJuICJjaGVj
a2JveCIgPT09IGVsZW0udHlwZTsKKysJCX0sCisrCQlmaWxlOiBmdW5jdGlvbihlbGVtKXsKKysJ
CQlyZXR1cm4gImZpbGUiID09PSBlbGVtLnR5cGU7CisrCQl9LAorKwkJcGFzc3dvcmQ6IGZ1bmN0
aW9uKGVsZW0peworKwkJCXJldHVybiAicGFzc3dvcmQiID09PSBlbGVtLnR5cGU7CisrCQl9LAor
KwkJc3VibWl0OiBmdW5jdGlvbihlbGVtKXsKKysJCQlyZXR1cm4gInN1Ym1pdCIgPT09IGVsZW0u
dHlwZTsKKysJCX0sCisrCQlpbWFnZTogZnVuY3Rpb24oZWxlbSl7CisrCQkJcmV0dXJuICJpbWFn
ZSIgPT09IGVsZW0udHlwZTsKKysJCX0sCisrCQlyZXNldDogZnVuY3Rpb24oZWxlbSl7CisrCQkJ
cmV0dXJuICJyZXNldCIgPT09IGVsZW0udHlwZTsKKysJCX0sCisrCQlidXR0b246IGZ1bmN0aW9u
KGVsZW0peworKwkJCXJldHVybiAiYnV0dG9uIiA9PT0gZWxlbS50eXBlIHx8IGVsZW0ubm9kZU5h
bWUudG9VcHBlckNhc2UoKSA9PT0gIkJVVFRPTiI7CisrCQl9LAorKwkJaW5wdXQ6IGZ1bmN0aW9u
KGVsZW0peworKwkJCXJldHVybiAvaW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbi9pLnRlc3Qo
ZWxlbS5ub2RlTmFtZSk7CisrCQl9CisrCX0sCisrCXNldEZpbHRlcnM6IHsKKysJCWZpcnN0OiBm
dW5jdGlvbihlbGVtLCBpKXsKKysJCQlyZXR1cm4gaSA9PT0gMDsKKysJCX0sCisrCQlsYXN0OiBm
dW5jdGlvbihlbGVtLCBpLCBtYXRjaCwgYXJyYXkpeworKwkJCXJldHVybiBpID09PSBhcnJheS5s
ZW5ndGggLSAxOworKwkJfSwKKysJCWV2ZW46IGZ1bmN0aW9uKGVsZW0sIGkpeworKwkJCXJldHVy
biBpICUgMiA9PT0gMDsKKysJCX0sCisrCQlvZGQ6IGZ1bmN0aW9uKGVsZW0sIGkpeworKwkJCXJl
dHVybiBpICUgMiA9PT0gMTsKKysJCX0sCisrCQlsdDogZnVuY3Rpb24oZWxlbSwgaSwgbWF0Y2gp
eworKwkJCXJldHVybiBpIDwgbWF0Y2hbM10gLSAwOworKwkJfSwKKysJCWd0OiBmdW5jdGlvbihl
bGVtLCBpLCBtYXRjaCl7CisrCQkJcmV0dXJuIGkgPiBtYXRjaFszXSAtIDA7CisrCQl9LAorKwkJ
bnRoOiBmdW5jdGlvbihlbGVtLCBpLCBtYXRjaCl7CisrCQkJcmV0dXJuIG1hdGNoWzNdIC0gMCA9
PSBpOworKwkJfSwKKysJCWVxOiBmdW5jdGlvbihlbGVtLCBpLCBtYXRjaCl7CisrCQkJcmV0dXJu
IG1hdGNoWzNdIC0gMCA9PSBpOworKwkJfQorKwl9LAorKwlmaWx0ZXI6IHsKKysJCVBTRVVETzog
ZnVuY3Rpb24oZWxlbSwgbWF0Y2gsIGksIGFycmF5KXsKKysJCQl2YXIgbmFtZSA9IG1hdGNoWzFd
LCBmaWx0ZXIgPSBFeHByLmZpbHRlcnNbIG5hbWUgXTsKKysKKysJCQlpZiAoIGZpbHRlciApIHsK
KysJCQkJcmV0dXJuIGZpbHRlciggZWxlbSwgaSwgbWF0Y2gsIGFycmF5ICk7CisrCQkJfSBlbHNl
IGlmICggbmFtZSA9PT0gImNvbnRhaW5zIiApIHsKKysJCQkJcmV0dXJuIChlbGVtLnRleHRDb250
ZW50IHx8IGVsZW0uaW5uZXJUZXh0IHx8ICIiKS5pbmRleE9mKG1hdGNoWzNdKSA+PSAwOworKwkJ
CX0gZWxzZSBpZiAoIG5hbWUgPT09ICJub3QiICkgeworKwkJCQl2YXIgbm90ID0gbWF0Y2hbM107
CisrCisrCQkJCWZvciAoIHZhciBpID0gMCwgbCA9IG5vdC5sZW5ndGg7IGkgPCBsOyBpKysgKSB7
CisrCQkJCQlpZiAoIG5vdFtpXSA9PT0gZWxlbSApIHsKKysJCQkJCQlyZXR1cm4gZmFsc2U7Cisr
CQkJCQl9CisrCQkJCX0KKysKKysJCQkJcmV0dXJuIHRydWU7CisrCQkJfQorKwkJfSwKKysJCUNI
SUxEOiBmdW5jdGlvbihlbGVtLCBtYXRjaCl7CisrCQkJdmFyIHR5cGUgPSBtYXRjaFsxXSwgbm9k
ZSA9IGVsZW07CisrCQkJc3dpdGNoICh0eXBlKSB7CisrCQkJCWNhc2UgJ29ubHknOgorKwkJCQlj
YXNlICdmaXJzdCc6CisrCQkJCQl3aGlsZSAoIChub2RlID0gbm9kZS5wcmV2aW91c1NpYmxpbmcp
ICkgIHsKKysJCQkJCQlpZiAoIG5vZGUubm9kZVR5cGUgPT09IDEgKSByZXR1cm4gZmFsc2U7Cisr
CQkJCQl9CisrCQkJCQlpZiAoIHR5cGUgPT0gJ2ZpcnN0JykgcmV0dXJuIHRydWU7CisrCQkJCQlu
b2RlID0gZWxlbTsKKysJCQkJY2FzZSAnbGFzdCc6CisrCQkJCQl3aGlsZSAoIChub2RlID0gbm9k
ZS5uZXh0U2libGluZykgKSAgeworKwkJCQkJCWlmICggbm9kZS5ub2RlVHlwZSA9PT0gMSApIHJl
dHVybiBmYWxzZTsKKysJCQkJCX0KKysJCQkJCXJldHVybiB0cnVlOworKwkJCQljYXNlICdudGgn
OgorKwkJCQkJdmFyIGZpcnN0ID0gbWF0Y2hbMl0sIGxhc3QgPSBtYXRjaFszXTsKKysKKysJCQkJ
CWlmICggZmlyc3QgPT0gMSAmJiBsYXN0ID09IDAgKSB7CisrCQkJCQkJcmV0dXJuIHRydWU7Cisr
CQkJCQl9CisrCisrCQkJCQl2YXIgZG9uZU5hbWUgPSBtYXRjaFswXSwKKysJCQkJCQlwYXJlbnQg
PSBlbGVtLnBhcmVudE5vZGU7CisrCisrCQkJCQlpZiAoIHBhcmVudCAmJiAocGFyZW50LnNpemNh
Y2hlICE9PSBkb25lTmFtZSB8fCAhZWxlbS5ub2RlSW5kZXgpICkgeworKwkJCQkJCXZhciBjb3Vu
dCA9IDA7CisrCQkJCQkJZm9yICggbm9kZSA9IHBhcmVudC5maXJzdENoaWxkOyBub2RlOyBub2Rl
ID0gbm9kZS5uZXh0U2libGluZyApIHsKKysJCQkJCQkJaWYgKCBub2RlLm5vZGVUeXBlID09PSAx
ICkgeworKwkJCQkJCQkJbm9kZS5ub2RlSW5kZXggPSArK2NvdW50OworKwkJCQkJCQl9CisrCQkJ
CQkJfQorKwkJCQkJCXBhcmVudC5zaXpjYWNoZSA9IGRvbmVOYW1lOworKwkJCQkJfQorKworKwkJ
CQkJdmFyIGRpZmYgPSBlbGVtLm5vZGVJbmRleCAtIGxhc3Q7CisrCQkJCQlpZiAoIGZpcnN0ID09
IDAgKSB7CisrCQkJCQkJcmV0dXJuIGRpZmYgPT0gMDsKKysJCQkJCX0gZWxzZSB7CisrCQkJCQkJ
cmV0dXJuICggZGlmZiAlIGZpcnN0ID09IDAgJiYgZGlmZiAvIGZpcnN0ID49IDAgKTsKKysJCQkJ
CX0KKysJCQl9CisrCQl9LAorKwkJSUQ6IGZ1bmN0aW9uKGVsZW0sIG1hdGNoKXsKKysJCQlyZXR1
cm4gZWxlbS5ub2RlVHlwZSA9PT0gMSAmJiBlbGVtLmdldEF0dHJpYnV0ZSgiaWQiKSA9PT0gbWF0
Y2g7CisrCQl9LAorKwkJVEFHOiBmdW5jdGlvbihlbGVtLCBtYXRjaCl7CisrCQkJcmV0dXJuICht
YXRjaCA9PT0gIioiICYmIGVsZW0ubm9kZVR5cGUgPT09IDEpIHx8IGVsZW0ubm9kZU5hbWUgPT09
IG1hdGNoOworKwkJfSwKKysJCUNMQVNTOiBmdW5jdGlvbihlbGVtLCBtYXRjaCl7CisrCQkJcmV0
dXJuICgiICIgKyAoZWxlbS5jbGFzc05hbWUgfHwgZWxlbS5nZXRBdHRyaWJ1dGUoImNsYXNzIikp
ICsgIiAiKQorKwkJCQkuaW5kZXhPZiggbWF0Y2ggKSA+IC0xOworKwkJfSwKKysJCUFUVFI6IGZ1
bmN0aW9uKGVsZW0sIG1hdGNoKXsKKysJCQl2YXIgbmFtZSA9IG1hdGNoWzFdLAorKwkJCQlyZXN1
bHQgPSBFeHByLmF0dHJIYW5kbGVbIG5hbWUgXSA/CisrCQkJCQlFeHByLmF0dHJIYW5kbGVbIG5h
bWUgXSggZWxlbSApIDoKKysJCQkJCWVsZW1bIG5hbWUgXSAhPSBudWxsID8KKysJCQkJCQllbGVt
WyBuYW1lIF0gOgorKwkJCQkJCWVsZW0uZ2V0QXR0cmlidXRlKCBuYW1lICksCisrCQkJCXZhbHVl
ID0gcmVzdWx0ICsgIiIsCisrCQkJCXR5cGUgPSBtYXRjaFsyXSwKKysJCQkJY2hlY2sgPSBtYXRj
aFs0XTsKKysKKysJCQlyZXR1cm4gcmVzdWx0ID09IG51bGwgPworKwkJCQl0eXBlID09PSAiIT0i
IDoKKysJCQkJdHlwZSA9PT0gIj0iID8KKysJCQkJdmFsdWUgPT09IGNoZWNrIDoKKysJCQkJdHlw
ZSA9PT0gIio9IiA/CisrCQkJCXZhbHVlLmluZGV4T2YoY2hlY2spID49IDAgOgorKwkJCQl0eXBl
ID09PSAifj0iID8KKysJCQkJKCIgIiArIHZhbHVlICsgIiAiKS5pbmRleE9mKGNoZWNrKSA+PSAw
IDoKKysJCQkJIWNoZWNrID8KKysJCQkJdmFsdWUgJiYgcmVzdWx0ICE9PSBmYWxzZSA6CisrCQkJ
CXR5cGUgPT09ICIhPSIgPworKwkJCQl2YWx1ZSAhPSBjaGVjayA6CisrCQkJCXR5cGUgPT09ICJe
PSIgPworKwkJCQl2YWx1ZS5pbmRleE9mKGNoZWNrKSA9PT0gMCA6CisrCQkJCXR5cGUgPT09ICIk
PSIgPworKwkJCQl2YWx1ZS5zdWJzdHIodmFsdWUubGVuZ3RoIC0gY2hlY2subGVuZ3RoKSA9PT0g
Y2hlY2sgOgorKwkJCQl0eXBlID09PSAifD0iID8KKysJCQkJdmFsdWUgPT09IGNoZWNrIHx8IHZh
bHVlLnN1YnN0cigwLCBjaGVjay5sZW5ndGggKyAxKSA9PT0gY2hlY2sgKyAiLSIgOgorKwkJCQlm
YWxzZTsKKysJCX0sCisrCQlQT1M6IGZ1bmN0aW9uKGVsZW0sIG1hdGNoLCBpLCBhcnJheSl7Cisr
CQkJdmFyIG5hbWUgPSBtYXRjaFsyXSwgZmlsdGVyID0gRXhwci5zZXRGaWx0ZXJzWyBuYW1lIF07
CisrCisrCQkJaWYgKCBmaWx0ZXIgKSB7CisrCQkJCXJldHVybiBmaWx0ZXIoIGVsZW0sIGksIG1h
dGNoLCBhcnJheSApOworKwkJCX0KKysJCX0KKysJfQorK307CisrCisrdmFyIG9yaWdQT1MgPSBF
eHByLm1hdGNoLlBPUzsKKysKKytmb3IgKCB2YXIgdHlwZSBpbiBFeHByLm1hdGNoICkgeworKwlF
eHByLm1hdGNoWyB0eXBlIF0gPSBuZXcgUmVnRXhwKCBFeHByLm1hdGNoWyB0eXBlIF0uc291cmNl
ICsgLyg/IVteXFtdKlxdKSg/IVteXChdKlwpKS8uc291cmNlICk7CisrCUV4cHIubGVmdE1hdGNo
WyB0eXBlIF0gPSBuZXcgUmVnRXhwKCAvKF4oPzoufFxyfFxuKSo/KS8uc291cmNlICsgRXhwci5t
YXRjaFsgdHlwZSBdLnNvdXJjZSApOworK30KKysKKyt2YXIgbWFrZUFycmF5ID0gZnVuY3Rpb24o
YXJyYXksIHJlc3VsdHMpIHsKKysJYXJyYXkgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCgg
YXJyYXksIDAgKTsKKysKKysJaWYgKCByZXN1bHRzICkgeworKwkJcmVzdWx0cy5wdXNoLmFwcGx5
KCByZXN1bHRzLCBhcnJheSApOworKwkJcmV0dXJuIHJlc3VsdHM7CisrCX0KKysKKysJcmV0dXJu
IGFycmF5OworK307CisrCisrdHJ5IHsKKysJQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoIGRv
Y3VtZW50LmRvY3VtZW50RWxlbWVudC5jaGlsZE5vZGVzLCAwICk7CisrCisrfSBjYXRjaChlKXsK
KysJbWFrZUFycmF5ID0gZnVuY3Rpb24oYXJyYXksIHJlc3VsdHMpIHsKKysJCXZhciByZXQgPSBy
ZXN1bHRzIHx8IFtdOworKworKwkJaWYgKCB0b1N0cmluZy5jYWxsKGFycmF5KSA9PT0gIltvYmpl
Y3QgQXJyYXldIiApIHsKKysJCQlBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseSggcmV0LCBhcnJh
eSApOworKwkJfSBlbHNlIHsKKysJCQlpZiAoIHR5cGVvZiBhcnJheS5sZW5ndGggPT09ICJudW1i
ZXIiICkgeworKwkJCQlmb3IgKCB2YXIgaSA9IDAsIGwgPSBhcnJheS5sZW5ndGg7IGkgPCBsOyBp
KysgKSB7CisrCQkJCQlyZXQucHVzaCggYXJyYXlbaV0gKTsKKysJCQkJfQorKwkJCX0gZWxzZSB7
CisrCQkJCWZvciAoIHZhciBpID0gMDsgYXJyYXlbaV07IGkrKyApIHsKKysJCQkJCXJldC5wdXNo
KCBhcnJheVtpXSApOworKwkJCQl9CisrCQkJfQorKwkJfQorKworKwkJcmV0dXJuIHJldDsKKysJ
fTsKKyt9CisrCisrdmFyIHNvcnRPcmRlcjsKKysKKytpZiAoIGRvY3VtZW50LmRvY3VtZW50RWxl
bWVudC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiApIHsKKysJc29ydE9yZGVyID0gZnVuY3Rpb24o
IGEsIGIgKSB7CisrCQlpZiAoICFhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uIHx8ICFiLmNvbXBh
cmVEb2N1bWVudFBvc2l0aW9uICkgeworKwkJCWlmICggYSA9PSBiICkgeworKwkJCQloYXNEdXBs
aWNhdGUgPSB0cnVlOworKwkJCX0KKysJCQlyZXR1cm4gMDsKKysJCX0KKysKKysJCXZhciByZXQg
PSBhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGIpICYgNCA/IC0xIDogYSA9PT0gYiA/IDAgOiAx
OworKwkJaWYgKCByZXQgPT09IDAgKSB7CisrCQkJaGFzRHVwbGljYXRlID0gdHJ1ZTsKKysJCX0K
KysJCXJldHVybiByZXQ7CisrCX07CisrfSBlbHNlIGlmICggInNvdXJjZUluZGV4IiBpbiBkb2N1
bWVudC5kb2N1bWVudEVsZW1lbnQgKSB7CisrCXNvcnRPcmRlciA9IGZ1bmN0aW9uKCBhLCBiICkg
eworKwkJaWYgKCAhYS5zb3VyY2VJbmRleCB8fCAhYi5zb3VyY2VJbmRleCApIHsKKysJCQlpZiAo
IGEgPT0gYiApIHsKKysJCQkJaGFzRHVwbGljYXRlID0gdHJ1ZTsKKysJCQl9CisrCQkJcmV0dXJu
IDA7CisrCQl9CisrCisrCQl2YXIgcmV0ID0gYS5zb3VyY2VJbmRleCAtIGIuc291cmNlSW5kZXg7
CisrCQlpZiAoIHJldCA9PT0gMCApIHsKKysJCQloYXNEdXBsaWNhdGUgPSB0cnVlOworKwkJfQor
KwkJcmV0dXJuIHJldDsKKysJfTsKKyt9IGVsc2UgaWYgKCBkb2N1bWVudC5jcmVhdGVSYW5nZSAp
IHsKKysJc29ydE9yZGVyID0gZnVuY3Rpb24oIGEsIGIgKSB7CisrCQlpZiAoICFhLm93bmVyRG9j
dW1lbnQgfHwgIWIub3duZXJEb2N1bWVudCApIHsKKysJCQlpZiAoIGEgPT0gYiApIHsKKysJCQkJ
aGFzRHVwbGljYXRlID0gdHJ1ZTsKKysJCQl9CisrCQkJcmV0dXJuIDA7CisrCQl9CisrCisrCQl2
YXIgYVJhbmdlID0gYS5vd25lckRvY3VtZW50LmNyZWF0ZVJhbmdlKCksIGJSYW5nZSA9IGIub3du
ZXJEb2N1bWVudC5jcmVhdGVSYW5nZSgpOworKwkJYVJhbmdlLnNldFN0YXJ0KGEsIDApOworKwkJ
YVJhbmdlLnNldEVuZChhLCAwKTsKKysJCWJSYW5nZS5zZXRTdGFydChiLCAwKTsKKysJCWJSYW5n
ZS5zZXRFbmQoYiwgMCk7CisrCQl2YXIgcmV0ID0gYVJhbmdlLmNvbXBhcmVCb3VuZGFyeVBvaW50
cyhSYW5nZS5TVEFSVF9UT19FTkQsIGJSYW5nZSk7CisrCQlpZiAoIHJldCA9PT0gMCApIHsKKysJ
CQloYXNEdXBsaWNhdGUgPSB0cnVlOworKwkJfQorKwkJcmV0dXJuIHJldDsKKysJfTsKKyt9Cisr
CisrKGZ1bmN0aW9uKCl7CisrCXZhciBmb3JtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2
IiksCisrCQlpZCA9ICJzY3JpcHQiICsgKG5ldyBEYXRlKS5nZXRUaW1lKCk7CisrCWZvcm0uaW5u
ZXJIVE1MID0gIjxhIG5hbWU9JyIgKyBpZCArICInLz4iOworKworKwl2YXIgcm9vdCA9IGRvY3Vt
ZW50LmRvY3VtZW50RWxlbWVudDsKKysJcm9vdC5pbnNlcnRCZWZvcmUoIGZvcm0sIHJvb3QuZmly
c3RDaGlsZCApOworKworKwlpZiAoICEhZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIGlkICkgKSB7
CisrCQlFeHByLmZpbmQuSUQgPSBmdW5jdGlvbihtYXRjaCwgY29udGV4dCwgaXNYTUwpeworKwkJ
CWlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQgIT09ICJ1bmRlZmluZWQiICYmICFp
c1hNTCApIHsKKysJCQkJdmFyIG0gPSBjb250ZXh0LmdldEVsZW1lbnRCeUlkKG1hdGNoWzFdKTsK
KysJCQkJcmV0dXJuIG0gPyBtLmlkID09PSBtYXRjaFsxXSB8fCB0eXBlb2YgbS5nZXRBdHRyaWJ1
dGVOb2RlICE9PSAidW5kZWZpbmVkIiAmJiBtLmdldEF0dHJpYnV0ZU5vZGUoImlkIikubm9kZVZh
bHVlID09PSBtYXRjaFsxXSA/IFttXSA6IHVuZGVmaW5lZCA6IFtdOworKwkJCX0KKysJCX07Cisr
CisrCQlFeHByLmZpbHRlci5JRCA9IGZ1bmN0aW9uKGVsZW0sIG1hdGNoKXsKKysJCQl2YXIgbm9k
ZSA9IHR5cGVvZiBlbGVtLmdldEF0dHJpYnV0ZU5vZGUgIT09ICJ1bmRlZmluZWQiICYmIGVsZW0u
Z2V0QXR0cmlidXRlTm9kZSgiaWQiKTsKKysJCQlyZXR1cm4gZWxlbS5ub2RlVHlwZSA9PT0gMSAm
JiBub2RlICYmIG5vZGUubm9kZVZhbHVlID09PSBtYXRjaDsKKysJCX07CisrCX0KKysKKysJcm9v
dC5yZW1vdmVDaGlsZCggZm9ybSApOworKwlyb290ID0gZm9ybSA9IG51bGw7IC8vIHJlbGVhc2Ug
bWVtb3J5IGluIElFCisrfSkoKTsKKysKKysoZnVuY3Rpb24oKXsKKysKKysJdmFyIGRpdiA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworKwlkaXYuYXBwZW5kQ2hpbGQoIGRvY3VtZW50
LmNyZWF0ZUNvbW1lbnQoIiIpICk7CisrCisrCWlmICggZGl2LmdldEVsZW1lbnRzQnlUYWdOYW1l
KCIqIikubGVuZ3RoID4gMCApIHsKKysJCUV4cHIuZmluZC5UQUcgPSBmdW5jdGlvbihtYXRjaCwg
Y29udGV4dCl7CisrCQkJdmFyIHJlc3VsdHMgPSBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1l
KG1hdGNoWzFdKTsKKysKKysJCQlpZiAoIG1hdGNoWzFdID09PSAiKiIgKSB7CisrCQkJCXZhciB0
bXAgPSBbXTsKKysKKysJCQkJZm9yICggdmFyIGkgPSAwOyByZXN1bHRzW2ldOyBpKysgKSB7Cisr
CQkJCQlpZiAoIHJlc3VsdHNbaV0ubm9kZVR5cGUgPT09IDEgKSB7CisrCQkJCQkJdG1wLnB1c2go
IHJlc3VsdHNbaV0gKTsKKysJCQkJCX0KKysJCQkJfQorKworKwkJCQlyZXN1bHRzID0gdG1wOwor
KwkJCX0KKysKKysJCQlyZXR1cm4gcmVzdWx0czsKKysJCX07CisrCX0KKysKKysJZGl2LmlubmVy
SFRNTCA9ICI8YSBocmVmPScjJz48L2E+IjsKKysJaWYgKCBkaXYuZmlyc3RDaGlsZCAmJiB0eXBl
b2YgZGl2LmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlICE9PSAidW5kZWZpbmVkIiAmJgorKwkJCWRp
di5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSgiaHJlZiIpICE9PSAiIyIgKSB7CisrCQlFeHByLmF0
dHJIYW5kbGUuaHJlZiA9IGZ1bmN0aW9uKGVsZW0peworKwkJCXJldHVybiBlbGVtLmdldEF0dHJp
YnV0ZSgiaHJlZiIsIDIpOworKwkJfTsKKysJfQorKworKwlkaXYgPSBudWxsOyAvLyByZWxlYXNl
IG1lbW9yeSBpbiBJRQorK30pKCk7CisrCisraWYgKCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxs
ICkgKGZ1bmN0aW9uKCl7CisrCXZhciBvbGRTaXp6bGUgPSBTaXp6bGUsIGRpdiA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworKwlkaXYuaW5uZXJIVE1MID0gIjxwIGNsYXNzPSdURVNU
Jz48L3A+IjsKKysKKysJaWYgKCBkaXYucXVlcnlTZWxlY3RvckFsbCAmJiBkaXYucXVlcnlTZWxl
Y3RvckFsbCgiLlRFU1QiKS5sZW5ndGggPT09IDAgKSB7CisrCQlyZXR1cm47CisrCX0KKysKKysJ
U2l6emxlID0gZnVuY3Rpb24ocXVlcnksIGNvbnRleHQsIGV4dHJhLCBzZWVkKXsKKysJCWNvbnRl
eHQgPSBjb250ZXh0IHx8IGRvY3VtZW50OworKworKwkJaWYgKCAhc2VlZCAmJiBjb250ZXh0Lm5v
ZGVUeXBlID09PSA5ICYmICFpc1hNTChjb250ZXh0KSApIHsKKysJCQl0cnkgeworKwkJCQlyZXR1
cm4gbWFrZUFycmF5KCBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwocXVlcnkpLCBleHRyYSApOwor
KwkJCX0gY2F0Y2goZSl7fQorKwkJfQorKworKwkJcmV0dXJuIG9sZFNpenpsZShxdWVyeSwgY29u
dGV4dCwgZXh0cmEsIHNlZWQpOworKwl9OworKworKwlmb3IgKCB2YXIgcHJvcCBpbiBvbGRTaXp6
bGUgKSB7CisrCQlTaXp6bGVbIHByb3AgXSA9IG9sZFNpenpsZVsgcHJvcCBdOworKwl9CisrCisr
CWRpdiA9IG51bGw7IC8vIHJlbGVhc2UgbWVtb3J5IGluIElFCisrfSkoKTsKKysKKytpZiAoIGRv
Y3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50
LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgKSAoZnVuY3Rpb24oKXsKKysJdmFyIGRpdiA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworKwlkaXYuaW5uZXJIVE1MID0gIjxkaXYgY2xhc3M9
J3Rlc3QgZSc+PC9kaXY+PGRpdiBjbGFzcz0ndGVzdCc+PC9kaXY+IjsKKysKKysJaWYgKCBkaXYu
Z2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiZSIpLmxlbmd0aCA9PT0gMCApCisrCQlyZXR1cm47Cisr
CisrCWRpdi5sYXN0Q2hpbGQuY2xhc3NOYW1lID0gImUiOworKworKwlpZiAoIGRpdi5nZXRFbGVt
ZW50c0J5Q2xhc3NOYW1lKCJlIikubGVuZ3RoID09PSAxICkKKysJCXJldHVybjsKKysKKysJRXhw
ci5vcmRlci5zcGxpY2UoMSwgMCwgIkNMQVNTIik7CisrCUV4cHIuZmluZC5DTEFTUyA9IGZ1bmN0
aW9uKG1hdGNoLCBjb250ZXh0LCBpc1hNTCkgeworKwkJaWYgKCB0eXBlb2YgY29udGV4dC5nZXRF
bGVtZW50c0J5Q2xhc3NOYW1lICE9PSAidW5kZWZpbmVkIiAmJiAhaXNYTUwgKSB7CisrCQkJcmV0
dXJuIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShtYXRjaFsxXSk7CisrCQl9CisrCX07
CisrCisrCWRpdiA9IG51bGw7IC8vIHJlbGVhc2UgbWVtb3J5IGluIElFCisrfSkoKTsKKysKKytm
dW5jdGlvbiBkaXJOb2RlQ2hlY2soIGRpciwgY3VyLCBkb25lTmFtZSwgY2hlY2tTZXQsIG5vZGVD
aGVjaywgaXNYTUwgKSB7CisrCXZhciBzaWJEaXIgPSBkaXIgPT0gInByZXZpb3VzU2libGluZyIg
JiYgIWlzWE1MOworKwlmb3IgKCB2YXIgaSA9IDAsIGwgPSBjaGVja1NldC5sZW5ndGg7IGkgPCBs
OyBpKysgKSB7CisrCQl2YXIgZWxlbSA9IGNoZWNrU2V0W2ldOworKwkJaWYgKCBlbGVtICkgewor
KwkJCWlmICggc2liRGlyICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKXsKKysJCQkJZWxlbS5zaXpj
YWNoZSA9IGRvbmVOYW1lOworKwkJCQllbGVtLnNpenNldCA9IGk7CisrCQkJfQorKwkJCWVsZW0g
PSBlbGVtW2Rpcl07CisrCQkJdmFyIG1hdGNoID0gZmFsc2U7CisrCisrCQkJd2hpbGUgKCBlbGVt
ICkgeworKwkJCQlpZiAoIGVsZW0uc2l6Y2FjaGUgPT09IGRvbmVOYW1lICkgeworKwkJCQkJbWF0
Y2ggPSBjaGVja1NldFtlbGVtLnNpenNldF07CisrCQkJCQlicmVhazsKKysJCQkJfQorKworKwkJ
CQlpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgJiYgIWlzWE1MICl7CisrCQkJCQllbGVtLnNpemNh
Y2hlID0gZG9uZU5hbWU7CisrCQkJCQllbGVtLnNpenNldCA9IGk7CisrCQkJCX0KKysKKysJCQkJ
aWYgKCBlbGVtLm5vZGVOYW1lID09PSBjdXIgKSB7CisrCQkJCQltYXRjaCA9IGVsZW07CisrCQkJ
CQlicmVhazsKKysJCQkJfQorKworKwkJCQllbGVtID0gZWxlbVtkaXJdOworKwkJCX0KKysKKysJ
CQljaGVja1NldFtpXSA9IG1hdGNoOworKwkJfQorKwl9CisrfQorKworK2Z1bmN0aW9uIGRpckNo
ZWNrKCBkaXIsIGN1ciwgZG9uZU5hbWUsIGNoZWNrU2V0LCBub2RlQ2hlY2ssIGlzWE1MICkgewor
Kwl2YXIgc2liRGlyID0gZGlyID09ICJwcmV2aW91c1NpYmxpbmciICYmICFpc1hNTDsKKysJZm9y
ICggdmFyIGkgPSAwLCBsID0gY2hlY2tTZXQubGVuZ3RoOyBpIDwgbDsgaSsrICkgeworKwkJdmFy
IGVsZW0gPSBjaGVja1NldFtpXTsKKysJCWlmICggZWxlbSApIHsKKysJCQlpZiAoIHNpYkRpciAm
JiBlbGVtLm5vZGVUeXBlID09PSAxICkgeworKwkJCQllbGVtLnNpemNhY2hlID0gZG9uZU5hbWU7
CisrCQkJCWVsZW0uc2l6c2V0ID0gaTsKKysJCQl9CisrCQkJZWxlbSA9IGVsZW1bZGlyXTsKKysJ
CQl2YXIgbWF0Y2ggPSBmYWxzZTsKKysKKysJCQl3aGlsZSAoIGVsZW0gKSB7CisrCQkJCWlmICgg
ZWxlbS5zaXpjYWNoZSA9PT0gZG9uZU5hbWUgKSB7CisrCQkJCQltYXRjaCA9IGNoZWNrU2V0W2Vs
ZW0uc2l6c2V0XTsKKysJCQkJCWJyZWFrOworKwkJCQl9CisrCisrCQkJCWlmICggZWxlbS5ub2Rl
VHlwZSA9PT0gMSApIHsKKysJCQkJCWlmICggIWlzWE1MICkgeworKwkJCQkJCWVsZW0uc2l6Y2Fj
aGUgPSBkb25lTmFtZTsKKysJCQkJCQllbGVtLnNpenNldCA9IGk7CisrCQkJCQl9CisrCQkJCQlp
ZiAoIHR5cGVvZiBjdXIgIT09ICJzdHJpbmciICkgeworKwkJCQkJCWlmICggZWxlbSA9PT0gY3Vy
ICkgeworKwkJCQkJCQltYXRjaCA9IHRydWU7CisrCQkJCQkJCWJyZWFrOworKwkJCQkJCX0KKysK
KysJCQkJCX0gZWxzZSBpZiAoIFNpenpsZS5maWx0ZXIoIGN1ciwgW2VsZW1dICkubGVuZ3RoID4g
MCApIHsKKysJCQkJCQltYXRjaCA9IGVsZW07CisrCQkJCQkJYnJlYWs7CisrCQkJCQl9CisrCQkJ
CX0KKysKKysJCQkJZWxlbSA9IGVsZW1bZGlyXTsKKysJCQl9CisrCisrCQkJY2hlY2tTZXRbaV0g
PSBtYXRjaDsKKysJCX0KKysJfQorK30KKysKKyt2YXIgY29udGFpbnMgPSBkb2N1bWVudC5jb21w
YXJlRG9jdW1lbnRQb3NpdGlvbiA/ICBmdW5jdGlvbihhLCBiKXsKKysJcmV0dXJuIGEuY29tcGFy
ZURvY3VtZW50UG9zaXRpb24oYikgJiAxNjsKKyt9IDogZnVuY3Rpb24oYSwgYil7CisrCXJldHVy
biBhICE9PSBiICYmIChhLmNvbnRhaW5zID8gYS5jb250YWlucyhiKSA6IHRydWUpOworK307Cisr
CisrdmFyIGlzWE1MID0gZnVuY3Rpb24oZWxlbSl7CisrCXJldHVybiBlbGVtLm5vZGVUeXBlID09
PSA5ICYmIGVsZW0uZG9jdW1lbnRFbGVtZW50Lm5vZGVOYW1lICE9PSAiSFRNTCIgfHwKKysJCSEh
ZWxlbS5vd25lckRvY3VtZW50ICYmIGVsZW0ub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQu
bm9kZU5hbWUgIT09ICJIVE1MIjsKKyt9OworKworK3ZhciBwb3NQcm9jZXNzID0gZnVuY3Rpb24o
c2VsZWN0b3IsIGNvbnRleHQpeworKwl2YXIgdG1wU2V0ID0gW10sIGxhdGVyID0gIiIsIG1hdGNo
LAorKwkJcm9vdCA9IGNvbnRleHQubm9kZVR5cGUgPyBbY29udGV4dF0gOiBjb250ZXh0OworKwor
Kwl3aGlsZSAoIChtYXRjaCA9IEV4cHIubWF0Y2guUFNFVURPLmV4ZWMoIHNlbGVjdG9yICkpICkg
eworKwkJbGF0ZXIgKz0gbWF0Y2hbMF07CisrCQlzZWxlY3RvciA9IHNlbGVjdG9yLnJlcGxhY2Uo
IEV4cHIubWF0Y2guUFNFVURPLCAiIiApOworKwl9CisrCisrCXNlbGVjdG9yID0gRXhwci5yZWxh
dGl2ZVtzZWxlY3Rvcl0gPyBzZWxlY3RvciArICIqIiA6IHNlbGVjdG9yOworKworKwlmb3IgKCB2
YXIgaSA9IDAsIGwgPSByb290Lmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKKysJCVNpenpsZSggc2Vs
ZWN0b3IsIHJvb3RbaV0sIHRtcFNldCApOworKwl9CisrCisrCXJldHVybiBTaXp6bGUuZmlsdGVy
KCBsYXRlciwgdG1wU2V0ICk7CisrfTsKKysKKysKKyt3aW5kb3cuU2l6emxlID0gU2l6emxlOwor
KworK30pKCk7CisrCisrOyhmdW5jdGlvbihlbmdpbmUpIHsKKysgIHZhciBleHRlbmRFbGVtZW50
cyA9IFByb3RvdHlwZS5TZWxlY3Rvci5leHRlbmRFbGVtZW50czsKKysKKysgIGZ1bmN0aW9uIHNl
bGVjdChzZWxlY3Rvciwgc2NvcGUpIHsKKysgICAgcmV0dXJuIGV4dGVuZEVsZW1lbnRzKGVuZ2lu
ZShzZWxlY3Rvciwgc2NvcGUgfHwgZG9jdW1lbnQpKTsKKysgIH0KKysKKysgIGZ1bmN0aW9uIG1h
dGNoKGVsZW1lbnQsIHNlbGVjdG9yKSB7CisrICAgIHJldHVybiBlbmdpbmUubWF0Y2hlcyhzZWxl
Y3RvciwgW2VsZW1lbnRdKS5sZW5ndGggPT0gMTsKKysgIH0KKysKKysgIFByb3RvdHlwZS5TZWxl
Y3Rvci5lbmdpbmUgPSBlbmdpbmU7CisrICBQcm90b3R5cGUuU2VsZWN0b3Iuc2VsZWN0ID0gc2Vs
ZWN0OworKyAgUHJvdG90eXBlLlNlbGVjdG9yLm1hdGNoID0gbWF0Y2g7CisrfSkoU2l6emxlKTsK
KysKKyt3aW5kb3cuU2l6emxlID0gUHJvdG90eXBlLl9vcmlnaW5hbF9wcm9wZXJ0eTsKKytkZWxl
dGUgUHJvdG90eXBlLl9vcmlnaW5hbF9wcm9wZXJ0eTsKKysKKyt2YXIgRm9ybSA9IHsKKysgIHJl
c2V0OiBmdW5jdGlvbihmb3JtKSB7CisrICAgIGZvcm0gPSAkKGZvcm0pOworKyAgICBmb3JtLnJl
c2V0KCk7CisrICAgIHJldHVybiBmb3JtOworKyAgfSwKKysKKysgIHNlcmlhbGl6ZUVsZW1lbnRz
OiBmdW5jdGlvbihlbGVtZW50cywgb3B0aW9ucykgeworKyAgICBpZiAodHlwZW9mIG9wdGlvbnMg
IT0gJ29iamVjdCcpIG9wdGlvbnMgPSB7IGhhc2g6ICEhb3B0aW9ucyB9OworKyAgICBlbHNlIGlm
IChPYmplY3QuaXNVbmRlZmluZWQob3B0aW9ucy5oYXNoKSkgb3B0aW9ucy5oYXNoID0gdHJ1ZTsK
KysgICAgdmFyIGtleSwgdmFsdWUsIHN1Ym1pdHRlZCA9IGZhbHNlLCBzdWJtaXQgPSBvcHRpb25z
LnN1Ym1pdCwgYWNjdW11bGF0b3IsIGluaXRpYWw7CisrCisrICAgIGlmIChvcHRpb25zLmhhc2gp
IHsKKysgICAgICBpbml0aWFsID0ge307CisrICAgICAgYWNjdW11bGF0b3IgPSBmdW5jdGlvbihy
ZXN1bHQsIGtleSwgdmFsdWUpIHsKKysgICAgICAgIGlmIChrZXkgaW4gcmVzdWx0KSB7CisrICAg
ICAgICAgIGlmICghT2JqZWN0LmlzQXJyYXkocmVzdWx0W2tleV0pKSByZXN1bHRba2V5XSA9IFty
ZXN1bHRba2V5XV07CisrICAgICAgICAgIHJlc3VsdFtrZXldLnB1c2godmFsdWUpOworKyAgICAg
ICAgfSBlbHNlIHJlc3VsdFtrZXldID0gdmFsdWU7CisrICAgICAgICByZXR1cm4gcmVzdWx0Owor
KyAgICAgIH07CisrICAgIH0gZWxzZSB7CisrICAgICAgaW5pdGlhbCA9ICcnOworKyAgICAgIGFj
Y3VtdWxhdG9yID0gZnVuY3Rpb24ocmVzdWx0LCBrZXksIHZhbHVlKSB7CisrICAgICAgICByZXR1
cm4gcmVzdWx0ICsgKHJlc3VsdCA/ICcmJyA6ICcnKSArIGVuY29kZVVSSUNvbXBvbmVudChrZXkp
ICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKTsKKysgICAgICB9CisrICAgIH0KKysK
KysgICAgcmV0dXJuIGVsZW1lbnRzLmluamVjdChpbml0aWFsLCBmdW5jdGlvbihyZXN1bHQsIGVs
ZW1lbnQpIHsKKysgICAgICBpZiAoIWVsZW1lbnQuZGlzYWJsZWQgJiYgZWxlbWVudC5uYW1lKSB7
CisrICAgICAgICBrZXkgPSBlbGVtZW50Lm5hbWU7IHZhbHVlID0gJChlbGVtZW50KS5nZXRWYWx1
ZSgpOworKyAgICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgZWxlbWVudC50eXBlICE9ICdmaWxl
JyAmJiAoZWxlbWVudC50eXBlICE9ICdzdWJtaXQnIHx8ICghc3VibWl0dGVkICYmCisrICAgICAg
ICAgICAgc3VibWl0ICE9PSBmYWxzZSAmJiAoIXN1Ym1pdCB8fCBrZXkgPT0gc3VibWl0KSAmJiAo
c3VibWl0dGVkID0gdHJ1ZSkpKSkgeworKyAgICAgICAgICByZXN1bHQgPSBhY2N1bXVsYXRvcihy
ZXN1bHQsIGtleSwgdmFsdWUpOworKyAgICAgICAgfQorKyAgICAgIH0KKysgICAgICByZXR1cm4g
cmVzdWx0OworKyAgICB9KTsKKysgIH0KKyt9OworKworK0Zvcm0uTWV0aG9kcyA9IHsKKysgIHNl
cmlhbGl6ZTogZnVuY3Rpb24oZm9ybSwgb3B0aW9ucykgeworKyAgICByZXR1cm4gRm9ybS5zZXJp
YWxpemVFbGVtZW50cyhGb3JtLmdldEVsZW1lbnRzKGZvcm0pLCBvcHRpb25zKTsKKysgIH0sCisr
CisrICBnZXRFbGVtZW50czogZnVuY3Rpb24oZm9ybSkgeworKyAgICB2YXIgZWxlbWVudHMgPSAk
KGZvcm0pLmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJyksCisrICAgICAgICBlbGVtZW50LAorKyAg
ICAgICAgYXJyID0gWyBdLAorKyAgICAgICAgc2VyaWFsaXplcnMgPSBGb3JtLkVsZW1lbnQuU2Vy
aWFsaXplcnM7CisrICAgIGZvciAodmFyIGkgPSAwOyBlbGVtZW50ID0gZWxlbWVudHNbaV07IGkr
KykgeworKyAgICAgIGFyci5wdXNoKGVsZW1lbnQpOworKyAgICB9CisrICAgIHJldHVybiBhcnIu
aW5qZWN0KFtdLCBmdW5jdGlvbihlbGVtZW50cywgY2hpbGQpIHsKKysgICAgICBpZiAoc2VyaWFs
aXplcnNbY2hpbGQudGFnTmFtZS50b0xvd2VyQ2FzZSgpXSkKKysgICAgICAgIGVsZW1lbnRzLnB1
c2goRWxlbWVudC5leHRlbmQoY2hpbGQpKTsKKysgICAgICByZXR1cm4gZWxlbWVudHM7CisrICAg
IH0pCisrICB9LAorKworKyAgZ2V0SW5wdXRzOiBmdW5jdGlvbihmb3JtLCB0eXBlTmFtZSwgbmFt
ZSkgeworKyAgICBmb3JtID0gJChmb3JtKTsKKysgICAgdmFyIGlucHV0cyA9IGZvcm0uZ2V0RWxl
bWVudHNCeVRhZ05hbWUoJ2lucHV0Jyk7CisrCisrICAgIGlmICghdHlwZU5hbWUgJiYgIW5hbWUp
IHJldHVybiAkQShpbnB1dHMpLm1hcChFbGVtZW50LmV4dGVuZCk7CisrCisrICAgIGZvciAodmFy
IGkgPSAwLCBtYXRjaGluZ0lucHV0cyA9IFtdLCBsZW5ndGggPSBpbnB1dHMubGVuZ3RoOyBpIDwg
bGVuZ3RoOyBpKyspIHsKKysgICAgICB2YXIgaW5wdXQgPSBpbnB1dHNbaV07CisrICAgICAgaWYg
KCh0eXBlTmFtZSAmJiBpbnB1dC50eXBlICE9IHR5cGVOYW1lKSB8fCAobmFtZSAmJiBpbnB1dC5u
YW1lICE9IG5hbWUpKQorKyAgICAgICAgY29udGludWU7CisrICAgICAgbWF0Y2hpbmdJbnB1dHMu
cHVzaChFbGVtZW50LmV4dGVuZChpbnB1dCkpOworKyAgICB9CisrCisrICAgIHJldHVybiBtYXRj
aGluZ0lucHV0czsKKysgIH0sCisrCisrICBkaXNhYmxlOiBmdW5jdGlvbihmb3JtKSB7CisrICAg
IGZvcm0gPSAkKGZvcm0pOworKyAgICBGb3JtLmdldEVsZW1lbnRzKGZvcm0pLmludm9rZSgnZGlz
YWJsZScpOworKyAgICByZXR1cm4gZm9ybTsKKysgIH0sCisrCisrICBlbmFibGU6IGZ1bmN0aW9u
KGZvcm0pIHsKKysgICAgZm9ybSA9ICQoZm9ybSk7CisrICAgIEZvcm0uZ2V0RWxlbWVudHMoZm9y
bSkuaW52b2tlKCdlbmFibGUnKTsKKysgICAgcmV0dXJuIGZvcm07CisrICB9LAorKworKyAgZmlu
ZEZpcnN0RWxlbWVudDogZnVuY3Rpb24oZm9ybSkgeworKyAgICB2YXIgZWxlbWVudHMgPSAkKGZv
cm0pLmdldEVsZW1lbnRzKCkuZmluZEFsbChmdW5jdGlvbihlbGVtZW50KSB7CisrICAgICAgcmV0
dXJuICdoaWRkZW4nICE9IGVsZW1lbnQudHlwZSAmJiAhZWxlbWVudC5kaXNhYmxlZDsKKysgICAg
fSk7CisrICAgIHZhciBmaXJzdEJ5SW5kZXggPSBlbGVtZW50cy5maW5kQWxsKGZ1bmN0aW9uKGVs
ZW1lbnQpIHsKKysgICAgICByZXR1cm4gZWxlbWVudC5oYXNBdHRyaWJ1dGUoJ3RhYkluZGV4Jykg
JiYgZWxlbWVudC50YWJJbmRleCA+PSAwOworKyAgICB9KS5zb3J0QnkoZnVuY3Rpb24oZWxlbWVu
dCkgeyByZXR1cm4gZWxlbWVudC50YWJJbmRleCB9KS5maXJzdCgpOworKworKyAgICByZXR1cm4g
Zmlyc3RCeUluZGV4ID8gZmlyc3RCeUluZGV4IDogZWxlbWVudHMuZmluZChmdW5jdGlvbihlbGVt
ZW50KSB7CisrICAgICAgcmV0dXJuIC9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhKSQvaS50ZXN0
KGVsZW1lbnQudGFnTmFtZSk7CisrICAgIH0pOworKyAgfSwKKysKKysgIGZvY3VzRmlyc3RFbGVt
ZW50OiBmdW5jdGlvbihmb3JtKSB7CisrICAgIGZvcm0gPSAkKGZvcm0pOworKyAgICB2YXIgZWxl
bWVudCA9IGZvcm0uZmluZEZpcnN0RWxlbWVudCgpOworKyAgICBpZiAoZWxlbWVudCkgZWxlbWVu
dC5hY3RpdmF0ZSgpOworKyAgICByZXR1cm4gZm9ybTsKKysgIH0sCisrCisrICByZXF1ZXN0OiBm
dW5jdGlvbihmb3JtLCBvcHRpb25zKSB7CisrICAgIGZvcm0gPSAkKGZvcm0pLCBvcHRpb25zID0g
T2JqZWN0LmNsb25lKG9wdGlvbnMgfHwgeyB9KTsKKysKKysgICAgdmFyIHBhcmFtcyA9IG9wdGlv
bnMucGFyYW1ldGVycywgYWN0aW9uID0gZm9ybS5yZWFkQXR0cmlidXRlKCdhY3Rpb24nKSB8fCAn
JzsKKysgICAgaWYgKGFjdGlvbi5ibGFuaygpKSBhY3Rpb24gPSB3aW5kb3cubG9jYXRpb24uaHJl
ZjsKKysgICAgb3B0aW9ucy5wYXJhbWV0ZXJzID0gZm9ybS5zZXJpYWxpemUodHJ1ZSk7CisrCisr
ICAgIGlmIChwYXJhbXMpIHsKKysgICAgICBpZiAoT2JqZWN0LmlzU3RyaW5nKHBhcmFtcykpIHBh
cmFtcyA9IHBhcmFtcy50b1F1ZXJ5UGFyYW1zKCk7CisrICAgICAgT2JqZWN0LmV4dGVuZChvcHRp
b25zLnBhcmFtZXRlcnMsIHBhcmFtcyk7CisrICAgIH0KKysKKysgICAgaWYgKGZvcm0uaGFzQXR0
cmlidXRlKCdtZXRob2QnKSAmJiAhb3B0aW9ucy5tZXRob2QpCisrICAgICAgb3B0aW9ucy5tZXRo
b2QgPSBmb3JtLm1ldGhvZDsKKysKKysgICAgcmV0dXJuIG5ldyBBamF4LlJlcXVlc3QoYWN0aW9u
LCBvcHRpb25zKTsKKysgIH0KKyt9OworKworKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworKworKwor
K0Zvcm0uRWxlbWVudCA9IHsKKysgIGZvY3VzOiBmdW5jdGlvbihlbGVtZW50KSB7CisrICAgICQo
ZWxlbWVudCkuZm9jdXMoKTsKKysgICAgcmV0dXJuIGVsZW1lbnQ7CisrICB9LAorKworKyAgc2Vs
ZWN0OiBmdW5jdGlvbihlbGVtZW50KSB7CisrICAgICQoZWxlbWVudCkuc2VsZWN0KCk7CisrICAg
IHJldHVybiBlbGVtZW50OworKyAgfQorK307CisrCisrRm9ybS5FbGVtZW50Lk1ldGhvZHMgPSB7
CisrCisrICBzZXJpYWxpemU6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKysgICAgZWxlbWVudCA9ICQo
ZWxlbWVudCk7CisrICAgIGlmICghZWxlbWVudC5kaXNhYmxlZCAmJiBlbGVtZW50Lm5hbWUpIHsK
KysgICAgICB2YXIgdmFsdWUgPSBlbGVtZW50LmdldFZhbHVlKCk7CisrICAgICAgaWYgKHZhbHVl
ICE9IHVuZGVmaW5lZCkgeworKyAgICAgICAgdmFyIHBhaXIgPSB7IH07CisrICAgICAgICBwYWly
W2VsZW1lbnQubmFtZV0gPSB2YWx1ZTsKKysgICAgICAgIHJldHVybiBPYmplY3QudG9RdWVyeVN0
cmluZyhwYWlyKTsKKysgICAgICB9CisrICAgIH0KKysgICAgcmV0dXJuICcnOworKyAgfSwKKysK
KysgIGdldFZhbHVlOiBmdW5jdGlvbihlbGVtZW50KSB7CisrICAgIGVsZW1lbnQgPSAkKGVsZW1l
bnQpOworKyAgICB2YXIgbWV0aG9kID0gZWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCk7Cisr
ICAgIHJldHVybiBGb3JtLkVsZW1lbnQuU2VyaWFsaXplcnNbbWV0aG9kXShlbGVtZW50KTsKKysg
IH0sCisrCisrICBzZXRWYWx1ZTogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWUpIHsKKysgICAgZWxl
bWVudCA9ICQoZWxlbWVudCk7CisrICAgIHZhciBtZXRob2QgPSBlbGVtZW50LnRhZ05hbWUudG9M
b3dlckNhc2UoKTsKKysgICAgRm9ybS5FbGVtZW50LlNlcmlhbGl6ZXJzW21ldGhvZF0oZWxlbWVu
dCwgdmFsdWUpOworKyAgICByZXR1cm4gZWxlbWVudDsKKysgIH0sCisrCisrICBjbGVhcjogZnVu
Y3Rpb24oZWxlbWVudCkgeworKyAgICAkKGVsZW1lbnQpLnZhbHVlID0gJyc7CisrICAgIHJldHVy
biBlbGVtZW50OworKyAgfSwKKysKKysgIHByZXNlbnQ6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKysg
ICAgcmV0dXJuICQoZWxlbWVudCkudmFsdWUgIT0gJyc7CisrICB9LAorKworKyAgYWN0aXZhdGU6
IGZ1bmN0aW9uKGVsZW1lbnQpIHsKKysgICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CisrICAgIHRy
eSB7CisrICAgICAgZWxlbWVudC5mb2N1cygpOworKyAgICAgIGlmIChlbGVtZW50LnNlbGVjdCAm
JiAoZWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgIT0gJ2lucHV0JyB8fAorKyAgICAgICAg
ICAhKC9eKD86YnV0dG9ufHJlc2V0fHN1Ym1pdCkkL2kudGVzdChlbGVtZW50LnR5cGUpKSkpCisr
ICAgICAgICBlbGVtZW50LnNlbGVjdCgpOworKyAgICB9IGNhdGNoIChlKSB7IH0KKysgICAgcmV0
dXJuIGVsZW1lbnQ7CisrICB9LAorKworKyAgZGlzYWJsZTogZnVuY3Rpb24oZWxlbWVudCkgewor
KyAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKKysgICAgZWxlbWVudC5kaXNhYmxlZCA9IHRydWU7
CisrICAgIHJldHVybiBlbGVtZW50OworKyAgfSwKKysKKysgIGVuYWJsZTogZnVuY3Rpb24oZWxl
bWVudCkgeworKyAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKKysgICAgZWxlbWVudC5kaXNhYmxl
ZCA9IGZhbHNlOworKyAgICByZXR1cm4gZWxlbWVudDsKKysgIH0KKyt9OworKworKy8qLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0qLworKworK3ZhciBGaWVsZCA9IEZvcm0uRWxlbWVudDsKKysKKyt2YXIgJEYg
PSBGb3JtLkVsZW1lbnQuTWV0aG9kcy5nZXRWYWx1ZTsKKysKKysvKi0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ki8KKysKKytGb3JtLkVsZW1lbnQuU2VyaWFsaXplcnMgPSAoZnVuY3Rpb24oKSB7CisrICBmdW5j
dGlvbiBpbnB1dChlbGVtZW50LCB2YWx1ZSkgeworKyAgICBzd2l0Y2ggKGVsZW1lbnQudHlwZS50
b0xvd2VyQ2FzZSgpKSB7CisrICAgICAgY2FzZSAnY2hlY2tib3gnOgorKyAgICAgIGNhc2UgJ3Jh
ZGlvJzoKKysgICAgICAgIHJldHVybiBpbnB1dFNlbGVjdG9yKGVsZW1lbnQsIHZhbHVlKTsKKysg
ICAgICBkZWZhdWx0OgorKyAgICAgICAgcmV0dXJuIHZhbHVlU2VsZWN0b3IoZWxlbWVudCwgdmFs
dWUpOworKyAgICB9CisrICB9CisrCisrICBmdW5jdGlvbiBpbnB1dFNlbGVjdG9yKGVsZW1lbnQs
IHZhbHVlKSB7CisrICAgIGlmIChPYmplY3QuaXNVbmRlZmluZWQodmFsdWUpKQorKyAgICAgIHJl
dHVybiBlbGVtZW50LmNoZWNrZWQgPyBlbGVtZW50LnZhbHVlIDogbnVsbDsKKysgICAgZWxzZSBl
bGVtZW50LmNoZWNrZWQgPSAhIXZhbHVlOworKyAgfQorKworKyAgZnVuY3Rpb24gdmFsdWVTZWxl
Y3RvcihlbGVtZW50LCB2YWx1ZSkgeworKyAgICBpZiAoT2JqZWN0LmlzVW5kZWZpbmVkKHZhbHVl
KSkgcmV0dXJuIGVsZW1lbnQudmFsdWU7CisrICAgIGVsc2UgZWxlbWVudC52YWx1ZSA9IHZhbHVl
OworKyAgfQorKworKyAgZnVuY3Rpb24gc2VsZWN0KGVsZW1lbnQsIHZhbHVlKSB7CisrICAgIGlm
IChPYmplY3QuaXNVbmRlZmluZWQodmFsdWUpKQorKyAgICAgIHJldHVybiAoZWxlbWVudC50eXBl
ID09PSAnc2VsZWN0LW9uZScgPyBzZWxlY3RPbmUgOiBzZWxlY3RNYW55KShlbGVtZW50KTsKKysK
KysgICAgdmFyIG9wdCwgY3VycmVudFZhbHVlLCBzaW5nbGUgPSAhT2JqZWN0LmlzQXJyYXkodmFs
dWUpOworKyAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZWxlbWVudC5sZW5ndGg7IGkgPCBs
ZW5ndGg7IGkrKykgeworKyAgICAgIG9wdCA9IGVsZW1lbnQub3B0aW9uc1tpXTsKKysgICAgICBj
dXJyZW50VmFsdWUgPSB0aGlzLm9wdGlvblZhbHVlKG9wdCk7CisrICAgICAgaWYgKHNpbmdsZSkg
eworKyAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZSA9PSB2YWx1ZSkgeworKyAgICAgICAgICBvcHQu
c2VsZWN0ZWQgPSB0cnVlOworKyAgICAgICAgICByZXR1cm47CisrICAgICAgICB9CisrICAgICAg
fQorKyAgICAgIGVsc2Ugb3B0LnNlbGVjdGVkID0gdmFsdWUuaW5jbHVkZShjdXJyZW50VmFsdWUp
OworKyAgICB9CisrICB9CisrCisrICBmdW5jdGlvbiBzZWxlY3RPbmUoZWxlbWVudCkgeworKyAg
ICB2YXIgaW5kZXggPSBlbGVtZW50LnNlbGVjdGVkSW5kZXg7CisrICAgIHJldHVybiBpbmRleCA+
PSAwID8gb3B0aW9uVmFsdWUoZWxlbWVudC5vcHRpb25zW2luZGV4XSkgOiBudWxsOworKyAgfQor
KworKyAgZnVuY3Rpb24gc2VsZWN0TWFueShlbGVtZW50KSB7CisrICAgIHZhciB2YWx1ZXMsIGxl
bmd0aCA9IGVsZW1lbnQubGVuZ3RoOworKyAgICBpZiAoIWxlbmd0aCkgcmV0dXJuIG51bGw7Cisr
CisrICAgIGZvciAodmFyIGkgPSAwLCB2YWx1ZXMgPSBbXTsgaSA8IGxlbmd0aDsgaSsrKSB7Cisr
ICAgICAgdmFyIG9wdCA9IGVsZW1lbnQub3B0aW9uc1tpXTsKKysgICAgICBpZiAob3B0LnNlbGVj
dGVkKSB2YWx1ZXMucHVzaChvcHRpb25WYWx1ZShvcHQpKTsKKysgICAgfQorKyAgICByZXR1cm4g
dmFsdWVzOworKyAgfQorKworKyAgZnVuY3Rpb24gb3B0aW9uVmFsdWUob3B0KSB7CisrICAgIHJl
dHVybiBFbGVtZW50Lmhhc0F0dHJpYnV0ZShvcHQsICd2YWx1ZScpID8gb3B0LnZhbHVlIDogb3B0
LnRleHQ7CisrICB9CisrCisrICByZXR1cm4geworKyAgICBpbnB1dDogICAgICAgICBpbnB1dCwK
KysgICAgaW5wdXRTZWxlY3RvcjogaW5wdXRTZWxlY3RvciwKKysgICAgdGV4dGFyZWE6ICAgICAg
dmFsdWVTZWxlY3RvciwKKysgICAgc2VsZWN0OiAgICAgICAgc2VsZWN0LAorKyAgICBzZWxlY3RP
bmU6ICAgICBzZWxlY3RPbmUsCisrICAgIHNlbGVjdE1hbnk6ICAgIHNlbGVjdE1hbnksCisrICAg
IG9wdGlvblZhbHVlOiAgIG9wdGlvblZhbHVlLAorKyAgICBidXR0b246ICAgICAgICB2YWx1ZVNl
bGVjdG9yCisrICB9OworK30pKCk7CisrCisrLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisrCisrCisr
QWJzdHJhY3QuVGltZWRPYnNlcnZlciA9IENsYXNzLmNyZWF0ZShQZXJpb2RpY2FsRXhlY3V0ZXIs
IHsKKysgIGluaXRpYWxpemU6IGZ1bmN0aW9uKCRzdXBlciwgZWxlbWVudCwgZnJlcXVlbmN5LCBj
YWxsYmFjaykgeworKyAgICAkc3VwZXIoY2FsbGJhY2ssIGZyZXF1ZW5jeSk7CisrICAgIHRoaXMu
ZWxlbWVudCAgID0gJChlbGVtZW50KTsKKysgICAgdGhpcy5sYXN0VmFsdWUgPSB0aGlzLmdldFZh
bHVlKCk7CisrICB9LAorKworKyAgZXhlY3V0ZTogZnVuY3Rpb24oKSB7CisrICAgIHZhciB2YWx1
ZSA9IHRoaXMuZ2V0VmFsdWUoKTsKKysgICAgaWYgKE9iamVjdC5pc1N0cmluZyh0aGlzLmxhc3RW
YWx1ZSkgJiYgT2JqZWN0LmlzU3RyaW5nKHZhbHVlKSA/CisrICAgICAgICB0aGlzLmxhc3RWYWx1
ZSAhPSB2YWx1ZSA6IFN0cmluZyh0aGlzLmxhc3RWYWx1ZSkgIT0gU3RyaW5nKHZhbHVlKSkgewor
KyAgICAgIHRoaXMuY2FsbGJhY2sodGhpcy5lbGVtZW50LCB2YWx1ZSk7CisrICAgICAgdGhpcy5s
YXN0VmFsdWUgPSB2YWx1ZTsKKysgICAgfQorKyAgfQorK30pOworKworK0Zvcm0uRWxlbWVudC5P
YnNlcnZlciA9IENsYXNzLmNyZWF0ZShBYnN0cmFjdC5UaW1lZE9ic2VydmVyLCB7CisrICBnZXRW
YWx1ZTogZnVuY3Rpb24oKSB7CisrICAgIHJldHVybiBGb3JtLkVsZW1lbnQuZ2V0VmFsdWUodGhp
cy5lbGVtZW50KTsKKysgIH0KKyt9KTsKKysKKytGb3JtLk9ic2VydmVyID0gQ2xhc3MuY3JlYXRl
KEFic3RyYWN0LlRpbWVkT2JzZXJ2ZXIsIHsKKysgIGdldFZhbHVlOiBmdW5jdGlvbigpIHsKKysg
ICAgcmV0dXJuIEZvcm0uc2VyaWFsaXplKHRoaXMuZWxlbWVudCk7CisrICB9CisrfSk7CisrCisr
LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSovCisrCisrQWJzdHJhY3QuRXZlbnRPYnNlcnZlciA9IENsYXNz
LmNyZWF0ZSh7CisrICBpbml0aWFsaXplOiBmdW5jdGlvbihlbGVtZW50LCBjYWxsYmFjaykgewor
KyAgICB0aGlzLmVsZW1lbnQgID0gJChlbGVtZW50KTsKKysgICAgdGhpcy5jYWxsYmFjayA9IGNh
bGxiYWNrOworKworKyAgICB0aGlzLmxhc3RWYWx1ZSA9IHRoaXMuZ2V0VmFsdWUoKTsKKysgICAg
aWYgKHRoaXMuZWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT0gJ2Zvcm0nKQorKyAgICAg
IHRoaXMucmVnaXN0ZXJGb3JtQ2FsbGJhY2tzKCk7CisrICAgIGVsc2UKKysgICAgICB0aGlzLnJl
Z2lzdGVyQ2FsbGJhY2sodGhpcy5lbGVtZW50KTsKKysgIH0sCisrCisrICBvbkVsZW1lbnRFdmVu
dDogZnVuY3Rpb24oKSB7CisrICAgIHZhciB2YWx1ZSA9IHRoaXMuZ2V0VmFsdWUoKTsKKysgICAg
aWYgKHRoaXMubGFzdFZhbHVlICE9IHZhbHVlKSB7CisrICAgICAgdGhpcy5jYWxsYmFjayh0aGlz
LmVsZW1lbnQsIHZhbHVlKTsKKysgICAgICB0aGlzLmxhc3RWYWx1ZSA9IHZhbHVlOworKyAgICB9
CisrICB9LAorKworKyAgcmVnaXN0ZXJGb3JtQ2FsbGJhY2tzOiBmdW5jdGlvbigpIHsKKysgICAg
Rm9ybS5nZXRFbGVtZW50cyh0aGlzLmVsZW1lbnQpLmVhY2godGhpcy5yZWdpc3RlckNhbGxiYWNr
LCB0aGlzKTsKKysgIH0sCisrCisrICByZWdpc3RlckNhbGxiYWNrOiBmdW5jdGlvbihlbGVtZW50
KSB7CisrICAgIGlmIChlbGVtZW50LnR5cGUpIHsKKysgICAgICBzd2l0Y2ggKGVsZW1lbnQudHlw
ZS50b0xvd2VyQ2FzZSgpKSB7CisrICAgICAgICBjYXNlICdjaGVja2JveCc6CisrICAgICAgICBj
YXNlICdyYWRpbyc6CisrICAgICAgICAgIEV2ZW50Lm9ic2VydmUoZWxlbWVudCwgJ2NsaWNrJywg
dGhpcy5vbkVsZW1lbnRFdmVudC5iaW5kKHRoaXMpKTsKKysgICAgICAgICAgYnJlYWs7CisrICAg
ICAgICBkZWZhdWx0OgorKyAgICAgICAgICBFdmVudC5vYnNlcnZlKGVsZW1lbnQsICdjaGFuZ2Un
LCB0aGlzLm9uRWxlbWVudEV2ZW50LmJpbmQodGhpcykpOworKyAgICAgICAgICBicmVhazsKKysg
ICAgICB9CisrICAgIH0KKysgIH0KKyt9KTsKKysKKytGb3JtLkVsZW1lbnQuRXZlbnRPYnNlcnZl
ciA9IENsYXNzLmNyZWF0ZShBYnN0cmFjdC5FdmVudE9ic2VydmVyLCB7CisrICBnZXRWYWx1ZTog
ZnVuY3Rpb24oKSB7CisrICAgIHJldHVybiBGb3JtLkVsZW1lbnQuZ2V0VmFsdWUodGhpcy5lbGVt
ZW50KTsKKysgIH0KKyt9KTsKKysKKytGb3JtLkV2ZW50T2JzZXJ2ZXIgPSBDbGFzcy5jcmVhdGUo
QWJzdHJhY3QuRXZlbnRPYnNlcnZlciwgeworKyAgZ2V0VmFsdWU6IGZ1bmN0aW9uKCkgeworKyAg
ICByZXR1cm4gRm9ybS5zZXJpYWxpemUodGhpcy5lbGVtZW50KTsKKysgIH0KKyt9KTsKKysoZnVu
Y3Rpb24oKSB7CisrCisrICB2YXIgRXZlbnQgPSB7CisrICAgIEtFWV9CQUNLU1BBQ0U6IDgsCisr
ICAgIEtFWV9UQUI6ICAgICAgIDksCisrICAgIEtFWV9SRVRVUk46ICAgMTMsCisrICAgIEtFWV9F
U0M6ICAgICAgMjcsCisrICAgIEtFWV9MRUZUOiAgICAgMzcsCisrICAgIEtFWV9VUDogICAgICAg
MzgsCisrICAgIEtFWV9SSUdIVDogICAgMzksCisrICAgIEtFWV9ET1dOOiAgICAgNDAsCisrICAg
IEtFWV9ERUxFVEU6ICAgNDYsCisrICAgIEtFWV9IT01FOiAgICAgMzYsCisrICAgIEtFWV9FTkQ6
ICAgICAgMzUsCisrICAgIEtFWV9QQUdFVVA6ICAgMzMsCisrICAgIEtFWV9QQUdFRE9XTjogMzQs
CisrICAgIEtFWV9JTlNFUlQ6ICAgNDUsCisrCisrICAgIGNhY2hlOiB7fQorKyAgfTsKKysKKysg
IHZhciBkb2NFbCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDsKKysgIHZhciBNT1VTRUVOVEVS
X01PVVNFTEVBVkVfRVZFTlRTX1NVUFBPUlRFRCA9ICdvbm1vdXNlZW50ZXInIGluIGRvY0VsCisr
ICAgICYmICdvbm1vdXNlbGVhdmUnIGluIGRvY0VsOworKworKworKworKyAgdmFyIGlzSUVMZWdh
Y3lFdmVudCA9IGZ1bmN0aW9uKGV2ZW50KSB7IHJldHVybiBmYWxzZTsgfTsKKysKKysgIGlmICh3
aW5kb3cuYXR0YWNoRXZlbnQpIHsKKysgICAgaWYgKHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKSB7
CisrICAgICAgaXNJRUxlZ2FjeUV2ZW50ID0gZnVuY3Rpb24oZXZlbnQpIHsKKysgICAgICAgIHJl
dHVybiAhKGV2ZW50IGluc3RhbmNlb2Ygd2luZG93LkV2ZW50KTsKKysgICAgICB9OworKyAgICB9
IGVsc2UgeworKyAgICAgIGlzSUVMZWdhY3lFdmVudCA9IGZ1bmN0aW9uKGV2ZW50KSB7IHJldHVy
biB0cnVlOyB9OworKyAgICB9CisrICB9CisrCisrICB2YXIgX2lzQnV0dG9uOworKworKyAgZnVu
Y3Rpb24gX2lzQnV0dG9uRm9yRE9NRXZlbnRzKGV2ZW50LCBjb2RlKSB7CisrICAgIHJldHVybiBl
dmVudC53aGljaCA/IChldmVudC53aGljaCA9PT0gY29kZSArIDEpIDogKGV2ZW50LmJ1dHRvbiA9
PT0gY29kZSk7CisrICB9CisrCisrICB2YXIgbGVnYWN5QnV0dG9uTWFwID0geyAwOiAxLCAxOiA0
LCAyOiAyIH07CisrICBmdW5jdGlvbiBfaXNCdXR0b25Gb3JMZWdhY3lFdmVudHMoZXZlbnQsIGNv
ZGUpIHsKKysgICAgcmV0dXJuIGV2ZW50LmJ1dHRvbiA9PT0gbGVnYWN5QnV0dG9uTWFwW2NvZGVd
OworKyAgfQorKworKyAgZnVuY3Rpb24gX2lzQnV0dG9uRm9yV2ViS2l0KGV2ZW50LCBjb2RlKSB7
CisrICAgIHN3aXRjaCAoY29kZSkgeworKyAgICAgIGNhc2UgMDogcmV0dXJuIGV2ZW50LndoaWNo
ID09IDEgJiYgIWV2ZW50Lm1ldGFLZXk7CisrICAgICAgY2FzZSAxOiByZXR1cm4gZXZlbnQud2hp
Y2ggPT0gMiB8fCAoZXZlbnQud2hpY2ggPT0gMSAmJiBldmVudC5tZXRhS2V5KTsKKysgICAgICBj
YXNlIDI6IHJldHVybiBldmVudC53aGljaCA9PSAzOworKyAgICAgIGRlZmF1bHQ6IHJldHVybiBm
YWxzZTsKKysgICAgfQorKyAgfQorKworKyAgaWYgKHdpbmRvdy5hdHRhY2hFdmVudCkgeworKyAg
ICBpZiAoIXdpbmRvdy5hZGRFdmVudExpc3RlbmVyKSB7CisrICAgICAgX2lzQnV0dG9uID0gX2lz
QnV0dG9uRm9yTGVnYWN5RXZlbnRzOworKyAgICB9IGVsc2UgeworKyAgICAgIF9pc0J1dHRvbiA9
IGZ1bmN0aW9uKGV2ZW50LCBjb2RlKSB7CisrICAgICAgICByZXR1cm4gaXNJRUxlZ2FjeUV2ZW50
KGV2ZW50KSA/IF9pc0J1dHRvbkZvckxlZ2FjeUV2ZW50cyhldmVudCwgY29kZSkgOgorKyAgICAg
ICAgIF9pc0J1dHRvbkZvckRPTUV2ZW50cyhldmVudCwgY29kZSk7CisrICAgICAgfQorKyAgICB9
CisrICB9IGVsc2UgaWYgKFByb3RvdHlwZS5Ccm93c2VyLldlYktpdCkgeworKyAgICBfaXNCdXR0
b24gPSBfaXNCdXR0b25Gb3JXZWJLaXQ7CisrICB9IGVsc2UgeworKyAgICBfaXNCdXR0b24gPSBf
aXNCdXR0b25Gb3JET01FdmVudHM7CisrICB9CisrCisrICBmdW5jdGlvbiBpc0xlZnRDbGljayhl
dmVudCkgICB7IHJldHVybiBfaXNCdXR0b24oZXZlbnQsIDApIH0KKysKKysgIGZ1bmN0aW9uIGlz
TWlkZGxlQ2xpY2soZXZlbnQpIHsgcmV0dXJuIF9pc0J1dHRvbihldmVudCwgMSkgfQorKworKyAg
ZnVuY3Rpb24gaXNSaWdodENsaWNrKGV2ZW50KSAgeyByZXR1cm4gX2lzQnV0dG9uKGV2ZW50LCAy
KSB9CisrCisrICBmdW5jdGlvbiBlbGVtZW50KGV2ZW50KSB7CisrICAgIGV2ZW50ID0gRXZlbnQu
ZXh0ZW5kKGV2ZW50KTsKKysKKysgICAgdmFyIG5vZGUgPSBldmVudC50YXJnZXQsIHR5cGUgPSBl
dmVudC50eXBlLAorKyAgICAgY3VycmVudFRhcmdldCA9IGV2ZW50LmN1cnJlbnRUYXJnZXQ7Cisr
CisrICAgIGlmIChjdXJyZW50VGFyZ2V0ICYmIGN1cnJlbnRUYXJnZXQudGFnTmFtZSkgeworKyAg
ICAgIGlmICh0eXBlID09PSAnbG9hZCcgfHwgdHlwZSA9PT0gJ2Vycm9yJyB8fAorKyAgICAgICAg
KHR5cGUgPT09ICdjbGljaycgJiYgY3VycmVudFRhcmdldC50YWdOYW1lLnRvTG93ZXJDYXNlKCkg
PT09ICdpbnB1dCcKKysgICAgICAgICAgJiYgY3VycmVudFRhcmdldC50eXBlID09PSAncmFkaW8n
KSkKKysgICAgICAgICAgICBub2RlID0gY3VycmVudFRhcmdldDsKKysgICAgfQorKworKyAgICBp
ZiAobm9kZS5ub2RlVHlwZSA9PSBOb2RlLlRFWFRfTk9ERSkKKysgICAgICBub2RlID0gbm9kZS5w
YXJlbnROb2RlOworKworKyAgICByZXR1cm4gRWxlbWVudC5leHRlbmQobm9kZSk7CisrICB9Cisr
CisrICBmdW5jdGlvbiBmaW5kRWxlbWVudChldmVudCwgZXhwcmVzc2lvbikgeworKyAgICB2YXIg
ZWxlbWVudCA9IEV2ZW50LmVsZW1lbnQoZXZlbnQpOworKworKyAgICBpZiAoIWV4cHJlc3Npb24p
IHJldHVybiBlbGVtZW50OworKyAgICB3aGlsZSAoZWxlbWVudCkgeworKyAgICAgIGlmIChPYmpl
Y3QuaXNFbGVtZW50KGVsZW1lbnQpICYmIFByb3RvdHlwZS5TZWxlY3Rvci5tYXRjaChlbGVtZW50
LCBleHByZXNzaW9uKSkgeworKyAgICAgICAgcmV0dXJuIEVsZW1lbnQuZXh0ZW5kKGVsZW1lbnQp
OworKyAgICAgIH0KKysgICAgICBlbGVtZW50ID0gZWxlbWVudC5wYXJlbnROb2RlOworKyAgICB9
CisrICB9CisrCisrICBmdW5jdGlvbiBwb2ludGVyKGV2ZW50KSB7CisrICAgIHJldHVybiB7IHg6
IHBvaW50ZXJYKGV2ZW50KSwgeTogcG9pbnRlclkoZXZlbnQpIH07CisrICB9CisrCisrICBmdW5j
dGlvbiBwb2ludGVyWChldmVudCkgeworKyAgICB2YXIgZG9jRWxlbWVudCA9IGRvY3VtZW50LmRv
Y3VtZW50RWxlbWVudCwKKysgICAgIGJvZHkgPSBkb2N1bWVudC5ib2R5IHx8IHsgc2Nyb2xsTGVm
dDogMCB9OworKworKyAgICByZXR1cm4gZXZlbnQucGFnZVggfHwgKGV2ZW50LmNsaWVudFggKwor
KyAgICAgIChkb2NFbGVtZW50LnNjcm9sbExlZnQgfHwgYm9keS5zY3JvbGxMZWZ0KSAtCisrICAg
ICAgKGRvY0VsZW1lbnQuY2xpZW50TGVmdCB8fCAwKSk7CisrICB9CisrCisrICBmdW5jdGlvbiBw
b2ludGVyWShldmVudCkgeworKyAgICB2YXIgZG9jRWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50
RWxlbWVudCwKKysgICAgIGJvZHkgPSBkb2N1bWVudC5ib2R5IHx8IHsgc2Nyb2xsVG9wOiAwIH07
CisrCisrICAgIHJldHVybiAgZXZlbnQucGFnZVkgfHwgKGV2ZW50LmNsaWVudFkgKworKyAgICAg
ICAoZG9jRWxlbWVudC5zY3JvbGxUb3AgfHwgYm9keS5zY3JvbGxUb3ApIC0KKysgICAgICAgKGRv
Y0VsZW1lbnQuY2xpZW50VG9wIHx8IDApKTsKKysgIH0KKysKKysKKysgIGZ1bmN0aW9uIHN0b3Ao
ZXZlbnQpIHsKKysgICAgRXZlbnQuZXh0ZW5kKGV2ZW50KTsKKysgICAgZXZlbnQucHJldmVudERl
ZmF1bHQoKTsKKysgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7CisrCisrICAgIGV2ZW50LnN0
b3BwZWQgPSB0cnVlOworKyAgfQorKworKworKyAgRXZlbnQuTWV0aG9kcyA9IHsKKysgICAgaXNM
ZWZ0Q2xpY2s6ICAgaXNMZWZ0Q2xpY2ssCisrICAgIGlzTWlkZGxlQ2xpY2s6IGlzTWlkZGxlQ2xp
Y2ssCisrICAgIGlzUmlnaHRDbGljazogIGlzUmlnaHRDbGljaywKKysKKysgICAgZWxlbWVudDog
ICAgIGVsZW1lbnQsCisrICAgIGZpbmRFbGVtZW50OiBmaW5kRWxlbWVudCwKKysKKysgICAgcG9p
bnRlcjogIHBvaW50ZXIsCisrICAgIHBvaW50ZXJYOiBwb2ludGVyWCwKKysgICAgcG9pbnRlclk6
IHBvaW50ZXJZLAorKworKyAgICBzdG9wOiBzdG9wCisrICB9OworKworKyAgdmFyIG1ldGhvZHMg
PSBPYmplY3Qua2V5cyhFdmVudC5NZXRob2RzKS5pbmplY3QoeyB9LCBmdW5jdGlvbihtLCBuYW1l
KSB7CisrICAgIG1bbmFtZV0gPSBFdmVudC5NZXRob2RzW25hbWVdLm1ldGhvZGl6ZSgpOworKyAg
ICByZXR1cm4gbTsKKysgIH0pOworKworKyAgaWYgKHdpbmRvdy5hdHRhY2hFdmVudCkgeworKyAg
ICBmdW5jdGlvbiBfcmVsYXRlZFRhcmdldChldmVudCkgeworKyAgICAgIHZhciBlbGVtZW50Owor
KyAgICAgIHN3aXRjaCAoZXZlbnQudHlwZSkgeworKyAgICAgICAgY2FzZSAnbW91c2VvdmVyJzoK
KysgICAgICAgIGNhc2UgJ21vdXNlZW50ZXInOgorKyAgICAgICAgICBlbGVtZW50ID0gZXZlbnQu
ZnJvbUVsZW1lbnQ7CisrICAgICAgICAgIGJyZWFrOworKyAgICAgICAgY2FzZSAnbW91c2VvdXQn
OgorKyAgICAgICAgY2FzZSAnbW91c2VsZWF2ZSc6CisrICAgICAgICAgIGVsZW1lbnQgPSBldmVu
dC50b0VsZW1lbnQ7CisrICAgICAgICAgIGJyZWFrOworKyAgICAgICAgZGVmYXVsdDoKKysgICAg
ICAgICAgcmV0dXJuIG51bGw7CisrICAgICAgfQorKyAgICAgIHJldHVybiBFbGVtZW50LmV4dGVu
ZChlbGVtZW50KTsKKysgICAgfQorKworKyAgICB2YXIgYWRkaXRpb25hbE1ldGhvZHMgPSB7Cisr
ICAgICAgc3RvcFByb3BhZ2F0aW9uOiBmdW5jdGlvbigpIHsgdGhpcy5jYW5jZWxCdWJibGUgPSB0
cnVlIH0sCisrICAgICAgcHJldmVudERlZmF1bHQ6ICBmdW5jdGlvbigpIHsgdGhpcy5yZXR1cm5W
YWx1ZSA9IGZhbHNlIH0sCisrICAgICAgaW5zcGVjdDogZnVuY3Rpb24oKSB7IHJldHVybiAnW29i
amVjdCBFdmVudF0nIH0KKysgICAgfTsKKysKKysgICAgRXZlbnQuZXh0ZW5kID0gZnVuY3Rpb24o
ZXZlbnQsIGVsZW1lbnQpIHsKKysgICAgICBpZiAoIWV2ZW50KSByZXR1cm4gZmFsc2U7CisrCisr
ICAgICAgaWYgKCFpc0lFTGVnYWN5RXZlbnQoZXZlbnQpKSByZXR1cm4gZXZlbnQ7CisrCisrICAg
ICAgaWYgKGV2ZW50Ll9leHRlbmRlZEJ5UHJvdG90eXBlKSByZXR1cm4gZXZlbnQ7CisrICAgICAg
ZXZlbnQuX2V4dGVuZGVkQnlQcm90b3R5cGUgPSBQcm90b3R5cGUuZW1wdHlGdW5jdGlvbjsKKysK
KysgICAgICB2YXIgcG9pbnRlciA9IEV2ZW50LnBvaW50ZXIoZXZlbnQpOworKworKyAgICAgIE9i
amVjdC5leHRlbmQoZXZlbnQsIHsKKysgICAgICAgIHRhcmdldDogZXZlbnQuc3JjRWxlbWVudCB8
fCBlbGVtZW50LAorKyAgICAgICAgcmVsYXRlZFRhcmdldDogX3JlbGF0ZWRUYXJnZXQoZXZlbnQp
LAorKyAgICAgICAgcGFnZVg6ICBwb2ludGVyLngsCisrICAgICAgICBwYWdlWTogIHBvaW50ZXIu
eQorKyAgICAgIH0pOworKworKyAgICAgIE9iamVjdC5leHRlbmQoZXZlbnQsIG1ldGhvZHMpOwor
KyAgICAgIE9iamVjdC5leHRlbmQoZXZlbnQsIGFkZGl0aW9uYWxNZXRob2RzKTsKKysKKysgICAg
ICByZXR1cm4gZXZlbnQ7CisrICAgIH07CisrICB9IGVsc2UgeworKyAgICBFdmVudC5leHRlbmQg
PSBQcm90b3R5cGUuSzsKKysgIH0KKysKKysgIGlmICh3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcikg
eworKyAgICBFdmVudC5wcm90b3R5cGUgPSB3aW5kb3cuRXZlbnQucHJvdG90eXBlIHx8IGRvY3Vt
ZW50LmNyZWF0ZUV2ZW50KCdIVE1MRXZlbnRzJykuX19wcm90b19fOworKyAgICBPYmplY3QuZXh0
ZW5kKEV2ZW50LnByb3RvdHlwZSwgbWV0aG9kcyk7CisrICB9CisrCisrICBmdW5jdGlvbiBfY3Jl
YXRlUmVzcG9uZGVyKGVsZW1lbnQsIGV2ZW50TmFtZSwgaGFuZGxlcikgeworKyAgICB2YXIgcmVn
aXN0cnkgPSBFbGVtZW50LnJldHJpZXZlKGVsZW1lbnQsICdwcm90b3R5cGVfZXZlbnRfcmVnaXN0
cnknKTsKKysKKysgICAgaWYgKE9iamVjdC5pc1VuZGVmaW5lZChyZWdpc3RyeSkpIHsKKysgICAg
ICBDQUNIRS5wdXNoKGVsZW1lbnQpOworKyAgICAgIHJlZ2lzdHJ5ID0gRWxlbWVudC5yZXRyaWV2
ZShlbGVtZW50LCAncHJvdG90eXBlX2V2ZW50X3JlZ2lzdHJ5JywgJEgoKSk7CisrICAgIH0KKysK
KysgICAgdmFyIHJlc3BvbmRlcnNGb3JFdmVudCA9IHJlZ2lzdHJ5LmdldChldmVudE5hbWUpOwor
KyAgICBpZiAoT2JqZWN0LmlzVW5kZWZpbmVkKHJlc3BvbmRlcnNGb3JFdmVudCkpIHsKKysgICAg
ICByZXNwb25kZXJzRm9yRXZlbnQgPSBbXTsKKysgICAgICByZWdpc3RyeS5zZXQoZXZlbnROYW1l
LCByZXNwb25kZXJzRm9yRXZlbnQpOworKyAgICB9CisrCisrICAgIGlmIChyZXNwb25kZXJzRm9y
RXZlbnQucGx1Y2soJ2hhbmRsZXInKS5pbmNsdWRlKGhhbmRsZXIpKSByZXR1cm4gZmFsc2U7Cisr
CisrICAgIHZhciByZXNwb25kZXI7CisrICAgIGlmIChldmVudE5hbWUuaW5jbHVkZSgiOiIpKSB7
CisrICAgICAgcmVzcG9uZGVyID0gZnVuY3Rpb24oZXZlbnQpIHsKKysgICAgICAgIGlmIChPYmpl
Y3QuaXNVbmRlZmluZWQoZXZlbnQuZXZlbnROYW1lKSkKKysgICAgICAgICAgcmV0dXJuIGZhbHNl
OworKworKyAgICAgICAgaWYgKGV2ZW50LmV2ZW50TmFtZSAhPT0gZXZlbnROYW1lKQorKyAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisrCisrICAgICAgICBFdmVudC5leHRlbmQoZXZlbnQsIGVsZW1l
bnQpOworKyAgICAgICAgaGFuZGxlci5jYWxsKGVsZW1lbnQsIGV2ZW50KTsKKysgICAgICB9Owor
KyAgICB9IGVsc2UgeworKyAgICAgIGlmICghTU9VU0VFTlRFUl9NT1VTRUxFQVZFX0VWRU5UU19T
VVBQT1JURUQgJiYKKysgICAgICAgKGV2ZW50TmFtZSA9PT0gIm1vdXNlZW50ZXIiIHx8IGV2ZW50
TmFtZSA9PT0gIm1vdXNlbGVhdmUiKSkgeworKyAgICAgICAgaWYgKGV2ZW50TmFtZSA9PT0gIm1v
dXNlZW50ZXIiIHx8IGV2ZW50TmFtZSA9PT0gIm1vdXNlbGVhdmUiKSB7CisrICAgICAgICAgIHJl
c3BvbmRlciA9IGZ1bmN0aW9uKGV2ZW50KSB7CisrICAgICAgICAgICAgRXZlbnQuZXh0ZW5kKGV2
ZW50LCBlbGVtZW50KTsKKysKKysgICAgICAgICAgICB2YXIgcGFyZW50ID0gZXZlbnQucmVsYXRl
ZFRhcmdldDsKKysgICAgICAgICAgICB3aGlsZSAocGFyZW50ICYmIHBhcmVudCAhPT0gZWxlbWVu
dCkgeworKyAgICAgICAgICAgICAgdHJ5IHsgcGFyZW50ID0gcGFyZW50LnBhcmVudE5vZGU7IH0K
KysgICAgICAgICAgICAgIGNhdGNoKGUpIHsgcGFyZW50ID0gZWxlbWVudDsgfQorKyAgICAgICAg
ICAgIH0KKysKKysgICAgICAgICAgICBpZiAocGFyZW50ID09PSBlbGVtZW50KSByZXR1cm47Cisr
CisrICAgICAgICAgICAgaGFuZGxlci5jYWxsKGVsZW1lbnQsIGV2ZW50KTsKKysgICAgICAgICAg
fTsKKysgICAgICAgIH0KKysgICAgICB9IGVsc2UgeworKyAgICAgICAgcmVzcG9uZGVyID0gZnVu
Y3Rpb24oZXZlbnQpIHsKKysgICAgICAgICAgRXZlbnQuZXh0ZW5kKGV2ZW50LCBlbGVtZW50KTsK
KysgICAgICAgICAgaGFuZGxlci5jYWxsKGVsZW1lbnQsIGV2ZW50KTsKKysgICAgICAgIH07Cisr
ICAgICAgfQorKyAgICB9CisrCisrICAgIHJlc3BvbmRlci5oYW5kbGVyID0gaGFuZGxlcjsKKysg
ICAgcmVzcG9uZGVyc0ZvckV2ZW50LnB1c2gocmVzcG9uZGVyKTsKKysgICAgcmV0dXJuIHJlc3Bv
bmRlcjsKKysgIH0KKysKKysgIGZ1bmN0aW9uIF9kZXN0cm95Q2FjaGUoKSB7CisrICAgIGZvciAo
dmFyIGkgPSAwLCBsZW5ndGggPSBDQUNIRS5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykgeworKyAg
ICAgIEV2ZW50LnN0b3BPYnNlcnZpbmcoQ0FDSEVbaV0pOworKyAgICAgIENBQ0hFW2ldID0gbnVs
bDsKKysgICAgfQorKyAgfQorKworKyAgdmFyIENBQ0hFID0gW107CisrCisrICBpZiAoUHJvdG90
eXBlLkJyb3dzZXIuSUUpCisrICAgIHdpbmRvdy5hdHRhY2hFdmVudCgnb251bmxvYWQnLCBfZGVz
dHJveUNhY2hlKTsKKysKKysgIGlmIChQcm90b3R5cGUuQnJvd3Nlci5XZWJLaXQpCisrICAgIHdp
bmRvdy5hZGRFdmVudExpc3RlbmVyKCd1bmxvYWQnLCBQcm90b3R5cGUuZW1wdHlGdW5jdGlvbiwg
ZmFsc2UpOworKworKworKyAgdmFyIF9nZXRET01FdmVudE5hbWUgPSBQcm90b3R5cGUuSywKKysg
ICAgICB0cmFuc2xhdGlvbnMgPSB7IG1vdXNlZW50ZXI6ICJtb3VzZW92ZXIiLCBtb3VzZWxlYXZl
OiAibW91c2VvdXQiIH07CisrCisrICBpZiAoIU1PVVNFRU5URVJfTU9VU0VMRUFWRV9FVkVOVFNf
U1VQUE9SVEVEKSB7CisrICAgIF9nZXRET01FdmVudE5hbWUgPSBmdW5jdGlvbihldmVudE5hbWUp
IHsKKysgICAgICByZXR1cm4gKHRyYW5zbGF0aW9uc1tldmVudE5hbWVdIHx8IGV2ZW50TmFtZSk7
CisrICAgIH07CisrICB9CisrCisrICBmdW5jdGlvbiBvYnNlcnZlKGVsZW1lbnQsIGV2ZW50TmFt
ZSwgaGFuZGxlcikgeworKyAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKKysKKysgICAgdmFyIHJl
c3BvbmRlciA9IF9jcmVhdGVSZXNwb25kZXIoZWxlbWVudCwgZXZlbnROYW1lLCBoYW5kbGVyKTsK
KysKKysgICAgaWYgKCFyZXNwb25kZXIpIHJldHVybiBlbGVtZW50OworKworKyAgICBpZiAoZXZl
bnROYW1lLmluY2x1ZGUoJzonKSkgeworKyAgICAgIGlmIChlbGVtZW50LmFkZEV2ZW50TGlzdGVu
ZXIpCisrICAgICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImRhdGFhdmFpbGFibGUiLCBy
ZXNwb25kZXIsIGZhbHNlKTsKKysgICAgICBlbHNlIHsKKysgICAgICAgIGVsZW1lbnQuYXR0YWNo
RXZlbnQoIm9uZGF0YWF2YWlsYWJsZSIsIHJlc3BvbmRlcik7CisrICAgICAgICBlbGVtZW50LmF0
dGFjaEV2ZW50KCJvbmxvc2VjYXB0dXJlIiwgcmVzcG9uZGVyKTsKKysgICAgICB9CisrICAgIH0g
ZWxzZSB7CisrICAgICAgdmFyIGFjdHVhbEV2ZW50TmFtZSA9IF9nZXRET01FdmVudE5hbWUoZXZl
bnROYW1lKTsKKysKKysgICAgICBpZiAoZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKQorKyAgICAg
ICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGFjdHVhbEV2ZW50TmFtZSwgcmVzcG9uZGVyLCBm
YWxzZSk7CisrICAgICAgZWxzZQorKyAgICAgICAgZWxlbWVudC5hdHRhY2hFdmVudCgib24iICsg
YWN0dWFsRXZlbnROYW1lLCByZXNwb25kZXIpOworKyAgICB9CisrCisrICAgIHJldHVybiBlbGVt
ZW50OworKyAgfQorKworKyAgZnVuY3Rpb24gc3RvcE9ic2VydmluZyhlbGVtZW50LCBldmVudE5h
bWUsIGhhbmRsZXIpIHsKKysgICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CisrCisrICAgIHZhciBy
ZWdpc3RyeSA9IEVsZW1lbnQucmV0cmlldmUoZWxlbWVudCwgJ3Byb3RvdHlwZV9ldmVudF9yZWdp
c3RyeScpOworKyAgICBpZiAoIXJlZ2lzdHJ5KSByZXR1cm4gZWxlbWVudDsKKysKKysgICAgaWYg
KCFldmVudE5hbWUpIHsKKysgICAgICByZWdpc3RyeS5lYWNoKCBmdW5jdGlvbihwYWlyKSB7Cisr
ICAgICAgICB2YXIgZXZlbnROYW1lID0gcGFpci5rZXk7CisrICAgICAgICBzdG9wT2JzZXJ2aW5n
KGVsZW1lbnQsIGV2ZW50TmFtZSk7CisrICAgICAgfSk7CisrICAgICAgcmV0dXJuIGVsZW1lbnQ7
CisrICAgIH0KKysKKysgICAgdmFyIHJlc3BvbmRlcnMgPSByZWdpc3RyeS5nZXQoZXZlbnROYW1l
KTsKKysgICAgaWYgKCFyZXNwb25kZXJzKSByZXR1cm4gZWxlbWVudDsKKysKKysgICAgaWYgKCFo
YW5kbGVyKSB7CisrICAgICAgcmVzcG9uZGVycy5lYWNoKGZ1bmN0aW9uKHIpIHsKKysgICAgICAg
IHN0b3BPYnNlcnZpbmcoZWxlbWVudCwgZXZlbnROYW1lLCByLmhhbmRsZXIpOworKyAgICAgIH0p
OworKyAgICAgIHJldHVybiBlbGVtZW50OworKyAgICB9CisrCisrICAgIHZhciBpID0gcmVzcG9u
ZGVycy5sZW5ndGgsIHJlc3BvbmRlcjsKKysgICAgd2hpbGUgKGktLSkgeworKyAgICAgIGlmIChy
ZXNwb25kZXJzW2ldLmhhbmRsZXIgPT09IGhhbmRsZXIpIHsKKysgICAgICAgIHJlc3BvbmRlciA9
IHJlc3BvbmRlcnNbaV07CisrICAgICAgICBicmVhazsKKysgICAgICB9CisrICAgIH0KKysgICAg
aWYgKCFyZXNwb25kZXIpIHJldHVybiBlbGVtZW50OworKworKyAgICBpZiAoZXZlbnROYW1lLmlu
Y2x1ZGUoJzonKSkgeworKyAgICAgIGlmIChlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIpCisr
ICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImRhdGFhdmFpbGFibGUiLCByZXNw
b25kZXIsIGZhbHNlKTsKKysgICAgICBlbHNlIHsKKysgICAgICAgIGVsZW1lbnQuZGV0YWNoRXZl
bnQoIm9uZGF0YWF2YWlsYWJsZSIsIHJlc3BvbmRlcik7CisrICAgICAgICBlbGVtZW50LmRldGFj
aEV2ZW50KCJvbmxvc2VjYXB0dXJlIiwgcmVzcG9uZGVyKTsKKysgICAgICB9CisrICAgIH0gZWxz
ZSB7CisrICAgICAgdmFyIGFjdHVhbEV2ZW50TmFtZSA9IF9nZXRET01FdmVudE5hbWUoZXZlbnRO
YW1lKTsKKysgICAgICBpZiAoZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKQorKyAgICAgICAg
ZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGFjdHVhbEV2ZW50TmFtZSwgcmVzcG9uZGVyLCBm
YWxzZSk7CisrICAgICAgZWxzZQorKyAgICAgICAgZWxlbWVudC5kZXRhY2hFdmVudCgnb24nICsg
YWN0dWFsRXZlbnROYW1lLCByZXNwb25kZXIpOworKyAgICB9CisrCisrICAgIHJlZ2lzdHJ5LnNl
dChldmVudE5hbWUsIHJlc3BvbmRlcnMud2l0aG91dChyZXNwb25kZXIpKTsKKysKKysgICAgcmV0
dXJuIGVsZW1lbnQ7CisrICB9CisrCisrICBmdW5jdGlvbiBmaXJlKGVsZW1lbnQsIGV2ZW50TmFt
ZSwgbWVtbywgYnViYmxlKSB7CisrICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOworKworKyAgICBp
ZiAoT2JqZWN0LmlzVW5kZWZpbmVkKGJ1YmJsZSkpCisrICAgICAgYnViYmxlID0gdHJ1ZTsKKysK
KysgICAgaWYgKGVsZW1lbnQgPT0gZG9jdW1lbnQgJiYgZG9jdW1lbnQuY3JlYXRlRXZlbnQgJiYg
IWVsZW1lbnQuZGlzcGF0Y2hFdmVudCkKKysgICAgICBlbGVtZW50ID0gZG9jdW1lbnQuZG9jdW1l
bnRFbGVtZW50OworKworKyAgICB2YXIgZXZlbnQ7CisrICAgIGlmIChkb2N1bWVudC5jcmVhdGVF
dmVudCkgeworKyAgICAgIGV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0hUTUxFdmVudHMn
KTsKKysgICAgICBldmVudC5pbml0RXZlbnQoJ2RhdGFhdmFpbGFibGUnLCBidWJibGUsIHRydWUp
OworKyAgICB9IGVsc2UgeworKyAgICAgIGV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnRPYmpl
Y3QoKTsKKysgICAgICBldmVudC5ldmVudFR5cGUgPSBidWJibGUgPyAnb25kYXRhYXZhaWxhYmxl
JyA6ICdvbmxvc2VjYXB0dXJlJzsKKysgICAgfQorKworKyAgICBldmVudC5ldmVudE5hbWUgPSBl
dmVudE5hbWU7CisrICAgIGV2ZW50Lm1lbW8gPSBtZW1vIHx8IHsgfTsKKysKKysgICAgaWYgKGRv
Y3VtZW50LmNyZWF0ZUV2ZW50KQorKyAgICAgIGVsZW1lbnQuZGlzcGF0Y2hFdmVudChldmVudCk7
CisrICAgIGVsc2UKKysgICAgICBlbGVtZW50LmZpcmVFdmVudChldmVudC5ldmVudFR5cGUsIGV2
ZW50KTsKKysKKysgICAgcmV0dXJuIEV2ZW50LmV4dGVuZChldmVudCk7CisrICB9CisrCisrICBF
dmVudC5IYW5kbGVyID0gQ2xhc3MuY3JlYXRlKHsKKysgICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24o
ZWxlbWVudCwgZXZlbnROYW1lLCBzZWxlY3RvciwgY2FsbGJhY2spIHsKKysgICAgICB0aGlzLmVs
ZW1lbnQgICA9ICQoZWxlbWVudCk7CisrICAgICAgdGhpcy5ldmVudE5hbWUgPSBldmVudE5hbWU7
CisrICAgICAgdGhpcy5zZWxlY3RvciAgPSBzZWxlY3RvcjsKKysgICAgICB0aGlzLmNhbGxiYWNr
ICA9IGNhbGxiYWNrOworKyAgICAgIHRoaXMuaGFuZGxlciAgID0gdGhpcy5oYW5kbGVFdmVudC5i
aW5kKHRoaXMpOworKyAgICB9LAorKworKyAgICBzdGFydDogZnVuY3Rpb24oKSB7CisrICAgICAg
RXZlbnQub2JzZXJ2ZSh0aGlzLmVsZW1lbnQsIHRoaXMuZXZlbnROYW1lLCB0aGlzLmhhbmRsZXIp
OworKyAgICAgIHJldHVybiB0aGlzOworKyAgICB9LAorKworKyAgICBzdG9wOiBmdW5jdGlvbigp
IHsKKysgICAgICBFdmVudC5zdG9wT2JzZXJ2aW5nKHRoaXMuZWxlbWVudCwgdGhpcy5ldmVudE5h
bWUsIHRoaXMuaGFuZGxlcik7CisrICAgICAgcmV0dXJuIHRoaXM7CisrICAgIH0sCisrCisrICAg
IGhhbmRsZUV2ZW50OiBmdW5jdGlvbihldmVudCkgeworKyAgICAgIHZhciBlbGVtZW50ID0gRXZl
bnQuZmluZEVsZW1lbnQoZXZlbnQsIHRoaXMuc2VsZWN0b3IpOworKyAgICAgIGlmIChlbGVtZW50
KSB0aGlzLmNhbGxiYWNrLmNhbGwodGhpcy5lbGVtZW50LCBldmVudCwgZWxlbWVudCk7CisrICAg
IH0KKysgIH0pOworKworKyAgZnVuY3Rpb24gb24oZWxlbWVudCwgZXZlbnROYW1lLCBzZWxlY3Rv
ciwgY2FsbGJhY2spIHsKKysgICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CisrICAgIGlmIChPYmpl
Y3QuaXNGdW5jdGlvbihzZWxlY3RvcikgJiYgT2JqZWN0LmlzVW5kZWZpbmVkKGNhbGxiYWNrKSkg
eworKyAgICAgIGNhbGxiYWNrID0gc2VsZWN0b3IsIHNlbGVjdG9yID0gbnVsbDsKKysgICAgfQor
KworKyAgICByZXR1cm4gbmV3IEV2ZW50LkhhbmRsZXIoZWxlbWVudCwgZXZlbnROYW1lLCBzZWxl
Y3RvciwgY2FsbGJhY2spLnN0YXJ0KCk7CisrICB9CisrCisrICBPYmplY3QuZXh0ZW5kKEV2ZW50
LCBFdmVudC5NZXRob2RzKTsKKysKKysgIE9iamVjdC5leHRlbmQoRXZlbnQsIHsKKysgICAgZmly
ZTogICAgICAgICAgZmlyZSwKKysgICAgb2JzZXJ2ZTogICAgICAgb2JzZXJ2ZSwKKysgICAgc3Rv
cE9ic2VydmluZzogc3RvcE9ic2VydmluZywKKysgICAgb246ICAgICAgICAgICAgb24KKysgIH0p
OworKworKyAgRWxlbWVudC5hZGRNZXRob2RzKHsKKysgICAgZmlyZTogICAgICAgICAgZmlyZSwK
KysKKysgICAgb2JzZXJ2ZTogICAgICAgb2JzZXJ2ZSwKKysKKysgICAgc3RvcE9ic2VydmluZzog
c3RvcE9ic2VydmluZywKKysKKysgICAgb246ICAgICAgICAgICAgb24KKysgIH0pOworKworKyAg
T2JqZWN0LmV4dGVuZChkb2N1bWVudCwgeworKyAgICBmaXJlOiAgICAgICAgICBmaXJlLm1ldGhv
ZGl6ZSgpLAorKworKyAgICBvYnNlcnZlOiAgICAgICBvYnNlcnZlLm1ldGhvZGl6ZSgpLAorKwor
KyAgICBzdG9wT2JzZXJ2aW5nOiBzdG9wT2JzZXJ2aW5nLm1ldGhvZGl6ZSgpLAorKworKyAgICBv
bjogICAgICAgICAgICBvbi5tZXRob2RpemUoKSwKKysKKysgICAgbG9hZGVkOiAgICAgICAgZmFs
c2UKKysgIH0pOworKworKyAgaWYgKHdpbmRvdy5FdmVudCkgT2JqZWN0LmV4dGVuZCh3aW5kb3cu
RXZlbnQsIEV2ZW50KTsKKysgIGVsc2Ugd2luZG93LkV2ZW50ID0gRXZlbnQ7CisrfSkoKTsKKysK
KysoZnVuY3Rpb24oKSB7CisrICAvKiBTdXBwb3J0IGZvciB0aGUgRE9NQ29udGVudExvYWRlZCBl
dmVudCBpcyBiYXNlZCBvbiB3b3JrIGJ5IERhbiBXZWJiLAorKyAgICAgTWF0dGhpYXMgTWlsbGVy
LCBEZWFuIEVkd2FyZHMsIEpvaG4gUmVzaWcsIGFuZCBEaWVnbyBQZXJpbmkuICovCisrCisrICB2
YXIgdGltZXI7CisrCisrICBmdW5jdGlvbiBmaXJlQ29udGVudExvYWRlZEV2ZW50KCkgeworKyAg
ICBpZiAoZG9jdW1lbnQubG9hZGVkKSByZXR1cm47CisrICAgIGlmICh0aW1lcikgd2luZG93LmNs
ZWFyVGltZW91dCh0aW1lcik7CisrICAgIGRvY3VtZW50LmxvYWRlZCA9IHRydWU7CisrICAgIGRv
Y3VtZW50LmZpcmUoJ2RvbTpsb2FkZWQnKTsKKysgIH0KKysKKysgIGZ1bmN0aW9uIGNoZWNrUmVh
ZHlTdGF0ZSgpIHsKKysgICAgaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICdjb21wbGV0ZScp
IHsKKysgICAgICBkb2N1bWVudC5zdG9wT2JzZXJ2aW5nKCdyZWFkeXN0YXRlY2hhbmdlJywgY2hl
Y2tSZWFkeVN0YXRlKTsKKysgICAgICBmaXJlQ29udGVudExvYWRlZEV2ZW50KCk7CisrICAgIH0K
KysgIH0KKysKKysgIGZ1bmN0aW9uIHBvbGxEb1Njcm9sbCgpIHsKKysgICAgdHJ5IHsgZG9jdW1l
bnQuZG9jdW1lbnRFbGVtZW50LmRvU2Nyb2xsKCdsZWZ0Jyk7IH0KKysgICAgY2F0Y2goZSkgewor
KyAgICAgIHRpbWVyID0gcG9sbERvU2Nyb2xsLmRlZmVyKCk7CisrICAgICAgcmV0dXJuOworKyAg
ICB9CisrICAgIGZpcmVDb250ZW50TG9hZGVkRXZlbnQoKTsKKysgIH0KKysKKysgIGlmIChkb2N1
bWVudC5hZGRFdmVudExpc3RlbmVyKSB7CisrICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIo
J0RPTUNvbnRlbnRMb2FkZWQnLCBmaXJlQ29udGVudExvYWRlZEV2ZW50LCBmYWxzZSk7CisrICB9
IGVsc2UgeworKyAgICBkb2N1bWVudC5vYnNlcnZlKCdyZWFkeXN0YXRlY2hhbmdlJywgY2hlY2tS
ZWFkeVN0YXRlKTsKKysgICAgaWYgKHdpbmRvdyA9PSB0b3ApCisrICAgICAgdGltZXIgPSBwb2xs
RG9TY3JvbGwuZGVmZXIoKTsKKysgIH0KKysKKysgIEV2ZW50Lm9ic2VydmUod2luZG93LCAnbG9h
ZCcsIGZpcmVDb250ZW50TG9hZGVkRXZlbnQpOworK30pKCk7CisrCisrRWxlbWVudC5hZGRNZXRo
b2RzKCk7CisrCisrLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERFUFJFQ0FURUQg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisrCisrSGFzaC50b1F1ZXJ5U3RyaW5n
ID0gT2JqZWN0LnRvUXVlcnlTdHJpbmc7CisrCisrdmFyIFRvZ2dsZSA9IHsgZGlzcGxheTogRWxl
bWVudC50b2dnbGUgfTsKKysKKytFbGVtZW50Lk1ldGhvZHMuY2hpbGRPZiA9IEVsZW1lbnQuTWV0
aG9kcy5kZXNjZW5kYW50T2Y7CisrCisrdmFyIEluc2VydGlvbiA9IHsKKysgIEJlZm9yZTogZnVu
Y3Rpb24oZWxlbWVudCwgY29udGVudCkgeworKyAgICByZXR1cm4gRWxlbWVudC5pbnNlcnQoZWxl
bWVudCwge2JlZm9yZTpjb250ZW50fSk7CisrICB9LAorKworKyAgVG9wOiBmdW5jdGlvbihlbGVt
ZW50LCBjb250ZW50KSB7CisrICAgIHJldHVybiBFbGVtZW50Lmluc2VydChlbGVtZW50LCB7dG9w
OmNvbnRlbnR9KTsKKysgIH0sCisrCisrICBCb3R0b206IGZ1bmN0aW9uKGVsZW1lbnQsIGNvbnRl
bnQpIHsKKysgICAgcmV0dXJuIEVsZW1lbnQuaW5zZXJ0KGVsZW1lbnQsIHtib3R0b206Y29udGVu
dH0pOworKyAgfSwKKysKKysgIEFmdGVyOiBmdW5jdGlvbihlbGVtZW50LCBjb250ZW50KSB7Cisr
ICAgIHJldHVybiBFbGVtZW50Lmluc2VydChlbGVtZW50LCB7YWZ0ZXI6Y29udGVudH0pOworKyAg
fQorK307CisrCisrdmFyICRjb250aW51ZSA9IG5ldyBFcnJvcignInRocm93ICRjb250aW51ZSIg
aXMgZGVwcmVjYXRlZCwgdXNlICJyZXR1cm4iIGluc3RlYWQnKTsKKysKKyt2YXIgUG9zaXRpb24g
PSB7CisrICBpbmNsdWRlU2Nyb2xsT2Zmc2V0czogZmFsc2UsCisrCisrICBwcmVwYXJlOiBmdW5j
dGlvbigpIHsKKysgICAgdGhpcy5kZWx0YVggPSAgd2luZG93LnBhZ2VYT2Zmc2V0CisrICAgICAg
ICAgICAgICAgIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0CisrICAgICAg
ICAgICAgICAgIHx8IGRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdAorKyAgICAgICAgICAgICAgICB8
fCAwOworKyAgICB0aGlzLmRlbHRhWSA9ICB3aW5kb3cucGFnZVlPZmZzZXQKKysgICAgICAgICAg
ICAgICAgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcAorKyAgICAgICAgICAg
ICAgICB8fCBkb2N1bWVudC5ib2R5LnNjcm9sbFRvcAorKyAgICAgICAgICAgICAgICB8fCAwOwor
KyAgfSwKKysKKysgIHdpdGhpbjogZnVuY3Rpb24oZWxlbWVudCwgeCwgeSkgeworKyAgICBpZiAo
dGhpcy5pbmNsdWRlU2Nyb2xsT2Zmc2V0cykKKysgICAgICByZXR1cm4gdGhpcy53aXRoaW5JbmNs
dWRpbmdTY3JvbGxvZmZzZXRzKGVsZW1lbnQsIHgsIHkpOworKyAgICB0aGlzLnhjb21wID0geDsK
KysgICAgdGhpcy55Y29tcCA9IHk7CisrICAgIHRoaXMub2Zmc2V0ID0gRWxlbWVudC5jdW11bGF0
aXZlT2Zmc2V0KGVsZW1lbnQpOworKworKyAgICByZXR1cm4gKHkgPj0gdGhpcy5vZmZzZXRbMV0g
JiYKKysgICAgICAgICAgICB5IDwgIHRoaXMub2Zmc2V0WzFdICsgZWxlbWVudC5vZmZzZXRIZWln
aHQgJiYKKysgICAgICAgICAgICB4ID49IHRoaXMub2Zmc2V0WzBdICYmCisrICAgICAgICAgICAg
eCA8ICB0aGlzLm9mZnNldFswXSArIGVsZW1lbnQub2Zmc2V0V2lkdGgpOworKyAgfSwKKysKKysg
IHdpdGhpbkluY2x1ZGluZ1Njcm9sbG9mZnNldHM6IGZ1bmN0aW9uKGVsZW1lbnQsIHgsIHkpIHsK
KysgICAgdmFyIG9mZnNldGNhY2hlID0gRWxlbWVudC5jdW11bGF0aXZlU2Nyb2xsT2Zmc2V0KGVs
ZW1lbnQpOworKworKyAgICB0aGlzLnhjb21wID0geCArIG9mZnNldGNhY2hlWzBdIC0gdGhpcy5k
ZWx0YVg7CisrICAgIHRoaXMueWNvbXAgPSB5ICsgb2Zmc2V0Y2FjaGVbMV0gLSB0aGlzLmRlbHRh
WTsKKysgICAgdGhpcy5vZmZzZXQgPSBFbGVtZW50LmN1bXVsYXRpdmVPZmZzZXQoZWxlbWVudCk7
CisrCisrICAgIHJldHVybiAodGhpcy55Y29tcCA+PSB0aGlzLm9mZnNldFsxXSAmJgorKyAgICAg
ICAgICAgIHRoaXMueWNvbXAgPCAgdGhpcy5vZmZzZXRbMV0gKyBlbGVtZW50Lm9mZnNldEhlaWdo
dCAmJgorKyAgICAgICAgICAgIHRoaXMueGNvbXAgPj0gdGhpcy5vZmZzZXRbMF0gJiYKKysgICAg
ICAgICAgICB0aGlzLnhjb21wIDwgIHRoaXMub2Zmc2V0WzBdICsgZWxlbWVudC5vZmZzZXRXaWR0
aCk7CisrICB9LAorKworKyAgb3ZlcmxhcDogZnVuY3Rpb24obW9kZSwgZWxlbWVudCkgeworKyAg
ICBpZiAoIW1vZGUpIHJldHVybiAwOworKyAgICBpZiAobW9kZSA9PSAndmVydGljYWwnKQorKyAg
ICAgIHJldHVybiAoKHRoaXMub2Zmc2V0WzFdICsgZWxlbWVudC5vZmZzZXRIZWlnaHQpIC0gdGhp
cy55Y29tcCkgLworKyAgICAgICAgZWxlbWVudC5vZmZzZXRIZWlnaHQ7CisrICAgIGlmIChtb2Rl
ID09ICdob3Jpem9udGFsJykKKysgICAgICByZXR1cm4gKCh0aGlzLm9mZnNldFswXSArIGVsZW1l
bnQub2Zmc2V0V2lkdGgpIC0gdGhpcy54Y29tcCkgLworKyAgICAgICAgZWxlbWVudC5vZmZzZXRX
aWR0aDsKKysgIH0sCisrCisrCisrICBjdW11bGF0aXZlT2Zmc2V0OiBFbGVtZW50Lk1ldGhvZHMu
Y3VtdWxhdGl2ZU9mZnNldCwKKysKKysgIHBvc2l0aW9uZWRPZmZzZXQ6IEVsZW1lbnQuTWV0aG9k
cy5wb3NpdGlvbmVkT2Zmc2V0LAorKworKyAgYWJzb2x1dGl6ZTogZnVuY3Rpb24oZWxlbWVudCkg
eworKyAgICBQb3NpdGlvbi5wcmVwYXJlKCk7CisrICAgIHJldHVybiBFbGVtZW50LmFic29sdXRp
emUoZWxlbWVudCk7CisrICB9LAorKworKyAgcmVsYXRpdml6ZTogZnVuY3Rpb24oZWxlbWVudCkg
eworKyAgICBQb3NpdGlvbi5wcmVwYXJlKCk7CisrICAgIHJldHVybiBFbGVtZW50LnJlbGF0aXZp
emUoZWxlbWVudCk7CisrICB9LAorKworKyAgcmVhbE9mZnNldDogRWxlbWVudC5NZXRob2RzLmN1
bXVsYXRpdmVTY3JvbGxPZmZzZXQsCisrCisrICBvZmZzZXRQYXJlbnQ6IEVsZW1lbnQuTWV0aG9k
cy5nZXRPZmZzZXRQYXJlbnQsCisrCisrICBwYWdlOiBFbGVtZW50Lk1ldGhvZHMudmlld3BvcnRP
ZmZzZXQsCisrCisrICBjbG9uZTogZnVuY3Rpb24oc291cmNlLCB0YXJnZXQsIG9wdGlvbnMpIHsK
KysgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwgeyB9OworKyAgICByZXR1cm4gRWxlbWVudC5jbG9u
ZVBvc2l0aW9uKHRhcmdldCwgc291cmNlLCBvcHRpb25zKTsKKysgIH0KKyt9OworKworKy8qLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0qLworKworK2lmICghZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFt
ZSkgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSA9IGZ1bmN0aW9uKGluc3RhbmNlTWV0
aG9kcyl7CisrICBmdW5jdGlvbiBpdGVyKG5hbWUpIHsKKysgICAgcmV0dXJuIG5hbWUuYmxhbmso
KSA/IG51bGwgOiAiW2NvbnRhaW5zKGNvbmNhdCgnICcsIEBjbGFzcywgJyAnKSwgJyAiICsgbmFt
ZSArICIgJyldIjsKKysgIH0KKysKKysgIGluc3RhbmNlTWV0aG9kcy5nZXRFbGVtZW50c0J5Q2xh
c3NOYW1lID0gUHJvdG90eXBlLkJyb3dzZXJGZWF0dXJlcy5YUGF0aCA/CisrICBmdW5jdGlvbihl
bGVtZW50LCBjbGFzc05hbWUpIHsKKysgICAgY2xhc3NOYW1lID0gY2xhc3NOYW1lLnRvU3RyaW5n
KCkuc3RyaXAoKTsKKysgICAgdmFyIGNvbmQgPSAvXHMvLnRlc3QoY2xhc3NOYW1lKSA/ICR3KGNs
YXNzTmFtZSkubWFwKGl0ZXIpLmpvaW4oJycpIDogaXRlcihjbGFzc05hbWUpOworKyAgICByZXR1
cm4gY29uZCA/IGRvY3VtZW50Ll9nZXRFbGVtZW50c0J5WFBhdGgoJy4vLyonICsgY29uZCwgZWxl
bWVudCkgOiBbXTsKKysgIH0gOiBmdW5jdGlvbihlbGVtZW50LCBjbGFzc05hbWUpIHsKKysgICAg
Y2xhc3NOYW1lID0gY2xhc3NOYW1lLnRvU3RyaW5nKCkuc3RyaXAoKTsKKysgICAgdmFyIGVsZW1l
bnRzID0gW10sIGNsYXNzTmFtZXMgPSAoL1xzLy50ZXN0KGNsYXNzTmFtZSkgPyAkdyhjbGFzc05h
bWUpIDogbnVsbCk7CisrICAgIGlmICghY2xhc3NOYW1lcyAmJiAhY2xhc3NOYW1lKSByZXR1cm4g
ZWxlbWVudHM7CisrCisrICAgIHZhciBub2RlcyA9ICQoZWxlbWVudCkuZ2V0RWxlbWVudHNCeVRh
Z05hbWUoJyonKTsKKysgICAgY2xhc3NOYW1lID0gJyAnICsgY2xhc3NOYW1lICsgJyAnOworKwor
KyAgICBmb3IgKHZhciBpID0gMCwgY2hpbGQsIGNuOyBjaGlsZCA9IG5vZGVzW2ldOyBpKyspIHsK
KysgICAgICBpZiAoY2hpbGQuY2xhc3NOYW1lICYmIChjbiA9ICcgJyArIGNoaWxkLmNsYXNzTmFt
ZSArICcgJykgJiYgKGNuLmluY2x1ZGUoY2xhc3NOYW1lKSB8fAorKyAgICAgICAgICAoY2xhc3NO
YW1lcyAmJiBjbGFzc05hbWVzLmFsbChmdW5jdGlvbihuYW1lKSB7CisrICAgICAgICAgICAgcmV0
dXJuICFuYW1lLnRvU3RyaW5nKCkuYmxhbmsoKSAmJiBjbi5pbmNsdWRlKCcgJyArIG5hbWUgKyAn
ICcpOworKyAgICAgICAgICB9KSkpKQorKyAgICAgICAgZWxlbWVudHMucHVzaChFbGVtZW50LmV4
dGVuZChjaGlsZCkpOworKyAgICB9CisrICAgIHJldHVybiBlbGVtZW50czsKKysgIH07CisrCisr
ICByZXR1cm4gZnVuY3Rpb24oY2xhc3NOYW1lLCBwYXJlbnRFbGVtZW50KSB7CisrICAgIHJldHVy
biAkKHBhcmVudEVsZW1lbnQgfHwgZG9jdW1lbnQuYm9keSkuZ2V0RWxlbWVudHNCeUNsYXNzTmFt
ZShjbGFzc05hbWUpOworKyAgfTsKKyt9KEVsZW1lbnQuTWV0aG9kcyk7CisrCisrLyotLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSovCisrCisrRWxlbWVudC5DbGFzc05hbWVzID0gQ2xhc3MuY3JlYXRlKCk7Cisr
RWxlbWVudC5DbGFzc05hbWVzLnByb3RvdHlwZSA9IHsKKysgIGluaXRpYWxpemU6IGZ1bmN0aW9u
KGVsZW1lbnQpIHsKKysgICAgdGhpcy5lbGVtZW50ID0gJChlbGVtZW50KTsKKysgIH0sCisrCisr
ICBfZWFjaDogZnVuY3Rpb24oaXRlcmF0b3IpIHsKKysgICAgdGhpcy5lbGVtZW50LmNsYXNzTmFt
ZS5zcGxpdCgvXHMrLykuc2VsZWN0KGZ1bmN0aW9uKG5hbWUpIHsKKysgICAgICByZXR1cm4gbmFt
ZS5sZW5ndGggPiAwOworKyAgICB9KS5fZWFjaChpdGVyYXRvcik7CisrICB9LAorKworKyAgc2V0
OiBmdW5jdGlvbihjbGFzc05hbWUpIHsKKysgICAgdGhpcy5lbGVtZW50LmNsYXNzTmFtZSA9IGNs
YXNzTmFtZTsKKysgIH0sCisrCisrICBhZGQ6IGZ1bmN0aW9uKGNsYXNzTmFtZVRvQWRkKSB7Cisr
ICAgIGlmICh0aGlzLmluY2x1ZGUoY2xhc3NOYW1lVG9BZGQpKSByZXR1cm47CisrICAgIHRoaXMu
c2V0KCRBKHRoaXMpLmNvbmNhdChjbGFzc05hbWVUb0FkZCkuam9pbignICcpKTsKKysgIH0sCisr
CisrICByZW1vdmU6IGZ1bmN0aW9uKGNsYXNzTmFtZVRvUmVtb3ZlKSB7CisrICAgIGlmICghdGhp
cy5pbmNsdWRlKGNsYXNzTmFtZVRvUmVtb3ZlKSkgcmV0dXJuOworKyAgICB0aGlzLnNldCgkQSh0
aGlzKS53aXRob3V0KGNsYXNzTmFtZVRvUmVtb3ZlKS5qb2luKCcgJykpOworKyAgfSwKKysKKysg
IHRvU3RyaW5nOiBmdW5jdGlvbigpIHsKKysgICAgcmV0dXJuICRBKHRoaXMpLmpvaW4oJyAnKTsK
KysgIH0KKyt9OworKworK09iamVjdC5leHRlbmQoRWxlbWVudC5DbGFzc05hbWVzLnByb3RvdHlw
ZSwgRW51bWVyYWJsZSk7CisrCisrLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisrCisrKGZ1bmN0aW9u
KCkgeworKyAgd2luZG93LlNlbGVjdG9yID0gQ2xhc3MuY3JlYXRlKHsKKysgICAgaW5pdGlhbGl6
ZTogZnVuY3Rpb24oZXhwcmVzc2lvbikgeworKyAgICAgIHRoaXMuZXhwcmVzc2lvbiA9IGV4cHJl
c3Npb24uc3RyaXAoKTsKKysgICAgfSwKKysKKysgICAgZmluZEVsZW1lbnRzOiBmdW5jdGlvbihy
b290RWxlbWVudCkgeworKyAgICAgIHJldHVybiBQcm90b3R5cGUuU2VsZWN0b3Iuc2VsZWN0KHRo
aXMuZXhwcmVzc2lvbiwgcm9vdEVsZW1lbnQpOworKyAgICB9LAorKworKyAgICBtYXRjaDogZnVu
Y3Rpb24oZWxlbWVudCkgeworKyAgICAgIHJldHVybiBQcm90b3R5cGUuU2VsZWN0b3IubWF0Y2go
ZWxlbWVudCwgdGhpcy5leHByZXNzaW9uKTsKKysgICAgfSwKKysKKysgICAgdG9TdHJpbmc6IGZ1
bmN0aW9uKCkgeworKyAgICAgIHJldHVybiB0aGlzLmV4cHJlc3Npb247CisrICAgIH0sCisrCisr
ICAgIGluc3BlY3Q6IGZ1bmN0aW9uKCkgeworKyAgICAgIHJldHVybiAiIzxTZWxlY3RvcjogIiAr
IHRoaXMuZXhwcmVzc2lvbiArICI+IjsKKysgICAgfQorKyAgfSk7CisrCisrICBPYmplY3QuZXh0
ZW5kKFNlbGVjdG9yLCB7CisrICAgIG1hdGNoRWxlbWVudHM6IGZ1bmN0aW9uKGVsZW1lbnRzLCBl
eHByZXNzaW9uKSB7CisrICAgICAgdmFyIG1hdGNoID0gUHJvdG90eXBlLlNlbGVjdG9yLm1hdGNo
LAorKyAgICAgICAgICByZXN1bHRzID0gW107CisrCisrICAgICAgZm9yICh2YXIgaSA9IDAsIGxl
bmd0aCA9IGVsZW1lbnRzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7CisrICAgICAgICB2YXIg
ZWxlbWVudCA9IGVsZW1lbnRzW2ldOworKyAgICAgICAgaWYgKG1hdGNoKGVsZW1lbnQsIGV4cHJl
c3Npb24pKSB7CisrICAgICAgICAgIHJlc3VsdHMucHVzaChFbGVtZW50LmV4dGVuZChlbGVtZW50
KSk7CisrICAgICAgICB9CisrICAgICAgfQorKyAgICAgIHJldHVybiByZXN1bHRzOworKyAgICB9
LAorKworKyAgICBmaW5kRWxlbWVudDogZnVuY3Rpb24oZWxlbWVudHMsIGV4cHJlc3Npb24sIGlu
ZGV4KSB7CisrICAgICAgaW5kZXggPSBpbmRleCB8fCAwOworKyAgICAgIHZhciBtYXRjaEluZGV4
ID0gMCwgZWxlbWVudDsKKysgICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZWxlbWVudHMu
bGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHsKKysgICAgICAgIGVsZW1lbnQgPSBlbGVtZW50c1tp
XTsKKysgICAgICAgIGlmIChQcm90b3R5cGUuU2VsZWN0b3IubWF0Y2goZWxlbWVudCwgZXhwcmVz
c2lvbikgJiYgaW5kZXggPT09IG1hdGNoSW5kZXgrKykgeworKyAgICAgICAgICByZXR1cm4gRWxl
bWVudC5leHRlbmQoZWxlbWVudCk7CisrICAgICAgICB9CisrICAgICAgfQorKyAgICB9LAorKwor
KyAgICBmaW5kQ2hpbGRFbGVtZW50czogZnVuY3Rpb24oZWxlbWVudCwgZXhwcmVzc2lvbnMpIHsK
KysgICAgICB2YXIgc2VsZWN0b3IgPSBleHByZXNzaW9ucy50b0FycmF5KCkuam9pbignLCAnKTsK
KysgICAgICByZXR1cm4gUHJvdG90eXBlLlNlbGVjdG9yLnNlbGVjdChzZWxlY3RvciwgZWxlbWVu
dCB8fCBkb2N1bWVudCk7CisrICAgIH0KKysgIH0pOworK30pKCk7CitkaWZmIC0tZ2l0IGEvd2Vi
L3Rlc3RzL2Nzc3F1ZXJ5LWRvam8uaHRtbCBiL3dlYi90ZXN0cy9jc3NxdWVyeS1kb2pvLmh0bWwK
K2luZGV4IGIyN2M5NWIuLjYyNmY5MmMgMTAwNjQ0CistLS0gYS93ZWIvdGVzdHMvY3NzcXVlcnkt
ZG9qby5odG1sCisrKysgYi93ZWIvdGVzdHMvY3NzcXVlcnktZG9qby5odG1sCitAQCAtMSw3ICsx
LDcgQEAKKyA8aHRtbD4KKyA8aGVhZD4KKyA8c2NyaXB0IHNyYz0iLi4vaHRtbHJ1bm5lci5qcyI+
PC9zY3JpcHQ+CistPHNjcmlwdCBzcmM9Imh0dHA6Ly9hamF4Lmdvb2dsZWFwaXMuY29tL2FqYXgv
bGlicy9kb2pvLzEuNi4xL2Rvam8vZG9qby54ZC5qcyI+PC9zY3JpcHQ+CisrPHNjcmlwdCBzcmM9
Ii4uL2FqYXgvbGlicy9kb2pvLzEuNi4xL2Rvam8vZG9qby54ZC5qcyI+PC9zY3JpcHQ+CisgPHNj
cmlwdD4KKyB3aW5kb3cub25sb2FkID0gZnVuY3Rpb24oKXsKKyBzdGFydFRlc3QoImNzc3F1ZXJ5
LWRvam8iLCAnNTQ3N2QyYWUnKTsKK0BAIC0xNjgsNyArMTY4LDcgQEAgZW5kVGVzdCgpOworIDwv
aGVhZD4KKyA8Ym9keT4KKyAgIDxkaXYgY2xhc3M9ImhlYWQiPgorLSAgIDxwPjxhIGhyZWY9Imh0
dHA6Ly93d3cudzMub3JnLyI+PGltZyBoZWlnaHQ9NDggYWx0PVczQyBzcmM9Imh0dHA6Ly93d3cu
dzMub3JnL0ljb25zL3czY19ob21lIiB3aWR0aD03Mj48L2E+CisrICAgPHA+PGEgaHJlZj0iaHR0
cDovL3d3dy53My5vcmcvIj48aW1nIGhlaWdodD00OCBhbHQ9VzNDIHdpZHRoPTcyPjwvYT4KKyAK
KyAgICA8aDEgaWQ9InRpdGxlIj5TZWxlY3RvcnM8L2gxPgorIAorZGlmZiAtLWdpdCBhL3dlYi90
ZXN0cy9jc3NxdWVyeS1leHQuaHRtbCBiL3dlYi90ZXN0cy9jc3NxdWVyeS1leHQuaHRtbAoraW5k
ZXggYWNiMzVjMS4uNjhiNDA0MiAxMDA2NDQKKy0tLSBhL3dlYi90ZXN0cy9jc3NxdWVyeS1leHQu
aHRtbAorKysrIGIvd2ViL3Rlc3RzL2Nzc3F1ZXJ5LWV4dC5odG1sCitAQCAtMSw3ICsxLDcgQEAK
KyA8aHRtbD4KKyA8aGVhZD4KKyA8c2NyaXB0IHNyYz0iLi4vaHRtbHJ1bm5lci5qcyI+PC9zY3Jp
cHQ+CistPHNjcmlwdCBzcmM9Imh0dHBzOi8vYWpheC5nb29nbGVhcGlzLmNvbS9hamF4L2xpYnMv
ZXh0LWNvcmUvMy4xLjAvZXh0LWNvcmUuanMiPjwvc2NyaXB0PgorKzxzY3JpcHQgc3JjPSIuLi9h
amF4L2xpYnMvZXh0LWNvcmUvMy4xLjAvZXh0LWNvcmUuanMiPjwvc2NyaXB0PgorIDxzY3JpcHQ+
Cisgd2luZG93Lm9ubG9hZCA9IGZ1bmN0aW9uKCl7Cisgc3RhcnRUZXN0KCJjc3NxdWVyeS1leHQi
LCAnNWJjMDVhMTcnKTsKK0BAIC0xNjgsNyArMTY4LDcgQEAgZW5kVGVzdCgpOworIDwvaGVhZD4K
KyA8Ym9keT4KKyAgIDxkaXYgY2xhc3M9ImhlYWQiPgorLSAgIDxwPjxhIGhyZWY9Imh0dHA6Ly93
d3cudzMub3JnLyI+PGltZyBoZWlnaHQ9NDggYWx0PVczQyBzcmM9Imh0dHA6Ly93d3cudzMub3Jn
L0ljb25zL3czY19ob21lIiB3aWR0aD03Mj48L2E+CisrICAgPHA+PGEgaHJlZj0iaHR0cDovL3d3
dy53My5vcmcvIj48aW1nIGhlaWdodD00OCBhbHQ9VzNDIHdpZHRoPTcyPjwvYT4KKyAKKyAgICA8
aDEgaWQ9InRpdGxlIj5TZWxlY3RvcnM8L2gxPgorIAorZGlmZiAtLWdpdCBhL3dlYi90ZXN0cy9j
c3NxdWVyeS1qcXVlcnktMi54Lmh0bWwgYi93ZWIvdGVzdHMvY3NzcXVlcnktanF1ZXJ5LTIueC5o
dG1sCitpbmRleCA2Yjk1ZmVlLi5lMWVmNTY3IDEwMDY0NAorLS0tIGEvd2ViL3Rlc3RzL2Nzc3F1
ZXJ5LWpxdWVyeS0yLnguaHRtbAorKysrIGIvd2ViL3Rlc3RzL2Nzc3F1ZXJ5LWpxdWVyeS0yLngu
aHRtbAorQEAgLTEsNyArMSw3IEBACisgPGh0bWw+CisgPGhlYWQ+CisgPHNjcmlwdCBzcmM9Ii4u
L2h0bWxydW5uZXIuanMiPjwvc2NyaXB0PgorLTxzY3JpcHQgc3JjPSJodHRwczovL2FqYXguZ29v
Z2xlYXBpcy5jb20vYWpheC9saWJzL2pxdWVyeS8yLjAuMy9qcXVlcnkubWluLmpzIj48L3Njcmlw
dD4KKys8c2NyaXB0IHNyYz0iLi4vYWpheC9saWJzL2pxdWVyeS8yLjAuMy9qcXVlcnkubWluLmpz
Ij48L3NjcmlwdD4KKyA8c2NyaXB0PgorIHdpbmRvdy5vbmxvYWQgPSBmdW5jdGlvbigpeworIHN0
YXJ0VGVzdCgiY3NzcXVlcnktanF1ZXJ5IiwgJzVkZmUxYTEyJyk7CitAQCAtMTY3LDcgKzE2Nyw3
IEBAIGVuZFRlc3QoKTsKKyA8L2hlYWQ+CisgPGJvZHk+CisgICA8ZGl2IGNsYXNzPSJoZWFkIj4K
Ky0gICA8cD48YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy8iPjxpbWcgaGVpZ2h0PTQ4IGFsdD1X
M0Mgc3JjPSJodHRwOi8vd3d3LnczLm9yZy9JY29ucy93M2NfaG9tZSIgd2lkdGg9NzI+PC9hPgor
KyAgIDxwPjxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnLyI+PGltZyBoZWlnaHQ9NDggYWx0PVcz
QyB3aWR0aD03Mj48L2E+CisgCisgICAgPGgxIGlkPSJ0aXRsZSI+U2VsZWN0b3JzPC9oMT4KKyAK
K2RpZmYgLS1naXQgYS93ZWIvdGVzdHMvY3NzcXVlcnktanF1ZXJ5Lmh0bWwgYi93ZWIvdGVzdHMv
Y3NzcXVlcnktanF1ZXJ5Lmh0bWwKK2luZGV4IGE4M2VmNWMuLmQ1MjdjYjcgMTAwNjQ0CistLS0g
YS93ZWIvdGVzdHMvY3NzcXVlcnktanF1ZXJ5Lmh0bWwKKysrKyBiL3dlYi90ZXN0cy9jc3NxdWVy
eS1qcXVlcnkuaHRtbAorQEAgLTEsNyArMSw3IEBACisgPGh0bWw+CisgPGhlYWQ+CisgPHNjcmlw
dCBzcmM9Ii4uL2h0bWxydW5uZXIuanMiPjwvc2NyaXB0PgorLTxzY3JpcHQgc3JjPSJodHRwczov
L2FqYXguZ29vZ2xlYXBpcy5jb20vYWpheC9saWJzL2pxdWVyeS8xLjEwLjIvanF1ZXJ5Lm1pbi5q
cyI+PC9zY3JpcHQ+CisrPHNjcmlwdCBzcmM9Ii4uL2FqYXgvbGlicy9qcXVlcnkvMS4xMC4yL2px
dWVyeS5taW4uanMiPjwvc2NyaXB0PgorIDxzY3JpcHQ+Cisgd2luZG93Lm9ubG9hZCA9IGZ1bmN0
aW9uKCl7Cisgc3RhcnRUZXN0KCJjc3NxdWVyeS1qcXVlcnkiLCAnZGU4MDhlNWYnKTsKK0BAIC0x
NjcsNyArMTY3LDcgQEAgZW5kVGVzdCgpOworIDwvaGVhZD4KKyA8Ym9keT4KKyAgIDxkaXYgY2xh
c3M9ImhlYWQiPgorLSAgIDxwPjxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnLyI+PGltZyBoZWln
aHQ9NDggYWx0PVczQyBzcmM9Imh0dHA6Ly93d3cudzMub3JnL0ljb25zL3czY19ob21lIiB3aWR0
aD03Mj48L2E+CisrICAgPHA+PGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvIj48aW1nIGhlaWdo
dD00OCBhbHQ9VzNDIHdpZHRoPTcyPjwvYT4KKyAKKyAgICA8aDEgaWQ9InRpdGxlIj5TZWxlY3Rv
cnM8L2gxPgorIAorZGlmZiAtLWdpdCBhL3dlYi90ZXN0cy9jc3NxdWVyeS1tb290b29scy5odG1s
IGIvd2ViL3Rlc3RzL2Nzc3F1ZXJ5LW1vb3Rvb2xzLmh0bWwKK2luZGV4IDUwMDllZmMuLjY3NDcz
MGUgMTAwNjQ0CistLS0gYS93ZWIvdGVzdHMvY3NzcXVlcnktbW9vdG9vbHMuaHRtbAorKysrIGIv
d2ViL3Rlc3RzL2Nzc3F1ZXJ5LW1vb3Rvb2xzLmh0bWwKK0BAIC0xLDcgKzEsNyBAQAorIDxodG1s
PgorIDxoZWFkPgorIDxzY3JpcHQgc3JjPSIuLi9odG1scnVubmVyLmpzIj48L3NjcmlwdD4KKy08
c2NyaXB0IHNyYz0iaHR0cHM6Ly9hamF4Lmdvb2dsZWFwaXMuY29tL2FqYXgvbGlicy9tb290b29s
cy8xLjQuMS9tb290b29scy15dWktY29tcHJlc3NlZC5qcyI+PC9zY3JpcHQ+CisrPHNjcmlwdCBz
cmM9Ii4uL2FqYXgvbGlicy9tb290b29scy8xLjQuMS9tb290b29scy15dWktY29tcHJlc3NlZC5q
cyI+PC9zY3JpcHQ+CisgPHNjcmlwdD4KKyB3aW5kb3cub25sb2FkID0gZnVuY3Rpb24oKXsKKyBz
dGFydFRlc3QoImNzc3F1ZXJ5LW1vb3Rvb2xzIiwgJ2M1YWM2NTZiJyk7CitAQCAtMTY3LDcgKzE2
Nyw3IEBAIGVuZFRlc3QoKTsKKyA8L2hlYWQ+CisgPGJvZHk+CisgICA8ZGl2IGNsYXNzPSJoZWFk
Ij4KKy0gICA8cD48YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy8iPjxpbWcgaGVpZ2h0PTQ4IGFs
dD1XM0Mgc3JjPSJodHRwOi8vd3d3LnczLm9yZy9JY29ucy93M2NfaG9tZSIgd2lkdGg9NzI+PC9h
PgorKyAgIDxwPjxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnLyI+PGltZyBoZWlnaHQ9NDggYWx0
PVczQyB3aWR0aD03Mj48L2E+CisgCisgICAgPGgxIGlkPSJ0aXRsZSI+U2VsZWN0b3JzPC9oMT4K
KyAKK2RpZmYgLS1naXQgYS93ZWIvdGVzdHMvY3NzcXVlcnktcHJvdG90eXBlLmh0bWwgYi93ZWIv
dGVzdHMvY3NzcXVlcnktcHJvdG90eXBlLmh0bWwKK2luZGV4IDMyNGQ0ZWQuLmUwZDg2YzkgMTAw
NjQ0CistLS0gYS93ZWIvdGVzdHMvY3NzcXVlcnktcHJvdG90eXBlLmh0bWwKKysrKyBiL3dlYi90
ZXN0cy9jc3NxdWVyeS1wcm90b3R5cGUuaHRtbAorQEAgLTEsNyArMSw3IEBACisgPGh0bWw+Cisg
PGhlYWQ+CisgPHNjcmlwdCBzcmM9Ii4uL2h0bWxydW5uZXIuanMiPjwvc2NyaXB0PgorLTxzY3Jp
cHQgc3JjPSJodHRwczovL2FqYXguZ29vZ2xlYXBpcy5jb20vYWpheC9saWJzL3Byb3RvdHlwZS8x
LjcuMC4wL3Byb3RvdHlwZS5qcyI+PC9zY3JpcHQ+CisrPHNjcmlwdCBzcmM9Ii4uL2FqYXgvbGli
cy9wcm90b3R5cGUvMS43LjAuMC9wcm90b3R5cGUuanMiPjwvc2NyaXB0PgorIDxzY3JpcHQ+Cisg
d2luZG93Lm9ubG9hZCA9IGZ1bmN0aW9uKCl7Cisgc3RhcnRUZXN0KCJjc3NxdWVyeS1wcm90b3R5
cGUiLCAnZDE1MTE2MWYnKTsKK0BAIC0xNjcsNyArMTY3LDcgQEAgZW5kVGVzdCgpOworIDwvaGVh
ZD4KKyA8Ym9keT4KKyAgIDxkaXYgY2xhc3M9ImhlYWQiPgorLSAgIDxwPjxhIGhyZWY9Imh0dHA6
Ly93d3cudzMub3JnLyI+PGltZyBoZWlnaHQ9NDggYWx0PVczQyBzcmM9Imh0dHA6Ly93d3cudzMu
b3JnL0ljb25zL3czY19ob21lIiB3aWR0aD03Mj48L2E+CisrICAgPHA+PGEgaHJlZj0iaHR0cDov
L3d3dy53My5vcmcvIj48aW1nIGhlaWdodD00OCBhbHQ9VzNDIHdpZHRoPTcyPjwvYT4KKyAKKyAg
ICA8aDEgaWQ9InRpdGxlIj5TZWxlY3RvcnM8L2gxPgorIAorZGlmZiAtLWdpdCBhL3dlYi90ZXN0
cy9jc3NxdWVyeS15dWkuaHRtbCBiL3dlYi90ZXN0cy9jc3NxdWVyeS15dWkuaHRtbAoraW5kZXgg
ZDM1NGVkNy4uNzI0NTI1MSAxMDA2NDQKKy0tLSBhL3dlYi90ZXN0cy9jc3NxdWVyeS15dWkuaHRt
bAorKysrIGIvd2ViL3Rlc3RzL2Nzc3F1ZXJ5LXl1aS5odG1sCitAQCAtMTcwLDcgKzE3MCw3IEBA
IGVuZFRlc3QoKTsKKyA8L2hlYWQ+CisgPGJvZHk+CisgICA8ZGl2IGNsYXNzPSJoZWFkIj4KKy0g
ICA8cD48YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy8iPjxpbWcgaGVpZ2h0PTQ4IGFsdD1XM0Mg
c3JjPSJodHRwOi8vd3d3LnczLm9yZy9JY29ucy93M2NfaG9tZSIgd2lkdGg9NzI+PC9hPgorKyAg
IDxwPjxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnLyI+PGltZyBoZWlnaHQ9NDggYWx0PVczQyB3
aWR0aD03Mj48L2E+CisgCisgICAgPGgxIGlkPSJ0aXRsZSI+U2VsZWN0b3JzPC9oMT4KKyAKK2Rp
ZmYgLS1naXQgYS93ZWIvdGVzdHMvZG9tLWF0dHIuaHRtbCBiL3dlYi90ZXN0cy9kb20tYXR0ci5o
dG1sCitpbmRleCBkYmYzNjFiLi42YzUyODc1IDEwMDY0NAorLS0tIGEvd2ViL3Rlc3RzL2RvbS1h
dHRyLmh0bWwKKysrKyBiL3dlYi90ZXN0cy9kb20tYXR0ci5odG1sCitAQCAtNDgsNyArNDgsNyBA
QCBlbmRUZXN0KCk7CisgPC9oZWFkPgorIDxib2R5PgorICAgPGRpdiBjbGFzcz0iaGVhZCI+Cist
ICAgPHA+PGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvIj48aW1nIGhlaWdodD00OCBhbHQ9VzND
IHNyYz0iaHR0cDovL3d3dy53My5vcmcvSWNvbnMvdzNjX2hvbWUiIHdpZHRoPTcyPjwvYT4KKysg
ICA8cD48YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy8iPjxpbWcgaGVpZ2h0PTQ4IGFsdD1XM0Mg
d2lkdGg9NzI+PC9hPgorIAorICAgIDxoMSBpZD0idGl0bGUiPlNlbGVjdG9yczwvaDE+CisgCitk
aWZmIC0tZ2l0IGEvd2ViL3Rlc3RzL2RvbS1tb2RpZnkuaHRtbCBiL3dlYi90ZXN0cy9kb20tbW9k
aWZ5Lmh0bWwKK2luZGV4IGVmNTdiNTEuLmMwMjg2MjAgMTAwNjQ0CistLS0gYS93ZWIvdGVzdHMv
ZG9tLW1vZGlmeS5odG1sCisrKysgYi93ZWIvdGVzdHMvZG9tLW1vZGlmeS5odG1sCitAQCAtNzgs
NyArNzgsNyBAQCBlbmRUZXN0KCk7CisgPC9oZWFkPgorIDxib2R5PgorICAgPGRpdiBjbGFzcz0i
aGVhZCI+CistICAgPHA+PGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvIj48aW1nIGhlaWdodD00
OCBhbHQ9VzNDIHNyYz0iaHR0cDovL3d3dy53My5vcmcvSWNvbnMvdzNjX2hvbWUiIHdpZHRoPTcy
PjwvYT4KKysgICA8cD48YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy8iPjxpbWcgaGVpZ2h0PTQ4
IGFsdD1XM0Mgd2lkdGg9NzI+PC9hPgorIAorICAgIDxoMSBpZD0idGl0bGUiPlNlbGVjdG9yczwv
aDE+CisgCitkaWZmIC0tZ2l0IGEvd2ViL3Rlc3RzL2RvbS1xdWVyeS5odG1sIGIvd2ViL3Rlc3Rz
L2RvbS1xdWVyeS5odG1sCitpbmRleCA2NWE2MWRkLi43MGEyZDU0IDEwMDY0NAorLS0tIGEvd2Vi
L3Rlc3RzL2RvbS1xdWVyeS5odG1sCisrKysgYi93ZWIvdGVzdHMvZG9tLXF1ZXJ5Lmh0bWwKK0BA
IC0xMDUsNyArMTA1LDcgQEAgZW5kVGVzdCgpOworIDwvaGVhZD4KKyA8Ym9keT4KKyAgIDxkaXYg
Y2xhc3M9ImhlYWQiPgorLSAgIDxwPjxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnLyI+PGltZyBo
ZWlnaHQ9NDggYWx0PVczQyBzcmM9Imh0dHA6Ly93d3cudzMub3JnL0ljb25zL3czY19ob21lIiB3
aWR0aD03Mj48L2E+CisrICAgPHA+PGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvIj48aW1nIGhl
aWdodD00OCBhbHQ9VzNDIHdpZHRoPTcyPjwvYT4KKyAKKyAgICA8aDEgaWQ9InRpdGxlIj5TZWxl
Y3RvcnM8L2gxPgorIAorZGlmZiAtLWdpdCBhL3dlYi90ZXN0cy9kb20tdHJhdmVyc2UuaHRtbCBi
L3dlYi90ZXN0cy9kb20tdHJhdmVyc2UuaHRtbAoraW5kZXggNjczYzA5NS4uMjdkYTZiMyAxMDA2
NDQKKy0tLSBhL3dlYi90ZXN0cy9kb20tdHJhdmVyc2UuaHRtbAorKysrIGIvd2ViL3Rlc3RzL2Rv
bS10cmF2ZXJzZS5odG1sCitAQCAtNzcsNyArNzcsNyBAQCBlbmRUZXN0KCk7CisgPC9oZWFkPgor
IDxib2R5PgorICAgPGRpdiBjbGFzcz0iaGVhZCI+CistICAgPHA+PGEgaHJlZj0iaHR0cDovL3d3
dy53My5vcmcvIj48aW1nIGhlaWdodD00OCBhbHQ9VzNDIHNyYz0iaHR0cDovL3d3dy53My5vcmcv
SWNvbnMvdzNjX2hvbWUiIHdpZHRoPTcyPjwvYT4KKysgICA8cD48YSBocmVmPSJodHRwOi8vd3d3
LnczLm9yZy8iPjxpbWcgaGVpZ2h0PTQ4IGFsdD1XM0Mgd2lkdGg9NzI+PC9hPgorIAorICAgIDxo
MSBpZD0idGl0bGUiPlNlbGVjdG9yczwvaDE+CisgCitkaWZmIC0tZ2l0IGEvd2ViL3Rlc3RzL2pz
bGliLWF0dHItanF1ZXJ5LTIueC5odG1sIGIvd2ViL3Rlc3RzL2pzbGliLWF0dHItanF1ZXJ5LTIu
eC5odG1sCitpbmRleCBjYTZkMzM4Li4zN2ZlM2ZkIDEwMDY0NAorLS0tIGEvd2ViL3Rlc3RzL2pz
bGliLWF0dHItanF1ZXJ5LTIueC5odG1sCisrKysgYi93ZWIvdGVzdHMvanNsaWItYXR0ci1qcXVl
cnktMi54Lmh0bWwKK0BAIC0xLDcgKzEsNyBAQAorIDxodG1sPgorIDxoZWFkPgorIDxzY3JpcHQg
c3JjPSIuLi9odG1scnVubmVyLmpzIj48L3NjcmlwdD4KKy08c2NyaXB0IHNyYz0iaHR0cHM6Ly9h
amF4Lmdvb2dsZWFwaXMuY29tL2FqYXgvbGlicy9qcXVlcnkvMi4wLjMvanF1ZXJ5Lm1pbi5qcyI+
PC9zY3JpcHQ+CisrPHNjcmlwdCBzcmM9Ii4uL2FqYXgvbGlicy9qcXVlcnkvMi4wLjMvanF1ZXJ5
Lm1pbi5qcyI+PC9zY3JpcHQ+CisgPHNjcmlwdD4KKyB3aW5kb3cub25sb2FkID0gZnVuY3Rpb24o
KXsKKyBzdGFydFRlc3QoImpzbGliLWF0dHItanF1ZXJ5IiwgJ2FlYjNiMmMxJyk7CitAQCAtNTQs
NyArNTQsNyBAQCBlbmRUZXN0KCk7CisgPC9oZWFkPgorIDxib2R5PgorICAgPGRpdiBjbGFzcz0i
aGVhZCI+CistICAgPHA+PGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvIj48aW1nIGhlaWdodD00
OCBhbHQ9VzNDIHNyYz0iaHR0cDovL3d3dy53My5vcmcvSWNvbnMvdzNjX2hvbWUiIHdpZHRoPTcy
PjwvYT4KKysgICA8cD48YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy8iPjxpbWcgaGVpZ2h0PTQ4
IGFsdD1XM0Mgd2lkdGg9NzI+PC9hPgorIAorICAgIDxoMSBpZD0idGl0bGUiPlNlbGVjdG9yczwv
aDE+CisgCitkaWZmIC0tZ2l0IGEvd2ViL3Rlc3RzL2pzbGliLWF0dHItanF1ZXJ5Lmh0bWwgYi93
ZWIvdGVzdHMvanNsaWItYXR0ci1qcXVlcnkuaHRtbAoraW5kZXggNzBmOGZkYy4uMzYxMjkxYyAx
MDA2NDQKKy0tLSBhL3dlYi90ZXN0cy9qc2xpYi1hdHRyLWpxdWVyeS5odG1sCisrKysgYi93ZWIv
dGVzdHMvanNsaWItYXR0ci1qcXVlcnkuaHRtbAorQEAgLTEsNyArMSw3IEBACisgPGh0bWw+Cisg
PGhlYWQ+CisgPHNjcmlwdCBzcmM9Ii4uL2h0bWxydW5uZXIuanMiPjwvc2NyaXB0PgorLTxzY3Jp
cHQgc3JjPSJodHRwczovL2FqYXguZ29vZ2xlYXBpcy5jb20vYWpheC9saWJzL2pxdWVyeS8xLjEw
LjIvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+CisrPHNjcmlwdCBzcmM9Ii4uL2FqYXgvbGlicy9q
cXVlcnkvMS4xMC4yL2pxdWVyeS5taW4uanMiPjwvc2NyaXB0PgorIDxzY3JpcHQ+Cisgd2luZG93
Lm9ubG9hZCA9IGZ1bmN0aW9uKCl7Cisgc3RhcnRUZXN0KCJqc2xpYi1hdHRyLWpxdWVyeSIsICc2
NzVhMzU0ZicpOworQEAgLTU0LDcgKzU0LDcgQEAgZW5kVGVzdCgpOworIDwvaGVhZD4KKyA8Ym9k
eT4KKyAgIDxkaXYgY2xhc3M9ImhlYWQiPgorLSAgIDxwPjxhIGhyZWY9Imh0dHA6Ly93d3cudzMu
b3JnLyI+PGltZyBoZWlnaHQ9NDggYWx0PVczQyBzcmM9Imh0dHA6Ly93d3cudzMub3JnL0ljb25z
L3czY19ob21lIiB3aWR0aD03Mj48L2E+CisrICAgPHA+PGEgaHJlZj0iaHR0cDovL3d3dy53My5v
cmcvIj48aW1nIGhlaWdodD00OCBhbHQ9VzNDIHdpZHRoPTcyPjwvYT4KKyAKKyAgICA8aDEgaWQ9
InRpdGxlIj5TZWxlY3RvcnM8L2gxPgorIAorZGlmZiAtLWdpdCBhL3dlYi90ZXN0cy9qc2xpYi1h
dHRyLXByb3RvdHlwZS5odG1sIGIvd2ViL3Rlc3RzL2pzbGliLWF0dHItcHJvdG90eXBlLmh0bWwK
K2luZGV4IGMwZTgwMDYuLjM2YWIzMzUgMTAwNjQ0CistLS0gYS93ZWIvdGVzdHMvanNsaWItYXR0
ci1wcm90b3R5cGUuaHRtbAorKysrIGIvd2ViL3Rlc3RzL2pzbGliLWF0dHItcHJvdG90eXBlLmh0
bWwKK0BAIC0xLDcgKzEsNyBAQAorIDxodG1sPgorIDxoZWFkPgorIDxzY3JpcHQgc3JjPSIuLi9o
dG1scnVubmVyLmpzIj48L3NjcmlwdD4KKy08c2NyaXB0IHNyYz0iaHR0cHM6Ly9hamF4Lmdvb2ds
ZWFwaXMuY29tL2FqYXgvbGlicy9wcm90b3R5cGUvMS43LjAuMC9wcm90b3R5cGUuanMiPjwvc2Ny
aXB0PgorKzxzY3JpcHQgc3JjPSIuLi9hamF4L2xpYnMvcHJvdG90eXBlLzEuNy4wLjAvcHJvdG90
eXBlLmpzIj48L3NjcmlwdD4KKyA8c2NyaXB0PgorIHdpbmRvdy5vbmxvYWQgPSBmdW5jdGlvbigp
eworIHN0YXJ0VGVzdCgianNsaWItYXR0ci1wcm90b3R5cGUiLCAnNGZiOTNjNmEnKTsKK0BAIC01
NCw3ICs1NCw3IEBAIGVuZFRlc3QoKTsKKyA8L2hlYWQ+CisgPGJvZHk+CisgICA8ZGl2IGNsYXNz
PSJoZWFkIj4KKy0gICA8cD48YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy8iPjxpbWcgaGVpZ2h0
PTQ4IGFsdD1XM0Mgc3JjPSJodHRwOi8vd3d3LnczLm9yZy9JY29ucy93M2NfaG9tZSIgd2lkdGg9
NzI+PC9hPgorKyAgIDxwPjxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnLyI+PGltZyBoZWlnaHQ9
NDggYWx0PVczQyB3aWR0aD03Mj48L2E+CisgCisgICAgPGgxIGlkPSJ0aXRsZSI+U2VsZWN0b3Jz
PC9oMT4KKyAKK2RpZmYgLS1naXQgYS93ZWIvdGVzdHMvanNsaWItZXZlbnQtanF1ZXJ5LTIueC5o
dG1sIGIvd2ViL3Rlc3RzL2pzbGliLWV2ZW50LWpxdWVyeS0yLnguaHRtbAoraW5kZXggNGU1YWJl
Zi4uMTRkMDZkNSAxMDA2NDQKKy0tLSBhL3dlYi90ZXN0cy9qc2xpYi1ldmVudC1qcXVlcnktMi54
Lmh0bWwKKysrKyBiL3dlYi90ZXN0cy9qc2xpYi1ldmVudC1qcXVlcnktMi54Lmh0bWwKK0BAIC0x
LDcgKzEsNyBAQAorIDxodG1sPgorIDxoZWFkPgorIDxzY3JpcHQgc3JjPSIuLi9odG1scnVubmVy
LmpzIj48L3NjcmlwdD4KKy08c2NyaXB0IHNyYz0iaHR0cHM6Ly9hamF4Lmdvb2dsZWFwaXMuY29t
L2FqYXgvbGlicy9qcXVlcnkvMi4wLjMvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+CisrPHNjcmlw
dCBzcmM9Ii4uL2FqYXgvbGlicy9qcXVlcnkvMi4wLjMvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+
CisgPHNjcmlwdD4KKyB3aW5kb3cub25sb2FkID0gZnVuY3Rpb24oKXsKKyBzdGFydFRlc3QoImpz
bGliLWV2ZW50LWpxdWVyeSIsICcxNjFhNDQ3YycpOworQEAgLTQxLDcgKzQxLDcgQEAgZW5kVGVz
dCgpOworIDwvaGVhZD4KKyA8Ym9keT4KKyAgIDxkaXYgY2xhc3M9ImhlYWQiPgorLSAgIDxwPjxh
IGhyZWY9Imh0dHA6Ly93d3cudzMub3JnLyI+PGltZyBoZWlnaHQ9NDggYWx0PVczQyBzcmM9Imh0
dHA6Ly93d3cudzMub3JnL0ljb25zL3czY19ob21lIiB3aWR0aD03Mj48L2E+CisrICAgPHA+PGEg
aHJlZj0iaHR0cDovL3d3dy53My5vcmcvIj48aW1nIGhlaWdodD00OCBhbHQ9VzNDIHdpZHRoPTcy
PjwvYT4KKyAKKyAgICA8aDEgaWQ9InRpdGxlIj5TZWxlY3RvcnM8L2gxPgorIAorZGlmZiAtLWdp
dCBhL3dlYi90ZXN0cy9qc2xpYi1ldmVudC1qcXVlcnkuaHRtbCBiL3dlYi90ZXN0cy9qc2xpYi1l
dmVudC1qcXVlcnkuaHRtbAoraW5kZXggMjJhZTM5NS4uYTY2Y2MzYyAxMDA2NDQKKy0tLSBhL3dl
Yi90ZXN0cy9qc2xpYi1ldmVudC1qcXVlcnkuaHRtbAorKysrIGIvd2ViL3Rlc3RzL2pzbGliLWV2
ZW50LWpxdWVyeS5odG1sCitAQCAtMSw3ICsxLDcgQEAKKyA8aHRtbD4KKyA8aGVhZD4KKyA8c2Ny
aXB0IHNyYz0iLi4vaHRtbHJ1bm5lci5qcyI+PC9zY3JpcHQ+CistPHNjcmlwdCBzcmM9Imh0dHBz
Oi8vYWpheC5nb29nbGVhcGlzLmNvbS9hamF4L2xpYnMvanF1ZXJ5LzEuMTAuMi9qcXVlcnkubWlu
LmpzIj48L3NjcmlwdD4KKys8c2NyaXB0IHNyYz0iLi4vYWpheC9saWJzL2pxdWVyeS8xLjEwLjIv
anF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+CisgPHNjcmlwdD4KKyB3aW5kb3cub25sb2FkID0gZnVu
Y3Rpb24oKXsKKyBzdGFydFRlc3QoImpzbGliLWV2ZW50LWpxdWVyeSIsICc2OTBmODgxZScpOwor
QEAgLTQxLDcgKzQxLDcgQEAgZW5kVGVzdCgpOworIDwvaGVhZD4KKyA8Ym9keT4KKyAgIDxkaXYg
Y2xhc3M9ImhlYWQiPgorLSAgIDxwPjxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnLyI+PGltZyBo
ZWlnaHQ9NDggYWx0PVczQyBzcmM9Imh0dHA6Ly93d3cudzMub3JnL0ljb25zL3czY19ob21lIiB3
aWR0aD03Mj48L2E+CisrICAgPHA+PGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvIj48aW1nIGhl
aWdodD00OCBhbHQ9VzNDIHdpZHRoPTcyPjwvYT4KKyAKKyAgICA8aDEgaWQ9InRpdGxlIj5TZWxl
Y3RvcnM8L2gxPgorIAorZGlmZiAtLWdpdCBhL3dlYi90ZXN0cy9qc2xpYi1ldmVudC1wcm90b3R5
cGUuaHRtbCBiL3dlYi90ZXN0cy9qc2xpYi1ldmVudC1wcm90b3R5cGUuaHRtbAoraW5kZXggYzYw
MWE4OS4uMmFiZjhmZSAxMDA2NDQKKy0tLSBhL3dlYi90ZXN0cy9qc2xpYi1ldmVudC1wcm90b3R5
cGUuaHRtbAorKysrIGIvd2ViL3Rlc3RzL2pzbGliLWV2ZW50LXByb3RvdHlwZS5odG1sCitAQCAt
MSw3ICsxLDcgQEAKKyA8aHRtbD4KKyA8aGVhZD4KKyA8c2NyaXB0IHNyYz0iLi4vaHRtbHJ1bm5l
ci5qcyI+PC9zY3JpcHQ+CistPHNjcmlwdCBzcmM9Imh0dHBzOi8vYWpheC5nb29nbGVhcGlzLmNv
bS9hamF4L2xpYnMvcHJvdG90eXBlLzEuNy4wLjAvcHJvdG90eXBlLmpzIj48L3NjcmlwdD4KKys8
c2NyaXB0IHNyYz0iLi4vYWpheC9saWJzL3Byb3RvdHlwZS8xLjcuMC4wL3Byb3RvdHlwZS5qcyI+
PC9zY3JpcHQ+CisgPHNjcmlwdD4KKyB3aW5kb3cub25sb2FkID0gZnVuY3Rpb24oKXsKKyBzdGFy
dFRlc3QoImpzbGliLWV2ZW50LXByb3RvdHlwZSIsICcwM2I4NmQ5NicpOworQEAgLTQxLDcgKzQx
LDcgQEAgZW5kVGVzdCgpOworIDwvaGVhZD4KKyA8Ym9keT4KKyAgIDxkaXYgY2xhc3M9ImhlYWQi
PgorLSAgIDxwPjxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnLyI+PGltZyBoZWlnaHQ9NDggYWx0
PVczQyBzcmM9Imh0dHA6Ly93d3cudzMub3JnL0ljb25zL3czY19ob21lIiB3aWR0aD03Mj48L2E+
CisrICAgPHA+PGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvIj48aW1nIGhlaWdodD00OCBhbHQ9
VzNDIHdpZHRoPTcyPjwvYT4KKyAKKyAgICA8aDEgaWQ9InRpdGxlIj5TZWxlY3RvcnM8L2gxPgor
IAorZGlmZiAtLWdpdCBhL3dlYi90ZXN0cy9qc2xpYi1tb2RpZnktanF1ZXJ5LTIueC5odG1sIGIv
d2ViL3Rlc3RzL2pzbGliLW1vZGlmeS1qcXVlcnktMi54Lmh0bWwKK2luZGV4IGQwM2Q1NmIuLjIx
ZWY3NzMgMTAwNjQ0CistLS0gYS93ZWIvdGVzdHMvanNsaWItbW9kaWZ5LWpxdWVyeS0yLnguaHRt
bAorKysrIGIvd2ViL3Rlc3RzL2pzbGliLW1vZGlmeS1qcXVlcnktMi54Lmh0bWwKK0BAIC0xLDcg
KzEsNyBAQAorIDxodG1sPgorIDxoZWFkPgorIDxzY3JpcHQgc3JjPSIuLi9odG1scnVubmVyLmpz
Ij48L3NjcmlwdD4KKy08c2NyaXB0IHNyYz0iaHR0cHM6Ly9hamF4Lmdvb2dsZWFwaXMuY29tL2Fq
YXgvbGlicy9qcXVlcnkvMi4wLjMvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+CisrPHNjcmlwdCBz
cmM9Ii4uL2FqYXgvbGlicy9qcXVlcnkvMi4wLjMvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+Cisg
PHNjcmlwdD4KKyB3aW5kb3cub25sb2FkID0gZnVuY3Rpb24oKXsKKyBzdGFydFRlc3QoImpzbGli
LW1vZGlmeS1qcXVlcnkiLCAnZWQyYzdlZjInKTsKK0BAIC02NSw3ICs2NSw3IEBAIGVuZFRlc3Qo
KTsKKyA8L2hlYWQ+CisgPGJvZHk+CisgICA8ZGl2IGNsYXNzPSJoZWFkIj4KKy0gICA8cD48YSBo
cmVmPSJodHRwOi8vd3d3LnczLm9yZy8iPjxpbWcgaGVpZ2h0PTQ4IGFsdD1XM0Mgc3JjPSJodHRw
Oi8vd3d3LnczLm9yZy9JY29ucy93M2NfaG9tZSIgd2lkdGg9NzI+PC9hPgorKyAgIDxwPjxhIGhy
ZWY9Imh0dHA6Ly93d3cudzMub3JnLyI+PGltZyBoZWlnaHQ9NDggYWx0PVczQyB3aWR0aD03Mj48
L2E+CisgCisgICAgPGgxIGlkPSJ0aXRsZSI+U2VsZWN0b3JzPC9oMT4KKyAKK2RpZmYgLS1naXQg
YS93ZWIvdGVzdHMvanNsaWItbW9kaWZ5LWpxdWVyeS5odG1sIGIvd2ViL3Rlc3RzL2pzbGliLW1v
ZGlmeS1qcXVlcnkuaHRtbAoraW5kZXggMTJjNmEzNS4uYmNkNjc5NiAxMDA2NDQKKy0tLSBhL3dl
Yi90ZXN0cy9qc2xpYi1tb2RpZnktanF1ZXJ5Lmh0bWwKKysrKyBiL3dlYi90ZXN0cy9qc2xpYi1t
b2RpZnktanF1ZXJ5Lmh0bWwKK0BAIC0xLDcgKzEsNyBAQAorIDxodG1sPgorIDxoZWFkPgorIDxz
Y3JpcHQgc3JjPSIuLi9odG1scnVubmVyLmpzIj48L3NjcmlwdD4KKy08c2NyaXB0IHNyYz0iaHR0
cHM6Ly9hamF4Lmdvb2dsZWFwaXMuY29tL2FqYXgvbGlicy9qcXVlcnkvMS4xMC4yL2pxdWVyeS5t
aW4uanMiPjwvc2NyaXB0PgorKzxzY3JpcHQgc3JjPSIuLi9hamF4L2xpYnMvanF1ZXJ5LzEuMTAu
Mi9qcXVlcnkubWluLmpzIj48L3NjcmlwdD4KKyA8c2NyaXB0PgorIHdpbmRvdy5vbmxvYWQgPSBm
dW5jdGlvbigpeworIHN0YXJ0VGVzdCgianNsaWItbW9kaWZ5LWpxdWVyeSIsICc5NTBhYWFhMScp
OworQEAgLTY1LDcgKzY1LDcgQEAgZW5kVGVzdCgpOworIDwvaGVhZD4KKyA8Ym9keT4KKyAgIDxk
aXYgY2xhc3M9ImhlYWQiPgorLSAgIDxwPjxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnLyI+PGlt
ZyBoZWlnaHQ9NDggYWx0PVczQyBzcmM9Imh0dHA6Ly93d3cudzMub3JnL0ljb25zL3czY19ob21l
IiB3aWR0aD03Mj48L2E+CisrICAgPHA+PGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvIj48aW1n
IGhlaWdodD00OCBhbHQ9VzNDIHdpZHRoPTcyPjwvYT4KKyAKKyAgICA8aDEgaWQ9InRpdGxlIj5T
ZWxlY3RvcnM8L2gxPgorIAorZGlmZiAtLWdpdCBhL3dlYi90ZXN0cy9qc2xpYi1tb2RpZnktcHJv
dG90eXBlLmh0bWwgYi93ZWIvdGVzdHMvanNsaWItbW9kaWZ5LXByb3RvdHlwZS5odG1sCitpbmRl
eCBlNWUyYTRkLi4wMTMzNjE4IDEwMDY0NAorLS0tIGEvd2ViL3Rlc3RzL2pzbGliLW1vZGlmeS1w
cm90b3R5cGUuaHRtbAorKysrIGIvd2ViL3Rlc3RzL2pzbGliLW1vZGlmeS1wcm90b3R5cGUuaHRt
bAorQEAgLTEsNyArMSw3IEBACisgPGh0bWw+CisgPGhlYWQ+CisgPHNjcmlwdCBzcmM9Ii4uL2h0
bWxydW5uZXIuanMiPjwvc2NyaXB0PgorLTxzY3JpcHQgc3JjPSJodHRwczovL2FqYXguZ29vZ2xl
YXBpcy5jb20vYWpheC9saWJzL3Byb3RvdHlwZS8xLjcuMC4wL3Byb3RvdHlwZS5qcyI+PC9zY3Jp
cHQ+CisrPHNjcmlwdCBzcmM9Ii4uL2FqYXgvbGlicy9wcm90b3R5cGUvMS43LjAuMC9wcm90b3R5
cGUuanMiPjwvc2NyaXB0PgorIDxzY3JpcHQ+Cisgd2luZG93Lm9ubG9hZCA9IGZ1bmN0aW9uKCl7
Cisgc3RhcnRUZXN0KCJqc2xpYi1tb2RpZnktcHJvdG90eXBlIiwgJzY2OTNiM2E1Jyk7CitAQCAt
NjUsNyArNjUsNyBAQCBlbmRUZXN0KCk7CisgPC9oZWFkPgorIDxib2R5PgorICAgPGRpdiBjbGFz
cz0iaGVhZCI+CistICAgPHA+PGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvIj48aW1nIGhlaWdo
dD00OCBhbHQ9VzNDIHNyYz0iaHR0cDovL3d3dy53My5vcmcvSWNvbnMvdzNjX2hvbWUiIHdpZHRo
PTcyPjwvYT4KKysgICA8cD48YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy8iPjxpbWcgaGVpZ2h0
PTQ4IGFsdD1XM0Mgd2lkdGg9NzI+PC9hPgorIAorICAgIDxoMSBpZD0idGl0bGUiPlNlbGVjdG9y
czwvaDE+CisgCitkaWZmIC0tZ2l0IGEvd2ViL3Rlc3RzL2pzbGliLXN0eWxlLWpxdWVyeS0yLngu
aHRtbCBiL3dlYi90ZXN0cy9qc2xpYi1zdHlsZS1qcXVlcnktMi54Lmh0bWwKK2luZGV4IGNlNDc3
YjguLjg4MDBjNjMgMTAwNjQ0CistLS0gYS93ZWIvdGVzdHMvanNsaWItc3R5bGUtanF1ZXJ5LTIu
eC5odG1sCisrKysgYi93ZWIvdGVzdHMvanNsaWItc3R5bGUtanF1ZXJ5LTIueC5odG1sCitAQCAt
MSw3ICsxLDcgQEAKKyA8aHRtbD4KKyA8aGVhZD4KKyA8c2NyaXB0IHNyYz0iLi4vaHRtbHJ1bm5l
ci5qcyI+PC9zY3JpcHQ+CistPHNjcmlwdCBzcmM9Imh0dHBzOi8vYWpheC5nb29nbGVhcGlzLmNv
bS9hamF4L2xpYnMvanF1ZXJ5LzIuMC4zL2pxdWVyeS5taW4uanMiPjwvc2NyaXB0PgorKzxzY3Jp
cHQgc3JjPSIuLi9hamF4L2xpYnMvanF1ZXJ5LzIuMC4zL2pxdWVyeS5taW4uanMiPjwvc2NyaXB0
PgorIDxzY3JpcHQ+Cisgd2luZG93Lm9ubG9hZCA9IGZ1bmN0aW9uKCl7Cisgc3RhcnRUZXN0KCJq
c2xpYi1zdHlsZS1qcXVlcnkiLCAnMDhiYzY5ODgnKTsKK0BAIC02Myw3ICs2Myw3IEBAIGVuZFRl
c3QoKTsKKyA8L2hlYWQ+CisgPGJvZHk+CisgICA8ZGl2IGNsYXNzPSJoZWFkIj4KKy0gICA8cD48
YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy8iPjxpbWcgaGVpZ2h0PTQ4IGFsdD1XM0Mgc3JjPSJo
dHRwOi8vd3d3LnczLm9yZy9JY29ucy93M2NfaG9tZSIgd2lkdGg9NzI+PC9hPgorKyAgIDxwPjxh
IGhyZWY9Imh0dHA6Ly93d3cudzMub3JnLyI+PGltZyBoZWlnaHQ9NDggYWx0PVczQyB3aWR0aD03
Mj48L2E+CisgCisgICAgPGgxIGlkPSJ0aXRsZSI+U2VsZWN0b3JzPC9oMT4KKyAKK2RpZmYgLS1n
aXQgYS93ZWIvdGVzdHMvanNsaWItc3R5bGUtanF1ZXJ5Lmh0bWwgYi93ZWIvdGVzdHMvanNsaWIt
c3R5bGUtanF1ZXJ5Lmh0bWwKK2luZGV4IDM1Njk3OTYuLjQwZWQ0ZjcgMTAwNjQ0CistLS0gYS93
ZWIvdGVzdHMvanNsaWItc3R5bGUtanF1ZXJ5Lmh0bWwKKysrKyBiL3dlYi90ZXN0cy9qc2xpYi1z
dHlsZS1qcXVlcnkuaHRtbAorQEAgLTEsNyArMSw3IEBACisgPGh0bWw+CisgPGhlYWQ+CisgPHNj
cmlwdCBzcmM9Ii4uL2h0bWxydW5uZXIuanMiPjwvc2NyaXB0PgorLTxzY3JpcHQgc3JjPSJodHRw
czovL2FqYXguZ29vZ2xlYXBpcy5jb20vYWpheC9saWJzL2pxdWVyeS8xLjEwLjIvanF1ZXJ5Lm1p
bi5qcyI+PC9zY3JpcHQ+CisrPHNjcmlwdCBzcmM9Ii4uL2FqYXgvbGlicy9qcXVlcnkvMS4xMC4y
L2pxdWVyeS5taW4uanMiPjwvc2NyaXB0PgorIDxzY3JpcHQ+Cisgd2luZG93Lm9ubG9hZCA9IGZ1
bmN0aW9uKCl7Cisgc3RhcnRUZXN0KCJqc2xpYi1zdHlsZS1qcXVlcnkiLCAnYTgwMzc5MGEnKTsK
K0BAIC02Myw3ICs2Myw3IEBAIGVuZFRlc3QoKTsKKyA8L2hlYWQ+CisgPGJvZHk+CisgICA8ZGl2
IGNsYXNzPSJoZWFkIj4KKy0gICA8cD48YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy8iPjxpbWcg
aGVpZ2h0PTQ4IGFsdD1XM0Mgc3JjPSJodHRwOi8vd3d3LnczLm9yZy9JY29ucy93M2NfaG9tZSIg
d2lkdGg9NzI+PC9hPgorKyAgIDxwPjxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnLyI+PGltZyBo
ZWlnaHQ9NDggYWx0PVczQyB3aWR0aD03Mj48L2E+CisgCisgICAgPGgxIGlkPSJ0aXRsZSI+U2Vs
ZWN0b3JzPC9oMT4KKyAKK2RpZmYgLS1naXQgYS93ZWIvdGVzdHMvanNsaWItc3R5bGUtcHJvdG90
eXBlLmh0bWwgYi93ZWIvdGVzdHMvanNsaWItc3R5bGUtcHJvdG90eXBlLmh0bWwKK2luZGV4IDI3
NjI0MDEuLmM0MGZjNzEgMTAwNjQ0CistLS0gYS93ZWIvdGVzdHMvanNsaWItc3R5bGUtcHJvdG90
eXBlLmh0bWwKKysrKyBiL3dlYi90ZXN0cy9qc2xpYi1zdHlsZS1wcm90b3R5cGUuaHRtbAorQEAg
LTEsNyArMSw3IEBACisgPGh0bWw+CisgPGhlYWQ+CisgPHNjcmlwdCBzcmM9Ii4uL2h0bWxydW5u
ZXIuanMiPjwvc2NyaXB0PgorLTxzY3JpcHQgc3JjPSJodHRwczovL2FqYXguZ29vZ2xlYXBpcy5j
b20vYWpheC9saWJzL3Byb3RvdHlwZS8xLjcuMC4wL3Byb3RvdHlwZS5qcyI+PC9zY3JpcHQ+Cisr
PHNjcmlwdCBzcmM9Ii4uL2FqYXgvbGlicy9wcm90b3R5cGUvMS43LjAuMC9wcm90b3R5cGUuanMi
Pjwvc2NyaXB0PgorIDxzY3JpcHQ+Cisgd2luZG93Lm9ubG9hZCA9IGZ1bmN0aW9uKCl7Cisgc3Rh
cnRUZXN0KCJqc2xpYi1zdHlsZS1wcm90b3R5cGUiLCAnYzQxMTc0ZjAnKTsKK0BAIC02NCw3ICs2
NCw3IEBAIGVuZFRlc3QoKTsKKyA8L2hlYWQ+CisgPGJvZHk+CisgICA8ZGl2IGNsYXNzPSJoZWFk
Ij4KKy0gICA8cD48YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy8iPjxpbWcgaGVpZ2h0PTQ4IGFs
dD1XM0Mgc3JjPSJodHRwOi8vd3d3LnczLm9yZy9JY29ucy93M2NfaG9tZSIgd2lkdGg9NzI+PC9h
PgorKyAgIDxwPjxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnLyI+PGltZyBoZWlnaHQ9NDggYWx0
PVczQyB3aWR0aD03Mj48L2E+CisgCisgICAgPGgxIGlkPSJ0aXRsZSI+U2VsZWN0b3JzPC9oMT4K
KyAKK2RpZmYgLS1naXQgYS93ZWIvdGVzdHMvanNsaWItdHJhdmVyc2UtanF1ZXJ5LTIueC5odG1s
IGIvd2ViL3Rlc3RzL2pzbGliLXRyYXZlcnNlLWpxdWVyeS0yLnguaHRtbAoraW5kZXggYWZjNWIz
ZC4uYzBlMmFlOCAxMDA2NDQKKy0tLSBhL3dlYi90ZXN0cy9qc2xpYi10cmF2ZXJzZS1qcXVlcnkt
Mi54Lmh0bWwKKysrKyBiL3dlYi90ZXN0cy9qc2xpYi10cmF2ZXJzZS1qcXVlcnktMi54Lmh0bWwK
K0BAIC0xLDcgKzEsNyBAQAorIDxodG1sPgorIDxoZWFkPgorIDxzY3JpcHQgc3JjPSIuLi9odG1s
cnVubmVyLmpzIj48L3NjcmlwdD4KKy08c2NyaXB0IHNyYz0iaHR0cHM6Ly9hamF4Lmdvb2dsZWFw
aXMuY29tL2FqYXgvbGlicy9qcXVlcnkvMi4wLjMvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+Cisr
PHNjcmlwdCBzcmM9Ii4uL2FqYXgvbGlicy9qcXVlcnkvMi4wLjMvanF1ZXJ5Lm1pbi5qcyI+PC9z
Y3JpcHQ+CisgPHNjcmlwdD4KKyB3aW5kb3cub25sb2FkID0gZnVuY3Rpb24oKXsKKyBzdGFydFRl
c3QoImpzbGliLXRyYXZlcnNlLWpxdWVyeSIsICc2NmU2OTBjMCcpOworQEAgLTY1LDcgKzY1LDcg
QEAgZW5kVGVzdCgpOworIDwvaGVhZD4KKyA8Ym9keT4KKyAgIDxkaXYgY2xhc3M9ImhlYWQiPgor
LSAgIDxwPjxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnLyI+PGltZyBoZWlnaHQ9NDggYWx0PVcz
QyBzcmM9Imh0dHA6Ly93d3cudzMub3JnL0ljb25zL3czY19ob21lIiB3aWR0aD03Mj48L2E+Cisr
ICAgPHA+PGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvIj48aW1nIGhlaWdodD00OCBhbHQ9VzND
IHdpZHRoPTcyPjwvYT4KKyAKKyAgICA8aDEgaWQ9InRpdGxlIj5TZWxlY3RvcnM8L2gxPgorIAor
ZGlmZiAtLWdpdCBhL3dlYi90ZXN0cy9qc2xpYi10cmF2ZXJzZS1qcXVlcnkuaHRtbCBiL3dlYi90
ZXN0cy9qc2xpYi10cmF2ZXJzZS1qcXVlcnkuaHRtbAoraW5kZXggOTEwZTJlNi4uYjQxNjE5ZiAx
MDA2NDQKKy0tLSBhL3dlYi90ZXN0cy9qc2xpYi10cmF2ZXJzZS1qcXVlcnkuaHRtbAorKysrIGIv
d2ViL3Rlc3RzL2pzbGliLXRyYXZlcnNlLWpxdWVyeS5odG1sCitAQCAtMSw3ICsxLDcgQEAKKyA8
aHRtbD4KKyA8aGVhZD4KKyA8c2NyaXB0IHNyYz0iLi4vaHRtbHJ1bm5lci5qcyI+PC9zY3JpcHQ+
CistPHNjcmlwdCBzcmM9Imh0dHBzOi8vYWpheC5nb29nbGVhcGlzLmNvbS9hamF4L2xpYnMvanF1
ZXJ5LzEuMTAuMi9qcXVlcnkubWluLmpzIj48L3NjcmlwdD4KKys8c2NyaXB0IHNyYz0iLi4vYWph
eC9saWJzL2pxdWVyeS8xLjEwLjIvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+CisgPHNjcmlwdD4K
KyB3aW5kb3cub25sb2FkID0gZnVuY3Rpb24oKXsKKyBzdGFydFRlc3QoImpzbGliLXRyYXZlcnNl
LWpxdWVyeSIsICdiYzViMThmMycpOworQEAgLTY1LDcgKzY1LDcgQEAgZW5kVGVzdCgpOworIDwv
aGVhZD4KKyA8Ym9keT4KKyAgIDxkaXYgY2xhc3M9ImhlYWQiPgorLSAgIDxwPjxhIGhyZWY9Imh0
dHA6Ly93d3cudzMub3JnLyI+PGltZyBoZWlnaHQ9NDggYWx0PVczQyBzcmM9Imh0dHA6Ly93d3cu
dzMub3JnL0ljb25zL3czY19ob21lIiB3aWR0aD03Mj48L2E+CisrICAgPHA+PGEgaHJlZj0iaHR0
cDovL3d3dy53My5vcmcvIj48aW1nIGhlaWdodD00OCBhbHQ9VzNDIHdpZHRoPTcyPjwvYT4KKyAK
KyAgICA8aDEgaWQ9InRpdGxlIj5TZWxlY3RvcnM8L2gxPgorIAorZGlmZiAtLWdpdCBhL3dlYi90
ZXN0cy9qc2xpYi10cmF2ZXJzZS1wcm90b3R5cGUuaHRtbCBiL3dlYi90ZXN0cy9qc2xpYi10cmF2
ZXJzZS1wcm90b3R5cGUuaHRtbAoraW5kZXggMzdjMjhkNi4uZTQyY2Q4ZiAxMDA2NDQKKy0tLSBh
L3dlYi90ZXN0cy9qc2xpYi10cmF2ZXJzZS1wcm90b3R5cGUuaHRtbAorKysrIGIvd2ViL3Rlc3Rz
L2pzbGliLXRyYXZlcnNlLXByb3RvdHlwZS5odG1sCitAQCAtMSw3ICsxLDcgQEAKKyA8aHRtbD4K
KyA8aGVhZD4KKyA8c2NyaXB0IHNyYz0iLi4vaHRtbHJ1bm5lci5qcyI+PC9zY3JpcHQ+CistPHNj
cmlwdCBzcmM9Imh0dHBzOi8vYWpheC5nb29nbGVhcGlzLmNvbS9hamF4L2xpYnMvcHJvdG90eXBl
LzEuNy4wLjAvcHJvdG90eXBlLmpzIj48L3NjcmlwdD4KKys8c2NyaXB0IHNyYz0iLi4vYWpheC9s
aWJzL3Byb3RvdHlwZS8xLjcuMC4wL3Byb3RvdHlwZS5qcyI+PC9zY3JpcHQ+CisgPHNjcmlwdD4K
KyB3aW5kb3cub25sb2FkID0gZnVuY3Rpb24oKXsKKyBzdGFydFRlc3QoImpzbGliLXRyYXZlcnNl
LXByb3RvdHlwZSIsICdkNDZkM2VhYicpOworQEAgLTY1LDcgKzY1LDcgQEAgZW5kVGVzdCgpOwor
IDwvaGVhZD4KKyA8Ym9keT4KKyAgIDxkaXYgY2xhc3M9ImhlYWQiPgorLSAgIDxwPjxhIGhyZWY9
Imh0dHA6Ly93d3cudzMub3JnLyI+PGltZyBoZWlnaHQ9NDggYWx0PVczQyBzcmM9Imh0dHA6Ly93
d3cudzMub3JnL0ljb25zL3czY19ob21lIiB3aWR0aD03Mj48L2E+CisrICAgPHA+PGEgaHJlZj0i
aHR0cDovL3d3dy53My5vcmcvIj48aW1nIGhlaWdodD00OCBhbHQ9VzNDIHdpZHRoPTcyPjwvYT4K
KyAKKyAgICA8aDEgaWQ9InRpdGxlIj5TZWxlY3RvcnM8L2gxPgorIAorZGlmZiAtLWdpdCBhL3dl
Yi93ZWJydW5uZXIuanMgYi93ZWIvd2VicnVubmVyLmpzCitpbmRleCA2M2Q3NzdiLi5iZjQzZTI0
IDEwMDY0NAorLS0tIGEvd2ViL3dlYnJ1bm5lci5qcworKysrIGIvd2ViL3dlYnJ1bm5lci5qcwor
QEAgLTE1Niw2ICsxNTYsNyBAQAorIAorIAkJCS8vIE1ha2UgU3VtCisgCQkJcmVzdWx0cy5zdW0g
PSAwOworKwkJCXJlc3VsdHMudGltZXMgPSB0aW1lczsKKyAKKyAJCQlmb3IgKCB2YXIgaSA9IDA7
IGkgPCBudW07IGkrKyApCisgCQkJCXJlc3VsdHMuc3VtICs9IHRpbWVzW2ldOworQEAgLTI3MSw2
ICsyNzIsNyBAQAorIAkJCW51bVRlc3RzID0gTnVtYmVyKG1bMV0pOworIAl9CisgCisrCXZhciBj
dXJyZW50U3VpdGVOYW1lID0gbnVsbDsKKyAJalF1ZXJ5KGZ1bmN0aW9uKCl7CisgCQl2YXIgaWQg
PSBzZWFyY2gubWF0Y2goL2lkPShbXGQsXSspLyk7CisgCitAQCAtMjgyLDYgKzI4NCw3IEBACisg
CQl2YXIgY2F0ID0gZmlsdGVyLnRvU3RyaW5nKCkuc2xpY2UoMSwtMik7CisgCisgCQlpZiAoIGNh
dG5hbWVzW2NhdF0gKSB7CisrCQkJY3VycmVudFN1aXRlTmFtZSA9IGNhdG5hbWVzW2NhdF07Cisg
CQkJJCgiI292ZXJ2aWV3IHNwYW46Zmlyc3QiKS5odG1sKCBjYXRuYW1lc1tjYXRdICk7CisgCisg
CQkJaWYgKCBjYXRuYW1lc1tjYXRdLmxlbmd0aCA+IDIyICkgeworQEAgLTM1OSw2ICszNjIsMTMg
QEAKKyAJCQkkKCIjb3ZlcnZpZXcgaW5wdXQiKS5yZW1vdmUoKTsKKyAJCQl1cGRhdGVUaW1lYmFy
KCk7CisgCisrCQkJdmFyIG1lYW4gPSAocnVuU3R5bGUgPT09ICJydW5zL3MiID8gTWF0aC5wb3co
TWF0aC5FLCBtYXhUb3RhbCAvIG1heFRvdGFsTnVtKSA6IG1heFRvdGFsKTsKKysJCQl2YXIgcmVz
dWx0c0RpY3QgPSB7IkRyb21hZW8iOiB7InRlc3RzIjoge319fTsKKysJCQlyZXN1bHRzRGljdFsi
RHJvbWFlbyJdWyJ0ZXN0cyJdW2N1cnJlbnRTdWl0ZU5hbWVdID0geyJtZXRyaWNzIjogeyJSdW5z
IjogeyJjdXJyZW50IjogW21lYW5dfX0sICJ0ZXN0cyI6IHN1YlRlc3RzfTsKKysJCQl2YXIgcmVz
dWx0cyA9IEpTT04uc3RyaW5naWZ5KHJlc3VsdHNEaWN0KTsKKysJCQl3aW5kb3cud2ViZHJpdmVy
X3Jlc3VsdHMgPSByZXN1bHRzOworKwkJCXJldHVybjsKKysKKyAJCQlpZiAoIHdpbmRvdy5saW1p
dFNlYXJjaCApIHsKKyAJCQkJdmFyIHN1bW1hcnkgPSAocnVuU3R5bGUgPT09ICJydW5zL3MiID8g
TWF0aC5wb3coTWF0aC5FLCBtYXhUb3RhbCAvIG1heFRvdGFsTnVtKSA6IG1heFRvdGFsKS50b0Zp
eGVkKDIpOworIAorQEAgLTQyMSw5ICs0NDMsNyBAQAorIAkJCQl9CisgCQkJfSk7CisgCistCQlp
ZiAoIHdpbmRvdy5saW1pdFNlYXJjaCApIHsKKy0JCQkkKCIjcGF1c2UiKS5jbGljaygpOworLQkJ
fQorKwkJJCgiI3BhdXNlIikuY2xpY2soKTsKKyAJfQorIAorIAlmdW5jdGlvbiBpbml0VGVzdChj
dXJJRCl7CitAQCAtNjczLDggKzY5MywxOCBAQAorIAorIAkJJCgiI3RpbWViYXIiKS53aWR0aCgo
dyA8IDEgPyAxIDogdykgKyAiJSIpOworIAl9CistCQorKworKwl2YXIgc3ViVGVzdHMgPSB7fTsK
KyAJZnVuY3Rpb24gbG9nVGVzdChkYXRhKXsKKysJCXZhciBzdWJUZXN0TmFtZSA9IHRlc3RzW2Rh
dGEuY3VySURdLm5hbWU7IC8vIGUuZy4gRE9NIEF0dHJpYnV0ZXMKKysJCWlmICghc3ViVGVzdHNb
c3ViVGVzdE5hbWVdKSB7CisrCQkJc3ViVGVzdHNbc3ViVGVzdE5hbWVdID0geworKwkJCQkibWV0
cmljcyI6IHsiUnVucyI6IHt9fSwKKysJCQkJInRlc3RzIjoge30KKysJCQl9CisrCQl9CisrCQlz
dWJUZXN0c1tzdWJUZXN0TmFtZV1bInRlc3RzIl1bZGF0YS5uYW1lXSA9IHsibWV0cmljcyI6IHsi
UnVucyI6IHsiY3VycmVudCI6IFtkYXRhLnRpbWVzXX19fTsKKysKKyAJCS8vIEtlZXAgYSBydW5u
aW5nIHN1bW1hcnkgZ29pbmcKKyAJCWRhdGEubWVhbiA9IHBhcnNlRmxvYXQoZGF0YS5tZWFuKTsK
KyAJCXZhciBtZWFuID0gKHJ1blN0eWxlID09PSAicnVucy9zIiA/IE1hdGgubG9nKGRhdGEubWVh
bikgOiBkYXRhLm1lYW4pOworQEAgLTcxMSw2ICs3NDEsOCBAQAorIAkJCXBlciArICIlOyc+IiAr
IChwZXIgPj0gMTAwID8gIjxzcGFuPiIgKyBtZWFuLnRvRml4ZWQoMikgKyBydW5TdHlsZSArICI8
L3NwYW4+IiA6ICIiKSArICI8L2Rpdj48L2Rpdj4iKTsKKyAKKyAJCWlmICggcGVyID49IDEwMCAm
JiB0ZXN0U3VtbWFyeVtkYXRhLmN1cklEXSA+IDAgKSB7CisrCQkJdmFyIHN1YlRlc3ROYW1lID0g
dGVzdHNbZGF0YS5jdXJJRF0ubmFtZTsgLy8gZS5nLiBET00gQXR0cmlidXRlcworKwkJCXN1YlRl
c3RzW3N1YlRlc3ROYW1lXVsibWV0cmljcyJdWyJSdW5zIl1bImN1cnJlbnQiXSA9IFttZWFuXTsK
KyAJCQl0ZXN0RWxlbXNbZGF0YS5jdXJJRF0ucGFyZW50KCkuYWRkQ2xhc3MoImRvbmUiKTsKKyAJ
CX0KKyAJfQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS93ZWJkcml2ZXJfYmVu
Y2htYXJrX3J1bm5lci9kYXRhL3BhdGNoZXMvSlNCZW5jaC13ZC5wYXRjaCBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvd2ViZHJpdmVyX2JlbmNobWFya19ydW5uZXIvZGF0YS9wYXRjaGVzL0pTQmVu
Y2gtd2QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWJkNTQ2NDU1NzViNGYxMjJkY2Y5NDBjNWUwN2VhNjIw
MjdlY2UzNgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvd2ViZHJp
dmVyX2JlbmNobWFya19ydW5uZXIvZGF0YS9wYXRjaGVzL0pTQmVuY2gtd2QucGF0Y2gKQEAgLTAs
MCArMSw2NyBAQAorZGlmZiAtLWdpdCBhL2hhcm5lc3MuanMgYi9oYXJuZXNzLmpzCitpbmRleCA0
YjlkMjY5Li44NzZmZGRkIDEwMDY0NAorLS0tIGEvaGFybmVzcy5qcworKysrIGIvaGFybmVzcy5q
cworQEAgLTEwNCw2ICsxMDQsNyBAQAorICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICAgfQorICAgICAgICAgfSBjYXRjaCAoZXgpIHt9CisrICAgICAgICBzZXRUaW1lb3V0KHJ1
bkJlbmNobWFyaywgMjAwKTsKKyAgICAgICAgIGdvYi5vbmNsaWNrID0gZnVuY3Rpb24oKSB7Cisg
ICAgICAgICAgICAgZ29iLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CisgICAgICAgICAgICAgc2V0
VGltZW91dChydW5CZW5jaG1hcmssIDIwMCk7CitAQCAtMjA3LDYgKzIwOCw4IEBACisgICAgICAg
ICB2YXIgc3BjID0gIlx1MDBhMFx1MDBhMCI7CisgICAgICAgICB2YXIgc3BjMiA9IHNwYyArIHNw
YzsKKyAKKysgICAgICAgIHZhciB0ZXN0cyA9IHt9OworKworICAgICAgICAgLy8gY2FsY3VsYXRl
IGFsbCB0aGUgcmVhbCByZXN1bHRzCisgICAgICAgICBmb3IgKHZhciBiID0gMDsgYiA8IGJlbmNo
bWFya3MubGVuZ3RoOyBiKyspIHsKKyAgICAgICAgICAgICB2YXIgYmVuY2htYXJrID0gYmVuY2ht
YXJrc1tiXTsKK0BAIC0yMjEsNiArMjI0LDkgQEAKKyAgICAgICAgICAgICAgICAgdmFyIGJtcmVz
dWx0cyA9IHJlc3VsdHNbYmVuY2htYXJrXVttb2RlXS5zbGljZSgta2VlcFJ1bnMpOworICAgICAg
ICAgICAgICAgICBpZiAoYm1yZXN1bHRzLmxlbmd0aCA9PSAwKSBjb250aW51ZTsKKyAKKysgICAg
ICAgICAgICAgICAgaWYgKHByKQorKyAgICAgICAgICAgICAgICAgICAgdGVzdHNbYmVuY2htYXJr
XSA9IHsnbWV0cmljcyc6IHsnVGltZSc6IHsnY3VycmVudCc6IGJtcmVzdWx0cy5tYXAoZnVuY3Rp
b24gKHZhbHVlKSB7IHJldHVybiB2YWx1ZSB8fCAxOyB9KX19fTsKKysKKyAgICAgICAgICAgICAg
ICAgLy8gZ2V0IHRoZSByYXcgcmVzdWx0cworICAgICAgICAgICAgICAgICB2YXIgcnIgPSBzcGMy
ICsgbW9kZSArICI6IFsiOworICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJt
cmVzdWx0cy5sZW5ndGg7IGkrKykgeworQEAgLTI3Miw2ICsyNzgsMTEgQEAKKyAgICAgICAgICAg
ICBwdG90YWxzLnB1c2goc3BjICsgY3VyUnVuICsgIiBydW5zIik7CisgICAgICAgICBwdG90YWxz
LnB1c2goIiIpOworIAorKyAgICAgICAgaWYgKHByKSB7CisrICAgICAgICAgICAgdmFyIGpzb25S
ZXN1bHRzID0gSlNPTi5zdHJpbmdpZnkoeyJKU0JlbmNoIjogeyJtZXRyaWNzIjogeyJUaW1lIjog
WyJHZW9tZXRyaWMiXX0sICJ0ZXN0cyI6IHRlc3RzfX0pOworKyAgICAgICAgICAgIHdpbmRvdy53
ZWJkcml2ZXJfcmVzdWx0cyA9IGpzb25SZXN1bHRzOworKyAgICAgICAgfQorKworICAgICAgICAg
Ly8gaWYgdGhlcmUgYXJlIGVycm9ycywgbWFyayB0aG9zZSB0b28KKyAgICAgICAgIGlmICgiZXJy
b3JzIiBpbiByZXN1bHRzKSB7CisgICAgICAgICAgICAgcHRvdGFscy5wdXNoKCJFUlJPUlM6Iik7
CitkaWZmIC0tZ2l0IGEvaW5kZXguaHRtbCBiL2luZGV4Lmh0bWwKK2luZGV4IDFmMWRjNTYuLjRi
YjM2NjMgMTAwNjQ0CistLS0gYS9pbmRleC5odG1sCisrKysgYi9pbmRleC5odG1sCitAQCAtMiw3
ICsyLDcgQEAKKyA8aHRtbD4KKyAgICAgPGhlYWQ+CisgICAgICAgICA8dGl0bGU+SlNCZW5jaCBC
cm93c2VyIENoZWNrPC90aXRsZT4KKy0gICAgICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2Ny
aXB0IiBzcmM9Imh0dHA6Ly9hamF4Lmdvb2dsZWFwaXMuY29tL2FqYXgvbGlicy9qcXVlcnkvMS43
LjIvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+CisrICAgICAgICA8c2NyaXB0IHR5cGU9InRleHQv
amF2YXNjcmlwdCIgc3JjPSJqcXVlcnkubWluLmpzIj48L3NjcmlwdD4KKyAgICAgICAgIDxzY3Jp
cHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImJyb3dzZXJjaGVjay5qcyI+PC9zY3JpcHQ+
CisgICAgIDwvaGVhZD4KKyAgICAgPGJvZHk+CitkaWZmIC0tZ2l0IGEvanF1ZXJ5Lm1pbi5qcyBi
L2pxdWVyeS5taW4uanMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4xNmFk
MDZjCistLS0gL2Rldi9udWxsCisrKysgYi9qcXVlcnkubWluLmpzCitAQCAtMCwwICsxLDQgQEAK
KysvKiEgalF1ZXJ5IHYxLjcuMiBqcXVlcnkuY29tIHwganF1ZXJ5Lm9yZy9saWNlbnNlICovCisr
KGZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gY3koYSl7cmV0dXJuIGYuaXNXaW5kb3coYSk/YTphLm5v
ZGVUeXBlPT09OT9hLmRlZmF1bHRWaWV3fHxhLnBhcmVudFdpbmRvdzohMX1mdW5jdGlvbiBjdShh
KXtpZighY2pbYV0pe3ZhciBiPWMuYm9keSxkPWYoIjwiK2ErIj4iKS5hcHBlbmRUbyhiKSxlPWQu
Y3NzKCJkaXNwbGF5Iik7ZC5yZW1vdmUoKTtpZihlPT09Im5vbmUifHxlPT09IiIpe2NrfHwoY2s9
Yy5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKSxjay5mcmFtZUJvcmRlcj1jay53aWR0aD1jay5oZWln
aHQ9MCksYi5hcHBlbmRDaGlsZChjayk7aWYoIWNsfHwhY2suY3JlYXRlRWxlbWVudCljbD0oY2su
Y29udGVudFdpbmRvd3x8Y2suY29udGVudERvY3VtZW50KS5kb2N1bWVudCxjbC53cml0ZSgoZi5z
dXBwb3J0LmJveE1vZGVsPyI8IWRvY3R5cGUgaHRtbD4iOiIiKSsiPGh0bWw+PGJvZHk+IiksY2wu
Y2xvc2UoKTtkPWNsLmNyZWF0ZUVsZW1lbnQoYSksY2wuYm9keS5hcHBlbmRDaGlsZChkKSxlPWYu
Y3NzKGQsImRpc3BsYXkiKSxiLnJlbW92ZUNoaWxkKGNrKX1jalthXT1lfXJldHVybiBjalthXX1m
dW5jdGlvbiBjdChhLGIpe3ZhciBjPXt9O2YuZWFjaChjcC5jb25jYXQuYXBwbHkoW10sY3Auc2xp
Y2UoMCxiKSksZnVuY3Rpb24oKXtjW3RoaXNdPWF9KTtyZXR1cm4gY31mdW5jdGlvbiBjcygpe2Nx
PWJ9ZnVuY3Rpb24gY3IoKXtzZXRUaW1lb3V0KGNzLDApO3JldHVybiBjcT1mLm5vdygpfWZ1bmN0
aW9uIGNpKCl7dHJ5e3JldHVybiBuZXcgYS5BY3RpdmVYT2JqZWN0KCJNaWNyb3NvZnQuWE1MSFRU
UCIpfWNhdGNoKGIpe319ZnVuY3Rpb24gY2goKXt0cnl7cmV0dXJuIG5ldyBhLlhNTEh0dHBSZXF1
ZXN0fWNhdGNoKGIpe319ZnVuY3Rpb24gY2IoYSxjKXthLmRhdGFGaWx0ZXImJihjPWEuZGF0YUZp
bHRlcihjLGEuZGF0YVR5cGUpKTt2YXIgZD1hLmRhdGFUeXBlcyxlPXt9LGcsaCxpPWQubGVuZ3Ro
LGosaz1kWzBdLGwsbSxuLG8scDtmb3IoZz0xO2c8aTtnKyspe2lmKGc9PT0xKWZvcihoIGluIGEu
Y29udmVydGVycyl0eXBlb2YgaD09InN0cmluZyImJihlW2gudG9Mb3dlckNhc2UoKV09YS5jb252
ZXJ0ZXJzW2hdKTtsPWssaz1kW2ddO2lmKGs9PT0iKiIpaz1sO2Vsc2UgaWYobCE9PSIqIiYmbCE9
PWspe209bCsiICIrayxuPWVbbV18fGVbIiogIitrXTtpZighbil7cD1iO2ZvcihvIGluIGUpe2o9
by5zcGxpdCgiICIpO2lmKGpbMF09PT1sfHxqWzBdPT09IioiKXtwPWVbalsxXSsiICIra107aWYo
cCl7bz1lW29dLG89PT0hMD9uPXA6cD09PSEwJiYobj1vKTticmVha319fX0hbiYmIXAmJmYuZXJy
b3IoIk5vIGNvbnZlcnNpb24gZnJvbSAiK20ucmVwbGFjZSgiICIsIiB0byAiKSksbiE9PSEwJiYo
Yz1uP24oYyk6cChvKGMpKSl9fXJldHVybiBjfWZ1bmN0aW9uIGNhKGEsYyxkKXt2YXIgZT1hLmNv
bnRlbnRzLGY9YS5kYXRhVHlwZXMsZz1hLnJlc3BvbnNlRmllbGRzLGgsaSxqLGs7Zm9yKGkgaW4g
ZylpIGluIGQmJihjW2dbaV1dPWRbaV0pO3doaWxlKGZbMF09PT0iKiIpZi5zaGlmdCgpLGg9PT1i
JiYoaD1hLm1pbWVUeXBlfHxjLmdldFJlc3BvbnNlSGVhZGVyKCJjb250ZW50LXR5cGUiKSk7aWYo
aClmb3IoaSBpbiBlKWlmKGVbaV0mJmVbaV0udGVzdChoKSl7Zi51bnNoaWZ0KGkpO2JyZWFrfWlm
KGZbMF1pbiBkKWo9ZlswXTtlbHNle2ZvcihpIGluIGQpe2lmKCFmWzBdfHxhLmNvbnZlcnRlcnNb
aSsiICIrZlswXV0pe2o9aTticmVha31rfHwoaz1pKX1qPWp8fGt9aWYoail7aiE9PWZbMF0mJmYu
dW5zaGlmdChqKTtyZXR1cm4gZFtqXX19ZnVuY3Rpb24gYl8oYSxiLGMsZCl7aWYoZi5pc0FycmF5
KGIpKWYuZWFjaChiLGZ1bmN0aW9uKGIsZSl7Y3x8YkQudGVzdChhKT9kKGEsZSk6Yl8oYSsiWyIr
KHR5cGVvZiBlPT0ib2JqZWN0Ij9iOiIiKSsiXSIsZSxjLGQpfSk7ZWxzZSBpZighYyYmZi50eXBl
KGIpPT09Im9iamVjdCIpZm9yKHZhciBlIGluIGIpYl8oYSsiWyIrZSsiXSIsYltlXSxjLGQpO2Vs
c2UgZChhLGIpfWZ1bmN0aW9uIGIkKGEsYyl7dmFyIGQsZSxnPWYuYWpheFNldHRpbmdzLmZsYXRP
cHRpb25zfHx7fTtmb3IoZCBpbiBjKWNbZF0hPT1iJiYoKGdbZF0/YTplfHwoZT17fSkpW2RdPWNb
ZF0pO2UmJmYuZXh0ZW5kKCEwLGEsZSl9ZnVuY3Rpb24gYlooYSxjLGQsZSxmLGcpe2Y9Znx8Yy5k
YXRhVHlwZXNbMF0sZz1nfHx7fSxnW2ZdPSEwO3ZhciBoPWFbZl0saT0wLGo9aD9oLmxlbmd0aDow
LGs9YT09PWJTLGw7Zm9yKDtpPGomJihrfHwhbCk7aSsrKWw9aFtpXShjLGQsZSksdHlwZW9mIGw9
PSJzdHJpbmciJiYoIWt8fGdbbF0/bD1iOihjLmRhdGFUeXBlcy51bnNoaWZ0KGwpLGw9YlooYSxj
LGQsZSxsLGcpKSk7KGt8fCFsKSYmIWdbIioiXSYmKGw9YlooYSxjLGQsZSwiKiIsZykpO3JldHVy
biBsfWZ1bmN0aW9uIGJZKGEpe3JldHVybiBmdW5jdGlvbihiLGMpe3R5cGVvZiBiIT0ic3RyaW5n
IiYmKGM9YixiPSIqIik7aWYoZi5pc0Z1bmN0aW9uKGMpKXt2YXIgZD1iLnRvTG93ZXJDYXNlKCku
c3BsaXQoYk8pLGU9MCxnPWQubGVuZ3RoLGgsaSxqO2Zvcig7ZTxnO2UrKyloPWRbZV0saj0vXlwr
Ly50ZXN0KGgpLGomJihoPWguc3Vic3RyKDEpfHwiKiIpLGk9YVtoXT1hW2hdfHxbXSxpW2o/InVu
c2hpZnQiOiJwdXNoIl0oYyl9fX1mdW5jdGlvbiBiQihhLGIsYyl7dmFyIGQ9Yj09PSJ3aWR0aCI/
YS5vZmZzZXRXaWR0aDphLm9mZnNldEhlaWdodCxlPWI9PT0id2lkdGgiPzE6MCxnPTQ7aWYoZD4w
KXtpZihjIT09ImJvcmRlciIpZm9yKDtlPGc7ZSs9MiljfHwoZC09cGFyc2VGbG9hdChmLmNzcyhh
LCJwYWRkaW5nIitieFtlXSkpfHwwKSxjPT09Im1hcmdpbiI/ZCs9cGFyc2VGbG9hdChmLmNzcyhh
LGMrYnhbZV0pKXx8MDpkLT1wYXJzZUZsb2F0KGYuY3NzKGEsImJvcmRlciIrYnhbZV0rIldpZHRo
IikpfHwwO3JldHVybiBkKyJweCJ9ZD1ieShhLGIpO2lmKGQ8MHx8ZD09bnVsbClkPWEuc3R5bGVb
Yl07aWYoYnQudGVzdChkKSlyZXR1cm4gZDtkPXBhcnNlRmxvYXQoZCl8fDA7aWYoYylmb3IoO2U8
ZztlKz0yKWQrPXBhcnNlRmxvYXQoZi5jc3MoYSwicGFkZGluZyIrYnhbZV0pKXx8MCxjIT09InBh
ZGRpbmciJiYoZCs9cGFyc2VGbG9hdChmLmNzcyhhLCJib3JkZXIiK2J4W2VdKyJXaWR0aCIpKXx8
MCksYz09PSJtYXJnaW4iJiYoZCs9cGFyc2VGbG9hdChmLmNzcyhhLGMrYnhbZV0pKXx8MCk7cmV0
dXJuIGQrInB4In1mdW5jdGlvbiBibyhhKXt2YXIgYj1jLmNyZWF0ZUVsZW1lbnQoImRpdiIpO2Jo
LmFwcGVuZENoaWxkKGIpLGIuaW5uZXJIVE1MPWEub3V0ZXJIVE1MO3JldHVybiBiLmZpcnN0Q2hp
bGR9ZnVuY3Rpb24gYm4oYSl7dmFyIGI9KGEubm9kZU5hbWV8fCIiKS50b0xvd2VyQ2FzZSgpO2I9
PT0iaW5wdXQiP2JtKGEpOmIhPT0ic2NyaXB0IiYmdHlwZW9mIGEuZ2V0RWxlbWVudHNCeVRhZ05h
bWUhPSJ1bmRlZmluZWQiJiZmLmdyZXAoYS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKSxi
bSl9ZnVuY3Rpb24gYm0oYSl7aWYoYS50eXBlPT09ImNoZWNrYm94Inx8YS50eXBlPT09InJhZGlv
IilhLmRlZmF1bHRDaGVja2VkPWEuY2hlY2tlZH1mdW5jdGlvbiBibChhKXtyZXR1cm4gdHlwZW9m
IGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUhPSJ1bmRlZmluZWQiP2EuZ2V0RWxlbWVudHNCeVRhZ05h
bWUoIioiKTp0eXBlb2YgYS5xdWVyeVNlbGVjdG9yQWxsIT0idW5kZWZpbmVkIj9hLnF1ZXJ5U2Vs
ZWN0b3JBbGwoIioiKTpbXX1mdW5jdGlvbiBiayhhLGIpe3ZhciBjO2Iubm9kZVR5cGU9PT0xJiYo
Yi5jbGVhckF0dHJpYnV0ZXMmJmIuY2xlYXJBdHRyaWJ1dGVzKCksYi5tZXJnZUF0dHJpYnV0ZXMm
JmIubWVyZ2VBdHRyaWJ1dGVzKGEpLGM9Yi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLGM9PT0ib2Jq
ZWN0Ij9iLm91dGVySFRNTD1hLm91dGVySFRNTDpjIT09ImlucHV0Inx8YS50eXBlIT09ImNoZWNr
Ym94IiYmYS50eXBlIT09InJhZGlvIj9jPT09Im9wdGlvbiI/Yi5zZWxlY3RlZD1hLmRlZmF1bHRT
ZWxlY3RlZDpjPT09ImlucHV0Inx8Yz09PSJ0ZXh0YXJlYSI/Yi5kZWZhdWx0VmFsdWU9YS5kZWZh
dWx0VmFsdWU6Yz09PSJzY3JpcHQiJiZiLnRleHQhPT1hLnRleHQmJihiLnRleHQ9YS50ZXh0KToo
YS5jaGVja2VkJiYoYi5kZWZhdWx0Q2hlY2tlZD1iLmNoZWNrZWQ9YS5jaGVja2VkKSxiLnZhbHVl
IT09YS52YWx1ZSYmKGIudmFsdWU9YS52YWx1ZSkpLGIucmVtb3ZlQXR0cmlidXRlKGYuZXhwYW5k
byksYi5yZW1vdmVBdHRyaWJ1dGUoIl9zdWJtaXRfYXR0YWNoZWQiKSxiLnJlbW92ZUF0dHJpYnV0
ZSgiX2NoYW5nZV9hdHRhY2hlZCIpKX1mdW5jdGlvbiBiaihhLGIpe2lmKGIubm9kZVR5cGU9PT0x
JiYhIWYuaGFzRGF0YShhKSl7dmFyIGMsZCxlLGc9Zi5fZGF0YShhKSxoPWYuX2RhdGEoYixnKSxp
PWcuZXZlbnRzO2lmKGkpe2RlbGV0ZSBoLmhhbmRsZSxoLmV2ZW50cz17fTtmb3IoYyBpbiBpKWZv
cihkPTAsZT1pW2NdLmxlbmd0aDtkPGU7ZCsrKWYuZXZlbnQuYWRkKGIsYyxpW2NdW2RdKX1oLmRh
dGEmJihoLmRhdGE9Zi5leHRlbmQoe30saC5kYXRhKSl9fWZ1bmN0aW9uIGJpKGEsYil7cmV0dXJu
IGYubm9kZU5hbWUoYSwidGFibGUiKT9hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0Ym9keSIpWzBd
fHxhLmFwcGVuZENoaWxkKGEub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0Ym9keSIpKTph
fWZ1bmN0aW9uIFUoYSl7dmFyIGI9Vi5zcGxpdCgifCIpLGM9YS5jcmVhdGVEb2N1bWVudEZyYWdt
ZW50KCk7aWYoYy5jcmVhdGVFbGVtZW50KXdoaWxlKGIubGVuZ3RoKWMuY3JlYXRlRWxlbWVudChi
LnBvcCgpKTtyZXR1cm4gY31mdW5jdGlvbiBUKGEsYixjKXtiPWJ8fDA7aWYoZi5pc0Z1bmN0aW9u
KGIpKXJldHVybiBmLmdyZXAoYSxmdW5jdGlvbihhLGQpe3ZhciBlPSEhYi5jYWxsKGEsZCxhKTty
ZXR1cm4gZT09PWN9KTtpZihiLm5vZGVUeXBlKXJldHVybiBmLmdyZXAoYSxmdW5jdGlvbihhLGQp
e3JldHVybiBhPT09Yj09PWN9KTtpZih0eXBlb2YgYj09InN0cmluZyIpe3ZhciBkPWYuZ3JlcChh
LGZ1bmN0aW9uKGEpe3JldHVybiBhLm5vZGVUeXBlPT09MX0pO2lmKE8udGVzdChiKSlyZXR1cm4g
Zi5maWx0ZXIoYixkLCFjKTtiPWYuZmlsdGVyKGIsZCl9cmV0dXJuIGYuZ3JlcChhLGZ1bmN0aW9u
KGEsZCl7cmV0dXJuIGYuaW5BcnJheShhLGIpPj0wPT09Y30pfWZ1bmN0aW9uIFMoYSl7cmV0dXJu
IWF8fCFhLnBhcmVudE5vZGV8fGEucGFyZW50Tm9kZS5ub2RlVHlwZT09PTExfWZ1bmN0aW9uIEso
KXtyZXR1cm4hMH1mdW5jdGlvbiBKKCl7cmV0dXJuITF9ZnVuY3Rpb24gbihhLGIsYyl7dmFyIGQ9
YisiZGVmZXIiLGU9YisicXVldWUiLGc9YisibWFyayIsaD1mLl9kYXRhKGEsZCk7aCYmKGM9PT0i
cXVldWUifHwhZi5fZGF0YShhLGUpKSYmKGM9PT0ibWFyayJ8fCFmLl9kYXRhKGEsZykpJiZzZXRU
aW1lb3V0KGZ1bmN0aW9uKCl7IWYuX2RhdGEoYSxlKSYmIWYuX2RhdGEoYSxnKSYmKGYucmVtb3Zl
RGF0YShhLGQsITApLGguZmlyZSgpKX0sMCl9ZnVuY3Rpb24gbShhKXtmb3IodmFyIGIgaW4gYSl7
aWYoYj09PSJkYXRhIiYmZi5pc0VtcHR5T2JqZWN0KGFbYl0pKWNvbnRpbnVlO2lmKGIhPT0idG9K
U09OIilyZXR1cm4hMX1yZXR1cm4hMH1mdW5jdGlvbiBsKGEsYyxkKXtpZihkPT09YiYmYS5ub2Rl
VHlwZT09PTEpe3ZhciBlPSJkYXRhLSIrYy5yZXBsYWNlKGssIi0kMSIpLnRvTG93ZXJDYXNlKCk7
ZD1hLmdldEF0dHJpYnV0ZShlKTtpZih0eXBlb2YgZD09InN0cmluZyIpe3RyeXtkPWQ9PT0idHJ1
ZSI/ITA6ZD09PSJmYWxzZSI/ITE6ZD09PSJudWxsIj9udWxsOmYuaXNOdW1lcmljKGQpPytkOmou
dGVzdChkKT9mLnBhcnNlSlNPTihkKTpkfWNhdGNoKGcpe31mLmRhdGEoYSxjLGQpfWVsc2UgZD1i
fXJldHVybiBkfWZ1bmN0aW9uIGgoYSl7dmFyIGI9Z1thXT17fSxjLGQ7YT1hLnNwbGl0KC9ccysv
KTtmb3IoYz0wLGQ9YS5sZW5ndGg7YzxkO2MrKyliW2FbY11dPSEwO3JldHVybiBifXZhciBjPWEu
ZG9jdW1lbnQsZD1hLm5hdmlnYXRvcixlPWEubG9jYXRpb24sZj1mdW5jdGlvbigpe2Z1bmN0aW9u
IEooKXtpZighZS5pc1JlYWR5KXt0cnl7Yy5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGwoImxlZnQi
KX1jYXRjaChhKXtzZXRUaW1lb3V0KEosMSk7cmV0dXJufWUucmVhZHkoKX19dmFyIGU9ZnVuY3Rp
b24oYSxiKXtyZXR1cm4gbmV3IGUuZm4uaW5pdChhLGIsaCl9LGY9YS5qUXVlcnksZz1hLiQsaCxp
PS9eKD86W14jPF0qKDxbXHdcV10rPilbXj5dKiR8IyhbXHdcLV0qKSQpLyxqPS9cUy8saz0vXlxz
Ky8sbD0vXHMrJC8sbT0vXjwoXHcrKVxzKlwvPz4oPzo8XC9cMT4pPyQvLG49L15bXF0sOnt9XHNd
KiQvLG89L1xcKD86WyJcXFwvYmZucnRdfHVbMC05YS1mQS1GXXs0fSkvZyxwPS8iW14iXFxcblxy
XSoifHRydWV8ZmFsc2V8bnVsbHwtP1xkKyg/OlwuXGQqKT8oPzpbZUVdWytcLV0/XGQrKT8vZyxx
PS8oPzpefDp8LCkoPzpccypcWykrL2cscj0vKHdlYmtpdClbIFwvXShbXHcuXSspLyxzPS8ob3Bl
cmEpKD86Lip2ZXJzaW9uKT9bIFwvXShbXHcuXSspLyx0PS8obXNpZSkgKFtcdy5dKykvLHU9Lyht
b3ppbGxhKSg/Oi4qPyBydjooW1x3Ll0rKSk/Lyx2PS8tKFthLXpdfFswLTldKS9pZyx3PS9eLW1z
LS8seD1mdW5jdGlvbihhLGIpe3JldHVybihiKyIiKS50b1VwcGVyQ2FzZSgpfSx5PWQudXNlckFn
ZW50LHosQSxCLEM9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxEPU9iamVjdC5wcm90b3R5cGUu
aGFzT3duUHJvcGVydHksRT1BcnJheS5wcm90b3R5cGUucHVzaCxGPUFycmF5LnByb3RvdHlwZS5z
bGljZSxHPVN0cmluZy5wcm90b3R5cGUudHJpbSxIPUFycmF5LnByb3RvdHlwZS5pbmRleE9mLEk9
e307ZS5mbj1lLnByb3RvdHlwZT17Y29uc3RydWN0b3I6ZSxpbml0OmZ1bmN0aW9uKGEsZCxmKXt2
YXIgZyxoLGosaztpZighYSlyZXR1cm4gdGhpcztpZihhLm5vZGVUeXBlKXt0aGlzLmNvbnRleHQ9
dGhpc1swXT1hLHRoaXMubGVuZ3RoPTE7cmV0dXJuIHRoaXN9aWYoYT09PSJib2R5IiYmIWQmJmMu
Ym9keSl7dGhpcy5jb250ZXh0PWMsdGhpc1swXT1jLmJvZHksdGhpcy5zZWxlY3Rvcj1hLHRoaXMu
bGVuZ3RoPTE7cmV0dXJuIHRoaXN9aWYodHlwZW9mIGE9PSJzdHJpbmciKXthLmNoYXJBdCgwKSE9
PSI8Inx8YS5jaGFyQXQoYS5sZW5ndGgtMSkhPT0iPiJ8fGEubGVuZ3RoPDM/Zz1pLmV4ZWMoYSk6
Zz1bbnVsbCxhLG51bGxdO2lmKGcmJihnWzFdfHwhZCkpe2lmKGdbMV0pe2Q9ZCBpbnN0YW5jZW9m
IGU/ZFswXTpkLGs9ZD9kLm93bmVyRG9jdW1lbnR8fGQ6YyxqPW0uZXhlYyhhKSxqP2UuaXNQbGFp
bk9iamVjdChkKT8oYT1bYy5jcmVhdGVFbGVtZW50KGpbMV0pXSxlLmZuLmF0dHIuY2FsbChhLGQs
ITApKTphPVtrLmNyZWF0ZUVsZW1lbnQoalsxXSldOihqPWUuYnVpbGRGcmFnbWVudChbZ1sxXV0s
W2tdKSxhPShqLmNhY2hlYWJsZT9lLmNsb25lKGouZnJhZ21lbnQpOmouZnJhZ21lbnQpLmNoaWxk
Tm9kZXMpO3JldHVybiBlLm1lcmdlKHRoaXMsYSl9aD1jLmdldEVsZW1lbnRCeUlkKGdbMl0pO2lm
KGgmJmgucGFyZW50Tm9kZSl7aWYoaC5pZCE9PWdbMl0pcmV0dXJuIGYuZmluZChhKTt0aGlzLmxl
bmd0aD0xLHRoaXNbMF09aH10aGlzLmNvbnRleHQ9Yyx0aGlzLnNlbGVjdG9yPWE7cmV0dXJuIHRo
aXN9cmV0dXJuIWR8fGQuanF1ZXJ5PyhkfHxmKS5maW5kKGEpOnRoaXMuY29uc3RydWN0b3IoZCku
ZmluZChhKX1pZihlLmlzRnVuY3Rpb24oYSkpcmV0dXJuIGYucmVhZHkoYSk7YS5zZWxlY3RvciE9
PWImJih0aGlzLnNlbGVjdG9yPWEuc2VsZWN0b3IsdGhpcy5jb250ZXh0PWEuY29udGV4dCk7cmV0
dXJuIGUubWFrZUFycmF5KGEsdGhpcyl9LHNlbGVjdG9yOiIiLGpxdWVyeToiMS43LjIiLGxlbmd0
aDowLHNpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZW5ndGh9LHRvQXJyYXk6ZnVuY3Rpb24o
KXtyZXR1cm4gRi5jYWxsKHRoaXMsMCl9LGdldDpmdW5jdGlvbihhKXtyZXR1cm4gYT09bnVsbD90
aGlzLnRvQXJyYXkoKTphPDA/dGhpc1t0aGlzLmxlbmd0aCthXTp0aGlzW2FdfSxwdXNoU3RhY2s6
ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMuY29uc3RydWN0b3IoKTtlLmlzQXJyYXkoYSk/RS5h
cHBseShkLGEpOmUubWVyZ2UoZCxhKSxkLnByZXZPYmplY3Q9dGhpcyxkLmNvbnRleHQ9dGhpcy5j
b250ZXh0LGI9PT0iZmluZCI/ZC5zZWxlY3Rvcj10aGlzLnNlbGVjdG9yKyh0aGlzLnNlbGVjdG9y
PyIgIjoiIikrYzpiJiYoZC5zZWxlY3Rvcj10aGlzLnNlbGVjdG9yKyIuIitiKyIoIitjKyIpIik7
cmV0dXJuIGR9LGVhY2g6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZS5lYWNoKHRoaXMsYSxiKX0scmVh
ZHk6ZnVuY3Rpb24oYSl7ZS5iaW5kUmVhZHkoKSxBLmFkZChhKTtyZXR1cm4gdGhpc30sZXE6ZnVu
Y3Rpb24oYSl7YT0rYTtyZXR1cm4gYT09PS0xP3RoaXMuc2xpY2UoYSk6dGhpcy5zbGljZShhLGEr
MSl9LGZpcnN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEoMCl9LGxhc3Q6ZnVuY3Rpb24oKXty
ZXR1cm4gdGhpcy5lcSgtMSl9LHNsaWNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHVzaFN0YWNr
KEYuYXBwbHkodGhpcyxhcmd1bWVudHMpLCJzbGljZSIsRi5jYWxsKGFyZ3VtZW50cykuam9pbigi
LCIpKX0sbWFwOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnB1c2hTdGFjayhlLm1hcCh0aGlzLGZ1
bmN0aW9uKGIsYyl7cmV0dXJuIGEuY2FsbChiLGMsYil9KSl9LGVuZDpmdW5jdGlvbigpe3JldHVy
biB0aGlzLnByZXZPYmplY3R8fHRoaXMuY29uc3RydWN0b3IobnVsbCl9LHB1c2g6RSxzb3J0Oltd
LnNvcnQsc3BsaWNlOltdLnNwbGljZX0sZS5mbi5pbml0LnByb3RvdHlwZT1lLmZuLGUuZXh0ZW5k
PWUuZm4uZXh0ZW5kPWZ1bmN0aW9uKCl7dmFyIGEsYyxkLGYsZyxoLGk9YXJndW1lbnRzWzBdfHx7
fSxqPTEsaz1hcmd1bWVudHMubGVuZ3RoLGw9ITE7dHlwZW9mIGk9PSJib29sZWFuIiYmKGw9aSxp
PWFyZ3VtZW50c1sxXXx8e30saj0yKSx0eXBlb2YgaSE9Im9iamVjdCImJiFlLmlzRnVuY3Rpb24o
aSkmJihpPXt9KSxrPT09aiYmKGk9dGhpcywtLWopO2Zvcig7ajxrO2orKylpZigoYT1hcmd1bWVu
dHNbal0pIT1udWxsKWZvcihjIGluIGEpe2Q9aVtjXSxmPWFbY107aWYoaT09PWYpY29udGludWU7
bCYmZiYmKGUuaXNQbGFpbk9iamVjdChmKXx8KGc9ZS5pc0FycmF5KGYpKSk/KGc/KGc9ITEsaD1k
JiZlLmlzQXJyYXkoZCk/ZDpbXSk6aD1kJiZlLmlzUGxhaW5PYmplY3QoZCk/ZDp7fSxpW2NdPWUu
ZXh0ZW5kKGwsaCxmKSk6ZiE9PWImJihpW2NdPWYpfXJldHVybiBpfSxlLmV4dGVuZCh7bm9Db25m
bGljdDpmdW5jdGlvbihiKXthLiQ9PT1lJiYoYS4kPWcpLGImJmEualF1ZXJ5PT09ZSYmKGEualF1
ZXJ5PWYpO3JldHVybiBlfSxpc1JlYWR5OiExLHJlYWR5V2FpdDoxLGhvbGRSZWFkeTpmdW5jdGlv
bihhKXthP2UucmVhZHlXYWl0Kys6ZS5yZWFkeSghMCl9LHJlYWR5OmZ1bmN0aW9uKGEpe2lmKGE9
PT0hMCYmIS0tZS5yZWFkeVdhaXR8fGEhPT0hMCYmIWUuaXNSZWFkeSl7aWYoIWMuYm9keSlyZXR1
cm4gc2V0VGltZW91dChlLnJlYWR5LDEpO2UuaXNSZWFkeT0hMDtpZihhIT09ITAmJi0tZS5yZWFk
eVdhaXQ+MClyZXR1cm47QS5maXJlV2l0aChjLFtlXSksZS5mbi50cmlnZ2VyJiZlKGMpLnRyaWdn
ZXIoInJlYWR5Iikub2ZmKCJyZWFkeSIpfX0sYmluZFJlYWR5OmZ1bmN0aW9uKCl7aWYoIUEpe0E9
ZS5DYWxsYmFja3MoIm9uY2UgbWVtb3J5Iik7aWYoYy5yZWFkeVN0YXRlPT09ImNvbXBsZXRlIily
ZXR1cm4gc2V0VGltZW91dChlLnJlYWR5LDEpO2lmKGMuYWRkRXZlbnRMaXN0ZW5lciljLmFkZEV2
ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLEIsITEpLGEuYWRkRXZlbnRMaXN0ZW5lcigi
bG9hZCIsZS5yZWFkeSwhMSk7ZWxzZSBpZihjLmF0dGFjaEV2ZW50KXtjLmF0dGFjaEV2ZW50KCJv
bnJlYWR5c3RhdGVjaGFuZ2UiLEIpLGEuYXR0YWNoRXZlbnQoIm9ubG9hZCIsZS5yZWFkeSk7dmFy
IGI9ITE7dHJ5e2I9YS5mcmFtZUVsZW1lbnQ9PW51bGx9Y2F0Y2goZCl7fWMuZG9jdW1lbnRFbGVt
ZW50LmRvU2Nyb2xsJiZiJiZKKCl9fX0saXNGdW5jdGlvbjpmdW5jdGlvbihhKXtyZXR1cm4gZS50
eXBlKGEpPT09ImZ1bmN0aW9uIn0saXNBcnJheTpBcnJheS5pc0FycmF5fHxmdW5jdGlvbihhKXty
ZXR1cm4gZS50eXBlKGEpPT09ImFycmF5In0saXNXaW5kb3c6ZnVuY3Rpb24oYSl7cmV0dXJuIGEh
PW51bGwmJmE9PWEud2luZG93fSxpc051bWVyaWM6ZnVuY3Rpb24oYSl7cmV0dXJuIWlzTmFOKHBh
cnNlRmxvYXQoYSkpJiZpc0Zpbml0ZShhKX0sdHlwZTpmdW5jdGlvbihhKXtyZXR1cm4gYT09bnVs
bD9TdHJpbmcoYSk6SVtDLmNhbGwoYSldfHwib2JqZWN0In0saXNQbGFpbk9iamVjdDpmdW5jdGlv
bihhKXtpZighYXx8ZS50eXBlKGEpIT09Im9iamVjdCJ8fGEubm9kZVR5cGV8fGUuaXNXaW5kb3co
YSkpcmV0dXJuITE7dHJ5e2lmKGEuY29uc3RydWN0b3ImJiFELmNhbGwoYSwiY29uc3RydWN0b3Ii
KSYmIUQuY2FsbChhLmNvbnN0cnVjdG9yLnByb3RvdHlwZSwiaXNQcm90b3R5cGVPZiIpKXJldHVy
biExfWNhdGNoKGMpe3JldHVybiExfXZhciBkO2ZvcihkIGluIGEpO3JldHVybiBkPT09Ynx8RC5j
YWxsKGEsZCl9LGlzRW1wdHlPYmplY3Q6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiIGluIGEpcmV0dXJu
ITE7cmV0dXJuITB9LGVycm9yOmZ1bmN0aW9uKGEpe3Rocm93IG5ldyBFcnJvcihhKX0scGFyc2VK
U09OOmZ1bmN0aW9uKGIpe2lmKHR5cGVvZiBiIT0ic3RyaW5nInx8IWIpcmV0dXJuIG51bGw7Yj1l
LnRyaW0oYik7aWYoYS5KU09OJiZhLkpTT04ucGFyc2UpcmV0dXJuIGEuSlNPTi5wYXJzZShiKTtp
ZihuLnRlc3QoYi5yZXBsYWNlKG8sIkAiKS5yZXBsYWNlKHAsIl0iKS5yZXBsYWNlKHEsIiIpKSly
ZXR1cm4obmV3IEZ1bmN0aW9uKCJyZXR1cm4gIitiKSkoKTtlLmVycm9yKCJJbnZhbGlkIEpTT046
ICIrYil9LHBhcnNlWE1MOmZ1bmN0aW9uKGMpe2lmKHR5cGVvZiBjIT0ic3RyaW5nInx8IWMpcmV0
dXJuIG51bGw7dmFyIGQsZjt0cnl7YS5ET01QYXJzZXI/KGY9bmV3IERPTVBhcnNlcixkPWYucGFy
c2VGcm9tU3RyaW5nKGMsInRleHQveG1sIikpOihkPW5ldyBBY3RpdmVYT2JqZWN0KCJNaWNyb3Nv
ZnQuWE1MRE9NIiksZC5hc3luYz0iZmFsc2UiLGQubG9hZFhNTChjKSl9Y2F0Y2goZyl7ZD1ifSgh
ZHx8IWQuZG9jdW1lbnRFbGVtZW50fHxkLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJwYXJzZXJlcnJv
ciIpLmxlbmd0aCkmJmUuZXJyb3IoIkludmFsaWQgWE1MOiAiK2MpO3JldHVybiBkfSxub29wOmZ1
bmN0aW9uKCl7fSxnbG9iYWxFdmFsOmZ1bmN0aW9uKGIpe2ImJmoudGVzdChiKSYmKGEuZXhlY1Nj
cmlwdHx8ZnVuY3Rpb24oYil7YS5ldmFsLmNhbGwoYSxiKX0pKGIpfSxjYW1lbENhc2U6ZnVuY3Rp
b24oYSl7cmV0dXJuIGEucmVwbGFjZSh3LCJtcy0iKS5yZXBsYWNlKHYseCl9LG5vZGVOYW1lOmZ1
bmN0aW9uKGEsYil7cmV0dXJuIGEubm9kZU5hbWUmJmEubm9kZU5hbWUudG9VcHBlckNhc2UoKT09
PWIudG9VcHBlckNhc2UoKX0sZWFjaDpmdW5jdGlvbihhLGMsZCl7dmFyIGYsZz0wLGg9YS5sZW5n
dGgsaT1oPT09Ynx8ZS5pc0Z1bmN0aW9uKGEpO2lmKGQpe2lmKGkpe2ZvcihmIGluIGEpaWYoYy5h
cHBseShhW2ZdLGQpPT09ITEpYnJlYWt9ZWxzZSBmb3IoO2c8aDspaWYoYy5hcHBseShhW2crK10s
ZCk9PT0hMSlicmVha31lbHNlIGlmKGkpe2ZvcihmIGluIGEpaWYoYy5jYWxsKGFbZl0sZixhW2Zd
KT09PSExKWJyZWFrfWVsc2UgZm9yKDtnPGg7KWlmKGMuY2FsbChhW2ddLGcsYVtnKytdKT09PSEx
KWJyZWFrO3JldHVybiBhfSx0cmltOkc/ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PW51bGw/IiI6Ry5j
YWxsKGEpfTpmdW5jdGlvbihhKXtyZXR1cm4gYT09bnVsbD8iIjooYSsiIikucmVwbGFjZShrLCIi
KS5yZXBsYWNlKGwsIiIpfSxtYWtlQXJyYXk6ZnVuY3Rpb24oYSxiKXt2YXIgYz1ifHxbXTtpZihh
IT1udWxsKXt2YXIgZD1lLnR5cGUoYSk7YS5sZW5ndGg9PW51bGx8fGQ9PT0ic3RyaW5nInx8ZD09
PSJmdW5jdGlvbiJ8fGQ9PT0icmVnZXhwInx8ZS5pc1dpbmRvdyhhKT9FLmNhbGwoYyxhKTplLm1l
cmdlKGMsYSl9cmV0dXJuIGN9LGluQXJyYXk6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkO2lmKGIpe2lm
KEgpcmV0dXJuIEguY2FsbChiLGEsYyk7ZD1iLmxlbmd0aCxjPWM/YzwwP01hdGgubWF4KDAsZCtj
KTpjOjA7Zm9yKDtjPGQ7YysrKWlmKGMgaW4gYiYmYltjXT09PWEpcmV0dXJuIGN9cmV0dXJuLTF9
LG1lcmdlOmZ1bmN0aW9uKGEsYyl7dmFyIGQ9YS5sZW5ndGgsZT0wO2lmKHR5cGVvZiBjLmxlbmd0
aD09Im51bWJlciIpZm9yKHZhciBmPWMubGVuZ3RoO2U8ZjtlKyspYVtkKytdPWNbZV07ZWxzZSB3
aGlsZShjW2VdIT09YilhW2QrK109Y1tlKytdO2EubGVuZ3RoPWQ7cmV0dXJuIGF9LGdyZXA6ZnVu
Y3Rpb24oYSxiLGMpe3ZhciBkPVtdLGU7Yz0hIWM7Zm9yKHZhciBmPTAsZz1hLmxlbmd0aDtmPGc7
ZisrKWU9ISFiKGFbZl0sZiksYyE9PWUmJmQucHVzaChhW2ZdKTtyZXR1cm4gZH0sbWFwOmZ1bmN0
aW9uKGEsYyxkKXt2YXIgZixnLGg9W10saT0wLGo9YS5sZW5ndGgsaz1hIGluc3RhbmNlb2YgZXx8
aiE9PWImJnR5cGVvZiBqPT0ibnVtYmVyIiYmKGo+MCYmYVswXSYmYVtqLTFdfHxqPT09MHx8ZS5p
c0FycmF5KGEpKTtpZihrKWZvcig7aTxqO2krKylmPWMoYVtpXSxpLGQpLGYhPW51bGwmJihoW2gu
bGVuZ3RoXT1mKTtlbHNlIGZvcihnIGluIGEpZj1jKGFbZ10sZyxkKSxmIT1udWxsJiYoaFtoLmxl
bmd0aF09Zik7cmV0dXJuIGguY29uY2F0LmFwcGx5KFtdLGgpfSxndWlkOjEscHJveHk6ZnVuY3Rp
b24oYSxjKXtpZih0eXBlb2YgYz09InN0cmluZyIpe3ZhciBkPWFbY107Yz1hLGE9ZH1pZighZS5p
c0Z1bmN0aW9uKGEpKXJldHVybiBiO3ZhciBmPUYuY2FsbChhcmd1bWVudHMsMiksZz1mdW5jdGlv
bigpe3JldHVybiBhLmFwcGx5KGMsZi5jb25jYXQoRi5jYWxsKGFyZ3VtZW50cykpKX07Zy5ndWlk
PWEuZ3VpZD1hLmd1aWR8fGcuZ3VpZHx8ZS5ndWlkKys7cmV0dXJuIGd9LGFjY2VzczpmdW5jdGlv
bihhLGMsZCxmLGcsaCxpKXt2YXIgaixrPWQ9PW51bGwsbD0wLG09YS5sZW5ndGg7aWYoZCYmdHlw
ZW9mIGQ9PSJvYmplY3QiKXtmb3IobCBpbiBkKWUuYWNjZXNzKGEsYyxsLGRbbF0sMSxoLGYpO2c9
MX1lbHNlIGlmKGYhPT1iKXtqPWk9PT1iJiZlLmlzRnVuY3Rpb24oZiksayYmKGo/KGo9YyxjPWZ1
bmN0aW9uKGEsYixjKXtyZXR1cm4gai5jYWxsKGUoYSksYyl9KTooYy5jYWxsKGEsZiksYz1udWxs
KSk7aWYoYylmb3IoO2w8bTtsKyspYyhhW2xdLGQsaj9mLmNhbGwoYVtsXSxsLGMoYVtsXSxkKSk6
ZixpKTtnPTF9cmV0dXJuIGc/YTprP2MuY2FsbChhKTptP2MoYVswXSxkKTpofSxub3c6ZnVuY3Rp
b24oKXtyZXR1cm4obmV3IERhdGUpLmdldFRpbWUoKX0sdWFNYXRjaDpmdW5jdGlvbihhKXthPWEu
dG9Mb3dlckNhc2UoKTt2YXIgYj1yLmV4ZWMoYSl8fHMuZXhlYyhhKXx8dC5leGVjKGEpfHxhLmlu
ZGV4T2YoImNvbXBhdGlibGUiKTwwJiZ1LmV4ZWMoYSl8fFtdO3JldHVybnticm93c2VyOmJbMV18
fCIiLHZlcnNpb246YlsyXXx8IjAifX0sc3ViOmZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShiLGMpe3Jl
dHVybiBuZXcgYS5mbi5pbml0KGIsYyl9ZS5leHRlbmQoITAsYSx0aGlzKSxhLnN1cGVyY2xhc3M9
dGhpcyxhLmZuPWEucHJvdG90eXBlPXRoaXMoKSxhLmZuLmNvbnN0cnVjdG9yPWEsYS5zdWI9dGhp
cy5zdWIsYS5mbi5pbml0PWZ1bmN0aW9uKGQsZil7ZiYmZiBpbnN0YW5jZW9mIGUmJiEoZiBpbnN0
YW5jZW9mIGEpJiYoZj1hKGYpKTtyZXR1cm4gZS5mbi5pbml0LmNhbGwodGhpcyxkLGYsYil9LGEu
Zm4uaW5pdC5wcm90b3R5cGU9YS5mbjt2YXIgYj1hKGMpO3JldHVybiBhfSxicm93c2VyOnt9fSks
ZS5lYWNoKCJCb29sZWFuIE51bWJlciBTdHJpbmcgRnVuY3Rpb24gQXJyYXkgRGF0ZSBSZWdFeHAg
T2JqZWN0Ii5zcGxpdCgiICIpLGZ1bmN0aW9uKGEsYil7SVsiW29iamVjdCAiK2IrIl0iXT1iLnRv
TG93ZXJDYXNlKCl9KSx6PWUudWFNYXRjaCh5KSx6LmJyb3dzZXImJihlLmJyb3dzZXJbei5icm93
c2VyXT0hMCxlLmJyb3dzZXIudmVyc2lvbj16LnZlcnNpb24pLGUuYnJvd3Nlci53ZWJraXQmJihl
LmJyb3dzZXIuc2FmYXJpPSEwKSxqLnRlc3QoIsKgIikmJihrPS9eW1xzXHhBMF0rLyxsPS9bXHNc
eEEwXSskLyksaD1lKGMpLGMuYWRkRXZlbnRMaXN0ZW5lcj9CPWZ1bmN0aW9uKCl7Yy5yZW1vdmVF
dmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixCLCExKSxlLnJlYWR5KCl9OmMuYXR0YWNo
RXZlbnQmJihCPWZ1bmN0aW9uKCl7Yy5yZWFkeVN0YXRlPT09ImNvbXBsZXRlIiYmKGMuZGV0YWNo
RXZlbnQoIm9ucmVhZHlzdGF0ZWNoYW5nZSIsQiksZS5yZWFkeSgpKX0pO3JldHVybiBlfSgpLGc9
e307Zi5DYWxsYmFja3M9ZnVuY3Rpb24oYSl7YT1hP2dbYV18fGgoYSk6e307dmFyIGM9W10sZD1b
XSxlLGksaixrLGwsbSxuPWZ1bmN0aW9uKGIpe3ZhciBkLGUsZyxoLGk7Zm9yKGQ9MCxlPWIubGVu
Z3RoO2Q8ZTtkKyspZz1iW2RdLGg9Zi50eXBlKGcpLGg9PT0iYXJyYXkiP24oZyk6aD09PSJmdW5j
dGlvbiImJighYS51bmlxdWV8fCFwLmhhcyhnKSkmJmMucHVzaChnKX0sbz1mdW5jdGlvbihiLGYp
e2Y9Znx8W10sZT0hYS5tZW1vcnl8fFtiLGZdLGk9ITAsaj0hMCxtPWt8fDAsaz0wLGw9Yy5sZW5n
dGg7Zm9yKDtjJiZtPGw7bSsrKWlmKGNbbV0uYXBwbHkoYixmKT09PSExJiZhLnN0b3BPbkZhbHNl
KXtlPSEwO2JyZWFrfWo9ITEsYyYmKGEub25jZT9lPT09ITA/cC5kaXNhYmxlKCk6Yz1bXTpkJiZk
Lmxlbmd0aCYmKGU9ZC5zaGlmdCgpLHAuZmlyZVdpdGgoZVswXSxlWzFdKSkpfSxwPXthZGQ6ZnVu
Y3Rpb24oKXtpZihjKXt2YXIgYT1jLmxlbmd0aDtuKGFyZ3VtZW50cyksaj9sPWMubGVuZ3RoOmUm
JmUhPT0hMCYmKGs9YSxvKGVbMF0sZVsxXSkpfXJldHVybiB0aGlzfSxyZW1vdmU6ZnVuY3Rpb24o
KXtpZihjKXt2YXIgYj1hcmd1bWVudHMsZD0wLGU9Yi5sZW5ndGg7Zm9yKDtkPGU7ZCsrKWZvcih2
YXIgZj0wO2Y8Yy5sZW5ndGg7ZisrKWlmKGJbZF09PT1jW2ZdKXtqJiZmPD1sJiYobC0tLGY8PW0m
Jm0tLSksYy5zcGxpY2UoZi0tLDEpO2lmKGEudW5pcXVlKWJyZWFrfX1yZXR1cm4gdGhpc30saGFz
OmZ1bmN0aW9uKGEpe2lmKGMpe3ZhciBiPTAsZD1jLmxlbmd0aDtmb3IoO2I8ZDtiKyspaWYoYT09
PWNbYl0pcmV0dXJuITB9cmV0dXJuITF9LGVtcHR5OmZ1bmN0aW9uKCl7Yz1bXTtyZXR1cm4gdGhp
c30sZGlzYWJsZTpmdW5jdGlvbigpe2M9ZD1lPWI7cmV0dXJuIHRoaXN9LGRpc2FibGVkOmZ1bmN0
aW9uKCl7cmV0dXJuIWN9LGxvY2s6ZnVuY3Rpb24oKXtkPWIsKCFlfHxlPT09ITApJiZwLmRpc2Fi
bGUoKTtyZXR1cm4gdGhpc30sbG9ja2VkOmZ1bmN0aW9uKCl7cmV0dXJuIWR9LGZpcmVXaXRoOmZ1
bmN0aW9uKGIsYyl7ZCYmKGo/YS5vbmNlfHxkLnB1c2goW2IsY10pOighYS5vbmNlfHwhZSkmJm8o
YixjKSk7cmV0dXJuIHRoaXN9LGZpcmU6ZnVuY3Rpb24oKXtwLmZpcmVXaXRoKHRoaXMsYXJndW1l
bnRzKTtyZXR1cm4gdGhpc30sZmlyZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hIWl9fTtyZXR1cm4gcH07
dmFyIGk9W10uc2xpY2U7Zi5leHRlbmQoe0RlZmVycmVkOmZ1bmN0aW9uKGEpe3ZhciBiPWYuQ2Fs
bGJhY2tzKCJvbmNlIG1lbW9yeSIpLGM9Zi5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksZD1mLkNh
bGxiYWNrcygibWVtb3J5IiksZT0icGVuZGluZyIsZz17cmVzb2x2ZTpiLHJlamVjdDpjLG5vdGlm
eTpkfSxoPXtkb25lOmIuYWRkLGZhaWw6Yy5hZGQscHJvZ3Jlc3M6ZC5hZGQsc3RhdGU6ZnVuY3Rp
b24oKXtyZXR1cm4gZX0saXNSZXNvbHZlZDpiLmZpcmVkLGlzUmVqZWN0ZWQ6Yy5maXJlZCx0aGVu
OmZ1bmN0aW9uKGEsYixjKXtpLmRvbmUoYSkuZmFpbChiKS5wcm9ncmVzcyhjKTtyZXR1cm4gdGhp
c30sYWx3YXlzOmZ1bmN0aW9uKCl7aS5kb25lLmFwcGx5KGksYXJndW1lbnRzKS5mYWlsLmFwcGx5
KGksYXJndW1lbnRzKTtyZXR1cm4gdGhpc30scGlwZTpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGYu
RGVmZXJyZWQoZnVuY3Rpb24oZCl7Zi5lYWNoKHtkb25lOlthLCJyZXNvbHZlIl0sZmFpbDpbYiwi
cmVqZWN0Il0scHJvZ3Jlc3M6W2MsIm5vdGlmeSJdfSxmdW5jdGlvbihhLGIpe3ZhciBjPWJbMF0s
ZT1iWzFdLGc7Zi5pc0Z1bmN0aW9uKGMpP2lbYV0oZnVuY3Rpb24oKXtnPWMuYXBwbHkodGhpcyxh
cmd1bWVudHMpLGcmJmYuaXNGdW5jdGlvbihnLnByb21pc2UpP2cucHJvbWlzZSgpLnRoZW4oZC5y
ZXNvbHZlLGQucmVqZWN0LGQubm90aWZ5KTpkW2UrIldpdGgiXSh0aGlzPT09aT9kOnRoaXMsW2dd
KX0pOmlbYV0oZFtlXSl9KX0pLnByb21pc2UoKX0scHJvbWlzZTpmdW5jdGlvbihhKXtpZihhPT1u
dWxsKWE9aDtlbHNlIGZvcih2YXIgYiBpbiBoKWFbYl09aFtiXTtyZXR1cm4gYX19LGk9aC5wcm9t
aXNlKHt9KSxqO2ZvcihqIGluIGcpaVtqXT1nW2pdLmZpcmUsaVtqKyJXaXRoIl09Z1tqXS5maXJl
V2l0aDtpLmRvbmUoZnVuY3Rpb24oKXtlPSJyZXNvbHZlZCJ9LGMuZGlzYWJsZSxkLmxvY2spLmZh
aWwoZnVuY3Rpb24oKXtlPSJyZWplY3RlZCJ9LGIuZGlzYWJsZSxkLmxvY2spLGEmJmEuY2FsbChp
LGkpO3JldHVybiBpfSx3aGVuOmZ1bmN0aW9uKGEpe2Z1bmN0aW9uIG0oYSl7cmV0dXJuIGZ1bmN0
aW9uKGIpe2VbYV09YXJndW1lbnRzLmxlbmd0aD4xP2kuY2FsbChhcmd1bWVudHMsMCk6YixqLm5v
dGlmeVdpdGgoayxlKX19ZnVuY3Rpb24gbChhKXtyZXR1cm4gZnVuY3Rpb24oYyl7YlthXT1hcmd1
bWVudHMubGVuZ3RoPjE/aS5jYWxsKGFyZ3VtZW50cywwKTpjLC0tZ3x8ai5yZXNvbHZlV2l0aChq
LGIpfX12YXIgYj1pLmNhbGwoYXJndW1lbnRzLDApLGM9MCxkPWIubGVuZ3RoLGU9QXJyYXkoZCks
Zz1kLGg9ZCxqPWQ8PTEmJmEmJmYuaXNGdW5jdGlvbihhLnByb21pc2UpP2E6Zi5EZWZlcnJlZCgp
LGs9ai5wcm9taXNlKCk7aWYoZD4xKXtmb3IoO2M8ZDtjKyspYltjXSYmYltjXS5wcm9taXNlJiZm
LmlzRnVuY3Rpb24oYltjXS5wcm9taXNlKT9iW2NdLnByb21pc2UoKS50aGVuKGwoYyksai5yZWpl
Y3QsbShjKSk6LS1nO2d8fGoucmVzb2x2ZVdpdGgoaixiKX1lbHNlIGohPT1hJiZqLnJlc29sdmVX
aXRoKGosZD9bYV06W10pO3JldHVybiBrfX0pLGYuc3VwcG9ydD1mdW5jdGlvbigpe3ZhciBiLGQs
ZSxnLGgsaSxqLGssbCxtLG4sbyxwPWMuY3JlYXRlRWxlbWVudCgiZGl2IikscT1jLmRvY3VtZW50
RWxlbWVudDtwLnNldEF0dHJpYnV0ZSgiY2xhc3NOYW1lIiwidCIpLHAuaW5uZXJIVE1MPSIgICA8
bGluay8+PHRhYmxlPjwvdGFibGU+PGEgaHJlZj0nL2EnIHN0eWxlPSd0b3A6MXB4O2Zsb2F0Omxl
ZnQ7b3BhY2l0eTouNTU7Jz5hPC9hPjxpbnB1dCB0eXBlPSdjaGVja2JveCcvPiIsZD1wLmdldEVs
ZW1lbnRzQnlUYWdOYW1lKCIqIiksZT1wLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJhIilbMF07aWYo
IWR8fCFkLmxlbmd0aHx8IWUpcmV0dXJue307Zz1jLmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpLGg9
Zy5hcHBlbmRDaGlsZChjLmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIpKSxpPXAuZ2V0RWxlbWVudHNC
eVRhZ05hbWUoImlucHV0IilbMF0sYj17bGVhZGluZ1doaXRlc3BhY2U6cC5maXJzdENoaWxkLm5v
ZGVUeXBlPT09Myx0Ym9keTohcC5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGJvZHkiKS5sZW5ndGgs
aHRtbFNlcmlhbGl6ZTohIXAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImxpbmsiKS5sZW5ndGgsc3R5
bGU6L3RvcC8udGVzdChlLmdldEF0dHJpYnV0ZSgic3R5bGUiKSksaHJlZk5vcm1hbGl6ZWQ6ZS5n
ZXRBdHRyaWJ1dGUoImhyZWYiKT09PSIvYSIsb3BhY2l0eTovXjAuNTUvLnRlc3QoZS5zdHlsZS5v
cGFjaXR5KSxjc3NGbG9hdDohIWUuc3R5bGUuY3NzRmxvYXQsY2hlY2tPbjppLnZhbHVlPT09Im9u
IixvcHRTZWxlY3RlZDpoLnNlbGVjdGVkLGdldFNldEF0dHJpYnV0ZTpwLmNsYXNzTmFtZSE9PSJ0
IixlbmN0eXBlOiEhYy5jcmVhdGVFbGVtZW50KCJmb3JtIikuZW5jdHlwZSxodG1sNUNsb25lOmMu
Y3JlYXRlRWxlbWVudCgibmF2IikuY2xvbmVOb2RlKCEwKS5vdXRlckhUTUwhPT0iPDpuYXY+PC86
bmF2PiIsc3VibWl0QnViYmxlczohMCxjaGFuZ2VCdWJibGVzOiEwLGZvY3VzaW5CdWJibGVzOiEx
LGRlbGV0ZUV4cGFuZG86ITAsbm9DbG9uZUV2ZW50OiEwLGlubGluZUJsb2NrTmVlZHNMYXlvdXQ6
ITEsc2hyaW5rV3JhcEJsb2NrczohMSxyZWxpYWJsZU1hcmdpblJpZ2h0OiEwLHBpeGVsTWFyZ2lu
OiEwfSxmLmJveE1vZGVsPWIuYm94TW9kZWw9Yy5jb21wYXRNb2RlPT09IkNTUzFDb21wYXQiLGku
Y2hlY2tlZD0hMCxiLm5vQ2xvbmVDaGVja2VkPWkuY2xvbmVOb2RlKCEwKS5jaGVja2VkLGcuZGlz
YWJsZWQ9ITAsYi5vcHREaXNhYmxlZD0haC5kaXNhYmxlZDt0cnl7ZGVsZXRlIHAudGVzdH1jYXRj
aChyKXtiLmRlbGV0ZUV4cGFuZG89ITF9IXAuYWRkRXZlbnRMaXN0ZW5lciYmcC5hdHRhY2hFdmVu
dCYmcC5maXJlRXZlbnQmJihwLmF0dGFjaEV2ZW50KCJvbmNsaWNrIixmdW5jdGlvbigpe2Iubm9D
bG9uZUV2ZW50PSExfSkscC5jbG9uZU5vZGUoITApLmZpcmVFdmVudCgib25jbGljayIpKSxpPWMu
Y3JlYXRlRWxlbWVudCgiaW5wdXQiKSxpLnZhbHVlPSJ0IixpLnNldEF0dHJpYnV0ZSgidHlwZSIs
InJhZGlvIiksYi5yYWRpb1ZhbHVlPWkudmFsdWU9PT0idCIsaS5zZXRBdHRyaWJ1dGUoImNoZWNr
ZWQiLCJjaGVja2VkIiksaS5zZXRBdHRyaWJ1dGUoIm5hbWUiLCJ0IikscC5hcHBlbmRDaGlsZChp
KSxqPWMuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGouYXBwZW5kQ2hpbGQocC5sYXN0Q2hpbGQp
LGIuY2hlY2tDbG9uZT1qLmNsb25lTm9kZSghMCkuY2xvbmVOb2RlKCEwKS5sYXN0Q2hpbGQuY2hl
Y2tlZCxiLmFwcGVuZENoZWNrZWQ9aS5jaGVja2VkLGoucmVtb3ZlQ2hpbGQoaSksai5hcHBlbmRD
aGlsZChwKTtpZihwLmF0dGFjaEV2ZW50KWZvcihuIGlue3N1Ym1pdDoxLGNoYW5nZToxLGZvY3Vz
aW46MX0pbT0ib24iK24sbz1tIGluIHAsb3x8KHAuc2V0QXR0cmlidXRlKG0sInJldHVybjsiKSxv
PXR5cGVvZiBwW21dPT0iZnVuY3Rpb24iKSxiW24rIkJ1YmJsZXMiXT1vO2oucmVtb3ZlQ2hpbGQo
cCksaj1nPWg9cD1pPW51bGwsZihmdW5jdGlvbigpe3ZhciBkLGUsZyxoLGksaixsLG0sbixxLHIs
cyx0LHU9Yy5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIpWzBdOyF1fHwobT0xLHQ9InBhZGRp
bmc6MDttYXJnaW46MDtib3JkZXI6IixyPSJwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7
d2lkdGg6MXB4O2hlaWdodDoxcHg7IixzPXQrIjA7dmlzaWJpbGl0eTpoaWRkZW47IixuPSJzdHls
ZT0nIityK3QrIjVweCBzb2xpZCAjMDAwOyIscT0iPGRpdiAiK24rImRpc3BsYXk6YmxvY2s7Jz48
ZGl2IHN0eWxlPSciK3QrIjA7ZGlzcGxheTpibG9jaztvdmVyZmxvdzpoaWRkZW47Jz48L2Rpdj48
L2Rpdj4iKyI8dGFibGUgIituKyInIGNlbGxwYWRkaW5nPScwJyBjZWxsc3BhY2luZz0nMCc+Iisi
PHRyPjx0ZD48L3RkPjwvdHI+PC90YWJsZT4iLGQ9Yy5jcmVhdGVFbGVtZW50KCJkaXYiKSxkLnN0
eWxlLmNzc1RleHQ9cysid2lkdGg6MDtoZWlnaHQ6MDtwb3NpdGlvbjpzdGF0aWM7dG9wOjA7bWFy
Z2luLXRvcDoiK20rInB4Iix1Lmluc2VydEJlZm9yZShkLHUuZmlyc3RDaGlsZCkscD1jLmNyZWF0
ZUVsZW1lbnQoImRpdiIpLGQuYXBwZW5kQ2hpbGQocCkscC5pbm5lckhUTUw9Ijx0YWJsZT48dHI+
PHRkIHN0eWxlPSciK3QrIjA7ZGlzcGxheTpub25lJz48L3RkPjx0ZD50PC90ZD48L3RyPjwvdGFi
bGU+IixrPXAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIiksbz1rWzBdLm9mZnNldEhlaWdodD09
PTAsa1swXS5zdHlsZS5kaXNwbGF5PSIiLGtbMV0uc3R5bGUuZGlzcGxheT0ibm9uZSIsYi5yZWxp
YWJsZUhpZGRlbk9mZnNldHM9byYma1swXS5vZmZzZXRIZWlnaHQ9PT0wLGEuZ2V0Q29tcHV0ZWRT
dHlsZSYmKHAuaW5uZXJIVE1MPSIiLGw9Yy5jcmVhdGVFbGVtZW50KCJkaXYiKSxsLnN0eWxlLndp
ZHRoPSIwIixsLnN0eWxlLm1hcmdpblJpZ2h0PSIwIixwLnN0eWxlLndpZHRoPSIycHgiLHAuYXBw
ZW5kQ2hpbGQobCksYi5yZWxpYWJsZU1hcmdpblJpZ2h0PShwYXJzZUludCgoYS5nZXRDb21wdXRl
ZFN0eWxlKGwsbnVsbCl8fHttYXJnaW5SaWdodDowfSkubWFyZ2luUmlnaHQsMTApfHwwKT09PTAp
LHR5cGVvZiBwLnN0eWxlLnpvb20hPSJ1bmRlZmluZWQiJiYocC5pbm5lckhUTUw9IiIscC5zdHls
ZS53aWR0aD1wLnN0eWxlLnBhZGRpbmc9IjFweCIscC5zdHlsZS5ib3JkZXI9MCxwLnN0eWxlLm92
ZXJmbG93PSJoaWRkZW4iLHAuc3R5bGUuZGlzcGxheT0iaW5saW5lIixwLnN0eWxlLnpvb209MSxi
LmlubGluZUJsb2NrTmVlZHNMYXlvdXQ9cC5vZmZzZXRXaWR0aD09PTMscC5zdHlsZS5kaXNwbGF5
PSJibG9jayIscC5zdHlsZS5vdmVyZmxvdz0idmlzaWJsZSIscC5pbm5lckhUTUw9IjxkaXYgc3R5
bGU9J3dpZHRoOjVweDsnPjwvZGl2PiIsYi5zaHJpbmtXcmFwQmxvY2tzPXAub2Zmc2V0V2lkdGgh
PT0zKSxwLnN0eWxlLmNzc1RleHQ9citzLHAuaW5uZXJIVE1MPXEsZT1wLmZpcnN0Q2hpbGQsZz1l
LmZpcnN0Q2hpbGQsaT1lLm5leHRTaWJsaW5nLmZpcnN0Q2hpbGQuZmlyc3RDaGlsZCxqPXtkb2Vz
Tm90QWRkQm9yZGVyOmcub2Zmc2V0VG9wIT09NSxkb2VzQWRkQm9yZGVyRm9yVGFibGVBbmRDZWxs
czppLm9mZnNldFRvcD09PTV9LGcuc3R5bGUucG9zaXRpb249ImZpeGVkIixnLnN0eWxlLnRvcD0i
MjBweCIsai5maXhlZFBvc2l0aW9uPWcub2Zmc2V0VG9wPT09MjB8fGcub2Zmc2V0VG9wPT09MTUs
Zy5zdHlsZS5wb3NpdGlvbj1nLnN0eWxlLnRvcD0iIixlLnN0eWxlLm92ZXJmbG93PSJoaWRkZW4i
LGUuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIixqLnN1YnRyYWN0c0JvcmRlckZvck92ZXJmbG93
Tm90VmlzaWJsZT1nLm9mZnNldFRvcD09PS01LGouZG9lc05vdEluY2x1ZGVNYXJnaW5JbkJvZHlP
ZmZzZXQ9dS5vZmZzZXRUb3AhPT1tLGEuZ2V0Q29tcHV0ZWRTdHlsZSYmKHAuc3R5bGUubWFyZ2lu
VG9wPSIxJSIsYi5waXhlbE1hcmdpbj0oYS5nZXRDb21wdXRlZFN0eWxlKHAsbnVsbCl8fHttYXJn
aW5Ub3A6MH0pLm1hcmdpblRvcCE9PSIxJSIpLHR5cGVvZiBkLnN0eWxlLnpvb20hPSJ1bmRlZmlu
ZWQiJiYoZC5zdHlsZS56b29tPTEpLHUucmVtb3ZlQ2hpbGQoZCksbD1wPWQ9bnVsbCxmLmV4dGVu
ZChiLGopKX0pO3JldHVybiBifSgpO3ZhciBqPS9eKD86XHsuKlx9fFxbLipcXSkkLyxrPS8oW0Et
Wl0pL2c7Zi5leHRlbmQoe2NhY2hlOnt9LHV1aWQ6MCxleHBhbmRvOiJqUXVlcnkiKyhmLmZuLmpx
dWVyeStNYXRoLnJhbmRvbSgpKS5yZXBsYWNlKC9cRC9nLCIiKSxub0RhdGE6e2VtYmVkOiEwLG9i
amVjdDoiY2xzaWQ6RDI3Q0RCNkUtQUU2RC0xMWNmLTk2QjgtNDQ0NTUzNTQwMDAwIixhcHBsZXQ6
ITB9LGhhc0RhdGE6ZnVuY3Rpb24oYSl7YT1hLm5vZGVUeXBlP2YuY2FjaGVbYVtmLmV4cGFuZG9d
XTphW2YuZXhwYW5kb107cmV0dXJuISFhJiYhbShhKX0sZGF0YTpmdW5jdGlvbihhLGMsZCxlKXtp
ZighIWYuYWNjZXB0RGF0YShhKSl7dmFyIGcsaCxpLGo9Zi5leHBhbmRvLGs9dHlwZW9mIGM9PSJz
dHJpbmciLGw9YS5ub2RlVHlwZSxtPWw/Zi5jYWNoZTphLG49bD9hW2pdOmFbal0mJmosbz1jPT09
ImV2ZW50cyI7aWYoKCFufHwhbVtuXXx8IW8mJiFlJiYhbVtuXS5kYXRhKSYmayYmZD09PWIpcmV0
dXJuO258fChsP2Fbal09bj0rK2YudXVpZDpuPWopLG1bbl18fChtW25dPXt9LGx8fChtW25dLnRv
SlNPTj1mLm5vb3ApKTtpZih0eXBlb2YgYz09Im9iamVjdCJ8fHR5cGVvZiBjPT0iZnVuY3Rpb24i
KWU/bVtuXT1mLmV4dGVuZChtW25dLGMpOm1bbl0uZGF0YT1mLmV4dGVuZChtW25dLmRhdGEsYyk7
Zz1oPW1bbl0sZXx8KGguZGF0YXx8KGguZGF0YT17fSksaD1oLmRhdGEpLGQhPT1iJiYoaFtmLmNh
bWVsQ2FzZShjKV09ZCk7aWYobyYmIWhbY10pcmV0dXJuIGcuZXZlbnRzO2s/KGk9aFtjXSxpPT1u
dWxsJiYoaT1oW2YuY2FtZWxDYXNlKGMpXSkpOmk9aDtyZXR1cm4gaX19LHJlbW92ZURhdGE6ZnVu
Y3Rpb24oYSxiLGMpe2lmKCEhZi5hY2NlcHREYXRhKGEpKXt2YXIgZCxlLGcsaD1mLmV4cGFuZG8s
aT1hLm5vZGVUeXBlLGo9aT9mLmNhY2hlOmEsaz1pP2FbaF06aDtpZighaltrXSlyZXR1cm47aWYo
Yil7ZD1jP2pba106altrXS5kYXRhO2lmKGQpe2YuaXNBcnJheShiKXx8KGIgaW4gZD9iPVtiXToo
Yj1mLmNhbWVsQ2FzZShiKSxiIGluIGQ/Yj1bYl06Yj1iLnNwbGl0KCIgIikpKTtmb3IoZT0wLGc9
Yi5sZW5ndGg7ZTxnO2UrKylkZWxldGUgZFtiW2VdXTtpZighKGM/bTpmLmlzRW1wdHlPYmplY3Qp
KGQpKXJldHVybn19aWYoIWMpe2RlbGV0ZSBqW2tdLmRhdGE7aWYoIW0oaltrXSkpcmV0dXJufWYu
c3VwcG9ydC5kZWxldGVFeHBhbmRvfHwhai5zZXRJbnRlcnZhbD9kZWxldGUgaltrXTpqW2tdPW51
bGwsaSYmKGYuc3VwcG9ydC5kZWxldGVFeHBhbmRvP2RlbGV0ZSBhW2hdOmEucmVtb3ZlQXR0cmli
dXRlP2EucmVtb3ZlQXR0cmlidXRlKGgpOmFbaF09bnVsbCl9fSxfZGF0YTpmdW5jdGlvbihhLGIs
Yyl7cmV0dXJuIGYuZGF0YShhLGIsYywhMCl9LGFjY2VwdERhdGE6ZnVuY3Rpb24oYSl7aWYoYS5u
b2RlTmFtZSl7dmFyIGI9Zi5ub0RhdGFbYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXTtpZihiKXJl
dHVybiBiIT09ITAmJmEuZ2V0QXR0cmlidXRlKCJjbGFzc2lkIik9PT1ifXJldHVybiEwfX0pLGYu
Zm4uZXh0ZW5kKHtkYXRhOmZ1bmN0aW9uKGEsYyl7dmFyIGQsZSxnLGgsaSxqPXRoaXNbMF0saz0w
LG09bnVsbDtpZihhPT09Yil7aWYodGhpcy5sZW5ndGgpe209Zi5kYXRhKGopO2lmKGoubm9kZVR5
cGU9PT0xJiYhZi5fZGF0YShqLCJwYXJzZWRBdHRycyIpKXtnPWouYXR0cmlidXRlcztmb3IoaT1n
Lmxlbmd0aDtrPGk7aysrKWg9Z1trXS5uYW1lLGguaW5kZXhPZigiZGF0YS0iKT09PTAmJihoPWYu
Y2FtZWxDYXNlKGguc3Vic3RyaW5nKDUpKSxsKGosaCxtW2hdKSk7Zi5fZGF0YShqLCJwYXJzZWRB
dHRycyIsITApfX1yZXR1cm4gbX1pZih0eXBlb2YgYT09Im9iamVjdCIpcmV0dXJuIHRoaXMuZWFj
aChmdW5jdGlvbigpe2YuZGF0YSh0aGlzLGEpfSk7ZD1hLnNwbGl0KCIuIiwyKSxkWzFdPWRbMV0/
Ii4iK2RbMV06IiIsZT1kWzFdKyIhIjtyZXR1cm4gZi5hY2Nlc3ModGhpcyxmdW5jdGlvbihjKXtp
ZihjPT09Yil7bT10aGlzLnRyaWdnZXJIYW5kbGVyKCJnZXREYXRhIitlLFtkWzBdXSksbT09PWIm
JmomJihtPWYuZGF0YShqLGEpLG09bChqLGEsbSkpO3JldHVybiBtPT09YiYmZFsxXT90aGlzLmRh
dGEoZFswXSk6bX1kWzFdPWMsdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGI9Zih0aGlzKTtiLnRy
aWdnZXJIYW5kbGVyKCJzZXREYXRhIitlLGQpLGYuZGF0YSh0aGlzLGEsYyksYi50cmlnZ2VySGFu
ZGxlcigiY2hhbmdlRGF0YSIrZSxkKX0pfSxudWxsLGMsYXJndW1lbnRzLmxlbmd0aD4xLG51bGws
ITEpfSxyZW1vdmVEYXRhOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtm
LnJlbW92ZURhdGEodGhpcyxhKX0pfX0pLGYuZXh0ZW5kKHtfbWFyazpmdW5jdGlvbihhLGIpe2Em
JihiPShifHwiZngiKSsibWFyayIsZi5fZGF0YShhLGIsKGYuX2RhdGEoYSxiKXx8MCkrMSkpfSxf
dW5tYXJrOmZ1bmN0aW9uKGEsYixjKXthIT09ITAmJihjPWIsYj1hLGE9ITEpO2lmKGIpe2M9Y3x8
ImZ4Ijt2YXIgZD1jKyJtYXJrIixlPWE/MDooZi5fZGF0YShiLGQpfHwxKS0xO2U/Zi5fZGF0YShi
LGQsZSk6KGYucmVtb3ZlRGF0YShiLGQsITApLG4oYixjLCJtYXJrIikpfX0scXVldWU6ZnVuY3Rp
b24oYSxiLGMpe3ZhciBkO2lmKGEpe2I9KGJ8fCJmeCIpKyJxdWV1ZSIsZD1mLl9kYXRhKGEsYiks
YyYmKCFkfHxmLmlzQXJyYXkoYyk/ZD1mLl9kYXRhKGEsYixmLm1ha2VBcnJheShjKSk6ZC5wdXNo
KGMpKTtyZXR1cm4gZHx8W119fSxkZXF1ZXVlOmZ1bmN0aW9uKGEsYil7Yj1ifHwiZngiO3ZhciBj
PWYucXVldWUoYSxiKSxkPWMuc2hpZnQoKSxlPXt9O2Q9PT0iaW5wcm9ncmVzcyImJihkPWMuc2hp
ZnQoKSksZCYmKGI9PT0iZngiJiZjLnVuc2hpZnQoImlucHJvZ3Jlc3MiKSxmLl9kYXRhKGEsYisi
LnJ1biIsZSksZC5jYWxsKGEsZnVuY3Rpb24oKXtmLmRlcXVldWUoYSxiKX0sZSkpLGMubGVuZ3Ro
fHwoZi5yZW1vdmVEYXRhKGEsYisicXVldWUgIitiKyIucnVuIiwhMCksbihhLGIsInF1ZXVlIikp
fX0pLGYuZm4uZXh0ZW5kKHtxdWV1ZTpmdW5jdGlvbihhLGMpe3ZhciBkPTI7dHlwZW9mIGEhPSJz
dHJpbmciJiYoYz1hLGE9ImZ4IixkLS0pO2lmKGFyZ3VtZW50cy5sZW5ndGg8ZClyZXR1cm4gZi5x
dWV1ZSh0aGlzWzBdLGEpO3JldHVybiBjPT09Yj90aGlzOnRoaXMuZWFjaChmdW5jdGlvbigpe3Zh
ciBiPWYucXVldWUodGhpcyxhLGMpO2E9PT0iZngiJiZiWzBdIT09ImlucHJvZ3Jlc3MiJiZmLmRl
cXVldWUodGhpcyxhKX0pfSxkZXF1ZXVlOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmVhY2goZnVu
Y3Rpb24oKXtmLmRlcXVldWUodGhpcyxhKX0pfSxkZWxheTpmdW5jdGlvbihhLGIpe2E9Zi5meD9m
LmZ4LnNwZWVkc1thXXx8YTphLGI9Ynx8ImZ4IjtyZXR1cm4gdGhpcy5xdWV1ZShiLGZ1bmN0aW9u
KGIsYyl7dmFyIGQ9c2V0VGltZW91dChiLGEpO2Muc3RvcD1mdW5jdGlvbigpe2NsZWFyVGltZW91
dChkKX19KX0sY2xlYXJRdWV1ZTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5xdWV1ZShhfHwiZngi
LFtdKX0scHJvbWlzZTpmdW5jdGlvbihhLGMpe2Z1bmN0aW9uIG0oKXstLWh8fGQucmVzb2x2ZVdp
dGgoZSxbZV0pfXR5cGVvZiBhIT0ic3RyaW5nIiYmKGM9YSxhPWIpLGE9YXx8ImZ4Ijt2YXIgZD1m
LkRlZmVycmVkKCksZT10aGlzLGc9ZS5sZW5ndGgsaD0xLGk9YSsiZGVmZXIiLGo9YSsicXVldWUi
LGs9YSsibWFyayIsbDt3aGlsZShnLS0paWYobD1mLmRhdGEoZVtnXSxpLGIsITApfHwoZi5kYXRh
KGVbZ10saixiLCEwKXx8Zi5kYXRhKGVbZ10sayxiLCEwKSkmJmYuZGF0YShlW2ddLGksZi5DYWxs
YmFja3MoIm9uY2UgbWVtb3J5IiksITApKWgrKyxsLmFkZChtKTttKCk7cmV0dXJuIGQucHJvbWlz
ZShjKX19KTt2YXIgbz0vW1xuXHRccl0vZyxwPS9ccysvLHE9L1xyL2cscj0vXig/OmJ1dHRvbnxp
bnB1dCkkL2kscz0vXig/OmJ1dHRvbnxpbnB1dHxvYmplY3R8c2VsZWN0fHRleHRhcmVhKSQvaSx0
PS9eYSg/OnJlYSk/JC9pLHU9L14oPzphdXRvZm9jdXN8YXV0b3BsYXl8YXN5bmN8Y2hlY2tlZHxj
b250cm9sc3xkZWZlcnxkaXNhYmxlZHxoaWRkZW58bG9vcHxtdWx0aXBsZXxvcGVufHJlYWRvbmx5
fHJlcXVpcmVkfHNjb3BlZHxzZWxlY3RlZCkkL2ksdj1mLnN1cHBvcnQuZ2V0U2V0QXR0cmlidXRl
LHcseCx5O2YuZm4uZXh0ZW5kKHthdHRyOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGYuYWNjZXNzKHRo
aXMsZi5hdHRyLGEsYixhcmd1bWVudHMubGVuZ3RoPjEpfSxyZW1vdmVBdHRyOmZ1bmN0aW9uKGEp
e3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtmLnJlbW92ZUF0dHIodGhpcyxhKX0pfSxwcm9w
OmZ1bmN0aW9uKGEsYil7cmV0dXJuIGYuYWNjZXNzKHRoaXMsZi5wcm9wLGEsYixhcmd1bWVudHMu
bGVuZ3RoPjEpfSxyZW1vdmVQcm9wOmZ1bmN0aW9uKGEpe2E9Zi5wcm9wRml4W2FdfHxhO3JldHVy
biB0aGlzLmVhY2goZnVuY3Rpb24oKXt0cnl7dGhpc1thXT1iLGRlbGV0ZSB0aGlzW2FdfWNhdGNo
KGMpe319KX0sYWRkQ2xhc3M6ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGUsZyxoLGk7aWYoZi5pc0Z1
bmN0aW9uKGEpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYil7Zih0aGlzKS5hZGRDbGFzcyhh
LmNhbGwodGhpcyxiLHRoaXMuY2xhc3NOYW1lKSl9KTtpZihhJiZ0eXBlb2YgYT09InN0cmluZyIp
e2I9YS5zcGxpdChwKTtmb3IoYz0wLGQ9dGhpcy5sZW5ndGg7YzxkO2MrKyl7ZT10aGlzW2NdO2lm
KGUubm9kZVR5cGU9PT0xKWlmKCFlLmNsYXNzTmFtZSYmYi5sZW5ndGg9PT0xKWUuY2xhc3NOYW1l
PWE7ZWxzZXtnPSIgIitlLmNsYXNzTmFtZSsiICI7Zm9yKGg9MCxpPWIubGVuZ3RoO2g8aTtoKysp
fmcuaW5kZXhPZigiICIrYltoXSsiICIpfHwoZys9YltoXSsiICIpO2UuY2xhc3NOYW1lPWYudHJp
bShnKX19fXJldHVybiB0aGlzfSxyZW1vdmVDbGFzczpmdW5jdGlvbihhKXt2YXIgYyxkLGUsZyxo
LGksajtpZihmLmlzRnVuY3Rpb24oYSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXtmKHRo
aXMpLnJlbW92ZUNsYXNzKGEuY2FsbCh0aGlzLGIsdGhpcy5jbGFzc05hbWUpKX0pO2lmKGEmJnR5
cGVvZiBhPT0ic3RyaW5nInx8YT09PWIpe2M9KGF8fCIiKS5zcGxpdChwKTtmb3IoZD0wLGU9dGhp
cy5sZW5ndGg7ZDxlO2QrKyl7Zz10aGlzW2RdO2lmKGcubm9kZVR5cGU9PT0xJiZnLmNsYXNzTmFt
ZSlpZihhKXtoPSgiICIrZy5jbGFzc05hbWUrIiAiKS5yZXBsYWNlKG8sIiAiKTtmb3IoaT0wLGo9
Yy5sZW5ndGg7aTxqO2krKyloPWgucmVwbGFjZSgiICIrY1tpXSsiICIsIiAiKTtnLmNsYXNzTmFt
ZT1mLnRyaW0oaCl9ZWxzZSBnLmNsYXNzTmFtZT0iIn19cmV0dXJuIHRoaXN9LHRvZ2dsZUNsYXNz
OmZ1bmN0aW9uKGEsYil7dmFyIGM9dHlwZW9mIGEsZD10eXBlb2YgYj09ImJvb2xlYW4iO2lmKGYu
aXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGMpe2YodGhpcykudG9nZ2xl
Q2xhc3MoYS5jYWxsKHRoaXMsYyx0aGlzLmNsYXNzTmFtZSxiKSxiKX0pO3JldHVybiB0aGlzLmVh
Y2goZnVuY3Rpb24oKXtpZihjPT09InN0cmluZyIpe3ZhciBlLGc9MCxoPWYodGhpcyksaT1iLGo9
YS5zcGxpdChwKTt3aGlsZShlPWpbZysrXSlpPWQ/aTohaC5oYXNDbGFzcyhlKSxoW2k/ImFkZENs
YXNzIjoicmVtb3ZlQ2xhc3MiXShlKX1lbHNlIGlmKGM9PT0idW5kZWZpbmVkInx8Yz09PSJib29s
ZWFuIil0aGlzLmNsYXNzTmFtZSYmZi5fZGF0YSh0aGlzLCJfX2NsYXNzTmFtZV9fIix0aGlzLmNs
YXNzTmFtZSksdGhpcy5jbGFzc05hbWU9dGhpcy5jbGFzc05hbWV8fGE9PT0hMT8iIjpmLl9kYXRh
KHRoaXMsIl9fY2xhc3NOYW1lX18iKXx8IiJ9KX0saGFzQ2xhc3M6ZnVuY3Rpb24oYSl7dmFyIGI9
IiAiK2ErIiAiLGM9MCxkPXRoaXMubGVuZ3RoO2Zvcig7YzxkO2MrKylpZih0aGlzW2NdLm5vZGVU
eXBlPT09MSYmKCIgIit0aGlzW2NdLmNsYXNzTmFtZSsiICIpLnJlcGxhY2UobywiICIpLmluZGV4
T2YoYik+LTEpcmV0dXJuITA7cmV0dXJuITF9LHZhbDpmdW5jdGlvbihhKXt2YXIgYyxkLGUsZz10
aGlzWzBdO3tpZighIWFyZ3VtZW50cy5sZW5ndGgpe2U9Zi5pc0Z1bmN0aW9uKGEpO3JldHVybiB0
aGlzLmVhY2goZnVuY3Rpb24oZCl7dmFyIGc9Zih0aGlzKSxoO2lmKHRoaXMubm9kZVR5cGU9PT0x
KXtlP2g9YS5jYWxsKHRoaXMsZCxnLnZhbCgpKTpoPWEsaD09bnVsbD9oPSIiOnR5cGVvZiBoPT0i
bnVtYmVyIj9oKz0iIjpmLmlzQXJyYXkoaCkmJihoPWYubWFwKGgsZnVuY3Rpb24oYSl7cmV0dXJu
IGE9PW51bGw/IiI6YSsiIn0pKSxjPWYudmFsSG9va3NbdGhpcy50eXBlXXx8Zi52YWxIb29rc1t0
aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldO2lmKCFjfHwhKCJzZXQiaW4gYyl8fGMuc2V0KHRo
aXMsaCwidmFsdWUiKT09PWIpdGhpcy52YWx1ZT1ofX0pfWlmKGcpe2M9Zi52YWxIb29rc1tnLnR5
cGVdfHxmLnZhbEhvb2tzW2cubm9kZU5hbWUudG9Mb3dlckNhc2UoKV07aWYoYyYmImdldCJpbiBj
JiYoZD1jLmdldChnLCJ2YWx1ZSIpKSE9PWIpcmV0dXJuIGQ7ZD1nLnZhbHVlO3JldHVybiB0eXBl
b2YgZD09InN0cmluZyI/ZC5yZXBsYWNlKHEsIiIpOmQ9PW51bGw/IiI6ZH19fX0pLGYuZXh0ZW5k
KHt2YWxIb29rczp7b3B0aW9uOntnZXQ6ZnVuY3Rpb24oYSl7dmFyIGI9YS5hdHRyaWJ1dGVzLnZh
bHVlO3JldHVybiFifHxiLnNwZWNpZmllZD9hLnZhbHVlOmEudGV4dH19LHNlbGVjdDp7Z2V0OmZ1
bmN0aW9uKGEpe3ZhciBiLGMsZCxlLGc9YS5zZWxlY3RlZEluZGV4LGg9W10saT1hLm9wdGlvbnMs
aj1hLnR5cGU9PT0ic2VsZWN0LW9uZSI7aWYoZzwwKXJldHVybiBudWxsO2M9aj9nOjAsZD1qP2cr
MTppLmxlbmd0aDtmb3IoO2M8ZDtjKyspe2U9aVtjXTtpZihlLnNlbGVjdGVkJiYoZi5zdXBwb3J0
Lm9wdERpc2FibGVkPyFlLmRpc2FibGVkOmUuZ2V0QXR0cmlidXRlKCJkaXNhYmxlZCIpPT09bnVs
bCkmJighZS5wYXJlbnROb2RlLmRpc2FibGVkfHwhZi5ub2RlTmFtZShlLnBhcmVudE5vZGUsIm9w
dGdyb3VwIikpKXtiPWYoZSkudmFsKCk7aWYoailyZXR1cm4gYjtoLnB1c2goYil9fWlmKGomJiFo
Lmxlbmd0aCYmaS5sZW5ndGgpcmV0dXJuIGYoaVtnXSkudmFsKCk7cmV0dXJuIGh9LHNldDpmdW5j
dGlvbihhLGIpe3ZhciBjPWYubWFrZUFycmF5KGIpO2YoYSkuZmluZCgib3B0aW9uIikuZWFjaChm
dW5jdGlvbigpe3RoaXMuc2VsZWN0ZWQ9Zi5pbkFycmF5KGYodGhpcykudmFsKCksYyk+PTB9KSxj
Lmxlbmd0aHx8KGEuc2VsZWN0ZWRJbmRleD0tMSk7cmV0dXJuIGN9fX0sYXR0ckZuOnt2YWw6ITAs
Y3NzOiEwLGh0bWw6ITAsdGV4dDohMCxkYXRhOiEwLHdpZHRoOiEwLGhlaWdodDohMCxvZmZzZXQ6
ITB9LGF0dHI6ZnVuY3Rpb24oYSxjLGQsZSl7dmFyIGcsaCxpLGo9YS5ub2RlVHlwZTtpZighIWEm
JmohPT0zJiZqIT09OCYmaiE9PTIpe2lmKGUmJmMgaW4gZi5hdHRyRm4pcmV0dXJuIGYoYSlbY10o
ZCk7aWYodHlwZW9mIGEuZ2V0QXR0cmlidXRlPT0idW5kZWZpbmVkIilyZXR1cm4gZi5wcm9wKGEs
YyxkKTtpPWohPT0xfHwhZi5pc1hNTERvYyhhKSxpJiYoYz1jLnRvTG93ZXJDYXNlKCksaD1mLmF0
dHJIb29rc1tjXXx8KHUudGVzdChjKT94OncpKTtpZihkIT09Yil7aWYoZD09PW51bGwpe2YucmVt
b3ZlQXR0cihhLGMpO3JldHVybn1pZihoJiYic2V0ImluIGgmJmkmJihnPWguc2V0KGEsZCxjKSkh
PT1iKXJldHVybiBnO2Euc2V0QXR0cmlidXRlKGMsIiIrZCk7cmV0dXJuIGR9aWYoaCYmImdldCJp
biBoJiZpJiYoZz1oLmdldChhLGMpKSE9PW51bGwpcmV0dXJuIGc7Zz1hLmdldEF0dHJpYnV0ZShj
KTtyZXR1cm4gZz09PW51bGw/YjpnfX0scmVtb3ZlQXR0cjpmdW5jdGlvbihhLGIpe3ZhciBjLGQs
ZSxnLGgsaT0wO2lmKGImJmEubm9kZVR5cGU9PT0xKXtkPWIudG9Mb3dlckNhc2UoKS5zcGxpdChw
KSxnPWQubGVuZ3RoO2Zvcig7aTxnO2krKyllPWRbaV0sZSYmKGM9Zi5wcm9wRml4W2VdfHxlLGg9
dS50ZXN0KGUpLGh8fGYuYXR0cihhLGUsIiIpLGEucmVtb3ZlQXR0cmlidXRlKHY/ZTpjKSxoJiZj
IGluIGEmJihhW2NdPSExKSl9fSxhdHRySG9va3M6e3R5cGU6e3NldDpmdW5jdGlvbihhLGIpe2lm
KHIudGVzdChhLm5vZGVOYW1lKSYmYS5wYXJlbnROb2RlKWYuZXJyb3IoInR5cGUgcHJvcGVydHkg
Y2FuJ3QgYmUgY2hhbmdlZCIpO2Vsc2UgaWYoIWYuc3VwcG9ydC5yYWRpb1ZhbHVlJiZiPT09InJh
ZGlvIiYmZi5ub2RlTmFtZShhLCJpbnB1dCIpKXt2YXIgYz1hLnZhbHVlO2Euc2V0QXR0cmlidXRl
KCJ0eXBlIixiKSxjJiYoYS52YWx1ZT1jKTtyZXR1cm4gYn19fSx2YWx1ZTp7Z2V0OmZ1bmN0aW9u
KGEsYil7aWYodyYmZi5ub2RlTmFtZShhLCJidXR0b24iKSlyZXR1cm4gdy5nZXQoYSxiKTtyZXR1
cm4gYiBpbiBhP2EudmFsdWU6bnVsbH0sc2V0OmZ1bmN0aW9uKGEsYixjKXtpZih3JiZmLm5vZGVO
YW1lKGEsImJ1dHRvbiIpKXJldHVybiB3LnNldChhLGIsYyk7YS52YWx1ZT1ifX19LHByb3BGaXg6
e3RhYmluZGV4OiJ0YWJJbmRleCIscmVhZG9ubHk6InJlYWRPbmx5IiwiZm9yIjoiaHRtbEZvciIs
ImNsYXNzIjoiY2xhc3NOYW1lIixtYXhsZW5ndGg6Im1heExlbmd0aCIsY2VsbHNwYWNpbmc6ImNl
bGxTcGFjaW5nIixjZWxscGFkZGluZzoiY2VsbFBhZGRpbmciLHJvd3NwYW46InJvd1NwYW4iLGNv
bHNwYW46ImNvbFNwYW4iLHVzZW1hcDoidXNlTWFwIixmcmFtZWJvcmRlcjoiZnJhbWVCb3JkZXIi
LGNvbnRlbnRlZGl0YWJsZToiY29udGVudEVkaXRhYmxlIn0scHJvcDpmdW5jdGlvbihhLGMsZCl7
dmFyIGUsZyxoLGk9YS5ub2RlVHlwZTtpZighIWEmJmkhPT0zJiZpIT09OCYmaSE9PTIpe2g9aSE9
PTF8fCFmLmlzWE1MRG9jKGEpLGgmJihjPWYucHJvcEZpeFtjXXx8YyxnPWYucHJvcEhvb2tzW2Nd
KTtyZXR1cm4gZCE9PWI/ZyYmInNldCJpbiBnJiYoZT1nLnNldChhLGQsYykpIT09Yj9lOmFbY109
ZDpnJiYiZ2V0ImluIGcmJihlPWcuZ2V0KGEsYykpIT09bnVsbD9lOmFbY119fSxwcm9wSG9va3M6
e3RhYkluZGV4OntnZXQ6ZnVuY3Rpb24oYSl7dmFyIGM9YS5nZXRBdHRyaWJ1dGVOb2RlKCJ0YWJp
bmRleCIpO3JldHVybiBjJiZjLnNwZWNpZmllZD9wYXJzZUludChjLnZhbHVlLDEwKTpzLnRlc3Qo
YS5ub2RlTmFtZSl8fHQudGVzdChhLm5vZGVOYW1lKSYmYS5ocmVmPzA6Yn19fX0pLGYuYXR0ckhv
b2tzLnRhYmluZGV4PWYucHJvcEhvb2tzLnRhYkluZGV4LHg9e2dldDpmdW5jdGlvbihhLGMpe3Zh
ciBkLGU9Zi5wcm9wKGEsYyk7cmV0dXJuIGU9PT0hMHx8dHlwZW9mIGUhPSJib29sZWFuIiYmKGQ9
YS5nZXRBdHRyaWJ1dGVOb2RlKGMpKSYmZC5ub2RlVmFsdWUhPT0hMT9jLnRvTG93ZXJDYXNlKCk6
Yn0sc2V0OmZ1bmN0aW9uKGEsYixjKXt2YXIgZDtiPT09ITE/Zi5yZW1vdmVBdHRyKGEsYyk6KGQ9
Zi5wcm9wRml4W2NdfHxjLGQgaW4gYSYmKGFbZF09ITApLGEuc2V0QXR0cmlidXRlKGMsYy50b0xv
d2VyQ2FzZSgpKSk7cmV0dXJuIGN9fSx2fHwoeT17bmFtZTohMCxpZDohMCxjb29yZHM6ITB9LHc9
Zi52YWxIb29rcy5idXR0b249e2dldDpmdW5jdGlvbihhLGMpe3ZhciBkO2Q9YS5nZXRBdHRyaWJ1
dGVOb2RlKGMpO3JldHVybiBkJiYoeVtjXT9kLm5vZGVWYWx1ZSE9PSIiOmQuc3BlY2lmaWVkKT9k
Lm5vZGVWYWx1ZTpifSxzZXQ6ZnVuY3Rpb24oYSxiLGQpe3ZhciBlPWEuZ2V0QXR0cmlidXRlTm9k
ZShkKTtlfHwoZT1jLmNyZWF0ZUF0dHJpYnV0ZShkKSxhLnNldEF0dHJpYnV0ZU5vZGUoZSkpO3Jl
dHVybiBlLm5vZGVWYWx1ZT1iKyIifX0sZi5hdHRySG9va3MudGFiaW5kZXguc2V0PXcuc2V0LGYu
ZWFjaChbIndpZHRoIiwiaGVpZ2h0Il0sZnVuY3Rpb24oYSxiKXtmLmF0dHJIb29rc1tiXT1mLmV4
dGVuZChmLmF0dHJIb29rc1tiXSx7c2V0OmZ1bmN0aW9uKGEsYyl7aWYoYz09PSIiKXthLnNldEF0
dHJpYnV0ZShiLCJhdXRvIik7cmV0dXJuIGN9fX0pfSksZi5hdHRySG9va3MuY29udGVudGVkaXRh
YmxlPXtnZXQ6dy5nZXQsc2V0OmZ1bmN0aW9uKGEsYixjKXtiPT09IiImJihiPSJmYWxzZSIpLHcu
c2V0KGEsYixjKX19KSxmLnN1cHBvcnQuaHJlZk5vcm1hbGl6ZWR8fGYuZWFjaChbImhyZWYiLCJz
cmMiLCJ3aWR0aCIsImhlaWdodCJdLGZ1bmN0aW9uKGEsYyl7Zi5hdHRySG9va3NbY109Zi5leHRl
bmQoZi5hdHRySG9va3NbY10se2dldDpmdW5jdGlvbihhKXt2YXIgZD1hLmdldEF0dHJpYnV0ZShj
LDIpO3JldHVybiBkPT09bnVsbD9iOmR9fSl9KSxmLnN1cHBvcnQuc3R5bGV8fChmLmF0dHJIb29r
cy5zdHlsZT17Z2V0OmZ1bmN0aW9uKGEpe3JldHVybiBhLnN0eWxlLmNzc1RleHQudG9Mb3dlckNh
c2UoKXx8Yn0sc2V0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIGEuc3R5bGUuY3NzVGV4dD0iIitifX0p
LGYuc3VwcG9ydC5vcHRTZWxlY3RlZHx8KGYucHJvcEhvb2tzLnNlbGVjdGVkPWYuZXh0ZW5kKGYu
cHJvcEhvb2tzLnNlbGVjdGVkLHtnZXQ6ZnVuY3Rpb24oYSl7dmFyIGI9YS5wYXJlbnROb2RlO2Im
JihiLnNlbGVjdGVkSW5kZXgsYi5wYXJlbnROb2RlJiZiLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRl
eCk7cmV0dXJuIG51bGx9fSkpLGYuc3VwcG9ydC5lbmN0eXBlfHwoZi5wcm9wRml4LmVuY3R5cGU9
ImVuY29kaW5nIiksZi5zdXBwb3J0LmNoZWNrT258fGYuZWFjaChbInJhZGlvIiwiY2hlY2tib3gi
XSxmdW5jdGlvbigpe2YudmFsSG9va3NbdGhpc109e2dldDpmdW5jdGlvbihhKXtyZXR1cm4gYS5n
ZXRBdHRyaWJ1dGUoInZhbHVlIik9PT1udWxsPyJvbiI6YS52YWx1ZX19fSksZi5lYWNoKFsicmFk
aW8iLCJjaGVja2JveCJdLGZ1bmN0aW9uKCl7Zi52YWxIb29rc1t0aGlzXT1mLmV4dGVuZChmLnZh
bEhvb2tzW3RoaXNdLHtzZXQ6ZnVuY3Rpb24oYSxiKXtpZihmLmlzQXJyYXkoYikpcmV0dXJuIGEu
Y2hlY2tlZD1mLmluQXJyYXkoZihhKS52YWwoKSxiKT49MH19KX0pO3ZhciB6PS9eKD86dGV4dGFy
ZWF8aW5wdXR8c2VsZWN0KSQvaSxBPS9eKFteXC5dKik/KD86XC4oLispKT8kLyxCPS8oPzpefFxz
KWhvdmVyKFwuXFMrKT9cYi8sQz0vXmtleS8sRD0vXig/Om1vdXNlfGNvbnRleHRtZW51KXxjbGlj
ay8sRT0vXig/OmZvY3VzaW5mb2N1c3xmb2N1c291dGJsdXIpJC8sRj0vXihcdyopKD86IyhbXHdc
LV0rKSk/KD86XC4oW1x3XC1dKykpPyQvLEc9ZnVuY3Rpb24oCisrYSl7dmFyIGI9Ri5leGVjKGEp
O2ImJihiWzFdPShiWzFdfHwiIikudG9Mb3dlckNhc2UoKSxiWzNdPWJbM10mJm5ldyBSZWdFeHAo
Iig/Ol58XFxzKSIrYlszXSsiKD86XFxzfCQpIikpO3JldHVybiBifSxIPWZ1bmN0aW9uKGEsYil7
dmFyIGM9YS5hdHRyaWJ1dGVzfHx7fTtyZXR1cm4oIWJbMV18fGEubm9kZU5hbWUudG9Mb3dlckNh
c2UoKT09PWJbMV0pJiYoIWJbMl18fChjLmlkfHx7fSkudmFsdWU9PT1iWzJdKSYmKCFiWzNdfHxi
WzNdLnRlc3QoKGNbImNsYXNzIl18fHt9KS52YWx1ZSkpfSxJPWZ1bmN0aW9uKGEpe3JldHVybiBm
LmV2ZW50LnNwZWNpYWwuaG92ZXI/YTphLnJlcGxhY2UoQiwibW91c2VlbnRlciQxIG1vdXNlbGVh
dmUkMSIpfTtmLmV2ZW50PXthZGQ6ZnVuY3Rpb24oYSxjLGQsZSxnKXt2YXIgaCxpLGosayxsLG0s
bixvLHAscSxyLHM7aWYoIShhLm5vZGVUeXBlPT09M3x8YS5ub2RlVHlwZT09PTh8fCFjfHwhZHx8
IShoPWYuX2RhdGEoYSkpKSl7ZC5oYW5kbGVyJiYocD1kLGQ9cC5oYW5kbGVyLGc9cC5zZWxlY3Rv
ciksZC5ndWlkfHwoZC5ndWlkPWYuZ3VpZCsrKSxqPWguZXZlbnRzLGp8fChoLmV2ZW50cz1qPXt9
KSxpPWguaGFuZGxlLGl8fChoLmhhbmRsZT1pPWZ1bmN0aW9uKGEpe3JldHVybiB0eXBlb2YgZiE9
InVuZGVmaW5lZCImJighYXx8Zi5ldmVudC50cmlnZ2VyZWQhPT1hLnR5cGUpP2YuZXZlbnQuZGlz
cGF0Y2guYXBwbHkoaS5lbGVtLGFyZ3VtZW50cyk6Yn0saS5lbGVtPWEpLGM9Zi50cmltKEkoYykp
LnNwbGl0KCIgIik7Zm9yKGs9MDtrPGMubGVuZ3RoO2srKyl7bD1BLmV4ZWMoY1trXSl8fFtdLG09
bFsxXSxuPShsWzJdfHwiIikuc3BsaXQoIi4iKS5zb3J0KCkscz1mLmV2ZW50LnNwZWNpYWxbbV18
fHt9LG09KGc/cy5kZWxlZ2F0ZVR5cGU6cy5iaW5kVHlwZSl8fG0scz1mLmV2ZW50LnNwZWNpYWxb
bV18fHt9LG89Zi5leHRlbmQoe3R5cGU6bSxvcmlnVHlwZTpsWzFdLGRhdGE6ZSxoYW5kbGVyOmQs
Z3VpZDpkLmd1aWQsc2VsZWN0b3I6ZyxxdWljazpnJiZHKGcpLG5hbWVzcGFjZTpuLmpvaW4oIi4i
KX0scCkscj1qW21dO2lmKCFyKXtyPWpbbV09W10sci5kZWxlZ2F0ZUNvdW50PTA7aWYoIXMuc2V0
dXB8fHMuc2V0dXAuY2FsbChhLGUsbixpKT09PSExKWEuYWRkRXZlbnRMaXN0ZW5lcj9hLmFkZEV2
ZW50TGlzdGVuZXIobSxpLCExKTphLmF0dGFjaEV2ZW50JiZhLmF0dGFjaEV2ZW50KCJvbiIrbSxp
KX1zLmFkZCYmKHMuYWRkLmNhbGwoYSxvKSxvLmhhbmRsZXIuZ3VpZHx8KG8uaGFuZGxlci5ndWlk
PWQuZ3VpZCkpLGc/ci5zcGxpY2Uoci5kZWxlZ2F0ZUNvdW50KyssMCxvKTpyLnB1c2gobyksZi5l
dmVudC5nbG9iYWxbbV09ITB9YT1udWxsfX0sZ2xvYmFsOnt9LHJlbW92ZTpmdW5jdGlvbihhLGIs
YyxkLGUpe3ZhciBnPWYuaGFzRGF0YShhKSYmZi5fZGF0YShhKSxoLGksaixrLGwsbSxuLG8scCxx
LHIscztpZighIWcmJiEhKG89Zy5ldmVudHMpKXtiPWYudHJpbShJKGJ8fCIiKSkuc3BsaXQoIiAi
KTtmb3IoaD0wO2g8Yi5sZW5ndGg7aCsrKXtpPUEuZXhlYyhiW2hdKXx8W10saj1rPWlbMV0sbD1p
WzJdO2lmKCFqKXtmb3IoaiBpbiBvKWYuZXZlbnQucmVtb3ZlKGEsaitiW2hdLGMsZCwhMCk7Y29u
dGludWV9cD1mLmV2ZW50LnNwZWNpYWxbal18fHt9LGo9KGQ/cC5kZWxlZ2F0ZVR5cGU6cC5iaW5k
VHlwZSl8fGoscj1vW2pdfHxbXSxtPXIubGVuZ3RoLGw9bD9uZXcgUmVnRXhwKCIoXnxcXC4pIits
LnNwbGl0KCIuIikuc29ydCgpLmpvaW4oIlxcLig/Oi4qXFwuKT8iKSsiKFxcLnwkKSIpOm51bGw7
Zm9yKG49MDtuPHIubGVuZ3RoO24rKylzPXJbbl0sKGV8fGs9PT1zLm9yaWdUeXBlKSYmKCFjfHxj
Lmd1aWQ9PT1zLmd1aWQpJiYoIWx8fGwudGVzdChzLm5hbWVzcGFjZSkpJiYoIWR8fGQ9PT1zLnNl
bGVjdG9yfHxkPT09IioqIiYmcy5zZWxlY3RvcikmJihyLnNwbGljZShuLS0sMSkscy5zZWxlY3Rv
ciYmci5kZWxlZ2F0ZUNvdW50LS0scC5yZW1vdmUmJnAucmVtb3ZlLmNhbGwoYSxzKSk7ci5sZW5n
dGg9PT0wJiZtIT09ci5sZW5ndGgmJigoIXAudGVhcmRvd258fHAudGVhcmRvd24uY2FsbChhLGwp
PT09ITEpJiZmLnJlbW92ZUV2ZW50KGEsaixnLmhhbmRsZSksZGVsZXRlIG9bal0pfWYuaXNFbXB0
eU9iamVjdChvKSYmKHE9Zy5oYW5kbGUscSYmKHEuZWxlbT1udWxsKSxmLnJlbW92ZURhdGEoYSxb
ImV2ZW50cyIsImhhbmRsZSJdLCEwKSl9fSxjdXN0b21FdmVudDp7Z2V0RGF0YTohMCxzZXREYXRh
OiEwLGNoYW5nZURhdGE6ITB9LHRyaWdnZXI6ZnVuY3Rpb24oYyxkLGUsZyl7aWYoIWV8fGUubm9k
ZVR5cGUhPT0zJiZlLm5vZGVUeXBlIT09OCl7dmFyIGg9Yy50eXBlfHxjLGk9W10saixrLGwsbSxu
LG8scCxxLHIscztpZihFLnRlc3QoaCtmLmV2ZW50LnRyaWdnZXJlZCkpcmV0dXJuO2guaW5kZXhP
ZigiISIpPj0wJiYoaD1oLnNsaWNlKDAsLTEpLGs9ITApLGguaW5kZXhPZigiLiIpPj0wJiYoaT1o
LnNwbGl0KCIuIiksaD1pLnNoaWZ0KCksaS5zb3J0KCkpO2lmKCghZXx8Zi5ldmVudC5jdXN0b21F
dmVudFtoXSkmJiFmLmV2ZW50Lmdsb2JhbFtoXSlyZXR1cm47Yz10eXBlb2YgYz09Im9iamVjdCI/
Y1tmLmV4cGFuZG9dP2M6bmV3IGYuRXZlbnQoaCxjKTpuZXcgZi5FdmVudChoKSxjLnR5cGU9aCxj
LmlzVHJpZ2dlcj0hMCxjLmV4Y2x1c2l2ZT1rLGMubmFtZXNwYWNlPWkuam9pbigiLiIpLGMubmFt
ZXNwYWNlX3JlPWMubmFtZXNwYWNlP25ldyBSZWdFeHAoIihefFxcLikiK2kuam9pbigiXFwuKD86
LipcXC4pPyIpKyIoXFwufCQpIik6bnVsbCxvPWguaW5kZXhPZigiOiIpPDA/Im9uIitoOiIiO2lm
KCFlKXtqPWYuY2FjaGU7Zm9yKGwgaW4gailqW2xdLmV2ZW50cyYmaltsXS5ldmVudHNbaF0mJmYu
ZXZlbnQudHJpZ2dlcihjLGQsaltsXS5oYW5kbGUuZWxlbSwhMCk7cmV0dXJufWMucmVzdWx0PWIs
Yy50YXJnZXR8fChjLnRhcmdldD1lKSxkPWQhPW51bGw/Zi5tYWtlQXJyYXkoZCk6W10sZC51bnNo
aWZ0KGMpLHA9Zi5ldmVudC5zcGVjaWFsW2hdfHx7fTtpZihwLnRyaWdnZXImJnAudHJpZ2dlci5h
cHBseShlLGQpPT09ITEpcmV0dXJuO3I9W1tlLHAuYmluZFR5cGV8fGhdXTtpZighZyYmIXAubm9C
dWJibGUmJiFmLmlzV2luZG93KGUpKXtzPXAuZGVsZWdhdGVUeXBlfHxoLG09RS50ZXN0KHMraCk/
ZTplLnBhcmVudE5vZGUsbj1udWxsO2Zvcig7bTttPW0ucGFyZW50Tm9kZSlyLnB1c2goW20sc10p
LG49bTtuJiZuPT09ZS5vd25lckRvY3VtZW50JiZyLnB1c2goW24uZGVmYXVsdFZpZXd8fG4ucGFy
ZW50V2luZG93fHxhLHNdKX1mb3IobD0wO2w8ci5sZW5ndGgmJiFjLmlzUHJvcGFnYXRpb25TdG9w
cGVkKCk7bCsrKW09cltsXVswXSxjLnR5cGU9cltsXVsxXSxxPShmLl9kYXRhKG0sImV2ZW50cyIp
fHx7fSlbYy50eXBlXSYmZi5fZGF0YShtLCJoYW5kbGUiKSxxJiZxLmFwcGx5KG0sZCkscT1vJiZt
W29dLHEmJmYuYWNjZXB0RGF0YShtKSYmcS5hcHBseShtLGQpPT09ITEmJmMucHJldmVudERlZmF1
bHQoKTtjLnR5cGU9aCwhZyYmIWMuaXNEZWZhdWx0UHJldmVudGVkKCkmJighcC5fZGVmYXVsdHx8
cC5fZGVmYXVsdC5hcHBseShlLm93bmVyRG9jdW1lbnQsZCk9PT0hMSkmJihoIT09ImNsaWNrInx8
IWYubm9kZU5hbWUoZSwiYSIpKSYmZi5hY2NlcHREYXRhKGUpJiZvJiZlW2hdJiYoaCE9PSJmb2N1
cyImJmghPT0iYmx1ciJ8fGMudGFyZ2V0Lm9mZnNldFdpZHRoIT09MCkmJiFmLmlzV2luZG93KGUp
JiYobj1lW29dLG4mJihlW29dPW51bGwpLGYuZXZlbnQudHJpZ2dlcmVkPWgsZVtoXSgpLGYuZXZl
bnQudHJpZ2dlcmVkPWIsbiYmKGVbb109bikpO3JldHVybiBjLnJlc3VsdH19LGRpc3BhdGNoOmZ1
bmN0aW9uKGMpe2M9Zi5ldmVudC5maXgoY3x8YS5ldmVudCk7dmFyIGQ9KGYuX2RhdGEodGhpcywi
ZXZlbnRzIil8fHt9KVtjLnR5cGVdfHxbXSxlPWQuZGVsZWdhdGVDb3VudCxnPVtdLnNsaWNlLmNh
bGwoYXJndW1lbnRzLDApLGg9IWMuZXhjbHVzaXZlJiYhYy5uYW1lc3BhY2UsaT1mLmV2ZW50LnNw
ZWNpYWxbYy50eXBlXXx8e30saj1bXSxrLGwsbSxuLG8scCxxLHIscyx0LHU7Z1swXT1jLGMuZGVs
ZWdhdGVUYXJnZXQ9dGhpcztpZighaS5wcmVEaXNwYXRjaHx8aS5wcmVEaXNwYXRjaC5jYWxsKHRo
aXMsYykhPT0hMSl7aWYoZSYmKCFjLmJ1dHRvbnx8Yy50eXBlIT09ImNsaWNrIikpe249Zih0aGlz
KSxuLmNvbnRleHQ9dGhpcy5vd25lckRvY3VtZW50fHx0aGlzO2ZvcihtPWMudGFyZ2V0O20hPXRo
aXM7bT1tLnBhcmVudE5vZGV8fHRoaXMpaWYobS5kaXNhYmxlZCE9PSEwKXtwPXt9LHI9W10sblsw
XT1tO2ZvcihrPTA7azxlO2srKylzPWRba10sdD1zLnNlbGVjdG9yLHBbdF09PT1iJiYocFt0XT1z
LnF1aWNrP0gobSxzLnF1aWNrKTpuLmlzKHQpKSxwW3RdJiZyLnB1c2gocyk7ci5sZW5ndGgmJmou
cHVzaCh7ZWxlbTptLG1hdGNoZXM6cn0pfX1kLmxlbmd0aD5lJiZqLnB1c2goe2VsZW06dGhpcyxt
YXRjaGVzOmQuc2xpY2UoZSl9KTtmb3Ioaz0wO2s8ai5sZW5ndGgmJiFjLmlzUHJvcGFnYXRpb25T
dG9wcGVkKCk7aysrKXtxPWpba10sYy5jdXJyZW50VGFyZ2V0PXEuZWxlbTtmb3IobD0wO2w8cS5t
YXRjaGVzLmxlbmd0aCYmIWMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKTtsKyspe3M9
cS5tYXRjaGVzW2xdO2lmKGh8fCFjLm5hbWVzcGFjZSYmIXMubmFtZXNwYWNlfHxjLm5hbWVzcGFj
ZV9yZSYmYy5uYW1lc3BhY2VfcmUudGVzdChzLm5hbWVzcGFjZSkpYy5kYXRhPXMuZGF0YSxjLmhh
bmRsZU9iaj1zLG89KChmLmV2ZW50LnNwZWNpYWxbcy5vcmlnVHlwZV18fHt9KS5oYW5kbGV8fHMu
aGFuZGxlcikuYXBwbHkocS5lbGVtLGcpLG8hPT1iJiYoYy5yZXN1bHQ9byxvPT09ITEmJihjLnBy
ZXZlbnREZWZhdWx0KCksYy5zdG9wUHJvcGFnYXRpb24oKSkpfX1pLnBvc3REaXNwYXRjaCYmaS5w
b3N0RGlzcGF0Y2guY2FsbCh0aGlzLGMpO3JldHVybiBjLnJlc3VsdH19LHByb3BzOiJhdHRyQ2hh
bmdlIGF0dHJOYW1lIHJlbGF0ZWROb2RlIHNyY0VsZW1lbnQgYWx0S2V5IGJ1YmJsZXMgY2FuY2Vs
YWJsZSBjdHJsS2V5IGN1cnJlbnRUYXJnZXQgZXZlbnRQaGFzZSBtZXRhS2V5IHJlbGF0ZWRUYXJn
ZXQgc2hpZnRLZXkgdGFyZ2V0IHRpbWVTdGFtcCB2aWV3IHdoaWNoIi5zcGxpdCgiICIpLGZpeEhv
b2tzOnt9LGtleUhvb2tzOntwcm9wczoiY2hhciBjaGFyQ29kZSBrZXkga2V5Q29kZSIuc3BsaXQo
IiAiKSxmaWx0ZXI6ZnVuY3Rpb24oYSxiKXthLndoaWNoPT1udWxsJiYoYS53aGljaD1iLmNoYXJD
b2RlIT1udWxsP2IuY2hhckNvZGU6Yi5rZXlDb2RlKTtyZXR1cm4gYX19LG1vdXNlSG9va3M6e3By
b3BzOiJidXR0b24gYnV0dG9ucyBjbGllbnRYIGNsaWVudFkgZnJvbUVsZW1lbnQgb2Zmc2V0WCBv
ZmZzZXRZIHBhZ2VYIHBhZ2VZIHNjcmVlblggc2NyZWVuWSB0b0VsZW1lbnQiLnNwbGl0KCIgIiks
ZmlsdGVyOmZ1bmN0aW9uKGEsZCl7dmFyIGUsZixnLGg9ZC5idXR0b24saT1kLmZyb21FbGVtZW50
O2EucGFnZVg9PW51bGwmJmQuY2xpZW50WCE9bnVsbCYmKGU9YS50YXJnZXQub3duZXJEb2N1bWVu
dHx8YyxmPWUuZG9jdW1lbnRFbGVtZW50LGc9ZS5ib2R5LGEucGFnZVg9ZC5jbGllbnRYKyhmJiZm
LnNjcm9sbExlZnR8fGcmJmcuc2Nyb2xsTGVmdHx8MCktKGYmJmYuY2xpZW50TGVmdHx8ZyYmZy5j
bGllbnRMZWZ0fHwwKSxhLnBhZ2VZPWQuY2xpZW50WSsoZiYmZi5zY3JvbGxUb3B8fGcmJmcuc2Ny
b2xsVG9wfHwwKS0oZiYmZi5jbGllbnRUb3B8fGcmJmcuY2xpZW50VG9wfHwwKSksIWEucmVsYXRl
ZFRhcmdldCYmaSYmKGEucmVsYXRlZFRhcmdldD1pPT09YS50YXJnZXQ/ZC50b0VsZW1lbnQ6aSks
IWEud2hpY2gmJmghPT1iJiYoYS53aGljaD1oJjE/MTpoJjI/MzpoJjQ/MjowKTtyZXR1cm4gYX19
LGZpeDpmdW5jdGlvbihhKXtpZihhW2YuZXhwYW5kb10pcmV0dXJuIGE7dmFyIGQsZSxnPWEsaD1m
LmV2ZW50LmZpeEhvb2tzW2EudHlwZV18fHt9LGk9aC5wcm9wcz90aGlzLnByb3BzLmNvbmNhdCho
LnByb3BzKTp0aGlzLnByb3BzO2E9Zi5FdmVudChnKTtmb3IoZD1pLmxlbmd0aDtkOyllPWlbLS1k
XSxhW2VdPWdbZV07YS50YXJnZXR8fChhLnRhcmdldD1nLnNyY0VsZW1lbnR8fGMpLGEudGFyZ2V0
Lm5vZGVUeXBlPT09MyYmKGEudGFyZ2V0PWEudGFyZ2V0LnBhcmVudE5vZGUpLGEubWV0YUtleT09
PWImJihhLm1ldGFLZXk9YS5jdHJsS2V5KTtyZXR1cm4gaC5maWx0ZXI/aC5maWx0ZXIoYSxnKTph
fSxzcGVjaWFsOntyZWFkeTp7c2V0dXA6Zi5iaW5kUmVhZHl9LGxvYWQ6e25vQnViYmxlOiEwfSxm
b2N1czp7ZGVsZWdhdGVUeXBlOiJmb2N1c2luIn0sYmx1cjp7ZGVsZWdhdGVUeXBlOiJmb2N1c291
dCJ9LGJlZm9yZXVubG9hZDp7c2V0dXA6ZnVuY3Rpb24oYSxiLGMpe2YuaXNXaW5kb3codGhpcykm
Jih0aGlzLm9uYmVmb3JldW5sb2FkPWMpfSx0ZWFyZG93bjpmdW5jdGlvbihhLGIpe3RoaXMub25i
ZWZvcmV1bmxvYWQ9PT1iJiYodGhpcy5vbmJlZm9yZXVubG9hZD1udWxsKX19fSxzaW11bGF0ZTpm
dW5jdGlvbihhLGIsYyxkKXt2YXIgZT1mLmV4dGVuZChuZXcgZi5FdmVudCxjLHt0eXBlOmEsaXNT
aW11bGF0ZWQ6ITAsb3JpZ2luYWxFdmVudDp7fX0pO2Q/Zi5ldmVudC50cmlnZ2VyKGUsbnVsbCxi
KTpmLmV2ZW50LmRpc3BhdGNoLmNhbGwoYixlKSxlLmlzRGVmYXVsdFByZXZlbnRlZCgpJiZjLnBy
ZXZlbnREZWZhdWx0KCl9fSxmLmV2ZW50LmhhbmRsZT1mLmV2ZW50LmRpc3BhdGNoLGYucmVtb3Zl
RXZlbnQ9Yy5yZW1vdmVFdmVudExpc3RlbmVyP2Z1bmN0aW9uKGEsYixjKXthLnJlbW92ZUV2ZW50
TGlzdGVuZXImJmEucmVtb3ZlRXZlbnRMaXN0ZW5lcihiLGMsITEpfTpmdW5jdGlvbihhLGIsYyl7
YS5kZXRhY2hFdmVudCYmYS5kZXRhY2hFdmVudCgib24iK2IsYyl9LGYuRXZlbnQ9ZnVuY3Rpb24o
YSxiKXtpZighKHRoaXMgaW5zdGFuY2VvZiBmLkV2ZW50KSlyZXR1cm4gbmV3IGYuRXZlbnQoYSxi
KTthJiZhLnR5cGU/KHRoaXMub3JpZ2luYWxFdmVudD1hLHRoaXMudHlwZT1hLnR5cGUsdGhpcy5p
c0RlZmF1bHRQcmV2ZW50ZWQ9YS5kZWZhdWx0UHJldmVudGVkfHxhLnJldHVyblZhbHVlPT09ITF8
fGEuZ2V0UHJldmVudERlZmF1bHQmJmEuZ2V0UHJldmVudERlZmF1bHQoKT9LOkopOnRoaXMudHlw
ZT1hLGImJmYuZXh0ZW5kKHRoaXMsYiksdGhpcy50aW1lU3RhbXA9YSYmYS50aW1lU3RhbXB8fGYu
bm93KCksdGhpc1tmLmV4cGFuZG9dPSEwfSxmLkV2ZW50LnByb3RvdHlwZT17cHJldmVudERlZmF1
bHQ6ZnVuY3Rpb24oKXt0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1LO3ZhciBhPXRoaXMub3JpZ2lu
YWxFdmVudDshYXx8KGEucHJldmVudERlZmF1bHQ/YS5wcmV2ZW50RGVmYXVsdCgpOmEucmV0dXJu
VmFsdWU9ITEpfSxzdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt0aGlzLmlzUHJvcGFnYXRpb25T
dG9wcGVkPUs7dmFyIGE9dGhpcy5vcmlnaW5hbEV2ZW50OyFhfHwoYS5zdG9wUHJvcGFnYXRpb24m
JmEuc3RvcFByb3BhZ2F0aW9uKCksYS5jYW5jZWxCdWJibGU9ITApfSxzdG9wSW1tZWRpYXRlUHJv
cGFnYXRpb246ZnVuY3Rpb24oKXt0aGlzLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkPUss
dGhpcy5zdG9wUHJvcGFnYXRpb24oKX0saXNEZWZhdWx0UHJldmVudGVkOkosaXNQcm9wYWdhdGlv
blN0b3BwZWQ6Sixpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZDpKfSxmLmVhY2goe21vdXNl
ZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSxmdW5jdGlvbihhLGIpe2Yu
ZXZlbnQuc3BlY2lhbFthXT17ZGVsZWdhdGVUeXBlOmIsYmluZFR5cGU6YixoYW5kbGU6ZnVuY3Rp
b24oYSl7dmFyIGM9dGhpcyxkPWEucmVsYXRlZFRhcmdldCxlPWEuaGFuZGxlT2JqLGc9ZS5zZWxl
Y3RvcixoO2lmKCFkfHxkIT09YyYmIWYuY29udGFpbnMoYyxkKSlhLnR5cGU9ZS5vcmlnVHlwZSxo
PWUuaGFuZGxlci5hcHBseSh0aGlzLGFyZ3VtZW50cyksYS50eXBlPWI7cmV0dXJuIGh9fX0pLGYu
c3VwcG9ydC5zdWJtaXRCdWJibGVzfHwoZi5ldmVudC5zcGVjaWFsLnN1Ym1pdD17c2V0dXA6ZnVu
Y3Rpb24oKXtpZihmLm5vZGVOYW1lKHRoaXMsImZvcm0iKSlyZXR1cm4hMTtmLmV2ZW50LmFkZCh0
aGlzLCJjbGljay5fc3VibWl0IGtleXByZXNzLl9zdWJtaXQiLGZ1bmN0aW9uKGEpe3ZhciBjPWEu
dGFyZ2V0LGQ9Zi5ub2RlTmFtZShjLCJpbnB1dCIpfHxmLm5vZGVOYW1lKGMsImJ1dHRvbiIpP2Mu
Zm9ybTpiO2QmJiFkLl9zdWJtaXRfYXR0YWNoZWQmJihmLmV2ZW50LmFkZChkLCJzdWJtaXQuX3N1
Ym1pdCIsZnVuY3Rpb24oYSl7YS5fc3VibWl0X2J1YmJsZT0hMH0pLGQuX3N1Ym1pdF9hdHRhY2hl
ZD0hMCl9KX0scG9zdERpc3BhdGNoOmZ1bmN0aW9uKGEpe2EuX3N1Ym1pdF9idWJibGUmJihkZWxl
dGUgYS5fc3VibWl0X2J1YmJsZSx0aGlzLnBhcmVudE5vZGUmJiFhLmlzVHJpZ2dlciYmZi5ldmVu
dC5zaW11bGF0ZSgic3VibWl0Iix0aGlzLnBhcmVudE5vZGUsYSwhMCkpfSx0ZWFyZG93bjpmdW5j
dGlvbigpe2lmKGYubm9kZU5hbWUodGhpcywiZm9ybSIpKXJldHVybiExO2YuZXZlbnQucmVtb3Zl
KHRoaXMsIi5fc3VibWl0Iil9fSksZi5zdXBwb3J0LmNoYW5nZUJ1YmJsZXN8fChmLmV2ZW50LnNw
ZWNpYWwuY2hhbmdlPXtzZXR1cDpmdW5jdGlvbigpe2lmKHoudGVzdCh0aGlzLm5vZGVOYW1lKSl7
aWYodGhpcy50eXBlPT09ImNoZWNrYm94Inx8dGhpcy50eXBlPT09InJhZGlvIilmLmV2ZW50LmFk
ZCh0aGlzLCJwcm9wZXJ0eWNoYW5nZS5fY2hhbmdlIixmdW5jdGlvbihhKXthLm9yaWdpbmFsRXZl
bnQucHJvcGVydHlOYW1lPT09ImNoZWNrZWQiJiYodGhpcy5fanVzdF9jaGFuZ2VkPSEwKX0pLGYu
ZXZlbnQuYWRkKHRoaXMsImNsaWNrLl9jaGFuZ2UiLGZ1bmN0aW9uKGEpe3RoaXMuX2p1c3RfY2hh
bmdlZCYmIWEuaXNUcmlnZ2VyJiYodGhpcy5fanVzdF9jaGFuZ2VkPSExLGYuZXZlbnQuc2ltdWxh
dGUoImNoYW5nZSIsdGhpcyxhLCEwKSl9KTtyZXR1cm4hMX1mLmV2ZW50LmFkZCh0aGlzLCJiZWZv
cmVhY3RpdmF0ZS5fY2hhbmdlIixmdW5jdGlvbihhKXt2YXIgYj1hLnRhcmdldDt6LnRlc3QoYi5u
b2RlTmFtZSkmJiFiLl9jaGFuZ2VfYXR0YWNoZWQmJihmLmV2ZW50LmFkZChiLCJjaGFuZ2UuX2No
YW5nZSIsZnVuY3Rpb24oYSl7dGhpcy5wYXJlbnROb2RlJiYhYS5pc1NpbXVsYXRlZCYmIWEuaXNU
cmlnZ2VyJiZmLmV2ZW50LnNpbXVsYXRlKCJjaGFuZ2UiLHRoaXMucGFyZW50Tm9kZSxhLCEwKX0p
LGIuX2NoYW5nZV9hdHRhY2hlZD0hMCl9KX0saGFuZGxlOmZ1bmN0aW9uKGEpe3ZhciBiPWEudGFy
Z2V0O2lmKHRoaXMhPT1ifHxhLmlzU2ltdWxhdGVkfHxhLmlzVHJpZ2dlcnx8Yi50eXBlIT09InJh
ZGlvIiYmYi50eXBlIT09ImNoZWNrYm94IilyZXR1cm4gYS5oYW5kbGVPYmouaGFuZGxlci5hcHBs
eSh0aGlzLGFyZ3VtZW50cyl9LHRlYXJkb3duOmZ1bmN0aW9uKCl7Zi5ldmVudC5yZW1vdmUodGhp
cywiLl9jaGFuZ2UiKTtyZXR1cm4gei50ZXN0KHRoaXMubm9kZU5hbWUpfX0pLGYuc3VwcG9ydC5m
b2N1c2luQnViYmxlc3x8Zi5lYWNoKHtmb2N1czoiZm9jdXNpbiIsYmx1cjoiZm9jdXNvdXQifSxm
dW5jdGlvbihhLGIpe3ZhciBkPTAsZT1mdW5jdGlvbihhKXtmLmV2ZW50LnNpbXVsYXRlKGIsYS50
YXJnZXQsZi5ldmVudC5maXgoYSksITApfTtmLmV2ZW50LnNwZWNpYWxbYl09e3NldHVwOmZ1bmN0
aW9uKCl7ZCsrPT09MCYmYy5hZGRFdmVudExpc3RlbmVyKGEsZSwhMCl9LHRlYXJkb3duOmZ1bmN0
aW9uKCl7LS1kPT09MCYmYy5yZW1vdmVFdmVudExpc3RlbmVyKGEsZSwhMCl9fX0pLGYuZm4uZXh0
ZW5kKHtvbjpmdW5jdGlvbihhLGMsZCxlLGcpe3ZhciBoLGk7aWYodHlwZW9mIGE9PSJvYmplY3Qi
KXt0eXBlb2YgYyE9InN0cmluZyImJihkPWR8fGMsYz1iKTtmb3IoaSBpbiBhKXRoaXMub24oaSxj
LGQsYVtpXSxnKTtyZXR1cm4gdGhpc31kPT1udWxsJiZlPT1udWxsPyhlPWMsZD1jPWIpOmU9PW51
bGwmJih0eXBlb2YgYz09InN0cmluZyI/KGU9ZCxkPWIpOihlPWQsZD1jLGM9YikpO2lmKGU9PT0h
MSllPUo7ZWxzZSBpZighZSlyZXR1cm4gdGhpcztnPT09MSYmKGg9ZSxlPWZ1bmN0aW9uKGEpe2Yo
KS5vZmYoYSk7cmV0dXJuIGguYXBwbHkodGhpcyxhcmd1bWVudHMpfSxlLmd1aWQ9aC5ndWlkfHwo
aC5ndWlkPWYuZ3VpZCsrKSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2YuZXZlbnQuYWRk
KHRoaXMsYSxlLGQsYyl9KX0sb25lOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiB0aGlzLm9uKGEs
YixjLGQsMSl9LG9mZjpmdW5jdGlvbihhLGMsZCl7aWYoYSYmYS5wcmV2ZW50RGVmYXVsdCYmYS5o
YW5kbGVPYmope3ZhciBlPWEuaGFuZGxlT2JqO2YoYS5kZWxlZ2F0ZVRhcmdldCkub2ZmKGUubmFt
ZXNwYWNlP2Uub3JpZ1R5cGUrIi4iK2UubmFtZXNwYWNlOmUub3JpZ1R5cGUsZS5zZWxlY3Rvcixl
LmhhbmRsZXIpO3JldHVybiB0aGlzfWlmKHR5cGVvZiBhPT0ib2JqZWN0Iil7Zm9yKHZhciBnIGlu
IGEpdGhpcy5vZmYoZyxjLGFbZ10pO3JldHVybiB0aGlzfWlmKGM9PT0hMXx8dHlwZW9mIGM9PSJm
dW5jdGlvbiIpZD1jLGM9YjtkPT09ITEmJihkPUopO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24o
KXtmLmV2ZW50LnJlbW92ZSh0aGlzLGEsZCxjKX0pfSxiaW5kOmZ1bmN0aW9uKGEsYixjKXtyZXR1
cm4gdGhpcy5vbihhLG51bGwsYixjKX0sdW5iaW5kOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMu
b2ZmKGEsbnVsbCxiKX0sbGl2ZTpmdW5jdGlvbihhLGIsYyl7Zih0aGlzLmNvbnRleHQpLm9uKGEs
dGhpcy5zZWxlY3RvcixiLGMpO3JldHVybiB0aGlzfSxkaWU6ZnVuY3Rpb24oYSxiKXtmKHRoaXMu
Y29udGV4dCkub2ZmKGEsdGhpcy5zZWxlY3Rvcnx8IioqIixiKTtyZXR1cm4gdGhpc30sZGVsZWdh
dGU6ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIHRoaXMub24oYixhLGMsZCl9LHVuZGVsZWdhdGU6
ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT0xP3RoaXMub2ZmKGEsIioq
Iik6dGhpcy5vZmYoYixhLGMpfSx0cmlnZ2VyOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuZWFj
aChmdW5jdGlvbigpe2YuZXZlbnQudHJpZ2dlcihhLGIsdGhpcyl9KX0sdHJpZ2dlckhhbmRsZXI6
ZnVuY3Rpb24oYSxiKXtpZih0aGlzWzBdKXJldHVybiBmLmV2ZW50LnRyaWdnZXIoYSxiLHRoaXNb
MF0sITApfSx0b2dnbGU6ZnVuY3Rpb24oYSl7dmFyIGI9YXJndW1lbnRzLGM9YS5ndWlkfHxmLmd1
aWQrKyxkPTAsZT1mdW5jdGlvbihjKXt2YXIgZT0oZi5fZGF0YSh0aGlzLCJsYXN0VG9nZ2xlIith
Lmd1aWQpfHwwKSVkO2YuX2RhdGEodGhpcywibGFzdFRvZ2dsZSIrYS5ndWlkLGUrMSksYy5wcmV2
ZW50RGVmYXVsdCgpO3JldHVybiBiW2VdLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8ITF9O2UuZ3Vp
ZD1jO3doaWxlKGQ8Yi5sZW5ndGgpYltkKytdLmd1aWQ9YztyZXR1cm4gdGhpcy5jbGljayhlKX0s
aG92ZXI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5tb3VzZWVudGVyKGEpLm1vdXNlbGVhdmUo
Ynx8YSl9fSksZi5lYWNoKCJibHVyIGZvY3VzIGZvY3VzaW4gZm9jdXNvdXQgbG9hZCByZXNpemUg
c2Nyb2xsIHVubG9hZCBjbGljayBkYmxjbGljayBtb3VzZWRvd24gbW91c2V1cCBtb3VzZW1vdmUg
bW91c2VvdmVyIG1vdXNlb3V0IG1vdXNlZW50ZXIgbW91c2VsZWF2ZSBjaGFuZ2Ugc2VsZWN0IHN1
Ym1pdCBrZXlkb3duIGtleXByZXNzIGtleXVwIGVycm9yIGNvbnRleHRtZW51Ii5zcGxpdCgiICIp
LGZ1bmN0aW9uKGEsYil7Zi5mbltiXT1mdW5jdGlvbihhLGMpe2M9PW51bGwmJihjPWEsYT1udWxs
KTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4wP3RoaXMub24oYixudWxsLGEsYyk6dGhpcy50cmln
Z2VyKGIpfSxmLmF0dHJGbiYmKGYuYXR0ckZuW2JdPSEwKSxDLnRlc3QoYikmJihmLmV2ZW50LmZp
eEhvb2tzW2JdPWYuZXZlbnQua2V5SG9va3MpLEQudGVzdChiKSYmKGYuZXZlbnQuZml4SG9va3Nb
Yl09Zi5ldmVudC5tb3VzZUhvb2tzKX0pLGZ1bmN0aW9uKCl7ZnVuY3Rpb24geChhLGIsYyxlLGYs
Zyl7Zm9yKHZhciBoPTAsaT1lLmxlbmd0aDtoPGk7aCsrKXt2YXIgaj1lW2hdO2lmKGope3ZhciBr
PSExO2o9althXTt3aGlsZShqKXtpZihqW2RdPT09Yyl7az1lW2ouc2l6c2V0XTticmVha31pZihq
Lm5vZGVUeXBlPT09MSl7Z3x8KGpbZF09YyxqLnNpenNldD1oKTtpZih0eXBlb2YgYiE9InN0cmlu
ZyIpe2lmKGo9PT1iKXtrPSEwO2JyZWFrfX1lbHNlIGlmKG0uZmlsdGVyKGIsW2pdKS5sZW5ndGg+
MCl7az1qO2JyZWFrfX1qPWpbYV19ZVtoXT1rfX19ZnVuY3Rpb24gdyhhLGIsYyxlLGYsZyl7Zm9y
KHZhciBoPTAsaT1lLmxlbmd0aDtoPGk7aCsrKXt2YXIgaj1lW2hdO2lmKGope3ZhciBrPSExO2o9
althXTt3aGlsZShqKXtpZihqW2RdPT09Yyl7az1lW2ouc2l6c2V0XTticmVha31qLm5vZGVUeXBl
PT09MSYmIWcmJihqW2RdPWMsai5zaXpzZXQ9aCk7aWYoai5ub2RlTmFtZS50b0xvd2VyQ2FzZSgp
PT09Yil7az1qO2JyZWFrfWo9althXX1lW2hdPWt9fX12YXIgYT0vKCg/OlwoKD86XChbXigpXStc
KXxbXigpXSspK1wpfFxbKD86XFtbXlxbXF1dKlxdfFsnIl1bXiciXSpbJyJdfFteXFtcXSciXSsp
K1xdfFxcLnxbXiA+K34sKFxbXFxdKykrfFs+K35dKShccyosXHMqKT8oKD86LnxccnxcbikqKS9n
LGQ9InNpemNhY2hlIisoTWF0aC5yYW5kb20oKSsiIikucmVwbGFjZSgiLiIsIiIpLGU9MCxnPU9i
amVjdC5wcm90b3R5cGUudG9TdHJpbmcsaD0hMSxpPSEwLGo9L1xcL2csaz0vXHJcbi9nLGw9L1xX
LztbMCwwXS5zb3J0KGZ1bmN0aW9uKCl7aT0hMTtyZXR1cm4gMH0pO3ZhciBtPWZ1bmN0aW9uKGIs
ZCxlLGYpe2U9ZXx8W10sZD1kfHxjO3ZhciBoPWQ7aWYoZC5ub2RlVHlwZSE9PTEmJmQubm9kZVR5
cGUhPT05KXJldHVybltdO2lmKCFifHx0eXBlb2YgYiE9InN0cmluZyIpcmV0dXJuIGU7dmFyIGks
aixrLGwsbixxLHIsdCx1PSEwLHY9bS5pc1hNTChkKSx3PVtdLHg9Yjtkb3thLmV4ZWMoIiIpLGk9
YS5leGVjKHgpO2lmKGkpe3g9aVszXSx3LnB1c2goaVsxXSk7aWYoaVsyXSl7bD1pWzNdO2JyZWFr
fX19d2hpbGUoaSk7aWYody5sZW5ndGg+MSYmcC5leGVjKGIpKWlmKHcubGVuZ3RoPT09MiYmby5y
ZWxhdGl2ZVt3WzBdXSlqPXkod1swXSt3WzFdLGQsZik7ZWxzZXtqPW8ucmVsYXRpdmVbd1swXV0/
W2RdOm0ody5zaGlmdCgpLGQpO3doaWxlKHcubGVuZ3RoKWI9dy5zaGlmdCgpLG8ucmVsYXRpdmVb
Yl0mJihiKz13LnNoaWZ0KCkpLGo9eShiLGosZil9ZWxzZXshZiYmdy5sZW5ndGg+MSYmZC5ub2Rl
VHlwZT09PTkmJiF2JiZvLm1hdGNoLklELnRlc3Qod1swXSkmJiFvLm1hdGNoLklELnRlc3Qod1t3
Lmxlbmd0aC0xXSkmJihuPW0uZmluZCh3LnNoaWZ0KCksZCx2KSxkPW4uZXhwcj9tLmZpbHRlcihu
LmV4cHIsbi5zZXQpWzBdOm4uc2V0WzBdKTtpZihkKXtuPWY/e2V4cHI6dy5wb3AoKSxzZXQ6cyhm
KX06bS5maW5kKHcucG9wKCksdy5sZW5ndGg9PT0xJiYod1swXT09PSJ+Inx8d1swXT09PSIrIikm
JmQucGFyZW50Tm9kZT9kLnBhcmVudE5vZGU6ZCx2KSxqPW4uZXhwcj9tLmZpbHRlcihuLmV4cHIs
bi5zZXQpOm4uc2V0LHcubGVuZ3RoPjA/az1zKGopOnU9ITE7d2hpbGUody5sZW5ndGgpcT13LnBv
cCgpLHI9cSxvLnJlbGF0aXZlW3FdP3I9dy5wb3AoKTpxPSIiLHI9PW51bGwmJihyPWQpLG8ucmVs
YXRpdmVbcV0oayxyLHYpfWVsc2Ugaz13PVtdfWt8fChrPWopLGt8fG0uZXJyb3IocXx8Yik7aWYo
Zy5jYWxsKGspPT09IltvYmplY3QgQXJyYXldIilpZighdSllLnB1c2guYXBwbHkoZSxrKTtlbHNl
IGlmKGQmJmQubm9kZVR5cGU9PT0xKWZvcih0PTA7a1t0XSE9bnVsbDt0Kyspa1t0XSYmKGtbdF09
PT0hMHx8a1t0XS5ub2RlVHlwZT09PTEmJm0uY29udGFpbnMoZCxrW3RdKSkmJmUucHVzaChqW3Rd
KTtlbHNlIGZvcih0PTA7a1t0XSE9bnVsbDt0Kyspa1t0XSYma1t0XS5ub2RlVHlwZT09PTEmJmUu
cHVzaChqW3RdKTtlbHNlIHMoayxlKTtsJiYobShsLGgsZSxmKSxtLnVuaXF1ZVNvcnQoZSkpO3Jl
dHVybiBlfTttLnVuaXF1ZVNvcnQ9ZnVuY3Rpb24oYSl7aWYodSl7aD1pLGEuc29ydCh1KTtpZiho
KWZvcih2YXIgYj0xO2I8YS5sZW5ndGg7YisrKWFbYl09PT1hW2ItMV0mJmEuc3BsaWNlKGItLSwx
KX1yZXR1cm4gYX0sbS5tYXRjaGVzPWZ1bmN0aW9uKGEsYil7cmV0dXJuIG0oYSxudWxsLG51bGws
Yil9LG0ubWF0Y2hlc1NlbGVjdG9yPWZ1bmN0aW9uKGEsYil7cmV0dXJuIG0oYixudWxsLG51bGws
W2FdKS5sZW5ndGg+MH0sbS5maW5kPWZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGYsZyxoLGk7aWYo
IWEpcmV0dXJuW107Zm9yKGU9MCxmPW8ub3JkZXIubGVuZ3RoO2U8ZjtlKyspe2g9by5vcmRlcltl
XTtpZihnPW8ubGVmdE1hdGNoW2hdLmV4ZWMoYSkpe2k9Z1sxXSxnLnNwbGljZSgxLDEpO2lmKGku
c3Vic3RyKGkubGVuZ3RoLTEpIT09IlxcIil7Z1sxXT0oZ1sxXXx8IiIpLnJlcGxhY2UoaiwiIiks
ZD1vLmZpbmRbaF0oZyxiLGMpO2lmKGQhPW51bGwpe2E9YS5yZXBsYWNlKG8ubWF0Y2hbaF0sIiIp
O2JyZWFrfX19fWR8fChkPXR5cGVvZiBiLmdldEVsZW1lbnRzQnlUYWdOYW1lIT0idW5kZWZpbmVk
Ij9iLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIik6W10pO3JldHVybntzZXQ6ZCxleHByOmF9fSxt
LmZpbHRlcj1mdW5jdGlvbihhLGMsZCxlKXt2YXIgZixnLGgsaSxqLGssbCxuLHAscT1hLHI9W10s
cz1jLHQ9YyYmY1swXSYmbS5pc1hNTChjWzBdKTt3aGlsZShhJiZjLmxlbmd0aCl7Zm9yKGggaW4g
by5maWx0ZXIpaWYoKGY9by5sZWZ0TWF0Y2hbaF0uZXhlYyhhKSkhPW51bGwmJmZbMl0pe2s9by5m
aWx0ZXJbaF0sbD1mWzFdLGc9ITEsZi5zcGxpY2UoMSwxKTtpZihsLnN1YnN0cihsLmxlbmd0aC0x
KT09PSJcXCIpY29udGludWU7cz09PXImJihyPVtdKTtpZihvLnByZUZpbHRlcltoXSl7Zj1vLnBy
ZUZpbHRlcltoXShmLHMsZCxyLGUsdCk7aWYoIWYpZz1pPSEwO2Vsc2UgaWYoZj09PSEwKWNvbnRp
bnVlfWlmKGYpZm9yKG49MDsoaj1zW25dKSE9bnVsbDtuKyspaiYmKGk9ayhqLGYsbixzKSxwPWVe
aSxkJiZpIT1udWxsP3A/Zz0hMDpzW25dPSExOnAmJihyLnB1c2goaiksZz0hMCkpO2lmKGkhPT1i
KXtkfHwocz1yKSxhPWEucmVwbGFjZShvLm1hdGNoW2hdLCIiKTtpZighZylyZXR1cm5bXTticmVh
a319aWYoYT09PXEpaWYoZz09bnVsbCltLmVycm9yKGEpO2Vsc2UgYnJlYWs7cT1hfXJldHVybiBz
fSxtLmVycm9yPWZ1bmN0aW9uKGEpe3Rocm93IG5ldyBFcnJvcigiU3ludGF4IGVycm9yLCB1bnJl
Y29nbml6ZWQgZXhwcmVzc2lvbjogIithKX07dmFyIG49bS5nZXRUZXh0PWZ1bmN0aW9uKGEpe3Zh
ciBiLGMsZD1hLm5vZGVUeXBlLGU9IiI7aWYoZCl7aWYoZD09PTF8fGQ9PT05fHxkPT09MTEpe2lm
KHR5cGVvZiBhLnRleHRDb250ZW50PT0ic3RyaW5nIilyZXR1cm4gYS50ZXh0Q29udGVudDtpZih0
eXBlb2YgYS5pbm5lclRleHQ9PSJzdHJpbmciKXJldHVybiBhLmlubmVyVGV4dC5yZXBsYWNlKGss
IiIpO2ZvcihhPWEuZmlyc3RDaGlsZDthO2E9YS5uZXh0U2libGluZyllKz1uKGEpfWVsc2UgaWYo
ZD09PTN8fGQ9PT00KXJldHVybiBhLm5vZGVWYWx1ZX1lbHNlIGZvcihiPTA7Yz1hW2JdO2IrKylj
Lm5vZGVUeXBlIT09OCYmKGUrPW4oYykpO3JldHVybiBlfSxvPW0uc2VsZWN0b3JzPXtvcmRlcjpb
IklEIiwiTkFNRSIsIlRBRyJdLG1hdGNoOntJRDovIygoPzpbXHdcdTAwYzAtXHVGRkZGXC1dfFxc
LikrKS8sQ0xBU1M6L1wuKCg/Oltcd1x1MDBjMC1cdUZGRkZcLV18XFwuKSspLyxOQU1FOi9cW25h
bWU9WyciXSooKD86W1x3XHUwMGMwLVx1RkZGRlwtXXxcXC4pKylbJyJdKlxdLyxBVFRSOi9cW1xz
KigoPzpbXHdcdTAwYzAtXHVGRkZGXC1dfFxcLikrKVxzKig/OihcUz89KVxzKig/OihbJyJdKSgu
Kj8pXDN8KCM/KD86W1x3XHUwMGMwLVx1RkZGRlwtXXxcXC4pKil8KXwpXHMqXF0vLFRBRzovXigo
PzpbXHdcdTAwYzAtXHVGRkZGXCpcLV18XFwuKSspLyxDSElMRDovOihvbmx5fG50aHxsYXN0fGZp
cnN0KS1jaGlsZCg/OlwoXHMqKGV2ZW58b2RkfCg/OlsrXC1dP1xkK3woPzpbK1wtXT9cZCopP25c
cyooPzpbK1wtXVxzKlxkKyk/KSlccypcKSk/LyxQT1M6LzoobnRofGVxfGd0fGx0fGZpcnN0fGxh
c3R8ZXZlbnxvZGQpKD86XCgoXGQqKVwpKT8oPz1bXlwtXXwkKS8sUFNFVURPOi86KCg/Oltcd1x1
MDBjMC1cdUZGRkZcLV18XFwuKSspKD86XCgoWyciXT8pKCg/OlwoW15cKV0rXCl8W15cKFwpXSop
KylcMlwpKT8vfSxsZWZ0TWF0Y2g6e30sYXR0ck1hcDp7ImNsYXNzIjoiY2xhc3NOYW1lIiwiZm9y
IjoiaHRtbEZvciJ9LGF0dHJIYW5kbGU6e2hyZWY6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZ2V0QXR0
cmlidXRlKCJocmVmIil9LHR5cGU6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZ2V0QXR0cmlidXRlKCJ0
eXBlIil9fSxyZWxhdGl2ZTp7IisiOmZ1bmN0aW9uKGEsYil7dmFyIGM9dHlwZW9mIGI9PSJzdHJp
bmciLGQ9YyYmIWwudGVzdChiKSxlPWMmJiFkO2QmJihiPWIudG9Mb3dlckNhc2UoKSk7Zm9yKHZh
ciBmPTAsZz1hLmxlbmd0aCxoO2Y8ZztmKyspaWYoaD1hW2ZdKXt3aGlsZSgoaD1oLnByZXZpb3Vz
U2libGluZykmJmgubm9kZVR5cGUhPT0xKTthW2ZdPWV8fGgmJmgubm9kZU5hbWUudG9Mb3dlckNh
c2UoKT09PWI/aHx8ITE6aD09PWJ9ZSYmbS5maWx0ZXIoYixhLCEwKX0sIj4iOmZ1bmN0aW9uKGEs
Yil7dmFyIGMsZD10eXBlb2YgYj09InN0cmluZyIsZT0wLGY9YS5sZW5ndGg7aWYoZCYmIWwudGVz
dChiKSl7Yj1iLnRvTG93ZXJDYXNlKCk7Zm9yKDtlPGY7ZSsrKXtjPWFbZV07aWYoYyl7dmFyIGc9
Yy5wYXJlbnROb2RlO2FbZV09Zy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09Yj9nOiExfX19ZWxz
ZXtmb3IoO2U8ZjtlKyspYz1hW2VdLGMmJihhW2VdPWQ/Yy5wYXJlbnROb2RlOmMucGFyZW50Tm9k
ZT09PWIpO2QmJm0uZmlsdGVyKGIsYSwhMCl9fSwiIjpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZj1l
KyssZz14O3R5cGVvZiBiPT0ic3RyaW5nIiYmIWwudGVzdChiKSYmKGI9Yi50b0xvd2VyQ2FzZSgp
LGQ9YixnPXcpLGcoInBhcmVudE5vZGUiLGIsZixhLGQsYyl9LCJ+IjpmdW5jdGlvbihhLGIsYyl7
dmFyIGQsZj1lKyssZz14O3R5cGVvZiBiPT0ic3RyaW5nIiYmIWwudGVzdChiKSYmKGI9Yi50b0xv
d2VyQ2FzZSgpLGQ9YixnPXcpLGcoInByZXZpb3VzU2libGluZyIsYixmLGEsZCxjKX19LGZpbmQ6
e0lEOmZ1bmN0aW9uKGEsYixjKXtpZih0eXBlb2YgYi5nZXRFbGVtZW50QnlJZCE9InVuZGVmaW5l
ZCImJiFjKXt2YXIgZD1iLmdldEVsZW1lbnRCeUlkKGFbMV0pO3JldHVybiBkJiZkLnBhcmVudE5v
ZGU/W2RdOltdfX0sTkFNRTpmdW5jdGlvbihhLGIpe2lmKHR5cGVvZiBiLmdldEVsZW1lbnRzQnlO
YW1lIT0idW5kZWZpbmVkIil7dmFyIGM9W10sZD1iLmdldEVsZW1lbnRzQnlOYW1lKGFbMV0pO2Zv
cih2YXIgZT0wLGY9ZC5sZW5ndGg7ZTxmO2UrKylkW2VdLmdldEF0dHJpYnV0ZSgibmFtZSIpPT09
YVsxXSYmYy5wdXNoKGRbZV0pO3JldHVybiBjLmxlbmd0aD09PTA/bnVsbDpjfX0sVEFHOmZ1bmN0
aW9uKGEsYil7aWYodHlwZW9mIGIuZ2V0RWxlbWVudHNCeVRhZ05hbWUhPSJ1bmRlZmluZWQiKXJl
dHVybiBiLmdldEVsZW1lbnRzQnlUYWdOYW1lKGFbMV0pfX0scHJlRmlsdGVyOntDTEFTUzpmdW5j
dGlvbihhLGIsYyxkLGUsZil7YT0iICIrYVsxXS5yZXBsYWNlKGosIiIpKyIgIjtpZihmKXJldHVy
biBhO2Zvcih2YXIgZz0wLGg7KGg9YltnXSkhPW51bGw7ZysrKWgmJihlXihoLmNsYXNzTmFtZSYm
KCIgIitoLmNsYXNzTmFtZSsiICIpLnJlcGxhY2UoL1tcdFxuXHJdL2csIiAiKS5pbmRleE9mKGEp
Pj0wKT9jfHxkLnB1c2goaCk6YyYmKGJbZ109ITEpKTtyZXR1cm4hMX0sSUQ6ZnVuY3Rpb24oYSl7
cmV0dXJuIGFbMV0ucmVwbGFjZShqLCIiKX0sVEFHOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGFbMV0u
cmVwbGFjZShqLCIiKS50b0xvd2VyQ2FzZSgpfSxDSElMRDpmdW5jdGlvbihhKXtpZihhWzFdPT09
Im50aCIpe2FbMl18fG0uZXJyb3IoYVswXSksYVsyXT1hWzJdLnJlcGxhY2UoL15cK3xccyovZywi
Iik7dmFyIGI9LygtPykoXGQqKSg/Om4oWytcLV0/XGQqKSk/Ly5leGVjKGFbMl09PT0iZXZlbiIm
JiIybiJ8fGFbMl09PT0ib2RkIiYmIjJuKzEifHwhL1xELy50ZXN0KGFbMl0pJiYiMG4rIithWzJd
fHxhWzJdKTthWzJdPWJbMV0rKGJbMl18fDEpLTAsYVszXT1iWzNdLTB9ZWxzZSBhWzJdJiZtLmVy
cm9yKGFbMF0pO2FbMF09ZSsrO3JldHVybiBhfSxBVFRSOmZ1bmN0aW9uKGEsYixjLGQsZSxmKXt2
YXIgZz1hWzFdPWFbMV0ucmVwbGFjZShqLCIiKTshZiYmby5hdHRyTWFwW2ddJiYoYVsxXT1vLmF0
dHJNYXBbZ10pLGFbNF09KGFbNF18fGFbNV18fCIiKS5yZXBsYWNlKGosIiIpLGFbMl09PT0ifj0i
JiYoYVs0XT0iICIrYVs0XSsiICIpO3JldHVybiBhfSxQU0VVRE86ZnVuY3Rpb24oYixjLGQsZSxm
KXtpZihiWzFdPT09Im5vdCIpaWYoKGEuZXhlYyhiWzNdKXx8IiIpLmxlbmd0aD4xfHwvXlx3Ly50
ZXN0KGJbM10pKWJbM109bShiWzNdLG51bGwsbnVsbCxjKTtlbHNle3ZhciBnPW0uZmlsdGVyKGJb
M10sYyxkLCEwXmYpO2R8fGUucHVzaC5hcHBseShlLGcpO3JldHVybiExfWVsc2UgaWYoby5tYXRj
aC5QT1MudGVzdChiWzBdKXx8by5tYXRjaC5DSElMRC50ZXN0KGJbMF0pKXJldHVybiEwO3JldHVy
biBifSxQT1M6ZnVuY3Rpb24oYSl7YS51bnNoaWZ0KCEwKTtyZXR1cm4gYX19LGZpbHRlcnM6e2Vu
YWJsZWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZGlzYWJsZWQ9PT0hMSYmYS50eXBlIT09ImhpZGRl
biJ9LGRpc2FibGVkOmZ1bmN0aW9uKGEpe3JldHVybiBhLmRpc2FibGVkPT09ITB9LGNoZWNrZWQ6
ZnVuY3Rpb24oYSl7cmV0dXJuIGEuY2hlY2tlZD09PSEwfSxzZWxlY3RlZDpmdW5jdGlvbihhKXth
LnBhcmVudE5vZGUmJmEucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4O3JldHVybiBhLnNlbGVjdGVk
PT09ITB9LHBhcmVudDpmdW5jdGlvbihhKXtyZXR1cm4hIWEuZmlyc3RDaGlsZH0sZW1wdHk6ZnVu
Y3Rpb24oYSl7cmV0dXJuIWEuZmlyc3RDaGlsZH0saGFzOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4h
IW0oY1szXSxhKS5sZW5ndGh9LGhlYWRlcjpmdW5jdGlvbihhKXtyZXR1cm4vaFxkL2kudGVzdChh
Lm5vZGVOYW1lKX0sdGV4dDpmdW5jdGlvbihhKXt2YXIgYj1hLmdldEF0dHJpYnV0ZSgidHlwZSIp
LGM9YS50eXBlO3JldHVybiBhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT0iaW5wdXQiJiYidGV4
dCI9PT1jJiYoYj09PWN8fGI9PT1udWxsKX0scmFkaW86ZnVuY3Rpb24oYSl7cmV0dXJuIGEubm9k
ZU5hbWUudG9Mb3dlckNhc2UoKT09PSJpbnB1dCImJiJyYWRpbyI9PT1hLnR5cGV9LGNoZWNrYm94
OmZ1bmN0aW9uKGEpe3JldHVybiBhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT0iaW5wdXQiJiYi
Y2hlY2tib3giPT09YS50eXBlfSxmaWxlOmZ1bmN0aW9uKGEpe3JldHVybiBhLm5vZGVOYW1lLnRv
TG93ZXJDYXNlKCk9PT0iaW5wdXQiJiYiZmlsZSI9PT1hLnR5cGV9LHBhc3N3b3JkOmZ1bmN0aW9u
KGEpe3JldHVybiBhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT0iaW5wdXQiJiYicGFzc3dvcmQi
PT09YS50eXBlfSxzdWJtaXQ6ZnVuY3Rpb24oYSl7dmFyIGI9YS5ub2RlTmFtZS50b0xvd2VyQ2Fz
ZSgpO3JldHVybihiPT09ImlucHV0Inx8Yj09PSJidXR0b24iKSYmInN1Ym1pdCI9PT1hLnR5cGV9
LGltYWdlOmZ1bmN0aW9uKGEpe3JldHVybiBhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT0iaW5w
dXQiJiYiaW1hZ2UiPT09YS50eXBlfSxyZXNldDpmdW5jdGlvbihhKXt2YXIgYj1hLm5vZGVOYW1l
LnRvTG93ZXJDYXNlKCk7cmV0dXJuKGI9PT0iaW5wdXQifHxiPT09ImJ1dHRvbiIpJiYicmVzZXQi
PT09YS50eXBlfSxidXR0b246ZnVuY3Rpb24oYSl7dmFyIGI9YS5ub2RlTmFtZS50b0xvd2VyQ2Fz
ZSgpO3JldHVybiBiPT09ImlucHV0IiYmImJ1dHRvbiI9PT1hLnR5cGV8fGI9PT0iYnV0dG9uIn0s
aW5wdXQ6ZnVuY3Rpb24oYSl7cmV0dXJuL2lucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24vaS50
ZXN0KGEubm9kZU5hbWUpfSxmb2N1czpmdW5jdGlvbihhKXtyZXR1cm4gYT09PWEub3duZXJEb2N1
bWVudC5hY3RpdmVFbGVtZW50fX0sc2V0RmlsdGVyczp7Zmlyc3Q6ZnVuY3Rpb24oYSxiKXtyZXR1
cm4gYj09PTB9LGxhc3Q6ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIGI9PT1kLmxlbmd0aC0xfSxl
dmVuOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGIlMj09PTB9LG9kZDpmdW5jdGlvbihhLGIpe3JldHVy
biBiJTI9PT0xfSxsdDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGI8Y1szXS0wfSxndDpmdW5jdGlv
bihhLGIsYyl7cmV0dXJuIGI+Y1szXS0wfSxudGg6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBjWzNd
LTA9PT1ifSxlcTpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGNbM10tMD09PWJ9fSxmaWx0ZXI6e1BT
RVVETzpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZT1iWzFdLGY9by5maWx0ZXJzW2VdO2lmKGYpcmV0
dXJuIGYoYSxjLGIsZCk7aWYoZT09PSJjb250YWlucyIpcmV0dXJuKGEudGV4dENvbnRlbnR8fGEu
aW5uZXJUZXh0fHxuKFthXSl8fCIiKS5pbmRleE9mKGJbM10pPj0wO2lmKGU9PT0ibm90Iil7dmFy
IGc9YlszXTtmb3IodmFyIGg9MCxpPWcubGVuZ3RoO2g8aTtoKyspaWYoZ1toXT09PWEpcmV0dXJu
ITE7cmV0dXJuITB9bS5lcnJvcihlKX0sQ0hJTEQ6ZnVuY3Rpb24oYSxiKXt2YXIgYyxlLGYsZyxo
LGksaixrPWJbMV0sbD1hO3N3aXRjaChrKXtjYXNlIm9ubHkiOmNhc2UiZmlyc3QiOndoaWxlKGw9
bC5wcmV2aW91c1NpYmxpbmcpaWYobC5ub2RlVHlwZT09PTEpcmV0dXJuITE7aWYoaz09PSJmaXJz
dCIpcmV0dXJuITA7bD1hO2Nhc2UibGFzdCI6d2hpbGUobD1sLm5leHRTaWJsaW5nKWlmKGwubm9k
ZVR5cGU9PT0xKXJldHVybiExO3JldHVybiEwO2Nhc2UibnRoIjpjPWJbMl0sZT1iWzNdO2lmKGM9
PT0xJiZlPT09MClyZXR1cm4hMDtmPWJbMF0sZz1hLnBhcmVudE5vZGU7aWYoZyYmKGdbZF0hPT1m
fHwhYS5ub2RlSW5kZXgpKXtpPTA7Zm9yKGw9Zy5maXJzdENoaWxkO2w7bD1sLm5leHRTaWJsaW5n
KWwubm9kZVR5cGU9PT0xJiYobC5ub2RlSW5kZXg9KytpKTtnW2RdPWZ9aj1hLm5vZGVJbmRleC1l
O3JldHVybiBjPT09MD9qPT09MDpqJWM9PT0wJiZqL2M+PTB9fSxJRDpmdW5jdGlvbihhLGIpe3Jl
dHVybiBhLm5vZGVUeXBlPT09MSYmYS5nZXRBdHRyaWJ1dGUoImlkIik9PT1ifSxUQUc6ZnVuY3Rp
b24oYSxiKXtyZXR1cm4gYj09PSIqIiYmYS5ub2RlVHlwZT09PTF8fCEhYS5ub2RlTmFtZSYmYS5u
b2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09Yn0sQ0xBU1M6ZnVuY3Rpb24oYSxiKXtyZXR1cm4oIiAi
KyhhLmNsYXNzTmFtZXx8YS5nZXRBdHRyaWJ1dGUoImNsYXNzIikpKyIgIikuaW5kZXhPZihiKT4t
MX0sQVRUUjpmdW5jdGlvbihhLGIpe3ZhciBjPWJbMV0sZD1tLmF0dHI/bS5hdHRyKGEsYyk6by5h
dHRySGFuZGxlW2NdP28uYXR0ckhhbmRsZVtjXShhKTphW2NdIT1udWxsP2FbY106YS5nZXRBdHRy
aWJ1dGUoYyksZT1kKyIiLGY9YlsyXSxnPWJbNF07cmV0dXJuIGQ9PW51bGw/Zj09PSIhPSI6IWYm
Jm0uYXR0cj9kIT1udWxsOmY9PT0iPSI/ZT09PWc6Zj09PSIqPSI/ZS5pbmRleE9mKGcpPj0wOmY9
PT0ifj0iPygiICIrZSsiICIpLmluZGV4T2YoZyk+PTA6Zz9mPT09IiE9Ij9lIT09ZzpmPT09Il49
Ij9lLmluZGV4T2YoZyk9PT0wOmY9PT0iJD0iP2Uuc3Vic3RyKGUubGVuZ3RoLWcubGVuZ3RoKT09
PWc6Zj09PSJ8PSI/ZT09PWd8fGUuc3Vic3RyKDAsZy5sZW5ndGgrMSk9PT1nKyItIjohMTplJiZk
IT09ITF9LFBPUzpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZT1iWzJdLGY9by5zZXRGaWx0ZXJzW2Vd
O2lmKGYpcmV0dXJuIGYoYSxjLGIsZCl9fX0scD1vLm1hdGNoLlBPUyxxPWZ1bmN0aW9uKGEsYil7
cmV0dXJuIlxcIisoYi0wKzEpfTtmb3IodmFyIHIgaW4gby5tYXRjaClvLm1hdGNoW3JdPW5ldyBS
ZWdFeHAoby5tYXRjaFtyXS5zb3VyY2UrLyg/IVteXFtdKlxdKSg/IVteXChdKlwpKS8uc291cmNl
KSxvLmxlZnRNYXRjaFtyXT1uZXcgUmVnRXhwKC8oXig/Oi58XHJ8XG4pKj8pLy5zb3VyY2Urby5t
YXRjaFtyXS5zb3VyY2UucmVwbGFjZSgvXFwoXGQrKS9nLHEpKTtvLm1hdGNoLmdsb2JhbFBPUz1w
O3ZhciBzPWZ1bmN0aW9uKGEsYil7YT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhLDApO2lm
KGIpe2IucHVzaC5hcHBseShiLGEpO3JldHVybiBifXJldHVybiBhfTt0cnl7QXJyYXkucHJvdG90
eXBlLnNsaWNlLmNhbGwoYy5kb2N1bWVudEVsZW1lbnQuY2hpbGROb2RlcywwKVswXS5ub2RlVHlw
ZX1jYXRjaCh0KXtzPWZ1bmN0aW9uKGEsYil7dmFyIGM9MCxkPWJ8fFtdO2lmKGcuY2FsbChhKT09
PSJbb2JqZWN0IEFycmF5XSIpQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoZCxhKTtlbHNlIGlm
KHR5cGVvZiBhLmxlbmd0aD09Im51bWJlciIpZm9yKHZhciBlPWEubGVuZ3RoO2M8ZTtjKyspZC5w
dXNoKGFbY10pO2Vsc2UgZm9yKDthW2NdO2MrKylkLnB1c2goYVtjXSk7cmV0dXJuIGR9fXZhciB1
LHY7Yy5kb2N1bWVudEVsZW1lbnQuY29tcGFyZURvY3VtZW50UG9zaXRpb24/dT1mdW5jdGlvbihh
LGIpe2lmKGE9PT1iKXtoPSEwO3JldHVybiAwfWlmKCFhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9u
fHwhYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbilyZXR1cm4gYS5jb21wYXJlRG9jdW1lbnRQb3Np
dGlvbj8tMToxO3JldHVybiBhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGIpJjQ/LTE6MX06KHU9
ZnVuY3Rpb24oYSxiKXtpZihhPT09Yil7aD0hMDtyZXR1cm4gMH1pZihhLnNvdXJjZUluZGV4JiZi
LnNvdXJjZUluZGV4KXJldHVybiBhLnNvdXJjZUluZGV4LWIuc291cmNlSW5kZXg7dmFyIGMsZCxl
PVtdLGY9W10sZz1hLnBhcmVudE5vZGUsaT1iLnBhcmVudE5vZGUsaj1nO2lmKGc9PT1pKXJldHVy
biB2KGEsYik7aWYoIWcpcmV0dXJuLTE7aWYoIWkpcmV0dXJuIDE7d2hpbGUoaillLnVuc2hpZnQo
aiksaj1qLnBhcmVudE5vZGU7aj1pO3doaWxlKGopZi51bnNoaWZ0KGopLGo9ai5wYXJlbnROb2Rl
O2M9ZS5sZW5ndGgsZD1mLmxlbmd0aDtmb3IodmFyIGs9MDtrPGMmJms8ZDtrKyspaWYoZVtrXSE9
PWZba10pcmV0dXJuIHYoZVtrXSxmW2tdKTtyZXR1cm4gaz09PWM/dihhLGZba10sLTEpOnYoZVtr
XSxiLDEpfSx2PWZ1bmN0aW9uKGEsYixjKXtpZihhPT09YilyZXR1cm4gYzt2YXIgZD1hLm5leHRT
aWJsaW5nO3doaWxlKGQpe2lmKGQ9PT1iKXJldHVybi0xO2Q9ZC5uZXh0U2libGluZ31yZXR1cm4g
MX0pLGZ1bmN0aW9uKCl7dmFyIGE9Yy5jcmVhdGVFbGVtZW50KCJkaXYiKSxkPSJzY3JpcHQiKyhu
ZXcgRGF0ZSkuZ2V0VGltZSgpLGU9Yy5kb2N1bWVudEVsZW1lbnQ7YS5pbm5lckhUTUw9IjxhIG5h
bWU9JyIrZCsiJy8+IixlLmluc2VydEJlZm9yZShhLGUuZmlyc3RDaGlsZCksYy5nZXRFbGVtZW50
QnlJZChkKSYmKG8uZmluZC5JRD1mdW5jdGlvbihhLGMsZCl7aWYodHlwZW9mIGMuZ2V0RWxlbWVu
dEJ5SWQhPSJ1bmRlZmluZWQiJiYhZCl7dmFyIGU9Yy5nZXRFbGVtZW50QnlJZChhWzFdKTtyZXR1
cm4gZT9lLmlkPT09YVsxXXx8dHlwZW9mIGUuZ2V0QXR0cmlidXRlTm9kZSE9InVuZGVmaW5lZCIm
JmUuZ2V0QXR0cmlidXRlTm9kZSgiaWQiKS5ub2RlVmFsdWU9PT1hWzFdP1tlXTpiOltdfX0sby5m
aWx0ZXIuSUQ9ZnVuY3Rpb24oYSxiKXt2YXIgYz10eXBlb2YgYS5nZXRBdHRyaWJ1dGVOb2RlIT0i
dW5kZWZpbmVkIiYmYS5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpO3JldHVybiBhLm5vZGVUeXBlPT09
MSYmYyYmYy5ub2RlVmFsdWU9PT1ifSksZS5yZW1vdmVDaGlsZChhKSxlPWE9bnVsbH0oKSxmdW5j
dGlvbigpe3ZhciBhPWMuY3JlYXRlRWxlbWVudCgiZGl2Iik7YS5hcHBlbmRDaGlsZChjLmNyZWF0
ZUNvbW1lbnQoIiIpKSxhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikubGVuZ3RoPjAmJihvLmZp
bmQuVEFHPWZ1bmN0aW9uKGEsYil7dmFyIGM9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZShhWzFdKTtp
ZihhWzFdPT09IioiKXt2YXIgZD1bXTtmb3IodmFyIGU9MDtjW2VdO2UrKyljW2VdLm5vZGVUeXBl
PT09MSYmZC5wdXNoKGNbZV0pO2M9ZH1yZXR1cm4gY30pLGEuaW5uZXJIVE1MPSI8YSBocmVmPScj
Jz48L2E+IixhLmZpcnN0Q2hpbGQmJnR5cGVvZiBhLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlIT0i
dW5kZWZpbmVkIiYmYS5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSgiaHJlZiIpIT09IiMiJiYoby5h
dHRySGFuZGxlLmhyZWY9ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZ2V0QXR0cmlidXRlKCJocmVmIiwy
KX0pLGE9bnVsbH0oKSxjLnF1ZXJ5U2VsZWN0b3JBbGwmJmZ1bmN0aW9uKCl7dmFyIGE9bSxiPWMu
Y3JlYXRlRWxlbWVudCgiZGl2IiksZD0iX19zaXp6bGVfXyI7Yi5pbm5lckhUTUw9IjxwIGNsYXNz
PSdURVNUJz48L3A+IjtpZighYi5xdWVyeVNlbGVjdG9yQWxsfHxiLnF1ZXJ5U2VsZWN0b3JBbGwo
Ii5URVNUIikubGVuZ3RoIT09MCl7bT1mdW5jdGlvbihiLGUsZixnKXtlPWV8fGM7aWYoIWcmJiFt
LmlzWE1MKGUpKXt2YXIgaD0vXihcdyskKXxeXC4oW1x3XC1dKyQpfF4jKFtcd1wtXSskKS8uZXhl
YyhiKTtpZihoJiYoZS5ub2RlVHlwZT09PTF8fGUubm9kZVR5cGU9PT05KSl7aWYoaFsxXSlyZXR1
cm4gcyhlLmdldEVsZW1lbnRzQnlUYWdOYW1lKGIpLGYpO2lmKGhbMl0mJm8uZmluZC5DTEFTUyYm
ZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKXJldHVybiBzKGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFt
ZShoWzJdKSxmKX1pZihlLm5vZGVUeXBlPT09OSl7aWYoYj09PSJib2R5IiYmZS5ib2R5KXJldHVy
biBzKFtlLmJvZHldLGYpO2lmKGgmJmhbM10pe3ZhciBpPWUuZ2V0RWxlbWVudEJ5SWQoaFszXSk7
aWYoIWl8fCFpLnBhcmVudE5vZGUpcmV0dXJuIHMoW10sZik7aWYoaS5pZD09PWhbM10pcmV0dXJu
IHMoW2ldLGYpfXRyeXtyZXR1cm4gcyhlLnF1ZXJ5U2VsZWN0b3JBbGwoYiksZil9Y2F0Y2goail7
fX1lbHNlIGlmKGUubm9kZVR5cGU9PT0xJiZlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkhPT0ib2Jq
ZWN0Iil7dmFyIGs9ZSxsPWUuZ2V0QXR0cmlidXRlKCJpZCIpLG49bHx8ZCxwPWUucGFyZW50Tm9k
ZSxxPS9eXHMqWyt+XS8udGVzdChiKTtsP249bi5yZXBsYWNlKC8nL2csIlxcJCYiKTplLnNldEF0
dHJpYnV0ZSgiaWQiLG4pLHEmJnAmJihlPWUucGFyZW50Tm9kZSk7dHJ5e2lmKCFxfHxwKXJldHVy
biBzKGUucXVlcnlTZWxlY3RvckFsbCgiW2lkPSciK24rIiddICIrYiksZil9Y2F0Y2gocil7fWZp
bmFsbHl7bHx8ay5yZW1vdmVBdHRyaWJ1dGUoImlkIil9fX1yZXR1cm4gYShiLGUsZixnKX07Zm9y
KHZhciBlIGluIGEpbVtlXT1hW2VdO2I9bnVsbH19KCksZnVuY3Rpb24oKXt2YXIgYT1jLmRvY3Vt
ZW50RWxlbWVudCxiPWEubWF0Y2hlc1NlbGVjdG9yfHxhLm1vek1hdGNoZXNTZWxlY3Rvcnx8YS53
ZWJraXRNYXRjaGVzU2VsZWN0b3J8fGEubXNNYXRjaGVzU2VsZWN0b3I7aWYoYil7dmFyIGQ9IWIu
Y2FsbChjLmNyZWF0ZUVsZW1lbnQoImRpdiIpLCJkaXYiKSxlPSExO3RyeXtiLmNhbGwoYy5kb2N1
bWVudEVsZW1lbnQsIlt0ZXN0IT0nJ106c2l6emxlIil9Y2F0Y2goZil7ZT0hMH1tLm1hdGNoZXNT
ZWxlY3Rvcj1mdW5jdGlvbihhLGMpe2M9Yy5yZXBsYWNlKC9cPVxzKihbXiciXF1dKilccypcXS9n
LCI9JyQxJ10iKTtpZighbS5pc1hNTChhKSl0cnl7aWYoZXx8IW8ubWF0Y2guUFNFVURPLnRlc3Qo
YykmJiEvIT0vLnRlc3QoYykpe3ZhciBmPWIuY2FsbChhLGMpO2lmKGZ8fCFkfHxhLmRvY3VtZW50
JiZhLmRvY3VtZW50Lm5vZGVUeXBlIT09MTEpcmV0dXJuIGZ9fWNhdGNoKGcpe31yZXR1cm4gbShj
LG51bGwsbnVsbCxbYV0pLmxlbmd0aD4wfX19KCksZnVuY3Rpb24oKXt2YXIgYT1jLmNyZWF0ZUVs
ZW1lbnQoImRpdiIpO2EuaW5uZXJIVE1MPSI8ZGl2IGNsYXNzPSd0ZXN0IGUnPjwvZGl2PjxkaXYg
Y2xhc3M9J3Rlc3QnPjwvZGl2PiI7aWYoISFhLmdldEVsZW1lbnRzQnlDbGFzc05hbWUmJmEuZ2V0
RWxlbWVudHNCeUNsYXNzTmFtZSgiZSIpLmxlbmd0aCE9PTApe2EubGFzdENoaWxkLmNsYXNzTmFt
ZT0iZSI7aWYoYS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJlIikubGVuZ3RoPT09MSlyZXR1cm47
by5vcmRlci5zcGxpY2UoMSwwLCJDTEFTUyIpLG8uZmluZC5DTEFTUz1mdW5jdGlvbihhLGIsYyl7
aWYodHlwZW9mIGIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSE9InVuZGVmaW5lZCImJiFjKXJldHVy
biBiLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoYVsxXSl9LGE9bnVsbH19KCksYy5kb2N1bWVudEVs
ZW1lbnQuY29udGFpbnM/bS5jb250YWlucz1mdW5jdGlvbihhLGIpe3JldHVybiBhIT09YiYmKGEu
Y29udGFpbnM/YS5jb250YWlucyhiKTohMCl9OmMuZG9jdW1lbnRFbGVtZW50LmNvbXBhcmVEb2N1
bWVudFBvc2l0aW9uP20uY29udGFpbnM9ZnVuY3Rpb24oYSxiKXtyZXR1cm4hIShhLmNvbXBhcmVE
b2N1bWVudFBvc2l0aW9uKGIpJjE2KX06bS5jb250YWlucz1mdW5jdGlvbigpe3JldHVybiExfSxt
LmlzWE1MPWZ1bmN0aW9uKGEpe3ZhciBiPShhP2Eub3duZXJEb2N1bWVudHx8YTowKS5kb2N1bWVu
dEVsZW1lbnQ7cmV0dXJuIGI/Yi5ub2RlTmFtZSE9PSJIVE1MIjohMX07dmFyIHk9ZnVuY3Rpb24o
YSxiLGMpe3ZhciBkLGU9W10sZj0iIixnPWIubm9kZVR5cGU/W2JdOmI7d2hpbGUoZD1vLm1hdGNo
LlBTRVVETy5leGVjKGEpKWYrPWRbMF0sYT1hLnJlcGxhY2Uoby5tYXRjaC5QU0VVRE8sIiIpO2E9
by5yZWxhdGl2ZVthXT9hKyIqIjphO2Zvcih2YXIgaD0wLGk9Zy5sZW5ndGg7aDxpO2grKyltKGEs
Z1toXSxlLGMpO3JldHVybiBtLmZpbHRlcihmLGUpfTttLmF0dHI9Zi5hdHRyLG0uc2VsZWN0b3Jz
LmF0dHJNYXA9e30sZi5maW5kPW0sZi5leHByPW0uc2VsZWN0b3JzLGYuZXhwclsiOiJdPWYuZXhw
ci5maWx0ZXJzLGYudW5pcXVlPW0udW5pcXVlU29ydCxmLnRleHQ9bS5nZXRUZXh0LGYuaXNYTUxE
b2M9bS5pc1hNTCxmLmNvbnRhaW5zPW0uY29udGFpbnN9KCk7dmFyIEw9L1VudGlsJC8sTT0vXig/
OnBhcmVudHN8cHJldlVudGlsfHByZXZBbGwpLyxOPS8sLyxPPS9eLlteOiNcW1wuLF0qJC8sUD1B
cnJheS5wcm90b3R5cGUuc2xpY2UsUT1mLmV4cHIubWF0Y2guZ2xvYmFsUE9TLFI9e2NoaWxkcmVu
OiEwLGNvbnRlbnRzOiEwLG5leHQ6ITAscHJldjohMH07Zi5mbi5leHRlbmQoe2ZpbmQ6ZnVuY3Rp
b24oYSl7dmFyIGI9dGhpcyxjLGQ7aWYodHlwZW9mIGEhPSJzdHJpbmciKXJldHVybiBmKGEpLmZp
bHRlcihmdW5jdGlvbigpe2ZvcihjPTAsZD1iLmxlbmd0aDtjPGQ7YysrKWlmKGYuY29udGFpbnMo
YltjXSx0aGlzKSlyZXR1cm4hMH0pO3ZhciBlPXRoaXMucHVzaFN0YWNrKCIiLCJmaW5kIixhKSxn
LGgsaTtmb3IoYz0wLGQ9dGhpcy5sZW5ndGg7YzxkO2MrKyl7Zz1lLmxlbmd0aCxmLmZpbmQoYSx0
aGlzW2NdLGUpO2lmKGM+MClmb3IoaD1nO2g8ZS5sZW5ndGg7aCsrKWZvcihpPTA7aTxnO2krKylp
ZihlW2ldPT09ZVtoXSl7ZS5zcGxpY2UoaC0tLDEpO2JyZWFrfX1yZXR1cm4gZX0saGFzOmZ1bmN0
aW9uKGEpe3ZhciBiPWYoYSk7cmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uKCl7Zm9yKHZhciBh
PTAsYz1iLmxlbmd0aDthPGM7YSsrKWlmKGYuY29udGFpbnModGhpcyxiW2FdKSlyZXR1cm4hMH0p
fSxub3Q6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKFQodGhpcyxhLCExKSwibm90
IixhKX0sZmlsdGVyOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnB1c2hTdGFjayhUKHRoaXMsYSwh
MCksImZpbHRlciIsYSl9LGlzOmZ1bmN0aW9uKGEpe3JldHVybiEhYSYmKHR5cGVvZiBhPT0ic3Ry
aW5nIj9RLnRlc3QoYSk/ZihhLHRoaXMuY29udGV4dCkuaW5kZXgodGhpc1swXSk+PTA6Zi5maWx0
ZXIoYSx0aGlzKS5sZW5ndGg+MDp0aGlzLmZpbHRlcihhKS5sZW5ndGg+MCl9LGNsb3Nlc3Q6ZnVu
Y3Rpb24oYSxiKXt2YXIgYz1bXSxkLGUsZz10aGlzWzBdO2lmKGYuaXNBcnJheShhKSl7dmFyIGg9
MTt3aGlsZShnJiZnLm93bmVyRG9jdW1lbnQmJmchPT1iKXtmb3IoZD0wO2Q8YS5sZW5ndGg7ZCsr
KWYoZykuaXMoYVtkXSkmJmMucHVzaCh7c2VsZWN0b3I6YVtkXSxlbGVtOmcsbGV2ZWw6aH0pO2c9
Zy5wYXJlbnROb2RlLGgrK31yZXR1cm4gY312YXIgaT1RLnRlc3QoYSl8fHR5cGVvZiBhIT0ic3Ry
aW5nIj9mKGEsYnx8dGhpcy5jb250ZXh0KTowO2ZvcihkPTAsZT10aGlzLmxlbmd0aDtkPGU7ZCsr
KXtnPXRoaXNbZF07d2hpbGUoZyl7aWYoaT9pLmluZGV4KGcpPi0xOmYuZmluZC5tYXRjaGVzU2Vs
ZWN0b3IoZyxhKSl7Yy5wdXNoKGcpO2JyZWFrfWc9Zy5wYXJlbnROb2RlO2lmKCFnfHwhZy5vd25l
ckRvY3VtZW50fHxnPT09Ynx8Zy5ub2RlVHlwZT09PTExKWJyZWFrfX1jPWMubGVuZ3RoPjE/Zi51
bmlxdWUoYyk6YztyZXR1cm4gdGhpcy5wdXNoU3RhY2soYywiY2xvc2VzdCIsYSl9LGluZGV4OmZ1
bmN0aW9uKGEpe2lmKCFhKXJldHVybiB0aGlzWzBdJiZ0aGlzWzBdLnBhcmVudE5vZGU/dGhpcy5w
cmV2QWxsKCkubGVuZ3RoOi0xO2lmKHR5cGVvZiBhPT0ic3RyaW5nIilyZXR1cm4gZi5pbkFycmF5
KHRoaXNbMF0sZihhKSk7cmV0dXJuIGYuaW5BcnJheShhLmpxdWVyeT9hWzBdOmEsdGhpcyl9LGFk
ZDpmdW5jdGlvbihhLGIpe3ZhciBjPXR5cGVvZiBhPT0ic3RyaW5nIj9mKGEsYik6Zi5tYWtlQXJy
YXkoYSYmYS5ub2RlVHlwZT9bYV06YSksZD1mLm1lcmdlKHRoaXMuZ2V0KCksYyk7cmV0dXJuIHRo
aXMucHVzaFN0YWNrKFMoY1swXSl8fFMoZFswXSk/ZDpmLnVuaXF1ZShkKSl9LGFuZFNlbGY6ZnVu
Y3Rpb24oKXtyZXR1cm4gdGhpcy5hZGQodGhpcy5wcmV2T2JqZWN0KX19KSxmLmVhY2goe3BhcmVu
dDpmdW5jdGlvbihhKXt2YXIgYj1hLnBhcmVudE5vZGU7cmV0dXJuIGImJmIubm9kZVR5cGUhPT0x
MT9iOm51bGx9LHBhcmVudHM6ZnVuY3Rpb24oYSl7cmV0dXJuIGYuZGlyKGEsInBhcmVudE5vZGUi
KX0scGFyZW50c1VudGlsOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZi5kaXIoYSwicGFyZW50Tm9k
ZSIsYyl9LG5leHQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGYubnRoKGEsMiwibmV4dFNpYmxpbmciKX0s
cHJldjpmdW5jdGlvbihhKXtyZXR1cm4gZi5udGgoYSwyLCJwcmV2aW91c1NpYmxpbmciKX0sbmV4
dEFsbDpmdW5jdGlvbihhKXtyZXR1cm4gZi5kaXIoYSwibmV4dFNpYmxpbmciKX0scHJldkFsbDpm
dW5jdGlvbihhKXtyZXR1cm4gZi5kaXIoYSwicHJldmlvdXNTaWJsaW5nIil9LG5leHRVbnRpbDpm
dW5jdGlvbihhLGIsYyl7cmV0dXJuIGYuZGlyKGEsIm5leHRTaWJsaW5nIixjKX0scHJldlVudGls
OmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZi5kaXIoYSwicHJldmlvdXNTaWJsaW5nIixjKX0sc2li
bGluZ3M6ZnVuY3Rpb24oYSl7cmV0dXJuIGYuc2libGluZygoYS5wYXJlbnROb2RlfHx7fSkuZmly
c3RDaGlsZCxhKX0sY2hpbGRyZW46ZnVuY3Rpb24oYSl7cmV0dXJuIGYuc2libGluZyhhLmZpcnN0
Q2hpbGQpfSxjb250ZW50czpmdW5jdGlvbihhKXtyZXR1cm4gZi5ub2RlTmFtZShhLCJpZnJhbWUi
KT9hLmNvbnRlbnREb2N1bWVudHx8YS5jb250ZW50V2luZG93LmRvY3VtZW50OmYubWFrZUFycmF5
KGEuY2hpbGROb2Rlcyl9fSxmdW5jdGlvbihhLGIpe2YuZm5bYV09ZnVuY3Rpb24oYyxkKXt2YXIg
ZT1mLm1hcCh0aGlzLGIsYyk7TC50ZXN0KGEpfHwoZD1jKSxkJiZ0eXBlb2YgZD09InN0cmluZyIm
JihlPWYuZmlsdGVyKGQsZSkpLGU9dGhpcy5sZW5ndGg+MSYmIVJbYV0/Zi51bmlxdWUoZSk6ZSwo
dGhpcy5sZW5ndGg+MXx8Ti50ZXN0KGQpKSYmTS50ZXN0KGEpJiYoZT1lLnJldmVyc2UoKSk7cmV0
dXJuIHRoaXMucHVzaFN0YWNrKGUsYSxQLmNhbGwoYXJndW1lbnRzKS5qb2luKCIsIikpfX0pLGYu
ZXh0ZW5kKHtmaWx0ZXI6ZnVuY3Rpb24oYSxiLGMpe2MmJihhPSI6bm90KCIrYSsiKSIpO3JldHVy
biBiLmxlbmd0aD09PTE/Zi5maW5kLm1hdGNoZXNTZWxlY3RvcihiWzBdLGEpP1tiWzBdXTpbXTpm
LmZpbmQubWF0Y2hlcyhhLGIpfSxkaXI6ZnVuY3Rpb24oYSxjLGQpe3ZhciBlPVtdLGc9YVtjXTt3
aGlsZShnJiZnLm5vZGVUeXBlIT09OSYmKGQ9PT1ifHxnLm5vZGVUeXBlIT09MXx8IWYoZykuaXMo
ZCkpKWcubm9kZVR5cGU9PT0xJiZlLnB1c2goZyksZz1nW2NdO3JldHVybiBlfSxudGg6ZnVuY3Rp
b24oYSxiLGMsZCl7Yj1ifHwxO3ZhciBlPTA7Zm9yKDthO2E9YVtjXSlpZihhLm5vZGVUeXBlPT09
MSYmKytlPT09YilicmVhaztyZXR1cm4gYX0sc2libGluZzpmdW5jdGlvbihhLGIpe3ZhciBjPVtd
O2Zvcig7YTthPWEubmV4dFNpYmxpbmcpYS5ub2RlVHlwZT09PTEmJmEhPT1iJiZjLnB1c2goYSk7
cmV0dXJuIGN9fSk7dmFyIFY9ImFiYnJ8YXJ0aWNsZXxhc2lkZXxhdWRpb3xiZGl8Y2FudmFzfGRh
dGF8ZGF0YWxpc3R8ZGV0YWlsc3xmaWdjYXB0aW9ufGZpZ3VyZXxmb290ZXJ8aGVhZGVyfGhncm91
cHxtYXJrfG1ldGVyfG5hdnxvdXRwdXR8cHJvZ3Jlc3N8c2VjdGlvbnxzdW1tYXJ5fHRpbWV8dmlk
ZW8iLFc9LyBqUXVlcnlcZCs9Iig/OlxkK3xudWxsKSIvZyxYPS9eXHMrLyxZPS88KD8hYXJlYXxi
cnxjb2x8ZW1iZWR8aHJ8aW1nfGlucHV0fGxpbmt8bWV0YXxwYXJhbSkoKFtcdzpdKylbXj5dKilc
Lz4vaWcsWj0vPChbXHc6XSspLywkPS88dGJvZHkvaSxfPS88fCYjP1x3KzsvLGJhPS88KD86c2Ny
aXB0fHN0eWxlKS9pLGJiPS88KD86c2NyaXB0fG9iamVjdHxlbWJlZHxvcHRpb258c3R5bGUpL2ks
YmM9bmV3IFJlZ0V4cCgiPCg/OiIrVisiKVtcXHMvPl0iLCJpIiksYmQ9L2NoZWNrZWRccyooPzpb
Xj1dfD1ccyouY2hlY2tlZC4pL2ksYmU9L1wvKGphdmF8ZWNtYSlzY3JpcHQvaSxiZj0vXlxzKjwh
KD86XFtDREFUQVxbfFwtXC0pLyxiZz17b3B0aW9uOlsxLCI8c2VsZWN0IG11bHRpcGxlPSdtdWx0
aXBsZSc+IiwiPC9zZWxlY3Q+Il0sbGVnZW5kOlsxLCI8ZmllbGRzZXQ+IiwiPC9maWVsZHNldD4i
XSx0aGVhZDpbMSwiPHRhYmxlPiIsIjwvdGFibGU+Il0sdHI6WzIsIjx0YWJsZT48dGJvZHk+Iiwi
PC90Ym9keT48L3RhYmxlPiJdLHRkOlszLCI8dGFibGU+PHRib2R5Pjx0cj4iLCI8L3RyPjwvdGJv
ZHk+PC90YWJsZT4iXSxjb2w6WzIsIjx0YWJsZT48dGJvZHk+PC90Ym9keT48Y29sZ3JvdXA+Iiwi
PC9jb2xncm91cD48L3RhYmxlPiJdLGFyZWE6WzEsIjxtYXA+IiwiPC9tYXA+Il0sX2RlZmF1bHQ6
WzAsIiIsIiJdfSxiaD1VKGMpO2JnLm9wdGdyb3VwPWJnLm9wdGlvbixiZy50Ym9keT1iZy50Zm9v
dD1iZy5jb2xncm91cD1iZy5jYXB0aW9uPWJnLnRoZWFkLGJnLnRoPWJnLnRkLGYuc3VwcG9ydC5o
dG1sU2VyaWFsaXplfHwoYmcuX2RlZmF1bHQ9WzEsImRpdjxkaXY+IiwiPC9kaXY+Il0pLGYuZm4u
ZXh0ZW5kKHt0ZXh0OmZ1bmN0aW9uKGEpe3JldHVybiBmLmFjY2Vzcyh0aGlzLGZ1bmN0aW9uKGEp
e3JldHVybiBhPT09Yj9mLnRleHQodGhpcyk6dGhpcy5lbXB0eSgpLmFwcGVuZCgodGhpc1swXSYm
dGhpc1swXS5vd25lckRvY3VtZW50fHxjKS5jcmVhdGVUZXh0Tm9kZShhKSl9LG51bGwsYSxhcmd1
bWVudHMubGVuZ3RoKX0sd3JhcEFsbDpmdW5jdGlvbihhKXtpZihmLmlzRnVuY3Rpb24oYSkpcmV0
dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXtmKHRoaXMpLndyYXBBbGwoYS5jYWxsKHRoaXMsYikp
fSk7aWYodGhpc1swXSl7dmFyIGI9ZihhLHRoaXNbMF0ub3duZXJEb2N1bWVudCkuZXEoMCkuY2xv
bmUoITApO3RoaXNbMF0ucGFyZW50Tm9kZSYmYi5pbnNlcnRCZWZvcmUodGhpc1swXSksYi5tYXAo
ZnVuY3Rpb24oKXt2YXIgYT10aGlzO3doaWxlKGEuZmlyc3RDaGlsZCYmYS5maXJzdENoaWxkLm5v
ZGVUeXBlPT09MSlhPWEuZmlyc3RDaGlsZDtyZXR1cm4gYX0pLmFwcGVuZCh0aGlzKX1yZXR1cm4g
dGhpc30sd3JhcElubmVyOmZ1bmN0aW9uKGEpe2lmKGYuaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhp
cy5lYWNoKGZ1bmN0aW9uKGIpe2YodGhpcykud3JhcElubmVyKGEuY2FsbCh0aGlzLGIpKX0pO3Jl
dHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYj1mKHRoaXMpLGM9Yi5jb250ZW50cygpO2Mu
bGVuZ3RoP2Mud3JhcEFsbChhKTpiLmFwcGVuZChhKX0pfSx3cmFwOmZ1bmN0aW9uKGEpe3ZhciBi
PWYuaXNGdW5jdGlvbihhKTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGMpe2YodGhpcykud3Jh
cEFsbChiP2EuY2FsbCh0aGlzLGMpOmEpfSl9LHVud3JhcDpmdW5jdGlvbigpe3JldHVybiB0aGlz
LnBhcmVudCgpLmVhY2goZnVuY3Rpb24oKXtmLm5vZGVOYW1lKHRoaXMsImJvZHkiKXx8Zih0aGlz
KS5yZXBsYWNlV2l0aCh0aGlzLmNoaWxkTm9kZXMpfSkuZW5kKCl9LGFwcGVuZDpmdW5jdGlvbigp
e3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cywhMCxmdW5jdGlvbihhKXt0aGlzLm5vZGVU
eXBlPT09MSYmdGhpcy5hcHBlbmRDaGlsZChhKX0pfSxwcmVwZW5kOmZ1bmN0aW9uKCl7cmV0dXJu
IHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLCEwLGZ1bmN0aW9uKGEpe3RoaXMubm9kZVR5cGU9PT0x
JiZ0aGlzLmluc2VydEJlZm9yZShhLHRoaXMuZmlyc3RDaGlsZCl9KX0sYmVmb3JlOmZ1bmN0aW9u
KCl7aWYodGhpc1swXSYmdGhpc1swXS5wYXJlbnROb2RlKXJldHVybiB0aGlzLmRvbU1hbmlwKGFy
Z3VtZW50cywhMSxmdW5jdGlvbihhKXt0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsdGhp
cyl9KTtpZihhcmd1bWVudHMubGVuZ3RoKXt2YXIgYT1mCisrLmNsZWFuKGFyZ3VtZW50cyk7YS5w
dXNoLmFwcGx5KGEsdGhpcy50b0FycmF5KCkpO3JldHVybiB0aGlzLnB1c2hTdGFjayhhLCJiZWZv
cmUiLGFyZ3VtZW50cyl9fSxhZnRlcjpmdW5jdGlvbigpe2lmKHRoaXNbMF0mJnRoaXNbMF0ucGFy
ZW50Tm9kZSlyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsITEsZnVuY3Rpb24oYSl7dGhp
cy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShhLHRoaXMubmV4dFNpYmxpbmcpfSk7aWYoYXJndW1l
bnRzLmxlbmd0aCl7dmFyIGE9dGhpcy5wdXNoU3RhY2sodGhpcywiYWZ0ZXIiLGFyZ3VtZW50cyk7
YS5wdXNoLmFwcGx5KGEsZi5jbGVhbihhcmd1bWVudHMpKTtyZXR1cm4gYX19LHJlbW92ZTpmdW5j
dGlvbihhLGIpe2Zvcih2YXIgYz0wLGQ7KGQ9dGhpc1tjXSkhPW51bGw7YysrKWlmKCFhfHxmLmZp
bHRlcihhLFtkXSkubGVuZ3RoKSFiJiZkLm5vZGVUeXBlPT09MSYmKGYuY2xlYW5EYXRhKGQuZ2V0
RWxlbWVudHNCeVRhZ05hbWUoIioiKSksZi5jbGVhbkRhdGEoW2RdKSksZC5wYXJlbnROb2RlJiZk
LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZCk7cmV0dXJuIHRoaXN9LGVtcHR5OmZ1bmN0aW9uKCl7
Zm9yKHZhciBhPTAsYjsoYj10aGlzW2FdKSE9bnVsbDthKyspe2Iubm9kZVR5cGU9PT0xJiZmLmNs
ZWFuRGF0YShiLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikpO3doaWxlKGIuZmlyc3RDaGlsZCli
LnJlbW92ZUNoaWxkKGIuZmlyc3RDaGlsZCl9cmV0dXJuIHRoaXN9LGNsb25lOmZ1bmN0aW9uKGEs
Yil7YT1hPT1udWxsPyExOmEsYj1iPT1udWxsP2E6YjtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24o
KXtyZXR1cm4gZi5jbG9uZSh0aGlzLGEsYil9KX0saHRtbDpmdW5jdGlvbihhKXtyZXR1cm4gZi5h
Y2Nlc3ModGhpcyxmdW5jdGlvbihhKXt2YXIgYz10aGlzWzBdfHx7fSxkPTAsZT10aGlzLmxlbmd0
aDtpZihhPT09YilyZXR1cm4gYy5ub2RlVHlwZT09PTE/Yy5pbm5lckhUTUwucmVwbGFjZShXLCIi
KTpudWxsO2lmKHR5cGVvZiBhPT0ic3RyaW5nIiYmIWJhLnRlc3QoYSkmJihmLnN1cHBvcnQubGVh
ZGluZ1doaXRlc3BhY2V8fCFYLnRlc3QoYSkpJiYhYmdbKFouZXhlYyhhKXx8WyIiLCIiXSlbMV0u
dG9Mb3dlckNhc2UoKV0pe2E9YS5yZXBsYWNlKFksIjwkMT48LyQyPiIpO3RyeXtmb3IoO2Q8ZTtk
KyspYz10aGlzW2RdfHx7fSxjLm5vZGVUeXBlPT09MSYmKGYuY2xlYW5EYXRhKGMuZ2V0RWxlbWVu
dHNCeVRhZ05hbWUoIioiKSksYy5pbm5lckhUTUw9YSk7Yz0wfWNhdGNoKGcpe319YyYmdGhpcy5l
bXB0eSgpLmFwcGVuZChhKX0sbnVsbCxhLGFyZ3VtZW50cy5sZW5ndGgpfSxyZXBsYWNlV2l0aDpm
dW5jdGlvbihhKXtpZih0aGlzWzBdJiZ0aGlzWzBdLnBhcmVudE5vZGUpe2lmKGYuaXNGdW5jdGlv
bihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe3ZhciBjPWYodGhpcyksZD1jLmh0bWwo
KTtjLnJlcGxhY2VXaXRoKGEuY2FsbCh0aGlzLGIsZCkpfSk7dHlwZW9mIGEhPSJzdHJpbmciJiYo
YT1mKGEpLmRldGFjaCgpKTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5u
ZXh0U2libGluZyxjPXRoaXMucGFyZW50Tm9kZTtmKHRoaXMpLnJlbW92ZSgpLGI/ZihiKS5iZWZv
cmUoYSk6ZihjKS5hcHBlbmQoYSl9KX1yZXR1cm4gdGhpcy5sZW5ndGg/dGhpcy5wdXNoU3RhY2so
ZihmLmlzRnVuY3Rpb24oYSk/YSgpOmEpLCJyZXBsYWNlV2l0aCIsYSk6dGhpc30sZGV0YWNoOmZ1
bmN0aW9uKGEpe3JldHVybiB0aGlzLnJlbW92ZShhLCEwKX0sZG9tTWFuaXA6ZnVuY3Rpb24oYSxj
LGQpe3ZhciBlLGcsaCxpLGo9YVswXSxrPVtdO2lmKCFmLnN1cHBvcnQuY2hlY2tDbG9uZSYmYXJn
dW1lbnRzLmxlbmd0aD09PTMmJnR5cGVvZiBqPT0ic3RyaW5nIiYmYmQudGVzdChqKSlyZXR1cm4g
dGhpcy5lYWNoKGZ1bmN0aW9uKCl7Zih0aGlzKS5kb21NYW5pcChhLGMsZCwhMCl9KTtpZihmLmlz
RnVuY3Rpb24oaikpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihlKXt2YXIgZz1mKHRoaXMpO2Fb
MF09ai5jYWxsKHRoaXMsZSxjP2cuaHRtbCgpOmIpLGcuZG9tTWFuaXAoYSxjLGQpfSk7aWYodGhp
c1swXSl7aT1qJiZqLnBhcmVudE5vZGUsZi5zdXBwb3J0LnBhcmVudE5vZGUmJmkmJmkubm9kZVR5
cGU9PT0xMSYmaS5jaGlsZE5vZGVzLmxlbmd0aD09PXRoaXMubGVuZ3RoP2U9e2ZyYWdtZW50Oml9
OmU9Zi5idWlsZEZyYWdtZW50KGEsdGhpcyxrKSxoPWUuZnJhZ21lbnQsaC5jaGlsZE5vZGVzLmxl
bmd0aD09PTE/Zz1oPWguZmlyc3RDaGlsZDpnPWguZmlyc3RDaGlsZDtpZihnKXtjPWMmJmYubm9k
ZU5hbWUoZywidHIiKTtmb3IodmFyIGw9MCxtPXRoaXMubGVuZ3RoLG49bS0xO2w8bTtsKyspZC5j
YWxsKGM/YmkodGhpc1tsXSxnKTp0aGlzW2xdLGUuY2FjaGVhYmxlfHxtPjEmJmw8bj9mLmNsb25l
KGgsITAsITApOmgpfWsubGVuZ3RoJiZmLmVhY2goayxmdW5jdGlvbihhLGIpe2Iuc3JjP2YuYWph
eCh7dHlwZToiR0VUIixnbG9iYWw6ITEsdXJsOmIuc3JjLGFzeW5jOiExLGRhdGFUeXBlOiJzY3Jp
cHQifSk6Zi5nbG9iYWxFdmFsKChiLnRleHR8fGIudGV4dENvbnRlbnR8fGIuaW5uZXJIVE1MfHwi
IikucmVwbGFjZShiZiwiLyokMCovIikpLGIucGFyZW50Tm9kZSYmYi5wYXJlbnROb2RlLnJlbW92
ZUNoaWxkKGIpfSl9cmV0dXJuIHRoaXN9fSksZi5idWlsZEZyYWdtZW50PWZ1bmN0aW9uKGEsYixk
KXt2YXIgZSxnLGgsaSxqPWFbMF07YiYmYlswXSYmKGk9YlswXS5vd25lckRvY3VtZW50fHxiWzBd
KSxpLmNyZWF0ZURvY3VtZW50RnJhZ21lbnR8fChpPWMpLGEubGVuZ3RoPT09MSYmdHlwZW9mIGo9
PSJzdHJpbmciJiZqLmxlbmd0aDw1MTImJmk9PT1jJiZqLmNoYXJBdCgwKT09PSI8IiYmIWJiLnRl
c3QoaikmJihmLnN1cHBvcnQuY2hlY2tDbG9uZXx8IWJkLnRlc3QoaikpJiYoZi5zdXBwb3J0Lmh0
bWw1Q2xvbmV8fCFiYy50ZXN0KGopKSYmKGc9ITAsaD1mLmZyYWdtZW50c1tqXSxoJiZoIT09MSYm
KGU9aCkpLGV8fChlPWkuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGYuY2xlYW4oYSxpLGUsZCkp
LGcmJihmLmZyYWdtZW50c1tqXT1oP2U6MSk7cmV0dXJue2ZyYWdtZW50OmUsY2FjaGVhYmxlOmd9
fSxmLmZyYWdtZW50cz17fSxmLmVhY2goe2FwcGVuZFRvOiJhcHBlbmQiLHByZXBlbmRUbzoicHJl
cGVuZCIsaW5zZXJ0QmVmb3JlOiJiZWZvcmUiLGluc2VydEFmdGVyOiJhZnRlciIscmVwbGFjZUFs
bDoicmVwbGFjZVdpdGgifSxmdW5jdGlvbihhLGIpe2YuZm5bYV09ZnVuY3Rpb24oYyl7dmFyIGQ9
W10sZT1mKGMpLGc9dGhpcy5sZW5ndGg9PT0xJiZ0aGlzWzBdLnBhcmVudE5vZGU7aWYoZyYmZy5u
b2RlVHlwZT09PTExJiZnLmNoaWxkTm9kZXMubGVuZ3RoPT09MSYmZS5sZW5ndGg9PT0xKXtlW2Jd
KHRoaXNbMF0pO3JldHVybiB0aGlzfWZvcih2YXIgaD0wLGk9ZS5sZW5ndGg7aDxpO2grKyl7dmFy
IGo9KGg+MD90aGlzLmNsb25lKCEwKTp0aGlzKS5nZXQoKTtmKGVbaF0pW2JdKGopLGQ9ZC5jb25j
YXQoail9cmV0dXJuIHRoaXMucHVzaFN0YWNrKGQsYSxlLnNlbGVjdG9yKX19KSxmLmV4dGVuZCh7
Y2xvbmU6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGUsZyxoPWYuc3VwcG9ydC5odG1sNUNsb25lfHxm
LmlzWE1MRG9jKGEpfHwhYmMudGVzdCgiPCIrYS5ub2RlTmFtZSsiPiIpP2EuY2xvbmVOb2RlKCEw
KTpibyhhKTtpZigoIWYuc3VwcG9ydC5ub0Nsb25lRXZlbnR8fCFmLnN1cHBvcnQubm9DbG9uZUNo
ZWNrZWQpJiYoYS5ub2RlVHlwZT09PTF8fGEubm9kZVR5cGU9PT0xMSkmJiFmLmlzWE1MRG9jKGEp
KXtiayhhLGgpLGQ9YmwoYSksZT1ibChoKTtmb3IoZz0wO2RbZ107KytnKWVbZ10mJmJrKGRbZ10s
ZVtnXSl9aWYoYil7YmooYSxoKTtpZihjKXtkPWJsKGEpLGU9YmwoaCk7Zm9yKGc9MDtkW2ddOysr
ZyliaihkW2ddLGVbZ10pfX1kPWU9bnVsbDtyZXR1cm4gaH0sY2xlYW46ZnVuY3Rpb24oYSxiLGQs
ZSl7dmFyIGcsaCxpLGo9W107Yj1ifHxjLHR5cGVvZiBiLmNyZWF0ZUVsZW1lbnQ9PSJ1bmRlZmlu
ZWQiJiYoYj1iLm93bmVyRG9jdW1lbnR8fGJbMF0mJmJbMF0ub3duZXJEb2N1bWVudHx8Yyk7Zm9y
KHZhciBrPTAsbDsobD1hW2tdKSE9bnVsbDtrKyspe3R5cGVvZiBsPT0ibnVtYmVyIiYmKGwrPSIi
KTtpZighbCljb250aW51ZTtpZih0eXBlb2YgbD09InN0cmluZyIpaWYoIV8udGVzdChsKSlsPWIu
Y3JlYXRlVGV4dE5vZGUobCk7ZWxzZXtsPWwucmVwbGFjZShZLCI8JDE+PC8kMj4iKTt2YXIgbT0o
Wi5leGVjKGwpfHxbIiIsIiJdKVsxXS50b0xvd2VyQ2FzZSgpLG49YmdbbV18fGJnLl9kZWZhdWx0
LG89blswXSxwPWIuY3JlYXRlRWxlbWVudCgiZGl2IikscT1iaC5jaGlsZE5vZGVzLHI7Yj09PWM/
YmguYXBwZW5kQ2hpbGQocCk6VShiKS5hcHBlbmRDaGlsZChwKSxwLmlubmVySFRNTD1uWzFdK2wr
blsyXTt3aGlsZShvLS0pcD1wLmxhc3RDaGlsZDtpZighZi5zdXBwb3J0LnRib2R5KXt2YXIgcz0k
LnRlc3QobCksdD1tPT09InRhYmxlIiYmIXM/cC5maXJzdENoaWxkJiZwLmZpcnN0Q2hpbGQuY2hp
bGROb2RlczpuWzFdPT09Ijx0YWJsZT4iJiYhcz9wLmNoaWxkTm9kZXM6W107Zm9yKGk9dC5sZW5n
dGgtMTtpPj0wOy0taSlmLm5vZGVOYW1lKHRbaV0sInRib2R5IikmJiF0W2ldLmNoaWxkTm9kZXMu
bGVuZ3RoJiZ0W2ldLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodFtpXSl9IWYuc3VwcG9ydC5sZWFk
aW5nV2hpdGVzcGFjZSYmWC50ZXN0KGwpJiZwLmluc2VydEJlZm9yZShiLmNyZWF0ZVRleHROb2Rl
KFguZXhlYyhsKVswXSkscC5maXJzdENoaWxkKSxsPXAuY2hpbGROb2RlcyxwJiYocC5wYXJlbnRO
b2RlLnJlbW92ZUNoaWxkKHApLHEubGVuZ3RoPjAmJihyPXFbcS5sZW5ndGgtMV0sciYmci5wYXJl
bnROb2RlJiZyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQocikpKX12YXIgdTtpZighZi5zdXBwb3J0
LmFwcGVuZENoZWNrZWQpaWYobFswXSYmdHlwZW9mICh1PWwubGVuZ3RoKT09Im51bWJlciIpZm9y
KGk9MDtpPHU7aSsrKWJuKGxbaV0pO2Vsc2UgYm4obCk7bC5ub2RlVHlwZT9qLnB1c2gobCk6aj1m
Lm1lcmdlKGosbCl9aWYoZCl7Zz1mdW5jdGlvbihhKXtyZXR1cm4hYS50eXBlfHxiZS50ZXN0KGEu
dHlwZSl9O2ZvcihrPTA7altrXTtrKyspe2g9altrXTtpZihlJiZmLm5vZGVOYW1lKGgsInNjcmlw
dCIpJiYoIWgudHlwZXx8YmUudGVzdChoLnR5cGUpKSllLnB1c2goaC5wYXJlbnROb2RlP2gucGFy
ZW50Tm9kZS5yZW1vdmVDaGlsZChoKTpoKTtlbHNle2lmKGgubm9kZVR5cGU9PT0xKXt2YXIgdj1m
LmdyZXAoaC5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0IiksZyk7ai5zcGxpY2UuYXBwbHko
aixbaysxLDBdLmNvbmNhdCh2KSl9ZC5hcHBlbmRDaGlsZChoKX19fXJldHVybiBqfSxjbGVhbkRh
dGE6ZnVuY3Rpb24oYSl7dmFyIGIsYyxkPWYuY2FjaGUsZT1mLmV2ZW50LnNwZWNpYWwsZz1mLnN1
cHBvcnQuZGVsZXRlRXhwYW5kbztmb3IodmFyIGg9MCxpOyhpPWFbaF0pIT1udWxsO2grKyl7aWYo
aS5ub2RlTmFtZSYmZi5ub0RhdGFbaS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXSljb250aW51ZTtj
PWlbZi5leHBhbmRvXTtpZihjKXtiPWRbY107aWYoYiYmYi5ldmVudHMpe2Zvcih2YXIgaiBpbiBi
LmV2ZW50cyllW2pdP2YuZXZlbnQucmVtb3ZlKGksaik6Zi5yZW1vdmVFdmVudChpLGosYi5oYW5k
bGUpO2IuaGFuZGxlJiYoYi5oYW5kbGUuZWxlbT1udWxsKX1nP2RlbGV0ZSBpW2YuZXhwYW5kb106
aS5yZW1vdmVBdHRyaWJ1dGUmJmkucmVtb3ZlQXR0cmlidXRlKGYuZXhwYW5kbyksZGVsZXRlIGRb
Y119fX19KTt2YXIgYnA9L2FscGhhXChbXildKlwpL2ksYnE9L29wYWNpdHk9KFteKV0qKS8sYnI9
LyhbQS1aXXxebXMpL2csYnM9L15bXC0rXT8oPzpcZCpcLik/XGQrJC9pLGJ0PS9eLT8oPzpcZCpc
Lik/XGQrKD8hcHgpW15cZFxzXSskL2ksYnU9L14oW1wtK10pPShbXC0rLlxkZV0rKS8sYnY9L15t
YXJnaW4vLGJ3PXtwb3NpdGlvbjoiYWJzb2x1dGUiLHZpc2liaWxpdHk6ImhpZGRlbiIsZGlzcGxh
eToiYmxvY2sifSxieD1bIlRvcCIsIlJpZ2h0IiwiQm90dG9tIiwiTGVmdCJdLGJ5LGJ6LGJBO2Yu
Zm4uY3NzPWZ1bmN0aW9uKGEsYyl7cmV0dXJuIGYuYWNjZXNzKHRoaXMsZnVuY3Rpb24oYSxjLGQp
e3JldHVybiBkIT09Yj9mLnN0eWxlKGEsYyxkKTpmLmNzcyhhLGMpfSxhLGMsYXJndW1lbnRzLmxl
bmd0aD4xKX0sZi5leHRlbmQoe2Nzc0hvb2tzOntvcGFjaXR5OntnZXQ6ZnVuY3Rpb24oYSxiKXtp
ZihiKXt2YXIgYz1ieShhLCJvcGFjaXR5Iik7cmV0dXJuIGM9PT0iIj8iMSI6Y31yZXR1cm4gYS5z
dHlsZS5vcGFjaXR5fX19LGNzc051bWJlcjp7ZmlsbE9wYWNpdHk6ITAsZm9udFdlaWdodDohMCxs
aW5lSGVpZ2h0OiEwLG9wYWNpdHk6ITAsb3JwaGFuczohMCx3aWRvd3M6ITAsekluZGV4OiEwLHpv
b206ITB9LGNzc1Byb3BzOnsiZmxvYXQiOmYuc3VwcG9ydC5jc3NGbG9hdD8iY3NzRmxvYXQiOiJz
dHlsZUZsb2F0In0sc3R5bGU6ZnVuY3Rpb24oYSxjLGQsZSl7aWYoISFhJiZhLm5vZGVUeXBlIT09
MyYmYS5ub2RlVHlwZSE9PTgmJiEhYS5zdHlsZSl7dmFyIGcsaCxpPWYuY2FtZWxDYXNlKGMpLGo9
YS5zdHlsZSxrPWYuY3NzSG9va3NbaV07Yz1mLmNzc1Byb3BzW2ldfHxpO2lmKGQ9PT1iKXtpZihr
JiYiZ2V0ImluIGsmJihnPWsuZ2V0KGEsITEsZSkpIT09YilyZXR1cm4gZztyZXR1cm4galtjXX1o
PXR5cGVvZiBkLGg9PT0ic3RyaW5nIiYmKGc9YnUuZXhlYyhkKSkmJihkPSsoZ1sxXSsxKSorZ1sy
XStwYXJzZUZsb2F0KGYuY3NzKGEsYykpLGg9Im51bWJlciIpO2lmKGQ9PW51bGx8fGg9PT0ibnVt
YmVyIiYmaXNOYU4oZCkpcmV0dXJuO2g9PT0ibnVtYmVyIiYmIWYuY3NzTnVtYmVyW2ldJiYoZCs9
InB4Iik7aWYoIWt8fCEoInNldCJpbiBrKXx8KGQ9ay5zZXQoYSxkKSkhPT1iKXRyeXtqW2NdPWR9
Y2F0Y2gobCl7fX19LGNzczpmdW5jdGlvbihhLGMsZCl7dmFyIGUsZztjPWYuY2FtZWxDYXNlKGMp
LGc9Zi5jc3NIb29rc1tjXSxjPWYuY3NzUHJvcHNbY118fGMsYz09PSJjc3NGbG9hdCImJihjPSJm
bG9hdCIpO2lmKGcmJiJnZXQiaW4gZyYmKGU9Zy5nZXQoYSwhMCxkKSkhPT1iKXJldHVybiBlO2lm
KGJ5KXJldHVybiBieShhLGMpfSxzd2FwOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD17fSxlLGY7Zm9y
KGYgaW4gYilkW2ZdPWEuc3R5bGVbZl0sYS5zdHlsZVtmXT1iW2ZdO2U9Yy5jYWxsKGEpO2Zvcihm
IGluIGIpYS5zdHlsZVtmXT1kW2ZdO3JldHVybiBlfX0pLGYuY3VyQ1NTPWYuY3NzLGMuZGVmYXVs
dFZpZXcmJmMuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSYmKGJ6PWZ1bmN0aW9uKGEsYil7
dmFyIGMsZCxlLGcsaD1hLnN0eWxlO2I9Yi5yZXBsYWNlKGJyLCItJDEiKS50b0xvd2VyQ2FzZSgp
LChkPWEub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldykmJihlPWQuZ2V0Q29tcHV0ZWRTdHlsZShh
LG51bGwpKSYmKGM9ZS5nZXRQcm9wZXJ0eVZhbHVlKGIpLGM9PT0iIiYmIWYuY29udGFpbnMoYS5v
d25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxhKSYmKGM9Zi5zdHlsZShhLGIpKSksIWYuc3Vw
cG9ydC5waXhlbE1hcmdpbiYmZSYmYnYudGVzdChiKSYmYnQudGVzdChjKSYmKGc9aC53aWR0aCxo
LndpZHRoPWMsYz1lLndpZHRoLGgud2lkdGg9Zyk7cmV0dXJuIGN9KSxjLmRvY3VtZW50RWxlbWVu
dC5jdXJyZW50U3R5bGUmJihiQT1mdW5jdGlvbihhLGIpe3ZhciBjLGQsZSxmPWEuY3VycmVudFN0
eWxlJiZhLmN1cnJlbnRTdHlsZVtiXSxnPWEuc3R5bGU7Zj09bnVsbCYmZyYmKGU9Z1tiXSkmJihm
PWUpLGJ0LnRlc3QoZikmJihjPWcubGVmdCxkPWEucnVudGltZVN0eWxlJiZhLnJ1bnRpbWVTdHls
ZS5sZWZ0LGQmJihhLnJ1bnRpbWVTdHlsZS5sZWZ0PWEuY3VycmVudFN0eWxlLmxlZnQpLGcubGVm
dD1iPT09ImZvbnRTaXplIj8iMWVtIjpmLGY9Zy5waXhlbExlZnQrInB4IixnLmxlZnQ9YyxkJiYo
YS5ydW50aW1lU3R5bGUubGVmdD1kKSk7cmV0dXJuIGY9PT0iIj8iYXV0byI6Zn0pLGJ5PWJ6fHxi
QSxmLmVhY2goWyJoZWlnaHQiLCJ3aWR0aCJdLGZ1bmN0aW9uKGEsYil7Zi5jc3NIb29rc1tiXT17
Z2V0OmZ1bmN0aW9uKGEsYyxkKXtpZihjKXJldHVybiBhLm9mZnNldFdpZHRoIT09MD9iQihhLGIs
ZCk6Zi5zd2FwKGEsYncsZnVuY3Rpb24oKXtyZXR1cm4gYkIoYSxiLGQpfSl9LHNldDpmdW5jdGlv
bihhLGIpe3JldHVybiBicy50ZXN0KGIpP2IrInB4IjpifX19KSxmLnN1cHBvcnQub3BhY2l0eXx8
KGYuY3NzSG9va3Mub3BhY2l0eT17Z2V0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIGJxLnRlc3QoKGIm
JmEuY3VycmVudFN0eWxlP2EuY3VycmVudFN0eWxlLmZpbHRlcjphLnN0eWxlLmZpbHRlcil8fCIi
KT9wYXJzZUZsb2F0KFJlZ0V4cC4kMSkvMTAwKyIiOmI/IjEiOiIifSxzZXQ6ZnVuY3Rpb24oYSxi
KXt2YXIgYz1hLnN0eWxlLGQ9YS5jdXJyZW50U3R5bGUsZT1mLmlzTnVtZXJpYyhiKT8iYWxwaGEo
b3BhY2l0eT0iK2IqMTAwKyIpIjoiIixnPWQmJmQuZmlsdGVyfHxjLmZpbHRlcnx8IiI7Yy56b29t
PTE7aWYoYj49MSYmZi50cmltKGcucmVwbGFjZShicCwiIikpPT09IiIpe2MucmVtb3ZlQXR0cmli
dXRlKCJmaWx0ZXIiKTtpZihkJiYhZC5maWx0ZXIpcmV0dXJufWMuZmlsdGVyPWJwLnRlc3QoZyk/
Zy5yZXBsYWNlKGJwLGUpOmcrIiAiK2V9fSksZihmdW5jdGlvbigpe2Yuc3VwcG9ydC5yZWxpYWJs
ZU1hcmdpblJpZ2h0fHwoZi5jc3NIb29rcy5tYXJnaW5SaWdodD17Z2V0OmZ1bmN0aW9uKGEsYil7
cmV0dXJuIGYuc3dhcChhLHtkaXNwbGF5OiJpbmxpbmUtYmxvY2sifSxmdW5jdGlvbigpe3JldHVy
biBiP2J5KGEsIm1hcmdpbi1yaWdodCIpOmEuc3R5bGUubWFyZ2luUmlnaHR9KX19KX0pLGYuZXhw
ciYmZi5leHByLmZpbHRlcnMmJihmLmV4cHIuZmlsdGVycy5oaWRkZW49ZnVuY3Rpb24oYSl7dmFy
IGI9YS5vZmZzZXRXaWR0aCxjPWEub2Zmc2V0SGVpZ2h0O3JldHVybiBiPT09MCYmYz09PTB8fCFm
LnN1cHBvcnQucmVsaWFibGVIaWRkZW5PZmZzZXRzJiYoYS5zdHlsZSYmYS5zdHlsZS5kaXNwbGF5
fHxmLmNzcyhhLCJkaXNwbGF5IikpPT09Im5vbmUifSxmLmV4cHIuZmlsdGVycy52aXNpYmxlPWZ1
bmN0aW9uKGEpe3JldHVybiFmLmV4cHIuZmlsdGVycy5oaWRkZW4oYSl9KSxmLmVhY2goe21hcmdp
bjoiIixwYWRkaW5nOiIiLGJvcmRlcjoiV2lkdGgifSxmdW5jdGlvbihhLGIpe2YuY3NzSG9va3Nb
YStiXT17ZXhwYW5kOmZ1bmN0aW9uKGMpe3ZhciBkLGU9dHlwZW9mIGM9PSJzdHJpbmciP2Muc3Bs
aXQoIiAiKTpbY10sZj17fTtmb3IoZD0wO2Q8NDtkKyspZlthK2J4W2RdK2JdPWVbZF18fGVbZC0y
XXx8ZVswXTtyZXR1cm4gZn19fSk7dmFyIGJDPS8lMjAvZyxiRD0vXFtcXSQvLGJFPS9ccj9cbi9n
LGJGPS8jLiokLyxiRz0vXiguKj8pOlsgXHRdKihbXlxyXG5dKilccj8kL21nLGJIPS9eKD86Y29s
b3J8ZGF0ZXxkYXRldGltZXxkYXRldGltZS1sb2NhbHxlbWFpbHxoaWRkZW58bW9udGh8bnVtYmVy
fHBhc3N3b3JkfHJhbmdlfHNlYXJjaHx0ZWx8dGV4dHx0aW1lfHVybHx3ZWVrKSQvaSxiST0vXig/
OmFib3V0fGFwcHxhcHBcLXN0b3JhZ2V8LitcLWV4dGVuc2lvbnxmaWxlfHJlc3x3aWRnZXQpOiQv
LGJKPS9eKD86R0VUfEhFQUQpJC8sYks9L15cL1wvLyxiTD0vXD8vLGJNPS88c2NyaXB0XGJbXjxd
Kig/Oig/ITxcL3NjcmlwdD4pPFtePF0qKSo8XC9zY3JpcHQ+L2dpLGJOPS9eKD86c2VsZWN0fHRl
eHRhcmVhKS9pLGJPPS9ccysvLGJQPS8oWz8mXSlfPVteJl0qLyxiUT0vXihbXHdcK1wuXC1dKzop
KD86XC9cLyhbXlwvPyM6XSopKD86OihcZCspKT8pPy8sYlI9Zi5mbi5sb2FkLGJTPXt9LGJUPXt9
LGJVLGJWLGJXPVsiKi8iXStbIioiXTt0cnl7YlU9ZS5ocmVmfWNhdGNoKGJYKXtiVT1jLmNyZWF0
ZUVsZW1lbnQoImEiKSxiVS5ocmVmPSIiLGJVPWJVLmhyZWZ9YlY9YlEuZXhlYyhiVS50b0xvd2Vy
Q2FzZSgpKXx8W10sZi5mbi5leHRlbmQoe2xvYWQ6ZnVuY3Rpb24oYSxjLGQpe2lmKHR5cGVvZiBh
IT0ic3RyaW5nIiYmYlIpcmV0dXJuIGJSLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtpZighdGhpcy5s
ZW5ndGgpcmV0dXJuIHRoaXM7dmFyIGU9YS5pbmRleE9mKCIgIik7aWYoZT49MCl7dmFyIGc9YS5z
bGljZShlLGEubGVuZ3RoKTthPWEuc2xpY2UoMCxlKX12YXIgaD0iR0VUIjtjJiYoZi5pc0Z1bmN0
aW9uKGMpPyhkPWMsYz1iKTp0eXBlb2YgYz09Im9iamVjdCImJihjPWYucGFyYW0oYyxmLmFqYXhT
ZXR0aW5ncy50cmFkaXRpb25hbCksaD0iUE9TVCIpKTt2YXIgaT10aGlzO2YuYWpheCh7dXJsOmEs
dHlwZTpoLGRhdGFUeXBlOiJodG1sIixkYXRhOmMsY29tcGxldGU6ZnVuY3Rpb24oYSxiLGMpe2M9
YS5yZXNwb25zZVRleHQsYS5pc1Jlc29sdmVkKCkmJihhLmRvbmUoZnVuY3Rpb24oYSl7Yz1hfSks
aS5odG1sKGc/ZigiPGRpdj4iKS5hcHBlbmQoYy5yZXBsYWNlKGJNLCIiKSkuZmluZChnKTpjKSks
ZCYmaS5lYWNoKGQsW2MsYixhXSl9fSk7cmV0dXJuIHRoaXN9LHNlcmlhbGl6ZTpmdW5jdGlvbigp
e3JldHVybiBmLnBhcmFtKHRoaXMuc2VyaWFsaXplQXJyYXkoKSl9LHNlcmlhbGl6ZUFycmF5OmZ1
bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWxlbWVudHM/
Zi5tYWtlQXJyYXkodGhpcy5lbGVtZW50cyk6dGhpc30pLmZpbHRlcihmdW5jdGlvbigpe3JldHVy
biB0aGlzLm5hbWUmJiF0aGlzLmRpc2FibGVkJiYodGhpcy5jaGVja2VkfHxiTi50ZXN0KHRoaXMu
bm9kZU5hbWUpfHxiSC50ZXN0KHRoaXMudHlwZSkpfSkubWFwKGZ1bmN0aW9uKGEsYil7dmFyIGM9
Zih0aGlzKS52YWwoKTtyZXR1cm4gYz09bnVsbD9udWxsOmYuaXNBcnJheShjKT9mLm1hcChjLGZ1
bmN0aW9uKGEsYyl7cmV0dXJue25hbWU6Yi5uYW1lLHZhbHVlOmEucmVwbGFjZShiRSwiXHJcbiIp
fX0pOntuYW1lOmIubmFtZSx2YWx1ZTpjLnJlcGxhY2UoYkUsIlxyXG4iKX19KS5nZXQoKX19KSxm
LmVhY2goImFqYXhTdGFydCBhamF4U3RvcCBhamF4Q29tcGxldGUgYWpheEVycm9yIGFqYXhTdWNj
ZXNzIGFqYXhTZW5kIi5zcGxpdCgiICIpLGZ1bmN0aW9uKGEsYil7Zi5mbltiXT1mdW5jdGlvbihh
KXtyZXR1cm4gdGhpcy5vbihiLGEpfX0pLGYuZWFjaChbImdldCIsInBvc3QiXSxmdW5jdGlvbihh
LGMpe2ZbY109ZnVuY3Rpb24oYSxkLGUsZyl7Zi5pc0Z1bmN0aW9uKGQpJiYoZz1nfHxlLGU9ZCxk
PWIpO3JldHVybiBmLmFqYXgoe3R5cGU6Yyx1cmw6YSxkYXRhOmQsc3VjY2VzczplLGRhdGFUeXBl
Omd9KX19KSxmLmV4dGVuZCh7Z2V0U2NyaXB0OmZ1bmN0aW9uKGEsYyl7cmV0dXJuIGYuZ2V0KGEs
YixjLCJzY3JpcHQiKX0sZ2V0SlNPTjpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGYuZ2V0KGEsYixj
LCJqc29uIil9LGFqYXhTZXR1cDpmdW5jdGlvbihhLGIpe2I/YiQoYSxmLmFqYXhTZXR0aW5ncyk6
KGI9YSxhPWYuYWpheFNldHRpbmdzKSxiJChhLGIpO3JldHVybiBhfSxhamF4U2V0dGluZ3M6e3Vy
bDpiVSxpc0xvY2FsOmJJLnRlc3QoYlZbMV0pLGdsb2JhbDohMCx0eXBlOiJHRVQiLGNvbnRlbnRU
eXBlOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXQ9VVRGLTgiLHBy
b2Nlc3NEYXRhOiEwLGFzeW5jOiEwLGFjY2VwdHM6e3htbDoiYXBwbGljYXRpb24veG1sLCB0ZXh0
L3htbCIsaHRtbDoidGV4dC9odG1sIix0ZXh0OiJ0ZXh0L3BsYWluIixqc29uOiJhcHBsaWNhdGlv
bi9qc29uLCB0ZXh0L2phdmFzY3JpcHQiLCIqIjpiV30sY29udGVudHM6e3htbDoveG1sLyxodG1s
Oi9odG1sLyxqc29uOi9qc29uL30scmVzcG9uc2VGaWVsZHM6e3htbDoicmVzcG9uc2VYTUwiLHRl
eHQ6InJlc3BvbnNlVGV4dCJ9LGNvbnZlcnRlcnM6eyIqIHRleHQiOmEuU3RyaW5nLCJ0ZXh0IGh0
bWwiOiEwLCJ0ZXh0IGpzb24iOmYucGFyc2VKU09OLCJ0ZXh0IHhtbCI6Zi5wYXJzZVhNTH0sZmxh
dE9wdGlvbnM6e2NvbnRleHQ6ITAsdXJsOiEwfX0sYWpheFByZWZpbHRlcjpiWShiUyksYWpheFRy
YW5zcG9ydDpiWShiVCksYWpheDpmdW5jdGlvbihhLGMpe2Z1bmN0aW9uIHcoYSxjLGwsbSl7aWYo
cyE9PTIpe3M9MixxJiZjbGVhclRpbWVvdXQocSkscD1iLG49bXx8IiIsdi5yZWFkeVN0YXRlPWE+
MD80OjA7dmFyIG8scix1LHc9Yyx4PWw/Y2EoZCx2LGwpOmIseSx6O2lmKGE+PTIwMCYmYTwzMDB8
fGE9PT0zMDQpe2lmKGQuaWZNb2RpZmllZCl7aWYoeT12LmdldFJlc3BvbnNlSGVhZGVyKCJMYXN0
LU1vZGlmaWVkIikpZi5sYXN0TW9kaWZpZWRba109eTtpZih6PXYuZ2V0UmVzcG9uc2VIZWFkZXIo
IkV0YWciKSlmLmV0YWdba109en1pZihhPT09MzA0KXc9Im5vdG1vZGlmaWVkIixvPSEwO2Vsc2Ug
dHJ5e3I9Y2IoZCx4KSx3PSJzdWNjZXNzIixvPSEwfWNhdGNoKEEpe3c9InBhcnNlcmVycm9yIix1
PUF9fWVsc2V7dT13O2lmKCF3fHxhKXc9ImVycm9yIixhPDAmJihhPTApfXYuc3RhdHVzPWEsdi5z
dGF0dXNUZXh0PSIiKyhjfHx3KSxvP2gucmVzb2x2ZVdpdGgoZSxbcix3LHZdKTpoLnJlamVjdFdp
dGgoZSxbdix3LHVdKSx2LnN0YXR1c0NvZGUoaiksaj1iLHQmJmcudHJpZ2dlcigiYWpheCIrKG8/
IlN1Y2Nlc3MiOiJFcnJvciIpLFt2LGQsbz9yOnVdKSxpLmZpcmVXaXRoKGUsW3Ysd10pLHQmJihn
LnRyaWdnZXIoImFqYXhDb21wbGV0ZSIsW3YsZF0pLC0tZi5hY3RpdmV8fGYuZXZlbnQudHJpZ2dl
cigiYWpheFN0b3AiKSl9fXR5cGVvZiBhPT0ib2JqZWN0IiYmKGM9YSxhPWIpLGM9Y3x8e307dmFy
IGQ9Zi5hamF4U2V0dXAoe30sYyksZT1kLmNvbnRleHR8fGQsZz1lIT09ZCYmKGUubm9kZVR5cGV8
fGUgaW5zdGFuY2VvZiBmKT9mKGUpOmYuZXZlbnQsaD1mLkRlZmVycmVkKCksaT1mLkNhbGxiYWNr
cygib25jZSBtZW1vcnkiKSxqPWQuc3RhdHVzQ29kZXx8e30sayxsPXt9LG09e30sbixvLHAscSxy
LHM9MCx0LHUsdj17cmVhZHlTdGF0ZTowLHNldFJlcXVlc3RIZWFkZXI6ZnVuY3Rpb24oYSxiKXtp
Zighcyl7dmFyIGM9YS50b0xvd2VyQ2FzZSgpO2E9bVtjXT1tW2NdfHxhLGxbYV09Yn1yZXR1cm4g
dGhpc30sZ2V0QWxsUmVzcG9uc2VIZWFkZXJzOmZ1bmN0aW9uKCl7cmV0dXJuIHM9PT0yP246bnVs
bH0sZ2V0UmVzcG9uc2VIZWFkZXI6ZnVuY3Rpb24oYSl7dmFyIGM7aWYocz09PTIpe2lmKCFvKXtv
PXt9O3doaWxlKGM9YkcuZXhlYyhuKSlvW2NbMV0udG9Mb3dlckNhc2UoKV09Y1syXX1jPW9bYS50
b0xvd2VyQ2FzZSgpXX1yZXR1cm4gYz09PWI/bnVsbDpjfSxvdmVycmlkZU1pbWVUeXBlOmZ1bmN0
aW9uKGEpe3N8fChkLm1pbWVUeXBlPWEpO3JldHVybiB0aGlzfSxhYm9ydDpmdW5jdGlvbihhKXth
PWF8fCJhYm9ydCIscCYmcC5hYm9ydChhKSx3KDAsYSk7cmV0dXJuIHRoaXN9fTtoLnByb21pc2Uo
diksdi5zdWNjZXNzPXYuZG9uZSx2LmVycm9yPXYuZmFpbCx2LmNvbXBsZXRlPWkuYWRkLHYuc3Rh
dHVzQ29kZT1mdW5jdGlvbihhKXtpZihhKXt2YXIgYjtpZihzPDIpZm9yKGIgaW4gYSlqW2JdPVtq
W2JdLGFbYl1dO2Vsc2UgYj1hW3Yuc3RhdHVzXSx2LnRoZW4oYixiKX1yZXR1cm4gdGhpc30sZC51
cmw9KChhfHxkLnVybCkrIiIpLnJlcGxhY2UoYkYsIiIpLnJlcGxhY2UoYkssYlZbMV0rIi8vIiks
ZC5kYXRhVHlwZXM9Zi50cmltKGQuZGF0YVR5cGV8fCIqIikudG9Mb3dlckNhc2UoKS5zcGxpdChi
TyksZC5jcm9zc0RvbWFpbj09bnVsbCYmKHI9YlEuZXhlYyhkLnVybC50b0xvd2VyQ2FzZSgpKSxk
LmNyb3NzRG9tYWluPSEoIXJ8fHJbMV09PWJWWzFdJiZyWzJdPT1iVlsyXSYmKHJbM118fChyWzFd
PT09Imh0dHA6Ij84MDo0NDMpKT09KGJWWzNdfHwoYlZbMV09PT0iaHR0cDoiPzgwOjQ0MykpKSks
ZC5kYXRhJiZkLnByb2Nlc3NEYXRhJiZ0eXBlb2YgZC5kYXRhIT0ic3RyaW5nIiYmKGQuZGF0YT1m
LnBhcmFtKGQuZGF0YSxkLnRyYWRpdGlvbmFsKSksYlooYlMsZCxjLHYpO2lmKHM9PT0yKXJldHVy
biExO3Q9ZC5nbG9iYWwsZC50eXBlPWQudHlwZS50b1VwcGVyQ2FzZSgpLGQuaGFzQ29udGVudD0h
YkoudGVzdChkLnR5cGUpLHQmJmYuYWN0aXZlKys9PT0wJiZmLmV2ZW50LnRyaWdnZXIoImFqYXhT
dGFydCIpO2lmKCFkLmhhc0NvbnRlbnQpe2QuZGF0YSYmKGQudXJsKz0oYkwudGVzdChkLnVybCk/
IiYiOiI/IikrZC5kYXRhLGRlbGV0ZSBkLmRhdGEpLGs9ZC51cmw7aWYoZC5jYWNoZT09PSExKXt2
YXIgeD1mLm5vdygpLHk9ZC51cmwucmVwbGFjZShiUCwiJDFfPSIreCk7ZC51cmw9eSsoeT09PWQu
dXJsPyhiTC50ZXN0KGQudXJsKT8iJiI6Ij8iKSsiXz0iK3g6IiIpfX0oZC5kYXRhJiZkLmhhc0Nv
bnRlbnQmJmQuY29udGVudFR5cGUhPT0hMXx8Yy5jb250ZW50VHlwZSkmJnYuc2V0UmVxdWVzdEhl
YWRlcigiQ29udGVudC1UeXBlIixkLmNvbnRlbnRUeXBlKSxkLmlmTW9kaWZpZWQmJihrPWt8fGQu
dXJsLGYubGFzdE1vZGlmaWVkW2tdJiZ2LnNldFJlcXVlc3RIZWFkZXIoIklmLU1vZGlmaWVkLVNp
bmNlIixmLmxhc3RNb2RpZmllZFtrXSksZi5ldGFnW2tdJiZ2LnNldFJlcXVlc3RIZWFkZXIoIklm
LU5vbmUtTWF0Y2giLGYuZXRhZ1trXSkpLHYuc2V0UmVxdWVzdEhlYWRlcigiQWNjZXB0IixkLmRh
dGFUeXBlc1swXSYmZC5hY2NlcHRzW2QuZGF0YVR5cGVzWzBdXT9kLmFjY2VwdHNbZC5kYXRhVHlw
ZXNbMF1dKyhkLmRhdGFUeXBlc1swXSE9PSIqIj8iLCAiK2JXKyI7IHE9MC4wMSI6IiIpOmQuYWNj
ZXB0c1siKiJdKTtmb3IodSBpbiBkLmhlYWRlcnMpdi5zZXRSZXF1ZXN0SGVhZGVyKHUsZC5oZWFk
ZXJzW3VdKTtpZihkLmJlZm9yZVNlbmQmJihkLmJlZm9yZVNlbmQuY2FsbChlLHYsZCk9PT0hMXx8
cz09PTIpKXt2LmFib3J0KCk7cmV0dXJuITF9Zm9yKHUgaW57c3VjY2VzczoxLGVycm9yOjEsY29t
cGxldGU6MX0pdlt1XShkW3VdKTtwPWJaKGJULGQsYyx2KTtpZighcCl3KC0xLCJObyBUcmFuc3Bv
cnQiKTtlbHNle3YucmVhZHlTdGF0ZT0xLHQmJmcudHJpZ2dlcigiYWpheFNlbmQiLFt2LGRdKSxk
LmFzeW5jJiZkLnRpbWVvdXQ+MCYmKHE9c2V0VGltZW91dChmdW5jdGlvbigpe3YuYWJvcnQoInRp
bWVvdXQiKX0sZC50aW1lb3V0KSk7dHJ5e3M9MSxwLnNlbmQobCx3KX1jYXRjaCh6KXtpZihzPDIp
dygtMSx6KTtlbHNlIHRocm93IHp9fXJldHVybiB2fSxwYXJhbTpmdW5jdGlvbihhLGMpe3ZhciBk
PVtdLGU9ZnVuY3Rpb24oYSxiKXtiPWYuaXNGdW5jdGlvbihiKT9iKCk6YixkW2QubGVuZ3RoXT1l
bmNvZGVVUklDb21wb25lbnQoYSkrIj0iK2VuY29kZVVSSUNvbXBvbmVudChiKX07Yz09PWImJihj
PWYuYWpheFNldHRpbmdzLnRyYWRpdGlvbmFsKTtpZihmLmlzQXJyYXkoYSl8fGEuanF1ZXJ5JiYh
Zi5pc1BsYWluT2JqZWN0KGEpKWYuZWFjaChhLGZ1bmN0aW9uKCl7ZSh0aGlzLm5hbWUsdGhpcy52
YWx1ZSl9KTtlbHNlIGZvcih2YXIgZyBpbiBhKWJfKGcsYVtnXSxjLGUpO3JldHVybiBkLmpvaW4o
IiYiKS5yZXBsYWNlKGJDLCIrIil9fSksZi5leHRlbmQoe2FjdGl2ZTowLGxhc3RNb2RpZmllZDp7
fSxldGFnOnt9fSk7dmFyIGNjPWYubm93KCksY2Q9LyhcPSlcPygmfCQpfFw/XD8vaTtmLmFqYXhT
ZXR1cCh7anNvbnA6ImNhbGxiYWNrIixqc29ucENhbGxiYWNrOmZ1bmN0aW9uKCl7cmV0dXJuIGYu
ZXhwYW5kbysiXyIrY2MrK319KSxmLmFqYXhQcmVmaWx0ZXIoImpzb24ganNvbnAiLGZ1bmN0aW9u
KGIsYyxkKXt2YXIgZT10eXBlb2YgYi5kYXRhPT0ic3RyaW5nIiYmL15hcHBsaWNhdGlvblwveFwt
d3d3XC1mb3JtXC11cmxlbmNvZGVkLy50ZXN0KGIuY29udGVudFR5cGUpO2lmKGIuZGF0YVR5cGVz
WzBdPT09Impzb25wInx8Yi5qc29ucCE9PSExJiYoY2QudGVzdChiLnVybCl8fGUmJmNkLnRlc3Qo
Yi5kYXRhKSkpe3ZhciBnLGg9Yi5qc29ucENhbGxiYWNrPWYuaXNGdW5jdGlvbihiLmpzb25wQ2Fs
bGJhY2spP2IuanNvbnBDYWxsYmFjaygpOmIuanNvbnBDYWxsYmFjayxpPWFbaF0saj1iLnVybCxr
PWIuZGF0YSxsPSIkMSIraCsiJDIiO2IuanNvbnAhPT0hMSYmKGo9ai5yZXBsYWNlKGNkLGwpLGIu
dXJsPT09aiYmKGUmJihrPWsucmVwbGFjZShjZCxsKSksYi5kYXRhPT09ayYmKGorPSgvXD8vLnRl
c3Qoaik/IiYiOiI/IikrYi5qc29ucCsiPSIraCkpKSxiLnVybD1qLGIuZGF0YT1rLGFbaF09ZnVu
Y3Rpb24oYSl7Zz1bYV19LGQuYWx3YXlzKGZ1bmN0aW9uKCl7YVtoXT1pLGcmJmYuaXNGdW5jdGlv
bihpKSYmYVtoXShnWzBdKX0pLGIuY29udmVydGVyc1sic2NyaXB0IGpzb24iXT1mdW5jdGlvbigp
e2d8fGYuZXJyb3IoaCsiIHdhcyBub3QgY2FsbGVkIik7cmV0dXJuIGdbMF19LGIuZGF0YVR5cGVz
WzBdPSJqc29uIjtyZXR1cm4ic2NyaXB0In19KSxmLmFqYXhTZXR1cCh7YWNjZXB0czp7c2NyaXB0
OiJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2Vj
bWFzY3JpcHQsIGFwcGxpY2F0aW9uL3gtZWNtYXNjcmlwdCJ9LGNvbnRlbnRzOntzY3JpcHQ6L2ph
dmFzY3JpcHR8ZWNtYXNjcmlwdC99LGNvbnZlcnRlcnM6eyJ0ZXh0IHNjcmlwdCI6ZnVuY3Rpb24o
YSl7Zi5nbG9iYWxFdmFsKGEpO3JldHVybiBhfX19KSxmLmFqYXhQcmVmaWx0ZXIoInNjcmlwdCIs
ZnVuY3Rpb24oYSl7YS5jYWNoZT09PWImJihhLmNhY2hlPSExKSxhLmNyb3NzRG9tYWluJiYoYS50
eXBlPSJHRVQiLGEuZ2xvYmFsPSExKX0pLGYuYWpheFRyYW5zcG9ydCgic2NyaXB0IixmdW5jdGlv
bihhKXtpZihhLmNyb3NzRG9tYWluKXt2YXIgZCxlPWMuaGVhZHx8Yy5nZXRFbGVtZW50c0J5VGFn
TmFtZSgiaGVhZCIpWzBdfHxjLmRvY3VtZW50RWxlbWVudDtyZXR1cm57c2VuZDpmdW5jdGlvbihm
LGcpe2Q9Yy5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKSxkLmFzeW5jPSJhc3luYyIsYS5zY3JpcHRD
aGFyc2V0JiYoZC5jaGFyc2V0PWEuc2NyaXB0Q2hhcnNldCksZC5zcmM9YS51cmwsZC5vbmxvYWQ9
ZC5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oYSxjKXtpZihjfHwhZC5yZWFkeVN0YXRlfHwv
bG9hZGVkfGNvbXBsZXRlLy50ZXN0KGQucmVhZHlTdGF0ZSkpZC5vbmxvYWQ9ZC5vbnJlYWR5c3Rh
dGVjaGFuZ2U9bnVsbCxlJiZkLnBhcmVudE5vZGUmJmUucmVtb3ZlQ2hpbGQoZCksZD1iLGN8fGco
MjAwLCJzdWNjZXNzIil9LGUuaW5zZXJ0QmVmb3JlKGQsZS5maXJzdENoaWxkKX0sYWJvcnQ6ZnVu
Y3Rpb24oKXtkJiZkLm9ubG9hZCgwLDEpfX19fSk7dmFyIGNlPWEuQWN0aXZlWE9iamVjdD9mdW5j
dGlvbigpe2Zvcih2YXIgYSBpbiBjZyljZ1thXSgwLDEpfTohMSxjZj0wLGNnO2YuYWpheFNldHRp
bmdzLnhocj1hLkFjdGl2ZVhPYmplY3Q/ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5pc0xvY2FsJiZj
aCgpfHxjaSgpfTpjaCxmdW5jdGlvbihhKXtmLmV4dGVuZChmLnN1cHBvcnQse2FqYXg6ISFhLGNv
cnM6ISFhJiYid2l0aENyZWRlbnRpYWxzImluIGF9KX0oZi5hamF4U2V0dGluZ3MueGhyKCkpLGYu
c3VwcG9ydC5hamF4JiZmLmFqYXhUcmFuc3BvcnQoZnVuY3Rpb24oYyl7aWYoIWMuY3Jvc3NEb21h
aW58fGYuc3VwcG9ydC5jb3JzKXt2YXIgZDtyZXR1cm57c2VuZDpmdW5jdGlvbihlLGcpe3ZhciBo
PWMueGhyKCksaSxqO2MudXNlcm5hbWU/aC5vcGVuKGMudHlwZSxjLnVybCxjLmFzeW5jLGMudXNl
cm5hbWUsYy5wYXNzd29yZCk6aC5vcGVuKGMudHlwZSxjLnVybCxjLmFzeW5jKTtpZihjLnhockZp
ZWxkcylmb3IoaiBpbiBjLnhockZpZWxkcyloW2pdPWMueGhyRmllbGRzW2pdO2MubWltZVR5cGUm
Jmgub3ZlcnJpZGVNaW1lVHlwZSYmaC5vdmVycmlkZU1pbWVUeXBlKGMubWltZVR5cGUpLCFjLmNy
b3NzRG9tYWluJiYhZVsiWC1SZXF1ZXN0ZWQtV2l0aCJdJiYoZVsiWC1SZXF1ZXN0ZWQtV2l0aCJd
PSJYTUxIdHRwUmVxdWVzdCIpO3RyeXtmb3IoaiBpbiBlKWguc2V0UmVxdWVzdEhlYWRlcihqLGVb
al0pfWNhdGNoKGspe31oLnNlbmQoYy5oYXNDb250ZW50JiZjLmRhdGF8fG51bGwpLGQ9ZnVuY3Rp
b24oYSxlKXt2YXIgaixrLGwsbSxuO3RyeXtpZihkJiYoZXx8aC5yZWFkeVN0YXRlPT09NCkpe2Q9
YixpJiYoaC5vbnJlYWR5c3RhdGVjaGFuZ2U9Zi5ub29wLGNlJiZkZWxldGUgY2dbaV0pO2lmKGUp
aC5yZWFkeVN0YXRlIT09NCYmaC5hYm9ydCgpO2Vsc2V7aj1oLnN0YXR1cyxsPWguZ2V0QWxsUmVz
cG9uc2VIZWFkZXJzKCksbT17fSxuPWgucmVzcG9uc2VYTUwsbiYmbi5kb2N1bWVudEVsZW1lbnQm
JihtLnhtbD1uKTt0cnl7bS50ZXh0PWgucmVzcG9uc2VUZXh0fWNhdGNoKGEpe310cnl7az1oLnN0
YXR1c1RleHR9Y2F0Y2gobyl7az0iIn0haiYmYy5pc0xvY2FsJiYhYy5jcm9zc0RvbWFpbj9qPW0u
dGV4dD8yMDA6NDA0Omo9PT0xMjIzJiYoaj0yMDQpfX19Y2F0Y2gocCl7ZXx8ZygtMSxwKX1tJiZn
KGosayxtLGwpfSwhYy5hc3luY3x8aC5yZWFkeVN0YXRlPT09ND9kKCk6KGk9KytjZixjZSYmKGNn
fHwoY2c9e30sZihhKS51bmxvYWQoY2UpKSxjZ1tpXT1kKSxoLm9ucmVhZHlzdGF0ZWNoYW5nZT1k
KX0sYWJvcnQ6ZnVuY3Rpb24oKXtkJiZkKDAsMSl9fX19KTt2YXIgY2o9e30sY2ssY2wsY209L14o
Pzp0b2dnbGV8c2hvd3xoaWRlKSQvLGNuPS9eKFsrXC1dPSk/KFtcZCsuXC1dKykoW2EteiVdKikk
L2ksY28sY3A9W1siaGVpZ2h0IiwibWFyZ2luVG9wIiwibWFyZ2luQm90dG9tIiwicGFkZGluZ1Rv
cCIsInBhZGRpbmdCb3R0b20iXSxbIndpZHRoIiwibWFyZ2luTGVmdCIsIm1hcmdpblJpZ2h0Iiwi
cGFkZGluZ0xlZnQiLCJwYWRkaW5nUmlnaHQiXSxbIm9wYWNpdHkiXV0sY3E7Zi5mbi5leHRlbmQo
e3Nob3c6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGU7aWYoYXx8YT09PTApcmV0dXJuIHRoaXMuYW5p
bWF0ZShjdCgic2hvdyIsMyksYSxiLGMpO2Zvcih2YXIgZz0wLGg9dGhpcy5sZW5ndGg7ZzxoO2cr
KylkPXRoaXNbZ10sZC5zdHlsZSYmKGU9ZC5zdHlsZS5kaXNwbGF5LCFmLl9kYXRhKGQsIm9sZGRp
c3BsYXkiKSYmZT09PSJub25lIiYmKGU9ZC5zdHlsZS5kaXNwbGF5PSIiKSwoZT09PSIiJiZmLmNz
cyhkLCJkaXNwbGF5Iik9PT0ibm9uZSJ8fCFmLmNvbnRhaW5zKGQub3duZXJEb2N1bWVudC5kb2N1
bWVudEVsZW1lbnQsZCkpJiZmLl9kYXRhKGQsIm9sZGRpc3BsYXkiLGN1KGQubm9kZU5hbWUpKSk7
Zm9yKGc9MDtnPGg7ZysrKXtkPXRoaXNbZ107aWYoZC5zdHlsZSl7ZT1kLnN0eWxlLmRpc3BsYXk7
aWYoZT09PSIifHxlPT09Im5vbmUiKWQuc3R5bGUuZGlzcGxheT1mLl9kYXRhKGQsIm9sZGRpc3Bs
YXkiKXx8IiJ9fXJldHVybiB0aGlzfSxoaWRlOmZ1bmN0aW9uKGEsYixjKXtpZihhfHxhPT09MCly
ZXR1cm4gdGhpcy5hbmltYXRlKGN0KCJoaWRlIiwzKSxhLGIsYyk7dmFyIGQsZSxnPTAsaD10aGlz
Lmxlbmd0aDtmb3IoO2c8aDtnKyspZD10aGlzW2ddLGQuc3R5bGUmJihlPWYuY3NzKGQsImRpc3Bs
YXkiKSxlIT09Im5vbmUiJiYhZi5fZGF0YShkLCJvbGRkaXNwbGF5IikmJmYuX2RhdGEoZCwib2xk
ZGlzcGxheSIsZSkpO2ZvcihnPTA7ZzxoO2crKyl0aGlzW2ddLnN0eWxlJiYodGhpc1tnXS5zdHls
ZS5kaXNwbGF5PSJub25lIik7cmV0dXJuIHRoaXN9LF90b2dnbGU6Zi5mbi50b2dnbGUsdG9nZ2xl
OmZ1bmN0aW9uKGEsYixjKXt2YXIgZD10eXBlb2YgYT09ImJvb2xlYW4iO2YuaXNGdW5jdGlvbihh
KSYmZi5pc0Z1bmN0aW9uKGIpP3RoaXMuX3RvZ2dsZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6YT09
bnVsbHx8ZD90aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYj1kP2E6Zih0aGlzKS5pcygiOmhpZGRl
biIpO2YodGhpcylbYj8ic2hvdyI6ImhpZGUiXSgpfSk6dGhpcy5hbmltYXRlKGN0KCJ0b2dnbGUi
LDMpLGEsYixjKTtyZXR1cm4gdGhpc30sZmFkZVRvOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiB0
aGlzLmZpbHRlcigiOmhpZGRlbiIpLmNzcygib3BhY2l0eSIsMCkuc2hvdygpLmVuZCgpLmFuaW1h
dGUoe29wYWNpdHk6Yn0sYSxjLGQpfSxhbmltYXRlOmZ1bmN0aW9uKGEsYixjLGQpe2Z1bmN0aW9u
IGcoKXtlLnF1ZXVlPT09ITEmJmYuX21hcmsodGhpcyk7dmFyIGI9Zi5leHRlbmQoe30sZSksYz10
aGlzLm5vZGVUeXBlPT09MSxkPWMmJmYodGhpcykuaXMoIjpoaWRkZW4iKSxnLGgsaSxqLGssbCxt
LG4sbyxwLHE7Yi5hbmltYXRlZFByb3BlcnRpZXM9e307Zm9yKGkgaW4gYSl7Zz1mLmNhbWVsQ2Fz
ZShpKSxpIT09ZyYmKGFbZ109YVtpXSxkZWxldGUgYVtpXSk7aWYoKGs9Zi5jc3NIb29rc1tnXSkm
JiJleHBhbmQiaW4gayl7bD1rLmV4cGFuZChhW2ddKSxkZWxldGUgYVtnXTtmb3IoaSBpbiBsKWkg
aW4gYXx8KGFbaV09bFtpXSl9fWZvcihnIGluIGEpe2g9YVtnXSxmLmlzQXJyYXkoaCk/KGIuYW5p
bWF0ZWRQcm9wZXJ0aWVzW2ddPWhbMV0saD1hW2ddPWhbMF0pOmIuYW5pbWF0ZWRQcm9wZXJ0aWVz
W2ddPWIuc3BlY2lhbEVhc2luZyYmYi5zcGVjaWFsRWFzaW5nW2ddfHxiLmVhc2luZ3x8InN3aW5n
IjtpZihoPT09ImhpZGUiJiZkfHxoPT09InNob3ciJiYhZClyZXR1cm4gYi5jb21wbGV0ZS5jYWxs
KHRoaXMpO2MmJihnPT09ImhlaWdodCJ8fGc9PT0id2lkdGgiKSYmKGIub3ZlcmZsb3c9W3RoaXMu
c3R5bGUub3ZlcmZsb3csdGhpcy5zdHlsZS5vdmVyZmxvd1gsdGhpcy5zdHlsZS5vdmVyZmxvd1ld
LGYuY3NzKHRoaXMsImRpc3BsYXkiKT09PSJpbmxpbmUiJiZmLmNzcyh0aGlzLCJmbG9hdCIpPT09
Im5vbmUiJiYoIWYuc3VwcG9ydC5pbmxpbmVCbG9ja05lZWRzTGF5b3V0fHxjdSh0aGlzLm5vZGVO
YW1lKT09PSJpbmxpbmUiP3RoaXMuc3R5bGUuZGlzcGxheT0iaW5saW5lLWJsb2NrIjp0aGlzLnN0
eWxlLnpvb209MSkpfWIub3ZlcmZsb3chPW51bGwmJih0aGlzLnN0eWxlLm92ZXJmbG93PSJoaWRk
ZW4iKTtmb3IoaSBpbiBhKWo9bmV3IGYuZngodGhpcyxiLGkpLGg9YVtpXSxjbS50ZXN0KGgpPyhx
PWYuX2RhdGEodGhpcywidG9nZ2xlIitpKXx8KGg9PT0idG9nZ2xlIj9kPyJzaG93IjoiaGlkZSI6
MCkscT8oZi5fZGF0YSh0aGlzLCJ0b2dnbGUiK2kscT09PSJzaG93Ij8iaGlkZSI6InNob3ciKSxq
W3FdKCkpOmpbaF0oKSk6KG09Y24uZXhlYyhoKSxuPWouY3VyKCksbT8obz1wYXJzZUZsb2F0KG1b
Ml0pLHA9bVszXXx8KGYuY3NzTnVtYmVyW2ldPyIiOiJweCIpLHAhPT0icHgiJiYoZi5zdHlsZSh0
aGlzLGksKG98fDEpK3ApLG49KG98fDEpL2ouY3VyKCkqbixmLnN0eWxlKHRoaXMsaSxuK3ApKSxt
WzFdJiYobz0obVsxXT09PSItPSI/LTE6MSkqbytuKSxqLmN1c3RvbShuLG8scCkpOmouY3VzdG9t
KG4saCwiIikpO3JldHVybiEwfXZhciBlPWYuc3BlZWQoYixjLGQpO2lmKGYuaXNFbXB0eU9iamVj
dChhKSlyZXR1cm4gdGhpcy5lYWNoKGUuY29tcGxldGUsWyExXSk7YT1mLmV4dGVuZCh7fSxhKTty
ZXR1cm4gZS5xdWV1ZT09PSExP3RoaXMuZWFjaChnKTp0aGlzLnF1ZXVlKGUucXVldWUsZyl9LHN0
b3A6ZnVuY3Rpb24oYSxjLGQpe3R5cGVvZiBhIT0ic3RyaW5nIiYmKGQ9YyxjPWEsYT1iKSxjJiZh
IT09ITEmJnRoaXMucXVldWUoYXx8ImZ4IixbXSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigp
e2Z1bmN0aW9uIGgoYSxiLGMpe3ZhciBlPWJbY107Zi5yZW1vdmVEYXRhKGEsYywhMCksZS5zdG9w
KGQpfXZhciBiLGM9ITEsZT1mLnRpbWVycyxnPWYuX2RhdGEodGhpcyk7ZHx8Zi5fdW5tYXJrKCEw
LHRoaXMpO2lmKGE9PW51bGwpZm9yKGIgaW4gZylnW2JdJiZnW2JdLnN0b3AmJmIuaW5kZXhPZigi
LnJ1biIpPT09Yi5sZW5ndGgtNCYmaCh0aGlzLGcsYik7ZWxzZSBnW2I9YSsiLnJ1biJdJiZnW2Jd
LnN0b3AmJmgodGhpcyxnLGIpO2ZvcihiPWUubGVuZ3RoO2ItLTspZVtiXS5lbGVtPT09dGhpcyYm
KGE9PW51bGx8fGVbYl0ucXVldWU9PT1hKSYmKGQ/ZVtiXSghMCk6ZVtiXS5zYXZlU3RhdGUoKSxj
PSEwLGUuc3BsaWNlKGIsMSkpOyghZHx8IWMpJiZmLmRlcXVldWUodGhpcyxhKX0pfX0pLGYuZWFj
aCh7c2xpZGVEb3duOmN0KCJzaG93IiwxKSxzbGlkZVVwOmN0KCJoaWRlIiwxKSxzbGlkZVRvZ2ds
ZTpjdCgidG9nZ2xlIiwxKSxmYWRlSW46e29wYWNpdHk6InNob3cifSxmYWRlT3V0OntvcGFjaXR5
OiJoaWRlIn0sZmFkZVRvZ2dsZTp7b3BhY2l0eToidG9nZ2xlIn19LGZ1bmN0aW9uKGEsYil7Zi5m
blthXT1mdW5jdGlvbihhLGMsZCl7cmV0dXJuIHRoaXMuYW5pbWF0ZShiLGEsYyxkKX19KSxmLmV4
dGVuZCh7c3BlZWQ6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEmJnR5cGVvZiBhPT0ib2JqZWN0Ij9m
LmV4dGVuZCh7fSxhKTp7Y29tcGxldGU6Y3x8IWMmJmJ8fGYuaXNGdW5jdGlvbihhKSYmYSxkdXJh
dGlvbjphLGVhc2luZzpjJiZifHxiJiYhZi5pc0Z1bmN0aW9uKGIpJiZifTtkLmR1cmF0aW9uPWYu
Zngub2ZmPzA6dHlwZW9mIGQuZHVyYXRpb249PSJudW1iZXIiP2QuZHVyYXRpb246ZC5kdXJhdGlv
biBpbiBmLmZ4LnNwZWVkcz9mLmZ4LnNwZWVkc1tkLmR1cmF0aW9uXTpmLmZ4LnNwZWVkcy5fZGVm
YXVsdDtpZihkLnF1ZXVlPT1udWxsfHxkLnF1ZXVlPT09ITApZC5xdWV1ZT0iZngiO2Qub2xkPWQu
Y29tcGxldGUsZC5jb21wbGV0ZT1mdW5jdGlvbihhKXtmLmlzRnVuY3Rpb24oZC5vbGQpJiZkLm9s
ZC5jYWxsKHRoaXMpLGQucXVldWU/Zi5kZXF1ZXVlKHRoaXMsZC5xdWV1ZSk6YSE9PSExJiZmLl91
bm1hcmsodGhpcyl9O3JldHVybiBkfSxlYXNpbmc6e2xpbmVhcjpmdW5jdGlvbihhKXtyZXR1cm4g
YX0sc3dpbmc6ZnVuY3Rpb24oYSl7cmV0dXJuLU1hdGguY29zKGEqTWF0aC5QSSkvMisuNX19LHRp
bWVyczpbXSxmeDpmdW5jdGlvbihhLGIsYyl7dGhpcy5vcHRpb25zPWIsdGhpcy5lbGVtPWEsdGhp
cy5wcm9wPWMsYi5vcmlnPWIub3JpZ3x8e319fSksZi5meC5wcm90b3R5cGU9e3VwZGF0ZTpmdW5j
dGlvbigpe3RoaXMub3B0aW9ucy5zdGVwJiZ0aGlzLm9wdGlvbnMuc3RlcC5jYWxsKHRoaXMuZWxl
bSx0aGlzLm5vdyx0aGlzKSwoZi5meC5zdGVwW3RoaXMucHJvcF18fGYuZnguc3RlcC5fZGVmYXVs
dCkodGhpcyl9LGN1cjpmdW5jdGlvbigpe2lmKHRoaXMuZWxlbVt0aGlzLnByb3BdIT1udWxsJiYo
IXRoaXMuZWxlbS5zdHlsZXx8dGhpcy5lbGVtLnN0eWxlW3RoaXMucHJvcF09PW51bGwpKXJldHVy
biB0aGlzLmVsZW1bdGhpcy5wcm9wXTt2YXIgYSxiPWYuY3NzKHRoaXMuZWxlbSx0aGlzLnByb3Ap
O3JldHVybiBpc05hTihhPXBhcnNlRmxvYXQoYikpPyFifHxiPT09ImF1dG8iPzA6YjphfSxjdXN0
b206ZnVuY3Rpb24oYSxjLGQpe2Z1bmN0aW9uIGgoYSl7cmV0dXJuIGUuc3RlcChhKX12YXIgZT10
aGlzLGc9Zi5meDt0aGlzLnN0YXJ0VGltZT1jcXx8Y3IoKSx0aGlzLmVuZD1jLHRoaXMubm93PXRo
aXMuc3RhcnQ9YSx0aGlzLnBvcz10aGlzLnN0YXRlPTAsdGhpcy51bml0PWR8fHRoaXMudW5pdHx8
KGYuY3NzTnVtYmVyW3RoaXMucHJvcF0/IiI6InB4IiksaC5xdWV1ZT10aGlzLm9wdGlvbnMucXVl
dWUsaC5lbGVtPXRoaXMuZWxlbSxoLnNhdmVTdGF0ZT1mdW5jdGlvbigpe2YuX2RhdGEoZS5lbGVt
LCJmeHNob3ciK2UucHJvcCk9PT1iJiYoZS5vcHRpb25zLmhpZGU/Zi5fZGF0YShlLmVsZW0sImZ4
c2hvdyIrZS5wcm9wLGUuc3RhcnQpOmUub3B0aW9ucy5zaG93JiZmLl9kYXRhKGUuZWxlbSwiZnhz
aG93IitlLnByb3AsZS5lbmQpKX0saCgpJiZmLnRpbWVycy5wdXNoKGgpJiYhY28mJihjbz1zZXRJ
bnRlcnZhbChnLnRpY2ssZy5pbnRlcnZhbCkpfSxzaG93OmZ1bmN0aW9uKCl7dmFyIGE9Zi5fZGF0
YSh0aGlzLmVsZW0sImZ4c2hvdyIrdGhpcy5wcm9wKTt0aGlzLm9wdGlvbnMub3JpZ1t0aGlzLnBy
b3BdPWF8fGYuc3R5bGUodGhpcy5lbGVtLHRoaXMucHJvcCksdGhpcy5vcHRpb25zLnNob3c9ITAs
YSE9PWI/dGhpcy5jdXN0b20odGhpcy5jdXIoKSxhKTp0aGlzLmN1c3RvbSh0aGlzLnByb3A9PT0i
d2lkdGgifHx0aGlzLnByb3A9PT0iaGVpZ2h0Ij8xOjAsdGhpcy5jdXIoKSksZih0aGlzLmVsZW0p
LnNob3coKX0saGlkZTpmdW5jdGlvbigpe3RoaXMub3B0aW9ucy5vcmlnW3RoaXMucHJvcF09Zi5f
ZGF0YSh0aGlzLmVsZW0sImZ4c2hvdyIrdGhpcy5wcm9wKXx8Zi5zdHlsZSh0aGlzLmVsZW0sdGhp
cy5wcm9wKSx0aGlzLm9wdGlvbnMuaGlkZT0hMCx0aGlzLmN1c3RvbSh0aGlzLmN1cigpLDApfSxz
dGVwOmZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlPWNxfHxjcigpLGc9ITAsaD10aGlzLmVsZW0saT10
aGlzLm9wdGlvbnM7aWYoYXx8ZT49aS5kdXJhdGlvbit0aGlzLnN0YXJ0VGltZSl7dGhpcy5ub3c9
dGhpcy5lbmQsdGhpcy5wb3M9dGhpcy5zdGF0ZT0xLHRoaXMudXBkYXRlKCksaS5hbmltYXRlZFBy
b3BlcnRpZXNbdGhpcy5wcm9wXT0hMDtmb3IoYiBpbiBpLmFuaW1hdGVkUHJvcGVydGllcylpLmFu
aW1hdGVkUHJvcGVydGllc1tiXSE9PSEwJiYoZz0hMSk7aWYoZyl7aS5vdmVyZmxvdyE9bnVsbCYm
IWYuc3VwcG9ydC5zaHJpbmtXcmFwQmxvY2tzJiZmLmVhY2goWyIiLCJYIiwiWSJdLGZ1bmN0aW9u
KGEsYil7aC5zdHlsZVsib3ZlcmZsb3ciK2JdPWkub3ZlcmZsb3dbYV19KSxpLmhpZGUmJmYoaCku
aGlkZSgpO2lmKGkuaGlkZXx8aS5zaG93KWZvcihiIGluIGkuYW5pbWF0ZWRQcm9wZXJ0aWVzKWYu
c3R5bGUoaCxiLGkub3JpZ1tiXSksZi5yZW1vdmVEYXRhKGgsImZ4c2hvdyIrYiwhMCksZi5yZW1v
dmVEYXRhKGgsInRvZ2dsZSIrYiwhMCk7ZD1pLmNvbXBsZXRlLGQmJihpLmNvbXBsZXRlPSExLGQu
Y2FsbChoKSl9cmV0dXJuITF9aS5kdXJhdGlvbj09SW5maW5pdHk/dGhpcy5ub3c9ZTooYz1lLXRo
aXMuc3RhcnRUaW1lLHRoaXMuc3RhdGU9Yy9pLmR1cmF0aW9uLHRoaXMucG9zPWYuZWFzaW5nW2ku
YW5pbWF0ZWRQcm9wZXJ0aWVzW3RoaXMucHJvcF1dKHRoaXMuc3RhdGUsYywwLDEsaS5kdXJhdGlv
biksdGhpcy5ub3c9dGhpcy5zdGFydCsodGhpcy5lbmQtdGhpcy5zdGFydCkqdGhpcy5wb3MpLHRo
aXMudXBkYXRlKCk7cmV0dXJuITB9fSxmLmV4dGVuZChmLmZ4LHt0aWNrOmZ1bmN0aW9uKCl7dmFy
IGEsYj1mLnRpbWVycyxjPTA7Zm9yKDtjPGIubGVuZ3RoO2MrKylhPWJbY10sIWEoKSYmYltjXT09
PWEmJmIuc3BsaWNlKGMtLSwxKTtiLmxlbmd0aHx8Zi5meC5zdG9wKCl9LGludGVydmFsOjEzLHN0
b3A6ZnVuY3Rpb24oKXtjbGVhckludGVydmFsKGNvKSxjbz1udWxsfSxzcGVlZHM6e3Nsb3c6NjAw
LGZhc3Q6MjAwLF9kZWZhdWx0OjQwMH0sc3RlcDp7b3BhY2l0eTpmdW5jdGlvbihhKXtmLnN0eWxl
KGEuZWxlbSwib3BhY2l0eSIsYS5ub3cpfSxfZGVmYXVsdDpmdW5jdGlvbihhKXthLmVsZW0uc3R5
bGUmJmEuZWxlbS5zdHlsZVthLnByb3BdIT1udWxsP2EuZWxlbS5zdHlsZVthLnByb3BdPWEubm93
K2EudW5pdDphLmVsZW1bYS5wcm9wXT1hLm5vd319fSksZi5lYWNoKGNwLmNvbmNhdC5hcHBseShb
XSxjcCksZnVuY3Rpb24oYSxiKXtiLmluZGV4T2YoIm1hcmdpbiIpJiYoZi5meC5zdGVwW2JdPWZ1
bmN0aW9uKGEpe2Yuc3R5bGUoYS5lbGVtLGIsTWF0aC5tYXgoMCxhLm5vdykrYS51bml0KX0pfSks
Zi5leHByJiZmLmV4cHIuZmlsdGVycyYmKGYuZXhwci5maWx0ZXJzLmFuaW1hdGVkPWZ1bmN0aW9u
KGEpe3JldHVybiBmLmdyZXAoZi50aW1lcnMsZnVuY3Rpb24oYil7cmV0dXJuIGE9PT1iLmVsZW19
KS5sZW5ndGh9KTt2YXIgY3YsY3c9L150KD86YWJsZXxkfGgpJC9pLGN4PS9eKD86Ym9keXxodG1s
KSQvaTsiZ2V0Qm91bmRpbmdDbGllbnRSZWN0ImluIGMuZG9jdW1lbnRFbGVtZW50P2N2PWZ1bmN0
aW9uKGEsYixjLGQpe3RyeXtkPWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9Y2F0Y2goZSl7fWlm
KCFkfHwhZi5jb250YWlucyhjLGEpKXJldHVybiBkP3t0b3A6ZC50b3AsbGVmdDpkLmxlZnR9Ont0
b3A6MCxsZWZ0OjB9O3ZhciBnPWIuYm9keSxoPWN5KGIpLGk9Yy5jbGllbnRUb3B8fGcuY2xpZW50
VG9wfHwwLGo9Yy5jbGllbnRMZWZ0fHxnLmNsaWVudExlZnR8fDAsaz1oLnBhZ2VZT2Zmc2V0fHxm
LnN1cHBvcnQuYm94TW9kZWwmJmMuc2Nyb2xsVG9wfHxnLnNjcm9sbFRvcCxsPWgucGFnZVhPZmZz
ZXR8fGYuc3VwcG9ydC5ib3hNb2RlbCYmYy5zY3JvbGxMZWZ0fHxnLnNjcm9sbExlZnQsbT1kLnRv
cCtrLWksbj1kLmxlZnQrbC1qO3JldHVybnt0b3A6bSxsZWZ0Om59fTpjdj1mdW5jdGlvbihhLGIs
Yyl7dmFyIGQsZT1hLm9mZnNldFBhcmVudCxnPWEsaD1iLmJvZHksaT1iLmRlZmF1bHRWaWV3LGo9
aT9pLmdldENvbXB1dGVkU3R5bGUoYSxudWxsKTphLmN1cnJlbnRTdHlsZSxrPWEub2Zmc2V0VG9w
LGw9YS5vZmZzZXRMZWZ0O3doaWxlKChhPWEucGFyZW50Tm9kZSkmJmEhPT1oJiZhIT09Yyl7aWYo
Zi5zdXBwb3J0LmZpeGVkUG9zaXRpb24mJmoucG9zaXRpb249PT0iZml4ZWQiKWJyZWFrO2Q9aT9p
LmdldENvbXB1dGVkU3R5bGUoYSxudWxsKTphLmN1cnJlbnRTdHlsZSxrLT1hLnNjcm9sbFRvcCxs
LT1hLnNjcm9sbExlZnQsYT09PWUmJihrKz1hLm9mZnNldFRvcCxsKz1hLm9mZnNldExlZnQsZi5z
dXBwb3J0LmRvZXNOb3RBZGRCb3JkZXImJighZi5zdXBwb3J0LmRvZXNBZGRCb3JkZXJGb3JUYWJs
ZUFuZENlbGxzfHwhY3cudGVzdChhLm5vZGVOYW1lKSkmJihrKz1wYXJzZUZsb2F0KGQuYm9yZGVy
VG9wV2lkdGgpfHwwLGwrPXBhcnNlRmxvYXQoZC5ib3JkZXJMZWZ0V2lkdGgpfHwwKSxnPWUsZT1h
Lm9mZnNldFBhcmVudCksZi5zdXBwb3J0LnN1YnRyYWN0c0JvcmRlckZvck92ZXJmbG93Tm90Vmlz
aWJsZSYmZC5vdmVyZmxvdyE9PSJ2aXNpYmxlIiYmKGsrPXBhcnNlRmxvYXQoZC5ib3JkZXJUb3BX
aWR0aCl8fDAsbCs9cGFyc2VGbG9hdChkLmJvcmRlckxlZnRXaWR0aCl8fDApLGo9ZH1pZihqLnBv
c2l0aW9uPT09InJlbGF0aXZlInx8ai5wb3NpdGlvbj09PSJzdGF0aWMiKWsrPWgub2Zmc2V0VG9w
LGwrPWgub2Zmc2V0TGVmdDtmLnN1cHBvcnQuZml4ZWRQb3NpdGlvbiYmai5wb3NpdGlvbj09PSJm
aXhlZCImJihrKz1NYXRoLm1heChjLnNjcm9sbFRvcCxoLnNjcm9sbFRvcCksbCs9TWF0aC5tYXgo
Yy5zY3JvbGxMZWZ0LGguc2Nyb2xsTGVmdCkpO3JldHVybnt0b3A6ayxsZWZ0Omx9fSxmLmZuLm9m
ZnNldD1mdW5jdGlvbihhKXtpZihhcmd1bWVudHMubGVuZ3RoKXJldHVybiBhPT09Yj90aGlzOnRo
aXMuZWFjaChmdW5jdGlvbihiKXtmLm9mZnNldC5zZXRPZmZzZXQodGhpcyxhLGIpfSk7dmFyIGM9
dGhpc1swXSxkPWMmJmMub3duZXJEb2N1bWVudDtpZighZClyZXR1cm4gbnVsbDtpZihjPT09ZC5i
b2R5KXJldHVybiBmLm9mZnNldC5ib2R5T2Zmc2V0KGMpO3JldHVybiBjdihjLGQsZC5kb2N1bWVu
dEVsZW1lbnQpfSxmLm9mZnNldD17Ym9keU9mZnNldDpmdW5jdGlvbihhKXt2YXIgYj1hLm9mZnNl
dFRvcCxjPWEub2Zmc2V0TGVmdDtmLnN1cHBvcnQuZG9lc05vdEluY2x1ZGVNYXJnaW5JbkJvZHlP
ZmZzZXQmJihiKz1wYXJzZUZsb2F0KGYuY3NzKGEsIm1hcmdpblRvcCIpKXx8MCxjKz1wYXJzZUZs
b2F0KGYuY3NzKGEsIm1hcmdpbkxlZnQiKSl8fDApO3JldHVybnt0b3A6YixsZWZ0OmN9fSxzZXRP
ZmZzZXQ6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWYuY3NzKGEsInBvc2l0aW9uIik7ZD09PSJzdGF0
aWMiJiYoYS5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiKTt2YXIgZT1mKGEpLGc9ZS5vZmZzZXQo
KSxoPWYuY3NzKGEsInRvcCIpLGk9Zi5jc3MoYSwibGVmdCIpLGo9KGQ9PT0iYWJzb2x1dGUifHxk
PT09ImZpeGVkIikmJmYuaW5BcnJheSgiYXV0byIsW2gsaV0pPi0xLGs9e30sbD17fSxtLG47aj8o
bD1lLnBvc2l0aW9uKCksbT1sLnRvcCxuPWwubGVmdCk6KG09cGFyc2VGbG9hdChoKXx8MCxuPXBh
cnNlRmxvYXQoaSl8fDApLGYuaXNGdW5jdGlvbihiKSYmKGI9Yi5jYWxsKGEsYyxnKSksYi50b3Ah
PW51bGwmJihrLnRvcD1iLnRvcC1nLnRvcCttKSxiLmxlZnQhPW51bGwmJihrLmxlZnQ9Yi5sZWZ0
LWcubGVmdCtuKSwidXNpbmciaW4gYj9iLnVzaW5nLmNhbGwoYSxrKTplLmNzcyhrKX19LGYuZm4u
ZXh0ZW5kKHtwb3NpdGlvbjpmdW5jdGlvbigpe2lmKCF0aGlzWzBdKXJldHVybiBudWxsO3ZhciBh
PXRoaXNbMF0sYj10aGlzLm9mZnNldFBhcmVudCgpLGM9dGhpcy5vZmZzZXQoKSxkPWN4LnRlc3Qo
YlswXS5ub2RlTmFtZSk/e3RvcDowLGxlZnQ6MH06Yi5vZmZzZXQoKTtjLnRvcC09cGFyc2VGbG9h
dChmLmNzcyhhLCJtYXJnaW5Ub3AiKSl8fDAsYy5sZWZ0LT1wYXJzZUZsb2F0KGYuY3NzKGEsIm1h
cmdpbkxlZnQiKSl8fDAsZC50b3ArPXBhcnNlRmxvYXQoZi5jc3MoYlswXSwiYm9yZGVyVG9wV2lk
dGgiKSl8fDAsZC5sZWZ0Kz1wYXJzZUZsb2F0KGYuY3NzKGJbMF0sImJvcmRlckxlZnRXaWR0aCIp
KXx8MDtyZXR1cm57dG9wOmMudG9wLWQudG9wLGxlZnQ6Yy5sZWZ0LWQubGVmdH19LG9mZnNldFBh
cmVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3ZhciBhPXRoaXMub2Zm
c2V0UGFyZW50fHxjLmJvZHk7d2hpbGUoYSYmIWN4LnRlc3QoYS5ub2RlTmFtZSkmJmYuY3NzKGEs
InBvc2l0aW9uIik9PT0ic3RhdGljIilhPWEub2Zmc2V0UGFyZW50O3JldHVybiBhfSl9fSksZi5l
YWNoKHtzY3JvbGxMZWZ0OiJwYWdlWE9mZnNldCIsc2Nyb2xsVG9wOiJwYWdlWU9mZnNldCJ9LGZ1
bmN0aW9uKGEsYyl7dmFyIGQ9L1kvLnRlc3QoYyk7Zi5mblthXT1mdW5jdGlvbihlKXtyZXR1cm4g
Zi5hY2Nlc3ModGhpcyxmdW5jdGlvbihhLGUsZyl7dmFyIGg9Y3koYSk7aWYoZz09PWIpcmV0dXJu
IGg/YyBpbiBoP2hbY106Zi5zdXBwb3J0LmJveE1vZGVsJiZoLmRvY3VtZW50LmRvY3VtZW50RWxl
bWVudFtlXXx8aC5kb2N1bWVudC5ib2R5W2VdOmFbZV07aD9oLnNjcm9sbFRvKGQ/ZihoKS5zY3Jv
bGxMZWZ0KCk6ZyxkP2c6ZihoKS5zY3JvbGxUb3AoKSk6YVtlXT1nfSxhLGUsYXJndW1lbnRzLmxl
bmd0aCxudWxsKX19KSxmLmVhY2goe0hlaWdodDoiaGVpZ2h0IixXaWR0aDoid2lkdGgifSxmdW5j
dGlvbihhLGMpe3ZhciBkPSJjbGllbnQiK2EsZT0ic2Nyb2xsIithLGc9Im9mZnNldCIrYTtmLmZu
WyJpbm5lciIrYV09ZnVuY3Rpb24oKXt2YXIgYT10aGlzWzBdO3JldHVybiBhP2Euc3R5bGU/cGFy
c2VGbG9hdChmLmNzcyhhLGMsInBhZGRpbmciKSk6dGhpc1tjXSgpOm51bGx9LGYuZm5bIm91dGVy
IithXT1mdW5jdGlvbihhKXt2YXIgYj10aGlzWzBdO3JldHVybiBiP2Iuc3R5bGU/cGFyc2VGbG9h
dChmLmNzcyhiLGMsYT8ibWFyZ2luIjoiYm9yZGVyIikpOnRoaXNbY10oKTpudWxsfSxmLmZuW2Nd
PWZ1bmN0aW9uKGEpe3JldHVybiBmLmFjY2Vzcyh0aGlzLGZ1bmN0aW9uKGEsYyxoKXt2YXIgaSxq
LGssbDtpZihmLmlzV2luZG93KGEpKXtpPWEuZG9jdW1lbnQsaj1pLmRvY3VtZW50RWxlbWVudFtk
XTtyZXR1cm4gZi5zdXBwb3J0LmJveE1vZGVsJiZqfHxpLmJvZHkmJmkuYm9keVtkXXx8an1pZihh
Lm5vZGVUeXBlPT09OSl7aT1hLmRvY3VtZW50RWxlbWVudDtpZihpW2RdPj1pW2VdKXJldHVybiBp
W2RdO3JldHVybiBNYXRoLm1heChhLmJvZHlbZV0saVtlXSxhLmJvZHlbZ10saVtnXSl9aWYoaD09
PWIpe2s9Zi5jc3MoYSxjKSxsPXBhcnNlRmxvYXQoayk7cmV0dXJuIGYuaXNOdW1lcmljKGwpP2w6
a31mKGEpLmNzcyhjLGgpfSxjLGEsYXJndW1lbnRzLmxlbmd0aCxudWxsKX19KSxhLmpRdWVyeT1h
LiQ9Zix0eXBlb2YgZGVmaW5lPT0iZnVuY3Rpb24iJiZkZWZpbmUuYW1kJiZkZWZpbmUuYW1kLmpR
dWVyeSYmZGVmaW5lKCJqcXVlcnkiLFtdLGZ1bmN0aW9uKCl7cmV0dXJuIGZ9KX0pKHdpbmRvdyk7
CitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvd2ViZHJpdmVyX2JlbmNobWFya19ydW5uZXIvZGF0YS9wYXRjaGVzL0pldFN0cmVh
bS13ZC5wYXRjaCBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvd2ViZHJpdmVyX2JlbmNobWFya19y
dW5uZXIvZGF0YS9wYXRjaGVzL0pldFN0cmVhbS13ZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZjFhMDk0
YmJmM2QxNjQ5ZmFmNWM0MWVhNzdmNzQyYzAyZjkxODE2Ci0tLSAvZGV2L251bGwKKysrIGIvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS93ZWJkcml2ZXJfYmVuY2htYXJrX3J1bm5lci9kYXRhL3BhdGNo
ZXMvSmV0U3RyZWFtLXdkLnBhdGNoCkBAIC0wLDAgKzEsNDQgQEAKK2RpZmYgLS1naXQgYS9KZXRT
dHJlYW0tMS4wLjEvSmV0U3RyZWFtRHJpdmVyLmpzIGIvSmV0U3RyZWFtLTEuMC4xL0pldFN0cmVh
bURyaXZlci5qcworaW5kZXggNzNlZTQyMC4uNjBmNTg3YyAxMDA2NDQKKy0tLSBhL0pldFN0cmVh
bS0xLjEvSmV0U3RyZWFtRHJpdmVyLmpzCisrKysgYi9KZXRTdHJlYW0tMS4xL0pldFN0cmVhbURy
aXZlci5qcworQEAgLTQ0OCw2ICs0NDgsMTQgQEAgdmFyIEpldFN0cmVhbSA9IChmdW5jdGlvbigp
IHsKKworICAgICAgICAgcmV0dXJuIHJhd1Jlc3VsdHM7CisgICAgIH0KKysKKysgICAgZnVuY3Rp
b24gY29tcHV0ZVJlZmluZWRSZXN1bHRzKCl7CisrICAgICAgICB2YXIgcmVzdWx0cyA9IHt9Owor
KyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiZW5jaG1hcmtzLmxlbmd0aDsgKytpKSB7Cisr
ICAgICAgICAgICAgcmVzdWx0c1tiZW5jaG1hcmtzW2ldLm5hbWVdID0geyJtZXRyaWNzIiA6IHsi
U2NvcmUiIDogeyJjdXJyZW50IiA6IFtiZW5jaG1hcmtzW2ldLnJlc3VsdHNdfX19OworKyAgICAg
ICAgfQorKyAgICAgICAgcmV0dXJuIHsiSmV0U3RyZWFtIjogeyJtZXRyaWNzIiA6IHsiU2NvcmUi
IDogWyJHZW9tZXRyaWMiXX0sICJ0ZXN0cyIgOiByZXN1bHRzfX07CisrICAgIH0KKworICAgICBm
dW5jdGlvbiBlbmQoKQorICAgICB7CitAQCAtNDU4LDYgKzQ2Niw4IEBAIHZhciBKZXRTdHJlYW0g
PSAoZnVuY3Rpb24oKSB7CisgICAgICAgICBpc1J1bm5pbmcgPSBmYWxzZTsKKyAgICAgICAgIGhh
c0FscmVhZHlSdW4gPSB0cnVlOworICAgICAgICAgcHJlcGFyZVRvU3RhcnQoKTsKKysgICAgICAg
IHJlc3VsdHMgPSBKU09OLnN0cmluZ2lmeShjb21wdXRlUmVmaW5lZFJlc3VsdHMoKSk7CisrICAg
ICAgICB3aW5kb3cud2ViZHJpdmVyX3Jlc3VsdHMgPSByZXN1bHRzOworICAgICB9CisKKyAgICAg
ZnVuY3Rpb24gaXRlcmF0ZSgpCitkaWZmIC0tZ2l0IGEvSmV0U3RyZWFtLTEuMC4xL2luZGV4Lmh0
bWwgYi9KZXRTdHJlYW0tMS4wLjEvaW5kZXguaHRtbAoraW5kZXggZTI3NTM1Yy4uMDAxMDg3ZCAx
MDA2NDQKKy0tLSBhL0pldFN0cmVhbS0xLjEvaW5kZXguaHRtbAorKysrIGIvSmV0U3RyZWFtLTEu
MS9pbmRleC5odG1sCitAQCAtMzQsOCArMzQsMTAgQEAKKyAgICAgd2luZG93Lm9uZXJyb3IgPSBm
dW5jdGlvbigpIHsgYWxsSXNHb29kID0gZmFsc2U7IH0KKworICAgICBmdW5jdGlvbiBpbml0aWFs
aXplKCkgeworLSAgICAgICAgaWYgKGFsbElzR29vZCkKKysgICAgICAgIGlmIChhbGxJc0dvb2Qp
IHsKKyAgICAgICAgICAgICBKZXRTdHJlYW0uaW5pdGlhbGl6ZSgpOworKyAgICAgICAgICAgIHNl
dFRpbWVvdXQoZnVuY3Rpb24oKXt3aW5kb3cubG9jYXRpb24gPSAiamF2YXNjcmlwdDpKZXRTdHJl
YW0uc3RhcnQoKSJ9LCAzMDAwKTsKKysgICAgICAgIH0KKyAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYm9keSIpLmlubmVySFRNTCA9ICI8aDE+RVJS
T1I8L2gxPjxwPkVuY291bnRlcmVkIGVycm9ycyBkdXJpbmcgcGFnZSBsb2FkLiBSZWZ1c2luZyB0
byBydW4gYSBwYXJ0aWFsIGJlbmNobWFyayBzdWl0ZS48L3A+IjsKKyAgICAgfQpkaWZmIC0tZ2l0
IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS93ZWJkcml2ZXJfYmVuY2htYXJrX3J1bm5lci9kYXRh
L3BhdGNoZXMvS3Jha2VuLXdkLnBhdGNoIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS93ZWJkcml2
ZXJfYmVuY2htYXJrX3J1bm5lci9kYXRhL3BhdGNoZXMvS3Jha2VuLXdkLnBhdGNoCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjhhMzBiY2Y0ZmZiOWJhZTBlYWNiZmU5YmVmYzcwYjI0MzdmZjc5ZGQKLS0tIC9kZXYvbnVs
bAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3dlYmRyaXZlcl9iZW5jaG1hcmtfcnVubmVy
L2RhdGEvcGF0Y2hlcy9LcmFrZW4td2QucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorZGlmZiAtLWdp
dCBhL2hvc3RlZC9rcmFrZW4tMS4xL2RyaXZlci5odG1sIGIvaG9zdGVkL2tyYWtlbi0xLjEvZHJp
dmVyMi5odG1sCitpbmRleCBiZmIyYzk0Li41YWQxNzA0IDEwMDY0NAorLS0tIGEvaG9zdGVkL2ty
YWtlbi0xLjEvZHJpdmVyLmh0bWwKKysrKyBiL2hvc3RlZC9rcmFrZW4tMS4xL2RyaXZlcjIuaHRt
bAorQEAgLTExNywyMCArMTE3LDE2IEBAIGZ1bmN0aW9uIHJlY29yZFJlc3VsdCh0aW1lKQorIAor
IGZ1bmN0aW9uIGZpbmlzaCgpCisgeworLSAgICB2YXIgb3V0cHV0U3RyaW5nID0gInsiOworLSAg
ICBvdXRwdXRTdHJpbmcgKz0gJyJ2IjogImtyYWtlbi0xLjEiLCAnOworKyAgICB2YXIgdGVzdHMg
PSB7fTsKKyAgICAgZm9yICh2YXIgdGVzdCBpbiBvdXRwdXRbMF0pIHsKKy0gICAgICAgIG91dHB1
dFN0cmluZyArPSAnIicgKyB0ZXN0ICsgJyI6Wyc7CistICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IG91dHB1dC5sZW5ndGg7IGkrKykgeworLSAgICAgICAgICAgICBvdXRwdXRTdHJpbmcgKz0g
b3V0cHV0W2ldW3Rlc3RdICsgIiwiOworLSAgICAgICAgfQorLSAgICAgICAgb3V0cHV0U3RyaW5n
ID0gb3V0cHV0U3RyaW5nLnN1YnN0cmluZygwLCBvdXRwdXRTdHJpbmcubGVuZ3RoIC0gMSk7Cist
ICAgICAgICBvdXRwdXRTdHJpbmcgKz0gIl0sIjsKKysgICAgICAgIHZhciB2YWx1ZXMgPSBuZXcg
QXJyYXkob3V0cHV0Lmxlbmd0aCk7CisrICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG91dHB1
dC5sZW5ndGg7IGkrKykKKysgICAgICAgICAgICB2YWx1ZXNbaV0gPSBvdXRwdXRbaV1bdGVzdF07
CisrICAgICAgICB0ZXN0c1t0ZXN0XSA9IHsibWV0cmljcyI6IHsiVGltZSI6IHsiY3VycmVudCI6
IFt2YWx1ZXNdfX19CisgICAgIH0KKy0gICAgb3V0cHV0U3RyaW5nID0gb3V0cHV0U3RyaW5nLnN1
YnN0cmluZygwLCBvdXRwdXRTdHJpbmcubGVuZ3RoIC0gMSk7CistICAgIG91dHB1dFN0cmluZyAr
PSAifSI7CisgCistICAgIGxvY2F0aW9uID0gInJlc3VsdHMuaHRtbD8iICsgZW5jb2RlVVJJKG91
dHB1dFN0cmluZyk7CisrICAgIHZhciByZXN1bHRzID0gSlNPTi5zdHJpbmdpZnkoeyJLcmFrZW4i
OiB7Im1ldHJpY3MiOiB7IlRpbWUiOiBbIlRvdGFsIl19LCAidGVzdHMiOiB0ZXN0c319KTsKKysg
ICAgd2luZG93LndlYmRyaXZlcl9yZXN1bHRzID0gcmVzdWx0czsKKyB9CisgCisgPC9zY3JpcHQ+
CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3dlYmRyaXZlcl9iZW5jaG1hcmtf
cnVubmVyL2RhdGEvcGF0Y2hlcy9Nb3Rpb25NYXJrLXdkLnBhdGNoIGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS93ZWJkcml2ZXJfYmVuY2htYXJrX3J1bm5lci9kYXRhL3BhdGNoZXMvTW90aW9uTWFy
ay13ZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNWNlM2QyZWU4MDM2NTI4ZmQ3NGY2NDBhOWMxZjllY2I2
NTE1NDk3Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS93ZWJkcml2
ZXJfYmVuY2htYXJrX3J1bm5lci9kYXRhL3BhdGNoZXMvTW90aW9uTWFyay13ZC5wYXRjaApAQCAt
MCwwICsxLDYyIEBACitkaWZmIC0tZ2l0IGEvcmVzb3VyY2VzL3J1bm5lci9tb3Rpb25tYXJrLmpz
IGIvcmVzb3VyY2VzL3J1bm5lci9tb3Rpb25tYXJrLmpzCitpbmRleCA2NWU4YzU0Li4xNjQzZTcw
IDEwMDY0NAorLS0tIGEvcmVzb3VyY2VzL3J1bm5lci9tb3Rpb25tYXJrLmpzCisrKysgYi9yZXNv
dXJjZXMvcnVubmVyL21vdGlvbm1hcmsuanMKK0BAIC0zOTMsNiArMzkzLDQ4IEBAIHdpbmRvdy5i
ZW5jaG1hcmtSdW5uZXJDbGllbnQgPSB7CisgICAgIGRpZEZpbmlzaExhc3RJdGVyYXRpb246IGZ1
bmN0aW9uKCkKKyAgICAgeworICAgICAgICAgYmVuY2htYXJrQ29udHJvbGxlci5zaG93UmVzdWx0
cygpOworKyAgICB9LAorKworKyAgICBfY29tcHV0ZVRlc3RSZXBvcnQ6IGZ1bmN0aW9uKHRlc3RO
YW1lLCB0ZXN0UmVzdWx0cykKKysgICAgeworKyAgICAgICAgcmV0dXJuIFt0ZXN0UmVzdWx0c1tT
dHJpbmdzLmpzb24uc2NvcmVdXTsKKysgICAgfSwKKysKKysgICAgX2NvbXB1dGVTdWl0ZVJlcG9y
dHM6IGZ1bmN0aW9uKHN1aXRlTmFtZSwgc3VpdGVSZXN1bHRzKQorKyAgICB7CisrICAgICAgICB2
YXIgdGVzdHNSZXBvcnRzID0ge307CisrICAgICAgICBmb3IgKHZhciB0ZXN0TmFtZSBpbiBzdWl0
ZVJlc3VsdHMpIHsKKysgICAgICAgICAgICB2YXIgdGVzdFJlcG9ydHMgPSB0aGlzLl9jb21wdXRl
VGVzdFJlcG9ydCh0ZXN0TmFtZSwgc3VpdGVSZXN1bHRzW3Rlc3ROYW1lXSk7CisrICAgICAgICAg
ICAgdGVzdHNSZXBvcnRzW3Rlc3ROYW1lXSA9IHsgIm1ldHJpY3MiOiB7ICJTY29yZSI6IHsgImN1
cnJlbnQiOiB0ZXN0UmVwb3J0cyB9IH0gfTsKKysgICAgICAgIH0KKysgICAgICAgIHJldHVybiB0
ZXN0c1JlcG9ydHM7CisrICAgIH0sCisrCisrICAgIF9jb21wdXRlSXRlcmF0aW9uUmVwb3J0czog
ZnVuY3Rpb24oaXRlcmF0aW9uUmVzdWx0cykKKysgICAgeworKyAgICAgICAgdmFyIHN1aXRlc1Jl
cG9ydHMgPSB7fTsKKysgICAgICAgIGZvciAodmFyIHN1aXRlTmFtZSBpbiBpdGVyYXRpb25SZXN1
bHRzW1N0cmluZ3MuanNvbi5yZXN1bHRzLnRlc3RzXSkgeworKyAgICAgICAgICAgIHZhciB0ZXN0
c1JlcG9ydHMgPSB0aGlzLl9jb21wdXRlU3VpdGVSZXBvcnRzKHN1aXRlTmFtZSwgaXRlcmF0aW9u
UmVzdWx0c1tTdHJpbmdzLmpzb24ucmVzdWx0cy50ZXN0c11bc3VpdGVOYW1lXSk7CisrICAgICAg
ICAgICAgc3VpdGVzUmVwb3J0c1tzdWl0ZU5hbWVdID0geyAibWV0cmljcyI6IHsgIlNjb3JlIjog
WyJHZW9tZXRyaWMiXSB9LCAidGVzdHMiOiB0ZXN0c1JlcG9ydHMgfTsKKysgICAgICAgIH0KKysg
ICAgICAgIHJldHVybiBzdWl0ZXNSZXBvcnRzOworKyAgICB9LAorKworKyAgICBfY29tcHV0ZVJl
c3VsdHNSZXBvcnRzOiBmdW5jdGlvbigpCisrICAgIHsKKysgICAgICAgIHZhciByZXN1bHRzID0g
dGhpcy5yZXN1bHRzLnJlc3VsdHNbMF07CisrICAgICAgICB2YXIgaXRlcmF0aW9uUmVwb3J0cyA9
IHRoaXMuX2NvbXB1dGVJdGVyYXRpb25SZXBvcnRzKHJlc3VsdHMpOworKyAgICAgICAgaXRlcmF0
aW9uUmVwb3J0c1snZGVidWdPdXRwdXQnXSA9IHsKKysgICAgICAgICAgICBvcHRpb25zOiBiZW5j
aG1hcmtSdW5uZXJDbGllbnQucmVzdWx0cy5vcHRpb25zLAorKyAgICAgICAgICAgIGRhdGE6IGJl
bmNobWFya1J1bm5lckNsaWVudC5yZXN1bHRzLmRhdGEsCisrICAgICAgICB9CisrICAgICAgICBy
ZXR1cm4gaXRlcmF0aW9uUmVwb3J0czsKKysgICAgfSwKKysKKysgICAgZGlkRmluaXNoTGFzdEl0
ZXJhdGlvbjogZnVuY3Rpb24oKQorKyAgICB7CisrICAgICAgICB2YXIgcmVzdWx0cyA9IEpTT04u
c3RyaW5naWZ5KHRoaXMuX2NvbXB1dGVSZXN1bHRzUmVwb3J0cygpKTsKKysgICAgICAgIHdpbmRv
dy53ZWJkcml2ZXJfcmVzdWx0cyA9IHJlc3VsdHM7CisgICAgIH0KKyB9OworCitAQCAtNDM2LDcg
KzQ5MSw3IEBAIHdpbmRvdy5zZWN0aW9uc01hbmFnZXIgPQorIHdpbmRvdy5iZW5jaG1hcmtDb250
cm9sbGVyID0geworICAgICBpbml0aWFsaXplOiBmdW5jdGlvbigpCisgICAgIHsKKy0gICAgICAg
IGJlbmNobWFya0NvbnRyb2xsZXIuYWRkT3JpZW50YXRpb25MaXN0ZW5lcklmTmVjZXNzYXJ5KCk7
CisrICAgICAgICBzZXRUaW1lb3V0KGJlbmNobWFya0NvbnRyb2xsZXIuc3RhcnRCZW5jaG1hcmsu
YmluZChiZW5jaG1hcmtDb250cm9sbGVyKSwgMzAwMCk7CisgICAgIH0sCisKKyAgICAgZGV0ZXJt
aW5lQ2FudmFzU2l6ZTogZnVuY3Rpb24oKSB7CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L3dlYmRyaXZlcl9iZW5jaG1hcmtfcnVubmVyL2RhdGEvcGF0Y2hlcy9PY3RhbmUtd2Qu
cGF0Y2ggYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3dlYmRyaXZlcl9iZW5jaG1hcmtfcnVubmVy
L2RhdGEvcGF0Y2hlcy9PY3RhbmUtd2QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjE2M2Y0NjJmMmY0ZWI2
MTU1N2QyNmZlZWVlMzEwYjNlMTdkODAyOQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvd2ViZHJpdmVyX2JlbmNobWFya19ydW5uZXIvZGF0YS9wYXRjaGVzL09jdGFu
ZS13ZC5wYXRjaApAQCAtMCwwICsxLDU2IEBACitkaWZmIC0tZ2l0IGEvYmFzZS5qcyBiL2Jhc2Uu
anMKK2luZGV4IDlkNmUzZGUuLmNkZGY4MDAKKy0tLSBhL2Jhc2UuanMKKysrKyBiL2Jhc2UuanMK
K0BAIC0xNjcsNyArMTY3LDcgQEAgQmVuY2htYXJrU3VpdGUuUnVuU3VpdGVzID0gZnVuY3Rpb24o
cnVubmVyLCBza2lwQmVuY2htYXJrcykgeworICAgICBpZiAocnVubmVyLk5vdGlmeVNjb3JlKSB7
CisgICAgICAgdmFyIHNjb3JlID0gQmVuY2htYXJrU3VpdGUuR2VvbWV0cmljTWVhbihCZW5jaG1h
cmtTdWl0ZS5zY29yZXMpOworICAgICAgIHZhciBmb3JtYXR0ZWQgPSBCZW5jaG1hcmtTdWl0ZS5G
b3JtYXRTY29yZSgxMDAgKiBzY29yZSk7CistICAgICAgcnVubmVyLk5vdGlmeVNjb3JlKGZvcm1h
dHRlZCk7CisrICAgICAgcnVubmVyLk5vdGlmeVNjb3JlKGZvcm1hdHRlZCwgMTAwICogc2NvcmUp
OworICAgICB9CisgICB9CisgICBSdW5TdGVwKCk7CitAQCAtMjUwLDcgKzI1MCw3IEBAIEJlbmNo
bWFya1N1aXRlLnByb3RvdHlwZS5Ob3RpZnlSZXN1bHQgPSBmdW5jdGlvbigpIHsKKyAgIEJlbmNo
bWFya1N1aXRlLnNjb3Jlcy5wdXNoKHNjb3JlKTsKKyAgIGlmICh0aGlzLnJ1bm5lci5Ob3RpZnlS
ZXN1bHQpIHsKKyAgICAgdmFyIGZvcm1hdHRlZCA9IEJlbmNobWFya1N1aXRlLkZvcm1hdFNjb3Jl
KDEwMCAqIHNjb3JlKTsKKy0gICAgdGhpcy5ydW5uZXIuTm90aWZ5UmVzdWx0KHRoaXMubmFtZSwg
Zm9ybWF0dGVkKTsKKysgICAgdGhpcy5ydW5uZXIuTm90aWZ5UmVzdWx0KHRoaXMubmFtZSwgZm9y
bWF0dGVkLCAxMDAgKiBzY29yZSk7CisgICB9CisgICBpZiAodGhpcy5yZWZlcmVuY2UubGVuZ3Ro
ID09IDIpIHsKKyAgICAgdmFyIG1lYW5MYXRlbmN5ID0gQmVuY2htYXJrU3VpdGUuR2VvbWV0cmlj
TWVhbkxhdGVuY3kodGhpcy5yZXN1bHRzKTsKK0BAIC0yNTksNyArMjU5LDcgQEAgQmVuY2htYXJr
U3VpdGUucHJvdG90eXBlLk5vdGlmeVJlc3VsdCA9IGZ1bmN0aW9uKCkgeworICAgICAgIEJlbmNo
bWFya1N1aXRlLnNjb3Jlcy5wdXNoKHNjb3JlTGF0ZW5jeSk7CisgICAgICAgaWYgKHRoaXMucnVu
bmVyLk5vdGlmeVJlc3VsdCkgeworICAgICAgICAgdmFyIGZvcm1hdHRlZExhdGVuY3kgPSBCZW5j
aG1hcmtTdWl0ZS5Gb3JtYXRTY29yZSgxMDAgKiBzY29yZUxhdGVuY3kpCistICAgICAgICB0aGlz
LnJ1bm5lci5Ob3RpZnlSZXN1bHQodGhpcy5uYW1lICsgIkxhdGVuY3kiLCBmb3JtYXR0ZWRMYXRl
bmN5KTsKKysgICAgICAgIHRoaXMucnVubmVyLk5vdGlmeVJlc3VsdCh0aGlzLm5hbWUgKyAiTGF0
ZW5jeSIsIGZvcm1hdHRlZExhdGVuY3ksIDEwMCAqIHNjb3JlTGF0ZW5jeSk7CisgICAgICAgfQor
ICAgICB9CisgICB9CitpbmRleCA3N2NiZGZiLi5mZTU2ZmM0CistLS0gYS9pbmRleC5odG1sCisr
KysgYi9pbmRleC5odG1sCitAQCAtNTcsNyArNTcsOSBAQAorICAgICB9KTsKKyAgIH0KKworLSAg
ZnVuY3Rpb24gQWRkUmVzdWx0KG5hbWUsIHJlc3VsdCkgeworKyAgdmFyIG9jdGFuZVN1YnRlc3Rz
ID0ge307CisrICBmdW5jdGlvbiBBZGRSZXN1bHQobmFtZSwgcmVzdWx0LCByYXdTY29yZSkgewor
KyAgICBvY3RhbmVTdWJ0ZXN0c1tuYW1lXSA9IHsibWV0cmljcyI6IHsiU2NvcmUiOiB7ImN1cnJl
bnQiOiBbcmF3U2NvcmVdfX19OworICAgICBjb25zb2xlLmxvZyhuYW1lICsgJzogJyArIHJlc3Vs
dCk7CisgICAgIHZhciBib3ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiUmVzdWx0LSIgKyBu
YW1lKTsKKyAgICAgYm94LmlubmVySFRNTCA9IHJlc3VsdDsKK0BAIC03NSw3ICs3Nyw5IEBACisg
ICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgIH0KKworLSAgZnVuY3Rpb24gQWRkU2NvcmUoc2NvcmUp
IHsKKysgIGZ1bmN0aW9uIEFkZFNjb3JlKHNjb3JlLCByYXdTY29yZSkgeworKyAgICB2YXIgcmVz
dWx0cyA9IEpTT04uc3RyaW5naWZ5KHsiT2N0YW5lIjogeyJtZXRyaWNzIjogeyJTY29yZSI6IHsi
Y3VycmVudCI6IFtyYXdTY29yZV19fSwgInRlc3RzIjogb2N0YW5lU3VidGVzdHN9fSk7CisrICAg
IHdpbmRvdy53ZWJkcml2ZXJfcmVzdWx0cyA9IHJlc3VsdHMKKyAgICAgdmFyIHN0YXR1cyA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJtYWluLWJhbm5lciIpOworICAgICBpZiAoc3VjY2Vzcykg
eworICAgICAgIHN0YXR1cy5pbm5lckhUTUwgPSAiT2N0YW5lIFNjb3JlOiAiICsgc2NvcmU7CmRp
ZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3dlYmRyaXZlcl9iZW5jaG1hcmtfcnVu
bmVyL2RhdGEvcGF0Y2hlcy9TcGVlZG9tZXRlci13ZC5wYXRjaCBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvd2ViZHJpdmVyX2JlbmNobWFya19ydW5uZXIvZGF0YS9wYXRjaGVzL1NwZWVkb21ldGVy
LXdkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNmZjRlMmExNTQzZjBiZTliM2QxY2M0NjhiZDYzZjM1NWVl
NTQwZjQKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3dlYmRyaXZl
cl9iZW5jaG1hcmtfcnVubmVyL2RhdGEvcGF0Y2hlcy9TcGVlZG9tZXRlci13ZC5wYXRjaApAQCAt
MCwwICsxLDExNSBAQAorZGlmZiAtLWdpdCBhL0Z1bGwuaHRtbCBiL0Z1bGwuaHRtbAoraW5kZXgg
NDE5YjlmMi4uMGIwNGM2OSAxMDA2NDQKKy0tLSBhL0Z1bGwuaHRtbAorKysrIGIvRnVsbC5odG1s
CitAQCAtNyw3ICs3LDYgQEAKKyAgICAgPHNjcmlwdCBzcmM9InJlc291cmNlcy9tYWluLmpzIiBk
ZWZlcj48L3NjcmlwdD4KKyAgICAgPHNjcmlwdCBzcmM9InJlc291cmNlcy9iZW5jaG1hcmstcnVu
bmVyLmpzIiBkZWZlcj48L3NjcmlwdD4KKyAgICAgPHNjcmlwdCBzcmM9InJlc291cmNlcy9iZW5j
aG1hcmstcmVwb3J0LmpzIiBkZWZlcj48L3NjcmlwdD4KKy0gICAgPHNjcmlwdCBzcmM9Ii4uL3Jl
c291cmNlcy9zdGF0aXN0aWNzLmpzIiBkZWZlcj48L3NjcmlwdD4KKyAgICAgPHNjcmlwdCBzcmM9
InJlc291cmNlcy90ZXN0cy5qcyIgZGVmZXI+PC9zY3JpcHQ+CisgPC9oZWFkPgorIDxib2R5Pgor
ZGlmZiAtLWdpdCBhL3Jlc291cmNlcy9iZW5jaG1hcmstcmVwb3J0LmpzIGIvcmVzb3VyY2VzL2Jl
bmNobWFyay1yZXBvcnQuanMKK2luZGV4IGM0YjRjNjQuLjg3NGY1OTcgMTAwNjQ0CistLS0gYS9y
ZXNvdXJjZXMvYmVuY2htYXJrLXJlcG9ydC5qcworKysrIGIvcmVzb3VyY2VzL2JlbmNobWFyay1y
ZXBvcnQuanMKK0BAIC0xLDMwICsxLDI2IEBACisgLy8gVGhpcyBmaWxlIGNhbiBiZSBjdXN0b21p
emVkIHRvIHJlcG9ydCByZXN1bHRzIGFzIG5lZWRlZC4KKworIChmdW5jdGlvbiAoKSB7CistICAg
IGlmICghd2luZG93LnRlc3RSdW5uZXIgJiYgbG9jYXRpb24uc2VhcmNoICE9ICc/d2Via2l0JyAm
JiBsb2NhdGlvbi5oYXNoICE9ICcjd2Via2l0JykKKy0gICAgICAgIHJldHVybjsKKy0KKyAgICAg
aWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25l
KCk7CisKKy0gICAgdmFyIHNjcmlwdEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdz
Y3JpcHQnKTsKKy0gICAgc2NyaXB0RWxlbWVudC5zcmMgPSAnLi4vcmVzb3VyY2VzL3J1bm5lci5q
cyc7CistICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0RWxlbWVudCk7CistCist
ICAgIHZhciBzdHlsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpOwor
LSAgICBzdHlsZUVsZW1lbnQudGV4dENvbnRlbnQgPSAncHJlIHsgcGFkZGluZy10b3A6IDYwMHB4
OyB9JzsKKy0gICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzdHlsZUVsZW1lbnQpOworLQor
KyAgICBzaG93U2VjdGlvbigncnVubmluZycpCisgICAgIHZhciBjcmVhdGVUZXN0OworICAgICB2
YXIgdmFsdWVzQnlJdGVyYXRpb24gPSBuZXcgQXJyYXk7CisrICAgIHZhciB0aW1lVmFsdWVzID0g
bmV3IEFycmF5OworCisgICAgIHdpbmRvdy5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7CistICAgICAg
ICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ21haW4n
KSk7CisgICAgICAgICBzdGFydEJlbmNobWFyaygpOworICAgICB9CisKKyAgICAgd2luZG93LmJl
bmNobWFya0NsaWVudCA9IHsKKyAgICAgICAgIGl0ZXJhdGlvbkNvdW50OiA1LCAvLyBVc2UgNCBk
aWZmZXJlbnQgaW5zdGFuY2VzIG9mIERSVC9XVFIgdG8gcnVuIDUgaXRlcmF0aW9ucy4KKysgICAg
ICAgIHdpbGxBZGRUZXN0RnJhbWU6IGZ1bmN0aW9uIChmcmFtZSkgeworKyAgICAgICAgICAgIHZh
ciBtYWluID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignbWFpbicpOworKyAgICAgICAgICAgIHZh
ciBzdHlsZSA9IGdldENvbXB1dGVkU3R5bGUobWFpbik7CisrICAgICAgICAgICAgZnJhbWUuc3R5
bGUubGVmdCA9IG1haW4ub2Zmc2V0TGVmdCArIHBhcnNlSW50KHN0eWxlLmJvcmRlckxlZnRXaWR0
aCkgKyBwYXJzZUludChzdHlsZS5wYWRkaW5nTGVmdCkgKyAncHgnOworKyAgICAgICAgICAgIGZy
YW1lLnN0eWxlLnRvcCA9IG1haW4ub2Zmc2V0VG9wICsgcGFyc2VJbnQoc3R5bGUuYm9yZGVyVG9w
V2lkdGgpICsgcGFyc2VJbnQoc3R5bGUucGFkZGluZ1RvcCkgKyAncHgnOworKyAgICAgICAgfSwK
KyAgICAgICAgIHdpbGxTdGFydEZpcnN0SXRlcmF0aW9uOiBmdW5jdGlvbiAoaXRlcmF0aW9uQ291
bnQpIHsKKyAgICAgICAgICAgICBjcmVhdGVUZXN0ID0gZnVuY3Rpb24gKG5hbWUsIGFnZ3JlZ2F0
b3IsIGlzTGFzdFRlc3QpIHsKKyAgICAgICAgICAgICAgICAgcmV0dXJuIHsKK0BAIC0zNiwxNSAr
MzIsMTIgQEAKKyAgICAgICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUsCisgICAgICAgICAgICAg
ICAgICAgICBhZ2dyZWdhdG9yOiBhZ2dyZWdhdG9yfTsKKyAgICAgICAgICAgICB9CistICAgICAg
ICAgICAgUGVyZlRlc3RSdW5uZXIucHJlcGFyZVRvTWVhc3VyZVZhbHVlc0FzeW5jKGNyZWF0ZVRl
c3QobnVsbCwgJ1RvdGFsJykpOworICAgICAgICAgfSwKKyAgICAgICAgIGRpZFJ1blN1aXRlczog
ZnVuY3Rpb24gKG1lYXN1cmVkVmFsdWVzKSB7CistICAgICAgICAgICAgUGVyZlRlc3RSdW5uZXIu
bWVhc3VyZVZhbHVlQXN5bmMobWVhc3VyZWRWYWx1ZXMudG90YWwpOworICAgICAgICAgICAgIHZh
bHVlc0J5SXRlcmF0aW9uLnB1c2gobWVhc3VyZWRWYWx1ZXMudGVzdHMpOworKyAgICAgICAgICAg
IHRpbWVWYWx1ZXMucHVzaChtZWFzdXJlZFZhbHVlcy50b3RhbCk7CisgICAgICAgICB9LAorICAg
ICAgICAgZGlkRmluaXNoTGFzdEl0ZXJhdGlvbjogZnVuY3Rpb24gKCkgeworLSAgICAgICAgICAg
IGRvY3VtZW50LmhlYWQucmVtb3ZlQ2hpbGQoZG9jdW1lbnQucXVlcnlTZWxlY3Rvcignc3R5bGUn
KSk7CistCisgICAgICAgICAgICAgdmFyIG1lYXN1cmVkVmFsdWVzQnlGdWxsTmFtZSA9IHt9Owor
ICAgICAgICAgICAgIGZ1bmN0aW9uIGFkZFRvTWVhc3VyZWRWYWx1ZSh2YWx1ZSwgZnVsbE5hbWUs
IGFnZ3JlZ2F0b3IpIHsKKyAgICAgICAgICAgICAgICAgdmFyIHZhbHVlcyA9IG1lYXN1cmVkVmFs
dWVzQnlGdWxsTmFtZVtmdWxsTmFtZV0gfHwgbmV3IEFycmF5OworQEAgLTUyLDE5ICs0NSwzMCBA
QAorICAgICAgICAgICAgICAgICB2YWx1ZXMucHVzaCh2YWx1ZSk7CisgICAgICAgICAgICAgICAg
IHZhbHVlcy5hZ2dyZWdhdG9yID0gYWdncmVnYXRvcjsKKyAgICAgICAgICAgICB9CistCisrICAg
ICAgICAgICAgdmFyIGRpY3QgPSB7fQorKyAgICAgICAgICAgIHZhciBzY29yZXM9IHRpbWVWYWx1
ZXMubWFwKGNvbXB1dGVTY29yZSk7CisrICAgICAgICAgICAgZnVuY3Rpb24gYWRkVG9EaWN0aW9u
YXJ5VmFsdWUodmFsdWUsIHN1aXRlTmFtZSwgdGVzdE5hbWUsIHN1YnRlc3ROYW1lKSB7CisrICAg
ICAgICAgICAgICAgIGRpY3RbIlNwZWVkb21ldGVyIl0gPSBkaWN0WyJTcGVlZG9tZXRlciJdIHx8
IHsgIm1ldHJpY3MiIDogeyAiVGltZSIgOiBbICJUb3RhbCIsIF0sICJTY29yZSI6IHsgImN1cnJl
bnQiIDogW3Njb3Jlc10gfSB9LCAidGVzdHMiIDoge319OworKyAgICAgICAgICAgICAgICBkaWN0
WyJTcGVlZG9tZXRlciJdWyJ0ZXN0cyJdW3N1aXRlTmFtZV0gPSBkaWN0WyJTcGVlZG9tZXRlciJd
WyJ0ZXN0cyJdW3N1aXRlTmFtZV0gfHwgeyJtZXRyaWNzIiA6IHsgIlRpbWUiIDogWyAiVG90YWwi
LCBdIH0sICJ0ZXN0cyIgOiB7fX07CisrICAgICAgICAgICAgICAgIGRpY3RbIlNwZWVkb21ldGVy
Il1bInRlc3RzIl1bc3VpdGVOYW1lXVsidGVzdHMiXVt0ZXN0TmFtZV0gPSBkaWN0WyJTcGVlZG9t
ZXRlciJdWyJ0ZXN0cyJdW3N1aXRlTmFtZV1bInRlc3RzIl1bdGVzdE5hbWVdIHx8IHsgIm1ldHJp
Y3MiIDogeyAiVGltZSIgOiBbICJUb3RhbCIsIF0gfSwgInRlc3RzIiA6IHt9fTsKKysgICAgICAg
ICAgICAgICAgZGljdFsiU3BlZWRvbWV0ZXIiXVsidGVzdHMiXVtzdWl0ZU5hbWVdWyJ0ZXN0cyJd
W3Rlc3ROYW1lXVsidGVzdHMiXVtzdWJ0ZXN0TmFtZV0gPSBkaWN0WyJTcGVlZG9tZXRlciJdWyJ0
ZXN0cyJdW3N1aXRlTmFtZV1bInRlc3RzIl1bdGVzdE5hbWVdWyJ0ZXN0cyJdW3N1YnRlc3ROYW1l
XSB8fCB7ICJtZXRyaWNzIiA6IHsgIlRpbWUiIDogeyAiY3VycmVudCIgOiBbW11dIH0gfX07Cisr
ICAgICAgICAgICAgICAgIGRpY3RbIlNwZWVkb21ldGVyIl1bInRlc3RzIl1bc3VpdGVOYW1lXVsi
dGVzdHMiXVt0ZXN0TmFtZV1bInRlc3RzIl1bc3VidGVzdE5hbWVdWyJtZXRyaWNzIl1bIlRpbWUi
XVsiY3VycmVudCJdWzBdLnB1c2godmFsdWUpOworKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICB2YWx1ZXNCeUl0ZXJhdGlvbi5mb3JFYWNoKGZ1bmN0aW9uIChtZWFzdXJlZFZhbHVlcykgewor
ICAgICAgICAgICAgICAgICBmb3IgKHZhciBzdWl0ZU5hbWUgaW4gbWVhc3VyZWRWYWx1ZXMpIHsK
KyAgICAgICAgICAgICAgICAgICAgIHZhciBzdWl0ZSA9IG1lYXN1cmVkVmFsdWVzW3N1aXRlTmFt
ZV07CisgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciB0ZXN0TmFtZSBpbiBzdWl0ZS50ZXN0
cykgeworICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZXN0ID0gc3VpdGUudGVzdHNbdGVz
dE5hbWVdOworLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIHN1YnRlc3ROYW1lIGlu
IHRlc3QudGVzdHMpCisrICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgc3VidGVzdE5h
bWUgaW4gdGVzdC50ZXN0cykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRUb01l
YXN1cmVkVmFsdWUodGVzdC50ZXN0c1tzdWJ0ZXN0TmFtZV0sIHN1aXRlTmFtZSArICcvJyArIHRl
c3ROYW1lICsgJy8nICsgc3VidGVzdE5hbWUpOworKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBhZGRUb0RpY3Rpb25hcnlWYWx1ZSh0ZXN0LnRlc3RzW3N1YnRlc3ROYW1lXSwgc3VpdGVOYW1l
LCB0ZXN0TmFtZSwgc3VidGVzdE5hbWUpOworKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICBhZGRUb01lYXN1cmVkVmFsdWUodGVzdC50b3RhbCwgc3Vp
dGVOYW1lICsgJy8nICsgdGVzdE5hbWUsICdUb3RhbCcpOworICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgYWRkVG9NZWFzdXJlZFZhbHVlKHN1aXRlLnRvdGFsLCBz
dWl0ZU5hbWUsICdUb3RhbCcpOworICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgfSk7
CisrICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSBKU09OLnN0cmluZ2lmeShkaWN0KTsKKworICAg
ICAgICAgICAgIHZhciBmdWxsTmFtZXMgPSBuZXcgQXJyYXk7CisgICAgICAgICAgICAgZm9yICh2
YXIgZnVsbE5hbWUgaW4gbWVhc3VyZWRWYWx1ZXNCeUZ1bGxOYW1lKQorQEAgLTcyLDggKzc2LDgg
QEAKKworICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZnVsbE5hbWVzLmxlbmd0aDsg
aSsrKSB7CisgICAgICAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBtZWFzdXJlZFZhbHVlc0J5RnVs
bE5hbWVbZnVsbE5hbWVzW2ldXTsKKy0gICAgICAgICAgICAgICAgUGVyZlRlc3RSdW5uZXIucmVw
b3J0VmFsdWVzKGNyZWF0ZVRlc3QoZnVsbE5hbWVzW2ldLCB2YWx1ZXMuYWdncmVnYXRvciwgaSAr
IDEgPT0gZnVsbE5hbWVzLmxlbmd0aCksIHZhbHVlcyk7CisgICAgICAgICAgICAgfQorKyAgICAg
ICAgICAgIHdpbmRvdy53ZWJkcml2ZXJfcmVzdWx0cyA9IHJlc3VsdHM7CisgICAgICAgICB9Cisg
ICAgIH07CisgfSkoKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvd2ViZHJp
dmVyX2JlbmNobWFya19ydW5uZXIvZGF0YS9wYXRjaGVzL1N1blNwaWRlci13ZC5wYXRjaCBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvd2ViZHJpdmVyX2JlbmNobWFya19ydW5uZXIvZGF0YS9wYXRj
aGVzL1N1blNwaWRlci13ZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMjlkYWQ0ODhlNjcwMGNjNTM4OGI0
ZTMzZmJkODMwMzgzNGYwZWEwCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS93ZWJkcml2ZXJfYmVuY2htYXJrX3J1bm5lci9kYXRhL3BhdGNoZXMvU3VuU3BpZGVyLXdk
LnBhdGNoCkBAIC0wLDAgKzEsMjQ3IEBACitkaWZmIC0tZ2l0IGEvaG9zdGVkL3N1bnNwaWRlci0x
LjAuMS9kcml2ZXIuaHRtbCBiL2hvc3RlZC9zdW5zcGlkZXItMS4wLjEvZHJpdmVyLmh0bWwKK2lu
ZGV4IDA3MDBiYjIuLmU2Mjc0ZjMgMTAwNjQ0CistLS0gYS9ob3N0ZWQvc3Vuc3BpZGVyLTEuMC4x
L2RyaXZlci5odG1sCisrKysgYi9ob3N0ZWQvc3Vuc3BpZGVyLTEuMC4xL2RyaXZlci5odG1sCitA
QCAtMTAzLDIzICsxMDMsMTYgQEAgZnVuY3Rpb24gcmVjb3JkUmVzdWx0KHRpbWUpCisKKyBmdW5j
dGlvbiBmaW5pc2goKQorIHsKKy0gICAgdmFyIG91dHB1dFN0cmluZyA9ICJ7IjsKKy0gICAgb3V0
cHV0U3RyaW5nICs9ICcidiI6ICJzdW5zcGlkZXItMS4wLjEiLCAnOworKyAgICB2YXIgdGVzdHMg
PSB7fTsKKyAgICAgZm9yICh2YXIgdGVzdCBpbiBvdXRwdXRbMF0pIHsKKy0gICAgICAgIG91dHB1
dFN0cmluZyArPSAnIicgKyB0ZXN0ICsgJyI6Wyc7CistICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IG91dHB1dC5sZW5ndGg7IGkrKykgeworLSAgICAgICAgICAgIHZhciB0aW1lID0gb3V0cHV0
W2ldW3Rlc3RdOworLSAgICAgICAgICAgIGlmICh0aW1lICE9IHRpbWUpCistICAgICAgICAgICAg
ICAgIHRpbWUgPSAiXCJOYU5cIiI7CistICAgICAgICAgICAgb3V0cHV0U3RyaW5nICs9IHRpbWUg
KyAiLCI7CistICAgICAgICB9CistICAgICAgICBvdXRwdXRTdHJpbmcgPSBvdXRwdXRTdHJpbmcu
c3Vic3RyaW5nKDAsIG91dHB1dFN0cmluZy5sZW5ndGggLSAxKTsKKy0gICAgICAgIG91dHB1dFN0
cmluZyArPSAiXSwiOworKyAgICAgICAgdmFyIHZhbHVlcyA9IG5ldyBBcnJheShvdXRwdXQubGVu
Z3RoKTsKKysgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb3V0cHV0Lmxlbmd0aDsgaSsrKQor
KyAgICAgICAgICAgIHZhbHVlc1tpXSA9IG91dHB1dFtpXVt0ZXN0XTsKKysgICAgICAgIHRlc3Rz
W3Rlc3RdID0geyJtZXRyaWNzIjogeyJUaW1lIjogeyJjdXJyZW50IjogW3ZhbHVlc119fX0KKyAg
ICAgfQorLSAgICBvdXRwdXRTdHJpbmcgPSBvdXRwdXRTdHJpbmcuc3Vic3RyaW5nKDAsIG91dHB1
dFN0cmluZy5sZW5ndGggLSAxKTsKKy0gICAgb3V0cHV0U3RyaW5nICs9ICJ9IjsKKworLSAgICBs
b2NhdGlvbiA9ICJyZXN1bHRzLmh0bWw/IiArIGVuY29kZVVSSShvdXRwdXRTdHJpbmcpOworKyAg
ICB2YXIgcmVzdWx0cyA9IEpTT04uc3RyaW5naWZ5KHsiU3VuU3BpZGVyIjogeyJtZXRyaWNzIjog
eyJUaW1lIjogWyJUb3RhbCJdfSwgInRlc3RzIjogdGVzdHN9fSk7CisrICAgIHdpbmRvdy53ZWJk
cml2ZXJfcmVzdWx0cyA9IHJlc3VsdHM7CisgfQorCisgPC9zY3JpcHQ+CitkaWZmIC0tZ2l0IGEv
aG9zdGVkL3N1bnNwaWRlci0xLjAuMS9zdW5zcGlkZXItdGVzdC1jb250ZW50cy5qcyBiL2hvc3Rl
ZC9zdW5zcGlkZXItMS4wLjEvc3Vuc3BpZGVyLXRlc3QtY29udGVudHMuanMKK2luZGV4IGNkMTFh
NTYuLjBkMGU0OTUgMTAwNjQ0CistLS0gYS9ob3N0ZWQvc3Vuc3BpZGVyLTEuMC4xL3N1bnNwaWRl
ci10ZXN0LWNvbnRlbnRzLmpzCisrKysgYi9ob3N0ZWQvc3Vuc3BpZGVyLTEuMC4xL3N1bnNwaWRl
ci10ZXN0LWNvbnRlbnRzLmpzCitAQCAtMjksNyArMjksNiBAQCB2YXIgdGVzdENvbnRlbnRzID0g
WyAiPCFET0NUWVBFIGh0bWw+XG5cCisgLS0+XG5cCisgXG5cCisgPHRpdGxlPlN1blNwaWRlciAz
ZC1jdWJlPC90aXRsZT5cblwKKy08bGluayByZWw9XCJzdHlsZXNoZWV0XCIgaHJlZj1cIi4uL3N1
bnNwaWRlci5jc3NcIj5cblwKKyA8L2hlYWQ+XG5cCisgXG5cCisgPGJvZHk+XG5cCitAQCAtNDQ3
LDcgKzQ0Niw2IEBAIHJlY29yZChfc3VuU3BpZGVySW50ZXJ2YWwpO1xuXAorIC0tPlxuXAorIFxu
XAorIDx0aXRsZT5TdW5TcGlkZXIgM2QtbW9ycGg8L3RpdGxlPlxuXAorLTxsaW5rIHJlbD1cInN0
eWxlc2hlZXRcIiBocmVmPVwiLi4vc3Vuc3BpZGVyLmNzc1wiPlxuXAorIDwvaGVhZD5cblwKKyBc
blwKKyA8Ym9keT5cblwKK0BAIC01NzMsNyArNTcxLDYgQEAgcmVjb3JkKF9zdW5TcGlkZXJJbnRl
cnZhbCk7XG5cCisgLS0+XG5cCisgXG5cCisgPHRpdGxlPlN1blNwaWRlciAzZC1yYXl0cmFjZTwv
dGl0bGU+XG5cCistPGxpbmsgcmVsPVwic3R5bGVzaGVldFwiIGhyZWY9XCIuLi9zdW5zcGlkZXIu
Y3NzXCI+XG5cCisgPC9oZWFkPlxuXAorIFxuXAorIDxib2R5PlxuXAorQEAgLTEwODMsNyArMTA4
MCw2IEBAIHJlY29yZChfc3VuU3BpZGVySW50ZXJ2YWwpO1xuXAorIC0tPlxuXAorIFxuXAorIDx0
aXRsZT5TdW5TcGlkZXIgYWNjZXNzLWJpbmFyeS10cmVlczwvdGl0bGU+XG5cCistPGxpbmsgcmVs
PVwic3R5bGVzaGVldFwiIGhyZWY9XCIuLi9zdW5zcGlkZXIuY3NzXCI+XG5cCisgPC9oZWFkPlxu
XAorIFxuXAorIDxib2R5PlxuXAorQEAgLTExOTksNyArMTE5NSw2IEBAIHJlY29yZChfc3VuU3Bp
ZGVySW50ZXJ2YWwpO1xuXAorIC0tPlxuXAorIFxuXAorIDx0aXRsZT5TdW5TcGlkZXIgYWNjZXNz
LWZhbm5rdWNoPC90aXRsZT5cblwKKy08bGluayByZWw9XCJzdHlsZXNoZWV0XCIgaHJlZj1cIi4u
L3N1bnNwaWRlci5jc3NcIj5cblwKKyA8L2hlYWQ+XG5cCisgXG5cCisgPGJvZHk+XG5cCitAQCAt
MTMzMiw3ICsxMzI3LDYgQEAgcmVjb3JkKF9zdW5TcGlkZXJJbnRlcnZhbCk7XG5cCisgLS0+XG5c
CisgXG5cCisgPHRpdGxlPlN1blNwaWRlciBhY2Nlc3MtbmJvZHk8L3RpdGxlPlxuXAorLTxsaW5r
IHJlbD1cInN0eWxlc2hlZXRcIiBocmVmPVwiLi4vc3Vuc3BpZGVyLmNzc1wiPlxuXAorIDwvaGVh
ZD5cblwKKyBcblwKKyA8Ym9keT5cblwKK0BAIC0xNTY5LDcgKzE1NjMsNiBAQCByZWNvcmQoX3N1
blNwaWRlckludGVydmFsKTtcblwKKyAtLT5cblwKKyBcblwKKyA8dGl0bGU+U3VuU3BpZGVyIGFj
Y2Vzcy1uc2lldmU8L3RpdGxlPlxuXAorLTxsaW5rIHJlbD1cInN0eWxlc2hlZXRcIiBocmVmPVwi
Li4vc3Vuc3BpZGVyLmNzc1wiPlxuXAorIDwvaGVhZD5cblwKKyBcblwKKyA8Ym9keT5cblwKK0BA
IC0xNjc4LDcgKzE2NzEsNiBAQCByZWNvcmQoX3N1blNwaWRlckludGVydmFsKTtcblwKKyAtLT5c
blwKKyBcblwKKyA8dGl0bGU+U3VuU3BpZGVyIGJpdG9wcy0zYml0LWJpdHMtaW4tYnl0ZTwvdGl0
bGU+XG5cCistPGxpbmsgcmVsPVwic3R5bGVzaGVldFwiIGhyZWY9XCIuLi9zdW5zcGlkZXIuY3Nz
XCI+XG5cCisgPC9oZWFkPlxuXAorIFxuXAorIDxib2R5PlxuXAorQEAgLTE3ODEsNyArMTc3Myw2
IEBAIHJlY29yZChfc3VuU3BpZGVySW50ZXJ2YWwpO1xuXAorIC0tPlxuXAorIFxuXAorIDx0aXRs
ZT5TdW5TcGlkZXIgYml0b3BzLWJpdHMtaW4tYnl0ZTwvdGl0bGU+XG5cCistPGxpbmsgcmVsPVwi
c3R5bGVzaGVldFwiIGhyZWY9XCIuLi9zdW5zcGlkZXIuY3NzXCI+XG5cCisgPC9oZWFkPlxuXAor
IFxuXAorIDxib2R5PlxuXAorQEAgLTE4NzQsNyArMTg2NSw2IEBAIHJlY29yZChfc3VuU3BpZGVy
SW50ZXJ2YWwpO1xuXAorIC0tPlxuXAorIFxuXAorIDx0aXRsZT5TdW5TcGlkZXIgYml0b3BzLWJp
dHdpc2UtYW5kPC90aXRsZT5cblwKKy08bGluayByZWw9XCJzdHlsZXNoZWV0XCIgaHJlZj1cIi4u
L3N1bnNwaWRlci5jc3NcIj5cblwKKyA8L2hlYWQ+XG5cCisgXG5cCisgPGJvZHk+XG5cCitAQCAt
MTk3Miw3ICsxOTYyLDYgQEAgcmVjb3JkKF9zdW5TcGlkZXJJbnRlcnZhbCk7XG5cCisgLS0+XG5c
CisgXG5cCisgPHRpdGxlPlN1blNwaWRlciBiaXRvcHMtbnNpZXZlLWJpdHM8L3RpdGxlPlxuXAor
LTxsaW5rIHJlbD1cInN0eWxlc2hlZXRcIiBocmVmPVwiLi4vc3Vuc3BpZGVyLmNzc1wiPlxuXAor
IDwvaGVhZD5cblwKKyBcblwKKyA8Ym9keT5cblwKK0BAIC0yMDc3LDcgKzIwNjYsNiBAQCByZWNv
cmQoX3N1blNwaWRlckludGVydmFsKTtcblwKKyAtLT5cblwKKyBcblwKKyA8dGl0bGU+U3VuU3Bp
ZGVyIGNvbnRyb2xmbG93LXJlY3Vyc2l2ZTwvdGl0bGU+XG5cCistPGxpbmsgcmVsPVwic3R5bGVz
aGVldFwiIGhyZWY9XCIuLi9zdW5zcGlkZXIuY3NzXCI+XG5cCisgPC9oZWFkPlxuXAorIFxuXAor
IDxib2R5PlxuXAorQEAgLTIxNzIsNyArMjE2MCw2IEBAIHJlY29yZChfc3VuU3BpZGVySW50ZXJ2
YWwpO1xuXAorIC0tPlxuXAorIFxuXAorIDx0aXRsZT5TdW5TcGlkZXIgY3J5cHRvLWFlczwvdGl0
bGU+XG5cCistPGxpbmsgcmVsPVwic3R5bGVzaGVldFwiIGhyZWY9XCIuLi9zdW5zcGlkZXIuY3Nz
XCI+XG5cCisgPC9oZWFkPlxuXAorIFxuXAorIDxib2R5PlxuXAorQEAgLTI2NjEsNyArMjY0OCw2
IEBAIHJlY29yZChfc3VuU3BpZGVySW50ZXJ2YWwpO1xuXAorIC0tPlxuXAorIFxuXAorIDx0aXRs
ZT5TdW5TcGlkZXIgY3J5cHRvLW1kNTwvdGl0bGU+XG5cCistPGxpbmsgcmVsPVwic3R5bGVzaGVl
dFwiIGhyZWY9XCIuLi9zdW5zcGlkZXIuY3NzXCI+XG5cCisgPC9oZWFkPlxuXAorIFxuXAorIDxi
b2R5PlxuXAorQEAgLTMwMTYsNyArMzAwMiw2IEBAIHJlY29yZChfc3VuU3BpZGVySW50ZXJ2YWwp
O1xuXAorIC0tPlxuXAorIFxuXAorIDx0aXRsZT5TdW5TcGlkZXIgY3J5cHRvLXNoYTE8L3RpdGxl
PlxuXAorLTxsaW5rIHJlbD1cInN0eWxlc2hlZXRcIiBocmVmPVwiLi4vc3Vuc3BpZGVyLmNzc1wi
PlxuXAorIDwvaGVhZD5cblwKKyBcblwKKyA8Ym9keT5cblwKK0BAIC0zMzA3LDcgKzMyOTIsNiBA
QCByZWNvcmQoX3N1blNwaWRlckludGVydmFsKTtcblwKKyAtLT5cblwKKyBcblwKKyA8dGl0bGU+
U3VuU3BpZGVyIGRhdGUtZm9ybWF0LXRvZnRlPC90aXRsZT5cblwKKy08bGluayByZWw9XCJzdHls
ZXNoZWV0XCIgaHJlZj1cIi4uL3N1bnNwaWRlci5jc3NcIj5cblwKKyA8L2hlYWQ+XG5cCisgXG5c
CisgPGJvZHk+XG5cCitAQCAtMzY3MSw3ICszNjU1LDYgQEAgcmVjb3JkKF9zdW5TcGlkZXJJbnRl
cnZhbCk7XG5cCisgLS0+XG5cCisgXG5cCisgPHRpdGxlPlN1blNwaWRlciBkYXRlLWZvcm1hdC14
cGFyYjwvdGl0bGU+XG5cCistPGxpbmsgcmVsPVwic3R5bGVzaGVldFwiIGhyZWY9XCIuLi9zdW5z
cGlkZXIuY3NzXCI+XG5cCisgPC9oZWFkPlxuXAorIFxuXAorIDxib2R5PlxuXAorQEAgLTQxNTQs
NyArNDEzNyw2IEBAIHJlY29yZChfc3VuU3BpZGVySW50ZXJ2YWwpO1xuXAorIC0tPlxuXAorIFxu
XAorIDx0aXRsZT5TdW5TcGlkZXIgbWF0aC1jb3JkaWM8L3RpdGxlPlxuXAorLTxsaW5rIHJlbD1c
InN0eWxlc2hlZXRcIiBocmVmPVwiLi4vc3Vuc3BpZGVyLmNzc1wiPlxuXAorIDwvaGVhZD5cblwK
KyBcblwKKyA8Ym9keT5cblwKK0BAIC00MzIzLDcgKzQzMDUsNiBAQCByZWNvcmQoX3N1blNwaWRl
ckludGVydmFsKTtcblwKKyAtLT5cblwKKyBcblwKKyA8dGl0bGU+U3VuU3BpZGVyIG1hdGgtcGFy
dGlhbC1zdW1zPC90aXRsZT5cblwKKy08bGluayByZWw9XCJzdHlsZXNoZWV0XCIgaHJlZj1cIi4u
L3N1bnNwaWRlci5jc3NcIj5cblwKKyA8L2hlYWQ+XG5cCisgXG5cCisgPGJvZHk+XG5cCitAQCAt
NDQzMSw3ICs0NDEyLDYgQEAgcmVjb3JkKF9zdW5TcGlkZXJJbnRlcnZhbCk7XG5cCisgLS0+XG5c
CisgXG5cCisgPHRpdGxlPlN1blNwaWRlciBtYXRoLXNwZWN0cmFsLW5vcm08L3RpdGxlPlxuXAor
LTxsaW5rIHJlbD1cInN0eWxlc2hlZXRcIiBocmVmPVwiLi4vc3Vuc3BpZGVyLmNzc1wiPlxuXAor
IDwvaGVhZD5cblwKKyBcblwKKyA8Ym9keT5cblwKK0BAIC00NTUzLDcgKzQ1MzMsNiBAQCByZWNv
cmQoX3N1blNwaWRlckludGVydmFsKTtcblwKKyAtLT5cblwKKyBcblwKKyA8dGl0bGU+U3VuU3Bp
ZGVyIHJlZ2V4cC1kbmE8L3RpdGxlPlxuXAorLTxsaW5rIHJlbD1cInN0eWxlc2hlZXRcIiBocmVm
PVwiLi4vc3Vuc3BpZGVyLmNzc1wiPlxuXAorIDwvaGVhZD5cblwKKyBcblwKKyA8Ym9keT5cblwK
K0BAIC02MzM3LDcgKzYzMTYsNiBAQCByZWNvcmQoX3N1blNwaWRlckludGVydmFsKTtcblwKKyAt
LT5cblwKKyBcblwKKyA8dGl0bGU+U3VuU3BpZGVyIHN0cmluZy1iYXNlNjQ8L3RpdGxlPlxuXAor
LTxsaW5rIHJlbD1cInN0eWxlc2hlZXRcIiBocmVmPVwiLi4vc3Vuc3BpZGVyLmNzc1wiPlxuXAor
IDwvaGVhZD5cblwKKyBcblwKKyA8Ym9keT5cblwKK0BAIC02NTM3LDcgKzY1MTUsNiBAQCByZWNv
cmQoX3N1blNwaWRlckludGVydmFsKTtcblwKKyAtLT5cblwKKyBcblwKKyA8dGl0bGU+U3VuU3Bp
ZGVyIHN0cmluZy1mYXN0YTwvdGl0bGU+XG5cCistPGxpbmsgcmVsPVwic3R5bGVzaGVldFwiIGhy
ZWY9XCIuLi9zdW5zcGlkZXIuY3NzXCI+XG5cCisgPC9oZWFkPlxuXAorIFxuXAorIDxib2R5Plxu
XAorQEAgLTY2OTAsNyArNjY2Nyw2IEBAIHJlY29yZChfc3VuU3BpZGVySW50ZXJ2YWwpO1xuXAor
IC0tPlxuXAorIFxuXAorIDx0aXRsZT5TdW5TcGlkZXIgc3RyaW5nLXRhZ2Nsb3VkPC90aXRsZT5c
blwKKy08bGluayByZWw9XCJzdHlsZXNoZWV0XCIgaHJlZj1cIi4uL3N1bnNwaWRlci5jc3NcIj5c
blwKKyA8L2hlYWQ+XG5cCisgXG5cCisgPGJvZHk+XG5cCitAQCAtNzAyNCw3ICs3MDAwLDYgQEAg
cmVjb3JkKF9zdW5TcGlkZXJJbnRlcnZhbCk7XG5cCisgLS0+XG5cCisgXG5cCisgPHRpdGxlPlN1
blNwaWRlciBzdHJpbmctdW5wYWNrLWNvZGU8L3RpdGxlPlxuXAorLTxsaW5rIHJlbD1cInN0eWxl
c2hlZXRcIiBocmVmPVwiLi4vc3Vuc3BpZGVyLmNzc1wiPlxuXAorIDwvaGVhZD5cblwKKyBcblwK
KyA8Ym9keT5cblwKK0BAIC03MTY4LDcgKzcxNDMsNiBAQCByZWNvcmQoX3N1blNwaWRlckludGVy
dmFsKTtcblwKKyAtLT5cblwKKyBcblwKKyA8dGl0bGU+U3VuU3BpZGVyIHN0cmluZy12YWxpZGF0
ZS1pbnB1dDwvdGl0bGU+XG5cCistPGxpbmsgcmVsPVwic3R5bGVzaGVldFwiIGhyZWY9XCIuLi9z
dW5zcGlkZXIuY3NzXCI+XG5cCisgPC9oZWFkPlxuXAorIFxuXAorIDxib2R5PlxuXApkaWZmIC0t
Z2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS93ZWJkcml2ZXJfYmVuY2htYXJrX3J1bm5lci9k
YXRhL3BsYW5zL1NraXBwZWQgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3dlYmRyaXZlcl9iZW5j
aG1hcmtfcnVubmVyL2RhdGEvcGxhbnMvU2tpcHBlZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43M2Y2NDNmNjUyYjJl
YTI1ZGJkYTRhNTljYzk3ZjUwOWYxOGU0YzdjCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS93ZWJkcml2ZXJfYmVuY2htYXJrX3J1bm5lci9kYXRhL3BsYW5zL1NraXBw
ZWQKQEAgLTAsMCArMSwyIEBACisjIFRoaXMgZmlsZSBjb250YWlucyB0aGUgcGxhbnMgdGhhdCBz
aG91bGQgbm90IGJlIHJ1biBhdXRvbWF0aWNhbGx5IHdpdGggdGhlIC0tYWxscGxhbnMgY29tbWFu
ZCBsaW5lIHN3aXRjaC4KK2NvbnRlbnQtYW5pbWF0aW9uCmRpZmYgLS1naXQgYS9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L3dlYmRyaXZlcl9iZW5jaG1hcmtfcnVubmVyL2RhdGEvcGxhbnMvYXJlczYt
d2QucGxhbiBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvd2ViZHJpdmVyX2JlbmNobWFya19ydW5u
ZXIvZGF0YS9wbGFucy9hcmVzNi13ZC5wbGFuCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjczZmMzNzUxOTM3ZmY5M2Fm
MDJjNzdjMjAxODhjYzAzMmQxYzMzY2QKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L3dlYmRyaXZlcl9iZW5jaG1hcmtfcnVubmVyL2RhdGEvcGxhbnMvYXJlczYtd2Qu
cGxhbgpAQCAtMCwwICsxLDggQEAKK3sKKyAgICAidGltZW91dCI6IDYwMCwKKyAgICAiY291bnQi
OiAzLAorICAgICJzdm5fc291cmNlIjogImh0dHBzOi8vc3ZuLndlYmtpdC5vcmcvcmVwb3NpdG9y
eS93ZWJraXQvdHJ1bmsvUGVyZm9ybWFuY2VUZXN0cy9BUkVTLTYvQHIyMTY1MzgiLAorICAgICJi
ZW5jaG1hcmtfcGF0Y2giOiAiZGF0YS9wYXRjaGVzL0FSRVMtNi13ZC5wYXRjaCIsCisgICAgImVu
dHJ5X3BvaW50IjogImluZGV4Lmh0bWwiLAorICAgICJvdXRwdXRfZmlsZSI6ICJhcmVzNi5yZXN1
bHQiCit9CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3dlYmRyaXZlcl9iZW5j
aG1hcmtfcnVubmVyL2RhdGEvcGxhbnMvY29udGVudC1hbmltYXRpb24td2QucGxhbiBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvd2ViZHJpdmVyX2JlbmNobWFya19ydW5uZXIvZGF0YS9wbGFucy9j
b250ZW50LWFuaW1hdGlvbi13ZC5wbGFuCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFmZTUxYTQxMGVjZTNlNjQ0ODVh
MzgwY2QxMmFkMGFjMzJlM2Q0MmMKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L3dlYmRyaXZlcl9iZW5jaG1hcmtfcnVubmVyL2RhdGEvcGxhbnMvY29udGVudC1hbmlt
YXRpb24td2QucGxhbgpAQCAtMCwwICsxLDE2IEBACit7CisgICAgInRpbWVvdXQiOiAxMjAsCisg
ICAgImNvdW50IjogNSwKKyAgICAic3ZuX3NvdXJjZSI6ICJodHRwczovL3N2bi53ZWJraXQub3Jn
L3JlcG9zaXRvcnkvd2Via2l0L3RydW5rL1BlcmZvcm1hbmNlVGVzdHMvQW5pbWF0aW9uL0ByMjA1
NjgwIiwKKyAgICAiYmVuY2htYXJrX3BhdGNoIjogImRhdGEvcGF0Y2hlcy9Db250ZW50QW5pbWF0
aW9uLXdkLnBhdGNoIiwKKyAgICAidGVzdF9maWxlcyI6IFsKKyAgICAgICAgImNzcy1hbmltYXRp
b24uaHRtbCIsCisgICAgICAgICJjc3MtYWNjZWxlcmF0ZWQtYW5pbWF0aW9uLmh0bWwiLAorICAg
ICAgICAic3ZnLWFuaW1hdGlvbi5odG1sIiwKKyAgICAgICAgInJhZi1hbmltYXRpb24uaHRtbCIK
KyAgICBdLAorICAgICJvdXRwdXRfZmlsZSI6ICJjc3MtYW5pbWF0aW9uLnJlc3VsdCIsCisgICAg
Im9wdGlvbnMiOiB7CisgICAgICAgICJhbmltYXRpb25fY29tbWFuZCI6ICJDb250ZW50QW5pbWF0
aW9uIgorICAgIH0KK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvd2ViZHJp
dmVyX2JlbmNobWFya19ydW5uZXIvZGF0YS9wbGFucy9kcm9tYWVvLWNzc3F1ZXJ5LXdkLnBsYW4g
Yi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3dlYmRyaXZlcl9iZW5jaG1hcmtfcnVubmVyL2RhdGEv
cGxhbnMvZHJvbWFlby1jc3NxdWVyeS13ZC5wbGFuCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg4MTk4YTI3MTA2ZDZi
ZTgzZDAxN2Q4NzE1MDliN2E4YTRjZDdmMGYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L3dlYmRyaXZlcl9iZW5jaG1hcmtfcnVubmVyL2RhdGEvcGxhbnMvZHJvbWFl
by1jc3NxdWVyeS13ZC5wbGFuCkBAIC0wLDAgKzEsOSBAQAoreworICAgICJ0aW1lb3V0IjogMTIw
MCwKKyAgICAiY291bnQiOiAxLAorICAgICJyZW1vdGVfYXJjaGl2ZSI6ICJodHRwczovL2dpdGh1
Yi5jb20vamVyZXNpZy9kcm9tYWVvL2FyY2hpdmUvZWQ3ZTZhOGYyNWVhNzJmNDVjMTkxZjM0YTY4
NzIyZjgwZGMzYzUxMy56aXAiLAorICAgICJiZW5jaG1hcmtfcGF0Y2giOiAiZGF0YS9wYXRjaGVz
L0Ryb21hZW8td2QucGF0Y2giLAorICAgICJjcmVhdGVfc2NyaXB0IjogWyJtYWtlIiwgIndlYiJd
LAorICAgICJlbnRyeV9wb2ludCI6ICJ3ZWIvaW5kZXguaHRtbD9jc3NxdWVyeSIsCisgICAgIm91
dHB1dF9maWxlIjogImRyb21hZW8ucmVzdWx0IgorfQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS93ZWJkcml2ZXJfYmVuY2htYXJrX3J1bm5lci9kYXRhL3BsYW5zL2Ryb21hZW8t
ZG9tLXdkLnBsYW4gYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3dlYmRyaXZlcl9iZW5jaG1hcmtf
cnVubmVyL2RhdGEvcGxhbnMvZHJvbWFlby1kb20td2QucGxhbgpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MmRkYjU5
MDM2ZTI4MWFlMDgxZTM4OTg1NDdiOWZkYWUyMmFkMjI4Ci0tLSAvZGV2L251bGwKKysrIGIvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS93ZWJkcml2ZXJfYmVuY2htYXJrX3J1bm5lci9kYXRhL3BsYW5z
L2Ryb21hZW8tZG9tLXdkLnBsYW4KQEAgLTAsMCArMSw5IEBACit7CisgICAgInRpbWVvdXQiOiAx
MjAwLAorICAgICJjb3VudCI6IDEsCisgICAgInJlbW90ZV9hcmNoaXZlIjogImh0dHBzOi8vZ2l0
aHViLmNvbS9qZXJlc2lnL2Ryb21hZW8vYXJjaGl2ZS9lZDdlNmE4ZjI1ZWE3MmY0NWMxOTFmMzRh
Njg3MjJmODBkYzNjNTEzLnppcCIsCisgICAgImJlbmNobWFya19wYXRjaCI6ICJkYXRhL3BhdGNo
ZXMvRHJvbWFlby13ZC5wYXRjaCIsCisgICAgImNyZWF0ZV9zY3JpcHQiOiBbIm1ha2UiLCAid2Vi
Il0sCisgICAgImVudHJ5X3BvaW50IjogIndlYi9pbmRleC5odG1sP2RvbSIsCisgICAgIm91dHB1
dF9maWxlIjogImRyb21hZW8ucmVzdWx0IgorfQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS93ZWJkcml2ZXJfYmVuY2htYXJrX3J1bm5lci9kYXRhL3BsYW5zL2Ryb21hZW8tanNs
aWItd2QucGxhbiBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvd2ViZHJpdmVyX2JlbmNobWFya19y
dW5uZXIvZGF0YS9wbGFucy9kcm9tYWVvLWpzbGliLXdkLnBsYW4KbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGNkNmQ2
ZGJmOWQ4MTk0NzVjODIzN2VlYmU4YzUwODVhYTk5MjQwMAotLS0gL2Rldi9udWxsCisrKyBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvd2ViZHJpdmVyX2JlbmNobWFya19ydW5uZXIvZGF0YS9wbGFu
cy9kcm9tYWVvLWpzbGliLXdkLnBsYW4KQEAgLTAsMCArMSw5IEBACit7CisgICAgInRpbWVvdXQi
OiAxMjAwLAorICAgICJjb3VudCI6IDEsCisgICAgInJlbW90ZV9hcmNoaXZlIjogImh0dHBzOi8v
Z2l0aHViLmNvbS9qZXJlc2lnL2Ryb21hZW8vYXJjaGl2ZS9lZDdlNmE4ZjI1ZWE3MmY0NWMxOTFm
MzRhNjg3MjJmODBkYzNjNTEzLnppcCIsCisgICAgImJlbmNobWFya19wYXRjaCI6ICJkYXRhL3Bh
dGNoZXMvRHJvbWFlby13ZC5wYXRjaCIsCisgICAgImNyZWF0ZV9zY3JpcHQiOiBbIm1ha2UiLCAi
d2ViIl0sCisgICAgImVudHJ5X3BvaW50IjogIndlYi9pbmRleC5odG1sP2pzbGliIiwKKyAgICAi
b3V0cHV0X2ZpbGUiOiAiZHJvbWFlby5yZXN1bHQiCit9CmRpZmYgLS1naXQgYS9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L3dlYmRyaXZlcl9iZW5jaG1hcmtfcnVubmVyL2RhdGEvcGxhbnMvamV0c3Ry
ZWFtLXdkLnBsYW4gYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3dlYmRyaXZlcl9iZW5jaG1hcmtf
cnVubmVyL2RhdGEvcGxhbnMvamV0c3RyZWFtLXdkLnBsYW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjM0MGUyMjQx
MGI4Mjg4N2ZkYjg0MDczODBiNjAyNzdkZmVmNzk0ZgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvd2ViZHJpdmVyX2JlbmNobWFya19ydW5uZXIvZGF0YS9wbGFucy9q
ZXRzdHJlYW0td2QucGxhbgpAQCAtMCwwICsxLDkgQEAKK3sKKyAgICAidGltZW91dCI6IDEyMDAs
CisgICAgImNvdW50IjogNSwKKyAgICAic3ZuX3NvdXJjZSI6ICJodHRwczovL3N2bi53ZWJraXQu
b3JnL3JlcG9zaXRvcnkvd2Via2l0L3RydW5rL1BlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtL0By
MTkwODk3IiwKKyAgICAiYmVuY2htYXJrX3BhdGNoIjogImRhdGEvcGF0Y2hlcy9KZXRTdHJlYW0t
d2QucGF0Y2giLAorICAgICJjcmVhdGVfc2NyaXB0IjogWyJydWJ5IiwgImNyZWF0ZS5yYiJdLAor
ICAgICJlbnRyeV9wb2ludCI6ICJKZXRTdHJlYW0tMS4xL2luZGV4Lmh0bWwiLAorICAgICJvdXRw
dXRfZmlsZSI6ICJqZXRzdHJlYW0ucmVzdWx0IgorfQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS93ZWJkcml2ZXJfYmVuY2htYXJrX3J1bm5lci9kYXRhL3BsYW5zL2pzYmVuY2gt
d2QucGxhbiBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvd2ViZHJpdmVyX2JlbmNobWFya19ydW5u
ZXIvZGF0YS9wbGFucy9qc2JlbmNoLXdkLnBsYW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzdkNzBlMDliY2E1ZDdk
NTQyZmE0OTA0NjViNDMwMjg3Mjc4ZDU1ZAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvd2ViZHJpdmVyX2JlbmNobWFya19ydW5uZXIvZGF0YS9wbGFucy9qc2JlbmNo
LXdkLnBsYW4KQEAgLTAsMCArMSw4IEBACit7CisgICAgInRpbWVvdXQiOiA2MDAsCisgICAgImNv
dW50IjogMSwKKyAgICAicmVtb3RlX2FyY2hpdmUiOiAiaHR0cDovL3BsZy51d2F0ZXJsb28uY2Ev
fmR5bmpzL2pzYmVuY2gvc3VpdGUvanNiZW5jaC0yMDEzLjEudGFyLmd6IiwKKyAgICAiYmVuY2ht
YXJrX3BhdGNoIjogImRhdGEvcGF0Y2hlcy9KU0JlbmNoLXdkLnBhdGNoIiwKKyAgICAiZW50cnlf
cG9pbnQiOiAiaW5kZXguaHRtbCIsCisgICAgIm91dHB1dF9maWxlIjogImpzYmVuY2gucmVzdWx0
IgorfQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS93ZWJkcml2ZXJfYmVuY2ht
YXJrX3J1bm5lci9kYXRhL3BsYW5zL2tyYWtlbi13ZC5wbGFuIGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS93ZWJkcml2ZXJfYmVuY2htYXJrX3J1bm5lci9kYXRhL3BsYW5zL2tyYWtlbi13ZC5wbGFu
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjA1ODc5YWNiOTgzNjE5MzdhYTQ3M2EzMDZmY2JkYmRlZTJkZjM4YjgKLS0t
IC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3dlYmRyaXZlcl9iZW5jaG1h
cmtfcnVubmVyL2RhdGEvcGxhbnMva3Jha2VuLXdkLnBsYW4KQEAgLTAsMCArMSw5IEBACit7Cisg
ICAgInRpbWVvdXQiOiAzMDAsCisgICAgImNvdW50IjogNSwKKyAgICAicmVtb3RlX2FyY2hpdmUi
OiAiaHR0cDovL2hnLm1vemlsbGEub3JnL3Byb2plY3RzL2tyYWtlbi9hcmNoaXZlL3RpcC56aXAi
LAorICAgICJiZW5jaG1hcmtfcGF0Y2giOiAiZGF0YS9wYXRjaGVzL0tyYWtlbi13ZC5wYXRjaCIs
CisgICAgImNyZWF0ZV9zY3JpcHQiOiBbInB5dGhvbiIsICJtYWtlLWhvc3RlZC5weSJdLAorICAg
ICJlbnRyeV9wb2ludCI6ICJob3N0ZWQva3Jha2VuLTEuMS9kcml2ZXIuaHRtbCIsCisgICAgIm91
dHB1dF9maWxlIjogImtyYWtlbi5yZXN1bHQiCit9CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L3dlYmRyaXZlcl9iZW5jaG1hcmtfcnVubmVyL2RhdGEvcGxhbnMvbW90aW9ubWFy
ay13ZC5wbGFuIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS93ZWJkcml2ZXJfYmVuY2htYXJrX3J1
bm5lci9kYXRhL3BsYW5zL21vdGlvbm1hcmstd2QucGxhbgpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMzQzMzRhYjYw
MTFiYjcyMTJlYjFjYjBmZjk1NGFiM2Y3Y2NjYzYyCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS93ZWJkcml2ZXJfYmVuY2htYXJrX3J1bm5lci9kYXRhL3BsYW5zL21v
dGlvbm1hcmstd2QucGxhbgpAQCAtMCwwICsxLDExIEBACit7CisgICAgInRpbWVvdXQiOiAxODAw
LAorICAgICJjb3VudCI6IDEsCisgICAgInN2bl9zb3VyY2UiOiAiaHR0cHM6Ly9zdm4ud2Via2l0
Lm9yZy9yZXBvc2l0b3J5L3dlYmtpdC90cnVuay9QZXJmb3JtYW5jZVRlc3RzL01vdGlvbk1hcmsv
QHIyMTA0NTkiLAorICAgICJiZW5jaG1hcmtfcGF0Y2giOiAiZGF0YS9wYXRjaGVzL01vdGlvbk1h
cmstd2QucGF0Y2giLAorICAgICJlbnRyeV9wb2ludCI6ICJpbmRleC5odG1sIiwKKyAgICAiY29u
ZmlnIjogeworICAgICAgICAib3JpZW50YXRpb24iOiAibGFuZHNjYXBlIgorICAgIH0sCisgICAg
Im91dHB1dF9maWxlIjogIm1vdGlvbm1hcmsucmVzdWx0IgorfQpkaWZmIC0tZ2l0IGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS93ZWJkcml2ZXJfYmVuY2htYXJrX3J1bm5lci9kYXRhL3BsYW5zL29j
dGFuZS13ZC5wbGFuIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS93ZWJkcml2ZXJfYmVuY2htYXJr
X3J1bm5lci9kYXRhL3BsYW5zL29jdGFuZS13ZC5wbGFuCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc0MjEzYTgxYzlm
OTE3Yzk0ZGQzNmFjMTY4YWJmYzM0YzhhY2Y2YmQKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L3dlYmRyaXZlcl9iZW5jaG1hcmtfcnVubmVyL2RhdGEvcGxhbnMvb2N0
YW5lLXdkLnBsYW4KQEAgLTAsMCArMSw4IEBACit7CisgICAgInRpbWVvdXQiOiAzMDAsCisgICAg
ImNvdW50IjogNSwKKyAgICAicmVtb3RlX2FyY2hpdmUiOiAiaHR0cHM6Ly9naXRodWIuY29tL2No
cm9taXVtL29jdGFuZS1iZW5jaG1hcmsvYXJjaGl2ZS9mYWIwOWFlZjAxYzJhNTU2MGMyMmNkYzFj
MWEyNDUxYzBkMGY0Y2RjLnppcCIsCisgICAgImJlbmNobWFya19wYXRjaCI6ICJkYXRhL3BhdGNo
ZXMvT2N0YW5lLXdkLnBhdGNoIiwKKyAgICAiZW50cnlfcG9pbnQiOiAiaW5kZXguaHRtbD9hdXRv
PTEiLAorICAgICJvdXRwdXRfZmlsZSI6ICJvY3RhbmUucmVzdWx0IgorfQpkaWZmIC0tZ2l0IGEv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS93ZWJkcml2ZXJfYmVuY2htYXJrX3J1bm5lci9kYXRhL3Bs
YW5zL3NwZWVkb21ldGVyLXdkLnBsYW4gYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3dlYmRyaXZl
cl9iZW5jaG1hcmtfcnVubmVyL2RhdGEvcGxhbnMvc3BlZWRvbWV0ZXItd2QucGxhbgpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4wOWQ4YjE2YTA2MjlhNzE5YmNiNzA4MTZjNWMxYTYwYjk0NGZlNWFjCi0tLSAvZGV2L251
bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS93ZWJkcml2ZXJfYmVuY2htYXJrX3J1bm5l
ci9kYXRhL3BsYW5zL3NwZWVkb21ldGVyLXdkLnBsYW4KQEAgLTAsMCArMSw4IEBACit7CisgICAg
InRpbWVvdXQiOiAzMDAsCisgICAgImNvdW50IjogNSwKKyAgICAic3ZuX3NvdXJjZSI6ICJodHRw
czovL3N2bi53ZWJraXQub3JnL3JlcG9zaXRvcnkvd2Via2l0L3RydW5rL1BlcmZvcm1hbmNlVGVz
dHMvU3BlZWRvbWV0ZXIvQHIxODM2OTUiLAorICAgICJiZW5jaG1hcmtfcGF0Y2giOiAiZGF0YS9w
YXRjaGVzL1NwZWVkb21ldGVyLXdkLnBhdGNoIiwKKyAgICAiZW50cnlfcG9pbnQiOiAiRnVsbC5o
dG1sIiwKKyAgICAib3V0cHV0X2ZpbGUiOiAic3BlZWRvbWV0ZXIucmVzdWx0IgorfQpkaWZmIC0t
Z2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS93ZWJkcml2ZXJfYmVuY2htYXJrX3J1bm5lci9k
YXRhL3BsYW5zL3N1bnNwaWRlci13ZC5wbGFuIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS93ZWJk
cml2ZXJfYmVuY2htYXJrX3J1bm5lci9kYXRhL3BsYW5zL3N1bnNwaWRlci13ZC5wbGFuCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjUxYmZiZjkyY2JkYzFiNGYwOTJiY2U1ZGU0MzA0MDUwMTI2ZjdhNzYKLS0tIC9kZXYv
bnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3dlYmRyaXZlcl9iZW5jaG1hcmtfcnVu
bmVyL2RhdGEvcGxhbnMvc3Vuc3BpZGVyLXdkLnBsYW4KQEAgLTAsMCArMSw5IEBACit7CisgICAg
InRpbWVvdXQiOiAzMDAsCisgICAgImNvdW50IjogNSwKKyAgICAic3ZuX3NvdXJjZSI6ICJodHRw
czovL3N2bi53ZWJraXQub3JnL3JlcG9zaXRvcnkvd2Via2l0L3RydW5rL1BlcmZvcm1hbmNlVGVz
dHMvU3VuU3BpZGVyL0ByMTgyMTcwIiwKKyAgICAiYmVuY2htYXJrX3BhdGNoIjogImRhdGEvcGF0
Y2hlcy9TdW5TcGlkZXItd2QucGF0Y2giLAorICAgICJjcmVhdGVfc2NyaXB0IjogWyJwZXJsIiwg
Im1ha2UtaG9zdGVkIl0sCisgICAgImVudHJ5X3BvaW50IjogImhvc3RlZC9zdW5zcGlkZXItMS4w
LjEvZHJpdmVyLmh0bWwiLAorICAgICJvdXRwdXRfZmlsZSI6ICJzdW5zcGlkZXIucmVzdWx0Igor
fQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS93ZWJkcml2ZXJfYmVuY2htYXJr
X3J1bm5lci9nZW5lcmljX2ZhY3RvcnkucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3dlYmRy
aXZlcl9iZW5jaG1hcmtfcnVubmVyL2dlbmVyaWNfZmFjdG9yeS5weQpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZGZm
MzkyNzQ3NGQzMjdlYmYyMWE4MDg2NmI1ODNmYTAzODdmMTc3Ci0tLSAvZGV2L251bGwKKysrIGIv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS93ZWJkcml2ZXJfYmVuY2htYXJrX3J1bm5lci9nZW5lcmlj
X2ZhY3RvcnkucHkKQEAgLTAsMCArMSwyMCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKK2lt
cG9ydCBsb2dnaW5nCitpbXBvcnQgb3MKKworCitfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19u
YW1lX18pCisKKworY2xhc3MgR2VuZXJpY0ZhY3Rvcnkob2JqZWN0KToKKworICAgIHByb2R1Y3Rz
ID0gTm9uZQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGNyZWF0ZShjbHMsIGRlc2NyaXB0
aW9uKToKKyAgICAgICAgcmV0dXJuIGNscy5wcm9kdWN0c1tkZXNjcmlwdGlvbl0oKQorCisgICAg
QGNsYXNzbWV0aG9kCisgICAgZGVmIGFkZChjbHMsIGRlc2NyaXB0aW9uLCBwcm9kdWN0KToKKyAg
ICAgICAgY2xzLnByb2R1Y3RzW2Rlc2NyaXB0aW9uXSA9IHByb2R1Y3QKZGlmZiAtLWdpdCBhL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvd2ViZHJpdmVyX2JlbmNobWFya19ydW5uZXIvcnVuX2JlbmNo
bWFyay5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvd2ViZHJpdmVyX2JlbmNobWFya19ydW5u
ZXIvcnVuX2JlbmNobWFyay5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZjZiODA4NmQ2MmRlNWFlMmVjYmE0ZTI2
NjUwYmY1MTQ1NWU3ZWUzCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS93ZWJkcml2ZXJfYmVuY2htYXJrX3J1bm5lci9ydW5fYmVuY2htYXJrLnB5CkBAIC0wLDAgKzEs
MTA0IEBACisjIS91c3IvYmluL2VudiBweXRob24KKworaW1wb3J0IGFyZ3BhcnNlCitpbXBvcnQg
anNvbgoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBwbGF0Zm9ybQoraW1wb3J0IG9zCitpbXBvcnQg
c3lzCisKK2Zyb20gYmVuY2htYXJrX3J1bm5lciBpbXBvcnQgQmVuY2htYXJrUnVubmVyCitmcm9t
IGJyb3dzZXJfZHJpdmVyLmJyb3dzZXJfZHJpdmVyX2ZhY3RvcnkgaW1wb3J0IEJyb3dzZXJEcml2
ZXJGYWN0b3J5CisKKworX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQorCisKK2Rl
ZiBkZWZhdWx0X3BsYXRmb3JtKCk6CisgICAgaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ2xp
bnV4Jyk6CisgICAgICAgIHJldHVybiAnbGludXgnCisgICAgcmV0dXJuICdvc3gnCisKKworZGVm
IGRlZmF1bHRfYnJvd3NlcigpOgorICAgIGlmIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCdsaW51
eCcpOgorICAgICAgICByZXR1cm4gJ21pbmlicm93c2VyLWd0aycKKyAgICByZXR1cm4gJ3NhZmFy
aScKKworCitkZWYgcGFyc2VfYXJncygpOgorICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50
UGFyc2VyKGRlc2NyaXB0aW9uPSdBdXRvbWF0ZSB0aGUgYnJvd3NlciBiYXNlZCBwZXJmb3JtYW5j
ZSBiZW5jaG1hcmtzJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLW91dHB1dC1maWxlJywg
ZGVzdD0nb3V0cHV0JywgZGVmYXVsdD1Ob25lKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0t
YnVpbGQtZGlyZWN0b3J5JywgZGVzdD0nYnVpbGREaXInLCBoZWxwPSdQYXRoIHRvIHRoZSBicm93
c2VyIGV4ZWN1dGFibGUuIGUuZy4gV2ViS2l0QnVpbGQvUmVsZWFzZS8nKQorICAgIHBhcnNlci5h
ZGRfYXJndW1lbnQoJy0tcGxhdGZvcm0nLCBkZXN0PSdwbGF0Zm9ybScsIGRlZmF1bHQ9ZGVmYXVs
dF9wbGF0Zm9ybSgpLCBjaG9pY2VzPUJyb3dzZXJEcml2ZXJGYWN0b3J5LmF2YWlsYWJsZV9wbGF0
Zm9ybXMoKSkKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWJyb3dzZXInLCBkZXN0PSdicm93
c2VyJywgZGVmYXVsdD1kZWZhdWx0X2Jyb3dzZXIoKSwgY2hvaWNlcz1Ccm93c2VyRHJpdmVyRmFj
dG9yeS5hdmFpbGFibGVfYnJvd3NlcnMoKSkKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWRl
YnVnJywgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWxv
Y2FsLWNvcHknLCBkZXN0PSdsb2NhbENvcHknLCBoZWxwPSdQYXRoIHRvIGEgbG9jYWwgY29weSBv
ZiB0aGUgYmVuY2htYXJrLiBlLmcuIFBlcmZvcm1hbmNlVGVzdHMvU3VuU3BpZGVyLycpCisgICAg
cGFyc2VyLmFkZF9hcmd1bWVudCgnLS1jb3VudCcsIGRlc3Q9J2NvdW50T3ZlcnJpZGUnLCB0eXBl
PWludCwgaGVscD0nTnVtYmVyIG9mIHRpbWVzIHRvIHJ1biB0aGUgYmVuY2htYXJrLiBlLmcuIDUn
KQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tZGV2aWNlLWlkJywgZGVzdD0nZGV2aWNlX2lk
JywgZGVmYXVsdD1Ob25lKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tbm8tYWRqdXN0LXVu
aXQnLCBkZXN0PSdzY2FsZV91bml0JywgYWN0aW9uPSdzdG9yZV9mYWxzZScpCisgICAgbXV0dWFs
X2dyb3VwID0gcGFyc2VyLmFkZF9tdXR1YWxseV9leGNsdXNpdmVfZ3JvdXAocmVxdWlyZWQ9VHJ1
ZSkKKyAgICBtdXR1YWxfZ3JvdXAuYWRkX2FyZ3VtZW50KCctLXJlYWQtcmVzdWx0cy1qc29uJywg
ZGVzdD0nanNvbl9maWxlJywgaGVscD0nU3BlY2lmeSBmaWxlIHlvdSB3YW50IHRvIGZvcm1hdCcp
CisgICAgbXV0dWFsX2dyb3VwLmFkZF9hcmd1bWVudCgnLS1wbGFuJywgZGVzdD0ncGxhbicsIGhl
bHA9J0JlbmNobWFyayBwbGFuIHRvIHJ1bi4gZS5nLiBzcGVlZG9tZXRlciwgamV0c3RyZWFtJykK
KyAgICBtdXR1YWxfZ3JvdXAuYWRkX2FyZ3VtZW50KCctLWFsbHBsYW5zJywgYWN0aW9uPSdzdG9y
ZV90cnVlJywgaGVscD0nUnVuIGFsbCBhdmFpbGFibGUgYmVuY2htYXJrIHBsYW5zIHNlcXVlbnRp
YWxseScpCisKKyAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQorCisgICAgaWYgYXJncy5k
ZWJ1ZzoKKyAgICAgICAgX2xvZy5zZXRMZXZlbChsb2dnaW5nLkRFQlVHKQorICAgIF9sb2cuZGVi
dWcoJ0luaXRpYWxpemluZyBwcm9ncmFtIHdpdGggZm9sbG93aW5nIHBhcmFtZXRlcnMnKQorICAg
IF9sb2cuZGVidWcoJ1x0b3V0cHV0IGZpbGUgbmFtZVx0OiAlcycgJSBhcmdzLm91dHB1dCkKKyAg
ICBfbG9nLmRlYnVnKCdcdGJ1aWxkIGRpcmVjdG9yeVx0OiAlcycgJSBhcmdzLmJ1aWxkRGlyKQor
ICAgIF9sb2cuZGVidWcoJ1x0cGxhbiBuYW1lXHQ6ICVzJywgYXJncy5wbGFuKQorCisgICAgcmV0
dXJuIGFyZ3MKKworCitkZWYgc3RhcnQoYXJncyk6CisgICAgaWYgYXJncy5qc29uX2ZpbGU6Cisg
ICAgICAgIHJlc3VsdHNfanNvbiA9IGpzb24ubG9hZChvcGVuKGFyZ3MuanNvbl9maWxlLCAncicp
KQorICAgICAgICBpZiAnZGVidWdPdXRwdXQnIGluIHJlc3VsdHNfanNvbjoKKyAgICAgICAgICAg
IGRlbCByZXN1bHRzX2pzb25bJ2RlYnVnT3V0cHV0J10KKyAgICAgICAgQmVuY2htYXJrUnVubmVy
LnNob3dfcmVzdWx0cyhyZXN1bHRzX2pzb24sIGFyZ3Muc2NhbGVfdW5pdCkKKyAgICAgICAgcmV0
dXJuCisgICAgaWYgYXJncy5hbGxwbGFuczoKKyAgICAgICAgZmFpbGVkID0gW10KKyAgICAgICAg
c2tpcHBlZCA9IFtdCisgICAgICAgIHBsYW5kaXIgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJu
YW1lKF9fZmlsZV9fKSwgJ2RhdGEvcGxhbnMnKQorICAgICAgICBwbGFubGlzdCA9IFtvcy5wYXRo
LnNwbGl0ZXh0KGYpWzBdIGZvciBmIGluIG9zLmxpc3RkaXIocGxhbmRpcikgaWYgZi5lbmRzd2l0
aCgnLnBsYW4nKV0KKyAgICAgICAgc2tpcHBlZGZpbGUgPSBvcy5wYXRoLmpvaW4ocGxhbmRpciwg
J1NraXBwZWQnKQorICAgICAgICBpZiBub3QgcGxhbmxpc3Q6CisgICAgICAgICAgICByYWlzZSBF
eGNlcHRpb24oJ0NhbnQgZmluZCBhbnkgLnBsYW4gZmlsZSBpbiBkaXJlY3RvcnkgJXMnICUgcGxh
bmRpcikKKyAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoc2tpcHBlZGZpbGUpOgorICAgICAgICAg
ICAgc2tpcHBlZCA9IFtsaW5lLnN0cmlwKCkgZm9yIGxpbmUgaW4gb3Blbihza2lwcGVkZmlsZSkg
aWYgbm90IGxpbmUuc3RhcnRzd2l0aCgnIycpIGFuZCBsZW4obGluZSkgPiAxXQorICAgICAgICBm
b3IgcGxhbiBpbiBzb3J0ZWQocGxhbmxpc3QpOgorICAgICAgICAgICAgaWYgcGxhbiBpbiBza2lw
cGVkOgorICAgICAgICAgICAgICAgIF9sb2cuaW5mbygnU2tpcHBpbmcgYmVuY2htYXJrIHBsYW46
ICVzIGJlY2F1c2UgaXMgbGlzdGVkIG9uIHRoZSBTa2lwcGVkIGZpbGUnICUgcGxhbikKKyAgICAg
ICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgX2xvZy5pbmZvKCdTdGFydGluZyBiZW5j
aG1hcmsgcGxhbjogJXMnICUgcGxhbikKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAg
ICBydW5uZXIgPSBCZW5jaG1hcmtSdW5uZXIocGxhbiwgYXJncy5sb2NhbENvcHksIGFyZ3MuY291
bnRPdmVycmlkZSwgYXJncy5idWlsZERpciwgYXJncy5vdXRwdXQsIGFyZ3MucGxhdGZvcm0sIGFy
Z3MuYnJvd3NlciwgYXJncy5zY2FsZV91bml0LCBhcmdzLmRldmljZV9pZCkKKyAgICAgICAgICAg
ICAgICBydW5uZXIuZXhlY3V0ZSgpCisgICAgICAgICAgICAgICAgX2xvZy5pbmZvKCdGaW5pc2hl
ZCBiZW5jaG1hcmsgcGxhbjogJXMnICUgcGxhbikKKyAgICAgICAgICAgIGV4Y2VwdCBLZXlib2Fy
ZEludGVycnVwdDoKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgZXhjZXB0Ogor
ICAgICAgICAgICAgICAgIGZhaWxlZC5hcHBlbmQocGxhbikKKyAgICAgICAgICAgICAgICBfbG9n
LmV4Y2VwdGlvbignRXJyb3IgcnVubmluZyBiZW5jaG1hcmsgcGxhbjogJXMnICUgcGxhbikKKyAg
ICAgICAgaWYgZmFpbGVkOgorICAgICAgICAgICAgX2xvZy5lcnJvcignVGhlIGZvbGxvd2luZyBi
ZW5jaG1hcmsgcGxhbnMgaGF2ZSBmYWlsZWQ6ICVzJyAlIGZhaWxlZCkKKyAgICAgICAgcmV0dXJu
IGxlbihmYWlsZWQpCisgICAgcnVubmVyID0gQmVuY2htYXJrUnVubmVyKGFyZ3MucGxhbiwgYXJn
cy5sb2NhbENvcHksIGFyZ3MuY291bnRPdmVycmlkZSwgYXJncy5idWlsZERpciwgYXJncy5vdXRw
dXQsIGFyZ3MucGxhdGZvcm0sIGFyZ3MuYnJvd3NlciwgYXJncy5zY2FsZV91bml0LCBhcmdzLmRl
dmljZV9pZCkKKyAgICBydW5uZXIuZXhlY3V0ZSgpCisKKworZGVmIGZvcm1hdF9sb2dnZXIobG9n
Z2VyKToKKyAgICBsb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5JTkZPKQorICAgIGNoID0gbG9nZ2lu
Zy5TdHJlYW1IYW5kbGVyKCkKKyAgICBmb3JtYXR0ZXIgPSBsb2dnaW5nLkZvcm1hdHRlcignJShh
c2N0aW1lKXMgLSAlKGxldmVsbmFtZSlzIC0gJShtZXNzYWdlKXMnKQorICAgIGNoLnNldEZvcm1h
dHRlcihmb3JtYXR0ZXIpCisgICAgbG9nZ2VyLmFkZEhhbmRsZXIoY2gpCisKKworZGVmIG1haW4o
KToKKyAgICByZXR1cm4gc3RhcnQocGFyc2VfYXJncygpKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS93ZWJkcml2ZXJfYmVuY2htYXJrX3J1bm5lci91dGlscy5weSBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvd2ViZHJpdmVyX2JlbmNobWFya19ydW5uZXIvdXRpbHMucHkKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNGY5MmEwZmVjNmY2YjQxOTJkYmNiMWIyMDJlNTBkNWUwZGEzMDExZAotLS0gL2Rl
di9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvd2ViZHJpdmVyX2JlbmNobWFya19y
dW5uZXIvdXRpbHMucHkKQEAgLTAsMCArMSw4NiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisK
K2ltcG9ydCBpbXAKK2ltcG9ydCBpbnNwZWN0CitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zCitp
bXBvcnQgc2lnbmFsCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgc3lzCisKKworX2xvZyA9IGxvZ2dp
bmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQorCisKKyMgQm9ycm93IGZvbGxvd2luZyBjb2RlIGZyb20g
c3RhY2tvdmVyZmxvdworIyBMaW5rOiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25z
LzExNDYxMzU2L2lzc3ViY2xhc3MtcmV0dXJucy1mbGFzZS1vbi10aGUtc2FtZS1jbGFzcy1pbXBv
cnRlZC1mcm9tLWRpZmZlcmVudC1wYXRocworZGVmIGlzX3N1YmNsYXNzKGNoaWxkLCBwYXJlbnRf
bmFtZSk6CisgICAgcmV0dXJuIGluc3BlY3QuaXNjbGFzcyhjaGlsZCkgYW5kIHBhcmVudF9uYW1l
IGluIFtjbHMuX19uYW1lX18gZm9yIGNscyBpbiBpbnNwZWN0LmdldG1ybyhjaGlsZCldCisKKwor
ZGVmIGxvYWRfc3ViY2xhc3NlcyhkaXJuYW1lLCBiYXNlX2NsYXNzX25hbWUsIGJhc2VfY2xhc3Nf
ZmlsZSwgbG9hZGVyKToKKyAgICBmaWxlbGlzdCA9IFtiYXNlX2NsYXNzX2ZpbGVdICsgW2YgZm9y
IGYgaW4gb3MubGlzdGRpcihkaXJuYW1lKSBpZiBmLmVuZHN3aXRoKCdfJyArIGJhc2VfY2xhc3Nf
ZmlsZSldCisgICAgZmlsZWxpc3QgKz0gW2YgZm9yIGYgaW4gb3MubGlzdGRpcihkaXJuYW1lKSBp
ZiBmLmVuZHN3aXRoKCcucHknKSBhbmQgZiBub3QgaW4gWydfX2luaXRfXy5weSddICsgZmlsZWxp
c3RdCisgICAgZm9yIGZpbGVuYW1lIGluIGZpbGVsaXN0OgorICAgICAgICBtb2R1bGVfbmFtZSA9
IG9zLnBhdGguc3BsaXRleHQoZmlsZW5hbWUpWzBdCisgICAgICAgIG1vZHVsZSA9IGltcC5sb2Fk
X3NvdXJjZShtb2R1bGVfbmFtZSwgb3MucGF0aC5qb2luKGRpcm5hbWUsIGZpbGVuYW1lKSkKKyAg
ICAgICAgZm9yIGl0ZW1fbmFtZSBpbiBkaXIobW9kdWxlKToKKyAgICAgICAgICAgIGl0ZW0gPSBn
ZXRhdHRyKG1vZHVsZSwgaXRlbV9uYW1lKQorICAgICAgICAgICAgaWYgaXNfc3ViY2xhc3MoaXRl
bSwgYmFzZV9jbGFzc19uYW1lKToKKyAgICAgICAgICAgICAgICBsb2FkZXIoaXRlbSkKKworCitk
ZWYgZ2V0X3BhdGhfZnJvbV9wcm9qZWN0X3Jvb3QocmVsYXRpdmVfcGF0aF90b19wcm9qZWN0X3Jv
b3QpOgorICAgICMgQ2hvb3NlIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyBjdXJyZW50IGZpbGUg
YXMgc3RhcnQgcG9pbnQsCisgICAgIyBjb21wdXRlIHJlbGF0aXZlIHBhdGggYmFzZSBvbiB0aGUg
cGFyYW1ldGVyLAorICAgICMgYW5kIHJldHVybiBhbiBhYnNvbHV0ZSBwYXRoCisgICAgcmV0dXJu
IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJz
cGF0aChfX2ZpbGVfXykpLCByZWxhdGl2ZV9wYXRoX3RvX3Byb2plY3Rfcm9vdCkpCisKKworZGVm
IGZvcmNlX3JlbW92ZShwYXRoKToKKyAgICB0cnk6CisgICAgICAgIHNodXRpbC5ybXRyZWUocGF0
aCkKKyAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGVycm9yOgorICAgICAgICAjIERpcmVjdG9yeS9m
aWxlIGRvZXMgbm90IGV4aXN0IG9yIHByaXZpbGVnZSBpc3N1ZSwganVzdCBpZ25vcmUgaXQKKyAg
ICAgICAgX2xvZy5pbmZvKCJFcnJvciByZW1vdmluZyAlczogJXMiICUgKHBhdGgsIGVycm9yKSkK
KyAgICAgICAgcGFzcworCisKK2RlZiB3cml0ZV9kZWZhdWx0cyhkb21haW4sIGtleSwgdmFsdWUp
OgorICAgICMgUmV0dXJucyB3aGV0aGVyIHRoZSBrZXkgaW4gdGhlIGRvbWFpbiBpcyB1cGRhdGVk
CisgICAgZnJvbSBGb3VuZGF0aW9uIGltcG9ydCBOU1VzZXJEZWZhdWx0cworICAgIGRlZmF1bHRz
ID0gTlNVc2VyRGVmYXVsdHMuc3RhbmRhcmRVc2VyRGVmYXVsdHMoKQorICAgIGRlZmF1bHRzX2Zv
cl9kb21haW4gPSBkZWZhdWx0cy5wZXJzaXN0ZW50RG9tYWluRm9yTmFtZV8oZG9tYWluKQorICAg
IGlmIG5vdCBkZWZhdWx0c19mb3JfZG9tYWluOgorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICBv
bGRfdmFsdWUgPSBkZWZhdWx0c19mb3JfZG9tYWluLmdldChrZXkpCisgICAgaWYgb2xkX3ZhbHVl
ID09IHZhbHVlOgorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICBtdXRhYmxlX2RlZmF1bHRzX2Zv
cl9kb21haW4gPSBkZWZhdWx0c19mb3JfZG9tYWluLm11dGFibGVDb3B5KCkKKyAgICBtdXRhYmxl
X2RlZmF1bHRzX2Zvcl9kb21haW5ba2V5XSA9IHZhbHVlCisgICAgZGVmYXVsdHMuc2V0UGVyc2lz
dGVudERvbWFpbl9mb3JOYW1lXyhtdXRhYmxlX2RlZmF1bHRzX2Zvcl9kb21haW4sIGRvbWFpbikK
KyAgICBkZWZhdWx0cy5zeW5jaHJvbml6ZSgpCisgICAgcmV0dXJuIFRydWUKKworCisjIEJvcnJv
dyB0aGlzIGNvZGUgZnJvbQorIyAnaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8y
MjgxODUwL3RpbWVvdXQtZnVuY3Rpb24taWYtaXQtdGFrZXMtdG9vLWxvbmctdG8tZmluaXNoJwor
Y2xhc3MgVGltZW91dEVycm9yKEV4Y2VwdGlvbik6CisgICAgcGFzcworCisKK2NsYXNzIHRpbWVv
dXQ6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2Vjb25kcz0xLCBlcnJvcl9tZXNzYWdlPSdU
aW1lb3V0Jyk6CisgICAgICAgIHNlbGYuc2Vjb25kcyA9IHNlY29uZHMKKyAgICAgICAgc2VsZi5l
cnJvcl9tZXNzYWdlID0gZXJyb3JfbWVzc2FnZQorCisgICAgZGVmIGhhbmRsZV90aW1lb3V0KHNl
bGYsIHNpZ251bSwgZnJhbWUpOgorICAgICAgICByYWlzZSBUaW1lb3V0RXJyb3Ioc2VsZi5lcnJv
cl9tZXNzYWdlKQorCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgc2lnbmFsLnNp
Z25hbChzaWduYWwuU0lHQUxSTSwgc2VsZi5oYW5kbGVfdGltZW91dCkKKyAgICAgICAgc2lnbmFs
LmFsYXJtKHNlbGYuc2Vjb25kcykKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCB0eXBlLCB2YWx1
ZSwgdHJhY2ViYWNrKToKKyAgICAgICAgc2lnbmFsLmFsYXJtKDApCg==
</data>
<flag name="review"
          id="335231"
          type_id="1"
          status="-"
          setter="slewis"
    />
          </attachment>
      

    </bug>

</bugzilla>