<?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>171452</bug_id>
          
          <creation_ts>2017-04-28 15:02:55 -0700</creation_ts>
          <short_desc>Speedometer: Add an ES2015 (Babel + Webpack) TodoMVC implementation</short_desc>
          <delta_ts>2017-05-11 20:41:14 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>170513</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Addy Osmani">addyo</reporter>
          <assigned_to name="Addy Osmani">addyo</assigned_to>
          <cc>buildbot</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>lforschler</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1302811</commentid>
    <comment_count>0</comment_count>
    <who name="Addy Osmani">addyo</who>
    <bug_when>2017-04-28 15:02:55 -0700</bug_when>
    <thetext>As part of Speedometer 2.0 (https://bugs.webkit.org/show_bug.cgi?id=170513), add an ES2015 TodoMVC implementation that transpiles down to ES5 using Babel and Webpack. This is a variant on the implementation in https://bugs.webkit.org/show_bug.cgi?id=171448 which highlights a popular ES2015 -&gt; ES5 transpiled code pattern very commonly seen in production today. Most developers are still doing complete ES2015 transpiles back to ES5 rather than everything their target browsers support. 

With this implementation we round up Speedometer&apos;s ability to track: vanilla ES5 code, vanilla ES2015 code and transpiled ES2015 code (if the other patches land).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1302812</commentid>
    <comment_count>1</comment_count>
      <attachid>308599</attachid>
    <who name="Addy Osmani">addyo</who>
    <bug_when>2017-04-28 15:04:37 -0700</bug_when>
    <thetext>Created attachment 308599
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1302902</commentid>
    <comment_count>2</comment_count>
      <attachid>308630</attachid>
    <who name="Addy Osmani">addyo</who>
    <bug_when>2017-04-28 17:36:57 -0700</bug_when>
    <thetext>Created attachment 308630
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1306568</commentid>
    <comment_count>3</comment_count>
      <attachid>308630</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-05-09 14:24:15 -0700</bug_when>
    <thetext>Comment on attachment 308630
Patch

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

&gt; PerformanceTests/ChangeLog:7
&gt; +        Adds ES2015 Babel + Webpack TodoMVC implem

Again, we need a blank line before this.

&gt; PerformanceTests/ChangeLog:11
&gt; +        * Speedometer/resources/todomvc/vanilla-examples/es2015-babel-webpack/dist/bundle.app.421eb6baca02218e985e.js: Added.

This file access localStorage. We probably want to avoid storing things into localStorage.
r- because of this.

&gt; PerformanceTests/ChangeLog:12
&gt; +        (o):

And remove these inline comments since we&apos;re just importing files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307713</commentid>
    <comment_count>4</comment_count>
      <attachid>309854</attachid>
    <who name="Addy Osmani">addyo</who>
    <bug_when>2017-05-11 19:55:31 -0700</bug_when>
    <thetext>Created attachment 309854
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307724</commentid>
    <comment_count>5</comment_count>
      <attachid>309854</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-05-11 20:10:44 -0700</bug_when>
    <thetext>Comment on attachment 309854
Patch

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

&gt; PerformanceTests/Speedometer/resources/todomvc/vanilla-examples/es2015-babel-webpack/src/store.js:23
&gt; +    localStorage[name] = JSON.stringify(data)

I think we still have to get rid of these writes &amp; reads from to localStorage.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307734</commentid>
    <comment_count>6</comment_count>
      <attachid>309857</attachid>
    <who name="Addy Osmani">addyo</who>
    <bug_when>2017-05-11 20:19:04 -0700</bug_when>
    <thetext>Created attachment 309857
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307737</commentid>
    <comment_count>7</comment_count>
    <who name="Addy Osmani">addyo</who>
    <bug_when>2017-05-11 20:21:23 -0700</bug_when>
    <thetext>This revised version uses a localStorage shim (memory.js) that will only write to memory instead of localStorage or disk. Reads and writes should only occur from memory now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307740</commentid>
    <comment_count>8</comment_count>
      <attachid>309857</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-05-11 20:23:56 -0700</bug_when>
    <thetext>Comment on attachment 309857
Patch

Let&apos;s try CQ again now that git.webkit.org is back.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307751</commentid>
    <comment_count>9</comment_count>
      <attachid>309857</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-05-11 20:41:13 -0700</bug_when>
    <thetext>Comment on attachment 309857
Patch

Clearing flags on attachment: 309857

Committed r216727: &lt;http://trac.webkit.org/changeset/216727&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307752</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-05-11 20:41:14 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>308599</attachid>
            <date>2017-04-28 15:04:37 -0700</date>
            <delta_ts>2017-04-28 17:36:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171452-20170428150437.patch</filename>
            <type>text/plain</type>
            <size>684793</size>
            <attacher name="Addy Osmani">addyo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE1OTQ1CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCmluZGV4IGJmMTgxODE2ODc2
NDhkODA3YzE2NjQyOWQxM2MzMDZkMGM1NTk5NjQuLjMwZDg0Zjg1YzA3NWYyYzhlNDFiZjA1ZTgz
NTZkZTY0OTU1MGYzMGIgMTAwNjQ0Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCisr
KyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzY0IEBACisyMDE3LTA0
LTI4ICBBZGR5IE9zbWFuaSAgPGFkZHlvc21hbmlAZ21haWwuY29tPgorCisgICAgICAgIFNwZWVk
b21ldGVyOiBBZGQgYW4gRVMyMDE1IChCYWJlbCArIFdlYnBhY2spIFRvZG9NVkMgaW1wbGVtZW50
YXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3
MTQ1MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICBBZGRz
IGFuIEVTMjAxNSAoQmFiZWwgYW5kIFdlYnBhY2spIFRvZG9NVkMgaW1wbGVtZW50YXRpb24KKwor
ICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFt
cGxlcy9yZWFjdC9idWlsZC5taW4uanM6IEFkZGVkLgorICAgICAgICAoYXBwLlV0aWxzLnV1aWQp
OgorICAgICAgICAoYXBwLlV0aWxzLnBsdXJhbGl6ZSk6CisgICAgICAgIChhcHAuVXRpbHMuZXh0
ZW5kKToKKyAgICAgICAgKGFwcC5Ub2RvTW9kZWwpOgorICAgICAgICAoYXBwLlRvZG9Nb2RlbC5w
cm90b3R5cGUuc3Vic2NyaWJlKToKKyAgICAgICAgKGFwcC5Ub2RvTW9kZWwucHJvdG90eXBlLmlu
Zm9ybSk6CisgICAgICAgIChhcHAuVG9kb01vZGVsLnByb3RvdHlwZS5hZGRUb2RvKToKKyAgICAg
ICAgKGFwcC5Ub2RvTW9kZWwucHJvdG90eXBlLnRvZ2dsZUFsbCk6CisgICAgICAgIChhcHAuVG9k
b01vZGVsLnByb3RvdHlwZS50b2dnbGUpOgorICAgICAgICAoYXBwLlRvZG9Nb2RlbC5wcm90b3R5
cGUuZGVzdHJveSk6CisgICAgICAgIChhcHAuVG9kb01vZGVsLnByb3RvdHlwZS5zYXZlKToKKyAg
ICAgICAgKGFwcC5Ub2RvTW9kZWwucHJvdG90eXBlLmNsZWFyQ29tcGxldGVkKToKKyAgICAgICAg
KFRvZG9Gb290ZXIuUmVhY3QuY3JlYXRlQ2xhc3MucmVuZGVyKToKKyAgICAgICAgKFRvZG9JdGVt
LlJlYWN0LmNyZWF0ZUNsYXNzLmhhbmRsZVN1Ym1pdCk6CisgICAgICAgIChUb2RvSXRlbS5SZWFj
dC5jcmVhdGVDbGFzcy5oYW5kbGVFZGl0KToKKyAgICAgICAgKFRvZG9JdGVtLlJlYWN0LmNyZWF0
ZUNsYXNzLmhhbmRsZUtleURvd24pOgorICAgICAgICAoVG9kb0l0ZW0uUmVhY3QuY3JlYXRlQ2xh
c3MuaGFuZGxlQ2hhbmdlKToKKyAgICAgICAgKFRvZG9JdGVtLlJlYWN0LmNyZWF0ZUNsYXNzLmdl
dEluaXRpYWxTdGF0ZSk6CisgICAgICAgIChUb2RvSXRlbS5SZWFjdC5jcmVhdGVDbGFzcy5zaG91
bGRDb21wb25lbnRVcGRhdGUpOgorICAgICAgICAoVG9kb0l0ZW0uUmVhY3QuY3JlYXRlQ2xhc3Mu
Y29tcG9uZW50RGlkVXBkYXRlKToKKyAgICAgICAgKFRvZG9JdGVtLlJlYWN0LmNyZWF0ZUNsYXNz
LnJlbmRlcik6CisgICAgICAgIChUb2RvQXBwLlJlYWN0LmNyZWF0ZUNsYXNzLmdldEluaXRpYWxT
dGF0ZSk6CisgICAgICAgIChUb2RvQXBwLlJlYWN0LmNyZWF0ZUNsYXNzLmNvbXBvbmVudERpZE1v
dW50KToKKyAgICAgICAgKFRvZG9BcHAuUmVhY3QuY3JlYXRlQ2xhc3MuaGFuZGxlQ2hhbmdlKToK
KyAgICAgICAgKFRvZG9BcHAuUmVhY3QuY3JlYXRlQ2xhc3MuaGFuZGxlTmV3VG9kb0tleURvd24p
OgorICAgICAgICAoVG9kb0FwcC5SZWFjdC5jcmVhdGVDbGFzcy50b2dnbGVBbGwpOgorICAgICAg
ICAoVG9kb0FwcC5SZWFjdC5jcmVhdGVDbGFzcy50b2dnbGUpOgorICAgICAgICAoVG9kb0FwcC5S
ZWFjdC5jcmVhdGVDbGFzcy5kZXN0cm95KToKKyAgICAgICAgKFRvZG9BcHAuUmVhY3QuY3JlYXRl
Q2xhc3MuZWRpdCk6CisgICAgICAgIChUb2RvQXBwLlJlYWN0LmNyZWF0ZUNsYXNzLnNhdmUpOgor
ICAgICAgICAoVG9kb0FwcC5SZWFjdC5jcmVhdGVDbGFzcy5jYW5jZWwpOgorICAgICAgICAoVG9k
b0FwcC5SZWFjdC5jcmVhdGVDbGFzcy5jbGVhckNvbXBsZXRlZCk6CisgICAgICAgIChUb2RvQXBw
LlJlYWN0LmNyZWF0ZUNsYXNzLnJlbmRlcik6CisgICAgICAgIChyZW5kZXIpOgorICAgICAgICAq
IFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFj
dC9pbmRleC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9k
b212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3QvanMvYXBwLmpzeDogQWRkZWQuCisgICAg
ICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVz
L3JlYWN0L2xpY2Vuc2UubWQ6IEFkZGVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNl
cy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9ub2RlX21vZHVsZXMvY2xhc3Nu
YW1lcy9iaW5kLmpzOiBBZGRlZC4KKyAgICAgICAgKGNsYXNzTmFtZXMpOgorICAgICAgICAoZWxz
ZSk6CisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJl
LWV4YW1wbGVzL3JlYWN0L25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2RlZHVwZS5qczogQWRkZWQu
CisgICAgICAgIChfcGFyc2VBcnJheSk6CisgICAgICAgIChfcGFyc2VOdW1iZXIpOgorICAgICAg
ICAoX3BhcnNlT2JqZWN0KToKKyAgICAgICAgKF9wYXJzZVN0cmluZyk6CisgICAgICAgIChfcGFy
c2UpOgorICAgICAgICAoX2NsYXNzTmFtZXMpOgorICAgICAgICAoY2xhc3NOYW1lcyk6CisgICAg
ICAgIChlbHNlKToKKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNo
aXRlY3R1cmUtZXhhbXBsZXMvcmVhY3Qvbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvaW5kZXguanM6
IEFkZGVkLgorICAgICAgICAoY2xhc3NOYW1lcyk6CisgICAgICAgIChlbHNlKToKKyAgICAgICAg
KiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVh
Y3Qvbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9kaXN0L3JlYWN0LWRvbS5taW4uanM6IEFkZGVkLgor
ICAgICAgICAocmV0dXJuLm8pOgorICAgICAgICAocmV0dXJuLnJldHVybi5lKToKKyAgICAgICAg
KHJldHVybi4pOgorICAgICAgICAocmV0dXJuKToKKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNv
dXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3Qvbm9kZV9tb2R1bGVzL3Jl
YWN0L2Rpc3QvcmVhY3Qtd2l0aC1hZGRvbnMuanM6IEFkZGVkLgorICAgICAgICAoZWxzZSk6Cisg
ICAgICAgIChlbHNlLmVsc2UpOgorICAgICAgICAocyk6CisgICAgICAgIChyZXR1cm4uZSk6Cisg
ICAgICAgIChtYWtlUHJlZml4TWFwKToKKyAgICAgICAgKGdldFZlbmRvclByZWZpeGVkRXZlbnRO
YW1lKToKKyAgICAgICAgKDEpOgorICAgICAgICAoZXNjYXBlKToKKyAgICAgICAgKHVuZXNjYXBl
KToKKyAgICAgICAgKDIpOgorICAgICAgICAoTGlua2VkU3RhdGVNaXhpbi5saW5rU3RhdGUpOgor
ICAgICAgICAoMyk6CisgICAgICAgIChvbmVBcmd1bWVudFBvb2xlcik6CisgICAgICAgICh0d29B
cmd1bWVudFBvb2xlcik6CisgICAgICAgICh0aHJlZUFyZ3VtZW50UG9vbGVyKToKKyAgICAgICAg
KGZvdXJBcmd1bWVudFBvb2xlcik6CisgICAgICAgIChzdGFuZGFyZFJlbGVhc2VyKToKKyAgICAg
ICAgKGFkZFBvb2xpbmdUbyk6CisgICAgICAgICg0KToKKyAgICAgICAgKF9fc3ByZWFkKToKKyAg
ICAgICAgKFJlYWN0LmNyZWF0ZU1peGluKToKKyAgICAgICAgKGdldFJlYWN0RE9NKToKKyAgICAg
ICAgKGV4cG9ydHMuZ2V0UmVhY3RQZXJmKToKKyAgICAgICAgKGV4cG9ydHMuZ2V0UmVhY3RUZXN0
VXRpbHMpOgorICAgICAgICAoNik6CisgICAgICAgIChfY2xhc3NDYWxsQ2hlY2spOgorICAgICAg
ICAoX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4pOgorICAgICAgICAoX2luaGVyaXRzKToKKyAg
ICAgICAgKGNyZWF0ZVRyYW5zaXRpb25UaW1lb3V0UHJvcFZhbGlkYXRvcik6CisgICAgICAgIChS
ZWFjdENTU1RyYW5zaXRpb25Hcm91cCk6CisgICAgICAgIChSZWFjdENTU1RyYW5zaXRpb25Hcm91
cC5wcm90b3R5cGUucmVuZGVyKToKKyAgICAgICAgKDcpOgorICAgICAgICAoUmVhY3RDU1NUcmFu
c2l0aW9uR3JvdXBDaGlsZC4pOgorICAgICAgICAoUmVhY3RDU1NUcmFuc2l0aW9uR3JvdXBDaGls
ZCk6CisgICAgICAgIChSZWFjdENTU1RyYW5zaXRpb25Hcm91cENoaWxkLnByb3RvdHlwZS5jb21w
b25lbnRXaWxsTW91bnQpOgorICAgICAgICAoUmVhY3RDU1NUcmFuc2l0aW9uR3JvdXBDaGlsZC5w
cm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQpOgorICAgICAgICAoUmVhY3RDU1NUcmFuc2l0aW9u
R3JvdXBDaGlsZC5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVubW91bnQpOgorICAgICAgICAoUmVh
Y3RDU1NUcmFuc2l0aW9uR3JvdXBDaGlsZC5wcm90b3R5cGUucmVuZGVyKToKKyAgICAgICAgKDgp
OgorICAgICAgICAoZXNjYXBlVXNlclByb3ZpZGVkS2V5KToKKyAgICAgICAgKEZvckVhY2hCb29r
S2VlcGluZyk6CisgICAgICAgIChGb3JFYWNoQm9va0tlZXBpbmcucHJvdG90eXBlLmRlc3RydWN0
b3IpOgorICAgICAgICAoZm9yRWFjaFNpbmdsZUNoaWxkKToKKyAgICAgICAgKGZvckVhY2hDaGls
ZHJlbik6CisgICAgICAgIChNYXBCb29rS2VlcGluZyk6CisgICAgICAgIChNYXBCb29rS2VlcGlu
Zy5wcm90b3R5cGUuZGVzdHJ1Y3Rvcik6CisgICAgICAgIChtYXBTaW5nbGVDaGlsZEludG9Db250
ZXh0KToKKyAgICAgICAgKG1hcEludG9XaXRoS2V5UHJlZml4SW50ZXJuYWwpOgorICAgICAgICAo
bWFwQ2hpbGRyZW4pOgorICAgICAgICAoZm9yRWFjaFNpbmdsZUNoaWxkRHVtbXkpOgorICAgICAg
ICAoY291bnRDaGlsZHJlbik6CisgICAgICAgICh0b0FycmF5KToKKyAgICAgICAgKDkpOgorICAg
ICAgICAoaWRlbnRpdHkpOgorICAgICAgICAoUkVTRVJWRURfU1BFQ19LRVlTLmRpc3BsYXlOYW1l
KToKKyAgICAgICAgKFJFU0VSVkVEX1NQRUNfS0VZUy5taXhpbnMpOgorICAgICAgICAoUkVTRVJW
RURfU1BFQ19LRVlTLmNoaWxkQ29udGV4dFR5cGVzKToKKyAgICAgICAgKFJFU0VSVkVEX1NQRUNf
S0VZUy5jb250ZXh0VHlwZXMpOgorICAgICAgICAoUkVTRVJWRURfU1BFQ19LRVlTLmdldERlZmF1
bHRQcm9wcyk6CisgICAgICAgIChSRVNFUlZFRF9TUEVDX0tFWVMucHJvcFR5cGVzKToKKyAgICAg
ICAgKFJFU0VSVkVEX1NQRUNfS0VZUy5zdGF0aWNzKToKKyAgICAgICAgKFJFU0VSVkVEX1NQRUNf
S0VZUy5hdXRvYmluZCk6CisgICAgICAgICh2YWxpZGF0ZU1ldGhvZE92ZXJyaWRlKToKKyAgICAg
ICAgKG1peFNwZWNJbnRvQ29tcG9uZW50KToKKyAgICAgICAgKG1peFN0YXRpY1NwZWNJbnRvQ29t
cG9uZW50KToKKyAgICAgICAgKG1lcmdlSW50b1dpdGhOb0R1cGxpY2F0ZUtleXMpOgorICAgICAg
ICAocmV0dXJuLm1lcmdlZFJlc3VsdCk6CisgICAgICAgIChjcmVhdGVNZXJnZWRSZXN1bHRGdW5j
dGlvbik6CisgICAgICAgIChyZXR1cm4uY2hhaW5lZEZ1bmN0aW9uKToKKyAgICAgICAgKGNyZWF0
ZUNoYWluZWRGdW5jdGlvbik6CisgICAgICAgIChib3VuZE1ldGhvZC5iaW5kKToKKyAgICAgICAg
KGJpbmRBdXRvQmluZE1ldGhvZCk6CisgICAgICAgIChiaW5kQXV0b0JpbmRNZXRob2RzKToKKyAg
ICAgICAgKFJlYWN0Q2xhc3NNaXhpbi5yZXBsYWNlU3RhdGUpOgorICAgICAgICAoUmVhY3RDbGFz
c01peGluLmlzTW91bnRlZCk6CisgICAgICAgIChSZWFjdENsYXNzQ29tcG9uZW50KToKKyAgICAg
ICAgKFJlYWN0Q2xhc3MuY3JlYXRlQ2xhc3MpOgorICAgICAgICAoUmVhY3RDbGFzcy5pbmplY3Rp
b24uaW5qZWN0TWl4aW4pOgorICAgICAgICAoMTApOgorICAgICAgICAoUmVhY3RDb21wb25lbnQp
OgorICAgICAgICAoUmVhY3RDb21wb25lbnQucHJvdG90eXBlLnNldFN0YXRlKToKKyAgICAgICAg
KFJlYWN0Q29tcG9uZW50LnByb3RvdHlwZS5mb3JjZVVwZGF0ZSk6CisgICAgICAgIChkZWZpbmVE
ZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAoZ2V0IGZvcik6CisgICAgICAgICgxMSk6Cisg
ICAgICAgIChpc05hdGl2ZSk6CisgICAgICAgICgxMik6CisgICAgICAgICogU3BlZWRvbWV0ZXIv
cmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L25vZGVfbW9kdWxl
cy9yZWFjdC9kaXN0L3JlYWN0LXdpdGgtYWRkb25zLm1pbi5qczogQWRkZWQuCisgICAgICAgIChv
KToKKyAgICAgICAgKHJldHVybi5lKToKKyAgICAgICAgKHIpOgorICAgICAgICAoMSk6CisgICAg
ICAgICgyKToKKyAgICAgICAgKGkubGlua1N0YXRlKToKKyAgICAgICAgKDMpOgorICAgICAgICAo
aSk6CisgICAgICAgIChhKToKKyAgICAgICAgKHMpOgorICAgICAgICAodSk6CisgICAgICAgIChw
KToKKyAgICAgICAgKDQpOgorICAgICAgICAobS5jcmVhdGVNaXhpbik6CisgICAgICAgICg1KToK
KyAgICAgICAgKDYpOgorICAgICAgICAodC5pLl93cmFwQ2hpbGQpOgorICAgICAgICAodC5wcm90
b3R5cGUucmVuZGVyKToKKyAgICAgICAgKGQpOgorICAgICAgICAoNyk6CisgICAgICAgICh0LmMp
OgorICAgICAgICAodC5pLnRyYW5zaXRpb24pOgorICAgICAgICAodC5pLnF1ZXVlQ2xhc3NBbmRO
b2RlKToKKyAgICAgICAgKHQuaS5mbHVzaENsYXNzTmFtZUFuZE5vZGVRdWV1ZSk6CisgICAgICAg
ICh0LmkuY29tcG9uZW50V2lsbEFwcGVhcik6CisgICAgICAgICh0LmkuY29tcG9uZW50V2lsbEVu
dGVyKToKKyAgICAgICAgKHQuaS5jb21wb25lbnRXaWxsTGVhdmUpOgorICAgICAgICAodC5wcm90
b3R5cGUuY29tcG9uZW50V2lsbE1vdW50KToKKyAgICAgICAgKHQucHJvdG90eXBlLmNvbXBvbmVu
dERpZE1vdW50KToKKyAgICAgICAgKHQucHJvdG90eXBlLmNvbXBvbmVudFdpbGxVbm1vdW50KToK
KyAgICAgICAgKGgpOgorICAgICAgICAoOCk6CisgICAgICAgIChsKToKKyAgICAgICAgKGYpOgor
ICAgICAgICAoby5wcm90b3R5cGUuZGVzdHJ1Y3Rvcik6CisgICAgICAgIChzLnByb3RvdHlwZS5k
ZXN0cnVjdG9yKToKKyAgICAgICAgKDkpOgorICAgICAgICAoYyk6CisgICAgICAgIChfLmRpc3Bs
YXlOYW1lKToKKyAgICAgICAgKF8ubWl4aW5zKToKKyAgICAgICAgKF8uY2hpbGRDb250ZXh0VHlw
ZXMpOgorICAgICAgICAoXy5jb250ZXh0VHlwZXMpOgorICAgICAgICAoXy5nZXREZWZhdWx0UHJv
cHMpOgorICAgICAgICAoXy5wcm9wVHlwZXMpOgorICAgICAgICAoXy5zdGF0aWNzKToKKyAgICAg
ICAgKF8uYXV0b2JpbmQpOgorICAgICAgICAody5yZXBsYWNlU3RhdGUpOgorICAgICAgICAody5p
c01vdW50ZWQpOgorICAgICAgICAoQSk6CisgICAgICAgIChULmNyZWF0ZUNsYXNzKToKKyAgICAg
ICAgKFQuaW5qZWN0aW9uLmluamVjdE1peGluKToKKyAgICAgICAgKDEwKToKKyAgICAgICAgKHIu
cHJvdG90eXBlLnNldFN0YXRlKToKKyAgICAgICAgKHIucHJvdG90eXBlLmZvcmNlVXBkYXRlKToK
KyAgICAgICAgKDExKToKKyAgICAgICAgKG8uc2hvdWxkQ29tcG9uZW50VXBkYXRlKToKKyAgICAg
ICAgKDEyKToKKyAgICAgICAgKDEzKToKKyAgICAgICAgKDE0KToKKyAgICAgICAgKHAuY3JlYXRl
RWxlbWVudCk6CisgICAgICAgIChwLmNyZWF0ZUZhY3RvcnkpOgorICAgICAgICAocC5jbG9uZUFu
ZFJlcGxhY2VLZXkpOgorICAgICAgICAocC5jbG9uZUVsZW1lbnQpOgorICAgICAgICAocC5pc1Zh
bGlkRWxlbWVudCk6CisgICAgICAgICgxNSk6CisgICAgICAgICgxNik6CisgICAgICAgICgxNyk6
CisgICAgICAgICgxOCk6CisgICAgICAgICgxOSk6CisgICAgICAgICgyMCk6CisgICAgICAgICgy
MSk6CisgICAgICAgICh0LmV4cG9ydHMuaSk6CisgICAgICAgICgyMik6CisgICAgICAgIChvLmNy
ZWF0ZVN0YXRlU2V0dGVyKToKKyAgICAgICAgKG8uY3JlYXRlU3RhdGVLZXlTZXR0ZXIpOgorICAg
ICAgICAoby5NaXhpbi5jcmVhdGVTdGF0ZVNldHRlcik6CisgICAgICAgIChvLk1peGluLmNyZWF0
ZVN0YXRlS2V5U2V0dGVyKToKKyAgICAgICAgKDIzKToKKyAgICAgICAgKG8uZ2V0Q2hpbGRNYXBw
aW5nKToKKyAgICAgICAgKG8uKToKKyAgICAgICAgKG8ubWVyZ2VDaGlsZE1hcHBpbmdzKToKKyAg
ICAgICAgKDI0KToKKyAgICAgICAgKHUuYWRkRW5kRXZlbnRMaXN0ZW5lcik6CisgICAgICAgICh1
LnJlbW92ZUVuZEV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoMjUpOgorICAgICAgICAodC5pLnBl
cmZvcm1BcHBlYXIpOgorICAgICAgICAodC5pLl9oYW5kbGVEb25lQXBwZWFyaW5nKToKKyAgICAg
ICAgKHQuaS5wZXJmb3JtRW50ZXIpOgorICAgICAgICAodC5pLl9oYW5kbGVEb25lRW50ZXJpbmcp
OgorICAgICAgICAodC5pLnBlcmZvcm1MZWF2ZSk6CisgICAgICAgICh0LmkuX2hhbmRsZURvbmVM
ZWF2aW5nKToKKyAgICAgICAgKHQucHJvdG90eXBlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMp
OgorICAgICAgICAodC5wcm90b3R5cGUuY29tcG9uZW50RGlkVXBkYXRlKToKKyAgICAgICAgKDI2
KToKKyAgICAgICAgKDI3KToKKyAgICAgICAgKDI4KToKKyAgICAgICAgKDI5KToKKyAgICAgICAg
KDMwKToKKyAgICAgICAgKDMxKToKKyAgICAgICAgKGNhbGwpOgorICAgICAgICAoMzIpOgorICAg
ICAgICAoMzMpOgorICAgICAgICAoMzQpOgorICAgICAgICAoMzUpOgorICAgICAgICAoMzYpOgor
ICAgICAgICAoMzcpOgorICAgICAgICAoaS5hZGRDbGFzcyk6CisgICAgICAgIChpLnJlbW92ZUNs
YXNzKToKKyAgICAgICAgKGkuY29uZGl0aW9uQ2xhc3MpOgorICAgICAgICAoaS5oYXNDbGFzcyk6
CisgICAgICAgIChpLm1hdGNoZXNTZWxlY3Rvcik6CisgICAgICAgICgzOCk6CisgICAgICAgICgz
OSk6CisgICAgICAgIChvLnRoYXRSZXR1cm5zVGhpcyk6CisgICAgICAgIChvLnRoYXRSZXR1cm5z
QXJndW1lbnQpOgorICAgICAgICAoNDApOgorICAgICAgICAoNDEpOgorICAgICAgICAoNDIpOgor
ICAgICAgICAoNDMpOgorICAgICAgICAoNDQpOgorICAgICAgICAodHJ5KToKKyAgICAgICAgKHQu
ZXhwb3J0cyk6CisgICAgICAgIChPYmplY3QuYXNzaWduKToKKyAgICAgICAgKDQ1KToKKyAgICAg
ICAgKDQ2KToKKyAgICAgICAgKDQ3KToKKyAgICAgICAgKHJldHVybi5yKToKKyAgICAgICAgKGMu
bik6CisgICAgICAgIChwLnQpOgorICAgICAgICAobC50KToKKyAgICAgICAgKGYudCk6CisgICAg
ICAgIChkLnQpOgorICAgICAgICAoaC50KToKKyAgICAgICAgKHkudCk6CisgICAgICAgICh5KToK
KyAgICAgICAgKHYudCk6CisgICAgICAgICh2KToKKyAgICAgICAgKG0pOgorICAgICAgICAoRSk6
CisgICAgICAgIChiKToKKyAgICAgICAgKF8pOgorICAgICAgICAoeC5hbnkpOgorICAgICAgICAo
eC4pOgorICAgICAgICAoeC5lbGVtZW50KToKKyAgICAgICAgKHgubm9kZSk6CisgICAgICAgICg0
OCk6CisgICAgICAgICg0OSk6CisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9t
dmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L25vZGVfbW9kdWxlcy9yZWFjdC9kaXN0L3Jl
YWN0LmpzOiBBZGRlZC4KKyAgICAgICAgKGVsc2UpOgorICAgICAgICAoZWxzZS5lbHNlKToKKyAg
ICAgICAgKHMpOgorICAgICAgICAocmV0dXJuLmUpOgorICAgICAgICAoZXNjYXBlKToKKyAgICAg
ICAgKHVuZXNjYXBlKToKKyAgICAgICAgKDEpOgorICAgICAgICAob25lQXJndW1lbnRQb29sZXIp
OgorICAgICAgICAodHdvQXJndW1lbnRQb29sZXIpOgorICAgICAgICAodGhyZWVBcmd1bWVudFBv
b2xlcik6CisgICAgICAgIChmb3VyQXJndW1lbnRQb29sZXIpOgorICAgICAgICAoc3RhbmRhcmRS
ZWxlYXNlcik6CisgICAgICAgIChhZGRQb29saW5nVG8pOgorICAgICAgICAoMik6CisgICAgICAg
IChfX3NwcmVhZCk6CisgICAgICAgIChSZWFjdC5jcmVhdGVNaXhpbik6CisgICAgICAgIChlc2Nh
cGVVc2VyUHJvdmlkZWRLZXkpOgorICAgICAgICAoRm9yRWFjaEJvb2tLZWVwaW5nKToKKyAgICAg
ICAgKEZvckVhY2hCb29rS2VlcGluZy5wcm90b3R5cGUuZGVzdHJ1Y3Rvcik6CisgICAgICAgIChm
b3JFYWNoU2luZ2xlQ2hpbGQpOgorICAgICAgICAoZm9yRWFjaENoaWxkcmVuKToKKyAgICAgICAg
KE1hcEJvb2tLZWVwaW5nKToKKyAgICAgICAgKE1hcEJvb2tLZWVwaW5nLnByb3RvdHlwZS5kZXN0
cnVjdG9yKToKKyAgICAgICAgKG1hcFNpbmdsZUNoaWxkSW50b0NvbnRleHQpOgorICAgICAgICAo
bWFwSW50b1dpdGhLZXlQcmVmaXhJbnRlcm5hbCk6CisgICAgICAgIChtYXBDaGlsZHJlbik6Cisg
ICAgICAgIChmb3JFYWNoU2luZ2xlQ2hpbGREdW1teSk6CisgICAgICAgIChjb3VudENoaWxkcmVu
KToKKyAgICAgICAgKHRvQXJyYXkpOgorICAgICAgICAoNCk6CisgICAgICAgIChpZGVudGl0eSk6
CisgICAgICAgIChSRVNFUlZFRF9TUEVDX0tFWVMuZGlzcGxheU5hbWUpOgorICAgICAgICAoUkVT
RVJWRURfU1BFQ19LRVlTLm1peGlucyk6CisgICAgICAgIChSRVNFUlZFRF9TUEVDX0tFWVMuY2hp
bGRDb250ZXh0VHlwZXMpOgorICAgICAgICAoUkVTRVJWRURfU1BFQ19LRVlTLmNvbnRleHRUeXBl
cyk6CisgICAgICAgIChSRVNFUlZFRF9TUEVDX0tFWVMuZ2V0RGVmYXVsdFByb3BzKToKKyAgICAg
ICAgKFJFU0VSVkVEX1NQRUNfS0VZUy5wcm9wVHlwZXMpOgorICAgICAgICAoUkVTRVJWRURfU1BF
Q19LRVlTLnN0YXRpY3MpOgorICAgICAgICAoUkVTRVJWRURfU1BFQ19LRVlTLmF1dG9iaW5kKToK
KyAgICAgICAgKHZhbGlkYXRlTWV0aG9kT3ZlcnJpZGUpOgorICAgICAgICAobWl4U3BlY0ludG9D
b21wb25lbnQpOgorICAgICAgICAobWl4U3RhdGljU3BlY0ludG9Db21wb25lbnQpOgorICAgICAg
ICAobWVyZ2VJbnRvV2l0aE5vRHVwbGljYXRlS2V5cyk6CisgICAgICAgIChyZXR1cm4ubWVyZ2Vk
UmVzdWx0KToKKyAgICAgICAgKGNyZWF0ZU1lcmdlZFJlc3VsdEZ1bmN0aW9uKToKKyAgICAgICAg
KHJldHVybi5jaGFpbmVkRnVuY3Rpb24pOgorICAgICAgICAoY3JlYXRlQ2hhaW5lZEZ1bmN0aW9u
KToKKyAgICAgICAgKGJvdW5kTWV0aG9kLmJpbmQpOgorICAgICAgICAoYmluZEF1dG9CaW5kTWV0
aG9kKToKKyAgICAgICAgKGJpbmRBdXRvQmluZE1ldGhvZHMpOgorICAgICAgICAoUmVhY3RDbGFz
c01peGluLnJlcGxhY2VTdGF0ZSk6CisgICAgICAgIChSZWFjdENsYXNzTWl4aW4uaXNNb3VudGVk
KToKKyAgICAgICAgKFJlYWN0Q2xhc3NDb21wb25lbnQpOgorICAgICAgICAoUmVhY3RDbGFzcy5j
cmVhdGVDbGFzcyk6CisgICAgICAgIChSZWFjdENsYXNzLmluamVjdGlvbi5pbmplY3RNaXhpbik6
CisgICAgICAgICg1KToKKyAgICAgICAgKFJlYWN0Q29tcG9uZW50KToKKyAgICAgICAgKFJlYWN0
Q29tcG9uZW50LnByb3RvdHlwZS5zZXRTdGF0ZSk6CisgICAgICAgIChSZWFjdENvbXBvbmVudC5w
cm90b3R5cGUuZm9yY2VVcGRhdGUpOgorICAgICAgICAoZGVmaW5lRGVwcmVjYXRpb25XYXJuaW5n
KToKKyAgICAgICAgKGdldCBmb3IpOgorICAgICAgICAoNik6CisgICAgICAgIChpc05hdGl2ZSk6
CisgICAgICAgICg3KToKKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9h
cmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3Qvbm9kZV9tb2R1bGVzL3JlYWN0L2Rpc3QvcmVhY3Qu
bWluLmpzOiBBZGRlZC4KKyAgICAgICAgKG8pOgorICAgICAgICAocmV0dXJuLnQpOgorICAgICAg
ICAocik6CisgICAgICAgICgxKToKKyAgICAgICAgKGkpOgorICAgICAgICAodSk6CisgICAgICAg
IChhKToKKyAgICAgICAgKHMpOgorICAgICAgICAobCk6CisgICAgICAgICgyKToKKyAgICAgICAg
KG0uY3JlYXRlTWl4aW4pOgorICAgICAgICAoMyk6CisgICAgICAgIChmKToKKyAgICAgICAgKHAp
OgorICAgICAgICAoZCk6CisgICAgICAgIChvLnByb3RvdHlwZS5kZXN0cnVjdG9yKToKKyAgICAg
ICAgKGEucHJvdG90eXBlLmRlc3RydWN0b3IpOgorICAgICAgICAoNCk6CisgICAgICAgIChjKToK
KyAgICAgICAgKHguZGlzcGxheU5hbWUpOgorICAgICAgICAoeC5taXhpbnMpOgorICAgICAgICAo
eC5jaGlsZENvbnRleHRUeXBlcyk6CisgICAgICAgICh4LmNvbnRleHRUeXBlcyk6CisgICAgICAg
ICh4LmdldERlZmF1bHRQcm9wcyk6CisgICAgICAgICh4LnByb3BUeXBlcyk6CisgICAgICAgICh4
LnN0YXRpY3MpOgorICAgICAgICAoeC5hdXRvYmluZCk6CisgICAgICAgIChfLnJlcGxhY2VTdGF0
ZSk6CisgICAgICAgIChfLmlzTW91bnRlZCk6CisgICAgICAgIChQKToKKyAgICAgICAgKHcuY3Jl
YXRlQ2xhc3MpOgorICAgICAgICAody5pbmplY3Rpb24uaW5qZWN0TWl4aW4pOgorICAgICAgICAo
NSk6CisgICAgICAgIChyLnByb3RvdHlwZS5zZXRTdGF0ZSk6CisgICAgICAgIChyLnByb3RvdHlw
ZS5mb3JjZVVwZGF0ZSk6CisgICAgICAgICg2KToKKyAgICAgICAgKDcpOgorICAgICAgICAoOCk6
CisgICAgICAgIChsLmNyZWF0ZUVsZW1lbnQpOgorICAgICAgICAobC5jcmVhdGVGYWN0b3J5KToK
KyAgICAgICAgKGwuY2xvbmVBbmRSZXBsYWNlS2V5KToKKyAgICAgICAgKGwuY2xvbmVFbGVtZW50
KToKKyAgICAgICAgKGwuaXNWYWxpZEVsZW1lbnQpOgorICAgICAgICAoOSk6CisgICAgICAgICgx
MCk6CisgICAgICAgICgxMSk6CisgICAgICAgICgxMik6CisgICAgICAgICgxMyk6CisgICAgICAg
IChlLmV4cG9ydHMuaSk6CisgICAgICAgICgxNCk6CisgICAgICAgICgxNSk6CisgICAgICAgICgx
Nik6CisgICAgICAgICgxNyk6CisgICAgICAgICgxOCk6CisgICAgICAgICgxOSk6CisgICAgICAg
ICgyMCk6CisgICAgICAgICgyMSk6CisgICAgICAgIChvLnRoYXRSZXR1cm5zVGhpcyk6CisgICAg
ICAgIChvLnRoYXRSZXR1cm5zQXJndW1lbnQpOgorICAgICAgICAoMjIpOgorICAgICAgICAoMjMp
OgorICAgICAgICAoMjQpOgorICAgICAgICAoMjUpOgorICAgICAgICAodHJ5KToKKyAgICAgICAg
KGUuZXhwb3J0cyk6CisgICAgICAgIChPYmplY3QuYXNzaWduKToKKyAgICAgICAgKDI2KToKKyAg
ICAgICAgKDI3KToKKyAgICAgICAgKDI4KToKKyAgICAgICAgKHJldHVybi5yKToKKyAgICAgICAg
KGMubik6CisgICAgICAgIChsLmUpOgorICAgICAgICAoZi5lKToKKyAgICAgICAgKHAuZSk6Cisg
ICAgICAgIChkLmUpOgorICAgICAgICAoeS5lKToKKyAgICAgICAgKHkpOgorICAgICAgICAoaC5l
KToKKyAgICAgICAgKGgpOgorICAgICAgICAodi5lKToKKyAgICAgICAgKHYpOgorICAgICAgICAo
bSk6CisgICAgICAgIChiKToKKyAgICAgICAgKEUpOgorICAgICAgICAoeCk6CisgICAgICAgIChO
LmFueSk6CisgICAgICAgIChOLik6CisgICAgICAgIChOLmVsZW1lbnQpOgorICAgICAgICAoTi5u
b2RlKToKKyAgICAgICAgKDI5KToKKyAgICAgICAgKDMwKToKKyAgICAgICAgKiBTcGVlZG9tZXRl
ci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3Qvbm9kZV9tb2R1
bGVzL3RvZG9tdmMtYXBwLWNzcy9pbmRleC5jc3M6IEFkZGVkLgorICAgICAgICAoaHRtbCwpOgor
ICAgICAgICAoYnV0dG9uKToKKyAgICAgICAgKGJvZHkpOgorICAgICAgICAoOmZvY3VzKToKKyAg
ICAgICAgKC5oaWRkZW4pOgorICAgICAgICAoLnRvZG9hcHApOgorICAgICAgICAoLnRvZG9hcHAg
aW5wdXQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIpOgorICAgICAgICAoLnRvZG9hcHAgaW5w
dXQ6Oi1tb3otcGxhY2Vob2xkZXIpOgorICAgICAgICAoLnRvZG9hcHAgaW5wdXQ6OmlucHV0LXBs
YWNlaG9sZGVyKToKKyAgICAgICAgKC50b2RvYXBwIGgxKToKKyAgICAgICAgKC5uZXctdG9kbywp
OgorICAgICAgICAoLm5ldy10b2RvKToKKyAgICAgICAgKC5tYWluKToKKyAgICAgICAgKC50b2dn
bGUtYWxsKToKKyAgICAgICAgKC50b2dnbGUtYWxsICsgbGFiZWwpOgorICAgICAgICAoLnRvZ2ds
ZS1hbGwgKyBsYWJlbDpiZWZvcmUpOgorICAgICAgICAoLnRvZ2dsZS1hbGw6Y2hlY2tlZCArIGxh
YmVsOmJlZm9yZSk6CisgICAgICAgICgudG9kby1saXN0KToKKyAgICAgICAgKC50b2RvLWxpc3Qg
bGkpOgorICAgICAgICAoLnRvZG8tbGlzdCBsaTpsYXN0LWNoaWxkKToKKyAgICAgICAgKC50b2Rv
LWxpc3QgbGkuZWRpdGluZyk6CisgICAgICAgICgudG9kby1saXN0IGxpLmVkaXRpbmcgLmVkaXQp
OgorICAgICAgICAoLnRvZG8tbGlzdCBsaS5lZGl0aW5nIC52aWV3KToKKyAgICAgICAgKC50b2Rv
LWxpc3QgbGkgLnRvZ2dsZSk6CisgICAgICAgICgudG9kby1saXN0IGxpIC50b2dnbGUgKyBsYWJl
bCk6CisgICAgICAgICgudG9kby1saXN0IGxpIC50b2dnbGU6Y2hlY2tlZCArIGxhYmVsKToKKyAg
ICAgICAgKC50b2RvLWxpc3QgbGkgbGFiZWwpOgorICAgICAgICAoLnRvZG8tbGlzdCBsaS5jb21w
bGV0ZWQgbGFiZWwpOgorICAgICAgICAoLnRvZG8tbGlzdCBsaSAuZGVzdHJveSk6CisgICAgICAg
ICgudG9kby1saXN0IGxpIC5kZXN0cm95OmhvdmVyKToKKyAgICAgICAgKC50b2RvLWxpc3QgbGkg
LmRlc3Ryb3k6YWZ0ZXIpOgorICAgICAgICAoLnRvZG8tbGlzdCBsaTpob3ZlciAuZGVzdHJveSk6
CisgICAgICAgICgudG9kby1saXN0IGxpIC5lZGl0KToKKyAgICAgICAgKC50b2RvLWxpc3QgbGku
ZWRpdGluZzpsYXN0LWNoaWxkKToKKyAgICAgICAgKC5mb290ZXIpOgorICAgICAgICAoLmZvb3Rl
cjpiZWZvcmUpOgorICAgICAgICAoLnRvZG8tY291bnQpOgorICAgICAgICAoLnRvZG8tY291bnQg
c3Ryb25nKToKKyAgICAgICAgKC5maWx0ZXJzKToKKyAgICAgICAgKC5maWx0ZXJzIGxpKToKKyAg
ICAgICAgKC5maWx0ZXJzIGxpIGEpOgorICAgICAgICAoLmZpbHRlcnMgbGkgYTpob3Zlcik6Cisg
ICAgICAgICguZmlsdGVycyBsaSBhLnNlbGVjdGVkKToKKyAgICAgICAgKC5jbGVhci1jb21wbGV0
ZWQsKToKKyAgICAgICAgKC5jbGVhci1jb21wbGV0ZWQ6aG92ZXIpOgorICAgICAgICAoLmluZm8p
OgorICAgICAgICAoLmluZm8gcCk6CisgICAgICAgICguaW5mbyBhKToKKyAgICAgICAgKC5pbmZv
IGE6aG92ZXIpOgorICAgICAgICAoQG1lZGlhIHNjcmVlbiBhbmQgKC13ZWJraXQtbWluLWRldmlj
ZS1waXhlbC1yYXRpbzowKSk6CisgICAgICAgICgudG9nZ2xlLWFsbCwpOgorICAgICAgICAoQG1l
ZGlhIChtYXgtd2lkdGg6IDQzMHB4KSk6CisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2Vz
L3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L25vZGVfbW9kdWxlcy90b2RvbXZj
LWNvbW1vbi9iYXNlLmNzczogQWRkZWQuCisgICAgICAgIChocik6CisgICAgICAgICgubGVhcm4g
YSk6CisgICAgICAgICgubGVhcm4gYTpob3Zlcik6CisgICAgICAgICgubGVhcm4gaDMsKToKKyAg
ICAgICAgKC5sZWFybiBoMyk6CisgICAgICAgICgubGVhcm4gaDQpOgorICAgICAgICAoLmxlYXJu
IGg1KToKKyAgICAgICAgKC5sZWFybiB1bCk6CisgICAgICAgICgubGVhcm4gbGkpOgorICAgICAg
ICAoLmxlYXJuIHApOgorICAgICAgICAoI2lzc3VlLWNvdW50KToKKyAgICAgICAgKC5xdW90ZSk6
CisgICAgICAgICgucXVvdGUgcCk6CisgICAgICAgICgucXVvdGUgcDpiZWZvcmUpOgorICAgICAg
ICAoLnF1b3RlIHA6YWZ0ZXIpOgorICAgICAgICAoLnF1b3RlIGZvb3Rlcik6CisgICAgICAgICgu
cXVvdGUgZm9vdGVyIGltZyk6CisgICAgICAgICgucXVvdGUgZm9vdGVyIGEpOgorICAgICAgICAo
LnNwZWVjaC1idWJibGUpOgorICAgICAgICAoLnNwZWVjaC1idWJibGU6YWZ0ZXIpOgorICAgICAg
ICAoLmxlYXJuLWJhciA+IC5sZWFybik6CisgICAgICAgIChAbWVkaWEgKG1pbi13aWR0aDogODk5
cHgpKToKKyAgICAgICAgKC5sZWFybi1iYXIpOgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291
cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9ub2RlX21vZHVsZXMvdG9k
b212Yy1jb21tb24vYmFzZS5qczogQWRkZWQuCisgICAgICAgIChfLmRlZmF1bHRzKToKKyAgICAg
ICAgKHRlbXBsYXRlKToKKyAgICAgICAgKGVzY2FwZXIuXy50ZW1wbGF0ZSk6CisgICAgICAgIChf
KToKKyAgICAgICAgKGxvY2F0aW9uLmhvc3RuYW1lLnN0cmluZ19hcHBlYXJlZF9oZXJlLmkuci5p
LnIpOgorICAgICAgICAocmVkaXJlY3QpOgorICAgICAgICAoZmluZFJvb3QpOgorICAgICAgICAo
eGhyLm9ubG9hZCk6CisgICAgICAgIChnZXRGaWxlKToKKyAgICAgICAgKExlYXJuKToKKyAgICAg
ICAgKExlYXJuLnByb3RvdHlwZS5hcHBlbmQpOgorICAgICAgICAoTGVhcm4ucHJvdG90eXBlLmZl
dGNoSXNzdWVDb3VudCk6CisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMv
YXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L25wbS1zaHJpbmt3cmFwLmpzb246IEFkZGVkLgor
ICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFt
cGxlcy9yZWFjdC9wYWNrYWdlLmpzb246IEFkZGVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jl
c291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svLmJh
YmVscmM6IEFkZGVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3Zh
bmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svLmVzbGludGlnbm9yZTogQWRkZWQu
CisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxl
cy9lczIwMTUtYmFiZWwtd2VicGFjay8uZXNsaW50cmM6IEFkZGVkLgorICAgICAgICAqIFNwZWVk
b21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdl
YnBhY2svTElDRU5TRTogQWRkZWQuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3Rv
ZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9kaXN0L2J1bmRsZS5h
cHAuNDIxZWI2YmFjYTAyMjE4ZTk4NWUuanM6IEFkZGVkLgorICAgICAgICAobyk6CisgICAgICAg
IChuKToKKyAgICAgICAgKHIpOgorICAgICAgICAobCk6CisgICAgICAgIChhKToKKyAgICAgICAg
KGMpOgorICAgICAgICAoby5wcm90b3R5cGUuc2V0Vmlldyk6CisgICAgICAgIChvLnByb3RvdHlw
ZS5zaG93QWxsKToKKyAgICAgICAgKG8ucHJvdG90eXBlLnNob3dBY3RpdmUpOgorICAgICAgICAo
by5wcm90b3R5cGUuc2hvd0NvbXBsZXRlZCk6CisgICAgICAgIChvLnByb3RvdHlwZS5hZGRJdGVt
KToKKyAgICAgICAgKG8ucHJvdG90eXBlLmVkaXRJdGVtKToKKyAgICAgICAgKG8ucHJvdG90eXBl
LmVkaXRJdGVtU2F2ZSk6CisgICAgICAgIChvLnByb3RvdHlwZS5lZGl0SXRlbUNhbmNlbCk6Cisg
ICAgICAgIChvLnByb3RvdHlwZS5yZW1vdmVJdGVtKToKKyAgICAgICAgKG8ucHJvdG90eXBlLnJl
bW92ZUNvbXBsZXRlZEl0ZW1zKToKKyAgICAgICAgKG8ucHJvdG90eXBlLnRvZ2dsZUNvbXBsZXRl
KToKKyAgICAgICAgKG8ucHJvdG90eXBlLnRvZ2dsZUFsbCk6CisgICAgICAgIChvLnByb3RvdHlw
ZS5fdXBkYXRlQ291bnQpOgorICAgICAgICAoby5wcm90b3R5cGUuX2ZpbHRlcik6CisgICAgICAg
IChvLnByb3RvdHlwZS5fdXBkYXRlRmlsdGVyU3RhdGUpOgorICAgICAgICAobi5zdHJpbmdfYXBw
ZWFyZWRfaGVyZS50eXBlb2YuU3ltYm9sLnN0cmluZ19hcHBlYXJlZF9oZXJlLnR5cGVvZi5TeW1i
b2wuaXRlcmF0b3IpOgorICAgICAgICAoby5wcm90b3R5cGUuY3JlYXRlKToKKyAgICAgICAgKG8u
cHJvdG90eXBlLnJlYWQpOgorICAgICAgICAoby5wcm90b3R5cGUudXBkYXRlKToKKyAgICAgICAg
KG8ucHJvdG90eXBlLnJlbW92ZSk6CisgICAgICAgIChvLnByb3RvdHlwZS5yZW1vdmVBbGwpOgor
ICAgICAgICAoby5wcm90b3R5cGUuZ2V0Q291bnQpOgorICAgICAgICAoby5wcm90b3R5cGUuc3Vi
c2NyaWJlKToKKyAgICAgICAgKG8ucHJvdG90eXBlLl9ub3RpZnkpOgorICAgICAgICAoby5wcm90
b3R5cGUuZmluZCk6CisgICAgICAgIChvLnByb3RvdHlwZS5maW5kQWxsKToKKyAgICAgICAgKG8u
cHJvdG90eXBlLnNhdmUpOgorICAgICAgICAoby5wcm90b3R5cGUuZHJvcCk6CisgICAgICAgICog
U3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFi
ZWwtd2VicGFjay9kaXN0L2J1bmRsZS5tYW5pZmVzdC5iYzA0MDNjYjcwNzY4YjE0YWRkZC5qczog
QWRkZWQuCisgICAgICAgIChyKToKKyAgICAgICAgKHdpbmRvdy53ZWJwYWNrSnNvbnApOgorICAg
ICAgICAoci5lKToKKyAgICAgICAgKHIuaSk6CisgICAgICAgIChyLmQpOgorICAgICAgICAoZ2V0
IHIubik6CisgICAgICAgIChyLm8pOgorICAgICAgICAoci5vZSk6CisgICAgICAgICogU3BlZWRv
bWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2Vi
cGFjay9kaXN0L2J1bmRsZS52ZW5kb3IuZGExYTJkNjQxMDZlYzU0ZDRmNTcuanM6IEFkZGVkLgor
ICAgICAgICAoMSk6CisgICAgICAgICgxMSk6CisgICAgICAgIChyZXR1cm4ubi50b1N0cmluZyk6
CisgICAgICAgIChuLmkpOgorICAgICAgICAobi5leHBvcnRzKToKKyAgICAgICAgKDEyKToKKyAg
ICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2Vz
MjAxNS1iYWJlbC13ZWJwYWNrL2Rpc3QvaW5kZXguaHRtbDogQWRkZWQuCisgICAgICAgICogU3Bl
ZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwt
d2VicGFjay9kaXN0L3N0eWxlcy5hcHAuNDIxZWI2YmFjYTAyMjE4ZTk4NWUuY3NzOiBBZGRlZC4K
KyAgICAgICAgKC50b2dnbGUtZ3JhcGgpOgorICAgICAgICAoLnRvZ2dsZS1ncmFwaCBzdmcpOgor
ICAgICAgICAoLnRvZ2dsZS1ncmFwaCBzdmcgcGF0aCk6CisgICAgICAgICgudG9nZ2xlLWdyYXBo
LmFjdGl2ZSBzdmcgcGF0aCwudG9nZ2xlLWdyYXBoOmZvY3VzIHN2ZyBwYXRoLC50b2dnbGUtZ3Jh
cGg6aG92ZXIgc3ZnIHBhdGgpOgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2Rv
bXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svZGlzdC9zdHlsZXMudmVu
ZG9yLmRhMWEyZDY0MTA2ZWM1NGQ0ZjU3LmNzczogQWRkZWQuCisgICAgICAgIChib2R5LGJ1dHRv
bixodG1sKToKKyAgICAgICAgKGJ1dHRvbik6CisgICAgICAgIChib2R5LGJ1dHRvbik6CisgICAg
ICAgIChib2R5KToKKyAgICAgICAgKDpmb2N1cyk6CisgICAgICAgICguaGlkZGVuKToKKyAgICAg
ICAgKC50b2RvYXBwKToKKyAgICAgICAgKC50b2RvYXBwIGlucHV0Ojotd2Via2l0LWlucHV0LXBs
YWNlaG9sZGVyKToKKyAgICAgICAgKC50b2RvYXBwIGlucHV0OjotbW96LXBsYWNlaG9sZGVyKToK
KyAgICAgICAgKC50b2RvYXBwIGlucHV0OjppbnB1dC1wbGFjZWhvbGRlcik6CisgICAgICAgICgu
dG9kb2FwcCBoMSk6CisgICAgICAgICguZWRpdCwubmV3LXRvZG8pOgorICAgICAgICAoLm5ldy10
b2RvKToKKyAgICAgICAgKC5tYWluKToKKyAgICAgICAgKGxhYmVsW2Zvcj10b2dnbGUtYWxsXSk6
CisgICAgICAgICgudG9nZ2xlLWFsbCk6CisgICAgICAgICgudG9nZ2xlLWFsbDpiZWZvcmUpOgor
ICAgICAgICAoLnRvZ2dsZS1hbGw6Y2hlY2tlZDpiZWZvcmUpOgorICAgICAgICAoLnRvZG8tbGlz
dCk6CisgICAgICAgICgudG9kby1saXN0IGxpKToKKyAgICAgICAgKC50b2RvLWxpc3QgbGk6bGFz
dC1jaGlsZCk6CisgICAgICAgICgudG9kby1saXN0IGxpLmVkaXRpbmcpOgorICAgICAgICAoLnRv
ZG8tbGlzdCBsaS5lZGl0aW5nIC5lZGl0KToKKyAgICAgICAgKC50b2RvLWxpc3QgbGkuZWRpdGlu
ZyAudmlldyk6CisgICAgICAgICgudG9kby1saXN0IGxpIC50b2dnbGUpOgorICAgICAgICAoLnRv
ZG8tbGlzdCBsaSAudG9nZ2xlOmFmdGVyKToKKyAgICAgICAgKC50b2RvLWxpc3QgbGkgLnRvZ2ds
ZTpjaGVja2VkOmFmdGVyKToKKyAgICAgICAgKC50b2RvLWxpc3QgbGkgbGFiZWwpOgorICAgICAg
ICAoLnRvZG8tbGlzdCBsaS5jb21wbGV0ZWQgbGFiZWwpOgorICAgICAgICAoLnRvZG8tbGlzdCBs
aSAuZGVzdHJveSk6CisgICAgICAgICgudG9kby1saXN0IGxpIC5kZXN0cm95OmhvdmVyKToKKyAg
ICAgICAgKC50b2RvLWxpc3QgbGkgLmRlc3Ryb3k6YWZ0ZXIpOgorICAgICAgICAoLnRvZG8tbGlz
dCBsaTpob3ZlciAuZGVzdHJveSk6CisgICAgICAgICgudG9kby1saXN0IGxpIC5lZGl0KToKKyAg
ICAgICAgKC50b2RvLWxpc3QgbGkuZWRpdGluZzpsYXN0LWNoaWxkKToKKyAgICAgICAgKC5mb290
ZXIpOgorICAgICAgICAoLmZvb3RlcjpiZWZvcmUpOgorICAgICAgICAoLnRvZG8tY291bnQpOgor
ICAgICAgICAoLnRvZG8tY291bnQgc3Ryb25nKToKKyAgICAgICAgKC5maWx0ZXJzKToKKyAgICAg
ICAgKC5maWx0ZXJzIGxpKToKKyAgICAgICAgKC5maWx0ZXJzIGxpIGEpOgorICAgICAgICAoLmZp
bHRlcnMgbGkgYTpob3Zlcik6CisgICAgICAgICguZmlsdGVycyBsaSBhLnNlbGVjdGVkKToKKyAg
ICAgICAgKC5jbGVhci1jb21wbGV0ZWQsaHRtbCAuY2xlYXItY29tcGxldGVkOmFjdGl2ZSk6Cisg
ICAgICAgICguY2xlYXItY29tcGxldGVkOmhvdmVyKToKKyAgICAgICAgKC5pbmZvKToKKyAgICAg
ICAgKC5pbmZvIHApOgorICAgICAgICAoLmluZm8gYSk6CisgICAgICAgICguaW5mbyBhOmhvdmVy
KToKKyAgICAgICAgKC50b2RvLWxpc3QgbGkgLnRvZ2dsZSwudG9nZ2xlLWFsbCk6CisgICAgICAg
IChAbWVkaWEgc2NyZWVuIGFuZCAoLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOjApKToK
KyAgICAgICAgKEBtZWRpYSAobWF4LXdpZHRoOjQzMHB4KSk6CisgICAgICAgICogU3BlZWRvbWV0
ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFj
ay9rYXJtYS5jb25mLmpzOiBBZGRlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMv
dG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrL3BhY2thZ2UuanNv
bjogQWRkZWQuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxs
YS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9zcmMvYXBwLmNzczogQWRkZWQuCisgICAg
ICAgICgudG9nZ2xlLWdyYXBoKToKKyAgICAgICAgKC50b2dnbGUtZ3JhcGggc3ZnKToKKyAgICAg
ICAgKC50b2dnbGUtZ3JhcGggc3ZnIHBhdGgpOgorICAgICAgICAoLnRvZ2dsZS1ncmFwaC5hY3Rp
dmUgc3ZnIHBhdGgsKToKKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92
YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrL3NyYy9hcHAuanM6IEFkZGVkLgor
ICAgICAgICAoZnJvbS5zdHJpbmdfYXBwZWFyZWRfaGVyZS5leHBvcnQub25Mb2FkKToKKyAgICAg
ICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAx
NS1iYWJlbC13ZWJwYWNrL3NyYy9ib290c3RyYXAuanM6IEFkZGVkLgorICAgICAgICAoZnJvbS5z
dHJpbmdfYXBwZWFyZWRfaGVyZS5jb25zdC5yZWxvYWRpbmcuZG9jdW1lbnQucmVhZHlTdGF0ZS5z
dHJpbmdfYXBwZWFyZWRfaGVyZSk6CisgICAgICAgIChib290c3RyYXApOgorICAgICAgICAqIFNw
ZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVs
LXdlYnBhY2svc3JjL2NvbnRyb2xsZXIuanM6IEFkZGVkLgorICAgICAgICAoZXhwb3J0LmRlZmF1
bHQuQ29udHJvbGxlci5Db250cm9sbGVyKToKKyAgICAgICAgKENvbnRyb2xsZXIucHJvdG90eXBl
LnNldFZpZXcpOgorICAgICAgICAoQ29udHJvbGxlci5wcm90b3R5cGUuc2hvd0FsbCk6CisgICAg
ICAgIChDb250cm9sbGVyLnByb3RvdHlwZS5zaG93QWN0aXZlKToKKyAgICAgICAgKENvbnRyb2xs
ZXIucHJvdG90eXBlLnNob3dDb21wbGV0ZWQpOgorICAgICAgICAoQ29udHJvbGxlci5wcm90b3R5
cGUuYWRkSXRlbSk6CisgICAgICAgIChDb250cm9sbGVyLnByb3RvdHlwZS5lZGl0SXRlbSk6Cisg
ICAgICAgIChDb250cm9sbGVyLnByb3RvdHlwZS5lZGl0SXRlbVNhdmUpOgorICAgICAgICAoQ29u
dHJvbGxlci5wcm90b3R5cGUuZWRpdEl0ZW1DYW5jZWwpOgorICAgICAgICAoQ29udHJvbGxlci5w
cm90b3R5cGUucmVtb3ZlSXRlbSk6CisgICAgICAgIChDb250cm9sbGVyLnByb3RvdHlwZS5yZW1v
dmVDb21wbGV0ZWRJdGVtcyk6CisgICAgICAgIChDb250cm9sbGVyLnByb3RvdHlwZS50b2dnbGVD
b21wbGV0ZSk6CisgICAgICAgIChDb250cm9sbGVyLnByb3RvdHlwZS50b2dnbGVBbGwpOgorICAg
ICAgICAoQ29udHJvbGxlci5wcm90b3R5cGUuX3VwZGF0ZUNvdW50KToKKyAgICAgICAgKENvbnRy
b2xsZXIucHJvdG90eXBlLl9maWx0ZXIpOgorICAgICAgICAoQ29udHJvbGxlci5wcm90b3R5cGUu
X3VwZGF0ZUZpbHRlclN0YXRlKToKKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9k
b212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrL3NyYy9jb250cm9sbGVy
LnRlc3QuanM6IEFkZGVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZj
L3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svc3JjL2hlbHBlcnMuanM6IEFk
ZGVkLgorICAgICAgICAocXMpOgorICAgICAgICAocXNhKToKKyAgICAgICAgKG9uKToKKyAgICAg
ICAgKGRpc3BhdGNoRXZlbnQpOgorICAgICAgICAoZGVsZWdhdGUpOgorICAgICAgICAocGFyZW50
KToKKyAgICAgICAgKHJlbW92ZSk6CisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3Rv
ZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9zcmMvaW5kZXguaHRt
bDogQWRkZWQuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxs
YS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9zcmMvbW9kZWwuanM6IEFkZGVkLgorICAg
ICAgICAoZXhwb3J0LmRlZmF1bHQuTW9kZWwuTW9kZWwpOgorICAgICAgICAoTW9kZWwucHJvdG90
eXBlLmNyZWF0ZSk6CisgICAgICAgIChNb2RlbC5wcm90b3R5cGUucmVhZCk6CisgICAgICAgIChN
b2RlbC5wcm90b3R5cGUudXBkYXRlKToKKyAgICAgICAgKE1vZGVsLnByb3RvdHlwZS5yZW1vdmUp
OgorICAgICAgICAoTW9kZWwucHJvdG90eXBlLnJlbW92ZUFsbCk6CisgICAgICAgIChNb2RlbC5w
cm90b3R5cGUuZ2V0Q291bnQpOgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2Rv
bXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svc3JjL3N0b3JlLmpzOiBB
ZGRlZC4KKyAgICAgICAgKGZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuZXhwb3J0LmRlZmF1bHQu
U3RvcmUuU3RvcmUpOgorICAgICAgICAoU3RvcmUucHJvdG90eXBlLnN1YnNjcmliZSk6CisgICAg
ICAgIChTdG9yZS5wcm90b3R5cGUuX25vdGlmeSk6CisgICAgICAgIChTdG9yZS5wcm90b3R5cGUu
ZmluZCk6CisgICAgICAgIChTdG9yZS5wcm90b3R5cGUuZmluZEFsbCk6CisgICAgICAgIChTdG9y
ZS5wcm90b3R5cGUuc2F2ZSk6CisgICAgICAgIChTdG9yZS5wcm90b3R5cGUucmVtb3ZlKToKKyAg
ICAgICAgKFN0b3JlLnByb3RvdHlwZS5kcm9wKToKKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNv
dXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrL3NyYy90
ZW1wbGF0ZS5qczogQWRkZWQuCisgICAgICAgIChlc2NhcGVIdG1sQ2hhcik6CisgICAgICAgIChy
ZVVuZXNjYXBlZEh0bWwucmVIYXNVbmVzY2FwZWRIdG1sLm5ldy5SZWdFeHAucmVVbmVzY2FwZWRI
dG1sLnNvdXJjZS5lc2NhcGUpOgorICAgICAgICAoVGVtcGxhdGUudGhpcy5kZWZhdWx0VGVtcGxh
dGUubGkuZGF0YS5pZC5zdHJpbmdfYXBwZWFyZWRfaGVyZS5kaXYuaW5wdXQpOgorICAgICAgICAo
VGVtcGxhdGUudGhpcy5kZWZhdWx0VGVtcGxhdGUubGkuZGF0YS5pZC5zdHJpbmdfYXBwZWFyZWRf
aGVyZS5kaXYpOgorICAgICAgICAoVGVtcGxhdGUucHJvdG90eXBlLnNob3cpOgorICAgICAgICAo
VGVtcGxhdGUucHJvdG90eXBlLml0ZW1Db3VudGVyKToKKyAgICAgICAgKFRlbXBsYXRlLnByb3Rv
dHlwZS5jbGVhckNvbXBsZXRlZEJ1dHRvbik6CisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3Vy
Y2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9zcmMvdG9k
by5qczogQWRkZWQuCisgICAgICAgIChsZXQudG9kby5jb25zdC5zdWJzY3JpYmVycyk6CisgICAg
ICAgICh1cGRhdGVUb2RvKToKKyAgICAgICAgKHN1YnNjcmliZS5zdWJzY3JpYmVycy5wdXNoLnJl
dHVybi51bnN1YnNjcmliZSk6CisgICAgICAgIChzdWJzY3JpYmUpOgorICAgICAgICAqIFNwZWVk
b21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdl
YnBhY2svc3JjL3ZpZXcuanM6IEFkZGVkLgorICAgICAgICAoZnJvbS5zdHJpbmdfYXBwZWFyZWRf
aGVyZS5leHBvcnQuZGVmYXVsdC5WaWV3KToKKyAgICAgICAgKGZyb20uc3RyaW5nX2FwcGVhcmVk
X2hlcmUuZXhwb3J0LmRlZmF1bHQuVmlldy5wcm90b3R5cGUuX3JlbW92ZUl0ZW0pOgorICAgICAg
ICAoZnJvbS5zdHJpbmdfYXBwZWFyZWRfaGVyZS5leHBvcnQuZGVmYXVsdC5WaWV3LnByb3RvdHlw
ZS5fY2xlYXJDb21wbGV0ZWRCdXR0b24pOgorICAgICAgICAoZnJvbS5zdHJpbmdfYXBwZWFyZWRf
aGVyZS5leHBvcnQuZGVmYXVsdC5WaWV3LnByb3RvdHlwZS5fZWRpdEl0ZW1Eb25lKToKKyAgICAg
ICAgKGZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuZXhwb3J0LmRlZmF1bHQuVmlldy5wcm90b3R5
cGUucmVuZGVyLnRoYXQudGhpcy52aWV3Q29tbWFuZHMuc2hvd0VudHJpZXMpOgorICAgICAgICAo
ZnJvbS5zdHJpbmdfYXBwZWFyZWRfaGVyZS5leHBvcnQuZGVmYXVsdC5WaWV3LnByb3RvdHlwZS5y
ZW5kZXIudGhhdC50aGlzLnZpZXdDb21tYW5kcy5yZW1vdmVJdGVtKToKKyAgICAgICAgKGZyb20u
c3RyaW5nX2FwcGVhcmVkX2hlcmUuZXhwb3J0LmRlZmF1bHQuVmlldy5wcm90b3R5cGUucmVuZGVy
LnRoYXQudGhpcy52aWV3Q29tbWFuZHMudXBkYXRlRWxlbWVudENvdW50KToKKyAgICAgICAgKGZy
b20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuZXhwb3J0LmRlZmF1bHQuVmlldy5wcm90b3R5cGUucmVu
ZGVyLnRoYXQudGhpcy52aWV3Q29tbWFuZHMuY2xlYXJDb21wbGV0ZWRCdXR0b24pOgorICAgICAg
ICAoZnJvbS5zdHJpbmdfYXBwZWFyZWRfaGVyZS5leHBvcnQuZGVmYXVsdC5WaWV3LnByb3RvdHlw
ZS5yZW5kZXIudGhhdC50aGlzLnZpZXdDb21tYW5kcy5jb250ZW50QmxvY2tWaXNpYmlsaXR5KToK
KyAgICAgICAgKGZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuZXhwb3J0LmRlZmF1bHQuVmlldy5w
cm90b3R5cGUucmVuZGVyLnRoYXQudGhpcy52aWV3Q29tbWFuZHMudG9nZ2xlQWxsKToKKyAgICAg
ICAgKGZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuZXhwb3J0LmRlZmF1bHQuVmlldy5wcm90b3R5
cGUucmVuZGVyLnRoYXQudGhpcy52aWV3Q29tbWFuZHMuc2V0RmlsdGVyKToKKyAgICAgICAgKGZy
b20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuZXhwb3J0LmRlZmF1bHQuVmlldy5wcm90b3R5cGUucmVu
ZGVyLnRoYXQudGhpcy52aWV3Q29tbWFuZHMuY2xlYXJOZXdUb2RvKToKKyAgICAgICAgKGZyb20u
c3RyaW5nX2FwcGVhcmVkX2hlcmUuZXhwb3J0LmRlZmF1bHQuVmlldy5wcm90b3R5cGUucmVuZGVy
LnRoYXQudGhpcy52aWV3Q29tbWFuZHMuZWxlbWVudENvbXBsZXRlKToKKyAgICAgICAgKGZyb20u
c3RyaW5nX2FwcGVhcmVkX2hlcmUuZXhwb3J0LmRlZmF1bHQuVmlldy5wcm90b3R5cGUucmVuZGVy
LnRoYXQudGhpcy52aWV3Q29tbWFuZHMuZWRpdEl0ZW0pOgorICAgICAgICAoZnJvbS5zdHJpbmdf
YXBwZWFyZWRfaGVyZS5leHBvcnQuZGVmYXVsdC5WaWV3LnByb3RvdHlwZS5yZW5kZXIudGhhdC50
aGlzLnZpZXdDb21tYW5kcy5lZGl0SXRlbURvbmUpOgorICAgICAgICAoZnJvbS5zdHJpbmdfYXBw
ZWFyZWRfaGVyZS5leHBvcnQuZGVmYXVsdC5WaWV3LnByb3RvdHlwZS5yZW5kZXIpOgorICAgICAg
ICAoZnJvbS5zdHJpbmdfYXBwZWFyZWRfaGVyZS5leHBvcnQuZGVmYXVsdC5WaWV3LnByb3RvdHlw
ZS5fYmluZEl0ZW1FZGl0RG9uZSk6CisgICAgICAgIChmcm9tLnN0cmluZ19hcHBlYXJlZF9oZXJl
LmV4cG9ydC5kZWZhdWx0LlZpZXcucHJvdG90eXBlLl9iaW5kSXRlbUVkaXRDYW5jZWwpOgorICAg
ICAgICAoZnJvbS5zdHJpbmdfYXBwZWFyZWRfaGVyZS5leHBvcnQuZGVmYXVsdC5WaWV3LnByb3Rv
dHlwZS5iaW5kKToKKyAgICAgICAgKF9zZXRGaWx0ZXIpOgorICAgICAgICAoX2VsZW1lbnRDb21w
bGV0ZSk6CisgICAgICAgIChfZWRpdEl0ZW0pOgorICAgICAgICAoX2l0ZW1JZCk6CisgICAgICAg
ICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUt
YmFiZWwtd2VicGFjay93ZWJwYWNrLmNvbmZpZy5iYWJlbC5qczogQWRkZWQuCisKIDIwMTctMDQt
MjcgIE1pY2hhZWwgU2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIGJh
Y2sgdGVzdHMgaW5hZHZlcnRlbnRseSBkZWxldGVkIGluIHIyMDUwMzIuCmRpZmYgLS1naXQgYS9Q
ZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVy
ZS1leGFtcGxlcy9yZWFjdC9idWlsZC5taW4uanMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21l
dGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9idWlsZC5t
aW4uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMWM1ZWFmMjQzYjJjZGEyMGY1YzEwYTgzNzNjZTYyYjg3N2U5ODkw
YgotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3Vy
Y2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L2J1aWxkLm1pbi5qcwpAQCAt
MCwwICsxIEBACit2YXIgYXBwPWFwcHx8e307KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2FwcC5B
TExfVE9ET1M9ImFsbCI7YXBwLkFDVElWRV9UT0RPUz0iYWN0aXZlIjthcHAuQ09NUExFVEVEX1RP
RE9TPSJjb21wbGV0ZWQiO2FwcC5VdGlscz17dXVpZDpmdW5jdGlvbigpe3ZhciBpLHJhbmRvbTt2
YXIgdXVpZD0iIjtmb3IoaT0wO2k8MzI7aSsrKXtyYW5kb209TWF0aC5yYW5kb20oKSoxNnwwO2lm
KGk9PT04fHxpPT09MTJ8fGk9PT0xNnx8aT09PTIwKXt1dWlkKz0iLSJ9dXVpZCs9KGk9PT0xMj80
Omk9PT0xNj9yYW5kb20mM3w4OnJhbmRvbSkudG9TdHJpbmcoMTYpfXJldHVybiB1dWlkfSxwbHVy
YWxpemU6ZnVuY3Rpb24oY291bnQsd29yZCl7cmV0dXJuIGNvdW50PT09MT93b3JkOndvcmQrInMi
fSxleHRlbmQ6ZnVuY3Rpb24oKXt2YXIgbmV3T2JqPXt9O2Zvcih2YXIgaT0wO2k8YXJndW1lbnRz
Lmxlbmd0aDtpKyspe3ZhciBvYmo9YXJndW1lbnRzW2ldO2Zvcih2YXIga2V5IGluIG9iail7aWYo
b2JqLmhhc093blByb3BlcnR5KGtleSkpe25ld09ialtrZXldPW9ialtrZXldfX19cmV0dXJuIG5l
d09ian19O3ZhciBVdGlscz1hcHAuVXRpbHM7YXBwLlRvZG9Nb2RlbD1mdW5jdGlvbihrZXkpe3Ro
aXMua2V5PWtleTt0aGlzLnRvZG9zPVtdO3RoaXMub25DaGFuZ2VzPVtdfTthcHAuVG9kb01vZGVs
LnByb3RvdHlwZS5zdWJzY3JpYmU9ZnVuY3Rpb24ob25DaGFuZ2Upe3RoaXMub25DaGFuZ2VzLnB1
c2gob25DaGFuZ2UpfTthcHAuVG9kb01vZGVsLnByb3RvdHlwZS5pbmZvcm09ZnVuY3Rpb24oKXt0
aGlzLm9uQ2hhbmdlcy5mb3JFYWNoKGZ1bmN0aW9uKGNiKXtjYigpfSl9O2FwcC5Ub2RvTW9kZWwu
cHJvdG90eXBlLmFkZFRvZG89ZnVuY3Rpb24odGl0bGUpe3RoaXMudG9kb3M9dGhpcy50b2Rvcy5j
b25jYXQoe2lkOlV0aWxzLnV1aWQoKSx0aXRsZTp0aXRsZSxjb21wbGV0ZWQ6ZmFsc2V9KTt0aGlz
LmluZm9ybSgpfTthcHAuVG9kb01vZGVsLnByb3RvdHlwZS50b2dnbGVBbGw9ZnVuY3Rpb24oY2hl
Y2tlZCl7dGhpcy50b2Rvcz10aGlzLnRvZG9zLm1hcChmdW5jdGlvbih0b2RvKXtyZXR1cm4gVXRp
bHMuZXh0ZW5kKHt9LHRvZG8se2NvbXBsZXRlZDpjaGVja2VkfSl9KTt0aGlzLmluZm9ybSgpfTth
cHAuVG9kb01vZGVsLnByb3RvdHlwZS50b2dnbGU9ZnVuY3Rpb24odG9kb1RvVG9nZ2xlKXt0aGlz
LnRvZG9zPXRoaXMudG9kb3MubWFwKGZ1bmN0aW9uKHRvZG8pe3JldHVybiB0b2RvIT09dG9kb1Rv
VG9nZ2xlP3RvZG86VXRpbHMuZXh0ZW5kKHt9LHRvZG8se2NvbXBsZXRlZDohdG9kby5jb21wbGV0
ZWR9KX0pO3RoaXMuaW5mb3JtKCl9O2FwcC5Ub2RvTW9kZWwucHJvdG90eXBlLmRlc3Ryb3k9ZnVu
Y3Rpb24odG9kbyl7dGhpcy50b2Rvcz10aGlzLnRvZG9zLmZpbHRlcihmdW5jdGlvbihjYW5kaWRh
dGUpe3JldHVybiBjYW5kaWRhdGUhPT10b2RvfSk7dGhpcy5pbmZvcm0oKX07YXBwLlRvZG9Nb2Rl
bC5wcm90b3R5cGUuc2F2ZT1mdW5jdGlvbih0b2RvVG9TYXZlLHRleHQpe3RoaXMudG9kb3M9dGhp
cy50b2Rvcy5tYXAoZnVuY3Rpb24odG9kbyl7cmV0dXJuIHRvZG8hPT10b2RvVG9TYXZlP3RvZG86
VXRpbHMuZXh0ZW5kKHt9LHRvZG8se3RpdGxlOnRleHR9KX0pO3RoaXMuaW5mb3JtKCl9O2FwcC5U
b2RvTW9kZWwucHJvdG90eXBlLmNsZWFyQ29tcGxldGVkPWZ1bmN0aW9uKCl7dGhpcy50b2Rvcz10
aGlzLnRvZG9zLmZpbHRlcihmdW5jdGlvbih0b2RvKXtyZXR1cm4hdG9kby5jb21wbGV0ZWR9KTt0
aGlzLmluZm9ybSgpfTt2YXIgVG9kb0Zvb3Rlcj1SZWFjdC5jcmVhdGVDbGFzcyh7cmVuZGVyOmZ1
bmN0aW9uKCl7dmFyIGFjdGl2ZVRvZG9Xb3JkPWFwcC5VdGlscy5wbHVyYWxpemUodGhpcy5wcm9w
cy5jb3VudCwiaXRlbSIpO3ZhciBjbGVhckJ1dHRvbj1udWxsO2lmKHRoaXMucHJvcHMuY29tcGxl
dGVkQ291bnQ+MCl7Y2xlYXJCdXR0b249UmVhY3QuY3JlYXRlRWxlbWVudCgiYnV0dG9uIix7Y2xh
c3NOYW1lOiJjbGVhci1jb21wbGV0ZWQiLG9uQ2xpY2s6dGhpcy5wcm9wcy5vbkNsZWFyQ29tcGxl
dGVkfSwiQ2xlYXIgY29tcGxldGVkIil9dmFyIG5vd1Nob3dpbmc9dGhpcy5wcm9wcy5ub3dTaG93
aW5nO3JldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KCJmb290ZXIiLHtjbGFzc05hbWU6ImZvb3Rl
ciJ9LFJlYWN0LmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtjbGFzc05hbWU6InRvZG8tY291bnQifSxS
ZWFjdC5jcmVhdGVFbGVtZW50KCJzdHJvbmciLG51bGwsdGhpcy5wcm9wcy5jb3VudCksIiAiLGFj
dGl2ZVRvZG9Xb3JkLCIgbGVmdCIpLFJlYWN0LmNyZWF0ZUVsZW1lbnQoInVsIix7Y2xhc3NOYW1l
OiJmaWx0ZXJzIn0sUmVhY3QuY3JlYXRlRWxlbWVudCgibGkiLG51bGwsUmVhY3QuY3JlYXRlRWxl
bWVudCgiYSIse2hyZWY6IiMvIixjbGFzc05hbWU6Y2xhc3NOYW1lcyh7c2VsZWN0ZWQ6bm93U2hv
d2luZz09PWFwcC5BTExfVE9ET1N9KX0sIkFsbCIpKSwiICIsUmVhY3QuY3JlYXRlRWxlbWVudCgi
bGkiLG51bGwsUmVhY3QuY3JlYXRlRWxlbWVudCgiYSIse2hyZWY6IiMvYWN0aXZlIixjbGFzc05h
bWU6Y2xhc3NOYW1lcyh7c2VsZWN0ZWQ6bm93U2hvd2luZz09PWFwcC5BQ1RJVkVfVE9ET1N9KX0s
IkFjdGl2ZSIpKSwiICIsUmVhY3QuY3JlYXRlRWxlbWVudCgibGkiLG51bGwsUmVhY3QuY3JlYXRl
RWxlbWVudCgiYSIse2hyZWY6IiMvY29tcGxldGVkIixjbGFzc05hbWU6Y2xhc3NOYW1lcyh7c2Vs
ZWN0ZWQ6bm93U2hvd2luZz09PWFwcC5DT01QTEVURURfVE9ET1N9KX0sIkNvbXBsZXRlZCIpKSks
Y2xlYXJCdXR0b24pfX0pO3ZhciBFU0NBUEVfS0VZPTI3O3ZhciBFTlRFUl9LRVk9MTM7dmFyIFRv
ZG9JdGVtPVJlYWN0LmNyZWF0ZUNsYXNzKHtoYW5kbGVTdWJtaXQ6ZnVuY3Rpb24oZXZlbnQpe3Zh
ciB2YWw9dGhpcy5zdGF0ZS5lZGl0VGV4dC50cmltKCk7aWYodmFsKXt0aGlzLnByb3BzLm9uU2F2
ZSh2YWwpO3RoaXMuc2V0U3RhdGUoe2VkaXRUZXh0OnZhbH0pfWVsc2V7dGhpcy5wcm9wcy5vbkRl
c3Ryb3koKX19LGhhbmRsZUVkaXQ6ZnVuY3Rpb24oKXt0aGlzLnByb3BzLm9uRWRpdCgpO3RoaXMu
c2V0U3RhdGUoe2VkaXRUZXh0OnRoaXMucHJvcHMudG9kby50aXRsZX0pfSxoYW5kbGVLZXlEb3du
OmZ1bmN0aW9uKGV2ZW50KXtpZihldmVudC53aGljaD09PUVTQ0FQRV9LRVkpe3RoaXMuc2V0U3Rh
dGUoe2VkaXRUZXh0OnRoaXMucHJvcHMudG9kby50aXRsZX0pO3RoaXMucHJvcHMub25DYW5jZWwo
ZXZlbnQpfWVsc2UgaWYoZXZlbnQud2hpY2g9PT1FTlRFUl9LRVkpe3RoaXMuaGFuZGxlU3VibWl0
KGV2ZW50KX19LGhhbmRsZUNoYW5nZTpmdW5jdGlvbihldmVudCl7aWYodGhpcy5wcm9wcy5lZGl0
aW5nKXt0aGlzLnNldFN0YXRlKHtlZGl0VGV4dDpldmVudC50YXJnZXQudmFsdWV9KX19LGdldElu
aXRpYWxTdGF0ZTpmdW5jdGlvbigpe3JldHVybntlZGl0VGV4dDp0aGlzLnByb3BzLnRvZG8udGl0
bGV9fSxzaG91bGRDb21wb25lbnRVcGRhdGU6ZnVuY3Rpb24obmV4dFByb3BzLG5leHRTdGF0ZSl7
cmV0dXJuIG5leHRQcm9wcy50b2RvIT09dGhpcy5wcm9wcy50b2RvfHxuZXh0UHJvcHMuZWRpdGlu
ZyE9PXRoaXMucHJvcHMuZWRpdGluZ3x8bmV4dFN0YXRlLmVkaXRUZXh0IT09dGhpcy5zdGF0ZS5l
ZGl0VGV4dH0sY29tcG9uZW50RGlkVXBkYXRlOmZ1bmN0aW9uKHByZXZQcm9wcyl7aWYoIXByZXZQ
cm9wcy5lZGl0aW5nJiZ0aGlzLnByb3BzLmVkaXRpbmcpe3ZhciBub2RlPVJlYWN0LmZpbmRET01O
b2RlKHRoaXMucmVmcy5lZGl0RmllbGQpO25vZGUuZm9jdXMoKTtub2RlLnNldFNlbGVjdGlvblJh
bmdlKG5vZGUudmFsdWUubGVuZ3RoLG5vZGUudmFsdWUubGVuZ3RoKX19LHJlbmRlcjpmdW5jdGlv
bigpe3JldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KCJsaSIse2NsYXNzTmFtZTpjbGFzc05hbWVz
KHtjb21wbGV0ZWQ6dGhpcy5wcm9wcy50b2RvLmNvbXBsZXRlZCxlZGl0aW5nOnRoaXMucHJvcHMu
ZWRpdGluZ30pfSxSZWFjdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6InZpZXcifSxS
ZWFjdC5jcmVhdGVFbGVtZW50KCJpbnB1dCIse2NsYXNzTmFtZToidG9nZ2xlIix0eXBlOiJjaGVj
a2JveCIsY2hlY2tlZDp0aGlzLnByb3BzLnRvZG8uY29tcGxldGVkLG9uQ2hhbmdlOnRoaXMucHJv
cHMub25Ub2dnbGV9KSxSZWFjdC5jcmVhdGVFbGVtZW50KCJsYWJlbCIse29uRG91YmxlQ2xpY2s6
dGhpcy5oYW5kbGVFZGl0fSx0aGlzLnByb3BzLnRvZG8udGl0bGUpLFJlYWN0LmNyZWF0ZUVsZW1l
bnQoImJ1dHRvbiIse2NsYXNzTmFtZToiZGVzdHJveSIsb25DbGljazp0aGlzLnByb3BzLm9uRGVz
dHJveX0pKSxSZWFjdC5jcmVhdGVFbGVtZW50KCJpbnB1dCIse3JlZjoiZWRpdEZpZWxkIixjbGFz
c05hbWU6ImVkaXQiLHZhbHVlOnRoaXMuc3RhdGUuZWRpdFRleHQsb25CbHVyOnRoaXMuaGFuZGxl
U3VibWl0LG9uQ2hhbmdlOnRoaXMuaGFuZGxlQ2hhbmdlLG9uS2V5RG93bjp0aGlzLmhhbmRsZUtl
eURvd259KSl9fSk7dmFyIEVOVEVSX0tFWT0xMzt2YXIgVG9kb0FwcD1SZWFjdC5jcmVhdGVDbGFz
cyh7Z2V0SW5pdGlhbFN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJue25vd1Nob3dpbmc6YXBwLkFMTF9U
T0RPUyxlZGl0aW5nOm51bGwsbmV3VG9kbzoiIn19LGNvbXBvbmVudERpZE1vdW50OmZ1bmN0aW9u
KCl7dmFyIHNldFN0YXRlPXRoaXMuc2V0U3RhdGU7dmFyIHJvdXRlcj1Sb3V0ZXIoeyIvIjpzZXRT
dGF0ZS5iaW5kKHRoaXMse25vd1Nob3dpbmc6YXBwLkFMTF9UT0RPU30pLCIvYWN0aXZlIjpzZXRT
dGF0ZS5iaW5kKHRoaXMse25vd1Nob3dpbmc6YXBwLkFDVElWRV9UT0RPU30pLCIvY29tcGxldGVk
IjpzZXRTdGF0ZS5iaW5kKHRoaXMse25vd1Nob3dpbmc6YXBwLkNPTVBMRVRFRF9UT0RPU30pfSk7
cm91dGVyLmluaXQoIi8iKX0saGFuZGxlQ2hhbmdlOmZ1bmN0aW9uKGV2ZW50KXt0aGlzLnNldFN0
YXRlKHtuZXdUb2RvOmV2ZW50LnRhcmdldC52YWx1ZX0pfSxoYW5kbGVOZXdUb2RvS2V5RG93bjpm
dW5jdGlvbihldmVudCl7aWYoZXZlbnQua2V5Q29kZSE9PUVOVEVSX0tFWSl7cmV0dXJufWV2ZW50
LnByZXZlbnREZWZhdWx0KCk7dmFyIHZhbD10aGlzLnN0YXRlLm5ld1RvZG8udHJpbSgpO2lmKHZh
bCl7dGhpcy5wcm9wcy5tb2RlbC5hZGRUb2RvKHZhbCk7dGhpcy5zZXRTdGF0ZSh7bmV3VG9kbzoi
In0pfX0sdG9nZ2xlQWxsOmZ1bmN0aW9uKGV2ZW50KXt2YXIgY2hlY2tlZD1ldmVudC50YXJnZXQu
Y2hlY2tlZDt0aGlzLnByb3BzLm1vZGVsLnRvZ2dsZUFsbChjaGVja2VkKX0sdG9nZ2xlOmZ1bmN0
aW9uKHRvZG9Ub1RvZ2dsZSl7dGhpcy5wcm9wcy5tb2RlbC50b2dnbGUodG9kb1RvVG9nZ2xlKX0s
ZGVzdHJveTpmdW5jdGlvbih0b2RvKXt0aGlzLnByb3BzLm1vZGVsLmRlc3Ryb3kodG9kbyl9LGVk
aXQ6ZnVuY3Rpb24odG9kbyl7dGhpcy5zZXRTdGF0ZSh7ZWRpdGluZzp0b2RvLmlkfSl9LHNhdmU6
ZnVuY3Rpb24odG9kb1RvU2F2ZSx0ZXh0KXt0aGlzLnByb3BzLm1vZGVsLnNhdmUodG9kb1RvU2F2
ZSx0ZXh0KTt0aGlzLnNldFN0YXRlKHtlZGl0aW5nOm51bGx9KX0sY2FuY2VsOmZ1bmN0aW9uKCl7
dGhpcy5zZXRTdGF0ZSh7ZWRpdGluZzpudWxsfSl9LGNsZWFyQ29tcGxldGVkOmZ1bmN0aW9uKCl7
dGhpcy5wcm9wcy5tb2RlbC5jbGVhckNvbXBsZXRlZCgpfSxyZW5kZXI6ZnVuY3Rpb24oKXt2YXIg
Zm9vdGVyO3ZhciBtYWluO3ZhciB0b2Rvcz10aGlzLnByb3BzLm1vZGVsLnRvZG9zO3ZhciBzaG93
blRvZG9zPXRvZG9zLmZpbHRlcihmdW5jdGlvbih0b2RvKXtzd2l0Y2godGhpcy5zdGF0ZS5ub3dT
aG93aW5nKXtjYXNlIGFwcC5BQ1RJVkVfVE9ET1M6cmV0dXJuIXRvZG8uY29tcGxldGVkO2Nhc2Ug
YXBwLkNPTVBMRVRFRF9UT0RPUzpyZXR1cm4gdG9kby5jb21wbGV0ZWQ7ZGVmYXVsdDpyZXR1cm4g
dHJ1ZX19LHRoaXMpO3ZhciB0b2RvSXRlbXM9c2hvd25Ub2Rvcy5tYXAoZnVuY3Rpb24odG9kbyl7
cmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9kb0l0ZW0se2tleTp0b2RvLmlkLHRvZG86dG9k
byxvblRvZ2dsZTp0aGlzLnRvZ2dsZS5iaW5kKHRoaXMsdG9kbyksb25EZXN0cm95OnRoaXMuZGVz
dHJveS5iaW5kKHRoaXMsdG9kbyksb25FZGl0OnRoaXMuZWRpdC5iaW5kKHRoaXMsdG9kbyksZWRp
dGluZzp0aGlzLnN0YXRlLmVkaXRpbmc9PT10b2RvLmlkLG9uU2F2ZTp0aGlzLnNhdmUuYmluZCh0
aGlzLHRvZG8pLG9uQ2FuY2VsOnRoaXMuY2FuY2VsfSl9LHRoaXMpO3ZhciBhY3RpdmVUb2RvQ291
bnQ9dG9kb3MucmVkdWNlKGZ1bmN0aW9uKGFjY3VtLHRvZG8pe3JldHVybiB0b2RvLmNvbXBsZXRl
ZD9hY2N1bTphY2N1bSsxfSwwKTt2YXIgY29tcGxldGVkQ291bnQ9dG9kb3MubGVuZ3RoLWFjdGl2
ZVRvZG9Db3VudDtpZihhY3RpdmVUb2RvQ291bnR8fGNvbXBsZXRlZENvdW50KXtmb290ZXI9UmVh
Y3QuY3JlYXRlRWxlbWVudChUb2RvRm9vdGVyLHtjb3VudDphY3RpdmVUb2RvQ291bnQsY29tcGxl
dGVkQ291bnQ6Y29tcGxldGVkQ291bnQsbm93U2hvd2luZzp0aGlzLnN0YXRlLm5vd1Nob3dpbmcs
b25DbGVhckNvbXBsZXRlZDp0aGlzLmNsZWFyQ29tcGxldGVkfSl9aWYodG9kb3MubGVuZ3RoKXtt
YWluPVJlYWN0LmNyZWF0ZUVsZW1lbnQoInNlY3Rpb24iLHtjbGFzc05hbWU6Im1haW4ifSxSZWFj
dC5jcmVhdGVFbGVtZW50KCJpbnB1dCIse2NsYXNzTmFtZToidG9nZ2xlLWFsbCIsdHlwZToiY2hl
Y2tib3giLG9uQ2hhbmdlOnRoaXMudG9nZ2xlQWxsLGNoZWNrZWQ6YWN0aXZlVG9kb0NvdW50PT09
MH0pLFJlYWN0LmNyZWF0ZUVsZW1lbnQoInVsIix7Y2xhc3NOYW1lOiJ0b2RvLWxpc3QifSx0b2Rv
SXRlbXMpKX1yZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudCgiZGl2IixudWxsLFJlYWN0LmNyZWF0
ZUVsZW1lbnQoImhlYWRlciIse2NsYXNzTmFtZToiaGVhZGVyIn0sUmVhY3QuY3JlYXRlRWxlbWVu
dCgiaDEiLG51bGwsInRvZG9zIiksUmVhY3QuY3JlYXRlRWxlbWVudCgiaW5wdXQiLHtjbGFzc05h
bWU6Im5ldy10b2RvIixwbGFjZWhvbGRlcjoiV2hhdCBuZWVkcyB0byBiZSBkb25lPyIsdmFsdWU6
dGhpcy5zdGF0ZS5uZXdUb2RvLG9uS2V5RG93bjp0aGlzLmhhbmRsZU5ld1RvZG9LZXlEb3duLG9u
Q2hhbmdlOnRoaXMuaGFuZGxlQ2hhbmdlLGF1dG9Gb2N1czp0cnVlfSkpLG1haW4sZm9vdGVyKX19
KTt2YXIgbW9kZWw9bmV3IGFwcC5Ub2RvTW9kZWwoInJlYWN0LXRvZG9zIik7ZnVuY3Rpb24gcmVu
ZGVyKCl7UmVhY3RET00ucmVuZGVyKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9kb0FwcCx7bW9kZWw6
bW9kZWx9KSxkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJ0b2RvYXBwIilbMF0pfW1v
ZGVsLnN1YnNjcmliZShyZW5kZXIpO3JlbmRlcigpfSkoKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBv
ZiBmaWxlCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNl
cy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9pbmRleC5odG1sIGIvUGVyZm9y
bWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhh
bXBsZXMvcmVhY3QvaW5kZXguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yOWU1NjE2YmFhNjAzNmE2NWJlYWZj
OGYwZjAwOTM5YWI1ZDBjZTdhCi0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9T
cGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3Qv
aW5kZXguaHRtbApAQCAtMCwwICsxLDIyIEBACis8IWRvY3R5cGUgaHRtbD4KKzxodG1sIGxhbmc9
ImVuIiBkYXRhLWZyYW1ld29yaz0icmVhY3QiPgorICAgIDxoZWFkPgorICAgICAgICA8bWV0YSBj
aGFyc2V0PSJ1dGYtOCI+CisgICAgICAgIDx0aXRsZT5SZWFjdCDigKIgVG9kb01WQzwvdGl0bGU+
CisgICAgICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ibm9kZV9tb2R1bGVzL3RvZG9t
dmMtY29tbW9uL2Jhc2UuY3NzIj4KKyAgICAgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVm
PSJub2RlX21vZHVsZXMvdG9kb212Yy1hcHAtY3NzL2luZGV4LmNzcyI+CisgICAgPC9oZWFkPgor
ICAgIDxib2R5PgorICAgICAgICA8c2VjdGlvbiBjbGFzcz0idG9kb2FwcCI+PC9zZWN0aW9uPgor
ICAgICAgICA8Zm9vdGVyIGNsYXNzPSJpbmZvIj4KKyAgICAgICAgICAgIDxwPkRvdWJsZS1jbGlj
ayB0byBlZGl0IGEgdG9kbzwvcD4KKyAgICAgICAgICAgIDxwPlBhcnQgb2YgPGEgaHJlZj0iaHR0
cDovL3RvZG9tdmMuY29tIj5Ub2RvTVZDPC9hPjwvcD4KKyAgICAgICAgPC9mb290ZXI+CisKKyAg
ICA8c2NyaXB0IHNyYz0ibm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvaW5kZXguanMiPjwvc2NyaXB0
PgorICAgIDxzY3JpcHQgc3JjPSJub2RlX21vZHVsZXMvZGlyZWN0b3IvYnVpbGQvZGlyZWN0b3Iu
anMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJub2RlX21vZHVsZXMvcmVhY3QvZGlzdC9y
ZWFjdC13aXRoLWFkZG9ucy5taW4uanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJub2Rl
X21vZHVsZXMvcmVhY3QtZG9tL2Rpc3QvcmVhY3QtZG9tLm1pbi5qcyI+PC9zY3JpcHQ+CisgICAg
PHNjcmlwdCBzcmM9ImJ1aWxkLm1pbi5qcyI+PC9zY3JpcHQ+CisgICAgPC9ib2R5PgorPC9odG1s
PgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9k
b212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3QvanMvYXBwLmpzeCBiL1BlcmZvcm1hbmNl
VGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVz
L3JlYWN0L2pzL2FwcC5qc3gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmQ4OTVlNTEwNTg0ZmM5ZGVkMTY2YjQ0NDM5
MjY3ODNmMTUwNDJiNAotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRv
bWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L2pzL2Fw
cC5qc3gKQEAgLTAsMCArMSw0NDIgQEAKKy8qanNoaW50IHF1b3RtYXJrOmZhbHNlICovCisvKmpz
aGludCB3aGl0ZTpmYWxzZSAqLworLypqc2hpbnQgdHJhaWxpbmc6ZmFsc2UgKi8KKy8qanNoaW50
IG5ld2NhcDpmYWxzZSAqLworLypnbG9iYWwgUmVhY3QsIFJvdXRlciovCit2YXIgYXBwID0gYXBw
IHx8IHt9OworCisoZnVuY3Rpb24gKCkgeworCSd1c2Ugc3RyaWN0JzsKKworCWFwcC5BTExfVE9E
T1MgPSAnYWxsJzsKKwlhcHAuQUNUSVZFX1RPRE9TID0gJ2FjdGl2ZSc7CisJYXBwLkNPTVBMRVRF
RF9UT0RPUyA9ICdjb21wbGV0ZWQnOworCisgIGFwcC5VdGlscyA9IHsKKyAgICB1dWlkOiBmdW5j
dGlvbiAoKSB7CisgICAgICAvKmpzaGludCBiaXR3aXNlOmZhbHNlICovCisgICAgICB2YXIgaSwg
cmFuZG9tOworICAgICAgdmFyIHV1aWQgPSAnJzsKKworICAgICAgZm9yIChpID0gMDsgaSA8IDMy
OyBpKyspIHsKKyAgICAgICAgcmFuZG9tID0gTWF0aC5yYW5kb20oKSAqIDE2IHwgMDsKKyAgICAg
ICAgaWYgKGkgPT09IDggfHwgaSA9PT0gMTIgfHwgaSA9PT0gMTYgfHwgaSA9PT0gMjApIHsKKyAg
ICAgICAgICB1dWlkICs9ICctJzsKKyAgICAgICAgfQorICAgICAgICB1dWlkICs9IChpID09PSAx
MiA/IDQgOiAoaSA9PT0gMTYgPyAocmFuZG9tICYgMyB8IDgpIDogcmFuZG9tKSkKKyAgICAgICAg
ICAudG9TdHJpbmcoMTYpOworICAgICAgfQorCisgICAgICByZXR1cm4gdXVpZDsKKyAgICB9LAor
CisgICAgcGx1cmFsaXplOiBmdW5jdGlvbiAoY291bnQsIHdvcmQpIHsKKyAgICAgIHJldHVybiBj
b3VudCA9PT0gMSA/IHdvcmQgOiB3b3JkICsgJ3MnOworICAgIH0sCisKKyAgICBleHRlbmQ6IGZ1
bmN0aW9uICgpIHsKKyAgICAgIHZhciBuZXdPYmogPSB7fTsKKyAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgIHZhciBvYmogPSBhcmd1bWVu
dHNbaV07CisgICAgICAgIGZvciAodmFyIGtleSBpbiBvYmopIHsKKyAgICAgICAgICBpZiAob2Jq
Lmhhc093blByb3BlcnR5KGtleSkpIHsKKyAgICAgICAgICAgIG5ld09ialtrZXldID0gb2JqW2tl
eV07CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgICByZXR1cm4gbmV3T2Jq
OworICAgIH0KKyAgfTsKKworICB2YXIgVXRpbHMgPSBhcHAuVXRpbHM7CisgIC8vIEdlbmVyaWMg
Im1vZGVsIiBvYmplY3QuIFlvdSBjYW4gdXNlIHdoYXRldmVyCisgIC8vIGZyYW1ld29yayB5b3Ug
d2FudC4gRm9yIHRoaXMgYXBwbGljYXRpb24gaXQKKyAgLy8gbWF5IG5vdCBldmVuIGJlIHdvcnRo
IHNlcGFyYXRpbmcgdGhpcyBsb2dpYworICAvLyBvdXQsIGJ1dCB3ZSBkbyB0aGlzIHRvIGRlbW9u
c3RyYXRlIG9uZSB3YXkgdG8KKyAgLy8gc2VwYXJhdGUgb3V0IHBhcnRzIG9mIHlvdXIgYXBwbGlj
YXRpb24uCisgIGFwcC5Ub2RvTW9kZWwgPSBmdW5jdGlvbiAoa2V5KSB7CisgICAgdGhpcy5rZXkg
PSBrZXk7CisgICAgdGhpcy50b2RvcyA9IFtdOworICAgIHRoaXMub25DaGFuZ2VzID0gW107Cisg
IH07CisKKyAgYXBwLlRvZG9Nb2RlbC5wcm90b3R5cGUuc3Vic2NyaWJlID0gZnVuY3Rpb24gKG9u
Q2hhbmdlKSB7CisgICAgdGhpcy5vbkNoYW5nZXMucHVzaChvbkNoYW5nZSk7CisgIH07CisKKyAg
YXBwLlRvZG9Nb2RlbC5wcm90b3R5cGUuaW5mb3JtID0gZnVuY3Rpb24gKCkgeworICAgIHRoaXMu
b25DaGFuZ2VzLmZvckVhY2goZnVuY3Rpb24gKGNiKSB7IGNiKCk7IH0pOworICB9OworCisgIGFw
cC5Ub2RvTW9kZWwucHJvdG90eXBlLmFkZFRvZG8gPSBmdW5jdGlvbiAodGl0bGUpIHsKKyAgICB0
aGlzLnRvZG9zID0gdGhpcy50b2Rvcy5jb25jYXQoeworICAgICAgaWQ6IFV0aWxzLnV1aWQoKSwK
KyAgICAgIHRpdGxlOiB0aXRsZSwKKyAgICAgIGNvbXBsZXRlZDogZmFsc2UKKyAgICB9KTsKKwor
ICAgIHRoaXMuaW5mb3JtKCk7CisgIH07CisKKyAgYXBwLlRvZG9Nb2RlbC5wcm90b3R5cGUudG9n
Z2xlQWxsID0gZnVuY3Rpb24gKGNoZWNrZWQpIHsKKyAgICAvLyBOb3RlOiBpdCdzIHVzdWFsbHkg
YmV0dGVyIHRvIHVzZSBpbW11dGFibGUgZGF0YSBzdHJ1Y3R1cmVzIHNpbmNlIHRoZXkncmUKKyAg
ICAvLyBlYXNpZXIgdG8gcmVhc29uIGFib3V0IGFuZCBSZWFjdCB3b3JrcyB2ZXJ5IHdlbGwgd2l0
aCB0aGVtLiBUaGF0J3Mgd2h5CisgICAgLy8gd2UgdXNlIG1hcCgpIGFuZCBmaWx0ZXIoKSBldmVy
eXdoZXJlIGluc3RlYWQgb2YgbXV0YXRpbmcgdGhlIGFycmF5IG9yCisgICAgLy8gdG9kbyBpdGVt
cyB0aGVtc2VsdmVzLgorICAgIHRoaXMudG9kb3MgPSB0aGlzLnRvZG9zLm1hcChmdW5jdGlvbiAo
dG9kbykgeworICAgICAgcmV0dXJuIFV0aWxzLmV4dGVuZCh7fSwgdG9kbywge2NvbXBsZXRlZDog
Y2hlY2tlZH0pOworICAgIH0pOworCisgICAgdGhpcy5pbmZvcm0oKTsKKyAgfTsKKworICBhcHAu
VG9kb01vZGVsLnByb3RvdHlwZS50b2dnbGUgPSBmdW5jdGlvbiAodG9kb1RvVG9nZ2xlKSB7Cisg
ICAgdGhpcy50b2RvcyA9IHRoaXMudG9kb3MubWFwKGZ1bmN0aW9uICh0b2RvKSB7CisgICAgICBy
ZXR1cm4gdG9kbyAhPT0gdG9kb1RvVG9nZ2xlID8KKyAgICAgICAgdG9kbyA6CisgICAgICAgIFV0
aWxzLmV4dGVuZCh7fSwgdG9kbywge2NvbXBsZXRlZDogIXRvZG8uY29tcGxldGVkfSk7CisgICAg
fSk7CisKKyAgICB0aGlzLmluZm9ybSgpOworICB9OworCisgIGFwcC5Ub2RvTW9kZWwucHJvdG90
eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAodG9kbykgeworICAgIHRoaXMudG9kb3MgPSB0aGlzLnRv
ZG9zLmZpbHRlcihmdW5jdGlvbiAoY2FuZGlkYXRlKSB7CisgICAgICByZXR1cm4gY2FuZGlkYXRl
ICE9PSB0b2RvOworICAgIH0pOworCisgICAgdGhpcy5pbmZvcm0oKTsKKyAgfTsKKworICBhcHAu
VG9kb01vZGVsLnByb3RvdHlwZS5zYXZlID0gZnVuY3Rpb24gKHRvZG9Ub1NhdmUsIHRleHQpIHsK
KyAgICB0aGlzLnRvZG9zID0gdGhpcy50b2Rvcy5tYXAoZnVuY3Rpb24gKHRvZG8pIHsKKyAgICAg
IHJldHVybiB0b2RvICE9PSB0b2RvVG9TYXZlID8gdG9kbyA6IFV0aWxzLmV4dGVuZCh7fSwgdG9k
bywge3RpdGxlOiB0ZXh0fSk7CisgICAgfSk7CisKKyAgICB0aGlzLmluZm9ybSgpOworICB9Owor
CisgIGFwcC5Ub2RvTW9kZWwucHJvdG90eXBlLmNsZWFyQ29tcGxldGVkID0gZnVuY3Rpb24gKCkg
eworICAgIHRoaXMudG9kb3MgPSB0aGlzLnRvZG9zLmZpbHRlcihmdW5jdGlvbiAodG9kbykgewor
ICAgICAgcmV0dXJuICF0b2RvLmNvbXBsZXRlZDsKKyAgICB9KTsKKworICAgIHRoaXMuaW5mb3Jt
KCk7CisgIH07CisKKworICB2YXIgVG9kb0Zvb3RlciA9IFJlYWN0LmNyZWF0ZUNsYXNzKHsKKyAg
ICByZW5kZXI6IGZ1bmN0aW9uICgpIHsKKyAgICAgIHZhciBhY3RpdmVUb2RvV29yZCA9IGFwcC5V
dGlscy5wbHVyYWxpemUodGhpcy5wcm9wcy5jb3VudCwgJ2l0ZW0nKTsKKyAgICAgIHZhciBjbGVh
ckJ1dHRvbiA9IG51bGw7CisKKyAgICAgIGlmICh0aGlzLnByb3BzLmNvbXBsZXRlZENvdW50ID4g
MCkgeworICAgICAgICBjbGVhckJ1dHRvbiA9ICgKKyAgICAgICAgICA8YnV0dG9uCisgICAgICAg
ICAgICBjbGFzc05hbWU9ImNsZWFyLWNvbXBsZXRlZCIKKyAgICAgICAgICAgIG9uQ2xpY2s9e3Ro
aXMucHJvcHMub25DbGVhckNvbXBsZXRlZH0+CisgICAgICAgICAgICBDbGVhciBjb21wbGV0ZWQK
KyAgICAgICAgICA8L2J1dHRvbj4KKyAgICAgICAgKTsKKyAgICAgIH0KKworICAgICAgdmFyIG5v
d1Nob3dpbmcgPSB0aGlzLnByb3BzLm5vd1Nob3dpbmc7CisgICAgICByZXR1cm4gKAorICAgICAg
ICA8Zm9vdGVyIGNsYXNzTmFtZT0iZm9vdGVyIj4KKyAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9
InRvZG8tY291bnQiPgorICAgICAgICAgICAgPHN0cm9uZz57dGhpcy5wcm9wcy5jb3VudH08L3N0
cm9uZz4ge2FjdGl2ZVRvZG9Xb3JkfSBsZWZ0CisgICAgICAgICAgPC9zcGFuPgorICAgICAgICAg
IDx1bCBjbGFzc05hbWU9ImZpbHRlcnMiPgorICAgICAgICAgICAgPGxpPgorICAgICAgICAgICAg
ICA8YQorICAgICAgICAgICAgICAgIGhyZWY9IiMvIgorICAgICAgICAgICAgICAgIGNsYXNzTmFt
ZT17Y2xhc3NOYW1lcyh7c2VsZWN0ZWQ6IG5vd1Nob3dpbmcgPT09IGFwcC5BTExfVE9ET1N9KX0+
CisgICAgICAgICAgICAgICAgICBBbGwKKyAgICAgICAgICAgICAgPC9hPgorICAgICAgICAgICAg
PC9saT4KKyAgICAgICAgICAgIHsnICd9CisgICAgICAgICAgICA8bGk+CisgICAgICAgICAgICAg
IDxhCisgICAgICAgICAgICAgICAgaHJlZj0iIy9hY3RpdmUiCisgICAgICAgICAgICAgICAgY2xh
c3NOYW1lPXtjbGFzc05hbWVzKHtzZWxlY3RlZDogbm93U2hvd2luZyA9PT0gYXBwLkFDVElWRV9U
T0RPU30pfT4KKyAgICAgICAgICAgICAgICAgIEFjdGl2ZQorICAgICAgICAgICAgICA8L2E+Cisg
ICAgICAgICAgICA8L2xpPgorICAgICAgICAgICAgeycgJ30KKyAgICAgICAgICAgIDxsaT4KKyAg
ICAgICAgICAgICAgPGEKKyAgICAgICAgICAgICAgICBocmVmPSIjL2NvbXBsZXRlZCIKKyAgICAg
ICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoe3NlbGVjdGVkOiBub3dTaG93aW5nID09
PSBhcHAuQ09NUExFVEVEX1RPRE9TfSl9PgorICAgICAgICAgICAgICAgICAgQ29tcGxldGVkCisg
ICAgICAgICAgICAgIDwvYT4KKyAgICAgICAgICAgIDwvbGk+CisgICAgICAgICAgPC91bD4KKyAg
ICAgICAgICB7Y2xlYXJCdXR0b259CisgICAgICAgIDwvZm9vdGVyPgorICAgICAgKTsKKyAgICB9
CisgIH0pOworCisgIHZhciBFU0NBUEVfS0VZID0gMjc7CisgIHZhciBFTlRFUl9LRVkgPSAxMzsK
KworICB2YXIgVG9kb0l0ZW0gPSBSZWFjdC5jcmVhdGVDbGFzcyh7CisgICAgaGFuZGxlU3VibWl0
OiBmdW5jdGlvbiAoZXZlbnQpIHsKKyAgICAgIHZhciB2YWwgPSB0aGlzLnN0YXRlLmVkaXRUZXh0
LnRyaW0oKTsKKyAgICAgIGlmICh2YWwpIHsKKyAgICAgICAgdGhpcy5wcm9wcy5vblNhdmUodmFs
KTsKKyAgICAgICAgdGhpcy5zZXRTdGF0ZSh7ZWRpdFRleHQ6IHZhbH0pOworICAgICAgfSBlbHNl
IHsKKyAgICAgICAgdGhpcy5wcm9wcy5vbkRlc3Ryb3koKTsKKyAgICAgIH0KKyAgICB9LAorCisg
ICAgaGFuZGxlRWRpdDogZnVuY3Rpb24gKCkgeworICAgICAgdGhpcy5wcm9wcy5vbkVkaXQoKTsK
KyAgICAgIHRoaXMuc2V0U3RhdGUoe2VkaXRUZXh0OiB0aGlzLnByb3BzLnRvZG8udGl0bGV9KTsK
KyAgICB9LAorCisgICAgaGFuZGxlS2V5RG93bjogZnVuY3Rpb24gKGV2ZW50KSB7CisgICAgICBp
ZiAoZXZlbnQud2hpY2ggPT09IEVTQ0FQRV9LRVkpIHsKKyAgICAgICAgdGhpcy5zZXRTdGF0ZSh7
ZWRpdFRleHQ6IHRoaXMucHJvcHMudG9kby50aXRsZX0pOworICAgICAgICB0aGlzLnByb3BzLm9u
Q2FuY2VsKGV2ZW50KTsKKyAgICAgIH0gZWxzZSBpZiAoZXZlbnQud2hpY2ggPT09IEVOVEVSX0tF
WSkgeworICAgICAgICB0aGlzLmhhbmRsZVN1Ym1pdChldmVudCk7CisgICAgICB9CisgICAgfSwK
KworICAgIGhhbmRsZUNoYW5nZTogZnVuY3Rpb24gKGV2ZW50KSB7CisgICAgICBpZiAodGhpcy5w
cm9wcy5lZGl0aW5nKSB7CisgICAgICAgIHRoaXMuc2V0U3RhdGUoe2VkaXRUZXh0OiBldmVudC50
YXJnZXQudmFsdWV9KTsKKyAgICAgIH0KKyAgICB9LAorCisgICAgZ2V0SW5pdGlhbFN0YXRlOiBm
dW5jdGlvbiAoKSB7CisgICAgICByZXR1cm4ge2VkaXRUZXh0OiB0aGlzLnByb3BzLnRvZG8udGl0
bGV9OworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBUaGlzIGlzIGEgY29tcGxldGVseSBvcHRp
b25hbCBwZXJmb3JtYW5jZSBlbmhhbmNlbWVudCB0aGF0IHlvdSBjYW4KKyAgICAgKiBpbXBsZW1l
bnQgb24gYW55IFJlYWN0IGNvbXBvbmVudC4gSWYgeW91IHdlcmUgdG8gZGVsZXRlIHRoaXMgbWV0
aG9kCisgICAgICogdGhlIGFwcCB3b3VsZCBzdGlsbCB3b3JrIGNvcnJlY3RseSAoYW5kIHN0aWxs
IGJlIHZlcnkgcGVyZm9ybWFudCEpLCB3ZQorICAgICAqIGp1c3QgdXNlIGl0IGFzIGFuIGV4YW1w
bGUgb2YgaG93IGxpdHRsZSBjb2RlIGl0IHRha2VzIHRvIGdldCBhbiBvcmRlcgorICAgICAqIG9m
IG1hZ25pdHVkZSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudC4KKyAgICAgKi8KKyAgICBzaG91bGRD
b21wb25lbnRVcGRhdGU6IGZ1bmN0aW9uIChuZXh0UHJvcHMsIG5leHRTdGF0ZSkgeworICAgICAg
cmV0dXJuICgKKyAgICAgICAgbmV4dFByb3BzLnRvZG8gIT09IHRoaXMucHJvcHMudG9kbyB8fAor
ICAgICAgICBuZXh0UHJvcHMuZWRpdGluZyAhPT0gdGhpcy5wcm9wcy5lZGl0aW5nIHx8CisgICAg
ICAgIG5leHRTdGF0ZS5lZGl0VGV4dCAhPT0gdGhpcy5zdGF0ZS5lZGl0VGV4dAorICAgICAgKTsK
KyAgICB9LAorCisgICAgLyoqCisgICAgICogU2FmZWx5IG1hbmlwdWxhdGUgdGhlIERPTSBhZnRl
ciB1cGRhdGluZyB0aGUgc3RhdGUgd2hlbiBpbnZva2luZworICAgICAqIGB0aGlzLnByb3BzLm9u
RWRpdCgpYCBpbiB0aGUgYGhhbmRsZUVkaXRgIG1ldGhvZCBhYm92ZS4KKyAgICAgKiBGb3IgbW9y
ZSBpbmZvIHJlZmVyIHRvIG5vdGVzIGF0IGh0dHBzOi8vZmFjZWJvb2suZ2l0aHViLmlvL3JlYWN0
L2RvY3MvY29tcG9uZW50LWFwaS5odG1sI3NldHN0YXRlCisgICAgICogYW5kIGh0dHBzOi8vZmFj
ZWJvb2suZ2l0aHViLmlvL3JlYWN0L2RvY3MvY29tcG9uZW50LXNwZWNzLmh0bWwjdXBkYXRpbmct
Y29tcG9uZW50ZGlkdXBkYXRlCisgICAgICovCisgICAgY29tcG9uZW50RGlkVXBkYXRlOiBmdW5j
dGlvbiAocHJldlByb3BzKSB7CisgICAgICBpZiAoIXByZXZQcm9wcy5lZGl0aW5nICYmIHRoaXMu
cHJvcHMuZWRpdGluZykgeworICAgICAgICB2YXIgbm9kZSA9IFJlYWN0LmZpbmRET01Ob2RlKHRo
aXMucmVmcy5lZGl0RmllbGQpOworICAgICAgICBub2RlLmZvY3VzKCk7CisgICAgICAgIG5vZGUu
c2V0U2VsZWN0aW9uUmFuZ2Uobm9kZS52YWx1ZS5sZW5ndGgsIG5vZGUudmFsdWUubGVuZ3RoKTsK
KyAgICAgIH0KKyAgICB9LAorCisgICAgcmVuZGVyOiBmdW5jdGlvbiAoKSB7CisgICAgICByZXR1
cm4gKAorICAgICAgICA8bGkgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHsKKyAgICAgICAgICBjb21w
bGV0ZWQ6IHRoaXMucHJvcHMudG9kby5jb21wbGV0ZWQsCisgICAgICAgICAgZWRpdGluZzogdGhp
cy5wcm9wcy5lZGl0aW5nCisgICAgICAgIH0pfT4KKyAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0i
dmlldyI+CisgICAgICAgICAgICA8aW5wdXQKKyAgICAgICAgICAgICAgY2xhc3NOYW1lPSJ0b2dn
bGUiCisgICAgICAgICAgICAgIHR5cGU9ImNoZWNrYm94IgorICAgICAgICAgICAgICBjaGVja2Vk
PXt0aGlzLnByb3BzLnRvZG8uY29tcGxldGVkfQorICAgICAgICAgICAgICBvbkNoYW5nZT17dGhp
cy5wcm9wcy5vblRvZ2dsZX0KKyAgICAgICAgICAgIC8+CisgICAgICAgICAgICA8bGFiZWwgb25E
b3VibGVDbGljaz17dGhpcy5oYW5kbGVFZGl0fT4KKyAgICAgICAgICAgICAge3RoaXMucHJvcHMu
dG9kby50aXRsZX0KKyAgICAgICAgICAgIDwvbGFiZWw+CisgICAgICAgICAgICA8YnV0dG9uIGNs
YXNzTmFtZT0iZGVzdHJveSIgb25DbGljaz17dGhpcy5wcm9wcy5vbkRlc3Ryb3l9IC8+CisgICAg
ICAgICAgPC9kaXY+CisgICAgICAgICAgPGlucHV0CisgICAgICAgICAgICByZWY9ImVkaXRGaWVs
ZCIKKyAgICAgICAgICAgIGNsYXNzTmFtZT0iZWRpdCIKKyAgICAgICAgICAgIHZhbHVlPXt0aGlz
LnN0YXRlLmVkaXRUZXh0fQorICAgICAgICAgICAgb25CbHVyPXt0aGlzLmhhbmRsZVN1Ym1pdH0K
KyAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmhhbmRsZUNoYW5nZX0KKyAgICAgICAgICAgIG9u
S2V5RG93bj17dGhpcy5oYW5kbGVLZXlEb3dufQorICAgICAgICAgIC8+CisgICAgICAgIDwvbGk+
CisgICAgICApOworICAgIH0KKyAgfSk7CisKKwl2YXIgRU5URVJfS0VZID0gMTM7CisKKwl2YXIg
VG9kb0FwcCA9IFJlYWN0LmNyZWF0ZUNsYXNzKHsKKwkJZ2V0SW5pdGlhbFN0YXRlOiBmdW5jdGlv
biAoKSB7CisJCQlyZXR1cm4geworCQkJCW5vd1Nob3dpbmc6IGFwcC5BTExfVE9ET1MsCisJCQkJ
ZWRpdGluZzogbnVsbCwKKwkJCQluZXdUb2RvOiAnJworCQkJfTsKKwkJfSwKKworCQljb21wb25l
bnREaWRNb3VudDogZnVuY3Rpb24gKCkgeworCQkJdmFyIHNldFN0YXRlID0gdGhpcy5zZXRTdGF0
ZTsKKwkJCXZhciByb3V0ZXIgPSBSb3V0ZXIoeworCQkJCScvJzogc2V0U3RhdGUuYmluZCh0aGlz
LCB7bm93U2hvd2luZzogYXBwLkFMTF9UT0RPU30pLAorCQkJCScvYWN0aXZlJzogc2V0U3RhdGUu
YmluZCh0aGlzLCB7bm93U2hvd2luZzogYXBwLkFDVElWRV9UT0RPU30pLAorCQkJCScvY29tcGxl
dGVkJzogc2V0U3RhdGUuYmluZCh0aGlzLCB7bm93U2hvd2luZzogYXBwLkNPTVBMRVRFRF9UT0RP
U30pCisJCQl9KTsKKwkJCXJvdXRlci5pbml0KCcvJyk7CisJCX0sCisKKwkJaGFuZGxlQ2hhbmdl
OiBmdW5jdGlvbiAoZXZlbnQpIHsKKwkJCXRoaXMuc2V0U3RhdGUoe25ld1RvZG86IGV2ZW50LnRh
cmdldC52YWx1ZX0pOworCQl9LAorCisJCWhhbmRsZU5ld1RvZG9LZXlEb3duOiBmdW5jdGlvbiAo
ZXZlbnQpIHsKKwkJCWlmIChldmVudC5rZXlDb2RlICE9PSBFTlRFUl9LRVkpIHsKKwkJCQlyZXR1
cm47CisJCQl9CisKKwkJCWV2ZW50LnByZXZlbnREZWZhdWx0KCk7CisKKwkJCXZhciB2YWwgPSB0
aGlzLnN0YXRlLm5ld1RvZG8udHJpbSgpOworCisJCQlpZiAodmFsKSB7CisJCQkJdGhpcy5wcm9w
cy5tb2RlbC5hZGRUb2RvKHZhbCk7CisJCQkJdGhpcy5zZXRTdGF0ZSh7bmV3VG9kbzogJyd9KTsK
KwkJCX0KKwkJfSwKKworCQl0b2dnbGVBbGw6IGZ1bmN0aW9uIChldmVudCkgeworCQkJdmFyIGNo
ZWNrZWQgPSBldmVudC50YXJnZXQuY2hlY2tlZDsKKwkJCXRoaXMucHJvcHMubW9kZWwudG9nZ2xl
QWxsKGNoZWNrZWQpOworCQl9LAorCisJCXRvZ2dsZTogZnVuY3Rpb24gKHRvZG9Ub1RvZ2dsZSkg
eworCQkJdGhpcy5wcm9wcy5tb2RlbC50b2dnbGUodG9kb1RvVG9nZ2xlKTsKKwkJfSwKKworCQlk
ZXN0cm95OiBmdW5jdGlvbiAodG9kbykgeworCQkJdGhpcy5wcm9wcy5tb2RlbC5kZXN0cm95KHRv
ZG8pOworCQl9LAorCisJCWVkaXQ6IGZ1bmN0aW9uICh0b2RvKSB7CisJCQl0aGlzLnNldFN0YXRl
KHtlZGl0aW5nOiB0b2RvLmlkfSk7CisJCX0sCisKKwkJc2F2ZTogZnVuY3Rpb24gKHRvZG9Ub1Nh
dmUsIHRleHQpIHsKKwkJCXRoaXMucHJvcHMubW9kZWwuc2F2ZSh0b2RvVG9TYXZlLCB0ZXh0KTsK
KwkJCXRoaXMuc2V0U3RhdGUoe2VkaXRpbmc6IG51bGx9KTsKKwkJfSwKKworCQljYW5jZWw6IGZ1
bmN0aW9uICgpIHsKKwkJCXRoaXMuc2V0U3RhdGUoe2VkaXRpbmc6IG51bGx9KTsKKwkJfSwKKwor
CQljbGVhckNvbXBsZXRlZDogZnVuY3Rpb24gKCkgeworCQkJdGhpcy5wcm9wcy5tb2RlbC5jbGVh
ckNvbXBsZXRlZCgpOworCQl9LAorCisJCXJlbmRlcjogZnVuY3Rpb24gKCkgeworCQkJdmFyIGZv
b3RlcjsKKwkJCXZhciBtYWluOworCQkJdmFyIHRvZG9zID0gdGhpcy5wcm9wcy5tb2RlbC50b2Rv
czsKKworCQkJdmFyIHNob3duVG9kb3MgPSB0b2Rvcy5maWx0ZXIoZnVuY3Rpb24gKHRvZG8pIHsK
KwkJCQlzd2l0Y2ggKHRoaXMuc3RhdGUubm93U2hvd2luZykgeworCQkJCWNhc2UgYXBwLkFDVElW
RV9UT0RPUzoKKwkJCQkJcmV0dXJuICF0b2RvLmNvbXBsZXRlZDsKKwkJCQljYXNlIGFwcC5DT01Q
TEVURURfVE9ET1M6CisJCQkJCXJldHVybiB0b2RvLmNvbXBsZXRlZDsKKwkJCQlkZWZhdWx0Ogor
CQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQl9CisJCQl9LCB0aGlzKTsKKworCQkJdmFyIHRvZG9JdGVt
cyA9IHNob3duVG9kb3MubWFwKGZ1bmN0aW9uICh0b2RvKSB7CisJCQkJcmV0dXJuICgKKwkJCQkJ
PFRvZG9JdGVtCisJCQkJCQlrZXk9e3RvZG8uaWR9CisJCQkJCQl0b2RvPXt0b2RvfQorCQkJCQkJ
b25Ub2dnbGU9e3RoaXMudG9nZ2xlLmJpbmQodGhpcywgdG9kbyl9CisJCQkJCQlvbkRlc3Ryb3k9
e3RoaXMuZGVzdHJveS5iaW5kKHRoaXMsIHRvZG8pfQorCQkJCQkJb25FZGl0PXt0aGlzLmVkaXQu
YmluZCh0aGlzLCB0b2RvKX0KKwkJCQkJCWVkaXRpbmc9e3RoaXMuc3RhdGUuZWRpdGluZyA9PT0g
dG9kby5pZH0KKwkJCQkJCW9uU2F2ZT17dGhpcy5zYXZlLmJpbmQodGhpcywgdG9kbyl9CisJCQkJ
CQlvbkNhbmNlbD17dGhpcy5jYW5jZWx9CisJCQkJCS8+CisJCQkJKTsKKwkJCX0sIHRoaXMpOwor
CisJCQl2YXIgYWN0aXZlVG9kb0NvdW50ID0gdG9kb3MucmVkdWNlKGZ1bmN0aW9uIChhY2N1bSwg
dG9kbykgeworCQkJCXJldHVybiB0b2RvLmNvbXBsZXRlZCA/IGFjY3VtIDogYWNjdW0gKyAxOwor
CQkJfSwgMCk7CisKKwkJCXZhciBjb21wbGV0ZWRDb3VudCA9IHRvZG9zLmxlbmd0aCAtIGFjdGl2
ZVRvZG9Db3VudDsKKworCQkJaWYgKGFjdGl2ZVRvZG9Db3VudCB8fCBjb21wbGV0ZWRDb3VudCkg
eworCQkJCWZvb3RlciA9CisJCQkJCTxUb2RvRm9vdGVyCisJCQkJCQljb3VudD17YWN0aXZlVG9k
b0NvdW50fQorCQkJCQkJY29tcGxldGVkQ291bnQ9e2NvbXBsZXRlZENvdW50fQorCQkJCQkJbm93
U2hvd2luZz17dGhpcy5zdGF0ZS5ub3dTaG93aW5nfQorCQkJCQkJb25DbGVhckNvbXBsZXRlZD17
dGhpcy5jbGVhckNvbXBsZXRlZH0KKwkJCQkJLz47CisJCQl9CisKKwkJCWlmICh0b2Rvcy5sZW5n
dGgpIHsKKwkJCQltYWluID0gKAorCQkJCQk8c2VjdGlvbiBjbGFzc05hbWU9Im1haW4iPgorCQkJ
CQkJPGlucHV0CisJCQkJCQkJY2xhc3NOYW1lPSJ0b2dnbGUtYWxsIgorCQkJCQkJCXR5cGU9ImNo
ZWNrYm94IgorCQkJCQkJCW9uQ2hhbmdlPXt0aGlzLnRvZ2dsZUFsbH0KKwkJCQkJCQljaGVja2Vk
PXthY3RpdmVUb2RvQ291bnQgPT09IDB9CisJCQkJCQkvPgorCQkJCQkJPHVsIGNsYXNzTmFtZT0i
dG9kby1saXN0Ij4KKwkJCQkJCQl7dG9kb0l0ZW1zfQorCQkJCQkJPC91bD4KKwkJCQkJPC9zZWN0
aW9uPgorCQkJCSk7CisJCQl9CisKKwkJCXJldHVybiAoCisJCQkJPGRpdj4KKwkJCQkJPGhlYWRl
ciBjbGFzc05hbWU9ImhlYWRlciI+CisJCQkJCQk8aDE+dG9kb3M8L2gxPgorCQkJCQkJPGlucHV0
CisJCQkJCQkJY2xhc3NOYW1lPSJuZXctdG9kbyIKKwkJCQkJCQlwbGFjZWhvbGRlcj0iV2hhdCBu
ZWVkcyB0byBiZSBkb25lPyIKKwkJCQkJCQl2YWx1ZT17dGhpcy5zdGF0ZS5uZXdUb2RvfQorCQkJ
CQkJCW9uS2V5RG93bj17dGhpcy5oYW5kbGVOZXdUb2RvS2V5RG93bn0KKwkJCQkJCQlvbkNoYW5n
ZT17dGhpcy5oYW5kbGVDaGFuZ2V9CisJCQkJCQkJYXV0b0ZvY3VzPXt0cnVlfQorCQkJCQkJLz4K
KwkJCQkJPC9oZWFkZXI+CisJCQkJCXttYWlufQorCQkJCQl7Zm9vdGVyfQorCQkJCTwvZGl2Pgor
CQkJKTsKKwkJfQorCX0pOworCisJdmFyIG1vZGVsID0gbmV3IGFwcC5Ub2RvTW9kZWwoJ3JlYWN0
LXRvZG9zJyk7CisKKwlmdW5jdGlvbiByZW5kZXIoKSB7CisJCVJlYWN0RE9NLnJlbmRlcigKKwkJ
CTxUb2RvQXBwIG1vZGVsPXttb2RlbH0vPiwKKwkJCWRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFz
c05hbWUoJ3RvZG9hcHAnKVswXQorCQkpOworCX0KKworCW1vZGVsLnN1YnNjcmliZShyZW5kZXIp
OworCXJlbmRlcigpOworfSkoKTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRv
bWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L2xpY2Vu
c2UubWQgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2Fy
Y2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9saWNlbnNlLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZiZmEyZTM4
OWVkOGNjZDg3YjNkNTlkMjI2MWE3YWQ2MzU0ZmMzNzQKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJm
b3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1l
eGFtcGxlcy9yZWFjdC9saWNlbnNlLm1kCkBAIC0wLDAgKzEsMjAgQEAKK0V2ZXJ5dGhpbmcgaW4g
dGhpcyByZXBvIGlzIE1JVCBMaWNlbnNlIHVubGVzcyBvdGhlcndpc2Ugc3BlY2lmaWVkLgorCitD
b3B5cmlnaHQgKGMpIEFkZHkgT3NtYW5pLCBTaW5kcmUgU29yaHVzLCBQYXNjYWwgSGFydGlnLCBT
dGVwaGVuIFNhd2NodWsuCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2Yg
Y2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YKK3RoaXMgc29mdHdhcmUg
YW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBk
ZWFsIGluCit0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhv
dXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvCit1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1
Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZgordGhl
IFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMg
ZnVybmlzaGVkIHRvIGRvIHNvLAorc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6
CisKK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNl
IHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbAorY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25z
IG9mIHRoZSBTb2Z0d2FyZS4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJ
VEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElO
RyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBG
SVRORVNTCitGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IKK0NPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJM
RSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUgorSU4g
QU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBP
VVQgT0YgT1IgSU4KK0NPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBP
VEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmls
ZQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9k
b212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3Qvbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMv
YmluZC5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMv
YXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2JpbmQu
anMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZDhhZTEzYjk1NDk5ZTBhODEyNTQ2YjE0ZjJkNWY1NmRjZDkxYjYyNAot
LS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2Vz
L3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L25vZGVfbW9kdWxlcy9jbGFzc25h
bWVzL2JpbmQuanMKQEAgLTAsMCArMSw0OCBAQAorLyohCisgIENvcHlyaWdodCAoYykgMjAxNiBK
ZWQgV2F0c29uLgorICBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgKE1JVCksIHNlZQor
ICBodHRwOi8vamVkd2F0c29uLmdpdGh1Yi5pby9jbGFzc25hbWVzCisqLworLyogZ2xvYmFsIGRl
ZmluZSAqLworCisoZnVuY3Rpb24gKCkgeworICAgICd1c2Ugc3RyaWN0JzsKKworICAgIHZhciBo
YXNPd24gPSB7fS5oYXNPd25Qcm9wZXJ0eTsKKworICAgIGZ1bmN0aW9uIGNsYXNzTmFtZXMgKCkg
eworICAgICAgICB2YXIgY2xhc3NlcyA9IFtdOworCisgICAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICB2YXIgYXJnID0gYXJndW1l
bnRzW2ldOworICAgICAgICAgICAgaWYgKCFhcmcpIGNvbnRpbnVlOworCisgICAgICAgICAgICB2
YXIgYXJnVHlwZSA9IHR5cGVvZiBhcmc7CisKKyAgICAgICAgICAgIGlmIChhcmdUeXBlID09PSAn
c3RyaW5nJyB8fCBhcmdUeXBlID09PSAnbnVtYmVyJykgeworICAgICAgICAgICAgICAgIGNsYXNz
ZXMucHVzaCh0aGlzICYmIHRoaXNbYXJnXSB8fCBhcmcpOworICAgICAgICAgICAgfSBlbHNlIGlm
IChBcnJheS5pc0FycmF5KGFyZykpIHsKKyAgICAgICAgICAgICAgICBjbGFzc2VzLnB1c2goY2xh
c3NOYW1lcy5hcHBseSh0aGlzLCBhcmcpKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoYXJnVHlw
ZSA9PT0gJ29iamVjdCcpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gYXJnKSB7
CisgICAgICAgICAgICAgICAgICAgIGlmIChoYXNPd24uY2FsbChhcmcsIGtleSkgJiYgYXJnW2tl
eV0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzZXMucHVzaCh0aGlzICYmIHRoaXNb
a2V5XSB8fCBrZXkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGNsYXNzZXMuam9pbign
ICcpOworICAgIH0KKworICAgIGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBt
b2R1bGUuZXhwb3J0cykgeworICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGNsYXNzTmFtZXM7Cisg
ICAgfSBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBkZWZp
bmUuYW1kID09PSAnb2JqZWN0JyAmJiBkZWZpbmUuYW1kKSB7CisgICAgICAgIC8vIHJlZ2lzdGVy
IGFzICdjbGFzc25hbWVzJywgY29uc2lzdGVudCB3aXRoIG5wbSBwYWNrYWdlIG5hbWUKKyAgICAg
ICAgZGVmaW5lKCdjbGFzc25hbWVzJywgW10sIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJl
dHVybiBjbGFzc05hbWVzOworICAgICAgICB9KTsKKyAgICB9IGVsc2UgeworICAgICAgICB3aW5k
b3cuY2xhc3NOYW1lcyA9IGNsYXNzTmFtZXM7CisgICAgfQorfSgpKTsKZGlmZiAtLWdpdCBhL1Bl
cmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJl
LWV4YW1wbGVzL3JlYWN0L25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2RlZHVwZS5qcyBiL1BlcmZv
cm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4
YW1wbGVzL3JlYWN0L25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2RlZHVwZS5qcwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li45NTQ2ZjhlM2ExMGY0MWJjMTFhMmZiOGY3MmZkNGUyZTZlMGEyMWVhCi0tLSAvZGV2L251bGwK
KysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNo
aXRlY3R1cmUtZXhhbXBsZXMvcmVhY3Qvbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvZGVkdXBlLmpz
CkBAIC0wLDAgKzEsMTA5IEBACisvKiEKKyAgQ29weXJpZ2h0IChjKSAyMDE2IEplZCBXYXRzb24u
CisgIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAoTUlUKSwgc2VlCisgIGh0dHA6Ly9q
ZWR3YXRzb24uZ2l0aHViLmlvL2NsYXNzbmFtZXMKKyovCisvKiBnbG9iYWwgZGVmaW5lICovCisK
KyhmdW5jdGlvbiAoKSB7CisgICAgJ3VzZSBzdHJpY3QnOworCisgICAgdmFyIGNsYXNzTmFtZXMg
PSAoZnVuY3Rpb24gKCkgeworICAgICAgICAvLyBkb24ndCBpbmhlcml0IGZyb20gT2JqZWN0IHNv
IHdlIGNhbiBza2lwIGhhc093blByb3BlcnR5IGNoZWNrIGxhdGVyCisgICAgICAgIC8vIGh0dHA6
Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTU1MTgzMjgvY3JlYXRpbmctanMtb2JqZWN0
LXdpdGgtb2JqZWN0LWNyZWF0ZW51bGwjYW5zd2VyLTIxMDc5MjMyCisgICAgICAgIGZ1bmN0aW9u
IFN0b3JhZ2VPYmplY3QoKSB7fQorICAgICAgICBTdG9yYWdlT2JqZWN0LnByb3RvdHlwZSA9IE9i
amVjdC5jcmVhdGUobnVsbCk7CisKKyAgICAgICAgZnVuY3Rpb24gX3BhcnNlQXJyYXkgKHJlc3Vs
dFNldCwgYXJyYXkpIHsKKyAgICAgICAgICAgIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7CisK
KyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAg
ICAgICAgICBfcGFyc2UocmVzdWx0U2V0LCBhcnJheVtpXSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICB2YXIgaGFzT3duID0ge30uaGFzT3duUHJvcGVydHk7CisKKyAgICAg
ICAgZnVuY3Rpb24gX3BhcnNlTnVtYmVyIChyZXN1bHRTZXQsIG51bSkgeworICAgICAgICAgICAg
cmVzdWx0U2V0W251bV0gPSB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gX3Bh
cnNlT2JqZWN0IChyZXN1bHRTZXQsIG9iamVjdCkgeworICAgICAgICAgICAgZm9yICh2YXIgayBp
biBvYmplY3QpIHsKKyAgICAgICAgICAgICAgICBpZiAoaGFzT3duLmNhbGwob2JqZWN0LCBrKSkg
eworICAgICAgICAgICAgICAgICAgICAvLyBzZXQgdmFsdWUgdG8gZmFsc2UgaW5zdGVhZCBvZiBk
ZWxldGluZyBpdCB0byBhdm9pZCBjaGFuZ2luZyBvYmplY3Qgc3RydWN0dXJlCisgICAgICAgICAg
ICAgICAgICAgIC8vIGh0dHBzOi8vd3d3LnNtYXNoaW5nbWFnYXppbmUuY29tLzIwMTIvMTEvd3Jp
dGluZy1mYXN0LW1lbW9yeS1lZmZpY2llbnQtamF2YXNjcmlwdC8jZGUtcmVmZXJlbmNpbmctbWlz
Y29uY2VwdGlvbnMKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0U2V0W2tdID0gISFvYmplY3Rb
a107CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgdmFyIFNQQUNFID0gL1xzKy87CisgICAgICAgIGZ1bmN0aW9uIF9wYXJzZVN0cmluZyAocmVz
dWx0U2V0LCBzdHIpIHsKKyAgICAgICAgICAgIHZhciBhcnJheSA9IHN0ci5zcGxpdChTUEFDRSk7
CisgICAgICAgICAgICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoOworCisgICAgICAgICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0
U2V0W2FycmF5W2ldXSA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICBmdW5jdGlvbiBfcGFyc2UgKHJlc3VsdFNldCwgYXJnKSB7CisgICAgICAgICAgICBpZiAoIWFy
ZykgcmV0dXJuOworICAgICAgICAgICAgdmFyIGFyZ1R5cGUgPSB0eXBlb2YgYXJnOworCisgICAg
ICAgICAgICAvLyAnZm9vIGJhcicKKyAgICAgICAgICAgIGlmIChhcmdUeXBlID09PSAnc3RyaW5n
JykgeworICAgICAgICAgICAgICAgIF9wYXJzZVN0cmluZyhyZXN1bHRTZXQsIGFyZyk7CisKKyAg
ICAgICAgICAgIC8vIFsnZm9vJywgJ2JhcicsIC4uLl0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAo
QXJyYXkuaXNBcnJheShhcmcpKSB7CisgICAgICAgICAgICAgICAgX3BhcnNlQXJyYXkocmVzdWx0
U2V0LCBhcmcpOworCisgICAgICAgICAgICAvLyB7ICdmb28nOiB0cnVlLCAuLi4gfQorICAgICAg
ICAgICAgfSBlbHNlIGlmIChhcmdUeXBlID09PSAnb2JqZWN0JykgeworICAgICAgICAgICAgICAg
IF9wYXJzZU9iamVjdChyZXN1bHRTZXQsIGFyZyk7CisKKyAgICAgICAgICAgIC8vICcxMzAnCisg
ICAgICAgICAgICB9IGVsc2UgaWYgKGFyZ1R5cGUgPT09ICdudW1iZXInKSB7CisgICAgICAgICAg
ICAgICAgX3BhcnNlTnVtYmVyKHJlc3VsdFNldCwgYXJnKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIGZ1bmN0aW9uIF9jbGFzc05hbWVzICgpIHsKKyAgICAgICAgICAgIC8v
IGRvbid0IGxlYWsgYXJndW1lbnRzCisgICAgICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20v
cGV0a2FhbnRvbm92L2JsdWViaXJkL3dpa2kvT3B0aW1pemF0aW9uLWtpbGxlcnMjMzItbGVha2lu
Zy1hcmd1bWVudHMKKyAgICAgICAgICAgIHZhciBsZW4gPSBhcmd1bWVudHMubGVuZ3RoOworICAg
ICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheShsZW4pOworICAgICAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBsZW47IGkrKykgeworICAgICAgICAgICAgICAgIGFyZ3NbaV0gPSBhcmd1bWVudHNb
aV07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZhciBjbGFzc1NldCA9IG5ldyBTdG9y
YWdlT2JqZWN0KCk7CisgICAgICAgICAgICBfcGFyc2VBcnJheShjbGFzc1NldCwgYXJncyk7CisK
KyAgICAgICAgICAgIHZhciBsaXN0ID0gW107CisKKyAgICAgICAgICAgIGZvciAodmFyIGsgaW4g
Y2xhc3NTZXQpIHsKKyAgICAgICAgICAgICAgICBpZiAoY2xhc3NTZXRba10pIHsKKyAgICAgICAg
ICAgICAgICAgICAgbGlzdC5wdXNoKGspCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorCisgICAgICAgICAgICByZXR1cm4gbGlzdC5qb2luKCcgJyk7CisgICAgICAgIH0KKworICAg
ICAgICByZXR1cm4gX2NsYXNzTmFtZXM7CisgICAgfSkoKTsKKworICAgIGlmICh0eXBlb2YgbW9k
dWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykgeworICAgICAgICBtb2R1bGUu
ZXhwb3J0cyA9IGNsYXNzTmFtZXM7CisgICAgfSBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSAn
ZnVuY3Rpb24nICYmIHR5cGVvZiBkZWZpbmUuYW1kID09PSAnb2JqZWN0JyAmJiBkZWZpbmUuYW1k
KSB7CisgICAgICAgIC8vIHJlZ2lzdGVyIGFzICdjbGFzc25hbWVzJywgY29uc2lzdGVudCB3aXRo
IG5wbSBwYWNrYWdlIG5hbWUKKyAgICAgICAgZGVmaW5lKCdjbGFzc25hbWVzJywgW10sIGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiBjbGFzc05hbWVzOworICAgICAgICB9KTsKKyAg
ICB9IGVsc2UgeworICAgICAgICB3aW5kb3cuY2xhc3NOYW1lcyA9IGNsYXNzTmFtZXM7CisgICAg
fQorfSgpKTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3Vy
Y2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L25vZGVfbW9kdWxlcy9jbGFz
c25hbWVzL2luZGV4LmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMv
dG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3Qvbm9kZV9tb2R1bGVzL2NsYXNzbmFt
ZXMvaW5kZXguanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzhmMGZmMmJmOTBhMjkzZjQzMGZlOTc4ZDk0ZmEwYjU3
ZWFjODUxOAotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIv
cmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L25vZGVfbW9kdWxl
cy9jbGFzc25hbWVzL2luZGV4LmpzCkBAIC0wLDAgKzEsNDggQEAKKy8qIQorICBDb3B5cmlnaHQg
KGMpIDIwMTYgSmVkIFdhdHNvbi4KKyAgTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlIChN
SVQpLCBzZWUKKyAgaHR0cDovL2plZHdhdHNvbi5naXRodWIuaW8vY2xhc3NuYW1lcworKi8KKy8q
IGdsb2JhbCBkZWZpbmUgKi8KKworKGZ1bmN0aW9uICgpIHsKKyAgICAndXNlIHN0cmljdCc7CisK
KyAgICB2YXIgaGFzT3duID0ge30uaGFzT3duUHJvcGVydHk7CisKKyAgICBmdW5jdGlvbiBjbGFz
c05hbWVzICgpIHsKKyAgICAgICAgdmFyIGNsYXNzZXMgPSBbXTsKKworICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgdmFyIGFy
ZyA9IGFyZ3VtZW50c1tpXTsKKyAgICAgICAgICAgIGlmICghYXJnKSBjb250aW51ZTsKKworICAg
ICAgICAgICAgdmFyIGFyZ1R5cGUgPSB0eXBlb2YgYXJnOworCisgICAgICAgICAgICBpZiAoYXJn
VHlwZSA9PT0gJ3N0cmluZycgfHwgYXJnVHlwZSA9PT0gJ251bWJlcicpIHsKKyAgICAgICAgICAg
ICAgICBjbGFzc2VzLnB1c2goYXJnKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNB
cnJheShhcmcpKSB7CisgICAgICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKGNsYXNzTmFtZXMuYXBw
bHkobnVsbCwgYXJnKSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGFyZ1R5cGUgPT09ICdvYmpl
Y3QnKSB7CisgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIGFyZykgeworICAgICAgICAg
ICAgICAgICAgICBpZiAoaGFzT3duLmNhbGwoYXJnLCBrZXkpICYmIGFyZ1trZXldKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBjbGFzc2VzLnB1c2goa2V5KTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIHJldHVybiBjbGFzc2VzLmpvaW4oJyAnKTsKKyAgICB9CisKKyAgICBpZiAodHlwZW9mIG1v
ZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHsKKyAgICAgICAgbW9kdWxl
LmV4cG9ydHMgPSBjbGFzc05hbWVzOworICAgIH0gZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0g
J2Z1bmN0aW9uJyAmJiB0eXBlb2YgZGVmaW5lLmFtZCA9PT0gJ29iamVjdCcgJiYgZGVmaW5lLmFt
ZCkgeworICAgICAgICAvLyByZWdpc3RlciBhcyAnY2xhc3NuYW1lcycsIGNvbnNpc3RlbnQgd2l0
aCBucG0gcGFja2FnZSBuYW1lCisgICAgICAgIGRlZmluZSgnY2xhc3NuYW1lcycsIFtdLCBmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gY2xhc3NOYW1lczsKKyAgICAgICAgfSk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgd2luZG93LmNsYXNzTmFtZXMgPSBjbGFzc05hbWVzOworICAg
IH0KK30oKSk7CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291
cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9ub2RlX21vZHVsZXMvcmVh
Y3QtZG9tL2Rpc3QvcmVhY3QtZG9tLm1pbi5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0
ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L25vZGVfbW9k
dWxlcy9yZWFjdC1kb20vZGlzdC9yZWFjdC1kb20ubWluLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMyNjFlZGRk
NjYwMjNhOWY4MjI1Zjk1MThmMmI3OTQyNjQ0NjliZTUKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJm
b3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1l
eGFtcGxlcy9yZWFjdC9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2Rpc3QvcmVhY3QtZG9tLm1pbi5q
cwpAQCAtMCwwICsxLDE2IEBACisvKioKKyAqIFJlYWN0RE9NIHYxNS41LjQKKyAqCisgKiBDb3B5
cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5
bGUgbGljZW5zZSBmb3VuZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJl
Y3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAorICogb2YgcGF0
ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBk
aXJlY3RvcnkuCisgKgorICovCishZnVuY3Rpb24oZSl7aWYoIm9iamVjdCI9PXR5cGVvZiBleHBv
cnRzJiYidW5kZWZpbmVkIiE9dHlwZW9mIG1vZHVsZSltb2R1bGUuZXhwb3J0cz1lKHJlcXVpcmUo
InJlYWN0IikpO2Vsc2UgaWYoImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZClk
ZWZpbmUoWyJyZWFjdCJdLGUpO2Vsc2V7dmFyIHQ7dD0idW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRv
dz93aW5kb3c6InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10
eXBlb2Ygc2VsZj9zZWxmOnRoaXMsdC5SZWFjdERPTT1lKHQuUmVhY3QpfX0oZnVuY3Rpb24oZSl7
cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBlKHQs
bixyKXtmdW5jdGlvbiBvKGEscyl7aWYoIW5bYV0pe2lmKCF0W2FdKXt2YXIgdT0iZnVuY3Rpb24i
PT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtpZighcyYmdSlyZXR1cm4gdShhLCEwKTtpZihpKXJl
dHVybiBpKGEsITApO3ZhciBsPW5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK2ErIici
KTt0aHJvdyBsLmNvZGU9Ik1PRFVMRV9OT1RfRk9VTkQiLGx9dmFyIGM9blthXT17ZXhwb3J0czp7
fX07dFthXVswXS5jYWxsKGMuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W2FdWzFdW2VdO3Jl
dHVybiBvKG58fGUpfSxjLGMuZXhwb3J0cyxlLHQsbixyKX1yZXR1cm4gblthXS5leHBvcnRzfWZv
cih2YXIgaT0iZnVuY3Rpb24iPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZSxhPTA7YTxyLmxlbmd0
aDthKyspbyhyW2FdKTtyZXR1cm4gb30oezE6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7
dmFyIHI9e1Byb3BlcnRpZXM6eyJhcmlhLWN1cnJlbnQiOjAsImFyaWEtZGV0YWlscyI6MCwiYXJp
YS1kaXNhYmxlZCI6MCwiYXJpYS1oaWRkZW4iOjAsImFyaWEtaW52YWxpZCI6MCwiYXJpYS1rZXlz
aG9ydGN1dHMiOjAsImFyaWEtbGFiZWwiOjAsImFyaWEtcm9sZWRlc2NyaXB0aW9uIjowLCJhcmlh
LWF1dG9jb21wbGV0ZSI6MCwiYXJpYS1jaGVja2VkIjowLCJhcmlhLWV4cGFuZGVkIjowLCJhcmlh
LWhhc3BvcHVwIjowLCJhcmlhLWxldmVsIjowLCJhcmlhLW1vZGFsIjowLCJhcmlhLW11bHRpbGlu
ZSI6MCwiYXJpYS1tdWx0aXNlbGVjdGFibGUiOjAsImFyaWEtb3JpZW50YXRpb24iOjAsImFyaWEt
cGxhY2Vob2xkZXIiOjAsImFyaWEtcHJlc3NlZCI6MCwiYXJpYS1yZWFkb25seSI6MCwiYXJpYS1y
ZXF1aXJlZCI6MCwiYXJpYS1zZWxlY3RlZCI6MCwiYXJpYS1zb3J0IjowLCJhcmlhLXZhbHVlbWF4
IjowLCJhcmlhLXZhbHVlbWluIjowLCJhcmlhLXZhbHVlbm93IjowLCJhcmlhLXZhbHVldGV4dCI6
MCwiYXJpYS1hdG9taWMiOjAsImFyaWEtYnVzeSI6MCwiYXJpYS1saXZlIjowLCJhcmlhLXJlbGV2
YW50IjowLCJhcmlhLWRyb3BlZmZlY3QiOjAsImFyaWEtZ3JhYmJlZCI6MCwiYXJpYS1hY3RpdmVk
ZXNjZW5kYW50IjowLCJhcmlhLWNvbGNvdW50IjowLCJhcmlhLWNvbGluZGV4IjowLCJhcmlhLWNv
bHNwYW4iOjAsImFyaWEtY29udHJvbHMiOjAsImFyaWEtZGVzY3JpYmVkYnkiOjAsImFyaWEtZXJy
b3JtZXNzYWdlIjowLCJhcmlhLWZsb3d0byI6MCwiYXJpYS1sYWJlbGxlZGJ5IjowLCJhcmlhLW93
bnMiOjAsImFyaWEtcG9zaW5zZXQiOjAsImFyaWEtcm93Y291bnQiOjAsImFyaWEtcm93aW5kZXgi
OjAsImFyaWEtcm93c3BhbiI6MCwiYXJpYS1zZXRzaXplIjowfSxET01BdHRyaWJ1dGVOYW1lczp7
fSxET01Qcm9wZXJ0eU5hbWVzOnt9fTt0LmV4cG9ydHM9cn0se31dLDI6W2Z1bmN0aW9uKGUsdCxu
KXsidXNlIHN0cmljdCI7dmFyIHI9ZSgzMyksbz1lKDEzMSksaT17Zm9jdXNET01Db21wb25lbnQ6
ZnVuY3Rpb24oKXtvKHIuZ2V0Tm9kZUZyb21JbnN0YW5jZSh0aGlzKSl9fTt0LmV4cG9ydHM9aX0s
ezEzMToxMzEsMzM6MzN9XSwzOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9u
IHIoZSl7cmV0dXJuKGUuY3RybEtleXx8ZS5hbHRLZXl8fGUubWV0YUtleSkmJiEoZS5jdHJsS2V5
JiZlLmFsdEtleSl9ZnVuY3Rpb24gbyhlKXtzd2l0Y2goZSl7Y2FzZSJ0b3BDb21wb3NpdGlvblN0
YXJ0IjpyZXR1cm4gVC5jb21wb3NpdGlvblN0YXJ0O2Nhc2UidG9wQ29tcG9zaXRpb25FbmQiOnJl
dHVybiBULmNvbXBvc2l0aW9uRW5kO2Nhc2UidG9wQ29tcG9zaXRpb25VcGRhdGUiOnJldHVybiBU
LmNvbXBvc2l0aW9uVXBkYXRlfX1mdW5jdGlvbiBpKGUsdCl7cmV0dXJuInRvcEtleURvd24iPT09
ZSYmdC5rZXlDb2RlPT09eX1mdW5jdGlvbiBhKGUsdCl7c3dpdGNoKGUpe2Nhc2UidG9wS2V5VXAi
OnJldHVybi0xIT09Zy5pbmRleE9mKHQua2V5Q29kZSk7Y2FzZSJ0b3BLZXlEb3duIjpyZXR1cm4g
dC5rZXlDb2RlIT09eTtjYXNlInRvcEtleVByZXNzIjpjYXNlInRvcE1vdXNlRG93biI6Y2FzZSJ0
b3BCbHVyIjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX1mdW5jdGlvbiBzKGUpe3ZhciB0PWUu
ZGV0YWlsO3JldHVybiJvYmplY3QiPT10eXBlb2YgdCYmImRhdGEiaW4gdD90LmRhdGE6bnVsbH1m
dW5jdGlvbiB1KGUsdCxuLHIpe3ZhciB1LGw7aWYoXz91PW8oZSk6UD9hKGUsbikmJih1PVQuY29t
cG9zaXRpb25FbmQpOmkoZSxuKSYmKHU9VC5jb21wb3NpdGlvblN0YXJ0KSwhdSlyZXR1cm4gbnVs
bDtFJiYoUHx8dSE9PVQuY29tcG9zaXRpb25TdGFydD91PT09VC5jb21wb3NpdGlvbkVuZCYmUCYm
KGw9UC5nZXREYXRhKCkpOlA9aC5nZXRQb29sZWQocikpO3ZhciBjPW0uZ2V0UG9vbGVkKHUsdCxu
LHIpO2lmKGwpYy5kYXRhPWw7ZWxzZXt2YXIgcD1zKG4pO251bGwhPT1wJiYoYy5kYXRhPXApfXJl
dHVybiBkLmFjY3VtdWxhdGVUd29QaGFzZURpc3BhdGNoZXMoYyksY31mdW5jdGlvbiBsKGUsdCl7
c3dpdGNoKGUpe2Nhc2UidG9wQ29tcG9zaXRpb25FbmQiOnJldHVybiBzKHQpO2Nhc2UidG9wS2V5
UHJlc3MiOnJldHVybiB0LndoaWNoIT09eD9udWxsOihrPSEwLHcpO2Nhc2UidG9wVGV4dElucHV0
Ijp2YXIgbj10LmRhdGE7cmV0dXJuIG49PT13JiZrP251bGw6bjtkZWZhdWx0OnJldHVybiBudWxs
fX1mdW5jdGlvbiBjKGUsdCl7aWYoUCl7aWYoInRvcENvbXBvc2l0aW9uRW5kIj09PWV8fCFfJiZh
KGUsdCkpe3ZhciBuPVAuZ2V0RGF0YSgpO3JldHVybiBoLnJlbGVhc2UoUCksUD1udWxsLG59cmV0
dXJuIG51bGx9c3dpdGNoKGUpe2Nhc2UidG9wUGFzdGUiOnJldHVybiBudWxsO2Nhc2UidG9wS2V5
UHJlc3MiOnJldHVybiB0LndoaWNoJiYhcih0KT9TdHJpbmcuZnJvbUNoYXJDb2RlKHQud2hpY2gp
Om51bGw7Y2FzZSJ0b3BDb21wb3NpdGlvbkVuZCI6cmV0dXJuIEU/bnVsbDp0LmRhdGE7ZGVmYXVs
dDpyZXR1cm4gbnVsbH19ZnVuY3Rpb24gcChlLHQsbixyKXt2YXIgbztpZighKG89Yj9sKGUsbik6
YyhlLG4pKSlyZXR1cm4gbnVsbDt2YXIgaT12LmdldFBvb2xlZChULmJlZm9yZUlucHV0LHQsbixy
KTtyZXR1cm4gaS5kYXRhPW8sZC5hY2N1bXVsYXRlVHdvUGhhc2VEaXNwYXRjaGVzKGkpLGl9dmFy
IGQ9ZSgxOSksZj1lKDEyMyksaD1lKDIwKSxtPWUoNzgpLHY9ZSg4MiksZz1bOSwxMywyNywzMl0s
eT0yMjksXz1mLmNhblVzZURPTSYmIkNvbXBvc2l0aW9uRXZlbnQiaW4gd2luZG93LEM9bnVsbDtm
LmNhblVzZURPTSYmImRvY3VtZW50TW9kZSJpbiBkb2N1bWVudCYmKEM9ZG9jdW1lbnQuZG9jdW1l
bnRNb2RlKTt2YXIgYj1mLmNhblVzZURPTSYmIlRleHRFdmVudCJpbiB3aW5kb3cmJiFDJiYhZnVu
Y3Rpb24oKXt2YXIgZT13aW5kb3cub3BlcmE7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBlJiYiZnVu
Y3Rpb24iPT10eXBlb2YgZS52ZXJzaW9uJiZwYXJzZUludChlLnZlcnNpb24oKSwxMCk8PTEyfSgp
LEU9Zi5jYW5Vc2VET00mJighX3x8QyYmQz44JiZDPD0xMSkseD0zMix3PVN0cmluZy5mcm9tQ2hh
ckNvZGUoeCksVD17YmVmb3JlSW5wdXQ6e3BoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOntidWJibGVk
OiJvbkJlZm9yZUlucHV0IixjYXB0dXJlZDoib25CZWZvcmVJbnB1dENhcHR1cmUifSxkZXBlbmRl
bmNpZXM6WyJ0b3BDb21wb3NpdGlvbkVuZCIsInRvcEtleVByZXNzIiwidG9wVGV4dElucHV0Iiwi
dG9wUGFzdGUiXX0sY29tcG9zaXRpb25FbmQ6e3BoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOntidWJi
bGVkOiJvbkNvbXBvc2l0aW9uRW5kIixjYXB0dXJlZDoib25Db21wb3NpdGlvbkVuZENhcHR1cmUi
fSxkZXBlbmRlbmNpZXM6WyJ0b3BCbHVyIiwidG9wQ29tcG9zaXRpb25FbmQiLCJ0b3BLZXlEb3du
IiwidG9wS2V5UHJlc3MiLCJ0b3BLZXlVcCIsInRvcE1vdXNlRG93biJdfSxjb21wb3NpdGlvblN0
YXJ0OntwaGFzZWRSZWdpc3RyYXRpb25OYW1lczp7YnViYmxlZDoib25Db21wb3NpdGlvblN0YXJ0
IixjYXB0dXJlZDoib25Db21wb3NpdGlvblN0YXJ0Q2FwdHVyZSJ9LGRlcGVuZGVuY2llczpbInRv
cEJsdXIiLCJ0b3BDb21wb3NpdGlvblN0YXJ0IiwidG9wS2V5RG93biIsInRvcEtleVByZXNzIiwi
dG9wS2V5VXAiLCJ0b3BNb3VzZURvd24iXX0sY29tcG9zaXRpb25VcGRhdGU6e3BoYXNlZFJlZ2lz
dHJhdGlvbk5hbWVzOntidWJibGVkOiJvbkNvbXBvc2l0aW9uVXBkYXRlIixjYXB0dXJlZDoib25D
b21wb3NpdGlvblVwZGF0ZUNhcHR1cmUifSxkZXBlbmRlbmNpZXM6WyJ0b3BCbHVyIiwidG9wQ29t
cG9zaXRpb25VcGRhdGUiLCJ0b3BLZXlEb3duIiwidG9wS2V5UHJlc3MiLCJ0b3BLZXlVcCIsInRv
cE1vdXNlRG93biJdfX0saz0hMSxQPW51bGwsUz17ZXZlbnRUeXBlczpULGV4dHJhY3RFdmVudHM6
ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuW3UoZSx0LG4scikscChlLHQsbixyKV19fTt0LmV4cG9y
dHM9U30sezEyMzoxMjMsMTk6MTksMjA6MjAsNzg6NzgsODI6ODJ9XSw0OltmdW5jdGlvbihlLHQs
bil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm4gZSt0LmNoYXJBdCgwKS50b1Vw
cGVyQ2FzZSgpK3Quc3Vic3RyaW5nKDEpfXZhciBvPXthbmltYXRpb25JdGVyYXRpb25Db3VudDoh
MCxib3JkZXJJbWFnZU91dHNldDohMCxib3JkZXJJbWFnZVNsaWNlOiEwLGJvcmRlckltYWdlV2lk
dGg6ITAsYm94RmxleDohMCxib3hGbGV4R3JvdXA6ITAsYm94T3JkaW5hbEdyb3VwOiEwLGNvbHVt
bkNvdW50OiEwLGZsZXg6ITAsZmxleEdyb3c6ITAsZmxleFBvc2l0aXZlOiEwLGZsZXhTaHJpbms6
ITAsZmxleE5lZ2F0aXZlOiEwLGZsZXhPcmRlcjohMCxncmlkUm93OiEwLGdyaWRDb2x1bW46ITAs
Zm9udFdlaWdodDohMCxsaW5lQ2xhbXA6ITAsbGluZUhlaWdodDohMCxvcGFjaXR5OiEwLG9yZGVy
OiEwLG9ycGhhbnM6ITAsdGFiU2l6ZTohMCx3aWRvd3M6ITAsekluZGV4OiEwLHpvb206ITAsZmls
bE9wYWNpdHk6ITAsZmxvb2RPcGFjaXR5OiEwLHN0b3BPcGFjaXR5OiEwLHN0cm9rZURhc2hhcnJh
eTohMCxzdHJva2VEYXNob2Zmc2V0OiEwLHN0cm9rZU1pdGVybGltaXQ6ITAsc3Ryb2tlT3BhY2l0
eTohMCxzdHJva2VXaWR0aDohMH0saT1bIldlYmtpdCIsIm1zIiwiTW96IiwiTyJdO09iamVjdC5r
ZXlzKG8pLmZvckVhY2goZnVuY3Rpb24oZSl7aS5mb3JFYWNoKGZ1bmN0aW9uKHQpe29bcih0LGUp
XT1vW2VdfSl9KTt2YXIgYT17YmFja2dyb3VuZDp7YmFja2dyb3VuZEF0dGFjaG1lbnQ6ITAsYmFj
a2dyb3VuZENvbG9yOiEwLGJhY2tncm91bmRJbWFnZTohMCxiYWNrZ3JvdW5kUG9zaXRpb25YOiEw
LGJhY2tncm91bmRQb3NpdGlvblk6ITAsYmFja2dyb3VuZFJlcGVhdDohMH0sYmFja2dyb3VuZFBv
c2l0aW9uOntiYWNrZ3JvdW5kUG9zaXRpb25YOiEwLGJhY2tncm91bmRQb3NpdGlvblk6ITB9LGJv
cmRlcjp7Ym9yZGVyV2lkdGg6ITAsYm9yZGVyU3R5bGU6ITAsYm9yZGVyQ29sb3I6ITB9LGJvcmRl
ckJvdHRvbTp7Ym9yZGVyQm90dG9tV2lkdGg6ITAsYm9yZGVyQm90dG9tU3R5bGU6ITAsYm9yZGVy
Qm90dG9tQ29sb3I6ITB9LGJvcmRlckxlZnQ6e2JvcmRlckxlZnRXaWR0aDohMCxib3JkZXJMZWZ0
U3R5bGU6ITAsYm9yZGVyTGVmdENvbG9yOiEwfSxib3JkZXJSaWdodDp7Ym9yZGVyUmlnaHRXaWR0
aDohMCxib3JkZXJSaWdodFN0eWxlOiEwLGJvcmRlclJpZ2h0Q29sb3I6ITB9LGJvcmRlclRvcDp7
Ym9yZGVyVG9wV2lkdGg6ITAsYm9yZGVyVG9wU3R5bGU6ITAsYm9yZGVyVG9wQ29sb3I6ITB9LGZv
bnQ6e2ZvbnRTdHlsZTohMCxmb250VmFyaWFudDohMCxmb250V2VpZ2h0OiEwLGZvbnRTaXplOiEw
LGxpbmVIZWlnaHQ6ITAsZm9udEZhbWlseTohMH0sb3V0bGluZTp7b3V0bGluZVdpZHRoOiEwLG91
dGxpbmVTdHlsZTohMCxvdXRsaW5lQ29sb3I6ITB9fSxzPXtpc1VuaXRsZXNzTnVtYmVyOm8sc2hv
cnRoYW5kUHJvcGVydHlFeHBhbnNpb25zOmF9O3QuZXhwb3J0cz1zfSx7fV0sNTpbZnVuY3Rpb24o
ZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKDQpLG89ZSgxMjMpLGk9KGUoNTgpLGUoMTI1KSxl
KDk0KSksYT1lKDEzNikscz1lKDE0MCksdT0oZSgxNDIpLHMoZnVuY3Rpb24oZSl7cmV0dXJuIGEo
ZSl9KSksbD0hMSxjPSJjc3NGbG9hdCI7aWYoby5jYW5Vc2VET00pe3ZhciBwPWRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoImRpdiIpLnN0eWxlO3RyeXtwLmZvbnQ9IiJ9Y2F0Y2goZSl7bD0hMH12b2lk
IDA9PT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuY3NzRmxvYXQmJihjPSJzdHlsZUZs
b2F0Iil9dmFyIGQ9e2NyZWF0ZU1hcmt1cEZvclN0eWxlczpmdW5jdGlvbihlLHQpe3ZhciBuPSIi
O2Zvcih2YXIgciBpbiBlKWlmKGUuaGFzT3duUHJvcGVydHkocikpe3ZhciBvPWVbcl07bnVsbCE9
byYmKG4rPXUocikrIjoiLG4rPWkocixvLHQpKyI7Iil9cmV0dXJuIG58fG51bGx9LHNldFZhbHVl
Rm9yU3R5bGVzOmZ1bmN0aW9uKGUsdCxuKXt2YXIgbz1lLnN0eWxlO2Zvcih2YXIgYSBpbiB0KWlm
KHQuaGFzT3duUHJvcGVydHkoYSkpe3ZhciBzPWkoYSx0W2FdLG4pO2lmKCJmbG9hdCIhPT1hJiYi
Y3NzRmxvYXQiIT09YXx8KGE9YykscylvW2FdPXM7ZWxzZXt2YXIgdT1sJiZyLnNob3J0aGFuZFBy
b3BlcnR5RXhwYW5zaW9uc1thXTtpZih1KWZvcih2YXIgcCBpbiB1KW9bcF09IiI7ZWxzZSBvW2Fd
PSIifX19fTt0LmV4cG9ydHM9ZH0sezEyMzoxMjMsMTI1OjEyNSwxMzY6MTM2LDE0MDoxNDAsMTQy
OjE0Miw0OjQsNTg6NTgsOTQ6OTR9XSw2OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1
bmN0aW9uIHIoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJD
YW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX12YXIgbz1lKDExMiksaT1lKDI0KSxh
PShlKDEzNyksZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3IodGhpcyxlKSx0aGlzLl9jYWxsYmFj
a3M9bnVsbCx0aGlzLl9jb250ZXh0cz1udWxsLHRoaXMuX2FyZz10fXJldHVybiBlLnByb3RvdHlw
ZS5lbnF1ZXVlPWZ1bmN0aW9uKGUsdCl7dGhpcy5fY2FsbGJhY2tzPXRoaXMuX2NhbGxiYWNrc3x8
W10sdGhpcy5fY2FsbGJhY2tzLnB1c2goZSksdGhpcy5fY29udGV4dHM9dGhpcy5fY29udGV4dHN8
fFtdLHRoaXMuX2NvbnRleHRzLnB1c2godCl9LGUucHJvdG90eXBlLm5vdGlmeUFsbD1mdW5jdGlv
bigpe3ZhciBlPXRoaXMuX2NhbGxiYWNrcyx0PXRoaXMuX2NvbnRleHRzLG49dGhpcy5fYXJnO2lm
KGUmJnQpe2UubGVuZ3RoIT09dC5sZW5ndGgmJm8oIjI0IiksdGhpcy5fY2FsbGJhY2tzPW51bGws
dGhpcy5fY29udGV4dHM9bnVsbDtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyllW3JdLmNhbGwo
dFtyXSxuKTtlLmxlbmd0aD0wLHQubGVuZ3RoPTB9fSxlLnByb3RvdHlwZS5jaGVja3BvaW50PWZ1
bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGxiYWNrcz90aGlzLl9jYWxsYmFja3MubGVuZ3RoOjB9
LGUucHJvdG90eXBlLnJvbGxiYWNrPWZ1bmN0aW9uKGUpe3RoaXMuX2NhbGxiYWNrcyYmdGhpcy5f
Y29udGV4dHMmJih0aGlzLl9jYWxsYmFja3MubGVuZ3RoPWUsdGhpcy5fY29udGV4dHMubGVuZ3Ro
PWUpfSxlLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMuX2NhbGxiYWNrcz1udWxsLHRo
aXMuX2NvbnRleHRzPW51bGx9LGUucHJvdG90eXBlLmRlc3RydWN0b3I9ZnVuY3Rpb24oKXt0aGlz
LnJlc2V0KCl9LGV9KCkpO3QuZXhwb3J0cz1pLmFkZFBvb2xpbmdUbyhhKX0sezExMjoxMTIsMTM3
OjEzNywyNDoyNH1dLDc6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihl
KXt2YXIgdD1lLm5vZGVOYW1lJiZlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuInNlbGVj
dCI9PT10fHwiaW5wdXQiPT09dCYmImZpbGUiPT09ZS50eXBlfWZ1bmN0aW9uIG8oZSl7dmFyIHQ9
dy5nZXRQb29sZWQoUy5jaGFuZ2UsTSxlLFQoZSkpO0MuYWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0
Y2hlcyh0KSx4LmJhdGNoZWRVcGRhdGVzKGksdCl9ZnVuY3Rpb24gaShlKXtfLmVucXVldWVFdmVu
dHMoZSksXy5wcm9jZXNzRXZlbnRRdWV1ZSghMSl9ZnVuY3Rpb24gYShlLHQpe049ZSxNPXQsTi5h
dHRhY2hFdmVudCgib25jaGFuZ2UiLG8pfWZ1bmN0aW9uIHMoKXtOJiYoTi5kZXRhY2hFdmVudCgi
b25jaGFuZ2UiLG8pLE49bnVsbCxNPW51bGwpfWZ1bmN0aW9uIHUoZSx0KXtpZigidG9wQ2hhbmdl
Ij09PWUpcmV0dXJuIHR9ZnVuY3Rpb24gbChlLHQsbil7InRvcEZvY3VzIj09PWU/KHMoKSxhKHQs
bikpOiJ0b3BCbHVyIj09PWUmJnMoKX1mdW5jdGlvbiBjKGUsdCl7Tj1lLE09dCxJPWUudmFsdWUs
Tz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUuY29uc3RydWN0b3IucHJvdG90eXBl
LCJ2YWx1ZSIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShOLCJ2YWx1ZSIsRCksTi5hdHRhY2hFdmVu
dD9OLmF0dGFjaEV2ZW50KCJvbnByb3BlcnR5Y2hhbmdlIixkKTpOLmFkZEV2ZW50TGlzdGVuZXIo
InByb3BlcnR5Y2hhbmdlIixkLCExKX1mdW5jdGlvbiBwKCl7TiYmKGRlbGV0ZSBOLnZhbHVlLE4u
ZGV0YWNoRXZlbnQ/Ti5kZXRhY2hFdmVudCgib25wcm9wZXJ0eWNoYW5nZSIsZCk6Ti5yZW1vdmVF
dmVudExpc3RlbmVyKCJwcm9wZXJ0eWNoYW5nZSIsZCwhMSksTj1udWxsLE09bnVsbCxJPW51bGws
Tz1udWxsKX1mdW5jdGlvbiBkKGUpe2lmKCJ2YWx1ZSI9PT1lLnByb3BlcnR5TmFtZSl7dmFyIHQ9
ZS5zcmNFbGVtZW50LnZhbHVlO3QhPT1JJiYoST10LG8oZSkpfX1mdW5jdGlvbiBmKGUsdCl7aWYo
InRvcElucHV0Ij09PWUpcmV0dXJuIHR9ZnVuY3Rpb24gaChlLHQsbil7InRvcEZvY3VzIj09PWU/
KHAoKSxjKHQsbikpOiJ0b3BCbHVyIj09PWUmJnAoKX1mdW5jdGlvbiBtKGUsdCl7aWYoKCJ0b3BT
ZWxlY3Rpb25DaGFuZ2UiPT09ZXx8InRvcEtleVVwIj09PWV8fCJ0b3BLZXlEb3duIj09PWUpJiZO
JiZOLnZhbHVlIT09SSlyZXR1cm4gST1OLnZhbHVlLE19ZnVuY3Rpb24gdihlKXtyZXR1cm4gZS5u
b2RlTmFtZSYmImlucHV0Ij09PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSYmKCJjaGVja2JveCI9
PT1lLnR5cGV8fCJyYWRpbyI9PT1lLnR5cGUpfWZ1bmN0aW9uIGcoZSx0KXtpZigidG9wQ2xpY2si
PT09ZSlyZXR1cm4gdH1mdW5jdGlvbiB5KGUsdCl7aWYobnVsbCE9ZSl7dmFyIG49ZS5fd3JhcHBl
clN0YXRlfHx0Ll93cmFwcGVyU3RhdGU7aWYobiYmbi5jb250cm9sbGVkJiYibnVtYmVyIj09PXQu
dHlwZSl7dmFyIHI9IiIrdC52YWx1ZTt0LmdldEF0dHJpYnV0ZSgidmFsdWUiKSE9PXImJnQuc2V0
QXR0cmlidXRlKCJ2YWx1ZSIscil9fX12YXIgXz1lKDE2KSxDPWUoMTkpLGI9ZSgxMjMpLEU9ZSgz
MykseD1lKDcxKSx3PWUoODApLFQ9ZSgxMDIpLGs9ZSgxMDkpLFA9ZSgxMTApLFM9e2NoYW5nZTp7
cGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6e2J1YmJsZWQ6Im9uQ2hhbmdlIixjYXB0dXJlZDoib25D
aGFuZ2VDYXB0dXJlIn0sZGVwZW5kZW5jaWVzOlsidG9wQmx1ciIsInRvcENoYW5nZSIsInRvcENs
aWNrIiwidG9wRm9jdXMiLCJ0b3BJbnB1dCIsInRvcEtleURvd24iLCJ0b3BLZXlVcCIsInRvcFNl
bGVjdGlvbkNoYW5nZSJdfX0sTj1udWxsLE09bnVsbCxJPW51bGwsTz1udWxsLFI9ITE7Yi5jYW5V
c2VET00mJihSPWsoImNoYW5nZSIpJiYoIWRvY3VtZW50LmRvY3VtZW50TW9kZXx8ZG9jdW1lbnQu
ZG9jdW1lbnRNb2RlPjgpKTt2YXIgQT0hMTtiLmNhblVzZURPTSYmKEE9aygiaW5wdXQiKSYmKCFk
b2N1bWVudC5kb2N1bWVudE1vZGV8fGRvY3VtZW50LmRvY3VtZW50TW9kZT4xMSkpO3ZhciBEPXtn
ZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gTy5nZXQuY2FsbCh0aGlzKX0sc2V0OmZ1bmN0aW9uKGUpe0k9
IiIrZSxPLnNldC5jYWxsKHRoaXMsZSl9fSxMPXtldmVudFR5cGVzOlMsZXh0cmFjdEV2ZW50czpm
dW5jdGlvbihlLHQsbixvKXt2YXIgaSxhLHM9dD9FLmdldE5vZGVGcm9tSW5zdGFuY2UodCk6d2lu
ZG93O2lmKHIocyk/Uj9pPXU6YT1sOlAocyk/QT9pPWY6KGk9bSxhPWgpOnYocykmJihpPWcpLGkp
e3ZhciBjPWkoZSx0KTtpZihjKXt2YXIgcD13LmdldFBvb2xlZChTLmNoYW5nZSxjLG4sbyk7cmV0
dXJuIHAudHlwZT0iY2hhbmdlIixDLmFjY3VtdWxhdGVUd29QaGFzZURpc3BhdGNoZXMocCkscH19
YSYmYShlLHMsdCksInRvcEJsdXIiPT09ZSYmeSh0LHMpfX07dC5leHBvcnRzPUx9LHsxMDI6MTAy
LDEwOToxMDksMTEwOjExMCwxMjM6MTIzLDE2OjE2LDE5OjE5LDMzOjMzLDcxOjcxLDgwOjgwfV0s
ODpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7cmV0dXJuIEFy
cmF5LmlzQXJyYXkodCkmJih0PXRbMV0pLHQ/dC5uZXh0U2libGluZzplLmZpcnN0Q2hpbGR9ZnVu
Y3Rpb24gbyhlLHQsbil7Yy5pbnNlcnRUcmVlQmVmb3JlKGUsdCxuKX1mdW5jdGlvbiBpKGUsdCxu
KXtBcnJheS5pc0FycmF5KHQpP3MoZSx0WzBdLHRbMV0sbik6bShlLHQsbil9ZnVuY3Rpb24gYShl
LHQpe2lmKEFycmF5LmlzQXJyYXkodCkpe3ZhciBuPXRbMV07dD10WzBdLHUoZSx0LG4pLGUucmVt
b3ZlQ2hpbGQobil9ZS5yZW1vdmVDaGlsZCh0KX1mdW5jdGlvbiBzKGUsdCxuLHIpe2Zvcih2YXIg
bz10Ozspe3ZhciBpPW8ubmV4dFNpYmxpbmc7aWYobShlLG8sciksbz09PW4pYnJlYWs7bz1pfX1m
dW5jdGlvbiB1KGUsdCxuKXtmb3IoOzspe3ZhciByPXQubmV4dFNpYmxpbmc7aWYocj09PW4pYnJl
YWs7ZS5yZW1vdmVDaGlsZChyKX19ZnVuY3Rpb24gbChlLHQsbil7dmFyIHI9ZS5wYXJlbnROb2Rl
LG89ZS5uZXh0U2libGluZztvPT09dD9uJiZtKHIsZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobiks
byk6bj8oaChvLG4pLHUocixvLHQpKTp1KHIsZSx0KX12YXIgYz1lKDkpLHA9ZSgxMyksZD0oZSgz
MyksZSg1OCksZSg5MykpLGY9ZSgxMTQpLGg9ZSgxMTUpLG09ZChmdW5jdGlvbihlLHQsbil7ZS5p
bnNlcnRCZWZvcmUodCxuKX0pLHY9cC5kYW5nZXJvdXNseVJlcGxhY2VOb2RlV2l0aE1hcmt1cCxn
PXtkYW5nZXJvdXNseVJlcGxhY2VOb2RlV2l0aE1hcmt1cDp2LHJlcGxhY2VEZWxpbWl0ZWRUZXh0
OmwscHJvY2Vzc1VwZGF0ZXM6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24r
Kyl7dmFyIHM9dFtuXTtzd2l0Y2gocy50eXBlKXtjYXNlIklOU0VSVF9NQVJLVVAiOm8oZSxzLmNv
bnRlbnQscihlLHMuYWZ0ZXJOb2RlKSk7YnJlYWs7Y2FzZSJNT1ZFX0VYSVNUSU5HIjppKGUscy5m
cm9tTm9kZSxyKGUscy5hZnRlck5vZGUpKTticmVhaztjYXNlIlNFVF9NQVJLVVAiOmYoZSxzLmNv
bnRlbnQpO2JyZWFrO2Nhc2UiVEVYVF9DT05URU5UIjpoKGUscy5jb250ZW50KTticmVhaztjYXNl
IlJFTU9WRV9OT0RFIjphKGUscy5mcm9tTm9kZSl9fX19O3QuZXhwb3J0cz1nfSx7MTE0OjExNCwx
MTU6MTE1LDEzOjEzLDMzOjMzLDU4OjU4LDk6OSw5Mzo5M31dLDk6W2Z1bmN0aW9uKGUsdCxuKXsi
dXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtpZihoKXt2YXIgdD1lLm5vZGUsbj1lLmNoaWxkcmVu
O2lmKG4ubGVuZ3RoKWZvcih2YXIgcj0wO3I8bi5sZW5ndGg7cisrKW0odCxuW3JdLG51bGwpO2Vs
c2UgbnVsbCE9ZS5odG1sP3AodCxlLmh0bWwpOm51bGwhPWUudGV4dCYmZih0LGUudGV4dCl9fWZ1
bmN0aW9uIG8oZSx0KXtlLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKHQubm9kZSxlKSxyKHQpfWZ1
bmN0aW9uIGkoZSx0KXtoP2UuY2hpbGRyZW4ucHVzaCh0KTplLm5vZGUuYXBwZW5kQ2hpbGQodC5u
b2RlKX1mdW5jdGlvbiBhKGUsdCl7aD9lLmh0bWw9dDpwKGUubm9kZSx0KX1mdW5jdGlvbiBzKGUs
dCl7aD9lLnRleHQ9dDpmKGUubm9kZSx0KX1mdW5jdGlvbiB1KCl7cmV0dXJuIHRoaXMubm9kZS5u
b2RlTmFtZX1mdW5jdGlvbiBsKGUpe3JldHVybntub2RlOmUsY2hpbGRyZW46W10saHRtbDpudWxs
LHRleHQ6bnVsbCx0b1N0cmluZzp1fX12YXIgYz1lKDEwKSxwPWUoMTE0KSxkPWUoOTMpLGY9ZSgx
MTUpLGg9InVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudCYmIm51bWJlciI9PXR5cGVvZiBkb2N1
bWVudC5kb2N1bWVudE1vZGV8fCJ1bmRlZmluZWQiIT10eXBlb2YgbmF2aWdhdG9yJiYic3RyaW5n
Ij09dHlwZW9mIG5hdmlnYXRvci51c2VyQWdlbnQmJi9cYkVkZ2VcL1xkLy50ZXN0KG5hdmlnYXRv
ci51c2VyQWdlbnQpLG09ZChmdW5jdGlvbihlLHQsbil7MTE9PT10Lm5vZGUubm9kZVR5cGV8fDE9
PT10Lm5vZGUubm9kZVR5cGUmJiJvYmplY3QiPT09dC5ub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNl
KCkmJihudWxsPT10Lm5vZGUubmFtZXNwYWNlVVJJfHx0Lm5vZGUubmFtZXNwYWNlVVJJPT09Yy5o
dG1sKT8ocih0KSxlLmluc2VydEJlZm9yZSh0Lm5vZGUsbikpOihlLmluc2VydEJlZm9yZSh0Lm5v
ZGUsbikscih0KSl9KTtsLmluc2VydFRyZWVCZWZvcmU9bSxsLnJlcGxhY2VDaGlsZFdpdGhUcmVl
PW8sbC5xdWV1ZUNoaWxkPWksbC5xdWV1ZUhUTUw9YSxsLnF1ZXVlVGV4dD1zLHQuZXhwb3J0cz1s
fSx7MTA6MTAsMTE0OjExNCwxMTU6MTE1LDkzOjkzfV0sMTA6W2Z1bmN0aW9uKGUsdCxuKXsidXNl
IHN0cmljdCI7dmFyIHI9e2h0bWw6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLG1hdGht
bDoiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTCIsc3ZnOiJodHRwOi8vd3d3Lncz
Lm9yZy8yMDAwL3N2ZyJ9O3QuZXhwb3J0cz1yfSx7fV0sMTE6W2Z1bmN0aW9uKGUsdCxuKXsidXNl
IHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3JldHVybihlJnQpPT09dH12YXIgbz1lKDExMiksaT0o
ZSgxMzcpLHtNVVNUX1VTRV9QUk9QRVJUWToxLEhBU19CT09MRUFOX1ZBTFVFOjQsSEFTX05VTUVS
SUNfVkFMVUU6OCxIQVNfUE9TSVRJVkVfTlVNRVJJQ19WQUxVRToyNCxIQVNfT1ZFUkxPQURFRF9C
T09MRUFOX1ZBTFVFOjMyLGluamVjdERPTVByb3BlcnR5Q29uZmlnOmZ1bmN0aW9uKGUpe3ZhciB0
PWksbj1lLlByb3BlcnRpZXN8fHt9LGE9ZS5ET01BdHRyaWJ1dGVOYW1lc3BhY2VzfHx7fSx1PWUu
RE9NQXR0cmlidXRlTmFtZXN8fHt9LGw9ZS5ET01Qcm9wZXJ0eU5hbWVzfHx7fSxjPWUuRE9NTXV0
YXRpb25NZXRob2RzfHx7fTtlLmlzQ3VzdG9tQXR0cmlidXRlJiZzLl9pc0N1c3RvbUF0dHJpYnV0
ZUZ1bmN0aW9ucy5wdXNoKGUuaXNDdXN0b21BdHRyaWJ1dGUpO2Zvcih2YXIgcCBpbiBuKXtzLnBy
b3BlcnRpZXMuaGFzT3duUHJvcGVydHkocCkmJm8oIjQ4IixwKTt2YXIgZD1wLnRvTG93ZXJDYXNl
KCksZj1uW3BdLGg9e2F0dHJpYnV0ZU5hbWU6ZCxhdHRyaWJ1dGVOYW1lc3BhY2U6bnVsbCxwcm9w
ZXJ0eU5hbWU6cCxtdXRhdGlvbk1ldGhvZDpudWxsLG11c3RVc2VQcm9wZXJ0eTpyKGYsdC5NVVNU
X1VTRV9QUk9QRVJUWSksaGFzQm9vbGVhblZhbHVlOnIoZix0LkhBU19CT09MRUFOX1ZBTFVFKSxo
YXNOdW1lcmljVmFsdWU6cihmLHQuSEFTX05VTUVSSUNfVkFMVUUpLGhhc1Bvc2l0aXZlTnVtZXJp
Y1ZhbHVlOnIoZix0LkhBU19QT1NJVElWRV9OVU1FUklDX1ZBTFVFKSxoYXNPdmVybG9hZGVkQm9v
bGVhblZhbHVlOnIoZix0LkhBU19PVkVSTE9BREVEX0JPT0xFQU5fVkFMVUUpfTtpZihoLmhhc0Jv
b2xlYW5WYWx1ZStoLmhhc051bWVyaWNWYWx1ZStoLmhhc092ZXJsb2FkZWRCb29sZWFuVmFsdWU8
PTF8fG8oIjUwIixwKSx1Lmhhc093blByb3BlcnR5KHApKXt2YXIgbT11W3BdO2guYXR0cmlidXRl
TmFtZT1tfWEuaGFzT3duUHJvcGVydHkocCkmJihoLmF0dHJpYnV0ZU5hbWVzcGFjZT1hW3BdKSxs
Lmhhc093blByb3BlcnR5KHApJiYoaC5wcm9wZXJ0eU5hbWU9bFtwXSksYy5oYXNPd25Qcm9wZXJ0
eShwKSYmKGgubXV0YXRpb25NZXRob2Q9Y1twXSkscy5wcm9wZXJ0aWVzW3BdPWh9fX0pLGE9IjpB
LVpfYS16XFx1MDBDMC1cXHUwMEQ2XFx1MDBEOC1cXHUwMEY2XFx1MDBGOC1cXHUwMkZGXFx1MDM3
MC1cXHUwMzdEXFx1MDM3Ri1cXHUxRkZGXFx1MjAwQy1cXHUyMDBEXFx1MjA3MC1cXHUyMThGXFx1
MkMwMC1cXHUyRkVGXFx1MzAwMS1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkZE
IixzPXtJRF9BVFRSSUJVVEVfTkFNRToiZGF0YS1yZWFjdGlkIixST09UX0FUVFJJQlVURV9OQU1F
OiJkYXRhLXJlYWN0cm9vdCIsQVRUUklCVVRFX05BTUVfU1RBUlRfQ0hBUjphLEFUVFJJQlVURV9O
QU1FX0NIQVI6YSsiXFwtLjAtOVxcdTAwQjdcXHUwMzAwLVxcdTAzNkZcXHUyMDNGLVxcdTIwNDAi
LHByb3BlcnRpZXM6e30sZ2V0UG9zc2libGVTdGFuZGFyZE5hbWU6bnVsbCxfaXNDdXN0b21BdHRy
aWJ1dGVGdW5jdGlvbnM6W10saXNDdXN0b21BdHRyaWJ1dGU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0
PTA7dDxzLl9pc0N1c3RvbUF0dHJpYnV0ZUZ1bmN0aW9ucy5sZW5ndGg7dCsrKWlmKCgwLHMuX2lz
Q3VzdG9tQXR0cmlidXRlRnVuY3Rpb25zW3RdKShlKSlyZXR1cm4hMDtyZXR1cm4hMX0saW5qZWN0
aW9uOml9O3QuZXhwb3J0cz1zfSx7MTEyOjExMiwxMzc6MTM3fV0sMTI6W2Z1bmN0aW9uKGUsdCxu
KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4hIWwuaGFzT3duUHJvcGVydHkoZSl8
fCF1Lmhhc093blByb3BlcnR5KGUpJiYocy50ZXN0KGUpPyhsW2VdPSEwLCEwKToodVtlXT0hMCwh
MSkpfWZ1bmN0aW9uIG8oZSx0KXtyZXR1cm4gbnVsbD09dHx8ZS5oYXNCb29sZWFuVmFsdWUmJiF0
fHxlLmhhc051bWVyaWNWYWx1ZSYmaXNOYU4odCl8fGUuaGFzUG9zaXRpdmVOdW1lcmljVmFsdWUm
JnQ8MXx8ZS5oYXNPdmVybG9hZGVkQm9vbGVhblZhbHVlJiYhMT09PXR9dmFyIGk9ZSgxMSksYT0o
ZSgzMyksZSg1OCksZSgxMTEpKSxzPShlKDE0MiksbmV3IFJlZ0V4cCgiXlsiK2kuQVRUUklCVVRF
X05BTUVfU1RBUlRfQ0hBUisiXVsiK2kuQVRUUklCVVRFX05BTUVfQ0hBUisiXSokIikpLHU9e30s
bD17fSxjPXtjcmVhdGVNYXJrdXBGb3JJRDpmdW5jdGlvbihlKXtyZXR1cm4gaS5JRF9BVFRSSUJV
VEVfTkFNRSsiPSIrYShlKX0sc2V0QXR0cmlidXRlRm9ySUQ6ZnVuY3Rpb24oZSx0KXtlLnNldEF0
dHJpYnV0ZShpLklEX0FUVFJJQlVURV9OQU1FLHQpfSxjcmVhdGVNYXJrdXBGb3JSb290OmZ1bmN0
aW9uKCl7cmV0dXJuIGkuUk9PVF9BVFRSSUJVVEVfTkFNRSsnPSIiJ30sc2V0QXR0cmlidXRlRm9y
Um9vdDpmdW5jdGlvbihlKXtlLnNldEF0dHJpYnV0ZShpLlJPT1RfQVRUUklCVVRFX05BTUUsIiIp
fSxjcmVhdGVNYXJrdXBGb3JQcm9wZXJ0eTpmdW5jdGlvbihlLHQpe3ZhciBuPWkucHJvcGVydGll
cy5oYXNPd25Qcm9wZXJ0eShlKT9pLnByb3BlcnRpZXNbZV06bnVsbDtpZihuKXtpZihvKG4sdCkp
cmV0dXJuIiI7dmFyIHI9bi5hdHRyaWJ1dGVOYW1lO3JldHVybiBuLmhhc0Jvb2xlYW5WYWx1ZXx8
bi5oYXNPdmVybG9hZGVkQm9vbGVhblZhbHVlJiYhMD09PXQ/cisnPSIiJzpyKyI9IithKHQpfXJl
dHVybiBpLmlzQ3VzdG9tQXR0cmlidXRlKGUpP251bGw9PXQ/IiI6ZSsiPSIrYSh0KTpudWxsfSxj
cmVhdGVNYXJrdXBGb3JDdXN0b21BdHRyaWJ1dGU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcihlKSYm
bnVsbCE9dD9lKyI9IithKHQpOiIifSxzZXRWYWx1ZUZvclByb3BlcnR5OmZ1bmN0aW9uKGUsdCxu
KXt2YXIgcj1pLnByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkodCk/aS5wcm9wZXJ0aWVzW3RdOm51
bGw7aWYocil7dmFyIGE9ci5tdXRhdGlvbk1ldGhvZDtpZihhKWEoZSxuKTtlbHNle2lmKG8ocixu
KSlyZXR1cm4gdm9pZCB0aGlzLmRlbGV0ZVZhbHVlRm9yUHJvcGVydHkoZSx0KTtpZihyLm11c3RV
c2VQcm9wZXJ0eSllW3IucHJvcGVydHlOYW1lXT1uO2Vsc2V7dmFyIHM9ci5hdHRyaWJ1dGVOYW1l
LHU9ci5hdHRyaWJ1dGVOYW1lc3BhY2U7dT9lLnNldEF0dHJpYnV0ZU5TKHUscywiIituKTpyLmhh
c0Jvb2xlYW5WYWx1ZXx8ci5oYXNPdmVybG9hZGVkQm9vbGVhblZhbHVlJiYhMD09PW4/ZS5zZXRB
dHRyaWJ1dGUocywiIik6ZS5zZXRBdHRyaWJ1dGUocywiIituKX19fWVsc2UgaWYoaS5pc0N1c3Rv
bUF0dHJpYnV0ZSh0KSlyZXR1cm4gdm9pZCBjLnNldFZhbHVlRm9yQXR0cmlidXRlKGUsdCxuKX0s
c2V0VmFsdWVGb3JBdHRyaWJ1dGU6ZnVuY3Rpb24oZSx0LG4pe3IodCkmJihudWxsPT1uP2UucmVt
b3ZlQXR0cmlidXRlKHQpOmUuc2V0QXR0cmlidXRlKHQsIiIrbikpfSxkZWxldGVWYWx1ZUZvckF0
dHJpYnV0ZTpmdW5jdGlvbihlLHQpe2UucmVtb3ZlQXR0cmlidXRlKHQpfSxkZWxldGVWYWx1ZUZv
clByb3BlcnR5OmZ1bmN0aW9uKGUsdCl7dmFyIG49aS5wcm9wZXJ0aWVzLmhhc093blByb3BlcnR5
KHQpP2kucHJvcGVydGllc1t0XTpudWxsO2lmKG4pe3ZhciByPW4ubXV0YXRpb25NZXRob2Q7aWYo
cilyKGUsdm9pZCAwKTtlbHNlIGlmKG4ubXVzdFVzZVByb3BlcnR5KXt2YXIgbz1uLnByb3BlcnR5
TmFtZTtuLmhhc0Jvb2xlYW5WYWx1ZT9lW29dPSExOmVbb109IiJ9ZWxzZSBlLnJlbW92ZUF0dHJp
YnV0ZShuLmF0dHJpYnV0ZU5hbWUpfWVsc2UgaS5pc0N1c3RvbUF0dHJpYnV0ZSh0KSYmZS5yZW1v
dmVBdHRyaWJ1dGUodCl9fTt0LmV4cG9ydHM9Y30sezExOjExLDExMToxMTEsMTQyOjE0MiwzMzoz
Myw1ODo1OH1dLDEzOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoMTEyKSxv
PWUoOSksaT1lKDEyMyksYT1lKDEyOCkscz1lKDEyOSksdT0oZSgxMzcpLHtkYW5nZXJvdXNseVJl
cGxhY2VOb2RlV2l0aE1hcmt1cDpmdW5jdGlvbihlLHQpe2lmKGkuY2FuVXNlRE9NfHxyKCI1NiIp
LHR8fHIoIjU3IiksIkhUTUwiPT09ZS5ub2RlTmFtZSYmcigiNTgiKSwic3RyaW5nIj09dHlwZW9m
IHQpe3ZhciBuPWEodCxzKVswXTtlLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKG4sZSl9ZWxzZSBv
LnJlcGxhY2VDaGlsZFdpdGhUcmVlKGUsdCl9fSk7dC5leHBvcnRzPXV9LHsxMTI6MTEyLDEyMzox
MjMsMTI4OjEyOCwxMjk6MTI5LDEzNzoxMzcsOTo5fV0sMTQ6W2Z1bmN0aW9uKGUsdCxuKXsidXNl
IHN0cmljdCI7dmFyIHI9WyJSZXNwb25kZXJFdmVudFBsdWdpbiIsIlNpbXBsZUV2ZW50UGx1Z2lu
IiwiVGFwRXZlbnRQbHVnaW4iLCJFbnRlckxlYXZlRXZlbnRQbHVnaW4iLCJDaGFuZ2VFdmVudFBs
dWdpbiIsIlNlbGVjdEV2ZW50UGx1Z2luIiwiQmVmb3JlSW5wdXRFdmVudFBsdWdpbiJdO3QuZXhw
b3J0cz1yfSx7fV0sMTU6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZSgxOSks
bz1lKDMzKSxpPWUoODQpLGE9e21vdXNlRW50ZXI6e3JlZ2lzdHJhdGlvbk5hbWU6Im9uTW91c2VF
bnRlciIsZGVwZW5kZW5jaWVzOlsidG9wTW91c2VPdXQiLCJ0b3BNb3VzZU92ZXIiXX0sbW91c2VM
ZWF2ZTp7cmVnaXN0cmF0aW9uTmFtZToib25Nb3VzZUxlYXZlIixkZXBlbmRlbmNpZXM6WyJ0b3BN
b3VzZU91dCIsInRvcE1vdXNlT3ZlciJdfX0scz17ZXZlbnRUeXBlczphLGV4dHJhY3RFdmVudHM6
ZnVuY3Rpb24oZSx0LG4scyl7aWYoInRvcE1vdXNlT3ZlciI9PT1lJiYobi5yZWxhdGVkVGFyZ2V0
fHxuLmZyb21FbGVtZW50KSlyZXR1cm4gbnVsbDtpZigidG9wTW91c2VPdXQiIT09ZSYmInRvcE1v
dXNlT3ZlciIhPT1lKXJldHVybiBudWxsO3ZhciB1O2lmKHMud2luZG93PT09cyl1PXM7ZWxzZXt2
YXIgbD1zLm93bmVyRG9jdW1lbnQ7dT1sP2wuZGVmYXVsdFZpZXd8fGwucGFyZW50V2luZG93Ondp
bmRvd312YXIgYyxwO2lmKCJ0b3BNb3VzZU91dCI9PT1lKXtjPXQ7dmFyIGQ9bi5yZWxhdGVkVGFy
Z2V0fHxuLnRvRWxlbWVudDtwPWQ/by5nZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZShkKTpudWxs
fWVsc2UgYz1udWxsLHA9dDtpZihjPT09cClyZXR1cm4gbnVsbDt2YXIgZj1udWxsPT1jP3U6by5n
ZXROb2RlRnJvbUluc3RhbmNlKGMpLGg9bnVsbD09cD91Om8uZ2V0Tm9kZUZyb21JbnN0YW5jZShw
KSxtPWkuZ2V0UG9vbGVkKGEubW91c2VMZWF2ZSxjLG4scyk7bS50eXBlPSJtb3VzZWxlYXZlIixt
LnRhcmdldD1mLG0ucmVsYXRlZFRhcmdldD1oO3ZhciB2PWkuZ2V0UG9vbGVkKGEubW91c2VFbnRl
cixwLG4scyk7cmV0dXJuIHYudHlwZT0ibW91c2VlbnRlciIsdi50YXJnZXQ9aCx2LnJlbGF0ZWRU
YXJnZXQ9ZixyLmFjY3VtdWxhdGVFbnRlckxlYXZlRGlzcGF0Y2hlcyhtLHYsYyxwKSxbbSx2XX19
O3QuZXhwb3J0cz1zfSx7MTk6MTksMzM6MzMsODQ6ODR9XSwxNjpbZnVuY3Rpb24oZSx0LG4peyJ1
c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiJidXR0b24iPT09ZXx8ImlucHV0Ij09PWV8
fCJzZWxlY3QiPT09ZXx8InRleHRhcmVhIj09PWV9ZnVuY3Rpb24gbyhlLHQsbil7c3dpdGNoKGUp
e2Nhc2Uib25DbGljayI6Y2FzZSJvbkNsaWNrQ2FwdHVyZSI6Y2FzZSJvbkRvdWJsZUNsaWNrIjpj
YXNlIm9uRG91YmxlQ2xpY2tDYXB0dXJlIjpjYXNlIm9uTW91c2VEb3duIjpjYXNlIm9uTW91c2VE
b3duQ2FwdHVyZSI6Y2FzZSJvbk1vdXNlTW92ZSI6Y2FzZSJvbk1vdXNlTW92ZUNhcHR1cmUiOmNh
c2Uib25Nb3VzZVVwIjpjYXNlIm9uTW91c2VVcENhcHR1cmUiOnJldHVybiEoIW4uZGlzYWJsZWR8
fCFyKHQpKTtkZWZhdWx0OnJldHVybiExfX12YXIgaT1lKDExMiksYT1lKDE3KSxzPWUoMTgpLHU9
ZSg1MCksbD1lKDkxKSxjPWUoOTgpLHA9KGUoMTM3KSx7fSksZD1udWxsLGY9ZnVuY3Rpb24oZSx0
KXtlJiYocy5leGVjdXRlRGlzcGF0Y2hlc0luT3JkZXIoZSx0KSxlLmlzUGVyc2lzdGVudCgpfHxl
LmNvbnN0cnVjdG9yLnJlbGVhc2UoZSkpfSxoPWZ1bmN0aW9uKGUpe3JldHVybiBmKGUsITApfSxt
PWZ1bmN0aW9uKGUpe3JldHVybiBmKGUsITEpfSx2PWZ1bmN0aW9uKGUpe3JldHVybiIuIitlLl9y
b290Tm9kZUlEfSxnPXtpbmplY3Rpb246e2luamVjdEV2ZW50UGx1Z2luT3JkZXI6YS5pbmplY3RF
dmVudFBsdWdpbk9yZGVyLGluamVjdEV2ZW50UGx1Z2luc0J5TmFtZTphLmluamVjdEV2ZW50UGx1
Z2luc0J5TmFtZX0scHV0TGlzdGVuZXI6ZnVuY3Rpb24oZSx0LG4peyJmdW5jdGlvbiIhPXR5cGVv
ZiBuJiZpKCI5NCIsdCx0eXBlb2Ygbik7dmFyIHI9dihlKTsocFt0XXx8KHBbdF09e30pKVtyXT1u
O3ZhciBvPWEucmVnaXN0cmF0aW9uTmFtZU1vZHVsZXNbdF07byYmby5kaWRQdXRMaXN0ZW5lciYm
by5kaWRQdXRMaXN0ZW5lcihlLHQsbil9LGdldExpc3RlbmVyOmZ1bmN0aW9uKGUsdCl7dmFyIG49
cFt0XTtpZihvKHQsZS5fY3VycmVudEVsZW1lbnQudHlwZSxlLl9jdXJyZW50RWxlbWVudC5wcm9w
cykpcmV0dXJuIG51bGw7dmFyIHI9dihlKTtyZXR1cm4gbiYmbltyXX0sZGVsZXRlTGlzdGVuZXI6
ZnVuY3Rpb24oZSx0KXt2YXIgbj1hLnJlZ2lzdHJhdGlvbk5hbWVNb2R1bGVzW3RdO24mJm4ud2ls
bERlbGV0ZUxpc3RlbmVyJiZuLndpbGxEZWxldGVMaXN0ZW5lcihlLHQpO3ZhciByPXBbdF07ciYm
ZGVsZXRlIHJbdihlKV19LGRlbGV0ZUFsbExpc3RlbmVyczpmdW5jdGlvbihlKXt2YXIgdD12KGUp
O2Zvcih2YXIgbiBpbiBwKWlmKHAuaGFzT3duUHJvcGVydHkobikmJnBbbl1bdF0pe3ZhciByPWEu
cmVnaXN0cmF0aW9uTmFtZU1vZHVsZXNbbl07ciYmci53aWxsRGVsZXRlTGlzdGVuZXImJnIud2ls
bERlbGV0ZUxpc3RlbmVyKGUsbiksZGVsZXRlIHBbbl1bdF19fSxleHRyYWN0RXZlbnRzOmZ1bmN0
aW9uKGUsdCxuLHIpe2Zvcih2YXIgbyxpPWEucGx1Z2lucyxzPTA7czxpLmxlbmd0aDtzKyspe3Zh
ciB1PWlbc107aWYodSl7dmFyIGM9dS5leHRyYWN0RXZlbnRzKGUsdCxuLHIpO2MmJihvPWwobyxj
KSl9fXJldHVybiBvfSxlbnF1ZXVlRXZlbnRzOmZ1bmN0aW9uKGUpe2UmJihkPWwoZCxlKSl9LHBy
b2Nlc3NFdmVudFF1ZXVlOmZ1bmN0aW9uKGUpe3ZhciB0PWQ7ZD1udWxsLGU/Yyh0LGgpOmModCxt
KSxkJiZpKCI5NSIpLHUucmV0aHJvd0NhdWdodEVycm9yKCl9LF9fcHVyZ2U6ZnVuY3Rpb24oKXtw
PXt9fSxfX2dldExpc3RlbmVyQmFuazpmdW5jdGlvbigpe3JldHVybiBwfX07dC5leHBvcnRzPWd9
LHsxMTI6MTEyLDEzNzoxMzcsMTc6MTcsMTg6MTgsNTA6NTAsOTE6OTEsOTg6OTh9XSwxNzpbZnVu
Y3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKCl7aWYocylmb3IodmFyIGUgaW4g
dSl7dmFyIHQ9dVtlXSxuPXMuaW5kZXhPZihlKTtpZihuPi0xfHxhKCI5NiIsZSksIWwucGx1Z2lu
c1tuXSl7dC5leHRyYWN0RXZlbnRzfHxhKCI5NyIsZSksbC5wbHVnaW5zW25dPXQ7dmFyIHI9dC5l
dmVudFR5cGVzO2Zvcih2YXIgaSBpbiByKW8ocltpXSx0LGkpfHxhKCI5OCIsaSxlKX19fWZ1bmN0
aW9uIG8oZSx0LG4pe2wuZXZlbnROYW1lRGlzcGF0Y2hDb25maWdzLmhhc093blByb3BlcnR5KG4p
JiZhKCI5OSIsbiksbC5ldmVudE5hbWVEaXNwYXRjaENvbmZpZ3Nbbl09ZTt2YXIgcj1lLnBoYXNl
ZFJlZ2lzdHJhdGlvbk5hbWVzO2lmKHIpe2Zvcih2YXIgbyBpbiByKWlmKHIuaGFzT3duUHJvcGVy
dHkobykpe3ZhciBzPXJbb107aShzLHQsbil9cmV0dXJuITB9cmV0dXJuISFlLnJlZ2lzdHJhdGlv
bk5hbWUmJihpKGUucmVnaXN0cmF0aW9uTmFtZSx0LG4pLCEwKX1mdW5jdGlvbiBpKGUsdCxuKXts
LnJlZ2lzdHJhdGlvbk5hbWVNb2R1bGVzW2VdJiZhKCIxMDAiLGUpLGwucmVnaXN0cmF0aW9uTmFt
ZU1vZHVsZXNbZV09dCxsLnJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXNbZV09dC5ldmVudFR5
cGVzW25dLmRlcGVuZGVuY2llc312YXIgYT1lKDExMikscz0oZSgxMzcpLG51bGwpLHU9e30sbD17
cGx1Z2luczpbXSxldmVudE5hbWVEaXNwYXRjaENvbmZpZ3M6e30scmVnaXN0cmF0aW9uTmFtZU1v
ZHVsZXM6e30scmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llczp7fSxwb3NzaWJsZVJlZ2lzdHJh
dGlvbk5hbWVzOm51bGwsaW5qZWN0RXZlbnRQbHVnaW5PcmRlcjpmdW5jdGlvbihlKXtzJiZhKCIx
MDEiKSxzPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGUpLHIoKX0saW5qZWN0RXZlbnRQbHVn
aW5zQnlOYW1lOmZ1bmN0aW9uKGUpe3ZhciB0PSExO2Zvcih2YXIgbiBpbiBlKWlmKGUuaGFzT3du
UHJvcGVydHkobikpe3ZhciBvPWVbbl07dS5oYXNPd25Qcm9wZXJ0eShuKSYmdVtuXT09PW98fCh1
W25dJiZhKCIxMDIiLG4pLHVbbl09byx0PSEwKX10JiZyKCl9LGdldFBsdWdpbk1vZHVsZUZvckV2
ZW50OmZ1bmN0aW9uKGUpe3ZhciB0PWUuZGlzcGF0Y2hDb25maWc7aWYodC5yZWdpc3RyYXRpb25O
YW1lKXJldHVybiBsLnJlZ2lzdHJhdGlvbk5hbWVNb2R1bGVzW3QucmVnaXN0cmF0aW9uTmFtZV18
fG51bGw7aWYodm9pZCAwIT09dC5waGFzZWRSZWdpc3RyYXRpb25OYW1lcyl7dmFyIG49dC5waGFz
ZWRSZWdpc3RyYXRpb25OYW1lcztmb3IodmFyIHIgaW4gbilpZihuLmhhc093blByb3BlcnR5KHIp
KXt2YXIgbz1sLnJlZ2lzdHJhdGlvbk5hbWVNb2R1bGVzW25bcl1dO2lmKG8pcmV0dXJuIG99fXJl
dHVybiBudWxsfSxfcmVzZXRFdmVudFBsdWdpbnM6ZnVuY3Rpb24oKXtzPW51bGw7Zm9yKHZhciBl
IGluIHUpdS5oYXNPd25Qcm9wZXJ0eShlKSYmZGVsZXRlIHVbZV07bC5wbHVnaW5zLmxlbmd0aD0w
O3ZhciB0PWwuZXZlbnROYW1lRGlzcGF0Y2hDb25maWdzO2Zvcih2YXIgbiBpbiB0KXQuaGFzT3du
UHJvcGVydHkobikmJmRlbGV0ZSB0W25dO3ZhciByPWwucmVnaXN0cmF0aW9uTmFtZU1vZHVsZXM7
Zm9yKHZhciBvIGluIHIpci5oYXNPd25Qcm9wZXJ0eShvKSYmZGVsZXRlIHJbb119fTt0LmV4cG9y
dHM9bH0sezExMjoxMTIsMTM3OjEzN31dLDE4OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3Qi
O2Z1bmN0aW9uIHIoZSl7cmV0dXJuInRvcE1vdXNlVXAiPT09ZXx8InRvcFRvdWNoRW5kIj09PWV8
fCJ0b3BUb3VjaENhbmNlbCI9PT1lfWZ1bmN0aW9uIG8oZSl7cmV0dXJuInRvcE1vdXNlTW92ZSI9
PT1lfHwidG9wVG91Y2hNb3ZlIj09PWV9ZnVuY3Rpb24gaShlKXtyZXR1cm4idG9wTW91c2VEb3du
Ij09PWV8fCJ0b3BUb3VjaFN0YXJ0Ij09PWV9ZnVuY3Rpb24gYShlLHQsbixyKXt2YXIgbz1lLnR5
cGV8fCJ1bmtub3duLWV2ZW50IjtlLmN1cnJlbnRUYXJnZXQ9Zy5nZXROb2RlRnJvbUluc3RhbmNl
KHIpLHQ/bS5pbnZva2VHdWFyZGVkQ2FsbGJhY2tXaXRoQ2F0Y2gobyxuLGUpOm0uaW52b2tlR3Vh
cmRlZENhbGxiYWNrKG8sbixlKSxlLmN1cnJlbnRUYXJnZXQ9bnVsbH1mdW5jdGlvbiBzKGUsdCl7
dmFyIG49ZS5fZGlzcGF0Y2hMaXN0ZW5lcnMscj1lLl9kaXNwYXRjaEluc3RhbmNlcztpZihBcnJh
eS5pc0FycmF5KG4pKWZvcih2YXIgbz0wO288bi5sZW5ndGgmJiFlLmlzUHJvcGFnYXRpb25TdG9w
cGVkKCk7bysrKWEoZSx0LG5bb10scltvXSk7ZWxzZSBuJiZhKGUsdCxuLHIpO2UuX2Rpc3BhdGNo
TGlzdGVuZXJzPW51bGwsZS5fZGlzcGF0Y2hJbnN0YW5jZXM9bnVsbH1mdW5jdGlvbiB1KGUpe3Zh
ciB0PWUuX2Rpc3BhdGNoTGlzdGVuZXJzLG49ZS5fZGlzcGF0Y2hJbnN0YW5jZXM7aWYoQXJyYXku
aXNBcnJheSh0KSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aCYmIWUuaXNQcm9wYWdhdGlvblN0b3Bw
ZWQoKTtyKyspaWYodFtyXShlLG5bcl0pKXJldHVybiBuW3JdfWVsc2UgaWYodCYmdChlLG4pKXJl
dHVybiBuO3JldHVybiBudWxsfWZ1bmN0aW9uIGwoZSl7dmFyIHQ9dShlKTtyZXR1cm4gZS5fZGlz
cGF0Y2hJbnN0YW5jZXM9bnVsbCxlLl9kaXNwYXRjaExpc3RlbmVycz1udWxsLHR9ZnVuY3Rpb24g
YyhlKXt2YXIgdD1lLl9kaXNwYXRjaExpc3RlbmVycyxuPWUuX2Rpc3BhdGNoSW5zdGFuY2VzO0Fy
cmF5LmlzQXJyYXkodCkmJmgoIjEwMyIpLGUuY3VycmVudFRhcmdldD10P2cuZ2V0Tm9kZUZyb21J
bnN0YW5jZShuKTpudWxsO3ZhciByPXQ/dChlKTpudWxsO3JldHVybiBlLmN1cnJlbnRUYXJnZXQ9
bnVsbCxlLl9kaXNwYXRjaExpc3RlbmVycz1udWxsLGUuX2Rpc3BhdGNoSW5zdGFuY2VzPW51bGws
cn1mdW5jdGlvbiBwKGUpe3JldHVybiEhZS5fZGlzcGF0Y2hMaXN0ZW5lcnN9dmFyIGQsZixoPWUo
MTEyKSxtPWUoNTApLHY9KGUoMTM3KSxlKDE0Mikse2luamVjdENvbXBvbmVudFRyZWU6ZnVuY3Rp
b24oZSl7ZD1lfSxpbmplY3RUcmVlVHJhdmVyc2FsOmZ1bmN0aW9uKGUpe2Y9ZX19KSxnPXtpc0Vu
ZGlzaDpyLGlzTW92ZWlzaDpvLGlzU3RhcnRpc2g6aSxleGVjdXRlRGlyZWN0RGlzcGF0Y2g6Yyxl
eGVjdXRlRGlzcGF0Y2hlc0luT3JkZXI6cyxleGVjdXRlRGlzcGF0Y2hlc0luT3JkZXJTdG9wQXRU
cnVlOmwsaGFzRGlzcGF0Y2hlczpwLGdldEluc3RhbmNlRnJvbU5vZGU6ZnVuY3Rpb24oZSl7cmV0
dXJuIGQuZ2V0SW5zdGFuY2VGcm9tTm9kZShlKX0sZ2V0Tm9kZUZyb21JbnN0YW5jZTpmdW5jdGlv
bihlKXtyZXR1cm4gZC5nZXROb2RlRnJvbUluc3RhbmNlKGUpfSxpc0FuY2VzdG9yOmZ1bmN0aW9u
KGUsdCl7cmV0dXJuIGYuaXNBbmNlc3RvcihlLHQpfSxnZXRMb3dlc3RDb21tb25BbmNlc3Rvcjpm
dW5jdGlvbihlLHQpe3JldHVybiBmLmdldExvd2VzdENvbW1vbkFuY2VzdG9yKGUsdCl9LGdldFBh
cmVudEluc3RhbmNlOmZ1bmN0aW9uKGUpe3JldHVybiBmLmdldFBhcmVudEluc3RhbmNlKGUpfSx0
cmF2ZXJzZVR3b1BoYXNlOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZi50cmF2ZXJzZVR3b1BoYXNl
KGUsdCxuKX0sdHJhdmVyc2VFbnRlckxlYXZlOmZ1bmN0aW9uKGUsdCxuLHIsbyl7cmV0dXJuIGYu
dHJhdmVyc2VFbnRlckxlYXZlKGUsdCxuLHIsbyl9LGluamVjdGlvbjp2fTt0LmV4cG9ydHM9Z30s
ezExMjoxMTIsMTM3OjEzNywxNDI6MTQyLDUwOjUwfV0sMTk6W2Z1bmN0aW9uKGUsdCxuKXsidXNl
IHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbil7dmFyIHI9dC5kaXNwYXRjaENvbmZpZy5waGFzZWRS
ZWdpc3RyYXRpb25OYW1lc1tuXTtyZXR1cm4gZyhlLHIpfWZ1bmN0aW9uIG8oZSx0LG4pe3ZhciBv
PXIoZSxuLHQpO28mJihuLl9kaXNwYXRjaExpc3RlbmVycz1tKG4uX2Rpc3BhdGNoTGlzdGVuZXJz
LG8pLG4uX2Rpc3BhdGNoSW5zdGFuY2VzPW0obi5fZGlzcGF0Y2hJbnN0YW5jZXMsZSkpfWZ1bmN0
aW9uIGkoZSl7ZSYmZS5kaXNwYXRjaENvbmZpZy5waGFzZWRSZWdpc3RyYXRpb25OYW1lcyYmaC50
cmF2ZXJzZVR3b1BoYXNlKGUuX3RhcmdldEluc3QsbyxlKX1mdW5jdGlvbiBhKGUpe2lmKGUmJmUu
ZGlzcGF0Y2hDb25maWcucGhhc2VkUmVnaXN0cmF0aW9uTmFtZXMpe3ZhciB0PWUuX3RhcmdldElu
c3Qsbj10P2guZ2V0UGFyZW50SW5zdGFuY2UodCk6bnVsbDtoLnRyYXZlcnNlVHdvUGhhc2Uobixv
LGUpfX1mdW5jdGlvbiBzKGUsdCxuKXtpZihuJiZuLmRpc3BhdGNoQ29uZmlnLnJlZ2lzdHJhdGlv
bk5hbWUpe3ZhciByPW4uZGlzcGF0Y2hDb25maWcucmVnaXN0cmF0aW9uTmFtZSxvPWcoZSxyKTtv
JiYobi5fZGlzcGF0Y2hMaXN0ZW5lcnM9bShuLl9kaXNwYXRjaExpc3RlbmVycyxvKSxuLl9kaXNw
YXRjaEluc3RhbmNlcz1tKG4uX2Rpc3BhdGNoSW5zdGFuY2VzLGUpKX19ZnVuY3Rpb24gdShlKXtl
JiZlLmRpc3BhdGNoQ29uZmlnLnJlZ2lzdHJhdGlvbk5hbWUmJnMoZS5fdGFyZ2V0SW5zdCxudWxs
LGUpfWZ1bmN0aW9uIGwoZSl7dihlLGkpfWZ1bmN0aW9uIGMoZSl7dihlLGEpfWZ1bmN0aW9uIHAo
ZSx0LG4scil7aC50cmF2ZXJzZUVudGVyTGVhdmUobixyLHMsZSx0KX1mdW5jdGlvbiBkKGUpe3Yo
ZSx1KX12YXIgZj1lKDE2KSxoPWUoMTgpLG09ZSg5MSksdj1lKDk4KSxnPShlKDE0MiksZi5nZXRM
aXN0ZW5lcikseT17YWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlczpsLGFjY3VtdWxhdGVUd29Q
aGFzZURpc3BhdGNoZXNTa2lwVGFyZ2V0OmMsYWNjdW11bGF0ZURpcmVjdERpc3BhdGNoZXM6ZCxh
Y2N1bXVsYXRlRW50ZXJMZWF2ZURpc3BhdGNoZXM6cH07dC5leHBvcnRzPXl9LHsxNDI6MTQyLDE2
OjE2LDE4OjE4LDkxOjkxLDk4Ojk4fV0sMjA6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7
ZnVuY3Rpb24gcihlKXt0aGlzLl9yb290PWUsdGhpcy5fc3RhcnRUZXh0PXRoaXMuZ2V0VGV4dCgp
LHRoaXMuX2ZhbGxiYWNrVGV4dD1udWxsfXZhciBvPWUoMTQzKSxpPWUoMjQpLGE9ZSgxMDYpO28o
ci5wcm90b3R5cGUse2Rlc3RydWN0b3I6ZnVuY3Rpb24oKXt0aGlzLl9yb290PW51bGwsdGhpcy5f
c3RhcnRUZXh0PW51bGwsdGhpcy5fZmFsbGJhY2tUZXh0PW51bGx9LGdldFRleHQ6ZnVuY3Rpb24o
KXtyZXR1cm4idmFsdWUiaW4gdGhpcy5fcm9vdD90aGlzLl9yb290LnZhbHVlOnRoaXMuX3Jvb3Rb
YSgpXX0sZ2V0RGF0YTpmdW5jdGlvbigpe2lmKHRoaXMuX2ZhbGxiYWNrVGV4dClyZXR1cm4gdGhp
cy5fZmFsbGJhY2tUZXh0O3ZhciBlLHQsbj10aGlzLl9zdGFydFRleHQscj1uLmxlbmd0aCxvPXRo
aXMuZ2V0VGV4dCgpLGk9by5sZW5ndGg7Zm9yKGU9MDtlPHImJm5bZV09PT1vW2VdO2UrKyk7dmFy
IGE9ci1lO2Zvcih0PTE7dDw9YSYmbltyLXRdPT09b1tpLXRdO3QrKyk7dmFyIHM9dD4xPzEtdDp2
b2lkIDA7cmV0dXJuIHRoaXMuX2ZhbGxiYWNrVGV4dD1vLnNsaWNlKGUscyksdGhpcy5fZmFsbGJh
Y2tUZXh0fX0pLGkuYWRkUG9vbGluZ1RvKHIpLHQuZXhwb3J0cz1yfSx7MTA2OjEwNiwxNDM6MTQz
LDI0OjI0fV0sMjE6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZSgxMSksbz1y
LmluamVjdGlvbi5NVVNUX1VTRV9QUk9QRVJUWSxpPXIuaW5qZWN0aW9uLkhBU19CT09MRUFOX1ZB
TFVFLGE9ci5pbmplY3Rpb24uSEFTX05VTUVSSUNfVkFMVUUscz1yLmluamVjdGlvbi5IQVNfUE9T
SVRJVkVfTlVNRVJJQ19WQUxVRSx1PXIuaW5qZWN0aW9uLkhBU19PVkVSTE9BREVEX0JPT0xFQU5f
VkFMVUUsbD17aXNDdXN0b21BdHRyaWJ1dGU6UmVnRXhwLnByb3RvdHlwZS50ZXN0LmJpbmQobmV3
IFJlZ0V4cCgiXihkYXRhfGFyaWEpLVsiK3IuQVRUUklCVVRFX05BTUVfQ0hBUisiXSokIikpLFBy
b3BlcnRpZXM6e2FjY2VwdDowLGFjY2VwdENoYXJzZXQ6MCxhY2Nlc3NLZXk6MCxhY3Rpb246MCxh
bGxvd0Z1bGxTY3JlZW46aSxhbGxvd1RyYW5zcGFyZW5jeTowLGFsdDowLGFzOjAsYXN5bmM6aSxh
dXRvQ29tcGxldGU6MCxhdXRvUGxheTppLGNhcHR1cmU6aSxjZWxsUGFkZGluZzowLGNlbGxTcGFj
aW5nOjAsY2hhclNldDowLGNoYWxsZW5nZTowLGNoZWNrZWQ6b3xpLGNpdGU6MCxjbGFzc0lEOjAs
Y2xhc3NOYW1lOjAsY29sczpzLGNvbFNwYW46MCxjb250ZW50OjAsY29udGVudEVkaXRhYmxlOjAs
Y29udGV4dE1lbnU6MCxjb250cm9sczppLGNvb3JkczowLGNyb3NzT3JpZ2luOjAsZGF0YTowLGRh
dGVUaW1lOjAsZGVmYXVsdDppLGRlZmVyOmksZGlyOjAsZGlzYWJsZWQ6aSxkb3dubG9hZDp1LGRy
YWdnYWJsZTowLGVuY1R5cGU6MCxmb3JtOjAsZm9ybUFjdGlvbjowLGZvcm1FbmNUeXBlOjAsZm9y
bU1ldGhvZDowLGZvcm1Ob1ZhbGlkYXRlOmksZm9ybVRhcmdldDowLGZyYW1lQm9yZGVyOjAsaGVh
ZGVyczowLGhlaWdodDowLGhpZGRlbjppLGhpZ2g6MCxocmVmOjAsaHJlZkxhbmc6MCxodG1sRm9y
OjAsaHR0cEVxdWl2OjAsaWNvbjowLGlkOjAsaW5wdXRNb2RlOjAsaW50ZWdyaXR5OjAsaXM6MCxr
ZXlQYXJhbXM6MCxrZXlUeXBlOjAsa2luZDowLGxhYmVsOjAsbGFuZzowLGxpc3Q6MCxsb29wOmks
bG93OjAsbWFuaWZlc3Q6MCxtYXJnaW5IZWlnaHQ6MCxtYXJnaW5XaWR0aDowLG1heDowLG1heExl
bmd0aDowLG1lZGlhOjAsbWVkaWFHcm91cDowLG1ldGhvZDowLG1pbjowLG1pbkxlbmd0aDowLG11
bHRpcGxlOm98aSxtdXRlZDpvfGksbmFtZTowLG5vbmNlOjAsbm9WYWxpZGF0ZTppLG9wZW46aSxv
cHRpbXVtOjAscGF0dGVybjowLHBsYWNlaG9sZGVyOjAscGxheXNJbmxpbmU6aSxwb3N0ZXI6MCxw
cmVsb2FkOjAscHJvZmlsZTowLHJhZGlvR3JvdXA6MCxyZWFkT25seTppLHJlZmVycmVyUG9saWN5
OjAscmVsOjAscmVxdWlyZWQ6aSxyZXZlcnNlZDppLHJvbGU6MCxyb3dzOnMscm93U3BhbjphLHNh
bmRib3g6MCxzY29wZTowLHNjb3BlZDppLHNjcm9sbGluZzowLHNlYW1sZXNzOmksc2VsZWN0ZWQ6
b3xpLHNoYXBlOjAsc2l6ZTpzLHNpemVzOjAsc3BhbjpzLHNwZWxsQ2hlY2s6MCxzcmM6MCxzcmNE
b2M6MCxzcmNMYW5nOjAsc3JjU2V0OjAsc3RhcnQ6YSxzdGVwOjAsc3R5bGU6MCxzdW1tYXJ5OjAs
dGFiSW5kZXg6MCx0YXJnZXQ6MCx0aXRsZTowLHR5cGU6MCx1c2VNYXA6MCx2YWx1ZTowLHdpZHRo
OjAsd21vZGU6MCx3cmFwOjAsYWJvdXQ6MCxkYXRhdHlwZTowLGlubGlzdDowLHByZWZpeDowLHBy
b3BlcnR5OjAscmVzb3VyY2U6MCx0eXBlb2Y6MCx2b2NhYjowLGF1dG9DYXBpdGFsaXplOjAsYXV0
b0NvcnJlY3Q6MCxhdXRvU2F2ZTowLGNvbG9yOjAsaXRlbVByb3A6MCxpdGVtU2NvcGU6aSxpdGVt
VHlwZTowLGl0ZW1JRDowLGl0ZW1SZWY6MCxyZXN1bHRzOjAsc2VjdXJpdHk6MCx1bnNlbGVjdGFi
bGU6MH0sRE9NQXR0cmlidXRlTmFtZXM6e2FjY2VwdENoYXJzZXQ6ImFjY2VwdC1jaGFyc2V0Iixj
bGFzc05hbWU6ImNsYXNzIixodG1sRm9yOiJmb3IiLGh0dHBFcXVpdjoiaHR0cC1lcXVpdiJ9LERP
TVByb3BlcnR5TmFtZXM6e30sRE9NTXV0YXRpb25NZXRob2RzOnt2YWx1ZTpmdW5jdGlvbihlLHQp
e2lmKG51bGw9PXQpcmV0dXJuIGUucmVtb3ZlQXR0cmlidXRlKCJ2YWx1ZSIpOyJudW1iZXIiIT09
ZS50eXBlfHwhMT09PWUuaGFzQXR0cmlidXRlKCJ2YWx1ZSIpP2Uuc2V0QXR0cmlidXRlKCJ2YWx1
ZSIsIiIrdCk6ZS52YWxpZGl0eSYmIWUudmFsaWRpdHkuYmFkSW5wdXQmJmUub3duZXJEb2N1bWVu
dC5hY3RpdmVFbGVtZW50IT09ZSYmZS5zZXRBdHRyaWJ1dGUoInZhbHVlIiwiIit0KX19fTt0LmV4
cG9ydHM9bH0sezExOjExfV0sMjI6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rp
b24gcihlKXt2YXIgdD17Ij0iOiI9MCIsIjoiOiI9MiJ9O3JldHVybiIkIisoIiIrZSkucmVwbGFj
ZSgvWz06XS9nLGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSl9ZnVuY3Rpb24gbyhlKXt2YXIgdD17
Ij0wIjoiPSIsIj0yIjoiOiJ9O3JldHVybigiIisoIi4iPT09ZVswXSYmIiQiPT09ZVsxXT9lLnN1
YnN0cmluZygyKTplLnN1YnN0cmluZygxKSkpLnJlcGxhY2UoLyg9MHw9MikvZyxmdW5jdGlvbihl
KXtyZXR1cm4gdFtlXX0pfXZhciBpPXtlc2NhcGU6cix1bmVzY2FwZTpvfTt0LmV4cG9ydHM9aX0s
e31dLDIzOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7bnVsbCE9
ZS5jaGVja2VkTGluayYmbnVsbCE9ZS52YWx1ZUxpbmsmJnMoIjg3Iil9ZnVuY3Rpb24gbyhlKXty
KGUpLChudWxsIT1lLnZhbHVlfHxudWxsIT1lLm9uQ2hhbmdlKSYmcygiODgiKX1mdW5jdGlvbiBp
KGUpe3IoZSksKG51bGwhPWUuY2hlY2tlZHx8bnVsbCE9ZS5vbkNoYW5nZSkmJnMoIjg5Iil9ZnVu
Y3Rpb24gYShlKXtpZihlKXt2YXIgdD1lLmdldE5hbWUoKTtpZih0KXJldHVybiIgQ2hlY2sgdGhl
IHJlbmRlciBtZXRob2Qgb2YgYCIrdCsiYC4ifXJldHVybiIifXZhciBzPWUoMTEyKSx1PWUoNjQp
LGw9ZSgxNDUpLGM9ZSgxMjApLHA9bChjLmlzVmFsaWRFbGVtZW50KSxkPShlKDEzNyksZSgxNDIp
LHtidXR0b246ITAsY2hlY2tib3g6ITAsaW1hZ2U6ITAsaGlkZGVuOiEwLHJhZGlvOiEwLHJlc2V0
OiEwLHN1Ym1pdDohMH0pLGY9e3ZhbHVlOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4hZVt0XXx8ZFtl
LnR5cGVdfHxlLm9uQ2hhbmdlfHxlLnJlYWRPbmx5fHxlLmRpc2FibGVkP251bGw6bmV3IEVycm9y
KCJZb3UgcHJvdmlkZWQgYSBgdmFsdWVgIHByb3AgdG8gYSBmb3JtIGZpZWxkIHdpdGhvdXQgYW4g
YG9uQ2hhbmdlYCBoYW5kbGVyLiBUaGlzIHdpbGwgcmVuZGVyIGEgcmVhZC1vbmx5IGZpZWxkLiBJ
ZiB0aGUgZmllbGQgc2hvdWxkIGJlIG11dGFibGUgdXNlIGBkZWZhdWx0VmFsdWVgLiBPdGhlcndp
c2UsIHNldCBlaXRoZXIgYG9uQ2hhbmdlYCBvciBgcmVhZE9ubHlgLiIpfSxjaGVja2VkOmZ1bmN0
aW9uKGUsdCxuKXtyZXR1cm4hZVt0XXx8ZS5vbkNoYW5nZXx8ZS5yZWFkT25seXx8ZS5kaXNhYmxl
ZD9udWxsOm5ldyBFcnJvcigiWW91IHByb3ZpZGVkIGEgYGNoZWNrZWRgIHByb3AgdG8gYSBmb3Jt
IGZpZWxkIHdpdGhvdXQgYW4gYG9uQ2hhbmdlYCBoYW5kbGVyLiBUaGlzIHdpbGwgcmVuZGVyIGEg
cmVhZC1vbmx5IGZpZWxkLiBJZiB0aGUgZmllbGQgc2hvdWxkIGJlIG11dGFibGUgdXNlIGBkZWZh
dWx0Q2hlY2tlZGAuIE90aGVyd2lzZSwgc2V0IGVpdGhlciBgb25DaGFuZ2VgIG9yIGByZWFkT25s
eWAuIil9LG9uQ2hhbmdlOnAuZnVuY30saD17fSxtPXtjaGVja1Byb3BUeXBlczpmdW5jdGlvbihl
LHQsbil7Zm9yKHZhciByIGluIGYpe2lmKGYuaGFzT3duUHJvcGVydHkocikpdmFyIG89ZltyXSh0
LHIsZSwicHJvcCIsbnVsbCx1KTtvIGluc3RhbmNlb2YgRXJyb3ImJiEoby5tZXNzYWdlIGluIGgp
JiYoaFtvLm1lc3NhZ2VdPSEwLGEobikpfX0sZ2V0VmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUu
dmFsdWVMaW5rPyhvKGUpLGUudmFsdWVMaW5rLnZhbHVlKTplLnZhbHVlfSxnZXRDaGVja2VkOmZ1
bmN0aW9uKGUpe3JldHVybiBlLmNoZWNrZWRMaW5rPyhpKGUpLGUuY2hlY2tlZExpbmsudmFsdWUp
OmUuY2hlY2tlZH0sZXhlY3V0ZU9uQ2hhbmdlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUudmFsdWVM
aW5rPyhvKGUpLGUudmFsdWVMaW5rLnJlcXVlc3RDaGFuZ2UodC50YXJnZXQudmFsdWUpKTplLmNo
ZWNrZWRMaW5rPyhpKGUpLGUuY2hlY2tlZExpbmsucmVxdWVzdENoYW5nZSh0LnRhcmdldC5jaGVj
a2VkKSk6ZS5vbkNoYW5nZT9lLm9uQ2hhbmdlLmNhbGwodm9pZCAwLHQpOnZvaWQgMH19O3QuZXhw
b3J0cz1tfSx7MTEyOjExMiwxMjA6MTIwLDEzNzoxMzcsMTQyOjE0MiwxNDU6MTQ1LDY0OjY0fV0s
MjQ6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZSgxMTIpLG89KGUoMTM3KSxm
dW5jdGlvbihlKXt2YXIgdD10aGlzO2lmKHQuaW5zdGFuY2VQb29sLmxlbmd0aCl7dmFyIG49dC5p
bnN0YW5jZVBvb2wucG9wKCk7cmV0dXJuIHQuY2FsbChuLGUpLG59cmV0dXJuIG5ldyB0KGUpfSks
aT1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXM7aWYobi5pbnN0YW5jZVBvb2wubGVuZ3RoKXt2YXIg
cj1uLmluc3RhbmNlUG9vbC5wb3AoKTtyZXR1cm4gbi5jYWxsKHIsZSx0KSxyfXJldHVybiBuZXcg
bihlLHQpfSxhPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzO2lmKHIuaW5zdGFuY2VQb29sLmxl
bmd0aCl7dmFyIG89ci5pbnN0YW5jZVBvb2wucG9wKCk7cmV0dXJuIHIuY2FsbChvLGUsdCxuKSxv
fXJldHVybiBuZXcgcihlLHQsbil9LHM9ZnVuY3Rpb24oZSx0LG4scil7dmFyIG89dGhpcztpZihv
Lmluc3RhbmNlUG9vbC5sZW5ndGgpe3ZhciBpPW8uaW5zdGFuY2VQb29sLnBvcCgpO3JldHVybiBv
LmNhbGwoaSxlLHQsbixyKSxpfXJldHVybiBuZXcgbyhlLHQsbixyKX0sdT1mdW5jdGlvbihlKXt2
YXIgdD10aGlzO2UgaW5zdGFuY2VvZiB0fHxyKCIyNSIpLGUuZGVzdHJ1Y3RvcigpLHQuaW5zdGFu
Y2VQb29sLmxlbmd0aDx0LnBvb2xTaXplJiZ0Lmluc3RhbmNlUG9vbC5wdXNoKGUpfSxsPW8sYz1m
dW5jdGlvbihlLHQpe3ZhciBuPWU7cmV0dXJuIG4uaW5zdGFuY2VQb29sPVtdLG4uZ2V0UG9vbGVk
PXR8fGwsbi5wb29sU2l6ZXx8KG4ucG9vbFNpemU9MTApLG4ucmVsZWFzZT11LG59LHA9e2FkZFBv
b2xpbmdUbzpjLG9uZUFyZ3VtZW50UG9vbGVyOm8sdHdvQXJndW1lbnRQb29sZXI6aSx0aHJlZUFy
Z3VtZW50UG9vbGVyOmEsZm91ckFyZ3VtZW50UG9vbGVyOnN9O3QuZXhwb3J0cz1wfSx7MTEyOjEx
MiwxMzc6MTM3fV0sMjU6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihl
KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbSl8fChlW21d
PWYrKyxwW2VbbV1dPXt9KSxwW2VbbV1dfXZhciBvLGk9ZSgxNDMpLGE9ZSgxNykscz1lKDUxKSx1
PWUoOTApLGw9ZSgxMDcpLGM9ZSgxMDkpLHA9e30sZD0hMSxmPTAsaD17dG9wQWJvcnQ6ImFib3J0
Iix0b3BBbmltYXRpb25FbmQ6bCgiYW5pbWF0aW9uZW5kIil8fCJhbmltYXRpb25lbmQiLHRvcEFu
aW1hdGlvbkl0ZXJhdGlvbjpsKCJhbmltYXRpb25pdGVyYXRpb24iKXx8ImFuaW1hdGlvbml0ZXJh
dGlvbiIsdG9wQW5pbWF0aW9uU3RhcnQ6bCgiYW5pbWF0aW9uc3RhcnQiKXx8ImFuaW1hdGlvbnN0
YXJ0Iix0b3BCbHVyOiJibHVyIix0b3BDYW5QbGF5OiJjYW5wbGF5Iix0b3BDYW5QbGF5VGhyb3Vn
aDoiY2FucGxheXRocm91Z2giLHRvcENoYW5nZToiY2hhbmdlIix0b3BDbGljazoiY2xpY2siLHRv
cENvbXBvc2l0aW9uRW5kOiJjb21wb3NpdGlvbmVuZCIsdG9wQ29tcG9zaXRpb25TdGFydDoiY29t
cG9zaXRpb25zdGFydCIsdG9wQ29tcG9zaXRpb25VcGRhdGU6ImNvbXBvc2l0aW9udXBkYXRlIix0
b3BDb250ZXh0TWVudToiY29udGV4dG1lbnUiLHRvcENvcHk6ImNvcHkiLHRvcEN1dDoiY3V0Iix0
b3BEb3VibGVDbGljazoiZGJsY2xpY2siLHRvcERyYWc6ImRyYWciLHRvcERyYWdFbmQ6ImRyYWdl
bmQiLHRvcERyYWdFbnRlcjoiZHJhZ2VudGVyIix0b3BEcmFnRXhpdDoiZHJhZ2V4aXQiLHRvcERy
YWdMZWF2ZToiZHJhZ2xlYXZlIix0b3BEcmFnT3ZlcjoiZHJhZ292ZXIiLHRvcERyYWdTdGFydDoi
ZHJhZ3N0YXJ0Iix0b3BEcm9wOiJkcm9wIix0b3BEdXJhdGlvbkNoYW5nZToiZHVyYXRpb25jaGFu
Z2UiLHRvcEVtcHRpZWQ6ImVtcHRpZWQiLHRvcEVuY3J5cHRlZDoiZW5jcnlwdGVkIix0b3BFbmRl
ZDoiZW5kZWQiLHRvcEVycm9yOiJlcnJvciIsCit0b3BGb2N1czoiZm9jdXMiLHRvcElucHV0OiJp
bnB1dCIsdG9wS2V5RG93bjoia2V5ZG93biIsdG9wS2V5UHJlc3M6ImtleXByZXNzIix0b3BLZXlV
cDoia2V5dXAiLHRvcExvYWRlZERhdGE6ImxvYWRlZGRhdGEiLHRvcExvYWRlZE1ldGFkYXRhOiJs
b2FkZWRtZXRhZGF0YSIsdG9wTG9hZFN0YXJ0OiJsb2Fkc3RhcnQiLHRvcE1vdXNlRG93bjoibW91
c2Vkb3duIix0b3BNb3VzZU1vdmU6Im1vdXNlbW92ZSIsdG9wTW91c2VPdXQ6Im1vdXNlb3V0Iix0
b3BNb3VzZU92ZXI6Im1vdXNlb3ZlciIsdG9wTW91c2VVcDoibW91c2V1cCIsdG9wUGFzdGU6InBh
c3RlIix0b3BQYXVzZToicGF1c2UiLHRvcFBsYXk6InBsYXkiLHRvcFBsYXlpbmc6InBsYXlpbmci
LHRvcFByb2dyZXNzOiJwcm9ncmVzcyIsdG9wUmF0ZUNoYW5nZToicmF0ZWNoYW5nZSIsdG9wU2Ny
b2xsOiJzY3JvbGwiLHRvcFNlZWtlZDoic2Vla2VkIix0b3BTZWVraW5nOiJzZWVraW5nIix0b3BT
ZWxlY3Rpb25DaGFuZ2U6InNlbGVjdGlvbmNoYW5nZSIsdG9wU3RhbGxlZDoic3RhbGxlZCIsdG9w
U3VzcGVuZDoic3VzcGVuZCIsdG9wVGV4dElucHV0OiJ0ZXh0SW5wdXQiLHRvcFRpbWVVcGRhdGU6
InRpbWV1cGRhdGUiLHRvcFRvdWNoQ2FuY2VsOiJ0b3VjaGNhbmNlbCIsdG9wVG91Y2hFbmQ6InRv
dWNoZW5kIix0b3BUb3VjaE1vdmU6InRvdWNobW92ZSIsdG9wVG91Y2hTdGFydDoidG91Y2hzdGFy
dCIsdG9wVHJhbnNpdGlvbkVuZDpsKCJ0cmFuc2l0aW9uZW5kIil8fCJ0cmFuc2l0aW9uZW5kIix0
b3BWb2x1bWVDaGFuZ2U6InZvbHVtZWNoYW5nZSIsdG9wV2FpdGluZzoid2FpdGluZyIsdG9wV2hl
ZWw6IndoZWVsIn0sbT0iX3JlYWN0TGlzdGVuZXJzSUQiK1N0cmluZyhNYXRoLnJhbmRvbSgpKS5z
bGljZSgyKSx2PWkoe30scyx7UmVhY3RFdmVudExpc3RlbmVyOm51bGwsaW5qZWN0aW9uOntpbmpl
Y3RSZWFjdEV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oZSl7ZS5zZXRIYW5kbGVUb3BMZXZlbCh2Lmhh
bmRsZVRvcExldmVsKSx2LlJlYWN0RXZlbnRMaXN0ZW5lcj1lfX0sc2V0RW5hYmxlZDpmdW5jdGlv
bihlKXt2LlJlYWN0RXZlbnRMaXN0ZW5lciYmdi5SZWFjdEV2ZW50TGlzdGVuZXIuc2V0RW5hYmxl
ZChlKX0saXNFbmFibGVkOmZ1bmN0aW9uKCl7cmV0dXJuISghdi5SZWFjdEV2ZW50TGlzdGVuZXJ8
fCF2LlJlYWN0RXZlbnRMaXN0ZW5lci5pc0VuYWJsZWQoKSl9LGxpc3RlblRvOmZ1bmN0aW9uKGUs
dCl7Zm9yKHZhciBuPXQsbz1yKG4pLGk9YS5yZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzW2Vd
LHM9MDtzPGkubGVuZ3RoO3MrKyl7dmFyIHU9aVtzXTtvLmhhc093blByb3BlcnR5KHUpJiZvW3Vd
fHwoInRvcFdoZWVsIj09PXU/Yygid2hlZWwiKT92LlJlYWN0RXZlbnRMaXN0ZW5lci50cmFwQnVi
YmxlZEV2ZW50KCJ0b3BXaGVlbCIsIndoZWVsIixuKTpjKCJtb3VzZXdoZWVsIik/di5SZWFjdEV2
ZW50TGlzdGVuZXIudHJhcEJ1YmJsZWRFdmVudCgidG9wV2hlZWwiLCJtb3VzZXdoZWVsIixuKTp2
LlJlYWN0RXZlbnRMaXN0ZW5lci50cmFwQnViYmxlZEV2ZW50KCJ0b3BXaGVlbCIsIkRPTU1vdXNl
U2Nyb2xsIixuKToidG9wU2Nyb2xsIj09PXU/Yygic2Nyb2xsIiwhMCk/di5SZWFjdEV2ZW50TGlz
dGVuZXIudHJhcENhcHR1cmVkRXZlbnQoInRvcFNjcm9sbCIsInNjcm9sbCIsbik6di5SZWFjdEV2
ZW50TGlzdGVuZXIudHJhcEJ1YmJsZWRFdmVudCgidG9wU2Nyb2xsIiwic2Nyb2xsIix2LlJlYWN0
RXZlbnRMaXN0ZW5lci5XSU5ET1dfSEFORExFKToidG9wRm9jdXMiPT09dXx8InRvcEJsdXIiPT09
dT8oYygiZm9jdXMiLCEwKT8odi5SZWFjdEV2ZW50TGlzdGVuZXIudHJhcENhcHR1cmVkRXZlbnQo
InRvcEZvY3VzIiwiZm9jdXMiLG4pLHYuUmVhY3RFdmVudExpc3RlbmVyLnRyYXBDYXB0dXJlZEV2
ZW50KCJ0b3BCbHVyIiwiYmx1ciIsbikpOmMoImZvY3VzaW4iKSYmKHYuUmVhY3RFdmVudExpc3Rl
bmVyLnRyYXBCdWJibGVkRXZlbnQoInRvcEZvY3VzIiwiZm9jdXNpbiIsbiksdi5SZWFjdEV2ZW50
TGlzdGVuZXIudHJhcEJ1YmJsZWRFdmVudCgidG9wQmx1ciIsImZvY3Vzb3V0IixuKSksby50b3BC
bHVyPSEwLG8udG9wRm9jdXM9ITApOmguaGFzT3duUHJvcGVydHkodSkmJnYuUmVhY3RFdmVudExp
c3RlbmVyLnRyYXBCdWJibGVkRXZlbnQodSxoW3VdLG4pLG9bdV09ITApfX0sdHJhcEJ1YmJsZWRF
dmVudDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHYuUmVhY3RFdmVudExpc3RlbmVyLnRyYXBCdWJi
bGVkRXZlbnQoZSx0LG4pfSx0cmFwQ2FwdHVyZWRFdmVudDpmdW5jdGlvbihlLHQsbil7cmV0dXJu
IHYuUmVhY3RFdmVudExpc3RlbmVyLnRyYXBDYXB0dXJlZEV2ZW50KGUsdCxuKX0sc3VwcG9ydHNF
dmVudFBhZ2VYWTpmdW5jdGlvbigpe2lmKCFkb2N1bWVudC5jcmVhdGVFdmVudClyZXR1cm4hMTt2
YXIgZT1kb2N1bWVudC5jcmVhdGVFdmVudCgiTW91c2VFdmVudCIpO3JldHVybiBudWxsIT1lJiYi
cGFnZVgiaW4gZX0sZW5zdXJlU2Nyb2xsVmFsdWVNb25pdG9yaW5nOmZ1bmN0aW9uKCl7aWYodm9p
ZCAwPT09byYmKG89di5zdXBwb3J0c0V2ZW50UGFnZVhZKCkpLCFvJiYhZCl7dmFyIGU9dS5yZWZy
ZXNoU2Nyb2xsVmFsdWVzO3YuUmVhY3RFdmVudExpc3RlbmVyLm1vbml0b3JTY3JvbGxWYWx1ZShl
KSxkPSEwfX19KTt0LmV4cG9ydHM9dn0sezEwNzoxMDcsMTA5OjEwOSwxNDM6MTQzLDE3OjE3LDUx
OjUxLDkwOjkwfV0sMjY6W2Z1bmN0aW9uKGUsdCxuKXsoZnVuY3Rpb24obil7InVzZSBzdHJpY3Qi
O2Z1bmN0aW9uIHIoZSx0LG4scil7dmFyIG89dm9pZCAwPT09ZVtuXTtudWxsIT10JiZvJiYoZVtu
XT1pKHQsITApKX12YXIgbz1lKDY2KSxpPWUoMTA4KSxhPShlKDIyKSxlKDExNikpLHM9ZSgxMTcp
O2UoMTQyKTt2b2lkIDAhPT1uJiZuLmVudjt2YXIgdT17aW5zdGFudGlhdGVDaGlsZHJlbjpmdW5j
dGlvbihlLHQsbixvKXtpZihudWxsPT1lKXJldHVybiBudWxsO3ZhciBpPXt9O3JldHVybiBzKGUs
cixpKSxpfSx1cGRhdGVDaGlsZHJlbjpmdW5jdGlvbihlLHQsbixyLHMsdSxsLGMscCl7aWYodHx8
ZSl7dmFyIGQsZjtmb3IoZCBpbiB0KWlmKHQuaGFzT3duUHJvcGVydHkoZCkpe2Y9ZSYmZVtkXTt2
YXIgaD1mJiZmLl9jdXJyZW50RWxlbWVudCxtPXRbZF07aWYobnVsbCE9ZiYmYShoLG0pKW8ucmVj
ZWl2ZUNvbXBvbmVudChmLG0scyxjKSx0W2RdPWY7ZWxzZXtmJiYocltkXT1vLmdldEhvc3ROb2Rl
KGYpLG8udW5tb3VudENvbXBvbmVudChmLCExKSk7dmFyIHY9aShtLCEwKTt0W2RdPXY7dmFyIGc9
by5tb3VudENvbXBvbmVudCh2LHMsdSxsLGMscCk7bi5wdXNoKGcpfX1mb3IoZCBpbiBlKSFlLmhh
c093blByb3BlcnR5KGQpfHx0JiZ0Lmhhc093blByb3BlcnR5KGQpfHwoZj1lW2RdLHJbZF09by5n
ZXRIb3N0Tm9kZShmKSxvLnVubW91bnRDb21wb25lbnQoZiwhMSkpfX0sdW5tb3VudENoaWxkcmVu
OmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpaWYoZS5oYXNPd25Qcm9wZXJ0eShuKSl7dmFy
IHI9ZVtuXTtvLnVubW91bnRDb21wb25lbnQocix0KX19fTt0LmV4cG9ydHM9dX0pLmNhbGwodGhp
cyx2b2lkIDApfSx7MTA4OjEwOCwxMTY6MTE2LDExNzoxMTcsMTQyOjE0MiwyMjoyMiw2Njo2Nn1d
LDI3OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoOCksbz1lKDM3KSxpPXtw
cm9jZXNzQ2hpbGRyZW5VcGRhdGVzOm8uZGFuZ2Vyb3VzbHlQcm9jZXNzQ2hpbGRyZW5VcGRhdGVz
LHJlcGxhY2VOb2RlV2l0aE1hcmt1cDpyLmRhbmdlcm91c2x5UmVwbGFjZU5vZGVXaXRoTWFya3Vw
fTt0LmV4cG9ydHM9aX0sezM3OjM3LDg6OH1dLDI4OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJp
Y3QiO3ZhciByPWUoMTEyKSxvPShlKDEzNyksITEpLGk9e3JlcGxhY2VOb2RlV2l0aE1hcmt1cDpu
dWxsLHByb2Nlc3NDaGlsZHJlblVwZGF0ZXM6bnVsbCxpbmplY3Rpb246e2luamVjdEVudmlyb25t
ZW50OmZ1bmN0aW9uKGUpe28mJnIoIjEwNCIpLGkucmVwbGFjZU5vZGVXaXRoTWFya3VwPWUucmVw
bGFjZU5vZGVXaXRoTWFya3VwLGkucHJvY2Vzc0NoaWxkcmVuVXBkYXRlcz1lLnByb2Nlc3NDaGls
ZHJlblVwZGF0ZXMsbz0hMH19fTt0LmV4cG9ydHM9aX0sezExMjoxMTIsMTM3OjEzN31dLDI5Oltm
dW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7fWZ1bmN0aW9uIG8oZSl7
cmV0dXJuISghZS5wcm90b3R5cGV8fCFlLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50KX1mdW5j
dGlvbiBpKGUpe3JldHVybiEoIWUucHJvdG90eXBlfHwhZS5wcm90b3R5cGUuaXNQdXJlUmVhY3RD
b21wb25lbnQpfXZhciBhPWUoMTEyKSxzPWUoMTQzKSx1PWUoMTIwKSxsPWUoMjgpLGM9ZSgxMTkp
LHA9ZSg1MCksZD1lKDU3KSxmPShlKDU4KSxlKDYyKSksaD1lKDY2KSxtPWUoMTMwKSx2PShlKDEz
NyksZSgxNDEpKSxnPWUoMTE2KSx5PShlKDE0Mikse0ltcHVyZUNsYXNzOjAsUHVyZUNsYXNzOjEs
U3RhdGVsZXNzRnVuY3Rpb25hbDoyfSk7ci5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7dmFy
IGU9ZC5nZXQodGhpcykuX2N1cnJlbnRFbGVtZW50LnR5cGUsdD1lKHRoaXMucHJvcHMsdGhpcy5j
b250ZXh0LHRoaXMudXBkYXRlcik7cmV0dXJuIHR9O3ZhciBfPTEsQz17Y29uc3RydWN0OmZ1bmN0
aW9uKGUpe3RoaXMuX2N1cnJlbnRFbGVtZW50PWUsdGhpcy5fcm9vdE5vZGVJRD0wLHRoaXMuX2Nv
bXBvc2l0ZVR5cGU9bnVsbCx0aGlzLl9pbnN0YW5jZT1udWxsLHRoaXMuX2hvc3RQYXJlbnQ9bnVs
bCx0aGlzLl9ob3N0Q29udGFpbmVySW5mbz1udWxsLHRoaXMuX3VwZGF0ZUJhdGNoTnVtYmVyPW51
bGwsdGhpcy5fcGVuZGluZ0VsZW1lbnQ9bnVsbCx0aGlzLl9wZW5kaW5nU3RhdGVRdWV1ZT1udWxs
LHRoaXMuX3BlbmRpbmdSZXBsYWNlU3RhdGU9ITEsdGhpcy5fcGVuZGluZ0ZvcmNlVXBkYXRlPSEx
LHRoaXMuX3JlbmRlcmVkTm9kZVR5cGU9bnVsbCx0aGlzLl9yZW5kZXJlZENvbXBvbmVudD1udWxs
LHRoaXMuX2NvbnRleHQ9bnVsbCx0aGlzLl9tb3VudE9yZGVyPTAsdGhpcy5fdG9wTGV2ZWxXcmFw
cGVyPW51bGwsdGhpcy5fcGVuZGluZ0NhbGxiYWNrcz1udWxsLHRoaXMuX2NhbGxlZENvbXBvbmVu
dFdpbGxVbm1vdW50PSExfSxtb3VudENvbXBvbmVudDpmdW5jdGlvbihlLHQsbixzKXt0aGlzLl9j
b250ZXh0PXMsdGhpcy5fbW91bnRPcmRlcj1fKyssdGhpcy5faG9zdFBhcmVudD10LHRoaXMuX2hv
c3RDb250YWluZXJJbmZvPW47dmFyIGwsYz10aGlzLl9jdXJyZW50RWxlbWVudC5wcm9wcyxwPXRo
aXMuX3Byb2Nlc3NDb250ZXh0KHMpLGY9dGhpcy5fY3VycmVudEVsZW1lbnQudHlwZSxoPWUuZ2V0
VXBkYXRlUXVldWUoKSx2PW8oZiksZz10aGlzLl9jb25zdHJ1Y3RDb21wb25lbnQodixjLHAsaCk7
dnx8bnVsbCE9ZyYmbnVsbCE9Zy5yZW5kZXI/aShmKT90aGlzLl9jb21wb3NpdGVUeXBlPXkuUHVy
ZUNsYXNzOnRoaXMuX2NvbXBvc2l0ZVR5cGU9eS5JbXB1cmVDbGFzczoobD1nLG51bGw9PT1nfHwh
MT09PWd8fHUuaXNWYWxpZEVsZW1lbnQoZyl8fGEoIjEwNSIsZi5kaXNwbGF5TmFtZXx8Zi5uYW1l
fHwiQ29tcG9uZW50IiksZz1uZXcgcihmKSx0aGlzLl9jb21wb3NpdGVUeXBlPXkuU3RhdGVsZXNz
RnVuY3Rpb25hbCksZy5wcm9wcz1jLGcuY29udGV4dD1wLGcucmVmcz1tLGcudXBkYXRlcj1oLHRo
aXMuX2luc3RhbmNlPWcsZC5zZXQoZyx0aGlzKTt2YXIgQz1nLnN0YXRlO3ZvaWQgMD09PUMmJihn
LnN0YXRlPUM9bnVsbCksKCJvYmplY3QiIT10eXBlb2YgQ3x8QXJyYXkuaXNBcnJheShDKSkmJmEo
IjEwNiIsdGhpcy5nZXROYW1lKCl8fCJSZWFjdENvbXBvc2l0ZUNvbXBvbmVudCIpLHRoaXMuX3Bl
bmRpbmdTdGF0ZVF1ZXVlPW51bGwsdGhpcy5fcGVuZGluZ1JlcGxhY2VTdGF0ZT0hMSx0aGlzLl9w
ZW5kaW5nRm9yY2VVcGRhdGU9ITE7dmFyIGI7cmV0dXJuIGI9Zy51bnN0YWJsZV9oYW5kbGVFcnJv
cj90aGlzLnBlcmZvcm1Jbml0aWFsTW91bnRXaXRoRXJyb3JIYW5kbGluZyhsLHQsbixlLHMpOnRo
aXMucGVyZm9ybUluaXRpYWxNb3VudChsLHQsbixlLHMpLGcuY29tcG9uZW50RGlkTW91bnQmJmUu
Z2V0UmVhY3RNb3VudFJlYWR5KCkuZW5xdWV1ZShnLmNvbXBvbmVudERpZE1vdW50LGcpLGJ9LF9j
b25zdHJ1Y3RDb21wb25lbnQ6ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHRoaXMuX2NvbnN0cnVj
dENvbXBvbmVudFdpdGhvdXRPd25lcihlLHQsbixyKX0sX2NvbnN0cnVjdENvbXBvbmVudFdpdGhv
dXRPd25lcjpmdW5jdGlvbihlLHQsbixyKXt2YXIgbz10aGlzLl9jdXJyZW50RWxlbWVudC50eXBl
O3JldHVybiBlP25ldyBvKHQsbixyKTpvKHQsbixyKX0scGVyZm9ybUluaXRpYWxNb3VudFdpdGhF
cnJvckhhbmRsaW5nOmZ1bmN0aW9uKGUsdCxuLHIsbyl7dmFyIGksYT1yLmNoZWNrcG9pbnQoKTt0
cnl7aT10aGlzLnBlcmZvcm1Jbml0aWFsTW91bnQoZSx0LG4scixvKX1jYXRjaChzKXtyLnJvbGxi
YWNrKGEpLHRoaXMuX2luc3RhbmNlLnVuc3RhYmxlX2hhbmRsZUVycm9yKHMpLHRoaXMuX3BlbmRp
bmdTdGF0ZVF1ZXVlJiYodGhpcy5faW5zdGFuY2Uuc3RhdGU9dGhpcy5fcHJvY2Vzc1BlbmRpbmdT
dGF0ZSh0aGlzLl9pbnN0YW5jZS5wcm9wcyx0aGlzLl9pbnN0YW5jZS5jb250ZXh0KSksYT1yLmNo
ZWNrcG9pbnQoKSx0aGlzLl9yZW5kZXJlZENvbXBvbmVudC51bm1vdW50Q29tcG9uZW50KCEwKSxy
LnJvbGxiYWNrKGEpLGk9dGhpcy5wZXJmb3JtSW5pdGlhbE1vdW50KGUsdCxuLHIsbyl9cmV0dXJu
IGl9LHBlcmZvcm1Jbml0aWFsTW91bnQ6ZnVuY3Rpb24oZSx0LG4scixvKXt2YXIgaT10aGlzLl9p
bnN0YW5jZTtpLmNvbXBvbmVudFdpbGxNb3VudCYmKGkuY29tcG9uZW50V2lsbE1vdW50KCksdGhp
cy5fcGVuZGluZ1N0YXRlUXVldWUmJihpLnN0YXRlPXRoaXMuX3Byb2Nlc3NQZW5kaW5nU3RhdGUo
aS5wcm9wcyxpLmNvbnRleHQpKSksdm9pZCAwPT09ZSYmKGU9dGhpcy5fcmVuZGVyVmFsaWRhdGVk
Q29tcG9uZW50KCkpO3ZhciBhPWYuZ2V0VHlwZShlKTt0aGlzLl9yZW5kZXJlZE5vZGVUeXBlPWE7
dmFyIHM9dGhpcy5faW5zdGFudGlhdGVSZWFjdENvbXBvbmVudChlLGEhPT1mLkVNUFRZKTtyZXR1
cm4gdGhpcy5fcmVuZGVyZWRDb21wb25lbnQ9cyxoLm1vdW50Q29tcG9uZW50KHMscix0LG4sdGhp
cy5fcHJvY2Vzc0NoaWxkQ29udGV4dChvKSwwKX0sZ2V0SG9zdE5vZGU6ZnVuY3Rpb24oKXtyZXR1
cm4gaC5nZXRIb3N0Tm9kZSh0aGlzLl9yZW5kZXJlZENvbXBvbmVudCl9LHVubW91bnRDb21wb25l
bnQ6ZnVuY3Rpb24oZSl7aWYodGhpcy5fcmVuZGVyZWRDb21wb25lbnQpe3ZhciB0PXRoaXMuX2lu
c3RhbmNlO2lmKHQuY29tcG9uZW50V2lsbFVubW91bnQmJiF0Ll9jYWxsZWRDb21wb25lbnRXaWxs
VW5tb3VudClpZih0Ll9jYWxsZWRDb21wb25lbnRXaWxsVW5tb3VudD0hMCxlKXt2YXIgbj10aGlz
LmdldE5hbWUoKSsiLmNvbXBvbmVudFdpbGxVbm1vdW50KCkiO3AuaW52b2tlR3VhcmRlZENhbGxi
YWNrKG4sdC5jb21wb25lbnRXaWxsVW5tb3VudC5iaW5kKHQpKX1lbHNlIHQuY29tcG9uZW50V2ls
bFVubW91bnQoKTt0aGlzLl9yZW5kZXJlZENvbXBvbmVudCYmKGgudW5tb3VudENvbXBvbmVudCh0
aGlzLl9yZW5kZXJlZENvbXBvbmVudCxlKSx0aGlzLl9yZW5kZXJlZE5vZGVUeXBlPW51bGwsdGhp
cy5fcmVuZGVyZWRDb21wb25lbnQ9bnVsbCx0aGlzLl9pbnN0YW5jZT1udWxsKSx0aGlzLl9wZW5k
aW5nU3RhdGVRdWV1ZT1udWxsLHRoaXMuX3BlbmRpbmdSZXBsYWNlU3RhdGU9ITEsdGhpcy5fcGVu
ZGluZ0ZvcmNlVXBkYXRlPSExLHRoaXMuX3BlbmRpbmdDYWxsYmFja3M9bnVsbCx0aGlzLl9wZW5k
aW5nRWxlbWVudD1udWxsLHRoaXMuX2NvbnRleHQ9bnVsbCx0aGlzLl9yb290Tm9kZUlEPTAsdGhp
cy5fdG9wTGV2ZWxXcmFwcGVyPW51bGwsZC5yZW1vdmUodCl9fSxfbWFza0NvbnRleHQ6ZnVuY3Rp
b24oZSl7dmFyIHQ9dGhpcy5fY3VycmVudEVsZW1lbnQudHlwZSxuPXQuY29udGV4dFR5cGVzO2lm
KCFuKXJldHVybiBtO3ZhciByPXt9O2Zvcih2YXIgbyBpbiBuKXJbb109ZVtvXTtyZXR1cm4gcn0s
X3Byb2Nlc3NDb250ZXh0OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9tYXNrQ29udGV4dChlKX0s
X3Byb2Nlc3NDaGlsZENvbnRleHQ6ZnVuY3Rpb24oZSl7dmFyIHQsbj10aGlzLl9jdXJyZW50RWxl
bWVudC50eXBlLHI9dGhpcy5faW5zdGFuY2U7aWYoci5nZXRDaGlsZENvbnRleHQmJih0PXIuZ2V0
Q2hpbGRDb250ZXh0KCkpLHQpeyJvYmplY3QiIT10eXBlb2Ygbi5jaGlsZENvbnRleHRUeXBlcyYm
YSgiMTA3Iix0aGlzLmdldE5hbWUoKXx8IlJlYWN0Q29tcG9zaXRlQ29tcG9uZW50Iik7Zm9yKHZh
ciBvIGluIHQpbyBpbiBuLmNoaWxkQ29udGV4dFR5cGVzfHxhKCIxMDgiLHRoaXMuZ2V0TmFtZSgp
fHwiUmVhY3RDb21wb3NpdGVDb21wb25lbnQiLG8pO3JldHVybiBzKHt9LGUsdCl9cmV0dXJuIGV9
LF9jaGVja0NvbnRleHRUeXBlczpmdW5jdGlvbihlLHQsbil7fSxyZWNlaXZlQ29tcG9uZW50OmZ1
bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzLl9jdXJyZW50RWxlbWVudCxvPXRoaXMuX2NvbnRleHQ7
dGhpcy5fcGVuZGluZ0VsZW1lbnQ9bnVsbCx0aGlzLnVwZGF0ZUNvbXBvbmVudCh0LHIsZSxvLG4p
fSxwZXJmb3JtVXBkYXRlSWZOZWNlc3Nhcnk6ZnVuY3Rpb24oZSl7bnVsbCE9dGhpcy5fcGVuZGlu
Z0VsZW1lbnQ/aC5yZWNlaXZlQ29tcG9uZW50KHRoaXMsdGhpcy5fcGVuZGluZ0VsZW1lbnQsZSx0
aGlzLl9jb250ZXh0KTpudWxsIT09dGhpcy5fcGVuZGluZ1N0YXRlUXVldWV8fHRoaXMuX3BlbmRp
bmdGb3JjZVVwZGF0ZT90aGlzLnVwZGF0ZUNvbXBvbmVudChlLHRoaXMuX2N1cnJlbnRFbGVtZW50
LHRoaXMuX2N1cnJlbnRFbGVtZW50LHRoaXMuX2NvbnRleHQsdGhpcy5fY29udGV4dCk6dGhpcy5f
dXBkYXRlQmF0Y2hOdW1iZXI9bnVsbH0sdXBkYXRlQ29tcG9uZW50OmZ1bmN0aW9uKGUsdCxuLHIs
byl7dmFyIGk9dGhpcy5faW5zdGFuY2U7bnVsbD09aSYmYSgiMTM2Iix0aGlzLmdldE5hbWUoKXx8
IlJlYWN0Q29tcG9zaXRlQ29tcG9uZW50Iik7dmFyIHMsdT0hMTt0aGlzLl9jb250ZXh0PT09bz9z
PWkuY29udGV4dDoocz10aGlzLl9wcm9jZXNzQ29udGV4dChvKSx1PSEwKTt2YXIgbD10LnByb3Bz
LGM9bi5wcm9wczt0IT09biYmKHU9ITApLHUmJmkuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyYm
aS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKGMscyk7dmFyIHA9dGhpcy5fcHJvY2Vzc1BlbmRp
bmdTdGF0ZShjLHMpLGQ9ITA7dGhpcy5fcGVuZGluZ0ZvcmNlVXBkYXRlfHwoaS5zaG91bGRDb21w
b25lbnRVcGRhdGU/ZD1pLnNob3VsZENvbXBvbmVudFVwZGF0ZShjLHAscyk6dGhpcy5fY29tcG9z
aXRlVHlwZT09PXkuUHVyZUNsYXNzJiYoZD0hdihsLGMpfHwhdihpLnN0YXRlLHApKSksdGhpcy5f
dXBkYXRlQmF0Y2hOdW1iZXI9bnVsbCxkPyh0aGlzLl9wZW5kaW5nRm9yY2VVcGRhdGU9ITEsdGhp
cy5fcGVyZm9ybUNvbXBvbmVudFVwZGF0ZShuLGMscCxzLGUsbykpOih0aGlzLl9jdXJyZW50RWxl
bWVudD1uLHRoaXMuX2NvbnRleHQ9byxpLnByb3BzPWMsaS5zdGF0ZT1wLGkuY29udGV4dD1zKX0s
X3Byb2Nlc3NQZW5kaW5nU3RhdGU6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl9pbnN0YW5jZSxy
PXRoaXMuX3BlbmRpbmdTdGF0ZVF1ZXVlLG89dGhpcy5fcGVuZGluZ1JlcGxhY2VTdGF0ZTtpZih0
aGlzLl9wZW5kaW5nUmVwbGFjZVN0YXRlPSExLHRoaXMuX3BlbmRpbmdTdGF0ZVF1ZXVlPW51bGws
IXIpcmV0dXJuIG4uc3RhdGU7aWYobyYmMT09PXIubGVuZ3RoKXJldHVybiByWzBdO2Zvcih2YXIg
aT1zKHt9LG8/clswXTpuLnN0YXRlKSxhPW8/MTowO2E8ci5sZW5ndGg7YSsrKXt2YXIgdT1yW2Fd
O3MoaSwiZnVuY3Rpb24iPT10eXBlb2YgdT91LmNhbGwobixpLGUsdCk6dSl9cmV0dXJuIGl9LF9w
ZXJmb3JtQ29tcG9uZW50VXBkYXRlOmZ1bmN0aW9uKGUsdCxuLHIsbyxpKXt2YXIgYSxzLHUsbD10
aGlzLl9pbnN0YW5jZSxjPUJvb2xlYW4obC5jb21wb25lbnREaWRVcGRhdGUpO2MmJihhPWwucHJv
cHMscz1sLnN0YXRlLHU9bC5jb250ZXh0KSxsLmNvbXBvbmVudFdpbGxVcGRhdGUmJmwuY29tcG9u
ZW50V2lsbFVwZGF0ZSh0LG4sciksdGhpcy5fY3VycmVudEVsZW1lbnQ9ZSx0aGlzLl9jb250ZXh0
PWksbC5wcm9wcz10LGwuc3RhdGU9bixsLmNvbnRleHQ9cix0aGlzLl91cGRhdGVSZW5kZXJlZENv
bXBvbmVudChvLGkpLGMmJm8uZ2V0UmVhY3RNb3VudFJlYWR5KCkuZW5xdWV1ZShsLmNvbXBvbmVu
dERpZFVwZGF0ZS5iaW5kKGwsYSxzLHUpLGwpfSxfdXBkYXRlUmVuZGVyZWRDb21wb25lbnQ6ZnVu
Y3Rpb24oZSx0KXt2YXIgbj10aGlzLl9yZW5kZXJlZENvbXBvbmVudCxyPW4uX2N1cnJlbnRFbGVt
ZW50LG89dGhpcy5fcmVuZGVyVmFsaWRhdGVkQ29tcG9uZW50KCk7aWYoZyhyLG8pKWgucmVjZWl2
ZUNvbXBvbmVudChuLG8sZSx0aGlzLl9wcm9jZXNzQ2hpbGRDb250ZXh0KHQpKTtlbHNle3ZhciBp
PWguZ2V0SG9zdE5vZGUobik7aC51bm1vdW50Q29tcG9uZW50KG4sITEpO3ZhciBhPWYuZ2V0VHlw
ZShvKTt0aGlzLl9yZW5kZXJlZE5vZGVUeXBlPWE7dmFyIHM9dGhpcy5faW5zdGFudGlhdGVSZWFj
dENvbXBvbmVudChvLGEhPT1mLkVNUFRZKTt0aGlzLl9yZW5kZXJlZENvbXBvbmVudD1zO3ZhciB1
PWgubW91bnRDb21wb25lbnQocyxlLHRoaXMuX2hvc3RQYXJlbnQsdGhpcy5faG9zdENvbnRhaW5l
ckluZm8sdGhpcy5fcHJvY2Vzc0NoaWxkQ29udGV4dCh0KSwwKTt0aGlzLl9yZXBsYWNlTm9kZVdp
dGhNYXJrdXAoaSx1LG4pfX0sX3JlcGxhY2VOb2RlV2l0aE1hcmt1cDpmdW5jdGlvbihlLHQsbil7
bC5yZXBsYWNlTm9kZVdpdGhNYXJrdXAoZSx0LG4pfSxfcmVuZGVyVmFsaWRhdGVkQ29tcG9uZW50
V2l0aG91dE93bmVyT3JDb250ZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2luc3RhbmNlLnJl
bmRlcigpfSxfcmVuZGVyVmFsaWRhdGVkQ29tcG9uZW50OmZ1bmN0aW9uKCl7dmFyIGU7aWYodGhp
cy5fY29tcG9zaXRlVHlwZSE9PXkuU3RhdGVsZXNzRnVuY3Rpb25hbCl7Yy5jdXJyZW50PXRoaXM7
dHJ5e2U9dGhpcy5fcmVuZGVyVmFsaWRhdGVkQ29tcG9uZW50V2l0aG91dE93bmVyT3JDb250ZXh0
KCl9ZmluYWxseXtjLmN1cnJlbnQ9bnVsbH19ZWxzZSBlPXRoaXMuX3JlbmRlclZhbGlkYXRlZENv
bXBvbmVudFdpdGhvdXRPd25lck9yQ29udGV4dCgpO3JldHVybiBudWxsPT09ZXx8ITE9PT1lfHx1
LmlzVmFsaWRFbGVtZW50KGUpfHxhKCIxMDkiLHRoaXMuZ2V0TmFtZSgpfHwiUmVhY3RDb21wb3Np
dGVDb21wb25lbnQiKSxlfSxhdHRhY2hSZWY6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmdldFB1
YmxpY0luc3RhbmNlKCk7bnVsbD09biYmYSgiMTEwIik7dmFyIHI9dC5nZXRQdWJsaWNJbnN0YW5j
ZSgpOyhuLnJlZnM9PT1tP24ucmVmcz17fTpuLnJlZnMpW2VdPXJ9LGRldGFjaFJlZjpmdW5jdGlv
bihlKXtkZWxldGUgdGhpcy5nZXRQdWJsaWNJbnN0YW5jZSgpLnJlZnNbZV19LGdldE5hbWU6ZnVu
Y3Rpb24oKXt2YXIgZT10aGlzLl9jdXJyZW50RWxlbWVudC50eXBlLHQ9dGhpcy5faW5zdGFuY2Um
JnRoaXMuX2luc3RhbmNlLmNvbnN0cnVjdG9yO3JldHVybiBlLmRpc3BsYXlOYW1lfHx0JiZ0LmRp
c3BsYXlOYW1lfHxlLm5hbWV8fHQmJnQubmFtZXx8bnVsbH0sZ2V0UHVibGljSW5zdGFuY2U6ZnVu
Y3Rpb24oKXt2YXIgZT10aGlzLl9pbnN0YW5jZTtyZXR1cm4gdGhpcy5fY29tcG9zaXRlVHlwZT09
PXkuU3RhdGVsZXNzRnVuY3Rpb25hbD9udWxsOmV9LF9pbnN0YW50aWF0ZVJlYWN0Q29tcG9uZW50
Om51bGx9O3QuZXhwb3J0cz1DfSx7MTEyOjExMiwxMTY6MTE2LDExOToxMTksMTIwOjEyMCwxMzA6
MTMwLDEzNzoxMzcsMTQxOjE0MSwxNDI6MTQyLDE0MzoxNDMsMjg6MjgsNTA6NTAsNTc6NTcsNTg6
NTgsNjI6NjIsNjY6NjZ9XSwzMDpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1l
KDMzKSxvPWUoNDcpLGk9ZSg2MCksYT1lKDY2KSxzPWUoNzEpLHU9ZSg3MiksbD1lKDk2KSxjPWUo
MTAzKSxwPWUoMTEzKTtlKDE0Mik7by5pbmplY3QoKTt2YXIgZD17ZmluZERPTU5vZGU6bCxyZW5k
ZXI6aS5yZW5kZXIsdW5tb3VudENvbXBvbmVudEF0Tm9kZTppLnVubW91bnRDb21wb25lbnRBdE5v
ZGUsdmVyc2lvbjp1LHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzOnMuYmF0Y2hlZFVwZGF0ZXMsdW5z
dGFibGVfcmVuZGVyU3VidHJlZUludG9Db250YWluZXI6cH07InVuZGVmaW5lZCIhPXR5cGVvZiBf
X1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18mJiJmdW5jdGlvbiI9PXR5cGVvZiBfX1JFQUNU
X0RFVlRPT0xTX0dMT0JBTF9IT09LX18uaW5qZWN0JiZfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9I
T09LX18uaW5qZWN0KHtDb21wb25lbnRUcmVlOntnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZTpy
LmdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlLGdldE5vZGVGcm9tSW5zdGFuY2U6ZnVuY3Rpb24o
ZSl7cmV0dXJuIGUuX3JlbmRlcmVkQ29tcG9uZW50JiYoZT1jKGUpKSxlP3IuZ2V0Tm9kZUZyb21J
bnN0YW5jZShlKTpudWxsfX0sTW91bnQ6aSxSZWNvbmNpbGVyOmF9KTt0LmV4cG9ydHM9ZH0sezEw
MzoxMDMsMTEzOjExMywxNDI6MTQyLDMzOjMzLDQ3OjQ3LDYwOjYwLDY2OjY2LDcxOjcxLDcyOjcy
LDk2Ojk2fV0sMzE6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtp
ZihlKXt2YXIgdD1lLl9jdXJyZW50RWxlbWVudC5fb3duZXJ8fG51bGw7aWYodCl7dmFyIG49dC5n
ZXROYW1lKCk7aWYobilyZXR1cm4iIFRoaXMgRE9NIG5vZGUgd2FzIHJlbmRlcmVkIGJ5IGAiK24r
ImAuIn19cmV0dXJuIiJ9ZnVuY3Rpb24gbyhlLHQpe3QmJihZW2UuX3RhZ10mJihudWxsIT10LmNo
aWxkcmVufHxudWxsIT10LmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MKSYmbSgiMTM3IixlLl90YWcs
ZS5fY3VycmVudEVsZW1lbnQuX293bmVyPyIgQ2hlY2sgdGhlIHJlbmRlciBtZXRob2Qgb2YgIitl
Ll9jdXJyZW50RWxlbWVudC5fb3duZXIuZ2V0TmFtZSgpKyIuIjoiIiksbnVsbCE9dC5kYW5nZXJv
dXNseVNldElubmVySFRNTCYmKG51bGwhPXQuY2hpbGRyZW4mJm0oIjYwIiksIm9iamVjdCI9PXR5
cGVvZiB0LmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MJiZCIGluIHQuZGFuZ2Vyb3VzbHlTZXRJbm5l
ckhUTUx8fG0oIjYxIikpLG51bGwhPXQuc3R5bGUmJiJvYmplY3QiIT10eXBlb2YgdC5zdHlsZSYm
bSgiNjIiLHIoZSkpKX1mdW5jdGlvbiBpKGUsdCxuLHIpe2lmKCEociBpbnN0YW5jZW9mIFIpKXt2
YXIgbz1lLl9ob3N0Q29udGFpbmVySW5mbyxpPW8uX25vZGUmJm8uX25vZGUubm9kZVR5cGU9PT1I
LHM9aT9vLl9ub2RlOm8uX293bmVyRG9jdW1lbnQ7Rih0LHMpLHIuZ2V0UmVhY3RNb3VudFJlYWR5
KCkuZW5xdWV1ZShhLHtpbnN0OmUscmVnaXN0cmF0aW9uTmFtZTp0LGxpc3RlbmVyOm59KX19ZnVu
Y3Rpb24gYSgpe3ZhciBlPXRoaXM7eC5wdXRMaXN0ZW5lcihlLmluc3QsZS5yZWdpc3RyYXRpb25O
YW1lLGUubGlzdGVuZXIpfWZ1bmN0aW9uIHMoKXt2YXIgZT10aGlzO1MucG9zdE1vdW50V3JhcHBl
cihlKX1mdW5jdGlvbiB1KCl7dmFyIGU9dGhpcztJLnBvc3RNb3VudFdyYXBwZXIoZSl9ZnVuY3Rp
b24gbCgpe3ZhciBlPXRoaXM7Ti5wb3N0TW91bnRXcmFwcGVyKGUpfWZ1bmN0aW9uIGMoKXt2YXIg
ZT10aGlzO2UuX3Jvb3ROb2RlSUR8fG0oIjYzIik7dmFyIHQ9VShlKTtzd2l0Y2godHx8bSgiNjQi
KSxlLl90YWcpe2Nhc2UiaWZyYW1lIjpjYXNlIm9iamVjdCI6ZS5fd3JhcHBlclN0YXRlLmxpc3Rl
bmVycz1bVC50cmFwQnViYmxlZEV2ZW50KCJ0b3BMb2FkIiwibG9hZCIsdCldO2JyZWFrO2Nhc2Ui
dmlkZW8iOmNhc2UiYXVkaW8iOmUuX3dyYXBwZXJTdGF0ZS5saXN0ZW5lcnM9W107Zm9yKHZhciBu
IGluIHEpcS5oYXNPd25Qcm9wZXJ0eShuKSYmZS5fd3JhcHBlclN0YXRlLmxpc3RlbmVycy5wdXNo
KFQudHJhcEJ1YmJsZWRFdmVudChuLHFbbl0sdCkpO2JyZWFrO2Nhc2Uic291cmNlIjplLl93cmFw
cGVyU3RhdGUubGlzdGVuZXJzPVtULnRyYXBCdWJibGVkRXZlbnQoInRvcEVycm9yIiwiZXJyb3Ii
LHQpXTticmVhaztjYXNlImltZyI6ZS5fd3JhcHBlclN0YXRlLmxpc3RlbmVycz1bVC50cmFwQnVi
YmxlZEV2ZW50KCJ0b3BFcnJvciIsImVycm9yIix0KSxULnRyYXBCdWJibGVkRXZlbnQoInRvcExv
YWQiLCJsb2FkIix0KV07YnJlYWs7Y2FzZSJmb3JtIjplLl93cmFwcGVyU3RhdGUubGlzdGVuZXJz
PVtULnRyYXBCdWJibGVkRXZlbnQoInRvcFJlc2V0IiwicmVzZXQiLHQpLFQudHJhcEJ1YmJsZWRF
dmVudCgidG9wU3VibWl0Iiwic3VibWl0Iix0KV07YnJlYWs7Y2FzZSJpbnB1dCI6Y2FzZSJzZWxl
Y3QiOmNhc2UidGV4dGFyZWEiOmUuX3dyYXBwZXJTdGF0ZS5saXN0ZW5lcnM9W1QudHJhcEJ1YmJs
ZWRFdmVudCgidG9wSW52YWxpZCIsImludmFsaWQiLHQpXX19ZnVuY3Rpb24gcCgpe00ucG9zdFVw
ZGF0ZVdyYXBwZXIodGhpcyl9ZnVuY3Rpb24gZChlKXtHLmNhbGwoUSxlKXx8KFgudGVzdChlKXx8
bSgiNjUiLGUpLFFbZV09ITApfWZ1bmN0aW9uIGYoZSx0KXtyZXR1cm4gZS5pbmRleE9mKCItIik+
PTB8fG51bGwhPXQuaXN9ZnVuY3Rpb24gaChlKXt2YXIgdD1lLnR5cGU7ZCh0KSx0aGlzLl9jdXJy
ZW50RWxlbWVudD1lLHRoaXMuX3RhZz10LnRvTG93ZXJDYXNlKCksdGhpcy5fbmFtZXNwYWNlVVJJ
PW51bGwsdGhpcy5fcmVuZGVyZWRDaGlsZHJlbj1udWxsLHRoaXMuX3ByZXZpb3VzU3R5bGU9bnVs
bCx0aGlzLl9wcmV2aW91c1N0eWxlQ29weT1udWxsLHRoaXMuX2hvc3ROb2RlPW51bGwsdGhpcy5f
aG9zdFBhcmVudD1udWxsLHRoaXMuX3Jvb3ROb2RlSUQ9MCx0aGlzLl9kb21JRD0wLHRoaXMuX2hv
c3RDb250YWluZXJJbmZvPW51bGwsdGhpcy5fd3JhcHBlclN0YXRlPW51bGwsdGhpcy5fdG9wTGV2
ZWxXcmFwcGVyPW51bGwsdGhpcy5fZmxhZ3M9MH12YXIgbT1lKDExMiksdj1lKDE0MyksZz1lKDIp
LHk9ZSg1KSxfPWUoOSksQz1lKDEwKSxiPWUoMTEpLEU9ZSgxMikseD1lKDE2KSx3PWUoMTcpLFQ9
ZSgyNSksaz1lKDMyKSxQPWUoMzMpLFM9ZSgzOCksTj1lKDM5KSxNPWUoNDApLEk9ZSg0MyksTz0o
ZSg1OCksZSg2MSkpLFI9ZSg2OCksQT0oZSgxMjkpLGUoOTUpKSxEPShlKDEzNyksZSgxMDkpLGUo
MTQxKSxlKDExOCksZSgxNDIpLGspLEw9eC5kZWxldGVMaXN0ZW5lcixVPVAuZ2V0Tm9kZUZyb21J
bnN0YW5jZSxGPVQubGlzdGVuVG8saj13LnJlZ2lzdHJhdGlvbk5hbWVNb2R1bGVzLFY9e3N0cmlu
ZzohMCxudW1iZXI6ITB9LEI9Il9faHRtbCIsVz17Y2hpbGRyZW46bnVsbCxkYW5nZXJvdXNseVNl
dElubmVySFRNTDpudWxsLHN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZzpudWxsfSxIPTEx
LHE9e3RvcEFib3J0OiJhYm9ydCIsdG9wQ2FuUGxheToiY2FucGxheSIsdG9wQ2FuUGxheVRocm91
Z2g6ImNhbnBsYXl0aHJvdWdoIix0b3BEdXJhdGlvbkNoYW5nZToiZHVyYXRpb25jaGFuZ2UiLHRv
cEVtcHRpZWQ6ImVtcHRpZWQiLHRvcEVuY3J5cHRlZDoiZW5jcnlwdGVkIix0b3BFbmRlZDoiZW5k
ZWQiLHRvcEVycm9yOiJlcnJvciIsdG9wTG9hZGVkRGF0YToibG9hZGVkZGF0YSIsdG9wTG9hZGVk
TWV0YWRhdGE6ImxvYWRlZG1ldGFkYXRhIix0b3BMb2FkU3RhcnQ6ImxvYWRzdGFydCIsdG9wUGF1
c2U6InBhdXNlIix0b3BQbGF5OiJwbGF5Iix0b3BQbGF5aW5nOiJwbGF5aW5nIix0b3BQcm9ncmVz
czoicHJvZ3Jlc3MiLHRvcFJhdGVDaGFuZ2U6InJhdGVjaGFuZ2UiLHRvcFNlZWtlZDoic2Vla2Vk
Iix0b3BTZWVraW5nOiJzZWVraW5nIix0b3BTdGFsbGVkOiJzdGFsbGVkIix0b3BTdXNwZW5kOiJz
dXNwZW5kIix0b3BUaW1lVXBkYXRlOiJ0aW1ldXBkYXRlIix0b3BWb2x1bWVDaGFuZ2U6InZvbHVt
ZWNoYW5nZSIsdG9wV2FpdGluZzoid2FpdGluZyJ9LEs9e2FyZWE6ITAsYmFzZTohMCxicjohMCxj
b2w6ITAsZW1iZWQ6ITAsaHI6ITAsaW1nOiEwLGlucHV0OiEwLGtleWdlbjohMCxsaW5rOiEwLG1l
dGE6ITAscGFyYW06ITAsc291cmNlOiEwLHRyYWNrOiEwLHdicjohMH0sej17bGlzdGluZzohMCxw
cmU6ITAsdGV4dGFyZWE6ITB9LFk9dih7bWVudWl0ZW06ITB9LEspLFg9L15bYS16QS1aXVthLXpB
LVo6X1wuXC1cZF0qJC8sUT17fSxHPXt9Lmhhc093blByb3BlcnR5LCQ9MTtoLmRpc3BsYXlOYW1l
PSJSZWFjdERPTUNvbXBvbmVudCIsaC5NaXhpbj17bW91bnRDb21wb25lbnQ6ZnVuY3Rpb24oZSx0
LG4scil7dGhpcy5fcm9vdE5vZGVJRD0kKyssdGhpcy5fZG9tSUQ9bi5faWRDb3VudGVyKyssdGhp
cy5faG9zdFBhcmVudD10LHRoaXMuX2hvc3RDb250YWluZXJJbmZvPW47dmFyIGk9dGhpcy5fY3Vy
cmVudEVsZW1lbnQucHJvcHM7c3dpdGNoKHRoaXMuX3RhZyl7Y2FzZSJhdWRpbyI6Y2FzZSJmb3Jt
IjpjYXNlImlmcmFtZSI6Y2FzZSJpbWciOmNhc2UibGluayI6Y2FzZSJvYmplY3QiOmNhc2Uic291
cmNlIjpjYXNlInZpZGVvIjp0aGlzLl93cmFwcGVyU3RhdGU9e2xpc3RlbmVyczpudWxsfSxlLmdl
dFJlYWN0TW91bnRSZWFkeSgpLmVucXVldWUoYyx0aGlzKTticmVhaztjYXNlImlucHV0IjpTLm1v
dW50V3JhcHBlcih0aGlzLGksdCksaT1TLmdldEhvc3RQcm9wcyh0aGlzLGkpLGUuZ2V0UmVhY3RN
b3VudFJlYWR5KCkuZW5xdWV1ZShjLHRoaXMpO2JyZWFrO2Nhc2Uib3B0aW9uIjpOLm1vdW50V3Jh
cHBlcih0aGlzLGksdCksaT1OLmdldEhvc3RQcm9wcyh0aGlzLGkpO2JyZWFrO2Nhc2Uic2VsZWN0
IjpNLm1vdW50V3JhcHBlcih0aGlzLGksdCksaT1NLmdldEhvc3RQcm9wcyh0aGlzLGkpLGUuZ2V0
UmVhY3RNb3VudFJlYWR5KCkuZW5xdWV1ZShjLHRoaXMpO2JyZWFrO2Nhc2UidGV4dGFyZWEiOkku
bW91bnRXcmFwcGVyKHRoaXMsaSx0KSxpPUkuZ2V0SG9zdFByb3BzKHRoaXMsaSksZS5nZXRSZWFj
dE1vdW50UmVhZHkoKS5lbnF1ZXVlKGMsdGhpcyl9byh0aGlzLGkpO3ZhciBhLHA7bnVsbCE9dD8o
YT10Ll9uYW1lc3BhY2VVUkkscD10Ll90YWcpOm4uX3RhZyYmKGE9bi5fbmFtZXNwYWNlVVJJLHA9
bi5fdGFnKSwobnVsbD09YXx8YT09PUMuc3ZnJiYiZm9yZWlnbm9iamVjdCI9PT1wKSYmKGE9Qy5o
dG1sKSxhPT09Qy5odG1sJiYoInN2ZyI9PT10aGlzLl90YWc/YT1DLnN2ZzoibWF0aCI9PT10aGlz
Ll90YWcmJihhPUMubWF0aG1sKSksdGhpcy5fbmFtZXNwYWNlVVJJPWE7dmFyIGQ7aWYoZS51c2VD
cmVhdGVFbGVtZW50KXt2YXIgZixoPW4uX293bmVyRG9jdW1lbnQ7aWYoYT09PUMuaHRtbClpZigi
c2NyaXB0Ij09PXRoaXMuX3RhZyl7dmFyIG09aC5jcmVhdGVFbGVtZW50KCJkaXYiKSx2PXRoaXMu
X2N1cnJlbnRFbGVtZW50LnR5cGU7bS5pbm5lckhUTUw9IjwiK3YrIj48LyIrdisiPiIsZj1tLnJl
bW92ZUNoaWxkKG0uZmlyc3RDaGlsZCl9ZWxzZSBmPWkuaXM/aC5jcmVhdGVFbGVtZW50KHRoaXMu
X2N1cnJlbnRFbGVtZW50LnR5cGUsaS5pcyk6aC5jcmVhdGVFbGVtZW50KHRoaXMuX2N1cnJlbnRF
bGVtZW50LnR5cGUpO2Vsc2UgZj1oLmNyZWF0ZUVsZW1lbnROUyhhLHRoaXMuX2N1cnJlbnRFbGVt
ZW50LnR5cGUpO1AucHJlY2FjaGVOb2RlKHRoaXMsZiksdGhpcy5fZmxhZ3N8PUQuaGFzQ2FjaGVk
Q2hpbGROb2Rlcyx0aGlzLl9ob3N0UGFyZW50fHxFLnNldEF0dHJpYnV0ZUZvclJvb3QoZiksdGhp
cy5fdXBkYXRlRE9NUHJvcGVydGllcyhudWxsLGksZSk7dmFyIHk9XyhmKTt0aGlzLl9jcmVhdGVJ
bml0aWFsQ2hpbGRyZW4oZSxpLHIseSksZD15fWVsc2V7dmFyIGI9dGhpcy5fY3JlYXRlT3BlblRh
Z01hcmt1cEFuZFB1dExpc3RlbmVycyhlLGkpLHg9dGhpcy5fY3JlYXRlQ29udGVudE1hcmt1cChl
LGkscik7ZD0heCYmS1t0aGlzLl90YWddP2IrIi8+IjpiKyI+Iit4KyI8LyIrdGhpcy5fY3VycmVu
dEVsZW1lbnQudHlwZSsiPiJ9c3dpdGNoKHRoaXMuX3RhZyl7Y2FzZSJpbnB1dCI6ZS5nZXRSZWFj
dE1vdW50UmVhZHkoKS5lbnF1ZXVlKHMsdGhpcyksaS5hdXRvRm9jdXMmJmUuZ2V0UmVhY3RNb3Vu
dFJlYWR5KCkuZW5xdWV1ZShnLmZvY3VzRE9NQ29tcG9uZW50LHRoaXMpO2JyZWFrO2Nhc2UidGV4
dGFyZWEiOmUuZ2V0UmVhY3RNb3VudFJlYWR5KCkuZW5xdWV1ZSh1LHRoaXMpLGkuYXV0b0ZvY3Vz
JiZlLmdldFJlYWN0TW91bnRSZWFkeSgpLmVucXVldWUoZy5mb2N1c0RPTUNvbXBvbmVudCx0aGlz
KTticmVhaztjYXNlInNlbGVjdCI6Y2FzZSJidXR0b24iOmkuYXV0b0ZvY3VzJiZlLmdldFJlYWN0
TW91bnRSZWFkeSgpLmVucXVldWUoZy5mb2N1c0RPTUNvbXBvbmVudCx0aGlzKTticmVhaztjYXNl
Im9wdGlvbiI6ZS5nZXRSZWFjdE1vdW50UmVhZHkoKS5lbnF1ZXVlKGwsdGhpcyl9cmV0dXJuIGR9
LF9jcmVhdGVPcGVuVGFnTWFya3VwQW5kUHV0TGlzdGVuZXJzOmZ1bmN0aW9uKGUsdCl7dmFyIG49
IjwiK3RoaXMuX2N1cnJlbnRFbGVtZW50LnR5cGU7Zm9yKHZhciByIGluIHQpaWYodC5oYXNPd25Q
cm9wZXJ0eShyKSl7dmFyIG89dFtyXTtpZihudWxsIT1vKWlmKGouaGFzT3duUHJvcGVydHkocikp
byYmaSh0aGlzLHIsbyxlKTtlbHNleyJzdHlsZSI9PT1yJiYobyYmKG89dGhpcy5fcHJldmlvdXNT
dHlsZUNvcHk9dih7fSx0LnN0eWxlKSksbz15LmNyZWF0ZU1hcmt1cEZvclN0eWxlcyhvLHRoaXMp
KTt2YXIgYT1udWxsO251bGwhPXRoaXMuX3RhZyYmZih0aGlzLl90YWcsdCk/Vy5oYXNPd25Qcm9w
ZXJ0eShyKXx8KGE9RS5jcmVhdGVNYXJrdXBGb3JDdXN0b21BdHRyaWJ1dGUocixvKSk6YT1FLmNy
ZWF0ZU1hcmt1cEZvclByb3BlcnR5KHIsbyksYSYmKG4rPSIgIithKX19cmV0dXJuIGUucmVuZGVy
VG9TdGF0aWNNYXJrdXA/bjoodGhpcy5faG9zdFBhcmVudHx8KG4rPSIgIitFLmNyZWF0ZU1hcmt1
cEZvclJvb3QoKSksbis9IiAiK0UuY3JlYXRlTWFya3VwRm9ySUQodGhpcy5fZG9tSUQpKX0sX2Ny
ZWF0ZUNvbnRlbnRNYXJrdXA6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPSIiLG89dC5kYW5nZXJvdXNs
eVNldElubmVySFRNTDtpZihudWxsIT1vKW51bGwhPW8uX19odG1sJiYocj1vLl9faHRtbCk7ZWxz
ZXt2YXIgaT1WW3R5cGVvZiB0LmNoaWxkcmVuXT90LmNoaWxkcmVuOm51bGwsYT1udWxsIT1pP251
bGw6dC5jaGlsZHJlbjtpZihudWxsIT1pKXI9QShpKTtlbHNlIGlmKG51bGwhPWEpe3ZhciBzPXRo
aXMubW91bnRDaGlsZHJlbihhLGUsbik7cj1zLmpvaW4oIiIpfX1yZXR1cm4gelt0aGlzLl90YWdd
JiYiXG4iPT09ci5jaGFyQXQoMCk/IlxuIityOnJ9LF9jcmVhdGVJbml0aWFsQ2hpbGRyZW46ZnVu
Y3Rpb24oZSx0LG4scil7dmFyIG89dC5kYW5nZXJvdXNseVNldElubmVySFRNTDtpZihudWxsIT1v
KW51bGwhPW8uX19odG1sJiZfLnF1ZXVlSFRNTChyLG8uX19odG1sKTtlbHNle3ZhciBpPVZbdHlw
ZW9mIHQuY2hpbGRyZW5dP3QuY2hpbGRyZW46bnVsbCxhPW51bGwhPWk/bnVsbDp0LmNoaWxkcmVu
O2lmKG51bGwhPWkpIiIhPT1pJiZfLnF1ZXVlVGV4dChyLGkpO2Vsc2UgaWYobnVsbCE9YSlmb3Io
dmFyIHM9dGhpcy5tb3VudENoaWxkcmVuKGEsZSxuKSx1PTA7dTxzLmxlbmd0aDt1KyspXy5xdWV1
ZUNoaWxkKHIsc1t1XSl9fSxyZWNlaXZlQ29tcG9uZW50OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10
aGlzLl9jdXJyZW50RWxlbWVudDt0aGlzLl9jdXJyZW50RWxlbWVudD1lLHRoaXMudXBkYXRlQ29t
cG9uZW50KHQscixlLG4pfSx1cGRhdGVDb21wb25lbnQ6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9
dC5wcm9wcyxhPXRoaXMuX2N1cnJlbnRFbGVtZW50LnByb3BzO3N3aXRjaCh0aGlzLl90YWcpe2Nh
c2UiaW5wdXQiOmk9Uy5nZXRIb3N0UHJvcHModGhpcyxpKSxhPVMuZ2V0SG9zdFByb3BzKHRoaXMs
YSk7YnJlYWs7Y2FzZSJvcHRpb24iOmk9Ti5nZXRIb3N0UHJvcHModGhpcyxpKSxhPU4uZ2V0SG9z
dFByb3BzKHRoaXMsYSk7YnJlYWs7Y2FzZSJzZWxlY3QiOmk9TS5nZXRIb3N0UHJvcHModGhpcyxp
KSxhPU0uZ2V0SG9zdFByb3BzKHRoaXMsYSk7YnJlYWs7Y2FzZSJ0ZXh0YXJlYSI6aT1JLmdldEhv
c3RQcm9wcyh0aGlzLGkpLGE9SS5nZXRIb3N0UHJvcHModGhpcyxhKX1zd2l0Y2gobyh0aGlzLGEp
LHRoaXMuX3VwZGF0ZURPTVByb3BlcnRpZXMoaSxhLGUpLHRoaXMuX3VwZGF0ZURPTUNoaWxkcmVu
KGksYSxlLHIpLHRoaXMuX3RhZyl7Y2FzZSJpbnB1dCI6Uy51cGRhdGVXcmFwcGVyKHRoaXMpO2Jy
ZWFrO2Nhc2UidGV4dGFyZWEiOkkudXBkYXRlV3JhcHBlcih0aGlzKTticmVhaztjYXNlInNlbGVj
dCI6ZS5nZXRSZWFjdE1vdW50UmVhZHkoKS5lbnF1ZXVlKHAsdGhpcyl9fSxfdXBkYXRlRE9NUHJv
cGVydGllczpmdW5jdGlvbihlLHQsbil7dmFyIHIsbyxhO2ZvcihyIGluIGUpaWYoIXQuaGFzT3du
UHJvcGVydHkocikmJmUuaGFzT3duUHJvcGVydHkocikmJm51bGwhPWVbcl0paWYoInN0eWxlIj09
PXIpe3ZhciBzPXRoaXMuX3ByZXZpb3VzU3R5bGVDb3B5O2ZvcihvIGluIHMpcy5oYXNPd25Qcm9w
ZXJ0eShvKSYmKGE9YXx8e30sYVtvXT0iIik7dGhpcy5fcHJldmlvdXNTdHlsZUNvcHk9bnVsbH1l
bHNlIGouaGFzT3duUHJvcGVydHkocik/ZVtyXSYmTCh0aGlzLHIpOmYodGhpcy5fdGFnLGUpP1cu
aGFzT3duUHJvcGVydHkocil8fEUuZGVsZXRlVmFsdWVGb3JBdHRyaWJ1dGUoVSh0aGlzKSxyKToo
Yi5wcm9wZXJ0aWVzW3JdfHxiLmlzQ3VzdG9tQXR0cmlidXRlKHIpKSYmRS5kZWxldGVWYWx1ZUZv
clByb3BlcnR5KFUodGhpcykscik7Zm9yKHIgaW4gdCl7dmFyIHU9dFtyXSxsPSJzdHlsZSI9PT1y
P3RoaXMuX3ByZXZpb3VzU3R5bGVDb3B5Om51bGwhPWU/ZVtyXTp2b2lkIDA7aWYodC5oYXNPd25Q
cm9wZXJ0eShyKSYmdSE9PWwmJihudWxsIT11fHxudWxsIT1sKSlpZigic3R5bGUiPT09cilpZih1
P3U9dGhpcy5fcHJldmlvdXNTdHlsZUNvcHk9dih7fSx1KTp0aGlzLl9wcmV2aW91c1N0eWxlQ29w
eT1udWxsLGwpe2ZvcihvIGluIGwpIWwuaGFzT3duUHJvcGVydHkobyl8fHUmJnUuaGFzT3duUHJv
cGVydHkobyl8fChhPWF8fHt9LGFbb109IiIpO2ZvcihvIGluIHUpdS5oYXNPd25Qcm9wZXJ0eShv
KSYmbFtvXSE9PXVbb10mJihhPWF8fHt9LGFbb109dVtvXSl9ZWxzZSBhPXU7ZWxzZSBpZihqLmhh
c093blByb3BlcnR5KHIpKXU/aSh0aGlzLHIsdSxuKTpsJiZMKHRoaXMscik7ZWxzZSBpZihmKHRo
aXMuX3RhZyx0KSlXLmhhc093blByb3BlcnR5KHIpfHxFLnNldFZhbHVlRm9yQXR0cmlidXRlKFUo
dGhpcykscix1KTtlbHNlIGlmKGIucHJvcGVydGllc1tyXXx8Yi5pc0N1c3RvbUF0dHJpYnV0ZShy
KSl7dmFyIGM9VSh0aGlzKTtudWxsIT11P0Uuc2V0VmFsdWVGb3JQcm9wZXJ0eShjLHIsdSk6RS5k
ZWxldGVWYWx1ZUZvclByb3BlcnR5KGMscil9fWEmJnkuc2V0VmFsdWVGb3JTdHlsZXMoVSh0aGlz
KSxhLHRoaXMpfSxfdXBkYXRlRE9NQ2hpbGRyZW46ZnVuY3Rpb24oZSx0LG4scil7dmFyIG89Vlt0
eXBlb2YgZS5jaGlsZHJlbl0/ZS5jaGlsZHJlbjpudWxsLGk9Vlt0eXBlb2YgdC5jaGlsZHJlbl0/
dC5jaGlsZHJlbjpudWxsLGE9ZS5kYW5nZXJvdXNseVNldElubmVySFRNTCYmZS5kYW5nZXJvdXNs
eVNldElubmVySFRNTC5fX2h0bWwscz10LmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MJiZ0LmRhbmdl
cm91c2x5U2V0SW5uZXJIVE1MLl9faHRtbCx1PW51bGwhPW8/bnVsbDplLmNoaWxkcmVuLGw9bnVs
bCE9aT9udWxsOnQuY2hpbGRyZW4sYz1udWxsIT1vfHxudWxsIT1hLHA9bnVsbCE9aXx8bnVsbCE9
cztudWxsIT11JiZudWxsPT1sP3RoaXMudXBkYXRlQ2hpbGRyZW4obnVsbCxuLHIpOmMmJiFwJiZ0
aGlzLnVwZGF0ZVRleHRDb250ZW50KCIiKSxudWxsIT1pP28hPT1pJiZ0aGlzLnVwZGF0ZVRleHRD
b250ZW50KCIiK2kpOm51bGwhPXM/YSE9PXMmJnRoaXMudXBkYXRlTWFya3VwKCIiK3MpOm51bGwh
PWwmJnRoaXMudXBkYXRlQ2hpbGRyZW4obCxuLHIpfSxnZXRIb3N0Tm9kZTpmdW5jdGlvbigpe3Jl
dHVybiBVKHRoaXMpfSx1bm1vdW50Q29tcG9uZW50OmZ1bmN0aW9uKGUpe3N3aXRjaCh0aGlzLl90
YWcpe2Nhc2UiYXVkaW8iOmNhc2UiZm9ybSI6Y2FzZSJpZnJhbWUiOmNhc2UiaW1nIjpjYXNlImxp
bmsiOmNhc2Uib2JqZWN0IjpjYXNlInNvdXJjZSI6Y2FzZSJ2aWRlbyI6dmFyIHQ9dGhpcy5fd3Jh
cHBlclN0YXRlLmxpc3RlbmVycztpZih0KWZvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXRbbl0u
cmVtb3ZlKCk7YnJlYWs7Y2FzZSJodG1sIjpjYXNlImhlYWQiOmNhc2UiYm9keSI6bSgiNjYiLHRo
aXMuX3RhZyl9dGhpcy51bm1vdW50Q2hpbGRyZW4oZSksUC51bmNhY2hlTm9kZSh0aGlzKSx4LmRl
bGV0ZUFsbExpc3RlbmVycyh0aGlzKSx0aGlzLl9yb290Tm9kZUlEPTAsdGhpcy5fZG9tSUQ9MCx0
aGlzLl93cmFwcGVyU3RhdGU9bnVsbH0sZ2V0UHVibGljSW5zdGFuY2U6ZnVuY3Rpb24oKXtyZXR1
cm4gVSh0aGlzKX19LHYoaC5wcm90b3R5cGUsaC5NaXhpbixPLk1peGluKSx0LmV4cG9ydHM9aH0s
ezEwOjEwLDEwOToxMDksMTE6MTEsMTEyOjExMiwxMTg6MTE4LDEyOjEyLDEyOToxMjksMTM3OjEz
NywxNDE6MTQxLDE0MjoxNDIsMTQzOjE0MywxNjoxNiwxNzoxNywyOjIsMjU6MjUsMzI6MzIsMzM6
MzMsMzg6MzgsMzk6MzksNDA6NDAsNDM6NDMsNTo1LDU4OjU4LDYxOjYxLDY4OjY4LDk6OSw5NTo5
NX1dLDMyOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPXtoYXNDYWNoZWRDaGls
ZE5vZGVzOjF9O3QuZXhwb3J0cz1yfSx7fV0sMzM6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmlj
dCI7ZnVuY3Rpb24gcihlLHQpe3JldHVybiAxPT09ZS5ub2RlVHlwZSYmZS5nZXRBdHRyaWJ1dGUo
aCk9PT1TdHJpbmcodCl8fDg9PT1lLm5vZGVUeXBlJiZlLm5vZGVWYWx1ZT09PSIgcmVhY3QtdGV4
dDogIit0KyIgInx8OD09PWUubm9kZVR5cGUmJmUubm9kZVZhbHVlPT09IiByZWFjdC1lbXB0eTog
Iit0KyIgIn1mdW5jdGlvbiBvKGUpe2Zvcih2YXIgdDt0PWUuX3JlbmRlcmVkQ29tcG9uZW50Oyll
PXQ7cmV0dXJuIGV9ZnVuY3Rpb24gaShlLHQpe3ZhciBuPW8oZSk7bi5faG9zdE5vZGU9dCx0W3Zd
PW59ZnVuY3Rpb24gYShlKXt2YXIgdD1lLl9ob3N0Tm9kZTt0JiYoZGVsZXRlIHRbdl0sZS5faG9z
dE5vZGU9bnVsbCl9ZnVuY3Rpb24gcyhlLHQpe2lmKCEoZS5fZmxhZ3MmbS5oYXNDYWNoZWRDaGls
ZE5vZGVzKSl7dmFyIG49ZS5fcmVuZGVyZWRDaGlsZHJlbixhPXQuZmlyc3RDaGlsZDtlOmZvcih2
YXIgcyBpbiBuKWlmKG4uaGFzT3duUHJvcGVydHkocykpe3ZhciB1PW5bc10sbD1vKHUpLl9kb21J
RDtpZigwIT09bCl7Zm9yKDtudWxsIT09YTthPWEubmV4dFNpYmxpbmcpaWYocihhLGwpKXtpKHUs
YSk7Y29udGludWUgZX1wKCIzMiIsbCl9fWUuX2ZsYWdzfD1tLmhhc0NhY2hlZENoaWxkTm9kZXN9
fWZ1bmN0aW9uIHUoZSl7aWYoZVt2XSlyZXR1cm4gZVt2XTtmb3IodmFyIHQ9W107IWVbdl07KXtp
Zih0LnB1c2goZSksIWUucGFyZW50Tm9kZSlyZXR1cm4gbnVsbDtlPWUucGFyZW50Tm9kZX1mb3Io
dmFyIG4scjtlJiYocj1lW3ZdKTtlPXQucG9wKCkpbj1yLHQubGVuZ3RoJiZzKHIsZSk7cmV0dXJu
IG59ZnVuY3Rpb24gbChlKXt2YXIgdD11KGUpO3JldHVybiBudWxsIT10JiZ0Ll9ob3N0Tm9kZT09
PWU/dDpudWxsfWZ1bmN0aW9uIGMoZSl7aWYodm9pZCAwPT09ZS5faG9zdE5vZGUmJnAoIjMzIiks
ZS5faG9zdE5vZGUpcmV0dXJuIGUuX2hvc3ROb2RlO2Zvcih2YXIgdD1bXTshZS5faG9zdE5vZGU7
KXQucHVzaChlKSxlLl9ob3N0UGFyZW50fHxwKCIzNCIpLGU9ZS5faG9zdFBhcmVudDtmb3IoO3Qu
bGVuZ3RoO2U9dC5wb3AoKSlzKGUsZS5faG9zdE5vZGUpO3JldHVybiBlLl9ob3N0Tm9kZX12YXIg
cD1lKDExMiksZD1lKDExKSxmPWUoMzIpLGg9KGUoMTM3KSxkLklEX0FUVFJJQlVURV9OQU1FKSxt
PWYsdj0iX19yZWFjdEludGVybmFsSW5zdGFuY2UkIitNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2
KS5zbGljZSgyKSxnPXtnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZTp1LGdldEluc3RhbmNlRnJv
bU5vZGU6bCxnZXROb2RlRnJvbUluc3RhbmNlOmMscHJlY2FjaGVDaGlsZE5vZGVzOnMscHJlY2Fj
aGVOb2RlOmksdW5jYWNoZU5vZGU6YX07dC5leHBvcnRzPWd9LHsxMToxMSwxMTI6MTEyLDEzNzox
MzcsMzI6MzJ9XSwzNDpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUs
dCl7cmV0dXJue190b3BMZXZlbFdyYXBwZXI6ZSxfaWRDb3VudGVyOjEsX293bmVyRG9jdW1lbnQ6
dD90Lm5vZGVUeXBlPT09bz90OnQub3duZXJEb2N1bWVudDpudWxsLF9ub2RlOnQsX3RhZzp0P3Qu
bm9kZU5hbWUudG9Mb3dlckNhc2UoKTpudWxsLF9uYW1lc3BhY2VVUkk6dD90Lm5hbWVzcGFjZVVS
STpudWxsfX12YXIgbz0oZSgxMTgpLDkpO3QuZXhwb3J0cz1yfSx7MTE4OjExOH1dLDM1OltmdW5j
dGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoMTQzKSxvPWUoOSksaT1lKDMzKSxhPWZ1
bmN0aW9uKGUpe3RoaXMuX2N1cnJlbnRFbGVtZW50PW51bGwsdGhpcy5faG9zdE5vZGU9bnVsbCx0
aGlzLl9ob3N0UGFyZW50PW51bGwsdGhpcy5faG9zdENvbnRhaW5lckluZm89bnVsbCx0aGlzLl9k
b21JRD0wfTtyKGEucHJvdG90eXBlLHttb3VudENvbXBvbmVudDpmdW5jdGlvbihlLHQsbixyKXt2
YXIgYT1uLl9pZENvdW50ZXIrKzt0aGlzLl9kb21JRD1hLHRoaXMuX2hvc3RQYXJlbnQ9dCx0aGlz
Ll9ob3N0Q29udGFpbmVySW5mbz1uO3ZhciBzPSIgcmVhY3QtZW1wdHk6ICIrdGhpcy5fZG9tSUQr
IiAiO2lmKGUudXNlQ3JlYXRlRWxlbWVudCl7dmFyIHU9bi5fb3duZXJEb2N1bWVudCxsPXUuY3Jl
YXRlQ29tbWVudChzKTtyZXR1cm4gaS5wcmVjYWNoZU5vZGUodGhpcyxsKSxvKGwpfXJldHVybiBl
LnJlbmRlclRvU3RhdGljTWFya3VwPyIiOiI8IS0tIitzKyItLT4ifSxyZWNlaXZlQ29tcG9uZW50
OmZ1bmN0aW9uKCl7fSxnZXRIb3N0Tm9kZTpmdW5jdGlvbigpe3JldHVybiBpLmdldE5vZGVGcm9t
SW5zdGFuY2UodGhpcyl9LHVubW91bnRDb21wb25lbnQ6ZnVuY3Rpb24oKXtpLnVuY2FjaGVOb2Rl
KHRoaXMpfX0pLHQuZXhwb3J0cz1hfSx7MTQzOjE0MywzMzozMyw5Ojl9XSwzNjpbZnVuY3Rpb24o
ZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj17dXNlQ3JlYXRlRWxlbWVudDohMCx1c2VGaWJlcjoh
MX07dC5leHBvcnRzPXJ9LHt9XSwzNzpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIg
cj1lKDgpLG89ZSgzMyksaT17ZGFuZ2Vyb3VzbHlQcm9jZXNzQ2hpbGRyZW5VcGRhdGVzOmZ1bmN0
aW9uKGUsdCl7dmFyIG49by5nZXROb2RlRnJvbUluc3RhbmNlKGUpO3IucHJvY2Vzc1VwZGF0ZXMo
bix0KX19O3QuZXhwb3J0cz1pfSx7MzM6MzMsODo4fV0sMzg6W2Z1bmN0aW9uKGUsdCxuKXsidXNl
IHN0cmljdCI7ZnVuY3Rpb24gcigpe3RoaXMuX3Jvb3ROb2RlSUQmJmQudXBkYXRlV3JhcHBlcih0
aGlzKX1mdW5jdGlvbiBvKGUpe3JldHVybiJjaGVja2JveCI9PT1lLnR5cGV8fCJyYWRpbyI9PT1l
LnR5cGU/bnVsbCE9ZS5jaGVja2VkOm51bGwhPWUudmFsdWV9ZnVuY3Rpb24gaShlKXt2YXIgdD10
aGlzLl9jdXJyZW50RWxlbWVudC5wcm9wcyxuPWwuZXhlY3V0ZU9uQ2hhbmdlKHQsZSk7cC5hc2Fw
KHIsdGhpcyk7dmFyIG89dC5uYW1lO2lmKCJyYWRpbyI9PT10LnR5cGUmJm51bGwhPW8pe2Zvcih2
YXIgaT1jLmdldE5vZGVGcm9tSW5zdGFuY2UodGhpcykscz1pO3MucGFyZW50Tm9kZTspcz1zLnBh
cmVudE5vZGU7Zm9yKHZhciB1PXMucXVlcnlTZWxlY3RvckFsbCgiaW5wdXRbbmFtZT0iK0pTT04u
c3RyaW5naWZ5KCIiK28pKyddW3R5cGU9InJhZGlvIl0nKSxkPTA7ZDx1Lmxlbmd0aDtkKyspe3Zh
ciBmPXVbZF07aWYoZiE9PWkmJmYuZm9ybT09PWkuZm9ybSl7dmFyIGg9Yy5nZXRJbnN0YW5jZUZy
b21Ob2RlKGYpO2h8fGEoIjkwIikscC5hc2FwKHIsaCl9fX1yZXR1cm4gbn12YXIgYT1lKDExMiks
cz1lKDE0MyksdT1lKDEyKSxsPWUoMjMpLGM9ZSgzMykscD1lKDcxKSxkPShlKDEzNyksZSgxNDIp
LHtnZXRIb3N0UHJvcHM6ZnVuY3Rpb24oZSx0KXt2YXIgbj1sLmdldFZhbHVlKHQpLHI9bC5nZXRD
aGVja2VkKHQpO3JldHVybiBzKHt0eXBlOnZvaWQgMCxzdGVwOnZvaWQgMCxtaW46dm9pZCAwLG1h
eDp2b2lkIDB9LHQse2RlZmF1bHRDaGVja2VkOnZvaWQgMCxkZWZhdWx0VmFsdWU6dm9pZCAwLHZh
bHVlOm51bGwhPW4/bjplLl93cmFwcGVyU3RhdGUuaW5pdGlhbFZhbHVlLGNoZWNrZWQ6bnVsbCE9
cj9yOmUuX3dyYXBwZXJTdGF0ZS5pbml0aWFsQ2hlY2tlZCxvbkNoYW5nZTplLl93cmFwcGVyU3Rh
dGUub25DaGFuZ2V9KX0sbW91bnRXcmFwcGVyOmZ1bmN0aW9uKGUsdCl7dmFyIG49dC5kZWZhdWx0
VmFsdWU7ZS5fd3JhcHBlclN0YXRlPXtpbml0aWFsQ2hlY2tlZDpudWxsIT10LmNoZWNrZWQ/dC5j
aGVja2VkOnQuZGVmYXVsdENoZWNrZWQsaW5pdGlhbFZhbHVlOm51bGwhPXQudmFsdWU/dC52YWx1
ZTpuLGxpc3RlbmVyczpudWxsLG9uQ2hhbmdlOmkuYmluZChlKSxjb250cm9sbGVkOm8odCl9fSx1
cGRhdGVXcmFwcGVyOmZ1bmN0aW9uKGUpe3ZhciB0PWUuX2N1cnJlbnRFbGVtZW50LnByb3BzLG49
dC5jaGVja2VkO251bGwhPW4mJnUuc2V0VmFsdWVGb3JQcm9wZXJ0eShjLmdldE5vZGVGcm9tSW5z
dGFuY2UoZSksImNoZWNrZWQiLG58fCExKTt2YXIgcj1jLmdldE5vZGVGcm9tSW5zdGFuY2UoZSks
bz1sLmdldFZhbHVlKHQpO2lmKG51bGwhPW8paWYoMD09PW8mJiIiPT09ci52YWx1ZSlyLnZhbHVl
PSIwIjtlbHNlIGlmKCJudW1iZXIiPT09dC50eXBlKXt2YXIgaT1wYXJzZUZsb2F0KHIudmFsdWUs
MTApfHwwO28hPWkmJihyLnZhbHVlPSIiK28pfWVsc2UgbyE9ci52YWx1ZSYmKHIudmFsdWU9IiIr
byk7ZWxzZSBudWxsPT10LnZhbHVlJiZudWxsIT10LmRlZmF1bHRWYWx1ZSYmci5kZWZhdWx0VmFs
dWUhPT0iIit0LmRlZmF1bHRWYWx1ZSYmKHIuZGVmYXVsdFZhbHVlPSIiK3QuZGVmYXVsdFZhbHVl
KSxudWxsPT10LmNoZWNrZWQmJm51bGwhPXQuZGVmYXVsdENoZWNrZWQmJihyLmRlZmF1bHRDaGVj
a2VkPSEhdC5kZWZhdWx0Q2hlY2tlZCl9LHBvc3RNb3VudFdyYXBwZXI6ZnVuY3Rpb24oZSl7dmFy
IHQ9ZS5fY3VycmVudEVsZW1lbnQucHJvcHMsbj1jLmdldE5vZGVGcm9tSW5zdGFuY2UoZSk7c3dp
dGNoKHQudHlwZSl7Y2FzZSJzdWJtaXQiOmNhc2UicmVzZXQiOmJyZWFrO2Nhc2UiY29sb3IiOmNh
c2UiZGF0ZSI6Y2FzZSJkYXRldGltZSI6Y2FzZSJkYXRldGltZS1sb2NhbCI6Y2FzZSJtb250aCI6
Y2FzZSJ0aW1lIjpjYXNlIndlZWsiOm4udmFsdWU9IiIsbi52YWx1ZT1uLmRlZmF1bHRWYWx1ZTti
cmVhaztkZWZhdWx0Om4udmFsdWU9bi52YWx1ZX12YXIgcj1uLm5hbWU7IiIhPT1yJiYobi5uYW1l
PSIiKSxuLmRlZmF1bHRDaGVja2VkPSFuLmRlZmF1bHRDaGVja2VkLG4uZGVmYXVsdENoZWNrZWQ9
IW4uZGVmYXVsdENoZWNrZWQsIiIhPT1yJiYobi5uYW1lPXIpfX0pO3QuZXhwb3J0cz1kfSx7MTEy
OjExMiwxMjoxMiwxMzc6MTM3LDE0MjoxNDIsMTQzOjE0MywyMzoyMywzMzozMyw3MTo3MX1dLDM5
OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7dmFyIHQ9IiI7cmV0
dXJuIGkuQ2hpbGRyZW4uZm9yRWFjaChlLGZ1bmN0aW9uKGUpe251bGwhPWUmJigic3RyaW5nIj09
dHlwZW9mIGV8fCJudW1iZXIiPT10eXBlb2YgZT90Kz1lOnV8fCh1PSEwKSl9KSx0fXZhciBvPWUo
MTQzKSxpPWUoMTIwKSxhPWUoMzMpLHM9ZSg0MCksdT0oZSgxNDIpLCExKSxsPXttb3VudFdyYXBw
ZXI6ZnVuY3Rpb24oZSx0LG4pe3ZhciBvPW51bGw7aWYobnVsbCE9bil7dmFyIGk9bjsib3B0Z3Jv
dXAiPT09aS5fdGFnJiYoaT1pLl9ob3N0UGFyZW50KSxudWxsIT1pJiYic2VsZWN0Ij09PWkuX3Rh
ZyYmKG89cy5nZXRTZWxlY3RWYWx1ZUNvbnRleHQoaSkpfXZhciBhPW51bGw7aWYobnVsbCE9byl7
dmFyIHU7aWYodT1udWxsIT10LnZhbHVlP3QudmFsdWUrIiI6cih0LmNoaWxkcmVuKSxhPSExLEFy
cmF5LmlzQXJyYXkobykpe2Zvcih2YXIgbD0wO2w8by5sZW5ndGg7bCsrKWlmKCIiK29bbF09PT11
KXthPSEwO2JyZWFrfX1lbHNlIGE9IiIrbz09PXV9ZS5fd3JhcHBlclN0YXRlPXtzZWxlY3RlZDph
fX0scG9zdE1vdW50V3JhcHBlcjpmdW5jdGlvbihlKXt2YXIgdD1lLl9jdXJyZW50RWxlbWVudC5w
cm9wcztudWxsIT10LnZhbHVlJiZhLmdldE5vZGVGcm9tSW5zdGFuY2UoZSkuc2V0QXR0cmlidXRl
KCJ2YWx1ZSIsdC52YWx1ZSl9LGdldEhvc3RQcm9wczpmdW5jdGlvbihlLHQpe3ZhciBuPW8oe3Nl
bGVjdGVkOnZvaWQgMCxjaGlsZHJlbjp2b2lkIDB9LHQpO251bGwhPWUuX3dyYXBwZXJTdGF0ZS5z
ZWxlY3RlZCYmKG4uc2VsZWN0ZWQ9ZS5fd3JhcHBlclN0YXRlLnNlbGVjdGVkKTt2YXIgaT1yKHQu
Y2hpbGRyZW4pO3JldHVybiBpJiYobi5jaGlsZHJlbj1pKSxufX07dC5leHBvcnRzPWx9LHsxMjA6
MTIwLDE0MjoxNDIsMTQzOjE0MywzMzozMyw0MDo0MH1dLDQwOltmdW5jdGlvbihlLHQsbil7InVz
ZSBzdHJpY3QiO2Z1bmN0aW9uIHIoKXtpZih0aGlzLl9yb290Tm9kZUlEJiZ0aGlzLl93cmFwcGVy
U3RhdGUucGVuZGluZ1VwZGF0ZSl7dGhpcy5fd3JhcHBlclN0YXRlLnBlbmRpbmdVcGRhdGU9ITE7
dmFyIGU9dGhpcy5fY3VycmVudEVsZW1lbnQucHJvcHMsdD1zLmdldFZhbHVlKGUpO251bGwhPXQm
Jm8odGhpcyxCb29sZWFuKGUubXVsdGlwbGUpLHQpfX1mdW5jdGlvbiBvKGUsdCxuKXt2YXIgcixv
LGk9dS5nZXROb2RlRnJvbUluc3RhbmNlKGUpLm9wdGlvbnM7aWYodCl7Zm9yKHI9e30sbz0wO288
bi5sZW5ndGg7bysrKXJbIiIrbltvXV09ITA7Zm9yKG89MDtvPGkubGVuZ3RoO28rKyl7dmFyIGE9
ci5oYXNPd25Qcm9wZXJ0eShpW29dLnZhbHVlKTtpW29dLnNlbGVjdGVkIT09YSYmKGlbb10uc2Vs
ZWN0ZWQ9YSl9fWVsc2V7Zm9yKHI9IiIrbixvPTA7bzxpLmxlbmd0aDtvKyspaWYoaVtvXS52YWx1
ZT09PXIpcmV0dXJuIHZvaWQoaVtvXS5zZWxlY3RlZD0hMCk7aS5sZW5ndGgmJihpWzBdLnNlbGVj
dGVkPSEwKX19ZnVuY3Rpb24gaShlKXt2YXIgdD10aGlzLl9jdXJyZW50RWxlbWVudC5wcm9wcyxu
PXMuZXhlY3V0ZU9uQ2hhbmdlKHQsZSk7cmV0dXJuIHRoaXMuX3Jvb3ROb2RlSUQmJih0aGlzLl93
cmFwcGVyU3RhdGUucGVuZGluZ1VwZGF0ZT0hMCksbC5hc2FwKHIsdGhpcyksbn12YXIgYT1lKDE0
Mykscz1lKDIzKSx1PWUoMzMpLGw9ZSg3MSksYz0oZSgxNDIpLCExKSxwPXtnZXRIb3N0UHJvcHM6
ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYSh7fSx0LHtvbkNoYW5nZTplLl93cmFwcGVyU3RhdGUub25D
aGFuZ2UsdmFsdWU6dm9pZCAwfSl9LG1vdW50V3JhcHBlcjpmdW5jdGlvbihlLHQpe3ZhciBuPXMu
Z2V0VmFsdWUodCk7ZS5fd3JhcHBlclN0YXRlPXtwZW5kaW5nVXBkYXRlOiExLGluaXRpYWxWYWx1
ZTpudWxsIT1uP246dC5kZWZhdWx0VmFsdWUsbGlzdGVuZXJzOm51bGwsb25DaGFuZ2U6aS5iaW5k
KGUpLHdhc011bHRpcGxlOkJvb2xlYW4odC5tdWx0aXBsZSl9LHZvaWQgMD09PXQudmFsdWV8fHZv
aWQgMD09PXQuZGVmYXVsdFZhbHVlfHxjfHwoYz0hMCl9LGdldFNlbGVjdFZhbHVlQ29udGV4dDpm
dW5jdGlvbihlKXtyZXR1cm4gZS5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZX0scG9zdFVwZGF0
ZVdyYXBwZXI6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5fY3VycmVudEVsZW1lbnQucHJvcHM7ZS5fd3Jh
cHBlclN0YXRlLmluaXRpYWxWYWx1ZT12b2lkIDA7dmFyIG49ZS5fd3JhcHBlclN0YXRlLndhc011
bHRpcGxlO2UuX3dyYXBwZXJTdGF0ZS53YXNNdWx0aXBsZT1Cb29sZWFuKHQubXVsdGlwbGUpO3Zh
ciByPXMuZ2V0VmFsdWUodCk7bnVsbCE9cj8oZS5fd3JhcHBlclN0YXRlLnBlbmRpbmdVcGRhdGU9
ITEsbyhlLEJvb2xlYW4odC5tdWx0aXBsZSkscikpOm4hPT1Cb29sZWFuKHQubXVsdGlwbGUpJiYo
bnVsbCE9dC5kZWZhdWx0VmFsdWU/byhlLEJvb2xlYW4odC5tdWx0aXBsZSksdC5kZWZhdWx0VmFs
dWUpOm8oZSxCb29sZWFuKHQubXVsdGlwbGUpLHQubXVsdGlwbGU/W106IiIpKX19O3QuZXhwb3J0
cz1wfSx7MTQyOjE0MiwxNDM6MTQzLDIzOjIzLDMzOjMzLDcxOjcxfV0sNDE6W2Z1bmN0aW9uKGUs
dCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbixyKXtyZXR1cm4gZT09PW4mJnQ9PT1y
fWZ1bmN0aW9uIG8oZSl7dmFyIHQ9ZG9jdW1lbnQuc2VsZWN0aW9uLG49dC5jcmVhdGVSYW5nZSgp
LHI9bi50ZXh0Lmxlbmd0aCxvPW4uZHVwbGljYXRlKCk7by5tb3ZlVG9FbGVtZW50VGV4dChlKSxv
LnNldEVuZFBvaW50KCJFbmRUb1N0YXJ0IixuKTt2YXIgaT1vLnRleHQubGVuZ3RoO3JldHVybntz
dGFydDppLGVuZDppK3J9fWZ1bmN0aW9uIGkoZSl7dmFyIHQ9d2luZG93LmdldFNlbGVjdGlvbiYm
d2luZG93LmdldFNlbGVjdGlvbigpO2lmKCF0fHwwPT09dC5yYW5nZUNvdW50KXJldHVybiBudWxs
O3ZhciBuPXQuYW5jaG9yTm9kZSxvPXQuYW5jaG9yT2Zmc2V0LGk9dC5mb2N1c05vZGUsYT10LmZv
Y3VzT2Zmc2V0LHM9dC5nZXRSYW5nZUF0KDApO3RyeXtzLnN0YXJ0Q29udGFpbmVyLm5vZGVUeXBl
LHMuZW5kQ29udGFpbmVyLm5vZGVUeXBlfWNhdGNoKGUpe3JldHVybiBudWxsfXZhciB1PXIodC5h
bmNob3JOb2RlLHQuYW5jaG9yT2Zmc2V0LHQuZm9jdXNOb2RlLHQuZm9jdXNPZmZzZXQpLGw9dT8w
OnMudG9TdHJpbmcoKS5sZW5ndGgsYz1zLmNsb25lUmFuZ2UoKTtjLnNlbGVjdE5vZGVDb250ZW50
cyhlKSxjLnNldEVuZChzLnN0YXJ0Q29udGFpbmVyLHMuc3RhcnRPZmZzZXQpO3ZhciBwPXIoYy5z
dGFydENvbnRhaW5lcixjLnN0YXJ0T2Zmc2V0LGMuZW5kQ29udGFpbmVyLGMuZW5kT2Zmc2V0KSxk
PXA/MDpjLnRvU3RyaW5nKCkubGVuZ3RoLGY9ZCtsLGg9ZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTto
LnNldFN0YXJ0KG4sbyksaC5zZXRFbmQoaSxhKTt2YXIgbT1oLmNvbGxhcHNlZDtyZXR1cm57c3Rh
cnQ6bT9mOmQsZW5kOm0/ZDpmfX1mdW5jdGlvbiBhKGUsdCl7dmFyIG4scixvPWRvY3VtZW50LnNl
bGVjdGlvbi5jcmVhdGVSYW5nZSgpLmR1cGxpY2F0ZSgpO3ZvaWQgMD09PXQuZW5kPyhuPXQuc3Rh
cnQscj1uKTp0LnN0YXJ0PnQuZW5kPyhuPXQuZW5kLHI9dC5zdGFydCk6KG49dC5zdGFydCxyPXQu
ZW5kKSxvLm1vdmVUb0VsZW1lbnRUZXh0KGUpLG8ubW92ZVN0YXJ0KCJjaGFyYWN0ZXIiLG4pLG8u
c2V0RW5kUG9pbnQoIkVuZFRvU3RhcnQiLG8pLG8ubW92ZUVuZCgiY2hhcmFjdGVyIixyLW4pLG8u
c2VsZWN0KCl9ZnVuY3Rpb24gcyhlLHQpe2lmKHdpbmRvdy5nZXRTZWxlY3Rpb24pe3ZhciBuPXdp
bmRvdy5nZXRTZWxlY3Rpb24oKSxyPWVbYygpXS5sZW5ndGgsbz1NYXRoLm1pbih0LnN0YXJ0LHIp
LGk9dm9pZCAwPT09dC5lbmQ/bzpNYXRoLm1pbih0LmVuZCxyKTtpZighbi5leHRlbmQmJm8+aSl7
dmFyIGE9aTtpPW8sbz1hfXZhciBzPWwoZSxvKSx1PWwoZSxpKTtpZihzJiZ1KXt2YXIgcD1kb2N1
bWVudC5jcmVhdGVSYW5nZSgpO3Auc2V0U3RhcnQocy5ub2RlLHMub2Zmc2V0KSxuLnJlbW92ZUFs
bFJhbmdlcygpLG8+aT8obi5hZGRSYW5nZShwKSxuLmV4dGVuZCh1Lm5vZGUsdS5vZmZzZXQpKToo
cC5zZXRFbmQodS5ub2RlLHUub2Zmc2V0KSxuLmFkZFJhbmdlKHApKX19fXZhciB1PWUoMTIzKSxs
PWUoMTA1KSxjPWUoMTA2KSxwPXUuY2FuVXNlRE9NJiYic2VsZWN0aW9uImluIGRvY3VtZW50JiYh
KCJnZXRTZWxlY3Rpb24iaW4gd2luZG93KSxkPXtnZXRPZmZzZXRzOnA/bzppLHNldE9mZnNldHM6
cD9hOnN9O3QuZXhwb3J0cz1kfSx7MTA1OjEwNSwxMDY6MTA2LDEyMzoxMjN9XSw0MjpbZnVuY3Rp
b24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKDExMiksbz1lKDE0MyksaT1lKDgpLGE9ZSg5
KSxzPWUoMzMpLHU9ZSg5NSksbD0oZSgxMzcpLGUoMTE4KSxmdW5jdGlvbihlKXt0aGlzLl9jdXJy
ZW50RWxlbWVudD1lLHRoaXMuX3N0cmluZ1RleHQ9IiIrZSwKK3RoaXMuX2hvc3ROb2RlPW51bGws
dGhpcy5faG9zdFBhcmVudD1udWxsLHRoaXMuX2RvbUlEPTAsdGhpcy5fbW91bnRJbmRleD0wLHRo
aXMuX2Nsb3NpbmdDb21tZW50PW51bGwsdGhpcy5fY29tbWVudE5vZGVzPW51bGx9KTtvKGwucHJv
dG90eXBlLHttb3VudENvbXBvbmVudDpmdW5jdGlvbihlLHQsbixyKXt2YXIgbz1uLl9pZENvdW50
ZXIrKyxpPSIgcmVhY3QtdGV4dDogIitvKyIgIjtpZih0aGlzLl9kb21JRD1vLHRoaXMuX2hvc3RQ
YXJlbnQ9dCxlLnVzZUNyZWF0ZUVsZW1lbnQpe3ZhciBsPW4uX293bmVyRG9jdW1lbnQsYz1sLmNy
ZWF0ZUNvbW1lbnQoaSkscD1sLmNyZWF0ZUNvbW1lbnQoIiAvcmVhY3QtdGV4dCAiKSxkPWEobC5j
cmVhdGVEb2N1bWVudEZyYWdtZW50KCkpO3JldHVybiBhLnF1ZXVlQ2hpbGQoZCxhKGMpKSx0aGlz
Ll9zdHJpbmdUZXh0JiZhLnF1ZXVlQ2hpbGQoZCxhKGwuY3JlYXRlVGV4dE5vZGUodGhpcy5fc3Ry
aW5nVGV4dCkpKSxhLnF1ZXVlQ2hpbGQoZCxhKHApKSxzLnByZWNhY2hlTm9kZSh0aGlzLGMpLHRo
aXMuX2Nsb3NpbmdDb21tZW50PXAsZH12YXIgZj11KHRoaXMuX3N0cmluZ1RleHQpO3JldHVybiBl
LnJlbmRlclRvU3RhdGljTWFya3VwP2Y6IjwhLS0iK2krIi0tPiIrZisiPCEtLSAvcmVhY3QtdGV4
dCAtLT4ifSxyZWNlaXZlQ29tcG9uZW50OmZ1bmN0aW9uKGUsdCl7aWYoZSE9PXRoaXMuX2N1cnJl
bnRFbGVtZW50KXt0aGlzLl9jdXJyZW50RWxlbWVudD1lO3ZhciBuPSIiK2U7aWYobiE9PXRoaXMu
X3N0cmluZ1RleHQpe3RoaXMuX3N0cmluZ1RleHQ9bjt2YXIgcj10aGlzLmdldEhvc3ROb2RlKCk7
aS5yZXBsYWNlRGVsaW1pdGVkVGV4dChyWzBdLHJbMV0sbil9fX0sZ2V0SG9zdE5vZGU6ZnVuY3Rp
b24oKXt2YXIgZT10aGlzLl9jb21tZW50Tm9kZXM7aWYoZSlyZXR1cm4gZTtpZighdGhpcy5fY2xv
c2luZ0NvbW1lbnQpZm9yKHZhciB0PXMuZ2V0Tm9kZUZyb21JbnN0YW5jZSh0aGlzKSxuPXQubmV4
dFNpYmxpbmc7Oyl7aWYobnVsbD09biYmcigiNjciLHRoaXMuX2RvbUlEKSw4PT09bi5ub2RlVHlw
ZSYmIiAvcmVhY3QtdGV4dCAiPT09bi5ub2RlVmFsdWUpe3RoaXMuX2Nsb3NpbmdDb21tZW50PW47
YnJlYWt9bj1uLm5leHRTaWJsaW5nfXJldHVybiBlPVt0aGlzLl9ob3N0Tm9kZSx0aGlzLl9jbG9z
aW5nQ29tbWVudF0sdGhpcy5fY29tbWVudE5vZGVzPWUsZX0sdW5tb3VudENvbXBvbmVudDpmdW5j
dGlvbigpe3RoaXMuX2Nsb3NpbmdDb21tZW50PW51bGwsdGhpcy5fY29tbWVudE5vZGVzPW51bGws
cy51bmNhY2hlTm9kZSh0aGlzKX19KSx0LmV4cG9ydHM9bH0sezExMjoxMTIsMTE4OjExOCwxMzc6
MTM3LDE0MzoxNDMsMzM6MzMsODo4LDk6OSw5NTo5NX1dLDQzOltmdW5jdGlvbihlLHQsbil7InVz
ZSBzdHJpY3QiO2Z1bmN0aW9uIHIoKXt0aGlzLl9yb290Tm9kZUlEJiZjLnVwZGF0ZVdyYXBwZXIo
dGhpcyl9ZnVuY3Rpb24gbyhlKXt2YXIgdD10aGlzLl9jdXJyZW50RWxlbWVudC5wcm9wcyxuPXMu
ZXhlY3V0ZU9uQ2hhbmdlKHQsZSk7cmV0dXJuIGwuYXNhcChyLHRoaXMpLG59dmFyIGk9ZSgxMTIp
LGE9ZSgxNDMpLHM9ZSgyMyksdT1lKDMzKSxsPWUoNzEpLGM9KGUoMTM3KSxlKDE0Mikse2dldEhv
c3RQcm9wczpmdW5jdGlvbihlLHQpe3JldHVybiBudWxsIT10LmRhbmdlcm91c2x5U2V0SW5uZXJI
VE1MJiZpKCI5MSIpLGEoe30sdCx7dmFsdWU6dm9pZCAwLGRlZmF1bHRWYWx1ZTp2b2lkIDAsY2hp
bGRyZW46IiIrZS5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZSxvbkNoYW5nZTplLl93cmFwcGVy
U3RhdGUub25DaGFuZ2V9KX0sbW91bnRXcmFwcGVyOmZ1bmN0aW9uKGUsdCl7dmFyIG49cy5nZXRW
YWx1ZSh0KSxyPW47aWYobnVsbD09bil7dmFyIGE9dC5kZWZhdWx0VmFsdWUsdT10LmNoaWxkcmVu
O251bGwhPXUmJihudWxsIT1hJiZpKCI5MiIpLEFycmF5LmlzQXJyYXkodSkmJih1Lmxlbmd0aDw9
MXx8aSgiOTMiKSx1PXVbMF0pLGE9IiIrdSksbnVsbD09YSYmKGE9IiIpLHI9YX1lLl93cmFwcGVy
U3RhdGU9e2luaXRpYWxWYWx1ZToiIityLGxpc3RlbmVyczpudWxsLG9uQ2hhbmdlOm8uYmluZChl
KX19LHVwZGF0ZVdyYXBwZXI6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5fY3VycmVudEVsZW1lbnQucHJv
cHMsbj11LmdldE5vZGVGcm9tSW5zdGFuY2UoZSkscj1zLmdldFZhbHVlKHQpO2lmKG51bGwhPXIp
e3ZhciBvPSIiK3I7byE9PW4udmFsdWUmJihuLnZhbHVlPW8pLG51bGw9PXQuZGVmYXVsdFZhbHVl
JiYobi5kZWZhdWx0VmFsdWU9byl9bnVsbCE9dC5kZWZhdWx0VmFsdWUmJihuLmRlZmF1bHRWYWx1
ZT10LmRlZmF1bHRWYWx1ZSl9LHBvc3RNb3VudFdyYXBwZXI6ZnVuY3Rpb24oZSl7dmFyIHQ9dS5n
ZXROb2RlRnJvbUluc3RhbmNlKGUpLG49dC50ZXh0Q29udGVudDtuPT09ZS5fd3JhcHBlclN0YXRl
LmluaXRpYWxWYWx1ZSYmKHQudmFsdWU9bil9fSk7dC5leHBvcnRzPWN9LHsxMTI6MTEyLDEzNzox
MzcsMTQyOjE0MiwxNDM6MTQzLDIzOjIzLDMzOjMzLDcxOjcxfV0sNDQ6W2Z1bmN0aW9uKGUsdCxu
KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpeyJfaG9zdE5vZGUiaW4gZXx8dSgiMzMiKSwi
X2hvc3ROb2RlImluIHR8fHUoIjMzIik7Zm9yKHZhciBuPTAscj1lO3I7cj1yLl9ob3N0UGFyZW50
KW4rKztmb3IodmFyIG89MCxpPXQ7aTtpPWkuX2hvc3RQYXJlbnQpbysrO2Zvcig7bi1vPjA7KWU9
ZS5faG9zdFBhcmVudCxuLS07Zm9yKDtvLW4+MDspdD10Ll9ob3N0UGFyZW50LG8tLTtmb3IodmFy
IGE9bjthLS07KXtpZihlPT09dClyZXR1cm4gZTtlPWUuX2hvc3RQYXJlbnQsdD10Ll9ob3N0UGFy
ZW50fXJldHVybiBudWxsfWZ1bmN0aW9uIG8oZSx0KXsiX2hvc3ROb2RlImluIGV8fHUoIjM1Iiks
Il9ob3N0Tm9kZSJpbiB0fHx1KCIzNSIpO2Zvcig7dDspe2lmKHQ9PT1lKXJldHVybiEwO3Q9dC5f
aG9zdFBhcmVudH1yZXR1cm4hMX1mdW5jdGlvbiBpKGUpe3JldHVybiJfaG9zdE5vZGUiaW4gZXx8
dSgiMzYiKSxlLl9ob3N0UGFyZW50fWZ1bmN0aW9uIGEoZSx0LG4pe2Zvcih2YXIgcj1bXTtlOyly
LnB1c2goZSksZT1lLl9ob3N0UGFyZW50O3ZhciBvO2ZvcihvPXIubGVuZ3RoO28tLSA+MDspdChy
W29dLCJjYXB0dXJlZCIsbik7Zm9yKG89MDtvPHIubGVuZ3RoO28rKyl0KHJbb10sImJ1YmJsZWQi
LG4pfWZ1bmN0aW9uIHMoZSx0LG4sbyxpKXtmb3IodmFyIGE9ZSYmdD9yKGUsdCk6bnVsbCxzPVtd
O2UmJmUhPT1hOylzLnB1c2goZSksZT1lLl9ob3N0UGFyZW50O2Zvcih2YXIgdT1bXTt0JiZ0IT09
YTspdS5wdXNoKHQpLHQ9dC5faG9zdFBhcmVudDt2YXIgbDtmb3IobD0wO2w8cy5sZW5ndGg7bCsr
KW4oc1tsXSwiYnViYmxlZCIsbyk7Zm9yKGw9dS5sZW5ndGg7bC0tID4wOyluKHVbbF0sImNhcHR1
cmVkIixpKX12YXIgdT1lKDExMik7ZSgxMzcpO3QuZXhwb3J0cz17aXNBbmNlc3RvcjpvLGdldExv
d2VzdENvbW1vbkFuY2VzdG9yOnIsZ2V0UGFyZW50SW5zdGFuY2U6aSx0cmF2ZXJzZVR3b1BoYXNl
OmEsdHJhdmVyc2VFbnRlckxlYXZlOnN9fSx7MTEyOjExMiwxMzc6MTM3fV0sNDU6W2Z1bmN0aW9u
KGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZSgxMjApLG89ZSgzMCksaT1vO3IuYWRkb25zJiYo
ci5fX1NFQ1JFVF9JTkpFQ1RFRF9SRUFDVF9ET01fRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9G
SVJFRD1pKSx0LmV4cG9ydHM9aX0sezEyMDoxMjAsMzA6MzB9XSw0NjpbZnVuY3Rpb24oZSx0LG4p
eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKCl7dGhpcy5yZWluaXRpYWxpemVUcmFuc2FjdGlvbigp
fXZhciBvPWUoMTQzKSxpPWUoNzEpLGE9ZSg4OSkscz1lKDEyOSksdT17aW5pdGlhbGl6ZTpzLGNs
b3NlOmZ1bmN0aW9uKCl7ZC5pc0JhdGNoaW5nVXBkYXRlcz0hMX19LGw9e2luaXRpYWxpemU6cyxj
bG9zZTppLmZsdXNoQmF0Y2hlZFVwZGF0ZXMuYmluZChpKX0sYz1bbCx1XTtvKHIucHJvdG90eXBl
LGEse2dldFRyYW5zYWN0aW9uV3JhcHBlcnM6ZnVuY3Rpb24oKXtyZXR1cm4gY319KTt2YXIgcD1u
ZXcgcixkPXtpc0JhdGNoaW5nVXBkYXRlczohMSxiYXRjaGVkVXBkYXRlczpmdW5jdGlvbihlLHQs
bixyLG8saSl7dmFyIGE9ZC5pc0JhdGNoaW5nVXBkYXRlcztyZXR1cm4gZC5pc0JhdGNoaW5nVXBk
YXRlcz0hMCxhP2UodCxuLHIsbyxpKTpwLnBlcmZvcm0oZSxudWxsLHQsbixyLG8saSl9fTt0LmV4
cG9ydHM9ZH0sezEyOToxMjksMTQzOjE0Myw3MTo3MSw4OTo4OX1dLDQ3OltmdW5jdGlvbihlLHQs
bil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoKXt4fHwoeD0hMCx5LkV2ZW50RW1pdHRlci5pbmpl
Y3RSZWFjdEV2ZW50TGlzdGVuZXIoZykseS5FdmVudFBsdWdpbkh1Yi5pbmplY3RFdmVudFBsdWdp
bk9yZGVyKHMpLHkuRXZlbnRQbHVnaW5VdGlscy5pbmplY3RDb21wb25lbnRUcmVlKGQpLHkuRXZl
bnRQbHVnaW5VdGlscy5pbmplY3RUcmVlVHJhdmVyc2FsKGgpLHkuRXZlbnRQbHVnaW5IdWIuaW5q
ZWN0RXZlbnRQbHVnaW5zQnlOYW1lKHtTaW1wbGVFdmVudFBsdWdpbjpFLEVudGVyTGVhdmVFdmVu
dFBsdWdpbjp1LENoYW5nZUV2ZW50UGx1Z2luOmEsU2VsZWN0RXZlbnRQbHVnaW46YixCZWZvcmVJ
bnB1dEV2ZW50UGx1Z2luOml9KSx5Lkhvc3RDb21wb25lbnQuaW5qZWN0R2VuZXJpY0NvbXBvbmVu
dENsYXNzKHApLHkuSG9zdENvbXBvbmVudC5pbmplY3RUZXh0Q29tcG9uZW50Q2xhc3MobSkseS5E
T01Qcm9wZXJ0eS5pbmplY3RET01Qcm9wZXJ0eUNvbmZpZyhvKSx5LkRPTVByb3BlcnR5LmluamVj
dERPTVByb3BlcnR5Q29uZmlnKGwpLHkuRE9NUHJvcGVydHkuaW5qZWN0RE9NUHJvcGVydHlDb25m
aWcoQykseS5FbXB0eUNvbXBvbmVudC5pbmplY3RFbXB0eUNvbXBvbmVudEZhY3RvcnkoZnVuY3Rp
b24oZSl7cmV0dXJuIG5ldyBmKGUpfSkseS5VcGRhdGVzLmluamVjdFJlY29uY2lsZVRyYW5zYWN0
aW9uKF8pLHkuVXBkYXRlcy5pbmplY3RCYXRjaGluZ1N0cmF0ZWd5KHYpLHkuQ29tcG9uZW50Lmlu
amVjdEVudmlyb25tZW50KGMpKX12YXIgbz1lKDEpLGk9ZSgzKSxhPWUoNykscz1lKDE0KSx1PWUo
MTUpLGw9ZSgyMSksYz1lKDI3KSxwPWUoMzEpLGQ9ZSgzMyksZj1lKDM1KSxoPWUoNDQpLG09ZSg0
Miksdj1lKDQ2KSxnPWUoNTIpLHk9ZSg1NSksXz1lKDY1KSxDPWUoNzMpLGI9ZSg3NCksRT1lKDc1
KSx4PSExO3QuZXhwb3J0cz17aW5qZWN0OnJ9fSx7MToxLDE0OjE0LDE1OjE1LDIxOjIxLDI3OjI3
LDM6MywzMTozMSwzMzozMywzNTozNSw0Mjo0Miw0NDo0NCw0Njo0Niw1Mjo1Miw1NTo1NSw2NTo2
NSw3OjcsNzM6NzMsNzQ6NzQsNzU6NzV9XSw0ODpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0
Ijt2YXIgcj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuZm9yJiZTeW1ib2wuZm9y
KCJyZWFjdC5lbGVtZW50Iil8fDYwMTAzO3QuZXhwb3J0cz1yfSx7fV0sNDk6W2Z1bmN0aW9uKGUs
dCxuKXsidXNlIHN0cmljdCI7dmFyIHIsbz17aW5qZWN0RW1wdHlDb21wb25lbnRGYWN0b3J5OmZ1
bmN0aW9uKGUpe3I9ZX19LGk9e2NyZWF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gcihlKX19O2kuaW5q
ZWN0aW9uPW8sdC5leHBvcnRzPWl9LHt9XSw1MDpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0
IjtmdW5jdGlvbiByKGUsdCxuKXt0cnl7dChuKX1jYXRjaChlKXtudWxsPT09byYmKG89ZSl9fXZh
ciBvPW51bGwsaT17aW52b2tlR3VhcmRlZENhbGxiYWNrOnIsaW52b2tlR3VhcmRlZENhbGxiYWNr
V2l0aENhdGNoOnIscmV0aHJvd0NhdWdodEVycm9yOmZ1bmN0aW9uKCl7aWYobyl7dmFyIGU9bzt0
aHJvdyBvPW51bGwsZX19fTt0LmV4cG9ydHM9aX0se31dLDUxOltmdW5jdGlvbihlLHQsbil7InVz
ZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7by5lbnF1ZXVlRXZlbnRzKGUpLG8ucHJvY2Vzc0V2ZW50
UXVldWUoITEpfXZhciBvPWUoMTYpLGk9e2hhbmRsZVRvcExldmVsOmZ1bmN0aW9uKGUsdCxuLGkp
e3Ioby5leHRyYWN0RXZlbnRzKGUsdCxuLGkpKX19O3QuZXhwb3J0cz1pfSx7MTY6MTZ9XSw1Mjpb
ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe2Zvcig7ZS5faG9zdFBh
cmVudDspZT1lLl9ob3N0UGFyZW50O3ZhciB0PXAuZ2V0Tm9kZUZyb21JbnN0YW5jZShlKSxuPXQu
cGFyZW50Tm9kZTtyZXR1cm4gcC5nZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZShuKX1mdW5jdGlv
biBvKGUsdCl7dGhpcy50b3BMZXZlbFR5cGU9ZSx0aGlzLm5hdGl2ZUV2ZW50PXQsdGhpcy5hbmNl
c3RvcnM9W119ZnVuY3Rpb24gaShlKXt2YXIgdD1mKGUubmF0aXZlRXZlbnQpLG49cC5nZXRDbG9z
ZXN0SW5zdGFuY2VGcm9tTm9kZSh0KSxvPW47ZG97ZS5hbmNlc3RvcnMucHVzaChvKSxvPW8mJnIo
byl9d2hpbGUobyk7Zm9yKHZhciBpPTA7aTxlLmFuY2VzdG9ycy5sZW5ndGg7aSsrKW49ZS5hbmNl
c3RvcnNbaV0sbS5faGFuZGxlVG9wTGV2ZWwoZS50b3BMZXZlbFR5cGUsbixlLm5hdGl2ZUV2ZW50
LGYoZS5uYXRpdmVFdmVudCkpfWZ1bmN0aW9uIGEoZSl7ZShoKHdpbmRvdykpfXZhciBzPWUoMTQz
KSx1PWUoMTIyKSxsPWUoMTIzKSxjPWUoMjQpLHA9ZSgzMyksZD1lKDcxKSxmPWUoMTAyKSxoPWUo
MTM0KTtzKG8ucHJvdG90eXBlLHtkZXN0cnVjdG9yOmZ1bmN0aW9uKCl7dGhpcy50b3BMZXZlbFR5
cGU9bnVsbCx0aGlzLm5hdGl2ZUV2ZW50PW51bGwsdGhpcy5hbmNlc3RvcnMubGVuZ3RoPTB9fSks
Yy5hZGRQb29saW5nVG8obyxjLnR3b0FyZ3VtZW50UG9vbGVyKTt2YXIgbT17X2VuYWJsZWQ6ITAs
X2hhbmRsZVRvcExldmVsOm51bGwsV0lORE9XX0hBTkRMRTpsLmNhblVzZURPTT93aW5kb3c6bnVs
bCxzZXRIYW5kbGVUb3BMZXZlbDpmdW5jdGlvbihlKXttLl9oYW5kbGVUb3BMZXZlbD1lfSxzZXRF
bmFibGVkOmZ1bmN0aW9uKGUpe20uX2VuYWJsZWQ9ISFlfSxpc0VuYWJsZWQ6ZnVuY3Rpb24oKXty
ZXR1cm4gbS5fZW5hYmxlZH0sdHJhcEJ1YmJsZWRFdmVudDpmdW5jdGlvbihlLHQsbil7cmV0dXJu
IG4/dS5saXN0ZW4obix0LG0uZGlzcGF0Y2hFdmVudC5iaW5kKG51bGwsZSkpOm51bGx9LHRyYXBD
YXB0dXJlZEV2ZW50OmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbj91LmNhcHR1cmUobix0LG0uZGlz
cGF0Y2hFdmVudC5iaW5kKG51bGwsZSkpOm51bGx9LG1vbml0b3JTY3JvbGxWYWx1ZTpmdW5jdGlv
bihlKXt2YXIgdD1hLmJpbmQobnVsbCxlKTt1Lmxpc3Rlbih3aW5kb3csInNjcm9sbCIsdCl9LGRp
c3BhdGNoRXZlbnQ6ZnVuY3Rpb24oZSx0KXtpZihtLl9lbmFibGVkKXt2YXIgbj1vLmdldFBvb2xl
ZChlLHQpO3RyeXtkLmJhdGNoZWRVcGRhdGVzKGksbil9ZmluYWxseXtvLnJlbGVhc2Uobil9fX19
O3QuZXhwb3J0cz1tfSx7MTAyOjEwMiwxMjI6MTIyLDEyMzoxMjMsMTM0OjEzNCwxNDM6MTQzLDI0
OjI0LDMzOjMzLDcxOjcxfV0sNTM6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9
e2xvZ1RvcExldmVsUmVuZGVyczohMX07dC5leHBvcnRzPXJ9LHt9XSw1NDpbZnVuY3Rpb24oZSx0
LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBzfHxhKCIxMTEiLGUudHlwZSks
bmV3IHMoZSl9ZnVuY3Rpb24gbyhlKXtyZXR1cm4gbmV3IHUoZSl9ZnVuY3Rpb24gaShlKXtyZXR1
cm4gZSBpbnN0YW5jZW9mIHV9dmFyIGE9ZSgxMTIpLHM9KGUoMTM3KSxudWxsKSx1PW51bGwsbD17
aW5qZWN0R2VuZXJpY0NvbXBvbmVudENsYXNzOmZ1bmN0aW9uKGUpe3M9ZX0saW5qZWN0VGV4dENv
bXBvbmVudENsYXNzOmZ1bmN0aW9uKGUpe3U9ZX19LGM9e2NyZWF0ZUludGVybmFsQ29tcG9uZW50
OnIsY3JlYXRlSW5zdGFuY2VGb3JUZXh0Om8saXNUZXh0Q29tcG9uZW50OmksaW5qZWN0aW9uOmx9
O3QuZXhwb3J0cz1jfSx7MTEyOjExMiwxMzc6MTM3fV0sNTU6W2Z1bmN0aW9uKGUsdCxuKXsidXNl
IHN0cmljdCI7dmFyIHI9ZSgxMSksbz1lKDE2KSxpPWUoMTgpLGE9ZSgyOCkscz1lKDQ5KSx1PWUo
MjUpLGw9ZSg1NCksYz1lKDcxKSxwPXtDb21wb25lbnQ6YS5pbmplY3Rpb24sRE9NUHJvcGVydHk6
ci5pbmplY3Rpb24sRW1wdHlDb21wb25lbnQ6cy5pbmplY3Rpb24sRXZlbnRQbHVnaW5IdWI6by5p
bmplY3Rpb24sRXZlbnRQbHVnaW5VdGlsczppLmluamVjdGlvbixFdmVudEVtaXR0ZXI6dS5pbmpl
Y3Rpb24sSG9zdENvbXBvbmVudDpsLmluamVjdGlvbixVcGRhdGVzOmMuaW5qZWN0aW9ufTt0LmV4
cG9ydHM9cH0sezExOjExLDE2OjE2LDE4OjE4LDI1OjI1LDI4OjI4LDQ5OjQ5LDU0OjU0LDcxOjcx
fV0sNTY6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4g
aShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsZSl9dmFyIG89ZSg0MSksaT1lKDEyNiksYT1lKDEz
MSkscz1lKDEzMiksdT17aGFzU2VsZWN0aW9uQ2FwYWJpbGl0aWVzOmZ1bmN0aW9uKGUpe3ZhciB0
PWUmJmUubm9kZU5hbWUmJmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4gdCYmKCJpbnB1
dCI9PT10JiYidGV4dCI9PT1lLnR5cGV8fCJ0ZXh0YXJlYSI9PT10fHwidHJ1ZSI9PT1lLmNvbnRl
bnRFZGl0YWJsZSl9LGdldFNlbGVjdGlvbkluZm9ybWF0aW9uOmZ1bmN0aW9uKCl7dmFyIGU9cygp
O3JldHVybntmb2N1c2VkRWxlbTplLHNlbGVjdGlvblJhbmdlOnUuaGFzU2VsZWN0aW9uQ2FwYWJp
bGl0aWVzKGUpP3UuZ2V0U2VsZWN0aW9uKGUpOm51bGx9fSxyZXN0b3JlU2VsZWN0aW9uOmZ1bmN0
aW9uKGUpe3ZhciB0PXMoKSxuPWUuZm9jdXNlZEVsZW0sbz1lLnNlbGVjdGlvblJhbmdlO3QhPT1u
JiZyKG4pJiYodS5oYXNTZWxlY3Rpb25DYXBhYmlsaXRpZXMobikmJnUuc2V0U2VsZWN0aW9uKG4s
byksYShuKSl9LGdldFNlbGVjdGlvbjpmdW5jdGlvbihlKXt2YXIgdDtpZigic2VsZWN0aW9uU3Rh
cnQiaW4gZSl0PXtzdGFydDplLnNlbGVjdGlvblN0YXJ0LGVuZDplLnNlbGVjdGlvbkVuZH07ZWxz
ZSBpZihkb2N1bWVudC5zZWxlY3Rpb24mJmUubm9kZU5hbWUmJiJpbnB1dCI9PT1lLm5vZGVOYW1l
LnRvTG93ZXJDYXNlKCkpe3ZhciBuPWRvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5nZSgpO24u
cGFyZW50RWxlbWVudCgpPT09ZSYmKHQ9e3N0YXJ0Oi1uLm1vdmVTdGFydCgiY2hhcmFjdGVyIiwt
ZS52YWx1ZS5sZW5ndGgpLGVuZDotbi5tb3ZlRW5kKCJjaGFyYWN0ZXIiLC1lLnZhbHVlLmxlbmd0
aCl9KX1lbHNlIHQ9by5nZXRPZmZzZXRzKGUpO3JldHVybiB0fHx7c3RhcnQ6MCxlbmQ6MH19LHNl
dFNlbGVjdGlvbjpmdW5jdGlvbihlLHQpe3ZhciBuPXQuc3RhcnQscj10LmVuZDtpZih2b2lkIDA9
PT1yJiYocj1uKSwic2VsZWN0aW9uU3RhcnQiaW4gZSllLnNlbGVjdGlvblN0YXJ0PW4sZS5zZWxl
Y3Rpb25FbmQ9TWF0aC5taW4ocixlLnZhbHVlLmxlbmd0aCk7ZWxzZSBpZihkb2N1bWVudC5zZWxl
Y3Rpb24mJmUubm9kZU5hbWUmJiJpbnB1dCI9PT1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpe3Zh
ciBpPWUuY3JlYXRlVGV4dFJhbmdlKCk7aS5jb2xsYXBzZSghMCksaS5tb3ZlU3RhcnQoImNoYXJh
Y3RlciIsbiksaS5tb3ZlRW5kKCJjaGFyYWN0ZXIiLHItbiksaS5zZWxlY3QoKX1lbHNlIG8uc2V0
T2Zmc2V0cyhlLHQpfX07dC5leHBvcnRzPXV9LHsxMjY6MTI2LDEzMToxMzEsMTMyOjEzMiw0MTo0
MX1dLDU3OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPXtyZW1vdmU6ZnVuY3Rp
b24oZSl7ZS5fcmVhY3RJbnRlcm5hbEluc3RhbmNlPXZvaWQgMH0sZ2V0OmZ1bmN0aW9uKGUpe3Jl
dHVybiBlLl9yZWFjdEludGVybmFsSW5zdGFuY2V9LGhhczpmdW5jdGlvbihlKXtyZXR1cm4gdm9p
ZCAwIT09ZS5fcmVhY3RJbnRlcm5hbEluc3RhbmNlfSxzZXQ6ZnVuY3Rpb24oZSx0KXtlLl9yZWFj
dEludGVybmFsSW5zdGFuY2U9dH19O3QuZXhwb3J0cz1yfSx7fV0sNTg6W2Z1bmN0aW9uKGUsdCxu
KXsidXNlIHN0cmljdCI7dC5leHBvcnRzPXtkZWJ1Z1Rvb2w6bnVsbH19LHt9XSw1OTpbZnVuY3Rp
b24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKDkyKSxvPS9ePFwhXC1cLS8saT17Q0hFQ0tT
VU1fQVRUUl9OQU1FOiJkYXRhLXJlYWN0LWNoZWNrc3VtIixhZGRDaGVja3N1bVRvTWFya3VwOmZ1
bmN0aW9uKGUpe3ZhciB0PXIoZSk7cmV0dXJuIG8udGVzdChlKT9lOmUucmVwbGFjZSgvXC8/Pi8s
IiAiK2kuQ0hFQ0tTVU1fQVRUUl9OQU1FKyc9IicrdCsnIiQmJyl9LGNhblJldXNlTWFya3VwOmZ1
bmN0aW9uKGUsdCl7dmFyIG49dC5nZXRBdHRyaWJ1dGUoaS5DSEVDS1NVTV9BVFRSX05BTUUpO3Jl
dHVybiBuPW4mJnBhcnNlSW50KG4sMTApLHIoZSk9PT1ufX07dC5leHBvcnRzPWl9LHs5Mjo5Mn1d
LDYwOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtmb3IodmFy
IG49TWF0aC5taW4oZS5sZW5ndGgsdC5sZW5ndGgpLHI9MDtyPG47cisrKWlmKGUuY2hhckF0KHIp
IT09dC5jaGFyQXQocikpcmV0dXJuIHI7cmV0dXJuIGUubGVuZ3RoPT09dC5sZW5ndGg/LTE6bn1m
dW5jdGlvbiBvKGUpe3JldHVybiBlP2Uubm9kZVR5cGU9PT1BP2UuZG9jdW1lbnRFbGVtZW50OmUu
Zmlyc3RDaGlsZDpudWxsfWZ1bmN0aW9uIGkoZSl7cmV0dXJuIGUuZ2V0QXR0cmlidXRlJiZlLmdl
dEF0dHJpYnV0ZShJKXx8IiJ9ZnVuY3Rpb24gYShlLHQsbixyLG8pe3ZhciBpO2lmKGIubG9nVG9w
TGV2ZWxSZW5kZXJzKXt2YXIgYT1lLl9jdXJyZW50RWxlbWVudC5wcm9wcy5jaGlsZCxzPWEudHlw
ZTtpPSJSZWFjdCBtb3VudDogIisoInN0cmluZyI9PXR5cGVvZiBzP3M6cy5kaXNwbGF5TmFtZXx8
cy5uYW1lKSxjb25zb2xlLnRpbWUoaSl9dmFyIHU9dy5tb3VudENvbXBvbmVudChlLG4sbnVsbCxf
KGUsdCksbywwKTtpJiZjb25zb2xlLnRpbWVFbmQoaSksZS5fcmVuZGVyZWRDb21wb25lbnQuX3Rv
cExldmVsV3JhcHBlcj1lLGouX21vdW50SW1hZ2VJbnRvTm9kZSh1LHQsZSxyLG4pfWZ1bmN0aW9u
IHMoZSx0LG4scil7dmFyIG89ay5SZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9uLmdldFBvb2xlZCgh
biYmQy51c2VDcmVhdGVFbGVtZW50KTtvLnBlcmZvcm0oYSxudWxsLGUsdCxvLG4sciksay5SZWFj
dFJlY29uY2lsZVRyYW5zYWN0aW9uLnJlbGVhc2Uobyl9ZnVuY3Rpb24gdShlLHQsbil7Zm9yKHcu
dW5tb3VudENvbXBvbmVudChlLG4pLHQubm9kZVR5cGU9PT1BJiYodD10LmRvY3VtZW50RWxlbWVu
dCk7dC5sYXN0Q2hpbGQ7KXQucmVtb3ZlQ2hpbGQodC5sYXN0Q2hpbGQpfWZ1bmN0aW9uIGwoZSl7
dmFyIHQ9byhlKTtpZih0KXt2YXIgbj15LmdldEluc3RhbmNlRnJvbU5vZGUodCk7cmV0dXJuISgh
bnx8IW4uX2hvc3RQYXJlbnQpfX1mdW5jdGlvbiBjKGUpe3JldHVybiEoIWV8fGUubm9kZVR5cGUh
PT1SJiZlLm5vZGVUeXBlIT09QSYmZS5ub2RlVHlwZSE9PUQpfWZ1bmN0aW9uIHAoZSl7dmFyIHQ9
byhlKSxuPXQmJnkuZ2V0SW5zdGFuY2VGcm9tTm9kZSh0KTtyZXR1cm4gbiYmIW4uX2hvc3RQYXJl
bnQ/bjpudWxsfWZ1bmN0aW9uIGQoZSl7dmFyIHQ9cChlKTtyZXR1cm4gdD90Ll9ob3N0Q29udGFp
bmVySW5mby5fdG9wTGV2ZWxXcmFwcGVyOm51bGx9dmFyIGY9ZSgxMTIpLGg9ZSg5KSxtPWUoMTEp
LHY9ZSgxMjApLGc9ZSgyNSkseT0oZSgxMTkpLGUoMzMpKSxfPWUoMzQpLEM9ZSgzNiksYj1lKDUz
KSxFPWUoNTcpLHg9KGUoNTgpLGUoNTkpKSx3PWUoNjYpLFQ9ZSg3MCksaz1lKDcxKSxQPWUoMTMw
KSxTPWUoMTA4KSxOPShlKDEzNyksZSgxMTQpKSxNPWUoMTE2KSxJPShlKDE0MiksbS5JRF9BVFRS
SUJVVEVfTkFNRSksTz1tLlJPT1RfQVRUUklCVVRFX05BTUUsUj0xLEE9OSxEPTExLEw9e30sVT0x
LEY9ZnVuY3Rpb24oKXt0aGlzLnJvb3RJRD1VKyt9O0YucHJvdG90eXBlLmlzUmVhY3RDb21wb25l
bnQ9e30sRi5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJvcHMuY2hp
bGR9LEYuaXNSZWFjdFRvcExldmVsV3JhcHBlcj0hMDt2YXIgaj17VG9wTGV2ZWxXcmFwcGVyOkYs
X2luc3RhbmNlc0J5UmVhY3RSb290SUQ6TCxzY3JvbGxNb25pdG9yOmZ1bmN0aW9uKGUsdCl7dCgp
fSxfdXBkYXRlUm9vdENvbXBvbmVudDpmdW5jdGlvbihlLHQsbixyLG8pe3JldHVybiBqLnNjcm9s
bE1vbml0b3IocixmdW5jdGlvbigpe1QuZW5xdWV1ZUVsZW1lbnRJbnRlcm5hbChlLHQsbiksbyYm
VC5lbnF1ZXVlQ2FsbGJhY2tJbnRlcm5hbChlLG8pfSksZX0sX3JlbmRlck5ld1Jvb3RDb21wb25l
bnQ6ZnVuY3Rpb24oZSx0LG4scil7Yyh0KXx8ZigiMzciKSxnLmVuc3VyZVNjcm9sbFZhbHVlTW9u
aXRvcmluZygpO3ZhciBvPVMoZSwhMSk7ay5iYXRjaGVkVXBkYXRlcyhzLG8sdCxuLHIpO3ZhciBp
PW8uX2luc3RhbmNlLnJvb3RJRDtyZXR1cm4gTFtpXT1vLG99LHJlbmRlclN1YnRyZWVJbnRvQ29u
dGFpbmVyOmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBudWxsIT1lJiZFLmhhcyhlKXx8ZigiMzgi
KSxqLl9yZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcihlLHQsbixyKX0sX3JlbmRlclN1YnRyZWVJ
bnRvQ29udGFpbmVyOmZ1bmN0aW9uKGUsdCxuLHIpe1QudmFsaWRhdGVDYWxsYmFjayhyLCJSZWFj
dERPTS5yZW5kZXIiKSx2LmlzVmFsaWRFbGVtZW50KHQpfHxmKCIzOSIsInN0cmluZyI9PXR5cGVv
ZiB0PyIgSW5zdGVhZCBvZiBwYXNzaW5nIGEgc3RyaW5nIGxpa2UgJ2RpdicsIHBhc3MgUmVhY3Qu
Y3JlYXRlRWxlbWVudCgnZGl2Jykgb3IgPGRpdiAvPi4iOiJmdW5jdGlvbiI9PXR5cGVvZiB0PyIg
SW5zdGVhZCBvZiBwYXNzaW5nIGEgY2xhc3MgbGlrZSBGb28sIHBhc3MgUmVhY3QuY3JlYXRlRWxl
bWVudChGb28pIG9yIDxGb28gLz4uIjpudWxsIT10JiZ2b2lkIDAhPT10LnByb3BzPyIgVGhpcyBt
YXkgYmUgY2F1c2VkIGJ5IHVuaW50ZW50aW9uYWxseSBsb2FkaW5nIHR3byBpbmRlcGVuZGVudCBj
b3BpZXMgb2YgUmVhY3QuIjoiIik7dmFyIGEscz12LmNyZWF0ZUVsZW1lbnQoRix7Y2hpbGQ6dH0p
O2lmKGUpe3ZhciB1PUUuZ2V0KGUpO2E9dS5fcHJvY2Vzc0NoaWxkQ29udGV4dCh1Ll9jb250ZXh0
KX1lbHNlIGE9UDt2YXIgYz1kKG4pO2lmKGMpe3ZhciBwPWMuX2N1cnJlbnRFbGVtZW50LGg9cC5w
cm9wcy5jaGlsZDtpZihNKGgsdCkpe3ZhciBtPWMuX3JlbmRlcmVkQ29tcG9uZW50LmdldFB1Ymxp
Y0luc3RhbmNlKCksZz1yJiZmdW5jdGlvbigpe3IuY2FsbChtKX07cmV0dXJuIGouX3VwZGF0ZVJv
b3RDb21wb25lbnQoYyxzLGEsbixnKSxtfWoudW5tb3VudENvbXBvbmVudEF0Tm9kZShuKX12YXIg
eT1vKG4pLF89eSYmISFpKHkpLEM9bChuKSxiPV8mJiFjJiYhQyx4PWouX3JlbmRlck5ld1Jvb3RD
b21wb25lbnQocyxuLGIsYSkuX3JlbmRlcmVkQ29tcG9uZW50LmdldFB1YmxpY0luc3RhbmNlKCk7
cmV0dXJuIHImJnIuY2FsbCh4KSx4fSxyZW5kZXI6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBqLl9y
ZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcihudWxsLGUsdCxuKX0sdW5tb3VudENvbXBvbmVudEF0
Tm9kZTpmdW5jdGlvbihlKXtjKGUpfHxmKCI0MCIpO3ZhciB0PWQoZSk7cmV0dXJuIHQ/KGRlbGV0
ZSBMW3QuX2luc3RhbmNlLnJvb3RJRF0say5iYXRjaGVkVXBkYXRlcyh1LHQsZSwhMSksITApOihs
KGUpLDE9PT1lLm5vZGVUeXBlJiZlLmhhc0F0dHJpYnV0ZShPKSwhMSl9LF9tb3VudEltYWdlSW50
b05vZGU6ZnVuY3Rpb24oZSx0LG4saSxhKXtpZihjKHQpfHxmKCI0MSIpLGkpe3ZhciBzPW8odCk7
aWYoeC5jYW5SZXVzZU1hcmt1cChlLHMpKXJldHVybiB2b2lkIHkucHJlY2FjaGVOb2RlKG4scyk7
dmFyIHU9cy5nZXRBdHRyaWJ1dGUoeC5DSEVDS1NVTV9BVFRSX05BTUUpO3MucmVtb3ZlQXR0cmli
dXRlKHguQ0hFQ0tTVU1fQVRUUl9OQU1FKTt2YXIgbD1zLm91dGVySFRNTDtzLnNldEF0dHJpYnV0
ZSh4LkNIRUNLU1VNX0FUVFJfTkFNRSx1KTt2YXIgcD1lLGQ9cihwLGwpLG09IiAoY2xpZW50KSAi
K3Auc3Vic3RyaW5nKGQtMjAsZCsyMCkrIlxuIChzZXJ2ZXIpICIrbC5zdWJzdHJpbmcoZC0yMCxk
KzIwKTt0Lm5vZGVUeXBlPT09QSYmZigiNDIiLG0pfWlmKHQubm9kZVR5cGU9PT1BJiZmKCI0MyIp
LGEudXNlQ3JlYXRlRWxlbWVudCl7Zm9yKDt0Lmxhc3RDaGlsZDspdC5yZW1vdmVDaGlsZCh0Lmxh
c3RDaGlsZCk7aC5pbnNlcnRUcmVlQmVmb3JlKHQsZSxudWxsKX1lbHNlIE4odCxlKSx5LnByZWNh
Y2hlTm9kZShuLHQuZmlyc3RDaGlsZCl9fTt0LmV4cG9ydHM9an0sezEwODoxMDgsMTE6MTEsMTEy
OjExMiwxMTQ6MTE0LDExNjoxMTYsMTE5OjExOSwxMjA6MTIwLDEzMDoxMzAsMTM3OjEzNywxNDI6
MTQyLDI1OjI1LDMzOjMzLDM0OjM0LDM2OjM2LDUzOjUzLDU3OjU3LDU4OjU4LDU5OjU5LDY2OjY2
LDcwOjcwLDcxOjcxLDk6OX1dLDYxOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0
aW9uIHIoZSx0LG4pe3JldHVybnt0eXBlOiJJTlNFUlRfTUFSS1VQIixjb250ZW50OmUsZnJvbUlu
ZGV4Om51bGwsZnJvbU5vZGU6bnVsbCx0b0luZGV4Om4sYWZ0ZXJOb2RlOnR9fWZ1bmN0aW9uIG8o
ZSx0LG4pe3JldHVybnt0eXBlOiJNT1ZFX0VYSVNUSU5HIixjb250ZW50Om51bGwsZnJvbUluZGV4
OmUuX21vdW50SW5kZXgsZnJvbU5vZGU6ZC5nZXRIb3N0Tm9kZShlKSx0b0luZGV4Om4sYWZ0ZXJO
b2RlOnR9fWZ1bmN0aW9uIGkoZSx0KXtyZXR1cm57dHlwZToiUkVNT1ZFX05PREUiLGNvbnRlbnQ6
bnVsbCxmcm9tSW5kZXg6ZS5fbW91bnRJbmRleCxmcm9tTm9kZTp0LHRvSW5kZXg6bnVsbCxhZnRl
ck5vZGU6bnVsbH19ZnVuY3Rpb24gYShlKXtyZXR1cm57dHlwZToiU0VUX01BUktVUCIsY29udGVu
dDplLGZyb21JbmRleDpudWxsLGZyb21Ob2RlOm51bGwsdG9JbmRleDpudWxsLGFmdGVyTm9kZTpu
dWxsfX1mdW5jdGlvbiBzKGUpe3JldHVybnt0eXBlOiJURVhUX0NPTlRFTlQiLGNvbnRlbnQ6ZSxm
cm9tSW5kZXg6bnVsbCxmcm9tTm9kZTpudWxsLHRvSW5kZXg6bnVsbCxhZnRlck5vZGU6bnVsbH19
ZnVuY3Rpb24gdShlLHQpe3JldHVybiB0JiYoZT1lfHxbXSxlLnB1c2godCkpLGV9ZnVuY3Rpb24g
bChlLHQpe3AucHJvY2Vzc0NoaWxkcmVuVXBkYXRlcyhlLHQpfXZhciBjPWUoMTEyKSxwPWUoMjgp
LGQ9KGUoNTcpLGUoNTgpLGUoMTE5KSxlKDY2KSksZj1lKDI2KSxoPShlKDEyOSksZSg5NykpLG09
KGUoMTM3KSx7TWl4aW46e19yZWNvbmNpbGVySW5zdGFudGlhdGVDaGlsZHJlbjpmdW5jdGlvbihl
LHQsbil7cmV0dXJuIGYuaW5zdGFudGlhdGVDaGlsZHJlbihlLHQsbil9LF9yZWNvbmNpbGVyVXBk
YXRlQ2hpbGRyZW46ZnVuY3Rpb24oZSx0LG4scixvLGkpe3ZhciBhO3JldHVybiBhPWgodCwwKSxm
LnVwZGF0ZUNoaWxkcmVuKGUsYSxuLHIsbyx0aGlzLHRoaXMuX2hvc3RDb250YWluZXJJbmZvLGks
MCksYX0sbW91bnRDaGlsZHJlbjpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcy5fcmVjb25jaWxl
ckluc3RhbnRpYXRlQ2hpbGRyZW4oZSx0LG4pO3RoaXMuX3JlbmRlcmVkQ2hpbGRyZW49cjt2YXIg
bz1bXSxpPTA7Zm9yKHZhciBhIGluIHIpaWYoci5oYXNPd25Qcm9wZXJ0eShhKSl7dmFyIHM9clth
XSx1PWQubW91bnRDb21wb25lbnQocyx0LHRoaXMsdGhpcy5faG9zdENvbnRhaW5lckluZm8sbiww
KTtzLl9tb3VudEluZGV4PWkrKyxvLnB1c2godSl9cmV0dXJuIG99LHVwZGF0ZVRleHRDb250ZW50
OmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX3JlbmRlcmVkQ2hpbGRyZW47Zi51bm1vdW50Q2hpbGRy
ZW4odCwhMSk7Zm9yKHZhciBuIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShuKSYmYygiMTE4Iik7bCh0
aGlzLFtzKGUpXSl9LHVwZGF0ZU1hcmt1cDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9yZW5kZXJl
ZENoaWxkcmVuO2YudW5tb3VudENoaWxkcmVuKHQsITEpO2Zvcih2YXIgbiBpbiB0KXQuaGFzT3du
UHJvcGVydHkobikmJmMoIjExOCIpO2wodGhpcyxbYShlKV0pfSx1cGRhdGVDaGlsZHJlbjpmdW5j
dGlvbihlLHQsbil7dGhpcy5fdXBkYXRlQ2hpbGRyZW4oZSx0LG4pfSxfdXBkYXRlQ2hpbGRyZW46
ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMuX3JlbmRlcmVkQ2hpbGRyZW4sbz17fSxpPVtdLGE9
dGhpcy5fcmVjb25jaWxlclVwZGF0ZUNoaWxkcmVuKHIsZSxpLG8sdCxuKTtpZihhfHxyKXt2YXIg
cyxjPW51bGwscD0wLGY9MCxoPTAsbT1udWxsO2ZvcihzIGluIGEpaWYoYS5oYXNPd25Qcm9wZXJ0
eShzKSl7dmFyIHY9ciYmcltzXSxnPWFbc107dj09PWc/KGM9dShjLHRoaXMubW92ZUNoaWxkKHYs
bSxwLGYpKSxmPU1hdGgubWF4KHYuX21vdW50SW5kZXgsZiksdi5fbW91bnRJbmRleD1wKToodiYm
KGY9TWF0aC5tYXgodi5fbW91bnRJbmRleCxmKSksYz11KGMsdGhpcy5fbW91bnRDaGlsZEF0SW5k
ZXgoZyxpW2hdLG0scCx0LG4pKSxoKyspLHArKyxtPWQuZ2V0SG9zdE5vZGUoZyl9Zm9yKHMgaW4g
bylvLmhhc093blByb3BlcnR5KHMpJiYoYz11KGMsdGhpcy5fdW5tb3VudENoaWxkKHJbc10sb1tz
XSkpKTtjJiZsKHRoaXMsYyksdGhpcy5fcmVuZGVyZWRDaGlsZHJlbj1hfX0sdW5tb3VudENoaWxk
cmVuOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX3JlbmRlcmVkQ2hpbGRyZW47Zi51bm1vdW50Q2hp
bGRyZW4odCxlKSx0aGlzLl9yZW5kZXJlZENoaWxkcmVuPW51bGx9LG1vdmVDaGlsZDpmdW5jdGlv
bihlLHQsbixyKXtpZihlLl9tb3VudEluZGV4PHIpcmV0dXJuIG8oZSx0LG4pfSxjcmVhdGVDaGls
ZDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHIobix0LGUuX21vdW50SW5kZXgpfSxyZW1vdmVDaGls
ZDpmdW5jdGlvbihlLHQpe3JldHVybiBpKGUsdCl9LF9tb3VudENoaWxkQXRJbmRleDpmdW5jdGlv
bihlLHQsbixyLG8saSl7cmV0dXJuIGUuX21vdW50SW5kZXg9cix0aGlzLmNyZWF0ZUNoaWxkKGUs
bix0KX0sX3VubW91bnRDaGlsZDpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMucmVtb3ZlQ2hpbGQo
ZSx0KTtyZXR1cm4gZS5fbW91bnRJbmRleD1udWxsLG59fX0pO3QuZXhwb3J0cz1tfSx7MTEyOjEx
MiwxMTk6MTE5LDEyOToxMjksMTM3OjEzNywyNjoyNiwyODoyOCw1Nzo1Nyw1ODo1OCw2Njo2Niw5
Nzo5N31dLDYyOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoMTEyKSxvPWUo
MTIwKSxpPShlKDEzNykse0hPU1Q6MCxDT01QT1NJVEU6MSxFTVBUWToyLGdldFR5cGU6ZnVuY3Rp
b24oZSl7cmV0dXJuIG51bGw9PT1lfHwhMT09PWU/aS5FTVBUWTpvLmlzVmFsaWRFbGVtZW50KGUp
PyJmdW5jdGlvbiI9PXR5cGVvZiBlLnR5cGU/aS5DT01QT1NJVEU6aS5IT1NUOnZvaWQgcigiMjYi
LGUpfX0pO3QuZXhwb3J0cz1pfSx7MTEyOjExMiwxMjA6MTIwLDEzNzoxMzd9XSw2MzpbZnVuY3Rp
b24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiEoIWV8fCJmdW5jdGlv
biIhPXR5cGVvZiBlLmF0dGFjaFJlZnx8ImZ1bmN0aW9uIiE9dHlwZW9mIGUuZGV0YWNoUmVmKX12
YXIgbz1lKDExMiksaT0oZSgxMzcpLHthZGRDb21wb25lbnRBc1JlZlRvOmZ1bmN0aW9uKGUsdCxu
KXtyKG4pfHxvKCIxMTkiKSxuLmF0dGFjaFJlZih0LGUpfSxyZW1vdmVDb21wb25lbnRBc1JlZkZy
b206ZnVuY3Rpb24oZSx0LG4pe3Iobil8fG8oIjEyMCIpO3ZhciBpPW4uZ2V0UHVibGljSW5zdGFu
Y2UoKTtpJiZpLnJlZnNbdF09PT1lLmdldFB1YmxpY0luc3RhbmNlKCkmJm4uZGV0YWNoUmVmKHQp
fX0pO3QuZXhwb3J0cz1pfSx7MTEyOjExMiwxMzc6MTM3fV0sNjQ6W2Z1bmN0aW9uKGUsdCxuKXsi
dXNlIHN0cmljdCI7dC5leHBvcnRzPSJTRUNSRVRfRE9fTk9UX1BBU1NfVEhJU19PUl9ZT1VfV0lM
TF9CRV9GSVJFRCJ9LHt9XSw2NTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlv
biByKGUpe3RoaXMucmVpbml0aWFsaXplVHJhbnNhY3Rpb24oKSx0aGlzLnJlbmRlclRvU3RhdGlj
TWFya3VwPSExLHRoaXMucmVhY3RNb3VudFJlYWR5PWkuZ2V0UG9vbGVkKG51bGwpLHRoaXMudXNl
Q3JlYXRlRWxlbWVudD1lfXZhciBvPWUoMTQzKSxpPWUoNiksYT1lKDI0KSxzPWUoMjUpLHU9ZSg1
NiksbD0oZSg1OCksZSg4OSkpLGM9ZSg3MCkscD17aW5pdGlhbGl6ZTp1LmdldFNlbGVjdGlvbklu
Zm9ybWF0aW9uLGNsb3NlOnUucmVzdG9yZVNlbGVjdGlvbn0sZD17aW5pdGlhbGl6ZTpmdW5jdGlv
bigpe3ZhciBlPXMuaXNFbmFibGVkKCk7cmV0dXJuIHMuc2V0RW5hYmxlZCghMSksZX0sY2xvc2U6
ZnVuY3Rpb24oZSl7cy5zZXRFbmFibGVkKGUpfX0sZj17aW5pdGlhbGl6ZTpmdW5jdGlvbigpe3Ro
aXMucmVhY3RNb3VudFJlYWR5LnJlc2V0KCl9LGNsb3NlOmZ1bmN0aW9uKCl7dGhpcy5yZWFjdE1v
dW50UmVhZHkubm90aWZ5QWxsKCl9fSxoPVtwLGQsZl0sbT17Z2V0VHJhbnNhY3Rpb25XcmFwcGVy
czpmdW5jdGlvbigpe3JldHVybiBofSxnZXRSZWFjdE1vdW50UmVhZHk6ZnVuY3Rpb24oKXtyZXR1
cm4gdGhpcy5yZWFjdE1vdW50UmVhZHl9LGdldFVwZGF0ZVF1ZXVlOmZ1bmN0aW9uKCl7cmV0dXJu
IGN9LGNoZWNrcG9pbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFjdE1vdW50UmVhZHkuY2hl
Y2twb2ludCgpfSxyb2xsYmFjazpmdW5jdGlvbihlKXt0aGlzLnJlYWN0TW91bnRSZWFkeS5yb2xs
YmFjayhlKX0sZGVzdHJ1Y3RvcjpmdW5jdGlvbigpe2kucmVsZWFzZSh0aGlzLnJlYWN0TW91bnRS
ZWFkeSksdGhpcy5yZWFjdE1vdW50UmVhZHk9bnVsbH19O28oci5wcm90b3R5cGUsbCxtKSxhLmFk
ZFBvb2xpbmdUbyhyKSx0LmV4cG9ydHM9cn0sezE0MzoxNDMsMjQ6MjQsMjU6MjUsNTY6NTYsNTg6
NTgsNjo2LDcwOjcwLDg5Ojg5fV0sNjY6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVu
Y3Rpb24gcigpe28uYXR0YWNoUmVmcyh0aGlzLHRoaXMuX2N1cnJlbnRFbGVtZW50KX12YXIgbz1l
KDY3KSxpPShlKDU4KSxlKDE0Mikse21vdW50Q29tcG9uZW50OmZ1bmN0aW9uKGUsdCxuLG8saSxh
KXt2YXIgcz1lLm1vdW50Q29tcG9uZW50KHQsbixvLGksYSk7cmV0dXJuIGUuX2N1cnJlbnRFbGVt
ZW50JiZudWxsIT1lLl9jdXJyZW50RWxlbWVudC5yZWYmJnQuZ2V0UmVhY3RNb3VudFJlYWR5KCku
ZW5xdWV1ZShyLGUpLHN9LGdldEhvc3ROb2RlOmZ1bmN0aW9uKGUpe3JldHVybiBlLmdldEhvc3RO
b2RlKCl9LHVubW91bnRDb21wb25lbnQ6ZnVuY3Rpb24oZSx0KXtvLmRldGFjaFJlZnMoZSxlLl9j
dXJyZW50RWxlbWVudCksZS51bm1vdW50Q29tcG9uZW50KHQpfSxyZWNlaXZlQ29tcG9uZW50OmZ1
bmN0aW9uKGUsdCxuLGkpe3ZhciBhPWUuX2N1cnJlbnRFbGVtZW50O2lmKHQhPT1hfHxpIT09ZS5f
Y29udGV4dCl7dmFyIHM9by5zaG91bGRVcGRhdGVSZWZzKGEsdCk7cyYmby5kZXRhY2hSZWZzKGUs
YSksZS5yZWNlaXZlQ29tcG9uZW50KHQsbixpKSxzJiZlLl9jdXJyZW50RWxlbWVudCYmbnVsbCE9
ZS5fY3VycmVudEVsZW1lbnQucmVmJiZuLmdldFJlYWN0TW91bnRSZWFkeSgpLmVucXVldWUocixl
KX19LHBlcmZvcm1VcGRhdGVJZk5lY2Vzc2FyeTpmdW5jdGlvbihlLHQsbil7ZS5fdXBkYXRlQmF0
Y2hOdW1iZXI9PT1uJiZlLnBlcmZvcm1VcGRhdGVJZk5lY2Vzc2FyeSh0KX19KTt0LmV4cG9ydHM9
aX0sezE0MjoxNDIsNTg6NTgsNjc6Njd9XSw2NzpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0
IjtmdW5jdGlvbiByKGUsdCxuKXsiZnVuY3Rpb24iPT10eXBlb2YgZT9lKHQuZ2V0UHVibGljSW5z
dGFuY2UoKSk6aS5hZGRDb21wb25lbnRBc1JlZlRvKHQsZSxuKX1mdW5jdGlvbiBvKGUsdCxuKXsi
ZnVuY3Rpb24iPT10eXBlb2YgZT9lKG51bGwpOmkucmVtb3ZlQ29tcG9uZW50QXNSZWZGcm9tKHQs
ZSxuKX12YXIgaT1lKDYzKSxhPXt9O2EuYXR0YWNoUmVmcz1mdW5jdGlvbihlLHQpe2lmKG51bGwh
PT10JiYib2JqZWN0Ij09dHlwZW9mIHQpe3ZhciBuPXQucmVmO251bGwhPW4mJnIobixlLHQuX293
bmVyKX19LGEuc2hvdWxkVXBkYXRlUmVmcz1mdW5jdGlvbihlLHQpe3ZhciBuPW51bGwscj1udWxs
O251bGwhPT1lJiYib2JqZWN0Ij09dHlwZW9mIGUmJihuPWUucmVmLHI9ZS5fb3duZXIpO3ZhciBv
PW51bGwsaT1udWxsO3JldHVybiBudWxsIT09dCYmIm9iamVjdCI9PXR5cGVvZiB0JiYobz10LnJl
ZixpPXQuX293bmVyKSxuIT09b3x8InN0cmluZyI9PXR5cGVvZiBvJiZpIT09cn0sYS5kZXRhY2hS
ZWZzPWZ1bmN0aW9uKGUsdCl7aWYobnVsbCE9PXQmJiJvYmplY3QiPT10eXBlb2YgdCl7dmFyIG49
dC5yZWY7bnVsbCE9biYmbyhuLGUsdC5fb3duZXIpfX0sdC5leHBvcnRzPWF9LHs2Mzo2M31dLDY4
OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7dGhpcy5yZWluaXRp
YWxpemVUcmFuc2FjdGlvbigpLHRoaXMucmVuZGVyVG9TdGF0aWNNYXJrdXA9ZSx0aGlzLnVzZUNy
ZWF0ZUVsZW1lbnQ9ITEsdGhpcy51cGRhdGVRdWV1ZT1uZXcgcyh0aGlzKX12YXIgbz1lKDE0Myks
aT1lKDI0KSxhPWUoODkpLHM9KGUoNTgpLGUoNjkpKSx1PVtdLGw9e2VucXVldWU6ZnVuY3Rpb24o
KXt9fSxjPXtnZXRUcmFuc2FjdGlvbldyYXBwZXJzOmZ1bmN0aW9uKCl7cmV0dXJuIHV9LGdldFJl
YWN0TW91bnRSZWFkeTpmdW5jdGlvbigpe3JldHVybiBsfSxnZXRVcGRhdGVRdWV1ZTpmdW5jdGlv
bigpe3JldHVybiB0aGlzLnVwZGF0ZVF1ZXVlfSxkZXN0cnVjdG9yOmZ1bmN0aW9uKCl7fSxjaGVj
a3BvaW50OmZ1bmN0aW9uKCl7fSxyb2xsYmFjazpmdW5jdGlvbigpe319O28oci5wcm90b3R5cGUs
YSxjKSxpLmFkZFBvb2xpbmdUbyhyKSx0LmV4cG9ydHM9cn0sezE0MzoxNDMsMjQ6MjQsNTg6NTgs
Njk6NjksODk6ODl9XSw2OTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBy
KGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNh
bGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9dmFyIG89ZSg3MCksaT0oZSgxNDIpLGZ1bmN0aW9u
KCl7ZnVuY3Rpb24gZSh0KXtyKHRoaXMsZSksdGhpcy50cmFuc2FjdGlvbj10fXJldHVybiBlLnBy
b3RvdHlwZS5pc01vdW50ZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuITF9LGUucHJvdG90eXBlLmVucXVl
dWVDYWxsYmFjaz1mdW5jdGlvbihlLHQsbil7dGhpcy50cmFuc2FjdGlvbi5pc0luVHJhbnNhY3Rp
b24oKSYmby5lbnF1ZXVlQ2FsbGJhY2soZSx0LG4pfSxlLnByb3RvdHlwZS5lbnF1ZXVlRm9yY2VV
cGRhdGU9ZnVuY3Rpb24oZSl7dGhpcy50cmFuc2FjdGlvbi5pc0luVHJhbnNhY3Rpb24oKSYmby5l
bnF1ZXVlRm9yY2VVcGRhdGUoZSl9LGUucHJvdG90eXBlLmVucXVldWVSZXBsYWNlU3RhdGU9ZnVu
Y3Rpb24oZSx0KXt0aGlzLnRyYW5zYWN0aW9uLmlzSW5UcmFuc2FjdGlvbigpJiZvLmVucXVldWVS
ZXBsYWNlU3RhdGUoZSx0KX0sZS5wcm90b3R5cGUuZW5xdWV1ZVNldFN0YXRlPWZ1bmN0aW9uKGUs
dCl7dGhpcy50cmFuc2FjdGlvbi5pc0luVHJhbnNhY3Rpb24oKSYmby5lbnF1ZXVlU2V0U3RhdGUo
ZSx0KX0sZX0oKSk7dC5leHBvcnRzPWl9LHsxNDI6MTQyLDcwOjcwfV0sNzA6W2Z1bmN0aW9uKGUs
dCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXt1LmVucXVldWVVcGRhdGUoZSl9ZnVuY3Rp
b24gbyhlKXt2YXIgdD10eXBlb2YgZTtpZigib2JqZWN0IiE9PXQpcmV0dXJuIHQ7dmFyIG49ZS5j
b25zdHJ1Y3RvciYmZS5jb25zdHJ1Y3Rvci5uYW1lfHx0LHI9T2JqZWN0LmtleXMoZSk7cmV0dXJu
IHIubGVuZ3RoPjAmJnIubGVuZ3RoPDIwP24rIiAoa2V5czogIityLmpvaW4oIiwgIikrIikiOm59
ZnVuY3Rpb24gaShlLHQpe3ZhciBuPXMuZ2V0KGUpO3JldHVybiBufHxudWxsfXZhciBhPWUoMTEy
KSxzPShlKDExOSksZSg1NykpLHU9KGUoNTgpLGUoNzEpKSxsPShlKDEzNyksZSgxNDIpLHtpc01v
dW50ZWQ6ZnVuY3Rpb24oZSl7dmFyIHQ9cy5nZXQoZSk7cmV0dXJuISF0JiYhIXQuX3JlbmRlcmVk
Q29tcG9uZW50fSxlbnF1ZXVlQ2FsbGJhY2s6ZnVuY3Rpb24oZSx0LG4pe2wudmFsaWRhdGVDYWxs
YmFjayh0LG4pO3ZhciBvPWkoZSk7aWYoIW8pcmV0dXJuIG51bGw7by5fcGVuZGluZ0NhbGxiYWNr
cz9vLl9wZW5kaW5nQ2FsbGJhY2tzLnB1c2godCk6by5fcGVuZGluZ0NhbGxiYWNrcz1bdF0scihv
KX0sZW5xdWV1ZUNhbGxiYWNrSW50ZXJuYWw6ZnVuY3Rpb24oZSx0KXtlLl9wZW5kaW5nQ2FsbGJh
Y2tzP2UuX3BlbmRpbmdDYWxsYmFja3MucHVzaCh0KTplLl9wZW5kaW5nQ2FsbGJhY2tzPVt0XSxy
KGUpfSxlbnF1ZXVlRm9yY2VVcGRhdGU6ZnVuY3Rpb24oZSl7dmFyIHQ9aShlLCJmb3JjZVVwZGF0
ZSIpO3QmJih0Ll9wZW5kaW5nRm9yY2VVcGRhdGU9ITAscih0KSl9LGVucXVldWVSZXBsYWNlU3Rh
dGU6ZnVuY3Rpb24oZSx0LG4pe3ZhciBvPWkoZSwicmVwbGFjZVN0YXRlIik7byYmKG8uX3BlbmRp
bmdTdGF0ZVF1ZXVlPVt0XSxvLl9wZW5kaW5nUmVwbGFjZVN0YXRlPSEwLHZvaWQgMCE9PW4mJm51
bGwhPT1uJiYobC52YWxpZGF0ZUNhbGxiYWNrKG4sInJlcGxhY2VTdGF0ZSIpLG8uX3BlbmRpbmdD
YWxsYmFja3M/by5fcGVuZGluZ0NhbGxiYWNrcy5wdXNoKG4pOm8uX3BlbmRpbmdDYWxsYmFja3M9
W25dKSxyKG8pKX0sZW5xdWV1ZVNldFN0YXRlOmZ1bmN0aW9uKGUsdCl7dmFyIG49aShlLCJzZXRT
dGF0ZSIpO24mJigobi5fcGVuZGluZ1N0YXRlUXVldWV8fChuLl9wZW5kaW5nU3RhdGVRdWV1ZT1b
XSkpLnB1c2godCkscihuKSl9LGVucXVldWVFbGVtZW50SW50ZXJuYWw6ZnVuY3Rpb24oZSx0LG4p
e2UuX3BlbmRpbmdFbGVtZW50PXQsZS5fY29udGV4dD1uLHIoZSl9LHZhbGlkYXRlQ2FsbGJhY2s6
ZnVuY3Rpb24oZSx0KXtlJiYiZnVuY3Rpb24iIT10eXBlb2YgZSYmYSgiMTIyIix0LG8oZSkpfX0p
O3QuZXhwb3J0cz1sfSx7MTEyOjExMiwxMTk6MTE5LDEzNzoxMzcsMTQyOjE0Miw1Nzo1Nyw1ODo1
OCw3MTo3MX1dLDcxOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoKXtQ
LlJlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb24mJmJ8fGMoIjEyMyIpfWZ1bmN0aW9uIG8oKXt0aGlz
LnJlaW5pdGlhbGl6ZVRyYW5zYWN0aW9uKCksdGhpcy5kaXJ0eUNvbXBvbmVudHNMZW5ndGg9bnVs
bCx0aGlzLmNhbGxiYWNrUXVldWU9ZC5nZXRQb29sZWQoKSx0aGlzLnJlY29uY2lsZVRyYW5zYWN0
aW9uPVAuUmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbi5nZXRQb29sZWQoITApfWZ1bmN0aW9uIGko
ZSx0LG4sbyxpLGEpe3JldHVybiByKCksYi5iYXRjaGVkVXBkYXRlcyhlLHQsbixvLGksYSl9ZnVu
Y3Rpb24gYShlLHQpe3JldHVybiBlLl9tb3VudE9yZGVyLXQuX21vdW50T3JkZXJ9ZnVuY3Rpb24g
cyhlKXt2YXIgdD1lLmRpcnR5Q29tcG9uZW50c0xlbmd0aDt0IT09Zy5sZW5ndGgmJmMoIjEyNCIs
dCxnLmxlbmd0aCksZy5zb3J0KGEpLHkrKztmb3IodmFyIG49MDtuPHQ7bisrKXt2YXIgcj1nW25d
LG89ci5fcGVuZGluZ0NhbGxiYWNrcztyLl9wZW5kaW5nQ2FsbGJhY2tzPW51bGw7dmFyIGk7aWYo
aC5sb2dUb3BMZXZlbFJlbmRlcnMpe3ZhciBzPXI7ci5fY3VycmVudEVsZW1lbnQudHlwZS5pc1Jl
YWN0VG9wTGV2ZWxXcmFwcGVyJiYocz1yLl9yZW5kZXJlZENvbXBvbmVudCksaT0iUmVhY3QgdXBk
YXRlOiAiK3MuZ2V0TmFtZSgpLGNvbnNvbGUudGltZShpKX1pZihtLnBlcmZvcm1VcGRhdGVJZk5l
Y2Vzc2FyeShyLGUucmVjb25jaWxlVHJhbnNhY3Rpb24seSksaSYmY29uc29sZS50aW1lRW5kKGkp
LG8pZm9yKHZhciB1PTA7dTxvLmxlbmd0aDt1KyspZS5jYWxsYmFja1F1ZXVlLmVucXVldWUob1t1
XSxyLmdldFB1YmxpY0luc3RhbmNlKCkpfX1mdW5jdGlvbiB1KGUpe2lmKHIoKSwhYi5pc0JhdGNo
aW5nVXBkYXRlcylyZXR1cm4gdm9pZCBiLmJhdGNoZWRVcGRhdGVzKHUsZSk7Zy5wdXNoKGUpLG51
bGw9PWUuX3VwZGF0ZUJhdGNoTnVtYmVyJiYoZS5fdXBkYXRlQmF0Y2hOdW1iZXI9eSsxKX1mdW5j
dGlvbiBsKGUsdCl7Yi5pc0JhdGNoaW5nVXBkYXRlc3x8YygiMTI1IiksXy5lbnF1ZXVlKGUsdCks
Qz0hMH12YXIgYz1lKDExMikscD1lKDE0MyksZD1lKDYpLGY9ZSgyNCksaD1lKDUzKSxtPWUoNjYp
LHY9ZSg4OSksZz0oZSgxMzcpLFtdKSx5PTAsXz1kLmdldFBvb2xlZCgpLEM9ITEsYj1udWxsLEU9
e2luaXRpYWxpemU6ZnVuY3Rpb24oKXt0aGlzLmRpcnR5Q29tcG9uZW50c0xlbmd0aD1nLmxlbmd0
aH0sY2xvc2U6ZnVuY3Rpb24oKXt0aGlzLmRpcnR5Q29tcG9uZW50c0xlbmd0aCE9PWcubGVuZ3Ro
PyhnLnNwbGljZSgwLHRoaXMuZGlydHlDb21wb25lbnRzTGVuZ3RoKSxUKCkpOmcubGVuZ3RoPTB9
fSx4PXtpbml0aWFsaXplOmZ1bmN0aW9uKCl7dGhpcy5jYWxsYmFja1F1ZXVlLnJlc2V0KCl9LGNs
b3NlOmZ1bmN0aW9uKCl7dGhpcy5jYWxsYmFja1F1ZXVlLm5vdGlmeUFsbCgpfX0sdz1bRSx4XTtw
KG8ucHJvdG90eXBlLHYse2dldFRyYW5zYWN0aW9uV3JhcHBlcnM6ZnVuY3Rpb24oKXtyZXR1cm4g
d30sZGVzdHJ1Y3RvcjpmdW5jdGlvbigpe3RoaXMuZGlydHlDb21wb25lbnRzTGVuZ3RoPW51bGws
ZC5yZWxlYXNlKHRoaXMuY2FsbGJhY2tRdWV1ZSksdGhpcy5jYWxsYmFja1F1ZXVlPW51bGwsUC5S
ZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9uLnJlbGVhc2UodGhpcy5yZWNvbmNpbGVUcmFuc2FjdGlv
biksdGhpcy5yZWNvbmNpbGVUcmFuc2FjdGlvbj1udWxsfSxwZXJmb3JtOmZ1bmN0aW9uKGUsdCxu
KXtyZXR1cm4gdi5wZXJmb3JtLmNhbGwodGhpcyx0aGlzLnJlY29uY2lsZVRyYW5zYWN0aW9uLnBl
cmZvcm0sdGhpcy5yZWNvbmNpbGVUcmFuc2FjdGlvbixlLHQsbil9fSksZi5hZGRQb29saW5nVG8o
byk7dmFyIFQ9ZnVuY3Rpb24oKXtmb3IoO2cubGVuZ3RofHxDOyl7aWYoZy5sZW5ndGgpe3ZhciBl
PW8uZ2V0UG9vbGVkKCk7ZS5wZXJmb3JtKHMsbnVsbCxlKSxvLnJlbGVhc2UoZSl9aWYoQyl7Qz0h
MTt2YXIgdD1fO189ZC5nZXRQb29sZWQoKSx0Lm5vdGlmeUFsbCgpLGQucmVsZWFzZSh0KX19fSxr
PXtpbmplY3RSZWNvbmNpbGVUcmFuc2FjdGlvbjpmdW5jdGlvbihlKXtlfHxjKCIxMjYiKSxQLlJl
YWN0UmVjb25jaWxlVHJhbnNhY3Rpb249ZX0saW5qZWN0QmF0Y2hpbmdTdHJhdGVneTpmdW5jdGlv
bihlKXtlfHxjKCIxMjciKSwiZnVuY3Rpb24iIT10eXBlb2YgZS5iYXRjaGVkVXBkYXRlcyYmYygi
MTI4IiksImJvb2xlYW4iIT10eXBlb2YgZS5pc0JhdGNoaW5nVXBkYXRlcyYmYygiMTI5IiksYj1l
fX0sUD17UmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbjpudWxsLGJhdGNoZWRVcGRhdGVzOmksZW5x
dWV1ZVVwZGF0ZTp1LGZsdXNoQmF0Y2hlZFVwZGF0ZXM6VCxpbmplY3Rpb246ayxhc2FwOmx9O3Qu
ZXhwb3J0cz1QfSx7MTEyOjExMiwxMzc6MTM3LDE0MzoxNDMsMjQ6MjQsNTM6NTMsNjo2LDY2OjY2
LDg5Ojg5fV0sNzI6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dC5leHBvcnRzPSIxNS41
LjQifSx7fV0sNzM6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9e3hsaW5rOiJo
dHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIix4bWw6Imh0dHA6Ly93d3cudzMub3JnL1hNTC8x
OTk4L25hbWVzcGFjZSJ9LG89e2FjY2VudEhlaWdodDoiYWNjZW50LWhlaWdodCIsYWNjdW11bGF0
ZTowLGFkZGl0aXZlOjAsYWxpZ25tZW50QmFzZWxpbmU6ImFsaWdubWVudC1iYXNlbGluZSIsYWxs
b3dSZW9yZGVyOiJhbGxvd1Jlb3JkZXIiLGFscGhhYmV0aWM6MCxhbXBsaXR1ZGU6MCxhcmFiaWNG
b3JtOiJhcmFiaWMtZm9ybSIsYXNjZW50OjAsYXR0cmlidXRlTmFtZToiYXR0cmlidXRlTmFtZSIs
YXR0cmlidXRlVHlwZToiYXR0cmlidXRlVHlwZSIsYXV0b1JldmVyc2U6ImF1dG9SZXZlcnNlIixh
emltdXRoOjAsYmFzZUZyZXF1ZW5jeToiYmFzZUZyZXF1ZW5jeSIsYmFzZVByb2ZpbGU6ImJhc2VQ
cm9maWxlIixiYXNlbGluZVNoaWZ0OiJiYXNlbGluZS1zaGlmdCIsYmJveDowLGJlZ2luOjAsYmlh
czowLGJ5OjAsY2FsY01vZGU6ImNhbGNNb2RlIixjYXBIZWlnaHQ6ImNhcC1oZWlnaHQiLGNsaXA6
MCxjbGlwUGF0aDoiY2xpcC1wYXRoIixjbGlwUnVsZToiY2xpcC1ydWxlIixjbGlwUGF0aFVuaXRz
OiJjbGlwUGF0aFVuaXRzIixjb2xvckludGVycG9sYXRpb246ImNvbG9yLWludGVycG9sYXRpb24i
LGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnM6ImNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycyIs
Y29sb3JQcm9maWxlOiJjb2xvci1wcm9maWxlIixjb2xvclJlbmRlcmluZzoiY29sb3ItcmVuZGVy
aW5nIixjb250ZW50U2NyaXB0VHlwZToiY29udGVudFNjcmlwdFR5cGUiLGNvbnRlbnRTdHlsZVR5
cGU6ImNvbnRlbnRTdHlsZVR5cGUiLGN1cnNvcjowLGN4OjAsY3k6MCxkOjAsZGVjZWxlcmF0ZTow
LGRlc2NlbnQ6MCxkaWZmdXNlQ29uc3RhbnQ6ImRpZmZ1c2VDb25zdGFudCIsZGlyZWN0aW9uOjAs
ZGlzcGxheTowLGRpdmlzb3I6MCxkb21pbmFudEJhc2VsaW5lOiJkb21pbmFudC1iYXNlbGluZSIs
ZHVyOjAsZHg6MCxkeTowLGVkZ2VNb2RlOiJlZGdlTW9kZSIsZWxldmF0aW9uOjAsZW5hYmxlQmFj
a2dyb3VuZDoiZW5hYmxlLWJhY2tncm91bmQiLGVuZDowLGV4cG9uZW50OjAsZXh0ZXJuYWxSZXNv
dXJjZXNSZXF1aXJlZDoiZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCIsZmlsbDowLGZpbGxPcGFj
aXR5OiJmaWxsLW9wYWNpdHkiLGZpbGxSdWxlOiJmaWxsLXJ1bGUiLGZpbHRlcjowLGZpbHRlclJl
czoiZmlsdGVyUmVzIixmaWx0ZXJVbml0czoiZmlsdGVyVW5pdHMiLGZsb29kQ29sb3I6ImZsb29k
LWNvbG9yIixmbG9vZE9wYWNpdHk6ImZsb29kLW9wYWNpdHkiLGZvY3VzYWJsZTowLGZvbnRGYW1p
bHk6ImZvbnQtZmFtaWx5Iixmb250U2l6ZToiZm9udC1zaXplIixmb250U2l6ZUFkanVzdDoiZm9u
dC1zaXplLWFkanVzdCIsZm9udFN0cmV0Y2g6ImZvbnQtc3RyZXRjaCIsZm9udFN0eWxlOiJmb250
LXN0eWxlIixmb250VmFyaWFudDoiZm9udC12YXJpYW50Iixmb250V2VpZ2h0OiJmb250LXdlaWdo
dCIsZm9ybWF0OjAsZnJvbTowLGZ4OjAsZnk6MCxnMTowLGcyOjAsZ2x5cGhOYW1lOiJnbHlwaC1u
YW1lIixnbHlwaE9yaWVudGF0aW9uSG9yaXpvbnRhbDoiZ2x5cGgtb3JpZW50YXRpb24taG9yaXpv
bnRhbCIsZ2x5cGhPcmllbnRhdGlvblZlcnRpY2FsOiJnbHlwaC1vcmllbnRhdGlvbi12ZXJ0aWNh
bCIsZ2x5cGhSZWY6ImdseXBoUmVmIixncmFkaWVudFRyYW5zZm9ybToiZ3JhZGllbnRUcmFuc2Zv
cm0iLGdyYWRpZW50VW5pdHM6ImdyYWRpZW50VW5pdHMiLGhhbmdpbmc6MCxob3JpekFkdlg6Imhv
cml6LWFkdi14Iixob3Jpek9yaWdpblg6Imhvcml6LW9yaWdpbi14IixpZGVvZ3JhcGhpYzowLGlt
YWdlUmVuZGVyaW5nOiJpbWFnZS1yZW5kZXJpbmciLGluOjAsaW4yOjAsaW50ZXJjZXB0OjAsazow
LGsxOjAsazI6MCxrMzowLGs0OjAsa2VybmVsTWF0cml4OiJrZXJuZWxNYXRyaXgiLGtlcm5lbFVu
aXRMZW5ndGg6Imtlcm5lbFVuaXRMZW5ndGgiLGtlcm5pbmc6MCxrZXlQb2ludHM6ImtleVBvaW50
cyIsa2V5U3BsaW5lczoia2V5U3BsaW5lcyIsa2V5VGltZXM6ImtleVRpbWVzIixsZW5ndGhBZGp1
c3Q6Imxlbmd0aEFkanVzdCIsbGV0dGVyU3BhY2luZzoibGV0dGVyLXNwYWNpbmciLGxpZ2h0aW5n
Q29sb3I6ImxpZ2h0aW5nLWNvbG9yIixsaW1pdGluZ0NvbmVBbmdsZToibGltaXRpbmdDb25lQW5n
bGUiLGxvY2FsOjAsbWFya2VyRW5kOiJtYXJrZXItZW5kIixtYXJrZXJNaWQ6Im1hcmtlci1taWQi
LG1hcmtlclN0YXJ0OiJtYXJrZXItc3RhcnQiLG1hcmtlckhlaWdodDoibWFya2VySGVpZ2h0Iixt
YXJrZXJVbml0czoibWFya2VyVW5pdHMiLG1hcmtlcldpZHRoOiJtYXJrZXJXaWR0aCIsbWFzazow
LG1hc2tDb250ZW50VW5pdHM6Im1hc2tDb250ZW50VW5pdHMiLG1hc2tVbml0czoibWFza1VuaXRz
IixtYXRoZW1hdGljYWw6MCxtb2RlOjAsbnVtT2N0YXZlczoibnVtT2N0YXZlcyIsb2Zmc2V0OjAs
b3BhY2l0eTowLG9wZXJhdG9yOjAsb3JkZXI6MCxvcmllbnQ6MCxvcmllbnRhdGlvbjowLG9yaWdp
bjowLG92ZXJmbG93OjAsb3ZlcmxpbmVQb3NpdGlvbjoib3ZlcmxpbmUtcG9zaXRpb24iLG92ZXJs
aW5lVGhpY2tuZXNzOiJvdmVybGluZS10aGlja25lc3MiLHBhaW50T3JkZXI6InBhaW50LW9yZGVy
IixwYW5vc2UxOiJwYW5vc2UtMSIscGF0aExlbmd0aDoicGF0aExlbmd0aCIscGF0dGVybkNvbnRl
bnRVbml0czoicGF0dGVybkNvbnRlbnRVbml0cyIscGF0dGVyblRyYW5zZm9ybToicGF0dGVyblRy
YW5zZm9ybSIscGF0dGVyblVuaXRzOiJwYXR0ZXJuVW5pdHMiLHBvaW50ZXJFdmVudHM6InBvaW50
ZXItZXZlbnRzIixwb2ludHM6MCxwb2ludHNBdFg6InBvaW50c0F0WCIscG9pbnRzQXRZOiJwb2lu
dHNBdFkiLHBvaW50c0F0WjoicG9pbnRzQXRaIixwcmVzZXJ2ZUFscGhhOiJwcmVzZXJ2ZUFscGhh
IixwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJwcmVzZXJ2ZUFzcGVjdFJhdGlvIixwcmltaXRpdmVVbml0
czoicHJpbWl0aXZlVW5pdHMiLHI6MCxyYWRpdXM6MCxyZWZYOiJyZWZYIixyZWZZOiJyZWZZIixy
ZW5kZXJpbmdJbnRlbnQ6InJlbmRlcmluZy1pbnRlbnQiLHJlcGVhdENvdW50OiJyZXBlYXRDb3Vu
dCIscmVwZWF0RHVyOiJyZXBlYXREdXIiLHJlcXVpcmVkRXh0ZW5zaW9uczoicmVxdWlyZWRFeHRl
bnNpb25zIixyZXF1aXJlZEZlYXR1cmVzOiJyZXF1aXJlZEZlYXR1cmVzIixyZXN0YXJ0OjAscmVz
dWx0OjAscm90YXRlOjAscng6MCxyeTowLHNjYWxlOjAsc2VlZDowLHNoYXBlUmVuZGVyaW5nOiJz
aGFwZS1yZW5kZXJpbmciLHNsb3BlOjAsc3BhY2luZzowLHNwZWN1bGFyQ29uc3RhbnQ6InNwZWN1
bGFyQ29uc3RhbnQiLHNwZWN1bGFyRXhwb25lbnQ6InNwZWN1bGFyRXhwb25lbnQiLHNwZWVkOjAs
c3ByZWFkTWV0aG9kOiJzcHJlYWRNZXRob2QiLHN0YXJ0T2Zmc2V0OiJzdGFydE9mZnNldCIsc3Rk
RGV2aWF0aW9uOiJzdGREZXZpYXRpb24iLHN0ZW1oOjAsc3RlbXY6MCxzdGl0Y2hUaWxlczoic3Rp
dGNoVGlsZXMiLHN0b3BDb2xvcjoic3RvcC1jb2xvciIsc3RvcE9wYWNpdHk6InN0b3Atb3BhY2l0
eSIsc3RyaWtldGhyb3VnaFBvc2l0aW9uOiJzdHJpa2V0aHJvdWdoLXBvc2l0aW9uIixzdHJpa2V0
aHJvdWdoVGhpY2tuZXNzOiJzdHJpa2V0aHJvdWdoLXRoaWNrbmVzcyIsc3RyaW5nOjAsc3Ryb2tl
OjAsc3Ryb2tlRGFzaGFycmF5OiJzdHJva2UtZGFzaGFycmF5IixzdHJva2VEYXNob2Zmc2V0OiJz
dHJva2UtZGFzaG9mZnNldCIsc3Ryb2tlTGluZWNhcDoic3Ryb2tlLWxpbmVjYXAiLHN0cm9rZUxp
bmVqb2luOiJzdHJva2UtbGluZWpvaW4iLHN0cm9rZU1pdGVybGltaXQ6InN0cm9rZS1taXRlcmxp
bWl0IixzdHJva2VPcGFjaXR5OiJzdHJva2Utb3BhY2l0eSIsc3Ryb2tlV2lkdGg6InN0cm9rZS13
aWR0aCIsc3VyZmFjZVNjYWxlOiJzdXJmYWNlU2NhbGUiLHN5c3RlbUxhbmd1YWdlOiJzeXN0ZW1M
YW5ndWFnZSIsdGFibGVWYWx1ZXM6InRhYmxlVmFsdWVzIix0YXJnZXRYOiJ0YXJnZXRYIix0YXJn
ZXRZOiJ0YXJnZXRZIix0ZXh0QW5jaG9yOiJ0ZXh0LWFuY2hvciIsdGV4dERlY29yYXRpb246InRl
eHQtZGVjb3JhdGlvbiIsdGV4dFJlbmRlcmluZzoidGV4dC1yZW5kZXJpbmciLHRleHRMZW5ndGg6
InRleHRMZW5ndGgiLHRvOjAsdHJhbnNmb3JtOjAsdTE6MCx1MjowLHVuZGVybGluZVBvc2l0aW9u
OiJ1bmRlcmxpbmUtcG9zaXRpb24iLHVuZGVybGluZVRoaWNrbmVzczoidW5kZXJsaW5lLXRoaWNr
bmVzcyIsdW5pY29kZTowLHVuaWNvZGVCaWRpOiJ1bmljb2RlLWJpZGkiLHVuaWNvZGVSYW5nZToi
dW5pY29kZS1yYW5nZSIsdW5pdHNQZXJFbToidW5pdHMtcGVyLWVtIix2QWxwaGFiZXRpYzoidi1h
bHBoYWJldGljIix2SGFuZ2luZzoidi1oYW5naW5nIix2SWRlb2dyYXBoaWM6InYtaWRlb2dyYXBo
aWMiLHZNYXRoZW1hdGljYWw6InYtbWF0aGVtYXRpY2FsIix2YWx1ZXM6MCx2ZWN0b3JFZmZlY3Q6
InZlY3Rvci1lZmZlY3QiLHZlcnNpb246MCx2ZXJ0QWR2WToidmVydC1hZHYteSIsdmVydE9yaWdp
blg6InZlcnQtb3JpZ2luLXgiLHZlcnRPcmlnaW5ZOiJ2ZXJ0LW9yaWdpbi15Iix2aWV3Qm94OiJ2
aWV3Qm94Iix2aWV3VGFyZ2V0OiJ2aWV3VGFyZ2V0Iix2aXNpYmlsaXR5OjAsd2lkdGhzOjAsd29y
ZFNwYWNpbmc6IndvcmQtc3BhY2luZyIsd3JpdGluZ01vZGU6IndyaXRpbmctbW9kZSIseDowLHhI
ZWlnaHQ6IngtaGVpZ2h0Iix4MTowLHgyOjAseENoYW5uZWxTZWxlY3RvcjoieENoYW5uZWxTZWxl
Y3RvciIseGxpbmtBY3R1YXRlOiJ4bGluazphY3R1YXRlIix4bGlua0FyY3JvbGU6InhsaW5rOmFy
Y3JvbGUiLHhsaW5rSHJlZjoieGxpbms6aHJlZiIseGxpbmtSb2xlOiJ4bGluazpyb2xlIix4bGlu
a1Nob3c6InhsaW5rOnNob3ciLHhsaW5rVGl0bGU6InhsaW5rOnRpdGxlIix4bGlua1R5cGU6Inhs
aW5rOnR5cGUiLHhtbEJhc2U6InhtbDpiYXNlIix4bWxuczowLHhtbG5zWGxpbms6InhtbG5zOnhs
aW5rIix4bWxMYW5nOiJ4bWw6bGFuZyIseG1sU3BhY2U6InhtbDpzcGFjZSIseTowLHkxOjAseTI6
MCx5Q2hhbm5lbFNlbGVjdG9yOiJ5Q2hhbm5lbFNlbGVjdG9yIix6OjAsem9vbUFuZFBhbjoiem9v
bUFuZFBhbiJ9LGk9e1Byb3BlcnRpZXM6e30sRE9NQXR0cmlidXRlTmFtZXNwYWNlczp7eGxpbmtB
Y3R1YXRlOnIueGxpbmsseGxpbmtBcmNyb2xlOnIueGxpbmsseGxpbmtIcmVmOnIueGxpbmsseGxp
bmtSb2xlOnIueGxpbmsseGxpbmtTaG93OnIueGxpbmsseGxpbmtUaXRsZTpyLnhsaW5rLHhsaW5r
VHlwZTpyLnhsaW5rLHhtbEJhc2U6ci54bWwseG1sTGFuZzpyLnhtbCx4bWxTcGFjZTpyLnhtbH0s
RE9NQXR0cmlidXRlTmFtZXM6e319O09iamVjdC5rZXlzKG8pLmZvckVhY2goZnVuY3Rpb24oZSl7
aS5Qcm9wZXJ0aWVzW2VdPTAsb1tlXSYmKGkuRE9NQXR0cmlidXRlTmFtZXNbZV09b1tlXSl9KSx0
LmV4cG9ydHM9aX0se31dLDc0OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9u
IHIoZSl7aWYoInNlbGVjdGlvblN0YXJ0ImluIGUmJnUuaGFzU2VsZWN0aW9uQ2FwYWJpbGl0aWVz
KGUpKXJldHVybntzdGFydDplLnNlbGVjdGlvblN0YXJ0LGVuZDplLnNlbGVjdGlvbkVuZH07aWYo
d2luZG93LmdldFNlbGVjdGlvbil7dmFyIHQ9d2luZG93LmdldFNlbGVjdGlvbigpO3JldHVybnth
bmNob3JOb2RlOnQuYW5jaG9yTm9kZSxhbmNob3JPZmZzZXQ6dC5hbmNob3JPZmZzZXQsZm9jdXNO
b2RlOnQuZm9jdXNOb2RlLGZvY3VzT2Zmc2V0OnQuZm9jdXNPZmZzZXR9fWlmKGRvY3VtZW50LnNl
bGVjdGlvbil7dmFyIG49ZG9jdW1lbnQuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCk7cmV0dXJue3Bh
cmVudEVsZW1lbnQ6bi5wYXJlbnRFbGVtZW50KCksdGV4dDpuLnRleHQsdG9wOm4uYm91bmRpbmdU
b3AsbGVmdDpuLmJvdW5kaW5nTGVmdH19fWZ1bmN0aW9uIG8oZSx0KXtpZih5fHxudWxsPT1tfHxt
IT09YygpKXJldHVybiBudWxsO3ZhciBuPXIobSk7aWYoIWd8fCFkKGcsbikpe2c9bjt2YXIgbz1s
LmdldFBvb2xlZChoLnNlbGVjdCx2LGUsdCk7cmV0dXJuIG8udHlwZT0ic2VsZWN0IixvLnRhcmdl
dD1tLGkuYWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlcyhvKSxvfXJldHVybiBudWxsfXZhciBp
PWUoMTkpLGE9ZSgxMjMpLHM9ZSgzMyksdT1lKDU2KSxsPWUoODApLGM9ZSgxMzIpLHA9ZSgxMTAp
LGQ9ZSgxNDEpLGY9YS5jYW5Vc2VET00mJiJkb2N1bWVudE1vZGUiaW4gZG9jdW1lbnQmJmRvY3Vt
ZW50LmRvY3VtZW50TW9kZTw9MTEsaD17c2VsZWN0OntwaGFzZWRSZWdpc3RyYXRpb25OYW1lczp7
YnViYmxlZDoib25TZWxlY3QiLGNhcHR1cmVkOiJvblNlbGVjdENhcHR1cmUifSxkZXBlbmRlbmNp
ZXM6WyJ0b3BCbHVyIiwidG9wQ29udGV4dE1lbnUiLCJ0b3BGb2N1cyIsInRvcEtleURvd24iLCJ0
b3BLZXlVcCIsInRvcE1vdXNlRG93biIsInRvcE1vdXNlVXAiLCJ0b3BTZWxlY3Rpb25DaGFuZ2Ui
XX19LG09bnVsbCx2PW51bGwsZz1udWxsLHk9ITEsXz0hMSxDPXtldmVudFR5cGVzOmgsZXh0cmFj
dEV2ZW50czpmdW5jdGlvbihlLHQsbixyKXtpZighXylyZXR1cm4gbnVsbDt2YXIgaT10P3MuZ2V0
Tm9kZUZyb21JbnN0YW5jZSh0KTp3aW5kb3c7c3dpdGNoKGUpe2Nhc2UidG9wRm9jdXMiOihwKGkp
fHwidHJ1ZSI9PT1pLmNvbnRlbnRFZGl0YWJsZSkmJihtPWksdj10LGc9bnVsbCk7YnJlYWsKKztj
YXNlInRvcEJsdXIiOm09bnVsbCx2PW51bGwsZz1udWxsO2JyZWFrO2Nhc2UidG9wTW91c2VEb3du
Ijp5PSEwO2JyZWFrO2Nhc2UidG9wQ29udGV4dE1lbnUiOmNhc2UidG9wTW91c2VVcCI6cmV0dXJu
IHk9ITEsbyhuLHIpO2Nhc2UidG9wU2VsZWN0aW9uQ2hhbmdlIjppZihmKWJyZWFrO2Nhc2UidG9w
S2V5RG93biI6Y2FzZSJ0b3BLZXlVcCI6cmV0dXJuIG8obixyKX1yZXR1cm4gbnVsbH0sZGlkUHV0
TGlzdGVuZXI6ZnVuY3Rpb24oZSx0LG4peyJvblNlbGVjdCI9PT10JiYoXz0hMCl9fTt0LmV4cG9y
dHM9Q30sezExMDoxMTAsMTIzOjEyMywxMzI6MTMyLDE0MToxNDEsMTk6MTksMzM6MzMsNTY6NTYs
ODA6ODB9XSw3NTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3Jl
dHVybiIuIitlLl9yb290Tm9kZUlEfWZ1bmN0aW9uIG8oZSl7cmV0dXJuImJ1dHRvbiI9PT1lfHwi
aW5wdXQiPT09ZXx8InNlbGVjdCI9PT1lfHwidGV4dGFyZWEiPT09ZX12YXIgaT1lKDExMiksYT1l
KDEyMikscz1lKDE5KSx1PWUoMzMpLGw9ZSg3NiksYz1lKDc3KSxwPWUoODApLGQ9ZSg4MSksZj1l
KDgzKSxoPWUoODQpLG09ZSg3OSksdj1lKDg1KSxnPWUoODYpLHk9ZSg4NyksXz1lKDg4KSxDPWUo
MTI5KSxiPWUoOTkpLEU9KGUoMTM3KSx7fSkseD17fTtbImFib3J0IiwiYW5pbWF0aW9uRW5kIiwi
YW5pbWF0aW9uSXRlcmF0aW9uIiwiYW5pbWF0aW9uU3RhcnQiLCJibHVyIiwiY2FuUGxheSIsImNh
blBsYXlUaHJvdWdoIiwiY2xpY2siLCJjb250ZXh0TWVudSIsImNvcHkiLCJjdXQiLCJkb3VibGVD
bGljayIsImRyYWciLCJkcmFnRW5kIiwiZHJhZ0VudGVyIiwiZHJhZ0V4aXQiLCJkcmFnTGVhdmUi
LCJkcmFnT3ZlciIsImRyYWdTdGFydCIsImRyb3AiLCJkdXJhdGlvbkNoYW5nZSIsImVtcHRpZWQi
LCJlbmNyeXB0ZWQiLCJlbmRlZCIsImVycm9yIiwiZm9jdXMiLCJpbnB1dCIsImludmFsaWQiLCJr
ZXlEb3duIiwia2V5UHJlc3MiLCJrZXlVcCIsImxvYWQiLCJsb2FkZWREYXRhIiwibG9hZGVkTWV0
YWRhdGEiLCJsb2FkU3RhcnQiLCJtb3VzZURvd24iLCJtb3VzZU1vdmUiLCJtb3VzZU91dCIsIm1v
dXNlT3ZlciIsIm1vdXNlVXAiLCJwYXN0ZSIsInBhdXNlIiwicGxheSIsInBsYXlpbmciLCJwcm9n
cmVzcyIsInJhdGVDaGFuZ2UiLCJyZXNldCIsInNjcm9sbCIsInNlZWtlZCIsInNlZWtpbmciLCJz
dGFsbGVkIiwic3VibWl0Iiwic3VzcGVuZCIsInRpbWVVcGRhdGUiLCJ0b3VjaENhbmNlbCIsInRv
dWNoRW5kIiwidG91Y2hNb3ZlIiwidG91Y2hTdGFydCIsInRyYW5zaXRpb25FbmQiLCJ2b2x1bWVD
aGFuZ2UiLCJ3YWl0aW5nIiwid2hlZWwiXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PWVbMF0u
dG9VcHBlckNhc2UoKStlLnNsaWNlKDEpLG49Im9uIit0LHI9InRvcCIrdCxvPXtwaGFzZWRSZWdp
c3RyYXRpb25OYW1lczp7YnViYmxlZDpuLGNhcHR1cmVkOm4rIkNhcHR1cmUifSxkZXBlbmRlbmNp
ZXM6W3JdfTtFW2VdPW8seFtyXT1vfSk7dmFyIHc9e30sVD17ZXZlbnRUeXBlczpFLGV4dHJhY3RF
dmVudHM6ZnVuY3Rpb24oZSx0LG4scil7dmFyIG89eFtlXTtpZighbylyZXR1cm4gbnVsbDt2YXIg
YTtzd2l0Y2goZSl7Y2FzZSJ0b3BBYm9ydCI6Y2FzZSJ0b3BDYW5QbGF5IjpjYXNlInRvcENhblBs
YXlUaHJvdWdoIjpjYXNlInRvcER1cmF0aW9uQ2hhbmdlIjpjYXNlInRvcEVtcHRpZWQiOmNhc2Ui
dG9wRW5jcnlwdGVkIjpjYXNlInRvcEVuZGVkIjpjYXNlInRvcEVycm9yIjpjYXNlInRvcElucHV0
IjpjYXNlInRvcEludmFsaWQiOmNhc2UidG9wTG9hZCI6Y2FzZSJ0b3BMb2FkZWREYXRhIjpjYXNl
InRvcExvYWRlZE1ldGFkYXRhIjpjYXNlInRvcExvYWRTdGFydCI6Y2FzZSJ0b3BQYXVzZSI6Y2Fz
ZSJ0b3BQbGF5IjpjYXNlInRvcFBsYXlpbmciOmNhc2UidG9wUHJvZ3Jlc3MiOmNhc2UidG9wUmF0
ZUNoYW5nZSI6Y2FzZSJ0b3BSZXNldCI6Y2FzZSJ0b3BTZWVrZWQiOmNhc2UidG9wU2Vla2luZyI6
Y2FzZSJ0b3BTdGFsbGVkIjpjYXNlInRvcFN1Ym1pdCI6Y2FzZSJ0b3BTdXNwZW5kIjpjYXNlInRv
cFRpbWVVcGRhdGUiOmNhc2UidG9wVm9sdW1lQ2hhbmdlIjpjYXNlInRvcFdhaXRpbmciOmE9cDti
cmVhaztjYXNlInRvcEtleVByZXNzIjppZigwPT09YihuKSlyZXR1cm4gbnVsbDtjYXNlInRvcEtl
eURvd24iOmNhc2UidG9wS2V5VXAiOmE9ZjticmVhaztjYXNlInRvcEJsdXIiOmNhc2UidG9wRm9j
dXMiOmE9ZDticmVhaztjYXNlInRvcENsaWNrIjppZigyPT09bi5idXR0b24pcmV0dXJuIG51bGw7
Y2FzZSJ0b3BEb3VibGVDbGljayI6Y2FzZSJ0b3BNb3VzZURvd24iOmNhc2UidG9wTW91c2VNb3Zl
IjpjYXNlInRvcE1vdXNlVXAiOmNhc2UidG9wTW91c2VPdXQiOmNhc2UidG9wTW91c2VPdmVyIjpj
YXNlInRvcENvbnRleHRNZW51IjphPWg7YnJlYWs7Y2FzZSJ0b3BEcmFnIjpjYXNlInRvcERyYWdF
bmQiOmNhc2UidG9wRHJhZ0VudGVyIjpjYXNlInRvcERyYWdFeGl0IjpjYXNlInRvcERyYWdMZWF2
ZSI6Y2FzZSJ0b3BEcmFnT3ZlciI6Y2FzZSJ0b3BEcmFnU3RhcnQiOmNhc2UidG9wRHJvcCI6YT1t
O2JyZWFrO2Nhc2UidG9wVG91Y2hDYW5jZWwiOmNhc2UidG9wVG91Y2hFbmQiOmNhc2UidG9wVG91
Y2hNb3ZlIjpjYXNlInRvcFRvdWNoU3RhcnQiOmE9djticmVhaztjYXNlInRvcEFuaW1hdGlvbkVu
ZCI6Y2FzZSJ0b3BBbmltYXRpb25JdGVyYXRpb24iOmNhc2UidG9wQW5pbWF0aW9uU3RhcnQiOmE9
bDticmVhaztjYXNlInRvcFRyYW5zaXRpb25FbmQiOmE9ZzticmVhaztjYXNlInRvcFNjcm9sbCI6
YT15O2JyZWFrO2Nhc2UidG9wV2hlZWwiOmE9XzticmVhaztjYXNlInRvcENvcHkiOmNhc2UidG9w
Q3V0IjpjYXNlInRvcFBhc3RlIjphPWN9YXx8aSgiODYiLGUpO3ZhciB1PWEuZ2V0UG9vbGVkKG8s
dCxuLHIpO3JldHVybiBzLmFjY3VtdWxhdGVUd29QaGFzZURpc3BhdGNoZXModSksdX0sZGlkUHV0
TGlzdGVuZXI6ZnVuY3Rpb24oZSx0LG4pe2lmKCJvbkNsaWNrIj09PXQmJiFvKGUuX3RhZykpe3Zh
ciBpPXIoZSkscz11LmdldE5vZGVGcm9tSW5zdGFuY2UoZSk7d1tpXXx8KHdbaV09YS5saXN0ZW4o
cywiY2xpY2siLEMpKX19LHdpbGxEZWxldGVMaXN0ZW5lcjpmdW5jdGlvbihlLHQpe2lmKCJvbkNs
aWNrIj09PXQmJiFvKGUuX3RhZykpe3ZhciBuPXIoZSk7d1tuXS5yZW1vdmUoKSxkZWxldGUgd1tu
XX19fTt0LmV4cG9ydHM9VH0sezExMjoxMTIsMTIyOjEyMiwxMjk6MTI5LDEzNzoxMzcsMTk6MTks
MzM6MzMsNzY6NzYsNzc6NzcsNzk6NzksODA6ODAsODE6ODEsODM6ODMsODQ6ODQsODU6ODUsODY6
ODYsODc6ODcsODg6ODgsOTk6OTl9XSw3NjpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijtm
dW5jdGlvbiByKGUsdCxuLHIpe3JldHVybiBvLmNhbGwodGhpcyxlLHQsbixyKX12YXIgbz1lKDgw
KSxpPXthbmltYXRpb25OYW1lOm51bGwsZWxhcHNlZFRpbWU6bnVsbCxwc2V1ZG9FbGVtZW50Om51
bGx9O28uYXVnbWVudENsYXNzKHIsaSksdC5leHBvcnRzPXJ9LHs4MDo4MH1dLDc3OltmdW5jdGlv
bihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4scil7cmV0dXJuIG8uY2FsbCh0
aGlzLGUsdCxuLHIpfXZhciBvPWUoODApLGk9e2NsaXBib2FyZERhdGE6ZnVuY3Rpb24oZSl7cmV0
dXJuImNsaXBib2FyZERhdGEiaW4gZT9lLmNsaXBib2FyZERhdGE6d2luZG93LmNsaXBib2FyZERh
dGF9fTtvLmF1Z21lbnRDbGFzcyhyLGkpLHQuZXhwb3J0cz1yfSx7ODA6ODB9XSw3ODpbZnVuY3Rp
b24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuLHIpe3JldHVybiBvLmNhbGwo
dGhpcyxlLHQsbixyKX12YXIgbz1lKDgwKSxpPXtkYXRhOm51bGx9O28uYXVnbWVudENsYXNzKHIs
aSksdC5leHBvcnRzPXJ9LHs4MDo4MH1dLDc5OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3Qi
O2Z1bmN0aW9uIHIoZSx0LG4scil7cmV0dXJuIG8uY2FsbCh0aGlzLGUsdCxuLHIpfXZhciBvPWUo
ODQpLGk9e2RhdGFUcmFuc2ZlcjpudWxsfTtvLmF1Z21lbnRDbGFzcyhyLGkpLHQuZXhwb3J0cz1y
fSx7ODQ6ODR9XSw4MDpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUs
dCxuLHIpe3RoaXMuZGlzcGF0Y2hDb25maWc9ZSx0aGlzLl90YXJnZXRJbnN0PXQsdGhpcy5uYXRp
dmVFdmVudD1uO3ZhciBvPXRoaXMuY29uc3RydWN0b3IuSW50ZXJmYWNlO2Zvcih2YXIgaSBpbiBv
KWlmKG8uaGFzT3duUHJvcGVydHkoaSkpe3ZhciBzPW9baV07cz90aGlzW2ldPXMobik6InRhcmdl
dCI9PT1pP3RoaXMudGFyZ2V0PXI6dGhpc1tpXT1uW2ldfXZhciB1PW51bGwhPW4uZGVmYXVsdFBy
ZXZlbnRlZD9uLmRlZmF1bHRQcmV2ZW50ZWQ6ITE9PT1uLnJldHVyblZhbHVlO3JldHVybiB0aGlz
LmlzRGVmYXVsdFByZXZlbnRlZD11P2EudGhhdFJldHVybnNUcnVlOmEudGhhdFJldHVybnNGYWxz
ZSx0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPWEudGhhdFJldHVybnNGYWxzZSx0aGlzfXZhciBv
PWUoMTQzKSxpPWUoMjQpLGE9ZSgxMjkpLHM9KGUoMTQyKSxbImRpc3BhdGNoQ29uZmlnIiwiX3Rh
cmdldEluc3QiLCJuYXRpdmVFdmVudCIsImlzRGVmYXVsdFByZXZlbnRlZCIsImlzUHJvcGFnYXRp
b25TdG9wcGVkIiwiX2Rpc3BhdGNoTGlzdGVuZXJzIiwiX2Rpc3BhdGNoSW5zdGFuY2VzIl0pLHU9
e3R5cGU6bnVsbCx0YXJnZXQ6bnVsbCxjdXJyZW50VGFyZ2V0OmEudGhhdFJldHVybnNOdWxsLGV2
ZW50UGhhc2U6bnVsbCxidWJibGVzOm51bGwsY2FuY2VsYWJsZTpudWxsLHRpbWVTdGFtcDpmdW5j
dGlvbihlKXtyZXR1cm4gZS50aW1lU3RhbXB8fERhdGUubm93KCl9LGRlZmF1bHRQcmV2ZW50ZWQ6
bnVsbCxpc1RydXN0ZWQ6bnVsbH07byhyLnByb3RvdHlwZSx7cHJldmVudERlZmF1bHQ6ZnVuY3Rp
b24oKXt0aGlzLmRlZmF1bHRQcmV2ZW50ZWQ9ITA7dmFyIGU9dGhpcy5uYXRpdmVFdmVudDtlJiYo
ZS5wcmV2ZW50RGVmYXVsdD9lLnByZXZlbnREZWZhdWx0KCk6InVua25vd24iIT10eXBlb2YgZS5y
ZXR1cm5WYWx1ZSYmKGUucmV0dXJuVmFsdWU9ITEpLHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPWEu
dGhhdFJldHVybnNUcnVlKX0sc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5u
YXRpdmVFdmVudDtlJiYoZS5zdG9wUHJvcGFnYXRpb24/ZS5zdG9wUHJvcGFnYXRpb24oKToidW5r
bm93biIhPXR5cGVvZiBlLmNhbmNlbEJ1YmJsZSYmKGUuY2FuY2VsQnViYmxlPSEwKSx0aGlzLmlz
UHJvcGFnYXRpb25TdG9wcGVkPWEudGhhdFJldHVybnNUcnVlKX0scGVyc2lzdDpmdW5jdGlvbigp
e3RoaXMuaXNQZXJzaXN0ZW50PWEudGhhdFJldHVybnNUcnVlfSxpc1BlcnNpc3RlbnQ6YS50aGF0
UmV0dXJuc0ZhbHNlLGRlc3RydWN0b3I6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNvbnN0cnVjdG9y
LkludGVyZmFjZTtmb3IodmFyIHQgaW4gZSl0aGlzW3RdPW51bGw7Zm9yKHZhciBuPTA7bjxzLmxl
bmd0aDtuKyspdGhpc1tzW25dXT1udWxsfX0pLHIuSW50ZXJmYWNlPXUsci5hdWdtZW50Q2xhc3M9
ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLHI9ZnVuY3Rpb24oKXt9O3IucHJvdG90eXBlPW4ucHJv
dG90eXBlO3ZhciBhPW5ldyByO28oYSxlLnByb3RvdHlwZSksZS5wcm90b3R5cGU9YSxlLnByb3Rv
dHlwZS5jb25zdHJ1Y3Rvcj1lLGUuSW50ZXJmYWNlPW8oe30sbi5JbnRlcmZhY2UsdCksZS5hdWdt
ZW50Q2xhc3M9bi5hdWdtZW50Q2xhc3MsaS5hZGRQb29saW5nVG8oZSxpLmZvdXJBcmd1bWVudFBv
b2xlcil9LGkuYWRkUG9vbGluZ1RvKHIsaS5mb3VyQXJndW1lbnRQb29sZXIpLHQuZXhwb3J0cz1y
fSx7MTI5OjEyOSwxNDI6MTQyLDE0MzoxNDMsMjQ6MjR9XSw4MTpbZnVuY3Rpb24oZSx0LG4peyJ1
c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuLHIpe3JldHVybiBvLmNhbGwodGhpcyxlLHQsbixy
KX12YXIgbz1lKDg3KSxpPXtyZWxhdGVkVGFyZ2V0Om51bGx9O28uYXVnbWVudENsYXNzKHIsaSks
dC5leHBvcnRzPXJ9LHs4Nzo4N31dLDgyOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1
bmN0aW9uIHIoZSx0LG4scil7cmV0dXJuIG8uY2FsbCh0aGlzLGUsdCxuLHIpfXZhciBvPWUoODAp
LGk9e2RhdGE6bnVsbH07by5hdWdtZW50Q2xhc3MocixpKSx0LmV4cG9ydHM9cn0sezgwOjgwfV0s
ODM6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbixyKXtyZXR1
cm4gby5jYWxsKHRoaXMsZSx0LG4scil9dmFyIG89ZSg4NyksaT1lKDk5KSxhPWUoMTAwKSxzPWUo
MTAxKSx1PXtrZXk6YSxsb2NhdGlvbjpudWxsLGN0cmxLZXk6bnVsbCxzaGlmdEtleTpudWxsLGFs
dEtleTpudWxsLG1ldGFLZXk6bnVsbCxyZXBlYXQ6bnVsbCxsb2NhbGU6bnVsbCxnZXRNb2RpZmll
clN0YXRlOnMsY2hhckNvZGU6ZnVuY3Rpb24oZSl7cmV0dXJuImtleXByZXNzIj09PWUudHlwZT9p
KGUpOjB9LGtleUNvZGU6ZnVuY3Rpb24oZSl7cmV0dXJuImtleWRvd24iPT09ZS50eXBlfHwia2V5
dXAiPT09ZS50eXBlP2Uua2V5Q29kZTowfSx3aGljaDpmdW5jdGlvbihlKXtyZXR1cm4ia2V5cHJl
c3MiPT09ZS50eXBlP2koZSk6ImtleWRvd24iPT09ZS50eXBlfHwia2V5dXAiPT09ZS50eXBlP2Uu
a2V5Q29kZTowfX07by5hdWdtZW50Q2xhc3Mocix1KSx0LmV4cG9ydHM9cn0sezEwMDoxMDAsMTAx
OjEwMSw4Nzo4Nyw5OTo5OX1dLDg0OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0
aW9uIHIoZSx0LG4scil7cmV0dXJuIG8uY2FsbCh0aGlzLGUsdCxuLHIpfXZhciBvPWUoODcpLGk9
ZSg5MCksYT1lKDEwMSkscz17c2NyZWVuWDpudWxsLHNjcmVlblk6bnVsbCxjbGllbnRYOm51bGws
Y2xpZW50WTpudWxsLGN0cmxLZXk6bnVsbCxzaGlmdEtleTpudWxsLGFsdEtleTpudWxsLG1ldGFL
ZXk6bnVsbCxnZXRNb2RpZmllclN0YXRlOmEsYnV0dG9uOmZ1bmN0aW9uKGUpe3ZhciB0PWUuYnV0
dG9uO3JldHVybiJ3aGljaCJpbiBlP3Q6Mj09PXQ/Mjo0PT09dD8xOjB9LGJ1dHRvbnM6bnVsbCxy
ZWxhdGVkVGFyZ2V0OmZ1bmN0aW9uKGUpe3JldHVybiBlLnJlbGF0ZWRUYXJnZXR8fChlLmZyb21F
bGVtZW50PT09ZS5zcmNFbGVtZW50P2UudG9FbGVtZW50OmUuZnJvbUVsZW1lbnQpfSxwYWdlWDpm
dW5jdGlvbihlKXtyZXR1cm4icGFnZVgiaW4gZT9lLnBhZ2VYOmUuY2xpZW50WCtpLmN1cnJlbnRT
Y3JvbGxMZWZ0fSxwYWdlWTpmdW5jdGlvbihlKXtyZXR1cm4icGFnZVkiaW4gZT9lLnBhZ2VZOmUu
Y2xpZW50WStpLmN1cnJlbnRTY3JvbGxUb3B9fTtvLmF1Z21lbnRDbGFzcyhyLHMpLHQuZXhwb3J0
cz1yfSx7MTAxOjEwMSw4Nzo4Nyw5MDo5MH1dLDg1OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJp
Y3QiO2Z1bmN0aW9uIHIoZSx0LG4scil7cmV0dXJuIG8uY2FsbCh0aGlzLGUsdCxuLHIpfXZhciBv
PWUoODcpLGk9ZSgxMDEpLGE9e3RvdWNoZXM6bnVsbCx0YXJnZXRUb3VjaGVzOm51bGwsY2hhbmdl
ZFRvdWNoZXM6bnVsbCxhbHRLZXk6bnVsbCxtZXRhS2V5Om51bGwsY3RybEtleTpudWxsLHNoaWZ0
S2V5Om51bGwsZ2V0TW9kaWZpZXJTdGF0ZTppfTtvLmF1Z21lbnRDbGFzcyhyLGEpLHQuZXhwb3J0
cz1yfSx7MTAxOjEwMSw4Nzo4N31dLDg2OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1
bmN0aW9uIHIoZSx0LG4scil7cmV0dXJuIG8uY2FsbCh0aGlzLGUsdCxuLHIpfXZhciBvPWUoODAp
LGk9e3Byb3BlcnR5TmFtZTpudWxsLGVsYXBzZWRUaW1lOm51bGwscHNldWRvRWxlbWVudDpudWxs
fTtvLmF1Z21lbnRDbGFzcyhyLGkpLHQuZXhwb3J0cz1yfSx7ODA6ODB9XSw4NzpbZnVuY3Rpb24o
ZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuLHIpe3JldHVybiBvLmNhbGwodGhp
cyxlLHQsbixyKX12YXIgbz1lKDgwKSxpPWUoMTAyKSxhPXt2aWV3OmZ1bmN0aW9uKGUpe2lmKGUu
dmlldylyZXR1cm4gZS52aWV3O3ZhciB0PWkoZSk7aWYodC53aW5kb3c9PT10KXJldHVybiB0O3Zh
ciBuPXQub3duZXJEb2N1bWVudDtyZXR1cm4gbj9uLmRlZmF1bHRWaWV3fHxuLnBhcmVudFdpbmRv
dzp3aW5kb3d9LGRldGFpbDpmdW5jdGlvbihlKXtyZXR1cm4gZS5kZXRhaWx8fDB9fTtvLmF1Z21l
bnRDbGFzcyhyLGEpLHQuZXhwb3J0cz1yfSx7MTAyOjEwMiw4MDo4MH1dLDg4OltmdW5jdGlvbihl
LHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4scil7cmV0dXJuIG8uY2FsbCh0aGlz
LGUsdCxuLHIpfXZhciBvPWUoODQpLGk9e2RlbHRhWDpmdW5jdGlvbihlKXtyZXR1cm4iZGVsdGFY
ImluIGU/ZS5kZWx0YVg6IndoZWVsRGVsdGFYImluIGU/LWUud2hlZWxEZWx0YVg6MH0sZGVsdGFZ
OmZ1bmN0aW9uKGUpe3JldHVybiJkZWx0YVkiaW4gZT9lLmRlbHRhWToid2hlZWxEZWx0YVkiaW4g
ZT8tZS53aGVlbERlbHRhWToid2hlZWxEZWx0YSJpbiBlPy1lLndoZWVsRGVsdGE6MH0sZGVsdGFa
Om51bGwsZGVsdGFNb2RlOm51bGx9O28uYXVnbWVudENsYXNzKHIsaSksdC5leHBvcnRzPXJ9LHs4
NDo4NH1dLDg5OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoMTEyKSxvPShl
KDEzNykse30pLGk9e3JlaW5pdGlhbGl6ZVRyYW5zYWN0aW9uOmZ1bmN0aW9uKCl7dGhpcy50cmFu
c2FjdGlvbldyYXBwZXJzPXRoaXMuZ2V0VHJhbnNhY3Rpb25XcmFwcGVycygpLHRoaXMud3JhcHBl
ckluaXREYXRhP3RoaXMud3JhcHBlckluaXREYXRhLmxlbmd0aD0wOnRoaXMud3JhcHBlckluaXRE
YXRhPVtdLHRoaXMuX2lzSW5UcmFuc2FjdGlvbj0hMX0sX2lzSW5UcmFuc2FjdGlvbjohMSxnZXRU
cmFuc2FjdGlvbldyYXBwZXJzOm51bGwsaXNJblRyYW5zYWN0aW9uOmZ1bmN0aW9uKCl7cmV0dXJu
ISF0aGlzLl9pc0luVHJhbnNhY3Rpb259LHBlcmZvcm06ZnVuY3Rpb24oZSx0LG4sbyxpLGEscyx1
KXt0aGlzLmlzSW5UcmFuc2FjdGlvbigpJiZyKCIyNyIpO3ZhciBsLGM7dHJ5e3RoaXMuX2lzSW5U
cmFuc2FjdGlvbj0hMCxsPSEwLHRoaXMuaW5pdGlhbGl6ZUFsbCgwKSxjPWUuY2FsbCh0LG4sbyxp
LGEscyx1KSxsPSExfWZpbmFsbHl7dHJ5e2lmKGwpdHJ5e3RoaXMuY2xvc2VBbGwoMCl9Y2F0Y2go
ZSl7fWVsc2UgdGhpcy5jbG9zZUFsbCgwKX1maW5hbGx5e3RoaXMuX2lzSW5UcmFuc2FjdGlvbj0h
MX19cmV0dXJuIGN9LGluaXRpYWxpemVBbGw6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudHJh
bnNhY3Rpb25XcmFwcGVycyxuPWU7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl07dHJ5e3RoaXMu
d3JhcHBlckluaXREYXRhW25dPW8sdGhpcy53cmFwcGVySW5pdERhdGFbbl09ci5pbml0aWFsaXpl
P3IuaW5pdGlhbGl6ZS5jYWxsKHRoaXMpOm51bGx9ZmluYWxseXtpZih0aGlzLndyYXBwZXJJbml0
RGF0YVtuXT09PW8pdHJ5e3RoaXMuaW5pdGlhbGl6ZUFsbChuKzEpfWNhdGNoKGUpe319fX0sY2xv
c2VBbGw6ZnVuY3Rpb24oZSl7dGhpcy5pc0luVHJhbnNhY3Rpb24oKXx8cigiMjgiKTtmb3IodmFy
IHQ9dGhpcy50cmFuc2FjdGlvbldyYXBwZXJzLG49ZTtuPHQubGVuZ3RoO24rKyl7dmFyIGksYT10
W25dLHM9dGhpcy53cmFwcGVySW5pdERhdGFbbl07dHJ5e2k9ITAscyE9PW8mJmEuY2xvc2UmJmEu
Y2xvc2UuY2FsbCh0aGlzLHMpLGk9ITF9ZmluYWxseXtpZihpKXRyeXt0aGlzLmNsb3NlQWxsKG4r
MSl9Y2F0Y2goZSl7fX19dGhpcy53cmFwcGVySW5pdERhdGEubGVuZ3RoPTB9fTt0LmV4cG9ydHM9
aX0sezExMjoxMTIsMTM3OjEzN31dLDkwOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3Zh
ciByPXtjdXJyZW50U2Nyb2xsTGVmdDowLGN1cnJlbnRTY3JvbGxUb3A6MCxyZWZyZXNoU2Nyb2xs
VmFsdWVzOmZ1bmN0aW9uKGUpe3IuY3VycmVudFNjcm9sbExlZnQ9ZS54LHIuY3VycmVudFNjcm9s
bFRvcD1lLnl9fTt0LmV4cG9ydHM9cn0se31dLDkxOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJp
Y3QiO2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm4gbnVsbD09dCYmbygiMzAiKSxudWxsPT1lP3Q6QXJy
YXkuaXNBcnJheShlKT9BcnJheS5pc0FycmF5KHQpPyhlLnB1c2guYXBwbHkoZSx0KSxlKTooZS5w
dXNoKHQpLGUpOkFycmF5LmlzQXJyYXkodCk/W2VdLmNvbmNhdCh0KTpbZSx0XX12YXIgbz1lKDEx
Mik7ZSgxMzcpO3QuZXhwb3J0cz1yfSx7MTEyOjExMiwxMzc6MTM3fV0sOTI6W2Z1bmN0aW9uKGUs
dCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtmb3IodmFyIHQ9MSxuPTAscj0wLGk9ZS5s
ZW5ndGgsYT0tNCZpO3I8YTspe2Zvcih2YXIgcz1NYXRoLm1pbihyKzQwOTYsYSk7cjxzO3IrPTQp
bis9KHQrPWUuY2hhckNvZGVBdChyKSkrKHQrPWUuY2hhckNvZGVBdChyKzEpKSsodCs9ZS5jaGFy
Q29kZUF0KHIrMikpKyh0Kz1lLmNoYXJDb2RlQXQociszKSk7dCU9byxuJT1vfWZvcig7cjxpO3Ir
KyluKz10Kz1lLmNoYXJDb2RlQXQocik7cmV0dXJuIHQlPW8sbiU9byx0fG48PDE2fXZhciBvPTY1
NTIxO3QuZXhwb3J0cz1yfSx7fV0sOTM6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFy
IHI9ZnVuY3Rpb24oZSl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBNU0FwcCYmTVNBcHAuZXhl
Y1Vuc2FmZUxvY2FsRnVuY3Rpb24/ZnVuY3Rpb24odCxuLHIsbyl7TVNBcHAuZXhlY1Vuc2FmZUxv
Y2FsRnVuY3Rpb24oZnVuY3Rpb24oKXtyZXR1cm4gZSh0LG4scixvKX0pfTplfTt0LmV4cG9ydHM9
cn0se31dLDk0OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4p
e3JldHVybiBudWxsPT10fHwiYm9vbGVhbiI9PXR5cGVvZiB0fHwiIj09PXQ/IiI6aXNOYU4odCl8
fDA9PT10fHxpLmhhc093blByb3BlcnR5KGUpJiZpW2VdPyIiK3Q6KCJzdHJpbmciPT10eXBlb2Yg
dCYmKHQ9dC50cmltKCkpLHQrInB4Iil9dmFyIG89ZSg0KSxpPShlKDE0Miksby5pc1VuaXRsZXNz
TnVtYmVyKTt0LmV4cG9ydHM9cn0sezE0MjoxNDIsNDo0fV0sOTU6W2Z1bmN0aW9uKGUsdCxuKXsi
dXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXt2YXIgdD0iIitlLG49aS5leGVjKHQpO2lmKCFuKXJl
dHVybiB0O3ZhciByLG89IiIsYT0wLHM9MDtmb3IoYT1uLmluZGV4O2E8dC5sZW5ndGg7YSsrKXtz
d2l0Y2godC5jaGFyQ29kZUF0KGEpKXtjYXNlIDM0OnI9IiZxdW90OyI7YnJlYWs7Y2FzZSAzODpy
PSImYW1wOyI7YnJlYWs7Y2FzZSAzOTpyPSImI3gyNzsiO2JyZWFrO2Nhc2UgNjA6cj0iJmx0OyI7
YnJlYWs7Y2FzZSA2MjpyPSImZ3Q7IjticmVhaztkZWZhdWx0OmNvbnRpbnVlfXMhPT1hJiYobys9
dC5zdWJzdHJpbmcocyxhKSkscz1hKzEsbys9cn1yZXR1cm4gcyE9PWE/byt0LnN1YnN0cmluZyhz
LGEpOm99ZnVuY3Rpb24gbyhlKXtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiBlfHwibnVtYmVyIj09
dHlwZW9mIGU/IiIrZTpyKGUpfXZhciBpPS9bIicmPD5dLzt0LmV4cG9ydHM9b30se31dLDk2Oltm
dW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7aWYobnVsbD09ZSlyZXR1
cm4gbnVsbDtpZigxPT09ZS5ub2RlVHlwZSlyZXR1cm4gZTt2YXIgdD1hLmdldChlKTtpZih0KXJl
dHVybiB0PXModCksdD9pLmdldE5vZGVGcm9tSW5zdGFuY2UodCk6bnVsbDsiZnVuY3Rpb24iPT10
eXBlb2YgZS5yZW5kZXI/bygiNDQiKTpvKCI0NSIsT2JqZWN0LmtleXMoZSkpfXZhciBvPWUoMTEy
KSxpPShlKDExOSksZSgzMykpLGE9ZSg1Nykscz1lKDEwMyk7ZSgxMzcpLGUoMTQyKTt0LmV4cG9y
dHM9cn0sezEwMzoxMDMsMTEyOjExMiwxMTk6MTE5LDEzNzoxMzcsMTQyOjE0MiwzMzozMyw1Nzo1
N31dLDk3OltmdW5jdGlvbihlLHQsbil7KGZ1bmN0aW9uKG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlv
biByKGUsdCxuLHIpe2lmKGUmJiJvYmplY3QiPT10eXBlb2YgZSl7dmFyIG89ZTt2b2lkIDA9PT1v
W25dJiZudWxsIT10JiYob1tuXT10KX19ZnVuY3Rpb24gbyhlLHQpe2lmKG51bGw9PWUpcmV0dXJu
IGU7dmFyIG49e307cmV0dXJuIGkoZSxyLG4pLG59dmFyIGk9KGUoMjIpLGUoMTE3KSk7ZSgxNDIp
O3ZvaWQgMCE9PW4mJm4uZW52LHQuZXhwb3J0cz1vfSkuY2FsbCh0aGlzLHZvaWQgMCl9LHsxMTc6
MTE3LDE0MjoxNDIsMjI6MjJ9XSw5ODpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5j
dGlvbiByKGUsdCxuKXtBcnJheS5pc0FycmF5KGUpP2UuZm9yRWFjaCh0LG4pOmUmJnQuY2FsbChu
LGUpfXQuZXhwb3J0cz1yfSx7fV0sOTk6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVu
Y3Rpb24gcihlKXt2YXIgdCxuPWUua2V5Q29kZTtyZXR1cm4iY2hhckNvZGUiaW4gZT8wPT09KHQ9
ZS5jaGFyQ29kZSkmJjEzPT09biYmKHQ9MTMpOnQ9bix0Pj0zMnx8MTM9PT10P3Q6MH10LmV4cG9y
dHM9cn0se31dLDEwMDpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUp
e2lmKGUua2V5KXt2YXIgdD1pW2Uua2V5XXx8ZS5rZXk7aWYoIlVuaWRlbnRpZmllZCIhPT10KXJl
dHVybiB0fWlmKCJrZXlwcmVzcyI9PT1lLnR5cGUpe3ZhciBuPW8oZSk7cmV0dXJuIDEzPT09bj8i
RW50ZXIiOlN0cmluZy5mcm9tQ2hhckNvZGUobil9cmV0dXJuImtleWRvd24iPT09ZS50eXBlfHwi
a2V5dXAiPT09ZS50eXBlP2FbZS5rZXlDb2RlXXx8IlVuaWRlbnRpZmllZCI6IiJ9dmFyIG89ZSg5
OSksaT17RXNjOiJFc2NhcGUiLFNwYWNlYmFyOiIgIixMZWZ0OiJBcnJvd0xlZnQiLFVwOiJBcnJv
d1VwIixSaWdodDoiQXJyb3dSaWdodCIsRG93bjoiQXJyb3dEb3duIixEZWw6IkRlbGV0ZSIsV2lu
OiJPUyIsTWVudToiQ29udGV4dE1lbnUiLEFwcHM6IkNvbnRleHRNZW51IixTY3JvbGw6IlNjcm9s
bExvY2siLE1velByaW50YWJsZUtleToiVW5pZGVudGlmaWVkIn0sYT17ODoiQmFja3NwYWNlIiw5
OiJUYWIiLDEyOiJDbGVhciIsMTM6IkVudGVyIiwxNjoiU2hpZnQiLDE3OiJDb250cm9sIiwxODoi
QWx0IiwxOToiUGF1c2UiLDIwOiJDYXBzTG9jayIsMjc6IkVzY2FwZSIsMzI6IiAiLDMzOiJQYWdl
VXAiLDM0OiJQYWdlRG93biIsMzU6IkVuZCIsMzY6IkhvbWUiLDM3OiJBcnJvd0xlZnQiLDM4OiJB
cnJvd1VwIiwzOToiQXJyb3dSaWdodCIsNDA6IkFycm93RG93biIsNDU6Ikluc2VydCIsNDY6IkRl
bGV0ZSIsMTEyOiJGMSIsMTEzOiJGMiIsMTE0OiJGMyIsMTE1OiJGNCIsMTE2OiJGNSIsMTE3OiJG
NiIsMTE4OiJGNyIsMTE5OiJGOCIsMTIwOiJGOSIsMTIxOiJGMTAiLDEyMjoiRjExIiwxMjM6IkYx
MiIsMTQ0OiJOdW1Mb2NrIiwxNDU6IlNjcm9sbExvY2siLDIyNDoiTWV0YSJ9O3QuZXhwb3J0cz1y
fSx7OTk6OTl9XSwxMDE6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihl
KXt2YXIgdD10aGlzLG49dC5uYXRpdmVFdmVudDtpZihuLmdldE1vZGlmaWVyU3RhdGUpcmV0dXJu
IG4uZ2V0TW9kaWZpZXJTdGF0ZShlKTt2YXIgcj1pW2VdO3JldHVybiEhciYmISFuW3JdfWZ1bmN0
aW9uIG8oZSl7cmV0dXJuIHJ9dmFyIGk9e0FsdDoiYWx0S2V5IixDb250cm9sOiJjdHJsS2V5IixN
ZXRhOiJtZXRhS2V5IixTaGlmdDoic2hpZnRLZXkifTt0LmV4cG9ydHM9b30se31dLDEwMjpbZnVu
Y3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3ZhciB0PWUudGFyZ2V0fHxl
LnNyY0VsZW1lbnR8fHdpbmRvdztyZXR1cm4gdC5jb3JyZXNwb25kaW5nVXNlRWxlbWVudCYmKHQ9
dC5jb3JyZXNwb25kaW5nVXNlRWxlbWVudCksMz09PXQubm9kZVR5cGU/dC5wYXJlbnROb2RlOnR9
dC5leHBvcnRzPXJ9LHt9XSwxMDM6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rp
b24gcihlKXtmb3IodmFyIHQ7KHQ9ZS5fcmVuZGVyZWROb2RlVHlwZSk9PT1vLkNPTVBPU0lURTsp
ZT1lLl9yZW5kZXJlZENvbXBvbmVudDtyZXR1cm4gdD09PW8uSE9TVD9lLl9yZW5kZXJlZENvbXBv
bmVudDp0PT09by5FTVBUWT9udWxsOnZvaWQgMH12YXIgbz1lKDYyKTt0LmV4cG9ydHM9cn0sezYy
OjYyfV0sMTA0OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7dmFy
IHQ9ZSYmKG8mJmVbb118fGVbaV0pO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0KXJldHVybiB0fXZh
ciBvPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5pdGVyYXRvcixpPSJAQGl0ZXJh
dG9yIjt0LmV4cG9ydHM9cn0se31dLDEwNTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijtm
dW5jdGlvbiByKGUpe2Zvcig7ZSYmZS5maXJzdENoaWxkOyllPWUuZmlyc3RDaGlsZDtyZXR1cm4g
ZX1mdW5jdGlvbiBvKGUpe2Zvcig7ZTspe2lmKGUubmV4dFNpYmxpbmcpcmV0dXJuIGUubmV4dFNp
Ymxpbmc7ZT1lLnBhcmVudE5vZGV9fWZ1bmN0aW9uIGkoZSx0KXtmb3IodmFyIG49cihlKSxpPTAs
YT0wO247KXtpZigzPT09bi5ub2RlVHlwZSl7aWYoYT1pK24udGV4dENvbnRlbnQubGVuZ3RoLGk8
PXQmJmE+PXQpcmV0dXJue25vZGU6bixvZmZzZXQ6dC1pfTtpPWF9bj1yKG8obikpfX10LmV4cG9y
dHM9aX0se31dLDEwNjpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKCl7
cmV0dXJuIWkmJm8uY2FuVXNlRE9NJiYoaT0idGV4dENvbnRlbnQiaW4gZG9jdW1lbnQuZG9jdW1l
bnRFbGVtZW50PyJ0ZXh0Q29udGVudCI6ImlubmVyVGV4dCIpLGl9dmFyIG89ZSgxMjMpLGk9bnVs
bDt0LmV4cG9ydHM9cn0sezEyMzoxMjN9XSwxMDc6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmlj
dCI7ZnVuY3Rpb24gcihlLHQpe3ZhciBuPXt9O3JldHVybiBuW2UudG9Mb3dlckNhc2UoKV09dC50
b0xvd2VyQ2FzZSgpLG5bIldlYmtpdCIrZV09IndlYmtpdCIrdCxuWyJNb3oiK2VdPSJtb3oiK3Qs
blsibXMiK2VdPSJNUyIrdCxuWyJPIitlXT0ibyIrdC50b0xvd2VyQ2FzZSgpLG59ZnVuY3Rpb24g
byhlKXtpZihzW2VdKXJldHVybiBzW2VdO2lmKCFhW2VdKXJldHVybiBlO3ZhciB0PWFbZV07Zm9y
KHZhciBuIGluIHQpaWYodC5oYXNPd25Qcm9wZXJ0eShuKSYmbiBpbiB1KXJldHVybiBzW2VdPXRb
bl07cmV0dXJuIiJ9dmFyIGk9ZSgxMjMpLGE9e2FuaW1hdGlvbmVuZDpyKCJBbmltYXRpb24iLCJB
bmltYXRpb25FbmQiKSxhbmltYXRpb25pdGVyYXRpb246cigiQW5pbWF0aW9uIiwiQW5pbWF0aW9u
SXRlcmF0aW9uIiksYW5pbWF0aW9uc3RhcnQ6cigiQW5pbWF0aW9uIiwiQW5pbWF0aW9uU3RhcnQi
KSx0cmFuc2l0aW9uZW5kOnIoIlRyYW5zaXRpb24iLCJUcmFuc2l0aW9uRW5kIil9LHM9e30sdT17
fTtpLmNhblVzZURPTSYmKHU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iikuc3R5bGUsIkFu
aW1hdGlvbkV2ZW50ImluIHdpbmRvd3x8KGRlbGV0ZSBhLmFuaW1hdGlvbmVuZC5hbmltYXRpb24s
ZGVsZXRlIGEuYW5pbWF0aW9uaXRlcmF0aW9uLmFuaW1hdGlvbixkZWxldGUgYS5hbmltYXRpb25z
dGFydC5hbmltYXRpb24pLCJUcmFuc2l0aW9uRXZlbnQiaW4gd2luZG93fHxkZWxldGUgYS50cmFu
c2l0aW9uZW5kLnRyYW5zaXRpb24pLHQuZXhwb3J0cz1vfSx7MTIzOjEyM31dLDEwODpbZnVuY3Rp
b24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe2lmKGUpe3ZhciB0PWUuZ2V0TmFt
ZSgpO2lmKHQpcmV0dXJuIiBDaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiBgIit0KyJgLiJ9cmV0
dXJuIiJ9ZnVuY3Rpb24gbyhlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZSYmdm9pZCAwIT09
ZS5wcm90b3R5cGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLnByb3RvdHlwZS5tb3VudENvbXBvbmVu
dCYmImZ1bmN0aW9uIj09dHlwZW9mIGUucHJvdG90eXBlLnJlY2VpdmVDb21wb25lbnR9ZnVuY3Rp
b24gaShlLHQpe3ZhciBuO2lmKG51bGw9PT1lfHwhMT09PWUpbj1sLmNyZWF0ZShpKTtlbHNlIGlm
KCJvYmplY3QiPT10eXBlb2YgZSl7dmFyIHM9ZSx1PXMudHlwZTtpZigiZnVuY3Rpb24iIT10eXBl
b2YgdSYmInN0cmluZyIhPXR5cGVvZiB1KXt2YXIgZD0iIjtkKz1yKHMuX293bmVyKSxhKCIxMzAi
LG51bGw9PXU/dTp0eXBlb2YgdSxkKX0ic3RyaW5nIj09dHlwZW9mIHMudHlwZT9uPWMuY3JlYXRl
SW50ZXJuYWxDb21wb25lbnQocyk6byhzLnR5cGUpPyhuPW5ldyBzLnR5cGUocyksbi5nZXRIb3N0
Tm9kZXx8KG4uZ2V0SG9zdE5vZGU9bi5nZXROYXRpdmVOb2RlKSk6bj1uZXcgcChzKX1lbHNlInN0
cmluZyI9PXR5cGVvZiBlfHwibnVtYmVyIj09dHlwZW9mIGU/bj1jLmNyZWF0ZUluc3RhbmNlRm9y
VGV4dChlKTphKCIxMzEiLHR5cGVvZiBlKTtyZXR1cm4gbi5fbW91bnRJbmRleD0wLG4uX21vdW50
SW1hZ2U9bnVsbCxufXZhciBhPWUoMTEyKSxzPWUoMTQzKSx1PWUoMjkpLGw9ZSg0OSksYz1lKDU0
KSxwPShlKDEyMSksZSgxMzcpLGUoMTQyKSxmdW5jdGlvbihlKXt0aGlzLmNvbnN0cnVjdChlKX0p
O3MocC5wcm90b3R5cGUsdSx7X2luc3RhbnRpYXRlUmVhY3RDb21wb25lbnQ6aX0pLHQuZXhwb3J0
cz1pfSx7MTEyOjExMiwxMjE6MTIxLDEzNzoxMzcsMTQyOjE0MiwxNDM6MTQzLDI5OjI5LDQ5OjQ5
LDU0OjU0fV0sMTA5OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0
KXtpZighaS5jYW5Vc2VET018fHQmJiEoImFkZEV2ZW50TGlzdGVuZXIiaW4gZG9jdW1lbnQpKXJl
dHVybiExO3ZhciBuPSJvbiIrZSxyPW4gaW4gZG9jdW1lbnQ7aWYoIXIpe3ZhciBhPWRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2Euc2V0QXR0cmlidXRlKG4sInJldHVybjsiKSxyPSJmdW5j
dGlvbiI9PXR5cGVvZiBhW25dfXJldHVybiFyJiZvJiYid2hlZWwiPT09ZSYmKHI9ZG9jdW1lbnQu
aW1wbGVtZW50YXRpb24uaGFzRmVhdHVyZSgiRXZlbnRzLndoZWVsIiwiMy4wIikpLHJ9dmFyIG8s
aT1lKDEyMyk7aS5jYW5Vc2VET00mJihvPWRvY3VtZW50LmltcGxlbWVudGF0aW9uJiZkb2N1bWVu
dC5pbXBsZW1lbnRhdGlvbi5oYXNGZWF0dXJlJiYhMCE9PWRvY3VtZW50LmltcGxlbWVudGF0aW9u
Lmhhc0ZlYXR1cmUoIiIsIiIpKSx0LmV4cG9ydHM9cn0sezEyMzoxMjN9XSwxMTA6W2Z1bmN0aW9u
KGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXt2YXIgdD1lJiZlLm5vZGVOYW1lJiZl
Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PXQ/ISFvW2UudHlwZV06InRl
eHRhcmVhIj09PXR9dmFyIG89e2NvbG9yOiEwLGRhdGU6ITAsZGF0ZXRpbWU6ITAsImRhdGV0aW1l
LWxvY2FsIjohMCxlbWFpbDohMCxtb250aDohMCxudW1iZXI6ITAscGFzc3dvcmQ6ITAscmFuZ2U6
ITAsc2VhcmNoOiEwLHRlbDohMCx0ZXh0OiEwLHRpbWU6ITAsdXJsOiEwLHdlZWs6ITB9O3QuZXhw
b3J0cz1yfSx7fV0sMTExOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIo
ZSl7cmV0dXJuJyInK28oZSkrJyInfXZhciBvPWUoOTUpO3QuZXhwb3J0cz1yfSx7OTU6OTV9XSwx
MTI6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtmb3IodmFyIHQ9
YXJndW1lbnRzLmxlbmd0aC0xLG49Ik1pbmlmaWVkIFJlYWN0IGVycm9yICMiK2UrIjsgdmlzaXQg
aHR0cDovL2ZhY2Vib29rLmdpdGh1Yi5pby9yZWFjdC9kb2NzL2Vycm9yLWRlY29kZXIuaHRtbD9p
bnZhcmlhbnQ9IitlLHI9MDtyPHQ7cisrKW4rPSImYXJnc1tdPSIrZW5jb2RlVVJJQ29tcG9uZW50
KGFyZ3VtZW50c1tyKzFdKTtuKz0iIGZvciB0aGUgZnVsbCBtZXNzYWdlIG9yIHVzZSB0aGUgbm9u
LW1pbmlmaWVkIGRldiBlbnZpcm9ubWVudCBmb3IgZnVsbCBlcnJvcnMgYW5kIGFkZGl0aW9uYWwg
aGVscGZ1bCB3YXJuaW5ncy4iO3ZhciBvPW5ldyBFcnJvcihuKTt0aHJvdyBvLm5hbWU9IkludmFy
aWFudCBWaW9sYXRpb24iLG8uZnJhbWVzVG9Qb3A9MSxvfXQuZXhwb3J0cz1yfSx7fV0sMTEzOltm
dW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoNjApO3QuZXhwb3J0cz1yLnJlbmRl
clN1YnRyZWVJbnRvQ29udGFpbmVyfSx7NjA6NjB9XSwxMTQ6W2Z1bmN0aW9uKGUsdCxuKXsidXNl
IHN0cmljdCI7dmFyIHIsbz1lKDEyMyksaT1lKDEwKSxhPS9eWyBcclxuXHRcZl0vLHM9LzwoIS0t
fGxpbmt8bm9zY3JpcHR8bWV0YXxzY3JpcHR8c3R5bGUpWyBcclxuXHRcZlwvPl0vLHU9ZSg5Myks
bD11KGZ1bmN0aW9uKGUsdCl7aWYoZS5uYW1lc3BhY2VVUkkhPT1pLnN2Z3x8ImlubmVySFRNTCJp
biBlKWUuaW5uZXJIVE1MPXQ7ZWxzZXtyPXJ8fGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIp
LHIuaW5uZXJIVE1MPSI8c3ZnPiIrdCsiPC9zdmc+Ijtmb3IodmFyIG49ci5maXJzdENoaWxkO24u
Zmlyc3RDaGlsZDspZS5hcHBlbmRDaGlsZChuLmZpcnN0Q2hpbGQpfX0pO2lmKG8uY2FuVXNlRE9N
KXt2YXIgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtjLmlubmVySFRNTD0iICIsIiI9
PT1jLmlubmVySFRNTCYmKGw9ZnVuY3Rpb24oZSx0KXtpZihlLnBhcmVudE5vZGUmJmUucGFyZW50
Tm9kZS5yZXBsYWNlQ2hpbGQoZSxlKSxhLnRlc3QodCl8fCI8Ij09PXRbMF0mJnMudGVzdCh0KSl7
ZS5pbm5lckhUTUw9U3RyaW5nLmZyb21DaGFyQ29kZSg2NTI3OSkrdDt2YXIgbj1lLmZpcnN0Q2hp
bGQ7MT09PW4uZGF0YS5sZW5ndGg/ZS5yZW1vdmVDaGlsZChuKTpuLmRlbGV0ZURhdGEoMCwxKX1l
bHNlIGUuaW5uZXJIVE1MPXR9KSxjPW51bGx9dC5leHBvcnRzPWx9LHsxMDoxMCwxMjM6MTIzLDkz
OjkzfV0sMTE1OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoMTIzKSxvPWUo
OTUpLGk9ZSgxMTQpLGE9ZnVuY3Rpb24oZSx0KXtpZih0KXt2YXIgbj1lLmZpcnN0Q2hpbGQ7aWYo
biYmbj09PWUubGFzdENoaWxkJiYzPT09bi5ub2RlVHlwZSlyZXR1cm4gdm9pZChuLm5vZGVWYWx1
ZT10KX1lLnRleHRDb250ZW50PXR9O3IuY2FuVXNlRE9NJiYoInRleHRDb250ZW50ImluIGRvY3Vt
ZW50LmRvY3VtZW50RWxlbWVudHx8KGE9ZnVuY3Rpb24oZSx0KXtpZigzPT09ZS5ub2RlVHlwZSly
ZXR1cm4gdm9pZChlLm5vZGVWYWx1ZT10KTtpKGUsbyh0KSl9KSksdC5leHBvcnRzPWF9LHsxMTQ6
MTE0LDEyMzoxMjMsOTU6OTV9XSwxMTY6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVu
Y3Rpb24gcihlLHQpe3ZhciBuPW51bGw9PT1lfHwhMT09PWUscj1udWxsPT09dHx8ITE9PT10O2lm
KG58fHIpcmV0dXJuIG49PT1yO3ZhciBvPXR5cGVvZiBlLGk9dHlwZW9mIHQ7cmV0dXJuInN0cmlu
ZyI9PT1vfHwibnVtYmVyIj09PW8/InN0cmluZyI9PT1pfHwibnVtYmVyIj09PWk6Im9iamVjdCI9
PT1pJiZlLnR5cGU9PT10LnR5cGUmJmUua2V5PT09dC5rZXl9dC5leHBvcnRzPXJ9LHt9XSwxMTc6
W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQpe3JldHVybiBlJiYi
b2JqZWN0Ij09dHlwZW9mIGUmJm51bGwhPWUua2V5P2wuZXNjYXBlKGUua2V5KTp0LnRvU3RyaW5n
KDM2KX1mdW5jdGlvbiBvKGUsdCxuLGkpe3ZhciBkPXR5cGVvZiBlO2lmKCJ1bmRlZmluZWQiIT09
ZCYmImJvb2xlYW4iIT09ZHx8KGU9bnVsbCksbnVsbD09PWV8fCJzdHJpbmciPT09ZHx8Im51bWJl
ciI9PT1kfHwib2JqZWN0Ij09PWQmJmUuJCR0eXBlb2Y9PT1zKXJldHVybiBuKGksZSwiIj09PXQ/
YytyKGUsMCk6dCksMTt2YXIgZixoLG09MCx2PSIiPT09dD9jOnQrcDtpZihBcnJheS5pc0FycmF5
KGUpKWZvcih2YXIgZz0wO2c8ZS5sZW5ndGg7ZysrKWY9ZVtnXSxoPXYrcihmLGcpLG0rPW8oZixo
LG4saSk7ZWxzZXt2YXIgeT11KGUpO2lmKHkpe3ZhciBfLEM9eS5jYWxsKGUpO2lmKHkhPT1lLmVu
dHJpZXMpZm9yKHZhciBiPTA7IShfPUMubmV4dCgpKS5kb25lOylmPV8udmFsdWUsaD12K3IoZixi
KyspLG0rPW8oZixoLG4saSk7ZWxzZSBmb3IoOyEoXz1DLm5leHQoKSkuZG9uZTspe3ZhciBFPV8u
dmFsdWU7RSYmKGY9RVsxXSxoPXYrbC5lc2NhcGUoRVswXSkrcCtyKGYsMCksbSs9byhmLGgsbixp
KSl9fWVsc2UgaWYoIm9iamVjdCI9PT1kKXt2YXIgeD1TdHJpbmcoZSk7YSgiMzEiLCJbb2JqZWN0
IE9iamVjdF0iPT09eD8ib2JqZWN0IHdpdGgga2V5cyB7IitPYmplY3Qua2V5cyhlKS5qb2luKCIs
ICIpKyJ9Ijp4LCIiKX19cmV0dXJuIG19ZnVuY3Rpb24gaShlLHQsbil7cmV0dXJuIG51bGw9PWU/
MDpvKGUsIiIsdCxuKX12YXIgYT1lKDExMikscz0oZSgxMTkpLGUoNDgpKSx1PWUoMTA0KSxsPShl
KDEzNyksZSgyMikpLGM9KGUoMTQyKSwiLiIpLHA9IjoiO3QuZXhwb3J0cz1pfSx7MTA0OjEwNCwx
MTI6MTEyLDExOToxMTksMTM3OjEzNywxNDI6MTQyLDIyOjIyLDQ4OjQ4fV0sMTE4OltmdW5jdGlv
bihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPShlKDE0MyksZSgxMjkpKSxvPShlKDE0Mikscik7
dC5leHBvcnRzPW99LHsxMjk6MTI5LDE0MjoxNDIsMTQzOjE0M31dLDExOTpbZnVuY3Rpb24odCxu
LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbz1lLl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09S
X1lPVV9XSUxMX0JFX0ZJUkVEO24uZXhwb3J0cz1vLlJlYWN0Q3VycmVudE93bmVyfSx7fV0sMTIw
OltmdW5jdGlvbih0LG4scil7InVzZSBzdHJpY3QiO24uZXhwb3J0cz1lfSx7fV0sMTIxOltmdW5j
dGlvbih0LG4scil7InVzZSBzdHJpY3QiO3ZhciBvPWUuX19TRUNSRVRfSU5URVJOQUxTX0RPX05P
VF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQ7bi5leHBvcnRzPW8uZ2V0TmV4dERlYnVnSUR9LHt9
XSwxMjI6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZSgxMjkpLG89e2xpc3Rl
bjpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGUuYWRkRXZlbnRMaXN0ZW5lcj8oZS5hZGRFdmVudExp
c3RlbmVyKHQsbiwhMSkse3JlbW92ZTpmdW5jdGlvbigpe2UucmVtb3ZlRXZlbnRMaXN0ZW5lcih0
LG4sITEpfX0pOmUuYXR0YWNoRXZlbnQ/KGUuYXR0YWNoRXZlbnQoIm9uIit0LG4pLHtyZW1vdmU6
ZnVuY3Rpb24oKXtlLmRldGFjaEV2ZW50KCJvbiIrdCxuKX19KTp2b2lkIDB9LGNhcHR1cmU6ZnVu
Y3Rpb24oZSx0LG4pe3JldHVybiBlLmFkZEV2ZW50TGlzdGVuZXI/KGUuYWRkRXZlbnRMaXN0ZW5l
cih0LG4sITApLHtyZW1vdmU6ZnVuY3Rpb24oKXtlLnJlbW92ZUV2ZW50TGlzdGVuZXIodCxuLCEw
KX19KTp7cmVtb3ZlOnJ9fSxyZWdpc3RlckRlZmF1bHQ6ZnVuY3Rpb24oKXt9fTt0LmV4cG9ydHM9
b30sezEyOToxMjl9XSwxMjM6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ISgi
dW5kZWZpbmVkIj09dHlwZW9mIHdpbmRvd3x8IXdpbmRvdy5kb2N1bWVudHx8IXdpbmRvdy5kb2N1
bWVudC5jcmVhdGVFbGVtZW50KSxvPXtjYW5Vc2VET006cixjYW5Vc2VXb3JrZXJzOiJ1bmRlZmlu
ZWQiIT10eXBlb2YgV29ya2VyLGNhblVzZUV2ZW50TGlzdGVuZXJzOnImJiEoIXdpbmRvdy5hZGRF
dmVudExpc3RlbmVyJiYhd2luZG93LmF0dGFjaEV2ZW50KSxjYW5Vc2VWaWV3cG9ydDpyJiYhIXdp
bmRvdy5zY3JlZW4saXNJbldvcmtlcjohcn07dC5leHBvcnRzPW99LHt9XSwxMjQ6W2Z1bmN0aW9u
KGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZS5yZXBsYWNlKG8sZnVu
Y3Rpb24oZSx0KXtyZXR1cm4gdC50b1VwcGVyQ2FzZSgpfSl9dmFyIG89Ly0oLikvZzt0LmV4cG9y
dHM9cn0se31dLDEyNTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUp
e3JldHVybiBvKGUucmVwbGFjZShpLCJtcy0iKSl9dmFyIG89ZSgxMjQpLGk9L14tbXMtLzt0LmV4
cG9ydHM9cn0sezEyNDoxMjR9XSwxMjY6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVu
Y3Rpb24gcihlLHQpe3JldHVybiEoIWV8fCF0KSYmKGU9PT10fHwhbyhlKSYmKG8odCk/cihlLHQu
cGFyZW50Tm9kZSk6ImNvbnRhaW5zImluIGU/ZS5jb250YWlucyh0KTohIWUuY29tcGFyZURvY3Vt
ZW50UG9zaXRpb24mJiEhKDE2JmUuY29tcGFyZURvY3VtZW50UG9zaXRpb24odCkpKSl9dmFyIG89
ZSgxMzkpO3QuZXhwb3J0cz1yfSx7MTM5OjEzOX1dLDEyNzpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ug
c3RyaWN0IjtmdW5jdGlvbiByKGUpe3ZhciB0PWUubGVuZ3RoO2lmKChBcnJheS5pc0FycmF5KGUp
fHwib2JqZWN0IiE9dHlwZW9mIGUmJiJmdW5jdGlvbiIhPXR5cGVvZiBlKSYmYSghMSksIm51bWJl
ciIhPXR5cGVvZiB0JiZhKCExKSwwPT09dHx8dC0xIGluIGV8fGEoITEpLCJmdW5jdGlvbiI9PXR5
cGVvZiBlLmNhbGxlZSYmYSghMSksZS5oYXNPd25Qcm9wZXJ0eSl0cnl7cmV0dXJuIEFycmF5LnBy
b3RvdHlwZS5zbGljZS5jYWxsKGUpfWNhdGNoKGUpe31mb3IodmFyIG49QXJyYXkodCkscj0wO3I8
dDtyKyspbltyXT1lW3JdO3JldHVybiBufWZ1bmN0aW9uIG8oZSl7cmV0dXJuISFlJiYoIm9iamVj
dCI9PXR5cGVvZiBlfHwiZnVuY3Rpb24iPT10eXBlb2YgZSkmJiJsZW5ndGgiaW4gZSYmISgic2V0
SW50ZXJ2YWwiaW4gZSkmJiJudW1iZXIiIT10eXBlb2YgZS5ub2RlVHlwZSYmKEFycmF5LmlzQXJy
YXkoZSl8fCJjYWxsZWUiaW4gZXx8Iml0ZW0iaW4gZSl9ZnVuY3Rpb24gaShlKXtyZXR1cm4gbyhl
KT9BcnJheS5pc0FycmF5KGUpP2Uuc2xpY2UoKTpyKGUpOltlXX12YXIgYT1lKDEzNyk7dC5leHBv
cnRzPWl9LHsxMzc6MTM3fV0sMTI4OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0
aW9uIHIoZSl7dmFyIHQ9ZS5tYXRjaChjKTtyZXR1cm4gdCYmdFsxXS50b0xvd2VyQ2FzZSgpfWZ1
bmN0aW9uIG8oZSx0KXt2YXIgbj1sO2x8fHUoITEpO3ZhciBvPXIoZSksaT1vJiZzKG8pO2lmKGkp
e24uaW5uZXJIVE1MPWlbMV0rZStpWzJdO2Zvcih2YXIgYz1pWzBdO2MtLTspbj1uLmxhc3RDaGls
ZH1lbHNlIG4uaW5uZXJIVE1MPWU7dmFyIHA9bi5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0
Iik7cC5sZW5ndGgmJih0fHx1KCExKSxhKHApLmZvckVhY2godCkpO2Zvcih2YXIgZD1BcnJheS5m
cm9tKG4uY2hpbGROb2Rlcyk7bi5sYXN0Q2hpbGQ7KW4ucmVtb3ZlQ2hpbGQobi5sYXN0Q2hpbGQp
O3JldHVybiBkfXZhciBpPWUoMTIzKSxhPWUoMTI3KSxzPWUoMTMzKSx1PWUoMTM3KSxsPWkuY2Fu
VXNlRE9NP2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOm51bGwsYz0vXlxzKjwoXHcrKS87
dC5leHBvcnRzPW99LHsxMjM6MTIzLDEyNzoxMjcsMTMzOjEzMywxMzc6MTM3fV0sMTI5OltmdW5j
dGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7
cmV0dXJuIGV9fXZhciBvPWZ1bmN0aW9uKCl7fTtvLnRoYXRSZXR1cm5zPXIsby50aGF0UmV0dXJu
c0ZhbHNlPXIoITEpLG8udGhhdFJldHVybnNUcnVlPXIoITApLG8udGhhdFJldHVybnNOdWxsPXIo
bnVsbCksby50aGF0UmV0dXJuc1RoaXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sby50aGF0UmV0
dXJuc0FyZ3VtZW50PWZ1bmN0aW9uKGUpe3JldHVybiBlfSx0LmV4cG9ydHM9b30se31dLDEzMDpb
ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj17fTt0LmV4cG9ydHM9cn0se31dLDEz
MTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3RyeXtlLmZvY3Vz
KCl9Y2F0Y2goZSl7fX10LmV4cG9ydHM9cn0se31dLDEzMjpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ug
c3RyaWN0IjtmdW5jdGlvbiByKGUpe2lmKHZvaWQgMD09PShlPWV8fCgidW5kZWZpbmVkIiE9dHlw
ZW9mIGRvY3VtZW50P2RvY3VtZW50OnZvaWQgMCkpKXJldHVybiBudWxsO3RyeXtyZXR1cm4gZS5h
Y3RpdmVFbGVtZW50fHxlLmJvZHl9Y2F0Y2godCl7cmV0dXJuIGUuYm9keX19dC5leHBvcnRzPXJ9
LHt9XSwxMzM6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXtyZXR1
cm4gYXx8aSghMSksZC5oYXNPd25Qcm9wZXJ0eShlKXx8KGU9IioiKSxzLmhhc093blByb3BlcnR5
KGUpfHwoYS5pbm5lckhUTUw9IioiPT09ZT8iPGxpbmsgLz4iOiI8IitlKyI+PC8iK2UrIj4iLHNb
ZV09IWEuZmlyc3RDaGlsZCksc1tlXT9kW2VdOm51bGx9dmFyIG89ZSgxMjMpLGk9ZSgxMzcpLGE9
by5jYW5Vc2VET00/ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik6bnVsbCxzPXt9LHU9WzEs
JzxzZWxlY3QgbXVsdGlwbGU9InRydWUiPicsIjwvc2VsZWN0PiJdLGw9WzEsIjx0YWJsZT4iLCI8
L3RhYmxlPiJdLGM9WzMsIjx0YWJsZT48dGJvZHk+PHRyPiIsIjwvdHI+PC90Ym9keT48L3RhYmxl
PiJdLHA9WzEsJzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4nLCI8L3N2
Zz4iXSxkPXsiKiI6WzEsIj88ZGl2PiIsIjwvZGl2PiJdLGFyZWE6WzEsIjxtYXA+IiwiPC9tYXA+
Il0sY29sOlsyLCI8dGFibGU+PHRib2R5PjwvdGJvZHk+PGNvbGdyb3VwPiIsIjwvY29sZ3JvdXA+
PC90YWJsZT4iXSxsZWdlbmQ6WzEsIjxmaWVsZHNldD4iLCI8L2ZpZWxkc2V0PiJdLHBhcmFtOlsx
LCI8b2JqZWN0PiIsIjwvb2JqZWN0PiJdLHRyOlsyLCI8dGFibGU+PHRib2R5PiIsIjwvdGJvZHk+
PC90YWJsZT4iXSxvcHRncm91cDp1LG9wdGlvbjp1LGNhcHRpb246bCxjb2xncm91cDpsLHRib2R5
OmwsdGZvb3Q6bCx0aGVhZDpsLHRkOmMsdGg6Y307WyJjaXJjbGUiLCJjbGlwUGF0aCIsImRlZnMi
LCJlbGxpcHNlIiwiZyIsImltYWdlIiwibGluZSIsImxpbmVhckdyYWRpZW50IiwibWFzayIsInBh
dGgiLCJwYXR0ZXJuIiwicG9seWdvbiIsInBvbHlsaW5lIiwicmFkaWFsR3JhZGllbnQiLCJyZWN0
Iiwic3RvcCIsInRleHQiLCJ0c3BhbiJdLmZvckVhY2goZnVuY3Rpb24oZSl7ZFtlXT1wLHNbZV09
ITB9KSx0LmV4cG9ydHM9cn0sezEyMzoxMjMsMTM3OjEzN31dLDEzNDpbZnVuY3Rpb24oZSx0LG4p
eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlLldpbmRvdyYmZSBpbnN0YW5jZW9m
IGUuV2luZG93P3t4OmUucGFnZVhPZmZzZXR8fGUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNj
cm9sbExlZnQseTplLnBhZ2VZT2Zmc2V0fHxlLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3Jv
bGxUb3B9Ont4OmUuc2Nyb2xsTGVmdCx5OmUuc2Nyb2xsVG9wfX10LmV4cG9ydHM9cn0se31dLDEz
NTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBlLnJl
cGxhY2UobywiLSQxIikudG9Mb3dlckNhc2UoKX12YXIgbz0vKFtBLVpdKS9nO3QuZXhwb3J0cz1y
fSx7fV0sMTM2OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0
dXJuIG8oZSkucmVwbGFjZShpLCItbXMtIil9dmFyIG89ZSgxMzUpLGk9L15tcy0vO3QuZXhwb3J0
cz1yfSx7MTM1OjEzNX1dLDEzNzpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlv
biByKGUsdCxuLHIsaSxhLHMsdSl7aWYobyh0KSwhZSl7dmFyIGw7aWYodm9pZCAwPT09dClsPW5l
dyBFcnJvcigiTWluaWZpZWQgZXhjZXB0aW9uIG9jY3VycmVkOyB1c2UgdGhlIG5vbi1taW5pZmll
ZCBkZXYgZW52aXJvbm1lbnQgZm9yIHRoZSBmdWxsIGVycm9yIG1lc3NhZ2UgYW5kIGFkZGl0aW9u
YWwgaGVscGZ1bCB3YXJuaW5ncy4iKTtlbHNle3ZhciBjPVtuLHIsaSxhLHMsdV0scD0wO2w9bmV3
IEVycm9yKHQucmVwbGFjZSgvJXMvZyxmdW5jdGlvbigpe3JldHVybiBjW3ArK119KSksbC5uYW1l
PSJJbnZhcmlhbnQgVmlvbGF0aW9uIn10aHJvdyBsLmZyYW1lc1RvUG9wPTEsbH19dmFyIG89ZnVu
Y3Rpb24oZSl7fTt0LmV4cG9ydHM9cn0se31dLDEzODpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3Ry
aWN0IjtmdW5jdGlvbiByKGUpe3ZhciB0PWU/ZS5vd25lckRvY3VtZW50fHxlOmRvY3VtZW50LG49
dC5kZWZhdWx0Vmlld3x8d2luZG93O3JldHVybiEoIWV8fCEoImZ1bmN0aW9uIj09dHlwZW9mIG4u
Tm9kZT9lIGluc3RhbmNlb2Ygbi5Ob2RlOiJvYmplY3QiPT10eXBlb2YgZSYmIm51bWJlciI9PXR5
cGVvZiBlLm5vZGVUeXBlJiYic3RyaW5nIj09dHlwZW9mIGUubm9kZU5hbWUpKX10LmV4cG9ydHM9
cn0se31dLDEzOTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3Jl
dHVybiBvKGUpJiYzPT1lLm5vZGVUeXBlfXZhciBvPWUoMTM4KTt0LmV4cG9ydHM9cn0sezEzODox
Mzh9XSwxNDA6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlKXt2YXIg
dD17fTtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHQuaGFzT3duUHJvcGVydHkobil8fCh0W25d
PWUuY2FsbCh0aGlzLG4pKSx0W25dfX10LmV4cG9ydHM9cn0se31dLDE0MTpbZnVuY3Rpb24oZSx0
LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7cmV0dXJuIGU9PT10PzAhPT1lfHwwIT09
dHx8MS9lPT0xL3Q6ZSE9PWUmJnQhPT10fWZ1bmN0aW9uIG8oZSx0KXtpZihyKGUsdCkpcmV0dXJu
ITA7aWYoIm9iamVjdCIhPXR5cGVvZiBlfHxudWxsPT09ZXx8Im9iamVjdCIhPXR5cGVvZiB0fHxu
dWxsPT09dClyZXR1cm4hMTt2YXIgbj1PYmplY3Qua2V5cyhlKSxvPU9iamVjdC5rZXlzKHQpO2lm
KG4ubGVuZ3RoIT09by5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBhPTA7YTxuLmxlbmd0aDthKysp
aWYoIWkuY2FsbCh0LG5bYV0pfHwhcihlW25bYV1dLHRbblthXV0pKXJldHVybiExO3JldHVybiEw
fXZhciBpPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7dC5leHBvcnRzPW99LHt9XSwx
NDI6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZSgxMjkpLG89cjt0LmV4cG9y
dHM9b30sezEyOToxMjl9XSwxNDM6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rp
b24gcihlKXtpZihudWxsPT09ZXx8dm9pZCAwPT09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmpl
Y3QuYXNzaWduIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBudWxsIG9yIHVuZGVmaW5lZCIpO3JldHVy
biBPYmplY3QoZSl9dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyxpPU9iamVjdC5w
cm90b3R5cGUuaGFzT3duUHJvcGVydHksYT1PYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVt
ZXJhYmxlO3QuZXhwb3J0cz1mdW5jdGlvbigpe3RyeXtpZighT2JqZWN0LmFzc2lnbilyZXR1cm4h
MTt2YXIgZT1uZXcgU3RyaW5nKCJhYmMiKTtpZihlWzVdPSJkZSIsIjUiPT09T2JqZWN0LmdldE93
blByb3BlcnR5TmFtZXMoZSlbMF0pcmV0dXJuITE7Zm9yKHZhciB0PXt9LG49MDtuPDEwO24rKyl0
WyJfIitTdHJpbmcuZnJvbUNoYXJDb2RlKG4pXT1uO2lmKCIwMTIzNDU2Nzg5IiE9PU9iamVjdC5n
ZXRPd25Qcm9wZXJ0eU5hbWVzKHQpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0pLmpvaW4o
IiIpKXJldHVybiExO3ZhciByPXt9O3JldHVybiJhYmNkZWZnaGlqa2xtbm9wcXJzdCIuc3BsaXQo
IiIpLmZvckVhY2goZnVuY3Rpb24oZSl7cltlXT1lfSksImFiY2RlZmdoaWprbG1ub3BxcnN0Ij09
PU9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30scikpLmpvaW4oIiIpfWNhdGNoKGUpe3JldHVy
biExfX0oKT9PYmplY3QuYXNzaWduOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuLHMsdT1yKGUpLGw9
MTtsPGFyZ3VtZW50cy5sZW5ndGg7bCsrKXtuPU9iamVjdChhcmd1bWVudHNbbF0pO2Zvcih2YXIg
YyBpbiBuKWkuY2FsbChuLGMpJiYodVtjXT1uW2NdKTtpZihvKXtzPW8obik7Zm9yKHZhciBwPTA7
cDxzLmxlbmd0aDtwKyspYS5jYWxsKG4sc1twXSkmJih1W3NbcF1dPW5bc1twXV0pfX1yZXR1cm4g
dX19LHt9XSwxNDQ6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQs
bixyLG8pe310LmV4cG9ydHM9cn0sezEzNzoxMzcsMTQyOjE0MiwxNDc6MTQ3fV0sMTQ1OltmdW5j
dGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoMTQ2KTt0LmV4cG9ydHM9ZnVuY3Rpb24o
ZSl7cmV0dXJuIHIoZSwhMSl9fSx7MTQ2OjE0Nn1dLDE0NjpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ug
c3RyaWN0Ijt2YXIgcj1lKDEyOSksbz1lKDEzNyksaT0oZSgxNDIpLGUoMTQ3KSksYT1lKDE0NCk7
dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbihlKXt2YXIgdD1lJiYoRSYmZVtFXXx8
ZVt4XSk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQpcmV0dXJuIHR9ZnVuY3Rpb24gcyhlLHQpe3Jl
dHVybiBlPT09dD8wIT09ZXx8MS9lPT0xL3Q6ZSE9PWUmJnQhPT10fWZ1bmN0aW9uIHUoZSl7dGhp
cy5tZXNzYWdlPWUsdGhpcy5zdGFjaz0iIn1mdW5jdGlvbiBsKGUpe2Z1bmN0aW9uIG4obixyLGEs
cyxsLGMscCl7aWYocz1zfHx3LGM9Y3x8YSxwIT09aSlpZih0KW8oITEsIkNhbGxpbmcgUHJvcFR5
cGVzIHZhbGlkYXRvcnMgZGlyZWN0bHkgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgYHByb3AtdHlw
ZXNgIHBhY2thZ2UuIFVzZSBgUHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzKClgIHRvIGNhbGwgdGhl
bS4gUmVhZCBtb3JlIGF0IGh0dHA6Ly9mYi5tZS91c2UtY2hlY2stcHJvcC10eXBlcyIpO2Vsc2U7
cmV0dXJuIG51bGw9PXJbYV0/bj9uZXcgdShudWxsPT09clthXT8iVGhlICIrbCsiIGAiK2MrImAg
aXMgbWFya2VkIGFzIHJlcXVpcmVkIGluIGAiK3MrImAsIGJ1dCBpdHMgdmFsdWUgaXMgYG51bGxg
LiI6IlRoZSAiK2wrIiBgIitjKyJgIGlzIG1hcmtlZCBhcyByZXF1aXJlZCBpbiBgIitzKyJgLCBi
dXQgaXRzIHZhbHVlIGlzIGB1bmRlZmluZWRgLiIpOm51bGw6ZShyLGEscyxsLGMpfXZhciByPW4u
YmluZChudWxsLCExKTtyZXR1cm4gci5pc1JlcXVpcmVkPW4uYmluZChudWxsLCEwKSxyfWZ1bmN0
aW9uIGMoZSl7ZnVuY3Rpb24gdCh0LG4scixvLGksYSl7dmFyIHM9dFtuXTtpZihfKHMpIT09ZSly
ZXR1cm4gbmV3IHUoIkludmFsaWQgIitvKyIgYCIraSsiYCBvZiB0eXBlIGAiK0MocykrImAgc3Vw
cGxpZWQgdG8gYCIrcisiYCwgZXhwZWN0ZWQgYCIrZSsiYC4iKTtyZXR1cm4gbnVsbH1yZXR1cm4g
bCh0KX1mdW5jdGlvbiBwKGUpe2Z1bmN0aW9uIHQodCxuLHIsbyxhKXtpZigiZnVuY3Rpb24iIT10
eXBlb2YgZSlyZXR1cm4gbmV3IHUoIlByb3BlcnR5IGAiK2ErImAgb2YgY29tcG9uZW50IGAiK3Ir
ImAgaGFzIGludmFsaWQgUHJvcFR5cGUgbm90YXRpb24gaW5zaWRlIGFycmF5T2YuIik7dmFyIHM9
dFtuXTtpZighQXJyYXkuaXNBcnJheShzKSl7cmV0dXJuIG5ldyB1KCJJbnZhbGlkICIrbysiIGAi
K2ErImAgb2YgdHlwZSBgIitfKHMpKyJgIHN1cHBsaWVkIHRvIGAiK3IrImAsIGV4cGVjdGVkIGFu
IGFycmF5LiIpfWZvcih2YXIgbD0wO2w8cy5sZW5ndGg7bCsrKXt2YXIgYz1lKHMsbCxyLG8sYSsi
WyIrbCsiXSIsaSk7aWYoYyBpbnN0YW5jZW9mIEVycm9yKXJldHVybiBjfXJldHVybiBudWxsfXJl
dHVybiBsKHQpfWZ1bmN0aW9uIGQoZSl7ZnVuY3Rpb24gdCh0LG4scixvLGkpe2lmKCEodFtuXWlu
c3RhbmNlb2YgZSkpe3ZhciBhPWUubmFtZXx8dztyZXR1cm4gbmV3IHUoIkludmFsaWQgIitvKyIg
YCIraSsiYCBvZiB0eXBlIGAiK2IodFtuXSkrImAgc3VwcGxpZWQgdG8gYCIrcisiYCwgZXhwZWN0
ZWQgaW5zdGFuY2Ugb2YgYCIrYSsiYC4iKX1yZXR1cm4gbnVsbH1yZXR1cm4gbCh0KX1mdW5jdGlv
biBmKGUpe2Z1bmN0aW9uIHQodCxuLHIsbyxpKXtmb3IodmFyIGE9dFtuXSxsPTA7bDxlLmxlbmd0
aDtsKyspaWYocyhhLGVbbF0pKXJldHVybiBudWxsO3JldHVybiBuZXcgdSgiSW52YWxpZCAiK28r
IiBgIitpKyJgIG9mIHZhbHVlIGAiK2ErImAgc3VwcGxpZWQgdG8gYCIrcisiYCwgZXhwZWN0ZWQg
b25lIG9mICIrSlNPTi5zdHJpbmdpZnkoZSkrIi4iKX1yZXR1cm4gQXJyYXkuaXNBcnJheShlKT9s
KHQpOnIudGhhdFJldHVybnNOdWxsfWZ1bmN0aW9uIGgoZSl7ZnVuY3Rpb24gdCh0LG4scixvLGEp
e2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXJldHVybiBuZXcgdSgiUHJvcGVydHkgYCIrYSsiYCBv
ZiBjb21wb25lbnQgYCIrcisiYCBoYXMgaW52YWxpZCBQcm9wVHlwZSBub3RhdGlvbiBpbnNpZGUg
b2JqZWN0T2YuIik7dmFyIHM9dFtuXSxsPV8ocyk7aWYoIm9iamVjdCIhPT1sKXJldHVybiBuZXcg
dSgiSW52YWxpZCAiK28rIiBgIithKyJgIG9mIHR5cGUgYCIrbCsiYCBzdXBwbGllZCB0byBgIity
KyJgLCBleHBlY3RlZCBhbiBvYmplY3QuIik7Zm9yKHZhciBjIGluIHMpaWYocy5oYXNPd25Qcm9w
ZXJ0eShjKSl7dmFyIHA9ZShzLGMscixvLGErIi4iK2MsaSk7aWYocCBpbnN0YW5jZW9mIEVycm9y
KXJldHVybiBwfXJldHVybiBudWxsfXJldHVybiBsKHQpfWZ1bmN0aW9uIG0oZSl7ZnVuY3Rpb24g
dCh0LG4scixvLGEpe2Zvcih2YXIgcz0wO3M8ZS5sZW5ndGg7cysrKXtpZihudWxsPT0oMCxlW3Nd
KSh0LG4scixvLGEsaSkpcmV0dXJuIG51bGx9cmV0dXJuIG5ldyB1KCJJbnZhbGlkICIrbysiIGAi
K2ErImAgc3VwcGxpZWQgdG8gYCIrcisiYC4iKX1yZXR1cm4gQXJyYXkuaXNBcnJheShlKT9sKHQp
OnIudGhhdFJldHVybnNOdWxsfWZ1bmN0aW9uIHYoZSl7ZnVuY3Rpb24gdCh0LG4scixvLGEpe3Zh
ciBzPXRbbl0sbD1fKHMpO2lmKCJvYmplY3QiIT09bClyZXR1cm4gbmV3IHUoIkludmFsaWQgIitv
KyIgYCIrYSsiYCBvZiB0eXBlIGAiK2wrImAgc3VwcGxpZWQgdG8gYCIrcisiYCwgZXhwZWN0ZWQg
YG9iamVjdGAuIik7Zm9yKHZhciBjIGluIGUpe3ZhciBwPWVbY107aWYocCl7dmFyIGQ9cChzLGMs
cixvLGErIi4iK2MsaSk7aWYoZClyZXR1cm4gZH19cmV0dXJuIG51bGx9cmV0dXJuIGwodCl9ZnVu
Y3Rpb24gZyh0KXtzd2l0Y2godHlwZW9mIHQpe2Nhc2UibnVtYmVyIjpjYXNlInN0cmluZyI6Y2Fz
ZSJ1bmRlZmluZWQiOnJldHVybiEwO2Nhc2UiYm9vbGVhbiI6cmV0dXJuIXQ7Y2FzZSJvYmplY3Qi
OmlmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIHQuZXZlcnkoZyk7aWYobnVsbD09PXR8fGUodCkp
cmV0dXJuITA7dmFyIHI9bih0KTtpZighcilyZXR1cm4hMTt2YXIgbyxpPXIuY2FsbCh0KTtpZihy
IT09dC5lbnRyaWVzKXtmb3IoOyEobz1pLm5leHQoKSkuZG9uZTspaWYoIWcoby52YWx1ZSkpcmV0
dXJuITF9ZWxzZSBmb3IoOyEobz1pLm5leHQoKSkuZG9uZTspe3ZhciBhPW8udmFsdWU7aWYoYSYm
IWcoYVsxXSkpcmV0dXJuITF9cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19ZnVuY3Rpb24geShl
LHQpe3JldHVybiJzeW1ib2wiPT09ZXx8KCJTeW1ib2wiPT09dFsiQEB0b1N0cmluZ1RhZyJdfHwi
ZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0IGluc3RhbmNlb2YgU3ltYm9sKX1mdW5jdGlvbiBf
KGUpe3ZhciB0PXR5cGVvZiBlO3JldHVybiBBcnJheS5pc0FycmF5KGUpPyJhcnJheSI6ZSBpbnN0
YW5jZW9mIFJlZ0V4cD8ib2JqZWN0Ijp5KHQsZSk/InN5bWJvbCI6dH1mdW5jdGlvbiBDKGUpe3Zh
ciB0PV8oZSk7aWYoIm9iamVjdCI9PT10KXtpZihlIGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4iZGF0
ZSI7aWYoZSBpbnN0YW5jZW9mIFJlZ0V4cClyZXR1cm4icmVnZXhwIn1yZXR1cm4gdH1mdW5jdGlv
biBiKGUpe3JldHVybiBlLmNvbnN0cnVjdG9yJiZlLmNvbnN0cnVjdG9yLm5hbWU/ZS5jb25zdHJ1
Y3Rvci5uYW1lOnd9dmFyIEU9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLml0ZXJh
dG9yLHg9IkBAaXRlcmF0b3IiLHc9Ijw8YW5vbnltb3VzPj4iLFQ9e2FycmF5OmMoImFycmF5Iiks
Ym9vbDpjKCJib29sZWFuIiksZnVuYzpjKCJmdW5jdGlvbiIpLG51bWJlcjpjKCJudW1iZXIiKSxv
YmplY3Q6Yygib2JqZWN0Iiksc3RyaW5nOmMoInN0cmluZyIpLHN5bWJvbDpjKCJzeW1ib2wiKSxh
bnk6ZnVuY3Rpb24oKXtyZXR1cm4gbChyLnRoYXRSZXR1cm5zTnVsbCl9KCksYXJyYXlPZjpwLGVs
ZW1lbnQ6ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsbixyLG8saSl7dmFyIGE9dFtuXTtpZighZShh
KSl7cmV0dXJuIG5ldyB1KCJJbnZhbGlkICIrbysiIGAiK2krImAgb2YgdHlwZSBgIitfKGEpKyJg
IHN1cHBsaWVkIHRvIGAiK3IrImAsIGV4cGVjdGVkIGEgc2luZ2xlIFJlYWN0RWxlbWVudC4iKX1y
ZXR1cm4gbnVsbH1yZXR1cm4gbCh0KX0oKSxpbnN0YW5jZU9mOmQsbm9kZTpmdW5jdGlvbigpe2Z1
bmN0aW9uIGUoZSx0LG4scixvKXtyZXR1cm4gZyhlW3RdKT9udWxsOm5ldyB1KCJJbnZhbGlkICIr
cisiIGAiK28rImAgc3VwcGxpZWQgdG8gYCIrbisiYCwgZXhwZWN0ZWQgYSBSZWFjdE5vZGUuIil9
cmV0dXJuIGwoZSl9KCksb2JqZWN0T2Y6aCxvbmVPZjpmLG9uZU9mVHlwZTptLHNoYXBlOnZ9Cis7
cmV0dXJuIHUucHJvdG90eXBlPUVycm9yLnByb3RvdHlwZSxULmNoZWNrUHJvcFR5cGVzPWEsVC5Q
cm9wVHlwZXM9VCxUfX0sezEyOToxMjksMTM3OjEzNywxNDI6MTQyLDE0NDoxNDQsMTQ3OjE0N31d
LDE0NzpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt0LmV4cG9ydHM9IlNFQ1JFVF9ET19O
T1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEIn0se31dfSx7fSxbNDVdKSg0NSl9KCl9
KCl9KTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5j
ZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxl
cy9yZWFjdC9ub2RlX21vZHVsZXMvcmVhY3QvZGlzdC9yZWFjdC13aXRoLWFkZG9ucy5qcyBiL1Bl
cmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJl
LWV4YW1wbGVzL3JlYWN0L25vZGVfbW9kdWxlcy9yZWFjdC9kaXN0L3JlYWN0LXdpdGgtYWRkb25z
LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjJhMjkwMzZjZDRlODcxNmUyOGY5OWQyMTk4NjFmNjk2MGVhZGQ2NzYK
LS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNl
cy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9ub2RlX21vZHVsZXMvcmVhY3Qv
ZGlzdC9yZWFjdC13aXRoLWFkZG9ucy5qcwpAQCAtMCwwICsxLDU2NDYgQEAKKyAvKioKKyAgKiBS
ZWFjdCAod2l0aCBhZGRvbnMpIHYxNS41LjQKKyAgKi8KKyhmdW5jdGlvbihmKXtpZih0eXBlb2Yg
ZXhwb3J0cz09PSJvYmplY3QiJiZ0eXBlb2YgbW9kdWxlIT09InVuZGVmaW5lZCIpe21vZHVsZS5l
eHBvcnRzPWYoKX1lbHNlIGlmKHR5cGVvZiBkZWZpbmU9PT0iZnVuY3Rpb24iJiZkZWZpbmUuYW1k
KXtkZWZpbmUoW10sZil9ZWxzZXt2YXIgZztpZih0eXBlb2Ygd2luZG93IT09InVuZGVmaW5lZCIp
e2c9d2luZG93fWVsc2UgaWYodHlwZW9mIGdsb2JhbCE9PSJ1bmRlZmluZWQiKXtnPWdsb2JhbH1l
bHNlIGlmKHR5cGVvZiBzZWxmIT09InVuZGVmaW5lZCIpe2c9c2VsZn1lbHNle2c9dGhpc31nLlJl
YWN0ID0gZigpfX0pKGZ1bmN0aW9uKCl7dmFyIGRlZmluZSxtb2R1bGUsZXhwb3J0cztyZXR1cm4g
KGZ1bmN0aW9uIGUodCxuLHIpe2Z1bmN0aW9uIHMobyx1KXtpZighbltvXSl7aWYoIXRbb10pe3Zh
ciBhPXR5cGVvZiByZXF1aXJlPT0iZnVuY3Rpb24iJiZyZXF1aXJlO2lmKCF1JiZhKXJldHVybiBh
KG8sITApO2lmKGkpcmV0dXJuIGkobywhMCk7dmFyIGY9bmV3IEVycm9yKCJDYW5ub3QgZmluZCBt
b2R1bGUgJyIrbysiJyIpO3Rocm93IGYuY29kZT0iTU9EVUxFX05PVF9GT1VORCIsZn12YXIgbD1u
W29dPXtleHBvcnRzOnt9fTt0W29dWzBdLmNhbGwobC5leHBvcnRzLGZ1bmN0aW9uKGUpe3ZhciBu
PXRbb11bMV1bZV07cmV0dXJuIHMobj9uOmUpfSxsLGwuZXhwb3J0cyxlLHQsbixyKX1yZXR1cm4g
bltvXS5leHBvcnRzfXZhciBpPXR5cGVvZiByZXF1aXJlPT0iZnVuY3Rpb24iJiZyZXF1aXJlO2Zv
cih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSh7MTpbZnVuY3Rpb24o
X2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQs
IEZhY2Vib29rLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc291
cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGlu
IHRoZQorICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJj
ZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50CisgKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBm
b3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAqCisgKi8K
KworJ3VzZSBzdHJpY3QnOworCit2YXIgRXhlY3V0aW9uRW52aXJvbm1lbnQgPSBfZGVyZXFfKDQ0
KTsKKworLyoqCisgKiBHZW5lcmF0ZSBhIG1hcHBpbmcgb2Ygc3RhbmRhcmQgdmVuZG9yIHByZWZp
eGVzIHVzaW5nIHRoZSBkZWZpbmVkIHN0eWxlIHByb3BlcnR5IGFuZCBldmVudCBuYW1lLgorICoK
KyAqIEBwYXJhbSB7c3RyaW5nfSBzdHlsZVByb3AKKyAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5h
bWUKKyAqIEByZXR1cm5zIHtvYmplY3R9CisgKi8KK2Z1bmN0aW9uIG1ha2VQcmVmaXhNYXAoc3R5
bGVQcm9wLCBldmVudE5hbWUpIHsKKyAgdmFyIHByZWZpeGVzID0ge307CisKKyAgcHJlZml4ZXNb
c3R5bGVQcm9wLnRvTG93ZXJDYXNlKCldID0gZXZlbnROYW1lLnRvTG93ZXJDYXNlKCk7CisgIHBy
ZWZpeGVzWydXZWJraXQnICsgc3R5bGVQcm9wXSA9ICd3ZWJraXQnICsgZXZlbnROYW1lOworICBw
cmVmaXhlc1snTW96JyArIHN0eWxlUHJvcF0gPSAnbW96JyArIGV2ZW50TmFtZTsKKyAgcHJlZml4
ZXNbJ21zJyArIHN0eWxlUHJvcF0gPSAnTVMnICsgZXZlbnROYW1lOworICBwcmVmaXhlc1snTycg
KyBzdHlsZVByb3BdID0gJ28nICsgZXZlbnROYW1lLnRvTG93ZXJDYXNlKCk7CisKKyAgcmV0dXJu
IHByZWZpeGVzOworfQorCisvKioKKyAqIEEgbGlzdCBvZiBldmVudCBuYW1lcyB0byBhIGNvbmZp
Z3VyYWJsZSBsaXN0IG9mIHZlbmRvciBwcmVmaXhlcy4KKyAqLwordmFyIHZlbmRvclByZWZpeGVz
ID0geworICBhbmltYXRpb25lbmQ6IG1ha2VQcmVmaXhNYXAoJ0FuaW1hdGlvbicsICdBbmltYXRp
b25FbmQnKSwKKyAgYW5pbWF0aW9uaXRlcmF0aW9uOiBtYWtlUHJlZml4TWFwKCdBbmltYXRpb24n
LCAnQW5pbWF0aW9uSXRlcmF0aW9uJyksCisgIGFuaW1hdGlvbnN0YXJ0OiBtYWtlUHJlZml4TWFw
KCdBbmltYXRpb24nLCAnQW5pbWF0aW9uU3RhcnQnKSwKKyAgdHJhbnNpdGlvbmVuZDogbWFrZVBy
ZWZpeE1hcCgnVHJhbnNpdGlvbicsICdUcmFuc2l0aW9uRW5kJykKK307CisKKy8qKgorICogRXZl
bnQgbmFtZXMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBkZXRlY3RlZCBhbmQgcHJlZml4ZWQgKGlm
IGFwcGxpY2FibGUpLgorICovCit2YXIgcHJlZml4ZWRFdmVudE5hbWVzID0ge307CisKKy8qKgor
ICogRWxlbWVudCB0byBjaGVjayBmb3IgcHJlZml4ZXMgb24uCisgKi8KK3ZhciBzdHlsZSA9IHt9
OworCisvKioKKyAqIEJvb3RzdHJhcCBpZiBhIERPTSBleGlzdHMuCisgKi8KK2lmIChFeGVjdXRp
b25FbnZpcm9ubWVudC5jYW5Vc2VET00pIHsKKyAgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCdkaXYnKS5zdHlsZTsKKworICAvLyBPbiBzb21lIHBsYXRmb3JtcywgaW4gcGFydGljdWxh
ciBzb21lIHJlbGVhc2VzIG9mIEFuZHJvaWQgNC54LAorICAvLyB0aGUgdW4tcHJlZml4ZWQgImFu
aW1hdGlvbiIgYW5kICJ0cmFuc2l0aW9uIiBwcm9wZXJ0aWVzIGFyZSBkZWZpbmVkIG9uIHRoZQor
ICAvLyBzdHlsZSBvYmplY3QgYnV0IHRoZSBldmVudHMgdGhhdCBmaXJlIHdpbGwgc3RpbGwgYmUg
cHJlZml4ZWQsIHNvIHdlIG5lZWQKKyAgLy8gdG8gY2hlY2sgaWYgdGhlIHVuLXByZWZpeGVkIGV2
ZW50cyBhcmUgdXNhYmxlLCBhbmQgaWYgbm90IHJlbW92ZSB0aGVtIGZyb20gdGhlIG1hcC4KKyAg
aWYgKCEoJ0FuaW1hdGlvbkV2ZW50JyBpbiB3aW5kb3cpKSB7CisgICAgZGVsZXRlIHZlbmRvclBy
ZWZpeGVzLmFuaW1hdGlvbmVuZC5hbmltYXRpb247CisgICAgZGVsZXRlIHZlbmRvclByZWZpeGVz
LmFuaW1hdGlvbml0ZXJhdGlvbi5hbmltYXRpb247CisgICAgZGVsZXRlIHZlbmRvclByZWZpeGVz
LmFuaW1hdGlvbnN0YXJ0LmFuaW1hdGlvbjsKKyAgfQorCisgIC8vIFNhbWUgYXMgYWJvdmUKKyAg
aWYgKCEoJ1RyYW5zaXRpb25FdmVudCcgaW4gd2luZG93KSkgeworICAgIGRlbGV0ZSB2ZW5kb3JQ
cmVmaXhlcy50cmFuc2l0aW9uZW5kLnRyYW5zaXRpb247CisgIH0KK30KKworLyoqCisgKiBBdHRl
bXB0cyB0byBkZXRlcm1pbmUgdGhlIGNvcnJlY3QgdmVuZG9yIHByZWZpeGVkIGV2ZW50IG5hbWUu
CisgKgorICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZQorICogQHJldHVybnMge3N0cmluZ30K
KyAqLworZnVuY3Rpb24gZ2V0VmVuZG9yUHJlZml4ZWRFdmVudE5hbWUoZXZlbnROYW1lKSB7Cisg
IGlmIChwcmVmaXhlZEV2ZW50TmFtZXNbZXZlbnROYW1lXSkgeworICAgIHJldHVybiBwcmVmaXhl
ZEV2ZW50TmFtZXNbZXZlbnROYW1lXTsKKyAgfSBlbHNlIGlmICghdmVuZG9yUHJlZml4ZXNbZXZl
bnROYW1lXSkgeworICAgIHJldHVybiBldmVudE5hbWU7CisgIH0KKworICB2YXIgcHJlZml4TWFw
ID0gdmVuZG9yUHJlZml4ZXNbZXZlbnROYW1lXTsKKworICBmb3IgKHZhciBzdHlsZVByb3AgaW4g
cHJlZml4TWFwKSB7CisgICAgaWYgKHByZWZpeE1hcC5oYXNPd25Qcm9wZXJ0eShzdHlsZVByb3Ap
ICYmIHN0eWxlUHJvcCBpbiBzdHlsZSkgeworICAgICAgcmV0dXJuIHByZWZpeGVkRXZlbnROYW1l
c1tldmVudE5hbWVdID0gcHJlZml4TWFwW3N0eWxlUHJvcF07CisgICAgfQorICB9CisKKyAgcmV0
dXJuICcnOworfQorCittb2R1bGUuZXhwb3J0cyA9IGdldFZlbmRvclByZWZpeGVkRXZlbnROYW1l
OworfSx7IjQ0Ijo0NH1dLDI6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpeworLyoq
CisgKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRo
ZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUg
cm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAor
ICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0
aGUgc2FtZSBkaXJlY3RvcnkuCisgKgorICogCisgKi8KKworJ3VzZSBzdHJpY3QnOworCisvKioK
KyAqIEVzY2FwZSBhbmQgd3JhcCBrZXkgc28gaXQgaXMgc2FmZSB0byB1c2UgYXMgYSByZWFjdGlk
CisgKgorICogQHBhcmFtIHtzdHJpbmd9IGtleSB0byBiZSBlc2NhcGVkLgorICogQHJldHVybiB7
c3RyaW5nfSB0aGUgZXNjYXBlZCBrZXkuCisgKi8KKworZnVuY3Rpb24gZXNjYXBlKGtleSkgewor
ICB2YXIgZXNjYXBlUmVnZXggPSAvWz06XS9nOworICB2YXIgZXNjYXBlckxvb2t1cCA9IHsKKyAg
ICAnPSc6ICc9MCcsCisgICAgJzonOiAnPTInCisgIH07CisgIHZhciBlc2NhcGVkU3RyaW5nID0g
KCcnICsga2V5KS5yZXBsYWNlKGVzY2FwZVJlZ2V4LCBmdW5jdGlvbiAobWF0Y2gpIHsKKyAgICBy
ZXR1cm4gZXNjYXBlckxvb2t1cFttYXRjaF07CisgIH0pOworCisgIHJldHVybiAnJCcgKyBlc2Nh
cGVkU3RyaW5nOworfQorCisvKioKKyAqIFVuZXNjYXBlIGFuZCB1bndyYXAga2V5IGZvciBodW1h
bi1yZWFkYWJsZSBkaXNwbGF5CisgKgorICogQHBhcmFtIHtzdHJpbmd9IGtleSB0byB1bmVzY2Fw
ZS4KKyAqIEByZXR1cm4ge3N0cmluZ30gdGhlIHVuZXNjYXBlZCBrZXkuCisgKi8KK2Z1bmN0aW9u
IHVuZXNjYXBlKGtleSkgeworICB2YXIgdW5lc2NhcGVSZWdleCA9IC8oPTB8PTIpL2c7CisgIHZh
ciB1bmVzY2FwZXJMb29rdXAgPSB7CisgICAgJz0wJzogJz0nLAorICAgICc9Mic6ICc6JworICB9
OworICB2YXIga2V5U3Vic3RyaW5nID0ga2V5WzBdID09PSAnLicgJiYga2V5WzFdID09PSAnJCcg
PyBrZXkuc3Vic3RyaW5nKDIpIDoga2V5LnN1YnN0cmluZygxKTsKKworICByZXR1cm4gKCcnICsg
a2V5U3Vic3RyaW5nKS5yZXBsYWNlKHVuZXNjYXBlUmVnZXgsIGZ1bmN0aW9uIChtYXRjaCkgewor
ICAgIHJldHVybiB1bmVzY2FwZXJMb29rdXBbbWF0Y2hdOworICB9KTsKK30KKwordmFyIEtleUVz
Y2FwZVV0aWxzID0geworICBlc2NhcGU6IGVzY2FwZSwKKyAgdW5lc2NhcGU6IHVuZXNjYXBlCit9
OworCittb2R1bGUuZXhwb3J0cyA9IEtleUVzY2FwZVV0aWxzOworfSx7fV0sMzpbZnVuY3Rpb24o
X2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQs
IEZhY2Vib29rLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc291
cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGlu
IHRoZQorICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJj
ZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50CisgKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBm
b3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAqCisgKi8K
KworJ3VzZSBzdHJpY3QnOworCit2YXIgUmVhY3RMaW5rID0gX2RlcmVxXygyMCk7Cit2YXIgUmVh
Y3RTdGF0ZVNldHRlcnMgPSBfZGVyZXFfKDI2KTsKKworLyoqCisgKiBBIHNpbXBsZSBtaXhpbiBh
cm91bmQgUmVhY3RMaW5rLmZvclN0YXRlKCkuCisgKiBTZWUgaHR0cHM6Ly9mYWNlYm9vay5naXRo
dWIuaW8vcmVhY3QvZG9jcy90d28td2F5LWJpbmRpbmctaGVscGVycy5odG1sCisgKi8KK3ZhciBM
aW5rZWRTdGF0ZU1peGluID0geworICAvKioKKyAgICogQ3JlYXRlIGEgUmVhY3RMaW5rIHRoYXQn
cyBsaW5rZWQgdG8gcGFydCBvZiB0aGlzIGNvbXBvbmVudCdzIHN0YXRlLiBUaGUKKyAgICogUmVh
Y3RMaW5rIHdpbGwgaGF2ZSB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGlzLnN0YXRlW2tleV0gYW5k
IHdpbGwgY2FsbAorICAgKiBzZXRTdGF0ZSgpIHdoZW4gYSBjaGFuZ2UgaXMgcmVxdWVzdGVkLgor
ICAgKgorICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IHN0YXRlIGtleSB0byB1cGRhdGUuCisgICAq
IEByZXR1cm4ge1JlYWN0TGlua30gUmVhY3RMaW5rIGluc3RhbmNlIGxpbmtpbmcgdG8gdGhlIHN0
YXRlLgorICAgKi8KKyAgbGlua1N0YXRlOiBmdW5jdGlvbiAoa2V5KSB7CisgICAgcmV0dXJuIG5l
dyBSZWFjdExpbmsodGhpcy5zdGF0ZVtrZXldLCBSZWFjdFN0YXRlU2V0dGVycy5jcmVhdGVTdGF0
ZUtleVNldHRlcih0aGlzLCBrZXkpKTsKKyAgfQorfTsKKworbW9kdWxlLmV4cG9ydHMgPSBMaW5r
ZWRTdGF0ZU1peGluOworfSx7IjIwIjoyMCwiMjYiOjI2fV0sNDpbZnVuY3Rpb24oX2RlcmVxXyxt
b2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29r
LCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc291cmNlIGNvZGUg
aXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZQorICog
TElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBB
biBhZGRpdGlvbmFsIGdyYW50CisgKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0
aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAqCisgKiAKKyAqLworCisn
dXNlIHN0cmljdCc7CisKK3ZhciBfcHJvZEludmFyaWFudCA9IF9kZXJlcV8oMzkpOworCit2YXIg
aW52YXJpYW50ID0gX2RlcmVxXyg0Nyk7CisKKy8qKgorICogU3RhdGljIHBvb2xlcnMuIFNldmVy
YWwgY3VzdG9tIHZlcnNpb25zIGZvciBlYWNoIHBvdGVudGlhbCBudW1iZXIgb2YKKyAqIGFyZ3Vt
ZW50cy4gQSBjb21wbGV0ZWx5IGdlbmVyaWMgcG9vbGVyIGlzIGVhc3kgdG8gaW1wbGVtZW50LCBi
dXQgd291bGQKKyAqIHJlcXVpcmUgYWNjZXNzaW5nIHRoZSBgYXJndW1lbnRzYCBvYmplY3QuIElu
IGVhY2ggb2YgdGhlc2UsIGB0aGlzYCByZWZlcnMgdG8KKyAqIHRoZSBDbGFzcyBpdHNlbGYsIG5v
dCBhbiBpbnN0YW5jZS4gSWYgYW55IG90aGVycyBhcmUgbmVlZGVkLCBzaW1wbHkgYWRkIHRoZW0K
KyAqIGhlcmUsIG9yIGluIHRoZWlyIG93biBmaWxlcy4KKyAqLwordmFyIG9uZUFyZ3VtZW50UG9v
bGVyID0gZnVuY3Rpb24gKGNvcHlGaWVsZHNGcm9tKSB7CisgIHZhciBLbGFzcyA9IHRoaXM7Cisg
IGlmIChLbGFzcy5pbnN0YW5jZVBvb2wubGVuZ3RoKSB7CisgICAgdmFyIGluc3RhbmNlID0gS2xh
c3MuaW5zdGFuY2VQb29sLnBvcCgpOworICAgIEtsYXNzLmNhbGwoaW5zdGFuY2UsIGNvcHlGaWVs
ZHNGcm9tKTsKKyAgICByZXR1cm4gaW5zdGFuY2U7CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIG5l
dyBLbGFzcyhjb3B5RmllbGRzRnJvbSk7CisgIH0KK307CisKK3ZhciB0d29Bcmd1bWVudFBvb2xl
ciA9IGZ1bmN0aW9uIChhMSwgYTIpIHsKKyAgdmFyIEtsYXNzID0gdGhpczsKKyAgaWYgKEtsYXNz
Lmluc3RhbmNlUG9vbC5sZW5ndGgpIHsKKyAgICB2YXIgaW5zdGFuY2UgPSBLbGFzcy5pbnN0YW5j
ZVBvb2wucG9wKCk7CisgICAgS2xhc3MuY2FsbChpbnN0YW5jZSwgYTEsIGEyKTsKKyAgICByZXR1
cm4gaW5zdGFuY2U7CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIG5ldyBLbGFzcyhhMSwgYTIpOwor
ICB9Cit9OworCit2YXIgdGhyZWVBcmd1bWVudFBvb2xlciA9IGZ1bmN0aW9uIChhMSwgYTIsIGEz
KSB7CisgIHZhciBLbGFzcyA9IHRoaXM7CisgIGlmIChLbGFzcy5pbnN0YW5jZVBvb2wubGVuZ3Ro
KSB7CisgICAgdmFyIGluc3RhbmNlID0gS2xhc3MuaW5zdGFuY2VQb29sLnBvcCgpOworICAgIEts
YXNzLmNhbGwoaW5zdGFuY2UsIGExLCBhMiwgYTMpOworICAgIHJldHVybiBpbnN0YW5jZTsKKyAg
fSBlbHNlIHsKKyAgICByZXR1cm4gbmV3IEtsYXNzKGExLCBhMiwgYTMpOworICB9Cit9OworCit2
YXIgZm91ckFyZ3VtZW50UG9vbGVyID0gZnVuY3Rpb24gKGExLCBhMiwgYTMsIGE0KSB7CisgIHZh
ciBLbGFzcyA9IHRoaXM7CisgIGlmIChLbGFzcy5pbnN0YW5jZVBvb2wubGVuZ3RoKSB7CisgICAg
dmFyIGluc3RhbmNlID0gS2xhc3MuaW5zdGFuY2VQb29sLnBvcCgpOworICAgIEtsYXNzLmNhbGwo
aW5zdGFuY2UsIGExLCBhMiwgYTMsIGE0KTsKKyAgICByZXR1cm4gaW5zdGFuY2U7CisgIH0gZWxz
ZSB7CisgICAgcmV0dXJuIG5ldyBLbGFzcyhhMSwgYTIsIGEzLCBhNCk7CisgIH0KK307CisKK3Zh
ciBzdGFuZGFyZFJlbGVhc2VyID0gZnVuY3Rpb24gKGluc3RhbmNlKSB7CisgIHZhciBLbGFzcyA9
IHRoaXM7CisgICEoaW5zdGFuY2UgaW5zdGFuY2VvZiBLbGFzcykgPyAiZGV2ZWxvcG1lbnQiICE9
PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdUcnlpbmcgdG8gcmVsZWFzZSBhbiBp
bnN0YW5jZSBpbnRvIGEgcG9vbCBvZiBhIGRpZmZlcmVudCB0eXBlLicpIDogX3Byb2RJbnZhcmlh
bnQoJzI1JykgOiB2b2lkIDA7CisgIGluc3RhbmNlLmRlc3RydWN0b3IoKTsKKyAgaWYgKEtsYXNz
Lmluc3RhbmNlUG9vbC5sZW5ndGggPCBLbGFzcy5wb29sU2l6ZSkgeworICAgIEtsYXNzLmluc3Rh
bmNlUG9vbC5wdXNoKGluc3RhbmNlKTsKKyAgfQorfTsKKwordmFyIERFRkFVTFRfUE9PTF9TSVpF
ID0gMTA7Cit2YXIgREVGQVVMVF9QT09MRVIgPSBvbmVBcmd1bWVudFBvb2xlcjsKKworLyoqCisg
KiBBdWdtZW50cyBgQ29weUNvbnN0cnVjdG9yYCB0byBiZSBhIHBvb2xhYmxlIGNsYXNzLCBhdWdt
ZW50aW5nIG9ubHkgdGhlIGNsYXNzCisgKiBpdHNlbGYgKHN0YXRpY2FsbHkpIG5vdCBhZGRpbmcg
YW55IHByb3RvdHlwaWNhbCBmaWVsZHMuIEFueSBDb3B5Q29uc3RydWN0b3IKKyAqIHlvdSBnaXZl
IHRoaXMgbWF5IGhhdmUgYSBgcG9vbFNpemVgIHByb3BlcnR5LCBhbmQgd2lsbCBsb29rIGZvciBh
CisgKiBwcm90b3R5cGljYWwgYGRlc3RydWN0b3JgIG9uIGluc3RhbmNlcy4KKyAqCisgKiBAcGFy
YW0ge0Z1bmN0aW9ufSBDb3B5Q29uc3RydWN0b3IgQ29uc3RydWN0b3IgdGhhdCBjYW4gYmUgdXNl
ZCB0byByZXNldC4KKyAqIEBwYXJhbSB7RnVuY3Rpb259IHBvb2xlciBDdXN0b21pemFibGUgcG9v
bGVyLgorICovCit2YXIgYWRkUG9vbGluZ1RvID0gZnVuY3Rpb24gKENvcHlDb25zdHJ1Y3Rvciwg
cG9vbGVyKSB7CisgIC8vIENhc3RpbmcgYXMgYW55IHNvIHRoYXQgZmxvdyBpZ25vcmVzIHRoZSBh
Y3R1YWwgaW1wbGVtZW50YXRpb24gYW5kIHRydXN0cworICAvLyBpdCB0byBtYXRjaCB0aGUgdHlw
ZSB3ZSBkZWNsYXJlZAorICB2YXIgTmV3S2xhc3MgPSBDb3B5Q29uc3RydWN0b3I7CisgIE5ld0ts
YXNzLmluc3RhbmNlUG9vbCA9IFtdOworICBOZXdLbGFzcy5nZXRQb29sZWQgPSBwb29sZXIgfHwg
REVGQVVMVF9QT09MRVI7CisgIGlmICghTmV3S2xhc3MucG9vbFNpemUpIHsKKyAgICBOZXdLbGFz
cy5wb29sU2l6ZSA9IERFRkFVTFRfUE9PTF9TSVpFOworICB9CisgIE5ld0tsYXNzLnJlbGVhc2Ug
PSBzdGFuZGFyZFJlbGVhc2VyOworICByZXR1cm4gTmV3S2xhc3M7Cit9OworCit2YXIgUG9vbGVk
Q2xhc3MgPSB7CisgIGFkZFBvb2xpbmdUbzogYWRkUG9vbGluZ1RvLAorICBvbmVBcmd1bWVudFBv
b2xlcjogb25lQXJndW1lbnRQb29sZXIsCisgIHR3b0FyZ3VtZW50UG9vbGVyOiB0d29Bcmd1bWVu
dFBvb2xlciwKKyAgdGhyZWVBcmd1bWVudFBvb2xlcjogdGhyZWVBcmd1bWVudFBvb2xlciwKKyAg
Zm91ckFyZ3VtZW50UG9vbGVyOiBmb3VyQXJndW1lbnRQb29sZXIKK307CisKK21vZHVsZS5leHBv
cnRzID0gUG9vbGVkQ2xhc3M7Cit9LHsiMzkiOjM5LCI0NyI6NDd9XSw1OltmdW5jdGlvbihfZGVy
ZXFfLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFj
ZWJvb2ssIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb3VyY2Ug
Y29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhl
CisgKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRy
ZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnQKKyAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5k
IGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorICoKKyAqLworCisn
dXNlIHN0cmljdCc7CisKK3ZhciBfYXNzaWduID0gX2RlcmVxXyg1MCk7CisKK3ZhciBSZWFjdENo
aWxkcmVuID0gX2RlcmVxXyg5KTsKK3ZhciBSZWFjdENvbXBvbmVudCA9IF9kZXJlcV8oMTEpOwor
dmFyIFJlYWN0UHVyZUNvbXBvbmVudCA9IF9kZXJlcV8oMjUpOwordmFyIFJlYWN0Q2xhc3MgPSBf
ZGVyZXFfKDEwKTsKK3ZhciBSZWFjdERPTUZhY3RvcmllcyA9IF9kZXJlcV8oMTUpOwordmFyIFJl
YWN0RWxlbWVudCA9IF9kZXJlcV8oMTYpOwordmFyIFJlYWN0UHJvcFR5cGVzID0gX2RlcmVxXygy
Myk7Cit2YXIgUmVhY3RWZXJzaW9uID0gX2RlcmVxXygzMCk7CisKK3ZhciBvbmx5Q2hpbGQgPSBf
ZGVyZXFfKDM4KTsKK3ZhciB3YXJuaW5nID0gX2RlcmVxXyg0OSk7CisKK3ZhciBjcmVhdGVFbGVt
ZW50ID0gUmVhY3RFbGVtZW50LmNyZWF0ZUVsZW1lbnQ7Cit2YXIgY3JlYXRlRmFjdG9yeSA9IFJl
YWN0RWxlbWVudC5jcmVhdGVGYWN0b3J5OwordmFyIGNsb25lRWxlbWVudCA9IFJlYWN0RWxlbWVu
dC5jbG9uZUVsZW1lbnQ7CisKK2lmICgiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicpIHsK
KyAgdmFyIGNhbkRlZmluZVByb3BlcnR5ID0gX2RlcmVxXygzMyk7CisgIHZhciBSZWFjdEVsZW1l
bnRWYWxpZGF0b3IgPSBfZGVyZXFfKDE4KTsKKyAgdmFyIGRpZFdhcm5Qcm9wVHlwZXNEZXByZWNh
dGVkID0gZmFsc2U7CisgIGNyZWF0ZUVsZW1lbnQgPSBSZWFjdEVsZW1lbnRWYWxpZGF0b3IuY3Jl
YXRlRWxlbWVudDsKKyAgY3JlYXRlRmFjdG9yeSA9IFJlYWN0RWxlbWVudFZhbGlkYXRvci5jcmVh
dGVGYWN0b3J5OworICBjbG9uZUVsZW1lbnQgPSBSZWFjdEVsZW1lbnRWYWxpZGF0b3IuY2xvbmVF
bGVtZW50OworfQorCit2YXIgX19zcHJlYWQgPSBfYXNzaWduOworCitpZiAoImRldmVsb3BtZW50
IiAhPT0gJ3Byb2R1Y3Rpb24nKSB7CisgIHZhciB3YXJuZWQgPSBmYWxzZTsKKyAgX19zcHJlYWQg
PSBmdW5jdGlvbiAoKSB7CisgICAgImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gd2Fy
bmluZyh3YXJuZWQsICdSZWFjdC5fX3NwcmVhZCBpcyBkZXByZWNhdGVkIGFuZCBzaG91bGQgbm90
IGJlIHVzZWQuIFVzZSAnICsgJ09iamVjdC5hc3NpZ24gZGlyZWN0bHkgb3IgYW5vdGhlciBoZWxw
ZXIgZnVuY3Rpb24gd2l0aCBzaW1pbGFyICcgKyAnc2VtYW50aWNzLiBZb3UgbWF5IGJlIHNlZWlu
ZyB0aGlzIHdhcm5pbmcgZHVlIHRvIHlvdXIgY29tcGlsZXIuICcgKyAnU2VlIGh0dHBzOi8vZmIu
bWUvcmVhY3Qtc3ByZWFkLWRlcHJlY2F0aW9uIGZvciBtb3JlIGRldGFpbHMuJykgOiB2b2lkIDA7
CisgICAgd2FybmVkID0gdHJ1ZTsKKyAgICByZXR1cm4gX2Fzc2lnbi5hcHBseShudWxsLCBhcmd1
bWVudHMpOworICB9OworfQorCit2YXIgUmVhY3QgPSB7CisKKyAgLy8gTW9kZXJuCisKKyAgQ2hp
bGRyZW46IHsKKyAgICBtYXA6IFJlYWN0Q2hpbGRyZW4ubWFwLAorICAgIGZvckVhY2g6IFJlYWN0
Q2hpbGRyZW4uZm9yRWFjaCwKKyAgICBjb3VudDogUmVhY3RDaGlsZHJlbi5jb3VudCwKKyAgICB0
b0FycmF5OiBSZWFjdENoaWxkcmVuLnRvQXJyYXksCisgICAgb25seTogb25seUNoaWxkCisgIH0s
CisKKyAgQ29tcG9uZW50OiBSZWFjdENvbXBvbmVudCwKKyAgUHVyZUNvbXBvbmVudDogUmVhY3RQ
dXJlQ29tcG9uZW50LAorCisgIGNyZWF0ZUVsZW1lbnQ6IGNyZWF0ZUVsZW1lbnQsCisgIGNsb25l
RWxlbWVudDogY2xvbmVFbGVtZW50LAorICBpc1ZhbGlkRWxlbWVudDogUmVhY3RFbGVtZW50Lmlz
VmFsaWRFbGVtZW50LAorCisgIC8vIENsYXNzaWMKKworICBQcm9wVHlwZXM6IFJlYWN0UHJvcFR5
cGVzLAorICBjcmVhdGVDbGFzczogUmVhY3RDbGFzcy5jcmVhdGVDbGFzcywKKyAgY3JlYXRlRmFj
dG9yeTogY3JlYXRlRmFjdG9yeSwKKyAgY3JlYXRlTWl4aW46IGZ1bmN0aW9uIChtaXhpbikgewor
ICAgIC8vIEN1cnJlbnRseSBhIG5vb3AuIFdpbGwgYmUgdXNlZCB0byB2YWxpZGF0ZSBhbmQgdHJh
Y2UgbWl4aW5zLgorICAgIHJldHVybiBtaXhpbjsKKyAgfSwKKworICAvLyBUaGlzIGxvb2tzIERP
TSBzcGVjaWZpYyBidXQgdGhlc2UgYXJlIGFjdHVhbGx5IGlzb21vcnBoaWMgaGVscGVycworICAv
LyBzaW5jZSB0aGV5IGFyZSBqdXN0IGdlbmVyYXRpbmcgRE9NIHN0cmluZ3MuCisgIERPTTogUmVh
Y3RET01GYWN0b3JpZXMsCisKKyAgdmVyc2lvbjogUmVhY3RWZXJzaW9uLAorCisgIC8vIERlcHJl
Y2F0ZWQgaG9vayBmb3IgSlNYIHNwcmVhZCwgZG9uJ3QgdXNlIHRoaXMgZm9yIGFueXRoaW5nLgor
ICBfX3NwcmVhZDogX19zcHJlYWQKK307CisKKy8vIFRPRE86IEZpeCB0ZXN0cyBzbyB0aGF0IHRo
aXMgZGVwcmVjYXRpb24gd2FybmluZyBkb2Vzbid0IGNhdXNlIGZhaWx1cmVzLgoraWYgKCJkZXZl
bG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJykgeworICBpZiAoY2FuRGVmaW5lUHJvcGVydHkpIHsK
KyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUmVhY3QsICdQcm9wVHlwZXMnLCB7CisgICAgICBn
ZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24n
ID8gd2FybmluZyhkaWRXYXJuUHJvcFR5cGVzRGVwcmVjYXRlZCwgJ0FjY2Vzc2luZyBQcm9wVHlw
ZXMgdmlhIHRoZSBtYWluIFJlYWN0IHBhY2thZ2UgaXMgZGVwcmVjYXRlZC4gVXNlICcgKyAndGhl
IHByb3AtdHlwZXMgcGFja2FnZSBmcm9tIG5wbSBpbnN0ZWFkLicpIDogdm9pZCAwOworICAgICAg
ICBkaWRXYXJuUHJvcFR5cGVzRGVwcmVjYXRlZCA9IHRydWU7CisgICAgICAgIHJldHVybiBSZWFj
dFByb3BUeXBlczsKKyAgICAgIH0KKyAgICB9KTsKKyAgfQorfQorCittb2R1bGUuZXhwb3J0cyA9
IFJlYWN0OworfSx7IjEwIjoxMCwiMTEiOjExLCIxNSI6MTUsIjE2IjoxNiwiMTgiOjE4LCIyMyI6
MjMsIjI1IjoyNSwiMzAiOjMwLCIzMyI6MzMsIjM4IjozOCwiNDkiOjQ5LCI1MCI6NTAsIjkiOjl9
XSw2OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0
IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxp
Y2Vuc2UgZm91bmQgaW4gdGhlCisgKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5
IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnQKKyAqIG9mIHBhdGVudCBy
aWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0
b3J5LgorICoKKyAqLworCisndXNlIHN0cmljdCc7CisKK3ZhciBSZWFjdERPTTsKKworZnVuY3Rp
b24gZ2V0UmVhY3RET00oKSB7CisgIGlmICghUmVhY3RET00pIHsKKyAgICAvLyBUaGlzIGlzIHNh
ZmUgdG8gdXNlIGJlY2F1c2UgY3VycmVudCBtb2R1bGUgb25seSBleGlzdHMgaW4gdGhlIGFkZG9u
cyBidWlsZDoKKyAgICB2YXIgUmVhY3RXaXRoQWRkb25zVU1ERW50cnkgPSBfZGVyZXFfKDMyKTsK
KyAgICAvLyBUaGlzIGlzIGluamVjdGVkIGJ5IHRoZSBSZWFjdERPTSBVTUQgYnVpbGQ6CisgICAg
UmVhY3RET00gPSBSZWFjdFdpdGhBZGRvbnNVTURFbnRyeS5fX1NFQ1JFVF9JTkpFQ1RFRF9SRUFD
VF9ET01fRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRDsKKyAgfQorICByZXR1cm4gUmVh
Y3RET007Cit9CisKK2V4cG9ydHMuZ2V0UmVhY3RET00gPSBnZXRSZWFjdERPTTsKKworaWYgKCJk
ZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJykgeworICBleHBvcnRzLmdldFJlYWN0UGVyZiA9
IGZ1bmN0aW9uICgpIHsKKyAgICByZXR1cm4gZ2V0UmVhY3RET00oKS5fX1NFQ1JFVF9JTlRFUk5B
TFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRC5SZWFjdFBlcmY7CisgIH07CisKKyAg
ZXhwb3J0cy5nZXRSZWFjdFRlc3RVdGlscyA9IGZ1bmN0aW9uICgpIHsKKyAgICByZXR1cm4gZ2V0
UmVhY3RET00oKS5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9G
SVJFRC5SZWFjdFRlc3RVdGlsczsKKyAgfTsKK30KK30seyIzMiI6MzJ9XSw3OltmdW5jdGlvbihf
ZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwg
RmFjZWJvb2ssIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb3Vy
Y2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4g
dGhlCisgKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNl
IHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnQKKyAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZv
dW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorICoKKyAqLwor
CisndXNlIHN0cmljdCc7CisKK3ZhciBfYXNzaWduID0gX2RlcmVxXyg1MCk7CisKK2Z1bmN0aW9u
IF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2Ug
aW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNh
bGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIik7IH0gfQorCitmdW5jdGlvbiBfcG9zc2libGVDb25z
dHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJl
bmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBi
ZWVuIGNhbGxlZCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gIm9iamVjdCIg
fHwgdHlwZW9mIGNhbGwgPT09ICJmdW5jdGlvbiIpID8gY2FsbCA6IHNlbGY7IH0KKworZnVuY3Rp
b24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFz
cyAhPT0gImZ1bmN0aW9uIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBl
RXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9u
LCBub3QgIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmpl
Y3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0
b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUs
IGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3Rv
dHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1
YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH0KKwordmFyIFJlYWN0ID0gX2RlcmVxXyg1
KTsKK3ZhciBwcm9wVHlwZXNGYWN0b3J5ID0gX2RlcmVxXyg1Mik7Cit2YXIgUHJvcFR5cGVzID0g
cHJvcFR5cGVzRmFjdG9yeShSZWFjdC5pc1ZhbGlkRWxlbWVudCk7CisKK3ZhciBSZWFjdFRyYW5z
aXRpb25Hcm91cCA9IF9kZXJlcV8oMjkpOwordmFyIFJlYWN0Q1NTVHJhbnNpdGlvbkdyb3VwQ2hp
bGQgPSBfZGVyZXFfKDgpOworCitmdW5jdGlvbiBjcmVhdGVUcmFuc2l0aW9uVGltZW91dFByb3BW
YWxpZGF0b3IodHJhbnNpdGlvblR5cGUpIHsKKyAgdmFyIHRpbWVvdXRQcm9wTmFtZSA9ICd0cmFu
c2l0aW9uJyArIHRyYW5zaXRpb25UeXBlICsgJ1RpbWVvdXQnOworICB2YXIgZW5hYmxlZFByb3BO
YW1lID0gJ3RyYW5zaXRpb24nICsgdHJhbnNpdGlvblR5cGU7CisKKyAgcmV0dXJuIGZ1bmN0aW9u
IChwcm9wcykgeworICAgIC8vIElmIHRoZSB0cmFuc2l0aW9uIGlzIGVuYWJsZWQKKyAgICBpZiAo
cHJvcHNbZW5hYmxlZFByb3BOYW1lXSkgeworICAgICAgLy8gSWYgbm8gdGltZW91dCBkdXJhdGlv
biBpcyBwcm92aWRlZAorICAgICAgaWYgKHByb3BzW3RpbWVvdXRQcm9wTmFtZV0gPT0gbnVsbCkg
eworICAgICAgICByZXR1cm4gbmV3IEVycm9yKHRpbWVvdXRQcm9wTmFtZSArICcgd2FzblwndCBz
dXBwbGllZCB0byBSZWFjdENTU1RyYW5zaXRpb25Hcm91cDogJyArICd0aGlzIGNhbiBjYXVzZSB1
bnJlbGlhYmxlIGFuaW1hdGlvbnMgYW5kIHdvblwndCBiZSBzdXBwb3J0ZWQgaW4gJyArICdhIGZ1
dHVyZSB2ZXJzaW9uIG9mIFJlYWN0LiBTZWUgJyArICdodHRwczovL2ZiLm1lL3JlYWN0LWFuaW1h
dGlvbi10cmFuc2l0aW9uLWdyb3VwLXRpbWVvdXQgZm9yIG1vcmUgJyArICdpbmZvcm1hdGlvbi4n
KTsKKworICAgICAgICAvLyBJZiB0aGUgZHVyYXRpb24gaXNuJ3QgYSBudW1iZXIKKyAgICAgIH0g
ZWxzZSBpZiAodHlwZW9mIHByb3BzW3RpbWVvdXRQcm9wTmFtZV0gIT09ICdudW1iZXInKSB7Cisg
ICAgICAgIHJldHVybiBuZXcgRXJyb3IodGltZW91dFByb3BOYW1lICsgJyBtdXN0IGJlIGEgbnVt
YmVyIChpbiBtaWxsaXNlY29uZHMpJyk7CisgICAgICB9CisgICAgfQorICB9OworfQorCisvKioK
KyAqIEFuIGVhc3kgd2F5IHRvIHBlcmZvcm0gQ1NTIHRyYW5zaXRpb25zIGFuZCBhbmltYXRpb25z
IHdoZW4gYSBSZWFjdCBjb21wb25lbnQKKyAqIGVudGVycyBvciBsZWF2ZXMgdGhlIERPTS4KKyAq
IFNlZSBodHRwczovL2ZhY2Vib29rLmdpdGh1Yi5pby9yZWFjdC9kb2NzL2FuaW1hdGlvbi5odG1s
I2hpZ2gtbGV2ZWwtYXBpLXJlYWN0Y3NzdHJhbnNpdGlvbmdyb3VwCisgKi8KKwordmFyIFJlYWN0
Q1NTVHJhbnNpdGlvbkdyb3VwID0gZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHsKKyAgX2lu
aGVyaXRzKFJlYWN0Q1NTVHJhbnNpdGlvbkdyb3VwLCBfUmVhY3QkQ29tcG9uZW50KTsKKworICBm
dW5jdGlvbiBSZWFjdENTU1RyYW5zaXRpb25Hcm91cCgpIHsKKyAgICB2YXIgX3RlbXAsIF90aGlz
LCBfcmV0OworCisgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFJlYWN0Q1NTVHJhbnNpdGlvbkdy
b3VwKTsKKworICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJy
YXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7CisgICAgICBhcmdzW19r
ZXldID0gYXJndW1lbnRzW19rZXldOworICAgIH0KKworICAgIHJldHVybiBfcmV0ID0gKF90ZW1w
ID0gKF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX1JlYWN0JENvbXBv
bmVudC5jYWxsLmFwcGx5KF9SZWFjdCRDb21wb25lbnQsIFt0aGlzXS5jb25jYXQoYXJncykpKSwg
X3RoaXMpLCBfdGhpcy5fd3JhcENoaWxkID0gZnVuY3Rpb24gKGNoaWxkKSB7CisgICAgICAvLyBX
ZSBuZWVkIHRvIHByb3ZpZGUgdGhpcyBjaGlsZEZhY3Rvcnkgc28gdGhhdAorICAgICAgLy8gUmVh
Y3RDU1NUcmFuc2l0aW9uR3JvdXBDaGlsZCBjYW4gcmVjZWl2ZSB1cGRhdGVzIHRvIG5hbWUsIGVu
dGVyLCBhbmQKKyAgICAgIC8vIGxlYXZlIHdoaWxlIGl0IGlzIGxlYXZpbmcuCisgICAgICByZXR1
cm4gUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdENTU1RyYW5zaXRpb25Hcm91cENoaWxkLCB7Cisg
ICAgICAgIG5hbWU6IF90aGlzLnByb3BzLnRyYW5zaXRpb25OYW1lLAorICAgICAgICBhcHBlYXI6
IF90aGlzLnByb3BzLnRyYW5zaXRpb25BcHBlYXIsCisgICAgICAgIGVudGVyOiBfdGhpcy5wcm9w
cy50cmFuc2l0aW9uRW50ZXIsCisgICAgICAgIGxlYXZlOiBfdGhpcy5wcm9wcy50cmFuc2l0aW9u
TGVhdmUsCisgICAgICAgIGFwcGVhclRpbWVvdXQ6IF90aGlzLnByb3BzLnRyYW5zaXRpb25BcHBl
YXJUaW1lb3V0LAorICAgICAgICBlbnRlclRpbWVvdXQ6IF90aGlzLnByb3BzLnRyYW5zaXRpb25F
bnRlclRpbWVvdXQsCisgICAgICAgIGxlYXZlVGltZW91dDogX3RoaXMucHJvcHMudHJhbnNpdGlv
bkxlYXZlVGltZW91dAorICAgICAgfSwgY2hpbGQpOworICAgIH0sIF90ZW1wKSwgX3Bvc3NpYmxl
Q29uc3RydWN0b3JSZXR1cm4oX3RoaXMsIF9yZXQpOworICB9CisKKyAgUmVhY3RDU1NUcmFuc2l0
aW9uR3JvdXAucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHsKKyAgICByZXR1
cm4gUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdFRyYW5zaXRpb25Hcm91cCwgX2Fzc2lnbih7fSwg
dGhpcy5wcm9wcywgeyBjaGlsZEZhY3Rvcnk6IHRoaXMuX3dyYXBDaGlsZCB9KSk7CisgIH07CisK
KyAgcmV0dXJuIFJlYWN0Q1NTVHJhbnNpdGlvbkdyb3VwOworfShSZWFjdC5Db21wb25lbnQpOwor
CitSZWFjdENTU1RyYW5zaXRpb25Hcm91cC5kaXNwbGF5TmFtZSA9ICdSZWFjdENTU1RyYW5zaXRp
b25Hcm91cCc7CitSZWFjdENTU1RyYW5zaXRpb25Hcm91cC5wcm9wVHlwZXMgPSB7CisgIHRyYW5z
aXRpb25OYW1lOiBSZWFjdENTU1RyYW5zaXRpb25Hcm91cENoaWxkLnByb3BUeXBlcy5uYW1lLAor
CisgIHRyYW5zaXRpb25BcHBlYXI6IFByb3BUeXBlcy5ib29sLAorICB0cmFuc2l0aW9uRW50ZXI6
IFByb3BUeXBlcy5ib29sLAorICB0cmFuc2l0aW9uTGVhdmU6IFByb3BUeXBlcy5ib29sLAorICB0
cmFuc2l0aW9uQXBwZWFyVGltZW91dDogY3JlYXRlVHJhbnNpdGlvblRpbWVvdXRQcm9wVmFsaWRh
dG9yKCdBcHBlYXInKSwKKyAgdHJhbnNpdGlvbkVudGVyVGltZW91dDogY3JlYXRlVHJhbnNpdGlv
blRpbWVvdXRQcm9wVmFsaWRhdG9yKCdFbnRlcicpLAorICB0cmFuc2l0aW9uTGVhdmVUaW1lb3V0
OiBjcmVhdGVUcmFuc2l0aW9uVGltZW91dFByb3BWYWxpZGF0b3IoJ0xlYXZlJykKK307CitSZWFj
dENTU1RyYW5zaXRpb25Hcm91cC5kZWZhdWx0UHJvcHMgPSB7CisgIHRyYW5zaXRpb25BcHBlYXI6
IGZhbHNlLAorICB0cmFuc2l0aW9uRW50ZXI6IHRydWUsCisgIHRyYW5zaXRpb25MZWF2ZTogdHJ1
ZQorfTsKKworCittb2R1bGUuZXhwb3J0cyA9IFJlYWN0Q1NTVHJhbnNpdGlvbkdyb3VwOworfSx7
IjI5IjoyOSwiNSI6NSwiNTAiOjUwLCI1MiI6NTIsIjgiOjh9XSw4OltmdW5jdGlvbihfZGVyZXFf
LG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJv
b2ssIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb3VyY2UgY29k
ZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlCisg
KiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUu
IEFuIGFkZGl0aW9uYWwgZ3JhbnQKKyAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGlu
IHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorICoKKyAqLworCisndXNl
IHN0cmljdCc7CisKK2Z1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0
b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3
IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIik7IH0gfQorCitm
dW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2Vs
ZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlz
ZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBl
b2YgY2FsbCA9PT0gIm9iamVjdCIgfHwgdHlwZW9mIGNhbGwgPT09ICJmdW5jdGlvbiIpID8gY2Fs
bCA6IHNlbGY7IH0KKworZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7
IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gImZ1bmN0aW9uIiAmJiBzdXBlckNsYXNzICE9PSBu
dWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIg
YmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJD
bGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5w
cm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBm
YWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJD
bGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNs
YXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH0KKwor
dmFyIFJlYWN0ID0gX2RlcmVxXyg1KTsKK3ZhciBSZWFjdEFkZG9uc0RPTURlcGVuZGVuY2llcyA9
IF9kZXJlcV8oNik7CisKK3ZhciBwcm9wVHlwZXNGYWN0b3J5ID0gX2RlcmVxXyg1Mik7Cit2YXIg
UHJvcFR5cGVzID0gcHJvcFR5cGVzRmFjdG9yeShSZWFjdC5pc1ZhbGlkRWxlbWVudCk7CisKK3Zh
ciBDU1NDb3JlID0gX2RlcmVxXyg0Myk7Cit2YXIgUmVhY3RUcmFuc2l0aW9uRXZlbnRzID0gX2Rl
cmVxXygyOCk7CisKK3ZhciBvbmx5Q2hpbGQgPSBfZGVyZXFfKDM4KTsKKwordmFyIFRJQ0sgPSAx
NzsKKwordmFyIFJlYWN0Q1NTVHJhbnNpdGlvbkdyb3VwQ2hpbGQgPSBmdW5jdGlvbiAoX1JlYWN0
JENvbXBvbmVudCkgeworICBfaW5oZXJpdHMoUmVhY3RDU1NUcmFuc2l0aW9uR3JvdXBDaGlsZCwg
X1JlYWN0JENvbXBvbmVudCk7CisKKyAgZnVuY3Rpb24gUmVhY3RDU1NUcmFuc2l0aW9uR3JvdXBD
aGlsZCgpIHsKKyAgICB2YXIgX3RlbXAsIF90aGlzLCBfcmV0OworCisgICAgX2NsYXNzQ2FsbENo
ZWNrKHRoaXMsIFJlYWN0Q1NTVHJhbnNpdGlvbkdyb3VwQ2hpbGQpOworCisgICAgZm9yICh2YXIg
X2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9r
ZXkgPCBfbGVuOyBfa2V5KyspIHsKKyAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07
CisgICAgfQorCisgICAgcmV0dXJuIF9yZXQgPSAoX3RlbXAgPSAoX3RoaXMgPSBfcG9zc2libGVD
b25zdHJ1Y3RvclJldHVybih0aGlzLCBfUmVhY3QkQ29tcG9uZW50LmNhbGwuYXBwbHkoX1JlYWN0
JENvbXBvbmVudCwgW3RoaXNdLmNvbmNhdChhcmdzKSkpLCBfdGhpcyksIF90aGlzLl9pc01vdW50
ZWQgPSBmYWxzZSwgX3RoaXMudHJhbnNpdGlvbiA9IGZ1bmN0aW9uIChhbmltYXRpb25UeXBlLCBm
aW5pc2hDYWxsYmFjaywgdXNlclNwZWNpZmllZERlbGF5KSB7CisgICAgICB2YXIgbm9kZSA9IFJl
YWN0QWRkb25zRE9NRGVwZW5kZW5jaWVzLmdldFJlYWN0RE9NKCkuZmluZERPTU5vZGUoX3RoaXMp
OworCisgICAgICBpZiAoIW5vZGUpIHsKKyAgICAgICAgaWYgKGZpbmlzaENhbGxiYWNrKSB7Cisg
ICAgICAgICAgZmluaXNoQ2FsbGJhY2soKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47Cisg
ICAgICB9CisKKyAgICAgIHZhciBjbGFzc05hbWUgPSBfdGhpcy5wcm9wcy5uYW1lW2FuaW1hdGlv
blR5cGVdIHx8IF90aGlzLnByb3BzLm5hbWUgKyAnLScgKyBhbmltYXRpb25UeXBlOworICAgICAg
dmFyIGFjdGl2ZUNsYXNzTmFtZSA9IF90aGlzLnByb3BzLm5hbWVbYW5pbWF0aW9uVHlwZSArICdB
Y3RpdmUnXSB8fCBjbGFzc05hbWUgKyAnLWFjdGl2ZSc7CisgICAgICB2YXIgdGltZW91dCA9IG51
bGw7CisKKyAgICAgIHZhciBlbmRMaXN0ZW5lciA9IGZ1bmN0aW9uIChlKSB7CisgICAgICAgIGlm
IChlICYmIGUudGFyZ2V0ICE9PSBub2RlKSB7CisgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpOworCisgICAgICAgIENTU0NvcmUucmVt
b3ZlQ2xhc3Mobm9kZSwgY2xhc3NOYW1lKTsKKyAgICAgICAgQ1NTQ29yZS5yZW1vdmVDbGFzcyhu
b2RlLCBhY3RpdmVDbGFzc05hbWUpOworCisgICAgICAgIFJlYWN0VHJhbnNpdGlvbkV2ZW50cy5y
ZW1vdmVFbmRFdmVudExpc3RlbmVyKG5vZGUsIGVuZExpc3RlbmVyKTsKKworICAgICAgICAvLyBV
c3VhbGx5IHRoaXMgb3B0aW9uYWwgY2FsbGJhY2sgaXMgdXNlZCBmb3IgaW5mb3JtaW5nIGFuIG93
bmVyIG9mCisgICAgICAgIC8vIGEgbGVhdmUgYW5pbWF0aW9uIGFuZCB0ZWxsaW5nIGl0IHRvIHJl
bW92ZSB0aGUgY2hpbGQuCisgICAgICAgIGlmIChmaW5pc2hDYWxsYmFjaykgeworICAgICAgICAg
IGZpbmlzaENhbGxiYWNrKCk7CisgICAgICAgIH0KKyAgICAgIH07CisKKyAgICAgIENTU0NvcmUu
YWRkQ2xhc3Mobm9kZSwgY2xhc3NOYW1lKTsKKworICAgICAgLy8gTmVlZCB0byBkbyB0aGlzIHRv
IGFjdHVhbGx5IHRyaWdnZXIgYSB0cmFuc2l0aW9uLgorICAgICAgX3RoaXMucXVldWVDbGFzc0Fu
ZE5vZGUoYWN0aXZlQ2xhc3NOYW1lLCBub2RlKTsKKworICAgICAgLy8gSWYgdGhlIHVzZXIgc3Bl
Y2lmaWVkIGEgdGltZW91dCBkZWxheS4KKyAgICAgIGlmICh1c2VyU3BlY2lmaWVkRGVsYXkpIHsK
KyAgICAgICAgLy8gQ2xlYW4tdXAgdGhlIGFuaW1hdGlvbiBhZnRlciB0aGUgc3BlY2lmaWVkIGRl
bGF5CisgICAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGVuZExpc3RlbmVyLCB1c2VyU3BlY2lm
aWVkRGVsYXkpOworICAgICAgICBfdGhpcy50cmFuc2l0aW9uVGltZW91dHMucHVzaCh0aW1lb3V0
KTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIC8vIERFUFJFQ0FURUQ6IHRoaXMgbGlzdGVuZXIg
d2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHZlcnNpb24gb2YgcmVhY3QKKyAgICAgICAgUmVh
Y3RUcmFuc2l0aW9uRXZlbnRzLmFkZEVuZEV2ZW50TGlzdGVuZXIobm9kZSwgZW5kTGlzdGVuZXIp
OworICAgICAgfQorICAgIH0sIF90aGlzLnF1ZXVlQ2xhc3NBbmROb2RlID0gZnVuY3Rpb24gKGNs
YXNzTmFtZSwgbm9kZSkgeworICAgICAgX3RoaXMuY2xhc3NOYW1lQW5kTm9kZVF1ZXVlLnB1c2go
eworICAgICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZSwKKyAgICAgICAgbm9kZTogbm9kZQorICAg
ICAgfSk7CisKKyAgICAgIGlmICghX3RoaXMudGltZW91dCkgeworICAgICAgICBfdGhpcy50aW1l
b3V0ID0gc2V0VGltZW91dChfdGhpcy5mbHVzaENsYXNzTmFtZUFuZE5vZGVRdWV1ZSwgVElDSyk7
CisgICAgICB9CisgICAgfSwgX3RoaXMuZmx1c2hDbGFzc05hbWVBbmROb2RlUXVldWUgPSBmdW5j
dGlvbiAoKSB7CisgICAgICBpZiAoX3RoaXMuX2lzTW91bnRlZCkgeworICAgICAgICBfdGhpcy5j
bGFzc05hbWVBbmROb2RlUXVldWUuZm9yRWFjaChmdW5jdGlvbiAob2JqKSB7CisgICAgICAgICAg
Q1NTQ29yZS5hZGRDbGFzcyhvYmoubm9kZSwgb2JqLmNsYXNzTmFtZSk7CisgICAgICAgIH0pOwor
ICAgICAgfQorICAgICAgX3RoaXMuY2xhc3NOYW1lQW5kTm9kZVF1ZXVlLmxlbmd0aCA9IDA7Cisg
ICAgICBfdGhpcy50aW1lb3V0ID0gbnVsbDsKKyAgICB9LCBfdGhpcy5jb21wb25lbnRXaWxsQXBw
ZWFyID0gZnVuY3Rpb24gKGRvbmUpIHsKKyAgICAgIGlmIChfdGhpcy5wcm9wcy5hcHBlYXIpIHsK
KyAgICAgICAgX3RoaXMudHJhbnNpdGlvbignYXBwZWFyJywgZG9uZSwgX3RoaXMucHJvcHMuYXBw
ZWFyVGltZW91dCk7CisgICAgICB9IGVsc2UgeworICAgICAgICBkb25lKCk7CisgICAgICB9Cisg
ICAgfSwgX3RoaXMuY29tcG9uZW50V2lsbEVudGVyID0gZnVuY3Rpb24gKGRvbmUpIHsKKyAgICAg
IGlmIChfdGhpcy5wcm9wcy5lbnRlcikgeworICAgICAgICBfdGhpcy50cmFuc2l0aW9uKCdlbnRl
cicsIGRvbmUsIF90aGlzLnByb3BzLmVudGVyVGltZW91dCk7CisgICAgICB9IGVsc2UgeworICAg
ICAgICBkb25lKCk7CisgICAgICB9CisgICAgfSwgX3RoaXMuY29tcG9uZW50V2lsbExlYXZlID0g
ZnVuY3Rpb24gKGRvbmUpIHsKKyAgICAgIGlmIChfdGhpcy5wcm9wcy5sZWF2ZSkgeworICAgICAg
ICBfdGhpcy50cmFuc2l0aW9uKCdsZWF2ZScsIGRvbmUsIF90aGlzLnByb3BzLmxlYXZlVGltZW91
dCk7CisgICAgICB9IGVsc2UgeworICAgICAgICBkb25lKCk7CisgICAgICB9CisgICAgfSwgX3Rl
bXApLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihfdGhpcywgX3JldCk7CisgIH0KKworICBS
ZWFjdENTU1RyYW5zaXRpb25Hcm91cENoaWxkLnByb3RvdHlwZS5jb21wb25lbnRXaWxsTW91bnQg
PSBmdW5jdGlvbiBjb21wb25lbnRXaWxsTW91bnQoKSB7CisgICAgdGhpcy5jbGFzc05hbWVBbmRO
b2RlUXVldWUgPSBbXTsKKyAgICB0aGlzLnRyYW5zaXRpb25UaW1lb3V0cyA9IFtdOworICB9Owor
CisgIFJlYWN0Q1NTVHJhbnNpdGlvbkdyb3VwQ2hpbGQucHJvdG90eXBlLmNvbXBvbmVudERpZE1v
dW50ID0gZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7CisgICAgdGhpcy5faXNNb3VudGVk
ID0gdHJ1ZTsKKyAgfTsKKworICBSZWFjdENTU1RyYW5zaXRpb25Hcm91cENoaWxkLnByb3RvdHlw
ZS5jb21wb25lbnRXaWxsVW5tb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkg
eworICAgIHRoaXMuX2lzTW91bnRlZCA9IGZhbHNlOworCisgICAgaWYgKHRoaXMudGltZW91dCkg
eworICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCk7CisgICAgfQorICAgIHRoaXMudHJh
bnNpdGlvblRpbWVvdXRzLmZvckVhY2goZnVuY3Rpb24gKHRpbWVvdXQpIHsKKyAgICAgIGNsZWFy
VGltZW91dCh0aW1lb3V0KTsKKyAgICB9KTsKKworICAgIHRoaXMuY2xhc3NOYW1lQW5kTm9kZVF1
ZXVlLmxlbmd0aCA9IDA7CisgIH07CisKKyAgUmVhY3RDU1NUcmFuc2l0aW9uR3JvdXBDaGlsZC5w
cm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkgeworICAgIHJldHVybiBvbmx5Q2hp
bGQodGhpcy5wcm9wcy5jaGlsZHJlbik7CisgIH07CisKKyAgcmV0dXJuIFJlYWN0Q1NTVHJhbnNp
dGlvbkdyb3VwQ2hpbGQ7Cit9KFJlYWN0LkNvbXBvbmVudCk7CisKK1JlYWN0Q1NTVHJhbnNpdGlv
bkdyb3VwQ2hpbGQucHJvcFR5cGVzID0geworICBuYW1lOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQ
cm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMuc2hhcGUoeworICAgIGVudGVyOiBQcm9wVHlwZXMu
c3RyaW5nLAorICAgIGxlYXZlOiBQcm9wVHlwZXMuc3RyaW5nLAorICAgIGFjdGl2ZTogUHJvcFR5
cGVzLnN0cmluZworICB9KSwgUHJvcFR5cGVzLnNoYXBlKHsKKyAgICBlbnRlcjogUHJvcFR5cGVz
LnN0cmluZywKKyAgICBlbnRlckFjdGl2ZTogUHJvcFR5cGVzLnN0cmluZywKKyAgICBsZWF2ZTog
UHJvcFR5cGVzLnN0cmluZywKKyAgICBsZWF2ZUFjdGl2ZTogUHJvcFR5cGVzLnN0cmluZywKKyAg
ICBhcHBlYXI6IFByb3BUeXBlcy5zdHJpbmcsCisgICAgYXBwZWFyQWN0aXZlOiBQcm9wVHlwZXMu
c3RyaW5nCisgIH0pXSkuaXNSZXF1aXJlZCwKKworICAvLyBPbmNlIHdlIHJlcXVpcmUgdGltZW91
dHMgdG8gYmUgc3BlY2lmaWVkLCB3ZSBjYW4gcmVtb3ZlIHRoZQorICAvLyBib29sZWFuIGZsYWdz
IChhcHBlYXIgZXRjLikgYW5kIGp1c3QgYWNjZXB0IGEgbnVtYmVyCisgIC8vIG9yIGEgYm9vbCBm
b3IgdGhlIHRpbWVvdXQgZmxhZ3MgKGFwcGVhclRpbWVvdXQgZXRjLikKKyAgYXBwZWFyOiBQcm9w
VHlwZXMuYm9vbCwKKyAgZW50ZXI6IFByb3BUeXBlcy5ib29sLAorICBsZWF2ZTogUHJvcFR5cGVz
LmJvb2wsCisgIGFwcGVhclRpbWVvdXQ6IFByb3BUeXBlcy5udW1iZXIsCisgIGVudGVyVGltZW91
dDogUHJvcFR5cGVzLm51bWJlciwKKyAgbGVhdmVUaW1lb3V0OiBQcm9wVHlwZXMubnVtYmVyCit9
OworCisKK21vZHVsZS5leHBvcnRzID0gUmVhY3RDU1NUcmFuc2l0aW9uR3JvdXBDaGlsZDsKK30s
eyIyOCI6MjgsIjM4IjozOCwiNDMiOjQzLCI1Ijo1LCI1MiI6NTIsIjYiOjZ9XSw5OltmdW5jdGlv
bihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMtcHJlc2Vu
dCwgRmFjZWJvb2ssIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBz
b3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQg
aW4gdGhlCisgKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291
cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnQKKyAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJl
IGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorICoKKyAq
LworCisndXNlIHN0cmljdCc7CisKK3ZhciBQb29sZWRDbGFzcyA9IF9kZXJlcV8oNCk7Cit2YXIg
UmVhY3RFbGVtZW50ID0gX2RlcmVxXygxNik7CisKK3ZhciBlbXB0eUZ1bmN0aW9uID0gX2RlcmVx
Xyg0NSk7Cit2YXIgdHJhdmVyc2VBbGxDaGlsZHJlbiA9IF9kZXJlcV8oNDEpOworCit2YXIgdHdv
QXJndW1lbnRQb29sZXIgPSBQb29sZWRDbGFzcy50d29Bcmd1bWVudFBvb2xlcjsKK3ZhciBmb3Vy
QXJndW1lbnRQb29sZXIgPSBQb29sZWRDbGFzcy5mb3VyQXJndW1lbnRQb29sZXI7CisKK3ZhciB1
c2VyUHJvdmlkZWRLZXlFc2NhcGVSZWdleCA9IC9cLysvZzsKK2Z1bmN0aW9uIGVzY2FwZVVzZXJQ
cm92aWRlZEtleSh0ZXh0KSB7CisgIHJldHVybiAoJycgKyB0ZXh0KS5yZXBsYWNlKHVzZXJQcm92
aWRlZEtleUVzY2FwZVJlZ2V4LCAnJCYvJyk7Cit9CisKKy8qKgorICogUG9vbGVkQ2xhc3MgcmVw
cmVzZW50aW5nIHRoZSBib29ra2VlcGluZyBhc3NvY2lhdGVkIHdpdGggcGVyZm9ybWluZyBhIGNo
aWxkCisgKiB0cmF2ZXJzYWwuIEFsbG93cyBhdm9pZGluZyBiaW5kaW5nIGNhbGxiYWNrcy4KKyAq
CisgKiBAY29uc3RydWN0b3IgRm9yRWFjaEJvb2tLZWVwaW5nCisgKiBAcGFyYW0geyFmdW5jdGlv
bn0gZm9yRWFjaEZ1bmN0aW9uIEZ1bmN0aW9uIHRvIHBlcmZvcm0gdHJhdmVyc2FsIHdpdGguCisg
KiBAcGFyYW0gez8qfSBmb3JFYWNoQ29udGV4dCBDb250ZXh0IHRvIHBlcmZvcm0gY29udGV4dCB3
aXRoLgorICovCitmdW5jdGlvbiBGb3JFYWNoQm9va0tlZXBpbmcoZm9yRWFjaEZ1bmN0aW9uLCBm
b3JFYWNoQ29udGV4dCkgeworICB0aGlzLmZ1bmMgPSBmb3JFYWNoRnVuY3Rpb247CisgIHRoaXMu
Y29udGV4dCA9IGZvckVhY2hDb250ZXh0OworICB0aGlzLmNvdW50ID0gMDsKK30KK0ZvckVhY2hC
b29rS2VlcGluZy5wcm90b3R5cGUuZGVzdHJ1Y3RvciA9IGZ1bmN0aW9uICgpIHsKKyAgdGhpcy5m
dW5jID0gbnVsbDsKKyAgdGhpcy5jb250ZXh0ID0gbnVsbDsKKyAgdGhpcy5jb3VudCA9IDA7Cit9
OworUG9vbGVkQ2xhc3MuYWRkUG9vbGluZ1RvKEZvckVhY2hCb29rS2VlcGluZywgdHdvQXJndW1l
bnRQb29sZXIpOworCitmdW5jdGlvbiBmb3JFYWNoU2luZ2xlQ2hpbGQoYm9va0tlZXBpbmcsIGNo
aWxkLCBuYW1lKSB7CisgIHZhciBmdW5jID0gYm9va0tlZXBpbmcuZnVuYywKKyAgICAgIGNvbnRl
eHQgPSBib29rS2VlcGluZy5jb250ZXh0OworCisgIGZ1bmMuY2FsbChjb250ZXh0LCBjaGlsZCwg
Ym9va0tlZXBpbmcuY291bnQrKyk7Cit9CisKKy8qKgorICogSXRlcmF0ZXMgdGhyb3VnaCBjaGls
ZHJlbiB0aGF0IGFyZSB0eXBpY2FsbHkgc3BlY2lmaWVkIGFzIGBwcm9wcy5jaGlsZHJlbmAuCisg
KgorICogU2VlIGh0dHBzOi8vZmFjZWJvb2suZ2l0aHViLmlvL3JlYWN0L2RvY3MvdG9wLWxldmVs
LWFwaS5odG1sI3JlYWN0LmNoaWxkcmVuLmZvcmVhY2gKKyAqCisgKiBUaGUgcHJvdmlkZWQgZm9y
RWFjaEZ1bmMoY2hpbGQsIGluZGV4KSB3aWxsIGJlIGNhbGxlZCBmb3IgZWFjaAorICogbGVhZiBj
aGlsZC4KKyAqCisgKiBAcGFyYW0gez8qfSBjaGlsZHJlbiBDaGlsZHJlbiB0cmVlIGNvbnRhaW5l
ci4KKyAqIEBwYXJhbSB7ZnVuY3Rpb24oKiwgaW50KX0gZm9yRWFjaEZ1bmMKKyAqIEBwYXJhbSB7
Kn0gZm9yRWFjaENvbnRleHQgQ29udGV4dCBmb3IgZm9yRWFjaENvbnRleHQuCisgKi8KK2Z1bmN0
aW9uIGZvckVhY2hDaGlsZHJlbihjaGlsZHJlbiwgZm9yRWFjaEZ1bmMsIGZvckVhY2hDb250ZXh0
KSB7CisgIGlmIChjaGlsZHJlbiA9PSBudWxsKSB7CisgICAgcmV0dXJuIGNoaWxkcmVuOworICB9
CisgIHZhciB0cmF2ZXJzZUNvbnRleHQgPSBGb3JFYWNoQm9va0tlZXBpbmcuZ2V0UG9vbGVkKGZv
ckVhY2hGdW5jLCBmb3JFYWNoQ29udGV4dCk7CisgIHRyYXZlcnNlQWxsQ2hpbGRyZW4oY2hpbGRy
ZW4sIGZvckVhY2hTaW5nbGVDaGlsZCwgdHJhdmVyc2VDb250ZXh0KTsKKyAgRm9yRWFjaEJvb2tL
ZWVwaW5nLnJlbGVhc2UodHJhdmVyc2VDb250ZXh0KTsKK30KKworLyoqCisgKiBQb29sZWRDbGFz
cyByZXByZXNlbnRpbmcgdGhlIGJvb2trZWVwaW5nIGFzc29jaWF0ZWQgd2l0aCBwZXJmb3JtaW5n
IGEgY2hpbGQKKyAqIG1hcHBpbmcuIEFsbG93cyBhdm9pZGluZyBiaW5kaW5nIGNhbGxiYWNrcy4K
KyAqCisgKiBAY29uc3RydWN0b3IgTWFwQm9va0tlZXBpbmcKKyAqIEBwYXJhbSB7ISp9IG1hcFJl
c3VsdCBPYmplY3QgY29udGFpbmluZyB0aGUgb3JkZXJlZCBtYXAgb2YgcmVzdWx0cy4KKyAqIEBw
YXJhbSB7IWZ1bmN0aW9ufSBtYXBGdW5jdGlvbiBGdW5jdGlvbiB0byBwZXJmb3JtIG1hcHBpbmcg
d2l0aC4KKyAqIEBwYXJhbSB7Pyp9IG1hcENvbnRleHQgQ29udGV4dCB0byBwZXJmb3JtIG1hcHBp
bmcgd2l0aC4KKyAqLworZnVuY3Rpb24gTWFwQm9va0tlZXBpbmcobWFwUmVzdWx0LCBrZXlQcmVm
aXgsIG1hcEZ1bmN0aW9uLCBtYXBDb250ZXh0KSB7CisgIHRoaXMucmVzdWx0ID0gbWFwUmVzdWx0
OworICB0aGlzLmtleVByZWZpeCA9IGtleVByZWZpeDsKKyAgdGhpcy5mdW5jID0gbWFwRnVuY3Rp
b247CisgIHRoaXMuY29udGV4dCA9IG1hcENvbnRleHQ7CisgIHRoaXMuY291bnQgPSAwOworfQor
TWFwQm9va0tlZXBpbmcucHJvdG90eXBlLmRlc3RydWN0b3IgPSBmdW5jdGlvbiAoKSB7CisgIHRo
aXMucmVzdWx0ID0gbnVsbDsKKyAgdGhpcy5rZXlQcmVmaXggPSBudWxsOworICB0aGlzLmZ1bmMg
PSBudWxsOworICB0aGlzLmNvbnRleHQgPSBudWxsOworICB0aGlzLmNvdW50ID0gMDsKK307CitQ
b29sZWRDbGFzcy5hZGRQb29saW5nVG8oTWFwQm9va0tlZXBpbmcsIGZvdXJBcmd1bWVudFBvb2xl
cik7CisKK2Z1bmN0aW9uIG1hcFNpbmdsZUNoaWxkSW50b0NvbnRleHQoYm9va0tlZXBpbmcsIGNo
aWxkLCBjaGlsZEtleSkgeworICB2YXIgcmVzdWx0ID0gYm9va0tlZXBpbmcucmVzdWx0LAorICAg
ICAga2V5UHJlZml4ID0gYm9va0tlZXBpbmcua2V5UHJlZml4LAorICAgICAgZnVuYyA9IGJvb2tL
ZWVwaW5nLmZ1bmMsCisgICAgICBjb250ZXh0ID0gYm9va0tlZXBpbmcuY29udGV4dDsKKworCisg
IHZhciBtYXBwZWRDaGlsZCA9IGZ1bmMuY2FsbChjb250ZXh0LCBjaGlsZCwgYm9va0tlZXBpbmcu
Y291bnQrKyk7CisgIGlmIChBcnJheS5pc0FycmF5KG1hcHBlZENoaWxkKSkgeworICAgIG1hcElu
dG9XaXRoS2V5UHJlZml4SW50ZXJuYWwobWFwcGVkQ2hpbGQsIHJlc3VsdCwgY2hpbGRLZXksIGVt
cHR5RnVuY3Rpb24udGhhdFJldHVybnNBcmd1bWVudCk7CisgIH0gZWxzZSBpZiAobWFwcGVkQ2hp
bGQgIT0gbnVsbCkgeworICAgIGlmIChSZWFjdEVsZW1lbnQuaXNWYWxpZEVsZW1lbnQobWFwcGVk
Q2hpbGQpKSB7CisgICAgICBtYXBwZWRDaGlsZCA9IFJlYWN0RWxlbWVudC5jbG9uZUFuZFJlcGxh
Y2VLZXkobWFwcGVkQ2hpbGQsCisgICAgICAvLyBLZWVwIGJvdGggdGhlIChtYXBwZWQpIGFuZCBv
bGQga2V5cyBpZiB0aGV5IGRpZmZlciwganVzdCBhcworICAgICAgLy8gdHJhdmVyc2VBbGxDaGls
ZHJlbiB1c2VkIHRvIGRvIGZvciBvYmplY3RzIGFzIGNoaWxkcmVuCisgICAgICBrZXlQcmVmaXgg
KyAobWFwcGVkQ2hpbGQua2V5ICYmICghY2hpbGQgfHwgY2hpbGQua2V5ICE9PSBtYXBwZWRDaGls
ZC5rZXkpID8gZXNjYXBlVXNlclByb3ZpZGVkS2V5KG1hcHBlZENoaWxkLmtleSkgKyAnLycgOiAn
JykgKyBjaGlsZEtleSk7CisgICAgfQorICAgIHJlc3VsdC5wdXNoKG1hcHBlZENoaWxkKTsKKyAg
fQorfQorCitmdW5jdGlvbiBtYXBJbnRvV2l0aEtleVByZWZpeEludGVybmFsKGNoaWxkcmVuLCBh
cnJheSwgcHJlZml4LCBmdW5jLCBjb250ZXh0KSB7CisgIHZhciBlc2NhcGVkUHJlZml4ID0gJyc7
CisgIGlmIChwcmVmaXggIT0gbnVsbCkgeworICAgIGVzY2FwZWRQcmVmaXggPSBlc2NhcGVVc2Vy
UHJvdmlkZWRLZXkocHJlZml4KSArICcvJzsKKyAgfQorICB2YXIgdHJhdmVyc2VDb250ZXh0ID0g
TWFwQm9va0tlZXBpbmcuZ2V0UG9vbGVkKGFycmF5LCBlc2NhcGVkUHJlZml4LCBmdW5jLCBjb250
ZXh0KTsKKyAgdHJhdmVyc2VBbGxDaGlsZHJlbihjaGlsZHJlbiwgbWFwU2luZ2xlQ2hpbGRJbnRv
Q29udGV4dCwgdHJhdmVyc2VDb250ZXh0KTsKKyAgTWFwQm9va0tlZXBpbmcucmVsZWFzZSh0cmF2
ZXJzZUNvbnRleHQpOworfQorCisvKioKKyAqIE1hcHMgY2hpbGRyZW4gdGhhdCBhcmUgdHlwaWNh
bGx5IHNwZWNpZmllZCBhcyBgcHJvcHMuY2hpbGRyZW5gLgorICoKKyAqIFNlZSBodHRwczovL2Zh
Y2Vib29rLmdpdGh1Yi5pby9yZWFjdC9kb2NzL3RvcC1sZXZlbC1hcGkuaHRtbCNyZWFjdC5jaGls
ZHJlbi5tYXAKKyAqCisgKiBUaGUgcHJvdmlkZWQgbWFwRnVuY3Rpb24oY2hpbGQsIGtleSwgaW5k
ZXgpIHdpbGwgYmUgY2FsbGVkIGZvciBlYWNoCisgKiBsZWFmIGNoaWxkLgorICoKKyAqIEBwYXJh
bSB7Pyp9IGNoaWxkcmVuIENoaWxkcmVuIHRyZWUgY29udGFpbmVyLgorICogQHBhcmFtIHtmdW5j
dGlvbigqLCBpbnQpfSBmdW5jIFRoZSBtYXAgZnVuY3Rpb24uCisgKiBAcGFyYW0geyp9IGNvbnRl
eHQgQ29udGV4dCBmb3IgbWFwRnVuY3Rpb24uCisgKiBAcmV0dXJuIHtvYmplY3R9IE9iamVjdCBj
b250YWluaW5nIHRoZSBvcmRlcmVkIG1hcCBvZiByZXN1bHRzLgorICovCitmdW5jdGlvbiBtYXBD
aGlsZHJlbihjaGlsZHJlbiwgZnVuYywgY29udGV4dCkgeworICBpZiAoY2hpbGRyZW4gPT0gbnVs
bCkgeworICAgIHJldHVybiBjaGlsZHJlbjsKKyAgfQorICB2YXIgcmVzdWx0ID0gW107CisgIG1h
cEludG9XaXRoS2V5UHJlZml4SW50ZXJuYWwoY2hpbGRyZW4sIHJlc3VsdCwgbnVsbCwgZnVuYywg
Y29udGV4dCk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK2Z1bmN0aW9uIGZvckVhY2hTaW5nbGVD
aGlsZER1bW15KHRyYXZlcnNlQ29udGV4dCwgY2hpbGQsIG5hbWUpIHsKKyAgcmV0dXJuIG51bGw7
Cit9CisKKy8qKgorICogQ291bnQgdGhlIG51bWJlciBvZiBjaGlsZHJlbiB0aGF0IGFyZSB0eXBp
Y2FsbHkgc3BlY2lmaWVkIGFzCisgKiBgcHJvcHMuY2hpbGRyZW5gLgorICoKKyAqIFNlZSBodHRw
czovL2ZhY2Vib29rLmdpdGh1Yi5pby9yZWFjdC9kb2NzL3RvcC1sZXZlbC1hcGkuaHRtbCNyZWFj
dC5jaGlsZHJlbi5jb3VudAorICoKKyAqIEBwYXJhbSB7Pyp9IGNoaWxkcmVuIENoaWxkcmVuIHRy
ZWUgY29udGFpbmVyLgorICogQHJldHVybiB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIGNoaWxkcmVu
LgorICovCitmdW5jdGlvbiBjb3VudENoaWxkcmVuKGNoaWxkcmVuLCBjb250ZXh0KSB7CisgIHJl
dHVybiB0cmF2ZXJzZUFsbENoaWxkcmVuKGNoaWxkcmVuLCBmb3JFYWNoU2luZ2xlQ2hpbGREdW1t
eSwgbnVsbCk7Cit9CisKKy8qKgorICogRmxhdHRlbiBhIGNoaWxkcmVuIG9iamVjdCAodHlwaWNh
bGx5IHNwZWNpZmllZCBhcyBgcHJvcHMuY2hpbGRyZW5gKSBhbmQKKyAqIHJldHVybiBhbiBhcnJh
eSB3aXRoIGFwcHJvcHJpYXRlbHkgcmUta2V5ZWQgY2hpbGRyZW4uCisgKgorICogU2VlIGh0dHBz
Oi8vZmFjZWJvb2suZ2l0aHViLmlvL3JlYWN0L2RvY3MvdG9wLWxldmVsLWFwaS5odG1sI3JlYWN0
LmNoaWxkcmVuLnRvYXJyYXkKKyAqLworZnVuY3Rpb24gdG9BcnJheShjaGlsZHJlbikgeworICB2
YXIgcmVzdWx0ID0gW107CisgIG1hcEludG9XaXRoS2V5UHJlZml4SW50ZXJuYWwoY2hpbGRyZW4s
IHJlc3VsdCwgbnVsbCwgZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc0FyZ3VtZW50KTsKKyAgcmV0
dXJuIHJlc3VsdDsKK30KKwordmFyIFJlYWN0Q2hpbGRyZW4gPSB7CisgIGZvckVhY2g6IGZvckVh
Y2hDaGlsZHJlbiwKKyAgbWFwOiBtYXBDaGlsZHJlbiwKKyAgbWFwSW50b1dpdGhLZXlQcmVmaXhJ
bnRlcm5hbDogbWFwSW50b1dpdGhLZXlQcmVmaXhJbnRlcm5hbCwKKyAgY291bnQ6IGNvdW50Q2hp
bGRyZW4sCisgIHRvQXJyYXk6IHRvQXJyYXkKK307CisKK21vZHVsZS5leHBvcnRzID0gUmVhY3RD
aGlsZHJlbjsKK30seyIxNiI6MTYsIjQiOjQsIjQxIjo0MSwiNDUiOjQ1fV0sMTA6W2Z1bmN0aW9u
KF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50
LCBGYWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNv
dXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBp
biB0aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3Vy
Y2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAorICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUg
Zm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisgKgorICov
CisKKyd1c2Ugc3RyaWN0JzsKKwordmFyIF9wcm9kSW52YXJpYW50ID0gX2RlcmVxXygzOSksCisg
ICAgX2Fzc2lnbiA9IF9kZXJlcV8oNTApOworCit2YXIgUmVhY3RDb21wb25lbnQgPSBfZGVyZXFf
KDExKTsKK3ZhciBSZWFjdEVsZW1lbnQgPSBfZGVyZXFfKDE2KTsKK3ZhciBSZWFjdFByb3BUeXBl
TG9jYXRpb25OYW1lcyA9IF9kZXJlcV8oMjIpOwordmFyIFJlYWN0Tm9vcFVwZGF0ZVF1ZXVlID0g
X2RlcmVxXygyMSk7CisKK3ZhciBlbXB0eU9iamVjdCA9IF9kZXJlcV8oNDYpOwordmFyIGludmFy
aWFudCA9IF9kZXJlcV8oNDcpOwordmFyIHdhcm5pbmcgPSBfZGVyZXFfKDQ5KTsKKwordmFyIE1J
WElOU19LRVkgPSAnbWl4aW5zJzsKKworLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGFsbG93IHRoZSBj
cmVhdGlvbiBvZiBhbm9ueW1vdXMgZnVuY3Rpb25zIHdoaWNoIGRvIG5vdAorLy8gaGF2ZSAubmFt
ZSBzZXQgdG8gdGhlIG5hbWUgb2YgdGhlIHZhcmlhYmxlIGJlaW5nIGFzc2lnbmVkIHRvLgorZnVu
Y3Rpb24gaWRlbnRpdHkoZm4pIHsKKyAgcmV0dXJuIGZuOworfQorCisvKioKKyAqIFBvbGljaWVz
IHRoYXQgZGVzY3JpYmUgbWV0aG9kcyBpbiBgUmVhY3RDbGFzc0ludGVyZmFjZWAuCisgKi8KKwor
Cit2YXIgaW5qZWN0ZWRNaXhpbnMgPSBbXTsKKworLyoqCisgKiBDb21wb3NpdGUgY29tcG9uZW50
cyBhcmUgaGlnaGVyLWxldmVsIGNvbXBvbmVudHMgdGhhdCBjb21wb3NlIG90aGVyIGNvbXBvc2l0
ZQorICogb3IgaG9zdCBjb21wb25lbnRzLgorICoKKyAqIFRvIGNyZWF0ZSBhIG5ldyB0eXBlIG9m
IGBSZWFjdENsYXNzYCwgcGFzcyBhIHNwZWNpZmljYXRpb24gb2YKKyAqIHlvdXIgbmV3IGNsYXNz
IHRvIGBSZWFjdC5jcmVhdGVDbGFzc2AuIFRoZSBvbmx5IHJlcXVpcmVtZW50IG9mIHlvdXIgY2xh
c3MKKyAqIHNwZWNpZmljYXRpb24gaXMgdGhhdCB5b3UgaW1wbGVtZW50IGEgYHJlbmRlcmAgbWV0
aG9kLgorICoKKyAqICAgdmFyIE15Q29tcG9uZW50ID0gUmVhY3QuY3JlYXRlQ2xhc3MoeworICog
ICAgIHJlbmRlcjogZnVuY3Rpb24oKSB7CisgKiAgICAgICByZXR1cm4gPGRpdj5IZWxsbyBXb3Js
ZDwvZGl2PjsKKyAqICAgICB9CisgKiAgIH0pOworICoKKyAqIFRoZSBjbGFzcyBzcGVjaWZpY2F0
aW9uIHN1cHBvcnRzIGEgc3BlY2lmaWMgcHJvdG9jb2wgb2YgbWV0aG9kcyB0aGF0IGhhdmUKKyAq
IHNwZWNpYWwgbWVhbmluZyAoZS5nLiBgcmVuZGVyYCkuIFNlZSBgUmVhY3RDbGFzc0ludGVyZmFj
ZWAgZm9yCisgKiBtb3JlIHRoZSBjb21wcmVoZW5zaXZlIHByb3RvY29sLiBBbnkgb3RoZXIgcHJv
cGVydGllcyBhbmQgbWV0aG9kcyBpbiB0aGUKKyAqIGNsYXNzIHNwZWNpZmljYXRpb24gd2lsbCBi
ZSBhdmFpbGFibGUgb24gdGhlIHByb3RvdHlwZS4KKyAqCisgKiBAaW50ZXJmYWNlIFJlYWN0Q2xh
c3NJbnRlcmZhY2UKKyAqIEBpbnRlcm5hbAorICovCit2YXIgUmVhY3RDbGFzc0ludGVyZmFjZSA9
IHsKKworICAvKioKKyAgICogQW4gYXJyYXkgb2YgTWl4aW4gb2JqZWN0cyB0byBpbmNsdWRlIHdo
ZW4gZGVmaW5pbmcgeW91ciBjb21wb25lbnQuCisgICAqCisgICAqIEB0eXBlIHthcnJheX0KKyAg
ICogQG9wdGlvbmFsCisgICAqLworICBtaXhpbnM6ICdERUZJTkVfTUFOWScsCisKKyAgLyoqCisg
ICAqIEFuIG9iamVjdCBjb250YWluaW5nIHByb3BlcnRpZXMgYW5kIG1ldGhvZHMgdGhhdCBzaG91
bGQgYmUgZGVmaW5lZCBvbgorICAgKiB0aGUgY29tcG9uZW50J3MgY29uc3RydWN0b3IgaW5zdGVh
ZCBvZiBpdHMgcHJvdG90eXBlIChzdGF0aWMgbWV0aG9kcykuCisgICAqCisgICAqIEB0eXBlIHtv
YmplY3R9CisgICAqIEBvcHRpb25hbAorICAgKi8KKyAgc3RhdGljczogJ0RFRklORV9NQU5ZJywK
KworICAvKioKKyAgICogRGVmaW5pdGlvbiBvZiBwcm9wIHR5cGVzIGZvciB0aGlzIGNvbXBvbmVu
dC4KKyAgICoKKyAgICogQHR5cGUge29iamVjdH0KKyAgICogQG9wdGlvbmFsCisgICAqLworICBw
cm9wVHlwZXM6ICdERUZJTkVfTUFOWScsCisKKyAgLyoqCisgICAqIERlZmluaXRpb24gb2YgY29u
dGV4dCB0eXBlcyBmb3IgdGhpcyBjb21wb25lbnQuCisgICAqCisgICAqIEB0eXBlIHtvYmplY3R9
CisgICAqIEBvcHRpb25hbAorICAgKi8KKyAgY29udGV4dFR5cGVzOiAnREVGSU5FX01BTlknLAor
CisgIC8qKgorICAgKiBEZWZpbml0aW9uIG9mIGNvbnRleHQgdHlwZXMgdGhpcyBjb21wb25lbnQg
c2V0cyBmb3IgaXRzIGNoaWxkcmVuLgorICAgKgorICAgKiBAdHlwZSB7b2JqZWN0fQorICAgKiBA
b3B0aW9uYWwKKyAgICovCisgIGNoaWxkQ29udGV4dFR5cGVzOiAnREVGSU5FX01BTlknLAorCisg
IC8vID09PT0gRGVmaW5pdGlvbiBtZXRob2RzID09PT0KKworICAvKioKKyAgICogSW52b2tlZCB3
aGVuIHRoZSBjb21wb25lbnQgaXMgbW91bnRlZC4gVmFsdWVzIGluIHRoZSBtYXBwaW5nIHdpbGwg
YmUgc2V0IG9uCisgICAqIGB0aGlzLnByb3BzYCBpZiB0aGF0IHByb3AgaXMgbm90IHNwZWNpZmll
ZCAoaS5lLiB1c2luZyBhbiBgaW5gIGNoZWNrKS4KKyAgICoKKyAgICogVGhpcyBtZXRob2QgaXMg
aW52b2tlZCBiZWZvcmUgYGdldEluaXRpYWxTdGF0ZWAgYW5kIHRoZXJlZm9yZSBjYW5ub3QgcmVs
eQorICAgKiBvbiBgdGhpcy5zdGF0ZWAgb3IgdXNlIGB0aGlzLnNldFN0YXRlYC4KKyAgICoKKyAg
ICogQHJldHVybiB7b2JqZWN0fQorICAgKiBAb3B0aW9uYWwKKyAgICovCisgIGdldERlZmF1bHRQ
cm9wczogJ0RFRklORV9NQU5ZX01FUkdFRCcsCisKKyAgLyoqCisgICAqIEludm9rZWQgb25jZSBi
ZWZvcmUgdGhlIGNvbXBvbmVudCBpcyBtb3VudGVkLiBUaGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUg
dXNlZAorICAgKiBhcyB0aGUgaW5pdGlhbCB2YWx1ZSBvZiBgdGhpcy5zdGF0ZWAuCisgICAqCisg
ICAqICAgZ2V0SW5pdGlhbFN0YXRlOiBmdW5jdGlvbigpIHsKKyAgICogICAgIHJldHVybiB7Cisg
ICAqICAgICAgIGlzT246IGZhbHNlLAorICAgKiAgICAgICBmb29CYXo6IG5ldyBCYXpGb28oKQor
ICAgKiAgICAgfQorICAgKiAgIH0KKyAgICoKKyAgICogQHJldHVybiB7b2JqZWN0fQorICAgKiBA
b3B0aW9uYWwKKyAgICovCisgIGdldEluaXRpYWxTdGF0ZTogJ0RFRklORV9NQU5ZX01FUkdFRCcs
CisKKyAgLyoqCisgICAqIEByZXR1cm4ge29iamVjdH0KKyAgICogQG9wdGlvbmFsCisgICAqLwor
ICBnZXRDaGlsZENvbnRleHQ6ICdERUZJTkVfTUFOWV9NRVJHRUQnLAorCisgIC8qKgorICAgKiBV
c2VzIHByb3BzIGZyb20gYHRoaXMucHJvcHNgIGFuZCBzdGF0ZSBmcm9tIGB0aGlzLnN0YXRlYCB0
byByZW5kZXIgdGhlCisgICAqIHN0cnVjdHVyZSBvZiB0aGUgY29tcG9uZW50LgorICAgKgorICAg
KiBObyBndWFyYW50ZWVzIGFyZSBtYWRlIGFib3V0IHdoZW4gb3IgaG93IG9mdGVuIHRoaXMgbWV0
aG9kIGlzIGludm9rZWQsIHNvCisgICAqIGl0IG11c3Qgbm90IGhhdmUgc2lkZSBlZmZlY3RzLgor
ICAgKgorICAgKiAgIHJlbmRlcjogZnVuY3Rpb24oKSB7CisgICAqICAgICB2YXIgbmFtZSA9IHRo
aXMucHJvcHMubmFtZTsKKyAgICogICAgIHJldHVybiA8ZGl2PkhlbGxvLCB7bmFtZX0hPC9kaXY+
OworICAgKiAgIH0KKyAgICoKKyAgICogQHJldHVybiB7UmVhY3RDb21wb25lbnR9CisgICAqIEBy
ZXF1aXJlZAorICAgKi8KKyAgcmVuZGVyOiAnREVGSU5FX09OQ0UnLAorCisgIC8vID09PT0gRGVs
ZWdhdGUgbWV0aG9kcyA9PT09CisKKyAgLyoqCisgICAqIEludm9rZWQgd2hlbiB0aGUgY29tcG9u
ZW50IGlzIGluaXRpYWxseSBjcmVhdGVkIGFuZCBhYm91dCB0byBiZSBtb3VudGVkLgorICAgKiBU
aGlzIG1heSBoYXZlIHNpZGUgZWZmZWN0cywgYnV0IGFueSBleHRlcm5hbCBzdWJzY3JpcHRpb25z
IG9yIGRhdGEgY3JlYXRlZAorICAgKiBieSB0aGlzIG1ldGhvZCBtdXN0IGJlIGNsZWFuZWQgdXAg
aW4gYGNvbXBvbmVudFdpbGxVbm1vdW50YC4KKyAgICoKKyAgICogQG9wdGlvbmFsCisgICAqLwor
ICBjb21wb25lbnRXaWxsTW91bnQ6ICdERUZJTkVfTUFOWScsCisKKyAgLyoqCisgICAqIEludm9r
ZWQgd2hlbiB0aGUgY29tcG9uZW50IGhhcyBiZWVuIG1vdW50ZWQgYW5kIGhhcyBhIERPTSByZXBy
ZXNlbnRhdGlvbi4KKyAgICogSG93ZXZlciwgdGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgdGhl
IERPTSBub2RlIGlzIGluIHRoZSBkb2N1bWVudC4KKyAgICoKKyAgICogVXNlIHRoaXMgYXMgYW4g
b3Bwb3J0dW5pdHkgdG8gb3BlcmF0ZSBvbiB0aGUgRE9NIHdoZW4gdGhlIGNvbXBvbmVudCBoYXMK
KyAgICogYmVlbiBtb3VudGVkIChpbml0aWFsaXplZCBhbmQgcmVuZGVyZWQpIGZvciB0aGUgZmly
c3QgdGltZS4KKyAgICoKKyAgICogQHBhcmFtIHtET01FbGVtZW50fSByb290Tm9kZSBET00gZWxl
bWVudCByZXByZXNlbnRpbmcgdGhlIGNvbXBvbmVudC4KKyAgICogQG9wdGlvbmFsCisgICAqLwor
ICBjb21wb25lbnREaWRNb3VudDogJ0RFRklORV9NQU5ZJywKKworICAvKioKKyAgICogSW52b2tl
ZCBiZWZvcmUgdGhlIGNvbXBvbmVudCByZWNlaXZlcyBuZXcgcHJvcHMuCisgICAqCisgICAqIFVz
ZSB0aGlzIGFzIGFuIG9wcG9ydHVuaXR5IHRvIHJlYWN0IHRvIGEgcHJvcCB0cmFuc2l0aW9uIGJ5
IHVwZGF0aW5nIHRoZQorICAgKiBzdGF0ZSB1c2luZyBgdGhpcy5zZXRTdGF0ZWAuIEN1cnJlbnQg
cHJvcHMgYXJlIGFjY2Vzc2VkIHZpYSBgdGhpcy5wcm9wc2AuCisgICAqCisgICAqICAgY29tcG9u
ZW50V2lsbFJlY2VpdmVQcm9wczogZnVuY3Rpb24obmV4dFByb3BzLCBuZXh0Q29udGV4dCkgewor
ICAgKiAgICAgdGhpcy5zZXRTdGF0ZSh7CisgICAqICAgICAgIGxpa2VzSW5jcmVhc2luZzogbmV4
dFByb3BzLmxpa2VDb3VudCA+IHRoaXMucHJvcHMubGlrZUNvdW50CisgICAqICAgICB9KTsKKyAg
ICogICB9CisgICAqCisgICAqIE5PVEU6IFRoZXJlIGlzIG5vIGVxdWl2YWxlbnQgYGNvbXBvbmVu
dFdpbGxSZWNlaXZlU3RhdGVgLiBBbiBpbmNvbWluZyBwcm9wCisgICAqIHRyYW5zaXRpb24gbWF5
IGNhdXNlIGEgc3RhdGUgY2hhbmdlLCBidXQgdGhlIG9wcG9zaXRlIGlzIG5vdCB0cnVlLiBJZiB5
b3UKKyAgICogbmVlZCBpdCwgeW91IGFyZSBwcm9iYWJseSBsb29raW5nIGZvciBgY29tcG9uZW50
V2lsbFVwZGF0ZWAuCisgICAqCisgICAqIEBwYXJhbSB7b2JqZWN0fSBuZXh0UHJvcHMKKyAgICog
QG9wdGlvbmFsCisgICAqLworICBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzOiAnREVGSU5FX01B
TlknLAorCisgIC8qKgorICAgKiBJbnZva2VkIHdoaWxlIGRlY2lkaW5nIGlmIHRoZSBjb21wb25l
bnQgc2hvdWxkIGJlIHVwZGF0ZWQgYXMgYSByZXN1bHQgb2YKKyAgICogcmVjZWl2aW5nIG5ldyBw
cm9wcywgc3RhdGUgYW5kL29yIGNvbnRleHQuCisgICAqCisgICAqIFVzZSB0aGlzIGFzIGFuIG9w
cG9ydHVuaXR5IHRvIGByZXR1cm4gZmFsc2VgIHdoZW4geW91J3JlIGNlcnRhaW4gdGhhdCB0aGUK
KyAgICogdHJhbnNpdGlvbiB0byB0aGUgbmV3IHByb3BzL3N0YXRlL2NvbnRleHQgd2lsbCBub3Qg
cmVxdWlyZSBhIGNvbXBvbmVudAorICAgKiB1cGRhdGUuCisgICAqCisgICAqICAgc2hvdWxkQ29t
cG9uZW50VXBkYXRlOiBmdW5jdGlvbihuZXh0UHJvcHMsIG5leHRTdGF0ZSwgbmV4dENvbnRleHQp
IHsKKyAgICogICAgIHJldHVybiAhZXF1YWwobmV4dFByb3BzLCB0aGlzLnByb3BzKSB8fAorICAg
KiAgICAgICAhZXF1YWwobmV4dFN0YXRlLCB0aGlzLnN0YXRlKSB8fAorICAgKiAgICAgICAhZXF1
YWwobmV4dENvbnRleHQsIHRoaXMuY29udGV4dCk7CisgICAqICAgfQorICAgKgorICAgKiBAcGFy
YW0ge29iamVjdH0gbmV4dFByb3BzCisgICAqIEBwYXJhbSB7P29iamVjdH0gbmV4dFN0YXRlCisg
ICAqIEBwYXJhbSB7P29iamVjdH0gbmV4dENvbnRleHQKKyAgICogQHJldHVybiB7Ym9vbGVhbn0g
VHJ1ZSBpZiB0aGUgY29tcG9uZW50IHNob3VsZCB1cGRhdGUuCisgICAqIEBvcHRpb25hbAorICAg
Ki8KKyAgc2hvdWxkQ29tcG9uZW50VXBkYXRlOiAnREVGSU5FX09OQ0UnLAorCisgIC8qKgorICAg
KiBJbnZva2VkIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBhYm91dCB0byB1cGRhdGUgZHVlIHRvIGEg
dHJhbnNpdGlvbiBmcm9tCisgICAqIGB0aGlzLnByb3BzYCwgYHRoaXMuc3RhdGVgIGFuZCBgdGhp
cy5jb250ZXh0YCB0byBgbmV4dFByb3BzYCwgYG5leHRTdGF0ZWAKKyAgICogYW5kIGBuZXh0Q29u
dGV4dGAuCisgICAqCisgICAqIFVzZSB0aGlzIGFzIGFuIG9wcG9ydHVuaXR5IHRvIHBlcmZvcm0g
cHJlcGFyYXRpb24gYmVmb3JlIGFuIHVwZGF0ZSBvY2N1cnMuCisgICAqCisgICAqIE5PVEU6IFlv
dSAqKmNhbm5vdCoqIHVzZSBgdGhpcy5zZXRTdGF0ZSgpYCBpbiB0aGlzIG1ldGhvZC4KKyAgICoK
KyAgICogQHBhcmFtIHtvYmplY3R9IG5leHRQcm9wcworICAgKiBAcGFyYW0gez9vYmplY3R9IG5l
eHRTdGF0ZQorICAgKiBAcGFyYW0gez9vYmplY3R9IG5leHRDb250ZXh0CisgICAqIEBwYXJhbSB7
UmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbn0gdHJhbnNhY3Rpb24KKyAgICogQG9wdGlvbmFsCisg
ICAqLworICBjb21wb25lbnRXaWxsVXBkYXRlOiAnREVGSU5FX01BTlknLAorCisgIC8qKgorICAg
KiBJbnZva2VkIHdoZW4gdGhlIGNvbXBvbmVudCdzIERPTSByZXByZXNlbnRhdGlvbiBoYXMgYmVl
biB1cGRhdGVkLgorICAgKgorICAgKiBVc2UgdGhpcyBhcyBhbiBvcHBvcnR1bml0eSB0byBvcGVy
YXRlIG9uIHRoZSBET00gd2hlbiB0aGUgY29tcG9uZW50IGhhcworICAgKiBiZWVuIHVwZGF0ZWQu
CisgICAqCisgICAqIEBwYXJhbSB7b2JqZWN0fSBwcmV2UHJvcHMKKyAgICogQHBhcmFtIHs/b2Jq
ZWN0fSBwcmV2U3RhdGUKKyAgICogQHBhcmFtIHs/b2JqZWN0fSBwcmV2Q29udGV4dAorICAgKiBA
cGFyYW0ge0RPTUVsZW1lbnR9IHJvb3ROb2RlIERPTSBlbGVtZW50IHJlcHJlc2VudGluZyB0aGUg
Y29tcG9uZW50LgorICAgKiBAb3B0aW9uYWwKKyAgICovCisgIGNvbXBvbmVudERpZFVwZGF0ZTog
J0RFRklORV9NQU5ZJywKKworICAvKioKKyAgICogSW52b2tlZCB3aGVuIHRoZSBjb21wb25lbnQg
aXMgYWJvdXQgdG8gYmUgcmVtb3ZlZCBmcm9tIGl0cyBwYXJlbnQgYW5kIGhhdmUKKyAgICogaXRz
IERPTSByZXByZXNlbnRhdGlvbiBkZXN0cm95ZWQuCisgICAqCisgICAqIFVzZSB0aGlzIGFzIGFu
IG9wcG9ydHVuaXR5IHRvIGRlYWxsb2NhdGUgYW55IGV4dGVybmFsIHJlc291cmNlcy4KKyAgICoK
KyAgICogTk9URTogVGhlcmUgaXMgbm8gYGNvbXBvbmVudERpZFVubW91bnRgIHNpbmNlIHlvdXIg
Y29tcG9uZW50IHdpbGwgaGF2ZSBiZWVuCisgICAqIGRlc3Ryb3llZCBieSB0aGF0IHBvaW50Lgor
ICAgKgorICAgKiBAb3B0aW9uYWwKKyAgICovCisgIGNvbXBvbmVudFdpbGxVbm1vdW50OiAnREVG
SU5FX01BTlknLAorCisgIC8vID09PT0gQWR2YW5jZWQgbWV0aG9kcyA9PT09CisKKyAgLyoqCisg
ICAqIFVwZGF0ZXMgdGhlIGNvbXBvbmVudCdzIGN1cnJlbnRseSBtb3VudGVkIERPTSByZXByZXNl
bnRhdGlvbi4KKyAgICoKKyAgICogQnkgZGVmYXVsdCwgdGhpcyBpbXBsZW1lbnRzIFJlYWN0J3Mg
cmVuZGVyaW5nIGFuZCByZWNvbmNpbGlhdGlvbiBhbGdvcml0aG0uCisgICAqIFNvcGhpc3RpY2F0
ZWQgY2xpZW50cyBtYXkgd2lzaCB0byBvdmVycmlkZSB0aGlzLgorICAgKgorICAgKiBAcGFyYW0g
e1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uCisgICAqIEBpbnRlcm5hbAor
ICAgKiBAb3ZlcnJpZGFibGUKKyAgICovCisgIHVwZGF0ZUNvbXBvbmVudDogJ09WRVJSSURFX0JB
U0UnCisKK307CisKKy8qKgorICogTWFwcGluZyBmcm9tIGNsYXNzIHNwZWNpZmljYXRpb24ga2V5
cyB0byBzcGVjaWFsIHByb2Nlc3NpbmcgZnVuY3Rpb25zLgorICoKKyAqIEFsdGhvdWdoIHRoZXNl
IGFyZSBkZWNsYXJlZCBsaWtlIGluc3RhbmNlIHByb3BlcnRpZXMgaW4gdGhlIHNwZWNpZmljYXRp
b24KKyAqIHdoZW4gZGVmaW5pbmcgY2xhc3NlcyB1c2luZyBgUmVhY3QuY3JlYXRlQ2xhc3NgLCB0
aGV5IGFyZSBhY3R1YWxseSBzdGF0aWMKKyAqIGFuZCBhcmUgYWNjZXNzaWJsZSBvbiB0aGUgY29u
c3RydWN0b3IgaW5zdGVhZCBvZiB0aGUgcHJvdG90eXBlLiBEZXNwaXRlCisgKiBiZWluZyBzdGF0
aWMsIHRoZXkgbXVzdCBiZSBkZWZpbmVkIG91dHNpZGUgb2YgdGhlICJzdGF0aWNzIiBrZXkgdW5k
ZXIKKyAqIHdoaWNoIGFsbCBvdGhlciBzdGF0aWMgbWV0aG9kcyBhcmUgZGVmaW5lZC4KKyAqLwor
dmFyIFJFU0VSVkVEX1NQRUNfS0VZUyA9IHsKKyAgZGlzcGxheU5hbWU6IGZ1bmN0aW9uIChDb25z
dHJ1Y3RvciwgZGlzcGxheU5hbWUpIHsKKyAgICBDb25zdHJ1Y3Rvci5kaXNwbGF5TmFtZSA9IGRp
c3BsYXlOYW1lOworICB9LAorICBtaXhpbnM6IGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgbWl4aW5z
KSB7CisgICAgaWYgKG1peGlucykgeworICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtaXhpbnMu
bGVuZ3RoOyBpKyspIHsKKyAgICAgICAgbWl4U3BlY0ludG9Db21wb25lbnQoQ29uc3RydWN0b3Is
IG1peGluc1tpXSk7CisgICAgICB9CisgICAgfQorICB9LAorICBjaGlsZENvbnRleHRUeXBlczog
ZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBjaGlsZENvbnRleHRUeXBlcykgeworICAgIGlmICgiZGV2
ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicpIHsKKyAgICAgIHZhbGlkYXRlVHlwZURlZihDb25z
dHJ1Y3RvciwgY2hpbGRDb250ZXh0VHlwZXMsICdjaGlsZENvbnRleHQnKTsKKyAgICB9CisgICAg
Q29uc3RydWN0b3IuY2hpbGRDb250ZXh0VHlwZXMgPSBfYXNzaWduKHt9LCBDb25zdHJ1Y3Rvci5j
aGlsZENvbnRleHRUeXBlcywgY2hpbGRDb250ZXh0VHlwZXMpOworICB9LAorICBjb250ZXh0VHlw
ZXM6IGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgY29udGV4dFR5cGVzKSB7CisgICAgaWYgKCJkZXZl
bG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJykgeworICAgICAgdmFsaWRhdGVUeXBlRGVmKENvbnN0
cnVjdG9yLCBjb250ZXh0VHlwZXMsICdjb250ZXh0Jyk7CisgICAgfQorICAgIENvbnN0cnVjdG9y
LmNvbnRleHRUeXBlcyA9IF9hc3NpZ24oe30sIENvbnN0cnVjdG9yLmNvbnRleHRUeXBlcywgY29u
dGV4dFR5cGVzKTsKKyAgfSwKKyAgLyoqCisgICAqIFNwZWNpYWwgY2FzZSBnZXREZWZhdWx0UHJv
cHMgd2hpY2ggc2hvdWxkIG1vdmUgaW50byBzdGF0aWNzIGJ1dCByZXF1aXJlcworICAgKiBhdXRv
bWF0aWMgbWVyZ2luZy4KKyAgICovCisgIGdldERlZmF1bHRQcm9wczogZnVuY3Rpb24gKENvbnN0
cnVjdG9yLCBnZXREZWZhdWx0UHJvcHMpIHsKKyAgICBpZiAoQ29uc3RydWN0b3IuZ2V0RGVmYXVs
dFByb3BzKSB7CisgICAgICBDb25zdHJ1Y3Rvci5nZXREZWZhdWx0UHJvcHMgPSBjcmVhdGVNZXJn
ZWRSZXN1bHRGdW5jdGlvbihDb25zdHJ1Y3Rvci5nZXREZWZhdWx0UHJvcHMsIGdldERlZmF1bHRQ
cm9wcyk7CisgICAgfSBlbHNlIHsKKyAgICAgIENvbnN0cnVjdG9yLmdldERlZmF1bHRQcm9wcyA9
IGdldERlZmF1bHRQcm9wczsKKyAgICB9CisgIH0sCisgIHByb3BUeXBlczogZnVuY3Rpb24gKENv
bnN0cnVjdG9yLCBwcm9wVHlwZXMpIHsKKyAgICBpZiAoImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1
Y3Rpb24nKSB7CisgICAgICB2YWxpZGF0ZVR5cGVEZWYoQ29uc3RydWN0b3IsIHByb3BUeXBlcywg
J3Byb3AnKTsKKyAgICB9CisgICAgQ29uc3RydWN0b3IucHJvcFR5cGVzID0gX2Fzc2lnbih7fSwg
Q29uc3RydWN0b3IucHJvcFR5cGVzLCBwcm9wVHlwZXMpOworICB9LAorICBzdGF0aWNzOiBmdW5j
dGlvbiAoQ29uc3RydWN0b3IsIHN0YXRpY3MpIHsKKyAgICBtaXhTdGF0aWNTcGVjSW50b0NvbXBv
bmVudChDb25zdHJ1Y3Rvciwgc3RhdGljcyk7CisgIH0sCisgIGF1dG9iaW5kOiBmdW5jdGlvbiAo
KSB7fSB9OworCitmdW5jdGlvbiB2YWxpZGF0ZVR5cGVEZWYoQ29uc3RydWN0b3IsIHR5cGVEZWYs
IGxvY2F0aW9uKSB7CisgIGZvciAodmFyIHByb3BOYW1lIGluIHR5cGVEZWYpIHsKKyAgICBpZiAo
dHlwZURlZi5oYXNPd25Qcm9wZXJ0eShwcm9wTmFtZSkpIHsKKyAgICAgIC8vIHVzZSBhIHdhcm5p
bmcgaW5zdGVhZCBvZiBhbiBpbnZhcmlhbnQgc28gY29tcG9uZW50cworICAgICAgLy8gZG9uJ3Qg
c2hvdyB1cCBpbiBwcm9kIGJ1dCBvbmx5IGluIF9fREVWX18KKyAgICAgICJkZXZlbG9wbWVudCIg
IT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcodHlwZW9mIHR5cGVEZWZbcHJvcE5hbWVdID09PSAn
ZnVuY3Rpb24nLCAnJXM6ICVzIHR5cGUgYCVzYCBpcyBpbnZhbGlkOyBpdCBtdXN0IGJlIGEgZnVu
Y3Rpb24sIHVzdWFsbHkgZnJvbSAnICsgJ1JlYWN0LlByb3BUeXBlcy4nLCBDb25zdHJ1Y3Rvci5k
aXNwbGF5TmFtZSB8fCAnUmVhY3RDbGFzcycsIFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzW2xv
Y2F0aW9uXSwgcHJvcE5hbWUpIDogdm9pZCAwOworICAgIH0KKyAgfQorfQorCitmdW5jdGlvbiB2
YWxpZGF0ZU1ldGhvZE92ZXJyaWRlKGlzQWxyZWFkeURlZmluZWQsIG5hbWUpIHsKKyAgdmFyIHNw
ZWNQb2xpY3kgPSBSZWFjdENsYXNzSW50ZXJmYWNlLmhhc093blByb3BlcnR5KG5hbWUpID8gUmVh
Y3RDbGFzc0ludGVyZmFjZVtuYW1lXSA6IG51bGw7CisKKyAgLy8gRGlzYWxsb3cgb3ZlcnJpZGlu
ZyBvZiBiYXNlIGNsYXNzIG1ldGhvZHMgdW5sZXNzIGV4cGxpY2l0bHkgYWxsb3dlZC4KKyAgaWYg
KFJlYWN0Q2xhc3NNaXhpbi5oYXNPd25Qcm9wZXJ0eShuYW1lKSkgeworICAgICEoc3BlY1BvbGlj
eSA9PT0gJ09WRVJSSURFX0JBU0UnKSA/ICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/
IGludmFyaWFudChmYWxzZSwgJ1JlYWN0Q2xhc3NJbnRlcmZhY2U6IFlvdSBhcmUgYXR0ZW1wdGlu
ZyB0byBvdmVycmlkZSBgJXNgIGZyb20geW91ciBjbGFzcyBzcGVjaWZpY2F0aW9uLiBFbnN1cmUg
dGhhdCB5b3VyIG1ldGhvZCBuYW1lcyBkbyBub3Qgb3ZlcmxhcCB3aXRoIFJlYWN0IG1ldGhvZHMu
JywgbmFtZSkgOiBfcHJvZEludmFyaWFudCgnNzMnLCBuYW1lKSA6IHZvaWQgMDsKKyAgfQorCisg
IC8vIERpc2FsbG93IGRlZmluaW5nIG1ldGhvZHMgbW9yZSB0aGFuIG9uY2UgdW5sZXNzIGV4cGxp
Y2l0bHkgYWxsb3dlZC4KKyAgaWYgKGlzQWxyZWFkeURlZmluZWQpIHsKKyAgICAhKHNwZWNQb2xp
Y3kgPT09ICdERUZJTkVfTUFOWScgfHwgc3BlY1BvbGljeSA9PT0gJ0RFRklORV9NQU5ZX01FUkdF
RCcpID8gImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAn
UmVhY3RDbGFzc0ludGVyZmFjZTogWW91IGFyZSBhdHRlbXB0aW5nIHRvIGRlZmluZSBgJXNgIG9u
IHlvdXIgY29tcG9uZW50IG1vcmUgdGhhbiBvbmNlLiBUaGlzIGNvbmZsaWN0IG1heSBiZSBkdWUg
dG8gYSBtaXhpbi4nLCBuYW1lKSA6IF9wcm9kSW52YXJpYW50KCc3NCcsIG5hbWUpIDogdm9pZCAw
OworICB9Cit9CisKKy8qKgorICogTWl4aW4gaGVscGVyIHdoaWNoIGhhbmRsZXMgcG9saWN5IHZh
bGlkYXRpb24gYW5kIHJlc2VydmVkCisgKiBzcGVjaWZpY2F0aW9uIGtleXMgd2hlbiBidWlsZGlu
ZyBSZWFjdCBjbGFzc2VzLgorICovCitmdW5jdGlvbiBtaXhTcGVjSW50b0NvbXBvbmVudChDb25z
dHJ1Y3Rvciwgc3BlYykgeworICBpZiAoIXNwZWMpIHsKKyAgICBpZiAoImRldmVsb3BtZW50IiAh
PT0gJ3Byb2R1Y3Rpb24nKSB7CisgICAgICB2YXIgdHlwZW9mU3BlYyA9IHR5cGVvZiBzcGVjOwor
ICAgICAgdmFyIGlzTWl4aW5WYWxpZCA9IHR5cGVvZlNwZWMgPT09ICdvYmplY3QnICYmIHNwZWMg
IT09IG51bGw7CisKKyAgICAgICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5p
bmcoaXNNaXhpblZhbGlkLCAnJXM6IFlvdVwncmUgYXR0ZW1wdGluZyB0byBpbmNsdWRlIGEgbWl4
aW4gdGhhdCBpcyBlaXRoZXIgbnVsbCAnICsgJ29yIG5vdCBhbiBvYmplY3QuIENoZWNrIHRoZSBt
aXhpbnMgaW5jbHVkZWQgYnkgdGhlIGNvbXBvbmVudCwgJyArICdhcyB3ZWxsIGFzIGFueSBtaXhp
bnMgdGhleSBpbmNsdWRlIHRoZW1zZWx2ZXMuICcgKyAnRXhwZWN0ZWQgb2JqZWN0IGJ1dCBnb3Qg
JXMuJywgQ29uc3RydWN0b3IuZGlzcGxheU5hbWUgfHwgJ1JlYWN0Q2xhc3MnLCBzcGVjID09PSBu
dWxsID8gbnVsbCA6IHR5cGVvZlNwZWMpIDogdm9pZCAwOworICAgIH0KKworICAgIHJldHVybjsK
KyAgfQorCisgICEodHlwZW9mIHNwZWMgIT09ICdmdW5jdGlvbicpID8gImRldmVsb3BtZW50IiAh
PT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnUmVhY3RDbGFzczogWW91XCdyZSBh
dHRlbXB0aW5nIHRvIHVzZSBhIGNvbXBvbmVudCBjbGFzcyBvciBmdW5jdGlvbiBhcyBhIG1peGlu
LiBJbnN0ZWFkLCBqdXN0IHVzZSBhIHJlZ3VsYXIgb2JqZWN0LicpIDogX3Byb2RJbnZhcmlhbnQo
Jzc1JykgOiB2b2lkIDA7CisgICEhUmVhY3RFbGVtZW50LmlzVmFsaWRFbGVtZW50KHNwZWMpID8g
ImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnUmVhY3RD
bGFzczogWW91XCdyZSBhdHRlbXB0aW5nIHRvIHVzZSBhIGNvbXBvbmVudCBhcyBhIG1peGluLiBJ
bnN0ZWFkLCBqdXN0IHVzZSBhIHJlZ3VsYXIgb2JqZWN0LicpIDogX3Byb2RJbnZhcmlhbnQoJzc2
JykgOiB2b2lkIDA7CisKKyAgdmFyIHByb3RvID0gQ29uc3RydWN0b3IucHJvdG90eXBlOworICB2
YXIgYXV0b0JpbmRQYWlycyA9IHByb3RvLl9fcmVhY3RBdXRvQmluZFBhaXJzOworCisgIC8vIEJ5
IGhhbmRsaW5nIG1peGlucyBiZWZvcmUgYW55IG90aGVyIHByb3BlcnRpZXMsIHdlIGVuc3VyZSB0
aGUgc2FtZQorICAvLyBjaGFpbmluZyBvcmRlciBpcyBhcHBsaWVkIHRvIG1ldGhvZHMgd2l0aCBE
RUZJTkVfTUFOWSBwb2xpY3ksIHdoZXRoZXIKKyAgLy8gbWl4aW5zIGFyZSBsaXN0ZWQgYmVmb3Jl
IG9yIGFmdGVyIHRoZXNlIG1ldGhvZHMgaW4gdGhlIHNwZWMuCisgIGlmIChzcGVjLmhhc093blBy
b3BlcnR5KE1JWElOU19LRVkpKSB7CisgICAgUkVTRVJWRURfU1BFQ19LRVlTLm1peGlucyhDb25z
dHJ1Y3Rvciwgc3BlYy5taXhpbnMpOworICB9CisKKyAgZm9yICh2YXIgbmFtZSBpbiBzcGVjKSB7
CisgICAgaWYgKCFzcGVjLmhhc093blByb3BlcnR5KG5hbWUpKSB7CisgICAgICBjb250aW51ZTsK
KyAgICB9CisKKyAgICBpZiAobmFtZSA9PT0gTUlYSU5TX0tFWSkgeworICAgICAgLy8gV2UgaGF2
ZSBhbHJlYWR5IGhhbmRsZWQgbWl4aW5zIGluIGEgc3BlY2lhbCBjYXNlIGFib3ZlLgorICAgICAg
Y29udGludWU7CisgICAgfQorCisgICAgdmFyIHByb3BlcnR5ID0gc3BlY1tuYW1lXTsKKyAgICB2
YXIgaXNBbHJlYWR5RGVmaW5lZCA9IHByb3RvLmhhc093blByb3BlcnR5KG5hbWUpOworICAgIHZh
bGlkYXRlTWV0aG9kT3ZlcnJpZGUoaXNBbHJlYWR5RGVmaW5lZCwgbmFtZSk7CisKKyAgICBpZiAo
UkVTRVJWRURfU1BFQ19LRVlTLmhhc093blByb3BlcnR5KG5hbWUpKSB7CisgICAgICBSRVNFUlZF
RF9TUEVDX0tFWVNbbmFtZV0oQ29uc3RydWN0b3IsIHByb3BlcnR5KTsKKyAgICB9IGVsc2Ugewor
ICAgICAgLy8gU2V0dXAgbWV0aG9kcyBvbiBwcm90b3R5cGU6CisgICAgICAvLyBUaGUgZm9sbG93
aW5nIG1lbWJlciBtZXRob2RzIHNob3VsZCBub3QgYmUgYXV0b21hdGljYWxseSBib3VuZDoKKyAg
ICAgIC8vIDEuIEV4cGVjdGVkIFJlYWN0Q2xhc3MgbWV0aG9kcyAoaW4gdGhlICJpbnRlcmZhY2Ui
KS4KKyAgICAgIC8vIDIuIE92ZXJyaWRkZW4gbWV0aG9kcyAodGhhdCB3ZXJlIG1peGVkIGluKS4K
KyAgICAgIHZhciBpc1JlYWN0Q2xhc3NNZXRob2QgPSBSZWFjdENsYXNzSW50ZXJmYWNlLmhhc093
blByb3BlcnR5KG5hbWUpOworICAgICAgdmFyIGlzRnVuY3Rpb24gPSB0eXBlb2YgcHJvcGVydHkg
PT09ICdmdW5jdGlvbic7CisgICAgICB2YXIgc2hvdWxkQXV0b0JpbmQgPSBpc0Z1bmN0aW9uICYm
ICFpc1JlYWN0Q2xhc3NNZXRob2QgJiYgIWlzQWxyZWFkeURlZmluZWQgJiYgc3BlYy5hdXRvYmlu
ZCAhPT0gZmFsc2U7CisKKyAgICAgIGlmIChzaG91bGRBdXRvQmluZCkgeworICAgICAgICBhdXRv
QmluZFBhaXJzLnB1c2gobmFtZSwgcHJvcGVydHkpOworICAgICAgICBwcm90b1tuYW1lXSA9IHBy
b3BlcnR5OworICAgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGlzQWxyZWFkeURlZmluZWQpIHsK
KyAgICAgICAgICB2YXIgc3BlY1BvbGljeSA9IFJlYWN0Q2xhc3NJbnRlcmZhY2VbbmFtZV07CisK
KyAgICAgICAgICAvLyBUaGVzZSBjYXNlcyBzaG91bGQgYWxyZWFkeSBiZSBjYXVnaHQgYnkgdmFs
aWRhdGVNZXRob2RPdmVycmlkZS4KKyAgICAgICAgICAhKGlzUmVhY3RDbGFzc01ldGhvZCAmJiAo
c3BlY1BvbGljeSA9PT0gJ0RFRklORV9NQU5ZX01FUkdFRCcgfHwgc3BlY1BvbGljeSA9PT0gJ0RF
RklORV9NQU5ZJykpID8gImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50
KGZhbHNlLCAnUmVhY3RDbGFzczogVW5leHBlY3RlZCBzcGVjIHBvbGljeSAlcyBmb3Iga2V5ICVz
IHdoZW4gbWl4aW5nIGluIGNvbXBvbmVudCBzcGVjcy4nLCBzcGVjUG9saWN5LCBuYW1lKSA6IF9w
cm9kSW52YXJpYW50KCc3NycsIHNwZWNQb2xpY3ksIG5hbWUpIDogdm9pZCAwOworCisgICAgICAg
ICAgLy8gRm9yIG1ldGhvZHMgd2hpY2ggYXJlIGRlZmluZWQgbW9yZSB0aGFuIG9uY2UsIGNhbGwg
dGhlIGV4aXN0aW5nCisgICAgICAgICAgLy8gbWV0aG9kcyBiZWZvcmUgY2FsbGluZyB0aGUgbmV3
IHByb3BlcnR5LCBtZXJnaW5nIGlmIGFwcHJvcHJpYXRlLgorICAgICAgICAgIGlmIChzcGVjUG9s
aWN5ID09PSAnREVGSU5FX01BTllfTUVSR0VEJykgeworICAgICAgICAgICAgcHJvdG9bbmFtZV0g
PSBjcmVhdGVNZXJnZWRSZXN1bHRGdW5jdGlvbihwcm90b1tuYW1lXSwgcHJvcGVydHkpOworICAg
ICAgICAgIH0gZWxzZSBpZiAoc3BlY1BvbGljeSA9PT0gJ0RFRklORV9NQU5ZJykgeworICAgICAg
ICAgICAgcHJvdG9bbmFtZV0gPSBjcmVhdGVDaGFpbmVkRnVuY3Rpb24ocHJvdG9bbmFtZV0sIHBy
b3BlcnR5KTsKKyAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgcHJvdG9b
bmFtZV0gPSBwcm9wZXJ0eTsKKyAgICAgICAgICBpZiAoImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1
Y3Rpb24nKSB7CisgICAgICAgICAgICAvLyBBZGQgdmVyYm9zZSBkaXNwbGF5TmFtZSB0byB0aGUg
ZnVuY3Rpb24sIHdoaWNoIGhlbHBzIHdoZW4gbG9va2luZworICAgICAgICAgICAgLy8gYXQgcHJv
ZmlsaW5nIHRvb2xzLgorICAgICAgICAgICAgaWYgKHR5cGVvZiBwcm9wZXJ0eSA9PT0gJ2Z1bmN0
aW9uJyAmJiBzcGVjLmRpc3BsYXlOYW1lKSB7CisgICAgICAgICAgICAgIHByb3RvW25hbWVdLmRp
c3BsYXlOYW1lID0gc3BlYy5kaXNwbGF5TmFtZSArICdfJyArIG5hbWU7CisgICAgICAgICAgICB9
CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9Cit9CisKK2Z1bmN0
aW9uIG1peFN0YXRpY1NwZWNJbnRvQ29tcG9uZW50KENvbnN0cnVjdG9yLCBzdGF0aWNzKSB7Cisg
IGlmICghc3RhdGljcykgeworICAgIHJldHVybjsKKyAgfQorICBmb3IgKHZhciBuYW1lIGluIHN0
YXRpY3MpIHsKKyAgICB2YXIgcHJvcGVydHkgPSBzdGF0aWNzW25hbWVdOworICAgIGlmICghc3Rh
dGljcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkgeworICAgICAgY29udGludWU7CisgICAgfQorCisg
ICAgdmFyIGlzUmVzZXJ2ZWQgPSBuYW1lIGluIFJFU0VSVkVEX1NQRUNfS0VZUzsKKyAgICAhIWlz
UmVzZXJ2ZWQgPyAiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFs
c2UsICdSZWFjdENsYXNzOiBZb3UgYXJlIGF0dGVtcHRpbmcgdG8gZGVmaW5lIGEgcmVzZXJ2ZWQg
cHJvcGVydHksIGAlc2AsIHRoYXQgc2hvdWxkblwndCBiZSBvbiB0aGUgInN0YXRpY3MiIGtleS4g
RGVmaW5lIGl0IGFzIGFuIGluc3RhbmNlIHByb3BlcnR5IGluc3RlYWQ7IGl0IHdpbGwgc3RpbGwg
YmUgYWNjZXNzaWJsZSBvbiB0aGUgY29uc3RydWN0b3IuJywgbmFtZSkgOiBfcHJvZEludmFyaWFu
dCgnNzgnLCBuYW1lKSA6IHZvaWQgMDsKKworICAgIHZhciBpc0luaGVyaXRlZCA9IG5hbWUgaW4g
Q29uc3RydWN0b3I7CisgICAgISFpc0luaGVyaXRlZCA/ICJkZXZlbG9wbWVudCIgIT09ICdwcm9k
dWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ1JlYWN0Q2xhc3M6IFlvdSBhcmUgYXR0ZW1wdGlu
ZyB0byBkZWZpbmUgYCVzYCBvbiB5b3VyIGNvbXBvbmVudCBtb3JlIHRoYW4gb25jZS4gVGhpcyBj
b25mbGljdCBtYXkgYmUgZHVlIHRvIGEgbWl4aW4uJywgbmFtZSkgOiBfcHJvZEludmFyaWFudCgn
NzknLCBuYW1lKSA6IHZvaWQgMDsKKyAgICBDb25zdHJ1Y3RvcltuYW1lXSA9IHByb3BlcnR5Owor
ICB9Cit9CisKKy8qKgorICogTWVyZ2UgdHdvIG9iamVjdHMsIGJ1dCB0aHJvdyBpZiBib3RoIGNv
bnRhaW4gdGhlIHNhbWUga2V5LgorICoKKyAqIEBwYXJhbSB7b2JqZWN0fSBvbmUgVGhlIGZpcnN0
IG9iamVjdCwgd2hpY2ggaXMgbXV0YXRlZC4KKyAqIEBwYXJhbSB7b2JqZWN0fSB0d28gVGhlIHNl
Y29uZCBvYmplY3QKKyAqIEByZXR1cm4ge29iamVjdH0gb25lIGFmdGVyIGl0IGhhcyBiZWVuIG11
dGF0ZWQgdG8gY29udGFpbiBldmVyeXRoaW5nIGluIHR3by4KKyAqLworZnVuY3Rpb24gbWVyZ2VJ
bnRvV2l0aE5vRHVwbGljYXRlS2V5cyhvbmUsIHR3bykgeworICAhKG9uZSAmJiB0d28gJiYgdHlw
ZW9mIG9uZSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIHR3byA9PT0gJ29iamVjdCcpID8gImRldmVs
b3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnbWVyZ2VJbnRvV2l0
aE5vRHVwbGljYXRlS2V5cygpOiBDYW5ub3QgbWVyZ2Ugbm9uLW9iamVjdHMuJykgOiBfcHJvZElu
dmFyaWFudCgnODAnKSA6IHZvaWQgMDsKKworICBmb3IgKHZhciBrZXkgaW4gdHdvKSB7CisgICAg
aWYgKHR3by5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7CisgICAgICAhKG9uZVtrZXldID09PSB1bmRl
ZmluZWQpID8gImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNl
LCAnbWVyZ2VJbnRvV2l0aE5vRHVwbGljYXRlS2V5cygpOiBUcmllZCB0byBtZXJnZSB0d28gb2Jq
ZWN0cyB3aXRoIHRoZSBzYW1lIGtleTogYCVzYC4gVGhpcyBjb25mbGljdCBtYXkgYmUgZHVlIHRv
IGEgbWl4aW47IGluIHBhcnRpY3VsYXIsIHRoaXMgbWF5IGJlIGNhdXNlZCBieSB0d28gZ2V0SW5p
dGlhbFN0YXRlKCkgb3IgZ2V0RGVmYXVsdFByb3BzKCkgbWV0aG9kcyByZXR1cm5pbmcgb2JqZWN0
cyB3aXRoIGNsYXNoaW5nIGtleXMuJywga2V5KSA6IF9wcm9kSW52YXJpYW50KCc4MScsIGtleSkg
OiB2b2lkIDA7CisgICAgICBvbmVba2V5XSA9IHR3b1trZXldOworICAgIH0KKyAgfQorICByZXR1
cm4gb25lOworfQorCisvKioKKyAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMgdHdv
IGZ1bmN0aW9ucyBhbmQgbWVyZ2VzIHRoZWlyIHJldHVybiB2YWx1ZXMuCisgKgorICogQHBhcmFt
IHtmdW5jdGlvbn0gb25lIEZ1bmN0aW9uIHRvIGludm9rZSBmaXJzdC4KKyAqIEBwYXJhbSB7ZnVu
Y3Rpb259IHR3byBGdW5jdGlvbiB0byBpbnZva2Ugc2Vjb25kLgorICogQHJldHVybiB7ZnVuY3Rp
b259IEZ1bmN0aW9uIHRoYXQgaW52b2tlcyB0aGUgdHdvIGFyZ3VtZW50IGZ1bmN0aW9ucy4KKyAq
IEBwcml2YXRlCisgKi8KK2Z1bmN0aW9uIGNyZWF0ZU1lcmdlZFJlc3VsdEZ1bmN0aW9uKG9uZSwg
dHdvKSB7CisgIHJldHVybiBmdW5jdGlvbiBtZXJnZWRSZXN1bHQoKSB7CisgICAgdmFyIGEgPSBv
bmUuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKyAgICB2YXIgYiA9IHR3by5hcHBseSh0aGlzLCBh
cmd1bWVudHMpOworICAgIGlmIChhID09IG51bGwpIHsKKyAgICAgIHJldHVybiBiOworICAgIH0g
ZWxzZSBpZiAoYiA9PSBudWxsKSB7CisgICAgICByZXR1cm4gYTsKKyAgICB9CisgICAgdmFyIGMg
PSB7fTsKKyAgICBtZXJnZUludG9XaXRoTm9EdXBsaWNhdGVLZXlzKGMsIGEpOworICAgIG1lcmdl
SW50b1dpdGhOb0R1cGxpY2F0ZUtleXMoYywgYik7CisgICAgcmV0dXJuIGM7CisgIH07Cit9CisK
Ky8qKgorICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyB0d28gZnVuY3Rpb25zIGFu
ZCBpZ25vcmVzIHRoZWlyIHJldHVybiB2YWxlcy4KKyAqCisgKiBAcGFyYW0ge2Z1bmN0aW9ufSBv
bmUgRnVuY3Rpb24gdG8gaW52b2tlIGZpcnN0LgorICogQHBhcmFtIHtmdW5jdGlvbn0gdHdvIEZ1
bmN0aW9uIHRvIGludm9rZSBzZWNvbmQuCisgKiBAcmV0dXJuIHtmdW5jdGlvbn0gRnVuY3Rpb24g
dGhhdCBpbnZva2VzIHRoZSB0d28gYXJndW1lbnQgZnVuY3Rpb25zLgorICogQHByaXZhdGUKKyAq
LworZnVuY3Rpb24gY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uKG9uZSwgdHdvKSB7CisgIHJldHVybiBm
dW5jdGlvbiBjaGFpbmVkRnVuY3Rpb24oKSB7CisgICAgb25lLmFwcGx5KHRoaXMsIGFyZ3VtZW50
cyk7CisgICAgdHdvLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisgIH07Cit9CisKKy8qKgorICog
QmluZHMgYSBtZXRob2QgdG8gdGhlIGNvbXBvbmVudC4KKyAqCisgKiBAcGFyYW0ge29iamVjdH0g
Y29tcG9uZW50IENvbXBvbmVudCB3aG9zZSBtZXRob2QgaXMgZ29pbmcgdG8gYmUgYm91bmQuCisg
KiBAcGFyYW0ge2Z1bmN0aW9ufSBtZXRob2QgTWV0aG9kIHRvIGJlIGJvdW5kLgorICogQHJldHVy
biB7ZnVuY3Rpb259IFRoZSBib3VuZCBtZXRob2QuCisgKi8KK2Z1bmN0aW9uIGJpbmRBdXRvQmlu
ZE1ldGhvZChjb21wb25lbnQsIG1ldGhvZCkgeworICB2YXIgYm91bmRNZXRob2QgPSBtZXRob2Qu
YmluZChjb21wb25lbnQpOworICBpZiAoImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nKSB7
CisgICAgYm91bmRNZXRob2QuX19yZWFjdEJvdW5kQ29udGV4dCA9IGNvbXBvbmVudDsKKyAgICBi
b3VuZE1ldGhvZC5fX3JlYWN0Qm91bmRNZXRob2QgPSBtZXRob2Q7CisgICAgYm91bmRNZXRob2Qu
X19yZWFjdEJvdW5kQXJndW1lbnRzID0gbnVsbDsKKyAgICB2YXIgY29tcG9uZW50TmFtZSA9IGNv
bXBvbmVudC5jb25zdHJ1Y3Rvci5kaXNwbGF5TmFtZTsKKyAgICB2YXIgX2JpbmQgPSBib3VuZE1l
dGhvZC5iaW5kOworICAgIGJvdW5kTWV0aG9kLmJpbmQgPSBmdW5jdGlvbiAobmV3VGhpcykgewor
ICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShfbGVu
ID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7Cisg
ICAgICAgIGFyZ3NbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldOworICAgICAgfQorCisgICAg
ICAvLyBVc2VyIGlzIHRyeWluZyB0byBiaW5kKCkgYW4gYXV0b2JvdW5kIG1ldGhvZDsgd2UgZWZm
ZWN0aXZlbHkgd2lsbAorICAgICAgLy8gaWdub3JlIHRoZSB2YWx1ZSBvZiAidGhpcyIgdGhhdCB0
aGUgdXNlciBpcyB0cnlpbmcgdG8gdXNlLCBzbworICAgICAgLy8gbGV0J3Mgd2Fybi4KKyAgICAg
IGlmIChuZXdUaGlzICE9PSBjb21wb25lbnQgJiYgbmV3VGhpcyAhPT0gbnVsbCkgeworICAgICAg
ICAiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGZhbHNlLCAnYmluZCgp
OiBSZWFjdCBjb21wb25lbnQgbWV0aG9kcyBtYXkgb25seSBiZSBib3VuZCB0byB0aGUgJyArICdj
b21wb25lbnQgaW5zdGFuY2UuIFNlZSAlcycsIGNvbXBvbmVudE5hbWUpIDogdm9pZCAwOworICAg
ICAgfSBlbHNlIGlmICghYXJncy5sZW5ndGgpIHsKKyAgICAgICAgImRldmVsb3BtZW50IiAhPT0g
J3Byb2R1Y3Rpb24nID8gd2FybmluZyhmYWxzZSwgJ2JpbmQoKTogWW91IGFyZSBiaW5kaW5nIGEg
Y29tcG9uZW50IG1ldGhvZCB0byB0aGUgY29tcG9uZW50LiAnICsgJ1JlYWN0IGRvZXMgdGhpcyBm
b3IgeW91IGF1dG9tYXRpY2FsbHkgaW4gYSBoaWdoLXBlcmZvcm1hbmNlICcgKyAnd2F5LCBzbyB5
b3UgY2FuIHNhZmVseSByZW1vdmUgdGhpcyBjYWxsLiBTZWUgJXMnLCBjb21wb25lbnROYW1lKSA6
IHZvaWQgMDsKKyAgICAgICAgcmV0dXJuIGJvdW5kTWV0aG9kOworICAgICAgfQorICAgICAgdmFy
IHJlYm91bmRNZXRob2QgPSBfYmluZC5hcHBseShib3VuZE1ldGhvZCwgYXJndW1lbnRzKTsKKyAg
ICAgIHJlYm91bmRNZXRob2QuX19yZWFjdEJvdW5kQ29udGV4dCA9IGNvbXBvbmVudDsKKyAgICAg
IHJlYm91bmRNZXRob2QuX19yZWFjdEJvdW5kTWV0aG9kID0gbWV0aG9kOworICAgICAgcmVib3Vu
ZE1ldGhvZC5fX3JlYWN0Qm91bmRBcmd1bWVudHMgPSBhcmdzOworICAgICAgcmV0dXJuIHJlYm91
bmRNZXRob2Q7CisgICAgfTsKKyAgfQorICByZXR1cm4gYm91bmRNZXRob2Q7Cit9CisKKy8qKgor
ICogQmluZHMgYWxsIGF1dG8tYm91bmQgbWV0aG9kcyBpbiBhIGNvbXBvbmVudC4KKyAqCisgKiBA
cGFyYW0ge29iamVjdH0gY29tcG9uZW50IENvbXBvbmVudCB3aG9zZSBtZXRob2QgaXMgZ29pbmcg
dG8gYmUgYm91bmQuCisgKi8KK2Z1bmN0aW9uIGJpbmRBdXRvQmluZE1ldGhvZHMoY29tcG9uZW50
KSB7CisgIHZhciBwYWlycyA9IGNvbXBvbmVudC5fX3JlYWN0QXV0b0JpbmRQYWlyczsKKyAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBwYWlycy5sZW5ndGg7IGkgKz0gMikgeworICAgIHZhciBhdXRvQmlu
ZEtleSA9IHBhaXJzW2ldOworICAgIHZhciBtZXRob2QgPSBwYWlyc1tpICsgMV07CisgICAgY29t
cG9uZW50W2F1dG9CaW5kS2V5XSA9IGJpbmRBdXRvQmluZE1ldGhvZChjb21wb25lbnQsIG1ldGhv
ZCk7CisgIH0KK30KKworLyoqCisgKiBBZGQgbW9yZSB0byB0aGUgUmVhY3RDbGFzcyBiYXNlIGNs
YXNzLiBUaGVzZSBhcmUgYWxsIGxlZ2FjeSBmZWF0dXJlcyBhbmQKKyAqIHRoZXJlZm9yZSBub3Qg
YWxyZWFkeSBwYXJ0IG9mIHRoZSBtb2Rlcm4gUmVhY3RDb21wb25lbnQuCisgKi8KK3ZhciBSZWFj
dENsYXNzTWl4aW4gPSB7CisKKyAgLyoqCisgICAqIFRPRE86IFRoaXMgd2lsbCBiZSBkZXByZWNh
dGVkIGJlY2F1c2Ugc3RhdGUgc2hvdWxkIGFsd2F5cyBrZWVwIGEgY29uc2lzdGVudAorICAgKiB0
eXBlIHNpZ25hdHVyZSBhbmQgdGhlIG9ubHkgdXNlIGNhc2UgZm9yIHRoaXMsIGlzIHRvIGF2b2lk
IHRoYXQuCisgICAqLworICByZXBsYWNlU3RhdGU6IGZ1bmN0aW9uIChuZXdTdGF0ZSwgY2FsbGJh
Y2spIHsKKyAgICB0aGlzLnVwZGF0ZXIuZW5xdWV1ZVJlcGxhY2VTdGF0ZSh0aGlzLCBuZXdTdGF0
ZSk7CisgICAgaWYgKGNhbGxiYWNrKSB7CisgICAgICB0aGlzLnVwZGF0ZXIuZW5xdWV1ZUNhbGxi
YWNrKHRoaXMsIGNhbGxiYWNrLCAncmVwbGFjZVN0YXRlJyk7CisgICAgfQorICB9LAorCisgIC8q
KgorICAgKiBDaGVja3Mgd2hldGhlciBvciBub3QgdGhpcyBjb21wb3NpdGUgY29tcG9uZW50IGlz
IG1vdW50ZWQuCisgICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgbW91bnRlZCwgZmFsc2Ug
b3RoZXJ3aXNlLgorICAgKiBAcHJvdGVjdGVkCisgICAqIEBmaW5hbAorICAgKi8KKyAgaXNNb3Vu
dGVkOiBmdW5jdGlvbiAoKSB7CisgICAgcmV0dXJuIHRoaXMudXBkYXRlci5pc01vdW50ZWQodGhp
cyk7CisgIH0KK307CisKK3ZhciBSZWFjdENsYXNzQ29tcG9uZW50ID0gZnVuY3Rpb24gKCkge307
CitfYXNzaWduKFJlYWN0Q2xhc3NDb21wb25lbnQucHJvdG90eXBlLCBSZWFjdENvbXBvbmVudC5w
cm90b3R5cGUsIFJlYWN0Q2xhc3NNaXhpbik7CisKK3ZhciBkaWRXYXJuRGVwcmVjYXRlZCA9IGZh
bHNlOworCisvKioKKyAqIE1vZHVsZSBmb3IgY3JlYXRpbmcgY29tcG9zaXRlIGNvbXBvbmVudHMu
CisgKgorICogQGNsYXNzIFJlYWN0Q2xhc3MKKyAqLwordmFyIFJlYWN0Q2xhc3MgPSB7CisKKyAg
LyoqCisgICAqIENyZWF0ZXMgYSBjb21wb3NpdGUgY29tcG9uZW50IGNsYXNzIGdpdmVuIGEgY2xh
c3Mgc3BlY2lmaWNhdGlvbi4KKyAgICogU2VlIGh0dHBzOi8vZmFjZWJvb2suZ2l0aHViLmlvL3Jl
YWN0L2RvY3MvdG9wLWxldmVsLWFwaS5odG1sI3JlYWN0LmNyZWF0ZWNsYXNzCisgICAqCisgICAq
IEBwYXJhbSB7b2JqZWN0fSBzcGVjIENsYXNzIHNwZWNpZmljYXRpb24gKHdoaWNoIG11c3QgZGVm
aW5lIGByZW5kZXJgKS4KKyAgICogQHJldHVybiB7ZnVuY3Rpb259IENvbXBvbmVudCBjb25zdHJ1
Y3RvciBmdW5jdGlvbi4KKyAgICogQHB1YmxpYworICAgKi8KKyAgY3JlYXRlQ2xhc3M6IGZ1bmN0
aW9uIChzcGVjKSB7CisgICAgaWYgKCJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJykgewor
ICAgICAgImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhkaWRXYXJuRGVw
cmVjYXRlZCwgJyVzOiBSZWFjdC5jcmVhdGVDbGFzcyBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJl
IHJlbW92ZWQgaW4gdmVyc2lvbiAxNi4gJyArICdVc2UgcGxhaW4gSmF2YVNjcmlwdCBjbGFzc2Vz
IGluc3RlYWQuIElmIHlvdVwncmUgbm90IHlldCByZWFkeSB0byAnICsgJ21pZ3JhdGUsIGNyZWF0
ZS1yZWFjdC1jbGFzcyBpcyBhdmFpbGFibGUgb24gbnBtIGFzIGEgJyArICdkcm9wLWluIHJlcGxh
Y2VtZW50LicsIHNwZWMgJiYgc3BlYy5kaXNwbGF5TmFtZSB8fCAnQSBDb21wb25lbnQnKSA6IHZv
aWQgMDsKKyAgICAgIGRpZFdhcm5EZXByZWNhdGVkID0gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyBU
byBrZWVwIG91ciB3YXJuaW5ncyBtb3JlIHVuZGVyc3RhbmRhYmxlLCB3ZSdsbCB1c2UgYSBsaXR0
bGUgaGFjayBoZXJlIHRvCisgICAgLy8gZW5zdXJlIHRoYXQgQ29uc3RydWN0b3IubmFtZSAhPT0g
J0NvbnN0cnVjdG9yJy4gVGhpcyBtYWtlcyBzdXJlIHdlIGRvbid0CisgICAgLy8gdW5uZWNlc3Nh
cmlseSBpZGVudGlmeSBhIGNsYXNzIHdpdGhvdXQgZGlzcGxheU5hbWUgYXMgJ0NvbnN0cnVjdG9y
Jy4KKyAgICB2YXIgQ29uc3RydWN0b3IgPSBpZGVudGl0eShmdW5jdGlvbiAocHJvcHMsIGNvbnRl
eHQsIHVwZGF0ZXIpIHsKKyAgICAgIC8vIFRoaXMgY29uc3RydWN0b3IgZ2V0cyBvdmVycmlkZGVu
IGJ5IG1vY2tzLiBUaGUgYXJndW1lbnQgaXMgdXNlZAorICAgICAgLy8gYnkgbW9ja3MgdG8gYXNz
ZXJ0IG9uIHdoYXQgZ2V0cyBtb3VudGVkLgorCisgICAgICBpZiAoImRldmVsb3BtZW50IiAhPT0g
J3Byb2R1Y3Rpb24nKSB7CisgICAgICAgICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/
IHdhcm5pbmcodGhpcyBpbnN0YW5jZW9mIENvbnN0cnVjdG9yLCAnU29tZXRoaW5nIGlzIGNhbGxp
bmcgYSBSZWFjdCBjb21wb25lbnQgZGlyZWN0bHkuIFVzZSBhIGZhY3Rvcnkgb3IgJyArICdKU1gg
aW5zdGVhZC4gU2VlOiBodHRwczovL2ZiLm1lL3JlYWN0LWxlZ2FjeWZhY3RvcnknKSA6IHZvaWQg
MDsKKyAgICAgIH0KKworICAgICAgLy8gV2lyZSB1cCBhdXRvLWJpbmRpbmcKKyAgICAgIGlmICh0
aGlzLl9fcmVhY3RBdXRvQmluZFBhaXJzLmxlbmd0aCkgeworICAgICAgICBiaW5kQXV0b0JpbmRN
ZXRob2RzKHRoaXMpOworICAgICAgfQorCisgICAgICB0aGlzLnByb3BzID0gcHJvcHM7CisgICAg
ICB0aGlzLmNvbnRleHQgPSBjb250ZXh0OworICAgICAgdGhpcy5yZWZzID0gZW1wdHlPYmplY3Q7
CisgICAgICB0aGlzLnVwZGF0ZXIgPSB1cGRhdGVyIHx8IFJlYWN0Tm9vcFVwZGF0ZVF1ZXVlOwor
CisgICAgICB0aGlzLnN0YXRlID0gbnVsbDsKKworICAgICAgLy8gUmVhY3RDbGFzc2VzIGRvZXNu
J3QgaGF2ZSBjb25zdHJ1Y3RvcnMuIEluc3RlYWQsIHRoZXkgdXNlIHRoZQorICAgICAgLy8gZ2V0
SW5pdGlhbFN0YXRlIGFuZCBjb21wb25lbnRXaWxsTW91bnQgbWV0aG9kcyBmb3IgaW5pdGlhbGl6
YXRpb24uCisKKyAgICAgIHZhciBpbml0aWFsU3RhdGUgPSB0aGlzLmdldEluaXRpYWxTdGF0ZSA/
IHRoaXMuZ2V0SW5pdGlhbFN0YXRlKCkgOiBudWxsOworICAgICAgaWYgKCJkZXZlbG9wbWVudCIg
IT09ICdwcm9kdWN0aW9uJykgeworICAgICAgICAvLyBXZSBhbGxvdyBhdXRvLW1vY2tzIHRvIHBy
b2NlZWQgYXMgaWYgdGhleSdyZSByZXR1cm5pbmcgbnVsbC4KKyAgICAgICAgaWYgKGluaXRpYWxT
dGF0ZSA9PT0gdW5kZWZpbmVkICYmIHRoaXMuZ2V0SW5pdGlhbFN0YXRlLl9pc01vY2tGdW5jdGlv
bikgeworICAgICAgICAgIC8vIFRoaXMgaXMgcHJvYmFibHkgYmFkIHByYWN0aWNlLiBDb25zaWRl
ciB3YXJuaW5nIGhlcmUgYW5kCisgICAgICAgICAgLy8gZGVwcmVjYXRpbmcgdGhpcyBjb252ZW5p
ZW5jZS4KKyAgICAgICAgICBpbml0aWFsU3RhdGUgPSBudWxsOworICAgICAgICB9CisgICAgICB9
CisgICAgICAhKHR5cGVvZiBpbml0aWFsU3RhdGUgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0Fy
cmF5KGluaXRpYWxTdGF0ZSkpID8gImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52
YXJpYW50KGZhbHNlLCAnJXMuZ2V0SW5pdGlhbFN0YXRlKCk6IG11c3QgcmV0dXJuIGFuIG9iamVj
dCBvciBudWxsJywgQ29uc3RydWN0b3IuZGlzcGxheU5hbWUgfHwgJ1JlYWN0Q29tcG9zaXRlQ29t
cG9uZW50JykgOiBfcHJvZEludmFyaWFudCgnODInLCBDb25zdHJ1Y3Rvci5kaXNwbGF5TmFtZSB8
fCAnUmVhY3RDb21wb3NpdGVDb21wb25lbnQnKSA6IHZvaWQgMDsKKworICAgICAgdGhpcy5zdGF0
ZSA9IGluaXRpYWxTdGF0ZTsKKyAgICB9KTsKKyAgICBDb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBu
ZXcgUmVhY3RDbGFzc0NvbXBvbmVudCgpOworICAgIENvbnN0cnVjdG9yLnByb3RvdHlwZS5jb25z
dHJ1Y3RvciA9IENvbnN0cnVjdG9yOworICAgIENvbnN0cnVjdG9yLnByb3RvdHlwZS5fX3JlYWN0
QXV0b0JpbmRQYWlycyA9IFtdOworCisgICAgaW5qZWN0ZWRNaXhpbnMuZm9yRWFjaChtaXhTcGVj
SW50b0NvbXBvbmVudC5iaW5kKG51bGwsIENvbnN0cnVjdG9yKSk7CisKKyAgICBtaXhTcGVjSW50
b0NvbXBvbmVudChDb25zdHJ1Y3Rvciwgc3BlYyk7CisKKyAgICAvLyBJbml0aWFsaXplIHRoZSBk
ZWZhdWx0UHJvcHMgcHJvcGVydHkgYWZ0ZXIgYWxsIG1peGlucyBoYXZlIGJlZW4gbWVyZ2VkLgor
ICAgIGlmIChDb25zdHJ1Y3Rvci5nZXREZWZhdWx0UHJvcHMpIHsKKyAgICAgIENvbnN0cnVjdG9y
LmRlZmF1bHRQcm9wcyA9IENvbnN0cnVjdG9yLmdldERlZmF1bHRQcm9wcygpOworICAgIH0KKwor
ICAgIGlmICgiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicpIHsKKyAgICAgIC8vIFRoaXMg
aXMgYSB0YWcgdG8gaW5kaWNhdGUgdGhhdCB0aGUgdXNlIG9mIHRoZXNlIG1ldGhvZCBuYW1lcyBp
cyBvaywKKyAgICAgIC8vIHNpbmNlIGl0J3MgdXNlZCB3aXRoIGNyZWF0ZUNsYXNzLiBJZiBpdCdz
IG5vdCwgdGhlbiBpdCdzIGxpa2VseSBhCisgICAgICAvLyBtaXN0YWtlIHNvIHdlJ2xsIHdhcm4g
eW91IHRvIHVzZSB0aGUgc3RhdGljIHByb3BlcnR5LCBwcm9wZXJ0eQorICAgICAgLy8gaW5pdGlh
bGl6ZXIgb3IgY29uc3RydWN0b3IgcmVzcGVjdGl2ZWx5LgorICAgICAgaWYgKENvbnN0cnVjdG9y
LmdldERlZmF1bHRQcm9wcykgeworICAgICAgICBDb25zdHJ1Y3Rvci5nZXREZWZhdWx0UHJvcHMu
aXNSZWFjdENsYXNzQXBwcm92ZWQgPSB7fTsKKyAgICAgIH0KKyAgICAgIGlmIChDb25zdHJ1Y3Rv
ci5wcm90b3R5cGUuZ2V0SW5pdGlhbFN0YXRlKSB7CisgICAgICAgIENvbnN0cnVjdG9yLnByb3Rv
dHlwZS5nZXRJbml0aWFsU3RhdGUuaXNSZWFjdENsYXNzQXBwcm92ZWQgPSB7fTsKKyAgICAgIH0K
KyAgICB9CisKKyAgICAhQ29uc3RydWN0b3IucHJvdG90eXBlLnJlbmRlciA/ICJkZXZlbG9wbWVu
dCIgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ2NyZWF0ZUNsYXNzKC4uLik6
IENsYXNzIHNwZWNpZmljYXRpb24gbXVzdCBpbXBsZW1lbnQgYSBgcmVuZGVyYCBtZXRob2QuJykg
OiBfcHJvZEludmFyaWFudCgnODMnKSA6IHZvaWQgMDsKKworICAgIGlmICgiZGV2ZWxvcG1lbnQi
ICE9PSAncHJvZHVjdGlvbicpIHsKKyAgICAgICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9u
JyA/IHdhcm5pbmcoIUNvbnN0cnVjdG9yLnByb3RvdHlwZS5jb21wb25lbnRTaG91bGRVcGRhdGUs
ICclcyBoYXMgYSBtZXRob2QgY2FsbGVkICcgKyAnY29tcG9uZW50U2hvdWxkVXBkYXRlKCkuIERp
ZCB5b3UgbWVhbiBzaG91bGRDb21wb25lbnRVcGRhdGUoKT8gJyArICdUaGUgbmFtZSBpcyBwaHJh
c2VkIGFzIGEgcXVlc3Rpb24gYmVjYXVzZSB0aGUgZnVuY3Rpb24gaXMgJyArICdleHBlY3RlZCB0
byByZXR1cm4gYSB2YWx1ZS4nLCBzcGVjLmRpc3BsYXlOYW1lIHx8ICdBIGNvbXBvbmVudCcpIDog
dm9pZCAwOworICAgICAgImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZygh
Q29uc3RydWN0b3IucHJvdG90eXBlLmNvbXBvbmVudFdpbGxSZWNpZXZlUHJvcHMsICclcyBoYXMg
YSBtZXRob2QgY2FsbGVkICcgKyAnY29tcG9uZW50V2lsbFJlY2lldmVQcm9wcygpLiBEaWQgeW91
IG1lYW4gY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcygpPycsIHNwZWMuZGlzcGxheU5hbWUgfHwg
J0EgY29tcG9uZW50JykgOiB2b2lkIDA7CisgICAgfQorCisgICAgLy8gUmVkdWNlIHRpbWUgc3Bl
bnQgZG9pbmcgbG9va3VwcyBieSBzZXR0aW5nIHRoZXNlIG9uIHRoZSBwcm90b3R5cGUuCisgICAg
Zm9yICh2YXIgbWV0aG9kTmFtZSBpbiBSZWFjdENsYXNzSW50ZXJmYWNlKSB7CisgICAgICBpZiAo
IUNvbnN0cnVjdG9yLnByb3RvdHlwZVttZXRob2ROYW1lXSkgeworICAgICAgICBDb25zdHJ1Y3Rv
ci5wcm90b3R5cGVbbWV0aG9kTmFtZV0gPSBudWxsOworICAgICAgfQorICAgIH0KKworICAgIHJl
dHVybiBDb25zdHJ1Y3RvcjsKKyAgfSwKKworICBpbmplY3Rpb246IHsKKyAgICBpbmplY3RNaXhp
bjogZnVuY3Rpb24gKG1peGluKSB7CisgICAgICBpbmplY3RlZE1peGlucy5wdXNoKG1peGluKTsK
KyAgICB9CisgIH0KKworfTsKKworbW9kdWxlLmV4cG9ydHMgPSBSZWFjdENsYXNzOworfSx7IjEx
IjoxMSwiMTYiOjE2LCIyMSI6MjEsIjIyIjoyMiwiMzkiOjM5LCI0NiI6NDYsIjQ3Ijo0NywiNDki
OjQ5LCI1MCI6NTB9XSwxMTpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7CisvKioK
KyAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuCisgKiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhl
IEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZQorICogTElDRU5TRSBmaWxlIGluIHRoZSBy
b290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50Cisg
KiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRo
ZSBzYW1lIGRpcmVjdG9yeS4KKyAqCisgKi8KKworJ3VzZSBzdHJpY3QnOworCit2YXIgX3Byb2RJ
bnZhcmlhbnQgPSBfZGVyZXFfKDM5KTsKKwordmFyIFJlYWN0Tm9vcFVwZGF0ZVF1ZXVlID0gX2Rl
cmVxXygyMSk7CisKK3ZhciBjYW5EZWZpbmVQcm9wZXJ0eSA9IF9kZXJlcV8oMzMpOwordmFyIGVt
cHR5T2JqZWN0ID0gX2RlcmVxXyg0Nik7Cit2YXIgaW52YXJpYW50ID0gX2RlcmVxXyg0Nyk7Cit2
YXIgd2FybmluZyA9IF9kZXJlcV8oNDkpOworCisvKioKKyAqIEJhc2UgY2xhc3MgaGVscGVycyBm
b3IgdGhlIHVwZGF0aW5nIHN0YXRlIG9mIGEgY29tcG9uZW50LgorICovCitmdW5jdGlvbiBSZWFj
dENvbXBvbmVudChwcm9wcywgY29udGV4dCwgdXBkYXRlcikgeworICB0aGlzLnByb3BzID0gcHJv
cHM7CisgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7CisgIHRoaXMucmVmcyA9IGVtcHR5T2JqZWN0
OworICAvLyBXZSBpbml0aWFsaXplIHRoZSBkZWZhdWx0IHVwZGF0ZXIgYnV0IHRoZSByZWFsIG9u
ZSBnZXRzIGluamVjdGVkIGJ5IHRoZQorICAvLyByZW5kZXJlci4KKyAgdGhpcy51cGRhdGVyID0g
dXBkYXRlciB8fCBSZWFjdE5vb3BVcGRhdGVRdWV1ZTsKK30KKworUmVhY3RDb21wb25lbnQucHJv
dG90eXBlLmlzUmVhY3RDb21wb25lbnQgPSB7fTsKKworLyoqCisgKiBTZXRzIGEgc3Vic2V0IG9m
IHRoZSBzdGF0ZS4gQWx3YXlzIHVzZSB0aGlzIHRvIG11dGF0ZQorICogc3RhdGUuIFlvdSBzaG91
bGQgdHJlYXQgYHRoaXMuc3RhdGVgIGFzIGltbXV0YWJsZS4KKyAqCisgKiBUaGVyZSBpcyBubyBn
dWFyYW50ZWUgdGhhdCBgdGhpcy5zdGF0ZWAgd2lsbCBiZSBpbW1lZGlhdGVseSB1cGRhdGVkLCBz
bworICogYWNjZXNzaW5nIGB0aGlzLnN0YXRlYCBhZnRlciBjYWxsaW5nIHRoaXMgbWV0aG9kIG1h
eSByZXR1cm4gdGhlIG9sZCB2YWx1ZS4KKyAqCisgKiBUaGVyZSBpcyBubyBndWFyYW50ZWUgdGhh
dCBjYWxscyB0byBgc2V0U3RhdGVgIHdpbGwgcnVuIHN5bmNocm9ub3VzbHksCisgKiBhcyB0aGV5
IG1heSBldmVudHVhbGx5IGJlIGJhdGNoZWQgdG9nZXRoZXIuICBZb3UgY2FuIHByb3ZpZGUgYW4g
b3B0aW9uYWwKKyAqIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBleGVjdXRlZCB3aGVuIHRoZSBjYWxs
IHRvIHNldFN0YXRlIGlzIGFjdHVhbGx5CisgKiBjb21wbGV0ZWQuCisgKgorICogV2hlbiBhIGZ1
bmN0aW9uIGlzIHByb3ZpZGVkIHRvIHNldFN0YXRlLCBpdCB3aWxsIGJlIGNhbGxlZCBhdCBzb21l
IHBvaW50IGluCisgKiB0aGUgZnV0dXJlIChub3Qgc3luY2hyb25vdXNseSkuIEl0IHdpbGwgYmUg
Y2FsbGVkIHdpdGggdGhlIHVwIHRvIGRhdGUKKyAqIGNvbXBvbmVudCBhcmd1bWVudHMgKHN0YXRl
LCBwcm9wcywgY29udGV4dCkuIFRoZXNlIHZhbHVlcyBjYW4gYmUgZGlmZmVyZW50CisgKiBmcm9t
IHRoaXMuKiBiZWNhdXNlIHlvdXIgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBhZnRlciByZWNlaXZl
UHJvcHMgYnV0IGJlZm9yZQorICogc2hvdWxkQ29tcG9uZW50VXBkYXRlLCBhbmQgdGhpcyBuZXcg
c3RhdGUsIHByb3BzLCBhbmQgY29udGV4dCB3aWxsIG5vdCB5ZXQgYmUKKyAqIGFzc2lnbmVkIHRv
IHRoaXMuCisgKgorICogQHBhcmFtIHtvYmplY3R8ZnVuY3Rpb259IHBhcnRpYWxTdGF0ZSBOZXh0
IHBhcnRpYWwgc3RhdGUgb3IgZnVuY3Rpb24gdG8KKyAqICAgICAgICBwcm9kdWNlIG5leHQgcGFy
dGlhbCBzdGF0ZSB0byBiZSBtZXJnZWQgd2l0aCBjdXJyZW50IHN0YXRlLgorICogQHBhcmFtIHs/
ZnVuY3Rpb259IGNhbGxiYWNrIENhbGxlZCBhZnRlciBzdGF0ZSBpcyB1cGRhdGVkLgorICogQGZp
bmFsCisgKiBAcHJvdGVjdGVkCisgKi8KK1JlYWN0Q29tcG9uZW50LnByb3RvdHlwZS5zZXRTdGF0
ZSA9IGZ1bmN0aW9uIChwYXJ0aWFsU3RhdGUsIGNhbGxiYWNrKSB7CisgICEodHlwZW9mIHBhcnRp
YWxTdGF0ZSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIHBhcnRpYWxTdGF0ZSA9PT0gJ2Z1bmN0aW9u
JyB8fCBwYXJ0aWFsU3RhdGUgPT0gbnVsbCkgPyAiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlv
bicgPyBpbnZhcmlhbnQoZmFsc2UsICdzZXRTdGF0ZSguLi4pOiB0YWtlcyBhbiBvYmplY3Qgb2Yg
c3RhdGUgdmFyaWFibGVzIHRvIHVwZGF0ZSBvciBhIGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgYW4g
b2JqZWN0IG9mIHN0YXRlIHZhcmlhYmxlcy4nKSA6IF9wcm9kSW52YXJpYW50KCc4NScpIDogdm9p
ZCAwOworICB0aGlzLnVwZGF0ZXIuZW5xdWV1ZVNldFN0YXRlKHRoaXMsIHBhcnRpYWxTdGF0ZSk7
CisgIGlmIChjYWxsYmFjaykgeworICAgIHRoaXMudXBkYXRlci5lbnF1ZXVlQ2FsbGJhY2sodGhp
cywgY2FsbGJhY2ssICdzZXRTdGF0ZScpOworICB9Cit9OworCisvKioKKyAqIEZvcmNlcyBhbiB1
cGRhdGUuIFRoaXMgc2hvdWxkIG9ubHkgYmUgaW52b2tlZCB3aGVuIGl0IGlzIGtub3duIHdpdGgK
KyAqIGNlcnRhaW50eSB0aGF0IHdlIGFyZSAqKm5vdCoqIGluIGEgRE9NIHRyYW5zYWN0aW9uLgor
ICoKKyAqIFlvdSBtYXkgd2FudCB0byBjYWxsIHRoaXMgd2hlbiB5b3Uga25vdyB0aGF0IHNvbWUg
ZGVlcGVyIGFzcGVjdCBvZiB0aGUKKyAqIGNvbXBvbmVudCdzIHN0YXRlIGhhcyBjaGFuZ2VkIGJ1
dCBgc2V0U3RhdGVgIHdhcyBub3QgY2FsbGVkLgorICoKKyAqIFRoaXMgd2lsbCBub3QgaW52b2tl
IGBzaG91bGRDb21wb25lbnRVcGRhdGVgLCBidXQgaXQgd2lsbCBpbnZva2UKKyAqIGBjb21wb25l
bnRXaWxsVXBkYXRlYCBhbmQgYGNvbXBvbmVudERpZFVwZGF0ZWAuCisgKgorICogQHBhcmFtIHs/
ZnVuY3Rpb259IGNhbGxiYWNrIENhbGxlZCBhZnRlciB1cGRhdGUgaXMgY29tcGxldGUuCisgKiBA
ZmluYWwKKyAqIEBwcm90ZWN0ZWQKKyAqLworUmVhY3RDb21wb25lbnQucHJvdG90eXBlLmZvcmNl
VXBkYXRlID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7CisgIHRoaXMudXBkYXRlci5lbnF1ZXVlRm9y
Y2VVcGRhdGUodGhpcyk7CisgIGlmIChjYWxsYmFjaykgeworICAgIHRoaXMudXBkYXRlci5lbnF1
ZXVlQ2FsbGJhY2sodGhpcywgY2FsbGJhY2ssICdmb3JjZVVwZGF0ZScpOworICB9Cit9OworCisv
KioKKyAqIERlcHJlY2F0ZWQgQVBJcy4gVGhlc2UgQVBJcyB1c2VkIHRvIGV4aXN0IG9uIGNsYXNz
aWMgUmVhY3QgY2xhc3NlcyBidXQgc2luY2UKKyAqIHdlIHdvdWxkIGxpa2UgdG8gZGVwcmVjYXRl
IHRoZW0sIHdlJ3JlIG5vdCBnb2luZyB0byBtb3ZlIHRoZW0gb3ZlciB0byB0aGlzCisgKiBtb2Rl
cm4gYmFzZSBjbGFzcy4gSW5zdGVhZCwgd2UgZGVmaW5lIGEgZ2V0dGVyIHRoYXQgd2FybnMgaWYg
aXQncyBhY2Nlc3NlZC4KKyAqLworaWYgKCJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJykg
eworICB2YXIgZGVwcmVjYXRlZEFQSXMgPSB7CisgICAgaXNNb3VudGVkOiBbJ2lzTW91bnRlZCcs
ICdJbnN0ZWFkLCBtYWtlIHN1cmUgdG8gY2xlYW4gdXAgc3Vic2NyaXB0aW9ucyBhbmQgcGVuZGlu
ZyByZXF1ZXN0cyBpbiAnICsgJ2NvbXBvbmVudFdpbGxVbm1vdW50IHRvIHByZXZlbnQgbWVtb3J5
IGxlYWtzLiddLAorICAgIHJlcGxhY2VTdGF0ZTogWydyZXBsYWNlU3RhdGUnLCAnUmVmYWN0b3Ig
eW91ciBjb2RlIHRvIHVzZSBzZXRTdGF0ZSBpbnN0ZWFkIChzZWUgJyArICdodHRwczovL2dpdGh1
Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzMyMzYpLiddCisgIH07CisgIHZhciBkZWZpbmVE
ZXByZWNhdGlvbldhcm5pbmcgPSBmdW5jdGlvbiAobWV0aG9kTmFtZSwgaW5mbykgeworICAgIGlm
IChjYW5EZWZpbmVQcm9wZXJ0eSkgeworICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlYWN0
Q29tcG9uZW50LnByb3RvdHlwZSwgbWV0aG9kTmFtZSwgeworICAgICAgICBnZXQ6IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgICAiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5n
KGZhbHNlLCAnJXMoLi4uKSBpcyBkZXByZWNhdGVkIGluIHBsYWluIEphdmFTY3JpcHQgUmVhY3Qg
Y2xhc3Nlcy4gJXMnLCBpbmZvWzBdLCBpbmZvWzFdKSA6IHZvaWQgMDsKKyAgICAgICAgICByZXR1
cm4gdW5kZWZpbmVkOworICAgICAgICB9CisgICAgICB9KTsKKyAgICB9CisgIH07CisgIGZvciAo
dmFyIGZuTmFtZSBpbiBkZXByZWNhdGVkQVBJcykgeworICAgIGlmIChkZXByZWNhdGVkQVBJcy5o
YXNPd25Qcm9wZXJ0eShmbk5hbWUpKSB7CisgICAgICBkZWZpbmVEZXByZWNhdGlvbldhcm5pbmco
Zm5OYW1lLCBkZXByZWNhdGVkQVBJc1tmbk5hbWVdKTsKKyAgICB9CisgIH0KK30KKworbW9kdWxl
LmV4cG9ydHMgPSBSZWFjdENvbXBvbmVudDsKK30seyIyMSI6MjEsIjMzIjozMywiMzkiOjM5LCI0
NiI6NDYsIjQ3Ijo0NywiNDkiOjQ5fV0sMTI6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9y
dHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAxNi1wcmVzZW50LCBGYWNlYm9vaywgSW5jLgorICog
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2Vk
IHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmls
ZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25h
bCBncmFudAorICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMg
ZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisgKgorICogCisgKi8KKworJ3VzZSBzdHJpY3Qn
OworCit2YXIgX3Byb2RJbnZhcmlhbnQgPSBfZGVyZXFfKDM5KTsKKwordmFyIFJlYWN0Q3VycmVu
dE93bmVyID0gX2RlcmVxXygxNCk7CisKK3ZhciBpbnZhcmlhbnQgPSBfZGVyZXFfKDQ3KTsKK3Zh
ciB3YXJuaW5nID0gX2RlcmVxXyg0OSk7CisKK2Z1bmN0aW9uIGlzTmF0aXZlKGZuKSB7CisgIC8v
IEJhc2VkIG9uIGlzTmF0aXZlKCkgZnJvbSBMb2Rhc2gKKyAgdmFyIGZ1bmNUb1N0cmluZyA9IEZ1
bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZzsKKyAgdmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0
LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTsKKyAgdmFyIHJlSXNOYXRpdmUgPSBSZWdFeHAoJ14n
ICsgZnVuY1RvU3RyaW5nCisgIC8vIFRha2UgYW4gZXhhbXBsZSBuYXRpdmUgZnVuY3Rpb24gc291
cmNlIGZvciBjb21wYXJpc29uCisgIC5jYWxsKGhhc093blByb3BlcnR5KQorICAvLyBTdHJpcCBy
ZWdleCBjaGFyYWN0ZXJzIHNvIHdlIGNhbiB1c2UgaXQgZm9yIHJlZ2V4CisgIC5yZXBsYWNlKC9b
XFxeJC4qKz8oKVtcXXt9fF0vZywgJ1xcJCYnKQorICAvLyBSZW1vdmUgaGFzT3duUHJvcGVydHkg
ZnJvbSB0aGUgdGVtcGxhdGUgdG8gbWFrZSBpdCBnZW5lcmljCisgIC5yZXBsYWNlKC9oYXNPd25Q
cm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcKCl8IGZvciAuKz8oPz1cXFxdKS9nLCAnJDEuKj8n
KSArICckJyk7CisgIHRyeSB7CisgICAgdmFyIHNvdXJjZSA9IGZ1bmNUb1N0cmluZy5jYWxsKGZu
KTsKKyAgICByZXR1cm4gcmVJc05hdGl2ZS50ZXN0KHNvdXJjZSk7CisgIH0gY2F0Y2ggKGVycikg
eworICAgIHJldHVybiBmYWxzZTsKKyAgfQorfQorCit2YXIgY2FuVXNlQ29sbGVjdGlvbnMgPQor
Ly8gQXJyYXkuZnJvbQordHlwZW9mIEFycmF5LmZyb20gPT09ICdmdW5jdGlvbicgJiYKKy8vIE1h
cAordHlwZW9mIE1hcCA9PT0gJ2Z1bmN0aW9uJyAmJiBpc05hdGl2ZShNYXApICYmCisvLyBNYXAu
cHJvdG90eXBlLmtleXMKK01hcC5wcm90b3R5cGUgIT0gbnVsbCAmJiB0eXBlb2YgTWFwLnByb3Rv
dHlwZS5rZXlzID09PSAnZnVuY3Rpb24nICYmIGlzTmF0aXZlKE1hcC5wcm90b3R5cGUua2V5cykg
JiYKKy8vIFNldAordHlwZW9mIFNldCA9PT0gJ2Z1bmN0aW9uJyAmJiBpc05hdGl2ZShTZXQpICYm
CisvLyBTZXQucHJvdG90eXBlLmtleXMKK1NldC5wcm90b3R5cGUgIT0gbnVsbCAmJiB0eXBlb2Yg
U2V0LnByb3RvdHlwZS5rZXlzID09PSAnZnVuY3Rpb24nICYmIGlzTmF0aXZlKFNldC5wcm90b3R5
cGUua2V5cyk7CisKK3ZhciBzZXRJdGVtOwordmFyIGdldEl0ZW07Cit2YXIgcmVtb3ZlSXRlbTsK
K3ZhciBnZXRJdGVtSURzOwordmFyIGFkZFJvb3Q7Cit2YXIgcmVtb3ZlUm9vdDsKK3ZhciBnZXRS
b290SURzOworCitpZiAoY2FuVXNlQ29sbGVjdGlvbnMpIHsKKyAgdmFyIGl0ZW1NYXAgPSBuZXcg
TWFwKCk7CisgIHZhciByb290SURTZXQgPSBuZXcgU2V0KCk7CisKKyAgc2V0SXRlbSA9IGZ1bmN0
aW9uIChpZCwgaXRlbSkgeworICAgIGl0ZW1NYXAuc2V0KGlkLCBpdGVtKTsKKyAgfTsKKyAgZ2V0
SXRlbSA9IGZ1bmN0aW9uIChpZCkgeworICAgIHJldHVybiBpdGVtTWFwLmdldChpZCk7CisgIH07
CisgIHJlbW92ZUl0ZW0gPSBmdW5jdGlvbiAoaWQpIHsKKyAgICBpdGVtTWFwWydkZWxldGUnXShp
ZCk7CisgIH07CisgIGdldEl0ZW1JRHMgPSBmdW5jdGlvbiAoKSB7CisgICAgcmV0dXJuIEFycmF5
LmZyb20oaXRlbU1hcC5rZXlzKCkpOworICB9OworCisgIGFkZFJvb3QgPSBmdW5jdGlvbiAoaWQp
IHsKKyAgICByb290SURTZXQuYWRkKGlkKTsKKyAgfTsKKyAgcmVtb3ZlUm9vdCA9IGZ1bmN0aW9u
IChpZCkgeworICAgIHJvb3RJRFNldFsnZGVsZXRlJ10oaWQpOworICB9OworICBnZXRSb290SURz
ID0gZnVuY3Rpb24gKCkgeworICAgIHJldHVybiBBcnJheS5mcm9tKHJvb3RJRFNldC5rZXlzKCkp
OworICB9OworfSBlbHNlIHsKKyAgdmFyIGl0ZW1CeUtleSA9IHt9OworICB2YXIgcm9vdEJ5S2V5
ID0ge307CisKKyAgLy8gVXNlIG5vbi1udW1lcmljIGtleXMgdG8gcHJldmVudCBWOCBwZXJmb3Jt
YW5jZSBpc3N1ZXM6CisgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9wdWxs
LzcyMzIKKyAgdmFyIGdldEtleUZyb21JRCA9IGZ1bmN0aW9uIChpZCkgeworICAgIHJldHVybiAn
LicgKyBpZDsKKyAgfTsKKyAgdmFyIGdldElERnJvbUtleSA9IGZ1bmN0aW9uIChrZXkpIHsKKyAg
ICByZXR1cm4gcGFyc2VJbnQoa2V5LnN1YnN0cigxKSwgMTApOworICB9OworCisgIHNldEl0ZW0g
PSBmdW5jdGlvbiAoaWQsIGl0ZW0pIHsKKyAgICB2YXIga2V5ID0gZ2V0S2V5RnJvbUlEKGlkKTsK
KyAgICBpdGVtQnlLZXlba2V5XSA9IGl0ZW07CisgIH07CisgIGdldEl0ZW0gPSBmdW5jdGlvbiAo
aWQpIHsKKyAgICB2YXIga2V5ID0gZ2V0S2V5RnJvbUlEKGlkKTsKKyAgICByZXR1cm4gaXRlbUJ5
S2V5W2tleV07CisgIH07CisgIHJlbW92ZUl0ZW0gPSBmdW5jdGlvbiAoaWQpIHsKKyAgICB2YXIg
a2V5ID0gZ2V0S2V5RnJvbUlEKGlkKTsKKyAgICBkZWxldGUgaXRlbUJ5S2V5W2tleV07CisgIH07
CisgIGdldEl0ZW1JRHMgPSBmdW5jdGlvbiAoKSB7CisgICAgcmV0dXJuIE9iamVjdC5rZXlzKGl0
ZW1CeUtleSkubWFwKGdldElERnJvbUtleSk7CisgIH07CisKKyAgYWRkUm9vdCA9IGZ1bmN0aW9u
IChpZCkgeworICAgIHZhciBrZXkgPSBnZXRLZXlGcm9tSUQoaWQpOworICAgIHJvb3RCeUtleVtr
ZXldID0gdHJ1ZTsKKyAgfTsKKyAgcmVtb3ZlUm9vdCA9IGZ1bmN0aW9uIChpZCkgeworICAgIHZh
ciBrZXkgPSBnZXRLZXlGcm9tSUQoaWQpOworICAgIGRlbGV0ZSByb290QnlLZXlba2V5XTsKKyAg
fTsKKyAgZ2V0Um9vdElEcyA9IGZ1bmN0aW9uICgpIHsKKyAgICByZXR1cm4gT2JqZWN0LmtleXMo
cm9vdEJ5S2V5KS5tYXAoZ2V0SURGcm9tS2V5KTsKKyAgfTsKK30KKwordmFyIHVubW91bnRlZElE
cyA9IFtdOworCitmdW5jdGlvbiBwdXJnZURlZXAoaWQpIHsKKyAgdmFyIGl0ZW0gPSBnZXRJdGVt
KGlkKTsKKyAgaWYgKGl0ZW0pIHsKKyAgICB2YXIgY2hpbGRJRHMgPSBpdGVtLmNoaWxkSURzOwor
CisgICAgcmVtb3ZlSXRlbShpZCk7CisgICAgY2hpbGRJRHMuZm9yRWFjaChwdXJnZURlZXApOwor
ICB9Cit9CisKK2Z1bmN0aW9uIGRlc2NyaWJlQ29tcG9uZW50RnJhbWUobmFtZSwgc291cmNlLCBv
d25lck5hbWUpIHsKKyAgcmV0dXJuICdcbiAgICBpbiAnICsgKG5hbWUgfHwgJ1Vua25vd24nKSAr
IChzb3VyY2UgPyAnIChhdCAnICsgc291cmNlLmZpbGVOYW1lLnJlcGxhY2UoL14uKltcXFwvXS8s
ICcnKSArICc6JyArIHNvdXJjZS5saW5lTnVtYmVyICsgJyknIDogb3duZXJOYW1lID8gJyAoY3Jl
YXRlZCBieSAnICsgb3duZXJOYW1lICsgJyknIDogJycpOworfQorCitmdW5jdGlvbiBnZXREaXNw
bGF5TmFtZShlbGVtZW50KSB7CisgIGlmIChlbGVtZW50ID09IG51bGwpIHsKKyAgICByZXR1cm4g
JyNlbXB0eSc7CisgIH0gZWxzZSBpZiAodHlwZW9mIGVsZW1lbnQgPT09ICdzdHJpbmcnIHx8IHR5
cGVvZiBlbGVtZW50ID09PSAnbnVtYmVyJykgeworICAgIHJldHVybiAnI3RleHQnOworICB9IGVs
c2UgaWYgKHR5cGVvZiBlbGVtZW50LnR5cGUgPT09ICdzdHJpbmcnKSB7CisgICAgcmV0dXJuIGVs
ZW1lbnQudHlwZTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gZWxlbWVudC50eXBlLmRpc3BsYXlO
YW1lIHx8IGVsZW1lbnQudHlwZS5uYW1lIHx8ICdVbmtub3duJzsKKyAgfQorfQorCitmdW5jdGlv
biBkZXNjcmliZUlEKGlkKSB7CisgIHZhciBuYW1lID0gUmVhY3RDb21wb25lbnRUcmVlSG9vay5n
ZXREaXNwbGF5TmFtZShpZCk7CisgIHZhciBlbGVtZW50ID0gUmVhY3RDb21wb25lbnRUcmVlSG9v
ay5nZXRFbGVtZW50KGlkKTsKKyAgdmFyIG93bmVySUQgPSBSZWFjdENvbXBvbmVudFRyZWVIb29r
LmdldE93bmVySUQoaWQpOworICB2YXIgb3duZXJOYW1lOworICBpZiAob3duZXJJRCkgeworICAg
IG93bmVyTmFtZSA9IFJlYWN0Q29tcG9uZW50VHJlZUhvb2suZ2V0RGlzcGxheU5hbWUob3duZXJJ
RCk7CisgIH0KKyAgImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhlbGVt
ZW50LCAnUmVhY3RDb21wb25lbnRUcmVlSG9vazogTWlzc2luZyBSZWFjdCBlbGVtZW50IGZvciBk
ZWJ1Z0lEICVzIHdoZW4gJyArICdidWlsZGluZyBzdGFjaycsIGlkKSA6IHZvaWQgMDsKKyAgcmV0
dXJuIGRlc2NyaWJlQ29tcG9uZW50RnJhbWUobmFtZSwgZWxlbWVudCAmJiBlbGVtZW50Ll9zb3Vy
Y2UsIG93bmVyTmFtZSk7Cit9CisKK3ZhciBSZWFjdENvbXBvbmVudFRyZWVIb29rID0geworICBv
blNldENoaWxkcmVuOiBmdW5jdGlvbiAoaWQsIG5leHRDaGlsZElEcykgeworICAgIHZhciBpdGVt
ID0gZ2V0SXRlbShpZCk7CisgICAgIWl0ZW0gPyAiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlv
bicgPyBpbnZhcmlhbnQoZmFsc2UsICdJdGVtIG11c3QgaGF2ZSBiZWVuIHNldCcpIDogX3Byb2RJ
bnZhcmlhbnQoJzE0NCcpIDogdm9pZCAwOworICAgIGl0ZW0uY2hpbGRJRHMgPSBuZXh0Q2hpbGRJ
RHM7CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5leHRDaGlsZElEcy5sZW5ndGg7IGkrKykg
eworICAgICAgdmFyIG5leHRDaGlsZElEID0gbmV4dENoaWxkSURzW2ldOworICAgICAgdmFyIG5l
eHRDaGlsZCA9IGdldEl0ZW0obmV4dENoaWxkSUQpOworICAgICAgIW5leHRDaGlsZCA/ICJkZXZl
bG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ0V4cGVjdGVkIGhv
b2sgZXZlbnRzIHRvIGZpcmUgZm9yIHRoZSBjaGlsZCBiZWZvcmUgaXRzIHBhcmVudCBpbmNsdWRl
cyBpdCBpbiBvblNldENoaWxkcmVuKCkuJykgOiBfcHJvZEludmFyaWFudCgnMTQwJykgOiB2b2lk
IDA7CisgICAgICAhKG5leHRDaGlsZC5jaGlsZElEcyAhPSBudWxsIHx8IHR5cGVvZiBuZXh0Q2hp
bGQuZWxlbWVudCAhPT0gJ29iamVjdCcgfHwgbmV4dENoaWxkLmVsZW1lbnQgPT0gbnVsbCkgPyAi
ZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdFeHBlY3Rl
ZCBvblNldENoaWxkcmVuKCkgdG8gZmlyZSBmb3IgYSBjb250YWluZXIgY2hpbGQgYmVmb3JlIGl0
cyBwYXJlbnQgaW5jbHVkZXMgaXQgaW4gb25TZXRDaGlsZHJlbigpLicpIDogX3Byb2RJbnZhcmlh
bnQoJzE0MScpIDogdm9pZCAwOworICAgICAgIW5leHRDaGlsZC5pc01vdW50ZWQgPyAiZGV2ZWxv
cG1lbnQiICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdFeHBlY3RlZCBvbk1v
dW50Q29tcG9uZW50KCkgdG8gZmlyZSBmb3IgdGhlIGNoaWxkIGJlZm9yZSBpdHMgcGFyZW50IGlu
Y2x1ZGVzIGl0IGluIG9uU2V0Q2hpbGRyZW4oKS4nKSA6IF9wcm9kSW52YXJpYW50KCc3MScpIDog
dm9pZCAwOworICAgICAgaWYgKG5leHRDaGlsZC5wYXJlbnRJRCA9PSBudWxsKSB7CisgICAgICAg
IG5leHRDaGlsZC5wYXJlbnRJRCA9IGlkOworICAgICAgICAvLyBUT0RPOiBUaGlzIHNob3VsZG4n
dCBiZSBuZWNlc3NhcnkgYnV0IG1vdW50aW5nIGEgbmV3IHJvb3QgZHVyaW5nIGluCisgICAgICAg
IC8vIGNvbXBvbmVudFdpbGxNb3VudCBjdXJyZW50bHkgY2F1c2VzIG5vdC15ZXQtbW91bnRlZCBj
b21wb25lbnRzIHRvCisgICAgICAgIC8vIGJlIHB1cmdlZCBmcm9tIG91ciB0cmVlIGRhdGEgc28g
dGhlaXIgcGFyZW50IGlkIGlzIG1pc3NpbmcuCisgICAgICB9CisgICAgICAhKG5leHRDaGlsZC5w
YXJlbnRJRCA9PT0gaWQpID8gImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJp
YW50KGZhbHNlLCAnRXhwZWN0ZWQgb25CZWZvcmVNb3VudENvbXBvbmVudCgpIHBhcmVudCBhbmQg
b25TZXRDaGlsZHJlbigpIHRvIGJlIGNvbnNpc3RlbnQgKCVzIGhhcyBwYXJlbnRzICVzIGFuZCAl
cykuJywgbmV4dENoaWxkSUQsIG5leHRDaGlsZC5wYXJlbnRJRCwgaWQpIDogX3Byb2RJbnZhcmlh
bnQoJzE0MicsIG5leHRDaGlsZElELCBuZXh0Q2hpbGQucGFyZW50SUQsIGlkKSA6IHZvaWQgMDsK
KyAgICB9CisgIH0sCisgIG9uQmVmb3JlTW91bnRDb21wb25lbnQ6IGZ1bmN0aW9uIChpZCwgZWxl
bWVudCwgcGFyZW50SUQpIHsKKyAgICB2YXIgaXRlbSA9IHsKKyAgICAgIGVsZW1lbnQ6IGVsZW1l
bnQsCisgICAgICBwYXJlbnRJRDogcGFyZW50SUQsCisgICAgICB0ZXh0OiBudWxsLAorICAgICAg
Y2hpbGRJRHM6IFtdLAorICAgICAgaXNNb3VudGVkOiBmYWxzZSwKKyAgICAgIHVwZGF0ZUNvdW50
OiAwCisgICAgfTsKKyAgICBzZXRJdGVtKGlkLCBpdGVtKTsKKyAgfSwKKyAgb25CZWZvcmVVcGRh
dGVDb21wb25lbnQ6IGZ1bmN0aW9uIChpZCwgZWxlbWVudCkgeworICAgIHZhciBpdGVtID0gZ2V0
SXRlbShpZCk7CisgICAgaWYgKCFpdGVtIHx8ICFpdGVtLmlzTW91bnRlZCkgeworICAgICAgLy8g
V2UgbWF5IGVuZCB1cCBoZXJlIGFzIGEgcmVzdWx0IG9mIHNldFN0YXRlKCkgaW4gY29tcG9uZW50
V2lsbFVubW91bnQoKS4KKyAgICAgIC8vIEluIHRoaXMgY2FzZSwgaWdub3JlIHRoZSBlbGVtZW50
LgorICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpdGVtLmVsZW1lbnQgPSBlbGVtZW50OworICB9
LAorICBvbk1vdW50Q29tcG9uZW50OiBmdW5jdGlvbiAoaWQpIHsKKyAgICB2YXIgaXRlbSA9IGdl
dEl0ZW0oaWQpOworICAgICFpdGVtID8gImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8g
aW52YXJpYW50KGZhbHNlLCAnSXRlbSBtdXN0IGhhdmUgYmVlbiBzZXQnKSA6IF9wcm9kSW52YXJp
YW50KCcxNDQnKSA6IHZvaWQgMDsKKyAgICBpdGVtLmlzTW91bnRlZCA9IHRydWU7CisgICAgdmFy
IGlzUm9vdCA9IGl0ZW0ucGFyZW50SUQgPT09IDA7CisgICAgaWYgKGlzUm9vdCkgeworICAgICAg
YWRkUm9vdChpZCk7CisgICAgfQorICB9LAorICBvblVwZGF0ZUNvbXBvbmVudDogZnVuY3Rpb24g
KGlkKSB7CisgICAgdmFyIGl0ZW0gPSBnZXRJdGVtKGlkKTsKKyAgICBpZiAoIWl0ZW0gfHwgIWl0
ZW0uaXNNb3VudGVkKSB7CisgICAgICAvLyBXZSBtYXkgZW5kIHVwIGhlcmUgYXMgYSByZXN1bHQg
b2Ygc2V0U3RhdGUoKSBpbiBjb21wb25lbnRXaWxsVW5tb3VudCgpLgorICAgICAgLy8gSW4gdGhp
cyBjYXNlLCBpZ25vcmUgdGhlIGVsZW1lbnQuCisgICAgICByZXR1cm47CisgICAgfQorICAgIGl0
ZW0udXBkYXRlQ291bnQrKzsKKyAgfSwKKyAgb25Vbm1vdW50Q29tcG9uZW50OiBmdW5jdGlvbiAo
aWQpIHsKKyAgICB2YXIgaXRlbSA9IGdldEl0ZW0oaWQpOworICAgIGlmIChpdGVtKSB7CisgICAg
ICAvLyBXZSBuZWVkIHRvIGNoZWNrIGlmIGl0IGV4aXN0cy4KKyAgICAgIC8vIGBpdGVtYCBtaWdo
dCBub3QgZXhpc3QgaWYgaXQgaXMgaW5zaWRlIGFuIGVycm9yIGJvdW5kYXJ5LCBhbmQgYSBzaWJs
aW5nCisgICAgICAvLyBlcnJvciBib3VuZGFyeSBjaGlsZCB0aHJldyB3aGlsZSBtb3VudGluZy4g
VGhlbiB0aGlzIGluc3RhbmNlIG5ldmVyCisgICAgICAvLyBnb3QgYSBjaGFuY2UgdG8gbW91bnQs
IGJ1dCBpdCBzdGlsbCBnZXRzIGFuIHVubW91bnRpbmcgZXZlbnQgZHVyaW5nCisgICAgICAvLyB0
aGUgZXJyb3IgYm91bmRhcnkgY2xlYW51cC4KKyAgICAgIGl0ZW0uaXNNb3VudGVkID0gZmFsc2U7
CisgICAgICB2YXIgaXNSb290ID0gaXRlbS5wYXJlbnRJRCA9PT0gMDsKKyAgICAgIGlmIChpc1Jv
b3QpIHsKKyAgICAgICAgcmVtb3ZlUm9vdChpZCk7CisgICAgICB9CisgICAgfQorICAgIHVubW91
bnRlZElEcy5wdXNoKGlkKTsKKyAgfSwKKyAgcHVyZ2VVbm1vdW50ZWRDb21wb25lbnRzOiBmdW5j
dGlvbiAoKSB7CisgICAgaWYgKFJlYWN0Q29tcG9uZW50VHJlZUhvb2suX3ByZXZlbnRQdXJnaW5n
KSB7CisgICAgICAvLyBTaG91bGQgb25seSBiZSB1c2VkIGZvciB0ZXN0aW5nLgorICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdW5tb3VudGVkSURzLmxlbmd0
aDsgaSsrKSB7CisgICAgICB2YXIgaWQgPSB1bm1vdW50ZWRJRHNbaV07CisgICAgICBwdXJnZURl
ZXAoaWQpOworICAgIH0KKyAgICB1bm1vdW50ZWRJRHMubGVuZ3RoID0gMDsKKyAgfSwKKyAgaXNN
b3VudGVkOiBmdW5jdGlvbiAoaWQpIHsKKyAgICB2YXIgaXRlbSA9IGdldEl0ZW0oaWQpOworICAg
IHJldHVybiBpdGVtID8gaXRlbS5pc01vdW50ZWQgOiBmYWxzZTsKKyAgfSwKKyAgZ2V0Q3VycmVu
dFN0YWNrQWRkZW5kdW06IGZ1bmN0aW9uICh0b3BFbGVtZW50KSB7CisgICAgdmFyIGluZm8gPSAn
JzsKKyAgICBpZiAodG9wRWxlbWVudCkgeworICAgICAgdmFyIG5hbWUgPSBnZXREaXNwbGF5TmFt
ZSh0b3BFbGVtZW50KTsKKyAgICAgIHZhciBvd25lciA9IHRvcEVsZW1lbnQuX293bmVyOworICAg
ICAgaW5mbyArPSBkZXNjcmliZUNvbXBvbmVudEZyYW1lKG5hbWUsIHRvcEVsZW1lbnQuX3NvdXJj
ZSwgb3duZXIgJiYgb3duZXIuZ2V0TmFtZSgpKTsKKyAgICB9CisKKyAgICB2YXIgY3VycmVudE93
bmVyID0gUmVhY3RDdXJyZW50T3duZXIuY3VycmVudDsKKyAgICB2YXIgaWQgPSBjdXJyZW50T3du
ZXIgJiYgY3VycmVudE93bmVyLl9kZWJ1Z0lEOworCisgICAgaW5mbyArPSBSZWFjdENvbXBvbmVu
dFRyZWVIb29rLmdldFN0YWNrQWRkZW5kdW1CeUlEKGlkKTsKKyAgICByZXR1cm4gaW5mbzsKKyAg
fSwKKyAgZ2V0U3RhY2tBZGRlbmR1bUJ5SUQ6IGZ1bmN0aW9uIChpZCkgeworICAgIHZhciBpbmZv
ID0gJyc7CisgICAgd2hpbGUgKGlkKSB7CisgICAgICBpbmZvICs9IGRlc2NyaWJlSUQoaWQpOwor
ICAgICAgaWQgPSBSZWFjdENvbXBvbmVudFRyZWVIb29rLmdldFBhcmVudElEKGlkKTsKKyAgICB9
CisgICAgcmV0dXJuIGluZm87CisgIH0sCisgIGdldENoaWxkSURzOiBmdW5jdGlvbiAoaWQpIHsK
KyAgICB2YXIgaXRlbSA9IGdldEl0ZW0oaWQpOworICAgIHJldHVybiBpdGVtID8gaXRlbS5jaGls
ZElEcyA6IFtdOworICB9LAorICBnZXREaXNwbGF5TmFtZTogZnVuY3Rpb24gKGlkKSB7CisgICAg
dmFyIGVsZW1lbnQgPSBSZWFjdENvbXBvbmVudFRyZWVIb29rLmdldEVsZW1lbnQoaWQpOworICAg
IGlmICghZWxlbWVudCkgeworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIHJldHVybiBn
ZXREaXNwbGF5TmFtZShlbGVtZW50KTsKKyAgfSwKKyAgZ2V0RWxlbWVudDogZnVuY3Rpb24gKGlk
KSB7CisgICAgdmFyIGl0ZW0gPSBnZXRJdGVtKGlkKTsKKyAgICByZXR1cm4gaXRlbSA/IGl0ZW0u
ZWxlbWVudCA6IG51bGw7CisgIH0sCisgIGdldE93bmVySUQ6IGZ1bmN0aW9uIChpZCkgeworICAg
IHZhciBlbGVtZW50ID0gUmVhY3RDb21wb25lbnRUcmVlSG9vay5nZXRFbGVtZW50KGlkKTsKKyAg
ICBpZiAoIWVsZW1lbnQgfHwgIWVsZW1lbnQuX293bmVyKSB7CisgICAgICByZXR1cm4gbnVsbDsK
KyAgICB9CisgICAgcmV0dXJuIGVsZW1lbnQuX293bmVyLl9kZWJ1Z0lEOworICB9LAorICBnZXRQ
YXJlbnRJRDogZnVuY3Rpb24gKGlkKSB7CisgICAgdmFyIGl0ZW0gPSBnZXRJdGVtKGlkKTsKKyAg
ICByZXR1cm4gaXRlbSA/IGl0ZW0ucGFyZW50SUQgOiBudWxsOworICB9LAorICBnZXRTb3VyY2U6
IGZ1bmN0aW9uIChpZCkgeworICAgIHZhciBpdGVtID0gZ2V0SXRlbShpZCk7CisgICAgdmFyIGVs
ZW1lbnQgPSBpdGVtID8gaXRlbS5lbGVtZW50IDogbnVsbDsKKyAgICB2YXIgc291cmNlID0gZWxl
bWVudCAhPSBudWxsID8gZWxlbWVudC5fc291cmNlIDogbnVsbDsKKyAgICByZXR1cm4gc291cmNl
OworICB9LAorICBnZXRUZXh0OiBmdW5jdGlvbiAoaWQpIHsKKyAgICB2YXIgZWxlbWVudCA9IFJl
YWN0Q29tcG9uZW50VHJlZUhvb2suZ2V0RWxlbWVudChpZCk7CisgICAgaWYgKHR5cGVvZiBlbGVt
ZW50ID09PSAnc3RyaW5nJykgeworICAgICAgcmV0dXJuIGVsZW1lbnQ7CisgICAgfSBlbHNlIGlm
ICh0eXBlb2YgZWxlbWVudCA9PT0gJ251bWJlcicpIHsKKyAgICAgIHJldHVybiAnJyArIGVsZW1l
bnQ7CisgICAgfSBlbHNlIHsKKyAgICAgIHJldHVybiBudWxsOworICAgIH0KKyAgfSwKKyAgZ2V0
VXBkYXRlQ291bnQ6IGZ1bmN0aW9uIChpZCkgeworICAgIHZhciBpdGVtID0gZ2V0SXRlbShpZCk7
CisgICAgcmV0dXJuIGl0ZW0gPyBpdGVtLnVwZGF0ZUNvdW50IDogMDsKKyAgfSwKKworCisgIGdl
dFJvb3RJRHM6IGdldFJvb3RJRHMsCisgIGdldFJlZ2lzdGVyZWRJRHM6IGdldEl0ZW1JRHMKK307
CisKK21vZHVsZS5leHBvcnRzID0gUmVhY3RDb21wb25lbnRUcmVlSG9vazsKK30seyIxNCI6MTQs
IjM5IjozOSwiNDciOjQ3LCI0OSI6NDl9XSwxMzpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhw
b3J0cyl7CisvKioKKyAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuCisg
KiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5z
ZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZQorICogTElDRU5TRSBm
aWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlv
bmFsIGdyYW50CisgKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5U
UyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAqCisgKi8KKworJ3VzZSBzdHJpY3QnOwor
Cit2YXIgc2hhbGxvd0NvbXBhcmUgPSBfZGVyZXFfKDQwKTsKKworLyoqCisgKiBJZiB5b3VyIFJl
YWN0IGNvbXBvbmVudCdzIHJlbmRlciBmdW5jdGlvbiBpcyAicHVyZSIsIGUuZy4gaXQgd2lsbCBy
ZW5kZXIgdGhlCisgKiBzYW1lIHJlc3VsdCBnaXZlbiB0aGUgc2FtZSBwcm9wcyBhbmQgc3RhdGUs
IHByb3ZpZGUgdGhpcyBtaXhpbiBmb3IgYQorICogY29uc2lkZXJhYmxlIHBlcmZvcm1hbmNlIGJv
b3N0LgorICoKKyAqIE1vc3QgUmVhY3QgY29tcG9uZW50cyBoYXZlIHB1cmUgcmVuZGVyIGZ1bmN0
aW9ucy4KKyAqCisgKiBFeGFtcGxlOgorICoKKyAqICAgdmFyIFJlYWN0Q29tcG9uZW50V2l0aFB1
cmVSZW5kZXJNaXhpbiA9CisgKiAgICAgcmVxdWlyZSgnUmVhY3RDb21wb25lbnRXaXRoUHVyZVJl
bmRlck1peGluJyk7CisgKiAgIFJlYWN0LmNyZWF0ZUNsYXNzKHsKKyAqICAgICBtaXhpbnM6IFtS
ZWFjdENvbXBvbmVudFdpdGhQdXJlUmVuZGVyTWl4aW5dLAorICoKKyAqICAgICByZW5kZXI6IGZ1
bmN0aW9uKCkgeworICogICAgICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPXt0aGlzLnByb3BzLmNs
YXNzTmFtZX0+Zm9vPC9kaXY+OworICogICAgIH0KKyAqICAgfSk7CisgKgorICogTm90ZTogVGhp
cyBvbmx5IGNoZWNrcyBzaGFsbG93IGVxdWFsaXR5IGZvciBwcm9wcyBhbmQgc3RhdGUuIElmIHRo
ZXNlIGNvbnRhaW4KKyAqIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHRoaXMgbWl4aW4gbWF5IGhh
dmUgZmFsc2UtbmVnYXRpdmVzIGZvciBkZWVwZXIKKyAqIGRpZmZlcmVuY2VzLiBPbmx5IG1peGlu
IHRvIGNvbXBvbmVudHMgd2hpY2ggaGF2ZSBzaW1wbGUgcHJvcHMgYW5kIHN0YXRlLCBvcgorICog
dXNlIGBmb3JjZVVwZGF0ZSgpYCB3aGVuIHlvdSBrbm93IGRlZXAgZGF0YSBzdHJ1Y3R1cmVzIGhh
dmUgY2hhbmdlZC4KKyAqCisgKiBTZWUgaHR0cHM6Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3Qv
ZG9jcy9wdXJlLXJlbmRlci1taXhpbi5odG1sCisgKi8KK3ZhciBSZWFjdENvbXBvbmVudFdpdGhQ
dXJlUmVuZGVyTWl4aW4gPSB7CisgIHNob3VsZENvbXBvbmVudFVwZGF0ZTogZnVuY3Rpb24gKG5l
eHRQcm9wcywgbmV4dFN0YXRlKSB7CisgICAgcmV0dXJuIHNoYWxsb3dDb21wYXJlKHRoaXMsIG5l
eHRQcm9wcywgbmV4dFN0YXRlKTsKKyAgfQorfTsKKworbW9kdWxlLmV4cG9ydHMgPSBSZWFjdENv
bXBvbmVudFdpdGhQdXJlUmVuZGVyTWl4aW47Cit9LHsiNDAiOjQwfV0sMTQ6W2Z1bmN0aW9uKF9k
ZXJlcV8sbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBG
YWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvdXJj
ZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0
aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2Ug
dHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAorICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91
bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisgKgorICogCisg
Ki8KKworJ3VzZSBzdHJpY3QnOworCisvKioKKyAqIEtlZXBzIHRyYWNrIG9mIHRoZSBjdXJyZW50
IG93bmVyLgorICoKKyAqIFRoZSBjdXJyZW50IG93bmVyIGlzIHRoZSBjb21wb25lbnQgd2hvIHNo
b3VsZCBvd24gYW55IGNvbXBvbmVudHMgdGhhdCBhcmUKKyAqIGN1cnJlbnRseSBiZWluZyBjb25z
dHJ1Y3RlZC4KKyAqLwordmFyIFJlYWN0Q3VycmVudE93bmVyID0geworCisgIC8qKgorICAgKiBA
aW50ZXJuYWwKKyAgICogQHR5cGUge1JlYWN0Q29tcG9uZW50fQorICAgKi8KKyAgY3VycmVudDog
bnVsbAorCit9OworCittb2R1bGUuZXhwb3J0cyA9IFJlYWN0Q3VycmVudE93bmVyOworfSx7fV0s
MTU6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQg
MjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGlj
ZW5zZSBmb3VuZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkg
b2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAorICogb2YgcGF0ZW50IHJp
Z2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3Rv
cnkuCisgKgorICovCisKKyd1c2Ugc3RyaWN0JzsKKwordmFyIFJlYWN0RWxlbWVudCA9IF9kZXJl
cV8oMTYpOworCisvKioKKyAqIENyZWF0ZSBhIGZhY3RvcnkgdGhhdCBjcmVhdGVzIEhUTUwgdGFn
IGVsZW1lbnRzLgorICoKKyAqIEBwcml2YXRlCisgKi8KK3ZhciBjcmVhdGVET01GYWN0b3J5ID0g
UmVhY3RFbGVtZW50LmNyZWF0ZUZhY3Rvcnk7CitpZiAoImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1
Y3Rpb24nKSB7CisgIHZhciBSZWFjdEVsZW1lbnRWYWxpZGF0b3IgPSBfZGVyZXFfKDE4KTsKKyAg
Y3JlYXRlRE9NRmFjdG9yeSA9IFJlYWN0RWxlbWVudFZhbGlkYXRvci5jcmVhdGVGYWN0b3J5Owor
fQorCisvKioKKyAqIENyZWF0ZXMgYSBtYXBwaW5nIGZyb20gc3VwcG9ydGVkIEhUTUwgdGFncyB0
byBgUmVhY3RET01Db21wb25lbnRgIGNsYXNzZXMuCisgKiBUaGlzIGlzIGFsc28gYWNjZXNzaWJs
ZSB2aWEgYFJlYWN0LkRPTWAuCisgKgorICogQHB1YmxpYworICovCit2YXIgUmVhY3RET01GYWN0
b3JpZXMgPSB7CisgIGE6IGNyZWF0ZURPTUZhY3RvcnkoJ2EnKSwKKyAgYWJicjogY3JlYXRlRE9N
RmFjdG9yeSgnYWJicicpLAorICBhZGRyZXNzOiBjcmVhdGVET01GYWN0b3J5KCdhZGRyZXNzJyks
CisgIGFyZWE6IGNyZWF0ZURPTUZhY3RvcnkoJ2FyZWEnKSwKKyAgYXJ0aWNsZTogY3JlYXRlRE9N
RmFjdG9yeSgnYXJ0aWNsZScpLAorICBhc2lkZTogY3JlYXRlRE9NRmFjdG9yeSgnYXNpZGUnKSwK
KyAgYXVkaW86IGNyZWF0ZURPTUZhY3RvcnkoJ2F1ZGlvJyksCisgIGI6IGNyZWF0ZURPTUZhY3Rv
cnkoJ2InKSwKKyAgYmFzZTogY3JlYXRlRE9NRmFjdG9yeSgnYmFzZScpLAorICBiZGk6IGNyZWF0
ZURPTUZhY3RvcnkoJ2JkaScpLAorICBiZG86IGNyZWF0ZURPTUZhY3RvcnkoJ2JkbycpLAorICBi
aWc6IGNyZWF0ZURPTUZhY3RvcnkoJ2JpZycpLAorICBibG9ja3F1b3RlOiBjcmVhdGVET01GYWN0
b3J5KCdibG9ja3F1b3RlJyksCisgIGJvZHk6IGNyZWF0ZURPTUZhY3RvcnkoJ2JvZHknKSwKKyAg
YnI6IGNyZWF0ZURPTUZhY3RvcnkoJ2JyJyksCisgIGJ1dHRvbjogY3JlYXRlRE9NRmFjdG9yeSgn
YnV0dG9uJyksCisgIGNhbnZhczogY3JlYXRlRE9NRmFjdG9yeSgnY2FudmFzJyksCisgIGNhcHRp
b246IGNyZWF0ZURPTUZhY3RvcnkoJ2NhcHRpb24nKSwKKyAgY2l0ZTogY3JlYXRlRE9NRmFjdG9y
eSgnY2l0ZScpLAorICBjb2RlOiBjcmVhdGVET01GYWN0b3J5KCdjb2RlJyksCisgIGNvbDogY3Jl
YXRlRE9NRmFjdG9yeSgnY29sJyksCisgIGNvbGdyb3VwOiBjcmVhdGVET01GYWN0b3J5KCdjb2xn
cm91cCcpLAorICBkYXRhOiBjcmVhdGVET01GYWN0b3J5KCdkYXRhJyksCisgIGRhdGFsaXN0OiBj
cmVhdGVET01GYWN0b3J5KCdkYXRhbGlzdCcpLAorICBkZDogY3JlYXRlRE9NRmFjdG9yeSgnZGQn
KSwKKyAgZGVsOiBjcmVhdGVET01GYWN0b3J5KCdkZWwnKSwKKyAgZGV0YWlsczogY3JlYXRlRE9N
RmFjdG9yeSgnZGV0YWlscycpLAorICBkZm46IGNyZWF0ZURPTUZhY3RvcnkoJ2RmbicpLAorICBk
aWFsb2c6IGNyZWF0ZURPTUZhY3RvcnkoJ2RpYWxvZycpLAorICBkaXY6IGNyZWF0ZURPTUZhY3Rv
cnkoJ2RpdicpLAorICBkbDogY3JlYXRlRE9NRmFjdG9yeSgnZGwnKSwKKyAgZHQ6IGNyZWF0ZURP
TUZhY3RvcnkoJ2R0JyksCisgIGVtOiBjcmVhdGVET01GYWN0b3J5KCdlbScpLAorICBlbWJlZDog
Y3JlYXRlRE9NRmFjdG9yeSgnZW1iZWQnKSwKKyAgZmllbGRzZXQ6IGNyZWF0ZURPTUZhY3Rvcnko
J2ZpZWxkc2V0JyksCisgIGZpZ2NhcHRpb246IGNyZWF0ZURPTUZhY3RvcnkoJ2ZpZ2NhcHRpb24n
KSwKKyAgZmlndXJlOiBjcmVhdGVET01GYWN0b3J5KCdmaWd1cmUnKSwKKyAgZm9vdGVyOiBjcmVh
dGVET01GYWN0b3J5KCdmb290ZXInKSwKKyAgZm9ybTogY3JlYXRlRE9NRmFjdG9yeSgnZm9ybScp
LAorICBoMTogY3JlYXRlRE9NRmFjdG9yeSgnaDEnKSwKKyAgaDI6IGNyZWF0ZURPTUZhY3Rvcnko
J2gyJyksCisgIGgzOiBjcmVhdGVET01GYWN0b3J5KCdoMycpLAorICBoNDogY3JlYXRlRE9NRmFj
dG9yeSgnaDQnKSwKKyAgaDU6IGNyZWF0ZURPTUZhY3RvcnkoJ2g1JyksCisgIGg2OiBjcmVhdGVE
T01GYWN0b3J5KCdoNicpLAorICBoZWFkOiBjcmVhdGVET01GYWN0b3J5KCdoZWFkJyksCisgIGhl
YWRlcjogY3JlYXRlRE9NRmFjdG9yeSgnaGVhZGVyJyksCisgIGhncm91cDogY3JlYXRlRE9NRmFj
dG9yeSgnaGdyb3VwJyksCisgIGhyOiBjcmVhdGVET01GYWN0b3J5KCdocicpLAorICBodG1sOiBj
cmVhdGVET01GYWN0b3J5KCdodG1sJyksCisgIGk6IGNyZWF0ZURPTUZhY3RvcnkoJ2knKSwKKyAg
aWZyYW1lOiBjcmVhdGVET01GYWN0b3J5KCdpZnJhbWUnKSwKKyAgaW1nOiBjcmVhdGVET01GYWN0
b3J5KCdpbWcnKSwKKyAgaW5wdXQ6IGNyZWF0ZURPTUZhY3RvcnkoJ2lucHV0JyksCisgIGluczog
Y3JlYXRlRE9NRmFjdG9yeSgnaW5zJyksCisgIGtiZDogY3JlYXRlRE9NRmFjdG9yeSgna2JkJyks
CisgIGtleWdlbjogY3JlYXRlRE9NRmFjdG9yeSgna2V5Z2VuJyksCisgIGxhYmVsOiBjcmVhdGVE
T01GYWN0b3J5KCdsYWJlbCcpLAorICBsZWdlbmQ6IGNyZWF0ZURPTUZhY3RvcnkoJ2xlZ2VuZCcp
LAorICBsaTogY3JlYXRlRE9NRmFjdG9yeSgnbGknKSwKKyAgbGluazogY3JlYXRlRE9NRmFjdG9y
eSgnbGluaycpLAorICBtYWluOiBjcmVhdGVET01GYWN0b3J5KCdtYWluJyksCisgIG1hcDogY3Jl
YXRlRE9NRmFjdG9yeSgnbWFwJyksCisgIG1hcms6IGNyZWF0ZURPTUZhY3RvcnkoJ21hcmsnKSwK
KyAgbWVudTogY3JlYXRlRE9NRmFjdG9yeSgnbWVudScpLAorICBtZW51aXRlbTogY3JlYXRlRE9N
RmFjdG9yeSgnbWVudWl0ZW0nKSwKKyAgbWV0YTogY3JlYXRlRE9NRmFjdG9yeSgnbWV0YScpLAor
ICBtZXRlcjogY3JlYXRlRE9NRmFjdG9yeSgnbWV0ZXInKSwKKyAgbmF2OiBjcmVhdGVET01GYWN0
b3J5KCduYXYnKSwKKyAgbm9zY3JpcHQ6IGNyZWF0ZURPTUZhY3RvcnkoJ25vc2NyaXB0JyksCisg
IG9iamVjdDogY3JlYXRlRE9NRmFjdG9yeSgnb2JqZWN0JyksCisgIG9sOiBjcmVhdGVET01GYWN0
b3J5KCdvbCcpLAorICBvcHRncm91cDogY3JlYXRlRE9NRmFjdG9yeSgnb3B0Z3JvdXAnKSwKKyAg
b3B0aW9uOiBjcmVhdGVET01GYWN0b3J5KCdvcHRpb24nKSwKKyAgb3V0cHV0OiBjcmVhdGVET01G
YWN0b3J5KCdvdXRwdXQnKSwKKyAgcDogY3JlYXRlRE9NRmFjdG9yeSgncCcpLAorICBwYXJhbTog
Y3JlYXRlRE9NRmFjdG9yeSgncGFyYW0nKSwKKyAgcGljdHVyZTogY3JlYXRlRE9NRmFjdG9yeSgn
cGljdHVyZScpLAorICBwcmU6IGNyZWF0ZURPTUZhY3RvcnkoJ3ByZScpLAorICBwcm9ncmVzczog
Y3JlYXRlRE9NRmFjdG9yeSgncHJvZ3Jlc3MnKSwKKyAgcTogY3JlYXRlRE9NRmFjdG9yeSgncScp
LAorICBycDogY3JlYXRlRE9NRmFjdG9yeSgncnAnKSwKKyAgcnQ6IGNyZWF0ZURPTUZhY3Rvcnko
J3J0JyksCisgIHJ1Ynk6IGNyZWF0ZURPTUZhY3RvcnkoJ3J1YnknKSwKKyAgczogY3JlYXRlRE9N
RmFjdG9yeSgncycpLAorICBzYW1wOiBjcmVhdGVET01GYWN0b3J5KCdzYW1wJyksCisgIHNjcmlw
dDogY3JlYXRlRE9NRmFjdG9yeSgnc2NyaXB0JyksCisgIHNlY3Rpb246IGNyZWF0ZURPTUZhY3Rv
cnkoJ3NlY3Rpb24nKSwKKyAgc2VsZWN0OiBjcmVhdGVET01GYWN0b3J5KCdzZWxlY3QnKSwKKyAg
c21hbGw6IGNyZWF0ZURPTUZhY3RvcnkoJ3NtYWxsJyksCisgIHNvdXJjZTogY3JlYXRlRE9NRmFj
dG9yeSgnc291cmNlJyksCisgIHNwYW46IGNyZWF0ZURPTUZhY3RvcnkoJ3NwYW4nKSwKKyAgc3Ry
b25nOiBjcmVhdGVET01GYWN0b3J5KCdzdHJvbmcnKSwKKyAgc3R5bGU6IGNyZWF0ZURPTUZhY3Rv
cnkoJ3N0eWxlJyksCisgIHN1YjogY3JlYXRlRE9NRmFjdG9yeSgnc3ViJyksCisgIHN1bW1hcnk6
IGNyZWF0ZURPTUZhY3RvcnkoJ3N1bW1hcnknKSwKKyAgc3VwOiBjcmVhdGVET01GYWN0b3J5KCdz
dXAnKSwKKyAgdGFibGU6IGNyZWF0ZURPTUZhY3RvcnkoJ3RhYmxlJyksCisgIHRib2R5OiBjcmVh
dGVET01GYWN0b3J5KCd0Ym9keScpLAorICB0ZDogY3JlYXRlRE9NRmFjdG9yeSgndGQnKSwKKyAg
dGV4dGFyZWE6IGNyZWF0ZURPTUZhY3RvcnkoJ3RleHRhcmVhJyksCisgIHRmb290OiBjcmVhdGVE
T01GYWN0b3J5KCd0Zm9vdCcpLAorICB0aDogY3JlYXRlRE9NRmFjdG9yeSgndGgnKSwKKyAgdGhl
YWQ6IGNyZWF0ZURPTUZhY3RvcnkoJ3RoZWFkJyksCisgIHRpbWU6IGNyZWF0ZURPTUZhY3Rvcnko
J3RpbWUnKSwKKyAgdGl0bGU6IGNyZWF0ZURPTUZhY3RvcnkoJ3RpdGxlJyksCisgIHRyOiBjcmVh
dGVET01GYWN0b3J5KCd0cicpLAorICB0cmFjazogY3JlYXRlRE9NRmFjdG9yeSgndHJhY2snKSwK
KyAgdTogY3JlYXRlRE9NRmFjdG9yeSgndScpLAorICB1bDogY3JlYXRlRE9NRmFjdG9yeSgndWwn
KSwKKyAgJ3Zhcic6IGNyZWF0ZURPTUZhY3RvcnkoJ3ZhcicpLAorICB2aWRlbzogY3JlYXRlRE9N
RmFjdG9yeSgndmlkZW8nKSwKKyAgd2JyOiBjcmVhdGVET01GYWN0b3J5KCd3YnInKSwKKworICAv
LyBTVkcKKyAgY2lyY2xlOiBjcmVhdGVET01GYWN0b3J5KCdjaXJjbGUnKSwKKyAgY2xpcFBhdGg6
IGNyZWF0ZURPTUZhY3RvcnkoJ2NsaXBQYXRoJyksCisgIGRlZnM6IGNyZWF0ZURPTUZhY3Rvcnko
J2RlZnMnKSwKKyAgZWxsaXBzZTogY3JlYXRlRE9NRmFjdG9yeSgnZWxsaXBzZScpLAorICBnOiBj
cmVhdGVET01GYWN0b3J5KCdnJyksCisgIGltYWdlOiBjcmVhdGVET01GYWN0b3J5KCdpbWFnZScp
LAorICBsaW5lOiBjcmVhdGVET01GYWN0b3J5KCdsaW5lJyksCisgIGxpbmVhckdyYWRpZW50OiBj
cmVhdGVET01GYWN0b3J5KCdsaW5lYXJHcmFkaWVudCcpLAorICBtYXNrOiBjcmVhdGVET01GYWN0
b3J5KCdtYXNrJyksCisgIHBhdGg6IGNyZWF0ZURPTUZhY3RvcnkoJ3BhdGgnKSwKKyAgcGF0dGVy
bjogY3JlYXRlRE9NRmFjdG9yeSgncGF0dGVybicpLAorICBwb2x5Z29uOiBjcmVhdGVET01GYWN0
b3J5KCdwb2x5Z29uJyksCisgIHBvbHlsaW5lOiBjcmVhdGVET01GYWN0b3J5KCdwb2x5bGluZScp
LAorICByYWRpYWxHcmFkaWVudDogY3JlYXRlRE9NRmFjdG9yeSgncmFkaWFsR3JhZGllbnQnKSwK
KyAgcmVjdDogY3JlYXRlRE9NRmFjdG9yeSgncmVjdCcpLAorICBzdG9wOiBjcmVhdGVET01GYWN0
b3J5KCdzdG9wJyksCisgIHN2ZzogY3JlYXRlRE9NRmFjdG9yeSgnc3ZnJyksCisgIHRleHQ6IGNy
ZWF0ZURPTUZhY3RvcnkoJ3RleHQnKSwKKyAgdHNwYW46IGNyZWF0ZURPTUZhY3RvcnkoJ3RzcGFu
JykKK307CisKK21vZHVsZS5leHBvcnRzID0gUmVhY3RET01GYWN0b3JpZXM7Cit9LHsiMTYiOjE2
LCIxOCI6MTh9XSwxNjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAq
IENvcHlyaWdodCAyMDE0LXByZXNlbnQsIEZhY2Vib29rLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJT
RC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZQorICogTElDRU5TRSBmaWxlIGluIHRoZSByb290
IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50CisgKiBv
ZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBz
YW1lIGRpcmVjdG9yeS4KKyAqCisgKi8KKworJ3VzZSBzdHJpY3QnOworCit2YXIgX2Fzc2lnbiA9
IF9kZXJlcV8oNTApOworCit2YXIgUmVhY3RDdXJyZW50T3duZXIgPSBfZGVyZXFfKDE0KTsKKwor
dmFyIHdhcm5pbmcgPSBfZGVyZXFfKDQ5KTsKK3ZhciBjYW5EZWZpbmVQcm9wZXJ0eSA9IF9kZXJl
cV8oMzMpOwordmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9w
ZXJ0eTsKKwordmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9IF9kZXJlcV8oMTcpOworCit2YXIgUkVT
RVJWRURfUFJPUFMgPSB7CisgIGtleTogdHJ1ZSwKKyAgcmVmOiB0cnVlLAorICBfX3NlbGY6IHRy
dWUsCisgIF9fc291cmNlOiB0cnVlCit9OworCit2YXIgc3BlY2lhbFByb3BLZXlXYXJuaW5nU2hv
d24sIHNwZWNpYWxQcm9wUmVmV2FybmluZ1Nob3duOworCitmdW5jdGlvbiBoYXNWYWxpZFJlZihj
b25maWcpIHsKKyAgaWYgKCJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJykgeworICAgIGlm
IChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgJ3JlZicpKSB7CisgICAgICB2YXIgZ2V0dGVy
ID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjb25maWcsICdyZWYnKS5nZXQ7Cisg
ICAgICBpZiAoZ2V0dGVyICYmIGdldHRlci5pc1JlYWN0V2FybmluZykgeworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICB9CisgICAgfQorICB9CisgIHJldHVybiBjb25maWcucmVmICE9PSB1
bmRlZmluZWQ7Cit9CisKK2Z1bmN0aW9uIGhhc1ZhbGlkS2V5KGNvbmZpZykgeworICBpZiAoImRl
dmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nKSB7CisgICAgaWYgKGhhc093blByb3BlcnR5LmNh
bGwoY29uZmlnLCAna2V5JykpIHsKKyAgICAgIHZhciBnZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKGNvbmZpZywgJ2tleScpLmdldDsKKyAgICAgIGlmIChnZXR0ZXIgJiYg
Z2V0dGVyLmlzUmVhY3RXYXJuaW5nKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIH0K
KyAgICB9CisgIH0KKyAgcmV0dXJuIGNvbmZpZy5rZXkgIT09IHVuZGVmaW5lZDsKK30KKworZnVu
Y3Rpb24gZGVmaW5lS2V5UHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKSB7Cisg
IHZhciB3YXJuQWJvdXRBY2Nlc3NpbmdLZXkgPSBmdW5jdGlvbiAoKSB7CisgICAgaWYgKCFzcGVj
aWFsUHJvcEtleVdhcm5pbmdTaG93bikgeworICAgICAgc3BlY2lhbFByb3BLZXlXYXJuaW5nU2hv
d24gPSB0cnVlOworICAgICAgImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gd2Fybmlu
ZyhmYWxzZSwgJyVzOiBga2V5YCBpcyBub3QgYSBwcm9wLiBUcnlpbmcgdG8gYWNjZXNzIGl0IHdp
bGwgcmVzdWx0ICcgKyAnaW4gYHVuZGVmaW5lZGAgYmVpbmcgcmV0dXJuZWQuIElmIHlvdSBuZWVk
IHRvIGFjY2VzcyB0aGUgc2FtZSAnICsgJ3ZhbHVlIHdpdGhpbiB0aGUgY2hpbGQgY29tcG9uZW50
LCB5b3Ugc2hvdWxkIHBhc3MgaXQgYXMgYSBkaWZmZXJlbnQgJyArICdwcm9wLiAoaHR0cHM6Ly9m
Yi5tZS9yZWFjdC1zcGVjaWFsLXByb3BzKScsIGRpc3BsYXlOYW1lKSA6IHZvaWQgMDsKKyAgICB9
CisgIH07CisgIHdhcm5BYm91dEFjY2Vzc2luZ0tleS5pc1JlYWN0V2FybmluZyA9IHRydWU7Cisg
IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm9wcywgJ2tleScsIHsKKyAgICBnZXQ6IHdhcm5BYm91
dEFjY2Vzc2luZ0tleSwKKyAgICBjb25maWd1cmFibGU6IHRydWUKKyAgfSk7Cit9CisKK2Z1bmN0
aW9uIGRlZmluZVJlZlByb3BXYXJuaW5nR2V0dGVyKHByb3BzLCBkaXNwbGF5TmFtZSkgeworICB2
YXIgd2FybkFib3V0QWNjZXNzaW5nUmVmID0gZnVuY3Rpb24gKCkgeworICAgIGlmICghc3BlY2lh
bFByb3BSZWZXYXJuaW5nU2hvd24pIHsKKyAgICAgIHNwZWNpYWxQcm9wUmVmV2FybmluZ1Nob3du
ID0gdHJ1ZTsKKyAgICAgICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmco
ZmFsc2UsICclczogYHJlZmAgaXMgbm90IGEgcHJvcC4gVHJ5aW5nIHRvIGFjY2VzcyBpdCB3aWxs
IHJlc3VsdCAnICsgJ2luIGB1bmRlZmluZWRgIGJlaW5nIHJldHVybmVkLiBJZiB5b3UgbmVlZCB0
byBhY2Nlc3MgdGhlIHNhbWUgJyArICd2YWx1ZSB3aXRoaW4gdGhlIGNoaWxkIGNvbXBvbmVudCwg
eW91IHNob3VsZCBwYXNzIGl0IGFzIGEgZGlmZmVyZW50ICcgKyAncHJvcC4gKGh0dHBzOi8vZmIu
bWUvcmVhY3Qtc3BlY2lhbC1wcm9wcyknLCBkaXNwbGF5TmFtZSkgOiB2b2lkIDA7CisgICAgfQor
ICB9OworICB3YXJuQWJvdXRBY2Nlc3NpbmdSZWYuaXNSZWFjdFdhcm5pbmcgPSB0cnVlOworICBP
YmplY3QuZGVmaW5lUHJvcGVydHkocHJvcHMsICdyZWYnLCB7CisgICAgZ2V0OiB3YXJuQWJvdXRB
Y2Nlc3NpbmdSZWYsCisgICAgY29uZmlndXJhYmxlOiB0cnVlCisgIH0pOworfQorCisvKioKKyAq
IEZhY3RvcnkgbWV0aG9kIHRvIGNyZWF0ZSBhIG5ldyBSZWFjdCBlbGVtZW50LiBUaGlzIG5vIGxv
bmdlciBhZGhlcmVzIHRvCisgKiB0aGUgY2xhc3MgcGF0dGVybiwgc28gZG8gbm90IHVzZSBuZXcg
dG8gY2FsbCBpdC4gQWxzbywgbm8gaW5zdGFuY2VvZiBjaGVjaworICogd2lsbCB3b3JrLiBJbnN0
ZWFkIHRlc3QgJCR0eXBlb2YgZmllbGQgYWdhaW5zdCBTeW1ib2wuZm9yKCdyZWFjdC5lbGVtZW50
JykgdG8gY2hlY2sKKyAqIGlmIHNvbWV0aGluZyBpcyBhIFJlYWN0IEVsZW1lbnQuCisgKgorICog
QHBhcmFtIHsqfSB0eXBlCisgKiBAcGFyYW0geyp9IGtleQorICogQHBhcmFtIHtzdHJpbmd8b2Jq
ZWN0fSByZWYKKyAqIEBwYXJhbSB7Kn0gc2VsZiBBICp0ZW1wb3JhcnkqIGhlbHBlciB0byBkZXRl
Y3QgcGxhY2VzIHdoZXJlIGB0aGlzYCBpcworICogZGlmZmVyZW50IGZyb20gdGhlIGBvd25lcmAg
d2hlbiBSZWFjdC5jcmVhdGVFbGVtZW50IGlzIGNhbGxlZCwgc28gdGhhdCB3ZQorICogY2FuIHdh
cm4uIFdlIHdhbnQgdG8gZ2V0IHJpZCBvZiBvd25lciBhbmQgcmVwbGFjZSBzdHJpbmcgYHJlZmBz
IHdpdGggYXJyb3cKKyAqIGZ1bmN0aW9ucywgYW5kIGFzIGxvbmcgYXMgYHRoaXNgIGFuZCBvd25l
ciBhcmUgdGhlIHNhbWUsIHRoZXJlIHdpbGwgYmUgbm8KKyAqIGNoYW5nZSBpbiBiZWhhdmlvci4K
KyAqIEBwYXJhbSB7Kn0gc291cmNlIEFuIGFubm90YXRpb24gb2JqZWN0IChhZGRlZCBieSBhIHRy
YW5zcGlsZXIgb3Igb3RoZXJ3aXNlKQorICogaW5kaWNhdGluZyBmaWxlbmFtZSwgbGluZSBudW1i
ZXIsIGFuZC9vciBvdGhlciBpbmZvcm1hdGlvbi4KKyAqIEBwYXJhbSB7Kn0gb3duZXIKKyAqIEBw
YXJhbSB7Kn0gcHJvcHMKKyAqIEBpbnRlcm5hbAorICovCit2YXIgUmVhY3RFbGVtZW50ID0gZnVu
Y3Rpb24gKHR5cGUsIGtleSwgcmVmLCBzZWxmLCBzb3VyY2UsIG93bmVyLCBwcm9wcykgeworICB2
YXIgZWxlbWVudCA9IHsKKyAgICAvLyBUaGlzIHRhZyBhbGxvdyB1cyB0byB1bmlxdWVseSBpZGVu
dGlmeSB0aGlzIGFzIGEgUmVhY3QgRWxlbWVudAorICAgICQkdHlwZW9mOiBSRUFDVF9FTEVNRU5U
X1RZUEUsCisKKyAgICAvLyBCdWlsdC1pbiBwcm9wZXJ0aWVzIHRoYXQgYmVsb25nIG9uIHRoZSBl
bGVtZW50CisgICAgdHlwZTogdHlwZSwKKyAgICBrZXk6IGtleSwKKyAgICByZWY6IHJlZiwKKyAg
ICBwcm9wczogcHJvcHMsCisKKyAgICAvLyBSZWNvcmQgdGhlIGNvbXBvbmVudCByZXNwb25zaWJs
ZSBmb3IgY3JlYXRpbmcgdGhpcyBlbGVtZW50LgorICAgIF9vd25lcjogb3duZXIKKyAgfTsKKwor
ICBpZiAoImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nKSB7CisgICAgLy8gVGhlIHZhbGlk
YXRpb24gZmxhZyBpcyBjdXJyZW50bHkgbXV0YXRpdmUuIFdlIHB1dCBpdCBvbgorICAgIC8vIGFu
IGV4dGVybmFsIGJhY2tpbmcgc3RvcmUgc28gdGhhdCB3ZSBjYW4gZnJlZXplIHRoZSB3aG9sZSBv
YmplY3QuCisgICAgLy8gVGhpcyBjYW4gYmUgcmVwbGFjZWQgd2l0aCBhIFdlYWtNYXAgb25jZSB0
aGV5IGFyZSBpbXBsZW1lbnRlZCBpbgorICAgIC8vIGNvbW1vbmx5IHVzZWQgZGV2ZWxvcG1lbnQg
ZW52aXJvbm1lbnRzLgorICAgIGVsZW1lbnQuX3N0b3JlID0ge307CisKKyAgICAvLyBUbyBtYWtl
IGNvbXBhcmluZyBSZWFjdEVsZW1lbnRzIGVhc2llciBmb3IgdGVzdGluZyBwdXJwb3Nlcywgd2Ug
bWFrZQorICAgIC8vIHRoZSB2YWxpZGF0aW9uIGZsYWcgbm9uLWVudW1lcmFibGUgKHdoZXJlIHBv
c3NpYmxlLCB3aGljaCBzaG91bGQKKyAgICAvLyBpbmNsdWRlIGV2ZXJ5IGVudmlyb25tZW50IHdl
IHJ1biB0ZXN0cyBpbiksIHNvIHRoZSB0ZXN0IGZyYW1ld29yaworICAgIC8vIGlnbm9yZXMgaXQu
CisgICAgaWYgKGNhbkRlZmluZVByb3BlcnR5KSB7CisgICAgICBPYmplY3QuZGVmaW5lUHJvcGVy
dHkoZWxlbWVudC5fc3RvcmUsICd2YWxpZGF0ZWQnLCB7CisgICAgICAgIGNvbmZpZ3VyYWJsZTog
ZmFsc2UsCisgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLAorICAgICAgICB3cml0YWJsZTogdHJ1
ZSwKKyAgICAgICAgdmFsdWU6IGZhbHNlCisgICAgICB9KTsKKyAgICAgIC8vIHNlbGYgYW5kIHNv
dXJjZSBhcmUgREVWIG9ubHkgcHJvcGVydGllcy4KKyAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0
eShlbGVtZW50LCAnX3NlbGYnLCB7CisgICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsCisgICAg
ICAgIGVudW1lcmFibGU6IGZhbHNlLAorICAgICAgICB3cml0YWJsZTogZmFsc2UsCisgICAgICAg
IHZhbHVlOiBzZWxmCisgICAgICB9KTsKKyAgICAgIC8vIFR3byBlbGVtZW50cyBjcmVhdGVkIGlu
IHR3byBkaWZmZXJlbnQgcGxhY2VzIHNob3VsZCBiZSBjb25zaWRlcmVkCisgICAgICAvLyBlcXVh
bCBmb3IgdGVzdGluZyBwdXJwb3NlcyBhbmQgdGhlcmVmb3JlIHdlIGhpZGUgaXQgZnJvbSBlbnVt
ZXJhdGlvbi4KKyAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50LCAnX3NvdXJjZScs
IHsKKyAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSwKKyAgICAgICAgZW51bWVyYWJsZTogZmFs
c2UsCisgICAgICAgIHdyaXRhYmxlOiBmYWxzZSwKKyAgICAgICAgdmFsdWU6IHNvdXJjZQorICAg
ICAgfSk7CisgICAgfSBlbHNlIHsKKyAgICAgIGVsZW1lbnQuX3N0b3JlLnZhbGlkYXRlZCA9IGZh
bHNlOworICAgICAgZWxlbWVudC5fc2VsZiA9IHNlbGY7CisgICAgICBlbGVtZW50Ll9zb3VyY2Ug
PSBzb3VyY2U7CisgICAgfQorICAgIGlmIChPYmplY3QuZnJlZXplKSB7CisgICAgICBPYmplY3Qu
ZnJlZXplKGVsZW1lbnQucHJvcHMpOworICAgICAgT2JqZWN0LmZyZWV6ZShlbGVtZW50KTsKKyAg
ICB9CisgIH0KKworICByZXR1cm4gZWxlbWVudDsKK307CisKKy8qKgorICogQ3JlYXRlIGFuZCBy
ZXR1cm4gYSBuZXcgUmVhY3RFbGVtZW50IG9mIHRoZSBnaXZlbiB0eXBlLgorICogU2VlIGh0dHBz
Oi8vZmFjZWJvb2suZ2l0aHViLmlvL3JlYWN0L2RvY3MvdG9wLWxldmVsLWFwaS5odG1sI3JlYWN0
LmNyZWF0ZWVsZW1lbnQKKyAqLworUmVhY3RFbGVtZW50LmNyZWF0ZUVsZW1lbnQgPSBmdW5jdGlv
biAodHlwZSwgY29uZmlnLCBjaGlsZHJlbikgeworICB2YXIgcHJvcE5hbWU7CisKKyAgLy8gUmVz
ZXJ2ZWQgbmFtZXMgYXJlIGV4dHJhY3RlZAorICB2YXIgcHJvcHMgPSB7fTsKKworICB2YXIga2V5
ID0gbnVsbDsKKyAgdmFyIHJlZiA9IG51bGw7CisgIHZhciBzZWxmID0gbnVsbDsKKyAgdmFyIHNv
dXJjZSA9IG51bGw7CisKKyAgaWYgKGNvbmZpZyAhPSBudWxsKSB7CisgICAgaWYgKGhhc1ZhbGlk
UmVmKGNvbmZpZykpIHsKKyAgICAgIHJlZiA9IGNvbmZpZy5yZWY7CisgICAgfQorICAgIGlmICho
YXNWYWxpZEtleShjb25maWcpKSB7CisgICAgICBrZXkgPSAnJyArIGNvbmZpZy5rZXk7CisgICAg
fQorCisgICAgc2VsZiA9IGNvbmZpZy5fX3NlbGYgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBjb25m
aWcuX19zZWxmOworICAgIHNvdXJjZSA9IGNvbmZpZy5fX3NvdXJjZSA9PT0gdW5kZWZpbmVkID8g
bnVsbCA6IGNvbmZpZy5fX3NvdXJjZTsKKyAgICAvLyBSZW1haW5pbmcgcHJvcGVydGllcyBhcmUg
YWRkZWQgdG8gYSBuZXcgcHJvcHMgb2JqZWN0CisgICAgZm9yIChwcm9wTmFtZSBpbiBjb25maWcp
IHsKKyAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgcHJvcE5hbWUpICYmICFS
RVNFUlZFRF9QUk9QUy5oYXNPd25Qcm9wZXJ0eShwcm9wTmFtZSkpIHsKKyAgICAgICAgcHJvcHNb
cHJvcE5hbWVdID0gY29uZmlnW3Byb3BOYW1lXTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICAv
LyBDaGlsZHJlbiBjYW4gYmUgbW9yZSB0aGFuIG9uZSBhcmd1bWVudCwgYW5kIHRob3NlIGFyZSB0
cmFuc2ZlcnJlZCBvbnRvCisgIC8vIHRoZSBuZXdseSBhbGxvY2F0ZWQgcHJvcHMgb2JqZWN0Lgor
ICB2YXIgY2hpbGRyZW5MZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoIC0gMjsKKyAgaWYgKGNoaWxk
cmVuTGVuZ3RoID09PSAxKSB7CisgICAgcHJvcHMuY2hpbGRyZW4gPSBjaGlsZHJlbjsKKyAgfSBl
bHNlIGlmIChjaGlsZHJlbkxlbmd0aCA+IDEpIHsKKyAgICB2YXIgY2hpbGRBcnJheSA9IEFycmF5
KGNoaWxkcmVuTGVuZ3RoKTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuTGVuZ3Ro
OyBpKyspIHsKKyAgICAgIGNoaWxkQXJyYXlbaV0gPSBhcmd1bWVudHNbaSArIDJdOworICAgIH0K
KyAgICBpZiAoImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nKSB7CisgICAgICBpZiAoT2Jq
ZWN0LmZyZWV6ZSkgeworICAgICAgICBPYmplY3QuZnJlZXplKGNoaWxkQXJyYXkpOworICAgICAg
fQorICAgIH0KKyAgICBwcm9wcy5jaGlsZHJlbiA9IGNoaWxkQXJyYXk7CisgIH0KKworICAvLyBS
ZXNvbHZlIGRlZmF1bHQgcHJvcHMKKyAgaWYgKHR5cGUgJiYgdHlwZS5kZWZhdWx0UHJvcHMpIHsK
KyAgICB2YXIgZGVmYXVsdFByb3BzID0gdHlwZS5kZWZhdWx0UHJvcHM7CisgICAgZm9yIChwcm9w
TmFtZSBpbiBkZWZhdWx0UHJvcHMpIHsKKyAgICAgIGlmIChwcm9wc1twcm9wTmFtZV0gPT09IHVu
ZGVmaW5lZCkgeworICAgICAgICBwcm9wc1twcm9wTmFtZV0gPSBkZWZhdWx0UHJvcHNbcHJvcE5h
bWVdOworICAgICAgfQorICAgIH0KKyAgfQorICBpZiAoImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1
Y3Rpb24nKSB7CisgICAgaWYgKGtleSB8fCByZWYpIHsKKyAgICAgIGlmICh0eXBlb2YgcHJvcHMu
JCR0eXBlb2YgPT09ICd1bmRlZmluZWQnIHx8IHByb3BzLiQkdHlwZW9mICE9PSBSRUFDVF9FTEVN
RU5UX1RZUEUpIHsKKyAgICAgICAgdmFyIGRpc3BsYXlOYW1lID0gdHlwZW9mIHR5cGUgPT09ICdm
dW5jdGlvbicgPyB0eXBlLmRpc3BsYXlOYW1lIHx8IHR5cGUubmFtZSB8fCAnVW5rbm93bicgOiB0
eXBlOworICAgICAgICBpZiAoa2V5KSB7CisgICAgICAgICAgZGVmaW5lS2V5UHJvcFdhcm5pbmdH
ZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKTsKKyAgICAgICAgfQorICAgICAgICBpZiAocmVmKSB7
CisgICAgICAgICAgZGVmaW5lUmVmUHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1l
KTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorICByZXR1cm4gUmVhY3RFbGVtZW50
KHR5cGUsIGtleSwgcmVmLCBzZWxmLCBzb3VyY2UsIFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQs
IHByb3BzKTsKK307CisKKy8qKgorICogUmV0dXJuIGEgZnVuY3Rpb24gdGhhdCBwcm9kdWNlcyBS
ZWFjdEVsZW1lbnRzIG9mIGEgZ2l2ZW4gdHlwZS4KKyAqIFNlZSBodHRwczovL2ZhY2Vib29rLmdp
dGh1Yi5pby9yZWFjdC9kb2NzL3RvcC1sZXZlbC1hcGkuaHRtbCNyZWFjdC5jcmVhdGVmYWN0b3J5
CisgKi8KK1JlYWN0RWxlbWVudC5jcmVhdGVGYWN0b3J5ID0gZnVuY3Rpb24gKHR5cGUpIHsKKyAg
dmFyIGZhY3RvcnkgPSBSZWFjdEVsZW1lbnQuY3JlYXRlRWxlbWVudC5iaW5kKG51bGwsIHR5cGUp
OworICAvLyBFeHBvc2UgdGhlIHR5cGUgb24gdGhlIGZhY3RvcnkgYW5kIHRoZSBwcm90b3R5cGUg
c28gdGhhdCBpdCBjYW4gYmUKKyAgLy8gZWFzaWx5IGFjY2Vzc2VkIG9uIGVsZW1lbnRzLiBFLmcu
IGA8Rm9vIC8+LnR5cGUgPT09IEZvb2AuCisgIC8vIFRoaXMgc2hvdWxkIG5vdCBiZSBuYW1lZCBg
Y29uc3RydWN0b3JgIHNpbmNlIHRoaXMgbWF5IG5vdCBiZSB0aGUgZnVuY3Rpb24KKyAgLy8gdGhh
dCBjcmVhdGVkIHRoZSBlbGVtZW50LCBhbmQgaXQgbWF5IG5vdCBldmVuIGJlIGEgY29uc3RydWN0
b3IuCisgIC8vIExlZ2FjeSBob29rIFRPRE86IFdhcm4gaWYgdGhpcyBpcyBhY2Nlc3NlZAorICBm
YWN0b3J5LnR5cGUgPSB0eXBlOworICByZXR1cm4gZmFjdG9yeTsKK307CisKK1JlYWN0RWxlbWVu
dC5jbG9uZUFuZFJlcGxhY2VLZXkgPSBmdW5jdGlvbiAob2xkRWxlbWVudCwgbmV3S2V5KSB7Cisg
IHZhciBuZXdFbGVtZW50ID0gUmVhY3RFbGVtZW50KG9sZEVsZW1lbnQudHlwZSwgbmV3S2V5LCBv
bGRFbGVtZW50LnJlZiwgb2xkRWxlbWVudC5fc2VsZiwgb2xkRWxlbWVudC5fc291cmNlLCBvbGRF
bGVtZW50Ll9vd25lciwgb2xkRWxlbWVudC5wcm9wcyk7CisKKyAgcmV0dXJuIG5ld0VsZW1lbnQ7
Cit9OworCisvKioKKyAqIENsb25lIGFuZCByZXR1cm4gYSBuZXcgUmVhY3RFbGVtZW50IHVzaW5n
IGVsZW1lbnQgYXMgdGhlIHN0YXJ0aW5nIHBvaW50LgorICogU2VlIGh0dHBzOi8vZmFjZWJvb2su
Z2l0aHViLmlvL3JlYWN0L2RvY3MvdG9wLWxldmVsLWFwaS5odG1sI3JlYWN0LmNsb25lZWxlbWVu
dAorICovCitSZWFjdEVsZW1lbnQuY2xvbmVFbGVtZW50ID0gZnVuY3Rpb24gKGVsZW1lbnQsIGNv
bmZpZywgY2hpbGRyZW4pIHsKKyAgdmFyIHByb3BOYW1lOworCisgIC8vIE9yaWdpbmFsIHByb3Bz
IGFyZSBjb3BpZWQKKyAgdmFyIHByb3BzID0gX2Fzc2lnbih7fSwgZWxlbWVudC5wcm9wcyk7CisK
KyAgLy8gUmVzZXJ2ZWQgbmFtZXMgYXJlIGV4dHJhY3RlZAorICB2YXIga2V5ID0gZWxlbWVudC5r
ZXk7CisgIHZhciByZWYgPSBlbGVtZW50LnJlZjsKKyAgLy8gU2VsZiBpcyBwcmVzZXJ2ZWQgc2lu
Y2UgdGhlIG93bmVyIGlzIHByZXNlcnZlZC4KKyAgdmFyIHNlbGYgPSBlbGVtZW50Ll9zZWxmOwor
ICAvLyBTb3VyY2UgaXMgcHJlc2VydmVkIHNpbmNlIGNsb25lRWxlbWVudCBpcyB1bmxpa2VseSB0
byBiZSB0YXJnZXRlZCBieSBhCisgIC8vIHRyYW5zcGlsZXIsIGFuZCB0aGUgb3JpZ2luYWwgc291
cmNlIGlzIHByb2JhYmx5IGEgYmV0dGVyIGluZGljYXRvciBvZiB0aGUKKyAgLy8gdHJ1ZSBvd25l
ci4KKyAgdmFyIHNvdXJjZSA9IGVsZW1lbnQuX3NvdXJjZTsKKworICAvLyBPd25lciB3aWxsIGJl
IHByZXNlcnZlZCwgdW5sZXNzIHJlZiBpcyBvdmVycmlkZGVuCisgIHZhciBvd25lciA9IGVsZW1l
bnQuX293bmVyOworCisgIGlmIChjb25maWcgIT0gbnVsbCkgeworICAgIGlmIChoYXNWYWxpZFJl
Zihjb25maWcpKSB7CisgICAgICAvLyBTaWxlbnRseSBzdGVhbCB0aGUgcmVmIGZyb20gdGhlIHBh
cmVudC4KKyAgICAgIHJlZiA9IGNvbmZpZy5yZWY7CisgICAgICBvd25lciA9IFJlYWN0Q3VycmVu
dE93bmVyLmN1cnJlbnQ7CisgICAgfQorICAgIGlmIChoYXNWYWxpZEtleShjb25maWcpKSB7Cisg
ICAgICBrZXkgPSAnJyArIGNvbmZpZy5rZXk7CisgICAgfQorCisgICAgLy8gUmVtYWluaW5nIHBy
b3BlcnRpZXMgb3ZlcnJpZGUgZXhpc3RpbmcgcHJvcHMKKyAgICB2YXIgZGVmYXVsdFByb3BzOwor
ICAgIGlmIChlbGVtZW50LnR5cGUgJiYgZWxlbWVudC50eXBlLmRlZmF1bHRQcm9wcykgeworICAg
ICAgZGVmYXVsdFByb3BzID0gZWxlbWVudC50eXBlLmRlZmF1bHRQcm9wczsKKyAgICB9CisgICAg
Zm9yIChwcm9wTmFtZSBpbiBjb25maWcpIHsKKyAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxs
KGNvbmZpZywgcHJvcE5hbWUpICYmICFSRVNFUlZFRF9QUk9QUy5oYXNPd25Qcm9wZXJ0eShwcm9w
TmFtZSkpIHsKKyAgICAgICAgaWYgKGNvbmZpZ1twcm9wTmFtZV0gPT09IHVuZGVmaW5lZCAmJiBk
ZWZhdWx0UHJvcHMgIT09IHVuZGVmaW5lZCkgeworICAgICAgICAgIC8vIFJlc29sdmUgZGVmYXVs
dCBwcm9wcworICAgICAgICAgIHByb3BzW3Byb3BOYW1lXSA9IGRlZmF1bHRQcm9wc1twcm9wTmFt
ZV07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgcHJvcHNbcHJvcE5hbWVdID0gY29uZmln
W3Byb3BOYW1lXTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorCisgIC8vIENoaWxk
cmVuIGNhbiBiZSBtb3JlIHRoYW4gb25lIGFyZ3VtZW50LCBhbmQgdGhvc2UgYXJlIHRyYW5zZmVy
cmVkIG9udG8KKyAgLy8gdGhlIG5ld2x5IGFsbG9jYXRlZCBwcm9wcyBvYmplY3QuCisgIHZhciBj
aGlsZHJlbkxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGggLSAyOworICBpZiAoY2hpbGRyZW5MZW5n
dGggPT09IDEpIHsKKyAgICBwcm9wcy5jaGlsZHJlbiA9IGNoaWxkcmVuOworICB9IGVsc2UgaWYg
KGNoaWxkcmVuTGVuZ3RoID4gMSkgeworICAgIHZhciBjaGlsZEFycmF5ID0gQXJyYXkoY2hpbGRy
ZW5MZW5ndGgpOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW5MZW5ndGg7IGkrKykg
eworICAgICAgY2hpbGRBcnJheVtpXSA9IGFyZ3VtZW50c1tpICsgMl07CisgICAgfQorICAgIHBy
b3BzLmNoaWxkcmVuID0gY2hpbGRBcnJheTsKKyAgfQorCisgIHJldHVybiBSZWFjdEVsZW1lbnQo
ZWxlbWVudC50eXBlLCBrZXksIHJlZiwgc2VsZiwgc291cmNlLCBvd25lciwgcHJvcHMpOworfTsK
KworLyoqCisgKiBWZXJpZmllcyB0aGUgb2JqZWN0IGlzIGEgUmVhY3RFbGVtZW50LgorICogU2Vl
IGh0dHBzOi8vZmFjZWJvb2suZ2l0aHViLmlvL3JlYWN0L2RvY3MvdG9wLWxldmVsLWFwaS5odG1s
I3JlYWN0LmlzdmFsaWRlbGVtZW50CisgKiBAcGFyYW0gez9vYmplY3R9IG9iamVjdAorICogQHJl
dHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBgb2JqZWN0YCBpcyBhIHZhbGlkIGNvbXBvbmVudC4KKyAq
IEBmaW5hbAorICovCitSZWFjdEVsZW1lbnQuaXNWYWxpZEVsZW1lbnQgPSBmdW5jdGlvbiAob2Jq
ZWN0KSB7CisgIHJldHVybiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QgIT09
IG51bGwgJiYgb2JqZWN0LiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEU7Cit9OworCitt
b2R1bGUuZXhwb3J0cyA9IFJlYWN0RWxlbWVudDsKK30seyIxNCI6MTQsIjE3IjoxNywiMzMiOjMz
LCI0OSI6NDksIjUwIjo1MH1dLDE3OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsK
Ky8qKgorICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4KKyAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRl
ciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlCisgKiBMSUNFTlNFIGZpbGUgaW4g
dGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3Jh
bnQKKyAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUg
aW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorICoKKyAqIAorICovCisKKyd1c2Ugc3RyaWN0JzsKKwor
Ly8gVGhlIFN5bWJvbCB1c2VkIHRvIHRhZyB0aGUgUmVhY3RFbGVtZW50IHR5cGUuIElmIHRoZXJl
IGlzIG5vIG5hdGl2ZSBTeW1ib2wKKy8vIG5vciBwb2x5ZmlsbCwgdGhlbiBhIHBsYWluIG51bWJl
ciBpcyB1c2VkIGZvciBwZXJmb3JtYW5jZS4KKwordmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9IHR5
cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sWydmb3InXSAmJiBTeW1ib2xbJ2Zv
ciddKCdyZWFjdC5lbGVtZW50JykgfHwgMHhlYWM3OworCittb2R1bGUuZXhwb3J0cyA9IFJFQUNU
X0VMRU1FTlRfVFlQRTsKK30se31dLDE4OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRz
KXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4KKyAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1
bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlCisgKiBMSUNFTlNFIGZpbGUg
aW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwg
Z3JhbnQKKyAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZp
bGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorICoKKyAqLworCisvKioKKyAqIFJlYWN0RWxlbWVu
dFZhbGlkYXRvciBwcm92aWRlcyBhIHdyYXBwZXIgYXJvdW5kIGEgZWxlbWVudCBmYWN0b3J5Cisg
KiB3aGljaCB2YWxpZGF0ZXMgdGhlIHByb3BzIHBhc3NlZCB0byB0aGUgZWxlbWVudC4gVGhpcyBp
cyBpbnRlbmRlZCB0byBiZQorICogdXNlZCBvbmx5IGluIERFViBhbmQgY291bGQgYmUgcmVwbGFj
ZWQgYnkgYSBzdGF0aWMgdHlwZSBjaGVja2VyIGZvciBsYW5ndWFnZXMKKyAqIHRoYXQgc3VwcG9y
dCBpdC4KKyAqLworCisndXNlIHN0cmljdCc7CisKK3ZhciBSZWFjdEN1cnJlbnRPd25lciA9IF9k
ZXJlcV8oMTQpOwordmFyIFJlYWN0Q29tcG9uZW50VHJlZUhvb2sgPSBfZGVyZXFfKDEyKTsKK3Zh
ciBSZWFjdEVsZW1lbnQgPSBfZGVyZXFfKDE2KTsKKwordmFyIGNoZWNrUmVhY3RUeXBlU3BlYyA9
IF9kZXJlcV8oMzQpOworCit2YXIgY2FuRGVmaW5lUHJvcGVydHkgPSBfZGVyZXFfKDMzKTsKK3Zh
ciBnZXRJdGVyYXRvckZuID0gX2RlcmVxXygzNik7Cit2YXIgd2FybmluZyA9IF9kZXJlcV8oNDkp
OworCitmdW5jdGlvbiBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0oKSB7CisgIGlmIChSZWFj
dEN1cnJlbnRPd25lci5jdXJyZW50KSB7CisgICAgdmFyIG5hbWUgPSBSZWFjdEN1cnJlbnRPd25l
ci5jdXJyZW50LmdldE5hbWUoKTsKKyAgICBpZiAobmFtZSkgeworICAgICAgcmV0dXJuICcgQ2hl
Y2sgdGhlIHJlbmRlciBtZXRob2Qgb2YgYCcgKyBuYW1lICsgJ2AuJzsKKyAgICB9CisgIH0KKyAg
cmV0dXJuICcnOworfQorCitmdW5jdGlvbiBnZXRTb3VyY2VJbmZvRXJyb3JBZGRlbmR1bShlbGVt
ZW50UHJvcHMpIHsKKyAgaWYgKGVsZW1lbnRQcm9wcyAhPT0gbnVsbCAmJiBlbGVtZW50UHJvcHMg
IT09IHVuZGVmaW5lZCAmJiBlbGVtZW50UHJvcHMuX19zb3VyY2UgIT09IHVuZGVmaW5lZCkgewor
ICAgIHZhciBzb3VyY2UgPSBlbGVtZW50UHJvcHMuX19zb3VyY2U7CisgICAgdmFyIGZpbGVOYW1l
ID0gc291cmNlLmZpbGVOYW1lLnJlcGxhY2UoL14uKltcXFwvXS8sICcnKTsKKyAgICB2YXIgbGlu
ZU51bWJlciA9IHNvdXJjZS5saW5lTnVtYmVyOworICAgIHJldHVybiAnIENoZWNrIHlvdXIgY29k
ZSBhdCAnICsgZmlsZU5hbWUgKyAnOicgKyBsaW5lTnVtYmVyICsgJy4nOworICB9CisgIHJldHVy
biAnJzsKK30KKworLyoqCisgKiBXYXJuIGlmIHRoZXJlJ3Mgbm8ga2V5IGV4cGxpY2l0bHkgc2V0
IG9uIGR5bmFtaWMgYXJyYXlzIG9mIGNoaWxkcmVuIG9yCisgKiBvYmplY3Qga2V5cyBhcmUgbm90
IHZhbGlkLiBUaGlzIGFsbG93cyB1cyB0byBrZWVwIHRyYWNrIG9mIGNoaWxkcmVuIGJldHdlZW4K
KyAqIHVwZGF0ZXMuCisgKi8KK3ZhciBvd25lckhhc0tleVVzZVdhcm5pbmcgPSB7fTsKKworZnVu
Y3Rpb24gZ2V0Q3VycmVudENvbXBvbmVudEVycm9ySW5mbyhwYXJlbnRUeXBlKSB7CisgIHZhciBp
bmZvID0gZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKCk7CisKKyAgaWYgKCFpbmZvKSB7Cisg
ICAgdmFyIHBhcmVudE5hbWUgPSB0eXBlb2YgcGFyZW50VHlwZSA9PT0gJ3N0cmluZycgPyBwYXJl
bnRUeXBlIDogcGFyZW50VHlwZS5kaXNwbGF5TmFtZSB8fCBwYXJlbnRUeXBlLm5hbWU7CisgICAg
aWYgKHBhcmVudE5hbWUpIHsKKyAgICAgIGluZm8gPSAnIENoZWNrIHRoZSB0b3AtbGV2ZWwgcmVu
ZGVyIGNhbGwgdXNpbmcgPCcgKyBwYXJlbnROYW1lICsgJz4uJzsKKyAgICB9CisgIH0KKyAgcmV0
dXJuIGluZm87Cit9CisKKy8qKgorICogV2FybiBpZiB0aGUgZWxlbWVudCBkb2Vzbid0IGhhdmUg
YW4gZXhwbGljaXQga2V5IGFzc2lnbmVkIHRvIGl0LgorICogVGhpcyBlbGVtZW50IGlzIGluIGFu
IGFycmF5LiBUaGUgYXJyYXkgY291bGQgZ3JvdyBhbmQgc2hyaW5rIG9yIGJlCisgKiByZW9yZGVy
ZWQuIEFsbCBjaGlsZHJlbiB0aGF0IGhhdmVuJ3QgYWxyZWFkeSBiZWVuIHZhbGlkYXRlZCBhcmUg
cmVxdWlyZWQgdG8KKyAqIGhhdmUgYSAia2V5IiBwcm9wZXJ0eSBhc3NpZ25lZCB0byBpdC4gRXJy
b3Igc3RhdHVzZXMgYXJlIGNhY2hlZCBzbyBhIHdhcm5pbmcKKyAqIHdpbGwgb25seSBiZSBzaG93
biBvbmNlLgorICoKKyAqIEBpbnRlcm5hbAorICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IGVsZW1l
bnQgRWxlbWVudCB0aGF0IHJlcXVpcmVzIGEga2V5LgorICogQHBhcmFtIHsqfSBwYXJlbnRUeXBl
IGVsZW1lbnQncyBwYXJlbnQncyB0eXBlLgorICovCitmdW5jdGlvbiB2YWxpZGF0ZUV4cGxpY2l0
S2V5KGVsZW1lbnQsIHBhcmVudFR5cGUpIHsKKyAgaWYgKCFlbGVtZW50Ll9zdG9yZSB8fCBlbGVt
ZW50Ll9zdG9yZS52YWxpZGF0ZWQgfHwgZWxlbWVudC5rZXkgIT0gbnVsbCkgeworICAgIHJldHVy
bjsKKyAgfQorICBlbGVtZW50Ll9zdG9yZS52YWxpZGF0ZWQgPSB0cnVlOworCisgIHZhciBtZW1v
aXplciA9IG93bmVySGFzS2V5VXNlV2FybmluZy51bmlxdWVLZXkgfHwgKG93bmVySGFzS2V5VXNl
V2FybmluZy51bmlxdWVLZXkgPSB7fSk7CisKKyAgdmFyIGN1cnJlbnRDb21wb25lbnRFcnJvcklu
Zm8gPSBnZXRDdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvKHBhcmVudFR5cGUpOworICBpZiAobWVt
b2l6ZXJbY3VycmVudENvbXBvbmVudEVycm9ySW5mb10pIHsKKyAgICByZXR1cm47CisgIH0KKyAg
bWVtb2l6ZXJbY3VycmVudENvbXBvbmVudEVycm9ySW5mb10gPSB0cnVlOworCisgIC8vIFVzdWFs
bHkgdGhlIGN1cnJlbnQgb3duZXIgaXMgdGhlIG9mZmVuZGVyLCBidXQgaWYgaXQgYWNjZXB0cyBj
aGlsZHJlbiBhcyBhCisgIC8vIHByb3BlcnR5LCBpdCBtYXkgYmUgdGhlIGNyZWF0b3Igb2YgdGhl
IGNoaWxkIHRoYXQncyByZXNwb25zaWJsZSBmb3IKKyAgLy8gYXNzaWduaW5nIGl0IGEga2V5Lgor
ICB2YXIgY2hpbGRPd25lciA9ICcnOworICBpZiAoZWxlbWVudCAmJiBlbGVtZW50Ll9vd25lciAm
JiBlbGVtZW50Ll9vd25lciAhPT0gUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCkgeworICAgIC8v
IEdpdmUgdGhlIGNvbXBvbmVudCB0aGF0IG9yaWdpbmFsbHkgY3JlYXRlZCB0aGlzIGNoaWxkLgor
ICAgIGNoaWxkT3duZXIgPSAnIEl0IHdhcyBwYXNzZWQgYSBjaGlsZCBmcm9tICcgKyBlbGVtZW50
Ll9vd25lci5nZXROYW1lKCkgKyAnLic7CisgIH0KKworICAiZGV2ZWxvcG1lbnQiICE9PSAncHJv
ZHVjdGlvbicgPyB3YXJuaW5nKGZhbHNlLCAnRWFjaCBjaGlsZCBpbiBhbiBhcnJheSBvciBpdGVy
YXRvciBzaG91bGQgaGF2ZSBhIHVuaXF1ZSAia2V5IiBwcm9wLicgKyAnJXMlcyBTZWUgaHR0cHM6
Ly9mYi5tZS9yZWFjdC13YXJuaW5nLWtleXMgZm9yIG1vcmUgaW5mb3JtYXRpb24uJXMnLCBjdXJy
ZW50Q29tcG9uZW50RXJyb3JJbmZvLCBjaGlsZE93bmVyLCBSZWFjdENvbXBvbmVudFRyZWVIb29r
LmdldEN1cnJlbnRTdGFja0FkZGVuZHVtKGVsZW1lbnQpKSA6IHZvaWQgMDsKK30KKworLyoqCisg
KiBFbnN1cmUgdGhhdCBldmVyeSBlbGVtZW50IGVpdGhlciBpcyBwYXNzZWQgaW4gYSBzdGF0aWMg
bG9jYXRpb24sIGluIGFuCisgKiBhcnJheSB3aXRoIGFuIGV4cGxpY2l0IGtleXMgcHJvcGVydHkg
ZGVmaW5lZCwgb3IgaW4gYW4gb2JqZWN0IGxpdGVyYWwKKyAqIHdpdGggdmFsaWQga2V5IHByb3Bl
cnR5LgorICoKKyAqIEBpbnRlcm5hbAorICogQHBhcmFtIHtSZWFjdE5vZGV9IG5vZGUgU3RhdGlj
YWxseSBwYXNzZWQgY2hpbGQgb2YgYW55IHR5cGUuCisgKiBAcGFyYW0geyp9IHBhcmVudFR5cGUg
bm9kZSdzIHBhcmVudCdzIHR5cGUuCisgKi8KK2Z1bmN0aW9uIHZhbGlkYXRlQ2hpbGRLZXlzKG5v
ZGUsIHBhcmVudFR5cGUpIHsKKyAgaWYgKHR5cGVvZiBub2RlICE9PSAnb2JqZWN0JykgeworICAg
IHJldHVybjsKKyAgfQorICBpZiAoQXJyYXkuaXNBcnJheShub2RlKSkgeworICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgbm9kZS5sZW5ndGg7IGkrKykgeworICAgICAgdmFyIGNoaWxkID0gbm9kZVtp
XTsKKyAgICAgIGlmIChSZWFjdEVsZW1lbnQuaXNWYWxpZEVsZW1lbnQoY2hpbGQpKSB7CisgICAg
ICAgIHZhbGlkYXRlRXhwbGljaXRLZXkoY2hpbGQsIHBhcmVudFR5cGUpOworICAgICAgfQorICAg
IH0KKyAgfSBlbHNlIGlmIChSZWFjdEVsZW1lbnQuaXNWYWxpZEVsZW1lbnQobm9kZSkpIHsKKyAg
ICAvLyBUaGlzIGVsZW1lbnQgd2FzIHBhc3NlZCBpbiBhIHZhbGlkIGxvY2F0aW9uLgorICAgIGlm
IChub2RlLl9zdG9yZSkgeworICAgICAgbm9kZS5fc3RvcmUudmFsaWRhdGVkID0gdHJ1ZTsKKyAg
ICB9CisgIH0gZWxzZSBpZiAobm9kZSkgeworICAgIHZhciBpdGVyYXRvckZuID0gZ2V0SXRlcmF0
b3JGbihub2RlKTsKKyAgICAvLyBFbnRyeSBpdGVyYXRvcnMgcHJvdmlkZSBpbXBsaWNpdCBrZXlz
LgorICAgIGlmIChpdGVyYXRvckZuKSB7CisgICAgICBpZiAoaXRlcmF0b3JGbiAhPT0gbm9kZS5l
bnRyaWVzKSB7CisgICAgICAgIHZhciBpdGVyYXRvciA9IGl0ZXJhdG9yRm4uY2FsbChub2RlKTsK
KyAgICAgICAgdmFyIHN0ZXA7CisgICAgICAgIHdoaWxlICghKHN0ZXAgPSBpdGVyYXRvci5uZXh0
KCkpLmRvbmUpIHsKKyAgICAgICAgICBpZiAoUmVhY3RFbGVtZW50LmlzVmFsaWRFbGVtZW50KHN0
ZXAudmFsdWUpKSB7CisgICAgICAgICAgICB2YWxpZGF0ZUV4cGxpY2l0S2V5KHN0ZXAudmFsdWUs
IHBhcmVudFR5cGUpOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAg
fQorfQorCisvKioKKyAqIEdpdmVuIGFuIGVsZW1lbnQsIHZhbGlkYXRlIHRoYXQgaXRzIHByb3Bz
IGZvbGxvdyB0aGUgcHJvcFR5cGVzIGRlZmluaXRpb24sCisgKiBwcm92aWRlZCBieSB0aGUgdHlw
ZS4KKyAqCisgKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gZWxlbWVudAorICovCitmdW5jdGlvbiB2
YWxpZGF0ZVByb3BUeXBlcyhlbGVtZW50KSB7CisgIHZhciBjb21wb25lbnRDbGFzcyA9IGVsZW1l
bnQudHlwZTsKKyAgaWYgKHR5cGVvZiBjb21wb25lbnRDbGFzcyAhPT0gJ2Z1bmN0aW9uJykgewor
ICAgIHJldHVybjsKKyAgfQorICB2YXIgbmFtZSA9IGNvbXBvbmVudENsYXNzLmRpc3BsYXlOYW1l
IHx8IGNvbXBvbmVudENsYXNzLm5hbWU7CisgIGlmIChjb21wb25lbnRDbGFzcy5wcm9wVHlwZXMp
IHsKKyAgICBjaGVja1JlYWN0VHlwZVNwZWMoY29tcG9uZW50Q2xhc3MucHJvcFR5cGVzLCBlbGVt
ZW50LnByb3BzLCAncHJvcCcsIG5hbWUsIGVsZW1lbnQsIG51bGwpOworICB9CisgIGlmICh0eXBl
b2YgY29tcG9uZW50Q2xhc3MuZ2V0RGVmYXVsdFByb3BzID09PSAnZnVuY3Rpb24nKSB7CisgICAg
ImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhjb21wb25lbnRDbGFzcy5n
ZXREZWZhdWx0UHJvcHMuaXNSZWFjdENsYXNzQXBwcm92ZWQsICdnZXREZWZhdWx0UHJvcHMgaXMg
b25seSB1c2VkIG9uIGNsYXNzaWMgUmVhY3QuY3JlYXRlQ2xhc3MgJyArICdkZWZpbml0aW9ucy4g
VXNlIGEgc3RhdGljIHByb3BlcnR5IG5hbWVkIGBkZWZhdWx0UHJvcHNgIGluc3RlYWQuJykgOiB2
b2lkIDA7CisgIH0KK30KKwordmFyIFJlYWN0RWxlbWVudFZhbGlkYXRvciA9IHsKKworICBjcmVh
dGVFbGVtZW50OiBmdW5jdGlvbiAodHlwZSwgcHJvcHMsIGNoaWxkcmVuKSB7CisgICAgdmFyIHZh
bGlkVHlwZSA9IHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdHlwZSA9PT0gJ2Z1
bmN0aW9uJzsKKyAgICAvLyBXZSB3YXJuIGluIHRoaXMgY2FzZSBidXQgZG9uJ3QgdGhyb3cuIFdl
IGV4cGVjdCB0aGUgZWxlbWVudCBjcmVhdGlvbiB0bworICAgIC8vIHN1Y2NlZWQgYW5kIHRoZXJl
IHdpbGwgbGlrZWx5IGJlIGVycm9ycyBpbiByZW5kZXIuCisgICAgaWYgKCF2YWxpZFR5cGUpIHsK
KyAgICAgIGlmICh0eXBlb2YgdHlwZSAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgdHlwZSAhPT0g
J3N0cmluZycpIHsKKyAgICAgICAgdmFyIGluZm8gPSAnJzsKKyAgICAgICAgaWYgKHR5cGUgPT09
IHVuZGVmaW5lZCB8fCB0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCAm
JiBPYmplY3Qua2V5cyh0eXBlKS5sZW5ndGggPT09IDApIHsKKyAgICAgICAgICBpbmZvICs9ICcg
WW91IGxpa2VseSBmb3Jnb3QgdG8gZXhwb3J0IHlvdXIgY29tcG9uZW50IGZyb20gdGhlIGZpbGUg
JyArICdpdFwncyBkZWZpbmVkIGluLic7CisgICAgICAgIH0KKworICAgICAgICB2YXIgc291cmNl
SW5mbyA9IGdldFNvdXJjZUluZm9FcnJvckFkZGVuZHVtKHByb3BzKTsKKyAgICAgICAgaWYgKHNv
dXJjZUluZm8pIHsKKyAgICAgICAgICBpbmZvICs9IHNvdXJjZUluZm87CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgaW5mbyArPSBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0oKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGluZm8gKz0gUmVhY3RDb21wb25lbnRUcmVlSG9vay5nZXRDdXJy
ZW50U3RhY2tBZGRlbmR1bSgpOworCisgICAgICAgICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0
aW9uJyA/IHdhcm5pbmcoZmFsc2UsICdSZWFjdC5jcmVhdGVFbGVtZW50OiB0eXBlIGlzIGludmFs
aWQgLS0gZXhwZWN0ZWQgYSBzdHJpbmcgKGZvciAnICsgJ2J1aWx0LWluIGNvbXBvbmVudHMpIG9y
IGEgY2xhc3MvZnVuY3Rpb24gKGZvciBjb21wb3NpdGUgJyArICdjb21wb25lbnRzKSBidXQgZ290
OiAlcy4lcycsIHR5cGUgPT0gbnVsbCA/IHR5cGUgOiB0eXBlb2YgdHlwZSwgaW5mbykgOiB2b2lk
IDA7CisgICAgICB9CisgICAgfQorCisgICAgdmFyIGVsZW1lbnQgPSBSZWFjdEVsZW1lbnQuY3Jl
YXRlRWxlbWVudC5hcHBseSh0aGlzLCBhcmd1bWVudHMpOworCisgICAgLy8gVGhlIHJlc3VsdCBj
YW4gYmUgbnVsbGlzaCBpZiBhIG1vY2sgb3IgYSBjdXN0b20gZnVuY3Rpb24gaXMgdXNlZC4KKyAg
ICAvLyBUT0RPOiBEcm9wIHRoaXMgd2hlbiB0aGVzZSBhcmUgbm8gbG9uZ2VyIGFsbG93ZWQgYXMg
dGhlIHR5cGUgYXJndW1lbnQuCisgICAgaWYgKGVsZW1lbnQgPT0gbnVsbCkgeworICAgICAgcmV0
dXJuIGVsZW1lbnQ7CisgICAgfQorCisgICAgLy8gU2tpcCBrZXkgd2FybmluZyBpZiB0aGUgdHlw
ZSBpc24ndCB2YWxpZCBzaW5jZSBvdXIga2V5IHZhbGlkYXRpb24gbG9naWMKKyAgICAvLyBkb2Vz
bid0IGV4cGVjdCBhIG5vbi1zdHJpbmcvZnVuY3Rpb24gdHlwZSBhbmQgY2FuIHRocm93IGNvbmZ1
c2luZyBlcnJvcnMuCisgICAgLy8gV2UgZG9uJ3Qgd2FudCBleGNlcHRpb24gYmVoYXZpb3IgdG8g
ZGlmZmVyIGJldHdlZW4gZGV2IGFuZCBwcm9kLgorICAgIC8vIChSZW5kZXJpbmcgd2lsbCB0aHJv
dyB3aXRoIGEgaGVscGZ1bCBtZXNzYWdlIGFuZCBhcyBzb29uIGFzIHRoZSB0eXBlIGlzCisgICAg
Ly8gZml4ZWQsIHRoZSBrZXkgd2FybmluZ3Mgd2lsbCBhcHBlYXIuKQorICAgIGlmICh2YWxpZFR5
cGUpIHsKKyAgICAgIGZvciAodmFyIGkgPSAyOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7
CisgICAgICAgIHZhbGlkYXRlQ2hpbGRLZXlzKGFyZ3VtZW50c1tpXSwgdHlwZSk7CisgICAgICB9
CisgICAgfQorCisgICAgdmFsaWRhdGVQcm9wVHlwZXMoZWxlbWVudCk7CisKKyAgICByZXR1cm4g
ZWxlbWVudDsKKyAgfSwKKworICBjcmVhdGVGYWN0b3J5OiBmdW5jdGlvbiAodHlwZSkgeworICAg
IHZhciB2YWxpZGF0ZWRGYWN0b3J5ID0gUmVhY3RFbGVtZW50VmFsaWRhdG9yLmNyZWF0ZUVsZW1l
bnQuYmluZChudWxsLCB0eXBlKTsKKyAgICAvLyBMZWdhY3kgaG9vayBUT0RPOiBXYXJuIGlmIHRo
aXMgaXMgYWNjZXNzZWQKKyAgICB2YWxpZGF0ZWRGYWN0b3J5LnR5cGUgPSB0eXBlOworCisgICAg
aWYgKCJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJykgeworICAgICAgaWYgKGNhbkRlZmlu
ZVByb3BlcnR5KSB7CisgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh2YWxpZGF0ZWRGYWN0
b3J5LCAndHlwZScsIHsKKyAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSwKKyAgICAgICAgICBn
ZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0
aW9uJyA/IHdhcm5pbmcoZmFsc2UsICdGYWN0b3J5LnR5cGUgaXMgZGVwcmVjYXRlZC4gQWNjZXNz
IHRoZSBjbGFzcyBkaXJlY3RseSAnICsgJ2JlZm9yZSBwYXNzaW5nIGl0IHRvIGNyZWF0ZUZhY3Rv
cnkuJykgOiB2b2lkIDA7CisgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywg
J3R5cGUnLCB7CisgICAgICAgICAgICAgIHZhbHVlOiB0eXBlCisgICAgICAgICAgICB9KTsKKyAg
ICAgICAgICAgIHJldHVybiB0eXBlOworICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICB9
CisgICAgfQorCisgICAgcmV0dXJuIHZhbGlkYXRlZEZhY3Rvcnk7CisgIH0sCisKKyAgY2xvbmVF
bGVtZW50OiBmdW5jdGlvbiAoZWxlbWVudCwgcHJvcHMsIGNoaWxkcmVuKSB7CisgICAgdmFyIG5l
d0VsZW1lbnQgPSBSZWFjdEVsZW1lbnQuY2xvbmVFbGVtZW50LmFwcGx5KHRoaXMsIGFyZ3VtZW50
cyk7CisgICAgZm9yICh2YXIgaSA9IDI7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsKKyAg
ICAgIHZhbGlkYXRlQ2hpbGRLZXlzKGFyZ3VtZW50c1tpXSwgbmV3RWxlbWVudC50eXBlKTsKKyAg
ICB9CisgICAgdmFsaWRhdGVQcm9wVHlwZXMobmV3RWxlbWVudCk7CisgICAgcmV0dXJuIG5ld0Vs
ZW1lbnQ7CisgIH0KKworfTsKKworbW9kdWxlLmV4cG9ydHMgPSBSZWFjdEVsZW1lbnRWYWxpZGF0
b3I7Cit9LHsiMTIiOjEyLCIxNCI6MTQsIjE2IjoxNiwiMzMiOjMzLCIzNCI6MzQsIjM2IjozNiwi
NDkiOjQ5fV0sMTk6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBD
b3B5cmlnaHQgMjAxNS1wcmVzZW50LCBGYWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qt
c3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBk
aXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAorICogb2Yg
cGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2Ft
ZSBkaXJlY3RvcnkuCisgKgorICovCisKKyd1c2Ugc3RyaWN0JzsKKwordmFyIF9wcm9kSW52YXJp
YW50ID0gX2RlcmVxXygzOSk7CisKK3ZhciBSZWFjdENoaWxkcmVuID0gX2RlcmVxXyg5KTsKK3Zh
ciBSZWFjdEVsZW1lbnQgPSBfZGVyZXFfKDE2KTsKKwordmFyIGVtcHR5RnVuY3Rpb24gPSBfZGVy
ZXFfKDQ1KTsKK3ZhciBpbnZhcmlhbnQgPSBfZGVyZXFfKDQ3KTsKK3ZhciB3YXJuaW5nID0gX2Rl
cmVxXyg0OSk7CisKKy8qKgorICogV2UgdXNlZCB0byBhbGxvdyBrZXllZCBvYmplY3RzIHRvIHNl
cnZlIGFzIGEgY29sbGVjdGlvbiBvZiBSZWFjdEVsZW1lbnRzLAorICogb3IgbmVzdGVkIHNldHMu
IFRoaXMgYWxsb3dlZCB1cyBhIHdheSB0byBleHBsaWNpdGx5IGtleSBhIHNldCBvciBmcmFnbWVu
dCBvZgorICogY29tcG9uZW50cy4gVGhpcyBpcyBub3cgYmVpbmcgcmVwbGFjZWQgd2l0aCBhbiBv
cGFxdWUgZGF0YSBzdHJ1Y3R1cmUuCisgKiBUaGUgdXBncmFkZSBwYXRoIGlzIHRvIGNhbGwgUmVh
Y3QuYWRkb25zLmNyZWF0ZUZyYWdtZW50KHsga2V5OiB2YWx1ZSB9KSB0bworICogY3JlYXRlIGEg
a2V5ZWQgZnJhZ21lbnQuIFRoZSByZXN1bHRpbmcgZGF0YSBzdHJ1Y3R1cmUgaXMgYW4gYXJyYXku
CisgKi8KKwordmFyIG51bWVyaWNQcm9wZXJ0eVJlZ2V4ID0gL15cZCskLzsKKwordmFyIHdhcm5l
ZEFib3V0TnVtZXJpYyA9IGZhbHNlOworCit2YXIgUmVhY3RGcmFnbWVudCA9IHsKKyAgLyoqCisg
ICAqIFdyYXAgYSBrZXllZCBvYmplY3QgaW4gYW4gb3BhcXVlIHByb3h5IHRoYXQgd2FybnMgeW91
IGlmIHlvdSBhY2Nlc3MgYW55CisgICAqIG9mIGl0cyBwcm9wZXJ0aWVzLgorICAgKiBTZWUgaHR0
cHM6Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3QvZG9jcy9jcmVhdGUtZnJhZ21lbnQuaHRtbAor
ICAgKi8KKyAgY3JlYXRlOiBmdW5jdGlvbiAob2JqZWN0KSB7CisgICAgaWYgKHR5cGVvZiBvYmpl
Y3QgIT09ICdvYmplY3QnIHx8ICFvYmplY3QgfHwgQXJyYXkuaXNBcnJheShvYmplY3QpKSB7Cisg
ICAgICAiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGZhbHNlLCAnUmVh
Y3QuYWRkb25zLmNyZWF0ZUZyYWdtZW50IG9ubHkgYWNjZXB0cyBhIHNpbmdsZSBvYmplY3QuIEdv
dDogJXMnLCBvYmplY3QpIDogdm9pZCAwOworICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICB9Cisg
ICAgaWYgKFJlYWN0RWxlbWVudC5pc1ZhbGlkRWxlbWVudChvYmplY3QpKSB7CisgICAgICAiZGV2
ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGZhbHNlLCAnUmVhY3QuYWRkb25z
LmNyZWF0ZUZyYWdtZW50IGRvZXMgbm90IGFjY2VwdCBhIFJlYWN0RWxlbWVudCAnICsgJ3dpdGhv
dXQgYSB3cmFwcGVyIG9iamVjdC4nKSA6IHZvaWQgMDsKKyAgICAgIHJldHVybiBvYmplY3Q7Cisg
ICAgfQorCisgICAgIShvYmplY3Qubm9kZVR5cGUgIT09IDEpID8gImRldmVsb3BtZW50IiAhPT0g
J3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnUmVhY3QuYWRkb25zLmNyZWF0ZUZyYWdt
ZW50KC4uLik6IEVuY291bnRlcmVkIGFuIGludmFsaWQgY2hpbGQ7IERPTSBlbGVtZW50cyBhcmUg
bm90IHZhbGlkIGNoaWxkcmVuIG9mIFJlYWN0IGNvbXBvbmVudHMuJykgOiBfcHJvZEludmFyaWFu
dCgnMCcpIDogdm9pZCAwOworCisgICAgdmFyIHJlc3VsdCA9IFtdOworCisgICAgZm9yICh2YXIg
a2V5IGluIG9iamVjdCkgeworICAgICAgaWYgKCJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9u
JykgeworICAgICAgICBpZiAoIXdhcm5lZEFib3V0TnVtZXJpYyAmJiBudW1lcmljUHJvcGVydHlS
ZWdleC50ZXN0KGtleSkpIHsKKyAgICAgICAgICAiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlv
bicgPyB3YXJuaW5nKGZhbHNlLCAnUmVhY3QuYWRkb25zLmNyZWF0ZUZyYWdtZW50KC4uLik6IENo
aWxkIG9iamVjdHMgc2hvdWxkIGhhdmUgJyArICdub24tbnVtZXJpYyBrZXlzIHNvIG9yZGVyaW5n
IGlzIHByZXNlcnZlZC4nKSA6IHZvaWQgMDsKKyAgICAgICAgICB3YXJuZWRBYm91dE51bWVyaWMg
PSB0cnVlOworICAgICAgICB9CisgICAgICB9CisgICAgICBSZWFjdENoaWxkcmVuLm1hcEludG9X
aXRoS2V5UHJlZml4SW50ZXJuYWwob2JqZWN0W2tleV0sIHJlc3VsdCwga2V5LCBlbXB0eUZ1bmN0
aW9uLnRoYXRSZXR1cm5zQXJndW1lbnQpOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cisg
IH0KK307CisKK21vZHVsZS5leHBvcnRzID0gUmVhY3RGcmFnbWVudDsKK30seyIxNiI6MTYsIjM5
IjozOSwiNDUiOjQ1LCI0NyI6NDcsIjQ5Ijo0OSwiOSI6OX1dLDIwOltmdW5jdGlvbihfZGVyZXFf
LG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJv
b2ssIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb3VyY2UgY29k
ZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlCisg
KiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUu
IEFuIGFkZGl0aW9uYWwgZ3JhbnQKKyAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGlu
IHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorICoKKyAqLworCisndXNl
IHN0cmljdCc7CisKKy8qKgorICogUmVhY3RMaW5rIGVuY2Fwc3VsYXRlcyBhIGNvbW1vbiBwYXR0
ZXJuIGluIHdoaWNoIGEgY29tcG9uZW50IHdhbnRzIHRvIG1vZGlmeQorICogYSBwcm9wIHJlY2Vp
dmVkIGZyb20gaXRzIHBhcmVudC4gUmVhY3RMaW5rIGFsbG93cyB0aGUgcGFyZW50IHRvIHBhc3Mg
ZG93biBhCisgKiB2YWx1ZSBjb3VwbGVkIHdpdGggYSBjYWxsYmFjayB0aGF0LCB3aGVuIGludm9r
ZWQsIGV4cHJlc3NlcyBhbiBpbnRlbnQgdG8KKyAqIG1vZGlmeSB0aGF0IHZhbHVlLiBGb3IgZXhh
bXBsZToKKyAqCisgKiBSZWFjdC5jcmVhdGVDbGFzcyh7CisgKiAgIGdldEluaXRpYWxTdGF0ZTog
ZnVuY3Rpb24oKSB7CisgKiAgICAgcmV0dXJuIHt2YWx1ZTogJyd9OworICogICB9LAorICogICBy
ZW5kZXI6IGZ1bmN0aW9uKCkgeworICogICAgIHZhciB2YWx1ZUxpbmsgPSBuZXcgUmVhY3RMaW5r
KHRoaXMuc3RhdGUudmFsdWUsIHRoaXMuX2hhbmRsZVZhbHVlQ2hhbmdlKTsKKyAqICAgICByZXR1
cm4gPGlucHV0IHZhbHVlTGluaz17dmFsdWVMaW5rfSAvPjsKKyAqICAgfSwKKyAqICAgX2hhbmRs
ZVZhbHVlQ2hhbmdlOiBmdW5jdGlvbihuZXdWYWx1ZSkgeworICogICAgIHRoaXMuc2V0U3RhdGUo
e3ZhbHVlOiBuZXdWYWx1ZX0pOworICogICB9CisgKiB9KTsKKyAqCisgKiBXZSBoYXZlIHByb3Zp
ZGVkIHNvbWUgc3VnYXJ5IG1peGlucyB0byBtYWtlIHRoZSBjcmVhdGlvbiBhbmQKKyAqIGNvbnN1
bXB0aW9uIG9mIFJlYWN0TGluayBlYXNpZXI7IHNlZSBMaW5rZWRWYWx1ZVV0aWxzIGFuZCBMaW5r
ZWRTdGF0ZU1peGluLgorICovCisKK3ZhciBSZWFjdCA9IF9kZXJlcV8oNSk7CisKKy8qKgorICog
RGVwcmVjYXRlZDogQW4gYW4gZWFzeSB3YXkgdG8gZXhwcmVzcyB0d28td2F5IGJpbmRpbmcgd2l0
aCBSZWFjdC4gCisgKiBTZWUgaHR0cHM6Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3QvZG9jcy90
d28td2F5LWJpbmRpbmctaGVscGVycy5odG1sCisgKgorICogQHBhcmFtIHsqfSB2YWx1ZSBjdXJy
ZW50IHZhbHVlIG9mIHRoZSBsaW5rCisgKiBAcGFyYW0ge2Z1bmN0aW9ufSByZXF1ZXN0Q2hhbmdl
IGNhbGxiYWNrIHRvIHJlcXVlc3QgYSBjaGFuZ2UKKyAqLworZnVuY3Rpb24gUmVhY3RMaW5rKHZh
bHVlLCByZXF1ZXN0Q2hhbmdlKSB7CisgIHRoaXMudmFsdWUgPSB2YWx1ZTsKKyAgdGhpcy5yZXF1
ZXN0Q2hhbmdlID0gcmVxdWVzdENoYW5nZTsKK30KKworLyoqCisgKiBDcmVhdGVzIGEgUHJvcFR5
cGUgdGhhdCBlbmZvcmNlcyB0aGUgUmVhY3RMaW5rIEFQSSBhbmQgb3B0aW9uYWxseSBjaGVja3Mg
dGhlCisgKiB0eXBlIG9mIHRoZSB2YWx1ZSBiZWluZyBwYXNzZWQgaW5zaWRlIHRoZSBsaW5rLiBF
eGFtcGxlOgorICoKKyAqIE15Q29tcG9uZW50LnByb3BUeXBlcyA9IHsKKyAqICAgdGFiSW5kZXhM
aW5rOiBSZWFjdExpbmsuUHJvcFR5cGVzLmxpbmsoUmVhY3QuUHJvcFR5cGVzLm51bWJlcikKKyAq
IH0KKyAqLworZnVuY3Rpb24gY3JlYXRlTGlua1R5cGVDaGVja2VyKGxpbmtUeXBlKSB7CisgIHZh
ciBzaGFwZXMgPSB7CisgICAgdmFsdWU6IGxpbmtUeXBlID09PSB1bmRlZmluZWQgPyBSZWFjdC5Q
cm9wVHlwZXMuYW55LmlzUmVxdWlyZWQgOiBsaW5rVHlwZS5pc1JlcXVpcmVkLAorICAgIHJlcXVl
c3RDaGFuZ2U6IFJlYWN0LlByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQKKyAgfTsKKyAgcmV0dXJu
IFJlYWN0LlByb3BUeXBlcy5zaGFwZShzaGFwZXMpOworfQorCitSZWFjdExpbmsuUHJvcFR5cGVz
ID0geworICBsaW5rOiBjcmVhdGVMaW5rVHlwZUNoZWNrZXIKK307CisKK21vZHVsZS5leHBvcnRz
ID0gUmVhY3RMaW5rOworfSx7IjUiOjV9XSwyMTpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhw
b3J0cyl7CisvKioKKyAqIENvcHlyaWdodCAyMDE1LXByZXNlbnQsIEZhY2Vib29rLCBJbmMuCisg
KiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5z
ZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZQorICogTElDRU5TRSBm
aWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlv
bmFsIGdyYW50CisgKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5U
UyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAqCisgKi8KKworJ3VzZSBzdHJpY3QnOwor
Cit2YXIgd2FybmluZyA9IF9kZXJlcV8oNDkpOworCitmdW5jdGlvbiB3YXJuTm9vcChwdWJsaWNJ
bnN0YW5jZSwgY2FsbGVyTmFtZSkgeworICBpZiAoImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rp
b24nKSB7CisgICAgdmFyIGNvbnN0cnVjdG9yID0gcHVibGljSW5zdGFuY2UuY29uc3RydWN0b3I7
CisgICAgImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhmYWxzZSwgJyVz
KC4uLik6IENhbiBvbmx5IHVwZGF0ZSBhIG1vdW50ZWQgb3IgbW91bnRpbmcgY29tcG9uZW50LiAn
ICsgJ1RoaXMgdXN1YWxseSBtZWFucyB5b3UgY2FsbGVkICVzKCkgb24gYW4gdW5tb3VudGVkIGNv
bXBvbmVudC4gJyArICdUaGlzIGlzIGEgbm8tb3AuIFBsZWFzZSBjaGVjayB0aGUgY29kZSBmb3Ig
dGhlICVzIGNvbXBvbmVudC4nLCBjYWxsZXJOYW1lLCBjYWxsZXJOYW1lLCBjb25zdHJ1Y3RvciAm
JiAoY29uc3RydWN0b3IuZGlzcGxheU5hbWUgfHwgY29uc3RydWN0b3IubmFtZSkgfHwgJ1JlYWN0
Q2xhc3MnKSA6IHZvaWQgMDsKKyAgfQorfQorCisvKioKKyAqIFRoaXMgaXMgdGhlIGFic3RyYWN0
IEFQSSBmb3IgYW4gdXBkYXRlIHF1ZXVlLgorICovCit2YXIgUmVhY3ROb29wVXBkYXRlUXVldWUg
PSB7CisKKyAgLyoqCisgICAqIENoZWNrcyB3aGV0aGVyIG9yIG5vdCB0aGlzIGNvbXBvc2l0ZSBj
b21wb25lbnQgaXMgbW91bnRlZC4KKyAgICogQHBhcmFtIHtSZWFjdENsYXNzfSBwdWJsaWNJbnN0
YW5jZSBUaGUgaW5zdGFuY2Ugd2Ugd2FudCB0byB0ZXN0LgorICAgKiBAcmV0dXJuIHtib29sZWFu
fSBUcnVlIGlmIG1vdW50ZWQsIGZhbHNlIG90aGVyd2lzZS4KKyAgICogQHByb3RlY3RlZAorICAg
KiBAZmluYWwKKyAgICovCisgIGlzTW91bnRlZDogZnVuY3Rpb24gKHB1YmxpY0luc3RhbmNlKSB7
CisgICAgcmV0dXJuIGZhbHNlOworICB9LAorCisgIC8qKgorICAgKiBFbnF1ZXVlIGEgY2FsbGJh
Y2sgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIGFmdGVyIGFsbCB0aGUgcGVuZGluZyB1cGRhdGVzCisg
ICAqIGhhdmUgcHJvY2Vzc2VkLgorICAgKgorICAgKiBAcGFyYW0ge1JlYWN0Q2xhc3N9IHB1Ymxp
Y0luc3RhbmNlIFRoZSBpbnN0YW5jZSB0byB1c2UgYXMgYHRoaXNgIGNvbnRleHQuCisgICAqIEBw
YXJhbSB7P2Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsZWQgYWZ0ZXIgc3RhdGUgaXMgdXBkYXRlZC4K
KyAgICogQGludGVybmFsCisgICAqLworICBlbnF1ZXVlQ2FsbGJhY2s6IGZ1bmN0aW9uIChwdWJs
aWNJbnN0YW5jZSwgY2FsbGJhY2spIHt9LAorCisgIC8qKgorICAgKiBGb3JjZXMgYW4gdXBkYXRl
LiBUaGlzIHNob3VsZCBvbmx5IGJlIGludm9rZWQgd2hlbiBpdCBpcyBrbm93biB3aXRoCisgICAq
IGNlcnRhaW50eSB0aGF0IHdlIGFyZSAqKm5vdCoqIGluIGEgRE9NIHRyYW5zYWN0aW9uLgorICAg
KgorICAgKiBZb3UgbWF5IHdhbnQgdG8gY2FsbCB0aGlzIHdoZW4geW91IGtub3cgdGhhdCBzb21l
IGRlZXBlciBhc3BlY3Qgb2YgdGhlCisgICAqIGNvbXBvbmVudCdzIHN0YXRlIGhhcyBjaGFuZ2Vk
IGJ1dCBgc2V0U3RhdGVgIHdhcyBub3QgY2FsbGVkLgorICAgKgorICAgKiBUaGlzIHdpbGwgbm90
IGludm9rZSBgc2hvdWxkQ29tcG9uZW50VXBkYXRlYCwgYnV0IGl0IHdpbGwgaW52b2tlCisgICAq
IGBjb21wb25lbnRXaWxsVXBkYXRlYCBhbmQgYGNvbXBvbmVudERpZFVwZGF0ZWAuCisgICAqCisg
ICAqIEBwYXJhbSB7UmVhY3RDbGFzc30gcHVibGljSW5zdGFuY2UgVGhlIGluc3RhbmNlIHRoYXQg
c2hvdWxkIHJlcmVuZGVyLgorICAgKiBAaW50ZXJuYWwKKyAgICovCisgIGVucXVldWVGb3JjZVVw
ZGF0ZTogZnVuY3Rpb24gKHB1YmxpY0luc3RhbmNlKSB7CisgICAgd2Fybk5vb3AocHVibGljSW5z
dGFuY2UsICdmb3JjZVVwZGF0ZScpOworICB9LAorCisgIC8qKgorICAgKiBSZXBsYWNlcyBhbGwg
b2YgdGhlIHN0YXRlLiBBbHdheXMgdXNlIHRoaXMgb3IgYHNldFN0YXRlYCB0byBtdXRhdGUgc3Rh
dGUuCisgICAqIFlvdSBzaG91bGQgdHJlYXQgYHRoaXMuc3RhdGVgIGFzIGltbXV0YWJsZS4KKyAg
ICoKKyAgICogVGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgYHRoaXMuc3RhdGVgIHdpbGwgYmUg
aW1tZWRpYXRlbHkgdXBkYXRlZCwgc28KKyAgICogYWNjZXNzaW5nIGB0aGlzLnN0YXRlYCBhZnRl
ciBjYWxsaW5nIHRoaXMgbWV0aG9kIG1heSByZXR1cm4gdGhlIG9sZCB2YWx1ZS4KKyAgICoKKyAg
ICogQHBhcmFtIHtSZWFjdENsYXNzfSBwdWJsaWNJbnN0YW5jZSBUaGUgaW5zdGFuY2UgdGhhdCBz
aG91bGQgcmVyZW5kZXIuCisgICAqIEBwYXJhbSB7b2JqZWN0fSBjb21wbGV0ZVN0YXRlIE5leHQg
c3RhdGUuCisgICAqIEBpbnRlcm5hbAorICAgKi8KKyAgZW5xdWV1ZVJlcGxhY2VTdGF0ZTogZnVu
Y3Rpb24gKHB1YmxpY0luc3RhbmNlLCBjb21wbGV0ZVN0YXRlKSB7CisgICAgd2Fybk5vb3AocHVi
bGljSW5zdGFuY2UsICdyZXBsYWNlU3RhdGUnKTsKKyAgfSwKKworICAvKioKKyAgICogU2V0cyBh
IHN1YnNldCBvZiB0aGUgc3RhdGUuIFRoaXMgb25seSBleGlzdHMgYmVjYXVzZSBfcGVuZGluZ1N0
YXRlIGlzCisgICAqIGludGVybmFsLiBUaGlzIHByb3ZpZGVzIGEgbWVyZ2luZyBzdHJhdGVneSB0
aGF0IGlzIG5vdCBhdmFpbGFibGUgdG8gZGVlcAorICAgKiBwcm9wZXJ0aWVzIHdoaWNoIGlzIGNv
bmZ1c2luZy4gVE9ETzogRXhwb3NlIHBlbmRpbmdTdGF0ZSBvciBkb24ndCB1c2UgaXQKKyAgICog
ZHVyaW5nIHRoZSBtZXJnZS4KKyAgICoKKyAgICogQHBhcmFtIHtSZWFjdENsYXNzfSBwdWJsaWNJ
bnN0YW5jZSBUaGUgaW5zdGFuY2UgdGhhdCBzaG91bGQgcmVyZW5kZXIuCisgICAqIEBwYXJhbSB7
b2JqZWN0fSBwYXJ0aWFsU3RhdGUgTmV4dCBwYXJ0aWFsIHN0YXRlIHRvIGJlIG1lcmdlZCB3aXRo
IHN0YXRlLgorICAgKiBAaW50ZXJuYWwKKyAgICovCisgIGVucXVldWVTZXRTdGF0ZTogZnVuY3Rp
b24gKHB1YmxpY0luc3RhbmNlLCBwYXJ0aWFsU3RhdGUpIHsKKyAgICB3YXJuTm9vcChwdWJsaWNJ
bnN0YW5jZSwgJ3NldFN0YXRlJyk7CisgIH0KK307CisKK21vZHVsZS5leHBvcnRzID0gUmVhY3RO
b29wVXBkYXRlUXVldWU7Cit9LHsiNDkiOjQ5fV0sMjI6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxl
LGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5j
LgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxp
Y2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGUKKyAqIExJQ0VO
U0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRk
aXRpb25hbCBncmFudAorICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBB
VEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisgKgorICogCisgKi8KKworJ3VzZSBz
dHJpY3QnOworCit2YXIgUmVhY3RQcm9wVHlwZUxvY2F0aW9uTmFtZXMgPSB7fTsKKworaWYgKCJk
ZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJykgeworICBSZWFjdFByb3BUeXBlTG9jYXRpb25O
YW1lcyA9IHsKKyAgICBwcm9wOiAncHJvcCcsCisgICAgY29udGV4dDogJ2NvbnRleHQnLAorICAg
IGNoaWxkQ29udGV4dDogJ2NoaWxkIGNvbnRleHQnCisgIH07Cit9CisKK21vZHVsZS5leHBvcnRz
ID0gUmVhY3RQcm9wVHlwZUxvY2F0aW9uTmFtZXM7Cit9LHt9XSwyMzpbZnVuY3Rpb24oX2RlcmVx
Xyxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vi
b29rLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc291cmNlIGNv
ZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZQor
ICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVl
LiBBbiBhZGRpdGlvbmFsIGdyYW50CisgKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBp
biB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAqCisgKi8KKworJ3Vz
ZSBzdHJpY3QnOworCit2YXIgX3JlcXVpcmUgPSBfZGVyZXFfKDE2KSwKKyAgICBpc1ZhbGlkRWxl
bWVudCA9IF9yZXF1aXJlLmlzVmFsaWRFbGVtZW50OworCit2YXIgZmFjdG9yeSA9IF9kZXJlcV8o
NTIpOworCittb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoaXNWYWxpZEVsZW1lbnQpOworfSx7IjE2
IjoxNiwiNTIiOjUyfV0sMjQ6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpeworLyoq
CisgKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRo
ZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUg
cm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAor
ICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0
aGUgc2FtZSBkaXJlY3RvcnkuCisgKgorICogCisgKi8KKworJ3VzZSBzdHJpY3QnOworCit2YXIg
UmVhY3RQcm9wVHlwZXNTZWNyZXQgPSAnU0VDUkVUX0RPX05PVF9QQVNTX1RISVNfT1JfWU9VX1dJ
TExfQkVfRklSRUQnOworCittb2R1bGUuZXhwb3J0cyA9IFJlYWN0UHJvcFR5cGVzU2VjcmV0Owor
fSx7fV0sMjU6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5
cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5
bGUgbGljZW5zZSBmb3VuZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJl
Y3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAorICogb2YgcGF0
ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBk
aXJlY3RvcnkuCisgKgorICovCisKKyd1c2Ugc3RyaWN0JzsKKwordmFyIF9hc3NpZ24gPSBfZGVy
ZXFfKDUwKTsKKwordmFyIFJlYWN0Q29tcG9uZW50ID0gX2RlcmVxXygxMSk7Cit2YXIgUmVhY3RO
b29wVXBkYXRlUXVldWUgPSBfZGVyZXFfKDIxKTsKKwordmFyIGVtcHR5T2JqZWN0ID0gX2RlcmVx
Xyg0Nik7CisKKy8qKgorICogQmFzZSBjbGFzcyBoZWxwZXJzIGZvciB0aGUgdXBkYXRpbmcgc3Rh
dGUgb2YgYSBjb21wb25lbnQuCisgKi8KK2Z1bmN0aW9uIFJlYWN0UHVyZUNvbXBvbmVudChwcm9w
cywgY29udGV4dCwgdXBkYXRlcikgeworICAvLyBEdXBsaWNhdGVkIGZyb20gUmVhY3RDb21wb25l
bnQuCisgIHRoaXMucHJvcHMgPSBwcm9wczsKKyAgdGhpcy5jb250ZXh0ID0gY29udGV4dDsKKyAg
dGhpcy5yZWZzID0gZW1wdHlPYmplY3Q7CisgIC8vIFdlIGluaXRpYWxpemUgdGhlIGRlZmF1bHQg
dXBkYXRlciBidXQgdGhlIHJlYWwgb25lIGdldHMgaW5qZWN0ZWQgYnkgdGhlCisgIC8vIHJlbmRl
cmVyLgorICB0aGlzLnVwZGF0ZXIgPSB1cGRhdGVyIHx8IFJlYWN0Tm9vcFVwZGF0ZVF1ZXVlOwor
fQorCitmdW5jdGlvbiBDb21wb25lbnREdW1teSgpIHt9CitDb21wb25lbnREdW1teS5wcm90b3R5
cGUgPSBSZWFjdENvbXBvbmVudC5wcm90b3R5cGU7CitSZWFjdFB1cmVDb21wb25lbnQucHJvdG90
eXBlID0gbmV3IENvbXBvbmVudER1bW15KCk7CitSZWFjdFB1cmVDb21wb25lbnQucHJvdG90eXBl
LmNvbnN0cnVjdG9yID0gUmVhY3RQdXJlQ29tcG9uZW50OworLy8gQXZvaWQgYW4gZXh0cmEgcHJv
dG90eXBlIGp1bXAgZm9yIHRoZXNlIG1ldGhvZHMuCitfYXNzaWduKFJlYWN0UHVyZUNvbXBvbmVu
dC5wcm90b3R5cGUsIFJlYWN0Q29tcG9uZW50LnByb3RvdHlwZSk7CitSZWFjdFB1cmVDb21wb25l
bnQucHJvdG90eXBlLmlzUHVyZVJlYWN0Q29tcG9uZW50ID0gdHJ1ZTsKKworbW9kdWxlLmV4cG9y
dHMgPSBSZWFjdFB1cmVDb21wb25lbnQ7Cit9LHsiMTEiOjExLCIyMSI6MjEsIjQ2Ijo0NiwiNTAi
OjUwfV0sMjY6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5
cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5
bGUgbGljZW5zZSBmb3VuZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJl
Y3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAorICogb2YgcGF0
ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBk
aXJlY3RvcnkuCisgKgorICovCisKKyd1c2Ugc3RyaWN0JzsKKwordmFyIFJlYWN0U3RhdGVTZXR0
ZXJzID0geworICAvKioKKyAgICogUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgY2FsbHMgdGhlIHBy
b3ZpZGVkIGZ1bmN0aW9uLCBhbmQgdXNlcyB0aGUgcmVzdWx0CisgICAqIG9mIHRoYXQgdG8gc2V0
IHRoZSBjb21wb25lbnQncyBzdGF0ZS4KKyAgICoKKyAgICogQHBhcmFtIHtSZWFjdENvbXBvc2l0
ZUNvbXBvbmVudH0gY29tcG9uZW50CisgICAqIEBwYXJhbSB7ZnVuY3Rpb259IGZ1bmNSZXR1cm5p
bmdTdGF0ZSBSZXR1cm5lZCBjYWxsYmFjayB1c2VzIHRoaXMgdG8KKyAgICogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRldGVybWluZSBob3cgdG8gdXBkYXRlIHN0YXRlLgor
ICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gY2FsbGJhY2sgdGhhdCB3aGVuIGludm9rZWQgdXNlcyBm
dW5jUmV0dXJuaW5nU3RhdGUgdG8KKyAgICogICAgICAgICAgICAgICAgICAgIGRldGVybWluZWQg
dGhlIG9iamVjdCBsaXRlcmFsIHRvIHNldFN0YXRlLgorICAgKi8KKyAgY3JlYXRlU3RhdGVTZXR0
ZXI6IGZ1bmN0aW9uIChjb21wb25lbnQsIGZ1bmNSZXR1cm5pbmdTdGF0ZSkgeworICAgIHJldHVy
biBmdW5jdGlvbiAoYSwgYiwgYywgZCwgZSwgZikgeworICAgICAgdmFyIHBhcnRpYWxTdGF0ZSA9
IGZ1bmNSZXR1cm5pbmdTdGF0ZS5jYWxsKGNvbXBvbmVudCwgYSwgYiwgYywgZCwgZSwgZik7Cisg
ICAgICBpZiAocGFydGlhbFN0YXRlKSB7CisgICAgICAgIGNvbXBvbmVudC5zZXRTdGF0ZShwYXJ0
aWFsU3RhdGUpOworICAgICAgfQorICAgIH07CisgIH0sCisKKyAgLyoqCisgICAqIFJldHVybnMg
YSBzaW5nbGUtYXJndW1lbnQgY2FsbGJhY2sgdGhhdCBjYW4gYmUgdXNlZCB0byB1cGRhdGUgYSBz
aW5nbGUKKyAgICoga2V5IGluIHRoZSBjb21wb25lbnQncyBzdGF0ZS4KKyAgICoKKyAgICogTm90
ZTogdGhpcyBpcyBtZW1vaXplZCBmdW5jdGlvbiwgd2hpY2ggbWFrZXMgaXQgaW5leHBlbnNpdmUg
dG8gY2FsbC4KKyAgICoKKyAgICogQHBhcmFtIHtSZWFjdENvbXBvc2l0ZUNvbXBvbmVudH0gY29t
cG9uZW50CisgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBpbiB0aGUgc3RhdGUgdGhh
dCB5b3Ugc2hvdWxkIHVwZGF0ZS4KKyAgICogQHJldHVybiB7ZnVuY3Rpb259IGNhbGxiYWNrIG9m
IDEgYXJndW1lbnQgd2hpY2ggY2FsbHMgc2V0U3RhdGUoKSB3aXRoCisgICAqICAgICAgICAgICAg
ICAgICAgICB0aGUgcHJvdmlkZWQga2V5TmFtZSBhbmQgY2FsbGJhY2sgYXJndW1lbnQuCisgICAq
LworICBjcmVhdGVTdGF0ZUtleVNldHRlcjogZnVuY3Rpb24gKGNvbXBvbmVudCwga2V5KSB7Cisg
ICAgLy8gTWVtb2l6ZSB0aGUgc2V0dGVycy4KKyAgICB2YXIgY2FjaGUgPSBjb21wb25lbnQuX19r
ZXlTZXR0ZXJzIHx8IChjb21wb25lbnQuX19rZXlTZXR0ZXJzID0ge30pOworICAgIHJldHVybiBj
YWNoZVtrZXldIHx8IChjYWNoZVtrZXldID0gY3JlYXRlU3RhdGVLZXlTZXR0ZXIoY29tcG9uZW50
LCBrZXkpKTsKKyAgfQorfTsKKworZnVuY3Rpb24gY3JlYXRlU3RhdGVLZXlTZXR0ZXIoY29tcG9u
ZW50LCBrZXkpIHsKKyAgLy8gUGFydGlhbCBzdGF0ZSBpcyBhbGxvY2F0ZWQgb3V0c2lkZSBvZiB0
aGUgZnVuY3Rpb24gY2xvc3VyZSBzbyBpdCBjYW4gYmUKKyAgLy8gcmV1c2VkIHdpdGggZXZlcnkg
Y2FsbCwgYXZvaWRpbmcgbWVtb3J5IGFsbG9jYXRpb24gd2hlbiB0aGlzIGZ1bmN0aW9uCisgIC8v
IGlzIGNhbGxlZC4KKyAgdmFyIHBhcnRpYWxTdGF0ZSA9IHt9OworICByZXR1cm4gZnVuY3Rpb24g
c3RhdGVLZXlTZXR0ZXIodmFsdWUpIHsKKyAgICBwYXJ0aWFsU3RhdGVba2V5XSA9IHZhbHVlOwor
ICAgIGNvbXBvbmVudC5zZXRTdGF0ZShwYXJ0aWFsU3RhdGUpOworICB9OworfQorCitSZWFjdFN0
YXRlU2V0dGVycy5NaXhpbiA9IHsKKyAgLyoqCisgICAqIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0
IGNhbGxzIHRoZSBwcm92aWRlZCBmdW5jdGlvbiwgYW5kIHVzZXMgdGhlIHJlc3VsdAorICAgKiBv
ZiB0aGF0IHRvIHNldCB0aGUgY29tcG9uZW50J3Mgc3RhdGUuCisgICAqCisgICAqIEZvciBleGFt
cGxlLCB0aGVzZSBzdGF0ZW1lbnRzIGFyZSBlcXVpdmFsZW50OgorICAgKgorICAgKiAgIHRoaXMu
c2V0U3RhdGUoe3g6IDF9KTsKKyAgICogICB0aGlzLmNyZWF0ZVN0YXRlU2V0dGVyKGZ1bmN0aW9u
KHhWYWx1ZSkgeworICAgKiAgICAgcmV0dXJuIHt4OiB4VmFsdWV9OworICAgKiAgIH0pKDEpOwor
ICAgKgorICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBmdW5jUmV0dXJuaW5nU3RhdGUgUmV0dXJuZWQg
Y2FsbGJhY2sgdXNlcyB0aGlzIHRvCisgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkZXRlcm1pbmUgaG93IHRvIHVwZGF0ZSBzdGF0ZS4KKyAgICogQHJldHVybiB7ZnVu
Y3Rpb259IGNhbGxiYWNrIHRoYXQgd2hlbiBpbnZva2VkIHVzZXMgZnVuY1JldHVybmluZ1N0YXRl
IHRvCisgICAqICAgICAgICAgICAgICAgICAgICBkZXRlcm1pbmVkIHRoZSBvYmplY3QgbGl0ZXJh
bCB0byBzZXRTdGF0ZS4KKyAgICovCisgIGNyZWF0ZVN0YXRlU2V0dGVyOiBmdW5jdGlvbiAoZnVu
Y1JldHVybmluZ1N0YXRlKSB7CisgICAgcmV0dXJuIFJlYWN0U3RhdGVTZXR0ZXJzLmNyZWF0ZVN0
YXRlU2V0dGVyKHRoaXMsIGZ1bmNSZXR1cm5pbmdTdGF0ZSk7CisgIH0sCisKKyAgLyoqCisgICAq
IFJldHVybnMgYSBzaW5nbGUtYXJndW1lbnQgY2FsbGJhY2sgdGhhdCBjYW4gYmUgdXNlZCB0byB1
cGRhdGUgYSBzaW5nbGUKKyAgICoga2V5IGluIHRoZSBjb21wb25lbnQncyBzdGF0ZS4KKyAgICoK
KyAgICogRm9yIGV4YW1wbGUsIHRoZXNlIHN0YXRlbWVudHMgYXJlIGVxdWl2YWxlbnQ6CisgICAq
CisgICAqICAgdGhpcy5zZXRTdGF0ZSh7eDogMX0pOworICAgKiAgIHRoaXMuY3JlYXRlU3RhdGVL
ZXlTZXR0ZXIoJ3gnKSgxKTsKKyAgICoKKyAgICogTm90ZTogdGhpcyBpcyBtZW1vaXplZCBmdW5j
dGlvbiwgd2hpY2ggbWFrZXMgaXQgaW5leHBlbnNpdmUgdG8gY2FsbC4KKyAgICoKKyAgICogQHBh
cmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IGluIHRoZSBzdGF0ZSB0aGF0IHlvdSBzaG91bGQgdXBk
YXRlLgorICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gY2FsbGJhY2sgb2YgMSBhcmd1bWVudCB3aGlj
aCBjYWxscyBzZXRTdGF0ZSgpIHdpdGgKKyAgICogICAgICAgICAgICAgICAgICAgIHRoZSBwcm92
aWRlZCBrZXlOYW1lIGFuZCBjYWxsYmFjayBhcmd1bWVudC4KKyAgICovCisgIGNyZWF0ZVN0YXRl
S2V5U2V0dGVyOiBmdW5jdGlvbiAoa2V5KSB7CisgICAgcmV0dXJuIFJlYWN0U3RhdGVTZXR0ZXJz
LmNyZWF0ZVN0YXRlS2V5U2V0dGVyKHRoaXMsIGtleSk7CisgIH0KK307CisKK21vZHVsZS5leHBv
cnRzID0gUmVhY3RTdGF0ZVNldHRlcnM7Cit9LHt9XSwyNzpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1
bGUsZXhwb3J0cyl7CisvKioKKyAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJ
bmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc291cmNlIGNvZGUgaXMg
bGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZQorICogTElD
RU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBh
ZGRpdGlvbmFsIGdyYW50CisgKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUg
UEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAqCisgKi8KKworJ3VzZSBzdHJp
Y3QnOworCit2YXIgZmxhdHRlbkNoaWxkcmVuID0gX2RlcmVxXygzNSk7CisKK3ZhciBSZWFjdFRy
YW5zaXRpb25DaGlsZE1hcHBpbmcgPSB7CisgIC8qKgorICAgKiBHaXZlbiBgdGhpcy5wcm9wcy5j
aGlsZHJlbmAsIHJldHVybiBhbiBvYmplY3QgbWFwcGluZyBrZXkgdG8gY2hpbGQuIEp1c3QKKyAg
ICogc2ltcGxlIHN5bnRhY3RpYyBzdWdhciBhcm91bmQgZmxhdHRlbkNoaWxkcmVuKCkuCisgICAq
CisgICAqIEBwYXJhbSB7Kn0gY2hpbGRyZW4gYHRoaXMucHJvcHMuY2hpbGRyZW5gCisgICAqIEBw
YXJhbSB7bnVtYmVyPX0gc2VsZkRlYnVnSUQgT3B0aW9uYWwgZGVidWdJRCBvZiB0aGUgY3VycmVu
dCBpbnRlcm5hbCBpbnN0YW5jZS4KKyAgICogQHJldHVybiB7b2JqZWN0fSBNYXBwaW5nIG9mIGtl
eSB0byBjaGlsZAorICAgKi8KKyAgZ2V0Q2hpbGRNYXBwaW5nOiBmdW5jdGlvbiAoY2hpbGRyZW4s
IHNlbGZEZWJ1Z0lEKSB7CisgICAgaWYgKCFjaGlsZHJlbikgeworICAgICAgcmV0dXJuIGNoaWxk
cmVuOworICAgIH0KKworICAgIGlmICgiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicpIHsK
KyAgICAgIHJldHVybiBmbGF0dGVuQ2hpbGRyZW4oY2hpbGRyZW4sIHNlbGZEZWJ1Z0lEKTsKKyAg
ICB9CisKKyAgICByZXR1cm4gZmxhdHRlbkNoaWxkcmVuKGNoaWxkcmVuKTsKKyAgfSwKKworICAv
KioKKyAgICogV2hlbiB5b3UncmUgYWRkaW5nIG9yIHJlbW92aW5nIGNoaWxkcmVuIHNvbWUgbWF5
IGJlIGFkZGVkIG9yIHJlbW92ZWQgaW4gdGhlCisgICAqIHNhbWUgcmVuZGVyIHBhc3MuIFdlIHdh
bnQgdG8gc2hvdyAqYm90aCogc2luY2Ugd2Ugd2FudCB0byBzaW11bHRhbmVvdXNseQorICAgKiBh
bmltYXRlIGVsZW1lbnRzIGluIGFuZCBvdXQuIFRoaXMgZnVuY3Rpb24gdGFrZXMgYSBwcmV2aW91
cyBzZXQgb2Yga2V5cworICAgKiBhbmQgYSBuZXcgc2V0IG9mIGtleXMgYW5kIG1lcmdlcyB0aGVt
IHdpdGggaXRzIGJlc3QgZ3Vlc3Mgb2YgdGhlIGNvcnJlY3QKKyAgICogb3JkZXJpbmcuIEluIHRo
ZSBmdXR1cmUgd2UgbWF5IGV4cG9zZSBzb21lIG9mIHRoZSB1dGlsaXRpZXMgaW4KKyAgICogUmVh
Y3RNdWx0aUNoaWxkIHRvIG1ha2UgdGhpcyBlYXN5LCBidXQgZm9yIG5vdyBSZWFjdCBpdHNlbGYg
ZG9lcyBub3QKKyAgICogZGlyZWN0bHkgaGF2ZSB0aGlzIGNvbmNlcHQgb2YgdGhlIHVuaW9uIG9m
IHByZXZDaGlsZHJlbiBhbmQgbmV4dENoaWxkcmVuCisgICAqIHNvIHdlIGltcGxlbWVudCBpdCBo
ZXJlLgorICAgKgorICAgKiBAcGFyYW0ge29iamVjdH0gcHJldiBwcmV2IGNoaWxkcmVuIGFzIHJl
dHVybmVkIGZyb20KKyAgICogYFJlYWN0VHJhbnNpdGlvbkNoaWxkTWFwcGluZy5nZXRDaGlsZE1h
cHBpbmcoKWAuCisgICAqIEBwYXJhbSB7b2JqZWN0fSBuZXh0IG5leHQgY2hpbGRyZW4gYXMgcmV0
dXJuZWQgZnJvbQorICAgKiBgUmVhY3RUcmFuc2l0aW9uQ2hpbGRNYXBwaW5nLmdldENoaWxkTWFw
cGluZygpYC4KKyAgICogQHJldHVybiB7b2JqZWN0fSBhIGtleSBzZXQgdGhhdCBjb250YWlucyBh
bGwga2V5cyBpbiBgcHJldmAgYW5kIGFsbCBrZXlzCisgICAqIGluIGBuZXh0YCBpbiBhIHJlYXNv
bmFibGUgb3JkZXIuCisgICAqLworICBtZXJnZUNoaWxkTWFwcGluZ3M6IGZ1bmN0aW9uIChwcmV2
LCBuZXh0KSB7CisgICAgcHJldiA9IHByZXYgfHwge307CisgICAgbmV4dCA9IG5leHQgfHwge307
CisKKyAgICBmdW5jdGlvbiBnZXRWYWx1ZUZvcktleShrZXkpIHsKKyAgICAgIGlmIChuZXh0Lmhh
c093blByb3BlcnR5KGtleSkpIHsKKyAgICAgICAgcmV0dXJuIG5leHRba2V5XTsKKyAgICAgIH0g
ZWxzZSB7CisgICAgICAgIHJldHVybiBwcmV2W2tleV07CisgICAgICB9CisgICAgfQorCisgICAg
Ly8gRm9yIGVhY2gga2V5IG9mIGBuZXh0YCwgdGhlIGxpc3Qgb2Yga2V5cyB0byBpbnNlcnQgYmVm
b3JlIHRoYXQga2V5IGluCisgICAgLy8gdGhlIGNvbWJpbmVkIGxpc3QKKyAgICB2YXIgbmV4dEtl
eXNQZW5kaW5nID0ge307CisKKyAgICB2YXIgcGVuZGluZ0tleXMgPSBbXTsKKyAgICBmb3IgKHZh
ciBwcmV2S2V5IGluIHByZXYpIHsKKyAgICAgIGlmIChuZXh0Lmhhc093blByb3BlcnR5KHByZXZL
ZXkpKSB7CisgICAgICAgIGlmIChwZW5kaW5nS2V5cy5sZW5ndGgpIHsKKyAgICAgICAgICBuZXh0
S2V5c1BlbmRpbmdbcHJldktleV0gPSBwZW5kaW5nS2V5czsKKyAgICAgICAgICBwZW5kaW5nS2V5
cyA9IFtdOworICAgICAgICB9CisgICAgICB9IGVsc2UgeworICAgICAgICBwZW5kaW5nS2V5cy5w
dXNoKHByZXZLZXkpOworICAgICAgfQorICAgIH0KKworICAgIHZhciBpOworICAgIHZhciBjaGls
ZE1hcHBpbmcgPSB7fTsKKyAgICBmb3IgKHZhciBuZXh0S2V5IGluIG5leHQpIHsKKyAgICAgIGlm
IChuZXh0S2V5c1BlbmRpbmcuaGFzT3duUHJvcGVydHkobmV4dEtleSkpIHsKKyAgICAgICAgZm9y
IChpID0gMDsgaSA8IG5leHRLZXlzUGVuZGluZ1tuZXh0S2V5XS5sZW5ndGg7IGkrKykgeworICAg
ICAgICAgIHZhciBwZW5kaW5nTmV4dEtleSA9IG5leHRLZXlzUGVuZGluZ1tuZXh0S2V5XVtpXTsK
KyAgICAgICAgICBjaGlsZE1hcHBpbmdbbmV4dEtleXNQZW5kaW5nW25leHRLZXldW2ldXSA9IGdl
dFZhbHVlRm9yS2V5KHBlbmRpbmdOZXh0S2V5KTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAg
Y2hpbGRNYXBwaW5nW25leHRLZXldID0gZ2V0VmFsdWVGb3JLZXkobmV4dEtleSk7CisgICAgfQor
CisgICAgLy8gRmluYWxseSwgYWRkIHRoZSBrZXlzIHdoaWNoIGRpZG4ndCBhcHBlYXIgYmVmb3Jl
IGFueSBrZXkgaW4gYG5leHRgCisgICAgZm9yIChpID0gMDsgaSA8IHBlbmRpbmdLZXlzLmxlbmd0
aDsgaSsrKSB7CisgICAgICBjaGlsZE1hcHBpbmdbcGVuZGluZ0tleXNbaV1dID0gZ2V0VmFsdWVG
b3JLZXkocGVuZGluZ0tleXNbaV0pOworICAgIH0KKworICAgIHJldHVybiBjaGlsZE1hcHBpbmc7
CisgIH0KK307CisKK21vZHVsZS5leHBvcnRzID0gUmVhY3RUcmFuc2l0aW9uQ2hpbGRNYXBwaW5n
OworfSx7IjM1IjozNX1dLDI4OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKKy8q
KgorICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4KKyAqIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0
aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlCisgKiBMSUNFTlNFIGZpbGUgaW4gdGhl
IHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnQK
KyAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4g
dGhlIHNhbWUgZGlyZWN0b3J5LgorICoKKyAqLworCisndXNlIHN0cmljdCc7CisKK3ZhciBFeGVj
dXRpb25FbnZpcm9ubWVudCA9IF9kZXJlcV8oNDQpOworCit2YXIgZ2V0VmVuZG9yUHJlZml4ZWRF
dmVudE5hbWUgPSBfZGVyZXFfKDEpOworCit2YXIgZW5kRXZlbnRzID0gW107CisKK2Z1bmN0aW9u
IGRldGVjdEV2ZW50cygpIHsKKyAgdmFyIGFuaW1FbmQgPSBnZXRWZW5kb3JQcmVmaXhlZEV2ZW50
TmFtZSgnYW5pbWF0aW9uZW5kJyk7CisgIHZhciB0cmFuc0VuZCA9IGdldFZlbmRvclByZWZpeGVk
RXZlbnROYW1lKCd0cmFuc2l0aW9uZW5kJyk7CisKKyAgaWYgKGFuaW1FbmQpIHsKKyAgICBlbmRF
dmVudHMucHVzaChhbmltRW5kKTsKKyAgfQorCisgIGlmICh0cmFuc0VuZCkgeworICAgIGVuZEV2
ZW50cy5wdXNoKHRyYW5zRW5kKTsKKyAgfQorfQorCitpZiAoRXhlY3V0aW9uRW52aXJvbm1lbnQu
Y2FuVXNlRE9NKSB7CisgIGRldGVjdEV2ZW50cygpOworfQorCisvLyBXZSB1c2UgdGhlIHJhdyB7
YWRkfHJlbW92ZX1FdmVudExpc3RlbmVyKCkgY2FsbCBiZWNhdXNlIEV2ZW50TGlzdGVuZXIKKy8v
IGRvZXMgbm90IGtub3cgaG93IHRvIHJlbW92ZSBldmVudCBsaXN0ZW5lcnMgYW5kIHdlIHJlYWxs
eSBzaG91bGQKKy8vIGNsZWFuIHVwLiBBbHNvLCB0aGVzZSBldmVudHMgYXJlIG5vdCB0cmlnZ2Vy
ZWQgaW4gb2xkZXIgYnJvd3NlcnMKKy8vIHNvIHdlIHNob3VsZCBiZSBBLU9LIGhlcmUuCisKK2Z1
bmN0aW9uIGFkZEV2ZW50TGlzdGVuZXIobm9kZSwgZXZlbnROYW1lLCBldmVudExpc3RlbmVyKSB7
CisgIG5vZGUuYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGV2ZW50TGlzdGVuZXIsIGZhbHNl
KTsKK30KKworZnVuY3Rpb24gcmVtb3ZlRXZlbnRMaXN0ZW5lcihub2RlLCBldmVudE5hbWUsIGV2
ZW50TGlzdGVuZXIpIHsKKyAgbm9kZS5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgZXZl
bnRMaXN0ZW5lciwgZmFsc2UpOworfQorCit2YXIgUmVhY3RUcmFuc2l0aW9uRXZlbnRzID0gewor
ICBhZGRFbmRFdmVudExpc3RlbmVyOiBmdW5jdGlvbiAobm9kZSwgZXZlbnRMaXN0ZW5lcikgewor
ICAgIGlmIChlbmRFdmVudHMubGVuZ3RoID09PSAwKSB7CisgICAgICAvLyBJZiBDU1MgdHJhbnNp
dGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQsIHRyaWdnZXIgYW4gImVuZCBhbmltYXRpb24iCisgICAg
ICAvLyBldmVudCBpbW1lZGlhdGVseS4KKyAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KGV2ZW50TGlz
dGVuZXIsIDApOworICAgICAgcmV0dXJuOworICAgIH0KKyAgICBlbmRFdmVudHMuZm9yRWFjaChm
dW5jdGlvbiAoZW5kRXZlbnQpIHsKKyAgICAgIGFkZEV2ZW50TGlzdGVuZXIobm9kZSwgZW5kRXZl
bnQsIGV2ZW50TGlzdGVuZXIpOworICAgIH0pOworICB9LAorCisgIHJlbW92ZUVuZEV2ZW50TGlz
dGVuZXI6IGZ1bmN0aW9uIChub2RlLCBldmVudExpc3RlbmVyKSB7CisgICAgaWYgKGVuZEV2ZW50
cy5sZW5ndGggPT09IDApIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgZW5kRXZlbnRzLmZv
ckVhY2goZnVuY3Rpb24gKGVuZEV2ZW50KSB7CisgICAgICByZW1vdmVFdmVudExpc3RlbmVyKG5v
ZGUsIGVuZEV2ZW50LCBldmVudExpc3RlbmVyKTsKKyAgICB9KTsKKyAgfQorfTsKKworbW9kdWxl
LmV4cG9ydHMgPSBSZWFjdFRyYW5zaXRpb25FdmVudHM7Cit9LHsiMSI6MSwiNDQiOjQ0fV0sMjk6
W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAx
My1wcmVzZW50LCBGYWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5z
ZSBmb3VuZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2Yg
dGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAorICogb2YgcGF0ZW50IHJpZ2h0
cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3Rvcnku
CisgKgorICovCisKKyd1c2Ugc3RyaWN0JzsKKwordmFyIF9hc3NpZ24gPSBfZGVyZXFfKDUwKTsK
KworZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAo
IShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9y
KCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKTsgfSB9CisKK2Z1bmN0aW9uIF9w
b3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93
IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVy
KCkgaGFzbid0IGJlZW4gY2FsbGVkIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09
PSAib2JqZWN0IiB8fCB0eXBlb2YgY2FsbCA9PT0gImZ1bmN0aW9uIikgPyBjYWxsIDogc2VsZjsg
fQorCitmdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVv
ZiBzdXBlckNsYXNzICE9PSAiZnVuY3Rpb24iICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhy
b3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9y
IGEgZnVuY3Rpb24sIG5vdCAiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3Rv
dHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwg
eyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0
YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmpl
Y3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVy
Q2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfQorCit2YXIgUmVhY3Qg
PSBfZGVyZXFfKDUpOwordmFyIFJlYWN0VHJhbnNpdGlvbkNoaWxkTWFwcGluZyA9IF9kZXJlcV8o
MjcpOworCit2YXIgcHJvcFR5cGVzRmFjdG9yeSA9IF9kZXJlcV8oNTIpOwordmFyIFByb3BUeXBl
cyA9IHByb3BUeXBlc0ZhY3RvcnkoUmVhY3QuaXNWYWxpZEVsZW1lbnQpOworCit2YXIgZW1wdHlG
dW5jdGlvbiA9IF9kZXJlcV8oNDUpOworCisvKioKKyAqIEEgYmFzaXMgZm9yIGFuaW1hdGlvbnMu
IFdoZW4gY2hpbGRyZW4gYXJlIGRlY2xhcmF0aXZlbHkgYWRkZWQgb3IgcmVtb3ZlZCwKKyAqIHNw
ZWNpYWwgbGlmZWN5Y2xlIGhvb2tzIGFyZSBjYWxsZWQuCisgKiBTZWUgaHR0cHM6Ly9mYWNlYm9v
ay5naXRodWIuaW8vcmVhY3QvZG9jcy9hbmltYXRpb24uaHRtbCNsb3ctbGV2ZWwtYXBpLXJlYWN0
dHJhbnNpdGlvbmdyb3VwCisgKi8KKwordmFyIFJlYWN0VHJhbnNpdGlvbkdyb3VwID0gZnVuY3Rp
b24gKF9SZWFjdCRDb21wb25lbnQpIHsKKyAgX2luaGVyaXRzKFJlYWN0VHJhbnNpdGlvbkdyb3Vw
LCBfUmVhY3QkQ29tcG9uZW50KTsKKworICBmdW5jdGlvbiBSZWFjdFRyYW5zaXRpb25Hcm91cCgp
IHsKKyAgICB2YXIgX3RlbXAsIF90aGlzLCBfcmV0OworCisgICAgX2NsYXNzQ2FsbENoZWNrKHRo
aXMsIFJlYWN0VHJhbnNpdGlvbkdyb3VwKTsKKworICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVu
dHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tl
eSsrKSB7CisgICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldOworICAgIH0KKworICAg
IHJldHVybiBfcmV0ID0gKF90ZW1wID0gKF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1
cm4odGhpcywgX1JlYWN0JENvbXBvbmVudC5jYWxsLmFwcGx5KF9SZWFjdCRDb21wb25lbnQsIFt0
aGlzXS5jb25jYXQoYXJncykpKSwgX3RoaXMpLCBfdGhpcy5zdGF0ZSA9IHsKKyAgICAgIC8vIFRP
RE86IGNhbiB3ZSBnZXQgdXNlZnVsIGRlYnVnIGluZm9ybWF0aW9uIHRvIHNob3cgYXQgdGhpcyBw
b2ludD8KKyAgICAgIGNoaWxkcmVuOiBSZWFjdFRyYW5zaXRpb25DaGlsZE1hcHBpbmcuZ2V0Q2hp
bGRNYXBwaW5nKF90aGlzLnByb3BzLmNoaWxkcmVuKQorICAgIH0sIF90aGlzLnBlcmZvcm1BcHBl
YXIgPSBmdW5jdGlvbiAoa2V5KSB7CisgICAgICBfdGhpcy5jdXJyZW50bHlUcmFuc2l0aW9uaW5n
S2V5c1trZXldID0gdHJ1ZTsKKworICAgICAgdmFyIGNvbXBvbmVudCA9IF90aGlzLnJlZnNba2V5
XTsKKworICAgICAgaWYgKGNvbXBvbmVudC5jb21wb25lbnRXaWxsQXBwZWFyKSB7CisgICAgICAg
IGNvbXBvbmVudC5jb21wb25lbnRXaWxsQXBwZWFyKF90aGlzLl9oYW5kbGVEb25lQXBwZWFyaW5n
LmJpbmQoX3RoaXMsIGtleSkpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgX3RoaXMuX2hhbmRs
ZURvbmVBcHBlYXJpbmcoa2V5KTsKKyAgICAgIH0KKyAgICB9LCBfdGhpcy5faGFuZGxlRG9uZUFw
cGVhcmluZyA9IGZ1bmN0aW9uIChrZXkpIHsKKyAgICAgIHZhciBjb21wb25lbnQgPSBfdGhpcy5y
ZWZzW2tleV07CisgICAgICBpZiAoY29tcG9uZW50LmNvbXBvbmVudERpZEFwcGVhcikgeworICAg
ICAgICBjb21wb25lbnQuY29tcG9uZW50RGlkQXBwZWFyKCk7CisgICAgICB9CisKKyAgICAgIGRl
bGV0ZSBfdGhpcy5jdXJyZW50bHlUcmFuc2l0aW9uaW5nS2V5c1trZXldOworCisgICAgICB2YXIg
Y3VycmVudENoaWxkTWFwcGluZyA9IFJlYWN0VHJhbnNpdGlvbkNoaWxkTWFwcGluZy5nZXRDaGls
ZE1hcHBpbmcoX3RoaXMucHJvcHMuY2hpbGRyZW4pOworCisgICAgICBpZiAoIWN1cnJlbnRDaGls
ZE1hcHBpbmcgfHwgIWN1cnJlbnRDaGlsZE1hcHBpbmcuaGFzT3duUHJvcGVydHkoa2V5KSkgewor
ICAgICAgICAvLyBUaGlzIHdhcyByZW1vdmVkIGJlZm9yZSBpdCBoYWQgZnVsbHkgYXBwZWFyZWQu
IFJlbW92ZSBpdC4KKyAgICAgICAgX3RoaXMucGVyZm9ybUxlYXZlKGtleSk7CisgICAgICB9Cisg
ICAgfSwgX3RoaXMucGVyZm9ybUVudGVyID0gZnVuY3Rpb24gKGtleSkgeworICAgICAgX3RoaXMu
Y3VycmVudGx5VHJhbnNpdGlvbmluZ0tleXNba2V5XSA9IHRydWU7CisKKyAgICAgIHZhciBjb21w
b25lbnQgPSBfdGhpcy5yZWZzW2tleV07CisKKyAgICAgIGlmIChjb21wb25lbnQuY29tcG9uZW50
V2lsbEVudGVyKSB7CisgICAgICAgIGNvbXBvbmVudC5jb21wb25lbnRXaWxsRW50ZXIoX3RoaXMu
X2hhbmRsZURvbmVFbnRlcmluZy5iaW5kKF90aGlzLCBrZXkpKTsKKyAgICAgIH0gZWxzZSB7Cisg
ICAgICAgIF90aGlzLl9oYW5kbGVEb25lRW50ZXJpbmcoa2V5KTsKKyAgICAgIH0KKyAgICB9LCBf
dGhpcy5faGFuZGxlRG9uZUVudGVyaW5nID0gZnVuY3Rpb24gKGtleSkgeworICAgICAgdmFyIGNv
bXBvbmVudCA9IF90aGlzLnJlZnNba2V5XTsKKyAgICAgIGlmIChjb21wb25lbnQuY29tcG9uZW50
RGlkRW50ZXIpIHsKKyAgICAgICAgY29tcG9uZW50LmNvbXBvbmVudERpZEVudGVyKCk7CisgICAg
ICB9CisKKyAgICAgIGRlbGV0ZSBfdGhpcy5jdXJyZW50bHlUcmFuc2l0aW9uaW5nS2V5c1trZXld
OworCisgICAgICB2YXIgY3VycmVudENoaWxkTWFwcGluZyA9IFJlYWN0VHJhbnNpdGlvbkNoaWxk
TWFwcGluZy5nZXRDaGlsZE1hcHBpbmcoX3RoaXMucHJvcHMuY2hpbGRyZW4pOworCisgICAgICBp
ZiAoIWN1cnJlbnRDaGlsZE1hcHBpbmcgfHwgIWN1cnJlbnRDaGlsZE1hcHBpbmcuaGFzT3duUHJv
cGVydHkoa2V5KSkgeworICAgICAgICAvLyBUaGlzIHdhcyByZW1vdmVkIGJlZm9yZSBpdCBoYWQg
ZnVsbHkgZW50ZXJlZC4gUmVtb3ZlIGl0LgorICAgICAgICBfdGhpcy5wZXJmb3JtTGVhdmUoa2V5
KTsKKyAgICAgIH0KKyAgICB9LCBfdGhpcy5wZXJmb3JtTGVhdmUgPSBmdW5jdGlvbiAoa2V5KSB7
CisgICAgICBfdGhpcy5jdXJyZW50bHlUcmFuc2l0aW9uaW5nS2V5c1trZXldID0gdHJ1ZTsKKwor
ICAgICAgdmFyIGNvbXBvbmVudCA9IF90aGlzLnJlZnNba2V5XTsKKyAgICAgIGlmIChjb21wb25l
bnQuY29tcG9uZW50V2lsbExlYXZlKSB7CisgICAgICAgIGNvbXBvbmVudC5jb21wb25lbnRXaWxs
TGVhdmUoX3RoaXMuX2hhbmRsZURvbmVMZWF2aW5nLmJpbmQoX3RoaXMsIGtleSkpOworICAgICAg
fSBlbHNlIHsKKyAgICAgICAgLy8gTm90ZSB0aGF0IHRoaXMgaXMgc29tZXdoYXQgZGFuZ2Vyb3Vz
IGIvYyBpdCBjYWxscyBzZXRTdGF0ZSgpCisgICAgICAgIC8vIGFnYWluLCBlZmZlY3RpdmVseSBt
dXRhdGluZyB0aGUgY29tcG9uZW50IGJlZm9yZSBhbGwgdGhlIHdvcmsKKyAgICAgICAgLy8gaXMg
ZG9uZS4KKyAgICAgICAgX3RoaXMuX2hhbmRsZURvbmVMZWF2aW5nKGtleSk7CisgICAgICB9Cisg
ICAgfSwgX3RoaXMuX2hhbmRsZURvbmVMZWF2aW5nID0gZnVuY3Rpb24gKGtleSkgeworICAgICAg
dmFyIGNvbXBvbmVudCA9IF90aGlzLnJlZnNba2V5XTsKKworICAgICAgaWYgKGNvbXBvbmVudC5j
b21wb25lbnREaWRMZWF2ZSkgeworICAgICAgICBjb21wb25lbnQuY29tcG9uZW50RGlkTGVhdmUo
KTsKKyAgICAgIH0KKworICAgICAgZGVsZXRlIF90aGlzLmN1cnJlbnRseVRyYW5zaXRpb25pbmdL
ZXlzW2tleV07CisKKyAgICAgIHZhciBjdXJyZW50Q2hpbGRNYXBwaW5nID0gUmVhY3RUcmFuc2l0
aW9uQ2hpbGRNYXBwaW5nLmdldENoaWxkTWFwcGluZyhfdGhpcy5wcm9wcy5jaGlsZHJlbik7CisK
KyAgICAgIGlmIChjdXJyZW50Q2hpbGRNYXBwaW5nICYmIGN1cnJlbnRDaGlsZE1hcHBpbmcuaGFz
T3duUHJvcGVydHkoa2V5KSkgeworICAgICAgICAvLyBUaGlzIGVudGVyZWQgYWdhaW4gYmVmb3Jl
IGl0IGZ1bGx5IGxlZnQuIEFkZCBpdCBhZ2Fpbi4KKyAgICAgICAgX3RoaXMucGVyZm9ybUVudGVy
KGtleSk7CisgICAgICB9IGVsc2UgeworICAgICAgICBfdGhpcy5zZXRTdGF0ZShmdW5jdGlvbiAo
c3RhdGUpIHsKKyAgICAgICAgICB2YXIgbmV3Q2hpbGRyZW4gPSBfYXNzaWduKHt9LCBzdGF0ZS5j
aGlsZHJlbik7CisgICAgICAgICAgZGVsZXRlIG5ld0NoaWxkcmVuW2tleV07CisgICAgICAgICAg
cmV0dXJuIHsgY2hpbGRyZW46IG5ld0NoaWxkcmVuIH07CisgICAgICAgIH0pOworICAgICAgfQor
ICAgIH0sIF90ZW1wKSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oX3RoaXMsIF9yZXQpOwor
ICB9CisKKyAgUmVhY3RUcmFuc2l0aW9uR3JvdXAucHJvdG90eXBlLmNvbXBvbmVudFdpbGxNb3Vu
dCA9IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxNb3VudCgpIHsKKyAgICB0aGlzLmN1cnJlbnRseVRy
YW5zaXRpb25pbmdLZXlzID0ge307CisgICAgdGhpcy5rZXlzVG9FbnRlciA9IFtdOworICAgIHRo
aXMua2V5c1RvTGVhdmUgPSBbXTsKKyAgfTsKKworICBSZWFjdFRyYW5zaXRpb25Hcm91cC5wcm90
b3R5cGUuY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHsK
KyAgICB2YXIgaW5pdGlhbENoaWxkTWFwcGluZyA9IHRoaXMuc3RhdGUuY2hpbGRyZW47CisgICAg
Zm9yICh2YXIga2V5IGluIGluaXRpYWxDaGlsZE1hcHBpbmcpIHsKKyAgICAgIGlmIChpbml0aWFs
Q2hpbGRNYXBwaW5nW2tleV0pIHsKKyAgICAgICAgdGhpcy5wZXJmb3JtQXBwZWFyKGtleSk7Cisg
ICAgICB9CisgICAgfQorICB9OworCisgIFJlYWN0VHJhbnNpdGlvbkdyb3VwLnByb3RvdHlwZS5j
b21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID0gZnVuY3Rpb24gY29tcG9uZW50V2lsbFJlY2VpdmVQ
cm9wcyhuZXh0UHJvcHMpIHsKKyAgICB2YXIgbmV4dENoaWxkTWFwcGluZyA9IFJlYWN0VHJhbnNp
dGlvbkNoaWxkTWFwcGluZy5nZXRDaGlsZE1hcHBpbmcobmV4dFByb3BzLmNoaWxkcmVuKTsKKyAg
ICB2YXIgcHJldkNoaWxkTWFwcGluZyA9IHRoaXMuc3RhdGUuY2hpbGRyZW47CisKKyAgICB0aGlz
LnNldFN0YXRlKHsKKyAgICAgIGNoaWxkcmVuOiBSZWFjdFRyYW5zaXRpb25DaGlsZE1hcHBpbmcu
bWVyZ2VDaGlsZE1hcHBpbmdzKHByZXZDaGlsZE1hcHBpbmcsIG5leHRDaGlsZE1hcHBpbmcpCisg
ICAgfSk7CisKKyAgICB2YXIga2V5OworCisgICAgZm9yIChrZXkgaW4gbmV4dENoaWxkTWFwcGlu
ZykgeworICAgICAgdmFyIGhhc1ByZXYgPSBwcmV2Q2hpbGRNYXBwaW5nICYmIHByZXZDaGlsZE1h
cHBpbmcuaGFzT3duUHJvcGVydHkoa2V5KTsKKyAgICAgIGlmIChuZXh0Q2hpbGRNYXBwaW5nW2tl
eV0gJiYgIWhhc1ByZXYgJiYgIXRoaXMuY3VycmVudGx5VHJhbnNpdGlvbmluZ0tleXNba2V5XSkg
eworICAgICAgICB0aGlzLmtleXNUb0VudGVyLnB1c2goa2V5KTsKKyAgICAgIH0KKyAgICB9CisK
KyAgICBmb3IgKGtleSBpbiBwcmV2Q2hpbGRNYXBwaW5nKSB7CisgICAgICB2YXIgaGFzTmV4dCA9
IG5leHRDaGlsZE1hcHBpbmcgJiYgbmV4dENoaWxkTWFwcGluZy5oYXNPd25Qcm9wZXJ0eShrZXkp
OworICAgICAgaWYgKHByZXZDaGlsZE1hcHBpbmdba2V5XSAmJiAhaGFzTmV4dCAmJiAhdGhpcy5j
dXJyZW50bHlUcmFuc2l0aW9uaW5nS2V5c1trZXldKSB7CisgICAgICAgIHRoaXMua2V5c1RvTGVh
dmUucHVzaChrZXkpOworICAgICAgfQorICAgIH0KKworICAgIC8vIElmIHdlIHdhbnQgdG8gc29t
ZWRheSBjaGVjayBmb3IgcmVvcmRlcmluZywgd2UgY291bGQgZG8gaXQgaGVyZS4KKyAgfTsKKwor
ICBSZWFjdFRyYW5zaXRpb25Hcm91cC5wcm90b3R5cGUuY29tcG9uZW50RGlkVXBkYXRlID0gZnVu
Y3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKCkgeworICAgIHZhciBrZXlzVG9FbnRlciA9IHRoaXMu
a2V5c1RvRW50ZXI7CisgICAgdGhpcy5rZXlzVG9FbnRlciA9IFtdOworICAgIGtleXNUb0VudGVy
LmZvckVhY2godGhpcy5wZXJmb3JtRW50ZXIpOworCisgICAgdmFyIGtleXNUb0xlYXZlID0gdGhp
cy5rZXlzVG9MZWF2ZTsKKyAgICB0aGlzLmtleXNUb0xlYXZlID0gW107CisgICAga2V5c1RvTGVh
dmUuZm9yRWFjaCh0aGlzLnBlcmZvcm1MZWF2ZSk7CisgIH07CisKKyAgUmVhY3RUcmFuc2l0aW9u
R3JvdXAucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHsKKyAgICAvLyBUT0RP
OiB3ZSBjb3VsZCBnZXQgcmlkIG9mIHRoZSBuZWVkIGZvciB0aGUgd3JhcHBlciBub2RlCisgICAg
Ly8gYnkgY2xvbmluZyBhIHNpbmdsZSBjaGlsZAorICAgIHZhciBjaGlsZHJlblRvUmVuZGVyID0g
W107CisgICAgZm9yICh2YXIga2V5IGluIHRoaXMuc3RhdGUuY2hpbGRyZW4pIHsKKyAgICAgIHZh
ciBjaGlsZCA9IHRoaXMuc3RhdGUuY2hpbGRyZW5ba2V5XTsKKyAgICAgIGlmIChjaGlsZCkgewor
ICAgICAgICAvLyBZb3UgbWF5IG5lZWQgdG8gYXBwbHkgcmVhY3RpdmUgdXBkYXRlcyB0byBhIGNo
aWxkIGFzIGl0IGlzIGxlYXZpbmcuCisgICAgICAgIC8vIFRoZSBub3JtYWwgUmVhY3Qgd2F5IHRv
IGRvIGl0IHdvbid0IHdvcmsgc2luY2UgdGhlIGNoaWxkIHdpbGwgaGF2ZQorICAgICAgICAvLyBh
bHJlYWR5IGJlZW4gcmVtb3ZlZC4gSW4gY2FzZSB5b3UgbmVlZCB0aGlzIGJlaGF2aW9yIHlvdSBj
YW4gcHJvdmlkZQorICAgICAgICAvLyBhIGNoaWxkRmFjdG9yeSBmdW5jdGlvbiB0byB3cmFwIGV2
ZXJ5IGNoaWxkLCBldmVuIHRoZSBvbmVzIHRoYXQgYXJlCisgICAgICAgIC8vIGxlYXZpbmcuCisg
ICAgICAgIGNoaWxkcmVuVG9SZW5kZXIucHVzaChSZWFjdC5jbG9uZUVsZW1lbnQodGhpcy5wcm9w
cy5jaGlsZEZhY3RvcnkoY2hpbGQpLCB7IHJlZjoga2V5LCBrZXk6IGtleSB9KSk7CisgICAgICB9
CisgICAgfQorCisgICAgLy8gRG8gbm90IGZvcndhcmQgUmVhY3RUcmFuc2l0aW9uR3JvdXAgcHJv
cHMgdG8gcHJpbWl0aXZlIERPTSBub2RlcworICAgIHZhciBwcm9wcyA9IF9hc3NpZ24oe30sIHRo
aXMucHJvcHMpOworICAgIGRlbGV0ZSBwcm9wcy50cmFuc2l0aW9uTGVhdmU7CisgICAgZGVsZXRl
IHByb3BzLnRyYW5zaXRpb25OYW1lOworICAgIGRlbGV0ZSBwcm9wcy50cmFuc2l0aW9uQXBwZWFy
OworICAgIGRlbGV0ZSBwcm9wcy50cmFuc2l0aW9uRW50ZXI7CisgICAgZGVsZXRlIHByb3BzLmNo
aWxkRmFjdG9yeTsKKyAgICBkZWxldGUgcHJvcHMudHJhbnNpdGlvbkxlYXZlVGltZW91dDsKKyAg
ICBkZWxldGUgcHJvcHMudHJhbnNpdGlvbkVudGVyVGltZW91dDsKKyAgICBkZWxldGUgcHJvcHMu
dHJhbnNpdGlvbkFwcGVhclRpbWVvdXQ7CisgICAgZGVsZXRlIHByb3BzLmNvbXBvbmVudDsKKwor
ICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KHRoaXMucHJvcHMuY29tcG9uZW50LCBwcm9w
cywgY2hpbGRyZW5Ub1JlbmRlcik7CisgIH07CisKKyAgcmV0dXJuIFJlYWN0VHJhbnNpdGlvbkdy
b3VwOworfShSZWFjdC5Db21wb25lbnQpOworCitSZWFjdFRyYW5zaXRpb25Hcm91cC5kaXNwbGF5
TmFtZSA9ICdSZWFjdFRyYW5zaXRpb25Hcm91cCc7CitSZWFjdFRyYW5zaXRpb25Hcm91cC5wcm9w
VHlwZXMgPSB7CisgIGNvbXBvbmVudDogUHJvcFR5cGVzLmFueSwKKyAgY2hpbGRGYWN0b3J5OiBQ
cm9wVHlwZXMuZnVuYworfTsKK1JlYWN0VHJhbnNpdGlvbkdyb3VwLmRlZmF1bHRQcm9wcyA9IHsK
KyAgY29tcG9uZW50OiAnc3BhbicsCisgIGNoaWxkRmFjdG9yeTogZW1wdHlGdW5jdGlvbi50aGF0
UmV0dXJuc0FyZ3VtZW50Cit9OworCisKK21vZHVsZS5leHBvcnRzID0gUmVhY3RUcmFuc2l0aW9u
R3JvdXA7Cit9LHsiMjciOjI3LCI0NSI6NDUsIjUiOjUsIjUwIjo1MCwiNTIiOjUyfV0sMzA6W2Z1
bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAxMy1w
cmVzZW50LCBGYWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBU
aGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBm
b3VuZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhp
cyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAorICogb2YgcGF0ZW50IHJpZ2h0cyBj
YW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisg
KgorICovCisKKyd1c2Ugc3RyaWN0JzsKKworbW9kdWxlLmV4cG9ydHMgPSAnMTUuNS40JzsKK30s
e31dLDMxOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJp
Z2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxl
IGxpY2Vuc2UgZm91bmQgaW4gdGhlCisgKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0
b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnQKKyAqIG9mIHBhdGVu
dCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGly
ZWN0b3J5LgorICoKKyAqLworCisndXNlIHN0cmljdCc7CisKK3ZhciBMaW5rZWRTdGF0ZU1peGlu
ID0gX2RlcmVxXygzKTsKK3ZhciBSZWFjdCA9IF9kZXJlcV8oNSk7Cit2YXIgUmVhY3RBZGRvbnNE
T01EZXBlbmRlbmNpZXMgPSBfZGVyZXFfKDYpOwordmFyIFJlYWN0Q29tcG9uZW50V2l0aFB1cmVS
ZW5kZXJNaXhpbiA9IF9kZXJlcV8oMTMpOwordmFyIFJlYWN0Q1NTVHJhbnNpdGlvbkdyb3VwID0g
X2RlcmVxXyg3KTsKK3ZhciBSZWFjdEZyYWdtZW50ID0gX2RlcmVxXygxOSk7Cit2YXIgUmVhY3RU
cmFuc2l0aW9uR3JvdXAgPSBfZGVyZXFfKDI5KTsKKwordmFyIHNoYWxsb3dDb21wYXJlID0gX2Rl
cmVxXyg0MCk7Cit2YXIgdXBkYXRlID0gX2RlcmVxXyg0Mik7CisKK1JlYWN0LmFkZG9ucyA9IHsK
KyAgQ1NTVHJhbnNpdGlvbkdyb3VwOiBSZWFjdENTU1RyYW5zaXRpb25Hcm91cCwKKyAgTGlua2Vk
U3RhdGVNaXhpbjogTGlua2VkU3RhdGVNaXhpbiwKKyAgUHVyZVJlbmRlck1peGluOiBSZWFjdENv
bXBvbmVudFdpdGhQdXJlUmVuZGVyTWl4aW4sCisgIFRyYW5zaXRpb25Hcm91cDogUmVhY3RUcmFu
c2l0aW9uR3JvdXAsCisKKyAgY3JlYXRlRnJhZ21lbnQ6IFJlYWN0RnJhZ21lbnQuY3JlYXRlLAor
ICBzaGFsbG93Q29tcGFyZTogc2hhbGxvd0NvbXBhcmUsCisgIHVwZGF0ZTogdXBkYXRlCit9Owor
CitpZiAoImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nKSB7CisgIC8vIEZvciB0aGUgVU1E
IGJ1aWxkIHdlIGdldCB0aGVzZSBsYXppbHkgZnJvbSB0aGUgZ2xvYmFsIHNpbmNlIHRoZXkncmUg
dGllZAorICAvLyB0byB0aGUgRE9NIHJlbmRlcmVyIGFuZCBpdCBoYXNuJ3QgbG9hZGVkIHlldC4K
KyAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlYWN0LmFkZG9ucywgJ1BlcmYnLCB7CisgICAgZW51
bWVyYWJsZTogdHJ1ZSwKKyAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgIHJldHVybiBSZWFj
dEFkZG9uc0RPTURlcGVuZGVuY2llcy5nZXRSZWFjdFBlcmYoKTsKKyAgICB9CisgIH0pOworICBP
YmplY3QuZGVmaW5lUHJvcGVydHkoUmVhY3QuYWRkb25zLCAnVGVzdFV0aWxzJywgeworICAgIGVu
dW1lcmFibGU6IHRydWUsCisgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICByZXR1cm4gUmVh
Y3RBZGRvbnNET01EZXBlbmRlbmNpZXMuZ2V0UmVhY3RUZXN0VXRpbHMoKTsKKyAgICB9CisgIH0p
OworfQorCittb2R1bGUuZXhwb3J0cyA9IFJlYWN0OworfSx7IjEzIjoxMywiMTkiOjE5LCIyOSI6
MjksIjMiOjMsIjQwIjo0MCwiNDIiOjQyLCI1Ijo1LCI2Ijo2LCI3Ijo3fV0sMzI6W2Z1bmN0aW9u
KF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50
LCBGYWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNv
dXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBp
biB0aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3Vy
Y2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAorICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUg
Zm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisgKgorICov
CisKKyd1c2Ugc3RyaWN0JzsKKwordmFyIF9hc3NpZ24gPSBfZGVyZXFfKDUwKTsKKwordmFyIFJl
YWN0V2l0aEFkZG9ucyA9IF9kZXJlcV8oMzEpOworCisvLyBgdmVyc2lvbmAgd2lsbCBiZSBhZGRl
ZCBoZXJlIGJ5IHRoZSBSZWFjdCBtb2R1bGUuCit2YXIgUmVhY3RXaXRoQWRkb25zVU1ERW50cnkg
PSBfYXNzaWduKFJlYWN0V2l0aEFkZG9ucywgeworICBfX1NFQ1JFVF9JTkpFQ1RFRF9SRUFDVF9E
T01fRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRDogbnVsbCwgLy8gV2lsbCBiZSBpbmpl
Y3RlZCBieSBSZWFjdERPTSBVTUQgYnVpbGQuCisgIF9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1Rf
VVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEOiB7CisgICAgUmVhY3RDdXJyZW50T3duZXI6IF9kZXJl
cV8oMTQpCisgIH0KK30pOworCitpZiAoImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nKSB7
CisgIF9hc3NpZ24oUmVhY3RXaXRoQWRkb25zVU1ERW50cnkuX19TRUNSRVRfSU5URVJOQUxTX0RP
X05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQsIHsKKyAgICAvLyBSZWFjdENvbXBvbmVudFRy
ZWVIb29rIHNob3VsZCBub3QgYmUgaW5jbHVkZWQgaW4gcHJvZHVjdGlvbi4KKyAgICBSZWFjdENv
bXBvbmVudFRyZWVIb29rOiBfZGVyZXFfKDEyKSwKKyAgICBnZXROZXh0RGVidWdJRDogX2RlcmVx
XygzNykKKyAgfSk7Cit9CisKK21vZHVsZS5leHBvcnRzID0gUmVhY3RXaXRoQWRkb25zVU1ERW50
cnk7Cit9LHsiMTIiOjEyLCIxNCI6MTQsIjMxIjozMSwiMzciOjM3LCI1MCI6NTB9XSwzMzpbZnVu
Y3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIENvcHlyaWdodCAyMDEzLXBy
ZXNlbnQsIEZhY2Vib29rLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRo
aXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZv
dW5kIGluIHRoZQorICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlz
IHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50CisgKiBvZiBwYXRlbnQgcmlnaHRzIGNh
biBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAq
CisgKiAKKyAqLworCisndXNlIHN0cmljdCc7CisKK3ZhciBjYW5EZWZpbmVQcm9wZXJ0eSA9IGZh
bHNlOworaWYgKCJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJykgeworICB0cnkgeworICAg
IC8vICRGbG93Rml4TWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2Zsb3cvaXNzdWVzLzI4
NQorICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgJ3gnLCB7IGdldDogZnVuY3Rpb24gKCkg
e30gfSk7CisgICAgY2FuRGVmaW5lUHJvcGVydHkgPSB0cnVlOworICB9IGNhdGNoICh4KSB7Cisg
ICAgLy8gSUUgd2lsbCBmYWlsIG9uIGRlZmluZVByb3BlcnR5CisgIH0KK30KKworbW9kdWxlLmV4
cG9ydHMgPSBjYW5EZWZpbmVQcm9wZXJ0eTsKK30se31dLDM0OltmdW5jdGlvbihfZGVyZXFfLG1v
ZHVsZSxleHBvcnRzKXsKKyhmdW5jdGlvbiAocHJvY2Vzcyl7CisvKioKKyAqIENvcHlyaWdodCAy
MDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNl
bnNlIGZvdW5kIGluIHRoZQorICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBv
ZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50CisgKiBvZiBwYXRlbnQgcmln
aHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9y
eS4KKyAqCisgKi8KKworJ3VzZSBzdHJpY3QnOworCit2YXIgX3Byb2RJbnZhcmlhbnQgPSBfZGVy
ZXFfKDM5KTsKKwordmFyIFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzID0gX2RlcmVxXygyMik7
Cit2YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSBfZGVyZXFfKDI0KTsKKwordmFyIGludmFyaWFu
dCA9IF9kZXJlcV8oNDcpOwordmFyIHdhcm5pbmcgPSBfZGVyZXFfKDQ5KTsKKwordmFyIFJlYWN0
Q29tcG9uZW50VHJlZUhvb2s7CisKK2lmICh0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcg
JiYgcHJvY2Vzcy5lbnYgJiYgImRldmVsb3BtZW50IiA9PT0gJ3Rlc3QnKSB7CisgIC8vIFRlbXBv
cmFyeSBoYWNrLgorICAvLyBJbmxpbmUgcmVxdWlyZXMgZG9uJ3Qgd29yayB3ZWxsIHdpdGggSmVz
dDoKKyAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy83MjQwCisg
IC8vIFJlbW92ZSB0aGUgaW5saW5lIHJlcXVpcmVzIHdoZW4gd2UgZG9uJ3QgbmVlZCB0aGVtIGFu
eW1vcmU6CisgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9wdWxsLzcxNzgK
KyAgUmVhY3RDb21wb25lbnRUcmVlSG9vayA9IF9kZXJlcV8oMTIpOworfQorCit2YXIgbG9nZ2Vk
VHlwZUZhaWx1cmVzID0ge307CisKKy8qKgorICogQXNzZXJ0IHRoYXQgdGhlIHZhbHVlcyBtYXRj
aCB3aXRoIHRoZSB0eXBlIHNwZWNzLgorICogRXJyb3IgbWVzc2FnZXMgYXJlIG1lbW9yaXplZCBh
bmQgd2lsbCBvbmx5IGJlIHNob3duIG9uY2UuCisgKgorICogQHBhcmFtIHtvYmplY3R9IHR5cGVT
cGVjcyBNYXAgb2YgbmFtZSB0byBhIFJlYWN0UHJvcFR5cGUKKyAqIEBwYXJhbSB7b2JqZWN0fSB2
YWx1ZXMgUnVudGltZSB2YWx1ZXMgdGhhdCBuZWVkIHRvIGJlIHR5cGUtY2hlY2tlZAorICogQHBh
cmFtIHtzdHJpbmd9IGxvY2F0aW9uIGUuZy4gInByb3AiLCAiY29udGV4dCIsICJjaGlsZCBjb250
ZXh0IgorICogQHBhcmFtIHtzdHJpbmd9IGNvbXBvbmVudE5hbWUgTmFtZSBvZiB0aGUgY29tcG9u
ZW50IGZvciBlcnJvciBtZXNzYWdlcy4KKyAqIEBwYXJhbSB7P29iamVjdH0gZWxlbWVudCBUaGUg
UmVhY3QgZWxlbWVudCB0aGF0IGlzIGJlaW5nIHR5cGUtY2hlY2tlZAorICogQHBhcmFtIHs/bnVt
YmVyfSBkZWJ1Z0lEIFRoZSBSZWFjdCBjb21wb25lbnQgaW5zdGFuY2UgdGhhdCBpcyBiZWluZyB0
eXBlLWNoZWNrZWQKKyAqIEBwcml2YXRlCisgKi8KK2Z1bmN0aW9uIGNoZWNrUmVhY3RUeXBlU3Bl
Yyh0eXBlU3BlY3MsIHZhbHVlcywgbG9jYXRpb24sIGNvbXBvbmVudE5hbWUsIGVsZW1lbnQsIGRl
YnVnSUQpIHsKKyAgZm9yICh2YXIgdHlwZVNwZWNOYW1lIGluIHR5cGVTcGVjcykgeworICAgIGlm
ICh0eXBlU3BlY3MuaGFzT3duUHJvcGVydHkodHlwZVNwZWNOYW1lKSkgeworICAgICAgdmFyIGVy
cm9yOworICAgICAgLy8gUHJvcCB0eXBlIHZhbGlkYXRpb24gbWF5IHRocm93LiBJbiBjYXNlIHRo
ZXkgZG8sIHdlIGRvbid0IHdhbnQgdG8KKyAgICAgIC8vIGZhaWwgdGhlIHJlbmRlciBwaGFzZSB3
aGVyZSBpdCBkaWRuJ3QgZmFpbCBiZWZvcmUuIFNvIHdlIGxvZyBpdC4KKyAgICAgIC8vIEFmdGVy
IHRoZXNlIGhhdmUgYmVlbiBjbGVhbmVkIHVwLCB3ZSdsbCBsZXQgdGhlbSB0aHJvdy4KKyAgICAg
IHRyeSB7CisgICAgICAgIC8vIFRoaXMgaXMgaW50ZW50aW9uYWxseSBhbiBpbnZhcmlhbnQgdGhh
dCBnZXRzIGNhdWdodC4gSXQncyB0aGUgc2FtZQorICAgICAgICAvLyBiZWhhdmlvciBhcyB3aXRo
b3V0IHRoaXMgc3RhdGVtZW50IGV4Y2VwdCB3aXRoIGEgYmV0dGVyIG1lc3NhZ2UuCisgICAgICAg
ICEodHlwZW9mIHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdID09PSAnZnVuY3Rpb24nKSA/ICJkZXZl
bG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJyVzOiAlcyB0eXBl
IGAlc2AgaXMgaW52YWxpZDsgaXQgbXVzdCBiZSBhIGZ1bmN0aW9uLCB1c3VhbGx5IGZyb20gUmVh
Y3QuUHJvcFR5cGVzLicsIGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJywgUmVhY3RQcm9w
VHlwZUxvY2F0aW9uTmFtZXNbbG9jYXRpb25dLCB0eXBlU3BlY05hbWUpIDogX3Byb2RJbnZhcmlh
bnQoJzg0JywgY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnLCBSZWFjdFByb3BUeXBlTG9j
YXRpb25OYW1lc1tsb2NhdGlvbl0sIHR5cGVTcGVjTmFtZSkgOiB2b2lkIDA7CisgICAgICAgIGVy
cm9yID0gdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0odmFsdWVzLCB0eXBlU3BlY05hbWUsIGNvbXBv
bmVudE5hbWUsIGxvY2F0aW9uLCBudWxsLCBSZWFjdFByb3BUeXBlc1NlY3JldCk7CisgICAgICB9
IGNhdGNoIChleCkgeworICAgICAgICBlcnJvciA9IGV4OworICAgICAgfQorICAgICAgImRldmVs
b3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyghZXJyb3IgfHwgZXJyb3IgaW5zdGFu
Y2VvZiBFcnJvciwgJyVzOiB0eXBlIHNwZWNpZmljYXRpb24gb2YgJXMgYCVzYCBpcyBpbnZhbGlk
OyB0aGUgdHlwZSBjaGVja2VyICcgKyAnZnVuY3Rpb24gbXVzdCByZXR1cm4gYG51bGxgIG9yIGFu
IGBFcnJvcmAgYnV0IHJldHVybmVkIGEgJXMuICcgKyAnWW91IG1heSBoYXZlIGZvcmdvdHRlbiB0
byBwYXNzIGFuIGFyZ3VtZW50IHRvIHRoZSB0eXBlIGNoZWNrZXIgJyArICdjcmVhdG9yIChhcnJh
eU9mLCBpbnN0YW5jZU9mLCBvYmplY3RPZiwgb25lT2YsIG9uZU9mVHlwZSwgYW5kICcgKyAnc2hh
cGUgYWxsIHJlcXVpcmUgYW4gYXJndW1lbnQpLicsIGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNs
YXNzJywgUmVhY3RQcm9wVHlwZUxvY2F0aW9uTmFtZXNbbG9jYXRpb25dLCB0eXBlU3BlY05hbWUs
IHR5cGVvZiBlcnJvcikgOiB2b2lkIDA7CisgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJv
ciAmJiAhKGVycm9yLm1lc3NhZ2UgaW4gbG9nZ2VkVHlwZUZhaWx1cmVzKSkgeworICAgICAgICAv
LyBPbmx5IG1vbml0b3IgdGhpcyBmYWlsdXJlIG9uY2UgYmVjYXVzZSB0aGVyZSB0ZW5kcyB0byBi
ZSBhIGxvdCBvZiB0aGUKKyAgICAgICAgLy8gc2FtZSBlcnJvci4KKyAgICAgICAgbG9nZ2VkVHlw
ZUZhaWx1cmVzW2Vycm9yLm1lc3NhZ2VdID0gdHJ1ZTsKKworICAgICAgICB2YXIgY29tcG9uZW50
U3RhY2tJbmZvID0gJyc7CisKKyAgICAgICAgaWYgKCJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0
aW9uJykgeworICAgICAgICAgIGlmICghUmVhY3RDb21wb25lbnRUcmVlSG9vaykgeworICAgICAg
ICAgICAgUmVhY3RDb21wb25lbnRUcmVlSG9vayA9IF9kZXJlcV8oMTIpOworICAgICAgICAgIH0K
KyAgICAgICAgICBpZiAoZGVidWdJRCAhPT0gbnVsbCkgeworICAgICAgICAgICAgY29tcG9uZW50
U3RhY2tJbmZvID0gUmVhY3RDb21wb25lbnRUcmVlSG9vay5nZXRTdGFja0FkZGVuZHVtQnlJRChk
ZWJ1Z0lEKTsKKyAgICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQgIT09IG51bGwpIHsKKyAgICAg
ICAgICAgIGNvbXBvbmVudFN0YWNrSW5mbyA9IFJlYWN0Q29tcG9uZW50VHJlZUhvb2suZ2V0Q3Vy
cmVudFN0YWNrQWRkZW5kdW0oZWxlbWVudCk7CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhmYWxzZSwgJ0Zh
aWxlZCAlcyB0eXBlOiAlcyVzJywgbG9jYXRpb24sIGVycm9yLm1lc3NhZ2UsIGNvbXBvbmVudFN0
YWNrSW5mbykgOiB2b2lkIDA7CisgICAgICB9CisgICAgfQorICB9Cit9CisKK21vZHVsZS5leHBv
cnRzID0gY2hlY2tSZWFjdFR5cGVTcGVjOworfSkuY2FsbCh0aGlzLHVuZGVmaW5lZCkKK30seyIx
MiI6MTIsIjIyIjoyMiwiMjQiOjI0LCIzOSI6MzksIjQ3Ijo0NywiNDkiOjQ5fV0sMzU6W2Z1bmN0
aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpeworKGZ1bmN0aW9uIChwcm9jZXNzKXsKKy8qKgor
ICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4KKyAqIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUg
QlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlCisgKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJv
b3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnQKKyAq
IG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhl
IHNhbWUgZGlyZWN0b3J5LgorICoKKyAqIAorICovCisKKyd1c2Ugc3RyaWN0JzsKKwordmFyIEtl
eUVzY2FwZVV0aWxzID0gX2RlcmVxXygyKTsKK3ZhciB0cmF2ZXJzZUFsbENoaWxkcmVuID0gX2Rl
cmVxXyg0MSk7Cit2YXIgd2FybmluZyA9IF9kZXJlcV8oNDkpOworCit2YXIgUmVhY3RDb21wb25l
bnRUcmVlSG9vazsKKworaWYgKHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiBwcm9j
ZXNzLmVudiAmJiAiZGV2ZWxvcG1lbnQiID09PSAndGVzdCcpIHsKKyAgLy8gVGVtcG9yYXJ5IGhh
Y2suCisgIC8vIElubGluZSByZXF1aXJlcyBkb24ndCB3b3JrIHdlbGwgd2l0aCBKZXN0OgorICAv
LyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzcyNDAKKyAgLy8gUmVt
b3ZlIHRoZSBpbmxpbmUgcmVxdWlyZXMgd2hlbiB3ZSBkb24ndCBuZWVkIHRoZW0gYW55bW9yZToK
KyAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L3B1bGwvNzE3OAorICBSZWFj
dENvbXBvbmVudFRyZWVIb29rID0gX2RlcmVxXygxMik7Cit9CisKKy8qKgorICogQHBhcmFtIHtm
dW5jdGlvbn0gdHJhdmVyc2VDb250ZXh0IENvbnRleHQgcGFzc2VkIHRocm91Z2ggdHJhdmVyc2Fs
LgorICogQHBhcmFtIHs/UmVhY3RDb21wb25lbnR9IGNoaWxkIFJlYWN0IGNoaWxkIGNvbXBvbmVu
dC4KKyAqIEBwYXJhbSB7IXN0cmluZ30gbmFtZSBTdHJpbmcgbmFtZSBvZiBrZXkgcGF0aCB0byBj
aGlsZC4KKyAqIEBwYXJhbSB7bnVtYmVyPX0gc2VsZkRlYnVnSUQgT3B0aW9uYWwgZGVidWdJRCBv
ZiB0aGUgY3VycmVudCBpbnRlcm5hbCBpbnN0YW5jZS4KKyAqLworZnVuY3Rpb24gZmxhdHRlblNp
bmdsZUNoaWxkSW50b0NvbnRleHQodHJhdmVyc2VDb250ZXh0LCBjaGlsZCwgbmFtZSwgc2VsZkRl
YnVnSUQpIHsKKyAgLy8gV2UgZm91bmQgYSBjb21wb25lbnQgaW5zdGFuY2UuCisgIGlmICh0cmF2
ZXJzZUNvbnRleHQgJiYgdHlwZW9mIHRyYXZlcnNlQ29udGV4dCA9PT0gJ29iamVjdCcpIHsKKyAg
ICB2YXIgcmVzdWx0ID0gdHJhdmVyc2VDb250ZXh0OworICAgIHZhciBrZXlVbmlxdWUgPSByZXN1
bHRbbmFtZV0gPT09IHVuZGVmaW5lZDsKKyAgICBpZiAoImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1
Y3Rpb24nKSB7CisgICAgICBpZiAoIVJlYWN0Q29tcG9uZW50VHJlZUhvb2spIHsKKyAgICAgICAg
UmVhY3RDb21wb25lbnRUcmVlSG9vayA9IF9kZXJlcV8oMTIpOworICAgICAgfQorICAgICAgaWYg
KCFrZXlVbmlxdWUpIHsKKyAgICAgICAgImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8g
d2FybmluZyhmYWxzZSwgJ2ZsYXR0ZW5DaGlsZHJlbiguLi4pOiBFbmNvdW50ZXJlZCB0d28gY2hp
bGRyZW4gd2l0aCB0aGUgc2FtZSBrZXksICcgKyAnYCVzYC4gQ2hpbGQga2V5cyBtdXN0IGJlIHVu
aXF1ZTsgd2hlbiB0d28gY2hpbGRyZW4gc2hhcmUgYSBrZXksIG9ubHkgJyArICd0aGUgZmlyc3Qg
Y2hpbGQgd2lsbCBiZSB1c2VkLiVzJywgS2V5RXNjYXBlVXRpbHMudW5lc2NhcGUobmFtZSksIFJl
YWN0Q29tcG9uZW50VHJlZUhvb2suZ2V0U3RhY2tBZGRlbmR1bUJ5SUQoc2VsZkRlYnVnSUQpKSA6
IHZvaWQgMDsKKyAgICAgIH0KKyAgICB9CisgICAgaWYgKGtleVVuaXF1ZSAmJiBjaGlsZCAhPSBu
dWxsKSB7CisgICAgICByZXN1bHRbbmFtZV0gPSBjaGlsZDsKKyAgICB9CisgIH0KK30KKworLyoq
CisgKiBGbGF0dGVucyBjaGlsZHJlbiB0aGF0IGFyZSB0eXBpY2FsbHkgc3BlY2lmaWVkIGFzIGBw
cm9wcy5jaGlsZHJlbmAuIEFueSBudWxsCisgKiBjaGlsZHJlbiB3aWxsIG5vdCBiZSBpbmNsdWRl
ZCBpbiB0aGUgcmVzdWx0aW5nIG9iamVjdC4KKyAqIEByZXR1cm4geyFvYmplY3R9IGZsYXR0ZW5l
ZCBjaGlsZHJlbiBrZXllZCBieSBuYW1lLgorICovCitmdW5jdGlvbiBmbGF0dGVuQ2hpbGRyZW4o
Y2hpbGRyZW4sIHNlbGZEZWJ1Z0lEKSB7CisgIGlmIChjaGlsZHJlbiA9PSBudWxsKSB7CisgICAg
cmV0dXJuIGNoaWxkcmVuOworICB9CisgIHZhciByZXN1bHQgPSB7fTsKKworICBpZiAoImRldmVs
b3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nKSB7CisgICAgdHJhdmVyc2VBbGxDaGlsZHJlbihjaGls
ZHJlbiwgZnVuY3Rpb24gKHRyYXZlcnNlQ29udGV4dCwgY2hpbGQsIG5hbWUpIHsKKyAgICAgIHJl
dHVybiBmbGF0dGVuU2luZ2xlQ2hpbGRJbnRvQ29udGV4dCh0cmF2ZXJzZUNvbnRleHQsIGNoaWxk
LCBuYW1lLCBzZWxmRGVidWdJRCk7CisgICAgfSwgcmVzdWx0KTsKKyAgfSBlbHNlIHsKKyAgICB0
cmF2ZXJzZUFsbENoaWxkcmVuKGNoaWxkcmVuLCBmbGF0dGVuU2luZ2xlQ2hpbGRJbnRvQ29udGV4
dCwgcmVzdWx0KTsKKyAgfQorICByZXR1cm4gcmVzdWx0OworfQorCittb2R1bGUuZXhwb3J0cyA9
IGZsYXR0ZW5DaGlsZHJlbjsKK30pLmNhbGwodGhpcyx1bmRlZmluZWQpCit9LHsiMTIiOjEyLCIy
IjoyLCI0MSI6NDEsIjQ5Ijo0OX1dLDM2OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRz
KXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4KKyAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1
bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlCisgKiBMSUNFTlNFIGZpbGUg
aW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwg
Z3JhbnQKKyAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZp
bGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorICoKKyAqIAorICovCisKKyd1c2Ugc3RyaWN0JzsK
KworLyogZ2xvYmFsIFN5bWJvbCAqLworCit2YXIgSVRFUkFUT1JfU1lNQk9MID0gdHlwZW9mIFN5
bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuaXRlcmF0b3I7Cit2YXIgRkFVWF9JVEVSQVRP
Ul9TWU1CT0wgPSAnQEBpdGVyYXRvcic7IC8vIEJlZm9yZSBTeW1ib2wgc3BlYy4KKworLyoqCisg
KiBSZXR1cm5zIHRoZSBpdGVyYXRvciBtZXRob2QgZnVuY3Rpb24gY29udGFpbmVkIG9uIHRoZSBp
dGVyYWJsZSBvYmplY3QuCisgKgorICogQmUgc3VyZSB0byBpbnZva2UgdGhlIGZ1bmN0aW9uIHdp
dGggdGhlIGl0ZXJhYmxlIGFzIGNvbnRleHQ6CisgKgorICogICAgIHZhciBpdGVyYXRvckZuID0g
Z2V0SXRlcmF0b3JGbihteUl0ZXJhYmxlKTsKKyAqICAgICBpZiAoaXRlcmF0b3JGbikgeworICog
ICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKG15SXRlcmFibGUpOworICogICAg
ICAgLi4uCisgKiAgICAgfQorICoKKyAqIEBwYXJhbSB7P29iamVjdH0gbWF5YmVJdGVyYWJsZQor
ICogQHJldHVybiB7P2Z1bmN0aW9ufQorICovCitmdW5jdGlvbiBnZXRJdGVyYXRvckZuKG1heWJl
SXRlcmFibGUpIHsKKyAgdmFyIGl0ZXJhdG9yRm4gPSBtYXliZUl0ZXJhYmxlICYmIChJVEVSQVRP
Ul9TWU1CT0wgJiYgbWF5YmVJdGVyYWJsZVtJVEVSQVRPUl9TWU1CT0xdIHx8IG1heWJlSXRlcmFi
bGVbRkFVWF9JVEVSQVRPUl9TWU1CT0xdKTsKKyAgaWYgKHR5cGVvZiBpdGVyYXRvckZuID09PSAn
ZnVuY3Rpb24nKSB7CisgICAgcmV0dXJuIGl0ZXJhdG9yRm47CisgIH0KK30KKworbW9kdWxlLmV4
cG9ydHMgPSBnZXRJdGVyYXRvckZuOworfSx7fV0sMzc6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxl
LGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5j
LgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxp
Y2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGUKKyAqIExJQ0VO
U0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRk
aXRpb25hbCBncmFudAorICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBB
VEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisgKgorICogCisgKi8KKworJ3VzZSBz
dHJpY3QnOworCit2YXIgbmV4dERlYnVnSUQgPSAxOworCitmdW5jdGlvbiBnZXROZXh0RGVidWdJ
RCgpIHsKKyAgcmV0dXJuIG5leHREZWJ1Z0lEKys7Cit9CisKK21vZHVsZS5leHBvcnRzID0gZ2V0
TmV4dERlYnVnSUQ7Cit9LHt9XSwzODpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7
CisvKioKKyAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuCisgKiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5k
ZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZQorICogTElDRU5TRSBmaWxlIGlu
IHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdy
YW50CisgKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxl
IGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAqCisgKi8KKyd1c2Ugc3RyaWN0JzsKKwordmFyIF9w
cm9kSW52YXJpYW50ID0gX2RlcmVxXygzOSk7CisKK3ZhciBSZWFjdEVsZW1lbnQgPSBfZGVyZXFf
KDE2KTsKKwordmFyIGludmFyaWFudCA9IF9kZXJlcV8oNDcpOworCisvKioKKyAqIFJldHVybnMg
dGhlIGZpcnN0IGNoaWxkIGluIGEgY29sbGVjdGlvbiBvZiBjaGlsZHJlbiBhbmQgdmVyaWZpZXMg
dGhhdCB0aGVyZQorICogaXMgb25seSBvbmUgY2hpbGQgaW4gdGhlIGNvbGxlY3Rpb24uCisgKgor
ICogU2VlIGh0dHBzOi8vZmFjZWJvb2suZ2l0aHViLmlvL3JlYWN0L2RvY3MvdG9wLWxldmVsLWFw
aS5odG1sI3JlYWN0LmNoaWxkcmVuLm9ubHkKKyAqCisgKiBUaGUgY3VycmVudCBpbXBsZW1lbnRh
dGlvbiBvZiB0aGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhhdCBhIHNpbmdsZSBjaGlsZCBnZXRzCisg
KiBwYXNzZWQgd2l0aG91dCBhIHdyYXBwZXIsIGJ1dCB0aGUgcHVycG9zZSBvZiB0aGlzIGhlbHBl
ciBmdW5jdGlvbiBpcyB0bworICogYWJzdHJhY3QgYXdheSB0aGUgcGFydGljdWxhciBzdHJ1Y3R1
cmUgb2YgY2hpbGRyZW4uCisgKgorICogQHBhcmFtIHs/b2JqZWN0fSBjaGlsZHJlbiBDaGlsZCBj
b2xsZWN0aW9uIHN0cnVjdHVyZS4KKyAqIEByZXR1cm4ge1JlYWN0RWxlbWVudH0gVGhlIGZpcnN0
IGFuZCBvbmx5IGBSZWFjdEVsZW1lbnRgIGNvbnRhaW5lZCBpbiB0aGUKKyAqIHN0cnVjdHVyZS4K
KyAqLworZnVuY3Rpb24gb25seUNoaWxkKGNoaWxkcmVuKSB7CisgICFSZWFjdEVsZW1lbnQuaXNW
YWxpZEVsZW1lbnQoY2hpbGRyZW4pID8gImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8g
aW52YXJpYW50KGZhbHNlLCAnUmVhY3QuQ2hpbGRyZW4ub25seSBleHBlY3RlZCB0byByZWNlaXZl
IGEgc2luZ2xlIFJlYWN0IGVsZW1lbnQgY2hpbGQuJykgOiBfcHJvZEludmFyaWFudCgnMTQzJykg
OiB2b2lkIDA7CisgIHJldHVybiBjaGlsZHJlbjsKK30KKworbW9kdWxlLmV4cG9ydHMgPSBvbmx5
Q2hpbGQ7Cit9LHsiMTYiOjE2LCIzOSI6MzksIjQ3Ijo0N31dLDM5OltmdW5jdGlvbihfZGVyZXFf
LG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZh
Y2Vib29rLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc291cmNl
IGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRo
ZQorICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0
cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50CisgKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3Vu
ZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAqCisgKiAKKyAq
LworJ3VzZSBzdHJpY3QnOworCisvKioKKyAqIFdBUk5JTkc6IERPIE5PVCBtYW51YWxseSByZXF1
aXJlIHRoaXMgbW9kdWxlLgorICogVGhpcyBpcyBhIHJlcGxhY2VtZW50IGZvciBgaW52YXJpYW50
KC4uLilgIHVzZWQgYnkgdGhlIGVycm9yIGNvZGUgc3lzdGVtCisgKiBhbmQgd2lsbCBfb25seV8g
YmUgcmVxdWlyZWQgYnkgdGhlIGNvcnJlc3BvbmRpbmcgYmFiZWwgcGFzcy4KKyAqIEl0IGFsd2F5
cyB0aHJvd3MuCisgKi8KKworZnVuY3Rpb24gcmVhY3RQcm9kSW52YXJpYW50KGNvZGUpIHsKKyAg
dmFyIGFyZ0NvdW50ID0gYXJndW1lbnRzLmxlbmd0aCAtIDE7CisKKyAgdmFyIG1lc3NhZ2UgPSAn
TWluaWZpZWQgUmVhY3QgZXJyb3IgIycgKyBjb2RlICsgJzsgdmlzaXQgJyArICdodHRwOi8vZmFj
ZWJvb2suZ2l0aHViLmlvL3JlYWN0L2RvY3MvZXJyb3ItZGVjb2Rlci5odG1sP2ludmFyaWFudD0n
ICsgY29kZTsKKworICBmb3IgKHZhciBhcmdJZHggPSAwOyBhcmdJZHggPCBhcmdDb3VudDsgYXJn
SWR4KyspIHsKKyAgICBtZXNzYWdlICs9ICcmYXJnc1tdPScgKyBlbmNvZGVVUklDb21wb25lbnQo
YXJndW1lbnRzW2FyZ0lkeCArIDFdKTsKKyAgfQorCisgIG1lc3NhZ2UgKz0gJyBmb3IgdGhlIGZ1
bGwgbWVzc2FnZSBvciB1c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQnICsgJyBm
b3IgZnVsbCBlcnJvcnMgYW5kIGFkZGl0aW9uYWwgaGVscGZ1bCB3YXJuaW5ncy4nOworCisgIHZh
ciBlcnJvciA9IG5ldyBFcnJvcihtZXNzYWdlKTsKKyAgZXJyb3IubmFtZSA9ICdJbnZhcmlhbnQg
VmlvbGF0aW9uJzsKKyAgZXJyb3IuZnJhbWVzVG9Qb3AgPSAxOyAvLyB3ZSBkb24ndCBjYXJlIGFi
b3V0IHJlYWN0UHJvZEludmFyaWFudCdzIG93biBmcmFtZQorCisgIHRocm93IGVycm9yOworfQor
Cittb2R1bGUuZXhwb3J0cyA9IHJlYWN0UHJvZEludmFyaWFudDsKK30se31dLDQwOltmdW5jdGlv
bihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMtcHJlc2Vu
dCwgRmFjZWJvb2ssIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBz
b3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQg
aW4gdGhlCisgKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291
cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnQKKyAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJl
IGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorICoKKyAq
LworCisndXNlIHN0cmljdCc7CisKK3ZhciBzaGFsbG93RXF1YWwgPSBfZGVyZXFfKDQ4KTsKKwor
LyoqCisgKiBEb2VzIGEgc2hhbGxvdyBjb21wYXJpc29uIGZvciBwcm9wcyBhbmQgc3RhdGUuCisg
KiBTZWUgUmVhY3RDb21wb25lbnRXaXRoUHVyZVJlbmRlck1peGluCisgKiBTZWUgYWxzbyBodHRw
czovL2ZhY2Vib29rLmdpdGh1Yi5pby9yZWFjdC9kb2NzL3NoYWxsb3ctY29tcGFyZS5odG1sCisg
Ki8KK2Z1bmN0aW9uIHNoYWxsb3dDb21wYXJlKGluc3RhbmNlLCBuZXh0UHJvcHMsIG5leHRTdGF0
ZSkgeworICByZXR1cm4gIXNoYWxsb3dFcXVhbChpbnN0YW5jZS5wcm9wcywgbmV4dFByb3BzKSB8
fCAhc2hhbGxvd0VxdWFsKGluc3RhbmNlLnN0YXRlLCBuZXh0U3RhdGUpOworfQorCittb2R1bGUu
ZXhwb3J0cyA9IHNoYWxsb3dDb21wYXJlOworfSx7IjQ4Ijo0OH1dLDQxOltmdW5jdGlvbihfZGVy
ZXFfLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFj
ZWJvb2ssIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb3VyY2Ug
Y29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhl
CisgKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRy
ZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnQKKyAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5k
IGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorICoKKyAqLworCisn
dXNlIHN0cmljdCc7CisKK3ZhciBfcHJvZEludmFyaWFudCA9IF9kZXJlcV8oMzkpOworCit2YXIg
UmVhY3RDdXJyZW50T3duZXIgPSBfZGVyZXFfKDE0KTsKK3ZhciBSRUFDVF9FTEVNRU5UX1RZUEUg
PSBfZGVyZXFfKDE3KTsKKwordmFyIGdldEl0ZXJhdG9yRm4gPSBfZGVyZXFfKDM2KTsKK3ZhciBp
bnZhcmlhbnQgPSBfZGVyZXFfKDQ3KTsKK3ZhciBLZXlFc2NhcGVVdGlscyA9IF9kZXJlcV8oMik7
Cit2YXIgd2FybmluZyA9IF9kZXJlcV8oNDkpOworCit2YXIgU0VQQVJBVE9SID0gJy4nOwordmFy
IFNVQlNFUEFSQVRPUiA9ICc6JzsKKworLyoqCisgKiBUaGlzIGlzIGlubGluZWQgZnJvbSBSZWFj
dEVsZW1lbnQgc2luY2UgdGhpcyBmaWxlIGlzIHNoYXJlZCBiZXR3ZWVuCisgKiBpc29tb3JwaGlj
IGFuZCByZW5kZXJlcnMuIFdlIGNvdWxkIGV4dHJhY3QgdGhpcyB0byBhCisgKgorICovCisKKy8q
KgorICogVE9ETzogVGVzdCB0aGF0IGEgc2luZ2xlIGNoaWxkIGFuZCBhbiBhcnJheSB3aXRoIG9u
ZSBpdGVtIGhhdmUgdGhlIHNhbWUga2V5CisgKiBwYXR0ZXJuLgorICovCisKK3ZhciBkaWRXYXJu
QWJvdXRNYXBzID0gZmFsc2U7CisKKy8qKgorICogR2VuZXJhdGUgYSBrZXkgc3RyaW5nIHRoYXQg
aWRlbnRpZmllcyBhIGNvbXBvbmVudCB3aXRoaW4gYSBzZXQuCisgKgorICogQHBhcmFtIHsqfSBj
b21wb25lbnQgQSBjb21wb25lbnQgdGhhdCBjb3VsZCBjb250YWluIGEgbWFudWFsIGtleS4KKyAq
IEBwYXJhbSB7bnVtYmVyfSBpbmRleCBJbmRleCB0aGF0IGlzIHVzZWQgaWYgYSBtYW51YWwga2V5
IGlzIG5vdCBwcm92aWRlZC4KKyAqIEByZXR1cm4ge3N0cmluZ30KKyAqLworZnVuY3Rpb24gZ2V0
Q29tcG9uZW50S2V5KGNvbXBvbmVudCwgaW5kZXgpIHsKKyAgLy8gRG8gc29tZSB0eXBlY2hlY2tp
bmcgaGVyZSBzaW5jZSB3ZSBjYWxsIHRoaXMgYmxpbmRseS4gV2Ugd2FudCB0byBlbnN1cmUKKyAg
Ly8gdGhhdCB3ZSBkb24ndCBibG9jayBwb3RlbnRpYWwgZnV0dXJlIEVTIEFQSXMuCisgIGlmIChj
b21wb25lbnQgJiYgdHlwZW9mIGNvbXBvbmVudCA9PT0gJ29iamVjdCcgJiYgY29tcG9uZW50Lmtl
eSAhPSBudWxsKSB7CisgICAgLy8gRXhwbGljaXQga2V5CisgICAgcmV0dXJuIEtleUVzY2FwZVV0
aWxzLmVzY2FwZShjb21wb25lbnQua2V5KTsKKyAgfQorICAvLyBJbXBsaWNpdCBrZXkgZGV0ZXJt
aW5lZCBieSB0aGUgaW5kZXggaW4gdGhlIHNldAorICByZXR1cm4gaW5kZXgudG9TdHJpbmcoMzYp
OworfQorCisvKioKKyAqIEBwYXJhbSB7Pyp9IGNoaWxkcmVuIENoaWxkcmVuIHRyZWUgY29udGFp
bmVyLgorICogQHBhcmFtIHshc3RyaW5nfSBuYW1lU29GYXIgTmFtZSBvZiB0aGUga2V5IHBhdGgg
c28gZmFyLgorICogQHBhcmFtIHshZnVuY3Rpb259IGNhbGxiYWNrIENhbGxiYWNrIHRvIGludm9r
ZSB3aXRoIGVhY2ggY2hpbGQgZm91bmQuCisgKiBAcGFyYW0gez8qfSB0cmF2ZXJzZUNvbnRleHQg
VXNlZCB0byBwYXNzIGluZm9ybWF0aW9uIHRocm91Z2hvdXQgdGhlIHRyYXZlcnNhbAorICogcHJv
Y2Vzcy4KKyAqIEByZXR1cm4geyFudW1iZXJ9IFRoZSBudW1iZXIgb2YgY2hpbGRyZW4gaW4gdGhp
cyBzdWJ0cmVlLgorICovCitmdW5jdGlvbiB0cmF2ZXJzZUFsbENoaWxkcmVuSW1wbChjaGlsZHJl
biwgbmFtZVNvRmFyLCBjYWxsYmFjaywgdHJhdmVyc2VDb250ZXh0KSB7CisgIHZhciB0eXBlID0g
dHlwZW9mIGNoaWxkcmVuOworCisgIGlmICh0eXBlID09PSAndW5kZWZpbmVkJyB8fCB0eXBlID09
PSAnYm9vbGVhbicpIHsKKyAgICAvLyBBbGwgb2YgdGhlIGFib3ZlIGFyZSBwZXJjZWl2ZWQgYXMg
bnVsbC4KKyAgICBjaGlsZHJlbiA9IG51bGw7CisgIH0KKworICBpZiAoY2hpbGRyZW4gPT09IG51
bGwgfHwgdHlwZSA9PT0gJ3N0cmluZycgfHwgdHlwZSA9PT0gJ251bWJlcicgfHwKKyAgLy8gVGhl
IGZvbGxvd2luZyBpcyBpbmxpbmVkIGZyb20gUmVhY3RFbGVtZW50LiBUaGlzIG1lYW5zIHdlIGNh
biBvcHRpbWl6ZQorICAvLyBzb21lIGNoZWNrcy4gUmVhY3QgRmliZXIgYWxzbyBpbmxpbmVzIHRo
aXMgbG9naWMgZm9yIHNpbWlsYXIgcHVycG9zZXMuCisgIHR5cGUgPT09ICdvYmplY3QnICYmIGNo
aWxkcmVuLiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEUpIHsKKyAgICBjYWxsYmFjayh0
cmF2ZXJzZUNvbnRleHQsIGNoaWxkcmVuLAorICAgIC8vIElmIGl0J3MgdGhlIG9ubHkgY2hpbGQs
IHRyZWF0IHRoZSBuYW1lIGFzIGlmIGl0IHdhcyB3cmFwcGVkIGluIGFuIGFycmF5CisgICAgLy8g
c28gdGhhdCBpdCdzIGNvbnNpc3RlbnQgaWYgdGhlIG51bWJlciBvZiBjaGlsZHJlbiBncm93cy4K
KyAgICBuYW1lU29GYXIgPT09ICcnID8gU0VQQVJBVE9SICsgZ2V0Q29tcG9uZW50S2V5KGNoaWxk
cmVuLCAwKSA6IG5hbWVTb0Zhcik7CisgICAgcmV0dXJuIDE7CisgIH0KKworICB2YXIgY2hpbGQ7
CisgIHZhciBuZXh0TmFtZTsKKyAgdmFyIHN1YnRyZWVDb3VudCA9IDA7IC8vIENvdW50IG9mIGNo
aWxkcmVuIGZvdW5kIGluIHRoZSBjdXJyZW50IHN1YnRyZWUuCisgIHZhciBuZXh0TmFtZVByZWZp
eCA9IG5hbWVTb0ZhciA9PT0gJycgPyBTRVBBUkFUT1IgOiBuYW1lU29GYXIgKyBTVUJTRVBBUkFU
T1I7CisKKyAgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pKSB7CisgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykgeworICAgICAgY2hpbGQgPSBjaGlsZHJlbltp
XTsKKyAgICAgIG5leHROYW1lID0gbmV4dE5hbWVQcmVmaXggKyBnZXRDb21wb25lbnRLZXkoY2hp
bGQsIGkpOworICAgICAgc3VidHJlZUNvdW50ICs9IHRyYXZlcnNlQWxsQ2hpbGRyZW5JbXBsKGNo
aWxkLCBuZXh0TmFtZSwgY2FsbGJhY2ssIHRyYXZlcnNlQ29udGV4dCk7CisgICAgfQorICB9IGVs
c2UgeworICAgIHZhciBpdGVyYXRvckZuID0gZ2V0SXRlcmF0b3JGbihjaGlsZHJlbik7CisgICAg
aWYgKGl0ZXJhdG9yRm4pIHsKKyAgICAgIHZhciBpdGVyYXRvciA9IGl0ZXJhdG9yRm4uY2FsbChj
aGlsZHJlbik7CisgICAgICB2YXIgc3RlcDsKKyAgICAgIGlmIChpdGVyYXRvckZuICE9PSBjaGls
ZHJlbi5lbnRyaWVzKSB7CisgICAgICAgIHZhciBpaSA9IDA7CisgICAgICAgIHdoaWxlICghKHN0
ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHsKKyAgICAgICAgICBjaGlsZCA9IHN0ZXAudmFs
dWU7CisgICAgICAgICAgbmV4dE5hbWUgPSBuZXh0TmFtZVByZWZpeCArIGdldENvbXBvbmVudEtl
eShjaGlsZCwgaWkrKyk7CisgICAgICAgICAgc3VidHJlZUNvdW50ICs9IHRyYXZlcnNlQWxsQ2hp
bGRyZW5JbXBsKGNoaWxkLCBuZXh0TmFtZSwgY2FsbGJhY2ssIHRyYXZlcnNlQ29udGV4dCk7Cisg
ICAgICAgIH0KKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGlmICgiZGV2ZWxvcG1lbnQiICE9PSAn
cHJvZHVjdGlvbicpIHsKKyAgICAgICAgICB2YXIgbWFwc0FzQ2hpbGRyZW5BZGRlbmR1bSA9ICcn
OworICAgICAgICAgIGlmIChSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50KSB7CisgICAgICAgICAg
ICB2YXIgbWFwc0FzQ2hpbGRyZW5Pd25lck5hbWUgPSBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50
LmdldE5hbWUoKTsKKyAgICAgICAgICAgIGlmIChtYXBzQXNDaGlsZHJlbk93bmVyTmFtZSkgewor
ICAgICAgICAgICAgICBtYXBzQXNDaGlsZHJlbkFkZGVuZHVtID0gJyBDaGVjayB0aGUgcmVuZGVy
IG1ldGhvZCBvZiBgJyArIG1hcHNBc0NoaWxkcmVuT3duZXJOYW1lICsgJ2AuJzsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICB9CisgICAgICAgICAgImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rp
b24nID8gd2FybmluZyhkaWRXYXJuQWJvdXRNYXBzLCAnVXNpbmcgTWFwcyBhcyBjaGlsZHJlbiBp
cyBub3QgeWV0IGZ1bGx5IHN1cHBvcnRlZC4gSXQgaXMgYW4gJyArICdleHBlcmltZW50YWwgZmVh
dHVyZSB0aGF0IG1pZ2h0IGJlIHJlbW92ZWQuIENvbnZlcnQgaXQgdG8gYSAnICsgJ3NlcXVlbmNl
IC8gaXRlcmFibGUgb2Yga2V5ZWQgUmVhY3RFbGVtZW50cyBpbnN0ZWFkLiVzJywgbWFwc0FzQ2hp
bGRyZW5BZGRlbmR1bSkgOiB2b2lkIDA7CisgICAgICAgICAgZGlkV2FybkFib3V0TWFwcyA9IHRy
dWU7CisgICAgICAgIH0KKyAgICAgICAgLy8gSXRlcmF0b3Igd2lsbCBwcm92aWRlIGVudHJ5IFtr
LHZdIHR1cGxlcyByYXRoZXIgdGhhbiB2YWx1ZXMuCisgICAgICAgIHdoaWxlICghKHN0ZXAgPSBp
dGVyYXRvci5uZXh0KCkpLmRvbmUpIHsKKyAgICAgICAgICB2YXIgZW50cnkgPSBzdGVwLnZhbHVl
OworICAgICAgICAgIGlmIChlbnRyeSkgeworICAgICAgICAgICAgY2hpbGQgPSBlbnRyeVsxXTsK
KyAgICAgICAgICAgIG5leHROYW1lID0gbmV4dE5hbWVQcmVmaXggKyBLZXlFc2NhcGVVdGlscy5l
c2NhcGUoZW50cnlbMF0pICsgU1VCU0VQQVJBVE9SICsgZ2V0Q29tcG9uZW50S2V5KGNoaWxkLCAw
KTsKKyAgICAgICAgICAgIHN1YnRyZWVDb3VudCArPSB0cmF2ZXJzZUFsbENoaWxkcmVuSW1wbChj
aGlsZCwgbmV4dE5hbWUsIGNhbGxiYWNrLCB0cmF2ZXJzZUNvbnRleHQpOworICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgfQorICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ29iamVjdCcpIHsK
KyAgICAgIHZhciBhZGRlbmR1bSA9ICcnOworICAgICAgaWYgKCJkZXZlbG9wbWVudCIgIT09ICdw
cm9kdWN0aW9uJykgeworICAgICAgICBhZGRlbmR1bSA9ICcgSWYgeW91IG1lYW50IHRvIHJlbmRl
ciBhIGNvbGxlY3Rpb24gb2YgY2hpbGRyZW4sIHVzZSBhbiBhcnJheSAnICsgJ2luc3RlYWQgb3Ig
d3JhcCB0aGUgb2JqZWN0IHVzaW5nIGNyZWF0ZUZyYWdtZW50KG9iamVjdCkgZnJvbSB0aGUgJyAr
ICdSZWFjdCBhZGQtb25zLic7CisgICAgICAgIGlmIChjaGlsZHJlbi5faXNSZWFjdEVsZW1lbnQp
IHsKKyAgICAgICAgICBhZGRlbmR1bSA9ICcgSXQgbG9va3MgbGlrZSB5b3VcJ3JlIHVzaW5nIGFu
IGVsZW1lbnQgY3JlYXRlZCBieSBhIGRpZmZlcmVudCAnICsgJ3ZlcnNpb24gb2YgUmVhY3QuIE1h
a2Ugc3VyZSB0byB1c2Ugb25seSBvbmUgY29weSBvZiBSZWFjdC4nOworICAgICAgICB9CisgICAg
ICAgIGlmIChSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50KSB7CisgICAgICAgICAgdmFyIG5hbWUg
PSBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50LmdldE5hbWUoKTsKKyAgICAgICAgICBpZiAobmFt
ZSkgeworICAgICAgICAgICAgYWRkZW5kdW0gKz0gJyBDaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBv
ZiBgJyArIG5hbWUgKyAnYC4nOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAg
ICAgdmFyIGNoaWxkcmVuU3RyaW5nID0gU3RyaW5nKGNoaWxkcmVuKTsKKyAgICAgICFmYWxzZSA/
ICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ09iamVj
dHMgYXJlIG5vdCB2YWxpZCBhcyBhIFJlYWN0IGNoaWxkIChmb3VuZDogJXMpLiVzJywgY2hpbGRy
ZW5TdHJpbmcgPT09ICdbb2JqZWN0IE9iamVjdF0nID8gJ29iamVjdCB3aXRoIGtleXMgeycgKyBP
YmplY3Qua2V5cyhjaGlsZHJlbikuam9pbignLCAnKSArICd9JyA6IGNoaWxkcmVuU3RyaW5nLCBh
ZGRlbmR1bSkgOiBfcHJvZEludmFyaWFudCgnMzEnLCBjaGlsZHJlblN0cmluZyA9PT0gJ1tvYmpl
Y3QgT2JqZWN0XScgPyAnb2JqZWN0IHdpdGgga2V5cyB7JyArIE9iamVjdC5rZXlzKGNoaWxkcmVu
KS5qb2luKCcsICcpICsgJ30nIDogY2hpbGRyZW5TdHJpbmcsIGFkZGVuZHVtKSA6IHZvaWQgMDsK
KyAgICB9CisgIH0KKworICByZXR1cm4gc3VidHJlZUNvdW50OworfQorCisvKioKKyAqIFRyYXZl
cnNlcyBjaGlsZHJlbiB0aGF0IGFyZSB0eXBpY2FsbHkgc3BlY2lmaWVkIGFzIGBwcm9wcy5jaGls
ZHJlbmAsIGJ1dAorICogbWlnaHQgYWxzbyBiZSBzcGVjaWZpZWQgdGhyb3VnaCBhdHRyaWJ1dGVz
OgorICoKKyAqIC0gYHRyYXZlcnNlQWxsQ2hpbGRyZW4odGhpcy5wcm9wcy5jaGlsZHJlbiwgLi4u
KWAKKyAqIC0gYHRyYXZlcnNlQWxsQ2hpbGRyZW4odGhpcy5wcm9wcy5sZWZ0UGFuZWxDaGlsZHJl
biwgLi4uKWAKKyAqCisgKiBUaGUgYHRyYXZlcnNlQ29udGV4dGAgaXMgYW4gb3B0aW9uYWwgYXJn
dW1lbnQgdGhhdCBpcyBwYXNzZWQgdGhyb3VnaCB0aGUKKyAqIGVudGlyZSB0cmF2ZXJzYWwuIEl0
IGNhbiBiZSB1c2VkIHRvIHN0b3JlIGFjY3VtdWxhdGlvbnMgb3IgYW55dGhpbmcgZWxzZSB0aGF0
CisgKiB0aGUgY2FsbGJhY2sgbWlnaHQgZmluZCByZWxldmFudC4KKyAqCisgKiBAcGFyYW0gez8q
fSBjaGlsZHJlbiBDaGlsZHJlbiB0cmVlIG9iamVjdC4KKyAqIEBwYXJhbSB7IWZ1bmN0aW9ufSBj
YWxsYmFjayBUbyBpbnZva2UgdXBvbiB0cmF2ZXJzaW5nIGVhY2ggY2hpbGQuCisgKiBAcGFyYW0g
ez8qfSB0cmF2ZXJzZUNvbnRleHQgQ29udGV4dCBmb3IgdHJhdmVyc2FsLgorICogQHJldHVybiB7
IW51bWJlcn0gVGhlIG51bWJlciBvZiBjaGlsZHJlbiBpbiB0aGlzIHN1YnRyZWUuCisgKi8KK2Z1
bmN0aW9uIHRyYXZlcnNlQWxsQ2hpbGRyZW4oY2hpbGRyZW4sIGNhbGxiYWNrLCB0cmF2ZXJzZUNv
bnRleHQpIHsKKyAgaWYgKGNoaWxkcmVuID09IG51bGwpIHsKKyAgICByZXR1cm4gMDsKKyAgfQor
CisgIHJldHVybiB0cmF2ZXJzZUFsbENoaWxkcmVuSW1wbChjaGlsZHJlbiwgJycsIGNhbGxiYWNr
LCB0cmF2ZXJzZUNvbnRleHQpOworfQorCittb2R1bGUuZXhwb3J0cyA9IHRyYXZlcnNlQWxsQ2hp
bGRyZW47Cit9LHsiMTQiOjE0LCIxNyI6MTcsIjIiOjIsIjM2IjozNiwiMzkiOjM5LCI0NyI6NDcs
IjQ5Ijo0OX1dLDQyOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICog
Q29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4KKyAqIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNE
LXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlCisgKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qg
ZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnQKKyAqIG9m
IHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNh
bWUgZGlyZWN0b3J5LgorICoKKyAqLworCisvKiBnbG9iYWwgaGFzT3duUHJvcGVydHk6dHJ1ZSAq
LworCisndXNlIHN0cmljdCc7CisKK3ZhciBfcHJvZEludmFyaWFudCA9IF9kZXJlcV8oMzkpLAor
ICAgIF9hc3NpZ24gPSBfZGVyZXFfKDUwKTsKKwordmFyIGludmFyaWFudCA9IF9kZXJlcV8oNDcp
OwordmFyIGhhc093blByb3BlcnR5ID0ge30uaGFzT3duUHJvcGVydHk7CisKK2Z1bmN0aW9uIHNo
YWxsb3dDb3B5KHgpIHsKKyAgaWYgKEFycmF5LmlzQXJyYXkoeCkpIHsKKyAgICByZXR1cm4geC5j
b25jYXQoKTsKKyAgfSBlbHNlIGlmICh4ICYmIHR5cGVvZiB4ID09PSAnb2JqZWN0JykgeworICAg
IHJldHVybiBfYXNzaWduKG5ldyB4LmNvbnN0cnVjdG9yKCksIHgpOworICB9IGVsc2UgeworICAg
IHJldHVybiB4OworICB9Cit9CisKK3ZhciBDT01NQU5EX1BVU0ggPSAnJHB1c2gnOwordmFyIENP
TU1BTkRfVU5TSElGVCA9ICckdW5zaGlmdCc7Cit2YXIgQ09NTUFORF9TUExJQ0UgPSAnJHNwbGlj
ZSc7Cit2YXIgQ09NTUFORF9TRVQgPSAnJHNldCc7Cit2YXIgQ09NTUFORF9NRVJHRSA9ICckbWVy
Z2UnOwordmFyIENPTU1BTkRfQVBQTFkgPSAnJGFwcGx5JzsKKwordmFyIEFMTF9DT01NQU5EU19M
SVNUID0gW0NPTU1BTkRfUFVTSCwgQ09NTUFORF9VTlNISUZULCBDT01NQU5EX1NQTElDRSwgQ09N
TUFORF9TRVQsIENPTU1BTkRfTUVSR0UsIENPTU1BTkRfQVBQTFldOworCit2YXIgQUxMX0NPTU1B
TkRTX1NFVCA9IHt9OworCitBTExfQ09NTUFORFNfTElTVC5mb3JFYWNoKGZ1bmN0aW9uIChjb21t
YW5kKSB7CisgIEFMTF9DT01NQU5EU19TRVRbY29tbWFuZF0gPSB0cnVlOworfSk7CisKK2Z1bmN0
aW9uIGludmFyaWFudEFycmF5Q2FzZSh2YWx1ZSwgc3BlYywgY29tbWFuZCkgeworICAhQXJyYXku
aXNBcnJheSh2YWx1ZSkgPyAiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlh
bnQoZmFsc2UsICd1cGRhdGUoKTogZXhwZWN0ZWQgdGFyZ2V0IG9mICVzIHRvIGJlIGFuIGFycmF5
OyBnb3QgJXMuJywgY29tbWFuZCwgdmFsdWUpIDogX3Byb2RJbnZhcmlhbnQoJzEnLCBjb21tYW5k
LCB2YWx1ZSkgOiB2b2lkIDA7CisgIHZhciBzcGVjVmFsdWUgPSBzcGVjW2NvbW1hbmRdOworICAh
QXJyYXkuaXNBcnJheShzcGVjVmFsdWUpID8gImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24n
ID8gaW52YXJpYW50KGZhbHNlLCAndXBkYXRlKCk6IGV4cGVjdGVkIHNwZWMgb2YgJXMgdG8gYmUg
YW4gYXJyYXk7IGdvdCAlcy4gRGlkIHlvdSBmb3JnZXQgdG8gd3JhcCB5b3VyIHBhcmFtZXRlciBp
biBhbiBhcnJheT8nLCBjb21tYW5kLCBzcGVjVmFsdWUpIDogX3Byb2RJbnZhcmlhbnQoJzInLCBj
b21tYW5kLCBzcGVjVmFsdWUpIDogdm9pZCAwOworfQorCisvKioKKyAqIFJldHVybnMgYSB1cGRh
dGVkIHNoYWxsb3cgY29weSBvZiBhbiBvYmplY3Qgd2l0aG91dCBtdXRhdGluZyB0aGUgb3JpZ2lu
YWwuCisgKiBTZWUgaHR0cHM6Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3QvZG9jcy91cGRhdGUu
aHRtbCBmb3IgZGV0YWlscy4KKyAqLworZnVuY3Rpb24gdXBkYXRlKHZhbHVlLCBzcGVjKSB7Cisg
ICEodHlwZW9mIHNwZWMgPT09ICdvYmplY3QnKSA/ICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0
aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ3VwZGF0ZSgpOiBZb3UgcHJvdmlkZWQgYSBrZXkgcGF0
aCB0byB1cGRhdGUoKSB0aGF0IGRpZCBub3QgY29udGFpbiBvbmUgb2YgJXMuIERpZCB5b3UgZm9y
Z2V0IHRvIGluY2x1ZGUgeyVzOiAuLi59PycsIEFMTF9DT01NQU5EU19MSVNULmpvaW4oJywgJyks
IENPTU1BTkRfU0VUKSA6IF9wcm9kSW52YXJpYW50KCczJywgQUxMX0NPTU1BTkRTX0xJU1Quam9p
bignLCAnKSwgQ09NTUFORF9TRVQpIDogdm9pZCAwOworCisgIGlmIChoYXNPd25Qcm9wZXJ0eS5j
YWxsKHNwZWMsIENPTU1BTkRfU0VUKSkgeworICAgICEoT2JqZWN0LmtleXMoc3BlYykubGVuZ3Ro
ID09PSAxKSA/ICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxz
ZSwgJ0Nhbm5vdCBoYXZlIG1vcmUgdGhhbiBvbmUga2V5IGluIGFuIG9iamVjdCB3aXRoICVzJywg
Q09NTUFORF9TRVQpIDogX3Byb2RJbnZhcmlhbnQoJzQnLCBDT01NQU5EX1NFVCkgOiB2b2lkIDA7
CisKKyAgICByZXR1cm4gc3BlY1tDT01NQU5EX1NFVF07CisgIH0KKworICB2YXIgbmV4dFZhbHVl
ID0gc2hhbGxvd0NvcHkodmFsdWUpOworCisgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHNwZWMs
IENPTU1BTkRfTUVSR0UpKSB7CisgICAgdmFyIG1lcmdlT2JqID0gc3BlY1tDT01NQU5EX01FUkdF
XTsKKyAgICAhKG1lcmdlT2JqICYmIHR5cGVvZiBtZXJnZU9iaiA9PT0gJ29iamVjdCcpID8gImRl
dmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAndXBkYXRlKCk6
ICVzIGV4cGVjdHMgYSBzcGVjIG9mIHR5cGUgXCdvYmplY3RcJzsgZ290ICVzJywgQ09NTUFORF9N
RVJHRSwgbWVyZ2VPYmopIDogX3Byb2RJbnZhcmlhbnQoJzUnLCBDT01NQU5EX01FUkdFLCBtZXJn
ZU9iaikgOiB2b2lkIDA7CisgICAgIShuZXh0VmFsdWUgJiYgdHlwZW9mIG5leHRWYWx1ZSA9PT0g
J29iamVjdCcpID8gImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZh
bHNlLCAndXBkYXRlKCk6ICVzIGV4cGVjdHMgYSB0YXJnZXQgb2YgdHlwZSBcJ29iamVjdFwnOyBn
b3QgJXMnLCBDT01NQU5EX01FUkdFLCBuZXh0VmFsdWUpIDogX3Byb2RJbnZhcmlhbnQoJzYnLCBD
T01NQU5EX01FUkdFLCBuZXh0VmFsdWUpIDogdm9pZCAwOworICAgIF9hc3NpZ24obmV4dFZhbHVl
LCBzcGVjW0NPTU1BTkRfTUVSR0VdKTsKKyAgfQorCisgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxs
KHNwZWMsIENPTU1BTkRfUFVTSCkpIHsKKyAgICBpbnZhcmlhbnRBcnJheUNhc2UodmFsdWUsIHNw
ZWMsIENPTU1BTkRfUFVTSCk7CisgICAgc3BlY1tDT01NQU5EX1BVU0hdLmZvckVhY2goZnVuY3Rp
b24gKGl0ZW0pIHsKKyAgICAgIG5leHRWYWx1ZS5wdXNoKGl0ZW0pOworICAgIH0pOworICB9CisK
KyAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoc3BlYywgQ09NTUFORF9VTlNISUZUKSkgeworICAg
IGludmFyaWFudEFycmF5Q2FzZSh2YWx1ZSwgc3BlYywgQ09NTUFORF9VTlNISUZUKTsKKyAgICBz
cGVjW0NPTU1BTkRfVU5TSElGVF0uZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkgeworICAgICAgbmV4
dFZhbHVlLnVuc2hpZnQoaXRlbSk7CisgICAgfSk7CisgIH0KKworICBpZiAoaGFzT3duUHJvcGVy
dHkuY2FsbChzcGVjLCBDT01NQU5EX1NQTElDRSkpIHsKKyAgICAhQXJyYXkuaXNBcnJheSh2YWx1
ZSkgPyAiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdF
eHBlY3RlZCAlcyB0YXJnZXQgdG8gYmUgYW4gYXJyYXk7IGdvdCAlcycsIENPTU1BTkRfU1BMSUNF
LCB2YWx1ZSkgOiBfcHJvZEludmFyaWFudCgnNycsIENPTU1BTkRfU1BMSUNFLCB2YWx1ZSkgOiB2
b2lkIDA7CisgICAgIUFycmF5LmlzQXJyYXkoc3BlY1tDT01NQU5EX1NQTElDRV0pID8gImRldmVs
b3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAndXBkYXRlKCk6IGV4
cGVjdGVkIHNwZWMgb2YgJXMgdG8gYmUgYW4gYXJyYXkgb2YgYXJyYXlzOyBnb3QgJXMuIERpZCB5
b3UgZm9yZ2V0IHRvIHdyYXAgeW91ciBwYXJhbWV0ZXJzIGluIGFuIGFycmF5PycsIENPTU1BTkRf
U1BMSUNFLCBzcGVjW0NPTU1BTkRfU1BMSUNFXSkgOiBfcHJvZEludmFyaWFudCgnOCcsIENPTU1B
TkRfU1BMSUNFLCBzcGVjW0NPTU1BTkRfU1BMSUNFXSkgOiB2b2lkIDA7CisgICAgc3BlY1tDT01N
QU5EX1NQTElDRV0uZm9yRWFjaChmdW5jdGlvbiAoYXJncykgeworICAgICAgIUFycmF5LmlzQXJy
YXkoYXJncykgPyAiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFs
c2UsICd1cGRhdGUoKTogZXhwZWN0ZWQgc3BlYyBvZiAlcyB0byBiZSBhbiBhcnJheSBvZiBhcnJh
eXM7IGdvdCAlcy4gRGlkIHlvdSBmb3JnZXQgdG8gd3JhcCB5b3VyIHBhcmFtZXRlcnMgaW4gYW4g
YXJyYXk/JywgQ09NTUFORF9TUExJQ0UsIHNwZWNbQ09NTUFORF9TUExJQ0VdKSA6IF9wcm9kSW52
YXJpYW50KCc4JywgQ09NTUFORF9TUExJQ0UsIHNwZWNbQ09NTUFORF9TUExJQ0VdKSA6IHZvaWQg
MDsKKyAgICAgIG5leHRWYWx1ZS5zcGxpY2UuYXBwbHkobmV4dFZhbHVlLCBhcmdzKTsKKyAgICB9
KTsKKyAgfQorCisgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHNwZWMsIENPTU1BTkRfQVBQTFkp
KSB7CisgICAgISh0eXBlb2Ygc3BlY1tDT01NQU5EX0FQUExZXSA9PT0gJ2Z1bmN0aW9uJykgPyAi
ZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICd1cGRhdGUo
KTogZXhwZWN0ZWQgc3BlYyBvZiAlcyB0byBiZSBhIGZ1bmN0aW9uOyBnb3QgJXMuJywgQ09NTUFO
RF9BUFBMWSwgc3BlY1tDT01NQU5EX0FQUExZXSkgOiBfcHJvZEludmFyaWFudCgnOScsIENPTU1B
TkRfQVBQTFksIHNwZWNbQ09NTUFORF9BUFBMWV0pIDogdm9pZCAwOworICAgIG5leHRWYWx1ZSA9
IHNwZWNbQ09NTUFORF9BUFBMWV0obmV4dFZhbHVlKTsKKyAgfQorCisgIGZvciAodmFyIGsgaW4g
c3BlYykgeworICAgIGlmICghKEFMTF9DT01NQU5EU19TRVQuaGFzT3duUHJvcGVydHkoaykgJiYg
QUxMX0NPTU1BTkRTX1NFVFtrXSkpIHsKKyAgICAgIG5leHRWYWx1ZVtrXSA9IHVwZGF0ZSh2YWx1
ZVtrXSwgc3BlY1trXSk7CisgICAgfQorICB9CisKKyAgcmV0dXJuIG5leHRWYWx1ZTsKK30KKwor
bW9kdWxlLmV4cG9ydHMgPSB1cGRhdGU7Cit9LHsiMzkiOjM5LCI0NyI6NDcsIjUwIjo1MH1dLDQz
OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKKyd1c2Ugc3RyaWN0JzsKKworLyoq
CisgKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4KKyAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRl
ciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlCisgKiBMSUNFTlNFIGZpbGUgaW4g
dGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3Jh
bnQKKyAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUg
aW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorICoKKyAqIEB0eXBlY2hlY2tzCisgKi8KKwordmFyIGlu
dmFyaWFudCA9IF9kZXJlcV8oNDcpOworCisvKioKKyAqIFRoZSBDU1NDb3JlIG1vZHVsZSBzcGVj
aWZpZXMgdGhlIEFQSSAoYW5kIGltcGxlbWVudHMgbW9zdCBvZiB0aGUgbWV0aG9kcykKKyAqIHRo
YXQgc2hvdWxkIGJlIHVzZWQgd2hlbiBkZWFsaW5nIHdpdGggdGhlIGRpc3BsYXkgb2YgZWxlbWVu
dHMgKHZpYSB0aGVpcgorICogQ1NTIGNsYXNzZXMgYW5kIHZpc2liaWxpdHkgb24gc2NyZWVuLiBJ
dCBpcyBhbiBBUEkgZm9jdXNlZCBvbiBtdXRhdGluZyB0aGUKKyAqIGRpc3BsYXkgYW5kIG5vdCBy
ZWFkaW5nIGl0IGFzIG5vIGxvZ2ljYWwgc3RhdGUgc2hvdWxkIGJlIGVuY29kZWQgaW4gdGhlCisg
KiBkaXNwbGF5IG9mIGVsZW1lbnRzLgorICovCisKKy8qIFNsb3cgaW1wbGVtZW50YXRpb24gZm9y
IGJyb3dzZXJzIHRoYXQgZG9uJ3QgbmF0aXZlbHkgc3VwcG9ydCAubWF0Y2hlcygpICovCitmdW5j
dGlvbiBtYXRjaGVzU2VsZWN0b3JfU0xPVyhlbGVtZW50LCBzZWxlY3RvcikgeworICB2YXIgcm9v
dCA9IGVsZW1lbnQ7CisgIHdoaWxlIChyb290LnBhcmVudE5vZGUpIHsKKyAgICByb290ID0gcm9v
dC5wYXJlbnROb2RlOworICB9CisKKyAgdmFyIGFsbCA9IHJvb3QucXVlcnlTZWxlY3RvckFsbChz
ZWxlY3Rvcik7CisgIHJldHVybiBBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGFsbCwgZWxl
bWVudCkgIT09IC0xOworfQorCit2YXIgQ1NTQ29yZSA9IHsKKworICAvKioKKyAgICogQWRkcyB0
aGUgY2xhc3MgcGFzc2VkIGluIHRvIHRoZSBlbGVtZW50IGlmIGl0IGRvZXNuJ3QgYWxyZWFkeSBo
YXZlIGl0LgorICAgKgorICAgKiBAcGFyYW0ge0RPTUVsZW1lbnR9IGVsZW1lbnQgdGhlIGVsZW1l
bnQgdG8gc2V0IHRoZSBjbGFzcyBvbgorICAgKiBAcGFyYW0ge3N0cmluZ30gY2xhc3NOYW1lIHRo
ZSBDU1MgY2xhc3NOYW1lCisgICAqIEByZXR1cm4ge0RPTUVsZW1lbnR9IHRoZSBlbGVtZW50IHBh
c3NlZCBpbgorICAgKi8KKyAgYWRkQ2xhc3M6IGZ1bmN0aW9uIGFkZENsYXNzKGVsZW1lbnQsIGNs
YXNzTmFtZSkgeworICAgICEhL1xzLy50ZXN0KGNsYXNzTmFtZSkgPyAiZGV2ZWxvcG1lbnQiICE9
PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdDU1NDb3JlLmFkZENsYXNzIHRha2Vz
IG9ubHkgYSBzaW5nbGUgY2xhc3MgbmFtZS4gIiVzIiBjb250YWlucyAnICsgJ211bHRpcGxlIGNs
YXNzZXMuJywgY2xhc3NOYW1lKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7CisKKyAgICBp
ZiAoY2xhc3NOYW1lKSB7CisgICAgICBpZiAoZWxlbWVudC5jbGFzc0xpc3QpIHsKKyAgICAgICAg
ZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSk7CisgICAgICB9IGVsc2UgaWYgKCFDU1ND
b3JlLmhhc0NsYXNzKGVsZW1lbnQsIGNsYXNzTmFtZSkpIHsKKyAgICAgICAgZWxlbWVudC5jbGFz
c05hbWUgPSBlbGVtZW50LmNsYXNzTmFtZSArICcgJyArIGNsYXNzTmFtZTsKKyAgICAgIH0KKyAg
ICB9CisgICAgcmV0dXJuIGVsZW1lbnQ7CisgIH0sCisKKyAgLyoqCisgICAqIFJlbW92ZXMgdGhl
IGNsYXNzIHBhc3NlZCBpbiBmcm9tIHRoZSBlbGVtZW50CisgICAqCisgICAqIEBwYXJhbSB7RE9N
RWxlbWVudH0gZWxlbWVudCB0aGUgZWxlbWVudCB0byBzZXQgdGhlIGNsYXNzIG9uCisgICAqIEBw
YXJhbSB7c3RyaW5nfSBjbGFzc05hbWUgdGhlIENTUyBjbGFzc05hbWUKKyAgICogQHJldHVybiB7
RE9NRWxlbWVudH0gdGhlIGVsZW1lbnQgcGFzc2VkIGluCisgICAqLworICByZW1vdmVDbGFzczog
ZnVuY3Rpb24gcmVtb3ZlQ2xhc3MoZWxlbWVudCwgY2xhc3NOYW1lKSB7CisgICAgISEvXHMvLnRl
c3QoY2xhc3NOYW1lKSA/ICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFu
dChmYWxzZSwgJ0NTU0NvcmUucmVtb3ZlQ2xhc3MgdGFrZXMgb25seSBhIHNpbmdsZSBjbGFzcyBu
YW1lLiAiJXMiIGNvbnRhaW5zICcgKyAnbXVsdGlwbGUgY2xhc3Nlcy4nLCBjbGFzc05hbWUpIDog
aW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDsKKworICAgIGlmIChjbGFzc05hbWUpIHsKKyAgICAg
IGlmIChlbGVtZW50LmNsYXNzTGlzdCkgeworICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5yZW1v
dmUoY2xhc3NOYW1lKTsKKyAgICAgIH0gZWxzZSBpZiAoQ1NTQ29yZS5oYXNDbGFzcyhlbGVtZW50
LCBjbGFzc05hbWUpKSB7CisgICAgICAgIGVsZW1lbnQuY2xhc3NOYW1lID0gZWxlbWVudC5jbGFz
c05hbWUucmVwbGFjZShuZXcgUmVnRXhwKCcoXnxcXHMpJyArIGNsYXNzTmFtZSArICcoPzpcXHN8
JCknLCAnZycpLCAnJDEnKS5yZXBsYWNlKC9ccysvZywgJyAnKSAvLyBtdWx0aXBsZSBzcGFjZXMg
dG8gb25lCisgICAgICAgIC5yZXBsYWNlKC9eXHMqfFxzKiQvZywgJycpOyAvLyB0cmltIHRoZSBl
bmRzCisgICAgICB9CisgICAgfQorICAgIHJldHVybiBlbGVtZW50OworICB9LAorCisgIC8qKgor
ICAgKiBIZWxwZXIgdG8gYWRkIG9yIHJlbW92ZSBhIGNsYXNzIGZyb20gYW4gZWxlbWVudCBiYXNl
ZCBvbiBhIGNvbmRpdGlvbi4KKyAgICoKKyAgICogQHBhcmFtIHtET01FbGVtZW50fSBlbGVtZW50
IHRoZSBlbGVtZW50IHRvIHNldCB0aGUgY2xhc3Mgb24KKyAgICogQHBhcmFtIHtzdHJpbmd9IGNs
YXNzTmFtZSB0aGUgQ1NTIGNsYXNzTmFtZQorICAgKiBAcGFyYW0geyp9IGJvb2wgY29uZGl0aW9u
IHRvIHdoZXRoZXIgdG8gYWRkIG9yIHJlbW92ZSB0aGUgY2xhc3MKKyAgICogQHJldHVybiB7RE9N
RWxlbWVudH0gdGhlIGVsZW1lbnQgcGFzc2VkIGluCisgICAqLworICBjb25kaXRpb25DbGFzczog
ZnVuY3Rpb24gY29uZGl0aW9uQ2xhc3MoZWxlbWVudCwgY2xhc3NOYW1lLCBib29sKSB7CisgICAg
cmV0dXJuIChib29sID8gQ1NTQ29yZS5hZGRDbGFzcyA6IENTU0NvcmUucmVtb3ZlQ2xhc3MpKGVs
ZW1lbnQsIGNsYXNzTmFtZSk7CisgIH0sCisKKyAgLyoqCisgICAqIFRlc3RzIHdoZXRoZXIgdGhl
IGVsZW1lbnQgaGFzIHRoZSBjbGFzcyBzcGVjaWZpZWQuCisgICAqCisgICAqIEBwYXJhbSB7RE9N
Tm9kZXxET01XaW5kb3d9IGVsZW1lbnQgdGhlIGVsZW1lbnQgdG8gY2hlY2sgdGhlIGNsYXNzIG9u
CisgICAqIEBwYXJhbSB7c3RyaW5nfSBjbGFzc05hbWUgdGhlIENTUyBjbGFzc05hbWUKKyAgICog
QHJldHVybiB7Ym9vbGVhbn0gdHJ1ZSBpZiB0aGUgZWxlbWVudCBoYXMgdGhlIGNsYXNzLCBmYWxz
ZSBpZiBub3QKKyAgICovCisgIGhhc0NsYXNzOiBmdW5jdGlvbiBoYXNDbGFzcyhlbGVtZW50LCBj
bGFzc05hbWUpIHsKKyAgICAhIS9ccy8udGVzdChjbGFzc05hbWUpID8gImRldmVsb3BtZW50IiAh
PT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnQ1NTLmhhc0NsYXNzIHRha2VzIG9u
bHkgYSBzaW5nbGUgY2xhc3MgbmFtZS4nKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7Cisg
ICAgaWYgKGVsZW1lbnQuY2xhc3NMaXN0KSB7CisgICAgICByZXR1cm4gISFjbGFzc05hbWUgJiYg
ZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lKTsKKyAgICB9CisgICAgcmV0dXJu
ICgnICcgKyBlbGVtZW50LmNsYXNzTmFtZSArICcgJykuaW5kZXhPZignICcgKyBjbGFzc05hbWUg
KyAnICcpID4gLTE7CisgIH0sCisKKyAgLyoqCisgICAqIFRlc3RzIHdoZXRoZXIgdGhlIGVsZW1l
bnQgbWF0Y2hlcyB0aGUgc2VsZWN0b3Igc3BlY2lmaWVkCisgICAqCisgICAqIEBwYXJhbSB7RE9N
Tm9kZXxET01XaW5kb3d9IGVsZW1lbnQgdGhlIGVsZW1lbnQgdGhhdCB3ZSBhcmUgcXVlcnlpbmcK
KyAgICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yIHRoZSBDU1Mgc2VsZWN0b3IKKyAgICogQHJl
dHVybiB7Ym9vbGVhbn0gdHJ1ZSBpZiB0aGUgZWxlbWVudCBtYXRjaGVzIHRoZSBzZWxlY3Rvciwg
ZmFsc2UgaWYgbm90CisgICAqLworICBtYXRjaGVzU2VsZWN0b3I6IGZ1bmN0aW9uIG1hdGNoZXNT
ZWxlY3RvcihlbGVtZW50LCBzZWxlY3RvcikgeworICAgIHZhciBtYXRjaGVzSW1wbCA9IGVsZW1l
bnQubWF0Y2hlcyB8fCBlbGVtZW50LndlYmtpdE1hdGNoZXNTZWxlY3RvciB8fCBlbGVtZW50Lm1v
ek1hdGNoZXNTZWxlY3RvciB8fCBlbGVtZW50Lm1zTWF0Y2hlc1NlbGVjdG9yIHx8IGZ1bmN0aW9u
IChzKSB7CisgICAgICByZXR1cm4gbWF0Y2hlc1NlbGVjdG9yX1NMT1coZWxlbWVudCwgcyk7Cisg
ICAgfTsKKyAgICByZXR1cm4gbWF0Y2hlc0ltcGwuY2FsbChlbGVtZW50LCBzZWxlY3Rvcik7Cisg
IH0KKworfTsKKworbW9kdWxlLmV4cG9ydHMgPSBDU1NDb3JlOworfSx7IjQ3Ijo0N31dLDQ0Oltm
dW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IChjKSAy
MDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNl
bnNlIGZvdW5kIGluIHRoZQorICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBv
ZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50CisgKiBvZiBwYXRlbnQgcmln
aHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9y
eS4KKyAqCisgKi8KKworJ3VzZSBzdHJpY3QnOworCit2YXIgY2FuVXNlRE9NID0gISEodHlwZW9m
IHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmRvY3VtZW50ICYmIHdpbmRvdy5kb2N1
bWVudC5jcmVhdGVFbGVtZW50KTsKKworLyoqCisgKiBTaW1wbGUsIGxpZ2h0d2VpZ2h0IG1vZHVs
ZSBhc3Npc3Rpbmcgd2l0aCB0aGUgZGV0ZWN0aW9uIGFuZCBjb250ZXh0IG9mCisgKiBXb3JrZXIu
IEhlbHBzIGF2b2lkIGNpcmN1bGFyIGRlcGVuZGVuY2llcyBhbmQgYWxsb3dzIGNvZGUgdG8gcmVh
c29uIGFib3V0CisgKiB3aGV0aGVyIG9yIG5vdCB0aGV5IGFyZSBpbiBhIFdvcmtlciwgZXZlbiBp
ZiB0aGV5IG5ldmVyIGluY2x1ZGUgdGhlIG1haW4KKyAqIGBSZWFjdFdvcmtlcmAgZGVwZW5kZW5j
eS4KKyAqLwordmFyIEV4ZWN1dGlvbkVudmlyb25tZW50ID0geworCisgIGNhblVzZURPTTogY2Fu
VXNlRE9NLAorCisgIGNhblVzZVdvcmtlcnM6IHR5cGVvZiBXb3JrZXIgIT09ICd1bmRlZmluZWQn
LAorCisgIGNhblVzZUV2ZW50TGlzdGVuZXJzOiBjYW5Vc2VET00gJiYgISEod2luZG93LmFkZEV2
ZW50TGlzdGVuZXIgfHwgd2luZG93LmF0dGFjaEV2ZW50KSwKKworICBjYW5Vc2VWaWV3cG9ydDog
Y2FuVXNlRE9NICYmICEhd2luZG93LnNjcmVlbiwKKworICBpc0luV29ya2VyOiAhY2FuVXNlRE9N
IC8vIEZvciBub3csIHRoaXMgaXMgdHJ1ZSAtIG1pZ2h0IGNoYW5nZSBpbiB0aGUgZnV0dXJlLgor
Cit9OworCittb2R1bGUuZXhwb3J0cyA9IEV4ZWN1dGlvbkVudmlyb25tZW50OworfSx7fV0sNDU6
W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpeworInVzZSBzdHJpY3QiOworCisvKioK
KyAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLgorICogQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVy
IHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0
aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFu
dAorICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBp
biB0aGUgc2FtZSBkaXJlY3RvcnkuCisgKgorICogCisgKi8KKworZnVuY3Rpb24gbWFrZUVtcHR5
RnVuY3Rpb24oYXJnKSB7CisgIHJldHVybiBmdW5jdGlvbiAoKSB7CisgICAgcmV0dXJuIGFyZzsK
KyAgfTsKK30KKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIGFjY2VwdHMgYW5kIGRpc2NhcmRzIGlu
cHV0czsgaXQgaGFzIG5vIHNpZGUgZWZmZWN0cy4gVGhpcyBpcworICogcHJpbWFyaWx5IHVzZWZ1
bCBpZGlvbWF0aWNhbGx5IGZvciBvdmVycmlkYWJsZSBmdW5jdGlvbiBlbmRwb2ludHMgd2hpY2gK
KyAqIGFsd2F5cyBuZWVkIHRvIGJlIGNhbGxhYmxlLCBzaW5jZSBKUyBsYWNrcyBhIG51bGwtY2Fs
bCBpZGlvbSBhbGEgQ29jb2EuCisgKi8KK3ZhciBlbXB0eUZ1bmN0aW9uID0gZnVuY3Rpb24gZW1w
dHlGdW5jdGlvbigpIHt9OworCitlbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zID0gbWFrZUVtcHR5
RnVuY3Rpb247CitlbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zRmFsc2UgPSBtYWtlRW1wdHlGdW5j
dGlvbihmYWxzZSk7CitlbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zVHJ1ZSA9IG1ha2VFbXB0eUZ1
bmN0aW9uKHRydWUpOworZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc051bGwgPSBtYWtlRW1wdHlG
dW5jdGlvbihudWxsKTsKK2VtcHR5RnVuY3Rpb24udGhhdFJldHVybnNUaGlzID0gZnVuY3Rpb24g
KCkgeworICByZXR1cm4gdGhpczsKK307CitlbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zQXJndW1l
bnQgPSBmdW5jdGlvbiAoYXJnKSB7CisgIHJldHVybiBhcmc7Cit9OworCittb2R1bGUuZXhwb3J0
cyA9IGVtcHR5RnVuY3Rpb247Cit9LHt9XSw0NjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhw
b3J0cyl7CisvKioKKyAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5j
LgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxp
Y2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGUKKyAqIExJQ0VO
U0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRk
aXRpb25hbCBncmFudAorICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBB
VEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisgKgorICovCisKKyd1c2Ugc3RyaWN0
JzsKKwordmFyIGVtcHR5T2JqZWN0ID0ge307CisKK2lmICgiZGV2ZWxvcG1lbnQiICE9PSAncHJv
ZHVjdGlvbicpIHsKKyAgT2JqZWN0LmZyZWV6ZShlbXB0eU9iamVjdCk7Cit9CisKK21vZHVsZS5l
eHBvcnRzID0gZW1wdHlPYmplY3Q7Cit9LHt9XSw0NzpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUs
ZXhwb3J0cyl7CisvKioKKyAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywg
SW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvdXJjZSBjb2RlIGlz
IGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGUKKyAqIExJ
Q0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4g
YWRkaXRpb25hbCBncmFudAorICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhl
IFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisgKgorICovCisKKyd1c2Ugc3Ry
aWN0JzsKKworLyoqCisgKiBVc2UgaW52YXJpYW50KCkgdG8gYXNzZXJ0IHN0YXRlIHdoaWNoIHlv
dXIgcHJvZ3JhbSBhc3N1bWVzIHRvIGJlIHRydWUuCisgKgorICogUHJvdmlkZSBzcHJpbnRmLXN0
eWxlIGZvcm1hdCAob25seSAlcyBpcyBzdXBwb3J0ZWQpIGFuZCBhcmd1bWVudHMKKyAqIHRvIHBy
b3ZpZGUgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCBicm9rZSBhbmQgd2hhdCB5b3Ugd2VyZQorICog
ZXhwZWN0aW5nLgorICoKKyAqIFRoZSBpbnZhcmlhbnQgbWVzc2FnZSB3aWxsIGJlIHN0cmlwcGVk
IGluIHByb2R1Y3Rpb24sIGJ1dCB0aGUgaW52YXJpYW50CisgKiB3aWxsIHJlbWFpbiB0byBlbnN1
cmUgbG9naWMgZG9lcyBub3QgZGlmZmVyIGluIHByb2R1Y3Rpb24uCisgKi8KKwordmFyIHZhbGlk
YXRlRm9ybWF0ID0gZnVuY3Rpb24gdmFsaWRhdGVGb3JtYXQoZm9ybWF0KSB7fTsKKworaWYgKCJk
ZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJykgeworICB2YWxpZGF0ZUZvcm1hdCA9IGZ1bmN0
aW9uIHZhbGlkYXRlRm9ybWF0KGZvcm1hdCkgeworICAgIGlmIChmb3JtYXQgPT09IHVuZGVmaW5l
ZCkgeworICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhcmlhbnQgcmVxdWlyZXMgYW4gZXJyb3Ig
bWVzc2FnZSBhcmd1bWVudCcpOworICAgIH0KKyAgfTsKK30KKworZnVuY3Rpb24gaW52YXJpYW50
KGNvbmRpdGlvbiwgZm9ybWF0LCBhLCBiLCBjLCBkLCBlLCBmKSB7CisgIHZhbGlkYXRlRm9ybWF0
KGZvcm1hdCk7CisKKyAgaWYgKCFjb25kaXRpb24pIHsKKyAgICB2YXIgZXJyb3I7CisgICAgaWYg
KGZvcm1hdCA9PT0gdW5kZWZpbmVkKSB7CisgICAgICBlcnJvciA9IG5ldyBFcnJvcignTWluaWZp
ZWQgZXhjZXB0aW9uIG9jY3VycmVkOyB1c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1l
bnQgJyArICdmb3IgdGhlIGZ1bGwgZXJyb3IgbWVzc2FnZSBhbmQgYWRkaXRpb25hbCBoZWxwZnVs
IHdhcm5pbmdzLicpOworICAgIH0gZWxzZSB7CisgICAgICB2YXIgYXJncyA9IFthLCBiLCBjLCBk
LCBlLCBmXTsKKyAgICAgIHZhciBhcmdJbmRleCA9IDA7CisgICAgICBlcnJvciA9IG5ldyBFcnJv
cihmb3JtYXQucmVwbGFjZSgvJXMvZywgZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gYXJn
c1thcmdJbmRleCsrXTsKKyAgICAgIH0pKTsKKyAgICAgIGVycm9yLm5hbWUgPSAnSW52YXJpYW50
IFZpb2xhdGlvbic7CisgICAgfQorCisgICAgZXJyb3IuZnJhbWVzVG9Qb3AgPSAxOyAvLyB3ZSBk
b24ndCBjYXJlIGFib3V0IGludmFyaWFudCdzIG93biBmcmFtZQorICAgIHRocm93IGVycm9yOwor
ICB9Cit9CisKK21vZHVsZS5leHBvcnRzID0gaW52YXJpYW50OworfSx7fV0sNDg6W2Z1bmN0aW9u
KF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJl
c2VudCwgRmFjZWJvb2ssIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhp
cyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91
bmQgaW4gdGhlCisgKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMg
c291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnQKKyAqIG9mIHBhdGVudCByaWdodHMgY2Fu
IGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorICoK
KyAqIEB0eXBlY2hlY2tzCisgKiAKKyAqLworCisvKmVzbGludC1kaXNhYmxlIG5vLXNlbGYtY29t
cGFyZSAqLworCisndXNlIHN0cmljdCc7CisKK3ZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5w
cm90b3R5cGUuaGFzT3duUHJvcGVydHk7CisKKy8qKgorICogaW5saW5lZCBPYmplY3QuaXMgcG9s
eWZpbGwgdG8gYXZvaWQgcmVxdWlyaW5nIGNvbnN1bWVycyBzaGlwIHRoZWlyIG93bgorICogaHR0
cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZl
cmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2lzCisgKi8KK2Z1bmN0aW9uIGlzKHgsIHkpIHsK
KyAgLy8gU2FtZVZhbHVlIGFsZ29yaXRobQorICBpZiAoeCA9PT0geSkgeworICAgIC8vIFN0ZXBz
IDEtNSwgNy0xMAorICAgIC8vIFN0ZXBzIDYuYi02LmU6ICswICE9IC0wCisgICAgLy8gQWRkZWQg
dGhlIG5vbnplcm8geSBjaGVjayB0byBtYWtlIEZsb3cgaGFwcHksIGJ1dCBpdCBpcyByZWR1bmRh
bnQKKyAgICByZXR1cm4geCAhPT0gMCB8fCB5ICE9PSAwIHx8IDEgLyB4ID09PSAxIC8geTsKKyAg
fSBlbHNlIHsKKyAgICAvLyBTdGVwIDYuYTogTmFOID09IE5hTgorICAgIHJldHVybiB4ICE9PSB4
ICYmIHkgIT09IHk7CisgIH0KK30KKworLyoqCisgKiBQZXJmb3JtcyBlcXVhbGl0eSBieSBpdGVy
YXRpbmcgdGhyb3VnaCBrZXlzIG9uIGFuIG9iamVjdCBhbmQgcmV0dXJuaW5nIGZhbHNlCisgKiB3
aGVuIGFueSBrZXkgaGFzIHZhbHVlcyB3aGljaCBhcmUgbm90IHN0cmljdGx5IGVxdWFsIGJldHdl
ZW4gdGhlIGFyZ3VtZW50cy4KKyAqIFJldHVybnMgdHJ1ZSB3aGVuIHRoZSB2YWx1ZXMgb2YgYWxs
IGtleXMgYXJlIHN0cmljdGx5IGVxdWFsLgorICovCitmdW5jdGlvbiBzaGFsbG93RXF1YWwob2Jq
QSwgb2JqQikgeworICBpZiAoaXMob2JqQSwgb2JqQikpIHsKKyAgICByZXR1cm4gdHJ1ZTsKKyAg
fQorCisgIGlmICh0eXBlb2Ygb2JqQSAhPT0gJ29iamVjdCcgfHwgb2JqQSA9PT0gbnVsbCB8fCB0
eXBlb2Ygb2JqQiAhPT0gJ29iamVjdCcgfHwgb2JqQiA9PT0gbnVsbCkgeworICAgIHJldHVybiBm
YWxzZTsKKyAgfQorCisgIHZhciBrZXlzQSA9IE9iamVjdC5rZXlzKG9iakEpOworICB2YXIga2V5
c0IgPSBPYmplY3Qua2V5cyhvYmpCKTsKKworICBpZiAoa2V5c0EubGVuZ3RoICE9PSBrZXlzQi5s
ZW5ndGgpIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICAvLyBUZXN0IGZvciBBJ3Mga2V5
cyBkaWZmZXJlbnQgZnJvbSBCLgorICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXNBLmxlbmd0aDsg
aSsrKSB7CisgICAgaWYgKCFoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iakIsIGtleXNBW2ldKSB8fCAh
aXMob2JqQVtrZXlzQVtpXV0sIG9iakJba2V5c0FbaV1dKSkgeworICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgfQorCisgIHJldHVybiB0cnVlOworfQorCittb2R1bGUuZXhwb3J0cyA9IHNo
YWxsb3dFcXVhbDsKK30se31dLDQ5OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsK
Ky8qKgorICogQ29weXJpZ2h0IDIwMTQtMjAxNSwgRmFjZWJvb2ssIEluYy4KKyAqIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0
aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlCisgKiBMSUNFTlNFIGZpbGUgaW4gdGhl
IHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnQK
KyAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4g
dGhlIHNhbWUgZGlyZWN0b3J5LgorICoKKyAqLworCisndXNlIHN0cmljdCc7CisKK3ZhciBlbXB0
eUZ1bmN0aW9uID0gX2RlcmVxXyg0NSk7CisKKy8qKgorICogU2ltaWxhciB0byBpbnZhcmlhbnQg
YnV0IG9ubHkgbG9ncyBhIHdhcm5pbmcgaWYgdGhlIGNvbmRpdGlvbiBpcyBub3QgbWV0LgorICog
VGhpcyBjYW4gYmUgdXNlZCB0byBsb2cgaXNzdWVzIGluIGRldmVsb3BtZW50IGVudmlyb25tZW50
cyBpbiBjcml0aWNhbAorICogcGF0aHMuIFJlbW92aW5nIHRoZSBsb2dnaW5nIGNvZGUgZm9yIHBy
b2R1Y3Rpb24gZW52aXJvbm1lbnRzIHdpbGwga2VlcCB0aGUKKyAqIHNhbWUgbG9naWMgYW5kIGZv
bGxvdyB0aGUgc2FtZSBjb2RlIHBhdGhzLgorICovCisKK3ZhciB3YXJuaW5nID0gZW1wdHlGdW5j
dGlvbjsKKworaWYgKCJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJykgeworICAoZnVuY3Rp
b24gKCkgeworICAgIHZhciBwcmludFdhcm5pbmcgPSBmdW5jdGlvbiBwcmludFdhcm5pbmcoZm9y
bWF0KSB7CisgICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFy
cmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5
KyspIHsKKyAgICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07CisgICAgICB9
CisKKyAgICAgIHZhciBhcmdJbmRleCA9IDA7CisgICAgICB2YXIgbWVzc2FnZSA9ICdXYXJuaW5n
OiAnICsgZm9ybWF0LnJlcGxhY2UoLyVzL2csIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJu
IGFyZ3NbYXJnSW5kZXgrK107CisgICAgICB9KTsKKyAgICAgIGlmICh0eXBlb2YgY29uc29sZSAh
PT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTsKKyAgICAg
IH0KKyAgICAgIHRyeSB7CisgICAgICAgIC8vIC0tLSBXZWxjb21lIHRvIGRlYnVnZ2luZyBSZWFj
dCAtLS0KKyAgICAgICAgLy8gVGhpcyBlcnJvciB3YXMgdGhyb3duIGFzIGEgY29udmVuaWVuY2Ug
c28gdGhhdCB5b3UgY2FuIHVzZSB0aGlzIHN0YWNrCisgICAgICAgIC8vIHRvIGZpbmQgdGhlIGNh
bGxzaXRlIHRoYXQgY2F1c2VkIHRoaXMgd2FybmluZyB0byBmaXJlLgorICAgICAgICB0aHJvdyBu
ZXcgRXJyb3IobWVzc2FnZSk7CisgICAgICB9IGNhdGNoICh4KSB7fQorICAgIH07CisKKyAgICB3
YXJuaW5nID0gZnVuY3Rpb24gd2FybmluZyhjb25kaXRpb24sIGZvcm1hdCkgeworICAgICAgaWYg
KGZvcm1hdCA9PT0gdW5kZWZpbmVkKSB7CisgICAgICAgIHRocm93IG5ldyBFcnJvcignYHdhcm5p
bmcoY29uZGl0aW9uLCBmb3JtYXQsIC4uLmFyZ3MpYCByZXF1aXJlcyBhIHdhcm5pbmcgJyArICdt
ZXNzYWdlIGFyZ3VtZW50Jyk7CisgICAgICB9CisKKyAgICAgIGlmIChmb3JtYXQuaW5kZXhPZign
RmFpbGVkIENvbXBvc2l0ZSBwcm9wVHlwZTogJykgPT09IDApIHsKKyAgICAgICAgcmV0dXJuOyAv
LyBJZ25vcmUgQ29tcG9zaXRlQ29tcG9uZW50IHByb3B0eXBlIGNoZWNrLgorICAgICAgfQorCisg
ICAgICBpZiAoIWNvbmRpdGlvbikgeworICAgICAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50
cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShfbGVuMiA+IDIgPyBfbGVuMiAtIDIgOiAwKSwgX2tleTIg
PSAyOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7CisgICAgICAgICAgYXJnc1tfa2V5MiAtIDJd
ID0gYXJndW1lbnRzW19rZXkyXTsKKyAgICAgICAgfQorCisgICAgICAgIHByaW50V2FybmluZy5h
cHBseSh1bmRlZmluZWQsIFtmb3JtYXRdLmNvbmNhdChhcmdzKSk7CisgICAgICB9CisgICAgfTsK
KyAgfSkoKTsKK30KKworbW9kdWxlLmV4cG9ydHMgPSB3YXJuaW5nOworfSx7IjQ1Ijo0NX1dLDUw
OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKKy8qCitvYmplY3QtYXNzaWduCiso
YykgU2luZHJlIFNvcmh1cworQGxpY2Vuc2UgTUlUCisqLworCisndXNlIHN0cmljdCc7CisvKiBl
c2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqLwordmFyIGdldE93blByb3BlcnR5U3ltYm9s
cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7Cit2YXIgaGFzT3duUHJvcGVydHkgPSBP
YmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5OwordmFyIHByb3BJc0VudW1lcmFibGUgPSBP
YmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlOworCitmdW5jdGlvbiB0b09iamVj
dCh2YWwpIHsKKyAgICBpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSB7Cisg
ICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxl
ZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkJyk7CisgICAgfQorCisgICAgcmV0dXJuIE9iamVjdCh2
YWwpOworfQorCitmdW5jdGlvbiBzaG91bGRVc2VOYXRpdmUoKSB7CisgICAgdHJ5IHsKKyAgICAg
ICAgaWYgKCFPYmplY3QuYXNzaWduKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKworICAgICAgICAvLyBEZXRlY3QgYnVnZ3kgcHJvcGVydHkgZW51bWVyYXRpb24gb3Jk
ZXIgaW4gb2xkZXIgVjggdmVyc2lvbnMuCisKKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLmNocm9t
aXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9NDExOAorICAgICAgICB2YXIgdGVzdDEgPSBu
ZXcgU3RyaW5nKCdhYmMnKTsgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3LXdyYXBwZXJz
CisgICAgICAgIHRlc3QxWzVdID0gJ2RlJzsKKyAgICAgICAgaWYgKE9iamVjdC5nZXRPd25Qcm9w
ZXJ0eU5hbWVzKHRlc3QxKVswXSA9PT0gJzUnKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKworICAgICAgICAvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avdjgv
aXNzdWVzL2RldGFpbD9pZD0zMDU2CisgICAgICAgIHZhciB0ZXN0MiA9IHt9OworICAgICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IDEwOyBpKyspIHsKKyAgICAgICAgICAgIHRlc3QyWydfJyArIFN0
cmluZy5mcm9tQ2hhckNvZGUoaSldID0gaTsKKyAgICAgICAgfQorICAgICAgICB2YXIgb3JkZXIy
ID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdDIpLm1hcChmdW5jdGlvbiAobikgewor
ICAgICAgICAgICAgcmV0dXJuIHRlc3QyW25dOworICAgICAgICB9KTsKKyAgICAgICAgaWYgKG9y
ZGVyMi5qb2luKCcnKSAhPT0gJzAxMjM0NTY3ODknKSB7CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KKworICAgICAgICAvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Av
djgvaXNzdWVzL2RldGFpbD9pZD0zMDU2CisgICAgICAgIHZhciB0ZXN0MyA9IHt9OworICAgICAg
ICAnYWJjZGVmZ2hpamtsbW5vcHFyc3QnLnNwbGl0KCcnKS5mb3JFYWNoKGZ1bmN0aW9uIChsZXR0
ZXIpIHsKKyAgICAgICAgICAgIHRlc3QzW2xldHRlcl0gPSBsZXR0ZXI7CisgICAgICAgIH0pOwor
ICAgICAgICBpZiAoT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSwgdGVzdDMpKS5qb2luKCcn
KSAhPT0KKyAgICAgICAgICAgICAgICAnYWJjZGVmZ2hpamtsbW5vcHFyc3QnKSB7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9IGNhdGNoIChlcnIpIHsKKyAgICAgICAgLy8gV2UgZG9uJ3QgZXhwZWN0IGFueSBvZiB0aGUg
YWJvdmUgdG8gdGhyb3csIGJ1dCBiZXR0ZXIgdG8gYmUgc2FmZS4KKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KK30KKworbW9kdWxlLmV4cG9ydHMgPSBzaG91bGRVc2VOYXRpdmUoKSA/IE9i
amVjdC5hc3NpZ24gOiBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHsKKyAgICB2YXIgZnJvbTsK
KyAgICB2YXIgdG8gPSB0b09iamVjdCh0YXJnZXQpOworICAgIHZhciBzeW1ib2xzOworCisgICAg
Zm9yICh2YXIgcyA9IDE7IHMgPCBhcmd1bWVudHMubGVuZ3RoOyBzKyspIHsKKyAgICAgICAgZnJv
bSA9IE9iamVjdChhcmd1bWVudHNbc10pOworCisgICAgICAgIGZvciAodmFyIGtleSBpbiBmcm9t
KSB7CisgICAgICAgICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChmcm9tLCBrZXkpKSB7Cisg
ICAgICAgICAgICAgICAgdG9ba2V5XSA9IGZyb21ba2V5XTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIGlmIChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsKKyAgICAgICAgICAg
IHN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZnJvbSk7CisgICAgICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IHN5bWJvbHMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBp
ZiAocHJvcElzRW51bWVyYWJsZS5jYWxsKGZyb20sIHN5bWJvbHNbaV0pKSB7CisgICAgICAgICAg
ICAgICAgICAgIHRvW3N5bWJvbHNbaV1dID0gZnJvbVtzeW1ib2xzW2ldXTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdG87
Cit9OworCit9LHt9XSw1MTpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7CisvKioK
KyAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuCisgKiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhl
IEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZQorICogTElDRU5TRSBmaWxlIGluIHRoZSBy
b290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50Cisg
KiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRo
ZSBzYW1lIGRpcmVjdG9yeS4KKyAqLworCisndXNlIHN0cmljdCc7CisKK2lmICgiZGV2ZWxvcG1l
bnQiICE9PSAncHJvZHVjdGlvbicpIHsKKyAgdmFyIGludmFyaWFudCA9IF9kZXJlcV8oNDcpOwor
ICB2YXIgd2FybmluZyA9IF9kZXJlcV8oNDkpOworICB2YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQg
PSBfZGVyZXFfKDU0KTsKKyAgdmFyIGxvZ2dlZFR5cGVGYWlsdXJlcyA9IHt9OworfQorCisvKioK
KyAqIEFzc2VydCB0aGF0IHRoZSB2YWx1ZXMgbWF0Y2ggd2l0aCB0aGUgdHlwZSBzcGVjcy4KKyAq
IEVycm9yIG1lc3NhZ2VzIGFyZSBtZW1vcml6ZWQgYW5kIHdpbGwgb25seSBiZSBzaG93biBvbmNl
LgorICoKKyAqIEBwYXJhbSB7b2JqZWN0fSB0eXBlU3BlY3MgTWFwIG9mIG5hbWUgdG8gYSBSZWFj
dFByb3BUeXBlCisgKiBAcGFyYW0ge29iamVjdH0gdmFsdWVzIFJ1bnRpbWUgdmFsdWVzIHRoYXQg
bmVlZCB0byBiZSB0eXBlLWNoZWNrZWQKKyAqIEBwYXJhbSB7c3RyaW5nfSBsb2NhdGlvbiBlLmcu
ICJwcm9wIiwgImNvbnRleHQiLCAiY2hpbGQgY29udGV4dCIKKyAqIEBwYXJhbSB7c3RyaW5nfSBj
b21wb25lbnROYW1lIE5hbWUgb2YgdGhlIGNvbXBvbmVudCBmb3IgZXJyb3IgbWVzc2FnZXMuCisg
KiBAcGFyYW0gez9GdW5jdGlvbn0gZ2V0U3RhY2sgUmV0dXJucyB0aGUgY29tcG9uZW50IHN0YWNr
LgorICogQHByaXZhdGUKKyAqLworZnVuY3Rpb24gY2hlY2tQcm9wVHlwZXModHlwZVNwZWNzLCB2
YWx1ZXMsIGxvY2F0aW9uLCBjb21wb25lbnROYW1lLCBnZXRTdGFjaykgeworICBpZiAoImRldmVs
b3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nKSB7CisgICAgZm9yICh2YXIgdHlwZVNwZWNOYW1lIGlu
IHR5cGVTcGVjcykgeworICAgICAgaWYgKHR5cGVTcGVjcy5oYXNPd25Qcm9wZXJ0eSh0eXBlU3Bl
Y05hbWUpKSB7CisgICAgICAgIHZhciBlcnJvcjsKKyAgICAgICAgLy8gUHJvcCB0eXBlIHZhbGlk
YXRpb24gbWF5IHRocm93LiBJbiBjYXNlIHRoZXkgZG8sIHdlIGRvbid0IHdhbnQgdG8KKyAgICAg
ICAgLy8gZmFpbCB0aGUgcmVuZGVyIHBoYXNlIHdoZXJlIGl0IGRpZG4ndCBmYWlsIGJlZm9yZS4g
U28gd2UgbG9nIGl0LgorICAgICAgICAvLyBBZnRlciB0aGVzZSBoYXZlIGJlZW4gY2xlYW5lZCB1
cCwgd2UnbGwgbGV0IHRoZW0gdGhyb3cuCisgICAgICAgIHRyeSB7CisgICAgICAgICAgLy8gVGhp
cyBpcyBpbnRlbnRpb25hbGx5IGFuIGludmFyaWFudCB0aGF0IGdldHMgY2F1Z2h0LiBJdCdzIHRo
ZSBzYW1lCisgICAgICAgICAgLy8gYmVoYXZpb3IgYXMgd2l0aG91dCB0aGlzIHN0YXRlbWVudCBl
eGNlcHQgd2l0aCBhIGJldHRlciBtZXNzYWdlLgorICAgICAgICAgIGludmFyaWFudCh0eXBlb2Yg
dHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gPT09ICdmdW5jdGlvbicsICclczogJXMgdHlwZSBgJXNg
IGlzIGludmFsaWQ7IGl0IG11c3QgYmUgYSBmdW5jdGlvbiwgdXN1YWxseSBmcm9tICcgKyAnUmVh
Y3QuUHJvcFR5cGVzLicsIGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJywgbG9jYXRpb24s
IHR5cGVTcGVjTmFtZSk7CisgICAgICAgICAgZXJyb3IgPSB0eXBlU3BlY3NbdHlwZVNwZWNOYW1l
XSh2YWx1ZXMsIHR5cGVTcGVjTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIG51bGwsIFJl
YWN0UHJvcFR5cGVzU2VjcmV0KTsKKyAgICAgICAgfSBjYXRjaCAoZXgpIHsKKyAgICAgICAgICBl
cnJvciA9IGV4OworICAgICAgICB9CisgICAgICAgIHdhcm5pbmcoIWVycm9yIHx8IGVycm9yIGlu
c3RhbmNlb2YgRXJyb3IsICclczogdHlwZSBzcGVjaWZpY2F0aW9uIG9mICVzIGAlc2AgaXMgaW52
YWxpZDsgdGhlIHR5cGUgY2hlY2tlciAnICsgJ2Z1bmN0aW9uIG11c3QgcmV0dXJuIGBudWxsYCBv
ciBhbiBgRXJyb3JgIGJ1dCByZXR1cm5lZCBhICVzLiAnICsgJ1lvdSBtYXkgaGF2ZSBmb3Jnb3R0
ZW4gdG8gcGFzcyBhbiBhcmd1bWVudCB0byB0aGUgdHlwZSBjaGVja2VyICcgKyAnY3JlYXRvciAo
YXJyYXlPZiwgaW5zdGFuY2VPZiwgb2JqZWN0T2YsIG9uZU9mLCBvbmVPZlR5cGUsIGFuZCAnICsg
J3NoYXBlIGFsbCByZXF1aXJlIGFuIGFyZ3VtZW50KS4nLCBjb21wb25lbnROYW1lIHx8ICdSZWFj
dCBjbGFzcycsIGxvY2F0aW9uLCB0eXBlU3BlY05hbWUsIHR5cGVvZiBlcnJvcik7CisgICAgICAg
IGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmICEoZXJyb3IubWVzc2FnZSBpbiBsb2dnZWRU
eXBlRmFpbHVyZXMpKSB7CisgICAgICAgICAgLy8gT25seSBtb25pdG9yIHRoaXMgZmFpbHVyZSBv
bmNlIGJlY2F1c2UgdGhlcmUgdGVuZHMgdG8gYmUgYSBsb3Qgb2YgdGhlCisgICAgICAgICAgLy8g
c2FtZSBlcnJvci4KKyAgICAgICAgICBsb2dnZWRUeXBlRmFpbHVyZXNbZXJyb3IubWVzc2FnZV0g
PSB0cnVlOworCisgICAgICAgICAgdmFyIHN0YWNrID0gZ2V0U3RhY2sgPyBnZXRTdGFjaygpIDog
Jyc7CisKKyAgICAgICAgICB3YXJuaW5nKGZhbHNlLCAnRmFpbGVkICVzIHR5cGU6ICVzJXMnLCBs
b2NhdGlvbiwgZXJyb3IubWVzc2FnZSwgc3RhY2sgIT0gbnVsbCA/IHN0YWNrIDogJycpOworICAg
ICAgICB9CisgICAgICB9CisgICAgfQorICB9Cit9CisKK21vZHVsZS5leHBvcnRzID0gY2hlY2tQ
cm9wVHlwZXM7CisKK30seyI0NyI6NDcsIjQ5Ijo0OSwiNTQiOjU0fV0sNTI6W2Z1bmN0aW9uKF9k
ZXJlcV8sbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBG
YWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvdXJj
ZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0
aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2Ug
dHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAorICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91
bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisgKi8KKworJ3Vz
ZSBzdHJpY3QnOworCisvLyBSZWFjdCAxNS41IHJlZmVyZW5jZXMgdGhpcyBtb2R1bGUsIGFuZCBh
c3N1bWVzIFByb3BUeXBlcyBhcmUgc3RpbGwgY2FsbGFibGUgaW4gcHJvZHVjdGlvbi4KKy8vIFRo
ZXJlZm9yZSB3ZSByZS1leHBvcnQgZGV2ZWxvcG1lbnQtb25seSB2ZXJzaW9uIHdpdGggYWxsIHRo
ZSBQcm9wVHlwZXMgY2hlY2tzIGhlcmUuCisvLyBIb3dldmVyIGlmIG9uZSBpcyBtaWdyYXRpbmcg
dG8gdGhlIGBwcm9wLXR5cGVzYCBucG0gbGlicmFyeSwgdGhleSB3aWxsIGdvIHRocm91Z2ggdGhl
CisvLyBgaW5kZXguanNgIGVudHJ5IHBvaW50LCBhbmQgaXQgd2lsbCBicmFuY2ggZGVwZW5kaW5n
IG9uIHRoZSBlbnZpcm9ubWVudC4KK3ZhciBmYWN0b3J5ID0gX2RlcmVxXyg1Myk7Cittb2R1bGUu
ZXhwb3J0cyA9IGZ1bmN0aW9uKGlzVmFsaWRFbGVtZW50KSB7CisgIC8vIEl0IGlzIHN0aWxsIGFs
bG93ZWQgaW4gMTUuNS4KKyAgdmFyIHRocm93T25EaXJlY3RBY2Nlc3MgPSBmYWxzZTsKKyAgcmV0
dXJuIGZhY3RvcnkoaXNWYWxpZEVsZW1lbnQsIHRocm93T25EaXJlY3RBY2Nlc3MpOworfTsKKwor
fSx7IjUzIjo1M31dLDUzOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKKy8qKgor
ICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4KKyAqIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUg
QlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlCisgKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJv
b3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnQKKyAq
IG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhl
IHNhbWUgZGlyZWN0b3J5LgorICovCisKKyd1c2Ugc3RyaWN0JzsKKwordmFyIGVtcHR5RnVuY3Rp
b24gPSBfZGVyZXFfKDQ1KTsKK3ZhciBpbnZhcmlhbnQgPSBfZGVyZXFfKDQ3KTsKK3ZhciB3YXJu
aW5nID0gX2RlcmVxXyg0OSk7CisKK3ZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9IF9kZXJlcV8o
NTQpOwordmFyIGNoZWNrUHJvcFR5cGVzID0gX2RlcmVxXyg1MSk7CisKK21vZHVsZS5leHBvcnRz
ID0gZnVuY3Rpb24oaXNWYWxpZEVsZW1lbnQsIHRocm93T25EaXJlY3RBY2Nlc3MpIHsKKyAgLyog
Z2xvYmFsIFN5bWJvbCAqLworICB2YXIgSVRFUkFUT1JfU1lNQk9MID0gdHlwZW9mIFN5bWJvbCA9
PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuaXRlcmF0b3I7CisgIHZhciBGQVVYX0lURVJBVE9SX1NZ
TUJPTCA9ICdAQGl0ZXJhdG9yJzsgLy8gQmVmb3JlIFN5bWJvbCBzcGVjLgorCisgIC8qKgorICAg
KiBSZXR1cm5zIHRoZSBpdGVyYXRvciBtZXRob2QgZnVuY3Rpb24gY29udGFpbmVkIG9uIHRoZSBp
dGVyYWJsZSBvYmplY3QuCisgICAqCisgICAqIEJlIHN1cmUgdG8gaW52b2tlIHRoZSBmdW5jdGlv
biB3aXRoIHRoZSBpdGVyYWJsZSBhcyBjb250ZXh0OgorICAgKgorICAgKiAgICAgdmFyIGl0ZXJh
dG9yRm4gPSBnZXRJdGVyYXRvckZuKG15SXRlcmFibGUpOworICAgKiAgICAgaWYgKGl0ZXJhdG9y
Rm4pIHsKKyAgICogICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKG15SXRlcmFi
bGUpOworICAgKiAgICAgICAuLi4KKyAgICogICAgIH0KKyAgICoKKyAgICogQHBhcmFtIHs/b2Jq
ZWN0fSBtYXliZUl0ZXJhYmxlCisgICAqIEByZXR1cm4gez9mdW5jdGlvbn0KKyAgICovCisgIGZ1
bmN0aW9uIGdldEl0ZXJhdG9yRm4obWF5YmVJdGVyYWJsZSkgeworICAgIHZhciBpdGVyYXRvckZu
ID0gbWF5YmVJdGVyYWJsZSAmJiAoSVRFUkFUT1JfU1lNQk9MICYmIG1heWJlSXRlcmFibGVbSVRF
UkFUT1JfU1lNQk9MXSB8fCBtYXliZUl0ZXJhYmxlW0ZBVVhfSVRFUkFUT1JfU1lNQk9MXSk7Cisg
ICAgaWYgKHR5cGVvZiBpdGVyYXRvckZuID09PSAnZnVuY3Rpb24nKSB7CisgICAgICByZXR1cm4g
aXRlcmF0b3JGbjsKKyAgICB9CisgIH0KKworICAvKioKKyAgICogQ29sbGVjdGlvbiBvZiBtZXRo
b2RzIHRoYXQgYWxsb3cgZGVjbGFyYXRpb24gYW5kIHZhbGlkYXRpb24gb2YgcHJvcHMgdGhhdCBh
cmUKKyAgICogc3VwcGxpZWQgdG8gUmVhY3QgY29tcG9uZW50cy4gRXhhbXBsZSB1c2FnZToKKyAg
ICoKKyAgICogICB2YXIgUHJvcHMgPSByZXF1aXJlKCdSZWFjdFByb3BUeXBlcycpOworICAgKiAg
IHZhciBNeUFydGljbGUgPSBSZWFjdC5jcmVhdGVDbGFzcyh7CisgICAqICAgICBwcm9wVHlwZXM6
IHsKKyAgICogICAgICAgLy8gQW4gb3B0aW9uYWwgc3RyaW5nIHByb3AgbmFtZWQgImRlc2NyaXB0
aW9uIi4KKyAgICogICAgICAgZGVzY3JpcHRpb246IFByb3BzLnN0cmluZywKKyAgICoKKyAgICog
ICAgICAgLy8gQSByZXF1aXJlZCBlbnVtIHByb3AgbmFtZWQgImNhdGVnb3J5Ii4KKyAgICogICAg
ICAgY2F0ZWdvcnk6IFByb3BzLm9uZU9mKFsnTmV3cycsJ1Bob3RvcyddKS5pc1JlcXVpcmVkLAor
ICAgKgorICAgKiAgICAgICAvLyBBIHByb3AgbmFtZWQgImRpYWxvZyIgdGhhdCByZXF1aXJlcyBh
biBpbnN0YW5jZSBvZiBEaWFsb2cuCisgICAqICAgICAgIGRpYWxvZzogUHJvcHMuaW5zdGFuY2VP
ZihEaWFsb2cpLmlzUmVxdWlyZWQKKyAgICogICAgIH0sCisgICAqICAgICByZW5kZXI6IGZ1bmN0
aW9uKCkgeyAuLi4gfQorICAgKiAgIH0pOworICAgKgorICAgKiBBIG1vcmUgZm9ybWFsIHNwZWNp
ZmljYXRpb24gb2YgaG93IHRoZXNlIG1ldGhvZHMgYXJlIHVzZWQ6CisgICAqCisgICAqICAgdHlw
ZSA6PSBhcnJheXxib29sfGZ1bmN8b2JqZWN0fG51bWJlcnxzdHJpbmd8b25lT2YoWy4uLl0pfGlu
c3RhbmNlT2YoLi4uKQorICAgKiAgIGRlY2wgOj0gUmVhY3RQcm9wVHlwZXMue3R5cGV9KC5pc1Jl
cXVpcmVkKT8KKyAgICoKKyAgICogRWFjaCBhbmQgZXZlcnkgZGVjbGFyYXRpb24gcHJvZHVjZXMg
YSBmdW5jdGlvbiB3aXRoIHRoZSBzYW1lIHNpZ25hdHVyZS4gVGhpcworICAgKiBhbGxvd3MgdGhl
IGNyZWF0aW9uIG9mIGN1c3RvbSB2YWxpZGF0aW9uIGZ1bmN0aW9ucy4gRm9yIGV4YW1wbGU6Cisg
ICAqCisgICAqICB2YXIgTXlMaW5rID0gUmVhY3QuY3JlYXRlQ2xhc3MoeworICAgKiAgICBwcm9w
VHlwZXM6IHsKKyAgICogICAgICAvLyBBbiBvcHRpb25hbCBzdHJpbmcgb3IgVVJJIHByb3AgbmFt
ZWQgImhyZWYiLgorICAgKiAgICAgIGhyZWY6IGZ1bmN0aW9uKHByb3BzLCBwcm9wTmFtZSwgY29t
cG9uZW50TmFtZSkgeworICAgKiAgICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1l
XTsKKyAgICogICAgICAgIGlmIChwcm9wVmFsdWUgIT0gbnVsbCAmJiB0eXBlb2YgcHJvcFZhbHVl
ICE9PSAnc3RyaW5nJyAmJgorICAgKiAgICAgICAgICAgICEocHJvcFZhbHVlIGluc3RhbmNlb2Yg
VVJJKSkgeworICAgKiAgICAgICAgICByZXR1cm4gbmV3IEVycm9yKAorICAgKiAgICAgICAgICAg
ICdFeHBlY3RlZCBhIHN0cmluZyBvciBhbiBVUkkgZm9yICcgKyBwcm9wTmFtZSArICcgaW4gJyAr
CisgICAqICAgICAgICAgICAgY29tcG9uZW50TmFtZQorICAgKiAgICAgICAgICApOworICAgKiAg
ICAgICAgfQorICAgKiAgICAgIH0KKyAgICogICAgfSwKKyAgICogICAgcmVuZGVyOiBmdW5jdGlv
bigpIHsuLi59CisgICAqICB9KTsKKyAgICoKKyAgICogQGludGVybmFsCisgICAqLworCisgIHZh
ciBBTk9OWU1PVVMgPSAnPDxhbm9ueW1vdXM+Pic7CisKKyAgLy8gSW1wb3J0YW50IQorICAvLyBL
ZWVwIHRoaXMgbGlzdCBpbiBzeW5jIHdpdGggcHJvZHVjdGlvbiB2ZXJzaW9uIGluIGAuL2ZhY3Rv
cnlXaXRoVGhyb3dpbmdTaGltcy5qc2AuCisgIHZhciBSZWFjdFByb3BUeXBlcyA9IHsKKyAgICBh
cnJheTogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ2FycmF5JyksCisgICAgYm9vbDogY3Jl
YXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ2Jvb2xlYW4nKSwKKyAgICBmdW5jOiBjcmVhdGVQcmlt
aXRpdmVUeXBlQ2hlY2tlcignZnVuY3Rpb24nKSwKKyAgICBudW1iZXI6IGNyZWF0ZVByaW1pdGl2
ZVR5cGVDaGVja2VyKCdudW1iZXInKSwKKyAgICBvYmplY3Q6IGNyZWF0ZVByaW1pdGl2ZVR5cGVD
aGVja2VyKCdvYmplY3QnKSwKKyAgICBzdHJpbmc6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2Vy
KCdzdHJpbmcnKSwKKyAgICBzeW1ib2w6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdzeW1i
b2wnKSwKKworICAgIGFueTogY3JlYXRlQW55VHlwZUNoZWNrZXIoKSwKKyAgICBhcnJheU9mOiBj
cmVhdGVBcnJheU9mVHlwZUNoZWNrZXIsCisgICAgZWxlbWVudDogY3JlYXRlRWxlbWVudFR5cGVD
aGVja2VyKCksCisgICAgaW5zdGFuY2VPZjogY3JlYXRlSW5zdGFuY2VUeXBlQ2hlY2tlciwKKyAg
ICBub2RlOiBjcmVhdGVOb2RlQ2hlY2tlcigpLAorICAgIG9iamVjdE9mOiBjcmVhdGVPYmplY3RP
ZlR5cGVDaGVja2VyLAorICAgIG9uZU9mOiBjcmVhdGVFbnVtVHlwZUNoZWNrZXIsCisgICAgb25l
T2ZUeXBlOiBjcmVhdGVVbmlvblR5cGVDaGVja2VyLAorICAgIHNoYXBlOiBjcmVhdGVTaGFwZVR5
cGVDaGVja2VyCisgIH07CisKKyAgLyoqCisgICAqIGlubGluZWQgT2JqZWN0LmlzIHBvbHlmaWxs
IHRvIGF2b2lkIHJlcXVpcmluZyBjb25zdW1lcnMgc2hpcCB0aGVpciBvd24KKyAgICogaHR0cHM6
Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVu
Y2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2lzCisgICAqLworICAvKmVzbGludC1kaXNhYmxlIG5v
LXNlbGYtY29tcGFyZSovCisgIGZ1bmN0aW9uIGlzKHgsIHkpIHsKKyAgICAvLyBTYW1lVmFsdWUg
YWxnb3JpdGhtCisgICAgaWYgKHggPT09IHkpIHsKKyAgICAgIC8vIFN0ZXBzIDEtNSwgNy0xMAor
ICAgICAgLy8gU3RlcHMgNi5iLTYuZTogKzAgIT0gLTAKKyAgICAgIHJldHVybiB4ICE9PSAwIHx8
IDEgLyB4ID09PSAxIC8geTsKKyAgICB9IGVsc2UgeworICAgICAgLy8gU3RlcCA2LmE6IE5hTiA9
PSBOYU4KKyAgICAgIHJldHVybiB4ICE9PSB4ICYmIHkgIT09IHk7CisgICAgfQorICB9CisgIC8q
ZXNsaW50LWVuYWJsZSBuby1zZWxmLWNvbXBhcmUqLworCisgIC8qKgorICAgKiBXZSB1c2UgYW4g
RXJyb3ItbGlrZSBvYmplY3QgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgYXMgcGVvcGxlIG1h
eSBjYWxsCisgICAqIFByb3BUeXBlcyBkaXJlY3RseSBhbmQgaW5zcGVjdCB0aGVpciBvdXRwdXQu
IEhvd2V2ZXIsIHdlIGRvbid0IHVzZSByZWFsCisgICAqIEVycm9ycyBhbnltb3JlLiBXZSBkb24n
dCBpbnNwZWN0IHRoZWlyIHN0YWNrIGFueXdheSwgYW5kIGNyZWF0aW5nIHRoZW0KKyAgICogaXMg
cHJvaGliaXRpdmVseSBleHBlbnNpdmUgaWYgdGhleSBhcmUgY3JlYXRlZCB0b28gb2Z0ZW4sIHN1
Y2ggYXMgd2hhdAorICAgKiBoYXBwZW5zIGluIG9uZU9mVHlwZSgpIGZvciBhbnkgdHlwZSBiZWZv
cmUgdGhlIG9uZSB0aGF0IG1hdGNoZWQuCisgICAqLworICBmdW5jdGlvbiBQcm9wVHlwZUVycm9y
KG1lc3NhZ2UpIHsKKyAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlOworICAgIHRoaXMuc3RhY2sg
PSAnJzsKKyAgfQorICAvLyBNYWtlIGBpbnN0YW5jZW9mIEVycm9yYCBzdGlsbCB3b3JrIGZvciBy
ZXR1cm5lZCBlcnJvcnMuCisgIFByb3BUeXBlRXJyb3IucHJvdG90eXBlID0gRXJyb3IucHJvdG90
eXBlOworCisgIGZ1bmN0aW9uIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKSB7
CisgICAgaWYgKCJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJykgeworICAgICAgdmFyIG1h
bnVhbFByb3BUeXBlQ2FsbENhY2hlID0ge307CisgICAgfQorICAgIGZ1bmN0aW9uIGNoZWNrVHlw
ZShpc1JlcXVpcmVkLCBwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBw
cm9wRnVsbE5hbWUsIHNlY3JldCkgeworICAgICAgY29tcG9uZW50TmFtZSA9IGNvbXBvbmVudE5h
bWUgfHwgQU5PTllNT1VTOworICAgICAgcHJvcEZ1bGxOYW1lID0gcHJvcEZ1bGxOYW1lIHx8IHBy
b3BOYW1lOworCisgICAgICBpZiAoc2VjcmV0ICE9PSBSZWFjdFByb3BUeXBlc1NlY3JldCkgewor
ICAgICAgICBpZiAodGhyb3dPbkRpcmVjdEFjY2VzcykgeworICAgICAgICAgIC8vIE5ldyBiZWhh
dmlvciBvbmx5IGZvciB1c2VycyBvZiBgcHJvcC10eXBlc2AgcGFja2FnZQorICAgICAgICAgIGlu
dmFyaWFudCgKKyAgICAgICAgICAgIGZhbHNlLAorICAgICAgICAgICAgJ0NhbGxpbmcgUHJvcFR5
cGVzIHZhbGlkYXRvcnMgZGlyZWN0bHkgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgYHByb3AtdHlw
ZXNgIHBhY2thZ2UuICcgKworICAgICAgICAgICAgJ1VzZSBgUHJvcFR5cGVzLmNoZWNrUHJvcFR5
cGVzKClgIHRvIGNhbGwgdGhlbS4gJyArCisgICAgICAgICAgICAnUmVhZCBtb3JlIGF0IGh0dHA6
Ly9mYi5tZS91c2UtY2hlY2stcHJvcC10eXBlcycKKyAgICAgICAgICApOworICAgICAgICB9IGVs
c2UgaWYgKCJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyAmJiB0eXBlb2YgY29uc29sZSAh
PT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgICAvLyBPbGQgYmVoYXZpb3IgZm9yIHBlb3BsZSB1
c2luZyBSZWFjdC5Qcm9wVHlwZXMKKyAgICAgICAgICB2YXIgY2FjaGVLZXkgPSBjb21wb25lbnRO
YW1lICsgJzonICsgcHJvcE5hbWU7CisgICAgICAgICAgaWYgKCFtYW51YWxQcm9wVHlwZUNhbGxD
YWNoZVtjYWNoZUtleV0pIHsKKyAgICAgICAgICAgIHdhcm5pbmcoCisgICAgICAgICAgICAgIGZh
bHNlLAorICAgICAgICAgICAgICAnWW91IGFyZSBtYW51YWxseSBjYWxsaW5nIGEgUmVhY3QuUHJv
cFR5cGVzIHZhbGlkYXRpb24gJyArCisgICAgICAgICAgICAgICdmdW5jdGlvbiBmb3IgdGhlIGAl
c2AgcHJvcCBvbiBgJXNgLiBUaGlzIGlzIGRlcHJlY2F0ZWQgJyArCisgICAgICAgICAgICAgICdh
bmQgd2lsbCB0aHJvdyBpbiB0aGUgc3RhbmRhbG9uZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gJyAr
CisgICAgICAgICAgICAgICdZb3UgbWF5IGJlIHNlZWluZyB0aGlzIHdhcm5pbmcgZHVlIHRvIGEg
dGhpcmQtcGFydHkgUHJvcFR5cGVzICcgKworICAgICAgICAgICAgICAnbGlicmFyeS4gU2VlIGh0
dHBzOi8vZmIubWUvcmVhY3Qtd2FybmluZy1kb250LWNhbGwtcHJvcHR5cGVzICcgKyAnZm9yIGRl
dGFpbHMuJywKKyAgICAgICAgICAgICAgcHJvcEZ1bGxOYW1lLAorICAgICAgICAgICAgICBjb21w
b25lbnROYW1lCisgICAgICAgICAgICApOworICAgICAgICAgICAgbWFudWFsUHJvcFR5cGVDYWxs
Q2FjaGVbY2FjaGVLZXldID0gdHJ1ZTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0K
KyAgICAgIGlmIChwcm9wc1twcm9wTmFtZV0gPT0gbnVsbCkgeworICAgICAgICBpZiAoaXNSZXF1
aXJlZCkgeworICAgICAgICAgIGlmIChwcm9wc1twcm9wTmFtZV0gPT09IG51bGwpIHsKKyAgICAg
ICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignVGhlICcgKyBsb2NhdGlvbiArICcgYCcg
KyBwcm9wRnVsbE5hbWUgKyAnYCBpcyBtYXJrZWQgYXMgcmVxdWlyZWQgJyArICgnaW4gYCcgKyBj
b21wb25lbnROYW1lICsgJ2AsIGJ1dCBpdHMgdmFsdWUgaXMgYG51bGxgLicpKTsKKyAgICAgICAg
ICB9CisgICAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdUaGUgJyArIGxvY2F0aW9u
ICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIGlzIG1hcmtlZCBhcyByZXF1aXJlZCBpbiAnICsg
KCdgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgYnV0IGl0cyB2YWx1ZSBpcyBgdW5kZWZpbmVkYC4n
KSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICB9IGVsc2UgeworICAg
ICAgICByZXR1cm4gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2Nh
dGlvbiwgcHJvcEZ1bGxOYW1lKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICB2YXIgY2hhaW5lZENo
ZWNrVHlwZSA9IGNoZWNrVHlwZS5iaW5kKG51bGwsIGZhbHNlKTsKKyAgICBjaGFpbmVkQ2hlY2tU
eXBlLmlzUmVxdWlyZWQgPSBjaGVja1R5cGUuYmluZChudWxsLCB0cnVlKTsKKworICAgIHJldHVy
biBjaGFpbmVkQ2hlY2tUeXBlOworICB9CisKKyAgZnVuY3Rpb24gY3JlYXRlUHJpbWl0aXZlVHlw
ZUNoZWNrZXIoZXhwZWN0ZWRUeXBlKSB7CisgICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHBy
b3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBzZWNyZXQpIHsK
KyAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07CisgICAgICB2YXIgcHJvcFR5
cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpOworICAgICAgaWYgKHByb3BUeXBlICE9PSBleHBl
Y3RlZFR5cGUpIHsKKyAgICAgICAgLy8gYHByb3BWYWx1ZWAgYmVpbmcgaW5zdGFuY2Ugb2YsIHNh
eSwgZGF0ZS9yZWdleHAsIHBhc3MgdGhlICdvYmplY3QnCisgICAgICAgIC8vIGNoZWNrLCBidXQg
d2UgY2FuIG9mZmVyIGEgbW9yZSBwcmVjaXNlIGVycm9yIG1lc3NhZ2UgaGVyZSByYXRoZXIgdGhh
bgorICAgICAgICAvLyAnb2YgdHlwZSBgb2JqZWN0YCcuCisgICAgICAgIHZhciBwcmVjaXNlVHlw
ZSA9IGdldFByZWNpc2VUeXBlKHByb3BWYWx1ZSk7CisKKyAgICAgICAgcmV0dXJuIG5ldyBQcm9w
VHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAn
YCBvZiB0eXBlICcgKyAoJ2AnICsgcHJlY2lzZVR5cGUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNv
bXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgJykgKyAoJ2AnICsgZXhwZWN0ZWRUeXBlICsgJ2Au
JykpOworICAgICAgfQorICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIHJldHVybiBjcmVh
dGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7CisgIH0KKworICBmdW5jdGlvbiBjcmVh
dGVBbnlUeXBlQ2hlY2tlcigpIHsKKyAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNr
ZXIoZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc051bGwpOworICB9CisKKyAgZnVuY3Rpb24gY3Jl
YXRlQXJyYXlPZlR5cGVDaGVja2VyKHR5cGVDaGVja2VyKSB7CisgICAgZnVuY3Rpb24gdmFsaWRh
dGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1l
KSB7CisgICAgICBpZiAodHlwZW9mIHR5cGVDaGVja2VyICE9PSAnZnVuY3Rpb24nKSB7CisgICAg
ICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignUHJvcGVydHkgYCcgKyBwcm9wRnVsbE5hbWUg
KyAnYCBvZiBjb21wb25lbnQgYCcgKyBjb21wb25lbnROYW1lICsgJ2AgaGFzIGludmFsaWQgUHJv
cFR5cGUgbm90YXRpb24gaW5zaWRlIGFycmF5T2YuJyk7CisgICAgICB9CisgICAgICB2YXIgcHJv
cFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdOworICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHByb3BW
YWx1ZSkpIHsKKyAgICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTsK
KyAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiAr
ICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgcHJvcFR5cGUgKyAn
YCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYW4gYXJyYXku
JykpOworICAgICAgfQorICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wVmFsdWUubGVuZ3Ro
OyBpKyspIHsKKyAgICAgICAgdmFyIGVycm9yID0gdHlwZUNoZWNrZXIocHJvcFZhbHVlLCBpLCBj
b21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJ1snICsgaSArICddJywgUmVh
Y3RQcm9wVHlwZXNTZWNyZXQpOworICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikg
eworICAgICAgICAgIHJldHVybiBlcnJvcjsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgcmV0
dXJuIG51bGw7CisgICAgfQorICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2
YWxpZGF0ZSk7CisgIH0KKworICBmdW5jdGlvbiBjcmVhdGVFbGVtZW50VHlwZUNoZWNrZXIoKSB7
CisgICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBs
b2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7CisgICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJv
cE5hbWVdOworICAgICAgaWYgKCFpc1ZhbGlkRWxlbWVudChwcm9wVmFsdWUpKSB7CisgICAgICAg
IHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7CisgICAgICAgIHJldHVybiBu
ZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxO
YW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByb3BUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcg
KyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGEgc2luZ2xlIFJlYWN0RWxlbWVudC4nKSk7
CisgICAgICB9CisgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisgICAgcmV0dXJuIGNyZWF0ZUNo
YWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTsKKyAgfQorCisgIGZ1bmN0aW9uIGNyZWF0ZUlu
c3RhbmNlVHlwZUNoZWNrZXIoZXhwZWN0ZWRDbGFzcykgeworICAgIGZ1bmN0aW9uIHZhbGlkYXRl
KHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkg
eworICAgICAgaWYgKCEocHJvcHNbcHJvcE5hbWVdIGluc3RhbmNlb2YgZXhwZWN0ZWRDbGFzcykp
IHsKKyAgICAgICAgdmFyIGV4cGVjdGVkQ2xhc3NOYW1lID0gZXhwZWN0ZWRDbGFzcy5uYW1lIHx8
IEFOT05ZTU9VUzsKKyAgICAgICAgdmFyIGFjdHVhbENsYXNzTmFtZSA9IGdldENsYXNzTmFtZShw
cm9wc1twcm9wTmFtZV0pOworICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFs
aWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgn
YCcgKyBhY3R1YWxDbGFzc05hbWUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUg
KyAnYCwgZXhwZWN0ZWQgJykgKyAoJ2luc3RhbmNlIG9mIGAnICsgZXhwZWN0ZWRDbGFzc05hbWUg
KyAnYC4nKSk7CisgICAgICB9CisgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisgICAgcmV0dXJu
IGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTsKKyAgfQorCisgIGZ1bmN0aW9u
IGNyZWF0ZUVudW1UeXBlQ2hlY2tlcihleHBlY3RlZFZhbHVlcykgeworICAgIGlmICghQXJyYXku
aXNBcnJheShleHBlY3RlZFZhbHVlcykpIHsKKyAgICAgICJkZXZlbG9wbWVudCIgIT09ICdwcm9k
dWN0aW9uJyA/IHdhcm5pbmcoZmFsc2UsICdJbnZhbGlkIGFyZ3VtZW50IHN1cHBsaWVkIHRvIG9u
ZU9mLCBleHBlY3RlZCBhbiBpbnN0YW5jZSBvZiBhcnJheS4nKSA6IHZvaWQgMDsKKyAgICAgIHJl
dHVybiBlbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zTnVsbDsKKyAgICB9CisKKyAgICBmdW5jdGlv
biB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9w
RnVsbE5hbWUpIHsKKyAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07CisgICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IGV4cGVjdGVkVmFsdWVzLmxlbmd0aDsgaSsrKSB7CisgICAg
ICAgIGlmIChpcyhwcm9wVmFsdWUsIGV4cGVjdGVkVmFsdWVzW2ldKSkgeworICAgICAgICAgIHJl
dHVybiBudWxsOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIHZhciB2YWx1ZXNTdHJpbmcg
PSBKU09OLnN0cmluZ2lmeShleHBlY3RlZFZhbHVlcyk7CisgICAgICByZXR1cm4gbmV3IFByb3BU
eXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdg
IG9mIHZhbHVlIGAnICsgcHJvcFZhbHVlICsgJ2AgJyArICgnc3VwcGxpZWQgdG8gYCcgKyBjb21w
b25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIG9uZSBvZiAnICsgdmFsdWVzU3RyaW5nICsgJy4nKSk7
CisgICAgfQorICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7
CisgIH0KKworICBmdW5jdGlvbiBjcmVhdGVPYmplY3RPZlR5cGVDaGVja2VyKHR5cGVDaGVja2Vy
KSB7CisgICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1l
LCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7CisgICAgICBpZiAodHlwZW9mIHR5cGVDaGVja2Vy
ICE9PSAnZnVuY3Rpb24nKSB7CisgICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignUHJv
cGVydHkgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiBjb21wb25lbnQgYCcgKyBjb21wb25lbnRO
YW1lICsgJ2AgaGFzIGludmFsaWQgUHJvcFR5cGUgbm90YXRpb24gaW5zaWRlIG9iamVjdE9mLicp
OworICAgICAgfQorICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTsKKyAgICAg
IHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7CisgICAgICBpZiAocHJvcFR5
cGUgIT09ICdvYmplY3QnKSB7CisgICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52
YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsg
KCdgJyArIHByb3BUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2As
IGV4cGVjdGVkIGFuIG9iamVjdC4nKSk7CisgICAgICB9CisgICAgICBmb3IgKHZhciBrZXkgaW4g
cHJvcFZhbHVlKSB7CisgICAgICAgIGlmIChwcm9wVmFsdWUuaGFzT3duUHJvcGVydHkoa2V5KSkg
eworICAgICAgICAgIHZhciBlcnJvciA9IHR5cGVDaGVja2VyKHByb3BWYWx1ZSwga2V5LCBjb21w
b25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5LCBSZWFjdFByb3BU
eXBlc1NlY3JldCk7CisgICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHsKKyAg
ICAgICAgICAgIHJldHVybiBlcnJvcjsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0K
KyAgICAgIHJldHVybiBudWxsOworICAgIH0KKyAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlw
ZUNoZWNrZXIodmFsaWRhdGUpOworICB9CisKKyAgZnVuY3Rpb24gY3JlYXRlVW5pb25UeXBlQ2hl
Y2tlcihhcnJheU9mVHlwZUNoZWNrZXJzKSB7CisgICAgaWYgKCFBcnJheS5pc0FycmF5KGFycmF5
T2ZUeXBlQ2hlY2tlcnMpKSB7CisgICAgICAiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicg
PyB3YXJuaW5nKGZhbHNlLCAnSW52YWxpZCBhcmd1bWVudCBzdXBwbGllZCB0byBvbmVPZlR5cGUs
IGV4cGVjdGVkIGFuIGluc3RhbmNlIG9mIGFycmF5LicpIDogdm9pZCAwOworICAgICAgcmV0dXJu
IGVtcHR5RnVuY3Rpb24udGhhdFJldHVybnNOdWxsOworICAgIH0KKworICAgIGZ1bmN0aW9uIHZh
bGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxs
TmFtZSkgeworICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheU9mVHlwZUNoZWNrZXJzLmxl
bmd0aDsgaSsrKSB7CisgICAgICAgIHZhciBjaGVja2VyID0gYXJyYXlPZlR5cGVDaGVja2Vyc1tp
XTsKKyAgICAgICAgaWYgKGNoZWNrZXIocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBs
b2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBSZWFjdFByb3BUeXBlc1NlY3JldCkgPT0gbnVsbCkgewor
ICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIHJldHVy
biBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1
bGxOYW1lICsgJ2Agc3VwcGxpZWQgdG8gJyArICgnYCcgKyBjb21wb25lbnROYW1lICsgJ2AuJykp
OworICAgIH0KKyAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUp
OworICB9CisKKyAgZnVuY3Rpb24gY3JlYXRlTm9kZUNoZWNrZXIoKSB7CisgICAgZnVuY3Rpb24g
dmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1
bGxOYW1lKSB7CisgICAgICBpZiAoIWlzTm9kZShwcm9wc1twcm9wTmFtZV0pKSB7CisgICAgICAg
IHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsg
cHJvcEZ1bGxOYW1lICsgJ2Agc3VwcGxpZWQgdG8gJyArICgnYCcgKyBjb21wb25lbnROYW1lICsg
J2AsIGV4cGVjdGVkIGEgUmVhY3ROb2RlLicpKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBudWxs
OworICAgIH0KKyAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUp
OworICB9CisKKyAgZnVuY3Rpb24gY3JlYXRlU2hhcGVUeXBlQ2hlY2tlcihzaGFwZVR5cGVzKSB7
CisgICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBs
b2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7CisgICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJv
cE5hbWVdOworICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTsKKyAg
ICAgIGlmIChwcm9wVHlwZSAhPT0gJ29iamVjdCcpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBQcm9w
VHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAn
YCBvZiB0eXBlIGAnICsgcHJvcFR5cGUgKyAnYCAnICsgKCdzdXBwbGllZCB0byBgJyArIGNvbXBv
bmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYG9iamVjdGAuJykpOworICAgICAgfQorICAgICAgZm9y
ICh2YXIga2V5IGluIHNoYXBlVHlwZXMpIHsKKyAgICAgICAgdmFyIGNoZWNrZXIgPSBzaGFwZVR5
cGVzW2tleV07CisgICAgICAgIGlmICghY2hlY2tlcikgeworICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICB9CisgICAgICAgIHZhciBlcnJvciA9IGNoZWNrZXIocHJvcFZhbHVlLCBrZXksIGNv
bXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUgKyAnLicgKyBrZXksIFJlYWN0UHJv
cFR5cGVzU2VjcmV0KTsKKyAgICAgICAgaWYgKGVycm9yKSB7CisgICAgICAgICAgcmV0dXJuIGVy
cm9yOworICAgICAgICB9CisgICAgICB9CisgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisgICAg
cmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTsKKyAgfQorCisgIGZ1
bmN0aW9uIGlzTm9kZShwcm9wVmFsdWUpIHsKKyAgICBzd2l0Y2ggKHR5cGVvZiBwcm9wVmFsdWUp
IHsKKyAgICAgIGNhc2UgJ251bWJlcic6CisgICAgICBjYXNlICdzdHJpbmcnOgorICAgICAgY2Fz
ZSAndW5kZWZpbmVkJzoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICBjYXNlICdib29sZWFu
JzoKKyAgICAgICAgcmV0dXJuICFwcm9wVmFsdWU7CisgICAgICBjYXNlICdvYmplY3QnOgorICAg
ICAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7CisgICAgICAgICAgcmV0dXJuIHBy
b3BWYWx1ZS5ldmVyeShpc05vZGUpOworICAgICAgICB9CisgICAgICAgIGlmIChwcm9wVmFsdWUg
PT09IG51bGwgfHwgaXNWYWxpZEVsZW1lbnQocHJvcFZhbHVlKSkgeworICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRv
ckZuKHByb3BWYWx1ZSk7CisgICAgICAgIGlmIChpdGVyYXRvckZuKSB7CisgICAgICAgICAgdmFy
IGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKHByb3BWYWx1ZSk7CisgICAgICAgICAgdmFyIHN0
ZXA7CisgICAgICAgICAgaWYgKGl0ZXJhdG9yRm4gIT09IHByb3BWYWx1ZS5lbnRyaWVzKSB7Cisg
ICAgICAgICAgICB3aGlsZSAoIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7CisgICAg
ICAgICAgICAgIGlmICghaXNOb2RlKHN0ZXAudmFsdWUpKSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIC8vIEl0ZXJhdG9yIHdpbGwgcHJvdmlkZSBlbnRyeSBbayx2XSB0
dXBsZXMgcmF0aGVyIHRoYW4gdmFsdWVzLgorICAgICAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0
ZXJhdG9yLm5leHQoKSkuZG9uZSkgeworICAgICAgICAgICAgICB2YXIgZW50cnkgPSBzdGVwLnZh
bHVlOworICAgICAgICAgICAgICBpZiAoZW50cnkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWlz
Tm9kZShlbnRyeVsxXSkpIHsKKyAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorICB9CisKKyAgZnVuY3Rpb24gaXNTeW1ib2wocHJvcFR5cGUsIHByb3BWYWx1
ZSkgeworICAgIC8vIE5hdGl2ZSBTeW1ib2wuCisgICAgaWYgKHByb3BUeXBlID09PSAnc3ltYm9s
JykgeworICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgLy8gMTkuNC4zLjUgU3ltYm9s
LnByb3RvdHlwZVtAQHRvU3RyaW5nVGFnXSA9PT0gJ1N5bWJvbCcKKyAgICBpZiAocHJvcFZhbHVl
WydAQHRvU3RyaW5nVGFnJ10gPT09ICdTeW1ib2wnKSB7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisKKyAgICAvLyBGYWxsYmFjayBmb3Igbm9uLXNwZWMgY29tcGxpYW50IFN5bWJvbHMgd2hp
Y2ggYXJlIHBvbHlmaWxsZWQuCisgICAgaWYgKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicg
JiYgcHJvcFZhbHVlIGluc3RhbmNlb2YgU3ltYm9sKSB7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICAvLyBFcXVpdmFsZW50IG9mIGB0eXBl
b2ZgIGJ1dCB3aXRoIHNwZWNpYWwgaGFuZGxpbmcgZm9yIGFycmF5IGFuZCByZWdleHAuCisgIGZ1
bmN0aW9uIGdldFByb3BUeXBlKHByb3BWYWx1ZSkgeworICAgIHZhciBwcm9wVHlwZSA9IHR5cGVv
ZiBwcm9wVmFsdWU7CisgICAgaWYgKEFycmF5LmlzQXJyYXkocHJvcFZhbHVlKSkgeworICAgICAg
cmV0dXJuICdhcnJheSc7CisgICAgfQorICAgIGlmIChwcm9wVmFsdWUgaW5zdGFuY2VvZiBSZWdF
eHApIHsKKyAgICAgIC8vIE9sZCB3ZWJraXRzIChhdCBsZWFzdCB1bnRpbCBBbmRyb2lkIDQuMCkg
cmV0dXJuICdmdW5jdGlvbicgcmF0aGVyIHRoYW4KKyAgICAgIC8vICdvYmplY3QnIGZvciB0eXBl
b2YgYSBSZWdFeHAuIFdlJ2xsIG5vcm1hbGl6ZSB0aGlzIGhlcmUgc28gdGhhdCAvYmxhLworICAg
ICAgLy8gcGFzc2VzIFByb3BUeXBlcy5vYmplY3QuCisgICAgICByZXR1cm4gJ29iamVjdCc7Cisg
ICAgfQorICAgIGlmIChpc1N5bWJvbChwcm9wVHlwZSwgcHJvcFZhbHVlKSkgeworICAgICAgcmV0
dXJuICdzeW1ib2wnOworICAgIH0KKyAgICByZXR1cm4gcHJvcFR5cGU7CisgIH0KKworICAvLyBU
aGlzIGhhbmRsZXMgbW9yZSB0eXBlcyB0aGFuIGBnZXRQcm9wVHlwZWAuIE9ubHkgdXNlZCBmb3Ig
ZXJyb3IgbWVzc2FnZXMuCisgIC8vIFNlZSBgY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXJgLgor
ICBmdW5jdGlvbiBnZXRQcmVjaXNlVHlwZShwcm9wVmFsdWUpIHsKKyAgICB2YXIgcHJvcFR5cGUg
PSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpOworICAgIGlmIChwcm9wVHlwZSA9PT0gJ29iamVjdCcp
IHsKKyAgICAgIGlmIChwcm9wVmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7CisgICAgICAgIHJldHVy
biAnZGF0ZSc7CisgICAgICB9IGVsc2UgaWYgKHByb3BWYWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCkg
eworICAgICAgICByZXR1cm4gJ3JlZ2V4cCc7CisgICAgICB9CisgICAgfQorICAgIHJldHVybiBw
cm9wVHlwZTsKKyAgfQorCisgIC8vIFJldHVybnMgY2xhc3MgbmFtZSBvZiB0aGUgb2JqZWN0LCBp
ZiBhbnkuCisgIGZ1bmN0aW9uIGdldENsYXNzTmFtZShwcm9wVmFsdWUpIHsKKyAgICBpZiAoIXBy
b3BWYWx1ZS5jb25zdHJ1Y3RvciB8fCAhcHJvcFZhbHVlLmNvbnN0cnVjdG9yLm5hbWUpIHsKKyAg
ICAgIHJldHVybiBBTk9OWU1PVVM7CisgICAgfQorICAgIHJldHVybiBwcm9wVmFsdWUuY29uc3Ry
dWN0b3IubmFtZTsKKyAgfQorCisgIFJlYWN0UHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzID0gY2hl
Y2tQcm9wVHlwZXM7CisgIFJlYWN0UHJvcFR5cGVzLlByb3BUeXBlcyA9IFJlYWN0UHJvcFR5cGVz
OworCisgIHJldHVybiBSZWFjdFByb3BUeXBlczsKK307CisKK30seyI0NSI6NDUsIjQ3Ijo0Nywi
NDkiOjQ5LCI1MSI6NTEsIjU0Ijo1NH1dLDU0OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBv
cnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4KKyAq
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNl
ZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlCisgKiBMSUNFTlNFIGZp
bGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9u
YWwgZ3JhbnQKKyAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRT
IGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorICovCisKKyd1c2Ugc3RyaWN0JzsKKwordmFy
IFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gJ1NFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9X
SUxMX0JFX0ZJUkVEJzsKKworbW9kdWxlLmV4cG9ydHMgPSBSZWFjdFByb3BUeXBlc1NlY3JldDsK
KworfSx7fV19LHt9LFszMl0pKDMyKQorfSk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpk
aWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212
Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3Qvbm9kZV9tb2R1bGVzL3JlYWN0L2Rpc3QvcmVh
Y3Qtd2l0aC1hZGRvbnMubWluLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNv
dXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3Qvbm9kZV9tb2R1bGVzL3Jl
YWN0L2Rpc3QvcmVhY3Qtd2l0aC1hZGRvbnMubWluLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMwMGExZWQ5ZDBj
NzdmMTNhNzcxOTk4ZGZmMmYzMmRkMjZhYzA2MDEKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3Jt
YW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFt
cGxlcy9yZWFjdC9ub2RlX21vZHVsZXMvcmVhY3QvZGlzdC9yZWFjdC13aXRoLWFkZG9ucy5taW4u
anMKQEAgLTAsMCArMSwxMyBAQAorLyoqCisgKiBSZWFjdCAod2l0aCBhZGRvbnMpIHYxNS41LjQK
KyAqCisgKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLgorICogQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVy
IHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0
aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFu
dAorICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBp
biB0aGUgc2FtZSBkaXJlY3RvcnkuCisgKgorICovCishZnVuY3Rpb24oZSl7aWYoIm9iamVjdCI9
PXR5cGVvZiBleHBvcnRzJiYidW5kZWZpbmVkIiE9dHlwZW9mIG1vZHVsZSltb2R1bGUuZXhwb3J0
cz1lKCk7ZWxzZSBpZigiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kKWRlZmlu
ZShbXSxlKTtlbHNle3ZhciB0O3Q9InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OiJ1
bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/
c2VsZjp0aGlzLHQuUmVhY3Q9ZSgpfX0oZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gZSh0LG4s
cil7ZnVuY3Rpb24gbyhhLHMpe2lmKCFuW2FdKXtpZighdFthXSl7dmFyIHU9ImZ1bmN0aW9uIj09
dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmU7aWYoIXMmJnUpcmV0dXJuIHUoYSwhMCk7aWYoaSlyZXR1
cm4gaShhLCEwKTt2YXIgYz1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIithKyInIik7
dGhyb3cgYy5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIixjfXZhciBwPW5bYV09e2V4cG9ydHM6e319
O3RbYV1bMF0uY2FsbChwLmV4cG9ydHMsZnVuY3Rpb24oZSl7dmFyIG49dFthXVsxXVtlXTtyZXR1
cm4gbyhufHxlKX0scCxwLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bYV0uZXhwb3J0c31mb3Io
dmFyIGk9ImZ1bmN0aW9uIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmUsYT0wO2E8ci5sZW5ndGg7
YSsrKW8oclthXSk7cmV0dXJuIG99KHsxOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1
bmN0aW9uIHIoZSx0KXt2YXIgbj17fTtyZXR1cm4gbltlLnRvTG93ZXJDYXNlKCldPXQudG9Mb3dl
ckNhc2UoKSxuWyJXZWJraXQiK2VdPSJ3ZWJraXQiK3QsblsiTW96IitlXT0ibW96Iit0LG5bIm1z
IitlXT0iTVMiK3QsblsiTyIrZV09Im8iK3QudG9Mb3dlckNhc2UoKSxufWZ1bmN0aW9uIG8oZSl7
aWYoc1tlXSlyZXR1cm4gc1tlXTtpZighYVtlXSlyZXR1cm4gZTt2YXIgdD1hW2VdO2Zvcih2YXIg
biBpbiB0KWlmKHQuaGFzT3duUHJvcGVydHkobikmJm4gaW4gdSlyZXR1cm4gc1tlXT10W25dO3Jl
dHVybiIifXZhciBpPWUoMzkpLGE9e2FuaW1hdGlvbmVuZDpyKCJBbmltYXRpb24iLCJBbmltYXRp
b25FbmQiKSxhbmltYXRpb25pdGVyYXRpb246cigiQW5pbWF0aW9uIiwiQW5pbWF0aW9uSXRlcmF0
aW9uIiksYW5pbWF0aW9uc3RhcnQ6cigiQW5pbWF0aW9uIiwiQW5pbWF0aW9uU3RhcnQiKSx0cmFu
c2l0aW9uZW5kOnIoIlRyYW5zaXRpb24iLCJUcmFuc2l0aW9uRW5kIil9LHM9e30sdT17fTtpLmNh
blVzZURPTSYmKHU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iikuc3R5bGUsIkFuaW1hdGlv
bkV2ZW50ImluIHdpbmRvd3x8KGRlbGV0ZSBhLmFuaW1hdGlvbmVuZC5hbmltYXRpb24sZGVsZXRl
IGEuYW5pbWF0aW9uaXRlcmF0aW9uLmFuaW1hdGlvbixkZWxldGUgYS5hbmltYXRpb25zdGFydC5h
bmltYXRpb24pLCJUcmFuc2l0aW9uRXZlbnQiaW4gd2luZG93fHxkZWxldGUgYS50cmFuc2l0aW9u
ZW5kLnRyYW5zaXRpb24pLHQuZXhwb3J0cz1vfSx7Mzk6Mzl9XSwyOltmdW5jdGlvbihlLHQsbil7
InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7dmFyIHQ9eyI9IjoiPTAiLCI6IjoiPTIifTtyZXR1
cm4iJCIrKCIiK2UpLnJlcGxhY2UoL1s9Ol0vZyxmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0pfWZ1
bmN0aW9uIG8oZSl7dmFyIHQ9eyI9MCI6Ij0iLCI9MiI6IjoifTtyZXR1cm4oIiIrKCIuIj09PWVb
MF0mJiIkIj09PWVbMV0/ZS5zdWJzdHJpbmcoMik6ZS5zdWJzdHJpbmcoMSkpKS5yZXBsYWNlKC8o
PTB8PTIpL2csZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19KX12YXIgaT17ZXNjYXBlOnIsdW5lc2Nh
cGU6b307dC5leHBvcnRzPWl9LHt9XSwzOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3Zh
ciByPWUoMTgpLG89ZSgyMyksaT17bGlua1N0YXRlOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgcih0
aGlzLnN0YXRlW2VdLG8uY3JlYXRlU3RhdGVLZXlTZXR0ZXIodGhpcyxlKSl9fTt0LmV4cG9ydHM9
aX0sezE4OjE4LDIzOjIzfV0sNDpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1l
KDM0KSxvPShlKDQyKSxmdW5jdGlvbihlKXt2YXIgdD10aGlzO2lmKHQuaW5zdGFuY2VQb29sLmxl
bmd0aCl7dmFyIG49dC5pbnN0YW5jZVBvb2wucG9wKCk7cmV0dXJuIHQuY2FsbChuLGUpLG59cmV0
dXJuIG5ldyB0KGUpfSksaT1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXM7aWYobi5pbnN0YW5jZVBv
b2wubGVuZ3RoKXt2YXIgcj1uLmluc3RhbmNlUG9vbC5wb3AoKTtyZXR1cm4gbi5jYWxsKHIsZSx0
KSxyfXJldHVybiBuZXcgbihlLHQpfSxhPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzO2lmKHIu
aW5zdGFuY2VQb29sLmxlbmd0aCl7dmFyIG89ci5pbnN0YW5jZVBvb2wucG9wKCk7cmV0dXJuIHIu
Y2FsbChvLGUsdCxuKSxvfXJldHVybiBuZXcgcihlLHQsbil9LHM9ZnVuY3Rpb24oZSx0LG4scil7
dmFyIG89dGhpcztpZihvLmluc3RhbmNlUG9vbC5sZW5ndGgpe3ZhciBpPW8uaW5zdGFuY2VQb29s
LnBvcCgpO3JldHVybiBvLmNhbGwoaSxlLHQsbixyKSxpfXJldHVybiBuZXcgbyhlLHQsbixyKX0s
dT1mdW5jdGlvbihlKXt2YXIgdD10aGlzO2UgaW5zdGFuY2VvZiB0fHxyKCIyNSIpLGUuZGVzdHJ1
Y3RvcigpLHQuaW5zdGFuY2VQb29sLmxlbmd0aDx0LnBvb2xTaXplJiZ0Lmluc3RhbmNlUG9vbC5w
dXNoKGUpfSxjPW8scD1mdW5jdGlvbihlLHQpe3ZhciBuPWU7cmV0dXJuIG4uaW5zdGFuY2VQb29s
PVtdLG4uZ2V0UG9vbGVkPXR8fGMsbi5wb29sU2l6ZXx8KG4ucG9vbFNpemU9MTApLG4ucmVsZWFz
ZT11LG59LGw9e2FkZFBvb2xpbmdUbzpwLG9uZUFyZ3VtZW50UG9vbGVyOm8sdHdvQXJndW1lbnRQ
b29sZXI6aSx0aHJlZUFyZ3VtZW50UG9vbGVyOmEsZm91ckFyZ3VtZW50UG9vbGVyOnN9O3QuZXhw
b3J0cz1sfSx7MzQ6MzQsNDI6NDJ9XSw1OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3Zh
ciByPWUoNDUpLG89ZSg5KSxpPWUoMTEpLGE9ZSgyMikscz1lKDEwKSx1PWUoMTQpLGM9ZSgxNSks
cD1lKDIxKSxsPWUoMjcpLGY9ZSgzMyksZD0oZSg0NCksYy5jcmVhdGVFbGVtZW50KSxoPWMuY3Jl
YXRlRmFjdG9yeSx5PWMuY2xvbmVFbGVtZW50LHY9cixtPXtDaGlsZHJlbjp7bWFwOm8ubWFwLGZv
ckVhY2g6by5mb3JFYWNoLGNvdW50Om8uY291bnQsdG9BcnJheTpvLnRvQXJyYXksb25seTpmfSxD
b21wb25lbnQ6aSxQdXJlQ29tcG9uZW50OmEsY3JlYXRlRWxlbWVudDpkLGNsb25lRWxlbWVudDp5
LGlzVmFsaWRFbGVtZW50OmMuaXNWYWxpZEVsZW1lbnQsUHJvcFR5cGVzOnAsY3JlYXRlQ2xhc3M6
cy5jcmVhdGVDbGFzcyxjcmVhdGVGYWN0b3J5OmgsY3JlYXRlTWl4aW46ZnVuY3Rpb24oZSl7cmV0
dXJuIGV9LERPTTp1LHZlcnNpb246bCxfX3NwcmVhZDp2fTt0LmV4cG9ydHM9bX0sezEwOjEwLDEx
OjExLDE0OjE0LDE1OjE1LDIxOjIxLDIyOjIyLDI3OjI3LDMzOjMzLDQ0OjQ0LDQ1OjQ1LDk6OX1d
LDY6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcigpe2lmKCFvKXt2YXIg
dD1lKDI5KTtvPXQuX19TRUNSRVRfSU5KRUNURURfUkVBQ1RfRE9NX0RPX05PVF9VU0VfT1JfWU9V
X1dJTExfQkVfRklSRUR9cmV0dXJuIG99dmFyIG87bi5nZXRSZWFjdERPTT1yfSx7Mjk6Mjl9XSw3
OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtpZighKGUgaW5z
dGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEg
ZnVuY3Rpb24iKX1mdW5jdGlvbiBvKGUsdCl7aWYoIWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9y
KCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxs
ZWQiKTtyZXR1cm4hdHx8Im9iamVjdCIhPXR5cGVvZiB0JiYiZnVuY3Rpb24iIT10eXBlb2YgdD9l
OnR9ZnVuY3Rpb24gaShlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJv
dyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3Ig
YSBmdW5jdGlvbiwgbm90ICIrdHlwZW9mIHQpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYm
dC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLGVudW1lcmFibGU6ITEsd3JpdGFibGU6
ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJihPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNl
dFByb3RvdHlwZU9mKGUsdCk6ZS5fX3Byb3RvX189dCl9ZnVuY3Rpb24gYShlKXt2YXIgdD0idHJh
bnNpdGlvbiIrZSsiVGltZW91dCIsbj0idHJhbnNpdGlvbiIrZTtyZXR1cm4gZnVuY3Rpb24oZSl7
aWYoZVtuXSl7aWYobnVsbD09ZVt0XSlyZXR1cm4gbmV3IEVycm9yKHQrIiB3YXNuJ3Qgc3VwcGxp
ZWQgdG8gUmVhY3RDU1NUcmFuc2l0aW9uR3JvdXA6IHRoaXMgY2FuIGNhdXNlIHVucmVsaWFibGUg
YW5pbWF0aW9ucyBhbmQgd29uJ3QgYmUgc3VwcG9ydGVkIGluIGEgZnV0dXJlIHZlcnNpb24gb2Yg
UmVhY3QuIFNlZSBodHRwczovL2ZiLm1lL3JlYWN0LWFuaW1hdGlvbi10cmFuc2l0aW9uLWdyb3Vw
LXRpbWVvdXQgZm9yIG1vcmUgaW5mb3JtYXRpb24uIik7aWYoIm51bWJlciIhPXR5cGVvZiBlW3Rd
KXJldHVybiBuZXcgRXJyb3IodCsiIG11c3QgYmUgYSBudW1iZXIgKGluIG1pbGxpc2Vjb25kcyki
KX19fXZhciBzPWUoNDUpLHU9ZSg1KSxjPWUoNDcpLHA9Yyh1LmlzVmFsaWRFbGVtZW50KSxsPWUo
MjYpLGY9ZSg4KSxkPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgbixpLGE7cih0aGlzLHQp
O2Zvcih2YXIgcz1hcmd1bWVudHMubGVuZ3RoLGM9QXJyYXkocykscD0wO3A8cztwKyspY1twXT1h
cmd1bWVudHNbcF07cmV0dXJuIG49aT1vKHRoaXMsZS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNh
dChjKSkpLGkuX3dyYXBDaGlsZD1mdW5jdGlvbihlKXtyZXR1cm4gdS5jcmVhdGVFbGVtZW50KGYs
e25hbWU6aS5wcm9wcy50cmFuc2l0aW9uTmFtZSxhcHBlYXI6aS5wcm9wcy50cmFuc2l0aW9uQXBw
ZWFyLGVudGVyOmkucHJvcHMudHJhbnNpdGlvbkVudGVyLGxlYXZlOmkucHJvcHMudHJhbnNpdGlv
bkxlYXZlLGFwcGVhclRpbWVvdXQ6aS5wcm9wcy50cmFuc2l0aW9uQXBwZWFyVGltZW91dCxlbnRl
clRpbWVvdXQ6aS5wcm9wcy50cmFuc2l0aW9uRW50ZXJUaW1lb3V0LGxlYXZlVGltZW91dDppLnBy
b3BzLnRyYW5zaXRpb25MZWF2ZVRpbWVvdXR9LGUpfSxhPW4sbyhpLGEpfXJldHVybiBpKHQsZSks
dC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHUuY3JlYXRlRWxlbWVudChsLHMo
e30sdGhpcy5wcm9wcyx7Y2hpbGRGYWN0b3J5OnRoaXMuX3dyYXBDaGlsZH0pKX0sdH0odS5Db21w
b25lbnQpO2QuZGlzcGxheU5hbWU9IlJlYWN0Q1NTVHJhbnNpdGlvbkdyb3VwIixkLnByb3BUeXBl
cz17dHJhbnNpdGlvbk5hbWU6Zi5wcm9wVHlwZXMubmFtZSx0cmFuc2l0aW9uQXBwZWFyOnAuYm9v
bCx0cmFuc2l0aW9uRW50ZXI6cC5ib29sLHRyYW5zaXRpb25MZWF2ZTpwLmJvb2wsdHJhbnNpdGlv
bkFwcGVhclRpbWVvdXQ6YSgiQXBwZWFyIiksdHJhbnNpdGlvbkVudGVyVGltZW91dDphKCJFbnRl
ciIpLHRyYW5zaXRpb25MZWF2ZVRpbWVvdXQ6YSgiTGVhdmUiKX0sZC5kZWZhdWx0UHJvcHM9e3Ry
YW5zaXRpb25BcHBlYXI6ITEsdHJhbnNpdGlvbkVudGVyOiEwLHRyYW5zaXRpb25MZWF2ZTohMH0s
dC5leHBvcnRzPWR9LHsyNjoyNiw0NTo0NSw0Nzo0Nyw1OjUsODo4fV0sODpbZnVuY3Rpb24oZSx0
LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhy
b3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVu
Y3Rpb24gbyhlLHQpe2lmKCFlKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3Qg
YmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIXR8
fCJvYmplY3QiIT10eXBlb2YgdCYmImZ1bmN0aW9uIiE9dHlwZW9mIHQ/ZTp0fWZ1bmN0aW9uIGko
ZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJv
cigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5v
dCAiK3R5cGVvZiB0KTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtj
b25zdHJ1Y3Rvcjp7dmFsdWU6ZSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJs
ZTohMH19KSx0JiYoT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihl
LHQpOmUuX19wcm90b19fPXQpfXZhciBhPWUoNSkscz1lKDYpLHU9ZSg0NyksYz11KGEuaXNWYWxp
ZEVsZW1lbnQpLHA9ZSgzOCksbD1lKDI1KSxmPWUoMzMpLGQ9MTcsaD1mdW5jdGlvbihlKXtmdW5j
dGlvbiB0KCl7dmFyIG4saSxhO3IodGhpcyx0KTtmb3IodmFyIHU9YXJndW1lbnRzLmxlbmd0aCxj
PUFycmF5KHUpLGY9MDtmPHU7ZisrKWNbZl09YXJndW1lbnRzW2ZdO3JldHVybiBuPWk9byh0aGlz
LGUuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQoYykpKSxpLl9pc01vdW50ZWQ9ITEsaS50cmFu
c2l0aW9uPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1zLmdldFJlYWN0RE9NKCkuZmluZERPTU5vZGUo
aSk7aWYoIXIpcmV0dXJuIHZvaWQodCYmdCgpKTt2YXIgbz1pLnByb3BzLm5hbWVbZV18fGkucHJv
cHMubmFtZSsiLSIrZSxhPWkucHJvcHMubmFtZVtlKyJBY3RpdmUiXXx8bysiLWFjdGl2ZSIsdT1u
dWxsLGM9ZnVuY3Rpb24oZSl7ZSYmZS50YXJnZXQhPT1yfHwoY2xlYXJUaW1lb3V0KHUpLHAucmVt
b3ZlQ2xhc3MocixvKSxwLnJlbW92ZUNsYXNzKHIsYSksbC5yZW1vdmVFbmRFdmVudExpc3RlbmVy
KHIsYyksdCYmdCgpKX07cC5hZGRDbGFzcyhyLG8pLGkucXVldWVDbGFzc0FuZE5vZGUoYSxyKSxu
Pyh1PXNldFRpbWVvdXQoYyxuKSxpLnRyYW5zaXRpb25UaW1lb3V0cy5wdXNoKHUpKTpsLmFkZEVu
ZEV2ZW50TGlzdGVuZXIocixjKX0saS5xdWV1ZUNsYXNzQW5kTm9kZT1mdW5jdGlvbihlLHQpe2ku
Y2xhc3NOYW1lQW5kTm9kZVF1ZXVlLnB1c2goe2NsYXNzTmFtZTplLG5vZGU6dH0pLGkudGltZW91
dHx8KGkudGltZW91dD1zZXRUaW1lb3V0KGkuZmx1c2hDbGFzc05hbWVBbmROb2RlUXVldWUsZCkp
fSxpLmZsdXNoQ2xhc3NOYW1lQW5kTm9kZVF1ZXVlPWZ1bmN0aW9uKCl7aS5faXNNb3VudGVkJiZp
LmNsYXNzTmFtZUFuZE5vZGVRdWV1ZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3AuYWRkQ2xhc3MoZS5u
b2RlLGUuY2xhc3NOYW1lKX0pLGkuY2xhc3NOYW1lQW5kTm9kZVF1ZXVlLmxlbmd0aD0wLGkudGlt
ZW91dD1udWxsfSxpLmNvbXBvbmVudFdpbGxBcHBlYXI9ZnVuY3Rpb24oZSl7aS5wcm9wcy5hcHBl
YXI/aS50cmFuc2l0aW9uKCJhcHBlYXIiLGUsaS5wcm9wcy5hcHBlYXJUaW1lb3V0KTplKCl9LGku
Y29tcG9uZW50V2lsbEVudGVyPWZ1bmN0aW9uKGUpe2kucHJvcHMuZW50ZXI/aS50cmFuc2l0aW9u
KCJlbnRlciIsZSxpLnByb3BzLmVudGVyVGltZW91dCk6ZSgpfSxpLmNvbXBvbmVudFdpbGxMZWF2
ZT1mdW5jdGlvbihlKXtpLnByb3BzLmxlYXZlP2kudHJhbnNpdGlvbigibGVhdmUiLGUsaS5wcm9w
cy5sZWF2ZVRpbWVvdXQpOmUoKX0sYT1uLG8oaSxhKX1yZXR1cm4gaSh0LGUpLHQucHJvdG90eXBl
LmNvbXBvbmVudFdpbGxNb3VudD1mdW5jdGlvbigpe3RoaXMuY2xhc3NOYW1lQW5kTm9kZVF1ZXVl
PVtdLHRoaXMudHJhbnNpdGlvblRpbWVvdXRzPVtdfSx0LnByb3RvdHlwZS5jb21wb25lbnREaWRN
b3VudD1mdW5jdGlvbigpe3RoaXMuX2lzTW91bnRlZD0hMH0sdC5wcm90b3R5cGUuY29tcG9uZW50
V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXt0aGlzLl9pc01vdW50ZWQ9ITEsdGhpcy50aW1lb3V0JiZj
bGVhclRpbWVvdXQodGhpcy50aW1lb3V0KSx0aGlzLnRyYW5zaXRpb25UaW1lb3V0cy5mb3JFYWNo
KGZ1bmN0aW9uKGUpe2NsZWFyVGltZW91dChlKX0pLHRoaXMuY2xhc3NOYW1lQW5kTm9kZVF1ZXVl
Lmxlbmd0aD0wfSx0LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtyZXR1cm4gZih0aGlzLnBy
b3BzLmNoaWxkcmVuKX0sdH0oYS5Db21wb25lbnQpO2gucHJvcFR5cGVzPXtuYW1lOmMub25lT2ZU
eXBlKFtjLnN0cmluZyxjLnNoYXBlKHtlbnRlcjpjLnN0cmluZyxsZWF2ZTpjLnN0cmluZyxhY3Rp
dmU6Yy5zdHJpbmd9KSxjLnNoYXBlKHtlbnRlcjpjLnN0cmluZyxlbnRlckFjdGl2ZTpjLnN0cmlu
ZyxsZWF2ZTpjLnN0cmluZyxsZWF2ZUFjdGl2ZTpjLnN0cmluZyxhcHBlYXI6Yy5zdHJpbmcsYXBw
ZWFyQWN0aXZlOmMuc3RyaW5nfSldKS5pc1JlcXVpcmVkLGFwcGVhcjpjLmJvb2wsZW50ZXI6Yy5i
b29sLGxlYXZlOmMuYm9vbCxhcHBlYXJUaW1lb3V0OmMubnVtYmVyLGVudGVyVGltZW91dDpjLm51
bWJlcixsZWF2ZVRpbWVvdXQ6Yy5udW1iZXJ9LHQuZXhwb3J0cz1ofSx7MjU6MjUsMzM6MzMsMzg6
MzgsNDc6NDcsNTo1LDY6Nn1dLDk6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rp
b24gcihlKXtyZXR1cm4oIiIrZSkucmVwbGFjZShiLCIkJi8iKX1mdW5jdGlvbiBvKGUsdCl7dGhp
cy5mdW5jPWUsdGhpcy5jb250ZXh0PXQsdGhpcy5jb3VudD0wfWZ1bmN0aW9uIGkoZSx0LG4pe3Zh
ciByPWUuZnVuYyxvPWUuY29udGV4dDtyLmNhbGwobyx0LGUuY291bnQrKyl9ZnVuY3Rpb24gYShl
LHQsbil7aWYobnVsbD09ZSlyZXR1cm4gZTt2YXIgcj1vLmdldFBvb2xlZCh0LG4pO20oZSxpLHIp
LG8ucmVsZWFzZShyKX1mdW5jdGlvbiBzKGUsdCxuLHIpe3RoaXMucmVzdWx0PWUsdGhpcy5rZXlQ
cmVmaXg9dCx0aGlzLmZ1bmM9bix0aGlzLmNvbnRleHQ9cix0aGlzLmNvdW50PTB9ZnVuY3Rpb24g
dShlLHQsbil7dmFyIG89ZS5yZXN1bHQsaT1lLmtleVByZWZpeCxhPWUuZnVuYyxzPWUuY29udGV4
dCx1PWEuY2FsbChzLHQsZS5jb3VudCsrKTtBcnJheS5pc0FycmF5KHUpP2ModSxvLG4sdi50aGF0
UmV0dXJuc0FyZ3VtZW50KTpudWxsIT11JiYoeS5pc1ZhbGlkRWxlbWVudCh1KSYmKHU9eS5jbG9u
ZUFuZFJlcGxhY2VLZXkodSxpKyghdS5rZXl8fHQmJnQua2V5PT09dS5rZXk/IiI6cih1LmtleSkr
Ii8iKStuKSksby5wdXNoKHUpKX1mdW5jdGlvbiBjKGUsdCxuLG8saSl7dmFyIGE9IiI7bnVsbCE9
biYmKGE9cihuKSsiLyIpO3ZhciBjPXMuZ2V0UG9vbGVkKHQsYSxvLGkpO20oZSx1LGMpLHMucmVs
ZWFzZShjKX1mdW5jdGlvbiBwKGUsdCxuKXtpZihudWxsPT1lKXJldHVybiBlO3ZhciByPVtdO3Jl
dHVybiBjKGUscixudWxsLHQsbikscn1mdW5jdGlvbiBsKGUsdCxuKXtyZXR1cm4gbnVsbH1mdW5j
dGlvbiBmKGUsdCl7cmV0dXJuIG0oZSxsLG51bGwpfWZ1bmN0aW9uIGQoZSl7dmFyIHQ9W107cmV0
dXJuIGMoZSx0LG51bGwsdi50aGF0UmV0dXJuc0FyZ3VtZW50KSx0fXZhciBoPWUoNCkseT1lKDE1
KSx2PWUoNDApLG09ZSgzNiksRT1oLnR3b0FyZ3VtZW50UG9vbGVyLGc9aC5mb3VyQXJndW1lbnRQ
b29sZXIsYj0vXC8rL2c7by5wcm90b3R5cGUuZGVzdHJ1Y3Rvcj1mdW5jdGlvbigpe3RoaXMuZnVu
Yz1udWxsLHRoaXMuY29udGV4dD1udWxsLHRoaXMuY291bnQ9MH0saC5hZGRQb29saW5nVG8obyxF
KSxzLnByb3RvdHlwZS5kZXN0cnVjdG9yPWZ1bmN0aW9uKCl7dGhpcy5yZXN1bHQ9bnVsbCx0aGlz
LmtleVByZWZpeD1udWxsLHRoaXMuZnVuYz1udWxsLHRoaXMuY29udGV4dD1udWxsLHRoaXMuY291
bnQ9MH0saC5hZGRQb29saW5nVG8ocyxnKTt2YXIgXz17Zm9yRWFjaDphLG1hcDpwLG1hcEludG9X
aXRoS2V5UHJlZml4SW50ZXJuYWw6Yyxjb3VudDpmLHRvQXJyYXk6ZH07dC5leHBvcnRzPV99LHsx
NToxNSwzNjozNiw0OjQsNDA6NDB9XSwxMDpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijtm
dW5jdGlvbiByKGUpe3JldHVybiBlfWZ1bmN0aW9uIG8oZSx0KXt2YXIgbj1iLmhhc093blByb3Bl
cnR5KHQpP2JbdF06bnVsbDt3Lmhhc093blByb3BlcnR5KHQpJiYiT1ZFUlJJREVfQkFTRSIhPT1u
JiZmKCI3MyIsdCksZSYmIkRFRklORV9NQU5ZIiE9PW4mJiJERUZJTkVfTUFOWV9NRVJHRUQiIT09
biYmZigiNzQiLHQpfWZ1bmN0aW9uIGkoZSx0KXtpZih0KXsiZnVuY3Rpb24iPT10eXBlb2YgdCYm
ZigiNzUiKSx5LmlzVmFsaWRFbGVtZW50KHQpJiZmKCI3NiIpO3ZhciBuPWUucHJvdG90eXBlLHI9
bi5fX3JlYWN0QXV0b0JpbmRQYWlyczt0Lmhhc093blByb3BlcnR5KEUpJiZfLm1peGlucyhlLHQu
bWl4aW5zKTtmb3IodmFyIGkgaW4gdClpZih0Lmhhc093blByb3BlcnR5KGkpJiZpIT09RSl7dmFy
IGE9dFtpXSxzPW4uaGFzT3duUHJvcGVydHkoaSk7aWYobyhzLGkpLF8uaGFzT3duUHJvcGVydHko
aSkpX1tpXShlLGEpO2Vsc2V7dmFyIHA9Yi5oYXNPd25Qcm9wZXJ0eShpKSxsPSJmdW5jdGlvbiI9
PXR5cGVvZiBhLGQ9bCYmIXAmJiFzJiYhMSE9PXQuYXV0b2JpbmQ7aWYoZClyLnB1c2goaSxhKSxu
W2ldPWE7ZWxzZSBpZihzKXt2YXIgaD1iW2ldOyghcHx8IkRFRklORV9NQU5ZX01FUkdFRCIhPT1o
JiYiREVGSU5FX01BTlkiIT09aCkmJmYoIjc3IixoLGkpLCJERUZJTkVfTUFOWV9NRVJHRUQiPT09
aD9uW2ldPXUobltpXSxhKToiREVGSU5FX01BTlkiPT09aCYmKG5baV09YyhuW2ldLGEpKX1lbHNl
IG5baV09YX19fX1mdW5jdGlvbiBhKGUsdCl7aWYodClmb3IodmFyIG4gaW4gdCl7dmFyIHI9dFtu
XTtpZih0Lmhhc093blByb3BlcnR5KG4pKXt2YXIgbz1uIGluIF87byYmZigiNzgiLG4pO3ZhciBp
PW4gaW4gZTtpJiZmKCI3OSIsbiksZVtuXT1yfX19ZnVuY3Rpb24gcyhlLHQpe2UmJnQmJiJvYmpl
Y3QiPT10eXBlb2YgZSYmIm9iamVjdCI9PXR5cGVvZiB0fHxmKCI4MCIpO2Zvcih2YXIgbiBpbiB0
KXQuaGFzT3duUHJvcGVydHkobikmJih2b2lkIDAhPT1lW25dJiZmKCI4MSIsbiksZVtuXT10W25d
KTtyZXR1cm4gZX1mdW5jdGlvbiB1KGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49ZS5hcHBs
eSh0aGlzLGFyZ3VtZW50cykscj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtpZihudWxsPT1uKXJl
dHVybiByO2lmKG51bGw9PXIpcmV0dXJuIG47dmFyIG89e307cmV0dXJuIHMobyxuKSxzKG8sciks
b319ZnVuY3Rpb24gYyhlLHQpe3JldHVybiBmdW5jdGlvbigpe2UuYXBwbHkodGhpcyxhcmd1bWVu
dHMpLHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBwKGUsdCl7cmV0dXJuIHQuYmlu
ZChlKX1mdW5jdGlvbiBsKGUpe2Zvcih2YXIgdD1lLl9fcmVhY3RBdXRvQmluZFBhaXJzLG49MDtu
PHQubGVuZ3RoO24rPTIpe3ZhciByPXRbbl0sbz10W24rMV07ZVtyXT1wKGUsbyl9fXZhciBmPWUo
MzQpLGQ9ZSg0NSksaD1lKDExKSx5PWUoMTUpLHY9KGUoMjApLGUoMTkpKSxtPWUoNDEpLEU9KGUo
NDIpLGUoNDQpLCJtaXhpbnMiKSxnPVtdLGI9e21peGluczoiREVGSU5FX01BTlkiLHN0YXRpY3M6
IkRFRklORV9NQU5ZIixwcm9wVHlwZXM6IkRFRklORV9NQU5ZIixjb250ZXh0VHlwZXM6IkRFRklO
RV9NQU5ZIixjaGlsZENvbnRleHRUeXBlczoiREVGSU5FX01BTlkiLGdldERlZmF1bHRQcm9wczoi
REVGSU5FX01BTllfTUVSR0VEIixnZXRJbml0aWFsU3RhdGU6IkRFRklORV9NQU5ZX01FUkdFRCIs
Z2V0Q2hpbGRDb250ZXh0OiJERUZJTkVfTUFOWV9NRVJHRUQiLHJlbmRlcjoiREVGSU5FX09OQ0Ui
LGNvbXBvbmVudFdpbGxNb3VudDoiREVGSU5FX01BTlkiLGNvbXBvbmVudERpZE1vdW50OiJERUZJ
TkVfTUFOWSIsY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wczoiREVGSU5FX01BTlkiLHNob3VsZENv
bXBvbmVudFVwZGF0ZToiREVGSU5FX09OQ0UiLGNvbXBvbmVudFdpbGxVcGRhdGU6IkRFRklORV9N
QU5ZIixjb21wb25lbnREaWRVcGRhdGU6IkRFRklORV9NQU5ZIixjb21wb25lbnRXaWxsVW5tb3Vu
dDoiREVGSU5FX01BTlkiLHVwZGF0ZUNvbXBvbmVudDoiT1ZFUlJJREVfQkFTRSJ9LF89e2Rpc3Bs
YXlOYW1lOmZ1bmN0aW9uKGUsdCl7ZS5kaXNwbGF5TmFtZT10fSxtaXhpbnM6ZnVuY3Rpb24oZSx0
KXtpZih0KWZvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKWkoZSx0W25dKX0sY2hpbGRDb250ZXh0
VHlwZXM6ZnVuY3Rpb24oZSx0KXtlLmNoaWxkQ29udGV4dFR5cGVzPWQoe30sZS5jaGlsZENvbnRl
eHRUeXBlcyx0KX0sY29udGV4dFR5cGVzOmZ1bmN0aW9uKGUsdCl7ZS5jb250ZXh0VHlwZXM9ZCh7
fSxlLmNvbnRleHRUeXBlcyx0KX0sZ2V0RGVmYXVsdFByb3BzOmZ1bmN0aW9uKGUsdCl7ZS5nZXRE
ZWZhdWx0UHJvcHM/ZS5nZXREZWZhdWx0UHJvcHM9dShlLmdldERlZmF1bHRQcm9wcyx0KTplLmdl
dERlZmF1bHRQcm9wcz10fSxwcm9wVHlwZXM6ZnVuY3Rpb24oZSx0KXtlLnByb3BUeXBlcz1kKHt9
LGUucHJvcFR5cGVzLHQpfSxzdGF0aWNzOmZ1bmN0aW9uKGUsdCl7YShlLHQpfSxhdXRvYmluZDpm
dW5jdGlvbigpe319LHc9e3JlcGxhY2VTdGF0ZTpmdW5jdGlvbihlLHQpe3RoaXMudXBkYXRlci5l
bnF1ZXVlUmVwbGFjZVN0YXRlKHRoaXMsZSksdCYmdGhpcy51cGRhdGVyLmVucXVldWVDYWxsYmFj
ayh0aGlzLHQsInJlcGxhY2VTdGF0ZSIpfSxpc01vdW50ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhp
cy51cGRhdGVyLmlzTW91bnRlZCh0aGlzKX19LEE9ZnVuY3Rpb24oKXt9O2QoQS5wcm90b3R5cGUs
aC5wcm90b3R5cGUsdyk7dmFyIFQ9e2NyZWF0ZUNsYXNzOmZ1bmN0aW9uKGUpe3ZhciB0PXIoZnVu
Y3Rpb24oZSxuLHIpe3RoaXMuX19yZWFjdEF1dG9CaW5kUGFpcnMubGVuZ3RoJiZsKHRoaXMpLHRo
aXMucHJvcHM9ZSx0aGlzLmNvbnRleHQ9bix0aGlzLnJlZnM9bSx0aGlzLnVwZGF0ZXI9cnx8dix0
aGlzLnN0YXRlPW51bGw7dmFyIG89dGhpcy5nZXRJbml0aWFsU3RhdGU/dGhpcy5nZXRJbml0aWFs
U3RhdGUoKTpudWxsOygib2JqZWN0IiE9dHlwZW9mIG98fEFycmF5LmlzQXJyYXkobykpJiZmKCI4
MiIsdC5kaXNwbGF5TmFtZXx8IlJlYWN0Q29tcG9zaXRlQ29tcG9uZW50IiksdGhpcy5zdGF0ZT1v
fSk7dC5wcm90b3R5cGU9bmV3IEEsdC5wcm90b3R5cGUuY29uc3RydWN0b3I9dCx0LnByb3RvdHlw
ZS5fX3JlYWN0QXV0b0JpbmRQYWlycz1bXSxnLmZvckVhY2goaS5iaW5kKG51bGwsdCkpLGkodCxl
KSx0LmdldERlZmF1bHRQcm9wcyYmKHQuZGVmYXVsdFByb3BzPXQuZ2V0RGVmYXVsdFByb3BzKCkp
LHQucHJvdG90eXBlLnJlbmRlcnx8ZigiODMiKTtmb3IodmFyIG4gaW4gYil0LnByb3RvdHlwZVtu
XXx8KHQucHJvdG90eXBlW25dPW51bGwpO3JldHVybiB0fSxpbmplY3Rpb246e2luamVjdE1peGlu
OmZ1bmN0aW9uKGUpe2cucHVzaChlKX19fTt0LmV4cG9ydHM9VH0sezExOjExLDE1OjE1LDE5OjE5
LDIwOjIwLDM0OjM0LDQxOjQxLDQyOjQyLDQ0OjQ0LDQ1OjQ1fV0sMTE6W2Z1bmN0aW9uKGUsdCxu
KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbil7dGhpcy5wcm9wcz1lLHRoaXMuY29udGV4
dD10LHRoaXMucmVmcz1hLHRoaXMudXBkYXRlcj1ufHxpfXZhciBvPWUoMzQpLGk9ZSgxOSksYT0o
ZSgzMCksZSg0MSkpO2UoNDIpLGUoNDQpO3IucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9e30s
ci5wcm90b3R5cGUuc2V0U3RhdGU9ZnVuY3Rpb24oZSx0KXsib2JqZWN0IiE9dHlwZW9mIGUmJiJm
dW5jdGlvbiIhPXR5cGVvZiBlJiZudWxsIT1lJiZvKCI4NSIpLHRoaXMudXBkYXRlci5lbnF1ZXVl
U2V0U3RhdGUodGhpcyxlKSx0JiZ0aGlzLnVwZGF0ZXIuZW5xdWV1ZUNhbGxiYWNrKHRoaXMsdCwi
c2V0U3RhdGUiKX0sci5wcm90b3R5cGUuZm9yY2VVcGRhdGU9ZnVuY3Rpb24oZSl7dGhpcy51cGRh
dGVyLmVucXVldWVGb3JjZVVwZGF0ZSh0aGlzKSxlJiZ0aGlzLnVwZGF0ZXIuZW5xdWV1ZUNhbGxi
YWNrKHRoaXMsZSwiZm9yY2VVcGRhdGUiKX07dC5leHBvcnRzPXJ9LHsxOToxOSwzMDozMCwzNDoz
NCw0MTo0MSw0Mjo0Miw0NDo0NH1dLDEyOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3Zh
ciByPWUoMzUpLG89e3Nob3VsZENvbXBvbmVudFVwZGF0ZTpmdW5jdGlvbihlLHQpe3JldHVybiBy
KHRoaXMsZSx0KX19O3QuZXhwb3J0cz1vfSx7MzU6MzV9XSwxMzpbZnVuY3Rpb24oZSx0LG4peyJ1
c2Ugc3RyaWN0Ijt2YXIgcj17Y3VycmVudDpudWxsfTt0LmV4cG9ydHM9cn0se31dLDE0OltmdW5j
dGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPWUoMTUpLG89ci5jcmVhdGVGYWN0b3J5LGk9
e2E6bygiYSIpLGFiYnI6bygiYWJiciIpLGFkZHJlc3M6bygiYWRkcmVzcyIpLGFyZWE6bygiYXJl
YSIpLGFydGljbGU6bygiYXJ0aWNsZSIpLGFzaWRlOm8oImFzaWRlIiksYXVkaW86bygiYXVkaW8i
KSxiOm8oImIiKSxiYXNlOm8oImJhc2UiKSxiZGk6bygiYmRpIiksYmRvOm8oImJkbyIpLGJpZzpv
KCJiaWciKSxibG9ja3F1b3RlOm8oImJsb2NrcXVvdGUiKSxib2R5Om8oImJvZHkiKSxicjpvKCJi
ciIpLGJ1dHRvbjpvKCJidXR0b24iKSxjYW52YXM6bygiY2FudmFzIiksY2FwdGlvbjpvKCJjYXB0
aW9uIiksY2l0ZTpvKCJjaXRlIiksY29kZTpvKCJjb2RlIiksY29sOm8oImNvbCIpLGNvbGdyb3Vw
Om8oImNvbGdyb3VwIiksZGF0YTpvKCJkYXRhIiksZGF0YWxpc3Q6bygiZGF0YWxpc3QiKSxkZDpv
KCJkZCIpLGRlbDpvKCJkZWwiKSxkZXRhaWxzOm8oImRldGFpbHMiKSxkZm46bygiZGZuIiksZGlh
bG9nOm8oImRpYWxvZyIpLGRpdjpvKCJkaXYiKSxkbDpvKCJkbCIpLGR0Om8oImR0IiksZW06bygi
ZW0iKSxlbWJlZDpvKCJlbWJlZCIpLGZpZWxkc2V0Om8oImZpZWxkc2V0IiksZmlnY2FwdGlvbjpv
KCJmaWdjYXB0aW9uIiksZmlndXJlOm8oImZpZ3VyZSIpLGZvb3RlcjpvKCJmb290ZXIiKSxmb3Jt
Om8oImZvcm0iKSxoMTpvKCJoMSIpLGgyOm8oImgyIiksaDM6bygiaDMiKSxoNDpvKCJoNCIpLGg1
Om8oImg1IiksaDY6bygiaDYiKSxoZWFkOm8oImhlYWQiKSxoZWFkZXI6bygiaGVhZGVyIiksaGdy
b3VwOm8oImhncm91cCIpLGhyOm8oImhyIiksaHRtbDpvKCJodG1sIiksaTpvKCJpIiksaWZyYW1l
Om8oImlmcmFtZSIpLGltZzpvKCJpbWciKSxpbnB1dDpvKCJpbnB1dCIpLGluczpvKCJpbnMiKSxr
YmQ6bygia2JkIiksa2V5Z2VuOm8oImtleWdlbiIpLGxhYmVsOm8oImxhYmVsIiksbGVnZW5kOm8o
ImxlZ2VuZCIpLGxpOm8oImxpIiksbGluazpvKCJsaW5rIiksbWFpbjpvKCJtYWluIiksbWFwOm8o
Im1hcCIpLG1hcms6bygibWFyayIpLG1lbnU6bygibWVudSIpLG1lbnVpdGVtOm8oIm1lbnVpdGVt
IiksbWV0YTpvKCJtZXRhIiksbWV0ZXI6bygibWV0ZXIiKSxuYXY6bygibmF2Iiksbm9zY3JpcHQ6
bygibm9zY3JpcHQiKSxvYmplY3Q6bygib2JqZWN0Iiksb2w6bygib2wiKSxvcHRncm91cDpvKCJv
cHRncm91cCIpLG9wdGlvbjpvKCJvcHRpb24iKSxvdXRwdXQ6bygib3V0cHV0IikscDpvKCJwIiks
cGFyYW06bygicGFyYW0iKSxwaWN0dXJlOm8oInBpY3R1cmUiKSxwcmU6bygicHJlIikscHJvZ3Jl
c3M6bygicHJvZ3Jlc3MiKSxxOm8oInEiKSxycDpvKCJycCIpLHJ0Om8oInJ0IikscnVieTpvKCJy
dWJ5IiksczpvKCJzIiksc2FtcDpvKCJzYW1wIiksc2NyaXB0Om8oInNjcmlwdCIpLHNlY3Rpb246
bygic2VjdGlvbiIpLHNlbGVjdDpvKCJzZWxlY3QiKSxzbWFsbDpvKCJzbWFsbCIpLHNvdXJjZTpv
KCJzb3VyY2UiKSxzcGFuOm8oInNwYW4iKSxzdHJvbmc6bygic3Ryb25nIiksc3R5bGU6bygic3R5
bGUiKSxzdWI6bygic3ViIiksc3VtbWFyeTpvKCJzdW1tYXJ5Iiksc3VwOm8oInN1cCIpLHRhYmxl
Om8oInRhYmxlIiksdGJvZHk6bygidGJvZHkiKSx0ZDpvKCJ0ZCIpLHRleHRhcmVhOm8oInRleHRh
cmVhIiksdGZvb3Q6bygidGZvb3QiKSx0aDpvKCJ0aCIpLHRoZWFkOm8oInRoZWFkIiksdGltZTpv
KCJ0aW1lIiksdGl0bGU6bygidGl0bGUiKSx0cjpvKCJ0ciIpLHRyYWNrOm8oInRyYWNrIiksdTpv
KCJ1IiksdWw6bygidWwiKSx2YXI6bygidmFyIiksdmlkZW86bygidmlkZW8iKSx3YnI6bygid2Jy
IiksY2lyY2xlOm8oImNpcmNsZSIpLGNsaXBQYXRoOm8oImNsaXBQYXRoIiksZGVmczpvKCJkZWZz
IiksZWxsaXBzZTpvKCJlbGxpcHNlIiksZzpvKCJnIiksaW1hZ2U6bygiaW1hZ2UiKSxsaW5lOm8o
ImxpbmUiKSxsaW5lYXJHcmFkaWVudDpvKCJsaW5lYXJHcmFkaWVudCIpLG1hc2s6bygibWFzayIp
LHBhdGg6bygicGF0aCIpLHBhdHRlcm46bygicGF0dGVybiIpLHBvbHlnb246bygicG9seWdvbiIp
LHBvbHlsaW5lOm8oInBvbHlsaW5lIikscmFkaWFsR3JhZGllbnQ6bygicmFkaWFsR3JhZGllbnQi
KSxyZWN0Om8oInJlY3QiKSxzdG9wOm8oInN0b3AiKSxzdmc6bygic3ZnIiksdGV4dDpvKCJ0ZXh0
IiksdHNwYW46bygidHNwYW4iKX07dC5leHBvcnRzPWl9LHsxNToxNX1dLDE1OltmdW5jdGlvbihl
LHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIHZvaWQgMCE9PWUucmVmfWZ1
bmN0aW9uIG8oZSl7cmV0dXJuIHZvaWQgMCE9PWUua2V5fXZhciBpPWUoNDUpLGE9ZSgxMykscz0o
ZSg0NCksZSgzMCksT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSksdT1lKDE2KSxjPXtr
ZXk6ITAscmVmOiEwLF9fc2VsZjohMCxfX3NvdXJjZTohMH0scD1mdW5jdGlvbihlLHQsbixyLG8s
aSxhKXtyZXR1cm57JCR0eXBlb2Y6dSx0eXBlOmUsa2V5OnQscmVmOm4scHJvcHM6YSxfb3duZXI6
aX19O3AuY3JlYXRlRWxlbWVudD1mdW5jdGlvbihlLHQsbil7dmFyIGksdT17fSxsPW51bGwsZj1u
dWxsO2lmKG51bGwhPXQpe3IodCkmJihmPXQucmVmKSxvKHQpJiYobD0iIit0LmtleSksdm9pZCAw
PT09dC5fX3NlbGY/bnVsbDp0Ll9fc2VsZix2b2lkIDA9PT10Ll9fc291cmNlP251bGw6dC5fX3Nv
dXJjZTtmb3IoaSBpbiB0KXMuY2FsbCh0LGkpJiYhYy5oYXNPd25Qcm9wZXJ0eShpKSYmKHVbaV09
dFtpXSl9dmFyIGQ9YXJndW1lbnRzLmxlbmd0aC0yO2lmKDE9PT1kKXUuY2hpbGRyZW49bjtlbHNl
IGlmKGQ+MSl7Zm9yKHZhciBoPUFycmF5KGQpLHk9MDt5PGQ7eSsrKWhbeV09YXJndW1lbnRzW3kr
Ml07dS5jaGlsZHJlbj1ofWlmKGUmJmUuZGVmYXVsdFByb3BzKXt2YXIgdj1lLmRlZmF1bHRQcm9w
cztmb3IoaSBpbiB2KXZvaWQgMD09PXVbaV0mJih1W2ldPXZbaV0pfXJldHVybiBwKGUsbCxmLDAs
MCxhLmN1cnJlbnQsdSl9LHAuY3JlYXRlRmFjdG9yeT1mdW5jdGlvbihlKXt2YXIgdD1wLmNyZWF0
ZUVsZW1lbnQuYmluZChudWxsLGUpO3JldHVybiB0LnR5cGU9ZSx0fSxwLmNsb25lQW5kUmVwbGFj
ZUtleT1mdW5jdGlvbihlLHQpe3JldHVybiBwKGUudHlwZSx0LGUucmVmLGUuX3NlbGYsZS5fc291
cmNlLGUuX293bmVyLGUucHJvcHMpfSxwLmNsb25lRWxlbWVudD1mdW5jdGlvbihlLHQsbil7dmFy
IHUsbD1pKHt9LGUucHJvcHMpLGY9ZS5rZXksZD1lLnJlZixoPShlLl9zZWxmLGUuX3NvdXJjZSxl
Ll9vd25lcik7aWYobnVsbCE9dCl7cih0KSYmKGQ9dC5yZWYsaD1hLmN1cnJlbnQpLG8odCkmJihm
PSIiK3Qua2V5KTt2YXIgeTtlLnR5cGUmJmUudHlwZS5kZWZhdWx0UHJvcHMmJih5PWUudHlwZS5k
ZWZhdWx0UHJvcHMpO2Zvcih1IGluIHQpcy5jYWxsKHQsdSkmJiFjLmhhc093blByb3BlcnR5KHUp
JiYodm9pZCAwPT09dFt1XSYmdm9pZCAwIT09eT9sW3VdPXlbdV06bFt1XT10W3VdKX12YXIgdj1h
cmd1bWVudHMubGVuZ3RoLTI7aWYoMT09PXYpbC5jaGlsZHJlbj1uO2Vsc2UgaWYodj4xKXtmb3Io
dmFyIG09QXJyYXkodiksRT0wO0U8djtFKyspbVtFXT1hcmd1bWVudHNbRSsyXTtsLmNoaWxkcmVu
PW19cmV0dXJuIHAoZS50eXBlLGYsZCwwLDAsaCxsKX0scC5pc1ZhbGlkRWxlbWVudD1mdW5jdGlv
bihlKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGUmJm51bGwhPT1lJiZlLiQkdHlwZW9mPT09dX0s
dC5leHBvcnRzPXB9LHsxMzoxMywxNjoxNiwzMDozMCw0NDo0NCw0NTo0NX1dLDE2OltmdW5jdGlv
bihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5
bWJvbC5mb3ImJlN5bWJvbC5mb3IoInJlYWN0LmVsZW1lbnQiKXx8NjAxMDM7dC5leHBvcnRzPXJ9
LHt9XSwxNzpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKDM0KSxvPWUoOSks
aT1lKDE1KSxhPWUoNDApLHM9KGUoNDIpLGUoNDQpLHtjcmVhdGU6ZnVuY3Rpb24oZSl7aWYoIm9i
amVjdCIhPXR5cGVvZiBlfHwhZXx8QXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZTtpZihpLmlzVmFs
aWRFbGVtZW50KGUpKXJldHVybiBlOzE9PT1lLm5vZGVUeXBlJiZyKCIwIik7dmFyIHQ9W107Zm9y
KHZhciBuIGluIGUpby5tYXBJbnRvV2l0aEtleVByZWZpeEludGVybmFsKGVbbl0sdCxuLGEudGhh
dFJldHVybnNBcmd1bWVudCk7cmV0dXJuIHR9fSk7dC5leHBvcnRzPXN9LHsxNToxNSwzNDozNCw0
MDo0MCw0Mjo0Miw0NDo0NCw5Ojl9XSwxODpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijtm
dW5jdGlvbiByKGUsdCl7dGhpcy52YWx1ZT1lLHRoaXMucmVxdWVzdENoYW5nZT10fWZ1bmN0aW9u
IG8oZSl7dmFyIHQ9e3ZhbHVlOnZvaWQgMD09PWU/aS5Qcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQ6
ZS5pc1JlcXVpcmVkLHJlcXVlc3RDaGFuZ2U6aS5Qcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkfTty
ZXR1cm4gaS5Qcm9wVHlwZXMuc2hhcGUodCl9dmFyIGk9ZSg1KTtyLlByb3BUeXBlcz17bGluazpv
fSx0LmV4cG9ydHM9cn0sezU6NX1dLDE5OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3Zh
ciByPShlKDQ0KSx7aXNNb3VudGVkOmZ1bmN0aW9uKGUpe3JldHVybiExfSxlbnF1ZXVlQ2FsbGJh
Y2s6ZnVuY3Rpb24oZSx0KXt9LGVucXVldWVGb3JjZVVwZGF0ZTpmdW5jdGlvbihlKXt9LGVucXVl
dWVSZXBsYWNlU3RhdGU6ZnVuY3Rpb24oZSx0KXt9LGVucXVldWVTZXRTdGF0ZTpmdW5jdGlvbihl
LHQpe319KTt0LmV4cG9ydHM9cn0sezQ0OjQ0fV0sMjA6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0
cmljdCI7dmFyIHI9e307dC5leHBvcnRzPXJ9LHt9XSwyMTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ug
c3RyaWN0Ijt2YXIgcj1lKDE1KSxvPXIuaXNWYWxpZEVsZW1lbnQsaT1lKDQ3KTt0LmV4cG9ydHM9
aShvKX0sezE1OjE1LDQ3OjQ3fV0sMjI6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVu
Y3Rpb24gcihlLHQsbil7dGhpcy5wcm9wcz1lLHRoaXMuY29udGV4dD10LHRoaXMucmVmcz11LHRo
aXMudXBkYXRlcj1ufHxzfWZ1bmN0aW9uIG8oKXt9dmFyIGk9ZSg0NSksYT1lKDExKSxzPWUoMTkp
LHU9ZSg0MSk7by5wcm90b3R5cGU9YS5wcm90b3R5cGUsci5wcm90b3R5cGU9bmV3IG8sci5wcm90
b3R5cGUuY29uc3RydWN0b3I9cixpKHIucHJvdG90eXBlLGEucHJvdG90eXBlKSxyLnByb3RvdHlw
ZS5pc1B1cmVSZWFjdENvbXBvbmVudD0hMCx0LmV4cG9ydHM9cn0sezExOjExLDE5OjE5LDQxOjQx
LDQ1OjQ1fV0sMjM6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQp
e3ZhciBuPXt9O3JldHVybiBmdW5jdGlvbihyKXtuW3RdPXIsZS5zZXRTdGF0ZShuKX19dmFyIG89
e2NyZWF0ZVN0YXRlU2V0dGVyOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4scixvLGks
YSxzKXt2YXIgdT10LmNhbGwoZSxuLHIsbyxpLGEscyk7dSYmZS5zZXRTdGF0ZSh1KX19LGNyZWF0
ZVN0YXRlS2V5U2V0dGVyOmZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5fX2tleVNldHRlcnN8fChlLl9f
a2V5U2V0dGVycz17fSk7cmV0dXJuIG5bdF18fChuW3RdPXIoZSx0KSl9fTtvLk1peGluPXtjcmVh
dGVTdGF0ZVNldHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gby5jcmVhdGVTdGF0ZVNldHRlcih0aGlz
LGUpfSxjcmVhdGVTdGF0ZUtleVNldHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gby5jcmVhdGVTdGF0
ZUtleVNldHRlcih0aGlzLGUpfX0sdC5leHBvcnRzPW99LHt9XSwyNDpbZnVuY3Rpb24oZSx0LG4p
eyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKDMxKSxvPXtnZXRDaGlsZE1hcHBpbmc6ZnVuY3Rpb24oZSx0
KXtyZXR1cm4gZT9yKGUpOmV9LG1lcmdlQ2hpbGRNYXBwaW5nczpmdW5jdGlvbihlLHQpe2Z1bmN0
aW9uIG4obil7cmV0dXJuIHQuaGFzT3duUHJvcGVydHkobik/dFtuXTplW25dfWU9ZXx8e30sdD10
fHx7fTt2YXIgcj17fSxvPVtdO2Zvcih2YXIgaSBpbiBlKXQuaGFzT3duUHJvcGVydHkoaSk/by5s
ZW5ndGgmJihyW2ldPW8sbz1bXSk6by5wdXNoKGkpO3ZhciBhLHM9e307Zm9yKHZhciB1IGluIHQp
e2lmKHIuaGFzT3duUHJvcGVydHkodSkpZm9yKGE9MDthPHJbdV0ubGVuZ3RoO2ErKyl7dmFyIGM9
clt1XVthXTtzW3JbdV1bYV1dPW4oYyl9c1t1XT1uKHUpfWZvcihhPTA7YTxvLmxlbmd0aDthKysp
c1tvW2FdXT1uKG9bYV0pO3JldHVybiBzfX07dC5leHBvcnRzPW99LHszMTozMX1dLDI1OltmdW5j
dGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0LG4pe2UuYWRkRXZlbnRMaXN0
ZW5lcih0LG4sITEpfWZ1bmN0aW9uIG8oZSx0LG4pe2UucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LG4s
ITEpfXZhciBpPWUoMzkpLGE9ZSgxKSxzPVtdO2kuY2FuVXNlRE9NJiZmdW5jdGlvbigpe3ZhciBl
PWEoImFuaW1hdGlvbmVuZCIpLHQ9YSgidHJhbnNpdGlvbmVuZCIpO2UmJnMucHVzaChlKSx0JiZz
LnB1c2godCl9KCk7dmFyIHU9e2FkZEVuZEV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oZSx0KXtpZigw
PT09cy5sZW5ndGgpcmV0dXJuIHZvaWQgd2luZG93LnNldFRpbWVvdXQodCwwKTtzLmZvckVhY2go
ZnVuY3Rpb24obil7cihlLG4sdCl9KX0scmVtb3ZlRW5kRXZlbnRMaXN0ZW5lcjpmdW5jdGlvbihl
LHQpezAhPT1zLmxlbmd0aCYmcy5mb3JFYWNoKGZ1bmN0aW9uKG4pe28oZSxuLHQpfSl9fTt0LmV4
cG9ydHM9dX0sezE6MSwzOTozOX1dLDI2OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1
bmN0aW9uIHIoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJD
YW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBvKGUsdCl7aWYoIWUp
dGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0g
c3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4hdHx8Im9iamVjdCIhPXR5cGVvZiB0
JiYiZnVuY3Rpb24iIT10eXBlb2YgdD9lOnR9ZnVuY3Rpb24gaShlLHQpe2lmKCJmdW5jdGlvbiIh
PXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9u
IG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90ICIrdHlwZW9mIHQpO2UucHJv
dG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTpl
LGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJihPYmplY3Qu
c2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUsdCk6ZS5fX3Byb3RvX189dCl9
dmFyIGE9ZSg0NSkscz1lKDUpLHU9ZSgyNCksYz1lKDQ3KSxwPWMocy5pc1ZhbGlkRWxlbWVudCks
bD1lKDQwKSxmPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgbixpLHM7cih0aGlzLHQpO2Zv
cih2YXIgYz1hcmd1bWVudHMubGVuZ3RoLHA9QXJyYXkoYyksbD0wO2w8YztsKyspcFtsXT1hcmd1
bWVudHNbbF07cmV0dXJuIG49aT1vKHRoaXMsZS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdChw
KSkpLGkuc3RhdGU9e2NoaWxkcmVuOnUuZ2V0Q2hpbGRNYXBwaW5nKGkucHJvcHMuY2hpbGRyZW4p
fSxpLnBlcmZvcm1BcHBlYXI9ZnVuY3Rpb24oZSl7aS5jdXJyZW50bHlUcmFuc2l0aW9uaW5nS2V5
c1tlXT0hMDt2YXIgdD1pLnJlZnNbZV07dC5jb21wb25lbnRXaWxsQXBwZWFyP3QuY29tcG9uZW50
V2lsbEFwcGVhcihpLl9oYW5kbGVEb25lQXBwZWFyaW5nLmJpbmQoaSxlKSk6aS5faGFuZGxlRG9u
ZUFwcGVhcmluZyhlKX0saS5faGFuZGxlRG9uZUFwcGVhcmluZz1mdW5jdGlvbihlKXt2YXIgdD1p
LnJlZnNbZV07dC5jb21wb25lbnREaWRBcHBlYXImJnQuY29tcG9uZW50RGlkQXBwZWFyKCksZGVs
ZXRlIGkuY3VycmVudGx5VHJhbnNpdGlvbmluZ0tleXNbZV07dmFyIG49dS5nZXRDaGlsZE1hcHBp
bmcoaS5wcm9wcy5jaGlsZHJlbik7biYmbi5oYXNPd25Qcm9wZXJ0eShlKXx8aS5wZXJmb3JtTGVh
dmUoZSl9LGkucGVyZm9ybUVudGVyPWZ1bmN0aW9uKGUpe2kuY3VycmVudGx5VHJhbnNpdGlvbmlu
Z0tleXNbZV09ITA7dmFyIHQ9aS5yZWZzW2VdO3QuY29tcG9uZW50V2lsbEVudGVyP3QuY29tcG9u
ZW50V2lsbEVudGVyKGkuX2hhbmRsZURvbmVFbnRlcmluZy5iaW5kKGksZSkpOmkuX2hhbmRsZURv
bmVFbnRlcmluZyhlKX0saS5faGFuZGxlRG9uZUVudGVyaW5nPWZ1bmN0aW9uKGUpe3ZhciB0PWku
cmVmc1tlXTt0LmNvbXBvbmVudERpZEVudGVyJiZ0LmNvbXBvbmVudERpZEVudGVyKCksZGVsZXRl
IGkuY3VycmVudGx5VHJhbnNpdGlvbmluZ0tleXNbZV07dmFyIG49dS5nZXRDaGlsZE1hcHBpbmco
aS5wcm9wcy5jaGlsZHJlbik7biYmbi5oYXNPd25Qcm9wZXJ0eShlKXx8aS5wZXJmb3JtTGVhdmUo
ZSl9LGkucGVyZm9ybUxlYXZlPWZ1bmN0aW9uKGUpe2kuY3VycmVudGx5VHJhbnNpdGlvbmluZ0tl
eXNbZV09ITA7dmFyIHQ9aS5yZWZzW2VdO3QuY29tcG9uZW50V2lsbExlYXZlP3QuY29tcG9uZW50
V2lsbExlYXZlKGkuX2hhbmRsZURvbmVMZWF2aW5nLmJpbmQoaSxlKSk6aS5faGFuZGxlRG9uZUxl
YXZpbmcoZSl9LGkuX2hhbmRsZURvbmVMZWF2aW5nPWZ1bmN0aW9uKGUpe3ZhciB0PWkucmVmc1tl
XTt0LmNvbXBvbmVudERpZExlYXZlJiZ0LmNvbXBvbmVudERpZExlYXZlKCksZGVsZXRlIGkuY3Vy
cmVudGx5VHJhbnNpdGlvbmluZ0tleXNbZV07dmFyIG49dS5nZXRDaGlsZE1hcHBpbmcoaS5wcm9w
cy5jaGlsZHJlbik7biYmbi5oYXNPd25Qcm9wZXJ0eShlKT9pLnBlcmZvcm1FbnRlcihlKTppLnNl
dFN0YXRlKGZ1bmN0aW9uKHQpe3ZhciBuPWEoe30sdC5jaGlsZHJlbik7cmV0dXJuIGRlbGV0ZSBu
W2VdLHtjaGlsZHJlbjpufX0pfSxzPW4sbyhpLHMpfXJldHVybiBpKHQsZSksdC5wcm90b3R5cGUu
Y29tcG9uZW50V2lsbE1vdW50PWZ1bmN0aW9uKCl7dGhpcy5jdXJyZW50bHlUcmFuc2l0aW9uaW5n
S2V5cz17fSx0aGlzLmtleXNUb0VudGVyPVtdLHRoaXMua2V5c1RvTGVhdmU9W119LHQucHJvdG90
eXBlLmNvbXBvbmVudERpZE1vdW50PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zdGF0ZS5jaGlsZHJl
bjtmb3IodmFyIHQgaW4gZSllW3RdJiZ0aGlzLnBlcmZvcm1BcHBlYXIodCl9LHQucHJvdG90eXBl
LmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHM9ZnVuY3Rpb24oZSl7dmFyIHQ9dS5nZXRDaGlsZE1h
cHBpbmcoZS5jaGlsZHJlbiksbj10aGlzLnN0YXRlLmNoaWxkcmVuO3RoaXMuc2V0U3RhdGUoe2No
aWxkcmVuOnUubWVyZ2VDaGlsZE1hcHBpbmdzKG4sdCl9KTt2YXIgcjtmb3IociBpbiB0KXt2YXIg
bz1uJiZuLmhhc093blByb3BlcnR5KHIpOyF0W3JdfHxvfHx0aGlzLmN1cnJlbnRseVRyYW5zaXRp
b25pbmdLZXlzW3JdfHx0aGlzLmtleXNUb0VudGVyLnB1c2gocil9Zm9yKHIgaW4gbil7dmFyIGk9
dCYmdC5oYXNPd25Qcm9wZXJ0eShyKTshbltyXXx8aXx8dGhpcy5jdXJyZW50bHlUcmFuc2l0aW9u
aW5nS2V5c1tyXXx8dGhpcy5rZXlzVG9MZWF2ZS5wdXNoKHIpfX0sdC5wcm90b3R5cGUuY29tcG9u
ZW50RGlkVXBkYXRlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5rZXlzVG9FbnRlcjt0aGlzLmtleXNU
b0VudGVyPVtdLGUuZm9yRWFjaCh0aGlzLnBlcmZvcm1FbnRlcik7dmFyIHQ9dGhpcy5rZXlzVG9M
ZWF2ZTt0aGlzLmtleXNUb0xlYXZlPVtdLHQuZm9yRWFjaCh0aGlzLnBlcmZvcm1MZWF2ZSl9LHQu
cHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3ZhciBlPVtdO2Zvcih2YXIgdCBpbiB0aGlzLnN0
YXRlLmNoaWxkcmVuKXt2YXIgbj10aGlzLnN0YXRlLmNoaWxkcmVuW3RdO24mJmUucHVzaChzLmNs
b25lRWxlbWVudCh0aGlzLnByb3BzLmNoaWxkRmFjdG9yeShuKSx7cmVmOnQsa2V5OnR9KSl9dmFy
IHI9YSh7fSx0aGlzLnByb3BzKTtyZXR1cm4gZGVsZXRlIHIudHJhbnNpdGlvbkxlYXZlLGRlbGV0
ZSByLnRyYW5zaXRpb25OYW1lLGRlbGV0ZSByLnRyYW5zaXRpb25BcHBlYXIsZGVsZXRlIHIudHJh
bnNpdGlvbkVudGVyLGRlbGV0ZSByLmNoaWxkRmFjdG9yeSxkZWxldGUgci50cmFuc2l0aW9uTGVh
dmVUaW1lb3V0LGRlbGV0ZSByLnRyYW5zaXRpb25FbnRlclRpbWVvdXQsZGVsZXRlIHIudHJhbnNp
dGlvbkFwcGVhclRpbWVvdXQsZGVsZXRlIHIuY29tcG9uZW50LHMuY3JlYXRlRWxlbWVudCh0aGlz
LnByb3BzLmNvbXBvbmVudCxyLGUpfSx0fShzLkNvbXBvbmVudCk7Zi5kaXNwbGF5TmFtZT0iUmVh
Y3RUcmFuc2l0aW9uR3JvdXAiLGYucHJvcFR5cGVzPXtjb21wb25lbnQ6cC5hbnksY2hpbGRGYWN0
b3J5OnAuZnVuY30sZi5kZWZhdWx0UHJvcHM9e2NvbXBvbmVudDoic3BhbiIsY2hpbGRGYWN0b3J5
OmwudGhhdFJldHVybnNBcmd1bWVudH0sdC5leHBvcnRzPWZ9LHsyNDoyNCw0MDo0MCw0NTo0NSw0
Nzo0Nyw1OjV9XSwyNzpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt0LmV4cG9ydHM9IjE1
LjUuNCJ9LHt9XSwyODpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKDMpLG89
ZSg1KSxpPShlKDYpLGUoMTIpKSxhPWUoNykscz1lKDE3KSx1PWUoMjYpLGM9ZSgzNSkscD1lKDM3
KTtvLmFkZG9ucz17Q1NTVHJhbnNpdGlvbkdyb3VwOmEsTGlua2VkU3RhdGVNaXhpbjpyLFB1cmVS
ZW5kZXJNaXhpbjppLFRyYW5zaXRpb25Hcm91cDp1LGNyZWF0ZUZyYWdtZW50OnMuY3JlYXRlLHNo
YWxsb3dDb21wYXJlOmMsdXBkYXRlOnB9LHQuZXhwb3J0cz1vfSx7MTI6MTIsMTc6MTcsMjY6MjYs
MzozLDM1OjM1LDM3OjM3LDU6NSw2OjYsNzo3fV0sMjk6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0
cmljdCI7dmFyIHI9ZSg0NSksbz1lKDI4KSxpPXIobyx7X19TRUNSRVRfSU5KRUNURURfUkVBQ1Rf
RE9NX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQ6bnVsbCxfX1NFQ1JFVF9JTlRFUk5B
TFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRDp7UmVhY3RDdXJyZW50T3duZXI6ZSgx
Myl9fSk7dC5leHBvcnRzPWl9LHsxMzoxMywyODoyOCw0NTo0NX1dLDMwOltmdW5jdGlvbihlLHQs
bil7InVzZSBzdHJpY3QiO3QuZXhwb3J0cz0hMX0se31dLDMxOltmdW5jdGlvbihlLHQsbil7KGZ1
bmN0aW9uKG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCxuLHIpe2lmKGUmJiJvYmplY3Qi
PT10eXBlb2YgZSl7dmFyIG89ZTt2b2lkIDA9PT1vW25dJiZudWxsIT10JiYob1tuXT10KX19ZnVu
Y3Rpb24gbyhlLHQpe2lmKG51bGw9PWUpcmV0dXJuIGU7dmFyIG49e307cmV0dXJuIGkoZSxyLG4p
LG59dmFyIGk9KGUoMiksZSgzNikpO2UoNDQpO3ZvaWQgMCE9PW4mJm4uZW52LHQuZXhwb3J0cz1v
fSkuY2FsbCh0aGlzLHZvaWQgMCl9LHsyOjIsMzY6MzYsNDQ6NDR9XSwzMjpbZnVuY3Rpb24oZSx0
LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3ZhciB0PWUmJihvJiZlW29dfHxlW2ldKTtp
ZigiZnVuY3Rpb24iPT10eXBlb2YgdClyZXR1cm4gdH12YXIgbz0iZnVuY3Rpb24iPT10eXBlb2Yg
U3ltYm9sJiZTeW1ib2wuaXRlcmF0b3IsaT0iQEBpdGVyYXRvciI7dC5leHBvcnRzPXJ9LHt9XSwz
MzpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3JldHVybiBpLmlz
VmFsaWRFbGVtZW50KGUpfHxvKCIxNDMiKSxlfXZhciBvPWUoMzQpLGk9ZSgxNSk7ZSg0Mik7dC5l
eHBvcnRzPXJ9LHsxNToxNSwzNDozNCw0Mjo0Mn1dLDM0OltmdW5jdGlvbihlLHQsbil7InVzZSBz
dHJpY3QiO2Z1bmN0aW9uIHIoZSl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgtMSxuPSJNaW5p
ZmllZCBSZWFjdCBlcnJvciAjIitlKyI7IHZpc2l0IGh0dHA6Ly9mYWNlYm9vay5naXRodWIuaW8v
cmVhY3QvZG9jcy9lcnJvci1kZWNvZGVyLmh0bWw/aW52YXJpYW50PSIrZSxyPTA7cjx0O3IrKylu
Kz0iJmFyZ3NbXT0iK2VuY29kZVVSSUNvbXBvbmVudChhcmd1bWVudHNbcisxXSk7bis9IiBmb3Ig
dGhlIGZ1bGwgbWVzc2FnZSBvciB1c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQg
Zm9yIGZ1bGwgZXJyb3JzIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuIjt2YXIgbz1u
ZXcgRXJyb3Iobik7dGhyb3cgby5uYW1lPSJJbnZhcmlhbnQgVmlvbGF0aW9uIixvLmZyYW1lc1Rv
UG9wPTEsb310LmV4cG9ydHM9cn0se31dLDM1OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3Qi
O2Z1bmN0aW9uIHIoZSx0LG4pe3JldHVybiFvKGUucHJvcHMsdCl8fCFvKGUuc3RhdGUsbil9dmFy
IG89ZSg0Myk7dC5leHBvcnRzPXJ9LHs0Mzo0M31dLDM2OltmdW5jdGlvbihlLHQsbil7InVzZSBz
dHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm4gZSYmIm9iamVjdCI9PXR5cGVvZiBlJiZudWxs
IT1lLmtleT9jLmVzY2FwZShlLmtleSk6dC50b1N0cmluZygzNil9ZnVuY3Rpb24gbyhlLHQsbixp
KXt2YXIgZj10eXBlb2YgZTtpZigidW5kZWZpbmVkIiE9PWYmJiJib29sZWFuIiE9PWZ8fChlPW51
bGwpLG51bGw9PT1lfHwic3RyaW5nIj09PWZ8fCJudW1iZXIiPT09Znx8Im9iamVjdCI9PT1mJiZl
LiQkdHlwZW9mPT09cylyZXR1cm4gbihpLGUsIiI9PT10P3ArcihlLDApOnQpLDE7dmFyIGQsaCx5
PTAsdj0iIj09PXQ/cDp0K2w7aWYoQXJyYXkuaXNBcnJheShlKSlmb3IodmFyIG09MDttPGUubGVu
Z3RoO20rKylkPWVbbV0saD12K3IoZCxtKSx5Kz1vKGQsaCxuLGkpO2Vsc2V7dmFyIEU9dShlKTtp
ZihFKXt2YXIgZyxiPUUuY2FsbChlKTtpZihFIT09ZS5lbnRyaWVzKWZvcih2YXIgXz0wOyEoZz1i
Lm5leHQoKSkuZG9uZTspZD1nLnZhbHVlLGg9dityKGQsXysrKSx5Kz1vKGQsaCxuLGkpO2Vsc2Ug
Zm9yKDshKGc9Yi5uZXh0KCkpLmRvbmU7KXt2YXIgdz1nLnZhbHVlO3cmJihkPXdbMV0saD12K2Mu
ZXNjYXBlKHdbMF0pK2wrcihkLDApLHkrPW8oZCxoLG4saSkpfX1lbHNlIGlmKCJvYmplY3QiPT09
Zil7dmFyIEE9U3RyaW5nKGUpO2EoIjMxIiwiW29iamVjdCBPYmplY3RdIj09PUE/Im9iamVjdCB3
aXRoIGtleXMgeyIrT2JqZWN0LmtleXMoZSkuam9pbigiLCAiKSsifSI6QSwiIil9fXJldHVybiB5
fWZ1bmN0aW9uIGkoZSx0LG4pe3JldHVybiBudWxsPT1lPzA6byhlLCIiLHQsbil9dmFyIGE9ZSgz
NCkscz0oZSgxMyksZSgxNikpLHU9ZSgzMiksYz0oZSg0MiksZSgyKSkscD0oZSg0NCksIi4iKSxs
PSI6Ijt0LmV4cG9ydHM9aX0sezEzOjEzLDE2OjE2LDI6MiwzMjozMiwzNDozNCw0Mjo0Miw0NDo0
NH1dLDM3OltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJu
IEFycmF5LmlzQXJyYXkoZSk/ZS5jb25jYXQoKTplJiYib2JqZWN0Ij09dHlwZW9mIGU/cyhuZXcg
ZS5jb25zdHJ1Y3RvcixlKTplfWZ1bmN0aW9uIG8oZSx0LG4pe0FycmF5LmlzQXJyYXkoZSl8fGEo
IjEiLG4sZSk7dmFyIHI9dFtuXTtBcnJheS5pc0FycmF5KHIpfHxhKCIyIixuLHIpfWZ1bmN0aW9u
IGkoZSx0KXtpZigib2JqZWN0IiE9dHlwZW9mIHQmJmEoIjMiLHkuam9pbigiLCAiKSxmKSx1LmNh
bGwodCxmKSlyZXR1cm4gMSE9PU9iamVjdC5rZXlzKHQpLmxlbmd0aCYmYSgiNCIsZiksdFtmXTt2
YXIgbj1yKGUpO2lmKHUuY2FsbCh0LGQpKXt2YXIgbT10W2RdO20mJiJvYmplY3QiPT10eXBlb2Yg
bXx8YSgiNSIsZCxtKSxuJiYib2JqZWN0Ij09dHlwZW9mIG58fGEoIjYiLGQsbikscyhuLHRbZF0p
fXUuY2FsbCh0LGMpJiYobyhlLHQsYyksdFtjXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe24ucHVzaChl
KX0pKSx1LmNhbGwodCxwKSYmKG8oZSx0LHApLHRbcF0uZm9yRWFjaChmdW5jdGlvbihlKXtuLnVu
c2hpZnQoZSl9KSksdS5jYWxsKHQsbCkmJihBcnJheS5pc0FycmF5KGUpfHxhKCI3IixsLGUpLEFy
cmF5LmlzQXJyYXkodFtsXSl8fGEoIjgiLGwsdFtsXSksdFtsXS5mb3JFYWNoKGZ1bmN0aW9uKGUp
e0FycmF5LmlzQXJyYXkoZSl8fGEoIjgiLGwsdFtsXSksbi5zcGxpY2UuYXBwbHkobixlKX0pKSx1
LmNhbGwodCxoKSYmKCJmdW5jdGlvbiIhPXR5cGVvZiB0W2hdJiZhKCI5IixoLHRbaF0pLG49dFto
XShuKSk7Zm9yKHZhciBFIGluIHQpdi5oYXNPd25Qcm9wZXJ0eShFKSYmdltFXXx8KG5bRV09aShl
W0VdLHRbRV0pKTtyZXR1cm4gbn12YXIgYT1lKDM0KSxzPWUoNDUpLHU9KGUoNDIpLHt9Lmhhc093
blByb3BlcnR5KSxjPSIkcHVzaCIscD0iJHVuc2hpZnQiLGw9IiRzcGxpY2UiLGY9IiRzZXQiLGQ9
IiRtZXJnZSIsaD0iJGFwcGx5Iix5PVtjLHAsbCxmLGQsaF0sdj17fTt5LmZvckVhY2goZnVuY3Rp
b24oZSl7dltlXT0hMH0pLHQuZXhwb3J0cz1pfSx7MzQ6MzQsNDI6NDIsNDU6NDV9XSwzODpbZnVu
Y3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7Zm9yKHZhciBuPWU7bi5w
YXJlbnROb2RlOyluPW4ucGFyZW50Tm9kZTt2YXIgcj1uLnF1ZXJ5U2VsZWN0b3JBbGwodCk7cmV0
dXJuLTEhPT1BcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKHIsZSl9dmFyIG89ZSg0MiksaT17
YWRkQ2xhc3M6ZnVuY3Rpb24oZSx0KXtyZXR1cm4vXHMvLnRlc3QodCkmJm8oITEpLHQmJihlLmNs
YXNzTGlzdD9lLmNsYXNzTGlzdC5hZGQodCk6aS5oYXNDbGFzcyhlLHQpfHwoZS5jbGFzc05hbWU9
ZS5jbGFzc05hbWUrIiAiK3QpKSxlfSxyZW1vdmVDbGFzczpmdW5jdGlvbihlLHQpe3JldHVybi9c
cy8udGVzdCh0KSYmbyghMSksdCYmKGUuY2xhc3NMaXN0P2UuY2xhc3NMaXN0LnJlbW92ZSh0KTpp
Lmhhc0NsYXNzKGUsdCkmJihlLmNsYXNzTmFtZT1lLmNsYXNzTmFtZS5yZXBsYWNlKG5ldyBSZWdF
eHAoIihefFxccykiK3QrIig/Olxcc3wkKSIsImciKSwiJDEiKS5yZXBsYWNlKC9ccysvZywiICIp
LnJlcGxhY2UoL15ccyp8XHMqJC9nLCIiKSkpLGV9LGNvbmRpdGlvbkNsYXNzOmZ1bmN0aW9uKGUs
dCxuKXtyZXR1cm4obj9pLmFkZENsYXNzOmkucmVtb3ZlQ2xhc3MpKGUsdCl9LGhhc0NsYXNzOmZ1
bmN0aW9uKGUsdCl7cmV0dXJuL1xzLy50ZXN0KHQpJiZvKCExKSxlLmNsYXNzTGlzdD8hIXQmJmUu
Y2xhc3NMaXN0LmNvbnRhaW5zKHQpOigiICIrZS5jbGFzc05hbWUrIiAiKS5pbmRleE9mKCIgIit0
KyIgIik+LTF9LG1hdGNoZXNTZWxlY3RvcjpmdW5jdGlvbihlLHQpe3JldHVybihlLm1hdGNoZXN8
fGUud2Via2l0TWF0Y2hlc1NlbGVjdG9yfHxlLm1vek1hdGNoZXNTZWxlY3Rvcnx8ZS5tc01hdGNo
ZXNTZWxlY3Rvcnx8ZnVuY3Rpb24odCl7cmV0dXJuIHIoZSx0KX0pLmNhbGwoZSx0KX19O3QuZXhw
b3J0cz1pfSx7NDI6NDJ9XSwzOTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj0h
KCJ1bmRlZmluZWQiPT10eXBlb2Ygd2luZG93fHwhd2luZG93LmRvY3VtZW50fHwhd2luZG93LmRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQpLG89e2NhblVzZURPTTpyLGNhblVzZVdvcmtlcnM6InVuZGVm
aW5lZCIhPXR5cGVvZiBXb3JrZXIsY2FuVXNlRXZlbnRMaXN0ZW5lcnM6ciYmISghd2luZG93LmFk
ZEV2ZW50TGlzdGVuZXImJiF3aW5kb3cuYXR0YWNoRXZlbnQpLGNhblVzZVZpZXdwb3J0OnImJiEh
d2luZG93LnNjcmVlbixpc0luV29ya2VyOiFyfTt0LmV4cG9ydHM9b30se31dLDQwOltmdW5jdGlv
bihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0
dXJuIGV9fXZhciBvPWZ1bmN0aW9uKCl7fTtvLnRoYXRSZXR1cm5zPXIsby50aGF0UmV0dXJuc0Zh
bHNlPXIoITEpLG8udGhhdFJldHVybnNUcnVlPXIoITApLG8udGhhdFJldHVybnNOdWxsPXIobnVs
bCksby50aGF0UmV0dXJuc1RoaXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sby50aGF0UmV0dXJu
c0FyZ3VtZW50PWZ1bmN0aW9uKGUpe3JldHVybiBlfSx0LmV4cG9ydHM9b30se31dLDQxOltmdW5j
dGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPXt9O3QuZXhwb3J0cz1yfSx7fV0sNDI6W2Z1
bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcihlLHQsbixyLGksYSxzLHUpe2lm
KG8odCksIWUpe3ZhciBjO2lmKHZvaWQgMD09PXQpYz1uZXcgRXJyb3IoIk1pbmlmaWVkIGV4Y2Vw
dGlvbiBvY2N1cnJlZDsgdXNlIHRoZSBub24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50IGZvciB0
aGUgZnVsbCBlcnJvciBtZXNzYWdlIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuIik7
ZWxzZXt2YXIgcD1bbixyLGksYSxzLHVdLGw9MDtjPW5ldyBFcnJvcih0LnJlcGxhY2UoLyVzL2cs
ZnVuY3Rpb24oKXtyZXR1cm4gcFtsKytdfSkpLGMubmFtZT0iSW52YXJpYW50IFZpb2xhdGlvbiJ9
dGhyb3cgYy5mcmFtZXNUb1BvcD0xLGN9fXZhciBvPWZ1bmN0aW9uKGUpe307dC5leHBvcnRzPXJ9
LHt9XSw0MzpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUsdCl7cmV0
dXJuIGU9PT10PzAhPT1lfHwwIT09dHx8MS9lPT0xL3Q6ZSE9PWUmJnQhPT10fWZ1bmN0aW9uIG8o
ZSx0KXtpZihyKGUsdCkpcmV0dXJuITA7aWYoIm9iamVjdCIhPXR5cGVvZiBlfHxudWxsPT09ZXx8
Im9iamVjdCIhPXR5cGVvZiB0fHxudWxsPT09dClyZXR1cm4hMTt2YXIgbj1PYmplY3Qua2V5cyhl
KSxvPU9iamVjdC5rZXlzKHQpO2lmKG4ubGVuZ3RoIT09by5sZW5ndGgpcmV0dXJuITE7Zm9yKHZh
ciBhPTA7YTxuLmxlbmd0aDthKyspaWYoIWkuY2FsbCh0LG5bYV0pfHwhcihlW25bYV1dLHRbblth
XV0pKXJldHVybiExO3JldHVybiEwfXZhciBpPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVy
dHk7dC5leHBvcnRzPW99LHt9XSw0NDpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIg
cj1lKDQwKSxvPXI7dC5leHBvcnRzPW99LHs0MDo0MH1dLDQ1OltmdW5jdGlvbihlLHQsbil7InVz
ZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSl7aWYobnVsbD09PWV8fHZvaWQgMD09PWUpdGhyb3cgbmV3
IFR5cGVFcnJvcigiT2JqZWN0LmFzc2lnbiBjYW5ub3QgYmUgY2FsbGVkIHdpdGggbnVsbCBvciB1
bmRlZmluZWQiKTtyZXR1cm4gT2JqZWN0KGUpfXZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5
bWJvbHMsaT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LGE9T2JqZWN0LnByb3RvdHlw
ZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTt0LmV4cG9ydHM9ZnVuY3Rpb24oKXt0cnl7aWYoIU9iamVj
dC5hc3NpZ24pcmV0dXJuITE7dmFyIGU9bmV3IFN0cmluZygiYWJjIik7aWYoZVs1XT0iZGUiLCI1
Ij09PU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGUpWzBdKXJldHVybiExO2Zvcih2YXIgdD17
fSxuPTA7bjwxMDtuKyspdFsiXyIrU3RyaW5nLmZyb21DaGFyQ29kZShuKV09bjtpZigiMDEyMzQ1
Njc4OSIhPT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0KS5tYXAoZnVuY3Rpb24oZSl7cmV0
dXJuIHRbZV19KS5qb2luKCIiKSlyZXR1cm4hMTt2YXIgcj17fTtyZXR1cm4iYWJjZGVmZ2hpamts
bW5vcHFyc3QiLnNwbGl0KCIiKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JbZV09ZX0pLCJhYmNkZWZn
aGlqa2xtbm9wcXJzdCI9PT1PYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LHIpKS5qb2luKCIi
KX1jYXRjaChlKXtyZXR1cm4hMX19KCk/T2JqZWN0LmFzc2lnbjpmdW5jdGlvbihlLHQpe2Zvcih2
YXIgbixzLHU9cihlKSxjPTE7Yzxhcmd1bWVudHMubGVuZ3RoO2MrKyl7bj1PYmplY3QoYXJndW1l
bnRzW2NdKTtmb3IodmFyIHAgaW4gbilpLmNhbGwobixwKSYmKHVbcF09bltwXSk7aWYobyl7cz1v
KG4pO2Zvcih2YXIgbD0wO2w8cy5sZW5ndGg7bCsrKWEuY2FsbChuLHNbbF0pJiYodVtzW2xdXT1u
W3NbbF1dKX19cmV0dXJuIHV9fSx7fV0sNDY6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7
ZnVuY3Rpb24gcihlLHQsbixyLG8pe310LmV4cG9ydHM9cn0sezQyOjQyLDQ0OjQ0LDQ5OjQ5fV0s
NDc6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9ZSg0OCkKKzt0LmV4cG9ydHM9
ZnVuY3Rpb24oZSl7cmV0dXJuIHIoZSwhMSl9fSx7NDg6NDh9XSw0ODpbZnVuY3Rpb24oZSx0LG4p
eyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKDQwKSxvPWUoNDIpLGk9KGUoNDQpLGUoNDkpKSxhPWUoNDYp
O3QuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSl7dmFyIHQ9ZSYmKHcmJmVbd118
fGVbQV0pO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0KXJldHVybiB0fWZ1bmN0aW9uIHMoZSx0KXty
ZXR1cm4gZT09PXQ/MCE9PWV8fDEvZT09MS90OmUhPT1lJiZ0IT09dH1mdW5jdGlvbiB1KGUpe3Ro
aXMubWVzc2FnZT1lLHRoaXMuc3RhY2s9IiJ9ZnVuY3Rpb24gYyhlKXtmdW5jdGlvbiBuKG4scixh
LHMsYyxwLGwpe2lmKHM9c3x8VCxwPXB8fGEsbCE9PWkpaWYodClvKCExLCJDYWxsaW5nIFByb3BU
eXBlcyB2YWxpZGF0b3JzIGRpcmVjdGx5IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGBwcm9wLXR5
cGVzYCBwYWNrYWdlLiBVc2UgYFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcygpYCB0byBjYWxsIHRo
ZW0uIFJlYWQgbW9yZSBhdCBodHRwOi8vZmIubWUvdXNlLWNoZWNrLXByb3AtdHlwZXMiKTtlbHNl
O3JldHVybiBudWxsPT1yW2FdP24/bmV3IHUobnVsbD09PXJbYV0/IlRoZSAiK2MrIiBgIitwKyJg
IGlzIG1hcmtlZCBhcyByZXF1aXJlZCBpbiBgIitzKyJgLCBidXQgaXRzIHZhbHVlIGlzIGBudWxs
YC4iOiJUaGUgIitjKyIgYCIrcCsiYCBpcyBtYXJrZWQgYXMgcmVxdWlyZWQgaW4gYCIrcysiYCwg
YnV0IGl0cyB2YWx1ZSBpcyBgdW5kZWZpbmVkYC4iKTpudWxsOmUocixhLHMsYyxwKX12YXIgcj1u
LmJpbmQobnVsbCwhMSk7cmV0dXJuIHIuaXNSZXF1aXJlZD1uLmJpbmQobnVsbCwhMCkscn1mdW5j
dGlvbiBwKGUpe2Z1bmN0aW9uIHQodCxuLHIsbyxpLGEpe3ZhciBzPXRbbl07aWYoZyhzKSE9PWUp
cmV0dXJuIG5ldyB1KCJJbnZhbGlkICIrbysiIGAiK2krImAgb2YgdHlwZSBgIitiKHMpKyJgIHN1
cHBsaWVkIHRvIGAiK3IrImAsIGV4cGVjdGVkIGAiK2UrImAuIik7cmV0dXJuIG51bGx9cmV0dXJu
IGModCl9ZnVuY3Rpb24gbChlKXtmdW5jdGlvbiB0KHQsbixyLG8sYSl7aWYoImZ1bmN0aW9uIiE9
dHlwZW9mIGUpcmV0dXJuIG5ldyB1KCJQcm9wZXJ0eSBgIithKyJgIG9mIGNvbXBvbmVudCBgIity
KyJgIGhhcyBpbnZhbGlkIFByb3BUeXBlIG5vdGF0aW9uIGluc2lkZSBhcnJheU9mLiIpO3ZhciBz
PXRbbl07aWYoIUFycmF5LmlzQXJyYXkocykpe3JldHVybiBuZXcgdSgiSW52YWxpZCAiK28rIiBg
IithKyJgIG9mIHR5cGUgYCIrZyhzKSsiYCBzdXBwbGllZCB0byBgIityKyJgLCBleHBlY3RlZCBh
biBhcnJheS4iKX1mb3IodmFyIGM9MDtjPHMubGVuZ3RoO2MrKyl7dmFyIHA9ZShzLGMscixvLGEr
IlsiK2MrIl0iLGkpO2lmKHAgaW5zdGFuY2VvZiBFcnJvcilyZXR1cm4gcH1yZXR1cm4gbnVsbH1y
ZXR1cm4gYyh0KX1mdW5jdGlvbiBmKGUpe2Z1bmN0aW9uIHQodCxuLHIsbyxpKXtpZighKHRbbl1p
bnN0YW5jZW9mIGUpKXt2YXIgYT1lLm5hbWV8fFQ7cmV0dXJuIG5ldyB1KCJJbnZhbGlkICIrbysi
IGAiK2krImAgb2YgdHlwZSBgIitfKHRbbl0pKyJgIHN1cHBsaWVkIHRvIGAiK3IrImAsIGV4cGVj
dGVkIGluc3RhbmNlIG9mIGAiK2ErImAuIil9cmV0dXJuIG51bGx9cmV0dXJuIGModCl9ZnVuY3Rp
b24gZChlKXtmdW5jdGlvbiB0KHQsbixyLG8saSl7Zm9yKHZhciBhPXRbbl0sYz0wO2M8ZS5sZW5n
dGg7YysrKWlmKHMoYSxlW2NdKSlyZXR1cm4gbnVsbDtyZXR1cm4gbmV3IHUoIkludmFsaWQgIitv
KyIgYCIraSsiYCBvZiB2YWx1ZSBgIithKyJgIHN1cHBsaWVkIHRvIGAiK3IrImAsIGV4cGVjdGVk
IG9uZSBvZiAiK0pTT04uc3RyaW5naWZ5KGUpKyIuIil9cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/
Yyh0KTpyLnRoYXRSZXR1cm5zTnVsbH1mdW5jdGlvbiBoKGUpe2Z1bmN0aW9uIHQodCxuLHIsbyxh
KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSlyZXR1cm4gbmV3IHUoIlByb3BlcnR5IGAiK2ErImAg
b2YgY29tcG9uZW50IGAiK3IrImAgaGFzIGludmFsaWQgUHJvcFR5cGUgbm90YXRpb24gaW5zaWRl
IG9iamVjdE9mLiIpO3ZhciBzPXRbbl0sYz1nKHMpO2lmKCJvYmplY3QiIT09YylyZXR1cm4gbmV3
IHUoIkludmFsaWQgIitvKyIgYCIrYSsiYCBvZiB0eXBlIGAiK2MrImAgc3VwcGxpZWQgdG8gYCIr
cisiYCwgZXhwZWN0ZWQgYW4gb2JqZWN0LiIpO2Zvcih2YXIgcCBpbiBzKWlmKHMuaGFzT3duUHJv
cGVydHkocCkpe3ZhciBsPWUocyxwLHIsbyxhKyIuIitwLGkpO2lmKGwgaW5zdGFuY2VvZiBFcnJv
cilyZXR1cm4gbH1yZXR1cm4gbnVsbH1yZXR1cm4gYyh0KX1mdW5jdGlvbiB5KGUpe2Z1bmN0aW9u
IHQodCxuLHIsbyxhKXtmb3IodmFyIHM9MDtzPGUubGVuZ3RoO3MrKyl7aWYobnVsbD09KDAsZVtz
XSkodCxuLHIsbyxhLGkpKXJldHVybiBudWxsfXJldHVybiBuZXcgdSgiSW52YWxpZCAiK28rIiBg
IithKyJgIHN1cHBsaWVkIHRvIGAiK3IrImAuIil9cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/Yyh0
KTpyLnRoYXRSZXR1cm5zTnVsbH1mdW5jdGlvbiB2KGUpe2Z1bmN0aW9uIHQodCxuLHIsbyxhKXt2
YXIgcz10W25dLGM9ZyhzKTtpZigib2JqZWN0IiE9PWMpcmV0dXJuIG5ldyB1KCJJbnZhbGlkICIr
bysiIGAiK2ErImAgb2YgdHlwZSBgIitjKyJgIHN1cHBsaWVkIHRvIGAiK3IrImAsIGV4cGVjdGVk
IGBvYmplY3RgLiIpO2Zvcih2YXIgcCBpbiBlKXt2YXIgbD1lW3BdO2lmKGwpe3ZhciBmPWwocyxw
LHIsbyxhKyIuIitwLGkpO2lmKGYpcmV0dXJuIGZ9fXJldHVybiBudWxsfXJldHVybiBjKHQpfWZ1
bmN0aW9uIG0odCl7c3dpdGNoKHR5cGVvZiB0KXtjYXNlIm51bWJlciI6Y2FzZSJzdHJpbmciOmNh
c2UidW5kZWZpbmVkIjpyZXR1cm4hMDtjYXNlImJvb2xlYW4iOnJldHVybiF0O2Nhc2Uib2JqZWN0
IjppZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB0LmV2ZXJ5KG0pO2lmKG51bGw9PT10fHxlKHQp
KXJldHVybiEwO3ZhciByPW4odCk7aWYoIXIpcmV0dXJuITE7dmFyIG8saT1yLmNhbGwodCk7aWYo
ciE9PXQuZW50cmllcyl7Zm9yKDshKG89aS5uZXh0KCkpLmRvbmU7KWlmKCFtKG8udmFsdWUpKXJl
dHVybiExfWVsc2UgZm9yKDshKG89aS5uZXh0KCkpLmRvbmU7KXt2YXIgYT1vLnZhbHVlO2lmKGEm
JiFtKGFbMV0pKXJldHVybiExfXJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fWZ1bmN0aW9uIEUo
ZSx0KXtyZXR1cm4ic3ltYm9sIj09PWV8fCgiU3ltYm9sIj09PXRbIkBAdG9TdHJpbmdUYWciXXx8
ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdCBpbnN0YW5jZW9mIFN5bWJvbCl9ZnVuY3Rpb24g
ZyhlKXt2YXIgdD10eXBlb2YgZTtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT8iYXJyYXkiOmUgaW5z
dGFuY2VvZiBSZWdFeHA/Im9iamVjdCI6RSh0LGUpPyJzeW1ib2wiOnR9ZnVuY3Rpb24gYihlKXt2
YXIgdD1nKGUpO2lmKCJvYmplY3QiPT09dCl7aWYoZSBpbnN0YW5jZW9mIERhdGUpcmV0dXJuImRh
dGUiO2lmKGUgaW5zdGFuY2VvZiBSZWdFeHApcmV0dXJuInJlZ2V4cCJ9cmV0dXJuIHR9ZnVuY3Rp
b24gXyhlKXtyZXR1cm4gZS5jb25zdHJ1Y3RvciYmZS5jb25zdHJ1Y3Rvci5uYW1lP2UuY29uc3Ry
dWN0b3IubmFtZTpUfXZhciB3PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5pdGVy
YXRvcixBPSJAQGl0ZXJhdG9yIixUPSI8PGFub255bW91cz4+Iix4PXthcnJheTpwKCJhcnJheSIp
LGJvb2w6cCgiYm9vbGVhbiIpLGZ1bmM6cCgiZnVuY3Rpb24iKSxudW1iZXI6cCgibnVtYmVyIiks
b2JqZWN0OnAoIm9iamVjdCIpLHN0cmluZzpwKCJzdHJpbmciKSxzeW1ib2w6cCgic3ltYm9sIiks
YW55OmZ1bmN0aW9uKCl7cmV0dXJuIGMoci50aGF0UmV0dXJuc051bGwpfSgpLGFycmF5T2Y6bCxl
bGVtZW50OmZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LG4scixvLGkpe3ZhciBhPXRbbl07aWYoIWUo
YSkpe3JldHVybiBuZXcgdSgiSW52YWxpZCAiK28rIiBgIitpKyJgIG9mIHR5cGUgYCIrZyhhKSsi
YCBzdXBwbGllZCB0byBgIityKyJgLCBleHBlY3RlZCBhIHNpbmdsZSBSZWFjdEVsZW1lbnQuIil9
cmV0dXJuIG51bGx9cmV0dXJuIGModCl9KCksaW5zdGFuY2VPZjpmLG5vZGU6ZnVuY3Rpb24oKXtm
dW5jdGlvbiBlKGUsdCxuLHIsbyl7cmV0dXJuIG0oZVt0XSk/bnVsbDpuZXcgdSgiSW52YWxpZCAi
K3IrIiBgIitvKyJgIHN1cHBsaWVkIHRvIGAiK24rImAsIGV4cGVjdGVkIGEgUmVhY3ROb2RlLiIp
fXJldHVybiBjKGUpfSgpLG9iamVjdE9mOmgsb25lT2Y6ZCxvbmVPZlR5cGU6eSxzaGFwZTp2fTty
ZXR1cm4gdS5wcm90b3R5cGU9RXJyb3IucHJvdG90eXBlLHguY2hlY2tQcm9wVHlwZXM9YSx4LlBy
b3BUeXBlcz14LHh9fSx7NDA6NDAsNDI6NDIsNDQ6NDQsNDY6NDYsNDk6NDl9XSw0OTpbZnVuY3Rp
b24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt0LmV4cG9ydHM9IlNFQ1JFVF9ET19OT1RfUEFTU19USElT
X09SX1lPVV9XSUxMX0JFX0ZJUkVEIn0se31dfSx7fSxbMjldKSgyOSl9KTsKXCBObyBuZXdsaW5l
IGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVy
L3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9ub2RlX21vZHVs
ZXMvcmVhY3QvZGlzdC9yZWFjdC5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVz
b3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L25vZGVfbW9kdWxlcy9y
ZWFjdC9kaXN0L3JlYWN0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMwN2I5NDE5MmE4ZmUzMTk2NWUxZjJhZjkx
MmMzZGZmMjI2ZTNiNGIKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVk
b21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9ub2Rl
X21vZHVsZXMvcmVhY3QvZGlzdC9yZWFjdC5qcwpAQCAtMCwwICsxLDM5ODcgQEAKKyAvKioKKyAg
KiBSZWFjdCB2MTUuNS40CisgICovCisoZnVuY3Rpb24oZil7aWYodHlwZW9mIGV4cG9ydHM9PT0i
b2JqZWN0IiYmdHlwZW9mIG1vZHVsZSE9PSJ1bmRlZmluZWQiKXttb2R1bGUuZXhwb3J0cz1mKCl9
ZWxzZSBpZih0eXBlb2YgZGVmaW5lPT09ImZ1bmN0aW9uIiYmZGVmaW5lLmFtZCl7ZGVmaW5lKFtd
LGYpfWVsc2V7dmFyIGc7aWYodHlwZW9mIHdpbmRvdyE9PSJ1bmRlZmluZWQiKXtnPXdpbmRvd31l
bHNlIGlmKHR5cGVvZiBnbG9iYWwhPT0idW5kZWZpbmVkIil7Zz1nbG9iYWx9ZWxzZSBpZih0eXBl
b2Ygc2VsZiE9PSJ1bmRlZmluZWQiKXtnPXNlbGZ9ZWxzZXtnPXRoaXN9Zy5SZWFjdCA9IGYoKX19
KShmdW5jdGlvbigpe3ZhciBkZWZpbmUsbW9kdWxlLGV4cG9ydHM7cmV0dXJuIChmdW5jdGlvbiBl
KHQsbixyKXtmdW5jdGlvbiBzKG8sdSl7aWYoIW5bb10pe2lmKCF0W29dKXt2YXIgYT10eXBlb2Yg
cmVxdWlyZT09ImZ1bmN0aW9uIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihp
KXJldHVybiBpKG8sITApO3ZhciBmPW5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK28r
IiciKTt0aHJvdyBmLmNvZGU9Ik1PRFVMRV9OT1RfRk9VTkQiLGZ9dmFyIGw9bltvXT17ZXhwb3J0
czp7fX07dFtvXVswXS5jYWxsKGwuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2Vd
O3JldHVybiBzKG4/bjplKX0sbCxsLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0
c312YXIgaT10eXBlb2YgcmVxdWlyZT09ImZ1bmN0aW9uIiYmcmVxdWlyZTtmb3IodmFyIG89MDtv
PHIubGVuZ3RoO28rKylzKHJbb10pO3JldHVybiBzfSkoezE6W2Z1bmN0aW9uKF9kZXJlcV8sbW9k
dWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywg
SW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvdXJjZSBjb2RlIGlz
IGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGUKKyAqIExJ
Q0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4g
YWRkaXRpb25hbCBncmFudAorICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhl
IFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisgKgorICogCisgKi8KKworJ3Vz
ZSBzdHJpY3QnOworCisvKioKKyAqIEVzY2FwZSBhbmQgd3JhcCBrZXkgc28gaXQgaXMgc2FmZSB0
byB1c2UgYXMgYSByZWFjdGlkCisgKgorICogQHBhcmFtIHtzdHJpbmd9IGtleSB0byBiZSBlc2Nh
cGVkLgorICogQHJldHVybiB7c3RyaW5nfSB0aGUgZXNjYXBlZCBrZXkuCisgKi8KKworZnVuY3Rp
b24gZXNjYXBlKGtleSkgeworICB2YXIgZXNjYXBlUmVnZXggPSAvWz06XS9nOworICB2YXIgZXNj
YXBlckxvb2t1cCA9IHsKKyAgICAnPSc6ICc9MCcsCisgICAgJzonOiAnPTInCisgIH07CisgIHZh
ciBlc2NhcGVkU3RyaW5nID0gKCcnICsga2V5KS5yZXBsYWNlKGVzY2FwZVJlZ2V4LCBmdW5jdGlv
biAobWF0Y2gpIHsKKyAgICByZXR1cm4gZXNjYXBlckxvb2t1cFttYXRjaF07CisgIH0pOworCisg
IHJldHVybiAnJCcgKyBlc2NhcGVkU3RyaW5nOworfQorCisvKioKKyAqIFVuZXNjYXBlIGFuZCB1
bndyYXAga2V5IGZvciBodW1hbi1yZWFkYWJsZSBkaXNwbGF5CisgKgorICogQHBhcmFtIHtzdHJp
bmd9IGtleSB0byB1bmVzY2FwZS4KKyAqIEByZXR1cm4ge3N0cmluZ30gdGhlIHVuZXNjYXBlZCBr
ZXkuCisgKi8KK2Z1bmN0aW9uIHVuZXNjYXBlKGtleSkgeworICB2YXIgdW5lc2NhcGVSZWdleCA9
IC8oPTB8PTIpL2c7CisgIHZhciB1bmVzY2FwZXJMb29rdXAgPSB7CisgICAgJz0wJzogJz0nLAor
ICAgICc9Mic6ICc6JworICB9OworICB2YXIga2V5U3Vic3RyaW5nID0ga2V5WzBdID09PSAnLicg
JiYga2V5WzFdID09PSAnJCcgPyBrZXkuc3Vic3RyaW5nKDIpIDoga2V5LnN1YnN0cmluZygxKTsK
KworICByZXR1cm4gKCcnICsga2V5U3Vic3RyaW5nKS5yZXBsYWNlKHVuZXNjYXBlUmVnZXgsIGZ1
bmN0aW9uIChtYXRjaCkgeworICAgIHJldHVybiB1bmVzY2FwZXJMb29rdXBbbWF0Y2hdOworICB9
KTsKK30KKwordmFyIEtleUVzY2FwZVV0aWxzID0geworICBlc2NhcGU6IGVzY2FwZSwKKyAgdW5l
c2NhcGU6IHVuZXNjYXBlCit9OworCittb2R1bGUuZXhwb3J0cyA9IEtleUVzY2FwZVV0aWxzOwor
fSx7fV0sMjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIENvcHly
aWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHls
ZSBsaWNlbnNlIGZvdW5kIGluIHRoZQorICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVj
dG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50CisgKiBvZiBwYXRl
bnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRp
cmVjdG9yeS4KKyAqCisgKiAKKyAqLworCisndXNlIHN0cmljdCc7CisKK3ZhciBfcHJvZEludmFy
aWFudCA9IF9kZXJlcV8oMjUpOworCit2YXIgaW52YXJpYW50ID0gX2RlcmVxXygyOSk7CisKKy8q
KgorICogU3RhdGljIHBvb2xlcnMuIFNldmVyYWwgY3VzdG9tIHZlcnNpb25zIGZvciBlYWNoIHBv
dGVudGlhbCBudW1iZXIgb2YKKyAqIGFyZ3VtZW50cy4gQSBjb21wbGV0ZWx5IGdlbmVyaWMgcG9v
bGVyIGlzIGVhc3kgdG8gaW1wbGVtZW50LCBidXQgd291bGQKKyAqIHJlcXVpcmUgYWNjZXNzaW5n
IHRoZSBgYXJndW1lbnRzYCBvYmplY3QuIEluIGVhY2ggb2YgdGhlc2UsIGB0aGlzYCByZWZlcnMg
dG8KKyAqIHRoZSBDbGFzcyBpdHNlbGYsIG5vdCBhbiBpbnN0YW5jZS4gSWYgYW55IG90aGVycyBh
cmUgbmVlZGVkLCBzaW1wbHkgYWRkIHRoZW0KKyAqIGhlcmUsIG9yIGluIHRoZWlyIG93biBmaWxl
cy4KKyAqLwordmFyIG9uZUFyZ3VtZW50UG9vbGVyID0gZnVuY3Rpb24gKGNvcHlGaWVsZHNGcm9t
KSB7CisgIHZhciBLbGFzcyA9IHRoaXM7CisgIGlmIChLbGFzcy5pbnN0YW5jZVBvb2wubGVuZ3Ro
KSB7CisgICAgdmFyIGluc3RhbmNlID0gS2xhc3MuaW5zdGFuY2VQb29sLnBvcCgpOworICAgIEts
YXNzLmNhbGwoaW5zdGFuY2UsIGNvcHlGaWVsZHNGcm9tKTsKKyAgICByZXR1cm4gaW5zdGFuY2U7
CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIG5ldyBLbGFzcyhjb3B5RmllbGRzRnJvbSk7CisgIH0K
K307CisKK3ZhciB0d29Bcmd1bWVudFBvb2xlciA9IGZ1bmN0aW9uIChhMSwgYTIpIHsKKyAgdmFy
IEtsYXNzID0gdGhpczsKKyAgaWYgKEtsYXNzLmluc3RhbmNlUG9vbC5sZW5ndGgpIHsKKyAgICB2
YXIgaW5zdGFuY2UgPSBLbGFzcy5pbnN0YW5jZVBvb2wucG9wKCk7CisgICAgS2xhc3MuY2FsbChp
bnN0YW5jZSwgYTEsIGEyKTsKKyAgICByZXR1cm4gaW5zdGFuY2U7CisgIH0gZWxzZSB7CisgICAg
cmV0dXJuIG5ldyBLbGFzcyhhMSwgYTIpOworICB9Cit9OworCit2YXIgdGhyZWVBcmd1bWVudFBv
b2xlciA9IGZ1bmN0aW9uIChhMSwgYTIsIGEzKSB7CisgIHZhciBLbGFzcyA9IHRoaXM7CisgIGlm
IChLbGFzcy5pbnN0YW5jZVBvb2wubGVuZ3RoKSB7CisgICAgdmFyIGluc3RhbmNlID0gS2xhc3Mu
aW5zdGFuY2VQb29sLnBvcCgpOworICAgIEtsYXNzLmNhbGwoaW5zdGFuY2UsIGExLCBhMiwgYTMp
OworICAgIHJldHVybiBpbnN0YW5jZTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gbmV3IEtsYXNz
KGExLCBhMiwgYTMpOworICB9Cit9OworCit2YXIgZm91ckFyZ3VtZW50UG9vbGVyID0gZnVuY3Rp
b24gKGExLCBhMiwgYTMsIGE0KSB7CisgIHZhciBLbGFzcyA9IHRoaXM7CisgIGlmIChLbGFzcy5p
bnN0YW5jZVBvb2wubGVuZ3RoKSB7CisgICAgdmFyIGluc3RhbmNlID0gS2xhc3MuaW5zdGFuY2VQ
b29sLnBvcCgpOworICAgIEtsYXNzLmNhbGwoaW5zdGFuY2UsIGExLCBhMiwgYTMsIGE0KTsKKyAg
ICByZXR1cm4gaW5zdGFuY2U7CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIG5ldyBLbGFzcyhhMSwg
YTIsIGEzLCBhNCk7CisgIH0KK307CisKK3ZhciBzdGFuZGFyZFJlbGVhc2VyID0gZnVuY3Rpb24g
KGluc3RhbmNlKSB7CisgIHZhciBLbGFzcyA9IHRoaXM7CisgICEoaW5zdGFuY2UgaW5zdGFuY2Vv
ZiBLbGFzcykgPyAiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFs
c2UsICdUcnlpbmcgdG8gcmVsZWFzZSBhbiBpbnN0YW5jZSBpbnRvIGEgcG9vbCBvZiBhIGRpZmZl
cmVudCB0eXBlLicpIDogX3Byb2RJbnZhcmlhbnQoJzI1JykgOiB2b2lkIDA7CisgIGluc3RhbmNl
LmRlc3RydWN0b3IoKTsKKyAgaWYgKEtsYXNzLmluc3RhbmNlUG9vbC5sZW5ndGggPCBLbGFzcy5w
b29sU2l6ZSkgeworICAgIEtsYXNzLmluc3RhbmNlUG9vbC5wdXNoKGluc3RhbmNlKTsKKyAgfQor
fTsKKwordmFyIERFRkFVTFRfUE9PTF9TSVpFID0gMTA7Cit2YXIgREVGQVVMVF9QT09MRVIgPSBv
bmVBcmd1bWVudFBvb2xlcjsKKworLyoqCisgKiBBdWdtZW50cyBgQ29weUNvbnN0cnVjdG9yYCB0
byBiZSBhIHBvb2xhYmxlIGNsYXNzLCBhdWdtZW50aW5nIG9ubHkgdGhlIGNsYXNzCisgKiBpdHNl
bGYgKHN0YXRpY2FsbHkpIG5vdCBhZGRpbmcgYW55IHByb3RvdHlwaWNhbCBmaWVsZHMuIEFueSBD
b3B5Q29uc3RydWN0b3IKKyAqIHlvdSBnaXZlIHRoaXMgbWF5IGhhdmUgYSBgcG9vbFNpemVgIHBy
b3BlcnR5LCBhbmQgd2lsbCBsb29rIGZvciBhCisgKiBwcm90b3R5cGljYWwgYGRlc3RydWN0b3Jg
IG9uIGluc3RhbmNlcy4KKyAqCisgKiBAcGFyYW0ge0Z1bmN0aW9ufSBDb3B5Q29uc3RydWN0b3Ig
Q29uc3RydWN0b3IgdGhhdCBjYW4gYmUgdXNlZCB0byByZXNldC4KKyAqIEBwYXJhbSB7RnVuY3Rp
b259IHBvb2xlciBDdXN0b21pemFibGUgcG9vbGVyLgorICovCit2YXIgYWRkUG9vbGluZ1RvID0g
ZnVuY3Rpb24gKENvcHlDb25zdHJ1Y3RvciwgcG9vbGVyKSB7CisgIC8vIENhc3RpbmcgYXMgYW55
IHNvIHRoYXQgZmxvdyBpZ25vcmVzIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gYW5kIHRydXN0
cworICAvLyBpdCB0byBtYXRjaCB0aGUgdHlwZSB3ZSBkZWNsYXJlZAorICB2YXIgTmV3S2xhc3Mg
PSBDb3B5Q29uc3RydWN0b3I7CisgIE5ld0tsYXNzLmluc3RhbmNlUG9vbCA9IFtdOworICBOZXdL
bGFzcy5nZXRQb29sZWQgPSBwb29sZXIgfHwgREVGQVVMVF9QT09MRVI7CisgIGlmICghTmV3S2xh
c3MucG9vbFNpemUpIHsKKyAgICBOZXdLbGFzcy5wb29sU2l6ZSA9IERFRkFVTFRfUE9PTF9TSVpF
OworICB9CisgIE5ld0tsYXNzLnJlbGVhc2UgPSBzdGFuZGFyZFJlbGVhc2VyOworICByZXR1cm4g
TmV3S2xhc3M7Cit9OworCit2YXIgUG9vbGVkQ2xhc3MgPSB7CisgIGFkZFBvb2xpbmdUbzogYWRk
UG9vbGluZ1RvLAorICBvbmVBcmd1bWVudFBvb2xlcjogb25lQXJndW1lbnRQb29sZXIsCisgIHR3
b0FyZ3VtZW50UG9vbGVyOiB0d29Bcmd1bWVudFBvb2xlciwKKyAgdGhyZWVBcmd1bWVudFBvb2xl
cjogdGhyZWVBcmd1bWVudFBvb2xlciwKKyAgZm91ckFyZ3VtZW50UG9vbGVyOiBmb3VyQXJndW1l
bnRQb29sZXIKK307CisKK21vZHVsZS5leHBvcnRzID0gUG9vbGVkQ2xhc3M7Cit9LHsiMjUiOjI1
LCIyOSI6Mjl9XSwzOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICog
Q29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4KKyAqIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNE
LXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlCisgKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qg
ZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnQKKyAqIG9m
IHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNh
bWUgZGlyZWN0b3J5LgorICoKKyAqLworCisndXNlIHN0cmljdCc7CisKK3ZhciBfYXNzaWduID0g
X2RlcmVxXygzMSk7CisKK3ZhciBSZWFjdENoaWxkcmVuID0gX2RlcmVxXyg0KTsKK3ZhciBSZWFj
dENvbXBvbmVudCA9IF9kZXJlcV8oNik7Cit2YXIgUmVhY3RQdXJlQ29tcG9uZW50ID0gX2RlcmVx
XygxNyk7Cit2YXIgUmVhY3RDbGFzcyA9IF9kZXJlcV8oNSk7Cit2YXIgUmVhY3RET01GYWN0b3Jp
ZXMgPSBfZGVyZXFfKDkpOwordmFyIFJlYWN0RWxlbWVudCA9IF9kZXJlcV8oMTApOwordmFyIFJl
YWN0UHJvcFR5cGVzID0gX2RlcmVxXygxNSk7Cit2YXIgUmVhY3RWZXJzaW9uID0gX2RlcmVxXygx
OSk7CisKK3ZhciBvbmx5Q2hpbGQgPSBfZGVyZXFfKDI0KTsKK3ZhciB3YXJuaW5nID0gX2RlcmVx
XygzMCk7CisKK3ZhciBjcmVhdGVFbGVtZW50ID0gUmVhY3RFbGVtZW50LmNyZWF0ZUVsZW1lbnQ7
Cit2YXIgY3JlYXRlRmFjdG9yeSA9IFJlYWN0RWxlbWVudC5jcmVhdGVGYWN0b3J5OwordmFyIGNs
b25lRWxlbWVudCA9IFJlYWN0RWxlbWVudC5jbG9uZUVsZW1lbnQ7CisKK2lmICgiZGV2ZWxvcG1l
bnQiICE9PSAncHJvZHVjdGlvbicpIHsKKyAgdmFyIGNhbkRlZmluZVByb3BlcnR5ID0gX2RlcmVx
XygyMCk7CisgIHZhciBSZWFjdEVsZW1lbnRWYWxpZGF0b3IgPSBfZGVyZXFfKDEyKTsKKyAgdmFy
IGRpZFdhcm5Qcm9wVHlwZXNEZXByZWNhdGVkID0gZmFsc2U7CisgIGNyZWF0ZUVsZW1lbnQgPSBS
ZWFjdEVsZW1lbnRWYWxpZGF0b3IuY3JlYXRlRWxlbWVudDsKKyAgY3JlYXRlRmFjdG9yeSA9IFJl
YWN0RWxlbWVudFZhbGlkYXRvci5jcmVhdGVGYWN0b3J5OworICBjbG9uZUVsZW1lbnQgPSBSZWFj
dEVsZW1lbnRWYWxpZGF0b3IuY2xvbmVFbGVtZW50OworfQorCit2YXIgX19zcHJlYWQgPSBfYXNz
aWduOworCitpZiAoImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nKSB7CisgIHZhciB3YXJu
ZWQgPSBmYWxzZTsKKyAgX19zcHJlYWQgPSBmdW5jdGlvbiAoKSB7CisgICAgImRldmVsb3BtZW50
IiAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyh3YXJuZWQsICdSZWFjdC5fX3NwcmVhZCBpcyBk
ZXByZWNhdGVkIGFuZCBzaG91bGQgbm90IGJlIHVzZWQuIFVzZSAnICsgJ09iamVjdC5hc3NpZ24g
ZGlyZWN0bHkgb3IgYW5vdGhlciBoZWxwZXIgZnVuY3Rpb24gd2l0aCBzaW1pbGFyICcgKyAnc2Vt
YW50aWNzLiBZb3UgbWF5IGJlIHNlZWluZyB0aGlzIHdhcm5pbmcgZHVlIHRvIHlvdXIgY29tcGls
ZXIuICcgKyAnU2VlIGh0dHBzOi8vZmIubWUvcmVhY3Qtc3ByZWFkLWRlcHJlY2F0aW9uIGZvciBt
b3JlIGRldGFpbHMuJykgOiB2b2lkIDA7CisgICAgd2FybmVkID0gdHJ1ZTsKKyAgICByZXR1cm4g
X2Fzc2lnbi5hcHBseShudWxsLCBhcmd1bWVudHMpOworICB9OworfQorCit2YXIgUmVhY3QgPSB7
CisKKyAgLy8gTW9kZXJuCisKKyAgQ2hpbGRyZW46IHsKKyAgICBtYXA6IFJlYWN0Q2hpbGRyZW4u
bWFwLAorICAgIGZvckVhY2g6IFJlYWN0Q2hpbGRyZW4uZm9yRWFjaCwKKyAgICBjb3VudDogUmVh
Y3RDaGlsZHJlbi5jb3VudCwKKyAgICB0b0FycmF5OiBSZWFjdENoaWxkcmVuLnRvQXJyYXksCisg
ICAgb25seTogb25seUNoaWxkCisgIH0sCisKKyAgQ29tcG9uZW50OiBSZWFjdENvbXBvbmVudCwK
KyAgUHVyZUNvbXBvbmVudDogUmVhY3RQdXJlQ29tcG9uZW50LAorCisgIGNyZWF0ZUVsZW1lbnQ6
IGNyZWF0ZUVsZW1lbnQsCisgIGNsb25lRWxlbWVudDogY2xvbmVFbGVtZW50LAorICBpc1ZhbGlk
RWxlbWVudDogUmVhY3RFbGVtZW50LmlzVmFsaWRFbGVtZW50LAorCisgIC8vIENsYXNzaWMKKwor
ICBQcm9wVHlwZXM6IFJlYWN0UHJvcFR5cGVzLAorICBjcmVhdGVDbGFzczogUmVhY3RDbGFzcy5j
cmVhdGVDbGFzcywKKyAgY3JlYXRlRmFjdG9yeTogY3JlYXRlRmFjdG9yeSwKKyAgY3JlYXRlTWl4
aW46IGZ1bmN0aW9uIChtaXhpbikgeworICAgIC8vIEN1cnJlbnRseSBhIG5vb3AuIFdpbGwgYmUg
dXNlZCB0byB2YWxpZGF0ZSBhbmQgdHJhY2UgbWl4aW5zLgorICAgIHJldHVybiBtaXhpbjsKKyAg
fSwKKworICAvLyBUaGlzIGxvb2tzIERPTSBzcGVjaWZpYyBidXQgdGhlc2UgYXJlIGFjdHVhbGx5
IGlzb21vcnBoaWMgaGVscGVycworICAvLyBzaW5jZSB0aGV5IGFyZSBqdXN0IGdlbmVyYXRpbmcg
RE9NIHN0cmluZ3MuCisgIERPTTogUmVhY3RET01GYWN0b3JpZXMsCisKKyAgdmVyc2lvbjogUmVh
Y3RWZXJzaW9uLAorCisgIC8vIERlcHJlY2F0ZWQgaG9vayBmb3IgSlNYIHNwcmVhZCwgZG9uJ3Qg
dXNlIHRoaXMgZm9yIGFueXRoaW5nLgorICBfX3NwcmVhZDogX19zcHJlYWQKK307CisKKy8vIFRP
RE86IEZpeCB0ZXN0cyBzbyB0aGF0IHRoaXMgZGVwcmVjYXRpb24gd2FybmluZyBkb2Vzbid0IGNh
dXNlIGZhaWx1cmVzLgoraWYgKCJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJykgeworICBp
ZiAoY2FuRGVmaW5lUHJvcGVydHkpIHsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUmVhY3Qs
ICdQcm9wVHlwZXMnLCB7CisgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgImRldmVs
b3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhkaWRXYXJuUHJvcFR5cGVzRGVwcmVj
YXRlZCwgJ0FjY2Vzc2luZyBQcm9wVHlwZXMgdmlhIHRoZSBtYWluIFJlYWN0IHBhY2thZ2UgaXMg
ZGVwcmVjYXRlZC4gVXNlICcgKyAndGhlIHByb3AtdHlwZXMgcGFja2FnZSBmcm9tIG5wbSBpbnN0
ZWFkLicpIDogdm9pZCAwOworICAgICAgICBkaWRXYXJuUHJvcFR5cGVzRGVwcmVjYXRlZCA9IHRy
dWU7CisgICAgICAgIHJldHVybiBSZWFjdFByb3BUeXBlczsKKyAgICAgIH0KKyAgICB9KTsKKyAg
fQorfQorCittb2R1bGUuZXhwb3J0cyA9IFJlYWN0OworfSx7IjEwIjoxMCwiMTIiOjEyLCIxNSI6
MTUsIjE3IjoxNywiMTkiOjE5LCIyMCI6MjAsIjI0IjoyNCwiMzAiOjMwLCIzMSI6MzEsIjQiOjQs
IjUiOjUsIjYiOjYsIjkiOjl9XSw0OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsK
Ky8qKgorICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4KKyAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRl
ciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlCisgKiBMSUNFTlNFIGZpbGUgaW4g
dGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3Jh
bnQKKyAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUg
aW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorICoKKyAqLworCisndXNlIHN0cmljdCc7CisKK3ZhciBQ
b29sZWRDbGFzcyA9IF9kZXJlcV8oMik7Cit2YXIgUmVhY3RFbGVtZW50ID0gX2RlcmVxXygxMCk7
CisKK3ZhciBlbXB0eUZ1bmN0aW9uID0gX2RlcmVxXygyNyk7Cit2YXIgdHJhdmVyc2VBbGxDaGls
ZHJlbiA9IF9kZXJlcV8oMjYpOworCit2YXIgdHdvQXJndW1lbnRQb29sZXIgPSBQb29sZWRDbGFz
cy50d29Bcmd1bWVudFBvb2xlcjsKK3ZhciBmb3VyQXJndW1lbnRQb29sZXIgPSBQb29sZWRDbGFz
cy5mb3VyQXJndW1lbnRQb29sZXI7CisKK3ZhciB1c2VyUHJvdmlkZWRLZXlFc2NhcGVSZWdleCA9
IC9cLysvZzsKK2Z1bmN0aW9uIGVzY2FwZVVzZXJQcm92aWRlZEtleSh0ZXh0KSB7CisgIHJldHVy
biAoJycgKyB0ZXh0KS5yZXBsYWNlKHVzZXJQcm92aWRlZEtleUVzY2FwZVJlZ2V4LCAnJCYvJyk7
Cit9CisKKy8qKgorICogUG9vbGVkQ2xhc3MgcmVwcmVzZW50aW5nIHRoZSBib29ra2VlcGluZyBh
c3NvY2lhdGVkIHdpdGggcGVyZm9ybWluZyBhIGNoaWxkCisgKiB0cmF2ZXJzYWwuIEFsbG93cyBh
dm9pZGluZyBiaW5kaW5nIGNhbGxiYWNrcy4KKyAqCisgKiBAY29uc3RydWN0b3IgRm9yRWFjaEJv
b2tLZWVwaW5nCisgKiBAcGFyYW0geyFmdW5jdGlvbn0gZm9yRWFjaEZ1bmN0aW9uIEZ1bmN0aW9u
IHRvIHBlcmZvcm0gdHJhdmVyc2FsIHdpdGguCisgKiBAcGFyYW0gez8qfSBmb3JFYWNoQ29udGV4
dCBDb250ZXh0IHRvIHBlcmZvcm0gY29udGV4dCB3aXRoLgorICovCitmdW5jdGlvbiBGb3JFYWNo
Qm9va0tlZXBpbmcoZm9yRWFjaEZ1bmN0aW9uLCBmb3JFYWNoQ29udGV4dCkgeworICB0aGlzLmZ1
bmMgPSBmb3JFYWNoRnVuY3Rpb247CisgIHRoaXMuY29udGV4dCA9IGZvckVhY2hDb250ZXh0Owor
ICB0aGlzLmNvdW50ID0gMDsKK30KK0ZvckVhY2hCb29rS2VlcGluZy5wcm90b3R5cGUuZGVzdHJ1
Y3RvciA9IGZ1bmN0aW9uICgpIHsKKyAgdGhpcy5mdW5jID0gbnVsbDsKKyAgdGhpcy5jb250ZXh0
ID0gbnVsbDsKKyAgdGhpcy5jb3VudCA9IDA7Cit9OworUG9vbGVkQ2xhc3MuYWRkUG9vbGluZ1Rv
KEZvckVhY2hCb29rS2VlcGluZywgdHdvQXJndW1lbnRQb29sZXIpOworCitmdW5jdGlvbiBmb3JF
YWNoU2luZ2xlQ2hpbGQoYm9va0tlZXBpbmcsIGNoaWxkLCBuYW1lKSB7CisgIHZhciBmdW5jID0g
Ym9va0tlZXBpbmcuZnVuYywKKyAgICAgIGNvbnRleHQgPSBib29rS2VlcGluZy5jb250ZXh0Owor
CisgIGZ1bmMuY2FsbChjb250ZXh0LCBjaGlsZCwgYm9va0tlZXBpbmcuY291bnQrKyk7Cit9CisK
Ky8qKgorICogSXRlcmF0ZXMgdGhyb3VnaCBjaGlsZHJlbiB0aGF0IGFyZSB0eXBpY2FsbHkgc3Bl
Y2lmaWVkIGFzIGBwcm9wcy5jaGlsZHJlbmAuCisgKgorICogU2VlIGh0dHBzOi8vZmFjZWJvb2su
Z2l0aHViLmlvL3JlYWN0L2RvY3MvdG9wLWxldmVsLWFwaS5odG1sI3JlYWN0LmNoaWxkcmVuLmZv
cmVhY2gKKyAqCisgKiBUaGUgcHJvdmlkZWQgZm9yRWFjaEZ1bmMoY2hpbGQsIGluZGV4KSB3aWxs
IGJlIGNhbGxlZCBmb3IgZWFjaAorICogbGVhZiBjaGlsZC4KKyAqCisgKiBAcGFyYW0gez8qfSBj
aGlsZHJlbiBDaGlsZHJlbiB0cmVlIGNvbnRhaW5lci4KKyAqIEBwYXJhbSB7ZnVuY3Rpb24oKiwg
aW50KX0gZm9yRWFjaEZ1bmMKKyAqIEBwYXJhbSB7Kn0gZm9yRWFjaENvbnRleHQgQ29udGV4dCBm
b3IgZm9yRWFjaENvbnRleHQuCisgKi8KK2Z1bmN0aW9uIGZvckVhY2hDaGlsZHJlbihjaGlsZHJl
biwgZm9yRWFjaEZ1bmMsIGZvckVhY2hDb250ZXh0KSB7CisgIGlmIChjaGlsZHJlbiA9PSBudWxs
KSB7CisgICAgcmV0dXJuIGNoaWxkcmVuOworICB9CisgIHZhciB0cmF2ZXJzZUNvbnRleHQgPSBG
b3JFYWNoQm9va0tlZXBpbmcuZ2V0UG9vbGVkKGZvckVhY2hGdW5jLCBmb3JFYWNoQ29udGV4dCk7
CisgIHRyYXZlcnNlQWxsQ2hpbGRyZW4oY2hpbGRyZW4sIGZvckVhY2hTaW5nbGVDaGlsZCwgdHJh
dmVyc2VDb250ZXh0KTsKKyAgRm9yRWFjaEJvb2tLZWVwaW5nLnJlbGVhc2UodHJhdmVyc2VDb250
ZXh0KTsKK30KKworLyoqCisgKiBQb29sZWRDbGFzcyByZXByZXNlbnRpbmcgdGhlIGJvb2trZWVw
aW5nIGFzc29jaWF0ZWQgd2l0aCBwZXJmb3JtaW5nIGEgY2hpbGQKKyAqIG1hcHBpbmcuIEFsbG93
cyBhdm9pZGluZyBiaW5kaW5nIGNhbGxiYWNrcy4KKyAqCisgKiBAY29uc3RydWN0b3IgTWFwQm9v
a0tlZXBpbmcKKyAqIEBwYXJhbSB7ISp9IG1hcFJlc3VsdCBPYmplY3QgY29udGFpbmluZyB0aGUg
b3JkZXJlZCBtYXAgb2YgcmVzdWx0cy4KKyAqIEBwYXJhbSB7IWZ1bmN0aW9ufSBtYXBGdW5jdGlv
biBGdW5jdGlvbiB0byBwZXJmb3JtIG1hcHBpbmcgd2l0aC4KKyAqIEBwYXJhbSB7Pyp9IG1hcENv
bnRleHQgQ29udGV4dCB0byBwZXJmb3JtIG1hcHBpbmcgd2l0aC4KKyAqLworZnVuY3Rpb24gTWFw
Qm9va0tlZXBpbmcobWFwUmVzdWx0LCBrZXlQcmVmaXgsIG1hcEZ1bmN0aW9uLCBtYXBDb250ZXh0
KSB7CisgIHRoaXMucmVzdWx0ID0gbWFwUmVzdWx0OworICB0aGlzLmtleVByZWZpeCA9IGtleVBy
ZWZpeDsKKyAgdGhpcy5mdW5jID0gbWFwRnVuY3Rpb247CisgIHRoaXMuY29udGV4dCA9IG1hcENv
bnRleHQ7CisgIHRoaXMuY291bnQgPSAwOworfQorTWFwQm9va0tlZXBpbmcucHJvdG90eXBlLmRl
c3RydWN0b3IgPSBmdW5jdGlvbiAoKSB7CisgIHRoaXMucmVzdWx0ID0gbnVsbDsKKyAgdGhpcy5r
ZXlQcmVmaXggPSBudWxsOworICB0aGlzLmZ1bmMgPSBudWxsOworICB0aGlzLmNvbnRleHQgPSBu
dWxsOworICB0aGlzLmNvdW50ID0gMDsKK307CitQb29sZWRDbGFzcy5hZGRQb29saW5nVG8oTWFw
Qm9va0tlZXBpbmcsIGZvdXJBcmd1bWVudFBvb2xlcik7CisKK2Z1bmN0aW9uIG1hcFNpbmdsZUNo
aWxkSW50b0NvbnRleHQoYm9va0tlZXBpbmcsIGNoaWxkLCBjaGlsZEtleSkgeworICB2YXIgcmVz
dWx0ID0gYm9va0tlZXBpbmcucmVzdWx0LAorICAgICAga2V5UHJlZml4ID0gYm9va0tlZXBpbmcu
a2V5UHJlZml4LAorICAgICAgZnVuYyA9IGJvb2tLZWVwaW5nLmZ1bmMsCisgICAgICBjb250ZXh0
ID0gYm9va0tlZXBpbmcuY29udGV4dDsKKworCisgIHZhciBtYXBwZWRDaGlsZCA9IGZ1bmMuY2Fs
bChjb250ZXh0LCBjaGlsZCwgYm9va0tlZXBpbmcuY291bnQrKyk7CisgIGlmIChBcnJheS5pc0Fy
cmF5KG1hcHBlZENoaWxkKSkgeworICAgIG1hcEludG9XaXRoS2V5UHJlZml4SW50ZXJuYWwobWFw
cGVkQ2hpbGQsIHJlc3VsdCwgY2hpbGRLZXksIGVtcHR5RnVuY3Rpb24udGhhdFJldHVybnNBcmd1
bWVudCk7CisgIH0gZWxzZSBpZiAobWFwcGVkQ2hpbGQgIT0gbnVsbCkgeworICAgIGlmIChSZWFj
dEVsZW1lbnQuaXNWYWxpZEVsZW1lbnQobWFwcGVkQ2hpbGQpKSB7CisgICAgICBtYXBwZWRDaGls
ZCA9IFJlYWN0RWxlbWVudC5jbG9uZUFuZFJlcGxhY2VLZXkobWFwcGVkQ2hpbGQsCisgICAgICAv
LyBLZWVwIGJvdGggdGhlIChtYXBwZWQpIGFuZCBvbGQga2V5cyBpZiB0aGV5IGRpZmZlciwganVz
dCBhcworICAgICAgLy8gdHJhdmVyc2VBbGxDaGlsZHJlbiB1c2VkIHRvIGRvIGZvciBvYmplY3Rz
IGFzIGNoaWxkcmVuCisgICAgICBrZXlQcmVmaXggKyAobWFwcGVkQ2hpbGQua2V5ICYmICghY2hp
bGQgfHwgY2hpbGQua2V5ICE9PSBtYXBwZWRDaGlsZC5rZXkpID8gZXNjYXBlVXNlclByb3ZpZGVk
S2V5KG1hcHBlZENoaWxkLmtleSkgKyAnLycgOiAnJykgKyBjaGlsZEtleSk7CisgICAgfQorICAg
IHJlc3VsdC5wdXNoKG1hcHBlZENoaWxkKTsKKyAgfQorfQorCitmdW5jdGlvbiBtYXBJbnRvV2l0
aEtleVByZWZpeEludGVybmFsKGNoaWxkcmVuLCBhcnJheSwgcHJlZml4LCBmdW5jLCBjb250ZXh0
KSB7CisgIHZhciBlc2NhcGVkUHJlZml4ID0gJyc7CisgIGlmIChwcmVmaXggIT0gbnVsbCkgewor
ICAgIGVzY2FwZWRQcmVmaXggPSBlc2NhcGVVc2VyUHJvdmlkZWRLZXkocHJlZml4KSArICcvJzsK
KyAgfQorICB2YXIgdHJhdmVyc2VDb250ZXh0ID0gTWFwQm9va0tlZXBpbmcuZ2V0UG9vbGVkKGFy
cmF5LCBlc2NhcGVkUHJlZml4LCBmdW5jLCBjb250ZXh0KTsKKyAgdHJhdmVyc2VBbGxDaGlsZHJl
bihjaGlsZHJlbiwgbWFwU2luZ2xlQ2hpbGRJbnRvQ29udGV4dCwgdHJhdmVyc2VDb250ZXh0KTsK
KyAgTWFwQm9va0tlZXBpbmcucmVsZWFzZSh0cmF2ZXJzZUNvbnRleHQpOworfQorCisvKioKKyAq
IE1hcHMgY2hpbGRyZW4gdGhhdCBhcmUgdHlwaWNhbGx5IHNwZWNpZmllZCBhcyBgcHJvcHMuY2hp
bGRyZW5gLgorICoKKyAqIFNlZSBodHRwczovL2ZhY2Vib29rLmdpdGh1Yi5pby9yZWFjdC9kb2Nz
L3RvcC1sZXZlbC1hcGkuaHRtbCNyZWFjdC5jaGlsZHJlbi5tYXAKKyAqCisgKiBUaGUgcHJvdmlk
ZWQgbWFwRnVuY3Rpb24oY2hpbGQsIGtleSwgaW5kZXgpIHdpbGwgYmUgY2FsbGVkIGZvciBlYWNo
CisgKiBsZWFmIGNoaWxkLgorICoKKyAqIEBwYXJhbSB7Pyp9IGNoaWxkcmVuIENoaWxkcmVuIHRy
ZWUgY29udGFpbmVyLgorICogQHBhcmFtIHtmdW5jdGlvbigqLCBpbnQpfSBmdW5jIFRoZSBtYXAg
ZnVuY3Rpb24uCisgKiBAcGFyYW0geyp9IGNvbnRleHQgQ29udGV4dCBmb3IgbWFwRnVuY3Rpb24u
CisgKiBAcmV0dXJuIHtvYmplY3R9IE9iamVjdCBjb250YWluaW5nIHRoZSBvcmRlcmVkIG1hcCBv
ZiByZXN1bHRzLgorICovCitmdW5jdGlvbiBtYXBDaGlsZHJlbihjaGlsZHJlbiwgZnVuYywgY29u
dGV4dCkgeworICBpZiAoY2hpbGRyZW4gPT0gbnVsbCkgeworICAgIHJldHVybiBjaGlsZHJlbjsK
KyAgfQorICB2YXIgcmVzdWx0ID0gW107CisgIG1hcEludG9XaXRoS2V5UHJlZml4SW50ZXJuYWwo
Y2hpbGRyZW4sIHJlc3VsdCwgbnVsbCwgZnVuYywgY29udGV4dCk7CisgIHJldHVybiByZXN1bHQ7
Cit9CisKK2Z1bmN0aW9uIGZvckVhY2hTaW5nbGVDaGlsZER1bW15KHRyYXZlcnNlQ29udGV4dCwg
Y2hpbGQsIG5hbWUpIHsKKyAgcmV0dXJuIG51bGw7Cit9CisKKy8qKgorICogQ291bnQgdGhlIG51
bWJlciBvZiBjaGlsZHJlbiB0aGF0IGFyZSB0eXBpY2FsbHkgc3BlY2lmaWVkIGFzCisgKiBgcHJv
cHMuY2hpbGRyZW5gLgorICoKKyAqIFNlZSBodHRwczovL2ZhY2Vib29rLmdpdGh1Yi5pby9yZWFj
dC9kb2NzL3RvcC1sZXZlbC1hcGkuaHRtbCNyZWFjdC5jaGlsZHJlbi5jb3VudAorICoKKyAqIEBw
YXJhbSB7Pyp9IGNoaWxkcmVuIENoaWxkcmVuIHRyZWUgY29udGFpbmVyLgorICogQHJldHVybiB7
bnVtYmVyfSBUaGUgbnVtYmVyIG9mIGNoaWxkcmVuLgorICovCitmdW5jdGlvbiBjb3VudENoaWxk
cmVuKGNoaWxkcmVuLCBjb250ZXh0KSB7CisgIHJldHVybiB0cmF2ZXJzZUFsbENoaWxkcmVuKGNo
aWxkcmVuLCBmb3JFYWNoU2luZ2xlQ2hpbGREdW1teSwgbnVsbCk7Cit9CisKKy8qKgorICogRmxh
dHRlbiBhIGNoaWxkcmVuIG9iamVjdCAodHlwaWNhbGx5IHNwZWNpZmllZCBhcyBgcHJvcHMuY2hp
bGRyZW5gKSBhbmQKKyAqIHJldHVybiBhbiBhcnJheSB3aXRoIGFwcHJvcHJpYXRlbHkgcmUta2V5
ZWQgY2hpbGRyZW4uCisgKgorICogU2VlIGh0dHBzOi8vZmFjZWJvb2suZ2l0aHViLmlvL3JlYWN0
L2RvY3MvdG9wLWxldmVsLWFwaS5odG1sI3JlYWN0LmNoaWxkcmVuLnRvYXJyYXkKKyAqLworZnVu
Y3Rpb24gdG9BcnJheShjaGlsZHJlbikgeworICB2YXIgcmVzdWx0ID0gW107CisgIG1hcEludG9X
aXRoS2V5UHJlZml4SW50ZXJuYWwoY2hpbGRyZW4sIHJlc3VsdCwgbnVsbCwgZW1wdHlGdW5jdGlv
bi50aGF0UmV0dXJuc0FyZ3VtZW50KTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKwordmFyIFJlYWN0
Q2hpbGRyZW4gPSB7CisgIGZvckVhY2g6IGZvckVhY2hDaGlsZHJlbiwKKyAgbWFwOiBtYXBDaGls
ZHJlbiwKKyAgbWFwSW50b1dpdGhLZXlQcmVmaXhJbnRlcm5hbDogbWFwSW50b1dpdGhLZXlQcmVm
aXhJbnRlcm5hbCwKKyAgY291bnQ6IGNvdW50Q2hpbGRyZW4sCisgIHRvQXJyYXk6IHRvQXJyYXkK
K307CisKK21vZHVsZS5leHBvcnRzID0gUmVhY3RDaGlsZHJlbjsKK30seyIxMCI6MTAsIjIiOjIs
IjI2IjoyNiwiMjciOjI3fV0sNTpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7Cisv
KioKKyAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuCisgKiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIg
dGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZQorICogTElDRU5TRSBmaWxlIGluIHRo
ZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50
CisgKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGlu
IHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAqCisgKi8KKworJ3VzZSBzdHJpY3QnOworCit2YXIgX3By
b2RJbnZhcmlhbnQgPSBfZGVyZXFfKDI1KSwKKyAgICBfYXNzaWduID0gX2RlcmVxXygzMSk7CisK
K3ZhciBSZWFjdENvbXBvbmVudCA9IF9kZXJlcV8oNik7Cit2YXIgUmVhY3RFbGVtZW50ID0gX2Rl
cmVxXygxMCk7Cit2YXIgUmVhY3RQcm9wVHlwZUxvY2F0aW9uTmFtZXMgPSBfZGVyZXFfKDE0KTsK
K3ZhciBSZWFjdE5vb3BVcGRhdGVRdWV1ZSA9IF9kZXJlcV8oMTMpOworCit2YXIgZW1wdHlPYmpl
Y3QgPSBfZGVyZXFfKDI4KTsKK3ZhciBpbnZhcmlhbnQgPSBfZGVyZXFfKDI5KTsKK3ZhciB3YXJu
aW5nID0gX2RlcmVxXygzMCk7CisKK3ZhciBNSVhJTlNfS0VZID0gJ21peGlucyc7CisKKy8vIEhl
bHBlciBmdW5jdGlvbiB0byBhbGxvdyB0aGUgY3JlYXRpb24gb2YgYW5vbnltb3VzIGZ1bmN0aW9u
cyB3aGljaCBkbyBub3QKKy8vIGhhdmUgLm5hbWUgc2V0IHRvIHRoZSBuYW1lIG9mIHRoZSB2YXJp
YWJsZSBiZWluZyBhc3NpZ25lZCB0by4KK2Z1bmN0aW9uIGlkZW50aXR5KGZuKSB7CisgIHJldHVy
biBmbjsKK30KKworLyoqCisgKiBQb2xpY2llcyB0aGF0IGRlc2NyaWJlIG1ldGhvZHMgaW4gYFJl
YWN0Q2xhc3NJbnRlcmZhY2VgLgorICovCisKKwordmFyIGluamVjdGVkTWl4aW5zID0gW107CisK
Ky8qKgorICogQ29tcG9zaXRlIGNvbXBvbmVudHMgYXJlIGhpZ2hlci1sZXZlbCBjb21wb25lbnRz
IHRoYXQgY29tcG9zZSBvdGhlciBjb21wb3NpdGUKKyAqIG9yIGhvc3QgY29tcG9uZW50cy4KKyAq
CisgKiBUbyBjcmVhdGUgYSBuZXcgdHlwZSBvZiBgUmVhY3RDbGFzc2AsIHBhc3MgYSBzcGVjaWZp
Y2F0aW9uIG9mCisgKiB5b3VyIG5ldyBjbGFzcyB0byBgUmVhY3QuY3JlYXRlQ2xhc3NgLiBUaGUg
b25seSByZXF1aXJlbWVudCBvZiB5b3VyIGNsYXNzCisgKiBzcGVjaWZpY2F0aW9uIGlzIHRoYXQg
eW91IGltcGxlbWVudCBhIGByZW5kZXJgIG1ldGhvZC4KKyAqCisgKiAgIHZhciBNeUNvbXBvbmVu
dCA9IFJlYWN0LmNyZWF0ZUNsYXNzKHsKKyAqICAgICByZW5kZXI6IGZ1bmN0aW9uKCkgeworICog
ICAgICAgcmV0dXJuIDxkaXY+SGVsbG8gV29ybGQ8L2Rpdj47CisgKiAgICAgfQorICogICB9KTsK
KyAqCisgKiBUaGUgY2xhc3Mgc3BlY2lmaWNhdGlvbiBzdXBwb3J0cyBhIHNwZWNpZmljIHByb3Rv
Y29sIG9mIG1ldGhvZHMgdGhhdCBoYXZlCisgKiBzcGVjaWFsIG1lYW5pbmcgKGUuZy4gYHJlbmRl
cmApLiBTZWUgYFJlYWN0Q2xhc3NJbnRlcmZhY2VgIGZvcgorICogbW9yZSB0aGUgY29tcHJlaGVu
c2l2ZSBwcm90b2NvbC4gQW55IG90aGVyIHByb3BlcnRpZXMgYW5kIG1ldGhvZHMgaW4gdGhlCisg
KiBjbGFzcyBzcGVjaWZpY2F0aW9uIHdpbGwgYmUgYXZhaWxhYmxlIG9uIHRoZSBwcm90b3R5cGUu
CisgKgorICogQGludGVyZmFjZSBSZWFjdENsYXNzSW50ZXJmYWNlCisgKiBAaW50ZXJuYWwKKyAq
LwordmFyIFJlYWN0Q2xhc3NJbnRlcmZhY2UgPSB7CisKKyAgLyoqCisgICAqIEFuIGFycmF5IG9m
IE1peGluIG9iamVjdHMgdG8gaW5jbHVkZSB3aGVuIGRlZmluaW5nIHlvdXIgY29tcG9uZW50Lgor
ICAgKgorICAgKiBAdHlwZSB7YXJyYXl9CisgICAqIEBvcHRpb25hbAorICAgKi8KKyAgbWl4aW5z
OiAnREVGSU5FX01BTlknLAorCisgIC8qKgorICAgKiBBbiBvYmplY3QgY29udGFpbmluZyBwcm9w
ZXJ0aWVzIGFuZCBtZXRob2RzIHRoYXQgc2hvdWxkIGJlIGRlZmluZWQgb24KKyAgICogdGhlIGNv
bXBvbmVudCdzIGNvbnN0cnVjdG9yIGluc3RlYWQgb2YgaXRzIHByb3RvdHlwZSAoc3RhdGljIG1l
dGhvZHMpLgorICAgKgorICAgKiBAdHlwZSB7b2JqZWN0fQorICAgKiBAb3B0aW9uYWwKKyAgICov
CisgIHN0YXRpY3M6ICdERUZJTkVfTUFOWScsCisKKyAgLyoqCisgICAqIERlZmluaXRpb24gb2Yg
cHJvcCB0eXBlcyBmb3IgdGhpcyBjb21wb25lbnQuCisgICAqCisgICAqIEB0eXBlIHtvYmplY3R9
CisgICAqIEBvcHRpb25hbAorICAgKi8KKyAgcHJvcFR5cGVzOiAnREVGSU5FX01BTlknLAorCisg
IC8qKgorICAgKiBEZWZpbml0aW9uIG9mIGNvbnRleHQgdHlwZXMgZm9yIHRoaXMgY29tcG9uZW50
LgorICAgKgorICAgKiBAdHlwZSB7b2JqZWN0fQorICAgKiBAb3B0aW9uYWwKKyAgICovCisgIGNv
bnRleHRUeXBlczogJ0RFRklORV9NQU5ZJywKKworICAvKioKKyAgICogRGVmaW5pdGlvbiBvZiBj
b250ZXh0IHR5cGVzIHRoaXMgY29tcG9uZW50IHNldHMgZm9yIGl0cyBjaGlsZHJlbi4KKyAgICoK
KyAgICogQHR5cGUge29iamVjdH0KKyAgICogQG9wdGlvbmFsCisgICAqLworICBjaGlsZENvbnRl
eHRUeXBlczogJ0RFRklORV9NQU5ZJywKKworICAvLyA9PT09IERlZmluaXRpb24gbWV0aG9kcyA9
PT09CisKKyAgLyoqCisgICAqIEludm9rZWQgd2hlbiB0aGUgY29tcG9uZW50IGlzIG1vdW50ZWQu
IFZhbHVlcyBpbiB0aGUgbWFwcGluZyB3aWxsIGJlIHNldCBvbgorICAgKiBgdGhpcy5wcm9wc2Ag
aWYgdGhhdCBwcm9wIGlzIG5vdCBzcGVjaWZpZWQgKGkuZS4gdXNpbmcgYW4gYGluYCBjaGVjayku
CisgICAqCisgICAqIFRoaXMgbWV0aG9kIGlzIGludm9rZWQgYmVmb3JlIGBnZXRJbml0aWFsU3Rh
dGVgIGFuZCB0aGVyZWZvcmUgY2Fubm90IHJlbHkKKyAgICogb24gYHRoaXMuc3RhdGVgIG9yIHVz
ZSBgdGhpcy5zZXRTdGF0ZWAuCisgICAqCisgICAqIEByZXR1cm4ge29iamVjdH0KKyAgICogQG9w
dGlvbmFsCisgICAqLworICBnZXREZWZhdWx0UHJvcHM6ICdERUZJTkVfTUFOWV9NRVJHRUQnLAor
CisgIC8qKgorICAgKiBJbnZva2VkIG9uY2UgYmVmb3JlIHRoZSBjb21wb25lbnQgaXMgbW91bnRl
ZC4gVGhlIHJldHVybiB2YWx1ZSB3aWxsIGJlIHVzZWQKKyAgICogYXMgdGhlIGluaXRpYWwgdmFs
dWUgb2YgYHRoaXMuc3RhdGVgLgorICAgKgorICAgKiAgIGdldEluaXRpYWxTdGF0ZTogZnVuY3Rp
b24oKSB7CisgICAqICAgICByZXR1cm4geworICAgKiAgICAgICBpc09uOiBmYWxzZSwKKyAgICog
ICAgICAgZm9vQmF6OiBuZXcgQmF6Rm9vKCkKKyAgICogICAgIH0KKyAgICogICB9CisgICAqCisg
ICAqIEByZXR1cm4ge29iamVjdH0KKyAgICogQG9wdGlvbmFsCisgICAqLworICBnZXRJbml0aWFs
U3RhdGU6ICdERUZJTkVfTUFOWV9NRVJHRUQnLAorCisgIC8qKgorICAgKiBAcmV0dXJuIHtvYmpl
Y3R9CisgICAqIEBvcHRpb25hbAorICAgKi8KKyAgZ2V0Q2hpbGRDb250ZXh0OiAnREVGSU5FX01B
TllfTUVSR0VEJywKKworICAvKioKKyAgICogVXNlcyBwcm9wcyBmcm9tIGB0aGlzLnByb3BzYCBh
bmQgc3RhdGUgZnJvbSBgdGhpcy5zdGF0ZWAgdG8gcmVuZGVyIHRoZQorICAgKiBzdHJ1Y3R1cmUg
b2YgdGhlIGNvbXBvbmVudC4KKyAgICoKKyAgICogTm8gZ3VhcmFudGVlcyBhcmUgbWFkZSBhYm91
dCB3aGVuIG9yIGhvdyBvZnRlbiB0aGlzIG1ldGhvZCBpcyBpbnZva2VkLCBzbworICAgKiBpdCBt
dXN0IG5vdCBoYXZlIHNpZGUgZWZmZWN0cy4KKyAgICoKKyAgICogICByZW5kZXI6IGZ1bmN0aW9u
KCkgeworICAgKiAgICAgdmFyIG5hbWUgPSB0aGlzLnByb3BzLm5hbWU7CisgICAqICAgICByZXR1
cm4gPGRpdj5IZWxsbywge25hbWV9ITwvZGl2PjsKKyAgICogICB9CisgICAqCisgICAqIEByZXR1
cm4ge1JlYWN0Q29tcG9uZW50fQorICAgKiBAcmVxdWlyZWQKKyAgICovCisgIHJlbmRlcjogJ0RF
RklORV9PTkNFJywKKworICAvLyA9PT09IERlbGVnYXRlIG1ldGhvZHMgPT09PQorCisgIC8qKgor
ICAgKiBJbnZva2VkIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBpbml0aWFsbHkgY3JlYXRlZCBhbmQg
YWJvdXQgdG8gYmUgbW91bnRlZC4KKyAgICogVGhpcyBtYXkgaGF2ZSBzaWRlIGVmZmVjdHMsIGJ1
dCBhbnkgZXh0ZXJuYWwgc3Vic2NyaXB0aW9ucyBvciBkYXRhIGNyZWF0ZWQKKyAgICogYnkgdGhp
cyBtZXRob2QgbXVzdCBiZSBjbGVhbmVkIHVwIGluIGBjb21wb25lbnRXaWxsVW5tb3VudGAuCisg
ICAqCisgICAqIEBvcHRpb25hbAorICAgKi8KKyAgY29tcG9uZW50V2lsbE1vdW50OiAnREVGSU5F
X01BTlknLAorCisgIC8qKgorICAgKiBJbnZva2VkIHdoZW4gdGhlIGNvbXBvbmVudCBoYXMgYmVl
biBtb3VudGVkIGFuZCBoYXMgYSBET00gcmVwcmVzZW50YXRpb24uCisgICAqIEhvd2V2ZXIsIHRo
ZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IHRoZSBET00gbm9kZSBpcyBpbiB0aGUgZG9jdW1lbnQu
CisgICAqCisgICAqIFVzZSB0aGlzIGFzIGFuIG9wcG9ydHVuaXR5IHRvIG9wZXJhdGUgb24gdGhl
IERPTSB3aGVuIHRoZSBjb21wb25lbnQgaGFzCisgICAqIGJlZW4gbW91bnRlZCAoaW5pdGlhbGl6
ZWQgYW5kIHJlbmRlcmVkKSBmb3IgdGhlIGZpcnN0IHRpbWUuCisgICAqCisgICAqIEBwYXJhbSB7
RE9NRWxlbWVudH0gcm9vdE5vZGUgRE9NIGVsZW1lbnQgcmVwcmVzZW50aW5nIHRoZSBjb21wb25l
bnQuCisgICAqIEBvcHRpb25hbAorICAgKi8KKyAgY29tcG9uZW50RGlkTW91bnQ6ICdERUZJTkVf
TUFOWScsCisKKyAgLyoqCisgICAqIEludm9rZWQgYmVmb3JlIHRoZSBjb21wb25lbnQgcmVjZWl2
ZXMgbmV3IHByb3BzLgorICAgKgorICAgKiBVc2UgdGhpcyBhcyBhbiBvcHBvcnR1bml0eSB0byBy
ZWFjdCB0byBhIHByb3AgdHJhbnNpdGlvbiBieSB1cGRhdGluZyB0aGUKKyAgICogc3RhdGUgdXNp
bmcgYHRoaXMuc2V0U3RhdGVgLiBDdXJyZW50IHByb3BzIGFyZSBhY2Nlc3NlZCB2aWEgYHRoaXMu
cHJvcHNgLgorICAgKgorICAgKiAgIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHM6IGZ1bmN0aW9u
KG5leHRQcm9wcywgbmV4dENvbnRleHQpIHsKKyAgICogICAgIHRoaXMuc2V0U3RhdGUoeworICAg
KiAgICAgICBsaWtlc0luY3JlYXNpbmc6IG5leHRQcm9wcy5saWtlQ291bnQgPiB0aGlzLnByb3Bz
Lmxpa2VDb3VudAorICAgKiAgICAgfSk7CisgICAqICAgfQorICAgKgorICAgKiBOT1RFOiBUaGVy
ZSBpcyBubyBlcXVpdmFsZW50IGBjb21wb25lbnRXaWxsUmVjZWl2ZVN0YXRlYC4gQW4gaW5jb21p
bmcgcHJvcAorICAgKiB0cmFuc2l0aW9uIG1heSBjYXVzZSBhIHN0YXRlIGNoYW5nZSwgYnV0IHRo
ZSBvcHBvc2l0ZSBpcyBub3QgdHJ1ZS4gSWYgeW91CisgICAqIG5lZWQgaXQsIHlvdSBhcmUgcHJv
YmFibHkgbG9va2luZyBmb3IgYGNvbXBvbmVudFdpbGxVcGRhdGVgLgorICAgKgorICAgKiBAcGFy
YW0ge29iamVjdH0gbmV4dFByb3BzCisgICAqIEBvcHRpb25hbAorICAgKi8KKyAgY29tcG9uZW50
V2lsbFJlY2VpdmVQcm9wczogJ0RFRklORV9NQU5ZJywKKworICAvKioKKyAgICogSW52b2tlZCB3
aGlsZSBkZWNpZGluZyBpZiB0aGUgY29tcG9uZW50IHNob3VsZCBiZSB1cGRhdGVkIGFzIGEgcmVz
dWx0IG9mCisgICAqIHJlY2VpdmluZyBuZXcgcHJvcHMsIHN0YXRlIGFuZC9vciBjb250ZXh0Lgor
ICAgKgorICAgKiBVc2UgdGhpcyBhcyBhbiBvcHBvcnR1bml0eSB0byBgcmV0dXJuIGZhbHNlYCB3
aGVuIHlvdSdyZSBjZXJ0YWluIHRoYXQgdGhlCisgICAqIHRyYW5zaXRpb24gdG8gdGhlIG5ldyBw
cm9wcy9zdGF0ZS9jb250ZXh0IHdpbGwgbm90IHJlcXVpcmUgYSBjb21wb25lbnQKKyAgICogdXBk
YXRlLgorICAgKgorICAgKiAgIHNob3VsZENvbXBvbmVudFVwZGF0ZTogZnVuY3Rpb24obmV4dFBy
b3BzLCBuZXh0U3RhdGUsIG5leHRDb250ZXh0KSB7CisgICAqICAgICByZXR1cm4gIWVxdWFsKG5l
eHRQcm9wcywgdGhpcy5wcm9wcykgfHwKKyAgICogICAgICAgIWVxdWFsKG5leHRTdGF0ZSwgdGhp
cy5zdGF0ZSkgfHwKKyAgICogICAgICAgIWVxdWFsKG5leHRDb250ZXh0LCB0aGlzLmNvbnRleHQp
OworICAgKiAgIH0KKyAgICoKKyAgICogQHBhcmFtIHtvYmplY3R9IG5leHRQcm9wcworICAgKiBA
cGFyYW0gez9vYmplY3R9IG5leHRTdGF0ZQorICAgKiBAcGFyYW0gez9vYmplY3R9IG5leHRDb250
ZXh0CisgICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIGNvbXBvbmVudCBzaG91bGQg
dXBkYXRlLgorICAgKiBAb3B0aW9uYWwKKyAgICovCisgIHNob3VsZENvbXBvbmVudFVwZGF0ZTog
J0RFRklORV9PTkNFJywKKworICAvKioKKyAgICogSW52b2tlZCB3aGVuIHRoZSBjb21wb25lbnQg
aXMgYWJvdXQgdG8gdXBkYXRlIGR1ZSB0byBhIHRyYW5zaXRpb24gZnJvbQorICAgKiBgdGhpcy5w
cm9wc2AsIGB0aGlzLnN0YXRlYCBhbmQgYHRoaXMuY29udGV4dGAgdG8gYG5leHRQcm9wc2AsIGBu
ZXh0U3RhdGVgCisgICAqIGFuZCBgbmV4dENvbnRleHRgLgorICAgKgorICAgKiBVc2UgdGhpcyBh
cyBhbiBvcHBvcnR1bml0eSB0byBwZXJmb3JtIHByZXBhcmF0aW9uIGJlZm9yZSBhbiB1cGRhdGUg
b2NjdXJzLgorICAgKgorICAgKiBOT1RFOiBZb3UgKipjYW5ub3QqKiB1c2UgYHRoaXMuc2V0U3Rh
dGUoKWAgaW4gdGhpcyBtZXRob2QuCisgICAqCisgICAqIEBwYXJhbSB7b2JqZWN0fSBuZXh0UHJv
cHMKKyAgICogQHBhcmFtIHs/b2JqZWN0fSBuZXh0U3RhdGUKKyAgICogQHBhcmFtIHs/b2JqZWN0
fSBuZXh0Q29udGV4dAorICAgKiBAcGFyYW0ge1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb259IHRy
YW5zYWN0aW9uCisgICAqIEBvcHRpb25hbAorICAgKi8KKyAgY29tcG9uZW50V2lsbFVwZGF0ZTog
J0RFRklORV9NQU5ZJywKKworICAvKioKKyAgICogSW52b2tlZCB3aGVuIHRoZSBjb21wb25lbnQn
cyBET00gcmVwcmVzZW50YXRpb24gaGFzIGJlZW4gdXBkYXRlZC4KKyAgICoKKyAgICogVXNlIHRo
aXMgYXMgYW4gb3Bwb3J0dW5pdHkgdG8gb3BlcmF0ZSBvbiB0aGUgRE9NIHdoZW4gdGhlIGNvbXBv
bmVudCBoYXMKKyAgICogYmVlbiB1cGRhdGVkLgorICAgKgorICAgKiBAcGFyYW0ge29iamVjdH0g
cHJldlByb3BzCisgICAqIEBwYXJhbSB7P29iamVjdH0gcHJldlN0YXRlCisgICAqIEBwYXJhbSB7
P29iamVjdH0gcHJldkNvbnRleHQKKyAgICogQHBhcmFtIHtET01FbGVtZW50fSByb290Tm9kZSBE
T00gZWxlbWVudCByZXByZXNlbnRpbmcgdGhlIGNvbXBvbmVudC4KKyAgICogQG9wdGlvbmFsCisg
ICAqLworICBjb21wb25lbnREaWRVcGRhdGU6ICdERUZJTkVfTUFOWScsCisKKyAgLyoqCisgICAq
IEludm9rZWQgd2hlbiB0aGUgY29tcG9uZW50IGlzIGFib3V0IHRvIGJlIHJlbW92ZWQgZnJvbSBp
dHMgcGFyZW50IGFuZCBoYXZlCisgICAqIGl0cyBET00gcmVwcmVzZW50YXRpb24gZGVzdHJveWVk
LgorICAgKgorICAgKiBVc2UgdGhpcyBhcyBhbiBvcHBvcnR1bml0eSB0byBkZWFsbG9jYXRlIGFu
eSBleHRlcm5hbCByZXNvdXJjZXMuCisgICAqCisgICAqIE5PVEU6IFRoZXJlIGlzIG5vIGBjb21w
b25lbnREaWRVbm1vdW50YCBzaW5jZSB5b3VyIGNvbXBvbmVudCB3aWxsIGhhdmUgYmVlbgorICAg
KiBkZXN0cm95ZWQgYnkgdGhhdCBwb2ludC4KKyAgICoKKyAgICogQG9wdGlvbmFsCisgICAqLwor
ICBjb21wb25lbnRXaWxsVW5tb3VudDogJ0RFRklORV9NQU5ZJywKKworICAvLyA9PT09IEFkdmFu
Y2VkIG1ldGhvZHMgPT09PQorCisgIC8qKgorICAgKiBVcGRhdGVzIHRoZSBjb21wb25lbnQncyBj
dXJyZW50bHkgbW91bnRlZCBET00gcmVwcmVzZW50YXRpb24uCisgICAqCisgICAqIEJ5IGRlZmF1
bHQsIHRoaXMgaW1wbGVtZW50cyBSZWFjdCdzIHJlbmRlcmluZyBhbmQgcmVjb25jaWxpYXRpb24g
YWxnb3JpdGhtLgorICAgKiBTb3BoaXN0aWNhdGVkIGNsaWVudHMgbWF5IHdpc2ggdG8gb3ZlcnJp
ZGUgdGhpcy4KKyAgICoKKyAgICogQHBhcmFtIHtSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9ufSB0
cmFuc2FjdGlvbgorICAgKiBAaW50ZXJuYWwKKyAgICogQG92ZXJyaWRhYmxlCisgICAqLworICB1
cGRhdGVDb21wb25lbnQ6ICdPVkVSUklERV9CQVNFJworCit9OworCisvKioKKyAqIE1hcHBpbmcg
ZnJvbSBjbGFzcyBzcGVjaWZpY2F0aW9uIGtleXMgdG8gc3BlY2lhbCBwcm9jZXNzaW5nIGZ1bmN0
aW9ucy4KKyAqCisgKiBBbHRob3VnaCB0aGVzZSBhcmUgZGVjbGFyZWQgbGlrZSBpbnN0YW5jZSBw
cm9wZXJ0aWVzIGluIHRoZSBzcGVjaWZpY2F0aW9uCisgKiB3aGVuIGRlZmluaW5nIGNsYXNzZXMg
dXNpbmcgYFJlYWN0LmNyZWF0ZUNsYXNzYCwgdGhleSBhcmUgYWN0dWFsbHkgc3RhdGljCisgKiBh
bmQgYXJlIGFjY2Vzc2libGUgb24gdGhlIGNvbnN0cnVjdG9yIGluc3RlYWQgb2YgdGhlIHByb3Rv
dHlwZS4gRGVzcGl0ZQorICogYmVpbmcgc3RhdGljLCB0aGV5IG11c3QgYmUgZGVmaW5lZCBvdXRz
aWRlIG9mIHRoZSAic3RhdGljcyIga2V5IHVuZGVyCisgKiB3aGljaCBhbGwgb3RoZXIgc3RhdGlj
IG1ldGhvZHMgYXJlIGRlZmluZWQuCisgKi8KK3ZhciBSRVNFUlZFRF9TUEVDX0tFWVMgPSB7Cisg
IGRpc3BsYXlOYW1lOiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIGRpc3BsYXlOYW1lKSB7CisgICAg
Q29uc3RydWN0b3IuZGlzcGxheU5hbWUgPSBkaXNwbGF5TmFtZTsKKyAgfSwKKyAgbWl4aW5zOiBm
dW5jdGlvbiAoQ29uc3RydWN0b3IsIG1peGlucykgeworICAgIGlmIChtaXhpbnMpIHsKKyAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgbWl4aW5zLmxlbmd0aDsgaSsrKSB7CisgICAgICAgIG1peFNw
ZWNJbnRvQ29tcG9uZW50KENvbnN0cnVjdG9yLCBtaXhpbnNbaV0pOworICAgICAgfQorICAgIH0K
KyAgfSwKKyAgY2hpbGRDb250ZXh0VHlwZXM6IGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgY2hpbGRD
b250ZXh0VHlwZXMpIHsKKyAgICBpZiAoImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nKSB7
CisgICAgICB2YWxpZGF0ZVR5cGVEZWYoQ29uc3RydWN0b3IsIGNoaWxkQ29udGV4dFR5cGVzLCAn
Y2hpbGRDb250ZXh0Jyk7CisgICAgfQorICAgIENvbnN0cnVjdG9yLmNoaWxkQ29udGV4dFR5cGVz
ID0gX2Fzc2lnbih7fSwgQ29uc3RydWN0b3IuY2hpbGRDb250ZXh0VHlwZXMsIGNoaWxkQ29udGV4
dFR5cGVzKTsKKyAgfSwKKyAgY29udGV4dFR5cGVzOiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIGNv
bnRleHRUeXBlcykgeworICAgIGlmICgiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicpIHsK
KyAgICAgIHZhbGlkYXRlVHlwZURlZihDb25zdHJ1Y3RvciwgY29udGV4dFR5cGVzLCAnY29udGV4
dCcpOworICAgIH0KKyAgICBDb25zdHJ1Y3Rvci5jb250ZXh0VHlwZXMgPSBfYXNzaWduKHt9LCBD
b25zdHJ1Y3Rvci5jb250ZXh0VHlwZXMsIGNvbnRleHRUeXBlcyk7CisgIH0sCisgIC8qKgorICAg
KiBTcGVjaWFsIGNhc2UgZ2V0RGVmYXVsdFByb3BzIHdoaWNoIHNob3VsZCBtb3ZlIGludG8gc3Rh
dGljcyBidXQgcmVxdWlyZXMKKyAgICogYXV0b21hdGljIG1lcmdpbmcuCisgICAqLworICBnZXRE
ZWZhdWx0UHJvcHM6IGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgZ2V0RGVmYXVsdFByb3BzKSB7Cisg
ICAgaWYgKENvbnN0cnVjdG9yLmdldERlZmF1bHRQcm9wcykgeworICAgICAgQ29uc3RydWN0b3Iu
Z2V0RGVmYXVsdFByb3BzID0gY3JlYXRlTWVyZ2VkUmVzdWx0RnVuY3Rpb24oQ29uc3RydWN0b3Iu
Z2V0RGVmYXVsdFByb3BzLCBnZXREZWZhdWx0UHJvcHMpOworICAgIH0gZWxzZSB7CisgICAgICBD
b25zdHJ1Y3Rvci5nZXREZWZhdWx0UHJvcHMgPSBnZXREZWZhdWx0UHJvcHM7CisgICAgfQorICB9
LAorICBwcm9wVHlwZXM6IGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvcFR5cGVzKSB7CisgICAg
aWYgKCJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJykgeworICAgICAgdmFsaWRhdGVUeXBl
RGVmKENvbnN0cnVjdG9yLCBwcm9wVHlwZXMsICdwcm9wJyk7CisgICAgfQorICAgIENvbnN0cnVj
dG9yLnByb3BUeXBlcyA9IF9hc3NpZ24oe30sIENvbnN0cnVjdG9yLnByb3BUeXBlcywgcHJvcFR5
cGVzKTsKKyAgfSwKKyAgc3RhdGljczogZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBzdGF0aWNzKSB7
CisgICAgbWl4U3RhdGljU3BlY0ludG9Db21wb25lbnQoQ29uc3RydWN0b3IsIHN0YXRpY3MpOwor
ICB9LAorICBhdXRvYmluZDogZnVuY3Rpb24gKCkge30gfTsKKworZnVuY3Rpb24gdmFsaWRhdGVU
eXBlRGVmKENvbnN0cnVjdG9yLCB0eXBlRGVmLCBsb2NhdGlvbikgeworICBmb3IgKHZhciBwcm9w
TmFtZSBpbiB0eXBlRGVmKSB7CisgICAgaWYgKHR5cGVEZWYuaGFzT3duUHJvcGVydHkocHJvcE5h
bWUpKSB7CisgICAgICAvLyB1c2UgYSB3YXJuaW5nIGluc3RlYWQgb2YgYW4gaW52YXJpYW50IHNv
IGNvbXBvbmVudHMKKyAgICAgIC8vIGRvbid0IHNob3cgdXAgaW4gcHJvZCBidXQgb25seSBpbiBf
X0RFVl9fCisgICAgICAiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKHR5
cGVvZiB0eXBlRGVmW3Byb3BOYW1lXSA9PT0gJ2Z1bmN0aW9uJywgJyVzOiAlcyB0eXBlIGAlc2Ag
aXMgaW52YWxpZDsgaXQgbXVzdCBiZSBhIGZ1bmN0aW9uLCB1c3VhbGx5IGZyb20gJyArICdSZWFj
dC5Qcm9wVHlwZXMuJywgQ29uc3RydWN0b3IuZGlzcGxheU5hbWUgfHwgJ1JlYWN0Q2xhc3MnLCBS
ZWFjdFByb3BUeXBlTG9jYXRpb25OYW1lc1tsb2NhdGlvbl0sIHByb3BOYW1lKSA6IHZvaWQgMDsK
KyAgICB9CisgIH0KK30KKworZnVuY3Rpb24gdmFsaWRhdGVNZXRob2RPdmVycmlkZShpc0FscmVh
ZHlEZWZpbmVkLCBuYW1lKSB7CisgIHZhciBzcGVjUG9saWN5ID0gUmVhY3RDbGFzc0ludGVyZmFj
ZS5oYXNPd25Qcm9wZXJ0eShuYW1lKSA/IFJlYWN0Q2xhc3NJbnRlcmZhY2VbbmFtZV0gOiBudWxs
OworCisgIC8vIERpc2FsbG93IG92ZXJyaWRpbmcgb2YgYmFzZSBjbGFzcyBtZXRob2RzIHVubGVz
cyBleHBsaWNpdGx5IGFsbG93ZWQuCisgIGlmIChSZWFjdENsYXNzTWl4aW4uaGFzT3duUHJvcGVy
dHkobmFtZSkpIHsKKyAgICAhKHNwZWNQb2xpY3kgPT09ICdPVkVSUklERV9CQVNFJykgPyAiZGV2
ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdSZWFjdENsYXNz
SW50ZXJmYWNlOiBZb3UgYXJlIGF0dGVtcHRpbmcgdG8gb3ZlcnJpZGUgYCVzYCBmcm9tIHlvdXIg
Y2xhc3Mgc3BlY2lmaWNhdGlvbi4gRW5zdXJlIHRoYXQgeW91ciBtZXRob2QgbmFtZXMgZG8gbm90
IG92ZXJsYXAgd2l0aCBSZWFjdCBtZXRob2RzLicsIG5hbWUpIDogX3Byb2RJbnZhcmlhbnQoJzcz
JywgbmFtZSkgOiB2b2lkIDA7CisgIH0KKworICAvLyBEaXNhbGxvdyBkZWZpbmluZyBtZXRob2Rz
IG1vcmUgdGhhbiBvbmNlIHVubGVzcyBleHBsaWNpdGx5IGFsbG93ZWQuCisgIGlmIChpc0FscmVh
ZHlEZWZpbmVkKSB7CisgICAgIShzcGVjUG9saWN5ID09PSAnREVGSU5FX01BTlknIHx8IHNwZWNQ
b2xpY3kgPT09ICdERUZJTkVfTUFOWV9NRVJHRUQnKSA/ICJkZXZlbG9wbWVudCIgIT09ICdwcm9k
dWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ1JlYWN0Q2xhc3NJbnRlcmZhY2U6IFlvdSBhcmUg
YXR0ZW1wdGluZyB0byBkZWZpbmUgYCVzYCBvbiB5b3VyIGNvbXBvbmVudCBtb3JlIHRoYW4gb25j
ZS4gVGhpcyBjb25mbGljdCBtYXkgYmUgZHVlIHRvIGEgbWl4aW4uJywgbmFtZSkgOiBfcHJvZElu
dmFyaWFudCgnNzQnLCBuYW1lKSA6IHZvaWQgMDsKKyAgfQorfQorCisvKioKKyAqIE1peGluIGhl
bHBlciB3aGljaCBoYW5kbGVzIHBvbGljeSB2YWxpZGF0aW9uIGFuZCByZXNlcnZlZAorICogc3Bl
Y2lmaWNhdGlvbiBrZXlzIHdoZW4gYnVpbGRpbmcgUmVhY3QgY2xhc3Nlcy4KKyAqLworZnVuY3Rp
b24gbWl4U3BlY0ludG9Db21wb25lbnQoQ29uc3RydWN0b3IsIHNwZWMpIHsKKyAgaWYgKCFzcGVj
KSB7CisgICAgaWYgKCJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJykgeworICAgICAgdmFy
IHR5cGVvZlNwZWMgPSB0eXBlb2Ygc3BlYzsKKyAgICAgIHZhciBpc01peGluVmFsaWQgPSB0eXBl
b2ZTcGVjID09PSAnb2JqZWN0JyAmJiBzcGVjICE9PSBudWxsOworCisgICAgICAiZGV2ZWxvcG1l
bnQiICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGlzTWl4aW5WYWxpZCwgJyVzOiBZb3VcJ3Jl
IGF0dGVtcHRpbmcgdG8gaW5jbHVkZSBhIG1peGluIHRoYXQgaXMgZWl0aGVyIG51bGwgJyArICdv
ciBub3QgYW4gb2JqZWN0LiBDaGVjayB0aGUgbWl4aW5zIGluY2x1ZGVkIGJ5IHRoZSBjb21wb25l
bnQsICcgKyAnYXMgd2VsbCBhcyBhbnkgbWl4aW5zIHRoZXkgaW5jbHVkZSB0aGVtc2VsdmVzLiAn
ICsgJ0V4cGVjdGVkIG9iamVjdCBidXQgZ290ICVzLicsIENvbnN0cnVjdG9yLmRpc3BsYXlOYW1l
IHx8ICdSZWFjdENsYXNzJywgc3BlYyA9PT0gbnVsbCA/IG51bGwgOiB0eXBlb2ZTcGVjKSA6IHZv
aWQgMDsKKyAgICB9CisKKyAgICByZXR1cm47CisgIH0KKworICAhKHR5cGVvZiBzcGVjICE9PSAn
ZnVuY3Rpb24nKSA/ICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChm
YWxzZSwgJ1JlYWN0Q2xhc3M6IFlvdVwncmUgYXR0ZW1wdGluZyB0byB1c2UgYSBjb21wb25lbnQg
Y2xhc3Mgb3IgZnVuY3Rpb24gYXMgYSBtaXhpbi4gSW5zdGVhZCwganVzdCB1c2UgYSByZWd1bGFy
IG9iamVjdC4nKSA6IF9wcm9kSW52YXJpYW50KCc3NScpIDogdm9pZCAwOworICAhIVJlYWN0RWxl
bWVudC5pc1ZhbGlkRWxlbWVudChzcGVjKSA/ICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9u
JyA/IGludmFyaWFudChmYWxzZSwgJ1JlYWN0Q2xhc3M6IFlvdVwncmUgYXR0ZW1wdGluZyB0byB1
c2UgYSBjb21wb25lbnQgYXMgYSBtaXhpbi4gSW5zdGVhZCwganVzdCB1c2UgYSByZWd1bGFyIG9i
amVjdC4nKSA6IF9wcm9kSW52YXJpYW50KCc3NicpIDogdm9pZCAwOworCisgIHZhciBwcm90byA9
IENvbnN0cnVjdG9yLnByb3RvdHlwZTsKKyAgdmFyIGF1dG9CaW5kUGFpcnMgPSBwcm90by5fX3Jl
YWN0QXV0b0JpbmRQYWlyczsKKworICAvLyBCeSBoYW5kbGluZyBtaXhpbnMgYmVmb3JlIGFueSBv
dGhlciBwcm9wZXJ0aWVzLCB3ZSBlbnN1cmUgdGhlIHNhbWUKKyAgLy8gY2hhaW5pbmcgb3JkZXIg
aXMgYXBwbGllZCB0byBtZXRob2RzIHdpdGggREVGSU5FX01BTlkgcG9saWN5LCB3aGV0aGVyCisg
IC8vIG1peGlucyBhcmUgbGlzdGVkIGJlZm9yZSBvciBhZnRlciB0aGVzZSBtZXRob2RzIGluIHRo
ZSBzcGVjLgorICBpZiAoc3BlYy5oYXNPd25Qcm9wZXJ0eShNSVhJTlNfS0VZKSkgeworICAgIFJF
U0VSVkVEX1NQRUNfS0VZUy5taXhpbnMoQ29uc3RydWN0b3IsIHNwZWMubWl4aW5zKTsKKyAgfQor
CisgIGZvciAodmFyIG5hbWUgaW4gc3BlYykgeworICAgIGlmICghc3BlYy5oYXNPd25Qcm9wZXJ0
eShuYW1lKSkgeworICAgICAgY29udGludWU7CisgICAgfQorCisgICAgaWYgKG5hbWUgPT09IE1J
WElOU19LRVkpIHsKKyAgICAgIC8vIFdlIGhhdmUgYWxyZWFkeSBoYW5kbGVkIG1peGlucyBpbiBh
IHNwZWNpYWwgY2FzZSBhYm92ZS4KKyAgICAgIGNvbnRpbnVlOworICAgIH0KKworICAgIHZhciBw
cm9wZXJ0eSA9IHNwZWNbbmFtZV07CisgICAgdmFyIGlzQWxyZWFkeURlZmluZWQgPSBwcm90by5o
YXNPd25Qcm9wZXJ0eShuYW1lKTsKKyAgICB2YWxpZGF0ZU1ldGhvZE92ZXJyaWRlKGlzQWxyZWFk
eURlZmluZWQsIG5hbWUpOworCisgICAgaWYgKFJFU0VSVkVEX1NQRUNfS0VZUy5oYXNPd25Qcm9w
ZXJ0eShuYW1lKSkgeworICAgICAgUkVTRVJWRURfU1BFQ19LRVlTW25hbWVdKENvbnN0cnVjdG9y
LCBwcm9wZXJ0eSk7CisgICAgfSBlbHNlIHsKKyAgICAgIC8vIFNldHVwIG1ldGhvZHMgb24gcHJv
dG90eXBlOgorICAgICAgLy8gVGhlIGZvbGxvd2luZyBtZW1iZXIgbWV0aG9kcyBzaG91bGQgbm90
IGJlIGF1dG9tYXRpY2FsbHkgYm91bmQ6CisgICAgICAvLyAxLiBFeHBlY3RlZCBSZWFjdENsYXNz
IG1ldGhvZHMgKGluIHRoZSAiaW50ZXJmYWNlIikuCisgICAgICAvLyAyLiBPdmVycmlkZGVuIG1l
dGhvZHMgKHRoYXQgd2VyZSBtaXhlZCBpbikuCisgICAgICB2YXIgaXNSZWFjdENsYXNzTWV0aG9k
ID0gUmVhY3RDbGFzc0ludGVyZmFjZS5oYXNPd25Qcm9wZXJ0eShuYW1lKTsKKyAgICAgIHZhciBp
c0Z1bmN0aW9uID0gdHlwZW9mIHByb3BlcnR5ID09PSAnZnVuY3Rpb24nOworICAgICAgdmFyIHNo
b3VsZEF1dG9CaW5kID0gaXNGdW5jdGlvbiAmJiAhaXNSZWFjdENsYXNzTWV0aG9kICYmICFpc0Fs
cmVhZHlEZWZpbmVkICYmIHNwZWMuYXV0b2JpbmQgIT09IGZhbHNlOworCisgICAgICBpZiAoc2hv
dWxkQXV0b0JpbmQpIHsKKyAgICAgICAgYXV0b0JpbmRQYWlycy5wdXNoKG5hbWUsIHByb3BlcnR5
KTsKKyAgICAgICAgcHJvdG9bbmFtZV0gPSBwcm9wZXJ0eTsKKyAgICAgIH0gZWxzZSB7CisgICAg
ICAgIGlmIChpc0FscmVhZHlEZWZpbmVkKSB7CisgICAgICAgICAgdmFyIHNwZWNQb2xpY3kgPSBS
ZWFjdENsYXNzSW50ZXJmYWNlW25hbWVdOworCisgICAgICAgICAgLy8gVGhlc2UgY2FzZXMgc2hv
dWxkIGFscmVhZHkgYmUgY2F1Z2h0IGJ5IHZhbGlkYXRlTWV0aG9kT3ZlcnJpZGUuCisgICAgICAg
ICAgIShpc1JlYWN0Q2xhc3NNZXRob2QgJiYgKHNwZWNQb2xpY3kgPT09ICdERUZJTkVfTUFOWV9N
RVJHRUQnIHx8IHNwZWNQb2xpY3kgPT09ICdERUZJTkVfTUFOWScpKSA/ICJkZXZlbG9wbWVudCIg
IT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ1JlYWN0Q2xhc3M6IFVuZXhwZWN0
ZWQgc3BlYyBwb2xpY3kgJXMgZm9yIGtleSAlcyB3aGVuIG1peGluZyBpbiBjb21wb25lbnQgc3Bl
Y3MuJywgc3BlY1BvbGljeSwgbmFtZSkgOiBfcHJvZEludmFyaWFudCgnNzcnLCBzcGVjUG9saWN5
LCBuYW1lKSA6IHZvaWQgMDsKKworICAgICAgICAgIC8vIEZvciBtZXRob2RzIHdoaWNoIGFyZSBk
ZWZpbmVkIG1vcmUgdGhhbiBvbmNlLCBjYWxsIHRoZSBleGlzdGluZworICAgICAgICAgIC8vIG1l
dGhvZHMgYmVmb3JlIGNhbGxpbmcgdGhlIG5ldyBwcm9wZXJ0eSwgbWVyZ2luZyBpZiBhcHByb3By
aWF0ZS4KKyAgICAgICAgICBpZiAoc3BlY1BvbGljeSA9PT0gJ0RFRklORV9NQU5ZX01FUkdFRCcp
IHsKKyAgICAgICAgICAgIHByb3RvW25hbWVdID0gY3JlYXRlTWVyZ2VkUmVzdWx0RnVuY3Rpb24o
cHJvdG9bbmFtZV0sIHByb3BlcnR5KTsKKyAgICAgICAgICB9IGVsc2UgaWYgKHNwZWNQb2xpY3kg
PT09ICdERUZJTkVfTUFOWScpIHsKKyAgICAgICAgICAgIHByb3RvW25hbWVdID0gY3JlYXRlQ2hh
aW5lZEZ1bmN0aW9uKHByb3RvW25hbWVdLCBwcm9wZXJ0eSk7CisgICAgICAgICAgfQorICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgIHByb3RvW25hbWVdID0gcHJvcGVydHk7CisgICAgICAgICAg
aWYgKCJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJykgeworICAgICAgICAgICAgLy8gQWRk
IHZlcmJvc2UgZGlzcGxheU5hbWUgdG8gdGhlIGZ1bmN0aW9uLCB3aGljaCBoZWxwcyB3aGVuIGxv
b2tpbmcKKyAgICAgICAgICAgIC8vIGF0IHByb2ZpbGluZyB0b29scy4KKyAgICAgICAgICAgIGlm
ICh0eXBlb2YgcHJvcGVydHkgPT09ICdmdW5jdGlvbicgJiYgc3BlYy5kaXNwbGF5TmFtZSkgewor
ICAgICAgICAgICAgICBwcm90b1tuYW1lXS5kaXNwbGF5TmFtZSA9IHNwZWMuZGlzcGxheU5hbWUg
KyAnXycgKyBuYW1lOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgfQorICAgIH0KKyAgfQorfQorCitmdW5jdGlvbiBtaXhTdGF0aWNTcGVjSW50b0NvbXBvbmVu
dChDb25zdHJ1Y3Rvciwgc3RhdGljcykgeworICBpZiAoIXN0YXRpY3MpIHsKKyAgICByZXR1cm47
CisgIH0KKyAgZm9yICh2YXIgbmFtZSBpbiBzdGF0aWNzKSB7CisgICAgdmFyIHByb3BlcnR5ID0g
c3RhdGljc1tuYW1lXTsKKyAgICBpZiAoIXN0YXRpY3MuaGFzT3duUHJvcGVydHkobmFtZSkpIHsK
KyAgICAgIGNvbnRpbnVlOworICAgIH0KKworICAgIHZhciBpc1Jlc2VydmVkID0gbmFtZSBpbiBS
RVNFUlZFRF9TUEVDX0tFWVM7CisgICAgISFpc1Jlc2VydmVkID8gImRldmVsb3BtZW50IiAhPT0g
J3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnUmVhY3RDbGFzczogWW91IGFyZSBhdHRl
bXB0aW5nIHRvIGRlZmluZSBhIHJlc2VydmVkIHByb3BlcnR5LCBgJXNgLCB0aGF0IHNob3VsZG5c
J3QgYmUgb24gdGhlICJzdGF0aWNzIiBrZXkuIERlZmluZSBpdCBhcyBhbiBpbnN0YW5jZSBwcm9w
ZXJ0eSBpbnN0ZWFkOyBpdCB3aWxsIHN0aWxsIGJlIGFjY2Vzc2libGUgb24gdGhlIGNvbnN0cnVj
dG9yLicsIG5hbWUpIDogX3Byb2RJbnZhcmlhbnQoJzc4JywgbmFtZSkgOiB2b2lkIDA7CisKKyAg
ICB2YXIgaXNJbmhlcml0ZWQgPSBuYW1lIGluIENvbnN0cnVjdG9yOworICAgICEhaXNJbmhlcml0
ZWQgPyAiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdS
ZWFjdENsYXNzOiBZb3UgYXJlIGF0dGVtcHRpbmcgdG8gZGVmaW5lIGAlc2Agb24geW91ciBjb21w
b25lbnQgbW9yZSB0aGFuIG9uY2UuIFRoaXMgY29uZmxpY3QgbWF5IGJlIGR1ZSB0byBhIG1peGlu
LicsIG5hbWUpIDogX3Byb2RJbnZhcmlhbnQoJzc5JywgbmFtZSkgOiB2b2lkIDA7CisgICAgQ29u
c3RydWN0b3JbbmFtZV0gPSBwcm9wZXJ0eTsKKyAgfQorfQorCisvKioKKyAqIE1lcmdlIHR3byBv
YmplY3RzLCBidXQgdGhyb3cgaWYgYm90aCBjb250YWluIHRoZSBzYW1lIGtleS4KKyAqCisgKiBA
cGFyYW0ge29iamVjdH0gb25lIFRoZSBmaXJzdCBvYmplY3QsIHdoaWNoIGlzIG11dGF0ZWQuCisg
KiBAcGFyYW0ge29iamVjdH0gdHdvIFRoZSBzZWNvbmQgb2JqZWN0CisgKiBAcmV0dXJuIHtvYmpl
Y3R9IG9uZSBhZnRlciBpdCBoYXMgYmVlbiBtdXRhdGVkIHRvIGNvbnRhaW4gZXZlcnl0aGluZyBp
biB0d28uCisgKi8KK2Z1bmN0aW9uIG1lcmdlSW50b1dpdGhOb0R1cGxpY2F0ZUtleXMob25lLCB0
d28pIHsKKyAgIShvbmUgJiYgdHdvICYmIHR5cGVvZiBvbmUgPT09ICdvYmplY3QnICYmIHR5cGVv
ZiB0d28gPT09ICdvYmplY3QnKSA/ICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IGlu
dmFyaWFudChmYWxzZSwgJ21lcmdlSW50b1dpdGhOb0R1cGxpY2F0ZUtleXMoKTogQ2Fubm90IG1l
cmdlIG5vbi1vYmplY3RzLicpIDogX3Byb2RJbnZhcmlhbnQoJzgwJykgOiB2b2lkIDA7CisKKyAg
Zm9yICh2YXIga2V5IGluIHR3bykgeworICAgIGlmICh0d28uaGFzT3duUHJvcGVydHkoa2V5KSkg
eworICAgICAgIShvbmVba2V5XSA9PT0gdW5kZWZpbmVkKSA/ICJkZXZlbG9wbWVudCIgIT09ICdw
cm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ21lcmdlSW50b1dpdGhOb0R1cGxpY2F0ZUtl
eXMoKTogVHJpZWQgdG8gbWVyZ2UgdHdvIG9iamVjdHMgd2l0aCB0aGUgc2FtZSBrZXk6IGAlc2Au
IFRoaXMgY29uZmxpY3QgbWF5IGJlIGR1ZSB0byBhIG1peGluOyBpbiBwYXJ0aWN1bGFyLCB0aGlz
IG1heSBiZSBjYXVzZWQgYnkgdHdvIGdldEluaXRpYWxTdGF0ZSgpIG9yIGdldERlZmF1bHRQcm9w
cygpIG1ldGhvZHMgcmV0dXJuaW5nIG9iamVjdHMgd2l0aCBjbGFzaGluZyBrZXlzLicsIGtleSkg
OiBfcHJvZEludmFyaWFudCgnODEnLCBrZXkpIDogdm9pZCAwOworICAgICAgb25lW2tleV0gPSB0
d29ba2V5XTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIG9uZTsKK30KKworLyoqCisgKiBDcmVhdGVz
IGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzIHR3byBmdW5jdGlvbnMgYW5kIG1lcmdlcyB0aGVpciBy
ZXR1cm4gdmFsdWVzLgorICoKKyAqIEBwYXJhbSB7ZnVuY3Rpb259IG9uZSBGdW5jdGlvbiB0byBp
bnZva2UgZmlyc3QuCisgKiBAcGFyYW0ge2Z1bmN0aW9ufSB0d28gRnVuY3Rpb24gdG8gaW52b2tl
IHNlY29uZC4KKyAqIEByZXR1cm4ge2Z1bmN0aW9ufSBGdW5jdGlvbiB0aGF0IGludm9rZXMgdGhl
IHR3byBhcmd1bWVudCBmdW5jdGlvbnMuCisgKiBAcHJpdmF0ZQorICovCitmdW5jdGlvbiBjcmVh
dGVNZXJnZWRSZXN1bHRGdW5jdGlvbihvbmUsIHR3bykgeworICByZXR1cm4gZnVuY3Rpb24gbWVy
Z2VkUmVzdWx0KCkgeworICAgIHZhciBhID0gb25lLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7Cisg
ICAgdmFyIGIgPSB0d28uYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKyAgICBpZiAoYSA9PSBudWxs
KSB7CisgICAgICByZXR1cm4gYjsKKyAgICB9IGVsc2UgaWYgKGIgPT0gbnVsbCkgeworICAgICAg
cmV0dXJuIGE7CisgICAgfQorICAgIHZhciBjID0ge307CisgICAgbWVyZ2VJbnRvV2l0aE5vRHVw
bGljYXRlS2V5cyhjLCBhKTsKKyAgICBtZXJnZUludG9XaXRoTm9EdXBsaWNhdGVLZXlzKGMsIGIp
OworICAgIHJldHVybiBjOworICB9OworfQorCisvKioKKyAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0
aGF0IGludm9rZXMgdHdvIGZ1bmN0aW9ucyBhbmQgaWdub3JlcyB0aGVpciByZXR1cm4gdmFsZXMu
CisgKgorICogQHBhcmFtIHtmdW5jdGlvbn0gb25lIEZ1bmN0aW9uIHRvIGludm9rZSBmaXJzdC4K
KyAqIEBwYXJhbSB7ZnVuY3Rpb259IHR3byBGdW5jdGlvbiB0byBpbnZva2Ugc2Vjb25kLgorICog
QHJldHVybiB7ZnVuY3Rpb259IEZ1bmN0aW9uIHRoYXQgaW52b2tlcyB0aGUgdHdvIGFyZ3VtZW50
IGZ1bmN0aW9ucy4KKyAqIEBwcml2YXRlCisgKi8KK2Z1bmN0aW9uIGNyZWF0ZUNoYWluZWRGdW5j
dGlvbihvbmUsIHR3bykgeworICByZXR1cm4gZnVuY3Rpb24gY2hhaW5lZEZ1bmN0aW9uKCkgewor
ICAgIG9uZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpOworICAgIHR3by5hcHBseSh0aGlzLCBhcmd1
bWVudHMpOworICB9OworfQorCisvKioKKyAqIEJpbmRzIGEgbWV0aG9kIHRvIHRoZSBjb21wb25l
bnQuCisgKgorICogQHBhcmFtIHtvYmplY3R9IGNvbXBvbmVudCBDb21wb25lbnQgd2hvc2UgbWV0
aG9kIGlzIGdvaW5nIHRvIGJlIGJvdW5kLgorICogQHBhcmFtIHtmdW5jdGlvbn0gbWV0aG9kIE1l
dGhvZCB0byBiZSBib3VuZC4KKyAqIEByZXR1cm4ge2Z1bmN0aW9ufSBUaGUgYm91bmQgbWV0aG9k
LgorICovCitmdW5jdGlvbiBiaW5kQXV0b0JpbmRNZXRob2QoY29tcG9uZW50LCBtZXRob2QpIHsK
KyAgdmFyIGJvdW5kTWV0aG9kID0gbWV0aG9kLmJpbmQoY29tcG9uZW50KTsKKyAgaWYgKCJkZXZl
bG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJykgeworICAgIGJvdW5kTWV0aG9kLl9fcmVhY3RCb3Vu
ZENvbnRleHQgPSBjb21wb25lbnQ7CisgICAgYm91bmRNZXRob2QuX19yZWFjdEJvdW5kTWV0aG9k
ID0gbWV0aG9kOworICAgIGJvdW5kTWV0aG9kLl9fcmVhY3RCb3VuZEFyZ3VtZW50cyA9IG51bGw7
CisgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBjb21wb25lbnQuY29uc3RydWN0b3IuZGlzcGxheU5h
bWU7CisgICAgdmFyIF9iaW5kID0gYm91bmRNZXRob2QuYmluZDsKKyAgICBib3VuZE1ldGhvZC5i
aW5kID0gZnVuY3Rpb24gKG5ld1RoaXMpIHsKKyAgICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVu
dHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0g
MTsgX2tleSA8IF9sZW47IF9rZXkrKykgeworICAgICAgICBhcmdzW19rZXkgLSAxXSA9IGFyZ3Vt
ZW50c1tfa2V5XTsKKyAgICAgIH0KKworICAgICAgLy8gVXNlciBpcyB0cnlpbmcgdG8gYmluZCgp
IGFuIGF1dG9ib3VuZCBtZXRob2Q7IHdlIGVmZmVjdGl2ZWx5IHdpbGwKKyAgICAgIC8vIGlnbm9y
ZSB0aGUgdmFsdWUgb2YgInRoaXMiIHRoYXQgdGhlIHVzZXIgaXMgdHJ5aW5nIHRvIHVzZSwgc28K
KyAgICAgIC8vIGxldCdzIHdhcm4uCisgICAgICBpZiAobmV3VGhpcyAhPT0gY29tcG9uZW50ICYm
IG5ld1RoaXMgIT09IG51bGwpIHsKKyAgICAgICAgImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rp
b24nID8gd2FybmluZyhmYWxzZSwgJ2JpbmQoKTogUmVhY3QgY29tcG9uZW50IG1ldGhvZHMgbWF5
IG9ubHkgYmUgYm91bmQgdG8gdGhlICcgKyAnY29tcG9uZW50IGluc3RhbmNlLiBTZWUgJXMnLCBj
b21wb25lbnROYW1lKSA6IHZvaWQgMDsKKyAgICAgIH0gZWxzZSBpZiAoIWFyZ3MubGVuZ3RoKSB7
CisgICAgICAgICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoZmFsc2Us
ICdiaW5kKCk6IFlvdSBhcmUgYmluZGluZyBhIGNvbXBvbmVudCBtZXRob2QgdG8gdGhlIGNvbXBv
bmVudC4gJyArICdSZWFjdCBkb2VzIHRoaXMgZm9yIHlvdSBhdXRvbWF0aWNhbGx5IGluIGEgaGln
aC1wZXJmb3JtYW5jZSAnICsgJ3dheSwgc28geW91IGNhbiBzYWZlbHkgcmVtb3ZlIHRoaXMgY2Fs
bC4gU2VlICVzJywgY29tcG9uZW50TmFtZSkgOiB2b2lkIDA7CisgICAgICAgIHJldHVybiBib3Vu
ZE1ldGhvZDsKKyAgICAgIH0KKyAgICAgIHZhciByZWJvdW5kTWV0aG9kID0gX2JpbmQuYXBwbHko
Ym91bmRNZXRob2QsIGFyZ3VtZW50cyk7CisgICAgICByZWJvdW5kTWV0aG9kLl9fcmVhY3RCb3Vu
ZENvbnRleHQgPSBjb21wb25lbnQ7CisgICAgICByZWJvdW5kTWV0aG9kLl9fcmVhY3RCb3VuZE1l
dGhvZCA9IG1ldGhvZDsKKyAgICAgIHJlYm91bmRNZXRob2QuX19yZWFjdEJvdW5kQXJndW1lbnRz
ID0gYXJnczsKKyAgICAgIHJldHVybiByZWJvdW5kTWV0aG9kOworICAgIH07CisgIH0KKyAgcmV0
dXJuIGJvdW5kTWV0aG9kOworfQorCisvKioKKyAqIEJpbmRzIGFsbCBhdXRvLWJvdW5kIG1ldGhv
ZHMgaW4gYSBjb21wb25lbnQuCisgKgorICogQHBhcmFtIHtvYmplY3R9IGNvbXBvbmVudCBDb21w
b25lbnQgd2hvc2UgbWV0aG9kIGlzIGdvaW5nIHRvIGJlIGJvdW5kLgorICovCitmdW5jdGlvbiBi
aW5kQXV0b0JpbmRNZXRob2RzKGNvbXBvbmVudCkgeworICB2YXIgcGFpcnMgPSBjb21wb25lbnQu
X19yZWFjdEF1dG9CaW5kUGFpcnM7CisgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFpcnMubGVuZ3Ro
OyBpICs9IDIpIHsKKyAgICB2YXIgYXV0b0JpbmRLZXkgPSBwYWlyc1tpXTsKKyAgICB2YXIgbWV0
aG9kID0gcGFpcnNbaSArIDFdOworICAgIGNvbXBvbmVudFthdXRvQmluZEtleV0gPSBiaW5kQXV0
b0JpbmRNZXRob2QoY29tcG9uZW50LCBtZXRob2QpOworICB9Cit9CisKKy8qKgorICogQWRkIG1v
cmUgdG8gdGhlIFJlYWN0Q2xhc3MgYmFzZSBjbGFzcy4gVGhlc2UgYXJlIGFsbCBsZWdhY3kgZmVh
dHVyZXMgYW5kCisgKiB0aGVyZWZvcmUgbm90IGFscmVhZHkgcGFydCBvZiB0aGUgbW9kZXJuIFJl
YWN0Q29tcG9uZW50LgorICovCit2YXIgUmVhY3RDbGFzc01peGluID0geworCisgIC8qKgorICAg
KiBUT0RPOiBUaGlzIHdpbGwgYmUgZGVwcmVjYXRlZCBiZWNhdXNlIHN0YXRlIHNob3VsZCBhbHdh
eXMga2VlcCBhIGNvbnNpc3RlbnQKKyAgICogdHlwZSBzaWduYXR1cmUgYW5kIHRoZSBvbmx5IHVz
ZSBjYXNlIGZvciB0aGlzLCBpcyB0byBhdm9pZCB0aGF0LgorICAgKi8KKyAgcmVwbGFjZVN0YXRl
OiBmdW5jdGlvbiAobmV3U3RhdGUsIGNhbGxiYWNrKSB7CisgICAgdGhpcy51cGRhdGVyLmVucXVl
dWVSZXBsYWNlU3RhdGUodGhpcywgbmV3U3RhdGUpOworICAgIGlmIChjYWxsYmFjaykgeworICAg
ICAgdGhpcy51cGRhdGVyLmVucXVldWVDYWxsYmFjayh0aGlzLCBjYWxsYmFjaywgJ3JlcGxhY2VT
dGF0ZScpOworICAgIH0KKyAgfSwKKworICAvKioKKyAgICogQ2hlY2tzIHdoZXRoZXIgb3Igbm90
IHRoaXMgY29tcG9zaXRlIGNvbXBvbmVudCBpcyBtb3VudGVkLgorICAgKiBAcmV0dXJuIHtib29s
ZWFufSBUcnVlIGlmIG1vdW50ZWQsIGZhbHNlIG90aGVyd2lzZS4KKyAgICogQHByb3RlY3RlZAor
ICAgKiBAZmluYWwKKyAgICovCisgIGlzTW91bnRlZDogZnVuY3Rpb24gKCkgeworICAgIHJldHVy
biB0aGlzLnVwZGF0ZXIuaXNNb3VudGVkKHRoaXMpOworICB9Cit9OworCit2YXIgUmVhY3RDbGFz
c0NvbXBvbmVudCA9IGZ1bmN0aW9uICgpIHt9OworX2Fzc2lnbihSZWFjdENsYXNzQ29tcG9uZW50
LnByb3RvdHlwZSwgUmVhY3RDb21wb25lbnQucHJvdG90eXBlLCBSZWFjdENsYXNzTWl4aW4pOwor
Cit2YXIgZGlkV2FybkRlcHJlY2F0ZWQgPSBmYWxzZTsKKworLyoqCisgKiBNb2R1bGUgZm9yIGNy
ZWF0aW5nIGNvbXBvc2l0ZSBjb21wb25lbnRzLgorICoKKyAqIEBjbGFzcyBSZWFjdENsYXNzCisg
Ki8KK3ZhciBSZWFjdENsYXNzID0geworCisgIC8qKgorICAgKiBDcmVhdGVzIGEgY29tcG9zaXRl
IGNvbXBvbmVudCBjbGFzcyBnaXZlbiBhIGNsYXNzIHNwZWNpZmljYXRpb24uCisgICAqIFNlZSBo
dHRwczovL2ZhY2Vib29rLmdpdGh1Yi5pby9yZWFjdC9kb2NzL3RvcC1sZXZlbC1hcGkuaHRtbCNy
ZWFjdC5jcmVhdGVjbGFzcworICAgKgorICAgKiBAcGFyYW0ge29iamVjdH0gc3BlYyBDbGFzcyBz
cGVjaWZpY2F0aW9uICh3aGljaCBtdXN0IGRlZmluZSBgcmVuZGVyYCkuCisgICAqIEByZXR1cm4g
e2Z1bmN0aW9ufSBDb21wb25lbnQgY29uc3RydWN0b3IgZnVuY3Rpb24uCisgICAqIEBwdWJsaWMK
KyAgICovCisgIGNyZWF0ZUNsYXNzOiBmdW5jdGlvbiAoc3BlYykgeworICAgIGlmICgiZGV2ZWxv
cG1lbnQiICE9PSAncHJvZHVjdGlvbicpIHsKKyAgICAgICJkZXZlbG9wbWVudCIgIT09ICdwcm9k
dWN0aW9uJyA/IHdhcm5pbmcoZGlkV2FybkRlcHJlY2F0ZWQsICclczogUmVhY3QuY3JlYXRlQ2xh
c3MgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHZlcnNpb24gMTYuICcgKyAn
VXNlIHBsYWluIEphdmFTY3JpcHQgY2xhc3NlcyBpbnN0ZWFkLiBJZiB5b3VcJ3JlIG5vdCB5ZXQg
cmVhZHkgdG8gJyArICdtaWdyYXRlLCBjcmVhdGUtcmVhY3QtY2xhc3MgaXMgYXZhaWxhYmxlIG9u
IG5wbSBhcyBhICcgKyAnZHJvcC1pbiByZXBsYWNlbWVudC4nLCBzcGVjICYmIHNwZWMuZGlzcGxh
eU5hbWUgfHwgJ0EgQ29tcG9uZW50JykgOiB2b2lkIDA7CisgICAgICBkaWRXYXJuRGVwcmVjYXRl
ZCA9IHRydWU7CisgICAgfQorCisgICAgLy8gVG8ga2VlcCBvdXIgd2FybmluZ3MgbW9yZSB1bmRl
cnN0YW5kYWJsZSwgd2UnbGwgdXNlIGEgbGl0dGxlIGhhY2sgaGVyZSB0bworICAgIC8vIGVuc3Vy
ZSB0aGF0IENvbnN0cnVjdG9yLm5hbWUgIT09ICdDb25zdHJ1Y3RvcicuIFRoaXMgbWFrZXMgc3Vy
ZSB3ZSBkb24ndAorICAgIC8vIHVubmVjZXNzYXJpbHkgaWRlbnRpZnkgYSBjbGFzcyB3aXRob3V0
IGRpc3BsYXlOYW1lIGFzICdDb25zdHJ1Y3RvcicuCisgICAgdmFyIENvbnN0cnVjdG9yID0gaWRl
bnRpdHkoZnVuY3Rpb24gKHByb3BzLCBjb250ZXh0LCB1cGRhdGVyKSB7CisgICAgICAvLyBUaGlz
IGNvbnN0cnVjdG9yIGdldHMgb3ZlcnJpZGRlbiBieSBtb2Nrcy4gVGhlIGFyZ3VtZW50IGlzIHVz
ZWQKKyAgICAgIC8vIGJ5IG1vY2tzIHRvIGFzc2VydCBvbiB3aGF0IGdldHMgbW91bnRlZC4KKwor
ICAgICAgaWYgKCJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJykgeworICAgICAgICAiZGV2
ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKHRoaXMgaW5zdGFuY2VvZiBDb25z
dHJ1Y3RvciwgJ1NvbWV0aGluZyBpcyBjYWxsaW5nIGEgUmVhY3QgY29tcG9uZW50IGRpcmVjdGx5
LiBVc2UgYSBmYWN0b3J5IG9yICcgKyAnSlNYIGluc3RlYWQuIFNlZTogaHR0cHM6Ly9mYi5tZS9y
ZWFjdC1sZWdhY3lmYWN0b3J5JykgOiB2b2lkIDA7CisgICAgICB9CisKKyAgICAgIC8vIFdpcmUg
dXAgYXV0by1iaW5kaW5nCisgICAgICBpZiAodGhpcy5fX3JlYWN0QXV0b0JpbmRQYWlycy5sZW5n
dGgpIHsKKyAgICAgICAgYmluZEF1dG9CaW5kTWV0aG9kcyh0aGlzKTsKKyAgICAgIH0KKworICAg
ICAgdGhpcy5wcm9wcyA9IHByb3BzOworICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDsKKyAg
ICAgIHRoaXMucmVmcyA9IGVtcHR5T2JqZWN0OworICAgICAgdGhpcy51cGRhdGVyID0gdXBkYXRl
ciB8fCBSZWFjdE5vb3BVcGRhdGVRdWV1ZTsKKworICAgICAgdGhpcy5zdGF0ZSA9IG51bGw7CisK
KyAgICAgIC8vIFJlYWN0Q2xhc3NlcyBkb2Vzbid0IGhhdmUgY29uc3RydWN0b3JzLiBJbnN0ZWFk
LCB0aGV5IHVzZSB0aGUKKyAgICAgIC8vIGdldEluaXRpYWxTdGF0ZSBhbmQgY29tcG9uZW50V2ls
bE1vdW50IG1ldGhvZHMgZm9yIGluaXRpYWxpemF0aW9uLgorCisgICAgICB2YXIgaW5pdGlhbFN0
YXRlID0gdGhpcy5nZXRJbml0aWFsU3RhdGUgPyB0aGlzLmdldEluaXRpYWxTdGF0ZSgpIDogbnVs
bDsKKyAgICAgIGlmICgiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicpIHsKKyAgICAgICAg
Ly8gV2UgYWxsb3cgYXV0by1tb2NrcyB0byBwcm9jZWVkIGFzIGlmIHRoZXkncmUgcmV0dXJuaW5n
IG51bGwuCisgICAgICAgIGlmIChpbml0aWFsU3RhdGUgPT09IHVuZGVmaW5lZCAmJiB0aGlzLmdl
dEluaXRpYWxTdGF0ZS5faXNNb2NrRnVuY3Rpb24pIHsKKyAgICAgICAgICAvLyBUaGlzIGlzIHBy
b2JhYmx5IGJhZCBwcmFjdGljZS4gQ29uc2lkZXIgd2FybmluZyBoZXJlIGFuZAorICAgICAgICAg
IC8vIGRlcHJlY2F0aW5nIHRoaXMgY29udmVuaWVuY2UuCisgICAgICAgICAgaW5pdGlhbFN0YXRl
ID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgISh0eXBlb2YgaW5pdGlhbFN0YXRl
ID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShpbml0aWFsU3RhdGUpKSA/ICJkZXZlbG9w
bWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJyVzLmdldEluaXRpYWxT
dGF0ZSgpOiBtdXN0IHJldHVybiBhbiBvYmplY3Qgb3IgbnVsbCcsIENvbnN0cnVjdG9yLmRpc3Bs
YXlOYW1lIHx8ICdSZWFjdENvbXBvc2l0ZUNvbXBvbmVudCcpIDogX3Byb2RJbnZhcmlhbnQoJzgy
JywgQ29uc3RydWN0b3IuZGlzcGxheU5hbWUgfHwgJ1JlYWN0Q29tcG9zaXRlQ29tcG9uZW50Jykg
OiB2b2lkIDA7CisKKyAgICAgIHRoaXMuc3RhdGUgPSBpbml0aWFsU3RhdGU7CisgICAgfSk7Cisg
ICAgQ29uc3RydWN0b3IucHJvdG90eXBlID0gbmV3IFJlYWN0Q2xhc3NDb21wb25lbnQoKTsKKyAg
ICBDb25zdHJ1Y3Rvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb25zdHJ1Y3RvcjsKKyAgICBD
b25zdHJ1Y3Rvci5wcm90b3R5cGUuX19yZWFjdEF1dG9CaW5kUGFpcnMgPSBbXTsKKworICAgIGlu
amVjdGVkTWl4aW5zLmZvckVhY2gobWl4U3BlY0ludG9Db21wb25lbnQuYmluZChudWxsLCBDb25z
dHJ1Y3RvcikpOworCisgICAgbWl4U3BlY0ludG9Db21wb25lbnQoQ29uc3RydWN0b3IsIHNwZWMp
OworCisgICAgLy8gSW5pdGlhbGl6ZSB0aGUgZGVmYXVsdFByb3BzIHByb3BlcnR5IGFmdGVyIGFs
bCBtaXhpbnMgaGF2ZSBiZWVuIG1lcmdlZC4KKyAgICBpZiAoQ29uc3RydWN0b3IuZ2V0RGVmYXVs
dFByb3BzKSB7CisgICAgICBDb25zdHJ1Y3Rvci5kZWZhdWx0UHJvcHMgPSBDb25zdHJ1Y3Rvci5n
ZXREZWZhdWx0UHJvcHMoKTsKKyAgICB9CisKKyAgICBpZiAoImRldmVsb3BtZW50IiAhPT0gJ3By
b2R1Y3Rpb24nKSB7CisgICAgICAvLyBUaGlzIGlzIGEgdGFnIHRvIGluZGljYXRlIHRoYXQgdGhl
IHVzZSBvZiB0aGVzZSBtZXRob2QgbmFtZXMgaXMgb2ssCisgICAgICAvLyBzaW5jZSBpdCdzIHVz
ZWQgd2l0aCBjcmVhdGVDbGFzcy4gSWYgaXQncyBub3QsIHRoZW4gaXQncyBsaWtlbHkgYQorICAg
ICAgLy8gbWlzdGFrZSBzbyB3ZSdsbCB3YXJuIHlvdSB0byB1c2UgdGhlIHN0YXRpYyBwcm9wZXJ0
eSwgcHJvcGVydHkKKyAgICAgIC8vIGluaXRpYWxpemVyIG9yIGNvbnN0cnVjdG9yIHJlc3BlY3Rp
dmVseS4KKyAgICAgIGlmIChDb25zdHJ1Y3Rvci5nZXREZWZhdWx0UHJvcHMpIHsKKyAgICAgICAg
Q29uc3RydWN0b3IuZ2V0RGVmYXVsdFByb3BzLmlzUmVhY3RDbGFzc0FwcHJvdmVkID0ge307Cisg
ICAgICB9CisgICAgICBpZiAoQ29uc3RydWN0b3IucHJvdG90eXBlLmdldEluaXRpYWxTdGF0ZSkg
eworICAgICAgICBDb25zdHJ1Y3Rvci5wcm90b3R5cGUuZ2V0SW5pdGlhbFN0YXRlLmlzUmVhY3RD
bGFzc0FwcHJvdmVkID0ge307CisgICAgICB9CisgICAgfQorCisgICAgIUNvbnN0cnVjdG9yLnBy
b3RvdHlwZS5yZW5kZXIgPyAiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlh
bnQoZmFsc2UsICdjcmVhdGVDbGFzcyguLi4pOiBDbGFzcyBzcGVjaWZpY2F0aW9uIG11c3QgaW1w
bGVtZW50IGEgYHJlbmRlcmAgbWV0aG9kLicpIDogX3Byb2RJbnZhcmlhbnQoJzgzJykgOiB2b2lk
IDA7CisKKyAgICBpZiAoImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nKSB7CisgICAgICAi
ZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKCFDb25zdHJ1Y3Rvci5wcm90
b3R5cGUuY29tcG9uZW50U2hvdWxkVXBkYXRlLCAnJXMgaGFzIGEgbWV0aG9kIGNhbGxlZCAnICsg
J2NvbXBvbmVudFNob3VsZFVwZGF0ZSgpLiBEaWQgeW91IG1lYW4gc2hvdWxkQ29tcG9uZW50VXBk
YXRlKCk/ICcgKyAnVGhlIG5hbWUgaXMgcGhyYXNlZCBhcyBhIHF1ZXN0aW9uIGJlY2F1c2UgdGhl
IGZ1bmN0aW9uIGlzICcgKyAnZXhwZWN0ZWQgdG8gcmV0dXJuIGEgdmFsdWUuJywgc3BlYy5kaXNw
bGF5TmFtZSB8fCAnQSBjb21wb25lbnQnKSA6IHZvaWQgMDsKKyAgICAgICJkZXZlbG9wbWVudCIg
IT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoIUNvbnN0cnVjdG9yLnByb3RvdHlwZS5jb21wb25l
bnRXaWxsUmVjaWV2ZVByb3BzLCAnJXMgaGFzIGEgbWV0aG9kIGNhbGxlZCAnICsgJ2NvbXBvbmVu
dFdpbGxSZWNpZXZlUHJvcHMoKS4gRGlkIHlvdSBtZWFuIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJv
cHMoKT8nLCBzcGVjLmRpc3BsYXlOYW1lIHx8ICdBIGNvbXBvbmVudCcpIDogdm9pZCAwOworICAg
IH0KKworICAgIC8vIFJlZHVjZSB0aW1lIHNwZW50IGRvaW5nIGxvb2t1cHMgYnkgc2V0dGluZyB0
aGVzZSBvbiB0aGUgcHJvdG90eXBlLgorICAgIGZvciAodmFyIG1ldGhvZE5hbWUgaW4gUmVhY3RD
bGFzc0ludGVyZmFjZSkgeworICAgICAgaWYgKCFDb25zdHJ1Y3Rvci5wcm90b3R5cGVbbWV0aG9k
TmFtZV0pIHsKKyAgICAgICAgQ29uc3RydWN0b3IucHJvdG90eXBlW21ldGhvZE5hbWVdID0gbnVs
bDsKKyAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gQ29uc3RydWN0b3I7CisgIH0sCisKKyAg
aW5qZWN0aW9uOiB7CisgICAgaW5qZWN0TWl4aW46IGZ1bmN0aW9uIChtaXhpbikgeworICAgICAg
aW5qZWN0ZWRNaXhpbnMucHVzaChtaXhpbik7CisgICAgfQorICB9CisKK307CisKK21vZHVsZS5l
eHBvcnRzID0gUmVhY3RDbGFzczsKK30seyIxMCI6MTAsIjEzIjoxMywiMTQiOjE0LCIyNSI6MjUs
IjI4IjoyOCwiMjkiOjI5LCIzMCI6MzAsIjMxIjozMSwiNiI6Nn1dLDY6W2Z1bmN0aW9uKF9kZXJl
cV8sbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNl
Ym9vaywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvdXJjZSBj
b2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGUK
KyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJl
ZS4gQW4gYWRkaXRpb25hbCBncmFudAorICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQg
aW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisgKgorICovCisKKyd1
c2Ugc3RyaWN0JzsKKwordmFyIF9wcm9kSW52YXJpYW50ID0gX2RlcmVxXygyNSk7CisKK3ZhciBS
ZWFjdE5vb3BVcGRhdGVRdWV1ZSA9IF9kZXJlcV8oMTMpOworCit2YXIgY2FuRGVmaW5lUHJvcGVy
dHkgPSBfZGVyZXFfKDIwKTsKK3ZhciBlbXB0eU9iamVjdCA9IF9kZXJlcV8oMjgpOwordmFyIGlu
dmFyaWFudCA9IF9kZXJlcV8oMjkpOwordmFyIHdhcm5pbmcgPSBfZGVyZXFfKDMwKTsKKworLyoq
CisgKiBCYXNlIGNsYXNzIGhlbHBlcnMgZm9yIHRoZSB1cGRhdGluZyBzdGF0ZSBvZiBhIGNvbXBv
bmVudC4KKyAqLworZnVuY3Rpb24gUmVhY3RDb21wb25lbnQocHJvcHMsIGNvbnRleHQsIHVwZGF0
ZXIpIHsKKyAgdGhpcy5wcm9wcyA9IHByb3BzOworICB0aGlzLmNvbnRleHQgPSBjb250ZXh0Owor
ICB0aGlzLnJlZnMgPSBlbXB0eU9iamVjdDsKKyAgLy8gV2UgaW5pdGlhbGl6ZSB0aGUgZGVmYXVs
dCB1cGRhdGVyIGJ1dCB0aGUgcmVhbCBvbmUgZ2V0cyBpbmplY3RlZCBieSB0aGUKKyAgLy8gcmVu
ZGVyZXIuCisgIHRoaXMudXBkYXRlciA9IHVwZGF0ZXIgfHwgUmVhY3ROb29wVXBkYXRlUXVldWU7
Cit9CisKK1JlYWN0Q29tcG9uZW50LnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50ID0ge307CisK
Ky8qKgorICogU2V0cyBhIHN1YnNldCBvZiB0aGUgc3RhdGUuIEFsd2F5cyB1c2UgdGhpcyB0byBt
dXRhdGUKKyAqIHN0YXRlLiBZb3Ugc2hvdWxkIHRyZWF0IGB0aGlzLnN0YXRlYCBhcyBpbW11dGFi
bGUuCisgKgorICogVGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgYHRoaXMuc3RhdGVgIHdpbGwg
YmUgaW1tZWRpYXRlbHkgdXBkYXRlZCwgc28KKyAqIGFjY2Vzc2luZyBgdGhpcy5zdGF0ZWAgYWZ0
ZXIgY2FsbGluZyB0aGlzIG1ldGhvZCBtYXkgcmV0dXJuIHRoZSBvbGQgdmFsdWUuCisgKgorICog
VGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgY2FsbHMgdG8gYHNldFN0YXRlYCB3aWxsIHJ1biBz
eW5jaHJvbm91c2x5LAorICogYXMgdGhleSBtYXkgZXZlbnR1YWxseSBiZSBiYXRjaGVkIHRvZ2V0
aGVyLiAgWW91IGNhbiBwcm92aWRlIGFuIG9wdGlvbmFsCisgKiBjYWxsYmFjayB0aGF0IHdpbGwg
YmUgZXhlY3V0ZWQgd2hlbiB0aGUgY2FsbCB0byBzZXRTdGF0ZSBpcyBhY3R1YWxseQorICogY29t
cGxldGVkLgorICoKKyAqIFdoZW4gYSBmdW5jdGlvbiBpcyBwcm92aWRlZCB0byBzZXRTdGF0ZSwg
aXQgd2lsbCBiZSBjYWxsZWQgYXQgc29tZSBwb2ludCBpbgorICogdGhlIGZ1dHVyZSAobm90IHN5
bmNocm9ub3VzbHkpLiBJdCB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSB1cCB0byBkYXRlCisgKiBj
b21wb25lbnQgYXJndW1lbnRzIChzdGF0ZSwgcHJvcHMsIGNvbnRleHQpLiBUaGVzZSB2YWx1ZXMg
Y2FuIGJlIGRpZmZlcmVudAorICogZnJvbSB0aGlzLiogYmVjYXVzZSB5b3VyIGZ1bmN0aW9uIG1h
eSBiZSBjYWxsZWQgYWZ0ZXIgcmVjZWl2ZVByb3BzIGJ1dCBiZWZvcmUKKyAqIHNob3VsZENvbXBv
bmVudFVwZGF0ZSwgYW5kIHRoaXMgbmV3IHN0YXRlLCBwcm9wcywgYW5kIGNvbnRleHQgd2lsbCBu
b3QgeWV0IGJlCisgKiBhc3NpZ25lZCB0byB0aGlzLgorICoKKyAqIEBwYXJhbSB7b2JqZWN0fGZ1
bmN0aW9ufSBwYXJ0aWFsU3RhdGUgTmV4dCBwYXJ0aWFsIHN0YXRlIG9yIGZ1bmN0aW9uIHRvCisg
KiAgICAgICAgcHJvZHVjZSBuZXh0IHBhcnRpYWwgc3RhdGUgdG8gYmUgbWVyZ2VkIHdpdGggY3Vy
cmVudCBzdGF0ZS4KKyAqIEBwYXJhbSB7P2Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsZWQgYWZ0ZXIg
c3RhdGUgaXMgdXBkYXRlZC4KKyAqIEBmaW5hbAorICogQHByb3RlY3RlZAorICovCitSZWFjdENv
bXBvbmVudC5wcm90b3R5cGUuc2V0U3RhdGUgPSBmdW5jdGlvbiAocGFydGlhbFN0YXRlLCBjYWxs
YmFjaykgeworICAhKHR5cGVvZiBwYXJ0aWFsU3RhdGUgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBw
YXJ0aWFsU3RhdGUgPT09ICdmdW5jdGlvbicgfHwgcGFydGlhbFN0YXRlID09IG51bGwpID8gImRl
dmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnc2V0U3RhdGUo
Li4uKTogdGFrZXMgYW4gb2JqZWN0IG9mIHN0YXRlIHZhcmlhYmxlcyB0byB1cGRhdGUgb3IgYSBm
dW5jdGlvbiB3aGljaCByZXR1cm5zIGFuIG9iamVjdCBvZiBzdGF0ZSB2YXJpYWJsZXMuJykgOiBf
cHJvZEludmFyaWFudCgnODUnKSA6IHZvaWQgMDsKKyAgdGhpcy51cGRhdGVyLmVucXVldWVTZXRT
dGF0ZSh0aGlzLCBwYXJ0aWFsU3RhdGUpOworICBpZiAoY2FsbGJhY2spIHsKKyAgICB0aGlzLnVw
ZGF0ZXIuZW5xdWV1ZUNhbGxiYWNrKHRoaXMsIGNhbGxiYWNrLCAnc2V0U3RhdGUnKTsKKyAgfQor
fTsKKworLyoqCisgKiBGb3JjZXMgYW4gdXBkYXRlLiBUaGlzIHNob3VsZCBvbmx5IGJlIGludm9r
ZWQgd2hlbiBpdCBpcyBrbm93biB3aXRoCisgKiBjZXJ0YWludHkgdGhhdCB3ZSBhcmUgKipub3Qq
KiBpbiBhIERPTSB0cmFuc2FjdGlvbi4KKyAqCisgKiBZb3UgbWF5IHdhbnQgdG8gY2FsbCB0aGlz
IHdoZW4geW91IGtub3cgdGhhdCBzb21lIGRlZXBlciBhc3BlY3Qgb2YgdGhlCisgKiBjb21wb25l
bnQncyBzdGF0ZSBoYXMgY2hhbmdlZCBidXQgYHNldFN0YXRlYCB3YXMgbm90IGNhbGxlZC4KKyAq
CisgKiBUaGlzIHdpbGwgbm90IGludm9rZSBgc2hvdWxkQ29tcG9uZW50VXBkYXRlYCwgYnV0IGl0
IHdpbGwgaW52b2tlCisgKiBgY29tcG9uZW50V2lsbFVwZGF0ZWAgYW5kIGBjb21wb25lbnREaWRV
cGRhdGVgLgorICoKKyAqIEBwYXJhbSB7P2Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsZWQgYWZ0ZXIg
dXBkYXRlIGlzIGNvbXBsZXRlLgorICogQGZpbmFsCisgKiBAcHJvdGVjdGVkCisgKi8KK1JlYWN0
Q29tcG9uZW50LnByb3RvdHlwZS5mb3JjZVVwZGF0ZSA9IGZ1bmN0aW9uIChjYWxsYmFjaykgewor
ICB0aGlzLnVwZGF0ZXIuZW5xdWV1ZUZvcmNlVXBkYXRlKHRoaXMpOworICBpZiAoY2FsbGJhY2sp
IHsKKyAgICB0aGlzLnVwZGF0ZXIuZW5xdWV1ZUNhbGxiYWNrKHRoaXMsIGNhbGxiYWNrLCAnZm9y
Y2VVcGRhdGUnKTsKKyAgfQorfTsKKworLyoqCisgKiBEZXByZWNhdGVkIEFQSXMuIFRoZXNlIEFQ
SXMgdXNlZCB0byBleGlzdCBvbiBjbGFzc2ljIFJlYWN0IGNsYXNzZXMgYnV0IHNpbmNlCisgKiB3
ZSB3b3VsZCBsaWtlIHRvIGRlcHJlY2F0ZSB0aGVtLCB3ZSdyZSBub3QgZ29pbmcgdG8gbW92ZSB0
aGVtIG92ZXIgdG8gdGhpcworICogbW9kZXJuIGJhc2UgY2xhc3MuIEluc3RlYWQsIHdlIGRlZmlu
ZSBhIGdldHRlciB0aGF0IHdhcm5zIGlmIGl0J3MgYWNjZXNzZWQuCisgKi8KK2lmICgiZGV2ZWxv
cG1lbnQiICE9PSAncHJvZHVjdGlvbicpIHsKKyAgdmFyIGRlcHJlY2F0ZWRBUElzID0geworICAg
IGlzTW91bnRlZDogWydpc01vdW50ZWQnLCAnSW5zdGVhZCwgbWFrZSBzdXJlIHRvIGNsZWFuIHVw
IHN1YnNjcmlwdGlvbnMgYW5kIHBlbmRpbmcgcmVxdWVzdHMgaW4gJyArICdjb21wb25lbnRXaWxs
VW5tb3VudCB0byBwcmV2ZW50IG1lbW9yeSBsZWFrcy4nXSwKKyAgICByZXBsYWNlU3RhdGU6IFsn
cmVwbGFjZVN0YXRlJywgJ1JlZmFjdG9yIHlvdXIgY29kZSB0byB1c2Ugc2V0U3RhdGUgaW5zdGVh
ZCAoc2VlICcgKyAnaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8zMjM2
KS4nXQorICB9OworICB2YXIgZGVmaW5lRGVwcmVjYXRpb25XYXJuaW5nID0gZnVuY3Rpb24gKG1l
dGhvZE5hbWUsIGluZm8pIHsKKyAgICBpZiAoY2FuRGVmaW5lUHJvcGVydHkpIHsKKyAgICAgIE9i
amVjdC5kZWZpbmVQcm9wZXJ0eShSZWFjdENvbXBvbmVudC5wcm90b3R5cGUsIG1ldGhvZE5hbWUs
IHsKKyAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgImRldmVsb3BtZW50IiAh
PT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhmYWxzZSwgJyVzKC4uLikgaXMgZGVwcmVjYXRlZCBp
biBwbGFpbiBKYXZhU2NyaXB0IFJlYWN0IGNsYXNzZXMuICVzJywgaW5mb1swXSwgaW5mb1sxXSkg
OiB2b2lkIDA7CisgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKKyAgICAgICAgfQorICAgICAg
fSk7CisgICAgfQorICB9OworICBmb3IgKHZhciBmbk5hbWUgaW4gZGVwcmVjYXRlZEFQSXMpIHsK
KyAgICBpZiAoZGVwcmVjYXRlZEFQSXMuaGFzT3duUHJvcGVydHkoZm5OYW1lKSkgeworICAgICAg
ZGVmaW5lRGVwcmVjYXRpb25XYXJuaW5nKGZuTmFtZSwgZGVwcmVjYXRlZEFQSXNbZm5OYW1lXSk7
CisgICAgfQorICB9Cit9CisKK21vZHVsZS5leHBvcnRzID0gUmVhY3RDb21wb25lbnQ7Cit9LHsi
MTMiOjEzLCIyMCI6MjAsIjI1IjoyNSwiMjgiOjI4LCIyOSI6MjksIjMwIjozMH1dLDc6W2Z1bmN0
aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAxNi1wcmVz
ZW50LCBGYWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlz
IHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3Vu
ZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBz
b3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAorICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4g
YmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisgKgor
ICogCisgKi8KKworJ3VzZSBzdHJpY3QnOworCit2YXIgX3Byb2RJbnZhcmlhbnQgPSBfZGVyZXFf
KDI1KTsKKwordmFyIFJlYWN0Q3VycmVudE93bmVyID0gX2RlcmVxXyg4KTsKKwordmFyIGludmFy
aWFudCA9IF9kZXJlcV8oMjkpOwordmFyIHdhcm5pbmcgPSBfZGVyZXFfKDMwKTsKKworZnVuY3Rp
b24gaXNOYXRpdmUoZm4pIHsKKyAgLy8gQmFzZWQgb24gaXNOYXRpdmUoKSBmcm9tIExvZGFzaAor
ICB2YXIgZnVuY1RvU3RyaW5nID0gRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nOworICB2YXIg
aGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5OworICB2YXIg
cmVJc05hdGl2ZSA9IFJlZ0V4cCgnXicgKyBmdW5jVG9TdHJpbmcKKyAgLy8gVGFrZSBhbiBleGFt
cGxlIG5hdGl2ZSBmdW5jdGlvbiBzb3VyY2UgZm9yIGNvbXBhcmlzb24KKyAgLmNhbGwoaGFzT3du
UHJvcGVydHkpCisgIC8vIFN0cmlwIHJlZ2V4IGNoYXJhY3RlcnMgc28gd2UgY2FuIHVzZSBpdCBm
b3IgcmVnZXgKKyAgLnJlcGxhY2UoL1tcXF4kLiorPygpW1xde318XS9nLCAnXFwkJicpCisgIC8v
IFJlbW92ZSBoYXNPd25Qcm9wZXJ0eSBmcm9tIHRoZSB0ZW1wbGF0ZSB0byBtYWtlIGl0IGdlbmVy
aWMKKyAgLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFwoKXwgZm9y
IC4rPyg/PVxcXF0pL2csICckMS4qPycpICsgJyQnKTsKKyAgdHJ5IHsKKyAgICB2YXIgc291cmNl
ID0gZnVuY1RvU3RyaW5nLmNhbGwoZm4pOworICAgIHJldHVybiByZUlzTmF0aXZlLnRlc3Qoc291
cmNlKTsKKyAgfSBjYXRjaCAoZXJyKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9Cit9CisKK3Zh
ciBjYW5Vc2VDb2xsZWN0aW9ucyA9CisvLyBBcnJheS5mcm9tCit0eXBlb2YgQXJyYXkuZnJvbSA9
PT0gJ2Z1bmN0aW9uJyAmJgorLy8gTWFwCit0eXBlb2YgTWFwID09PSAnZnVuY3Rpb24nICYmIGlz
TmF0aXZlKE1hcCkgJiYKKy8vIE1hcC5wcm90b3R5cGUua2V5cworTWFwLnByb3RvdHlwZSAhPSBu
dWxsICYmIHR5cGVvZiBNYXAucHJvdG90eXBlLmtleXMgPT09ICdmdW5jdGlvbicgJiYgaXNOYXRp
dmUoTWFwLnByb3RvdHlwZS5rZXlzKSAmJgorLy8gU2V0Cit0eXBlb2YgU2V0ID09PSAnZnVuY3Rp
b24nICYmIGlzTmF0aXZlKFNldCkgJiYKKy8vIFNldC5wcm90b3R5cGUua2V5cworU2V0LnByb3Rv
dHlwZSAhPSBudWxsICYmIHR5cGVvZiBTZXQucHJvdG90eXBlLmtleXMgPT09ICdmdW5jdGlvbicg
JiYgaXNOYXRpdmUoU2V0LnByb3RvdHlwZS5rZXlzKTsKKwordmFyIHNldEl0ZW07Cit2YXIgZ2V0
SXRlbTsKK3ZhciByZW1vdmVJdGVtOwordmFyIGdldEl0ZW1JRHM7Cit2YXIgYWRkUm9vdDsKK3Zh
ciByZW1vdmVSb290OwordmFyIGdldFJvb3RJRHM7CisKK2lmIChjYW5Vc2VDb2xsZWN0aW9ucykg
eworICB2YXIgaXRlbU1hcCA9IG5ldyBNYXAoKTsKKyAgdmFyIHJvb3RJRFNldCA9IG5ldyBTZXQo
KTsKKworICBzZXRJdGVtID0gZnVuY3Rpb24gKGlkLCBpdGVtKSB7CisgICAgaXRlbU1hcC5zZXQo
aWQsIGl0ZW0pOworICB9OworICBnZXRJdGVtID0gZnVuY3Rpb24gKGlkKSB7CisgICAgcmV0dXJu
IGl0ZW1NYXAuZ2V0KGlkKTsKKyAgfTsKKyAgcmVtb3ZlSXRlbSA9IGZ1bmN0aW9uIChpZCkgewor
ICAgIGl0ZW1NYXBbJ2RlbGV0ZSddKGlkKTsKKyAgfTsKKyAgZ2V0SXRlbUlEcyA9IGZ1bmN0aW9u
ICgpIHsKKyAgICByZXR1cm4gQXJyYXkuZnJvbShpdGVtTWFwLmtleXMoKSk7CisgIH07CisKKyAg
YWRkUm9vdCA9IGZ1bmN0aW9uIChpZCkgeworICAgIHJvb3RJRFNldC5hZGQoaWQpOworICB9Owor
ICByZW1vdmVSb290ID0gZnVuY3Rpb24gKGlkKSB7CisgICAgcm9vdElEU2V0WydkZWxldGUnXShp
ZCk7CisgIH07CisgIGdldFJvb3RJRHMgPSBmdW5jdGlvbiAoKSB7CisgICAgcmV0dXJuIEFycmF5
LmZyb20ocm9vdElEU2V0LmtleXMoKSk7CisgIH07Cit9IGVsc2UgeworICB2YXIgaXRlbUJ5S2V5
ID0ge307CisgIHZhciByb290QnlLZXkgPSB7fTsKKworICAvLyBVc2Ugbm9uLW51bWVyaWMga2V5
cyB0byBwcmV2ZW50IFY4IHBlcmZvcm1hbmNlIGlzc3VlczoKKyAgLy8gaHR0cHM6Ly9naXRodWIu
Y29tL2ZhY2Vib29rL3JlYWN0L3B1bGwvNzIzMgorICB2YXIgZ2V0S2V5RnJvbUlEID0gZnVuY3Rp
b24gKGlkKSB7CisgICAgcmV0dXJuICcuJyArIGlkOworICB9OworICB2YXIgZ2V0SURGcm9tS2V5
ID0gZnVuY3Rpb24gKGtleSkgeworICAgIHJldHVybiBwYXJzZUludChrZXkuc3Vic3RyKDEpLCAx
MCk7CisgIH07CisKKyAgc2V0SXRlbSA9IGZ1bmN0aW9uIChpZCwgaXRlbSkgeworICAgIHZhciBr
ZXkgPSBnZXRLZXlGcm9tSUQoaWQpOworICAgIGl0ZW1CeUtleVtrZXldID0gaXRlbTsKKyAgfTsK
KyAgZ2V0SXRlbSA9IGZ1bmN0aW9uIChpZCkgeworICAgIHZhciBrZXkgPSBnZXRLZXlGcm9tSUQo
aWQpOworICAgIHJldHVybiBpdGVtQnlLZXlba2V5XTsKKyAgfTsKKyAgcmVtb3ZlSXRlbSA9IGZ1
bmN0aW9uIChpZCkgeworICAgIHZhciBrZXkgPSBnZXRLZXlGcm9tSUQoaWQpOworICAgIGRlbGV0
ZSBpdGVtQnlLZXlba2V5XTsKKyAgfTsKKyAgZ2V0SXRlbUlEcyA9IGZ1bmN0aW9uICgpIHsKKyAg
ICByZXR1cm4gT2JqZWN0LmtleXMoaXRlbUJ5S2V5KS5tYXAoZ2V0SURGcm9tS2V5KTsKKyAgfTsK
KworICBhZGRSb290ID0gZnVuY3Rpb24gKGlkKSB7CisgICAgdmFyIGtleSA9IGdldEtleUZyb21J
RChpZCk7CisgICAgcm9vdEJ5S2V5W2tleV0gPSB0cnVlOworICB9OworICByZW1vdmVSb290ID0g
ZnVuY3Rpb24gKGlkKSB7CisgICAgdmFyIGtleSA9IGdldEtleUZyb21JRChpZCk7CisgICAgZGVs
ZXRlIHJvb3RCeUtleVtrZXldOworICB9OworICBnZXRSb290SURzID0gZnVuY3Rpb24gKCkgewor
ICAgIHJldHVybiBPYmplY3Qua2V5cyhyb290QnlLZXkpLm1hcChnZXRJREZyb21LZXkpOworICB9
OworfQorCit2YXIgdW5tb3VudGVkSURzID0gW107CisKK2Z1bmN0aW9uIHB1cmdlRGVlcChpZCkg
eworICB2YXIgaXRlbSA9IGdldEl0ZW0oaWQpOworICBpZiAoaXRlbSkgeworICAgIHZhciBjaGls
ZElEcyA9IGl0ZW0uY2hpbGRJRHM7CisKKyAgICByZW1vdmVJdGVtKGlkKTsKKyAgICBjaGlsZElE
cy5mb3JFYWNoKHB1cmdlRGVlcCk7CisgIH0KK30KKworZnVuY3Rpb24gZGVzY3JpYmVDb21wb25l
bnRGcmFtZShuYW1lLCBzb3VyY2UsIG93bmVyTmFtZSkgeworICByZXR1cm4gJ1xuICAgIGluICcg
KyAobmFtZSB8fCAnVW5rbm93bicpICsgKHNvdXJjZSA/ICcgKGF0ICcgKyBzb3VyY2UuZmlsZU5h
bWUucmVwbGFjZSgvXi4qW1xcXC9dLywgJycpICsgJzonICsgc291cmNlLmxpbmVOdW1iZXIgKyAn
KScgOiBvd25lck5hbWUgPyAnIChjcmVhdGVkIGJ5ICcgKyBvd25lck5hbWUgKyAnKScgOiAnJyk7
Cit9CisKK2Z1bmN0aW9uIGdldERpc3BsYXlOYW1lKGVsZW1lbnQpIHsKKyAgaWYgKGVsZW1lbnQg
PT0gbnVsbCkgeworICAgIHJldHVybiAnI2VtcHR5JzsKKyAgfSBlbHNlIGlmICh0eXBlb2YgZWxl
bWVudCA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIGVsZW1lbnQgPT09ICdudW1iZXInKSB7CisgICAg
cmV0dXJuICcjdGV4dCc7CisgIH0gZWxzZSBpZiAodHlwZW9mIGVsZW1lbnQudHlwZSA9PT0gJ3N0
cmluZycpIHsKKyAgICByZXR1cm4gZWxlbWVudC50eXBlOworICB9IGVsc2UgeworICAgIHJldHVy
biBlbGVtZW50LnR5cGUuZGlzcGxheU5hbWUgfHwgZWxlbWVudC50eXBlLm5hbWUgfHwgJ1Vua25v
d24nOworICB9Cit9CisKK2Z1bmN0aW9uIGRlc2NyaWJlSUQoaWQpIHsKKyAgdmFyIG5hbWUgPSBS
ZWFjdENvbXBvbmVudFRyZWVIb29rLmdldERpc3BsYXlOYW1lKGlkKTsKKyAgdmFyIGVsZW1lbnQg
PSBSZWFjdENvbXBvbmVudFRyZWVIb29rLmdldEVsZW1lbnQoaWQpOworICB2YXIgb3duZXJJRCA9
IFJlYWN0Q29tcG9uZW50VHJlZUhvb2suZ2V0T3duZXJJRChpZCk7CisgIHZhciBvd25lck5hbWU7
CisgIGlmIChvd25lcklEKSB7CisgICAgb3duZXJOYW1lID0gUmVhY3RDb21wb25lbnRUcmVlSG9v
ay5nZXREaXNwbGF5TmFtZShvd25lcklEKTsKKyAgfQorICAiZGV2ZWxvcG1lbnQiICE9PSAncHJv
ZHVjdGlvbicgPyB3YXJuaW5nKGVsZW1lbnQsICdSZWFjdENvbXBvbmVudFRyZWVIb29rOiBNaXNz
aW5nIFJlYWN0IGVsZW1lbnQgZm9yIGRlYnVnSUQgJXMgd2hlbiAnICsgJ2J1aWxkaW5nIHN0YWNr
JywgaWQpIDogdm9pZCAwOworICByZXR1cm4gZGVzY3JpYmVDb21wb25lbnRGcmFtZShuYW1lLCBl
bGVtZW50ICYmIGVsZW1lbnQuX3NvdXJjZSwgb3duZXJOYW1lKTsKK30KKwordmFyIFJlYWN0Q29t
cG9uZW50VHJlZUhvb2sgPSB7CisgIG9uU2V0Q2hpbGRyZW46IGZ1bmN0aW9uIChpZCwgbmV4dENo
aWxkSURzKSB7CisgICAgdmFyIGl0ZW0gPSBnZXRJdGVtKGlkKTsKKyAgICAhaXRlbSA/ICJkZXZl
bG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ0l0ZW0gbXVzdCBo
YXZlIGJlZW4gc2V0JykgOiBfcHJvZEludmFyaWFudCgnMTQ0JykgOiB2b2lkIDA7CisgICAgaXRl
bS5jaGlsZElEcyA9IG5leHRDaGlsZElEczsKKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmV4
dENoaWxkSURzLmxlbmd0aDsgaSsrKSB7CisgICAgICB2YXIgbmV4dENoaWxkSUQgPSBuZXh0Q2hp
bGRJRHNbaV07CisgICAgICB2YXIgbmV4dENoaWxkID0gZ2V0SXRlbShuZXh0Q2hpbGRJRCk7Cisg
ICAgICAhbmV4dENoaWxkID8gImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJp
YW50KGZhbHNlLCAnRXhwZWN0ZWQgaG9vayBldmVudHMgdG8gZmlyZSBmb3IgdGhlIGNoaWxkIGJl
Zm9yZSBpdHMgcGFyZW50IGluY2x1ZGVzIGl0IGluIG9uU2V0Q2hpbGRyZW4oKS4nKSA6IF9wcm9k
SW52YXJpYW50KCcxNDAnKSA6IHZvaWQgMDsKKyAgICAgICEobmV4dENoaWxkLmNoaWxkSURzICE9
IG51bGwgfHwgdHlwZW9mIG5leHRDaGlsZC5lbGVtZW50ICE9PSAnb2JqZWN0JyB8fCBuZXh0Q2hp
bGQuZWxlbWVudCA9PSBudWxsKSA/ICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IGlu
dmFyaWFudChmYWxzZSwgJ0V4cGVjdGVkIG9uU2V0Q2hpbGRyZW4oKSB0byBmaXJlIGZvciBhIGNv
bnRhaW5lciBjaGlsZCBiZWZvcmUgaXRzIHBhcmVudCBpbmNsdWRlcyBpdCBpbiBvblNldENoaWxk
cmVuKCkuJykgOiBfcHJvZEludmFyaWFudCgnMTQxJykgOiB2b2lkIDA7CisgICAgICAhbmV4dENo
aWxkLmlzTW91bnRlZCA/ICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFu
dChmYWxzZSwgJ0V4cGVjdGVkIG9uTW91bnRDb21wb25lbnQoKSB0byBmaXJlIGZvciB0aGUgY2hp
bGQgYmVmb3JlIGl0cyBwYXJlbnQgaW5jbHVkZXMgaXQgaW4gb25TZXRDaGlsZHJlbigpLicpIDog
X3Byb2RJbnZhcmlhbnQoJzcxJykgOiB2b2lkIDA7CisgICAgICBpZiAobmV4dENoaWxkLnBhcmVu
dElEID09IG51bGwpIHsKKyAgICAgICAgbmV4dENoaWxkLnBhcmVudElEID0gaWQ7CisgICAgICAg
IC8vIFRPRE86IFRoaXMgc2hvdWxkbid0IGJlIG5lY2Vzc2FyeSBidXQgbW91bnRpbmcgYSBuZXcg
cm9vdCBkdXJpbmcgaW4KKyAgICAgICAgLy8gY29tcG9uZW50V2lsbE1vdW50IGN1cnJlbnRseSBj
YXVzZXMgbm90LXlldC1tb3VudGVkIGNvbXBvbmVudHMgdG8KKyAgICAgICAgLy8gYmUgcHVyZ2Vk
IGZyb20gb3VyIHRyZWUgZGF0YSBzbyB0aGVpciBwYXJlbnQgaWQgaXMgbWlzc2luZy4KKyAgICAg
IH0KKyAgICAgICEobmV4dENoaWxkLnBhcmVudElEID09PSBpZCkgPyAiZGV2ZWxvcG1lbnQiICE9
PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdFeHBlY3RlZCBvbkJlZm9yZU1vdW50
Q29tcG9uZW50KCkgcGFyZW50IGFuZCBvblNldENoaWxkcmVuKCkgdG8gYmUgY29uc2lzdGVudCAo
JXMgaGFzIHBhcmVudHMgJXMgYW5kICVzKS4nLCBuZXh0Q2hpbGRJRCwgbmV4dENoaWxkLnBhcmVu
dElELCBpZCkgOiBfcHJvZEludmFyaWFudCgnMTQyJywgbmV4dENoaWxkSUQsIG5leHRDaGlsZC5w
YXJlbnRJRCwgaWQpIDogdm9pZCAwOworICAgIH0KKyAgfSwKKyAgb25CZWZvcmVNb3VudENvbXBv
bmVudDogZnVuY3Rpb24gKGlkLCBlbGVtZW50LCBwYXJlbnRJRCkgeworICAgIHZhciBpdGVtID0g
eworICAgICAgZWxlbWVudDogZWxlbWVudCwKKyAgICAgIHBhcmVudElEOiBwYXJlbnRJRCwKKyAg
ICAgIHRleHQ6IG51bGwsCisgICAgICBjaGlsZElEczogW10sCisgICAgICBpc01vdW50ZWQ6IGZh
bHNlLAorICAgICAgdXBkYXRlQ291bnQ6IDAKKyAgICB9OworICAgIHNldEl0ZW0oaWQsIGl0ZW0p
OworICB9LAorICBvbkJlZm9yZVVwZGF0ZUNvbXBvbmVudDogZnVuY3Rpb24gKGlkLCBlbGVtZW50
KSB7CisgICAgdmFyIGl0ZW0gPSBnZXRJdGVtKGlkKTsKKyAgICBpZiAoIWl0ZW0gfHwgIWl0ZW0u
aXNNb3VudGVkKSB7CisgICAgICAvLyBXZSBtYXkgZW5kIHVwIGhlcmUgYXMgYSByZXN1bHQgb2Yg
c2V0U3RhdGUoKSBpbiBjb21wb25lbnRXaWxsVW5tb3VudCgpLgorICAgICAgLy8gSW4gdGhpcyBj
YXNlLCBpZ25vcmUgdGhlIGVsZW1lbnQuCisgICAgICByZXR1cm47CisgICAgfQorICAgIGl0ZW0u
ZWxlbWVudCA9IGVsZW1lbnQ7CisgIH0sCisgIG9uTW91bnRDb21wb25lbnQ6IGZ1bmN0aW9uIChp
ZCkgeworICAgIHZhciBpdGVtID0gZ2V0SXRlbShpZCk7CisgICAgIWl0ZW0gPyAiZGV2ZWxvcG1l
bnQiICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdJdGVtIG11c3QgaGF2ZSBi
ZWVuIHNldCcpIDogX3Byb2RJbnZhcmlhbnQoJzE0NCcpIDogdm9pZCAwOworICAgIGl0ZW0uaXNN
b3VudGVkID0gdHJ1ZTsKKyAgICB2YXIgaXNSb290ID0gaXRlbS5wYXJlbnRJRCA9PT0gMDsKKyAg
ICBpZiAoaXNSb290KSB7CisgICAgICBhZGRSb290KGlkKTsKKyAgICB9CisgIH0sCisgIG9uVXBk
YXRlQ29tcG9uZW50OiBmdW5jdGlvbiAoaWQpIHsKKyAgICB2YXIgaXRlbSA9IGdldEl0ZW0oaWQp
OworICAgIGlmICghaXRlbSB8fCAhaXRlbS5pc01vdW50ZWQpIHsKKyAgICAgIC8vIFdlIG1heSBl
bmQgdXAgaGVyZSBhcyBhIHJlc3VsdCBvZiBzZXRTdGF0ZSgpIGluIGNvbXBvbmVudFdpbGxVbm1v
dW50KCkuCisgICAgICAvLyBJbiB0aGlzIGNhc2UsIGlnbm9yZSB0aGUgZWxlbWVudC4KKyAgICAg
IHJldHVybjsKKyAgICB9CisgICAgaXRlbS51cGRhdGVDb3VudCsrOworICB9LAorICBvblVubW91
bnRDb21wb25lbnQ6IGZ1bmN0aW9uIChpZCkgeworICAgIHZhciBpdGVtID0gZ2V0SXRlbShpZCk7
CisgICAgaWYgKGl0ZW0pIHsKKyAgICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sgaWYgaXQgZXhpc3Rz
LgorICAgICAgLy8gYGl0ZW1gIG1pZ2h0IG5vdCBleGlzdCBpZiBpdCBpcyBpbnNpZGUgYW4gZXJy
b3IgYm91bmRhcnksIGFuZCBhIHNpYmxpbmcKKyAgICAgIC8vIGVycm9yIGJvdW5kYXJ5IGNoaWxk
IHRocmV3IHdoaWxlIG1vdW50aW5nLiBUaGVuIHRoaXMgaW5zdGFuY2UgbmV2ZXIKKyAgICAgIC8v
IGdvdCBhIGNoYW5jZSB0byBtb3VudCwgYnV0IGl0IHN0aWxsIGdldHMgYW4gdW5tb3VudGluZyBl
dmVudCBkdXJpbmcKKyAgICAgIC8vIHRoZSBlcnJvciBib3VuZGFyeSBjbGVhbnVwLgorICAgICAg
aXRlbS5pc01vdW50ZWQgPSBmYWxzZTsKKyAgICAgIHZhciBpc1Jvb3QgPSBpdGVtLnBhcmVudElE
ID09PSAwOworICAgICAgaWYgKGlzUm9vdCkgeworICAgICAgICByZW1vdmVSb290KGlkKTsKKyAg
ICAgIH0KKyAgICB9CisgICAgdW5tb3VudGVkSURzLnB1c2goaWQpOworICB9LAorICBwdXJnZVVu
bW91bnRlZENvbXBvbmVudHM6IGZ1bmN0aW9uICgpIHsKKyAgICBpZiAoUmVhY3RDb21wb25lbnRU
cmVlSG9vay5fcHJldmVudFB1cmdpbmcpIHsKKyAgICAgIC8vIFNob3VsZCBvbmx5IGJlIHVzZWQg
Zm9yIHRlc3RpbmcuCisgICAgICByZXR1cm47CisgICAgfQorCisgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCB1bm1vdW50ZWRJRHMubGVuZ3RoOyBpKyspIHsKKyAgICAgIHZhciBpZCA9IHVubW91bnRl
ZElEc1tpXTsKKyAgICAgIHB1cmdlRGVlcChpZCk7CisgICAgfQorICAgIHVubW91bnRlZElEcy5s
ZW5ndGggPSAwOworICB9LAorICBpc01vdW50ZWQ6IGZ1bmN0aW9uIChpZCkgeworICAgIHZhciBp
dGVtID0gZ2V0SXRlbShpZCk7CisgICAgcmV0dXJuIGl0ZW0gPyBpdGVtLmlzTW91bnRlZCA6IGZh
bHNlOworICB9LAorICBnZXRDdXJyZW50U3RhY2tBZGRlbmR1bTogZnVuY3Rpb24gKHRvcEVsZW1l
bnQpIHsKKyAgICB2YXIgaW5mbyA9ICcnOworICAgIGlmICh0b3BFbGVtZW50KSB7CisgICAgICB2
YXIgbmFtZSA9IGdldERpc3BsYXlOYW1lKHRvcEVsZW1lbnQpOworICAgICAgdmFyIG93bmVyID0g
dG9wRWxlbWVudC5fb3duZXI7CisgICAgICBpbmZvICs9IGRlc2NyaWJlQ29tcG9uZW50RnJhbWUo
bmFtZSwgdG9wRWxlbWVudC5fc291cmNlLCBvd25lciAmJiBvd25lci5nZXROYW1lKCkpOworICAg
IH0KKworICAgIHZhciBjdXJyZW50T3duZXIgPSBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50Owor
ICAgIHZhciBpZCA9IGN1cnJlbnRPd25lciAmJiBjdXJyZW50T3duZXIuX2RlYnVnSUQ7CisKKyAg
ICBpbmZvICs9IFJlYWN0Q29tcG9uZW50VHJlZUhvb2suZ2V0U3RhY2tBZGRlbmR1bUJ5SUQoaWQp
OworICAgIHJldHVybiBpbmZvOworICB9LAorICBnZXRTdGFja0FkZGVuZHVtQnlJRDogZnVuY3Rp
b24gKGlkKSB7CisgICAgdmFyIGluZm8gPSAnJzsKKyAgICB3aGlsZSAoaWQpIHsKKyAgICAgIGlu
Zm8gKz0gZGVzY3JpYmVJRChpZCk7CisgICAgICBpZCA9IFJlYWN0Q29tcG9uZW50VHJlZUhvb2su
Z2V0UGFyZW50SUQoaWQpOworICAgIH0KKyAgICByZXR1cm4gaW5mbzsKKyAgfSwKKyAgZ2V0Q2hp
bGRJRHM6IGZ1bmN0aW9uIChpZCkgeworICAgIHZhciBpdGVtID0gZ2V0SXRlbShpZCk7CisgICAg
cmV0dXJuIGl0ZW0gPyBpdGVtLmNoaWxkSURzIDogW107CisgIH0sCisgIGdldERpc3BsYXlOYW1l
OiBmdW5jdGlvbiAoaWQpIHsKKyAgICB2YXIgZWxlbWVudCA9IFJlYWN0Q29tcG9uZW50VHJlZUhv
b2suZ2V0RWxlbWVudChpZCk7CisgICAgaWYgKCFlbGVtZW50KSB7CisgICAgICByZXR1cm4gbnVs
bDsKKyAgICB9CisgICAgcmV0dXJuIGdldERpc3BsYXlOYW1lKGVsZW1lbnQpOworICB9LAorICBn
ZXRFbGVtZW50OiBmdW5jdGlvbiAoaWQpIHsKKyAgICB2YXIgaXRlbSA9IGdldEl0ZW0oaWQpOwor
ICAgIHJldHVybiBpdGVtID8gaXRlbS5lbGVtZW50IDogbnVsbDsKKyAgfSwKKyAgZ2V0T3duZXJJ
RDogZnVuY3Rpb24gKGlkKSB7CisgICAgdmFyIGVsZW1lbnQgPSBSZWFjdENvbXBvbmVudFRyZWVI
b29rLmdldEVsZW1lbnQoaWQpOworICAgIGlmICghZWxlbWVudCB8fCAhZWxlbWVudC5fb3duZXIp
IHsKKyAgICAgIHJldHVybiBudWxsOworICAgIH0KKyAgICByZXR1cm4gZWxlbWVudC5fb3duZXIu
X2RlYnVnSUQ7CisgIH0sCisgIGdldFBhcmVudElEOiBmdW5jdGlvbiAoaWQpIHsKKyAgICB2YXIg
aXRlbSA9IGdldEl0ZW0oaWQpOworICAgIHJldHVybiBpdGVtID8gaXRlbS5wYXJlbnRJRCA6IG51
bGw7CisgIH0sCisgIGdldFNvdXJjZTogZnVuY3Rpb24gKGlkKSB7CisgICAgdmFyIGl0ZW0gPSBn
ZXRJdGVtKGlkKTsKKyAgICB2YXIgZWxlbWVudCA9IGl0ZW0gPyBpdGVtLmVsZW1lbnQgOiBudWxs
OworICAgIHZhciBzb3VyY2UgPSBlbGVtZW50ICE9IG51bGwgPyBlbGVtZW50Ll9zb3VyY2UgOiBu
dWxsOworICAgIHJldHVybiBzb3VyY2U7CisgIH0sCisgIGdldFRleHQ6IGZ1bmN0aW9uIChpZCkg
eworICAgIHZhciBlbGVtZW50ID0gUmVhY3RDb21wb25lbnRUcmVlSG9vay5nZXRFbGVtZW50KGlk
KTsKKyAgICBpZiAodHlwZW9mIGVsZW1lbnQgPT09ICdzdHJpbmcnKSB7CisgICAgICByZXR1cm4g
ZWxlbWVudDsKKyAgICB9IGVsc2UgaWYgKHR5cGVvZiBlbGVtZW50ID09PSAnbnVtYmVyJykgewor
ICAgICAgcmV0dXJuICcnICsgZWxlbWVudDsKKyAgICB9IGVsc2UgeworICAgICAgcmV0dXJuIG51
bGw7CisgICAgfQorICB9LAorICBnZXRVcGRhdGVDb3VudDogZnVuY3Rpb24gKGlkKSB7CisgICAg
dmFyIGl0ZW0gPSBnZXRJdGVtKGlkKTsKKyAgICByZXR1cm4gaXRlbSA/IGl0ZW0udXBkYXRlQ291
bnQgOiAwOworICB9LAorCisKKyAgZ2V0Um9vdElEczogZ2V0Um9vdElEcywKKyAgZ2V0UmVnaXN0
ZXJlZElEczogZ2V0SXRlbUlEcworfTsKKworbW9kdWxlLmV4cG9ydHMgPSBSZWFjdENvbXBvbmVu
dFRyZWVIb29rOworfSx7IjI1IjoyNSwiMjkiOjI5LCIzMCI6MzAsIjgiOjh9XSw4OltmdW5jdGlv
bihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMtcHJlc2Vu
dCwgRmFjZWJvb2ssIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBz
b3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQg
aW4gdGhlCisgKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291
cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnQKKyAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJl
IGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorICoKKyAq
IAorICovCisKKyd1c2Ugc3RyaWN0JzsKKworLyoqCisgKiBLZWVwcyB0cmFjayBvZiB0aGUgY3Vy
cmVudCBvd25lci4KKyAqCisgKiBUaGUgY3VycmVudCBvd25lciBpcyB0aGUgY29tcG9uZW50IHdo
byBzaG91bGQgb3duIGFueSBjb21wb25lbnRzIHRoYXQgYXJlCisgKiBjdXJyZW50bHkgYmVpbmcg
Y29uc3RydWN0ZWQuCisgKi8KK3ZhciBSZWFjdEN1cnJlbnRPd25lciA9IHsKKworICAvKioKKyAg
ICogQGludGVybmFsCisgICAqIEB0eXBlIHtSZWFjdENvbXBvbmVudH0KKyAgICovCisgIGN1cnJl
bnQ6IG51bGwKKworfTsKKworbW9kdWxlLmV4cG9ydHMgPSBSZWFjdEN1cnJlbnRPd25lcjsKK30s
e31dLDk6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmln
aHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUg
bGljZW5zZSBmb3VuZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rv
cnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAorICogb2YgcGF0ZW50
IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJl
Y3RvcnkuCisgKgorICovCisKKyd1c2Ugc3RyaWN0JzsKKwordmFyIFJlYWN0RWxlbWVudCA9IF9k
ZXJlcV8oMTApOworCisvKioKKyAqIENyZWF0ZSBhIGZhY3RvcnkgdGhhdCBjcmVhdGVzIEhUTUwg
dGFnIGVsZW1lbnRzLgorICoKKyAqIEBwcml2YXRlCisgKi8KK3ZhciBjcmVhdGVET01GYWN0b3J5
ID0gUmVhY3RFbGVtZW50LmNyZWF0ZUZhY3Rvcnk7CitpZiAoImRldmVsb3BtZW50IiAhPT0gJ3By
b2R1Y3Rpb24nKSB7CisgIHZhciBSZWFjdEVsZW1lbnRWYWxpZGF0b3IgPSBfZGVyZXFfKDEyKTsK
KyAgY3JlYXRlRE9NRmFjdG9yeSA9IFJlYWN0RWxlbWVudFZhbGlkYXRvci5jcmVhdGVGYWN0b3J5
OworfQorCisvKioKKyAqIENyZWF0ZXMgYSBtYXBwaW5nIGZyb20gc3VwcG9ydGVkIEhUTUwgdGFn
cyB0byBgUmVhY3RET01Db21wb25lbnRgIGNsYXNzZXMuCisgKiBUaGlzIGlzIGFsc28gYWNjZXNz
aWJsZSB2aWEgYFJlYWN0LkRPTWAuCisgKgorICogQHB1YmxpYworICovCit2YXIgUmVhY3RET01G
YWN0b3JpZXMgPSB7CisgIGE6IGNyZWF0ZURPTUZhY3RvcnkoJ2EnKSwKKyAgYWJicjogY3JlYXRl
RE9NRmFjdG9yeSgnYWJicicpLAorICBhZGRyZXNzOiBjcmVhdGVET01GYWN0b3J5KCdhZGRyZXNz
JyksCisgIGFyZWE6IGNyZWF0ZURPTUZhY3RvcnkoJ2FyZWEnKSwKKyAgYXJ0aWNsZTogY3JlYXRl
RE9NRmFjdG9yeSgnYXJ0aWNsZScpLAorICBhc2lkZTogY3JlYXRlRE9NRmFjdG9yeSgnYXNpZGUn
KSwKKyAgYXVkaW86IGNyZWF0ZURPTUZhY3RvcnkoJ2F1ZGlvJyksCisgIGI6IGNyZWF0ZURPTUZh
Y3RvcnkoJ2InKSwKKyAgYmFzZTogY3JlYXRlRE9NRmFjdG9yeSgnYmFzZScpLAorICBiZGk6IGNy
ZWF0ZURPTUZhY3RvcnkoJ2JkaScpLAorICBiZG86IGNyZWF0ZURPTUZhY3RvcnkoJ2JkbycpLAor
ICBiaWc6IGNyZWF0ZURPTUZhY3RvcnkoJ2JpZycpLAorICBibG9ja3F1b3RlOiBjcmVhdGVET01G
YWN0b3J5KCdibG9ja3F1b3RlJyksCisgIGJvZHk6IGNyZWF0ZURPTUZhY3RvcnkoJ2JvZHknKSwK
KyAgYnI6IGNyZWF0ZURPTUZhY3RvcnkoJ2JyJyksCisgIGJ1dHRvbjogY3JlYXRlRE9NRmFjdG9y
eSgnYnV0dG9uJyksCisgIGNhbnZhczogY3JlYXRlRE9NRmFjdG9yeSgnY2FudmFzJyksCisgIGNh
cHRpb246IGNyZWF0ZURPTUZhY3RvcnkoJ2NhcHRpb24nKSwKKyAgY2l0ZTogY3JlYXRlRE9NRmFj
dG9yeSgnY2l0ZScpLAorICBjb2RlOiBjcmVhdGVET01GYWN0b3J5KCdjb2RlJyksCisgIGNvbDog
Y3JlYXRlRE9NRmFjdG9yeSgnY29sJyksCisgIGNvbGdyb3VwOiBjcmVhdGVET01GYWN0b3J5KCdj
b2xncm91cCcpLAorICBkYXRhOiBjcmVhdGVET01GYWN0b3J5KCdkYXRhJyksCisgIGRhdGFsaXN0
OiBjcmVhdGVET01GYWN0b3J5KCdkYXRhbGlzdCcpLAorICBkZDogY3JlYXRlRE9NRmFjdG9yeSgn
ZGQnKSwKKyAgZGVsOiBjcmVhdGVET01GYWN0b3J5KCdkZWwnKSwKKyAgZGV0YWlsczogY3JlYXRl
RE9NRmFjdG9yeSgnZGV0YWlscycpLAorICBkZm46IGNyZWF0ZURPTUZhY3RvcnkoJ2RmbicpLAor
ICBkaWFsb2c6IGNyZWF0ZURPTUZhY3RvcnkoJ2RpYWxvZycpLAorICBkaXY6IGNyZWF0ZURPTUZh
Y3RvcnkoJ2RpdicpLAorICBkbDogY3JlYXRlRE9NRmFjdG9yeSgnZGwnKSwKKyAgZHQ6IGNyZWF0
ZURPTUZhY3RvcnkoJ2R0JyksCisgIGVtOiBjcmVhdGVET01GYWN0b3J5KCdlbScpLAorICBlbWJl
ZDogY3JlYXRlRE9NRmFjdG9yeSgnZW1iZWQnKSwKKyAgZmllbGRzZXQ6IGNyZWF0ZURPTUZhY3Rv
cnkoJ2ZpZWxkc2V0JyksCisgIGZpZ2NhcHRpb246IGNyZWF0ZURPTUZhY3RvcnkoJ2ZpZ2NhcHRp
b24nKSwKKyAgZmlndXJlOiBjcmVhdGVET01GYWN0b3J5KCdmaWd1cmUnKSwKKyAgZm9vdGVyOiBj
cmVhdGVET01GYWN0b3J5KCdmb290ZXInKSwKKyAgZm9ybTogY3JlYXRlRE9NRmFjdG9yeSgnZm9y
bScpLAorICBoMTogY3JlYXRlRE9NRmFjdG9yeSgnaDEnKSwKKyAgaDI6IGNyZWF0ZURPTUZhY3Rv
cnkoJ2gyJyksCisgIGgzOiBjcmVhdGVET01GYWN0b3J5KCdoMycpLAorICBoNDogY3JlYXRlRE9N
RmFjdG9yeSgnaDQnKSwKKyAgaDU6IGNyZWF0ZURPTUZhY3RvcnkoJ2g1JyksCisgIGg2OiBjcmVh
dGVET01GYWN0b3J5KCdoNicpLAorICBoZWFkOiBjcmVhdGVET01GYWN0b3J5KCdoZWFkJyksCisg
IGhlYWRlcjogY3JlYXRlRE9NRmFjdG9yeSgnaGVhZGVyJyksCisgIGhncm91cDogY3JlYXRlRE9N
RmFjdG9yeSgnaGdyb3VwJyksCisgIGhyOiBjcmVhdGVET01GYWN0b3J5KCdocicpLAorICBodG1s
OiBjcmVhdGVET01GYWN0b3J5KCdodG1sJyksCisgIGk6IGNyZWF0ZURPTUZhY3RvcnkoJ2knKSwK
KyAgaWZyYW1lOiBjcmVhdGVET01GYWN0b3J5KCdpZnJhbWUnKSwKKyAgaW1nOiBjcmVhdGVET01G
YWN0b3J5KCdpbWcnKSwKKyAgaW5wdXQ6IGNyZWF0ZURPTUZhY3RvcnkoJ2lucHV0JyksCisgIGlu
czogY3JlYXRlRE9NRmFjdG9yeSgnaW5zJyksCisgIGtiZDogY3JlYXRlRE9NRmFjdG9yeSgna2Jk
JyksCisgIGtleWdlbjogY3JlYXRlRE9NRmFjdG9yeSgna2V5Z2VuJyksCisgIGxhYmVsOiBjcmVh
dGVET01GYWN0b3J5KCdsYWJlbCcpLAorICBsZWdlbmQ6IGNyZWF0ZURPTUZhY3RvcnkoJ2xlZ2Vu
ZCcpLAorICBsaTogY3JlYXRlRE9NRmFjdG9yeSgnbGknKSwKKyAgbGluazogY3JlYXRlRE9NRmFj
dG9yeSgnbGluaycpLAorICBtYWluOiBjcmVhdGVET01GYWN0b3J5KCdtYWluJyksCisgIG1hcDog
Y3JlYXRlRE9NRmFjdG9yeSgnbWFwJyksCisgIG1hcms6IGNyZWF0ZURPTUZhY3RvcnkoJ21hcmsn
KSwKKyAgbWVudTogY3JlYXRlRE9NRmFjdG9yeSgnbWVudScpLAorICBtZW51aXRlbTogY3JlYXRl
RE9NRmFjdG9yeSgnbWVudWl0ZW0nKSwKKyAgbWV0YTogY3JlYXRlRE9NRmFjdG9yeSgnbWV0YScp
LAorICBtZXRlcjogY3JlYXRlRE9NRmFjdG9yeSgnbWV0ZXInKSwKKyAgbmF2OiBjcmVhdGVET01G
YWN0b3J5KCduYXYnKSwKKyAgbm9zY3JpcHQ6IGNyZWF0ZURPTUZhY3RvcnkoJ25vc2NyaXB0Jyks
CisgIG9iamVjdDogY3JlYXRlRE9NRmFjdG9yeSgnb2JqZWN0JyksCisgIG9sOiBjcmVhdGVET01G
YWN0b3J5KCdvbCcpLAorICBvcHRncm91cDogY3JlYXRlRE9NRmFjdG9yeSgnb3B0Z3JvdXAnKSwK
KyAgb3B0aW9uOiBjcmVhdGVET01GYWN0b3J5KCdvcHRpb24nKSwKKyAgb3V0cHV0OiBjcmVhdGVE
T01GYWN0b3J5KCdvdXRwdXQnKSwKKyAgcDogY3JlYXRlRE9NRmFjdG9yeSgncCcpLAorICBwYXJh
bTogY3JlYXRlRE9NRmFjdG9yeSgncGFyYW0nKSwKKyAgcGljdHVyZTogY3JlYXRlRE9NRmFjdG9y
eSgncGljdHVyZScpLAorICBwcmU6IGNyZWF0ZURPTUZhY3RvcnkoJ3ByZScpLAorICBwcm9ncmVz
czogY3JlYXRlRE9NRmFjdG9yeSgncHJvZ3Jlc3MnKSwKKyAgcTogY3JlYXRlRE9NRmFjdG9yeSgn
cScpLAorICBycDogY3JlYXRlRE9NRmFjdG9yeSgncnAnKSwKKyAgcnQ6IGNyZWF0ZURPTUZhY3Rv
cnkoJ3J0JyksCisgIHJ1Ynk6IGNyZWF0ZURPTUZhY3RvcnkoJ3J1YnknKSwKKyAgczogY3JlYXRl
RE9NRmFjdG9yeSgncycpLAorICBzYW1wOiBjcmVhdGVET01GYWN0b3J5KCdzYW1wJyksCisgIHNj
cmlwdDogY3JlYXRlRE9NRmFjdG9yeSgnc2NyaXB0JyksCisgIHNlY3Rpb246IGNyZWF0ZURPTUZh
Y3RvcnkoJ3NlY3Rpb24nKSwKKyAgc2VsZWN0OiBjcmVhdGVET01GYWN0b3J5KCdzZWxlY3QnKSwK
KyAgc21hbGw6IGNyZWF0ZURPTUZhY3RvcnkoJ3NtYWxsJyksCisgIHNvdXJjZTogY3JlYXRlRE9N
RmFjdG9yeSgnc291cmNlJyksCisgIHNwYW46IGNyZWF0ZURPTUZhY3RvcnkoJ3NwYW4nKSwKKyAg
c3Ryb25nOiBjcmVhdGVET01GYWN0b3J5KCdzdHJvbmcnKSwKKyAgc3R5bGU6IGNyZWF0ZURPTUZh
Y3RvcnkoJ3N0eWxlJyksCisgIHN1YjogY3JlYXRlRE9NRmFjdG9yeSgnc3ViJyksCisgIHN1bW1h
cnk6IGNyZWF0ZURPTUZhY3RvcnkoJ3N1bW1hcnknKSwKKyAgc3VwOiBjcmVhdGVET01GYWN0b3J5
KCdzdXAnKSwKKyAgdGFibGU6IGNyZWF0ZURPTUZhY3RvcnkoJ3RhYmxlJyksCisgIHRib2R5OiBj
cmVhdGVET01GYWN0b3J5KCd0Ym9keScpLAorICB0ZDogY3JlYXRlRE9NRmFjdG9yeSgndGQnKSwK
KyAgdGV4dGFyZWE6IGNyZWF0ZURPTUZhY3RvcnkoJ3RleHRhcmVhJyksCisgIHRmb290OiBjcmVh
dGVET01GYWN0b3J5KCd0Zm9vdCcpLAorICB0aDogY3JlYXRlRE9NRmFjdG9yeSgndGgnKSwKKyAg
dGhlYWQ6IGNyZWF0ZURPTUZhY3RvcnkoJ3RoZWFkJyksCisgIHRpbWU6IGNyZWF0ZURPTUZhY3Rv
cnkoJ3RpbWUnKSwKKyAgdGl0bGU6IGNyZWF0ZURPTUZhY3RvcnkoJ3RpdGxlJyksCisgIHRyOiBj
cmVhdGVET01GYWN0b3J5KCd0cicpLAorICB0cmFjazogY3JlYXRlRE9NRmFjdG9yeSgndHJhY2sn
KSwKKyAgdTogY3JlYXRlRE9NRmFjdG9yeSgndScpLAorICB1bDogY3JlYXRlRE9NRmFjdG9yeSgn
dWwnKSwKKyAgJ3Zhcic6IGNyZWF0ZURPTUZhY3RvcnkoJ3ZhcicpLAorICB2aWRlbzogY3JlYXRl
RE9NRmFjdG9yeSgndmlkZW8nKSwKKyAgd2JyOiBjcmVhdGVET01GYWN0b3J5KCd3YnInKSwKKwor
ICAvLyBTVkcKKyAgY2lyY2xlOiBjcmVhdGVET01GYWN0b3J5KCdjaXJjbGUnKSwKKyAgY2xpcFBh
dGg6IGNyZWF0ZURPTUZhY3RvcnkoJ2NsaXBQYXRoJyksCisgIGRlZnM6IGNyZWF0ZURPTUZhY3Rv
cnkoJ2RlZnMnKSwKKyAgZWxsaXBzZTogY3JlYXRlRE9NRmFjdG9yeSgnZWxsaXBzZScpLAorICBn
OiBjcmVhdGVET01GYWN0b3J5KCdnJyksCisgIGltYWdlOiBjcmVhdGVET01GYWN0b3J5KCdpbWFn
ZScpLAorICBsaW5lOiBjcmVhdGVET01GYWN0b3J5KCdsaW5lJyksCisgIGxpbmVhckdyYWRpZW50
OiBjcmVhdGVET01GYWN0b3J5KCdsaW5lYXJHcmFkaWVudCcpLAorICBtYXNrOiBjcmVhdGVET01G
YWN0b3J5KCdtYXNrJyksCisgIHBhdGg6IGNyZWF0ZURPTUZhY3RvcnkoJ3BhdGgnKSwKKyAgcGF0
dGVybjogY3JlYXRlRE9NRmFjdG9yeSgncGF0dGVybicpLAorICBwb2x5Z29uOiBjcmVhdGVET01G
YWN0b3J5KCdwb2x5Z29uJyksCisgIHBvbHlsaW5lOiBjcmVhdGVET01GYWN0b3J5KCdwb2x5bGlu
ZScpLAorICByYWRpYWxHcmFkaWVudDogY3JlYXRlRE9NRmFjdG9yeSgncmFkaWFsR3JhZGllbnQn
KSwKKyAgcmVjdDogY3JlYXRlRE9NRmFjdG9yeSgncmVjdCcpLAorICBzdG9wOiBjcmVhdGVET01G
YWN0b3J5KCdzdG9wJyksCisgIHN2ZzogY3JlYXRlRE9NRmFjdG9yeSgnc3ZnJyksCisgIHRleHQ6
IGNyZWF0ZURPTUZhY3RvcnkoJ3RleHQnKSwKKyAgdHNwYW46IGNyZWF0ZURPTUZhY3RvcnkoJ3Rz
cGFuJykKK307CisKK21vZHVsZS5leHBvcnRzID0gUmVhY3RET01GYWN0b3JpZXM7Cit9LHsiMTAi
OjEwLCIxMiI6MTJ9XSwxMDpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7CisvKioK
KyAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQsIEZhY2Vib29rLCBJbmMuCisgKiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhl
IEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZQorICogTElDRU5TRSBmaWxlIGluIHRoZSBy
b290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50Cisg
KiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRo
ZSBzYW1lIGRpcmVjdG9yeS4KKyAqCisgKi8KKworJ3VzZSBzdHJpY3QnOworCit2YXIgX2Fzc2ln
biA9IF9kZXJlcV8oMzEpOworCit2YXIgUmVhY3RDdXJyZW50T3duZXIgPSBfZGVyZXFfKDgpOwor
Cit2YXIgd2FybmluZyA9IF9kZXJlcV8oMzApOwordmFyIGNhbkRlZmluZVByb3BlcnR5ID0gX2Rl
cmVxXygyMCk7Cit2YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blBy
b3BlcnR5OworCit2YXIgUkVBQ1RfRUxFTUVOVF9UWVBFID0gX2RlcmVxXygxMSk7CisKK3ZhciBS
RVNFUlZFRF9QUk9QUyA9IHsKKyAga2V5OiB0cnVlLAorICByZWY6IHRydWUsCisgIF9fc2VsZjog
dHJ1ZSwKKyAgX19zb3VyY2U6IHRydWUKK307CisKK3ZhciBzcGVjaWFsUHJvcEtleVdhcm5pbmdT
aG93biwgc3BlY2lhbFByb3BSZWZXYXJuaW5nU2hvd247CisKK2Z1bmN0aW9uIGhhc1ZhbGlkUmVm
KGNvbmZpZykgeworICBpZiAoImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nKSB7CisgICAg
aWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCAncmVmJykpIHsKKyAgICAgIHZhciBnZXR0
ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGNvbmZpZywgJ3JlZicpLmdldDsK
KyAgICAgIGlmIChnZXR0ZXIgJiYgZ2V0dGVyLmlzUmVhY3RXYXJuaW5nKSB7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgIH0KKyAgICB9CisgIH0KKyAgcmV0dXJuIGNvbmZpZy5yZWYgIT09
IHVuZGVmaW5lZDsKK30KKworZnVuY3Rpb24gaGFzVmFsaWRLZXkoY29uZmlnKSB7CisgIGlmICgi
ZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicpIHsKKyAgICBpZiAoaGFzT3duUHJvcGVydHku
Y2FsbChjb25maWcsICdrZXknKSkgeworICAgICAgdmFyIGdldHRlciA9IE9iamVjdC5nZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IoY29uZmlnLCAna2V5JykuZ2V0OworICAgICAgaWYgKGdldHRlciAm
JiBnZXR0ZXIuaXNSZWFjdFdhcm5pbmcpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
fQorICAgIH0KKyAgfQorICByZXR1cm4gY29uZmlnLmtleSAhPT0gdW5kZWZpbmVkOworfQorCitm
dW5jdGlvbiBkZWZpbmVLZXlQcm9wV2FybmluZ0dldHRlcihwcm9wcywgZGlzcGxheU5hbWUpIHsK
KyAgdmFyIHdhcm5BYm91dEFjY2Vzc2luZ0tleSA9IGZ1bmN0aW9uICgpIHsKKyAgICBpZiAoIXNw
ZWNpYWxQcm9wS2V5V2FybmluZ1Nob3duKSB7CisgICAgICBzcGVjaWFsUHJvcEtleVdhcm5pbmdT
aG93biA9IHRydWU7CisgICAgICAiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicgPyB3YXJu
aW5nKGZhbHNlLCAnJXM6IGBrZXlgIGlzIG5vdCBhIHByb3AuIFRyeWluZyB0byBhY2Nlc3MgaXQg
d2lsbCByZXN1bHQgJyArICdpbiBgdW5kZWZpbmVkYCBiZWluZyByZXR1cm5lZC4gSWYgeW91IG5l
ZWQgdG8gYWNjZXNzIHRoZSBzYW1lICcgKyAndmFsdWUgd2l0aGluIHRoZSBjaGlsZCBjb21wb25l
bnQsIHlvdSBzaG91bGQgcGFzcyBpdCBhcyBhIGRpZmZlcmVudCAnICsgJ3Byb3AuIChodHRwczov
L2ZiLm1lL3JlYWN0LXNwZWNpYWwtcHJvcHMpJywgZGlzcGxheU5hbWUpIDogdm9pZCAwOworICAg
IH0KKyAgfTsKKyAgd2FybkFib3V0QWNjZXNzaW5nS2V5LmlzUmVhY3RXYXJuaW5nID0gdHJ1ZTsK
KyAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3BzLCAna2V5JywgeworICAgIGdldDogd2FybkFi
b3V0QWNjZXNzaW5nS2V5LAorICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQorICB9KTsKK30KKworZnVu
Y3Rpb24gZGVmaW5lUmVmUHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKSB7Cisg
IHZhciB3YXJuQWJvdXRBY2Nlc3NpbmdSZWYgPSBmdW5jdGlvbiAoKSB7CisgICAgaWYgKCFzcGVj
aWFsUHJvcFJlZldhcm5pbmdTaG93bikgeworICAgICAgc3BlY2lhbFByb3BSZWZXYXJuaW5nU2hv
d24gPSB0cnVlOworICAgICAgImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gd2Fybmlu
ZyhmYWxzZSwgJyVzOiBgcmVmYCBpcyBub3QgYSBwcm9wLiBUcnlpbmcgdG8gYWNjZXNzIGl0IHdp
bGwgcmVzdWx0ICcgKyAnaW4gYHVuZGVmaW5lZGAgYmVpbmcgcmV0dXJuZWQuIElmIHlvdSBuZWVk
IHRvIGFjY2VzcyB0aGUgc2FtZSAnICsgJ3ZhbHVlIHdpdGhpbiB0aGUgY2hpbGQgY29tcG9uZW50
LCB5b3Ugc2hvdWxkIHBhc3MgaXQgYXMgYSBkaWZmZXJlbnQgJyArICdwcm9wLiAoaHR0cHM6Ly9m
Yi5tZS9yZWFjdC1zcGVjaWFsLXByb3BzKScsIGRpc3BsYXlOYW1lKSA6IHZvaWQgMDsKKyAgICB9
CisgIH07CisgIHdhcm5BYm91dEFjY2Vzc2luZ1JlZi5pc1JlYWN0V2FybmluZyA9IHRydWU7Cisg
IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm9wcywgJ3JlZicsIHsKKyAgICBnZXQ6IHdhcm5BYm91
dEFjY2Vzc2luZ1JlZiwKKyAgICBjb25maWd1cmFibGU6IHRydWUKKyAgfSk7Cit9CisKKy8qKgor
ICogRmFjdG9yeSBtZXRob2QgdG8gY3JlYXRlIGEgbmV3IFJlYWN0IGVsZW1lbnQuIFRoaXMgbm8g
bG9uZ2VyIGFkaGVyZXMgdG8KKyAqIHRoZSBjbGFzcyBwYXR0ZXJuLCBzbyBkbyBub3QgdXNlIG5l
dyB0byBjYWxsIGl0LiBBbHNvLCBubyBpbnN0YW5jZW9mIGNoZWNrCisgKiB3aWxsIHdvcmsuIElu
c3RlYWQgdGVzdCAkJHR5cGVvZiBmaWVsZCBhZ2FpbnN0IFN5bWJvbC5mb3IoJ3JlYWN0LmVsZW1l
bnQnKSB0byBjaGVjaworICogaWYgc29tZXRoaW5nIGlzIGEgUmVhY3QgRWxlbWVudC4KKyAqCisg
KiBAcGFyYW0geyp9IHR5cGUKKyAqIEBwYXJhbSB7Kn0ga2V5CisgKiBAcGFyYW0ge3N0cmluZ3xv
YmplY3R9IHJlZgorICogQHBhcmFtIHsqfSBzZWxmIEEgKnRlbXBvcmFyeSogaGVscGVyIHRvIGRl
dGVjdCBwbGFjZXMgd2hlcmUgYHRoaXNgIGlzCisgKiBkaWZmZXJlbnQgZnJvbSB0aGUgYG93bmVy
YCB3aGVuIFJlYWN0LmNyZWF0ZUVsZW1lbnQgaXMgY2FsbGVkLCBzbyB0aGF0IHdlCisgKiBjYW4g
d2Fybi4gV2Ugd2FudCB0byBnZXQgcmlkIG9mIG93bmVyIGFuZCByZXBsYWNlIHN0cmluZyBgcmVm
YHMgd2l0aCBhcnJvdworICogZnVuY3Rpb25zLCBhbmQgYXMgbG9uZyBhcyBgdGhpc2AgYW5kIG93
bmVyIGFyZSB0aGUgc2FtZSwgdGhlcmUgd2lsbCBiZSBubworICogY2hhbmdlIGluIGJlaGF2aW9y
LgorICogQHBhcmFtIHsqfSBzb3VyY2UgQW4gYW5ub3RhdGlvbiBvYmplY3QgKGFkZGVkIGJ5IGEg
dHJhbnNwaWxlciBvciBvdGhlcndpc2UpCisgKiBpbmRpY2F0aW5nIGZpbGVuYW1lLCBsaW5lIG51
bWJlciwgYW5kL29yIG90aGVyIGluZm9ybWF0aW9uLgorICogQHBhcmFtIHsqfSBvd25lcgorICog
QHBhcmFtIHsqfSBwcm9wcworICogQGludGVybmFsCisgKi8KK3ZhciBSZWFjdEVsZW1lbnQgPSBm
dW5jdGlvbiAodHlwZSwga2V5LCByZWYsIHNlbGYsIHNvdXJjZSwgb3duZXIsIHByb3BzKSB7Cisg
IHZhciBlbGVtZW50ID0geworICAgIC8vIFRoaXMgdGFnIGFsbG93IHVzIHRvIHVuaXF1ZWx5IGlk
ZW50aWZ5IHRoaXMgYXMgYSBSZWFjdCBFbGVtZW50CisgICAgJCR0eXBlb2Y6IFJFQUNUX0VMRU1F
TlRfVFlQRSwKKworICAgIC8vIEJ1aWx0LWluIHByb3BlcnRpZXMgdGhhdCBiZWxvbmcgb24gdGhl
IGVsZW1lbnQKKyAgICB0eXBlOiB0eXBlLAorICAgIGtleToga2V5LAorICAgIHJlZjogcmVmLAor
ICAgIHByb3BzOiBwcm9wcywKKworICAgIC8vIFJlY29yZCB0aGUgY29tcG9uZW50IHJlc3BvbnNp
YmxlIGZvciBjcmVhdGluZyB0aGlzIGVsZW1lbnQuCisgICAgX293bmVyOiBvd25lcgorICB9Owor
CisgIGlmICgiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicpIHsKKyAgICAvLyBUaGUgdmFs
aWRhdGlvbiBmbGFnIGlzIGN1cnJlbnRseSBtdXRhdGl2ZS4gV2UgcHV0IGl0IG9uCisgICAgLy8g
YW4gZXh0ZXJuYWwgYmFja2luZyBzdG9yZSBzbyB0aGF0IHdlIGNhbiBmcmVlemUgdGhlIHdob2xl
IG9iamVjdC4KKyAgICAvLyBUaGlzIGNhbiBiZSByZXBsYWNlZCB3aXRoIGEgV2Vha01hcCBvbmNl
IHRoZXkgYXJlIGltcGxlbWVudGVkIGluCisgICAgLy8gY29tbW9ubHkgdXNlZCBkZXZlbG9wbWVu
dCBlbnZpcm9ubWVudHMuCisgICAgZWxlbWVudC5fc3RvcmUgPSB7fTsKKworICAgIC8vIFRvIG1h
a2UgY29tcGFyaW5nIFJlYWN0RWxlbWVudHMgZWFzaWVyIGZvciB0ZXN0aW5nIHB1cnBvc2VzLCB3
ZSBtYWtlCisgICAgLy8gdGhlIHZhbGlkYXRpb24gZmxhZyBub24tZW51bWVyYWJsZSAod2hlcmUg
cG9zc2libGUsIHdoaWNoIHNob3VsZAorICAgIC8vIGluY2x1ZGUgZXZlcnkgZW52aXJvbm1lbnQg
d2UgcnVuIHRlc3RzIGluKSwgc28gdGhlIHRlc3QgZnJhbWV3b3JrCisgICAgLy8gaWdub3JlcyBp
dC4KKyAgICBpZiAoY2FuRGVmaW5lUHJvcGVydHkpIHsKKyAgICAgIE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShlbGVtZW50Ll9zdG9yZSwgJ3ZhbGlkYXRlZCcsIHsKKyAgICAgICAgY29uZmlndXJhYmxl
OiBmYWxzZSwKKyAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsCisgICAgICAgIHdyaXRhYmxlOiB0
cnVlLAorICAgICAgICB2YWx1ZTogZmFsc2UKKyAgICAgIH0pOworICAgICAgLy8gc2VsZiBhbmQg
c291cmNlIGFyZSBERVYgb25seSBwcm9wZXJ0aWVzLgorICAgICAgT2JqZWN0LmRlZmluZVByb3Bl
cnR5KGVsZW1lbnQsICdfc2VsZicsIHsKKyAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSwKKyAg
ICAgICAgZW51bWVyYWJsZTogZmFsc2UsCisgICAgICAgIHdyaXRhYmxlOiBmYWxzZSwKKyAgICAg
ICAgdmFsdWU6IHNlbGYKKyAgICAgIH0pOworICAgICAgLy8gVHdvIGVsZW1lbnRzIGNyZWF0ZWQg
aW4gdHdvIGRpZmZlcmVudCBwbGFjZXMgc2hvdWxkIGJlIGNvbnNpZGVyZWQKKyAgICAgIC8vIGVx
dWFsIGZvciB0ZXN0aW5nIHB1cnBvc2VzIGFuZCB0aGVyZWZvcmUgd2UgaGlkZSBpdCBmcm9tIGVu
dW1lcmF0aW9uLgorICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVsZW1lbnQsICdfc291cmNl
JywgeworICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlLAorICAgICAgICBlbnVtZXJhYmxlOiBm
YWxzZSwKKyAgICAgICAgd3JpdGFibGU6IGZhbHNlLAorICAgICAgICB2YWx1ZTogc291cmNlCisg
ICAgICB9KTsKKyAgICB9IGVsc2UgeworICAgICAgZWxlbWVudC5fc3RvcmUudmFsaWRhdGVkID0g
ZmFsc2U7CisgICAgICBlbGVtZW50Ll9zZWxmID0gc2VsZjsKKyAgICAgIGVsZW1lbnQuX3NvdXJj
ZSA9IHNvdXJjZTsKKyAgICB9CisgICAgaWYgKE9iamVjdC5mcmVlemUpIHsKKyAgICAgIE9iamVj
dC5mcmVlemUoZWxlbWVudC5wcm9wcyk7CisgICAgICBPYmplY3QuZnJlZXplKGVsZW1lbnQpOwor
ICAgIH0KKyAgfQorCisgIHJldHVybiBlbGVtZW50OworfTsKKworLyoqCisgKiBDcmVhdGUgYW5k
IHJldHVybiBhIG5ldyBSZWFjdEVsZW1lbnQgb2YgdGhlIGdpdmVuIHR5cGUuCisgKiBTZWUgaHR0
cHM6Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3QvZG9jcy90b3AtbGV2ZWwtYXBpLmh0bWwjcmVh
Y3QuY3JlYXRlZWxlbWVudAorICovCitSZWFjdEVsZW1lbnQuY3JlYXRlRWxlbWVudCA9IGZ1bmN0
aW9uICh0eXBlLCBjb25maWcsIGNoaWxkcmVuKSB7CisgIHZhciBwcm9wTmFtZTsKKworICAvLyBS
ZXNlcnZlZCBuYW1lcyBhcmUgZXh0cmFjdGVkCisgIHZhciBwcm9wcyA9IHt9OworCisgIHZhciBr
ZXkgPSBudWxsOworICB2YXIgcmVmID0gbnVsbDsKKyAgdmFyIHNlbGYgPSBudWxsOworICB2YXIg
c291cmNlID0gbnVsbDsKKworICBpZiAoY29uZmlnICE9IG51bGwpIHsKKyAgICBpZiAoaGFzVmFs
aWRSZWYoY29uZmlnKSkgeworICAgICAgcmVmID0gY29uZmlnLnJlZjsKKyAgICB9CisgICAgaWYg
KGhhc1ZhbGlkS2V5KGNvbmZpZykpIHsKKyAgICAgIGtleSA9ICcnICsgY29uZmlnLmtleTsKKyAg
ICB9CisKKyAgICBzZWxmID0gY29uZmlnLl9fc2VsZiA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGNv
bmZpZy5fX3NlbGY7CisgICAgc291cmNlID0gY29uZmlnLl9fc291cmNlID09PSB1bmRlZmluZWQg
PyBudWxsIDogY29uZmlnLl9fc291cmNlOworICAgIC8vIFJlbWFpbmluZyBwcm9wZXJ0aWVzIGFy
ZSBhZGRlZCB0byBhIG5ldyBwcm9wcyBvYmplY3QKKyAgICBmb3IgKHByb3BOYW1lIGluIGNvbmZp
ZykgeworICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCBwcm9wTmFtZSkgJiYg
IVJFU0VSVkVEX1BST1BTLmhhc093blByb3BlcnR5KHByb3BOYW1lKSkgeworICAgICAgICBwcm9w
c1twcm9wTmFtZV0gPSBjb25maWdbcHJvcE5hbWVdOworICAgICAgfQorICAgIH0KKyAgfQorCisg
IC8vIENoaWxkcmVuIGNhbiBiZSBtb3JlIHRoYW4gb25lIGFyZ3VtZW50LCBhbmQgdGhvc2UgYXJl
IHRyYW5zZmVycmVkIG9udG8KKyAgLy8gdGhlIG5ld2x5IGFsbG9jYXRlZCBwcm9wcyBvYmplY3Qu
CisgIHZhciBjaGlsZHJlbkxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGggLSAyOworICBpZiAoY2hp
bGRyZW5MZW5ndGggPT09IDEpIHsKKyAgICBwcm9wcy5jaGlsZHJlbiA9IGNoaWxkcmVuOworICB9
IGVsc2UgaWYgKGNoaWxkcmVuTGVuZ3RoID4gMSkgeworICAgIHZhciBjaGlsZEFycmF5ID0gQXJy
YXkoY2hpbGRyZW5MZW5ndGgpOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW5MZW5n
dGg7IGkrKykgeworICAgICAgY2hpbGRBcnJheVtpXSA9IGFyZ3VtZW50c1tpICsgMl07CisgICAg
fQorICAgIGlmICgiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicpIHsKKyAgICAgIGlmIChP
YmplY3QuZnJlZXplKSB7CisgICAgICAgIE9iamVjdC5mcmVlemUoY2hpbGRBcnJheSk7CisgICAg
ICB9CisgICAgfQorICAgIHByb3BzLmNoaWxkcmVuID0gY2hpbGRBcnJheTsKKyAgfQorCisgIC8v
IFJlc29sdmUgZGVmYXVsdCBwcm9wcworICBpZiAodHlwZSAmJiB0eXBlLmRlZmF1bHRQcm9wcykg
eworICAgIHZhciBkZWZhdWx0UHJvcHMgPSB0eXBlLmRlZmF1bHRQcm9wczsKKyAgICBmb3IgKHBy
b3BOYW1lIGluIGRlZmF1bHRQcm9wcykgeworICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PT0g
dW5kZWZpbmVkKSB7CisgICAgICAgIHByb3BzW3Byb3BOYW1lXSA9IGRlZmF1bHRQcm9wc1twcm9w
TmFtZV07CisgICAgICB9CisgICAgfQorICB9CisgIGlmICgiZGV2ZWxvcG1lbnQiICE9PSAncHJv
ZHVjdGlvbicpIHsKKyAgICBpZiAoa2V5IHx8IHJlZikgeworICAgICAgaWYgKHR5cGVvZiBwcm9w
cy4kJHR5cGVvZiA9PT0gJ3VuZGVmaW5lZCcgfHwgcHJvcHMuJCR0eXBlb2YgIT09IFJFQUNUX0VM
RU1FTlRfVFlQRSkgeworICAgICAgICB2YXIgZGlzcGxheU5hbWUgPSB0eXBlb2YgdHlwZSA9PT0g
J2Z1bmN0aW9uJyA/IHR5cGUuZGlzcGxheU5hbWUgfHwgdHlwZS5uYW1lIHx8ICdVbmtub3duJyA6
IHR5cGU7CisgICAgICAgIGlmIChrZXkpIHsKKyAgICAgICAgICBkZWZpbmVLZXlQcm9wV2Fybmlu
Z0dldHRlcihwcm9wcywgZGlzcGxheU5hbWUpOworICAgICAgICB9CisgICAgICAgIGlmIChyZWYp
IHsKKyAgICAgICAgICBkZWZpbmVSZWZQcm9wV2FybmluZ0dldHRlcihwcm9wcywgZGlzcGxheU5h
bWUpOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisgIHJldHVybiBSZWFjdEVsZW1l
bnQodHlwZSwga2V5LCByZWYsIHNlbGYsIHNvdXJjZSwgUmVhY3RDdXJyZW50T3duZXIuY3VycmVu
dCwgcHJvcHMpOworfTsKKworLyoqCisgKiBSZXR1cm4gYSBmdW5jdGlvbiB0aGF0IHByb2R1Y2Vz
IFJlYWN0RWxlbWVudHMgb2YgYSBnaXZlbiB0eXBlLgorICogU2VlIGh0dHBzOi8vZmFjZWJvb2su
Z2l0aHViLmlvL3JlYWN0L2RvY3MvdG9wLWxldmVsLWFwaS5odG1sI3JlYWN0LmNyZWF0ZWZhY3Rv
cnkKKyAqLworUmVhY3RFbGVtZW50LmNyZWF0ZUZhY3RvcnkgPSBmdW5jdGlvbiAodHlwZSkgewor
ICB2YXIgZmFjdG9yeSA9IFJlYWN0RWxlbWVudC5jcmVhdGVFbGVtZW50LmJpbmQobnVsbCwgdHlw
ZSk7CisgIC8vIEV4cG9zZSB0aGUgdHlwZSBvbiB0aGUgZmFjdG9yeSBhbmQgdGhlIHByb3RvdHlw
ZSBzbyB0aGF0IGl0IGNhbiBiZQorICAvLyBlYXNpbHkgYWNjZXNzZWQgb24gZWxlbWVudHMuIEUu
Zy4gYDxGb28gLz4udHlwZSA9PT0gRm9vYC4KKyAgLy8gVGhpcyBzaG91bGQgbm90IGJlIG5hbWVk
IGBjb25zdHJ1Y3RvcmAgc2luY2UgdGhpcyBtYXkgbm90IGJlIHRoZSBmdW5jdGlvbgorICAvLyB0
aGF0IGNyZWF0ZWQgdGhlIGVsZW1lbnQsIGFuZCBpdCBtYXkgbm90IGV2ZW4gYmUgYSBjb25zdHJ1
Y3Rvci4KKyAgLy8gTGVnYWN5IGhvb2sgVE9ETzogV2FybiBpZiB0aGlzIGlzIGFjY2Vzc2VkCisg
IGZhY3RvcnkudHlwZSA9IHR5cGU7CisgIHJldHVybiBmYWN0b3J5OworfTsKKworUmVhY3RFbGVt
ZW50LmNsb25lQW5kUmVwbGFjZUtleSA9IGZ1bmN0aW9uIChvbGRFbGVtZW50LCBuZXdLZXkpIHsK
KyAgdmFyIG5ld0VsZW1lbnQgPSBSZWFjdEVsZW1lbnQob2xkRWxlbWVudC50eXBlLCBuZXdLZXks
IG9sZEVsZW1lbnQucmVmLCBvbGRFbGVtZW50Ll9zZWxmLCBvbGRFbGVtZW50Ll9zb3VyY2UsIG9s
ZEVsZW1lbnQuX293bmVyLCBvbGRFbGVtZW50LnByb3BzKTsKKworICByZXR1cm4gbmV3RWxlbWVu
dDsKK307CisKKy8qKgorICogQ2xvbmUgYW5kIHJldHVybiBhIG5ldyBSZWFjdEVsZW1lbnQgdXNp
bmcgZWxlbWVudCBhcyB0aGUgc3RhcnRpbmcgcG9pbnQuCisgKiBTZWUgaHR0cHM6Ly9mYWNlYm9v
ay5naXRodWIuaW8vcmVhY3QvZG9jcy90b3AtbGV2ZWwtYXBpLmh0bWwjcmVhY3QuY2xvbmVlbGVt
ZW50CisgKi8KK1JlYWN0RWxlbWVudC5jbG9uZUVsZW1lbnQgPSBmdW5jdGlvbiAoZWxlbWVudCwg
Y29uZmlnLCBjaGlsZHJlbikgeworICB2YXIgcHJvcE5hbWU7CisKKyAgLy8gT3JpZ2luYWwgcHJv
cHMgYXJlIGNvcGllZAorICB2YXIgcHJvcHMgPSBfYXNzaWduKHt9LCBlbGVtZW50LnByb3BzKTsK
KworICAvLyBSZXNlcnZlZCBuYW1lcyBhcmUgZXh0cmFjdGVkCisgIHZhciBrZXkgPSBlbGVtZW50
LmtleTsKKyAgdmFyIHJlZiA9IGVsZW1lbnQucmVmOworICAvLyBTZWxmIGlzIHByZXNlcnZlZCBz
aW5jZSB0aGUgb3duZXIgaXMgcHJlc2VydmVkLgorICB2YXIgc2VsZiA9IGVsZW1lbnQuX3NlbGY7
CisgIC8vIFNvdXJjZSBpcyBwcmVzZXJ2ZWQgc2luY2UgY2xvbmVFbGVtZW50IGlzIHVubGlrZWx5
IHRvIGJlIHRhcmdldGVkIGJ5IGEKKyAgLy8gdHJhbnNwaWxlciwgYW5kIHRoZSBvcmlnaW5hbCBz
b3VyY2UgaXMgcHJvYmFibHkgYSBiZXR0ZXIgaW5kaWNhdG9yIG9mIHRoZQorICAvLyB0cnVlIG93
bmVyLgorICB2YXIgc291cmNlID0gZWxlbWVudC5fc291cmNlOworCisgIC8vIE93bmVyIHdpbGwg
YmUgcHJlc2VydmVkLCB1bmxlc3MgcmVmIGlzIG92ZXJyaWRkZW4KKyAgdmFyIG93bmVyID0gZWxl
bWVudC5fb3duZXI7CisKKyAgaWYgKGNvbmZpZyAhPSBudWxsKSB7CisgICAgaWYgKGhhc1ZhbGlk
UmVmKGNvbmZpZykpIHsKKyAgICAgIC8vIFNpbGVudGx5IHN0ZWFsIHRoZSByZWYgZnJvbSB0aGUg
cGFyZW50LgorICAgICAgcmVmID0gY29uZmlnLnJlZjsKKyAgICAgIG93bmVyID0gUmVhY3RDdXJy
ZW50T3duZXIuY3VycmVudDsKKyAgICB9CisgICAgaWYgKGhhc1ZhbGlkS2V5KGNvbmZpZykpIHsK
KyAgICAgIGtleSA9ICcnICsgY29uZmlnLmtleTsKKyAgICB9CisKKyAgICAvLyBSZW1haW5pbmcg
cHJvcGVydGllcyBvdmVycmlkZSBleGlzdGluZyBwcm9wcworICAgIHZhciBkZWZhdWx0UHJvcHM7
CisgICAgaWYgKGVsZW1lbnQudHlwZSAmJiBlbGVtZW50LnR5cGUuZGVmYXVsdFByb3BzKSB7Cisg
ICAgICBkZWZhdWx0UHJvcHMgPSBlbGVtZW50LnR5cGUuZGVmYXVsdFByb3BzOworICAgIH0KKyAg
ICBmb3IgKHByb3BOYW1lIGluIGNvbmZpZykgeworICAgICAgaWYgKGhhc093blByb3BlcnR5LmNh
bGwoY29uZmlnLCBwcm9wTmFtZSkgJiYgIVJFU0VSVkVEX1BST1BTLmhhc093blByb3BlcnR5KHBy
b3BOYW1lKSkgeworICAgICAgICBpZiAoY29uZmlnW3Byb3BOYW1lXSA9PT0gdW5kZWZpbmVkICYm
IGRlZmF1bHRQcm9wcyAhPT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgLy8gUmVzb2x2ZSBkZWZh
dWx0IHByb3BzCisgICAgICAgICAgcHJvcHNbcHJvcE5hbWVdID0gZGVmYXVsdFByb3BzW3Byb3BO
YW1lXTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBwcm9wc1twcm9wTmFtZV0gPSBjb25m
aWdbcHJvcE5hbWVdOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisKKyAgLy8gQ2hp
bGRyZW4gY2FuIGJlIG1vcmUgdGhhbiBvbmUgYXJndW1lbnQsIGFuZCB0aG9zZSBhcmUgdHJhbnNm
ZXJyZWQgb250bworICAvLyB0aGUgbmV3bHkgYWxsb2NhdGVkIHByb3BzIG9iamVjdC4KKyAgdmFy
IGNoaWxkcmVuTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCAtIDI7CisgIGlmIChjaGlsZHJlbkxl
bmd0aCA9PT0gMSkgeworICAgIHByb3BzLmNoaWxkcmVuID0gY2hpbGRyZW47CisgIH0gZWxzZSBp
ZiAoY2hpbGRyZW5MZW5ndGggPiAxKSB7CisgICAgdmFyIGNoaWxkQXJyYXkgPSBBcnJheShjaGls
ZHJlbkxlbmd0aCk7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbkxlbmd0aDsgaSsr
KSB7CisgICAgICBjaGlsZEFycmF5W2ldID0gYXJndW1lbnRzW2kgKyAyXTsKKyAgICB9CisgICAg
cHJvcHMuY2hpbGRyZW4gPSBjaGlsZEFycmF5OworICB9CisKKyAgcmV0dXJuIFJlYWN0RWxlbWVu
dChlbGVtZW50LnR5cGUsIGtleSwgcmVmLCBzZWxmLCBzb3VyY2UsIG93bmVyLCBwcm9wcyk7Cit9
OworCisvKioKKyAqIFZlcmlmaWVzIHRoZSBvYmplY3QgaXMgYSBSZWFjdEVsZW1lbnQuCisgKiBT
ZWUgaHR0cHM6Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3QvZG9jcy90b3AtbGV2ZWwtYXBpLmh0
bWwjcmVhY3QuaXN2YWxpZGVsZW1lbnQKKyAqIEBwYXJhbSB7P29iamVjdH0gb2JqZWN0CisgKiBA
cmV0dXJuIHtib29sZWFufSBUcnVlIGlmIGBvYmplY3RgIGlzIGEgdmFsaWQgY29tcG9uZW50Lgor
ICogQGZpbmFsCisgKi8KK1JlYWN0RWxlbWVudC5pc1ZhbGlkRWxlbWVudCA9IGZ1bmN0aW9uIChv
YmplY3QpIHsKKyAgcmV0dXJuIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmIG9iamVjdCAh
PT0gbnVsbCAmJiBvYmplY3QuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRTsKK307CisK
K21vZHVsZS5leHBvcnRzID0gUmVhY3RFbGVtZW50OworfSx7IjExIjoxMSwiMjAiOjIwLCIzMCI6
MzAsIjMxIjozMSwiOCI6OH1dLDExOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsK
Ky8qKgorICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4KKyAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRl
ciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlCisgKiBMSUNFTlNFIGZpbGUgaW4g
dGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3Jh
bnQKKyAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUg
aW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorICoKKyAqIAorICovCisKKyd1c2Ugc3RyaWN0JzsKKwor
Ly8gVGhlIFN5bWJvbCB1c2VkIHRvIHRhZyB0aGUgUmVhY3RFbGVtZW50IHR5cGUuIElmIHRoZXJl
IGlzIG5vIG5hdGl2ZSBTeW1ib2wKKy8vIG5vciBwb2x5ZmlsbCwgdGhlbiBhIHBsYWluIG51bWJl
ciBpcyB1c2VkIGZvciBwZXJmb3JtYW5jZS4KKwordmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9IHR5
cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sWydmb3InXSAmJiBTeW1ib2xbJ2Zv
ciddKCdyZWFjdC5lbGVtZW50JykgfHwgMHhlYWM3OworCittb2R1bGUuZXhwb3J0cyA9IFJFQUNU
X0VMRU1FTlRfVFlQRTsKK30se31dLDEyOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRz
KXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4KKyAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1
bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlCisgKiBMSUNFTlNFIGZpbGUg
aW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwg
Z3JhbnQKKyAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZp
bGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorICoKKyAqLworCisvKioKKyAqIFJlYWN0RWxlbWVu
dFZhbGlkYXRvciBwcm92aWRlcyBhIHdyYXBwZXIgYXJvdW5kIGEgZWxlbWVudCBmYWN0b3J5Cisg
KiB3aGljaCB2YWxpZGF0ZXMgdGhlIHByb3BzIHBhc3NlZCB0byB0aGUgZWxlbWVudC4gVGhpcyBp
cyBpbnRlbmRlZCB0byBiZQorICogdXNlZCBvbmx5IGluIERFViBhbmQgY291bGQgYmUgcmVwbGFj
ZWQgYnkgYSBzdGF0aWMgdHlwZSBjaGVja2VyIGZvciBsYW5ndWFnZXMKKyAqIHRoYXQgc3VwcG9y
dCBpdC4KKyAqLworCisndXNlIHN0cmljdCc7CisKK3ZhciBSZWFjdEN1cnJlbnRPd25lciA9IF9k
ZXJlcV8oOCk7Cit2YXIgUmVhY3RDb21wb25lbnRUcmVlSG9vayA9IF9kZXJlcV8oNyk7Cit2YXIg
UmVhY3RFbGVtZW50ID0gX2RlcmVxXygxMCk7CisKK3ZhciBjaGVja1JlYWN0VHlwZVNwZWMgPSBf
ZGVyZXFfKDIxKTsKKwordmFyIGNhbkRlZmluZVByb3BlcnR5ID0gX2RlcmVxXygyMCk7Cit2YXIg
Z2V0SXRlcmF0b3JGbiA9IF9kZXJlcV8oMjIpOwordmFyIHdhcm5pbmcgPSBfZGVyZXFfKDMwKTsK
KworZnVuY3Rpb24gZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKCkgeworICBpZiAoUmVhY3RD
dXJyZW50T3duZXIuY3VycmVudCkgeworICAgIHZhciBuYW1lID0gUmVhY3RDdXJyZW50T3duZXIu
Y3VycmVudC5nZXROYW1lKCk7CisgICAgaWYgKG5hbWUpIHsKKyAgICAgIHJldHVybiAnIENoZWNr
IHRoZSByZW5kZXIgbWV0aG9kIG9mIGAnICsgbmFtZSArICdgLic7CisgICAgfQorICB9CisgIHJl
dHVybiAnJzsKK30KKworZnVuY3Rpb24gZ2V0U291cmNlSW5mb0Vycm9yQWRkZW5kdW0oZWxlbWVu
dFByb3BzKSB7CisgIGlmIChlbGVtZW50UHJvcHMgIT09IG51bGwgJiYgZWxlbWVudFByb3BzICE9
PSB1bmRlZmluZWQgJiYgZWxlbWVudFByb3BzLl9fc291cmNlICE9PSB1bmRlZmluZWQpIHsKKyAg
ICB2YXIgc291cmNlID0gZWxlbWVudFByb3BzLl9fc291cmNlOworICAgIHZhciBmaWxlTmFtZSA9
IHNvdXJjZS5maWxlTmFtZS5yZXBsYWNlKC9eLipbXFxcL10vLCAnJyk7CisgICAgdmFyIGxpbmVO
dW1iZXIgPSBzb3VyY2UubGluZU51bWJlcjsKKyAgICByZXR1cm4gJyBDaGVjayB5b3VyIGNvZGUg
YXQgJyArIGZpbGVOYW1lICsgJzonICsgbGluZU51bWJlciArICcuJzsKKyAgfQorICByZXR1cm4g
Jyc7Cit9CisKKy8qKgorICogV2FybiBpZiB0aGVyZSdzIG5vIGtleSBleHBsaWNpdGx5IHNldCBv
biBkeW5hbWljIGFycmF5cyBvZiBjaGlsZHJlbiBvcgorICogb2JqZWN0IGtleXMgYXJlIG5vdCB2
YWxpZC4gVGhpcyBhbGxvd3MgdXMgdG8ga2VlcCB0cmFjayBvZiBjaGlsZHJlbiBiZXR3ZWVuCisg
KiB1cGRhdGVzLgorICovCit2YXIgb3duZXJIYXNLZXlVc2VXYXJuaW5nID0ge307CisKK2Z1bmN0
aW9uIGdldEN1cnJlbnRDb21wb25lbnRFcnJvckluZm8ocGFyZW50VHlwZSkgeworICB2YXIgaW5m
byA9IGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSgpOworCisgIGlmICghaW5mbykgeworICAg
IHZhciBwYXJlbnROYW1lID0gdHlwZW9mIHBhcmVudFR5cGUgPT09ICdzdHJpbmcnID8gcGFyZW50
VHlwZSA6IHBhcmVudFR5cGUuZGlzcGxheU5hbWUgfHwgcGFyZW50VHlwZS5uYW1lOworICAgIGlm
IChwYXJlbnROYW1lKSB7CisgICAgICBpbmZvID0gJyBDaGVjayB0aGUgdG9wLWxldmVsIHJlbmRl
ciBjYWxsIHVzaW5nIDwnICsgcGFyZW50TmFtZSArICc+Lic7CisgICAgfQorICB9CisgIHJldHVy
biBpbmZvOworfQorCisvKioKKyAqIFdhcm4gaWYgdGhlIGVsZW1lbnQgZG9lc24ndCBoYXZlIGFu
IGV4cGxpY2l0IGtleSBhc3NpZ25lZCB0byBpdC4KKyAqIFRoaXMgZWxlbWVudCBpcyBpbiBhbiBh
cnJheS4gVGhlIGFycmF5IGNvdWxkIGdyb3cgYW5kIHNocmluayBvciBiZQorICogcmVvcmRlcmVk
LiBBbGwgY2hpbGRyZW4gdGhhdCBoYXZlbid0IGFscmVhZHkgYmVlbiB2YWxpZGF0ZWQgYXJlIHJl
cXVpcmVkIHRvCisgKiBoYXZlIGEgImtleSIgcHJvcGVydHkgYXNzaWduZWQgdG8gaXQuIEVycm9y
IHN0YXR1c2VzIGFyZSBjYWNoZWQgc28gYSB3YXJuaW5nCisgKiB3aWxsIG9ubHkgYmUgc2hvd24g
b25jZS4KKyAqCisgKiBAaW50ZXJuYWwKKyAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBlbGVtZW50
IEVsZW1lbnQgdGhhdCByZXF1aXJlcyBhIGtleS4KKyAqIEBwYXJhbSB7Kn0gcGFyZW50VHlwZSBl
bGVtZW50J3MgcGFyZW50J3MgdHlwZS4KKyAqLworZnVuY3Rpb24gdmFsaWRhdGVFeHBsaWNpdEtl
eShlbGVtZW50LCBwYXJlbnRUeXBlKSB7CisgIGlmICghZWxlbWVudC5fc3RvcmUgfHwgZWxlbWVu
dC5fc3RvcmUudmFsaWRhdGVkIHx8IGVsZW1lbnQua2V5ICE9IG51bGwpIHsKKyAgICByZXR1cm47
CisgIH0KKyAgZWxlbWVudC5fc3RvcmUudmFsaWRhdGVkID0gdHJ1ZTsKKworICB2YXIgbWVtb2l6
ZXIgPSBvd25lckhhc0tleVVzZVdhcm5pbmcudW5pcXVlS2V5IHx8IChvd25lckhhc0tleVVzZVdh
cm5pbmcudW5pcXVlS2V5ID0ge30pOworCisgIHZhciBjdXJyZW50Q29tcG9uZW50RXJyb3JJbmZv
ID0gZ2V0Q3VycmVudENvbXBvbmVudEVycm9ySW5mbyhwYXJlbnRUeXBlKTsKKyAgaWYgKG1lbW9p
emVyW2N1cnJlbnRDb21wb25lbnRFcnJvckluZm9dKSB7CisgICAgcmV0dXJuOworICB9CisgIG1l
bW9pemVyW2N1cnJlbnRDb21wb25lbnRFcnJvckluZm9dID0gdHJ1ZTsKKworICAvLyBVc3VhbGx5
IHRoZSBjdXJyZW50IG93bmVyIGlzIHRoZSBvZmZlbmRlciwgYnV0IGlmIGl0IGFjY2VwdHMgY2hp
bGRyZW4gYXMgYQorICAvLyBwcm9wZXJ0eSwgaXQgbWF5IGJlIHRoZSBjcmVhdG9yIG9mIHRoZSBj
aGlsZCB0aGF0J3MgcmVzcG9uc2libGUgZm9yCisgIC8vIGFzc2lnbmluZyBpdCBhIGtleS4KKyAg
dmFyIGNoaWxkT3duZXIgPSAnJzsKKyAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC5fb3duZXIgJiYg
ZWxlbWVudC5fb3duZXIgIT09IFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQpIHsKKyAgICAvLyBH
aXZlIHRoZSBjb21wb25lbnQgdGhhdCBvcmlnaW5hbGx5IGNyZWF0ZWQgdGhpcyBjaGlsZC4KKyAg
ICBjaGlsZE93bmVyID0gJyBJdCB3YXMgcGFzc2VkIGEgY2hpbGQgZnJvbSAnICsgZWxlbWVudC5f
b3duZXIuZ2V0TmFtZSgpICsgJy4nOworICB9CisKKyAgImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1
Y3Rpb24nID8gd2FybmluZyhmYWxzZSwgJ0VhY2ggY2hpbGQgaW4gYW4gYXJyYXkgb3IgaXRlcmF0
b3Igc2hvdWxkIGhhdmUgYSB1bmlxdWUgImtleSIgcHJvcC4nICsgJyVzJXMgU2VlIGh0dHBzOi8v
ZmIubWUvcmVhY3Qtd2FybmluZy1rZXlzIGZvciBtb3JlIGluZm9ybWF0aW9uLiVzJywgY3VycmVu
dENvbXBvbmVudEVycm9ySW5mbywgY2hpbGRPd25lciwgUmVhY3RDb21wb25lbnRUcmVlSG9vay5n
ZXRDdXJyZW50U3RhY2tBZGRlbmR1bShlbGVtZW50KSkgOiB2b2lkIDA7Cit9CisKKy8qKgorICog
RW5zdXJlIHRoYXQgZXZlcnkgZWxlbWVudCBlaXRoZXIgaXMgcGFzc2VkIGluIGEgc3RhdGljIGxv
Y2F0aW9uLCBpbiBhbgorICogYXJyYXkgd2l0aCBhbiBleHBsaWNpdCBrZXlzIHByb3BlcnR5IGRl
ZmluZWQsIG9yIGluIGFuIG9iamVjdCBsaXRlcmFsCisgKiB3aXRoIHZhbGlkIGtleSBwcm9wZXJ0
eS4KKyAqCisgKiBAaW50ZXJuYWwKKyAqIEBwYXJhbSB7UmVhY3ROb2RlfSBub2RlIFN0YXRpY2Fs
bHkgcGFzc2VkIGNoaWxkIG9mIGFueSB0eXBlLgorICogQHBhcmFtIHsqfSBwYXJlbnRUeXBlIG5v
ZGUncyBwYXJlbnQncyB0eXBlLgorICovCitmdW5jdGlvbiB2YWxpZGF0ZUNoaWxkS2V5cyhub2Rl
LCBwYXJlbnRUeXBlKSB7CisgIGlmICh0eXBlb2Ygbm9kZSAhPT0gJ29iamVjdCcpIHsKKyAgICBy
ZXR1cm47CisgIH0KKyAgaWYgKEFycmF5LmlzQXJyYXkobm9kZSkpIHsKKyAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IG5vZGUubGVuZ3RoOyBpKyspIHsKKyAgICAgIHZhciBjaGlsZCA9IG5vZGVbaV07
CisgICAgICBpZiAoUmVhY3RFbGVtZW50LmlzVmFsaWRFbGVtZW50KGNoaWxkKSkgeworICAgICAg
ICB2YWxpZGF0ZUV4cGxpY2l0S2V5KGNoaWxkLCBwYXJlbnRUeXBlKTsKKyAgICAgIH0KKyAgICB9
CisgIH0gZWxzZSBpZiAoUmVhY3RFbGVtZW50LmlzVmFsaWRFbGVtZW50KG5vZGUpKSB7CisgICAg
Ly8gVGhpcyBlbGVtZW50IHdhcyBwYXNzZWQgaW4gYSB2YWxpZCBsb2NhdGlvbi4KKyAgICBpZiAo
bm9kZS5fc3RvcmUpIHsKKyAgICAgIG5vZGUuX3N0b3JlLnZhbGlkYXRlZCA9IHRydWU7CisgICAg
fQorICB9IGVsc2UgaWYgKG5vZGUpIHsKKyAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9y
Rm4obm9kZSk7CisgICAgLy8gRW50cnkgaXRlcmF0b3JzIHByb3ZpZGUgaW1wbGljaXQga2V5cy4K
KyAgICBpZiAoaXRlcmF0b3JGbikgeworICAgICAgaWYgKGl0ZXJhdG9yRm4gIT09IG5vZGUuZW50
cmllcykgeworICAgICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwobm9kZSk7Cisg
ICAgICAgIHZhciBzdGVwOworICAgICAgICB3aGlsZSAoIShzdGVwID0gaXRlcmF0b3IubmV4dCgp
KS5kb25lKSB7CisgICAgICAgICAgaWYgKFJlYWN0RWxlbWVudC5pc1ZhbGlkRWxlbWVudChzdGVw
LnZhbHVlKSkgeworICAgICAgICAgICAgdmFsaWRhdGVFeHBsaWNpdEtleShzdGVwLnZhbHVlLCBw
YXJlbnRUeXBlKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0K
K30KKworLyoqCisgKiBHaXZlbiBhbiBlbGVtZW50LCB2YWxpZGF0ZSB0aGF0IGl0cyBwcm9wcyBm
b2xsb3cgdGhlIHByb3BUeXBlcyBkZWZpbml0aW9uLAorICogcHJvdmlkZWQgYnkgdGhlIHR5cGUu
CisgKgorICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IGVsZW1lbnQKKyAqLworZnVuY3Rpb24gdmFs
aWRhdGVQcm9wVHlwZXMoZWxlbWVudCkgeworICB2YXIgY29tcG9uZW50Q2xhc3MgPSBlbGVtZW50
LnR5cGU7CisgIGlmICh0eXBlb2YgY29tcG9uZW50Q2xhc3MgIT09ICdmdW5jdGlvbicpIHsKKyAg
ICByZXR1cm47CisgIH0KKyAgdmFyIG5hbWUgPSBjb21wb25lbnRDbGFzcy5kaXNwbGF5TmFtZSB8
fCBjb21wb25lbnRDbGFzcy5uYW1lOworICBpZiAoY29tcG9uZW50Q2xhc3MucHJvcFR5cGVzKSB7
CisgICAgY2hlY2tSZWFjdFR5cGVTcGVjKGNvbXBvbmVudENsYXNzLnByb3BUeXBlcywgZWxlbWVu
dC5wcm9wcywgJ3Byb3AnLCBuYW1lLCBlbGVtZW50LCBudWxsKTsKKyAgfQorICBpZiAodHlwZW9m
IGNvbXBvbmVudENsYXNzLmdldERlZmF1bHRQcm9wcyA9PT0gJ2Z1bmN0aW9uJykgeworICAgICJk
ZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoY29tcG9uZW50Q2xhc3MuZ2V0
RGVmYXVsdFByb3BzLmlzUmVhY3RDbGFzc0FwcHJvdmVkLCAnZ2V0RGVmYXVsdFByb3BzIGlzIG9u
bHkgdXNlZCBvbiBjbGFzc2ljIFJlYWN0LmNyZWF0ZUNsYXNzICcgKyAnZGVmaW5pdGlvbnMuIFVz
ZSBhIHN0YXRpYyBwcm9wZXJ0eSBuYW1lZCBgZGVmYXVsdFByb3BzYCBpbnN0ZWFkLicpIDogdm9p
ZCAwOworICB9Cit9CisKK3ZhciBSZWFjdEVsZW1lbnRWYWxpZGF0b3IgPSB7CisKKyAgY3JlYXRl
RWxlbWVudDogZnVuY3Rpb24gKHR5cGUsIHByb3BzLCBjaGlsZHJlbikgeworICAgIHZhciB2YWxp
ZFR5cGUgPSB0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHR5cGUgPT09ICdmdW5j
dGlvbic7CisgICAgLy8gV2Ugd2FybiBpbiB0aGlzIGNhc2UgYnV0IGRvbid0IHRocm93LiBXZSBl
eHBlY3QgdGhlIGVsZW1lbnQgY3JlYXRpb24gdG8KKyAgICAvLyBzdWNjZWVkIGFuZCB0aGVyZSB3
aWxsIGxpa2VseSBiZSBlcnJvcnMgaW4gcmVuZGVyLgorICAgIGlmICghdmFsaWRUeXBlKSB7Cisg
ICAgICBpZiAodHlwZW9mIHR5cGUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHR5cGUgIT09ICdz
dHJpbmcnKSB7CisgICAgICAgIHZhciBpbmZvID0gJyc7CisgICAgICAgIGlmICh0eXBlID09PSB1
bmRlZmluZWQgfHwgdHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmIHR5cGUgIT09IG51bGwgJiYg
T2JqZWN0LmtleXModHlwZSkubGVuZ3RoID09PSAwKSB7CisgICAgICAgICAgaW5mbyArPSAnIFlv
dSBsaWtlbHkgZm9yZ290IHRvIGV4cG9ydCB5b3VyIGNvbXBvbmVudCBmcm9tIHRoZSBmaWxlICcg
KyAnaXRcJ3MgZGVmaW5lZCBpbi4nOworICAgICAgICB9CisKKyAgICAgICAgdmFyIHNvdXJjZUlu
Zm8gPSBnZXRTb3VyY2VJbmZvRXJyb3JBZGRlbmR1bShwcm9wcyk7CisgICAgICAgIGlmIChzb3Vy
Y2VJbmZvKSB7CisgICAgICAgICAgaW5mbyArPSBzb3VyY2VJbmZvOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgIGluZm8gKz0gZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKCk7CisgICAg
ICAgIH0KKworICAgICAgICBpbmZvICs9IFJlYWN0Q29tcG9uZW50VHJlZUhvb2suZ2V0Q3VycmVu
dFN0YWNrQWRkZW5kdW0oKTsKKworICAgICAgICAiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlv
bicgPyB3YXJuaW5nKGZhbHNlLCAnUmVhY3QuY3JlYXRlRWxlbWVudDogdHlwZSBpcyBpbnZhbGlk
IC0tIGV4cGVjdGVkIGEgc3RyaW5nIChmb3IgJyArICdidWlsdC1pbiBjb21wb25lbnRzKSBvciBh
IGNsYXNzL2Z1bmN0aW9uIChmb3IgY29tcG9zaXRlICcgKyAnY29tcG9uZW50cykgYnV0IGdvdDog
JXMuJXMnLCB0eXBlID09IG51bGwgPyB0eXBlIDogdHlwZW9mIHR5cGUsIGluZm8pIDogdm9pZCAw
OworICAgICAgfQorICAgIH0KKworICAgIHZhciBlbGVtZW50ID0gUmVhY3RFbGVtZW50LmNyZWF0
ZUVsZW1lbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKworICAgIC8vIFRoZSByZXN1bHQgY2Fu
IGJlIG51bGxpc2ggaWYgYSBtb2NrIG9yIGEgY3VzdG9tIGZ1bmN0aW9uIGlzIHVzZWQuCisgICAg
Ly8gVE9ETzogRHJvcCB0aGlzIHdoZW4gdGhlc2UgYXJlIG5vIGxvbmdlciBhbGxvd2VkIGFzIHRo
ZSB0eXBlIGFyZ3VtZW50LgorICAgIGlmIChlbGVtZW50ID09IG51bGwpIHsKKyAgICAgIHJldHVy
biBlbGVtZW50OworICAgIH0KKworICAgIC8vIFNraXAga2V5IHdhcm5pbmcgaWYgdGhlIHR5cGUg
aXNuJ3QgdmFsaWQgc2luY2Ugb3VyIGtleSB2YWxpZGF0aW9uIGxvZ2ljCisgICAgLy8gZG9lc24n
dCBleHBlY3QgYSBub24tc3RyaW5nL2Z1bmN0aW9uIHR5cGUgYW5kIGNhbiB0aHJvdyBjb25mdXNp
bmcgZXJyb3JzLgorICAgIC8vIFdlIGRvbid0IHdhbnQgZXhjZXB0aW9uIGJlaGF2aW9yIHRvIGRp
ZmZlciBiZXR3ZWVuIGRldiBhbmQgcHJvZC4KKyAgICAvLyAoUmVuZGVyaW5nIHdpbGwgdGhyb3cg
d2l0aCBhIGhlbHBmdWwgbWVzc2FnZSBhbmQgYXMgc29vbiBhcyB0aGUgdHlwZSBpcworICAgIC8v
IGZpeGVkLCB0aGUga2V5IHdhcm5pbmdzIHdpbGwgYXBwZWFyLikKKyAgICBpZiAodmFsaWRUeXBl
KSB7CisgICAgICBmb3IgKHZhciBpID0gMjsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgewor
ICAgICAgICB2YWxpZGF0ZUNoaWxkS2V5cyhhcmd1bWVudHNbaV0sIHR5cGUpOworICAgICAgfQor
ICAgIH0KKworICAgIHZhbGlkYXRlUHJvcFR5cGVzKGVsZW1lbnQpOworCisgICAgcmV0dXJuIGVs
ZW1lbnQ7CisgIH0sCisKKyAgY3JlYXRlRmFjdG9yeTogZnVuY3Rpb24gKHR5cGUpIHsKKyAgICB2
YXIgdmFsaWRhdGVkRmFjdG9yeSA9IFJlYWN0RWxlbWVudFZhbGlkYXRvci5jcmVhdGVFbGVtZW50
LmJpbmQobnVsbCwgdHlwZSk7CisgICAgLy8gTGVnYWN5IGhvb2sgVE9ETzogV2FybiBpZiB0aGlz
IGlzIGFjY2Vzc2VkCisgICAgdmFsaWRhdGVkRmFjdG9yeS50eXBlID0gdHlwZTsKKworICAgIGlm
ICgiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicpIHsKKyAgICAgIGlmIChjYW5EZWZpbmVQ
cm9wZXJ0eSkgeworICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodmFsaWRhdGVkRmFjdG9y
eSwgJ3R5cGUnLCB7CisgICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsCisgICAgICAgICAgZ2V0
OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlv
bicgPyB3YXJuaW5nKGZhbHNlLCAnRmFjdG9yeS50eXBlIGlzIGRlcHJlY2F0ZWQuIEFjY2VzcyB0
aGUgY2xhc3MgZGlyZWN0bHkgJyArICdiZWZvcmUgcGFzc2luZyBpdCB0byBjcmVhdGVGYWN0b3J5
LicpIDogdm9pZCAwOworICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICd0
eXBlJywgeworICAgICAgICAgICAgICB2YWx1ZTogdHlwZQorICAgICAgICAgICAgfSk7CisgICAg
ICAgICAgICByZXR1cm4gdHlwZTsKKyAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgfQor
ICAgIH0KKworICAgIHJldHVybiB2YWxpZGF0ZWRGYWN0b3J5OworICB9LAorCisgIGNsb25lRWxl
bWVudDogZnVuY3Rpb24gKGVsZW1lbnQsIHByb3BzLCBjaGlsZHJlbikgeworICAgIHZhciBuZXdF
bGVtZW50ID0gUmVhY3RFbGVtZW50LmNsb25lRWxlbWVudC5hcHBseSh0aGlzLCBhcmd1bWVudHMp
OworICAgIGZvciAodmFyIGkgPSAyOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7CisgICAg
ICB2YWxpZGF0ZUNoaWxkS2V5cyhhcmd1bWVudHNbaV0sIG5ld0VsZW1lbnQudHlwZSk7CisgICAg
fQorICAgIHZhbGlkYXRlUHJvcFR5cGVzKG5ld0VsZW1lbnQpOworICAgIHJldHVybiBuZXdFbGVt
ZW50OworICB9CisKK307CisKK21vZHVsZS5leHBvcnRzID0gUmVhY3RFbGVtZW50VmFsaWRhdG9y
OworfSx7IjEwIjoxMCwiMjAiOjIwLCIyMSI6MjEsIjIyIjoyMiwiMzAiOjMwLCI3Ijo3LCI4Ijo4
fV0sMTM6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmln
aHQgMjAxNS1wcmVzZW50LCBGYWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUg
bGljZW5zZSBmb3VuZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rv
cnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAorICogb2YgcGF0ZW50
IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJl
Y3RvcnkuCisgKgorICovCisKKyd1c2Ugc3RyaWN0JzsKKwordmFyIHdhcm5pbmcgPSBfZGVyZXFf
KDMwKTsKKworZnVuY3Rpb24gd2Fybk5vb3AocHVibGljSW5zdGFuY2UsIGNhbGxlck5hbWUpIHsK
KyAgaWYgKCJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJykgeworICAgIHZhciBjb25zdHJ1
Y3RvciA9IHB1YmxpY0luc3RhbmNlLmNvbnN0cnVjdG9yOworICAgICJkZXZlbG9wbWVudCIgIT09
ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoZmFsc2UsICclcyguLi4pOiBDYW4gb25seSB1cGRhdGUg
YSBtb3VudGVkIG9yIG1vdW50aW5nIGNvbXBvbmVudC4gJyArICdUaGlzIHVzdWFsbHkgbWVhbnMg
eW91IGNhbGxlZCAlcygpIG9uIGFuIHVubW91bnRlZCBjb21wb25lbnQuICcgKyAnVGhpcyBpcyBh
IG5vLW9wLiBQbGVhc2UgY2hlY2sgdGhlIGNvZGUgZm9yIHRoZSAlcyBjb21wb25lbnQuJywgY2Fs
bGVyTmFtZSwgY2FsbGVyTmFtZSwgY29uc3RydWN0b3IgJiYgKGNvbnN0cnVjdG9yLmRpc3BsYXlO
YW1lIHx8IGNvbnN0cnVjdG9yLm5hbWUpIHx8ICdSZWFjdENsYXNzJykgOiB2b2lkIDA7CisgIH0K
K30KKworLyoqCisgKiBUaGlzIGlzIHRoZSBhYnN0cmFjdCBBUEkgZm9yIGFuIHVwZGF0ZSBxdWV1
ZS4KKyAqLwordmFyIFJlYWN0Tm9vcFVwZGF0ZVF1ZXVlID0geworCisgIC8qKgorICAgKiBDaGVj
a3Mgd2hldGhlciBvciBub3QgdGhpcyBjb21wb3NpdGUgY29tcG9uZW50IGlzIG1vdW50ZWQuCisg
ICAqIEBwYXJhbSB7UmVhY3RDbGFzc30gcHVibGljSW5zdGFuY2UgVGhlIGluc3RhbmNlIHdlIHdh
bnQgdG8gdGVzdC4KKyAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBtb3VudGVkLCBmYWxz
ZSBvdGhlcndpc2UuCisgICAqIEBwcm90ZWN0ZWQKKyAgICogQGZpbmFsCisgICAqLworICBpc01v
dW50ZWQ6IGZ1bmN0aW9uIChwdWJsaWNJbnN0YW5jZSkgeworICAgIHJldHVybiBmYWxzZTsKKyAg
fSwKKworICAvKioKKyAgICogRW5xdWV1ZSBhIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBleGVjdXRl
ZCBhZnRlciBhbGwgdGhlIHBlbmRpbmcgdXBkYXRlcworICAgKiBoYXZlIHByb2Nlc3NlZC4KKyAg
ICoKKyAgICogQHBhcmFtIHtSZWFjdENsYXNzfSBwdWJsaWNJbnN0YW5jZSBUaGUgaW5zdGFuY2Ug
dG8gdXNlIGFzIGB0aGlzYCBjb250ZXh0LgorICAgKiBAcGFyYW0gez9mdW5jdGlvbn0gY2FsbGJh
Y2sgQ2FsbGVkIGFmdGVyIHN0YXRlIGlzIHVwZGF0ZWQuCisgICAqIEBpbnRlcm5hbAorICAgKi8K
KyAgZW5xdWV1ZUNhbGxiYWNrOiBmdW5jdGlvbiAocHVibGljSW5zdGFuY2UsIGNhbGxiYWNrKSB7
fSwKKworICAvKioKKyAgICogRm9yY2VzIGFuIHVwZGF0ZS4gVGhpcyBzaG91bGQgb25seSBiZSBp
bnZva2VkIHdoZW4gaXQgaXMga25vd24gd2l0aAorICAgKiBjZXJ0YWludHkgdGhhdCB3ZSBhcmUg
Kipub3QqKiBpbiBhIERPTSB0cmFuc2FjdGlvbi4KKyAgICoKKyAgICogWW91IG1heSB3YW50IHRv
IGNhbGwgdGhpcyB3aGVuIHlvdSBrbm93IHRoYXQgc29tZSBkZWVwZXIgYXNwZWN0IG9mIHRoZQor
ICAgKiBjb21wb25lbnQncyBzdGF0ZSBoYXMgY2hhbmdlZCBidXQgYHNldFN0YXRlYCB3YXMgbm90
IGNhbGxlZC4KKyAgICoKKyAgICogVGhpcyB3aWxsIG5vdCBpbnZva2UgYHNob3VsZENvbXBvbmVu
dFVwZGF0ZWAsIGJ1dCBpdCB3aWxsIGludm9rZQorICAgKiBgY29tcG9uZW50V2lsbFVwZGF0ZWAg
YW5kIGBjb21wb25lbnREaWRVcGRhdGVgLgorICAgKgorICAgKiBAcGFyYW0ge1JlYWN0Q2xhc3N9
IHB1YmxpY0luc3RhbmNlIFRoZSBpbnN0YW5jZSB0aGF0IHNob3VsZCByZXJlbmRlci4KKyAgICog
QGludGVybmFsCisgICAqLworICBlbnF1ZXVlRm9yY2VVcGRhdGU6IGZ1bmN0aW9uIChwdWJsaWNJ
bnN0YW5jZSkgeworICAgIHdhcm5Ob29wKHB1YmxpY0luc3RhbmNlLCAnZm9yY2VVcGRhdGUnKTsK
KyAgfSwKKworICAvKioKKyAgICogUmVwbGFjZXMgYWxsIG9mIHRoZSBzdGF0ZS4gQWx3YXlzIHVz
ZSB0aGlzIG9yIGBzZXRTdGF0ZWAgdG8gbXV0YXRlIHN0YXRlLgorICAgKiBZb3Ugc2hvdWxkIHRy
ZWF0IGB0aGlzLnN0YXRlYCBhcyBpbW11dGFibGUuCisgICAqCisgICAqIFRoZXJlIGlzIG5vIGd1
YXJhbnRlZSB0aGF0IGB0aGlzLnN0YXRlYCB3aWxsIGJlIGltbWVkaWF0ZWx5IHVwZGF0ZWQsIHNv
CisgICAqIGFjY2Vzc2luZyBgdGhpcy5zdGF0ZWAgYWZ0ZXIgY2FsbGluZyB0aGlzIG1ldGhvZCBt
YXkgcmV0dXJuIHRoZSBvbGQgdmFsdWUuCisgICAqCisgICAqIEBwYXJhbSB7UmVhY3RDbGFzc30g
cHVibGljSW5zdGFuY2UgVGhlIGluc3RhbmNlIHRoYXQgc2hvdWxkIHJlcmVuZGVyLgorICAgKiBA
cGFyYW0ge29iamVjdH0gY29tcGxldGVTdGF0ZSBOZXh0IHN0YXRlLgorICAgKiBAaW50ZXJuYWwK
KyAgICovCisgIGVucXVldWVSZXBsYWNlU3RhdGU6IGZ1bmN0aW9uIChwdWJsaWNJbnN0YW5jZSwg
Y29tcGxldGVTdGF0ZSkgeworICAgIHdhcm5Ob29wKHB1YmxpY0luc3RhbmNlLCAncmVwbGFjZVN0
YXRlJyk7CisgIH0sCisKKyAgLyoqCisgICAqIFNldHMgYSBzdWJzZXQgb2YgdGhlIHN0YXRlLiBU
aGlzIG9ubHkgZXhpc3RzIGJlY2F1c2UgX3BlbmRpbmdTdGF0ZSBpcworICAgKiBpbnRlcm5hbC4g
VGhpcyBwcm92aWRlcyBhIG1lcmdpbmcgc3RyYXRlZ3kgdGhhdCBpcyBub3QgYXZhaWxhYmxlIHRv
IGRlZXAKKyAgICogcHJvcGVydGllcyB3aGljaCBpcyBjb25mdXNpbmcuIFRPRE86IEV4cG9zZSBw
ZW5kaW5nU3RhdGUgb3IgZG9uJ3QgdXNlIGl0CisgICAqIGR1cmluZyB0aGUgbWVyZ2UuCisgICAq
CisgICAqIEBwYXJhbSB7UmVhY3RDbGFzc30gcHVibGljSW5zdGFuY2UgVGhlIGluc3RhbmNlIHRo
YXQgc2hvdWxkIHJlcmVuZGVyLgorICAgKiBAcGFyYW0ge29iamVjdH0gcGFydGlhbFN0YXRlIE5l
eHQgcGFydGlhbCBzdGF0ZSB0byBiZSBtZXJnZWQgd2l0aCBzdGF0ZS4KKyAgICogQGludGVybmFs
CisgICAqLworICBlbnF1ZXVlU2V0U3RhdGU6IGZ1bmN0aW9uIChwdWJsaWNJbnN0YW5jZSwgcGFy
dGlhbFN0YXRlKSB7CisgICAgd2Fybk5vb3AocHVibGljSW5zdGFuY2UsICdzZXRTdGF0ZScpOwor
ICB9Cit9OworCittb2R1bGUuZXhwb3J0cyA9IFJlYWN0Tm9vcFVwZGF0ZVF1ZXVlOworfSx7IjMw
IjozMH1dLDE0OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29w
eXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0
eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlCisgKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGly
ZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnQKKyAqIG9mIHBh
dGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUg
ZGlyZWN0b3J5LgorICoKKyAqIAorICovCisKKyd1c2Ugc3RyaWN0JzsKKwordmFyIFJlYWN0UHJv
cFR5cGVMb2NhdGlvbk5hbWVzID0ge307CisKK2lmICgiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVj
dGlvbicpIHsKKyAgUmVhY3RQcm9wVHlwZUxvY2F0aW9uTmFtZXMgPSB7CisgICAgcHJvcDogJ3By
b3AnLAorICAgIGNvbnRleHQ6ICdjb250ZXh0JywKKyAgICBjaGlsZENvbnRleHQ6ICdjaGlsZCBj
b250ZXh0JworICB9OworfQorCittb2R1bGUuZXhwb3J0cyA9IFJlYWN0UHJvcFR5cGVMb2NhdGlv
bk5hbWVzOworfSx7fV0sMTU6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpeworLyoq
CisgKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRo
ZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUg
cm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAor
ICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0
aGUgc2FtZSBkaXJlY3RvcnkuCisgKgorICovCisKKyd1c2Ugc3RyaWN0JzsKKwordmFyIF9yZXF1
aXJlID0gX2RlcmVxXygxMCksCisgICAgaXNWYWxpZEVsZW1lbnQgPSBfcmVxdWlyZS5pc1ZhbGlk
RWxlbWVudDsKKwordmFyIGZhY3RvcnkgPSBfZGVyZXFfKDMzKTsKKworbW9kdWxlLmV4cG9ydHMg
PSBmYWN0b3J5KGlzVmFsaWRFbGVtZW50KTsKK30seyIxMCI6MTAsIjMzIjozM31dLDE2OltmdW5j
dGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMtcHJl
c2VudCwgRmFjZWJvb2ssIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhp
cyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91
bmQgaW4gdGhlCisgKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMg
c291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnQKKyAqIG9mIHBhdGVudCByaWdodHMgY2Fu
IGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorICoK
KyAqIAorICovCisKKyd1c2Ugc3RyaWN0JzsKKwordmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0g
J1NFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEJzsKKworbW9kdWxl
LmV4cG9ydHMgPSBSZWFjdFByb3BUeXBlc1NlY3JldDsKK30se31dLDE3OltmdW5jdGlvbihfZGVy
ZXFfLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFj
ZWJvb2ssIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb3VyY2Ug
Y29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhl
CisgKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRy
ZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnQKKyAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5k
IGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorICoKKyAqLworCisn
dXNlIHN0cmljdCc7CisKK3ZhciBfYXNzaWduID0gX2RlcmVxXygzMSk7CisKK3ZhciBSZWFjdENv
bXBvbmVudCA9IF9kZXJlcV8oNik7Cit2YXIgUmVhY3ROb29wVXBkYXRlUXVldWUgPSBfZGVyZXFf
KDEzKTsKKwordmFyIGVtcHR5T2JqZWN0ID0gX2RlcmVxXygyOCk7CisKKy8qKgorICogQmFzZSBj
bGFzcyBoZWxwZXJzIGZvciB0aGUgdXBkYXRpbmcgc3RhdGUgb2YgYSBjb21wb25lbnQuCisgKi8K
K2Z1bmN0aW9uIFJlYWN0UHVyZUNvbXBvbmVudChwcm9wcywgY29udGV4dCwgdXBkYXRlcikgewor
ICAvLyBEdXBsaWNhdGVkIGZyb20gUmVhY3RDb21wb25lbnQuCisgIHRoaXMucHJvcHMgPSBwcm9w
czsKKyAgdGhpcy5jb250ZXh0ID0gY29udGV4dDsKKyAgdGhpcy5yZWZzID0gZW1wdHlPYmplY3Q7
CisgIC8vIFdlIGluaXRpYWxpemUgdGhlIGRlZmF1bHQgdXBkYXRlciBidXQgdGhlIHJlYWwgb25l
IGdldHMgaW5qZWN0ZWQgYnkgdGhlCisgIC8vIHJlbmRlcmVyLgorICB0aGlzLnVwZGF0ZXIgPSB1
cGRhdGVyIHx8IFJlYWN0Tm9vcFVwZGF0ZVF1ZXVlOworfQorCitmdW5jdGlvbiBDb21wb25lbnRE
dW1teSgpIHt9CitDb21wb25lbnREdW1teS5wcm90b3R5cGUgPSBSZWFjdENvbXBvbmVudC5wcm90
b3R5cGU7CitSZWFjdFB1cmVDb21wb25lbnQucHJvdG90eXBlID0gbmV3IENvbXBvbmVudER1bW15
KCk7CitSZWFjdFB1cmVDb21wb25lbnQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVhY3RQdXJl
Q29tcG9uZW50OworLy8gQXZvaWQgYW4gZXh0cmEgcHJvdG90eXBlIGp1bXAgZm9yIHRoZXNlIG1l
dGhvZHMuCitfYXNzaWduKFJlYWN0UHVyZUNvbXBvbmVudC5wcm90b3R5cGUsIFJlYWN0Q29tcG9u
ZW50LnByb3RvdHlwZSk7CitSZWFjdFB1cmVDb21wb25lbnQucHJvdG90eXBlLmlzUHVyZVJlYWN0
Q29tcG9uZW50ID0gdHJ1ZTsKKworbW9kdWxlLmV4cG9ydHMgPSBSZWFjdFB1cmVDb21wb25lbnQ7
Cit9LHsiMTMiOjEzLCIyOCI6MjgsIjMxIjozMSwiNiI6Nn1dLDE4OltmdW5jdGlvbihfZGVyZXFf
LG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJv
b2ssIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb3VyY2UgY29k
ZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlCisg
KiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUu
IEFuIGFkZGl0aW9uYWwgZ3JhbnQKKyAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGlu
IHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorICoKKyAqLworCisndXNl
IHN0cmljdCc7CisKK3ZhciBfYXNzaWduID0gX2RlcmVxXygzMSk7CisKK3ZhciBSZWFjdCA9IF9k
ZXJlcV8oMyk7CisKKy8vIGB2ZXJzaW9uYCB3aWxsIGJlIGFkZGVkIGhlcmUgYnkgdGhlIFJlYWN0
IG1vZHVsZS4KK3ZhciBSZWFjdFVNREVudHJ5ID0gX2Fzc2lnbihSZWFjdCwgeworICBfX1NFQ1JF
VF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRDogeworICAgIFJlYWN0
Q3VycmVudE93bmVyOiBfZGVyZXFfKDgpCisgIH0KK30pOworCitpZiAoImRldmVsb3BtZW50IiAh
PT0gJ3Byb2R1Y3Rpb24nKSB7CisgIF9hc3NpZ24oUmVhY3RVTURFbnRyeS5fX1NFQ1JFVF9JTlRF
Uk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRCwgeworICAgIC8vIFJlYWN0Q29t
cG9uZW50VHJlZUhvb2sgc2hvdWxkIG5vdCBiZSBpbmNsdWRlZCBpbiBwcm9kdWN0aW9uLgorICAg
IFJlYWN0Q29tcG9uZW50VHJlZUhvb2s6IF9kZXJlcV8oNyksCisgICAgZ2V0TmV4dERlYnVnSUQ6
IF9kZXJlcV8oMjMpCisgIH0pOworfQorCittb2R1bGUuZXhwb3J0cyA9IFJlYWN0VU1ERW50cnk7
Cit9LHsiMjMiOjIzLCIzIjozLCIzMSI6MzEsIjciOjcsIjgiOjh9XSwxOTpbZnVuY3Rpb24oX2Rl
cmVxXyxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZh
Y2Vib29rLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc291cmNl
IGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRo
ZQorICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0
cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50CisgKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3Vu
ZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAqCisgKi8KKwor
J3VzZSBzdHJpY3QnOworCittb2R1bGUuZXhwb3J0cyA9ICcxNS41LjQnOworfSx7fV0sMjA6W2Z1
bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAxMy1w
cmVzZW50LCBGYWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBU
aGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBm
b3VuZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhp
cyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAorICogb2YgcGF0ZW50IHJpZ2h0cyBj
YW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisg
KgorICogCisgKi8KKworJ3VzZSBzdHJpY3QnOworCit2YXIgY2FuRGVmaW5lUHJvcGVydHkgPSBm
YWxzZTsKK2lmICgiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicpIHsKKyAgdHJ5IHsKKyAg
ICAvLyAkRmxvd0ZpeE1lIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9mbG93L2lzc3Vlcy8y
ODUKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICd4JywgeyBnZXQ6IGZ1bmN0aW9uICgp
IHt9IH0pOworICAgIGNhbkRlZmluZVByb3BlcnR5ID0gdHJ1ZTsKKyAgfSBjYXRjaCAoeCkgewor
ICAgIC8vIElFIHdpbGwgZmFpbCBvbiBkZWZpbmVQcm9wZXJ0eQorICB9Cit9CisKK21vZHVsZS5l
eHBvcnRzID0gY2FuRGVmaW5lUHJvcGVydHk7Cit9LHt9XSwyMTpbZnVuY3Rpb24oX2RlcmVxXyxt
b2R1bGUsZXhwb3J0cyl7CisoZnVuY3Rpb24gKHByb2Nlc3MpeworLyoqCisgKiBDb3B5cmlnaHQg
MjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGlj
ZW5zZSBmb3VuZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkg
b2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAorICogb2YgcGF0ZW50IHJp
Z2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3Rv
cnkuCisgKgorICovCisKKyd1c2Ugc3RyaWN0JzsKKwordmFyIF9wcm9kSW52YXJpYW50ID0gX2Rl
cmVxXygyNSk7CisKK3ZhciBSZWFjdFByb3BUeXBlTG9jYXRpb25OYW1lcyA9IF9kZXJlcV8oMTQp
OwordmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gX2RlcmVxXygxNik7CisKK3ZhciBpbnZhcmlh
bnQgPSBfZGVyZXFfKDI5KTsKK3ZhciB3YXJuaW5nID0gX2RlcmVxXygzMCk7CisKK3ZhciBSZWFj
dENvbXBvbmVudFRyZWVIb29rOworCitpZiAodHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQn
ICYmIHByb2Nlc3MuZW52ICYmICJkZXZlbG9wbWVudCIgPT09ICd0ZXN0JykgeworICAvLyBUZW1w
b3JhcnkgaGFjay4KKyAgLy8gSW5saW5lIHJlcXVpcmVzIGRvbid0IHdvcmsgd2VsbCB3aXRoIEpl
c3Q6CisgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvNzI0MAor
ICAvLyBSZW1vdmUgdGhlIGlubGluZSByZXF1aXJlcyB3aGVuIHdlIGRvbid0IG5lZWQgdGhlbSBh
bnltb3JlOgorICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvcHVsbC83MTc4
CisgIFJlYWN0Q29tcG9uZW50VHJlZUhvb2sgPSBfZGVyZXFfKDcpOworfQorCit2YXIgbG9nZ2Vk
VHlwZUZhaWx1cmVzID0ge307CisKKy8qKgorICogQXNzZXJ0IHRoYXQgdGhlIHZhbHVlcyBtYXRj
aCB3aXRoIHRoZSB0eXBlIHNwZWNzLgorICogRXJyb3IgbWVzc2FnZXMgYXJlIG1lbW9yaXplZCBh
bmQgd2lsbCBvbmx5IGJlIHNob3duIG9uY2UuCisgKgorICogQHBhcmFtIHtvYmplY3R9IHR5cGVT
cGVjcyBNYXAgb2YgbmFtZSB0byBhIFJlYWN0UHJvcFR5cGUKKyAqIEBwYXJhbSB7b2JqZWN0fSB2
YWx1ZXMgUnVudGltZSB2YWx1ZXMgdGhhdCBuZWVkIHRvIGJlIHR5cGUtY2hlY2tlZAorICogQHBh
cmFtIHtzdHJpbmd9IGxvY2F0aW9uIGUuZy4gInByb3AiLCAiY29udGV4dCIsICJjaGlsZCBjb250
ZXh0IgorICogQHBhcmFtIHtzdHJpbmd9IGNvbXBvbmVudE5hbWUgTmFtZSBvZiB0aGUgY29tcG9u
ZW50IGZvciBlcnJvciBtZXNzYWdlcy4KKyAqIEBwYXJhbSB7P29iamVjdH0gZWxlbWVudCBUaGUg
UmVhY3QgZWxlbWVudCB0aGF0IGlzIGJlaW5nIHR5cGUtY2hlY2tlZAorICogQHBhcmFtIHs/bnVt
YmVyfSBkZWJ1Z0lEIFRoZSBSZWFjdCBjb21wb25lbnQgaW5zdGFuY2UgdGhhdCBpcyBiZWluZyB0
eXBlLWNoZWNrZWQKKyAqIEBwcml2YXRlCisgKi8KK2Z1bmN0aW9uIGNoZWNrUmVhY3RUeXBlU3Bl
Yyh0eXBlU3BlY3MsIHZhbHVlcywgbG9jYXRpb24sIGNvbXBvbmVudE5hbWUsIGVsZW1lbnQsIGRl
YnVnSUQpIHsKKyAgZm9yICh2YXIgdHlwZVNwZWNOYW1lIGluIHR5cGVTcGVjcykgeworICAgIGlm
ICh0eXBlU3BlY3MuaGFzT3duUHJvcGVydHkodHlwZVNwZWNOYW1lKSkgeworICAgICAgdmFyIGVy
cm9yOworICAgICAgLy8gUHJvcCB0eXBlIHZhbGlkYXRpb24gbWF5IHRocm93LiBJbiBjYXNlIHRo
ZXkgZG8sIHdlIGRvbid0IHdhbnQgdG8KKyAgICAgIC8vIGZhaWwgdGhlIHJlbmRlciBwaGFzZSB3
aGVyZSBpdCBkaWRuJ3QgZmFpbCBiZWZvcmUuIFNvIHdlIGxvZyBpdC4KKyAgICAgIC8vIEFmdGVy
IHRoZXNlIGhhdmUgYmVlbiBjbGVhbmVkIHVwLCB3ZSdsbCBsZXQgdGhlbSB0aHJvdy4KKyAgICAg
IHRyeSB7CisgICAgICAgIC8vIFRoaXMgaXMgaW50ZW50aW9uYWxseSBhbiBpbnZhcmlhbnQgdGhh
dCBnZXRzIGNhdWdodC4gSXQncyB0aGUgc2FtZQorICAgICAgICAvLyBiZWhhdmlvciBhcyB3aXRo
b3V0IHRoaXMgc3RhdGVtZW50IGV4Y2VwdCB3aXRoIGEgYmV0dGVyIG1lc3NhZ2UuCisgICAgICAg
ICEodHlwZW9mIHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdID09PSAnZnVuY3Rpb24nKSA/ICJkZXZl
bG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJyVzOiAlcyB0eXBl
IGAlc2AgaXMgaW52YWxpZDsgaXQgbXVzdCBiZSBhIGZ1bmN0aW9uLCB1c3VhbGx5IGZyb20gUmVh
Y3QuUHJvcFR5cGVzLicsIGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJywgUmVhY3RQcm9w
VHlwZUxvY2F0aW9uTmFtZXNbbG9jYXRpb25dLCB0eXBlU3BlY05hbWUpIDogX3Byb2RJbnZhcmlh
bnQoJzg0JywgY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnLCBSZWFjdFByb3BUeXBlTG9j
YXRpb25OYW1lc1tsb2NhdGlvbl0sIHR5cGVTcGVjTmFtZSkgOiB2b2lkIDA7CisgICAgICAgIGVy
cm9yID0gdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0odmFsdWVzLCB0eXBlU3BlY05hbWUsIGNvbXBv
bmVudE5hbWUsIGxvY2F0aW9uLCBudWxsLCBSZWFjdFByb3BUeXBlc1NlY3JldCk7CisgICAgICB9
IGNhdGNoIChleCkgeworICAgICAgICBlcnJvciA9IGV4OworICAgICAgfQorICAgICAgImRldmVs
b3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyghZXJyb3IgfHwgZXJyb3IgaW5zdGFu
Y2VvZiBFcnJvciwgJyVzOiB0eXBlIHNwZWNpZmljYXRpb24gb2YgJXMgYCVzYCBpcyBpbnZhbGlk
OyB0aGUgdHlwZSBjaGVja2VyICcgKyAnZnVuY3Rpb24gbXVzdCByZXR1cm4gYG51bGxgIG9yIGFu
IGBFcnJvcmAgYnV0IHJldHVybmVkIGEgJXMuICcgKyAnWW91IG1heSBoYXZlIGZvcmdvdHRlbiB0
byBwYXNzIGFuIGFyZ3VtZW50IHRvIHRoZSB0eXBlIGNoZWNrZXIgJyArICdjcmVhdG9yIChhcnJh
eU9mLCBpbnN0YW5jZU9mLCBvYmplY3RPZiwgb25lT2YsIG9uZU9mVHlwZSwgYW5kICcgKyAnc2hh
cGUgYWxsIHJlcXVpcmUgYW4gYXJndW1lbnQpLicsIGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNs
YXNzJywgUmVhY3RQcm9wVHlwZUxvY2F0aW9uTmFtZXNbbG9jYXRpb25dLCB0eXBlU3BlY05hbWUs
IHR5cGVvZiBlcnJvcikgOiB2b2lkIDA7CisgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJv
ciAmJiAhKGVycm9yLm1lc3NhZ2UgaW4gbG9nZ2VkVHlwZUZhaWx1cmVzKSkgeworICAgICAgICAv
LyBPbmx5IG1vbml0b3IgdGhpcyBmYWlsdXJlIG9uY2UgYmVjYXVzZSB0aGVyZSB0ZW5kcyB0byBi
ZSBhIGxvdCBvZiB0aGUKKyAgICAgICAgLy8gc2FtZSBlcnJvci4KKyAgICAgICAgbG9nZ2VkVHlw
ZUZhaWx1cmVzW2Vycm9yLm1lc3NhZ2VdID0gdHJ1ZTsKKworICAgICAgICB2YXIgY29tcG9uZW50
U3RhY2tJbmZvID0gJyc7CisKKyAgICAgICAgaWYgKCJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0
aW9uJykgeworICAgICAgICAgIGlmICghUmVhY3RDb21wb25lbnRUcmVlSG9vaykgeworICAgICAg
ICAgICAgUmVhY3RDb21wb25lbnRUcmVlSG9vayA9IF9kZXJlcV8oNyk7CisgICAgICAgICAgfQor
ICAgICAgICAgIGlmIChkZWJ1Z0lEICE9PSBudWxsKSB7CisgICAgICAgICAgICBjb21wb25lbnRT
dGFja0luZm8gPSBSZWFjdENvbXBvbmVudFRyZWVIb29rLmdldFN0YWNrQWRkZW5kdW1CeUlEKGRl
YnVnSUQpOworICAgICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudCAhPT0gbnVsbCkgeworICAgICAg
ICAgICAgY29tcG9uZW50U3RhY2tJbmZvID0gUmVhY3RDb21wb25lbnRUcmVlSG9vay5nZXRDdXJy
ZW50U3RhY2tBZGRlbmR1bShlbGVtZW50KTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICAiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGZhbHNlLCAnRmFp
bGVkICVzIHR5cGU6ICVzJXMnLCBsb2NhdGlvbiwgZXJyb3IubWVzc2FnZSwgY29tcG9uZW50U3Rh
Y2tJbmZvKSA6IHZvaWQgMDsKKyAgICAgIH0KKyAgICB9CisgIH0KK30KKworbW9kdWxlLmV4cG9y
dHMgPSBjaGVja1JlYWN0VHlwZVNwZWM7Cit9KS5jYWxsKHRoaXMsdW5kZWZpbmVkKQorfSx7IjE0
IjoxNCwiMTYiOjE2LCIyNSI6MjUsIjI5IjoyOSwiMzAiOjMwLCI3Ijo3fV0sMjI6W2Z1bmN0aW9u
KF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50
LCBGYWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNv
dXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBp
biB0aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3Vy
Y2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAorICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUg
Zm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisgKgorICog
CisgKi8KKworJ3VzZSBzdHJpY3QnOworCisvKiBnbG9iYWwgU3ltYm9sICovCisKK3ZhciBJVEVS
QVRPUl9TWU1CT0wgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5pdGVy
YXRvcjsKK3ZhciBGQVVYX0lURVJBVE9SX1NZTUJPTCA9ICdAQGl0ZXJhdG9yJzsgLy8gQmVmb3Jl
IFN5bWJvbCBzcGVjLgorCisvKioKKyAqIFJldHVybnMgdGhlIGl0ZXJhdG9yIG1ldGhvZCBmdW5j
dGlvbiBjb250YWluZWQgb24gdGhlIGl0ZXJhYmxlIG9iamVjdC4KKyAqCisgKiBCZSBzdXJlIHRv
IGludm9rZSB0aGUgZnVuY3Rpb24gd2l0aCB0aGUgaXRlcmFibGUgYXMgY29udGV4dDoKKyAqCisg
KiAgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKG15SXRlcmFibGUpOworICogICAg
IGlmIChpdGVyYXRvckZuKSB7CisgKiAgICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvckZuLmNh
bGwobXlJdGVyYWJsZSk7CisgKiAgICAgICAuLi4KKyAqICAgICB9CisgKgorICogQHBhcmFtIHs/
b2JqZWN0fSBtYXliZUl0ZXJhYmxlCisgKiBAcmV0dXJuIHs/ZnVuY3Rpb259CisgKi8KK2Z1bmN0
aW9uIGdldEl0ZXJhdG9yRm4obWF5YmVJdGVyYWJsZSkgeworICB2YXIgaXRlcmF0b3JGbiA9IG1h
eWJlSXRlcmFibGUgJiYgKElURVJBVE9SX1NZTUJPTCAmJiBtYXliZUl0ZXJhYmxlW0lURVJBVE9S
X1NZTUJPTF0gfHwgbWF5YmVJdGVyYWJsZVtGQVVYX0lURVJBVE9SX1NZTUJPTF0pOworICBpZiAo
dHlwZW9mIGl0ZXJhdG9yRm4gPT09ICdmdW5jdGlvbicpIHsKKyAgICByZXR1cm4gaXRlcmF0b3JG
bjsKKyAgfQorfQorCittb2R1bGUuZXhwb3J0cyA9IGdldEl0ZXJhdG9yRm47Cit9LHt9XSwyMzpb
ZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIENvcHlyaWdodCAyMDEz
LXByZXNlbnQsIEZhY2Vib29rLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNl
IGZvdW5kIGluIHRoZQorICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0
aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50CisgKiBvZiBwYXRlbnQgcmlnaHRz
IGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS4K
KyAqCisgKiAKKyAqLworCisndXNlIHN0cmljdCc7CisKK3ZhciBuZXh0RGVidWdJRCA9IDE7CisK
K2Z1bmN0aW9uIGdldE5leHREZWJ1Z0lEKCkgeworICByZXR1cm4gbmV4dERlYnVnSUQrKzsKK30K
KworbW9kdWxlLmV4cG9ydHMgPSBnZXROZXh0RGVidWdJRDsKK30se31dLDI0OltmdW5jdGlvbihf
ZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwg
RmFjZWJvb2ssIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb3Vy
Y2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4g
dGhlCisgKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNl
IHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnQKKyAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZv
dW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorICoKKyAqLwor
J3VzZSBzdHJpY3QnOworCit2YXIgX3Byb2RJbnZhcmlhbnQgPSBfZGVyZXFfKDI1KTsKKwordmFy
IFJlYWN0RWxlbWVudCA9IF9kZXJlcV8oMTApOworCit2YXIgaW52YXJpYW50ID0gX2RlcmVxXygy
OSk7CisKKy8qKgorICogUmV0dXJucyB0aGUgZmlyc3QgY2hpbGQgaW4gYSBjb2xsZWN0aW9uIG9m
IGNoaWxkcmVuIGFuZCB2ZXJpZmllcyB0aGF0IHRoZXJlCisgKiBpcyBvbmx5IG9uZSBjaGlsZCBp
biB0aGUgY29sbGVjdGlvbi4KKyAqCisgKiBTZWUgaHR0cHM6Ly9mYWNlYm9vay5naXRodWIuaW8v
cmVhY3QvZG9jcy90b3AtbGV2ZWwtYXBpLmh0bWwjcmVhY3QuY2hpbGRyZW4ub25seQorICoKKyAq
IFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9mIHRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGF0
IGEgc2luZ2xlIGNoaWxkIGdldHMKKyAqIHBhc3NlZCB3aXRob3V0IGEgd3JhcHBlciwgYnV0IHRo
ZSBwdXJwb3NlIG9mIHRoaXMgaGVscGVyIGZ1bmN0aW9uIGlzIHRvCisgKiBhYnN0cmFjdCBhd2F5
IHRoZSBwYXJ0aWN1bGFyIHN0cnVjdHVyZSBvZiBjaGlsZHJlbi4KKyAqCisgKiBAcGFyYW0gez9v
YmplY3R9IGNoaWxkcmVuIENoaWxkIGNvbGxlY3Rpb24gc3RydWN0dXJlLgorICogQHJldHVybiB7
UmVhY3RFbGVtZW50fSBUaGUgZmlyc3QgYW5kIG9ubHkgYFJlYWN0RWxlbWVudGAgY29udGFpbmVk
IGluIHRoZQorICogc3RydWN0dXJlLgorICovCitmdW5jdGlvbiBvbmx5Q2hpbGQoY2hpbGRyZW4p
IHsKKyAgIVJlYWN0RWxlbWVudC5pc1ZhbGlkRWxlbWVudChjaGlsZHJlbikgPyAiZGV2ZWxvcG1l
bnQiICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdSZWFjdC5DaGlsZHJlbi5v
bmx5IGV4cGVjdGVkIHRvIHJlY2VpdmUgYSBzaW5nbGUgUmVhY3QgZWxlbWVudCBjaGlsZC4nKSA6
IF9wcm9kSW52YXJpYW50KCcxNDMnKSA6IHZvaWQgMDsKKyAgcmV0dXJuIGNoaWxkcmVuOworfQor
Cittb2R1bGUuZXhwb3J0cyA9IG9ubHlDaGlsZDsKK30seyIxMCI6MTAsIjI1IjoyNSwiMjkiOjI5
fV0sMjU6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmln
aHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0
eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlCisgKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGly
ZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnQKKyAqIG9mIHBh
dGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUg
ZGlyZWN0b3J5LgorICoKKyAqIAorICovCisndXNlIHN0cmljdCc7CisKKy8qKgorICogV0FSTklO
RzogRE8gTk9UIG1hbnVhbGx5IHJlcXVpcmUgdGhpcyBtb2R1bGUuCisgKiBUaGlzIGlzIGEgcmVw
bGFjZW1lbnQgZm9yIGBpbnZhcmlhbnQoLi4uKWAgdXNlZCBieSB0aGUgZXJyb3IgY29kZSBzeXN0
ZW0KKyAqIGFuZCB3aWxsIF9vbmx5XyBiZSByZXF1aXJlZCBieSB0aGUgY29ycmVzcG9uZGluZyBi
YWJlbCBwYXNzLgorICogSXQgYWx3YXlzIHRocm93cy4KKyAqLworCitmdW5jdGlvbiByZWFjdFBy
b2RJbnZhcmlhbnQoY29kZSkgeworICB2YXIgYXJnQ291bnQgPSBhcmd1bWVudHMubGVuZ3RoIC0g
MTsKKworICB2YXIgbWVzc2FnZSA9ICdNaW5pZmllZCBSZWFjdCBlcnJvciAjJyArIGNvZGUgKyAn
OyB2aXNpdCAnICsgJ2h0dHA6Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3QvZG9jcy9lcnJvci1k
ZWNvZGVyLmh0bWw/aW52YXJpYW50PScgKyBjb2RlOworCisgIGZvciAodmFyIGFyZ0lkeCA9IDA7
IGFyZ0lkeCA8IGFyZ0NvdW50OyBhcmdJZHgrKykgeworICAgIG1lc3NhZ2UgKz0gJyZhcmdzW109
JyArIGVuY29kZVVSSUNvbXBvbmVudChhcmd1bWVudHNbYXJnSWR4ICsgMV0pOworICB9CisKKyAg
bWVzc2FnZSArPSAnIGZvciB0aGUgZnVsbCBtZXNzYWdlIG9yIHVzZSB0aGUgbm9uLW1pbmlmaWVk
IGRldiBlbnZpcm9ubWVudCcgKyAnIGZvciBmdWxsIGVycm9ycyBhbmQgYWRkaXRpb25hbCBoZWxw
ZnVsIHdhcm5pbmdzLic7CisKKyAgdmFyIGVycm9yID0gbmV3IEVycm9yKG1lc3NhZ2UpOworICBl
cnJvci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nOworICBlcnJvci5mcmFtZXNUb1BvcCA9
IDE7IC8vIHdlIGRvbid0IGNhcmUgYWJvdXQgcmVhY3RQcm9kSW52YXJpYW50J3Mgb3duIGZyYW1l
CisKKyAgdGhyb3cgZXJyb3I7Cit9CisKK21vZHVsZS5leHBvcnRzID0gcmVhY3RQcm9kSW52YXJp
YW50OworfSx7fV0sMjY6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpeworLyoqCisg
KiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBC
U0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9v
dCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAorICog
b2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUg
c2FtZSBkaXJlY3RvcnkuCisgKgorICovCisKKyd1c2Ugc3RyaWN0JzsKKwordmFyIF9wcm9kSW52
YXJpYW50ID0gX2RlcmVxXygyNSk7CisKK3ZhciBSZWFjdEN1cnJlbnRPd25lciA9IF9kZXJlcV8o
OCk7Cit2YXIgUkVBQ1RfRUxFTUVOVF9UWVBFID0gX2RlcmVxXygxMSk7CisKK3ZhciBnZXRJdGVy
YXRvckZuID0gX2RlcmVxXygyMik7Cit2YXIgaW52YXJpYW50ID0gX2RlcmVxXygyOSk7Cit2YXIg
S2V5RXNjYXBlVXRpbHMgPSBfZGVyZXFfKDEpOwordmFyIHdhcm5pbmcgPSBfZGVyZXFfKDMwKTsK
KwordmFyIFNFUEFSQVRPUiA9ICcuJzsKK3ZhciBTVUJTRVBBUkFUT1IgPSAnOic7CisKKy8qKgor
ICogVGhpcyBpcyBpbmxpbmVkIGZyb20gUmVhY3RFbGVtZW50IHNpbmNlIHRoaXMgZmlsZSBpcyBz
aGFyZWQgYmV0d2VlbgorICogaXNvbW9ycGhpYyBhbmQgcmVuZGVyZXJzLiBXZSBjb3VsZCBleHRy
YWN0IHRoaXMgdG8gYQorICoKKyAqLworCisvKioKKyAqIFRPRE86IFRlc3QgdGhhdCBhIHNpbmds
ZSBjaGlsZCBhbmQgYW4gYXJyYXkgd2l0aCBvbmUgaXRlbSBoYXZlIHRoZSBzYW1lIGtleQorICog
cGF0dGVybi4KKyAqLworCit2YXIgZGlkV2FybkFib3V0TWFwcyA9IGZhbHNlOworCisvKioKKyAq
IEdlbmVyYXRlIGEga2V5IHN0cmluZyB0aGF0IGlkZW50aWZpZXMgYSBjb21wb25lbnQgd2l0aGlu
IGEgc2V0LgorICoKKyAqIEBwYXJhbSB7Kn0gY29tcG9uZW50IEEgY29tcG9uZW50IHRoYXQgY291
bGQgY29udGFpbiBhIG1hbnVhbCBrZXkuCisgKiBAcGFyYW0ge251bWJlcn0gaW5kZXggSW5kZXgg
dGhhdCBpcyB1c2VkIGlmIGEgbWFudWFsIGtleSBpcyBub3QgcHJvdmlkZWQuCisgKiBAcmV0dXJu
IHtzdHJpbmd9CisgKi8KK2Z1bmN0aW9uIGdldENvbXBvbmVudEtleShjb21wb25lbnQsIGluZGV4
KSB7CisgIC8vIERvIHNvbWUgdHlwZWNoZWNraW5nIGhlcmUgc2luY2Ugd2UgY2FsbCB0aGlzIGJs
aW5kbHkuIFdlIHdhbnQgdG8gZW5zdXJlCisgIC8vIHRoYXQgd2UgZG9uJ3QgYmxvY2sgcG90ZW50
aWFsIGZ1dHVyZSBFUyBBUElzLgorICBpZiAoY29tcG9uZW50ICYmIHR5cGVvZiBjb21wb25lbnQg
PT09ICdvYmplY3QnICYmIGNvbXBvbmVudC5rZXkgIT0gbnVsbCkgeworICAgIC8vIEV4cGxpY2l0
IGtleQorICAgIHJldHVybiBLZXlFc2NhcGVVdGlscy5lc2NhcGUoY29tcG9uZW50LmtleSk7Cisg
IH0KKyAgLy8gSW1wbGljaXQga2V5IGRldGVybWluZWQgYnkgdGhlIGluZGV4IGluIHRoZSBzZXQK
KyAgcmV0dXJuIGluZGV4LnRvU3RyaW5nKDM2KTsKK30KKworLyoqCisgKiBAcGFyYW0gez8qfSBj
aGlsZHJlbiBDaGlsZHJlbiB0cmVlIGNvbnRhaW5lci4KKyAqIEBwYXJhbSB7IXN0cmluZ30gbmFt
ZVNvRmFyIE5hbWUgb2YgdGhlIGtleSBwYXRoIHNvIGZhci4KKyAqIEBwYXJhbSB7IWZ1bmN0aW9u
fSBjYWxsYmFjayBDYWxsYmFjayB0byBpbnZva2Ugd2l0aCBlYWNoIGNoaWxkIGZvdW5kLgorICog
QHBhcmFtIHs/Kn0gdHJhdmVyc2VDb250ZXh0IFVzZWQgdG8gcGFzcyBpbmZvcm1hdGlvbiB0aHJv
dWdob3V0IHRoZSB0cmF2ZXJzYWwKKyAqIHByb2Nlc3MuCisgKiBAcmV0dXJuIHshbnVtYmVyfSBU
aGUgbnVtYmVyIG9mIGNoaWxkcmVuIGluIHRoaXMgc3VidHJlZS4KKyAqLworZnVuY3Rpb24gdHJh
dmVyc2VBbGxDaGlsZHJlbkltcGwoY2hpbGRyZW4sIG5hbWVTb0ZhciwgY2FsbGJhY2ssIHRyYXZl
cnNlQ29udGV4dCkgeworICB2YXIgdHlwZSA9IHR5cGVvZiBjaGlsZHJlbjsKKworICBpZiAodHlw
ZSA9PT0gJ3VuZGVmaW5lZCcgfHwgdHlwZSA9PT0gJ2Jvb2xlYW4nKSB7CisgICAgLy8gQWxsIG9m
IHRoZSBhYm92ZSBhcmUgcGVyY2VpdmVkIGFzIG51bGwuCisgICAgY2hpbGRyZW4gPSBudWxsOwor
ICB9CisKKyAgaWYgKGNoaWxkcmVuID09PSBudWxsIHx8IHR5cGUgPT09ICdzdHJpbmcnIHx8IHR5
cGUgPT09ICdudW1iZXInIHx8CisgIC8vIFRoZSBmb2xsb3dpbmcgaXMgaW5saW5lZCBmcm9tIFJl
YWN0RWxlbWVudC4gVGhpcyBtZWFucyB3ZSBjYW4gb3B0aW1pemUKKyAgLy8gc29tZSBjaGVja3Mu
IFJlYWN0IEZpYmVyIGFsc28gaW5saW5lcyB0aGlzIGxvZ2ljIGZvciBzaW1pbGFyIHB1cnBvc2Vz
LgorICB0eXBlID09PSAnb2JqZWN0JyAmJiBjaGlsZHJlbi4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxF
TUVOVF9UWVBFKSB7CisgICAgY2FsbGJhY2sodHJhdmVyc2VDb250ZXh0LCBjaGlsZHJlbiwKKyAg
ICAvLyBJZiBpdCdzIHRoZSBvbmx5IGNoaWxkLCB0cmVhdCB0aGUgbmFtZSBhcyBpZiBpdCB3YXMg
d3JhcHBlZCBpbiBhbiBhcnJheQorICAgIC8vIHNvIHRoYXQgaXQncyBjb25zaXN0ZW50IGlmIHRo
ZSBudW1iZXIgb2YgY2hpbGRyZW4gZ3Jvd3MuCisgICAgbmFtZVNvRmFyID09PSAnJyA/IFNFUEFS
QVRPUiArIGdldENvbXBvbmVudEtleShjaGlsZHJlbiwgMCkgOiBuYW1lU29GYXIpOworICAgIHJl
dHVybiAxOworICB9CisKKyAgdmFyIGNoaWxkOworICB2YXIgbmV4dE5hbWU7CisgIHZhciBzdWJ0
cmVlQ291bnQgPSAwOyAvLyBDb3VudCBvZiBjaGlsZHJlbiBmb3VuZCBpbiB0aGUgY3VycmVudCBz
dWJ0cmVlLgorICB2YXIgbmV4dE5hbWVQcmVmaXggPSBuYW1lU29GYXIgPT09ICcnID8gU0VQQVJB
VE9SIDogbmFtZVNvRmFyICsgU1VCU0VQQVJBVE9SOworCisgIGlmIChBcnJheS5pc0FycmF5KGNo
aWxkcmVuKSkgeworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKysp
IHsKKyAgICAgIGNoaWxkID0gY2hpbGRyZW5baV07CisgICAgICBuZXh0TmFtZSA9IG5leHROYW1l
UHJlZml4ICsgZ2V0Q29tcG9uZW50S2V5KGNoaWxkLCBpKTsKKyAgICAgIHN1YnRyZWVDb3VudCAr
PSB0cmF2ZXJzZUFsbENoaWxkcmVuSW1wbChjaGlsZCwgbmV4dE5hbWUsIGNhbGxiYWNrLCB0cmF2
ZXJzZUNvbnRleHQpOworICAgIH0KKyAgfSBlbHNlIHsKKyAgICB2YXIgaXRlcmF0b3JGbiA9IGdl
dEl0ZXJhdG9yRm4oY2hpbGRyZW4pOworICAgIGlmIChpdGVyYXRvckZuKSB7CisgICAgICB2YXIg
aXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwoY2hpbGRyZW4pOworICAgICAgdmFyIHN0ZXA7Cisg
ICAgICBpZiAoaXRlcmF0b3JGbiAhPT0gY2hpbGRyZW4uZW50cmllcykgeworICAgICAgICB2YXIg
aWkgPSAwOworICAgICAgICB3aGlsZSAoIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7
CisgICAgICAgICAgY2hpbGQgPSBzdGVwLnZhbHVlOworICAgICAgICAgIG5leHROYW1lID0gbmV4
dE5hbWVQcmVmaXggKyBnZXRDb21wb25lbnRLZXkoY2hpbGQsIGlpKyspOworICAgICAgICAgIHN1
YnRyZWVDb3VudCArPSB0cmF2ZXJzZUFsbENoaWxkcmVuSW1wbChjaGlsZCwgbmV4dE5hbWUsIGNh
bGxiYWNrLCB0cmF2ZXJzZUNvbnRleHQpOworICAgICAgICB9CisgICAgICB9IGVsc2UgeworICAg
ICAgICBpZiAoImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nKSB7CisgICAgICAgICAgdmFy
IG1hcHNBc0NoaWxkcmVuQWRkZW5kdW0gPSAnJzsKKyAgICAgICAgICBpZiAoUmVhY3RDdXJyZW50
T3duZXIuY3VycmVudCkgeworICAgICAgICAgICAgdmFyIG1hcHNBc0NoaWxkcmVuT3duZXJOYW1l
ID0gUmVhY3RDdXJyZW50T3duZXIuY3VycmVudC5nZXROYW1lKCk7CisgICAgICAgICAgICBpZiAo
bWFwc0FzQ2hpbGRyZW5Pd25lck5hbWUpIHsKKyAgICAgICAgICAgICAgbWFwc0FzQ2hpbGRyZW5B
ZGRlbmR1bSA9ICcgQ2hlY2sgdGhlIHJlbmRlciBtZXRob2Qgb2YgYCcgKyBtYXBzQXNDaGlsZHJl
bk93bmVyTmFtZSArICdgLic7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAg
ICJkZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoZGlkV2FybkFib3V0TWFw
cywgJ1VzaW5nIE1hcHMgYXMgY2hpbGRyZW4gaXMgbm90IHlldCBmdWxseSBzdXBwb3J0ZWQuIEl0
IGlzIGFuICcgKyAnZXhwZXJpbWVudGFsIGZlYXR1cmUgdGhhdCBtaWdodCBiZSByZW1vdmVkLiBD
b252ZXJ0IGl0IHRvIGEgJyArICdzZXF1ZW5jZSAvIGl0ZXJhYmxlIG9mIGtleWVkIFJlYWN0RWxl
bWVudHMgaW5zdGVhZC4lcycsIG1hcHNBc0NoaWxkcmVuQWRkZW5kdW0pIDogdm9pZCAwOworICAg
ICAgICAgIGRpZFdhcm5BYm91dE1hcHMgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIC8vIEl0
ZXJhdG9yIHdpbGwgcHJvdmlkZSBlbnRyeSBbayx2XSB0dXBsZXMgcmF0aGVyIHRoYW4gdmFsdWVz
LgorICAgICAgICB3aGlsZSAoIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7CisgICAg
ICAgICAgdmFyIGVudHJ5ID0gc3RlcC52YWx1ZTsKKyAgICAgICAgICBpZiAoZW50cnkpIHsKKyAg
ICAgICAgICAgIGNoaWxkID0gZW50cnlbMV07CisgICAgICAgICAgICBuZXh0TmFtZSA9IG5leHRO
YW1lUHJlZml4ICsgS2V5RXNjYXBlVXRpbHMuZXNjYXBlKGVudHJ5WzBdKSArIFNVQlNFUEFSQVRP
UiArIGdldENvbXBvbmVudEtleShjaGlsZCwgMCk7CisgICAgICAgICAgICBzdWJ0cmVlQ291bnQg
Kz0gdHJhdmVyc2VBbGxDaGlsZHJlbkltcGwoY2hpbGQsIG5leHROYW1lLCBjYWxsYmFjaywgdHJh
dmVyc2VDb250ZXh0KTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9IGVs
c2UgaWYgKHR5cGUgPT09ICdvYmplY3QnKSB7CisgICAgICB2YXIgYWRkZW5kdW0gPSAnJzsKKyAg
ICAgIGlmICgiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicpIHsKKyAgICAgICAgYWRkZW5k
dW0gPSAnIElmIHlvdSBtZWFudCB0byByZW5kZXIgYSBjb2xsZWN0aW9uIG9mIGNoaWxkcmVuLCB1
c2UgYW4gYXJyYXkgJyArICdpbnN0ZWFkIG9yIHdyYXAgdGhlIG9iamVjdCB1c2luZyBjcmVhdGVG
cmFnbWVudChvYmplY3QpIGZyb20gdGhlICcgKyAnUmVhY3QgYWRkLW9ucy4nOworICAgICAgICBp
ZiAoY2hpbGRyZW4uX2lzUmVhY3RFbGVtZW50KSB7CisgICAgICAgICAgYWRkZW5kdW0gPSAnIEl0
IGxvb2tzIGxpa2UgeW91XCdyZSB1c2luZyBhbiBlbGVtZW50IGNyZWF0ZWQgYnkgYSBkaWZmZXJl
bnQgJyArICd2ZXJzaW9uIG9mIFJlYWN0LiBNYWtlIHN1cmUgdG8gdXNlIG9ubHkgb25lIGNvcHkg
b2YgUmVhY3QuJzsKKyAgICAgICAgfQorICAgICAgICBpZiAoUmVhY3RDdXJyZW50T3duZXIuY3Vy
cmVudCkgeworICAgICAgICAgIHZhciBuYW1lID0gUmVhY3RDdXJyZW50T3duZXIuY3VycmVudC5n
ZXROYW1lKCk7CisgICAgICAgICAgaWYgKG5hbWUpIHsKKyAgICAgICAgICAgIGFkZGVuZHVtICs9
ICcgQ2hlY2sgdGhlIHJlbmRlciBtZXRob2Qgb2YgYCcgKyBuYW1lICsgJ2AuJzsKKyAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIHZhciBjaGlsZHJlblN0cmluZyA9IFN0cmlu
ZyhjaGlsZHJlbik7CisgICAgICAhZmFsc2UgPyAiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlv
bicgPyBpbnZhcmlhbnQoZmFsc2UsICdPYmplY3RzIGFyZSBub3QgdmFsaWQgYXMgYSBSZWFjdCBj
aGlsZCAoZm91bmQ6ICVzKS4lcycsIGNoaWxkcmVuU3RyaW5nID09PSAnW29iamVjdCBPYmplY3Rd
JyA/ICdvYmplY3Qgd2l0aCBrZXlzIHsnICsgT2JqZWN0LmtleXMoY2hpbGRyZW4pLmpvaW4oJywg
JykgKyAnfScgOiBjaGlsZHJlblN0cmluZywgYWRkZW5kdW0pIDogX3Byb2RJbnZhcmlhbnQoJzMx
JywgY2hpbGRyZW5TdHJpbmcgPT09ICdbb2JqZWN0IE9iamVjdF0nID8gJ29iamVjdCB3aXRoIGtl
eXMgeycgKyBPYmplY3Qua2V5cyhjaGlsZHJlbikuam9pbignLCAnKSArICd9JyA6IGNoaWxkcmVu
U3RyaW5nLCBhZGRlbmR1bSkgOiB2b2lkIDA7CisgICAgfQorICB9CisKKyAgcmV0dXJuIHN1YnRy
ZWVDb3VudDsKK30KKworLyoqCisgKiBUcmF2ZXJzZXMgY2hpbGRyZW4gdGhhdCBhcmUgdHlwaWNh
bGx5IHNwZWNpZmllZCBhcyBgcHJvcHMuY2hpbGRyZW5gLCBidXQKKyAqIG1pZ2h0IGFsc28gYmUg
c3BlY2lmaWVkIHRocm91Z2ggYXR0cmlidXRlczoKKyAqCisgKiAtIGB0cmF2ZXJzZUFsbENoaWxk
cmVuKHRoaXMucHJvcHMuY2hpbGRyZW4sIC4uLilgCisgKiAtIGB0cmF2ZXJzZUFsbENoaWxkcmVu
KHRoaXMucHJvcHMubGVmdFBhbmVsQ2hpbGRyZW4sIC4uLilgCisgKgorICogVGhlIGB0cmF2ZXJz
ZUNvbnRleHRgIGlzIGFuIG9wdGlvbmFsIGFyZ3VtZW50IHRoYXQgaXMgcGFzc2VkIHRocm91Z2gg
dGhlCisgKiBlbnRpcmUgdHJhdmVyc2FsLiBJdCBjYW4gYmUgdXNlZCB0byBzdG9yZSBhY2N1bXVs
YXRpb25zIG9yIGFueXRoaW5nIGVsc2UgdGhhdAorICogdGhlIGNhbGxiYWNrIG1pZ2h0IGZpbmQg
cmVsZXZhbnQuCisgKgorICogQHBhcmFtIHs/Kn0gY2hpbGRyZW4gQ2hpbGRyZW4gdHJlZSBvYmpl
Y3QuCisgKiBAcGFyYW0geyFmdW5jdGlvbn0gY2FsbGJhY2sgVG8gaW52b2tlIHVwb24gdHJhdmVy
c2luZyBlYWNoIGNoaWxkLgorICogQHBhcmFtIHs/Kn0gdHJhdmVyc2VDb250ZXh0IENvbnRleHQg
Zm9yIHRyYXZlcnNhbC4KKyAqIEByZXR1cm4geyFudW1iZXJ9IFRoZSBudW1iZXIgb2YgY2hpbGRy
ZW4gaW4gdGhpcyBzdWJ0cmVlLgorICovCitmdW5jdGlvbiB0cmF2ZXJzZUFsbENoaWxkcmVuKGNo
aWxkcmVuLCBjYWxsYmFjaywgdHJhdmVyc2VDb250ZXh0KSB7CisgIGlmIChjaGlsZHJlbiA9PSBu
dWxsKSB7CisgICAgcmV0dXJuIDA7CisgIH0KKworICByZXR1cm4gdHJhdmVyc2VBbGxDaGlsZHJl
bkltcGwoY2hpbGRyZW4sICcnLCBjYWxsYmFjaywgdHJhdmVyc2VDb250ZXh0KTsKK30KKworbW9k
dWxlLmV4cG9ydHMgPSB0cmF2ZXJzZUFsbENoaWxkcmVuOworfSx7IjEiOjEsIjExIjoxMSwiMjIi
OjIyLCIyNSI6MjUsIjI5IjoyOSwiMzAiOjMwLCI4Ijo4fV0sMjc6W2Z1bmN0aW9uKF9kZXJlcV8s
bW9kdWxlLGV4cG9ydHMpeworInVzZSBzdHJpY3QiOworCisvKioKKyAqIENvcHlyaWdodCAoYykg
MjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGlj
ZW5zZSBmb3VuZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkg
b2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAorICogb2YgcGF0ZW50IHJp
Z2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3Rv
cnkuCisgKgorICogCisgKi8KKworZnVuY3Rpb24gbWFrZUVtcHR5RnVuY3Rpb24oYXJnKSB7Cisg
IHJldHVybiBmdW5jdGlvbiAoKSB7CisgICAgcmV0dXJuIGFyZzsKKyAgfTsKK30KKworLyoqCisg
KiBUaGlzIGZ1bmN0aW9uIGFjY2VwdHMgYW5kIGRpc2NhcmRzIGlucHV0czsgaXQgaGFzIG5vIHNp
ZGUgZWZmZWN0cy4gVGhpcyBpcworICogcHJpbWFyaWx5IHVzZWZ1bCBpZGlvbWF0aWNhbGx5IGZv
ciBvdmVycmlkYWJsZSBmdW5jdGlvbiBlbmRwb2ludHMgd2hpY2gKKyAqIGFsd2F5cyBuZWVkIHRv
IGJlIGNhbGxhYmxlLCBzaW5jZSBKUyBsYWNrcyBhIG51bGwtY2FsbCBpZGlvbSBhbGEgQ29jb2Eu
CisgKi8KK3ZhciBlbXB0eUZ1bmN0aW9uID0gZnVuY3Rpb24gZW1wdHlGdW5jdGlvbigpIHt9Owor
CitlbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zID0gbWFrZUVtcHR5RnVuY3Rpb247CitlbXB0eUZ1
bmN0aW9uLnRoYXRSZXR1cm5zRmFsc2UgPSBtYWtlRW1wdHlGdW5jdGlvbihmYWxzZSk7CitlbXB0
eUZ1bmN0aW9uLnRoYXRSZXR1cm5zVHJ1ZSA9IG1ha2VFbXB0eUZ1bmN0aW9uKHRydWUpOworZW1w
dHlGdW5jdGlvbi50aGF0UmV0dXJuc051bGwgPSBtYWtlRW1wdHlGdW5jdGlvbihudWxsKTsKK2Vt
cHR5RnVuY3Rpb24udGhhdFJldHVybnNUaGlzID0gZnVuY3Rpb24gKCkgeworICByZXR1cm4gdGhp
czsKK307CitlbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zQXJndW1lbnQgPSBmdW5jdGlvbiAoYXJn
KSB7CisgIHJldHVybiBhcmc7Cit9OworCittb2R1bGUuZXhwb3J0cyA9IGVtcHR5RnVuY3Rpb247
Cit9LHt9XSwyODpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIENv
cHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBC
U0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9v
dCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAorICog
b2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUg
c2FtZSBkaXJlY3RvcnkuCisgKgorICovCisKKyd1c2Ugc3RyaWN0JzsKKwordmFyIGVtcHR5T2Jq
ZWN0ID0ge307CisKK2lmICgiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicpIHsKKyAgT2Jq
ZWN0LmZyZWV6ZShlbXB0eU9iamVjdCk7Cit9CisKK21vZHVsZS5leHBvcnRzID0gZW1wdHlPYmpl
Y3Q7Cit9LHt9XSwyOTpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAq
IENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLgorICogQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRo
ZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmlsZSBpbiB0aGUg
cm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudAor
ICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0
aGUgc2FtZSBkaXJlY3RvcnkuCisgKgorICovCisKKyd1c2Ugc3RyaWN0JzsKKworLyoqCisgKiBV
c2UgaW52YXJpYW50KCkgdG8gYXNzZXJ0IHN0YXRlIHdoaWNoIHlvdXIgcHJvZ3JhbSBhc3N1bWVz
IHRvIGJlIHRydWUuCisgKgorICogUHJvdmlkZSBzcHJpbnRmLXN0eWxlIGZvcm1hdCAob25seSAl
cyBpcyBzdXBwb3J0ZWQpIGFuZCBhcmd1bWVudHMKKyAqIHRvIHByb3ZpZGUgaW5mb3JtYXRpb24g
YWJvdXQgd2hhdCBicm9rZSBhbmQgd2hhdCB5b3Ugd2VyZQorICogZXhwZWN0aW5nLgorICoKKyAq
IFRoZSBpbnZhcmlhbnQgbWVzc2FnZSB3aWxsIGJlIHN0cmlwcGVkIGluIHByb2R1Y3Rpb24sIGJ1
dCB0aGUgaW52YXJpYW50CisgKiB3aWxsIHJlbWFpbiB0byBlbnN1cmUgbG9naWMgZG9lcyBub3Qg
ZGlmZmVyIGluIHByb2R1Y3Rpb24uCisgKi8KKwordmFyIHZhbGlkYXRlRm9ybWF0ID0gZnVuY3Rp
b24gdmFsaWRhdGVGb3JtYXQoZm9ybWF0KSB7fTsKKworaWYgKCJkZXZlbG9wbWVudCIgIT09ICdw
cm9kdWN0aW9uJykgeworICB2YWxpZGF0ZUZvcm1hdCA9IGZ1bmN0aW9uIHZhbGlkYXRlRm9ybWF0
KGZvcm1hdCkgeworICAgIGlmIChmb3JtYXQgPT09IHVuZGVmaW5lZCkgeworICAgICAgdGhyb3cg
bmV3IEVycm9yKCdpbnZhcmlhbnQgcmVxdWlyZXMgYW4gZXJyb3IgbWVzc2FnZSBhcmd1bWVudCcp
OworICAgIH0KKyAgfTsKK30KKworZnVuY3Rpb24gaW52YXJpYW50KGNvbmRpdGlvbiwgZm9ybWF0
LCBhLCBiLCBjLCBkLCBlLCBmKSB7CisgIHZhbGlkYXRlRm9ybWF0KGZvcm1hdCk7CisKKyAgaWYg
KCFjb25kaXRpb24pIHsKKyAgICB2YXIgZXJyb3I7CisgICAgaWYgKGZvcm1hdCA9PT0gdW5kZWZp
bmVkKSB7CisgICAgICBlcnJvciA9IG5ldyBFcnJvcignTWluaWZpZWQgZXhjZXB0aW9uIG9jY3Vy
cmVkOyB1c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQgJyArICdmb3IgdGhlIGZ1
bGwgZXJyb3IgbWVzc2FnZSBhbmQgYWRkaXRpb25hbCBoZWxwZnVsIHdhcm5pbmdzLicpOworICAg
IH0gZWxzZSB7CisgICAgICB2YXIgYXJncyA9IFthLCBiLCBjLCBkLCBlLCBmXTsKKyAgICAgIHZh
ciBhcmdJbmRleCA9IDA7CisgICAgICBlcnJvciA9IG5ldyBFcnJvcihmb3JtYXQucmVwbGFjZSgv
JXMvZywgZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gYXJnc1thcmdJbmRleCsrXTsKKyAg
ICAgIH0pKTsKKyAgICAgIGVycm9yLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7CisgICAg
fQorCisgICAgZXJyb3IuZnJhbWVzVG9Qb3AgPSAxOyAvLyB3ZSBkb24ndCBjYXJlIGFib3V0IGlu
dmFyaWFudCdzIG93biBmcmFtZQorICAgIHRocm93IGVycm9yOworICB9Cit9CisKK21vZHVsZS5l
eHBvcnRzID0gaW52YXJpYW50OworfSx7fV0sMzA6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4
cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAxNC0yMDE1LCBGYWNlYm9vaywgSW5jLgorICog
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2Vk
IHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmls
ZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25h
bCBncmFudAorICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMg
ZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisgKgorICovCisKKyd1c2Ugc3RyaWN0JzsKKwor
dmFyIGVtcHR5RnVuY3Rpb24gPSBfZGVyZXFfKDI3KTsKKworLyoqCisgKiBTaW1pbGFyIHRvIGlu
dmFyaWFudCBidXQgb25seSBsb2dzIGEgd2FybmluZyBpZiB0aGUgY29uZGl0aW9uIGlzIG5vdCBt
ZXQuCisgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGxvZyBpc3N1ZXMgaW4gZGV2ZWxvcG1lbnQgZW52
aXJvbm1lbnRzIGluIGNyaXRpY2FsCisgKiBwYXRocy4gUmVtb3ZpbmcgdGhlIGxvZ2dpbmcgY29k
ZSBmb3IgcHJvZHVjdGlvbiBlbnZpcm9ubWVudHMgd2lsbCBrZWVwIHRoZQorICogc2FtZSBsb2dp
YyBhbmQgZm9sbG93IHRoZSBzYW1lIGNvZGUgcGF0aHMuCisgKi8KKwordmFyIHdhcm5pbmcgPSBl
bXB0eUZ1bmN0aW9uOworCitpZiAoImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nKSB7Cisg
IChmdW5jdGlvbiAoKSB7CisgICAgdmFyIHByaW50V2FybmluZyA9IGZ1bmN0aW9uIHByaW50V2Fy
bmluZyhmb3JtYXQpIHsKKyAgICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBh
cmdzID0gQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9s
ZW47IF9rZXkrKykgeworICAgICAgICBhcmdzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTsK
KyAgICAgIH0KKworICAgICAgdmFyIGFyZ0luZGV4ID0gMDsKKyAgICAgIHZhciBtZXNzYWdlID0g
J1dhcm5pbmc6ICcgKyBmb3JtYXQucmVwbGFjZSgvJXMvZywgZnVuY3Rpb24gKCkgeworICAgICAg
ICByZXR1cm4gYXJnc1thcmdJbmRleCsrXTsKKyAgICAgIH0pOworICAgICAgaWYgKHR5cGVvZiBj
b25zb2xlICE9PSAndW5kZWZpbmVkJykgeworICAgICAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2Up
OworICAgICAgfQorICAgICAgdHJ5IHsKKyAgICAgICAgLy8gLS0tIFdlbGNvbWUgdG8gZGVidWdn
aW5nIFJlYWN0IC0tLQorICAgICAgICAvLyBUaGlzIGVycm9yIHdhcyB0aHJvd24gYXMgYSBjb252
ZW5pZW5jZSBzbyB0aGF0IHlvdSBjYW4gdXNlIHRoaXMgc3RhY2sKKyAgICAgICAgLy8gdG8gZmlu
ZCB0aGUgY2FsbHNpdGUgdGhhdCBjYXVzZWQgdGhpcyB3YXJuaW5nIHRvIGZpcmUuCisgICAgICAg
IHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTsKKyAgICAgIH0gY2F0Y2ggKHgpIHt9CisgICAgfTsK
KworICAgIHdhcm5pbmcgPSBmdW5jdGlvbiB3YXJuaW5nKGNvbmRpdGlvbiwgZm9ybWF0KSB7Cisg
ICAgICBpZiAoZm9ybWF0ID09PSB1bmRlZmluZWQpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9y
KCdgd2FybmluZyhjb25kaXRpb24sIGZvcm1hdCwgLi4uYXJncylgIHJlcXVpcmVzIGEgd2Fybmlu
ZyAnICsgJ21lc3NhZ2UgYXJndW1lbnQnKTsKKyAgICAgIH0KKworICAgICAgaWYgKGZvcm1hdC5p
bmRleE9mKCdGYWlsZWQgQ29tcG9zaXRlIHByb3BUeXBlOiAnKSA9PT0gMCkgeworICAgICAgICBy
ZXR1cm47IC8vIElnbm9yZSBDb21wb3NpdGVDb21wb25lbnQgcHJvcHR5cGUgY2hlY2suCisgICAg
ICB9CisKKyAgICAgIGlmICghY29uZGl0aW9uKSB7CisgICAgICAgIGZvciAodmFyIF9sZW4yID0g
YXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4yID4gMiA/IF9sZW4yIC0gMiA6IDAp
LCBfa2V5MiA9IDI7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHsKKyAgICAgICAgICBhcmdzW19r
ZXkyIC0gMl0gPSBhcmd1bWVudHNbX2tleTJdOworICAgICAgICB9CisKKyAgICAgICAgcHJpbnRX
YXJuaW5nLmFwcGx5KHVuZGVmaW5lZCwgW2Zvcm1hdF0uY29uY2F0KGFyZ3MpKTsKKyAgICAgIH0K
KyAgICB9OworICB9KSgpOworfQorCittb2R1bGUuZXhwb3J0cyA9IHdhcm5pbmc7Cit9LHsiMjci
OjI3fV0sMzE6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpeworLyoKK29iamVjdC1h
c3NpZ24KKyhjKSBTaW5kcmUgU29yaHVzCitAbGljZW5zZSBNSVQKKyovCisKKyd1c2Ugc3RyaWN0
JzsKKy8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovCit2YXIgZ2V0T3duUHJvcGVy
dHlTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sczsKK3ZhciBoYXNPd25Qcm9w
ZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7Cit2YXIgcHJvcElzRW51bWVy
YWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7CisKK2Z1bmN0aW9u
IHRvT2JqZWN0KHZhbCkgeworICAgIGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmlu
ZWQpIHsKKyAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignT2JqZWN0LmFzc2lnbiBjYW5ub3Qg
YmUgY2FsbGVkIHdpdGggbnVsbCBvciB1bmRlZmluZWQnKTsKKyAgICB9CisKKyAgICByZXR1cm4g
T2JqZWN0KHZhbCk7Cit9CisKK2Z1bmN0aW9uIHNob3VsZFVzZU5hdGl2ZSgpIHsKKyAgICB0cnkg
eworICAgICAgICBpZiAoIU9iamVjdC5hc3NpZ24pIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIERldGVjdCBidWdneSBwcm9wZXJ0eSBlbnVtZXJh
dGlvbiBvcmRlciBpbiBvbGRlciBWOCB2ZXJzaW9ucy4KKworICAgICAgICAvLyBodHRwczovL2J1
Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD00MTE4CisgICAgICAgIHZhciB0
ZXN0MSA9IG5ldyBTdHJpbmcoJ2FiYycpOyAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXct
d3JhcHBlcnMKKyAgICAgICAgdGVzdDFbNV0gPSAnZGUnOworICAgICAgICBpZiAoT2JqZWN0Lmdl
dE93blByb3BlcnR5TmFtZXModGVzdDEpWzBdID09PSAnNScpIHsKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5v
cmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMwNTYKKyAgICAgICAgdmFyIHRlc3QyID0ge307Cisg
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTA7IGkrKykgeworICAgICAgICAgICAgdGVzdDJb
J18nICsgU3RyaW5nLmZyb21DaGFyQ29kZShpKV0gPSBpOworICAgICAgICB9CisgICAgICAgIHZh
ciBvcmRlcjIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MikubWFwKGZ1bmN0aW9u
IChuKSB7CisgICAgICAgICAgICByZXR1cm4gdGVzdDJbbl07CisgICAgICAgIH0pOworICAgICAg
ICBpZiAob3JkZXIyLmpvaW4oJycpICE9PSAnMDEyMzQ1Njc4OScpIHsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1
bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMwNTYKKyAgICAgICAgdmFyIHRlc3QzID0ge307
CisgICAgICAgICdhYmNkZWZnaGlqa2xtbm9wcXJzdCcuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rp
b24gKGxldHRlcikgeworICAgICAgICAgICAgdGVzdDNbbGV0dGVyXSA9IGxldHRlcjsKKyAgICAg
ICAgfSk7CisgICAgICAgIGlmIChPYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LCB0ZXN0Mykp
LmpvaW4oJycpICE9PQorICAgICAgICAgICAgICAgICdhYmNkZWZnaGlqa2xtbm9wcXJzdCcpIHsK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0gY2F0Y2ggKGVycikgeworICAgICAgICAvLyBXZSBkb24ndCBleHBlY3QgYW55
IG9mIHRoZSBhYm92ZSB0byB0aHJvdywgYnV0IGJldHRlciB0byBiZSBzYWZlLgorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorfQorCittb2R1bGUuZXhwb3J0cyA9IHNob3VsZFVzZU5hdGl2
ZSgpID8gT2JqZWN0LmFzc2lnbiA6IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkgeworICAgIHZh
ciBmcm9tOworICAgIHZhciB0byA9IHRvT2JqZWN0KHRhcmdldCk7CisgICAgdmFyIHN5bWJvbHM7
CisKKyAgICBmb3IgKHZhciBzID0gMTsgcyA8IGFyZ3VtZW50cy5sZW5ndGg7IHMrKykgeworICAg
ICAgICBmcm9tID0gT2JqZWN0KGFyZ3VtZW50c1tzXSk7CisKKyAgICAgICAgZm9yICh2YXIga2V5
IGluIGZyb20pIHsKKyAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGZyb20sIGtl
eSkpIHsKKyAgICAgICAgICAgICAgICB0b1trZXldID0gZnJvbVtrZXldOworICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGdldE93blByb3BlcnR5U3ltYm9scykgeworICAg
ICAgICAgICAgc3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9scyhmcm9tKTsKKyAgICAgICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3ltYm9scy5sZW5ndGg7IGkrKykgeworICAgICAgICAg
ICAgICAgIGlmIChwcm9wSXNFbnVtZXJhYmxlLmNhbGwoZnJvbSwgc3ltYm9sc1tpXSkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgdG9bc3ltYm9sc1tpXV0gPSBmcm9tW3N5bWJvbHNbaV1dOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJl
dHVybiB0bzsKK307CisKK30se31dLDMyOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRz
KXsKKy8qKgorICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4KKyAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1
bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlCisgKiBMSUNFTlNFIGZpbGUg
aW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwg
Z3JhbnQKKyAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZp
bGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LgorICovCisKKyd1c2Ugc3RyaWN0JzsKKworaWYgKCJk
ZXZlbG9wbWVudCIgIT09ICdwcm9kdWN0aW9uJykgeworICB2YXIgaW52YXJpYW50ID0gX2RlcmVx
XygyOSk7CisgIHZhciB3YXJuaW5nID0gX2RlcmVxXygzMCk7CisgIHZhciBSZWFjdFByb3BUeXBl
c1NlY3JldCA9IF9kZXJlcV8oMzUpOworICB2YXIgbG9nZ2VkVHlwZUZhaWx1cmVzID0ge307Cit9
CisKKy8qKgorICogQXNzZXJ0IHRoYXQgdGhlIHZhbHVlcyBtYXRjaCB3aXRoIHRoZSB0eXBlIHNw
ZWNzLgorICogRXJyb3IgbWVzc2FnZXMgYXJlIG1lbW9yaXplZCBhbmQgd2lsbCBvbmx5IGJlIHNo
b3duIG9uY2UuCisgKgorICogQHBhcmFtIHtvYmplY3R9IHR5cGVTcGVjcyBNYXAgb2YgbmFtZSB0
byBhIFJlYWN0UHJvcFR5cGUKKyAqIEBwYXJhbSB7b2JqZWN0fSB2YWx1ZXMgUnVudGltZSB2YWx1
ZXMgdGhhdCBuZWVkIHRvIGJlIHR5cGUtY2hlY2tlZAorICogQHBhcmFtIHtzdHJpbmd9IGxvY2F0
aW9uIGUuZy4gInByb3AiLCAiY29udGV4dCIsICJjaGlsZCBjb250ZXh0IgorICogQHBhcmFtIHtz
dHJpbmd9IGNvbXBvbmVudE5hbWUgTmFtZSBvZiB0aGUgY29tcG9uZW50IGZvciBlcnJvciBtZXNz
YWdlcy4KKyAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBnZXRTdGFjayBSZXR1cm5zIHRoZSBjb21wb25l
bnQgc3RhY2suCisgKiBAcHJpdmF0ZQorICovCitmdW5jdGlvbiBjaGVja1Byb3BUeXBlcyh0eXBl
U3BlY3MsIHZhbHVlcywgbG9jYXRpb24sIGNvbXBvbmVudE5hbWUsIGdldFN0YWNrKSB7CisgIGlm
ICgiZGV2ZWxvcG1lbnQiICE9PSAncHJvZHVjdGlvbicpIHsKKyAgICBmb3IgKHZhciB0eXBlU3Bl
Y05hbWUgaW4gdHlwZVNwZWNzKSB7CisgICAgICBpZiAodHlwZVNwZWNzLmhhc093blByb3BlcnR5
KHR5cGVTcGVjTmFtZSkpIHsKKyAgICAgICAgdmFyIGVycm9yOworICAgICAgICAvLyBQcm9wIHR5
cGUgdmFsaWRhdGlvbiBtYXkgdGhyb3cuIEluIGNhc2UgdGhleSBkbywgd2UgZG9uJ3Qgd2FudCB0
bworICAgICAgICAvLyBmYWlsIHRoZSByZW5kZXIgcGhhc2Ugd2hlcmUgaXQgZGlkbid0IGZhaWwg
YmVmb3JlLiBTbyB3ZSBsb2cgaXQuCisgICAgICAgIC8vIEFmdGVyIHRoZXNlIGhhdmUgYmVlbiBj
bGVhbmVkIHVwLCB3ZSdsbCBsZXQgdGhlbSB0aHJvdy4KKyAgICAgICAgdHJ5IHsKKyAgICAgICAg
ICAvLyBUaGlzIGlzIGludGVudGlvbmFsbHkgYW4gaW52YXJpYW50IHRoYXQgZ2V0cyBjYXVnaHQu
IEl0J3MgdGhlIHNhbWUKKyAgICAgICAgICAvLyBiZWhhdmlvciBhcyB3aXRob3V0IHRoaXMgc3Rh
dGVtZW50IGV4Y2VwdCB3aXRoIGEgYmV0dGVyIG1lc3NhZ2UuCisgICAgICAgICAgaW52YXJpYW50
KHR5cGVvZiB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSA9PT0gJ2Z1bmN0aW9uJywgJyVzOiAlcyB0
eXBlIGAlc2AgaXMgaW52YWxpZDsgaXQgbXVzdCBiZSBhIGZ1bmN0aW9uLCB1c3VhbGx5IGZyb20g
JyArICdSZWFjdC5Qcm9wVHlwZXMuJywgY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnLCBs
b2NhdGlvbiwgdHlwZVNwZWNOYW1lKTsKKyAgICAgICAgICBlcnJvciA9IHR5cGVTcGVjc1t0eXBl
U3BlY05hbWVdKHZhbHVlcywgdHlwZVNwZWNOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwg
bnVsbCwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpOworICAgICAgICB9IGNhdGNoIChleCkgeworICAg
ICAgICAgIGVycm9yID0gZXg7CisgICAgICAgIH0KKyAgICAgICAgd2FybmluZyghZXJyb3IgfHwg
ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciwgJyVzOiB0eXBlIHNwZWNpZmljYXRpb24gb2YgJXMgYCVz
YCBpcyBpbnZhbGlkOyB0aGUgdHlwZSBjaGVja2VyICcgKyAnZnVuY3Rpb24gbXVzdCByZXR1cm4g
YG51bGxgIG9yIGFuIGBFcnJvcmAgYnV0IHJldHVybmVkIGEgJXMuICcgKyAnWW91IG1heSBoYXZl
IGZvcmdvdHRlbiB0byBwYXNzIGFuIGFyZ3VtZW50IHRvIHRoZSB0eXBlIGNoZWNrZXIgJyArICdj
cmVhdG9yIChhcnJheU9mLCBpbnN0YW5jZU9mLCBvYmplY3RPZiwgb25lT2YsIG9uZU9mVHlwZSwg
YW5kICcgKyAnc2hhcGUgYWxsIHJlcXVpcmUgYW4gYXJndW1lbnQpLicsIGNvbXBvbmVudE5hbWUg
fHwgJ1JlYWN0IGNsYXNzJywgbG9jYXRpb24sIHR5cGVTcGVjTmFtZSwgdHlwZW9mIGVycm9yKTsK
KyAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgIShlcnJvci5tZXNzYWdlIGlu
IGxvZ2dlZFR5cGVGYWlsdXJlcykpIHsKKyAgICAgICAgICAvLyBPbmx5IG1vbml0b3IgdGhpcyBm
YWlsdXJlIG9uY2UgYmVjYXVzZSB0aGVyZSB0ZW5kcyB0byBiZSBhIGxvdCBvZiB0aGUKKyAgICAg
ICAgICAvLyBzYW1lIGVycm9yLgorICAgICAgICAgIGxvZ2dlZFR5cGVGYWlsdXJlc1tlcnJvci5t
ZXNzYWdlXSA9IHRydWU7CisKKyAgICAgICAgICB2YXIgc3RhY2sgPSBnZXRTdGFjayA/IGdldFN0
YWNrKCkgOiAnJzsKKworICAgICAgICAgIHdhcm5pbmcoZmFsc2UsICdGYWlsZWQgJXMgdHlwZTog
JXMlcycsIGxvY2F0aW9uLCBlcnJvci5tZXNzYWdlLCBzdGFjayAhPSBudWxsID8gc3RhY2sgOiAn
Jyk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KK30KKworbW9kdWxlLmV4cG9ydHMg
PSBjaGVja1Byb3BUeXBlczsKKworfSx7IjI5IjoyOSwiMzAiOjMwLCIzNSI6MzV9XSwzMzpbZnVu
Y3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIENvcHlyaWdodCAyMDEzLXBy
ZXNlbnQsIEZhY2Vib29rLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRo
aXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZv
dW5kIGluIHRoZQorICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlz
IHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50CisgKiBvZiBwYXRlbnQgcmlnaHRzIGNh
biBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAq
LworCisndXNlIHN0cmljdCc7CisKKy8vIFJlYWN0IDE1LjUgcmVmZXJlbmNlcyB0aGlzIG1vZHVs
ZSwgYW5kIGFzc3VtZXMgUHJvcFR5cGVzIGFyZSBzdGlsbCBjYWxsYWJsZSBpbiBwcm9kdWN0aW9u
LgorLy8gVGhlcmVmb3JlIHdlIHJlLWV4cG9ydCBkZXZlbG9wbWVudC1vbmx5IHZlcnNpb24gd2l0
aCBhbGwgdGhlIFByb3BUeXBlcyBjaGVja3MgaGVyZS4KKy8vIEhvd2V2ZXIgaWYgb25lIGlzIG1p
Z3JhdGluZyB0byB0aGUgYHByb3AtdHlwZXNgIG5wbSBsaWJyYXJ5LCB0aGV5IHdpbGwgZ28gdGhy
b3VnaCB0aGUKKy8vIGBpbmRleC5qc2AgZW50cnkgcG9pbnQsIGFuZCBpdCB3aWxsIGJyYW5jaCBk
ZXBlbmRpbmcgb24gdGhlIGVudmlyb25tZW50LgordmFyIGZhY3RvcnkgPSBfZGVyZXFfKDM0KTsK
K21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXNWYWxpZEVsZW1lbnQpIHsKKyAgLy8gSXQgaXMg
c3RpbGwgYWxsb3dlZCBpbiAxNS41LgorICB2YXIgdGhyb3dPbkRpcmVjdEFjY2VzcyA9IGZhbHNl
OworICByZXR1cm4gZmFjdG9yeShpc1ZhbGlkRWxlbWVudCwgdGhyb3dPbkRpcmVjdEFjY2Vzcyk7
Cit9OworCit9LHsiMzQiOjM0fV0sMzQ6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMp
eworLyoqCisgKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLgorICogQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVu
ZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGUKKyAqIExJQ0VOU0UgZmlsZSBp
biB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBn
cmFudAorICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmls
ZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisgKi8KKworJ3VzZSBzdHJpY3QnOworCit2YXIgZW1w
dHlGdW5jdGlvbiA9IF9kZXJlcV8oMjcpOwordmFyIGludmFyaWFudCA9IF9kZXJlcV8oMjkpOwor
dmFyIHdhcm5pbmcgPSBfZGVyZXFfKDMwKTsKKwordmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0g
X2RlcmVxXygzNSk7Cit2YXIgY2hlY2tQcm9wVHlwZXMgPSBfZGVyZXFfKDMyKTsKKworbW9kdWxl
LmV4cG9ydHMgPSBmdW5jdGlvbihpc1ZhbGlkRWxlbWVudCwgdGhyb3dPbkRpcmVjdEFjY2Vzcykg
eworICAvKiBnbG9iYWwgU3ltYm9sICovCisgIHZhciBJVEVSQVRPUl9TWU1CT0wgPSB0eXBlb2Yg
U3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5pdGVyYXRvcjsKKyAgdmFyIEZBVVhfSVRF
UkFUT1JfU1lNQk9MID0gJ0BAaXRlcmF0b3InOyAvLyBCZWZvcmUgU3ltYm9sIHNwZWMuCisKKyAg
LyoqCisgICAqIFJldHVybnMgdGhlIGl0ZXJhdG9yIG1ldGhvZCBmdW5jdGlvbiBjb250YWluZWQg
b24gdGhlIGl0ZXJhYmxlIG9iamVjdC4KKyAgICoKKyAgICogQmUgc3VyZSB0byBpbnZva2UgdGhl
IGZ1bmN0aW9uIHdpdGggdGhlIGl0ZXJhYmxlIGFzIGNvbnRleHQ6CisgICAqCisgICAqICAgICB2
YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4obXlJdGVyYWJsZSk7CisgICAqICAgICBpZiAo
aXRlcmF0b3JGbikgeworICAgKiAgICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwo
bXlJdGVyYWJsZSk7CisgICAqICAgICAgIC4uLgorICAgKiAgICAgfQorICAgKgorICAgKiBAcGFy
YW0gez9vYmplY3R9IG1heWJlSXRlcmFibGUKKyAgICogQHJldHVybiB7P2Z1bmN0aW9ufQorICAg
Ki8KKyAgZnVuY3Rpb24gZ2V0SXRlcmF0b3JGbihtYXliZUl0ZXJhYmxlKSB7CisgICAgdmFyIGl0
ZXJhdG9yRm4gPSBtYXliZUl0ZXJhYmxlICYmIChJVEVSQVRPUl9TWU1CT0wgJiYgbWF5YmVJdGVy
YWJsZVtJVEVSQVRPUl9TWU1CT0xdIHx8IG1heWJlSXRlcmFibGVbRkFVWF9JVEVSQVRPUl9TWU1C
T0xdKTsKKyAgICBpZiAodHlwZW9mIGl0ZXJhdG9yRm4gPT09ICdmdW5jdGlvbicpIHsKKyAgICAg
IHJldHVybiBpdGVyYXRvckZuOworICAgIH0KKyAgfQorCisgIC8qKgorICAgKiBDb2xsZWN0aW9u
IG9mIG1ldGhvZHMgdGhhdCBhbGxvdyBkZWNsYXJhdGlvbiBhbmQgdmFsaWRhdGlvbiBvZiBwcm9w
cyB0aGF0IGFyZQorICAgKiBzdXBwbGllZCB0byBSZWFjdCBjb21wb25lbnRzLiBFeGFtcGxlIHVz
YWdlOgorICAgKgorICAgKiAgIHZhciBQcm9wcyA9IHJlcXVpcmUoJ1JlYWN0UHJvcFR5cGVzJyk7
CisgICAqICAgdmFyIE15QXJ0aWNsZSA9IFJlYWN0LmNyZWF0ZUNsYXNzKHsKKyAgICogICAgIHBy
b3BUeXBlczogeworICAgKiAgICAgICAvLyBBbiBvcHRpb25hbCBzdHJpbmcgcHJvcCBuYW1lZCAi
ZGVzY3JpcHRpb24iLgorICAgKiAgICAgICBkZXNjcmlwdGlvbjogUHJvcHMuc3RyaW5nLAorICAg
KgorICAgKiAgICAgICAvLyBBIHJlcXVpcmVkIGVudW0gcHJvcCBuYW1lZCAiY2F0ZWdvcnkiLgor
ICAgKiAgICAgICBjYXRlZ29yeTogUHJvcHMub25lT2YoWydOZXdzJywnUGhvdG9zJ10pLmlzUmVx
dWlyZWQsCisgICAqCisgICAqICAgICAgIC8vIEEgcHJvcCBuYW1lZCAiZGlhbG9nIiB0aGF0IHJl
cXVpcmVzIGFuIGluc3RhbmNlIG9mIERpYWxvZy4KKyAgICogICAgICAgZGlhbG9nOiBQcm9wcy5p
bnN0YW5jZU9mKERpYWxvZykuaXNSZXF1aXJlZAorICAgKiAgICAgfSwKKyAgICogICAgIHJlbmRl
cjogZnVuY3Rpb24oKSB7IC4uLiB9CisgICAqICAgfSk7CisgICAqCisgICAqIEEgbW9yZSBmb3Jt
YWwgc3BlY2lmaWNhdGlvbiBvZiBob3cgdGhlc2UgbWV0aG9kcyBhcmUgdXNlZDoKKyAgICoKKyAg
ICogICB0eXBlIDo9IGFycmF5fGJvb2x8ZnVuY3xvYmplY3R8bnVtYmVyfHN0cmluZ3xvbmVPZihb
Li4uXSl8aW5zdGFuY2VPZiguLi4pCisgICAqICAgZGVjbCA6PSBSZWFjdFByb3BUeXBlcy57dHlw
ZX0oLmlzUmVxdWlyZWQpPworICAgKgorICAgKiBFYWNoIGFuZCBldmVyeSBkZWNsYXJhdGlvbiBw
cm9kdWNlcyBhIGZ1bmN0aW9uIHdpdGggdGhlIHNhbWUgc2lnbmF0dXJlLiBUaGlzCisgICAqIGFs
bG93cyB0aGUgY3JlYXRpb24gb2YgY3VzdG9tIHZhbGlkYXRpb24gZnVuY3Rpb25zLiBGb3IgZXhh
bXBsZToKKyAgICoKKyAgICogIHZhciBNeUxpbmsgPSBSZWFjdC5jcmVhdGVDbGFzcyh7CisgICAq
ICAgIHByb3BUeXBlczogeworICAgKiAgICAgIC8vIEFuIG9wdGlvbmFsIHN0cmluZyBvciBVUkkg
cHJvcCBuYW1lZCAiaHJlZiIuCisgICAqICAgICAgaHJlZjogZnVuY3Rpb24ocHJvcHMsIHByb3BO
YW1lLCBjb21wb25lbnROYW1lKSB7CisgICAqICAgICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNb
cHJvcE5hbWVdOworICAgKiAgICAgICAgaWYgKHByb3BWYWx1ZSAhPSBudWxsICYmIHR5cGVvZiBw
cm9wVmFsdWUgIT09ICdzdHJpbmcnICYmCisgICAqICAgICAgICAgICAgIShwcm9wVmFsdWUgaW5z
dGFuY2VvZiBVUkkpKSB7CisgICAqICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoCisgICAqICAg
ICAgICAgICAgJ0V4cGVjdGVkIGEgc3RyaW5nIG9yIGFuIFVSSSBmb3IgJyArIHByb3BOYW1lICsg
JyBpbiAnICsKKyAgICogICAgICAgICAgICBjb21wb25lbnROYW1lCisgICAqICAgICAgICAgICk7
CisgICAqICAgICAgICB9CisgICAqICAgICAgfQorICAgKiAgICB9LAorICAgKiAgICByZW5kZXI6
IGZ1bmN0aW9uKCkgey4uLn0KKyAgICogIH0pOworICAgKgorICAgKiBAaW50ZXJuYWwKKyAgICov
CisKKyAgdmFyIEFOT05ZTU9VUyA9ICc8PGFub255bW91cz4+JzsKKworICAvLyBJbXBvcnRhbnQh
CisgIC8vIEtlZXAgdGhpcyBsaXN0IGluIHN5bmMgd2l0aCBwcm9kdWN0aW9uIHZlcnNpb24gaW4g
YC4vZmFjdG9yeVdpdGhUaHJvd2luZ1NoaW1zLmpzYC4KKyAgdmFyIFJlYWN0UHJvcFR5cGVzID0g
eworICAgIGFycmF5OiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignYXJyYXknKSwKKyAgICBi
b29sOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignYm9vbGVhbicpLAorICAgIGZ1bmM6IGNy
ZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdmdW5jdGlvbicpLAorICAgIG51bWJlcjogY3JlYXRl
UHJpbWl0aXZlVHlwZUNoZWNrZXIoJ251bWJlcicpLAorICAgIG9iamVjdDogY3JlYXRlUHJpbWl0
aXZlVHlwZUNoZWNrZXIoJ29iamVjdCcpLAorICAgIHN0cmluZzogY3JlYXRlUHJpbWl0aXZlVHlw
ZUNoZWNrZXIoJ3N0cmluZycpLAorICAgIHN5bWJvbDogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNr
ZXIoJ3N5bWJvbCcpLAorCisgICAgYW55OiBjcmVhdGVBbnlUeXBlQ2hlY2tlcigpLAorICAgIGFy
cmF5T2Y6IGNyZWF0ZUFycmF5T2ZUeXBlQ2hlY2tlciwKKyAgICBlbGVtZW50OiBjcmVhdGVFbGVt
ZW50VHlwZUNoZWNrZXIoKSwKKyAgICBpbnN0YW5jZU9mOiBjcmVhdGVJbnN0YW5jZVR5cGVDaGVj
a2VyLAorICAgIG5vZGU6IGNyZWF0ZU5vZGVDaGVja2VyKCksCisgICAgb2JqZWN0T2Y6IGNyZWF0
ZU9iamVjdE9mVHlwZUNoZWNrZXIsCisgICAgb25lT2Y6IGNyZWF0ZUVudW1UeXBlQ2hlY2tlciwK
KyAgICBvbmVPZlR5cGU6IGNyZWF0ZVVuaW9uVHlwZUNoZWNrZXIsCisgICAgc2hhcGU6IGNyZWF0
ZVNoYXBlVHlwZUNoZWNrZXIKKyAgfTsKKworICAvKioKKyAgICogaW5saW5lZCBPYmplY3QuaXMg
cG9seWZpbGwgdG8gYXZvaWQgcmVxdWlyaW5nIGNvbnN1bWVycyBzaGlwIHRoZWlyIG93bgorICAg
KiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0
L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvaXMKKyAgICovCisgIC8qZXNsaW50LWRp
c2FibGUgbm8tc2VsZi1jb21wYXJlKi8KKyAgZnVuY3Rpb24gaXMoeCwgeSkgeworICAgIC8vIFNh
bWVWYWx1ZSBhbGdvcml0aG0KKyAgICBpZiAoeCA9PT0geSkgeworICAgICAgLy8gU3RlcHMgMS01
LCA3LTEwCisgICAgICAvLyBTdGVwcyA2LmItNi5lOiArMCAhPSAtMAorICAgICAgcmV0dXJuIHgg
IT09IDAgfHwgMSAvIHggPT09IDEgLyB5OworICAgIH0gZWxzZSB7CisgICAgICAvLyBTdGVwIDYu
YTogTmFOID09IE5hTgorICAgICAgcmV0dXJuIHggIT09IHggJiYgeSAhPT0geTsKKyAgICB9Cisg
IH0KKyAgLyplc2xpbnQtZW5hYmxlIG5vLXNlbGYtY29tcGFyZSovCisKKyAgLyoqCisgICAqIFdl
IHVzZSBhbiBFcnJvci1saWtlIG9iamVjdCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBhcyBw
ZW9wbGUgbWF5IGNhbGwKKyAgICogUHJvcFR5cGVzIGRpcmVjdGx5IGFuZCBpbnNwZWN0IHRoZWly
IG91dHB1dC4gSG93ZXZlciwgd2UgZG9uJ3QgdXNlIHJlYWwKKyAgICogRXJyb3JzIGFueW1vcmUu
IFdlIGRvbid0IGluc3BlY3QgdGhlaXIgc3RhY2sgYW55d2F5LCBhbmQgY3JlYXRpbmcgdGhlbQor
ICAgKiBpcyBwcm9oaWJpdGl2ZWx5IGV4cGVuc2l2ZSBpZiB0aGV5IGFyZSBjcmVhdGVkIHRvbyBv
ZnRlbiwgc3VjaCBhcyB3aGF0CisgICAqIGhhcHBlbnMgaW4gb25lT2ZUeXBlKCkgZm9yIGFueSB0
eXBlIGJlZm9yZSB0aGUgb25lIHRoYXQgbWF0Y2hlZC4KKyAgICovCisgIGZ1bmN0aW9uIFByb3BU
eXBlRXJyb3IobWVzc2FnZSkgeworICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7CisgICAgdGhp
cy5zdGFjayA9ICcnOworICB9CisgIC8vIE1ha2UgYGluc3RhbmNlb2YgRXJyb3JgIHN0aWxsIHdv
cmsgZm9yIHJldHVybmVkIGVycm9ycy4KKyAgUHJvcFR5cGVFcnJvci5wcm90b3R5cGUgPSBFcnJv
ci5wcm90b3R5cGU7CisKKyAgZnVuY3Rpb24gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFs
aWRhdGUpIHsKKyAgICBpZiAoImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nKSB7CisgICAg
ICB2YXIgbWFudWFsUHJvcFR5cGVDYWxsQ2FjaGUgPSB7fTsKKyAgICB9CisgICAgZnVuY3Rpb24g
Y2hlY2tUeXBlKGlzUmVxdWlyZWQsIHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9j
YXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KSB7CisgICAgICBjb21wb25lbnROYW1lID0gY29t
cG9uZW50TmFtZSB8fCBBTk9OWU1PVVM7CisgICAgICBwcm9wRnVsbE5hbWUgPSBwcm9wRnVsbE5h
bWUgfHwgcHJvcE5hbWU7CisKKyAgICAgIGlmIChzZWNyZXQgIT09IFJlYWN0UHJvcFR5cGVzU2Vj
cmV0KSB7CisgICAgICAgIGlmICh0aHJvd09uRGlyZWN0QWNjZXNzKSB7CisgICAgICAgICAgLy8g
TmV3IGJlaGF2aW9yIG9ubHkgZm9yIHVzZXJzIG9mIGBwcm9wLXR5cGVzYCBwYWNrYWdlCisgICAg
ICAgICAgaW52YXJpYW50KAorICAgICAgICAgICAgZmFsc2UsCisgICAgICAgICAgICAnQ2FsbGlu
ZyBQcm9wVHlwZXMgdmFsaWRhdG9ycyBkaXJlY3RseSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBg
cHJvcC10eXBlc2AgcGFja2FnZS4gJyArCisgICAgICAgICAgICAnVXNlIGBQcm9wVHlwZXMuY2hl
Y2tQcm9wVHlwZXMoKWAgdG8gY2FsbCB0aGVtLiAnICsKKyAgICAgICAgICAgICdSZWFkIG1vcmUg
YXQgaHR0cDovL2ZiLm1lL3VzZS1jaGVjay1wcm9wLXR5cGVzJworICAgICAgICAgICk7CisgICAg
ICAgIH0gZWxzZSBpZiAoImRldmVsb3BtZW50IiAhPT0gJ3Byb2R1Y3Rpb24nICYmIHR5cGVvZiBj
b25zb2xlICE9PSAndW5kZWZpbmVkJykgeworICAgICAgICAgIC8vIE9sZCBiZWhhdmlvciBmb3Ig
cGVvcGxlIHVzaW5nIFJlYWN0LlByb3BUeXBlcworICAgICAgICAgIHZhciBjYWNoZUtleSA9IGNv
bXBvbmVudE5hbWUgKyAnOicgKyBwcm9wTmFtZTsKKyAgICAgICAgICBpZiAoIW1hbnVhbFByb3BU
eXBlQ2FsbENhY2hlW2NhY2hlS2V5XSkgeworICAgICAgICAgICAgd2FybmluZygKKyAgICAgICAg
ICAgICAgZmFsc2UsCisgICAgICAgICAgICAgICdZb3UgYXJlIG1hbnVhbGx5IGNhbGxpbmcgYSBS
ZWFjdC5Qcm9wVHlwZXMgdmFsaWRhdGlvbiAnICsKKyAgICAgICAgICAgICAgJ2Z1bmN0aW9uIGZv
ciB0aGUgYCVzYCBwcm9wIG9uIGAlc2AuIFRoaXMgaXMgZGVwcmVjYXRlZCAnICsKKyAgICAgICAg
ICAgICAgJ2FuZCB3aWxsIHRocm93IGluIHRoZSBzdGFuZGFsb25lIGBwcm9wLXR5cGVzYCBwYWNr
YWdlLiAnICsKKyAgICAgICAgICAgICAgJ1lvdSBtYXkgYmUgc2VlaW5nIHRoaXMgd2FybmluZyBk
dWUgdG8gYSB0aGlyZC1wYXJ0eSBQcm9wVHlwZXMgJyArCisgICAgICAgICAgICAgICdsaWJyYXJ5
LiBTZWUgaHR0cHM6Ly9mYi5tZS9yZWFjdC13YXJuaW5nLWRvbnQtY2FsbC1wcm9wdHlwZXMgJyAr
ICdmb3IgZGV0YWlscy4nLAorICAgICAgICAgICAgICBwcm9wRnVsbE5hbWUsCisgICAgICAgICAg
ICAgIGNvbXBvbmVudE5hbWUKKyAgICAgICAgICAgICk7CisgICAgICAgICAgICBtYW51YWxQcm9w
VHlwZUNhbGxDYWNoZVtjYWNoZUtleV0gPSB0cnVlOworICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgfQorICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PSBudWxsKSB7CisgICAgICAgIGlm
IChpc1JlcXVpcmVkKSB7CisgICAgICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PT0gbnVsbCkg
eworICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdUaGUgJyArIGxvY2F0aW9u
ICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIGlzIG1hcmtlZCBhcyByZXF1aXJlZCAnICsgKCdp
biBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgYnV0IGl0cyB2YWx1ZSBpcyBgbnVsbGAuJykpOwor
ICAgICAgICAgIH0KKyAgICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1RoZSAnICsg
bG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2AgaXMgbWFya2VkIGFzIHJlcXVpcmVk
IGluICcgKyAoJ2AnICsgY29tcG9uZW50TmFtZSArICdgLCBidXQgaXRzIHZhbHVlIGlzIGB1bmRl
ZmluZWRgLicpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgIH0gZWxz
ZSB7CisgICAgICAgIHJldHVybiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5h
bWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpOworICAgICAgfQorICAgIH0KKworICAgIHZhciBj
aGFpbmVkQ2hlY2tUeXBlID0gY2hlY2tUeXBlLmJpbmQobnVsbCwgZmFsc2UpOworICAgIGNoYWlu
ZWRDaGVja1R5cGUuaXNSZXF1aXJlZCA9IGNoZWNrVHlwZS5iaW5kKG51bGwsIHRydWUpOworCisg
ICAgcmV0dXJuIGNoYWluZWRDaGVja1R5cGU7CisgIH0KKworICBmdW5jdGlvbiBjcmVhdGVQcmlt
aXRpdmVUeXBlQ2hlY2tlcihleHBlY3RlZFR5cGUpIHsKKyAgICBmdW5jdGlvbiB2YWxpZGF0ZShw
cm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIHNl
Y3JldCkgeworICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTsKKyAgICAgIHZh
ciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7CisgICAgICBpZiAocHJvcFR5cGUg
IT09IGV4cGVjdGVkVHlwZSkgeworICAgICAgICAvLyBgcHJvcFZhbHVlYCBiZWluZyBpbnN0YW5j
ZSBvZiwgc2F5LCBkYXRlL3JlZ2V4cCwgcGFzcyB0aGUgJ29iamVjdCcKKyAgICAgICAgLy8gY2hl
Y2ssIGJ1dCB3ZSBjYW4gb2ZmZXIgYSBtb3JlIHByZWNpc2UgZXJyb3IgbWVzc2FnZSBoZXJlIHJh
dGhlciB0aGFuCisgICAgICAgIC8vICdvZiB0eXBlIGBvYmplY3RgJy4KKyAgICAgICAgdmFyIHBy
ZWNpc2VUeXBlID0gZ2V0UHJlY2lzZVR5cGUocHJvcFZhbHVlKTsKKworICAgICAgICByZXR1cm4g
bmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxs
TmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcmVjaXNlVHlwZSArICdgIHN1cHBsaWVkIHRv
IGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCAnKSArICgnYCcgKyBleHBlY3RlZFR5
cGUgKyAnYC4nKSk7CisgICAgICB9CisgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisgICAgcmV0
dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTsKKyAgfQorCisgIGZ1bmN0
aW9uIGNyZWF0ZUFueVR5cGVDaGVja2VyKCkgeworICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVU
eXBlQ2hlY2tlcihlbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zTnVsbCk7CisgIH0KKworICBmdW5j
dGlvbiBjcmVhdGVBcnJheU9mVHlwZUNoZWNrZXIodHlwZUNoZWNrZXIpIHsKKyAgICBmdW5jdGlv
biB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9w
RnVsbE5hbWUpIHsKKyAgICAgIGlmICh0eXBlb2YgdHlwZUNoZWNrZXIgIT09ICdmdW5jdGlvbicp
IHsKKyAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdQcm9wZXJ0eSBgJyArIHByb3BG
dWxsTmFtZSArICdgIG9mIGNvbXBvbmVudCBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCBoYXMgaW52
YWxpZCBQcm9wVHlwZSBub3RhdGlvbiBpbnNpZGUgYXJyYXlPZi4nKTsKKyAgICAgIH0KKyAgICAg
IHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07CisgICAgICBpZiAoIUFycmF5LmlzQXJy
YXkocHJvcFZhbHVlKSkgeworICAgICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9w
VmFsdWUpOworICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxv
Y2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9w
VHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBh
biBhcnJheS4nKSk7CisgICAgICB9CisgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BWYWx1
ZS5sZW5ndGg7IGkrKykgeworICAgICAgICB2YXIgZXJyb3IgPSB0eXBlQ2hlY2tlcihwcm9wVmFs
dWUsIGksIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUgKyAnWycgKyBpICsg
J10nLCBSZWFjdFByb3BUeXBlc1NlY3JldCk7CisgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9m
IEVycm9yKSB7CisgICAgICAgICAgcmV0dXJuIGVycm9yOworICAgICAgICB9CisgICAgICB9Cisg
ICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisgICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVD
aGVja2VyKHZhbGlkYXRlKTsKKyAgfQorCisgIGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnRUeXBlQ2hl
Y2tlcigpIHsKKyAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVu
dE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHsKKyAgICAgIHZhciBwcm9wVmFsdWUgPSBw
cm9wc1twcm9wTmFtZV07CisgICAgICBpZiAoIWlzVmFsaWRFbGVtZW50KHByb3BWYWx1ZSkpIHsK
KyAgICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTsKKyAgICAgICAg
cmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBw
cm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgcHJvcFR5cGUgKyAnYCBzdXBwbGll
ZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYSBzaW5nbGUgUmVhY3RFbGVt
ZW50LicpKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBudWxsOworICAgIH0KKyAgICByZXR1cm4g
Y3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpOworICB9CisKKyAgZnVuY3Rpb24g
Y3JlYXRlSW5zdGFuY2VUeXBlQ2hlY2tlcihleHBlY3RlZENsYXNzKSB7CisgICAgZnVuY3Rpb24g
dmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1
bGxOYW1lKSB7CisgICAgICBpZiAoIShwcm9wc1twcm9wTmFtZV0gaW5zdGFuY2VvZiBleHBlY3Rl
ZENsYXNzKSkgeworICAgICAgICB2YXIgZXhwZWN0ZWRDbGFzc05hbWUgPSBleHBlY3RlZENsYXNz
Lm5hbWUgfHwgQU5PTllNT1VTOworICAgICAgICB2YXIgYWN0dWFsQ2xhc3NOYW1lID0gZ2V0Q2xh
c3NOYW1lKHByb3BzW3Byb3BOYW1lXSk7CisgICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJv
cignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlw
ZSAnICsgKCdgJyArIGFjdHVhbENsYXNzTmFtZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9u
ZW50TmFtZSArICdgLCBleHBlY3RlZCAnKSArICgnaW5zdGFuY2Ugb2YgYCcgKyBleHBlY3RlZENs
YXNzTmFtZSArICdgLicpKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBudWxsOworICAgIH0KKyAg
ICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpOworICB9CisKKyAg
ZnVuY3Rpb24gY3JlYXRlRW51bVR5cGVDaGVja2VyKGV4cGVjdGVkVmFsdWVzKSB7CisgICAgaWYg
KCFBcnJheS5pc0FycmF5KGV4cGVjdGVkVmFsdWVzKSkgeworICAgICAgImRldmVsb3BtZW50IiAh
PT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhmYWxzZSwgJ0ludmFsaWQgYXJndW1lbnQgc3VwcGxp
ZWQgdG8gb25lT2YsIGV4cGVjdGVkIGFuIGluc3RhbmNlIG9mIGFycmF5LicpIDogdm9pZCAwOwor
ICAgICAgcmV0dXJuIGVtcHR5RnVuY3Rpb24udGhhdFJldHVybnNOdWxsOworICAgIH0KKworICAg
IGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRp
b24sIHByb3BGdWxsTmFtZSkgeworICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1l
XTsKKyAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXhwZWN0ZWRWYWx1ZXMubGVuZ3RoOyBpKysp
IHsKKyAgICAgICAgaWYgKGlzKHByb3BWYWx1ZSwgZXhwZWN0ZWRWYWx1ZXNbaV0pKSB7CisgICAg
ICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgdmFyIHZhbHVl
c1N0cmluZyA9IEpTT04uc3RyaW5naWZ5KGV4cGVjdGVkVmFsdWVzKTsKKyAgICAgIHJldHVybiBu
ZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxO
YW1lICsgJ2Agb2YgdmFsdWUgYCcgKyBwcm9wVmFsdWUgKyAnYCAnICsgKCdzdXBwbGllZCB0byBg
JyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgb25lIG9mICcgKyB2YWx1ZXNTdHJpbmcg
KyAnLicpKTsKKyAgICB9CisgICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZh
bGlkYXRlKTsKKyAgfQorCisgIGZ1bmN0aW9uIGNyZWF0ZU9iamVjdE9mVHlwZUNoZWNrZXIodHlw
ZUNoZWNrZXIpIHsKKyAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBv
bmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHsKKyAgICAgIGlmICh0eXBlb2YgdHlw
ZUNoZWNrZXIgIT09ICdmdW5jdGlvbicpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVy
cm9yKCdQcm9wZXJ0eSBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIGNvbXBvbmVudCBgJyArIGNv
bXBvbmVudE5hbWUgKyAnYCBoYXMgaW52YWxpZCBQcm9wVHlwZSBub3RhdGlvbiBpbnNpZGUgb2Jq
ZWN0T2YuJyk7CisgICAgICB9CisgICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVd
OworICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTsKKyAgICAgIGlm
IChwcm9wVHlwZSAhPT0gJ29iamVjdCcpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVy
cm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0
eXBlICcgKyAoJ2AnICsgcHJvcFR5cGUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5h
bWUgKyAnYCwgZXhwZWN0ZWQgYW4gb2JqZWN0LicpKTsKKyAgICAgIH0KKyAgICAgIGZvciAodmFy
IGtleSBpbiBwcm9wVmFsdWUpIHsKKyAgICAgICAgaWYgKHByb3BWYWx1ZS5oYXNPd25Qcm9wZXJ0
eShrZXkpKSB7CisgICAgICAgICAgdmFyIGVycm9yID0gdHlwZUNoZWNrZXIocHJvcFZhbHVlLCBr
ZXksIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUgKyAnLicgKyBrZXksIFJl
YWN0UHJvcFR5cGVzU2VjcmV0KTsKKyAgICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJv
cikgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yOworICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgfQorICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIHJldHVybiBjcmVhdGVDaGFp
bmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7CisgIH0KKworICBmdW5jdGlvbiBjcmVhdGVVbmlv
blR5cGVDaGVja2VyKGFycmF5T2ZUeXBlQ2hlY2tlcnMpIHsKKyAgICBpZiAoIUFycmF5LmlzQXJy
YXkoYXJyYXlPZlR5cGVDaGVja2VycykpIHsKKyAgICAgICJkZXZlbG9wbWVudCIgIT09ICdwcm9k
dWN0aW9uJyA/IHdhcm5pbmcoZmFsc2UsICdJbnZhbGlkIGFyZ3VtZW50IHN1cHBsaWVkIHRvIG9u
ZU9mVHlwZSwgZXhwZWN0ZWQgYW4gaW5zdGFuY2Ugb2YgYXJyYXkuJykgOiB2b2lkIDA7CisgICAg
ICByZXR1cm4gZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc051bGw7CisgICAgfQorCisgICAgZnVu
Y3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwg
cHJvcEZ1bGxOYW1lKSB7CisgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5T2ZUeXBlQ2hl
Y2tlcnMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgdmFyIGNoZWNrZXIgPSBhcnJheU9mVHlwZUNo
ZWNrZXJzW2ldOworICAgICAgICBpZiAoY2hlY2tlcihwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVu
dE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIFJlYWN0UHJvcFR5cGVzU2VjcmV0KSA9PSBu
dWxsKSB7CisgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgIH0KKworICAg
ICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcg
KyBwcm9wRnVsbE5hbWUgKyAnYCBzdXBwbGllZCB0byAnICsgKCdgJyArIGNvbXBvbmVudE5hbWUg
KyAnYC4nKSk7CisgICAgfQorICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2
YWxpZGF0ZSk7CisgIH0KKworICBmdW5jdGlvbiBjcmVhdGVOb2RlQ2hlY2tlcigpIHsKKyAgICBm
dW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9u
LCBwcm9wRnVsbE5hbWUpIHsKKyAgICAgIGlmICghaXNOb2RlKHByb3BzW3Byb3BOYW1lXSkpIHsK
KyAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiAr
ICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBzdXBwbGllZCB0byAnICsgKCdgJyArIGNvbXBvbmVu
dE5hbWUgKyAnYCwgZXhwZWN0ZWQgYSBSZWFjdE5vZGUuJykpOworICAgICAgfQorICAgICAgcmV0
dXJuIG51bGw7CisgICAgfQorICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2
YWxpZGF0ZSk7CisgIH0KKworICBmdW5jdGlvbiBjcmVhdGVTaGFwZVR5cGVDaGVja2VyKHNoYXBl
VHlwZXMpIHsKKyAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVu
dE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHsKKyAgICAgIHZhciBwcm9wVmFsdWUgPSBw
cm9wc1twcm9wTmFtZV07CisgICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFs
dWUpOworICAgICAgaWYgKHByb3BUeXBlICE9PSAnb2JqZWN0JykgeworICAgICAgICByZXR1cm4g
bmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxs
TmFtZSArICdgIG9mIHR5cGUgYCcgKyBwcm9wVHlwZSArICdgICcgKyAoJ3N1cHBsaWVkIHRvIGAn
ICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBgb2JqZWN0YC4nKSk7CisgICAgICB9Cisg
ICAgICBmb3IgKHZhciBrZXkgaW4gc2hhcGVUeXBlcykgeworICAgICAgICB2YXIgY2hlY2tlciA9
IHNoYXBlVHlwZXNba2V5XTsKKyAgICAgICAgaWYgKCFjaGVja2VyKSB7CisgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGVycm9yID0gY2hlY2tlcihwcm9wVmFsdWUs
IGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICcuJyArIGtleSwg
UmVhY3RQcm9wVHlwZXNTZWNyZXQpOworICAgICAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgICBy
ZXR1cm4gZXJyb3I7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIHJldHVybiBudWxsOworICAg
IH0KKyAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpOworICB9
CisKKyAgZnVuY3Rpb24gaXNOb2RlKHByb3BWYWx1ZSkgeworICAgIHN3aXRjaCAodHlwZW9mIHBy
b3BWYWx1ZSkgeworICAgICAgY2FzZSAnbnVtYmVyJzoKKyAgICAgIGNhc2UgJ3N0cmluZyc6Cisg
ICAgICBjYXNlICd1bmRlZmluZWQnOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIGNhc2Ug
J2Jvb2xlYW4nOgorICAgICAgICByZXR1cm4gIXByb3BWYWx1ZTsKKyAgICAgIGNhc2UgJ29iamVj
dCc6CisgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHByb3BWYWx1ZSkpIHsKKyAgICAgICAgICBy
ZXR1cm4gcHJvcFZhbHVlLmV2ZXJ5KGlzTm9kZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBy
b3BWYWx1ZSA9PT0gbnVsbCB8fCBpc1ZhbGlkRWxlbWVudChwcm9wVmFsdWUpKSB7CisgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICB2YXIgaXRlcmF0b3JGbiA9IGdl
dEl0ZXJhdG9yRm4ocHJvcFZhbHVlKTsKKyAgICAgICAgaWYgKGl0ZXJhdG9yRm4pIHsKKyAgICAg
ICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwocHJvcFZhbHVlKTsKKyAgICAgICAg
ICB2YXIgc3RlcDsKKyAgICAgICAgICBpZiAoaXRlcmF0b3JGbiAhPT0gcHJvcFZhbHVlLmVudHJp
ZXMpIHsKKyAgICAgICAgICAgIHdoaWxlICghKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUp
IHsKKyAgICAgICAgICAgICAgaWYgKCFpc05vZGUoc3RlcC52YWx1ZSkpIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gSXRlcmF0b3Igd2lsbCBwcm92aWRlIGVudHJ5
IFtrLHZdIHR1cGxlcyByYXRoZXIgdGhhbiB2YWx1ZXMuCisgICAgICAgICAgICB3aGlsZSAoIShz
dGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7CisgICAgICAgICAgICAgIHZhciBlbnRyeSA9
IHN0ZXAudmFsdWU7CisgICAgICAgICAgICAgIGlmIChlbnRyeSkgeworICAgICAgICAgICAgICAg
IGlmICghaXNOb2RlKGVudHJ5WzFdKSkgeworICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgIH0KKworICBmdW5jdGlvbiBpc1N5bWJvbChwcm9wVHlwZSwg
cHJvcFZhbHVlKSB7CisgICAgLy8gTmF0aXZlIFN5bWJvbC4KKyAgICBpZiAocHJvcFR5cGUgPT09
ICdzeW1ib2wnKSB7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyAxOS40LjMu
NSBTeW1ib2wucHJvdG90eXBlW0BAdG9TdHJpbmdUYWddID09PSAnU3ltYm9sJworICAgIGlmIChw
cm9wVmFsdWVbJ0BAdG9TdHJpbmdUYWcnXSA9PT0gJ1N5bWJvbCcpIHsKKyAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKworICAgIC8vIEZhbGxiYWNrIGZvciBub24tc3BlYyBjb21wbGlhbnQgU3lt
Ym9scyB3aGljaCBhcmUgcG9seWZpbGxlZC4KKyAgICBpZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1
bmN0aW9uJyAmJiBwcm9wVmFsdWUgaW5zdGFuY2VvZiBTeW1ib2wpIHsKKyAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIC8vIEVxdWl2YWxlbnQg
b2YgYHR5cGVvZmAgYnV0IHdpdGggc3BlY2lhbCBoYW5kbGluZyBmb3IgYXJyYXkgYW5kIHJlZ2V4
cC4KKyAgZnVuY3Rpb24gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKSB7CisgICAgdmFyIHByb3BUeXBl
ID0gdHlwZW9mIHByb3BWYWx1ZTsKKyAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7
CisgICAgICByZXR1cm4gJ2FycmF5JzsKKyAgICB9CisgICAgaWYgKHByb3BWYWx1ZSBpbnN0YW5j
ZW9mIFJlZ0V4cCkgeworICAgICAgLy8gT2xkIHdlYmtpdHMgKGF0IGxlYXN0IHVudGlsIEFuZHJv
aWQgNC4wKSByZXR1cm4gJ2Z1bmN0aW9uJyByYXRoZXIgdGhhbgorICAgICAgLy8gJ29iamVjdCcg
Zm9yIHR5cGVvZiBhIFJlZ0V4cC4gV2UnbGwgbm9ybWFsaXplIHRoaXMgaGVyZSBzbyB0aGF0IC9i
bGEvCisgICAgICAvLyBwYXNzZXMgUHJvcFR5cGVzLm9iamVjdC4KKyAgICAgIHJldHVybiAnb2Jq
ZWN0JzsKKyAgICB9CisgICAgaWYgKGlzU3ltYm9sKHByb3BUeXBlLCBwcm9wVmFsdWUpKSB7Cisg
ICAgICByZXR1cm4gJ3N5bWJvbCc7CisgICAgfQorICAgIHJldHVybiBwcm9wVHlwZTsKKyAgfQor
CisgIC8vIFRoaXMgaGFuZGxlcyBtb3JlIHR5cGVzIHRoYW4gYGdldFByb3BUeXBlYC4gT25seSB1
c2VkIGZvciBlcnJvciBtZXNzYWdlcy4KKyAgLy8gU2VlIGBjcmVhdGVQcmltaXRpdmVUeXBlQ2hl
Y2tlcmAuCisgIGZ1bmN0aW9uIGdldFByZWNpc2VUeXBlKHByb3BWYWx1ZSkgeworICAgIHZhciBw
cm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7CisgICAgaWYgKHByb3BUeXBlID09PSAn
b2JqZWN0JykgeworICAgICAgaWYgKHByb3BWYWx1ZSBpbnN0YW5jZW9mIERhdGUpIHsKKyAgICAg
ICAgcmV0dXJuICdkYXRlJzsKKyAgICAgIH0gZWxzZSBpZiAocHJvcFZhbHVlIGluc3RhbmNlb2Yg
UmVnRXhwKSB7CisgICAgICAgIHJldHVybiAncmVnZXhwJzsKKyAgICAgIH0KKyAgICB9CisgICAg
cmV0dXJuIHByb3BUeXBlOworICB9CisKKyAgLy8gUmV0dXJucyBjbGFzcyBuYW1lIG9mIHRoZSBv
YmplY3QsIGlmIGFueS4KKyAgZnVuY3Rpb24gZ2V0Q2xhc3NOYW1lKHByb3BWYWx1ZSkgeworICAg
IGlmICghcHJvcFZhbHVlLmNvbnN0cnVjdG9yIHx8ICFwcm9wVmFsdWUuY29uc3RydWN0b3IubmFt
ZSkgeworICAgICAgcmV0dXJuIEFOT05ZTU9VUzsKKyAgICB9CisgICAgcmV0dXJuIHByb3BWYWx1
ZS5jb25zdHJ1Y3Rvci5uYW1lOworICB9CisKKyAgUmVhY3RQcm9wVHlwZXMuY2hlY2tQcm9wVHlw
ZXMgPSBjaGVja1Byb3BUeXBlczsKKyAgUmVhY3RQcm9wVHlwZXMuUHJvcFR5cGVzID0gUmVhY3RQ
cm9wVHlwZXM7CisKKyAgcmV0dXJuIFJlYWN0UHJvcFR5cGVzOworfTsKKworfSx7IjI3IjoyNywi
MjkiOjI5LCIzMCI6MzAsIjMyIjozMiwiMzUiOjM1fV0sMzU6W2Z1bmN0aW9uKF9kZXJlcV8sbW9k
dWxlLGV4cG9ydHMpeworLyoqCisgKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywg
SW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvdXJjZSBjb2RlIGlz
IGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGUKKyAqIExJ
Q0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4g
YWRkaXRpb25hbCBncmFudAorICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhl
IFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisgKi8KKworJ3VzZSBzdHJpY3Qn
OworCit2YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSAnU0VDUkVUX0RPX05PVF9QQVNTX1RISVNf
T1JfWU9VX1dJTExfQkVfRklSRUQnOworCittb2R1bGUuZXhwb3J0cyA9IFJlYWN0UHJvcFR5cGVz
U2VjcmV0OworCit9LHt9XX0se30sWzE4XSkoMTgpCit9KTsKXCBObyBuZXdsaW5lIGF0IGVuZCBv
ZiBmaWxlCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNl
cy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9ub2RlX21vZHVsZXMvcmVhY3Qv
ZGlzdC9yZWFjdC5taW4uanMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNl
cy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9ub2RlX21vZHVsZXMvcmVhY3Qv
ZGlzdC9yZWFjdC5taW4uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDZhODQ0YjBjYTc4ZDBjNTBiYTM1YjU4Zjdj
NjUxZDE1MTE4NzZkNgotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRv
bWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L25vZGVf
bW9kdWxlcy9yZWFjdC9kaXN0L3JlYWN0Lm1pbi5qcwpAQCAtMCwwICsxLDEyIEBACisvKioKKyAq
IFJlYWN0IHYxNS41LjQKKyAqCisgKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywg
SW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvdXJjZSBjb2RlIGlz
IGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGUKKyAqIExJ
Q0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4g
YWRkaXRpb25hbCBncmFudAorICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhl
IFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCisgKgorICovCishZnVuY3Rpb24o
dCl7aWYoIm9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYidW5kZWZpbmVkIiE9dHlwZW9mIG1vZHVs
ZSltb2R1bGUuZXhwb3J0cz10KCk7ZWxzZSBpZigiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZk
ZWZpbmUuYW1kKWRlZmluZShbXSx0KTtlbHNle3ZhciBlO2U9InVuZGVmaW5lZCIhPXR5cGVvZiB3
aW5kb3c/d2luZG93OiJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVk
IiE9dHlwZW9mIHNlbGY/c2VsZjp0aGlzLGUuUmVhY3Q9dCgpfX0oZnVuY3Rpb24oKXtyZXR1cm4g
ZnVuY3Rpb24gdChlLG4scil7ZnVuY3Rpb24gbyh1LGEpe2lmKCFuW3VdKXtpZighZVt1XSl7dmFy
IHM9ImZ1bmN0aW9uIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmU7aWYoIWEmJnMpcmV0dXJuIHMo
dSwhMCk7aWYoaSlyZXR1cm4gaSh1LCEwKTt2YXIgYz1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1v
ZHVsZSAnIit1KyInIik7dGhyb3cgYy5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIixjfXZhciBsPW5b
dV09e2V4cG9ydHM6e319O2VbdV1bMF0uY2FsbChsLmV4cG9ydHMsZnVuY3Rpb24odCl7dmFyIG49
ZVt1XVsxXVt0XTtyZXR1cm4gbyhufHx0KX0sbCxsLmV4cG9ydHMsdCxlLG4scil9cmV0dXJuIG5b
dV0uZXhwb3J0c31mb3IodmFyIGk9ImZ1bmN0aW9uIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmUs
dT0wO3U8ci5sZW5ndGg7dSsrKW8oclt1XSk7cmV0dXJuIG99KHsxOltmdW5jdGlvbih0LGUsbil7
InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIodCl7dmFyIGU9eyI9IjoiPTAiLCI6IjoiPTIifTtyZXR1
cm4iJCIrKCIiK3QpLnJlcGxhY2UoL1s9Ol0vZyxmdW5jdGlvbih0KXtyZXR1cm4gZVt0XX0pfWZ1
bmN0aW9uIG8odCl7dmFyIGU9eyI9MCI6Ij0iLCI9MiI6IjoifTtyZXR1cm4oIiIrKCIuIj09PXRb
MF0mJiIkIj09PXRbMV0/dC5zdWJzdHJpbmcoMik6dC5zdWJzdHJpbmcoMSkpKS5yZXBsYWNlKC8o
PTB8PTIpL2csZnVuY3Rpb24odCl7cmV0dXJuIGVbdF19KX12YXIgaT17ZXNjYXBlOnIsdW5lc2Nh
cGU6b307ZS5leHBvcnRzPWl9LHt9XSwyOltmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3Zh
ciByPXQoMjApLG89KHQoMjQpLGZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYoZS5pbnN0YW5jZVBv
b2wubGVuZ3RoKXt2YXIgbj1lLmluc3RhbmNlUG9vbC5wb3AoKTtyZXR1cm4gZS5jYWxsKG4sdCks
bn1yZXR1cm4gbmV3IGUodCl9KSxpPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcztpZihuLmluc3Rh
bmNlUG9vbC5sZW5ndGgpe3ZhciByPW4uaW5zdGFuY2VQb29sLnBvcCgpO3JldHVybiBuLmNhbGwo
cix0LGUpLHJ9cmV0dXJuIG5ldyBuKHQsZSl9LHU9ZnVuY3Rpb24odCxlLG4pe3ZhciByPXRoaXM7
aWYoci5pbnN0YW5jZVBvb2wubGVuZ3RoKXt2YXIgbz1yLmluc3RhbmNlUG9vbC5wb3AoKTtyZXR1
cm4gci5jYWxsKG8sdCxlLG4pLG99cmV0dXJuIG5ldyByKHQsZSxuKX0sYT1mdW5jdGlvbih0LGUs
bixyKXt2YXIgbz10aGlzO2lmKG8uaW5zdGFuY2VQb29sLmxlbmd0aCl7dmFyIGk9by5pbnN0YW5j
ZVBvb2wucG9wKCk7cmV0dXJuIG8uY2FsbChpLHQsZSxuLHIpLGl9cmV0dXJuIG5ldyBvKHQsZSxu
LHIpfSxzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dCBpbnN0YW5jZW9mIGV8fHIoIjI1IiksdC5k
ZXN0cnVjdG9yKCksZS5pbnN0YW5jZVBvb2wubGVuZ3RoPGUucG9vbFNpemUmJmUuaW5zdGFuY2VQ
b29sLnB1c2godCl9LGM9byxsPWZ1bmN0aW9uKHQsZSl7dmFyIG49dDtyZXR1cm4gbi5pbnN0YW5j
ZVBvb2w9W10sbi5nZXRQb29sZWQ9ZXx8YyxuLnBvb2xTaXplfHwobi5wb29sU2l6ZT0xMCksbi5y
ZWxlYXNlPXMsbn0sZj17YWRkUG9vbGluZ1RvOmwsb25lQXJndW1lbnRQb29sZXI6byx0d29Bcmd1
bWVudFBvb2xlcjppLHRocmVlQXJndW1lbnRQb29sZXI6dSxmb3VyQXJndW1lbnRQb29sZXI6YX07
ZS5leHBvcnRzPWZ9LHsyMDoyMCwyNDoyNH1dLDM6W2Z1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmlj
dCI7dmFyIHI9dCgyNiksbz10KDQpLGk9dCg2KSx1PXQoMTQpLGE9dCg1KSxzPXQoOCksYz10KDkp
LGw9dCgxMyksZj10KDE2KSxwPXQoMTkpLGQ9KHQoMjUpLGMuY3JlYXRlRWxlbWVudCkseT1jLmNy
ZWF0ZUZhY3RvcnksaD1jLmNsb25lRWxlbWVudCx2PXIsbT17Q2hpbGRyZW46e21hcDpvLm1hcCxm
b3JFYWNoOm8uZm9yRWFjaCxjb3VudDpvLmNvdW50LHRvQXJyYXk6by50b0FycmF5LG9ubHk6cH0s
Q29tcG9uZW50OmksUHVyZUNvbXBvbmVudDp1LGNyZWF0ZUVsZW1lbnQ6ZCxjbG9uZUVsZW1lbnQ6
aCxpc1ZhbGlkRWxlbWVudDpjLmlzVmFsaWRFbGVtZW50LFByb3BUeXBlczpsLGNyZWF0ZUNsYXNz
OmEuY3JlYXRlQ2xhc3MsY3JlYXRlRmFjdG9yeTp5LGNyZWF0ZU1peGluOmZ1bmN0aW9uKHQpe3Jl
dHVybiB0fSxET006cyx2ZXJzaW9uOmYsX19zcHJlYWQ6dn07ZS5leHBvcnRzPW19LHsxMzoxMywx
NDoxNCwxNjoxNiwxOToxOSwyNToyNSwyNjoyNiw0OjQsNTo1LDY6Niw4OjgsOTo5fV0sNDpbZnVu
Y3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKHQpe3JldHVybigiIit0KS5yZXBs
YWNlKEUsIiQmLyIpfWZ1bmN0aW9uIG8odCxlKXt0aGlzLmZ1bmM9dCx0aGlzLmNvbnRleHQ9ZSx0
aGlzLmNvdW50PTB9ZnVuY3Rpb24gaSh0LGUsbil7dmFyIHI9dC5mdW5jLG89dC5jb250ZXh0O3Iu
Y2FsbChvLGUsdC5jb3VudCsrKX1mdW5jdGlvbiB1KHQsZSxuKXtpZihudWxsPT10KXJldHVybiB0
O3ZhciByPW8uZ2V0UG9vbGVkKGUsbik7bSh0LGksciksby5yZWxlYXNlKHIpfWZ1bmN0aW9uIGEo
dCxlLG4scil7dGhpcy5yZXN1bHQ9dCx0aGlzLmtleVByZWZpeD1lLHRoaXMuZnVuYz1uLHRoaXMu
Y29udGV4dD1yLHRoaXMuY291bnQ9MH1mdW5jdGlvbiBzKHQsZSxuKXt2YXIgbz10LnJlc3VsdCxp
PXQua2V5UHJlZml4LHU9dC5mdW5jLGE9dC5jb250ZXh0LHM9dS5jYWxsKGEsZSx0LmNvdW50Kysp
O0FycmF5LmlzQXJyYXkocyk/YyhzLG8sbix2LnRoYXRSZXR1cm5zQXJndW1lbnQpOm51bGwhPXMm
JihoLmlzVmFsaWRFbGVtZW50KHMpJiYocz1oLmNsb25lQW5kUmVwbGFjZUtleShzLGkrKCFzLmtl
eXx8ZSYmZS5rZXk9PT1zLmtleT8iIjpyKHMua2V5KSsiLyIpK24pKSxvLnB1c2gocykpfWZ1bmN0
aW9uIGModCxlLG4sbyxpKXt2YXIgdT0iIjtudWxsIT1uJiYodT1yKG4pKyIvIik7dmFyIGM9YS5n
ZXRQb29sZWQoZSx1LG8saSk7bSh0LHMsYyksYS5yZWxlYXNlKGMpfWZ1bmN0aW9uIGwodCxlLG4p
e2lmKG51bGw9PXQpcmV0dXJuIHQ7dmFyIHI9W107cmV0dXJuIGModCxyLG51bGwsZSxuKSxyfWZ1
bmN0aW9uIGYodCxlLG4pe3JldHVybiBudWxsfWZ1bmN0aW9uIHAodCxlKXtyZXR1cm4gbSh0LGYs
bnVsbCl9ZnVuY3Rpb24gZCh0KXt2YXIgZT1bXTtyZXR1cm4gYyh0LGUsbnVsbCx2LnRoYXRSZXR1
cm5zQXJndW1lbnQpLGV9dmFyIHk9dCgyKSxoPXQoOSksdj10KDIyKSxtPXQoMjEpLGI9eS50d29B
cmd1bWVudFBvb2xlcixnPXkuZm91ckFyZ3VtZW50UG9vbGVyLEU9L1wvKy9nO28ucHJvdG90eXBl
LmRlc3RydWN0b3I9ZnVuY3Rpb24oKXt0aGlzLmZ1bmM9bnVsbCx0aGlzLmNvbnRleHQ9bnVsbCx0
aGlzLmNvdW50PTB9LHkuYWRkUG9vbGluZ1RvKG8sYiksYS5wcm90b3R5cGUuZGVzdHJ1Y3Rvcj1m
dW5jdGlvbigpe3RoaXMucmVzdWx0PW51bGwsdGhpcy5rZXlQcmVmaXg9bnVsbCx0aGlzLmZ1bmM9
bnVsbCx0aGlzLmNvbnRleHQ9bnVsbCx0aGlzLmNvdW50PTB9LHkuYWRkUG9vbGluZ1RvKGEsZyk7
dmFyIHg9e2ZvckVhY2g6dSxtYXA6bCxtYXBJbnRvV2l0aEtleVByZWZpeEludGVybmFsOmMsY291
bnQ6cCx0b0FycmF5OmR9O2UuZXhwb3J0cz14fSx7MjoyLDIxOjIxLDIyOjIyLDk6OX1dLDU6W2Z1
bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcih0KXtyZXR1cm4gdH1mdW5jdGlv
biBvKHQsZSl7dmFyIG49RS5oYXNPd25Qcm9wZXJ0eShlKT9FW2VdOm51bGw7Xy5oYXNPd25Qcm9w
ZXJ0eShlKSYmIk9WRVJSSURFX0JBU0UiIT09biYmcCgiNzMiLGUpLHQmJiJERUZJTkVfTUFOWSIh
PT1uJiYiREVGSU5FX01BTllfTUVSR0VEIiE9PW4mJnAoIjc0IixlKX1mdW5jdGlvbiBpKHQsZSl7
aWYoZSl7ImZ1bmN0aW9uIj09dHlwZW9mIGUmJnAoIjc1IiksaC5pc1ZhbGlkRWxlbWVudChlKSYm
cCgiNzYiKTt2YXIgbj10LnByb3RvdHlwZSxyPW4uX19yZWFjdEF1dG9CaW5kUGFpcnM7ZS5oYXNP
d25Qcm9wZXJ0eShiKSYmeC5taXhpbnModCxlLm1peGlucyk7Zm9yKHZhciBpIGluIGUpaWYoZS5o
YXNPd25Qcm9wZXJ0eShpKSYmaSE9PWIpe3ZhciB1PWVbaV0sYT1uLmhhc093blByb3BlcnR5KGkp
O2lmKG8oYSxpKSx4Lmhhc093blByb3BlcnR5KGkpKXhbaV0odCx1KTtlbHNle3ZhciBsPUUuaGFz
T3duUHJvcGVydHkoaSksZj0iZnVuY3Rpb24iPT10eXBlb2YgdSxkPWYmJiFsJiYhYSYmITEhPT1l
LmF1dG9iaW5kO2lmKGQpci5wdXNoKGksdSksbltpXT11O2Vsc2UgaWYoYSl7dmFyIHk9RVtpXTso
IWx8fCJERUZJTkVfTUFOWV9NRVJHRUQiIT09eSYmIkRFRklORV9NQU5ZIiE9PXkpJiZwKCI3NyIs
eSxpKSwiREVGSU5FX01BTllfTUVSR0VEIj09PXk/bltpXT1zKG5baV0sdSk6IkRFRklORV9NQU5Z
Ij09PXkmJihuW2ldPWMobltpXSx1KSl9ZWxzZSBuW2ldPXV9fX19ZnVuY3Rpb24gdSh0LGUpe2lm
KGUpZm9yKHZhciBuIGluIGUpe3ZhciByPWVbbl07aWYoZS5oYXNPd25Qcm9wZXJ0eShuKSl7dmFy
IG89biBpbiB4O28mJnAoIjc4IixuKTt2YXIgaT1uIGluIHQ7aSYmcCgiNzkiLG4pLHRbbl09cn19
fWZ1bmN0aW9uIGEodCxlKXt0JiZlJiYib2JqZWN0Ij09dHlwZW9mIHQmJiJvYmplY3QiPT10eXBl
b2YgZXx8cCgiODAiKTtmb3IodmFyIG4gaW4gZSllLmhhc093blByb3BlcnR5KG4pJiYodm9pZCAw
IT09dFtuXSYmcCgiODEiLG4pLHRbbl09ZVtuXSk7cmV0dXJuIHR9ZnVuY3Rpb24gcyh0LGUpe3Jl
dHVybiBmdW5jdGlvbigpe3ZhciBuPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpLHI9ZS5hcHBseSh0
aGlzLGFyZ3VtZW50cyk7aWYobnVsbD09bilyZXR1cm4gcjtpZihudWxsPT1yKXJldHVybiBuO3Zh
ciBvPXt9O3JldHVybiBhKG8sbiksYShvLHIpLG99fWZ1bmN0aW9uIGModCxlKXtyZXR1cm4gZnVu
Y3Rpb24oKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19
ZnVuY3Rpb24gbCh0LGUpe3JldHVybiBlLmJpbmQodCl9ZnVuY3Rpb24gZih0KXtmb3IodmFyIGU9
dC5fX3JlYWN0QXV0b0JpbmRQYWlycyxuPTA7bjxlLmxlbmd0aDtuKz0yKXt2YXIgcj1lW25dLG89
ZVtuKzFdO3Rbcl09bCh0LG8pfX12YXIgcD10KDIwKSxkPXQoMjYpLHk9dCg2KSxoPXQoOSksdj0o
dCgxMiksdCgxMSkpLG09dCgyMyksYj0odCgyNCksdCgyNSksIm1peGlucyIpLGc9W10sRT17bWl4
aW5zOiJERUZJTkVfTUFOWSIsc3RhdGljczoiREVGSU5FX01BTlkiLHByb3BUeXBlczoiREVGSU5F
X01BTlkiLGNvbnRleHRUeXBlczoiREVGSU5FX01BTlkiLGNoaWxkQ29udGV4dFR5cGVzOiJERUZJ
TkVfTUFOWSIsZ2V0RGVmYXVsdFByb3BzOiJERUZJTkVfTUFOWV9NRVJHRUQiLGdldEluaXRpYWxT
dGF0ZToiREVGSU5FX01BTllfTUVSR0VEIixnZXRDaGlsZENvbnRleHQ6IkRFRklORV9NQU5ZX01F
UkdFRCIscmVuZGVyOiJERUZJTkVfT05DRSIsY29tcG9uZW50V2lsbE1vdW50OiJERUZJTkVfTUFO
WSIsY29tcG9uZW50RGlkTW91bnQ6IkRFRklORV9NQU5ZIixjb21wb25lbnRXaWxsUmVjZWl2ZVBy
b3BzOiJERUZJTkVfTUFOWSIsc2hvdWxkQ29tcG9uZW50VXBkYXRlOiJERUZJTkVfT05DRSIsY29t
cG9uZW50V2lsbFVwZGF0ZToiREVGSU5FX01BTlkiLGNvbXBvbmVudERpZFVwZGF0ZToiREVGSU5F
X01BTlkiLGNvbXBvbmVudFdpbGxVbm1vdW50OiJERUZJTkVfTUFOWSIsdXBkYXRlQ29tcG9uZW50
OiJPVkVSUklERV9CQVNFIn0seD17ZGlzcGxheU5hbWU6ZnVuY3Rpb24odCxlKXt0LmRpc3BsYXlO
YW1lPWV9LG1peGluczpmdW5jdGlvbih0LGUpe2lmKGUpZm9yKHZhciBuPTA7bjxlLmxlbmd0aDtu
KyspaSh0LGVbbl0pfSxjaGlsZENvbnRleHRUeXBlczpmdW5jdGlvbih0LGUpe3QuY2hpbGRDb250
ZXh0VHlwZXM9ZCh7fSx0LmNoaWxkQ29udGV4dFR5cGVzLGUpfSxjb250ZXh0VHlwZXM6ZnVuY3Rp
b24odCxlKXt0LmNvbnRleHRUeXBlcz1kKHt9LHQuY29udGV4dFR5cGVzLGUpfSxnZXREZWZhdWx0
UHJvcHM6ZnVuY3Rpb24odCxlKXt0LmdldERlZmF1bHRQcm9wcz90LmdldERlZmF1bHRQcm9wcz1z
KHQuZ2V0RGVmYXVsdFByb3BzLGUpOnQuZ2V0RGVmYXVsdFByb3BzPWV9LHByb3BUeXBlczpmdW5j
dGlvbih0LGUpe3QucHJvcFR5cGVzPWQoe30sdC5wcm9wVHlwZXMsZSl9LHN0YXRpY3M6ZnVuY3Rp
b24odCxlKXt1KHQsZSl9LGF1dG9iaW5kOmZ1bmN0aW9uKCl7fX0sXz17cmVwbGFjZVN0YXRlOmZ1
bmN0aW9uKHQsZSl7dGhpcy51cGRhdGVyLmVucXVldWVSZXBsYWNlU3RhdGUodGhpcyx0KSxlJiZ0
aGlzLnVwZGF0ZXIuZW5xdWV1ZUNhbGxiYWNrKHRoaXMsZSwicmVwbGFjZVN0YXRlIil9LGlzTW91
bnRlZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnVwZGF0ZXIuaXNNb3VudGVkKHRoaXMpfX0sUD1m
dW5jdGlvbigpe307ZChQLnByb3RvdHlwZSx5LnByb3RvdHlwZSxfKTt2YXIgdz17Y3JlYXRlQ2xh
c3M6ZnVuY3Rpb24odCl7dmFyIGU9cihmdW5jdGlvbih0LG4scil7dGhpcy5fX3JlYWN0QXV0b0Jp
bmRQYWlycy5sZW5ndGgmJmYodGhpcyksdGhpcy5wcm9wcz10LHRoaXMuY29udGV4dD1uLHRoaXMu
cmVmcz1tLHRoaXMudXBkYXRlcj1yfHx2LHRoaXMuc3RhdGU9bnVsbDt2YXIgbz10aGlzLmdldElu
aXRpYWxTdGF0ZT90aGlzLmdldEluaXRpYWxTdGF0ZSgpOm51bGw7KCJvYmplY3QiIT10eXBlb2Yg
b3x8QXJyYXkuaXNBcnJheShvKSkmJnAoIjgyIixlLmRpc3BsYXlOYW1lfHwiUmVhY3RDb21wb3Np
dGVDb21wb25lbnQiKSx0aGlzLnN0YXRlPW99KTtlLnByb3RvdHlwZT1uZXcgUCxlLnByb3RvdHlw
ZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9fcmVhY3RBdXRvQmluZFBhaXJzPVtdLGcuZm9y
RWFjaChpLmJpbmQobnVsbCxlKSksaShlLHQpLGUuZ2V0RGVmYXVsdFByb3BzJiYoZS5kZWZhdWx0
UHJvcHM9ZS5nZXREZWZhdWx0UHJvcHMoKSksZS5wcm90b3R5cGUucmVuZGVyfHxwKCI4MyIpO2Zv
cih2YXIgbiBpbiBFKWUucHJvdG90eXBlW25dfHwoZS5wcm90b3R5cGVbbl09bnVsbCk7cmV0dXJu
IGV9LGluamVjdGlvbjp7aW5qZWN0TWl4aW46ZnVuY3Rpb24odCl7Zy5wdXNoKHQpfX19O2UuZXhw
b3J0cz13fSx7MTE6MTEsMTI6MTIsMjA6MjAsMjM6MjMsMjQ6MjQsMjU6MjUsMjY6MjYsNjo2LDk6
OX1dLDY6W2Z1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcih0LGUsbil7dGhp
cy5wcm9wcz10LHRoaXMuY29udGV4dD1lLHRoaXMucmVmcz11LHRoaXMudXBkYXRlcj1ufHxpfXZh
ciBvPXQoMjApLGk9dCgxMSksdT0odCgxNyksdCgyMykpO3QoMjQpLHQoMjUpO3IucHJvdG90eXBl
LmlzUmVhY3RDb21wb25lbnQ9e30sci5wcm90b3R5cGUuc2V0U3RhdGU9ZnVuY3Rpb24odCxlKXsi
b2JqZWN0IiE9dHlwZW9mIHQmJiJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT10JiZvKCI4NSIp
LHRoaXMudXBkYXRlci5lbnF1ZXVlU2V0U3RhdGUodGhpcyx0KSxlJiZ0aGlzLnVwZGF0ZXIuZW5x
dWV1ZUNhbGxiYWNrKHRoaXMsZSwic2V0U3RhdGUiKX0sci5wcm90b3R5cGUuZm9yY2VVcGRhdGU9
ZnVuY3Rpb24odCl7dGhpcy51cGRhdGVyLmVucXVldWVGb3JjZVVwZGF0ZSh0aGlzKSx0JiZ0aGlz
LnVwZGF0ZXIuZW5xdWV1ZUNhbGxiYWNrKHRoaXMsdCwiZm9yY2VVcGRhdGUiKX07ZS5leHBvcnRz
PXJ9LHsxMToxMSwxNzoxNywyMDoyMCwyMzoyMywyNDoyNCwyNToyNX1dLDc6W2Z1bmN0aW9uKHQs
ZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9e2N1cnJlbnQ6bnVsbH07ZS5leHBvcnRzPXJ9LHt9XSw4
OltmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPXQoOSksbz1yLmNyZWF0ZUZhY3Rv
cnksaT17YTpvKCJhIiksYWJicjpvKCJhYmJyIiksYWRkcmVzczpvKCJhZGRyZXNzIiksYXJlYTpv
KCJhcmVhIiksYXJ0aWNsZTpvKCJhcnRpY2xlIiksYXNpZGU6bygiYXNpZGUiKSxhdWRpbzpvKCJh
dWRpbyIpLGI6bygiYiIpLGJhc2U6bygiYmFzZSIpLGJkaTpvKCJiZGkiKSxiZG86bygiYmRvIiks
YmlnOm8oImJpZyIpLGJsb2NrcXVvdGU6bygiYmxvY2txdW90ZSIpLGJvZHk6bygiYm9keSIpLGJy
Om8oImJyIiksYnV0dG9uOm8oImJ1dHRvbiIpLGNhbnZhczpvKCJjYW52YXMiKSxjYXB0aW9uOm8o
ImNhcHRpb24iKSxjaXRlOm8oImNpdGUiKSxjb2RlOm8oImNvZGUiKSxjb2w6bygiY29sIiksY29s
Z3JvdXA6bygiY29sZ3JvdXAiKSxkYXRhOm8oImRhdGEiKSxkYXRhbGlzdDpvKCJkYXRhbGlzdCIp
LGRkOm8oImRkIiksZGVsOm8oImRlbCIpLGRldGFpbHM6bygiZGV0YWlscyIpLGRmbjpvKCJkZm4i
KSxkaWFsb2c6bygiZGlhbG9nIiksZGl2Om8oImRpdiIpLGRsOm8oImRsIiksZHQ6bygiZHQiKSxl
bTpvKCJlbSIpLGVtYmVkOm8oImVtYmVkIiksZmllbGRzZXQ6bygiZmllbGRzZXQiKSxmaWdjYXB0
aW9uOm8oImZpZ2NhcHRpb24iKSxmaWd1cmU6bygiZmlndXJlIiksZm9vdGVyOm8oImZvb3RlciIp
LGZvcm06bygiZm9ybSIpLGgxOm8oImgxIiksaDI6bygiaDIiKSxoMzpvKCJoMyIpLGg0Om8oImg0
IiksaDU6bygiaDUiKSxoNjpvKCJoNiIpLGhlYWQ6bygiaGVhZCIpLGhlYWRlcjpvKCJoZWFkZXIi
KSxoZ3JvdXA6bygiaGdyb3VwIiksaHI6bygiaHIiKSxodG1sOm8oImh0bWwiKSxpOm8oImkiKSxp
ZnJhbWU6bygiaWZyYW1lIiksaW1nOm8oImltZyIpLGlucHV0Om8oImlucHV0IiksaW5zOm8oImlu
cyIpLGtiZDpvKCJrYmQiKSxrZXlnZW46bygia2V5Z2VuIiksbGFiZWw6bygibGFiZWwiKSxsZWdl
bmQ6bygibGVnZW5kIiksbGk6bygibGkiKSxsaW5rOm8oImxpbmsiKSxtYWluOm8oIm1haW4iKSxt
YXA6bygibWFwIiksbWFyazpvKCJtYXJrIiksbWVudTpvKCJtZW51IiksbWVudWl0ZW06bygibWVu
dWl0ZW0iKSxtZXRhOm8oIm1ldGEiKSxtZXRlcjpvKCJtZXRlciIpLG5hdjpvKCJuYXYiKSxub3Nj
cmlwdDpvKCJub3NjcmlwdCIpLG9iamVjdDpvKCJvYmplY3QiKSxvbDpvKCJvbCIpLG9wdGdyb3Vw
Om8oIm9wdGdyb3VwIiksb3B0aW9uOm8oIm9wdGlvbiIpLG91dHB1dDpvKCJvdXRwdXQiKSxwOm8o
InAiKSxwYXJhbTpvKCJwYXJhbSIpLHBpY3R1cmU6bygicGljdHVyZSIpLHByZTpvKCJwcmUiKSxw
cm9ncmVzczpvKCJwcm9ncmVzcyIpLHE6bygicSIpLHJwOm8oInJwIikscnQ6bygicnQiKSxydWJ5
Om8oInJ1YnkiKSxzOm8oInMiKSxzYW1wOm8oInNhbXAiKSxzY3JpcHQ6bygic2NyaXB0Iiksc2Vj
dGlvbjpvKCJzZWN0aW9uIiksc2VsZWN0Om8oInNlbGVjdCIpLHNtYWxsOm8oInNtYWxsIiksc291
cmNlOm8oInNvdXJjZSIpLHNwYW46bygic3BhbiIpLHN0cm9uZzpvKCJzdHJvbmciKSxzdHlsZTpv
KCJzdHlsZSIpLHN1YjpvKCJzdWIiKSxzdW1tYXJ5Om8oInN1bW1hcnkiKSxzdXA6bygic3VwIiks
dGFibGU6bygidGFibGUiKSx0Ym9keTpvKCJ0Ym9keSIpLHRkOm8oInRkIiksdGV4dGFyZWE6bygi
dGV4dGFyZWEiKSx0Zm9vdDpvKCJ0Zm9vdCIpLHRoOm8oInRoIiksdGhlYWQ6bygidGhlYWQiKSx0
aW1lOm8oInRpbWUiKSx0aXRsZTpvKCJ0aXRsZSIpLHRyOm8oInRyIiksdHJhY2s6bygidHJhY2si
KSx1Om8oInUiKSx1bDpvKCJ1bCIpLHZhcjpvKCJ2YXIiKSx2aWRlbzpvKCJ2aWRlbyIpLHdicjpv
KCJ3YnIiKSxjaXJjbGU6bygiY2lyY2xlIiksY2xpcFBhdGg6bygiY2xpcFBhdGgiKSxkZWZzOm8o
ImRlZnMiKSxlbGxpcHNlOm8oImVsbGlwc2UiKSxnOm8oImciKSxpbWFnZTpvKCJpbWFnZSIpLGxp
bmU6bygibGluZSIpLGxpbmVhckdyYWRpZW50Om8oImxpbmVhckdyYWRpZW50IiksbWFzazpvKCJt
YXNrIikscGF0aDpvKCJwYXRoIikscGF0dGVybjpvKCJwYXR0ZXJuIikscG9seWdvbjpvKCJwb2x5
Z29uIikscG9seWxpbmU6bygicG9seWxpbmUiKSxyYWRpYWxHcmFkaWVudDpvKCJyYWRpYWxHcmFk
aWVudCIpLHJlY3Q6bygicmVjdCIpLHN0b3A6bygic3RvcCIpLHN2ZzpvKCJzdmciKSx0ZXh0Om8o
InRleHQiKSx0c3BhbjpvKCJ0c3BhbiIpfTtlLmV4cG9ydHM9aX0sezk6OX1dLDk6W2Z1bmN0aW9u
KHQsZSxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcih0KXtyZXR1cm4gdm9pZCAwIT09dC5yZWZ9
ZnVuY3Rpb24gbyh0KXtyZXR1cm4gdm9pZCAwIT09dC5rZXl9dmFyIGk9dCgyNiksdT10KDcpLGE9
KHQoMjUpLHQoMTcpLE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpLHM9dCgxMCksYz17
a2V5OiEwLHJlZjohMCxfX3NlbGY6ITAsX19zb3VyY2U6ITB9LGw9ZnVuY3Rpb24odCxlLG4scixv
LGksdSl7cmV0dXJueyQkdHlwZW9mOnMsdHlwZTp0LGtleTplLHJlZjpuLHByb3BzOnUsX293bmVy
Oml9fTtsLmNyZWF0ZUVsZW1lbnQ9ZnVuY3Rpb24odCxlLG4pe3ZhciBpLHM9e30sZj1udWxsLHA9
bnVsbDtpZihudWxsIT1lKXtyKGUpJiYocD1lLnJlZiksbyhlKSYmKGY9IiIrZS5rZXkpLHZvaWQg
MD09PWUuX19zZWxmP251bGw6ZS5fX3NlbGYsdm9pZCAwPT09ZS5fX3NvdXJjZT9udWxsOmUuX19z
b3VyY2U7Zm9yKGkgaW4gZSlhLmNhbGwoZSxpKSYmIWMuaGFzT3duUHJvcGVydHkoaSkmJihzW2ld
PWVbaV0pfXZhciBkPWFyZ3VtZW50cy5sZW5ndGgtMjtpZigxPT09ZClzLmNoaWxkcmVuPW47ZWxz
ZSBpZihkPjEpe2Zvcih2YXIgeT1BcnJheShkKSxoPTA7aDxkO2grKyl5W2hdPWFyZ3VtZW50c1to
KzJdO3MuY2hpbGRyZW49eX1pZih0JiZ0LmRlZmF1bHRQcm9wcyl7dmFyIHY9dC5kZWZhdWx0UHJv
cHM7Zm9yKGkgaW4gdil2b2lkIDA9PT1zW2ldJiYoc1tpXT12W2ldKX1yZXR1cm4gbCh0LGYscCww
LDAsdS5jdXJyZW50LHMpfSxsLmNyZWF0ZUZhY3Rvcnk9ZnVuY3Rpb24odCl7dmFyIGU9bC5jcmVh
dGVFbGVtZW50LmJpbmQobnVsbCx0KTtyZXR1cm4gZS50eXBlPXQsZX0sbC5jbG9uZUFuZFJlcGxh
Y2VLZXk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbCh0LnR5cGUsZSx0LnJlZix0Ll9zZWxmLHQuX3Nv
dXJjZSx0Ll9vd25lcix0LnByb3BzKX0sbC5jbG9uZUVsZW1lbnQ9ZnVuY3Rpb24odCxlLG4pe3Zh
ciBzLGY9aSh7fSx0LnByb3BzKSxwPXQua2V5LGQ9dC5yZWYseT0odC5fc2VsZix0Ll9zb3VyY2Us
dC5fb3duZXIpO2lmKG51bGwhPWUpe3IoZSkmJihkPWUucmVmLHk9dS5jdXJyZW50KSxvKGUpJiYo
cD0iIitlLmtleSk7dmFyIGg7dC50eXBlJiZ0LnR5cGUuZGVmYXVsdFByb3BzJiYoaD10LnR5cGUu
ZGVmYXVsdFByb3BzKTtmb3IocyBpbiBlKWEuY2FsbChlLHMpJiYhYy5oYXNPd25Qcm9wZXJ0eShz
KSYmKHZvaWQgMD09PWVbc10mJnZvaWQgMCE9PWg/ZltzXT1oW3NdOmZbc109ZVtzXSl9dmFyIHY9
YXJndW1lbnRzLmxlbmd0aC0yO2lmKDE9PT12KWYuY2hpbGRyZW49bjtlbHNlIGlmKHY+MSl7Zm9y
KHZhciBtPUFycmF5KHYpLGI9MDtiPHY7YisrKW1bYl09YXJndW1lbnRzW2IrMl07Zi5jaGlsZHJl
bj1tfXJldHVybiBsKHQudHlwZSxwLGQsMCwwLHksZil9LGwuaXNWYWxpZEVsZW1lbnQ9ZnVuY3Rp
b24odCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0JiZudWxsIT09dCYmdC4kJHR5cGVvZj09PXN9
LGUuZXhwb3J0cz1sfSx7MTA6MTAsMTc6MTcsMjU6MjUsMjY6MjYsNzo3fV0sMTA6W2Z1bmN0aW9u
KHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3lt
Ym9sLmZvciYmU3ltYm9sLmZvcigicmVhY3QuZWxlbWVudCIpfHw2MDEwMztlLmV4cG9ydHM9cn0s
e31dLDExOltmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPSh0KDI1KSx7aXNNb3Vu
dGVkOmZ1bmN0aW9uKHQpe3JldHVybiExfSxlbnF1ZXVlQ2FsbGJhY2s6ZnVuY3Rpb24odCxlKXt9
LGVucXVldWVGb3JjZVVwZGF0ZTpmdW5jdGlvbih0KXt9LGVucXVldWVSZXBsYWNlU3RhdGU6ZnVu
Y3Rpb24odCxlKXt9LGVucXVldWVTZXRTdGF0ZTpmdW5jdGlvbih0LGUpe319KTtlLmV4cG9ydHM9
cn0sezI1OjI1fV0sMTI6W2Z1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9e307ZS5l
eHBvcnRzPXJ9LHt9XSwxMzpbZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj10KDkp
LG89ci5pc1ZhbGlkRWxlbWVudCxpPXQoMjgpO2UuZXhwb3J0cz1pKG8pfSx7Mjg6MjgsOTo5fV0s
MTQ6W2Z1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcih0LGUsbil7dGhpcy5w
cm9wcz10LHRoaXMuY29udGV4dD1lLHRoaXMucmVmcz1zLHRoaXMudXBkYXRlcj1ufHxhfWZ1bmN0
aW9uIG8oKXt9dmFyIGk9dCgyNiksdT10KDYpLGE9dCgxMSkscz10KDIzKTtvLnByb3RvdHlwZT11
LnByb3RvdHlwZSxyLnByb3RvdHlwZT1uZXcgbyxyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yLGko
ci5wcm90b3R5cGUsdS5wcm90b3R5cGUpLHIucHJvdG90eXBlLmlzUHVyZVJlYWN0Q29tcG9uZW50
PSEwLGUuZXhwb3J0cz1yfSx7MTE6MTEsMjM6MjMsMjY6MjYsNjo2fV0sMTU6W2Z1bmN0aW9uKHQs
ZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9dCgyNiksbz10KDMpLGk9cihvLHtfX1NFQ1JFVF9JTlRF
Uk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRDp7UmVhY3RDdXJyZW50T3duZXI6
dCg3KX19KTtlLmV4cG9ydHM9aX0sezI2OjI2LDM6Myw3Ojd9XSwxNjpbZnVuY3Rpb24odCxlLG4p
eyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9IjE1LjUuNCJ9LHt9XSwxNzpbZnVuY3Rpb24odCxlLG4p
eyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ITF9LHt9XSwxODpbZnVuY3Rpb24odCxlLG4peyJ1c2Ug
c3RyaWN0IjtmdW5jdGlvbiByKHQpe3ZhciBlPXQmJihvJiZ0W29dfHx0W2ldKTtpZigiZnVuY3Rp
b24iPT10eXBlb2YgZSlyZXR1cm4gZX12YXIgbz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZT
eW1ib2wuaXRlcmF0b3IsaT0iQEBpdGVyYXRvciI7ZS5leHBvcnRzPXJ9LHt9XSwxOTpbZnVuY3Rp
b24odCxlLG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKHQpe3JldHVybiBpLmlzVmFsaWRFbGVt
ZW50KHQpfHxvKCIxNDMiKSx0fXZhciBvPXQoMjApLGk9dCg5KTt0KDI0KTtlLmV4cG9ydHM9cn0s
ezIwOjIwLDI0OjI0LDk6OX1dLDIwOltmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO2Z1bmN0
aW9uIHIodCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgtMSxuPSJNaW5pZmllZCBSZWFjdCBl
cnJvciAjIit0KyI7IHZpc2l0IGh0dHA6Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3QvZG9jcy9l
cnJvci1kZWNvZGVyLmh0bWw/aW52YXJpYW50PSIrdCxyPTA7cjxlO3IrKyluKz0iJmFyZ3NbXT0i
K2VuY29kZVVSSUNvbXBvbmVudChhcmd1bWVudHNbcisxXSk7bis9IiBmb3IgdGhlIGZ1bGwgbWVz
c2FnZSBvciB1c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQgZm9yIGZ1bGwgZXJy
b3JzIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuIjt2YXIgbz1uZXcgRXJyb3Iobik7
dGhyb3cgby5uYW1lPSJJbnZhcmlhbnQgVmlvbGF0aW9uIixvLmZyYW1lc1RvUG9wPTEsb31lLmV4
cG9ydHM9cn0se31dLDIxOltmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIo
dCxlKXtyZXR1cm4gdCYmIm9iamVjdCI9PXR5cGVvZiB0JiZudWxsIT10LmtleT9jLmVzY2FwZSh0
LmtleSk6ZS50b1N0cmluZygzNil9ZnVuY3Rpb24gbyh0LGUsbixpKXt2YXIgcD10eXBlb2YgdDtp
ZigidW5kZWZpbmVkIiE9PXAmJiJib29sZWFuIiE9PXB8fCh0PW51bGwpLG51bGw9PT10fHwic3Ry
aW5nIj09PXB8fCJudW1iZXIiPT09cHx8Im9iamVjdCI9PT1wJiZ0LiQkdHlwZW9mPT09YSlyZXR1
cm4gbihpLHQsIiI9PT1lP2wrcih0LDApOmUpLDE7dmFyIGQseSxoPTAsdj0iIj09PWU/bDplK2Y7
aWYoQXJyYXkuaXNBcnJheSh0KSlmb3IodmFyIG09MDttPHQubGVuZ3RoO20rKylkPXRbbV0seT12
K3IoZCxtKSxoKz1vKGQseSxuLGkpO2Vsc2V7dmFyIGI9cyh0KTtpZihiKXt2YXIgZyxFPWIuY2Fs
bCh0KTtpZihiIT09dC5lbnRyaWVzKWZvcih2YXIgeD0wOyEoZz1FLm5leHQoKSkuZG9uZTspZD1n
LnZhbHVlLHk9dityKGQseCsrKSxoKz1vKGQseSxuLGkpO2Vsc2UgZm9yKDshKGc9RS5uZXh0KCkp
LmRvbmU7KXt2YXIgXz1nLnZhbHVlO18mJihkPV9bMV0seT12K2MuZXNjYXBlKF9bMF0pK2Yrcihk
LDApLGgrPW8oZCx5LG4saSkpfX1lbHNlIGlmKCJvYmplY3QiPT09cCl7dmFyIFA9U3RyaW5nKHQp
O3UoIjMxIiwiW29iamVjdCBPYmplY3RdIj09PVA/Im9iamVjdCB3aXRoIGtleXMgeyIrT2JqZWN0
LmtleXModCkuam9pbigiLCAiKSsifSI6UCwiIil9fXJldHVybiBofWZ1bmN0aW9uIGkodCxlLG4p
e3JldHVybiBudWxsPT10PzA6byh0LCIiLGUsbil9dmFyIHU9dCgyMCksYT0odCg3KSx0KDEwKSks
cz10KDE4KSxjPSh0KDI0KSx0KDEpKSxsPSh0KDI1KSwiLiIpLGY9IjoiO2UuZXhwb3J0cz1pfSx7
MToxLDEwOjEwLDE4OjE4LDIwOjIwLDI0OjI0LDI1OjI1LDc6N31dLDIyOltmdW5jdGlvbih0LGUs
bil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9
fXZhciBvPWZ1bmN0aW9uKCl7fTtvLnRoYXRSZXR1cm5zPXIsby50aGF0UmV0dXJuc0ZhbHNlPXIo
ITEpLG8udGhhdFJldHVybnNUcnVlPXIoITApLG8udGhhdFJldHVybnNOdWxsPXIobnVsbCksby50
aGF0UmV0dXJuc1RoaXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sby50aGF0UmV0dXJuc0FyZ3Vt
ZW50PWZ1bmN0aW9uKHQpe3JldHVybiB0fSxlLmV4cG9ydHM9b30se31dLDIzOltmdW5jdGlvbih0
LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPXt9O2UuZXhwb3J0cz1yfSx7fV0sMjQ6W2Z1bmN0aW9u
KHQsZSxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcih0LGUsbixyLGksdSxhLHMpe2lmKG8oZSks
IXQpe3ZhciBjO2lmKHZvaWQgMD09PWUpYz1uZXcgRXJyb3IoIk1pbmlmaWVkIGV4Y2VwdGlvbiBv
Y2N1cnJlZDsgdXNlIHRoZSBub24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50IGZvciB0aGUgZnVs
bCBlcnJvciBtZXNzYWdlIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuIik7ZWxzZXt2
YXIgbD1bbixyLGksdSxhLHNdLGY9MDtjPW5ldyBFcnJvcihlLnJlcGxhY2UoLyVzL2csZnVuY3Rp
b24oKXtyZXR1cm4gbFtmKytdfSkpLGMubmFtZT0iSW52YXJpYW50IFZpb2xhdGlvbiJ9dGhyb3cg
Yy5mcmFtZXNUb1BvcD0xLGN9fXZhciBvPWZ1bmN0aW9uKHQpe307ZS5leHBvcnRzPXJ9LHt9XSwy
NTpbZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj10KDIyKSxvPXI7ZS5leHBvcnRz
PW99LHsyMjoyMn1dLDI2OltmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIo
dCl7aWYobnVsbD09PXR8fHZvaWQgMD09PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0LmFz
c2lnbiBjYW5ub3QgYmUgY2FsbGVkIHdpdGggbnVsbCBvciB1bmRlZmluZWQiKTtyZXR1cm4gT2Jq
ZWN0KHQpfXZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMsaT1PYmplY3QucHJvdG90
eXBlLmhhc093blByb3BlcnR5LHU9T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJs
ZTtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt0cnl7aWYoIU9iamVjdC5hc3NpZ24pcmV0dXJuITE7dmFy
IHQ9bmV3IFN0cmluZygiYWJjIik7aWYodFs1XT0iZGUiLCI1Ij09PU9iamVjdC5nZXRPd25Qcm9w
ZXJ0eU5hbWVzKHQpWzBdKXJldHVybiExO2Zvcih2YXIgZT17fSxuPTA7bjwxMDtuKyspZVsiXyIr
U3RyaW5nLmZyb21DaGFyQ29kZShuKV09bjtpZigiMDEyMzQ1Njc4OSIhPT1PYmplY3QuZ2V0T3du
UHJvcGVydHlOYW1lcyhlKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGVbdF19KS5qb2luKCIiKSly
ZXR1cm4hMTt2YXIgcj17fTtyZXR1cm4iYWJjZGVmZ2hpamtsbW5vcHFyc3QiLnNwbGl0KCIiKS5m
b3JFYWNoKGZ1bmN0aW9uKHQpe3JbdF09dH0pLCJhYmNkZWZnaGlqa2xtbm9wcXJzdCI9PT1PYmpl
Y3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LHIpKS5qb2luKCIiKX1jYXRjaCh0KXtyZXR1cm4hMX19
KCk/T2JqZWN0LmFzc2lnbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbixhLHM9cih0KSxjPTE7Yzxh
cmd1bWVudHMubGVuZ3RoO2MrKyl7bj1PYmplY3QoYXJndW1lbnRzW2NdKTtmb3IodmFyIGwgaW4g
bilpLmNhbGwobixsKSYmKHNbbF09bltsXSk7aWYobyl7YT1vKG4pO2Zvcih2YXIgZj0wO2Y8YS5s
ZW5ndGg7ZisrKXUuY2FsbChuLGFbZl0pJiYoc1thW2ZdXT1uW2FbZl1dKX19cmV0dXJuIHN9fSx7
fV0sMjc6W2Z1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcih0LGUsbixyLG8p
e31lLmV4cG9ydHM9cn0sezI0OjI0LDI1OjI1LDMwOjMwfV0sMjg6W2Z1bmN0aW9uKHQsZSxuKXsi
dXNlIHN0cmljdCI7dmFyIHI9dCgyOSk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiByKHQs
ITEpfX0sezI5OjI5fV0sMjk6W2Z1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9dCgy
Miksbz10KDI0KSxpPSh0KDI1KSx0KDMwKSksdT10KDI3KTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxl
KXtmdW5jdGlvbiBuKHQpe3ZhciBlPXQmJihfJiZ0W19dfHx0W1BdKTtpZigiZnVuY3Rpb24iPT10
eXBlb2YgZSlyZXR1cm4gZX1mdW5jdGlvbiBhKHQsZSl7cmV0dXJuIHQ9PT1lPzAhPT10fHwxL3Q9
PTEvZTp0IT09dCYmZSE9PWV9ZnVuY3Rpb24gcyh0KXt0aGlzLm1lc3NhZ2U9dCx0aGlzLnN0YWNr
PSIifWZ1bmN0aW9uIGModCl7ZnVuY3Rpb24gbihuLHIsdSxhLGMsbCxmKXtpZihhPWF8fHcsbD1s
fHx1LGYhPT1pKWlmKGUpbyghMSwiQ2FsbGluZyBQcm9wVHlwZXMgdmFsaWRhdG9ycyBkaXJlY3Rs
eSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gVXNlIGBQcm9w
VHlwZXMuY2hlY2tQcm9wVHlwZXMoKWAgdG8gY2FsbCB0aGVtLiBSZWFkIG1vcmUgYXQgaHR0cDov
L2ZiLm1lL3VzZS1jaGVjay1wcm9wLXR5cGVzIik7ZWxzZTtyZXR1cm4gbnVsbD09clt1XT9uP25l
dyBzKG51bGw9PT1yW3VdPyJUaGUgIitjKyIgYCIrbCsiYCBpcyBtYXJrZWQgYXMgcmVxdWlyZWQg
aW4gYCIrYSsiYCwgYnV0IGl0cyB2YWx1ZSBpcyBgbnVsbGAuIjoiVGhlICIrYysiIGAiK2wrImAg
aXMgbWFya2VkIGFzIHJlcXVpcmVkIGluIGAiK2ErImAsIGJ1dCBpdHMgdmFsdWUgaXMgYHVuZGVm
aW5lZGAuIik6bnVsbDp0KHIsdSxhLGMsbCl9dmFyIHI9bi5iaW5kKG51bGwsITEpO3JldHVybiBy
LmlzUmVxdWlyZWQ9bi5iaW5kKG51bGwsITApLHJ9ZnVuY3Rpb24gbCh0KXtmdW5jdGlvbiBlKGUs
bixyLG8saSx1KXt2YXIgYT1lW25dO2lmKGcoYSkhPT10KXJldHVybiBuZXcgcygiSW52YWxpZCAi
K28rIiBgIitpKyJgIG9mIHR5cGUgYCIrRShhKSsiYCBzdXBwbGllZCB0byBgIityKyJgLCBleHBl
Y3RlZCBgIit0KyJgLiIpO3JldHVybiBudWxsfXJldHVybiBjKGUpfWZ1bmN0aW9uIGYodCl7ZnVu
Y3Rpb24gZShlLG4scixvLHUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXJldHVybiBuZXcgcygi
UHJvcGVydHkgYCIrdSsiYCBvZiBjb21wb25lbnQgYCIrcisiYCBoYXMgaW52YWxpZCBQcm9wVHlw
ZSBub3RhdGlvbiBpbnNpZGUgYXJyYXlPZi4iKTt2YXIgYT1lW25dO2lmKCFBcnJheS5pc0FycmF5
KGEpKXtyZXR1cm4gbmV3IHMoIkludmFsaWQgIitvKyIgYCIrdSsiYCBvZiB0eXBlIGAiK2coYSkr
ImAgc3VwcGxpZWQgdG8gYCIrcisiYCwgZXhwZWN0ZWQgYW4gYXJyYXkuIil9Zm9yKHZhciBjPTA7
YzxhLmxlbmd0aDtjKyspe3ZhciBsPXQoYSxjLHIsbyx1KyJbIitjKyJdIixpKTtpZihsIGluc3Rh
bmNlb2YgRXJyb3IpcmV0dXJuIGx9cmV0dXJuIG51bGx9cmV0dXJuIGMoZSl9ZnVuY3Rpb24gcCh0
KXtmdW5jdGlvbiBlKGUsbixyLG8saSl7aWYoIShlW25daW5zdGFuY2VvZiB0KSl7dmFyIHU9dC5u
YW1lfHx3O3JldHVybiBuZXcgcygiSW52YWxpZCAiK28rIiBgIitpKyJgIG9mIHR5cGUgYCIreChl
W25dKSsiYCBzdXBwbGllZCB0byBgIityKyJgLCBleHBlY3RlZCBpbnN0YW5jZSBvZiBgIit1KyJg
LiIpfXJldHVybiBudWxsfXJldHVybiBjKGUpfWZ1bmN0aW9uIGQodCl7ZnVuY3Rpb24gZShlLG4s
cixvLGkpe2Zvcih2YXIgdT1lW25dLGM9MDtjPHQubGVuZ3RoO2MrKylpZihhKHUsdFtjXSkpcmV0
dXJuIG51bGw7cmV0dXJuIG5ldyBzKCJJbnZhbGlkICIrbysiIGAiK2krImAgb2YgdmFsdWUgYCIr
dSsiYCBzdXBwbGllZCB0byBgIityKyJgLCBleHBlY3RlZCBvbmUgb2YgIitKU09OLnN0cmluZ2lm
eSh0KSsiLiIpfXJldHVybiBBcnJheS5pc0FycmF5KHQpP2MoZSk6ci50aGF0UmV0dXJuc051bGx9
ZnVuY3Rpb24geSh0KXtmdW5jdGlvbiBlKGUsbixyLG8sdSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9m
IHQpcmV0dXJuIG5ldyBzKCJQcm9wZXJ0eSBgIit1KyJgIG9mIGNvbXBvbmVudCBgIityKyJgIGhh
cyBpbnZhbGlkIFByb3BUeXBlIG5vdGF0aW9uIGluc2lkZSBvYmplY3RPZi4iKTt2YXIgYT1lW25d
LGM9ZyhhKTtpZigib2JqZWN0IiE9PWMpcmV0dXJuIG5ldyBzKCJJbnZhbGlkICIrbysiIGAiK3Ur
ImAgb2YgdHlwZSBgIitjKyJgIHN1cHBsaWVkIHRvIGAiK3IrImAsIGV4cGVjdGVkIGFuIG9iamVj
dC4iKTtmb3IodmFyIGwgaW4gYSlpZihhLmhhc093blByb3BlcnR5KGwpKXt2YXIgZj10KGEsbCxy
LG8sdSsiLiIrbCxpKTtpZihmIGluc3RhbmNlb2YgRXJyb3IpcmV0dXJuIGZ9cmV0dXJuIG51bGx9
cmV0dXJuIGMoZSl9ZnVuY3Rpb24gaCh0KXtmdW5jdGlvbiBlKGUsbixyLG8sdSl7Zm9yKHZhciBh
PTA7YTx0Lmxlbmd0aDthKyspe2lmKG51bGw9PSgwLHRbYV0pKGUsbixyLG8sdSxpKSlyZXR1cm4g
bnVsbH1yZXR1cm4gbmV3IHMoIkludmFsaWQgIitvKyIgYCIrdSsiYCBzdXBwbGllZCB0byBgIity
KyJgLiIpfXJldHVybiBBcnJheS5pc0FycmF5KHQpP2MoZSk6ci50aGF0UmV0dXJuc051bGx9ZnVu
Y3Rpb24gdih0KXtmdW5jdGlvbiBlKGUsbixyLG8sdSl7dmFyIGE9ZVtuXSxjPWcoYSk7aWYoIm9i
amVjdCIhPT1jKXJldHVybiBuZXcgcygiSW52YWxpZCAiK28rIiBgIit1KyJgIG9mIHR5cGUgYCIr
YysiYCBzdXBwbGllZCB0byBgIityKyJgLCBleHBlY3RlZCBgb2JqZWN0YC4iKTtmb3IodmFyIGwg
aW4gdCl7dmFyIGY9dFtsXTtpZihmKXt2YXIgcD1mKGEsbCxyLG8sdSsiLiIrbCxpKTtpZihwKXJl
dHVybiBwfX1yZXR1cm4gbnVsbH1yZXR1cm4gYyhlKX1mdW5jdGlvbiBtKGUpe3N3aXRjaCh0eXBl
b2YgZSl7Y2FzZSJudW1iZXIiOmNhc2Uic3RyaW5nIjpjYXNlInVuZGVmaW5lZCI6cmV0dXJuITA7
Y2FzZSJib29sZWFuIjpyZXR1cm4hZTtjYXNlIm9iamVjdCI6aWYoQXJyYXkuaXNBcnJheShlKSly
ZXR1cm4gZS5ldmVyeShtKTtpZihudWxsPT09ZXx8dChlKSlyZXR1cm4hMDt2YXIgcj1uKGUpO2lm
KCFyKXJldHVybiExO3ZhciBvLGk9ci5jYWxsKGUpO2lmKHIhPT1lLmVudHJpZXMpe2Zvcig7IShv
PWkubmV4dCgpKS5kb25lOylpZighbShvLnZhbHVlKSlyZXR1cm4hMX1lbHNlIGZvcig7IShvPWku
bmV4dCgpKS5kb25lOyl7dmFyIHU9by52YWx1ZTtpZih1JiYhbSh1WzFdKSlyZXR1cm4hMX1yZXR1
cm4hMDtkZWZhdWx0OnJldHVybiExfX1mdW5jdGlvbiBiKHQsZSl7cmV0dXJuInN5bWJvbCI9PT10
fHwoIlN5bWJvbCI9PT1lWyJAQHRvU3RyaW5nVGFnIl18fCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1i
b2wmJmUgaW5zdGFuY2VvZiBTeW1ib2wpfWZ1bmN0aW9uIGcodCl7dmFyIGU9dHlwZW9mIHQ7cmV0
dXJuIEFycmF5LmlzQXJyYXkodCk/ImFycmF5Ijp0IGluc3RhbmNlb2YgUmVnRXhwPyJvYmplY3Qi
OmIoZSx0KT8ic3ltYm9sIjplfWZ1bmN0aW9uIEUodCl7dmFyIGU9Zyh0KTtpZigib2JqZWN0Ij09
PWUpe2lmKHQgaW5zdGFuY2VvZiBEYXRlKXJldHVybiJkYXRlIjtpZih0IGluc3RhbmNlb2YgUmVn
RXhwKXJldHVybiJyZWdleHAifXJldHVybiBlfWZ1bmN0aW9uIHgodCl7cmV0dXJuIHQuY29uc3Ry
dWN0b3ImJnQuY29uc3RydWN0b3IubmFtZT90LmNvbnN0cnVjdG9yLm5hbWU6d312YXIgXz0iZnVu
Y3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaXRlcmF0b3IsUD0iQEBpdGVyYXRvciIsdz0i
PDxhbm9ueW1vdXM+PiIsTj17YXJyYXk6bCgiYXJyYXkiKSxib29sOmwoImJvb2xlYW4iKSxmdW5j
OmwoImZ1bmN0aW9uIiksbnVtYmVyOmwoIm51bWJlciIpLG9iamVjdDpsKCJvYmplY3QiKSxzdHJp
bmc6bCgic3RyaW5nIiksc3ltYm9sOmwoInN5bWJvbCIpLGFueTpmdW5jdGlvbigpe3JldHVybiBj
KHIudGhhdFJldHVybnNOdWxsKX0oKSxhcnJheU9mOmYsZWxlbWVudDpmdW5jdGlvbigpe2Z1bmN0
aW9uIGUoZSxuLHIsbyxpKXt2YXIgdT1lW25dO2lmKCF0KHUpKXtyZXR1cm4gbmV3IHMoIkludmFs
aWQgIitvKyIgYCIraSsiYCBvZiB0eXBlIGAiK2codSkrImAgc3VwcGxpZWQgdG8gYCIrcisiYCwg
ZXhwZWN0ZWQgYSBzaW5nbGUgUmVhY3RFbGVtZW50LiIpfXJldHVybiBudWxsfXJldHVybiBjKGUp
fSgpLGluc3RhbmNlT2Y6cCxub2RlOmZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbixyLG8pe3Jl
dHVybiBtKHRbZV0pP251bGw6bmV3IHMoIkludmFsaWQgIityKyIgYCIrbysiYCBzdXBwbGllZCB0
byBgIituKyJgLCBleHBlY3RlZCBhIFJlYWN0Tm9kZS4iKX1yZXR1cm4gYyh0KX0oKSxvYmplY3RP
Zjp5LG9uZU9mOmQsb25lT2ZUeXBlOmgsc2hhcGU6dn07cmV0dXJuIHMucHJvdG90eXBlPUVycm9y
LnByb3RvdHlwZSxOLmNoZWNrUHJvcFR5cGVzPXUsTi5Qcm9wVHlwZXM9TixOfX0sezIyOjIyLDI0
OjI0LDI1OjI1LDI3OjI3LDMwOjMwfV0sMzA6W2Z1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7
ZS5leHBvcnRzPSJTRUNSRVRfRE9fTk9UX1BBU1NfVEhJU19PUl9ZT1VfV0lMTF9CRV9GSVJFRCJ9
LHt9XX0se30sWzE1XSkoMTUpfSk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0t
Z2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNo
aXRlY3R1cmUtZXhhbXBsZXMvcmVhY3Qvbm9kZV9tb2R1bGVzL3RvZG9tdmMtYXBwLWNzcy9pbmRl
eC5jc3MgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2Fy
Y2hpdGVjdHVyZS1leGFtcGxlcy9yZWFjdC9ub2RlX21vZHVsZXMvdG9kb212Yy1hcHAtY3NzL2lu
ZGV4LmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5lMDRmYmRiZGI0ZWQ0YWZlMDlkNTU0M2RiNTIwZGM2YTlkZGQ0
MWIyCi0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNv
dXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3Qvbm9kZV9tb2R1bGVzL3Rv
ZG9tdmMtYXBwLWNzcy9pbmRleC5jc3MKQEAgLTAsMCArMSwzNzYgQEAKK2h0bWwsCitib2R5IHsK
KyAgICBtYXJnaW46IDA7CisgICAgcGFkZGluZzogMDsKK30KKworYnV0dG9uIHsKKyAgICBtYXJn
aW46IDA7CisgICAgcGFkZGluZzogMDsKKyAgICBib3JkZXI6IDA7CisgICAgYmFja2dyb3VuZDog
bm9uZTsKKyAgICBmb250LXNpemU6IDEwMCU7CisgICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5l
OworICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OworICAgIGZvbnQtd2VpZ2h0OiBpbmhlcml0Owor
ICAgIGNvbG9yOiBpbmhlcml0OworICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsKKyAgICBh
cHBlYXJhbmNlOiBub25lOworICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2Vk
OworICAgIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7Cit9CisKK2JvZHkgewor
ICAgIGZvbnQ6IDE0cHggJ0hlbHZldGljYSBOZXVlJywgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1z
ZXJpZjsKKyAgICBsaW5lLWhlaWdodDogMS40ZW07CisgICAgYmFja2dyb3VuZDogI2Y1ZjVmNTsK
KyAgICBjb2xvcjogIzRkNGQ0ZDsKKyAgICBtaW4td2lkdGg6IDIzMHB4OworICAgIG1heC13aWR0
aDogNTUwcHg7CisgICAgbWFyZ2luOiAwIGF1dG87CisgICAgLXdlYmtpdC1mb250LXNtb290aGlu
ZzogYW50aWFsaWFzZWQ7CisgICAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTsK
KyAgICBmb250LXdlaWdodDogMzAwOworfQorCis6Zm9jdXMgeworICAgIG91dGxpbmU6IDA7Cit9
CisKKy5oaWRkZW4geworICAgIGRpc3BsYXk6IG5vbmU7Cit9CisKKy50b2RvYXBwIHsKKyAgICBi
YWNrZ3JvdW5kOiAjZmZmOworICAgIG1hcmdpbjogMTMwcHggMCA0MHB4IDA7CisgICAgcG9zaXRp
b246IHJlbGF0aXZlOworICAgIGJveC1zaGFkb3c6IDAgMnB4IDRweCAwIHJnYmEoMCwgMCwgMCwg
MC4yKSwKKyAgICAgICAgICAgICAgICAwIDI1cHggNTBweCAwIHJnYmEoMCwgMCwgMCwgMC4xKTsK
K30KKworLnRvZG9hcHAgaW5wdXQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIgeworICAgIGZv
bnQtc3R5bGU6IGl0YWxpYzsKKyAgICBmb250LXdlaWdodDogMzAwOworICAgIGNvbG9yOiAjZTZl
NmU2OworfQorCisudG9kb2FwcCBpbnB1dDo6LW1vei1wbGFjZWhvbGRlciB7CisgICAgZm9udC1z
dHlsZTogaXRhbGljOworICAgIGZvbnQtd2VpZ2h0OiAzMDA7CisgICAgY29sb3I6ICNlNmU2ZTY7
Cit9CisKKy50b2RvYXBwIGlucHV0OjppbnB1dC1wbGFjZWhvbGRlciB7CisgICAgZm9udC1zdHls
ZTogaXRhbGljOworICAgIGZvbnQtd2VpZ2h0OiAzMDA7CisgICAgY29sb3I6ICNlNmU2ZTY7Cit9
CisKKy50b2RvYXBwIGgxIHsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgdG9wOiAtMTU1
cHg7CisgICAgd2lkdGg6IDEwMCU7CisgICAgZm9udC1zaXplOiAxMDBweDsKKyAgICBmb250LXdl
aWdodDogMTAwOworICAgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgICBjb2xvcjogcmdiYSgxNzUs
IDQ3LCA0NywgMC4xNSk7CisgICAgLXdlYmtpdC10ZXh0LXJlbmRlcmluZzogb3B0aW1pemVMZWdp
YmlsaXR5OworICAgIC1tb3otdGV4dC1yZW5kZXJpbmc6IG9wdGltaXplTGVnaWJpbGl0eTsKKyAg
ICB0ZXh0LXJlbmRlcmluZzogb3B0aW1pemVMZWdpYmlsaXR5OworfQorCisubmV3LXRvZG8sCisu
ZWRpdCB7CisgICAgcG9zaXRpb246IHJlbGF0aXZlOworICAgIG1hcmdpbjogMDsKKyAgICB3aWR0
aDogMTAwJTsKKyAgICBmb250LXNpemU6IDI0cHg7CisgICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7
CisgICAgZm9udC13ZWlnaHQ6IGluaGVyaXQ7CisgICAgbGluZS1oZWlnaHQ6IDEuNGVtOworICAg
IGJvcmRlcjogMDsKKyAgICBjb2xvcjogaW5oZXJpdDsKKyAgICBwYWRkaW5nOiA2cHg7CisgICAg
Ym9yZGVyOiAxcHggc29saWQgIzk5OTsKKyAgICBib3gtc2hhZG93OiBpbnNldCAwIC0xcHggNXB4
IDAgcmdiYSgwLCAwLCAwLCAwLjIpOworICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CisgICAg
LXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7CisgICAgLW1vei1vc3gtZm9udC1z
bW9vdGhpbmc6IGdyYXlzY2FsZTsKK30KKworLm5ldy10b2RvIHsKKyAgICBwYWRkaW5nOiAxNnB4
IDE2cHggMTZweCA2MHB4OworICAgIGJvcmRlcjogbm9uZTsKKyAgICBiYWNrZ3JvdW5kOiByZ2Jh
KDAsIDAsIDAsIDAuMDAzKTsKKyAgICBib3gtc2hhZG93OiBpbnNldCAwIC0ycHggMXB4IHJnYmEo
MCwwLDAsMC4wMyk7Cit9CisKKy5tYWluIHsKKyAgICBwb3NpdGlvbjogcmVsYXRpdmU7CisgICAg
ei1pbmRleDogMjsKKyAgICBib3JkZXItdG9wOiAxcHggc29saWQgI2U2ZTZlNjsKK30KKworLnRv
Z2dsZS1hbGwgeworICAgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgICBib3JkZXI6IG5vbmU7IC8q
IE1vYmlsZSBTYWZhcmkgKi8KKyAgICBvcGFjaXR5OiAwOworICAgIHBvc2l0aW9uOiBhYnNvbHV0
ZTsKK30KKworLnRvZ2dsZS1hbGwgKyBsYWJlbCB7CisgICAgd2lkdGg6IDYwcHg7CisgICAgaGVp
Z2h0OiAzNHB4OworICAgIGZvbnQtc2l6ZTogMDsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7Cisg
ICAgdG9wOiAtNTJweDsKKyAgICBsZWZ0OiAtMTNweDsKKyAgICAtd2Via2l0LXRyYW5zZm9ybTog
cm90YXRlKDkwZGVnKTsKKyAgICB0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7Cit9CisKKy50b2dn
bGUtYWxsICsgbGFiZWw6YmVmb3JlIHsKKyAgICBjb250ZW50OiAn4p2vJzsKKyAgICBmb250LXNp
emU6IDIycHg7CisgICAgY29sb3I6ICNlNmU2ZTY7CisgICAgcGFkZGluZzogMTBweCAyN3B4IDEw
cHggMjdweDsKK30KKworLnRvZ2dsZS1hbGw6Y2hlY2tlZCArIGxhYmVsOmJlZm9yZSB7CisgICAg
Y29sb3I6ICM3MzczNzM7Cit9CisKKy50b2RvLWxpc3QgeworICAgIG1hcmdpbjogMDsKKyAgICBw
YWRkaW5nOiAwOworICAgIGxpc3Qtc3R5bGU6IG5vbmU7Cit9CisKKy50b2RvLWxpc3QgbGkgewor
ICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICBmb250LXNpemU6IDI0cHg7CisgICAgYm9yZGVy
LWJvdHRvbTogMXB4IHNvbGlkICNlZGVkZWQ7Cit9CisKKy50b2RvLWxpc3QgbGk6bGFzdC1jaGls
ZCB7CisgICAgYm9yZGVyLWJvdHRvbTogbm9uZTsKK30KKworLnRvZG8tbGlzdCBsaS5lZGl0aW5n
IHsKKyAgICBib3JkZXItYm90dG9tOiBub25lOworICAgIHBhZGRpbmc6IDA7Cit9CisKKy50b2Rv
LWxpc3QgbGkuZWRpdGluZyAuZWRpdCB7CisgICAgZGlzcGxheTogYmxvY2s7CisgICAgd2lkdGg6
IDUwNnB4OworICAgIHBhZGRpbmc6IDEycHggMTZweDsKKyAgICBtYXJnaW46IDAgMCAwIDQzcHg7
Cit9CisKKy50b2RvLWxpc3QgbGkuZWRpdGluZyAudmlldyB7CisgICAgZGlzcGxheTogbm9uZTsK
K30KKworLnRvZG8tbGlzdCBsaSAudG9nZ2xlIHsKKyAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Cisg
ICAgd2lkdGg6IDQwcHg7CisgICAgLyogYXV0bywgc2luY2Ugbm9uLVdlYktpdCBicm93c2VycyBk
b2Vzbid0IHN1cHBvcnQgaW5wdXQgc3R5bGluZyAqLworICAgIGhlaWdodDogYXV0bzsKKyAgICBw
b3NpdGlvbjogYWJzb2x1dGU7CisgICAgdG9wOiAwOworICAgIGJvdHRvbTogMDsKKyAgICBtYXJn
aW46IGF1dG8gMDsKKyAgICBib3JkZXI6IG5vbmU7IC8qIE1vYmlsZSBTYWZhcmkgKi8KKyAgICAt
d2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7CisgICAgYXBwZWFyYW5jZTogbm9uZTsKK30KKworLnRv
ZG8tbGlzdCBsaSAudG9nZ2xlIHsKKyAgICBvcGFjaXR5OiAwOworfQorCisudG9kby1saXN0IGxp
IC50b2dnbGUgKyBsYWJlbCB7CisgICAgLyoKKyAgICAgICAgRmlyZWZveCByZXF1aXJlcyBgI2Ag
dG8gYmUgZXNjYXBlZCAtIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dp
P2lkPTkyMjQzMworICAgICAgICBJRSBhbmQgRWRnZSByZXF1aXJlcyAqZXZlcnl0aGluZyogdG8g
YmUgZXNjYXBlZCB0byByZW5kZXIsIHNvIHdlIGRvIHRoYXQgaW5zdGVhZCBvZiBqdXN0IHRoZSBg
I2AgLSBodHRwczovL2RldmVsb3Blci5taWNyb3NvZnQuY29tL2VuLXVzL21pY3Jvc29mdC1lZGdl
L3BsYXRmb3JtL2lzc3Vlcy83MTU3NDU5LworICAgICovCisgICAgYmFja2dyb3VuZC1pbWFnZTog
dXJsKCdkYXRhOmltYWdlL3N2Zyt4bWw7dXRmOCwlM0NzdmclMjB4bWxucyUzRCUyMmh0dHAlM0Ev
L3d3dy53My5vcmcvMjAwMC9zdmclMjIlMjB3aWR0aCUzRCUyMjQwJTIyJTIwaGVpZ2h0JTNEJTIy
NDAlMjIlMjB2aWV3Qm94JTNEJTIyLTEwJTIwLTE4JTIwMTAwJTIwMTM1JTIyJTNFJTNDY2lyY2xl
JTIwY3glM0QlMjI1MCUyMiUyMGN5JTNEJTIyNTAlMjIlMjByJTNEJTIyNTAlMjIlMjBmaWxsJTNE
JTIybm9uZSUyMiUyMHN0cm9rZSUzRCUyMiUyM2VkZWRlZCUyMiUyMHN0cm9rZS13aWR0aCUzRCUy
MjMlMjIvJTNFJTNDL3N2ZyUzRScpOworICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7
CisgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIGxlZnQ7Cit9CisKKy50b2RvLWxpc3Qg
bGkgLnRvZ2dsZTpjaGVja2VkICsgbGFiZWwgeworICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgn
ZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsJTNDc3ZnJTIweG1sbnMlM0QlMjJodHRwJTNBLy93d3cu
dzMub3JnLzIwMDAvc3ZnJTIyJTIwd2lkdGglM0QlMjI0MCUyMiUyMGhlaWdodCUzRCUyMjQwJTIy
JTIwdmlld0JveCUzRCUyMi0xMCUyMC0xOCUyMDEwMCUyMDEzNSUyMiUzRSUzQ2NpcmNsZSUyMGN4
JTNEJTIyNTAlMjIlMjBjeSUzRCUyMjUwJTIyJTIwciUzRCUyMjUwJTIyJTIwZmlsbCUzRCUyMm5v
bmUlMjIlMjBzdHJva2UlM0QlMjIlMjNiZGRhZDUlMjIlMjBzdHJva2Utd2lkdGglM0QlMjIzJTIy
LyUzRSUzQ3BhdGglMjBmaWxsJTNEJTIyJTIzNWRjMmFmJTIyJTIwZCUzRCUyMk03MiUyMDI1TDQy
JTIwNzElMjAyNyUyMDU2bC00JTIwNCUyMDIwJTIwMjAlMjAzNC01MnolMjIvJTNFJTNDL3N2ZyUz
RScpOworfQorCisudG9kby1saXN0IGxpIGxhYmVsIHsKKyAgICB3b3JkLWJyZWFrOiBicmVhay1h
bGw7CisgICAgcGFkZGluZzogMTVweCAxNXB4IDE1cHggNjBweDsKKyAgICBkaXNwbGF5OiBibG9j
azsKKyAgICBsaW5lLWhlaWdodDogMS4yOworICAgIHRyYW5zaXRpb246IGNvbG9yIDAuNHM7Cit9
CisKKy50b2RvLWxpc3QgbGkuY29tcGxldGVkIGxhYmVsIHsKKyAgICBjb2xvcjogI2Q5ZDlkOTsK
KyAgICB0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDsKK30KKworLnRvZG8tbGlzdCBsaSAu
ZGVzdHJveSB7CisgICAgZGlzcGxheTogbm9uZTsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7Cisg
ICAgdG9wOiAwOworICAgIHJpZ2h0OiAxMHB4OworICAgIGJvdHRvbTogMDsKKyAgICB3aWR0aDog
NDBweDsKKyAgICBoZWlnaHQ6IDQwcHg7CisgICAgbWFyZ2luOiBhdXRvIDA7CisgICAgZm9udC1z
aXplOiAzMHB4OworICAgIGNvbG9yOiAjY2M5YTlhOworICAgIG1hcmdpbi1ib3R0b206IDExcHg7
CisgICAgdHJhbnNpdGlvbjogY29sb3IgMC4ycyBlYXNlLW91dDsKK30KKworLnRvZG8tbGlzdCBs
aSAuZGVzdHJveTpob3ZlciB7CisgICAgY29sb3I6ICNhZjViNWU7Cit9CisKKy50b2RvLWxpc3Qg
bGkgLmRlc3Ryb3k6YWZ0ZXIgeworICAgIGNvbnRlbnQ6ICfDlyc7Cit9CisKKy50b2RvLWxpc3Qg
bGk6aG92ZXIgLmRlc3Ryb3kgeworICAgIGRpc3BsYXk6IGJsb2NrOworfQorCisudG9kby1saXN0
IGxpIC5lZGl0IHsKKyAgICBkaXNwbGF5OiBub25lOworfQorCisudG9kby1saXN0IGxpLmVkaXRp
bmc6bGFzdC1jaGlsZCB7CisgICAgbWFyZ2luLWJvdHRvbTogLTFweDsKK30KKworLmZvb3RlciB7
CisgICAgY29sb3I6ICM3Nzc7CisgICAgcGFkZGluZzogMTBweCAxNXB4OworICAgIGhlaWdodDog
MjBweDsKKyAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlk
ICNlNmU2ZTY7Cit9CisKKy5mb290ZXI6YmVmb3JlIHsKKyAgICBjb250ZW50OiAnJzsKKyAgICBw
b3NpdGlvbjogYWJzb2x1dGU7CisgICAgcmlnaHQ6IDA7CisgICAgYm90dG9tOiAwOworICAgIGxl
ZnQ6IDA7CisgICAgaGVpZ2h0OiA1MHB4OworICAgIG92ZXJmbG93OiBoaWRkZW47CisgICAgYm94
LXNoYWRvdzogMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwKKyAgICAgICAgICAgICAgICAw
IDhweCAwIC0zcHggI2Y2ZjZmNiwKKyAgICAgICAgICAgICAgICAwIDlweCAxcHggLTNweCByZ2Jh
KDAsIDAsIDAsIDAuMiksCisgICAgICAgICAgICAgICAgMCAxNnB4IDAgLTZweCAjZjZmNmY2LAor
ICAgICAgICAgICAgICAgIDAgMTdweCAycHggLTZweCByZ2JhKDAsIDAsIDAsIDAuMik7Cit9CisK
Ky50b2RvLWNvdW50IHsKKyAgICBmbG9hdDogbGVmdDsKKyAgICB0ZXh0LWFsaWduOiBsZWZ0Owor
fQorCisudG9kby1jb3VudCBzdHJvbmcgeworICAgIGZvbnQtd2VpZ2h0OiAzMDA7Cit9CisKKy5m
aWx0ZXJzIHsKKyAgICBtYXJnaW46IDA7CisgICAgcGFkZGluZzogMDsKKyAgICBsaXN0LXN0eWxl
OiBub25lOworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICByaWdodDogMDsKKyAgICBsZWZ0
OiAwOworfQorCisuZmlsdGVycyBsaSB7CisgICAgZGlzcGxheTogaW5saW5lOworfQorCisuZmls
dGVycyBsaSBhIHsKKyAgICBjb2xvcjogaW5oZXJpdDsKKyAgICBtYXJnaW46IDNweDsKKyAgICBw
YWRkaW5nOiAzcHggN3B4OworICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKKyAgICBib3JkZXI6
IDFweCBzb2xpZCB0cmFuc3BhcmVudDsKKyAgICBib3JkZXItcmFkaXVzOiAzcHg7Cit9CisKKy5m
aWx0ZXJzIGxpIGE6aG92ZXIgeworICAgIGJvcmRlci1jb2xvcjogcmdiYSgxNzUsIDQ3LCA0Nywg
MC4xKTsKK30KKworLmZpbHRlcnMgbGkgYS5zZWxlY3RlZCB7CisgICAgYm9yZGVyLWNvbG9yOiBy
Z2JhKDE3NSwgNDcsIDQ3LCAwLjIpOworfQorCisuY2xlYXItY29tcGxldGVkLAoraHRtbCAuY2xl
YXItY29tcGxldGVkOmFjdGl2ZSB7CisgICAgZmxvYXQ6IHJpZ2h0OworICAgIHBvc2l0aW9uOiBy
ZWxhdGl2ZTsKKyAgICBsaW5lLWhlaWdodDogMjBweDsKKyAgICB0ZXh0LWRlY29yYXRpb246IG5v
bmU7CisgICAgY3Vyc29yOiBwb2ludGVyOworfQorCisuY2xlYXItY29tcGxldGVkOmhvdmVyIHsK
KyAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKK30KKworLmluZm8geworICAgIG1hcmdp
bjogNjVweCBhdXRvIDA7CisgICAgY29sb3I6ICNiZmJmYmY7CisgICAgZm9udC1zaXplOiAxMHB4
OworICAgIHRleHQtc2hhZG93OiAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTsKKyAg
ICB0ZXh0LWFsaWduOiBjZW50ZXI7Cit9CisKKy5pbmZvIHAgeworICAgIGxpbmUtaGVpZ2h0OiAx
OworfQorCisuaW5mbyBhIHsKKyAgICBjb2xvcjogaW5oZXJpdDsKKyAgICB0ZXh0LWRlY29yYXRp
b246IG5vbmU7CisgICAgZm9udC13ZWlnaHQ6IDQwMDsKK30KKworLmluZm8gYTpob3ZlciB7Cisg
ICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Cit9CisKKy8qCisgICAgSGFjayB0byByZW1v
dmUgYmFja2dyb3VuZCBmcm9tIE1vYmlsZSBTYWZhcmkuCisgICAgQ2FuJ3QgdXNlIGl0IGdsb2Jh
bGx5IHNpbmNlIGl0IGRlc3Ryb3lzIGNoZWNrYm94ZXMgaW4gRmlyZWZveAorKi8KK0BtZWRpYSBz
Y3JlZW4gYW5kICgtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86MCkgeworICAgIC50b2dn
bGUtYWxsLAorICAgIC50b2RvLWxpc3QgbGkgLnRvZ2dsZSB7CisgICAgICAgIGJhY2tncm91bmQ6
IG5vbmU7CisgICAgfQorCisgICAgLnRvZG8tbGlzdCBsaSAudG9nZ2xlIHsKKyAgICAgICAgaGVp
Z2h0OiA0MHB4OworICAgIH0KK30KKworQG1lZGlhIChtYXgtd2lkdGg6IDQzMHB4KSB7CisgICAg
LmZvb3RlciB7CisgICAgICAgIGhlaWdodDogNTBweDsKKyAgICB9CisKKyAgICAuZmlsdGVycyB7
CisgICAgICAgIGJvdHRvbTogMTBweDsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5j
ZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxl
cy9yZWFjdC9ub2RlX21vZHVsZXMvdG9kb212Yy1jb21tb24vYmFzZS5jc3MgYi9QZXJmb3JtYW5j
ZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1leGFtcGxl
cy9yZWFjdC9ub2RlX21vZHVsZXMvdG9kb212Yy1jb21tb24vYmFzZS5jc3MKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NGQyNWQzYzg0YWM2YzZhZWYyNmI5NjgzYTJiYzEwYzYxZjk2MGM4ZgotLS0gL2Rldi9udWxsCisr
KyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0
ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L25vZGVfbW9kdWxlcy90b2RvbXZjLWNvbW1vbi9iYXNlLmNz
cwpAQCAtMCwwICsxLDE0MSBAQAoraHIgeworICAgIG1hcmdpbjogMjBweCAwOworICAgIGJvcmRl
cjogMDsKKyAgICBib3JkZXItdG9wOiAxcHggZGFzaGVkICNjNWM1YzU7CisgICAgYm9yZGVyLWJv
dHRvbTogMXB4IGRhc2hlZCAjZjdmN2Y3OworfQorCisubGVhcm4gYSB7CisgICAgZm9udC13ZWln
aHQ6IG5vcm1hbDsKKyAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CisgICAgY29sb3I6ICNiODNm
NDU7Cit9CisKKy5sZWFybiBhOmhvdmVyIHsKKyAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGlu
ZTsKKyAgICBjb2xvcjogIzc4N2U3ZTsKK30KKworLmxlYXJuIGgzLAorLmxlYXJuIGg0LAorLmxl
YXJuIGg1IHsKKyAgICBtYXJnaW46IDEwcHggMDsKKyAgICBmb250LXdlaWdodDogNTAwOworICAg
IGxpbmUtaGVpZ2h0OiAxLjI7CisgICAgY29sb3I6ICMwMDA7Cit9CisKKy5sZWFybiBoMyB7Cisg
ICAgZm9udC1zaXplOiAyNHB4OworfQorCisubGVhcm4gaDQgeworICAgIGZvbnQtc2l6ZTogMThw
eDsKK30KKworLmxlYXJuIGg1IHsKKyAgICBtYXJnaW4tYm90dG9tOiAwOworICAgIGZvbnQtc2l6
ZTogMTRweDsKK30KKworLmxlYXJuIHVsIHsKKyAgICBwYWRkaW5nOiAwOworICAgIG1hcmdpbjog
MCAwIDMwcHggMjVweDsKK30KKworLmxlYXJuIGxpIHsKKyAgICBsaW5lLWhlaWdodDogMjBweDsK
K30KKworLmxlYXJuIHAgeworICAgIGZvbnQtc2l6ZTogMTVweDsKKyAgICBmb250LXdlaWdodDog
MzAwOworICAgIGxpbmUtaGVpZ2h0OiAxLjM7CisgICAgbWFyZ2luLXRvcDogMDsKKyAgICBtYXJn
aW4tYm90dG9tOiAwOworfQorCisjaXNzdWUtY291bnQgeworICAgIGRpc3BsYXk6IG5vbmU7Cit9
CisKKy5xdW90ZSB7CisgICAgYm9yZGVyOiBub25lOworICAgIG1hcmdpbjogMjBweCAwIDYwcHgg
MDsKK30KKworLnF1b3RlIHAgeworICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKworLnF1b3Rl
IHA6YmVmb3JlIHsKKyAgICBjb250ZW50OiAn4oCcJzsKKyAgICBmb250LXNpemU6IDUwcHg7Cisg
ICAgb3BhY2l0eTogLjE1OworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB0b3A6IC0yMHB4
OworICAgIGxlZnQ6IDNweDsKK30KKworLnF1b3RlIHA6YWZ0ZXIgeworICAgIGNvbnRlbnQ6ICfi
gJ0nOworICAgIGZvbnQtc2l6ZTogNTBweDsKKyAgICBvcGFjaXR5OiAuMTU7CisgICAgcG9zaXRp
b246IGFic29sdXRlOworICAgIGJvdHRvbTogLTQycHg7CisgICAgcmlnaHQ6IDNweDsKK30KKwor
LnF1b3RlIGZvb3RlciB7CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIGJvdHRvbTogLTQw
cHg7CisgICAgcmlnaHQ6IDA7Cit9CisKKy5xdW90ZSBmb290ZXIgaW1nIHsKKyAgICBib3JkZXIt
cmFkaXVzOiAzcHg7Cit9CisKKy5xdW90ZSBmb290ZXIgYSB7CisgICAgbWFyZ2luLWxlZnQ6IDVw
eDsKKyAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOworfQorCisuc3BlZWNoLWJ1YmJsZSB7Cisg
ICAgcG9zaXRpb246IHJlbGF0aXZlOworICAgIHBhZGRpbmc6IDEwcHg7CisgICAgYmFja2dyb3Vu
ZDogcmdiYSgwLCAwLCAwLCAuMDQpOworICAgIGJvcmRlci1yYWRpdXM6IDVweDsKK30KKworLnNw
ZWVjaC1idWJibGU6YWZ0ZXIgeworICAgIGNvbnRlbnQ6ICcnOworICAgIHBvc2l0aW9uOiBhYnNv
bHV0ZTsKKyAgICB0b3A6IDEwMCU7CisgICAgcmlnaHQ6IDMwcHg7CisgICAgYm9yZGVyOiAxM3B4
IHNvbGlkIHRyYW5zcGFyZW50OworICAgIGJvcmRlci10b3AtY29sb3I6IHJnYmEoMCwgMCwgMCwg
LjA0KTsKK30KKworLmxlYXJuLWJhciA+IC5sZWFybiB7CisgICAgcG9zaXRpb246IGFic29sdXRl
OworICAgIHdpZHRoOiAyNzJweDsKKyAgICB0b3A6IDhweDsKKyAgICBsZWZ0OiAtMzAwcHg7Cisg
ICAgcGFkZGluZzogMTBweDsKKyAgICBib3JkZXItcmFkaXVzOiA1cHg7CisgICAgYmFja2dyb3Vu
ZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAuNik7CisgICAgdHJhbnNpdGlvbi1wcm9wZXJ0
eTogbGVmdDsKKyAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiA1MDBtczsKK30KKworQG1lZGlhICht
aW4td2lkdGg6IDg5OXB4KSB7CisgICAgLmxlYXJuLWJhciB7CisgICAgICAgIHdpZHRoOiBhdXRv
OworICAgICAgICBwYWRkaW5nLWxlZnQ6IDMwMHB4OworICAgIH0KKworICAgIC5sZWFybi1iYXIg
PiAubGVhcm4geworICAgICAgICBsZWZ0OiA4cHg7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvUGVy
Zm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUt
ZXhhbXBsZXMvcmVhY3Qvbm9kZV9tb2R1bGVzL3RvZG9tdmMtY29tbW9uL2Jhc2UuanMgYi9QZXJm
b3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1l
eGFtcGxlcy9yZWFjdC9ub2RlX21vZHVsZXMvdG9kb212Yy1jb21tb24vYmFzZS5qcwpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi44MWUwMDZiYzUwMmRkYzRjNzRmNDdiZDEzYTgzOTIyNzdmODMwZGI4Ci0tLSAvZGV2L251
bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9h
cmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3Qvbm9kZV9tb2R1bGVzL3RvZG9tdmMtY29tbW9uL2Jh
c2UuanMKQEAgLTAsMCArMSwyNDkgQEAKKy8qIGdsb2JhbCBfICovCisoZnVuY3Rpb24gKCkgewor
ICAgICd1c2Ugc3RyaWN0JzsKKworICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi8KKyAgICAv
LyBVbmRlcnNjb3JlJ3MgVGVtcGxhdGUgTW9kdWxlCisgICAgLy8gQ291cnRlc3kgb2YgdW5kZXJz
Y29yZWpzLm9yZworICAgIHZhciBfID0gKGZ1bmN0aW9uIChfKSB7CisgICAgICAgIF8uZGVmYXVs
dHMgPSBmdW5jdGlvbiAob2JqZWN0KSB7CisgICAgICAgICAgICBpZiAoIW9iamVjdCkgeworICAg
ICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBm
b3IgKHZhciBhcmdzSW5kZXggPSAxLCBhcmdzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDsgYXJn
c0luZGV4IDwgYXJnc0xlbmd0aDsgYXJnc0luZGV4KyspIHsKKyAgICAgICAgICAgICAgICB2YXIg
aXRlcmFibGUgPSBhcmd1bWVudHNbYXJnc0luZGV4XTsKKyAgICAgICAgICAgICAgICBpZiAoaXRl
cmFibGUpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIGl0ZXJhYmxlKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0W2tleV0gPT0gbnVsbCkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdFtrZXldID0gaXRlcmFibGVba2V5XTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBvYmplY3Q7CisgICAg
ICAgIH0KKworICAgICAgICAvLyBCeSBkZWZhdWx0LCBVbmRlcnNjb3JlIHVzZXMgRVJCLXN0eWxl
IHRlbXBsYXRlIGRlbGltaXRlcnMsIGNoYW5nZSB0aGUKKyAgICAgICAgLy8gZm9sbG93aW5nIHRl
bXBsYXRlIHNldHRpbmdzIHRvIHVzZSBhbHRlcm5hdGl2ZSBkZWxpbWl0ZXJzLgorICAgICAgICBf
LnRlbXBsYXRlU2V0dGluZ3MgPSB7CisgICAgICAgICAgICBldmFsdWF0ZSAgICA6IC88JShbXHNc
U10rPyklPi9nLAorICAgICAgICAgICAgaW50ZXJwb2xhdGUgOiAvPCU9KFtcc1xTXSs/KSU+L2cs
CisgICAgICAgICAgICBlc2NhcGUgICAgICA6IC88JS0oW1xzXFNdKz8pJT4vZworICAgICAgICB9
OworCisgICAgICAgIC8vIFdoZW4gY3VzdG9taXppbmcgYHRlbXBsYXRlU2V0dGluZ3NgLCBpZiB5
b3UgZG9uJ3Qgd2FudCB0byBkZWZpbmUgYW4KKyAgICAgICAgLy8gaW50ZXJwb2xhdGlvbiwgZXZh
bHVhdGlvbiBvciBlc2NhcGluZyByZWdleCwgd2UgbmVlZCBvbmUgdGhhdCBpcworICAgICAgICAv
LyBndWFyYW50ZWVkIG5vdCB0byBtYXRjaC4KKyAgICAgICAgdmFyIG5vTWF0Y2ggPSAvKC4pXi87
CisKKyAgICAgICAgLy8gQ2VydGFpbiBjaGFyYWN0ZXJzIG5lZWQgdG8gYmUgZXNjYXBlZCBzbyB0
aGF0IHRoZXkgY2FuIGJlIHB1dCBpbnRvIGEKKyAgICAgICAgLy8gc3RyaW5nIGxpdGVyYWwuCisg
ICAgICAgIHZhciBlc2NhcGVzID0geworICAgICAgICAgICAgIiciOiAgICAgICInIiwKKyAgICAg
ICAgICAgICdcXCc6ICAgICAnXFwnLAorICAgICAgICAgICAgJ1xyJzogICAgICdyJywKKyAgICAg
ICAgICAgICdcbic6ICAgICAnbicsCisgICAgICAgICAgICAnXHQnOiAgICAgJ3QnLAorICAgICAg
ICAgICAgJ1x1MjAyOCc6ICd1MjAyOCcsCisgICAgICAgICAgICAnXHUyMDI5JzogJ3UyMDI5Jwor
ICAgICAgICB9OworCisgICAgICAgIHZhciBlc2NhcGVyID0gL1xcfCd8XHJ8XG58XHR8XHUyMDI4
fFx1MjAyOS9nOworCisgICAgICAgIC8vIEphdmFTY3JpcHQgbWljcm8tdGVtcGxhdGluZywgc2lt
aWxhciB0byBKb2huIFJlc2lnJ3MgaW1wbGVtZW50YXRpb24uCisgICAgICAgIC8vIFVuZGVyc2Nv
cmUgdGVtcGxhdGluZyBoYW5kbGVzIGFyYml0cmFyeSBkZWxpbWl0ZXJzLCBwcmVzZXJ2ZXMgd2hp
dGVzcGFjZSwKKyAgICAgICAgLy8gYW5kIGNvcnJlY3RseSBlc2NhcGVzIHF1b3RlcyB3aXRoaW4g
aW50ZXJwb2xhdGVkIGNvZGUuCisgICAgICAgIF8udGVtcGxhdGUgPSBmdW5jdGlvbih0ZXh0LCBk
YXRhLCBzZXR0aW5ncykgeworICAgICAgICAgICAgdmFyIHJlbmRlcjsKKyAgICAgICAgICAgIHNl
dHRpbmdzID0gXy5kZWZhdWx0cyh7fSwgc2V0dGluZ3MsIF8udGVtcGxhdGVTZXR0aW5ncyk7CisK
KyAgICAgICAgICAgIC8vIENvbWJpbmUgZGVsaW1pdGVycyBpbnRvIG9uZSByZWd1bGFyIGV4cHJl
c3Npb24gdmlhIGFsdGVybmF0aW9uLgorICAgICAgICAgICAgdmFyIG1hdGNoZXIgPSBuZXcgUmVn
RXhwKFsKKyAgICAgICAgICAgICAgICAoc2V0dGluZ3MuZXNjYXBlIHx8IG5vTWF0Y2gpLnNvdXJj
ZSwKKyAgICAgICAgICAgICAgICAoc2V0dGluZ3MuaW50ZXJwb2xhdGUgfHwgbm9NYXRjaCkuc291
cmNlLAorICAgICAgICAgICAgICAgIChzZXR0aW5ncy5ldmFsdWF0ZSB8fCBub01hdGNoKS5zb3Vy
Y2UKKyAgICAgICAgICAgIF0uam9pbignfCcpICsgJ3wkJywgJ2cnKTsKKworICAgICAgICAgICAg
Ly8gQ29tcGlsZSB0aGUgdGVtcGxhdGUgc291cmNlLCBlc2NhcGluZyBzdHJpbmcgbGl0ZXJhbHMg
YXBwcm9wcmlhdGVseS4KKyAgICAgICAgICAgIHZhciBpbmRleCA9IDA7CisgICAgICAgICAgICB2
YXIgc291cmNlID0gIl9fcCs9JyI7CisgICAgICAgICAgICB0ZXh0LnJlcGxhY2UobWF0Y2hlciwg
ZnVuY3Rpb24obWF0Y2gsIGVzY2FwZSwgaW50ZXJwb2xhdGUsIGV2YWx1YXRlLCBvZmZzZXQpIHsK
KyAgICAgICAgICAgICAgICBzb3VyY2UgKz0gdGV4dC5zbGljZShpbmRleCwgb2Zmc2V0KQorICAg
ICAgICAgICAgICAgICAgICAucmVwbGFjZShlc2NhcGVyLCBmdW5jdGlvbihtYXRjaCkgeyByZXR1
cm4gJ1xcJyArIGVzY2FwZXNbbWF0Y2hdOyB9KTsKKworICAgICAgICAgICAgICAgIGlmIChlc2Nh
cGUpIHsKKyAgICAgICAgICAgICAgICAgICAgc291cmNlICs9ICInK1xuKChfX3Q9KCIgKyBlc2Nh
cGUgKyAiKSk9PW51bGw/Jyc6Xy5lc2NhcGUoX190KSkrXG4nIjsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgaWYgKGludGVycG9sYXRlKSB7CisgICAgICAgICAgICAgICAgICAg
IHNvdXJjZSArPSAiJytcbigoX190PSgiICsgaW50ZXJwb2xhdGUgKyAiKSk9PW51bGw/Jyc6X190
KStcbiciOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoZXZhbHVhdGUp
IHsKKyAgICAgICAgICAgICAgICAgICAgc291cmNlICs9ICInO1xuIiArIGV2YWx1YXRlICsgIlxu
X19wKz0nIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaW5kZXggPSBvZmZz
ZXQgKyBtYXRjaC5sZW5ndGg7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoOworICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICBzb3VyY2UgKz0gIic7XG4iOworCisgICAgICAgICAgICAv
LyBJZiBhIHZhcmlhYmxlIGlzIG5vdCBzcGVjaWZpZWQsIHBsYWNlIGRhdGEgdmFsdWVzIGluIGxv
Y2FsIHNjb3BlLgorICAgICAgICAgICAgaWYgKCFzZXR0aW5ncy52YXJpYWJsZSkgc291cmNlID0g
J3dpdGgob2JqfHx7fSl7XG4nICsgc291cmNlICsgJ31cbic7CisKKyAgICAgICAgICAgIHNvdXJj
ZSA9ICJ2YXIgX190LF9fcD0nJyxfX2o9QXJyYXkucHJvdG90eXBlLmpvaW4sIiArCisgICAgICAg
ICAgICAgICAgInByaW50PWZ1bmN0aW9uKCl7X19wKz1fX2ouY2FsbChhcmd1bWVudHMsJycpO307
XG4iICsKKyAgICAgICAgICAgICAgICBzb3VyY2UgKyAicmV0dXJuIF9fcDtcbiI7CisKKyAgICAg
ICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgcmVuZGVyID0gbmV3IEZ1bmN0aW9uKHNldHRp
bmdzLnZhcmlhYmxlIHx8ICdvYmonLCAnXycsIHNvdXJjZSk7CisgICAgICAgICAgICB9IGNhdGNo
IChlKSB7CisgICAgICAgICAgICAgICAgZS5zb3VyY2UgPSBzb3VyY2U7CisgICAgICAgICAgICAg
ICAgdGhyb3cgZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGRhdGEpIHJldHVy
biByZW5kZXIoZGF0YSwgXyk7CisgICAgICAgICAgICB2YXIgdGVtcGxhdGUgPSBmdW5jdGlvbihk
YXRhKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlbmRlci5jYWxsKHRoaXMsIGRhdGEsIF8p
OworICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgLy8gUHJvdmlkZSB0aGUgY29tcGlsZWQg
ZnVuY3Rpb24gc291cmNlIGFzIGEgY29udmVuaWVuY2UgZm9yIHByZWNvbXBpbGF0aW9uLgorICAg
ICAgICAgICAgdGVtcGxhdGUuc291cmNlID0gJ2Z1bmN0aW9uKCcgKyAoc2V0dGluZ3MudmFyaWFi
bGUgfHwgJ29iaicpICsgJyl7XG4nICsgc291cmNlICsgJ30nOworCisgICAgICAgICAgICByZXR1
cm4gdGVtcGxhdGU7CisgICAgICAgIH07CisKKyAgICAgICAgcmV0dXJuIF87CisgICAgfSkoe30p
OworCisgICAgaWYgKGxvY2F0aW9uLmhvc3RuYW1lID09PSAndG9kb212Yy5jb20nKSB7CisgICAg
ICAgIChmdW5jdGlvbihpLHMsbyxnLHIsYSxtKXtpWydHb29nbGVBbmFseXRpY3NPYmplY3QnXT1y
O2lbcl09aVtyXXx8ZnVuY3Rpb24oKXsKKyAgICAgICAgKGlbcl0ucT1pW3JdLnF8fFtdKS5wdXNo
KGFyZ3VtZW50cyl9LGlbcl0ubD0xKm5ldyBEYXRlKCk7YT1zLmNyZWF0ZUVsZW1lbnQobyksCisg
ICAgICAgIG09cy5nZXRFbGVtZW50c0J5VGFnTmFtZShvKVswXTthLmFzeW5jPTE7YS5zcmM9Zztt
LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsbSkKKyAgICAgICAgfSkod2luZG93LGRvY3VtZW50
LCdzY3JpcHQnLCdodHRwczovL3d3dy5nb29nbGUtYW5hbHl0aWNzLmNvbS9hbmFseXRpY3MuanMn
LCdnYScpOworICAgICAgICBnYSgnY3JlYXRlJywgJ1VBLTMxMDgxMDYyLTEnLCAnYXV0bycpOwor
ICAgICAgICBnYSgnc2VuZCcsICdwYWdldmlldycpOworICAgIH0KKyAgICAvKiBqc2hpbnQgaWdu
b3JlOmVuZCAqLworCisgICAgZnVuY3Rpb24gcmVkaXJlY3QoKSB7CisgICAgICAgIGlmIChsb2Nh
dGlvbi5ob3N0bmFtZSA9PT0gJ3Rhc3RlanMuZ2l0aHViLmlvJykgeworICAgICAgICAgICAgbG9j
YXRpb24uaHJlZiA9IGxvY2F0aW9uLmhyZWYucmVwbGFjZSgndGFzdGVqcy5naXRodWIuaW8vdG9k
b212YycsICd0b2RvbXZjLmNvbScpOworICAgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24g
ZmluZFJvb3QoKSB7CisgICAgICAgIHZhciBiYXNlID0gbG9jYXRpb24uaHJlZi5pbmRleE9mKCdl
eGFtcGxlcy8nKTsKKyAgICAgICAgcmV0dXJuIGxvY2F0aW9uLmhyZWYuc3Vic3RyKDAsIGJhc2Up
OworICAgIH0KKworICAgIGZ1bmN0aW9uIGdldEZpbGUoZmlsZSwgY2FsbGJhY2spIHsKKyAgICAg
ICAgaWYgKCFsb2NhdGlvbi5ob3N0KSB7CisgICAgICAgICAgICByZXR1cm4gY29uc29sZS5pbmZv
KCdNaXNzIHRoZSBpbmZvIGJhcj8gUnVuIFRvZG9NVkMgZnJvbSBhIHNlcnZlciB0byBhdm9pZCBh
IGNyb3NzLW9yaWdpbiBlcnJvci4nKTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciB4aHIgPSBu
ZXcgWE1MSHR0cFJlcXVlc3QoKTsKKworICAgICAgICB4aHIub3BlbignR0VUJywgZmluZFJvb3Qo
KSArIGZpbGUsIHRydWUpOworICAgICAgICB4aHIuc2VuZCgpOworCisgICAgICAgIHhoci5vbmxv
YWQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBpZiAoeGhyLnN0YXR1cyA9PT0gMjAwICYm
IGNhbGxiYWNrKSB7CisgICAgICAgICAgICAgICAgY2FsbGJhY2soeGhyLnJlc3BvbnNlVGV4dCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorCisgICAgZnVuY3Rpb24gTGVhcm4o
bGVhcm5KU09OLCBjb25maWcpIHsKKyAgICAgICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIExlYXJu
KSkgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBMZWFybihsZWFybkpTT04sIGNvbmZpZyk7Cisg
ICAgICAgIH0KKworICAgICAgICB2YXIgdGVtcGxhdGUsIGZyYW1ld29yazsKKworICAgICAgICBp
ZiAodHlwZW9mIGxlYXJuSlNPTiAhPT0gJ29iamVjdCcpIHsKKyAgICAgICAgICAgIHRyeSB7Cisg
ICAgICAgICAgICAgICAgbGVhcm5KU09OID0gSlNPTi5wYXJzZShsZWFybkpTT04pOworICAgICAg
ICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChjb25maWcpIHsKKyAgICAgICAgICAgIHRlbXBs
YXRlID0gY29uZmlnLnRlbXBsYXRlOworICAgICAgICAgICAgZnJhbWV3b3JrID0gY29uZmlnLmZy
YW1ld29yazsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghdGVtcGxhdGUgJiYgbGVhcm5KU09O
LnRlbXBsYXRlcykgeworICAgICAgICAgICAgdGVtcGxhdGUgPSBsZWFybkpTT04udGVtcGxhdGVz
LnRvZG9tdmM7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWZyYW1ld29yayAmJiBkb2N1bWVu
dC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1mcmFtZXdvcmtdJykpIHsKKyAgICAgICAgICAgIGZyYW1l
d29yayA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWZyYW1ld29ya10nKS5kYXRhc2V0
LmZyYW1ld29yazsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMudGVtcGxhdGUgPSB0ZW1wbGF0
ZTsKKworICAgICAgICBpZiAobGVhcm5KU09OLmJhY2tlbmQpIHsKKyAgICAgICAgICAgIHRoaXMu
ZnJhbWV3b3JrSlNPTiA9IGxlYXJuSlNPTi5iYWNrZW5kOworICAgICAgICAgICAgdGhpcy5mcmFt
ZXdvcmtKU09OLmlzc3VlTGFiZWwgPSBmcmFtZXdvcms7CisgICAgICAgICAgICB0aGlzLmFwcGVu
ZCh7CisgICAgICAgICAgICAgICAgYmFja2VuZDogdHJ1ZQorICAgICAgICAgICAgfSk7CisgICAg
ICAgIH0gZWxzZSBpZiAobGVhcm5KU09OW2ZyYW1ld29ya10pIHsKKyAgICAgICAgICAgIHRoaXMu
ZnJhbWV3b3JrSlNPTiA9IGxlYXJuSlNPTltmcmFtZXdvcmtdOworICAgICAgICAgICAgdGhpcy5m
cmFtZXdvcmtKU09OLmlzc3VlTGFiZWwgPSBmcmFtZXdvcms7CisgICAgICAgICAgICB0aGlzLmFw
cGVuZCgpOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5mZXRjaElzc3VlQ291bnQoKTsKKyAg
ICB9CisKKyAgICBMZWFybi5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24gKG9wdHMpIHsKKyAg
ICAgICAgdmFyIGFzaWRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYXNpZGUnKTsKKyAgICAg
ICAgYXNpZGUuaW5uZXJIVE1MID0gXy50ZW1wbGF0ZSh0aGlzLnRlbXBsYXRlLCB0aGlzLmZyYW1l
d29ya0pTT04pOworICAgICAgICBhc2lkZS5jbGFzc05hbWUgPSAnbGVhcm4nOworCisgICAgICAg
IGlmIChvcHRzICYmIG9wdHMuYmFja2VuZCkgeworICAgICAgICAgICAgLy8gUmVtb3ZlIGRlbW8g
bGluaworICAgICAgICAgICAgdmFyIHNvdXJjZUxpbmtzID0gYXNpZGUucXVlcnlTZWxlY3Rvcign
LnNvdXJjZS1saW5rcycpOworICAgICAgICAgICAgdmFyIGhlYWRpbmcgPSBzb3VyY2VMaW5rcy5m
aXJzdEVsZW1lbnRDaGlsZDsKKyAgICAgICAgICAgIHZhciBzb3VyY2VMaW5rID0gc291cmNlTGlu
a3MubGFzdEVsZW1lbnRDaGlsZDsKKyAgICAgICAgICAgIC8vIENvcnJlY3QgbGluayBwYXRoCisg
ICAgICAgICAgICB2YXIgaHJlZiA9IHNvdXJjZUxpbmsuZ2V0QXR0cmlidXRlKCdocmVmJyk7Cisg
ICAgICAgICAgICBzb3VyY2VMaW5rLnNldEF0dHJpYnV0ZSgnaHJlZicsIGhyZWYuc3Vic3RyKGhy
ZWYubGFzdEluZGV4T2YoJ2h0dHAnKSkpOworICAgICAgICAgICAgc291cmNlTGlua3MuaW5uZXJI
VE1MID0gaGVhZGluZy5vdXRlckhUTUwgKyBzb3VyY2VMaW5rLm91dGVySFRNTDsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIC8vIExvY2FsaXplIGRlbW8gbGlua3MKKyAgICAgICAgICAg
IHZhciBkZW1vTGlua3MgPSBhc2lkZS5xdWVyeVNlbGVjdG9yQWxsKCcuZGVtby1saW5rJyk7Cisg
ICAgICAgICAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKGRlbW9MaW5rcywgZnVuY3Rp
b24gKGRlbW9MaW5rKSB7CisgICAgICAgICAgICAgICAgaWYgKGRlbW9MaW5rLmdldEF0dHJpYnV0
ZSgnaHJlZicpLnN1YnN0cigwLCA0KSAhPT0gJ2h0dHAnKSB7CisgICAgICAgICAgICAgICAgICAg
IGRlbW9MaW5rLnNldEF0dHJpYnV0ZSgnaHJlZicsIGZpbmRSb290KCkgKyBkZW1vTGluay5nZXRB
dHRyaWJ1dGUoJ2hyZWYnKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7Cisg
ICAgICAgIH0KKworICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTmFtZSA9IChkb2N1bWVudC5i
b2R5LmNsYXNzTmFtZSArICcgbGVhcm4tYmFyJykudHJpbSgpOworICAgICAgICBkb2N1bWVudC5i
b2R5Lmluc2VydEFkamFjZW50SFRNTCgnYWZ0ZXJCZWdpbicsIGFzaWRlLm91dGVySFRNTCk7Cisg
ICAgfTsKKworICAgIExlYXJuLnByb3RvdHlwZS5mZXRjaElzc3VlQ291bnQgPSBmdW5jdGlvbiAo
KSB7CisgICAgICAgIHZhciBpc3N1ZUxpbmsgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaXNz
dWUtY291bnQtbGluaycpOworICAgICAgICBpZiAoaXNzdWVMaW5rKSB7CisgICAgICAgICAgICB2
YXIgdXJsID0gaXNzdWVMaW5rLmhyZWYucmVwbGFjZSgnaHR0cHM6Ly9naXRodWIuY29tJywgJ2h0
dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MnKTsKKyAgICAgICAgICAgIHZhciB4aHIgPSBuZXcg
WE1MSHR0cFJlcXVlc3QoKTsKKyAgICAgICAgICAgIHhoci5vcGVuKCdHRVQnLCB1cmwsIHRydWUp
OworICAgICAgICAgICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uIChlKSB7CisgICAgICAgICAgICAg
ICAgdmFyIHBhcnNlZFJlc3BvbnNlID0gSlNPTi5wYXJzZShlLnRhcmdldC5yZXNwb25zZVRleHQp
OworICAgICAgICAgICAgICAgIGlmIChwYXJzZWRSZXNwb25zZSBpbnN0YW5jZW9mIEFycmF5KSB7
CisgICAgICAgICAgICAgICAgICAgIHZhciBjb3VudCA9IHBhcnNlZFJlc3BvbnNlLmxlbmd0aDsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50ICE9PSAwKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpc3N1ZUxpbmsuaW5uZXJIVE1MID0gJ1RoaXMgYXBwIGhhcyAnICsgY291bnQgKyAn
IG9wZW4gaXNzdWVzJzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCdpc3N1ZS1jb3VudCcpLnN0eWxlLmRpc3BsYXkgPSAnaW5saW5lJzsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisgICAgICAg
ICAgICB4aHIuc2VuZCgpOworICAgICAgICB9CisgICAgfTsKKworICAgIHJlZGlyZWN0KCk7Cisg
ICAgZ2V0RmlsZSgnbGVhcm4uanNvbicsIExlYXJuKTsKK30pKCk7CmRpZmYgLS1naXQgYS9QZXJm
b3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL2FyY2hpdGVjdHVyZS1l
eGFtcGxlcy9yZWFjdC9ucG0tc2hyaW5rd3JhcC5qc29uIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVl
ZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3QvbnBt
LXNocmlua3dyYXAuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44MmVlNzgyMDc1OWVhZGM2NmRjYzRjODcyOWE5
ZDhhMTg3YTc0MGE1Ci0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9t
ZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1cmUtZXhhbXBsZXMvcmVhY3QvbnBtLXNo
cmlua3dyYXAuanNvbgpAQCAtMCwwICsxLDEwNCBAQAoreworICAiZGVwZW5kZW5jaWVzIjogewor
ICAgICJhc2FwIjogeworICAgICAgInZlcnNpb24iOiAiMi4wLjUiLAorICAgICAgImZyb20iOiAi
YXNhcEA+PTIuMC4zIDwyLjEuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3Ry
eS5ucG1qcy5vcmcvYXNhcC8tL2FzYXAtMi4wLjUudGd6IgorICAgIH0sCisgICAgImNsYXNzbmFt
ZXMiOiB7CisgICAgICAidmVyc2lvbiI6ICIyLjIuNSIsCisgICAgICAiZnJvbSI6ICJjbGFzc25h
bWVzQD49Mi4yLjUgPDMuMC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5
Lm5wbWpzLm9yZy9jbGFzc25hbWVzLy0vY2xhc3NuYW1lcy0yLjIuNS50Z3oiCisgICAgfSwKKyAg
ICAiY29yZS1qcyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMi43IiwKKyAgICAgICJmcm9tIjog
ImNvcmUtanNAPj0xLjAuMCA8Mi4wLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVn
aXN0cnkubnBtanMub3JnL2NvcmUtanMvLS9jb3JlLWpzLTEuMi43LnRneiIKKyAgICB9LAorICAg
ICJkaXJlY3RvciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMi44IiwKKyAgICAgICJmcm9tIjog
ImRpcmVjdG9yQD49MS4yLjggPDIuMC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3Jl
Z2lzdHJ5Lm5wbWpzLm9yZy9kaXJlY3Rvci8tL2RpcmVjdG9yLTEuMi44LnRneiIKKyAgICB9LAor
ICAgICJlbmNvZGluZyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuMS4xMiIsCisgICAgICAiZnJv
bSI6ICJlbmNvZGluZ0A+PTAuMS4xMSA8MC4yLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBz
Oi8vcmVnaXN0cnkubnBtanMub3JnL2VuY29kaW5nLy0vZW5jb2RpbmctMC4xLjEyLnRneiIKKyAg
ICB9LAorICAgICJmYmpzIjogeworICAgICAgInZlcnNpb24iOiAiMC44LjYiLAorICAgICAgImZy
b20iOiAiZmJqc0A+PTAuOC40IDwwLjkuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9y
ZWdpc3RyeS5ucG1qcy5vcmcvZmJqcy8tL2ZianMtMC44LjYudGd6IgorICAgIH0sCisgICAgImlj
b252LWxpdGUiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjQuMTUiLAorICAgICAgImZyb20iOiAi
aWNvbnYtbGl0ZUA+PTAuNC4xMyA8MC41LjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8v
cmVnaXN0cnkubnBtanMub3JnL2ljb252LWxpdGUvLS9pY29udi1saXRlLTAuNC4xNS50Z3oiCisg
ICAgfSwKKyAgICAiaXMtc3RyZWFtIjogeworICAgICAgInZlcnNpb24iOiAiMS4xLjAiLAorICAg
ICAgImZyb20iOiAiaXMtc3RyZWFtQD49MS4wLjEgPDIuMC4wIiwKKyAgICAgICJyZXNvbHZlZCI6
ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pcy1zdHJlYW0vLS9pcy1zdHJlYW0tMS4xLjAu
dGd6IgorICAgIH0sCisgICAgImlzb21vcnBoaWMtZmV0Y2giOiB7CisgICAgICAidmVyc2lvbiI6
ICIyLjIuMSIsCisgICAgICAiZnJvbSI6ICJpc29tb3JwaGljLWZldGNoQD49Mi4xLjEgPDMuMC4w
IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pc29tb3Jw
aGljLWZldGNoLy0vaXNvbW9ycGhpYy1mZXRjaC0yLjIuMS50Z3oiCisgICAgfSwKKyAgICAianMt
dG9rZW5zIjogeworICAgICAgInZlcnNpb24iOiAiMi4wLjAiLAorICAgICAgImZyb20iOiAianMt
dG9rZW5zQD49Mi4wLjAgPDMuMC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lz
dHJ5Lm5wbWpzLm9yZy9qcy10b2tlbnMvLS9qcy10b2tlbnMtMi4wLjAudGd6IgorICAgIH0sCisg
ICAgImxvb3NlLWVudmlmeSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMy4wIiwKKyAgICAgICJm
cm9tIjogImxvb3NlLWVudmlmeUA+PTEuMS4wIDwyLjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAi
aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbG9vc2UtZW52aWZ5Ly0vbG9vc2UtZW52aWZ5LTEu
My4wLnRneiIKKyAgICB9LAorICAgICJub2RlLWZldGNoIjogeworICAgICAgInZlcnNpb24iOiAi
MS42LjMiLAorICAgICAgImZyb20iOiAibm9kZS1mZXRjaEA+PTEuMC4xIDwyLjAuMCIsCisgICAg
ICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbm9kZS1mZXRjaC8tL25v
ZGUtZmV0Y2gtMS42LjMudGd6IgorICAgIH0sCisgICAgIm9iamVjdC1hc3NpZ24iOiB7CisgICAg
ICAidmVyc2lvbiI6ICI0LjEuMCIsCisgICAgICAiZnJvbSI6ICJvYmplY3QtYXNzaWduQD49NC4x
LjAgPDUuMC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9y
Zy9vYmplY3QtYXNzaWduLy0vb2JqZWN0LWFzc2lnbi00LjEuMC50Z3oiCisgICAgfSwKKyAgICAi
cHJvbWlzZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjcuMS4xIiwKKyAgICAgICJmcm9tIjogInBy
b21pc2VAPj03LjEuMSA8OC4wLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0
cnkubnBtanMub3JnL3Byb21pc2UvLS9wcm9taXNlLTcuMS4xLnRneiIKKyAgICB9LAorICAgICJy
ZWFjdCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjE1LjQuMCIsCisgICAgICAiZnJvbSI6ICJyZWFj
dEAxNS40LjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3Jn
L3JlYWN0Ly0vcmVhY3QtMTUuNC4wLnRneiIKKyAgICB9LAorICAgICJyZWFjdC1kb20iOiB7Cisg
ICAgICAidmVyc2lvbiI6ICIxNS40LjAiLAorICAgICAgImZyb20iOiAicmVhY3QtZG9tQDE1LjQu
MCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcmVhY3Qt
ZG9tLy0vcmVhY3QtZG9tLTE1LjQuMC50Z3oiCisgICAgfSwKKyAgICAidG9kb212Yy1hcHAtY3Nz
IjogeworICAgICAgInZlcnNpb24iOiAiMi4wLjYiLAorICAgICAgImZyb20iOiAidG9kb212Yy1h
cHAtY3NzQD49Mi4wLjAgPDMuMC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lz
dHJ5Lm5wbWpzLm9yZy90b2RvbXZjLWFwcC1jc3MvLS90b2RvbXZjLWFwcC1jc3MtMi4wLjYudGd6
IgorICAgIH0sCisgICAgInRvZG9tdmMtY29tbW9uIjogeworICAgICAgInZlcnNpb24iOiAiMS4w
LjMiLAorICAgICAgImZyb20iOiAidG9kb212Yy1jb21tb25APj0xLjAuMiA8Mi4wLjAiLAorICAg
ICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3RvZG9tdmMtY29tbW9u
Ly0vdG9kb212Yy1jb21tb24tMS4wLjMudGd6IgorICAgIH0sCisgICAgInVhLXBhcnNlci1qcyI6
IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuNy4xMiIsCisgICAgICAiZnJvbSI6ICJ1YS1wYXJzZXIt
anNAPj0wLjcuOSA8MC44LjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnku
bnBtanMub3JnL3VhLXBhcnNlci1qcy8tL3VhLXBhcnNlci1qcy0wLjcuMTIudGd6IgorICAgIH0s
CisgICAgIndoYXR3Zy1mZXRjaCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuMC4xIiwKKyAgICAg
ICJmcm9tIjogIndoYXR3Zy1mZXRjaEA+PTAuMTAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0
cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd2hhdHdnLWZldGNoLy0vd2hhdHdnLWZldGNoLTIuMC4x
LnRneiIKKyAgICB9CisgIH0KK30KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRv
bWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L3BhY2th
Z2UuanNvbiBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMv
YXJjaGl0ZWN0dXJlLWV4YW1wbGVzL3JlYWN0L3BhY2thZ2UuanNvbgpuZXcgZmlsZSBtb2RlIDEw
MDc1NQppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZTZm
M2Q2ZjI0MDQ5YWVhNWM5NDBjNzcwNTU2M2YzZjA5NjY1YzM2Ci0tLSAvZGV2L251bGwKKysrIGIv
UGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy9hcmNoaXRlY3R1
cmUtZXhhbXBsZXMvcmVhY3QvcGFja2FnZS5qc29uCkBAIC0wLDAgKzEsMjAgQEAKK3sKKyAgInBy
aXZhdGUiOiB0cnVlLAorICAic2NyaXB0cyI6IHsKKyAgICAibWFrZSI6ICJiYWJlbCAtLXBsdWdp
bnMgdHJhbnNmb3JtLXJlYWN0LWpzeCBqcy9hcHAuanN4IHwgdWdsaWZ5anMgLW8gYnVpbGQubWlu
LmpzIgorICB9LAorICAiZGVwZW5kZW5jaWVzIjogeworICAgICJjbGFzc25hbWVzIjogIl4yLjIu
NSIsCisgICAgImRpcmVjdG9yIjogIl4xLjIuOCIsCisgICAgInJlYWN0IjogIl4xNS40LjAiLAor
ICAgICJyZWFjdC1kb20iOiAiXjE1LjQuMCIsCisgICAgInRvZG9tdmMtYXBwLWNzcyI6ICJeMi4w
LjAiLAorICAgICJ0b2RvbXZjLWNvbW1vbiI6ICJeMS4wLjIiCisgIH0sCisgICJkZXZEZXBlbmRl
bmNpZXMiOiB7CisgICAgImJhYmVsLWNsaSI6ICJeNi4xMC4xIiwKKyAgICAiYmFiZWwtcGx1Z2lu
LXRyYW5zZm9ybS1yZWFjdC1qc3giOiAiXjYuOC4wIiwKKyAgICAiYmFiZWwtcGx1Z2luLXVnbGlm
eSI6ICJeMS4wLjIiLAorICAgICJ1Z2xpZnktanMiOiAiXjIuNi40IgorICB9Cit9CmRpZmYgLS1n
aXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3Zhbmls
bGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svLmJhYmVscmMgYi9QZXJmb3JtYW5jZVRl
c3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1
LWJhYmVsLXdlYnBhY2svLmJhYmVscmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDBhMjMwM2ZiNTljY2E0ZGM1MGZh
MDA4MGEzNDg3YjFiNGUxNjFhYQotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMv
U3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFi
ZWwtd2VicGFjay8uYmFiZWxyYwpAQCAtMCwwICsxLDE1IEBACit7CisgICJwcmVzZXRzIjogWwor
ICAgIFsiZXMyMDE1IiwgeyJtb2R1bGVzIjogZmFsc2V9XSwKKyAgICAiZXMyMDE2IiwKKyAgICAi
c3RhZ2UtMiIsCisgICAgInJlYWN0IgorICBdLAorICAiZW52IjogeworICAgICJ0ZXN0Ijogewor
ICAgICAgInBsdWdpbnMiOiBbCisgICAgICAgIFsiX19jb3ZlcmFnZV9fIiwgeyJpZ25vcmUiOiAi
Ki4rKHRlc3R8c3R1YikuKiJ9XQorICAgICAgXQorICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEv
UGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4
YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrLy5lc2xpbnRpZ25vcmUgYi9QZXJmb3JtYW5jZVRl
c3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1
LWJhYmVsLXdlYnBhY2svLmVzbGludGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZjliZmZhNTJlMTcwYTUy
YmQ3YjcxZTVmY2RiODZjNDMzZTk0N2U2Ci0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VU
ZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAx
NS1iYWJlbC13ZWJwYWNrLy5lc2xpbnRpZ25vcmUKQEAgLTAsMCArMSwzIEBACitjb3ZlcmFnZS8K
K25vZGVfbW9kdWxlcy8KK2Rpc3QKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRv
bWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2Vi
cGFjay8uZXNsaW50cmMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90
b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svLmVzbGludHJjCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjMzMzM5MmI3MTNlNTI0NWZlYmRiOWQwZGQyMzdlOWFjM2RiMDkzNzcKLS0tIC9k
ZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2Rv
bXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svLmVzbGludHJjCkBAIC0w
LDAgKzEsNDEgQEAKK3sKKyAgImV4dGVuZHMiOiBbCisgICAgImtlbnRjZG9kZHMvYmVzdC1wcmFj
dGljZXMiLAorICAgICJrZW50Y2RvZGRzL3Bvc3NpYmxlLWVycm9ycyIsCisgICAgImtlbnRjZG9k
ZHMvZXM2L2Jlc3QtcHJhY3RpY2VzIiwKKyAgICAia2VudGNkb2Rkcy9lczYvcG9zc2libGUtZXJy
b3JzIiwKKyAgICAia2VudGNkb2Rkcy9pbXBvcnQvYmVzdC1wcmFjdGljZXMiLAorICAgICJrZW50
Y2RvZGRzL2ltcG9ydC9wb3NzaWJsZS1lcnJvcnMiLAorICAgICJrZW50Y2RvZGRzL21vY2hhIiwK
KyAgICAia2VudGNkb2Rkcy93ZWJwYWNrIiwKKyAgICAia2VudGNkb2Rkcy9yZWFjdCIsCisgIF0s
CisgICJydWxlcyI6IHsKKyAgICAvLyB0aGVzZSBhcmUgb25seSBoZXJlIGJlY2F1c2UgSSBkaWQg
bm90CisgICAgLy8gd2FudCB0byB1cGRhdGUgdGhlIGVudGlyZSBjb2RlYmFzZSDCr1xfKOODhClf
L8KvCisgICAgImZ1bmMtbmFtZXMiOiAwLAorICAgICJuby12YXIiOiAwLAorICAgICJmdW5jLXN0
eWxlIjogMCwKKyAgICAiY29tbWEtZGFuZ2xlIjogMCwKKyAgICAidmFsaWQtanNkb2MiOiAwLAor
ICAgICJ2YXJzLW9uLXRvcCI6IDAsCisgICAgImNvbXBsZXhpdHkiOiBbMiwgOF0sCisgICAgIm1h
eC1kZXB0aCI6IFsyLCA2XSwKKyAgICAiY29uc2lzdGVudC1yZXR1cm4iOiAwLAorICAgICJpZC1t
YXRjaCI6IDAsCisgICAgImltcG9ydC9uZXdsaW5lLWFmdGVyLWltcG9ydCI6IDAsCisgICAgLy8g
ZXM2IHN0dWZmIHdlIHRlY2huaWNhbGx5IGNhbiBub3QgZG8geWV0CisgICAgInN0cmljdCI6IDAs
CisgICAgIm9iamVjdC1zaG9ydGhhbmQiOiAwLAorICAgICJwcmVmZXItYXJyb3ctY2FsbGJhY2si
OiAwLAorICAgICJwcmVmZXItdGVtcGxhdGUiOiAwLAorICAgICJiYWJlbC9vYmplY3Qtc2hvcnRo
YW5kIjogMCwKKyAgfSwKKyAgImdsb2JhbHMiOiB7CisgICAgImRlc2NyaWJlIjogZmFsc2UsCisg
ICAgIml0IjogZmFsc2UsCisgICAgImV4cGVjdCI6IGZhbHNlLAorICAgICIkb24iOiBmYWxzZSwK
KyAgICAiYmVmb3JlRWFjaCI6IGZhbHNlLAorICB9Cit9CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5j
ZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMy
MDE1LWJhYmVsLXdlYnBhY2svTElDRU5TRSBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIv
cmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9M
SUNFTlNFCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmU4NWMzMDg2MDNmOGIyMzFlODNhNDNkZTVhZDg1YzEwYWZmN2Ix
YjIKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291
cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svTElDRU5T
RQpAQCAtMCwwICsxLDggQEAKK1RoZSBNSVQgTGljZW5zZSAoTUlUKQorQ29weXJpZ2h0IChjKSAy
MDE2IEtlbnQgQy4gRG9kZHMsIEFkZHkgT3NtYW5pCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdy
YW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2Yg
dGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNv
ZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGlu
Y2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlm
eSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNv
cGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBT
b2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zOgorCitUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNz
aW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFs
IHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJB
UyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwg
SU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1F
TlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJF
IExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZS
T00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0Ug
T1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFu
Y2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2Vz
MjAxNS1iYWJlbC13ZWJwYWNrL2Rpc3QvYnVuZGxlLmFwcC40MjFlYjZiYWNhMDIyMThlOTg1ZS5q
cyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxs
YS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9kaXN0L2J1bmRsZS5hcHAuNDIxZWI2YmFj
YTAyMjE4ZTk4NWUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGUxNzlmMzZkY2M1NjM2NjljYjM2YmE0ZjFjZDli
MDg2MDQxOTUwNwotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0
ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFj
ay9kaXN0L2J1bmRsZS5hcHAuNDIxZWI2YmFjYTAyMjE4ZTk4NWUuanMKQEAgLTAsMCArMSwyIEBA
Cit3ZWJwYWNrSnNvbnAoWzAsMl0sW2Z1bmN0aW9uKHQsZSxpKXsidXNlIHN0cmljdCI7ZnVuY3Rp
b24gbyh0LGUpe3JldHVybihlfHxkb2N1bWVudCkucXVlcnlTZWxlY3Rvcih0KX1mdW5jdGlvbiBu
KHQsZSl7cmV0dXJuKGV8fGRvY3VtZW50KS5xdWVyeVNlbGVjdG9yQWxsKHQpfWZ1bmN0aW9uIHIo
dCxlLGksbyl7dC5hZGRFdmVudExpc3RlbmVyKGUsaSwhIW8pfWZ1bmN0aW9uIGwodCxlLGksbyl7
ZnVuY3Rpb24gbChpKXt2YXIgcj1pLnRhcmdldCxsPW4oZSx0KSxhPUFycmF5LnByb3RvdHlwZS5p
bmRleE9mLmNhbGwobCxyKT49MDthJiZvLmNhbGwocixpKX12YXIgYT0iYmx1ciI9PT1pfHwiZm9j
dXMiPT09aTtyKHQsaSxsLGEpfWZ1bmN0aW9uIGEodCxlKXtpZih0LnBhcmVudE5vZGUpcmV0dXJu
IHQucGFyZW50Tm9kZS50YWdOYW1lLnRvTG93ZXJDYXNlKCk9PT1lLnRvTG93ZXJDYXNlKCk/dC5w
YXJlbnROb2RlOmEodC5wYXJlbnROb2RlLGUpfWZ1bmN0aW9uIGModCxlKXt2YXIgaT10LmluZGV4
T2YoZSk7cmV0dXJuIGk9PT0tMT90OnZvaWQgdC5zcGxpY2UoaSwxKX1pLmQoZSwiYSIsZnVuY3Rp
b24oKXtyZXR1cm4gb30pLGkuZChlLCJiIixmdW5jdGlvbigpe3JldHVybiBufSksaS5kKGUsImQi
LGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KSxpLmQoZSwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gbH0pLGku
ZChlLCJlIixmdW5jdGlvbigpe3JldHVybiBhfSksaS5kKGUsImYiLGZ1bmN0aW9uKCl7cmV0dXJu
IGN9KSxOb2RlTGlzdC5wcm90b3R5cGUuZm9yRWFjaD1BcnJheS5wcm90b3R5cGUuZm9yRWFjaH0s
LGZ1bmN0aW9uKHQsZSxpKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbygpe2kuaShsLmEpKCl9dmFy
IG49aSgxKSxyPShpLm4obiksaSg5KSksbD0oaS5uKHIpLGkoMCksaSg3KSk7ZS5hPW99LGZ1bmN0
aW9uKHQsZSxpKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbyh0LGUpe3ZhciBpPXRoaXM7aS5tb2Rl
bD10LGkudmlldz1lLGkudmlldy5iaW5kKCJuZXdUb2RvIixmdW5jdGlvbih0KXtpLmFkZEl0ZW0o
dCl9KSxpLnZpZXcuYmluZCgiaXRlbUVkaXQiLGZ1bmN0aW9uKHQpe2kuZWRpdEl0ZW0odC5pZCl9
KSxpLnZpZXcuYmluZCgiaXRlbUVkaXREb25lIixmdW5jdGlvbih0KXtpLmVkaXRJdGVtU2F2ZSh0
LmlkLHQudGl0bGUpfSksaS52aWV3LmJpbmQoIml0ZW1FZGl0Q2FuY2VsIixmdW5jdGlvbih0KXtp
LmVkaXRJdGVtQ2FuY2VsKHQuaWQpfSksaS52aWV3LmJpbmQoIml0ZW1SZW1vdmUiLGZ1bmN0aW9u
KHQpe2kucmVtb3ZlSXRlbSh0LmlkKX0pLGkudmlldy5iaW5kKCJpdGVtVG9nZ2xlIixmdW5jdGlv
bih0KXtpLnRvZ2dsZUNvbXBsZXRlKHQuaWQsdC5jb21wbGV0ZWQpfSksaS52aWV3LmJpbmQoInJl
bW92ZUNvbXBsZXRlZCIsZnVuY3Rpb24oKXtpLnJlbW92ZUNvbXBsZXRlZEl0ZW1zKCl9KSxpLnZp
ZXcuYmluZCgidG9nZ2xlQWxsIixmdW5jdGlvbih0KXtpLnRvZ2dsZUFsbCh0LmNvbXBsZXRlZCl9
KX1lLmE9byxvLnByb3RvdHlwZS5zZXRWaWV3PWZ1bmN0aW9uKHQpe3ZhciBlPXQuc3BsaXQoIi8i
KVsxXSxpPWV8fCIiO3RoaXMuX3VwZGF0ZUZpbHRlclN0YXRlKGkpfSxvLnByb3RvdHlwZS5zaG93
QWxsPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0Lm1vZGVsLnJlYWQoZnVuY3Rpb24oZSl7dC52aWV3
LnJlbmRlcigic2hvd0VudHJpZXMiLGUpfSl9LG8ucHJvdG90eXBlLnNob3dBY3RpdmU9ZnVuY3Rp
b24oKXt2YXIgdD10aGlzO3QubW9kZWwucmVhZCh7Y29tcGxldGVkOiExfSxmdW5jdGlvbihlKXt0
LnZpZXcucmVuZGVyKCJzaG93RW50cmllcyIsZSl9KX0sby5wcm90b3R5cGUuc2hvd0NvbXBsZXRl
ZD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dC5tb2RlbC5yZWFkKHtjb21wbGV0ZWQ6ITB9LGZ1bmN0
aW9uKGUpe3Qudmlldy5yZW5kZXIoInNob3dFbnRyaWVzIixlKX0pfSxvLnByb3RvdHlwZS5hZGRJ
dGVtPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7IiIhPT10LnRyaW0oKSYmZS5tb2RlbC5jcmVhdGUo
dCxmdW5jdGlvbigpe2Uudmlldy5yZW5kZXIoImNsZWFyTmV3VG9kbyIpLGUuX2ZpbHRlcighMCl9
KX0sby5wcm90b3R5cGUuZWRpdEl0ZW09ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztlLm1vZGVsLnJl
YWQodCxmdW5jdGlvbihpKXtlLnZpZXcucmVuZGVyKCJlZGl0SXRlbSIse2lkOnQsdGl0bGU6aVsw
XS50aXRsZX0pfSl9LG8ucHJvdG90eXBlLmVkaXRJdGVtU2F2ZT1mdW5jdGlvbih0LGUpe3ZhciBp
PXRoaXM7ZS50cmltKCk/aS5tb2RlbC51cGRhdGUodCx7dGl0bGU6ZX0sZnVuY3Rpb24oKXtpLnZp
ZXcucmVuZGVyKCJlZGl0SXRlbURvbmUiLHtpZDp0LHRpdGxlOmV9KX0pOmkucmVtb3ZlSXRlbSh0
KX0sby5wcm90b3R5cGUuZWRpdEl0ZW1DYW5jZWw9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztlLm1v
ZGVsLnJlYWQodCxmdW5jdGlvbihpKXtlLnZpZXcucmVuZGVyKCJlZGl0SXRlbURvbmUiLHtpZDp0
LHRpdGxlOmlbMF0udGl0bGV9KX0pfSxvLnByb3RvdHlwZS5yZW1vdmVJdGVtPWZ1bmN0aW9uKHQp
e3ZhciBlPXRoaXM7ZS5tb2RlbC5yZW1vdmUodCxmdW5jdGlvbigpe2Uudmlldy5yZW5kZXIoInJl
bW92ZUl0ZW0iLHQpfSksZS5fZmlsdGVyKCl9LG8ucHJvdG90eXBlLnJlbW92ZUNvbXBsZXRlZEl0
ZW1zPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0Lm1vZGVsLnJlYWQoe2NvbXBsZXRlZDohMH0sZnVu
Y3Rpb24oZSl7ZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3QucmVtb3ZlSXRlbShlLmlkKX0pfSksdC5f
ZmlsdGVyKCl9LG8ucHJvdG90eXBlLnRvZ2dsZUNvbXBsZXRlPWZ1bmN0aW9uKHQsZSxpKXt2YXIg
bz10aGlzO28ubW9kZWwudXBkYXRlKHQse2NvbXBsZXRlZDplfSxmdW5jdGlvbigpe28udmlldy5y
ZW5kZXIoImVsZW1lbnRDb21wbGV0ZSIse2lkOnQsY29tcGxldGVkOmV9KX0pLGl8fG8uX2ZpbHRl
cigpfSxvLnByb3RvdHlwZS50b2dnbGVBbGw9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztlLm1vZGVs
LnJlYWQoe2NvbXBsZXRlZDohdH0sZnVuY3Rpb24oaSl7aS5mb3JFYWNoKGZ1bmN0aW9uKGkpe2Uu
dG9nZ2xlQ29tcGxldGUoaS5pZCx0LCEwKX0pfSksZS5fZmlsdGVyKCl9LG8ucHJvdG90eXBlLl91
cGRhdGVDb3VudD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dC5tb2RlbC5nZXRDb3VudChmdW5jdGlv
bihlKXt0LnZpZXcucmVuZGVyKCJ1cGRhdGVFbGVtZW50Q291bnQiLGUuYWN0aXZlKSx0LnZpZXcu
cmVuZGVyKCJjbGVhckNvbXBsZXRlZEJ1dHRvbiIse2NvbXBsZXRlZDplLmNvbXBsZXRlZCx2aXNp
YmxlOmUuY29tcGxldGVkPjB9KSx0LnZpZXcucmVuZGVyKCJ0b2dnbGVBbGwiLHtjaGVja2VkOmUu
Y29tcGxldGVkPT09ZS50b3RhbH0pLHQudmlldy5yZW5kZXIoImNvbnRlbnRCbG9ja1Zpc2liaWxp
dHkiLHt2aXNpYmxlOmUudG90YWw+MH0pfSl9LG8ucHJvdG90eXBlLl9maWx0ZXI9ZnVuY3Rpb24o
dCl7dmFyIGU9dGhpcy5fYWN0aXZlUm91dGUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrdGhpcy5f
YWN0aXZlUm91dGUuc3Vic3RyKDEpO3RoaXMuX3VwZGF0ZUNvdW50KCksKHR8fCJBbGwiIT09dGhp
cy5fbGFzdEFjdGl2ZVJvdXRlfHx0aGlzLl9sYXN0QWN0aXZlUm91dGUhPT1lKSYmdGhpc1sic2hv
dyIrZV0oKSx0aGlzLl9sYXN0QWN0aXZlUm91dGU9ZX0sby5wcm90b3R5cGUuX3VwZGF0ZUZpbHRl
clN0YXRlPWZ1bmN0aW9uKHQpe3Q9dC5zcGxpdCgiPyIpWzBdLHRoaXMuX2FjdGl2ZVJvdXRlPXQs
IiI9PT10JiYodGhpcy5fYWN0aXZlUm91dGU9IkFsbCIpLHRoaXMuX2ZpbHRlcigpLHRoaXMudmll
dy5yZW5kZXIoInNldEZpbHRlciIsdCl9fSxmdW5jdGlvbih0LGUsaSl7InVzZSBzdHJpY3QiO2Z1
bmN0aW9uIG8odCl7dGhpcy5zdG9yYWdlPXR9dmFyIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJv
bCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5
cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYm
dC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlw
ZW9mIHR9O2UuYT1vLG8ucHJvdG90eXBlLmNyZWF0ZT1mdW5jdGlvbih0LGUpe3Q9dHx8IiIsZT1l
fHxmdW5jdGlvbigpe307dmFyIGk9e3RpdGxlOnQudHJpbSgpLGNvbXBsZXRlZDohMX07dGhpcy5z
dG9yYWdlLnNhdmUoaSxlKX0sby5wcm90b3R5cGUucmVhZD1mdW5jdGlvbih0LGUpe3ZhciBpPSJ1
bmRlZmluZWQiPT10eXBlb2YgdD8idW5kZWZpbmVkIjpuKHQpO3JldHVybiBlPWV8fGZ1bmN0aW9u
KCl7fSwiZnVuY3Rpb24iPT09aT8oZT10LHRoaXMuc3RvcmFnZS5maW5kQWxsKGUpKTp2b2lkKCJz
dHJpbmciPT09aXx8Im51bWJlciI9PT1pPyh0PXBhcnNlSW50KHQsMTApLHRoaXMuc3RvcmFnZS5m
aW5kKHtpZDp0fSxlKSk6dGhpcy5zdG9yYWdlLmZpbmQodCxlKSl9LG8ucHJvdG90eXBlLnVwZGF0
ZT1mdW5jdGlvbih0LGUsaSl7dGhpcy5zdG9yYWdlLnNhdmUoZSxpLHQpfSxvLnByb3RvdHlwZS5y
ZW1vdmU9ZnVuY3Rpb24odCxlKXt0aGlzLnN0b3JhZ2UucmVtb3ZlKHQsZSl9LG8ucHJvdG90eXBl
LnJlbW92ZUFsbD1mdW5jdGlvbih0KXt0aGlzLnN0b3JhZ2UuZHJvcCh0KX0sby5wcm90b3R5cGUu
Z2V0Q291bnQ9ZnVuY3Rpb24odCl7dmFyIGU9e2FjdGl2ZTowLGNvbXBsZXRlZDowLHRvdGFsOjB9
O3RoaXMuc3RvcmFnZS5maW5kQWxsKGZ1bmN0aW9uKGkpe2kuZm9yRWFjaChmdW5jdGlvbih0KXt0
LmNvbXBsZXRlZD9lLmNvbXBsZXRlZCsrOmUuYWN0aXZlKyssZS50b3RhbCsrfSksdChlKX0pfX0s
ZnVuY3Rpb24odCxlLGkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBvKHQsZSl7aWYoZT1lfHxmdW5j
dGlvbigpe30sdGhpcy5fZGJOYW1lPXQsIWxvY2FsU3RvcmFnZVt0XSl7dmFyIGk9e3RvZG9zOltd
fTtsb2NhbFN0b3JhZ2VbdF09SlNPTi5zdHJpbmdpZnkoaSl9ZS5jYWxsKHRoaXMsSlNPTi5wYXJz
ZShsb2NhbFN0b3JhZ2VbdF0pKSx0aGlzLnN1YnNjcmliZXJzPVtdfXZhciBuPWkoMCk7ZS5hPW8s
by5wcm90b3R5cGUuc3Vic2NyaWJlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHRoaXMu
c3Vic2NyaWJlcnMucHVzaCh0KSxmdW5jdGlvbigpe3JldHVybiBpLmkobi5mKShlLnN1YnNjcmli
ZXJzLHQpfX0sby5wcm90b3R5cGUuX25vdGlmeT1mdW5jdGlvbigpe3RoaXMuc3Vic2NyaWJlcnMu
Zm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCgpfSl9LG8ucHJvdG90eXBlLmZpbmQ9ZnVuY3Rp
b24odCxlKXtpZihlKXt2YXIgaT1KU09OLnBhcnNlKGxvY2FsU3RvcmFnZVt0aGlzLl9kYk5hbWVd
KS50b2RvcztlLmNhbGwodGhpcyxpLmZpbHRlcihmdW5jdGlvbihlKXtmb3IodmFyIGkgaW4gdClp
Zih0W2ldIT09ZVtpXSlyZXR1cm4hMTtyZXR1cm4hMH0pKX19LG8ucHJvdG90eXBlLmZpbmRBbGw9
ZnVuY3Rpb24odCl7dD10fHxmdW5jdGlvbigpe30sdC5jYWxsKHRoaXMsSlNPTi5wYXJzZShsb2Nh
bFN0b3JhZ2VbdGhpcy5fZGJOYW1lXSkudG9kb3MpfSxvLnByb3RvdHlwZS5zYXZlPWZ1bmN0aW9u
KHQsZSxpKXt2YXIgbz1KU09OLnBhcnNlKGxvY2FsU3RvcmFnZVt0aGlzLl9kYk5hbWVdKSxuPW8u
dG9kb3M7aWYoZT1lfHxmdW5jdGlvbigpe30saSl7Zm9yKHZhciByPTA7cjxuLmxlbmd0aDtyKysp
aWYobltyXS5pZD09PWkpe2Zvcih2YXIgbCBpbiB0KW5bcl1bbF09dFtsXTticmVha31sb2NhbFN0
b3JhZ2VbdGhpcy5fZGJOYW1lXT1KU09OLnN0cmluZ2lmeShvKSxlLmNhbGwodGhpcyxKU09OLnBh
cnNlKGxvY2FsU3RvcmFnZVt0aGlzLl9kYk5hbWVdKS50b2Rvcyl9ZWxzZSB0LmlkPShuZXcgRGF0
ZSkuZ2V0VGltZSgpLG4ucHVzaCh0KSxsb2NhbFN0b3JhZ2VbdGhpcy5fZGJOYW1lXT1KU09OLnN0
cmluZ2lmeShvKSxlLmNhbGwodGhpcyxbdF0pO3RoaXMuX25vdGlmeSgpfSxvLnByb3RvdHlwZS5y
ZW1vdmU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIGk9SlNPTi5wYXJzZShsb2NhbFN0b3JhZ2VbdGhp
cy5fZGJOYW1lXSksbz1pLnRvZG9zLG49MDtuPG8ubGVuZ3RoO24rKylpZihvW25dLmlkPT09dCl7
by5zcGxpY2UobiwxKTticmVha31sb2NhbFN0b3JhZ2VbdGhpcy5fZGJOYW1lXT1KU09OLnN0cmlu
Z2lmeShpKSxlLmNhbGwodGhpcyxKU09OLnBhcnNlKGxvY2FsU3RvcmFnZVt0aGlzLl9kYk5hbWVd
KS50b2RvcyksdGhpcy5fbm90aWZ5KCl9LG8ucHJvdG90eXBlLmRyb3A9ZnVuY3Rpb24odCl7bG9j
YWxTdG9yYWdlW3RoaXMuX2RiTmFtZV09SlNPTi5zdHJpbmdpZnkoe3RvZG9zOltdfSksdC5jYWxs
KHRoaXMsSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2VbdGhpcy5fZGJOYW1lXSkudG9kb3MpLHRoaXMu
X25vdGlmeSgpfX0sZnVuY3Rpb24odCxlLGkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBvKCl7dGhp
cy5kZWZhdWx0VGVtcGxhdGU9J1xuICAgIDxsaSBkYXRhLWlkPSJ7e2lkfX0iIGNsYXNzPSJ7e2Nv
bXBsZXRlZH19Ij5cbiAgICAgIDxkaXYgY2xhc3M9InZpZXciPlxuICAgICAgICA8aW5wdXQgY2xh
c3M9InRvZ2dsZSIgdHlwZT0iY2hlY2tib3giIHt7Y2hlY2tlZH19IC8+XG4gICAgICAgIDxsYWJl
bD57e3RpdGxlfX08L2xhYmVsPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPSJkZXN0cm95Ij48L2J1
dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbGk+XG4gICd9ZS5hPW87dmFyIG49eyImIjoiJmFt
cDsiLCI8IjoiJmx0OyIsIj4iOiImZ3Q7IiwnIic6IiZxdW90OyIsIiciOiImI3gyNzsiLCJgIjoi
JiN4NjA7In0scj1mdW5jdGlvbih0KXtyZXR1cm4gblt0XX0sbD0vWyY8PiInYF0vZyxhPW5ldyBS
ZWdFeHAobC5zb3VyY2UpLGM9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJmEudGVzdCh0KT90LnJlcGxh
Y2UobCxyKTp0fTtvLnByb3RvdHlwZS5zaG93PWZ1bmN0aW9uKHQpe3ZhciBlLGksbz0iIjtmb3Io
ZT0wLGk9dC5sZW5ndGg7ZTxpO2UrKyl7dmFyIG49dGhpcy5kZWZhdWx0VGVtcGxhdGUscj0iIixs
PSIiO3RbZV0uY29tcGxldGVkJiYocj0iY29tcGxldGVkIixsPSJjaGVja2VkIiksbj1uLnJlcGxh
Y2UoInt7aWR9fSIsdFtlXS5pZCksbj1uLnJlcGxhY2UoInt7dGl0bGV9fSIsYyh0W2VdLnRpdGxl
KSksbj1uLnJlcGxhY2UoInt7Y29tcGxldGVkfX0iLHIpLG49bi5yZXBsYWNlKCJ7e2NoZWNrZWR9
fSIsbCksbys9bn1yZXR1cm4gb30sby5wcm90b3R5cGUuaXRlbUNvdW50ZXI9ZnVuY3Rpb24odCl7
dmFyIGU9MT09PXQ/IiI6InMiO3JldHVybiI8c3Ryb25nPiIrdCsiPC9zdHJvbmc+IGl0ZW0iK2Ur
IiBsZWZ0In0sby5wcm90b3R5cGUuY2xlYXJDb21wbGV0ZWRCdXR0b249ZnVuY3Rpb24odCl7cmV0
dXJuIHQ+MD8iQ2xlYXIgY29tcGxldGVkIjoiIn19LGZ1bmN0aW9uKHQsZSxpKXsidXNlIHN0cmlj
dCI7ZnVuY3Rpb24gbyh0KXt0aGlzLnN0b3JhZ2U9bmV3IGMuYSh0KSx0aGlzLm1vZGVsPW5ldyBh
LmEodGhpcy5zdG9yYWdlKSx0aGlzLnRlbXBsYXRlPW5ldyBkLmEsdGhpcy52aWV3PW5ldyByLmEo
dGhpcy50ZW1wbGF0ZSksdGhpcy5jb250cm9sbGVyPW5ldyBsLmEodGhpcy5tb2RlbCx0aGlzLnZp
ZXcpfWZ1bmN0aW9uIG4oKXtzPW5ldyBvKCJ0b2Rvcy12YW5pbGxhanMiKSxzLmNvbnRyb2xsZXIu
c2V0Vmlldyhkb2N1bWVudC5sb2NhdGlvbi5oYXNoKSx1LmZvckVhY2goZnVuY3Rpb24odCl7cmV0
dXJuIHQoKX0pfXZhciByPWkoOCksbD1pKDMpLGE9aSg0KSxjPWkoNSksZD1pKDYpO2koMCk7aS5k
KGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIG59KTt2YXIgcz12b2lkIDAsdT1bXX0sZnVuY3Rpb24o
dCxlLGkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBvKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkp
dGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9
ZnVuY3Rpb24gbih0KXtpLmkoYy5hKSgiLmZpbHRlcnMgLnNlbGVjdGVkIikuY2xhc3NOYW1lPSIi
LGkuaShjLmEpKCcuZmlsdGVycyBbaHJlZj0iIy8nK3QrJyJdJykuY2xhc3NOYW1lPSJzZWxlY3Rl
ZCJ9ZnVuY3Rpb24gcih0LGUpe3ZhciBvPWkuaShjLmEpKCdbZGF0YS1pZD0iJyt0KyciXScpO28m
JihvLmNsYXNzTmFtZT1lPyJjb21wbGV0ZWQiOiIiLGkuaShjLmEpKCJpbnB1dCIsbykuY2hlY2tl
ZD1lKX1mdW5jdGlvbiBsKHQsZSl7dmFyIG89aS5pKGMuYSkoJ1tkYXRhLWlkPSInK3QrJyJdJyk7
aWYobyl7by5jbGFzc05hbWU9by5jbGFzc05hbWUrIiBlZGl0aW5nIjt2YXIgbj1kb2N1bWVudC5j
cmVhdGVFbGVtZW50KCJpbnB1dCIpO24uY2xhc3NOYW1lPSJlZGl0IixvLmFwcGVuZENoaWxkKG4p
LG4uZm9jdXMoKSxuLnZhbHVlPWV9fWZ1bmN0aW9uIGEodCl7dmFyIGU9aS5pKGMuZSkodCwibGki
KTtyZXR1cm4gcGFyc2VJbnQoZS5kYXRhc2V0LmlkLDEwKX12YXIgYz1pKDApLGQ9ZnVuY3Rpb24o
KXtmdW5jdGlvbiB0KHQsZSl7Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBvPWVbaV07
by5lbnVtZXJhYmxlPW8uZW51bWVyYWJsZXx8ITEsby5jb25maWd1cmFibGU9ITAsInZhbHVlImlu
IG8mJihvLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxvLmtleSxvKX19cmV0
dXJuIGZ1bmN0aW9uKGUsaSxvKXtyZXR1cm4gaSYmdChlLnByb3RvdHlwZSxpKSxvJiZ0KGUsbyks
ZX19KCkscz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7byh0aGlzLHQpLHRoaXMudGVtcGxhdGU9
ZSx0aGlzLkVOVEVSX0tFWT0xMyx0aGlzLkVTQ0FQRV9LRVk9MjcsdGhpcy4kdG9kb0xpc3Q9aS5p
KGMuYSkoIi50b2RvLWxpc3QiKSx0aGlzLiR0b2RvSXRlbUNvdW50ZXI9aS5pKGMuYSkoIi50b2Rv
LWNvdW50IiksdGhpcy4kY2xlYXJDb21wbGV0ZWQ9aS5pKGMuYSkoIi5jbGVhci1jb21wbGV0ZWQi
KSx0aGlzLiRtYWluPWkuaShjLmEpKCIubWFpbiIpLHRoaXMuJGZvb3Rlcj1pLmkoYy5hKSgiLmZv
b3RlciIpLHRoaXMuJHRvZ2dsZUFsbD1pLmkoYy5hKSgiLnRvZ2dsZS1hbGwiKSx0aGlzLiRuZXdU
b2RvPWkuaShjLmEpKCIubmV3LXRvZG8iKX1yZXR1cm4gZCh0LFt7a2V5OiJfcmVtb3ZlSXRlbSIs
dmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9aS5pKGMuYSkoJ1tkYXRhLWlkPSInK3QrJyJdJyk7ZSYm
dGhpcy4kdG9kb0xpc3QucmVtb3ZlQ2hpbGQoZSl9fSx7a2V5OiJfY2xlYXJDb21wbGV0ZWRCdXR0
b24iLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dGhpcy4kY2xlYXJDb21wbGV0ZWQuaW5uZXJIVE1MPXRo
aXMudGVtcGxhdGUuY2xlYXJDb21wbGV0ZWRCdXR0b24odCksdGhpcy4kY2xlYXJDb21wbGV0ZWQu
c3R5bGUuZGlzcGxheT1lPyJibG9jayI6Im5vbmUifX0se2tleToiX2VkaXRJdGVtRG9uZSIsdmFs
dWU6ZnVuY3Rpb24odCxlKXt2YXIgbz1pLmkoYy5hKSgnW2RhdGEtaWQ9IicrdCsnIl0nKTtpZihv
KXt2YXIgbj1pLmkoYy5hKSgiaW5wdXQuZWRpdCIsbyk7by5yZW1vdmVDaGlsZChuKSxvLmNsYXNz
TmFtZT1vLmNsYXNzTmFtZS5yZXBsYWNlKCJlZGl0aW5nIiwiIiksaS5pKGMuYikoImxhYmVsIixv
KS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QudGV4dENvbnRlbnQ9ZX0pfX19LHtrZXk6InJlbmRlciIs
dmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLG89e3Nob3dFbnRyaWVzOmZ1bmN0aW9uKCl7
aS4kdG9kb0xpc3QuaW5uZXJIVE1MPWkudGVtcGxhdGUuc2hvdyhlKX0scmVtb3ZlSXRlbTpmdW5j
dGlvbigpe2kuX3JlbW92ZUl0ZW0oZSl9LHVwZGF0ZUVsZW1lbnRDb3VudDpmdW5jdGlvbigpe2ku
JHRvZG9JdGVtQ291bnRlci5pbm5lckhUTUw9aS50ZW1wbGF0ZS5pdGVtQ291bnRlcihlKX0sY2xl
YXJDb21wbGV0ZWRCdXR0b246ZnVuY3Rpb24oKXtpLl9jbGVhckNvbXBsZXRlZEJ1dHRvbihlLmNv
bXBsZXRlZCxlLnZpc2libGUpfSxjb250ZW50QmxvY2tWaXNpYmlsaXR5OmZ1bmN0aW9uKCl7aS4k
bWFpbi5zdHlsZS5kaXNwbGF5PWkuJGZvb3Rlci5zdHlsZS5kaXNwbGF5PWUudmlzaWJsZT8iYmxv
Y2siOiJub25lIn0sdG9nZ2xlQWxsOmZ1bmN0aW9uKCl7aS4kdG9nZ2xlQWxsLmNoZWNrZWQ9ZS5j
aGVja2VkfSxzZXRGaWx0ZXI6ZnVuY3Rpb24oKXtuKGUpfSxjbGVhck5ld1RvZG86ZnVuY3Rpb24o
KXtpLiRuZXdUb2RvLnZhbHVlPSIifSxlbGVtZW50Q29tcGxldGU6ZnVuY3Rpb24oKXtyKGUuaWQs
ZS5jb21wbGV0ZWQpfSxlZGl0SXRlbTpmdW5jdGlvbigpe2woZS5pZCxlLnRpdGxlKX0sZWRpdEl0
ZW1Eb25lOmZ1bmN0aW9uKCl7aS5fZWRpdEl0ZW1Eb25lKGUuaWQsZS50aXRsZSl9fTtvW3RdKCl9
fSx7a2V5OiJfYmluZEl0ZW1FZGl0RG9uZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztp
LmkoYy5jKShlLiR0b2RvTGlzdCwibGkgLmVkaXQiLCJibHVyIixmdW5jdGlvbigpe3RoaXMuZGF0
YXNldC5pc2NhbmNlbGVkfHx0KHtpZDphKHRoaXMpLHRpdGxlOnRoaXMudmFsdWV9KX0pLGkuaShj
LmMpKGUuJHRvZG9MaXN0LCJsaSAuZWRpdCIsImtleXByZXNzIixmdW5jdGlvbih0KXt0LmtleUNv
ZGU9PT1lLkVOVEVSX0tFWSYmdGhpcy5ibHVyKCl9KX19LHtrZXk6Il9iaW5kSXRlbUVkaXRDYW5j
ZWwiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aS5pKGMuYykoZS4kdG9kb0xpc3QsImxp
IC5lZGl0Iiwia2V5dXAiLGZ1bmN0aW9uKGkpe2kua2V5Q29kZT09PWUuRVNDQVBFX0tFWSYmKHRo
aXMuZGF0YXNldC5pc2NhbmNlbGVkPSEwLHRoaXMuYmx1cigpLHQoe2lkOmEodGhpcyl9KSl9KX19
LHtrZXk6ImJpbmQiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIG89dGhpczsibmV3VG9kbyI9PT10
P2kuaShjLmQpKG8uJG5ld1RvZG8sImNoYW5nZSIsZnVuY3Rpb24oKXtlKG8uJG5ld1RvZG8udmFs
dWUpfSk6InJlbW92ZUNvbXBsZXRlZCI9PT10P2kuaShjLmQpKG8uJGNsZWFyQ29tcGxldGVkLCJj
bGljayIsZnVuY3Rpb24oKXtlKCl9KToidG9nZ2xlQWxsIj09PXQ/aS5pKGMuZCkoby4kdG9nZ2xl
QWxsLCJjbGljayIsZnVuY3Rpb24oKXtlKHtjb21wbGV0ZWQ6dGhpcy5jaGVja2VkfSl9KToiaXRl
bUVkaXQiPT09dD9pLmkoYy5jKShvLiR0b2RvTGlzdCwibGkgbGFiZWwiLCJkYmxjbGljayIsZnVu
Y3Rpb24oKXtlKHtpZDphKHRoaXMpfSl9KToiaXRlbVJlbW92ZSI9PT10P2kuaShjLmMpKG8uJHRv
ZG9MaXN0LCIuZGVzdHJveSIsImNsaWNrIixmdW5jdGlvbigpe2Uoe2lkOmEodGhpcyl9KX0pOiJp
dGVtVG9nZ2xlIj09PXQ/aS5pKGMuYykoby4kdG9kb0xpc3QsIi50b2dnbGUiLCJjbGljayIsZnVu
Y3Rpb24oKXtlKHtpZDphKHRoaXMpLGNvbXBsZXRlZDp0aGlzLmNoZWNrZWR9KX0pOiJpdGVtRWRp
dERvbmUiPT09dD9vLl9iaW5kSXRlbUVkaXREb25lKGUpOiJpdGVtRWRpdENhbmNlbCI9PT10JiZv
Ll9iaW5kSXRlbUVkaXRDYW5jZWwoZSl9fV0pLHR9KCk7ZS5hPXN9LGZ1bmN0aW9uKHQsZSl7fSxm
dW5jdGlvbih0LGUsaSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG8oKXtpLmkoci5kKSh3aW5kb3cs
ImxvYWQiLG4uYSksaS5pKHIuZCkod2luZG93LCJoYXNoY2hhbmdlIixuLmEpfXZhciBuPWkoMiks
cj1pKDApOyJjb21wbGV0ZSI9PT1kb2N1bWVudC5yZWFkeVN0YXRlO28oKX1dLFsxMF0pOworLy8j
IHNvdXJjZU1hcHBpbmdVUkw9YnVuZGxlLmFwcC40MjFlYjZiYWNhMDIyMThlOTg1ZS5qcy5tYXAK
XCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJh
YmVsLXdlYnBhY2svZGlzdC9idW5kbGUubWFuaWZlc3QuYmMwNDAzY2I3MDc2OGIxNGFkZGQuanMg
Yi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEt
ZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svZGlzdC9idW5kbGUubWFuaWZlc3QuYmMwNDAz
Y2I3MDc2OGIxNGFkZGQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjY2NzdlNTRhM2Y5MDk3ZTExYTcxZmIxZTI5
OTRiY2FmOGViMWQ4MgotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRv
bWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2Vi
cGFjay9kaXN0L2J1bmRsZS5tYW5pZmVzdC5iYzA0MDNjYjcwNzY4YjE0YWRkZC5qcwpAQCAtMCww
ICsxLDIgQEAKKyFmdW5jdGlvbihlKXtmdW5jdGlvbiByKG4pe2lmKHRbbl0pcmV0dXJuIHRbbl0u
ZXhwb3J0czt2YXIgbz10W25dPXtpOm4sbDohMSxleHBvcnRzOnt9fTtyZXR1cm4gZVtuXS5jYWxs
KG8uZXhwb3J0cyxvLG8uZXhwb3J0cyxyKSxvLmw9ITAsby5leHBvcnRzfXZhciBuPXdpbmRvdy53
ZWJwYWNrSnNvbnA7d2luZG93LndlYnBhY2tKc29ucD1mdW5jdGlvbih0LGEsdSl7Zm9yKHZhciBj
LGksZixsPTAscz1bXTtsPHQubGVuZ3RoO2wrKylpPXRbbF0sb1tpXSYmcy5wdXNoKG9baV1bMF0p
LG9baV09MDtmb3IoYyBpbiBhKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChh
LGMpJiYoZVtjXT1hW2NdKTtmb3IobiYmbih0LGEsdSk7cy5sZW5ndGg7KXMuc2hpZnQoKSgpO2lm
KHUpZm9yKGw9MDtsPHUubGVuZ3RoO2wrKylmPXIoci5zPXVbbF0pO3JldHVybiBmfTt2YXIgdD17
fSxvPXsyOjB9O3IuZT1mdW5jdGlvbihlKXtmdW5jdGlvbiBuKCl7YS5vbmVycm9yPWEub25sb2Fk
PW51bGwsY2xlYXJUaW1lb3V0KHUpO3ZhciByPW9bZV07MCE9PXImJihyJiZyWzFdKG5ldyBFcnJv
cigiTG9hZGluZyBjaHVuayAiK2UrIiBmYWlsZWQuIikpLG9bZV09dm9pZCAwKX1pZigwPT09b1tl
XSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7aWYob1tlXSlyZXR1cm4gb1tlXVsyXTt2YXIgdD1k
b2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdLGE9ZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgic2NyaXB0Iik7YS50eXBlPSJ0ZXh0L2phdmFzY3JpcHQiLGEuY2hhcnNldD0idXRm
LTgiLGEuYXN5bmM9ITAsYS50aW1lb3V0PTEyZTQsYS5zcmM9ci5wKyJidW5kbGUuIitlKyIuIit7
MDoiNDIxZWI2YmFjYTAyMjE4ZTk4NWUiLDE6ImRhMWEyZDY0MTA2ZWM1NGQ0ZjU3In1bZV0rIi5q
cyI7dmFyIHU9c2V0VGltZW91dChuLDEyZTQpO2Eub25lcnJvcj1hLm9ubG9hZD1uLHQuYXBwZW5k
Q2hpbGQoYSk7dmFyIGM9bmV3IFByb21pc2UoZnVuY3Rpb24ocixuKXtvW2VdPVtyLG5dfSk7cmV0
dXJuIG9bZV1bMl09Y30sci5tPWUsci5jPXQsci5pPWZ1bmN0aW9uKGUpe3JldHVybiBlfSxyLmQ9
ZnVuY3Rpb24oZSxyLG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIse2NvbmZpZ3VyYWJsZToh
MSxlbnVtZXJhYmxlOiEwLGdldDpufSl9LHIubj1mdW5jdGlvbihlKXt2YXIgbj1lJiZlLl9fZXNN
b2R1bGU/ZnVuY3Rpb24oKXtyZXR1cm4gZVsiZGVmYXVsdCJdfTpmdW5jdGlvbigpe3JldHVybiBl
fTtyZXR1cm4gci5kKG4sImEiLG4pLG59LHIubz1mdW5jdGlvbihlLHIpe3JldHVybiBPYmplY3Qu
cHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKX0sci5wPSIiLHIub2U9ZnVuY3Rpb24o
ZSl7dGhyb3cgY29uc29sZS5lcnJvcihlKSxlfX0oW10pOworLy8jIHNvdXJjZU1hcHBpbmdVUkw9
YnVuZGxlLm1hbmlmZXN0LmJjMDQwM2NiNzA3NjhiMTRhZGRkLmpzLm1hcApcIE5vIG5ld2xpbmUg
YXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIv
cmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9k
aXN0L2J1bmRsZS52ZW5kb3IuZGExYTJkNjQxMDZlYzU0ZDRmNTcuanMgYi9QZXJmb3JtYW5jZVRl
c3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1
LWJhYmVsLXdlYnBhY2svZGlzdC9idW5kbGUudmVuZG9yLmRhMWEyZDY0MTA2ZWM1NGQ0ZjU3Lmpz
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjk2YmNlMmZkMjg1YzY1MDNmMDQyMWRiZWQyYjQ3YWE0OTcyOWUxY2EKLS0t
IC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90
b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svZGlzdC9idW5kbGUu
dmVuZG9yLmRhMWEyZDY0MTA2ZWM1NGQ0ZjU3LmpzCkBAIC0wLDAgKzEsMiBAQAord2VicGFja0pz
b25wKFsxLDJdLHsxOmZ1bmN0aW9uKG4sdCl7fSwxMTpmdW5jdGlvbihuLHQscil7bi5leHBvcnRz
PXIoMSl9LDEyOmZ1bmN0aW9uKG4sdCl7bi5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIG49W107cmV0
dXJuIG4udG9TdHJpbmc9ZnVuY3Rpb24oKXtmb3IodmFyIG49W10sdD0wO3Q8dGhpcy5sZW5ndGg7
dCsrKXt2YXIgcj10aGlzW3RdO3JbMl0/bi5wdXNoKCJAbWVkaWEgIityWzJdKyJ7IityWzFdKyJ9
Iik6bi5wdXNoKHJbMV0pfXJldHVybiBuLmpvaW4oIiIpfSxuLmk9ZnVuY3Rpb24odCxyKXsic3Ry
aW5nIj09dHlwZW9mIHQmJih0PVtbbnVsbCx0LCIiXV0pO2Zvcih2YXIgbz17fSxpPTA7aTx0aGlz
Lmxlbmd0aDtpKyspe3ZhciBlPXRoaXNbaV1bMF07Im51bWJlciI9PXR5cGVvZiBlJiYob1tlXT0h
MCl9Zm9yKGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIHU9dFtpXTsibnVtYmVyIj09dHlwZW9mIHVb
MF0mJm9bdVswXV18fChyJiYhdVsyXT91WzJdPXI6ciYmKHVbMl09IigiK3VbMl0rIikgYW5kICgi
K3IrIikiKSxuLnB1c2godSkpfX0sbn19fSxbMTFdKTsKKy8vIyBzb3VyY2VNYXBwaW5nVVJMPWJ1
bmRsZS52ZW5kb3IuZGExYTJkNjQxMDZlYzU0ZDRmNTcuanMubWFwClwgTm8gbmV3bGluZSBhdCBl
bmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNv
dXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrL2Rpc3Qv
aW5kZXguaHRtbCBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9t
dmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9kaXN0L2luZGV4Lmh0bWwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNmRiNTE4NzFiMTJiODg4YzU3MjlmOTA5MDJiODdmZTcwMmFjZjk2MAotLS0g
L2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3Rv
ZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9kaXN0L2luZGV4Lmh0
bWwKQEAgLTAsMCArMSw0NSBAQAorPCFkb2N0eXBlIGh0bWw+Cis8aHRtbCBsYW5nPSJlbiIgZGF0
YS1mcmFtZXdvcms9ImphdmFzY3JpcHQiPgorICA8aGVhZD4KKyAgICA8bWV0YSBjaGFyc2V0PSJ1
dGYtOCI+CisgICAgPHRpdGxlPlZhbmlsbGFKUyDigKIgVG9kb01WQzwvdGl0bGU+CisgICAgPHNj
cmlwdD4hZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihuKXtpZih0W25dKXJldHVybiB0W25dLmV4cG9y
dHM7dmFyIG89dFtuXT17aTpuLGw6ITEsZXhwb3J0czp7fX07cmV0dXJuIGVbbl0uY2FsbChvLmV4
cG9ydHMsbyxvLmV4cG9ydHMsciksby5sPSEwLG8uZXhwb3J0c312YXIgbj13aW5kb3cud2VicGFj
a0pzb25wO3dpbmRvdy53ZWJwYWNrSnNvbnA9ZnVuY3Rpb24odCxhLHUpe2Zvcih2YXIgYyxpLGYs
bD0wLHM9W107bDx0Lmxlbmd0aDtsKyspaT10W2xdLG9baV0mJnMucHVzaChvW2ldWzBdKSxvW2ld
PTA7Zm9yKGMgaW4gYSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYSxjKSYm
KGVbY109YVtjXSk7Zm9yKG4mJm4odCxhLHUpO3MubGVuZ3RoOylzLnNoaWZ0KCkoKTtpZih1KWZv
cihsPTA7bDx1Lmxlbmd0aDtsKyspZj1yKHIucz11W2xdKTtyZXR1cm4gZn07dmFyIHQ9e30sbz17
MjowfTtyLmU9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbigpe2Eub25lcnJvcj1hLm9ubG9hZD1udWxs
LGNsZWFyVGltZW91dCh1KTt2YXIgcj1vW2VdOzAhPT1yJiYociYmclsxXShuZXcgRXJyb3IoIkxv
YWRpbmcgY2h1bmsgIitlKyIgZmFpbGVkLiIpKSxvW2VdPXZvaWQgMCl9aWYoMD09PW9bZV0pcmV0
dXJuIFByb21pc2UucmVzb2x2ZSgpO2lmKG9bZV0pcmV0dXJuIG9bZV1bMl07dmFyIHQ9ZG9jdW1l
bnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXSxhPWRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoInNjcmlwdCIpO2EudHlwZT0idGV4dC9qYXZhc2NyaXB0IixhLmNoYXJzZXQ9InV0Zi04Iixh
LmFzeW5jPSEwLGEudGltZW91dD0xMmU0LGEuc3JjPXIucCsiYnVuZGxlLiIrZSsiLiIrezA6IjQy
MWViNmJhY2EwMjIxOGU5ODVlIiwxOiJkYTFhMmQ2NDEwNmVjNTRkNGY1NyJ9W2VdKyIuanMiO3Zh
ciB1PXNldFRpbWVvdXQobiwxMmU0KTthLm9uZXJyb3I9YS5vbmxvYWQ9bix0LmFwcGVuZENoaWxk
KGEpO3ZhciBjPW5ldyBQcm9taXNlKGZ1bmN0aW9uKHIsbil7b1tlXT1bcixuXX0pO3JldHVybiBv
W2VdWzJdPWN9LHIubT1lLHIuYz10LHIuaT1mdW5jdGlvbihlKXtyZXR1cm4gZX0sci5kPWZ1bmN0
aW9uKGUscixuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLHtjb25maWd1cmFibGU6ITEsZW51
bWVyYWJsZTohMCxnZXQ6bn0pfSxyLm49ZnVuY3Rpb24oZSl7dmFyIG49ZSYmZS5fX2VzTW9kdWxl
P2Z1bmN0aW9uKCl7cmV0dXJuIGVbImRlZmF1bHQiXX06ZnVuY3Rpb24oKXtyZXR1cm4gZX07cmV0
dXJuIHIuZChuLCJhIixuKSxufSxyLm89ZnVuY3Rpb24oZSxyKXtyZXR1cm4gT2JqZWN0LnByb3Rv
dHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscil9LHIucD0iIixyLm9lPWZ1bmN0aW9uKGUpe3Ro
cm93IGNvbnNvbGUuZXJyb3IoZSksZX19KFtdKTsKKzwvc2NyaXB0PgorICA8bGluayBocmVmPSJz
dHlsZXMudmVuZG9yLmRhMWEyZDY0MTA2ZWM1NGQ0ZjU3LmNzcyIgcmVsPSJzdHlsZXNoZWV0Ij48
bGluayBocmVmPSJzdHlsZXMuYXBwLjQyMWViNmJhY2EwMjIxOGU5ODVlLmNzcyIgcmVsPSJzdHls
ZXNoZWV0Ij48c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJidW5kbGUudmVuZG9y
LmRhMWEyZDY0MTA2ZWM1NGQ0ZjU3LmpzIj48L3NjcmlwdD48c2NyaXB0IHR5cGU9InRleHQvamF2
YXNjcmlwdCIgc3JjPSJidW5kbGUuYXBwLjQyMWViNmJhY2EwMjIxOGU5ODVlLmpzIj48L3Njcmlw
dD48L2hlYWQ+CisgIDxib2R5PgorICAgIDxzZWN0aW9uIGNsYXNzPSJ0b2RvYXBwIj4KKyAgICAg
IDxoZWFkZXIgY2xhc3M9ImhlYWRlciI+CisgICAgICAgIDxoMT50b2RvczwvaDE+CisgICAgICAg
IDxpbnB1dCBjbGFzcz0ibmV3LXRvZG8iIHBsYWNlaG9sZGVyPSJXaGF0IG5lZWRzIHRvIGJlIGRv
bmU/IiBhdXRvZm9jdXM+CisgICAgICA8L2hlYWRlcj4KKyAgICAgIDxzZWN0aW9uIGNsYXNzPSJt
YWluIj4KKyAgICAgICAgPGlucHV0IGNsYXNzPSJ0b2dnbGUtYWxsIiB0eXBlPSJjaGVja2JveCI+
CisgICAgICAgIDxsYWJlbCBmb3I9InRvZ2dsZS1hbGwiPk1hcmsgYWxsIGFzIGNvbXBsZXRlPC9s
YWJlbD4KKyAgICAgICAgPHVsIGNsYXNzPSJ0b2RvLWxpc3QiPjwvdWw+CisgICAgICA8L3NlY3Rp
b24+CisgICAgICA8Zm9vdGVyIGNsYXNzPSJmb290ZXIiPgorICAgICAgICA8c3BhbiBjbGFzcz0i
dG9kby1jb3VudCI+PC9zcGFuPgorICAgICAgICA8dWwgY2xhc3M9ImZpbHRlcnMiPgorICAgICAg
ICAgIDxsaT4KKyAgICAgICAgICAgIDxhIGhyZWY9IiMvIiBjbGFzcz0ic2VsZWN0ZWQiPkFsbDwv
YT4KKyAgICAgICAgICA8L2xpPgorICAgICAgICAgIDxsaT4KKyAgICAgICAgICAgIDxhIGhyZWY9
IiMvYWN0aXZlIj5BY3RpdmU8L2E+CisgICAgICAgICAgPC9saT4KKyAgICAgICAgICA8bGk+Cisg
ICAgICAgICAgICA8YSBocmVmPSIjL2NvbXBsZXRlZCI+Q29tcGxldGVkPC9hPgorICAgICAgICAg
IDwvbGk+CisgICAgICAgIDwvdWw+CisgICAgICAgIDxidXR0b24gY2xhc3M9ImNsZWFyLWNvbXBs
ZXRlZCI+Q2xlYXIgY29tcGxldGVkPC9idXR0b24+CisgICAgICA8L2Zvb3Rlcj4KKyAgICA8L3Nl
Y3Rpb24+CisgICAgPGZvb3RlciBjbGFzcz0iaW5mbyI+CisgICAgICA8cD5Eb3VibGUtY2xpY2sg
dG8gZWRpdCBhIHRvZG88L3A+CisgICAgICA8cD5TcGVlZG9tZXRlciB2ZXJzaW9uIGJ5IDxhIGhy
ZWY9Imh0dHA6Ly90d2l0dGVyLmNvbS9hZGR5b3NtYW5pIj5BZGR5IE9zbWFuaTwvYT48L3A+Cisg
ICAgICA8cD5DcmVhdGVkIGJ5IDxhIGhyZWY9Imh0dHA6Ly90d2l0dGVyLmNvbS9vc2NhcmdvZHNv
biI+T3NjYXIgR29kc29uPC9hPjwvcD4KKyAgICAgIDxwPlJlZmFjdG9yZWQgYnkgPGEgaHJlZj0i
aHR0cHM6Ly9naXRodWIuY29tL2NidXJnbWVyIj5DaHJpc3RvcGggQnVyZ21lcjwvYT48L3A+Cisg
ICAgICA8cD5Qb3J0ZWQgdG8gRVM2IGJ5IDxhIGhyZWY9Imh0dHBzOi8vdHdpdHRlci5jb20va2Vu
dGNkb2RkcyI+S2VudCBDLiBEb2RkczwvYT48L3A+CisgICAgICA8cD5QYXJ0IG9mIDxhIGhyZWY9
Imh0dHA6Ly90b2RvbXZjLmNvbSI+VG9kb01WQzwvYT48L3A+CisgICAgPC9mb290ZXI+CisgIDwv
Ym9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIv
cmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9k
aXN0L3N0eWxlcy5hcHAuNDIxZWI2YmFjYTAyMjE4ZTk4NWUuY3NzIGIvUGVyZm9ybWFuY2VUZXN0
cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1i
YWJlbC13ZWJwYWNrL2Rpc3Qvc3R5bGVzLmFwcC40MjFlYjZiYWNhMDIyMThlOTg1ZS5jc3MKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNGE2ZjA0MzY0YmJiNzAyZWQ5MzJmMzJhNWYyZGQ3MGEyZGI4MWZlNQotLS0gL2Rl
di9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9t
dmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9kaXN0L3N0eWxlcy5hcHAu
NDIxZWI2YmFjYTAyMjE4ZTk4NWUuY3NzCkBAIC0wLDAgKzEsMiBAQAorLnRvZ2dsZS1ncmFwaHtm
bG9hdDpsZWZ0O21hcmdpbi1sZWZ0OjE2cHg7Y3Vyc29yOnBvaW50ZXI7cG9zaXRpb246cmVsYXRp
dmU7ei1pbmRleDoxfS50b2dnbGUtZ3JhcGggc3Zne2hlaWdodDoyMHB4O3dpZHRoOjIwcHh9LnRv
Z2dsZS1ncmFwaCBzdmcgcGF0aHtmaWxsOiM3Nzd9LnRvZ2dsZS1ncmFwaC5hY3RpdmUgc3ZnIHBh
dGgsLnRvZ2dsZS1ncmFwaDpmb2N1cyBzdmcgcGF0aCwudG9nZ2xlLWdyYXBoOmhvdmVyIHN2ZyBw
YXRoe2ZpbGw6IzAwMH0KKy8qIyBzb3VyY2VNYXBwaW5nVVJMPXN0eWxlcy5hcHAuNDIxZWI2YmFj
YTAyMjE4ZTk4NWUuY3NzLm1hcCovClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0t
Z2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5p
bGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrL2Rpc3Qvc3R5bGVzLnZlbmRvci5kYTFh
MmQ2NDEwNmVjNTRkNGY1Ny5jc3MgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291
cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svZGlzdC9z
dHlsZXMudmVuZG9yLmRhMWEyZDY0MTA2ZWM1NGQ0ZjU3LmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ODdiMTRh
ZDE0NTQ1M2U2ZDQ4ZjFmM2QwOTUyNGEzZjk4NDg2ZDUwCi0tLSAvZGV2L251bGwKKysrIGIvUGVy
Zm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1w
bGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrL2Rpc3Qvc3R5bGVzLnZlbmRvci5kYTFhMmQ2NDEwNmVj
NTRkNGY1Ny5jc3MKQEAgLTAsMCArMSwyIEBACitib2R5LGJ1dHRvbixodG1se21hcmdpbjowO3Bh
ZGRpbmc6MH1idXR0b257Ym9yZGVyOjA7YmFja2dyb3VuZDpub25lO2ZvbnQtc2l6ZToxMDAlO3Zl
cnRpY2FsLWFsaWduOmJhc2VsaW5lO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC13ZWlnaHQ6aW5o
ZXJpdDtjb2xvcjppbmhlcml0Oy13ZWJraXQtYXBwZWFyYW5jZTpub25lO2FwcGVhcmFuY2U6bm9u
ZTstd2Via2l0LWZvbnQtc21vb3RoaW5nOmFudGlhbGlhc2VkfWJvZHksYnV0dG9uey1tb3otb3N4
LWZvbnQtc21vb3RoaW5nOmdyYXlzY2FsZX1ib2R5e2ZvbnQ6MTRweCBIZWx2ZXRpY2EgTmV1ZSxI
ZWx2ZXRpY2EsQXJpYWwsc2Fucy1zZXJpZjtsaW5lLWhlaWdodDoxLjRlbTtiYWNrZ3JvdW5kOiNm
NWY1ZjU7Y29sb3I6IzRkNGQ0ZDttaW4td2lkdGg6MjMwcHg7bWF4LXdpZHRoOjU1MHB4O21hcmdp
bjowIGF1dG87LXdlYmtpdC1mb250LXNtb290aGluZzphbnRpYWxpYXNlZDtmb250LXdlaWdodDoz
MDB9OmZvY3Vze291dGxpbmU6MH0uaGlkZGVue2Rpc3BsYXk6bm9uZX0udG9kb2FwcHtiYWNrZ3Jv
dW5kOiNmZmY7bWFyZ2luOjEzMHB4IDAgNDBweDtwb3NpdGlvbjpyZWxhdGl2ZTtib3gtc2hhZG93
OjAgMnB4IDRweCAwIHJnYmEoMCwwLDAsLjIpLDAgMjVweCA1MHB4IDAgcmdiYSgwLDAsMCwuMSl9
LnRvZG9hcHAgaW5wdXQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXJ7Zm9udC1zdHlsZTppdGFs
aWM7Zm9udC13ZWlnaHQ6MzAwO2NvbG9yOiNlNmU2ZTZ9LnRvZG9hcHAgaW5wdXQ6Oi1tb3otcGxh
Y2Vob2xkZXJ7Zm9udC1zdHlsZTppdGFsaWM7Zm9udC13ZWlnaHQ6MzAwO2NvbG9yOiNlNmU2ZTZ9
LnRvZG9hcHAgaW5wdXQ6OmlucHV0LXBsYWNlaG9sZGVye2ZvbnQtc3R5bGU6aXRhbGljO2ZvbnQt
d2VpZ2h0OjMwMDtjb2xvcjojZTZlNmU2fS50b2RvYXBwIGgxe3Bvc2l0aW9uOmFic29sdXRlO3Rv
cDotMTU1cHg7d2lkdGg6MTAwJTtmb250LXNpemU6MTAwcHg7Zm9udC13ZWlnaHQ6MTAwO3RleHQt
YWxpZ246Y2VudGVyO2NvbG9yOnJnYmEoMTc1LDQ3LDQ3LC4xNSk7LXdlYmtpdC10ZXh0LXJlbmRl
cmluZzpvcHRpbWl6ZUxlZ2liaWxpdHk7LW1vei10ZXh0LXJlbmRlcmluZzpvcHRpbWl6ZUxlZ2li
aWxpdHk7dGV4dC1yZW5kZXJpbmc6b3B0aW1pemVMZWdpYmlsaXR5fS5lZGl0LC5uZXctdG9kb3tw
b3NpdGlvbjpyZWxhdGl2ZTttYXJnaW46MDt3aWR0aDoxMDAlO2ZvbnQtc2l6ZToyNHB4O2ZvbnQt
ZmFtaWx5OmluaGVyaXQ7Zm9udC13ZWlnaHQ6aW5oZXJpdDtsaW5lLWhlaWdodDoxLjRlbTtib3Jk
ZXI6MDtjb2xvcjppbmhlcml0O3BhZGRpbmc6NnB4O2JvcmRlcjoxcHggc29saWQgIzk5OTtib3gt
c2hhZG93Omluc2V0IDAgLTFweCA1cHggMCByZ2JhKDAsMCwwLC4yKTtib3gtc2l6aW5nOmJvcmRl
ci1ib3g7LXdlYmtpdC1mb250LXNtb290aGluZzphbnRpYWxpYXNlZDstbW96LW9zeC1mb250LXNt
b290aGluZzpncmF5c2NhbGV9Lm5ldy10b2Rve3BhZGRpbmc6MTZweCAxNnB4IDE2cHggNjBweDti
b3JkZXI6bm9uZTtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjAwMyk7Ym94LXNoYWRvdzppbnNldCAw
IC0ycHggMXB4IHJnYmEoMCwwLDAsLjAzKX0ubWFpbntwb3NpdGlvbjpyZWxhdGl2ZTt6LWluZGV4
OjI7Ym9yZGVyLXRvcDoxcHggc29saWQgI2U2ZTZlNn1sYWJlbFtmb3I9dG9nZ2xlLWFsbF17ZGlz
cGxheTpub25lfS50b2dnbGUtYWxse3Bvc2l0aW9uOmFic29sdXRlO3RvcDotNTVweDtsZWZ0Oi0x
MnB4O3dpZHRoOjYwcHg7aGVpZ2h0OjM0cHg7dGV4dC1hbGlnbjpjZW50ZXI7Ym9yZGVyOm5vbmV9
LnRvZ2dsZS1hbGw6YmVmb3Jle2NvbnRlbnQ6J1wyNzZGJztmb250LXNpemU6MjJweDtjb2xvcjoj
ZTZlNmU2O3BhZGRpbmc6MTBweCAyN3B4fS50b2dnbGUtYWxsOmNoZWNrZWQ6YmVmb3Jle2NvbG9y
OiM3MzczNzN9LnRvZG8tbGlzdHttYXJnaW46MDtwYWRkaW5nOjA7bGlzdC1zdHlsZTpub25lfS50
b2RvLWxpc3QgbGl7cG9zaXRpb246cmVsYXRpdmU7Zm9udC1zaXplOjI0cHg7Ym9yZGVyLWJvdHRv
bToxcHggc29saWQgI2VkZWRlZH0udG9kby1saXN0IGxpOmxhc3QtY2hpbGR7Ym9yZGVyLWJvdHRv
bTpub25lfS50b2RvLWxpc3QgbGkuZWRpdGluZ3tib3JkZXItYm90dG9tOm5vbmU7cGFkZGluZzow
fS50b2RvLWxpc3QgbGkuZWRpdGluZyAuZWRpdHtkaXNwbGF5OmJsb2NrO3dpZHRoOjUwNnB4O3Bh
ZGRpbmc6MTJweCAxNnB4O21hcmdpbjowIDAgMCA0M3B4fS50b2RvLWxpc3QgbGkuZWRpdGluZyAu
dmlld3tkaXNwbGF5Om5vbmV9LnRvZG8tbGlzdCBsaSAudG9nZ2xle3RleHQtYWxpZ246Y2VudGVy
O3dpZHRoOjQwcHg7aGVpZ2h0OmF1dG87cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7
bWFyZ2luOmF1dG8gMDtib3JkZXI6bm9uZTstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTthcHBlYXJh
bmNlOm5vbmV9LnRvZG8tbGlzdCBsaSAudG9nZ2xlOmFmdGVye2NvbnRlbnQ6dXJsKCdkYXRhOmlt
YWdlL3N2Zyt4bWw7dXRmOCw8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIg
d2lkdGg9IjQwIiBoZWlnaHQ9IjQwIiB2aWV3Qm94PSItMTAgLTE4IDEwMCAxMzUiPjxjaXJjbGUg
Y3g9IjUwIiBjeT0iNTAiIHI9IjUwIiBmaWxsPSJub25lIiBzdHJva2U9IiNlZGVkZWQiIHN0cm9r
ZS13aWR0aD0iMyIvPjwvc3ZnPicpfS50b2RvLWxpc3QgbGkgLnRvZ2dsZTpjaGVja2VkOmFmdGVy
e2NvbnRlbnQ6dXJsKCdkYXRhOmltYWdlL3N2Zyt4bWw7dXRmOCw8c3ZnIHhtbG5zPSJodHRwOi8v
d3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjQwIiBoZWlnaHQ9IjQwIiB2aWV3Qm94PSItMTAg
LTE4IDEwMCAxMzUiPjxjaXJjbGUgY3g9IjUwIiBjeT0iNTAiIHI9IjUwIiBmaWxsPSJub25lIiBz
dHJva2U9IiNiZGRhZDUiIHN0cm9rZS13aWR0aD0iMyIvPjxwYXRoIGZpbGw9IiM1ZGMyYWYiIGQ9
Ik03MiAyNUw0MiA3MSAyNyA1NmwtNCA0IDIwIDIwIDM0LTUyeiIvPjwvc3ZnPicpfS50b2RvLWxp
c3QgbGkgbGFiZWx7d29yZC1icmVhazpicmVhay1hbGw7cGFkZGluZzoxNXB4IDYwcHggMTVweCAx
NXB4O21hcmdpbi1sZWZ0OjQ1cHg7ZGlzcGxheTpibG9jaztsaW5lLWhlaWdodDoxLjI7dHJhbnNp
dGlvbjpjb2xvciAuNHN9LnRvZG8tbGlzdCBsaS5jb21wbGV0ZWQgbGFiZWx7Y29sb3I6I2Q5ZDlk
OTt0ZXh0LWRlY29yYXRpb246bGluZS10aHJvdWdofS50b2RvLWxpc3QgbGkgLmRlc3Ryb3l7ZGlz
cGxheTpub25lO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3JpZ2h0OjEwcHg7Ym90dG9tOjA7d2lk
dGg6NDBweDtoZWlnaHQ6NDBweDttYXJnaW46YXV0byAwO2ZvbnQtc2l6ZTozMHB4O2NvbG9yOiNj
YzlhOWE7bWFyZ2luLWJvdHRvbToxMXB4O3RyYW5zaXRpb246Y29sb3IgLjJzIGVhc2Utb3V0fS50
b2RvLWxpc3QgbGkgLmRlc3Ryb3k6aG92ZXJ7Y29sb3I6I2FmNWI1ZX0udG9kby1saXN0IGxpIC5k
ZXN0cm95OmFmdGVye2NvbnRlbnQ6J1xENyd9LnRvZG8tbGlzdCBsaTpob3ZlciAuZGVzdHJveXtk
aXNwbGF5OmJsb2NrfS50b2RvLWxpc3QgbGkgLmVkaXR7ZGlzcGxheTpub25lfS50b2RvLWxpc3Qg
bGkuZWRpdGluZzpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206LTFweH0uZm9vdGVye2NvbG9yOiM3
Nzc7cGFkZGluZzoxMHB4IDE1cHg7aGVpZ2h0OjIwcHg7dGV4dC1hbGlnbjpjZW50ZXI7Ym9yZGVy
LXRvcDoxcHggc29saWQgI2U2ZTZlNn0uZm9vdGVyOmJlZm9yZXtjb250ZW50OicnO3Bvc2l0aW9u
OmFic29sdXRlO3JpZ2h0OjA7Ym90dG9tOjA7bGVmdDowO2hlaWdodDo1MHB4O292ZXJmbG93Omhp
ZGRlbjtib3gtc2hhZG93OjAgMXB4IDFweCByZ2JhKDAsMCwwLC4yKSwwIDhweCAwIC0zcHggI2Y2
ZjZmNiwwIDlweCAxcHggLTNweCByZ2JhKDAsMCwwLC4yKSwwIDE2cHggMCAtNnB4ICNmNmY2ZjYs
MCAxN3B4IDJweCAtNnB4IHJnYmEoMCwwLDAsLjIpfS50b2RvLWNvdW50e2Zsb2F0OmxlZnQ7dGV4
dC1hbGlnbjpsZWZ0fS50b2RvLWNvdW50IHN0cm9uZ3tmb250LXdlaWdodDozMDB9LmZpbHRlcnN7
bWFyZ2luOjA7cGFkZGluZzowO2xpc3Qtc3R5bGU6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTtyaWdo
dDowO2xlZnQ6MH0uZmlsdGVycyBsaXtkaXNwbGF5OmlubGluZX0uZmlsdGVycyBsaSBhe2NvbG9y
OmluaGVyaXQ7bWFyZ2luOjNweDtwYWRkaW5nOjNweCA3cHg7dGV4dC1kZWNvcmF0aW9uOm5vbmU7
Ym9yZGVyOjFweCBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItcmFkaXVzOjNweH0uZmlsdGVycyBs
aSBhOmhvdmVye2JvcmRlci1jb2xvcjpyZ2JhKDE3NSw0Nyw0NywuMSl9LmZpbHRlcnMgbGkgYS5z
ZWxlY3RlZHtib3JkZXItY29sb3I6cmdiYSgxNzUsNDcsNDcsLjIpfS5jbGVhci1jb21wbGV0ZWQs
aHRtbCAuY2xlYXItY29tcGxldGVkOmFjdGl2ZXtmbG9hdDpyaWdodDtwb3NpdGlvbjpyZWxhdGl2
ZTtsaW5lLWhlaWdodDoyMHB4O3RleHQtZGVjb3JhdGlvbjpub25lO2N1cnNvcjpwb2ludGVyfS5j
bGVhci1jb21wbGV0ZWQ6aG92ZXJ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZX0uaW5mb3ttYXJn
aW46NjVweCBhdXRvIDA7Y29sb3I6I2JmYmZiZjtmb250LXNpemU6MTBweDt0ZXh0LXNoYWRvdzow
IDFweCAwIGhzbGEoMCwwJSwxMDAlLC41KTt0ZXh0LWFsaWduOmNlbnRlcn0uaW5mbyBwe2xpbmUt
aGVpZ2h0OjF9LmluZm8gYXtjb2xvcjppbmhlcml0O3RleHQtZGVjb3JhdGlvbjpub25lO2ZvbnQt
d2VpZ2h0OjQwMH0uaW5mbyBhOmhvdmVye3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmV9QG1lZGlh
IHNjcmVlbiBhbmQgKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzowKXsudG9kby1saXN0
IGxpIC50b2dnbGUsLnRvZ2dsZS1hbGx7YmFja2dyb3VuZDpub25lfS50b2RvLWxpc3QgbGkgLnRv
Z2dsZXtoZWlnaHQ6NDBweH0udG9nZ2xlLWFsbHstd2Via2l0LXRyYW5zZm9ybTpyb3RhdGUoOTBk
ZWcpO3RyYW5zZm9ybTpyb3RhdGUoOTBkZWcpOy13ZWJraXQtYXBwZWFyYW5jZTpub25lO2FwcGVh
cmFuY2U6bm9uZX19QG1lZGlhIChtYXgtd2lkdGg6NDMwcHgpey5mb290ZXJ7aGVpZ2h0OjUwcHh9
LmZpbHRlcnN7Ym90dG9tOjEwcHh9fQorLyojIHNvdXJjZU1hcHBpbmdVUkw9c3R5bGVzLnZlbmRv
ci5kYTFhMmQ2NDEwNmVjNTRkNGY1Ny5jc3MubWFwKi8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBm
aWxlCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90
b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2sva2FybWEuY29uZi5q
cyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxs
YS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9rYXJtYS5jb25mLmpzCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmY5NjIzNDAxNDUxZTFmMmU1NjRkZDQxNzZhYTNmNmE2NDc1MGQ3YWMKLS0tIC9kZXYvbnVsbAor
KysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3Zhbmls
bGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2sva2FybWEuY29uZi5qcwpAQCAtMCwwICsx
LDQ0IEBACitwcm9jZXNzLmVudi5CQUJFTF9FTlYgPSAndGVzdCcKK2NvbnN0IHdlYnBhY2tFbnYg
PSB7dGVzdDogdHJ1ZX0KK2NvbnN0IHdlYnBhY2tDb25maWcgPSByZXF1aXJlKCcuL3dlYnBhY2su
Y29uZmlnLmJhYmVsJykod2VicGFja0VudikKKworY29uc3QgdGVzdEdsb2IgPSAnc3JjLyoqLyou
dGVzdC5qcycKK2NvbnN0IHNyY0dsb2IgPSAnc3JjLyoqLyEoKi50ZXN0fCouc3R1YikuanMnCisK
K21vZHVsZS5leHBvcnRzID0gY29uZmlnID0+IHsKKyAgY29uZmlnLnNldCh7CisgICAgYmFzZVBh
dGg6ICcnLAorICAgIGZyYW1ld29ya3M6IFsnbW9jaGEnLCAnY2hhaSddLAorICAgIGZpbGVzOiBb
dGVzdEdsb2IsIHNyY0dsb2JdLAorICAgIGV4Y2x1ZGU6IFsnc3JjL2Jvb3RzdHJhcC5qcyddLAor
ICAgIHByZXByb2Nlc3NvcnM6IHsKKyAgICAgIFt0ZXN0R2xvYl06IFsnd2VicGFjayddLAorICAg
ICAgW3NyY0dsb2JdOiBbJ3dlYnBhY2snXSwKKyAgICB9LAorICAgIHdlYnBhY2s6IHdlYnBhY2tD
b25maWcsCisgICAgd2VicGFja01pZGRsZXdhcmU6IHtub0luZm86IHRydWV9LAorICAgIHJlcG9y
dGVyczogWydwcm9ncmVzcycsICdjb3ZlcmFnZSddLAorICAgIGNvdmVyYWdlUmVwb3J0ZXI6IHsK
KyAgICAgIGNoZWNrOiB7CisgICAgICAgIGdsb2JhbDogeworICAgICAgICAgIHN0YXRlbWVudHM6
IDExLAorICAgICAgICAgIGJyYW5jaGVzOiAwLAorICAgICAgICAgIGZ1bmN0aW9uczogMCwKKyAg
ICAgICAgICBsaW5lczogMTEsCisgICAgICAgIH0sCisgICAgICB9LAorICAgICAgcmVwb3J0ZXJz
OiBbCisgICAgICAgIHt0eXBlOiAnbGNvdicsIGRpcjogJ2NvdmVyYWdlLycsIHN1YmRpcjogJy4n
fSwKKyAgICAgICAge3R5cGU6ICdqc29uJywgZGlyOiAnY292ZXJhZ2UvJywgc3ViZGlyOiAnLid9
LAorICAgICAgICB7dHlwZTogJ3RleHQtc3VtbWFyeSd9LAorICAgICAgXSwKKyAgICB9LAorICAg
IHBvcnQ6IDk4NzYsCisgICAgY29sb3JzOiB0cnVlLAorICAgIGxvZ0xldmVsOiBjb25maWcuTE9H
X0lORk8sCisgICAgYXV0b1dhdGNoOiBmYWxzZSwKKyAgICBicm93c2VyczogWydDaHJvbWUnXSwK
KyAgICBzaW5nbGVSdW46IHRydWUsCisgICAgY29uY3VycmVuY3k6IEluZmluaXR5LAorICB9KQor
fQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9k
b212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrL3BhY2thZ2UuanNvbiBi
L1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1l
eGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9wYWNrYWdlLmpzb24KbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODZm
N2JiYjk3NWU1ODBjYTFmMjM1NWQ0MDMxODM3ZWViM2ZiMjZhMQotLS0gL2Rldi9udWxsCisrKyBi
L1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1l
eGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9wYWNrYWdlLmpzb24KQEAgLTAsMCArMSw3NSBA
QAoreworICAicHJpdmF0ZSI6IHRydWUsCisgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgImQzIjog
IjMuNS4xNyIsCisgICAgImxvZGFzaCI6ICI0LjE0LjEiLAorICAgICJyZDMiOiAiMC43LjAiLAor
ICAgICJyZWFjdCI6ICIxNS4zLjAiLAorICAgICJyZWFjdC1kb20iOiAiMTUuMy4wIiwKKyAgICAi
dG9kb212Yy1hcHAtY3NzIjogIjIuMC42IgorICB9LAorICAiZGV2RGVwZW5kZW5jaWVzIjogewor
ICAgICJiYWJlbC1jb3JlIjogIjYuMTMuMiIsCisgICAgImJhYmVsLWxvYWRlciI6ICI2LjIuNCIs
CisgICAgImJhYmVsLXBsdWdpbi1fX2NvdmVyYWdlX18iOiAiMTEuMC4wIiwKKyAgICAiYmFiZWwt
cHJlc2V0LWVzMjAxNSI6ICI2LjEzLjIiLAorICAgICJiYWJlbC1wcmVzZXQtZXMyMDE2IjogIjYu
MTEuMyIsCisgICAgImJhYmVsLXByZXNldC1yZWFjdCI6ICI2LjExLjEiLAorICAgICJiYWJlbC1w
cmVzZXQtc3RhZ2UtMiI6ICI2LjEzLjAiLAorICAgICJjaGFpIjogIjMuNS4wIiwKKyAgICAiY3B5
LWNsaSI6ICIxLjAuMSIsCisgICAgImNzcy1sb2FkZXIiOiAiMC4yMy4xIiwKKyAgICAiZXNsaW50
IjogIjMuMi4yIiwKKyAgICAiZXNsaW50LWNvbmZpZy1rZW50Y2RvZGRzIjogIl45LjAuMCIsCisg
ICAgImV4dHJhY3QtdGV4dC13ZWJwYWNrLXBsdWdpbiI6ICIyLjAuMC1iZXRhLjMiLAorICAgICJn
aG9va3MiOiAiMS4zLjIiLAorICAgICJodG1sLXdlYnBhY2stcGx1Z2luIjogIjIuMjIuMCIsCisg
ICAgImh0dHAtc2VydmVyIjogIjAuOS4wIiwKKyAgICAiaW5saW5lLW1hbmlmZXN0LXdlYnBhY2st
cGx1Z2luIjogIjMuMC4xIiwKKyAgICAia2FybWEiOiAiMS4xLjIiLAorICAgICJrYXJtYS1jaGFp
IjogIjAuMS4wIiwKKyAgICAia2FybWEtY2hyb21lLWxhdW5jaGVyIjogIjEuMC4xIiwKKyAgICAi
a2FybWEtY292ZXJhZ2UiOiAiMS4xLjEiLAorICAgICJrYXJtYS1tb2NoYSI6ICIxLjEuMSIsCisg
ICAgImthcm1hLXdlYnBhY2siOiAiMS43LjAiLAorICAgICJtb2NoYSI6ICIzLjAuMSIsCisgICAg
Im5wbS1ydW4tYWxsIjogIjIuMy4wIiwKKyAgICAib3B0LWNsaSI6ICIxLjUuMSIsCisgICAgInBy
b2dyZXNzLWJhci13ZWJwYWNrLXBsdWdpbiI6ICIxLjkuMCIsCisgICAgInJpbXJhZiI6ICIyLjUu
NCIsCisgICAgInN0eWxlLWxvYWRlciI6ICIwLjEzLjEiLAorICAgICJzdXJnZSI6ICIwLjE4LjAi
LAorICAgICJ3ZWJwYWNrIjogIjIuMS4wLWJldGEuMjAiLAorICAgICJ3ZWJwYWNrLWNvbmZpZy11
dGlscyI6ICIyLjAuMCIsCisgICAgIndlYnBhY2stZGV2LXNlcnZlciI6ICIyLjEuMC1iZXRhLjAi
LAorICAgICJ3ZWJwYWNrLXZhbGlkYXRvciI6ICIyLjIuNyIKKyAgfSwKKyAgImNvbmZpZyI6IHsK
KyAgICAiZ2hvb2tzIjogeworICAgICAgInByZS1jb21taXQiOiAib3B0IC0taW4gcHJlLWNvbW1p
dCAtLWV4ZWMgXCJucG0gcnVuIHZhbGlkYXRlXCIiCisgICAgfQorICB9LAorICAic2NyaXB0cyI6
IHsKKyAgICAicHJlZGVwbG95IjogIm5wbSBydW4gYnVpbGQiLAorICAgICJkZXBsb3kiOiAiLi9z
Y3JpcHRzL2RlcGxveSIsCisgICAgInByZWJ1aWxkIjogInJpbXJhZiBkaXN0IiwKKyAgICAiYnVp
bGQiOiAid2VicGFjayAtLWVudi5wcm9kIC1wIiwKKyAgICAicG9zdGJ1aWxkIjogImNweSBmYXZp
Y29uLmljbyBkaXN0IiwKKyAgICAicHJlYnVpbGQ6ZGV2IjogInJpbXJhZiBkaXN0IiwKKyAgICAi
YnVpbGQ6ZGV2IjogIndlYnBhY2sgLS1lbnYuZGV2IiwKKyAgICAicG9zdGJ1aWxkOmRldiI6ICJj
cHkgZmF2aWNvbi5pY28gZGlzdCIsCisgICAgInN0YXJ0IjogImh0dHAtc2VydmVyIGRpc3QiLAor
ICAgICJkZXYiOiAid2VicGFjay1kZXYtc2VydmVyIC0tZW52LmRldiAtLWhvdCIsCisgICAgImRl
YnVnIjogIm5vZGUtbmlnaHRseSAtLWluc3BlY3QgLS1kZWJ1Zy1icmsgbm9kZV9tb2R1bGVzLy5i
aW4vd2VicGFjayAtLWVudi5kZWJ1ZyIsCisgICAgImRlYnVnOmRldiI6ICJucG0gcnVuIGRlYnVn
IC0tIC0tZW52LmRldiIsCisgICAgImRlYnVnOnByb2QiOiAibnBtIHJ1biBkZWJ1ZyAtLSAtLWVu
di5wcm9kIiwKKyAgICAidGVzdCI6ICJrYXJtYSBzdGFydCIsCisgICAgIndhdGNoOnRlc3QiOiAi
bnBtIHRlc3QgLS0gLS1hdXRvLXdhdGNoIC0tbm8tc2luZ2xlLXJ1biIsCisgICAgInZhbGlkYXRl
IjogIm5wbS1ydW4tYWxsIC0tcGFyYWxsZWwgbGludCBidWlsZCB0ZXN0IiwKKyAgICAibGludCI6
ICJlc2xpbnQgLiIsCisgICAgInNldHVwIjogIm5wbSBpbnN0YWxsICYmIG5wbSBydW4gdmFsaWRh
dGUiLAorICAgICJzZXR1cDpmZW0iOiAiZ2l0IGNoZWNrb3V0IEZFTS8wNy4xLWRlcGxveS1zdXJn
ZSAmJiBucG0gaW5zdGFsbCAmJiBucG0gcnVuIHZhbGlkYXRlICYmIHJpbXJhZiBkaXN0IGNvdmVy
YWdlICYmIGdpdCBjaGVja291dCBGRU0vMDAtb3JpZ2luYWwtcHJvamVjdCIsCisgICAgInNldHVw
OndvcmtzaG9wIjogImdpdCBjaGVja291dCB3b3Jrc2hvcC8wNy1jb3ZlcmFnZSAmJiBucG0gaW5z
dGFsbCAmJiBucG0gcnVuIHZhbGlkYXRlICYmIHJpbXJhZiBkaXN0IGNvdmVyYWdlICYmIGdpdCBj
aGVja291dCB3b3Jrc2hvcC8wMC1vcmlnaW5hbC1wcm9qZWN0IiwKKyAgICAic2V0dXA6ZWdnaGVh
ZCI6ICJnaXQgY2hlY2tvdXQgcHJlbGVzc29uL3BvbHlmaWxsLXByb21pc2VzICYmIG5wbSBpbnN0
YWxsICYmIG1rZGlyIGRpc3QgJiYgbnBtIHJ1biB2YWxpZGF0ZSIKKyAgfQorfQpkaWZmIC0tZ2l0
IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxh
LWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrL3NyYy9hcHAuY3NzIGIvUGVyZm9ybWFuY2VU
ZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAx
NS1iYWJlbC13ZWJwYWNrL3NyYy9hcHAuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUyN2E1OGY3MWYzOWZmMDFm
MGE1MjY5NzI5MjNmMWQxZTBmY2QxMWIKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRl
c3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1
LWJhYmVsLXdlYnBhY2svc3JjL2FwcC5jc3MKQEAgLTAsMCArMSwyMCBAQAorLnRvZ2dsZS1ncmFw
aCB7CisgIGZsb2F0OiBsZWZ0OworICBtYXJnaW4tbGVmdDogMTZweDsKKyAgY3Vyc29yOiBwb2lu
dGVyOworICBwb3NpdGlvbjogcmVsYXRpdmU7CisgIHotaW5kZXg6IDE7Cit9CisudG9nZ2xlLWdy
YXBoIHN2ZyB7CisgIGhlaWdodDogMjBweDsKKyAgd2lkdGg6IDIwcHg7Cit9CisudG9nZ2xlLWdy
YXBoIHN2ZyBwYXRoIHsKKyAgZmlsbDogIzc3NzsKK30KKworLnRvZ2dsZS1ncmFwaC5hY3RpdmUg
c3ZnIHBhdGgsCisudG9nZ2xlLWdyYXBoOmhvdmVyIHN2ZyBwYXRoLAorLnRvZ2dsZS1ncmFwaDpm
b2N1cyBzdmcgcGF0aCB7CisgIGZpbGw6IGJsYWNrOworfQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFu
Y2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2Vz
MjAxNS1iYWJlbC13ZWJwYWNrL3NyYy9hcHAuanMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21l
dGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBh
Y2svc3JjL2FwcC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iN2UwMmZkZTkwMjM1NTZjMDUzYTliOTYwODIwYzll
M2NmZGU2MGY3Ci0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRl
ci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNr
L3NyYy9hcHAuanMKQEAgLTAsMCArMSw5IEBACitpbXBvcnQgJ3RvZG9tdmMtYXBwLWNzcy9pbmRl
eC5jc3MnCitpbXBvcnQgJy4vYXBwLmNzcycKKworaW1wb3J0IHskb259IGZyb20gJy4vaGVscGVy
cycKK2ltcG9ydCB7dXBkYXRlVG9kb30gZnJvbSAnLi90b2RvJworCitleHBvcnQgZnVuY3Rpb24g
b25Mb2FkKCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGltcG9ydC9wcmVmZXItZGVmYXVsdC1l
eHBvcnQKKyAgdXBkYXRlVG9kbygpCit9CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1Nw
ZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVs
LXdlYnBhY2svc3JjL2Jvb3RzdHJhcC5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIv
cmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9z
cmMvYm9vdHN0cmFwLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI2ZDVlODIxYmE3ZWE2ZTk4NjVmOThjNGNjNWE1
MGI1ZmQ2ZTMwOTEKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21l
dGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBh
Y2svc3JjL2Jvb3RzdHJhcC5qcwpAQCAtMCwwICsxLDIzIEBACisvKiBlc2xpbnQgbm8tY29uc29s
ZTowICovCitpbXBvcnQge29uTG9hZH0gZnJvbSAnLi9hcHAnCitpbXBvcnQgeyRvbn0gZnJvbSAn
Li9oZWxwZXJzJworCisvLyB0aGlzIGlzIG9ubHkgcmVsZXZhbnQgd2hlbiB1c2luZyBgaG90YCBt
b2RlIHdpdGggd2VicGFjaworLy8gc3BlY2lhbCB0aGFua3MgdG8gRXJpYyBDbGVtbW9uczogaHR0
cHM6Ly9naXRodWIuY29tL2VyaWNjbGVtbW9ucy93ZWJwYWNrLWhvdC1zZXJ2ZXItZXhhbXBsZQor
Y29uc3QgcmVsb2FkaW5nID0gZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gJ2NvbXBsZXRlJworaWYg
KG1vZHVsZS5ob3QpIHsKKyAgbW9kdWxlLmhvdC5hY2NlcHQoZnVuY3Rpb24oZXJyKSB7CisgIH0p
CisgIGlmIChyZWxvYWRpbmcpIHsKKyAgICBvbkxvYWQoKQorICB9IGVsc2UgeworICAgIGJvb3Rz
dHJhcCgpCisgIH0KK30gZWxzZSB7CisgIGJvb3RzdHJhcCgpCit9CisKK2Z1bmN0aW9uIGJvb3Rz
dHJhcCgpIHsKKyAgJG9uKHdpbmRvdywgJ2xvYWQnLCBvbkxvYWQpCisgICRvbih3aW5kb3csICdo
YXNoY2hhbmdlJywgb25Mb2FkKQorfQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVl
ZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13
ZWJwYWNrL3NyYy9jb250cm9sbGVyLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9y
ZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrL3Ny
Yy9jb250cm9sbGVyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhhNDhjOTA2YmMzNmNlNGJjOGI3MjNmM2YyZmYw
MzM5NDQwYzVmNDMKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21l
dGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBh
Y2svc3JjL2NvbnRyb2xsZXIuanMKQEAgLTAsMCArMSwyNjMgQEAKK2V4cG9ydCBkZWZhdWx0IENv
bnRyb2xsZXIKKworLyoqCisqIFRha2VzIGEgbW9kZWwgYW5kIHZpZXcgYW5kIGFjdHMgYXMgdGhl
IGNvbnRyb2xsZXIgYmV0d2VlbiB0aGVtCisqCisqIEBjb25zdHJ1Y3RvcgorKiBAcGFyYW0ge29i
amVjdH0gbW9kZWwgVGhlIG1vZGVsIGluc3RhbmNlCisqIEBwYXJhbSB7b2JqZWN0fSB2aWV3IFRo
ZSB2aWV3IGluc3RhbmNlCisqLworZnVuY3Rpb24gQ29udHJvbGxlcihtb2RlbCwgdmlldykgewor
ICB2YXIgdGhhdCA9IHRoaXMKKyAgdGhhdC5tb2RlbCA9IG1vZGVsCisgIHRoYXQudmlldyA9IHZp
ZXcKKworICB0aGF0LnZpZXcuYmluZCgnbmV3VG9kbycsIGZ1bmN0aW9uKHRpdGxlKSB7CisgICAg
dGhhdC5hZGRJdGVtKHRpdGxlKQorICB9KQorCisgIHRoYXQudmlldy5iaW5kKCdpdGVtRWRpdCcs
IGZ1bmN0aW9uKGl0ZW0pIHsKKyAgICB0aGF0LmVkaXRJdGVtKGl0ZW0uaWQpCisgIH0pCisKKyAg
dGhhdC52aWV3LmJpbmQoJ2l0ZW1FZGl0RG9uZScsIGZ1bmN0aW9uKGl0ZW0pIHsKKyAgICB0aGF0
LmVkaXRJdGVtU2F2ZShpdGVtLmlkLCBpdGVtLnRpdGxlKQorICB9KQorCisgIHRoYXQudmlldy5i
aW5kKCdpdGVtRWRpdENhbmNlbCcsIGZ1bmN0aW9uKGl0ZW0pIHsKKyAgICB0aGF0LmVkaXRJdGVt
Q2FuY2VsKGl0ZW0uaWQpCisgIH0pCisKKyAgdGhhdC52aWV3LmJpbmQoJ2l0ZW1SZW1vdmUnLCBm
dW5jdGlvbihpdGVtKSB7CisgICAgdGhhdC5yZW1vdmVJdGVtKGl0ZW0uaWQpCisgIH0pCisKKyAg
dGhhdC52aWV3LmJpbmQoJ2l0ZW1Ub2dnbGUnLCBmdW5jdGlvbihpdGVtKSB7CisgICAgdGhhdC50
b2dnbGVDb21wbGV0ZShpdGVtLmlkLCBpdGVtLmNvbXBsZXRlZCkKKyAgfSkKKworICB0aGF0LnZp
ZXcuYmluZCgncmVtb3ZlQ29tcGxldGVkJywgZnVuY3Rpb24oKSB7CisgICAgdGhhdC5yZW1vdmVD
b21wbGV0ZWRJdGVtcygpCisgIH0pCisKKyAgdGhhdC52aWV3LmJpbmQoJ3RvZ2dsZUFsbCcsIGZ1
bmN0aW9uKHN0YXR1cykgeworICAgIHRoYXQudG9nZ2xlQWxsKHN0YXR1cy5jb21wbGV0ZWQpCisg
IH0pCit9CisKKy8qKgorKiBMb2FkcyBhbmQgaW5pdGlhbGlzZXMgdGhlIHZpZXcKKyoKKyogQHBh
cmFtIHtzdHJpbmd9ICcnIHwgJ2FjdGl2ZScgfCAnY29tcGxldGVkJworKi8KK0NvbnRyb2xsZXIu
cHJvdG90eXBlLnNldFZpZXcgPSBmdW5jdGlvbihsb2NhdGlvbkhhc2gpIHsKKyAgdmFyIHJvdXRl
ID0gbG9jYXRpb25IYXNoLnNwbGl0KCcvJylbMV0KKyAgdmFyIHBhZ2UgPSByb3V0ZSB8fCAnJwor
ICB0aGlzLl91cGRhdGVGaWx0ZXJTdGF0ZShwYWdlKQorfQorCisvKioKKyogQW4gZXZlbnQgdG8g
ZmlyZSBvbiBsb2FkLiBXaWxsIGdldCBhbGwgaXRlbXMgYW5kIGRpc3BsYXkgdGhlbSBpbiB0aGUK
KyogdG9kby1saXN0CisqLworQ29udHJvbGxlci5wcm90b3R5cGUuc2hvd0FsbCA9IGZ1bmN0aW9u
KCkgeworICB2YXIgdGhhdCA9IHRoaXMKKyAgdGhhdC5tb2RlbC5yZWFkKGZ1bmN0aW9uKGRhdGEp
IHsKKyAgICB0aGF0LnZpZXcucmVuZGVyKCdzaG93RW50cmllcycsIGRhdGEpCisgIH0pCit9CisK
Ky8qKgorKiBSZW5kZXJzIGFsbCBhY3RpdmUgdGFza3MKKyovCitDb250cm9sbGVyLnByb3RvdHlw
ZS5zaG93QWN0aXZlID0gZnVuY3Rpb24oKSB7CisgIHZhciB0aGF0ID0gdGhpcworICB0aGF0Lm1v
ZGVsLnJlYWQoe2NvbXBsZXRlZDogZmFsc2V9LCBmdW5jdGlvbihkYXRhKSB7CisgICAgdGhhdC52
aWV3LnJlbmRlcignc2hvd0VudHJpZXMnLCBkYXRhKQorICB9KQorfQorCisvKioKKyogUmVuZGVy
cyBhbGwgY29tcGxldGVkIHRhc2tzCisqLworQ29udHJvbGxlci5wcm90b3R5cGUuc2hvd0NvbXBs
ZXRlZCA9IGZ1bmN0aW9uKCkgeworICB2YXIgdGhhdCA9IHRoaXMKKyAgdGhhdC5tb2RlbC5yZWFk
KHtjb21wbGV0ZWQ6IHRydWV9LCBmdW5jdGlvbihkYXRhKSB7CisgICAgdGhhdC52aWV3LnJlbmRl
cignc2hvd0VudHJpZXMnLCBkYXRhKQorICB9KQorfQorCisvKioKKyogQW4gZXZlbnQgdG8gZmly
ZSB3aGVuZXZlciB5b3Ugd2FudCB0byBhZGQgYW4gaXRlbS4gU2ltcGx5IHBhc3MgaW4gdGhlIGV2
ZW50CisqIG9iamVjdCBhbmQgaXQnbGwgaGFuZGxlIHRoZSBET00gaW5zZXJ0aW9uIGFuZCBzYXZp
bmcgb2YgdGhlIG5ldyBpdGVtLgorKi8KK0NvbnRyb2xsZXIucHJvdG90eXBlLmFkZEl0ZW0gPSBm
dW5jdGlvbih0aXRsZSkgeworICB2YXIgdGhhdCA9IHRoaXMKKworICBpZiAodGl0bGUudHJpbSgp
ID09PSAnJykgeworICAgIHJldHVybgorICB9CisKKyAgdGhhdC5tb2RlbC5jcmVhdGUodGl0bGUs
IGZ1bmN0aW9uKCkgeworICAgIHRoYXQudmlldy5yZW5kZXIoJ2NsZWFyTmV3VG9kbycpCisgICAg
dGhhdC5fZmlsdGVyKHRydWUpCisgIH0pCit9CisKKy8qCisqIFRyaWdnZXJzIHRoZSBpdGVtIGVk
aXRpbmcgbW9kZS4KKyovCitDb250cm9sbGVyLnByb3RvdHlwZS5lZGl0SXRlbSA9IGZ1bmN0aW9u
KGlkKSB7CisgIHZhciB0aGF0ID0gdGhpcworICB0aGF0Lm1vZGVsLnJlYWQoaWQsIGZ1bmN0aW9u
KGRhdGEpIHsKKyAgICB0aGF0LnZpZXcucmVuZGVyKCdlZGl0SXRlbScsIHtpZCwgdGl0bGU6IGRh
dGFbMF0udGl0bGV9KQorICB9KQorfQorCisvKgorKiBGaW5pc2hlcyB0aGUgaXRlbSBlZGl0aW5n
IG1vZGUgc3VjY2Vzc2Z1bGx5LgorKi8KK0NvbnRyb2xsZXIucHJvdG90eXBlLmVkaXRJdGVtU2F2
ZSA9IGZ1bmN0aW9uKGlkLCB0aXRsZSkgeworICB2YXIgdGhhdCA9IHRoaXMKKyAgaWYgKHRpdGxl
LnRyaW0oKSkgeworICAgIHRoYXQubW9kZWwudXBkYXRlKGlkLCB7dGl0bGV9LCBmdW5jdGlvbigp
IHsKKyAgICAgIHRoYXQudmlldy5yZW5kZXIoJ2VkaXRJdGVtRG9uZScsIHtpZCwgdGl0bGV9KQor
ICAgIH0pCisgIH0gZWxzZSB7CisgICAgdGhhdC5yZW1vdmVJdGVtKGlkKQorICB9Cit9CisKKy8q
CisqIENhbmNlbHMgdGhlIGl0ZW0gZWRpdGluZyBtb2RlLgorKi8KK0NvbnRyb2xsZXIucHJvdG90
eXBlLmVkaXRJdGVtQ2FuY2VsID0gZnVuY3Rpb24oaWQpIHsKKyAgdmFyIHRoYXQgPSB0aGlzCisg
IHRoYXQubW9kZWwucmVhZChpZCwgZnVuY3Rpb24oZGF0YSkgeworICAgIHRoYXQudmlldy5yZW5k
ZXIoJ2VkaXRJdGVtRG9uZScsIHtpZCwgdGl0bGU6IGRhdGFbMF0udGl0bGV9KQorICB9KQorfQor
CisvKioKKyogQnkgZ2l2aW5nIGl0IGFuIElEIGl0J2xsIGZpbmQgdGhlIERPTSBlbGVtZW50IG1h
dGNoaW5nIHRoYXQgSUQsCisqIHJlbW92ZSBpdCBmcm9tIHRoZSBET00gYW5kIGFsc28gcmVtb3Zl
IGl0IGZyb20gc3RvcmFnZS4KKyoKKyogQHBhcmFtIHtudW1iZXJ9IGlkIFRoZSBJRCBvZiB0aGUg
aXRlbSB0byByZW1vdmUgZnJvbSB0aGUgRE9NIGFuZAorKiBzdG9yYWdlCisqLworQ29udHJvbGxl
ci5wcm90b3R5cGUucmVtb3ZlSXRlbSA9IGZ1bmN0aW9uKGlkKSB7CisgIHZhciB0aGF0ID0gdGhp
cworICB0aGF0Lm1vZGVsLnJlbW92ZShpZCwgZnVuY3Rpb24oKSB7CisgICAgdGhhdC52aWV3LnJl
bmRlcigncmVtb3ZlSXRlbScsIGlkKQorICB9KQorCisgIHRoYXQuX2ZpbHRlcigpCit9CisKKy8q
KgorKiBXaWxsIHJlbW92ZSBhbGwgY29tcGxldGVkIGl0ZW1zIGZyb20gdGhlIERPTSBhbmQgc3Rv
cmFnZS4KKyovCitDb250cm9sbGVyLnByb3RvdHlwZS5yZW1vdmVDb21wbGV0ZWRJdGVtcyA9IGZ1
bmN0aW9uKCkgeworICB2YXIgdGhhdCA9IHRoaXMKKyAgdGhhdC5tb2RlbC5yZWFkKHtjb21wbGV0
ZWQ6IHRydWV9LCBmdW5jdGlvbihkYXRhKSB7CisgICAgZGF0YS5mb3JFYWNoKGZ1bmN0aW9uKGl0
ZW0pIHsKKyAgICAgIHRoYXQucmVtb3ZlSXRlbShpdGVtLmlkKQorICAgIH0pCisgIH0pCisKKyAg
dGhhdC5fZmlsdGVyKCkKK30KKworLyoqCisqIEdpdmUgaXQgYW4gSUQgb2YgYSBtb2RlbCBhbmQg
YSBjaGVja2JveCBhbmQgaXQgd2lsbCB1cGRhdGUgdGhlIGl0ZW0KKyogaW4gc3RvcmFnZSBiYXNl
ZCBvbiB0aGUgY2hlY2tib3gncyBzdGF0ZS4KKyoKKyogQHBhcmFtIHtudW1iZXJ9IGlkIFRoZSBJ
RCBvZiB0aGUgZWxlbWVudCB0byBjb21wbGV0ZSBvciB1bmNvbXBsZXRlCisqIEBwYXJhbSB7b2Jq
ZWN0fSBjaGVja2JveCBUaGUgY2hlY2tib3ggdG8gY2hlY2sgdGhlIHN0YXRlIG9mIGNvbXBsZXRl
CisqICAgICAgICAgICAgICAgICAgICAgICAgICBvciBub3QKKyogQHBhcmFtIHtib29sZWFufHVu
ZGVmaW5lZH0gc2lsZW50IFByZXZlbnQgcmUtZmlsdGVyaW5nIHRoZSB0b2RvIGl0ZW1zCisqLwor
Q29udHJvbGxlci5wcm90b3R5cGUudG9nZ2xlQ29tcGxldGUgPSBmdW5jdGlvbihpZCwgY29tcGxl
dGVkLCBzaWxlbnQpIHsKKyAgdmFyIHRoYXQgPSB0aGlzCisgIHRoYXQubW9kZWwudXBkYXRlKGlk
LCB7Y29tcGxldGVkfSwgZnVuY3Rpb24oKSB7CisgICAgdGhhdC52aWV3LnJlbmRlcignZWxlbWVu
dENvbXBsZXRlJywgeworICAgICAgaWQsCisgICAgICBjb21wbGV0ZWQsCisgICAgfSkKKyAgfSkK
KworICBpZiAoIXNpbGVudCkgeworICAgIHRoYXQuX2ZpbHRlcigpCisgIH0KK30KKworLyoqCisq
IFdpbGwgdG9nZ2xlIEFMTCBjaGVja2JveGVzJyBvbi9vZmYgc3RhdGUgYW5kIGNvbXBsZXRlbmVz
cyBvZiBtb2RlbHMuCisqIEp1c3QgcGFzcyBpbiB0aGUgZXZlbnQgb2JqZWN0LgorKi8KK0NvbnRy
b2xsZXIucHJvdG90eXBlLnRvZ2dsZUFsbCA9IGZ1bmN0aW9uKGNvbXBsZXRlZCkgeworICB2YXIg
dGhhdCA9IHRoaXMKKyAgdGhhdC5tb2RlbC5yZWFkKHtjb21wbGV0ZWQ6ICFjb21wbGV0ZWR9LCBm
dW5jdGlvbihkYXRhKSB7CisgICAgZGF0YS5mb3JFYWNoKGZ1bmN0aW9uKGl0ZW0pIHsKKyAgICAg
IHRoYXQudG9nZ2xlQ29tcGxldGUoaXRlbS5pZCwgY29tcGxldGVkLCB0cnVlKQorICAgIH0pCisg
IH0pCisKKyAgdGhhdC5fZmlsdGVyKCkKK30KKworLyoqCisqIFVwZGF0ZXMgdGhlIHBpZWNlcyBv
ZiB0aGUgcGFnZSB3aGljaCBjaGFuZ2UgZGVwZW5kaW5nIG9uIHRoZSByZW1haW5pbmcKKyogbnVt
YmVyIG9mIHRvZG9zLgorKi8KK0NvbnRyb2xsZXIucHJvdG90eXBlLl91cGRhdGVDb3VudCA9IGZ1
bmN0aW9uKCkgeworICB2YXIgdGhhdCA9IHRoaXMKKyAgdGhhdC5tb2RlbC5nZXRDb3VudChmdW5j
dGlvbih0b2RvcykgeworICAgIHRoYXQudmlldy5yZW5kZXIoJ3VwZGF0ZUVsZW1lbnRDb3VudCcs
IHRvZG9zLmFjdGl2ZSkKKyAgICB0aGF0LnZpZXcucmVuZGVyKCdjbGVhckNvbXBsZXRlZEJ1dHRv
bicsIHsKKyAgICAgIGNvbXBsZXRlZDogdG9kb3MuY29tcGxldGVkLAorICAgICAgdmlzaWJsZTog
dG9kb3MuY29tcGxldGVkID4gMAorICAgIH0pCisKKyAgICB0aGF0LnZpZXcucmVuZGVyKCd0b2dn
bGVBbGwnLCB7Y2hlY2tlZDogdG9kb3MuY29tcGxldGVkID09PSB0b2Rvcy50b3RhbH0pCisgICAg
dGhhdC52aWV3LnJlbmRlcignY29udGVudEJsb2NrVmlzaWJpbGl0eScsIHt2aXNpYmxlOiB0b2Rv
cy50b3RhbCA+IDB9KQorICB9KQorfQorCisvKioKKyogUmUtZmlsdGVycyB0aGUgdG9kbyBpdGVt
cywgYmFzZWQgb24gdGhlIGFjdGl2ZSByb3V0ZS4KKyogQHBhcmFtIHtib29sZWFufHVuZGVmaW5l
ZH0gZm9yY2UgIGZvcmNlcyBhIHJlLXBhaW50aW5nIG9mIHRvZG8gaXRlbXMuCisqLworQ29udHJv
bGxlci5wcm90b3R5cGUuX2ZpbHRlciA9IGZ1bmN0aW9uKGZvcmNlKSB7CisgIHZhciBhY3RpdmVS
b3V0ZSA9IHRoaXMuX2FjdGl2ZVJvdXRlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdGhpcy5f
YWN0aXZlUm91dGUuc3Vic3RyKDEpCisKKyAgLy8gVXBkYXRlIHRoZSBlbGVtZW50cyBvbiB0aGUg
cGFnZSwgd2hpY2ggY2hhbmdlIHdpdGggZWFjaCBjb21wbGV0ZWQgdG9kbworICB0aGlzLl91cGRh
dGVDb3VudCgpCisKKyAgLy8gSWYgdGhlIGxhc3QgYWN0aXZlIHJvdXRlIGlzbid0ICJBbGwiLCBv
ciB3ZSdyZSBzd2l0Y2hpbmcgcm91dGVzLCB3ZQorICAvLyByZS1jcmVhdGUgdGhlIHRvZG8gaXRl
bSBlbGVtZW50cywgY2FsbGluZzoKKyAgLy8gICB0aGlzLnNob3dbQWxsfEFjdGl2ZXxDb21wbGV0
ZWRdKCk7CisgIGlmIChmb3JjZSB8fCB0aGlzLl9sYXN0QWN0aXZlUm91dGUgIT09ICdBbGwnIHx8
IHRoaXMuX2xhc3RBY3RpdmVSb3V0ZSAhPT0gYWN0aXZlUm91dGUpIHsKKyAgICB0aGlzWydzaG93
JyArIGFjdGl2ZVJvdXRlXSgpCisgIH0KKworICB0aGlzLl9sYXN0QWN0aXZlUm91dGUgPSBhY3Rp
dmVSb3V0ZQorfQorCisvKioKKyogU2ltcGx5IHVwZGF0ZXMgdGhlIGZpbHRlciBuYXYncyBzZWxl
Y3RlZCBzdGF0ZXMKKyovCitDb250cm9sbGVyLnByb3RvdHlwZS5fdXBkYXRlRmlsdGVyU3RhdGUg
PSBmdW5jdGlvbihjdXJyZW50UGFnZSkgeworICAvLyBTdG9yZSBhIHJlZmVyZW5jZSB0byB0aGUg
YWN0aXZlIHJvdXRlLCBhbGxvd2luZyB1cyB0byByZS1maWx0ZXIgdG9kbworICAvLyBpdGVtcyBh
cyB0aGV5IGFyZSBtYXJrZWQgY29tcGxldGUgb3IgaW5jb21wbGV0ZS4KKyAgY3VycmVudFBhZ2Ug
PSBjdXJyZW50UGFnZS5zcGxpdCgnPycpWzBdCisgIHRoaXMuX2FjdGl2ZVJvdXRlID0gY3VycmVu
dFBhZ2UKKworICBpZiAoY3VycmVudFBhZ2UgPT09ICcnKSB7CisgICAgdGhpcy5fYWN0aXZlUm91
dGUgPSAnQWxsJworICB9CisKKyAgdGhpcy5fZmlsdGVyKCkKKworICB0aGlzLnZpZXcucmVuZGVy
KCdzZXRGaWx0ZXInLCBjdXJyZW50UGFnZSkKK30KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVz
dHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUt
YmFiZWwtd2VicGFjay9zcmMvY29udHJvbGxlci50ZXN0LmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9T
cGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJl
bC13ZWJwYWNrL3NyYy9jb250cm9sbGVyLnRlc3QuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjM0OTU1OWI5Yzgz
N2E3ZDU4ZWExYTMwNWNiNzc3ODdhYmNkMGYyMgotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1h
bmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9l
czIwMTUtYmFiZWwtd2VicGFjay9zcmMvY29udHJvbGxlci50ZXN0LmpzCkBAIC0wLDAgKzEsNyBA
QAoraW1wb3J0IENvbnRyb2xsZXIgZnJvbSAnLi9jb250cm9sbGVyJworCitkZXNjcmliZSgnY29u
dHJvbGxlcicsICgpID0+IHsKKyAgaXQoJ2V4aXN0cycsICgpID0+IHsKKyAgICBleHBlY3QoQ29u
dHJvbGxlcikudG8uZXhpc3QKKyAgfSkKK30pCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJh
YmVsLXdlYnBhY2svc3JjL2hlbHBlcnMuanMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVy
L3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2sv
c3JjL2hlbHBlcnMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTg4ZWNiOGQ5NDQ2ZTUxNDA3YjY2YmMwYmExYTc5
ZDQxNGJjOGM2NQotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0
ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFj
ay9zcmMvaGVscGVycy5qcwpAQCAtMCwwICsxLDYxIEBACitleHBvcnQge3FzLCBxc2EsICRvbiwg
JGRlbGVnYXRlLCAkcGFyZW50LCByZW1vdmV9CisKKy8vIEdldCBlbGVtZW50KHMpIGJ5IENTUyBz
ZWxlY3RvcjoKK2Z1bmN0aW9uIHFzKHNlbGVjdG9yLCBzY29wZSkgeworICByZXR1cm4gKHNjb3Bl
IHx8IGRvY3VtZW50KS5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKQorfQorCitmdW5jdGlvbiBxc2Eo
c2VsZWN0b3IsIHNjb3BlKSB7CisgIHJldHVybiAoc2NvcGUgfHwgZG9jdW1lbnQpLnF1ZXJ5U2Vs
ZWN0b3JBbGwoc2VsZWN0b3IpCit9CisKKy8vIGFkZEV2ZW50TGlzdGVuZXIgd3JhcHBlcjoKK2Z1
bmN0aW9uICRvbih0YXJnZXQsIHR5cGUsIGNhbGxiYWNrLCB1c2VDYXB0dXJlKSB7CisgIHRhcmdl
dC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGNhbGxiYWNrLCAhIXVzZUNhcHR1cmUpCit9CisKKy8v
IEF0dGFjaCBhIGhhbmRsZXIgdG8gZXZlbnQgZm9yIGFsbCBlbGVtZW50cyB0aGF0IG1hdGNoIHRo
ZSBzZWxlY3RvciwKKy8vIG5vdyBvciBpbiB0aGUgZnV0dXJlLCBiYXNlZCBvbiBhIHJvb3QgZWxl
bWVudAorZnVuY3Rpb24gJGRlbGVnYXRlKHRhcmdldCwgc2VsZWN0b3IsIHR5cGUsIGhhbmRsZXIp
IHsKKyAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvRXZl
bnRzL2JsdXIKKyAgdmFyIHVzZUNhcHR1cmUgPSB0eXBlID09PSAnYmx1cicgfHwgdHlwZSA9PT0g
J2ZvY3VzJworICAkb24odGFyZ2V0LCB0eXBlLCBkaXNwYXRjaEV2ZW50LCB1c2VDYXB0dXJlKQor
CisgIGZ1bmN0aW9uIGRpc3BhdGNoRXZlbnQoZXZlbnQpIHsKKyAgICB2YXIgdGFyZ2V0RWxlbWVu
dCA9IGV2ZW50LnRhcmdldAorICAgIHZhciBwb3RlbnRpYWxFbGVtZW50cyA9IHFzYShzZWxlY3Rv
ciwgdGFyZ2V0KQorICAgIHZhciBoYXNNYXRjaCA9IEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNh
bGwocG90ZW50aWFsRWxlbWVudHMsIHRhcmdldEVsZW1lbnQpID49IDAKKworICAgIGlmIChoYXNN
YXRjaCkgeworICAgICAgaGFuZGxlci5jYWxsKHRhcmdldEVsZW1lbnQsIGV2ZW50KQorICAgIH0K
KyAgfQorfQorCisvLyBGaW5kIHRoZSBlbGVtZW50J3MgcGFyZW50IHdpdGggdGhlIGdpdmVuIHRh
ZyBuYW1lOgorLy8gJHBhcmVudChxcygnYScpLCAnZGl2Jyk7CitmdW5jdGlvbiAkcGFyZW50KGVs
ZW1lbnQsIHRhZ05hbWUpIHsKKyAgaWYgKCFlbGVtZW50LnBhcmVudE5vZGUpIHsKKyAgICByZXR1
cm4gdW5kZWZpbmVkCisgIH0KKyAgaWYgKGVsZW1lbnQucGFyZW50Tm9kZS50YWdOYW1lLnRvTG93
ZXJDYXNlKCkgPT09IHRhZ05hbWUudG9Mb3dlckNhc2UoKSkgeworICAgIHJldHVybiBlbGVtZW50
LnBhcmVudE5vZGUKKyAgfQorICByZXR1cm4gJHBhcmVudChlbGVtZW50LnBhcmVudE5vZGUsIHRh
Z05hbWUpCit9CisKKy8vIHJlbW92ZXMgYW4gZWxlbWVudCBmcm9tIGFuIGFycmF5CisvLyBjb25z
dCB4ID0gWzEsMiwzXQorLy8gcmVtb3ZlKHgsIDIpCisvLyB4IH49PSBbMSwzXQorZnVuY3Rpb24g
cmVtb3ZlKGFycmF5LCB0aGluZykgeworICBjb25zdCBpbmRleCA9IGFycmF5LmluZGV4T2YodGhp
bmcpCisgIGlmIChpbmRleCA9PT0gLTEpIHsKKyAgICByZXR1cm4gYXJyYXkKKyAgfQorICBhcnJh
eS5zcGxpY2UoaW5kZXgsIDEpCit9CisKKy8vIEFsbG93IGZvciBsb29waW5nIG9uIG5vZGVzIGJ5
IGNoYWluaW5nOgorLy8gcXNhKCcuZm9vJykuZm9yRWFjaChmdW5jdGlvbiAoKSB7fSkKK05vZGVM
aXN0LnByb3RvdHlwZS5mb3JFYWNoID0gQXJyYXkucHJvdG90eXBlLmZvckVhY2gKZGlmZiAtLWdp
dCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxs
YS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9zcmMvaW5kZXguaHRtbCBiL1BlcmZvcm1h
bmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9l
czIwMTUtYmFiZWwtd2VicGFjay9zcmMvaW5kZXguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MjEyY2MyNDY1
NmJhMjFkMzA0YWZmZThkYWJlOWRiMjBiZjNmODAyCi0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9y
bWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVz
L2VzMjAxNS1iYWJlbC13ZWJwYWNrL3NyYy9pbmRleC5odG1sCkBAIC0wLDAgKzEsNDQgQEAKKzwh
ZG9jdHlwZSBodG1sPgorPGh0bWwgbGFuZz0iZW4iIGRhdGEtZnJhbWV3b3JrPSJqYXZhc2NyaXB0
Ij4KKyAgPGhlYWQ+CisgICAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgorICAgIDx0aXRsZT5WYW5p
bGxhSlMg4oCiIFRvZG9NVkM8L3RpdGxlPgorICAgIDwlPWh0bWxXZWJwYWNrUGx1Z2luLmZpbGVz
LndlYnBhY2tNYW5pZmVzdCU+CisgIDwvaGVhZD4KKyAgPGJvZHk+CisgICAgPHNlY3Rpb24gY2xh
c3M9InRvZG9hcHAiPgorICAgICAgPGhlYWRlciBjbGFzcz0iaGVhZGVyIj4KKyAgICAgICAgPGgx
PnRvZG9zPC9oMT4KKyAgICAgICAgPGlucHV0IGNsYXNzPSJuZXctdG9kbyIgcGxhY2Vob2xkZXI9
IldoYXQgbmVlZHMgdG8gYmUgZG9uZT8iIGF1dG9mb2N1cz4KKyAgICAgIDwvaGVhZGVyPgorICAg
ICAgPHNlY3Rpb24gY2xhc3M9Im1haW4iPgorICAgICAgICA8aW5wdXQgY2xhc3M9InRvZ2dsZS1h
bGwiIHR5cGU9ImNoZWNrYm94Ij4KKyAgICAgICAgPGxhYmVsIGZvcj0idG9nZ2xlLWFsbCI+TWFy
ayBhbGwgYXMgY29tcGxldGU8L2xhYmVsPgorICAgICAgICA8dWwgY2xhc3M9InRvZG8tbGlzdCI+
PC91bD4KKyAgICAgIDwvc2VjdGlvbj4KKyAgICAgIDxmb290ZXIgY2xhc3M9ImZvb3RlciI+Cisg
ICAgICAgIDxzcGFuIGNsYXNzPSJ0b2RvLWNvdW50Ij48L3NwYW4+CisgICAgICAgIDx1bCBjbGFz
cz0iZmlsdGVycyI+CisgICAgICAgICAgPGxpPgorICAgICAgICAgICAgPGEgaHJlZj0iIy8iIGNs
YXNzPSJzZWxlY3RlZCI+QWxsPC9hPgorICAgICAgICAgIDwvbGk+CisgICAgICAgICAgPGxpPgor
ICAgICAgICAgICAgPGEgaHJlZj0iIy9hY3RpdmUiPkFjdGl2ZTwvYT4KKyAgICAgICAgICA8L2xp
PgorICAgICAgICAgIDxsaT4KKyAgICAgICAgICAgIDxhIGhyZWY9IiMvY29tcGxldGVkIj5Db21w
bGV0ZWQ8L2E+CisgICAgICAgICAgPC9saT4KKyAgICAgICAgPC91bD4KKyAgICAgICAgPGJ1dHRv
biBjbGFzcz0iY2xlYXItY29tcGxldGVkIj5DbGVhciBjb21wbGV0ZWQ8L2J1dHRvbj4KKyAgICAg
IDwvZm9vdGVyPgorICAgIDwvc2VjdGlvbj4KKyAgICA8Zm9vdGVyIGNsYXNzPSJpbmZvIj4KKyAg
ICAgIDxwPkRvdWJsZS1jbGljayB0byBlZGl0IGEgdG9kbzwvcD4KKyAgICAgIDxwPlNwZWVkb21l
dGVyIHZlcnNpb24gYnkgPGEgaHJlZj0iaHR0cDovL3R3aXR0ZXIuY29tL2FkZHlvc21hbmkiPkFk
ZHkgT3NtYW5pPC9hPjwvcD4KKyAgICAgIDxwPkNyZWF0ZWQgYnkgPGEgaHJlZj0iaHR0cDovL3R3
aXR0ZXIuY29tL29zY2FyZ29kc29uIj5Pc2NhciBHb2Rzb248L2E+PC9wPgorICAgICAgPHA+UmVm
YWN0b3JlZCBieSA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vY2J1cmdtZXIiPkNocmlzdG9w
aCBCdXJnbWVyPC9hPjwvcD4KKyAgICAgIDxwPlBvcnRlZCB0byBFUzYgYnkgPGEgaHJlZj0iaHR0
cHM6Ly90d2l0dGVyLmNvbS9rZW50Y2RvZGRzIj5LZW50IEMuIERvZGRzPC9hPjwvcD4KKyAgICAg
IDxwPlBhcnQgb2YgPGEgaHJlZj0iaHR0cDovL3RvZG9tdmMuY29tIj5Ub2RvTVZDPC9hPjwvcD4K
KyAgICA8L2Zvb3Rlcj4KKyAgPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFu
Y2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2Vz
MjAxNS1iYWJlbC13ZWJwYWNrL3NyYy9tb2RlbC5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRv
bWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2Vi
cGFjay9zcmMvbW9kZWwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDZmYTU4YTZiZWQ3MzIzZjYyY2YzNTcyNTFi
OTc1NDM4MjcwNWY3YwotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRv
bWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2Vi
cGFjay9zcmMvbW9kZWwuanMKQEAgLTAsMCArMSwxMTYgQEAKK2V4cG9ydCBkZWZhdWx0IE1vZGVs
CisKKy8qKgorKiBDcmVhdGVzIGEgbmV3IE1vZGVsIGluc3RhbmNlIGFuZCBob29rcyB1cCB0aGUg
c3RvcmFnZS4KKyoKKyogQGNvbnN0cnVjdG9yCisqIEBwYXJhbSB7b2JqZWN0fSBzdG9yYWdlIEEg
cmVmZXJlbmNlIHRvIHRoZSBjbGllbnQgc2lkZSBzdG9yYWdlIGNsYXNzCisqLworZnVuY3Rpb24g
TW9kZWwoc3RvcmFnZSkgeworICB0aGlzLnN0b3JhZ2UgPSBzdG9yYWdlCit9CisKKy8qKgorKiBD
cmVhdGVzIGEgbmV3IHRvZG8gbW9kZWwKKyoKKyogQHBhcmFtIHtzdHJpbmd9IFt0aXRsZV0gVGhl
IHRpdGxlIG9mIHRoZSB0YXNrCisqIEBwYXJhbSB7ZnVuY3Rpb259IFtjYWxsYmFja10gVGhlIGNh
bGxiYWNrIHRvIGZpcmUgYWZ0ZXIgdGhlIG1vZGVsIGlzIGNyZWF0ZWQKKyovCitNb2RlbC5wcm90
b3R5cGUuY3JlYXRlID0gZnVuY3Rpb24odGl0bGUsIGNhbGxiYWNrKSB7CisgIHRpdGxlID0gdGl0
bGUgfHwgJycKKyAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHsKKyAgfQorCisg
IHZhciBuZXdJdGVtID0geworICAgIHRpdGxlOiB0aXRsZS50cmltKCksCisgICAgY29tcGxldGVk
OiBmYWxzZQorICB9CisKKyAgdGhpcy5zdG9yYWdlLnNhdmUobmV3SXRlbSwgY2FsbGJhY2spCit9
CisKKy8qKgorICogRmluZHMgYW5kIHJldHVybnMgYSBtb2RlbCBpbiBzdG9yYWdlLiBJZiBubyBx
dWVyeSBpcyBnaXZlbiBpdCdsbCBzaW1wbHkKKyAqIHJldHVybiBldmVyeXRoaW5nLiBJZiB5b3Ug
cGFzcyBpbiBhIHN0cmluZyBvciBudW1iZXIgaXQnbGwgbG9vayB0aGF0IHVwIGFzCisgKiB0aGUg
SUQgb2YgdGhlIG1vZGVsIHRvIGZpbmQuIExhc3RseSwgeW91IGNhbiBwYXNzIGl0IGFuIG9iamVj
dCB0byBtYXRjaCBhZ2FpbnN0LgorICoKKyAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcnxvYmplY3R9
IFtxdWVyeV0gQSBxdWVyeSB0byBtYXRjaCBtb2RlbHMgYWdhaW5zdAorICogQHBhcmFtIHtmdW5j
dGlvbn0gW2NhbGxiYWNrXSBUaGUgY2FsbGJhY2sgdG8gZmlyZSBhZnRlciB0aGUgbW9kZWwgaXMg
Zm91bmQKKyAqCisgKiBAZXhhbXBsZQorICogbW9kZWwucmVhZCgxLCBmdW5jKTsgLy8gV2lsbCBm
aW5kIHRoZSBtb2RlbCB3aXRoIGFuIElEIG9mIDEKKyAqIG1vZGVsLnJlYWQoJzEnKTsgLy8gU2Ft
ZSBhcyBhYm92ZQorICogLy9CZWxvdyB3aWxsIGZpbmQgYSBtb2RlbCB3aXRoIGZvbyBlcXVhbGxp
bmcgYmFyIGFuZCBoZWxsbyBlcXVhbGxpbmcgd29ybGQuCisgKiBtb2RlbC5yZWFkKHsgZm9vOiAn
YmFyJywgaGVsbG86ICd3b3JsZCcgfSk7CisgKi8KK01vZGVsLnByb3RvdHlwZS5yZWFkID0gZnVu
Y3Rpb24ocXVlcnksIGNhbGxiYWNrKSB7CisgIHZhciBxdWVyeVR5cGUgPSB0eXBlb2YgcXVlcnkK
KyAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHsKKyAgfQorCisgIGlmIChxdWVy
eVR5cGUgPT09ICdmdW5jdGlvbicpIHsKKyAgICBjYWxsYmFjayA9IHF1ZXJ5CisgICAgcmV0dXJu
IHRoaXMuc3RvcmFnZS5maW5kQWxsKGNhbGxiYWNrKQorICB9IGVsc2UgaWYgKHF1ZXJ5VHlwZSA9
PT0gJ3N0cmluZycgfHwgcXVlcnlUeXBlID09PSAnbnVtYmVyJykgeworICAgIHF1ZXJ5ID0gcGFy
c2VJbnQocXVlcnksIDEwKQorICAgIHRoaXMuc3RvcmFnZS5maW5kKHtpZDogcXVlcnl9LCBjYWxs
YmFjaykKKyAgfSBlbHNlIHsKKyAgICB0aGlzLnN0b3JhZ2UuZmluZChxdWVyeSwgY2FsbGJhY2sp
CisgIH0KKyAgcmV0dXJuIHVuZGVmaW5lZAorfQorCisvKioKKyogVXBkYXRlcyBhIG1vZGVsIGJ5
IGdpdmluZyBpdCBhbiBJRCwgZGF0YSB0byB1cGRhdGUsIGFuZCBhIGNhbGxiYWNrIHRvIGZpcmUg
d2hlbgorKiB0aGUgdXBkYXRlIGlzIGNvbXBsZXRlLgorKgorKiBAcGFyYW0ge251bWJlcn0gaWQg
VGhlIGlkIG9mIHRoZSBtb2RlbCB0byB1cGRhdGUKKyogQHBhcmFtIHtvYmplY3R9IGRhdGEgVGhl
IHByb3BlcnRpZXMgdG8gdXBkYXRlIGFuZCB0aGVpciBuZXcgdmFsdWUKKyogQHBhcmFtIHtmdW5j
dGlvbn0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGZpcmUgd2hlbiB0aGUgdXBkYXRlIGlzIGNv
bXBsZXRlLgorKi8KK01vZGVsLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbihpZCwgZGF0YSwg
Y2FsbGJhY2spIHsKKyAgdGhpcy5zdG9yYWdlLnNhdmUoZGF0YSwgY2FsbGJhY2ssIGlkKQorfQor
CisvKioKKyogUmVtb3ZlcyBhIG1vZGVsIGZyb20gc3RvcmFnZQorKgorKiBAcGFyYW0ge251bWJl
cn0gaWQgVGhlIElEIG9mIHRoZSBtb2RlbCB0byByZW1vdmUKKyogQHBhcmFtIHtmdW5jdGlvbn0g
Y2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGZpcmUgd2hlbiB0aGUgcmVtb3ZhbCBpcyBjb21wbGV0
ZS4KKyovCitNb2RlbC5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24oaWQsIGNhbGxiYWNrKSB7
CisgIHRoaXMuc3RvcmFnZS5yZW1vdmUoaWQsIGNhbGxiYWNrKQorfQorCisvKioKKyogV0FSTklO
RzogV2lsbCByZW1vdmUgQUxMIGRhdGEgZnJvbSBzdG9yYWdlLgorKgorKiBAcGFyYW0ge2Z1bmN0
aW9ufSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gZmlyZSB3aGVuIHRoZSBzdG9yYWdlIGlzIHdp
cGVkLgorKi8KK01vZGVsLnByb3RvdHlwZS5yZW1vdmVBbGwgPSBmdW5jdGlvbihjYWxsYmFjaykg
eworICB0aGlzLnN0b3JhZ2UuZHJvcChjYWxsYmFjaykKK30KKworLyoqCisqIFJldHVybnMgYSBj
b3VudCBvZiBhbGwgdG9kb3MKKyovCitNb2RlbC5wcm90b3R5cGUuZ2V0Q291bnQgPSBmdW5jdGlv
bihjYWxsYmFjaykgeworICB2YXIgdG9kb3MgPSB7CisgICAgYWN0aXZlOiAwLAorICAgIGNvbXBs
ZXRlZDogMCwKKyAgICB0b3RhbDogMAorICB9CisKKyAgdGhpcy5zdG9yYWdlLmZpbmRBbGwoZnVu
Y3Rpb24oZGF0YSkgeworICAgIGRhdGEuZm9yRWFjaChmdW5jdGlvbih0b2RvKSB7CisgICAgICBp
ZiAodG9kby5jb21wbGV0ZWQpIHsKKyAgICAgICAgdG9kb3MuY29tcGxldGVkKysKKyAgICAgIH0g
ZWxzZSB7CisgICAgICAgIHRvZG9zLmFjdGl2ZSsrCisgICAgICB9CisKKyAgICAgIHRvZG9zLnRv
dGFsKysKKyAgICB9KQorICAgIGNhbGxiYWNrKHRvZG9zKQorICB9KQorfQpkaWZmIC0tZ2l0IGEv
UGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4
YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrL3NyYy9zdG9yZS5qcyBiL1BlcmZvcm1hbmNlVGVz
dHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUt
YmFiZWwtd2VicGFjay9zcmMvc3RvcmUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzNiOTdjMjA3Zjk5ZmQ0M2Uw
NmRlM2EwNjJjNTNjMmE0YjU4OWIzNAotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVz
dHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUt
YmFiZWwtd2VicGFjay9zcmMvc3RvcmUuanMKQEAgLTAsMCArMSwxNTAgQEAKK2ltcG9ydCB7cmVt
b3ZlfSBmcm9tICcuL2hlbHBlcnMnCitleHBvcnQgZGVmYXVsdCBTdG9yZQorCisvKioKKyAqIENy
ZWF0ZXMgYSBuZXcgY2xpZW50IHNpZGUgc3RvcmFnZSBvYmplY3QgYW5kIHdpbGwgY3JlYXRlIGFu
IGVtcHR5CisgKiBjb2xsZWN0aW9uIGlmIG5vIGNvbGxlY3Rpb24gYWxyZWFkeSBleGlzdHMuCisg
KgorICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgVGhlIG5hbWUgb2Ygb3VyIERCIHdlIHdhbnQgdG8g
dXNlCisgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayBPdXIgZmFrZSBEQiB1c2VzIGNhbGxi
YWNrcyBiZWNhdXNlIGluCisgKiByZWFsIGxpZmUgeW91IHByb2JhYmx5IHdvdWxkIGJlIG1ha2lu
ZyBBSkFYIGNhbGxzCisgKi8KK2Z1bmN0aW9uIFN0b3JlKG5hbWUsIGNhbGxiYWNrKSB7CisgIGNh
bGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7CisgIH0KKworICB0aGlzLl9kYk5hbWUg
PSBuYW1lCisKKyAgaWYgKCFsb2NhbFN0b3JhZ2VbbmFtZV0pIHsKKyAgICB2YXIgZGF0YSA9IHsK
KyAgICAgIHRvZG9zOiBbXQorICAgIH0KKworICAgIGxvY2FsU3RvcmFnZVtuYW1lXSA9IEpTT04u
c3RyaW5naWZ5KGRhdGEpCisgIH0KKworICBjYWxsYmFjay5jYWxsKHRoaXMsIEpTT04ucGFyc2Uo
bG9jYWxTdG9yYWdlW25hbWVdKSkKKyAgdGhpcy5zdWJzY3JpYmVycyA9IFtdCit9CisKK1N0b3Jl
LnByb3RvdHlwZS5zdWJzY3JpYmUgPSBmdW5jdGlvbihzdWJzY3JpYmVyKSB7CisgIHRoaXMuc3Vi
c2NyaWJlcnMucHVzaChzdWJzY3JpYmVyKQorICByZXR1cm4gKCkgPT4gcmVtb3ZlKHRoaXMuc3Vi
c2NyaWJlcnMsIHN1YnNjcmliZXIpCit9CisKK1N0b3JlLnByb3RvdHlwZS5fbm90aWZ5ID0gZnVu
Y3Rpb24oKSB7CisgIHRoaXMuc3Vic2NyaWJlcnMuZm9yRWFjaChzID0+IHMoKSkKK30KKworLyoq
CisqIEZpbmRzIGl0ZW1zIGJhc2VkIG9uIGEgcXVlcnkgZ2l2ZW4gYXMgYSBKUyBvYmplY3QKKyoK
KyogQHBhcmFtIHtvYmplY3R9IHF1ZXJ5IFRoZSBxdWVyeSB0byBtYXRjaCBhZ2FpbnN0IChpLmUu
IHtmb286ICdiYXInfSkKKyogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgICBUaGUgY2FsbGJh
Y2sgdG8gZmlyZSB3aGVuIHRoZSBxdWVyeSBoYXMKKyogY29tcGxldGVkIHJ1bm5pbmcKKyoKKyog
QGV4YW1wbGUKKyogZGIuZmluZCh7Zm9vOiAnYmFyJywgaGVsbG86ICd3b3JsZCd9LCBmdW5jdGlv
biAoZGF0YSkgeworKiAgIC8vIGRhdGEgd2lsbCByZXR1cm4gYW55IGl0ZW1zIHRoYXQgaGF2ZSBm
b286IGJhciBhbmQKKyogICAvLyBoZWxsbzogd29ybGQgaW4gdGhlaXIgcHJvcGVydGllcworKiB9
KTsKKyovCitTdG9yZS5wcm90b3R5cGUuZmluZCA9IGZ1bmN0aW9uKHF1ZXJ5LCBjYWxsYmFjaykg
eworICBpZiAoIWNhbGxiYWNrKSB7CisgICAgcmV0dXJuCisgIH0KKworICB2YXIgdG9kb3MgPSBK
U09OLnBhcnNlKGxvY2FsU3RvcmFnZVt0aGlzLl9kYk5hbWVdKS50b2RvcworCisgIGNhbGxiYWNr
LmNhbGwodGhpcywgdG9kb3MuZmlsdGVyKGZ1bmN0aW9uKHRvZG8pIHsKKyAgICBmb3IgKHZhciBx
IGluIHF1ZXJ5KSB7CisgICAgICBpZiAocXVlcnlbcV0gIT09IHRvZG9bcV0pIHsKKyAgICAgICAg
cmV0dXJuIGZhbHNlCisgICAgICB9CisgICAgfQorICAgIHJldHVybiB0cnVlCisgIH0pKQorfQor
CisvKioKKyogV2lsbCByZXRyaWV2ZSBhbGwgZGF0YSBmcm9tIHRoZSBjb2xsZWN0aW9uCisqCisq
IEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBmaXJlIHVwb24gcmV0
cmlldmluZyBkYXRhCisqLworU3RvcmUucHJvdG90eXBlLmZpbmRBbGwgPSBmdW5jdGlvbihjYWxs
YmFjaykgeworICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCkgeworICB9CisgIGNh
bGxiYWNrLmNhbGwodGhpcywgSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2VbdGhpcy5fZGJOYW1lXSku
dG9kb3MpCit9CisKKy8qKgorKiBXaWxsIHNhdmUgdGhlIGdpdmVuIGRhdGEgdG8gdGhlIERCLiBJ
ZiBubyBpdGVtIGV4aXN0cyBpdCB3aWxsIGNyZWF0ZSBhIG5ldworKiBpdGVtLCBvdGhlcndpc2Ug
aXQnbGwgc2ltcGx5IHVwZGF0ZSBhbiBleGlzdGluZyBpdGVtJ3MgcHJvcGVydGllcworKgorKiBA
cGFyYW0ge29iamVjdH0gdXBkYXRlRGF0YSBUaGUgZGF0YSB0byBzYXZlIGJhY2sgaW50byB0aGUg
REIKKyogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGZpcmUgYWZ0
ZXIgc2F2aW5nCisqIEBwYXJhbSB7bnVtYmVyfSBpZCBBbiBvcHRpb25hbCBwYXJhbSB0byBlbnRl
ciBhbiBJRCBvZiBhbiBpdGVtIHRvIHVwZGF0ZQorKi8KK1N0b3JlLnByb3RvdHlwZS5zYXZlID0g
ZnVuY3Rpb24odXBkYXRlRGF0YSwgY2FsbGJhY2ssIGlkKSB7CisgIHZhciBkYXRhID0gSlNPTi5w
YXJzZShsb2NhbFN0b3JhZ2VbdGhpcy5fZGJOYW1lXSkKKyAgdmFyIHRvZG9zID0gZGF0YS50b2Rv
cworCisgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7CisgIH0KKworICAvLyBJ
ZiBhbiBJRCB3YXMgYWN0dWFsbHkgZ2l2ZW4sIGZpbmQgdGhlIGl0ZW0gYW5kIHVwZGF0ZSBlYWNo
IHByb3BlcnR5CisgIGlmIChpZCkgeworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG9kb3MubGVu
Z3RoOyBpKyspIHsKKyAgICAgIGlmICh0b2Rvc1tpXS5pZCA9PT0gaWQpIHsKKyAgICAgICAgZm9y
ICh2YXIga2V5IGluIHVwZGF0ZURhdGEpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBndWFyZC1m
b3ItaW4KKyAgICAgICAgICB0b2Rvc1tpXVtrZXldID0gdXBkYXRlRGF0YVtrZXldCisgICAgICAg
IH0KKyAgICAgICAgYnJlYWsKKyAgICAgIH0KKyAgICB9CisKKyAgICBsb2NhbFN0b3JhZ2VbdGhp
cy5fZGJOYW1lXSA9IEpTT04uc3RyaW5naWZ5KGRhdGEpCisgICAgY2FsbGJhY2suY2FsbCh0aGlz
LCBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZVt0aGlzLl9kYk5hbWVdKS50b2RvcykKKyAgfSBlbHNl
IHsKKyAgICAvLyBHZW5lcmF0ZSBhbiBJRAorICAgIHVwZGF0ZURhdGEuaWQgPSBuZXcgRGF0ZSgp
LmdldFRpbWUoKQorCisgICAgdG9kb3MucHVzaCh1cGRhdGVEYXRhKQorICAgIGxvY2FsU3RvcmFn
ZVt0aGlzLl9kYk5hbWVdID0gSlNPTi5zdHJpbmdpZnkoZGF0YSkKKyAgICBjYWxsYmFjay5jYWxs
KHRoaXMsIFt1cGRhdGVEYXRhXSkKKyAgfQorICB0aGlzLl9ub3RpZnkoKQorfQorCisvKioKKyog
V2lsbCByZW1vdmUgYW4gaXRlbSBmcm9tIHRoZSBTdG9yZSBiYXNlZCBvbiBpdHMgSUQKKyoKKyog
QHBhcmFtIHtudW1iZXJ9IGlkIFRoZSBJRCBvZiB0aGUgaXRlbSB5b3Ugd2FudCB0byByZW1vdmUK
KyogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGZpcmUgYWZ0ZXIg
c2F2aW5nCisqLworU3RvcmUucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uKGlkLCBjYWxsYmFj
aykgeworICB2YXIgZGF0YSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlW3RoaXMuX2RiTmFtZV0p
CisgIHZhciB0b2RvcyA9IGRhdGEudG9kb3MKKworICBmb3IgKHZhciBpID0gMDsgaSA8IHRvZG9z
Lmxlbmd0aDsgaSsrKSB7CisgICAgaWYgKHRvZG9zW2ldLmlkID09PSBpZCkgeworICAgICAgdG9k
b3Muc3BsaWNlKGksIDEpCisgICAgICBicmVhaworICAgIH0KKyAgfQorCisgIGxvY2FsU3RvcmFn
ZVt0aGlzLl9kYk5hbWVdID0gSlNPTi5zdHJpbmdpZnkoZGF0YSkKKyAgY2FsbGJhY2suY2FsbCh0
aGlzLCBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZVt0aGlzLl9kYk5hbWVdKS50b2RvcykKKyAgdGhp
cy5fbm90aWZ5KCkKK30KKworLyoqCisqIFdpbGwgZHJvcCBhbGwgc3RvcmFnZSBhbmQgc3RhcnQg
ZnJlc2gKKyoKKyogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGZp
cmUgYWZ0ZXIgZHJvcHBpbmcgdGhlIGRhdGEKKyovCitTdG9yZS5wcm90b3R5cGUuZHJvcCA9IGZ1
bmN0aW9uKGNhbGxiYWNrKSB7CisgIGxvY2FsU3RvcmFnZVt0aGlzLl9kYk5hbWVdID0gSlNPTi5z
dHJpbmdpZnkoe3RvZG9zOiBbXX0pCisgIGNhbGxiYWNrLmNhbGwodGhpcywgSlNPTi5wYXJzZShs
b2NhbFN0b3JhZ2VbdGhpcy5fZGJOYW1lXSkudG9kb3MpCisgIHRoaXMuX25vdGlmeSgpCit9CmRp
ZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZj
L3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svc3JjL3RlbXBsYXRlLmpzIGIv
UGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4
YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrL3NyYy90ZW1wbGF0ZS5qcwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42
MGM0ZjZmYzg0NzA4ZjdjYzM4YzZjY2E0ZGZiZmIzZGVlOWQ0YWVmCi0tLSAvZGV2L251bGwKKysr
IGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxh
LWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrL3NyYy90ZW1wbGF0ZS5qcwpAQCAtMCwwICsx
LDExMCBAQAorZXhwb3J0IGRlZmF1bHQgVGVtcGxhdGUKKwordmFyIGh0bWxFc2NhcGVzID0gewor
ICAnJic6ICcmYW1wOycsCisgICc8JzogJyZsdDsnLAorICAnPic6ICcmZ3Q7JywKKyAgJyInOiAn
JnF1b3Q7JywKKyAgJ1wnJzogJyYjeDI3OycsCisgICdgJzogJyYjeDYwOycKK30KKwordmFyIGVz
Y2FwZUh0bWxDaGFyID0gZnVuY3Rpb24oY2hyKSB7CisgIHJldHVybiBodG1sRXNjYXBlc1tjaHJd
Cit9CisKK3ZhciByZVVuZXNjYXBlZEh0bWwgPSAvWyY8PiInYF0vZwordmFyIHJlSGFzVW5lc2Nh
cGVkSHRtbCA9IG5ldyBSZWdFeHAocmVVbmVzY2FwZWRIdG1sLnNvdXJjZSkKKwordmFyIGVzY2Fw
ZSA9IGZ1bmN0aW9uKHN0cmluZykgeworICBpZiAoc3RyaW5nICYmIHJlSGFzVW5lc2NhcGVkSHRt
bC50ZXN0KHN0cmluZykpIHsKKyAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UocmVVbmVzY2FwZWRI
dG1sLCBlc2NhcGVIdG1sQ2hhcikKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gc3RyaW5nCisgIH0K
K30KKworLyoqCisqIFNldHMgdXAgZGVmYXVsdHMgZm9yIGFsbCB0aGUgVGVtcGxhdGUgbWV0aG9k
cyBzdWNoIGFzIGEgZGVmYXVsdCB0ZW1wbGF0ZQorKgorKiBAY29uc3RydWN0b3IKKyovCitmdW5j
dGlvbiBUZW1wbGF0ZSgpIHsKKyAgdGhpcy5kZWZhdWx0VGVtcGxhdGUgPSBgCisgICAgPGxpIGRh
dGEtaWQ9Int7aWR9fSIgY2xhc3M9Int7Y29tcGxldGVkfX0iPgorICAgICAgPGRpdiBjbGFzcz0i
dmlldyI+CisgICAgICAgIDxpbnB1dCBjbGFzcz0idG9nZ2xlIiB0eXBlPSJjaGVja2JveCIge3tj
aGVja2VkfX0gLz4KKyAgICAgICAgPGxhYmVsPnt7dGl0bGV9fTwvbGFiZWw+CisgICAgICAgIDxi
dXR0b24gY2xhc3M9ImRlc3Ryb3kiPjwvYnV0dG9uPgorICAgICAgPC9kaXY+CisgICAgPC9saT4K
KyAgYAorfQorCisvKioKKyAqIENyZWF0ZXMgYW4gPGxpPiBIVE1MIHN0cmluZyBhbmQgcmV0dXJu
cyBpdCBmb3IgcGxhY2VtZW50IGluIHlvdXIgYXBwLgorICoKKyAqIE5PVEU6IEluIHJlYWwgbGlm
ZSB5b3Ugc2hvdWxkIGJlIHVzaW5nIGEgdGVtcGxhdGluZyBlbmdpbmUgc3VjaCBhcyBNdXN0YWNo
ZQorICogb3IgSGFuZGxlYmFycywgaG93ZXZlciwgdGhpcyBpcyBhIHZhbmlsbGEgSlMgZXhhbXBs
ZS4KKyAqCisgKiBAcGFyYW0ge29iamVjdH0gZGF0YSBUaGUgb2JqZWN0IGNvbnRhaW5pbmcga2V5
cyB5b3Ugd2FudCB0byBmaW5kIGluIHRoZQorICogICAgICAgICAgICAgICAgICAgICAgdGVtcGxh
dGUgdG8gcmVwbGFjZS4KKyAqIEByZXR1cm5zIHtzdHJpbmd9IEhUTUwgU3RyaW5nIG9mIGFuIDxs
aT4gZWxlbWVudAorICoKKyAqIEBleGFtcGxlCisgKiB2aWV3LnNob3coeworICogIGlkOiAxLAor
ICogIHRpdGxlOiAiSGVsbG8gV29ybGQiLAorICogIGNvbXBsZXRlZDogMCwKKyAqIH0pOworICov
CitUZW1wbGF0ZS5wcm90b3R5cGUuc2hvdyA9IGZ1bmN0aW9uKGRhdGEpIHsKKyAgdmFyIGksIGwK
KyAgdmFyIHZpZXcgPSAnJworCisgIGZvciAoaSA9IDAsIGwgPSBkYXRhLmxlbmd0aDsgaSA8IGw7
IGkrKykgeworICAgIHZhciB0ZW1wbGF0ZSA9IHRoaXMuZGVmYXVsdFRlbXBsYXRlCisgICAgdmFy
IGNvbXBsZXRlZCA9ICcnCisgICAgdmFyIGNoZWNrZWQgPSAnJworCisgICAgaWYgKGRhdGFbaV0u
Y29tcGxldGVkKSB7CisgICAgICBjb21wbGV0ZWQgPSAnY29tcGxldGVkJworICAgICAgY2hlY2tl
ZCA9ICdjaGVja2VkJworICAgIH0KKworICAgIHRlbXBsYXRlID0gdGVtcGxhdGUucmVwbGFjZSgn
e3tpZH19JywgZGF0YVtpXS5pZCkKKyAgICB0ZW1wbGF0ZSA9IHRlbXBsYXRlLnJlcGxhY2UoJ3t7
dGl0bGV9fScsIGVzY2FwZShkYXRhW2ldLnRpdGxlKSkKKyAgICB0ZW1wbGF0ZSA9IHRlbXBsYXRl
LnJlcGxhY2UoJ3t7Y29tcGxldGVkfX0nLCBjb21wbGV0ZWQpCisgICAgdGVtcGxhdGUgPSB0ZW1w
bGF0ZS5yZXBsYWNlKCd7e2NoZWNrZWR9fScsIGNoZWNrZWQpCisKKyAgICB2aWV3ID0gdmlldyAr
IHRlbXBsYXRlCisgIH0KKworICByZXR1cm4gdmlldworfQorCisvKioKKyAqIERpc3BsYXlzIGEg
Y291bnRlciBvZiBob3cgbWFueSB0byBkb3MgYXJlIGxlZnQgdG8gY29tcGxldGUKKyAqCisgKiBA
cGFyYW0ge251bWJlcn0gYWN0aXZlVG9kb3MgVGhlIG51bWJlciBvZiBhY3RpdmUgdG9kb3MuCisg
KiBAcmV0dXJucyB7c3RyaW5nfSBTdHJpbmcgY29udGFpbmluZyB0aGUgY291bnQKKyAqLworVGVt
cGxhdGUucHJvdG90eXBlLml0ZW1Db3VudGVyID0gZnVuY3Rpb24oYWN0aXZlVG9kb3MpIHsKKyAg
dmFyIHBsdXJhbCA9IGFjdGl2ZVRvZG9zID09PSAxID8gJycgOiAncycKKworICByZXR1cm4gJzxz
dHJvbmc+JyArIGFjdGl2ZVRvZG9zICsgJzwvc3Ryb25nPiBpdGVtJyArIHBsdXJhbCArICcgbGVm
dCcKK30KKworLyoqCisgKiBVcGRhdGVzIHRoZSB0ZXh0IHdpdGhpbiB0aGUgIkNsZWFyIGNvbXBs
ZXRlZCIgYnV0dG9uCisgKgorICogQHBhcmFtICB7W3R5cGVdfSBjb21wbGV0ZWRUb2RvcyBUaGUg
bnVtYmVyIG9mIGNvbXBsZXRlZCB0b2Rvcy4KKyAqIEByZXR1cm5zIHtzdHJpbmd9IFN0cmluZyBj
b250YWluaW5nIHRoZSBjb3VudAorICovCitUZW1wbGF0ZS5wcm90b3R5cGUuY2xlYXJDb21wbGV0
ZWRCdXR0b24gPSBmdW5jdGlvbihjb21wbGV0ZWRUb2RvcykgeworICBpZiAoY29tcGxldGVkVG9k
b3MgPiAwKSB7CisgICAgcmV0dXJuICdDbGVhciBjb21wbGV0ZWQnCisgIH0gZWxzZSB7CisgICAg
cmV0dXJuICcnCisgIH0KK30KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0
ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFj
ay9zcmMvdG9kby5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3Rv
ZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9zcmMvdG9kby5qcwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5lNTFjZjM2MWFhMzVlMjM0ZDJiMjY3ZTg2NjdlYjBhODc4NjRiZjY2Ci0tLSAv
ZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9k
b212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrL3NyYy90b2RvLmpzCkBA
IC0wLDAgKzEsNDEgQEAKK2ltcG9ydCBWaWV3IGZyb20gJy4vdmlldycKK2ltcG9ydCBDb250cm9s
bGVyIGZyb20gJy4vY29udHJvbGxlcicKK2ltcG9ydCBNb2RlbCBmcm9tICcuL21vZGVsJworaW1w
b3J0IFN0b3JlIGZyb20gJy4vc3RvcmUnCitpbXBvcnQgVGVtcGxhdGUgZnJvbSAnLi90ZW1wbGF0
ZScKK2ltcG9ydCB7cmVtb3ZlfSBmcm9tICcuL2hlbHBlcnMnCisKK2V4cG9ydCB7dXBkYXRlVG9k
bywgZ2V0VG9kbywgc3Vic2NyaWJlfQorCitsZXQgdG9kbworY29uc3Qgc3Vic2NyaWJlcnMgPSBb
XQorCisvKioKKyAqIFNldHMgdXAgYSBicmFuZCBuZXcgVG9kbyBsaXN0LgorICoKKyAqIEBwYXJh
bSB7c3RyaW5nfSBuYW1lIFRoZSBuYW1lIG9mIHlvdXIgbmV3IHRvIGRvIGxpc3QuCisgKi8KK2Z1
bmN0aW9uIFRvZG8obmFtZSkgeworICB0aGlzLnN0b3JhZ2UgPSBuZXcgU3RvcmUobmFtZSkKKyAg
dGhpcy5tb2RlbCA9IG5ldyBNb2RlbCh0aGlzLnN0b3JhZ2UpCisgIHRoaXMudGVtcGxhdGUgPSBu
ZXcgVGVtcGxhdGUoKQorICB0aGlzLnZpZXcgPSBuZXcgVmlldyh0aGlzLnRlbXBsYXRlKQorICB0
aGlzLmNvbnRyb2xsZXIgPSBuZXcgQ29udHJvbGxlcih0aGlzLm1vZGVsLCB0aGlzLnZpZXcpCit9
CisKK2Z1bmN0aW9uIHVwZGF0ZVRvZG8oKSB7CisgIHRvZG8gPSBuZXcgVG9kbygndG9kb3MtdmFu
aWxsYWpzJykKKyAgdG9kby5jb250cm9sbGVyLnNldFZpZXcoZG9jdW1lbnQubG9jYXRpb24uaGFz
aCkKKyAgc3Vic2NyaWJlcnMuZm9yRWFjaChzID0+IHMoKSkKK30KKworZnVuY3Rpb24gZ2V0VG9k
bygpIHsKKyAgcmV0dXJuIHRvZG8KK30KKworZnVuY3Rpb24gc3Vic2NyaWJlKGNiKSB7CisgIHN1
YnNjcmliZXJzLnB1c2goY2IpCisgIHJldHVybiBmdW5jdGlvbiB1bnN1YnNjcmliZSgpIHsKKyAg
ICByZW1vdmUoc3Vic2NyaWJlcnMsIGNiKQorICB9Cit9CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5j
ZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMy
MDE1LWJhYmVsLXdlYnBhY2svc3JjL3ZpZXcuanMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21l
dGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBh
Y2svc3JjL3ZpZXcuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzE1ZWQ1YzVkMjVlNmIwYWEwNmY3MjdmMWE3OGE3
ZDBiYTEwZmUyMQotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0
ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFj
ay9zcmMvdmlldy5qcwpAQCAtMCwwICsxLDIxNCBAQAorLyogZXNsaW50IG5vLWludmFsaWQtdGhp
czogMCwgY29tcGxleGl0eTpbMiwgOV0gKi8KK2ltcG9ydCB7cXMsIHFzYSwgJG9uLCAkcGFyZW50
LCAkZGVsZWdhdGV9IGZyb20gJy4vaGVscGVycycKKworLyoqCisgKiBWaWV3IHRoYXQgYWJzdHJh
Y3RzIGF3YXkgdGhlIGJyb3dzZXIncyBET00gY29tcGxldGVseS4KKyAqIEl0IGhhcyB0d28gc2lt
cGxlIGVudHJ5IHBvaW50czoKKyAqCisgKiAgIC0gYmluZChldmVudE5hbWUsIGhhbmRsZXIpCisg
KiAgICAgVGFrZXMgYSB0b2RvIGFwcGxpY2F0aW9uIGV2ZW50IGFuZCByZWdpc3RlcnMgdGhlIGhh
bmRsZXIKKyAqICAgLSByZW5kZXIoY29tbWFuZCwgcGFyYW1ldGVyT2JqZWN0KQorICogICAgIFJl
bmRlcnMgdGhlIGdpdmVuIGNvbW1hbmQgd2l0aCB0aGUgb3B0aW9ucworICovCitleHBvcnQgZGVm
YXVsdCBjbGFzcyBWaWV3IHsKKyAgY29uc3RydWN0b3IodGVtcGxhdGUpIHsKKyAgICB0aGlzLnRl
bXBsYXRlID0gdGVtcGxhdGUKKworICAgIHRoaXMuRU5URVJfS0VZID0gMTMKKyAgICB0aGlzLkVT
Q0FQRV9LRVkgPSAyNworCisgICAgdGhpcy4kdG9kb0xpc3QgPSBxcygnLnRvZG8tbGlzdCcpCisg
ICAgdGhpcy4kdG9kb0l0ZW1Db3VudGVyID0gcXMoJy50b2RvLWNvdW50JykKKyAgICB0aGlzLiRj
bGVhckNvbXBsZXRlZCA9IHFzKCcuY2xlYXItY29tcGxldGVkJykKKyAgICB0aGlzLiRtYWluID0g
cXMoJy5tYWluJykKKyAgICB0aGlzLiRmb290ZXIgPSBxcygnLmZvb3RlcicpCisgICAgdGhpcy4k
dG9nZ2xlQWxsID0gcXMoJy50b2dnbGUtYWxsJykKKyAgICB0aGlzLiRuZXdUb2RvID0gcXMoJy5u
ZXctdG9kbycpCisgIH0KKworICBfcmVtb3ZlSXRlbShpZCkgeworICAgIHZhciBlbGVtID0gcXMo
J1tkYXRhLWlkPSInICsgaWQgKyAnIl0nKQorCisgICAgaWYgKGVsZW0pIHsKKyAgICAgIHRoaXMu
JHRvZG9MaXN0LnJlbW92ZUNoaWxkKGVsZW0pCisgICAgfQorICB9CisKKyAgX2NsZWFyQ29tcGxl
dGVkQnV0dG9uKGNvbXBsZXRlZENvdW50LCB2aXNpYmxlKSB7CisgICAgdGhpcy4kY2xlYXJDb21w
bGV0ZWQuaW5uZXJIVE1MID0gdGhpcy50ZW1wbGF0ZS5jbGVhckNvbXBsZXRlZEJ1dHRvbihjb21w
bGV0ZWRDb3VudCkKKyAgICB0aGlzLiRjbGVhckNvbXBsZXRlZC5zdHlsZS5kaXNwbGF5ID0gdmlz
aWJsZSA/ICdibG9jaycgOiAnbm9uZScKKyAgfQorCisgIF9lZGl0SXRlbURvbmUoaWQsIHRpdGxl
KSB7CisgICAgdmFyIGxpc3RJdGVtID0gcXMoJ1tkYXRhLWlkPSInICsgaWQgKyAnIl0nKQorCisg
ICAgaWYgKCFsaXN0SXRlbSkgeworICAgICAgcmV0dXJuCisgICAgfQorCisgICAgdmFyIGlucHV0
ID0gcXMoJ2lucHV0LmVkaXQnLCBsaXN0SXRlbSkKKyAgICBsaXN0SXRlbS5yZW1vdmVDaGlsZChp
bnB1dCkKKworICAgIGxpc3RJdGVtLmNsYXNzTmFtZSA9IGxpc3RJdGVtLmNsYXNzTmFtZS5yZXBs
YWNlKCdlZGl0aW5nJywgJycpCisKKyAgICBxc2EoJ2xhYmVsJywgbGlzdEl0ZW0pLmZvckVhY2go
ZnVuY3Rpb24obGFiZWwpIHsKKyAgICAgIGxhYmVsLnRleHRDb250ZW50ID0gdGl0bGUKKyAgICB9
KQorICB9CisKKyAgcmVuZGVyKHZpZXdDbWQsIHBhcmFtZXRlcikgeworICAgIHZhciB0aGF0ID0g
dGhpcworICAgIHZhciB2aWV3Q29tbWFuZHMgPSB7CisgICAgICBzaG93RW50cmllczogZnVuY3Rp
b24oKSB7CisgICAgICAgIHRoYXQuJHRvZG9MaXN0LmlubmVySFRNTCA9IHRoYXQudGVtcGxhdGUu
c2hvdyhwYXJhbWV0ZXIpCisgICAgICB9LAorICAgICAgcmVtb3ZlSXRlbTogZnVuY3Rpb24oKSB7
CisgICAgICAgIHRoYXQuX3JlbW92ZUl0ZW0ocGFyYW1ldGVyKQorICAgICAgfSwKKyAgICAgIHVw
ZGF0ZUVsZW1lbnRDb3VudDogZnVuY3Rpb24oKSB7CisgICAgICAgIHRoYXQuJHRvZG9JdGVtQ291
bnRlci5pbm5lckhUTUwgPSB0aGF0LnRlbXBsYXRlLml0ZW1Db3VudGVyKHBhcmFtZXRlcikKKyAg
ICAgIH0sCisgICAgICBjbGVhckNvbXBsZXRlZEJ1dHRvbjogZnVuY3Rpb24oKSB7CisgICAgICAg
IHRoYXQuX2NsZWFyQ29tcGxldGVkQnV0dG9uKHBhcmFtZXRlci5jb21wbGV0ZWQsIHBhcmFtZXRl
ci52aXNpYmxlKQorICAgICAgfSwKKyAgICAgIGNvbnRlbnRCbG9ja1Zpc2liaWxpdHk6IGZ1bmN0
aW9uKCkgeworICAgICAgICB0aGF0LiRtYWluLnN0eWxlLmRpc3BsYXkgPSB0aGF0LiRmb290ZXIu
c3R5bGUuZGlzcGxheSA9IHBhcmFtZXRlci52aXNpYmxlID8gJ2Jsb2NrJyA6ICdub25lJworICAg
ICAgfSwKKyAgICAgIHRvZ2dsZUFsbDogZnVuY3Rpb24oKSB7CisgICAgICAgIHRoYXQuJHRvZ2ds
ZUFsbC5jaGVja2VkID0gcGFyYW1ldGVyLmNoZWNrZWQKKyAgICAgIH0sCisgICAgICBzZXRGaWx0
ZXI6IGZ1bmN0aW9uKCkgeworICAgICAgICBfc2V0RmlsdGVyKHBhcmFtZXRlcikKKyAgICAgIH0s
CisgICAgICBjbGVhck5ld1RvZG86IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGF0LiRuZXdUb2Rv
LnZhbHVlID0gJycKKyAgICAgIH0sCisgICAgICBlbGVtZW50Q29tcGxldGU6IGZ1bmN0aW9uKCkg
eworICAgICAgICBfZWxlbWVudENvbXBsZXRlKHBhcmFtZXRlci5pZCwgcGFyYW1ldGVyLmNvbXBs
ZXRlZCkKKyAgICAgIH0sCisgICAgICBlZGl0SXRlbTogZnVuY3Rpb24oKSB7CisgICAgICAgIF9l
ZGl0SXRlbShwYXJhbWV0ZXIuaWQsIHBhcmFtZXRlci50aXRsZSkKKyAgICAgIH0sCisgICAgICBl
ZGl0SXRlbURvbmU6IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGF0Ll9lZGl0SXRlbURvbmUocGFy
YW1ldGVyLmlkLCBwYXJhbWV0ZXIudGl0bGUpCisgICAgICB9CisgICAgfQorCisgICAgdmlld0Nv
bW1hbmRzW3ZpZXdDbWRdKCkKKyAgfQorCisgIF9iaW5kSXRlbUVkaXREb25lKGhhbmRsZXIpIHsK
KyAgICB2YXIgdGhhdCA9IHRoaXMKKyAgICAkZGVsZWdhdGUodGhhdC4kdG9kb0xpc3QsICdsaSAu
ZWRpdCcsICdibHVyJywgZnVuY3Rpb24oKSB7CisgICAgICBpZiAoIXRoaXMuZGF0YXNldC5pc2Nh
bmNlbGVkKSB7CisgICAgICAgIGhhbmRsZXIoeworICAgICAgICAgIGlkOiBfaXRlbUlkKHRoaXMp
LAorICAgICAgICAgIHRpdGxlOiB0aGlzLnZhbHVlCisgICAgICAgIH0pCisgICAgICB9CisgICAg
fSkKKworICAgICRkZWxlZ2F0ZSh0aGF0LiR0b2RvTGlzdCwgJ2xpIC5lZGl0JywgJ2tleXByZXNz
JywgZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgIGlmIChldmVudC5rZXlDb2RlID09PSB0aGF0LkVO
VEVSX0tFWSkgeworICAgICAgICAvLyBSZW1vdmUgdGhlIGN1cnNvciBmcm9tIHRoZSBpbnB1dCB3
aGVuIHlvdSBoaXQgZW50ZXIganVzdCBsaWtlIGlmIGl0CisgICAgICAgIC8vIHdlcmUgYSByZWFs
IGZvcm0KKyAgICAgICAgdGhpcy5ibHVyKCkKKyAgICAgIH0KKyAgICB9KQorICB9CisKKyAgX2Jp
bmRJdGVtRWRpdENhbmNlbChoYW5kbGVyKSB7CisgICAgdmFyIHRoYXQgPSB0aGlzCisgICAgJGRl
bGVnYXRlKHRoYXQuJHRvZG9MaXN0LCAnbGkgLmVkaXQnLCAna2V5dXAnLCBmdW5jdGlvbihldmVu
dCkgeworICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IHRoYXQuRVNDQVBFX0tFWSkgeworICAg
ICAgICB0aGlzLmRhdGFzZXQuaXNjYW5jZWxlZCA9IHRydWUKKyAgICAgICAgdGhpcy5ibHVyKCkK
KworICAgICAgICBoYW5kbGVyKHtpZDogX2l0ZW1JZCh0aGlzKX0pCisgICAgICB9CisgICAgfSkK
KyAgfQorCisgIGJpbmQoZXZlbnQsIGhhbmRsZXIpIHsKKyAgICB2YXIgdGhhdCA9IHRoaXMKKyAg
ICBpZiAoZXZlbnQgPT09ICduZXdUb2RvJykgeworICAgICAgJG9uKHRoYXQuJG5ld1RvZG8sICdj
aGFuZ2UnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgaGFuZGxlcih0aGF0LiRuZXdUb2RvLnZhbHVl
KQorICAgICAgfSkKKworICAgIH0gZWxzZSBpZiAoZXZlbnQgPT09ICdyZW1vdmVDb21wbGV0ZWQn
KSB7CisgICAgICAkb24odGhhdC4kY2xlYXJDb21wbGV0ZWQsICdjbGljaycsIGZ1bmN0aW9uKCkg
eworICAgICAgICBoYW5kbGVyKCkKKyAgICAgIH0pCisKKyAgICB9IGVsc2UgaWYgKGV2ZW50ID09
PSAndG9nZ2xlQWxsJykgeworICAgICAgJG9uKHRoYXQuJHRvZ2dsZUFsbCwgJ2NsaWNrJywgZnVu
Y3Rpb24oKSB7CisgICAgICAgIGhhbmRsZXIoe2NvbXBsZXRlZDogdGhpcy5jaGVja2VkfSkKKyAg
ICAgIH0pCisKKyAgICB9IGVsc2UgaWYgKGV2ZW50ID09PSAnaXRlbUVkaXQnKSB7CisgICAgICAk
ZGVsZWdhdGUodGhhdC4kdG9kb0xpc3QsICdsaSBsYWJlbCcsICdkYmxjbGljaycsIGZ1bmN0aW9u
KCkgeworICAgICAgICBoYW5kbGVyKHtpZDogX2l0ZW1JZCh0aGlzKX0pCisgICAgICB9KQorCisg
ICAgfSBlbHNlIGlmIChldmVudCA9PT0gJ2l0ZW1SZW1vdmUnKSB7CisgICAgICAkZGVsZWdhdGUo
dGhhdC4kdG9kb0xpc3QsICcuZGVzdHJveScsICdjbGljaycsIGZ1bmN0aW9uKCkgeworICAgICAg
ICBoYW5kbGVyKHtpZDogX2l0ZW1JZCh0aGlzKX0pCisgICAgICB9KQorCisgICAgfSBlbHNlIGlm
IChldmVudCA9PT0gJ2l0ZW1Ub2dnbGUnKSB7CisgICAgICAkZGVsZWdhdGUodGhhdC4kdG9kb0xp
c3QsICcudG9nZ2xlJywgJ2NsaWNrJywgZnVuY3Rpb24oKSB7CisgICAgICAgIGhhbmRsZXIoewor
ICAgICAgICAgIGlkOiBfaXRlbUlkKHRoaXMpLAorICAgICAgICAgIGNvbXBsZXRlZDogdGhpcy5j
aGVja2VkCisgICAgICAgIH0pCisgICAgICB9KQorCisgICAgfSBlbHNlIGlmIChldmVudCA9PT0g
J2l0ZW1FZGl0RG9uZScpIHsKKyAgICAgIHRoYXQuX2JpbmRJdGVtRWRpdERvbmUoaGFuZGxlcikK
KworICAgIH0gZWxzZSBpZiAoZXZlbnQgPT09ICdpdGVtRWRpdENhbmNlbCcpIHsKKyAgICAgIHRo
YXQuX2JpbmRJdGVtRWRpdENhbmNlbChoYW5kbGVyKQorICAgIH0KKyAgfQorfQorCitmdW5jdGlv
biBfc2V0RmlsdGVyKGN1cnJlbnRQYWdlKSB7CisgIHFzKCcuZmlsdGVycyAuc2VsZWN0ZWQnKS5j
bGFzc05hbWUgPSAnJworICBxcygnLmZpbHRlcnMgW2hyZWY9IiMvJyArIGN1cnJlbnRQYWdlICsg
JyJdJykuY2xhc3NOYW1lID0gJ3NlbGVjdGVkJworfQorCitmdW5jdGlvbiBfZWxlbWVudENvbXBs
ZXRlKGlkLCBjb21wbGV0ZWQpIHsKKyAgdmFyIGxpc3RJdGVtID0gcXMoJ1tkYXRhLWlkPSInICsg
aWQgKyAnIl0nKQorCisgIGlmICghbGlzdEl0ZW0pIHsKKyAgICByZXR1cm4KKyAgfQorCisgIGxp
c3RJdGVtLmNsYXNzTmFtZSA9IGNvbXBsZXRlZCA/ICdjb21wbGV0ZWQnIDogJycKKworICAvLyBJ
biBjYXNlIGl0IHdhcyB0b2dnbGVkIGZyb20gYW4gZXZlbnQgYW5kIG5vdCBieSBjbGlja2luZyB0
aGUgY2hlY2tib3gKKyAgcXMoJ2lucHV0JywgbGlzdEl0ZW0pLmNoZWNrZWQgPSBjb21wbGV0ZWQK
K30KKworZnVuY3Rpb24gX2VkaXRJdGVtKGlkLCB0aXRsZSkgeworICB2YXIgbGlzdEl0ZW0gPSBx
cygnW2RhdGEtaWQ9IicgKyBpZCArICciXScpCisKKyAgaWYgKCFsaXN0SXRlbSkgeworICAgIHJl
dHVybgorICB9CisKKyAgbGlzdEl0ZW0uY2xhc3NOYW1lID0gbGlzdEl0ZW0uY2xhc3NOYW1lICsg
JyBlZGl0aW5nJworCisgIHZhciBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0
JykKKyAgaW5wdXQuY2xhc3NOYW1lID0gJ2VkaXQnCisKKyAgbGlzdEl0ZW0uYXBwZW5kQ2hpbGQo
aW5wdXQpCisgIGlucHV0LmZvY3VzKCkKKyAgaW5wdXQudmFsdWUgPSB0aXRsZQorfQorCitmdW5j
dGlvbiBfaXRlbUlkKGVsZW1lbnQpIHsKKyAgdmFyIGxpID0gJHBhcmVudChlbGVtZW50LCAnbGkn
KQorICByZXR1cm4gcGFyc2VJbnQobGkuZGF0YXNldC5pZCwgMTApCit9CmRpZmYgLS1naXQgYS9Q
ZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhh
bXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svd2VicGFjay5jb25maWcuYmFiZWwuanMgYi9QZXJm
b3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBs
ZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svd2VicGFjay5jb25maWcuYmFiZWwuanMKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNGVjMzcxYmU0ZTU1YjQ0ODdkYzZlNGY5N2NiOTk5Y2ZhMGE2MzQwMwotLS0gL2Rldi9udWxs
CisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFu
aWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay93ZWJwYWNrLmNvbmZpZy5iYWJlbC5q
cwpAQCAtMCwwICsxLDYwIEBACisvKiBlc2xpbnQgbm8tY29uc29sZToib2ZmIiAqLworY29uc3Qg
e3Jlc29sdmV9ID0gcmVxdWlyZSgncGF0aCcpCitjb25zdCB3ZWJwYWNrID0gcmVxdWlyZSgnd2Vi
cGFjaycpCitjb25zdCBQcm9ncmVzc0JhclBsdWdpbiA9IHJlcXVpcmUoJ3Byb2dyZXNzLWJhci13
ZWJwYWNrLXBsdWdpbicpCitjb25zdCBIdG1sV2VicGFja1BsdWdpbiA9IHJlcXVpcmUoJ2h0bWwt
d2VicGFjay1wbHVnaW4nKQorY29uc3QgSW5saW5lTWFuaWZlc3RXZWJwYWNrUGx1Z2luID0gcmVx
dWlyZSgnaW5saW5lLW1hbmlmZXN0LXdlYnBhY2stcGx1Z2luJykKK2NvbnN0IEV4dHJhY3RUZXh0
UGx1Z2luID0gcmVxdWlyZSgnZXh0cmFjdC10ZXh0LXdlYnBhY2stcGx1Z2luJykKK2NvbnN0IHdl
YnBhY2tWYWxpZGF0b3IgPSByZXF1aXJlKCd3ZWJwYWNrLXZhbGlkYXRvcicpCitjb25zdCB7Z2V0
SWZVdGlscywgcmVtb3ZlRW1wdHl9ID0gcmVxdWlyZSgnd2VicGFjay1jb25maWctdXRpbHMnKQor
Cittb2R1bGUuZXhwb3J0cyA9IGVudiA9PiB7CisgIGNvbnN0IHtpZlByb2QsIGlmTm90UHJvZH0g
PSBnZXRJZlV0aWxzKGVudikKKyAgY29uc3QgY29uZmlnID0gd2VicGFja1ZhbGlkYXRvcih7Cisg
ICAgY29udGV4dDogcmVzb2x2ZSgnc3JjJyksCisgICAgZW50cnk6IHsKKyAgICAgIGFwcDogJy4v
Ym9vdHN0cmFwLmpzJywKKyAgICAgIHZlbmRvcjogWyd0b2RvbXZjLWFwcC1jc3MvaW5kZXguY3Nz
J10sCisgICAgfSwKKyAgICBvdXRwdXQ6IHsKKyAgICAgIGZpbGVuYW1lOiBpZlByb2QoJ2J1bmRs
ZS5bbmFtZV0uW2NodW5raGFzaF0uanMnLCAnYnVuZGxlLltuYW1lXS5qcycpLAorICAgICAgcGF0
aDogcmVzb2x2ZSgnZGlzdCcpLAorICAgICAgcGF0aGluZm86IGlmTm90UHJvZCgpLAorICAgIH0s
CisgICAgZGV2dG9vbDogaWZQcm9kKCdzb3VyY2UtbWFwJywgJ2V2YWwnKSwKKyAgICBtb2R1bGU6
IHsKKyAgICAgIGxvYWRlcnM6IFsKKyAgICAgICAge3Rlc3Q6IC9cLmpzJC8sIGxvYWRlcnM6IFsn
YmFiZWwnXSwgZXhjbHVkZTogL25vZGVfbW9kdWxlcy99LAorICAgICAgICB7CisgICAgICAgICAg
dGVzdDogL1wuY3NzJC8sCisgICAgICAgICAgbG9hZGVyOiBFeHRyYWN0VGV4dFBsdWdpbi5leHRy
YWN0KHsKKyAgICAgICAgICAgIGZhbGxiYWNrTG9hZGVyOiAnc3R5bGUnLAorICAgICAgICAgICAg
bG9hZGVyOiAnY3NzJywKKyAgICAgICAgICB9KQorICAgICAgICB9LAorICAgICAgXSwKKyAgICB9
LAorICAgIHBsdWdpbnM6IHJlbW92ZUVtcHR5KFsKKyAgICAgIG5ldyBQcm9ncmVzc0JhclBsdWdp
bigpLAorICAgICAgbmV3IEV4dHJhY3RUZXh0UGx1Z2luKGlmUHJvZCgnc3R5bGVzLltuYW1lXS5b
Y2h1bmtoYXNoXS5jc3MnLCAnc3R5bGVzLltuYW1lXS5jc3MnKSksCisgICAgICBpZlByb2QobmV3
IElubGluZU1hbmlmZXN0V2VicGFja1BsdWdpbigpKSwKKyAgICAgIGlmUHJvZChuZXcgd2VicGFj
ay5vcHRpbWl6ZS5Db21tb25zQ2h1bmtQbHVnaW4oeworICAgICAgICBuYW1lczogWyd2ZW5kb3In
LCAnbWFuaWZlc3QnXSwKKyAgICAgIH0pKSwKKyAgICAgIG5ldyBIdG1sV2VicGFja1BsdWdpbih7
CisgICAgICAgIHRlbXBsYXRlOiAnLi9pbmRleC5odG1sJywKKyAgICAgICAgaW5qZWN0OiAnaGVh
ZCcsCisgICAgICB9KSwKKyAgICAgIG5ldyB3ZWJwYWNrLkRlZmluZVBsdWdpbih7CisgICAgICAg
ICdwcm9jZXNzLmVudic6IHsKKyAgICAgICAgICBOT0RFX0VOVjogaWZQcm9kKCcicHJvZHVjdGlv
biInLCAnImRldmVsb3BtZW50IicpCisgICAgICAgIH0KKyAgICAgIH0pLAorICAgIF0pLAorICB9
KQorICBpZiAoZW52LmRlYnVnKSB7CisgICAgY29uc29sZS5sb2coY29uZmlnKQorICAgIGRlYnVn
Z2VyIC8vIGVzbGludC1kaXNhYmxlLWxpbmUKKyAgfQorICByZXR1cm4gY29uZmlnCit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>308630</attachid>
            <date>2017-04-28 17:36:57 -0700</date>
            <delta_ts>2017-05-11 19:55:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171452-20170428173657.patch</filename>
            <type>text/plain</type>
            <size>76415</size>
            <attacher name="Addy Osmani">addyo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE1OTYwCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCmluZGV4IGJmMTgxODE2ODc2
NDhkODA3YzE2NjQyOWQxM2MzMDZkMGM1NTk5NjQuLjNiYjFlZTE5MDkzNGYxYWI3OTk2NGQyMjE1
YmM5YWQ1NjJhZGYyMDggMTAwNjQ0Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCisr
KyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjE4IEBACisyMDE3LTA0
LTI4ICBBZGR5IE9zbWFuaSAgPGFkZHlvc21hbmlAZ21haWwuY29tPgorCisgICAgICAgIFNwZWVk
b21ldGVyOiBBZGQgYW4gRVMyMDE1IChCYWJlbCArIFdlYnBhY2spIFRvZG9NVkMgaW1wbGVtZW50
YXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3
MTQ1MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICBBZGRz
IEVTMjAxNSBCYWJlbCArIFdlYnBhY2sgVG9kb01WQyBpbXBsZW0KKworICAgICAgICAqIFNwZWVk
b21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdl
YnBhY2svLmJhYmVscmM6IEFkZGVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90
b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svLmVzbGludGlnbm9y
ZTogQWRkZWQuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxs
YS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9kaXN0L2J1bmRsZS5hcHAuNDIxZWI2YmFj
YTAyMjE4ZTk4NWUuanM6IEFkZGVkLgorICAgICAgICAobyk6CisgICAgICAgIChuKToKKyAgICAg
ICAgKHIpOgorICAgICAgICAobCk6CisgICAgICAgIChhKToKKyAgICAgICAgKGMpOgorICAgICAg
ICAoby5wcm90b3R5cGUuc2V0Vmlldyk6CisgICAgICAgIChvLnByb3RvdHlwZS5zaG93QWxsKToK
KyAgICAgICAgKG8ucHJvdG90eXBlLnNob3dBY3RpdmUpOgorICAgICAgICAoby5wcm90b3R5cGUu
c2hvd0NvbXBsZXRlZCk6CisgICAgICAgIChvLnByb3RvdHlwZS5hZGRJdGVtKToKKyAgICAgICAg
KG8ucHJvdG90eXBlLmVkaXRJdGVtKToKKyAgICAgICAgKG8ucHJvdG90eXBlLmVkaXRJdGVtU2F2
ZSk6CisgICAgICAgIChvLnByb3RvdHlwZS5lZGl0SXRlbUNhbmNlbCk6CisgICAgICAgIChvLnBy
b3RvdHlwZS5yZW1vdmVJdGVtKToKKyAgICAgICAgKG8ucHJvdG90eXBlLnJlbW92ZUNvbXBsZXRl
ZEl0ZW1zKToKKyAgICAgICAgKG8ucHJvdG90eXBlLnRvZ2dsZUNvbXBsZXRlKToKKyAgICAgICAg
KG8ucHJvdG90eXBlLnRvZ2dsZUFsbCk6CisgICAgICAgIChvLnByb3RvdHlwZS5fdXBkYXRlQ291
bnQpOgorICAgICAgICAoby5wcm90b3R5cGUuX2ZpbHRlcik6CisgICAgICAgIChvLnByb3RvdHlw
ZS5fdXBkYXRlRmlsdGVyU3RhdGUpOgorICAgICAgICAobi5zdHJpbmdfYXBwZWFyZWRfaGVyZS50
eXBlb2YuU3ltYm9sLnN0cmluZ19hcHBlYXJlZF9oZXJlLnR5cGVvZi5TeW1ib2wuaXRlcmF0b3Ip
OgorICAgICAgICAoby5wcm90b3R5cGUuY3JlYXRlKToKKyAgICAgICAgKG8ucHJvdG90eXBlLnJl
YWQpOgorICAgICAgICAoby5wcm90b3R5cGUudXBkYXRlKToKKyAgICAgICAgKG8ucHJvdG90eXBl
LnJlbW92ZSk6CisgICAgICAgIChvLnByb3RvdHlwZS5yZW1vdmVBbGwpOgorICAgICAgICAoby5w
cm90b3R5cGUuZ2V0Q291bnQpOgorICAgICAgICAoby5wcm90b3R5cGUuc3Vic2NyaWJlKToKKyAg
ICAgICAgKG8ucHJvdG90eXBlLl9ub3RpZnkpOgorICAgICAgICAoby5wcm90b3R5cGUuZmluZCk6
CisgICAgICAgIChvLnByb3RvdHlwZS5maW5kQWxsKToKKyAgICAgICAgKG8ucHJvdG90eXBlLnNh
dmUpOgorICAgICAgICAoby5wcm90b3R5cGUuZHJvcCk6CisgICAgICAgICogU3BlZWRvbWV0ZXIv
cmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9k
aXN0L2J1bmRsZS5tYW5pZmVzdC5iYzA0MDNjYjcwNzY4YjE0YWRkZC5qczogQWRkZWQuCisgICAg
ICAgIChyKToKKyAgICAgICAgKHdpbmRvdy53ZWJwYWNrSnNvbnApOgorICAgICAgICAoci5lKToK
KyAgICAgICAgKHIuaSk6CisgICAgICAgIChyLmQpOgorICAgICAgICAoZ2V0IHIubik6CisgICAg
ICAgIChyLm8pOgorICAgICAgICAoci5vZSk6CisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3Vy
Y2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9kaXN0L2J1
bmRsZS52ZW5kb3IuZGExYTJkNjQxMDZlYzU0ZDRmNTcuanM6IEFkZGVkLgorICAgICAgICAoMSk6
CisgICAgICAgICgxMSk6CisgICAgICAgIChyZXR1cm4ubi50b1N0cmluZyk6CisgICAgICAgIChu
LmkpOgorICAgICAgICAobi5leHBvcnRzKToKKyAgICAgICAgKDEyKToKKyAgICAgICAgKiBTcGVl
ZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13
ZWJwYWNrL2Rpc3QvaW5kZXguaHRtbDogQWRkZWQuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVz
b3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9kaXN0
L3N0eWxlcy5hcHAuNDIxZWI2YmFjYTAyMjE4ZTk4NWUuY3NzOiBBZGRlZC4KKyAgICAgICAgKC50
b2dnbGUtZ3JhcGgpOgorICAgICAgICAoLnRvZ2dsZS1ncmFwaCBzdmcpOgorICAgICAgICAoLnRv
Z2dsZS1ncmFwaCBzdmcgcGF0aCk6CisgICAgICAgICgudG9nZ2xlLWdyYXBoLmFjdGl2ZSBzdmcg
cGF0aCwudG9nZ2xlLWdyYXBoOmZvY3VzIHN2ZyBwYXRoLC50b2dnbGUtZ3JhcGg6aG92ZXIgc3Zn
IHBhdGgpOgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEt
ZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svZGlzdC9zdHlsZXMudmVuZG9yLmRhMWEyZDY0
MTA2ZWM1NGQ0ZjU3LmNzczogQWRkZWQuCisgICAgICAgIChib2R5LGJ1dHRvbixodG1sKToKKyAg
ICAgICAgKGJ1dHRvbik6CisgICAgICAgIChib2R5LGJ1dHRvbik6CisgICAgICAgIChib2R5KToK
KyAgICAgICAgKDpmb2N1cyk6CisgICAgICAgICguaGlkZGVuKToKKyAgICAgICAgKC50b2RvYXBw
KToKKyAgICAgICAgKC50b2RvYXBwIGlucHV0Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyKToK
KyAgICAgICAgKC50b2RvYXBwIGlucHV0OjotbW96LXBsYWNlaG9sZGVyKToKKyAgICAgICAgKC50
b2RvYXBwIGlucHV0OjppbnB1dC1wbGFjZWhvbGRlcik6CisgICAgICAgICgudG9kb2FwcCBoMSk6
CisgICAgICAgICguZWRpdCwubmV3LXRvZG8pOgorICAgICAgICAoLm5ldy10b2RvKToKKyAgICAg
ICAgKC5tYWluKToKKyAgICAgICAgKGxhYmVsW2Zvcj10b2dnbGUtYWxsXSk6CisgICAgICAgICgu
dG9nZ2xlLWFsbCk6CisgICAgICAgICgudG9nZ2xlLWFsbDpiZWZvcmUpOgorICAgICAgICAoLnRv
Z2dsZS1hbGw6Y2hlY2tlZDpiZWZvcmUpOgorICAgICAgICAoLnRvZG8tbGlzdCk6CisgICAgICAg
ICgudG9kby1saXN0IGxpKToKKyAgICAgICAgKC50b2RvLWxpc3QgbGk6bGFzdC1jaGlsZCk6Cisg
ICAgICAgICgudG9kby1saXN0IGxpLmVkaXRpbmcpOgorICAgICAgICAoLnRvZG8tbGlzdCBsaS5l
ZGl0aW5nIC5lZGl0KToKKyAgICAgICAgKC50b2RvLWxpc3QgbGkuZWRpdGluZyAudmlldyk6Cisg
ICAgICAgICgudG9kby1saXN0IGxpIC50b2dnbGUpOgorICAgICAgICAoLnRvZG8tbGlzdCBsaSAu
dG9nZ2xlOmFmdGVyKToKKyAgICAgICAgKC50b2RvLWxpc3QgbGkgLnRvZ2dsZTpjaGVja2VkOmFm
dGVyKToKKyAgICAgICAgKC50b2RvLWxpc3QgbGkgbGFiZWwpOgorICAgICAgICAoLnRvZG8tbGlz
dCBsaS5jb21wbGV0ZWQgbGFiZWwpOgorICAgICAgICAoLnRvZG8tbGlzdCBsaSAuZGVzdHJveSk6
CisgICAgICAgICgudG9kby1saXN0IGxpIC5kZXN0cm95OmhvdmVyKToKKyAgICAgICAgKC50b2Rv
LWxpc3QgbGkgLmRlc3Ryb3k6YWZ0ZXIpOgorICAgICAgICAoLnRvZG8tbGlzdCBsaTpob3ZlciAu
ZGVzdHJveSk6CisgICAgICAgICgudG9kby1saXN0IGxpIC5lZGl0KToKKyAgICAgICAgKC50b2Rv
LWxpc3QgbGkuZWRpdGluZzpsYXN0LWNoaWxkKToKKyAgICAgICAgKC5mb290ZXIpOgorICAgICAg
ICAoLmZvb3RlcjpiZWZvcmUpOgorICAgICAgICAoLnRvZG8tY291bnQpOgorICAgICAgICAoLnRv
ZG8tY291bnQgc3Ryb25nKToKKyAgICAgICAgKC5maWx0ZXJzKToKKyAgICAgICAgKC5maWx0ZXJz
IGxpKToKKyAgICAgICAgKC5maWx0ZXJzIGxpIGEpOgorICAgICAgICAoLmZpbHRlcnMgbGkgYTpo
b3Zlcik6CisgICAgICAgICguZmlsdGVycyBsaSBhLnNlbGVjdGVkKToKKyAgICAgICAgKC5jbGVh
ci1jb21wbGV0ZWQsaHRtbCAuY2xlYXItY29tcGxldGVkOmFjdGl2ZSk6CisgICAgICAgICguY2xl
YXItY29tcGxldGVkOmhvdmVyKToKKyAgICAgICAgKC5pbmZvKToKKyAgICAgICAgKC5pbmZvIHAp
OgorICAgICAgICAoLmluZm8gYSk6CisgICAgICAgICguaW5mbyBhOmhvdmVyKToKKyAgICAgICAg
KC50b2RvLWxpc3QgbGkgLnRvZ2dsZSwudG9nZ2xlLWFsbCk6CisgICAgICAgIChAbWVkaWEgc2Ny
ZWVuIGFuZCAoLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOjApKToKKyAgICAgICAgKEBt
ZWRpYSAobWF4LXdpZHRoOjQzMHB4KSk6CisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2Vz
L3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9wYWNrYWdlLmpz
b246IEFkZGVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3Zhbmls
bGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svc3JjL2FwcC5jc3M6IEFkZGVkLgorICAg
ICAgICAoLnRvZ2dsZS1ncmFwaCk6CisgICAgICAgICgudG9nZ2xlLWdyYXBoIHN2Zyk6CisgICAg
ICAgICgudG9nZ2xlLWdyYXBoIHN2ZyBwYXRoKToKKyAgICAgICAgKC50b2dnbGUtZ3JhcGguYWN0
aXZlIHN2ZyBwYXRoLCk6CisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMv
dmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9zcmMvYXBwLmpzOiBBZGRlZC4K
KyAgICAgICAgKGZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuZXhwb3J0Lm9uTG9hZCk6CisgICAg
ICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIw
MTUtYmFiZWwtd2VicGFjay9zcmMvYm9vdHN0cmFwLmpzOiBBZGRlZC4KKyAgICAgICAgKGZyb20u
c3RyaW5nX2FwcGVhcmVkX2hlcmUuY29uc3QucmVsb2FkaW5nLmRvY3VtZW50LnJlYWR5U3RhdGUu
c3RyaW5nX2FwcGVhcmVkX2hlcmUpOgorICAgICAgICAoYm9vdHN0cmFwKToKKyAgICAgICAgKiBT
cGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJl
bC13ZWJwYWNrL3NyYy9jb250cm9sbGVyLmpzOiBBZGRlZC4KKyAgICAgICAgKGV4cG9ydC5kZWZh
dWx0LkNvbnRyb2xsZXIuQ29udHJvbGxlcik6CisgICAgICAgIChDb250cm9sbGVyLnByb3RvdHlw
ZS5zZXRWaWV3KToKKyAgICAgICAgKENvbnRyb2xsZXIucHJvdG90eXBlLnNob3dBbGwpOgorICAg
ICAgICAoQ29udHJvbGxlci5wcm90b3R5cGUuc2hvd0FjdGl2ZSk6CisgICAgICAgIChDb250cm9s
bGVyLnByb3RvdHlwZS5zaG93Q29tcGxldGVkKToKKyAgICAgICAgKENvbnRyb2xsZXIucHJvdG90
eXBlLmFkZEl0ZW0pOgorICAgICAgICAoQ29udHJvbGxlci5wcm90b3R5cGUuZWRpdEl0ZW0pOgor
ICAgICAgICAoQ29udHJvbGxlci5wcm90b3R5cGUuZWRpdEl0ZW1TYXZlKToKKyAgICAgICAgKENv
bnRyb2xsZXIucHJvdG90eXBlLmVkaXRJdGVtQ2FuY2VsKToKKyAgICAgICAgKENvbnRyb2xsZXIu
cHJvdG90eXBlLnJlbW92ZUl0ZW0pOgorICAgICAgICAoQ29udHJvbGxlci5wcm90b3R5cGUucmVt
b3ZlQ29tcGxldGVkSXRlbXMpOgorICAgICAgICAoQ29udHJvbGxlci5wcm90b3R5cGUudG9nZ2xl
Q29tcGxldGUpOgorICAgICAgICAoQ29udHJvbGxlci5wcm90b3R5cGUudG9nZ2xlQWxsKToKKyAg
ICAgICAgKENvbnRyb2xsZXIucHJvdG90eXBlLl91cGRhdGVDb3VudCk6CisgICAgICAgIChDb250
cm9sbGVyLnByb3RvdHlwZS5fZmlsdGVyKToKKyAgICAgICAgKENvbnRyb2xsZXIucHJvdG90eXBl
Ll91cGRhdGVGaWx0ZXJTdGF0ZSk6CisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3Rv
ZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9zcmMvY29udHJvbGxl
ci50ZXN0LmpzOiBBZGRlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212
Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrL3NyYy9oZWxwZXJzLmpzOiBB
ZGRlZC4KKyAgICAgICAgKHFzKToKKyAgICAgICAgKHFzYSk6CisgICAgICAgIChvbik6CisgICAg
ICAgIChkaXNwYXRjaEV2ZW50KToKKyAgICAgICAgKGRlbGVnYXRlKToKKyAgICAgICAgKHBhcmVu
dCk6CisgICAgICAgIChyZW1vdmUpOgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90
b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svc3JjL2luZGV4Lmh0
bWw6IEFkZGVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3Zhbmls
bGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svc3JjL21vZGVsLmpzOiBBZGRlZC4KKyAg
ICAgICAgKGV4cG9ydC5kZWZhdWx0Lk1vZGVsLk1vZGVsKToKKyAgICAgICAgKE1vZGVsLnByb3Rv
dHlwZS5jcmVhdGUpOgorICAgICAgICAoTW9kZWwucHJvdG90eXBlLnJlYWQpOgorICAgICAgICAo
TW9kZWwucHJvdG90eXBlLnVwZGF0ZSk6CisgICAgICAgIChNb2RlbC5wcm90b3R5cGUucmVtb3Zl
KToKKyAgICAgICAgKE1vZGVsLnByb3RvdHlwZS5yZW1vdmVBbGwpOgorICAgICAgICAoTW9kZWwu
cHJvdG90eXBlLmdldENvdW50KToKKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9k
b212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrL3NyYy9zdG9yZS5qczog
QWRkZWQuCisgICAgICAgIChmcm9tLnN0cmluZ19hcHBlYXJlZF9oZXJlLmV4cG9ydC5kZWZhdWx0
LlN0b3JlLlN0b3JlKToKKyAgICAgICAgKFN0b3JlLnByb3RvdHlwZS5zdWJzY3JpYmUpOgorICAg
ICAgICAoU3RvcmUucHJvdG90eXBlLl9ub3RpZnkpOgorICAgICAgICAoU3RvcmUucHJvdG90eXBl
LmZpbmQpOgorICAgICAgICAoU3RvcmUucHJvdG90eXBlLmZpbmRBbGwpOgorICAgICAgICAoU3Rv
cmUucHJvdG90eXBlLnNhdmUpOgorICAgICAgICAoU3RvcmUucHJvdG90eXBlLnJlbW92ZSk6Cisg
ICAgICAgIChTdG9yZS5wcm90b3R5cGUuZHJvcCk6CisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVz
b3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9zcmMv
dGVtcGxhdGUuanM6IEFkZGVkLgorICAgICAgICAoZXNjYXBlSHRtbENoYXIpOgorICAgICAgICAo
cmVVbmVzY2FwZWRIdG1sLnJlSGFzVW5lc2NhcGVkSHRtbC5uZXcuUmVnRXhwLnJlVW5lc2NhcGVk
SHRtbC5zb3VyY2UuZXNjYXBlKToKKyAgICAgICAgKFRlbXBsYXRlLnRoaXMuZGVmYXVsdFRlbXBs
YXRlLmxpLmRhdGEuaWQuc3RyaW5nX2FwcGVhcmVkX2hlcmUuZGl2LmlucHV0KToKKyAgICAgICAg
KFRlbXBsYXRlLnRoaXMuZGVmYXVsdFRlbXBsYXRlLmxpLmRhdGEuaWQuc3RyaW5nX2FwcGVhcmVk
X2hlcmUuZGl2KToKKyAgICAgICAgKFRlbXBsYXRlLnByb3RvdHlwZS5zaG93KToKKyAgICAgICAg
KFRlbXBsYXRlLnByb3RvdHlwZS5pdGVtQ291bnRlcik6CisgICAgICAgIChUZW1wbGF0ZS5wcm90
b3R5cGUuY2xlYXJDb21wbGV0ZWRCdXR0b24pOgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291
cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svc3JjL3Rv
ZG8uanM6IEFkZGVkLgorICAgICAgICAobGV0LnRvZG8uY29uc3Quc3Vic2NyaWJlcnMpOgorICAg
ICAgICAodXBkYXRlVG9kbyk6CisgICAgICAgIChzdWJzY3JpYmUuc3Vic2NyaWJlcnMucHVzaC5y
ZXR1cm4udW5zdWJzY3JpYmUpOgorICAgICAgICAoc3Vic2NyaWJlKToKKyAgICAgICAgKiBTcGVl
ZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13
ZWJwYWNrL3NyYy92aWV3LmpzOiBBZGRlZC4KKyAgICAgICAgKGZyb20uc3RyaW5nX2FwcGVhcmVk
X2hlcmUuZXhwb3J0LmRlZmF1bHQuVmlldyk6CisgICAgICAgIChmcm9tLnN0cmluZ19hcHBlYXJl
ZF9oZXJlLmV4cG9ydC5kZWZhdWx0LlZpZXcucHJvdG90eXBlLl9yZW1vdmVJdGVtKToKKyAgICAg
ICAgKGZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuZXhwb3J0LmRlZmF1bHQuVmlldy5wcm90b3R5
cGUuX2NsZWFyQ29tcGxldGVkQnV0dG9uKToKKyAgICAgICAgKGZyb20uc3RyaW5nX2FwcGVhcmVk
X2hlcmUuZXhwb3J0LmRlZmF1bHQuVmlldy5wcm90b3R5cGUuX2VkaXRJdGVtRG9uZSk6CisgICAg
ICAgIChmcm9tLnN0cmluZ19hcHBlYXJlZF9oZXJlLmV4cG9ydC5kZWZhdWx0LlZpZXcucHJvdG90
eXBlLnJlbmRlci50aGF0LnRoaXMudmlld0NvbW1hbmRzLnNob3dFbnRyaWVzKToKKyAgICAgICAg
KGZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuZXhwb3J0LmRlZmF1bHQuVmlldy5wcm90b3R5cGUu
cmVuZGVyLnRoYXQudGhpcy52aWV3Q29tbWFuZHMucmVtb3ZlSXRlbSk6CisgICAgICAgIChmcm9t
LnN0cmluZ19hcHBlYXJlZF9oZXJlLmV4cG9ydC5kZWZhdWx0LlZpZXcucHJvdG90eXBlLnJlbmRl
ci50aGF0LnRoaXMudmlld0NvbW1hbmRzLnVwZGF0ZUVsZW1lbnRDb3VudCk6CisgICAgICAgIChm
cm9tLnN0cmluZ19hcHBlYXJlZF9oZXJlLmV4cG9ydC5kZWZhdWx0LlZpZXcucHJvdG90eXBlLnJl
bmRlci50aGF0LnRoaXMudmlld0NvbW1hbmRzLmNsZWFyQ29tcGxldGVkQnV0dG9uKToKKyAgICAg
ICAgKGZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuZXhwb3J0LmRlZmF1bHQuVmlldy5wcm90b3R5
cGUucmVuZGVyLnRoYXQudGhpcy52aWV3Q29tbWFuZHMuY29udGVudEJsb2NrVmlzaWJpbGl0eSk6
CisgICAgICAgIChmcm9tLnN0cmluZ19hcHBlYXJlZF9oZXJlLmV4cG9ydC5kZWZhdWx0LlZpZXcu
cHJvdG90eXBlLnJlbmRlci50aGF0LnRoaXMudmlld0NvbW1hbmRzLnRvZ2dsZUFsbCk6CisgICAg
ICAgIChmcm9tLnN0cmluZ19hcHBlYXJlZF9oZXJlLmV4cG9ydC5kZWZhdWx0LlZpZXcucHJvdG90
eXBlLnJlbmRlci50aGF0LnRoaXMudmlld0NvbW1hbmRzLnNldEZpbHRlcik6CisgICAgICAgIChm
cm9tLnN0cmluZ19hcHBlYXJlZF9oZXJlLmV4cG9ydC5kZWZhdWx0LlZpZXcucHJvdG90eXBlLnJl
bmRlci50aGF0LnRoaXMudmlld0NvbW1hbmRzLmNsZWFyTmV3VG9kbyk6CisgICAgICAgIChmcm9t
LnN0cmluZ19hcHBlYXJlZF9oZXJlLmV4cG9ydC5kZWZhdWx0LlZpZXcucHJvdG90eXBlLnJlbmRl
ci50aGF0LnRoaXMudmlld0NvbW1hbmRzLmVsZW1lbnRDb21wbGV0ZSk6CisgICAgICAgIChmcm9t
LnN0cmluZ19hcHBlYXJlZF9oZXJlLmV4cG9ydC5kZWZhdWx0LlZpZXcucHJvdG90eXBlLnJlbmRl
ci50aGF0LnRoaXMudmlld0NvbW1hbmRzLmVkaXRJdGVtKToKKyAgICAgICAgKGZyb20uc3RyaW5n
X2FwcGVhcmVkX2hlcmUuZXhwb3J0LmRlZmF1bHQuVmlldy5wcm90b3R5cGUucmVuZGVyLnRoYXQu
dGhpcy52aWV3Q29tbWFuZHMuZWRpdEl0ZW1Eb25lKToKKyAgICAgICAgKGZyb20uc3RyaW5nX2Fw
cGVhcmVkX2hlcmUuZXhwb3J0LmRlZmF1bHQuVmlldy5wcm90b3R5cGUucmVuZGVyKToKKyAgICAg
ICAgKGZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuZXhwb3J0LmRlZmF1bHQuVmlldy5wcm90b3R5
cGUuX2JpbmRJdGVtRWRpdERvbmUpOgorICAgICAgICAoZnJvbS5zdHJpbmdfYXBwZWFyZWRfaGVy
ZS5leHBvcnQuZGVmYXVsdC5WaWV3LnByb3RvdHlwZS5fYmluZEl0ZW1FZGl0Q2FuY2VsKToKKyAg
ICAgICAgKGZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuZXhwb3J0LmRlZmF1bHQuVmlldy5wcm90
b3R5cGUuYmluZCk6CisgICAgICAgIChfc2V0RmlsdGVyKToKKyAgICAgICAgKF9lbGVtZW50Q29t
cGxldGUpOgorICAgICAgICAoX2VkaXRJdGVtKToKKyAgICAgICAgKF9pdGVtSWQpOgorICAgICAg
ICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1
LWJhYmVsLXdlYnBhY2svd2VicGFjay5jb25maWcuYmFiZWwuanM6IEFkZGVkLgorCiAyMDE3LTA0
LTI3ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBi
YWNrIHRlc3RzIGluYWR2ZXJ0ZW50bHkgZGVsZXRlZCBpbiByMjA1MDMyLgpkaWZmIC0tZ2l0IGEv
UGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4
YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrLy5iYWJlbHJjIGIvUGVyZm9ybWFuY2VUZXN0cy9T
cGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJl
bC13ZWJwYWNrLy5iYWJlbHJjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQwYTIzMDNmYjU5Y2NhNGRjNTBmYTAwODBh
MzQ4N2IxYjRlMTYxYWEKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVk
b21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdl
YnBhY2svLmJhYmVscmMKQEAgLTAsMCArMSwxNSBAQAoreworICAicHJlc2V0cyI6IFsKKyAgICBb
ImVzMjAxNSIsIHsibW9kdWxlcyI6IGZhbHNlfV0sCisgICAgImVzMjAxNiIsCisgICAgInN0YWdl
LTIiLAorICAgICJyZWFjdCIKKyAgXSwKKyAgImVudiI6IHsKKyAgICAidGVzdCI6IHsKKyAgICAg
ICJwbHVnaW5zIjogWworICAgICAgICBbIl9fY292ZXJhZ2VfXyIsIHsiaWdub3JlIjogIiouKyh0
ZXN0fHN0dWIpLioifV0KKyAgICAgIF0KKyAgICB9CisgIH0KK30KZGlmZiAtLWdpdCBhL1BlcmZv
cm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxl
cy9lczIwMTUtYmFiZWwtd2VicGFjay8uZXNsaW50aWdub3JlIGIvUGVyZm9ybWFuY2VUZXN0cy9T
cGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJl
bC13ZWJwYWNrLy5lc2xpbnRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWY5YmZmYTUyZTE3MGE1MmJkN2I3
MWU1ZmNkYjg2YzQzM2U5NDdlNgotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMv
U3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFi
ZWwtd2VicGFjay8uZXNsaW50aWdub3JlCkBAIC0wLDAgKzEsMyBAQAorY292ZXJhZ2UvCitub2Rl
X21vZHVsZXMvCitkaXN0CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVy
L3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2sv
ZGlzdC9idW5kbGUuYXBwLjQyMWViNmJhY2EwMjIxOGU5ODVlLmpzIGIvUGVyZm9ybWFuY2VUZXN0
cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1i
YWJlbC13ZWJwYWNrL2Rpc3QvYnVuZGxlLmFwcC40MjFlYjZiYWNhMDIyMThlOTg1ZS5qcwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi44ZTE3OWYzNmRjYzU2MzY2OWNiMzZiYTRmMWNkOWIwODYwNDE5NTA3Ci0tLSAvZGV2
L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212
Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrL2Rpc3QvYnVuZGxlLmFwcC40
MjFlYjZiYWNhMDIyMThlOTg1ZS5qcwpAQCAtMCwwICsxLDIgQEAKK3dlYnBhY2tKc29ucChbMCwy
XSxbZnVuY3Rpb24odCxlLGkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBvKHQsZSl7cmV0dXJuKGV8
fGRvY3VtZW50KS5xdWVyeVNlbGVjdG9yKHQpfWZ1bmN0aW9uIG4odCxlKXtyZXR1cm4oZXx8ZG9j
dW1lbnQpLnF1ZXJ5U2VsZWN0b3JBbGwodCl9ZnVuY3Rpb24gcih0LGUsaSxvKXt0LmFkZEV2ZW50
TGlzdGVuZXIoZSxpLCEhbyl9ZnVuY3Rpb24gbCh0LGUsaSxvKXtmdW5jdGlvbiBsKGkpe3ZhciBy
PWkudGFyZ2V0LGw9bihlLHQpLGE9QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChsLHIpPj0w
O2EmJm8uY2FsbChyLGkpfXZhciBhPSJibHVyIj09PWl8fCJmb2N1cyI9PT1pO3IodCxpLGwsYSl9
ZnVuY3Rpb24gYSh0LGUpe2lmKHQucGFyZW50Tm9kZSlyZXR1cm4gdC5wYXJlbnROb2RlLnRhZ05h
bWUudG9Mb3dlckNhc2UoKT09PWUudG9Mb3dlckNhc2UoKT90LnBhcmVudE5vZGU6YSh0LnBhcmVu
dE5vZGUsZSl9ZnVuY3Rpb24gYyh0LGUpe3ZhciBpPXQuaW5kZXhPZihlKTtyZXR1cm4gaT09PS0x
P3Q6dm9pZCB0LnNwbGljZShpLDEpfWkuZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBvfSksaS5k
KGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIG59KSxpLmQoZSwiZCIsZnVuY3Rpb24oKXtyZXR1cm4g
cn0pLGkuZChlLCJjIixmdW5jdGlvbigpe3JldHVybiBsfSksaS5kKGUsImUiLGZ1bmN0aW9uKCl7
cmV0dXJuIGF9KSxpLmQoZSwiZiIsZnVuY3Rpb24oKXtyZXR1cm4gY30pLE5vZGVMaXN0LnByb3Rv
dHlwZS5mb3JFYWNoPUFycmF5LnByb3RvdHlwZS5mb3JFYWNofSwsZnVuY3Rpb24odCxlLGkpeyJ1
c2Ugc3RyaWN0IjtmdW5jdGlvbiBvKCl7aS5pKGwuYSkoKX12YXIgbj1pKDEpLHI9KGkubihuKSxp
KDkpKSxsPShpLm4ociksaSgwKSxpKDcpKTtlLmE9b30sZnVuY3Rpb24odCxlLGkpeyJ1c2Ugc3Ry
aWN0IjtmdW5jdGlvbiBvKHQsZSl7dmFyIGk9dGhpcztpLm1vZGVsPXQsaS52aWV3PWUsaS52aWV3
LmJpbmQoIm5ld1RvZG8iLGZ1bmN0aW9uKHQpe2kuYWRkSXRlbSh0KX0pLGkudmlldy5iaW5kKCJp
dGVtRWRpdCIsZnVuY3Rpb24odCl7aS5lZGl0SXRlbSh0LmlkKX0pLGkudmlldy5iaW5kKCJpdGVt
RWRpdERvbmUiLGZ1bmN0aW9uKHQpe2kuZWRpdEl0ZW1TYXZlKHQuaWQsdC50aXRsZSl9KSxpLnZp
ZXcuYmluZCgiaXRlbUVkaXRDYW5jZWwiLGZ1bmN0aW9uKHQpe2kuZWRpdEl0ZW1DYW5jZWwodC5p
ZCl9KSxpLnZpZXcuYmluZCgiaXRlbVJlbW92ZSIsZnVuY3Rpb24odCl7aS5yZW1vdmVJdGVtKHQu
aWQpfSksaS52aWV3LmJpbmQoIml0ZW1Ub2dnbGUiLGZ1bmN0aW9uKHQpe2kudG9nZ2xlQ29tcGxl
dGUodC5pZCx0LmNvbXBsZXRlZCl9KSxpLnZpZXcuYmluZCgicmVtb3ZlQ29tcGxldGVkIixmdW5j
dGlvbigpe2kucmVtb3ZlQ29tcGxldGVkSXRlbXMoKX0pLGkudmlldy5iaW5kKCJ0b2dnbGVBbGwi
LGZ1bmN0aW9uKHQpe2kudG9nZ2xlQWxsKHQuY29tcGxldGVkKX0pfWUuYT1vLG8ucHJvdG90eXBl
LnNldFZpZXc9ZnVuY3Rpb24odCl7dmFyIGU9dC5zcGxpdCgiLyIpWzFdLGk9ZXx8IiI7dGhpcy5f
dXBkYXRlRmlsdGVyU3RhdGUoaSl9LG8ucHJvdG90eXBlLnNob3dBbGw9ZnVuY3Rpb24oKXt2YXIg
dD10aGlzO3QubW9kZWwucmVhZChmdW5jdGlvbihlKXt0LnZpZXcucmVuZGVyKCJzaG93RW50cmll
cyIsZSl9KX0sby5wcm90b3R5cGUuc2hvd0FjdGl2ZT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dC5t
b2RlbC5yZWFkKHtjb21wbGV0ZWQ6ITF9LGZ1bmN0aW9uKGUpe3Qudmlldy5yZW5kZXIoInNob3dF
bnRyaWVzIixlKX0pfSxvLnByb3RvdHlwZS5zaG93Q29tcGxldGVkPWZ1bmN0aW9uKCl7dmFyIHQ9
dGhpczt0Lm1vZGVsLnJlYWQoe2NvbXBsZXRlZDohMH0sZnVuY3Rpb24oZSl7dC52aWV3LnJlbmRl
cigic2hvd0VudHJpZXMiLGUpfSl9LG8ucHJvdG90eXBlLmFkZEl0ZW09ZnVuY3Rpb24odCl7dmFy
IGU9dGhpczsiIiE9PXQudHJpbSgpJiZlLm1vZGVsLmNyZWF0ZSh0LGZ1bmN0aW9uKCl7ZS52aWV3
LnJlbmRlcigiY2xlYXJOZXdUb2RvIiksZS5fZmlsdGVyKCEwKX0pfSxvLnByb3RvdHlwZS5lZGl0
SXRlbT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2UubW9kZWwucmVhZCh0LGZ1bmN0aW9uKGkpe2Uu
dmlldy5yZW5kZXIoImVkaXRJdGVtIix7aWQ6dCx0aXRsZTppWzBdLnRpdGxlfSl9KX0sby5wcm90
b3R5cGUuZWRpdEl0ZW1TYXZlPWZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcztlLnRyaW0oKT9pLm1v
ZGVsLnVwZGF0ZSh0LHt0aXRsZTplfSxmdW5jdGlvbigpe2kudmlldy5yZW5kZXIoImVkaXRJdGVt
RG9uZSIse2lkOnQsdGl0bGU6ZX0pfSk6aS5yZW1vdmVJdGVtKHQpfSxvLnByb3RvdHlwZS5lZGl0
SXRlbUNhbmNlbD1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2UubW9kZWwucmVhZCh0LGZ1bmN0aW9u
KGkpe2Uudmlldy5yZW5kZXIoImVkaXRJdGVtRG9uZSIse2lkOnQsdGl0bGU6aVswXS50aXRsZX0p
fSl9LG8ucHJvdG90eXBlLnJlbW92ZUl0ZW09ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztlLm1vZGVs
LnJlbW92ZSh0LGZ1bmN0aW9uKCl7ZS52aWV3LnJlbmRlcigicmVtb3ZlSXRlbSIsdCl9KSxlLl9m
aWx0ZXIoKX0sby5wcm90b3R5cGUucmVtb3ZlQ29tcGxldGVkSXRlbXM9ZnVuY3Rpb24oKXt2YXIg
dD10aGlzO3QubW9kZWwucmVhZCh7Y29tcGxldGVkOiEwfSxmdW5jdGlvbihlKXtlLmZvckVhY2go
ZnVuY3Rpb24oZSl7dC5yZW1vdmVJdGVtKGUuaWQpfSl9KSx0Ll9maWx0ZXIoKX0sby5wcm90b3R5
cGUudG9nZ2xlQ29tcGxldGU9ZnVuY3Rpb24odCxlLGkpe3ZhciBvPXRoaXM7by5tb2RlbC51cGRh
dGUodCx7Y29tcGxldGVkOmV9LGZ1bmN0aW9uKCl7by52aWV3LnJlbmRlcigiZWxlbWVudENvbXBs
ZXRlIix7aWQ6dCxjb21wbGV0ZWQ6ZX0pfSksaXx8by5fZmlsdGVyKCl9LG8ucHJvdG90eXBlLnRv
Z2dsZUFsbD1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2UubW9kZWwucmVhZCh7Y29tcGxldGVkOiF0
fSxmdW5jdGlvbihpKXtpLmZvckVhY2goZnVuY3Rpb24oaSl7ZS50b2dnbGVDb21wbGV0ZShpLmlk
LHQsITApfSl9KSxlLl9maWx0ZXIoKX0sby5wcm90b3R5cGUuX3VwZGF0ZUNvdW50PWZ1bmN0aW9u
KCl7dmFyIHQ9dGhpczt0Lm1vZGVsLmdldENvdW50KGZ1bmN0aW9uKGUpe3Qudmlldy5yZW5kZXIo
InVwZGF0ZUVsZW1lbnRDb3VudCIsZS5hY3RpdmUpLHQudmlldy5yZW5kZXIoImNsZWFyQ29tcGxl
dGVkQnV0dG9uIix7Y29tcGxldGVkOmUuY29tcGxldGVkLHZpc2libGU6ZS5jb21wbGV0ZWQ+MH0p
LHQudmlldy5yZW5kZXIoInRvZ2dsZUFsbCIse2NoZWNrZWQ6ZS5jb21wbGV0ZWQ9PT1lLnRvdGFs
fSksdC52aWV3LnJlbmRlcigiY29udGVudEJsb2NrVmlzaWJpbGl0eSIse3Zpc2libGU6ZS50b3Rh
bD4wfSl9KX0sby5wcm90b3R5cGUuX2ZpbHRlcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9hY3Rp
dmVSb3V0ZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSt0aGlzLl9hY3RpdmVSb3V0ZS5zdWJzdHIo
MSk7dGhpcy5fdXBkYXRlQ291bnQoKSwodHx8IkFsbCIhPT10aGlzLl9sYXN0QWN0aXZlUm91dGV8
fHRoaXMuX2xhc3RBY3RpdmVSb3V0ZSE9PWUpJiZ0aGlzWyJzaG93IitlXSgpLHRoaXMuX2xhc3RB
Y3RpdmVSb3V0ZT1lfSxvLnByb3RvdHlwZS5fdXBkYXRlRmlsdGVyU3RhdGU9ZnVuY3Rpb24odCl7
dD10LnNwbGl0KCI/IilbMF0sdGhpcy5fYWN0aXZlUm91dGU9dCwiIj09PXQmJih0aGlzLl9hY3Rp
dmVSb3V0ZT0iQWxsIiksdGhpcy5fZmlsdGVyKCksdGhpcy52aWV3LnJlbmRlcigic2V0RmlsdGVy
Iix0KX19LGZ1bmN0aW9uKHQsZSxpKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbyh0KXt0aGlzLnN0
b3JhZ2U9dH12YXIgbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9m
IFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQp
e3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3lt
Ym9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH07ZS5hPW8sby5wcm90
b3R5cGUuY3JlYXRlPWZ1bmN0aW9uKHQsZSl7dD10fHwiIixlPWV8fGZ1bmN0aW9uKCl7fTt2YXIg
aT17dGl0bGU6dC50cmltKCksY29tcGxldGVkOiExfTt0aGlzLnN0b3JhZ2Uuc2F2ZShpLGUpfSxv
LnByb3RvdHlwZS5yZWFkPWZ1bmN0aW9uKHQsZSl7dmFyIGk9InVuZGVmaW5lZCI9PXR5cGVvZiB0
PyJ1bmRlZmluZWQiOm4odCk7cmV0dXJuIGU9ZXx8ZnVuY3Rpb24oKXt9LCJmdW5jdGlvbiI9PT1p
PyhlPXQsdGhpcy5zdG9yYWdlLmZpbmRBbGwoZSkpOnZvaWQoInN0cmluZyI9PT1pfHwibnVtYmVy
Ij09PWk/KHQ9cGFyc2VJbnQodCwxMCksdGhpcy5zdG9yYWdlLmZpbmQoe2lkOnR9LGUpKTp0aGlz
LnN0b3JhZ2UuZmluZCh0LGUpKX0sby5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHQsZSxpKXt0
aGlzLnN0b3JhZ2Uuc2F2ZShlLGksdCl9LG8ucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbih0LGUp
e3RoaXMuc3RvcmFnZS5yZW1vdmUodCxlKX0sby5wcm90b3R5cGUucmVtb3ZlQWxsPWZ1bmN0aW9u
KHQpe3RoaXMuc3RvcmFnZS5kcm9wKHQpfSxvLnByb3RvdHlwZS5nZXRDb3VudD1mdW5jdGlvbih0
KXt2YXIgZT17YWN0aXZlOjAsY29tcGxldGVkOjAsdG90YWw6MH07dGhpcy5zdG9yYWdlLmZpbmRB
bGwoZnVuY3Rpb24oaSl7aS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuY29tcGxldGVkP2UuY29tcGxl
dGVkKys6ZS5hY3RpdmUrKyxlLnRvdGFsKyt9KSx0KGUpfSl9fSxmdW5jdGlvbih0LGUsaSl7InVz
ZSBzdHJpY3QiO2Z1bmN0aW9uIG8odCxlKXtpZihlPWV8fGZ1bmN0aW9uKCl7fSx0aGlzLl9kYk5h
bWU9dCwhbG9jYWxTdG9yYWdlW3RdKXt2YXIgaT17dG9kb3M6W119O2xvY2FsU3RvcmFnZVt0XT1K
U09OLnN0cmluZ2lmeShpKX1lLmNhbGwodGhpcyxKU09OLnBhcnNlKGxvY2FsU3RvcmFnZVt0XSkp
LHRoaXMuc3Vic2NyaWJlcnM9W119dmFyIG49aSgwKTtlLmE9byxvLnByb3RvdHlwZS5zdWJzY3Jp
YmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gdGhpcy5zdWJzY3JpYmVycy5wdXNoKHQp
LGZ1bmN0aW9uKCl7cmV0dXJuIGkuaShuLmYpKGUuc3Vic2NyaWJlcnMsdCl9fSxvLnByb3RvdHlw
ZS5fbm90aWZ5PWZ1bmN0aW9uKCl7dGhpcy5zdWJzY3JpYmVycy5mb3JFYWNoKGZ1bmN0aW9uKHQp
e3JldHVybiB0KCl9KX0sby5wcm90b3R5cGUuZmluZD1mdW5jdGlvbih0LGUpe2lmKGUpe3ZhciBp
PUpTT04ucGFyc2UobG9jYWxTdG9yYWdlW3RoaXMuX2RiTmFtZV0pLnRvZG9zO2UuY2FsbCh0aGlz
LGkuZmlsdGVyKGZ1bmN0aW9uKGUpe2Zvcih2YXIgaSBpbiB0KWlmKHRbaV0hPT1lW2ldKXJldHVy
biExO3JldHVybiEwfSkpfX0sby5wcm90b3R5cGUuZmluZEFsbD1mdW5jdGlvbih0KXt0PXR8fGZ1
bmN0aW9uKCl7fSx0LmNhbGwodGhpcyxKU09OLnBhcnNlKGxvY2FsU3RvcmFnZVt0aGlzLl9kYk5h
bWVdKS50b2Rvcyl9LG8ucHJvdG90eXBlLnNhdmU9ZnVuY3Rpb24odCxlLGkpe3ZhciBvPUpTT04u
cGFyc2UobG9jYWxTdG9yYWdlW3RoaXMuX2RiTmFtZV0pLG49by50b2RvcztpZihlPWV8fGZ1bmN0
aW9uKCl7fSxpKXtmb3IodmFyIHI9MDtyPG4ubGVuZ3RoO3IrKylpZihuW3JdLmlkPT09aSl7Zm9y
KHZhciBsIGluIHQpbltyXVtsXT10W2xdO2JyZWFrfWxvY2FsU3RvcmFnZVt0aGlzLl9kYk5hbWVd
PUpTT04uc3RyaW5naWZ5KG8pLGUuY2FsbCh0aGlzLEpTT04ucGFyc2UobG9jYWxTdG9yYWdlW3Ro
aXMuX2RiTmFtZV0pLnRvZG9zKX1lbHNlIHQuaWQ9KG5ldyBEYXRlKS5nZXRUaW1lKCksbi5wdXNo
KHQpLGxvY2FsU3RvcmFnZVt0aGlzLl9kYk5hbWVdPUpTT04uc3RyaW5naWZ5KG8pLGUuY2FsbCh0
aGlzLFt0XSk7dGhpcy5fbm90aWZ5KCl9LG8ucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbih0LGUp
e2Zvcih2YXIgaT1KU09OLnBhcnNlKGxvY2FsU3RvcmFnZVt0aGlzLl9kYk5hbWVdKSxvPWkudG9k
b3Msbj0wO248by5sZW5ndGg7bisrKWlmKG9bbl0uaWQ9PT10KXtvLnNwbGljZShuLDEpO2JyZWFr
fWxvY2FsU3RvcmFnZVt0aGlzLl9kYk5hbWVdPUpTT04uc3RyaW5naWZ5KGkpLGUuY2FsbCh0aGlz
LEpTT04ucGFyc2UobG9jYWxTdG9yYWdlW3RoaXMuX2RiTmFtZV0pLnRvZG9zKSx0aGlzLl9ub3Rp
ZnkoKX0sby5wcm90b3R5cGUuZHJvcD1mdW5jdGlvbih0KXtsb2NhbFN0b3JhZ2VbdGhpcy5fZGJO
YW1lXT1KU09OLnN0cmluZ2lmeSh7dG9kb3M6W119KSx0LmNhbGwodGhpcyxKU09OLnBhcnNlKGxv
Y2FsU3RvcmFnZVt0aGlzLl9kYk5hbWVdKS50b2RvcyksdGhpcy5fbm90aWZ5KCl9fSxmdW5jdGlv
bih0LGUsaSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG8oKXt0aGlzLmRlZmF1bHRUZW1wbGF0ZT0n
XG4gICAgPGxpIGRhdGEtaWQ9Int7aWR9fSIgY2xhc3M9Int7Y29tcGxldGVkfX0iPlxuICAgICAg
PGRpdiBjbGFzcz0idmlldyI+XG4gICAgICAgIDxpbnB1dCBjbGFzcz0idG9nZ2xlIiB0eXBlPSJj
aGVja2JveCIge3tjaGVja2VkfX0gLz5cbiAgICAgICAgPGxhYmVsPnt7dGl0bGV9fTwvbGFiZWw+
XG4gICAgICAgIDxidXR0b24gY2xhc3M9ImRlc3Ryb3kiPjwvYnV0dG9uPlxuICAgICAgPC9kaXY+
XG4gICAgPC9saT5cbiAgJ31lLmE9bzt2YXIgbj17IiYiOiImYW1wOyIsIjwiOiImbHQ7IiwiPiI6
IiZndDsiLCciJzoiJnF1b3Q7IiwiJyI6IiYjeDI3OyIsImAiOiImI3g2MDsifSxyPWZ1bmN0aW9u
KHQpe3JldHVybiBuW3RdfSxsPS9bJjw+IidgXS9nLGE9bmV3IFJlZ0V4cChsLnNvdXJjZSksYz1m
dW5jdGlvbih0KXtyZXR1cm4gdCYmYS50ZXN0KHQpP3QucmVwbGFjZShsLHIpOnR9O28ucHJvdG90
eXBlLnNob3c9ZnVuY3Rpb24odCl7dmFyIGUsaSxvPSIiO2ZvcihlPTAsaT10Lmxlbmd0aDtlPGk7
ZSsrKXt2YXIgbj10aGlzLmRlZmF1bHRUZW1wbGF0ZSxyPSIiLGw9IiI7dFtlXS5jb21wbGV0ZWQm
JihyPSJjb21wbGV0ZWQiLGw9ImNoZWNrZWQiKSxuPW4ucmVwbGFjZSgie3tpZH19Iix0W2VdLmlk
KSxuPW4ucmVwbGFjZSgie3t0aXRsZX19IixjKHRbZV0udGl0bGUpKSxuPW4ucmVwbGFjZSgie3tj
b21wbGV0ZWR9fSIsciksbj1uLnJlcGxhY2UoInt7Y2hlY2tlZH19IixsKSxvKz1ufXJldHVybiBv
fSxvLnByb3RvdHlwZS5pdGVtQ291bnRlcj1mdW5jdGlvbih0KXt2YXIgZT0xPT09dD8iIjoicyI7
cmV0dXJuIjxzdHJvbmc+Iit0KyI8L3N0cm9uZz4gaXRlbSIrZSsiIGxlZnQifSxvLnByb3RvdHlw
ZS5jbGVhckNvbXBsZXRlZEJ1dHRvbj1mdW5jdGlvbih0KXtyZXR1cm4gdD4wPyJDbGVhciBjb21w
bGV0ZWQiOiIifX0sZnVuY3Rpb24odCxlLGkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBvKHQpe3Ro
aXMuc3RvcmFnZT1uZXcgYy5hKHQpLHRoaXMubW9kZWw9bmV3IGEuYSh0aGlzLnN0b3JhZ2UpLHRo
aXMudGVtcGxhdGU9bmV3IGQuYSx0aGlzLnZpZXc9bmV3IHIuYSh0aGlzLnRlbXBsYXRlKSx0aGlz
LmNvbnRyb2xsZXI9bmV3IGwuYSh0aGlzLm1vZGVsLHRoaXMudmlldyl9ZnVuY3Rpb24gbigpe3M9
bmV3IG8oInRvZG9zLXZhbmlsbGFqcyIpLHMuY29udHJvbGxlci5zZXRWaWV3KGRvY3VtZW50Lmxv
Y2F0aW9uLmhhc2gpLHUuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdCgpfSl9dmFyIHI9aSg4
KSxsPWkoMyksYT1pKDQpLGM9aSg1KSxkPWkoNik7aSgwKTtpLmQoZSwiYSIsZnVuY3Rpb24oKXty
ZXR1cm4gbn0pO3ZhciBzPXZvaWQgMCx1PVtdfSxmdW5jdGlvbih0LGUsaSl7InVzZSBzdHJpY3Qi
O2Z1bmN0aW9uIG8odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9y
KCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBuKHQpe2kuaShj
LmEpKCIuZmlsdGVycyAuc2VsZWN0ZWQiKS5jbGFzc05hbWU9IiIsaS5pKGMuYSkoJy5maWx0ZXJz
IFtocmVmPSIjLycrdCsnIl0nKS5jbGFzc05hbWU9InNlbGVjdGVkIn1mdW5jdGlvbiByKHQsZSl7
dmFyIG89aS5pKGMuYSkoJ1tkYXRhLWlkPSInK3QrJyJdJyk7byYmKG8uY2xhc3NOYW1lPWU/ImNv
bXBsZXRlZCI6IiIsaS5pKGMuYSkoImlucHV0IixvKS5jaGVja2VkPWUpfWZ1bmN0aW9uIGwodCxl
KXt2YXIgbz1pLmkoYy5hKSgnW2RhdGEtaWQ9IicrdCsnIl0nKTtpZihvKXtvLmNsYXNzTmFtZT1v
LmNsYXNzTmFtZSsiIGVkaXRpbmciO3ZhciBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0
Iik7bi5jbGFzc05hbWU9ImVkaXQiLG8uYXBwZW5kQ2hpbGQobiksbi5mb2N1cygpLG4udmFsdWU9
ZX19ZnVuY3Rpb24gYSh0KXt2YXIgZT1pLmkoYy5lKSh0LCJsaSIpO3JldHVybiBwYXJzZUludChl
LmRhdGFzZXQuaWQsMTApfXZhciBjPWkoMCksZD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXtm
b3IodmFyIGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIG89ZVtpXTtvLmVudW1lcmFibGU9by5lbnVt
ZXJhYmxlfHwhMSxvLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbyYmKG8ud3JpdGFibGU9ITAp
LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG8ua2V5LG8pfX1yZXR1cm4gZnVuY3Rpb24oZSxpLG8p
e3JldHVybiBpJiZ0KGUucHJvdG90eXBlLGkpLG8mJnQoZSxvKSxlfX0oKSxzPWZ1bmN0aW9uKCl7
ZnVuY3Rpb24gdChlKXtvKHRoaXMsdCksdGhpcy50ZW1wbGF0ZT1lLHRoaXMuRU5URVJfS0VZPTEz
LHRoaXMuRVNDQVBFX0tFWT0yNyx0aGlzLiR0b2RvTGlzdD1pLmkoYy5hKSgiLnRvZG8tbGlzdCIp
LHRoaXMuJHRvZG9JdGVtQ291bnRlcj1pLmkoYy5hKSgiLnRvZG8tY291bnQiKSx0aGlzLiRjbGVh
ckNvbXBsZXRlZD1pLmkoYy5hKSgiLmNsZWFyLWNvbXBsZXRlZCIpLHRoaXMuJG1haW49aS5pKGMu
YSkoIi5tYWluIiksdGhpcy4kZm9vdGVyPWkuaShjLmEpKCIuZm9vdGVyIiksdGhpcy4kdG9nZ2xl
QWxsPWkuaShjLmEpKCIudG9nZ2xlLWFsbCIpLHRoaXMuJG5ld1RvZG89aS5pKGMuYSkoIi5uZXct
dG9kbyIpfXJldHVybiBkKHQsW3trZXk6Il9yZW1vdmVJdGVtIix2YWx1ZTpmdW5jdGlvbih0KXt2
YXIgZT1pLmkoYy5hKSgnW2RhdGEtaWQ9IicrdCsnIl0nKTtlJiZ0aGlzLiR0b2RvTGlzdC5yZW1v
dmVDaGlsZChlKX19LHtrZXk6Il9jbGVhckNvbXBsZXRlZEJ1dHRvbiIsdmFsdWU6ZnVuY3Rpb24o
dCxlKXt0aGlzLiRjbGVhckNvbXBsZXRlZC5pbm5lckhUTUw9dGhpcy50ZW1wbGF0ZS5jbGVhckNv
bXBsZXRlZEJ1dHRvbih0KSx0aGlzLiRjbGVhckNvbXBsZXRlZC5zdHlsZS5kaXNwbGF5PWU/ImJs
b2NrIjoibm9uZSJ9fSx7a2V5OiJfZWRpdEl0ZW1Eb25lIix2YWx1ZTpmdW5jdGlvbih0LGUpe3Zh
ciBvPWkuaShjLmEpKCdbZGF0YS1pZD0iJyt0KyciXScpO2lmKG8pe3ZhciBuPWkuaShjLmEpKCJp
bnB1dC5lZGl0IixvKTtvLnJlbW92ZUNoaWxkKG4pLG8uY2xhc3NOYW1lPW8uY2xhc3NOYW1lLnJl
cGxhY2UoImVkaXRpbmciLCIiKSxpLmkoYy5iKSgibGFiZWwiLG8pLmZvckVhY2goZnVuY3Rpb24o
dCl7dC50ZXh0Q29udGVudD1lfSl9fX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbih0LGUp
e3ZhciBpPXRoaXMsbz17c2hvd0VudHJpZXM6ZnVuY3Rpb24oKXtpLiR0b2RvTGlzdC5pbm5lckhU
TUw9aS50ZW1wbGF0ZS5zaG93KGUpfSxyZW1vdmVJdGVtOmZ1bmN0aW9uKCl7aS5fcmVtb3ZlSXRl
bShlKX0sdXBkYXRlRWxlbWVudENvdW50OmZ1bmN0aW9uKCl7aS4kdG9kb0l0ZW1Db3VudGVyLmlu
bmVySFRNTD1pLnRlbXBsYXRlLml0ZW1Db3VudGVyKGUpfSxjbGVhckNvbXBsZXRlZEJ1dHRvbjpm
dW5jdGlvbigpe2kuX2NsZWFyQ29tcGxldGVkQnV0dG9uKGUuY29tcGxldGVkLGUudmlzaWJsZSl9
LGNvbnRlbnRCbG9ja1Zpc2liaWxpdHk6ZnVuY3Rpb24oKXtpLiRtYWluLnN0eWxlLmRpc3BsYXk9
aS4kZm9vdGVyLnN0eWxlLmRpc3BsYXk9ZS52aXNpYmxlPyJibG9jayI6Im5vbmUifSx0b2dnbGVB
bGw6ZnVuY3Rpb24oKXtpLiR0b2dnbGVBbGwuY2hlY2tlZD1lLmNoZWNrZWR9LHNldEZpbHRlcjpm
dW5jdGlvbigpe24oZSl9LGNsZWFyTmV3VG9kbzpmdW5jdGlvbigpe2kuJG5ld1RvZG8udmFsdWU9
IiJ9LGVsZW1lbnRDb21wbGV0ZTpmdW5jdGlvbigpe3IoZS5pZCxlLmNvbXBsZXRlZCl9LGVkaXRJ
dGVtOmZ1bmN0aW9uKCl7bChlLmlkLGUudGl0bGUpfSxlZGl0SXRlbURvbmU6ZnVuY3Rpb24oKXtp
Ll9lZGl0SXRlbURvbmUoZS5pZCxlLnRpdGxlKX19O29bdF0oKX19LHtrZXk6Il9iaW5kSXRlbUVk
aXREb25lIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzO2kuaShjLmMpKGUuJHRvZG9MaXN0
LCJsaSAuZWRpdCIsImJsdXIiLGZ1bmN0aW9uKCl7dGhpcy5kYXRhc2V0LmlzY2FuY2VsZWR8fHQo
e2lkOmEodGhpcyksdGl0bGU6dGhpcy52YWx1ZX0pfSksaS5pKGMuYykoZS4kdG9kb0xpc3QsImxp
IC5lZGl0Iiwia2V5cHJlc3MiLGZ1bmN0aW9uKHQpe3Qua2V5Q29kZT09PWUuRU5URVJfS0VZJiZ0
aGlzLmJsdXIoKX0pfX0se2tleToiX2JpbmRJdGVtRWRpdENhbmNlbCIsdmFsdWU6ZnVuY3Rpb24o
dCl7dmFyIGU9dGhpcztpLmkoYy5jKShlLiR0b2RvTGlzdCwibGkgLmVkaXQiLCJrZXl1cCIsZnVu
Y3Rpb24oaSl7aS5rZXlDb2RlPT09ZS5FU0NBUEVfS0VZJiYodGhpcy5kYXRhc2V0LmlzY2FuY2Vs
ZWQ9ITAsdGhpcy5ibHVyKCksdCh7aWQ6YSh0aGlzKX0pKX0pfX0se2tleToiYmluZCIsdmFsdWU6
ZnVuY3Rpb24odCxlKXt2YXIgbz10aGlzOyJuZXdUb2RvIj09PXQ/aS5pKGMuZCkoby4kbmV3VG9k
bywiY2hhbmdlIixmdW5jdGlvbigpe2Uoby4kbmV3VG9kby52YWx1ZSl9KToicmVtb3ZlQ29tcGxl
dGVkIj09PXQ/aS5pKGMuZCkoby4kY2xlYXJDb21wbGV0ZWQsImNsaWNrIixmdW5jdGlvbigpe2Uo
KX0pOiJ0b2dnbGVBbGwiPT09dD9pLmkoYy5kKShvLiR0b2dnbGVBbGwsImNsaWNrIixmdW5jdGlv
bigpe2Uoe2NvbXBsZXRlZDp0aGlzLmNoZWNrZWR9KX0pOiJpdGVtRWRpdCI9PT10P2kuaShjLmMp
KG8uJHRvZG9MaXN0LCJsaSBsYWJlbCIsImRibGNsaWNrIixmdW5jdGlvbigpe2Uoe2lkOmEodGhp
cyl9KX0pOiJpdGVtUmVtb3ZlIj09PXQ/aS5pKGMuYykoby4kdG9kb0xpc3QsIi5kZXN0cm95Iiwi
Y2xpY2siLGZ1bmN0aW9uKCl7ZSh7aWQ6YSh0aGlzKX0pfSk6Iml0ZW1Ub2dnbGUiPT09dD9pLmko
Yy5jKShvLiR0b2RvTGlzdCwiLnRvZ2dsZSIsImNsaWNrIixmdW5jdGlvbigpe2Uoe2lkOmEodGhp
cyksY29tcGxldGVkOnRoaXMuY2hlY2tlZH0pfSk6Iml0ZW1FZGl0RG9uZSI9PT10P28uX2JpbmRJ
dGVtRWRpdERvbmUoZSk6Iml0ZW1FZGl0Q2FuY2VsIj09PXQmJm8uX2JpbmRJdGVtRWRpdENhbmNl
bChlKX19XSksdH0oKTtlLmE9c30sZnVuY3Rpb24odCxlKXt9LGZ1bmN0aW9uKHQsZSxpKXsidXNl
IHN0cmljdCI7ZnVuY3Rpb24gbygpe2kuaShyLmQpKHdpbmRvdywibG9hZCIsbi5hKSxpLmkoci5k
KSh3aW5kb3csImhhc2hjaGFuZ2UiLG4uYSl9dmFyIG49aSgyKSxyPWkoMCk7ImNvbXBsZXRlIj09
PWRvY3VtZW50LnJlYWR5U3RhdGU7bygpfV0sWzEwXSk7CisvLyMgc291cmNlTWFwcGluZ1VSTD1i
dW5kbGUuYXBwLjQyMWViNmJhY2EwMjIxOGU5ODVlLmpzLm1hcApcIE5vIG5ld2xpbmUgYXQgZW5k
IG9mIGZpbGUKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3Vy
Y2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9kaXN0L2J1
bmRsZS5tYW5pZmVzdC5iYzA0MDNjYjcwNzY4YjE0YWRkZC5qcyBiL1BlcmZvcm1hbmNlVGVzdHMv
U3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFi
ZWwtd2VicGFjay9kaXN0L2J1bmRsZS5tYW5pZmVzdC5iYzA0MDNjYjcwNzY4YjE0YWRkZC5qcwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5iNjY3N2U1NGEzZjkwOTdlMTFhNzFmYjFlMjk5NGJjYWY4ZWIxZDgyCi0tLSAv
ZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9k
b212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrL2Rpc3QvYnVuZGxlLm1h
bmlmZXN0LmJjMDQwM2NiNzA3NjhiMTRhZGRkLmpzCkBAIC0wLDAgKzEsMiBAQAorIWZ1bmN0aW9u
KGUpe2Z1bmN0aW9uIHIobil7aWYodFtuXSlyZXR1cm4gdFtuXS5leHBvcnRzO3ZhciBvPXRbbl09
e2k6bixsOiExLGV4cG9ydHM6e319O3JldHVybiBlW25dLmNhbGwoby5leHBvcnRzLG8sby5leHBv
cnRzLHIpLG8ubD0hMCxvLmV4cG9ydHN9dmFyIG49d2luZG93LndlYnBhY2tKc29ucDt3aW5kb3cu
d2VicGFja0pzb25wPWZ1bmN0aW9uKHQsYSx1KXtmb3IodmFyIGMsaSxmLGw9MCxzPVtdO2w8dC5s
ZW5ndGg7bCsrKWk9dFtsXSxvW2ldJiZzLnB1c2gob1tpXVswXSksb1tpXT0wO2ZvcihjIGluIGEp
T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEsYykmJihlW2NdPWFbY10pO2Zv
cihuJiZuKHQsYSx1KTtzLmxlbmd0aDspcy5zaGlmdCgpKCk7aWYodSlmb3IobD0wO2w8dS5sZW5n
dGg7bCsrKWY9cihyLnM9dVtsXSk7cmV0dXJuIGZ9O3ZhciB0PXt9LG89ezI6MH07ci5lPWZ1bmN0
aW9uKGUpe2Z1bmN0aW9uIG4oKXthLm9uZXJyb3I9YS5vbmxvYWQ9bnVsbCxjbGVhclRpbWVvdXQo
dSk7dmFyIHI9b1tlXTswIT09ciYmKHImJnJbMV0obmV3IEVycm9yKCJMb2FkaW5nIGNodW5rICIr
ZSsiIGZhaWxlZC4iKSksb1tlXT12b2lkIDApfWlmKDA9PT1vW2VdKXJldHVybiBQcm9taXNlLnJl
c29sdmUoKTtpZihvW2VdKXJldHVybiBvW2VdWzJdO3ZhciB0PWRvY3VtZW50LmdldEVsZW1lbnRz
QnlUYWdOYW1lKCJoZWFkIilbMF0sYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTth
LnR5cGU9InRleHQvamF2YXNjcmlwdCIsYS5jaGFyc2V0PSJ1dGYtOCIsYS5hc3luYz0hMCxhLnRp
bWVvdXQ9MTJlNCxhLnNyYz1yLnArImJ1bmRsZS4iK2UrIi4iK3swOiI0MjFlYjZiYWNhMDIyMThl
OTg1ZSIsMToiZGExYTJkNjQxMDZlYzU0ZDRmNTcifVtlXSsiLmpzIjt2YXIgdT1zZXRUaW1lb3V0
KG4sMTJlNCk7YS5vbmVycm9yPWEub25sb2FkPW4sdC5hcHBlbmRDaGlsZChhKTt2YXIgYz1uZXcg
UHJvbWlzZShmdW5jdGlvbihyLG4pe29bZV09W3Isbl19KTtyZXR1cm4gb1tlXVsyXT1jfSxyLm09
ZSxyLmM9dCxyLmk9ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LHIuZD1mdW5jdGlvbihlLHIsbil7T2Jq
ZWN0LmRlZmluZVByb3BlcnR5KGUscix7Y29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITAsZ2V0
Om59KX0sci5uPWZ1bmN0aW9uKGUpe3ZhciBuPWUmJmUuX19lc01vZHVsZT9mdW5jdGlvbigpe3Jl
dHVybiBlWyJkZWZhdWx0Il19OmZ1bmN0aW9uKCl7cmV0dXJuIGV9O3JldHVybiByLmQobiwiYSIs
biksbn0sci5vPWZ1bmN0aW9uKGUscil7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJv
cGVydHkuY2FsbChlLHIpfSxyLnA9IiIsci5vZT1mdW5jdGlvbihlKXt0aHJvdyBjb25zb2xlLmVy
cm9yKGUpLGV9fShbXSk7CisvLyMgc291cmNlTWFwcGluZ1VSTD1idW5kbGUubWFuaWZlc3QuYmMw
NDAzY2I3MDc2OGIxNGFkZGQuanMubWFwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZm
IC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92
YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrL2Rpc3QvYnVuZGxlLnZlbmRvci5k
YTFhMmQ2NDEwNmVjNTRkNGY1Ny5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVz
b3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9kaXN0
L2J1bmRsZS52ZW5kb3IuZGExYTJkNjQxMDZlYzU0ZDRmNTcuanMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTZiY2Uy
ZmQyODVjNjUwM2YwNDIxZGJlZDJiNDdhYTQ5NzI5ZTFjYQotLS0gL2Rldi9udWxsCisrKyBiL1Bl
cmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFt
cGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9kaXN0L2J1bmRsZS52ZW5kb3IuZGExYTJkNjQxMDZl
YzU0ZDRmNTcuanMKQEAgLTAsMCArMSwyIEBACit3ZWJwYWNrSnNvbnAoWzEsMl0sezE6ZnVuY3Rp
b24obix0KXt9LDExOmZ1bmN0aW9uKG4sdCxyKXtuLmV4cG9ydHM9cigxKX0sMTI6ZnVuY3Rpb24o
bix0KXtuLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgbj1bXTtyZXR1cm4gbi50b1N0cmluZz1mdW5j
dGlvbigpe2Zvcih2YXIgbj1bXSx0PTA7dDx0aGlzLmxlbmd0aDt0Kyspe3ZhciByPXRoaXNbdF07
clsyXT9uLnB1c2goIkBtZWRpYSAiK3JbMl0rInsiK3JbMV0rIn0iKTpuLnB1c2goclsxXSl9cmV0
dXJuIG4uam9pbigiIil9LG4uaT1mdW5jdGlvbih0LHIpeyJzdHJpbmciPT10eXBlb2YgdCYmKHQ9
W1tudWxsLHQsIiJdXSk7Zm9yKHZhciBvPXt9LGk9MDtpPHRoaXMubGVuZ3RoO2krKyl7dmFyIGU9
dGhpc1tpXVswXTsibnVtYmVyIj09dHlwZW9mIGUmJihvW2VdPSEwKX1mb3IoaT0wO2k8dC5sZW5n
dGg7aSsrKXt2YXIgdT10W2ldOyJudW1iZXIiPT10eXBlb2YgdVswXSYmb1t1WzBdXXx8KHImJiF1
WzJdP3VbMl09cjpyJiYodVsyXT0iKCIrdVsyXSsiKSBhbmQgKCIrcisiKSIpLG4ucHVzaCh1KSl9
fSxufX19LFsxMV0pOworLy8jIHNvdXJjZU1hcHBpbmdVUkw9YnVuZGxlLnZlbmRvci5kYTFhMmQ2
NDEwNmVjNTRkNGY1Ny5qcy5tYXAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1n
aXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3Zhbmls
bGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svZGlzdC9pbmRleC5odG1sIGIvUGVyZm9y
bWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVz
L2VzMjAxNS1iYWJlbC13ZWJwYWNrL2Rpc3QvaW5kZXguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ZGI1MTg3
MWIxMmI4ODhjNTcyOWY5MDkwMmI4N2ZlNzAyYWNmOTYwCi0tLSAvZGV2L251bGwKKysrIGIvUGVy
Zm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1w
bGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrL2Rpc3QvaW5kZXguaHRtbApAQCAtMCwwICsxLDQ1IEBA
Cis8IWRvY3R5cGUgaHRtbD4KKzxodG1sIGxhbmc9ImVuIiBkYXRhLWZyYW1ld29yaz0iamF2YXNj
cmlwdCI+CisgIDxoZWFkPgorICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgICA8dGl0bGU+
VmFuaWxsYUpTIOKAoiBUb2RvTVZDPC90aXRsZT4KKyAgICA8c2NyaXB0PiFmdW5jdGlvbihlKXtm
dW5jdGlvbiByKG4pe2lmKHRbbl0pcmV0dXJuIHRbbl0uZXhwb3J0czt2YXIgbz10W25dPXtpOm4s
bDohMSxleHBvcnRzOnt9fTtyZXR1cm4gZVtuXS5jYWxsKG8uZXhwb3J0cyxvLG8uZXhwb3J0cyxy
KSxvLmw9ITAsby5leHBvcnRzfXZhciBuPXdpbmRvdy53ZWJwYWNrSnNvbnA7d2luZG93LndlYnBh
Y2tKc29ucD1mdW5jdGlvbih0LGEsdSl7Zm9yKHZhciBjLGksZixsPTAscz1bXTtsPHQubGVuZ3Ro
O2wrKylpPXRbbF0sb1tpXSYmcy5wdXNoKG9baV1bMF0pLG9baV09MDtmb3IoYyBpbiBhKU9iamVj
dC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhLGMpJiYoZVtjXT1hW2NdKTtmb3IobiYm
bih0LGEsdSk7cy5sZW5ndGg7KXMuc2hpZnQoKSgpO2lmKHUpZm9yKGw9MDtsPHUubGVuZ3RoO2wr
KylmPXIoci5zPXVbbF0pO3JldHVybiBmfTt2YXIgdD17fSxvPXsyOjB9O3IuZT1mdW5jdGlvbihl
KXtmdW5jdGlvbiBuKCl7YS5vbmVycm9yPWEub25sb2FkPW51bGwsY2xlYXJUaW1lb3V0KHUpO3Zh
ciByPW9bZV07MCE9PXImJihyJiZyWzFdKG5ldyBFcnJvcigiTG9hZGluZyBjaHVuayAiK2UrIiBm
YWlsZWQuIikpLG9bZV09dm9pZCAwKX1pZigwPT09b1tlXSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZl
KCk7aWYob1tlXSlyZXR1cm4gb1tlXVsyXTt2YXIgdD1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFn
TmFtZSgiaGVhZCIpWzBdLGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7YS50eXBl
PSJ0ZXh0L2phdmFzY3JpcHQiLGEuY2hhcnNldD0idXRmLTgiLGEuYXN5bmM9ITAsYS50aW1lb3V0
PTEyZTQsYS5zcmM9ci5wKyJidW5kbGUuIitlKyIuIit7MDoiNDIxZWI2YmFjYTAyMjE4ZTk4NWUi
LDE6ImRhMWEyZDY0MTA2ZWM1NGQ0ZjU3In1bZV0rIi5qcyI7dmFyIHU9c2V0VGltZW91dChuLDEy
ZTQpO2Eub25lcnJvcj1hLm9ubG9hZD1uLHQuYXBwZW5kQ2hpbGQoYSk7dmFyIGM9bmV3IFByb21p
c2UoZnVuY3Rpb24ocixuKXtvW2VdPVtyLG5dfSk7cmV0dXJuIG9bZV1bMl09Y30sci5tPWUsci5j
PXQsci5pPWZ1bmN0aW9uKGUpe3JldHVybiBlfSxyLmQ9ZnVuY3Rpb24oZSxyLG4pe09iamVjdC5k
ZWZpbmVQcm9wZXJ0eShlLHIse2NvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLGdldDpufSl9
LHIubj1mdW5jdGlvbihlKXt2YXIgbj1lJiZlLl9fZXNNb2R1bGU/ZnVuY3Rpb24oKXtyZXR1cm4g
ZVsiZGVmYXVsdCJdfTpmdW5jdGlvbigpe3JldHVybiBlfTtyZXR1cm4gci5kKG4sImEiLG4pLG59
LHIubz1mdW5jdGlvbihlLHIpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5
LmNhbGwoZSxyKX0sci5wPSIiLHIub2U9ZnVuY3Rpb24oZSl7dGhyb3cgY29uc29sZS5lcnJvcihl
KSxlfX0oW10pOworPC9zY3JpcHQ+CisgIDxsaW5rIGhyZWY9InN0eWxlcy52ZW5kb3IuZGExYTJk
NjQxMDZlYzU0ZDRmNTcuY3NzIiByZWw9InN0eWxlc2hlZXQiPjxsaW5rIGhyZWY9InN0eWxlcy5h
cHAuNDIxZWI2YmFjYTAyMjE4ZTk4NWUuY3NzIiByZWw9InN0eWxlc2hlZXQiPjxzY3JpcHQgdHlw
ZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImJ1bmRsZS52ZW5kb3IuZGExYTJkNjQxMDZlYzU0ZDRm
NTcuanMiPjwvc2NyaXB0PjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImJ1bmRs
ZS5hcHAuNDIxZWI2YmFjYTAyMjE4ZTk4NWUuanMiPjwvc2NyaXB0PjwvaGVhZD4KKyAgPGJvZHk+
CisgICAgPHNlY3Rpb24gY2xhc3M9InRvZG9hcHAiPgorICAgICAgPGhlYWRlciBjbGFzcz0iaGVh
ZGVyIj4KKyAgICAgICAgPGgxPnRvZG9zPC9oMT4KKyAgICAgICAgPGlucHV0IGNsYXNzPSJuZXct
dG9kbyIgcGxhY2Vob2xkZXI9IldoYXQgbmVlZHMgdG8gYmUgZG9uZT8iIGF1dG9mb2N1cz4KKyAg
ICAgIDwvaGVhZGVyPgorICAgICAgPHNlY3Rpb24gY2xhc3M9Im1haW4iPgorICAgICAgICA8aW5w
dXQgY2xhc3M9InRvZ2dsZS1hbGwiIHR5cGU9ImNoZWNrYm94Ij4KKyAgICAgICAgPGxhYmVsIGZv
cj0idG9nZ2xlLWFsbCI+TWFyayBhbGwgYXMgY29tcGxldGU8L2xhYmVsPgorICAgICAgICA8dWwg
Y2xhc3M9InRvZG8tbGlzdCI+PC91bD4KKyAgICAgIDwvc2VjdGlvbj4KKyAgICAgIDxmb290ZXIg
Y2xhc3M9ImZvb3RlciI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJ0b2RvLWNvdW50Ij48L3NwYW4+
CisgICAgICAgIDx1bCBjbGFzcz0iZmlsdGVycyI+CisgICAgICAgICAgPGxpPgorICAgICAgICAg
ICAgPGEgaHJlZj0iIy8iIGNsYXNzPSJzZWxlY3RlZCI+QWxsPC9hPgorICAgICAgICAgIDwvbGk+
CisgICAgICAgICAgPGxpPgorICAgICAgICAgICAgPGEgaHJlZj0iIy9hY3RpdmUiPkFjdGl2ZTwv
YT4KKyAgICAgICAgICA8L2xpPgorICAgICAgICAgIDxsaT4KKyAgICAgICAgICAgIDxhIGhyZWY9
IiMvY29tcGxldGVkIj5Db21wbGV0ZWQ8L2E+CisgICAgICAgICAgPC9saT4KKyAgICAgICAgPC91
bD4KKyAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY2xlYXItY29tcGxldGVkIj5DbGVhciBjb21wbGV0
ZWQ8L2J1dHRvbj4KKyAgICAgIDwvZm9vdGVyPgorICAgIDwvc2VjdGlvbj4KKyAgICA8Zm9vdGVy
IGNsYXNzPSJpbmZvIj4KKyAgICAgIDxwPkRvdWJsZS1jbGljayB0byBlZGl0IGEgdG9kbzwvcD4K
KyAgICAgIDxwPlNwZWVkb21ldGVyIHZlcnNpb24gYnkgPGEgaHJlZj0iaHR0cDovL3R3aXR0ZXIu
Y29tL2FkZHlvc21hbmkiPkFkZHkgT3NtYW5pPC9hPjwvcD4KKyAgICAgIDxwPkNyZWF0ZWQgYnkg
PGEgaHJlZj0iaHR0cDovL3R3aXR0ZXIuY29tL29zY2FyZ29kc29uIj5Pc2NhciBHb2Rzb248L2E+
PC9wPgorICAgICAgPHA+UmVmYWN0b3JlZCBieSA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20v
Y2J1cmdtZXIiPkNocmlzdG9waCBCdXJnbWVyPC9hPjwvcD4KKyAgICAgIDxwPlBvcnRlZCB0byBF
UzYgYnkgPGEgaHJlZj0iaHR0cHM6Ly90d2l0dGVyLmNvbS9rZW50Y2RvZGRzIj5LZW50IEMuIERv
ZGRzPC9hPjwvcD4KKyAgICAgIDxwPlBhcnQgb2YgPGEgaHJlZj0iaHR0cDovL3RvZG9tdmMuY29t
Ij5Ub2RvTVZDPC9hPjwvcD4KKyAgICA8L2Zvb3Rlcj4KKyAgPC9ib2R5PgorPC9odG1sPgpkaWZm
IC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92
YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrL2Rpc3Qvc3R5bGVzLmFwcC40MjFl
YjZiYWNhMDIyMThlOTg1ZS5jc3MgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291
cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svZGlzdC9z
dHlsZXMuYXBwLjQyMWViNmJhY2EwMjIxOGU5ODVlLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40YTZmMDQzNjRi
YmI3MDJlZDkzMmYzMmE1ZjJkZDcwYTJkYjgxZmU1Ci0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9y
bWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVz
L2VzMjAxNS1iYWJlbC13ZWJwYWNrL2Rpc3Qvc3R5bGVzLmFwcC40MjFlYjZiYWNhMDIyMThlOTg1
ZS5jc3MKQEAgLTAsMCArMSwyIEBACisudG9nZ2xlLWdyYXBoe2Zsb2F0OmxlZnQ7bWFyZ2luLWxl
ZnQ6MTZweDtjdXJzb3I6cG9pbnRlcjtwb3NpdGlvbjpyZWxhdGl2ZTt6LWluZGV4OjF9LnRvZ2ds
ZS1ncmFwaCBzdmd7aGVpZ2h0OjIwcHg7d2lkdGg6MjBweH0udG9nZ2xlLWdyYXBoIHN2ZyBwYXRo
e2ZpbGw6Izc3N30udG9nZ2xlLWdyYXBoLmFjdGl2ZSBzdmcgcGF0aCwudG9nZ2xlLWdyYXBoOmZv
Y3VzIHN2ZyBwYXRoLC50b2dnbGUtZ3JhcGg6aG92ZXIgc3ZnIHBhdGh7ZmlsbDojMDAwfQorLyoj
IHNvdXJjZU1hcHBpbmdVUkw9c3R5bGVzLmFwcC40MjFlYjZiYWNhMDIyMThlOTg1ZS5jc3MubWFw
Ki8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRl
c3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1
LWJhYmVsLXdlYnBhY2svZGlzdC9zdHlsZXMudmVuZG9yLmRhMWEyZDY0MTA2ZWM1NGQ0ZjU3LmNz
cyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxs
YS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9kaXN0L3N0eWxlcy52ZW5kb3IuZGExYTJk
NjQxMDZlYzU0ZDRmNTcuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ4N2IxNGFkMTQ1NDUzZTZkNDhmMWYzZDA5
NTI0YTNmOTg0ODZkNTAKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVk
b21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdl
YnBhY2svZGlzdC9zdHlsZXMudmVuZG9yLmRhMWEyZDY0MTA2ZWM1NGQ0ZjU3LmNzcwpAQCAtMCww
ICsxLDIgQEAKK2JvZHksYnV0dG9uLGh0bWx7bWFyZ2luOjA7cGFkZGluZzowfWJ1dHRvbntib3Jk
ZXI6MDtiYWNrZ3JvdW5kOm5vbmU7Zm9udC1zaXplOjEwMCU7dmVydGljYWwtYWxpZ246YmFzZWxp
bmU7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXdlaWdodDppbmhlcml0O2NvbG9yOmluaGVyaXQ7
LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7YXBwZWFyYW5jZTpub25lOy13ZWJraXQtZm9udC1zbW9v
dGhpbmc6YW50aWFsaWFzZWR9Ym9keSxidXR0b257LW1vei1vc3gtZm9udC1zbW9vdGhpbmc6Z3Jh
eXNjYWxlfWJvZHl7Zm9udDoxNHB4IEhlbHZldGljYSBOZXVlLEhlbHZldGljYSxBcmlhbCxzYW5z
LXNlcmlmO2xpbmUtaGVpZ2h0OjEuNGVtO2JhY2tncm91bmQ6I2Y1ZjVmNTtjb2xvcjojNGQ0ZDRk
O21pbi13aWR0aDoyMzBweDttYXgtd2lkdGg6NTUwcHg7bWFyZ2luOjAgYXV0bzstd2Via2l0LWZv
bnQtc21vb3RoaW5nOmFudGlhbGlhc2VkO2ZvbnQtd2VpZ2h0OjMwMH06Zm9jdXN7b3V0bGluZTow
fS5oaWRkZW57ZGlzcGxheTpub25lfS50b2RvYXBwe2JhY2tncm91bmQ6I2ZmZjttYXJnaW46MTMw
cHggMCA0MHB4O3Bvc2l0aW9uOnJlbGF0aXZlO2JveC1zaGFkb3c6MCAycHggNHB4IDAgcmdiYSgw
LDAsMCwuMiksMCAyNXB4IDUwcHggMCByZ2JhKDAsMCwwLC4xKX0udG9kb2FwcCBpbnB1dDo6LXdl
YmtpdC1pbnB1dC1wbGFjZWhvbGRlcntmb250LXN0eWxlOml0YWxpYztmb250LXdlaWdodDozMDA7
Y29sb3I6I2U2ZTZlNn0udG9kb2FwcCBpbnB1dDo6LW1vei1wbGFjZWhvbGRlcntmb250LXN0eWxl
Oml0YWxpYztmb250LXdlaWdodDozMDA7Y29sb3I6I2U2ZTZlNn0udG9kb2FwcCBpbnB1dDo6aW5w
dXQtcGxhY2Vob2xkZXJ7Zm9udC1zdHlsZTppdGFsaWM7Zm9udC13ZWlnaHQ6MzAwO2NvbG9yOiNl
NmU2ZTZ9LnRvZG9hcHAgaDF7cG9zaXRpb246YWJzb2x1dGU7dG9wOi0xNTVweDt3aWR0aDoxMDAl
O2ZvbnQtc2l6ZToxMDBweDtmb250LXdlaWdodDoxMDA7dGV4dC1hbGlnbjpjZW50ZXI7Y29sb3I6
cmdiYSgxNzUsNDcsNDcsLjE1KTstd2Via2l0LXRleHQtcmVuZGVyaW5nOm9wdGltaXplTGVnaWJp
bGl0eTstbW96LXRleHQtcmVuZGVyaW5nOm9wdGltaXplTGVnaWJpbGl0eTt0ZXh0LXJlbmRlcmlu
ZzpvcHRpbWl6ZUxlZ2liaWxpdHl9LmVkaXQsLm5ldy10b2Rve3Bvc2l0aW9uOnJlbGF0aXZlO21h
cmdpbjowO3dpZHRoOjEwMCU7Zm9udC1zaXplOjI0cHg7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250
LXdlaWdodDppbmhlcml0O2xpbmUtaGVpZ2h0OjEuNGVtO2JvcmRlcjowO2NvbG9yOmluaGVyaXQ7
cGFkZGluZzo2cHg7Ym9yZGVyOjFweCBzb2xpZCAjOTk5O2JveC1zaGFkb3c6aW5zZXQgMCAtMXB4
IDVweCAwIHJnYmEoMCwwLDAsLjIpO2JveC1zaXppbmc6Ym9yZGVyLWJveDstd2Via2l0LWZvbnQt
c21vb3RoaW5nOmFudGlhbGlhc2VkOy1tb3otb3N4LWZvbnQtc21vb3RoaW5nOmdyYXlzY2FsZX0u
bmV3LXRvZG97cGFkZGluZzoxNnB4IDE2cHggMTZweCA2MHB4O2JvcmRlcjpub25lO2JhY2tncm91
bmQ6cmdiYSgwLDAsMCwuMDAzKTtib3gtc2hhZG93Omluc2V0IDAgLTJweCAxcHggcmdiYSgwLDAs
MCwuMDMpfS5tYWlue3Bvc2l0aW9uOnJlbGF0aXZlO3otaW5kZXg6Mjtib3JkZXItdG9wOjFweCBz
b2xpZCAjZTZlNmU2fWxhYmVsW2Zvcj10b2dnbGUtYWxsXXtkaXNwbGF5Om5vbmV9LnRvZ2dsZS1h
bGx7cG9zaXRpb246YWJzb2x1dGU7dG9wOi01NXB4O2xlZnQ6LTEycHg7d2lkdGg6NjBweDtoZWln
aHQ6MzRweDt0ZXh0LWFsaWduOmNlbnRlcjtib3JkZXI6bm9uZX0udG9nZ2xlLWFsbDpiZWZvcmV7
Y29udGVudDonXDI3NkYnO2ZvbnQtc2l6ZToyMnB4O2NvbG9yOiNlNmU2ZTY7cGFkZGluZzoxMHB4
IDI3cHh9LnRvZ2dsZS1hbGw6Y2hlY2tlZDpiZWZvcmV7Y29sb3I6IzczNzM3M30udG9kby1saXN0
e21hcmdpbjowO3BhZGRpbmc6MDtsaXN0LXN0eWxlOm5vbmV9LnRvZG8tbGlzdCBsaXtwb3NpdGlv
bjpyZWxhdGl2ZTtmb250LXNpemU6MjRweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWRlZGVk
fS50b2RvLWxpc3QgbGk6bGFzdC1jaGlsZHtib3JkZXItYm90dG9tOm5vbmV9LnRvZG8tbGlzdCBs
aS5lZGl0aW5ne2JvcmRlci1ib3R0b206bm9uZTtwYWRkaW5nOjB9LnRvZG8tbGlzdCBsaS5lZGl0
aW5nIC5lZGl0e2Rpc3BsYXk6YmxvY2s7d2lkdGg6NTA2cHg7cGFkZGluZzoxMnB4IDE2cHg7bWFy
Z2luOjAgMCAwIDQzcHh9LnRvZG8tbGlzdCBsaS5lZGl0aW5nIC52aWV3e2Rpc3BsYXk6bm9uZX0u
dG9kby1saXN0IGxpIC50b2dnbGV7dGV4dC1hbGlnbjpjZW50ZXI7d2lkdGg6NDBweDtoZWlnaHQ6
YXV0bztwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDttYXJnaW46YXV0byAwO2JvcmRl
cjpub25lOy13ZWJraXQtYXBwZWFyYW5jZTpub25lO2FwcGVhcmFuY2U6bm9uZX0udG9kby1saXN0
IGxpIC50b2dnbGU6YWZ0ZXJ7Y29udGVudDp1cmwoJ2RhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxz
dmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iNDAiIGhlaWdodD0i
NDAiIHZpZXdCb3g9Ii0xMCAtMTggMTAwIDEzNSI+PGNpcmNsZSBjeD0iNTAiIGN5PSI1MCIgcj0i
NTAiIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2VkZWRlZCIgc3Ryb2tlLXdpZHRoPSIzIi8+PC9zdmc+
Jyl9LnRvZG8tbGlzdCBsaSAudG9nZ2xlOmNoZWNrZWQ6YWZ0ZXJ7Y29udGVudDp1cmwoJ2RhdGE6
aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3Zn
IiB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9Ii0xMCAtMTggMTAwIDEzNSI+PGNpcmNs
ZSBjeD0iNTAiIGN5PSI1MCIgcj0iNTAiIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2JkZGFkNSIgc3Ry
b2tlLXdpZHRoPSIzIi8+PHBhdGggZmlsbD0iIzVkYzJhZiIgZD0iTTcyIDI1TDQyIDcxIDI3IDU2
bC00IDQgMjAgMjAgMzQtNTJ6Ii8+PC9zdmc+Jyl9LnRvZG8tbGlzdCBsaSBsYWJlbHt3b3JkLWJy
ZWFrOmJyZWFrLWFsbDtwYWRkaW5nOjE1cHggNjBweCAxNXB4IDE1cHg7bWFyZ2luLWxlZnQ6NDVw
eDtkaXNwbGF5OmJsb2NrO2xpbmUtaGVpZ2h0OjEuMjt0cmFuc2l0aW9uOmNvbG9yIC40c30udG9k
by1saXN0IGxpLmNvbXBsZXRlZCBsYWJlbHtjb2xvcjojZDlkOWQ5O3RleHQtZGVjb3JhdGlvbjps
aW5lLXRocm91Z2h9LnRvZG8tbGlzdCBsaSAuZGVzdHJveXtkaXNwbGF5Om5vbmU7cG9zaXRpb246
YWJzb2x1dGU7dG9wOjA7cmlnaHQ6MTBweDtib3R0b206MDt3aWR0aDo0MHB4O2hlaWdodDo0MHB4
O21hcmdpbjphdXRvIDA7Zm9udC1zaXplOjMwcHg7Y29sb3I6I2NjOWE5YTttYXJnaW4tYm90dG9t
OjExcHg7dHJhbnNpdGlvbjpjb2xvciAuMnMgZWFzZS1vdXR9LnRvZG8tbGlzdCBsaSAuZGVzdHJv
eTpob3Zlcntjb2xvcjojYWY1YjVlfS50b2RvLWxpc3QgbGkgLmRlc3Ryb3k6YWZ0ZXJ7Y29udGVu
dDonXEQ3J30udG9kby1saXN0IGxpOmhvdmVyIC5kZXN0cm95e2Rpc3BsYXk6YmxvY2t9LnRvZG8t
bGlzdCBsaSAuZWRpdHtkaXNwbGF5Om5vbmV9LnRvZG8tbGlzdCBsaS5lZGl0aW5nOmxhc3QtY2hp
bGR7bWFyZ2luLWJvdHRvbTotMXB4fS5mb290ZXJ7Y29sb3I6Izc3NztwYWRkaW5nOjEwcHggMTVw
eDtoZWlnaHQ6MjBweDt0ZXh0LWFsaWduOmNlbnRlcjtib3JkZXItdG9wOjFweCBzb2xpZCAjZTZl
NmU2fS5mb290ZXI6YmVmb3Jle2NvbnRlbnQ6Jyc7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDti
b3R0b206MDtsZWZ0OjA7aGVpZ2h0OjUwcHg7b3ZlcmZsb3c6aGlkZGVuO2JveC1zaGFkb3c6MCAx
cHggMXB4IHJnYmEoMCwwLDAsLjIpLDAgOHB4IDAgLTNweCAjZjZmNmY2LDAgOXB4IDFweCAtM3B4
IHJnYmEoMCwwLDAsLjIpLDAgMTZweCAwIC02cHggI2Y2ZjZmNiwwIDE3cHggMnB4IC02cHggcmdi
YSgwLDAsMCwuMil9LnRvZG8tY291bnR7ZmxvYXQ6bGVmdDt0ZXh0LWFsaWduOmxlZnR9LnRvZG8t
Y291bnQgc3Ryb25ne2ZvbnQtd2VpZ2h0OjMwMH0uZmlsdGVyc3ttYXJnaW46MDtwYWRkaW5nOjA7
bGlzdC1zdHlsZTpub25lO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7bGVmdDowfS5maWx0ZXJz
IGxpe2Rpc3BsYXk6aW5saW5lfS5maWx0ZXJzIGxpIGF7Y29sb3I6aW5oZXJpdDttYXJnaW46M3B4
O3BhZGRpbmc6M3B4IDdweDt0ZXh0LWRlY29yYXRpb246bm9uZTtib3JkZXI6MXB4IHNvbGlkIHRy
YW5zcGFyZW50O2JvcmRlci1yYWRpdXM6M3B4fS5maWx0ZXJzIGxpIGE6aG92ZXJ7Ym9yZGVyLWNv
bG9yOnJnYmEoMTc1LDQ3LDQ3LC4xKX0uZmlsdGVycyBsaSBhLnNlbGVjdGVke2JvcmRlci1jb2xv
cjpyZ2JhKDE3NSw0Nyw0NywuMil9LmNsZWFyLWNvbXBsZXRlZCxodG1sIC5jbGVhci1jb21wbGV0
ZWQ6YWN0aXZle2Zsb2F0OnJpZ2h0O3Bvc2l0aW9uOnJlbGF0aXZlO2xpbmUtaGVpZ2h0OjIwcHg7
dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y3Vyc29yOnBvaW50ZXJ9LmNsZWFyLWNvbXBsZXRlZDpob3Zl
cnt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lfS5pbmZve21hcmdpbjo2NXB4IGF1dG8gMDtjb2xv
cjojYmZiZmJmO2ZvbnQtc2l6ZToxMHB4O3RleHQtc2hhZG93OjAgMXB4IDAgaHNsYSgwLDAlLDEw
MCUsLjUpO3RleHQtYWxpZ246Y2VudGVyfS5pbmZvIHB7bGluZS1oZWlnaHQ6MX0uaW5mbyBhe2Nv
bG9yOmluaGVyaXQ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Zm9udC13ZWlnaHQ6NDAwfS5pbmZvIGE6
aG92ZXJ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZX1AbWVkaWEgc2NyZWVuIGFuZCAoLXdlYmtp
dC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOjApey50b2RvLWxpc3QgbGkgLnRvZ2dsZSwudG9nZ2xl
LWFsbHtiYWNrZ3JvdW5kOm5vbmV9LnRvZG8tbGlzdCBsaSAudG9nZ2xle2hlaWdodDo0MHB4fS50
b2dnbGUtYWxsey13ZWJraXQtdHJhbnNmb3JtOnJvdGF0ZSg5MGRlZyk7dHJhbnNmb3JtOnJvdGF0
ZSg5MGRlZyk7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7YXBwZWFyYW5jZTpub25lfX1AbWVkaWEg
KG1heC13aWR0aDo0MzBweCl7LmZvb3RlcntoZWlnaHQ6NTBweH0uZmlsdGVyc3tib3R0b206MTBw
eH19CisvKiMgc291cmNlTWFwcGluZ1VSTD1zdHlsZXMudmVuZG9yLmRhMWEyZDY0MTA2ZWM1NGQ0
ZjU3LmNzcy5tYXAqLwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1Bl
cmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFt
cGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9wYWNrYWdlLmpzb24gYi9QZXJmb3JtYW5jZVRlc3Rz
L1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJh
YmVsLXdlYnBhY2svcGFja2FnZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg2ZjdiYmI5NzVlNTgwY2ExZjIz
NTVkNDAzMTgzN2VlYjNmYjI2YTEKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3Rz
L1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJh
YmVsLXdlYnBhY2svcGFja2FnZS5qc29uCkBAIC0wLDAgKzEsNzUgQEAKK3sKKyAgInByaXZhdGUi
OiB0cnVlLAorICAiZGVwZW5kZW5jaWVzIjogeworICAgICJkMyI6ICIzLjUuMTciLAorICAgICJs
b2Rhc2giOiAiNC4xNC4xIiwKKyAgICAicmQzIjogIjAuNy4wIiwKKyAgICAicmVhY3QiOiAiMTUu
My4wIiwKKyAgICAicmVhY3QtZG9tIjogIjE1LjMuMCIsCisgICAgInRvZG9tdmMtYXBwLWNzcyI6
ICIyLjAuNiIKKyAgfSwKKyAgImRldkRlcGVuZGVuY2llcyI6IHsKKyAgICAiYmFiZWwtY29yZSI6
ICI2LjEzLjIiLAorICAgICJiYWJlbC1sb2FkZXIiOiAiNi4yLjQiLAorICAgICJiYWJlbC1wbHVn
aW4tX19jb3ZlcmFnZV9fIjogIjExLjAuMCIsCisgICAgImJhYmVsLXByZXNldC1lczIwMTUiOiAi
Ni4xMy4yIiwKKyAgICAiYmFiZWwtcHJlc2V0LWVzMjAxNiI6ICI2LjExLjMiLAorICAgICJiYWJl
bC1wcmVzZXQtcmVhY3QiOiAiNi4xMS4xIiwKKyAgICAiYmFiZWwtcHJlc2V0LXN0YWdlLTIiOiAi
Ni4xMy4wIiwKKyAgICAiY2hhaSI6ICIzLjUuMCIsCisgICAgImNweS1jbGkiOiAiMS4wLjEiLAor
ICAgICJjc3MtbG9hZGVyIjogIjAuMjMuMSIsCisgICAgImVzbGludCI6ICIzLjIuMiIsCisgICAg
ImVzbGludC1jb25maWcta2VudGNkb2RkcyI6ICJeOS4wLjAiLAorICAgICJleHRyYWN0LXRleHQt
d2VicGFjay1wbHVnaW4iOiAiMi4wLjAtYmV0YS4zIiwKKyAgICAiZ2hvb2tzIjogIjEuMy4yIiwK
KyAgICAiaHRtbC13ZWJwYWNrLXBsdWdpbiI6ICIyLjIyLjAiLAorICAgICJodHRwLXNlcnZlciI6
ICIwLjkuMCIsCisgICAgImlubGluZS1tYW5pZmVzdC13ZWJwYWNrLXBsdWdpbiI6ICIzLjAuMSIs
CisgICAgImthcm1hIjogIjEuMS4yIiwKKyAgICAia2FybWEtY2hhaSI6ICIwLjEuMCIsCisgICAg
Imthcm1hLWNocm9tZS1sYXVuY2hlciI6ICIxLjAuMSIsCisgICAgImthcm1hLWNvdmVyYWdlIjog
IjEuMS4xIiwKKyAgICAia2FybWEtbW9jaGEiOiAiMS4xLjEiLAorICAgICJrYXJtYS13ZWJwYWNr
IjogIjEuNy4wIiwKKyAgICAibW9jaGEiOiAiMy4wLjEiLAorICAgICJucG0tcnVuLWFsbCI6ICIy
LjMuMCIsCisgICAgIm9wdC1jbGkiOiAiMS41LjEiLAorICAgICJwcm9ncmVzcy1iYXItd2VicGFj
ay1wbHVnaW4iOiAiMS45LjAiLAorICAgICJyaW1yYWYiOiAiMi41LjQiLAorICAgICJzdHlsZS1s
b2FkZXIiOiAiMC4xMy4xIiwKKyAgICAic3VyZ2UiOiAiMC4xOC4wIiwKKyAgICAid2VicGFjayI6
ICIyLjEuMC1iZXRhLjIwIiwKKyAgICAid2VicGFjay1jb25maWctdXRpbHMiOiAiMi4wLjAiLAor
ICAgICJ3ZWJwYWNrLWRldi1zZXJ2ZXIiOiAiMi4xLjAtYmV0YS4wIiwKKyAgICAid2VicGFjay12
YWxpZGF0b3IiOiAiMi4yLjciCisgIH0sCisgICJjb25maWciOiB7CisgICAgImdob29rcyI6IHsK
KyAgICAgICJwcmUtY29tbWl0IjogIm9wdCAtLWluIHByZS1jb21taXQgLS1leGVjIFwibnBtIHJ1
biB2YWxpZGF0ZVwiIgorICAgIH0KKyAgfSwKKyAgInNjcmlwdHMiOiB7CisgICAgInByZWRlcGxv
eSI6ICJucG0gcnVuIGJ1aWxkIiwKKyAgICAiZGVwbG95IjogIi4vc2NyaXB0cy9kZXBsb3kiLAor
ICAgICJwcmVidWlsZCI6ICJyaW1yYWYgZGlzdCIsCisgICAgImJ1aWxkIjogIndlYnBhY2sgLS1l
bnYucHJvZCAtcCIsCisgICAgInBvc3RidWlsZCI6ICJjcHkgZmF2aWNvbi5pY28gZGlzdCIsCisg
ICAgInByZWJ1aWxkOmRldiI6ICJyaW1yYWYgZGlzdCIsCisgICAgImJ1aWxkOmRldiI6ICJ3ZWJw
YWNrIC0tZW52LmRldiIsCisgICAgInBvc3RidWlsZDpkZXYiOiAiY3B5IGZhdmljb24uaWNvIGRp
c3QiLAorICAgICJzdGFydCI6ICJodHRwLXNlcnZlciBkaXN0IiwKKyAgICAiZGV2IjogIndlYnBh
Y2stZGV2LXNlcnZlciAtLWVudi5kZXYgLS1ob3QiLAorICAgICJkZWJ1ZyI6ICJub2RlLW5pZ2h0
bHkgLS1pbnNwZWN0IC0tZGVidWctYnJrIG5vZGVfbW9kdWxlcy8uYmluL3dlYnBhY2sgLS1lbnYu
ZGVidWciLAorICAgICJkZWJ1ZzpkZXYiOiAibnBtIHJ1biBkZWJ1ZyAtLSAtLWVudi5kZXYiLAor
ICAgICJkZWJ1Zzpwcm9kIjogIm5wbSBydW4gZGVidWcgLS0gLS1lbnYucHJvZCIsCisgICAgInRl
c3QiOiAia2FybWEgc3RhcnQiLAorICAgICJ3YXRjaDp0ZXN0IjogIm5wbSB0ZXN0IC0tIC0tYXV0
by13YXRjaCAtLW5vLXNpbmdsZS1ydW4iLAorICAgICJ2YWxpZGF0ZSI6ICJucG0tcnVuLWFsbCAt
LXBhcmFsbGVsIGxpbnQgYnVpbGQgdGVzdCIsCisgICAgImxpbnQiOiAiZXNsaW50IC4iLAorICAg
ICJzZXR1cCI6ICJucG0gaW5zdGFsbCAmJiBucG0gcnVuIHZhbGlkYXRlIiwKKyAgICAic2V0dXA6
ZmVtIjogImdpdCBjaGVja291dCBGRU0vMDcuMS1kZXBsb3ktc3VyZ2UgJiYgbnBtIGluc3RhbGwg
JiYgbnBtIHJ1biB2YWxpZGF0ZSAmJiByaW1yYWYgZGlzdCBjb3ZlcmFnZSAmJiBnaXQgY2hlY2tv
dXQgRkVNLzAwLW9yaWdpbmFsLXByb2plY3QiLAorICAgICJzZXR1cDp3b3Jrc2hvcCI6ICJnaXQg
Y2hlY2tvdXQgd29ya3Nob3AvMDctY292ZXJhZ2UgJiYgbnBtIGluc3RhbGwgJiYgbnBtIHJ1biB2
YWxpZGF0ZSAmJiByaW1yYWYgZGlzdCBjb3ZlcmFnZSAmJiBnaXQgY2hlY2tvdXQgd29ya3Nob3Av
MDAtb3JpZ2luYWwtcHJvamVjdCIsCisgICAgInNldHVwOmVnZ2hlYWQiOiAiZ2l0IGNoZWNrb3V0
IHByZWxlc3Nvbi9wb2x5ZmlsbC1wcm9taXNlcyAmJiBucG0gaW5zdGFsbCAmJiBta2RpciBkaXN0
ICYmIG5wbSBydW4gdmFsaWRhdGUiCisgIH0KK30KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVz
dHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUt
YmFiZWwtd2VicGFjay9zcmMvYXBwLmNzcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIv
cmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9z
cmMvYXBwLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41MjdhNThmNzFmMzlmZjAxZjBhNTI2OTcyOTIzZjFkMWUw
ZmNkMTFiCi0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9y
ZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrL3Ny
Yy9hcHAuY3NzCkBAIC0wLDAgKzEsMjAgQEAKKy50b2dnbGUtZ3JhcGggeworICBmbG9hdDogbGVm
dDsKKyAgbWFyZ2luLWxlZnQ6IDE2cHg7CisgIGN1cnNvcjogcG9pbnRlcjsKKyAgcG9zaXRpb246
IHJlbGF0aXZlOworICB6LWluZGV4OiAxOworfQorLnRvZ2dsZS1ncmFwaCBzdmcgeworICBoZWln
aHQ6IDIwcHg7CisgIHdpZHRoOiAyMHB4OworfQorLnRvZ2dsZS1ncmFwaCBzdmcgcGF0aCB7Cisg
IGZpbGw6ICM3Nzc7Cit9CisKKy50b2dnbGUtZ3JhcGguYWN0aXZlIHN2ZyBwYXRoLAorLnRvZ2ds
ZS1ncmFwaDpob3ZlciBzdmcgcGF0aCwKKy50b2dnbGUtZ3JhcGg6Zm9jdXMgc3ZnIHBhdGggewor
ICBmaWxsOiBibGFjazsKK30KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0
ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFj
ay9zcmMvYXBwLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9k
b212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrL3NyYy9hcHAuanMKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uYjdlMDJmZGU5MDIzNTU2YzA1M2E5Yjk2MDgyMGM5ZTNjZmRlNjBmNwotLS0gL2Rl
di9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9t
dmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9zcmMvYXBwLmpzCkBAIC0w
LDAgKzEsOSBAQAoraW1wb3J0ICd0b2RvbXZjLWFwcC1jc3MvaW5kZXguY3NzJworaW1wb3J0ICcu
L2FwcC5jc3MnCisKK2ltcG9ydCB7JG9ufSBmcm9tICcuL2hlbHBlcnMnCitpbXBvcnQge3VwZGF0
ZVRvZG99IGZyb20gJy4vdG9kbycKKworZXhwb3J0IGZ1bmN0aW9uIG9uTG9hZCgpIHsgLy8gZXNs
aW50LWRpc2FibGUtbGluZSBpbXBvcnQvcHJlZmVyLWRlZmF1bHQtZXhwb3J0CisgIHVwZGF0ZVRv
ZG8oKQorfQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJj
ZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrL3NyYy9ib290
c3RyYXAuanMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZj
L3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svc3JjL2Jvb3RzdHJhcC5qcwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5iNmQ1ZTgyMWJhN2VhNmU5ODY1Zjk4YzRjYzVhNTBiNWZkNmUzMDkxCi0tLSAv
ZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9k
b212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrL3NyYy9ib290c3RyYXAu
anMKQEAgLTAsMCArMSwyMyBAQAorLyogZXNsaW50IG5vLWNvbnNvbGU6MCAqLworaW1wb3J0IHtv
bkxvYWR9IGZyb20gJy4vYXBwJworaW1wb3J0IHskb259IGZyb20gJy4vaGVscGVycycKKworLy8g
dGhpcyBpcyBvbmx5IHJlbGV2YW50IHdoZW4gdXNpbmcgYGhvdGAgbW9kZSB3aXRoIHdlYnBhY2sK
Ky8vIHNwZWNpYWwgdGhhbmtzIHRvIEVyaWMgQ2xlbW1vbnM6IGh0dHBzOi8vZ2l0aHViLmNvbS9l
cmljY2xlbW1vbnMvd2VicGFjay1ob3Qtc2VydmVyLWV4YW1wbGUKK2NvbnN0IHJlbG9hZGluZyA9
IGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICdjb21wbGV0ZScKK2lmIChtb2R1bGUuaG90KSB7Cisg
IG1vZHVsZS5ob3QuYWNjZXB0KGZ1bmN0aW9uKGVycikgeworICB9KQorICBpZiAocmVsb2FkaW5n
KSB7CisgICAgb25Mb2FkKCkKKyAgfSBlbHNlIHsKKyAgICBib290c3RyYXAoKQorICB9Cit9IGVs
c2UgeworICBib290c3RyYXAoKQorfQorCitmdW5jdGlvbiBib290c3RyYXAoKSB7CisgICRvbih3
aW5kb3csICdsb2FkJywgb25Mb2FkKQorICAkb24od2luZG93LCAnaGFzaGNoYW5nZScsIG9uTG9h
ZCkKK30KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2Vz
L3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9zcmMvY29udHJv
bGxlci5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMv
dmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9zcmMvY29udHJvbGxlci5qcwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi44YTQ4YzkwNmJjMzZjZTRiYzhiNzIzZjNmMmZmMDMzOTQ0MGM1ZjQzCi0tLSAv
ZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9k
b212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrL3NyYy9jb250cm9sbGVy
LmpzCkBAIC0wLDAgKzEsMjYzIEBACitleHBvcnQgZGVmYXVsdCBDb250cm9sbGVyCisKKy8qKgor
KiBUYWtlcyBhIG1vZGVsIGFuZCB2aWV3IGFuZCBhY3RzIGFzIHRoZSBjb250cm9sbGVyIGJldHdl
ZW4gdGhlbQorKgorKiBAY29uc3RydWN0b3IKKyogQHBhcmFtIHtvYmplY3R9IG1vZGVsIFRoZSBt
b2RlbCBpbnN0YW5jZQorKiBAcGFyYW0ge29iamVjdH0gdmlldyBUaGUgdmlldyBpbnN0YW5jZQor
Ki8KK2Z1bmN0aW9uIENvbnRyb2xsZXIobW9kZWwsIHZpZXcpIHsKKyAgdmFyIHRoYXQgPSB0aGlz
CisgIHRoYXQubW9kZWwgPSBtb2RlbAorICB0aGF0LnZpZXcgPSB2aWV3CisKKyAgdGhhdC52aWV3
LmJpbmQoJ25ld1RvZG8nLCBmdW5jdGlvbih0aXRsZSkgeworICAgIHRoYXQuYWRkSXRlbSh0aXRs
ZSkKKyAgfSkKKworICB0aGF0LnZpZXcuYmluZCgnaXRlbUVkaXQnLCBmdW5jdGlvbihpdGVtKSB7
CisgICAgdGhhdC5lZGl0SXRlbShpdGVtLmlkKQorICB9KQorCisgIHRoYXQudmlldy5iaW5kKCdp
dGVtRWRpdERvbmUnLCBmdW5jdGlvbihpdGVtKSB7CisgICAgdGhhdC5lZGl0SXRlbVNhdmUoaXRl
bS5pZCwgaXRlbS50aXRsZSkKKyAgfSkKKworICB0aGF0LnZpZXcuYmluZCgnaXRlbUVkaXRDYW5j
ZWwnLCBmdW5jdGlvbihpdGVtKSB7CisgICAgdGhhdC5lZGl0SXRlbUNhbmNlbChpdGVtLmlkKQor
ICB9KQorCisgIHRoYXQudmlldy5iaW5kKCdpdGVtUmVtb3ZlJywgZnVuY3Rpb24oaXRlbSkgewor
ICAgIHRoYXQucmVtb3ZlSXRlbShpdGVtLmlkKQorICB9KQorCisgIHRoYXQudmlldy5iaW5kKCdp
dGVtVG9nZ2xlJywgZnVuY3Rpb24oaXRlbSkgeworICAgIHRoYXQudG9nZ2xlQ29tcGxldGUoaXRl
bS5pZCwgaXRlbS5jb21wbGV0ZWQpCisgIH0pCisKKyAgdGhhdC52aWV3LmJpbmQoJ3JlbW92ZUNv
bXBsZXRlZCcsIGZ1bmN0aW9uKCkgeworICAgIHRoYXQucmVtb3ZlQ29tcGxldGVkSXRlbXMoKQor
ICB9KQorCisgIHRoYXQudmlldy5iaW5kKCd0b2dnbGVBbGwnLCBmdW5jdGlvbihzdGF0dXMpIHsK
KyAgICB0aGF0LnRvZ2dsZUFsbChzdGF0dXMuY29tcGxldGVkKQorICB9KQorfQorCisvKioKKyog
TG9hZHMgYW5kIGluaXRpYWxpc2VzIHRoZSB2aWV3CisqCisqIEBwYXJhbSB7c3RyaW5nfSAnJyB8
ICdhY3RpdmUnIHwgJ2NvbXBsZXRlZCcKKyovCitDb250cm9sbGVyLnByb3RvdHlwZS5zZXRWaWV3
ID0gZnVuY3Rpb24obG9jYXRpb25IYXNoKSB7CisgIHZhciByb3V0ZSA9IGxvY2F0aW9uSGFzaC5z
cGxpdCgnLycpWzFdCisgIHZhciBwYWdlID0gcm91dGUgfHwgJycKKyAgdGhpcy5fdXBkYXRlRmls
dGVyU3RhdGUocGFnZSkKK30KKworLyoqCisqIEFuIGV2ZW50IHRvIGZpcmUgb24gbG9hZC4gV2ls
bCBnZXQgYWxsIGl0ZW1zIGFuZCBkaXNwbGF5IHRoZW0gaW4gdGhlCisqIHRvZG8tbGlzdAorKi8K
K0NvbnRyb2xsZXIucHJvdG90eXBlLnNob3dBbGwgPSBmdW5jdGlvbigpIHsKKyAgdmFyIHRoYXQg
PSB0aGlzCisgIHRoYXQubW9kZWwucmVhZChmdW5jdGlvbihkYXRhKSB7CisgICAgdGhhdC52aWV3
LnJlbmRlcignc2hvd0VudHJpZXMnLCBkYXRhKQorICB9KQorfQorCisvKioKKyogUmVuZGVycyBh
bGwgYWN0aXZlIHRhc2tzCisqLworQ29udHJvbGxlci5wcm90b3R5cGUuc2hvd0FjdGl2ZSA9IGZ1
bmN0aW9uKCkgeworICB2YXIgdGhhdCA9IHRoaXMKKyAgdGhhdC5tb2RlbC5yZWFkKHtjb21wbGV0
ZWQ6IGZhbHNlfSwgZnVuY3Rpb24oZGF0YSkgeworICAgIHRoYXQudmlldy5yZW5kZXIoJ3Nob3dF
bnRyaWVzJywgZGF0YSkKKyAgfSkKK30KKworLyoqCisqIFJlbmRlcnMgYWxsIGNvbXBsZXRlZCB0
YXNrcworKi8KK0NvbnRyb2xsZXIucHJvdG90eXBlLnNob3dDb21wbGV0ZWQgPSBmdW5jdGlvbigp
IHsKKyAgdmFyIHRoYXQgPSB0aGlzCisgIHRoYXQubW9kZWwucmVhZCh7Y29tcGxldGVkOiB0cnVl
fSwgZnVuY3Rpb24oZGF0YSkgeworICAgIHRoYXQudmlldy5yZW5kZXIoJ3Nob3dFbnRyaWVzJywg
ZGF0YSkKKyAgfSkKK30KKworLyoqCisqIEFuIGV2ZW50IHRvIGZpcmUgd2hlbmV2ZXIgeW91IHdh
bnQgdG8gYWRkIGFuIGl0ZW0uIFNpbXBseSBwYXNzIGluIHRoZSBldmVudAorKiBvYmplY3QgYW5k
IGl0J2xsIGhhbmRsZSB0aGUgRE9NIGluc2VydGlvbiBhbmQgc2F2aW5nIG9mIHRoZSBuZXcgaXRl
bS4KKyovCitDb250cm9sbGVyLnByb3RvdHlwZS5hZGRJdGVtID0gZnVuY3Rpb24odGl0bGUpIHsK
KyAgdmFyIHRoYXQgPSB0aGlzCisKKyAgaWYgKHRpdGxlLnRyaW0oKSA9PT0gJycpIHsKKyAgICBy
ZXR1cm4KKyAgfQorCisgIHRoYXQubW9kZWwuY3JlYXRlKHRpdGxlLCBmdW5jdGlvbigpIHsKKyAg
ICB0aGF0LnZpZXcucmVuZGVyKCdjbGVhck5ld1RvZG8nKQorICAgIHRoYXQuX2ZpbHRlcih0cnVl
KQorICB9KQorfQorCisvKgorKiBUcmlnZ2VycyB0aGUgaXRlbSBlZGl0aW5nIG1vZGUuCisqLwor
Q29udHJvbGxlci5wcm90b3R5cGUuZWRpdEl0ZW0gPSBmdW5jdGlvbihpZCkgeworICB2YXIgdGhh
dCA9IHRoaXMKKyAgdGhhdC5tb2RlbC5yZWFkKGlkLCBmdW5jdGlvbihkYXRhKSB7CisgICAgdGhh
dC52aWV3LnJlbmRlcignZWRpdEl0ZW0nLCB7aWQsIHRpdGxlOiBkYXRhWzBdLnRpdGxlfSkKKyAg
fSkKK30KKworLyoKKyogRmluaXNoZXMgdGhlIGl0ZW0gZWRpdGluZyBtb2RlIHN1Y2Nlc3NmdWxs
eS4KKyovCitDb250cm9sbGVyLnByb3RvdHlwZS5lZGl0SXRlbVNhdmUgPSBmdW5jdGlvbihpZCwg
dGl0bGUpIHsKKyAgdmFyIHRoYXQgPSB0aGlzCisgIGlmICh0aXRsZS50cmltKCkpIHsKKyAgICB0
aGF0Lm1vZGVsLnVwZGF0ZShpZCwge3RpdGxlfSwgZnVuY3Rpb24oKSB7CisgICAgICB0aGF0LnZp
ZXcucmVuZGVyKCdlZGl0SXRlbURvbmUnLCB7aWQsIHRpdGxlfSkKKyAgICB9KQorICB9IGVsc2Ug
eworICAgIHRoYXQucmVtb3ZlSXRlbShpZCkKKyAgfQorfQorCisvKgorKiBDYW5jZWxzIHRoZSBp
dGVtIGVkaXRpbmcgbW9kZS4KKyovCitDb250cm9sbGVyLnByb3RvdHlwZS5lZGl0SXRlbUNhbmNl
bCA9IGZ1bmN0aW9uKGlkKSB7CisgIHZhciB0aGF0ID0gdGhpcworICB0aGF0Lm1vZGVsLnJlYWQo
aWQsIGZ1bmN0aW9uKGRhdGEpIHsKKyAgICB0aGF0LnZpZXcucmVuZGVyKCdlZGl0SXRlbURvbmUn
LCB7aWQsIHRpdGxlOiBkYXRhWzBdLnRpdGxlfSkKKyAgfSkKK30KKworLyoqCisqIEJ5IGdpdmlu
ZyBpdCBhbiBJRCBpdCdsbCBmaW5kIHRoZSBET00gZWxlbWVudCBtYXRjaGluZyB0aGF0IElELAor
KiByZW1vdmUgaXQgZnJvbSB0aGUgRE9NIGFuZCBhbHNvIHJlbW92ZSBpdCBmcm9tIHN0b3JhZ2Uu
CisqCisqIEBwYXJhbSB7bnVtYmVyfSBpZCBUaGUgSUQgb2YgdGhlIGl0ZW0gdG8gcmVtb3ZlIGZy
b20gdGhlIERPTSBhbmQKKyogc3RvcmFnZQorKi8KK0NvbnRyb2xsZXIucHJvdG90eXBlLnJlbW92
ZUl0ZW0gPSBmdW5jdGlvbihpZCkgeworICB2YXIgdGhhdCA9IHRoaXMKKyAgdGhhdC5tb2RlbC5y
ZW1vdmUoaWQsIGZ1bmN0aW9uKCkgeworICAgIHRoYXQudmlldy5yZW5kZXIoJ3JlbW92ZUl0ZW0n
LCBpZCkKKyAgfSkKKworICB0aGF0Ll9maWx0ZXIoKQorfQorCisvKioKKyogV2lsbCByZW1vdmUg
YWxsIGNvbXBsZXRlZCBpdGVtcyBmcm9tIHRoZSBET00gYW5kIHN0b3JhZ2UuCisqLworQ29udHJv
bGxlci5wcm90b3R5cGUucmVtb3ZlQ29tcGxldGVkSXRlbXMgPSBmdW5jdGlvbigpIHsKKyAgdmFy
IHRoYXQgPSB0aGlzCisgIHRoYXQubW9kZWwucmVhZCh7Y29tcGxldGVkOiB0cnVlfSwgZnVuY3Rp
b24oZGF0YSkgeworICAgIGRhdGEuZm9yRWFjaChmdW5jdGlvbihpdGVtKSB7CisgICAgICB0aGF0
LnJlbW92ZUl0ZW0oaXRlbS5pZCkKKyAgICB9KQorICB9KQorCisgIHRoYXQuX2ZpbHRlcigpCit9
CisKKy8qKgorKiBHaXZlIGl0IGFuIElEIG9mIGEgbW9kZWwgYW5kIGEgY2hlY2tib3ggYW5kIGl0
IHdpbGwgdXBkYXRlIHRoZSBpdGVtCisqIGluIHN0b3JhZ2UgYmFzZWQgb24gdGhlIGNoZWNrYm94
J3Mgc3RhdGUuCisqCisqIEBwYXJhbSB7bnVtYmVyfSBpZCBUaGUgSUQgb2YgdGhlIGVsZW1lbnQg
dG8gY29tcGxldGUgb3IgdW5jb21wbGV0ZQorKiBAcGFyYW0ge29iamVjdH0gY2hlY2tib3ggVGhl
IGNoZWNrYm94IHRvIGNoZWNrIHRoZSBzdGF0ZSBvZiBjb21wbGV0ZQorKiAgICAgICAgICAgICAg
ICAgICAgICAgICAgb3Igbm90CisqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IHNpbGVudCBQ
cmV2ZW50IHJlLWZpbHRlcmluZyB0aGUgdG9kbyBpdGVtcworKi8KK0NvbnRyb2xsZXIucHJvdG90
eXBlLnRvZ2dsZUNvbXBsZXRlID0gZnVuY3Rpb24oaWQsIGNvbXBsZXRlZCwgc2lsZW50KSB7Cisg
IHZhciB0aGF0ID0gdGhpcworICB0aGF0Lm1vZGVsLnVwZGF0ZShpZCwge2NvbXBsZXRlZH0sIGZ1
bmN0aW9uKCkgeworICAgIHRoYXQudmlldy5yZW5kZXIoJ2VsZW1lbnRDb21wbGV0ZScsIHsKKyAg
ICAgIGlkLAorICAgICAgY29tcGxldGVkLAorICAgIH0pCisgIH0pCisKKyAgaWYgKCFzaWxlbnQp
IHsKKyAgICB0aGF0Ll9maWx0ZXIoKQorICB9Cit9CisKKy8qKgorKiBXaWxsIHRvZ2dsZSBBTEwg
Y2hlY2tib3hlcycgb24vb2ZmIHN0YXRlIGFuZCBjb21wbGV0ZW5lc3Mgb2YgbW9kZWxzLgorKiBK
dXN0IHBhc3MgaW4gdGhlIGV2ZW50IG9iamVjdC4KKyovCitDb250cm9sbGVyLnByb3RvdHlwZS50
b2dnbGVBbGwgPSBmdW5jdGlvbihjb21wbGV0ZWQpIHsKKyAgdmFyIHRoYXQgPSB0aGlzCisgIHRo
YXQubW9kZWwucmVhZCh7Y29tcGxldGVkOiAhY29tcGxldGVkfSwgZnVuY3Rpb24oZGF0YSkgewor
ICAgIGRhdGEuZm9yRWFjaChmdW5jdGlvbihpdGVtKSB7CisgICAgICB0aGF0LnRvZ2dsZUNvbXBs
ZXRlKGl0ZW0uaWQsIGNvbXBsZXRlZCwgdHJ1ZSkKKyAgICB9KQorICB9KQorCisgIHRoYXQuX2Zp
bHRlcigpCit9CisKKy8qKgorKiBVcGRhdGVzIHRoZSBwaWVjZXMgb2YgdGhlIHBhZ2Ugd2hpY2gg
Y2hhbmdlIGRlcGVuZGluZyBvbiB0aGUgcmVtYWluaW5nCisqIG51bWJlciBvZiB0b2Rvcy4KKyov
CitDb250cm9sbGVyLnByb3RvdHlwZS5fdXBkYXRlQ291bnQgPSBmdW5jdGlvbigpIHsKKyAgdmFy
IHRoYXQgPSB0aGlzCisgIHRoYXQubW9kZWwuZ2V0Q291bnQoZnVuY3Rpb24odG9kb3MpIHsKKyAg
ICB0aGF0LnZpZXcucmVuZGVyKCd1cGRhdGVFbGVtZW50Q291bnQnLCB0b2Rvcy5hY3RpdmUpCisg
ICAgdGhhdC52aWV3LnJlbmRlcignY2xlYXJDb21wbGV0ZWRCdXR0b24nLCB7CisgICAgICBjb21w
bGV0ZWQ6IHRvZG9zLmNvbXBsZXRlZCwKKyAgICAgIHZpc2libGU6IHRvZG9zLmNvbXBsZXRlZCA+
IDAKKyAgICB9KQorCisgICAgdGhhdC52aWV3LnJlbmRlcigndG9nZ2xlQWxsJywge2NoZWNrZWQ6
IHRvZG9zLmNvbXBsZXRlZCA9PT0gdG9kb3MudG90YWx9KQorICAgIHRoYXQudmlldy5yZW5kZXIo
J2NvbnRlbnRCbG9ja1Zpc2liaWxpdHknLCB7dmlzaWJsZTogdG9kb3MudG90YWwgPiAwfSkKKyAg
fSkKK30KKworLyoqCisqIFJlLWZpbHRlcnMgdGhlIHRvZG8gaXRlbXMsIGJhc2VkIG9uIHRoZSBh
Y3RpdmUgcm91dGUuCisqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGZvcmNlICBmb3JjZXMg
YSByZS1wYWludGluZyBvZiB0b2RvIGl0ZW1zLgorKi8KK0NvbnRyb2xsZXIucHJvdG90eXBlLl9m
aWx0ZXIgPSBmdW5jdGlvbihmb3JjZSkgeworICB2YXIgYWN0aXZlUm91dGUgPSB0aGlzLl9hY3Rp
dmVSb3V0ZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHRoaXMuX2FjdGl2ZVJvdXRlLnN1YnN0
cigxKQorCisgIC8vIFVwZGF0ZSB0aGUgZWxlbWVudHMgb24gdGhlIHBhZ2UsIHdoaWNoIGNoYW5n
ZSB3aXRoIGVhY2ggY29tcGxldGVkIHRvZG8KKyAgdGhpcy5fdXBkYXRlQ291bnQoKQorCisgIC8v
IElmIHRoZSBsYXN0IGFjdGl2ZSByb3V0ZSBpc24ndCAiQWxsIiwgb3Igd2UncmUgc3dpdGNoaW5n
IHJvdXRlcywgd2UKKyAgLy8gcmUtY3JlYXRlIHRoZSB0b2RvIGl0ZW0gZWxlbWVudHMsIGNhbGxp
bmc6CisgIC8vICAgdGhpcy5zaG93W0FsbHxBY3RpdmV8Q29tcGxldGVkXSgpOworICBpZiAoZm9y
Y2UgfHwgdGhpcy5fbGFzdEFjdGl2ZVJvdXRlICE9PSAnQWxsJyB8fCB0aGlzLl9sYXN0QWN0aXZl
Um91dGUgIT09IGFjdGl2ZVJvdXRlKSB7CisgICAgdGhpc1snc2hvdycgKyBhY3RpdmVSb3V0ZV0o
KQorICB9CisKKyAgdGhpcy5fbGFzdEFjdGl2ZVJvdXRlID0gYWN0aXZlUm91dGUKK30KKworLyoq
CisqIFNpbXBseSB1cGRhdGVzIHRoZSBmaWx0ZXIgbmF2J3Mgc2VsZWN0ZWQgc3RhdGVzCisqLwor
Q29udHJvbGxlci5wcm90b3R5cGUuX3VwZGF0ZUZpbHRlclN0YXRlID0gZnVuY3Rpb24oY3VycmVu
dFBhZ2UpIHsKKyAgLy8gU3RvcmUgYSByZWZlcmVuY2UgdG8gdGhlIGFjdGl2ZSByb3V0ZSwgYWxs
b3dpbmcgdXMgdG8gcmUtZmlsdGVyIHRvZG8KKyAgLy8gaXRlbXMgYXMgdGhleSBhcmUgbWFya2Vk
IGNvbXBsZXRlIG9yIGluY29tcGxldGUuCisgIGN1cnJlbnRQYWdlID0gY3VycmVudFBhZ2Uuc3Bs
aXQoJz8nKVswXQorICB0aGlzLl9hY3RpdmVSb3V0ZSA9IGN1cnJlbnRQYWdlCisKKyAgaWYgKGN1
cnJlbnRQYWdlID09PSAnJykgeworICAgIHRoaXMuX2FjdGl2ZVJvdXRlID0gJ0FsbCcKKyAgfQor
CisgIHRoaXMuX2ZpbHRlcigpCisKKyAgdGhpcy52aWV3LnJlbmRlcignc2V0RmlsdGVyJywgY3Vy
cmVudFBhZ2UpCit9CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jl
c291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svc3Jj
L2NvbnRyb2xsZXIudGVzdC5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3Vy
Y2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9zcmMvY29u
dHJvbGxlci50ZXN0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIzNDk1NTliOWM4MzdhN2Q1OGVhMWEzMDVjYjc3
Nzg3YWJjZDBmMjIKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21l
dGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBh
Y2svc3JjL2NvbnRyb2xsZXIudGVzdC5qcwpAQCAtMCwwICsxLDcgQEAKK2ltcG9ydCBDb250cm9s
bGVyIGZyb20gJy4vY29udHJvbGxlcicKKworZGVzY3JpYmUoJ2NvbnRyb2xsZXInLCAoKSA9PiB7
CisgIGl0KCdleGlzdHMnLCAoKSA9PiB7CisgICAgZXhwZWN0KENvbnRyb2xsZXIpLnRvLmV4aXN0
CisgIH0pCit9KQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNv
dXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrL3NyYy9o
ZWxwZXJzLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212
Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrL3NyYy9oZWxwZXJzLmpzCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmU4OGVjYjhkOTQ0NmU1MTQwN2I2NmJjMGJhMWE3OWQ0MTRiYzhjNjUKLS0tIC9k
ZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2Rv
bXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svc3JjL2hlbHBlcnMuanMK
QEAgLTAsMCArMSw2MSBAQAorZXhwb3J0IHtxcywgcXNhLCAkb24sICRkZWxlZ2F0ZSwgJHBhcmVu
dCwgcmVtb3ZlfQorCisvLyBHZXQgZWxlbWVudChzKSBieSBDU1Mgc2VsZWN0b3I6CitmdW5jdGlv
biBxcyhzZWxlY3Rvciwgc2NvcGUpIHsKKyAgcmV0dXJuIChzY29wZSB8fCBkb2N1bWVudCkucXVl
cnlTZWxlY3RvcihzZWxlY3RvcikKK30KKworZnVuY3Rpb24gcXNhKHNlbGVjdG9yLCBzY29wZSkg
eworICByZXR1cm4gKHNjb3BlIHx8IGRvY3VtZW50KS5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9y
KQorfQorCisvLyBhZGRFdmVudExpc3RlbmVyIHdyYXBwZXI6CitmdW5jdGlvbiAkb24odGFyZ2V0
LCB0eXBlLCBjYWxsYmFjaywgdXNlQ2FwdHVyZSkgeworICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5l
cih0eXBlLCBjYWxsYmFjaywgISF1c2VDYXB0dXJlKQorfQorCisvLyBBdHRhY2ggYSBoYW5kbGVy
IHRvIGV2ZW50IGZvciBhbGwgZWxlbWVudHMgdGhhdCBtYXRjaCB0aGUgc2VsZWN0b3IsCisvLyBu
b3cgb3IgaW4gdGhlIGZ1dHVyZSwgYmFzZWQgb24gYSByb290IGVsZW1lbnQKK2Z1bmN0aW9uICRk
ZWxlZ2F0ZSh0YXJnZXQsIHNlbGVjdG9yLCB0eXBlLCBoYW5kbGVyKSB7CisgIC8vIGh0dHBzOi8v
ZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0V2ZW50cy9ibHVyCisgIHZhciB1
c2VDYXB0dXJlID0gdHlwZSA9PT0gJ2JsdXInIHx8IHR5cGUgPT09ICdmb2N1cycKKyAgJG9uKHRh
cmdldCwgdHlwZSwgZGlzcGF0Y2hFdmVudCwgdXNlQ2FwdHVyZSkKKworICBmdW5jdGlvbiBkaXNw
YXRjaEV2ZW50KGV2ZW50KSB7CisgICAgdmFyIHRhcmdldEVsZW1lbnQgPSBldmVudC50YXJnZXQK
KyAgICB2YXIgcG90ZW50aWFsRWxlbWVudHMgPSBxc2Eoc2VsZWN0b3IsIHRhcmdldCkKKyAgICB2
YXIgaGFzTWF0Y2ggPSBBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKHBvdGVudGlhbEVsZW1l
bnRzLCB0YXJnZXRFbGVtZW50KSA+PSAwCisKKyAgICBpZiAoaGFzTWF0Y2gpIHsKKyAgICAgIGhh
bmRsZXIuY2FsbCh0YXJnZXRFbGVtZW50LCBldmVudCkKKyAgICB9CisgIH0KK30KKworLy8gRmlu
ZCB0aGUgZWxlbWVudCdzIHBhcmVudCB3aXRoIHRoZSBnaXZlbiB0YWcgbmFtZToKKy8vICRwYXJl
bnQocXMoJ2EnKSwgJ2RpdicpOworZnVuY3Rpb24gJHBhcmVudChlbGVtZW50LCB0YWdOYW1lKSB7
CisgIGlmICghZWxlbWVudC5wYXJlbnROb2RlKSB7CisgICAgcmV0dXJuIHVuZGVmaW5lZAorICB9
CisgIGlmIChlbGVtZW50LnBhcmVudE5vZGUudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSB0YWdO
YW1lLnRvTG93ZXJDYXNlKCkpIHsKKyAgICByZXR1cm4gZWxlbWVudC5wYXJlbnROb2RlCisgIH0K
KyAgcmV0dXJuICRwYXJlbnQoZWxlbWVudC5wYXJlbnROb2RlLCB0YWdOYW1lKQorfQorCisvLyBy
ZW1vdmVzIGFuIGVsZW1lbnQgZnJvbSBhbiBhcnJheQorLy8gY29uc3QgeCA9IFsxLDIsM10KKy8v
IHJlbW92ZSh4LCAyKQorLy8geCB+PT0gWzEsM10KK2Z1bmN0aW9uIHJlbW92ZShhcnJheSwgdGhp
bmcpIHsKKyAgY29uc3QgaW5kZXggPSBhcnJheS5pbmRleE9mKHRoaW5nKQorICBpZiAoaW5kZXgg
PT09IC0xKSB7CisgICAgcmV0dXJuIGFycmF5CisgIH0KKyAgYXJyYXkuc3BsaWNlKGluZGV4LCAx
KQorfQorCisvLyBBbGxvdyBmb3IgbG9vcGluZyBvbiBub2RlcyBieSBjaGFpbmluZzoKKy8vIHFz
YSgnLmZvbycpLmZvckVhY2goZnVuY3Rpb24gKCkge30pCitOb2RlTGlzdC5wcm90b3R5cGUuZm9y
RWFjaCA9IEFycmF5LnByb3RvdHlwZS5mb3JFYWNoCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRl
c3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1
LWJhYmVsLXdlYnBhY2svc3JjL2luZGV4Lmh0bWwgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21l
dGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBh
Y2svc3JjL2luZGV4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzIxMmNjMjQ2NTZiYTIxZDMwNGFmZmU4ZGFi
ZTlkYjIwYmYzZjgwMgotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRv
bWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2Vi
cGFjay9zcmMvaW5kZXguaHRtbApAQCAtMCwwICsxLDQ0IEBACis8IWRvY3R5cGUgaHRtbD4KKzxo
dG1sIGxhbmc9ImVuIiBkYXRhLWZyYW1ld29yaz0iamF2YXNjcmlwdCI+CisgIDxoZWFkPgorICAg
IDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgICA8dGl0bGU+VmFuaWxsYUpTIOKAoiBUb2RvTVZD
PC90aXRsZT4KKyAgICA8JT1odG1sV2VicGFja1BsdWdpbi5maWxlcy53ZWJwYWNrTWFuaWZlc3Ql
PgorICA8L2hlYWQ+CisgIDxib2R5PgorICAgIDxzZWN0aW9uIGNsYXNzPSJ0b2RvYXBwIj4KKyAg
ICAgIDxoZWFkZXIgY2xhc3M9ImhlYWRlciI+CisgICAgICAgIDxoMT50b2RvczwvaDE+CisgICAg
ICAgIDxpbnB1dCBjbGFzcz0ibmV3LXRvZG8iIHBsYWNlaG9sZGVyPSJXaGF0IG5lZWRzIHRvIGJl
IGRvbmU/IiBhdXRvZm9jdXM+CisgICAgICA8L2hlYWRlcj4KKyAgICAgIDxzZWN0aW9uIGNsYXNz
PSJtYWluIj4KKyAgICAgICAgPGlucHV0IGNsYXNzPSJ0b2dnbGUtYWxsIiB0eXBlPSJjaGVja2Jv
eCI+CisgICAgICAgIDxsYWJlbCBmb3I9InRvZ2dsZS1hbGwiPk1hcmsgYWxsIGFzIGNvbXBsZXRl
PC9sYWJlbD4KKyAgICAgICAgPHVsIGNsYXNzPSJ0b2RvLWxpc3QiPjwvdWw+CisgICAgICA8L3Nl
Y3Rpb24+CisgICAgICA8Zm9vdGVyIGNsYXNzPSJmb290ZXIiPgorICAgICAgICA8c3BhbiBjbGFz
cz0idG9kby1jb3VudCI+PC9zcGFuPgorICAgICAgICA8dWwgY2xhc3M9ImZpbHRlcnMiPgorICAg
ICAgICAgIDxsaT4KKyAgICAgICAgICAgIDxhIGhyZWY9IiMvIiBjbGFzcz0ic2VsZWN0ZWQiPkFs
bDwvYT4KKyAgICAgICAgICA8L2xpPgorICAgICAgICAgIDxsaT4KKyAgICAgICAgICAgIDxhIGhy
ZWY9IiMvYWN0aXZlIj5BY3RpdmU8L2E+CisgICAgICAgICAgPC9saT4KKyAgICAgICAgICA8bGk+
CisgICAgICAgICAgICA8YSBocmVmPSIjL2NvbXBsZXRlZCI+Q29tcGxldGVkPC9hPgorICAgICAg
ICAgIDwvbGk+CisgICAgICAgIDwvdWw+CisgICAgICAgIDxidXR0b24gY2xhc3M9ImNsZWFyLWNv
bXBsZXRlZCI+Q2xlYXIgY29tcGxldGVkPC9idXR0b24+CisgICAgICA8L2Zvb3Rlcj4KKyAgICA8
L3NlY3Rpb24+CisgICAgPGZvb3RlciBjbGFzcz0iaW5mbyI+CisgICAgICA8cD5Eb3VibGUtY2xp
Y2sgdG8gZWRpdCBhIHRvZG88L3A+CisgICAgICA8cD5TcGVlZG9tZXRlciB2ZXJzaW9uIGJ5IDxh
IGhyZWY9Imh0dHA6Ly90d2l0dGVyLmNvbS9hZGR5b3NtYW5pIj5BZGR5IE9zbWFuaTwvYT48L3A+
CisgICAgICA8cD5DcmVhdGVkIGJ5IDxhIGhyZWY9Imh0dHA6Ly90d2l0dGVyLmNvbS9vc2Nhcmdv
ZHNvbiI+T3NjYXIgR29kc29uPC9hPjwvcD4KKyAgICAgIDxwPlJlZmFjdG9yZWQgYnkgPGEgaHJl
Zj0iaHR0cHM6Ly9naXRodWIuY29tL2NidXJnbWVyIj5DaHJpc3RvcGggQnVyZ21lcjwvYT48L3A+
CisgICAgICA8cD5Qb3J0ZWQgdG8gRVM2IGJ5IDxhIGhyZWY9Imh0dHBzOi8vdHdpdHRlci5jb20v
a2VudGNkb2RkcyI+S2VudCBDLiBEb2RkczwvYT48L3A+CisgICAgICA8cD5QYXJ0IG9mIDxhIGhy
ZWY9Imh0dHA6Ly90b2RvbXZjLmNvbSI+VG9kb01WQzwvYT48L3A+CisgICAgPC9mb290ZXI+Cisg
IDwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0
ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFj
ay9zcmMvbW9kZWwuanMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90
b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svc3JjL21vZGVsLmpz
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjA2ZmE1OGE2YmVkNzMyM2Y2MmNmMzU3MjUxYjk3NTQzODI3MDVmN2MKLS0t
IC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90
b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svc3JjL21vZGVsLmpz
CkBAIC0wLDAgKzEsMTE2IEBACitleHBvcnQgZGVmYXVsdCBNb2RlbAorCisvKioKKyogQ3JlYXRl
cyBhIG5ldyBNb2RlbCBpbnN0YW5jZSBhbmQgaG9va3MgdXAgdGhlIHN0b3JhZ2UuCisqCisqIEBj
b25zdHJ1Y3RvcgorKiBAcGFyYW0ge29iamVjdH0gc3RvcmFnZSBBIHJlZmVyZW5jZSB0byB0aGUg
Y2xpZW50IHNpZGUgc3RvcmFnZSBjbGFzcworKi8KK2Z1bmN0aW9uIE1vZGVsKHN0b3JhZ2UpIHsK
KyAgdGhpcy5zdG9yYWdlID0gc3RvcmFnZQorfQorCisvKioKKyogQ3JlYXRlcyBhIG5ldyB0b2Rv
IG1vZGVsCisqCisqIEBwYXJhbSB7c3RyaW5nfSBbdGl0bGVdIFRoZSB0aXRsZSBvZiB0aGUgdGFz
aworKiBAcGFyYW0ge2Z1bmN0aW9ufSBbY2FsbGJhY2tdIFRoZSBjYWxsYmFjayB0byBmaXJlIGFm
dGVyIHRoZSBtb2RlbCBpcyBjcmVhdGVkCisqLworTW9kZWwucHJvdG90eXBlLmNyZWF0ZSA9IGZ1
bmN0aW9uKHRpdGxlLCBjYWxsYmFjaykgeworICB0aXRsZSA9IHRpdGxlIHx8ICcnCisgIGNhbGxi
YWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7CisgIH0KKworICB2YXIgbmV3SXRlbSA9IHsK
KyAgICB0aXRsZTogdGl0bGUudHJpbSgpLAorICAgIGNvbXBsZXRlZDogZmFsc2UKKyAgfQorCisg
IHRoaXMuc3RvcmFnZS5zYXZlKG5ld0l0ZW0sIGNhbGxiYWNrKQorfQorCisvKioKKyAqIEZpbmRz
IGFuZCByZXR1cm5zIGEgbW9kZWwgaW4gc3RvcmFnZS4gSWYgbm8gcXVlcnkgaXMgZ2l2ZW4gaXQn
bGwgc2ltcGx5CisgKiByZXR1cm4gZXZlcnl0aGluZy4gSWYgeW91IHBhc3MgaW4gYSBzdHJpbmcg
b3IgbnVtYmVyIGl0J2xsIGxvb2sgdGhhdCB1cCBhcworICogdGhlIElEIG9mIHRoZSBtb2RlbCB0
byBmaW5kLiBMYXN0bHksIHlvdSBjYW4gcGFzcyBpdCBhbiBvYmplY3QgdG8gbWF0Y2ggYWdhaW5z
dC4KKyAqCisgKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ8b2JqZWN0fSBbcXVlcnldIEEgcXVlcnkg
dG8gbWF0Y2ggbW9kZWxzIGFnYWluc3QKKyAqIEBwYXJhbSB7ZnVuY3Rpb259IFtjYWxsYmFja10g
VGhlIGNhbGxiYWNrIHRvIGZpcmUgYWZ0ZXIgdGhlIG1vZGVsIGlzIGZvdW5kCisgKgorICogQGV4
YW1wbGUKKyAqIG1vZGVsLnJlYWQoMSwgZnVuYyk7IC8vIFdpbGwgZmluZCB0aGUgbW9kZWwgd2l0
aCBhbiBJRCBvZiAxCisgKiBtb2RlbC5yZWFkKCcxJyk7IC8vIFNhbWUgYXMgYWJvdmUKKyAqIC8v
QmVsb3cgd2lsbCBmaW5kIGEgbW9kZWwgd2l0aCBmb28gZXF1YWxsaW5nIGJhciBhbmQgaGVsbG8g
ZXF1YWxsaW5nIHdvcmxkLgorICogbW9kZWwucmVhZCh7IGZvbzogJ2JhcicsIGhlbGxvOiAnd29y
bGQnIH0pOworICovCitNb2RlbC5wcm90b3R5cGUucmVhZCA9IGZ1bmN0aW9uKHF1ZXJ5LCBjYWxs
YmFjaykgeworICB2YXIgcXVlcnlUeXBlID0gdHlwZW9mIHF1ZXJ5CisgIGNhbGxiYWNrID0gY2Fs
bGJhY2sgfHwgZnVuY3Rpb24oKSB7CisgIH0KKworICBpZiAocXVlcnlUeXBlID09PSAnZnVuY3Rp
b24nKSB7CisgICAgY2FsbGJhY2sgPSBxdWVyeQorICAgIHJldHVybiB0aGlzLnN0b3JhZ2UuZmlu
ZEFsbChjYWxsYmFjaykKKyAgfSBlbHNlIGlmIChxdWVyeVR5cGUgPT09ICdzdHJpbmcnIHx8IHF1
ZXJ5VHlwZSA9PT0gJ251bWJlcicpIHsKKyAgICBxdWVyeSA9IHBhcnNlSW50KHF1ZXJ5LCAxMCkK
KyAgICB0aGlzLnN0b3JhZ2UuZmluZCh7aWQ6IHF1ZXJ5fSwgY2FsbGJhY2spCisgIH0gZWxzZSB7
CisgICAgdGhpcy5zdG9yYWdlLmZpbmQocXVlcnksIGNhbGxiYWNrKQorICB9CisgIHJldHVybiB1
bmRlZmluZWQKK30KKworLyoqCisqIFVwZGF0ZXMgYSBtb2RlbCBieSBnaXZpbmcgaXQgYW4gSUQs
IGRhdGEgdG8gdXBkYXRlLCBhbmQgYSBjYWxsYmFjayB0byBmaXJlIHdoZW4KKyogdGhlIHVwZGF0
ZSBpcyBjb21wbGV0ZS4KKyoKKyogQHBhcmFtIHtudW1iZXJ9IGlkIFRoZSBpZCBvZiB0aGUgbW9k
ZWwgdG8gdXBkYXRlCisqIEBwYXJhbSB7b2JqZWN0fSBkYXRhIFRoZSBwcm9wZXJ0aWVzIHRvIHVw
ZGF0ZSBhbmQgdGhlaXIgbmV3IHZhbHVlCisqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrIFRo
ZSBjYWxsYmFjayB0byBmaXJlIHdoZW4gdGhlIHVwZGF0ZSBpcyBjb21wbGV0ZS4KKyovCitNb2Rl
bC5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24oaWQsIGRhdGEsIGNhbGxiYWNrKSB7CisgIHRo
aXMuc3RvcmFnZS5zYXZlKGRhdGEsIGNhbGxiYWNrLCBpZCkKK30KKworLyoqCisqIFJlbW92ZXMg
YSBtb2RlbCBmcm9tIHN0b3JhZ2UKKyoKKyogQHBhcmFtIHtudW1iZXJ9IGlkIFRoZSBJRCBvZiB0
aGUgbW9kZWwgdG8gcmVtb3ZlCisqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrIFRoZSBjYWxs
YmFjayB0byBmaXJlIHdoZW4gdGhlIHJlbW92YWwgaXMgY29tcGxldGUuCisqLworTW9kZWwucHJv
dG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uKGlkLCBjYWxsYmFjaykgeworICB0aGlzLnN0b3JhZ2Uu
cmVtb3ZlKGlkLCBjYWxsYmFjaykKK30KKworLyoqCisqIFdBUk5JTkc6IFdpbGwgcmVtb3ZlIEFM
TCBkYXRhIGZyb20gc3RvcmFnZS4KKyoKKyogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgVGhl
IGNhbGxiYWNrIHRvIGZpcmUgd2hlbiB0aGUgc3RvcmFnZSBpcyB3aXBlZC4KKyovCitNb2RlbC5w
cm90b3R5cGUucmVtb3ZlQWxsID0gZnVuY3Rpb24oY2FsbGJhY2spIHsKKyAgdGhpcy5zdG9yYWdl
LmRyb3AoY2FsbGJhY2spCit9CisKKy8qKgorKiBSZXR1cm5zIGEgY291bnQgb2YgYWxsIHRvZG9z
CisqLworTW9kZWwucHJvdG90eXBlLmdldENvdW50ID0gZnVuY3Rpb24oY2FsbGJhY2spIHsKKyAg
dmFyIHRvZG9zID0geworICAgIGFjdGl2ZTogMCwKKyAgICBjb21wbGV0ZWQ6IDAsCisgICAgdG90
YWw6IDAKKyAgfQorCisgIHRoaXMuc3RvcmFnZS5maW5kQWxsKGZ1bmN0aW9uKGRhdGEpIHsKKyAg
ICBkYXRhLmZvckVhY2goZnVuY3Rpb24odG9kbykgeworICAgICAgaWYgKHRvZG8uY29tcGxldGVk
KSB7CisgICAgICAgIHRvZG9zLmNvbXBsZXRlZCsrCisgICAgICB9IGVsc2UgeworICAgICAgICB0
b2Rvcy5hY3RpdmUrKworICAgICAgfQorCisgICAgICB0b2Rvcy50b3RhbCsrCisgICAgfSkKKyAg
ICBjYWxsYmFjayh0b2RvcykKKyAgfSkKK30KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMv
U3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFi
ZWwtd2VicGFjay9zcmMvc3RvcmUuanMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jl
c291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svc3Jj
L3N0b3JlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMzYjk3YzIwN2Y5OWZkNDNlMDZkZTNhMDYyYzUzYzJhNGI1
ODliMzQKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jl
c291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svc3Jj
L3N0b3JlLmpzCkBAIC0wLDAgKzEsMTUwIEBACitpbXBvcnQge3JlbW92ZX0gZnJvbSAnLi9oZWxw
ZXJzJworZXhwb3J0IGRlZmF1bHQgU3RvcmUKKworLyoqCisgKiBDcmVhdGVzIGEgbmV3IGNsaWVu
dCBzaWRlIHN0b3JhZ2Ugb2JqZWN0IGFuZCB3aWxsIGNyZWF0ZSBhbiBlbXB0eQorICogY29sbGVj
dGlvbiBpZiBubyBjb2xsZWN0aW9uIGFscmVhZHkgZXhpc3RzLgorICoKKyAqIEBwYXJhbSB7c3Ry
aW5nfSBuYW1lIFRoZSBuYW1lIG9mIG91ciBEQiB3ZSB3YW50IHRvIHVzZQorICogQHBhcmFtIHtm
dW5jdGlvbn0gY2FsbGJhY2sgT3VyIGZha2UgREIgdXNlcyBjYWxsYmFja3MgYmVjYXVzZSBpbgor
ICogcmVhbCBsaWZlIHlvdSBwcm9iYWJseSB3b3VsZCBiZSBtYWtpbmcgQUpBWCBjYWxscworICov
CitmdW5jdGlvbiBTdG9yZShuYW1lLCBjYWxsYmFjaykgeworICBjYWxsYmFjayA9IGNhbGxiYWNr
IHx8IGZ1bmN0aW9uKCkgeworICB9CisKKyAgdGhpcy5fZGJOYW1lID0gbmFtZQorCisgIGlmICgh
bG9jYWxTdG9yYWdlW25hbWVdKSB7CisgICAgdmFyIGRhdGEgPSB7CisgICAgICB0b2RvczogW10K
KyAgICB9CisKKyAgICBsb2NhbFN0b3JhZ2VbbmFtZV0gPSBKU09OLnN0cmluZ2lmeShkYXRhKQor
ICB9CisKKyAgY2FsbGJhY2suY2FsbCh0aGlzLCBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZVtuYW1l
XSkpCisgIHRoaXMuc3Vic2NyaWJlcnMgPSBbXQorfQorCitTdG9yZS5wcm90b3R5cGUuc3Vic2Ny
aWJlID0gZnVuY3Rpb24oc3Vic2NyaWJlcikgeworICB0aGlzLnN1YnNjcmliZXJzLnB1c2goc3Vi
c2NyaWJlcikKKyAgcmV0dXJuICgpID0+IHJlbW92ZSh0aGlzLnN1YnNjcmliZXJzLCBzdWJzY3Jp
YmVyKQorfQorCitTdG9yZS5wcm90b3R5cGUuX25vdGlmeSA9IGZ1bmN0aW9uKCkgeworICB0aGlz
LnN1YnNjcmliZXJzLmZvckVhY2gocyA9PiBzKCkpCit9CisKKy8qKgorKiBGaW5kcyBpdGVtcyBi
YXNlZCBvbiBhIHF1ZXJ5IGdpdmVuIGFzIGEgSlMgb2JqZWN0CisqCisqIEBwYXJhbSB7b2JqZWN0
fSBxdWVyeSBUaGUgcXVlcnkgdG8gbWF0Y2ggYWdhaW5zdCAoaS5lLiB7Zm9vOiAnYmFyJ30pCisq
IEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrICAgVGhlIGNhbGxiYWNrIHRvIGZpcmUgd2hlbiB0
aGUgcXVlcnkgaGFzCisqIGNvbXBsZXRlZCBydW5uaW5nCisqCisqIEBleGFtcGxlCisqIGRiLmZp
bmQoe2ZvbzogJ2JhcicsIGhlbGxvOiAnd29ybGQnfSwgZnVuY3Rpb24gKGRhdGEpIHsKKyogICAv
LyBkYXRhIHdpbGwgcmV0dXJuIGFueSBpdGVtcyB0aGF0IGhhdmUgZm9vOiBiYXIgYW5kCisqICAg
Ly8gaGVsbG86IHdvcmxkIGluIHRoZWlyIHByb3BlcnRpZXMKKyogfSk7CisqLworU3RvcmUucHJv
dG90eXBlLmZpbmQgPSBmdW5jdGlvbihxdWVyeSwgY2FsbGJhY2spIHsKKyAgaWYgKCFjYWxsYmFj
aykgeworICAgIHJldHVybgorICB9CisKKyAgdmFyIHRvZG9zID0gSlNPTi5wYXJzZShsb2NhbFN0
b3JhZ2VbdGhpcy5fZGJOYW1lXSkudG9kb3MKKworICBjYWxsYmFjay5jYWxsKHRoaXMsIHRvZG9z
LmZpbHRlcihmdW5jdGlvbih0b2RvKSB7CisgICAgZm9yICh2YXIgcSBpbiBxdWVyeSkgeworICAg
ICAgaWYgKHF1ZXJ5W3FdICE9PSB0b2RvW3FdKSB7CisgICAgICAgIHJldHVybiBmYWxzZQorICAg
ICAgfQorICAgIH0KKyAgICByZXR1cm4gdHJ1ZQorICB9KSkKK30KKworLyoqCisqIFdpbGwgcmV0
cmlldmUgYWxsIGRhdGEgZnJvbSB0aGUgY29sbGVjdGlvbgorKgorKiBAcGFyYW0ge2Z1bmN0aW9u
fSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gZmlyZSB1cG9uIHJldHJpZXZpbmcgZGF0YQorKi8K
K1N0b3JlLnByb3RvdHlwZS5maW5kQWxsID0gZnVuY3Rpb24oY2FsbGJhY2spIHsKKyAgY2FsbGJh
Y2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHsKKyAgfQorICBjYWxsYmFjay5jYWxsKHRoaXMs
IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlW3RoaXMuX2RiTmFtZV0pLnRvZG9zKQorfQorCisvKioK
KyogV2lsbCBzYXZlIHRoZSBnaXZlbiBkYXRhIHRvIHRoZSBEQi4gSWYgbm8gaXRlbSBleGlzdHMg
aXQgd2lsbCBjcmVhdGUgYSBuZXcKKyogaXRlbSwgb3RoZXJ3aXNlIGl0J2xsIHNpbXBseSB1cGRh
dGUgYW4gZXhpc3RpbmcgaXRlbSdzIHByb3BlcnRpZXMKKyoKKyogQHBhcmFtIHtvYmplY3R9IHVw
ZGF0ZURhdGEgVGhlIGRhdGEgdG8gc2F2ZSBiYWNrIGludG8gdGhlIERCCisqIEBwYXJhbSB7ZnVu
Y3Rpb259IGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBmaXJlIGFmdGVyIHNhdmluZworKiBAcGFy
YW0ge251bWJlcn0gaWQgQW4gb3B0aW9uYWwgcGFyYW0gdG8gZW50ZXIgYW4gSUQgb2YgYW4gaXRl
bSB0byB1cGRhdGUKKyovCitTdG9yZS5wcm90b3R5cGUuc2F2ZSA9IGZ1bmN0aW9uKHVwZGF0ZURh
dGEsIGNhbGxiYWNrLCBpZCkgeworICB2YXIgZGF0YSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdl
W3RoaXMuX2RiTmFtZV0pCisgIHZhciB0b2RvcyA9IGRhdGEudG9kb3MKKworICBjYWxsYmFjayA9
IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCkgeworICB9CisKKyAgLy8gSWYgYW4gSUQgd2FzIGFjdHVh
bGx5IGdpdmVuLCBmaW5kIHRoZSBpdGVtIGFuZCB1cGRhdGUgZWFjaCBwcm9wZXJ0eQorICBpZiAo
aWQpIHsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRvZG9zLmxlbmd0aDsgaSsrKSB7CisgICAg
ICBpZiAodG9kb3NbaV0uaWQgPT09IGlkKSB7CisgICAgICAgIGZvciAodmFyIGtleSBpbiB1cGRh
dGVEYXRhKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZ3VhcmQtZm9yLWluCisgICAgICAgICAg
dG9kb3NbaV1ba2V5XSA9IHVwZGF0ZURhdGFba2V5XQorICAgICAgICB9CisgICAgICAgIGJyZWFr
CisgICAgICB9CisgICAgfQorCisgICAgbG9jYWxTdG9yYWdlW3RoaXMuX2RiTmFtZV0gPSBKU09O
LnN0cmluZ2lmeShkYXRhKQorICAgIGNhbGxiYWNrLmNhbGwodGhpcywgSlNPTi5wYXJzZShsb2Nh
bFN0b3JhZ2VbdGhpcy5fZGJOYW1lXSkudG9kb3MpCisgIH0gZWxzZSB7CisgICAgLy8gR2VuZXJh
dGUgYW4gSUQKKyAgICB1cGRhdGVEYXRhLmlkID0gbmV3IERhdGUoKS5nZXRUaW1lKCkKKworICAg
IHRvZG9zLnB1c2godXBkYXRlRGF0YSkKKyAgICBsb2NhbFN0b3JhZ2VbdGhpcy5fZGJOYW1lXSA9
IEpTT04uc3RyaW5naWZ5KGRhdGEpCisgICAgY2FsbGJhY2suY2FsbCh0aGlzLCBbdXBkYXRlRGF0
YV0pCisgIH0KKyAgdGhpcy5fbm90aWZ5KCkKK30KKworLyoqCisqIFdpbGwgcmVtb3ZlIGFuIGl0
ZW0gZnJvbSB0aGUgU3RvcmUgYmFzZWQgb24gaXRzIElECisqCisqIEBwYXJhbSB7bnVtYmVyfSBp
ZCBUaGUgSUQgb2YgdGhlIGl0ZW0geW91IHdhbnQgdG8gcmVtb3ZlCisqIEBwYXJhbSB7ZnVuY3Rp
b259IGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBmaXJlIGFmdGVyIHNhdmluZworKi8KK1N0b3Jl
LnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbihpZCwgY2FsbGJhY2spIHsKKyAgdmFyIGRhdGEg
PSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZVt0aGlzLl9kYk5hbWVdKQorICB2YXIgdG9kb3MgPSBk
YXRhLnRvZG9zCisKKyAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2Rvcy5sZW5ndGg7IGkrKykgewor
ICAgIGlmICh0b2Rvc1tpXS5pZCA9PT0gaWQpIHsKKyAgICAgIHRvZG9zLnNwbGljZShpLCAxKQor
ICAgICAgYnJlYWsKKyAgICB9CisgIH0KKworICBsb2NhbFN0b3JhZ2VbdGhpcy5fZGJOYW1lXSA9
IEpTT04uc3RyaW5naWZ5KGRhdGEpCisgIGNhbGxiYWNrLmNhbGwodGhpcywgSlNPTi5wYXJzZShs
b2NhbFN0b3JhZ2VbdGhpcy5fZGJOYW1lXSkudG9kb3MpCisgIHRoaXMuX25vdGlmeSgpCit9CisK
Ky8qKgorKiBXaWxsIGRyb3AgYWxsIHN0b3JhZ2UgYW5kIHN0YXJ0IGZyZXNoCisqCisqIEBwYXJh
bSB7ZnVuY3Rpb259IGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBmaXJlIGFmdGVyIGRyb3BwaW5n
IHRoZSBkYXRhCisqLworU3RvcmUucHJvdG90eXBlLmRyb3AgPSBmdW5jdGlvbihjYWxsYmFjaykg
eworICBsb2NhbFN0b3JhZ2VbdGhpcy5fZGJOYW1lXSA9IEpTT04uc3RyaW5naWZ5KHt0b2Rvczog
W119KQorICBjYWxsYmFjay5jYWxsKHRoaXMsIEpTT04ucGFyc2UobG9jYWxTdG9yYWdlW3RoaXMu
X2RiTmFtZV0pLnRvZG9zKQorICB0aGlzLl9ub3RpZnkoKQorfQpkaWZmIC0tZ2l0IGEvUGVyZm9y
bWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVz
L2VzMjAxNS1iYWJlbC13ZWJwYWNrL3NyYy90ZW1wbGF0ZS5qcyBiL1BlcmZvcm1hbmNlVGVzdHMv
U3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFi
ZWwtd2VicGFjay9zcmMvdGVtcGxhdGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjBjNGY2ZmM4NDcwOGY3Y2Mz
OGM2Y2NhNGRmYmZiM2RlZTlkNGFlZgotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVz
dHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUt
YmFiZWwtd2VicGFjay9zcmMvdGVtcGxhdGUuanMKQEAgLTAsMCArMSwxMTAgQEAKK2V4cG9ydCBk
ZWZhdWx0IFRlbXBsYXRlCisKK3ZhciBodG1sRXNjYXBlcyA9IHsKKyAgJyYnOiAnJmFtcDsnLAor
ICAnPCc6ICcmbHQ7JywKKyAgJz4nOiAnJmd0OycsCisgICciJzogJyZxdW90OycsCisgICdcJyc6
ICcmI3gyNzsnLAorICAnYCc6ICcmI3g2MDsnCit9CisKK3ZhciBlc2NhcGVIdG1sQ2hhciA9IGZ1
bmN0aW9uKGNocikgeworICByZXR1cm4gaHRtbEVzY2FwZXNbY2hyXQorfQorCit2YXIgcmVVbmVz
Y2FwZWRIdG1sID0gL1smPD4iJ2BdL2cKK3ZhciByZUhhc1VuZXNjYXBlZEh0bWwgPSBuZXcgUmVn
RXhwKHJlVW5lc2NhcGVkSHRtbC5zb3VyY2UpCisKK3ZhciBlc2NhcGUgPSBmdW5jdGlvbihzdHJp
bmcpIHsKKyAgaWYgKHN0cmluZyAmJiByZUhhc1VuZXNjYXBlZEh0bWwudGVzdChzdHJpbmcpKSB7
CisgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKHJlVW5lc2NhcGVkSHRtbCwgZXNjYXBlSHRtbENo
YXIpCisgIH0gZWxzZSB7CisgICAgcmV0dXJuIHN0cmluZworICB9Cit9CisKKy8qKgorKiBTZXRz
IHVwIGRlZmF1bHRzIGZvciBhbGwgdGhlIFRlbXBsYXRlIG1ldGhvZHMgc3VjaCBhcyBhIGRlZmF1
bHQgdGVtcGxhdGUKKyoKKyogQGNvbnN0cnVjdG9yCisqLworZnVuY3Rpb24gVGVtcGxhdGUoKSB7
CisgIHRoaXMuZGVmYXVsdFRlbXBsYXRlID0gYAorICAgIDxsaSBkYXRhLWlkPSJ7e2lkfX0iIGNs
YXNzPSJ7e2NvbXBsZXRlZH19Ij4KKyAgICAgIDxkaXYgY2xhc3M9InZpZXciPgorICAgICAgICA8
aW5wdXQgY2xhc3M9InRvZ2dsZSIgdHlwZT0iY2hlY2tib3giIHt7Y2hlY2tlZH19IC8+CisgICAg
ICAgIDxsYWJlbD57e3RpdGxlfX08L2xhYmVsPgorICAgICAgICA8YnV0dG9uIGNsYXNzPSJkZXN0
cm95Ij48L2J1dHRvbj4KKyAgICAgIDwvZGl2PgorICAgIDwvbGk+CisgIGAKK30KKworLyoqCisg
KiBDcmVhdGVzIGFuIDxsaT4gSFRNTCBzdHJpbmcgYW5kIHJldHVybnMgaXQgZm9yIHBsYWNlbWVu
dCBpbiB5b3VyIGFwcC4KKyAqCisgKiBOT1RFOiBJbiByZWFsIGxpZmUgeW91IHNob3VsZCBiZSB1
c2luZyBhIHRlbXBsYXRpbmcgZW5naW5lIHN1Y2ggYXMgTXVzdGFjaGUKKyAqIG9yIEhhbmRsZWJh
cnMsIGhvd2V2ZXIsIHRoaXMgaXMgYSB2YW5pbGxhIEpTIGV4YW1wbGUuCisgKgorICogQHBhcmFt
IHtvYmplY3R9IGRhdGEgVGhlIG9iamVjdCBjb250YWluaW5nIGtleXMgeW91IHdhbnQgdG8gZmlu
ZCBpbiB0aGUKKyAqICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlIHRvIHJlcGxhY2UuCisg
KiBAcmV0dXJucyB7c3RyaW5nfSBIVE1MIFN0cmluZyBvZiBhbiA8bGk+IGVsZW1lbnQKKyAqCisg
KiBAZXhhbXBsZQorICogdmlldy5zaG93KHsKKyAqICBpZDogMSwKKyAqICB0aXRsZTogIkhlbGxv
IFdvcmxkIiwKKyAqICBjb21wbGV0ZWQ6IDAsCisgKiB9KTsKKyAqLworVGVtcGxhdGUucHJvdG90
eXBlLnNob3cgPSBmdW5jdGlvbihkYXRhKSB7CisgIHZhciBpLCBsCisgIHZhciB2aWV3ID0gJycK
KworICBmb3IgKGkgPSAwLCBsID0gZGF0YS5sZW5ndGg7IGkgPCBsOyBpKyspIHsKKyAgICB2YXIg
dGVtcGxhdGUgPSB0aGlzLmRlZmF1bHRUZW1wbGF0ZQorICAgIHZhciBjb21wbGV0ZWQgPSAnJwor
ICAgIHZhciBjaGVja2VkID0gJycKKworICAgIGlmIChkYXRhW2ldLmNvbXBsZXRlZCkgeworICAg
ICAgY29tcGxldGVkID0gJ2NvbXBsZXRlZCcKKyAgICAgIGNoZWNrZWQgPSAnY2hlY2tlZCcKKyAg
ICB9CisKKyAgICB0ZW1wbGF0ZSA9IHRlbXBsYXRlLnJlcGxhY2UoJ3t7aWR9fScsIGRhdGFbaV0u
aWQpCisgICAgdGVtcGxhdGUgPSB0ZW1wbGF0ZS5yZXBsYWNlKCd7e3RpdGxlfX0nLCBlc2NhcGUo
ZGF0YVtpXS50aXRsZSkpCisgICAgdGVtcGxhdGUgPSB0ZW1wbGF0ZS5yZXBsYWNlKCd7e2NvbXBs
ZXRlZH19JywgY29tcGxldGVkKQorICAgIHRlbXBsYXRlID0gdGVtcGxhdGUucmVwbGFjZSgne3tj
aGVja2VkfX0nLCBjaGVja2VkKQorCisgICAgdmlldyA9IHZpZXcgKyB0ZW1wbGF0ZQorICB9CisK
KyAgcmV0dXJuIHZpZXcKK30KKworLyoqCisgKiBEaXNwbGF5cyBhIGNvdW50ZXIgb2YgaG93IG1h
bnkgdG8gZG9zIGFyZSBsZWZ0IHRvIGNvbXBsZXRlCisgKgorICogQHBhcmFtIHtudW1iZXJ9IGFj
dGl2ZVRvZG9zIFRoZSBudW1iZXIgb2YgYWN0aXZlIHRvZG9zLgorICogQHJldHVybnMge3N0cmlu
Z30gU3RyaW5nIGNvbnRhaW5pbmcgdGhlIGNvdW50CisgKi8KK1RlbXBsYXRlLnByb3RvdHlwZS5p
dGVtQ291bnRlciA9IGZ1bmN0aW9uKGFjdGl2ZVRvZG9zKSB7CisgIHZhciBwbHVyYWwgPSBhY3Rp
dmVUb2RvcyA9PT0gMSA/ICcnIDogJ3MnCisKKyAgcmV0dXJuICc8c3Ryb25nPicgKyBhY3RpdmVU
b2RvcyArICc8L3N0cm9uZz4gaXRlbScgKyBwbHVyYWwgKyAnIGxlZnQnCit9CisKKy8qKgorICog
VXBkYXRlcyB0aGUgdGV4dCB3aXRoaW4gdGhlICJDbGVhciBjb21wbGV0ZWQiIGJ1dHRvbgorICoK
KyAqIEBwYXJhbSAge1t0eXBlXX0gY29tcGxldGVkVG9kb3MgVGhlIG51bWJlciBvZiBjb21wbGV0
ZWQgdG9kb3MuCisgKiBAcmV0dXJucyB7c3RyaW5nfSBTdHJpbmcgY29udGFpbmluZyB0aGUgY291
bnQKKyAqLworVGVtcGxhdGUucHJvdG90eXBlLmNsZWFyQ29tcGxldGVkQnV0dG9uID0gZnVuY3Rp
b24oY29tcGxldGVkVG9kb3MpIHsKKyAgaWYgKGNvbXBsZXRlZFRvZG9zID4gMCkgeworICAgIHJl
dHVybiAnQ2xlYXIgY29tcGxldGVkJworICB9IGVsc2UgeworICAgIHJldHVybiAnJworICB9Cit9
CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2Rv
bXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svc3JjL3RvZG8uanMgYi9Q
ZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhh
bXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svc3JjL3RvZG8uanMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTUxY2Yz
NjFhYTM1ZTIzNGQyYjI2N2U4NjY3ZWIwYTg3ODY0YmY2NgotLS0gL2Rldi9udWxsCisrKyBiL1Bl
cmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFt
cGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9zcmMvdG9kby5qcwpAQCAtMCwwICsxLDQxIEBACitp
bXBvcnQgVmlldyBmcm9tICcuL3ZpZXcnCitpbXBvcnQgQ29udHJvbGxlciBmcm9tICcuL2NvbnRy
b2xsZXInCitpbXBvcnQgTW9kZWwgZnJvbSAnLi9tb2RlbCcKK2ltcG9ydCBTdG9yZSBmcm9tICcu
L3N0b3JlJworaW1wb3J0IFRlbXBsYXRlIGZyb20gJy4vdGVtcGxhdGUnCitpbXBvcnQge3JlbW92
ZX0gZnJvbSAnLi9oZWxwZXJzJworCitleHBvcnQge3VwZGF0ZVRvZG8sIGdldFRvZG8sIHN1YnNj
cmliZX0KKworbGV0IHRvZG8KK2NvbnN0IHN1YnNjcmliZXJzID0gW10KKworLyoqCisgKiBTZXRz
IHVwIGEgYnJhbmQgbmV3IFRvZG8gbGlzdC4KKyAqCisgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBU
aGUgbmFtZSBvZiB5b3VyIG5ldyB0byBkbyBsaXN0LgorICovCitmdW5jdGlvbiBUb2RvKG5hbWUp
IHsKKyAgdGhpcy5zdG9yYWdlID0gbmV3IFN0b3JlKG5hbWUpCisgIHRoaXMubW9kZWwgPSBuZXcg
TW9kZWwodGhpcy5zdG9yYWdlKQorICB0aGlzLnRlbXBsYXRlID0gbmV3IFRlbXBsYXRlKCkKKyAg
dGhpcy52aWV3ID0gbmV3IFZpZXcodGhpcy50ZW1wbGF0ZSkKKyAgdGhpcy5jb250cm9sbGVyID0g
bmV3IENvbnRyb2xsZXIodGhpcy5tb2RlbCwgdGhpcy52aWV3KQorfQorCitmdW5jdGlvbiB1cGRh
dGVUb2RvKCkgeworICB0b2RvID0gbmV3IFRvZG8oJ3RvZG9zLXZhbmlsbGFqcycpCisgIHRvZG8u
Y29udHJvbGxlci5zZXRWaWV3KGRvY3VtZW50LmxvY2F0aW9uLmhhc2gpCisgIHN1YnNjcmliZXJz
LmZvckVhY2gocyA9PiBzKCkpCit9CisKK2Z1bmN0aW9uIGdldFRvZG8oKSB7CisgIHJldHVybiB0
b2RvCit9CisKK2Z1bmN0aW9uIHN1YnNjcmliZShjYikgeworICBzdWJzY3JpYmVycy5wdXNoKGNi
KQorICByZXR1cm4gZnVuY3Rpb24gdW5zdWJzY3JpYmUoKSB7CisgICAgcmVtb3ZlKHN1YnNjcmli
ZXJzLCBjYikKKyAgfQorfQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRl
ci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNr
L3NyYy92aWV3LmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9k
b212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrL3NyYy92aWV3LmpzCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjMxNWVkNWM1ZDI1ZTZiMGFhMDZmNzI3ZjFhNzhhN2QwYmExMGZlMjEKLS0tIC9k
ZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2Rv
bXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svc3JjL3ZpZXcuanMKQEAg
LTAsMCArMSwyMTQgQEAKKy8qIGVzbGludCBuby1pbnZhbGlkLXRoaXM6IDAsIGNvbXBsZXhpdHk6
WzIsIDldICovCitpbXBvcnQge3FzLCBxc2EsICRvbiwgJHBhcmVudCwgJGRlbGVnYXRlfSBmcm9t
ICcuL2hlbHBlcnMnCisKKy8qKgorICogVmlldyB0aGF0IGFic3RyYWN0cyBhd2F5IHRoZSBicm93
c2VyJ3MgRE9NIGNvbXBsZXRlbHkuCisgKiBJdCBoYXMgdHdvIHNpbXBsZSBlbnRyeSBwb2ludHM6
CisgKgorICogICAtIGJpbmQoZXZlbnROYW1lLCBoYW5kbGVyKQorICogICAgIFRha2VzIGEgdG9k
byBhcHBsaWNhdGlvbiBldmVudCBhbmQgcmVnaXN0ZXJzIHRoZSBoYW5kbGVyCisgKiAgIC0gcmVu
ZGVyKGNvbW1hbmQsIHBhcmFtZXRlck9iamVjdCkKKyAqICAgICBSZW5kZXJzIHRoZSBnaXZlbiBj
b21tYW5kIHdpdGggdGhlIG9wdGlvbnMKKyAqLworZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmlldyB7
CisgIGNvbnN0cnVjdG9yKHRlbXBsYXRlKSB7CisgICAgdGhpcy50ZW1wbGF0ZSA9IHRlbXBsYXRl
CisKKyAgICB0aGlzLkVOVEVSX0tFWSA9IDEzCisgICAgdGhpcy5FU0NBUEVfS0VZID0gMjcKKwor
ICAgIHRoaXMuJHRvZG9MaXN0ID0gcXMoJy50b2RvLWxpc3QnKQorICAgIHRoaXMuJHRvZG9JdGVt
Q291bnRlciA9IHFzKCcudG9kby1jb3VudCcpCisgICAgdGhpcy4kY2xlYXJDb21wbGV0ZWQgPSBx
cygnLmNsZWFyLWNvbXBsZXRlZCcpCisgICAgdGhpcy4kbWFpbiA9IHFzKCcubWFpbicpCisgICAg
dGhpcy4kZm9vdGVyID0gcXMoJy5mb290ZXInKQorICAgIHRoaXMuJHRvZ2dsZUFsbCA9IHFzKCcu
dG9nZ2xlLWFsbCcpCisgICAgdGhpcy4kbmV3VG9kbyA9IHFzKCcubmV3LXRvZG8nKQorICB9CisK
KyAgX3JlbW92ZUl0ZW0oaWQpIHsKKyAgICB2YXIgZWxlbSA9IHFzKCdbZGF0YS1pZD0iJyArIGlk
ICsgJyJdJykKKworICAgIGlmIChlbGVtKSB7CisgICAgICB0aGlzLiR0b2RvTGlzdC5yZW1vdmVD
aGlsZChlbGVtKQorICAgIH0KKyAgfQorCisgIF9jbGVhckNvbXBsZXRlZEJ1dHRvbihjb21wbGV0
ZWRDb3VudCwgdmlzaWJsZSkgeworICAgIHRoaXMuJGNsZWFyQ29tcGxldGVkLmlubmVySFRNTCA9
IHRoaXMudGVtcGxhdGUuY2xlYXJDb21wbGV0ZWRCdXR0b24oY29tcGxldGVkQ291bnQpCisgICAg
dGhpcy4kY2xlYXJDb21wbGV0ZWQuc3R5bGUuZGlzcGxheSA9IHZpc2libGUgPyAnYmxvY2snIDog
J25vbmUnCisgIH0KKworICBfZWRpdEl0ZW1Eb25lKGlkLCB0aXRsZSkgeworICAgIHZhciBsaXN0
SXRlbSA9IHFzKCdbZGF0YS1pZD0iJyArIGlkICsgJyJdJykKKworICAgIGlmICghbGlzdEl0ZW0p
IHsKKyAgICAgIHJldHVybgorICAgIH0KKworICAgIHZhciBpbnB1dCA9IHFzKCdpbnB1dC5lZGl0
JywgbGlzdEl0ZW0pCisgICAgbGlzdEl0ZW0ucmVtb3ZlQ2hpbGQoaW5wdXQpCisKKyAgICBsaXN0
SXRlbS5jbGFzc05hbWUgPSBsaXN0SXRlbS5jbGFzc05hbWUucmVwbGFjZSgnZWRpdGluZycsICcn
KQorCisgICAgcXNhKCdsYWJlbCcsIGxpc3RJdGVtKS5mb3JFYWNoKGZ1bmN0aW9uKGxhYmVsKSB7
CisgICAgICBsYWJlbC50ZXh0Q29udGVudCA9IHRpdGxlCisgICAgfSkKKyAgfQorCisgIHJlbmRl
cih2aWV3Q21kLCBwYXJhbWV0ZXIpIHsKKyAgICB2YXIgdGhhdCA9IHRoaXMKKyAgICB2YXIgdmll
d0NvbW1hbmRzID0geworICAgICAgc2hvd0VudHJpZXM6IGZ1bmN0aW9uKCkgeworICAgICAgICB0
aGF0LiR0b2RvTGlzdC5pbm5lckhUTUwgPSB0aGF0LnRlbXBsYXRlLnNob3cocGFyYW1ldGVyKQor
ICAgICAgfSwKKyAgICAgIHJlbW92ZUl0ZW06IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGF0Ll9y
ZW1vdmVJdGVtKHBhcmFtZXRlcikKKyAgICAgIH0sCisgICAgICB1cGRhdGVFbGVtZW50Q291bnQ6
IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGF0LiR0b2RvSXRlbUNvdW50ZXIuaW5uZXJIVE1MID0g
dGhhdC50ZW1wbGF0ZS5pdGVtQ291bnRlcihwYXJhbWV0ZXIpCisgICAgICB9LAorICAgICAgY2xl
YXJDb21wbGV0ZWRCdXR0b246IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGF0Ll9jbGVhckNvbXBs
ZXRlZEJ1dHRvbihwYXJhbWV0ZXIuY29tcGxldGVkLCBwYXJhbWV0ZXIudmlzaWJsZSkKKyAgICAg
IH0sCisgICAgICBjb250ZW50QmxvY2tWaXNpYmlsaXR5OiBmdW5jdGlvbigpIHsKKyAgICAgICAg
dGhhdC4kbWFpbi5zdHlsZS5kaXNwbGF5ID0gdGhhdC4kZm9vdGVyLnN0eWxlLmRpc3BsYXkgPSBw
YXJhbWV0ZXIudmlzaWJsZSA/ICdibG9jaycgOiAnbm9uZScKKyAgICAgIH0sCisgICAgICB0b2dn
bGVBbGw6IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGF0LiR0b2dnbGVBbGwuY2hlY2tlZCA9IHBh
cmFtZXRlci5jaGVja2VkCisgICAgICB9LAorICAgICAgc2V0RmlsdGVyOiBmdW5jdGlvbigpIHsK
KyAgICAgICAgX3NldEZpbHRlcihwYXJhbWV0ZXIpCisgICAgICB9LAorICAgICAgY2xlYXJOZXdU
b2RvOiBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhhdC4kbmV3VG9kby52YWx1ZSA9ICcnCisgICAg
ICB9LAorICAgICAgZWxlbWVudENvbXBsZXRlOiBmdW5jdGlvbigpIHsKKyAgICAgICAgX2VsZW1l
bnRDb21wbGV0ZShwYXJhbWV0ZXIuaWQsIHBhcmFtZXRlci5jb21wbGV0ZWQpCisgICAgICB9LAor
ICAgICAgZWRpdEl0ZW06IGZ1bmN0aW9uKCkgeworICAgICAgICBfZWRpdEl0ZW0ocGFyYW1ldGVy
LmlkLCBwYXJhbWV0ZXIudGl0bGUpCisgICAgICB9LAorICAgICAgZWRpdEl0ZW1Eb25lOiBmdW5j
dGlvbigpIHsKKyAgICAgICAgdGhhdC5fZWRpdEl0ZW1Eb25lKHBhcmFtZXRlci5pZCwgcGFyYW1l
dGVyLnRpdGxlKQorICAgICAgfQorICAgIH0KKworICAgIHZpZXdDb21tYW5kc1t2aWV3Q21kXSgp
CisgIH0KKworICBfYmluZEl0ZW1FZGl0RG9uZShoYW5kbGVyKSB7CisgICAgdmFyIHRoYXQgPSB0
aGlzCisgICAgJGRlbGVnYXRlKHRoYXQuJHRvZG9MaXN0LCAnbGkgLmVkaXQnLCAnYmx1cicsIGZ1
bmN0aW9uKCkgeworICAgICAgaWYgKCF0aGlzLmRhdGFzZXQuaXNjYW5jZWxlZCkgeworICAgICAg
ICBoYW5kbGVyKHsKKyAgICAgICAgICBpZDogX2l0ZW1JZCh0aGlzKSwKKyAgICAgICAgICB0aXRs
ZTogdGhpcy52YWx1ZQorICAgICAgICB9KQorICAgICAgfQorICAgIH0pCisKKyAgICAkZGVsZWdh
dGUodGhhdC4kdG9kb0xpc3QsICdsaSAuZWRpdCcsICdrZXlwcmVzcycsIGZ1bmN0aW9uKGV2ZW50
KSB7CisgICAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gdGhhdC5FTlRFUl9LRVkpIHsKKyAgICAg
ICAgLy8gUmVtb3ZlIHRoZSBjdXJzb3IgZnJvbSB0aGUgaW5wdXQgd2hlbiB5b3UgaGl0IGVudGVy
IGp1c3QgbGlrZSBpZiBpdAorICAgICAgICAvLyB3ZXJlIGEgcmVhbCBmb3JtCisgICAgICAgIHRo
aXMuYmx1cigpCisgICAgICB9CisgICAgfSkKKyAgfQorCisgIF9iaW5kSXRlbUVkaXRDYW5jZWwo
aGFuZGxlcikgeworICAgIHZhciB0aGF0ID0gdGhpcworICAgICRkZWxlZ2F0ZSh0aGF0LiR0b2Rv
TGlzdCwgJ2xpIC5lZGl0JywgJ2tleXVwJywgZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgIGlmIChl
dmVudC5rZXlDb2RlID09PSB0aGF0LkVTQ0FQRV9LRVkpIHsKKyAgICAgICAgdGhpcy5kYXRhc2V0
LmlzY2FuY2VsZWQgPSB0cnVlCisgICAgICAgIHRoaXMuYmx1cigpCisKKyAgICAgICAgaGFuZGxl
cih7aWQ6IF9pdGVtSWQodGhpcyl9KQorICAgICAgfQorICAgIH0pCisgIH0KKworICBiaW5kKGV2
ZW50LCBoYW5kbGVyKSB7CisgICAgdmFyIHRoYXQgPSB0aGlzCisgICAgaWYgKGV2ZW50ID09PSAn
bmV3VG9kbycpIHsKKyAgICAgICRvbih0aGF0LiRuZXdUb2RvLCAnY2hhbmdlJywgZnVuY3Rpb24o
KSB7CisgICAgICAgIGhhbmRsZXIodGhhdC4kbmV3VG9kby52YWx1ZSkKKyAgICAgIH0pCisKKyAg
ICB9IGVsc2UgaWYgKGV2ZW50ID09PSAncmVtb3ZlQ29tcGxldGVkJykgeworICAgICAgJG9uKHRo
YXQuJGNsZWFyQ29tcGxldGVkLCAnY2xpY2snLCBmdW5jdGlvbigpIHsKKyAgICAgICAgaGFuZGxl
cigpCisgICAgICB9KQorCisgICAgfSBlbHNlIGlmIChldmVudCA9PT0gJ3RvZ2dsZUFsbCcpIHsK
KyAgICAgICRvbih0aGF0LiR0b2dnbGVBbGwsICdjbGljaycsIGZ1bmN0aW9uKCkgeworICAgICAg
ICBoYW5kbGVyKHtjb21wbGV0ZWQ6IHRoaXMuY2hlY2tlZH0pCisgICAgICB9KQorCisgICAgfSBl
bHNlIGlmIChldmVudCA9PT0gJ2l0ZW1FZGl0JykgeworICAgICAgJGRlbGVnYXRlKHRoYXQuJHRv
ZG9MaXN0LCAnbGkgbGFiZWwnLCAnZGJsY2xpY2snLCBmdW5jdGlvbigpIHsKKyAgICAgICAgaGFu
ZGxlcih7aWQ6IF9pdGVtSWQodGhpcyl9KQorICAgICAgfSkKKworICAgIH0gZWxzZSBpZiAoZXZl
bnQgPT09ICdpdGVtUmVtb3ZlJykgeworICAgICAgJGRlbGVnYXRlKHRoYXQuJHRvZG9MaXN0LCAn
LmRlc3Ryb3knLCAnY2xpY2snLCBmdW5jdGlvbigpIHsKKyAgICAgICAgaGFuZGxlcih7aWQ6IF9p
dGVtSWQodGhpcyl9KQorICAgICAgfSkKKworICAgIH0gZWxzZSBpZiAoZXZlbnQgPT09ICdpdGVt
VG9nZ2xlJykgeworICAgICAgJGRlbGVnYXRlKHRoYXQuJHRvZG9MaXN0LCAnLnRvZ2dsZScsICdj
bGljaycsIGZ1bmN0aW9uKCkgeworICAgICAgICBoYW5kbGVyKHsKKyAgICAgICAgICBpZDogX2l0
ZW1JZCh0aGlzKSwKKyAgICAgICAgICBjb21wbGV0ZWQ6IHRoaXMuY2hlY2tlZAorICAgICAgICB9
KQorICAgICAgfSkKKworICAgIH0gZWxzZSBpZiAoZXZlbnQgPT09ICdpdGVtRWRpdERvbmUnKSB7
CisgICAgICB0aGF0Ll9iaW5kSXRlbUVkaXREb25lKGhhbmRsZXIpCisKKyAgICB9IGVsc2UgaWYg
KGV2ZW50ID09PSAnaXRlbUVkaXRDYW5jZWwnKSB7CisgICAgICB0aGF0Ll9iaW5kSXRlbUVkaXRD
YW5jZWwoaGFuZGxlcikKKyAgICB9CisgIH0KK30KKworZnVuY3Rpb24gX3NldEZpbHRlcihjdXJy
ZW50UGFnZSkgeworICBxcygnLmZpbHRlcnMgLnNlbGVjdGVkJykuY2xhc3NOYW1lID0gJycKKyAg
cXMoJy5maWx0ZXJzIFtocmVmPSIjLycgKyBjdXJyZW50UGFnZSArICciXScpLmNsYXNzTmFtZSA9
ICdzZWxlY3RlZCcKK30KKworZnVuY3Rpb24gX2VsZW1lbnRDb21wbGV0ZShpZCwgY29tcGxldGVk
KSB7CisgIHZhciBsaXN0SXRlbSA9IHFzKCdbZGF0YS1pZD0iJyArIGlkICsgJyJdJykKKworICBp
ZiAoIWxpc3RJdGVtKSB7CisgICAgcmV0dXJuCisgIH0KKworICBsaXN0SXRlbS5jbGFzc05hbWUg
PSBjb21wbGV0ZWQgPyAnY29tcGxldGVkJyA6ICcnCisKKyAgLy8gSW4gY2FzZSBpdCB3YXMgdG9n
Z2xlZCBmcm9tIGFuIGV2ZW50IGFuZCBub3QgYnkgY2xpY2tpbmcgdGhlIGNoZWNrYm94CisgIHFz
KCdpbnB1dCcsIGxpc3RJdGVtKS5jaGVja2VkID0gY29tcGxldGVkCit9CisKK2Z1bmN0aW9uIF9l
ZGl0SXRlbShpZCwgdGl0bGUpIHsKKyAgdmFyIGxpc3RJdGVtID0gcXMoJ1tkYXRhLWlkPSInICsg
aWQgKyAnIl0nKQorCisgIGlmICghbGlzdEl0ZW0pIHsKKyAgICByZXR1cm4KKyAgfQorCisgIGxp
c3RJdGVtLmNsYXNzTmFtZSA9IGxpc3RJdGVtLmNsYXNzTmFtZSArICcgZWRpdGluZycKKworICB2
YXIgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpCisgIGlucHV0LmNsYXNz
TmFtZSA9ICdlZGl0JworCisgIGxpc3RJdGVtLmFwcGVuZENoaWxkKGlucHV0KQorICBpbnB1dC5m
b2N1cygpCisgIGlucHV0LnZhbHVlID0gdGl0bGUKK30KKworZnVuY3Rpb24gX2l0ZW1JZChlbGVt
ZW50KSB7CisgIHZhciBsaSA9ICRwYXJlbnQoZWxlbWVudCwgJ2xpJykKKyAgcmV0dXJuIHBhcnNl
SW50KGxpLmRhdGFzZXQuaWQsIDEwKQorfQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9T
cGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJl
bC13ZWJwYWNrL3dlYnBhY2suY29uZmlnLmJhYmVsLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVl
ZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13
ZWJwYWNrL3dlYnBhY2suY29uZmlnLmJhYmVsLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRlYzM3MWJlNGU1NWI0
NDg3ZGM2ZTRmOTdjYjk5OWNmYTBhNjM0MDMKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5j
ZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMy
MDE1LWJhYmVsLXdlYnBhY2svd2VicGFjay5jb25maWcuYmFiZWwuanMKQEAgLTAsMCArMSw2MCBA
QAorLyogZXNsaW50IG5vLWNvbnNvbGU6Im9mZiIgKi8KK2NvbnN0IHtyZXNvbHZlfSA9IHJlcXVp
cmUoJ3BhdGgnKQorY29uc3Qgd2VicGFjayA9IHJlcXVpcmUoJ3dlYnBhY2snKQorY29uc3QgUHJv
Z3Jlc3NCYXJQbHVnaW4gPSByZXF1aXJlKCdwcm9ncmVzcy1iYXItd2VicGFjay1wbHVnaW4nKQor
Y29uc3QgSHRtbFdlYnBhY2tQbHVnaW4gPSByZXF1aXJlKCdodG1sLXdlYnBhY2stcGx1Z2luJykK
K2NvbnN0IElubGluZU1hbmlmZXN0V2VicGFja1BsdWdpbiA9IHJlcXVpcmUoJ2lubGluZS1tYW5p
ZmVzdC13ZWJwYWNrLXBsdWdpbicpCitjb25zdCBFeHRyYWN0VGV4dFBsdWdpbiA9IHJlcXVpcmUo
J2V4dHJhY3QtdGV4dC13ZWJwYWNrLXBsdWdpbicpCitjb25zdCB3ZWJwYWNrVmFsaWRhdG9yID0g
cmVxdWlyZSgnd2VicGFjay12YWxpZGF0b3InKQorY29uc3Qge2dldElmVXRpbHMsIHJlbW92ZUVt
cHR5fSA9IHJlcXVpcmUoJ3dlYnBhY2stY29uZmlnLXV0aWxzJykKKworbW9kdWxlLmV4cG9ydHMg
PSBlbnYgPT4geworICBjb25zdCB7aWZQcm9kLCBpZk5vdFByb2R9ID0gZ2V0SWZVdGlscyhlbnYp
CisgIGNvbnN0IGNvbmZpZyA9IHdlYnBhY2tWYWxpZGF0b3IoeworICAgIGNvbnRleHQ6IHJlc29s
dmUoJ3NyYycpLAorICAgIGVudHJ5OiB7CisgICAgICBhcHA6ICcuL2Jvb3RzdHJhcC5qcycsCisg
ICAgICB2ZW5kb3I6IFsndG9kb212Yy1hcHAtY3NzL2luZGV4LmNzcyddLAorICAgIH0sCisgICAg
b3V0cHV0OiB7CisgICAgICBmaWxlbmFtZTogaWZQcm9kKCdidW5kbGUuW25hbWVdLltjaHVua2hh
c2hdLmpzJywgJ2J1bmRsZS5bbmFtZV0uanMnKSwKKyAgICAgIHBhdGg6IHJlc29sdmUoJ2Rpc3Qn
KSwKKyAgICAgIHBhdGhpbmZvOiBpZk5vdFByb2QoKSwKKyAgICB9LAorICAgIGRldnRvb2w6IGlm
UHJvZCgnc291cmNlLW1hcCcsICdldmFsJyksCisgICAgbW9kdWxlOiB7CisgICAgICBsb2FkZXJz
OiBbCisgICAgICAgIHt0ZXN0OiAvXC5qcyQvLCBsb2FkZXJzOiBbJ2JhYmVsJ10sIGV4Y2x1ZGU6
IC9ub2RlX21vZHVsZXMvfSwKKyAgICAgICAgeworICAgICAgICAgIHRlc3Q6IC9cLmNzcyQvLAor
ICAgICAgICAgIGxvYWRlcjogRXh0cmFjdFRleHRQbHVnaW4uZXh0cmFjdCh7CisgICAgICAgICAg
ICBmYWxsYmFja0xvYWRlcjogJ3N0eWxlJywKKyAgICAgICAgICAgIGxvYWRlcjogJ2NzcycsCisg
ICAgICAgICAgfSkKKyAgICAgICAgfSwKKyAgICAgIF0sCisgICAgfSwKKyAgICBwbHVnaW5zOiBy
ZW1vdmVFbXB0eShbCisgICAgICBuZXcgUHJvZ3Jlc3NCYXJQbHVnaW4oKSwKKyAgICAgIG5ldyBF
eHRyYWN0VGV4dFBsdWdpbihpZlByb2QoJ3N0eWxlcy5bbmFtZV0uW2NodW5raGFzaF0uY3NzJywg
J3N0eWxlcy5bbmFtZV0uY3NzJykpLAorICAgICAgaWZQcm9kKG5ldyBJbmxpbmVNYW5pZmVzdFdl
YnBhY2tQbHVnaW4oKSksCisgICAgICBpZlByb2QobmV3IHdlYnBhY2sub3B0aW1pemUuQ29tbW9u
c0NodW5rUGx1Z2luKHsKKyAgICAgICAgbmFtZXM6IFsndmVuZG9yJywgJ21hbmlmZXN0J10sCisg
ICAgICB9KSksCisgICAgICBuZXcgSHRtbFdlYnBhY2tQbHVnaW4oeworICAgICAgICB0ZW1wbGF0
ZTogJy4vaW5kZXguaHRtbCcsCisgICAgICAgIGluamVjdDogJ2hlYWQnLAorICAgICAgfSksCisg
ICAgICBuZXcgd2VicGFjay5EZWZpbmVQbHVnaW4oeworICAgICAgICAncHJvY2Vzcy5lbnYnOiB7
CisgICAgICAgICAgTk9ERV9FTlY6IGlmUHJvZCgnInByb2R1Y3Rpb24iJywgJyJkZXZlbG9wbWVu
dCInKQorICAgICAgICB9CisgICAgICB9KSwKKyAgICBdKSwKKyAgfSkKKyAgaWYgKGVudi5kZWJ1
ZykgeworICAgIGNvbnNvbGUubG9nKGNvbmZpZykKKyAgICBkZWJ1Z2dlciAvLyBlc2xpbnQtZGlz
YWJsZS1saW5lCisgIH0KKyAgcmV0dXJuIGNvbmZpZworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>309854</attachid>
            <date>2017-05-11 19:55:31 -0700</date>
            <delta_ts>2017-05-11 20:19:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171452-20170511195531.patch</filename>
            <type>text/plain</type>
            <size>68929</size>
            <attacher name="Addy Osmani">addyo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE1OTYwCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCmluZGV4IGJmMTgxODE2ODc2
NDhkODA3YzE2NjQyOWQxM2MzMDZkMGM1NTk5NjQuLjEzZTNkN2FkMmJkYWU0MTZmY2E5NzBkMjBl
Y2EzMjVkNDE2MmFlODIgMTAwNjQ0Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCisr
KyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzUgQEAKKzIwMTctMDUt
MTEgIEFkZHkgT3NtYW5pICA8YWRkeW9zbWFuaUBnbWFpbC5jb20+CisKKyAgICAgICAgU3BlZWRv
bWV0ZXI6IEFkZCBhbiBFUzIwMTUgKEJhYmVsICsgV2VicGFjaykgVG9kb01WQyBpbXBsZW1lbnRh
dGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcx
NDUyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRk
cyBFUzIwMTUgQmFiZWwgKyBXZWJwYWNrIFRvZG9NVkMgaW1wbGVtCisKKyAgICAgICAgKiBTcGVl
ZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13
ZWJwYWNrLy5iYWJlbHJjOiBBZGRlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMv
dG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrLy5lc2xpbnRpZ25v
cmU6IEFkZGVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3Zhbmls
bGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svZGlzdC9idW5kbGUuYXBwLjQyMWViNmJh
Y2EwMjIxOGU5ODVlLmpzOiBBZGRlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMv
dG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrL2Rpc3QvYnVuZGxl
Lm1hbmlmZXN0LmJjMDQwM2NiNzA3NjhiMTRhZGRkLmpzOiBBZGRlZC4KKyAgICAgICAgKiBTcGVl
ZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13
ZWJwYWNrL2Rpc3QvYnVuZGxlLnZlbmRvci5kYTFhMmQ2NDEwNmVjNTRkNGY1Ny5qczogQWRkZWQu
CisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxl
cy9lczIwMTUtYmFiZWwtd2VicGFjay9kaXN0L2luZGV4Lmh0bWw6IEFkZGVkLgorICAgICAgICAq
IFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJh
YmVsLXdlYnBhY2svZGlzdC9zdHlsZXMuYXBwLjQyMWViNmJhY2EwMjIxOGU5ODVlLmNzczogQWRk
ZWQuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFt
cGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9kaXN0L3N0eWxlcy52ZW5kb3IuZGExYTJkNjQxMDZl
YzU0ZDRmNTcuY3NzOiBBZGRlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9k
b212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrL3BhY2thZ2UuanNvbjog
QWRkZWQuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1l
eGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9zcmMvYXBwLmNzczogQWRkZWQuCisgICAgICAg
ICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUt
YmFiZWwtd2VicGFjay9zcmMvYXBwLmpzOiBBZGRlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9y
ZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrL3Ny
Yy9ib290c3RyYXAuanM6IEFkZGVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90
b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svc3JjL2NvbnRyb2xs
ZXIuanM6IEFkZGVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3Zh
bmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svc3JjL2NvbnRyb2xsZXIudGVzdC5q
czogQWRkZWQuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxs
YS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9zcmMvaGVscGVycy5qczogQWRkZWQuCisg
ICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9l
czIwMTUtYmFiZWwtd2VicGFjay9zcmMvaW5kZXguaHRtbDogQWRkZWQuCisgICAgICAgICogU3Bl
ZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwt
d2VicGFjay9zcmMvbW9kZWwuanM6IEFkZGVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291
cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svc3JjL3N0
b3JlLmpzOiBBZGRlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92
YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrL3NyYy90ZW1wbGF0ZS5qczogQWRk
ZWQuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFt
cGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9zcmMvdG9kby5qczogQWRkZWQuCisgICAgICAgICog
U3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFi
ZWwtd2VicGFjay9zcmMvdmlldy5qczogQWRkZWQuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVz
b3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay93ZWJw
YWNrLmNvbmZpZy5iYWJlbC5qczogQWRkZWQuCisKIDIwMTctMDQtMjcgIE1pY2hhZWwgU2Fib2Zm
ICA8bXNhYm9mZkBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIGJhY2sgdGVzdHMgaW5hZHZlcnRl
bnRseSBkZWxldGVkIGluIHIyMDUwMzIuCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1Nw
ZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVs
LXdlYnBhY2svLmJhYmVscmMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNl
cy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svLmJhYmVscmMK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNDBhMjMwM2ZiNTljY2E0ZGM1MGZhMDA4MGEzNDg3YjFiNGUxNjFhYQotLS0g
L2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3Rv
ZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay8uYmFiZWxyYwpAQCAt
MCwwICsxLDE1IEBACit7CisgICJwcmVzZXRzIjogWworICAgIFsiZXMyMDE1IiwgeyJtb2R1bGVz
IjogZmFsc2V9XSwKKyAgICAiZXMyMDE2IiwKKyAgICAic3RhZ2UtMiIsCisgICAgInJlYWN0Igor
ICBdLAorICAiZW52IjogeworICAgICJ0ZXN0IjogeworICAgICAgInBsdWdpbnMiOiBbCisgICAg
ICAgIFsiX19jb3ZlcmFnZV9fIiwgeyJpZ25vcmUiOiAiKi4rKHRlc3R8c3R1YikuKiJ9XQorICAg
ICAgXQorICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9t
ZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJw
YWNrLy5lc2xpbnRpZ25vcmUgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNl
cy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svLmVzbGludGln
bm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4xZjliZmZhNTJlMTcwYTUyYmQ3YjcxZTVmY2RiODZjNDMzZTk0N2U2
Ci0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJj
ZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrLy5lc2xpbnRp
Z25vcmUKQEAgLTAsMCArMSwzIEBACitjb3ZlcmFnZS8KK25vZGVfbW9kdWxlcy8KK2Rpc3QKZGlm
ZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMv
dmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9kaXN0L2J1bmRsZS5hcHAuNDIx
ZWI2YmFjYTAyMjE4ZTk4NWUuanMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291
cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svZGlzdC9i
dW5kbGUuYXBwLjQyMWViNmJhY2EwMjIxOGU5ODVlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhlMTc5ZjM2ZGNj
NTYzNjY5Y2IzNmJhNGYxY2Q5YjA4NjA0MTk1MDcKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3Jt
YW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMv
ZXMyMDE1LWJhYmVsLXdlYnBhY2svZGlzdC9idW5kbGUuYXBwLjQyMWViNmJhY2EwMjIxOGU5ODVl
LmpzCkBAIC0wLDAgKzEsMiBAQAord2VicGFja0pzb25wKFswLDJdLFtmdW5jdGlvbih0LGUsaSl7
InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG8odCxlKXtyZXR1cm4oZXx8ZG9jdW1lbnQpLnF1ZXJ5U2Vs
ZWN0b3IodCl9ZnVuY3Rpb24gbih0LGUpe3JldHVybihlfHxkb2N1bWVudCkucXVlcnlTZWxlY3Rv
ckFsbCh0KX1mdW5jdGlvbiByKHQsZSxpLG8pe3QuYWRkRXZlbnRMaXN0ZW5lcihlLGksISFvKX1m
dW5jdGlvbiBsKHQsZSxpLG8pe2Z1bmN0aW9uIGwoaSl7dmFyIHI9aS50YXJnZXQsbD1uKGUsdCks
YT1BcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGwscik+PTA7YSYmby5jYWxsKHIsaSl9dmFy
IGE9ImJsdXIiPT09aXx8ImZvY3VzIj09PWk7cih0LGksbCxhKX1mdW5jdGlvbiBhKHQsZSl7aWYo
dC5wYXJlbnROb2RlKXJldHVybiB0LnBhcmVudE5vZGUudGFnTmFtZS50b0xvd2VyQ2FzZSgpPT09
ZS50b0xvd2VyQ2FzZSgpP3QucGFyZW50Tm9kZTphKHQucGFyZW50Tm9kZSxlKX1mdW5jdGlvbiBj
KHQsZSl7dmFyIGk9dC5pbmRleE9mKGUpO3JldHVybiBpPT09LTE/dDp2b2lkIHQuc3BsaWNlKGks
MSl9aS5kKGUsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIG99KSxpLmQoZSwiYiIsZnVuY3Rpb24oKXty
ZXR1cm4gbn0pLGkuZChlLCJkIixmdW5jdGlvbigpe3JldHVybiByfSksaS5kKGUsImMiLGZ1bmN0
aW9uKCl7cmV0dXJuIGx9KSxpLmQoZSwiZSIsZnVuY3Rpb24oKXtyZXR1cm4gYX0pLGkuZChlLCJm
IixmdW5jdGlvbigpe3JldHVybiBjfSksTm9kZUxpc3QucHJvdG90eXBlLmZvckVhY2g9QXJyYXku
cHJvdG90eXBlLmZvckVhY2h9LCxmdW5jdGlvbih0LGUsaSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9u
IG8oKXtpLmkobC5hKSgpfXZhciBuPWkoMSkscj0oaS5uKG4pLGkoOSkpLGw9KGkubihyKSxpKDAp
LGkoNykpO2UuYT1vfSxmdW5jdGlvbih0LGUsaSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG8odCxl
KXt2YXIgaT10aGlzO2kubW9kZWw9dCxpLnZpZXc9ZSxpLnZpZXcuYmluZCgibmV3VG9kbyIsZnVu
Y3Rpb24odCl7aS5hZGRJdGVtKHQpfSksaS52aWV3LmJpbmQoIml0ZW1FZGl0IixmdW5jdGlvbih0
KXtpLmVkaXRJdGVtKHQuaWQpfSksaS52aWV3LmJpbmQoIml0ZW1FZGl0RG9uZSIsZnVuY3Rpb24o
dCl7aS5lZGl0SXRlbVNhdmUodC5pZCx0LnRpdGxlKX0pLGkudmlldy5iaW5kKCJpdGVtRWRpdENh
bmNlbCIsZnVuY3Rpb24odCl7aS5lZGl0SXRlbUNhbmNlbCh0LmlkKX0pLGkudmlldy5iaW5kKCJp
dGVtUmVtb3ZlIixmdW5jdGlvbih0KXtpLnJlbW92ZUl0ZW0odC5pZCl9KSxpLnZpZXcuYmluZCgi
aXRlbVRvZ2dsZSIsZnVuY3Rpb24odCl7aS50b2dnbGVDb21wbGV0ZSh0LmlkLHQuY29tcGxldGVk
KX0pLGkudmlldy5iaW5kKCJyZW1vdmVDb21wbGV0ZWQiLGZ1bmN0aW9uKCl7aS5yZW1vdmVDb21w
bGV0ZWRJdGVtcygpfSksaS52aWV3LmJpbmQoInRvZ2dsZUFsbCIsZnVuY3Rpb24odCl7aS50b2dn
bGVBbGwodC5jb21wbGV0ZWQpfSl9ZS5hPW8sby5wcm90b3R5cGUuc2V0Vmlldz1mdW5jdGlvbih0
KXt2YXIgZT10LnNwbGl0KCIvIilbMV0saT1lfHwiIjt0aGlzLl91cGRhdGVGaWx0ZXJTdGF0ZShp
KX0sby5wcm90b3R5cGUuc2hvd0FsbD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dC5tb2RlbC5yZWFk
KGZ1bmN0aW9uKGUpe3Qudmlldy5yZW5kZXIoInNob3dFbnRyaWVzIixlKX0pfSxvLnByb3RvdHlw
ZS5zaG93QWN0aXZlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0Lm1vZGVsLnJlYWQoe2NvbXBsZXRl
ZDohMX0sZnVuY3Rpb24oZSl7dC52aWV3LnJlbmRlcigic2hvd0VudHJpZXMiLGUpfSl9LG8ucHJv
dG90eXBlLnNob3dDb21wbGV0ZWQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3QubW9kZWwucmVhZCh7
Y29tcGxldGVkOiEwfSxmdW5jdGlvbihlKXt0LnZpZXcucmVuZGVyKCJzaG93RW50cmllcyIsZSl9
KX0sby5wcm90b3R5cGUuYWRkSXRlbT1mdW5jdGlvbih0KXt2YXIgZT10aGlzOyIiIT09dC50cmlt
KCkmJmUubW9kZWwuY3JlYXRlKHQsZnVuY3Rpb24oKXtlLnZpZXcucmVuZGVyKCJjbGVhck5ld1Rv
ZG8iKSxlLl9maWx0ZXIoITApfSl9LG8ucHJvdG90eXBlLmVkaXRJdGVtPWZ1bmN0aW9uKHQpe3Zh
ciBlPXRoaXM7ZS5tb2RlbC5yZWFkKHQsZnVuY3Rpb24oaSl7ZS52aWV3LnJlbmRlcigiZWRpdEl0
ZW0iLHtpZDp0LHRpdGxlOmlbMF0udGl0bGV9KX0pfSxvLnByb3RvdHlwZS5lZGl0SXRlbVNhdmU9
ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzO2UudHJpbSgpP2kubW9kZWwudXBkYXRlKHQse3RpdGxl
OmV9LGZ1bmN0aW9uKCl7aS52aWV3LnJlbmRlcigiZWRpdEl0ZW1Eb25lIix7aWQ6dCx0aXRsZTpl
fSl9KTppLnJlbW92ZUl0ZW0odCl9LG8ucHJvdG90eXBlLmVkaXRJdGVtQ2FuY2VsPWZ1bmN0aW9u
KHQpe3ZhciBlPXRoaXM7ZS5tb2RlbC5yZWFkKHQsZnVuY3Rpb24oaSl7ZS52aWV3LnJlbmRlcigi
ZWRpdEl0ZW1Eb25lIix7aWQ6dCx0aXRsZTppWzBdLnRpdGxlfSl9KX0sby5wcm90b3R5cGUucmVt
b3ZlSXRlbT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2UubW9kZWwucmVtb3ZlKHQsZnVuY3Rpb24o
KXtlLnZpZXcucmVuZGVyKCJyZW1vdmVJdGVtIix0KX0pLGUuX2ZpbHRlcigpfSxvLnByb3RvdHlw
ZS5yZW1vdmVDb21wbGV0ZWRJdGVtcz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dC5tb2RlbC5yZWFk
KHtjb21wbGV0ZWQ6ITB9LGZ1bmN0aW9uKGUpe2UuZm9yRWFjaChmdW5jdGlvbihlKXt0LnJlbW92
ZUl0ZW0oZS5pZCl9KX0pLHQuX2ZpbHRlcigpfSxvLnByb3RvdHlwZS50b2dnbGVDb21wbGV0ZT1m
dW5jdGlvbih0LGUsaSl7dmFyIG89dGhpcztvLm1vZGVsLnVwZGF0ZSh0LHtjb21wbGV0ZWQ6ZX0s
ZnVuY3Rpb24oKXtvLnZpZXcucmVuZGVyKCJlbGVtZW50Q29tcGxldGUiLHtpZDp0LGNvbXBsZXRl
ZDplfSl9KSxpfHxvLl9maWx0ZXIoKX0sby5wcm90b3R5cGUudG9nZ2xlQWxsPWZ1bmN0aW9uKHQp
e3ZhciBlPXRoaXM7ZS5tb2RlbC5yZWFkKHtjb21wbGV0ZWQ6IXR9LGZ1bmN0aW9uKGkpe2kuZm9y
RWFjaChmdW5jdGlvbihpKXtlLnRvZ2dsZUNvbXBsZXRlKGkuaWQsdCwhMCl9KX0pLGUuX2ZpbHRl
cigpfSxvLnByb3RvdHlwZS5fdXBkYXRlQ291bnQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3QubW9k
ZWwuZ2V0Q291bnQoZnVuY3Rpb24oZSl7dC52aWV3LnJlbmRlcigidXBkYXRlRWxlbWVudENvdW50
IixlLmFjdGl2ZSksdC52aWV3LnJlbmRlcigiY2xlYXJDb21wbGV0ZWRCdXR0b24iLHtjb21wbGV0
ZWQ6ZS5jb21wbGV0ZWQsdmlzaWJsZTplLmNvbXBsZXRlZD4wfSksdC52aWV3LnJlbmRlcigidG9n
Z2xlQWxsIix7Y2hlY2tlZDplLmNvbXBsZXRlZD09PWUudG90YWx9KSx0LnZpZXcucmVuZGVyKCJj
b250ZW50QmxvY2tWaXNpYmlsaXR5Iix7dmlzaWJsZTplLnRvdGFsPjB9KX0pfSxvLnByb3RvdHlw
ZS5fZmlsdGVyPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2FjdGl2ZVJvdXRlLmNoYXJBdCgwKS50
b1VwcGVyQ2FzZSgpK3RoaXMuX2FjdGl2ZVJvdXRlLnN1YnN0cigxKTt0aGlzLl91cGRhdGVDb3Vu
dCgpLCh0fHwiQWxsIiE9PXRoaXMuX2xhc3RBY3RpdmVSb3V0ZXx8dGhpcy5fbGFzdEFjdGl2ZVJv
dXRlIT09ZSkmJnRoaXNbInNob3ciK2VdKCksdGhpcy5fbGFzdEFjdGl2ZVJvdXRlPWV9LG8ucHJv
dG90eXBlLl91cGRhdGVGaWx0ZXJTdGF0ZT1mdW5jdGlvbih0KXt0PXQuc3BsaXQoIj8iKVswXSx0
aGlzLl9hY3RpdmVSb3V0ZT10LCIiPT09dCYmKHRoaXMuX2FjdGl2ZVJvdXRlPSJBbGwiKSx0aGlz
Ll9maWx0ZXIoKSx0aGlzLnZpZXcucmVuZGVyKCJzZXRGaWx0ZXIiLHQpfX0sZnVuY3Rpb24odCxl
LGkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBvKHQpe3RoaXMuc3RvcmFnZT10fXZhciBuPSJmdW5j
dGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1
bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlv
biI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJv
dG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fTtlLmE9byxvLnByb3RvdHlwZS5jcmVhdGU9ZnVuY3Rp
b24odCxlKXt0PXR8fCIiLGU9ZXx8ZnVuY3Rpb24oKXt9O3ZhciBpPXt0aXRsZTp0LnRyaW0oKSxj
b21wbGV0ZWQ6ITF9O3RoaXMuc3RvcmFnZS5zYXZlKGksZSl9LG8ucHJvdG90eXBlLnJlYWQ9ZnVu
Y3Rpb24odCxlKXt2YXIgaT0idW5kZWZpbmVkIj09dHlwZW9mIHQ/InVuZGVmaW5lZCI6bih0KTty
ZXR1cm4gZT1lfHxmdW5jdGlvbigpe30sImZ1bmN0aW9uIj09PWk/KGU9dCx0aGlzLnN0b3JhZ2Uu
ZmluZEFsbChlKSk6dm9pZCgic3RyaW5nIj09PWl8fCJudW1iZXIiPT09aT8odD1wYXJzZUludCh0
LDEwKSx0aGlzLnN0b3JhZ2UuZmluZCh7aWQ6dH0sZSkpOnRoaXMuc3RvcmFnZS5maW5kKHQsZSkp
fSxvLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCxlLGkpe3RoaXMuc3RvcmFnZS5zYXZlKGUs
aSx0KX0sby5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKHQsZSl7dGhpcy5zdG9yYWdlLnJlbW92
ZSh0LGUpfSxvLnByb3RvdHlwZS5yZW1vdmVBbGw9ZnVuY3Rpb24odCl7dGhpcy5zdG9yYWdlLmRy
b3AodCl9LG8ucHJvdG90eXBlLmdldENvdW50PWZ1bmN0aW9uKHQpe3ZhciBlPXthY3RpdmU6MCxj
b21wbGV0ZWQ6MCx0b3RhbDowfTt0aGlzLnN0b3JhZ2UuZmluZEFsbChmdW5jdGlvbihpKXtpLmZv
ckVhY2goZnVuY3Rpb24odCl7dC5jb21wbGV0ZWQ/ZS5jb21wbGV0ZWQrKzplLmFjdGl2ZSsrLGUu
dG90YWwrK30pLHQoZSl9KX19LGZ1bmN0aW9uKHQsZSxpKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24g
byh0LGUpe2lmKGU9ZXx8ZnVuY3Rpb24oKXt9LHRoaXMuX2RiTmFtZT10LCFsb2NhbFN0b3JhZ2Vb
dF0pe3ZhciBpPXt0b2RvczpbXX07bG9jYWxTdG9yYWdlW3RdPUpTT04uc3RyaW5naWZ5KGkpfWUu
Y2FsbCh0aGlzLEpTT04ucGFyc2UobG9jYWxTdG9yYWdlW3RdKSksdGhpcy5zdWJzY3JpYmVycz1b
XX12YXIgbj1pKDApO2UuYT1vLG8ucHJvdG90eXBlLnN1YnNjcmliZT1mdW5jdGlvbih0KXt2YXIg
ZT10aGlzO3JldHVybiB0aGlzLnN1YnNjcmliZXJzLnB1c2godCksZnVuY3Rpb24oKXtyZXR1cm4g
aS5pKG4uZikoZS5zdWJzY3JpYmVycyx0KX19LG8ucHJvdG90eXBlLl9ub3RpZnk9ZnVuY3Rpb24o
KXt0aGlzLnN1YnNjcmliZXJzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQoKX0pfSxvLnBy
b3RvdHlwZS5maW5kPWZ1bmN0aW9uKHQsZSl7aWYoZSl7dmFyIGk9SlNPTi5wYXJzZShsb2NhbFN0
b3JhZ2VbdGhpcy5fZGJOYW1lXSkudG9kb3M7ZS5jYWxsKHRoaXMsaS5maWx0ZXIoZnVuY3Rpb24o
ZSl7Zm9yKHZhciBpIGluIHQpaWYodFtpXSE9PWVbaV0pcmV0dXJuITE7cmV0dXJuITB9KSl9fSxv
LnByb3RvdHlwZS5maW5kQWxsPWZ1bmN0aW9uKHQpe3Q9dHx8ZnVuY3Rpb24oKXt9LHQuY2FsbCh0
aGlzLEpTT04ucGFyc2UobG9jYWxTdG9yYWdlW3RoaXMuX2RiTmFtZV0pLnRvZG9zKX0sby5wcm90
b3R5cGUuc2F2ZT1mdW5jdGlvbih0LGUsaSl7dmFyIG89SlNPTi5wYXJzZShsb2NhbFN0b3JhZ2Vb
dGhpcy5fZGJOYW1lXSksbj1vLnRvZG9zO2lmKGU9ZXx8ZnVuY3Rpb24oKXt9LGkpe2Zvcih2YXIg
cj0wO3I8bi5sZW5ndGg7cisrKWlmKG5bcl0uaWQ9PT1pKXtmb3IodmFyIGwgaW4gdCluW3JdW2xd
PXRbbF07YnJlYWt9bG9jYWxTdG9yYWdlW3RoaXMuX2RiTmFtZV09SlNPTi5zdHJpbmdpZnkobyks
ZS5jYWxsKHRoaXMsSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2VbdGhpcy5fZGJOYW1lXSkudG9kb3Mp
fWVsc2UgdC5pZD0obmV3IERhdGUpLmdldFRpbWUoKSxuLnB1c2godCksbG9jYWxTdG9yYWdlW3Ro
aXMuX2RiTmFtZV09SlNPTi5zdHJpbmdpZnkobyksZS5jYWxsKHRoaXMsW3RdKTt0aGlzLl9ub3Rp
ZnkoKX0sby5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBpPUpTT04ucGFy
c2UobG9jYWxTdG9yYWdlW3RoaXMuX2RiTmFtZV0pLG89aS50b2RvcyxuPTA7bjxvLmxlbmd0aDtu
KyspaWYob1tuXS5pZD09PXQpe28uc3BsaWNlKG4sMSk7YnJlYWt9bG9jYWxTdG9yYWdlW3RoaXMu
X2RiTmFtZV09SlNPTi5zdHJpbmdpZnkoaSksZS5jYWxsKHRoaXMsSlNPTi5wYXJzZShsb2NhbFN0
b3JhZ2VbdGhpcy5fZGJOYW1lXSkudG9kb3MpLHRoaXMuX25vdGlmeSgpfSxvLnByb3RvdHlwZS5k
cm9wPWZ1bmN0aW9uKHQpe2xvY2FsU3RvcmFnZVt0aGlzLl9kYk5hbWVdPUpTT04uc3RyaW5naWZ5
KHt0b2RvczpbXX0pLHQuY2FsbCh0aGlzLEpTT04ucGFyc2UobG9jYWxTdG9yYWdlW3RoaXMuX2Ri
TmFtZV0pLnRvZG9zKSx0aGlzLl9ub3RpZnkoKX19LGZ1bmN0aW9uKHQsZSxpKXsidXNlIHN0cmlj
dCI7ZnVuY3Rpb24gbygpe3RoaXMuZGVmYXVsdFRlbXBsYXRlPSdcbiAgICA8bGkgZGF0YS1pZD0i
e3tpZH19IiBjbGFzcz0ie3tjb21wbGV0ZWR9fSI+XG4gICAgICA8ZGl2IGNsYXNzPSJ2aWV3Ij5c
biAgICAgICAgPGlucHV0IGNsYXNzPSJ0b2dnbGUiIHR5cGU9ImNoZWNrYm94IiB7e2NoZWNrZWR9
fSAvPlxuICAgICAgICA8bGFiZWw+e3t0aXRsZX19PC9sYWJlbD5cbiAgICAgICAgPGJ1dHRvbiBj
bGFzcz0iZGVzdHJveSI+PC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2xpPlxuICAnfWUu
YT1vO3ZhciBuPXsiJiI6IiZhbXA7IiwiPCI6IiZsdDsiLCI+IjoiJmd0OyIsJyInOiImcXVvdDsi
LCInIjoiJiN4Mjc7IiwiYCI6IiYjeDYwOyJ9LHI9ZnVuY3Rpb24odCl7cmV0dXJuIG5bdF19LGw9
L1smPD4iJ2BdL2csYT1uZXcgUmVnRXhwKGwuc291cmNlKSxjPWZ1bmN0aW9uKHQpe3JldHVybiB0
JiZhLnRlc3QodCk/dC5yZXBsYWNlKGwscik6dH07by5wcm90b3R5cGUuc2hvdz1mdW5jdGlvbih0
KXt2YXIgZSxpLG89IiI7Zm9yKGU9MCxpPXQubGVuZ3RoO2U8aTtlKyspe3ZhciBuPXRoaXMuZGVm
YXVsdFRlbXBsYXRlLHI9IiIsbD0iIjt0W2VdLmNvbXBsZXRlZCYmKHI9ImNvbXBsZXRlZCIsbD0i
Y2hlY2tlZCIpLG49bi5yZXBsYWNlKCJ7e2lkfX0iLHRbZV0uaWQpLG49bi5yZXBsYWNlKCJ7e3Rp
dGxlfX0iLGModFtlXS50aXRsZSkpLG49bi5yZXBsYWNlKCJ7e2NvbXBsZXRlZH19IixyKSxuPW4u
cmVwbGFjZSgie3tjaGVja2VkfX0iLGwpLG8rPW59cmV0dXJuIG99LG8ucHJvdG90eXBlLml0ZW1D
b3VudGVyPWZ1bmN0aW9uKHQpe3ZhciBlPTE9PT10PyIiOiJzIjtyZXR1cm4iPHN0cm9uZz4iK3Qr
Ijwvc3Ryb25nPiBpdGVtIitlKyIgbGVmdCJ9LG8ucHJvdG90eXBlLmNsZWFyQ29tcGxldGVkQnV0
dG9uPWZ1bmN0aW9uKHQpe3JldHVybiB0PjA/IkNsZWFyIGNvbXBsZXRlZCI6IiJ9fSxmdW5jdGlv
bih0LGUsaSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG8odCl7dGhpcy5zdG9yYWdlPW5ldyBjLmEo
dCksdGhpcy5tb2RlbD1uZXcgYS5hKHRoaXMuc3RvcmFnZSksdGhpcy50ZW1wbGF0ZT1uZXcgZC5h
LHRoaXMudmlldz1uZXcgci5hKHRoaXMudGVtcGxhdGUpLHRoaXMuY29udHJvbGxlcj1uZXcgbC5h
KHRoaXMubW9kZWwsdGhpcy52aWV3KX1mdW5jdGlvbiBuKCl7cz1uZXcgbygidG9kb3MtdmFuaWxs
YWpzIikscy5jb250cm9sbGVyLnNldFZpZXcoZG9jdW1lbnQubG9jYXRpb24uaGFzaCksdS5mb3JF
YWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0KCl9KX12YXIgcj1pKDgpLGw9aSgzKSxhPWkoNCksYz1p
KDUpLGQ9aSg2KTtpKDApO2kuZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBufSk7dmFyIHM9dm9p
ZCAwLHU9W119LGZ1bmN0aW9uKHQsZSxpKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbyh0LGUpe2lm
KCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xh
c3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIG4odCl7aS5pKGMuYSkoIi5maWx0ZXJzIC5zZWxl
Y3RlZCIpLmNsYXNzTmFtZT0iIixpLmkoYy5hKSgnLmZpbHRlcnMgW2hyZWY9IiMvJyt0KyciXScp
LmNsYXNzTmFtZT0ic2VsZWN0ZWQifWZ1bmN0aW9uIHIodCxlKXt2YXIgbz1pLmkoYy5hKSgnW2Rh
dGEtaWQ9IicrdCsnIl0nKTtvJiYoby5jbGFzc05hbWU9ZT8iY29tcGxldGVkIjoiIixpLmkoYy5h
KSgiaW5wdXQiLG8pLmNoZWNrZWQ9ZSl9ZnVuY3Rpb24gbCh0LGUpe3ZhciBvPWkuaShjLmEpKCdb
ZGF0YS1pZD0iJyt0KyciXScpO2lmKG8pe28uY2xhc3NOYW1lPW8uY2xhc3NOYW1lKyIgZWRpdGlu
ZyI7dmFyIG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTtuLmNsYXNzTmFtZT0iZWRp
dCIsby5hcHBlbmRDaGlsZChuKSxuLmZvY3VzKCksbi52YWx1ZT1lfX1mdW5jdGlvbiBhKHQpe3Zh
ciBlPWkuaShjLmUpKHQsImxpIik7cmV0dXJuIHBhcnNlSW50KGUuZGF0YXNldC5pZCwxMCl9dmFy
IGM9aSgwKSxkPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe2Zvcih2YXIgaT0wO2k8ZS5sZW5n
dGg7aSsrKXt2YXIgbz1lW2ldO28uZW51bWVyYWJsZT1vLmVudW1lcmFibGV8fCExLG8uY29uZmln
dXJhYmxlPSEwLCJ2YWx1ZSJpbiBvJiYoby53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3Bl
cnR5KHQsby5rZXksbyl9fXJldHVybiBmdW5jdGlvbihlLGksbyl7cmV0dXJuIGkmJnQoZS5wcm90
b3R5cGUsaSksbyYmdChlLG8pLGV9fSgpLHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe28odGhp
cyx0KSx0aGlzLnRlbXBsYXRlPWUsdGhpcy5FTlRFUl9LRVk9MTMsdGhpcy5FU0NBUEVfS0VZPTI3
LHRoaXMuJHRvZG9MaXN0PWkuaShjLmEpKCIudG9kby1saXN0IiksdGhpcy4kdG9kb0l0ZW1Db3Vu
dGVyPWkuaShjLmEpKCIudG9kby1jb3VudCIpLHRoaXMuJGNsZWFyQ29tcGxldGVkPWkuaShjLmEp
KCIuY2xlYXItY29tcGxldGVkIiksdGhpcy4kbWFpbj1pLmkoYy5hKSgiLm1haW4iKSx0aGlzLiRm
b290ZXI9aS5pKGMuYSkoIi5mb290ZXIiKSx0aGlzLiR0b2dnbGVBbGw9aS5pKGMuYSkoIi50b2dn
bGUtYWxsIiksdGhpcy4kbmV3VG9kbz1pLmkoYy5hKSgiLm5ldy10b2RvIil9cmV0dXJuIGQodCxb
e2tleToiX3JlbW92ZUl0ZW0iLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPWkuaShjLmEpKCdbZGF0
YS1pZD0iJyt0KyciXScpO2UmJnRoaXMuJHRvZG9MaXN0LnJlbW92ZUNoaWxkKGUpfX0se2tleToi
X2NsZWFyQ29tcGxldGVkQnV0dG9uIix2YWx1ZTpmdW5jdGlvbih0LGUpe3RoaXMuJGNsZWFyQ29t
cGxldGVkLmlubmVySFRNTD10aGlzLnRlbXBsYXRlLmNsZWFyQ29tcGxldGVkQnV0dG9uKHQpLHRo
aXMuJGNsZWFyQ29tcGxldGVkLnN0eWxlLmRpc3BsYXk9ZT8iYmxvY2siOiJub25lIn19LHtrZXk6
Il9lZGl0SXRlbURvbmUiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIG89aS5pKGMuYSkoJ1tkYXRh
LWlkPSInK3QrJyJdJyk7aWYobyl7dmFyIG49aS5pKGMuYSkoImlucHV0LmVkaXQiLG8pO28ucmVt
b3ZlQ2hpbGQobiksby5jbGFzc05hbWU9by5jbGFzc05hbWUucmVwbGFjZSgiZWRpdGluZyIsIiIp
LGkuaShjLmIpKCJsYWJlbCIsbykuZm9yRWFjaChmdW5jdGlvbih0KXt0LnRleHRDb250ZW50PWV9
KX19fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcyxvPXtzaG93
RW50cmllczpmdW5jdGlvbigpe2kuJHRvZG9MaXN0LmlubmVySFRNTD1pLnRlbXBsYXRlLnNob3co
ZSl9LHJlbW92ZUl0ZW06ZnVuY3Rpb24oKXtpLl9yZW1vdmVJdGVtKGUpfSx1cGRhdGVFbGVtZW50
Q291bnQ6ZnVuY3Rpb24oKXtpLiR0b2RvSXRlbUNvdW50ZXIuaW5uZXJIVE1MPWkudGVtcGxhdGUu
aXRlbUNvdW50ZXIoZSl9LGNsZWFyQ29tcGxldGVkQnV0dG9uOmZ1bmN0aW9uKCl7aS5fY2xlYXJD
b21wbGV0ZWRCdXR0b24oZS5jb21wbGV0ZWQsZS52aXNpYmxlKX0sY29udGVudEJsb2NrVmlzaWJp
bGl0eTpmdW5jdGlvbigpe2kuJG1haW4uc3R5bGUuZGlzcGxheT1pLiRmb290ZXIuc3R5bGUuZGlz
cGxheT1lLnZpc2libGU/ImJsb2NrIjoibm9uZSJ9LHRvZ2dsZUFsbDpmdW5jdGlvbigpe2kuJHRv
Z2dsZUFsbC5jaGVja2VkPWUuY2hlY2tlZH0sc2V0RmlsdGVyOmZ1bmN0aW9uKCl7bihlKX0sY2xl
YXJOZXdUb2RvOmZ1bmN0aW9uKCl7aS4kbmV3VG9kby52YWx1ZT0iIn0sZWxlbWVudENvbXBsZXRl
OmZ1bmN0aW9uKCl7cihlLmlkLGUuY29tcGxldGVkKX0sZWRpdEl0ZW06ZnVuY3Rpb24oKXtsKGUu
aWQsZS50aXRsZSl9LGVkaXRJdGVtRG9uZTpmdW5jdGlvbigpe2kuX2VkaXRJdGVtRG9uZShlLmlk
LGUudGl0bGUpfX07b1t0XSgpfX0se2tleToiX2JpbmRJdGVtRWRpdERvbmUiLHZhbHVlOmZ1bmN0
aW9uKHQpe3ZhciBlPXRoaXM7aS5pKGMuYykoZS4kdG9kb0xpc3QsImxpIC5lZGl0IiwiYmx1ciIs
ZnVuY3Rpb24oKXt0aGlzLmRhdGFzZXQuaXNjYW5jZWxlZHx8dCh7aWQ6YSh0aGlzKSx0aXRsZTp0
aGlzLnZhbHVlfSl9KSxpLmkoYy5jKShlLiR0b2RvTGlzdCwibGkgLmVkaXQiLCJrZXlwcmVzcyIs
ZnVuY3Rpb24odCl7dC5rZXlDb2RlPT09ZS5FTlRFUl9LRVkmJnRoaXMuYmx1cigpfSl9fSx7a2V5
OiJfYmluZEl0ZW1FZGl0Q2FuY2VsIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzO2kuaShj
LmMpKGUuJHRvZG9MaXN0LCJsaSAuZWRpdCIsImtleXVwIixmdW5jdGlvbihpKXtpLmtleUNvZGU9
PT1lLkVTQ0FQRV9LRVkmJih0aGlzLmRhdGFzZXQuaXNjYW5jZWxlZD0hMCx0aGlzLmJsdXIoKSx0
KHtpZDphKHRoaXMpfSkpfSl9fSx7a2V5OiJiaW5kIix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciBv
PXRoaXM7Im5ld1RvZG8iPT09dD9pLmkoYy5kKShvLiRuZXdUb2RvLCJjaGFuZ2UiLGZ1bmN0aW9u
KCl7ZShvLiRuZXdUb2RvLnZhbHVlKX0pOiJyZW1vdmVDb21wbGV0ZWQiPT09dD9pLmkoYy5kKShv
LiRjbGVhckNvbXBsZXRlZCwiY2xpY2siLGZ1bmN0aW9uKCl7ZSgpfSk6InRvZ2dsZUFsbCI9PT10
P2kuaShjLmQpKG8uJHRvZ2dsZUFsbCwiY2xpY2siLGZ1bmN0aW9uKCl7ZSh7Y29tcGxldGVkOnRo
aXMuY2hlY2tlZH0pfSk6Iml0ZW1FZGl0Ij09PXQ/aS5pKGMuYykoby4kdG9kb0xpc3QsImxpIGxh
YmVsIiwiZGJsY2xpY2siLGZ1bmN0aW9uKCl7ZSh7aWQ6YSh0aGlzKX0pfSk6Iml0ZW1SZW1vdmUi
PT09dD9pLmkoYy5jKShvLiR0b2RvTGlzdCwiLmRlc3Ryb3kiLCJjbGljayIsZnVuY3Rpb24oKXtl
KHtpZDphKHRoaXMpfSl9KToiaXRlbVRvZ2dsZSI9PT10P2kuaShjLmMpKG8uJHRvZG9MaXN0LCIu
dG9nZ2xlIiwiY2xpY2siLGZ1bmN0aW9uKCl7ZSh7aWQ6YSh0aGlzKSxjb21wbGV0ZWQ6dGhpcy5j
aGVja2VkfSl9KToiaXRlbUVkaXREb25lIj09PXQ/by5fYmluZEl0ZW1FZGl0RG9uZShlKToiaXRl
bUVkaXRDYW5jZWwiPT09dCYmby5fYmluZEl0ZW1FZGl0Q2FuY2VsKGUpfX1dKSx0fSgpO2UuYT1z
fSxmdW5jdGlvbih0LGUpe30sZnVuY3Rpb24odCxlLGkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBv
KCl7aS5pKHIuZCkod2luZG93LCJsb2FkIixuLmEpLGkuaShyLmQpKHdpbmRvdywiaGFzaGNoYW5n
ZSIsbi5hKX12YXIgbj1pKDIpLHI9aSgwKTsiY29tcGxldGUiPT09ZG9jdW1lbnQucmVhZHlTdGF0
ZTtvKCl9XSxbMTBdKTsKKy8vIyBzb3VyY2VNYXBwaW5nVVJMPWJ1bmRsZS5hcHAuNDIxZWI2YmFj
YTAyMjE4ZTk4NWUuanMubWFwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0
IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxh
LWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrL2Rpc3QvYnVuZGxlLm1hbmlmZXN0LmJjMDQw
M2NiNzA3NjhiMTRhZGRkLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJj
ZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrL2Rpc3QvYnVu
ZGxlLm1hbmlmZXN0LmJjMDQwM2NiNzA3NjhiMTRhZGRkLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI2Njc3ZTU0
YTNmOTA5N2UxMWE3MWZiMWUyOTk0YmNhZjhlYjFkODIKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJm
b3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBs
ZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svZGlzdC9idW5kbGUubWFuaWZlc3QuYmMwNDAzY2I3MDc2
OGIxNGFkZGQuanMKQEAgLTAsMCArMSwyIEBACishZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihuKXtp
Zih0W25dKXJldHVybiB0W25dLmV4cG9ydHM7dmFyIG89dFtuXT17aTpuLGw6ITEsZXhwb3J0czp7
fX07cmV0dXJuIGVbbl0uY2FsbChvLmV4cG9ydHMsbyxvLmV4cG9ydHMsciksby5sPSEwLG8uZXhw
b3J0c312YXIgbj13aW5kb3cud2VicGFja0pzb25wO3dpbmRvdy53ZWJwYWNrSnNvbnA9ZnVuY3Rp
b24odCxhLHUpe2Zvcih2YXIgYyxpLGYsbD0wLHM9W107bDx0Lmxlbmd0aDtsKyspaT10W2xdLG9b
aV0mJnMucHVzaChvW2ldWzBdKSxvW2ldPTA7Zm9yKGMgaW4gYSlPYmplY3QucHJvdG90eXBlLmhh
c093blByb3BlcnR5LmNhbGwoYSxjKSYmKGVbY109YVtjXSk7Zm9yKG4mJm4odCxhLHUpO3MubGVu
Z3RoOylzLnNoaWZ0KCkoKTtpZih1KWZvcihsPTA7bDx1Lmxlbmd0aDtsKyspZj1yKHIucz11W2xd
KTtyZXR1cm4gZn07dmFyIHQ9e30sbz17MjowfTtyLmU9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbigp
e2Eub25lcnJvcj1hLm9ubG9hZD1udWxsLGNsZWFyVGltZW91dCh1KTt2YXIgcj1vW2VdOzAhPT1y
JiYociYmclsxXShuZXcgRXJyb3IoIkxvYWRpbmcgY2h1bmsgIitlKyIgZmFpbGVkLiIpKSxvW2Vd
PXZvaWQgMCl9aWYoMD09PW9bZV0pcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO2lmKG9bZV0pcmV0
dXJuIG9bZV1bMl07dmFyIHQ9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVsw
XSxhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO2EudHlwZT0idGV4dC9qYXZhc2Ny
aXB0IixhLmNoYXJzZXQ9InV0Zi04IixhLmFzeW5jPSEwLGEudGltZW91dD0xMmU0LGEuc3JjPXIu
cCsiYnVuZGxlLiIrZSsiLiIrezA6IjQyMWViNmJhY2EwMjIxOGU5ODVlIiwxOiJkYTFhMmQ2NDEw
NmVjNTRkNGY1NyJ9W2VdKyIuanMiO3ZhciB1PXNldFRpbWVvdXQobiwxMmU0KTthLm9uZXJyb3I9
YS5vbmxvYWQ9bix0LmFwcGVuZENoaWxkKGEpO3ZhciBjPW5ldyBQcm9taXNlKGZ1bmN0aW9uKHIs
bil7b1tlXT1bcixuXX0pO3JldHVybiBvW2VdWzJdPWN9LHIubT1lLHIuYz10LHIuaT1mdW5jdGlv
bihlKXtyZXR1cm4gZX0sci5kPWZ1bmN0aW9uKGUscixuKXtPYmplY3QuZGVmaW5lUHJvcGVydHko
ZSxyLHtjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCxnZXQ6bn0pfSxyLm49ZnVuY3Rpb24o
ZSl7dmFyIG49ZSYmZS5fX2VzTW9kdWxlP2Z1bmN0aW9uKCl7cmV0dXJuIGVbImRlZmF1bHQiXX06
ZnVuY3Rpb24oKXtyZXR1cm4gZX07cmV0dXJuIHIuZChuLCJhIixuKSxufSxyLm89ZnVuY3Rpb24o
ZSxyKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscil9LHIu
cD0iIixyLm9lPWZ1bmN0aW9uKGUpe3Rocm93IGNvbnNvbGUuZXJyb3IoZSksZX19KFtdKTsKKy8v
IyBzb3VyY2VNYXBwaW5nVVJMPWJ1bmRsZS5tYW5pZmVzdC5iYzA0MDNjYjcwNzY4YjE0YWRkZC5q
cy5tYXAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5j
ZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMy
MDE1LWJhYmVsLXdlYnBhY2svZGlzdC9idW5kbGUudmVuZG9yLmRhMWEyZDY0MTA2ZWM1NGQ0ZjU3
LmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5p
bGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrL2Rpc3QvYnVuZGxlLnZlbmRvci5kYTFh
MmQ2NDEwNmVjNTRkNGY1Ny5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45NmJjZTJmZDI4NWM2NTAzZjA0MjFkYmVk
MmI0N2FhNDk3MjllMWNhCi0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVl
ZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13
ZWJwYWNrL2Rpc3QvYnVuZGxlLnZlbmRvci5kYTFhMmQ2NDEwNmVjNTRkNGY1Ny5qcwpAQCAtMCww
ICsxLDIgQEAKK3dlYnBhY2tKc29ucChbMSwyXSx7MTpmdW5jdGlvbihuLHQpe30sMTE6ZnVuY3Rp
b24obix0LHIpe24uZXhwb3J0cz1yKDEpfSwxMjpmdW5jdGlvbihuLHQpe24uZXhwb3J0cz1mdW5j
dGlvbigpe3ZhciBuPVtdO3JldHVybiBuLnRvU3RyaW5nPWZ1bmN0aW9uKCl7Zm9yKHZhciBuPVtd
LHQ9MDt0PHRoaXMubGVuZ3RoO3QrKyl7dmFyIHI9dGhpc1t0XTtyWzJdP24ucHVzaCgiQG1lZGlh
ICIrclsyXSsieyIrclsxXSsifSIpOm4ucHVzaChyWzFdKX1yZXR1cm4gbi5qb2luKCIiKX0sbi5p
PWZ1bmN0aW9uKHQscil7InN0cmluZyI9PXR5cGVvZiB0JiYodD1bW251bGwsdCwiIl1dKTtmb3Io
dmFyIG89e30saT0wO2k8dGhpcy5sZW5ndGg7aSsrKXt2YXIgZT10aGlzW2ldWzBdOyJudW1iZXIi
PT10eXBlb2YgZSYmKG9bZV09ITApfWZvcihpPTA7aTx0Lmxlbmd0aDtpKyspe3ZhciB1PXRbaV07
Im51bWJlciI9PXR5cGVvZiB1WzBdJiZvW3VbMF1dfHwociYmIXVbMl0/dVsyXT1yOnImJih1WzJd
PSIoIit1WzJdKyIpIGFuZCAoIityKyIpIiksbi5wdXNoKHUpKX19LG59fX0sWzExXSk7CisvLyMg
c291cmNlTWFwcGluZ1VSTD1idW5kbGUudmVuZG9yLmRhMWEyZDY0MTA2ZWM1NGQ0ZjU3LmpzLm1h
cApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVz
dHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUt
YmFiZWwtd2VicGFjay9kaXN0L2luZGV4Lmh0bWwgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21l
dGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBh
Y2svZGlzdC9pbmRleC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZkYjUxODcxYjEyYjg4OGM1NzI5ZjkwOTAy
Yjg3ZmU3MDJhY2Y5NjAKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVk
b21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdl
YnBhY2svZGlzdC9pbmRleC5odG1sCkBAIC0wLDAgKzEsNDUgQEAKKzwhZG9jdHlwZSBodG1sPgor
PGh0bWwgbGFuZz0iZW4iIGRhdGEtZnJhbWV3b3JrPSJqYXZhc2NyaXB0Ij4KKyAgPGhlYWQ+Cisg
ICAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgorICAgIDx0aXRsZT5WYW5pbGxhSlMg4oCiIFRvZG9N
VkM8L3RpdGxlPgorICAgIDxzY3JpcHQ+IWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIobil7aWYodFtu
XSlyZXR1cm4gdFtuXS5leHBvcnRzO3ZhciBvPXRbbl09e2k6bixsOiExLGV4cG9ydHM6e319O3Jl
dHVybiBlW25dLmNhbGwoby5leHBvcnRzLG8sby5leHBvcnRzLHIpLG8ubD0hMCxvLmV4cG9ydHN9
dmFyIG49d2luZG93LndlYnBhY2tKc29ucDt3aW5kb3cud2VicGFja0pzb25wPWZ1bmN0aW9uKHQs
YSx1KXtmb3IodmFyIGMsaSxmLGw9MCxzPVtdO2w8dC5sZW5ndGg7bCsrKWk9dFtsXSxvW2ldJiZz
LnB1c2gob1tpXVswXSksb1tpXT0wO2ZvcihjIGluIGEpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Q
cm9wZXJ0eS5jYWxsKGEsYykmJihlW2NdPWFbY10pO2ZvcihuJiZuKHQsYSx1KTtzLmxlbmd0aDsp
cy5zaGlmdCgpKCk7aWYodSlmb3IobD0wO2w8dS5sZW5ndGg7bCsrKWY9cihyLnM9dVtsXSk7cmV0
dXJuIGZ9O3ZhciB0PXt9LG89ezI6MH07ci5lPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4oKXthLm9u
ZXJyb3I9YS5vbmxvYWQ9bnVsbCxjbGVhclRpbWVvdXQodSk7dmFyIHI9b1tlXTswIT09ciYmKHIm
JnJbMV0obmV3IEVycm9yKCJMb2FkaW5nIGNodW5rICIrZSsiIGZhaWxlZC4iKSksb1tlXT12b2lk
IDApfWlmKDA9PT1vW2VdKXJldHVybiBQcm9taXNlLnJlc29sdmUoKTtpZihvW2VdKXJldHVybiBv
W2VdWzJdO3ZhciB0PWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF0sYT1k
b2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTthLnR5cGU9InRleHQvamF2YXNjcmlwdCIs
YS5jaGFyc2V0PSJ1dGYtOCIsYS5hc3luYz0hMCxhLnRpbWVvdXQ9MTJlNCxhLnNyYz1yLnArImJ1
bmRsZS4iK2UrIi4iK3swOiI0MjFlYjZiYWNhMDIyMThlOTg1ZSIsMToiZGExYTJkNjQxMDZlYzU0
ZDRmNTcifVtlXSsiLmpzIjt2YXIgdT1zZXRUaW1lb3V0KG4sMTJlNCk7YS5vbmVycm9yPWEub25s
b2FkPW4sdC5hcHBlbmRDaGlsZChhKTt2YXIgYz1uZXcgUHJvbWlzZShmdW5jdGlvbihyLG4pe29b
ZV09W3Isbl19KTtyZXR1cm4gb1tlXVsyXT1jfSxyLm09ZSxyLmM9dCxyLmk9ZnVuY3Rpb24oZSl7
cmV0dXJuIGV9LHIuZD1mdW5jdGlvbihlLHIsbil7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUscix7
Y29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITAsZ2V0Om59KX0sci5uPWZ1bmN0aW9uKGUpe3Zh
ciBuPWUmJmUuX19lc01vZHVsZT9mdW5jdGlvbigpe3JldHVybiBlWyJkZWZhdWx0Il19OmZ1bmN0
aW9uKCl7cmV0dXJuIGV9O3JldHVybiByLmQobiwiYSIsbiksbn0sci5vPWZ1bmN0aW9uKGUscil7
cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpfSxyLnA9IiIs
ci5vZT1mdW5jdGlvbihlKXt0aHJvdyBjb25zb2xlLmVycm9yKGUpLGV9fShbXSk7Cis8L3Njcmlw
dD4KKyAgPGxpbmsgaHJlZj0ic3R5bGVzLnZlbmRvci5kYTFhMmQ2NDEwNmVjNTRkNGY1Ny5jc3Mi
IHJlbD0ic3R5bGVzaGVldCI+PGxpbmsgaHJlZj0ic3R5bGVzLmFwcC40MjFlYjZiYWNhMDIyMThl
OTg1ZS5jc3MiIHJlbD0ic3R5bGVzaGVldCI+PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQi
IHNyYz0iYnVuZGxlLnZlbmRvci5kYTFhMmQ2NDEwNmVjNTRkNGY1Ny5qcyI+PC9zY3JpcHQ+PHNj
cmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iYnVuZGxlLmFwcC40MjFlYjZiYWNhMDIy
MThlOTg1ZS5qcyI+PC9zY3JpcHQ+PC9oZWFkPgorICA8Ym9keT4KKyAgICA8c2VjdGlvbiBjbGFz
cz0idG9kb2FwcCI+CisgICAgICA8aGVhZGVyIGNsYXNzPSJoZWFkZXIiPgorICAgICAgICA8aDE+
dG9kb3M8L2gxPgorICAgICAgICA8aW5wdXQgY2xhc3M9Im5ldy10b2RvIiBwbGFjZWhvbGRlcj0i
V2hhdCBuZWVkcyB0byBiZSBkb25lPyIgYXV0b2ZvY3VzPgorICAgICAgPC9oZWFkZXI+CisgICAg
ICA8c2VjdGlvbiBjbGFzcz0ibWFpbiI+CisgICAgICAgIDxpbnB1dCBjbGFzcz0idG9nZ2xlLWFs
bCIgdHlwZT0iY2hlY2tib3giPgorICAgICAgICA8bGFiZWwgZm9yPSJ0b2dnbGUtYWxsIj5NYXJr
IGFsbCBhcyBjb21wbGV0ZTwvbGFiZWw+CisgICAgICAgIDx1bCBjbGFzcz0idG9kby1saXN0Ij48
L3VsPgorICAgICAgPC9zZWN0aW9uPgorICAgICAgPGZvb3RlciBjbGFzcz0iZm9vdGVyIj4KKyAg
ICAgICAgPHNwYW4gY2xhc3M9InRvZG8tY291bnQiPjwvc3Bhbj4KKyAgICAgICAgPHVsIGNsYXNz
PSJmaWx0ZXJzIj4KKyAgICAgICAgICA8bGk+CisgICAgICAgICAgICA8YSBocmVmPSIjLyIgY2xh
c3M9InNlbGVjdGVkIj5BbGw8L2E+CisgICAgICAgICAgPC9saT4KKyAgICAgICAgICA8bGk+Cisg
ICAgICAgICAgICA8YSBocmVmPSIjL2FjdGl2ZSI+QWN0aXZlPC9hPgorICAgICAgICAgIDwvbGk+
CisgICAgICAgICAgPGxpPgorICAgICAgICAgICAgPGEgaHJlZj0iIy9jb21wbGV0ZWQiPkNvbXBs
ZXRlZDwvYT4KKyAgICAgICAgICA8L2xpPgorICAgICAgICA8L3VsPgorICAgICAgICA8YnV0dG9u
IGNsYXNzPSJjbGVhci1jb21wbGV0ZWQiPkNsZWFyIGNvbXBsZXRlZDwvYnV0dG9uPgorICAgICAg
PC9mb290ZXI+CisgICAgPC9zZWN0aW9uPgorICAgIDxmb290ZXIgY2xhc3M9ImluZm8iPgorICAg
ICAgPHA+RG91YmxlLWNsaWNrIHRvIGVkaXQgYSB0b2RvPC9wPgorICAgICAgPHA+U3BlZWRvbWV0
ZXIgdmVyc2lvbiBieSA8YSBocmVmPSJodHRwOi8vdHdpdHRlci5jb20vYWRkeW9zbWFuaSI+QWRk
eSBPc21hbmk8L2E+PC9wPgorICAgICAgPHA+Q3JlYXRlZCBieSA8YSBocmVmPSJodHRwOi8vdHdp
dHRlci5jb20vb3NjYXJnb2Rzb24iPk9zY2FyIEdvZHNvbjwvYT48L3A+CisgICAgICA8cD5SZWZh
Y3RvcmVkIGJ5IDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9jYnVyZ21lciI+Q2hyaXN0b3Bo
IEJ1cmdtZXI8L2E+PC9wPgorICAgICAgPHA+UG9ydGVkIHRvIEVTNiBieSA8YSBocmVmPSJodHRw
czovL3R3aXR0ZXIuY29tL2tlbnRjZG9kZHMiPktlbnQgQy4gRG9kZHM8L2E+PC9wPgorICAgICAg
PHA+UGFydCBvZiA8YSBocmVmPSJodHRwOi8vdG9kb212Yy5jb20iPlRvZG9NVkM8L2E+PC9wPgor
ICAgIDwvZm9vdGVyPgorICA8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5j
ZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMy
MDE1LWJhYmVsLXdlYnBhY2svZGlzdC9zdHlsZXMuYXBwLjQyMWViNmJhY2EwMjIxOGU5ODVlLmNz
cyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxs
YS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9kaXN0L3N0eWxlcy5hcHAuNDIxZWI2YmFj
YTAyMjE4ZTk4NWUuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRhNmYwNDM2NGJiYjcwMmVkOTMyZjMyYTVmMmRk
NzBhMmRiODFmZTUKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21l
dGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBh
Y2svZGlzdC9zdHlsZXMuYXBwLjQyMWViNmJhY2EwMjIxOGU5ODVlLmNzcwpAQCAtMCwwICsxLDIg
QEAKKy50b2dnbGUtZ3JhcGh7ZmxvYXQ6bGVmdDttYXJnaW4tbGVmdDoxNnB4O2N1cnNvcjpwb2lu
dGVyO3Bvc2l0aW9uOnJlbGF0aXZlO3otaW5kZXg6MX0udG9nZ2xlLWdyYXBoIHN2Z3toZWlnaHQ6
MjBweDt3aWR0aDoyMHB4fS50b2dnbGUtZ3JhcGggc3ZnIHBhdGh7ZmlsbDojNzc3fS50b2dnbGUt
Z3JhcGguYWN0aXZlIHN2ZyBwYXRoLC50b2dnbGUtZ3JhcGg6Zm9jdXMgc3ZnIHBhdGgsLnRvZ2ds
ZS1ncmFwaDpob3ZlciBzdmcgcGF0aHtmaWxsOiMwMDB9CisvKiMgc291cmNlTWFwcGluZ1VSTD1z
dHlsZXMuYXBwLjQyMWViNmJhY2EwMjIxOGU5ODVlLmNzcy5tYXAqLwpcIE5vIG5ld2xpbmUgYXQg
ZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVz
b3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9kaXN0
L3N0eWxlcy52ZW5kb3IuZGExYTJkNjQxMDZlYzU0ZDRmNTcuY3NzIGIvUGVyZm9ybWFuY2VUZXN0
cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1i
YWJlbC13ZWJwYWNrL2Rpc3Qvc3R5bGVzLnZlbmRvci5kYTFhMmQ2NDEwNmVjNTRkNGY1Ny5jc3MK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNDg3YjE0YWQxNDU0NTNlNmQ0OGYxZjNkMDk1MjRhM2Y5ODQ4NmQ1MAotLS0g
L2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3Rv
ZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9kaXN0L3N0eWxlcy52
ZW5kb3IuZGExYTJkNjQxMDZlYzU0ZDRmNTcuY3NzCkBAIC0wLDAgKzEsMiBAQAorYm9keSxidXR0
b24saHRtbHttYXJnaW46MDtwYWRkaW5nOjB9YnV0dG9ue2JvcmRlcjowO2JhY2tncm91bmQ6bm9u
ZTtmb250LXNpemU6MTAwJTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTtmb250LWZhbWlseTppbmhl
cml0O2ZvbnQtd2VpZ2h0OmluaGVyaXQ7Y29sb3I6aW5oZXJpdDstd2Via2l0LWFwcGVhcmFuY2U6
bm9uZTthcHBlYXJhbmNlOm5vbmU7LXdlYmtpdC1mb250LXNtb290aGluZzphbnRpYWxpYXNlZH1i
b2R5LGJ1dHRvbnstbW96LW9zeC1mb250LXNtb290aGluZzpncmF5c2NhbGV9Ym9keXtmb250OjE0
cHggSGVsdmV0aWNhIE5ldWUsSGVsdmV0aWNhLEFyaWFsLHNhbnMtc2VyaWY7bGluZS1oZWlnaHQ6
MS40ZW07YmFja2dyb3VuZDojZjVmNWY1O2NvbG9yOiM0ZDRkNGQ7bWluLXdpZHRoOjIzMHB4O21h
eC13aWR0aDo1NTBweDttYXJnaW46MCBhdXRvOy13ZWJraXQtZm9udC1zbW9vdGhpbmc6YW50aWFs
aWFzZWQ7Zm9udC13ZWlnaHQ6MzAwfTpmb2N1c3tvdXRsaW5lOjB9LmhpZGRlbntkaXNwbGF5Om5v
bmV9LnRvZG9hcHB7YmFja2dyb3VuZDojZmZmO21hcmdpbjoxMzBweCAwIDQwcHg7cG9zaXRpb246
cmVsYXRpdmU7Ym94LXNoYWRvdzowIDJweCA0cHggMCByZ2JhKDAsMCwwLC4yKSwwIDI1cHggNTBw
eCAwIHJnYmEoMCwwLDAsLjEpfS50b2RvYXBwIGlucHV0Ojotd2Via2l0LWlucHV0LXBsYWNlaG9s
ZGVye2ZvbnQtc3R5bGU6aXRhbGljO2ZvbnQtd2VpZ2h0OjMwMDtjb2xvcjojZTZlNmU2fS50b2Rv
YXBwIGlucHV0OjotbW96LXBsYWNlaG9sZGVye2ZvbnQtc3R5bGU6aXRhbGljO2ZvbnQtd2VpZ2h0
OjMwMDtjb2xvcjojZTZlNmU2fS50b2RvYXBwIGlucHV0OjppbnB1dC1wbGFjZWhvbGRlcntmb250
LXN0eWxlOml0YWxpYztmb250LXdlaWdodDozMDA7Y29sb3I6I2U2ZTZlNn0udG9kb2FwcCBoMXtw
b3NpdGlvbjphYnNvbHV0ZTt0b3A6LTE1NXB4O3dpZHRoOjEwMCU7Zm9udC1zaXplOjEwMHB4O2Zv
bnQtd2VpZ2h0OjEwMDt0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjpyZ2JhKDE3NSw0Nyw0NywuMTUp
Oy13ZWJraXQtdGV4dC1yZW5kZXJpbmc6b3B0aW1pemVMZWdpYmlsaXR5Oy1tb3otdGV4dC1yZW5k
ZXJpbmc6b3B0aW1pemVMZWdpYmlsaXR5O3RleHQtcmVuZGVyaW5nOm9wdGltaXplTGVnaWJpbGl0
eX0uZWRpdCwubmV3LXRvZG97cG9zaXRpb246cmVsYXRpdmU7bWFyZ2luOjA7d2lkdGg6MTAwJTtm
b250LXNpemU6MjRweDtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtd2VpZ2h0OmluaGVyaXQ7bGlu
ZS1oZWlnaHQ6MS40ZW07Ym9yZGVyOjA7Y29sb3I6aW5oZXJpdDtwYWRkaW5nOjZweDtib3JkZXI6
MXB4IHNvbGlkICM5OTk7Ym94LXNoYWRvdzppbnNldCAwIC0xcHggNXB4IDAgcmdiYSgwLDAsMCwu
Mik7Ym94LXNpemluZzpib3JkZXItYm94Oy13ZWJraXQtZm9udC1zbW9vdGhpbmc6YW50aWFsaWFz
ZWQ7LW1vei1vc3gtZm9udC1zbW9vdGhpbmc6Z3JheXNjYWxlfS5uZXctdG9kb3twYWRkaW5nOjE2
cHggMTZweCAxNnB4IDYwcHg7Ym9yZGVyOm5vbmU7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4wMDMp
O2JveC1zaGFkb3c6aW5zZXQgMCAtMnB4IDFweCByZ2JhKDAsMCwwLC4wMyl9Lm1haW57cG9zaXRp
b246cmVsYXRpdmU7ei1pbmRleDoyO2JvcmRlci10b3A6MXB4IHNvbGlkICNlNmU2ZTZ9bGFiZWxb
Zm9yPXRvZ2dsZS1hbGxde2Rpc3BsYXk6bm9uZX0udG9nZ2xlLWFsbHtwb3NpdGlvbjphYnNvbHV0
ZTt0b3A6LTU1cHg7bGVmdDotMTJweDt3aWR0aDo2MHB4O2hlaWdodDozNHB4O3RleHQtYWxpZ246
Y2VudGVyO2JvcmRlcjpub25lfS50b2dnbGUtYWxsOmJlZm9yZXtjb250ZW50OidcMjc2Ric7Zm9u
dC1zaXplOjIycHg7Y29sb3I6I2U2ZTZlNjtwYWRkaW5nOjEwcHggMjdweH0udG9nZ2xlLWFsbDpj
aGVja2VkOmJlZm9yZXtjb2xvcjojNzM3MzczfS50b2RvLWxpc3R7bWFyZ2luOjA7cGFkZGluZzow
O2xpc3Qtc3R5bGU6bm9uZX0udG9kby1saXN0IGxpe3Bvc2l0aW9uOnJlbGF0aXZlO2ZvbnQtc2l6
ZToyNHB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlZGVkZWR9LnRvZG8tbGlzdCBsaTpsYXN0
LWNoaWxke2JvcmRlci1ib3R0b206bm9uZX0udG9kby1saXN0IGxpLmVkaXRpbmd7Ym9yZGVyLWJv
dHRvbTpub25lO3BhZGRpbmc6MH0udG9kby1saXN0IGxpLmVkaXRpbmcgLmVkaXR7ZGlzcGxheTpi
bG9jazt3aWR0aDo1MDZweDtwYWRkaW5nOjEycHggMTZweDttYXJnaW46MCAwIDAgNDNweH0udG9k
by1saXN0IGxpLmVkaXRpbmcgLnZpZXd7ZGlzcGxheTpub25lfS50b2RvLWxpc3QgbGkgLnRvZ2ds
ZXt0ZXh0LWFsaWduOmNlbnRlcjt3aWR0aDo0MHB4O2hlaWdodDphdXRvO3Bvc2l0aW9uOmFic29s
dXRlO3RvcDowO2JvdHRvbTowO21hcmdpbjphdXRvIDA7Ym9yZGVyOm5vbmU7LXdlYmtpdC1hcHBl
YXJhbmNlOm5vbmU7YXBwZWFyYW5jZTpub25lfS50b2RvLWxpc3QgbGkgLnRvZ2dsZTphZnRlcntj
b250ZW50OnVybCgnZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsPHN2ZyB4bWxucz0iaHR0cDovL3d3
dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCIgdmlld0JveD0iLTEwIC0x
OCAxMDAgMTM1Ij48Y2lyY2xlIGN4PSI1MCIgY3k9IjUwIiByPSI1MCIgZmlsbD0ibm9uZSIgc3Ry
b2tlPSIjZWRlZGVkIiBzdHJva2Utd2lkdGg9IjMiLz48L3N2Zz4nKX0udG9kby1saXN0IGxpIC50
b2dnbGU6Y2hlY2tlZDphZnRlcntjb250ZW50OnVybCgnZGF0YTppbWFnZS9zdmcreG1sO3V0Zjgs
PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0MCIgaGVpZ2h0
PSI0MCIgdmlld0JveD0iLTEwIC0xOCAxMDAgMTM1Ij48Y2lyY2xlIGN4PSI1MCIgY3k9IjUwIiBy
PSI1MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjYmRkYWQ1IiBzdHJva2Utd2lkdGg9IjMiLz48cGF0
aCBmaWxsPSIjNWRjMmFmIiBkPSJNNzIgMjVMNDIgNzEgMjcgNTZsLTQgNCAyMCAyMCAzNC01Mnoi
Lz48L3N2Zz4nKX0udG9kby1saXN0IGxpIGxhYmVse3dvcmQtYnJlYWs6YnJlYWstYWxsO3BhZGRp
bmc6MTVweCA2MHB4IDE1cHggMTVweDttYXJnaW4tbGVmdDo0NXB4O2Rpc3BsYXk6YmxvY2s7bGlu
ZS1oZWlnaHQ6MS4yO3RyYW5zaXRpb246Y29sb3IgLjRzfS50b2RvLWxpc3QgbGkuY29tcGxldGVk
IGxhYmVse2NvbG9yOiNkOWQ5ZDk7dGV4dC1kZWNvcmF0aW9uOmxpbmUtdGhyb3VnaH0udG9kby1s
aXN0IGxpIC5kZXN0cm95e2Rpc3BsYXk6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtyaWdo
dDoxMHB4O2JvdHRvbTowO3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHg7bWFyZ2luOmF1dG8gMDtmb250
LXNpemU6MzBweDtjb2xvcjojY2M5YTlhO21hcmdpbi1ib3R0b206MTFweDt0cmFuc2l0aW9uOmNv
bG9yIC4ycyBlYXNlLW91dH0udG9kby1saXN0IGxpIC5kZXN0cm95OmhvdmVye2NvbG9yOiNhZjVi
NWV9LnRvZG8tbGlzdCBsaSAuZGVzdHJveTphZnRlcntjb250ZW50OidcRDcnfS50b2RvLWxpc3Qg
bGk6aG92ZXIgLmRlc3Ryb3l7ZGlzcGxheTpibG9ja30udG9kby1saXN0IGxpIC5lZGl0e2Rpc3Bs
YXk6bm9uZX0udG9kby1saXN0IGxpLmVkaXRpbmc6bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOi0x
cHh9LmZvb3Rlcntjb2xvcjojNzc3O3BhZGRpbmc6MTBweCAxNXB4O2hlaWdodDoyMHB4O3RleHQt
YWxpZ246Y2VudGVyO2JvcmRlci10b3A6MXB4IHNvbGlkICNlNmU2ZTZ9LmZvb3RlcjpiZWZvcmV7
Y29udGVudDonJztwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO2JvdHRvbTowO2xlZnQ6MDtoZWln
aHQ6NTBweDtvdmVyZmxvdzpoaWRkZW47Ym94LXNoYWRvdzowIDFweCAxcHggcmdiYSgwLDAsMCwu
MiksMCA4cHggMCAtM3B4ICNmNmY2ZjYsMCA5cHggMXB4IC0zcHggcmdiYSgwLDAsMCwuMiksMCAx
NnB4IDAgLTZweCAjZjZmNmY2LDAgMTdweCAycHggLTZweCByZ2JhKDAsMCwwLC4yKX0udG9kby1j
b3VudHtmbG9hdDpsZWZ0O3RleHQtYWxpZ246bGVmdH0udG9kby1jb3VudCBzdHJvbmd7Zm9udC13
ZWlnaHQ6MzAwfS5maWx0ZXJze21hcmdpbjowO3BhZGRpbmc6MDtsaXN0LXN0eWxlOm5vbmU7cG9z
aXRpb246YWJzb2x1dGU7cmlnaHQ6MDtsZWZ0OjB9LmZpbHRlcnMgbGl7ZGlzcGxheTppbmxpbmV9
LmZpbHRlcnMgbGkgYXtjb2xvcjppbmhlcml0O21hcmdpbjozcHg7cGFkZGluZzozcHggN3B4O3Rl
eHQtZGVjb3JhdGlvbjpub25lO2JvcmRlcjoxcHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXJh
ZGl1czozcHh9LmZpbHRlcnMgbGkgYTpob3Zlcntib3JkZXItY29sb3I6cmdiYSgxNzUsNDcsNDcs
LjEpfS5maWx0ZXJzIGxpIGEuc2VsZWN0ZWR7Ym9yZGVyLWNvbG9yOnJnYmEoMTc1LDQ3LDQ3LC4y
KX0uY2xlYXItY29tcGxldGVkLGh0bWwgLmNsZWFyLWNvbXBsZXRlZDphY3RpdmV7ZmxvYXQ6cmln
aHQ7cG9zaXRpb246cmVsYXRpdmU7bGluZS1oZWlnaHQ6MjBweDt0ZXh0LWRlY29yYXRpb246bm9u
ZTtjdXJzb3I6cG9pbnRlcn0uY2xlYXItY29tcGxldGVkOmhvdmVye3RleHQtZGVjb3JhdGlvbjp1
bmRlcmxpbmV9LmluZm97bWFyZ2luOjY1cHggYXV0byAwO2NvbG9yOiNiZmJmYmY7Zm9udC1zaXpl
OjEwcHg7dGV4dC1zaGFkb3c6MCAxcHggMCBoc2xhKDAsMCUsMTAwJSwuNSk7dGV4dC1hbGlnbjpj
ZW50ZXJ9LmluZm8gcHtsaW5lLWhlaWdodDoxfS5pbmZvIGF7Y29sb3I6aW5oZXJpdDt0ZXh0LWRl
Y29yYXRpb246bm9uZTtmb250LXdlaWdodDo0MDB9LmluZm8gYTpob3Zlcnt0ZXh0LWRlY29yYXRp
b246dW5kZXJsaW5lfUBtZWRpYSBzY3JlZW4gYW5kICgtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwt
cmF0aW86MCl7LnRvZG8tbGlzdCBsaSAudG9nZ2xlLC50b2dnbGUtYWxse2JhY2tncm91bmQ6bm9u
ZX0udG9kby1saXN0IGxpIC50b2dnbGV7aGVpZ2h0OjQwcHh9LnRvZ2dsZS1hbGx7LXdlYmtpdC10
cmFuc2Zvcm06cm90YXRlKDkwZGVnKTt0cmFuc2Zvcm06cm90YXRlKDkwZGVnKTstd2Via2l0LWFw
cGVhcmFuY2U6bm9uZTthcHBlYXJhbmNlOm5vbmV9fUBtZWRpYSAobWF4LXdpZHRoOjQzMHB4KXsu
Zm9vdGVye2hlaWdodDo1MHB4fS5maWx0ZXJze2JvdHRvbToxMHB4fX0KKy8qIyBzb3VyY2VNYXBw
aW5nVVJMPXN0eWxlcy52ZW5kb3IuZGExYTJkNjQxMDZlYzU0ZDRmNTcuY3NzLm1hcCovClwgTm8g
bmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVl
ZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13
ZWJwYWNrL3BhY2thZ2UuanNvbiBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3Vy
Y2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9wYWNrYWdl
Lmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uODZmN2JiYjk3NWU1ODBjYTFmMjM1NWQ0MDMxODM3ZWViM2ZiMjZh
MQotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3Vy
Y2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9wYWNrYWdl
Lmpzb24KQEAgLTAsMCArMSw3NSBAQAoreworICAicHJpdmF0ZSI6IHRydWUsCisgICJkZXBlbmRl
bmNpZXMiOiB7CisgICAgImQzIjogIjMuNS4xNyIsCisgICAgImxvZGFzaCI6ICI0LjE0LjEiLAor
ICAgICJyZDMiOiAiMC43LjAiLAorICAgICJyZWFjdCI6ICIxNS4zLjAiLAorICAgICJyZWFjdC1k
b20iOiAiMTUuMy4wIiwKKyAgICAidG9kb212Yy1hcHAtY3NzIjogIjIuMC42IgorICB9LAorICAi
ZGV2RGVwZW5kZW5jaWVzIjogeworICAgICJiYWJlbC1jb3JlIjogIjYuMTMuMiIsCisgICAgImJh
YmVsLWxvYWRlciI6ICI2LjIuNCIsCisgICAgImJhYmVsLXBsdWdpbi1fX2NvdmVyYWdlX18iOiAi
MTEuMC4wIiwKKyAgICAiYmFiZWwtcHJlc2V0LWVzMjAxNSI6ICI2LjEzLjIiLAorICAgICJiYWJl
bC1wcmVzZXQtZXMyMDE2IjogIjYuMTEuMyIsCisgICAgImJhYmVsLXByZXNldC1yZWFjdCI6ICI2
LjExLjEiLAorICAgICJiYWJlbC1wcmVzZXQtc3RhZ2UtMiI6ICI2LjEzLjAiLAorICAgICJjaGFp
IjogIjMuNS4wIiwKKyAgICAiY3B5LWNsaSI6ICIxLjAuMSIsCisgICAgImNzcy1sb2FkZXIiOiAi
MC4yMy4xIiwKKyAgICAiZXNsaW50IjogIjMuMi4yIiwKKyAgICAiZXNsaW50LWNvbmZpZy1rZW50
Y2RvZGRzIjogIl45LjAuMCIsCisgICAgImV4dHJhY3QtdGV4dC13ZWJwYWNrLXBsdWdpbiI6ICIy
LjAuMC1iZXRhLjMiLAorICAgICJnaG9va3MiOiAiMS4zLjIiLAorICAgICJodG1sLXdlYnBhY2st
cGx1Z2luIjogIjIuMjIuMCIsCisgICAgImh0dHAtc2VydmVyIjogIjAuOS4wIiwKKyAgICAiaW5s
aW5lLW1hbmlmZXN0LXdlYnBhY2stcGx1Z2luIjogIjMuMC4xIiwKKyAgICAia2FybWEiOiAiMS4x
LjIiLAorICAgICJrYXJtYS1jaGFpIjogIjAuMS4wIiwKKyAgICAia2FybWEtY2hyb21lLWxhdW5j
aGVyIjogIjEuMC4xIiwKKyAgICAia2FybWEtY292ZXJhZ2UiOiAiMS4xLjEiLAorICAgICJrYXJt
YS1tb2NoYSI6ICIxLjEuMSIsCisgICAgImthcm1hLXdlYnBhY2siOiAiMS43LjAiLAorICAgICJt
b2NoYSI6ICIzLjAuMSIsCisgICAgIm5wbS1ydW4tYWxsIjogIjIuMy4wIiwKKyAgICAib3B0LWNs
aSI6ICIxLjUuMSIsCisgICAgInByb2dyZXNzLWJhci13ZWJwYWNrLXBsdWdpbiI6ICIxLjkuMCIs
CisgICAgInJpbXJhZiI6ICIyLjUuNCIsCisgICAgInN0eWxlLWxvYWRlciI6ICIwLjEzLjEiLAor
ICAgICJzdXJnZSI6ICIwLjE4LjAiLAorICAgICJ3ZWJwYWNrIjogIjIuMS4wLWJldGEuMjAiLAor
ICAgICJ3ZWJwYWNrLWNvbmZpZy11dGlscyI6ICIyLjAuMCIsCisgICAgIndlYnBhY2stZGV2LXNl
cnZlciI6ICIyLjEuMC1iZXRhLjAiLAorICAgICJ3ZWJwYWNrLXZhbGlkYXRvciI6ICIyLjIuNyIK
KyAgfSwKKyAgImNvbmZpZyI6IHsKKyAgICAiZ2hvb2tzIjogeworICAgICAgInByZS1jb21taXQi
OiAib3B0IC0taW4gcHJlLWNvbW1pdCAtLWV4ZWMgXCJucG0gcnVuIHZhbGlkYXRlXCIiCisgICAg
fQorICB9LAorICAic2NyaXB0cyI6IHsKKyAgICAicHJlZGVwbG95IjogIm5wbSBydW4gYnVpbGQi
LAorICAgICJkZXBsb3kiOiAiLi9zY3JpcHRzL2RlcGxveSIsCisgICAgInByZWJ1aWxkIjogInJp
bXJhZiBkaXN0IiwKKyAgICAiYnVpbGQiOiAid2VicGFjayAtLWVudi5wcm9kIC1wIiwKKyAgICAi
cG9zdGJ1aWxkIjogImNweSBmYXZpY29uLmljbyBkaXN0IiwKKyAgICAicHJlYnVpbGQ6ZGV2Ijog
InJpbXJhZiBkaXN0IiwKKyAgICAiYnVpbGQ6ZGV2IjogIndlYnBhY2sgLS1lbnYuZGV2IiwKKyAg
ICAicG9zdGJ1aWxkOmRldiI6ICJjcHkgZmF2aWNvbi5pY28gZGlzdCIsCisgICAgInN0YXJ0Ijog
Imh0dHAtc2VydmVyIGRpc3QiLAorICAgICJkZXYiOiAid2VicGFjay1kZXYtc2VydmVyIC0tZW52
LmRldiAtLWhvdCIsCisgICAgImRlYnVnIjogIm5vZGUtbmlnaHRseSAtLWluc3BlY3QgLS1kZWJ1
Zy1icmsgbm9kZV9tb2R1bGVzLy5iaW4vd2VicGFjayAtLWVudi5kZWJ1ZyIsCisgICAgImRlYnVn
OmRldiI6ICJucG0gcnVuIGRlYnVnIC0tIC0tZW52LmRldiIsCisgICAgImRlYnVnOnByb2QiOiAi
bnBtIHJ1biBkZWJ1ZyAtLSAtLWVudi5wcm9kIiwKKyAgICAidGVzdCI6ICJrYXJtYSBzdGFydCIs
CisgICAgIndhdGNoOnRlc3QiOiAibnBtIHRlc3QgLS0gLS1hdXRvLXdhdGNoIC0tbm8tc2luZ2xl
LXJ1biIsCisgICAgInZhbGlkYXRlIjogIm5wbS1ydW4tYWxsIC0tcGFyYWxsZWwgbGludCBidWls
ZCB0ZXN0IiwKKyAgICAibGludCI6ICJlc2xpbnQgLiIsCisgICAgInNldHVwIjogIm5wbSBpbnN0
YWxsICYmIG5wbSBydW4gdmFsaWRhdGUiLAorICAgICJzZXR1cDpmZW0iOiAiZ2l0IGNoZWNrb3V0
IEZFTS8wNy4xLWRlcGxveS1zdXJnZSAmJiBucG0gaW5zdGFsbCAmJiBucG0gcnVuIHZhbGlkYXRl
ICYmIHJpbXJhZiBkaXN0IGNvdmVyYWdlICYmIGdpdCBjaGVja291dCBGRU0vMDAtb3JpZ2luYWwt
cHJvamVjdCIsCisgICAgInNldHVwOndvcmtzaG9wIjogImdpdCBjaGVja291dCB3b3Jrc2hvcC8w
Ny1jb3ZlcmFnZSAmJiBucG0gaW5zdGFsbCAmJiBucG0gcnVuIHZhbGlkYXRlICYmIHJpbXJhZiBk
aXN0IGNvdmVyYWdlICYmIGdpdCBjaGVja291dCB3b3Jrc2hvcC8wMC1vcmlnaW5hbC1wcm9qZWN0
IiwKKyAgICAic2V0dXA6ZWdnaGVhZCI6ICJnaXQgY2hlY2tvdXQgcHJlbGVzc29uL3BvbHlmaWxs
LXByb21pc2VzICYmIG5wbSBpbnN0YWxsICYmIG1rZGlyIGRpc3QgJiYgbnBtIHJ1biB2YWxpZGF0
ZSIKKyAgfQorfQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNv
dXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrL3NyYy9h
cHAuY3NzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92
YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrL3NyYy9hcHAuY3NzCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjUyN2E1OGY3MWYzOWZmMDFmMGE1MjY5NzI5MjNmMWQxZTBmY2QxMWIKLS0tIC9kZXYvbnVs
bAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3Zh
bmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svc3JjL2FwcC5jc3MKQEAgLTAsMCAr
MSwyMCBAQAorLnRvZ2dsZS1ncmFwaCB7CisgIGZsb2F0OiBsZWZ0OworICBtYXJnaW4tbGVmdDog
MTZweDsKKyAgY3Vyc29yOiBwb2ludGVyOworICBwb3NpdGlvbjogcmVsYXRpdmU7CisgIHotaW5k
ZXg6IDE7Cit9CisudG9nZ2xlLWdyYXBoIHN2ZyB7CisgIGhlaWdodDogMjBweDsKKyAgd2lkdGg6
IDIwcHg7Cit9CisudG9nZ2xlLWdyYXBoIHN2ZyBwYXRoIHsKKyAgZmlsbDogIzc3NzsKK30KKwor
LnRvZ2dsZS1ncmFwaC5hY3RpdmUgc3ZnIHBhdGgsCisudG9nZ2xlLWdyYXBoOmhvdmVyIHN2ZyBw
YXRoLAorLnRvZ2dsZS1ncmFwaDpmb2N1cyBzdmcgcGF0aCB7CisgIGZpbGw6IGJsYWNrOworfQpk
aWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212
Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrL3NyYy9hcHAuanMgYi9QZXJm
b3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBs
ZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svc3JjL2FwcC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iN2UwMmZkZTkw
MjM1NTZjMDUzYTliOTYwODIwYzllM2NmZGU2MGY3Ci0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9y
bWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVz
L2VzMjAxNS1iYWJlbC13ZWJwYWNrL3NyYy9hcHAuanMKQEAgLTAsMCArMSw5IEBACitpbXBvcnQg
J3RvZG9tdmMtYXBwLWNzcy9pbmRleC5jc3MnCitpbXBvcnQgJy4vYXBwLmNzcycKKworaW1wb3J0
IHskb259IGZyb20gJy4vaGVscGVycycKK2ltcG9ydCB7dXBkYXRlVG9kb30gZnJvbSAnLi90b2Rv
JworCitleHBvcnQgZnVuY3Rpb24gb25Mb2FkKCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGlt
cG9ydC9wcmVmZXItZGVmYXVsdC1leHBvcnQKKyAgdXBkYXRlVG9kbygpCit9CmRpZmYgLS1naXQg
YS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEt
ZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svc3JjL2Jvb3RzdHJhcC5qcyBiL1BlcmZvcm1h
bmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9l
czIwMTUtYmFiZWwtd2VicGFjay9zcmMvYm9vdHN0cmFwLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI2ZDVlODIx
YmE3ZWE2ZTk4NjVmOThjNGNjNWE1MGI1ZmQ2ZTMwOTEKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJm
b3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBs
ZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svc3JjL2Jvb3RzdHJhcC5qcwpAQCAtMCwwICsxLDIzIEBA
CisvKiBlc2xpbnQgbm8tY29uc29sZTowICovCitpbXBvcnQge29uTG9hZH0gZnJvbSAnLi9hcHAn
CitpbXBvcnQgeyRvbn0gZnJvbSAnLi9oZWxwZXJzJworCisvLyB0aGlzIGlzIG9ubHkgcmVsZXZh
bnQgd2hlbiB1c2luZyBgaG90YCBtb2RlIHdpdGggd2VicGFjaworLy8gc3BlY2lhbCB0aGFua3Mg
dG8gRXJpYyBDbGVtbW9uczogaHR0cHM6Ly9naXRodWIuY29tL2VyaWNjbGVtbW9ucy93ZWJwYWNr
LWhvdC1zZXJ2ZXItZXhhbXBsZQorY29uc3QgcmVsb2FkaW5nID0gZG9jdW1lbnQucmVhZHlTdGF0
ZSA9PT0gJ2NvbXBsZXRlJworaWYgKG1vZHVsZS5ob3QpIHsKKyAgbW9kdWxlLmhvdC5hY2NlcHQo
ZnVuY3Rpb24oZXJyKSB7CisgIH0pCisgIGlmIChyZWxvYWRpbmcpIHsKKyAgICBvbkxvYWQoKQor
ICB9IGVsc2UgeworICAgIGJvb3RzdHJhcCgpCisgIH0KK30gZWxzZSB7CisgIGJvb3RzdHJhcCgp
Cit9CisKK2Z1bmN0aW9uIGJvb3RzdHJhcCgpIHsKKyAgJG9uKHdpbmRvdywgJ2xvYWQnLCBvbkxv
YWQpCisgICRvbih3aW5kb3csICdoYXNoY2hhbmdlJywgb25Mb2FkKQorfQpkaWZmIC0tZ2l0IGEv
UGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4
YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrL3NyYy9jb250cm9sbGVyLmpzIGIvUGVyZm9ybWFu
Y2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2Vz
MjAxNS1iYWJlbC13ZWJwYWNrL3NyYy9jb250cm9sbGVyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhhNDhjOTA2
YmMzNmNlNGJjOGI3MjNmM2YyZmYwMzM5NDQwYzVmNDMKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJm
b3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBs
ZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svc3JjL2NvbnRyb2xsZXIuanMKQEAgLTAsMCArMSwyNjMg
QEAKK2V4cG9ydCBkZWZhdWx0IENvbnRyb2xsZXIKKworLyoqCisqIFRha2VzIGEgbW9kZWwgYW5k
IHZpZXcgYW5kIGFjdHMgYXMgdGhlIGNvbnRyb2xsZXIgYmV0d2VlbiB0aGVtCisqCisqIEBjb25z
dHJ1Y3RvcgorKiBAcGFyYW0ge29iamVjdH0gbW9kZWwgVGhlIG1vZGVsIGluc3RhbmNlCisqIEBw
YXJhbSB7b2JqZWN0fSB2aWV3IFRoZSB2aWV3IGluc3RhbmNlCisqLworZnVuY3Rpb24gQ29udHJv
bGxlcihtb2RlbCwgdmlldykgeworICB2YXIgdGhhdCA9IHRoaXMKKyAgdGhhdC5tb2RlbCA9IG1v
ZGVsCisgIHRoYXQudmlldyA9IHZpZXcKKworICB0aGF0LnZpZXcuYmluZCgnbmV3VG9kbycsIGZ1
bmN0aW9uKHRpdGxlKSB7CisgICAgdGhhdC5hZGRJdGVtKHRpdGxlKQorICB9KQorCisgIHRoYXQu
dmlldy5iaW5kKCdpdGVtRWRpdCcsIGZ1bmN0aW9uKGl0ZW0pIHsKKyAgICB0aGF0LmVkaXRJdGVt
KGl0ZW0uaWQpCisgIH0pCisKKyAgdGhhdC52aWV3LmJpbmQoJ2l0ZW1FZGl0RG9uZScsIGZ1bmN0
aW9uKGl0ZW0pIHsKKyAgICB0aGF0LmVkaXRJdGVtU2F2ZShpdGVtLmlkLCBpdGVtLnRpdGxlKQor
ICB9KQorCisgIHRoYXQudmlldy5iaW5kKCdpdGVtRWRpdENhbmNlbCcsIGZ1bmN0aW9uKGl0ZW0p
IHsKKyAgICB0aGF0LmVkaXRJdGVtQ2FuY2VsKGl0ZW0uaWQpCisgIH0pCisKKyAgdGhhdC52aWV3
LmJpbmQoJ2l0ZW1SZW1vdmUnLCBmdW5jdGlvbihpdGVtKSB7CisgICAgdGhhdC5yZW1vdmVJdGVt
KGl0ZW0uaWQpCisgIH0pCisKKyAgdGhhdC52aWV3LmJpbmQoJ2l0ZW1Ub2dnbGUnLCBmdW5jdGlv
bihpdGVtKSB7CisgICAgdGhhdC50b2dnbGVDb21wbGV0ZShpdGVtLmlkLCBpdGVtLmNvbXBsZXRl
ZCkKKyAgfSkKKworICB0aGF0LnZpZXcuYmluZCgncmVtb3ZlQ29tcGxldGVkJywgZnVuY3Rpb24o
KSB7CisgICAgdGhhdC5yZW1vdmVDb21wbGV0ZWRJdGVtcygpCisgIH0pCisKKyAgdGhhdC52aWV3
LmJpbmQoJ3RvZ2dsZUFsbCcsIGZ1bmN0aW9uKHN0YXR1cykgeworICAgIHRoYXQudG9nZ2xlQWxs
KHN0YXR1cy5jb21wbGV0ZWQpCisgIH0pCit9CisKKy8qKgorKiBMb2FkcyBhbmQgaW5pdGlhbGlz
ZXMgdGhlIHZpZXcKKyoKKyogQHBhcmFtIHtzdHJpbmd9ICcnIHwgJ2FjdGl2ZScgfCAnY29tcGxl
dGVkJworKi8KK0NvbnRyb2xsZXIucHJvdG90eXBlLnNldFZpZXcgPSBmdW5jdGlvbihsb2NhdGlv
bkhhc2gpIHsKKyAgdmFyIHJvdXRlID0gbG9jYXRpb25IYXNoLnNwbGl0KCcvJylbMV0KKyAgdmFy
IHBhZ2UgPSByb3V0ZSB8fCAnJworICB0aGlzLl91cGRhdGVGaWx0ZXJTdGF0ZShwYWdlKQorfQor
CisvKioKKyogQW4gZXZlbnQgdG8gZmlyZSBvbiBsb2FkLiBXaWxsIGdldCBhbGwgaXRlbXMgYW5k
IGRpc3BsYXkgdGhlbSBpbiB0aGUKKyogdG9kby1saXN0CisqLworQ29udHJvbGxlci5wcm90b3R5
cGUuc2hvd0FsbCA9IGZ1bmN0aW9uKCkgeworICB2YXIgdGhhdCA9IHRoaXMKKyAgdGhhdC5tb2Rl
bC5yZWFkKGZ1bmN0aW9uKGRhdGEpIHsKKyAgICB0aGF0LnZpZXcucmVuZGVyKCdzaG93RW50cmll
cycsIGRhdGEpCisgIH0pCit9CisKKy8qKgorKiBSZW5kZXJzIGFsbCBhY3RpdmUgdGFza3MKKyov
CitDb250cm9sbGVyLnByb3RvdHlwZS5zaG93QWN0aXZlID0gZnVuY3Rpb24oKSB7CisgIHZhciB0
aGF0ID0gdGhpcworICB0aGF0Lm1vZGVsLnJlYWQoe2NvbXBsZXRlZDogZmFsc2V9LCBmdW5jdGlv
bihkYXRhKSB7CisgICAgdGhhdC52aWV3LnJlbmRlcignc2hvd0VudHJpZXMnLCBkYXRhKQorICB9
KQorfQorCisvKioKKyogUmVuZGVycyBhbGwgY29tcGxldGVkIHRhc2tzCisqLworQ29udHJvbGxl
ci5wcm90b3R5cGUuc2hvd0NvbXBsZXRlZCA9IGZ1bmN0aW9uKCkgeworICB2YXIgdGhhdCA9IHRo
aXMKKyAgdGhhdC5tb2RlbC5yZWFkKHtjb21wbGV0ZWQ6IHRydWV9LCBmdW5jdGlvbihkYXRhKSB7
CisgICAgdGhhdC52aWV3LnJlbmRlcignc2hvd0VudHJpZXMnLCBkYXRhKQorICB9KQorfQorCisv
KioKKyogQW4gZXZlbnQgdG8gZmlyZSB3aGVuZXZlciB5b3Ugd2FudCB0byBhZGQgYW4gaXRlbS4g
U2ltcGx5IHBhc3MgaW4gdGhlIGV2ZW50CisqIG9iamVjdCBhbmQgaXQnbGwgaGFuZGxlIHRoZSBE
T00gaW5zZXJ0aW9uIGFuZCBzYXZpbmcgb2YgdGhlIG5ldyBpdGVtLgorKi8KK0NvbnRyb2xsZXIu
cHJvdG90eXBlLmFkZEl0ZW0gPSBmdW5jdGlvbih0aXRsZSkgeworICB2YXIgdGhhdCA9IHRoaXMK
KworICBpZiAodGl0bGUudHJpbSgpID09PSAnJykgeworICAgIHJldHVybgorICB9CisKKyAgdGhh
dC5tb2RlbC5jcmVhdGUodGl0bGUsIGZ1bmN0aW9uKCkgeworICAgIHRoYXQudmlldy5yZW5kZXIo
J2NsZWFyTmV3VG9kbycpCisgICAgdGhhdC5fZmlsdGVyKHRydWUpCisgIH0pCit9CisKKy8qCisq
IFRyaWdnZXJzIHRoZSBpdGVtIGVkaXRpbmcgbW9kZS4KKyovCitDb250cm9sbGVyLnByb3RvdHlw
ZS5lZGl0SXRlbSA9IGZ1bmN0aW9uKGlkKSB7CisgIHZhciB0aGF0ID0gdGhpcworICB0aGF0Lm1v
ZGVsLnJlYWQoaWQsIGZ1bmN0aW9uKGRhdGEpIHsKKyAgICB0aGF0LnZpZXcucmVuZGVyKCdlZGl0
SXRlbScsIHtpZCwgdGl0bGU6IGRhdGFbMF0udGl0bGV9KQorICB9KQorfQorCisvKgorKiBGaW5p
c2hlcyB0aGUgaXRlbSBlZGl0aW5nIG1vZGUgc3VjY2Vzc2Z1bGx5LgorKi8KK0NvbnRyb2xsZXIu
cHJvdG90eXBlLmVkaXRJdGVtU2F2ZSA9IGZ1bmN0aW9uKGlkLCB0aXRsZSkgeworICB2YXIgdGhh
dCA9IHRoaXMKKyAgaWYgKHRpdGxlLnRyaW0oKSkgeworICAgIHRoYXQubW9kZWwudXBkYXRlKGlk
LCB7dGl0bGV9LCBmdW5jdGlvbigpIHsKKyAgICAgIHRoYXQudmlldy5yZW5kZXIoJ2VkaXRJdGVt
RG9uZScsIHtpZCwgdGl0bGV9KQorICAgIH0pCisgIH0gZWxzZSB7CisgICAgdGhhdC5yZW1vdmVJ
dGVtKGlkKQorICB9Cit9CisKKy8qCisqIENhbmNlbHMgdGhlIGl0ZW0gZWRpdGluZyBtb2RlLgor
Ki8KK0NvbnRyb2xsZXIucHJvdG90eXBlLmVkaXRJdGVtQ2FuY2VsID0gZnVuY3Rpb24oaWQpIHsK
KyAgdmFyIHRoYXQgPSB0aGlzCisgIHRoYXQubW9kZWwucmVhZChpZCwgZnVuY3Rpb24oZGF0YSkg
eworICAgIHRoYXQudmlldy5yZW5kZXIoJ2VkaXRJdGVtRG9uZScsIHtpZCwgdGl0bGU6IGRhdGFb
MF0udGl0bGV9KQorICB9KQorfQorCisvKioKKyogQnkgZ2l2aW5nIGl0IGFuIElEIGl0J2xsIGZp
bmQgdGhlIERPTSBlbGVtZW50IG1hdGNoaW5nIHRoYXQgSUQsCisqIHJlbW92ZSBpdCBmcm9tIHRo
ZSBET00gYW5kIGFsc28gcmVtb3ZlIGl0IGZyb20gc3RvcmFnZS4KKyoKKyogQHBhcmFtIHtudW1i
ZXJ9IGlkIFRoZSBJRCBvZiB0aGUgaXRlbSB0byByZW1vdmUgZnJvbSB0aGUgRE9NIGFuZAorKiBz
dG9yYWdlCisqLworQ29udHJvbGxlci5wcm90b3R5cGUucmVtb3ZlSXRlbSA9IGZ1bmN0aW9uKGlk
KSB7CisgIHZhciB0aGF0ID0gdGhpcworICB0aGF0Lm1vZGVsLnJlbW92ZShpZCwgZnVuY3Rpb24o
KSB7CisgICAgdGhhdC52aWV3LnJlbmRlcigncmVtb3ZlSXRlbScsIGlkKQorICB9KQorCisgIHRo
YXQuX2ZpbHRlcigpCit9CisKKy8qKgorKiBXaWxsIHJlbW92ZSBhbGwgY29tcGxldGVkIGl0ZW1z
IGZyb20gdGhlIERPTSBhbmQgc3RvcmFnZS4KKyovCitDb250cm9sbGVyLnByb3RvdHlwZS5yZW1v
dmVDb21wbGV0ZWRJdGVtcyA9IGZ1bmN0aW9uKCkgeworICB2YXIgdGhhdCA9IHRoaXMKKyAgdGhh
dC5tb2RlbC5yZWFkKHtjb21wbGV0ZWQ6IHRydWV9LCBmdW5jdGlvbihkYXRhKSB7CisgICAgZGF0
YS5mb3JFYWNoKGZ1bmN0aW9uKGl0ZW0pIHsKKyAgICAgIHRoYXQucmVtb3ZlSXRlbShpdGVtLmlk
KQorICAgIH0pCisgIH0pCisKKyAgdGhhdC5fZmlsdGVyKCkKK30KKworLyoqCisqIEdpdmUgaXQg
YW4gSUQgb2YgYSBtb2RlbCBhbmQgYSBjaGVja2JveCBhbmQgaXQgd2lsbCB1cGRhdGUgdGhlIGl0
ZW0KKyogaW4gc3RvcmFnZSBiYXNlZCBvbiB0aGUgY2hlY2tib3gncyBzdGF0ZS4KKyoKKyogQHBh
cmFtIHtudW1iZXJ9IGlkIFRoZSBJRCBvZiB0aGUgZWxlbWVudCB0byBjb21wbGV0ZSBvciB1bmNv
bXBsZXRlCisqIEBwYXJhbSB7b2JqZWN0fSBjaGVja2JveCBUaGUgY2hlY2tib3ggdG8gY2hlY2sg
dGhlIHN0YXRlIG9mIGNvbXBsZXRlCisqICAgICAgICAgICAgICAgICAgICAgICAgICBvciBub3QK
KyogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gc2lsZW50IFByZXZlbnQgcmUtZmlsdGVyaW5n
IHRoZSB0b2RvIGl0ZW1zCisqLworQ29udHJvbGxlci5wcm90b3R5cGUudG9nZ2xlQ29tcGxldGUg
PSBmdW5jdGlvbihpZCwgY29tcGxldGVkLCBzaWxlbnQpIHsKKyAgdmFyIHRoYXQgPSB0aGlzCisg
IHRoYXQubW9kZWwudXBkYXRlKGlkLCB7Y29tcGxldGVkfSwgZnVuY3Rpb24oKSB7CisgICAgdGhh
dC52aWV3LnJlbmRlcignZWxlbWVudENvbXBsZXRlJywgeworICAgICAgaWQsCisgICAgICBjb21w
bGV0ZWQsCisgICAgfSkKKyAgfSkKKworICBpZiAoIXNpbGVudCkgeworICAgIHRoYXQuX2ZpbHRl
cigpCisgIH0KK30KKworLyoqCisqIFdpbGwgdG9nZ2xlIEFMTCBjaGVja2JveGVzJyBvbi9vZmYg
c3RhdGUgYW5kIGNvbXBsZXRlbmVzcyBvZiBtb2RlbHMuCisqIEp1c3QgcGFzcyBpbiB0aGUgZXZl
bnQgb2JqZWN0LgorKi8KK0NvbnRyb2xsZXIucHJvdG90eXBlLnRvZ2dsZUFsbCA9IGZ1bmN0aW9u
KGNvbXBsZXRlZCkgeworICB2YXIgdGhhdCA9IHRoaXMKKyAgdGhhdC5tb2RlbC5yZWFkKHtjb21w
bGV0ZWQ6ICFjb21wbGV0ZWR9LCBmdW5jdGlvbihkYXRhKSB7CisgICAgZGF0YS5mb3JFYWNoKGZ1
bmN0aW9uKGl0ZW0pIHsKKyAgICAgIHRoYXQudG9nZ2xlQ29tcGxldGUoaXRlbS5pZCwgY29tcGxl
dGVkLCB0cnVlKQorICAgIH0pCisgIH0pCisKKyAgdGhhdC5fZmlsdGVyKCkKK30KKworLyoqCisq
IFVwZGF0ZXMgdGhlIHBpZWNlcyBvZiB0aGUgcGFnZSB3aGljaCBjaGFuZ2UgZGVwZW5kaW5nIG9u
IHRoZSByZW1haW5pbmcKKyogbnVtYmVyIG9mIHRvZG9zLgorKi8KK0NvbnRyb2xsZXIucHJvdG90
eXBlLl91cGRhdGVDb3VudCA9IGZ1bmN0aW9uKCkgeworICB2YXIgdGhhdCA9IHRoaXMKKyAgdGhh
dC5tb2RlbC5nZXRDb3VudChmdW5jdGlvbih0b2RvcykgeworICAgIHRoYXQudmlldy5yZW5kZXIo
J3VwZGF0ZUVsZW1lbnRDb3VudCcsIHRvZG9zLmFjdGl2ZSkKKyAgICB0aGF0LnZpZXcucmVuZGVy
KCdjbGVhckNvbXBsZXRlZEJ1dHRvbicsIHsKKyAgICAgIGNvbXBsZXRlZDogdG9kb3MuY29tcGxl
dGVkLAorICAgICAgdmlzaWJsZTogdG9kb3MuY29tcGxldGVkID4gMAorICAgIH0pCisKKyAgICB0
aGF0LnZpZXcucmVuZGVyKCd0b2dnbGVBbGwnLCB7Y2hlY2tlZDogdG9kb3MuY29tcGxldGVkID09
PSB0b2Rvcy50b3RhbH0pCisgICAgdGhhdC52aWV3LnJlbmRlcignY29udGVudEJsb2NrVmlzaWJp
bGl0eScsIHt2aXNpYmxlOiB0b2Rvcy50b3RhbCA+IDB9KQorICB9KQorfQorCisvKioKKyogUmUt
ZmlsdGVycyB0aGUgdG9kbyBpdGVtcywgYmFzZWQgb24gdGhlIGFjdGl2ZSByb3V0ZS4KKyogQHBh
cmFtIHtib29sZWFufHVuZGVmaW5lZH0gZm9yY2UgIGZvcmNlcyBhIHJlLXBhaW50aW5nIG9mIHRv
ZG8gaXRlbXMuCisqLworQ29udHJvbGxlci5wcm90b3R5cGUuX2ZpbHRlciA9IGZ1bmN0aW9uKGZv
cmNlKSB7CisgIHZhciBhY3RpdmVSb3V0ZSA9IHRoaXMuX2FjdGl2ZVJvdXRlLmNoYXJBdCgwKS50
b1VwcGVyQ2FzZSgpICsgdGhpcy5fYWN0aXZlUm91dGUuc3Vic3RyKDEpCisKKyAgLy8gVXBkYXRl
IHRoZSBlbGVtZW50cyBvbiB0aGUgcGFnZSwgd2hpY2ggY2hhbmdlIHdpdGggZWFjaCBjb21wbGV0
ZWQgdG9kbworICB0aGlzLl91cGRhdGVDb3VudCgpCisKKyAgLy8gSWYgdGhlIGxhc3QgYWN0aXZl
IHJvdXRlIGlzbid0ICJBbGwiLCBvciB3ZSdyZSBzd2l0Y2hpbmcgcm91dGVzLCB3ZQorICAvLyBy
ZS1jcmVhdGUgdGhlIHRvZG8gaXRlbSBlbGVtZW50cywgY2FsbGluZzoKKyAgLy8gICB0aGlzLnNo
b3dbQWxsfEFjdGl2ZXxDb21wbGV0ZWRdKCk7CisgIGlmIChmb3JjZSB8fCB0aGlzLl9sYXN0QWN0
aXZlUm91dGUgIT09ICdBbGwnIHx8IHRoaXMuX2xhc3RBY3RpdmVSb3V0ZSAhPT0gYWN0aXZlUm91
dGUpIHsKKyAgICB0aGlzWydzaG93JyArIGFjdGl2ZVJvdXRlXSgpCisgIH0KKworICB0aGlzLl9s
YXN0QWN0aXZlUm91dGUgPSBhY3RpdmVSb3V0ZQorfQorCisvKioKKyogU2ltcGx5IHVwZGF0ZXMg
dGhlIGZpbHRlciBuYXYncyBzZWxlY3RlZCBzdGF0ZXMKKyovCitDb250cm9sbGVyLnByb3RvdHlw
ZS5fdXBkYXRlRmlsdGVyU3RhdGUgPSBmdW5jdGlvbihjdXJyZW50UGFnZSkgeworICAvLyBTdG9y
ZSBhIHJlZmVyZW5jZSB0byB0aGUgYWN0aXZlIHJvdXRlLCBhbGxvd2luZyB1cyB0byByZS1maWx0
ZXIgdG9kbworICAvLyBpdGVtcyBhcyB0aGV5IGFyZSBtYXJrZWQgY29tcGxldGUgb3IgaW5jb21w
bGV0ZS4KKyAgY3VycmVudFBhZ2UgPSBjdXJyZW50UGFnZS5zcGxpdCgnPycpWzBdCisgIHRoaXMu
X2FjdGl2ZVJvdXRlID0gY3VycmVudFBhZ2UKKworICBpZiAoY3VycmVudFBhZ2UgPT09ICcnKSB7
CisgICAgdGhpcy5fYWN0aXZlUm91dGUgPSAnQWxsJworICB9CisKKyAgdGhpcy5fZmlsdGVyKCkK
KworICB0aGlzLnZpZXcucmVuZGVyKCdzZXRGaWx0ZXInLCBjdXJyZW50UGFnZSkKK30KZGlmZiAt
LWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFu
aWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9zcmMvY29udHJvbGxlci50ZXN0Lmpz
IGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxh
LWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrL3NyYy9jb250cm9sbGVyLnRlc3QuanMKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uYjM0OTU1OWI5YzgzN2E3ZDU4ZWExYTMwNWNiNzc3ODdhYmNkMGYyMgotLS0gL2Rl
di9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9t
dmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9zcmMvY29udHJvbGxlci50
ZXN0LmpzCkBAIC0wLDAgKzEsNyBAQAoraW1wb3J0IENvbnRyb2xsZXIgZnJvbSAnLi9jb250cm9s
bGVyJworCitkZXNjcmliZSgnY29udHJvbGxlcicsICgpID0+IHsKKyAgaXQoJ2V4aXN0cycsICgp
ID0+IHsKKyAgICBleHBlY3QoQ29udHJvbGxlcikudG8uZXhpc3QKKyAgfSkKK30pCmRpZmYgLS1n
aXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3Zhbmls
bGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svc3JjL2hlbHBlcnMuanMgYi9QZXJmb3Jt
YW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMv
ZXMyMDE1LWJhYmVsLXdlYnBhY2svc3JjL2hlbHBlcnMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTg4ZWNiOGQ5
NDQ2ZTUxNDA3YjY2YmMwYmExYTc5ZDQxNGJjOGM2NQotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZv
cm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxl
cy9lczIwMTUtYmFiZWwtd2VicGFjay9zcmMvaGVscGVycy5qcwpAQCAtMCwwICsxLDYxIEBACitl
eHBvcnQge3FzLCBxc2EsICRvbiwgJGRlbGVnYXRlLCAkcGFyZW50LCByZW1vdmV9CisKKy8vIEdl
dCBlbGVtZW50KHMpIGJ5IENTUyBzZWxlY3RvcjoKK2Z1bmN0aW9uIHFzKHNlbGVjdG9yLCBzY29w
ZSkgeworICByZXR1cm4gKHNjb3BlIHx8IGRvY3VtZW50KS5xdWVyeVNlbGVjdG9yKHNlbGVjdG9y
KQorfQorCitmdW5jdGlvbiBxc2Eoc2VsZWN0b3IsIHNjb3BlKSB7CisgIHJldHVybiAoc2NvcGUg
fHwgZG9jdW1lbnQpLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpCit9CisKKy8vIGFkZEV2ZW50
TGlzdGVuZXIgd3JhcHBlcjoKK2Z1bmN0aW9uICRvbih0YXJnZXQsIHR5cGUsIGNhbGxiYWNrLCB1
c2VDYXB0dXJlKSB7CisgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGNhbGxiYWNrLCAh
IXVzZUNhcHR1cmUpCit9CisKKy8vIEF0dGFjaCBhIGhhbmRsZXIgdG8gZXZlbnQgZm9yIGFsbCBl
bGVtZW50cyB0aGF0IG1hdGNoIHRoZSBzZWxlY3RvciwKKy8vIG5vdyBvciBpbiB0aGUgZnV0dXJl
LCBiYXNlZCBvbiBhIHJvb3QgZWxlbWVudAorZnVuY3Rpb24gJGRlbGVnYXRlKHRhcmdldCwgc2Vs
ZWN0b3IsIHR5cGUsIGhhbmRsZXIpIHsKKyAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5v
cmcvZW4tVVMvZG9jcy9XZWIvRXZlbnRzL2JsdXIKKyAgdmFyIHVzZUNhcHR1cmUgPSB0eXBlID09
PSAnYmx1cicgfHwgdHlwZSA9PT0gJ2ZvY3VzJworICAkb24odGFyZ2V0LCB0eXBlLCBkaXNwYXRj
aEV2ZW50LCB1c2VDYXB0dXJlKQorCisgIGZ1bmN0aW9uIGRpc3BhdGNoRXZlbnQoZXZlbnQpIHsK
KyAgICB2YXIgdGFyZ2V0RWxlbWVudCA9IGV2ZW50LnRhcmdldAorICAgIHZhciBwb3RlbnRpYWxF
bGVtZW50cyA9IHFzYShzZWxlY3RvciwgdGFyZ2V0KQorICAgIHZhciBoYXNNYXRjaCA9IEFycmF5
LnByb3RvdHlwZS5pbmRleE9mLmNhbGwocG90ZW50aWFsRWxlbWVudHMsIHRhcmdldEVsZW1lbnQp
ID49IDAKKworICAgIGlmIChoYXNNYXRjaCkgeworICAgICAgaGFuZGxlci5jYWxsKHRhcmdldEVs
ZW1lbnQsIGV2ZW50KQorICAgIH0KKyAgfQorfQorCisvLyBGaW5kIHRoZSBlbGVtZW50J3MgcGFy
ZW50IHdpdGggdGhlIGdpdmVuIHRhZyBuYW1lOgorLy8gJHBhcmVudChxcygnYScpLCAnZGl2Jyk7
CitmdW5jdGlvbiAkcGFyZW50KGVsZW1lbnQsIHRhZ05hbWUpIHsKKyAgaWYgKCFlbGVtZW50LnBh
cmVudE5vZGUpIHsKKyAgICByZXR1cm4gdW5kZWZpbmVkCisgIH0KKyAgaWYgKGVsZW1lbnQucGFy
ZW50Tm9kZS50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09IHRhZ05hbWUudG9Mb3dlckNhc2UoKSkg
eworICAgIHJldHVybiBlbGVtZW50LnBhcmVudE5vZGUKKyAgfQorICByZXR1cm4gJHBhcmVudChl
bGVtZW50LnBhcmVudE5vZGUsIHRhZ05hbWUpCit9CisKKy8vIHJlbW92ZXMgYW4gZWxlbWVudCBm
cm9tIGFuIGFycmF5CisvLyBjb25zdCB4ID0gWzEsMiwzXQorLy8gcmVtb3ZlKHgsIDIpCisvLyB4
IH49PSBbMSwzXQorZnVuY3Rpb24gcmVtb3ZlKGFycmF5LCB0aGluZykgeworICBjb25zdCBpbmRl
eCA9IGFycmF5LmluZGV4T2YodGhpbmcpCisgIGlmIChpbmRleCA9PT0gLTEpIHsKKyAgICByZXR1
cm4gYXJyYXkKKyAgfQorICBhcnJheS5zcGxpY2UoaW5kZXgsIDEpCit9CisKKy8vIEFsbG93IGZv
ciBsb29waW5nIG9uIG5vZGVzIGJ5IGNoYWluaW5nOgorLy8gcXNhKCcuZm9vJykuZm9yRWFjaChm
dW5jdGlvbiAoKSB7fSkKK05vZGVMaXN0LnByb3RvdHlwZS5mb3JFYWNoID0gQXJyYXkucHJvdG90
eXBlLmZvckVhY2gKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVz
b3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9zcmMv
aW5kZXguaHRtbCBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9t
dmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9zcmMvaW5kZXguaHRtbApu
ZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi43MjEyY2MyNDY1NmJhMjFkMzA0YWZmZThkYWJlOWRiMjBiZjNmODAyCi0tLSAv
ZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9k
b212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrL3NyYy9pbmRleC5odG1s
CkBAIC0wLDAgKzEsNDQgQEAKKzwhZG9jdHlwZSBodG1sPgorPGh0bWwgbGFuZz0iZW4iIGRhdGEt
ZnJhbWV3b3JrPSJqYXZhc2NyaXB0Ij4KKyAgPGhlYWQ+CisgICAgPG1ldGEgY2hhcnNldD0idXRm
LTgiPgorICAgIDx0aXRsZT5WYW5pbGxhSlMg4oCiIFRvZG9NVkM8L3RpdGxlPgorICAgIDwlPWh0
bWxXZWJwYWNrUGx1Z2luLmZpbGVzLndlYnBhY2tNYW5pZmVzdCU+CisgIDwvaGVhZD4KKyAgPGJv
ZHk+CisgICAgPHNlY3Rpb24gY2xhc3M9InRvZG9hcHAiPgorICAgICAgPGhlYWRlciBjbGFzcz0i
aGVhZGVyIj4KKyAgICAgICAgPGgxPnRvZG9zPC9oMT4KKyAgICAgICAgPGlucHV0IGNsYXNzPSJu
ZXctdG9kbyIgcGxhY2Vob2xkZXI9IldoYXQgbmVlZHMgdG8gYmUgZG9uZT8iIGF1dG9mb2N1cz4K
KyAgICAgIDwvaGVhZGVyPgorICAgICAgPHNlY3Rpb24gY2xhc3M9Im1haW4iPgorICAgICAgICA8
aW5wdXQgY2xhc3M9InRvZ2dsZS1hbGwiIHR5cGU9ImNoZWNrYm94Ij4KKyAgICAgICAgPGxhYmVs
IGZvcj0idG9nZ2xlLWFsbCI+TWFyayBhbGwgYXMgY29tcGxldGU8L2xhYmVsPgorICAgICAgICA8
dWwgY2xhc3M9InRvZG8tbGlzdCI+PC91bD4KKyAgICAgIDwvc2VjdGlvbj4KKyAgICAgIDxmb290
ZXIgY2xhc3M9ImZvb3RlciI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJ0b2RvLWNvdW50Ij48L3Nw
YW4+CisgICAgICAgIDx1bCBjbGFzcz0iZmlsdGVycyI+CisgICAgICAgICAgPGxpPgorICAgICAg
ICAgICAgPGEgaHJlZj0iIy8iIGNsYXNzPSJzZWxlY3RlZCI+QWxsPC9hPgorICAgICAgICAgIDwv
bGk+CisgICAgICAgICAgPGxpPgorICAgICAgICAgICAgPGEgaHJlZj0iIy9hY3RpdmUiPkFjdGl2
ZTwvYT4KKyAgICAgICAgICA8L2xpPgorICAgICAgICAgIDxsaT4KKyAgICAgICAgICAgIDxhIGhy
ZWY9IiMvY29tcGxldGVkIj5Db21wbGV0ZWQ8L2E+CisgICAgICAgICAgPC9saT4KKyAgICAgICAg
PC91bD4KKyAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY2xlYXItY29tcGxldGVkIj5DbGVhciBjb21w
bGV0ZWQ8L2J1dHRvbj4KKyAgICAgIDwvZm9vdGVyPgorICAgIDwvc2VjdGlvbj4KKyAgICA8Zm9v
dGVyIGNsYXNzPSJpbmZvIj4KKyAgICAgIDxwPkRvdWJsZS1jbGljayB0byBlZGl0IGEgdG9kbzwv
cD4KKyAgICAgIDxwPlNwZWVkb21ldGVyIHZlcnNpb24gYnkgPGEgaHJlZj0iaHR0cDovL3R3aXR0
ZXIuY29tL2FkZHlvc21hbmkiPkFkZHkgT3NtYW5pPC9hPjwvcD4KKyAgICAgIDxwPkNyZWF0ZWQg
YnkgPGEgaHJlZj0iaHR0cDovL3R3aXR0ZXIuY29tL29zY2FyZ29kc29uIj5Pc2NhciBHb2Rzb248
L2E+PC9wPgorICAgICAgPHA+UmVmYWN0b3JlZCBieSA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5j
b20vY2J1cmdtZXIiPkNocmlzdG9waCBCdXJnbWVyPC9hPjwvcD4KKyAgICAgIDxwPlBvcnRlZCB0
byBFUzYgYnkgPGEgaHJlZj0iaHR0cHM6Ly90d2l0dGVyLmNvbS9rZW50Y2RvZGRzIj5LZW50IEMu
IERvZGRzPC9hPjwvcD4KKyAgICAgIDxwPlBhcnQgb2YgPGEgaHJlZj0iaHR0cDovL3RvZG9tdmMu
Y29tIj5Ub2RvTVZDPC9hPjwvcD4KKyAgICA8L2Zvb3Rlcj4KKyAgPC9ib2R5PgorPC9odG1sPgpk
aWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212
Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrL3NyYy9tb2RlbC5qcyBiL1Bl
cmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFt
cGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9zcmMvbW9kZWwuanMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDZmYTU4
YTZiZWQ3MzIzZjYyY2YzNTcyNTFiOTc1NDM4MjcwNWY3YwotLS0gL2Rldi9udWxsCisrKyBiL1Bl
cmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFt
cGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9zcmMvbW9kZWwuanMKQEAgLTAsMCArMSwxMTYgQEAK
K2V4cG9ydCBkZWZhdWx0IE1vZGVsCisKKy8qKgorKiBDcmVhdGVzIGEgbmV3IE1vZGVsIGluc3Rh
bmNlIGFuZCBob29rcyB1cCB0aGUgc3RvcmFnZS4KKyoKKyogQGNvbnN0cnVjdG9yCisqIEBwYXJh
bSB7b2JqZWN0fSBzdG9yYWdlIEEgcmVmZXJlbmNlIHRvIHRoZSBjbGllbnQgc2lkZSBzdG9yYWdl
IGNsYXNzCisqLworZnVuY3Rpb24gTW9kZWwoc3RvcmFnZSkgeworICB0aGlzLnN0b3JhZ2UgPSBz
dG9yYWdlCit9CisKKy8qKgorKiBDcmVhdGVzIGEgbmV3IHRvZG8gbW9kZWwKKyoKKyogQHBhcmFt
IHtzdHJpbmd9IFt0aXRsZV0gVGhlIHRpdGxlIG9mIHRoZSB0YXNrCisqIEBwYXJhbSB7ZnVuY3Rp
b259IFtjYWxsYmFja10gVGhlIGNhbGxiYWNrIHRvIGZpcmUgYWZ0ZXIgdGhlIG1vZGVsIGlzIGNy
ZWF0ZWQKKyovCitNb2RlbC5wcm90b3R5cGUuY3JlYXRlID0gZnVuY3Rpb24odGl0bGUsIGNhbGxi
YWNrKSB7CisgIHRpdGxlID0gdGl0bGUgfHwgJycKKyAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBm
dW5jdGlvbigpIHsKKyAgfQorCisgIHZhciBuZXdJdGVtID0geworICAgIHRpdGxlOiB0aXRsZS50
cmltKCksCisgICAgY29tcGxldGVkOiBmYWxzZQorICB9CisKKyAgdGhpcy5zdG9yYWdlLnNhdmUo
bmV3SXRlbSwgY2FsbGJhY2spCit9CisKKy8qKgorICogRmluZHMgYW5kIHJldHVybnMgYSBtb2Rl
bCBpbiBzdG9yYWdlLiBJZiBubyBxdWVyeSBpcyBnaXZlbiBpdCdsbCBzaW1wbHkKKyAqIHJldHVy
biBldmVyeXRoaW5nLiBJZiB5b3UgcGFzcyBpbiBhIHN0cmluZyBvciBudW1iZXIgaXQnbGwgbG9v
ayB0aGF0IHVwIGFzCisgKiB0aGUgSUQgb2YgdGhlIG1vZGVsIHRvIGZpbmQuIExhc3RseSwgeW91
IGNhbiBwYXNzIGl0IGFuIG9iamVjdCB0byBtYXRjaCBhZ2FpbnN0LgorICoKKyAqIEBwYXJhbSB7
c3RyaW5nfG51bWJlcnxvYmplY3R9IFtxdWVyeV0gQSBxdWVyeSB0byBtYXRjaCBtb2RlbHMgYWdh
aW5zdAorICogQHBhcmFtIHtmdW5jdGlvbn0gW2NhbGxiYWNrXSBUaGUgY2FsbGJhY2sgdG8gZmly
ZSBhZnRlciB0aGUgbW9kZWwgaXMgZm91bmQKKyAqCisgKiBAZXhhbXBsZQorICogbW9kZWwucmVh
ZCgxLCBmdW5jKTsgLy8gV2lsbCBmaW5kIHRoZSBtb2RlbCB3aXRoIGFuIElEIG9mIDEKKyAqIG1v
ZGVsLnJlYWQoJzEnKTsgLy8gU2FtZSBhcyBhYm92ZQorICogLy9CZWxvdyB3aWxsIGZpbmQgYSBt
b2RlbCB3aXRoIGZvbyBlcXVhbGxpbmcgYmFyIGFuZCBoZWxsbyBlcXVhbGxpbmcgd29ybGQuCisg
KiBtb2RlbC5yZWFkKHsgZm9vOiAnYmFyJywgaGVsbG86ICd3b3JsZCcgfSk7CisgKi8KK01vZGVs
LnByb3RvdHlwZS5yZWFkID0gZnVuY3Rpb24ocXVlcnksIGNhbGxiYWNrKSB7CisgIHZhciBxdWVy
eVR5cGUgPSB0eXBlb2YgcXVlcnkKKyAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigp
IHsKKyAgfQorCisgIGlmIChxdWVyeVR5cGUgPT09ICdmdW5jdGlvbicpIHsKKyAgICBjYWxsYmFj
ayA9IHF1ZXJ5CisgICAgcmV0dXJuIHRoaXMuc3RvcmFnZS5maW5kQWxsKGNhbGxiYWNrKQorICB9
IGVsc2UgaWYgKHF1ZXJ5VHlwZSA9PT0gJ3N0cmluZycgfHwgcXVlcnlUeXBlID09PSAnbnVtYmVy
JykgeworICAgIHF1ZXJ5ID0gcGFyc2VJbnQocXVlcnksIDEwKQorICAgIHRoaXMuc3RvcmFnZS5m
aW5kKHtpZDogcXVlcnl9LCBjYWxsYmFjaykKKyAgfSBlbHNlIHsKKyAgICB0aGlzLnN0b3JhZ2Uu
ZmluZChxdWVyeSwgY2FsbGJhY2spCisgIH0KKyAgcmV0dXJuIHVuZGVmaW5lZAorfQorCisvKioK
KyogVXBkYXRlcyBhIG1vZGVsIGJ5IGdpdmluZyBpdCBhbiBJRCwgZGF0YSB0byB1cGRhdGUsIGFu
ZCBhIGNhbGxiYWNrIHRvIGZpcmUgd2hlbgorKiB0aGUgdXBkYXRlIGlzIGNvbXBsZXRlLgorKgor
KiBAcGFyYW0ge251bWJlcn0gaWQgVGhlIGlkIG9mIHRoZSBtb2RlbCB0byB1cGRhdGUKKyogQHBh
cmFtIHtvYmplY3R9IGRhdGEgVGhlIHByb3BlcnRpZXMgdG8gdXBkYXRlIGFuZCB0aGVpciBuZXcg
dmFsdWUKKyogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGZpcmUg
d2hlbiB0aGUgdXBkYXRlIGlzIGNvbXBsZXRlLgorKi8KK01vZGVsLnByb3RvdHlwZS51cGRhdGUg
PSBmdW5jdGlvbihpZCwgZGF0YSwgY2FsbGJhY2spIHsKKyAgdGhpcy5zdG9yYWdlLnNhdmUoZGF0
YSwgY2FsbGJhY2ssIGlkKQorfQorCisvKioKKyogUmVtb3ZlcyBhIG1vZGVsIGZyb20gc3RvcmFn
ZQorKgorKiBAcGFyYW0ge251bWJlcn0gaWQgVGhlIElEIG9mIHRoZSBtb2RlbCB0byByZW1vdmUK
KyogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGZpcmUgd2hlbiB0
aGUgcmVtb3ZhbCBpcyBjb21wbGV0ZS4KKyovCitNb2RlbC5wcm90b3R5cGUucmVtb3ZlID0gZnVu
Y3Rpb24oaWQsIGNhbGxiYWNrKSB7CisgIHRoaXMuc3RvcmFnZS5yZW1vdmUoaWQsIGNhbGxiYWNr
KQorfQorCisvKioKKyogV0FSTklORzogV2lsbCByZW1vdmUgQUxMIGRhdGEgZnJvbSBzdG9yYWdl
LgorKgorKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gZmlyZSB3
aGVuIHRoZSBzdG9yYWdlIGlzIHdpcGVkLgorKi8KK01vZGVsLnByb3RvdHlwZS5yZW1vdmVBbGwg
PSBmdW5jdGlvbihjYWxsYmFjaykgeworICB0aGlzLnN0b3JhZ2UuZHJvcChjYWxsYmFjaykKK30K
KworLyoqCisqIFJldHVybnMgYSBjb3VudCBvZiBhbGwgdG9kb3MKKyovCitNb2RlbC5wcm90b3R5
cGUuZ2V0Q291bnQgPSBmdW5jdGlvbihjYWxsYmFjaykgeworICB2YXIgdG9kb3MgPSB7CisgICAg
YWN0aXZlOiAwLAorICAgIGNvbXBsZXRlZDogMCwKKyAgICB0b3RhbDogMAorICB9CisKKyAgdGhp
cy5zdG9yYWdlLmZpbmRBbGwoZnVuY3Rpb24oZGF0YSkgeworICAgIGRhdGEuZm9yRWFjaChmdW5j
dGlvbih0b2RvKSB7CisgICAgICBpZiAodG9kby5jb21wbGV0ZWQpIHsKKyAgICAgICAgdG9kb3Mu
Y29tcGxldGVkKysKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHRvZG9zLmFjdGl2ZSsrCisgICAg
ICB9CisKKyAgICAgIHRvZG9zLnRvdGFsKysKKyAgICB9KQorICAgIGNhbGxiYWNrKHRvZG9zKQor
ICB9KQorfQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJj
ZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrL3NyYy9zdG9y
ZS5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFu
aWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9zcmMvc3RvcmUuanMKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uYzNiOTdjMjA3Zjk5ZmQ0M2UwNmRlM2EwNjJjNTNjMmE0YjU4OWIzNAotLS0gL2Rldi9udWxs
CisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFu
aWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9zcmMvc3RvcmUuanMKQEAgLTAsMCAr
MSwxNTAgQEAKK2ltcG9ydCB7cmVtb3ZlfSBmcm9tICcuL2hlbHBlcnMnCitleHBvcnQgZGVmYXVs
dCBTdG9yZQorCisvKioKKyAqIENyZWF0ZXMgYSBuZXcgY2xpZW50IHNpZGUgc3RvcmFnZSBvYmpl
Y3QgYW5kIHdpbGwgY3JlYXRlIGFuIGVtcHR5CisgKiBjb2xsZWN0aW9uIGlmIG5vIGNvbGxlY3Rp
b24gYWxyZWFkeSBleGlzdHMuCisgKgorICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgVGhlIG5hbWUg
b2Ygb3VyIERCIHdlIHdhbnQgdG8gdXNlCisgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayBP
dXIgZmFrZSBEQiB1c2VzIGNhbGxiYWNrcyBiZWNhdXNlIGluCisgKiByZWFsIGxpZmUgeW91IHBy
b2JhYmx5IHdvdWxkIGJlIG1ha2luZyBBSkFYIGNhbGxzCisgKi8KK2Z1bmN0aW9uIFN0b3JlKG5h
bWUsIGNhbGxiYWNrKSB7CisgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7Cisg
IH0KKworICB0aGlzLl9kYk5hbWUgPSBuYW1lCisKKyAgaWYgKCFsb2NhbFN0b3JhZ2VbbmFtZV0p
IHsKKyAgICB2YXIgZGF0YSA9IHsKKyAgICAgIHRvZG9zOiBbXQorICAgIH0KKworICAgIGxvY2Fs
U3RvcmFnZVtuYW1lXSA9IEpTT04uc3RyaW5naWZ5KGRhdGEpCisgIH0KKworICBjYWxsYmFjay5j
YWxsKHRoaXMsIEpTT04ucGFyc2UobG9jYWxTdG9yYWdlW25hbWVdKSkKKyAgdGhpcy5zdWJzY3Jp
YmVycyA9IFtdCit9CisKK1N0b3JlLnByb3RvdHlwZS5zdWJzY3JpYmUgPSBmdW5jdGlvbihzdWJz
Y3JpYmVyKSB7CisgIHRoaXMuc3Vic2NyaWJlcnMucHVzaChzdWJzY3JpYmVyKQorICByZXR1cm4g
KCkgPT4gcmVtb3ZlKHRoaXMuc3Vic2NyaWJlcnMsIHN1YnNjcmliZXIpCit9CisKK1N0b3JlLnBy
b3RvdHlwZS5fbm90aWZ5ID0gZnVuY3Rpb24oKSB7CisgIHRoaXMuc3Vic2NyaWJlcnMuZm9yRWFj
aChzID0+IHMoKSkKK30KKworLyoqCisqIEZpbmRzIGl0ZW1zIGJhc2VkIG9uIGEgcXVlcnkgZ2l2
ZW4gYXMgYSBKUyBvYmplY3QKKyoKKyogQHBhcmFtIHtvYmplY3R9IHF1ZXJ5IFRoZSBxdWVyeSB0
byBtYXRjaCBhZ2FpbnN0IChpLmUuIHtmb286ICdiYXInfSkKKyogQHBhcmFtIHtmdW5jdGlvbn0g
Y2FsbGJhY2sgICBUaGUgY2FsbGJhY2sgdG8gZmlyZSB3aGVuIHRoZSBxdWVyeSBoYXMKKyogY29t
cGxldGVkIHJ1bm5pbmcKKyoKKyogQGV4YW1wbGUKKyogZGIuZmluZCh7Zm9vOiAnYmFyJywgaGVs
bG86ICd3b3JsZCd9LCBmdW5jdGlvbiAoZGF0YSkgeworKiAgIC8vIGRhdGEgd2lsbCByZXR1cm4g
YW55IGl0ZW1zIHRoYXQgaGF2ZSBmb286IGJhciBhbmQKKyogICAvLyBoZWxsbzogd29ybGQgaW4g
dGhlaXIgcHJvcGVydGllcworKiB9KTsKKyovCitTdG9yZS5wcm90b3R5cGUuZmluZCA9IGZ1bmN0
aW9uKHF1ZXJ5LCBjYWxsYmFjaykgeworICBpZiAoIWNhbGxiYWNrKSB7CisgICAgcmV0dXJuCisg
IH0KKworICB2YXIgdG9kb3MgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZVt0aGlzLl9kYk5hbWVd
KS50b2RvcworCisgIGNhbGxiYWNrLmNhbGwodGhpcywgdG9kb3MuZmlsdGVyKGZ1bmN0aW9uKHRv
ZG8pIHsKKyAgICBmb3IgKHZhciBxIGluIHF1ZXJ5KSB7CisgICAgICBpZiAocXVlcnlbcV0gIT09
IHRvZG9bcV0pIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlCisgICAgICB9CisgICAgfQorICAgIHJl
dHVybiB0cnVlCisgIH0pKQorfQorCisvKioKKyogV2lsbCByZXRyaWV2ZSBhbGwgZGF0YSBmcm9t
IHRoZSBjb2xsZWN0aW9uCisqCisqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrIFRoZSBjYWxs
YmFjayB0byBmaXJlIHVwb24gcmV0cmlldmluZyBkYXRhCisqLworU3RvcmUucHJvdG90eXBlLmZp
bmRBbGwgPSBmdW5jdGlvbihjYWxsYmFjaykgeworICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1
bmN0aW9uKCkgeworICB9CisgIGNhbGxiYWNrLmNhbGwodGhpcywgSlNPTi5wYXJzZShsb2NhbFN0
b3JhZ2VbdGhpcy5fZGJOYW1lXSkudG9kb3MpCit9CisKKy8qKgorKiBXaWxsIHNhdmUgdGhlIGdp
dmVuIGRhdGEgdG8gdGhlIERCLiBJZiBubyBpdGVtIGV4aXN0cyBpdCB3aWxsIGNyZWF0ZSBhIG5l
dworKiBpdGVtLCBvdGhlcndpc2UgaXQnbGwgc2ltcGx5IHVwZGF0ZSBhbiBleGlzdGluZyBpdGVt
J3MgcHJvcGVydGllcworKgorKiBAcGFyYW0ge29iamVjdH0gdXBkYXRlRGF0YSBUaGUgZGF0YSB0
byBzYXZlIGJhY2sgaW50byB0aGUgREIKKyogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgVGhl
IGNhbGxiYWNrIHRvIGZpcmUgYWZ0ZXIgc2F2aW5nCisqIEBwYXJhbSB7bnVtYmVyfSBpZCBBbiBv
cHRpb25hbCBwYXJhbSB0byBlbnRlciBhbiBJRCBvZiBhbiBpdGVtIHRvIHVwZGF0ZQorKi8KK1N0
b3JlLnByb3RvdHlwZS5zYXZlID0gZnVuY3Rpb24odXBkYXRlRGF0YSwgY2FsbGJhY2ssIGlkKSB7
CisgIHZhciBkYXRhID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2VbdGhpcy5fZGJOYW1lXSkKKyAg
dmFyIHRvZG9zID0gZGF0YS50b2RvcworCisgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rp
b24oKSB7CisgIH0KKworICAvLyBJZiBhbiBJRCB3YXMgYWN0dWFsbHkgZ2l2ZW4sIGZpbmQgdGhl
IGl0ZW0gYW5kIHVwZGF0ZSBlYWNoIHByb3BlcnR5CisgIGlmIChpZCkgeworICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgdG9kb3MubGVuZ3RoOyBpKyspIHsKKyAgICAgIGlmICh0b2Rvc1tpXS5pZCA9
PT0gaWQpIHsKKyAgICAgICAgZm9yICh2YXIga2V5IGluIHVwZGF0ZURhdGEpIHsgLy8gZXNsaW50
LWRpc2FibGUtbGluZSBndWFyZC1mb3ItaW4KKyAgICAgICAgICB0b2Rvc1tpXVtrZXldID0gdXBk
YXRlRGF0YVtrZXldCisgICAgICAgIH0KKyAgICAgICAgYnJlYWsKKyAgICAgIH0KKyAgICB9CisK
KyAgICBsb2NhbFN0b3JhZ2VbdGhpcy5fZGJOYW1lXSA9IEpTT04uc3RyaW5naWZ5KGRhdGEpCisg
ICAgY2FsbGJhY2suY2FsbCh0aGlzLCBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZVt0aGlzLl9kYk5h
bWVdKS50b2RvcykKKyAgfSBlbHNlIHsKKyAgICAvLyBHZW5lcmF0ZSBhbiBJRAorICAgIHVwZGF0
ZURhdGEuaWQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKQorCisgICAgdG9kb3MucHVzaCh1cGRhdGVE
YXRhKQorICAgIGxvY2FsU3RvcmFnZVt0aGlzLl9kYk5hbWVdID0gSlNPTi5zdHJpbmdpZnkoZGF0
YSkKKyAgICBjYWxsYmFjay5jYWxsKHRoaXMsIFt1cGRhdGVEYXRhXSkKKyAgfQorICB0aGlzLl9u
b3RpZnkoKQorfQorCisvKioKKyogV2lsbCByZW1vdmUgYW4gaXRlbSBmcm9tIHRoZSBTdG9yZSBi
YXNlZCBvbiBpdHMgSUQKKyoKKyogQHBhcmFtIHtudW1iZXJ9IGlkIFRoZSBJRCBvZiB0aGUgaXRl
bSB5b3Ugd2FudCB0byByZW1vdmUKKyogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGNh
bGxiYWNrIHRvIGZpcmUgYWZ0ZXIgc2F2aW5nCisqLworU3RvcmUucHJvdG90eXBlLnJlbW92ZSA9
IGZ1bmN0aW9uKGlkLCBjYWxsYmFjaykgeworICB2YXIgZGF0YSA9IEpTT04ucGFyc2UobG9jYWxT
dG9yYWdlW3RoaXMuX2RiTmFtZV0pCisgIHZhciB0b2RvcyA9IGRhdGEudG9kb3MKKworICBmb3Ig
KHZhciBpID0gMDsgaSA8IHRvZG9zLmxlbmd0aDsgaSsrKSB7CisgICAgaWYgKHRvZG9zW2ldLmlk
ID09PSBpZCkgeworICAgICAgdG9kb3Muc3BsaWNlKGksIDEpCisgICAgICBicmVhaworICAgIH0K
KyAgfQorCisgIGxvY2FsU3RvcmFnZVt0aGlzLl9kYk5hbWVdID0gSlNPTi5zdHJpbmdpZnkoZGF0
YSkKKyAgY2FsbGJhY2suY2FsbCh0aGlzLCBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZVt0aGlzLl9k
Yk5hbWVdKS50b2RvcykKKyAgdGhpcy5fbm90aWZ5KCkKK30KKworLyoqCisqIFdpbGwgZHJvcCBh
bGwgc3RvcmFnZSBhbmQgc3RhcnQgZnJlc2gKKyoKKyogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJh
Y2sgVGhlIGNhbGxiYWNrIHRvIGZpcmUgYWZ0ZXIgZHJvcHBpbmcgdGhlIGRhdGEKKyovCitTdG9y
ZS5wcm90b3R5cGUuZHJvcCA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7CisgIGxvY2FsU3RvcmFnZVt0
aGlzLl9kYk5hbWVdID0gSlNPTi5zdHJpbmdpZnkoe3RvZG9zOiBbXX0pCisgIGNhbGxiYWNrLmNh
bGwodGhpcywgSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2VbdGhpcy5fZGJOYW1lXSkudG9kb3MpCisg
IHRoaXMuX25vdGlmeSgpCit9CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21l
dGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBh
Y2svc3JjL3RlbXBsYXRlLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJj
ZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrL3NyYy90ZW1w
bGF0ZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi42MGM0ZjZmYzg0NzA4ZjdjYzM4YzZjY2E0ZGZiZmIzZGVlOWQ0
YWVmCi0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNv
dXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrL3NyYy90
ZW1wbGF0ZS5qcwpAQCAtMCwwICsxLDExMCBAQAorZXhwb3J0IGRlZmF1bHQgVGVtcGxhdGUKKwor
dmFyIGh0bWxFc2NhcGVzID0geworICAnJic6ICcmYW1wOycsCisgICc8JzogJyZsdDsnLAorICAn
Pic6ICcmZ3Q7JywKKyAgJyInOiAnJnF1b3Q7JywKKyAgJ1wnJzogJyYjeDI3OycsCisgICdgJzog
JyYjeDYwOycKK30KKwordmFyIGVzY2FwZUh0bWxDaGFyID0gZnVuY3Rpb24oY2hyKSB7CisgIHJl
dHVybiBodG1sRXNjYXBlc1tjaHJdCit9CisKK3ZhciByZVVuZXNjYXBlZEh0bWwgPSAvWyY8PiIn
YF0vZwordmFyIHJlSGFzVW5lc2NhcGVkSHRtbCA9IG5ldyBSZWdFeHAocmVVbmVzY2FwZWRIdG1s
LnNvdXJjZSkKKwordmFyIGVzY2FwZSA9IGZ1bmN0aW9uKHN0cmluZykgeworICBpZiAoc3RyaW5n
ICYmIHJlSGFzVW5lc2NhcGVkSHRtbC50ZXN0KHN0cmluZykpIHsKKyAgICByZXR1cm4gc3RyaW5n
LnJlcGxhY2UocmVVbmVzY2FwZWRIdG1sLCBlc2NhcGVIdG1sQ2hhcikKKyAgfSBlbHNlIHsKKyAg
ICByZXR1cm4gc3RyaW5nCisgIH0KK30KKworLyoqCisqIFNldHMgdXAgZGVmYXVsdHMgZm9yIGFs
bCB0aGUgVGVtcGxhdGUgbWV0aG9kcyBzdWNoIGFzIGEgZGVmYXVsdCB0ZW1wbGF0ZQorKgorKiBA
Y29uc3RydWN0b3IKKyovCitmdW5jdGlvbiBUZW1wbGF0ZSgpIHsKKyAgdGhpcy5kZWZhdWx0VGVt
cGxhdGUgPSBgCisgICAgPGxpIGRhdGEtaWQ9Int7aWR9fSIgY2xhc3M9Int7Y29tcGxldGVkfX0i
PgorICAgICAgPGRpdiBjbGFzcz0idmlldyI+CisgICAgICAgIDxpbnB1dCBjbGFzcz0idG9nZ2xl
IiB0eXBlPSJjaGVja2JveCIge3tjaGVja2VkfX0gLz4KKyAgICAgICAgPGxhYmVsPnt7dGl0bGV9
fTwvbGFiZWw+CisgICAgICAgIDxidXR0b24gY2xhc3M9ImRlc3Ryb3kiPjwvYnV0dG9uPgorICAg
ICAgPC9kaXY+CisgICAgPC9saT4KKyAgYAorfQorCisvKioKKyAqIENyZWF0ZXMgYW4gPGxpPiBI
VE1MIHN0cmluZyBhbmQgcmV0dXJucyBpdCBmb3IgcGxhY2VtZW50IGluIHlvdXIgYXBwLgorICoK
KyAqIE5PVEU6IEluIHJlYWwgbGlmZSB5b3Ugc2hvdWxkIGJlIHVzaW5nIGEgdGVtcGxhdGluZyBl
bmdpbmUgc3VjaCBhcyBNdXN0YWNoZQorICogb3IgSGFuZGxlYmFycywgaG93ZXZlciwgdGhpcyBp
cyBhIHZhbmlsbGEgSlMgZXhhbXBsZS4KKyAqCisgKiBAcGFyYW0ge29iamVjdH0gZGF0YSBUaGUg
b2JqZWN0IGNvbnRhaW5pbmcga2V5cyB5b3Ugd2FudCB0byBmaW5kIGluIHRoZQorICogICAgICAg
ICAgICAgICAgICAgICAgdGVtcGxhdGUgdG8gcmVwbGFjZS4KKyAqIEByZXR1cm5zIHtzdHJpbmd9
IEhUTUwgU3RyaW5nIG9mIGFuIDxsaT4gZWxlbWVudAorICoKKyAqIEBleGFtcGxlCisgKiB2aWV3
LnNob3coeworICogIGlkOiAxLAorICogIHRpdGxlOiAiSGVsbG8gV29ybGQiLAorICogIGNvbXBs
ZXRlZDogMCwKKyAqIH0pOworICovCitUZW1wbGF0ZS5wcm90b3R5cGUuc2hvdyA9IGZ1bmN0aW9u
KGRhdGEpIHsKKyAgdmFyIGksIGwKKyAgdmFyIHZpZXcgPSAnJworCisgIGZvciAoaSA9IDAsIGwg
PSBkYXRhLmxlbmd0aDsgaSA8IGw7IGkrKykgeworICAgIHZhciB0ZW1wbGF0ZSA9IHRoaXMuZGVm
YXVsdFRlbXBsYXRlCisgICAgdmFyIGNvbXBsZXRlZCA9ICcnCisgICAgdmFyIGNoZWNrZWQgPSAn
JworCisgICAgaWYgKGRhdGFbaV0uY29tcGxldGVkKSB7CisgICAgICBjb21wbGV0ZWQgPSAnY29t
cGxldGVkJworICAgICAgY2hlY2tlZCA9ICdjaGVja2VkJworICAgIH0KKworICAgIHRlbXBsYXRl
ID0gdGVtcGxhdGUucmVwbGFjZSgne3tpZH19JywgZGF0YVtpXS5pZCkKKyAgICB0ZW1wbGF0ZSA9
IHRlbXBsYXRlLnJlcGxhY2UoJ3t7dGl0bGV9fScsIGVzY2FwZShkYXRhW2ldLnRpdGxlKSkKKyAg
ICB0ZW1wbGF0ZSA9IHRlbXBsYXRlLnJlcGxhY2UoJ3t7Y29tcGxldGVkfX0nLCBjb21wbGV0ZWQp
CisgICAgdGVtcGxhdGUgPSB0ZW1wbGF0ZS5yZXBsYWNlKCd7e2NoZWNrZWR9fScsIGNoZWNrZWQp
CisKKyAgICB2aWV3ID0gdmlldyArIHRlbXBsYXRlCisgIH0KKworICByZXR1cm4gdmlldworfQor
CisvKioKKyAqIERpc3BsYXlzIGEgY291bnRlciBvZiBob3cgbWFueSB0byBkb3MgYXJlIGxlZnQg
dG8gY29tcGxldGUKKyAqCisgKiBAcGFyYW0ge251bWJlcn0gYWN0aXZlVG9kb3MgVGhlIG51bWJl
ciBvZiBhY3RpdmUgdG9kb3MuCisgKiBAcmV0dXJucyB7c3RyaW5nfSBTdHJpbmcgY29udGFpbmlu
ZyB0aGUgY291bnQKKyAqLworVGVtcGxhdGUucHJvdG90eXBlLml0ZW1Db3VudGVyID0gZnVuY3Rp
b24oYWN0aXZlVG9kb3MpIHsKKyAgdmFyIHBsdXJhbCA9IGFjdGl2ZVRvZG9zID09PSAxID8gJycg
OiAncycKKworICByZXR1cm4gJzxzdHJvbmc+JyArIGFjdGl2ZVRvZG9zICsgJzwvc3Ryb25nPiBp
dGVtJyArIHBsdXJhbCArICcgbGVmdCcKK30KKworLyoqCisgKiBVcGRhdGVzIHRoZSB0ZXh0IHdp
dGhpbiB0aGUgIkNsZWFyIGNvbXBsZXRlZCIgYnV0dG9uCisgKgorICogQHBhcmFtICB7W3R5cGVd
fSBjb21wbGV0ZWRUb2RvcyBUaGUgbnVtYmVyIG9mIGNvbXBsZXRlZCB0b2Rvcy4KKyAqIEByZXR1
cm5zIHtzdHJpbmd9IFN0cmluZyBjb250YWluaW5nIHRoZSBjb3VudAorICovCitUZW1wbGF0ZS5w
cm90b3R5cGUuY2xlYXJDb21wbGV0ZWRCdXR0b24gPSBmdW5jdGlvbihjb21wbGV0ZWRUb2Rvcykg
eworICBpZiAoY29tcGxldGVkVG9kb3MgPiAwKSB7CisgICAgcmV0dXJuICdDbGVhciBjb21wbGV0
ZWQnCisgIH0gZWxzZSB7CisgICAgcmV0dXJuICcnCisgIH0KK30KZGlmZiAtLWdpdCBhL1BlcmZv
cm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxl
cy9lczIwMTUtYmFiZWwtd2VicGFjay9zcmMvdG9kby5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3Bl
ZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwt
d2VicGFjay9zcmMvdG9kby5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNTFjZjM2MWFhMzVlMjM0ZDJiMjY3ZTg2
NjdlYjBhODc4NjRiZjY2Ci0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVl
ZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13
ZWJwYWNrL3NyYy90b2RvLmpzCkBAIC0wLDAgKzEsNDEgQEAKK2ltcG9ydCBWaWV3IGZyb20gJy4v
dmlldycKK2ltcG9ydCBDb250cm9sbGVyIGZyb20gJy4vY29udHJvbGxlcicKK2ltcG9ydCBNb2Rl
bCBmcm9tICcuL21vZGVsJworaW1wb3J0IFN0b3JlIGZyb20gJy4vc3RvcmUnCitpbXBvcnQgVGVt
cGxhdGUgZnJvbSAnLi90ZW1wbGF0ZScKK2ltcG9ydCB7cmVtb3ZlfSBmcm9tICcuL2hlbHBlcnMn
CisKK2V4cG9ydCB7dXBkYXRlVG9kbywgZ2V0VG9kbywgc3Vic2NyaWJlfQorCitsZXQgdG9kbwor
Y29uc3Qgc3Vic2NyaWJlcnMgPSBbXQorCisvKioKKyAqIFNldHMgdXAgYSBicmFuZCBuZXcgVG9k
byBsaXN0LgorICoKKyAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIFRoZSBuYW1lIG9mIHlvdXIgbmV3
IHRvIGRvIGxpc3QuCisgKi8KK2Z1bmN0aW9uIFRvZG8obmFtZSkgeworICB0aGlzLnN0b3JhZ2Ug
PSBuZXcgU3RvcmUobmFtZSkKKyAgdGhpcy5tb2RlbCA9IG5ldyBNb2RlbCh0aGlzLnN0b3JhZ2Up
CisgIHRoaXMudGVtcGxhdGUgPSBuZXcgVGVtcGxhdGUoKQorICB0aGlzLnZpZXcgPSBuZXcgVmll
dyh0aGlzLnRlbXBsYXRlKQorICB0aGlzLmNvbnRyb2xsZXIgPSBuZXcgQ29udHJvbGxlcih0aGlz
Lm1vZGVsLCB0aGlzLnZpZXcpCit9CisKK2Z1bmN0aW9uIHVwZGF0ZVRvZG8oKSB7CisgIHRvZG8g
PSBuZXcgVG9kbygndG9kb3MtdmFuaWxsYWpzJykKKyAgdG9kby5jb250cm9sbGVyLnNldFZpZXco
ZG9jdW1lbnQubG9jYXRpb24uaGFzaCkKKyAgc3Vic2NyaWJlcnMuZm9yRWFjaChzID0+IHMoKSkK
K30KKworZnVuY3Rpb24gZ2V0VG9kbygpIHsKKyAgcmV0dXJuIHRvZG8KK30KKworZnVuY3Rpb24g
c3Vic2NyaWJlKGNiKSB7CisgIHN1YnNjcmliZXJzLnB1c2goY2IpCisgIHJldHVybiBmdW5jdGlv
biB1bnN1YnNjcmliZSgpIHsKKyAgICByZW1vdmUoc3Vic2NyaWJlcnMsIGNiKQorICB9Cit9CmRp
ZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZj
L3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svc3JjL3ZpZXcuanMgYi9QZXJm
b3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBs
ZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svc3JjL3ZpZXcuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzE1ZWQ1YzVk
MjVlNmIwYWEwNmY3MjdmMWE3OGE3ZDBiYTEwZmUyMQotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZv
cm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxl
cy9lczIwMTUtYmFiZWwtd2VicGFjay9zcmMvdmlldy5qcwpAQCAtMCwwICsxLDIxNCBAQAorLyog
ZXNsaW50IG5vLWludmFsaWQtdGhpczogMCwgY29tcGxleGl0eTpbMiwgOV0gKi8KK2ltcG9ydCB7
cXMsIHFzYSwgJG9uLCAkcGFyZW50LCAkZGVsZWdhdGV9IGZyb20gJy4vaGVscGVycycKKworLyoq
CisgKiBWaWV3IHRoYXQgYWJzdHJhY3RzIGF3YXkgdGhlIGJyb3dzZXIncyBET00gY29tcGxldGVs
eS4KKyAqIEl0IGhhcyB0d28gc2ltcGxlIGVudHJ5IHBvaW50czoKKyAqCisgKiAgIC0gYmluZChl
dmVudE5hbWUsIGhhbmRsZXIpCisgKiAgICAgVGFrZXMgYSB0b2RvIGFwcGxpY2F0aW9uIGV2ZW50
IGFuZCByZWdpc3RlcnMgdGhlIGhhbmRsZXIKKyAqICAgLSByZW5kZXIoY29tbWFuZCwgcGFyYW1l
dGVyT2JqZWN0KQorICogICAgIFJlbmRlcnMgdGhlIGdpdmVuIGNvbW1hbmQgd2l0aCB0aGUgb3B0
aW9ucworICovCitleHBvcnQgZGVmYXVsdCBjbGFzcyBWaWV3IHsKKyAgY29uc3RydWN0b3IodGVt
cGxhdGUpIHsKKyAgICB0aGlzLnRlbXBsYXRlID0gdGVtcGxhdGUKKworICAgIHRoaXMuRU5URVJf
S0VZID0gMTMKKyAgICB0aGlzLkVTQ0FQRV9LRVkgPSAyNworCisgICAgdGhpcy4kdG9kb0xpc3Qg
PSBxcygnLnRvZG8tbGlzdCcpCisgICAgdGhpcy4kdG9kb0l0ZW1Db3VudGVyID0gcXMoJy50b2Rv
LWNvdW50JykKKyAgICB0aGlzLiRjbGVhckNvbXBsZXRlZCA9IHFzKCcuY2xlYXItY29tcGxldGVk
JykKKyAgICB0aGlzLiRtYWluID0gcXMoJy5tYWluJykKKyAgICB0aGlzLiRmb290ZXIgPSBxcygn
LmZvb3RlcicpCisgICAgdGhpcy4kdG9nZ2xlQWxsID0gcXMoJy50b2dnbGUtYWxsJykKKyAgICB0
aGlzLiRuZXdUb2RvID0gcXMoJy5uZXctdG9kbycpCisgIH0KKworICBfcmVtb3ZlSXRlbShpZCkg
eworICAgIHZhciBlbGVtID0gcXMoJ1tkYXRhLWlkPSInICsgaWQgKyAnIl0nKQorCisgICAgaWYg
KGVsZW0pIHsKKyAgICAgIHRoaXMuJHRvZG9MaXN0LnJlbW92ZUNoaWxkKGVsZW0pCisgICAgfQor
ICB9CisKKyAgX2NsZWFyQ29tcGxldGVkQnV0dG9uKGNvbXBsZXRlZENvdW50LCB2aXNpYmxlKSB7
CisgICAgdGhpcy4kY2xlYXJDb21wbGV0ZWQuaW5uZXJIVE1MID0gdGhpcy50ZW1wbGF0ZS5jbGVh
ckNvbXBsZXRlZEJ1dHRvbihjb21wbGV0ZWRDb3VudCkKKyAgICB0aGlzLiRjbGVhckNvbXBsZXRl
ZC5zdHlsZS5kaXNwbGF5ID0gdmlzaWJsZSA/ICdibG9jaycgOiAnbm9uZScKKyAgfQorCisgIF9l
ZGl0SXRlbURvbmUoaWQsIHRpdGxlKSB7CisgICAgdmFyIGxpc3RJdGVtID0gcXMoJ1tkYXRhLWlk
PSInICsgaWQgKyAnIl0nKQorCisgICAgaWYgKCFsaXN0SXRlbSkgeworICAgICAgcmV0dXJuCisg
ICAgfQorCisgICAgdmFyIGlucHV0ID0gcXMoJ2lucHV0LmVkaXQnLCBsaXN0SXRlbSkKKyAgICBs
aXN0SXRlbS5yZW1vdmVDaGlsZChpbnB1dCkKKworICAgIGxpc3RJdGVtLmNsYXNzTmFtZSA9IGxp
c3RJdGVtLmNsYXNzTmFtZS5yZXBsYWNlKCdlZGl0aW5nJywgJycpCisKKyAgICBxc2EoJ2xhYmVs
JywgbGlzdEl0ZW0pLmZvckVhY2goZnVuY3Rpb24obGFiZWwpIHsKKyAgICAgIGxhYmVsLnRleHRD
b250ZW50ID0gdGl0bGUKKyAgICB9KQorICB9CisKKyAgcmVuZGVyKHZpZXdDbWQsIHBhcmFtZXRl
cikgeworICAgIHZhciB0aGF0ID0gdGhpcworICAgIHZhciB2aWV3Q29tbWFuZHMgPSB7CisgICAg
ICBzaG93RW50cmllczogZnVuY3Rpb24oKSB7CisgICAgICAgIHRoYXQuJHRvZG9MaXN0LmlubmVy
SFRNTCA9IHRoYXQudGVtcGxhdGUuc2hvdyhwYXJhbWV0ZXIpCisgICAgICB9LAorICAgICAgcmVt
b3ZlSXRlbTogZnVuY3Rpb24oKSB7CisgICAgICAgIHRoYXQuX3JlbW92ZUl0ZW0ocGFyYW1ldGVy
KQorICAgICAgfSwKKyAgICAgIHVwZGF0ZUVsZW1lbnRDb3VudDogZnVuY3Rpb24oKSB7CisgICAg
ICAgIHRoYXQuJHRvZG9JdGVtQ291bnRlci5pbm5lckhUTUwgPSB0aGF0LnRlbXBsYXRlLml0ZW1D
b3VudGVyKHBhcmFtZXRlcikKKyAgICAgIH0sCisgICAgICBjbGVhckNvbXBsZXRlZEJ1dHRvbjog
ZnVuY3Rpb24oKSB7CisgICAgICAgIHRoYXQuX2NsZWFyQ29tcGxldGVkQnV0dG9uKHBhcmFtZXRl
ci5jb21wbGV0ZWQsIHBhcmFtZXRlci52aXNpYmxlKQorICAgICAgfSwKKyAgICAgIGNvbnRlbnRC
bG9ja1Zpc2liaWxpdHk6IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGF0LiRtYWluLnN0eWxlLmRp
c3BsYXkgPSB0aGF0LiRmb290ZXIuc3R5bGUuZGlzcGxheSA9IHBhcmFtZXRlci52aXNpYmxlID8g
J2Jsb2NrJyA6ICdub25lJworICAgICAgfSwKKyAgICAgIHRvZ2dsZUFsbDogZnVuY3Rpb24oKSB7
CisgICAgICAgIHRoYXQuJHRvZ2dsZUFsbC5jaGVja2VkID0gcGFyYW1ldGVyLmNoZWNrZWQKKyAg
ICAgIH0sCisgICAgICBzZXRGaWx0ZXI6IGZ1bmN0aW9uKCkgeworICAgICAgICBfc2V0RmlsdGVy
KHBhcmFtZXRlcikKKyAgICAgIH0sCisgICAgICBjbGVhck5ld1RvZG86IGZ1bmN0aW9uKCkgewor
ICAgICAgICB0aGF0LiRuZXdUb2RvLnZhbHVlID0gJycKKyAgICAgIH0sCisgICAgICBlbGVtZW50
Q29tcGxldGU6IGZ1bmN0aW9uKCkgeworICAgICAgICBfZWxlbWVudENvbXBsZXRlKHBhcmFtZXRl
ci5pZCwgcGFyYW1ldGVyLmNvbXBsZXRlZCkKKyAgICAgIH0sCisgICAgICBlZGl0SXRlbTogZnVu
Y3Rpb24oKSB7CisgICAgICAgIF9lZGl0SXRlbShwYXJhbWV0ZXIuaWQsIHBhcmFtZXRlci50aXRs
ZSkKKyAgICAgIH0sCisgICAgICBlZGl0SXRlbURvbmU6IGZ1bmN0aW9uKCkgeworICAgICAgICB0
aGF0Ll9lZGl0SXRlbURvbmUocGFyYW1ldGVyLmlkLCBwYXJhbWV0ZXIudGl0bGUpCisgICAgICB9
CisgICAgfQorCisgICAgdmlld0NvbW1hbmRzW3ZpZXdDbWRdKCkKKyAgfQorCisgIF9iaW5kSXRl
bUVkaXREb25lKGhhbmRsZXIpIHsKKyAgICB2YXIgdGhhdCA9IHRoaXMKKyAgICAkZGVsZWdhdGUo
dGhhdC4kdG9kb0xpc3QsICdsaSAuZWRpdCcsICdibHVyJywgZnVuY3Rpb24oKSB7CisgICAgICBp
ZiAoIXRoaXMuZGF0YXNldC5pc2NhbmNlbGVkKSB7CisgICAgICAgIGhhbmRsZXIoeworICAgICAg
ICAgIGlkOiBfaXRlbUlkKHRoaXMpLAorICAgICAgICAgIHRpdGxlOiB0aGlzLnZhbHVlCisgICAg
ICAgIH0pCisgICAgICB9CisgICAgfSkKKworICAgICRkZWxlZ2F0ZSh0aGF0LiR0b2RvTGlzdCwg
J2xpIC5lZGl0JywgJ2tleXByZXNzJywgZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgIGlmIChldmVu
dC5rZXlDb2RlID09PSB0aGF0LkVOVEVSX0tFWSkgeworICAgICAgICAvLyBSZW1vdmUgdGhlIGN1
cnNvciBmcm9tIHRoZSBpbnB1dCB3aGVuIHlvdSBoaXQgZW50ZXIganVzdCBsaWtlIGlmIGl0Cisg
ICAgICAgIC8vIHdlcmUgYSByZWFsIGZvcm0KKyAgICAgICAgdGhpcy5ibHVyKCkKKyAgICAgIH0K
KyAgICB9KQorICB9CisKKyAgX2JpbmRJdGVtRWRpdENhbmNlbChoYW5kbGVyKSB7CisgICAgdmFy
IHRoYXQgPSB0aGlzCisgICAgJGRlbGVnYXRlKHRoYXQuJHRvZG9MaXN0LCAnbGkgLmVkaXQnLCAn
a2V5dXAnLCBmdW5jdGlvbihldmVudCkgeworICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IHRo
YXQuRVNDQVBFX0tFWSkgeworICAgICAgICB0aGlzLmRhdGFzZXQuaXNjYW5jZWxlZCA9IHRydWUK
KyAgICAgICAgdGhpcy5ibHVyKCkKKworICAgICAgICBoYW5kbGVyKHtpZDogX2l0ZW1JZCh0aGlz
KX0pCisgICAgICB9CisgICAgfSkKKyAgfQorCisgIGJpbmQoZXZlbnQsIGhhbmRsZXIpIHsKKyAg
ICB2YXIgdGhhdCA9IHRoaXMKKyAgICBpZiAoZXZlbnQgPT09ICduZXdUb2RvJykgeworICAgICAg
JG9uKHRoYXQuJG5ld1RvZG8sICdjaGFuZ2UnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgaGFuZGxl
cih0aGF0LiRuZXdUb2RvLnZhbHVlKQorICAgICAgfSkKKworICAgIH0gZWxzZSBpZiAoZXZlbnQg
PT09ICdyZW1vdmVDb21wbGV0ZWQnKSB7CisgICAgICAkb24odGhhdC4kY2xlYXJDb21wbGV0ZWQs
ICdjbGljaycsIGZ1bmN0aW9uKCkgeworICAgICAgICBoYW5kbGVyKCkKKyAgICAgIH0pCisKKyAg
ICB9IGVsc2UgaWYgKGV2ZW50ID09PSAndG9nZ2xlQWxsJykgeworICAgICAgJG9uKHRoYXQuJHRv
Z2dsZUFsbCwgJ2NsaWNrJywgZnVuY3Rpb24oKSB7CisgICAgICAgIGhhbmRsZXIoe2NvbXBsZXRl
ZDogdGhpcy5jaGVja2VkfSkKKyAgICAgIH0pCisKKyAgICB9IGVsc2UgaWYgKGV2ZW50ID09PSAn
aXRlbUVkaXQnKSB7CisgICAgICAkZGVsZWdhdGUodGhhdC4kdG9kb0xpc3QsICdsaSBsYWJlbCcs
ICdkYmxjbGljaycsIGZ1bmN0aW9uKCkgeworICAgICAgICBoYW5kbGVyKHtpZDogX2l0ZW1JZCh0
aGlzKX0pCisgICAgICB9KQorCisgICAgfSBlbHNlIGlmIChldmVudCA9PT0gJ2l0ZW1SZW1vdmUn
KSB7CisgICAgICAkZGVsZWdhdGUodGhhdC4kdG9kb0xpc3QsICcuZGVzdHJveScsICdjbGljaycs
IGZ1bmN0aW9uKCkgeworICAgICAgICBoYW5kbGVyKHtpZDogX2l0ZW1JZCh0aGlzKX0pCisgICAg
ICB9KQorCisgICAgfSBlbHNlIGlmIChldmVudCA9PT0gJ2l0ZW1Ub2dnbGUnKSB7CisgICAgICAk
ZGVsZWdhdGUodGhhdC4kdG9kb0xpc3QsICcudG9nZ2xlJywgJ2NsaWNrJywgZnVuY3Rpb24oKSB7
CisgICAgICAgIGhhbmRsZXIoeworICAgICAgICAgIGlkOiBfaXRlbUlkKHRoaXMpLAorICAgICAg
ICAgIGNvbXBsZXRlZDogdGhpcy5jaGVja2VkCisgICAgICAgIH0pCisgICAgICB9KQorCisgICAg
fSBlbHNlIGlmIChldmVudCA9PT0gJ2l0ZW1FZGl0RG9uZScpIHsKKyAgICAgIHRoYXQuX2JpbmRJ
dGVtRWRpdERvbmUoaGFuZGxlcikKKworICAgIH0gZWxzZSBpZiAoZXZlbnQgPT09ICdpdGVtRWRp
dENhbmNlbCcpIHsKKyAgICAgIHRoYXQuX2JpbmRJdGVtRWRpdENhbmNlbChoYW5kbGVyKQorICAg
IH0KKyAgfQorfQorCitmdW5jdGlvbiBfc2V0RmlsdGVyKGN1cnJlbnRQYWdlKSB7CisgIHFzKCcu
ZmlsdGVycyAuc2VsZWN0ZWQnKS5jbGFzc05hbWUgPSAnJworICBxcygnLmZpbHRlcnMgW2hyZWY9
IiMvJyArIGN1cnJlbnRQYWdlICsgJyJdJykuY2xhc3NOYW1lID0gJ3NlbGVjdGVkJworfQorCitm
dW5jdGlvbiBfZWxlbWVudENvbXBsZXRlKGlkLCBjb21wbGV0ZWQpIHsKKyAgdmFyIGxpc3RJdGVt
ID0gcXMoJ1tkYXRhLWlkPSInICsgaWQgKyAnIl0nKQorCisgIGlmICghbGlzdEl0ZW0pIHsKKyAg
ICByZXR1cm4KKyAgfQorCisgIGxpc3RJdGVtLmNsYXNzTmFtZSA9IGNvbXBsZXRlZCA/ICdjb21w
bGV0ZWQnIDogJycKKworICAvLyBJbiBjYXNlIGl0IHdhcyB0b2dnbGVkIGZyb20gYW4gZXZlbnQg
YW5kIG5vdCBieSBjbGlja2luZyB0aGUgY2hlY2tib3gKKyAgcXMoJ2lucHV0JywgbGlzdEl0ZW0p
LmNoZWNrZWQgPSBjb21wbGV0ZWQKK30KKworZnVuY3Rpb24gX2VkaXRJdGVtKGlkLCB0aXRsZSkg
eworICB2YXIgbGlzdEl0ZW0gPSBxcygnW2RhdGEtaWQ9IicgKyBpZCArICciXScpCisKKyAgaWYg
KCFsaXN0SXRlbSkgeworICAgIHJldHVybgorICB9CisKKyAgbGlzdEl0ZW0uY2xhc3NOYW1lID0g
bGlzdEl0ZW0uY2xhc3NOYW1lICsgJyBlZGl0aW5nJworCisgIHZhciBpbnB1dCA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoJ2lucHV0JykKKyAgaW5wdXQuY2xhc3NOYW1lID0gJ2VkaXQnCisKKyAg
bGlzdEl0ZW0uYXBwZW5kQ2hpbGQoaW5wdXQpCisgIGlucHV0LmZvY3VzKCkKKyAgaW5wdXQudmFs
dWUgPSB0aXRsZQorfQorCitmdW5jdGlvbiBfaXRlbUlkKGVsZW1lbnQpIHsKKyAgdmFyIGxpID0g
JHBhcmVudChlbGVtZW50LCAnbGknKQorICByZXR1cm4gcGFyc2VJbnQobGkuZGF0YXNldC5pZCwg
MTApCit9CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNl
cy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svd2VicGFjay5j
b25maWcuYmFiZWwuanMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90
b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svd2VicGFjay5jb25m
aWcuYmFiZWwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGVjMzcxYmU0ZTU1YjQ0ODdkYzZlNGY5N2NiOTk5Y2Zh
MGE2MzQwMwotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIv
cmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay93
ZWJwYWNrLmNvbmZpZy5iYWJlbC5qcwpAQCAtMCwwICsxLDYwIEBACisvKiBlc2xpbnQgbm8tY29u
c29sZToib2ZmIiAqLworY29uc3Qge3Jlc29sdmV9ID0gcmVxdWlyZSgncGF0aCcpCitjb25zdCB3
ZWJwYWNrID0gcmVxdWlyZSgnd2VicGFjaycpCitjb25zdCBQcm9ncmVzc0JhclBsdWdpbiA9IHJl
cXVpcmUoJ3Byb2dyZXNzLWJhci13ZWJwYWNrLXBsdWdpbicpCitjb25zdCBIdG1sV2VicGFja1Bs
dWdpbiA9IHJlcXVpcmUoJ2h0bWwtd2VicGFjay1wbHVnaW4nKQorY29uc3QgSW5saW5lTWFuaWZl
c3RXZWJwYWNrUGx1Z2luID0gcmVxdWlyZSgnaW5saW5lLW1hbmlmZXN0LXdlYnBhY2stcGx1Z2lu
JykKK2NvbnN0IEV4dHJhY3RUZXh0UGx1Z2luID0gcmVxdWlyZSgnZXh0cmFjdC10ZXh0LXdlYnBh
Y2stcGx1Z2luJykKK2NvbnN0IHdlYnBhY2tWYWxpZGF0b3IgPSByZXF1aXJlKCd3ZWJwYWNrLXZh
bGlkYXRvcicpCitjb25zdCB7Z2V0SWZVdGlscywgcmVtb3ZlRW1wdHl9ID0gcmVxdWlyZSgnd2Vi
cGFjay1jb25maWctdXRpbHMnKQorCittb2R1bGUuZXhwb3J0cyA9IGVudiA9PiB7CisgIGNvbnN0
IHtpZlByb2QsIGlmTm90UHJvZH0gPSBnZXRJZlV0aWxzKGVudikKKyAgY29uc3QgY29uZmlnID0g
d2VicGFja1ZhbGlkYXRvcih7CisgICAgY29udGV4dDogcmVzb2x2ZSgnc3JjJyksCisgICAgZW50
cnk6IHsKKyAgICAgIGFwcDogJy4vYm9vdHN0cmFwLmpzJywKKyAgICAgIHZlbmRvcjogWyd0b2Rv
bXZjLWFwcC1jc3MvaW5kZXguY3NzJ10sCisgICAgfSwKKyAgICBvdXRwdXQ6IHsKKyAgICAgIGZp
bGVuYW1lOiBpZlByb2QoJ2J1bmRsZS5bbmFtZV0uW2NodW5raGFzaF0uanMnLCAnYnVuZGxlLltu
YW1lXS5qcycpLAorICAgICAgcGF0aDogcmVzb2x2ZSgnZGlzdCcpLAorICAgICAgcGF0aGluZm86
IGlmTm90UHJvZCgpLAorICAgIH0sCisgICAgZGV2dG9vbDogaWZQcm9kKCdzb3VyY2UtbWFwJywg
J2V2YWwnKSwKKyAgICBtb2R1bGU6IHsKKyAgICAgIGxvYWRlcnM6IFsKKyAgICAgICAge3Rlc3Q6
IC9cLmpzJC8sIGxvYWRlcnM6IFsnYmFiZWwnXSwgZXhjbHVkZTogL25vZGVfbW9kdWxlcy99LAor
ICAgICAgICB7CisgICAgICAgICAgdGVzdDogL1wuY3NzJC8sCisgICAgICAgICAgbG9hZGVyOiBF
eHRyYWN0VGV4dFBsdWdpbi5leHRyYWN0KHsKKyAgICAgICAgICAgIGZhbGxiYWNrTG9hZGVyOiAn
c3R5bGUnLAorICAgICAgICAgICAgbG9hZGVyOiAnY3NzJywKKyAgICAgICAgICB9KQorICAgICAg
ICB9LAorICAgICAgXSwKKyAgICB9LAorICAgIHBsdWdpbnM6IHJlbW92ZUVtcHR5KFsKKyAgICAg
IG5ldyBQcm9ncmVzc0JhclBsdWdpbigpLAorICAgICAgbmV3IEV4dHJhY3RUZXh0UGx1Z2luKGlm
UHJvZCgnc3R5bGVzLltuYW1lXS5bY2h1bmtoYXNoXS5jc3MnLCAnc3R5bGVzLltuYW1lXS5jc3Mn
KSksCisgICAgICBpZlByb2QobmV3IElubGluZU1hbmlmZXN0V2VicGFja1BsdWdpbigpKSwKKyAg
ICAgIGlmUHJvZChuZXcgd2VicGFjay5vcHRpbWl6ZS5Db21tb25zQ2h1bmtQbHVnaW4oeworICAg
ICAgICBuYW1lczogWyd2ZW5kb3InLCAnbWFuaWZlc3QnXSwKKyAgICAgIH0pKSwKKyAgICAgIG5l
dyBIdG1sV2VicGFja1BsdWdpbih7CisgICAgICAgIHRlbXBsYXRlOiAnLi9pbmRleC5odG1sJywK
KyAgICAgICAgaW5qZWN0OiAnaGVhZCcsCisgICAgICB9KSwKKyAgICAgIG5ldyB3ZWJwYWNrLkRl
ZmluZVBsdWdpbih7CisgICAgICAgICdwcm9jZXNzLmVudic6IHsKKyAgICAgICAgICBOT0RFX0VO
VjogaWZQcm9kKCcicHJvZHVjdGlvbiInLCAnImRldmVsb3BtZW50IicpCisgICAgICAgIH0KKyAg
ICAgIH0pLAorICAgIF0pLAorICB9KQorICBpZiAoZW52LmRlYnVnKSB7CisgICAgY29uc29sZS5s
b2coY29uZmlnKQorICAgIGRlYnVnZ2VyIC8vIGVzbGludC1kaXNhYmxlLWxpbmUKKyAgfQorICBy
ZXR1cm4gY29uZmlnCit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>309857</attachid>
            <date>2017-05-11 20:19:04 -0700</date>
            <delta_ts>2017-05-11 20:41:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171452-20170511201903.patch</filename>
            <type>text/plain</type>
            <size>177027</size>
            <attacher name="Addy Osmani">addyo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE1OTYwCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCmluZGV4IGJmMTgxODE2ODc2
NDhkODA3YzE2NjQyOWQxM2MzMDZkMGM1NTk5NjQuLjQ2YTk0NjE3ZDJlNjk3MjJiMjU1ODZjYWVl
YWEyNzhlNGI1ZDk0NTMgMTAwNjQ0Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCisr
KyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDEgQEAKKzIwMTctMDUt
MTEgIEFkZHkgT3NtYW5pICA8YWRkeW9zbWFuaUBnbWFpbC5jb20+CisKKyAgICAgICAgU3BlZWRv
bWV0ZXI6IEFkZCBhbiBFUzIwMTUgKEJhYmVsICsgV2VicGFjaykgVG9kb01WQyBpbXBsZW1lbnRh
dGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcx
NDUyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRk
cyBFUzIwMTUgQmFiZWwgKyBXZWJwYWNrIFRvZG9NVkMgaW1wbGVtCisKKyAgICAgICAgKiBTcGVl
ZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13
ZWJwYWNrLy5iYWJlbHJjOiBBZGRlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMv
dG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrLy5lc2xpbnRpZ25v
cmU6IEFkZGVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3Zhbmls
bGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svZGlzdC9idW5kbGUuYXBwLjczYmNjNWQz
YzFkMDcxODBmMGUzLmpzOiBBZGRlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMv
dG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrL2Rpc3QvYnVuZGxl
LmFwcC43M2JjYzVkM2MxZDA3MTgwZjBlMy5qcy5tYXA6IEFkZGVkLgorICAgICAgICAqIFNwZWVk
b21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdl
YnBhY2svZGlzdC9idW5kbGUubWFuaWZlc3QuMTEyYmY3MGE3ZjNkZWViZjFmOTMuanM6IEFkZGVk
LgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBs
ZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svZGlzdC9idW5kbGUubWFuaWZlc3QuMTEyYmY3MGE3ZjNk
ZWViZjFmOTMuanMubWFwOiBBZGRlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMv
dG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrL2Rpc3QvYnVuZGxl
LnZlbmRvci5lZmFhM2UwZTIwMDc3YzhlNzQ3MS5qczogQWRkZWQuCisgICAgICAgICogU3BlZWRv
bWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2Vi
cGFjay9kaXN0L2J1bmRsZS52ZW5kb3IuZWZhYTNlMGUyMDA3N2M4ZTc0NzEuanMubWFwOiBBZGRl
ZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1w
bGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrL2Rpc3QvaW5kZXguaHRtbDogQWRkZWQuCisgICAgICAg
ICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUt
YmFiZWwtd2VicGFjay9kaXN0L3N0eWxlcy5hcHAuNzNiY2M1ZDNjMWQwNzE4MGYwZTMuY3NzOiBB
ZGRlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4
YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrL2Rpc3Qvc3R5bGVzLmFwcC43M2JjYzVkM2MxZDA3
MTgwZjBlMy5jc3MubWFwOiBBZGRlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMv
dG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrL2Rpc3Qvc3R5bGVz
LnZlbmRvci5lZmFhM2UwZTIwMDc3YzhlNzQ3MS5jc3M6IEFkZGVkLgorICAgICAgICAqIFNwZWVk
b21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdl
YnBhY2svZGlzdC9zdHlsZXMudmVuZG9yLmVmYWEzZTBlMjAwNzdjOGU3NDcxLmNzcy5tYXA6IEFk
ZGVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhh
bXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svcGFja2FnZS5qc29uOiBBZGRlZC4KKyAgICAgICAg
KiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1i
YWJlbC13ZWJwYWNrL3NyYy9hcHAuY3NzOiBBZGRlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9y
ZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrL3Ny
Yy9hcHAuanM6IEFkZGVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZj
L3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svc3JjL2Jvb3RzdHJhcC5qczog
QWRkZWQuCisgICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1l
eGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9zcmMvY29udHJvbGxlci5qczogQWRkZWQuCisg
ICAgICAgICogU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9l
czIwMTUtYmFiZWwtd2VicGFjay9zcmMvY29udHJvbGxlci50ZXN0LmpzOiBBZGRlZC4KKyAgICAg
ICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAx
NS1iYWJlbC13ZWJwYWNrL3NyYy9oZWxwZXJzLmpzOiBBZGRlZC4KKyAgICAgICAgKiBTcGVlZG9t
ZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJw
YWNrL3NyYy9pbmRleC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJj
ZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrL3NyYy9tZW1v
cnkuanM6IEFkZGVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3Zh
bmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svc3JjL21vZGVsLmpzOiBBZGRlZC4K
KyAgICAgICAgKiBTcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVz
L2VzMjAxNS1iYWJlbC13ZWJwYWNrL3NyYy9zdG9yZS5qczogQWRkZWQuCisgICAgICAgICogU3Bl
ZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwt
d2VicGFjay9zcmMvdGVtcGxhdGUuanM6IEFkZGVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jl
c291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svc3Jj
L3RvZG8uanM6IEFkZGVkLgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZj
L3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svc3JjL3ZpZXcuanM6IEFkZGVk
LgorICAgICAgICAqIFNwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBs
ZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svd2VicGFjay5jb25maWcuYmFiZWwuanM6IEFkZGVkLgor
CiAyMDE3LTA0LTI3ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgogCiAgICAg
ICAgIEFkZCBiYWNrIHRlc3RzIGluYWR2ZXJ0ZW50bHkgZGVsZXRlZCBpbiByMjA1MDMyLgpkaWZm
IC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92
YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrLy5iYWJlbHJjIGIvUGVyZm9ybWFu
Y2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2Vz
MjAxNS1iYWJlbC13ZWJwYWNrLy5iYWJlbHJjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQwYTIzMDNmYjU5Y2NhNGRj
NTBmYTAwODBhMzQ4N2IxYjRlMTYxYWEKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRl
c3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1
LWJhYmVsLXdlYnBhY2svLmJhYmVscmMKQEAgLTAsMCArMSwxNSBAQAoreworICAicHJlc2V0cyI6
IFsKKyAgICBbImVzMjAxNSIsIHsibW9kdWxlcyI6IGZhbHNlfV0sCisgICAgImVzMjAxNiIsCisg
ICAgInN0YWdlLTIiLAorICAgICJyZWFjdCIKKyAgXSwKKyAgImVudiI6IHsKKyAgICAidGVzdCI6
IHsKKyAgICAgICJwbHVnaW5zIjogWworICAgICAgICBbIl9fY292ZXJhZ2VfXyIsIHsiaWdub3Jl
IjogIiouKyh0ZXN0fHN0dWIpLioifV0KKyAgICAgIF0KKyAgICB9CisgIH0KK30KZGlmZiAtLWdp
dCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxs
YS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay8uZXNsaW50aWdub3JlIGIvUGVyZm9ybWFu
Y2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2Vz
MjAxNS1iYWJlbC13ZWJwYWNrLy5lc2xpbnRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWY5YmZmYTUyZTE3
MGE1MmJkN2I3MWU1ZmNkYjg2YzQzM2U5NDdlNgotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1h
bmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9l
czIwMTUtYmFiZWwtd2VicGFjay8uZXNsaW50aWdub3JlCkBAIC0wLDAgKzEsMyBAQAorY292ZXJh
Z2UvCitub2RlX21vZHVsZXMvCitkaXN0CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1Nw
ZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVs
LXdlYnBhY2svZGlzdC9idW5kbGUuYXBwLjczYmNjNWQzYzFkMDcxODBmMGUzLmpzIGIvUGVyZm9y
bWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVz
L2VzMjAxNS1iYWJlbC13ZWJwYWNrL2Rpc3QvYnVuZGxlLmFwcC43M2JjYzVkM2MxZDA3MTgwZjBl
My5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5hMzMzN2Y1ODI0MTNjM2U3MDY3NWFkYjFlZmRkMDBhMzEwMjFlNTM2
Ci0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJj
ZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrL2Rpc3QvYnVu
ZGxlLmFwcC43M2JjYzVkM2MxZDA3MTgwZjBlMy5qcwpAQCAtMCwwICsxLDIgQEAKK3dlYnBhY2tK
c29ucChbMCwyXSxbZnVuY3Rpb24odCxlLGkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBvKHQsZSl7
cmV0dXJuKGV8fGRvY3VtZW50KS5xdWVyeVNlbGVjdG9yKHQpfWZ1bmN0aW9uIG4odCxlKXtyZXR1
cm4oZXx8ZG9jdW1lbnQpLnF1ZXJ5U2VsZWN0b3JBbGwodCl9ZnVuY3Rpb24gcih0LGUsaSxvKXt0
LmFkZEV2ZW50TGlzdGVuZXIoZSxpLCEhbyl9ZnVuY3Rpb24gYyh0LGUsaSxvKXtmdW5jdGlvbiBj
KGkpe3ZhciByPWkudGFyZ2V0LGM9bihlLHQpLGw9QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2Fs
bChjLHIpPj0wO2wmJm8uY2FsbChyLGkpfXZhciBsPSJibHVyIj09PWl8fCJmb2N1cyI9PT1pO3Io
dCxpLGMsbCl9ZnVuY3Rpb24gbCh0LGUpe2lmKHQucGFyZW50Tm9kZSlyZXR1cm4gdC5wYXJlbnRO
b2RlLnRhZ05hbWUudG9Mb3dlckNhc2UoKT09PWUudG9Mb3dlckNhc2UoKT90LnBhcmVudE5vZGU6
bCh0LnBhcmVudE5vZGUsZSl9ZnVuY3Rpb24gYSh0LGUpe3ZhciBpPXQuaW5kZXhPZihlKTtyZXR1
cm4gaT09PS0xP3Q6dm9pZCB0LnNwbGljZShpLDEpfWkuZChlLCJhIixmdW5jdGlvbigpe3JldHVy
biBvfSksaS5kKGUsImIiLGZ1bmN0aW9uKCl7cmV0dXJuIG59KSxpLmQoZSwiZCIsZnVuY3Rpb24o
KXtyZXR1cm4gcn0pLGkuZChlLCJjIixmdW5jdGlvbigpe3JldHVybiBjfSksaS5kKGUsImUiLGZ1
bmN0aW9uKCl7cmV0dXJuIGx9KSxpLmQoZSwiZiIsZnVuY3Rpb24oKXtyZXR1cm4gYX0pLE5vZGVM
aXN0LnByb3RvdHlwZS5mb3JFYWNoPUFycmF5LnByb3RvdHlwZS5mb3JFYWNofSwsZnVuY3Rpb24o
dCxlLGkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBvKCl7aS5pKGMuYSkoKX12YXIgbj1pKDEpLHI9
KGkubihuKSxpKDEwKSksYz0oaS5uKHIpLGkoMCksaSg4KSk7ZS5hPW99LGZ1bmN0aW9uKHQsZSxp
KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbyh0LGUpe3ZhciBpPXRoaXM7aS5tb2RlbD10LGkudmll
dz1lLGkudmlldy5iaW5kKCJuZXdUb2RvIixmdW5jdGlvbih0KXtpLmFkZEl0ZW0odCl9KSxpLnZp
ZXcuYmluZCgiaXRlbUVkaXQiLGZ1bmN0aW9uKHQpe2kuZWRpdEl0ZW0odC5pZCl9KSxpLnZpZXcu
YmluZCgiaXRlbUVkaXREb25lIixmdW5jdGlvbih0KXtpLmVkaXRJdGVtU2F2ZSh0LmlkLHQudGl0
bGUpfSksaS52aWV3LmJpbmQoIml0ZW1FZGl0Q2FuY2VsIixmdW5jdGlvbih0KXtpLmVkaXRJdGVt
Q2FuY2VsKHQuaWQpfSksaS52aWV3LmJpbmQoIml0ZW1SZW1vdmUiLGZ1bmN0aW9uKHQpe2kucmVt
b3ZlSXRlbSh0LmlkKX0pLGkudmlldy5iaW5kKCJpdGVtVG9nZ2xlIixmdW5jdGlvbih0KXtpLnRv
Z2dsZUNvbXBsZXRlKHQuaWQsdC5jb21wbGV0ZWQpfSksaS52aWV3LmJpbmQoInJlbW92ZUNvbXBs
ZXRlZCIsZnVuY3Rpb24oKXtpLnJlbW92ZUNvbXBsZXRlZEl0ZW1zKCl9KSxpLnZpZXcuYmluZCgi
dG9nZ2xlQWxsIixmdW5jdGlvbih0KXtpLnRvZ2dsZUFsbCh0LmNvbXBsZXRlZCl9KX1lLmE9byxv
LnByb3RvdHlwZS5zZXRWaWV3PWZ1bmN0aW9uKHQpe3ZhciBlPXQuc3BsaXQoIi8iKVsxXSxpPWV8
fCIiO3RoaXMuX3VwZGF0ZUZpbHRlclN0YXRlKGkpfSxvLnByb3RvdHlwZS5zaG93QWxsPWZ1bmN0
aW9uKCl7dmFyIHQ9dGhpczt0Lm1vZGVsLnJlYWQoZnVuY3Rpb24oZSl7dC52aWV3LnJlbmRlcigi
c2hvd0VudHJpZXMiLGUpfSl9LG8ucHJvdG90eXBlLnNob3dBY3RpdmU9ZnVuY3Rpb24oKXt2YXIg
dD10aGlzO3QubW9kZWwucmVhZCh7Y29tcGxldGVkOiExfSxmdW5jdGlvbihlKXt0LnZpZXcucmVu
ZGVyKCJzaG93RW50cmllcyIsZSl9KX0sby5wcm90b3R5cGUuc2hvd0NvbXBsZXRlZD1mdW5jdGlv
bigpe3ZhciB0PXRoaXM7dC5tb2RlbC5yZWFkKHtjb21wbGV0ZWQ6ITB9LGZ1bmN0aW9uKGUpe3Qu
dmlldy5yZW5kZXIoInNob3dFbnRyaWVzIixlKX0pfSxvLnByb3RvdHlwZS5hZGRJdGVtPWZ1bmN0
aW9uKHQpe3ZhciBlPXRoaXM7IiIhPT10LnRyaW0oKSYmZS5tb2RlbC5jcmVhdGUodCxmdW5jdGlv
bigpe2Uudmlldy5yZW5kZXIoImNsZWFyTmV3VG9kbyIpLGUuX2ZpbHRlcighMCl9KX0sby5wcm90
b3R5cGUuZWRpdEl0ZW09ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztlLm1vZGVsLnJlYWQodCxmdW5j
dGlvbihpKXtlLnZpZXcucmVuZGVyKCJlZGl0SXRlbSIse2lkOnQsdGl0bGU6aVswXS50aXRsZX0p
fSl9LG8ucHJvdG90eXBlLmVkaXRJdGVtU2F2ZT1mdW5jdGlvbih0LGUpe3ZhciBpPXRoaXM7ZS50
cmltKCk/aS5tb2RlbC51cGRhdGUodCx7dGl0bGU6ZX0sZnVuY3Rpb24oKXtpLnZpZXcucmVuZGVy
KCJlZGl0SXRlbURvbmUiLHtpZDp0LHRpdGxlOmV9KX0pOmkucmVtb3ZlSXRlbSh0KX0sby5wcm90
b3R5cGUuZWRpdEl0ZW1DYW5jZWw9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztlLm1vZGVsLnJlYWQo
dCxmdW5jdGlvbihpKXtlLnZpZXcucmVuZGVyKCJlZGl0SXRlbURvbmUiLHtpZDp0LHRpdGxlOmlb
MF0udGl0bGV9KX0pfSxvLnByb3RvdHlwZS5yZW1vdmVJdGVtPWZ1bmN0aW9uKHQpe3ZhciBlPXRo
aXM7ZS5tb2RlbC5yZW1vdmUodCxmdW5jdGlvbigpe2Uudmlldy5yZW5kZXIoInJlbW92ZUl0ZW0i
LHQpfSksZS5fZmlsdGVyKCl9LG8ucHJvdG90eXBlLnJlbW92ZUNvbXBsZXRlZEl0ZW1zPWZ1bmN0
aW9uKCl7dmFyIHQ9dGhpczt0Lm1vZGVsLnJlYWQoe2NvbXBsZXRlZDohMH0sZnVuY3Rpb24oZSl7
ZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3QucmVtb3ZlSXRlbShlLmlkKX0pfSksdC5fZmlsdGVyKCl9
LG8ucHJvdG90eXBlLnRvZ2dsZUNvbXBsZXRlPWZ1bmN0aW9uKHQsZSxpKXt2YXIgbz10aGlzO28u
bW9kZWwudXBkYXRlKHQse2NvbXBsZXRlZDplfSxmdW5jdGlvbigpe28udmlldy5yZW5kZXIoImVs
ZW1lbnRDb21wbGV0ZSIse2lkOnQsY29tcGxldGVkOmV9KX0pLGl8fG8uX2ZpbHRlcigpfSxvLnBy
b3RvdHlwZS50b2dnbGVBbGw9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztlLm1vZGVsLnJlYWQoe2Nv
bXBsZXRlZDohdH0sZnVuY3Rpb24oaSl7aS5mb3JFYWNoKGZ1bmN0aW9uKGkpe2UudG9nZ2xlQ29t
cGxldGUoaS5pZCx0LCEwKX0pfSksZS5fZmlsdGVyKCl9LG8ucHJvdG90eXBlLl91cGRhdGVDb3Vu
dD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dC5tb2RlbC5nZXRDb3VudChmdW5jdGlvbihlKXt0LnZp
ZXcucmVuZGVyKCJ1cGRhdGVFbGVtZW50Q291bnQiLGUuYWN0aXZlKSx0LnZpZXcucmVuZGVyKCJj
bGVhckNvbXBsZXRlZEJ1dHRvbiIse2NvbXBsZXRlZDplLmNvbXBsZXRlZCx2aXNpYmxlOmUuY29t
cGxldGVkPjB9KSx0LnZpZXcucmVuZGVyKCJ0b2dnbGVBbGwiLHtjaGVja2VkOmUuY29tcGxldGVk
PT09ZS50b3RhbH0pLHQudmlldy5yZW5kZXIoImNvbnRlbnRCbG9ja1Zpc2liaWxpdHkiLHt2aXNp
YmxlOmUudG90YWw+MH0pfSl9LG8ucHJvdG90eXBlLl9maWx0ZXI9ZnVuY3Rpb24odCl7dmFyIGU9
dGhpcy5fYWN0aXZlUm91dGUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrdGhpcy5fYWN0aXZlUm91
dGUuc3Vic3RyKDEpO3RoaXMuX3VwZGF0ZUNvdW50KCksKHR8fCJBbGwiIT09dGhpcy5fbGFzdEFj
dGl2ZVJvdXRlfHx0aGlzLl9sYXN0QWN0aXZlUm91dGUhPT1lKSYmdGhpc1sic2hvdyIrZV0oKSx0
aGlzLl9sYXN0QWN0aXZlUm91dGU9ZX0sby5wcm90b3R5cGUuX3VwZGF0ZUZpbHRlclN0YXRlPWZ1
bmN0aW9uKHQpe3Q9dC5zcGxpdCgiPyIpWzBdLHRoaXMuX2FjdGl2ZVJvdXRlPXQsIiI9PT10JiYo
dGhpcy5fYWN0aXZlUm91dGU9IkFsbCIpLHRoaXMuX2ZpbHRlcigpLHRoaXMudmlldy5yZW5kZXIo
InNldEZpbHRlciIsdCl9fSxmdW5jdGlvbih0LGUsaSl7dmFyIG89ImZ1bmN0aW9uIj09dHlwZW9m
IFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0
dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5
bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJv
bCI6dHlwZW9mIHR9OyFmdW5jdGlvbihpKXt2YXIgbj17fSxyPXt9O24ubGVuZ3RoPTAsbi5nZXRJ
dGVtPWZ1bmN0aW9uKHQpe3JldHVybiByW3RdfHxudWxsfSxuLnNldEl0ZW09ZnVuY3Rpb24odCxl
KXsidW5kZWZpbmVkIj09dHlwZW9mIGU/bi5yZW1vdmVJdGVtKHQpOihyLmhhc093blByb3BlcnR5
KHQpfHxuLmxlbmd0aCsrLHJbdF09IiIrZSl9LG4ucmVtb3ZlSXRlbT1mdW5jdGlvbih0KXtyLmhh
c093blByb3BlcnR5KHQpJiYoZGVsZXRlIHJbdF0sbi5sZW5ndGgtLSl9LG4ua2V5PWZ1bmN0aW9u
KHQpe3JldHVybiBPYmplY3Qua2V5cyhyKVt0XXx8bnVsbH0sbi5jbGVhcj1mdW5jdGlvbigpe3I9
e30sbi5sZW5ndGg9MH0sIm9iamVjdCI9PT1vKGUpP3QuZXhwb3J0cz1uOmkubG9jYWxTdG9yYWdl
TWVtb3J5PW59KHRoaXMpfSxmdW5jdGlvbih0LGUsaSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG8o
dCl7dGhpcy5zdG9yYWdlPXR9dmFyIG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJv
bCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpm
dW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1
Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9O2Uu
YT1vLG8ucHJvdG90eXBlLmNyZWF0ZT1mdW5jdGlvbih0LGUpe3Q9dHx8IiIsZT1lfHxmdW5jdGlv
bigpe307dmFyIGk9e3RpdGxlOnQudHJpbSgpLGNvbXBsZXRlZDohMX07dGhpcy5zdG9yYWdlLnNh
dmUoaSxlKX0sby5wcm90b3R5cGUucmVhZD1mdW5jdGlvbih0LGUpe3ZhciBpPSJ1bmRlZmluZWQi
PT10eXBlb2YgdD8idW5kZWZpbmVkIjpuKHQpO3JldHVybiBlPWV8fGZ1bmN0aW9uKCl7fSwiZnVu
Y3Rpb24iPT09aT8oZT10LHRoaXMuc3RvcmFnZS5maW5kQWxsKGUpKTp2b2lkKCJzdHJpbmciPT09
aXx8Im51bWJlciI9PT1pPyh0PXBhcnNlSW50KHQsMTApLHRoaXMuc3RvcmFnZS5maW5kKHtpZDp0
fSxlKSk6dGhpcy5zdG9yYWdlLmZpbmQodCxlKSl9LG8ucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlv
bih0LGUsaSl7dGhpcy5zdG9yYWdlLnNhdmUoZSxpLHQpfSxvLnByb3RvdHlwZS5yZW1vdmU9ZnVu
Y3Rpb24odCxlKXt0aGlzLnN0b3JhZ2UucmVtb3ZlKHQsZSl9LG8ucHJvdG90eXBlLnJlbW92ZUFs
bD1mdW5jdGlvbih0KXt0aGlzLnN0b3JhZ2UuZHJvcCh0KX0sby5wcm90b3R5cGUuZ2V0Q291bnQ9
ZnVuY3Rpb24odCl7dmFyIGU9e2FjdGl2ZTowLGNvbXBsZXRlZDowLHRvdGFsOjB9O3RoaXMuc3Rv
cmFnZS5maW5kQWxsKGZ1bmN0aW9uKGkpe2kuZm9yRWFjaChmdW5jdGlvbih0KXt0LmNvbXBsZXRl
ZD9lLmNvbXBsZXRlZCsrOmUuYWN0aXZlKyssZS50b3RhbCsrfSksdChlKX0pfX0sZnVuY3Rpb24o
dCxlLGkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBvKHQsZSl7aWYoZT1lfHxmdW5jdGlvbigpe30s
dGhpcy5fZGJOYW1lPXQsIXJbdF0pe3ZhciBpPXt0b2RvczpbXX07clt0XT1KU09OLnN0cmluZ2lm
eShpKX1lLmNhbGwodGhpcyxKU09OLnBhcnNlKHJbdF0pKSx0aGlzLnN1YnNjcmliZXJzPVtdfXZh
ciBuPWkoMCkscj1pKDQpO2kubihyKTtlLmE9byxvLnByb3RvdHlwZS5zdWJzY3JpYmU9ZnVuY3Rp
b24odCl7dmFyIGU9dGhpcztyZXR1cm4gdGhpcy5zdWJzY3JpYmVycy5wdXNoKHQpLGZ1bmN0aW9u
KCl7cmV0dXJuIGkuaShuLmYpKGUuc3Vic2NyaWJlcnMsdCl9fSxvLnByb3RvdHlwZS5fbm90aWZ5
PWZ1bmN0aW9uKCl7dGhpcy5zdWJzY3JpYmVycy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0
KCl9KX0sby5wcm90b3R5cGUuZmluZD1mdW5jdGlvbih0LGUpe2lmKGUpe3ZhciBpPUpTT04ucGFy
c2Uoclt0aGlzLl9kYk5hbWVdKS50b2RvcztlLmNhbGwodGhpcyxpLmZpbHRlcihmdW5jdGlvbihl
KXtmb3IodmFyIGkgaW4gdClpZih0W2ldIT09ZVtpXSlyZXR1cm4hMTtyZXR1cm4hMH0pKX19LG8u
cHJvdG90eXBlLmZpbmRBbGw9ZnVuY3Rpb24odCl7dD10fHxmdW5jdGlvbigpe30sdC5jYWxsKHRo
aXMsSlNPTi5wYXJzZShyW3RoaXMuX2RiTmFtZV0pLnRvZG9zKX0sby5wcm90b3R5cGUuc2F2ZT1m
dW5jdGlvbih0LGUsaSl7dmFyIG89SlNPTi5wYXJzZShyW3RoaXMuX2RiTmFtZV0pLG49by50b2Rv
cztpZihlPWV8fGZ1bmN0aW9uKCl7fSxpKXtmb3IodmFyIGM9MDtjPG4ubGVuZ3RoO2MrKylpZihu
W2NdLmlkPT09aSl7Zm9yKHZhciBsIGluIHQpbltjXVtsXT10W2xdO2JyZWFrfXJbdGhpcy5fZGJO
YW1lXT1KU09OLnN0cmluZ2lmeShvKSxlLmNhbGwodGhpcyxKU09OLnBhcnNlKHJbdGhpcy5fZGJO
YW1lXSkudG9kb3MpfWVsc2UgdC5pZD0obmV3IERhdGUpLmdldFRpbWUoKSxuLnB1c2godCksclt0
aGlzLl9kYk5hbWVdPUpTT04uc3RyaW5naWZ5KG8pLGUuY2FsbCh0aGlzLFt0XSk7dGhpcy5fbm90
aWZ5KCl9LG8ucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgaT1KU09OLnBh
cnNlKHJbdGhpcy5fZGJOYW1lXSksbz1pLnRvZG9zLG49MDtuPG8ubGVuZ3RoO24rKylpZihvW25d
LmlkPT09dCl7by5zcGxpY2UobiwxKTticmVha31yW3RoaXMuX2RiTmFtZV09SlNPTi5zdHJpbmdp
ZnkoaSksZS5jYWxsKHRoaXMsSlNPTi5wYXJzZShyW3RoaXMuX2RiTmFtZV0pLnRvZG9zKSx0aGlz
Ll9ub3RpZnkoKX0sby5wcm90b3R5cGUuZHJvcD1mdW5jdGlvbih0KXtyW3RoaXMuX2RiTmFtZV09
SlNPTi5zdHJpbmdpZnkoe3RvZG9zOltdfSksdC5jYWxsKHRoaXMsSlNPTi5wYXJzZShyW3RoaXMu
X2RiTmFtZV0pLnRvZG9zKSx0aGlzLl9ub3RpZnkoKX19LGZ1bmN0aW9uKHQsZSxpKXsidXNlIHN0
cmljdCI7ZnVuY3Rpb24gbygpe3RoaXMuZGVmYXVsdFRlbXBsYXRlPSdcbiAgICA8bGkgZGF0YS1p
ZD0ie3tpZH19IiBjbGFzcz0ie3tjb21wbGV0ZWR9fSI+XG4gICAgICA8ZGl2IGNsYXNzPSJ2aWV3
Ij5cbiAgICAgICAgPGlucHV0IGNsYXNzPSJ0b2dnbGUiIHR5cGU9ImNoZWNrYm94IiB7e2NoZWNr
ZWR9fSAvPlxuICAgICAgICA8bGFiZWw+e3t0aXRsZX19PC9sYWJlbD5cbiAgICAgICAgPGJ1dHRv
biBjbGFzcz0iZGVzdHJveSI+PC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2xpPlxuICAn
fWUuYT1vO3ZhciBuPXsiJiI6IiZhbXA7IiwiPCI6IiZsdDsiLCI+IjoiJmd0OyIsJyInOiImcXVv
dDsiLCInIjoiJiN4Mjc7IiwiYCI6IiYjeDYwOyJ9LHI9ZnVuY3Rpb24odCl7cmV0dXJuIG5bdF19
LGM9L1smPD4iJ2BdL2csbD1uZXcgUmVnRXhwKGMuc291cmNlKSxhPWZ1bmN0aW9uKHQpe3JldHVy
biB0JiZsLnRlc3QodCk/dC5yZXBsYWNlKGMscik6dH07by5wcm90b3R5cGUuc2hvdz1mdW5jdGlv
bih0KXt2YXIgZSxpLG89IiI7Zm9yKGU9MCxpPXQubGVuZ3RoO2U8aTtlKyspe3ZhciBuPXRoaXMu
ZGVmYXVsdFRlbXBsYXRlLHI9IiIsYz0iIjt0W2VdLmNvbXBsZXRlZCYmKHI9ImNvbXBsZXRlZCIs
Yz0iY2hlY2tlZCIpLG49bi5yZXBsYWNlKCJ7e2lkfX0iLHRbZV0uaWQpLG49bi5yZXBsYWNlKCJ7
e3RpdGxlfX0iLGEodFtlXS50aXRsZSkpLG49bi5yZXBsYWNlKCJ7e2NvbXBsZXRlZH19IixyKSxu
PW4ucmVwbGFjZSgie3tjaGVja2VkfX0iLGMpLG8rPW59cmV0dXJuIG99LG8ucHJvdG90eXBlLml0
ZW1Db3VudGVyPWZ1bmN0aW9uKHQpe3ZhciBlPTE9PT10PyIiOiJzIjtyZXR1cm4iPHN0cm9uZz4i
K3QrIjwvc3Ryb25nPiBpdGVtIitlKyIgbGVmdCJ9LG8ucHJvdG90eXBlLmNsZWFyQ29tcGxldGVk
QnV0dG9uPWZ1bmN0aW9uKHQpe3JldHVybiB0PjA/IkNsZWFyIGNvbXBsZXRlZCI6IiJ9fSxmdW5j
dGlvbih0LGUsaSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG8odCl7dGhpcy5zdG9yYWdlPW5ldyBh
LmEodCksdGhpcy5tb2RlbD1uZXcgbC5hKHRoaXMuc3RvcmFnZSksdGhpcy50ZW1wbGF0ZT1uZXcg
ZC5hLHRoaXMudmlldz1uZXcgci5hKHRoaXMudGVtcGxhdGUpLHRoaXMuY29udHJvbGxlcj1uZXcg
Yy5hKHRoaXMubW9kZWwsdGhpcy52aWV3KX1mdW5jdGlvbiBuKCl7cz1uZXcgbygidG9kb3MtdmFu
aWxsYWpzIikscy5jb250cm9sbGVyLnNldFZpZXcoZG9jdW1lbnQubG9jYXRpb24uaGFzaCksdS5m
b3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0KCl9KX12YXIgcj1pKDkpLGM9aSgzKSxsPWkoNSks
YT1pKDYpLGQ9aSg3KTtpKDApO2kuZChlLCJhIixmdW5jdGlvbigpe3JldHVybiBufSk7dmFyIHM9
dm9pZCAwLHU9W119LGZ1bmN0aW9uKHQsZSxpKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbyh0LGUp
e2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEg
Y2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIG4odCl7aS5pKGEuYSkoIi5maWx0ZXJzIC5z
ZWxlY3RlZCIpLmNsYXNzTmFtZT0iIixpLmkoYS5hKSgnLmZpbHRlcnMgW2hyZWY9IiMvJyt0Kyci
XScpLmNsYXNzTmFtZT0ic2VsZWN0ZWQifWZ1bmN0aW9uIHIodCxlKXt2YXIgbz1pLmkoYS5hKSgn
W2RhdGEtaWQ9IicrdCsnIl0nKTtvJiYoby5jbGFzc05hbWU9ZT8iY29tcGxldGVkIjoiIixpLmko
YS5hKSgiaW5wdXQiLG8pLmNoZWNrZWQ9ZSl9ZnVuY3Rpb24gYyh0LGUpe3ZhciBvPWkuaShhLmEp
KCdbZGF0YS1pZD0iJyt0KyciXScpO2lmKG8pe28uY2xhc3NOYW1lPW8uY2xhc3NOYW1lKyIgZWRp
dGluZyI7dmFyIG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTtuLmNsYXNzTmFtZT0i
ZWRpdCIsby5hcHBlbmRDaGlsZChuKSxuLmZvY3VzKCksbi52YWx1ZT1lfX1mdW5jdGlvbiBsKHQp
e3ZhciBlPWkuaShhLmUpKHQsImxpIik7cmV0dXJuIHBhcnNlSW50KGUuZGF0YXNldC5pZCwxMCl9
dmFyIGE9aSgwKSxkPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe2Zvcih2YXIgaT0wO2k8ZS5s
ZW5ndGg7aSsrKXt2YXIgbz1lW2ldO28uZW51bWVyYWJsZT1vLmVudW1lcmFibGV8fCExLG8uY29u
ZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBvJiYoby53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVBy
b3BlcnR5KHQsby5rZXksbyl9fXJldHVybiBmdW5jdGlvbihlLGksbyl7cmV0dXJuIGkmJnQoZS5w
cm90b3R5cGUsaSksbyYmdChlLG8pLGV9fSgpLHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe28o
dGhpcyx0KSx0aGlzLnRlbXBsYXRlPWUsdGhpcy5FTlRFUl9LRVk9MTMsdGhpcy5FU0NBUEVfS0VZ
PTI3LHRoaXMuJHRvZG9MaXN0PWkuaShhLmEpKCIudG9kby1saXN0IiksdGhpcy4kdG9kb0l0ZW1D
b3VudGVyPWkuaShhLmEpKCIudG9kby1jb3VudCIpLHRoaXMuJGNsZWFyQ29tcGxldGVkPWkuaShh
LmEpKCIuY2xlYXItY29tcGxldGVkIiksdGhpcy4kbWFpbj1pLmkoYS5hKSgiLm1haW4iKSx0aGlz
LiRmb290ZXI9aS5pKGEuYSkoIi5mb290ZXIiKSx0aGlzLiR0b2dnbGVBbGw9aS5pKGEuYSkoIi50
b2dnbGUtYWxsIiksdGhpcy4kbmV3VG9kbz1pLmkoYS5hKSgiLm5ldy10b2RvIil9cmV0dXJuIGQo
dCxbe2tleToiX3JlbW92ZUl0ZW0iLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPWkuaShhLmEpKCdb
ZGF0YS1pZD0iJyt0KyciXScpO2UmJnRoaXMuJHRvZG9MaXN0LnJlbW92ZUNoaWxkKGUpfX0se2tl
eToiX2NsZWFyQ29tcGxldGVkQnV0dG9uIix2YWx1ZTpmdW5jdGlvbih0LGUpe3RoaXMuJGNsZWFy
Q29tcGxldGVkLmlubmVySFRNTD10aGlzLnRlbXBsYXRlLmNsZWFyQ29tcGxldGVkQnV0dG9uKHQp
LHRoaXMuJGNsZWFyQ29tcGxldGVkLnN0eWxlLmRpc3BsYXk9ZT8iYmxvY2siOiJub25lIn19LHtr
ZXk6Il9lZGl0SXRlbURvbmUiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIG89aS5pKGEuYSkoJ1tk
YXRhLWlkPSInK3QrJyJdJyk7aWYobyl7dmFyIG49aS5pKGEuYSkoImlucHV0LmVkaXQiLG8pO28u
cmVtb3ZlQ2hpbGQobiksby5jbGFzc05hbWU9by5jbGFzc05hbWUucmVwbGFjZSgiZWRpdGluZyIs
IiIpLGkuaShhLmIpKCJsYWJlbCIsbykuZm9yRWFjaChmdW5jdGlvbih0KXt0LnRleHRDb250ZW50
PWV9KX19fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcyxvPXtz
aG93RW50cmllczpmdW5jdGlvbigpe2kuJHRvZG9MaXN0LmlubmVySFRNTD1pLnRlbXBsYXRlLnNo
b3coZSl9LHJlbW92ZUl0ZW06ZnVuY3Rpb24oKXtpLl9yZW1vdmVJdGVtKGUpfSx1cGRhdGVFbGVt
ZW50Q291bnQ6ZnVuY3Rpb24oKXtpLiR0b2RvSXRlbUNvdW50ZXIuaW5uZXJIVE1MPWkudGVtcGxh
dGUuaXRlbUNvdW50ZXIoZSl9LGNsZWFyQ29tcGxldGVkQnV0dG9uOmZ1bmN0aW9uKCl7aS5fY2xl
YXJDb21wbGV0ZWRCdXR0b24oZS5jb21wbGV0ZWQsZS52aXNpYmxlKX0sY29udGVudEJsb2NrVmlz
aWJpbGl0eTpmdW5jdGlvbigpe2kuJG1haW4uc3R5bGUuZGlzcGxheT1pLiRmb290ZXIuc3R5bGUu
ZGlzcGxheT1lLnZpc2libGU/ImJsb2NrIjoibm9uZSJ9LHRvZ2dsZUFsbDpmdW5jdGlvbigpe2ku
JHRvZ2dsZUFsbC5jaGVja2VkPWUuY2hlY2tlZH0sc2V0RmlsdGVyOmZ1bmN0aW9uKCl7bihlKX0s
Y2xlYXJOZXdUb2RvOmZ1bmN0aW9uKCl7aS4kbmV3VG9kby52YWx1ZT0iIn0sZWxlbWVudENvbXBs
ZXRlOmZ1bmN0aW9uKCl7cihlLmlkLGUuY29tcGxldGVkKX0sZWRpdEl0ZW06ZnVuY3Rpb24oKXtj
KGUuaWQsZS50aXRsZSl9LGVkaXRJdGVtRG9uZTpmdW5jdGlvbigpe2kuX2VkaXRJdGVtRG9uZShl
LmlkLGUudGl0bGUpfX07b1t0XSgpfX0se2tleToiX2JpbmRJdGVtRWRpdERvbmUiLHZhbHVlOmZ1
bmN0aW9uKHQpe3ZhciBlPXRoaXM7aS5pKGEuYykoZS4kdG9kb0xpc3QsImxpIC5lZGl0IiwiYmx1
ciIsZnVuY3Rpb24oKXt0aGlzLmRhdGFzZXQuaXNjYW5jZWxlZHx8dCh7aWQ6bCh0aGlzKSx0aXRs
ZTp0aGlzLnZhbHVlfSl9KSxpLmkoYS5jKShlLiR0b2RvTGlzdCwibGkgLmVkaXQiLCJrZXlwcmVz
cyIsZnVuY3Rpb24odCl7dC5rZXlDb2RlPT09ZS5FTlRFUl9LRVkmJnRoaXMuYmx1cigpfSl9fSx7
a2V5OiJfYmluZEl0ZW1FZGl0Q2FuY2VsIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzO2ku
aShhLmMpKGUuJHRvZG9MaXN0LCJsaSAuZWRpdCIsImtleXVwIixmdW5jdGlvbihpKXtpLmtleUNv
ZGU9PT1lLkVTQ0FQRV9LRVkmJih0aGlzLmRhdGFzZXQuaXNjYW5jZWxlZD0hMCx0aGlzLmJsdXIo
KSx0KHtpZDpsKHRoaXMpfSkpfSl9fSx7a2V5OiJiaW5kIix2YWx1ZTpmdW5jdGlvbih0LGUpe3Zh
ciBvPXRoaXM7Im5ld1RvZG8iPT09dD9pLmkoYS5kKShvLiRuZXdUb2RvLCJjaGFuZ2UiLGZ1bmN0
aW9uKCl7ZShvLiRuZXdUb2RvLnZhbHVlKX0pOiJyZW1vdmVDb21wbGV0ZWQiPT09dD9pLmkoYS5k
KShvLiRjbGVhckNvbXBsZXRlZCwiY2xpY2siLGZ1bmN0aW9uKCl7ZSgpfSk6InRvZ2dsZUFsbCI9
PT10P2kuaShhLmQpKG8uJHRvZ2dsZUFsbCwiY2xpY2siLGZ1bmN0aW9uKCl7ZSh7Y29tcGxldGVk
OnRoaXMuY2hlY2tlZH0pfSk6Iml0ZW1FZGl0Ij09PXQ/aS5pKGEuYykoby4kdG9kb0xpc3QsImxp
IGxhYmVsIiwiZGJsY2xpY2siLGZ1bmN0aW9uKCl7ZSh7aWQ6bCh0aGlzKX0pfSk6Iml0ZW1SZW1v
dmUiPT09dD9pLmkoYS5jKShvLiR0b2RvTGlzdCwiLmRlc3Ryb3kiLCJjbGljayIsZnVuY3Rpb24o
KXtlKHtpZDpsKHRoaXMpfSl9KToiaXRlbVRvZ2dsZSI9PT10P2kuaShhLmMpKG8uJHRvZG9MaXN0
LCIudG9nZ2xlIiwiY2xpY2siLGZ1bmN0aW9uKCl7ZSh7aWQ6bCh0aGlzKSxjb21wbGV0ZWQ6dGhp
cy5jaGVja2VkfSl9KToiaXRlbUVkaXREb25lIj09PXQ/by5fYmluZEl0ZW1FZGl0RG9uZShlKToi
aXRlbUVkaXRDYW5jZWwiPT09dCYmby5fYmluZEl0ZW1FZGl0Q2FuY2VsKGUpfX1dKSx0fSgpO2Uu
YT1zfSxmdW5jdGlvbih0LGUpe30sZnVuY3Rpb24odCxlLGkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlv
biBvKCl7aS5pKHIuZCkod2luZG93LCJsb2FkIixuLmEpLGkuaShyLmQpKHdpbmRvdywiaGFzaGNo
YW5nZSIsbi5hKX12YXIgbj1pKDIpLHI9aSgwKTsiY29tcGxldGUiPT09ZG9jdW1lbnQucmVhZHlT
dGF0ZTtvKCl9XSxbMTFdKTsKKy8vIyBzb3VyY2VNYXBwaW5nVVJMPWJ1bmRsZS5hcHAuNzNiY2M1
ZDNjMWQwNzE4MGYwZTMuanMubWFwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0t
Z2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5p
bGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrL2Rpc3QvYnVuZGxlLmFwcC43M2JjYzVk
M2MxZDA3MTgwZjBlMy5qcy5tYXAgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291
cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svZGlzdC9i
dW5kbGUuYXBwLjczYmNjNWQzYzFkMDcxODBmMGUzLmpzLm1hcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NjExNDM5
Y2I2YTk5YTk2MTliOTdiZDNhNDZiMGEzY2I1NWY4NDIyCi0tLSAvZGV2L251bGwKKysrIGIvUGVy
Zm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1w
bGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrL2Rpc3QvYnVuZGxlLmFwcC43M2JjYzVkM2MxZDA3MTgw
ZjBlMy5qcy5tYXAKQEAgLTAsMCArMSBAQAoreyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBh
Y2s6Ly8vYnVuZGxlLmFwcC43M2JjYzVkM2MxZDA3MTgwZjBlMy5qcyIsIndlYnBhY2s6Ly8vLi9o
ZWxwZXJzLmpzIiwid2VicGFjazovLy8uL2FwcC5qcyIsIndlYnBhY2s6Ly8vLi9jb250cm9sbGVy
LmpzIiwid2VicGFjazovLy8uL21lbW9yeS5qcyIsIndlYnBhY2s6Ly8vLi9tb2RlbC5qcyIsIndl
YnBhY2s6Ly8vLi9zdG9yZS5qcyIsIndlYnBhY2s6Ly8vLi90ZW1wbGF0ZS5qcyIsIndlYnBhY2s6
Ly8vLi90b2RvLmpzIiwid2VicGFjazovLy8uL3ZpZXcuanMiLCJ3ZWJwYWNrOi8vLy4vYm9vdHN0
cmFwLmpzIl0sIm5hbWVzIjpbIndlYnBhY2tKc29ucCIsIm1vZHVsZSIsImV4cG9ydHMiLCJfX3dl
YnBhY2tfcmVxdWlyZV9fIiwicXMiLCJzZWxlY3RvciIsInNjb3BlIiwiZG9jdW1lbnQiLCJxdWVy
eVNlbGVjdG9yIiwicXNhIiwicXVlcnlTZWxlY3RvckFsbCIsIiRvbiIsInRhcmdldCIsInR5cGUi
LCJjYWxsYmFjayIsInVzZUNhcHR1cmUiLCJhZGRFdmVudExpc3RlbmVyIiwiJGRlbGVnYXRlIiwi
aGFuZGxlciIsImRpc3BhdGNoRXZlbnQiLCJldmVudCIsInRhcmdldEVsZW1lbnQiLCJwb3RlbnRp
YWxFbGVtZW50cyIsImhhc01hdGNoIiwiQXJyYXkiLCJwcm90b3R5cGUiLCJpbmRleE9mIiwiY2Fs
bCIsIiRwYXJlbnQiLCJlbGVtZW50IiwidGFnTmFtZSIsInBhcmVudE5vZGUiLCJ0b0xvd2VyQ2Fz
ZSIsInJlbW92ZSIsImFycmF5IiwidGhpbmciLCJpbmRleCIsInNwbGljZSIsImQiLCJOb2RlTGlz
dCIsImZvckVhY2giLCJvbkxvYWQiLCJpIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX190
b2RvX18iLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfdG9kb212Y19hcHBfY3NzX2luZGV4
X2Nzc19fIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19hcHBfY3NzX18iLCJuIiwiQ29u
dHJvbGxlciIsIm1vZGVsIiwidmlldyIsInRoYXQiLCJ0aGlzIiwiYmluZCIsInRpdGxlIiwiYWRk
SXRlbSIsIml0ZW0iLCJlZGl0SXRlbSIsImlkIiwiZWRpdEl0ZW1TYXZlIiwiZWRpdEl0ZW1DYW5j
ZWwiLCJyZW1vdmVJdGVtIiwidG9nZ2xlQ29tcGxldGUiLCJjb21wbGV0ZWQiLCJyZW1vdmVDb21w
bGV0ZWRJdGVtcyIsInN0YXR1cyIsInRvZ2dsZUFsbCIsInNldFZpZXciLCJsb2NhdGlvbkhhc2gi
LCJyb3V0ZSIsInNwbGl0IiwicGFnZSIsIl91cGRhdGVGaWx0ZXJTdGF0ZSIsInNob3dBbGwiLCJy
ZWFkIiwiZGF0YSIsInJlbmRlciIsInNob3dBY3RpdmUiLCJzaG93Q29tcGxldGVkIiwidHJpbSIs
ImNyZWF0ZSIsIl9maWx0ZXIiLCJ1cGRhdGUiLCJzaWxlbnQiLCJfdXBkYXRlQ291bnQiLCJnZXRD
b3VudCIsInRvZG9zIiwiYWN0aXZlIiwidmlzaWJsZSIsImNoZWNrZWQiLCJ0b3RhbCIsImZvcmNl
IiwiYWN0aXZlUm91dGUiLCJfYWN0aXZlUm91dGUiLCJjaGFyQXQiLCJ0b1VwcGVyQ2FzZSIsInN1
YnN0ciIsIl9sYXN0QWN0aXZlUm91dGUiLCJjdXJyZW50UGFnZSIsIl90eXBlb2YiLCJTeW1ib2wi
LCJpdGVyYXRvciIsIm9iaiIsImNvbnN0cnVjdG9yIiwicm9vdCIsImxvY2FsU3RvcmFnZU1lbW9y
eSIsImNhY2hlIiwibGVuZ3RoIiwiZ2V0SXRlbSIsImtleSIsInNldEl0ZW0iLCJ2YWx1ZSIsImhh
c093blByb3BlcnR5IiwiT2JqZWN0Iiwia2V5cyIsImNsZWFyIiwiTW9kZWwiLCJzdG9yYWdlIiwi
bmV3SXRlbSIsInNhdmUiLCJxdWVyeSIsInF1ZXJ5VHlwZSIsImZpbmRBbGwiLCJwYXJzZUludCIs
ImZpbmQiLCJyZW1vdmVBbGwiLCJkcm9wIiwidG9kbyIsIlN0b3JlIiwibmFtZSIsIl9kYk5hbWUi
LCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX21lbW9yeV9fIiwiSlNPTiIsInN0cmluZ2lm
eSIsInBhcnNlIiwic3Vic2NyaWJlcnMiLCJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2hl
bHBlcnNfXyIsInN1YnNjcmliZSIsInN1YnNjcmliZXIiLCJfdGhpcyIsInB1c2giLCJfbm90aWZ5
IiwicyIsImZpbHRlciIsInEiLCJ1cGRhdGVEYXRhIiwiRGF0ZSIsImdldFRpbWUiLCJUZW1wbGF0
ZSIsImRlZmF1bHRUZW1wbGF0ZSIsImh0bWxFc2NhcGVzIiwiJiIsIjwiLCI+IiwiXCIiLCInIiwi
YCIsImVzY2FwZUh0bWxDaGFyIiwiY2hyIiwicmVVbmVzY2FwZWRIdG1sIiwicmVIYXNVbmVzY2Fw
ZWRIdG1sIiwiUmVnRXhwIiwic291cmNlIiwiZXNjYXBlIiwic3RyaW5nIiwidGVzdCIsInJlcGxh
Y2UiLCJzaG93IiwibCIsInRlbXBsYXRlIiwiaXRlbUNvdW50ZXIiLCJhY3RpdmVUb2RvcyIsInBs
dXJhbCIsImNsZWFyQ29tcGxldGVkQnV0dG9uIiwiY29tcGxldGVkVG9kb3MiLCJUb2RvIiwiX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19zdG9yZV9fIiwiX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8yX19tb2RlbF9fIiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X190ZW1wbGF0ZV9f
IiwiX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX192aWV3X18iLCJjb250cm9sbGVyIiwiX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19jb250cm9sbGVyX18iLCJ1cGRhdGVUb2RvIiwibG9j
YXRpb24iLCJoYXNoIiwiX2NsYXNzQ2FsbENoZWNrIiwiaW5zdGFuY2UiLCJDb25zdHJ1Y3RvciIs
IlR5cGVFcnJvciIsIl9zZXRGaWx0ZXIiLCJjbGFzc05hbWUiLCJfZWxlbWVudENvbXBsZXRlIiwi
bGlzdEl0ZW0iLCJfZWRpdEl0ZW0iLCJpbnB1dCIsImNyZWF0ZUVsZW1lbnQiLCJhcHBlbmRDaGls
ZCIsImZvY3VzIiwiX2l0ZW1JZCIsImxpIiwiZGF0YXNldCIsIl9jcmVhdGVDbGFzcyIsImRlZmlu
ZVByb3BlcnRpZXMiLCJwcm9wcyIsImRlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJh
YmxlIiwid3JpdGFibGUiLCJkZWZpbmVQcm9wZXJ0eSIsInByb3RvUHJvcHMiLCJzdGF0aWNQcm9w
cyIsIlZpZXciLCJFTlRFUl9LRVkiLCJFU0NBUEVfS0VZIiwiJHRvZG9MaXN0IiwiJHRvZG9JdGVt
Q291bnRlciIsIiRjbGVhckNvbXBsZXRlZCIsIiRtYWluIiwiJGZvb3RlciIsIiR0b2dnbGVBbGwi
LCIkbmV3VG9kbyIsImVsZW0iLCJyZW1vdmVDaGlsZCIsImNvbXBsZXRlZENvdW50IiwiaW5uZXJI
VE1MIiwic3R5bGUiLCJkaXNwbGF5IiwibGFiZWwiLCJ0ZXh0Q29udGVudCIsInZpZXdDbWQiLCJw
YXJhbWV0ZXIiLCJ2aWV3Q29tbWFuZHMiLCJzaG93RW50cmllcyIsIl9yZW1vdmVJdGVtIiwidXBk
YXRlRWxlbWVudENvdW50IiwiX2NsZWFyQ29tcGxldGVkQnV0dG9uIiwiY29udGVudEJsb2NrVmlz
aWJpbGl0eSIsInNldEZpbHRlciIsImNsZWFyTmV3VG9kbyIsImVsZW1lbnRDb21wbGV0ZSIsImVk
aXRJdGVtRG9uZSIsIl9lZGl0SXRlbURvbmUiLCJpc2NhbmNlbGVkIiwia2V5Q29kZSIsImJsdXIi
LCJfYmluZEl0ZW1FZGl0RG9uZSIsIl9iaW5kSXRlbUVkaXRDYW5jZWwiLCJib290c3RyYXAiLCJf
X1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2hlbHBlcnNfXyIsIndpbmRvdyIsIl9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fYXBwX18iLCJyZWFkeVN0YXRlIl0sIm1hcHBpbmdzIjoiQUFB
QUEsY0FBYyxFQUFFLElBRVYsU0FBU0MsRUFBUUMsRUFBU0MsR0FFaEMsWUNEQSxTQUFTQyxHQUFH
QyxFQUFVQyxHQUNwQixPQUFRQSxHQUFTQyxVQUFVQyxjQUFjSCxHQUczQyxRQUFTSSxHQUFJSixF
QUFVQyxHQUNyQixPQUFRQSxHQUFTQyxVQUFVRyxpQkFBaUJMLEdBSTlDLFFBQVNNLEdBQUlDLEVB
QVFDLEVBQU1DLEVBQVVDLEdBQ25DSCxFQUFPSSxpQkFBaUJILEVBQU1DLElBQVlDLEdBSzVDLFFB
QVNFLEdBQVVMLEVBQVFQLEVBQVVRLEVBQU1LLEdBS3pDLFFBQVNDLEdBQWNDLEdBQ3JCLEdBQUlD
LEdBQWdCRCxFQUFNUixPQUN0QlUsRUFBb0JiLEVBQUlKLEVBQVVPLEdBQ2xDVyxFQUFXQyxNQUFN
QyxVQUFVQyxRQUFRQyxLQUFLTCxFQUFtQkQsSUFBa0IsQ0FFN0VFLElBQ0ZMLEVBQVFTLEtBQUtO
LEVBQWVELEdBVGhDLEdBQUlMLEdBQXNCLFNBQVRGLEdBQTRCLFVBQVRBLENBQ3BDRixHQUFJQyxF
QUFRQyxFQUFNTSxFQUFlSixHQWVuQyxRQUFTYSxHQUFRQyxFQUFTQyxHQUN4QixHQUFLRCxFQUFR
RSxXQUdiLE1BQUlGLEdBQVFFLFdBQVdELFFBQVFFLGdCQUFrQkYsRUFBUUUsY0FDaERILEVBQVFF
LFdBRVZILEVBQVFDLEVBQVFFLFdBQVlELEdBT3JDLFFBQVNHLEdBQU9DLEVBQU9DLEdBQ3JCLEdB
QU1DLEdBQVFGLEVBQU1SLFFBQVFTLEVBQzVCLE9BQUlDLFFBQ0tGLE1BRVRBLEdBQU1HLE9BQU9E
LEVBQU8sR0RqRERqQyxFQUFvQm1DLEVBQUVwQyxFQUFTLElBQUssV0FBYSxNQUFPRSxLQUN4REQs
RUFBb0JtQyxFQUFFcEMsRUFBUyxJQUFLLFdBQWEsTUFBT08sS0FDeEROLEVBQW9CbUMsRUFBRXBD
LEVBQVMsSUFBSyxXQUFhLE1BQU9TLEtBQ3hEUixFQUFvQm1DLEVBQUVwQyxFQUFTLElBQUssV0FB
YSxNQUFPZSxLQUN4RGQsRUFBb0JtQyxFQUFFcEMsRUFBUyxJQUFLLFdBQWEsTUFBTzBCLEtBQ3hE
ekIsRUFBb0JtQyxFQUFFcEMsRUFBUyxJQUFLLFdBQWEsTUFBTytCLEtDaUQ3RU0sU0FBU2QsVUFB
VWUsUUFBVWhCLE1BQU1DLFVBQVVlLFNEY3RDLENBRUQsU0FBU3ZDLEVBQVFDLEVBQVNDLEdBRWhD
LFlFeEVPLFNBQVNzQyxLQUNkdEMsRUFBQXVDLEVBQUFDLEVBQUEsS0Z3RW1CLEdBQUlDLEdBQTBE
ekMsRUFBb0IsR0FFOUUwQyxHQURrRTFDLEVBQW9CMkMsRUFBRUYsR0FDL0N6QyxFQUFvQixLQUc3
RHdDLEdBRmlEeEMsRUFBb0IyQyxFQUFFRCxHQUM5QjFDLEVBQW9CLEdBQ3ZCQSxFQUFvQixHQUM5
REQsR0FBVyxFQUFJdUMsR0FhOUIsU0FBU3hDLEVBQVFDLEVBQVNDLEdBRWhDLFlHM0ZBLFNBQVM0
QyxHQUFXQyxFQUFPQyxHQUN6QixHQUFJQyxHQUFPQyxJQUNYRCxHQUFLRixNQUFRQSxFQUNiRSxF
QUFLRCxLQUFPQSxFQUVaQyxFQUFLRCxLQUFLRyxLQUFLLFVBQVcsU0FBU0MsR0FDakNILEVBQUtJ
LFFBQVFELEtBR2ZILEVBQUtELEtBQUtHLEtBQUssV0FBWSxTQUFTRyxHQUNsQ0wsRUFBS00sU0FB
U0QsRUFBS0UsTUFHckJQLEVBQUtELEtBQUtHLEtBQUssZUFBZ0IsU0FBU0csR0FDdENMLEVBQUtR
LGFBQWFILEVBQUtFLEdBQUlGLEVBQUtGLFNBR2xDSCxFQUFLRCxLQUFLRyxLQUFLLGlCQUFrQixT
QUFTRyxHQUN4Q0wsRUFBS1MsZUFBZUosRUFBS0UsTUFHM0JQLEVBQUtELEtBQUtHLEtBQUssYUFB
YyxTQUFTRyxHQUNwQ0wsRUFBS1UsV0FBV0wsRUFBS0UsTUFHdkJQLEVBQUtELEtBQUtHLEtBQUss
YUFBYyxTQUFTRyxHQUNwQ0wsRUFBS1csZUFBZU4sRUFBS0UsR0FBSUYsRUFBS08sYUFHcENaLEVB
QUtELEtBQUtHLEtBQUssa0JBQW1CLFdBQ2hDRixFQUFLYSx5QkFHUGIsRUFBS0QsS0FBS0csS0FB
SyxZQUFhLFNBQVNZLEdBQ25DZCxFQUFLZSxVQUFVRCxFQUFPRixhQTNDMUI1RCxFQUFBLEVBQWU2
QyxFQW9EZkEsRUFBV3RCLFVBQVV5QyxRQUFVLFNBQVNDLEdBQ3RDLEdBQUlDLEdBQVFELEVBQWFF
LE1BQU0sS0FBSyxHQUNoQ0MsRUFBT0YsR0FBUyxFQUNwQmpCLE1BQUtvQixtQkFBbUJELElBTzFC
dkIsRUFBV3RCLFVBQVUrQyxRQUFVLFdBQzdCLEdBQUl0QixHQUFPQyxJQUNYRCxHQUFLRixNQUFN
eUIsS0FBSyxTQUFTQyxHQUN2QnhCLEVBQUtELEtBQUswQixPQUFPLGNBQWVELE1BT3BDM0IsRUFB
V3RCLFVBQVVtRCxXQUFhLFdBQ2hDLEdBQUkxQixHQUFPQyxJQUNYRCxHQUFLRixNQUFNeUIsTUFB
TVgsV0FBVyxHQUFRLFNBQVNZLEdBQzNDeEIsRUFBS0QsS0FBSzBCLE9BQU8sY0FBZUQsTUFPcEMz
QixFQUFXdEIsVUFBVW9ELGNBQWdCLFdBQ25DLEdBQUkzQixHQUFPQyxJQUNYRCxHQUFLRixNQUFN
eUIsTUFBTVgsV0FBVyxHQUFPLFNBQVNZLEdBQzFDeEIsRUFBS0QsS0FBSzBCLE9BQU8sY0FBZUQs
TUFRcEMzQixFQUFXdEIsVUFBVTZCLFFBQVUsU0FBU0QsR0FDdEMsR0FBSUgsR0FBT0MsSUFFVSxN
QUFqQkUsRUFBTXlCLFFBSVY1QixFQUFLRixNQUFNK0IsT0FBTzFCLEVBQU8sV0FDdkJILEVBQUtE
LEtBQUswQixPQUFPLGdCQUNqQnpCLEVBQUs4QixTQUFRLE1BT2pCakMsRUFBV3RCLFVBQVUrQixT
QUFXLFNBQVNDLEdBQ3ZDLEdBQUlQLEdBQU9DLElBQ1hELEdBQUtGLE1BQU15QixLQUFLaEIsRUFB
SSxTQUFTaUIsR0FDM0J4QixFQUFLRCxLQUFLMEIsT0FBTyxZQUFhbEIsS0FBSUosTUFBT3FCLEVB
QUssR0FBR3JCLFdBT3JETixFQUFXdEIsVUFBVWlDLGFBQWUsU0FBU0QsRUFBSUosR0FDL0MsR0FB
SUgsR0FBT0MsSUFDUEUsR0FBTXlCLE9BQ1I1QixFQUFLRixNQUFNaUMsT0FBT3hCLEdBQUtKLFNB
QVEsV0FDN0JILEVBQUtELEtBQUswQixPQUFPLGdCQUFpQmxCLEtBQUlKLFlBR3hDSCxFQUFLVSxX
QUFXSCxJQU9wQlYsRUFBV3RCLFVBQVVrQyxlQUFpQixTQUFTRixHQUM3QyxHQUFJUCxHQUFPQyxJ
QUNYRCxHQUFLRixNQUFNeUIsS0FBS2hCLEVBQUksU0FBU2lCLEdBQzNCeEIsRUFBS0QsS0FBSzBC
LE9BQU8sZ0JBQWlCbEIsS0FBSUosTUFBT3FCLEVBQUssR0FBR3JCLFdBV3pETixFQUFXdEIsVUFB
VW1DLFdBQWEsU0FBU0gsR0FDekMsR0FBSVAsR0FBT0MsSUFDWEQsR0FBS0YsTUFBTWYsT0FBT3dC
LEVBQUksV0FDcEJQLEVBQUtELEtBQUswQixPQUFPLGFBQWNsQixLQUdqQ1AsRUFBSzhCLFdBTVBq
QyxFQUFXdEIsVUFBVXNDLHFCQUF1QixXQUMxQyxHQUFJYixHQUFPQyxJQUNYRCxHQUFLRixNQUFN
eUIsTUFBTVgsV0FBVyxHQUFPLFNBQVNZLEdBQzFDQSxFQUFLbEMsUUFBUSxTQUFTZSxHQUNwQkws
RUFBS1UsV0FBV0wsRUFBS0UsUUFJekJQLEVBQUs4QixXQVlQakMsRUFBV3RCLFVBQVVvQyxlQUFp
QixTQUFTSixFQUFJSyxFQUFXb0IsR0FDNUQsR0FBSWhDLEdBQU9DLElBQ1hELEdBQUtGLE1BQU1p
QyxPQUFPeEIsR0FBS0ssYUFBWSxXQUNqQ1osRUFBS0QsS0FBSzBCLE9BQU8sbUJBQ2ZsQixLQUNB
SyxnQkFJQ29CLEdBQ0hoQyxFQUFLOEIsV0FRVGpDLEVBQVd0QixVQUFVd0MsVUFBWSxTQUFTSCxH
QUN4QyxHQUFJWixHQUFPQyxJQUNYRCxHQUFLRixNQUFNeUIsTUFBTVgsV0FBWUEsR0FBWSxTQUFT
WSxHQUNoREEsRUFBS2xDLFFBQVEsU0FBU2UsR0FDcEJMLEVBQUtXLGVBQWVOLEVBQUtFLEdBQUlL
LEdBQVcsT0FJNUNaLEVBQUs4QixXQU9QakMsRUFBV3RCLFVBQVUwRCxhQUFlLFdBQ2xDLEdBQUlq
QyxHQUFPQyxJQUNYRCxHQUFLRixNQUFNb0MsU0FBUyxTQUFTQyxHQUMzQm5DLEVBQUtELEtBQUsw
QixPQUFPLHFCQUFzQlUsRUFBTUMsUUFDN0NwQyxFQUFLRCxLQUFLMEIsT0FBTyx3QkFDZmIsVUFB
V3VCLEVBQU12QixVQUNqQnlCLFFBQVNGLEVBQU12QixVQUFZLElBRzdCWixFQUFLRCxLQUFLMEIs
T0FBTyxhQUFjYSxRQUFTSCxFQUFNdkIsWUFBY3VCLEVBQU1JLFFBQ2xFdkMsRUFBS0QsS0FBSzBC
LE9BQU8sMEJBQTJCWSxRQUFTRixFQUFNSSxNQUFRLE9BUXZFMUMsRUFBV3RCLFVBQVV1RCxRQUFV
LFNBQVNVLEdBQ3RDLEdBQUlDLEdBQWN4QyxLQUFLeUMsYUFBYUMsT0FBTyxHQUFHQyxjQUFnQjND
LEtBQUt5QyxhQUFhRyxPQUFPLEVBR3ZGNUMsTUFBS2dDLGdCQUtETyxHQUFtQyxRQUExQnZDLEtB
QUs2QyxrQkFBOEI3QyxLQUFLNkMsbUJBQXFCTCxJQUN4RXhDLEtBQUssT0FBU3dDLEtBR2hCeEMs
S0FBSzZDLGlCQUFtQkwsR0FNMUI1QyxFQUFXdEIsVUFBVThDLG1CQUFxQixTQUFTMEIsR0FHakRB
LEVBQWNBLEVBQVk1QixNQUFNLEtBQUssR0FDckNsQixLQUFLeUMsYUFBZUssRUFFQSxLQUFoQkEs
SUFDRjlDLEtBQUt5QyxhQUFlLE9BR3RCekMsS0FBSzZCLFVBRUw3QixLQUFLRixLQUFLMEIsT0FB
TyxZQUFhc0IsS0gwRzFCLFNBQVNoRyxFQUFRQyxFQUFTQyxHQUVoQyxHQUFJK0YsR0FBNEIsa0JB
QVhDLFNBQW9ELGdCQUFwQkEsUUFBT0MsU0FBd0IsU0FBVUMsR0FBTyxhQUFjQSxJQUFTLFNBQVVB
LEdBQU8sTUFBT0EsSUFBeUIsa0JBQVhGLFNBQXlCRSxFQUFJQyxjQUFnQkgsUUFBVUUsSUFBUUYs
T0FBTzFFLFVBQVksZUFBa0I0RSxLSWpYdFEsU0FBVUUsR0FDUixHQUFJQyxNQUNBQyxJQUtKRCxH
QUFtQkUsT0FBUyxFQVM1QkYsRUFBbUJHLFFBQVUsU0FBU0MsR0FDcEMsTUFBT0gsR0FBTUcsSUFB
USxNQVl2QkosRUFBbUJLLFFBQVUsU0FBU0QsRUFBS0UsR0FDcEIsbUJBQVZBLEdBQ1ROLEVBQW1C
NUMsV0FBV2dELElBRXhCSCxFQUFNTSxlQUFlSCxJQUN6QkosRUFBbUJFLFNBR3JCRCxFQUFNRyxH
QUFPLEdBQUtFLElBV3RCTixFQUFtQjVDLFdBQWEsU0FBU2dELEdBQ25DSCxFQUFNTSxlQUFlSCxX
QUNoQkgsR0FBTUcsR0FDYkosRUFBbUJFLFdBV3ZCRixFQUFtQkksSUFBTSxTQUFTeEUsR0FDaEMs
TUFBTzRFLFFBQU9DLEtBQUtSLEdBQU9yRSxJQUFVLE1BUXRDb0UsRUFBbUJVLE1BQVEsV0FDekJU
LEtBQ0FELEVBQW1CRSxPQUFTLEdBR1AsV0FBbkJSLEVBQU9oRyxHQUNURCxFQUFPQyxRQUFVc0cs
RUFFakJELEVBQUtDLG1CQUFxQkEsR0FFM0JyRCxPSnVYRyxTQUFTbEQsRUFBUUMsRUFBU0MsR0FF
aEMsWUtsY0EsU0FBU2dILEdBQU1DLEdBQ2JqRSxLQUFLaUUsUUFBVUEsRUxrY2pCLEdBQUlsQixH
QUE0QixrQkFBWEMsU0FBb0QsZ0JBQXBCQSxRQUFPQyxTQUF3QixTQUFVQyxHQUFPLGFBQWNBLElB
QVMsU0FBVUEsR0FBTyxNQUFPQSxJQUF5QixrQkFBWEYsU0FBeUJFLEVBQUlDLGNBQWdCSCxRQUFV
RSxJQUFRRixPQUFPMUUsVUFBWSxlQUFrQjRFLEdLM2N0UW5HLEdBQUEsRUFBZWlILEVBa0JmQSxF
QUFNMUYsVUFBVXNELE9BQVMsU0FBUzFCLEVBQU92QyxHQUN2Q3VDLEVBQVFBLEdBQVMsR0FDakJ2
QyxFQUFXQSxHQUFZLFlBR3ZCLElBQUl1RyxJQUNGaEUsTUFBT0EsRUFBTXlCLE9BQ2JoQixXQUFX
LEVBR2JYLE1BQUtpRSxRQUFRRSxLQUFLRCxFQUFTdkcsSUFpQjdCcUcsRUFBTTFGLFVBQVVnRCxL
QUFPLFNBQVM4QyxFQUFPekcsR0FDckMsR0FBSTBHLEdBQUEsbUJBQW1CRCxHQUFuQixZQUFBckIs
RUFBbUJxQixFQUl2QixPQUhBekcsR0FBV0EsR0FBWSxhQUdMLGFBQWQwRyxHQUNGMUcsRUFBV3lH
LEVBQ0pwRSxLQUFLaUUsUUFBUUssUUFBUTNHLFNBQ0wsV0FBZDBHLEdBQXdDLFdBQWRBLEdBQ25D
RCxFQUFRRyxTQUFTSCxFQUFPLElBQ3hCcEUsS0FBS2lFLFFBQVFPLE1BQU1sRSxHQUFJOEQsR0FB
UXpHLElBRS9CcUMsS0FBS2lFLFFBQVFPLEtBQUtKLEVBQU96RyxLQWE3QnFHLEVBQU0xRixVQUFV
d0QsT0FBUyxTQUFTeEIsRUFBSWlCLEVBQU01RCxHQUMxQ3FDLEtBQUtpRSxRQUFRRSxLQUFLNUMs
RUFBTTVELEVBQVUyQyxJQVNwQzBELEVBQU0xRixVQUFVUSxPQUFTLFNBQVN3QixFQUFJM0MsR0FD
cENxQyxLQUFLaUUsUUFBUW5GLE9BQU93QixFQUFJM0MsSUFRMUJxRyxFQUFNMUYsVUFBVW1HLFVB
QVksU0FBUzlHLEdBQ25DcUMsS0FBS2lFLFFBQVFTLEtBQUsvRyxJQU1wQnFHLEVBQU0xRixVQUFV
MkQsU0FBVyxTQUFTdEUsR0FDbEMsR0FBSXVFLElBQ0ZDLE9BQVEsRUFDUnhCLFVBQVcsRUFDWDJC
LE1BQU8sRUFHVHRDLE1BQUtpRSxRQUFRSyxRQUFRLFNBQVMvQyxHQUM1QkEsRUFBS2xDLFFBQVEs
U0FBU3NGLEdBQ2hCQSxFQUFLaEUsVUFDUHVCLEVBQU12QixZQUVOdUIsRUFBTUMsU0FHUkQsRUFB
TUksVUFFUjNFLEVBQVN1RSxPTGlkUCxTQUFTcEYsRUFBUUMsRUFBU0MsR0FFaEMsWU14akJBLFNB
QVM0SCxHQUFNQyxFQUFNbEgsR0FNbkIsR0FMQUEsRUFBV0EsR0FBWSxhQUd2QnFDLEtBQUs4RSxR
QUFVRCxHQUVWRSxFQUFtQkYsR0FBTyxDQUM3QixHQUFJdEQsSUFDRlcsU0FHRjZDLEdBQW1CRixH
QUFRRyxLQUFLQyxVQUFVMUQsR0FHNUM1RCxFQUFTYSxLQUFLd0IsS0FBTWdGLEtBQUtFLE1BQU1I
LEVBQW1CRixLQUNsRDdFLEtBQUttRixlTjBpQmMsR0FBSUMsR0FBeUNwSSxFQUFvQixHQUM3RCtI
LEVBQXdDL0gsRUFBb0IsRUFDWkEsR0FBb0IyQyxFQUFFb0YsRU1ya0IvRmhJLEdBQUEsRUFBZTZI
LEVBNEJmQSxFQUFNdEcsVUFBVStHLFVBQVksU0FBU0MsR0FBWSxHQUFBQyxHQUFBdkYsSUFFL0Ms
T0FEQUEsTUFBS21GLFlBQVlLLEtBQUtGLEdBQ2YsaUJBQU10SSxHQUFBdUMsRUFBQTZGLEVBQUEs
R0FBT0csRUFBS0osWUFBYUcsS0FHeENWLEVBQU10RyxVQUFVbUgsUUFBVSxXQUN4QnpGLEtBQUtt
RixZQUFZOUYsUUFBUSxTQUFBcUcsR0FBQSxNQUFLQSxRQWdCaENkLEVBQU10RyxVQUFVa0csS0FB
TyxTQUFTSixFQUFPekcsR0FDckMsR0FBS0EsRUFBTCxDQUlBLEdBQUl1RSxHQUFROEMsS0FBS0Us
TUFBTUgsRUFBbUIvRSxLQUFLOEUsVUFBVTVDLEtBRXpEdkUsR0FBU2EsS0FBS3dCLEtBQU1rQyxF
QUFNeUQsT0FBTyxTQUFTaEIsR0FDeEMsSUFBSyxHQUFJaUIsS0FBS3hCLEdBQ1osR0FBSUEsRUFB
TXdCLEtBQU9qQixFQUFLaUIsR0FDcEIsT0FBTyxDQUdYLFFBQU8sT0FTWGhCLEVBQU10RyxVQUFV
Z0csUUFBVSxTQUFTM0csR0FDakNBLEVBQVdBLEdBQVksYUFFdkJBLEVBQVNhLEtBQUt3QixLQUFN
Z0YsS0FBS0UsTUFBTUgsRUFBbUIvRSxLQUFLOEUsVUFBVTVDLFFBV25FMEMsRUFBTXRHLFVBQVU2
RixLQUFPLFNBQVMwQixFQUFZbEksRUFBVTJDLEdBQ3BELEdBQUlpQixHQUFPeUQsS0FBS0UsTUFB
TUgsRUFBbUIvRSxLQUFLOEUsVUFDMUM1QyxFQUFRWCxFQUFLVyxLQU1qQixJQUpBdkUsRUFBV0Es
R0FBWSxhQUluQjJDLEVBQUksQ0FDTixJQUFLLEdBQUlmLEdBQUksRUFBR0EsRUFBSTJDLEVBQU1x
QixPQUFRaEUsSUFDaEMsR0FBSTJDLEVBQU0zQyxHQUFHZSxLQUFPQSxFQUFJLENBQ3RCLElBQUss
R0FBSW1ELEtBQU9vQyxHQUNkM0QsRUFBTTNDLEdBQUdrRSxHQUFPb0MsRUFBV3BDLEVBRTdCLE9B
SUpzQixFQUFtQi9FLEtBQUs4RSxTQUFXRSxLQUFLQyxVQUFVMUQsR0FDbEQ1RCxFQUFTYSxLQUFL
d0IsS0FBTWdGLEtBQUtFLE1BQU1ILEVBQW1CL0UsS0FBSzhFLFVBQVU1QyxXQUdqRTJELEdBQVd2
RixJQUFLLEdBQUl3RixPQUFPQyxVQUUzQjdELEVBQU1zRCxLQUFLSyxHQUNYZCxFQUFtQi9FLEtB
QUs4RSxTQUFXRSxLQUFLQyxVQUFVMUQsR0FDbEQ1RCxFQUFTYSxLQUFLd0IsTUFBTzZGLEdBRXZC
N0YsTUFBS3lGLFdBU1BiLEVBQU10RyxVQUFVUSxPQUFTLFNBQVN3QixFQUFJM0MsR0FJcEMsSUFB
SyxHQUhENEQsR0FBT3lELEtBQUtFLE1BQU1ILEVBQW1CL0UsS0FBSzhFLFVBQzFDNUMsRUFBUVgs
RUFBS1csTUFFUjNDLEVBQUksRUFBR0EsRUFBSTJDLEVBQU1xQixPQUFRaEUsSUFDaEMsR0FBSTJD
LEVBQU0zQyxHQUFHZSxLQUFPQSxFQUFJLENBQ3RCNEIsRUFBTWhELE9BQU9LLEVBQUcsRUFDaEIs
T0FJSndGLEVBQW1CL0UsS0FBSzhFLFNBQVdFLEtBQUtDLFVBQVUxRCxHQUNsRDVELEVBQVNhLEtB
QUt3QixLQUFNZ0YsS0FBS0UsTUFBTUgsRUFBbUIvRSxLQUFLOEUsVUFBVTVDLE9BQ2pFbEMsS0FB
S3lGLFdBUVBiLEVBQU10RyxVQUFVb0csS0FBTyxTQUFTL0csR0FDOUJvSCxFQUFtQi9FLEtBQUs4
RSxTQUFXRSxLQUFLQyxXQUFXL0MsV0FDbkR2RSxFQUFTYSxLQUFLd0IsS0FBTWdGLEtBQUtFLE1B
QU1ILEVBQW1CL0UsS0FBSzhFLFVBQVU1QyxPQUNqRWxDLEtBQUt5RixZTmlsQkQsU0FBUzNJLEVB
QVFDLEVBQVNDLEdBRWhDLFlPenNCQSxTQUFTZ0osS0FDUGhHLEtBQUtpRyxnQkFBTCxzUEFoQ0Zs
SixFQUFBLEVBQWVpSixDQUVmLElBQUlFLElBQ0ZDLElBQUssUUFDTEMsSUFBSyxPQUNMQyxJQUFL
LE9BQ0xDLElBQUssU0FDTEMsSUFBTSxTQUNOQyxJQUFLLFVBR0hDLEVBQWlCLFNBQVNDLEdBQzVC
LE1BQU9SLEdBQVlRLElBR2pCQyxFQUFrQixZQUNsQkMsRUFBcUIsR0FBSUMsUUFBT0YsRUFBZ0JH
LFFBRWhEQyxFQUFTLFNBQVNDLEdBQ3BCLE1BQUlBLElBQVVKLEVBQW1CSyxLQUFLRCxHQUM3QkEs
RUFBT0UsUUFBUVAsRUFBaUJGLEdBRWhDTyxFQXNDWGhCLEdBQVMxSCxVQUFVNkksS0FBTyxTQUFT
NUYsR0FDakMsR0FBSWhDLEdBQUc2SCxFQUNIdEgsRUFBTyxFQUVYLEtBQUtQLEVBQUksRUFBRzZI
LEVBQUk3RixFQUFLZ0MsT0FBUWhFLEVBQUk2SCxFQUFHN0gsSUFBSyxDQUN2QyxHQUFJOEgsR0FB
V3JILEtBQUtpRyxnQkFDaEJ0RixFQUFZLEdBQ1owQixFQUFVLEVBRVZkLEdBQUtoQyxHQUFHb0Is
WUFDVkEsRUFBWSxZQUNaMEIsRUFBVSxXQUdaZ0YsRUFBV0EsRUFBU0gsUUFBUSxTQUFVM0YsRUFB
S2hDLEdBQUdlLElBQzlDK0csRUFBV0EsRUFBU0gsUUFBUSxZQUFhSCxFQUFPeEYsRUFBS2hDLEdB
QUdXLFFBQ3hEbUgsRUFBV0EsRUFBU0gsUUFBUSxnQkFBaUJ2RyxHQUM3QzBHLEVBQVdBLEVBQVNI
LFFBQVEsY0FBZTdFLEdBRTNDdkMsR0FBY3VILEVBR2hCLE1BQU92SCxJQVNUa0csRUFBUzFILFVB
QVVnSixZQUFjLFNBQVNDLEdBQ3hDLEdBQUlDLEdBQXlCLElBQWhCRCxFQUFvQixHQUFLLEdBRXRD
LE9BQU8sV0FBYUEsRUFBYyxpQkFBbUJDLEVBQVMsU0FTaEV4QixFQUFTMUgsVUFBVW1KLHFCQUF1
QixTQUFTQyxHQUNqRCxNQUFJQSxHQUFpQixFQUNaLGtCQUVBLEtQdXVCTCxTQUFTNUssRUFBUUMs
RUFBU0MsR0FFaEMsWVFuMEJBLFNBQVMySyxHQUFLOUMsR0FDWjdFLEtBQUtpRSxRQUFVLEdBQUky
RCxHQUFBLEVBQU0vQyxHQUN6QjdFLEtBQUtILE1BQVEsR0FBSWdJLEdBQUEsRUFBTTdILEtBQUtp
RSxTQUM1QmpFLEtBQUtxSCxTQUFXLEdBQUlTLEdBQUEsRUFDcEI5SCxLQUFLRixLQUFPLEdBQUlp
SSxHQUFBLEVBQUsvSCxLQUFLcUgsVUFDMUJySCxLQUFLZ0ksV0FBYSxHQUFJQyxHQUFBLEVBQVdq
SSxLQUFLSCxNQUFPRyxLQUFLRixNQUdwRCxRQUFTb0ksS0FDUHZELEVBQU8sR0FBSWdELEdBQUss
bUJBQ2hCaEQsRUFBS3FELFdBQVdqSCxRQUFRM0QsU0FBUytLLFNBQVNDLE1BQzFDakQsRUFBWTlG
LFFBQVEsU0FBQXFHLEdBQUEsTUFBS0EsT1J5ekJOLEdBQUlxQyxHQUFzQy9LLEVBQW9CLEdBQzFE
aUwsRUFBNENqTCxFQUFvQixHQUNoRTZLLEVBQXVDN0ssRUFBb0IsR0FDM0Q0SyxFQUF1QzVLLEVB
QW9CLEdBQzNEOEssRUFBMEM5SyxFQUFvQixFQUNyQkEsR0FBb0IsRUFFakVBLEdBQW9CbUMsRUFB
RXBDLEVBQVMsSUFBSyxXQUFhLE1BQU9tTCxJUW4xQjdFLElBQUl2RCxVQUNFUSxNUmc0QkEsU0FB
U3JJLEVBQVFDLEVBQVNDLEdBRWhDLFlBSUEsU0FBU3FMLEdBQWdCQyxFQUFVQyxHQUFlLEtBQU1E
LFlBQW9CQyxJQUFnQixLQUFNLElBQUlDLFdBQVUscUNTanVCaEgsUUFBU0MsR0FBVzNGLEdBQ2xC
OUYsRUFBQXVDLEVBQUE2RixFQUFBLEdBQUcsc0JBQXNCc0QsVUFBWSxHQUNyQzFMLEVBQUF1QyxF
QUFBNkYsRUFBQSxHQUFHLHFCQUF1QnRDLEVBQWMsTUFBTTRGLFVBQVksV0FHNUQsUUFBU0MsR0FB
aUJySSxFQUFJSyxHQUM1QixHQUFJaUksR0FBVzVMLEVBQUF1QyxFQUFBNkYsRUFBQSxHQUFHLGFB
QWU5RSxFQUFLLEtBRWpDc0ksS0FJTEEsRUFBU0YsVUFBWS9ILEVBQVksWUFBYyxHQUcvQzNELEVB
QUF1QyxFQUFBNkYsRUFBQSxHQUFHLFFBQVN3RCxHQUFVdkcsUUFBVTFCLEdBR2xDLFFBQVNrSSxH
QUFVdkksRUFBSUosR0FDckIsR0FBSTBJLEdBQVc1TCxFQUFBdUMsRUFBQTZGLEVBQUEsR0FBRyxh
QUFlOUUsRUFBSyxLQUV0QyxJQUFLc0ksRUFBTCxDQUlBQSxFQUFTRixVQUFZRSxFQUFTRixVQUFZ
LFVBRTFDLElBQUlJLEdBQVExTCxTQUFTMkwsY0FBYyxRQUNuQ0QsR0FBTUosVUFBWSxPQUVsQkUs
RUFBU0ksWUFBWUYsR0FDckJBLEVBQU1HLFFBQ05ILEVBQU1uRixNQUFRekQsR0FHaEIsUUFBU2dK
LEdBQVF4SyxHQUNmLEdBQUl5SyxHQUFLbk0sRUFBQXVDLEVBQUE2RixFQUFBLEdBQVExRyxFQUFT
LEtBQzFCLE9BQU82RixVQUFTNEUsRUFBR0MsUUFBUTlJLEdBQUksSVR5ckJaLEdBQUk4RSxHQUF5
Q3BJLEVBQW9CLEdBQ2xGcU0sRUFBZSxXQUFjLFFBQVNDLEdBQWlCN0wsRUFBUThMLEdBQVMsSUFB
SyxHQUFJaEssR0FBSSxFQUFHQSxFQUFJZ0ssRUFBTWhHLE9BQVFoRSxJQUFLLENBQUUsR0FBSWlL
LEdBQWFELEVBQU1oSyxFQUFJaUssR0FBV0MsV0FBYUQsRUFBV0MsYUFBYyxFQUFPRCxFQUFXRSxj
QUFlLEVBQVUsU0FBV0YsS0FBWUEsRUFBV0csVUFBVyxHQUFNOUYsT0FBTytGLGVBQWVuTSxFQUFR
K0wsRUFBVy9GLElBQUsrRixJQUFpQixNQUFPLFVBQVVqQixFQUFhc0IsRUFBWUMsR0FBaUosTUFB
OUhELElBQVlQLEVBQWlCZixFQUFZakssVUFBV3VMLEdBQWlCQyxHQUFhUixFQUFpQmYsRUFBYXVC
LEdBQXFCdkIsTVNsNEIzZ0J3QixFVG01QlYsV1NsNUJULFFBQUFBLEdBQVkxQyxHQUFVZ0IsRUFB
QXJJLEtBQUErSixHQUNwQi9KLEtBQUtxSCxTQUFXQSxFQUVoQnJILEtBQUtnSyxVQUFZLEdBQ2pC
aEssS0FBS2lLLFdBQWEsR0FFbEJqSyxLQUFLa0ssVUFBWWxOLEVBQUF1QyxFQUFBNkYsRUFBQSxH
QUFHLGNBQ3BCcEYsS0FBS21LLGlCQUFtQm5OLEVBQUF1QyxFQUFBNkYsRUFBQSxHQUFHLGVBQzNC
cEYsS0FBS29LLGdCQUFrQnBOLEVBQUF1QyxFQUFBNkYsRUFBQSxHQUFHLG9CQUMxQnBGLEtBQUtx
SyxNQUFRck4sRUFBQXVDLEVBQUE2RixFQUFBLEdBQUcsU0FDaEJwRixLQUFLc0ssUUFBVXROLEVB
QUF1QyxFQUFBNkYsRUFBQSxHQUFHLFdBQ2xCcEYsS0FBS3VLLFdBQWF2TixFQUFBdUMsRUFBQTZG
LEVBQUEsR0FBRyxlQUNyQnBGLEtBQUt3SyxTQUFXeE4sRUFBQXVDLEVBQUE2RixFQUFBLEdBQUcs
YVQ0aUNyQixNQXBKQWlFLEdBQWFVLElBQ1h0RyxJQUFLLGNBQ0xFLE1BQU8sU1N2NUJHckQsR0FD
VixHQUFJbUssR0FBT3pOLEVBQUF1QyxFQUFBNkYsRUFBQSxHQUFHLGFBQWU5RSxFQUFLLEtBRTlC
bUssSUFDRnpLLEtBQUtrSyxVQUFVUSxZQUFZRCxNVDI1QjdCaEgsSUFBSyx3QkFDTEUsTUFBTyxT
U3g1QmFnSCxFQUFnQnZJLEdBQ3BDcEMsS0FBS29LLGdCQUFnQlEsVUFBWTVLLEtBQUtxSCxTQUFT
SSxxQkFBcUJrRCxHQUNwRTNLLEtBQUtvSyxnQkFBZ0JTLE1BQU1DLFFBQVUxSSxFQUFVLFFBQVUs
VVQyNUJ6RHFCLElBQUssZ0JBQ0xFLE1BQU8sU1N6NUJLckQsRUFBSUosR0FDaEIsR0FBSTBJLEdB
QVc1TCxFQUFBdUMsRUFBQTZGLEVBQUEsR0FBRyxhQUFlOUUsRUFBSyxLQUV0QyxJQUFLc0ksRUFB
TCxDQUlBLEdBQUlFLEdBQVE5TCxFQUFBdUMsRUFBQTZGLEVBQUEsR0FBRyxhQUFjd0QsRUFDN0JB
LEdBQVM4QixZQUFZNUIsR0FFckJGLEVBQVNGLFVBQVlFLEVBQVNGLFVBQVV4QixRQUFRLFVBQVcs
SUFFM0RsSyxFQUFBdUMsRUFBQTZGLEVBQUEsR0FBSSxRQUFTd0QsR0FBVXZKLFFBQVEsU0FBUzBM
LEdBQ3RDQSxFQUFNQyxZQUFjOUssUVQ2NUJ0QnVELElBQUssU0FDTEUsTUFBTyxTUzE1QkZzSCxF
QUFTQyxHQUNkLEdBQUluTCxHQUFPQyxLQUNQbUwsR0FDRkMsWUFBYSxXQUNYckwsRUFBS21LLFVB
QVVVLFVBQVk3SyxFQUFLc0gsU0FBU0YsS0FBSytELElBRWhEekssV0FBWSxXQUNWVixFQUFLc0ws
WUFBWUgsSUFFbkJJLG1CQUFvQixXQUNsQnZMLEVBQUtvSyxpQkFBaUJTLFVBQVk3SyxFQUFLc0gs
U0FBU0MsWUFBWTRELElBRTlEekQscUJBQXNCLFdBQ3BCMUgsRUFBS3dMLHNCQUFzQkwsRUFBVXZL
LFVBQVd1SyxFQUFVOUksVUFFNURvSix1QkFBd0IsV0FDdEJ6TCxFQUFLc0ssTUFBTVEsTUFBTUMs
UUFBVS9LLEVBQUt1SyxRQUFRTyxNQUFNQyxRQUFVSSxFQUFVOUksUUFBVSxRQUFVLFFBRXhGdEIs
VUFBVyxXQUNUZixFQUFLd0ssV0FBV2xJLFFBQVU2SSxFQUFVN0ksU0FFdENvSixVQUFXLFdBQ1Ro
RCxFQUFXeUMsSUFFYlEsYUFBYyxXQUNaM0wsRUFBS3lLLFNBQVM3RyxNQUFRLElBRXhCZ0ksZ0JB
QWlCLFdBQ2ZoRCxFQUFpQnVDLEVBQVU1SyxHQUFJNEssRUFBVXZLLFlBRTNDTixTQUFVLFdBQ1J3
SSxFQUFVcUMsRUFBVTVLLEdBQUk0SyxFQUFVaEwsUUFFcEMwTCxhQUFjLFdBQ1o3TCxFQUFLOEws
Y0FBY1gsRUFBVTVLLEdBQUk0SyxFQUFVaEwsUUFJL0NpTCxHQUFhRixRVDY1QmJ4SCxJQUFLLG9C
QUNMRSxNQUFPLFNTMzVCUzVGLEdBQ2hCLEdBQUlnQyxHQUFPQyxJQUNYaEQsR0FBQXVDLEVBQUE2
RixFQUFBLEdBQVVyRixFQUFLbUssVUFBVyxXQUFZLE9BQVEsV0FDdkNsSyxLQUFLb0osUUFBUTBD
LFlBQ2hCL04sR0FDRXVDLEdBQUk0SSxFQUFRbEosTUFDWkUsTUFBT0YsS0FBSzJELFVBS2xCM0cs
RUFBQXVDLEVBQUE2RixFQUFBLEdBQVVyRixFQUFLbUssVUFBVyxXQUFZLFdBQVksU0FBU2pNLEdB
Q3JEQSxFQUFNOE4sVUFBWWhNLEVBQUtpSyxXQUd6QmhLLEtBQUtnTSxZVGc2QlR2SSxJQUFLLHNC
QUNMRSxNQUFPLFNTNTVCVzVGLEdBQ2xCLEdBQUlnQyxHQUFPQyxJQUNYaEQsR0FBQXVDLEVBQUE2
RixFQUFBLEdBQVVyRixFQUFLbUssVUFBVyxXQUFZLFFBQVMsU0FBU2pNLEdBQ2xEQSxFQUFNOE4s
VUFBWWhNLEVBQUtrSyxhQUN6QmpLLEtBQUtvSixRQUFRMEMsWUFBYSxFQUMxQjlMLEtBQUtnTSxP
QUVMak8sR0FBU3VDLEdBQUk0SSxFQUFRbEosY1RpNkJ6QnlELElBQUssT0FDTEUsTUFBTyxTUzc1
QkoxRixFQUFPRixHQUNWLEdBQUlnQyxHQUFPQyxJQUNHLGFBQVYvQixFQUNGakIsRUFBQXVDLEVB
QUE2RixFQUFBLEdBQUlyRixFQUFLeUssU0FBVSxTQUFVLFdBQzNCek0sRUFBUWdDLEVBQUt5SyxT
QUFTN0csU0FHTCxvQkFBVjFGLEVBQ1RqQixFQUFBdUMsRUFBQTZGLEVBQUEsR0FBSXJGLEVBQUtx
SyxnQkFBaUIsUUFBUyxXQUNqQ3JNLE1BR2lCLGNBQVZFLEVBQ1RqQixFQUFBdUMsRUFBQTZGLEVB
QUEsR0FBSXJGLEVBQUt3SyxXQUFZLFFBQVMsV0FDNUJ4TSxHQUFTNEMsVUFBV1gsS0FBS3FDLFlB
R1IsYUFBVnBFLEVBQ1RqQixFQUFBdUMsRUFBQTZGLEVBQUEsR0FBVXJGLEVBQUttSyxVQUFXLFdB
QVksV0FBWSxXQUNoRG5NLEdBQVN1QyxHQUFJNEksRUFBUWxKLFVBR0osZUFBVi9CLEVBQ1RqQixF
QUFBdUMsRUFBQTZGLEVBQUEsR0FBVXJGLEVBQUttSyxVQUFXLFdBQVksUUFBUyxXQUM3Q25NLEdB
QVN1QyxHQUFJNEksRUFBUWxKLFVBR0osZUFBVi9CLEVBQ1RqQixFQUFBdUMsRUFBQTZGLEVBQUEs
R0FBVXJGLEVBQUttSyxVQUFXLFVBQVcsUUFBUyxXQUM1Q25NLEdBQ0V1QyxHQUFJNEksRUFBUWxK
LE1BQ1pXLFVBQVdYLEtBQUtxQyxZQUlELGlCQUFWcEUsRUFDVDhCLEVBQUtrTSxrQkFBa0JsTyxH
QUVKLG1CQUFWRSxHQUNUOEIsRUFBS21NLG9CQUFvQm5PLE9UMjVCdEJnTSxJQUdvQmhOLEdBQVcs
RVM1akNuQmdOLEdUeW1DZixTQUFTak4sRUFBUUMsS0FNakIsU0FBU0QsRUFBUUMsRUFBU0MsR0FF
aEMsWVUxbUNBLFNBQVNtUCxLQUNQblAsRUFBQXVDLEVBQUE2TSxFQUFBLEdBQUlDLE9BQVEsT0FB
UUMsRUFBQSxHQUNwQnRQLEVBQUF1QyxFQUFBNk0sRUFBQSxHQUFJQyxPQUFRLGFBQWNDLEVBQUEs
R1Z5bUNQLEdBQUlBLEdBQXFDdFAsRUFBb0IsR1U5bkNsRm9QLEVBQUFwUCxFQUFBLEVBTTBDLGNB
QXhCSSxTQUFTbVAsVUFVekJKLFFWd29DQyIsImZpbGUiOiJidW5kbGUuYXBwLjczYmNjNWQzYzFk
MDcxODBmMGUzLmpzIiwic291cmNlc0NvbnRlbnQiOlsid2VicGFja0pzb25wKFswLDJdLFtcbi8q
IDAgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVf
Xykge1xuXG5cInVzZSBzdHJpY3RcIjtcblxuLyogaGFybW9ueSBleHBvcnQgKi8gX193ZWJwYWNr
X3JlcXVpcmVfXy5kKGV4cG9ydHMsIFwiYVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHFzOyB9KTtc
bi8qIGhhcm1vbnkgZXhwb3J0ICovIF9fd2VicGFja19yZXF1aXJlX18uZChleHBvcnRzLCBcImJc
IiwgZnVuY3Rpb24oKSB7IHJldHVybiBxc2E7IH0pO1xuLyogaGFybW9ueSBleHBvcnQgKi8gX193
ZWJwYWNrX3JlcXVpcmVfXy5kKGV4cG9ydHMsIFwiZFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuICRv
bjsgfSk7XG4vKiBoYXJtb255IGV4cG9ydCAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZXhwb3J0
cywgXCJjXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gJGRlbGVnYXRlOyB9KTtcbi8qIGhhcm1vbnkg
ZXhwb3J0ICovIF9fd2VicGFja19yZXF1aXJlX18uZChleHBvcnRzLCBcImVcIiwgZnVuY3Rpb24o
KSB7IHJldHVybiAkcGFyZW50OyB9KTtcbi8qIGhhcm1vbnkgZXhwb3J0ICovIF9fd2VicGFja19y
ZXF1aXJlX18uZChleHBvcnRzLCBcImZcIiwgZnVuY3Rpb24oKSB7IHJldHVybiByZW1vdmU7IH0p
O1xuXG4vLyBHZXQgZWxlbWVudChzKSBieSBDU1Mgc2VsZWN0b3I6XG5mdW5jdGlvbiBxcyhzZWxl
Y3Rvciwgc2NvcGUpIHtcbiAgcmV0dXJuIChzY29wZSB8fCBkb2N1bWVudCkucXVlcnlTZWxlY3Rv
cihzZWxlY3Rvcik7XG59XG5cbmZ1bmN0aW9uIHFzYShzZWxlY3Rvciwgc2NvcGUpIHtcbiAgcmV0
dXJuIChzY29wZSB8fCBkb2N1bWVudCkucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7XG59XG5c
bi8vIGFkZEV2ZW50TGlzdGVuZXIgd3JhcHBlcjpcbmZ1bmN0aW9uICRvbih0YXJnZXQsIHR5cGUs
IGNhbGxiYWNrLCB1c2VDYXB0dXJlKSB7XG4gIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKHR5cGUs
IGNhbGxiYWNrLCAhIXVzZUNhcHR1cmUpO1xufVxuXG4vLyBBdHRhY2ggYSBoYW5kbGVyIHRvIGV2
ZW50IGZvciBhbGwgZWxlbWVudHMgdGhhdCBtYXRjaCB0aGUgc2VsZWN0b3IsXG4vLyBub3cgb3Ig
aW4gdGhlIGZ1dHVyZSwgYmFzZWQgb24gYSByb290IGVsZW1lbnRcbmZ1bmN0aW9uICRkZWxlZ2F0
ZSh0YXJnZXQsIHNlbGVjdG9yLCB0eXBlLCBoYW5kbGVyKSB7XG4gIC8vIGh0dHBzOi8vZGV2ZWxv
cGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0V2ZW50cy9ibHVyXG4gIHZhciB1c2VDYXB0
dXJlID0gdHlwZSA9PT0gJ2JsdXInIHx8IHR5cGUgPT09ICdmb2N1cyc7XG4gICRvbih0YXJnZXQs
IHR5cGUsIGRpc3BhdGNoRXZlbnQsIHVzZUNhcHR1cmUpO1xuXG4gIGZ1bmN0aW9uIGRpc3BhdGNo
RXZlbnQoZXZlbnQpIHtcbiAgICB2YXIgdGFyZ2V0RWxlbWVudCA9IGV2ZW50LnRhcmdldDtcbiAg
ICB2YXIgcG90ZW50aWFsRWxlbWVudHMgPSBxc2Eoc2VsZWN0b3IsIHRhcmdldCk7XG4gICAgdmFy
IGhhc01hdGNoID0gQXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChwb3RlbnRpYWxFbGVtZW50
cywgdGFyZ2V0RWxlbWVudCkgPj0gMDtcblxuICAgIGlmIChoYXNNYXRjaCkge1xuICAgICAgaGFu
ZGxlci5jYWxsKHRhcmdldEVsZW1lbnQsIGV2ZW50KTtcbiAgICB9XG4gIH1cbn1cblxuLy8gRmlu
ZCB0aGUgZWxlbWVudCdzIHBhcmVudCB3aXRoIHRoZSBnaXZlbiB0YWcgbmFtZTpcbi8vICRwYXJl
bnQocXMoJ2EnKSwgJ2RpdicpO1xuZnVuY3Rpb24gJHBhcmVudChlbGVtZW50LCB0YWdOYW1lKSB7
XG4gIGlmICghZWxlbWVudC5wYXJlbnROb2RlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAg
fVxuICBpZiAoZWxlbWVudC5wYXJlbnROb2RlLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gdGFn
TmFtZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQucGFyZW50Tm9kZTtcbiAg
fVxuICByZXR1cm4gJHBhcmVudChlbGVtZW50LnBhcmVudE5vZGUsIHRhZ05hbWUpO1xufVxuXG4v
LyByZW1vdmVzIGFuIGVsZW1lbnQgZnJvbSBhbiBhcnJheVxuLy8gY29uc3QgeCA9IFsxLDIsM11c
bi8vIHJlbW92ZSh4LCAyKVxuLy8geCB+PT0gWzEsM11cbmZ1bmN0aW9uIHJlbW92ZShhcnJheSwg
dGhpbmcpIHtcbiAgdmFyIGluZGV4ID0gYXJyYXkuaW5kZXhPZih0aGluZyk7XG4gIGlmIChpbmRl
eCA9PT0gLTEpIHtcbiAgICByZXR1cm4gYXJyYXk7XG4gIH1cbiAgYXJyYXkuc3BsaWNlKGluZGV4
LCAxKTtcbn1cblxuLy8gQWxsb3cgZm9yIGxvb3Bpbmcgb24gbm9kZXMgYnkgY2hhaW5pbmc6XG4v
LyBxc2EoJy5mb28nKS5mb3JFYWNoKGZ1bmN0aW9uICgpIHt9KVxuTm9kZUxpc3QucHJvdG90eXBl
LmZvckVhY2ggPSBBcnJheS5wcm90b3R5cGUuZm9yRWFjaDtcblxuLyoqKi8gfSxcbi8qIDEgKi8s
XG4vKiAyICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1
aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3RvZG9tdmNfYXBwX2Nzc19pbmRleF9jc3NfXyA9IF9f
d2VicGFja19yZXF1aXJlX18oMSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX3RvZG9tdmNfYXBwX2Nzc19pbmRleF9jc3NfX19kZWZhdWx0ID0g
X193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF90b2RvbXZj
X2FwcF9jc3NfaW5kZXhfY3NzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMV9fYXBwX2Nzc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMCk7
XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19h
cHBfY3NzX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzFfX2FwcF9jc3NfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8yX19oZWxwZXJzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDAp
O1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19f
dG9kb19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KTtcbi8qIGhhcm1vbnkgZXhwb3J0ICovIGV4
cG9ydHNbXCJhXCJdID0gb25Mb2FkO1xuXG5cblxuXG5cbmZ1bmN0aW9uIG9uTG9hZCgpIHtcbiAg
Ly8gZXNsaW50LWRpc2FibGUtbGluZSBpbXBvcnQvcHJlZmVyLWRlZmF1bHQtZXhwb3J0XG4gIF9f
d2VicGFja19yZXF1aXJlX18uaShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3RvZG9fX1tc
ImFcIiAvKiB1cGRhdGVUb2RvICovXSkoKTtcbn1cblxuLyoqKi8gfSxcbi8qIDMgKi9cbi8qKiov
IGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVz
ZSBzdHJpY3RcIjtcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gZXhwb3J0c1tcImFcIl0g
PSBDb250cm9sbGVyO1xuXG4vKipcbiogVGFrZXMgYSBtb2RlbCBhbmQgdmlldyBhbmQgYWN0cyBh
cyB0aGUgY29udHJvbGxlciBiZXR3ZWVuIHRoZW1cbipcbiogQGNvbnN0cnVjdG9yXG4qIEBwYXJh
bSB7b2JqZWN0fSBtb2RlbCBUaGUgbW9kZWwgaW5zdGFuY2VcbiogQHBhcmFtIHtvYmplY3R9IHZp
ZXcgVGhlIHZpZXcgaW5zdGFuY2VcbiovXG5mdW5jdGlvbiBDb250cm9sbGVyKG1vZGVsLCB2aWV3
KSB7XG4gIHZhciB0aGF0ID0gdGhpcztcbiAgdGhhdC5tb2RlbCA9IG1vZGVsO1xuICB0aGF0LnZp
ZXcgPSB2aWV3O1xuXG4gIHRoYXQudmlldy5iaW5kKCduZXdUb2RvJywgZnVuY3Rpb24gKHRpdGxl
KSB7XG4gICAgdGhhdC5hZGRJdGVtKHRpdGxlKTtcbiAgfSk7XG5cbiAgdGhhdC52aWV3LmJpbmQo
J2l0ZW1FZGl0JywgZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICB0aGF0LmVkaXRJdGVtKGl0ZW0uaWQp
O1xuICB9KTtcblxuICB0aGF0LnZpZXcuYmluZCgnaXRlbUVkaXREb25lJywgZnVuY3Rpb24gKGl0
ZW0pIHtcbiAgICB0aGF0LmVkaXRJdGVtU2F2ZShpdGVtLmlkLCBpdGVtLnRpdGxlKTtcbiAgfSk7
XG5cbiAgdGhhdC52aWV3LmJpbmQoJ2l0ZW1FZGl0Q2FuY2VsJywgZnVuY3Rpb24gKGl0ZW0pIHtc
biAgICB0aGF0LmVkaXRJdGVtQ2FuY2VsKGl0ZW0uaWQpO1xuICB9KTtcblxuICB0aGF0LnZpZXcu
YmluZCgnaXRlbVJlbW92ZScsIGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgdGhhdC5yZW1vdmVJdGVt
KGl0ZW0uaWQpO1xuICB9KTtcblxuICB0aGF0LnZpZXcuYmluZCgnaXRlbVRvZ2dsZScsIGZ1bmN0
aW9uIChpdGVtKSB7XG4gICAgdGhhdC50b2dnbGVDb21wbGV0ZShpdGVtLmlkLCBpdGVtLmNvbXBs
ZXRlZCk7XG4gIH0pO1xuXG4gIHRoYXQudmlldy5iaW5kKCdyZW1vdmVDb21wbGV0ZWQnLCBmdW5j
dGlvbiAoKSB7XG4gICAgdGhhdC5yZW1vdmVDb21wbGV0ZWRJdGVtcygpO1xuICB9KTtcblxuICB0
aGF0LnZpZXcuYmluZCgndG9nZ2xlQWxsJywgZnVuY3Rpb24gKHN0YXR1cykge1xuICAgIHRoYXQu
dG9nZ2xlQWxsKHN0YXR1cy5jb21wbGV0ZWQpO1xuICB9KTtcbn1cblxuLyoqXG4qIExvYWRzIGFu
ZCBpbml0aWFsaXNlcyB0aGUgdmlld1xuKlxuKiBAcGFyYW0ge3N0cmluZ30gJycgfCAnYWN0aXZl
JyB8ICdjb21wbGV0ZWQnXG4qL1xuQ29udHJvbGxlci5wcm90b3R5cGUuc2V0VmlldyA9IGZ1bmN0
aW9uIChsb2NhdGlvbkhhc2gpIHtcbiAgdmFyIHJvdXRlID0gbG9jYXRpb25IYXNoLnNwbGl0KCcv
JylbMV07XG4gIHZhciBwYWdlID0gcm91dGUgfHwgJyc7XG4gIHRoaXMuX3VwZGF0ZUZpbHRlclN0
YXRlKHBhZ2UpO1xufTtcblxuLyoqXG4qIEFuIGV2ZW50IHRvIGZpcmUgb24gbG9hZC4gV2lsbCBn
ZXQgYWxsIGl0ZW1zIGFuZCBkaXNwbGF5IHRoZW0gaW4gdGhlXG4qIHRvZG8tbGlzdFxuKi9cbkNv
bnRyb2xsZXIucHJvdG90eXBlLnNob3dBbGwgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciB0aGF0ID0g
dGhpcztcbiAgdGhhdC5tb2RlbC5yZWFkKGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgdGhhdC52aWV3
LnJlbmRlcignc2hvd0VudHJpZXMnLCBkYXRhKTtcbiAgfSk7XG59O1xuXG4vKipcbiogUmVuZGVy
cyBhbGwgYWN0aXZlIHRhc2tzXG4qL1xuQ29udHJvbGxlci5wcm90b3R5cGUuc2hvd0FjdGl2ZSA9
IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRoYXQgPSB0aGlzO1xuICB0aGF0Lm1vZGVsLnJlYWQoeyBj
b21wbGV0ZWQ6IGZhbHNlIH0sIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgdGhhdC52aWV3LnJlbmRl
cignc2hvd0VudHJpZXMnLCBkYXRhKTtcbiAgfSk7XG59O1xuXG4vKipcbiogUmVuZGVycyBhbGwg
Y29tcGxldGVkIHRhc2tzXG4qL1xuQ29udHJvbGxlci5wcm90b3R5cGUuc2hvd0NvbXBsZXRlZCA9
IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRoYXQgPSB0aGlzO1xuICB0aGF0Lm1vZGVsLnJlYWQoeyBj
b21wbGV0ZWQ6IHRydWUgfSwgZnVuY3Rpb24gKGRhdGEpIHtcbiAgICB0aGF0LnZpZXcucmVuZGVy
KCdzaG93RW50cmllcycsIGRhdGEpO1xuICB9KTtcbn07XG5cbi8qKlxuKiBBbiBldmVudCB0byBm
aXJlIHdoZW5ldmVyIHlvdSB3YW50IHRvIGFkZCBhbiBpdGVtLiBTaW1wbHkgcGFzcyBpbiB0aGUg
ZXZlbnRcbiogb2JqZWN0IGFuZCBpdCdsbCBoYW5kbGUgdGhlIERPTSBpbnNlcnRpb24gYW5kIHNh
dmluZyBvZiB0aGUgbmV3IGl0ZW0uXG4qL1xuQ29udHJvbGxlci5wcm90b3R5cGUuYWRkSXRlbSA9
IGZ1bmN0aW9uICh0aXRsZSkge1xuICB2YXIgdGhhdCA9IHRoaXM7XG5cbiAgaWYgKHRpdGxlLnRy
aW0oKSA9PT0gJycpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB0aGF0Lm1vZGVsLmNyZWF0ZSh0
aXRsZSwgZnVuY3Rpb24gKCkge1xuICAgIHRoYXQudmlldy5yZW5kZXIoJ2NsZWFyTmV3VG9kbycp
O1xuICAgIHRoYXQuX2ZpbHRlcih0cnVlKTtcbiAgfSk7XG59O1xuXG4vKlxuKiBUcmlnZ2VycyB0
aGUgaXRlbSBlZGl0aW5nIG1vZGUuXG4qL1xuQ29udHJvbGxlci5wcm90b3R5cGUuZWRpdEl0ZW0g
PSBmdW5jdGlvbiAoaWQpIHtcbiAgdmFyIHRoYXQgPSB0aGlzO1xuICB0aGF0Lm1vZGVsLnJlYWQo
aWQsIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgdGhhdC52aWV3LnJlbmRlcignZWRpdEl0ZW0nLCB7
IGlkOiBpZCwgdGl0bGU6IGRhdGFbMF0udGl0bGUgfSk7XG4gIH0pO1xufTtcblxuLypcbiogRmlu
aXNoZXMgdGhlIGl0ZW0gZWRpdGluZyBtb2RlIHN1Y2Nlc3NmdWxseS5cbiovXG5Db250cm9sbGVy
LnByb3RvdHlwZS5lZGl0SXRlbVNhdmUgPSBmdW5jdGlvbiAoaWQsIHRpdGxlKSB7XG4gIHZhciB0
aGF0ID0gdGhpcztcbiAgaWYgKHRpdGxlLnRyaW0oKSkge1xuICAgIHRoYXQubW9kZWwudXBkYXRl
KGlkLCB7IHRpdGxlOiB0aXRsZSB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICB0aGF0LnZpZXcucmVu
ZGVyKCdlZGl0SXRlbURvbmUnLCB7IGlkOiBpZCwgdGl0bGU6IHRpdGxlIH0pO1xuICAgIH0pO1xu
ICB9IGVsc2Uge1xuICAgIHRoYXQucmVtb3ZlSXRlbShpZCk7XG4gIH1cbn07XG5cbi8qXG4qIENh
bmNlbHMgdGhlIGl0ZW0gZWRpdGluZyBtb2RlLlxuKi9cbkNvbnRyb2xsZXIucHJvdG90eXBlLmVk
aXRJdGVtQ2FuY2VsID0gZnVuY3Rpb24gKGlkKSB7XG4gIHZhciB0aGF0ID0gdGhpcztcbiAgdGhh
dC5tb2RlbC5yZWFkKGlkLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgIHRoYXQudmlldy5yZW5kZXIo
J2VkaXRJdGVtRG9uZScsIHsgaWQ6IGlkLCB0aXRsZTogZGF0YVswXS50aXRsZSB9KTtcbiAgfSk7
XG59O1xuXG4vKipcbiogQnkgZ2l2aW5nIGl0IGFuIElEIGl0J2xsIGZpbmQgdGhlIERPTSBlbGVt
ZW50IG1hdGNoaW5nIHRoYXQgSUQsXG4qIHJlbW92ZSBpdCBmcm9tIHRoZSBET00gYW5kIGFsc28g
cmVtb3ZlIGl0IGZyb20gc3RvcmFnZS5cbipcbiogQHBhcmFtIHtudW1iZXJ9IGlkIFRoZSBJRCBv
ZiB0aGUgaXRlbSB0byByZW1vdmUgZnJvbSB0aGUgRE9NIGFuZFxuKiBzdG9yYWdlXG4qL1xuQ29u
dHJvbGxlci5wcm90b3R5cGUucmVtb3ZlSXRlbSA9IGZ1bmN0aW9uIChpZCkge1xuICB2YXIgdGhh
dCA9IHRoaXM7XG4gIHRoYXQubW9kZWwucmVtb3ZlKGlkLCBmdW5jdGlvbiAoKSB7XG4gICAgdGhh
dC52aWV3LnJlbmRlcigncmVtb3ZlSXRlbScsIGlkKTtcbiAgfSk7XG5cbiAgdGhhdC5fZmlsdGVy
KCk7XG59O1xuXG4vKipcbiogV2lsbCByZW1vdmUgYWxsIGNvbXBsZXRlZCBpdGVtcyBmcm9tIHRo
ZSBET00gYW5kIHN0b3JhZ2UuXG4qL1xuQ29udHJvbGxlci5wcm90b3R5cGUucmVtb3ZlQ29tcGxl
dGVkSXRlbXMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciB0aGF0ID0gdGhpcztcbiAgdGhhdC5tb2Rl
bC5yZWFkKHsgY29tcGxldGVkOiB0cnVlIH0sIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgZGF0YS5m
b3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICB0aGF0LnJlbW92ZUl0ZW0oaXRlbS5pZCk7
XG4gICAgfSk7XG4gIH0pO1xuXG4gIHRoYXQuX2ZpbHRlcigpO1xufTtcblxuLyoqXG4qIEdpdmUg
aXQgYW4gSUQgb2YgYSBtb2RlbCBhbmQgYSBjaGVja2JveCBhbmQgaXQgd2lsbCB1cGRhdGUgdGhl
IGl0ZW1cbiogaW4gc3RvcmFnZSBiYXNlZCBvbiB0aGUgY2hlY2tib3gncyBzdGF0ZS5cbipcbiog
QHBhcmFtIHtudW1iZXJ9IGlkIFRoZSBJRCBvZiB0aGUgZWxlbWVudCB0byBjb21wbGV0ZSBvciB1
bmNvbXBsZXRlXG4qIEBwYXJhbSB7b2JqZWN0fSBjaGVja2JveCBUaGUgY2hlY2tib3ggdG8gY2hl
Y2sgdGhlIHN0YXRlIG9mIGNvbXBsZXRlXG4qICAgICAgICAgICAgICAgICAgICAgICAgICBvciBu
b3RcbiogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gc2lsZW50IFByZXZlbnQgcmUtZmlsdGVy
aW5nIHRoZSB0b2RvIGl0ZW1zXG4qL1xuQ29udHJvbGxlci5wcm90b3R5cGUudG9nZ2xlQ29tcGxl
dGUgPSBmdW5jdGlvbiAoaWQsIGNvbXBsZXRlZCwgc2lsZW50KSB7XG4gIHZhciB0aGF0ID0gdGhp
cztcbiAgdGhhdC5tb2RlbC51cGRhdGUoaWQsIHsgY29tcGxldGVkOiBjb21wbGV0ZWQgfSwgZnVu
Y3Rpb24gKCkge1xuICAgIHRoYXQudmlldy5yZW5kZXIoJ2VsZW1lbnRDb21wbGV0ZScsIHtcbiAg
ICAgIGlkOiBpZCxcbiAgICAgIGNvbXBsZXRlZDogY29tcGxldGVkXG4gICAgfSk7XG4gIH0pO1xu
XG4gIGlmICghc2lsZW50KSB7XG4gICAgdGhhdC5fZmlsdGVyKCk7XG4gIH1cbn07XG5cbi8qKlxu
KiBXaWxsIHRvZ2dsZSBBTEwgY2hlY2tib3hlcycgb24vb2ZmIHN0YXRlIGFuZCBjb21wbGV0ZW5l
c3Mgb2YgbW9kZWxzLlxuKiBKdXN0IHBhc3MgaW4gdGhlIGV2ZW50IG9iamVjdC5cbiovXG5Db250
cm9sbGVyLnByb3RvdHlwZS50b2dnbGVBbGwgPSBmdW5jdGlvbiAoY29tcGxldGVkKSB7XG4gIHZh
ciB0aGF0ID0gdGhpcztcbiAgdGhhdC5tb2RlbC5yZWFkKHsgY29tcGxldGVkOiAhY29tcGxldGVk
IH0sIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgZGF0YS5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7
XG4gICAgICB0aGF0LnRvZ2dsZUNvbXBsZXRlKGl0ZW0uaWQsIGNvbXBsZXRlZCwgdHJ1ZSk7XG4g
ICAgfSk7XG4gIH0pO1xuXG4gIHRoYXQuX2ZpbHRlcigpO1xufTtcblxuLyoqXG4qIFVwZGF0ZXMg
dGhlIHBpZWNlcyBvZiB0aGUgcGFnZSB3aGljaCBjaGFuZ2UgZGVwZW5kaW5nIG9uIHRoZSByZW1h
aW5pbmdcbiogbnVtYmVyIG9mIHRvZG9zLlxuKi9cbkNvbnRyb2xsZXIucHJvdG90eXBlLl91cGRh
dGVDb3VudCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRoYXQgPSB0aGlzO1xuICB0aGF0Lm1vZGVs
LmdldENvdW50KGZ1bmN0aW9uICh0b2Rvcykge1xuICAgIHRoYXQudmlldy5yZW5kZXIoJ3VwZGF0
ZUVsZW1lbnRDb3VudCcsIHRvZG9zLmFjdGl2ZSk7XG4gICAgdGhhdC52aWV3LnJlbmRlcignY2xl
YXJDb21wbGV0ZWRCdXR0b24nLCB7XG4gICAgICBjb21wbGV0ZWQ6IHRvZG9zLmNvbXBsZXRlZCxc
biAgICAgIHZpc2libGU6IHRvZG9zLmNvbXBsZXRlZCA+IDBcbiAgICB9KTtcblxuICAgIHRoYXQu
dmlldy5yZW5kZXIoJ3RvZ2dsZUFsbCcsIHsgY2hlY2tlZDogdG9kb3MuY29tcGxldGVkID09PSB0
b2Rvcy50b3RhbCB9KTtcbiAgICB0aGF0LnZpZXcucmVuZGVyKCdjb250ZW50QmxvY2tWaXNpYmls
aXR5JywgeyB2aXNpYmxlOiB0b2Rvcy50b3RhbCA+IDAgfSk7XG4gIH0pO1xufTtcblxuLyoqXG4q
IFJlLWZpbHRlcnMgdGhlIHRvZG8gaXRlbXMsIGJhc2VkIG9uIHRoZSBhY3RpdmUgcm91dGUuXG4q
IEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IGZvcmNlICBmb3JjZXMgYSByZS1wYWludGluZyBv
ZiB0b2RvIGl0ZW1zLlxuKi9cbkNvbnRyb2xsZXIucHJvdG90eXBlLl9maWx0ZXIgPSBmdW5jdGlv
biAoZm9yY2UpIHtcbiAgdmFyIGFjdGl2ZVJvdXRlID0gdGhpcy5fYWN0aXZlUm91dGUuY2hhckF0
KDApLnRvVXBwZXJDYXNlKCkgKyB0aGlzLl9hY3RpdmVSb3V0ZS5zdWJzdHIoMSk7XG5cbiAgLy8g
VXBkYXRlIHRoZSBlbGVtZW50cyBvbiB0aGUgcGFnZSwgd2hpY2ggY2hhbmdlIHdpdGggZWFjaCBj
b21wbGV0ZWQgdG9kb1xuICB0aGlzLl91cGRhdGVDb3VudCgpO1xuXG4gIC8vIElmIHRoZSBsYXN0
IGFjdGl2ZSByb3V0ZSBpc24ndCBcIkFsbFwiLCBvciB3ZSdyZSBzd2l0Y2hpbmcgcm91dGVzLCB3
ZVxuICAvLyByZS1jcmVhdGUgdGhlIHRvZG8gaXRlbSBlbGVtZW50cywgY2FsbGluZzpcbiAgLy8g
ICB0aGlzLnNob3dbQWxsfEFjdGl2ZXxDb21wbGV0ZWRdKCk7XG4gIGlmIChmb3JjZSB8fCB0aGlz
Ll9sYXN0QWN0aXZlUm91dGUgIT09ICdBbGwnIHx8IHRoaXMuX2xhc3RBY3RpdmVSb3V0ZSAhPT0g
YWN0aXZlUm91dGUpIHtcbiAgICB0aGlzWydzaG93JyArIGFjdGl2ZVJvdXRlXSgpO1xuICB9XG5c
biAgdGhpcy5fbGFzdEFjdGl2ZVJvdXRlID0gYWN0aXZlUm91dGU7XG59O1xuXG4vKipcbiogU2lt
cGx5IHVwZGF0ZXMgdGhlIGZpbHRlciBuYXYncyBzZWxlY3RlZCBzdGF0ZXNcbiovXG5Db250cm9s
bGVyLnByb3RvdHlwZS5fdXBkYXRlRmlsdGVyU3RhdGUgPSBmdW5jdGlvbiAoY3VycmVudFBhZ2Up
IHtcbiAgLy8gU3RvcmUgYSByZWZlcmVuY2UgdG8gdGhlIGFjdGl2ZSByb3V0ZSwgYWxsb3dpbmcg
dXMgdG8gcmUtZmlsdGVyIHRvZG9cbiAgLy8gaXRlbXMgYXMgdGhleSBhcmUgbWFya2VkIGNvbXBs
ZXRlIG9yIGluY29tcGxldGUuXG4gIGN1cnJlbnRQYWdlID0gY3VycmVudFBhZ2Uuc3BsaXQoJz8n
KVswXTtcbiAgdGhpcy5fYWN0aXZlUm91dGUgPSBjdXJyZW50UGFnZTtcblxuICBpZiAoY3VycmVu
dFBhZ2UgPT09ICcnKSB7XG4gICAgdGhpcy5fYWN0aXZlUm91dGUgPSAnQWxsJztcbiAgfVxuXG4g
IHRoaXMuX2ZpbHRlcigpO1xuXG4gIHRoaXMudmlldy5yZW5kZXIoJ3NldEZpbHRlcicsIGN1cnJl
bnRQYWdlKTtcbn07XG5cbi8qKiovIH0sXG4vKiA0ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUs
IGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIF90eXBlb2YgPSB0eXBlb2Yg
U3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJz
eW1ib2xcIiA/IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH0gOiBmdW5jdGlv
biAob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYm
IG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/
IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9O1xuXG4oZnVuY3Rpb24gKHJvb3QpIHtcbiAgdmFy
IGxvY2FsU3RvcmFnZU1lbW9yeSA9IHt9O1xuICB2YXIgY2FjaGUgPSB7fTtcblxuICAvKipcbiAg
ICogbnVtYmVyIG9mIHN0b3JlZCBpdGVtcy5cbiAgICovXG4gIGxvY2FsU3RvcmFnZU1lbW9yeS5s
ZW5ndGggPSAwO1xuXG4gIC8qKlxuICAgKiByZXR1cm5zIGl0ZW0gZm9yIHBhc3NlZCBrZXksIG9y
IG51bGxcbiAgICpcbiAgICogQHBhcmEge1N0cmluZ30ga2V5XG4gICAqICAgICAgIG5hbWUgb2Yg
aXRlbSB0byBiZSByZXR1cm5lZFxuICAgKiBAcmV0dXJucyB7U3RyaW5nfG51bGx9XG4gICAqL1xu
ICBsb2NhbFN0b3JhZ2VNZW1vcnkuZ2V0SXRlbSA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1
cm4gY2FjaGVba2V5XSB8fCBudWxsO1xuICB9O1xuXG4gIC8qKlxuICAgKiBzZXRzIGl0ZW0gZm9y
IGtleSB0byBwYXNzZWQgdmFsdWUsIGFzIFN0cmluZ1xuICAgKlxuICAgKiBAcGFyYSB7U3RyaW5n
fSBrZXlcbiAgICogICAgICAgbmFtZSBvZiBpdGVtIHRvIGJlIHNldFxuICAgKiBAcGFyYSB7U3Ry
aW5nfSB2YWx1ZVxuICAgKiAgICAgICB2YWx1ZSwgd2lsbCBhbHdheXMgYmUgdHVybmVkIGludG8g
YSBTdHJpbmdcbiAgICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAgICovXG4gIGxvY2FsU3RvcmFn
ZU1lbW9yeS5zZXRJdGVtID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICBpZiAodHlwZW9m
IHZhbHVlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgbG9jYWxTdG9yYWdlTWVtb3J5LnJlbW92
ZUl0ZW0oa2V5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFjYWNoZS5oYXNPd25Qcm9wZXJ0
eShrZXkpKSB7XG4gICAgICAgIGxvY2FsU3RvcmFnZU1lbW9yeS5sZW5ndGgrKztcbiAgICAgIH1c
blxuICAgICAgY2FjaGVba2V5XSA9ICcnICsgdmFsdWU7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxu
ICAgKiByZW1vdmVzIGl0ZW0gZm9yIHBhc3NlZCBrZXlcbiAgICpcbiAgICogQHBhcmEge1N0cmlu
Z30ga2V5XG4gICAqICAgICAgIG5hbWUgb2YgaXRlbSB0byBiZSByZW1vdmVkXG4gICAqIEByZXR1
cm5zIHt1bmRlZmluZWR9XG4gICAqL1xuICBsb2NhbFN0b3JhZ2VNZW1vcnkucmVtb3ZlSXRlbSA9
IGZ1bmN0aW9uIChrZXkpIHtcbiAgICBpZiAoY2FjaGUuaGFzT3duUHJvcGVydHkoa2V5KSkge1xu
ICAgICAgZGVsZXRlIGNhY2hlW2tleV07XG4gICAgICBsb2NhbFN0b3JhZ2VNZW1vcnkubGVuZ3Ro
LS07XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiByZXR1cm5zIG5hbWUgb2Yga2V5IGF0IHBh
c3NlZCBpbmRleFxuICAgKlxuICAgKiBAcGFyYSB7TnVtYmVyfSBpbmRleFxuICAgKiAgICAgICBQ
b3NpdGlvbiBmb3Iga2V5IHRvIGJlIHJldHVybmVkIChzdGFydHMgYXQgMClcbiAgICogQHJldHVy
bnMge1N0cmluZ3xudWxsfVxuICAgKi9cbiAgbG9jYWxTdG9yYWdlTWVtb3J5LmtleSA9IGZ1bmN0
aW9uIChpbmRleCkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhjYWNoZSlbaW5kZXhdIHx8IG51
bGw7XG4gIH07XG5cbiAgLyoqXG4gICAqIHJlbW92ZXMgYWxsIHN0b3JlZCBpdGVtcyBhbmQgc2V0
cyBsZW5ndGggdG8gMFxuICAgKlxuICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICAgKi9cbiAg
bG9jYWxTdG9yYWdlTWVtb3J5LmNsZWFyID0gZnVuY3Rpb24gKCkge1xuICAgIGNhY2hlID0ge307
XG4gICAgbG9jYWxTdG9yYWdlTWVtb3J5Lmxlbmd0aCA9IDA7XG4gIH07XG5cbiAgaWYgKCggZmFs
c2UgPyAndW5kZWZpbmVkJyA6IF90eXBlb2YoZXhwb3J0cykpID09PSAnb2JqZWN0Jykge1xuICAg
IG1vZHVsZS5leHBvcnRzID0gbG9jYWxTdG9yYWdlTWVtb3J5O1xuICB9IGVsc2Uge1xuICAgIHJv
b3QubG9jYWxTdG9yYWdlTWVtb3J5ID0gbG9jYWxTdG9yYWdlTWVtb3J5O1xuICB9XG59KSh0aGlz
KTtcblxuLyoqKi8gfSxcbi8qIDUgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywg
X193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbnZhciBfdHlwZW9mID0g
dHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3Ig
PT09IFwic3ltYm9sXCIgPyBmdW5jdGlvbiAob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9IDog
ZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rp
b25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90
b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTtcblxuLyogaGFybW9ueSBkZWZhdWx0
IGV4cG9ydCAqLyBleHBvcnRzW1wiYVwiXSA9IE1vZGVsO1xuXG4vKipcbiogQ3JlYXRlcyBhIG5l
dyBNb2RlbCBpbnN0YW5jZSBhbmQgaG9va3MgdXAgdGhlIHN0b3JhZ2UuXG4qXG4qIEBjb25zdHJ1
Y3RvclxuKiBAcGFyYW0ge29iamVjdH0gc3RvcmFnZSBBIHJlZmVyZW5jZSB0byB0aGUgY2xpZW50
IHNpZGUgc3RvcmFnZSBjbGFzc1xuKi9cbmZ1bmN0aW9uIE1vZGVsKHN0b3JhZ2UpIHtcbiAgdGhp
cy5zdG9yYWdlID0gc3RvcmFnZTtcbn1cblxuLyoqXG4qIENyZWF0ZXMgYSBuZXcgdG9kbyBtb2Rl
bFxuKlxuKiBAcGFyYW0ge3N0cmluZ30gW3RpdGxlXSBUaGUgdGl0bGUgb2YgdGhlIHRhc2tcbiog
QHBhcmFtIHtmdW5jdGlvbn0gW2NhbGxiYWNrXSBUaGUgY2FsbGJhY2sgdG8gZmlyZSBhZnRlciB0
aGUgbW9kZWwgaXMgY3JlYXRlZFxuKi9cbk1vZGVsLnByb3RvdHlwZS5jcmVhdGUgPSBmdW5jdGlv
biAodGl0bGUsIGNhbGxiYWNrKSB7XG4gIHRpdGxlID0gdGl0bGUgfHwgJyc7XG4gIGNhbGxiYWNr
ID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG5cbiAgdmFyIG5ld0l0ZW0gPSB7XG4gICAg
dGl0bGU6IHRpdGxlLnRyaW0oKSxcbiAgICBjb21wbGV0ZWQ6IGZhbHNlXG4gIH07XG5cbiAgdGhp
cy5zdG9yYWdlLnNhdmUobmV3SXRlbSwgY2FsbGJhY2spO1xufTtcblxuLyoqXG4gKiBGaW5kcyBh
bmQgcmV0dXJucyBhIG1vZGVsIGluIHN0b3JhZ2UuIElmIG5vIHF1ZXJ5IGlzIGdpdmVuIGl0J2xs
IHNpbXBseVxuICogcmV0dXJuIGV2ZXJ5dGhpbmcuIElmIHlvdSBwYXNzIGluIGEgc3RyaW5nIG9y
IG51bWJlciBpdCdsbCBsb29rIHRoYXQgdXAgYXNcbiAqIHRoZSBJRCBvZiB0aGUgbW9kZWwgdG8g
ZmluZC4gTGFzdGx5LCB5b3UgY2FuIHBhc3MgaXQgYW4gb2JqZWN0IHRvIG1hdGNoIGFnYWluc3Qu
XG4gKlxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfG9iamVjdH0gW3F1ZXJ5XSBBIHF1ZXJ5IHRv
IG1hdGNoIG1vZGVscyBhZ2FpbnN0XG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbY2FsbGJhY2tdIFRo
ZSBjYWxsYmFjayB0byBmaXJlIGFmdGVyIHRoZSBtb2RlbCBpcyBmb3VuZFxuICpcbiAqIEBleGFt
cGxlXG4gKiBtb2RlbC5yZWFkKDEsIGZ1bmMpOyAvLyBXaWxsIGZpbmQgdGhlIG1vZGVsIHdpdGgg
YW4gSUQgb2YgMVxuICogbW9kZWwucmVhZCgnMScpOyAvLyBTYW1lIGFzIGFib3ZlXG4gKiAvL0Jl
bG93IHdpbGwgZmluZCBhIG1vZGVsIHdpdGggZm9vIGVxdWFsbGluZyBiYXIgYW5kIGhlbGxvIGVx
dWFsbGluZyB3b3JsZC5cbiAqIG1vZGVsLnJlYWQoeyBmb286ICdiYXInLCBoZWxsbzogJ3dvcmxk
JyB9KTtcbiAqL1xuTW9kZWwucHJvdG90eXBlLnJlYWQgPSBmdW5jdGlvbiAocXVlcnksIGNhbGxi
YWNrKSB7XG4gIHZhciBxdWVyeVR5cGUgPSB0eXBlb2YgcXVlcnkgPT09ICd1bmRlZmluZWQnID8g
J3VuZGVmaW5lZCcgOiBfdHlwZW9mKHF1ZXJ5KTtcbiAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBm
dW5jdGlvbiAoKSB7fTtcblxuICBpZiAocXVlcnlUeXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAg
Y2FsbGJhY2sgPSBxdWVyeTtcbiAgICByZXR1cm4gdGhpcy5zdG9yYWdlLmZpbmRBbGwoY2FsbGJh
Y2spO1xuICB9IGVsc2UgaWYgKHF1ZXJ5VHlwZSA9PT0gJ3N0cmluZycgfHwgcXVlcnlUeXBlID09
PSAnbnVtYmVyJykge1xuICAgIHF1ZXJ5ID0gcGFyc2VJbnQocXVlcnksIDEwKTtcbiAgICB0aGlz
LnN0b3JhZ2UuZmluZCh7IGlkOiBxdWVyeSB9LCBjYWxsYmFjayk7XG4gIH0gZWxzZSB7XG4gICAg
dGhpcy5zdG9yYWdlLmZpbmQocXVlcnksIGNhbGxiYWNrKTtcbiAgfVxuICByZXR1cm4gdW5kZWZp
bmVkO1xufTtcblxuLyoqXG4qIFVwZGF0ZXMgYSBtb2RlbCBieSBnaXZpbmcgaXQgYW4gSUQsIGRh
dGEgdG8gdXBkYXRlLCBhbmQgYSBjYWxsYmFjayB0byBmaXJlIHdoZW5cbiogdGhlIHVwZGF0ZSBp
cyBjb21wbGV0ZS5cbipcbiogQHBhcmFtIHtudW1iZXJ9IGlkIFRoZSBpZCBvZiB0aGUgbW9kZWwg
dG8gdXBkYXRlXG4qIEBwYXJhbSB7b2JqZWN0fSBkYXRhIFRoZSBwcm9wZXJ0aWVzIHRvIHVwZGF0
ZSBhbmQgdGhlaXIgbmV3IHZhbHVlXG4qIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrIFRoZSBj
YWxsYmFjayB0byBmaXJlIHdoZW4gdGhlIHVwZGF0ZSBpcyBjb21wbGV0ZS5cbiovXG5Nb2RlbC5w
cm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKGlkLCBkYXRhLCBjYWxsYmFjaykge1xuICB0aGlz
LnN0b3JhZ2Uuc2F2ZShkYXRhLCBjYWxsYmFjaywgaWQpO1xufTtcblxuLyoqXG4qIFJlbW92ZXMg
YSBtb2RlbCBmcm9tIHN0b3JhZ2VcbipcbiogQHBhcmFtIHtudW1iZXJ9IGlkIFRoZSBJRCBvZiB0
aGUgbW9kZWwgdG8gcmVtb3ZlXG4qIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrIFRoZSBjYWxs
YmFjayB0byBmaXJlIHdoZW4gdGhlIHJlbW92YWwgaXMgY29tcGxldGUuXG4qL1xuTW9kZWwucHJv
dG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uIChpZCwgY2FsbGJhY2spIHtcbiAgdGhpcy5zdG9yYWdl
LnJlbW92ZShpZCwgY2FsbGJhY2spO1xufTtcblxuLyoqXG4qIFdBUk5JTkc6IFdpbGwgcmVtb3Zl
IEFMTCBkYXRhIGZyb20gc3RvcmFnZS5cbipcbiogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sg
VGhlIGNhbGxiYWNrIHRvIGZpcmUgd2hlbiB0aGUgc3RvcmFnZSBpcyB3aXBlZC5cbiovXG5Nb2Rl
bC5wcm90b3R5cGUucmVtb3ZlQWxsID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gIHRoaXMuc3Rv
cmFnZS5kcm9wKGNhbGxiYWNrKTtcbn07XG5cbi8qKlxuKiBSZXR1cm5zIGEgY291bnQgb2YgYWxs
IHRvZG9zXG4qL1xuTW9kZWwucHJvdG90eXBlLmdldENvdW50ID0gZnVuY3Rpb24gKGNhbGxiYWNr
KSB7XG4gIHZhciB0b2RvcyA9IHtcbiAgICBhY3RpdmU6IDAsXG4gICAgY29tcGxldGVkOiAwLFxu
ICAgIHRvdGFsOiAwXG4gIH07XG5cbiAgdGhpcy5zdG9yYWdlLmZpbmRBbGwoZnVuY3Rpb24gKGRh
dGEpIHtcbiAgICBkYXRhLmZvckVhY2goZnVuY3Rpb24gKHRvZG8pIHtcbiAgICAgIGlmICh0b2Rv
LmNvbXBsZXRlZCkge1xuICAgICAgICB0b2Rvcy5jb21wbGV0ZWQrKztcbiAgICAgIH0gZWxzZSB7
XG4gICAgICAgIHRvZG9zLmFjdGl2ZSsrO1xuICAgICAgfVxuXG4gICAgICB0b2Rvcy50b3RhbCsr
O1xuICAgIH0pO1xuICAgIGNhbGxiYWNrKHRvZG9zKTtcbiAgfSk7XG59O1xuXG4vKioqLyB9LFxu
LyogNiAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWly
ZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faGVscGVyc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygw
KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
X21lbW9yeV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICov
IHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX21lbW9yeV9fX2RlZmF1bHQgPSBfX3dl
YnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19tZW1vcnlfXyk7
XG5cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBleHBvcnRzW1wiYVwiXSA9IFN0b3Jl
O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgY2xpZW50IHNpZGUgc3RvcmFnZSBvYmplY3QgYW5k
IHdpbGwgY3JlYXRlIGFuIGVtcHR5XG4gKiBjb2xsZWN0aW9uIGlmIG5vIGNvbGxlY3Rpb24gYWxy
ZWFkeSBleGlzdHMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgVGhlIG5hbWUgb2Ygb3Vy
IERCIHdlIHdhbnQgdG8gdXNlXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayBPdXIgZmFr
ZSBEQiB1c2VzIGNhbGxiYWNrcyBiZWNhdXNlIGluXG4gKiByZWFsIGxpZmUgeW91IHByb2JhYmx5
IHdvdWxkIGJlIG1ha2luZyBBSkFYIGNhbGxzXG4gKi9cbmZ1bmN0aW9uIFN0b3JlKG5hbWUsIGNh
bGxiYWNrKSB7XG4gIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG5cbiAg
dGhpcy5fZGJOYW1lID0gbmFtZTtcblxuICBpZiAoIV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MV9fbWVtb3J5X19bbmFtZV0pIHtcbiAgICB2YXIgZGF0YSA9IHtcbiAgICAgIHRvZG9zOiBbXVxu
ICAgIH07XG5cbiAgICBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX21lbW9yeV9fW25hbWVd
ID0gSlNPTi5zdHJpbmdpZnkoZGF0YSk7XG4gIH1cblxuICBjYWxsYmFjay5jYWxsKHRoaXMsIEpT
T04ucGFyc2UoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19tZW1vcnlfX1tuYW1lXSkpO1xu
ICB0aGlzLnN1YnNjcmliZXJzID0gW107XG59XG5cblN0b3JlLnByb3RvdHlwZS5zdWJzY3JpYmUg
PSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gIHRoaXMu
c3Vic2NyaWJlcnMucHVzaChzdWJzY3JpYmVyKTtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAg
ICByZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXy5pKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVf
MF9faGVscGVyc19fW1wiZlwiIC8qIHJlbW92ZSAqL10pKF90aGlzLnN1YnNjcmliZXJzLCBzdWJz
Y3JpYmVyKTtcbiAgfTtcbn07XG5cblN0b3JlLnByb3RvdHlwZS5fbm90aWZ5ID0gZnVuY3Rpb24g
KCkge1xuICB0aGlzLnN1YnNjcmliZXJzLmZvckVhY2goZnVuY3Rpb24gKHMpIHtcbiAgICByZXR1
cm4gcygpO1xuICB9KTtcbn07XG5cbi8qKlxuKiBGaW5kcyBpdGVtcyBiYXNlZCBvbiBhIHF1ZXJ5
IGdpdmVuIGFzIGEgSlMgb2JqZWN0XG4qXG4qIEBwYXJhbSB7b2JqZWN0fSBxdWVyeSBUaGUgcXVl
cnkgdG8gbWF0Y2ggYWdhaW5zdCAoaS5lLiB7Zm9vOiAnYmFyJ30pXG4qIEBwYXJhbSB7ZnVuY3Rp
b259IGNhbGxiYWNrICAgVGhlIGNhbGxiYWNrIHRvIGZpcmUgd2hlbiB0aGUgcXVlcnkgaGFzXG4q
IGNvbXBsZXRlZCBydW5uaW5nXG4qXG4qIEBleGFtcGxlXG4qIGRiLmZpbmQoe2ZvbzogJ2Jhcics
IGhlbGxvOiAnd29ybGQnfSwgZnVuY3Rpb24gKGRhdGEpIHtcbiogICAvLyBkYXRhIHdpbGwgcmV0
dXJuIGFueSBpdGVtcyB0aGF0IGhhdmUgZm9vOiBiYXIgYW5kXG4qICAgLy8gaGVsbG86IHdvcmxk
IGluIHRoZWlyIHByb3BlcnRpZXNcbiogfSk7XG4qL1xuU3RvcmUucHJvdG90eXBlLmZpbmQgPSBm
dW5jdGlvbiAocXVlcnksIGNhbGxiYWNrKSB7XG4gIGlmICghY2FsbGJhY2spIHtcbiAgICByZXR1
cm47XG4gIH1cblxuICB2YXIgdG9kb3MgPSBKU09OLnBhcnNlKF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMV9fbWVtb3J5X19bdGhpcy5fZGJOYW1lXSkudG9kb3M7XG5cbiAgY2FsbGJhY2suY2Fs
bCh0aGlzLCB0b2Rvcy5maWx0ZXIoZnVuY3Rpb24gKHRvZG8pIHtcbiAgICBmb3IgKHZhciBxIGlu
IHF1ZXJ5KSB7XG4gICAgICBpZiAocXVlcnlbcV0gIT09IHRvZG9bcV0pIHtcbiAgICAgICAgcmV0
dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSkpO1xufTtc
blxuLyoqXG4qIFdpbGwgcmV0cmlldmUgYWxsIGRhdGEgZnJvbSB0aGUgY29sbGVjdGlvblxuKlxu
KiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gZmlyZSB1cG9uIHJl
dHJpZXZpbmcgZGF0YVxuKi9cblN0b3JlLnByb3RvdHlwZS5maW5kQWxsID0gZnVuY3Rpb24gKGNh
bGxiYWNrKSB7XG4gIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gIGNh
bGxiYWNrLmNhbGwodGhpcywgSlNPTi5wYXJzZShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFf
X21lbW9yeV9fW3RoaXMuX2RiTmFtZV0pLnRvZG9zKTtcbn07XG5cbi8qKlxuKiBXaWxsIHNhdmUg
dGhlIGdpdmVuIGRhdGEgdG8gdGhlIERCLiBJZiBubyBpdGVtIGV4aXN0cyBpdCB3aWxsIGNyZWF0
ZSBhIG5ld1xuKiBpdGVtLCBvdGhlcndpc2UgaXQnbGwgc2ltcGx5IHVwZGF0ZSBhbiBleGlzdGlu
ZyBpdGVtJ3MgcHJvcGVydGllc1xuKlxuKiBAcGFyYW0ge29iamVjdH0gdXBkYXRlRGF0YSBUaGUg
ZGF0YSB0byBzYXZlIGJhY2sgaW50byB0aGUgREJcbiogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJh
Y2sgVGhlIGNhbGxiYWNrIHRvIGZpcmUgYWZ0ZXIgc2F2aW5nXG4qIEBwYXJhbSB7bnVtYmVyfSBp
ZCBBbiBvcHRpb25hbCBwYXJhbSB0byBlbnRlciBhbiBJRCBvZiBhbiBpdGVtIHRvIHVwZGF0ZVxu
Ki9cblN0b3JlLnByb3RvdHlwZS5zYXZlID0gZnVuY3Rpb24gKHVwZGF0ZURhdGEsIGNhbGxiYWNr
LCBpZCkge1xuICB2YXIgZGF0YSA9IEpTT04ucGFyc2UoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xX19tZW1vcnlfX1t0aGlzLl9kYk5hbWVdKTtcbiAgdmFyIHRvZG9zID0gZGF0YS50b2Rvcztc
blxuICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHt9O1xuXG4gIC8vIElmIGFu
IElEIHdhcyBhY3R1YWxseSBnaXZlbiwgZmluZCB0aGUgaXRlbSBhbmQgdXBkYXRlIGVhY2ggcHJv
cGVydHlcbiAgaWYgKGlkKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2Rvcy5sZW5ndGg7
IGkrKykge1xuICAgICAgaWYgKHRvZG9zW2ldLmlkID09PSBpZCkge1xuICAgICAgICBmb3IgKHZh
ciBrZXkgaW4gdXBkYXRlRGF0YSkge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUg
Z3VhcmQtZm9yLWluXG4gICAgICAgICAgdG9kb3NbaV1ba2V5XSA9IHVwZGF0ZURhdGFba2V5XTtc
biAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX21lbW9yeV9fW3RoaXMuX2RiTmFtZV0gPSBKU09OLnN0cmlu
Z2lmeShkYXRhKTtcbiAgICBjYWxsYmFjay5jYWxsKHRoaXMsIEpTT04ucGFyc2UoX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8xX19tZW1vcnlfX1t0aGlzLl9kYk5hbWVdKS50b2Rvcyk7XG4gIH0g
ZWxzZSB7XG4gICAgLy8gR2VuZXJhdGUgYW4gSURcbiAgICB1cGRhdGVEYXRhLmlkID0gbmV3IERh
dGUoKS5nZXRUaW1lKCk7XG5cbiAgICB0b2Rvcy5wdXNoKHVwZGF0ZURhdGEpO1xuICAgIF9fV0VC
UEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fbWVtb3J5X19bdGhpcy5fZGJOYW1lXSA9IEpTT04uc3Ry
aW5naWZ5KGRhdGEpO1xuICAgIGNhbGxiYWNrLmNhbGwodGhpcywgW3VwZGF0ZURhdGFdKTtcbiAg
fVxuICB0aGlzLl9ub3RpZnkoKTtcbn07XG5cbi8qKlxuKiBXaWxsIHJlbW92ZSBhbiBpdGVtIGZy
b20gdGhlIFN0b3JlIGJhc2VkIG9uIGl0cyBJRFxuKlxuKiBAcGFyYW0ge251bWJlcn0gaWQgVGhl
IElEIG9mIHRoZSBpdGVtIHlvdSB3YW50IHRvIHJlbW92ZVxuKiBAcGFyYW0ge2Z1bmN0aW9ufSBj
YWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gZmlyZSBhZnRlciBzYXZpbmdcbiovXG5TdG9yZS5wcm90
b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKGlkLCBjYWxsYmFjaykge1xuICB2YXIgZGF0YSA9IEpT
T04ucGFyc2UoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19tZW1vcnlfX1t0aGlzLl9kYk5h
bWVdKTtcbiAgdmFyIHRvZG9zID0gZGF0YS50b2RvcztcblxuICBmb3IgKHZhciBpID0gMDsgaSA8
IHRvZG9zLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHRvZG9zW2ldLmlkID09PSBpZCkge1xuICAg
ICAgdG9kb3Muc3BsaWNlKGksIDEpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgX19X
RUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19tZW1vcnlfX1t0aGlzLl9kYk5hbWVdID0gSlNPTi5z
dHJpbmdpZnkoZGF0YSk7XG4gIGNhbGxiYWNrLmNhbGwodGhpcywgSlNPTi5wYXJzZShfX1dFQlBB
Q0tfSU1QT1JURURfTU9EVUxFXzFfX21lbW9yeV9fW3RoaXMuX2RiTmFtZV0pLnRvZG9zKTtcbiAg
dGhpcy5fbm90aWZ5KCk7XG59O1xuXG4vKipcbiogV2lsbCBkcm9wIGFsbCBzdG9yYWdlIGFuZCBz
dGFydCBmcmVzaFxuKlxuKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgY2FsbGJhY2sg
dG8gZmlyZSBhZnRlciBkcm9wcGluZyB0aGUgZGF0YVxuKi9cblN0b3JlLnByb3RvdHlwZS5kcm9w
ID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9f
bWVtb3J5X19bdGhpcy5fZGJOYW1lXSA9IEpTT04uc3RyaW5naWZ5KHsgdG9kb3M6IFtdIH0pO1xu
ICBjYWxsYmFjay5jYWxsKHRoaXMsIEpTT04ucGFyc2UoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xX19tZW1vcnlfX1t0aGlzLl9kYk5hbWVdKS50b2Rvcyk7XG4gIHRoaXMuX25vdGlmeSgpO1xu
fTtcblxuLyoqKi8gfSxcbi8qIDcgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywg
X193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIGhhcm1vbnkgZGVm
YXVsdCBleHBvcnQgKi8gZXhwb3J0c1tcImFcIl0gPSBUZW1wbGF0ZTtcblxudmFyIGh0bWxFc2Nh
cGVzID0ge1xuICAnJic6ICcmYW1wOycsXG4gICc8JzogJyZsdDsnLFxuICAnPic6ICcmZ3Q7Jyxc
biAgJ1wiJzogJyZxdW90OycsXG4gICdcXCcnOiAnJiN4Mjc7JyxcbiAgJ2AnOiAnJiN4NjA7J1xu
fTtcblxudmFyIGVzY2FwZUh0bWxDaGFyID0gZnVuY3Rpb24gZXNjYXBlSHRtbENoYXIoY2hyKSB7
XG4gIHJldHVybiBodG1sRXNjYXBlc1tjaHJdO1xufTtcblxudmFyIHJlVW5lc2NhcGVkSHRtbCA9
IC9bJjw+XCInYF0vZztcbnZhciByZUhhc1VuZXNjYXBlZEh0bWwgPSBuZXcgUmVnRXhwKHJlVW5l
c2NhcGVkSHRtbC5zb3VyY2UpO1xuXG52YXIgZXNjYXBlID0gZnVuY3Rpb24gZXNjYXBlKHN0cmlu
Zykge1xuICBpZiAoc3RyaW5nICYmIHJlSGFzVW5lc2NhcGVkSHRtbC50ZXN0KHN0cmluZykpIHtc
biAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UocmVVbmVzY2FwZWRIdG1sLCBlc2NhcGVIdG1sQ2hh
cik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxufTtcblxuLyoqXG4qIFNl
dHMgdXAgZGVmYXVsdHMgZm9yIGFsbCB0aGUgVGVtcGxhdGUgbWV0aG9kcyBzdWNoIGFzIGEgZGVm
YXVsdCB0ZW1wbGF0ZVxuKlxuKiBAY29uc3RydWN0b3JcbiovXG5mdW5jdGlvbiBUZW1wbGF0ZSgp
IHtcbiAgdGhpcy5kZWZhdWx0VGVtcGxhdGUgPSAnXFxuICAgIDxsaSBkYXRhLWlkPVwie3tpZH19
XCIgY2xhc3M9XCJ7e2NvbXBsZXRlZH19XCI+XFxuICAgICAgPGRpdiBjbGFzcz1cInZpZXdcIj5c
XG4gICAgICAgIDxpbnB1dCBjbGFzcz1cInRvZ2dsZVwiIHR5cGU9XCJjaGVja2JveFwiIHt7Y2hl
Y2tlZH19IC8+XFxuICAgICAgICA8bGFiZWw+e3t0aXRsZX19PC9sYWJlbD5cXG4gICAgICAgIDxi
dXR0b24gY2xhc3M9XCJkZXN0cm95XCI+PC9idXR0b24+XFxuICAgICAgPC9kaXY+XFxuICAgIDwv
bGk+XFxuICAnO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYW4gPGxpPiBIVE1MIHN0cmluZyBhbmQg
cmV0dXJucyBpdCBmb3IgcGxhY2VtZW50IGluIHlvdXIgYXBwLlxuICpcbiAqIE5PVEU6IEluIHJl
YWwgbGlmZSB5b3Ugc2hvdWxkIGJlIHVzaW5nIGEgdGVtcGxhdGluZyBlbmdpbmUgc3VjaCBhcyBN
dXN0YWNoZVxuICogb3IgSGFuZGxlYmFycywgaG93ZXZlciwgdGhpcyBpcyBhIHZhbmlsbGEgSlMg
ZXhhbXBsZS5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gZGF0YSBUaGUgb2JqZWN0IGNvbnRhaW5p
bmcga2V5cyB5b3Ugd2FudCB0byBmaW5kIGluIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAg
dGVtcGxhdGUgdG8gcmVwbGFjZS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IEhUTUwgU3RyaW5nIG9m
IGFuIDxsaT4gZWxlbWVudFxuICpcbiAqIEBleGFtcGxlXG4gKiB2aWV3LnNob3coe1xuICogIGlk
OiAxLFxuICogIHRpdGxlOiBcIkhlbGxvIFdvcmxkXCIsXG4gKiAgY29tcGxldGVkOiAwLFxuICog
fSk7XG4gKi9cblRlbXBsYXRlLnByb3RvdHlwZS5zaG93ID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAg
dmFyIGksIGw7XG4gIHZhciB2aWV3ID0gJyc7XG5cbiAgZm9yIChpID0gMCwgbCA9IGRhdGEubGVu
Z3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgdmFyIHRlbXBsYXRlID0gdGhpcy5kZWZhdWx0VGVtcGxh
dGU7XG4gICAgdmFyIGNvbXBsZXRlZCA9ICcnO1xuICAgIHZhciBjaGVja2VkID0gJyc7XG5cbiAg
ICBpZiAoZGF0YVtpXS5jb21wbGV0ZWQpIHtcbiAgICAgIGNvbXBsZXRlZCA9ICdjb21wbGV0ZWQn
O1xuICAgICAgY2hlY2tlZCA9ICdjaGVja2VkJztcbiAgICB9XG5cbiAgICB0ZW1wbGF0ZSA9IHRl
bXBsYXRlLnJlcGxhY2UoJ3t7aWR9fScsIGRhdGFbaV0uaWQpO1xuICAgIHRlbXBsYXRlID0gdGVt
cGxhdGUucmVwbGFjZSgne3t0aXRsZX19JywgZXNjYXBlKGRhdGFbaV0udGl0bGUpKTtcbiAgICB0
ZW1wbGF0ZSA9IHRlbXBsYXRlLnJlcGxhY2UoJ3t7Y29tcGxldGVkfX0nLCBjb21wbGV0ZWQpO1xu
ICAgIHRlbXBsYXRlID0gdGVtcGxhdGUucmVwbGFjZSgne3tjaGVja2VkfX0nLCBjaGVja2VkKTtc
blxuICAgIHZpZXcgPSB2aWV3ICsgdGVtcGxhdGU7XG4gIH1cblxuICByZXR1cm4gdmlldztcbn07
XG5cbi8qKlxuICogRGlzcGxheXMgYSBjb3VudGVyIG9mIGhvdyBtYW55IHRvIGRvcyBhcmUgbGVm
dCB0byBjb21wbGV0ZVxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBhY3RpdmVUb2RvcyBUaGUgbnVt
YmVyIG9mIGFjdGl2ZSB0b2Rvcy5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFN0cmluZyBjb250YWlu
aW5nIHRoZSBjb3VudFxuICovXG5UZW1wbGF0ZS5wcm90b3R5cGUuaXRlbUNvdW50ZXIgPSBmdW5j
dGlvbiAoYWN0aXZlVG9kb3MpIHtcbiAgdmFyIHBsdXJhbCA9IGFjdGl2ZVRvZG9zID09PSAxID8g
JycgOiAncyc7XG5cbiAgcmV0dXJuICc8c3Ryb25nPicgKyBhY3RpdmVUb2RvcyArICc8L3N0cm9u
Zz4gaXRlbScgKyBwbHVyYWwgKyAnIGxlZnQnO1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIHRoZSB0
ZXh0IHdpdGhpbiB0aGUgXCJDbGVhciBjb21wbGV0ZWRcIiBidXR0b25cbiAqXG4gKiBAcGFyYW0g
IHtbdHlwZV19IGNvbXBsZXRlZFRvZG9zIFRoZSBudW1iZXIgb2YgY29tcGxldGVkIHRvZG9zLlxu
ICogQHJldHVybnMge3N0cmluZ30gU3RyaW5nIGNvbnRhaW5pbmcgdGhlIGNvdW50XG4gKi9cblRl
bXBsYXRlLnByb3RvdHlwZS5jbGVhckNvbXBsZXRlZEJ1dHRvbiA9IGZ1bmN0aW9uIChjb21wbGV0
ZWRUb2Rvcykge1xuICBpZiAoY29tcGxldGVkVG9kb3MgPiAwKSB7XG4gICAgcmV0dXJuICdDbGVh
ciBjb21wbGV0ZWQnO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAnJztcbiAgfVxufTtcblxuLyoq
Ki8gfSxcbi8qIDggKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNr
X3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZh
ciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3ZpZXdfXyA9IF9fd2VicGFja19yZXF1aXJl
X18oOSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVM
RV8xX19jb250cm9sbGVyX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xuLyogaGFybW9ueSBp
bXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fbW9kZWxfXyA9IF9fd2Vi
cGFja19yZXF1aXJlX18oNSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8zX19zdG9yZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KTtcbi8qIGhh
cm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX3RlbXBsYXRl
X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9faGVscGVyc19fID0gX193ZWJwYWNrX3JlcXVpcmVf
XygwKTtcblxuLyogaGFybW9ueSBleHBvcnQgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKGV4cG9y
dHMsIFwiYVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHVwZGF0ZVRvZG87IH0pOy8qIHVudXNlZCBo
YXJtb255IGV4cG9ydCBnZXRUb2RvICovLyogdW51c2VkIGhhcm1vbnkgZXhwb3J0IHN1YnNjcmli
ZSAqL1xuXG5cblxuXG5cblxuXG5cbnZhciB0b2RvID0gdm9pZCAwO1xudmFyIHN1YnNjcmliZXJz
ID0gW107XG5cbi8qKlxuICogU2V0cyB1cCBhIGJyYW5kIG5ldyBUb2RvIGxpc3QuXG4gKlxuICog
QHBhcmFtIHtzdHJpbmd9IG5hbWUgVGhlIG5hbWUgb2YgeW91ciBuZXcgdG8gZG8gbGlzdC5cbiAq
L1xuZnVuY3Rpb24gVG9kbyhuYW1lKSB7XG4gIHRoaXMuc3RvcmFnZSA9IG5ldyBfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzNfX3N0b3JlX19bXCJhXCIgLyogZGVmYXVsdCAqL10obmFtZSk7XG4g
IHRoaXMubW9kZWwgPSBuZXcgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19tb2RlbF9fW1wi
YVwiIC8qIGRlZmF1bHQgKi9dKHRoaXMuc3RvcmFnZSk7XG4gIHRoaXMudGVtcGxhdGUgPSBuZXcg
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X190ZW1wbGF0ZV9fW1wiYVwiIC8qIGRlZmF1bHQg
Ki9dKCk7XG4gIHRoaXMudmlldyA9IG5ldyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3Zp
ZXdfX1tcImFcIiAvKiBkZWZhdWx0ICovXSh0aGlzLnRlbXBsYXRlKTtcbiAgdGhpcy5jb250cm9s
bGVyID0gbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fY29udHJvbGxlcl9fW1wiYVwi
IC8qIGRlZmF1bHQgKi9dKHRoaXMubW9kZWwsIHRoaXMudmlldyk7XG59XG5cbmZ1bmN0aW9uIHVw
ZGF0ZVRvZG8oKSB7XG4gIHRvZG8gPSBuZXcgVG9kbygndG9kb3MtdmFuaWxsYWpzJyk7XG4gIHRv
ZG8uY29udHJvbGxlci5zZXRWaWV3KGRvY3VtZW50LmxvY2F0aW9uLmhhc2gpO1xuICBzdWJzY3Jp
YmVycy5mb3JFYWNoKGZ1bmN0aW9uIChzKSB7XG4gICAgcmV0dXJuIHMoKTtcbiAgfSk7XG59XG5c
bmZ1bmN0aW9uIGdldFRvZG8oKSB7XG4gIHJldHVybiB0b2RvO1xufVxuXG5mdW5jdGlvbiBzdWJz
Y3JpYmUoY2IpIHtcbiAgc3Vic2NyaWJlcnMucHVzaChjYik7XG4gIHJldHVybiBmdW5jdGlvbiB1
bnN1YnNjcmliZSgpIHtcbiAgICBfX3dlYnBhY2tfcmVxdWlyZV9fLmkoX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV81X19oZWxwZXJzX19bXCJmXCIgLyogcmVtb3ZlICovXSkoc3Vic2NyaWJlcnMs
IGNiKTtcbiAgfTtcbn1cblxuLyoqKi8gfSxcbi8qIDkgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVs
ZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8q
IGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2hlbHBl
cnNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG52YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rp
b24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2
YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3Bz
W2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFs
c2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNj
cmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5
KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9u
IChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMp
IGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYg
KHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7
IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpO1xuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2so
aW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3Ry
dWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEg
ZnVuY3Rpb25cIik7IH0gfVxuXG4vKiBlc2xpbnQgbm8taW52YWxpZC10aGlzOiAwLCBjb21wbGV4
aXR5OlsyLCA5XSAqL1xuXG5cbi8qKlxuICogVmlldyB0aGF0IGFic3RyYWN0cyBhd2F5IHRoZSBi
cm93c2VyJ3MgRE9NIGNvbXBsZXRlbHkuXG4gKiBJdCBoYXMgdHdvIHNpbXBsZSBlbnRyeSBwb2lu
dHM6XG4gKlxuICogICAtIGJpbmQoZXZlbnROYW1lLCBoYW5kbGVyKVxuICogICAgIFRha2VzIGEg
dG9kbyBhcHBsaWNhdGlvbiBldmVudCBhbmQgcmVnaXN0ZXJzIHRoZSBoYW5kbGVyXG4gKiAgIC0g
cmVuZGVyKGNvbW1hbmQsIHBhcmFtZXRlck9iamVjdClcbiAqICAgICBSZW5kZXJzIHRoZSBnaXZl
biBjb21tYW5kIHdpdGggdGhlIG9wdGlvbnNcbiAqL1xuXG52YXIgVmlldyA9IGZ1bmN0aW9uICgp
IHtcbiAgZnVuY3Rpb24gVmlldyh0ZW1wbGF0ZSkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlz
LCBWaWV3KTtcblxuICAgIHRoaXMudGVtcGxhdGUgPSB0ZW1wbGF0ZTtcblxuICAgIHRoaXMuRU5U
RVJfS0VZID0gMTM7XG4gICAgdGhpcy5FU0NBUEVfS0VZID0gMjc7XG5cbiAgICB0aGlzLiR0b2Rv
TGlzdCA9IF9fd2VicGFja19yZXF1aXJlX18uaShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBf
X2hlbHBlcnNfX1tcImFcIiAvKiBxcyAqL10pKCcudG9kby1saXN0Jyk7XG4gICAgdGhpcy4kdG9k
b0l0ZW1Db3VudGVyID0gX193ZWJwYWNrX3JlcXVpcmVfXy5pKF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9faGVscGVyc19fW1wiYVwiIC8qIHFzICovXSkoJy50b2RvLWNvdW50Jyk7XG4gICAg
dGhpcy4kY2xlYXJDb21wbGV0ZWQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLmkoX19XRUJQQUNLX0lN
UE9SVEVEX01PRFVMRV8wX19oZWxwZXJzX19bXCJhXCIgLyogcXMgKi9dKSgnLmNsZWFyLWNvbXBs
ZXRlZCcpO1xuICAgIHRoaXMuJG1haW4gPSBfX3dlYnBhY2tfcmVxdWlyZV9fLmkoX19XRUJQQUNL
X0lNUE9SVEVEX01PRFVMRV8wX19oZWxwZXJzX19bXCJhXCIgLyogcXMgKi9dKSgnLm1haW4nKTtc
biAgICB0aGlzLiRmb290ZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLmkoX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19oZWxwZXJzX19bXCJhXCIgLyogcXMgKi9dKSgnLmZvb3RlcicpO1xuICAg
IHRoaXMuJHRvZ2dsZUFsbCA9IF9fd2VicGFja19yZXF1aXJlX18uaShfX1dFQlBBQ0tfSU1QT1JU
RURfTU9EVUxFXzBfX2hlbHBlcnNfX1tcImFcIiAvKiBxcyAqL10pKCcudG9nZ2xlLWFsbCcpO1xu
ICAgIHRoaXMuJG5ld1RvZG8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fLmkoX19XRUJQQUNLX0lNUE9S
VEVEX01PRFVMRV8wX19oZWxwZXJzX19bXCJhXCIgLyogcXMgKi9dKSgnLm5ldy10b2RvJyk7XG4g
IH1cblxuICBfY3JlYXRlQ2xhc3MoVmlldywgW3tcbiAgICBrZXk6ICdfcmVtb3ZlSXRlbScsXG4g
ICAgdmFsdWU6IGZ1bmN0aW9uIF9yZW1vdmVJdGVtKGlkKSB7XG4gICAgICB2YXIgZWxlbSA9IF9f
d2VicGFja19yZXF1aXJlX18uaShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2hlbHBlcnNf
X1tcImFcIiAvKiBxcyAqL10pKCdbZGF0YS1pZD1cIicgKyBpZCArICdcIl0nKTtcblxuICAgICAg
aWYgKGVsZW0pIHtcbiAgICAgICAgdGhpcy4kdG9kb0xpc3QucmVtb3ZlQ2hpbGQoZWxlbSk7XG4g
ICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnX2NsZWFyQ29tcGxldGVkQnV0dG9uJyxc
biAgICB2YWx1ZTogZnVuY3Rpb24gX2NsZWFyQ29tcGxldGVkQnV0dG9uKGNvbXBsZXRlZENvdW50
LCB2aXNpYmxlKSB7XG4gICAgICB0aGlzLiRjbGVhckNvbXBsZXRlZC5pbm5lckhUTUwgPSB0aGlz
LnRlbXBsYXRlLmNsZWFyQ29tcGxldGVkQnV0dG9uKGNvbXBsZXRlZENvdW50KTtcbiAgICAgIHRo
aXMuJGNsZWFyQ29tcGxldGVkLnN0eWxlLmRpc3BsYXkgPSB2aXNpYmxlID8gJ2Jsb2NrJyA6ICdu
b25lJztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdfZWRpdEl0ZW1Eb25lJyxcbiAgICB2YWx1
ZTogZnVuY3Rpb24gX2VkaXRJdGVtRG9uZShpZCwgdGl0bGUpIHtcbiAgICAgIHZhciBsaXN0SXRl
bSA9IF9fd2VicGFja19yZXF1aXJlX18uaShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2hl
bHBlcnNfX1tcImFcIiAvKiBxcyAqL10pKCdbZGF0YS1pZD1cIicgKyBpZCArICdcIl0nKTtcblxu
ICAgICAgaWYgKCFsaXN0SXRlbSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAg
IHZhciBpbnB1dCA9IF9fd2VicGFja19yZXF1aXJlX18uaShfX1dFQlBBQ0tfSU1QT1JURURfTU9E
VUxFXzBfX2hlbHBlcnNfX1tcImFcIiAvKiBxcyAqL10pKCdpbnB1dC5lZGl0JywgbGlzdEl0ZW0p
O1xuICAgICAgbGlzdEl0ZW0ucmVtb3ZlQ2hpbGQoaW5wdXQpO1xuXG4gICAgICBsaXN0SXRlbS5j
bGFzc05hbWUgPSBsaXN0SXRlbS5jbGFzc05hbWUucmVwbGFjZSgnZWRpdGluZycsICcnKTtcblxu
ICAgICAgX193ZWJwYWNrX3JlcXVpcmVfXy5pKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
aGVscGVyc19fW1wiYlwiIC8qIHFzYSAqL10pKCdsYWJlbCcsIGxpc3RJdGVtKS5mb3JFYWNoKGZ1
bmN0aW9uIChsYWJlbCkge1xuICAgICAgICBsYWJlbC50ZXh0Q29udGVudCA9IHRpdGxlO1xuICAg
ICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAncmVuZGVyJyxcbiAgICB2YWx1ZTogZnVu
Y3Rpb24gcmVuZGVyKHZpZXdDbWQsIHBhcmFtZXRlcikge1xuICAgICAgdmFyIHRoYXQgPSB0aGlz
O1xuICAgICAgdmFyIHZpZXdDb21tYW5kcyA9IHtcbiAgICAgICAgc2hvd0VudHJpZXM6IGZ1bmN0
aW9uIHNob3dFbnRyaWVzKCkge1xuICAgICAgICAgIHRoYXQuJHRvZG9MaXN0LmlubmVySFRNTCA9
IHRoYXQudGVtcGxhdGUuc2hvdyhwYXJhbWV0ZXIpO1xuICAgICAgICB9LFxuICAgICAgICByZW1v
dmVJdGVtOiBmdW5jdGlvbiByZW1vdmVJdGVtKCkge1xuICAgICAgICAgIHRoYXQuX3JlbW92ZUl0
ZW0ocGFyYW1ldGVyKTtcbiAgICAgICAgfSxcbiAgICAgICAgdXBkYXRlRWxlbWVudENvdW50OiBm
dW5jdGlvbiB1cGRhdGVFbGVtZW50Q291bnQoKSB7XG4gICAgICAgICAgdGhhdC4kdG9kb0l0ZW1D
b3VudGVyLmlubmVySFRNTCA9IHRoYXQudGVtcGxhdGUuaXRlbUNvdW50ZXIocGFyYW1ldGVyKTtc
biAgICAgICAgfSxcbiAgICAgICAgY2xlYXJDb21wbGV0ZWRCdXR0b246IGZ1bmN0aW9uIGNsZWFy
Q29tcGxldGVkQnV0dG9uKCkge1xuICAgICAgICAgIHRoYXQuX2NsZWFyQ29tcGxldGVkQnV0dG9u
KHBhcmFtZXRlci5jb21wbGV0ZWQsIHBhcmFtZXRlci52aXNpYmxlKTtcbiAgICAgICAgfSxcbiAg
ICAgICAgY29udGVudEJsb2NrVmlzaWJpbGl0eTogZnVuY3Rpb24gY29udGVudEJsb2NrVmlzaWJp
bGl0eSgpIHtcbiAgICAgICAgICB0aGF0LiRtYWluLnN0eWxlLmRpc3BsYXkgPSB0aGF0LiRmb290
ZXIuc3R5bGUuZGlzcGxheSA9IHBhcmFtZXRlci52aXNpYmxlID8gJ2Jsb2NrJyA6ICdub25lJztc
biAgICAgICAgfSxcbiAgICAgICAgdG9nZ2xlQWxsOiBmdW5jdGlvbiB0b2dnbGVBbGwoKSB7XG4g
ICAgICAgICAgdGhhdC4kdG9nZ2xlQWxsLmNoZWNrZWQgPSBwYXJhbWV0ZXIuY2hlY2tlZDtcbiAg
ICAgICAgfSxcbiAgICAgICAgc2V0RmlsdGVyOiBmdW5jdGlvbiBzZXRGaWx0ZXIoKSB7XG4gICAg
ICAgICAgX3NldEZpbHRlcihwYXJhbWV0ZXIpO1xuICAgICAgICB9LFxuICAgICAgICBjbGVhck5l
d1RvZG86IGZ1bmN0aW9uIGNsZWFyTmV3VG9kbygpIHtcbiAgICAgICAgICB0aGF0LiRuZXdUb2Rv
LnZhbHVlID0gJyc7XG4gICAgICAgIH0sXG4gICAgICAgIGVsZW1lbnRDb21wbGV0ZTogZnVuY3Rp
b24gZWxlbWVudENvbXBsZXRlKCkge1xuICAgICAgICAgIF9lbGVtZW50Q29tcGxldGUocGFyYW1l
dGVyLmlkLCBwYXJhbWV0ZXIuY29tcGxldGVkKTtcbiAgICAgICAgfSxcbiAgICAgICAgZWRpdEl0
ZW06IGZ1bmN0aW9uIGVkaXRJdGVtKCkge1xuICAgICAgICAgIF9lZGl0SXRlbShwYXJhbWV0ZXIu
aWQsIHBhcmFtZXRlci50aXRsZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVkaXRJdGVtRG9uZTog
ZnVuY3Rpb24gZWRpdEl0ZW1Eb25lKCkge1xuICAgICAgICAgIHRoYXQuX2VkaXRJdGVtRG9uZShw
YXJhbWV0ZXIuaWQsIHBhcmFtZXRlci50aXRsZSk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAg
ICAgIHZpZXdDb21tYW5kc1t2aWV3Q21kXSgpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ19i
aW5kSXRlbUVkaXREb25lJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2JpbmRJdGVtRWRpdERvbmUo
aGFuZGxlcikge1xuICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgX193ZWJwYWNrX3JlcXVp
cmVfXy5pKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faGVscGVyc19fW1wiY1wiIC8qICRk
ZWxlZ2F0ZSAqL10pKHRoYXQuJHRvZG9MaXN0LCAnbGkgLmVkaXQnLCAnYmx1cicsIGZ1bmN0aW9u
ICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmRhdGFzZXQuaXNjYW5jZWxlZCkge1xuICAgICAgICAg
IGhhbmRsZXIoe1xuICAgICAgICAgICAgaWQ6IF9pdGVtSWQodGhpcyksXG4gICAgICAgICAgICB0
aXRsZTogdGhpcy52YWx1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxu
ICAgICAgX193ZWJwYWNrX3JlcXVpcmVfXy5pKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
aGVscGVyc19fW1wiY1wiIC8qICRkZWxlZ2F0ZSAqL10pKHRoYXQuJHRvZG9MaXN0LCAnbGkgLmVk
aXQnLCAna2V5cHJlc3MnLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgaWYgKGV2ZW50Lmtl
eUNvZGUgPT09IHRoYXQuRU5URVJfS0VZKSB7XG4gICAgICAgICAgLy8gUmVtb3ZlIHRoZSBjdXJz
b3IgZnJvbSB0aGUgaW5wdXQgd2hlbiB5b3UgaGl0IGVudGVyIGp1c3QgbGlrZSBpZiBpdFxuICAg
ICAgICAgIC8vIHdlcmUgYSByZWFsIGZvcm1cbiAgICAgICAgICB0aGlzLmJsdXIoKTtcbiAgICAg
ICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnX2JpbmRJdGVtRWRpdENh
bmNlbCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9iaW5kSXRlbUVkaXRDYW5jZWwoaGFuZGxlcikg
e1xuICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgX193ZWJwYWNrX3JlcXVpcmVfXy5pKF9f
V0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faGVscGVyc19fW1wiY1wiIC8qICRkZWxlZ2F0ZSAq
L10pKHRoYXQuJHRvZG9MaXN0LCAnbGkgLmVkaXQnLCAna2V5dXAnLCBmdW5jdGlvbiAoZXZlbnQp
IHtcbiAgICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IHRoYXQuRVNDQVBFX0tFWSkge1xuICAg
ICAgICAgIHRoaXMuZGF0YXNldC5pc2NhbmNlbGVkID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLmJs
dXIoKTtcblxuICAgICAgICAgIGhhbmRsZXIoeyBpZDogX2l0ZW1JZCh0aGlzKSB9KTtcbiAgICAg
ICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnYmluZCcsXG4gICAgdmFs
dWU6IGZ1bmN0aW9uIGJpbmQoZXZlbnQsIGhhbmRsZXIpIHtcbiAgICAgIHZhciB0aGF0ID0gdGhp
cztcbiAgICAgIGlmIChldmVudCA9PT0gJ25ld1RvZG8nKSB7XG4gICAgICAgIF9fd2VicGFja19y
ZXF1aXJlX18uaShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2hlbHBlcnNfX1tcImRcIiAv
KiAkb24gKi9dKSh0aGF0LiRuZXdUb2RvLCAnY2hhbmdlJywgZnVuY3Rpb24gKCkge1xuICAgICAg
ICAgIGhhbmRsZXIodGhhdC4kbmV3VG9kby52YWx1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBl
bHNlIGlmIChldmVudCA9PT0gJ3JlbW92ZUNvbXBsZXRlZCcpIHtcbiAgICAgICAgX193ZWJwYWNr
X3JlcXVpcmVfXy5pKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faGVscGVyc19fW1wiZFwi
IC8qICRvbiAqL10pKHRoYXQuJGNsZWFyQ29tcGxldGVkLCAnY2xpY2snLCBmdW5jdGlvbiAoKSB7
XG4gICAgICAgICAgaGFuZGxlcigpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoZXZl
bnQgPT09ICd0b2dnbGVBbGwnKSB7XG4gICAgICAgIF9fd2VicGFja19yZXF1aXJlX18uaShfX1dF
QlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2hlbHBlcnNfX1tcImRcIiAvKiAkb24gKi9dKSh0aGF0
LiR0b2dnbGVBbGwsICdjbGljaycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBoYW5kbGVyKHsg
Y29tcGxldGVkOiB0aGlzLmNoZWNrZWQgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlm
IChldmVudCA9PT0gJ2l0ZW1FZGl0Jykge1xuICAgICAgICBfX3dlYnBhY2tfcmVxdWlyZV9fLmko
X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19oZWxwZXJzX19bXCJjXCIgLyogJGRlbGVnYXRl
ICovXSkodGhhdC4kdG9kb0xpc3QsICdsaSBsYWJlbCcsICdkYmxjbGljaycsIGZ1bmN0aW9uICgp
IHtcbiAgICAgICAgICBoYW5kbGVyKHsgaWQ6IF9pdGVtSWQodGhpcykgfSk7XG4gICAgICAgIH0p
O1xuICAgICAgfSBlbHNlIGlmIChldmVudCA9PT0gJ2l0ZW1SZW1vdmUnKSB7XG4gICAgICAgIF9f
d2VicGFja19yZXF1aXJlX18uaShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2hlbHBlcnNf
X1tcImNcIiAvKiAkZGVsZWdhdGUgKi9dKSh0aGF0LiR0b2RvTGlzdCwgJy5kZXN0cm95JywgJ2Ns
aWNrJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGhhbmRsZXIoeyBpZDogX2l0ZW1JZCh0aGlz
KSB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKGV2ZW50ID09PSAnaXRlbVRvZ2ds
ZScpIHtcbiAgICAgICAgX193ZWJwYWNrX3JlcXVpcmVfXy5pKF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9faGVscGVyc19fW1wiY1wiIC8qICRkZWxlZ2F0ZSAqL10pKHRoYXQuJHRvZG9MaXN0
LCAnLnRvZ2dsZScsICdjbGljaycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBoYW5kbGVyKHtc
biAgICAgICAgICAgIGlkOiBfaXRlbUlkKHRoaXMpLFxuICAgICAgICAgICAgY29tcGxldGVkOiB0
aGlzLmNoZWNrZWRcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYg
KGV2ZW50ID09PSAnaXRlbUVkaXREb25lJykge1xuICAgICAgICB0aGF0Ll9iaW5kSXRlbUVkaXRE
b25lKGhhbmRsZXIpO1xuICAgICAgfSBlbHNlIGlmIChldmVudCA9PT0gJ2l0ZW1FZGl0Q2FuY2Vs
Jykge1xuICAgICAgICB0aGF0Ll9iaW5kSXRlbUVkaXRDYW5jZWwoaGFuZGxlcik7XG4gICAgICB9
XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFZpZXc7XG59KCk7XG5cbi8qIGhhcm1vbnkgZGVm
YXVsdCBleHBvcnQgKi8gZXhwb3J0c1tcImFcIl0gPSBWaWV3O1xuXG5cbmZ1bmN0aW9uIF9zZXRG
aWx0ZXIoY3VycmVudFBhZ2UpIHtcbiAgX193ZWJwYWNrX3JlcXVpcmVfXy5pKF9fV0VCUEFDS19J
TVBPUlRFRF9NT0RVTEVfMF9faGVscGVyc19fW1wiYVwiIC8qIHFzICovXSkoJy5maWx0ZXJzIC5z
ZWxlY3RlZCcpLmNsYXNzTmFtZSA9ICcnO1xuICBfX3dlYnBhY2tfcmVxdWlyZV9fLmkoX19XRUJQ
QUNLX0lNUE9SVEVEX01PRFVMRV8wX19oZWxwZXJzX19bXCJhXCIgLyogcXMgKi9dKSgnLmZpbHRl
cnMgW2hyZWY9XCIjLycgKyBjdXJyZW50UGFnZSArICdcIl0nKS5jbGFzc05hbWUgPSAnc2VsZWN0
ZWQnO1xufVxuXG5mdW5jdGlvbiBfZWxlbWVudENvbXBsZXRlKGlkLCBjb21wbGV0ZWQpIHtcbiAg
dmFyIGxpc3RJdGVtID0gX193ZWJwYWNrX3JlcXVpcmVfXy5pKF9fV0VCUEFDS19JTVBPUlRFRF9N
T0RVTEVfMF9faGVscGVyc19fW1wiYVwiIC8qIHFzICovXSkoJ1tkYXRhLWlkPVwiJyArIGlkICsg
J1wiXScpO1xuXG4gIGlmICghbGlzdEl0ZW0pIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBsaXN0
SXRlbS5jbGFzc05hbWUgPSBjb21wbGV0ZWQgPyAnY29tcGxldGVkJyA6ICcnO1xuXG4gIC8vIElu
IGNhc2UgaXQgd2FzIHRvZ2dsZWQgZnJvbSBhbiBldmVudCBhbmQgbm90IGJ5IGNsaWNraW5nIHRo
ZSBjaGVja2JveFxuICBfX3dlYnBhY2tfcmVxdWlyZV9fLmkoX19XRUJQQUNLX0lNUE9SVEVEX01P
RFVMRV8wX19oZWxwZXJzX19bXCJhXCIgLyogcXMgKi9dKSgnaW5wdXQnLCBsaXN0SXRlbSkuY2hl
Y2tlZCA9IGNvbXBsZXRlZDtcbn1cblxuZnVuY3Rpb24gX2VkaXRJdGVtKGlkLCB0aXRsZSkge1xu
ICB2YXIgbGlzdEl0ZW0gPSBfX3dlYnBhY2tfcmVxdWlyZV9fLmkoX19XRUJQQUNLX0lNUE9SVEVE
X01PRFVMRV8wX19oZWxwZXJzX19bXCJhXCIgLyogcXMgKi9dKSgnW2RhdGEtaWQ9XCInICsgaWQg
KyAnXCJdJyk7XG5cbiAgaWYgKCFsaXN0SXRlbSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxp
c3RJdGVtLmNsYXNzTmFtZSA9IGxpc3RJdGVtLmNsYXNzTmFtZSArICcgZWRpdGluZyc7XG5cbiAg
dmFyIGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcbiAgaW5wdXQuY2xh
c3NOYW1lID0gJ2VkaXQnO1xuXG4gIGxpc3RJdGVtLmFwcGVuZENoaWxkKGlucHV0KTtcbiAgaW5w
dXQuZm9jdXMoKTtcbiAgaW5wdXQudmFsdWUgPSB0aXRsZTtcbn1cblxuZnVuY3Rpb24gX2l0ZW1J
ZChlbGVtZW50KSB7XG4gIHZhciBsaSA9IF9fd2VicGFja19yZXF1aXJlX18uaShfX1dFQlBBQ0tf
SU1QT1JURURfTU9EVUxFXzBfX2hlbHBlcnNfX1tcImVcIiAvKiAkcGFyZW50ICovXSkoZWxlbWVu
dCwgJ2xpJyk7XG4gIHJldHVybiBwYXJzZUludChsaS5kYXRhc2V0LmlkLCAxMCk7XG59XG5cbi8q
KiovIH0sXG4vKiAxMCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbi8v
IHJlbW92ZWQgYnkgZXh0cmFjdC10ZXh0LXdlYnBhY2stcGx1Z2luXG5cbi8qKiovIH0sXG4vKiAx
MSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9f
KSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFD
S19JTVBPUlRFRF9NT0RVTEVfMF9fYXBwX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xuLyog
aGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faGVscGVy
c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbi8qIGVzbGludCBuby1jb25zb2xlOjAgKi9c
blxuXG5cbi8vIHRoaXMgaXMgb25seSByZWxldmFudCB3aGVuIHVzaW5nIGBob3RgIG1vZGUgd2l0
aCB3ZWJwYWNrXG4vLyBzcGVjaWFsIHRoYW5rcyB0byBFcmljIENsZW1tb25zOiBodHRwczovL2dp
dGh1Yi5jb20vZXJpY2NsZW1tb25zL3dlYnBhY2staG90LXNlcnZlci1leGFtcGxlXG52YXIgcmVs
b2FkaW5nID0gZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gJ2NvbXBsZXRlJztcbmlmIChmYWxzZSkg
e1xuICBtb2R1bGUuaG90LmFjY2VwdChmdW5jdGlvbiAoZXJyKSB7fSk7XG4gIGlmIChyZWxvYWRp
bmcpIHtcbiAgICBvbkxvYWQoKTtcbiAgfSBlbHNlIHtcbiAgICBib290c3RyYXAoKTtcbiAgfVxu
fSBlbHNlIHtcbiAgYm9vdHN0cmFwKCk7XG59XG5cbmZ1bmN0aW9uIGJvb3RzdHJhcCgpIHtcbiAg
X193ZWJwYWNrX3JlcXVpcmVfXy5pKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faGVscGVy
c19fW1wiZFwiIC8qICRvbiAqL10pKHdpbmRvdywgJ2xvYWQnLCBfX1dFQlBBQ0tfSU1QT1JURURf
TU9EVUxFXzBfX2FwcF9fW1wiYVwiIC8qIG9uTG9hZCAqL10pO1xuICBfX3dlYnBhY2tfcmVxdWly
ZV9fLmkoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19oZWxwZXJzX19bXCJkXCIgLyogJG9u
ICovXSkod2luZG93LCAnaGFzaGNoYW5nZScsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9f
YXBwX19bXCJhXCIgLyogb25Mb2FkICovXSk7XG59XG5cbi8qKiovIH1cbl0sWzExXSk7XG5cblxu
Ly8gV0VCUEFDSyBGT09URVIgLy9cbi8vIGJ1bmRsZS5hcHAuNzNiY2M1ZDNjMWQwNzE4MGYwZTMu
anMiLCJleHBvcnQge3FzLCBxc2EsICRvbiwgJGRlbGVnYXRlLCAkcGFyZW50LCByZW1vdmV9XG5c
bi8vIEdldCBlbGVtZW50KHMpIGJ5IENTUyBzZWxlY3RvcjpcbmZ1bmN0aW9uIHFzKHNlbGVjdG9y
LCBzY29wZSkge1xuICByZXR1cm4gKHNjb3BlIHx8IGRvY3VtZW50KS5xdWVyeVNlbGVjdG9yKHNl
bGVjdG9yKVxufVxuXG5mdW5jdGlvbiBxc2Eoc2VsZWN0b3IsIHNjb3BlKSB7XG4gIHJldHVybiAo
c2NvcGUgfHwgZG9jdW1lbnQpLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpXG59XG5cbi8vIGFk
ZEV2ZW50TGlzdGVuZXIgd3JhcHBlcjpcbmZ1bmN0aW9uICRvbih0YXJnZXQsIHR5cGUsIGNhbGxi
YWNrLCB1c2VDYXB0dXJlKSB7XG4gIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGNhbGxi
YWNrLCAhIXVzZUNhcHR1cmUpXG59XG5cbi8vIEF0dGFjaCBhIGhhbmRsZXIgdG8gZXZlbnQgZm9y
IGFsbCBlbGVtZW50cyB0aGF0IG1hdGNoIHRoZSBzZWxlY3Rvcixcbi8vIG5vdyBvciBpbiB0aGUg
ZnV0dXJlLCBiYXNlZCBvbiBhIHJvb3QgZWxlbWVudFxuZnVuY3Rpb24gJGRlbGVnYXRlKHRhcmdl
dCwgc2VsZWN0b3IsIHR5cGUsIGhhbmRsZXIpIHtcbiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96
aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvRXZlbnRzL2JsdXJcbiAgdmFyIHVzZUNhcHR1cmUgPSB0
eXBlID09PSAnYmx1cicgfHwgdHlwZSA9PT0gJ2ZvY3VzJ1xuICAkb24odGFyZ2V0LCB0eXBlLCBk
aXNwYXRjaEV2ZW50LCB1c2VDYXB0dXJlKVxuXG4gIGZ1bmN0aW9uIGRpc3BhdGNoRXZlbnQoZXZl
bnQpIHtcbiAgICB2YXIgdGFyZ2V0RWxlbWVudCA9IGV2ZW50LnRhcmdldFxuICAgIHZhciBwb3Rl
bnRpYWxFbGVtZW50cyA9IHFzYShzZWxlY3RvciwgdGFyZ2V0KVxuICAgIHZhciBoYXNNYXRjaCA9
IEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwocG90ZW50aWFsRWxlbWVudHMsIHRhcmdldEVs
ZW1lbnQpID49IDBcblxuICAgIGlmIChoYXNNYXRjaCkge1xuICAgICAgaGFuZGxlci5jYWxsKHRh
cmdldEVsZW1lbnQsIGV2ZW50KVxuICAgIH1cbiAgfVxufVxuXG4vLyBGaW5kIHRoZSBlbGVtZW50
J3MgcGFyZW50IHdpdGggdGhlIGdpdmVuIHRhZyBuYW1lOlxuLy8gJHBhcmVudChxcygnYScpLCAn
ZGl2Jyk7XG5mdW5jdGlvbiAkcGFyZW50KGVsZW1lbnQsIHRhZ05hbWUpIHtcbiAgaWYgKCFlbGVt
ZW50LnBhcmVudE5vZGUpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cbiAgaWYgKGVsZW1l
bnQucGFyZW50Tm9kZS50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09IHRhZ05hbWUudG9Mb3dlckNh
c2UoKSkge1xuICAgIHJldHVybiBlbGVtZW50LnBhcmVudE5vZGVcbiAgfVxuICByZXR1cm4gJHBh
cmVudChlbGVtZW50LnBhcmVudE5vZGUsIHRhZ05hbWUpXG59XG5cbi8vIHJlbW92ZXMgYW4gZWxl
bWVudCBmcm9tIGFuIGFycmF5XG4vLyBjb25zdCB4ID0gWzEsMiwzXVxuLy8gcmVtb3ZlKHgsIDIp
XG4vLyB4IH49PSBbMSwzXVxuZnVuY3Rpb24gcmVtb3ZlKGFycmF5LCB0aGluZykge1xuICBjb25z
dCBpbmRleCA9IGFycmF5LmluZGV4T2YodGhpbmcpXG4gIGlmIChpbmRleCA9PT0gLTEpIHtcbiAg
ICByZXR1cm4gYXJyYXlcbiAgfVxuICBhcnJheS5zcGxpY2UoaW5kZXgsIDEpXG59XG5cbi8vIEFs
bG93IGZvciBsb29waW5nIG9uIG5vZGVzIGJ5IGNoYWluaW5nOlxuLy8gcXNhKCcuZm9vJykuZm9y
RWFjaChmdW5jdGlvbiAoKSB7fSlcbk5vZGVMaXN0LnByb3RvdHlwZS5mb3JFYWNoID0gQXJyYXku
cHJvdG90eXBlLmZvckVhY2hcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2hlbHBl
cnMuanMiLCJpbXBvcnQgJ3RvZG9tdmMtYXBwLWNzcy9pbmRleC5jc3MnXG5pbXBvcnQgJy4vYXBw
LmNzcydcblxuaW1wb3J0IHskb259IGZyb20gJy4vaGVscGVycydcbmltcG9ydCB7dXBkYXRlVG9k
b30gZnJvbSAnLi90b2RvJ1xuXG5leHBvcnQgZnVuY3Rpb24gb25Mb2FkKCkgeyAvLyBlc2xpbnQt
ZGlzYWJsZS1saW5lIGltcG9ydC9wcmVmZXItZGVmYXVsdC1leHBvcnRcbiAgdXBkYXRlVG9kbygp
XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9hcHAuanMiLCJleHBvcnQgZGVm
YXVsdCBDb250cm9sbGVyXG5cbi8qKlxuKiBUYWtlcyBhIG1vZGVsIGFuZCB2aWV3IGFuZCBhY3Rz
IGFzIHRoZSBjb250cm9sbGVyIGJldHdlZW4gdGhlbVxuKlxuKiBAY29uc3RydWN0b3JcbiogQHBh
cmFtIHtvYmplY3R9IG1vZGVsIFRoZSBtb2RlbCBpbnN0YW5jZVxuKiBAcGFyYW0ge29iamVjdH0g
dmlldyBUaGUgdmlldyBpbnN0YW5jZVxuKi9cbmZ1bmN0aW9uIENvbnRyb2xsZXIobW9kZWwsIHZp
ZXcpIHtcbiAgdmFyIHRoYXQgPSB0aGlzXG4gIHRoYXQubW9kZWwgPSBtb2RlbFxuICB0aGF0LnZp
ZXcgPSB2aWV3XG5cbiAgdGhhdC52aWV3LmJpbmQoJ25ld1RvZG8nLCBmdW5jdGlvbih0aXRsZSkg
e1xuICAgIHRoYXQuYWRkSXRlbSh0aXRsZSlcbiAgfSlcblxuICB0aGF0LnZpZXcuYmluZCgnaXRl
bUVkaXQnLCBmdW5jdGlvbihpdGVtKSB7XG4gICAgdGhhdC5lZGl0SXRlbShpdGVtLmlkKVxuICB9
KVxuXG4gIHRoYXQudmlldy5iaW5kKCdpdGVtRWRpdERvbmUnLCBmdW5jdGlvbihpdGVtKSB7XG4g
ICAgdGhhdC5lZGl0SXRlbVNhdmUoaXRlbS5pZCwgaXRlbS50aXRsZSlcbiAgfSlcblxuICB0aGF0
LnZpZXcuYmluZCgnaXRlbUVkaXRDYW5jZWwnLCBmdW5jdGlvbihpdGVtKSB7XG4gICAgdGhhdC5l
ZGl0SXRlbUNhbmNlbChpdGVtLmlkKVxuICB9KVxuXG4gIHRoYXQudmlldy5iaW5kKCdpdGVtUmVt
b3ZlJywgZnVuY3Rpb24oaXRlbSkge1xuICAgIHRoYXQucmVtb3ZlSXRlbShpdGVtLmlkKVxuICB9
KVxuXG4gIHRoYXQudmlldy5iaW5kKCdpdGVtVG9nZ2xlJywgZnVuY3Rpb24oaXRlbSkge1xuICAg
IHRoYXQudG9nZ2xlQ29tcGxldGUoaXRlbS5pZCwgaXRlbS5jb21wbGV0ZWQpXG4gIH0pXG5cbiAg
dGhhdC52aWV3LmJpbmQoJ3JlbW92ZUNvbXBsZXRlZCcsIGZ1bmN0aW9uKCkge1xuICAgIHRoYXQu
cmVtb3ZlQ29tcGxldGVkSXRlbXMoKVxuICB9KVxuXG4gIHRoYXQudmlldy5iaW5kKCd0b2dnbGVB
bGwnLCBmdW5jdGlvbihzdGF0dXMpIHtcbiAgICB0aGF0LnRvZ2dsZUFsbChzdGF0dXMuY29tcGxl
dGVkKVxuICB9KVxufVxuXG4vKipcbiogTG9hZHMgYW5kIGluaXRpYWxpc2VzIHRoZSB2aWV3XG4q
XG4qIEBwYXJhbSB7c3RyaW5nfSAnJyB8ICdhY3RpdmUnIHwgJ2NvbXBsZXRlZCdcbiovXG5Db250
cm9sbGVyLnByb3RvdHlwZS5zZXRWaWV3ID0gZnVuY3Rpb24obG9jYXRpb25IYXNoKSB7XG4gIHZh
ciByb3V0ZSA9IGxvY2F0aW9uSGFzaC5zcGxpdCgnLycpWzFdXG4gIHZhciBwYWdlID0gcm91dGUg
fHwgJydcbiAgdGhpcy5fdXBkYXRlRmlsdGVyU3RhdGUocGFnZSlcbn1cblxuLyoqXG4qIEFuIGV2
ZW50IHRvIGZpcmUgb24gbG9hZC4gV2lsbCBnZXQgYWxsIGl0ZW1zIGFuZCBkaXNwbGF5IHRoZW0g
aW4gdGhlXG4qIHRvZG8tbGlzdFxuKi9cbkNvbnRyb2xsZXIucHJvdG90eXBlLnNob3dBbGwgPSBm
dW5jdGlvbigpIHtcbiAgdmFyIHRoYXQgPSB0aGlzXG4gIHRoYXQubW9kZWwucmVhZChmdW5jdGlv
bihkYXRhKSB7XG4gICAgdGhhdC52aWV3LnJlbmRlcignc2hvd0VudHJpZXMnLCBkYXRhKVxuICB9
KVxufVxuXG4vKipcbiogUmVuZGVycyBhbGwgYWN0aXZlIHRhc2tzXG4qL1xuQ29udHJvbGxlci5w
cm90b3R5cGUuc2hvd0FjdGl2ZSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgdGhhdCA9IHRoaXNcbiAg
dGhhdC5tb2RlbC5yZWFkKHtjb21wbGV0ZWQ6IGZhbHNlfSwgZnVuY3Rpb24oZGF0YSkge1xuICAg
IHRoYXQudmlldy5yZW5kZXIoJ3Nob3dFbnRyaWVzJywgZGF0YSlcbiAgfSlcbn1cblxuLyoqXG4q
IFJlbmRlcnMgYWxsIGNvbXBsZXRlZCB0YXNrc1xuKi9cbkNvbnRyb2xsZXIucHJvdG90eXBlLnNo
b3dDb21wbGV0ZWQgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHRoYXQgPSB0aGlzXG4gIHRoYXQubW9k
ZWwucmVhZCh7Y29tcGxldGVkOiB0cnVlfSwgZnVuY3Rpb24oZGF0YSkge1xuICAgIHRoYXQudmll
dy5yZW5kZXIoJ3Nob3dFbnRyaWVzJywgZGF0YSlcbiAgfSlcbn1cblxuLyoqXG4qIEFuIGV2ZW50
IHRvIGZpcmUgd2hlbmV2ZXIgeW91IHdhbnQgdG8gYWRkIGFuIGl0ZW0uIFNpbXBseSBwYXNzIGlu
IHRoZSBldmVudFxuKiBvYmplY3QgYW5kIGl0J2xsIGhhbmRsZSB0aGUgRE9NIGluc2VydGlvbiBh
bmQgc2F2aW5nIG9mIHRoZSBuZXcgaXRlbS5cbiovXG5Db250cm9sbGVyLnByb3RvdHlwZS5hZGRJ
dGVtID0gZnVuY3Rpb24odGl0bGUpIHtcbiAgdmFyIHRoYXQgPSB0aGlzXG5cbiAgaWYgKHRpdGxl
LnRyaW0oKSA9PT0gJycpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIHRoYXQubW9kZWwuY3JlYXRl
KHRpdGxlLCBmdW5jdGlvbigpIHtcbiAgICB0aGF0LnZpZXcucmVuZGVyKCdjbGVhck5ld1RvZG8n
KVxuICAgIHRoYXQuX2ZpbHRlcih0cnVlKVxuICB9KVxufVxuXG4vKlxuKiBUcmlnZ2VycyB0aGUg
aXRlbSBlZGl0aW5nIG1vZGUuXG4qL1xuQ29udHJvbGxlci5wcm90b3R5cGUuZWRpdEl0ZW0gPSBm
dW5jdGlvbihpZCkge1xuICB2YXIgdGhhdCA9IHRoaXNcbiAgdGhhdC5tb2RlbC5yZWFkKGlkLCBm
dW5jdGlvbihkYXRhKSB7XG4gICAgdGhhdC52aWV3LnJlbmRlcignZWRpdEl0ZW0nLCB7aWQsIHRp
dGxlOiBkYXRhWzBdLnRpdGxlfSlcbiAgfSlcbn1cblxuLypcbiogRmluaXNoZXMgdGhlIGl0ZW0g
ZWRpdGluZyBtb2RlIHN1Y2Nlc3NmdWxseS5cbiovXG5Db250cm9sbGVyLnByb3RvdHlwZS5lZGl0
SXRlbVNhdmUgPSBmdW5jdGlvbihpZCwgdGl0bGUpIHtcbiAgdmFyIHRoYXQgPSB0aGlzXG4gIGlm
ICh0aXRsZS50cmltKCkpIHtcbiAgICB0aGF0Lm1vZGVsLnVwZGF0ZShpZCwge3RpdGxlfSwgZnVu
Y3Rpb24oKSB7XG4gICAgICB0aGF0LnZpZXcucmVuZGVyKCdlZGl0SXRlbURvbmUnLCB7aWQsIHRp
dGxlfSlcbiAgICB9KVxuICB9IGVsc2Uge1xuICAgIHRoYXQucmVtb3ZlSXRlbShpZClcbiAgfVxu
fVxuXG4vKlxuKiBDYW5jZWxzIHRoZSBpdGVtIGVkaXRpbmcgbW9kZS5cbiovXG5Db250cm9sbGVy
LnByb3RvdHlwZS5lZGl0SXRlbUNhbmNlbCA9IGZ1bmN0aW9uKGlkKSB7XG4gIHZhciB0aGF0ID0g
dGhpc1xuICB0aGF0Lm1vZGVsLnJlYWQoaWQsIGZ1bmN0aW9uKGRhdGEpIHtcbiAgICB0aGF0LnZp
ZXcucmVuZGVyKCdlZGl0SXRlbURvbmUnLCB7aWQsIHRpdGxlOiBkYXRhWzBdLnRpdGxlfSlcbiAg
fSlcbn1cblxuLyoqXG4qIEJ5IGdpdmluZyBpdCBhbiBJRCBpdCdsbCBmaW5kIHRoZSBET00gZWxl
bWVudCBtYXRjaGluZyB0aGF0IElELFxuKiByZW1vdmUgaXQgZnJvbSB0aGUgRE9NIGFuZCBhbHNv
IHJlbW92ZSBpdCBmcm9tIHN0b3JhZ2UuXG4qXG4qIEBwYXJhbSB7bnVtYmVyfSBpZCBUaGUgSUQg
b2YgdGhlIGl0ZW0gdG8gcmVtb3ZlIGZyb20gdGhlIERPTSBhbmRcbiogc3RvcmFnZVxuKi9cbkNv
bnRyb2xsZXIucHJvdG90eXBlLnJlbW92ZUl0ZW0gPSBmdW5jdGlvbihpZCkge1xuICB2YXIgdGhh
dCA9IHRoaXNcbiAgdGhhdC5tb2RlbC5yZW1vdmUoaWQsIGZ1bmN0aW9uKCkge1xuICAgIHRoYXQu
dmlldy5yZW5kZXIoJ3JlbW92ZUl0ZW0nLCBpZClcbiAgfSlcblxuICB0aGF0Ll9maWx0ZXIoKVxu
fVxuXG4vKipcbiogV2lsbCByZW1vdmUgYWxsIGNvbXBsZXRlZCBpdGVtcyBmcm9tIHRoZSBET00g
YW5kIHN0b3JhZ2UuXG4qL1xuQ29udHJvbGxlci5wcm90b3R5cGUucmVtb3ZlQ29tcGxldGVkSXRl
bXMgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHRoYXQgPSB0aGlzXG4gIHRoYXQubW9kZWwucmVhZCh7
Y29tcGxldGVkOiB0cnVlfSwgZnVuY3Rpb24oZGF0YSkge1xuICAgIGRhdGEuZm9yRWFjaChmdW5j
dGlvbihpdGVtKSB7XG4gICAgICB0aGF0LnJlbW92ZUl0ZW0oaXRlbS5pZClcbiAgICB9KVxuICB9
KVxuXG4gIHRoYXQuX2ZpbHRlcigpXG59XG5cbi8qKlxuKiBHaXZlIGl0IGFuIElEIG9mIGEgbW9k
ZWwgYW5kIGEgY2hlY2tib3ggYW5kIGl0IHdpbGwgdXBkYXRlIHRoZSBpdGVtXG4qIGluIHN0b3Jh
Z2UgYmFzZWQgb24gdGhlIGNoZWNrYm94J3Mgc3RhdGUuXG4qXG4qIEBwYXJhbSB7bnVtYmVyfSBp
ZCBUaGUgSUQgb2YgdGhlIGVsZW1lbnQgdG8gY29tcGxldGUgb3IgdW5jb21wbGV0ZVxuKiBAcGFy
YW0ge29iamVjdH0gY2hlY2tib3ggVGhlIGNoZWNrYm94IHRvIGNoZWNrIHRoZSBzdGF0ZSBvZiBj
b21wbGV0ZVxuKiAgICAgICAgICAgICAgICAgICAgICAgICAgb3Igbm90XG4qIEBwYXJhbSB7Ym9v
bGVhbnx1bmRlZmluZWR9IHNpbGVudCBQcmV2ZW50IHJlLWZpbHRlcmluZyB0aGUgdG9kbyBpdGVt
c1xuKi9cbkNvbnRyb2xsZXIucHJvdG90eXBlLnRvZ2dsZUNvbXBsZXRlID0gZnVuY3Rpb24oaWQs
IGNvbXBsZXRlZCwgc2lsZW50KSB7XG4gIHZhciB0aGF0ID0gdGhpc1xuICB0aGF0Lm1vZGVsLnVw
ZGF0ZShpZCwge2NvbXBsZXRlZH0sIGZ1bmN0aW9uKCkge1xuICAgIHRoYXQudmlldy5yZW5kZXIo
J2VsZW1lbnRDb21wbGV0ZScsIHtcbiAgICAgIGlkLFxuICAgICAgY29tcGxldGVkLFxuICAgIH0p
XG4gIH0pXG5cbiAgaWYgKCFzaWxlbnQpIHtcbiAgICB0aGF0Ll9maWx0ZXIoKVxuICB9XG59XG5c
bi8qKlxuKiBXaWxsIHRvZ2dsZSBBTEwgY2hlY2tib3hlcycgb24vb2ZmIHN0YXRlIGFuZCBjb21w
bGV0ZW5lc3Mgb2YgbW9kZWxzLlxuKiBKdXN0IHBhc3MgaW4gdGhlIGV2ZW50IG9iamVjdC5cbiov
XG5Db250cm9sbGVyLnByb3RvdHlwZS50b2dnbGVBbGwgPSBmdW5jdGlvbihjb21wbGV0ZWQpIHtc
biAgdmFyIHRoYXQgPSB0aGlzXG4gIHRoYXQubW9kZWwucmVhZCh7Y29tcGxldGVkOiAhY29tcGxl
dGVkfSwgZnVuY3Rpb24oZGF0YSkge1xuICAgIGRhdGEuZm9yRWFjaChmdW5jdGlvbihpdGVtKSB7
XG4gICAgICB0aGF0LnRvZ2dsZUNvbXBsZXRlKGl0ZW0uaWQsIGNvbXBsZXRlZCwgdHJ1ZSlcbiAg
ICB9KVxuICB9KVxuXG4gIHRoYXQuX2ZpbHRlcigpXG59XG5cbi8qKlxuKiBVcGRhdGVzIHRoZSBw
aWVjZXMgb2YgdGhlIHBhZ2Ugd2hpY2ggY2hhbmdlIGRlcGVuZGluZyBvbiB0aGUgcmVtYWluaW5n
XG4qIG51bWJlciBvZiB0b2Rvcy5cbiovXG5Db250cm9sbGVyLnByb3RvdHlwZS5fdXBkYXRlQ291
bnQgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHRoYXQgPSB0aGlzXG4gIHRoYXQubW9kZWwuZ2V0Q291
bnQoZnVuY3Rpb24odG9kb3MpIHtcbiAgICB0aGF0LnZpZXcucmVuZGVyKCd1cGRhdGVFbGVtZW50
Q291bnQnLCB0b2Rvcy5hY3RpdmUpXG4gICAgdGhhdC52aWV3LnJlbmRlcignY2xlYXJDb21wbGV0
ZWRCdXR0b24nLCB7XG4gICAgICBjb21wbGV0ZWQ6IHRvZG9zLmNvbXBsZXRlZCxcbiAgICAgIHZp
c2libGU6IHRvZG9zLmNvbXBsZXRlZCA+IDBcbiAgICB9KVxuXG4gICAgdGhhdC52aWV3LnJlbmRl
cigndG9nZ2xlQWxsJywge2NoZWNrZWQ6IHRvZG9zLmNvbXBsZXRlZCA9PT0gdG9kb3MudG90YWx9
KVxuICAgIHRoYXQudmlldy5yZW5kZXIoJ2NvbnRlbnRCbG9ja1Zpc2liaWxpdHknLCB7dmlzaWJs
ZTogdG9kb3MudG90YWwgPiAwfSlcbiAgfSlcbn1cblxuLyoqXG4qIFJlLWZpbHRlcnMgdGhlIHRv
ZG8gaXRlbXMsIGJhc2VkIG9uIHRoZSBhY3RpdmUgcm91dGUuXG4qIEBwYXJhbSB7Ym9vbGVhbnx1
bmRlZmluZWR9IGZvcmNlICBmb3JjZXMgYSByZS1wYWludGluZyBvZiB0b2RvIGl0ZW1zLlxuKi9c
bkNvbnRyb2xsZXIucHJvdG90eXBlLl9maWx0ZXIgPSBmdW5jdGlvbihmb3JjZSkge1xuICB2YXIg
YWN0aXZlUm91dGUgPSB0aGlzLl9hY3RpdmVSb3V0ZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSAr
IHRoaXMuX2FjdGl2ZVJvdXRlLnN1YnN0cigxKVxuXG4gIC8vIFVwZGF0ZSB0aGUgZWxlbWVudHMg
b24gdGhlIHBhZ2UsIHdoaWNoIGNoYW5nZSB3aXRoIGVhY2ggY29tcGxldGVkIHRvZG9cbiAgdGhp
cy5fdXBkYXRlQ291bnQoKVxuXG4gIC8vIElmIHRoZSBsYXN0IGFjdGl2ZSByb3V0ZSBpc24ndCBc
IkFsbFwiLCBvciB3ZSdyZSBzd2l0Y2hpbmcgcm91dGVzLCB3ZVxuICAvLyByZS1jcmVhdGUgdGhl
IHRvZG8gaXRlbSBlbGVtZW50cywgY2FsbGluZzpcbiAgLy8gICB0aGlzLnNob3dbQWxsfEFjdGl2
ZXxDb21wbGV0ZWRdKCk7XG4gIGlmIChmb3JjZSB8fCB0aGlzLl9sYXN0QWN0aXZlUm91dGUgIT09
ICdBbGwnIHx8IHRoaXMuX2xhc3RBY3RpdmVSb3V0ZSAhPT0gYWN0aXZlUm91dGUpIHtcbiAgICB0
aGlzWydzaG93JyArIGFjdGl2ZVJvdXRlXSgpXG4gIH1cblxuICB0aGlzLl9sYXN0QWN0aXZlUm91
dGUgPSBhY3RpdmVSb3V0ZVxufVxuXG4vKipcbiogU2ltcGx5IHVwZGF0ZXMgdGhlIGZpbHRlciBu
YXYncyBzZWxlY3RlZCBzdGF0ZXNcbiovXG5Db250cm9sbGVyLnByb3RvdHlwZS5fdXBkYXRlRmls
dGVyU3RhdGUgPSBmdW5jdGlvbihjdXJyZW50UGFnZSkge1xuICAvLyBTdG9yZSBhIHJlZmVyZW5j
ZSB0byB0aGUgYWN0aXZlIHJvdXRlLCBhbGxvd2luZyB1cyB0byByZS1maWx0ZXIgdG9kb1xuICAv
LyBpdGVtcyBhcyB0aGV5IGFyZSBtYXJrZWQgY29tcGxldGUgb3IgaW5jb21wbGV0ZS5cbiAgY3Vy
cmVudFBhZ2UgPSBjdXJyZW50UGFnZS5zcGxpdCgnPycpWzBdXG4gIHRoaXMuX2FjdGl2ZVJvdXRl
ID0gY3VycmVudFBhZ2VcblxuICBpZiAoY3VycmVudFBhZ2UgPT09ICcnKSB7XG4gICAgdGhpcy5f
YWN0aXZlUm91dGUgPSAnQWxsJ1xuICB9XG5cbiAgdGhpcy5fZmlsdGVyKClcblxuICB0aGlzLnZp
ZXcucmVuZGVyKCdzZXRGaWx0ZXInLCBjdXJyZW50UGFnZSlcbn1cblxuXG5cbi8vIFdFQlBBQ0sg
Rk9PVEVSIC8vXG4vLyAuL2NvbnRyb2xsZXIuanMiLCIoZnVuY3Rpb24ocm9vdCkge1xuICB2YXIg
bG9jYWxTdG9yYWdlTWVtb3J5ID0ge307XG4gIHZhciBjYWNoZSA9IHt9O1xuXG4gIC8qKlxuICAg
KiBudW1iZXIgb2Ygc3RvcmVkIGl0ZW1zLlxuICAgKi9cbiAgbG9jYWxTdG9yYWdlTWVtb3J5Lmxl
bmd0aCA9IDA7XG5cbiAgLyoqXG4gICAqIHJldHVybnMgaXRlbSBmb3IgcGFzc2VkIGtleSwgb3Ig
bnVsbFxuICAgKlxuICAgKiBAcGFyYSB7U3RyaW5nfSBrZXlcbiAgICogICAgICAgbmFtZSBvZiBp
dGVtIHRvIGJlIHJldHVybmVkXG4gICAqIEByZXR1cm5zIHtTdHJpbmd8bnVsbH1cbiAgICovXG4g
IGxvY2FsU3RvcmFnZU1lbW9yeS5nZXRJdGVtID0gZnVuY3Rpb24oa2V5KSB7XG4gICAgcmV0dXJu
IGNhY2hlW2tleV0gfHwgbnVsbDtcbiAgfTtcblxuICAvKipcbiAgICogc2V0cyBpdGVtIGZvciBr
ZXkgdG8gcGFzc2VkIHZhbHVlLCBhcyBTdHJpbmdcbiAgICpcbiAgICogQHBhcmEge1N0cmluZ30g
a2V5XG4gICAqICAgICAgIG5hbWUgb2YgaXRlbSB0byBiZSBzZXRcbiAgICogQHBhcmEge1N0cmlu
Z30gdmFsdWVcbiAgICogICAgICAgdmFsdWUsIHdpbGwgYWx3YXlzIGJlIHR1cm5lZCBpbnRvIGEg
U3RyaW5nXG4gICAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gICAqL1xuICBsb2NhbFN0b3JhZ2VN
ZW1vcnkuc2V0SXRlbSA9IGZ1bmN0aW9uKGtleSwgdmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHZh
bHVlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgbG9jYWxTdG9yYWdlTWVtb3J5LnJlbW92ZUl0
ZW0oa2V5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCEoY2FjaGUuaGFzT3duUHJvcGVydHko
a2V5KSkpIHtcbiAgICAgICAgbG9jYWxTdG9yYWdlTWVtb3J5Lmxlbmd0aCsrO1xuICAgICAgfVxu
XG4gICAgICBjYWNoZVtrZXldID0gJycgKyB2YWx1ZTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4g
ICAqIHJlbW92ZXMgaXRlbSBmb3IgcGFzc2VkIGtleVxuICAgKlxuICAgKiBAcGFyYSB7U3RyaW5n
fSBrZXlcbiAgICogICAgICAgbmFtZSBvZiBpdGVtIHRvIGJlIHJlbW92ZWRcbiAgICogQHJldHVy
bnMge3VuZGVmaW5lZH1cbiAgICovXG4gIGxvY2FsU3RvcmFnZU1lbW9yeS5yZW1vdmVJdGVtID0g
ZnVuY3Rpb24oa2V5KSB7XG4gICAgaWYgKGNhY2hlLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAg
ICAgIGRlbGV0ZSBjYWNoZVtrZXldO1xuICAgICAgbG9jYWxTdG9yYWdlTWVtb3J5Lmxlbmd0aC0t
O1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogcmV0dXJucyBuYW1lIG9mIGtleSBhdCBwYXNz
ZWQgaW5kZXhcbiAgICpcbiAgICogQHBhcmEge051bWJlcn0gaW5kZXhcbiAgICogICAgICAgUG9z
aXRpb24gZm9yIGtleSB0byBiZSByZXR1cm5lZCAoc3RhcnRzIGF0IDApXG4gICAqIEByZXR1cm5z
IHtTdHJpbmd8bnVsbH1cbiAgICovXG4gIGxvY2FsU3RvcmFnZU1lbW9yeS5rZXkgPSBmdW5jdGlv
bihpbmRleCkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhjYWNoZSlbaW5kZXhdIHx8IG51bGw7
XG4gIH07XG5cbiAgLyoqXG4gICAqIHJlbW92ZXMgYWxsIHN0b3JlZCBpdGVtcyBhbmQgc2V0cyBs
ZW5ndGggdG8gMFxuICAgKlxuICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICAgKi9cbiAgbG9j
YWxTdG9yYWdlTWVtb3J5LmNsZWFyID0gZnVuY3Rpb24oKSB7XG4gICAgY2FjaGUgPSB7fTtcbiAg
ICBsb2NhbFN0b3JhZ2VNZW1vcnkubGVuZ3RoID0gMDtcbiAgfTtcblxuICBpZiAodHlwZW9mIGV4
cG9ydHMgPT09ICdvYmplY3QnKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBsb2NhbFN0b3JhZ2VN
ZW1vcnk7XG4gIH0gZWxzZSB7XG4gICAgcm9vdC5sb2NhbFN0b3JhZ2VNZW1vcnkgPSBsb2NhbFN0
b3JhZ2VNZW1vcnk7XG4gIH1cbn0pKHRoaXMpO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4v
LyAuL21lbW9yeS5qcyIsImV4cG9ydCBkZWZhdWx0IE1vZGVsXG5cbi8qKlxuKiBDcmVhdGVzIGEg
bmV3IE1vZGVsIGluc3RhbmNlIGFuZCBob29rcyB1cCB0aGUgc3RvcmFnZS5cbipcbiogQGNvbnN0
cnVjdG9yXG4qIEBwYXJhbSB7b2JqZWN0fSBzdG9yYWdlIEEgcmVmZXJlbmNlIHRvIHRoZSBjbGll
bnQgc2lkZSBzdG9yYWdlIGNsYXNzXG4qL1xuZnVuY3Rpb24gTW9kZWwoc3RvcmFnZSkge1xuICB0
aGlzLnN0b3JhZ2UgPSBzdG9yYWdlXG59XG5cbi8qKlxuKiBDcmVhdGVzIGEgbmV3IHRvZG8gbW9k
ZWxcbipcbiogQHBhcmFtIHtzdHJpbmd9IFt0aXRsZV0gVGhlIHRpdGxlIG9mIHRoZSB0YXNrXG4q
IEBwYXJhbSB7ZnVuY3Rpb259IFtjYWxsYmFja10gVGhlIGNhbGxiYWNrIHRvIGZpcmUgYWZ0ZXIg
dGhlIG1vZGVsIGlzIGNyZWF0ZWRcbiovXG5Nb2RlbC5wcm90b3R5cGUuY3JlYXRlID0gZnVuY3Rp
b24odGl0bGUsIGNhbGxiYWNrKSB7XG4gIHRpdGxlID0gdGl0bGUgfHwgJydcbiAgY2FsbGJhY2sg
PSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHtcbiAgfVxuXG4gIHZhciBuZXdJdGVtID0ge1xuICAg
IHRpdGxlOiB0aXRsZS50cmltKCksXG4gICAgY29tcGxldGVkOiBmYWxzZVxuICB9XG5cbiAgdGhp
cy5zdG9yYWdlLnNhdmUobmV3SXRlbSwgY2FsbGJhY2spXG59XG5cbi8qKlxuICogRmluZHMgYW5k
IHJldHVybnMgYSBtb2RlbCBpbiBzdG9yYWdlLiBJZiBubyBxdWVyeSBpcyBnaXZlbiBpdCdsbCBz
aW1wbHlcbiAqIHJldHVybiBldmVyeXRoaW5nLiBJZiB5b3UgcGFzcyBpbiBhIHN0cmluZyBvciBu
dW1iZXIgaXQnbGwgbG9vayB0aGF0IHVwIGFzXG4gKiB0aGUgSUQgb2YgdGhlIG1vZGVsIHRvIGZp
bmQuIExhc3RseSwgeW91IGNhbiBwYXNzIGl0IGFuIG9iamVjdCB0byBtYXRjaCBhZ2FpbnN0Llxu
ICpcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcnxvYmplY3R9IFtxdWVyeV0gQSBxdWVyeSB0byBt
YXRjaCBtb2RlbHMgYWdhaW5zdFxuICogQHBhcmFtIHtmdW5jdGlvbn0gW2NhbGxiYWNrXSBUaGUg
Y2FsbGJhY2sgdG8gZmlyZSBhZnRlciB0aGUgbW9kZWwgaXMgZm91bmRcbiAqXG4gKiBAZXhhbXBs
ZVxuICogbW9kZWwucmVhZCgxLCBmdW5jKTsgLy8gV2lsbCBmaW5kIHRoZSBtb2RlbCB3aXRoIGFu
IElEIG9mIDFcbiAqIG1vZGVsLnJlYWQoJzEnKTsgLy8gU2FtZSBhcyBhYm92ZVxuICogLy9CZWxv
dyB3aWxsIGZpbmQgYSBtb2RlbCB3aXRoIGZvbyBlcXVhbGxpbmcgYmFyIGFuZCBoZWxsbyBlcXVh
bGxpbmcgd29ybGQuXG4gKiBtb2RlbC5yZWFkKHsgZm9vOiAnYmFyJywgaGVsbG86ICd3b3JsZCcg
fSk7XG4gKi9cbk1vZGVsLnByb3RvdHlwZS5yZWFkID0gZnVuY3Rpb24ocXVlcnksIGNhbGxiYWNr
KSB7XG4gIHZhciBxdWVyeVR5cGUgPSB0eXBlb2YgcXVlcnlcbiAgY2FsbGJhY2sgPSBjYWxsYmFj
ayB8fCBmdW5jdGlvbigpIHtcbiAgfVxuXG4gIGlmIChxdWVyeVR5cGUgPT09ICdmdW5jdGlvbicp
IHtcbiAgICBjYWxsYmFjayA9IHF1ZXJ5XG4gICAgcmV0dXJuIHRoaXMuc3RvcmFnZS5maW5kQWxs
KGNhbGxiYWNrKVxuICB9IGVsc2UgaWYgKHF1ZXJ5VHlwZSA9PT0gJ3N0cmluZycgfHwgcXVlcnlU
eXBlID09PSAnbnVtYmVyJykge1xuICAgIHF1ZXJ5ID0gcGFyc2VJbnQocXVlcnksIDEwKVxuICAg
IHRoaXMuc3RvcmFnZS5maW5kKHtpZDogcXVlcnl9LCBjYWxsYmFjaylcbiAgfSBlbHNlIHtcbiAg
ICB0aGlzLnN0b3JhZ2UuZmluZChxdWVyeSwgY2FsbGJhY2spXG4gIH1cbiAgcmV0dXJuIHVuZGVm
aW5lZFxufVxuXG4vKipcbiogVXBkYXRlcyBhIG1vZGVsIGJ5IGdpdmluZyBpdCBhbiBJRCwgZGF0
YSB0byB1cGRhdGUsIGFuZCBhIGNhbGxiYWNrIHRvIGZpcmUgd2hlblxuKiB0aGUgdXBkYXRlIGlz
IGNvbXBsZXRlLlxuKlxuKiBAcGFyYW0ge251bWJlcn0gaWQgVGhlIGlkIG9mIHRoZSBtb2RlbCB0
byB1cGRhdGVcbiogQHBhcmFtIHtvYmplY3R9IGRhdGEgVGhlIHByb3BlcnRpZXMgdG8gdXBkYXRl
IGFuZCB0aGVpciBuZXcgdmFsdWVcbiogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGNh
bGxiYWNrIHRvIGZpcmUgd2hlbiB0aGUgdXBkYXRlIGlzIGNvbXBsZXRlLlxuKi9cbk1vZGVsLnBy
b3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbihpZCwgZGF0YSwgY2FsbGJhY2spIHtcbiAgdGhpcy5z
dG9yYWdlLnNhdmUoZGF0YSwgY2FsbGJhY2ssIGlkKVxufVxuXG4vKipcbiogUmVtb3ZlcyBhIG1v
ZGVsIGZyb20gc3RvcmFnZVxuKlxuKiBAcGFyYW0ge251bWJlcn0gaWQgVGhlIElEIG9mIHRoZSBt
b2RlbCB0byByZW1vdmVcbiogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGNhbGxiYWNr
IHRvIGZpcmUgd2hlbiB0aGUgcmVtb3ZhbCBpcyBjb21wbGV0ZS5cbiovXG5Nb2RlbC5wcm90b3R5
cGUucmVtb3ZlID0gZnVuY3Rpb24oaWQsIGNhbGxiYWNrKSB7XG4gIHRoaXMuc3RvcmFnZS5yZW1v
dmUoaWQsIGNhbGxiYWNrKVxufVxuXG4vKipcbiogV0FSTklORzogV2lsbCByZW1vdmUgQUxMIGRh
dGEgZnJvbSBzdG9yYWdlLlxuKlxuKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgY2Fs
bGJhY2sgdG8gZmlyZSB3aGVuIHRoZSBzdG9yYWdlIGlzIHdpcGVkLlxuKi9cbk1vZGVsLnByb3Rv
dHlwZS5yZW1vdmVBbGwgPSBmdW5jdGlvbihjYWxsYmFjaykge1xuICB0aGlzLnN0b3JhZ2UuZHJv
cChjYWxsYmFjaylcbn1cblxuLyoqXG4qIFJldHVybnMgYSBjb3VudCBvZiBhbGwgdG9kb3Ncbiov
XG5Nb2RlbC5wcm90b3R5cGUuZ2V0Q291bnQgPSBmdW5jdGlvbihjYWxsYmFjaykge1xuICB2YXIg
dG9kb3MgPSB7XG4gICAgYWN0aXZlOiAwLFxuICAgIGNvbXBsZXRlZDogMCxcbiAgICB0b3RhbDog
MFxuICB9XG5cbiAgdGhpcy5zdG9yYWdlLmZpbmRBbGwoZnVuY3Rpb24oZGF0YSkge1xuICAgIGRh
dGEuZm9yRWFjaChmdW5jdGlvbih0b2RvKSB7XG4gICAgICBpZiAodG9kby5jb21wbGV0ZWQpIHtc
biAgICAgICAgdG9kb3MuY29tcGxldGVkKytcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRvZG9z
LmFjdGl2ZSsrXG4gICAgICB9XG5cbiAgICAgIHRvZG9zLnRvdGFsKytcbiAgICB9KVxuICAgIGNh
bGxiYWNrKHRvZG9zKVxuICB9KVxufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4v
bW9kZWwuanMiLCJpbXBvcnQge3JlbW92ZX0gZnJvbSAnLi9oZWxwZXJzJ1xuaW1wb3J0ICogYXMg
bG9jYWxTdG9yYWdlTWVtb3J5IGZyb20gJy4vbWVtb3J5J1xuZXhwb3J0IGRlZmF1bHQgU3RvcmVc
blxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IGNsaWVudCBzaWRlIHN0b3JhZ2Ugb2JqZWN0IGFuZCB3
aWxsIGNyZWF0ZSBhbiBlbXB0eVxuICogY29sbGVjdGlvbiBpZiBubyBjb2xsZWN0aW9uIGFscmVh
ZHkgZXhpc3RzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIFRoZSBuYW1lIG9mIG91ciBE
QiB3ZSB3YW50IHRvIHVzZVxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgT3VyIGZha2Ug
REIgdXNlcyBjYWxsYmFja3MgYmVjYXVzZSBpblxuICogcmVhbCBsaWZlIHlvdSBwcm9iYWJseSB3
b3VsZCBiZSBtYWtpbmcgQUpBWCBjYWxsc1xuICovXG5mdW5jdGlvbiBTdG9yZShuYW1lLCBjYWxs
YmFjaykge1xuICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCkge1xuICB9XG5cbiAg
dGhpcy5fZGJOYW1lID0gbmFtZVxuXG4gIGlmICghbG9jYWxTdG9yYWdlTWVtb3J5W25hbWVdKSB7
XG4gICAgdmFyIGRhdGEgPSB7XG4gICAgICB0b2RvczogW11cbiAgICB9XG5cbiAgICBsb2NhbFN0
b3JhZ2VNZW1vcnlbbmFtZV0gPSBKU09OLnN0cmluZ2lmeShkYXRhKVxuICB9XG5cbiAgY2FsbGJh
Y2suY2FsbCh0aGlzLCBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZU1lbW9yeVtuYW1lXSkpXG4gIHRo
aXMuc3Vic2NyaWJlcnMgPSBbXVxufVxuXG5TdG9yZS5wcm90b3R5cGUuc3Vic2NyaWJlID0gZnVu
Y3Rpb24oc3Vic2NyaWJlcikge1xuICB0aGlzLnN1YnNjcmliZXJzLnB1c2goc3Vic2NyaWJlcilc
biAgcmV0dXJuICgpID0+IHJlbW92ZSh0aGlzLnN1YnNjcmliZXJzLCBzdWJzY3JpYmVyKVxufVxu
XG5TdG9yZS5wcm90b3R5cGUuX25vdGlmeSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLnN1YnNjcmli
ZXJzLmZvckVhY2gocyA9PiBzKCkpXG59XG5cbi8qKlxuKiBGaW5kcyBpdGVtcyBiYXNlZCBvbiBh
IHF1ZXJ5IGdpdmVuIGFzIGEgSlMgb2JqZWN0XG4qXG4qIEBwYXJhbSB7b2JqZWN0fSBxdWVyeSBU
aGUgcXVlcnkgdG8gbWF0Y2ggYWdhaW5zdCAoaS5lLiB7Zm9vOiAnYmFyJ30pXG4qIEBwYXJhbSB7
ZnVuY3Rpb259IGNhbGxiYWNrICAgVGhlIGNhbGxiYWNrIHRvIGZpcmUgd2hlbiB0aGUgcXVlcnkg
aGFzXG4qIGNvbXBsZXRlZCBydW5uaW5nXG4qXG4qIEBleGFtcGxlXG4qIGRiLmZpbmQoe2Zvbzog
J2JhcicsIGhlbGxvOiAnd29ybGQnfSwgZnVuY3Rpb24gKGRhdGEpIHtcbiogICAvLyBkYXRhIHdp
bGwgcmV0dXJuIGFueSBpdGVtcyB0aGF0IGhhdmUgZm9vOiBiYXIgYW5kXG4qICAgLy8gaGVsbG86
IHdvcmxkIGluIHRoZWlyIHByb3BlcnRpZXNcbiogfSk7XG4qL1xuU3RvcmUucHJvdG90eXBlLmZp
bmQgPSBmdW5jdGlvbihxdWVyeSwgY2FsbGJhY2spIHtcbiAgaWYgKCFjYWxsYmFjaykge1xuICAg
IHJldHVyblxuICB9XG5cbiAgdmFyIHRvZG9zID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2VNZW1v
cnlbdGhpcy5fZGJOYW1lXSkudG9kb3NcblxuICBjYWxsYmFjay5jYWxsKHRoaXMsIHRvZG9zLmZp
bHRlcihmdW5jdGlvbih0b2RvKSB7XG4gICAgZm9yICh2YXIgcSBpbiBxdWVyeSkge1xuICAgICAg
aWYgKHF1ZXJ5W3FdICE9PSB0b2RvW3FdKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAg
fVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZVxuICB9KSlcbn1cblxuLyoqXG4qIFdpbGwgcmV0cmll
dmUgYWxsIGRhdGEgZnJvbSB0aGUgY29sbGVjdGlvblxuKlxuKiBAcGFyYW0ge2Z1bmN0aW9ufSBj
YWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gZmlyZSB1cG9uIHJldHJpZXZpbmcgZGF0YVxuKi9cblN0
b3JlLnByb3RvdHlwZS5maW5kQWxsID0gZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgY2FsbGJhY2sg
PSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHtcbiAgfVxuICBjYWxsYmFjay5jYWxsKHRoaXMsIEpT
T04ucGFyc2UobG9jYWxTdG9yYWdlTWVtb3J5W3RoaXMuX2RiTmFtZV0pLnRvZG9zKVxufVxuXG4v
KipcbiogV2lsbCBzYXZlIHRoZSBnaXZlbiBkYXRhIHRvIHRoZSBEQi4gSWYgbm8gaXRlbSBleGlz
dHMgaXQgd2lsbCBjcmVhdGUgYSBuZXdcbiogaXRlbSwgb3RoZXJ3aXNlIGl0J2xsIHNpbXBseSB1
cGRhdGUgYW4gZXhpc3RpbmcgaXRlbSdzIHByb3BlcnRpZXNcbipcbiogQHBhcmFtIHtvYmplY3R9
IHVwZGF0ZURhdGEgVGhlIGRhdGEgdG8gc2F2ZSBiYWNrIGludG8gdGhlIERCXG4qIEBwYXJhbSB7
ZnVuY3Rpb259IGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBmaXJlIGFmdGVyIHNhdmluZ1xuKiBA
cGFyYW0ge251bWJlcn0gaWQgQW4gb3B0aW9uYWwgcGFyYW0gdG8gZW50ZXIgYW4gSUQgb2YgYW4g
aXRlbSB0byB1cGRhdGVcbiovXG5TdG9yZS5wcm90b3R5cGUuc2F2ZSA9IGZ1bmN0aW9uKHVwZGF0
ZURhdGEsIGNhbGxiYWNrLCBpZCkge1xuICB2YXIgZGF0YSA9IEpTT04ucGFyc2UobG9jYWxTdG9y
YWdlTWVtb3J5W3RoaXMuX2RiTmFtZV0pXG4gIHZhciB0b2RvcyA9IGRhdGEudG9kb3NcblxuICBj
YWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCkge1xuICB9XG5cbiAgLy8gSWYgYW4gSUQg
d2FzIGFjdHVhbGx5IGdpdmVuLCBmaW5kIHRoZSBpdGVtIGFuZCB1cGRhdGUgZWFjaCBwcm9wZXJ0
eVxuICBpZiAoaWQpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRvZG9zLmxlbmd0aDsgaSsr
KSB7XG4gICAgICBpZiAodG9kb3NbaV0uaWQgPT09IGlkKSB7XG4gICAgICAgIGZvciAodmFyIGtl
eSBpbiB1cGRhdGVEYXRhKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZ3VhcmQtZm9yLWluXG4g
ICAgICAgICAgdG9kb3NbaV1ba2V5XSA9IHVwZGF0ZURhdGFba2V5XVxuICAgICAgICB9XG4gICAg
ICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuXG4gICAgbG9jYWxTdG9yYWdlTWVtb3J5W3RoaXMu
X2RiTmFtZV0gPSBKU09OLnN0cmluZ2lmeShkYXRhKVxuICAgIGNhbGxiYWNrLmNhbGwodGhpcywg
SlNPTi5wYXJzZShsb2NhbFN0b3JhZ2VNZW1vcnlbdGhpcy5fZGJOYW1lXSkudG9kb3MpXG4gIH0g
ZWxzZSB7XG4gICAgLy8gR2VuZXJhdGUgYW4gSURcbiAgICB1cGRhdGVEYXRhLmlkID0gbmV3IERh
dGUoKS5nZXRUaW1lKClcblxuICAgIHRvZG9zLnB1c2godXBkYXRlRGF0YSlcbiAgICBsb2NhbFN0
b3JhZ2VNZW1vcnlbdGhpcy5fZGJOYW1lXSA9IEpTT04uc3RyaW5naWZ5KGRhdGEpXG4gICAgY2Fs
bGJhY2suY2FsbCh0aGlzLCBbdXBkYXRlRGF0YV0pXG4gIH1cbiAgdGhpcy5fbm90aWZ5KClcbn1c
blxuLyoqXG4qIFdpbGwgcmVtb3ZlIGFuIGl0ZW0gZnJvbSB0aGUgU3RvcmUgYmFzZWQgb24gaXRz
IElEXG4qXG4qIEBwYXJhbSB7bnVtYmVyfSBpZCBUaGUgSUQgb2YgdGhlIGl0ZW0geW91IHdhbnQg
dG8gcmVtb3ZlXG4qIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBm
aXJlIGFmdGVyIHNhdmluZ1xuKi9cblN0b3JlLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbihp
ZCwgY2FsbGJhY2spIHtcbiAgdmFyIGRhdGEgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZU1lbW9y
eVt0aGlzLl9kYk5hbWVdKVxuICB2YXIgdG9kb3MgPSBkYXRhLnRvZG9zXG5cbiAgZm9yICh2YXIg
aSA9IDA7IGkgPCB0b2Rvcy5sZW5ndGg7IGkrKykge1xuICAgIGlmICh0b2Rvc1tpXS5pZCA9PT0g
aWQpIHtcbiAgICAgIHRvZG9zLnNwbGljZShpLCAxKVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1c
blxuICBsb2NhbFN0b3JhZ2VNZW1vcnlbdGhpcy5fZGJOYW1lXSA9IEpTT04uc3RyaW5naWZ5KGRh
dGEpXG4gIGNhbGxiYWNrLmNhbGwodGhpcywgSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2VNZW1vcnlb
dGhpcy5fZGJOYW1lXSkudG9kb3MpXG4gIHRoaXMuX25vdGlmeSgpXG59XG5cbi8qKlxuKiBXaWxs
IGRyb3AgYWxsIHN0b3JhZ2UgYW5kIHN0YXJ0IGZyZXNoXG4qXG4qIEBwYXJhbSB7ZnVuY3Rpb259
IGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBmaXJlIGFmdGVyIGRyb3BwaW5nIHRoZSBkYXRhXG4q
L1xuU3RvcmUucHJvdG90eXBlLmRyb3AgPSBmdW5jdGlvbihjYWxsYmFjaykge1xuICBsb2NhbFN0
b3JhZ2VNZW1vcnlbdGhpcy5fZGJOYW1lXSA9IEpTT04uc3RyaW5naWZ5KHt0b2RvczogW119KVxu
ICBjYWxsYmFjay5jYWxsKHRoaXMsIEpTT04ucGFyc2UobG9jYWxTdG9yYWdlTWVtb3J5W3RoaXMu
X2RiTmFtZV0pLnRvZG9zKVxuICB0aGlzLl9ub3RpZnkoKVxufVxuXG5cblxuLy8gV0VCUEFDSyBG
T09URVIgLy9cbi8vIC4vc3RvcmUuanMiLCJleHBvcnQgZGVmYXVsdCBUZW1wbGF0ZVxuXG52YXIg
aHRtbEVzY2FwZXMgPSB7XG4gICcmJzogJyZhbXA7JyxcbiAgJzwnOiAnJmx0OycsXG4gICc+Jzog
JyZndDsnLFxuICAnXCInOiAnJnF1b3Q7JyxcbiAgJ1xcJyc6ICcmI3gyNzsnLFxuICAnYCc6ICcm
I3g2MDsnXG59XG5cbnZhciBlc2NhcGVIdG1sQ2hhciA9IGZ1bmN0aW9uKGNocikge1xuICByZXR1
cm4gaHRtbEVzY2FwZXNbY2hyXVxufVxuXG52YXIgcmVVbmVzY2FwZWRIdG1sID0gL1smPD5cIidg
XS9nXG52YXIgcmVIYXNVbmVzY2FwZWRIdG1sID0gbmV3IFJlZ0V4cChyZVVuZXNjYXBlZEh0bWwu
c291cmNlKVxuXG52YXIgZXNjYXBlID0gZnVuY3Rpb24oc3RyaW5nKSB7XG4gIGlmIChzdHJpbmcg
JiYgcmVIYXNVbmVzY2FwZWRIdG1sLnRlc3Qoc3RyaW5nKSkge1xuICAgIHJldHVybiBzdHJpbmcu
cmVwbGFjZShyZVVuZXNjYXBlZEh0bWwsIGVzY2FwZUh0bWxDaGFyKVxuICB9IGVsc2Uge1xuICAg
IHJldHVybiBzdHJpbmdcbiAgfVxufVxuXG4vKipcbiogU2V0cyB1cCBkZWZhdWx0cyBmb3IgYWxs
IHRoZSBUZW1wbGF0ZSBtZXRob2RzIHN1Y2ggYXMgYSBkZWZhdWx0IHRlbXBsYXRlXG4qXG4qIEBj
b25zdHJ1Y3RvclxuKi9cbmZ1bmN0aW9uIFRlbXBsYXRlKCkge1xuICB0aGlzLmRlZmF1bHRUZW1w
bGF0ZSA9IGBcbiAgICA8bGkgZGF0YS1pZD1cInt7aWR9fVwiIGNsYXNzPVwie3tjb21wbGV0ZWR9
fVwiPlxuICAgICAgPGRpdiBjbGFzcz1cInZpZXdcIj5cbiAgICAgICAgPGlucHV0IGNsYXNzPVwi
dG9nZ2xlXCIgdHlwZT1cImNoZWNrYm94XCIge3tjaGVja2VkfX0gLz5cbiAgICAgICAgPGxhYmVs
Pnt7dGl0bGV9fTwvbGFiZWw+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJkZXN0cm95XCI+PC9i
dXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2xpPlxuICBgXG59XG5cbi8qKlxuICogQ3JlYXRl
cyBhbiA8bGk+IEhUTUwgc3RyaW5nIGFuZCByZXR1cm5zIGl0IGZvciBwbGFjZW1lbnQgaW4geW91
ciBhcHAuXG4gKlxuICogTk9URTogSW4gcmVhbCBsaWZlIHlvdSBzaG91bGQgYmUgdXNpbmcgYSB0
ZW1wbGF0aW5nIGVuZ2luZSBzdWNoIGFzIE11c3RhY2hlXG4gKiBvciBIYW5kbGViYXJzLCBob3dl
dmVyLCB0aGlzIGlzIGEgdmFuaWxsYSBKUyBleGFtcGxlLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0
fSBkYXRhIFRoZSBvYmplY3QgY29udGFpbmluZyBrZXlzIHlvdSB3YW50IHRvIGZpbmQgaW4gdGhl
XG4gKiAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZSB0byByZXBsYWNlLlxuICogQHJldHVy
bnMge3N0cmluZ30gSFRNTCBTdHJpbmcgb2YgYW4gPGxpPiBlbGVtZW50XG4gKlxuICogQGV4YW1w
bGVcbiAqIHZpZXcuc2hvdyh7XG4gKiAgaWQ6IDEsXG4gKiAgdGl0bGU6IFwiSGVsbG8gV29ybGRc
IixcbiAqICBjb21wbGV0ZWQ6IDAsXG4gKiB9KTtcbiAqL1xuVGVtcGxhdGUucHJvdG90eXBlLnNo
b3cgPSBmdW5jdGlvbihkYXRhKSB7XG4gIHZhciBpLCBsXG4gIHZhciB2aWV3ID0gJydcblxuICBm
b3IgKGkgPSAwLCBsID0gZGF0YS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICB2YXIgdGVtcGxh
dGUgPSB0aGlzLmRlZmF1bHRUZW1wbGF0ZVxuICAgIHZhciBjb21wbGV0ZWQgPSAnJ1xuICAgIHZh
ciBjaGVja2VkID0gJydcblxuICAgIGlmIChkYXRhW2ldLmNvbXBsZXRlZCkge1xuICAgICAgY29t
cGxldGVkID0gJ2NvbXBsZXRlZCdcbiAgICAgIGNoZWNrZWQgPSAnY2hlY2tlZCdcbiAgICB9XG5c
biAgICB0ZW1wbGF0ZSA9IHRlbXBsYXRlLnJlcGxhY2UoJ3t7aWR9fScsIGRhdGFbaV0uaWQpXG4g
ICAgdGVtcGxhdGUgPSB0ZW1wbGF0ZS5yZXBsYWNlKCd7e3RpdGxlfX0nLCBlc2NhcGUoZGF0YVtp
XS50aXRsZSkpXG4gICAgdGVtcGxhdGUgPSB0ZW1wbGF0ZS5yZXBsYWNlKCd7e2NvbXBsZXRlZH19
JywgY29tcGxldGVkKVxuICAgIHRlbXBsYXRlID0gdGVtcGxhdGUucmVwbGFjZSgne3tjaGVja2Vk
fX0nLCBjaGVja2VkKVxuXG4gICAgdmlldyA9IHZpZXcgKyB0ZW1wbGF0ZVxuICB9XG5cbiAgcmV0
dXJuIHZpZXdcbn1cblxuLyoqXG4gKiBEaXNwbGF5cyBhIGNvdW50ZXIgb2YgaG93IG1hbnkgdG8g
ZG9zIGFyZSBsZWZ0IHRvIGNvbXBsZXRlXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGFjdGl2ZVRv
ZG9zIFRoZSBudW1iZXIgb2YgYWN0aXZlIHRvZG9zLlxuICogQHJldHVybnMge3N0cmluZ30gU3Ry
aW5nIGNvbnRhaW5pbmcgdGhlIGNvdW50XG4gKi9cblRlbXBsYXRlLnByb3RvdHlwZS5pdGVtQ291
bnRlciA9IGZ1bmN0aW9uKGFjdGl2ZVRvZG9zKSB7XG4gIHZhciBwbHVyYWwgPSBhY3RpdmVUb2Rv
cyA9PT0gMSA/ICcnIDogJ3MnXG5cbiAgcmV0dXJuICc8c3Ryb25nPicgKyBhY3RpdmVUb2RvcyAr
ICc8L3N0cm9uZz4gaXRlbScgKyBwbHVyYWwgKyAnIGxlZnQnXG59XG5cbi8qKlxuICogVXBkYXRl
cyB0aGUgdGV4dCB3aXRoaW4gdGhlIFwiQ2xlYXIgY29tcGxldGVkXCIgYnV0dG9uXG4gKlxuICog
QHBhcmFtICB7W3R5cGVdfSBjb21wbGV0ZWRUb2RvcyBUaGUgbnVtYmVyIG9mIGNvbXBsZXRlZCB0
b2Rvcy5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFN0cmluZyBjb250YWluaW5nIHRoZSBjb3VudFxu
ICovXG5UZW1wbGF0ZS5wcm90b3R5cGUuY2xlYXJDb21wbGV0ZWRCdXR0b24gPSBmdW5jdGlvbihj
b21wbGV0ZWRUb2Rvcykge1xuICBpZiAoY29tcGxldGVkVG9kb3MgPiAwKSB7XG4gICAgcmV0dXJu
ICdDbGVhciBjb21wbGV0ZWQnXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuICcnXG4gIH1cbn1cblxu
XG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3RlbXBsYXRlLmpzIiwiaW1wb3J0IFZpZXcg
ZnJvbSAnLi92aWV3J1xuaW1wb3J0IENvbnRyb2xsZXIgZnJvbSAnLi9jb250cm9sbGVyJ1xuaW1w
b3J0IE1vZGVsIGZyb20gJy4vbW9kZWwnXG5pbXBvcnQgU3RvcmUgZnJvbSAnLi9zdG9yZSdcbmlt
cG9ydCBUZW1wbGF0ZSBmcm9tICcuL3RlbXBsYXRlJ1xuaW1wb3J0IHtyZW1vdmV9IGZyb20gJy4v
aGVscGVycydcblxuZXhwb3J0IHt1cGRhdGVUb2RvLCBnZXRUb2RvLCBzdWJzY3JpYmV9XG5cbmxl
dCB0b2RvXG5jb25zdCBzdWJzY3JpYmVycyA9IFtdXG5cbi8qKlxuICogU2V0cyB1cCBhIGJyYW5k
IG5ldyBUb2RvIGxpc3QuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgVGhlIG5hbWUgb2Yg
eW91ciBuZXcgdG8gZG8gbGlzdC5cbiAqL1xuZnVuY3Rpb24gVG9kbyhuYW1lKSB7XG4gIHRoaXMu
c3RvcmFnZSA9IG5ldyBTdG9yZShuYW1lKVxuICB0aGlzLm1vZGVsID0gbmV3IE1vZGVsKHRoaXMu
c3RvcmFnZSlcbiAgdGhpcy50ZW1wbGF0ZSA9IG5ldyBUZW1wbGF0ZSgpXG4gIHRoaXMudmlldyA9
IG5ldyBWaWV3KHRoaXMudGVtcGxhdGUpXG4gIHRoaXMuY29udHJvbGxlciA9IG5ldyBDb250cm9s
bGVyKHRoaXMubW9kZWwsIHRoaXMudmlldylcbn1cblxuZnVuY3Rpb24gdXBkYXRlVG9kbygpIHtc
biAgdG9kbyA9IG5ldyBUb2RvKCd0b2Rvcy12YW5pbGxhanMnKVxuICB0b2RvLmNvbnRyb2xsZXIu
c2V0Vmlldyhkb2N1bWVudC5sb2NhdGlvbi5oYXNoKVxuICBzdWJzY3JpYmVycy5mb3JFYWNoKHMg
PT4gcygpKVxufVxuXG5mdW5jdGlvbiBnZXRUb2RvKCkge1xuICByZXR1cm4gdG9kb1xufVxuXG5m
dW5jdGlvbiBzdWJzY3JpYmUoY2IpIHtcbiAgc3Vic2NyaWJlcnMucHVzaChjYilcbiAgcmV0dXJu
IGZ1bmN0aW9uIHVuc3Vic2NyaWJlKCkge1xuICAgIHJlbW92ZShzdWJzY3JpYmVycywgY2IpXG4g
IH1cbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3RvZG8uanMiLCIvKiBlc2xp
bnQgbm8taW52YWxpZC10aGlzOiAwLCBjb21wbGV4aXR5OlsyLCA5XSAqL1xuaW1wb3J0IHtxcywg
cXNhLCAkb24sICRwYXJlbnQsICRkZWxlZ2F0ZX0gZnJvbSAnLi9oZWxwZXJzJ1xuXG4vKipcbiAq
IFZpZXcgdGhhdCBhYnN0cmFjdHMgYXdheSB0aGUgYnJvd3NlcidzIERPTSBjb21wbGV0ZWx5Llxu
ICogSXQgaGFzIHR3byBzaW1wbGUgZW50cnkgcG9pbnRzOlxuICpcbiAqICAgLSBiaW5kKGV2ZW50
TmFtZSwgaGFuZGxlcilcbiAqICAgICBUYWtlcyBhIHRvZG8gYXBwbGljYXRpb24gZXZlbnQgYW5k
IHJlZ2lzdGVycyB0aGUgaGFuZGxlclxuICogICAtIHJlbmRlcihjb21tYW5kLCBwYXJhbWV0ZXJP
YmplY3QpXG4gKiAgICAgUmVuZGVycyB0aGUgZ2l2ZW4gY29tbWFuZCB3aXRoIHRoZSBvcHRpb25z
XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZpZXcge1xuICBjb25zdHJ1Y3Rvcih0ZW1wbGF0
ZSkge1xuICAgIHRoaXMudGVtcGxhdGUgPSB0ZW1wbGF0ZVxuXG4gICAgdGhpcy5FTlRFUl9LRVkg
PSAxM1xuICAgIHRoaXMuRVNDQVBFX0tFWSA9IDI3XG5cbiAgICB0aGlzLiR0b2RvTGlzdCA9IHFz
KCcudG9kby1saXN0JylcbiAgICB0aGlzLiR0b2RvSXRlbUNvdW50ZXIgPSBxcygnLnRvZG8tY291
bnQnKVxuICAgIHRoaXMuJGNsZWFyQ29tcGxldGVkID0gcXMoJy5jbGVhci1jb21wbGV0ZWQnKVxu
ICAgIHRoaXMuJG1haW4gPSBxcygnLm1haW4nKVxuICAgIHRoaXMuJGZvb3RlciA9IHFzKCcuZm9v
dGVyJylcbiAgICB0aGlzLiR0b2dnbGVBbGwgPSBxcygnLnRvZ2dsZS1hbGwnKVxuICAgIHRoaXMu
JG5ld1RvZG8gPSBxcygnLm5ldy10b2RvJylcbiAgfVxuXG4gIF9yZW1vdmVJdGVtKGlkKSB7XG4g
ICAgdmFyIGVsZW0gPSBxcygnW2RhdGEtaWQ9XCInICsgaWQgKyAnXCJdJylcblxuICAgIGlmIChl
bGVtKSB7XG4gICAgICB0aGlzLiR0b2RvTGlzdC5yZW1vdmVDaGlsZChlbGVtKVxuICAgIH1cbiAg
fVxuXG4gIF9jbGVhckNvbXBsZXRlZEJ1dHRvbihjb21wbGV0ZWRDb3VudCwgdmlzaWJsZSkge1xu
ICAgIHRoaXMuJGNsZWFyQ29tcGxldGVkLmlubmVySFRNTCA9IHRoaXMudGVtcGxhdGUuY2xlYXJD
b21wbGV0ZWRCdXR0b24oY29tcGxldGVkQ291bnQpXG4gICAgdGhpcy4kY2xlYXJDb21wbGV0ZWQu
c3R5bGUuZGlzcGxheSA9IHZpc2libGUgPyAnYmxvY2snIDogJ25vbmUnXG4gIH1cblxuICBfZWRp
dEl0ZW1Eb25lKGlkLCB0aXRsZSkge1xuICAgIHZhciBsaXN0SXRlbSA9IHFzKCdbZGF0YS1pZD1c
IicgKyBpZCArICdcIl0nKVxuXG4gICAgaWYgKCFsaXN0SXRlbSkge1xuICAgICAgcmV0dXJuXG4g
ICAgfVxuXG4gICAgdmFyIGlucHV0ID0gcXMoJ2lucHV0LmVkaXQnLCBsaXN0SXRlbSlcbiAgICBs
aXN0SXRlbS5yZW1vdmVDaGlsZChpbnB1dClcblxuICAgIGxpc3RJdGVtLmNsYXNzTmFtZSA9IGxp
c3RJdGVtLmNsYXNzTmFtZS5yZXBsYWNlKCdlZGl0aW5nJywgJycpXG5cbiAgICBxc2EoJ2xhYmVs
JywgbGlzdEl0ZW0pLmZvckVhY2goZnVuY3Rpb24obGFiZWwpIHtcbiAgICAgIGxhYmVsLnRleHRD
b250ZW50ID0gdGl0bGVcbiAgICB9KVxuICB9XG5cbiAgcmVuZGVyKHZpZXdDbWQsIHBhcmFtZXRl
cikge1xuICAgIHZhciB0aGF0ID0gdGhpc1xuICAgIHZhciB2aWV3Q29tbWFuZHMgPSB7XG4gICAg
ICBzaG93RW50cmllczogZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoYXQuJHRvZG9MaXN0LmlubmVy
SFRNTCA9IHRoYXQudGVtcGxhdGUuc2hvdyhwYXJhbWV0ZXIpXG4gICAgICB9LFxuICAgICAgcmVt
b3ZlSXRlbTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoYXQuX3JlbW92ZUl0ZW0ocGFyYW1ldGVy
KVxuICAgICAgfSxcbiAgICAgIHVwZGF0ZUVsZW1lbnRDb3VudDogZnVuY3Rpb24oKSB7XG4gICAg
ICAgIHRoYXQuJHRvZG9JdGVtQ291bnRlci5pbm5lckhUTUwgPSB0aGF0LnRlbXBsYXRlLml0ZW1D
b3VudGVyKHBhcmFtZXRlcilcbiAgICAgIH0sXG4gICAgICBjbGVhckNvbXBsZXRlZEJ1dHRvbjog
ZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoYXQuX2NsZWFyQ29tcGxldGVkQnV0dG9uKHBhcmFtZXRl
ci5jb21wbGV0ZWQsIHBhcmFtZXRlci52aXNpYmxlKVxuICAgICAgfSxcbiAgICAgIGNvbnRlbnRC
bG9ja1Zpc2liaWxpdHk6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGF0LiRtYWluLnN0eWxlLmRp
c3BsYXkgPSB0aGF0LiRmb290ZXIuc3R5bGUuZGlzcGxheSA9IHBhcmFtZXRlci52aXNpYmxlID8g
J2Jsb2NrJyA6ICdub25lJ1xuICAgICAgfSxcbiAgICAgIHRvZ2dsZUFsbDogZnVuY3Rpb24oKSB7
XG4gICAgICAgIHRoYXQuJHRvZ2dsZUFsbC5jaGVja2VkID0gcGFyYW1ldGVyLmNoZWNrZWRcbiAg
ICAgIH0sXG4gICAgICBzZXRGaWx0ZXI6IGZ1bmN0aW9uKCkge1xuICAgICAgICBfc2V0RmlsdGVy
KHBhcmFtZXRlcilcbiAgICAgIH0sXG4gICAgICBjbGVhck5ld1RvZG86IGZ1bmN0aW9uKCkge1xu
ICAgICAgICB0aGF0LiRuZXdUb2RvLnZhbHVlID0gJydcbiAgICAgIH0sXG4gICAgICBlbGVtZW50
Q29tcGxldGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICBfZWxlbWVudENvbXBsZXRlKHBhcmFtZXRl
ci5pZCwgcGFyYW1ldGVyLmNvbXBsZXRlZClcbiAgICAgIH0sXG4gICAgICBlZGl0SXRlbTogZnVu
Y3Rpb24oKSB7XG4gICAgICAgIF9lZGl0SXRlbShwYXJhbWV0ZXIuaWQsIHBhcmFtZXRlci50aXRs
ZSlcbiAgICAgIH0sXG4gICAgICBlZGl0SXRlbURvbmU6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0
aGF0Ll9lZGl0SXRlbURvbmUocGFyYW1ldGVyLmlkLCBwYXJhbWV0ZXIudGl0bGUpXG4gICAgICB9
XG4gICAgfVxuXG4gICAgdmlld0NvbW1hbmRzW3ZpZXdDbWRdKClcbiAgfVxuXG4gIF9iaW5kSXRl
bUVkaXREb25lKGhhbmRsZXIpIHtcbiAgICB2YXIgdGhhdCA9IHRoaXNcbiAgICAkZGVsZWdhdGUo
dGhhdC4kdG9kb0xpc3QsICdsaSAuZWRpdCcsICdibHVyJywgZnVuY3Rpb24oKSB7XG4gICAgICBp
ZiAoIXRoaXMuZGF0YXNldC5pc2NhbmNlbGVkKSB7XG4gICAgICAgIGhhbmRsZXIoe1xuICAgICAg
ICAgIGlkOiBfaXRlbUlkKHRoaXMpLFxuICAgICAgICAgIHRpdGxlOiB0aGlzLnZhbHVlXG4gICAg
ICAgIH0pXG4gICAgICB9XG4gICAgfSlcblxuICAgICRkZWxlZ2F0ZSh0aGF0LiR0b2RvTGlzdCwg
J2xpIC5lZGl0JywgJ2tleXByZXNzJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgIGlmIChldmVu
dC5rZXlDb2RlID09PSB0aGF0LkVOVEVSX0tFWSkge1xuICAgICAgICAvLyBSZW1vdmUgdGhlIGN1
cnNvciBmcm9tIHRoZSBpbnB1dCB3aGVuIHlvdSBoaXQgZW50ZXIganVzdCBsaWtlIGlmIGl0XG4g
ICAgICAgIC8vIHdlcmUgYSByZWFsIGZvcm1cbiAgICAgICAgdGhpcy5ibHVyKClcbiAgICAgIH1c
biAgICB9KVxuICB9XG5cbiAgX2JpbmRJdGVtRWRpdENhbmNlbChoYW5kbGVyKSB7XG4gICAgdmFy
IHRoYXQgPSB0aGlzXG4gICAgJGRlbGVnYXRlKHRoYXQuJHRvZG9MaXN0LCAnbGkgLmVkaXQnLCAn
a2V5dXAnLCBmdW5jdGlvbihldmVudCkge1xuICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IHRo
YXQuRVNDQVBFX0tFWSkge1xuICAgICAgICB0aGlzLmRhdGFzZXQuaXNjYW5jZWxlZCA9IHRydWVc
biAgICAgICAgdGhpcy5ibHVyKClcblxuICAgICAgICBoYW5kbGVyKHtpZDogX2l0ZW1JZCh0aGlz
KX0pXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGJpbmQoZXZlbnQsIGhhbmRsZXIpIHtcbiAg
ICB2YXIgdGhhdCA9IHRoaXNcbiAgICBpZiAoZXZlbnQgPT09ICduZXdUb2RvJykge1xuICAgICAg
JG9uKHRoYXQuJG5ld1RvZG8sICdjaGFuZ2UnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgaGFuZGxl
cih0aGF0LiRuZXdUb2RvLnZhbHVlKVxuICAgICAgfSlcblxuICAgIH0gZWxzZSBpZiAoZXZlbnQg
PT09ICdyZW1vdmVDb21wbGV0ZWQnKSB7XG4gICAgICAkb24odGhhdC4kY2xlYXJDb21wbGV0ZWQs
ICdjbGljaycsIGZ1bmN0aW9uKCkge1xuICAgICAgICBoYW5kbGVyKClcbiAgICAgIH0pXG5cbiAg
ICB9IGVsc2UgaWYgKGV2ZW50ID09PSAndG9nZ2xlQWxsJykge1xuICAgICAgJG9uKHRoYXQuJHRv
Z2dsZUFsbCwgJ2NsaWNrJywgZnVuY3Rpb24oKSB7XG4gICAgICAgIGhhbmRsZXIoe2NvbXBsZXRl
ZDogdGhpcy5jaGVja2VkfSlcbiAgICAgIH0pXG5cbiAgICB9IGVsc2UgaWYgKGV2ZW50ID09PSAn
aXRlbUVkaXQnKSB7XG4gICAgICAkZGVsZWdhdGUodGhhdC4kdG9kb0xpc3QsICdsaSBsYWJlbCcs
ICdkYmxjbGljaycsIGZ1bmN0aW9uKCkge1xuICAgICAgICBoYW5kbGVyKHtpZDogX2l0ZW1JZCh0
aGlzKX0pXG4gICAgICB9KVxuXG4gICAgfSBlbHNlIGlmIChldmVudCA9PT0gJ2l0ZW1SZW1vdmUn
KSB7XG4gICAgICAkZGVsZWdhdGUodGhhdC4kdG9kb0xpc3QsICcuZGVzdHJveScsICdjbGljaycs
IGZ1bmN0aW9uKCkge1xuICAgICAgICBoYW5kbGVyKHtpZDogX2l0ZW1JZCh0aGlzKX0pXG4gICAg
ICB9KVxuXG4gICAgfSBlbHNlIGlmIChldmVudCA9PT0gJ2l0ZW1Ub2dnbGUnKSB7XG4gICAgICAk
ZGVsZWdhdGUodGhhdC4kdG9kb0xpc3QsICcudG9nZ2xlJywgJ2NsaWNrJywgZnVuY3Rpb24oKSB7
XG4gICAgICAgIGhhbmRsZXIoe1xuICAgICAgICAgIGlkOiBfaXRlbUlkKHRoaXMpLFxuICAgICAg
ICAgIGNvbXBsZXRlZDogdGhpcy5jaGVja2VkXG4gICAgICAgIH0pXG4gICAgICB9KVxuXG4gICAg
fSBlbHNlIGlmIChldmVudCA9PT0gJ2l0ZW1FZGl0RG9uZScpIHtcbiAgICAgIHRoYXQuX2JpbmRJ
dGVtRWRpdERvbmUoaGFuZGxlcilcblxuICAgIH0gZWxzZSBpZiAoZXZlbnQgPT09ICdpdGVtRWRp
dENhbmNlbCcpIHtcbiAgICAgIHRoYXQuX2JpbmRJdGVtRWRpdENhbmNlbChoYW5kbGVyKVxuICAg
IH1cbiAgfVxufVxuXG5mdW5jdGlvbiBfc2V0RmlsdGVyKGN1cnJlbnRQYWdlKSB7XG4gIHFzKCcu
ZmlsdGVycyAuc2VsZWN0ZWQnKS5jbGFzc05hbWUgPSAnJ1xuICBxcygnLmZpbHRlcnMgW2hyZWY9
XCIjLycgKyBjdXJyZW50UGFnZSArICdcIl0nKS5jbGFzc05hbWUgPSAnc2VsZWN0ZWQnXG59XG5c
bmZ1bmN0aW9uIF9lbGVtZW50Q29tcGxldGUoaWQsIGNvbXBsZXRlZCkge1xuICB2YXIgbGlzdEl0
ZW0gPSBxcygnW2RhdGEtaWQ9XCInICsgaWQgKyAnXCJdJylcblxuICBpZiAoIWxpc3RJdGVtKSB7
XG4gICAgcmV0dXJuXG4gIH1cblxuICBsaXN0SXRlbS5jbGFzc05hbWUgPSBjb21wbGV0ZWQgPyAn
Y29tcGxldGVkJyA6ICcnXG5cbiAgLy8gSW4gY2FzZSBpdCB3YXMgdG9nZ2xlZCBmcm9tIGFuIGV2
ZW50IGFuZCBub3QgYnkgY2xpY2tpbmcgdGhlIGNoZWNrYm94XG4gIHFzKCdpbnB1dCcsIGxpc3RJ
dGVtKS5jaGVja2VkID0gY29tcGxldGVkXG59XG5cbmZ1bmN0aW9uIF9lZGl0SXRlbShpZCwgdGl0
bGUpIHtcbiAgdmFyIGxpc3RJdGVtID0gcXMoJ1tkYXRhLWlkPVwiJyArIGlkICsgJ1wiXScpXG5c
biAgaWYgKCFsaXN0SXRlbSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgbGlzdEl0ZW0uY2xhc3NO
YW1lID0gbGlzdEl0ZW0uY2xhc3NOYW1lICsgJyBlZGl0aW5nJ1xuXG4gIHZhciBpbnB1dCA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0JylcbiAgaW5wdXQuY2xhc3NOYW1lID0gJ2VkaXQn
XG5cbiAgbGlzdEl0ZW0uYXBwZW5kQ2hpbGQoaW5wdXQpXG4gIGlucHV0LmZvY3VzKClcbiAgaW5w
dXQudmFsdWUgPSB0aXRsZVxufVxuXG5mdW5jdGlvbiBfaXRlbUlkKGVsZW1lbnQpIHtcbiAgdmFy
IGxpID0gJHBhcmVudChlbGVtZW50LCAnbGknKVxuICByZXR1cm4gcGFyc2VJbnQobGkuZGF0YXNl
dC5pZCwgMTApXG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi92aWV3LmpzIiwi
LyogZXNsaW50IG5vLWNvbnNvbGU6MCAqL1xuaW1wb3J0IHtvbkxvYWR9IGZyb20gJy4vYXBwJ1xu
aW1wb3J0IHskb259IGZyb20gJy4vaGVscGVycydcblxuLy8gdGhpcyBpcyBvbmx5IHJlbGV2YW50
IHdoZW4gdXNpbmcgYGhvdGAgbW9kZSB3aXRoIHdlYnBhY2tcbi8vIHNwZWNpYWwgdGhhbmtzIHRv
IEVyaWMgQ2xlbW1vbnM6IGh0dHBzOi8vZ2l0aHViLmNvbS9lcmljY2xlbW1vbnMvd2VicGFjay1o
b3Qtc2VydmVyLWV4YW1wbGVcbmNvbnN0IHJlbG9hZGluZyA9IGRvY3VtZW50LnJlYWR5U3RhdGUg
PT09ICdjb21wbGV0ZSdcbmlmIChtb2R1bGUuaG90KSB7XG4gIG1vZHVsZS5ob3QuYWNjZXB0KGZ1
bmN0aW9uKGVycikge1xuICB9KVxuICBpZiAocmVsb2FkaW5nKSB7XG4gICAgb25Mb2FkKClcbiAg
fSBlbHNlIHtcbiAgICBib290c3RyYXAoKVxuICB9XG59IGVsc2Uge1xuICBib290c3RyYXAoKVxu
fVxuXG5mdW5jdGlvbiBib290c3RyYXAoKSB7XG4gICRvbih3aW5kb3csICdsb2FkJywgb25Mb2Fk
KVxuICAkb24od2luZG93LCAnaGFzaGNoYW5nZScsIG9uTG9hZClcbn1cblxuXG5cbi8vIFdFQlBB
Q0sgRk9PVEVSIC8vXG4vLyAuL2Jvb3RzdHJhcC5qcyJdLCJzb3VyY2VSb290IjoiIn0KXCBObyBu
ZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVk
b21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdl
YnBhY2svZGlzdC9idW5kbGUubWFuaWZlc3QuMTEyYmY3MGE3ZjNkZWViZjFmOTMuanMgYi9QZXJm
b3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBs
ZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svZGlzdC9idW5kbGUubWFuaWZlc3QuMTEyYmY3MGE3ZjNk
ZWViZjFmOTMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmRiZTQ4MjhhYTdkODQwMjI5Y2QwM2NlY2FiOTBjZDI2
NTZlZDFlZgotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIv
cmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9k
aXN0L2J1bmRsZS5tYW5pZmVzdC4xMTJiZjcwYTdmM2RlZWJmMWY5My5qcwpAQCAtMCwwICsxLDIg
QEAKKyFmdW5jdGlvbihlKXtmdW5jdGlvbiByKG4pe2lmKHRbbl0pcmV0dXJuIHRbbl0uZXhwb3J0
czt2YXIgbz10W25dPXtpOm4sbDohMSxleHBvcnRzOnt9fTtyZXR1cm4gZVtuXS5jYWxsKG8uZXhw
b3J0cyxvLG8uZXhwb3J0cyxyKSxvLmw9ITAsby5leHBvcnRzfXZhciBuPXdpbmRvdy53ZWJwYWNr
SnNvbnA7d2luZG93LndlYnBhY2tKc29ucD1mdW5jdGlvbih0LGMsdSl7Zm9yKHZhciBhLGksZixs
PTAscz1bXTtsPHQubGVuZ3RoO2wrKylpPXRbbF0sb1tpXSYmcy5wdXNoKG9baV1bMF0pLG9baV09
MDtmb3IoYSBpbiBjKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjLGEpJiYo
ZVthXT1jW2FdKTtmb3IobiYmbih0LGMsdSk7cy5sZW5ndGg7KXMuc2hpZnQoKSgpO2lmKHUpZm9y
KGw9MDtsPHUubGVuZ3RoO2wrKylmPXIoci5zPXVbbF0pO3JldHVybiBmfTt2YXIgdD17fSxvPXsy
OjB9O3IuZT1mdW5jdGlvbihlKXtmdW5jdGlvbiBuKCl7Yy5vbmVycm9yPWMub25sb2FkPW51bGws
Y2xlYXJUaW1lb3V0KHUpO3ZhciByPW9bZV07MCE9PXImJihyJiZyWzFdKG5ldyBFcnJvcigiTG9h
ZGluZyBjaHVuayAiK2UrIiBmYWlsZWQuIikpLG9bZV09dm9pZCAwKX1pZigwPT09b1tlXSlyZXR1
cm4gUHJvbWlzZS5yZXNvbHZlKCk7aWYob1tlXSlyZXR1cm4gb1tlXVsyXTt2YXIgdD1kb2N1bWVu
dC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdLGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgic2NyaXB0Iik7Yy50eXBlPSJ0ZXh0L2phdmFzY3JpcHQiLGMuY2hhcnNldD0idXRmLTgiLGMu
YXN5bmM9ITAsYy50aW1lb3V0PTEyZTQsYy5zcmM9ci5wKyJidW5kbGUuIitlKyIuIit7MDoiNzNi
Y2M1ZDNjMWQwNzE4MGYwZTMiLDE6ImVmYWEzZTBlMjAwNzdjOGU3NDcxIn1bZV0rIi5qcyI7dmFy
IHU9c2V0VGltZW91dChuLDEyZTQpO2Mub25lcnJvcj1jLm9ubG9hZD1uLHQuYXBwZW5kQ2hpbGQo
Yyk7dmFyIGE9bmV3IFByb21pc2UoZnVuY3Rpb24ocixuKXtvW2VdPVtyLG5dfSk7cmV0dXJuIG9b
ZV1bMl09YX0sci5tPWUsci5jPXQsci5pPWZ1bmN0aW9uKGUpe3JldHVybiBlfSxyLmQ9ZnVuY3Rp
b24oZSxyLG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIse2NvbmZpZ3VyYWJsZTohMSxlbnVt
ZXJhYmxlOiEwLGdldDpufSl9LHIubj1mdW5jdGlvbihlKXt2YXIgbj1lJiZlLl9fZXNNb2R1bGU/
ZnVuY3Rpb24oKXtyZXR1cm4gZVsiZGVmYXVsdCJdfTpmdW5jdGlvbigpe3JldHVybiBlfTtyZXR1
cm4gci5kKG4sImEiLG4pLG59LHIubz1mdW5jdGlvbihlLHIpe3JldHVybiBPYmplY3QucHJvdG90
eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKX0sci5wPSIiLHIub2U9ZnVuY3Rpb24oZSl7dGhy
b3cgY29uc29sZS5lcnJvcihlKSxlfX0oW10pOworLy8jIHNvdXJjZU1hcHBpbmdVUkw9YnVuZGxl
Lm1hbmlmZXN0LjExMmJmNzBhN2YzZGVlYmYxZjkzLmpzLm1hcApcIE5vIG5ld2xpbmUgYXQgZW5k
IG9mIGZpbGUKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3Vy
Y2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9kaXN0L2J1
bmRsZS5tYW5pZmVzdC4xMTJiZjcwYTdmM2RlZWJmMWY5My5qcy5tYXAgYi9QZXJmb3JtYW5jZVRl
c3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1
LWJhYmVsLXdlYnBhY2svZGlzdC9idW5kbGUubWFuaWZlc3QuMTEyYmY3MGE3ZjNkZWViZjFmOTMu
anMubWFwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjQ2YWM0NWU4ZjkxNDJhNzFlM2QwNzcxZWM1ZWExNThkMDFmM2U1
YTcKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291
cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svZGlzdC9i
dW5kbGUubWFuaWZlc3QuMTEyYmY3MGE3ZjNkZWViZjFmOTMuanMubWFwCkBAIC0wLDAgKzEgQEAK
K3sidmVyc2lvbiI6Mywic291cmNlcyI6WyJ3ZWJwYWNrOi8vL2J1bmRsZS5tYW5pZmVzdC4xMTJi
ZjcwYTdmM2RlZWJmMWY5My5qcyIsIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAgZDMyYjJj
ZWYxNTE0NDc2NDI0MjEiXSwibmFtZXMiOlsibW9kdWxlcyIsIl9fd2VicGFja19yZXF1aXJlX18i
LCJtb2R1bGVJZCIsImluc3RhbGxlZE1vZHVsZXMiLCJleHBvcnRzIiwibW9kdWxlIiwiaSIsImwi
LCJjYWxsIiwicGFyZW50SnNvbnBGdW5jdGlvbiIsIndpbmRvdyIsImNodW5rSWRzIiwibW9yZU1v
ZHVsZXMiLCJleGVjdXRlTW9kdWxlcyIsImNodW5rSWQiLCJyZXN1bHQiLCJyZXNvbHZlcyIsImxl
bmd0aCIsImluc3RhbGxlZENodW5rcyIsInB1c2giLCJPYmplY3QiLCJwcm90b3R5cGUiLCJoYXNP
d25Qcm9wZXJ0eSIsInNoaWZ0IiwicyIsIjIiLCJlIiwib25TY3JpcHRDb21wbGV0ZSIsInNjcmlw
dCIsIm9uZXJyb3IiLCJvbmxvYWQiLCJjbGVhclRpbWVvdXQiLCJ0aW1lb3V0IiwiY2h1bmsiLCJF
cnJvciIsInVuZGVmaW5lZCIsIlByb21pc2UiLCJyZXNvbHZlIiwiaGVhZCIsImRvY3VtZW50Iiwi
Z2V0RWxlbWVudHNCeVRhZ05hbWUiLCJjcmVhdGVFbGVtZW50IiwidHlwZSIsImNoYXJzZXQiLCJh
c3luYyIsInNyYyIsInAiLCIwIiwiMSIsInNldFRpbWVvdXQiLCJhcHBlbmRDaGlsZCIsInByb21p
c2UiLCJyZWplY3QiLCJtIiwiYyIsInZhbHVlIiwiZCIsIm5hbWUiLCJnZXR0ZXIiLCJkZWZpbmVQ
cm9wZXJ0eSIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJnZXQiLCJuIiwiX19lc01vZHVs
ZSIsIm8iLCJvYmplY3QiLCJwcm9wZXJ0eSIsIm9lIiwiZXJyIiwiY29uc29sZSIsImVycm9yIl0s
Im1hcHBpbmdzIjoiQ0FBUyxTQUFVQSxHQ3FDbkIsUUFBQUMsR0FBQUMsR0FHQSxHQUFBQyxFQUFB
RCxHQUNBLE1BQUFDLEdBQUFELEdBQUFFLE9BR0EsSUFBQUMsR0FBQUYsRUFBQUQsSUFDQUksRUFB
QUosRUFDQUssR0FBQSxFQUNBSCxXQVVBLE9BTkFKLEdBQUFFLEdBQUFNLEtBQUFILEVBQUFELFFB
QUFDLElBQUFELFFBQUFILEdBR0FJLEVBQUFFLEdBQUEsRUFHQUYsRUFBQUQsUUF4REEsR0FBQUss
R0FBQUMsT0FBQSxZQUNBQSxRQUFBLHNCQUFBQyxFQUFBQyxFQUFBQyxHQUlBLElBREEsR0FBQVgs
R0FBQVksRUFBQUMsRUFBQVQsRUFBQSxFQUFBVSxLQUNRVixFQUFBSyxFQUFBTSxPQUFvQlgsSUFD
NUJRLEVBQUFILEVBQUFMLEdBQ0FZLEVBQUFKLElBQ0FFLEVBQUFHLEtBQUFELEVBQUFKLEdBQUEs
SUFDQUksRUFBQUosR0FBQSxDQUVBLEtBQUFaLElBQUFVLEdBQ0FRLE9BQUFDLFVBQUFDLGVBQUFk
LEtBQUFJLEVBQUFWLEtBQ0FGLEVBQUFFLEdBQUFVLEVBQUFWLEdBSUEsS0FEQU8sS0FBQUUsRUFB
QUMsRUFBQUMsR0FDQUcsRUFBQUMsUUFDQUQsRUFBQU8sU0FDQSxJQUFBVixFQUNBLElBQUFQLEVB
QUEsRUFBWUEsRUFBQU8sRUFBQUksT0FBMkJYLElBQ3ZDUyxFQUFBZCxJQUFBdUIsRUFBQVgsRUFB
QVAsR0FHQSxPQUFBUyxHQUlBLElBQUFaLE1BR0FlLEdBQ0FPLEVBQUEsRUE2QkF4QixHQUFBeUIs
RUFBQSxTQUFBWixHQW1CQSxRQUFBYSxLQUVBQyxFQUFBQyxRQUFBRCxFQUFBRSxPQUFBLEtBQ0FD
LGFBQUFDLEVBQ0EsSUFBQUMsR0FBQWYsRUFBQUosRUFDQSxLQUFBbUIsSUFDQUEsS0FBQSxNQUFB
QyxPQUFBLGlCQUFBcEIsRUFBQSxhQUNBSSxFQUFBSixHQUFBcUIsUUF6QkEsT0FBQWpCLEVBQUFK
LEdBQ0EsTUFBQXNCLFNBQUFDLFNBR0EsSUFBQW5CLEVBQUFKLEdBQ0EsTUFBQUksR0FBQUosR0FB
QSxFQUdBLElBQUF3QixHQUFBQyxTQUFBQyxxQkFBQSxXQUNBWixFQUFBVyxTQUFBRSxjQUFBLFNB
Q0FiLEdBQUFjLEtBQUEsa0JBQ0FkLEVBQUFlLFFBQUEsUUFDQWYsRUFBQWdCLE9BQUEsRUFDQWhC
LEVBQUFJLFFBQUEsS0FFQUosRUFBQWlCLElBQUE1QyxFQUFBNkMsRUFBQSxVQUFBaEMsRUFBQSxL
QUFxRWlDLEVBQUEsdUJBQUFDLEVBQUEsd0JBQXNEbEMsR0FBQSxLQUMzSCxJQUFBa0IsR0FBQWlC
LFdBQUF0QixFQUFBLEtBQ0FDLEdBQUFDLFFBQUFELEVBQUFFLE9BQUFILEVBV0FXLEVBQUFZLFlB
QUF0QixFQUVBLElBQUF1QixHQUFBLEdBQUFmLFNBQUEsU0FBQUMsRUFBQWUsR0FDQWxDLEVBQUFK
LElBQUF1QixFQUFBZSxJQUVBLE9BQUFsQyxHQUFBSixHQUFBLEdBQUFxQyxHQUlBbEQsRUFBQW9E
LEVBQUFyRCxFQUdBQyxFQUFBcUQsRUFBQW5ELEVBR0FGLEVBQUFLLEVBQUEsU0FBQWlELEdBQTJD
LE1BQUFBLElBRzNDdEQsRUFBQXVELEVBQUEsU0FBQXBELEVBQUFxRCxFQUFBQyxHQUNBdEMsT0FB
QXVDLGVBQUF2RCxFQUFBcUQsR0FDQUcsY0FBQSxFQUNBQyxZQUFBLEVBQ0FDLElBQUFKLEtBS0F6
RCxFQUFBOEQsRUFBQSxTQUFBMUQsR0FDQSxHQUFBcUQsR0FBQXJELEtBQUEyRCxXQUNBLFdBQTJC
LE1BQUEzRCxHQUFBLFlBQzNCLFdBQWlDLE1BQUFBLEdBRWpDLE9BREFKLEdBQUF1RCxFQUFBRSxF
QUFBLElBQUFBLEdBQ0FBLEdBSUF6RCxFQUFBZ0UsRUFBQSxTQUFBQyxFQUFBQyxHQUFzRCxNQUFB
L0MsUUFBQUMsVUFBQUMsZUFBQWQsS0FBQTBELEVBQUFDLElBR3REbEUsRUFBQTZDLEVBQUEsR0FH
QTdDLEVBQUFtRSxHQUFBLFNBQUFDLEdBQThELEtBQXBCQyxTQUFBQyxNQUFBRixHQUFvQkEiLCJm
aWxlIjoiYnVuZGxlLm1hbmlmZXN0LjExMmJmNzBhN2YzZGVlYmYxZjkzLmpzIiwic291cmNlc0Nv
bnRlbnQiOlsiLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJh
cFxuLyoqKioqKi8gXHQvLyBpbnN0YWxsIGEgSlNPTlAgY2FsbGJhY2sgZm9yIGNodW5rIGxvYWRp
bmdcbi8qKioqKiovIFx0dmFyIHBhcmVudEpzb25wRnVuY3Rpb24gPSB3aW5kb3dbXCJ3ZWJwYWNr
SnNvbnBcIl07XG4vKioqKioqLyBcdHdpbmRvd1tcIndlYnBhY2tKc29ucFwiXSA9IGZ1bmN0aW9u
IHdlYnBhY2tKc29ucENhbGxiYWNrKGNodW5rSWRzLCBtb3JlTW9kdWxlcywgZXhlY3V0ZU1vZHVs
ZXMpIHtcbi8qKioqKiovIFx0XHQvLyBhZGQgXCJtb3JlTW9kdWxlc1wiIHRvIHRoZSBtb2R1bGVz
IG9iamVjdCxcbi8qKioqKiovIFx0XHQvLyB0aGVuIGZsYWcgYWxsIFwiY2h1bmtJZHNcIiBhcyBs
b2FkZWQgYW5kIGZpcmUgY2FsbGJhY2tcbi8qKioqKiovIFx0XHR2YXIgbW9kdWxlSWQsIGNodW5r
SWQsIGkgPSAwLCByZXNvbHZlcyA9IFtdLCByZXN1bHQ7XG4vKioqKioqLyBcdFx0Zm9yKDtpIDwg
Y2h1bmtJZHMubGVuZ3RoOyBpKyspIHtcbi8qKioqKiovIFx0XHRcdGNodW5rSWQgPSBjaHVua0lk
c1tpXTtcbi8qKioqKiovIFx0XHRcdGlmKGluc3RhbGxlZENodW5rc1tjaHVua0lkXSlcbi8qKioq
KiovIFx0XHRcdFx0cmVzb2x2ZXMucHVzaChpbnN0YWxsZWRDaHVua3NbY2h1bmtJZF1bMF0pO1xu
LyoqKioqKi8gXHRcdFx0aW5zdGFsbGVkQ2h1bmtzW2NodW5rSWRdID0gMDtcbi8qKioqKiovIFx0
XHR9XG4vKioqKioqLyBcdFx0Zm9yKG1vZHVsZUlkIGluIG1vcmVNb2R1bGVzKSB7XG4vKioqKioq
LyBcdFx0XHRpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9yZU1vZHVs
ZXMsIG1vZHVsZUlkKSkge1xuLyoqKioqKi8gXHRcdFx0XHRtb2R1bGVzW21vZHVsZUlkXSA9IG1v
cmVNb2R1bGVzW21vZHVsZUlkXTtcbi8qKioqKiovIFx0XHRcdH1cbi8qKioqKiovIFx0XHR9XG4v
KioqKioqLyBcdFx0aWYocGFyZW50SnNvbnBGdW5jdGlvbikgcGFyZW50SnNvbnBGdW5jdGlvbihj
aHVua0lkcywgbW9yZU1vZHVsZXMsIGV4ZWN1dGVNb2R1bGVzKTtcbi8qKioqKiovIFx0XHR3aGls
ZShyZXNvbHZlcy5sZW5ndGgpXG4vKioqKioqLyBcdFx0XHRyZXNvbHZlcy5zaGlmdCgpKCk7XG4v
KioqKioqLyBcdFx0aWYoZXhlY3V0ZU1vZHVsZXMpIHtcbi8qKioqKiovIFx0XHRcdGZvcihpPTA7
IGkgPCBleGVjdXRlTW9kdWxlcy5sZW5ndGg7IGkrKykge1xuLyoqKioqKi8gXHRcdFx0XHRyZXN1
bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IGV4ZWN1dGVN
b2R1bGVzW2ldKTtcbi8qKioqKiovIFx0XHRcdH1cbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBc
dFx0cmV0dXJuIHJlc3VsdDtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8v
IFRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtc
bi8qKioqKiovXG4vKioqKioqLyBcdC8vIG9iamVjdHMgdG8gc3RvcmUgbG9hZGVkIGFuZCBsb2Fk
aW5nIGNodW5rc1xuLyoqKioqKi8gXHR2YXIgaW5zdGFsbGVkQ2h1bmtzID0ge1xuLyoqKioqKi8g
XHRcdDI6IDBcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIFRoZSByZXF1
aXJlIGZ1bmN0aW9uXG4vKioqKioqLyBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9k
dWxlSWQpIHtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGlu
IGNhY2hlXG4vKioqKioqLyBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pXG4vKioq
KioqLyBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbi8q
KioqKiovXG4vKioqKioqLyBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBp
bnRvIHRoZSBjYWNoZSlcbi8qKioqKiovIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxl
c1ttb2R1bGVJZF0gPSB7XG4vKioqKioqLyBcdFx0XHRpOiBtb2R1bGVJZCxcbi8qKioqKiovIFx0
XHRcdGw6IGZhbHNlLFxuLyoqKioqKi8gXHRcdFx0ZXhwb3J0czoge31cbi8qKioqKiovIFx0XHR9
O1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25c
bi8qKioqKiovIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1
bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcbi8qKioqKiovXG4vKioq
KioqLyBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuLyoqKioqKi8gXHRcdG1vZHVs
ZS5sID0gdHJ1ZTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRz
IG9mIHRoZSBtb2R1bGVcbi8qKioqKiovIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4vKioq
KioqLyBcdH1cbi8qKioqKiovXG4vKioqKioqLyBcdC8vIFRoaXMgZmlsZSBjb250YWlucyBvbmx5
IHRoZSBlbnRyeSBjaHVuay5cbi8qKioqKiovIFx0Ly8gVGhlIGNodW5rIGxvYWRpbmcgZnVuY3Rp
b24gZm9yIGFkZGl0aW9uYWwgY2h1bmtzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18u
ZSA9IGZ1bmN0aW9uIHJlcXVpcmVFbnN1cmUoY2h1bmtJZCkge1xuLyoqKioqKi8gXHRcdGlmKGlu
c3RhbGxlZENodW5rc1tjaHVua0lkXSA9PT0gMClcbi8qKioqKiovIFx0XHRcdHJldHVybiBQcm9t
aXNlLnJlc29sdmUoKTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gYW4gUHJvbWlzZSBtZWFu
cyBcImN1cnJlbnRseSBsb2FkaW5nXCIuXG4vKioqKioqLyBcdFx0aWYoaW5zdGFsbGVkQ2h1bmtz
W2NodW5rSWRdKSB7XG4vKioqKioqLyBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkQ2h1bmtzW2NodW5r
SWRdWzJdO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHQvLyBzdGFydCBjaHVuayBsb2Fk
aW5nXG4vKioqKioqLyBcdFx0dmFyIGhlYWQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFt
ZSgnaGVhZCcpWzBdO1xuLyoqKioqKi8gXHRcdHZhciBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCdzY3JpcHQnKTtcbi8qKioqKiovIFx0XHRzY3JpcHQudHlwZSA9ICd0ZXh0L2phdmFz
Y3JpcHQnO1xuLyoqKioqKi8gXHRcdHNjcmlwdC5jaGFyc2V0ID0gJ3V0Zi04Jztcbi8qKioqKiov
IFx0XHRzY3JpcHQuYXN5bmMgPSB0cnVlO1xuLyoqKioqKi8gXHRcdHNjcmlwdC50aW1lb3V0ID0g
MTIwMDAwO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHRzY3JpcHQuc3JjID0gX193ZWJwYWNrX3Jl
cXVpcmVfXy5wICsgXCJidW5kbGUuXCIgKyBjaHVua0lkICsgXCIuXCIgKyB7XCIwXCI6XCI3M2Jj
YzVkM2MxZDA3MTgwZjBlM1wiLFwiMVwiOlwiZWZhYTNlMGUyMDA3N2M4ZTc0NzFcIn1bY2h1bmtJ
ZF0gKyBcIi5qc1wiO1xuLyoqKioqKi8gXHRcdHZhciB0aW1lb3V0ID0gc2V0VGltZW91dChvblNj
cmlwdENvbXBsZXRlLCAxMjAwMDApO1xuLyoqKioqKi8gXHRcdHNjcmlwdC5vbmVycm9yID0gc2Ny
aXB0Lm9ubG9hZCA9IG9uU2NyaXB0Q29tcGxldGU7XG4vKioqKioqLyBcdFx0ZnVuY3Rpb24gb25T
Y3JpcHRDb21wbGV0ZSgpIHtcbi8qKioqKiovIFx0XHRcdC8vIGF2b2lkIG1lbSBsZWFrcyBpbiBJ
RS5cbi8qKioqKiovIFx0XHRcdHNjcmlwdC5vbmVycm9yID0gc2NyaXB0Lm9ubG9hZCA9IG51bGw7
XG4vKioqKioqLyBcdFx0XHRjbGVhclRpbWVvdXQodGltZW91dCk7XG4vKioqKioqLyBcdFx0XHR2
YXIgY2h1bmsgPSBpbnN0YWxsZWRDaHVua3NbY2h1bmtJZF07XG4vKioqKioqLyBcdFx0XHRpZihj
aHVuayAhPT0gMCkge1xuLyoqKioqKi8gXHRcdFx0XHRpZihjaHVuaykgY2h1bmtbMV0obmV3IEVy
cm9yKCdMb2FkaW5nIGNodW5rICcgKyBjaHVua0lkICsgJyBmYWlsZWQuJykpO1xuLyoqKioqKi8g
XHRcdFx0XHRpbnN0YWxsZWRDaHVua3NbY2h1bmtJZF0gPSB1bmRlZmluZWQ7XG4vKioqKioqLyBc
dFx0XHR9XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovIFx0XHRoZWFkLmFwcGVuZENoaWxkKHNj
cmlwdCk7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdHZhciBwcm9taXNlID0gbmV3IFByb21pc2Uo
ZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4vKioqKioqLyBcdFx0XHRpbnN0YWxsZWRDaHVu
a3NbY2h1bmtJZF0gPSBbcmVzb2x2ZSwgcmVqZWN0XTtcbi8qKioqKiovIFx0XHR9KTtcbi8qKioq
KiovIFx0XHRyZXR1cm4gaW5zdGFsbGVkQ2h1bmtzW2NodW5rSWRdWzJdID0gcHJvbWlzZTtcbi8q
KioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBv
YmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJl
X18ubSA9IG1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVs
ZSBjYWNoZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1
bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gaWRlbnRpdHkgZnVuY3Rpb24gZm9yIGNhbGxp
bmcgaGFybW9yeSBpbXBvcnRzIHdpdGggdGhlIGNvcnJlY3QgY29udGV4dFxuLyoqKioqKi8gXHRf
X3dlYnBhY2tfcmVxdWlyZV9fLmkgPSBmdW5jdGlvbih2YWx1ZSkgeyByZXR1cm4gdmFsdWU7IH07
XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJt
b3J5IGV4cG9ydHNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24o
ZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4vKioqKioqLyBcdFx0T2JqZWN0LmRlZmluZVByb3Bl
cnR5KGV4cG9ydHMsIG5hbWUsIHtcbi8qKioqKiovIFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2Us
XG4vKioqKioqLyBcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuLyoqKioqKi8gXHRcdFx0Z2V0OiBn
ZXR0ZXJcbi8qKioqKiovIFx0XHR9KTtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioq
LyBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBu
b24taGFybW9ueSBtb2R1bGVzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1
bmN0aW9uKG1vZHVsZSkge1xuLyoqKioqKi8gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9k
dWxlLl9fZXNNb2R1bGUgP1xuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsg
cmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdl
dE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4vKioqKioqLyBcdFx0X193ZWJw
YWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuLyoqKioqKi8gXHRcdHJldHVy
biBnZXR0ZXI7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBPYmplY3Qu
cHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVp
cmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3Rv
dHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuLyoqKioqKi9c
bi8qKioqKiovIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbi8qKioqKiovIFx0X193ZWJw
YWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIG9uIGVycm9y
IGZ1bmN0aW9uIGZvciBhc3luYyBsb2FkaW5nXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJl
X18ub2UgPSBmdW5jdGlvbihlcnIpIHsgY29uc29sZS5lcnJvcihlcnIpOyB0aHJvdyBlcnI7IH07
XG4vKioqKioqLyB9KVxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKioqKiovIChbXSk7XG5cblxuLy8g
V0VCUEFDSyBGT09URVIgLy9cbi8vIGJ1bmRsZS5tYW5pZmVzdC4xMTJiZjcwYTdmM2RlZWJmMWY5
My5qcyIsIiBcdC8vIGluc3RhbGwgYSBKU09OUCBjYWxsYmFjayBmb3IgY2h1bmsgbG9hZGluZ1xu
IFx0dmFyIHBhcmVudEpzb25wRnVuY3Rpb24gPSB3aW5kb3dbXCJ3ZWJwYWNrSnNvbnBcIl07XG4g
XHR3aW5kb3dbXCJ3ZWJwYWNrSnNvbnBcIl0gPSBmdW5jdGlvbiB3ZWJwYWNrSnNvbnBDYWxsYmFj
ayhjaHVua0lkcywgbW9yZU1vZHVsZXMsIGV4ZWN1dGVNb2R1bGVzKSB7XG4gXHRcdC8vIGFkZCBc
Im1vcmVNb2R1bGVzXCIgdG8gdGhlIG1vZHVsZXMgb2JqZWN0LFxuIFx0XHQvLyB0aGVuIGZsYWcg
YWxsIFwiY2h1bmtJZHNcIiBhcyBsb2FkZWQgYW5kIGZpcmUgY2FsbGJhY2tcbiBcdFx0dmFyIG1v
ZHVsZUlkLCBjaHVua0lkLCBpID0gMCwgcmVzb2x2ZXMgPSBbXSwgcmVzdWx0O1xuIFx0XHRmb3Io
O2kgPCBjaHVua0lkcy5sZW5ndGg7IGkrKykge1xuIFx0XHRcdGNodW5rSWQgPSBjaHVua0lkc1tp
XTtcbiBcdFx0XHRpZihpbnN0YWxsZWRDaHVua3NbY2h1bmtJZF0pXG4gXHRcdFx0XHRyZXNvbHZl
cy5wdXNoKGluc3RhbGxlZENodW5rc1tjaHVua0lkXVswXSk7XG4gXHRcdFx0aW5zdGFsbGVkQ2h1
bmtzW2NodW5rSWRdID0gMDtcbiBcdFx0fVxuIFx0XHRmb3IobW9kdWxlSWQgaW4gbW9yZU1vZHVs
ZXMpIHtcbiBcdFx0XHRpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9y
ZU1vZHVsZXMsIG1vZHVsZUlkKSkge1xuIFx0XHRcdFx0bW9kdWxlc1ttb2R1bGVJZF0gPSBtb3Jl
TW9kdWxlc1ttb2R1bGVJZF07XG4gXHRcdFx0fVxuIFx0XHR9XG4gXHRcdGlmKHBhcmVudEpzb25w
RnVuY3Rpb24pIHBhcmVudEpzb25wRnVuY3Rpb24oY2h1bmtJZHMsIG1vcmVNb2R1bGVzLCBleGVj
dXRlTW9kdWxlcyk7XG4gXHRcdHdoaWxlKHJlc29sdmVzLmxlbmd0aClcbiBcdFx0XHRyZXNvbHZl
cy5zaGlmdCgpKCk7XG4gXHRcdGlmKGV4ZWN1dGVNb2R1bGVzKSB7XG4gXHRcdFx0Zm9yKGk9MDsg
aSA8IGV4ZWN1dGVNb2R1bGVzLmxlbmd0aDsgaSsrKSB7XG4gXHRcdFx0XHRyZXN1bHQgPSBfX3dl
YnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IGV4ZWN1dGVNb2R1bGVzW2ld
KTtcbiBcdFx0XHR9XG4gXHRcdH1cbiBcdFx0cmV0dXJuIHJlc3VsdDtcbiBcdH07XG5cbiBcdC8v
IFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8v
IG9iamVjdHMgdG8gc3RvcmUgbG9hZGVkIGFuZCBsb2FkaW5nIGNodW5rc1xuIFx0dmFyIGluc3Rh
bGxlZENodW5rcyA9IHtcbiBcdFx0MjogMFxuIFx0fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVu
Y3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0
XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxl
c1ttb2R1bGVJZF0pXG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4
cG9ydHM7XG5cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRo
ZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0g
e1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6
IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRc
dG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4
cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBh
cyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhw
b3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxu
IFx0Ly8gVGhpcyBmaWxlIGNvbnRhaW5zIG9ubHkgdGhlIGVudHJ5IGNodW5rLlxuIFx0Ly8gVGhl
IGNodW5rIGxvYWRpbmcgZnVuY3Rpb24gZm9yIGFkZGl0aW9uYWwgY2h1bmtzXG4gXHRfX3dlYnBh
Y2tfcmVxdWlyZV9fLmUgPSBmdW5jdGlvbiByZXF1aXJlRW5zdXJlKGNodW5rSWQpIHtcbiBcdFx0
aWYoaW5zdGFsbGVkQ2h1bmtzW2NodW5rSWRdID09PSAwKVxuIFx0XHRcdHJldHVybiBQcm9taXNl
LnJlc29sdmUoKTtcblxuIFx0XHQvLyBhbiBQcm9taXNlIG1lYW5zIFwiY3VycmVudGx5IGxvYWRp
bmdcIi5cbiBcdFx0aWYoaW5zdGFsbGVkQ2h1bmtzW2NodW5rSWRdKSB7XG4gXHRcdFx0cmV0dXJu
IGluc3RhbGxlZENodW5rc1tjaHVua0lkXVsyXTtcbiBcdFx0fVxuIFx0XHQvLyBzdGFydCBjaHVu
ayBsb2FkaW5nXG4gXHRcdHZhciBoZWFkID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUo
J2hlYWQnKVswXTtcbiBcdFx0dmFyIHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3Nj
cmlwdCcpO1xuIFx0XHRzY3JpcHQudHlwZSA9ICd0ZXh0L2phdmFzY3JpcHQnO1xuIFx0XHRzY3Jp
cHQuY2hhcnNldCA9ICd1dGYtOCc7XG4gXHRcdHNjcmlwdC5hc3luYyA9IHRydWU7XG4gXHRcdHNj
cmlwdC50aW1lb3V0ID0gMTIwMDAwO1xuXG4gXHRcdHNjcmlwdC5zcmMgPSBfX3dlYnBhY2tfcmVx
dWlyZV9fLnAgKyBcImJ1bmRsZS5cIiArIGNodW5rSWQgKyBcIi5cIiArIHtcIjBcIjpcIjczYmNj
NWQzYzFkMDcxODBmMGUzXCIsXCIxXCI6XCJlZmFhM2UwZTIwMDc3YzhlNzQ3MVwifVtjaHVua0lk
XSArIFwiLmpzXCI7XG4gXHRcdHZhciB0aW1lb3V0ID0gc2V0VGltZW91dChvblNjcmlwdENvbXBs
ZXRlLCAxMjAwMDApO1xuIFx0XHRzY3JpcHQub25lcnJvciA9IHNjcmlwdC5vbmxvYWQgPSBvblNj
cmlwdENvbXBsZXRlO1xuIFx0XHRmdW5jdGlvbiBvblNjcmlwdENvbXBsZXRlKCkge1xuIFx0XHRc
dC8vIGF2b2lkIG1lbSBsZWFrcyBpbiBJRS5cbiBcdFx0XHRzY3JpcHQub25lcnJvciA9IHNjcmlw
dC5vbmxvYWQgPSBudWxsO1xuIFx0XHRcdGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiBcdFx0XHR2
YXIgY2h1bmsgPSBpbnN0YWxsZWRDaHVua3NbY2h1bmtJZF07XG4gXHRcdFx0aWYoY2h1bmsgIT09
IDApIHtcbiBcdFx0XHRcdGlmKGNodW5rKSBjaHVua1sxXShuZXcgRXJyb3IoJ0xvYWRpbmcgY2h1
bmsgJyArIGNodW5rSWQgKyAnIGZhaWxlZC4nKSk7XG4gXHRcdFx0XHRpbnN0YWxsZWRDaHVua3Nb
Y2h1bmtJZF0gPSB1bmRlZmluZWQ7XG4gXHRcdFx0fVxuIFx0XHR9O1xuIFx0XHRoZWFkLmFwcGVu
ZENoaWxkKHNjcmlwdCk7XG5cbiBcdFx0dmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlv
bihyZXNvbHZlLCByZWplY3QpIHtcbiBcdFx0XHRpbnN0YWxsZWRDaHVua3NbY2h1bmtJZF0gPSBb
cmVzb2x2ZSwgcmVqZWN0XTtcbiBcdFx0fSk7XG4gXHRcdHJldHVybiBpbnN0YWxsZWRDaHVua3Nb
Y2h1bmtJZF1bMl0gPSBwcm9taXNlO1xuIFx0fTtcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVz
IG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9
IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tf
cmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBpZGVudGl0eSBmdW5jdGlv
biBmb3IgY2FsbGluZyBoYXJtb3J5IGltcG9ydHMgd2l0aCB0aGUgY29ycmVjdCBjb250ZXh0XG4g
XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmkgPSBmdW5jdGlvbih2YWx1ZSkgeyByZXR1cm4gdmFsdWU7
IH07XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vcnkgZXhwb3J0c1xu
IFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVy
KSB7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7XG4gXHRcdFx0
Y29uZmlndXJhYmxlOiBmYWxzZSxcbiBcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuIFx0XHRcdGdl
dDogZ2V0dGVyXG4gXHRcdH0pO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5j
dGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2Vi
cGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0g
bW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0
KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1v
ZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJl
X18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5c
biBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNr
X3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0
LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4g
XHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0g
XCJcIjtcblxuIFx0Ly8gb24gZXJyb3IgZnVuY3Rpb24gZm9yIGFzeW5jIGxvYWRpbmdcbiBcdF9f
d2VicGFja19yZXF1aXJlX18ub2UgPSBmdW5jdGlvbihlcnIpIHsgY29uc29sZS5lcnJvcihlcnIp
OyB0aHJvdyBlcnI7IH07XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gd2VicGFjay9i
b290c3RyYXAgZDMyYjJjZWYxNTE0NDc2NDI0MjEiXSwic291cmNlUm9vdCI6IiJ9ClwgTm8gbmV3
bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9t
ZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJw
YWNrL2Rpc3QvYnVuZGxlLnZlbmRvci5lZmFhM2UwZTIwMDc3YzhlNzQ3MS5qcyBiL1BlcmZvcm1h
bmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9l
czIwMTUtYmFiZWwtd2VicGFjay9kaXN0L2J1bmRsZS52ZW5kb3IuZWZhYTNlMGUyMDA3N2M4ZTc0
NzEuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYTQ3YjVlYzZlYzFjMGNjMjU4NDY5ZDI3YmNiYmQ1NjBmZDA5YjQ1
NwotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3Vy
Y2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9kaXN0L2J1
bmRsZS52ZW5kb3IuZWZhYTNlMGUyMDA3N2M4ZTc0NzEuanMKQEAgLTAsMCArMSwyIEBACit3ZWJw
YWNrSnNvbnAoWzEsMl0sezE6ZnVuY3Rpb24obix0KXt9LDEyOmZ1bmN0aW9uKG4sdCxyKXtuLmV4
cG9ydHM9cigxKX0sMTM6ZnVuY3Rpb24obix0KXtuLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgbj1b
XTtyZXR1cm4gbi50b1N0cmluZz1mdW5jdGlvbigpe2Zvcih2YXIgbj1bXSx0PTA7dDx0aGlzLmxl
bmd0aDt0Kyspe3ZhciByPXRoaXNbdF07clsyXT9uLnB1c2goIkBtZWRpYSAiK3JbMl0rInsiK3Jb
MV0rIn0iKTpuLnB1c2goclsxXSl9cmV0dXJuIG4uam9pbigiIil9LG4uaT1mdW5jdGlvbih0LHIp
eyJzdHJpbmciPT10eXBlb2YgdCYmKHQ9W1tudWxsLHQsIiJdXSk7Zm9yKHZhciBvPXt9LGk9MDtp
PHRoaXMubGVuZ3RoO2krKyl7dmFyIGU9dGhpc1tpXVswXTsibnVtYmVyIj09dHlwZW9mIGUmJihv
W2VdPSEwKX1mb3IoaT0wO2k8dC5sZW5ndGg7aSsrKXt2YXIgdT10W2ldOyJudW1iZXIiPT10eXBl
b2YgdVswXSYmb1t1WzBdXXx8KHImJiF1WzJdP3VbMl09cjpyJiYodVsyXT0iKCIrdVsyXSsiKSBh
bmQgKCIrcisiKSIpLG4ucHVzaCh1KSl9fSxufX19LFsxMl0pOworLy8jIHNvdXJjZU1hcHBpbmdV
Ukw9YnVuZGxlLnZlbmRvci5lZmFhM2UwZTIwMDc3YzhlNzQ3MS5qcy5tYXAKXCBObyBuZXdsaW5l
IGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVy
L3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2sv
ZGlzdC9idW5kbGUudmVuZG9yLmVmYWEzZTBlMjAwNzdjOGU3NDcxLmpzLm1hcCBiL1BlcmZvcm1h
bmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9l
czIwMTUtYmFiZWwtd2VicGFjay9kaXN0L2J1bmRsZS52ZW5kb3IuZWZhYTNlMGUyMDA3N2M4ZTc0
NzEuanMubWFwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZhMDQzNjFjMjFmYWI5NjE4YzhkNDE5NWUzZjYzNzQ0MmY4
YzQ0MWMKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jl
c291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svZGlz
dC9idW5kbGUudmVuZG9yLmVmYWEzZTBlMjAwNzdjOGU3NDcxLmpzLm1hcApAQCAtMCwwICsxIEBA
Cit7InZlcnNpb24iOjMsInNvdXJjZXMiOlsid2VicGFjazovLy9idW5kbGUudmVuZG9yLmVmYWEz
ZTBlMjAwNzdjOGU3NDcxLmpzIiwid2VicGFjazovLy8uLi9+L2Nzcy1sb2FkZXIvbGliL2Nzcy1i
YXNlLmpzIl0sIm5hbWVzIjpbIndlYnBhY2tKc29ucCIsIjEiLCJtb2R1bGUiLCJleHBvcnRzIiwi
MTIiLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwiMTMiLCJsaXN0IiwidG9TdHJpbmciLCJyZXN1bHQi
LCJpIiwidGhpcyIsImxlbmd0aCIsIml0ZW0iLCJwdXNoIiwiam9pbiIsIm1vZHVsZXMiLCJtZWRp
YVF1ZXJ5IiwiYWxyZWFkeUltcG9ydGVkTW9kdWxlcyIsImlkIl0sIm1hcHBpbmdzIjoiQUFBQUEs
Y0FBYyxFQUFFLElBRVZDLEVBQ0EsU0FBU0MsRUFBUUMsS0FNakJDLEdBQ0EsU0FBU0YsRUFBUUMs
RUFBU0UsR0FFaENILEVBQU9DLFFBQVVFLEVBQW9CLElBSy9CQyxHQUNBLFNBQVNKLEVBQVFDLEdD
YnZCRCxFQUFBQyxRQUFBLFdBQ0EsR0FBQUksS0EwQ0EsT0F2Q0FBLEdBQUFDLFNBQUEsV0FFQSxP
QURBQyxNQUNBQyxFQUFBLEVBQWdCQSxFQUFBQyxLQUFBQyxPQUFpQkYsSUFBQSxDQUNqQyxHQUFB
RyxHQUFBRixLQUFBRCxFQUNBRyxHQUFBLEdBQ0FKLEVBQUFLLEtBQUEsVUFBQUQsRUFBQSxPQUF3
Q0EsRUFBQSxRQUV4Q0osRUFBQUssS0FBQUQsRUFBQSxJQUdBLE1BQUFKLEdBQUFNLEtBQUEsS0FJ
QVIsRUFBQUcsRUFBQSxTQUFBTSxFQUFBQyxHQUNBLGdCQUFBRCxLQUNBQSxJQUFBLEtBQUFBLEVB
QUEsS0FFQSxRQURBRSxNQUNBUixFQUFBLEVBQWdCQSxFQUFBQyxLQUFBQyxPQUFpQkYsSUFBQSxD
QUNqQyxHQUFBUyxHQUFBUixLQUFBRCxHQUFBLEVBQ0EsaUJBQUFTLEtBQ0FELEVBQUFDLElBQUEs
R0FFQSxJQUFBVCxFQUFBLEVBQVlBLEVBQUFNLEVBQUFKLE9BQW9CRixJQUFBLENBQ2hDLEdBQUFH
LEdBQUFHLEVBQUFOLEVBS0EsaUJBQUFHLEdBQUEsSUFBQUssRUFBQUwsRUFBQSxNQUNBSSxJQUFB
SixFQUFBLEdBQ0FBLEVBQUEsR0FBQUksRUFDS0EsSUFDTEosRUFBQSxPQUFBQSxFQUFBLGFBQUFJ
LEVBQUEsS0FFQVYsRUFBQU8sS0FBQUQsTUFJQU4sTUQwQkciLCJmaWxlIjoiYnVuZGxlLnZlbmRv
ci5lZmFhM2UwZTIwMDc3YzhlNzQ3MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIndlYnBhY2tKc29u
cChbMSwyXSx7XG5cbi8qKiovIDE6XG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtc
blxuLy8gcmVtb3ZlZCBieSBleHRyYWN0LXRleHQtd2VicGFjay1wbHVnaW5cblxuLyoqKi8gfSxc
blxuLyoqKi8gMTI6XG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19y
ZXF1aXJlX18pIHtcblxubW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpO1xu
XG5cbi8qKiovIH0sXG5cbi8qKiovIDEzOlxuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRz
KSB7XG5cbi8qXHJcblx0TUlUIExpY2Vuc2UgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNl
bnNlcy9taXQtbGljZW5zZS5waHBcclxuXHRBdXRob3IgVG9iaWFzIEtvcHBlcnMgQHNva3JhXHJc
biovXHJcbi8vIGNzcyBiYXNlIGNvZGUsIGluamVjdGVkIGJ5IHRoZSBjc3MtbG9hZGVyXHJcbm1v
ZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7XHJcblx0dmFyIGxpc3QgPSBbXTtcclxuXHJcblx0
Ly8gcmV0dXJuIHRoZSBsaXN0IG9mIG1vZHVsZXMgYXMgY3NzIHN0cmluZ1xyXG5cdGxpc3QudG9T
dHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcclxuXHRcdHZhciByZXN1bHQgPSBbXTtcclxu
XHRcdGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdHZhciBp
dGVtID0gdGhpc1tpXTtcclxuXHRcdFx0aWYoaXRlbVsyXSkge1xyXG5cdFx0XHRcdHJlc3VsdC5w
dXNoKFwiQG1lZGlhIFwiICsgaXRlbVsyXSArIFwie1wiICsgaXRlbVsxXSArIFwifVwiKTtcclxu
XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRyZXN1bHQucHVzaChpdGVtWzFdKTtcclxuXHRcdFx0
fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHJlc3VsdC5qb2luKFwiXCIpO1xyXG5cdH07XHJcblxy
XG5cdC8vIGltcG9ydCBhIGxpc3Qgb2YgbW9kdWxlcyBpbnRvIHRoZSBsaXN0XHJcblx0bGlzdC5p
ID0gZnVuY3Rpb24obW9kdWxlcywgbWVkaWFRdWVyeSkge1xyXG5cdFx0aWYodHlwZW9mIG1vZHVs
ZXMgPT09IFwic3RyaW5nXCIpXHJcblx0XHRcdG1vZHVsZXMgPSBbW251bGwsIG1vZHVsZXMsIFwi
XCJdXTtcclxuXHRcdHZhciBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzID0ge307XHJcblx0XHRmb3Io
dmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHR2YXIgaWQgPSB0aGlz
W2ldWzBdO1xyXG5cdFx0XHRpZih0eXBlb2YgaWQgPT09IFwibnVtYmVyXCIpXHJcblx0XHRcdFx0
YWxyZWFkeUltcG9ydGVkTW9kdWxlc1tpZF0gPSB0cnVlO1xyXG5cdFx0fVxyXG5cdFx0Zm9yKGkg
PSAwOyBpIDwgbW9kdWxlcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHR2YXIgaXRlbSA9IG1vZHVs
ZXNbaV07XHJcblx0XHRcdC8vIHNraXAgYWxyZWFkeSBpbXBvcnRlZCBtb2R1bGVcclxuXHRcdFx0
Ly8gdGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBub3QgMTAwJSBwZXJmZWN0IGZvciB3ZWlyZCBtZWRp
YSBxdWVyeSBjb21iaW5hdGlvbnNcclxuXHRcdFx0Ly8gIHdoZW4gYSBtb2R1bGUgaXMgaW1wb3J0
ZWQgbXVsdGlwbGUgdGltZXMgd2l0aCBkaWZmZXJlbnQgbWVkaWEgcXVlcmllcy5cclxuXHRcdFx0
Ly8gIEkgaG9wZSB0aGlzIHdpbGwgbmV2ZXIgb2NjdXIgKEhleSB0aGlzIHdheSB3ZSBoYXZlIHNt
YWxsZXIgYnVuZGxlcylcclxuXHRcdFx0aWYodHlwZW9mIGl0ZW1bMF0gIT09IFwibnVtYmVyXCIg
fHwgIWFscmVhZHlJbXBvcnRlZE1vZHVsZXNbaXRlbVswXV0pIHtcclxuXHRcdFx0XHRpZihtZWRp
YVF1ZXJ5ICYmICFpdGVtWzJdKSB7XHJcblx0XHRcdFx0XHRpdGVtWzJdID0gbWVkaWFRdWVyeTtc
clxuXHRcdFx0XHR9IGVsc2UgaWYobWVkaWFRdWVyeSkge1xyXG5cdFx0XHRcdFx0aXRlbVsyXSA9
IFwiKFwiICsgaXRlbVsyXSArIFwiKSBhbmQgKFwiICsgbWVkaWFRdWVyeSArIFwiKVwiO1xyXG5c
dFx0XHRcdH1cclxuXHRcdFx0XHRsaXN0LnB1c2goaXRlbSk7XHJcblx0XHRcdH1cclxuXHRcdH1c
clxuXHR9O1xyXG5cdHJldHVybiBsaXN0O1xyXG59O1xyXG5cblxuLyoqKi8gfVxuXG59LFsxMl0p
O1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyBidW5kbGUudmVuZG9yLmVmYWEzZTBlMjAw
NzdjOGU3NDcxLmpzIiwiLypcclxuXHRNSVQgTGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uu
b3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocFxyXG5cdEF1dGhvciBUb2JpYXMgS29wcGVycyBA
c29rcmFcclxuKi9cclxuLy8gY3NzIGJhc2UgY29kZSwgaW5qZWN0ZWQgYnkgdGhlIGNzcy1sb2Fk
ZXJcclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHtcclxuXHR2YXIgbGlzdCA9IFtdO1xy
XG5cclxuXHQvLyByZXR1cm4gdGhlIGxpc3Qgb2YgbW9kdWxlcyBhcyBjc3Mgc3RyaW5nXHJcblx0
bGlzdC50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xyXG5cdFx0dmFyIHJlc3VsdCA9
IFtdO1xyXG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcclxuXHRc
dFx0dmFyIGl0ZW0gPSB0aGlzW2ldO1xyXG5cdFx0XHRpZihpdGVtWzJdKSB7XHJcblx0XHRcdFx0
cmVzdWx0LnB1c2goXCJAbWVkaWEgXCIgKyBpdGVtWzJdICsgXCJ7XCIgKyBpdGVtWzFdICsgXCJ9
XCIpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHJlc3VsdC5wdXNoKGl0ZW1bMV0pO1xy
XG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gcmVzdWx0LmpvaW4oXCJcIik7XHJcblx0
fTtcclxuXHJcblx0Ly8gaW1wb3J0IGEgbGlzdCBvZiBtb2R1bGVzIGludG8gdGhlIGxpc3Rcclxu
XHRsaXN0LmkgPSBmdW5jdGlvbihtb2R1bGVzLCBtZWRpYVF1ZXJ5KSB7XHJcblx0XHRpZih0eXBl
b2YgbW9kdWxlcyA9PT0gXCJzdHJpbmdcIilcclxuXHRcdFx0bW9kdWxlcyA9IFtbbnVsbCwgbW9k
dWxlcywgXCJcIl1dO1xyXG5cdFx0dmFyIGFscmVhZHlJbXBvcnRlZE1vZHVsZXMgPSB7fTtcclxu
XHRcdGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdHZhciBp
ZCA9IHRoaXNbaV1bMF07XHJcblx0XHRcdGlmKHR5cGVvZiBpZCA9PT0gXCJudW1iZXJcIilcclxu
XHRcdFx0XHRhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2lkXSA9IHRydWU7XHJcblx0XHR9XHJcblx0
XHRmb3IoaSA9IDA7IGkgPCBtb2R1bGVzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdHZhciBpdGVt
ID0gbW9kdWxlc1tpXTtcclxuXHRcdFx0Ly8gc2tpcCBhbHJlYWR5IGltcG9ydGVkIG1vZHVsZVxy
XG5cdFx0XHQvLyB0aGlzIGltcGxlbWVudGF0aW9uIGlzIG5vdCAxMDAlIHBlcmZlY3QgZm9yIHdl
aXJkIG1lZGlhIHF1ZXJ5IGNvbWJpbmF0aW9uc1xyXG5cdFx0XHQvLyAgd2hlbiBhIG1vZHVsZSBp
cyBpbXBvcnRlZCBtdWx0aXBsZSB0aW1lcyB3aXRoIGRpZmZlcmVudCBtZWRpYSBxdWVyaWVzLlxy
XG5cdFx0XHQvLyAgSSBob3BlIHRoaXMgd2lsbCBuZXZlciBvY2N1ciAoSGV5IHRoaXMgd2F5IHdl
IGhhdmUgc21hbGxlciBidW5kbGVzKVxyXG5cdFx0XHRpZih0eXBlb2YgaXRlbVswXSAhPT0gXCJu
dW1iZXJcIiB8fCAhYWxyZWFkeUltcG9ydGVkTW9kdWxlc1tpdGVtWzBdXSkge1xyXG5cdFx0XHRc
dGlmKG1lZGlhUXVlcnkgJiYgIWl0ZW1bMl0pIHtcclxuXHRcdFx0XHRcdGl0ZW1bMl0gPSBtZWRp
YVF1ZXJ5O1xyXG5cdFx0XHRcdH0gZWxzZSBpZihtZWRpYVF1ZXJ5KSB7XHJcblx0XHRcdFx0XHRp
dGVtWzJdID0gXCIoXCIgKyBpdGVtWzJdICsgXCIpIGFuZCAoXCIgKyBtZWRpYVF1ZXJ5ICsgXCIp
XCI7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGxpc3QucHVzaChpdGVtKTtcclxuXHRcdFx0fVxy
XG5cdFx0fVxyXG5cdH07XHJcblx0cmV0dXJuIGxpc3Q7XHJcbn07XHJcblxuXG5cbi8vLy8vLy8v
Ly8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4uL34vY3NzLWxvYWRlci9saWIvY3Nz
LWJhc2UuanNcbi8vIG1vZHVsZSBpZCA9IDEzXG4vLyBtb2R1bGUgY2h1bmtzID0gMSJdLCJzb3Vy
Y2VSb290IjoiIn0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9QZXJm
b3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBs
ZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svZGlzdC9pbmRleC5odG1sIGIvUGVyZm9ybWFuY2VUZXN0
cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1i
YWJlbC13ZWJwYWNrL2Rpc3QvaW5kZXguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNGEwZWViZjcxYjUxZDQz
MGUzOTdkY2U2YjIxYjhmNzhmY2NjMDRkCi0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VU
ZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAx
NS1iYWJlbC13ZWJwYWNrL2Rpc3QvaW5kZXguaHRtbApAQCAtMCwwICsxLDQ1IEBACis8IWRvY3R5
cGUgaHRtbD4KKzxodG1sIGxhbmc9ImVuIiBkYXRhLWZyYW1ld29yaz0iamF2YXNjcmlwdCI+Cisg
IDxoZWFkPgorICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgICA8dGl0bGU+VmFuaWxsYUpT
IOKAoiBUb2RvTVZDPC90aXRsZT4KKyAgICA8c2NyaXB0PiFmdW5jdGlvbihlKXtmdW5jdGlvbiBy
KG4pe2lmKHRbbl0pcmV0dXJuIHRbbl0uZXhwb3J0czt2YXIgbz10W25dPXtpOm4sbDohMSxleHBv
cnRzOnt9fTtyZXR1cm4gZVtuXS5jYWxsKG8uZXhwb3J0cyxvLG8uZXhwb3J0cyxyKSxvLmw9ITAs
by5leHBvcnRzfXZhciBuPXdpbmRvdy53ZWJwYWNrSnNvbnA7d2luZG93LndlYnBhY2tKc29ucD1m
dW5jdGlvbih0LGMsdSl7Zm9yKHZhciBhLGksZixsPTAscz1bXTtsPHQubGVuZ3RoO2wrKylpPXRb
bF0sb1tpXSYmcy5wdXNoKG9baV1bMF0pLG9baV09MDtmb3IoYSBpbiBjKU9iamVjdC5wcm90b3R5
cGUuaGFzT3duUHJvcGVydHkuY2FsbChjLGEpJiYoZVthXT1jW2FdKTtmb3IobiYmbih0LGMsdSk7
cy5sZW5ndGg7KXMuc2hpZnQoKSgpO2lmKHUpZm9yKGw9MDtsPHUubGVuZ3RoO2wrKylmPXIoci5z
PXVbbF0pO3JldHVybiBmfTt2YXIgdD17fSxvPXsyOjB9O3IuZT1mdW5jdGlvbihlKXtmdW5jdGlv
biBuKCl7Yy5vbmVycm9yPWMub25sb2FkPW51bGwsY2xlYXJUaW1lb3V0KHUpO3ZhciByPW9bZV07
MCE9PXImJihyJiZyWzFdKG5ldyBFcnJvcigiTG9hZGluZyBjaHVuayAiK2UrIiBmYWlsZWQuIikp
LG9bZV09dm9pZCAwKX1pZigwPT09b1tlXSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7aWYob1tl
XSlyZXR1cm4gb1tlXVsyXTt2YXIgdD1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVh
ZCIpWzBdLGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7Yy50eXBlPSJ0ZXh0L2ph
dmFzY3JpcHQiLGMuY2hhcnNldD0idXRmLTgiLGMuYXN5bmM9ITAsYy50aW1lb3V0PTEyZTQsYy5z
cmM9ci5wKyJidW5kbGUuIitlKyIuIit7MDoiNzNiY2M1ZDNjMWQwNzE4MGYwZTMiLDE6ImVmYWEz
ZTBlMjAwNzdjOGU3NDcxIn1bZV0rIi5qcyI7dmFyIHU9c2V0VGltZW91dChuLDEyZTQpO2Mub25l
cnJvcj1jLm9ubG9hZD1uLHQuYXBwZW5kQ2hpbGQoYyk7dmFyIGE9bmV3IFByb21pc2UoZnVuY3Rp
b24ocixuKXtvW2VdPVtyLG5dfSk7cmV0dXJuIG9bZV1bMl09YX0sci5tPWUsci5jPXQsci5pPWZ1
bmN0aW9uKGUpe3JldHVybiBlfSxyLmQ9ZnVuY3Rpb24oZSxyLG4pe09iamVjdC5kZWZpbmVQcm9w
ZXJ0eShlLHIse2NvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLGdldDpufSl9LHIubj1mdW5j
dGlvbihlKXt2YXIgbj1lJiZlLl9fZXNNb2R1bGU/ZnVuY3Rpb24oKXtyZXR1cm4gZVsiZGVmYXVs
dCJdfTpmdW5jdGlvbigpe3JldHVybiBlfTtyZXR1cm4gci5kKG4sImEiLG4pLG59LHIubz1mdW5j
dGlvbihlLHIpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxy
KX0sci5wPSIiLHIub2U9ZnVuY3Rpb24oZSl7dGhyb3cgY29uc29sZS5lcnJvcihlKSxlfX0oW10p
OworPC9zY3JpcHQ+CisgIDxsaW5rIGhyZWY9InN0eWxlcy52ZW5kb3IuZWZhYTNlMGUyMDA3N2M4
ZTc0NzEuY3NzIiByZWw9InN0eWxlc2hlZXQiPjxsaW5rIGhyZWY9InN0eWxlcy5hcHAuNzNiY2M1
ZDNjMWQwNzE4MGYwZTMuY3NzIiByZWw9InN0eWxlc2hlZXQiPjxzY3JpcHQgdHlwZT0idGV4dC9q
YXZhc2NyaXB0IiBzcmM9ImJ1bmRsZS52ZW5kb3IuZWZhYTNlMGUyMDA3N2M4ZTc0NzEuanMiPjwv
c2NyaXB0PjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImJ1bmRsZS5hcHAuNzNi
Y2M1ZDNjMWQwNzE4MGYwZTMuanMiPjwvc2NyaXB0PjwvaGVhZD4KKyAgPGJvZHk+CisgICAgPHNl
Y3Rpb24gY2xhc3M9InRvZG9hcHAiPgorICAgICAgPGhlYWRlciBjbGFzcz0iaGVhZGVyIj4KKyAg
ICAgICAgPGgxPnRvZG9zPC9oMT4KKyAgICAgICAgPGlucHV0IGNsYXNzPSJuZXctdG9kbyIgcGxh
Y2Vob2xkZXI9IldoYXQgbmVlZHMgdG8gYmUgZG9uZT8iIGF1dG9mb2N1cz4KKyAgICAgIDwvaGVh
ZGVyPgorICAgICAgPHNlY3Rpb24gY2xhc3M9Im1haW4iPgorICAgICAgICA8aW5wdXQgY2xhc3M9
InRvZ2dsZS1hbGwiIHR5cGU9ImNoZWNrYm94Ij4KKyAgICAgICAgPGxhYmVsIGZvcj0idG9nZ2xl
LWFsbCI+TWFyayBhbGwgYXMgY29tcGxldGU8L2xhYmVsPgorICAgICAgICA8dWwgY2xhc3M9InRv
ZG8tbGlzdCI+PC91bD4KKyAgICAgIDwvc2VjdGlvbj4KKyAgICAgIDxmb290ZXIgY2xhc3M9ImZv
b3RlciI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJ0b2RvLWNvdW50Ij48L3NwYW4+CisgICAgICAg
IDx1bCBjbGFzcz0iZmlsdGVycyI+CisgICAgICAgICAgPGxpPgorICAgICAgICAgICAgPGEgaHJl
Zj0iIy8iIGNsYXNzPSJzZWxlY3RlZCI+QWxsPC9hPgorICAgICAgICAgIDwvbGk+CisgICAgICAg
ICAgPGxpPgorICAgICAgICAgICAgPGEgaHJlZj0iIy9hY3RpdmUiPkFjdGl2ZTwvYT4KKyAgICAg
ICAgICA8L2xpPgorICAgICAgICAgIDxsaT4KKyAgICAgICAgICAgIDxhIGhyZWY9IiMvY29tcGxl
dGVkIj5Db21wbGV0ZWQ8L2E+CisgICAgICAgICAgPC9saT4KKyAgICAgICAgPC91bD4KKyAgICAg
ICAgPGJ1dHRvbiBjbGFzcz0iY2xlYXItY29tcGxldGVkIj5DbGVhciBjb21wbGV0ZWQ8L2J1dHRv
bj4KKyAgICAgIDwvZm9vdGVyPgorICAgIDwvc2VjdGlvbj4KKyAgICA8Zm9vdGVyIGNsYXNzPSJp
bmZvIj4KKyAgICAgIDxwPkRvdWJsZS1jbGljayB0byBlZGl0IGEgdG9kbzwvcD4KKyAgICAgIDxw
PlNwZWVkb21ldGVyIHZlcnNpb24gYnkgPGEgaHJlZj0iaHR0cDovL3R3aXR0ZXIuY29tL2FkZHlv
c21hbmkiPkFkZHkgT3NtYW5pPC9hPjwvcD4KKyAgICAgIDxwPkNyZWF0ZWQgYnkgPGEgaHJlZj0i
aHR0cDovL3R3aXR0ZXIuY29tL29zY2FyZ29kc29uIj5Pc2NhciBHb2Rzb248L2E+PC9wPgorICAg
ICAgPHA+UmVmYWN0b3JlZCBieSA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vY2J1cmdtZXIi
PkNocmlzdG9waCBCdXJnbWVyPC9hPjwvcD4KKyAgICAgIDxwPlBvcnRlZCB0byBFUzYgYnkgPGEg
aHJlZj0iaHR0cHM6Ly90d2l0dGVyLmNvbS9rZW50Y2RvZGRzIj5LZW50IEMuIERvZGRzPC9hPjwv
cD4KKyAgICAgIDxwPlBhcnQgb2YgPGEgaHJlZj0iaHR0cDovL3RvZG9tdmMuY29tIj5Ub2RvTVZD
PC9hPjwvcD4KKyAgICA8L2Zvb3Rlcj4KKyAgPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEv
UGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4
YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrL2Rpc3Qvc3R5bGVzLmFwcC43M2JjYzVkM2MxZDA3
MTgwZjBlMy5jc3MgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2Rv
bXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svZGlzdC9zdHlsZXMuYXBw
LjczYmNjNWQzYzFkMDcxODBmMGUzLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZTg5ODZlMzYxMTZjNWIzM2Nm
MWY3Y2QzNDJkNmFkMjUwYTQ5NWUxCi0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0
cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1i
YWJlbC13ZWJwYWNrL2Rpc3Qvc3R5bGVzLmFwcC43M2JjYzVkM2MxZDA3MTgwZjBlMy5jc3MKQEAg
LTAsMCArMSwyIEBACisudG9nZ2xlLWdyYXBoe2Zsb2F0OmxlZnQ7bWFyZ2luLWxlZnQ6MTZweDtj
dXJzb3I6cG9pbnRlcjtwb3NpdGlvbjpyZWxhdGl2ZTt6LWluZGV4OjF9LnRvZ2dsZS1ncmFwaCBz
dmd7aGVpZ2h0OjIwcHg7d2lkdGg6MjBweH0udG9nZ2xlLWdyYXBoIHN2ZyBwYXRoe2ZpbGw6Izc3
N30udG9nZ2xlLWdyYXBoLmFjdGl2ZSBzdmcgcGF0aCwudG9nZ2xlLWdyYXBoOmZvY3VzIHN2ZyBw
YXRoLC50b2dnbGUtZ3JhcGg6aG92ZXIgc3ZnIHBhdGh7ZmlsbDojMDAwfQorLyojIHNvdXJjZU1h
cHBpbmdVUkw9c3R5bGVzLmFwcC43M2JjYzVkM2MxZDA3MTgwZjBlMy5jc3MubWFwKi8KXCBObyBu
ZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVk
b21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdl
YnBhY2svZGlzdC9zdHlsZXMuYXBwLjczYmNjNWQzYzFkMDcxODBmMGUzLmNzcy5tYXAgYi9QZXJm
b3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBs
ZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svZGlzdC9zdHlsZXMuYXBwLjczYmNjNWQzYzFkMDcxODBm
MGUzLmNzcy5tYXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjhjZGMyN2UyNmMwNmY3YTg1Y2IxY2FjYjVkYzA2YTEx
OWZjMWU3ZQotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIv
cmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9k
aXN0L3N0eWxlcy5hcHAuNzNiY2M1ZDNjMWQwNzE4MGYwZTMuY3NzLm1hcApAQCAtMCwwICsxIEBA
Cit7InZlcnNpb24iOjMsInNvdXJjZXMiOltdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwiZmls
ZSI6InN0eWxlcy5hcHAuNzNiY2M1ZDNjMWQwNzE4MGYwZTMuY3NzIiwic291cmNlUm9vdCI6IiJ9
ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0
cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1i
YWJlbC13ZWJwYWNrL2Rpc3Qvc3R5bGVzLnZlbmRvci5lZmFhM2UwZTIwMDc3YzhlNzQ3MS5jc3Mg
Yi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEt
ZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svZGlzdC9zdHlsZXMudmVuZG9yLmVmYWEzZTBl
MjAwNzdjOGU3NDcxLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZjVmODM1M2E3ZjliNjQ2NGNjNDdiYjA3OTZi
ZjAxNzhjMmI4YTFjCi0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9t
ZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJw
YWNrL2Rpc3Qvc3R5bGVzLnZlbmRvci5lZmFhM2UwZTIwMDc3YzhlNzQ3MS5jc3MKQEAgLTAsMCAr
MSwyIEBACitib2R5LGJ1dHRvbixodG1se21hcmdpbjowO3BhZGRpbmc6MH1idXR0b257Ym9yZGVy
OjA7YmFja2dyb3VuZDpub25lO2ZvbnQtc2l6ZToxMDAlO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5l
O2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC13ZWlnaHQ6aW5oZXJpdDtjb2xvcjppbmhlcml0Oy13
ZWJraXQtYXBwZWFyYW5jZTpub25lO2FwcGVhcmFuY2U6bm9uZTstd2Via2l0LWZvbnQtc21vb3Ro
aW5nOmFudGlhbGlhc2VkfWJvZHksYnV0dG9uey1tb3otb3N4LWZvbnQtc21vb3RoaW5nOmdyYXlz
Y2FsZX1ib2R5e2ZvbnQ6MTRweCBIZWx2ZXRpY2EgTmV1ZSxIZWx2ZXRpY2EsQXJpYWwsc2Fucy1z
ZXJpZjtsaW5lLWhlaWdodDoxLjRlbTtiYWNrZ3JvdW5kOiNmNWY1ZjU7Y29sb3I6IzRkNGQ0ZDtt
aW4td2lkdGg6MjMwcHg7bWF4LXdpZHRoOjU1MHB4O21hcmdpbjowIGF1dG87LXdlYmtpdC1mb250
LXNtb290aGluZzphbnRpYWxpYXNlZDtmb250LXdlaWdodDozMDB9OmZvY3Vze291dGxpbmU6MH0u
aGlkZGVue2Rpc3BsYXk6bm9uZX0udG9kb2FwcHtiYWNrZ3JvdW5kOiNmZmY7bWFyZ2luOjEzMHB4
IDAgNDBweDtwb3NpdGlvbjpyZWxhdGl2ZTtib3gtc2hhZG93OjAgMnB4IDRweCAwIHJnYmEoMCww
LDAsLjIpLDAgMjVweCA1MHB4IDAgcmdiYSgwLDAsMCwuMSl9LnRvZG9hcHAgaW5wdXQ6Oi13ZWJr
aXQtaW5wdXQtcGxhY2Vob2xkZXJ7Zm9udC1zdHlsZTppdGFsaWM7Zm9udC13ZWlnaHQ6MzAwO2Nv
bG9yOiNlNmU2ZTZ9LnRvZG9hcHAgaW5wdXQ6Oi1tb3otcGxhY2Vob2xkZXJ7Zm9udC1zdHlsZTpp
dGFsaWM7Zm9udC13ZWlnaHQ6MzAwO2NvbG9yOiNlNmU2ZTZ9LnRvZG9hcHAgaW5wdXQ6OmlucHV0
LXBsYWNlaG9sZGVye2ZvbnQtc3R5bGU6aXRhbGljO2ZvbnQtd2VpZ2h0OjMwMDtjb2xvcjojZTZl
NmU2fS50b2RvYXBwIGgxe3Bvc2l0aW9uOmFic29sdXRlO3RvcDotMTU1cHg7d2lkdGg6MTAwJTtm
b250LXNpemU6MTAwcHg7Zm9udC13ZWlnaHQ6MTAwO3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOnJn
YmEoMTc1LDQ3LDQ3LC4xNSk7LXdlYmtpdC10ZXh0LXJlbmRlcmluZzpvcHRpbWl6ZUxlZ2liaWxp
dHk7LW1vei10ZXh0LXJlbmRlcmluZzpvcHRpbWl6ZUxlZ2liaWxpdHk7dGV4dC1yZW5kZXJpbmc6
b3B0aW1pemVMZWdpYmlsaXR5fS5lZGl0LC5uZXctdG9kb3twb3NpdGlvbjpyZWxhdGl2ZTttYXJn
aW46MDt3aWR0aDoxMDAlO2ZvbnQtc2l6ZToyNHB4O2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC13
ZWlnaHQ6aW5oZXJpdDtsaW5lLWhlaWdodDoxLjRlbTtib3JkZXI6MDtjb2xvcjppbmhlcml0O3Bh
ZGRpbmc6NnB4O2JvcmRlcjoxcHggc29saWQgIzk5OTtib3gtc2hhZG93Omluc2V0IDAgLTFweCA1
cHggMCByZ2JhKDAsMCwwLC4yKTtib3gtc2l6aW5nOmJvcmRlci1ib3g7LXdlYmtpdC1mb250LXNt
b290aGluZzphbnRpYWxpYXNlZDstbW96LW9zeC1mb250LXNtb290aGluZzpncmF5c2NhbGV9Lm5l
dy10b2Rve3BhZGRpbmc6MTZweCAxNnB4IDE2cHggNjBweDtib3JkZXI6bm9uZTtiYWNrZ3JvdW5k
OnJnYmEoMCwwLDAsLjAwMyk7Ym94LXNoYWRvdzppbnNldCAwIC0ycHggMXB4IHJnYmEoMCwwLDAs
LjAzKX0ubWFpbntwb3NpdGlvbjpyZWxhdGl2ZTt6LWluZGV4OjI7Ym9yZGVyLXRvcDoxcHggc29s
aWQgI2U2ZTZlNn1sYWJlbFtmb3I9dG9nZ2xlLWFsbF17ZGlzcGxheTpub25lfS50b2dnbGUtYWxs
e3Bvc2l0aW9uOmFic29sdXRlO3RvcDotNTVweDtsZWZ0Oi0xMnB4O3dpZHRoOjYwcHg7aGVpZ2h0
OjM0cHg7dGV4dC1hbGlnbjpjZW50ZXI7Ym9yZGVyOm5vbmV9LnRvZ2dsZS1hbGw6YmVmb3Jle2Nv
bnRlbnQ6IlwyNzZGIjtmb250LXNpemU6MjJweDtjb2xvcjojZTZlNmU2O3BhZGRpbmc6MTBweCAy
N3B4fS50b2dnbGUtYWxsOmNoZWNrZWQ6YmVmb3Jle2NvbG9yOiM3MzczNzN9LnRvZG8tbGlzdHtt
YXJnaW46MDtwYWRkaW5nOjA7bGlzdC1zdHlsZTpub25lfS50b2RvLWxpc3QgbGl7cG9zaXRpb246
cmVsYXRpdmU7Zm9udC1zaXplOjI0cHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2VkZWRlZH0u
dG9kby1saXN0IGxpOmxhc3QtY2hpbGR7Ym9yZGVyLWJvdHRvbTpub25lfS50b2RvLWxpc3QgbGku
ZWRpdGluZ3tib3JkZXItYm90dG9tOm5vbmU7cGFkZGluZzowfS50b2RvLWxpc3QgbGkuZWRpdGlu
ZyAuZWRpdHtkaXNwbGF5OmJsb2NrO3dpZHRoOjUwNnB4O3BhZGRpbmc6MTJweCAxNnB4O21hcmdp
bjowIDAgMCA0M3B4fS50b2RvLWxpc3QgbGkuZWRpdGluZyAudmlld3tkaXNwbGF5Om5vbmV9LnRv
ZG8tbGlzdCBsaSAudG9nZ2xle3RleHQtYWxpZ246Y2VudGVyO3dpZHRoOjQwcHg7aGVpZ2h0OmF1
dG87cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bWFyZ2luOmF1dG8gMDtib3JkZXI6
bm9uZTstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTthcHBlYXJhbmNlOm5vbmV9LnRvZG8tbGlzdCBs
aSAudG9nZ2xlOmFmdGVye2NvbnRlbnQ6dXJsKCdkYXRhOmltYWdlL3N2Zyt4bWw7dXRmOCw8c3Zn
IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjQwIiBoZWlnaHQ9IjQw
IiB2aWV3Qm94PSItMTAgLTE4IDEwMCAxMzUiPjxjaXJjbGUgY3g9IjUwIiBjeT0iNTAiIHI9IjUw
IiBmaWxsPSJub25lIiBzdHJva2U9IiNlZGVkZWQiIHN0cm9rZS13aWR0aD0iMyIvPjwvc3ZnPicp
fS50b2RvLWxpc3QgbGkgLnRvZ2dsZTpjaGVja2VkOmFmdGVye2NvbnRlbnQ6dXJsKCdkYXRhOmlt
YWdlL3N2Zyt4bWw7dXRmOCw8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIg
d2lkdGg9IjQwIiBoZWlnaHQ9IjQwIiB2aWV3Qm94PSItMTAgLTE4IDEwMCAxMzUiPjxjaXJjbGUg
Y3g9IjUwIiBjeT0iNTAiIHI9IjUwIiBmaWxsPSJub25lIiBzdHJva2U9IiNiZGRhZDUiIHN0cm9r
ZS13aWR0aD0iMyIvPjxwYXRoIGZpbGw9IiM1ZGMyYWYiIGQ9Ik03MiAyNUw0MiA3MSAyNyA1Nmwt
NCA0IDIwIDIwIDM0LTUyeiIvPjwvc3ZnPicpfS50b2RvLWxpc3QgbGkgbGFiZWx7d29yZC1icmVh
azpicmVhay1hbGw7cGFkZGluZzoxNXB4IDYwcHggMTVweCAxNXB4O21hcmdpbi1sZWZ0OjQ1cHg7
ZGlzcGxheTpibG9jaztsaW5lLWhlaWdodDoxLjI7dHJhbnNpdGlvbjpjb2xvciAuNHN9LnRvZG8t
bGlzdCBsaS5jb21wbGV0ZWQgbGFiZWx7Y29sb3I6I2Q5ZDlkOTt0ZXh0LWRlY29yYXRpb246bGlu
ZS10aHJvdWdofS50b2RvLWxpc3QgbGkgLmRlc3Ryb3l7ZGlzcGxheTpub25lO3Bvc2l0aW9uOmFi
c29sdXRlO3RvcDowO3JpZ2h0OjEwcHg7Ym90dG9tOjA7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDtt
YXJnaW46YXV0byAwO2ZvbnQtc2l6ZTozMHB4O2NvbG9yOiNjYzlhOWE7bWFyZ2luLWJvdHRvbTox
MXB4O3RyYW5zaXRpb246Y29sb3IgLjJzIGVhc2Utb3V0fS50b2RvLWxpc3QgbGkgLmRlc3Ryb3k6
aG92ZXJ7Y29sb3I6I2FmNWI1ZX0udG9kby1saXN0IGxpIC5kZXN0cm95OmFmdGVye2NvbnRlbnQ6
IlxENyJ9LnRvZG8tbGlzdCBsaTpob3ZlciAuZGVzdHJveXtkaXNwbGF5OmJsb2NrfS50b2RvLWxp
c3QgbGkgLmVkaXR7ZGlzcGxheTpub25lfS50b2RvLWxpc3QgbGkuZWRpdGluZzpsYXN0LWNoaWxk
e21hcmdpbi1ib3R0b206LTFweH0uZm9vdGVye2NvbG9yOiM3Nzc7cGFkZGluZzoxMHB4IDE1cHg7
aGVpZ2h0OjIwcHg7dGV4dC1hbGlnbjpjZW50ZXI7Ym9yZGVyLXRvcDoxcHggc29saWQgI2U2ZTZl
Nn0uZm9vdGVyOmJlZm9yZXtjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7Ym90
dG9tOjA7bGVmdDowO2hlaWdodDo1MHB4O292ZXJmbG93OmhpZGRlbjtib3gtc2hhZG93OjAgMXB4
IDFweCByZ2JhKDAsMCwwLC4yKSwwIDhweCAwIC0zcHggI2Y2ZjZmNiwwIDlweCAxcHggLTNweCBy
Z2JhKDAsMCwwLC4yKSwwIDE2cHggMCAtNnB4ICNmNmY2ZjYsMCAxN3B4IDJweCAtNnB4IHJnYmEo
MCwwLDAsLjIpfS50b2RvLWNvdW50e2Zsb2F0OmxlZnQ7dGV4dC1hbGlnbjpsZWZ0fS50b2RvLWNv
dW50IHN0cm9uZ3tmb250LXdlaWdodDozMDB9LmZpbHRlcnN7bWFyZ2luOjA7cGFkZGluZzowO2xp
c3Qtc3R5bGU6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO2xlZnQ6MH0uZmlsdGVycyBs
aXtkaXNwbGF5OmlubGluZX0uZmlsdGVycyBsaSBhe2NvbG9yOmluaGVyaXQ7bWFyZ2luOjNweDtw
YWRkaW5nOjNweCA3cHg7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Ym9yZGVyOjFweCBzb2xpZCB0cmFu
c3BhcmVudDtib3JkZXItcmFkaXVzOjNweH0uZmlsdGVycyBsaSBhOmhvdmVye2JvcmRlci1jb2xv
cjpyZ2JhKDE3NSw0Nyw0NywuMSl9LmZpbHRlcnMgbGkgYS5zZWxlY3RlZHtib3JkZXItY29sb3I6
cmdiYSgxNzUsNDcsNDcsLjIpfS5jbGVhci1jb21wbGV0ZWQsaHRtbCAuY2xlYXItY29tcGxldGVk
OmFjdGl2ZXtmbG9hdDpyaWdodDtwb3NpdGlvbjpyZWxhdGl2ZTtsaW5lLWhlaWdodDoyMHB4O3Rl
eHQtZGVjb3JhdGlvbjpub25lO2N1cnNvcjpwb2ludGVyfS5jbGVhci1jb21wbGV0ZWQ6aG92ZXJ7
dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZX0uaW5mb3ttYXJnaW46NjVweCBhdXRvIDA7Y29sb3I6
I2JmYmZiZjtmb250LXNpemU6MTBweDt0ZXh0LXNoYWRvdzowIDFweCAwIGhzbGEoMCwwJSwxMDAl
LC41KTt0ZXh0LWFsaWduOmNlbnRlcn0uaW5mbyBwe2xpbmUtaGVpZ2h0OjF9LmluZm8gYXtjb2xv
cjppbmhlcml0O3RleHQtZGVjb3JhdGlvbjpub25lO2ZvbnQtd2VpZ2h0OjQwMH0uaW5mbyBhOmhv
dmVye3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmV9QG1lZGlhIHNjcmVlbiBhbmQgKC13ZWJraXQt
bWluLWRldmljZS1waXhlbC1yYXRpbzowKXsudG9kby1saXN0IGxpIC50b2dnbGUsLnRvZ2dsZS1h
bGx7YmFja2dyb3VuZDpub25lfS50b2RvLWxpc3QgbGkgLnRvZ2dsZXtoZWlnaHQ6NDBweH0udG9n
Z2xlLWFsbHstd2Via2l0LXRyYW5zZm9ybTpyb3RhdGUoOTBkZWcpO3RyYW5zZm9ybTpyb3RhdGUo
OTBkZWcpOy13ZWJraXQtYXBwZWFyYW5jZTpub25lO2FwcGVhcmFuY2U6bm9uZX19QG1lZGlhICht
YXgtd2lkdGg6NDMwcHgpey5mb290ZXJ7aGVpZ2h0OjUwcHh9LmZpbHRlcnN7Ym90dG9tOjEwcHh9
fQorLyojIHNvdXJjZU1hcHBpbmdVUkw9c3R5bGVzLnZlbmRvci5lZmFhM2UwZTIwMDc3YzhlNzQ3
MS5jc3MubWFwKi8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9QZXJm
b3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBs
ZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svZGlzdC9zdHlsZXMudmVuZG9yLmVmYWEzZTBlMjAwNzdj
OGU3NDcxLmNzcy5tYXAgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90
b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svZGlzdC9zdHlsZXMu
dmVuZG9yLmVmYWEzZTBlMjAwNzdjOGU3NDcxLmNzcy5tYXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmE2MjlkM2Vl
ZTdkOTY0YzIwMmI2YmQ1MDNkYTQxOTM2NmNjMDg0OAotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZv
cm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxl
cy9lczIwMTUtYmFiZWwtd2VicGFjay9kaXN0L3N0eWxlcy52ZW5kb3IuZWZhYTNlMGUyMDA3N2M4
ZTc0NzEuY3NzLm1hcApAQCAtMCwwICsxIEBACit7InZlcnNpb24iOjMsInNvdXJjZXMiOltdLCJu
YW1lcyI6W10sIm1hcHBpbmdzIjoiIiwiZmlsZSI6InN0eWxlcy52ZW5kb3IuZWZhYTNlMGUyMDA3
N2M4ZTc0NzEuY3NzIiwic291cmNlUm9vdCI6IiJ9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmls
ZQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9k
b212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrL3BhY2thZ2UuanNvbiBi
L1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1l
eGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9wYWNrYWdlLmpzb24KbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODZm
N2JiYjk3NWU1ODBjYTFmMjM1NWQ0MDMxODM3ZWViM2ZiMjZhMQotLS0gL2Rldi9udWxsCisrKyBi
L1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1l
eGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9wYWNrYWdlLmpzb24KQEAgLTAsMCArMSw3NSBA
QAoreworICAicHJpdmF0ZSI6IHRydWUsCisgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgImQzIjog
IjMuNS4xNyIsCisgICAgImxvZGFzaCI6ICI0LjE0LjEiLAorICAgICJyZDMiOiAiMC43LjAiLAor
ICAgICJyZWFjdCI6ICIxNS4zLjAiLAorICAgICJyZWFjdC1kb20iOiAiMTUuMy4wIiwKKyAgICAi
dG9kb212Yy1hcHAtY3NzIjogIjIuMC42IgorICB9LAorICAiZGV2RGVwZW5kZW5jaWVzIjogewor
ICAgICJiYWJlbC1jb3JlIjogIjYuMTMuMiIsCisgICAgImJhYmVsLWxvYWRlciI6ICI2LjIuNCIs
CisgICAgImJhYmVsLXBsdWdpbi1fX2NvdmVyYWdlX18iOiAiMTEuMC4wIiwKKyAgICAiYmFiZWwt
cHJlc2V0LWVzMjAxNSI6ICI2LjEzLjIiLAorICAgICJiYWJlbC1wcmVzZXQtZXMyMDE2IjogIjYu
MTEuMyIsCisgICAgImJhYmVsLXByZXNldC1yZWFjdCI6ICI2LjExLjEiLAorICAgICJiYWJlbC1w
cmVzZXQtc3RhZ2UtMiI6ICI2LjEzLjAiLAorICAgICJjaGFpIjogIjMuNS4wIiwKKyAgICAiY3B5
LWNsaSI6ICIxLjAuMSIsCisgICAgImNzcy1sb2FkZXIiOiAiMC4yMy4xIiwKKyAgICAiZXNsaW50
IjogIjMuMi4yIiwKKyAgICAiZXNsaW50LWNvbmZpZy1rZW50Y2RvZGRzIjogIl45LjAuMCIsCisg
ICAgImV4dHJhY3QtdGV4dC13ZWJwYWNrLXBsdWdpbiI6ICIyLjAuMC1iZXRhLjMiLAorICAgICJn
aG9va3MiOiAiMS4zLjIiLAorICAgICJodG1sLXdlYnBhY2stcGx1Z2luIjogIjIuMjIuMCIsCisg
ICAgImh0dHAtc2VydmVyIjogIjAuOS4wIiwKKyAgICAiaW5saW5lLW1hbmlmZXN0LXdlYnBhY2st
cGx1Z2luIjogIjMuMC4xIiwKKyAgICAia2FybWEiOiAiMS4xLjIiLAorICAgICJrYXJtYS1jaGFp
IjogIjAuMS4wIiwKKyAgICAia2FybWEtY2hyb21lLWxhdW5jaGVyIjogIjEuMC4xIiwKKyAgICAi
a2FybWEtY292ZXJhZ2UiOiAiMS4xLjEiLAorICAgICJrYXJtYS1tb2NoYSI6ICIxLjEuMSIsCisg
ICAgImthcm1hLXdlYnBhY2siOiAiMS43LjAiLAorICAgICJtb2NoYSI6ICIzLjAuMSIsCisgICAg
Im5wbS1ydW4tYWxsIjogIjIuMy4wIiwKKyAgICAib3B0LWNsaSI6ICIxLjUuMSIsCisgICAgInBy
b2dyZXNzLWJhci13ZWJwYWNrLXBsdWdpbiI6ICIxLjkuMCIsCisgICAgInJpbXJhZiI6ICIyLjUu
NCIsCisgICAgInN0eWxlLWxvYWRlciI6ICIwLjEzLjEiLAorICAgICJzdXJnZSI6ICIwLjE4LjAi
LAorICAgICJ3ZWJwYWNrIjogIjIuMS4wLWJldGEuMjAiLAorICAgICJ3ZWJwYWNrLWNvbmZpZy11
dGlscyI6ICIyLjAuMCIsCisgICAgIndlYnBhY2stZGV2LXNlcnZlciI6ICIyLjEuMC1iZXRhLjAi
LAorICAgICJ3ZWJwYWNrLXZhbGlkYXRvciI6ICIyLjIuNyIKKyAgfSwKKyAgImNvbmZpZyI6IHsK
KyAgICAiZ2hvb2tzIjogeworICAgICAgInByZS1jb21taXQiOiAib3B0IC0taW4gcHJlLWNvbW1p
dCAtLWV4ZWMgXCJucG0gcnVuIHZhbGlkYXRlXCIiCisgICAgfQorICB9LAorICAic2NyaXB0cyI6
IHsKKyAgICAicHJlZGVwbG95IjogIm5wbSBydW4gYnVpbGQiLAorICAgICJkZXBsb3kiOiAiLi9z
Y3JpcHRzL2RlcGxveSIsCisgICAgInByZWJ1aWxkIjogInJpbXJhZiBkaXN0IiwKKyAgICAiYnVp
bGQiOiAid2VicGFjayAtLWVudi5wcm9kIC1wIiwKKyAgICAicG9zdGJ1aWxkIjogImNweSBmYXZp
Y29uLmljbyBkaXN0IiwKKyAgICAicHJlYnVpbGQ6ZGV2IjogInJpbXJhZiBkaXN0IiwKKyAgICAi
YnVpbGQ6ZGV2IjogIndlYnBhY2sgLS1lbnYuZGV2IiwKKyAgICAicG9zdGJ1aWxkOmRldiI6ICJj
cHkgZmF2aWNvbi5pY28gZGlzdCIsCisgICAgInN0YXJ0IjogImh0dHAtc2VydmVyIGRpc3QiLAor
ICAgICJkZXYiOiAid2VicGFjay1kZXYtc2VydmVyIC0tZW52LmRldiAtLWhvdCIsCisgICAgImRl
YnVnIjogIm5vZGUtbmlnaHRseSAtLWluc3BlY3QgLS1kZWJ1Zy1icmsgbm9kZV9tb2R1bGVzLy5i
aW4vd2VicGFjayAtLWVudi5kZWJ1ZyIsCisgICAgImRlYnVnOmRldiI6ICJucG0gcnVuIGRlYnVn
IC0tIC0tZW52LmRldiIsCisgICAgImRlYnVnOnByb2QiOiAibnBtIHJ1biBkZWJ1ZyAtLSAtLWVu
di5wcm9kIiwKKyAgICAidGVzdCI6ICJrYXJtYSBzdGFydCIsCisgICAgIndhdGNoOnRlc3QiOiAi
bnBtIHRlc3QgLS0gLS1hdXRvLXdhdGNoIC0tbm8tc2luZ2xlLXJ1biIsCisgICAgInZhbGlkYXRl
IjogIm5wbS1ydW4tYWxsIC0tcGFyYWxsZWwgbGludCBidWlsZCB0ZXN0IiwKKyAgICAibGludCI6
ICJlc2xpbnQgLiIsCisgICAgInNldHVwIjogIm5wbSBpbnN0YWxsICYmIG5wbSBydW4gdmFsaWRh
dGUiLAorICAgICJzZXR1cDpmZW0iOiAiZ2l0IGNoZWNrb3V0IEZFTS8wNy4xLWRlcGxveS1zdXJn
ZSAmJiBucG0gaW5zdGFsbCAmJiBucG0gcnVuIHZhbGlkYXRlICYmIHJpbXJhZiBkaXN0IGNvdmVy
YWdlICYmIGdpdCBjaGVja291dCBGRU0vMDAtb3JpZ2luYWwtcHJvamVjdCIsCisgICAgInNldHVw
OndvcmtzaG9wIjogImdpdCBjaGVja291dCB3b3Jrc2hvcC8wNy1jb3ZlcmFnZSAmJiBucG0gaW5z
dGFsbCAmJiBucG0gcnVuIHZhbGlkYXRlICYmIHJpbXJhZiBkaXN0IGNvdmVyYWdlICYmIGdpdCBj
aGVja291dCB3b3Jrc2hvcC8wMC1vcmlnaW5hbC1wcm9qZWN0IiwKKyAgICAic2V0dXA6ZWdnaGVh
ZCI6ICJnaXQgY2hlY2tvdXQgcHJlbGVzc29uL3BvbHlmaWxsLXByb21pc2VzICYmIG5wbSBpbnN0
YWxsICYmIG1rZGlyIGRpc3QgJiYgbnBtIHJ1biB2YWxpZGF0ZSIKKyAgfQorfQpkaWZmIC0tZ2l0
IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxh
LWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrL3NyYy9hcHAuY3NzIGIvUGVyZm9ybWFuY2VU
ZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAx
NS1iYWJlbC13ZWJwYWNrL3NyYy9hcHAuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUyN2E1OGY3MWYzOWZmMDFm
MGE1MjY5NzI5MjNmMWQxZTBmY2QxMWIKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRl
c3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1
LWJhYmVsLXdlYnBhY2svc3JjL2FwcC5jc3MKQEAgLTAsMCArMSwyMCBAQAorLnRvZ2dsZS1ncmFw
aCB7CisgIGZsb2F0OiBsZWZ0OworICBtYXJnaW4tbGVmdDogMTZweDsKKyAgY3Vyc29yOiBwb2lu
dGVyOworICBwb3NpdGlvbjogcmVsYXRpdmU7CisgIHotaW5kZXg6IDE7Cit9CisudG9nZ2xlLWdy
YXBoIHN2ZyB7CisgIGhlaWdodDogMjBweDsKKyAgd2lkdGg6IDIwcHg7Cit9CisudG9nZ2xlLWdy
YXBoIHN2ZyBwYXRoIHsKKyAgZmlsbDogIzc3NzsKK30KKworLnRvZ2dsZS1ncmFwaC5hY3RpdmUg
c3ZnIHBhdGgsCisudG9nZ2xlLWdyYXBoOmhvdmVyIHN2ZyBwYXRoLAorLnRvZ2dsZS1ncmFwaDpm
b2N1cyBzdmcgcGF0aCB7CisgIGZpbGw6IGJsYWNrOworfQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFu
Y2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2Vz
MjAxNS1iYWJlbC13ZWJwYWNrL3NyYy9hcHAuanMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21l
dGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBh
Y2svc3JjL2FwcC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iN2UwMmZkZTkwMjM1NTZjMDUzYTliOTYwODIwYzll
M2NmZGU2MGY3Ci0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRl
ci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNr
L3NyYy9hcHAuanMKQEAgLTAsMCArMSw5IEBACitpbXBvcnQgJ3RvZG9tdmMtYXBwLWNzcy9pbmRl
eC5jc3MnCitpbXBvcnQgJy4vYXBwLmNzcycKKworaW1wb3J0IHskb259IGZyb20gJy4vaGVscGVy
cycKK2ltcG9ydCB7dXBkYXRlVG9kb30gZnJvbSAnLi90b2RvJworCitleHBvcnQgZnVuY3Rpb24g
b25Mb2FkKCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGltcG9ydC9wcmVmZXItZGVmYXVsdC1l
eHBvcnQKKyAgdXBkYXRlVG9kbygpCit9CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1Nw
ZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVs
LXdlYnBhY2svc3JjL2Jvb3RzdHJhcC5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIv
cmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9z
cmMvYm9vdHN0cmFwLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI2ZDVlODIxYmE3ZWE2ZTk4NjVmOThjNGNjNWE1
MGI1ZmQ2ZTMwOTEKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21l
dGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBh
Y2svc3JjL2Jvb3RzdHJhcC5qcwpAQCAtMCwwICsxLDIzIEBACisvKiBlc2xpbnQgbm8tY29uc29s
ZTowICovCitpbXBvcnQge29uTG9hZH0gZnJvbSAnLi9hcHAnCitpbXBvcnQgeyRvbn0gZnJvbSAn
Li9oZWxwZXJzJworCisvLyB0aGlzIGlzIG9ubHkgcmVsZXZhbnQgd2hlbiB1c2luZyBgaG90YCBt
b2RlIHdpdGggd2VicGFjaworLy8gc3BlY2lhbCB0aGFua3MgdG8gRXJpYyBDbGVtbW9uczogaHR0
cHM6Ly9naXRodWIuY29tL2VyaWNjbGVtbW9ucy93ZWJwYWNrLWhvdC1zZXJ2ZXItZXhhbXBsZQor
Y29uc3QgcmVsb2FkaW5nID0gZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gJ2NvbXBsZXRlJworaWYg
KG1vZHVsZS5ob3QpIHsKKyAgbW9kdWxlLmhvdC5hY2NlcHQoZnVuY3Rpb24oZXJyKSB7CisgIH0p
CisgIGlmIChyZWxvYWRpbmcpIHsKKyAgICBvbkxvYWQoKQorICB9IGVsc2UgeworICAgIGJvb3Rz
dHJhcCgpCisgIH0KK30gZWxzZSB7CisgIGJvb3RzdHJhcCgpCit9CisKK2Z1bmN0aW9uIGJvb3Rz
dHJhcCgpIHsKKyAgJG9uKHdpbmRvdywgJ2xvYWQnLCBvbkxvYWQpCisgICRvbih3aW5kb3csICdo
YXNoY2hhbmdlJywgb25Mb2FkKQorfQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVl
ZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13
ZWJwYWNrL3NyYy9jb250cm9sbGVyLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9y
ZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrL3Ny
Yy9jb250cm9sbGVyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhhNDhjOTA2YmMzNmNlNGJjOGI3MjNmM2YyZmYw
MzM5NDQwYzVmNDMKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21l
dGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBh
Y2svc3JjL2NvbnRyb2xsZXIuanMKQEAgLTAsMCArMSwyNjMgQEAKK2V4cG9ydCBkZWZhdWx0IENv
bnRyb2xsZXIKKworLyoqCisqIFRha2VzIGEgbW9kZWwgYW5kIHZpZXcgYW5kIGFjdHMgYXMgdGhl
IGNvbnRyb2xsZXIgYmV0d2VlbiB0aGVtCisqCisqIEBjb25zdHJ1Y3RvcgorKiBAcGFyYW0ge29i
amVjdH0gbW9kZWwgVGhlIG1vZGVsIGluc3RhbmNlCisqIEBwYXJhbSB7b2JqZWN0fSB2aWV3IFRo
ZSB2aWV3IGluc3RhbmNlCisqLworZnVuY3Rpb24gQ29udHJvbGxlcihtb2RlbCwgdmlldykgewor
ICB2YXIgdGhhdCA9IHRoaXMKKyAgdGhhdC5tb2RlbCA9IG1vZGVsCisgIHRoYXQudmlldyA9IHZp
ZXcKKworICB0aGF0LnZpZXcuYmluZCgnbmV3VG9kbycsIGZ1bmN0aW9uKHRpdGxlKSB7CisgICAg
dGhhdC5hZGRJdGVtKHRpdGxlKQorICB9KQorCisgIHRoYXQudmlldy5iaW5kKCdpdGVtRWRpdCcs
IGZ1bmN0aW9uKGl0ZW0pIHsKKyAgICB0aGF0LmVkaXRJdGVtKGl0ZW0uaWQpCisgIH0pCisKKyAg
dGhhdC52aWV3LmJpbmQoJ2l0ZW1FZGl0RG9uZScsIGZ1bmN0aW9uKGl0ZW0pIHsKKyAgICB0aGF0
LmVkaXRJdGVtU2F2ZShpdGVtLmlkLCBpdGVtLnRpdGxlKQorICB9KQorCisgIHRoYXQudmlldy5i
aW5kKCdpdGVtRWRpdENhbmNlbCcsIGZ1bmN0aW9uKGl0ZW0pIHsKKyAgICB0aGF0LmVkaXRJdGVt
Q2FuY2VsKGl0ZW0uaWQpCisgIH0pCisKKyAgdGhhdC52aWV3LmJpbmQoJ2l0ZW1SZW1vdmUnLCBm
dW5jdGlvbihpdGVtKSB7CisgICAgdGhhdC5yZW1vdmVJdGVtKGl0ZW0uaWQpCisgIH0pCisKKyAg
dGhhdC52aWV3LmJpbmQoJ2l0ZW1Ub2dnbGUnLCBmdW5jdGlvbihpdGVtKSB7CisgICAgdGhhdC50
b2dnbGVDb21wbGV0ZShpdGVtLmlkLCBpdGVtLmNvbXBsZXRlZCkKKyAgfSkKKworICB0aGF0LnZp
ZXcuYmluZCgncmVtb3ZlQ29tcGxldGVkJywgZnVuY3Rpb24oKSB7CisgICAgdGhhdC5yZW1vdmVD
b21wbGV0ZWRJdGVtcygpCisgIH0pCisKKyAgdGhhdC52aWV3LmJpbmQoJ3RvZ2dsZUFsbCcsIGZ1
bmN0aW9uKHN0YXR1cykgeworICAgIHRoYXQudG9nZ2xlQWxsKHN0YXR1cy5jb21wbGV0ZWQpCisg
IH0pCit9CisKKy8qKgorKiBMb2FkcyBhbmQgaW5pdGlhbGlzZXMgdGhlIHZpZXcKKyoKKyogQHBh
cmFtIHtzdHJpbmd9ICcnIHwgJ2FjdGl2ZScgfCAnY29tcGxldGVkJworKi8KK0NvbnRyb2xsZXIu
cHJvdG90eXBlLnNldFZpZXcgPSBmdW5jdGlvbihsb2NhdGlvbkhhc2gpIHsKKyAgdmFyIHJvdXRl
ID0gbG9jYXRpb25IYXNoLnNwbGl0KCcvJylbMV0KKyAgdmFyIHBhZ2UgPSByb3V0ZSB8fCAnJwor
ICB0aGlzLl91cGRhdGVGaWx0ZXJTdGF0ZShwYWdlKQorfQorCisvKioKKyogQW4gZXZlbnQgdG8g
ZmlyZSBvbiBsb2FkLiBXaWxsIGdldCBhbGwgaXRlbXMgYW5kIGRpc3BsYXkgdGhlbSBpbiB0aGUK
KyogdG9kby1saXN0CisqLworQ29udHJvbGxlci5wcm90b3R5cGUuc2hvd0FsbCA9IGZ1bmN0aW9u
KCkgeworICB2YXIgdGhhdCA9IHRoaXMKKyAgdGhhdC5tb2RlbC5yZWFkKGZ1bmN0aW9uKGRhdGEp
IHsKKyAgICB0aGF0LnZpZXcucmVuZGVyKCdzaG93RW50cmllcycsIGRhdGEpCisgIH0pCit9CisK
Ky8qKgorKiBSZW5kZXJzIGFsbCBhY3RpdmUgdGFza3MKKyovCitDb250cm9sbGVyLnByb3RvdHlw
ZS5zaG93QWN0aXZlID0gZnVuY3Rpb24oKSB7CisgIHZhciB0aGF0ID0gdGhpcworICB0aGF0Lm1v
ZGVsLnJlYWQoe2NvbXBsZXRlZDogZmFsc2V9LCBmdW5jdGlvbihkYXRhKSB7CisgICAgdGhhdC52
aWV3LnJlbmRlcignc2hvd0VudHJpZXMnLCBkYXRhKQorICB9KQorfQorCisvKioKKyogUmVuZGVy
cyBhbGwgY29tcGxldGVkIHRhc2tzCisqLworQ29udHJvbGxlci5wcm90b3R5cGUuc2hvd0NvbXBs
ZXRlZCA9IGZ1bmN0aW9uKCkgeworICB2YXIgdGhhdCA9IHRoaXMKKyAgdGhhdC5tb2RlbC5yZWFk
KHtjb21wbGV0ZWQ6IHRydWV9LCBmdW5jdGlvbihkYXRhKSB7CisgICAgdGhhdC52aWV3LnJlbmRl
cignc2hvd0VudHJpZXMnLCBkYXRhKQorICB9KQorfQorCisvKioKKyogQW4gZXZlbnQgdG8gZmly
ZSB3aGVuZXZlciB5b3Ugd2FudCB0byBhZGQgYW4gaXRlbS4gU2ltcGx5IHBhc3MgaW4gdGhlIGV2
ZW50CisqIG9iamVjdCBhbmQgaXQnbGwgaGFuZGxlIHRoZSBET00gaW5zZXJ0aW9uIGFuZCBzYXZp
bmcgb2YgdGhlIG5ldyBpdGVtLgorKi8KK0NvbnRyb2xsZXIucHJvdG90eXBlLmFkZEl0ZW0gPSBm
dW5jdGlvbih0aXRsZSkgeworICB2YXIgdGhhdCA9IHRoaXMKKworICBpZiAodGl0bGUudHJpbSgp
ID09PSAnJykgeworICAgIHJldHVybgorICB9CisKKyAgdGhhdC5tb2RlbC5jcmVhdGUodGl0bGUs
IGZ1bmN0aW9uKCkgeworICAgIHRoYXQudmlldy5yZW5kZXIoJ2NsZWFyTmV3VG9kbycpCisgICAg
dGhhdC5fZmlsdGVyKHRydWUpCisgIH0pCit9CisKKy8qCisqIFRyaWdnZXJzIHRoZSBpdGVtIGVk
aXRpbmcgbW9kZS4KKyovCitDb250cm9sbGVyLnByb3RvdHlwZS5lZGl0SXRlbSA9IGZ1bmN0aW9u
KGlkKSB7CisgIHZhciB0aGF0ID0gdGhpcworICB0aGF0Lm1vZGVsLnJlYWQoaWQsIGZ1bmN0aW9u
KGRhdGEpIHsKKyAgICB0aGF0LnZpZXcucmVuZGVyKCdlZGl0SXRlbScsIHtpZCwgdGl0bGU6IGRh
dGFbMF0udGl0bGV9KQorICB9KQorfQorCisvKgorKiBGaW5pc2hlcyB0aGUgaXRlbSBlZGl0aW5n
IG1vZGUgc3VjY2Vzc2Z1bGx5LgorKi8KK0NvbnRyb2xsZXIucHJvdG90eXBlLmVkaXRJdGVtU2F2
ZSA9IGZ1bmN0aW9uKGlkLCB0aXRsZSkgeworICB2YXIgdGhhdCA9IHRoaXMKKyAgaWYgKHRpdGxl
LnRyaW0oKSkgeworICAgIHRoYXQubW9kZWwudXBkYXRlKGlkLCB7dGl0bGV9LCBmdW5jdGlvbigp
IHsKKyAgICAgIHRoYXQudmlldy5yZW5kZXIoJ2VkaXRJdGVtRG9uZScsIHtpZCwgdGl0bGV9KQor
ICAgIH0pCisgIH0gZWxzZSB7CisgICAgdGhhdC5yZW1vdmVJdGVtKGlkKQorICB9Cit9CisKKy8q
CisqIENhbmNlbHMgdGhlIGl0ZW0gZWRpdGluZyBtb2RlLgorKi8KK0NvbnRyb2xsZXIucHJvdG90
eXBlLmVkaXRJdGVtQ2FuY2VsID0gZnVuY3Rpb24oaWQpIHsKKyAgdmFyIHRoYXQgPSB0aGlzCisg
IHRoYXQubW9kZWwucmVhZChpZCwgZnVuY3Rpb24oZGF0YSkgeworICAgIHRoYXQudmlldy5yZW5k
ZXIoJ2VkaXRJdGVtRG9uZScsIHtpZCwgdGl0bGU6IGRhdGFbMF0udGl0bGV9KQorICB9KQorfQor
CisvKioKKyogQnkgZ2l2aW5nIGl0IGFuIElEIGl0J2xsIGZpbmQgdGhlIERPTSBlbGVtZW50IG1h
dGNoaW5nIHRoYXQgSUQsCisqIHJlbW92ZSBpdCBmcm9tIHRoZSBET00gYW5kIGFsc28gcmVtb3Zl
IGl0IGZyb20gc3RvcmFnZS4KKyoKKyogQHBhcmFtIHtudW1iZXJ9IGlkIFRoZSBJRCBvZiB0aGUg
aXRlbSB0byByZW1vdmUgZnJvbSB0aGUgRE9NIGFuZAorKiBzdG9yYWdlCisqLworQ29udHJvbGxl
ci5wcm90b3R5cGUucmVtb3ZlSXRlbSA9IGZ1bmN0aW9uKGlkKSB7CisgIHZhciB0aGF0ID0gdGhp
cworICB0aGF0Lm1vZGVsLnJlbW92ZShpZCwgZnVuY3Rpb24oKSB7CisgICAgdGhhdC52aWV3LnJl
bmRlcigncmVtb3ZlSXRlbScsIGlkKQorICB9KQorCisgIHRoYXQuX2ZpbHRlcigpCit9CisKKy8q
KgorKiBXaWxsIHJlbW92ZSBhbGwgY29tcGxldGVkIGl0ZW1zIGZyb20gdGhlIERPTSBhbmQgc3Rv
cmFnZS4KKyovCitDb250cm9sbGVyLnByb3RvdHlwZS5yZW1vdmVDb21wbGV0ZWRJdGVtcyA9IGZ1
bmN0aW9uKCkgeworICB2YXIgdGhhdCA9IHRoaXMKKyAgdGhhdC5tb2RlbC5yZWFkKHtjb21wbGV0
ZWQ6IHRydWV9LCBmdW5jdGlvbihkYXRhKSB7CisgICAgZGF0YS5mb3JFYWNoKGZ1bmN0aW9uKGl0
ZW0pIHsKKyAgICAgIHRoYXQucmVtb3ZlSXRlbShpdGVtLmlkKQorICAgIH0pCisgIH0pCisKKyAg
dGhhdC5fZmlsdGVyKCkKK30KKworLyoqCisqIEdpdmUgaXQgYW4gSUQgb2YgYSBtb2RlbCBhbmQg
YSBjaGVja2JveCBhbmQgaXQgd2lsbCB1cGRhdGUgdGhlIGl0ZW0KKyogaW4gc3RvcmFnZSBiYXNl
ZCBvbiB0aGUgY2hlY2tib3gncyBzdGF0ZS4KKyoKKyogQHBhcmFtIHtudW1iZXJ9IGlkIFRoZSBJ
RCBvZiB0aGUgZWxlbWVudCB0byBjb21wbGV0ZSBvciB1bmNvbXBsZXRlCisqIEBwYXJhbSB7b2Jq
ZWN0fSBjaGVja2JveCBUaGUgY2hlY2tib3ggdG8gY2hlY2sgdGhlIHN0YXRlIG9mIGNvbXBsZXRl
CisqICAgICAgICAgICAgICAgICAgICAgICAgICBvciBub3QKKyogQHBhcmFtIHtib29sZWFufHVu
ZGVmaW5lZH0gc2lsZW50IFByZXZlbnQgcmUtZmlsdGVyaW5nIHRoZSB0b2RvIGl0ZW1zCisqLwor
Q29udHJvbGxlci5wcm90b3R5cGUudG9nZ2xlQ29tcGxldGUgPSBmdW5jdGlvbihpZCwgY29tcGxl
dGVkLCBzaWxlbnQpIHsKKyAgdmFyIHRoYXQgPSB0aGlzCisgIHRoYXQubW9kZWwudXBkYXRlKGlk
LCB7Y29tcGxldGVkfSwgZnVuY3Rpb24oKSB7CisgICAgdGhhdC52aWV3LnJlbmRlcignZWxlbWVu
dENvbXBsZXRlJywgeworICAgICAgaWQsCisgICAgICBjb21wbGV0ZWQsCisgICAgfSkKKyAgfSkK
KworICBpZiAoIXNpbGVudCkgeworICAgIHRoYXQuX2ZpbHRlcigpCisgIH0KK30KKworLyoqCisq
IFdpbGwgdG9nZ2xlIEFMTCBjaGVja2JveGVzJyBvbi9vZmYgc3RhdGUgYW5kIGNvbXBsZXRlbmVz
cyBvZiBtb2RlbHMuCisqIEp1c3QgcGFzcyBpbiB0aGUgZXZlbnQgb2JqZWN0LgorKi8KK0NvbnRy
b2xsZXIucHJvdG90eXBlLnRvZ2dsZUFsbCA9IGZ1bmN0aW9uKGNvbXBsZXRlZCkgeworICB2YXIg
dGhhdCA9IHRoaXMKKyAgdGhhdC5tb2RlbC5yZWFkKHtjb21wbGV0ZWQ6ICFjb21wbGV0ZWR9LCBm
dW5jdGlvbihkYXRhKSB7CisgICAgZGF0YS5mb3JFYWNoKGZ1bmN0aW9uKGl0ZW0pIHsKKyAgICAg
IHRoYXQudG9nZ2xlQ29tcGxldGUoaXRlbS5pZCwgY29tcGxldGVkLCB0cnVlKQorICAgIH0pCisg
IH0pCisKKyAgdGhhdC5fZmlsdGVyKCkKK30KKworLyoqCisqIFVwZGF0ZXMgdGhlIHBpZWNlcyBv
ZiB0aGUgcGFnZSB3aGljaCBjaGFuZ2UgZGVwZW5kaW5nIG9uIHRoZSByZW1haW5pbmcKKyogbnVt
YmVyIG9mIHRvZG9zLgorKi8KK0NvbnRyb2xsZXIucHJvdG90eXBlLl91cGRhdGVDb3VudCA9IGZ1
bmN0aW9uKCkgeworICB2YXIgdGhhdCA9IHRoaXMKKyAgdGhhdC5tb2RlbC5nZXRDb3VudChmdW5j
dGlvbih0b2RvcykgeworICAgIHRoYXQudmlldy5yZW5kZXIoJ3VwZGF0ZUVsZW1lbnRDb3VudCcs
IHRvZG9zLmFjdGl2ZSkKKyAgICB0aGF0LnZpZXcucmVuZGVyKCdjbGVhckNvbXBsZXRlZEJ1dHRv
bicsIHsKKyAgICAgIGNvbXBsZXRlZDogdG9kb3MuY29tcGxldGVkLAorICAgICAgdmlzaWJsZTog
dG9kb3MuY29tcGxldGVkID4gMAorICAgIH0pCisKKyAgICB0aGF0LnZpZXcucmVuZGVyKCd0b2dn
bGVBbGwnLCB7Y2hlY2tlZDogdG9kb3MuY29tcGxldGVkID09PSB0b2Rvcy50b3RhbH0pCisgICAg
dGhhdC52aWV3LnJlbmRlcignY29udGVudEJsb2NrVmlzaWJpbGl0eScsIHt2aXNpYmxlOiB0b2Rv
cy50b3RhbCA+IDB9KQorICB9KQorfQorCisvKioKKyogUmUtZmlsdGVycyB0aGUgdG9kbyBpdGVt
cywgYmFzZWQgb24gdGhlIGFjdGl2ZSByb3V0ZS4KKyogQHBhcmFtIHtib29sZWFufHVuZGVmaW5l
ZH0gZm9yY2UgIGZvcmNlcyBhIHJlLXBhaW50aW5nIG9mIHRvZG8gaXRlbXMuCisqLworQ29udHJv
bGxlci5wcm90b3R5cGUuX2ZpbHRlciA9IGZ1bmN0aW9uKGZvcmNlKSB7CisgIHZhciBhY3RpdmVS
b3V0ZSA9IHRoaXMuX2FjdGl2ZVJvdXRlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdGhpcy5f
YWN0aXZlUm91dGUuc3Vic3RyKDEpCisKKyAgLy8gVXBkYXRlIHRoZSBlbGVtZW50cyBvbiB0aGUg
cGFnZSwgd2hpY2ggY2hhbmdlIHdpdGggZWFjaCBjb21wbGV0ZWQgdG9kbworICB0aGlzLl91cGRh
dGVDb3VudCgpCisKKyAgLy8gSWYgdGhlIGxhc3QgYWN0aXZlIHJvdXRlIGlzbid0ICJBbGwiLCBv
ciB3ZSdyZSBzd2l0Y2hpbmcgcm91dGVzLCB3ZQorICAvLyByZS1jcmVhdGUgdGhlIHRvZG8gaXRl
bSBlbGVtZW50cywgY2FsbGluZzoKKyAgLy8gICB0aGlzLnNob3dbQWxsfEFjdGl2ZXxDb21wbGV0
ZWRdKCk7CisgIGlmIChmb3JjZSB8fCB0aGlzLl9sYXN0QWN0aXZlUm91dGUgIT09ICdBbGwnIHx8
IHRoaXMuX2xhc3RBY3RpdmVSb3V0ZSAhPT0gYWN0aXZlUm91dGUpIHsKKyAgICB0aGlzWydzaG93
JyArIGFjdGl2ZVJvdXRlXSgpCisgIH0KKworICB0aGlzLl9sYXN0QWN0aXZlUm91dGUgPSBhY3Rp
dmVSb3V0ZQorfQorCisvKioKKyogU2ltcGx5IHVwZGF0ZXMgdGhlIGZpbHRlciBuYXYncyBzZWxl
Y3RlZCBzdGF0ZXMKKyovCitDb250cm9sbGVyLnByb3RvdHlwZS5fdXBkYXRlRmlsdGVyU3RhdGUg
PSBmdW5jdGlvbihjdXJyZW50UGFnZSkgeworICAvLyBTdG9yZSBhIHJlZmVyZW5jZSB0byB0aGUg
YWN0aXZlIHJvdXRlLCBhbGxvd2luZyB1cyB0byByZS1maWx0ZXIgdG9kbworICAvLyBpdGVtcyBh
cyB0aGV5IGFyZSBtYXJrZWQgY29tcGxldGUgb3IgaW5jb21wbGV0ZS4KKyAgY3VycmVudFBhZ2Ug
PSBjdXJyZW50UGFnZS5zcGxpdCgnPycpWzBdCisgIHRoaXMuX2FjdGl2ZVJvdXRlID0gY3VycmVu
dFBhZ2UKKworICBpZiAoY3VycmVudFBhZ2UgPT09ICcnKSB7CisgICAgdGhpcy5fYWN0aXZlUm91
dGUgPSAnQWxsJworICB9CisKKyAgdGhpcy5fZmlsdGVyKCkKKworICB0aGlzLnZpZXcucmVuZGVy
KCdzZXRGaWx0ZXInLCBjdXJyZW50UGFnZSkKK30KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVz
dHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUt
YmFiZWwtd2VicGFjay9zcmMvY29udHJvbGxlci50ZXN0LmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9T
cGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJl
bC13ZWJwYWNrL3NyYy9jb250cm9sbGVyLnRlc3QuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjM0OTU1OWI5Yzgz
N2E3ZDU4ZWExYTMwNWNiNzc3ODdhYmNkMGYyMgotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1h
bmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9l
czIwMTUtYmFiZWwtd2VicGFjay9zcmMvY29udHJvbGxlci50ZXN0LmpzCkBAIC0wLDAgKzEsNyBA
QAoraW1wb3J0IENvbnRyb2xsZXIgZnJvbSAnLi9jb250cm9sbGVyJworCitkZXNjcmliZSgnY29u
dHJvbGxlcicsICgpID0+IHsKKyAgaXQoJ2V4aXN0cycsICgpID0+IHsKKyAgICBleHBlY3QoQ29u
dHJvbGxlcikudG8uZXhpc3QKKyAgfSkKK30pCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJh
YmVsLXdlYnBhY2svc3JjL2hlbHBlcnMuanMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVy
L3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2sv
c3JjL2hlbHBlcnMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTg4ZWNiOGQ5NDQ2ZTUxNDA3YjY2YmMwYmExYTc5
ZDQxNGJjOGM2NQotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0
ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFj
ay9zcmMvaGVscGVycy5qcwpAQCAtMCwwICsxLDYxIEBACitleHBvcnQge3FzLCBxc2EsICRvbiwg
JGRlbGVnYXRlLCAkcGFyZW50LCByZW1vdmV9CisKKy8vIEdldCBlbGVtZW50KHMpIGJ5IENTUyBz
ZWxlY3RvcjoKK2Z1bmN0aW9uIHFzKHNlbGVjdG9yLCBzY29wZSkgeworICByZXR1cm4gKHNjb3Bl
IHx8IGRvY3VtZW50KS5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKQorfQorCitmdW5jdGlvbiBxc2Eo
c2VsZWN0b3IsIHNjb3BlKSB7CisgIHJldHVybiAoc2NvcGUgfHwgZG9jdW1lbnQpLnF1ZXJ5U2Vs
ZWN0b3JBbGwoc2VsZWN0b3IpCit9CisKKy8vIGFkZEV2ZW50TGlzdGVuZXIgd3JhcHBlcjoKK2Z1
bmN0aW9uICRvbih0YXJnZXQsIHR5cGUsIGNhbGxiYWNrLCB1c2VDYXB0dXJlKSB7CisgIHRhcmdl
dC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGNhbGxiYWNrLCAhIXVzZUNhcHR1cmUpCit9CisKKy8v
IEF0dGFjaCBhIGhhbmRsZXIgdG8gZXZlbnQgZm9yIGFsbCBlbGVtZW50cyB0aGF0IG1hdGNoIHRo
ZSBzZWxlY3RvciwKKy8vIG5vdyBvciBpbiB0aGUgZnV0dXJlLCBiYXNlZCBvbiBhIHJvb3QgZWxl
bWVudAorZnVuY3Rpb24gJGRlbGVnYXRlKHRhcmdldCwgc2VsZWN0b3IsIHR5cGUsIGhhbmRsZXIp
IHsKKyAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvRXZl
bnRzL2JsdXIKKyAgdmFyIHVzZUNhcHR1cmUgPSB0eXBlID09PSAnYmx1cicgfHwgdHlwZSA9PT0g
J2ZvY3VzJworICAkb24odGFyZ2V0LCB0eXBlLCBkaXNwYXRjaEV2ZW50LCB1c2VDYXB0dXJlKQor
CisgIGZ1bmN0aW9uIGRpc3BhdGNoRXZlbnQoZXZlbnQpIHsKKyAgICB2YXIgdGFyZ2V0RWxlbWVu
dCA9IGV2ZW50LnRhcmdldAorICAgIHZhciBwb3RlbnRpYWxFbGVtZW50cyA9IHFzYShzZWxlY3Rv
ciwgdGFyZ2V0KQorICAgIHZhciBoYXNNYXRjaCA9IEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNh
bGwocG90ZW50aWFsRWxlbWVudHMsIHRhcmdldEVsZW1lbnQpID49IDAKKworICAgIGlmIChoYXNN
YXRjaCkgeworICAgICAgaGFuZGxlci5jYWxsKHRhcmdldEVsZW1lbnQsIGV2ZW50KQorICAgIH0K
KyAgfQorfQorCisvLyBGaW5kIHRoZSBlbGVtZW50J3MgcGFyZW50IHdpdGggdGhlIGdpdmVuIHRh
ZyBuYW1lOgorLy8gJHBhcmVudChxcygnYScpLCAnZGl2Jyk7CitmdW5jdGlvbiAkcGFyZW50KGVs
ZW1lbnQsIHRhZ05hbWUpIHsKKyAgaWYgKCFlbGVtZW50LnBhcmVudE5vZGUpIHsKKyAgICByZXR1
cm4gdW5kZWZpbmVkCisgIH0KKyAgaWYgKGVsZW1lbnQucGFyZW50Tm9kZS50YWdOYW1lLnRvTG93
ZXJDYXNlKCkgPT09IHRhZ05hbWUudG9Mb3dlckNhc2UoKSkgeworICAgIHJldHVybiBlbGVtZW50
LnBhcmVudE5vZGUKKyAgfQorICByZXR1cm4gJHBhcmVudChlbGVtZW50LnBhcmVudE5vZGUsIHRh
Z05hbWUpCit9CisKKy8vIHJlbW92ZXMgYW4gZWxlbWVudCBmcm9tIGFuIGFycmF5CisvLyBjb25z
dCB4ID0gWzEsMiwzXQorLy8gcmVtb3ZlKHgsIDIpCisvLyB4IH49PSBbMSwzXQorZnVuY3Rpb24g
cmVtb3ZlKGFycmF5LCB0aGluZykgeworICBjb25zdCBpbmRleCA9IGFycmF5LmluZGV4T2YodGhp
bmcpCisgIGlmIChpbmRleCA9PT0gLTEpIHsKKyAgICByZXR1cm4gYXJyYXkKKyAgfQorICBhcnJh
eS5zcGxpY2UoaW5kZXgsIDEpCit9CisKKy8vIEFsbG93IGZvciBsb29waW5nIG9uIG5vZGVzIGJ5
IGNoYWluaW5nOgorLy8gcXNhKCcuZm9vJykuZm9yRWFjaChmdW5jdGlvbiAoKSB7fSkKK05vZGVM
aXN0LnByb3RvdHlwZS5mb3JFYWNoID0gQXJyYXkucHJvdG90eXBlLmZvckVhY2gKZGlmZiAtLWdp
dCBhL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxs
YS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9zcmMvaW5kZXguaHRtbCBiL1BlcmZvcm1h
bmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9l
czIwMTUtYmFiZWwtd2VicGFjay9zcmMvaW5kZXguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MjEyY2MyNDY1
NmJhMjFkMzA0YWZmZThkYWJlOWRiMjBiZjNmODAyCi0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9y
bWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVz
L2VzMjAxNS1iYWJlbC13ZWJwYWNrL3NyYy9pbmRleC5odG1sCkBAIC0wLDAgKzEsNDQgQEAKKzwh
ZG9jdHlwZSBodG1sPgorPGh0bWwgbGFuZz0iZW4iIGRhdGEtZnJhbWV3b3JrPSJqYXZhc2NyaXB0
Ij4KKyAgPGhlYWQ+CisgICAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgorICAgIDx0aXRsZT5WYW5p
bGxhSlMg4oCiIFRvZG9NVkM8L3RpdGxlPgorICAgIDwlPWh0bWxXZWJwYWNrUGx1Z2luLmZpbGVz
LndlYnBhY2tNYW5pZmVzdCU+CisgIDwvaGVhZD4KKyAgPGJvZHk+CisgICAgPHNlY3Rpb24gY2xh
c3M9InRvZG9hcHAiPgorICAgICAgPGhlYWRlciBjbGFzcz0iaGVhZGVyIj4KKyAgICAgICAgPGgx
PnRvZG9zPC9oMT4KKyAgICAgICAgPGlucHV0IGNsYXNzPSJuZXctdG9kbyIgcGxhY2Vob2xkZXI9
IldoYXQgbmVlZHMgdG8gYmUgZG9uZT8iIGF1dG9mb2N1cz4KKyAgICAgIDwvaGVhZGVyPgorICAg
ICAgPHNlY3Rpb24gY2xhc3M9Im1haW4iPgorICAgICAgICA8aW5wdXQgY2xhc3M9InRvZ2dsZS1h
bGwiIHR5cGU9ImNoZWNrYm94Ij4KKyAgICAgICAgPGxhYmVsIGZvcj0idG9nZ2xlLWFsbCI+TWFy
ayBhbGwgYXMgY29tcGxldGU8L2xhYmVsPgorICAgICAgICA8dWwgY2xhc3M9InRvZG8tbGlzdCI+
PC91bD4KKyAgICAgIDwvc2VjdGlvbj4KKyAgICAgIDxmb290ZXIgY2xhc3M9ImZvb3RlciI+Cisg
ICAgICAgIDxzcGFuIGNsYXNzPSJ0b2RvLWNvdW50Ij48L3NwYW4+CisgICAgICAgIDx1bCBjbGFz
cz0iZmlsdGVycyI+CisgICAgICAgICAgPGxpPgorICAgICAgICAgICAgPGEgaHJlZj0iIy8iIGNs
YXNzPSJzZWxlY3RlZCI+QWxsPC9hPgorICAgICAgICAgIDwvbGk+CisgICAgICAgICAgPGxpPgor
ICAgICAgICAgICAgPGEgaHJlZj0iIy9hY3RpdmUiPkFjdGl2ZTwvYT4KKyAgICAgICAgICA8L2xp
PgorICAgICAgICAgIDxsaT4KKyAgICAgICAgICAgIDxhIGhyZWY9IiMvY29tcGxldGVkIj5Db21w
bGV0ZWQ8L2E+CisgICAgICAgICAgPC9saT4KKyAgICAgICAgPC91bD4KKyAgICAgICAgPGJ1dHRv
biBjbGFzcz0iY2xlYXItY29tcGxldGVkIj5DbGVhciBjb21wbGV0ZWQ8L2J1dHRvbj4KKyAgICAg
IDwvZm9vdGVyPgorICAgIDwvc2VjdGlvbj4KKyAgICA8Zm9vdGVyIGNsYXNzPSJpbmZvIj4KKyAg
ICAgIDxwPkRvdWJsZS1jbGljayB0byBlZGl0IGEgdG9kbzwvcD4KKyAgICAgIDxwPlNwZWVkb21l
dGVyIHZlcnNpb24gYnkgPGEgaHJlZj0iaHR0cDovL3R3aXR0ZXIuY29tL2FkZHlvc21hbmkiPkFk
ZHkgT3NtYW5pPC9hPjwvcD4KKyAgICAgIDxwPkNyZWF0ZWQgYnkgPGEgaHJlZj0iaHR0cDovL3R3
aXR0ZXIuY29tL29zY2FyZ29kc29uIj5Pc2NhciBHb2Rzb248L2E+PC9wPgorICAgICAgPHA+UmVm
YWN0b3JlZCBieSA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vY2J1cmdtZXIiPkNocmlzdG9w
aCBCdXJnbWVyPC9hPjwvcD4KKyAgICAgIDxwPlBvcnRlZCB0byBFUzYgYnkgPGEgaHJlZj0iaHR0
cHM6Ly90d2l0dGVyLmNvbS9rZW50Y2RvZGRzIj5LZW50IEMuIERvZGRzPC9hPjwvcD4KKyAgICAg
IDxwPlBhcnQgb2YgPGEgaHJlZj0iaHR0cDovL3RvZG9tdmMuY29tIj5Ub2RvTVZDPC9hPjwvcD4K
KyAgICA8L2Zvb3Rlcj4KKyAgPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFu
Y2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2Vz
MjAxNS1iYWJlbC13ZWJwYWNrL3NyYy9tZW1vcnkuanMgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVk
b21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdl
YnBhY2svc3JjL21lbW9yeS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jODFjMGU1MTFmOWJmYjIzYzBlNWQwNDM5
YTMwOGI4MmZiODRjZDNjCi0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVl
ZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13
ZWJwYWNrL3NyYy9tZW1vcnkuanMKQEAgLTAsMCArMSw4MiBAQAorKGZ1bmN0aW9uKHJvb3QpIHsK
KyAgdmFyIGxvY2FsU3RvcmFnZU1lbW9yeSA9IHt9OworICB2YXIgY2FjaGUgPSB7fTsKKworICAv
KioKKyAgICogbnVtYmVyIG9mIHN0b3JlZCBpdGVtcy4KKyAgICovCisgIGxvY2FsU3RvcmFnZU1l
bW9yeS5sZW5ndGggPSAwOworCisgIC8qKgorICAgKiByZXR1cm5zIGl0ZW0gZm9yIHBhc3NlZCBr
ZXksIG9yIG51bGwKKyAgICoKKyAgICogQHBhcmEge1N0cmluZ30ga2V5CisgICAqICAgICAgIG5h
bWUgb2YgaXRlbSB0byBiZSByZXR1cm5lZAorICAgKiBAcmV0dXJucyB7U3RyaW5nfG51bGx9Cisg
ICAqLworICBsb2NhbFN0b3JhZ2VNZW1vcnkuZ2V0SXRlbSA9IGZ1bmN0aW9uKGtleSkgeworICAg
IHJldHVybiBjYWNoZVtrZXldIHx8IG51bGw7CisgIH07CisKKyAgLyoqCisgICAqIHNldHMgaXRl
bSBmb3Iga2V5IHRvIHBhc3NlZCB2YWx1ZSwgYXMgU3RyaW5nCisgICAqCisgICAqIEBwYXJhIHtT
dHJpbmd9IGtleQorICAgKiAgICAgICBuYW1lIG9mIGl0ZW0gdG8gYmUgc2V0CisgICAqIEBwYXJh
IHtTdHJpbmd9IHZhbHVlCisgICAqICAgICAgIHZhbHVlLCB3aWxsIGFsd2F5cyBiZSB0dXJuZWQg
aW50byBhIFN0cmluZworICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQorICAgKi8KKyAgbG9jYWxT
dG9yYWdlTWVtb3J5LnNldEl0ZW0gPSBmdW5jdGlvbihrZXksIHZhbHVlKSB7CisgICAgaWYgKHR5
cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgIGxvY2FsU3RvcmFnZU1lbW9yeS5y
ZW1vdmVJdGVtKGtleSk7CisgICAgfSBlbHNlIHsKKyAgICAgIGlmICghKGNhY2hlLmhhc093blBy
b3BlcnR5KGtleSkpKSB7CisgICAgICAgIGxvY2FsU3RvcmFnZU1lbW9yeS5sZW5ndGgrKzsKKyAg
ICAgIH0KKworICAgICAgY2FjaGVba2V5XSA9ICcnICsgdmFsdWU7CisgICAgfQorICB9OworCisg
IC8qKgorICAgKiByZW1vdmVzIGl0ZW0gZm9yIHBhc3NlZCBrZXkKKyAgICoKKyAgICogQHBhcmEg
e1N0cmluZ30ga2V5CisgICAqICAgICAgIG5hbWUgb2YgaXRlbSB0byBiZSByZW1vdmVkCisgICAq
IEByZXR1cm5zIHt1bmRlZmluZWR9CisgICAqLworICBsb2NhbFN0b3JhZ2VNZW1vcnkucmVtb3Zl
SXRlbSA9IGZ1bmN0aW9uKGtleSkgeworICAgIGlmIChjYWNoZS5oYXNPd25Qcm9wZXJ0eShrZXkp
KSB7CisgICAgICBkZWxldGUgY2FjaGVba2V5XTsKKyAgICAgIGxvY2FsU3RvcmFnZU1lbW9yeS5s
ZW5ndGgtLTsKKyAgICB9CisgIH07CisKKyAgLyoqCisgICAqIHJldHVybnMgbmFtZSBvZiBrZXkg
YXQgcGFzc2VkIGluZGV4CisgICAqCisgICAqIEBwYXJhIHtOdW1iZXJ9IGluZGV4CisgICAqICAg
ICAgIFBvc2l0aW9uIGZvciBrZXkgdG8gYmUgcmV0dXJuZWQgKHN0YXJ0cyBhdCAwKQorICAgKiBA
cmV0dXJucyB7U3RyaW5nfG51bGx9CisgICAqLworICBsb2NhbFN0b3JhZ2VNZW1vcnkua2V5ID0g
ZnVuY3Rpb24oaW5kZXgpIHsKKyAgICByZXR1cm4gT2JqZWN0LmtleXMoY2FjaGUpW2luZGV4XSB8
fCBudWxsOworICB9OworCisgIC8qKgorICAgKiByZW1vdmVzIGFsbCBzdG9yZWQgaXRlbXMgYW5k
IHNldHMgbGVuZ3RoIHRvIDAKKyAgICoKKyAgICogQHJldHVybnMge3VuZGVmaW5lZH0KKyAgICov
CisgIGxvY2FsU3RvcmFnZU1lbW9yeS5jbGVhciA9IGZ1bmN0aW9uKCkgeworICAgIGNhY2hlID0g
e307CisgICAgbG9jYWxTdG9yYWdlTWVtb3J5Lmxlbmd0aCA9IDA7CisgIH07CisKKyAgaWYgKHR5
cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JykgeworICAgIG1vZHVsZS5leHBvcnRzID0gbG9jYWxT
dG9yYWdlTWVtb3J5OworICB9IGVsc2UgeworICAgIHJvb3QubG9jYWxTdG9yYWdlTWVtb3J5ID0g
bG9jYWxTdG9yYWdlTWVtb3J5OworICB9Cit9KSh0aGlzKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBv
ZiBmaWxlCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNl
cy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svc3JjL21vZGVs
LmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5p
bGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrL3NyYy9tb2RlbC5qcwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4wNmZhNThhNmJlZDczMjNmNjJjZjM1NzI1MWI5NzU0MzgyNzA1ZjdjCi0tLSAvZGV2L251bGwK
KysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5p
bGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrL3NyYy9tb2RlbC5qcwpAQCAtMCwwICsx
LDExNiBAQAorZXhwb3J0IGRlZmF1bHQgTW9kZWwKKworLyoqCisqIENyZWF0ZXMgYSBuZXcgTW9k
ZWwgaW5zdGFuY2UgYW5kIGhvb2tzIHVwIHRoZSBzdG9yYWdlLgorKgorKiBAY29uc3RydWN0b3IK
KyogQHBhcmFtIHtvYmplY3R9IHN0b3JhZ2UgQSByZWZlcmVuY2UgdG8gdGhlIGNsaWVudCBzaWRl
IHN0b3JhZ2UgY2xhc3MKKyovCitmdW5jdGlvbiBNb2RlbChzdG9yYWdlKSB7CisgIHRoaXMuc3Rv
cmFnZSA9IHN0b3JhZ2UKK30KKworLyoqCisqIENyZWF0ZXMgYSBuZXcgdG9kbyBtb2RlbAorKgor
KiBAcGFyYW0ge3N0cmluZ30gW3RpdGxlXSBUaGUgdGl0bGUgb2YgdGhlIHRhc2sKKyogQHBhcmFt
IHtmdW5jdGlvbn0gW2NhbGxiYWNrXSBUaGUgY2FsbGJhY2sgdG8gZmlyZSBhZnRlciB0aGUgbW9k
ZWwgaXMgY3JlYXRlZAorKi8KK01vZGVsLnByb3RvdHlwZS5jcmVhdGUgPSBmdW5jdGlvbih0aXRs
ZSwgY2FsbGJhY2spIHsKKyAgdGl0bGUgPSB0aXRsZSB8fCAnJworICBjYWxsYmFjayA9IGNhbGxi
YWNrIHx8IGZ1bmN0aW9uKCkgeworICB9CisKKyAgdmFyIG5ld0l0ZW0gPSB7CisgICAgdGl0bGU6
IHRpdGxlLnRyaW0oKSwKKyAgICBjb21wbGV0ZWQ6IGZhbHNlCisgIH0KKworICB0aGlzLnN0b3Jh
Z2Uuc2F2ZShuZXdJdGVtLCBjYWxsYmFjaykKK30KKworLyoqCisgKiBGaW5kcyBhbmQgcmV0dXJu
cyBhIG1vZGVsIGluIHN0b3JhZ2UuIElmIG5vIHF1ZXJ5IGlzIGdpdmVuIGl0J2xsIHNpbXBseQor
ICogcmV0dXJuIGV2ZXJ5dGhpbmcuIElmIHlvdSBwYXNzIGluIGEgc3RyaW5nIG9yIG51bWJlciBp
dCdsbCBsb29rIHRoYXQgdXAgYXMKKyAqIHRoZSBJRCBvZiB0aGUgbW9kZWwgdG8gZmluZC4gTGFz
dGx5LCB5b3UgY2FuIHBhc3MgaXQgYW4gb2JqZWN0IHRvIG1hdGNoIGFnYWluc3QuCisgKgorICog
QHBhcmFtIHtzdHJpbmd8bnVtYmVyfG9iamVjdH0gW3F1ZXJ5XSBBIHF1ZXJ5IHRvIG1hdGNoIG1v
ZGVscyBhZ2FpbnN0CisgKiBAcGFyYW0ge2Z1bmN0aW9ufSBbY2FsbGJhY2tdIFRoZSBjYWxsYmFj
ayB0byBmaXJlIGFmdGVyIHRoZSBtb2RlbCBpcyBmb3VuZAorICoKKyAqIEBleGFtcGxlCisgKiBt
b2RlbC5yZWFkKDEsIGZ1bmMpOyAvLyBXaWxsIGZpbmQgdGhlIG1vZGVsIHdpdGggYW4gSUQgb2Yg
MQorICogbW9kZWwucmVhZCgnMScpOyAvLyBTYW1lIGFzIGFib3ZlCisgKiAvL0JlbG93IHdpbGwg
ZmluZCBhIG1vZGVsIHdpdGggZm9vIGVxdWFsbGluZyBiYXIgYW5kIGhlbGxvIGVxdWFsbGluZyB3
b3JsZC4KKyAqIG1vZGVsLnJlYWQoeyBmb286ICdiYXInLCBoZWxsbzogJ3dvcmxkJyB9KTsKKyAq
LworTW9kZWwucHJvdG90eXBlLnJlYWQgPSBmdW5jdGlvbihxdWVyeSwgY2FsbGJhY2spIHsKKyAg
dmFyIHF1ZXJ5VHlwZSA9IHR5cGVvZiBxdWVyeQorICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1
bmN0aW9uKCkgeworICB9CisKKyAgaWYgKHF1ZXJ5VHlwZSA9PT0gJ2Z1bmN0aW9uJykgeworICAg
IGNhbGxiYWNrID0gcXVlcnkKKyAgICByZXR1cm4gdGhpcy5zdG9yYWdlLmZpbmRBbGwoY2FsbGJh
Y2spCisgIH0gZWxzZSBpZiAocXVlcnlUeXBlID09PSAnc3RyaW5nJyB8fCBxdWVyeVR5cGUgPT09
ICdudW1iZXInKSB7CisgICAgcXVlcnkgPSBwYXJzZUludChxdWVyeSwgMTApCisgICAgdGhpcy5z
dG9yYWdlLmZpbmQoe2lkOiBxdWVyeX0sIGNhbGxiYWNrKQorICB9IGVsc2UgeworICAgIHRoaXMu
c3RvcmFnZS5maW5kKHF1ZXJ5LCBjYWxsYmFjaykKKyAgfQorICByZXR1cm4gdW5kZWZpbmVkCit9
CisKKy8qKgorKiBVcGRhdGVzIGEgbW9kZWwgYnkgZ2l2aW5nIGl0IGFuIElELCBkYXRhIHRvIHVw
ZGF0ZSwgYW5kIGEgY2FsbGJhY2sgdG8gZmlyZSB3aGVuCisqIHRoZSB1cGRhdGUgaXMgY29tcGxl
dGUuCisqCisqIEBwYXJhbSB7bnVtYmVyfSBpZCBUaGUgaWQgb2YgdGhlIG1vZGVsIHRvIHVwZGF0
ZQorKiBAcGFyYW0ge29iamVjdH0gZGF0YSBUaGUgcHJvcGVydGllcyB0byB1cGRhdGUgYW5kIHRo
ZWlyIG5ldyB2YWx1ZQorKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgY2FsbGJhY2sg
dG8gZmlyZSB3aGVuIHRoZSB1cGRhdGUgaXMgY29tcGxldGUuCisqLworTW9kZWwucHJvdG90eXBl
LnVwZGF0ZSA9IGZ1bmN0aW9uKGlkLCBkYXRhLCBjYWxsYmFjaykgeworICB0aGlzLnN0b3JhZ2Uu
c2F2ZShkYXRhLCBjYWxsYmFjaywgaWQpCit9CisKKy8qKgorKiBSZW1vdmVzIGEgbW9kZWwgZnJv
bSBzdG9yYWdlCisqCisqIEBwYXJhbSB7bnVtYmVyfSBpZCBUaGUgSUQgb2YgdGhlIG1vZGVsIHRv
IHJlbW92ZQorKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gZmly
ZSB3aGVuIHRoZSByZW1vdmFsIGlzIGNvbXBsZXRlLgorKi8KK01vZGVsLnByb3RvdHlwZS5yZW1v
dmUgPSBmdW5jdGlvbihpZCwgY2FsbGJhY2spIHsKKyAgdGhpcy5zdG9yYWdlLnJlbW92ZShpZCwg
Y2FsbGJhY2spCit9CisKKy8qKgorKiBXQVJOSU5HOiBXaWxsIHJlbW92ZSBBTEwgZGF0YSBmcm9t
IHN0b3JhZ2UuCisqCisqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0
byBmaXJlIHdoZW4gdGhlIHN0b3JhZ2UgaXMgd2lwZWQuCisqLworTW9kZWwucHJvdG90eXBlLnJl
bW92ZUFsbCA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7CisgIHRoaXMuc3RvcmFnZS5kcm9wKGNhbGxi
YWNrKQorfQorCisvKioKKyogUmV0dXJucyBhIGNvdW50IG9mIGFsbCB0b2RvcworKi8KK01vZGVs
LnByb3RvdHlwZS5nZXRDb3VudCA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7CisgIHZhciB0b2RvcyA9
IHsKKyAgICBhY3RpdmU6IDAsCisgICAgY29tcGxldGVkOiAwLAorICAgIHRvdGFsOiAwCisgIH0K
KworICB0aGlzLnN0b3JhZ2UuZmluZEFsbChmdW5jdGlvbihkYXRhKSB7CisgICAgZGF0YS5mb3JF
YWNoKGZ1bmN0aW9uKHRvZG8pIHsKKyAgICAgIGlmICh0b2RvLmNvbXBsZXRlZCkgeworICAgICAg
ICB0b2Rvcy5jb21wbGV0ZWQrKworICAgICAgfSBlbHNlIHsKKyAgICAgICAgdG9kb3MuYWN0aXZl
KysKKyAgICAgIH0KKworICAgICAgdG9kb3MudG90YWwrKworICAgIH0pCisgICAgY2FsbGJhY2so
dG9kb3MpCisgIH0pCit9CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVy
L3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2sv
c3JjL3N0b3JlLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9k
b212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrL3NyYy9zdG9yZS5qcwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi44NTA3M2JiZDJhMDlhZWRjMTZkYjRmYmQ2YzAyNzJhODJkNWVkZDJjCi0tLSAv
ZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9k
b212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrL3NyYy9zdG9yZS5qcwpA
QCAtMCwwICsxLDE1MSBAQAoraW1wb3J0IHtyZW1vdmV9IGZyb20gJy4vaGVscGVycycKK2ltcG9y
dCAqIGFzIGxvY2FsU3RvcmFnZU1lbW9yeSBmcm9tICcuL21lbW9yeScKK2V4cG9ydCBkZWZhdWx0
IFN0b3JlCisKKy8qKgorICogQ3JlYXRlcyBhIG5ldyBjbGllbnQgc2lkZSBzdG9yYWdlIG9iamVj
dCBhbmQgd2lsbCBjcmVhdGUgYW4gZW1wdHkKKyAqIGNvbGxlY3Rpb24gaWYgbm8gY29sbGVjdGlv
biBhbHJlYWR5IGV4aXN0cy4KKyAqCisgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBUaGUgbmFtZSBv
ZiBvdXIgREIgd2Ugd2FudCB0byB1c2UKKyAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrIE91
ciBmYWtlIERCIHVzZXMgY2FsbGJhY2tzIGJlY2F1c2UgaW4KKyAqIHJlYWwgbGlmZSB5b3UgcHJv
YmFibHkgd291bGQgYmUgbWFraW5nIEFKQVggY2FsbHMKKyAqLworZnVuY3Rpb24gU3RvcmUobmFt
ZSwgY2FsbGJhY2spIHsKKyAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHsKKyAg
fQorCisgIHRoaXMuX2RiTmFtZSA9IG5hbWUKKworICBpZiAoIWxvY2FsU3RvcmFnZU1lbW9yeVtu
YW1lXSkgeworICAgIHZhciBkYXRhID0geworICAgICAgdG9kb3M6IFtdCisgICAgfQorCisgICAg
bG9jYWxTdG9yYWdlTWVtb3J5W25hbWVdID0gSlNPTi5zdHJpbmdpZnkoZGF0YSkKKyAgfQorCisg
IGNhbGxiYWNrLmNhbGwodGhpcywgSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2VNZW1vcnlbbmFtZV0p
KQorICB0aGlzLnN1YnNjcmliZXJzID0gW10KK30KKworU3RvcmUucHJvdG90eXBlLnN1YnNjcmli
ZSA9IGZ1bmN0aW9uKHN1YnNjcmliZXIpIHsKKyAgdGhpcy5zdWJzY3JpYmVycy5wdXNoKHN1YnNj
cmliZXIpCisgIHJldHVybiAoKSA9PiByZW1vdmUodGhpcy5zdWJzY3JpYmVycywgc3Vic2NyaWJl
cikKK30KKworU3RvcmUucHJvdG90eXBlLl9ub3RpZnkgPSBmdW5jdGlvbigpIHsKKyAgdGhpcy5z
dWJzY3JpYmVycy5mb3JFYWNoKHMgPT4gcygpKQorfQorCisvKioKKyogRmluZHMgaXRlbXMgYmFz
ZWQgb24gYSBxdWVyeSBnaXZlbiBhcyBhIEpTIG9iamVjdAorKgorKiBAcGFyYW0ge29iamVjdH0g
cXVlcnkgVGhlIHF1ZXJ5IHRvIG1hdGNoIGFnYWluc3QgKGkuZS4ge2ZvbzogJ2Jhcid9KQorKiBA
cGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayAgIFRoZSBjYWxsYmFjayB0byBmaXJlIHdoZW4gdGhl
IHF1ZXJ5IGhhcworKiBjb21wbGV0ZWQgcnVubmluZworKgorKiBAZXhhbXBsZQorKiBkYi5maW5k
KHtmb286ICdiYXInLCBoZWxsbzogJ3dvcmxkJ30sIGZ1bmN0aW9uIChkYXRhKSB7CisqICAgLy8g
ZGF0YSB3aWxsIHJldHVybiBhbnkgaXRlbXMgdGhhdCBoYXZlIGZvbzogYmFyIGFuZAorKiAgIC8v
IGhlbGxvOiB3b3JsZCBpbiB0aGVpciBwcm9wZXJ0aWVzCisqIH0pOworKi8KK1N0b3JlLnByb3Rv
dHlwZS5maW5kID0gZnVuY3Rpb24ocXVlcnksIGNhbGxiYWNrKSB7CisgIGlmICghY2FsbGJhY2sp
IHsKKyAgICByZXR1cm4KKyAgfQorCisgIHZhciB0b2RvcyA9IEpTT04ucGFyc2UobG9jYWxTdG9y
YWdlTWVtb3J5W3RoaXMuX2RiTmFtZV0pLnRvZG9zCisKKyAgY2FsbGJhY2suY2FsbCh0aGlzLCB0
b2Rvcy5maWx0ZXIoZnVuY3Rpb24odG9kbykgeworICAgIGZvciAodmFyIHEgaW4gcXVlcnkpIHsK
KyAgICAgIGlmIChxdWVyeVtxXSAhPT0gdG9kb1txXSkgeworICAgICAgICByZXR1cm4gZmFsc2UK
KyAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHRydWUKKyAgfSkpCit9CisKKy8qKgorKiBXaWxs
IHJldHJpZXZlIGFsbCBkYXRhIGZyb20gdGhlIGNvbGxlY3Rpb24KKyoKKyogQHBhcmFtIHtmdW5j
dGlvbn0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIGZpcmUgdXBvbiByZXRyaWV2aW5nIGRhdGEK
KyovCitTdG9yZS5wcm90b3R5cGUuZmluZEFsbCA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7CisgIGNh
bGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7CisgIH0KKyAgY2FsbGJhY2suY2FsbCh0
aGlzLCBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZU1lbW9yeVt0aGlzLl9kYk5hbWVdKS50b2RvcykK
K30KKworLyoqCisqIFdpbGwgc2F2ZSB0aGUgZ2l2ZW4gZGF0YSB0byB0aGUgREIuIElmIG5vIGl0
ZW0gZXhpc3RzIGl0IHdpbGwgY3JlYXRlIGEgbmV3CisqIGl0ZW0sIG90aGVyd2lzZSBpdCdsbCBz
aW1wbHkgdXBkYXRlIGFuIGV4aXN0aW5nIGl0ZW0ncyBwcm9wZXJ0aWVzCisqCisqIEBwYXJhbSB7
b2JqZWN0fSB1cGRhdGVEYXRhIFRoZSBkYXRhIHRvIHNhdmUgYmFjayBpbnRvIHRoZSBEQgorKiBA
cGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gZmlyZSBhZnRlciBzYXZp
bmcKKyogQHBhcmFtIHtudW1iZXJ9IGlkIEFuIG9wdGlvbmFsIHBhcmFtIHRvIGVudGVyIGFuIElE
IG9mIGFuIGl0ZW0gdG8gdXBkYXRlCisqLworU3RvcmUucHJvdG90eXBlLnNhdmUgPSBmdW5jdGlv
bih1cGRhdGVEYXRhLCBjYWxsYmFjaywgaWQpIHsKKyAgdmFyIGRhdGEgPSBKU09OLnBhcnNlKGxv
Y2FsU3RvcmFnZU1lbW9yeVt0aGlzLl9kYk5hbWVdKQorICB2YXIgdG9kb3MgPSBkYXRhLnRvZG9z
CisKKyAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHsKKyAgfQorCisgIC8vIElm
IGFuIElEIHdhcyBhY3R1YWxseSBnaXZlbiwgZmluZCB0aGUgaXRlbSBhbmQgdXBkYXRlIGVhY2gg
cHJvcGVydHkKKyAgaWYgKGlkKSB7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2Rvcy5sZW5n
dGg7IGkrKykgeworICAgICAgaWYgKHRvZG9zW2ldLmlkID09PSBpZCkgeworICAgICAgICBmb3Ig
KHZhciBrZXkgaW4gdXBkYXRlRGF0YSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGd1YXJkLWZv
ci1pbgorICAgICAgICAgIHRvZG9zW2ldW2tleV0gPSB1cGRhdGVEYXRhW2tleV0KKyAgICAgICAg
fQorICAgICAgICBicmVhaworICAgICAgfQorICAgIH0KKworICAgIGxvY2FsU3RvcmFnZU1lbW9y
eVt0aGlzLl9kYk5hbWVdID0gSlNPTi5zdHJpbmdpZnkoZGF0YSkKKyAgICBjYWxsYmFjay5jYWxs
KHRoaXMsIEpTT04ucGFyc2UobG9jYWxTdG9yYWdlTWVtb3J5W3RoaXMuX2RiTmFtZV0pLnRvZG9z
KQorICB9IGVsc2UgeworICAgIC8vIEdlbmVyYXRlIGFuIElECisgICAgdXBkYXRlRGF0YS5pZCA9
IG5ldyBEYXRlKCkuZ2V0VGltZSgpCisKKyAgICB0b2Rvcy5wdXNoKHVwZGF0ZURhdGEpCisgICAg
bG9jYWxTdG9yYWdlTWVtb3J5W3RoaXMuX2RiTmFtZV0gPSBKU09OLnN0cmluZ2lmeShkYXRhKQor
ICAgIGNhbGxiYWNrLmNhbGwodGhpcywgW3VwZGF0ZURhdGFdKQorICB9CisgIHRoaXMuX25vdGlm
eSgpCit9CisKKy8qKgorKiBXaWxsIHJlbW92ZSBhbiBpdGVtIGZyb20gdGhlIFN0b3JlIGJhc2Vk
IG9uIGl0cyBJRAorKgorKiBAcGFyYW0ge251bWJlcn0gaWQgVGhlIElEIG9mIHRoZSBpdGVtIHlv
dSB3YW50IHRvIHJlbW92ZQorKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgY2FsbGJh
Y2sgdG8gZmlyZSBhZnRlciBzYXZpbmcKKyovCitTdG9yZS5wcm90b3R5cGUucmVtb3ZlID0gZnVu
Y3Rpb24oaWQsIGNhbGxiYWNrKSB7CisgIHZhciBkYXRhID0gSlNPTi5wYXJzZShsb2NhbFN0b3Jh
Z2VNZW1vcnlbdGhpcy5fZGJOYW1lXSkKKyAgdmFyIHRvZG9zID0gZGF0YS50b2RvcworCisgIGZv
ciAodmFyIGkgPSAwOyBpIDwgdG9kb3MubGVuZ3RoOyBpKyspIHsKKyAgICBpZiAodG9kb3NbaV0u
aWQgPT09IGlkKSB7CisgICAgICB0b2Rvcy5zcGxpY2UoaSwgMSkKKyAgICAgIGJyZWFrCisgICAg
fQorICB9CisKKyAgbG9jYWxTdG9yYWdlTWVtb3J5W3RoaXMuX2RiTmFtZV0gPSBKU09OLnN0cmlu
Z2lmeShkYXRhKQorICBjYWxsYmFjay5jYWxsKHRoaXMsIEpTT04ucGFyc2UobG9jYWxTdG9yYWdl
TWVtb3J5W3RoaXMuX2RiTmFtZV0pLnRvZG9zKQorICB0aGlzLl9ub3RpZnkoKQorfQorCisvKioK
KyogV2lsbCBkcm9wIGFsbCBzdG9yYWdlIGFuZCBzdGFydCBmcmVzaAorKgorKiBAcGFyYW0ge2Z1
bmN0aW9ufSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gZmlyZSBhZnRlciBkcm9wcGluZyB0aGUg
ZGF0YQorKi8KK1N0b3JlLnByb3RvdHlwZS5kcm9wID0gZnVuY3Rpb24oY2FsbGJhY2spIHsKKyAg
bG9jYWxTdG9yYWdlTWVtb3J5W3RoaXMuX2RiTmFtZV0gPSBKU09OLnN0cmluZ2lmeSh7dG9kb3M6
IFtdfSkKKyAgY2FsbGJhY2suY2FsbCh0aGlzLCBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZU1lbW9y
eVt0aGlzLl9kYk5hbWVdKS50b2RvcykKKyAgdGhpcy5fbm90aWZ5KCkKK30KZGlmZiAtLWdpdCBh
L1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1l
eGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9zcmMvdGVtcGxhdGUuanMgYi9QZXJmb3JtYW5j
ZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMvZXMy
MDE1LWJhYmVsLXdlYnBhY2svc3JjL3RlbXBsYXRlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYwYzRmNmZjODQ3
MDhmN2NjMzhjNmNjYTRkZmJmYjNkZWU5ZDRhZWYKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3Jt
YW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3ZhbmlsbGEtZXhhbXBsZXMv
ZXMyMDE1LWJhYmVsLXdlYnBhY2svc3JjL3RlbXBsYXRlLmpzCkBAIC0wLDAgKzEsMTEwIEBACitl
eHBvcnQgZGVmYXVsdCBUZW1wbGF0ZQorCit2YXIgaHRtbEVzY2FwZXMgPSB7CisgICcmJzogJyZh
bXA7JywKKyAgJzwnOiAnJmx0OycsCisgICc+JzogJyZndDsnLAorICAnIic6ICcmcXVvdDsnLAor
ICAnXCcnOiAnJiN4Mjc7JywKKyAgJ2AnOiAnJiN4NjA7JworfQorCit2YXIgZXNjYXBlSHRtbENo
YXIgPSBmdW5jdGlvbihjaHIpIHsKKyAgcmV0dXJuIGh0bWxFc2NhcGVzW2Nocl0KK30KKwordmFy
IHJlVW5lc2NhcGVkSHRtbCA9IC9bJjw+IidgXS9nCit2YXIgcmVIYXNVbmVzY2FwZWRIdG1sID0g
bmV3IFJlZ0V4cChyZVVuZXNjYXBlZEh0bWwuc291cmNlKQorCit2YXIgZXNjYXBlID0gZnVuY3Rp
b24oc3RyaW5nKSB7CisgIGlmIChzdHJpbmcgJiYgcmVIYXNVbmVzY2FwZWRIdG1sLnRlc3Qoc3Ry
aW5nKSkgeworICAgIHJldHVybiBzdHJpbmcucmVwbGFjZShyZVVuZXNjYXBlZEh0bWwsIGVzY2Fw
ZUh0bWxDaGFyKQorICB9IGVsc2UgeworICAgIHJldHVybiBzdHJpbmcKKyAgfQorfQorCisvKioK
KyogU2V0cyB1cCBkZWZhdWx0cyBmb3IgYWxsIHRoZSBUZW1wbGF0ZSBtZXRob2RzIHN1Y2ggYXMg
YSBkZWZhdWx0IHRlbXBsYXRlCisqCisqIEBjb25zdHJ1Y3RvcgorKi8KK2Z1bmN0aW9uIFRlbXBs
YXRlKCkgeworICB0aGlzLmRlZmF1bHRUZW1wbGF0ZSA9IGAKKyAgICA8bGkgZGF0YS1pZD0ie3tp
ZH19IiBjbGFzcz0ie3tjb21wbGV0ZWR9fSI+CisgICAgICA8ZGl2IGNsYXNzPSJ2aWV3Ij4KKyAg
ICAgICAgPGlucHV0IGNsYXNzPSJ0b2dnbGUiIHR5cGU9ImNoZWNrYm94IiB7e2NoZWNrZWR9fSAv
PgorICAgICAgICA8bGFiZWw+e3t0aXRsZX19PC9sYWJlbD4KKyAgICAgICAgPGJ1dHRvbiBjbGFz
cz0iZGVzdHJveSI+PC9idXR0b24+CisgICAgICA8L2Rpdj4KKyAgICA8L2xpPgorICBgCit9CisK
Ky8qKgorICogQ3JlYXRlcyBhbiA8bGk+IEhUTUwgc3RyaW5nIGFuZCByZXR1cm5zIGl0IGZvciBw
bGFjZW1lbnQgaW4geW91ciBhcHAuCisgKgorICogTk9URTogSW4gcmVhbCBsaWZlIHlvdSBzaG91
bGQgYmUgdXNpbmcgYSB0ZW1wbGF0aW5nIGVuZ2luZSBzdWNoIGFzIE11c3RhY2hlCisgKiBvciBI
YW5kbGViYXJzLCBob3dldmVyLCB0aGlzIGlzIGEgdmFuaWxsYSBKUyBleGFtcGxlLgorICoKKyAq
IEBwYXJhbSB7b2JqZWN0fSBkYXRhIFRoZSBvYmplY3QgY29udGFpbmluZyBrZXlzIHlvdSB3YW50
IHRvIGZpbmQgaW4gdGhlCisgKiAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZSB0byByZXBs
YWNlLgorICogQHJldHVybnMge3N0cmluZ30gSFRNTCBTdHJpbmcgb2YgYW4gPGxpPiBlbGVtZW50
CisgKgorICogQGV4YW1wbGUKKyAqIHZpZXcuc2hvdyh7CisgKiAgaWQ6IDEsCisgKiAgdGl0bGU6
ICJIZWxsbyBXb3JsZCIsCisgKiAgY29tcGxldGVkOiAwLAorICogfSk7CisgKi8KK1RlbXBsYXRl
LnByb3RvdHlwZS5zaG93ID0gZnVuY3Rpb24oZGF0YSkgeworICB2YXIgaSwgbAorICB2YXIgdmll
dyA9ICcnCisKKyAgZm9yIChpID0gMCwgbCA9IGRhdGEubGVuZ3RoOyBpIDwgbDsgaSsrKSB7Cisg
ICAgdmFyIHRlbXBsYXRlID0gdGhpcy5kZWZhdWx0VGVtcGxhdGUKKyAgICB2YXIgY29tcGxldGVk
ID0gJycKKyAgICB2YXIgY2hlY2tlZCA9ICcnCisKKyAgICBpZiAoZGF0YVtpXS5jb21wbGV0ZWQp
IHsKKyAgICAgIGNvbXBsZXRlZCA9ICdjb21wbGV0ZWQnCisgICAgICBjaGVja2VkID0gJ2NoZWNr
ZWQnCisgICAgfQorCisgICAgdGVtcGxhdGUgPSB0ZW1wbGF0ZS5yZXBsYWNlKCd7e2lkfX0nLCBk
YXRhW2ldLmlkKQorICAgIHRlbXBsYXRlID0gdGVtcGxhdGUucmVwbGFjZSgne3t0aXRsZX19Jywg
ZXNjYXBlKGRhdGFbaV0udGl0bGUpKQorICAgIHRlbXBsYXRlID0gdGVtcGxhdGUucmVwbGFjZSgn
e3tjb21wbGV0ZWR9fScsIGNvbXBsZXRlZCkKKyAgICB0ZW1wbGF0ZSA9IHRlbXBsYXRlLnJlcGxh
Y2UoJ3t7Y2hlY2tlZH19JywgY2hlY2tlZCkKKworICAgIHZpZXcgPSB2aWV3ICsgdGVtcGxhdGUK
KyAgfQorCisgIHJldHVybiB2aWV3Cit9CisKKy8qKgorICogRGlzcGxheXMgYSBjb3VudGVyIG9m
IGhvdyBtYW55IHRvIGRvcyBhcmUgbGVmdCB0byBjb21wbGV0ZQorICoKKyAqIEBwYXJhbSB7bnVt
YmVyfSBhY3RpdmVUb2RvcyBUaGUgbnVtYmVyIG9mIGFjdGl2ZSB0b2Rvcy4KKyAqIEByZXR1cm5z
IHtzdHJpbmd9IFN0cmluZyBjb250YWluaW5nIHRoZSBjb3VudAorICovCitUZW1wbGF0ZS5wcm90
b3R5cGUuaXRlbUNvdW50ZXIgPSBmdW5jdGlvbihhY3RpdmVUb2RvcykgeworICB2YXIgcGx1cmFs
ID0gYWN0aXZlVG9kb3MgPT09IDEgPyAnJyA6ICdzJworCisgIHJldHVybiAnPHN0cm9uZz4nICsg
YWN0aXZlVG9kb3MgKyAnPC9zdHJvbmc+IGl0ZW0nICsgcGx1cmFsICsgJyBsZWZ0JworfQorCisv
KioKKyAqIFVwZGF0ZXMgdGhlIHRleHQgd2l0aGluIHRoZSAiQ2xlYXIgY29tcGxldGVkIiBidXR0
b24KKyAqCisgKiBAcGFyYW0gIHtbdHlwZV19IGNvbXBsZXRlZFRvZG9zIFRoZSBudW1iZXIgb2Yg
Y29tcGxldGVkIHRvZG9zLgorICogQHJldHVybnMge3N0cmluZ30gU3RyaW5nIGNvbnRhaW5pbmcg
dGhlIGNvdW50CisgKi8KK1RlbXBsYXRlLnByb3RvdHlwZS5jbGVhckNvbXBsZXRlZEJ1dHRvbiA9
IGZ1bmN0aW9uKGNvbXBsZXRlZFRvZG9zKSB7CisgIGlmIChjb21wbGV0ZWRUb2RvcyA+IDApIHsK
KyAgICByZXR1cm4gJ0NsZWFyIGNvbXBsZXRlZCcKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gJycK
KyAgfQorfQpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJj
ZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrL3NyYy90b2Rv
LmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5p
bGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrL3NyYy90b2RvLmpzCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmU1MWNmMzYxYWEzNWUyMzRkMmIyNjdlODY2N2ViMGE4Nzg2NGJmNjYKLS0tIC9kZXYvbnVsbAor
KysgYi9QZXJmb3JtYW5jZVRlc3RzL1NwZWVkb21ldGVyL3Jlc291cmNlcy90b2RvbXZjL3Zhbmls
bGEtZXhhbXBsZXMvZXMyMDE1LWJhYmVsLXdlYnBhY2svc3JjL3RvZG8uanMKQEAgLTAsMCArMSw0
MSBAQAoraW1wb3J0IFZpZXcgZnJvbSAnLi92aWV3JworaW1wb3J0IENvbnRyb2xsZXIgZnJvbSAn
Li9jb250cm9sbGVyJworaW1wb3J0IE1vZGVsIGZyb20gJy4vbW9kZWwnCitpbXBvcnQgU3RvcmUg
ZnJvbSAnLi9zdG9yZScKK2ltcG9ydCBUZW1wbGF0ZSBmcm9tICcuL3RlbXBsYXRlJworaW1wb3J0
IHtyZW1vdmV9IGZyb20gJy4vaGVscGVycycKKworZXhwb3J0IHt1cGRhdGVUb2RvLCBnZXRUb2Rv
LCBzdWJzY3JpYmV9CisKK2xldCB0b2RvCitjb25zdCBzdWJzY3JpYmVycyA9IFtdCisKKy8qKgor
ICogU2V0cyB1cCBhIGJyYW5kIG5ldyBUb2RvIGxpc3QuCisgKgorICogQHBhcmFtIHtzdHJpbmd9
IG5hbWUgVGhlIG5hbWUgb2YgeW91ciBuZXcgdG8gZG8gbGlzdC4KKyAqLworZnVuY3Rpb24gVG9k
byhuYW1lKSB7CisgIHRoaXMuc3RvcmFnZSA9IG5ldyBTdG9yZShuYW1lKQorICB0aGlzLm1vZGVs
ID0gbmV3IE1vZGVsKHRoaXMuc3RvcmFnZSkKKyAgdGhpcy50ZW1wbGF0ZSA9IG5ldyBUZW1wbGF0
ZSgpCisgIHRoaXMudmlldyA9IG5ldyBWaWV3KHRoaXMudGVtcGxhdGUpCisgIHRoaXMuY29udHJv
bGxlciA9IG5ldyBDb250cm9sbGVyKHRoaXMubW9kZWwsIHRoaXMudmlldykKK30KKworZnVuY3Rp
b24gdXBkYXRlVG9kbygpIHsKKyAgdG9kbyA9IG5ldyBUb2RvKCd0b2Rvcy12YW5pbGxhanMnKQor
ICB0b2RvLmNvbnRyb2xsZXIuc2V0Vmlldyhkb2N1bWVudC5sb2NhdGlvbi5oYXNoKQorICBzdWJz
Y3JpYmVycy5mb3JFYWNoKHMgPT4gcygpKQorfQorCitmdW5jdGlvbiBnZXRUb2RvKCkgeworICBy
ZXR1cm4gdG9kbworfQorCitmdW5jdGlvbiBzdWJzY3JpYmUoY2IpIHsKKyAgc3Vic2NyaWJlcnMu
cHVzaChjYikKKyAgcmV0dXJuIGZ1bmN0aW9uIHVuc3Vic2NyaWJlKCkgeworICAgIHJlbW92ZShz
dWJzY3JpYmVycywgY2IpCisgIH0KK30KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvU3Bl
ZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwt
d2VicGFjay9zcmMvdmlldy5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3Vy
Y2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUtYmFiZWwtd2VicGFjay9zcmMvdmll
dy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4zMTVlZDVjNWQyNWU2YjBhYTA2ZjcyN2YxYTc4YTdkMGJhMTBmZTIx
Ci0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJj
ZXMvdG9kb212Yy92YW5pbGxhLWV4YW1wbGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrL3NyYy92aWV3
LmpzCkBAIC0wLDAgKzEsMjE0IEBACisvKiBlc2xpbnQgbm8taW52YWxpZC10aGlzOiAwLCBjb21w
bGV4aXR5OlsyLCA5XSAqLworaW1wb3J0IHtxcywgcXNhLCAkb24sICRwYXJlbnQsICRkZWxlZ2F0
ZX0gZnJvbSAnLi9oZWxwZXJzJworCisvKioKKyAqIFZpZXcgdGhhdCBhYnN0cmFjdHMgYXdheSB0
aGUgYnJvd3NlcidzIERPTSBjb21wbGV0ZWx5LgorICogSXQgaGFzIHR3byBzaW1wbGUgZW50cnkg
cG9pbnRzOgorICoKKyAqICAgLSBiaW5kKGV2ZW50TmFtZSwgaGFuZGxlcikKKyAqICAgICBUYWtl
cyBhIHRvZG8gYXBwbGljYXRpb24gZXZlbnQgYW5kIHJlZ2lzdGVycyB0aGUgaGFuZGxlcgorICog
ICAtIHJlbmRlcihjb21tYW5kLCBwYXJhbWV0ZXJPYmplY3QpCisgKiAgICAgUmVuZGVycyB0aGUg
Z2l2ZW4gY29tbWFuZCB3aXRoIHRoZSBvcHRpb25zCisgKi8KK2V4cG9ydCBkZWZhdWx0IGNsYXNz
IFZpZXcgeworICBjb25zdHJ1Y3Rvcih0ZW1wbGF0ZSkgeworICAgIHRoaXMudGVtcGxhdGUgPSB0
ZW1wbGF0ZQorCisgICAgdGhpcy5FTlRFUl9LRVkgPSAxMworICAgIHRoaXMuRVNDQVBFX0tFWSA9
IDI3CisKKyAgICB0aGlzLiR0b2RvTGlzdCA9IHFzKCcudG9kby1saXN0JykKKyAgICB0aGlzLiR0
b2RvSXRlbUNvdW50ZXIgPSBxcygnLnRvZG8tY291bnQnKQorICAgIHRoaXMuJGNsZWFyQ29tcGxl
dGVkID0gcXMoJy5jbGVhci1jb21wbGV0ZWQnKQorICAgIHRoaXMuJG1haW4gPSBxcygnLm1haW4n
KQorICAgIHRoaXMuJGZvb3RlciA9IHFzKCcuZm9vdGVyJykKKyAgICB0aGlzLiR0b2dnbGVBbGwg
PSBxcygnLnRvZ2dsZS1hbGwnKQorICAgIHRoaXMuJG5ld1RvZG8gPSBxcygnLm5ldy10b2RvJykK
KyAgfQorCisgIF9yZW1vdmVJdGVtKGlkKSB7CisgICAgdmFyIGVsZW0gPSBxcygnW2RhdGEtaWQ9
IicgKyBpZCArICciXScpCisKKyAgICBpZiAoZWxlbSkgeworICAgICAgdGhpcy4kdG9kb0xpc3Qu
cmVtb3ZlQ2hpbGQoZWxlbSkKKyAgICB9CisgIH0KKworICBfY2xlYXJDb21wbGV0ZWRCdXR0b24o
Y29tcGxldGVkQ291bnQsIHZpc2libGUpIHsKKyAgICB0aGlzLiRjbGVhckNvbXBsZXRlZC5pbm5l
ckhUTUwgPSB0aGlzLnRlbXBsYXRlLmNsZWFyQ29tcGxldGVkQnV0dG9uKGNvbXBsZXRlZENvdW50
KQorICAgIHRoaXMuJGNsZWFyQ29tcGxldGVkLnN0eWxlLmRpc3BsYXkgPSB2aXNpYmxlID8gJ2Js
b2NrJyA6ICdub25lJworICB9CisKKyAgX2VkaXRJdGVtRG9uZShpZCwgdGl0bGUpIHsKKyAgICB2
YXIgbGlzdEl0ZW0gPSBxcygnW2RhdGEtaWQ9IicgKyBpZCArICciXScpCisKKyAgICBpZiAoIWxp
c3RJdGVtKSB7CisgICAgICByZXR1cm4KKyAgICB9CisKKyAgICB2YXIgaW5wdXQgPSBxcygnaW5w
dXQuZWRpdCcsIGxpc3RJdGVtKQorICAgIGxpc3RJdGVtLnJlbW92ZUNoaWxkKGlucHV0KQorCisg
ICAgbGlzdEl0ZW0uY2xhc3NOYW1lID0gbGlzdEl0ZW0uY2xhc3NOYW1lLnJlcGxhY2UoJ2VkaXRp
bmcnLCAnJykKKworICAgIHFzYSgnbGFiZWwnLCBsaXN0SXRlbSkuZm9yRWFjaChmdW5jdGlvbihs
YWJlbCkgeworICAgICAgbGFiZWwudGV4dENvbnRlbnQgPSB0aXRsZQorICAgIH0pCisgIH0KKwor
ICByZW5kZXIodmlld0NtZCwgcGFyYW1ldGVyKSB7CisgICAgdmFyIHRoYXQgPSB0aGlzCisgICAg
dmFyIHZpZXdDb21tYW5kcyA9IHsKKyAgICAgIHNob3dFbnRyaWVzOiBmdW5jdGlvbigpIHsKKyAg
ICAgICAgdGhhdC4kdG9kb0xpc3QuaW5uZXJIVE1MID0gdGhhdC50ZW1wbGF0ZS5zaG93KHBhcmFt
ZXRlcikKKyAgICAgIH0sCisgICAgICByZW1vdmVJdGVtOiBmdW5jdGlvbigpIHsKKyAgICAgICAg
dGhhdC5fcmVtb3ZlSXRlbShwYXJhbWV0ZXIpCisgICAgICB9LAorICAgICAgdXBkYXRlRWxlbWVu
dENvdW50OiBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhhdC4kdG9kb0l0ZW1Db3VudGVyLmlubmVy
SFRNTCA9IHRoYXQudGVtcGxhdGUuaXRlbUNvdW50ZXIocGFyYW1ldGVyKQorICAgICAgfSwKKyAg
ICAgIGNsZWFyQ29tcGxldGVkQnV0dG9uOiBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhhdC5fY2xl
YXJDb21wbGV0ZWRCdXR0b24ocGFyYW1ldGVyLmNvbXBsZXRlZCwgcGFyYW1ldGVyLnZpc2libGUp
CisgICAgICB9LAorICAgICAgY29udGVudEJsb2NrVmlzaWJpbGl0eTogZnVuY3Rpb24oKSB7Cisg
ICAgICAgIHRoYXQuJG1haW4uc3R5bGUuZGlzcGxheSA9IHRoYXQuJGZvb3Rlci5zdHlsZS5kaXNw
bGF5ID0gcGFyYW1ldGVyLnZpc2libGUgPyAnYmxvY2snIDogJ25vbmUnCisgICAgICB9LAorICAg
ICAgdG9nZ2xlQWxsOiBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhhdC4kdG9nZ2xlQWxsLmNoZWNr
ZWQgPSBwYXJhbWV0ZXIuY2hlY2tlZAorICAgICAgfSwKKyAgICAgIHNldEZpbHRlcjogZnVuY3Rp
b24oKSB7CisgICAgICAgIF9zZXRGaWx0ZXIocGFyYW1ldGVyKQorICAgICAgfSwKKyAgICAgIGNs
ZWFyTmV3VG9kbzogZnVuY3Rpb24oKSB7CisgICAgICAgIHRoYXQuJG5ld1RvZG8udmFsdWUgPSAn
JworICAgICAgfSwKKyAgICAgIGVsZW1lbnRDb21wbGV0ZTogZnVuY3Rpb24oKSB7CisgICAgICAg
IF9lbGVtZW50Q29tcGxldGUocGFyYW1ldGVyLmlkLCBwYXJhbWV0ZXIuY29tcGxldGVkKQorICAg
ICAgfSwKKyAgICAgIGVkaXRJdGVtOiBmdW5jdGlvbigpIHsKKyAgICAgICAgX2VkaXRJdGVtKHBh
cmFtZXRlci5pZCwgcGFyYW1ldGVyLnRpdGxlKQorICAgICAgfSwKKyAgICAgIGVkaXRJdGVtRG9u
ZTogZnVuY3Rpb24oKSB7CisgICAgICAgIHRoYXQuX2VkaXRJdGVtRG9uZShwYXJhbWV0ZXIuaWQs
IHBhcmFtZXRlci50aXRsZSkKKyAgICAgIH0KKyAgICB9CisKKyAgICB2aWV3Q29tbWFuZHNbdmll
d0NtZF0oKQorICB9CisKKyAgX2JpbmRJdGVtRWRpdERvbmUoaGFuZGxlcikgeworICAgIHZhciB0
aGF0ID0gdGhpcworICAgICRkZWxlZ2F0ZSh0aGF0LiR0b2RvTGlzdCwgJ2xpIC5lZGl0JywgJ2Js
dXInLCBmdW5jdGlvbigpIHsKKyAgICAgIGlmICghdGhpcy5kYXRhc2V0LmlzY2FuY2VsZWQpIHsK
KyAgICAgICAgaGFuZGxlcih7CisgICAgICAgICAgaWQ6IF9pdGVtSWQodGhpcyksCisgICAgICAg
ICAgdGl0bGU6IHRoaXMudmFsdWUKKyAgICAgICAgfSkKKyAgICAgIH0KKyAgICB9KQorCisgICAg
JGRlbGVnYXRlKHRoYXQuJHRvZG9MaXN0LCAnbGkgLmVkaXQnLCAna2V5cHJlc3MnLCBmdW5jdGlv
bihldmVudCkgeworICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IHRoYXQuRU5URVJfS0VZKSB7
CisgICAgICAgIC8vIFJlbW92ZSB0aGUgY3Vyc29yIGZyb20gdGhlIGlucHV0IHdoZW4geW91IGhp
dCBlbnRlciBqdXN0IGxpa2UgaWYgaXQKKyAgICAgICAgLy8gd2VyZSBhIHJlYWwgZm9ybQorICAg
ICAgICB0aGlzLmJsdXIoKQorICAgICAgfQorICAgIH0pCisgIH0KKworICBfYmluZEl0ZW1FZGl0
Q2FuY2VsKGhhbmRsZXIpIHsKKyAgICB2YXIgdGhhdCA9IHRoaXMKKyAgICAkZGVsZWdhdGUodGhh
dC4kdG9kb0xpc3QsICdsaSAuZWRpdCcsICdrZXl1cCcsIGZ1bmN0aW9uKGV2ZW50KSB7CisgICAg
ICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gdGhhdC5FU0NBUEVfS0VZKSB7CisgICAgICAgIHRoaXMu
ZGF0YXNldC5pc2NhbmNlbGVkID0gdHJ1ZQorICAgICAgICB0aGlzLmJsdXIoKQorCisgICAgICAg
IGhhbmRsZXIoe2lkOiBfaXRlbUlkKHRoaXMpfSkKKyAgICAgIH0KKyAgICB9KQorICB9CisKKyAg
YmluZChldmVudCwgaGFuZGxlcikgeworICAgIHZhciB0aGF0ID0gdGhpcworICAgIGlmIChldmVu
dCA9PT0gJ25ld1RvZG8nKSB7CisgICAgICAkb24odGhhdC4kbmV3VG9kbywgJ2NoYW5nZScsIGZ1
bmN0aW9uKCkgeworICAgICAgICBoYW5kbGVyKHRoYXQuJG5ld1RvZG8udmFsdWUpCisgICAgICB9
KQorCisgICAgfSBlbHNlIGlmIChldmVudCA9PT0gJ3JlbW92ZUNvbXBsZXRlZCcpIHsKKyAgICAg
ICRvbih0aGF0LiRjbGVhckNvbXBsZXRlZCwgJ2NsaWNrJywgZnVuY3Rpb24oKSB7CisgICAgICAg
IGhhbmRsZXIoKQorICAgICAgfSkKKworICAgIH0gZWxzZSBpZiAoZXZlbnQgPT09ICd0b2dnbGVB
bGwnKSB7CisgICAgICAkb24odGhhdC4kdG9nZ2xlQWxsLCAnY2xpY2snLCBmdW5jdGlvbigpIHsK
KyAgICAgICAgaGFuZGxlcih7Y29tcGxldGVkOiB0aGlzLmNoZWNrZWR9KQorICAgICAgfSkKKwor
ICAgIH0gZWxzZSBpZiAoZXZlbnQgPT09ICdpdGVtRWRpdCcpIHsKKyAgICAgICRkZWxlZ2F0ZSh0
aGF0LiR0b2RvTGlzdCwgJ2xpIGxhYmVsJywgJ2RibGNsaWNrJywgZnVuY3Rpb24oKSB7CisgICAg
ICAgIGhhbmRsZXIoe2lkOiBfaXRlbUlkKHRoaXMpfSkKKyAgICAgIH0pCisKKyAgICB9IGVsc2Ug
aWYgKGV2ZW50ID09PSAnaXRlbVJlbW92ZScpIHsKKyAgICAgICRkZWxlZ2F0ZSh0aGF0LiR0b2Rv
TGlzdCwgJy5kZXN0cm95JywgJ2NsaWNrJywgZnVuY3Rpb24oKSB7CisgICAgICAgIGhhbmRsZXIo
e2lkOiBfaXRlbUlkKHRoaXMpfSkKKyAgICAgIH0pCisKKyAgICB9IGVsc2UgaWYgKGV2ZW50ID09
PSAnaXRlbVRvZ2dsZScpIHsKKyAgICAgICRkZWxlZ2F0ZSh0aGF0LiR0b2RvTGlzdCwgJy50b2dn
bGUnLCAnY2xpY2snLCBmdW5jdGlvbigpIHsKKyAgICAgICAgaGFuZGxlcih7CisgICAgICAgICAg
aWQ6IF9pdGVtSWQodGhpcyksCisgICAgICAgICAgY29tcGxldGVkOiB0aGlzLmNoZWNrZWQKKyAg
ICAgICAgfSkKKyAgICAgIH0pCisKKyAgICB9IGVsc2UgaWYgKGV2ZW50ID09PSAnaXRlbUVkaXRE
b25lJykgeworICAgICAgdGhhdC5fYmluZEl0ZW1FZGl0RG9uZShoYW5kbGVyKQorCisgICAgfSBl
bHNlIGlmIChldmVudCA9PT0gJ2l0ZW1FZGl0Q2FuY2VsJykgeworICAgICAgdGhhdC5fYmluZEl0
ZW1FZGl0Q2FuY2VsKGhhbmRsZXIpCisgICAgfQorICB9Cit9CisKK2Z1bmN0aW9uIF9zZXRGaWx0
ZXIoY3VycmVudFBhZ2UpIHsKKyAgcXMoJy5maWx0ZXJzIC5zZWxlY3RlZCcpLmNsYXNzTmFtZSA9
ICcnCisgIHFzKCcuZmlsdGVycyBbaHJlZj0iIy8nICsgY3VycmVudFBhZ2UgKyAnIl0nKS5jbGFz
c05hbWUgPSAnc2VsZWN0ZWQnCit9CisKK2Z1bmN0aW9uIF9lbGVtZW50Q29tcGxldGUoaWQsIGNv
bXBsZXRlZCkgeworICB2YXIgbGlzdEl0ZW0gPSBxcygnW2RhdGEtaWQ9IicgKyBpZCArICciXScp
CisKKyAgaWYgKCFsaXN0SXRlbSkgeworICAgIHJldHVybgorICB9CisKKyAgbGlzdEl0ZW0uY2xh
c3NOYW1lID0gY29tcGxldGVkID8gJ2NvbXBsZXRlZCcgOiAnJworCisgIC8vIEluIGNhc2UgaXQg
d2FzIHRvZ2dsZWQgZnJvbSBhbiBldmVudCBhbmQgbm90IGJ5IGNsaWNraW5nIHRoZSBjaGVja2Jv
eAorICBxcygnaW5wdXQnLCBsaXN0SXRlbSkuY2hlY2tlZCA9IGNvbXBsZXRlZAorfQorCitmdW5j
dGlvbiBfZWRpdEl0ZW0oaWQsIHRpdGxlKSB7CisgIHZhciBsaXN0SXRlbSA9IHFzKCdbZGF0YS1p
ZD0iJyArIGlkICsgJyJdJykKKworICBpZiAoIWxpc3RJdGVtKSB7CisgICAgcmV0dXJuCisgIH0K
KworICBsaXN0SXRlbS5jbGFzc05hbWUgPSBsaXN0SXRlbS5jbGFzc05hbWUgKyAnIGVkaXRpbmcn
CisKKyAgdmFyIGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKQorICBpbnB1
dC5jbGFzc05hbWUgPSAnZWRpdCcKKworICBsaXN0SXRlbS5hcHBlbmRDaGlsZChpbnB1dCkKKyAg
aW5wdXQuZm9jdXMoKQorICBpbnB1dC52YWx1ZSA9IHRpdGxlCit9CisKK2Z1bmN0aW9uIF9pdGVt
SWQoZWxlbWVudCkgeworICB2YXIgbGkgPSAkcGFyZW50KGVsZW1lbnQsICdsaScpCisgIHJldHVy
biBwYXJzZUludChsaS5kYXRhc2V0LmlkLCAxMCkKK30KZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNl
VGVzdHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIw
MTUtYmFiZWwtd2VicGFjay93ZWJwYWNrLmNvbmZpZy5iYWJlbC5qcyBiL1BlcmZvcm1hbmNlVGVz
dHMvU3BlZWRvbWV0ZXIvcmVzb3VyY2VzL3RvZG9tdmMvdmFuaWxsYS1leGFtcGxlcy9lczIwMTUt
YmFiZWwtd2VicGFjay93ZWJwYWNrLmNvbmZpZy5iYWJlbC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZWMzNzFi
ZTRlNTViNDQ4N2RjNmU0Zjk3Y2I5OTljZmEwYTYzNDAzCi0tLSAvZGV2L251bGwKKysrIGIvUGVy
Zm9ybWFuY2VUZXN0cy9TcGVlZG9tZXRlci9yZXNvdXJjZXMvdG9kb212Yy92YW5pbGxhLWV4YW1w
bGVzL2VzMjAxNS1iYWJlbC13ZWJwYWNrL3dlYnBhY2suY29uZmlnLmJhYmVsLmpzCkBAIC0wLDAg
KzEsNjAgQEAKKy8qIGVzbGludCBuby1jb25zb2xlOiJvZmYiICovCitjb25zdCB7cmVzb2x2ZX0g
PSByZXF1aXJlKCdwYXRoJykKK2NvbnN0IHdlYnBhY2sgPSByZXF1aXJlKCd3ZWJwYWNrJykKK2Nv
bnN0IFByb2dyZXNzQmFyUGx1Z2luID0gcmVxdWlyZSgncHJvZ3Jlc3MtYmFyLXdlYnBhY2stcGx1
Z2luJykKK2NvbnN0IEh0bWxXZWJwYWNrUGx1Z2luID0gcmVxdWlyZSgnaHRtbC13ZWJwYWNrLXBs
dWdpbicpCitjb25zdCBJbmxpbmVNYW5pZmVzdFdlYnBhY2tQbHVnaW4gPSByZXF1aXJlKCdpbmxp
bmUtbWFuaWZlc3Qtd2VicGFjay1wbHVnaW4nKQorY29uc3QgRXh0cmFjdFRleHRQbHVnaW4gPSBy
ZXF1aXJlKCdleHRyYWN0LXRleHQtd2VicGFjay1wbHVnaW4nKQorY29uc3Qgd2VicGFja1ZhbGlk
YXRvciA9IHJlcXVpcmUoJ3dlYnBhY2stdmFsaWRhdG9yJykKK2NvbnN0IHtnZXRJZlV0aWxzLCBy
ZW1vdmVFbXB0eX0gPSByZXF1aXJlKCd3ZWJwYWNrLWNvbmZpZy11dGlscycpCisKK21vZHVsZS5l
eHBvcnRzID0gZW52ID0+IHsKKyAgY29uc3Qge2lmUHJvZCwgaWZOb3RQcm9kfSA9IGdldElmVXRp
bHMoZW52KQorICBjb25zdCBjb25maWcgPSB3ZWJwYWNrVmFsaWRhdG9yKHsKKyAgICBjb250ZXh0
OiByZXNvbHZlKCdzcmMnKSwKKyAgICBlbnRyeTogeworICAgICAgYXBwOiAnLi9ib290c3RyYXAu
anMnLAorICAgICAgdmVuZG9yOiBbJ3RvZG9tdmMtYXBwLWNzcy9pbmRleC5jc3MnXSwKKyAgICB9
LAorICAgIG91dHB1dDogeworICAgICAgZmlsZW5hbWU6IGlmUHJvZCgnYnVuZGxlLltuYW1lXS5b
Y2h1bmtoYXNoXS5qcycsICdidW5kbGUuW25hbWVdLmpzJyksCisgICAgICBwYXRoOiByZXNvbHZl
KCdkaXN0JyksCisgICAgICBwYXRoaW5mbzogaWZOb3RQcm9kKCksCisgICAgfSwKKyAgICBkZXZ0
b29sOiBpZlByb2QoJ3NvdXJjZS1tYXAnLCAnZXZhbCcpLAorICAgIG1vZHVsZTogeworICAgICAg
bG9hZGVyczogWworICAgICAgICB7dGVzdDogL1wuanMkLywgbG9hZGVyczogWydiYWJlbCddLCBl
eGNsdWRlOiAvbm9kZV9tb2R1bGVzL30sCisgICAgICAgIHsKKyAgICAgICAgICB0ZXN0OiAvXC5j
c3MkLywKKyAgICAgICAgICBsb2FkZXI6IEV4dHJhY3RUZXh0UGx1Z2luLmV4dHJhY3QoeworICAg
ICAgICAgICAgZmFsbGJhY2tMb2FkZXI6ICdzdHlsZScsCisgICAgICAgICAgICBsb2FkZXI6ICdj
c3MnLAorICAgICAgICAgIH0pCisgICAgICAgIH0sCisgICAgICBdLAorICAgIH0sCisgICAgcGx1
Z2luczogcmVtb3ZlRW1wdHkoWworICAgICAgbmV3IFByb2dyZXNzQmFyUGx1Z2luKCksCisgICAg
ICBuZXcgRXh0cmFjdFRleHRQbHVnaW4oaWZQcm9kKCdzdHlsZXMuW25hbWVdLltjaHVua2hhc2hd
LmNzcycsICdzdHlsZXMuW25hbWVdLmNzcycpKSwKKyAgICAgIGlmUHJvZChuZXcgSW5saW5lTWFu
aWZlc3RXZWJwYWNrUGx1Z2luKCkpLAorICAgICAgaWZQcm9kKG5ldyB3ZWJwYWNrLm9wdGltaXpl
LkNvbW1vbnNDaHVua1BsdWdpbih7CisgICAgICAgIG5hbWVzOiBbJ3ZlbmRvcicsICdtYW5pZmVz
dCddLAorICAgICAgfSkpLAorICAgICAgbmV3IEh0bWxXZWJwYWNrUGx1Z2luKHsKKyAgICAgICAg
dGVtcGxhdGU6ICcuL2luZGV4Lmh0bWwnLAorICAgICAgICBpbmplY3Q6ICdoZWFkJywKKyAgICAg
IH0pLAorICAgICAgbmV3IHdlYnBhY2suRGVmaW5lUGx1Z2luKHsKKyAgICAgICAgJ3Byb2Nlc3Mu
ZW52JzogeworICAgICAgICAgIE5PREVfRU5WOiBpZlByb2QoJyJwcm9kdWN0aW9uIicsICciZGV2
ZWxvcG1lbnQiJykKKyAgICAgICAgfQorICAgICAgfSksCisgICAgXSksCisgIH0pCisgIGlmIChl
bnYuZGVidWcpIHsKKyAgICBjb25zb2xlLmxvZyhjb25maWcpCisgICAgZGVidWdnZXIgLy8gZXNs
aW50LWRpc2FibGUtbGluZQorICB9CisgIHJldHVybiBjb25maWcKK30K
</data>

          </attachment>
      

    </bug>

</bugzilla>