<?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>215414</bug_id>
          
          <creation_ts>2020-08-12 09:08:50 -0700</creation_ts>
          <short_desc>Remove unused selector performance test</short_desc>
          <delta_ts>2020-08-12 11:08:21 -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>WebKit Website</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jon Davis">jond</reporter>
          <assigned_to name="Jon Davis">jond</assigned_to>
          <cc>darin</cc>
    
    <cc>jond</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1679738</commentid>
    <comment_count>0</comment_count>
    <who name="Jon Davis">jond</who>
    <bug_when>2020-08-12 09:08:50 -0700</bug_when>
    <thetext>The Slickspeed selectors performance test is no longer used and needs to be removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1679742</commentid>
    <comment_count>1</comment_count>
      <attachid>406459</attachid>
    <who name="Jon Davis">jond</who>
    <bug_when>2020-08-12 09:13:38 -0700</bug_when>
    <thetext>Created attachment 406459
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1679772</commentid>
    <comment_count>2</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-08-12 11:07:39 -0700</bug_when>
    <thetext>Committed r265556: &lt;https://trac.webkit.org/changeset/265556&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 406459.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1679773</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-08-12 11:08:21 -0700</bug_when>
    <thetext>&lt;rdar://problem/66920372&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406459</attachid>
            <date>2020-08-12 09:13:38 -0700</date>
            <delta_ts>2020-08-12 11:07:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215414-20200812091336.patch</filename>
            <type>text/plain</type>
            <size>303114</size>
            <attacher name="Jon Davis">jond</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY1NTM5CmRpZmYgLS1naXQgYS9XZWJzaXRlcy93ZWJraXQu
b3JnL0NoYW5nZUxvZyBiL1dlYnNpdGVzL3dlYmtpdC5vcmcvQ2hhbmdlTG9nCmluZGV4IDhjM2Zi
YjBlMzJmYzhmZmE1NDg3YmNlNGYzYWVhN2QzMGIxYWEwMjguLmQ0MzFjNjIyNDNkNTA1NDcyNmJj
YzdmNDE3MWUxYTU0MjdiODEwMjMgMTAwNjQ0Ci0tLSBhL1dlYnNpdGVzL3dlYmtpdC5vcmcvQ2hh
bmdlTG9nCisrKyBiL1dlYnNpdGVzL3dlYmtpdC5vcmcvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjcg
QEAKKzIwMjAtMDgtMTIgIEpvbiBEYXZpcyAgPGpvbmRAYXBwbGUuY29tPgorCisgICAgICAgIFJl
bW92ZSB1bnVzZWQgc2VsZWN0b3IgcGVyZm9ybWFuY2UgdGVzdAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1NDE0CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwZXJmL3NsaWNrc3BlZWQvY29uZmlnLmlu
aTogUmVtb3ZlZC4KKyAgICAgICAgKiBwZXJmL3NsaWNrc3BlZWQvZm9vdGVyLmh0bWw6IFJlbW92
ZWQuCisgICAgICAgICogcGVyZi9zbGlja3NwZWVkL2ZyYW1ld29ya3MvRG9tUXVlcnkuanM6IFJl
bW92ZWQuCisgICAgICAgICogcGVyZi9zbGlja3NwZWVkL2ZyYW1ld29ya3MvZHVtbXkuanM6IFJl
bW92ZWQuCisgICAgICAgICogcGVyZi9zbGlja3NwZWVkL2ZyYW1ld29ya3MvanF1ZXJ5LTEuMi4z
LmpzOiBSZW1vdmVkLgorICAgICAgICAqIHBlcmYvc2xpY2tzcGVlZC9mcmFtZXdvcmtzL3Byb3Rv
dHlwZS5qczogUmVtb3ZlZC4KKyAgICAgICAgKiBwZXJmL3NsaWNrc3BlZWQvaGVhZGVyLmh0bWw6
IFJlbW92ZWQuCisgICAgICAgICogcGVyZi9zbGlja3NwZWVkL2luZGV4LnBocDogUmVtb3ZlZC4K
KyAgICAgICAgKiBwZXJmL3NsaWNrc3BlZWQvaW5zdHJ1Y3Rpb25zLnR4dDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBwZXJmL3NsaWNrc3BlZWQvbG9nby5wbmc6IFJlbW92ZWQuCisgICAgICAgICogcGVy
Zi9zbGlja3NwZWVkL3NlbGVjdG9ycy5saXN0OiBSZW1vdmVkLgorICAgICAgICAqIHBlcmYvc2xp
Y2tzcGVlZC9zdHlsZS5jc3M6IFJlbW92ZWQuCisgICAgICAgICogcGVyZi9zbGlja3NwZWVkL3N5
c3RlbS9pbmRleC5waHA6IFJlbW92ZWQuCisgICAgICAgICogcGVyZi9zbGlja3NwZWVkL3N5c3Rl
bS9zbGlja3NwZWVkLmpzOiBSZW1vdmVkLgorICAgICAgICAqIHBlcmYvc2xpY2tzcGVlZC9zeXN0
ZW0vdGVtcGxhdGUucGhwOiBSZW1vdmVkLgorICAgICAgICAqIHBlcmYvc2xpY2tzcGVlZC90ZW1w
bGF0ZS5odG1sOiBSZW1vdmVkLgorCiAyMDIwLTA4LTA2ICBKb24gRGF2aXMgIDxqb25kQGFwcGxl
LmNvbT4KIAogICAgICAgICBGaXhlZCB3aWRnZXQgbWV0aG9kIGFyZ3VtZW50IGNvbXBhdGliaWxp
dHkgd2l0aCBXb3JkUHJlc3MKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3dlYmtpdC5vcmcvcGVyZi9z
bGlja3NwZWVkL2NvbmZpZy5pbmkgYi9XZWJzaXRlcy93ZWJraXQub3JnL3BlcmYvc2xpY2tzcGVl
ZC9jb25maWcuaW5pCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYWM2ZjNhY2EyZjRm
ZDAyNzRiNTM4NDRhY2NhMGQ0OTc3NGUyN2FkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1dlYnNpdGVzL3dlYmtpdC5vcmcvcGVyZi9zbGlja3NwZWVkL2Nv
bmZpZy5pbmkKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0gW3Byb3RvdHlwZSAxLjYu
MC4yXQotIAotIAlmaWxlID0gInByb3RvdHlwZS5qcyIKLSAJbW9kaWZpZXIgPSAiIgotIAlmdW5j
dGlvbiA9ICIkJCIKLSAJCi0gW2pRdWVyeSAxLjIuM10KLSAKLSAJZmlsZSA9ICJqcXVlcnktMS4y
LjMuanMiCi0gCW1vZGlmaWVyID0gIkAiCi0gCWZ1bmN0aW9uID0gIiQiCi0gCQotOyBbTW9vVG9v
bHMgMS4yZGV2XQotOyAKLTsgCWZpbGUgPSAibW9vdG9vbHMuanMiCi07IAltb2RpZmllciA9ICIi
Ci07IAlmdW5jdGlvbiA9ICIkJCIKLTsgCQotIFtleHQgMi4wXQotIAlmaWxlID0gIkRvbVF1ZXJ5
LmpzIgotIAltb2RpZmllciA9ICIiCi0gCWZ1bmN0aW9uID0gIkV4dC5xdWVyeSIKLSAJCi07IFtj
c3NRdWVyeSAyLjAyXQotOyAJZmlsZSA9ICJjc3NRdWVyeS1wLmpzIgotOyAJbW9kaWZpZXIgPSAi
IgotOyAJZnVuY3Rpb24gPSAiY3NzUXVlcnkiCi07IAkKLTsgW2Rvam8gcXVlcnldCi07IAlmaWxl
ID0gImRvam8tcXVlcnkuanMiCi07IAltb2RpZmllciA9ICIiCi07IAlmdW5jdGlvbiA9ICJkb2pv
LnF1ZXJ5IgotOyAgIAotOyBbTW9jaGlLaXQgMS40ZGV2XQotOyAJZmlsZSA9ICJNb2NoaUtpdC5q
cyIKLTsgCW1vZGlmaWVyID0gIiIKLTsgCWZ1bmN0aW9uID0gIiQkIgotCi0JW05hdGl2ZV0KLQlm
aWxlID0gImR1bW15LmpzIgotCW1vZGlmaWVyID0gIiIKLQlmdW5jdGlvbiA9ICJkb2N1bWVudC5x
dWVyeVNlbGVjdG9yQWxsIgotCi07IGp1c3QgYWRkIGEgZnJhbWV3b3JrIGhlcmUgZm9sbG93aW5n
IHRoZSBjb252ZW50aW9ucyB0byBhZGQgYW5vdGhlciBmcmFtZXdvcmsuCi07IHRoZSBtb2RpZmll
ciBwYXJhbWV0ZXIgaXMgZm9yIGF0dHJpYnV0ZSBzZWxlY3RvcnMsIGFzIGpxdWVyeSB1c2VzIHRo
ZSBAIHN5bnRheC4KLTsgdGhlIGZ1bmN0aW9uIHBhcmFtZXRlciBpcyB0byBjaG9vc2UgdGhlIHJp
Z2h0IGNzcyBzZWxlY3RvciBmdW5jdGlvbiBuYW1lCi07IHRoZSBpbmNsdWRlIHBhcmFtZXRlciBp
cyB0byBpbmNsdWRlIHRoZSByaWdodCBqYXZhc2NyaXB0IGZpbGUKLQotOyBbbXlmcmFtZXdvcmtd
Ci07IGZpbGUgPSAibXlGcmFtZXdvcmsuanMiCi07IG1vZGlmaWVyID0gIiUiCi07IGZ1bmN0aW9u
ID0gImdldEVsZW1lbnRzIgpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvd2Via2l0Lm9yZy9wZXJmL3Ns
aWNrc3BlZWQvZm9vdGVyLmh0bWwgYi9XZWJzaXRlcy93ZWJraXQub3JnL3BlcmYvc2xpY2tzcGVl
ZC9mb290ZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmUwZjdjMjY1OTA5
NzIxYWFiODgyZDY3NDM4MzBhZjBhYjlhZjI5My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9XZWJzaXRlcy93ZWJraXQub3JnL3BlcmYvc2xpY2tzcGVlZC9m
b290ZXIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPGRpdiBpZD0iZm9vdGVy
Ij4KLQk8cCBjbGFzcz0iZm9vdGVyIj5jb3B5cmlnaHQgJmNvcHk7IDIwMDcgPGEgaHJlZj0iaHR0
cDovL21vb3Rvb2xzLm5ldCI+aHR0cDovL21vb3Rvb2xzLm5ldDwvYT4gfCBNSVQgTGljZW5zZSB8
IDxhIGhyZWY9Imh0dHA6Ly9zbGlja3NwZWVkLmdvb2dsZWNvZGUuY29tL3N2bi90cnVuayI+ZG93
bmxvYWQgZnJvbSBnb29nbGVjb2RlPC9hPjwvcD4KLTwvZGl2PgpcIE5vIG5ld2xpbmUgYXQgZW5k
IG9mIGZpbGUKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3dlYmtpdC5vcmcvcGVyZi9zbGlja3NwZWVk
L2ZyYW1ld29ya3MvRG9tUXVlcnkuanMgYi9XZWJzaXRlcy93ZWJraXQub3JnL3BlcmYvc2xpY2tz
cGVlZC9mcmFtZXdvcmtzL0RvbVF1ZXJ5LmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA1NDljOGFmZjA1NWMwNjI0OGMxN2FmMGQ5OTZlNzZhYWY3ZDY3MGE3Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1dlYnNpdGVzL3dlYmtpdC5vcmcvcGVy
Zi9zbGlja3NwZWVkL2ZyYW1ld29ya3MvRG9tUXVlcnkuanMKKysrIC9kZXYvbnVsbApAQCAtMSw4
MTUgKzAsMCBAQAotLyoNCi0gKiBFeHQgSlMgTGlicmFyeSAyLjANCi0gKiBDb3B5cmlnaHQoYykg
MjAwNi0yMDA3LCBFeHQgSlMsIExMQy4NCi0gKiBsaWNlbnNpbmdAZXh0anMuY29tDQotICogDQot
ICogaHR0cDovL2V4dGpzLmNvbS9saWNlbnNlDQotICovDQotDQotLyoNCi0gKiBUaGlzIGlzIGNv
ZGUgaXMgYWxzbyBkaXN0cmlidXRlZCB1bmRlciBNSVQgbGljZW5zZSBmb3IgdXNlDQotICogd2l0
aCBqUXVlcnkgYW5kIHByb3RvdHlwZSBKYXZhU2NyaXB0IGxpYnJhcmllcy4NCi0gKi8NCi0vKioN
Ci0gKiBAY2xhc3MgRXh0LkRvbVF1ZXJ5DQotUHJvdmlkZXMgaGlnaCBwZXJmb3JtYW5jZSBzZWxl
Y3Rvci94cGF0aCBwcm9jZXNzaW5nIGJ5IGNvbXBpbGluZyBxdWVyaWVzIGludG8gcmV1c2FibGUg
ZnVuY3Rpb25zLiBOZXcgcHNldWRvIGNsYXNzZXMgYW5kIG1hdGNoZXJzIGNhbiBiZSBwbHVnZ2Vk
LiBJdCB3b3JrcyBvbiBIVE1MIGFuZCBYTUwgZG9jdW1lbnRzIChpZiBhIGNvbnRlbnQgbm9kZSBp
cyBwYXNzZWQgaW4pLg0KLTxwPg0KLURvbVF1ZXJ5IHN1cHBvcnRzIG1vc3Qgb2YgdGhlIDxhIGhy
ZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDUvV0QtY3NzMy1zZWxlY3RvcnMtMjAwNTEyMTUv
I3NlbGVjdG9ycyI+Q1NTMyBzZWxlY3RvcnMgc3BlYzwvYT4sIGFsb25nIHdpdGggc29tZSBjdXN0
b20gc2VsZWN0b3JzIGFuZCBiYXNpYyBYUGF0aC48L3A+DQotDQotPHA+DQotQWxsIHNlbGVjdG9y
cywgYXR0cmlidXRlIGZpbHRlcnMgYW5kIHBzZXVkb3MgYmVsb3cgY2FuIGJlIGNvbWJpbmVkIGlu
ZmluaXRlbHkgaW4gYW55IG9yZGVyLiBGb3IgZXhhbXBsZSAiZGl2LmZvbzpudGgtY2hpbGQob2Rk
KVtAZm9vPWJhcl0uYmFyOmZpcnN0IiB3b3VsZCBiZSBhIHBlcmZlY3RseSB2YWxpZCBzZWxlY3Rv
ci4gTm9kZSBmaWx0ZXJzIGFyZSBwcm9jZXNzZWQgaW4gdGhlIG9yZGVyIGluIHdoaWNoIHRoZXkg
YXBwZWFyLCB3aGljaCBhbGxvd3MgeW91IHRvIG9wdGltaXplIHlvdXIgcXVlcmllcyBmb3IgeW91
ciBkb2N1bWVudCBzdHJ1Y3R1cmUuDQotPC9wPg0KLTxoND5FbGVtZW50IFNlbGVjdG9yczo8L2g0
Pg0KLTx1bCBjbGFzcz0ibGlzdCI+DQotICAgIDxsaT4gPGI+KjwvYj4gYW55IGVsZW1lbnQ8L2xp
Pg0KLSAgICA8bGk+IDxiPkU8L2I+IGFuIGVsZW1lbnQgd2l0aCB0aGUgdGFnIEU8L2xpPg0KLSAg
ICA8bGk+IDxiPkUgRjwvYj4gQWxsIGRlc2NlbmRlbnQgZWxlbWVudHMgb2YgRSB0aGF0IGhhdmUg
dGhlIHRhZyBGPC9saT4NCi0gICAgPGxpPiA8Yj5FID4gRjwvYj4gb3IgPGI+RS9GPC9iPiBhbGwg
ZGlyZWN0IGNoaWxkcmVuIGVsZW1lbnRzIG9mIEUgdGhhdCBoYXZlIHRoZSB0YWcgRjwvbGk+DQot
ICAgIDxsaT4gPGI+RSArIEY8L2I+IGFsbCBlbGVtZW50cyB3aXRoIHRoZSB0YWcgRiB0aGF0IGFy
ZSBpbW1lZGlhdGVseSBwcmVjZWRlZCBieSBhbiBlbGVtZW50IHdpdGggdGhlIHRhZyBFPC9saT4N
Ci0gICAgPGxpPiA8Yj5FIH4gRjwvYj4gYWxsIGVsZW1lbnRzIHdpdGggdGhlIHRhZyBGIHRoYXQg
YXJlIHByZWNlZGVkIGJ5IGEgc2libGluZyBlbGVtZW50IHdpdGggdGhlIHRhZyBFPC9saT4NCi08
L3VsPg0KLTxoND5BdHRyaWJ1dGUgU2VsZWN0b3JzOjwvaDQ+DQotPHA+VGhlIHVzZSBvZiBAIGFu
ZCBxdW90ZXMgYXJlIG9wdGlvbmFsLiBGb3IgZXhhbXBsZSwgZGl2W0Bmb289J2JhciddIGlzIGFs
c28gYSB2YWxpZCBhdHRyaWJ1dGUgc2VsZWN0b3IuPC9wPg0KLTx1bCBjbGFzcz0ibGlzdCI+DQot
ICAgIDxsaT4gPGI+RVtmb29dPC9iPiBoYXMgYW4gYXR0cmlidXRlICJmb28iPC9saT4NCi0gICAg
PGxpPiA8Yj5FW2Zvbz1iYXJdPC9iPiBoYXMgYW4gYXR0cmlidXRlICJmb28iIHRoYXQgZXF1YWxz
ICJiYXIiPC9saT4NCi0gICAgPGxpPiA8Yj5FW2Zvb149YmFyXTwvYj4gaGFzIGFuIGF0dHJpYnV0
ZSAiZm9vIiB0aGF0IHN0YXJ0cyB3aXRoICJiYXIiPC9saT4NCi0gICAgPGxpPiA8Yj5FW2ZvbyQ9
YmFyXTwvYj4gaGFzIGFuIGF0dHJpYnV0ZSAiZm9vIiB0aGF0IGVuZHMgd2l0aCAiYmFyIjwvbGk+
DQotICAgIDxsaT4gPGI+RVtmb28qPWJhcl08L2I+IGhhcyBhbiBhdHRyaWJ1dGUgImZvbyIgdGhh
dCBjb250YWlucyB0aGUgc3Vic3RyaW5nICJiYXIiPC9saT4NCi0gICAgPGxpPiA8Yj5FW2ZvbyU9
Ml08L2I+IGhhcyBhbiBhdHRyaWJ1dGUgImZvbyIgdGhhdCBpcyBldmVubHkgZGl2aXNpYmxlIGJ5
IDI8L2xpPg0KLSAgICA8bGk+IDxiPkVbZm9vIT1iYXJdPC9iPiBoYXMgYW4gYXR0cmlidXRlICJm
b28iIHRoYXQgZG9lcyBub3QgZXF1YWwgImJhciI8L2xpPg0KLTwvdWw+DQotPGg0PlBzZXVkbyBD
bGFzc2VzOjwvaDQ+DQotPHVsIGNsYXNzPSJsaXN0Ij4NCi0gICAgPGxpPiA8Yj5FOmZpcnN0LWNo
aWxkPC9iPiBFIGlzIHRoZSBmaXJzdCBjaGlsZCBvZiBpdHMgcGFyZW50PC9saT4NCi0gICAgPGxp
PiA8Yj5FOmxhc3QtY2hpbGQ8L2I+IEUgaXMgdGhlIGxhc3QgY2hpbGQgb2YgaXRzIHBhcmVudDwv
bGk+DQotICAgIDxsaT4gPGI+RTpudGgtY2hpbGQoPGk+bjwvaT4pPC9iPiBFIGlzIHRoZSA8aT5u
PC9pPnRoIGNoaWxkIG9mIGl0cyBwYXJlbnQgKDEgYmFzZWQgYXMgcGVyIHRoZSBzcGVjKTwvbGk+
DQotICAgIDxsaT4gPGI+RTpudGgtY2hpbGQob2RkKTwvYj4gRSBpcyBhbiBvZGQgY2hpbGQgb2Yg
aXRzIHBhcmVudDwvbGk+DQotICAgIDxsaT4gPGI+RTpudGgtY2hpbGQoZXZlbik8L2I+IEUgaXMg
YW4gZXZlbiBjaGlsZCBvZiBpdHMgcGFyZW50PC9saT4NCi0gICAgPGxpPiA8Yj5FOm9ubHktY2hp
bGQ8L2I+IEUgaXMgdGhlIG9ubHkgY2hpbGQgb2YgaXRzIHBhcmVudDwvbGk+DQotICAgIDxsaT4g
PGI+RTpjaGVja2VkPC9iPiBFIGlzIGFuIGVsZW1lbnQgdGhhdCBpcyBoYXMgYSBjaGVja2VkIGF0
dHJpYnV0ZSB0aGF0IGlzIHRydWUgKGUuZy4gYSByYWRpbyBvciBjaGVja2JveCkgPC9saT4NCi0g
ICAgPGxpPiA8Yj5FOmZpcnN0PC9iPiB0aGUgZmlyc3QgRSBpbiB0aGUgcmVzdWx0c2V0PC9saT4N
Ci0gICAgPGxpPiA8Yj5FOmxhc3Q8L2I+IHRoZSBsYXN0IEUgaW4gdGhlIHJlc3VsdHNldDwvbGk+
DQotICAgIDxsaT4gPGI+RTpudGgoPGk+bjwvaT4pPC9iPiB0aGUgPGk+bjwvaT50aCBFIGluIHRo
ZSByZXN1bHRzZXQgKDEgYmFzZWQpPC9saT4NCi0gICAgPGxpPiA8Yj5FOm9kZDwvYj4gc2hvcnRj
dXQgZm9yIDpudGgtY2hpbGQob2RkKTwvbGk+DQotICAgIDxsaT4gPGI+RTpldmVuPC9iPiBzaG9y
dGN1dCBmb3IgOm50aC1jaGlsZChldmVuKTwvbGk+DQotICAgIDxsaT4gPGI+RTpjb250YWlucyhm
b28pPC9iPiBFJ3MgaW5uZXJIVE1MIGNvbnRhaW5zIHRoZSBzdWJzdHJpbmcgImZvbyI8L2xpPg0K
LSAgICA8bGk+IDxiPkU6bm9kZVZhbHVlKGZvbyk8L2I+IEUgY29udGFpbnMgYSB0ZXh0Tm9kZSB3
aXRoIGEgbm9kZVZhbHVlIHRoYXQgZXF1YWxzICJmb28iPC9saT4NCi0gICAgPGxpPiA8Yj5FOm5v
dChTKTwvYj4gYW4gRSBlbGVtZW50IHRoYXQgZG9lcyBub3QgbWF0Y2ggc2ltcGxlIHNlbGVjdG9y
IFM8L2xpPg0KLSAgICA8bGk+IDxiPkU6aGFzKFMpPC9iPiBhbiBFIGVsZW1lbnQgdGhhdCBoYXMg
YSBkZXNjZW5kZW50IHRoYXQgbWF0Y2hlcyBzaW1wbGUgc2VsZWN0b3IgUzwvbGk+DQotICAgIDxs
aT4gPGI+RTpuZXh0KFMpPC9iPiBhbiBFIGVsZW1lbnQgd2hvc2UgbmV4dCBzaWJsaW5nIG1hdGNo
ZXMgc2ltcGxlIHNlbGVjdG9yIFM8L2xpPg0KLSAgICA8bGk+IDxiPkU6cHJldihTKTwvYj4gYW4g
RSBlbGVtZW50IHdob3NlIHByZXZpb3VzIHNpYmxpbmcgbWF0Y2hlcyBzaW1wbGUgc2VsZWN0b3Ig
UzwvbGk+DQotPC91bD4NCi08aDQ+Q1NTIFZhbHVlIFNlbGVjdG9yczo8L2g0Pg0KLTx1bCBjbGFz
cz0ibGlzdCI+DQotICAgIDxsaT4gPGI+RXtkaXNwbGF5PW5vbmV9PC9iPiBjc3MgdmFsdWUgImRp
c3BsYXkiIHRoYXQgZXF1YWxzICJub25lIjwvbGk+DQotICAgIDxsaT4gPGI+RXtkaXNwbGF5Xj1u
b25lfTwvYj4gY3NzIHZhbHVlICJkaXNwbGF5IiB0aGF0IHN0YXJ0cyB3aXRoICJub25lIjwvbGk+
DQotICAgIDxsaT4gPGI+RXtkaXNwbGF5JD1ub25lfTwvYj4gY3NzIHZhbHVlICJkaXNwbGF5IiB0
aGF0IGVuZHMgd2l0aCAibm9uZSI8L2xpPg0KLSAgICA8bGk+IDxiPkV7ZGlzcGxheSo9bm9uZX08
L2I+IGNzcyB2YWx1ZSAiZGlzcGxheSIgdGhhdCBjb250YWlucyB0aGUgc3Vic3RyaW5nICJub25l
IjwvbGk+DQotICAgIDxsaT4gPGI+RXtkaXNwbGF5JT0yfTwvYj4gY3NzIHZhbHVlICJkaXNwbGF5
IiB0aGF0IGlzIGV2ZW5seSBkaXZpc2libGUgYnkgMjwvbGk+DQotICAgIDxsaT4gPGI+RXtkaXNw
bGF5IT1ub25lfTwvYj4gY3NzIHZhbHVlICJkaXNwbGF5IiB0aGF0IGRvZXMgbm90IGVxdWFsICJu
b25lIjwvbGk+DQotPC91bD4NCi0gKiBAc2luZ2xldG9uDQotICovDQotRXh0ID0ge307DQotIA0K
LUV4dC5Eb21RdWVyeSA9IGZ1bmN0aW9uKCl7DQotICAgIHZhciBjYWNoZSA9IHt9LCBzaW1wbGVD
YWNoZSA9IHt9LCB2YWx1ZUNhY2hlID0ge307DQotICAgIHZhciBub25TcGFjZSA9IC9cUy87DQot
ICAgIHZhciB0cmltUmUgPSAvXlxzK3xccyskL2c7DQotICAgIHZhciB0cGxSZSA9IC9ceyhcZCsp
XH0vZzsNCi0gICAgdmFyIG1vZGVSZSA9IC9eKFxzP1tcLz4rfl1ccz98XHN8JCkvOw0KLSAgICB2
YXIgdGFnVG9rZW5SZSA9IC9eKCMpPyhbXHctXCpdKykvOw0KLSAgICB2YXIgbnRoUmUgPSAvKFxk
KiluXCs/KFxkKikvLCBudGhSZTIgPSAvXEQvOw0KLQ0KLSAgICBmdW5jdGlvbiBjaGlsZChwLCBp
bmRleCl7DQotICAgICAgICB2YXIgaSA9IDA7DQotICAgICAgICB2YXIgbiA9IHAuZmlyc3RDaGls
ZDsNCi0gICAgICAgIHdoaWxlKG4pew0KLSAgICAgICAgICAgIGlmKG4ubm9kZVR5cGUgPT0gMSl7
DQotICAgICAgICAgICAgICAgaWYoKytpID09IGluZGV4KXsNCi0gICAgICAgICAgICAgICAgICAg
cmV0dXJuIG47DQotICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAg
ICBuID0gbi5uZXh0U2libGluZzsNCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybiBudWxsOw0K
LSAgICB9Ow0KLQ0KLSAgICBmdW5jdGlvbiBuZXh0KG4pew0KLSAgICAgICAgd2hpbGUoKG4gPSBu
Lm5leHRTaWJsaW5nKSAmJiBuLm5vZGVUeXBlICE9IDEpOw0KLSAgICAgICAgcmV0dXJuIG47DQot
ICAgIH07DQotDQotICAgIGZ1bmN0aW9uIHByZXYobil7DQotICAgICAgICB3aGlsZSgobiA9IG4u
cHJldmlvdXNTaWJsaW5nKSAmJiBuLm5vZGVUeXBlICE9IDEpOw0KLSAgICAgICAgcmV0dXJuIG47
DQotICAgIH07DQotDQotICAgIGZ1bmN0aW9uIGNoaWxkcmVuKGQpew0KLSAgICAgICAgdmFyIG4g
PSBkLmZpcnN0Q2hpbGQsIG5pID0gLTE7DQotIAkgICAgd2hpbGUobil7DQotIAkgICAgICAgIHZh
ciBueCA9IG4ubmV4dFNpYmxpbmc7DQotIAkgICAgICAgIGlmKG4ubm9kZVR5cGUgPT0gMyAmJiAh
bm9uU3BhY2UudGVzdChuLm5vZGVWYWx1ZSkpew0KLSAJICAgICAgICAgICAgZC5yZW1vdmVDaGls
ZChuKTsNCi0gCSAgICAgICAgfWVsc2V7DQotIAkgICAgICAgICAgICBuLm5vZGVJbmRleCA9ICsr
bmk7DQotIAkgICAgICAgIH0NCi0gCSAgICAgICAgbiA9IG54Ow0KLSAJICAgIH0NCi0gCSAgICBy
ZXR1cm4gdGhpczsNCi0gCX07DQotDQotICAgIGZ1bmN0aW9uIGJ5Q2xhc3NOYW1lKGMsIGEsIHYp
ew0KLSAgICAgICAgaWYoIXYpew0KLSAgICAgICAgICAgIHJldHVybiBjOw0KLSAgICAgICAgfQ0K
LSAgICAgICAgdmFyIHIgPSBbXSwgcmkgPSAtMSwgY247DQotICAgICAgICBmb3IodmFyIGkgPSAw
LCBjaTsgY2kgPSBjW2ldOyBpKyspew0KLSAgICAgICAgICAgIGlmKCgnICcrY2kuY2xhc3NOYW1l
KycgJykuaW5kZXhPZih2KSAhPSAtMSl7DQotICAgICAgICAgICAgICAgIHJbKytyaV0gPSBjaTsN
Ci0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4gcjsNCi0gICAgfTsN
Ci0NCi0gICAgZnVuY3Rpb24gYXR0clZhbHVlKG4sIGF0dHIpew0KLSAgICAgICAgaWYoIW4udGFn
TmFtZSAmJiB0eXBlb2Ygbi5sZW5ndGggIT0gInVuZGVmaW5lZCIpew0KLSAgICAgICAgICAgIG4g
PSBuWzBdOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYoIW4pew0KLSAgICAgICAgICAgIHJldHVy
biBudWxsOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYoYXR0ciA9PSAiZm9yIil7DQotICAgICAg
ICAgICAgcmV0dXJuIG4uaHRtbEZvcjsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmKGF0dHIgPT0g
ImNsYXNzIiB8fCBhdHRyID09ICJjbGFzc05hbWUiKXsNCi0gICAgICAgICAgICByZXR1cm4gbi5j
bGFzc05hbWU7DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4gbi5nZXRBdHRyaWJ1dGUoYXR0
cikgfHwgblthdHRyXTsNCi0NCi0gICAgfTsNCi0NCi0gICAgZnVuY3Rpb24gZ2V0Tm9kZXMobnMs
IG1vZGUsIHRhZ05hbWUpew0KLSAgICAgICAgdmFyIHJlc3VsdCA9IFtdLCByaSA9IC0xLCBjczsN
Ci0gICAgICAgIGlmKCFucyl7DQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsNCi0gICAgICAg
IH0NCi0gICAgICAgIHRhZ05hbWUgPSB0YWdOYW1lIHx8ICIqIjsNCi0gICAgICAgIGlmKHR5cGVv
ZiBucy5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPSAidW5kZWZpbmVkIil7DQotICAgICAgICAgICAg
bnMgPSBbbnNdOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYoIW1vZGUpew0KLSAgICAgICAgICAg
IGZvcih2YXIgaSA9IDAsIG5pOyBuaSA9IG5zW2ldOyBpKyspew0KLSAgICAgICAgICAgICAgICBj
cyA9IG5pLmdldEVsZW1lbnRzQnlUYWdOYW1lKHRhZ05hbWUpOw0KLSAgICAgICAgICAgICAgICBm
b3IodmFyIGogPSAwLCBjaTsgY2kgPSBjc1tqXTsgaisrKXsNCi0gICAgICAgICAgICAgICAgICAg
IHJlc3VsdFsrK3JpXSA9IGNpOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0K
LSAgICAgICAgfWVsc2UgaWYobW9kZSA9PSAiLyIgfHwgbW9kZSA9PSAiPiIpew0KLSAgICAgICAg
ICAgIHZhciB1dGFnID0gdGFnTmFtZS50b1VwcGVyQ2FzZSgpOw0KLSAgICAgICAgICAgIGZvcih2
YXIgaSA9IDAsIG5pLCBjbjsgbmkgPSBuc1tpXTsgaSsrKXsNCi0gICAgICAgICAgICAgICAgY24g
PSBuaS5jaGlsZHJlbiB8fCBuaS5jaGlsZE5vZGVzOw0KLSAgICAgICAgICAgICAgICBmb3IodmFy
IGogPSAwLCBjajsgY2ogPSBjbltqXTsgaisrKXsNCi0gICAgICAgICAgICAgICAgICAgIGlmKGNq
Lm5vZGVOYW1lID09IHV0YWcgfHwgY2oubm9kZU5hbWUgPT0gdGFnTmFtZSAgfHwgdGFnTmFtZSA9
PSAnKicpew0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFsrK3JpXSA9IGNqOw0KLSAg
ICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0K
LSAgICAgICAgfWVsc2UgaWYobW9kZSA9PSAiKyIpew0KLSAgICAgICAgICAgIHZhciB1dGFnID0g
dGFnTmFtZS50b1VwcGVyQ2FzZSgpOw0KLSAgICAgICAgICAgIGZvcih2YXIgaSA9IDAsIG47IG4g
PSBuc1tpXTsgaSsrKXsNCi0gICAgICAgICAgICAgICAgd2hpbGUoKG4gPSBuLm5leHRTaWJsaW5n
KSAmJiBuLm5vZGVUeXBlICE9IDEpOw0KLSAgICAgICAgICAgICAgICBpZihuICYmIChuLm5vZGVO
YW1lID09IHV0YWcgfHwgbi5ub2RlTmFtZSA9PSB0YWdOYW1lIHx8IHRhZ05hbWUgPT0gJyonKSl7
DQotICAgICAgICAgICAgICAgICAgICByZXN1bHRbKytyaV0gPSBuOw0KLSAgICAgICAgICAgICAg
ICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfWVsc2UgaWYobW9kZSA9PSAifiIpew0KLSAg
ICAgICAgICAgIGZvcih2YXIgaSA9IDAsIG47IG4gPSBuc1tpXTsgaSsrKXsNCi0gICAgICAgICAg
ICAgICAgd2hpbGUoKG4gPSBuLm5leHRTaWJsaW5nKSAmJiAobi5ub2RlVHlwZSAhPSAxIHx8ICh0
YWdOYW1lID09ICcqJyB8fCBuLnRhZ05hbWUudG9Mb3dlckNhc2UoKSE9dGFnTmFtZSkpKTsNCi0g
ICAgICAgICAgICAgICAgaWYobil7DQotICAgICAgICAgICAgICAgICAgICByZXN1bHRbKytyaV0g
PSBuOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAg
ICAgICAgcmV0dXJuIHJlc3VsdDsNCi0gICAgfTsNCi0NCi0gICAgZnVuY3Rpb24gY29uY2F0KGEs
IGIpew0KLSAgICAgICAgaWYoYi5zbGljZSl7DQotICAgICAgICAgICAgcmV0dXJuIGEuY29uY2F0
KGIpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgZm9yKHZhciBpID0gMCwgbCA9IGIubGVuZ3RoOyBp
IDwgbDsgaSsrKXsNCi0gICAgICAgICAgICBhW2EubGVuZ3RoXSA9IGJbaV07DQotICAgICAgICB9
DQotICAgICAgICByZXR1cm4gYTsNCi0gICAgfQ0KLQ0KLSAgICBmdW5jdGlvbiBieVRhZyhjcywg
dGFnTmFtZSl7DQotICAgICAgICBpZihjcy50YWdOYW1lIHx8IGNzID09IGRvY3VtZW50KXsNCi0g
ICAgICAgICAgICBjcyA9IFtjc107DQotICAgICAgICB9DQotICAgICAgICBpZighdGFnTmFtZSl7
DQotICAgICAgICAgICAgcmV0dXJuIGNzOw0KLSAgICAgICAgfQ0KLSAgICAgICAgdmFyIHIgPSBb
XSwgcmkgPSAtMTsNCi0gICAgICAgIHRhZ05hbWUgPSB0YWdOYW1lLnRvTG93ZXJDYXNlKCk7DQot
ICAgICAgICBmb3IodmFyIGkgPSAwLCBjaTsgY2kgPSBjc1tpXTsgaSsrKXsNCi0gICAgICAgICAg
ICBpZihjaS5ub2RlVHlwZSA9PSAxICYmIGNpLnRhZ05hbWUudG9Mb3dlckNhc2UoKT09dGFnTmFt
ZSl7DQotICAgICAgICAgICAgICAgIHJbKytyaV0gPSBjaTsNCi0gICAgICAgICAgICB9DQotICAg
ICAgICB9DQotICAgICAgICByZXR1cm4gcjsNCi0gICAgfTsNCi0NCi0gICAgZnVuY3Rpb24gYnlJ
ZChjcywgYXR0ciwgaWQpew0KLSAgICAgICAgaWYoY3MudGFnTmFtZSB8fCBjcyA9PSBkb2N1bWVu
dCl7DQotICAgICAgICAgICAgY3MgPSBbY3NdOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYoIWlk
KXsNCi0gICAgICAgICAgICByZXR1cm4gY3M7DQotICAgICAgICB9DQotICAgICAgICB2YXIgciA9
IFtdLCByaSA9IC0xOw0KLSAgICAgICAgZm9yKHZhciBpID0gMCxjaTsgY2kgPSBjc1tpXTsgaSsr
KXsNCi0gICAgICAgICAgICBpZihjaSAmJiBjaS5pZCA9PSBpZCl7DQotICAgICAgICAgICAgICAg
IHJbKytyaV0gPSBjaTsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIHI7DQotICAgICAgICAgICAg
fQ0KLSAgICAgICAgfQ0KLSAgICAgICAgcmV0dXJuIHI7DQotICAgIH07DQotDQotICAgIGZ1bmN0
aW9uIGJ5QXR0cmlidXRlKGNzLCBhdHRyLCB2YWx1ZSwgb3AsIGN1c3RvbSl7DQotICAgICAgICB2
YXIgciA9IFtdLCByaSA9IC0xLCBzdCA9IGN1c3RvbT09InsiOw0KLSAgICAgICAgdmFyIGYgPSBF
eHQuRG9tUXVlcnkub3BlcmF0b3JzW29wXTsNCi0gICAgICAgIGZvcih2YXIgaSA9IDAsIGNpOyBj
aSA9IGNzW2ldOyBpKyspew0KLSAgICAgICAgICAgIHZhciBhOw0KLSAgICAgICAgICAgIGlmKHN0
KXsNCi0gICAgICAgICAgICAgICAgYSA9IEV4dC5Eb21RdWVyeS5nZXRTdHlsZShjaSwgYXR0cik7
DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGVsc2UgaWYoYXR0ciA9PSAiY2xhc3MiIHx8
IGF0dHIgPT0gImNsYXNzTmFtZSIpew0KLSAgICAgICAgICAgICAgICBhID0gY2kuY2xhc3NOYW1l
Ow0KLSAgICAgICAgICAgIH1lbHNlIGlmKGF0dHIgPT0gImZvciIpew0KLSAgICAgICAgICAgICAg
ICBhID0gY2kuaHRtbEZvcjsNCi0gICAgICAgICAgICB9ZWxzZSBpZihhdHRyID09ICJocmVmIil7
DQotICAgICAgICAgICAgICAgIGEgPSBjaS5nZXRBdHRyaWJ1dGUoImhyZWYiLCAyKTsNCi0gICAg
ICAgICAgICB9ZWxzZXsNCi0gICAgICAgICAgICAgICAgYSA9IGNpLmdldEF0dHJpYnV0ZShhdHRy
KTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYoKGYgJiYgZihhLCB2YWx1ZSkpIHx8
ICghZiAmJiBhKSl7DQotICAgICAgICAgICAgICAgIHJbKytyaV0gPSBjaTsNCi0gICAgICAgICAg
ICB9DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4gcjsNCi0gICAgfTsNCi0NCi0gICAgZnVu
Y3Rpb24gYnlQc2V1ZG8oY3MsIG5hbWUsIHZhbHVlKXsNCi0gICAgICAgIHJldHVybiBFeHQuRG9t
UXVlcnkucHNldWRvc1tuYW1lXShjcywgdmFsdWUpOw0KLSAgICB9Ow0KLQ0KLSAgICAvLyBUaGlz
IGlzIGZvciBJRSBNU1hNTCB3aGljaCBkb2VzIG5vdCBzdXBwb3J0IGV4cGFuZG9zLg0KLSAgICAv
LyBJRSBydW5zIHRoZSBzYW1lIHNwZWVkIHVzaW5nIHNldEF0dHJpYnV0ZSwgaG93ZXZlciBGRiBz
bG93cyB3YXkgZG93bg0KLSAgICAvLyBhbmQgU2FmYXJpIGNvbXBsZXRlbHkgZmFpbHMgc28gdGhl
eSBuZWVkIHRvIGNvbnRpbnVlIHRvIHVzZSBleHBhbmRvcy4NCi0gICAgdmFyIGlzSUUgPSB3aW5k
b3cuQWN0aXZlWE9iamVjdCA/IHRydWUgOiBmYWxzZTsNCi0NCi0gICAgLy8gdGhpcyBldmFsIGlz
IHN0b3AgdGhlIGNvbXByZXNzb3IgZnJvbQ0KLSAgICAvLyByZW5hbWluZyB0aGUgdmFyaWFibGUg
dG8gc29tZXRoaW5nIHNob3J0ZXINCi0gICAgZXZhbCgidmFyIGJhdGNoID0gMzA4MDM7Iik7DQot
DQotICAgIHZhciBrZXkgPSAzMDgwMzsNCi0NCi0gICAgZnVuY3Rpb24gbm9kdXBJRVhtbChjcyl7
DQotICAgICAgICB2YXIgZCA9ICsra2V5Ow0KLSAgICAgICAgY3NbMF0uc2V0QXR0cmlidXRlKCJf
bm9kdXAiLCBkKTsNCi0gICAgICAgIHZhciByID0gW2NzWzBdXTsNCi0gICAgICAgIGZvcih2YXIg
aSA9IDEsIGxlbiA9IGNzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKXsNCi0gICAgICAgICAgICB2YXIg
YyA9IGNzW2ldOw0KLSAgICAgICAgICAgIGlmKCFjLmdldEF0dHJpYnV0ZSgiX25vZHVwIikgIT0g
ZCl7DQotICAgICAgICAgICAgICAgIGMuc2V0QXR0cmlidXRlKCJfbm9kdXAiLCBkKTsNCi0gICAg
ICAgICAgICAgICAgcltyLmxlbmd0aF0gPSBjOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0N
Ci0gICAgICAgIGZvcih2YXIgaSA9IDAsIGxlbiA9IGNzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKXsN
Ci0gICAgICAgICAgICBjc1tpXS5yZW1vdmVBdHRyaWJ1dGUoIl9ub2R1cCIpOw0KLSAgICAgICAg
fQ0KLSAgICAgICAgcmV0dXJuIHI7DQotICAgIH0NCi0NCi0gICAgZnVuY3Rpb24gbm9kdXAoY3Mp
ew0KLSAgICAgICAgaWYoIWNzKXsNCi0gICAgICAgICAgICByZXR1cm4gW107DQotICAgICAgICB9
DQotICAgICAgICB2YXIgbGVuID0gY3MubGVuZ3RoLCBjLCBpLCByID0gY3MsIGNqLCByaSA9IC0x
Ow0KLSAgICAgICAgaWYoIWxlbiB8fCB0eXBlb2YgY3Mubm9kZVR5cGUgIT0gInVuZGVmaW5lZCIg
fHwgbGVuID09IDEpew0KLSAgICAgICAgICAgIHJldHVybiBjczsNCi0gICAgICAgIH0NCi0gICAg
ICAgIGlmKGlzSUUgJiYgdHlwZW9mIGNzWzBdLnNlbGVjdFNpbmdsZU5vZGUgIT0gInVuZGVmaW5l
ZCIpew0KLSAgICAgICAgICAgIHJldHVybiBub2R1cElFWG1sKGNzKTsNCi0gICAgICAgIH0NCi0g
ICAgICAgIHZhciBkID0gKytrZXk7DQotICAgICAgICBjc1swXS5fbm9kdXAgPSBkOw0KLSAgICAg
ICAgZm9yKGkgPSAxOyBjID0gY3NbaV07IGkrKyl7DQotICAgICAgICAgICAgaWYoYy5fbm9kdXAg
IT0gZCl7DQotICAgICAgICAgICAgICAgIGMuX25vZHVwID0gZDsNCi0gICAgICAgICAgICB9ZWxz
ZXsNCi0gICAgICAgICAgICAgICAgciA9IFtdOw0KLSAgICAgICAgICAgICAgICBmb3IodmFyIGog
PSAwOyBqIDwgaTsgaisrKXsNCi0gICAgICAgICAgICAgICAgICAgIHJbKytyaV0gPSBjc1tqXTsN
Ci0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBmb3IoaiA9IGkrMTsgY2ogPSBj
c1tqXTsgaisrKXsNCi0gICAgICAgICAgICAgICAgICAgIGlmKGNqLl9ub2R1cCAhPSBkKXsNCi0g
ICAgICAgICAgICAgICAgICAgICAgICBjai5fbm9kdXAgPSBkOw0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJbKytyaV0gPSBjajsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAg
ICAgICAgfQ0KLSAgICAgICAgICAgICAgICByZXR1cm4gcjsNCi0gICAgICAgICAgICB9DQotICAg
ICAgICB9DQotICAgICAgICByZXR1cm4gcjsNCi0gICAgfQ0KLQ0KLSAgICBmdW5jdGlvbiBxdWlj
a0RpZmZJRVhtbChjMSwgYzIpew0KLSAgICAgICAgdmFyIGQgPSArK2tleTsNCi0gICAgICAgIGZv
cih2YXIgaSA9IDAsIGxlbiA9IGMxLmxlbmd0aDsgaSA8IGxlbjsgaSsrKXsNCi0gICAgICAgICAg
ICBjMVtpXS5zZXRBdHRyaWJ1dGUoIl9xZGlmZiIsIGQpOw0KLSAgICAgICAgfQ0KLSAgICAgICAg
dmFyIHIgPSBbXTsNCi0gICAgICAgIGZvcih2YXIgaSA9IDAsIGxlbiA9IGMyLmxlbmd0aDsgaSA8
IGxlbjsgaSsrKXsNCi0gICAgICAgICAgICBpZihjMltpXS5nZXRBdHRyaWJ1dGUoIl9xZGlmZiIp
ICE9IGQpew0KLSAgICAgICAgICAgICAgICByW3IubGVuZ3RoXSA9IGMyW2ldOw0KLSAgICAgICAg
ICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIGZvcih2YXIgaSA9IDAsIGxlbiA9IGMxLmxlbmd0
aDsgaSA8IGxlbjsgaSsrKXsNCi0gICAgICAgICAgIGMxW2ldLnJlbW92ZUF0dHJpYnV0ZSgiX3Fk
aWZmIik7DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4gcjsNCi0gICAgfQ0KLQ0KLSAgICBm
dW5jdGlvbiBxdWlja0RpZmYoYzEsIGMyKXsNCi0gICAgICAgIHZhciBsZW4xID0gYzEubGVuZ3Ro
Ow0KLSAgICAgICAgaWYoIWxlbjEpew0KLSAgICAgICAgICAgIHJldHVybiBjMjsNCi0gICAgICAg
IH0NCi0gICAgICAgIGlmKGlzSUUgJiYgYzFbMF0uc2VsZWN0U2luZ2xlTm9kZSl7DQotICAgICAg
ICAgICAgcmV0dXJuIHF1aWNrRGlmZklFWG1sKGMxLCBjMik7DQotICAgICAgICB9DQotICAgICAg
ICB2YXIgZCA9ICsra2V5Ow0KLSAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGxlbjE7IGkrKyl7
DQotICAgICAgICAgICAgYzFbaV0uX3FkaWZmID0gZDsNCi0gICAgICAgIH0NCi0gICAgICAgIHZh
ciByID0gW107DQotICAgICAgICBmb3IodmFyIGkgPSAwLCBsZW4gPSBjMi5sZW5ndGg7IGkgPCBs
ZW47IGkrKyl7DQotICAgICAgICAgICAgaWYoYzJbaV0uX3FkaWZmICE9IGQpew0KLSAgICAgICAg
ICAgICAgICByW3IubGVuZ3RoXSA9IGMyW2ldOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0N
Ci0gICAgICAgIHJldHVybiByOw0KLSAgICB9DQotDQotICAgIGZ1bmN0aW9uIHF1aWNrSWQobnMs
IG1vZGUsIHJvb3QsIGlkKXsNCi0gICAgICAgIGlmKG5zID09IHJvb3Qpew0KLSAgICAgICAgICAg
dmFyIGQgPSByb290Lm93bmVyRG9jdW1lbnQgfHwgcm9vdDsNCi0gICAgICAgICAgIHJldHVybiBk
LmdldEVsZW1lbnRCeUlkKGlkKTsNCi0gICAgICAgIH0NCi0gICAgICAgIG5zID0gZ2V0Tm9kZXMo
bnMsIG1vZGUsICIqIik7DQotICAgICAgICByZXR1cm4gYnlJZChucywgbnVsbCwgaWQpOw0KLSAg
ICB9DQotDQotICAgIHJldHVybiB7DQotICAgICAgICBnZXRTdHlsZSA6IGZ1bmN0aW9uKGVsLCBu
YW1lKXsNCi0gICAgICAgICAgICByZXR1cm4gRXh0LmZseShlbCkuZ2V0U3R5bGUobmFtZSk7DQot
ICAgICAgICB9LA0KLSAgICAgICAgLyoqDQotICAgICAgICAgKiBDb21waWxlcyBhIHNlbGVjdG9y
L3hwYXRoIHF1ZXJ5IGludG8gYSByZXVzYWJsZSBmdW5jdGlvbi4gVGhlIHJldHVybmVkIGZ1bmN0
aW9uDQotICAgICAgICAgKiB0YWtlcyBvbmUgcGFyYW1ldGVyICJyb290IiAob3B0aW9uYWwpLCB3
aGljaCBpcyB0aGUgY29udGV4dCBub2RlIGZyb20gd2hlcmUgdGhlIHF1ZXJ5IHNob3VsZCBzdGFy
dC4NCi0gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBzZWxlY3RvciBUaGUgc2VsZWN0b3IveHBh
dGggcXVlcnkNCi0gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlIChvcHRpb25hbCkgRWl0
aGVyICJzZWxlY3QiICh0aGUgZGVmYXVsdCkgb3IgInNpbXBsZSIgZm9yIGEgc2ltcGxlIHNlbGVj
dG9yIG1hdGNoDQotICAgICAgICAgKiBAcmV0dXJuIHtGdW5jdGlvbn0NCi0gICAgICAgICAqLw0K
LSAgICAgICAgY29tcGlsZSA6IGZ1bmN0aW9uKHBhdGgsIHR5cGUpew0KLSAgICAgICAgICAgIHR5
cGUgPSB0eXBlIHx8ICJzZWxlY3QiOw0KLQ0KLSAgICAgICAgICAgIHZhciBmbiA9IFsidmFyIGYg
PSBmdW5jdGlvbihyb290KXtcbiB2YXIgbW9kZTsgKytiYXRjaDsgdmFyIG4gPSByb290IHx8IGRv
Y3VtZW50O1xuIl07DQotICAgICAgICAgICAgdmFyIHEgPSBwYXRoLCBtb2RlLCBscTsNCi0gICAg
ICAgICAgICB2YXIgdGsgPSBFeHQuRG9tUXVlcnkubWF0Y2hlcnM7DQotICAgICAgICAgICAgdmFy
IHRrbGVuID0gdGsubGVuZ3RoOw0KLSAgICAgICAgICAgIHZhciBtbTsNCi0NCi0gICAgICAgICAg
ICAvLyBhY2NlcHQgbGVhZGluZyBtb2RlIHN3aXRjaA0KLSAgICAgICAgICAgIHZhciBsbW9kZSA9
IHEubWF0Y2gobW9kZVJlKTsNCi0gICAgICAgICAgICBpZihsbW9kZSAmJiBsbW9kZVsxXSl7DQot
ICAgICAgICAgICAgICAgIGZuW2ZuLmxlbmd0aF0gPSAnbW9kZT0iJytsbW9kZVsxXS5yZXBsYWNl
KHRyaW1SZSwgIiIpKyciOyc7DQotICAgICAgICAgICAgICAgIHEgPSBxLnJlcGxhY2UobG1vZGVb
MV0sICIiKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgLy8gc3RyaXAgbGVhZGluZyBz
bGFzaGVzDQotICAgICAgICAgICAgd2hpbGUocGF0aC5zdWJzdHIoMCwgMSk9PSIvIil7DQotICAg
ICAgICAgICAgICAgIHBhdGggPSBwYXRoLnN1YnN0cigxKTsNCi0gICAgICAgICAgICB9DQotDQot
ICAgICAgICAgICAgd2hpbGUocSAmJiBscSAhPSBxKXsNCi0gICAgICAgICAgICAgICAgbHEgPSBx
Ow0KLSAgICAgICAgICAgICAgICB2YXIgdG0gPSBxLm1hdGNoKHRhZ1Rva2VuUmUpOw0KLSAgICAg
ICAgICAgICAgICBpZih0eXBlID09ICJzZWxlY3QiKXsNCi0gICAgICAgICAgICAgICAgICAgIGlm
KHRtKXsNCi0gICAgICAgICAgICAgICAgICAgICAgICBpZih0bVsxXSA9PSAiIyIpew0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmbltmbi5sZW5ndGhdID0gJ24gPSBxdWlja0lkKG4sIG1v
ZGUsIHJvb3QsICInK3RtWzJdKyciKTsnOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNl
ew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbltmbi5sZW5ndGhdID0gJ24gPSBnZXRO
b2RlcyhuLCBtb2RlLCAiJyt0bVsyXSsnIik7JzsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9
DQotICAgICAgICAgICAgICAgICAgICAgICAgcSA9IHEucmVwbGFjZSh0bVswXSwgIiIpOw0KLSAg
ICAgICAgICAgICAgICAgICAgfWVsc2UgaWYocS5zdWJzdHIoMCwgMSkgIT0gJ0AnKXsNCi0gICAg
ICAgICAgICAgICAgICAgICAgICBmbltmbi5sZW5ndGhdID0gJ24gPSBnZXROb2RlcyhuLCBtb2Rl
LCAiKiIpOyc7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIH1lbHNl
ew0KLSAgICAgICAgICAgICAgICAgICAgaWYodG0pew0KLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmKHRtWzFdID09ICIjIil7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZuW2ZuLmxl
bmd0aF0gPSAnbiA9IGJ5SWQobiwgbnVsbCwgIicrdG1bMl0rJyIpOyc7DQotICAgICAgICAgICAg
ICAgICAgICAgICAgfWVsc2V7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZuW2ZuLmxl
bmd0aF0gPSAnbiA9IGJ5VGFnKG4sICInK3RtWzJdKyciKTsnOw0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICBxID0gcS5yZXBsYWNlKHRtWzBdLCAi
Iik7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAg
ICAgICAgICAgd2hpbGUoIShtbSA9IHEubWF0Y2gobW9kZVJlKSkpew0KLSAgICAgICAgICAgICAg
ICAgICAgdmFyIG1hdGNoZWQgPSBmYWxzZTsNCi0gICAgICAgICAgICAgICAgICAgIGZvcih2YXIg
aiA9IDA7IGogPCB0a2xlbjsgaisrKXsNCi0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdCA9
IHRrW2pdOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtID0gcS5tYXRjaCh0LnJlKTsN
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZihtKXsNCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZm5bZm4ubGVuZ3RoXSA9IHQuc2VsZWN0LnJlcGxhY2UodHBsUmUsIGZ1bmN0aW9uKHgs
IGkpew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gbVtpXTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9KTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcSA9IHEucmVwbGFjZSht
WzBdLCAiIik7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZWQgPSB0cnVlOw0K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgICAg
ICAgICB9DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAvLyBw
cmV2ZW50IGluZmluaXRlIGxvb3Agb24gYmFkIHNlbGVjdG9yDQotICAgICAgICAgICAgICAgICAg
ICBpZighbWF0Y2hlZCl7DQotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgJ0Vycm9yIHBh
cnNpbmcgc2VsZWN0b3IsIHBhcnNpbmcgZmFpbGVkIGF0ICInICsgcSArICciJzsNCi0gICAgICAg
ICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBpZiht
bVsxXSl7DQotICAgICAgICAgICAgICAgICAgICBmbltmbi5sZW5ndGhdID0gJ21vZGU9IicrbW1b
MV0ucmVwbGFjZSh0cmltUmUsICIiKSsnIjsnOw0KLSAgICAgICAgICAgICAgICAgICAgcSA9IHEu
cmVwbGFjZShtbVsxXSwgIiIpOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0K
LSAgICAgICAgICAgIGZuW2ZuLmxlbmd0aF0gPSAicmV0dXJuIG5vZHVwKG4pO1xufSI7DQotICAg
ICAgICAgICAgZXZhbChmbi5qb2luKCIiKSk7DQotICAgICAgICAgICAgcmV0dXJuIGY7DQotICAg
ICAgICB9LA0KLQ0KLSAgICAgICAgLyoqDQotICAgICAgICAgKiBTZWxlY3RzIGEgZ3JvdXAgb2Yg
ZWxlbWVudHMuDQotICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gc2VsZWN0b3IgVGhlIHNlbGVj
dG9yL3hwYXRoIHF1ZXJ5IChjYW4gYmUgYSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBzZWxlY3Rv
cnMpDQotICAgICAgICAgKiBAcGFyYW0ge05vZGV9IHJvb3QgKG9wdGlvbmFsKSBUaGUgc3RhcnQg
b2YgdGhlIHF1ZXJ5IChkZWZhdWx0cyB0byBkb2N1bWVudCkuDQotICAgICAgICAgKiBAcmV0dXJu
IHtBcnJheX0NCi0gICAgICAgICAqLw0KLSAgICAgICAgc2VsZWN0IDogZnVuY3Rpb24ocGF0aCwg
cm9vdCwgdHlwZSl7DQotICAgICAgICAgICAgaWYoIXJvb3QgfHwgcm9vdCA9PSBkb2N1bWVudCl7
DQotICAgICAgICAgICAgICAgIHJvb3QgPSBkb2N1bWVudDsNCi0gICAgICAgICAgICB9DQotICAg
ICAgICAgICAgaWYodHlwZW9mIHJvb3QgPT0gInN0cmluZyIpew0KLSAgICAgICAgICAgICAgICBy
b290ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocm9vdCk7DQotICAgICAgICAgICAgfQ0KLSAg
ICAgICAgICAgIHZhciBwYXRocyA9IHBhdGguc3BsaXQoIiwiKTsNCi0gICAgICAgICAgICB2YXIg
cmVzdWx0cyA9IFtdOw0KLSAgICAgICAgICAgIGZvcih2YXIgaSA9IDAsIGxlbiA9IHBhdGhzLmxl
bmd0aDsgaSA8IGxlbjsgaSsrKXsNCi0gICAgICAgICAgICAgICAgdmFyIHAgPSBwYXRoc1tpXS5y
ZXBsYWNlKHRyaW1SZSwgIiIpOw0KLSAgICAgICAgICAgICAgICBpZighY2FjaGVbcF0pew0KLSAg
ICAgICAgICAgICAgICAgICAgY2FjaGVbcF0gPSBFeHQuRG9tUXVlcnkuY29tcGlsZShwKTsNCi0g
ICAgICAgICAgICAgICAgICAgIGlmKCFjYWNoZVtwXSl7DQotICAgICAgICAgICAgICAgICAgICAg
ICAgdGhyb3cgcCArICIgaXMgbm90IGEgdmFsaWQgc2VsZWN0b3IiOw0KLSAgICAgICAgICAgICAg
ICAgICAgfQ0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIHZhciByZXN1bHQg
PSBjYWNoZVtwXShyb290KTsNCi0gICAgICAgICAgICAgICAgaWYocmVzdWx0ICYmIHJlc3VsdCAh
PSBkb2N1bWVudCl7DQotICAgICAgICAgICAgICAgICAgICByZXN1bHRzID0gcmVzdWx0cy5jb25j
YXQocmVzdWx0KTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAg
ICAgICBpZihwYXRocy5sZW5ndGggPiAxKXsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIG5vZHVw
KHJlc3VsdHMpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0czsN
Ci0gICAgICAgIH0sDQotDQotICAgICAgICAvKioNCi0gICAgICAgICAqIFNlbGVjdHMgYSBzaW5n
bGUgZWxlbWVudC4NCi0gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBzZWxlY3RvciBUaGUgc2Vs
ZWN0b3IveHBhdGggcXVlcnkNCi0gICAgICAgICAqIEBwYXJhbSB7Tm9kZX0gcm9vdCAob3B0aW9u
YWwpIFRoZSBzdGFydCBvZiB0aGUgcXVlcnkgKGRlZmF1bHRzIHRvIGRvY3VtZW50KS4NCi0gICAg
ICAgICAqIEByZXR1cm4ge0VsZW1lbnR9DQotICAgICAgICAgKi8NCi0gICAgICAgIHNlbGVjdE5v
ZGUgOiBmdW5jdGlvbihwYXRoLCByb290KXsNCi0gICAgICAgICAgICByZXR1cm4gRXh0LkRvbVF1
ZXJ5LnNlbGVjdChwYXRoLCByb290KVswXTsNCi0gICAgICAgIH0sDQotDQotICAgICAgICAvKioN
Ci0gICAgICAgICAqIFNlbGVjdHMgdGhlIHZhbHVlIG9mIGEgbm9kZSwgb3B0aW9uYWxseSByZXBs
YWNpbmcgbnVsbCB3aXRoIHRoZSBkZWZhdWx0VmFsdWUuDQotICAgICAgICAgKiBAcGFyYW0ge1N0
cmluZ30gc2VsZWN0b3IgVGhlIHNlbGVjdG9yL3hwYXRoIHF1ZXJ5DQotICAgICAgICAgKiBAcGFy
YW0ge05vZGV9IHJvb3QgKG9wdGlvbmFsKSBUaGUgc3RhcnQgb2YgdGhlIHF1ZXJ5IChkZWZhdWx0
cyB0byBkb2N1bWVudCkuDQotICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gZGVmYXVsdFZhbHVl
DQotICAgICAgICAgKi8NCi0gICAgICAgIHNlbGVjdFZhbHVlIDogZnVuY3Rpb24ocGF0aCwgcm9v
dCwgZGVmYXVsdFZhbHVlKXsNCi0gICAgICAgICAgICBwYXRoID0gcGF0aC5yZXBsYWNlKHRyaW1S
ZSwgIiIpOw0KLSAgICAgICAgICAgIGlmKCF2YWx1ZUNhY2hlW3BhdGhdKXsNCi0gICAgICAgICAg
ICAgICAgdmFsdWVDYWNoZVtwYXRoXSA9IEV4dC5Eb21RdWVyeS5jb21waWxlKHBhdGgsICJzZWxl
Y3QiKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgdmFyIG4gPSB2YWx1ZUNhY2hlW3Bh
dGhdKHJvb3QpOw0KLSAgICAgICAgICAgIG4gPSBuWzBdID8gblswXSA6IG47DQotICAgICAgICAg
ICAgdmFyIHYgPSAobiAmJiBuLmZpcnN0Q2hpbGQgPyBuLmZpcnN0Q2hpbGQubm9kZVZhbHVlIDog
bnVsbCk7DQotICAgICAgICAgICAgcmV0dXJuICgodiA9PT0gbnVsbHx8diA9PT0gdW5kZWZpbmVk
fHx2PT09JycpID8gZGVmYXVsdFZhbHVlIDogdik7DQotICAgICAgICB9LA0KLQ0KLSAgICAgICAg
LyoqDQotICAgICAgICAgKiBTZWxlY3RzIHRoZSB2YWx1ZSBvZiBhIG5vZGUsIHBhcnNpbmcgaW50
ZWdlcnMgYW5kIGZsb2F0cy4NCi0gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBzZWxlY3RvciBU
aGUgc2VsZWN0b3IveHBhdGggcXVlcnkNCi0gICAgICAgICAqIEBwYXJhbSB7Tm9kZX0gcm9vdCAo
b3B0aW9uYWwpIFRoZSBzdGFydCBvZiB0aGUgcXVlcnkgKGRlZmF1bHRzIHRvIGRvY3VtZW50KS4N
Ci0gICAgICAgICAqIEBwYXJhbSB7TnVtYmVyfSBkZWZhdWx0VmFsdWUNCi0gICAgICAgICAqIEBy
ZXR1cm4ge051bWJlcn0NCi0gICAgICAgICAqLw0KLSAgICAgICAgc2VsZWN0TnVtYmVyIDogZnVu
Y3Rpb24ocGF0aCwgcm9vdCwgZGVmYXVsdFZhbHVlKXsNCi0gICAgICAgICAgICB2YXIgdiA9IEV4
dC5Eb21RdWVyeS5zZWxlY3RWYWx1ZShwYXRoLCByb290LCBkZWZhdWx0VmFsdWUgfHwgMCk7DQot
ICAgICAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQodik7DQotICAgICAgICB9LA0KLQ0KLSAgICAg
ICAgLyoqDQotICAgICAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHBhc3NlZCBlbGVtZW50KHMp
IG1hdGNoIHRoZSBwYXNzZWQgc2ltcGxlIHNlbGVjdG9yIChlLmcuIGRpdi5zb21lLWNsYXNzIG9y
IHNwYW46Zmlyc3QtY2hpbGQpDQotICAgICAgICAgKiBAcGFyYW0ge1N0cmluZy9IVE1MRWxlbWVu
dC9BcnJheX0gZWwgQW4gZWxlbWVudCBpZCwgZWxlbWVudCBvciBhcnJheSBvZiBlbGVtZW50cw0K
LSAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHNlbGVjdG9yIFRoZSBzaW1wbGUgc2VsZWN0b3Ig
dG8gdGVzdA0KLSAgICAgICAgICogQHJldHVybiB7Qm9vbGVhbn0NCi0gICAgICAgICAqLw0KLSAg
ICAgICAgaXMgOiBmdW5jdGlvbihlbCwgc3Mpew0KLSAgICAgICAgICAgIGlmKHR5cGVvZiBlbCA9
PSAic3RyaW5nIil7DQotICAgICAgICAgICAgICAgIGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoZWwpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB2YXIgaXNBcnJheSA9IChlbCBp
bnN0YW5jZW9mIEFycmF5KTsNCi0gICAgICAgICAgICB2YXIgcmVzdWx0ID0gRXh0LkRvbVF1ZXJ5
LmZpbHRlcihpc0FycmF5ID8gZWwgOiBbZWxdLCBzcyk7DQotICAgICAgICAgICAgcmV0dXJuIGlz
QXJyYXkgPyAocmVzdWx0Lmxlbmd0aCA9PSBlbC5sZW5ndGgpIDogKHJlc3VsdC5sZW5ndGggPiAw
KTsNCi0gICAgICAgIH0sDQotDQotICAgICAgICAvKioNCi0gICAgICAgICAqIEZpbHRlcnMgYW4g
YXJyYXkgb2YgZWxlbWVudHMgdG8gb25seSBpbmNsdWRlIG1hdGNoZXMgb2YgYSBzaW1wbGUgc2Vs
ZWN0b3IgKGUuZy4gZGl2LnNvbWUtY2xhc3Mgb3Igc3BhbjpmaXJzdC1jaGlsZCkNCi0gICAgICAg
ICAqIEBwYXJhbSB7QXJyYXl9IGVsIEFuIGFycmF5IG9mIGVsZW1lbnRzIHRvIGZpbHRlcg0KLSAg
ICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHNlbGVjdG9yIFRoZSBzaW1wbGUgc2VsZWN0b3IgdG8g
dGVzdA0KLSAgICAgICAgICogQHBhcmFtIHtCb29sZWFufSBub25NYXRjaGVzIElmIHRydWUsIGl0
IHJldHVybnMgdGhlIGVsZW1lbnRzIHRoYXQgRE9OJ1QgbWF0Y2gNCi0gICAgICAgICAqIHRoZSBz
ZWxlY3RvciBpbnN0ZWFkIG9mIHRoZSBvbmVzIHRoYXQgbWF0Y2gNCi0gICAgICAgICAqIEByZXR1
cm4ge0FycmF5fQ0KLSAgICAgICAgICovDQotICAgICAgICBmaWx0ZXIgOiBmdW5jdGlvbihlbHMs
IHNzLCBub25NYXRjaGVzKXsNCi0gICAgICAgICAgICBzcyA9IHNzLnJlcGxhY2UodHJpbVJlLCAi
Iik7DQotICAgICAgICAgICAgaWYoIXNpbXBsZUNhY2hlW3NzXSl7DQotICAgICAgICAgICAgICAg
IHNpbXBsZUNhY2hlW3NzXSA9IEV4dC5Eb21RdWVyeS5jb21waWxlKHNzLCAic2ltcGxlIik7DQot
ICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIHZhciByZXN1bHQgPSBzaW1wbGVDYWNoZVtzc10o
ZWxzKTsNCi0gICAgICAgICAgICByZXR1cm4gbm9uTWF0Y2hlcyA/IHF1aWNrRGlmZihyZXN1bHQs
IGVscykgOiByZXN1bHQ7DQotICAgICAgICB9LA0KLQ0KLSAgICAgICAgLyoqDQotICAgICAgICAg
KiBDb2xsZWN0aW9uIG9mIG1hdGNoaW5nIHJlZ3VsYXIgZXhwcmVzc2lvbnMgYW5kIGNvZGUgc25p
cHBldHMuDQotICAgICAgICAgKi8NCi0gICAgICAgIG1hdGNoZXJzIDogW3sNCi0gICAgICAgICAg
ICAgICAgcmU6IC9eXC4oW1x3LV0rKS8sDQotICAgICAgICAgICAgICAgIHNlbGVjdDogJ24gPSBi
eUNsYXNzTmFtZShuLCBudWxsLCAiIHsxfSAiKTsnDQotICAgICAgICAgICAgfSwgew0KLSAgICAg
ICAgICAgICAgICByZTogL15cOihbXHctXSspKD86XCgoKD86W15ccz5cL10qfC4qPykpXCkpPy8s
DQotICAgICAgICAgICAgICAgIHNlbGVjdDogJ24gPSBieVBzZXVkbyhuLCAiezF9IiwgInsyfSIp
OycNCi0gICAgICAgICAgICB9LHsNCi0gICAgICAgICAgICAgICAgcmU6IC9eKD86KFtcW1x7XSko
PzpAKT8oW1x3LV0rKVxzPyg/Oig9fC49KVxzP1snIl0/KC4qPylbIiddPyk/W1xdXH1dKS8sDQot
ICAgICAgICAgICAgICAgIHNlbGVjdDogJ24gPSBieUF0dHJpYnV0ZShuLCAiezJ9IiwgIns0fSIs
ICJ7M30iLCAiezF9Iik7Jw0KLSAgICAgICAgICAgIH0sIHsNCi0gICAgICAgICAgICAgICAgcmU6
IC9eIyhbXHctXSspLywNCi0gICAgICAgICAgICAgICAgc2VsZWN0OiAnbiA9IGJ5SWQobiwgbnVs
bCwgInsxfSIpOycNCi0gICAgICAgICAgICB9LHsNCi0gICAgICAgICAgICAgICAgcmU6IC9eQChb
XHctXSspLywNCi0gICAgICAgICAgICAgICAgc2VsZWN0OiAncmV0dXJuIHtmaXJzdENoaWxkOntu
b2RlVmFsdWU6YXR0clZhbHVlKG4sICJ7MX0iKX19OycNCi0gICAgICAgICAgICB9DQotICAgICAg
ICBdLA0KLQ0KLSAgICAgICAgLyoqDQotICAgICAgICAgKiBDb2xsZWN0aW9uIG9mIG9wZXJhdG9y
IGNvbXBhcmlzb24gZnVuY3Rpb25zLiBUaGUgZGVmYXVsdCBvcGVyYXRvcnMgYXJlID0sICE9LCBe
PSwgJD0sICo9LCAlPSwgfD0gYW5kIH49Lg0KLSAgICAgICAgICogTmV3IG9wZXJhdG9ycyBjYW4g
YmUgYWRkZWQgYXMgbG9uZyBhcyB0aGUgbWF0Y2ggdGhlIGZvcm1hdCA8aT5jPC9pPj0gd2hlcmUg
PGk+YzwvaT4gaXMgYW55IGNoYXJhY3RlciBvdGhlciB0aGFuIHNwYWNlLCAmZ3Q7ICZsdDsuDQot
ICAgICAgICAgKi8NCi0gICAgICAgIG9wZXJhdG9ycyA6IHsNCi0gICAgICAgICAgICAiPSIgOiBm
dW5jdGlvbihhLCB2KXsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIGEgPT0gdjsNCi0gICAgICAg
ICAgICB9LA0KLSAgICAgICAgICAgICIhPSIgOiBmdW5jdGlvbihhLCB2KXsNCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGEgIT0gdjsNCi0gICAgICAgICAgICB9LA0KLSAgICAgICAgICAgICJePSIg
OiBmdW5jdGlvbihhLCB2KXsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIGEgJiYgYS5zdWJzdHIo
MCwgdi5sZW5ndGgpID09IHY7DQotICAgICAgICAgICAgfSwNCi0gICAgICAgICAgICAiJD0iIDog
ZnVuY3Rpb24oYSwgdil7DQotICAgICAgICAgICAgICAgIHJldHVybiBhICYmIGEuc3Vic3RyKGEu
bGVuZ3RoLXYubGVuZ3RoKSA9PSB2Ow0KLSAgICAgICAgICAgIH0sDQotICAgICAgICAgICAgIio9
IiA6IGZ1bmN0aW9uKGEsIHYpew0KLSAgICAgICAgICAgICAgICByZXR1cm4gYSAmJiBhLmluZGV4
T2YodikgIT09IC0xOw0KLSAgICAgICAgICAgIH0sDQotICAgICAgICAgICAgIiU9IiA6IGZ1bmN0
aW9uKGEsIHYpew0KLSAgICAgICAgICAgICAgICByZXR1cm4gKGEgJSB2KSA9PSAwOw0KLSAgICAg
ICAgICAgIH0sDQotICAgICAgICAgICAgInw9IiA6IGZ1bmN0aW9uKGEsIHYpew0KLSAgICAgICAg
ICAgICAgICByZXR1cm4gYSAmJiAoYSA9PSB2IHx8IGEuc3Vic3RyKDAsIHYubGVuZ3RoKzEpID09
IHYrJy0nKTsNCi0gICAgICAgICAgICB9LA0KLSAgICAgICAgICAgICJ+PSIgOiBmdW5jdGlvbihh
LCB2KXsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIGEgJiYgKCcgJythKycgJykuaW5kZXhPZign
ICcrdisnICcpICE9IC0xOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0sDQotDQotICAgICAg
ICAvKioNCi0gICAgICAgICAqIENvbGxlY3Rpb24gb2YgInBzZXVkbyBjbGFzcyIgcHJvY2Vzc29y
cy4gRWFjaCBwcm9jZXNzb3IgaXMgcGFzc2VkIHRoZSBjdXJyZW50IG5vZGVzZXQgKGFycmF5KQ0K
LSAgICAgICAgICogYW5kIHRoZSBhcmd1bWVudCAoaWYgYW55KSBzdXBwbGllZCBpbiB0aGUgc2Vs
ZWN0b3IuDQotICAgICAgICAgKi8NCi0gICAgICAgIHBzZXVkb3MgOiB7DQotICAgICAgICAgICAg
ImZpcnN0LWNoaWxkIiA6IGZ1bmN0aW9uKGMpew0KLSAgICAgICAgICAgICAgICB2YXIgciA9IFtd
LCByaSA9IC0xLCBuOw0KLSAgICAgICAgICAgICAgICBmb3IodmFyIGkgPSAwLCBjaTsgY2kgPSBu
ID0gY1tpXTsgaSsrKXsNCi0gICAgICAgICAgICAgICAgICAgIHdoaWxlKChuID0gbi5wcmV2aW91
c1NpYmxpbmcpICYmIG4ubm9kZVR5cGUgIT0gMSk7DQotICAgICAgICAgICAgICAgICAgICBpZigh
bil7DQotICAgICAgICAgICAgICAgICAgICAgICAgclsrK3JpXSA9IGNpOw0KLSAgICAgICAgICAg
ICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIHJldHVybiBy
Ow0KLSAgICAgICAgICAgIH0sDQotDQotICAgICAgICAgICAgImxhc3QtY2hpbGQiIDogZnVuY3Rp
b24oYyl7DQotICAgICAgICAgICAgICAgIHZhciByID0gW10sIHJpID0gLTEsIG47DQotICAgICAg
ICAgICAgICAgIGZvcih2YXIgaSA9IDAsIGNpOyBjaSA9IG4gPSBjW2ldOyBpKyspew0KLSAgICAg
ICAgICAgICAgICAgICAgd2hpbGUoKG4gPSBuLm5leHRTaWJsaW5nKSAmJiBuLm5vZGVUeXBlICE9
IDEpOw0KLSAgICAgICAgICAgICAgICAgICAgaWYoIW4pew0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJbKytyaV0gPSBjaTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAg
ICAgfQ0KLSAgICAgICAgICAgICAgICByZXR1cm4gcjsNCi0gICAgICAgICAgICB9LA0KLQ0KLSAg
ICAgICAgICAgICJudGgtY2hpbGQiIDogZnVuY3Rpb24oYywgYSkgew0KLSAgICAgICAgICAgICAg
ICB2YXIgciA9IFtdLCByaSA9IC0xOw0KLSAgICAgICAgICAgICAgICB2YXIgbSA9IG50aFJlLmV4
ZWMoYSA9PSAiZXZlbiIgJiYgIjJuIiB8fCBhID09ICJvZGQiICYmICIybisxIiB8fCAhbnRoUmUy
LnRlc3QoYSkgJiYgIm4rIiArIGEgfHwgYSk7DQotICAgICAgICAgICAgICAgIHZhciBmID0gKG1b
MV0gfHwgMSkgLSAwLCBsID0gbVsyXSAtIDA7DQotICAgICAgICAgICAgICAgIGZvcih2YXIgaSA9
IDAsIG47IG4gPSBjW2ldOyBpKyspew0KLSAgICAgICAgICAgICAgICAgICAgdmFyIHBuID0gbi5w
YXJlbnROb2RlOw0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGJhdGNoICE9IHBuLl9iYXRjaCkg
ew0KLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBqID0gMDsNCi0gICAgICAgICAgICAgICAg
ICAgICAgICBmb3IodmFyIGNuID0gcG4uZmlyc3RDaGlsZDsgY247IGNuID0gY24ubmV4dFNpYmxp
bmcpew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihjbi5ub2RlVHlwZSA9PSAxKXsN
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY24ubm9kZUluZGV4ID0gKytqOw0KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0K
LSAgICAgICAgICAgICAgICAgICAgICAgIHBuLl9iYXRjaCA9IGJhdGNoOw0KLSAgICAgICAgICAg
ICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGYgPT0gMSkgew0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChsID09IDAgfHwgbi5ub2RlSW5kZXggPT0gbCl7DQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJbKytyaV0gPSBuOw0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKG4ubm9kZUluZGV4ICsgbCkg
JSBmID09IDApew0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJbKytyaV0gPSBuOw0KLSAgICAg
ICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICB9DQotDQotICAgICAgICAgICAgICAg
IHJldHVybiByOw0KLSAgICAgICAgICAgIH0sDQotDQotICAgICAgICAgICAgIm9ubHktY2hpbGQi
IDogZnVuY3Rpb24oYyl7DQotICAgICAgICAgICAgICAgIHZhciByID0gW10sIHJpID0gLTE7Ow0K
LSAgICAgICAgICAgICAgICBmb3IodmFyIGkgPSAwLCBjaTsgY2kgPSBjW2ldOyBpKyspew0KLSAg
ICAgICAgICAgICAgICAgICAgaWYoIXByZXYoY2kpICYmICFuZXh0KGNpKSl7DQotICAgICAgICAg
ICAgICAgICAgICAgICAgclsrK3JpXSA9IGNpOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAg
ICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIHJldHVybiByOw0KLSAgICAgICAgICAg
IH0sDQotDQotICAgICAgICAgICAgImVtcHR5IiA6IGZ1bmN0aW9uKGMpew0KLSAgICAgICAgICAg
ICAgICB2YXIgciA9IFtdLCByaSA9IC0xOw0KLSAgICAgICAgICAgICAgICBmb3IodmFyIGkgPSAw
LCBjaTsgY2kgPSBjW2ldOyBpKyspew0KLSAgICAgICAgICAgICAgICAgICAgdmFyIGNucyA9IGNp
LmNoaWxkTm9kZXMsIGogPSAwLCBjbiwgZW1wdHkgPSB0cnVlOw0KLSAgICAgICAgICAgICAgICAg
ICAgd2hpbGUoY24gPSBjbnNbal0pew0KLSAgICAgICAgICAgICAgICAgICAgICAgICsrajsNCi0g
ICAgICAgICAgICAgICAgICAgICAgICBpZihjbi5ub2RlVHlwZSA9PSAxIHx8IGNuLm5vZGVUeXBl
ID09IDMpew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbXB0eSA9IGZhbHNlOw0KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgICAgICAg
ICB9DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBpZihlbXB0
eSl7DQotICAgICAgICAgICAgICAgICAgICAgICAgclsrK3JpXSA9IGNpOw0KLSAgICAgICAgICAg
ICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIHJldHVybiBy
Ow0KLSAgICAgICAgICAgIH0sDQotDQotICAgICAgICAgICAgImNvbnRhaW5zIiA6IGZ1bmN0aW9u
KGMsIHYpew0KLSAgICAgICAgICAgICAgICB2YXIgciA9IFtdLCByaSA9IC0xOw0KLSAgICAgICAg
ICAgICAgICBmb3IodmFyIGkgPSAwLCBjaTsgY2kgPSBjW2ldOyBpKyspew0KLSAgICAgICAgICAg
ICAgICAgICAgaWYoKGNpLnRleHRDb250ZW50fHxjaS5pbm5lclRleHR8fCcnKS5pbmRleE9mKHYp
ICE9IC0xKXsNCi0gICAgICAgICAgICAgICAgICAgICAgICByWysrcmldID0gY2k7DQotICAgICAg
ICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgcmV0
dXJuIHI7DQotICAgICAgICAgICAgfSwNCi0NCi0gICAgICAgICAgICAibm9kZVZhbHVlIiA6IGZ1
bmN0aW9uKGMsIHYpew0KLSAgICAgICAgICAgICAgICB2YXIgciA9IFtdLCByaSA9IC0xOw0KLSAg
ICAgICAgICAgICAgICBmb3IodmFyIGkgPSAwLCBjaTsgY2kgPSBjW2ldOyBpKyspew0KLSAgICAg
ICAgICAgICAgICAgICAgaWYoY2kuZmlyc3RDaGlsZCAmJiBjaS5maXJzdENoaWxkLm5vZGVWYWx1
ZSA9PSB2KXsNCi0gICAgICAgICAgICAgICAgICAgICAgICByWysrcmldID0gY2k7DQotICAgICAg
ICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgcmV0
dXJuIHI7DQotICAgICAgICAgICAgfSwNCi0NCi0gICAgICAgICAgICAiY2hlY2tlZCIgOiBmdW5j
dGlvbihjKXsNCi0gICAgICAgICAgICAgICAgdmFyIHIgPSBbXSwgcmkgPSAtMTsNCi0gICAgICAg
ICAgICAgICAgZm9yKHZhciBpID0gMCwgY2k7IGNpID0gY1tpXTsgaSsrKXsNCi0gICAgICAgICAg
ICAgICAgICAgIGlmKGNpLmNoZWNrZWQgPT0gdHJ1ZSl7DQotICAgICAgICAgICAgICAgICAgICAg
ICAgclsrK3JpXSA9IGNpOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAg
ICB9DQotICAgICAgICAgICAgICAgIHJldHVybiByOw0KLSAgICAgICAgICAgIH0sDQotDQotICAg
ICAgICAgICAgIm5vdCIgOiBmdW5jdGlvbihjLCBzcyl7DQotICAgICAgICAgICAgICAgIHJldHVy
biBFeHQuRG9tUXVlcnkuZmlsdGVyKGMsIHNzLCB0cnVlKTsNCi0gICAgICAgICAgICB9LA0KLQ0K
LSAgICAgICAgICAgICJhbnkiIDogZnVuY3Rpb24oYywgc2VsZWN0b3JzKXsNCi0gICAgICAgICAg
ICAgICAgdmFyIHNzID0gc2VsZWN0b3JzLnNwbGl0KCd8Jyk7DQotICAgICAgICAgICAgICAgIHZh
ciByID0gW10sIHJpID0gLTEsIHM7DQotICAgICAgICAgICAgICAgIGZvcih2YXIgaSA9IDAsIGNp
OyBjaSA9IGNbaV07IGkrKyl7DQotICAgICAgICAgICAgICAgICAgICBmb3IodmFyIGogPSAwOyBz
ID0gc3Nbal07IGorKyl7DQotICAgICAgICAgICAgICAgICAgICAgICAgaWYoRXh0LkRvbVF1ZXJ5
LmlzKGNpLCBzKSl7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJbKytyaV0gPSBjaTsN
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgICAg
ICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICB9DQotICAg
ICAgICAgICAgICAgIHJldHVybiByOw0KLSAgICAgICAgICAgIH0sDQotDQotICAgICAgICAgICAg
Im9kZCIgOiBmdW5jdGlvbihjKXsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXNbIm50aC1j
aGlsZCJdKGMsICJvZGQiKTsNCi0gICAgICAgICAgICB9LA0KLQ0KLSAgICAgICAgICAgICJldmVu
IiA6IGZ1bmN0aW9uKGMpew0KLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpc1sibnRoLWNoaWxk
Il0oYywgImV2ZW4iKTsNCi0gICAgICAgICAgICB9LA0KLQ0KLSAgICAgICAgICAgICJudGgiIDog
ZnVuY3Rpb24oYywgYSl7DQotICAgICAgICAgICAgICAgIHJldHVybiBjW2EtMV0gfHwgW107DQot
ICAgICAgICAgICAgfSwNCi0NCi0gICAgICAgICAgICAiZmlyc3QiIDogZnVuY3Rpb24oYyl7DQot
ICAgICAgICAgICAgICAgIHJldHVybiBjWzBdIHx8IFtdOw0KLSAgICAgICAgICAgIH0sDQotDQot
ICAgICAgICAgICAgImxhc3QiIDogZnVuY3Rpb24oYyl7DQotICAgICAgICAgICAgICAgIHJldHVy
biBjW2MubGVuZ3RoLTFdIHx8IFtdOw0KLSAgICAgICAgICAgIH0sDQotDQotICAgICAgICAgICAg
ImhhcyIgOiBmdW5jdGlvbihjLCBzcyl7DQotICAgICAgICAgICAgICAgIHZhciBzID0gRXh0LkRv
bVF1ZXJ5LnNlbGVjdDsNCi0gICAgICAgICAgICAgICAgdmFyIHIgPSBbXSwgcmkgPSAtMTsNCi0g
ICAgICAgICAgICAgICAgZm9yKHZhciBpID0gMCwgY2k7IGNpID0gY1tpXTsgaSsrKXsNCi0gICAg
ICAgICAgICAgICAgICAgIGlmKHMoc3MsIGNpKS5sZW5ndGggPiAwKXsNCi0gICAgICAgICAgICAg
ICAgICAgICAgICByWysrcmldID0gY2k7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAg
ICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgcmV0dXJuIHI7DQotICAgICAgICAgICAgfSwN
Ci0NCi0gICAgICAgICAgICAibmV4dCIgOiBmdW5jdGlvbihjLCBzcyl7DQotICAgICAgICAgICAg
ICAgIHZhciBpcyA9IEV4dC5Eb21RdWVyeS5pczsNCi0gICAgICAgICAgICAgICAgdmFyIHIgPSBb
XSwgcmkgPSAtMTsNCi0gICAgICAgICAgICAgICAgZm9yKHZhciBpID0gMCwgY2k7IGNpID0gY1tp
XTsgaSsrKXsNCi0gICAgICAgICAgICAgICAgICAgIHZhciBuID0gbmV4dChjaSk7DQotICAgICAg
ICAgICAgICAgICAgICBpZihuICYmIGlzKG4sIHNzKSl7DQotICAgICAgICAgICAgICAgICAgICAg
ICAgclsrK3JpXSA9IGNpOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAg
ICB9DQotICAgICAgICAgICAgICAgIHJldHVybiByOw0KLSAgICAgICAgICAgIH0sDQotDQotICAg
ICAgICAgICAgInByZXYiIDogZnVuY3Rpb24oYywgc3Mpew0KLSAgICAgICAgICAgICAgICB2YXIg
aXMgPSBFeHQuRG9tUXVlcnkuaXM7DQotICAgICAgICAgICAgICAgIHZhciByID0gW10sIHJpID0g
LTE7DQotICAgICAgICAgICAgICAgIGZvcih2YXIgaSA9IDAsIGNpOyBjaSA9IGNbaV07IGkrKyl7
DQotICAgICAgICAgICAgICAgICAgICB2YXIgbiA9IHByZXYoY2kpOw0KLSAgICAgICAgICAgICAg
ICAgICAgaWYobiAmJiBpcyhuLCBzcykpew0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJbKyty
aV0gPSBjaTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgfQ0KLSAg
ICAgICAgICAgICAgICByZXR1cm4gcjsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAg
IH07DQotfSgpOw0KLQ0KLS8qKg0KLSAqIFNlbGVjdHMgYW4gYXJyYXkgb2YgRE9NIG5vZGVzIGJ5
IENTUy9YUGF0aCBzZWxlY3Rvci4gU2hvcnRoYW5kIG9mIHtAbGluayBFeHQuRG9tUXVlcnkjc2Vs
ZWN0fQ0KLSAqIEBwYXJhbSB7U3RyaW5nfSBwYXRoIFRoZSBzZWxlY3Rvci94cGF0aCBxdWVyeQ0K
LSAqIEBwYXJhbSB7Tm9kZX0gcm9vdCAob3B0aW9uYWwpIFRoZSBzdGFydCBvZiB0aGUgcXVlcnkg
KGRlZmF1bHRzIHRvIGRvY3VtZW50KS4NCi0gKiBAcmV0dXJuIHtBcnJheX0NCi0gKiBAbWVtYmVy
IEV4dA0KLSAqIEBtZXRob2QgcXVlcnkNCi0gKi8NCi1FeHQucXVlcnkgPSBFeHQuRG9tUXVlcnku
c2VsZWN0Ow0KZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3dlYmtpdC5vcmcvcGVyZi9zbGlja3NwZWVk
L2ZyYW1ld29ya3MvZHVtbXkuanMgYi9XZWJzaXRlcy93ZWJraXQub3JnL3BlcmYvc2xpY2tzcGVl
ZC9mcmFtZXdvcmtzL2R1bW15LmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlk
ZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCmRpZmYgLS1naXQgYS9XZWJzaXRlcy93ZWJraXQub3JnL3Bl
cmYvc2xpY2tzcGVlZC9mcmFtZXdvcmtzL2pxdWVyeS0xLjIuMy5qcyBiL1dlYnNpdGVzL3dlYmtp
dC5vcmcvcGVyZi9zbGlja3NwZWVkL2ZyYW1ld29ya3MvanF1ZXJ5LTEuMi4zLmpzCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZTQzYTgyMzU4MWQ3ZWZkMDc2ZGVhN2Q3MzRjZjAyYWQz
YjkxZTQyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1dl
YnNpdGVzL3dlYmtpdC5vcmcvcGVyZi9zbGlja3NwZWVkL2ZyYW1ld29ya3MvanF1ZXJ5LTEuMi4z
LmpzCisrKyAvZGV2L251bGwKQEAgLTEsMzQwOCArMCwwIEBACi0oZnVuY3Rpb24oKXsKLS8qCi0g
KiBqUXVlcnkgMS4yLjMgLSBOZXcgV2F2ZSBKYXZhc2NyaXB0Ci0gKgotICogQ29weXJpZ2h0IChj
KSAyMDA4IEpvaG4gUmVzaWcgKGpxdWVyeS5jb20pCi0gKiBEdWFsIGxpY2Vuc2VkIHVuZGVyIHRo
ZSBNSVQgKE1JVC1MSUNFTlNFLnR4dCkKLSAqIGFuZCBHUEwgKEdQTC1MSUNFTlNFLnR4dCkgbGlj
ZW5zZXMuCi0gKgotICogJERhdGU6IDIwMDgtMDItMDYgMDA6MjE6MjUgLTA1MDAgKFdlZCwgMDYg
RmViIDIwMDgpICQKLSAqICRSZXY6IDQ2NjMgJAotICovCi0KLS8vIE1hcCBvdmVyIGpRdWVyeSBp
biBjYXNlIG9mIG92ZXJ3cml0ZQotaWYgKCB3aW5kb3cualF1ZXJ5ICkKLQl2YXIgX2pRdWVyeSA9
IHdpbmRvdy5qUXVlcnk7Ci0KLXZhciBqUXVlcnkgPSB3aW5kb3cualF1ZXJ5ID0gZnVuY3Rpb24o
IHNlbGVjdG9yLCBjb250ZXh0ICkgewotCS8vIFRoZSBqUXVlcnkgb2JqZWN0IGlzIGFjdHVhbGx5
IGp1c3QgdGhlIGluaXQgY29uc3RydWN0b3IgJ2VuaGFuY2VkJwotCXJldHVybiBuZXcgalF1ZXJ5
LnByb3RvdHlwZS5pbml0KCBzZWxlY3RvciwgY29udGV4dCApOwotfTsKLQotLy8gTWFwIG92ZXIg
dGhlICQgaW4gY2FzZSBvZiBvdmVyd3JpdGUKLWlmICggd2luZG93LiQgKQotCXZhciBfJCA9IHdp
bmRvdy4kOwotCQotLy8gTWFwIHRoZSBqUXVlcnkgbmFtZXNwYWNlIHRvIHRoZSAnJCcgb25lCi13
aW5kb3cuJCA9IGpRdWVyeTsKLQotLy8gQSBzaW1wbGUgd2F5IHRvIGNoZWNrIGZvciBIVE1MIHN0
cmluZ3Mgb3IgSUQgc3RyaW5ncwotLy8gKGJvdGggb2Ygd2hpY2ggd2Ugb3B0aW1pemUgZm9yKQot
dmFyIHF1aWNrRXhwciA9IC9eW148XSooPCgufFxzKSs+KVtePl0qJHxeIyhcdyspJC87Ci0KLS8v
IElzIGl0IGEgc2ltcGxlIHNlbGVjdG9yCi12YXIgaXNTaW1wbGUgPSAvXi5bXjojXFtcLl0qJC87
Ci0KLWpRdWVyeS5mbiA9IGpRdWVyeS5wcm90b3R5cGUgPSB7Ci0JaW5pdDogZnVuY3Rpb24oIHNl
bGVjdG9yLCBjb250ZXh0ICkgewotCQkvLyBNYWtlIHN1cmUgdGhhdCBhIHNlbGVjdGlvbiB3YXMg
cHJvdmlkZWQKLQkJc2VsZWN0b3IgPSBzZWxlY3RvciB8fCBkb2N1bWVudDsKLQotCQkvLyBIYW5k
bGUgJChET01FbGVtZW50KQotCQlpZiAoIHNlbGVjdG9yLm5vZGVUeXBlICkgewotCQkJdGhpc1sw
XSA9IHNlbGVjdG9yOwotCQkJdGhpcy5sZW5ndGggPSAxOwotCQkJcmV0dXJuIHRoaXM7Ci0KLQkJ
Ly8gSGFuZGxlIEhUTUwgc3RyaW5ncwotCQl9IGVsc2UgaWYgKCB0eXBlb2Ygc2VsZWN0b3IgPT0g
InN0cmluZyIgKSB7Ci0JCQkvLyBBcmUgd2UgZGVhbGluZyB3aXRoIEhUTUwgc3RyaW5nIG9yIGFu
IElEPwotCQkJdmFyIG1hdGNoID0gcXVpY2tFeHByLmV4ZWMoIHNlbGVjdG9yICk7Ci0KLQkJCS8v
IFZlcmlmeSBhIG1hdGNoLCBhbmQgdGhhdCBubyBjb250ZXh0IHdhcyBzcGVjaWZpZWQgZm9yICNp
ZAotCQkJaWYgKCBtYXRjaCAmJiAobWF0Y2hbMV0gfHwgIWNvbnRleHQpICkgewotCi0JCQkJLy8g
SEFORExFOiAkKGh0bWwpIC0+ICQoYXJyYXkpCi0JCQkJaWYgKCBtYXRjaFsxXSApCi0JCQkJCXNl
bGVjdG9yID0galF1ZXJ5LmNsZWFuKCBbIG1hdGNoWzFdIF0sIGNvbnRleHQgKTsKLQotCQkJCS8v
IEhBTkRMRTogJCgiI2lkIikKLQkJCQllbHNlIHsKLQkJCQkJdmFyIGVsZW0gPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCggbWF0Y2hbM10gKTsKLQotCQkJCQkvLyBNYWtlIHN1cmUgYW4gZWxlbWVu
dCB3YXMgbG9jYXRlZAotCQkJCQlpZiAoIGVsZW0gKQotCQkJCQkJLy8gSGFuZGxlIHRoZSBjYXNl
IHdoZXJlIElFIGFuZCBPcGVyYSByZXR1cm4gaXRlbXMKLQkJCQkJCS8vIGJ5IG5hbWUgaW5zdGVh
ZCBvZiBJRAotCQkJCQkJaWYgKCBlbGVtLmlkICE9IG1hdGNoWzNdICkKLQkJCQkJCQlyZXR1cm4g
alF1ZXJ5KCkuZmluZCggc2VsZWN0b3IgKTsKLQotCQkJCQkJLy8gT3RoZXJ3aXNlLCB3ZSBpbmpl
Y3QgdGhlIGVsZW1lbnQgZGlyZWN0bHkgaW50byB0aGUgalF1ZXJ5IG9iamVjdAotCQkJCQkJZWxz
ZSB7Ci0JCQkJCQkJdGhpc1swXSA9IGVsZW07Ci0JCQkJCQkJdGhpcy5sZW5ndGggPSAxOwotCQkJ
CQkJCXJldHVybiB0aGlzOwotCQkJCQkJfQotCi0JCQkJCWVsc2UKLQkJCQkJCXNlbGVjdG9yID0g
W107Ci0JCQkJfQotCi0JCQkvLyBIQU5ETEU6ICQoZXhwciwgW2NvbnRleHRdKQotCQkJLy8gKHdo
aWNoIGlzIGp1c3QgZXF1aXZhbGVudCB0bzogJChjb250ZW50KS5maW5kKGV4cHIpCi0JCQl9IGVs
c2UKLQkJCQlyZXR1cm4gbmV3IGpRdWVyeSggY29udGV4dCApLmZpbmQoIHNlbGVjdG9yICk7Ci0K
LQkJLy8gSEFORExFOiAkKGZ1bmN0aW9uKQotCQkvLyBTaG9ydGN1dCBmb3IgZG9jdW1lbnQgcmVh
ZHkKLQkJfSBlbHNlIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHNlbGVjdG9yICkgKQotCQkJcmV0
dXJuIG5ldyBqUXVlcnkoIGRvY3VtZW50IClbIGpRdWVyeS5mbi5yZWFkeSA/ICJyZWFkeSIgOiAi
bG9hZCIgXSggc2VsZWN0b3IgKTsKLQotCQlyZXR1cm4gdGhpcy5zZXRBcnJheSgKLQkJCS8vIEhB
TkRMRTogJChhcnJheSkKLQkJCXNlbGVjdG9yLmNvbnN0cnVjdG9yID09IEFycmF5ICYmIHNlbGVj
dG9yIHx8Ci0KLQkJCS8vIEhBTkRMRTogJChhcnJheWxpa2UpCi0JCQkvLyBXYXRjaCBmb3Igd2hl
biBhbiBhcnJheS1saWtlIG9iamVjdCwgY29udGFpbnMgRE9NIG5vZGVzLCBpcyBwYXNzZWQgaW4g
YXMgdGhlIHNlbGVjdG9yCi0JCQkoc2VsZWN0b3IuanF1ZXJ5IHx8IHNlbGVjdG9yLmxlbmd0aCAm
JiBzZWxlY3RvciAhPSB3aW5kb3cgJiYgIXNlbGVjdG9yLm5vZGVUeXBlICYmIHNlbGVjdG9yWzBd
ICE9IHVuZGVmaW5lZCAmJiBzZWxlY3RvclswXS5ub2RlVHlwZSkgJiYgalF1ZXJ5Lm1ha2VBcnJh
eSggc2VsZWN0b3IgKSB8fAotCi0JCQkvLyBIQU5ETEU6ICQoKikKLQkJCVsgc2VsZWN0b3IgXSAp
OwotCX0sCi0JCi0JLy8gVGhlIGN1cnJlbnQgdmVyc2lvbiBvZiBqUXVlcnkgYmVpbmcgdXNlZAot
CWpxdWVyeTogIjEuMi4zIiwKLQotCS8vIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgY29udGFpbmVk
IGluIHRoZSBtYXRjaGVkIGVsZW1lbnQgc2V0Ci0Jc2l6ZTogZnVuY3Rpb24oKSB7Ci0JCXJldHVy
biB0aGlzLmxlbmd0aDsKLQl9LAotCQotCS8vIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgY29udGFp
bmVkIGluIHRoZSBtYXRjaGVkIGVsZW1lbnQgc2V0Ci0JbGVuZ3RoOiAwLAotCi0JLy8gR2V0IHRo
ZSBOdGggZWxlbWVudCBpbiB0aGUgbWF0Y2hlZCBlbGVtZW50IHNldCBPUgotCS8vIEdldCB0aGUg
d2hvbGUgbWF0Y2hlZCBlbGVtZW50IHNldCBhcyBhIGNsZWFuIGFycmF5Ci0JZ2V0OiBmdW5jdGlv
biggbnVtICkgewotCQlyZXR1cm4gbnVtID09IHVuZGVmaW5lZCA/Ci0KLQkJCS8vIFJldHVybiBh
ICdjbGVhbicgYXJyYXkKLQkJCWpRdWVyeS5tYWtlQXJyYXkoIHRoaXMgKSA6Ci0KLQkJCS8vIFJl
dHVybiBqdXN0IHRoZSBvYmplY3QKLQkJCXRoaXNbIG51bSBdOwotCX0sCi0JCi0JLy8gVGFrZSBh
biBhcnJheSBvZiBlbGVtZW50cyBhbmQgcHVzaCBpdCBvbnRvIHRoZSBzdGFjawotCS8vIChyZXR1
cm5pbmcgdGhlIG5ldyBtYXRjaGVkIGVsZW1lbnQgc2V0KQotCXB1c2hTdGFjazogZnVuY3Rpb24o
IGVsZW1zICkgewotCQkvLyBCdWlsZCBhIG5ldyBqUXVlcnkgbWF0Y2hlZCBlbGVtZW50IHNldAot
CQl2YXIgcmV0ID0galF1ZXJ5KCBlbGVtcyApOwotCi0JCS8vIEFkZCB0aGUgb2xkIG9iamVjdCBv
bnRvIHRoZSBzdGFjayAoYXMgYSByZWZlcmVuY2UpCi0JCXJldC5wcmV2T2JqZWN0ID0gdGhpczsK
LQotCQkvLyBSZXR1cm4gdGhlIG5ld2x5LWZvcm1lZCBlbGVtZW50IHNldAotCQlyZXR1cm4gcmV0
OwotCX0sCi0JCi0JLy8gRm9yY2UgdGhlIGN1cnJlbnQgbWF0Y2hlZCBzZXQgb2YgZWxlbWVudHMg
dG8gYmVjb21lCi0JLy8gdGhlIHNwZWNpZmllZCBhcnJheSBvZiBlbGVtZW50cyAoZGVzdHJveWlu
ZyB0aGUgc3RhY2sgaW4gdGhlIHByb2Nlc3MpCi0JLy8gWW91IHNob3VsZCB1c2UgcHVzaFN0YWNr
KCkgaW4gb3JkZXIgdG8gZG8gdGhpcywgYnV0IG1haW50YWluIHRoZSBzdGFjawotCXNldEFycmF5
OiBmdW5jdGlvbiggZWxlbXMgKSB7Ci0JCS8vIFJlc2V0dGluZyB0aGUgbGVuZ3RoIHRvIDAsIHRo
ZW4gdXNpbmcgdGhlIG5hdGl2ZSBBcnJheSBwdXNoCi0JCS8vIGlzIGEgc3VwZXItZmFzdCB3YXkg
dG8gcG9wdWxhdGUgYW4gb2JqZWN0IHdpdGggYXJyYXktbGlrZSBwcm9wZXJ0aWVzCi0JCXRoaXMu
bGVuZ3RoID0gMDsKLQkJQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoIHRoaXMsIGVsZW1zICk7
Ci0JCQotCQlyZXR1cm4gdGhpczsKLQl9LAotCi0JLy8gRXhlY3V0ZSBhIGNhbGxiYWNrIGZvciBl
dmVyeSBlbGVtZW50IGluIHRoZSBtYXRjaGVkIHNldC4KLQkvLyAoWW91IGNhbiBzZWVkIHRoZSBh
cmd1bWVudHMgd2l0aCBhbiBhcnJheSBvZiBhcmdzLCBidXQgdGhpcyBpcwotCS8vIG9ubHkgdXNl
ZCBpbnRlcm5hbGx5LikKLQllYWNoOiBmdW5jdGlvbiggY2FsbGJhY2ssIGFyZ3MgKSB7Ci0JCXJl
dHVybiBqUXVlcnkuZWFjaCggdGhpcywgY2FsbGJhY2ssIGFyZ3MgKTsKLQl9LAotCi0JLy8gRGV0
ZXJtaW5lIHRoZSBwb3NpdGlvbiBvZiBhbiBlbGVtZW50IHdpdGhpbiAKLQkvLyB0aGUgbWF0Y2hl
ZCBzZXQgb2YgZWxlbWVudHMKLQlpbmRleDogZnVuY3Rpb24oIGVsZW0gKSB7Ci0JCXZhciByZXQg
PSAtMTsKLQotCQkvLyBMb2NhdGUgdGhlIHBvc2l0aW9uIG9mIHRoZSBkZXNpcmVkIGVsZW1lbnQK
LQkJdGhpcy5lYWNoKGZ1bmN0aW9uKGkpewotCQkJaWYgKCB0aGlzID09IGVsZW0gKQotCQkJCXJl
dCA9IGk7Ci0JCX0pOwotCi0JCXJldHVybiByZXQ7Ci0JfSwKLQotCWF0dHI6IGZ1bmN0aW9uKCBu
YW1lLCB2YWx1ZSwgdHlwZSApIHsKLQkJdmFyIG9wdGlvbnMgPSBuYW1lOwotCQkKLQkJLy8gTG9v
ayBmb3IgdGhlIGNhc2Ugd2hlcmUgd2UncmUgYWNjZXNzaW5nIGEgc3R5bGUgdmFsdWUKLQkJaWYg
KCBuYW1lLmNvbnN0cnVjdG9yID09IFN0cmluZyApCi0JCQlpZiAoIHZhbHVlID09IHVuZGVmaW5l
ZCApCi0JCQkJcmV0dXJuIHRoaXMubGVuZ3RoICYmIGpRdWVyeVsgdHlwZSB8fCAiYXR0ciIgXSgg
dGhpc1swXSwgbmFtZSApIHx8IHVuZGVmaW5lZDsKLQotCQkJZWxzZSB7Ci0JCQkJb3B0aW9ucyA9
IHt9OwotCQkJCW9wdGlvbnNbIG5hbWUgXSA9IHZhbHVlOwotCQkJfQotCQkKLQkJLy8gQ2hlY2sg
dG8gc2VlIGlmIHdlJ3JlIHNldHRpbmcgc3R5bGUgdmFsdWVzCi0JCXJldHVybiB0aGlzLmVhY2go
ZnVuY3Rpb24oaSl7Ci0JCQkvLyBTZXQgYWxsIHRoZSBzdHlsZXMKLQkJCWZvciAoIG5hbWUgaW4g
b3B0aW9ucyApCi0JCQkJalF1ZXJ5LmF0dHIoCi0JCQkJCXR5cGUgPwotCQkJCQkJdGhpcy5zdHls
ZSA6Ci0JCQkJCQl0aGlzLAotCQkJCQluYW1lLCBqUXVlcnkucHJvcCggdGhpcywgb3B0aW9uc1sg
bmFtZSBdLCB0eXBlLCBpLCBuYW1lICkKLQkJCQkpOwotCQl9KTsKLQl9LAotCi0JY3NzOiBmdW5j
dGlvbigga2V5LCB2YWx1ZSApIHsKLQkJLy8gaWdub3JlIG5lZ2F0aXZlIHdpZHRoIGFuZCBoZWln
aHQgdmFsdWVzCi0JCWlmICggKGtleSA9PSAnd2lkdGgnIHx8IGtleSA9PSAnaGVpZ2h0JykgJiYg
cGFyc2VGbG9hdCh2YWx1ZSkgPCAwICkKLQkJCXZhbHVlID0gdW5kZWZpbmVkOwotCQlyZXR1cm4g
dGhpcy5hdHRyKCBrZXksIHZhbHVlLCAiY3VyQ1NTIiApOwotCX0sCi0KLQl0ZXh0OiBmdW5jdGlv
biggdGV4dCApIHsKLQkJaWYgKCB0eXBlb2YgdGV4dCAhPSAib2JqZWN0IiAmJiB0ZXh0ICE9IG51
bGwgKQotCQkJcmV0dXJuIHRoaXMuZW1wdHkoKS5hcHBlbmQoICh0aGlzWzBdICYmIHRoaXNbMF0u
b3duZXJEb2N1bWVudCB8fCBkb2N1bWVudCkuY3JlYXRlVGV4dE5vZGUoIHRleHQgKSApOwotCi0J
CXZhciByZXQgPSAiIjsKLQotCQlqUXVlcnkuZWFjaCggdGV4dCB8fCB0aGlzLCBmdW5jdGlvbigp
ewotCQkJalF1ZXJ5LmVhY2goIHRoaXMuY2hpbGROb2RlcywgZnVuY3Rpb24oKXsKLQkJCQlpZiAo
IHRoaXMubm9kZVR5cGUgIT0gOCApCi0JCQkJCXJldCArPSB0aGlzLm5vZGVUeXBlICE9IDEgPwot
CQkJCQkJdGhpcy5ub2RlVmFsdWUgOgotCQkJCQkJalF1ZXJ5LmZuLnRleHQoIFsgdGhpcyBdICk7
Ci0JCQl9KTsKLQkJfSk7Ci0KLQkJcmV0dXJuIHJldDsKLQl9LAotCi0Jd3JhcEFsbDogZnVuY3Rp
b24oIGh0bWwgKSB7Ci0JCWlmICggdGhpc1swXSApCi0JCQkvLyBUaGUgZWxlbWVudHMgdG8gd3Jh
cCB0aGUgdGFyZ2V0IGFyb3VuZAotCQkJalF1ZXJ5KCBodG1sLCB0aGlzWzBdLm93bmVyRG9jdW1l
bnQgKQotCQkJCS5jbG9uZSgpCi0JCQkJLmluc2VydEJlZm9yZSggdGhpc1swXSApCi0JCQkJLm1h
cChmdW5jdGlvbigpewotCQkJCQl2YXIgZWxlbSA9IHRoaXM7Ci0KLQkJCQkJd2hpbGUgKCBlbGVt
LmZpcnN0Q2hpbGQgKQotCQkJCQkJZWxlbSA9IGVsZW0uZmlyc3RDaGlsZDsKLQotCQkJCQlyZXR1
cm4gZWxlbTsKLQkJCQl9KQotCQkJCS5hcHBlbmQodGhpcyk7Ci0KLQkJcmV0dXJuIHRoaXM7Ci0J
fSwKLQotCXdyYXBJbm5lcjogZnVuY3Rpb24oIGh0bWwgKSB7Ci0JCXJldHVybiB0aGlzLmVhY2go
ZnVuY3Rpb24oKXsKLQkJCWpRdWVyeSggdGhpcyApLmNvbnRlbnRzKCkud3JhcEFsbCggaHRtbCAp
OwotCQl9KTsKLQl9LAotCi0Jd3JhcDogZnVuY3Rpb24oIGh0bWwgKSB7Ci0JCXJldHVybiB0aGlz
LmVhY2goZnVuY3Rpb24oKXsKLQkJCWpRdWVyeSggdGhpcyApLndyYXBBbGwoIGh0bWwgKTsKLQkJ
fSk7Ci0JfSwKLQotCWFwcGVuZDogZnVuY3Rpb24oKSB7Ci0JCXJldHVybiB0aGlzLmRvbU1hbmlw
KGFyZ3VtZW50cywgdHJ1ZSwgZmFsc2UsIGZ1bmN0aW9uKGVsZW0pewotCQkJaWYgKHRoaXMubm9k
ZVR5cGUgPT0gMSkKLQkJCQl0aGlzLmFwcGVuZENoaWxkKCBlbGVtICk7Ci0JCX0pOwotCX0sCi0K
LQlwcmVwZW5kOiBmdW5jdGlvbigpIHsKLQkJcmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRz
LCB0cnVlLCB0cnVlLCBmdW5jdGlvbihlbGVtKXsKLQkJCWlmICh0aGlzLm5vZGVUeXBlID09IDEp
Ci0JCQkJdGhpcy5pbnNlcnRCZWZvcmUoIGVsZW0sIHRoaXMuZmlyc3RDaGlsZCApOwotCQl9KTsK
LQl9LAotCQotCWJlZm9yZTogZnVuY3Rpb24oKSB7Ci0JCXJldHVybiB0aGlzLmRvbU1hbmlwKGFy
Z3VtZW50cywgZmFsc2UsIGZhbHNlLCBmdW5jdGlvbihlbGVtKXsKLQkJCXRoaXMucGFyZW50Tm9k
ZS5pbnNlcnRCZWZvcmUoIGVsZW0sIHRoaXMgKTsKLQkJfSk7Ci0JfSwKLQotCWFmdGVyOiBmdW5j
dGlvbigpIHsKLQkJcmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLCBmYWxzZSwgdHJ1ZSwg
ZnVuY3Rpb24oZWxlbSl7Ci0JCQl0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKCBlbGVtLCB0
aGlzLm5leHRTaWJsaW5nICk7Ci0JCX0pOwotCX0sCi0KLQllbmQ6IGZ1bmN0aW9uKCkgewotCQly
ZXR1cm4gdGhpcy5wcmV2T2JqZWN0IHx8IGpRdWVyeSggW10gKTsKLQl9LAotCi0JZmluZDogZnVu
Y3Rpb24oIHNlbGVjdG9yICkgewotCQl2YXIgZWxlbXMgPSBqUXVlcnkubWFwKHRoaXMsIGZ1bmN0
aW9uKGVsZW0pewotCQkJcmV0dXJuIGpRdWVyeS5maW5kKCBzZWxlY3RvciwgZWxlbSApOwotCQl9
KTsKLQotCQlyZXR1cm4gdGhpcy5wdXNoU3RhY2soIC9bXis+XSBbXis+XS8udGVzdCggc2VsZWN0
b3IgKSB8fCBzZWxlY3Rvci5pbmRleE9mKCIuLiIpID4gLTEgPwotCQkJalF1ZXJ5LnVuaXF1ZSgg
ZWxlbXMgKSA6Ci0JCQllbGVtcyApOwotCX0sCi0KLQljbG9uZTogZnVuY3Rpb24oIGV2ZW50cyAp
IHsKLQkJLy8gRG8gdGhlIGNsb25lCi0JCXZhciByZXQgPSB0aGlzLm1hcChmdW5jdGlvbigpewot
CQkJaWYgKCBqUXVlcnkuYnJvd3Nlci5tc2llICYmICFqUXVlcnkuaXNYTUxEb2ModGhpcykgKSB7
Ci0JCQkJLy8gSUUgY29waWVzIGV2ZW50cyBib3VuZCB2aWEgYXR0YWNoRXZlbnQgd2hlbgotCQkJ
CS8vIHVzaW5nIGNsb25lTm9kZS4gQ2FsbGluZyBkZXRhY2hFdmVudCBvbiB0aGUKLQkJCQkvLyBj
bG9uZSB3aWxsIGFsc28gcmVtb3ZlIHRoZSBldmVudHMgZnJvbSB0aGUgb3JpZ25hbAotCQkJCS8v
IEluIG9yZGVyIHRvIGdldCBhcm91bmQgdGhpcywgd2UgdXNlIGlubmVySFRNTC4KLQkJCQkvLyBV
bmZvcnR1bmF0ZWx5LCB0aGlzIG1lYW5zIHNvbWUgbW9kaWZpY2F0aW9ucyB0byAKLQkJCQkvLyBh
dHRyaWJ1dGVzIGluIElFIHRoYXQgYXJlIGFjdHVhbGx5IG9ubHkgc3RvcmVkIAotCQkJCS8vIGFz
IHByb3BlcnRpZXMgd2lsbCBub3QgYmUgY29waWVkIChzdWNoIGFzIHRoZQotCQkJCS8vIHRoZSBu
YW1lIGF0dHJpYnV0ZSBvbiBhbiBpbnB1dCkuCi0JCQkJdmFyIGNsb25lID0gdGhpcy5jbG9uZU5v
ZGUodHJ1ZSksCi0JCQkJCWNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIp
OwotCQkJCWNvbnRhaW5lci5hcHBlbmRDaGlsZChjbG9uZSk7Ci0JCQkJcmV0dXJuIGpRdWVyeS5j
bGVhbihbY29udGFpbmVyLmlubmVySFRNTF0pWzBdOwotCQkJfSBlbHNlCi0JCQkJcmV0dXJuIHRo
aXMuY2xvbmVOb2RlKHRydWUpOwotCQl9KTsKLQotCQkvLyBOZWVkIHRvIHNldCB0aGUgZXhwYW5k
byB0byBudWxsIG9uIHRoZSBjbG9uZWQgc2V0IGlmIGl0IGV4aXN0cwotCQkvLyByZW1vdmVEYXRh
IGRvZXNuJ3Qgd29yayBoZXJlLCBJRSByZW1vdmVzIGl0IGZyb20gdGhlIG9yaWdpbmFsIGFzIHdl
bGwKLQkJLy8gdGhpcyBpcyBwcmltYXJpbHkgZm9yIElFIGJ1dCB0aGUgZGF0YSBleHBhbmRvIHNo
b3VsZG4ndCBiZSBjb3BpZWQgb3ZlciBpbiBhbnkgYnJvd3NlcgotCQl2YXIgY2xvbmUgPSByZXQu
ZmluZCgiKiIpLmFuZFNlbGYoKS5lYWNoKGZ1bmN0aW9uKCl7Ci0JCQlpZiAoIHRoaXNbIGV4cGFu
ZG8gXSAhPSB1bmRlZmluZWQgKQotCQkJCXRoaXNbIGV4cGFuZG8gXSA9IG51bGw7Ci0JCX0pOwot
CQkKLQkJLy8gQ29weSB0aGUgZXZlbnRzIGZyb20gdGhlIG9yaWdpbmFsIHRvIHRoZSBjbG9uZQot
CQlpZiAoIGV2ZW50cyA9PT0gdHJ1ZSApCi0JCQl0aGlzLmZpbmQoIioiKS5hbmRTZWxmKCkuZWFj
aChmdW5jdGlvbihpKXsKLQkJCQlpZiAodGhpcy5ub2RlVHlwZSA9PSAzKQotCQkJCQlyZXR1cm47
Ci0JCQkJdmFyIGV2ZW50cyA9IGpRdWVyeS5kYXRhKCB0aGlzLCAiZXZlbnRzIiApOwotCi0JCQkJ
Zm9yICggdmFyIHR5cGUgaW4gZXZlbnRzICkKLQkJCQkJZm9yICggdmFyIGhhbmRsZXIgaW4gZXZl
bnRzWyB0eXBlIF0gKQotCQkJCQkJalF1ZXJ5LmV2ZW50LmFkZCggY2xvbmVbIGkgXSwgdHlwZSwg
ZXZlbnRzWyB0eXBlIF1bIGhhbmRsZXIgXSwgZXZlbnRzWyB0eXBlIF1bIGhhbmRsZXIgXS5kYXRh
ICk7Ci0JCQl9KTsKLQotCQkvLyBSZXR1cm4gdGhlIGNsb25lZCBzZXQKLQkJcmV0dXJuIHJldDsK
LQl9LAotCi0JZmlsdGVyOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7Ci0JCXJldHVybiB0aGlzLnB1
c2hTdGFjaygKLQkJCWpRdWVyeS5pc0Z1bmN0aW9uKCBzZWxlY3RvciApICYmCi0JCQlqUXVlcnku
Z3JlcCh0aGlzLCBmdW5jdGlvbihlbGVtLCBpKXsKLQkJCQlyZXR1cm4gc2VsZWN0b3IuY2FsbCgg
ZWxlbSwgaSApOwotCQkJfSkgfHwKLQotCQkJalF1ZXJ5Lm11bHRpRmlsdGVyKCBzZWxlY3Rvciwg
dGhpcyApICk7Ci0JfSwKLQotCW5vdDogZnVuY3Rpb24oIHNlbGVjdG9yICkgewotCQlpZiAoIHNl
bGVjdG9yLmNvbnN0cnVjdG9yID09IFN0cmluZyApCi0JCQkvLyB0ZXN0IHNwZWNpYWwgY2FzZSB3
aGVyZSBqdXN0IG9uZSBzZWxlY3RvciBpcyBwYXNzZWQgaW4KLQkJCWlmICggaXNTaW1wbGUudGVz
dCggc2VsZWN0b3IgKSApCi0JCQkJcmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqUXVlcnkubXVsdGlG
aWx0ZXIoIHNlbGVjdG9yLCB0aGlzLCB0cnVlICkgKTsKLQkJCWVsc2UKLQkJCQlzZWxlY3RvciA9
IGpRdWVyeS5tdWx0aUZpbHRlciggc2VsZWN0b3IsIHRoaXMgKTsKLQotCQl2YXIgaXNBcnJheUxp
a2UgPSBzZWxlY3Rvci5sZW5ndGggJiYgc2VsZWN0b3Jbc2VsZWN0b3IubGVuZ3RoIC0gMV0gIT09
IHVuZGVmaW5lZCAmJiAhc2VsZWN0b3Iubm9kZVR5cGU7Ci0JCXJldHVybiB0aGlzLmZpbHRlcihm
dW5jdGlvbigpIHsKLQkJCXJldHVybiBpc0FycmF5TGlrZSA/IGpRdWVyeS5pbkFycmF5KCB0aGlz
LCBzZWxlY3RvciApIDwgMCA6IHRoaXMgIT0gc2VsZWN0b3I7Ci0JCX0pOwotCX0sCi0KLQlhZGQ6
IGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKLQkJcmV0dXJuICFzZWxlY3RvciA/IHRoaXMgOiB0aGlz
LnB1c2hTdGFjayggalF1ZXJ5Lm1lcmdlKCAKLQkJCXRoaXMuZ2V0KCksCi0JCQlzZWxlY3Rvci5j
b25zdHJ1Y3RvciA9PSBTdHJpbmcgPyAKLQkJCQlqUXVlcnkoIHNlbGVjdG9yICkuZ2V0KCkgOgot
CQkJCXNlbGVjdG9yLmxlbmd0aCAhPSB1bmRlZmluZWQgJiYgKCFzZWxlY3Rvci5ub2RlTmFtZSB8
fCBqUXVlcnkubm9kZU5hbWUoc2VsZWN0b3IsICJmb3JtIikpID8KLQkJCQkJc2VsZWN0b3IgOiBb
c2VsZWN0b3JdICkgKTsKLQl9LAotCi0JaXM6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKLQkJcmV0
dXJuIHNlbGVjdG9yID8KLQkJCWpRdWVyeS5tdWx0aUZpbHRlciggc2VsZWN0b3IsIHRoaXMgKS5s
ZW5ndGggPiAwIDoKLQkJCWZhbHNlOwotCX0sCi0KLQloYXNDbGFzczogZnVuY3Rpb24oIHNlbGVj
dG9yICkgewotCQlyZXR1cm4gdGhpcy5pcyggIi4iICsgc2VsZWN0b3IgKTsKLQl9LAotCQotCXZh
bDogZnVuY3Rpb24oIHZhbHVlICkgewotCQlpZiAoIHZhbHVlID09IHVuZGVmaW5lZCApIHsKLQot
CQkJaWYgKCB0aGlzLmxlbmd0aCApIHsKLQkJCQl2YXIgZWxlbSA9IHRoaXNbMF07Ci0KLQkJCQkv
LyBXZSBuZWVkIHRvIGhhbmRsZSBzZWxlY3QgYm94ZXMgc3BlY2lhbAotCQkJCWlmICggalF1ZXJ5
Lm5vZGVOYW1lKCBlbGVtLCAic2VsZWN0IiApICkgewotCQkJCQl2YXIgaW5kZXggPSBlbGVtLnNl
bGVjdGVkSW5kZXgsCi0JCQkJCQl2YWx1ZXMgPSBbXSwKLQkJCQkJCW9wdGlvbnMgPSBlbGVtLm9w
dGlvbnMsCi0JCQkJCQlvbmUgPSBlbGVtLnR5cGUgPT0gInNlbGVjdC1vbmUiOwotCQkJCQkKLQkJ
CQkJLy8gTm90aGluZyB3YXMgc2VsZWN0ZWQKLQkJCQkJaWYgKCBpbmRleCA8IDAgKQotCQkJCQkJ
cmV0dXJuIG51bGw7Ci0KLQkJCQkJLy8gTG9vcCB0aHJvdWdoIGFsbCB0aGUgc2VsZWN0ZWQgb3B0
aW9ucwotCQkJCQlmb3IgKCB2YXIgaSA9IG9uZSA/IGluZGV4IDogMCwgbWF4ID0gb25lID8gaW5k
ZXggKyAxIDogb3B0aW9ucy5sZW5ndGg7IGkgPCBtYXg7IGkrKyApIHsKLQkJCQkJCXZhciBvcHRp
b24gPSBvcHRpb25zWyBpIF07Ci0KLQkJCQkJCWlmICggb3B0aW9uLnNlbGVjdGVkICkgewotCQkJ
CQkJCS8vIEdldCB0aGUgc3BlY2lmYyB2YWx1ZSBmb3IgdGhlIG9wdGlvbgotCQkJCQkJCXZhbHVl
ID0galF1ZXJ5LmJyb3dzZXIubXNpZSAmJiAhb3B0aW9uLmF0dHJpYnV0ZXMudmFsdWUuc3BlY2lm
aWVkID8gb3B0aW9uLnRleHQgOiBvcHRpb24udmFsdWU7Ci0JCQkJCQkJCi0JCQkJCQkJLy8gV2Ug
ZG9uJ3QgbmVlZCBhbiBhcnJheSBmb3Igb25lIHNlbGVjdHMKLQkJCQkJCQlpZiAoIG9uZSApCi0J
CQkJCQkJCXJldHVybiB2YWx1ZTsKLQkJCQkJCQkKLQkJCQkJCQkvLyBNdWx0aS1TZWxlY3RzIHJl
dHVybiBhbiBhcnJheQotCQkJCQkJCXZhbHVlcy5wdXNoKCB2YWx1ZSApOwotCQkJCQkJfQotCQkJ
CQl9Ci0JCQkJCQotCQkJCQlyZXR1cm4gdmFsdWVzOwotCQkJCQkKLQkJCQkvLyBFdmVyeXRoaW5n
IGVsc2UsIHdlIGp1c3QgZ3JhYiB0aGUgdmFsdWUKLQkJCQl9IGVsc2UKLQkJCQkJcmV0dXJuICh0
aGlzWzBdLnZhbHVlIHx8ICIiKS5yZXBsYWNlKC9cci9nLCAiIik7Ci0KLQkJCX0KLQotCQkJcmV0
dXJuIHVuZGVmaW5lZDsKLQkJfQotCi0JCXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXsKLQkJ
CWlmICggdGhpcy5ub2RlVHlwZSAhPSAxICkKLQkJCQlyZXR1cm47Ci0KLQkJCWlmICggdmFsdWUu
Y29uc3RydWN0b3IgPT0gQXJyYXkgJiYgL3JhZGlvfGNoZWNrYm94Ly50ZXN0KCB0aGlzLnR5cGUg
KSApCi0JCQkJdGhpcy5jaGVja2VkID0gKGpRdWVyeS5pbkFycmF5KHRoaXMudmFsdWUsIHZhbHVl
KSA+PSAwIHx8Ci0JCQkJCWpRdWVyeS5pbkFycmF5KHRoaXMubmFtZSwgdmFsdWUpID49IDApOwot
Ci0JCQllbHNlIGlmICggalF1ZXJ5Lm5vZGVOYW1lKCB0aGlzLCAic2VsZWN0IiApICkgewotCQkJ
CXZhciB2YWx1ZXMgPSB2YWx1ZS5jb25zdHJ1Y3RvciA9PSBBcnJheSA/Ci0JCQkJCXZhbHVlIDoK
LQkJCQkJWyB2YWx1ZSBdOwotCi0JCQkJalF1ZXJ5KCAib3B0aW9uIiwgdGhpcyApLmVhY2goZnVu
Y3Rpb24oKXsKLQkJCQkJdGhpcy5zZWxlY3RlZCA9IChqUXVlcnkuaW5BcnJheSggdGhpcy52YWx1
ZSwgdmFsdWVzICkgPj0gMCB8fAotCQkJCQkJalF1ZXJ5LmluQXJyYXkoIHRoaXMudGV4dCwgdmFs
dWVzICkgPj0gMCk7Ci0JCQkJfSk7Ci0KLQkJCQlpZiAoICF2YWx1ZXMubGVuZ3RoICkKLQkJCQkJ
dGhpcy5zZWxlY3RlZEluZGV4ID0gLTE7Ci0KLQkJCX0gZWxzZQotCQkJCXRoaXMudmFsdWUgPSB2
YWx1ZTsKLQkJfSk7Ci0JfSwKLQkKLQlodG1sOiBmdW5jdGlvbiggdmFsdWUgKSB7Ci0JCXJldHVy
biB2YWx1ZSA9PSB1bmRlZmluZWQgPwotCQkJKHRoaXMubGVuZ3RoID8KLQkJCQl0aGlzWzBdLmlu
bmVySFRNTCA6Ci0JCQkJbnVsbCkgOgotCQkJdGhpcy5lbXB0eSgpLmFwcGVuZCggdmFsdWUgKTsK
LQl9LAotCi0JcmVwbGFjZVdpdGg6IGZ1bmN0aW9uKCB2YWx1ZSApIHsKLQkJcmV0dXJuIHRoaXMu
YWZ0ZXIoIHZhbHVlICkucmVtb3ZlKCk7Ci0JfSwKLQotCWVxOiBmdW5jdGlvbiggaSApIHsKLQkJ
cmV0dXJuIHRoaXMuc2xpY2UoIGksIGkgKyAxICk7Ci0JfSwKLQotCXNsaWNlOiBmdW5jdGlvbigp
IHsKLQkJcmV0dXJuIHRoaXMucHVzaFN0YWNrKCBBcnJheS5wcm90b3R5cGUuc2xpY2UuYXBwbHko
IHRoaXMsIGFyZ3VtZW50cyApICk7Ci0JfSwKLQotCW1hcDogZnVuY3Rpb24oIGNhbGxiYWNrICkg
ewotCQlyZXR1cm4gdGhpcy5wdXNoU3RhY2soIGpRdWVyeS5tYXAodGhpcywgZnVuY3Rpb24oZWxl
bSwgaSl7Ci0JCQlyZXR1cm4gY2FsbGJhY2suY2FsbCggZWxlbSwgaSwgZWxlbSApOwotCQl9KSk7
Ci0JfSwKLQotCWFuZFNlbGY6IGZ1bmN0aW9uKCkgewotCQlyZXR1cm4gdGhpcy5hZGQoIHRoaXMu
cHJldk9iamVjdCApOwotCX0sCi0KLQlkYXRhOiBmdW5jdGlvbigga2V5LCB2YWx1ZSApewotCQl2
YXIgcGFydHMgPSBrZXkuc3BsaXQoIi4iKTsKLQkJcGFydHNbMV0gPSBwYXJ0c1sxXSA/ICIuIiAr
IHBhcnRzWzFdIDogIiI7Ci0KLQkJaWYgKCB2YWx1ZSA9PSBudWxsICkgewotCQkJdmFyIGRhdGEg
PSB0aGlzLnRyaWdnZXJIYW5kbGVyKCJnZXREYXRhIiArIHBhcnRzWzFdICsgIiEiLCBbcGFydHNb
MF1dKTsKLQkJCQotCQkJaWYgKCBkYXRhID09IHVuZGVmaW5lZCAmJiB0aGlzLmxlbmd0aCApCi0J
CQkJZGF0YSA9IGpRdWVyeS5kYXRhKCB0aGlzWzBdLCBrZXkgKTsKLQotCQkJcmV0dXJuIGRhdGEg
PT0gbnVsbCAmJiBwYXJ0c1sxXSA/Ci0JCQkJdGhpcy5kYXRhKCBwYXJ0c1swXSApIDoKLQkJCQlk
YXRhOwotCQl9IGVsc2UKLQkJCXJldHVybiB0aGlzLnRyaWdnZXIoInNldERhdGEiICsgcGFydHNb
MV0gKyAiISIsIFtwYXJ0c1swXSwgdmFsdWVdKS5lYWNoKGZ1bmN0aW9uKCl7Ci0JCQkJalF1ZXJ5
LmRhdGEoIHRoaXMsIGtleSwgdmFsdWUgKTsKLQkJCX0pOwotCX0sCi0KLQlyZW1vdmVEYXRhOiBm
dW5jdGlvbigga2V5ICl7Ci0JCXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXsKLQkJCWpRdWVy
eS5yZW1vdmVEYXRhKCB0aGlzLCBrZXkgKTsKLQkJfSk7Ci0JfSwKLQkKLQlkb21NYW5pcDogZnVu
Y3Rpb24oIGFyZ3MsIHRhYmxlLCByZXZlcnNlLCBjYWxsYmFjayApIHsKLQkJdmFyIGNsb25lID0g
dGhpcy5sZW5ndGggPiAxLCBlbGVtczsgCi0KLQkJcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigp
ewotCQkJaWYgKCAhZWxlbXMgKSB7Ci0JCQkJZWxlbXMgPSBqUXVlcnkuY2xlYW4oIGFyZ3MsIHRo
aXMub3duZXJEb2N1bWVudCApOwotCi0JCQkJaWYgKCByZXZlcnNlICkKLQkJCQkJZWxlbXMucmV2
ZXJzZSgpOwotCQkJfQotCi0JCQl2YXIgb2JqID0gdGhpczsKLQotCQkJaWYgKCB0YWJsZSAmJiBq
UXVlcnkubm9kZU5hbWUoIHRoaXMsICJ0YWJsZSIgKSAmJiBqUXVlcnkubm9kZU5hbWUoIGVsZW1z
WzBdLCAidHIiICkgKQotCQkJCW9iaiA9IHRoaXMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRib2R5
IilbMF0gfHwgdGhpcy5hcHBlbmRDaGlsZCggdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoInRib2R5IikgKTsKLQotCQkJdmFyIHNjcmlwdHMgPSBqUXVlcnkoIFtdICk7Ci0KLQkJCWpR
dWVyeS5lYWNoKGVsZW1zLCBmdW5jdGlvbigpewotCQkJCXZhciBlbGVtID0gY2xvbmUgPwotCQkJ
CQlqUXVlcnkoIHRoaXMgKS5jbG9uZSggdHJ1ZSApWzBdIDoKLQkJCQkJdGhpczsKLQotCQkJCS8v
IGV4ZWN1dGUgYWxsIHNjcmlwdHMgYWZ0ZXIgdGhlIGVsZW1lbnRzIGhhdmUgYmVlbiBpbmplY3Rl
ZAotCQkJCWlmICggalF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCAic2NyaXB0IiApICkgewotCQkJCQlz
Y3JpcHRzID0gc2NyaXB0cy5hZGQoIGVsZW0gKTsKLQkJCQl9IGVsc2UgewotCQkJCQkvLyBSZW1v
dmUgYW55IGlubmVyIHNjcmlwdHMgZm9yIGxhdGVyIGV2YWx1YXRpb24KLQkJCQkJaWYgKCBlbGVt
Lm5vZGVUeXBlID09IDEgKQotCQkJCQkJc2NyaXB0cyA9IHNjcmlwdHMuYWRkKCBqUXVlcnkoICJz
Y3JpcHQiLCBlbGVtICkucmVtb3ZlKCkgKTsKLQotCQkJCQkvLyBJbmplY3QgdGhlIGVsZW1lbnRz
IGludG8gdGhlIGRvY3VtZW50Ci0JCQkJCWNhbGxiYWNrLmNhbGwoIG9iaiwgZWxlbSApOwotCQkJ
CX0KLQkJCX0pOwotCi0JCQlzY3JpcHRzLmVhY2goIGV2YWxTY3JpcHQgKTsKLQkJfSk7Ci0JfQot
fTsKLQotLy8gR2l2ZSB0aGUgaW5pdCBmdW5jdGlvbiB0aGUgalF1ZXJ5IHByb3RvdHlwZSBmb3Ig
bGF0ZXIgaW5zdGFudGlhdGlvbgotalF1ZXJ5LnByb3RvdHlwZS5pbml0LnByb3RvdHlwZSA9IGpR
dWVyeS5wcm90b3R5cGU7Ci0KLWZ1bmN0aW9uIGV2YWxTY3JpcHQoIGksIGVsZW0gKSB7Ci0JaWYg
KCBlbGVtLnNyYyApCi0JCWpRdWVyeS5hamF4KHsKLQkJCXVybDogZWxlbS5zcmMsCi0JCQlhc3lu
YzogZmFsc2UsCi0JCQlkYXRhVHlwZTogInNjcmlwdCIKLQkJfSk7Ci0KLQllbHNlCi0JCWpRdWVy
eS5nbG9iYWxFdmFsKCBlbGVtLnRleHQgfHwgZWxlbS50ZXh0Q29udGVudCB8fCBlbGVtLmlubmVy
SFRNTCB8fCAiIiApOwotCi0JaWYgKCBlbGVtLnBhcmVudE5vZGUgKQotCQllbGVtLnBhcmVudE5v
ZGUucmVtb3ZlQ2hpbGQoIGVsZW0gKTsKLX0KLQotalF1ZXJ5LmV4dGVuZCA9IGpRdWVyeS5mbi5l
eHRlbmQgPSBmdW5jdGlvbigpIHsKLQkvLyBjb3B5IHJlZmVyZW5jZSB0byB0YXJnZXQgb2JqZWN0
Ci0JdmFyIHRhcmdldCA9IGFyZ3VtZW50c1swXSB8fCB7fSwgaSA9IDEsIGxlbmd0aCA9IGFyZ3Vt
ZW50cy5sZW5ndGgsIGRlZXAgPSBmYWxzZSwgb3B0aW9uczsKLQotCS8vIEhhbmRsZSBhIGRlZXAg
Y29weSBzaXR1YXRpb24KLQlpZiAoIHRhcmdldC5jb25zdHJ1Y3RvciA9PSBCb29sZWFuICkgewot
CQlkZWVwID0gdGFyZ2V0OwotCQl0YXJnZXQgPSBhcmd1bWVudHNbMV0gfHwge307Ci0JCS8vIHNr
aXAgdGhlIGJvb2xlYW4gYW5kIHRoZSB0YXJnZXQKLQkJaSA9IDI7Ci0JfQotCi0JLy8gSGFuZGxl
IGNhc2Ugd2hlbiB0YXJnZXQgaXMgYSBzdHJpbmcgb3Igc29tZXRoaW5nIChwb3NzaWJsZSBpbiBk
ZWVwIGNvcHkpCi0JaWYgKCB0eXBlb2YgdGFyZ2V0ICE9ICJvYmplY3QiICYmIHR5cGVvZiB0YXJn
ZXQgIT0gImZ1bmN0aW9uIiApCi0JCXRhcmdldCA9IHt9OwotCi0JLy8gZXh0ZW5kIGpRdWVyeSBp
dHNlbGYgaWYgb25seSBvbmUgYXJndW1lbnQgaXMgcGFzc2VkCi0JaWYgKCBsZW5ndGggPT0gMSAp
IHsKLQkJdGFyZ2V0ID0gdGhpczsKLQkJaSA9IDA7Ci0JfQotCi0JZm9yICggOyBpIDwgbGVuZ3Ro
OyBpKysgKQotCQkvLyBPbmx5IGRlYWwgd2l0aCBub24tbnVsbC91bmRlZmluZWQgdmFsdWVzCi0J
CWlmICggKG9wdGlvbnMgPSBhcmd1bWVudHNbIGkgXSkgIT0gbnVsbCApCi0JCQkvLyBFeHRlbmQg
dGhlIGJhc2Ugb2JqZWN0Ci0JCQlmb3IgKCB2YXIgbmFtZSBpbiBvcHRpb25zICkgewotCQkJCS8v
IFByZXZlbnQgbmV2ZXItZW5kaW5nIGxvb3AKLQkJCQlpZiAoIHRhcmdldCA9PT0gb3B0aW9uc1sg
bmFtZSBdICkKLQkJCQkJY29udGludWU7Ci0KLQkJCQkvLyBSZWN1cnNlIGlmIHdlJ3JlIG1lcmdp
bmcgb2JqZWN0IHZhbHVlcwotCQkJCWlmICggZGVlcCAmJiBvcHRpb25zWyBuYW1lIF0gJiYgdHlw
ZW9mIG9wdGlvbnNbIG5hbWUgXSA9PSAib2JqZWN0IiAmJiB0YXJnZXRbIG5hbWUgXSAmJiAhb3B0
aW9uc1sgbmFtZSBdLm5vZGVUeXBlICkKLQkJCQkJdGFyZ2V0WyBuYW1lIF0gPSBqUXVlcnkuZXh0
ZW5kKCB0YXJnZXRbIG5hbWUgXSwgb3B0aW9uc1sgbmFtZSBdICk7Ci0KLQkJCQkvLyBEb24ndCBi
cmluZyBpbiB1bmRlZmluZWQgdmFsdWVzCi0JCQkJZWxzZSBpZiAoIG9wdGlvbnNbIG5hbWUgXSAh
PSB1bmRlZmluZWQgKQotCQkJCQl0YXJnZXRbIG5hbWUgXSA9IG9wdGlvbnNbIG5hbWUgXTsKLQot
CQkJfQotCi0JLy8gUmV0dXJuIHRoZSBtb2RpZmllZCBvYmplY3QKLQlyZXR1cm4gdGFyZ2V0Owot
fTsKLQotdmFyIGV4cGFuZG8gPSAialF1ZXJ5IiArIChuZXcgRGF0ZSgpKS5nZXRUaW1lKCksIHV1
aWQgPSAwLCB3aW5kb3dEYXRhID0ge307Ci0KLS8vIGV4Y2x1ZGUgdGhlIGZvbGxvd2luZyBjc3Mg
cHJvcGVydGllcyB0byBhZGQgcHgKLXZhciBleGNsdWRlID0gL3otP2luZGV4fGZvbnQtP3dlaWdo
dHxvcGFjaXR5fHpvb218bGluZS0/aGVpZ2h0L2k7Ci0KLWpRdWVyeS5leHRlbmQoewotCW5vQ29u
ZmxpY3Q6IGZ1bmN0aW9uKCBkZWVwICkgewotCQl3aW5kb3cuJCA9IF8kOwotCi0JCWlmICggZGVl
cCApCi0JCQl3aW5kb3cualF1ZXJ5ID0gX2pRdWVyeTsKLQotCQlyZXR1cm4galF1ZXJ5OwotCX0s
Ci0KLQkvLyBTZWUgdGVzdC91bml0L2NvcmUuanMgZm9yIGRldGFpbHMgY29uY2VybmluZyB0aGlz
IGZ1bmN0aW9uLgotCWlzRnVuY3Rpb246IGZ1bmN0aW9uKCBmbiApIHsKLQkJcmV0dXJuICEhZm4g
JiYgdHlwZW9mIGZuICE9ICJzdHJpbmciICYmICFmbi5ub2RlTmFtZSAmJiAKLQkJCWZuLmNvbnN0
cnVjdG9yICE9IEFycmF5ICYmIC9mdW5jdGlvbi9pLnRlc3QoIGZuICsgIiIgKTsKLQl9LAotCQot
CS8vIGNoZWNrIGlmIGFuIGVsZW1lbnQgaXMgaW4gYSAob3IgaXMgYW4pIFhNTCBkb2N1bWVudAot
CWlzWE1MRG9jOiBmdW5jdGlvbiggZWxlbSApIHsKLQkJcmV0dXJuIGVsZW0uZG9jdW1lbnRFbGVt
ZW50ICYmICFlbGVtLmJvZHkgfHwKLQkJCWVsZW0udGFnTmFtZSAmJiBlbGVtLm93bmVyRG9jdW1l
bnQgJiYgIWVsZW0ub3duZXJEb2N1bWVudC5ib2R5OwotCX0sCi0KLQkvLyBFdmFsdWxhdGVzIGEg
c2NyaXB0IGluIGEgZ2xvYmFsIGNvbnRleHQKLQlnbG9iYWxFdmFsOiBmdW5jdGlvbiggZGF0YSAp
IHsKLQkJZGF0YSA9IGpRdWVyeS50cmltKCBkYXRhICk7Ci0KLQkJaWYgKCBkYXRhICkgewotCQkJ
Ly8gSW5zcGlyZWQgYnkgY29kZSBieSBBbmRyZWEgR2lhbW1hcmNoaQotCQkJLy8gaHR0cDovL3dl
YnJlZmxlY3Rpb24uYmxvZ3Nwb3QuY29tLzIwMDcvMDgvZ2xvYmFsLXNjb3BlLWV2YWx1YXRpb24t
YW5kLWRvbS5odG1sCi0JCQl2YXIgaGVhZCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1l
KCJoZWFkIilbMF0gfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LAotCQkJCXNjcmlwdCA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpOwotCi0JCQlzY3JpcHQudHlwZSA9ICJ0ZXh0
L2phdmFzY3JpcHQiOwotCQkJaWYgKCBqUXVlcnkuYnJvd3Nlci5tc2llICkKLQkJCQlzY3JpcHQu
dGV4dCA9IGRhdGE7Ci0JCQllbHNlCi0JCQkJc2NyaXB0LmFwcGVuZENoaWxkKCBkb2N1bWVudC5j
cmVhdGVUZXh0Tm9kZSggZGF0YSApICk7Ci0KLQkJCWhlYWQuYXBwZW5kQ2hpbGQoIHNjcmlwdCAp
OwotCQkJaGVhZC5yZW1vdmVDaGlsZCggc2NyaXB0ICk7Ci0JCX0KLQl9LAotCi0Jbm9kZU5hbWU6
IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkgewotCQlyZXR1cm4gZWxlbS5ub2RlTmFtZSAmJiBlbGVt
Lm5vZGVOYW1lLnRvVXBwZXJDYXNlKCkgPT0gbmFtZS50b1VwcGVyQ2FzZSgpOwotCX0sCi0JCi0J
Y2FjaGU6IHt9LAotCQotCWRhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBkYXRhICkgewotCQll
bGVtID0gZWxlbSA9PSB3aW5kb3cgPwotCQkJd2luZG93RGF0YSA6Ci0JCQllbGVtOwotCi0JCXZh
ciBpZCA9IGVsZW1bIGV4cGFuZG8gXTsKLQotCQkvLyBDb21wdXRlIGEgdW5pcXVlIElEIGZvciB0
aGUgZWxlbWVudAotCQlpZiAoICFpZCApIAotCQkJaWQgPSBlbGVtWyBleHBhbmRvIF0gPSArK3V1
aWQ7Ci0KLQkJLy8gT25seSBnZW5lcmF0ZSB0aGUgZGF0YSBjYWNoZSBpZiB3ZSdyZQotCQkvLyB0
cnlpbmcgdG8gYWNjZXNzIG9yIG1hbmlwdWxhdGUgaXQKLQkJaWYgKCBuYW1lICYmICFqUXVlcnku
Y2FjaGVbIGlkIF0gKQotCQkJalF1ZXJ5LmNhY2hlWyBpZCBdID0ge307Ci0JCQotCQkvLyBQcmV2
ZW50IG92ZXJyaWRpbmcgdGhlIG5hbWVkIGNhY2hlIHdpdGggdW5kZWZpbmVkIHZhbHVlcwotCQlp
ZiAoIGRhdGEgIT0gdW5kZWZpbmVkICkKLQkJCWpRdWVyeS5jYWNoZVsgaWQgXVsgbmFtZSBdID0g
ZGF0YTsKLQkJCi0JCS8vIFJldHVybiB0aGUgbmFtZWQgY2FjaGUgZGF0YSwgb3IgdGhlIElEIGZv
ciB0aGUgZWxlbWVudAkKLQkJcmV0dXJuIG5hbWUgPwotCQkJalF1ZXJ5LmNhY2hlWyBpZCBdWyBu
YW1lIF0gOgotCQkJaWQ7Ci0JfSwKLQkKLQlyZW1vdmVEYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFt
ZSApIHsKLQkJZWxlbSA9IGVsZW0gPT0gd2luZG93ID8KLQkJCXdpbmRvd0RhdGEgOgotCQkJZWxl
bTsKLQotCQl2YXIgaWQgPSBlbGVtWyBleHBhbmRvIF07Ci0KLQkJLy8gSWYgd2Ugd2FudCB0byBy
ZW1vdmUgYSBzcGVjaWZpYyBzZWN0aW9uIG9mIHRoZSBlbGVtZW50J3MgZGF0YQotCQlpZiAoIG5h
bWUgKSB7Ci0JCQlpZiAoIGpRdWVyeS5jYWNoZVsgaWQgXSApIHsKLQkJCQkvLyBSZW1vdmUgdGhl
IHNlY3Rpb24gb2YgY2FjaGUgZGF0YQotCQkJCWRlbGV0ZSBqUXVlcnkuY2FjaGVbIGlkIF1bIG5h
bWUgXTsKLQotCQkJCS8vIElmIHdlJ3ZlIHJlbW92ZWQgYWxsIHRoZSBkYXRhLCByZW1vdmUgdGhl
IGVsZW1lbnQncyBjYWNoZQotCQkJCW5hbWUgPSAiIjsKLQotCQkJCWZvciAoIG5hbWUgaW4galF1
ZXJ5LmNhY2hlWyBpZCBdICkKLQkJCQkJYnJlYWs7Ci0KLQkJCQlpZiAoICFuYW1lICkKLQkJCQkJ
alF1ZXJ5LnJlbW92ZURhdGEoIGVsZW0gKTsKLQkJCX0KLQotCQkvLyBPdGhlcndpc2UsIHdlIHdh
bnQgdG8gcmVtb3ZlIGFsbCBvZiB0aGUgZWxlbWVudCdzIGRhdGEKLQkJfSBlbHNlIHsKLQkJCS8v
IENsZWFuIHVwIHRoZSBlbGVtZW50IGV4cGFuZG8KLQkJCXRyeSB7Ci0JCQkJZGVsZXRlIGVsZW1b
IGV4cGFuZG8gXTsKLQkJCX0gY2F0Y2goZSl7Ci0JCQkJLy8gSUUgaGFzIHRyb3VibGUgZGlyZWN0
bHkgcmVtb3ZpbmcgdGhlIGV4cGFuZG8KLQkJCQkvLyBidXQgaXQncyBvayB3aXRoIHVzaW5nIHJl
bW92ZUF0dHJpYnV0ZQotCQkJCWlmICggZWxlbS5yZW1vdmVBdHRyaWJ1dGUgKQotCQkJCQllbGVt
LnJlbW92ZUF0dHJpYnV0ZSggZXhwYW5kbyApOwotCQkJfQotCi0JCQkvLyBDb21wbGV0ZWx5IHJl
bW92ZSB0aGUgZGF0YSBjYWNoZQotCQkJZGVsZXRlIGpRdWVyeS5jYWNoZVsgaWQgXTsKLQkJfQot
CX0sCi0KLQkvLyBhcmdzIGlzIGZvciBpbnRlcm5hbCB1c2FnZSBvbmx5Ci0JZWFjaDogZnVuY3Rp
b24oIG9iamVjdCwgY2FsbGJhY2ssIGFyZ3MgKSB7Ci0JCWlmICggYXJncyApIHsKLQkJCWlmICgg
b2JqZWN0Lmxlbmd0aCA9PSB1bmRlZmluZWQgKSB7Ci0JCQkJZm9yICggdmFyIG5hbWUgaW4gb2Jq
ZWN0ICkKLQkJCQkJaWYgKCBjYWxsYmFjay5hcHBseSggb2JqZWN0WyBuYW1lIF0sIGFyZ3MgKSA9
PT0gZmFsc2UgKQotCQkJCQkJYnJlYWs7Ci0JCQl9IGVsc2UKLQkJCQlmb3IgKCB2YXIgaSA9IDAs
IGxlbmd0aCA9IG9iamVjdC5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKyApCi0JCQkJCWlmICggY2Fs
bGJhY2suYXBwbHkoIG9iamVjdFsgaSBdLCBhcmdzICkgPT09IGZhbHNlICkKLQkJCQkJCWJyZWFr
OwotCi0JCS8vIEEgc3BlY2lhbCwgZmFzdCwgY2FzZSBmb3IgdGhlIG1vc3QgY29tbW9uIHVzZSBv
ZiBlYWNoCi0JCX0gZWxzZSB7Ci0JCQlpZiAoIG9iamVjdC5sZW5ndGggPT0gdW5kZWZpbmVkICkg
ewotCQkJCWZvciAoIHZhciBuYW1lIGluIG9iamVjdCApCi0JCQkJCWlmICggY2FsbGJhY2suY2Fs
bCggb2JqZWN0WyBuYW1lIF0sIG5hbWUsIG9iamVjdFsgbmFtZSBdICkgPT09IGZhbHNlICkKLQkJ
CQkJCWJyZWFrOwotCQkJfSBlbHNlCi0JCQkJZm9yICggdmFyIGkgPSAwLCBsZW5ndGggPSBvYmpl
Y3QubGVuZ3RoLCB2YWx1ZSA9IG9iamVjdFswXTsgCi0JCQkJCWkgPCBsZW5ndGggJiYgY2FsbGJh
Y2suY2FsbCggdmFsdWUsIGksIHZhbHVlICkgIT09IGZhbHNlOyB2YWx1ZSA9IG9iamVjdFsrK2ld
ICl7fQotCQl9Ci0KLQkJcmV0dXJuIG9iamVjdDsKLQl9LAotCQotCXByb3A6IGZ1bmN0aW9uKCBl
bGVtLCB2YWx1ZSwgdHlwZSwgaSwgbmFtZSApIHsKLQkJCS8vIEhhbmRsZSBleGVjdXRhYmxlIGZ1
bmN0aW9ucwotCQkJaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggdmFsdWUgKSApCi0JCQkJdmFsdWUg
PSB2YWx1ZS5jYWxsKCBlbGVtLCBpICk7Ci0JCQkJCi0JCQkvLyBIYW5kbGUgcGFzc2luZyBpbiBh
IG51bWJlciB0byBhIENTUyBwcm9wZXJ0eQotCQkJcmV0dXJuIHZhbHVlICYmIHZhbHVlLmNvbnN0
cnVjdG9yID09IE51bWJlciAmJiB0eXBlID09ICJjdXJDU1MiICYmICFleGNsdWRlLnRlc3QoIG5h
bWUgKSA/Ci0JCQkJdmFsdWUgKyAicHgiIDoKLQkJCQl2YWx1ZTsKLQl9LAotCi0JY2xhc3NOYW1l
OiB7Ci0JCS8vIGludGVybmFsIG9ubHksIHVzZSBhZGRDbGFzcygiY2xhc3MiKQotCQlhZGQ6IGZ1
bmN0aW9uKCBlbGVtLCBjbGFzc05hbWVzICkgewotCQkJalF1ZXJ5LmVhY2goKGNsYXNzTmFtZXMg
fHwgIiIpLnNwbGl0KC9ccysvKSwgZnVuY3Rpb24oaSwgY2xhc3NOYW1lKXsKLQkJCQlpZiAoIGVs
ZW0ubm9kZVR5cGUgPT0gMSAmJiAhalF1ZXJ5LmNsYXNzTmFtZS5oYXMoIGVsZW0uY2xhc3NOYW1l
LCBjbGFzc05hbWUgKSApCi0JCQkJCWVsZW0uY2xhc3NOYW1lICs9IChlbGVtLmNsYXNzTmFtZSA/
ICIgIiA6ICIiKSArIGNsYXNzTmFtZTsKLQkJCX0pOwotCQl9LAotCi0JCS8vIGludGVybmFsIG9u
bHksIHVzZSByZW1vdmVDbGFzcygiY2xhc3MiKQotCQlyZW1vdmU6IGZ1bmN0aW9uKCBlbGVtLCBj
bGFzc05hbWVzICkgewotCQkJaWYgKGVsZW0ubm9kZVR5cGUgPT0gMSkKLQkJCQllbGVtLmNsYXNz
TmFtZSA9IGNsYXNzTmFtZXMgIT0gdW5kZWZpbmVkID8KLQkJCQkJalF1ZXJ5LmdyZXAoZWxlbS5j
bGFzc05hbWUuc3BsaXQoL1xzKy8pLCBmdW5jdGlvbihjbGFzc05hbWUpewotCQkJCQkJcmV0dXJu
ICFqUXVlcnkuY2xhc3NOYW1lLmhhcyggY2xhc3NOYW1lcywgY2xhc3NOYW1lICk7CQotCQkJCQl9
KS5qb2luKCIgIikgOgotCQkJCQkiIjsKLQkJfSwKLQotCQkvLyBpbnRlcm5hbCBvbmx5LCB1c2Ug
aXMoIi5jbGFzcyIpCi0JCWhhczogZnVuY3Rpb24oIGVsZW0sIGNsYXNzTmFtZSApIHsKLQkJCXJl
dHVybiBqUXVlcnkuaW5BcnJheSggY2xhc3NOYW1lLCAoZWxlbS5jbGFzc05hbWUgfHwgZWxlbSku
dG9TdHJpbmcoKS5zcGxpdCgvXHMrLykgKSA+IC0xOwotCQl9Ci0JfSwKLQotCS8vIEEgbWV0aG9k
IGZvciBxdWlja2x5IHN3YXBwaW5nIGluL291dCBDU1MgcHJvcGVydGllcyB0byBnZXQgY29ycmVj
dCBjYWxjdWxhdGlvbnMKLQlzd2FwOiBmdW5jdGlvbiggZWxlbSwgb3B0aW9ucywgY2FsbGJhY2sg
KSB7Ci0JCXZhciBvbGQgPSB7fTsKLQkJLy8gUmVtZW1iZXIgdGhlIG9sZCB2YWx1ZXMsIGFuZCBp
bnNlcnQgdGhlIG5ldyBvbmVzCi0JCWZvciAoIHZhciBuYW1lIGluIG9wdGlvbnMgKSB7Ci0JCQlv
bGRbIG5hbWUgXSA9IGVsZW0uc3R5bGVbIG5hbWUgXTsKLQkJCWVsZW0uc3R5bGVbIG5hbWUgXSA9
IG9wdGlvbnNbIG5hbWUgXTsKLQkJfQotCi0JCWNhbGxiYWNrLmNhbGwoIGVsZW0gKTsKLQotCQkv
LyBSZXZlcnQgdGhlIG9sZCB2YWx1ZXMKLQkJZm9yICggdmFyIG5hbWUgaW4gb3B0aW9ucyApCi0J
CQllbGVtLnN0eWxlWyBuYW1lIF0gPSBvbGRbIG5hbWUgXTsKLQl9LAotCi0JY3NzOiBmdW5jdGlv
biggZWxlbSwgbmFtZSwgZm9yY2UgKSB7Ci0JCWlmICggbmFtZSA9PSAid2lkdGgiIHx8IG5hbWUg
PT0gImhlaWdodCIgKSB7Ci0JCQl2YXIgdmFsLCBwcm9wcyA9IHsgcG9zaXRpb246ICJhYnNvbHV0
ZSIsIHZpc2liaWxpdHk6ICJoaWRkZW4iLCBkaXNwbGF5OiJibG9jayIgfSwgd2hpY2ggPSBuYW1l
ID09ICJ3aWR0aCIgPyBbICJMZWZ0IiwgIlJpZ2h0IiBdIDogWyAiVG9wIiwgIkJvdHRvbSIgXTsK
LQkJCi0JCQlmdW5jdGlvbiBnZXRXSCgpIHsKLQkJCQl2YWwgPSBuYW1lID09ICJ3aWR0aCIgPyBl
bGVtLm9mZnNldFdpZHRoIDogZWxlbS5vZmZzZXRIZWlnaHQ7Ci0JCQkJdmFyIHBhZGRpbmcgPSAw
LCBib3JkZXIgPSAwOwotCQkJCWpRdWVyeS5lYWNoKCB3aGljaCwgZnVuY3Rpb24oKSB7Ci0JCQkJ
CXBhZGRpbmcgKz0gcGFyc2VGbG9hdChqUXVlcnkuY3VyQ1NTKCBlbGVtLCAicGFkZGluZyIgKyB0
aGlzLCB0cnVlKSkgfHwgMDsKLQkJCQkJYm9yZGVyICs9IHBhcnNlRmxvYXQoalF1ZXJ5LmN1ckNT
UyggZWxlbSwgImJvcmRlciIgKyB0aGlzICsgIldpZHRoIiwgdHJ1ZSkpIHx8IDA7Ci0JCQkJfSk7
Ci0JCQkJdmFsIC09IE1hdGgucm91bmQocGFkZGluZyArIGJvcmRlcik7Ci0JCQl9Ci0JCQotCQkJ
aWYgKCBqUXVlcnkoZWxlbSkuaXMoIjp2aXNpYmxlIikgKQotCQkJCWdldFdIKCk7Ci0JCQllbHNl
Ci0JCQkJalF1ZXJ5LnN3YXAoIGVsZW0sIHByb3BzLCBnZXRXSCApOwotCQkJCi0JCQlyZXR1cm4g
TWF0aC5tYXgoMCwgdmFsKTsKLQkJfQotCQkKLQkJcmV0dXJuIGpRdWVyeS5jdXJDU1MoIGVsZW0s
IG5hbWUsIGZvcmNlICk7Ci0JfSwKLQotCWN1ckNTUzogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGZv
cmNlICkgewotCQl2YXIgcmV0OwotCi0JCS8vIEEgaGVscGVyIG1ldGhvZCBmb3IgZGV0ZXJtaW5p
bmcgaWYgYW4gZWxlbWVudCdzIHZhbHVlcyBhcmUgYnJva2VuCi0JCWZ1bmN0aW9uIGNvbG9yKCBl
bGVtICkgewotCQkJaWYgKCAhalF1ZXJ5LmJyb3dzZXIuc2FmYXJpICkKLQkJCQlyZXR1cm4gZmFs
c2U7Ci0KLQkJCXZhciByZXQgPSBkb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxl
KCBlbGVtLCBudWxsICk7Ci0JCQlyZXR1cm4gIXJldCB8fCByZXQuZ2V0UHJvcGVydHlWYWx1ZSgi
Y29sb3IiKSA9PSAiIjsKLQkJfQotCi0JCS8vIFdlIG5lZWQgdG8gaGFuZGxlIG9wYWNpdHkgc3Bl
Y2lhbCBpbiBJRQotCQlpZiAoIG5hbWUgPT0gIm9wYWNpdHkiICYmIGpRdWVyeS5icm93c2VyLm1z
aWUgKSB7Ci0JCQlyZXQgPSBqUXVlcnkuYXR0ciggZWxlbS5zdHlsZSwgIm9wYWNpdHkiICk7Ci0K
LQkJCXJldHVybiByZXQgPT0gIiIgPwotCQkJCSIxIiA6Ci0JCQkJcmV0OwotCQl9Ci0JCS8vIE9w
ZXJhIHNvbWV0aW1lcyB3aWxsIGdpdmUgdGhlIHdyb25nIGRpc3BsYXkgYW5zd2VyLCB0aGlzIGZp
eGVzIGl0LCBzZWUgIzIwMzcKLQkJaWYgKCBqUXVlcnkuYnJvd3Nlci5vcGVyYSAmJiBuYW1lID09
ICJkaXNwbGF5IiApIHsKLQkJCXZhciBzYXZlID0gZWxlbS5zdHlsZS5vdXRsaW5lOwotCQkJZWxl
bS5zdHlsZS5vdXRsaW5lID0gIjAgc29saWQgYmxhY2siOwotCQkJZWxlbS5zdHlsZS5vdXRsaW5l
ID0gc2F2ZTsKLQkJfQotCQkKLQkJLy8gTWFrZSBzdXJlIHdlJ3JlIHVzaW5nIHRoZSByaWdodCBu
YW1lIGZvciBnZXR0aW5nIHRoZSBmbG9hdCB2YWx1ZQotCQlpZiAoIG5hbWUubWF0Y2goIC9mbG9h
dC9pICkgKQotCQkJbmFtZSA9IHN0eWxlRmxvYXQ7Ci0KLQkJaWYgKCAhZm9yY2UgJiYgZWxlbS5z
dHlsZSAmJiBlbGVtLnN0eWxlWyBuYW1lIF0gKQotCQkJcmV0ID0gZWxlbS5zdHlsZVsgbmFtZSBd
OwotCi0JCWVsc2UgaWYgKCBkb2N1bWVudC5kZWZhdWx0VmlldyAmJiBkb2N1bWVudC5kZWZhdWx0
Vmlldy5nZXRDb21wdXRlZFN0eWxlICkgewotCi0JCQkvLyBPbmx5ICJmbG9hdCIgaXMgbmVlZGVk
IGhlcmUKLQkJCWlmICggbmFtZS5tYXRjaCggL2Zsb2F0L2kgKSApCi0JCQkJbmFtZSA9ICJmbG9h
dCI7Ci0KLQkJCW5hbWUgPSBuYW1lLnJlcGxhY2UoIC8oW0EtWl0pL2csICItJDEiICkudG9Mb3dl
ckNhc2UoKTsKLQotCQkJdmFyIGdldENvbXB1dGVkU3R5bGUgPSBkb2N1bWVudC5kZWZhdWx0Vmll
dy5nZXRDb21wdXRlZFN0eWxlKCBlbGVtLCBudWxsICk7Ci0KLQkJCWlmICggZ2V0Q29tcHV0ZWRT
dHlsZSAmJiAhY29sb3IoIGVsZW0gKSApCi0JCQkJcmV0ID0gZ2V0Q29tcHV0ZWRTdHlsZS5nZXRQ
cm9wZXJ0eVZhbHVlKCBuYW1lICk7Ci0KLQkJCS8vIElmIHRoZSBlbGVtZW50IGlzbid0IHJlcG9y
dGluZyBpdHMgdmFsdWVzIHByb3Blcmx5IGluIFNhZmFyaQotCQkJLy8gdGhlbiBzb21lIGRpc3Bs
YXk6IG5vbmUgZWxlbWVudHMgYXJlIGludm9sdmVkCi0JCQllbHNlIHsKLQkJCQl2YXIgc3dhcCA9
IFtdLCBzdGFjayA9IFtdOwotCi0JCQkJLy8gTG9jYXRlIGFsbCBvZiB0aGUgcGFyZW50IGRpc3Bs
YXk6IG5vbmUgZWxlbWVudHMKLQkJCQlmb3IgKCB2YXIgYSA9IGVsZW07IGEgJiYgY29sb3IoYSk7
IGEgPSBhLnBhcmVudE5vZGUgKQotCQkJCQlzdGFjay51bnNoaWZ0KGEpOwotCi0JCQkJLy8gR28g
dGhyb3VnaCBhbmQgbWFrZSB0aGVtIHZpc2libGUsIGJ1dCBpbiByZXZlcnNlCi0JCQkJLy8gKEl0
IHdvdWxkIGJlIGJldHRlciBpZiB3ZSBrbmV3IHRoZSBleGFjdCBkaXNwbGF5IHR5cGUgdGhhdCB0
aGV5IGhhZCkKLQkJCQlmb3IgKCB2YXIgaSA9IDA7IGkgPCBzdGFjay5sZW5ndGg7IGkrKyApCi0J
CQkJCWlmICggY29sb3IoIHN0YWNrWyBpIF0gKSApIHsKLQkJCQkJCXN3YXBbIGkgXSA9IHN0YWNr
WyBpIF0uc3R5bGUuZGlzcGxheTsKLQkJCQkJCXN0YWNrWyBpIF0uc3R5bGUuZGlzcGxheSA9ICJi
bG9jayI7Ci0JCQkJCX0KLQotCQkJCS8vIFNpbmNlIHdlIGZsaXAgdGhlIGRpc3BsYXkgc3R5bGUs
IHdlIGhhdmUgdG8gaGFuZGxlIHRoYXQKLQkJCQkvLyBvbmUgc3BlY2lhbCwgb3RoZXJ3aXNlIGdl
dCB0aGUgdmFsdWUKLQkJCQlyZXQgPSBuYW1lID09ICJkaXNwbGF5IiAmJiBzd2FwWyBzdGFjay5s
ZW5ndGggLSAxIF0gIT0gbnVsbCA/Ci0JCQkJCSJub25lIiA6Ci0JCQkJCSggZ2V0Q29tcHV0ZWRT
dHlsZSAmJiBnZXRDb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUoIG5hbWUgKSApIHx8ICIi
OwotCi0JCQkJLy8gRmluYWxseSwgcmV2ZXJ0IHRoZSBkaXNwbGF5IHN0eWxlcyBiYWNrCi0JCQkJ
Zm9yICggdmFyIGkgPSAwOyBpIDwgc3dhcC5sZW5ndGg7IGkrKyApCi0JCQkJCWlmICggc3dhcFsg
aSBdICE9IG51bGwgKQotCQkJCQkJc3RhY2tbIGkgXS5zdHlsZS5kaXNwbGF5ID0gc3dhcFsgaSBd
OwotCQkJfQotCi0JCQkvLyBXZSBzaG91bGQgYWx3YXlzIGdldCBhIG51bWJlciBiYWNrIGZyb20g
b3BhY2l0eQotCQkJaWYgKCBuYW1lID09ICJvcGFjaXR5IiAmJiByZXQgPT0gIiIgKQotCQkJCXJl
dCA9ICIxIjsKLQotCQl9IGVsc2UgaWYgKCBlbGVtLmN1cnJlbnRTdHlsZSApIHsKLQkJCXZhciBj
YW1lbENhc2UgPSBuYW1lLnJlcGxhY2UoL1wtKFx3KS9nLCBmdW5jdGlvbihhbGwsIGxldHRlcil7
Ci0JCQkJcmV0dXJuIGxldHRlci50b1VwcGVyQ2FzZSgpOwotCQkJfSk7Ci0KLQkJCXJldCA9IGVs
ZW0uY3VycmVudFN0eWxlWyBuYW1lIF0gfHwgZWxlbS5jdXJyZW50U3R5bGVbIGNhbWVsQ2FzZSBd
OwotCi0JCQkvLyBGcm9tIHRoZSBhd2Vzb21lIGhhY2sgYnkgRGVhbiBFZHdhcmRzCi0JCQkvLyBo
dHRwOi8vZXJpay5lYWUubmV0L2FyY2hpdmVzLzIwMDcvMDcvMjcvMTguNTQuMTUvI2NvbW1lbnQt
MTAyMjkxCi0KLQkJCS8vIElmIHdlJ3JlIG5vdCBkZWFsaW5nIHdpdGggYSByZWd1bGFyIHBpeGVs
IG51bWJlcgotCQkJLy8gYnV0IGEgbnVtYmVyIHRoYXQgaGFzIGEgd2VpcmQgZW5kaW5nLCB3ZSBu
ZWVkIHRvIGNvbnZlcnQgaXQgdG8gcGl4ZWxzCi0JCQlpZiAoICEvXlxkKyhweCk/JC9pLnRlc3Qo
IHJldCApICYmIC9eXGQvLnRlc3QoIHJldCApICkgewotCQkJCS8vIFJlbWVtYmVyIHRoZSBvcmln
aW5hbCB2YWx1ZXMKLQkJCQl2YXIgc3R5bGUgPSBlbGVtLnN0eWxlLmxlZnQsIHJ1bnRpbWVTdHls
ZSA9IGVsZW0ucnVudGltZVN0eWxlLmxlZnQ7Ci0KLQkJCQkvLyBQdXQgaW4gdGhlIG5ldyB2YWx1
ZXMgdG8gZ2V0IGEgY29tcHV0ZWQgdmFsdWUgb3V0Ci0JCQkJZWxlbS5ydW50aW1lU3R5bGUubGVm
dCA9IGVsZW0uY3VycmVudFN0eWxlLmxlZnQ7Ci0JCQkJZWxlbS5zdHlsZS5sZWZ0ID0gcmV0IHx8
IDA7Ci0JCQkJcmV0ID0gZWxlbS5zdHlsZS5waXhlbExlZnQgKyAicHgiOwotCi0JCQkJLy8gUmV2
ZXJ0IHRoZSBjaGFuZ2VkIHZhbHVlcwotCQkJCWVsZW0uc3R5bGUubGVmdCA9IHN0eWxlOwotCQkJ
CWVsZW0ucnVudGltZVN0eWxlLmxlZnQgPSBydW50aW1lU3R5bGU7Ci0JCQl9Ci0JCX0KLQotCQly
ZXR1cm4gcmV0OwotCX0sCi0JCi0JY2xlYW46IGZ1bmN0aW9uKCBlbGVtcywgY29udGV4dCApIHsK
LQkJdmFyIHJldCA9IFtdOwotCQljb250ZXh0ID0gY29udGV4dCB8fCBkb2N1bWVudDsKLQkJLy8g
IWNvbnRleHQuY3JlYXRlRWxlbWVudCBmYWlscyBpbiBJRSB3aXRoIGFuIGVycm9yIGJ1dCByZXR1
cm5zIHR5cGVvZiAnb2JqZWN0JwotCQlpZiAodHlwZW9mIGNvbnRleHQuY3JlYXRlRWxlbWVudCA9
PSAndW5kZWZpbmVkJykgCi0JCQljb250ZXh0ID0gY29udGV4dC5vd25lckRvY3VtZW50IHx8IGNv
bnRleHRbMF0gJiYgY29udGV4dFswXS5vd25lckRvY3VtZW50IHx8IGRvY3VtZW50OwotCi0JCWpR
dWVyeS5lYWNoKGVsZW1zLCBmdW5jdGlvbihpLCBlbGVtKXsKLQkJCWlmICggIWVsZW0gKQotCQkJ
CXJldHVybjsKLQotCQkJaWYgKCBlbGVtLmNvbnN0cnVjdG9yID09IE51bWJlciApCi0JCQkJZWxl
bSA9IGVsZW0udG9TdHJpbmcoKTsKLQkJCQotCQkJLy8gQ29udmVydCBodG1sIHN0cmluZyBpbnRv
IERPTSBub2RlcwotCQkJaWYgKCB0eXBlb2YgZWxlbSA9PSAic3RyaW5nIiApIHsKLQkJCQkvLyBG
aXggIlhIVE1MIi1zdHlsZSB0YWdzIGluIGFsbCBicm93c2VycwotCQkJCWVsZW0gPSBlbGVtLnJl
cGxhY2UoLyg8KFx3KylbXj5dKj8pXC8+L2csIGZ1bmN0aW9uKGFsbCwgZnJvbnQsIHRhZyl7Ci0J
CQkJCXJldHVybiB0YWcubWF0Y2goL14oYWJicnxicnxjb2x8aW1nfGlucHV0fGxpbmt8bWV0YXxw
YXJhbXxocnxhcmVhfGVtYmVkKSQvaSkgPwotCQkJCQkJYWxsIDoKLQkJCQkJCWZyb250ICsgIj48
LyIgKyB0YWcgKyAiPiI7Ci0JCQkJfSk7Ci0KLQkJCQkvLyBUcmltIHdoaXRlc3BhY2UsIG90aGVy
d2lzZSBpbmRleE9mIHdvbid0IHdvcmsgYXMgZXhwZWN0ZWQKLQkJCQl2YXIgdGFncyA9IGpRdWVy
eS50cmltKCBlbGVtICkudG9Mb3dlckNhc2UoKSwgZGl2ID0gY29udGV4dC5jcmVhdGVFbGVtZW50
KCJkaXYiKTsKLQotCQkJCXZhciB3cmFwID0KLQkJCQkJLy8gb3B0aW9uIG9yIG9wdGdyb3VwCi0J
CQkJCSF0YWdzLmluZGV4T2YoIjxvcHQiKSAmJgotCQkJCQlbIDEsICI8c2VsZWN0IG11bHRpcGxl
PSdtdWx0aXBsZSc+IiwgIjwvc2VsZWN0PiIgXSB8fAotCQkJCQkKLQkJCQkJIXRhZ3MuaW5kZXhP
ZigiPGxlZyIpICYmCi0JCQkJCVsgMSwgIjxmaWVsZHNldD4iLCAiPC9maWVsZHNldD4iIF0gfHwK
LQkJCQkJCi0JCQkJCXRhZ3MubWF0Y2goL148KHRoZWFkfHRib2R5fHRmb290fGNvbGd8Y2FwKS8p
ICYmCi0JCQkJCVsgMSwgIjx0YWJsZT4iLCAiPC90YWJsZT4iIF0gfHwKLQkJCQkJCi0JCQkJCSF0
YWdzLmluZGV4T2YoIjx0ciIpICYmCi0JCQkJCVsgMiwgIjx0YWJsZT48dGJvZHk+IiwgIjwvdGJv
ZHk+PC90YWJsZT4iIF0gfHwKLQkJCQkJCi0JCQkJIAkvLyA8dGhlYWQ+IG1hdGNoZWQgYWJvdmUK
LQkJCQkJKCF0YWdzLmluZGV4T2YoIjx0ZCIpIHx8ICF0YWdzLmluZGV4T2YoIjx0aCIpKSAmJgot
CQkJCQlbIDMsICI8dGFibGU+PHRib2R5Pjx0cj4iLCAiPC90cj48L3Rib2R5PjwvdGFibGU+IiBd
IHx8Ci0JCQkJCQotCQkJCQkhdGFncy5pbmRleE9mKCI8Y29sIikgJiYKLQkJCQkJWyAyLCAiPHRh
YmxlPjx0Ym9keT48L3Rib2R5Pjxjb2xncm91cD4iLCAiPC9jb2xncm91cD48L3RhYmxlPiIgXSB8
fAotCi0JCQkJCS8vIElFIGNhbid0IHNlcmlhbGl6ZSA8bGluaz4gYW5kIDxzY3JpcHQ+IHRhZ3Mg
bm9ybWFsbHkKLQkJCQkJalF1ZXJ5LmJyb3dzZXIubXNpZSAmJgotCQkJCQlbIDEsICJkaXY8ZGl2
PiIsICI8L2Rpdj4iIF0gfHwKLQkJCQkJCi0JCQkJCVsgMCwgIiIsICIiIF07Ci0KLQkJCQkvLyBH
byB0byBodG1sIGFuZCBiYWNrLCB0aGVuIHBlZWwgb2ZmIGV4dHJhIHdyYXBwZXJzCi0JCQkJZGl2
LmlubmVySFRNTCA9IHdyYXBbMV0gKyBlbGVtICsgd3JhcFsyXTsKLQkJCQkKLQkJCQkvLyBNb3Zl
IHRvIHRoZSByaWdodCBkZXB0aAotCQkJCXdoaWxlICggd3JhcFswXS0tICkKLQkJCQkJZGl2ID0g
ZGl2Lmxhc3RDaGlsZDsKLQkJCQkKLQkJCQkvLyBSZW1vdmUgSUUncyBhdXRvaW5zZXJ0ZWQgPHRi
b2R5PiBmcm9tIHRhYmxlIGZyYWdtZW50cwotCQkJCWlmICggalF1ZXJ5LmJyb3dzZXIubXNpZSAp
IHsKLQkJCQkJCi0JCQkJCS8vIFN0cmluZyB3YXMgYSA8dGFibGU+LCAqbWF5KiBoYXZlIHNwdXJp
b3VzIDx0Ym9keT4KLQkJCQkJdmFyIHRib2R5ID0gIXRhZ3MuaW5kZXhPZigiPHRhYmxlIikgJiYg
dGFncy5pbmRleE9mKCI8dGJvZHkiKSA8IDAgPwotCQkJCQkJZGl2LmZpcnN0Q2hpbGQgJiYgZGl2
LmZpcnN0Q2hpbGQuY2hpbGROb2RlcyA6Ci0JCQkJCQkKLQkJCQkJCS8vIFN0cmluZyB3YXMgYSBi
YXJlIDx0aGVhZD4gb3IgPHRmb290PgotCQkJCQkJd3JhcFsxXSA9PSAiPHRhYmxlPiIgJiYgdGFn
cy5pbmRleE9mKCI8dGJvZHkiKSA8IDAgPwotCQkJCQkJCWRpdi5jaGlsZE5vZGVzIDoKLQkJCQkJ
CQlbXTsKLQkJCQkKLQkJCQkJZm9yICggdmFyIGogPSB0Ym9keS5sZW5ndGggLSAxOyBqID49IDAg
OyAtLWogKQotCQkJCQkJaWYgKCBqUXVlcnkubm9kZU5hbWUoIHRib2R5WyBqIF0sICJ0Ym9keSIg
KSAmJiAhdGJvZHlbIGogXS5jaGlsZE5vZGVzLmxlbmd0aCApCi0JCQkJCQkJdGJvZHlbIGogXS5w
YXJlbnROb2RlLnJlbW92ZUNoaWxkKCB0Ym9keVsgaiBdICk7Ci0JCQkJCQotCQkJCQkvLyBJRSBj
b21wbGV0ZWx5IGtpbGxzIGxlYWRpbmcgd2hpdGVzcGFjZSB3aGVuIGlubmVySFRNTCBpcyB1c2Vk
CQotCQkJCQlpZiAoIC9eXHMvLnRlc3QoIGVsZW0gKSApCQotCQkJCQkJZGl2Lmluc2VydEJlZm9y
ZSggY29udGV4dC5jcmVhdGVUZXh0Tm9kZSggZWxlbS5tYXRjaCgvXlxzKi8pWzBdICksIGRpdi5m
aXJzdENoaWxkICk7Ci0JCQkJCi0JCQkJfQotCQkJCQotCQkJCWVsZW0gPSBqUXVlcnkubWFrZUFy
cmF5KCBkaXYuY2hpbGROb2RlcyApOwotCQkJfQotCi0JCQlpZiAoIGVsZW0ubGVuZ3RoID09PSAw
ICYmICghalF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCAiZm9ybSIgKSAmJiAhalF1ZXJ5Lm5vZGVOYW1l
KCBlbGVtLCAic2VsZWN0IiApKSApCi0JCQkJcmV0dXJuOwotCi0JCQlpZiAoIGVsZW1bMF0gPT0g
dW5kZWZpbmVkIHx8IGpRdWVyeS5ub2RlTmFtZSggZWxlbSwgImZvcm0iICkgfHwgZWxlbS5vcHRp
b25zICkKLQkJCQlyZXQucHVzaCggZWxlbSApOwotCi0JCQllbHNlCi0JCQkJcmV0ID0galF1ZXJ5
Lm1lcmdlKCByZXQsIGVsZW0gKTsKLQotCQl9KTsKLQotCQlyZXR1cm4gcmV0OwotCX0sCi0JCi0J
YXR0cjogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlICkgewotCQkvLyBkb24ndCBzZXQgYXR0
cmlidXRlcyBvbiB0ZXh0IGFuZCBjb21tZW50IG5vZGVzCi0JCWlmICghZWxlbSB8fCBlbGVtLm5v
ZGVUeXBlID09IDMgfHwgZWxlbS5ub2RlVHlwZSA9PSA4KQotCQkJcmV0dXJuIHVuZGVmaW5lZDsK
LQotCQl2YXIgZml4ID0galF1ZXJ5LmlzWE1MRG9jKCBlbGVtICkgPwotCQkJe30gOgotCQkJalF1
ZXJ5LnByb3BzOwotCi0JCS8vIFNhZmFyaSBtaXMtcmVwb3J0cyB0aGUgZGVmYXVsdCBzZWxlY3Rl
ZCBwcm9wZXJ0eSBvZiBhIGhpZGRlbiBvcHRpb24KLQkJLy8gQWNjZXNzaW5nIHRoZSBwYXJlbnQn
cyBzZWxlY3RlZEluZGV4IHByb3BlcnR5IGZpeGVzIGl0Ci0JCWlmICggbmFtZSA9PSAic2VsZWN0
ZWQiICYmIGpRdWVyeS5icm93c2VyLnNhZmFyaSApCi0JCQllbGVtLnBhcmVudE5vZGUuc2VsZWN0
ZWRJbmRleDsKLQkJCi0JCS8vIENlcnRhaW4gYXR0cmlidXRlcyBvbmx5IHdvcmsgd2hlbiBhY2Nl
c3NlZCB2aWEgdGhlIG9sZCBET00gMCB3YXkKLQkJaWYgKCBmaXhbIG5hbWUgXSApIHsKLQkJCWlm
ICggdmFsdWUgIT0gdW5kZWZpbmVkICkKLQkJCQllbGVtWyBmaXhbIG5hbWUgXSBdID0gdmFsdWU7
Ci0KLQkJCXJldHVybiBlbGVtWyBmaXhbIG5hbWUgXSBdOwotCi0JCX0gZWxzZSBpZiAoIGpRdWVy
eS5icm93c2VyLm1zaWUgJiYgbmFtZSA9PSAic3R5bGUiICkKLQkJCXJldHVybiBqUXVlcnkuYXR0
ciggZWxlbS5zdHlsZSwgImNzc1RleHQiLCB2YWx1ZSApOwotCi0JCWVsc2UgaWYgKCB2YWx1ZSA9
PSB1bmRlZmluZWQgJiYgalF1ZXJ5LmJyb3dzZXIubXNpZSAmJiBqUXVlcnkubm9kZU5hbWUoIGVs
ZW0sICJmb3JtIiApICYmIChuYW1lID09ICJhY3Rpb24iIHx8IG5hbWUgPT0gIm1ldGhvZCIpICkK
LQkJCXJldHVybiBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoIG5hbWUgKS5ub2RlVmFsdWU7Ci0KLQkJ
Ly8gSUUgZWxlbS5nZXRBdHRyaWJ1dGUgcGFzc2VzIGV2ZW4gZm9yIHN0eWxlCi0JCWVsc2UgaWYg
KCBlbGVtLnRhZ05hbWUgKSB7Ci0KLQkJCWlmICggdmFsdWUgIT0gdW5kZWZpbmVkICkgewotCQkJ
CS8vIFdlIGNhbid0IGFsbG93IHRoZSB0eXBlIHByb3BlcnR5IHRvIGJlIGNoYW5nZWQgKHNpbmNl
IGl0IGNhdXNlcyBwcm9ibGVtcyBpbiBJRSkKLQkJCQlpZiAoIG5hbWUgPT0gInR5cGUiICYmIGpR
dWVyeS5ub2RlTmFtZSggZWxlbSwgImlucHV0IiApICYmIGVsZW0ucGFyZW50Tm9kZSApCi0JCQkJ
CXRocm93ICJ0eXBlIHByb3BlcnR5IGNhbid0IGJlIGNoYW5nZWQiOwotCi0JCQkJLy8gY29udmVy
dCB0aGUgdmFsdWUgdG8gYSBzdHJpbmcgKGFsbCBicm93c2VycyBkbyB0aGlzIGJ1dCBJRSkgc2Vl
ICMxMDcwCi0JCQkJZWxlbS5zZXRBdHRyaWJ1dGUoIG5hbWUsICIiICsgdmFsdWUgKTsKLQkJCX0K
LQotCQkJaWYgKCBqUXVlcnkuYnJvd3Nlci5tc2llICYmIC9ocmVmfHNyYy8udGVzdCggbmFtZSAp
ICYmICFqUXVlcnkuaXNYTUxEb2MoIGVsZW0gKSApIAotCQkJCXJldHVybiBlbGVtLmdldEF0dHJp
YnV0ZSggbmFtZSwgMiApOwotCi0JCQlyZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoIG5hbWUgKTsK
LQotCQkvLyBlbGVtIGlzIGFjdHVhbGx5IGVsZW0uc3R5bGUgLi4uIHNldCB0aGUgc3R5bGUKLQkJ
fSBlbHNlIHsKLQkJCS8vIElFIGFjdHVhbGx5IHVzZXMgZmlsdGVycyBmb3Igb3BhY2l0eQotCQkJ
aWYgKCBuYW1lID09ICJvcGFjaXR5IiAmJiBqUXVlcnkuYnJvd3Nlci5tc2llICkgewotCQkJCWlm
ICggdmFsdWUgIT0gdW5kZWZpbmVkICkgewotCQkJCQkvLyBJRSBoYXMgdHJvdWJsZSB3aXRoIG9w
YWNpdHkgaWYgaXQgZG9lcyBub3QgaGF2ZSBsYXlvdXQKLQkJCQkJLy8gRm9yY2UgaXQgYnkgc2V0
dGluZyB0aGUgem9vbSBsZXZlbAotCQkJCQllbGVtLnpvb20gPSAxOyAKLQkKLQkJCQkJLy8gU2V0
IHRoZSBhbHBoYSBmaWx0ZXIgdG8gc2V0IHRoZSBvcGFjaXR5Ci0JCQkJCWVsZW0uZmlsdGVyID0g
KGVsZW0uZmlsdGVyIHx8ICIiKS5yZXBsYWNlKCAvYWxwaGFcKFteKV0qXCkvLCAiIiApICsKLQkJ
CQkJCShwYXJzZUZsb2F0KCB2YWx1ZSApLnRvU3RyaW5nKCkgPT0gIk5hTiIgPyAiIiA6ICJhbHBo
YShvcGFjaXR5PSIgKyB2YWx1ZSAqIDEwMCArICIpIik7Ci0JCQkJfQotCQotCQkJCXJldHVybiBl
bGVtLmZpbHRlciAmJiBlbGVtLmZpbHRlci5pbmRleE9mKCJvcGFjaXR5PSIpID49IDAgPwotCQkJ
CQkocGFyc2VGbG9hdCggZWxlbS5maWx0ZXIubWF0Y2goL29wYWNpdHk9KFteKV0qKS8pWzFdICkg
LyAxMDApLnRvU3RyaW5nKCkgOgotCQkJCQkiIjsKLQkJCX0KLQotCQkJbmFtZSA9IG5hbWUucmVw
bGFjZSgvLShbYS16XSkvaWcsIGZ1bmN0aW9uKGFsbCwgbGV0dGVyKXsKLQkJCQlyZXR1cm4gbGV0
dGVyLnRvVXBwZXJDYXNlKCk7Ci0JCQl9KTsKLQotCQkJaWYgKCB2YWx1ZSAhPSB1bmRlZmluZWQg
KQotCQkJCWVsZW1bIG5hbWUgXSA9IHZhbHVlOwotCi0JCQlyZXR1cm4gZWxlbVsgbmFtZSBdOwot
CQl9Ci0JfSwKLQkKLQl0cmltOiBmdW5jdGlvbiggdGV4dCApIHsKLQkJcmV0dXJuICh0ZXh0IHx8
ICIiKS5yZXBsYWNlKCAvXlxzK3xccyskL2csICIiICk7Ci0JfSwKLQotCW1ha2VBcnJheTogZnVu
Y3Rpb24oIGFycmF5ICkgewotCQl2YXIgcmV0ID0gW107Ci0KLQkJLy8gTmVlZCB0byB1c2UgdHlw
ZW9mIHRvIGZpZ2h0IFNhZmFyaSBjaGlsZE5vZGVzIGNyYXNoZXMKLQkJaWYgKCB0eXBlb2YgYXJy
YXkgIT0gImFycmF5IiApCi0JCQlmb3IgKCB2YXIgaSA9IDAsIGxlbmd0aCA9IGFycmF5Lmxlbmd0
aDsgaSA8IGxlbmd0aDsgaSsrICkKLQkJCQlyZXQucHVzaCggYXJyYXlbIGkgXSApOwotCQllbHNl
Ci0JCQlyZXQgPSBhcnJheS5zbGljZSggMCApOwotCi0JCXJldHVybiByZXQ7Ci0JfSwKLQotCWlu
QXJyYXk6IGZ1bmN0aW9uKCBlbGVtLCBhcnJheSApIHsKLQkJZm9yICggdmFyIGkgPSAwLCBsZW5n
dGggPSBhcnJheS5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKyApCi0JCQlpZiAoIGFycmF5WyBpIF0g
PT0gZWxlbSApCi0JCQkJcmV0dXJuIGk7Ci0KLQkJcmV0dXJuIC0xOwotCX0sCi0KLQltZXJnZTog
ZnVuY3Rpb24oIGZpcnN0LCBzZWNvbmQgKSB7Ci0JCS8vIFdlIGhhdmUgdG8gbG9vcCB0aGlzIHdh
eSBiZWNhdXNlIElFICYgT3BlcmEgb3ZlcndyaXRlIHRoZSBsZW5ndGgKLQkJLy8gZXhwYW5kbyBv
ZiBnZXRFbGVtZW50c0J5VGFnTmFtZQotCi0JCS8vIEFsc28sIHdlIG5lZWQgdG8gbWFrZSBzdXJl
IHRoYXQgdGhlIGNvcnJlY3QgZWxlbWVudHMgYXJlIGJlaW5nIHJldHVybmVkCi0JCS8vIChJRSBy
ZXR1cm5zIGNvbW1lbnQgbm9kZXMgaW4gYSAnKicgcXVlcnkpCi0JCWlmICggalF1ZXJ5LmJyb3dz
ZXIubXNpZSApIHsKLQkJCWZvciAoIHZhciBpID0gMDsgc2Vjb25kWyBpIF07IGkrKyApCi0JCQkJ
aWYgKCBzZWNvbmRbIGkgXS5ub2RlVHlwZSAhPSA4ICkKLQkJCQkJZmlyc3QucHVzaCggc2Vjb25k
WyBpIF0gKTsKLQotCQl9IGVsc2UKLQkJCWZvciAoIHZhciBpID0gMDsgc2Vjb25kWyBpIF07IGkr
KyApCi0JCQkJZmlyc3QucHVzaCggc2Vjb25kWyBpIF0gKTsKLQotCQlyZXR1cm4gZmlyc3Q7Ci0J
fSwKLQotCXVuaXF1ZTogZnVuY3Rpb24oIGFycmF5ICkgewotCQl2YXIgcmV0ID0gW10sIGRvbmUg
PSB7fTsKLQotCQl0cnkgewotCi0JCQlmb3IgKCB2YXIgaSA9IDAsIGxlbmd0aCA9IGFycmF5Lmxl
bmd0aDsgaSA8IGxlbmd0aDsgaSsrICkgewotCQkJCXZhciBpZCA9IGpRdWVyeS5kYXRhKCBhcnJh
eVsgaSBdICk7Ci0KLQkJCQlpZiAoICFkb25lWyBpZCBdICkgewotCQkJCQlkb25lWyBpZCBdID0g
dHJ1ZTsKLQkJCQkJcmV0LnB1c2goIGFycmF5WyBpIF0gKTsKLQkJCQl9Ci0JCQl9Ci0KLQkJfSBj
YXRjaCggZSApIHsKLQkJCXJldCA9IGFycmF5OwotCQl9Ci0KLQkJcmV0dXJuIHJldDsKLQl9LAot
Ci0JZ3JlcDogZnVuY3Rpb24oIGVsZW1zLCBjYWxsYmFjaywgaW52ICkgewotCQl2YXIgcmV0ID0g
W107Ci0KLQkJLy8gR28gdGhyb3VnaCB0aGUgYXJyYXksIG9ubHkgc2F2aW5nIHRoZSBpdGVtcwot
CQkvLyB0aGF0IHBhc3MgdGhlIHZhbGlkYXRvciBmdW5jdGlvbgotCQlmb3IgKCB2YXIgaSA9IDAs
IGxlbmd0aCA9IGVsZW1zLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrICkKLQkJCWlmICggIWludiAm
JiBjYWxsYmFjayggZWxlbXNbIGkgXSwgaSApIHx8IGludiAmJiAhY2FsbGJhY2soIGVsZW1zWyBp
IF0sIGkgKSApCi0JCQkJcmV0LnB1c2goIGVsZW1zWyBpIF0gKTsKLQotCQlyZXR1cm4gcmV0Owot
CX0sCi0KLQltYXA6IGZ1bmN0aW9uKCBlbGVtcywgY2FsbGJhY2sgKSB7Ci0JCXZhciByZXQgPSBb
XTsKLQotCQkvLyBHbyB0aHJvdWdoIHRoZSBhcnJheSwgdHJhbnNsYXRpbmcgZWFjaCBvZiB0aGUg
aXRlbXMgdG8gdGhlaXIKLQkJLy8gbmV3IHZhbHVlIChvciB2YWx1ZXMpLgotCQlmb3IgKCB2YXIg
aSA9IDAsIGxlbmd0aCA9IGVsZW1zLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrICkgewotCQkJdmFy
IHZhbHVlID0gY2FsbGJhY2soIGVsZW1zWyBpIF0sIGkgKTsKLQotCQkJaWYgKCB2YWx1ZSAhPT0g
bnVsbCAmJiB2YWx1ZSAhPSB1bmRlZmluZWQgKSB7Ci0JCQkJaWYgKCB2YWx1ZS5jb25zdHJ1Y3Rv
ciAhPSBBcnJheSApCi0JCQkJCXZhbHVlID0gWyB2YWx1ZSBdOwotCi0JCQkJcmV0ID0gcmV0LmNv
bmNhdCggdmFsdWUgKTsKLQkJCX0KLQkJfQotCi0JCXJldHVybiByZXQ7Ci0JfQotfSk7Ci0KLXZh
ciB1c2VyQWdlbnQgPSBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCk7Ci0KLS8vIEZp
Z3VyZSBvdXQgd2hhdCBicm93c2VyIGlzIGJlaW5nIHVzZWQKLWpRdWVyeS5icm93c2VyID0gewot
CXZlcnNpb246ICh1c2VyQWdlbnQubWF0Y2goIC8uKyg/OnJ2fGl0fHJhfGllKVtcLzogXShbXGQu
XSspLyApIHx8IFtdKVsxXSwKLQlzYWZhcmk6IC93ZWJraXQvLnRlc3QoIHVzZXJBZ2VudCApLAot
CW9wZXJhOiAvb3BlcmEvLnRlc3QoIHVzZXJBZ2VudCApLAotCW1zaWU6IC9tc2llLy50ZXN0KCB1
c2VyQWdlbnQgKSAmJiAhL29wZXJhLy50ZXN0KCB1c2VyQWdlbnQgKSwKLQltb3ppbGxhOiAvbW96
aWxsYS8udGVzdCggdXNlckFnZW50ICkgJiYgIS8oY29tcGF0aWJsZXx3ZWJraXQpLy50ZXN0KCB1
c2VyQWdlbnQgKQotfTsKLQotdmFyIHN0eWxlRmxvYXQgPSBqUXVlcnkuYnJvd3Nlci5tc2llID8K
LQkic3R5bGVGbG9hdCIgOgotCSJjc3NGbG9hdCI7Ci0JCi1qUXVlcnkuZXh0ZW5kKHsKLQkvLyBD
aGVjayB0byBzZWUgaWYgdGhlIFczQyBib3ggbW9kZWwgaXMgYmVpbmcgdXNlZAotCWJveE1vZGVs
OiAhalF1ZXJ5LmJyb3dzZXIubXNpZSB8fCBkb2N1bWVudC5jb21wYXRNb2RlID09ICJDU1MxQ29t
cGF0IiwKLQkKLQlwcm9wczogewotCQkiZm9yIjogImh0bWxGb3IiLAotCQkiY2xhc3MiOiAiY2xh
c3NOYW1lIiwKLQkJImZsb2F0Ijogc3R5bGVGbG9hdCwKLQkJY3NzRmxvYXQ6IHN0eWxlRmxvYXQs
Ci0JCXN0eWxlRmxvYXQ6IHN0eWxlRmxvYXQsCi0JCWlubmVySFRNTDogImlubmVySFRNTCIsCi0J
CWNsYXNzTmFtZTogImNsYXNzTmFtZSIsCi0JCXZhbHVlOiAidmFsdWUiLAotCQlkaXNhYmxlZDog
ImRpc2FibGVkIiwKLQkJY2hlY2tlZDogImNoZWNrZWQiLAotCQlyZWFkb25seTogInJlYWRPbmx5
IiwKLQkJc2VsZWN0ZWQ6ICJzZWxlY3RlZCIsCi0JCW1heGxlbmd0aDogIm1heExlbmd0aCIsCi0J
CXNlbGVjdGVkSW5kZXg6ICJzZWxlY3RlZEluZGV4IiwKLQkJZGVmYXVsdFZhbHVlOiAiZGVmYXVs
dFZhbHVlIiwKLQkJdGFnTmFtZTogInRhZ05hbWUiLAotCQlub2RlTmFtZTogIm5vZGVOYW1lIgot
CX0KLX0pOwotCi1qUXVlcnkuZWFjaCh7Ci0JcGFyZW50OiBmdW5jdGlvbihlbGVtKXtyZXR1cm4g
ZWxlbS5wYXJlbnROb2RlO30sCi0JcGFyZW50czogZnVuY3Rpb24oZWxlbSl7cmV0dXJuIGpRdWVy
eS5kaXIoZWxlbSwicGFyZW50Tm9kZSIpO30sCi0JbmV4dDogZnVuY3Rpb24oZWxlbSl7cmV0dXJu
IGpRdWVyeS5udGgoZWxlbSwyLCJuZXh0U2libGluZyIpO30sCi0JcHJldjogZnVuY3Rpb24oZWxl
bSl7cmV0dXJuIGpRdWVyeS5udGgoZWxlbSwyLCJwcmV2aW91c1NpYmxpbmciKTt9LAotCW5leHRB
bGw6IGZ1bmN0aW9uKGVsZW0pe3JldHVybiBqUXVlcnkuZGlyKGVsZW0sIm5leHRTaWJsaW5nIik7
fSwKLQlwcmV2QWxsOiBmdW5jdGlvbihlbGVtKXtyZXR1cm4galF1ZXJ5LmRpcihlbGVtLCJwcmV2
aW91c1NpYmxpbmciKTt9LAotCXNpYmxpbmdzOiBmdW5jdGlvbihlbGVtKXtyZXR1cm4galF1ZXJ5
LnNpYmxpbmcoZWxlbS5wYXJlbnROb2RlLmZpcnN0Q2hpbGQsZWxlbSk7fSwKLQljaGlsZHJlbjog
ZnVuY3Rpb24oZWxlbSl7cmV0dXJuIGpRdWVyeS5zaWJsaW5nKGVsZW0uZmlyc3RDaGlsZCk7fSwK
LQljb250ZW50czogZnVuY3Rpb24oZWxlbSl7cmV0dXJuIGpRdWVyeS5ub2RlTmFtZShlbGVtLCJp
ZnJhbWUiKT9lbGVtLmNvbnRlbnREb2N1bWVudHx8ZWxlbS5jb250ZW50V2luZG93LmRvY3VtZW50
OmpRdWVyeS5tYWtlQXJyYXkoZWxlbS5jaGlsZE5vZGVzKTt9Ci19LCBmdW5jdGlvbihuYW1lLCBm
bil7Ci0JalF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggc2VsZWN0b3IgKSB7Ci0JCXZhciBy
ZXQgPSBqUXVlcnkubWFwKCB0aGlzLCBmbiApOwotCi0JCWlmICggc2VsZWN0b3IgJiYgdHlwZW9m
IHNlbGVjdG9yID09ICJzdHJpbmciICkKLQkJCXJldCA9IGpRdWVyeS5tdWx0aUZpbHRlciggc2Vs
ZWN0b3IsIHJldCApOwotCi0JCXJldHVybiB0aGlzLnB1c2hTdGFjayggalF1ZXJ5LnVuaXF1ZSgg
cmV0ICkgKTsKLQl9OwotfSk7Ci0KLWpRdWVyeS5lYWNoKHsKLQlhcHBlbmRUbzogImFwcGVuZCIs
Ci0JcHJlcGVuZFRvOiAicHJlcGVuZCIsCi0JaW5zZXJ0QmVmb3JlOiAiYmVmb3JlIiwKLQlpbnNl
cnRBZnRlcjogImFmdGVyIiwKLQlyZXBsYWNlQWxsOiAicmVwbGFjZVdpdGgiCi19LCBmdW5jdGlv
bihuYW1lLCBvcmlnaW5hbCl7Ci0JalF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbigpIHsKLQkJ
dmFyIGFyZ3MgPSBhcmd1bWVudHM7Ci0KLQkJcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpewot
CQkJZm9yICggdmFyIGkgPSAwLCBsZW5ndGggPSBhcmdzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsr
ICkKLQkJCQlqUXVlcnkoIGFyZ3NbIGkgXSApWyBvcmlnaW5hbCBdKCB0aGlzICk7Ci0JCX0pOwot
CX07Ci19KTsKLQotalF1ZXJ5LmVhY2goewotCXJlbW92ZUF0dHI6IGZ1bmN0aW9uKCBuYW1lICkg
ewotCQlqUXVlcnkuYXR0ciggdGhpcywgbmFtZSwgIiIgKTsKLQkJaWYgKHRoaXMubm9kZVR5cGUg
PT0gMSkgCi0JCQl0aGlzLnJlbW92ZUF0dHJpYnV0ZSggbmFtZSApOwotCX0sCi0KLQlhZGRDbGFz
czogZnVuY3Rpb24oIGNsYXNzTmFtZXMgKSB7Ci0JCWpRdWVyeS5jbGFzc05hbWUuYWRkKCB0aGlz
LCBjbGFzc05hbWVzICk7Ci0JfSwKLQotCXJlbW92ZUNsYXNzOiBmdW5jdGlvbiggY2xhc3NOYW1l
cyApIHsKLQkJalF1ZXJ5LmNsYXNzTmFtZS5yZW1vdmUoIHRoaXMsIGNsYXNzTmFtZXMgKTsKLQl9
LAotCi0JdG9nZ2xlQ2xhc3M6IGZ1bmN0aW9uKCBjbGFzc05hbWVzICkgewotCQlqUXVlcnkuY2xh
c3NOYW1lWyBqUXVlcnkuY2xhc3NOYW1lLmhhcyggdGhpcywgY2xhc3NOYW1lcyApID8gInJlbW92
ZSIgOiAiYWRkIiBdKCB0aGlzLCBjbGFzc05hbWVzICk7Ci0JfSwKLQotCXJlbW92ZTogZnVuY3Rp
b24oIHNlbGVjdG9yICkgewotCQlpZiAoICFzZWxlY3RvciB8fCBqUXVlcnkuZmlsdGVyKCBzZWxl
Y3RvciwgWyB0aGlzIF0gKS5yLmxlbmd0aCApIHsKLQkJCS8vIFByZXZlbnQgbWVtb3J5IGxlYWtz
Ci0JCQlqUXVlcnkoICIqIiwgdGhpcyApLmFkZCh0aGlzKS5lYWNoKGZ1bmN0aW9uKCl7Ci0JCQkJ
alF1ZXJ5LmV2ZW50LnJlbW92ZSh0aGlzKTsKLQkJCQlqUXVlcnkucmVtb3ZlRGF0YSh0aGlzKTsK
LQkJCX0pOwotCQkJaWYgKHRoaXMucGFyZW50Tm9kZSkKLQkJCQl0aGlzLnBhcmVudE5vZGUucmVt
b3ZlQ2hpbGQoIHRoaXMgKTsKLQkJfQotCX0sCi0KLQllbXB0eTogZnVuY3Rpb24oKSB7Ci0JCS8v
IFJlbW92ZSBlbGVtZW50IG5vZGVzIGFuZCBwcmV2ZW50IG1lbW9yeSBsZWFrcwotCQlqUXVlcnko
ICI+KiIsIHRoaXMgKS5yZW1vdmUoKTsKLQkJCi0JCS8vIFJlbW92ZSBhbnkgcmVtYWluaW5nIG5v
ZGVzCi0JCXdoaWxlICggdGhpcy5maXJzdENoaWxkICkKLQkJCXRoaXMucmVtb3ZlQ2hpbGQoIHRo
aXMuZmlyc3RDaGlsZCApOwotCX0KLX0sIGZ1bmN0aW9uKG5hbWUsIGZuKXsKLQlqUXVlcnkuZm5b
IG5hbWUgXSA9IGZ1bmN0aW9uKCl7Ci0JCXJldHVybiB0aGlzLmVhY2goIGZuLCBhcmd1bWVudHMg
KTsKLQl9OwotfSk7Ci0KLWpRdWVyeS5lYWNoKFsgIkhlaWdodCIsICJXaWR0aCIgXSwgZnVuY3Rp
b24oaSwgbmFtZSl7Ci0JdmFyIHR5cGUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7Ci0JCi0JalF1ZXJ5
LmZuWyB0eXBlIF0gPSBmdW5jdGlvbiggc2l6ZSApIHsKLQkJLy8gR2V0IHdpbmRvdyB3aWR0aCBv
ciBoZWlnaHQKLQkJcmV0dXJuIHRoaXNbMF0gPT0gd2luZG93ID8KLQkJCS8vIE9wZXJhIHJlcG9y
dHMgZG9jdW1lbnQuYm9keS5jbGllbnRbV2lkdGgvSGVpZ2h0XSBwcm9wZXJseSBpbiBib3RoIHF1
aXJrcyBhbmQgc3RhbmRhcmRzCi0JCQlqUXVlcnkuYnJvd3Nlci5vcGVyYSAmJiBkb2N1bWVudC5i
b2R5WyAiY2xpZW50IiArIG5hbWUgXSB8fCAKLQkJCQotCQkJLy8gU2FmYXJpIHJlcG9ydHMgaW5u
ZXJbV2lkdGgvSGVpZ2h0XSBqdXN0IGZpbmUgKE1vemlsbGEgYW5kIE9wZXJhIGluY2x1ZGUgc2Ny
b2xsIGJhciB3aWR0aHMpCi0JCQlqUXVlcnkuYnJvd3Nlci5zYWZhcmkgJiYgd2luZG93WyAiaW5u
ZXIiICsgbmFtZSBdIHx8Ci0JCQkKLQkJCS8vIEV2ZXJ5b25lIGVsc2UgdXNlIGRvY3VtZW50LmRv
Y3VtZW50RWxlbWVudCBvciBkb2N1bWVudC5ib2R5IGRlcGVuZGluZyBvbiBRdWlya3MgdnMgU3Rh
bmRhcmRzIG1vZGUKLQkJCWRvY3VtZW50LmNvbXBhdE1vZGUgPT0gIkNTUzFDb21wYXQiICYmIGRv
Y3VtZW50LmRvY3VtZW50RWxlbWVudFsgImNsaWVudCIgKyBuYW1lIF0gfHwgZG9jdW1lbnQuYm9k
eVsgImNsaWVudCIgKyBuYW1lIF0gOgotCQkKLQkJCS8vIEdldCBkb2N1bWVudCB3aWR0aCBvciBo
ZWlnaHQKLQkJCXRoaXNbMF0gPT0gZG9jdW1lbnQgPwotCQkJCS8vIEVpdGhlciBzY3JvbGxbV2lk
dGgvSGVpZ2h0XSBvciBvZmZzZXRbV2lkdGgvSGVpZ2h0XSwgd2hpY2hldmVyIGlzIGdyZWF0ZXIK
LQkJCQlNYXRoLm1heCggCi0JCQkJCU1hdGgubWF4KGRvY3VtZW50LmJvZHlbInNjcm9sbCIgKyBu
YW1lXSwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50WyJzY3JvbGwiICsgbmFtZV0pLCAKLQkJCQkJ
TWF0aC5tYXgoZG9jdW1lbnQuYm9keVsib2Zmc2V0IiArIG5hbWVdLCBkb2N1bWVudC5kb2N1bWVu
dEVsZW1lbnRbIm9mZnNldCIgKyBuYW1lXSkgCi0JCQkJKSA6Ci0KLQkJCQkvLyBHZXQgb3Igc2V0
IHdpZHRoIG9yIGhlaWdodCBvbiB0aGUgZWxlbWVudAotCQkJCXNpemUgPT0gdW5kZWZpbmVkID8K
LQkJCQkJLy8gR2V0IHdpZHRoIG9yIGhlaWdodCBvbiB0aGUgZWxlbWVudAotCQkJCQkodGhpcy5s
ZW5ndGggPyBqUXVlcnkuY3NzKCB0aGlzWzBdLCB0eXBlICkgOiBudWxsKSA6Ci0KLQkJCQkJLy8g
U2V0IHRoZSB3aWR0aCBvciBoZWlnaHQgb24gdGhlIGVsZW1lbnQgKGRlZmF1bHQgdG8gcGl4ZWxz
IGlmIHZhbHVlIGlzIHVuaXRsZXNzKQotCQkJCQl0aGlzLmNzcyggdHlwZSwgc2l6ZS5jb25zdHJ1
Y3RvciA9PSBTdHJpbmcgPyBzaXplIDogc2l6ZSArICJweCIgKTsKLQl9OwotfSk7Ci0KLXZhciBj
aGFycyA9IGpRdWVyeS5icm93c2VyLnNhZmFyaSAmJiBwYXJzZUludChqUXVlcnkuYnJvd3Nlci52
ZXJzaW9uKSA8IDQxNyA/Ci0JCSIoPzpbXFx3Kl8tXXxcXFxcLikiIDoKLQkJIig/OltcXHdcdTAx
MjgtXHVGRkZGKl8tXXxcXFxcLikiLAotCXF1aWNrQ2hpbGQgPSBuZXcgUmVnRXhwKCJePlxccyoo
IiArIGNoYXJzICsgIispIiksCi0JcXVpY2tJRCA9IG5ldyBSZWdFeHAoIl4oIiArIGNoYXJzICsg
IispKCMpKCIgKyBjaGFycyArICIrKSIpLAotCXF1aWNrQ2xhc3MgPSBuZXcgUmVnRXhwKCJeKFsj
Ll0/KSgiICsgY2hhcnMgKyAiKikiKTsKLQotalF1ZXJ5LmV4dGVuZCh7Ci0JZXhwcjogewotCQki
IjogZnVuY3Rpb24oYSxpLG0pe3JldHVybiBtWzJdPT0iKiJ8fGpRdWVyeS5ub2RlTmFtZShhLG1b
Ml0pO30sCi0JCSIjIjogZnVuY3Rpb24oYSxpLG0pe3JldHVybiBhLmdldEF0dHJpYnV0ZSgiaWQi
KT09bVsyXTt9LAotCQkiOiI6IHsKLQkJCS8vIFBvc2l0aW9uIENoZWNrcwotCQkJbHQ6IGZ1bmN0
aW9uKGEsaSxtKXtyZXR1cm4gaTxtWzNdLTA7fSwKLQkJCWd0OiBmdW5jdGlvbihhLGksbSl7cmV0
dXJuIGk+bVszXS0wO30sCi0JCQludGg6IGZ1bmN0aW9uKGEsaSxtKXtyZXR1cm4gbVszXS0wPT1p
O30sCi0JCQllcTogZnVuY3Rpb24oYSxpLG0pe3JldHVybiBtWzNdLTA9PWk7fSwKLQkJCWZpcnN0
OiBmdW5jdGlvbihhLGkpe3JldHVybiBpPT0wO30sCi0JCQlsYXN0OiBmdW5jdGlvbihhLGksbSxy
KXtyZXR1cm4gaT09ci5sZW5ndGgtMTt9LAotCQkJZXZlbjogZnVuY3Rpb24oYSxpKXtyZXR1cm4g
aSUyPT0wO30sCi0JCQlvZGQ6IGZ1bmN0aW9uKGEsaSl7cmV0dXJuIGklMjt9LAotCi0JCQkvLyBD
aGlsZCBDaGVja3MKLQkJCSJmaXJzdC1jaGlsZCI6IGZ1bmN0aW9uKGEpe3JldHVybiBhLnBhcmVu
dE5vZGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKVswXT09YTt9LAotCQkJImxhc3QtY2hpbGQi
OiBmdW5jdGlvbihhKXtyZXR1cm4galF1ZXJ5Lm50aChhLnBhcmVudE5vZGUubGFzdENoaWxkLDEs
InByZXZpb3VzU2libGluZyIpPT1hO30sCi0JCQkib25seS1jaGlsZCI6IGZ1bmN0aW9uKGEpe3Jl
dHVybiAhalF1ZXJ5Lm50aChhLnBhcmVudE5vZGUubGFzdENoaWxkLDIsInByZXZpb3VzU2libGlu
ZyIpO30sCi0KLQkJCS8vIFBhcmVudCBDaGVja3MKLQkJCXBhcmVudDogZnVuY3Rpb24oYSl7cmV0
dXJuIGEuZmlyc3RDaGlsZDt9LAotCQkJZW1wdHk6IGZ1bmN0aW9uKGEpe3JldHVybiAhYS5maXJz
dENoaWxkO30sCi0KLQkJCS8vIFRleHQgQ2hlY2sKLQkJCWNvbnRhaW5zOiBmdW5jdGlvbihhLGks
bSl7cmV0dXJuIChhLnRleHRDb250ZW50fHxhLmlubmVyVGV4dHx8alF1ZXJ5KGEpLnRleHQoKXx8
IiIpLmluZGV4T2YobVszXSk+PTA7fSwKLQotCQkJLy8gVmlzaWJpbGl0eQotCQkJdmlzaWJsZTog
ZnVuY3Rpb24oYSl7cmV0dXJuICJoaWRkZW4iIT1hLnR5cGUmJmpRdWVyeS5jc3MoYSwiZGlzcGxh
eSIpIT0ibm9uZSImJmpRdWVyeS5jc3MoYSwidmlzaWJpbGl0eSIpIT0iaGlkZGVuIjt9LAotCQkJ
aGlkZGVuOiBmdW5jdGlvbihhKXtyZXR1cm4gImhpZGRlbiI9PWEudHlwZXx8alF1ZXJ5LmNzcyhh
LCJkaXNwbGF5Iik9PSJub25lInx8alF1ZXJ5LmNzcyhhLCJ2aXNpYmlsaXR5Iik9PSJoaWRkZW4i
O30sCi0KLQkJCS8vIEZvcm0gYXR0cmlidXRlcwotCQkJZW5hYmxlZDogZnVuY3Rpb24oYSl7cmV0
dXJuICFhLmRpc2FibGVkO30sCi0JCQlkaXNhYmxlZDogZnVuY3Rpb24oYSl7cmV0dXJuIGEuZGlz
YWJsZWQ7fSwKLQkJCWNoZWNrZWQ6IGZ1bmN0aW9uKGEpe3JldHVybiBhLmNoZWNrZWQ7fSwKLQkJ
CXNlbGVjdGVkOiBmdW5jdGlvbihhKXtyZXR1cm4gYS5zZWxlY3RlZHx8alF1ZXJ5LmF0dHIoYSwi
c2VsZWN0ZWQiKTt9LAotCi0JCQkvLyBGb3JtIGVsZW1lbnRzCi0JCQl0ZXh0OiBmdW5jdGlvbihh
KXtyZXR1cm4gInRleHQiPT1hLnR5cGU7fSwKLQkJCXJhZGlvOiBmdW5jdGlvbihhKXtyZXR1cm4g
InJhZGlvIj09YS50eXBlO30sCi0JCQljaGVja2JveDogZnVuY3Rpb24oYSl7cmV0dXJuICJjaGVj
a2JveCI9PWEudHlwZTt9LAotCQkJZmlsZTogZnVuY3Rpb24oYSl7cmV0dXJuICJmaWxlIj09YS50
eXBlO30sCi0JCQlwYXNzd29yZDogZnVuY3Rpb24oYSl7cmV0dXJuICJwYXNzd29yZCI9PWEudHlw
ZTt9LAotCQkJc3VibWl0OiBmdW5jdGlvbihhKXtyZXR1cm4gInN1Ym1pdCI9PWEudHlwZTt9LAot
CQkJaW1hZ2U6IGZ1bmN0aW9uKGEpe3JldHVybiAiaW1hZ2UiPT1hLnR5cGU7fSwKLQkJCXJlc2V0
OiBmdW5jdGlvbihhKXtyZXR1cm4gInJlc2V0Ij09YS50eXBlO30sCi0JCQlidXR0b246IGZ1bmN0
aW9uKGEpe3JldHVybiAiYnV0dG9uIj09YS50eXBlfHxqUXVlcnkubm9kZU5hbWUoYSwiYnV0dG9u
Iik7fSwKLQkJCWlucHV0OiBmdW5jdGlvbihhKXtyZXR1cm4gL2lucHV0fHNlbGVjdHx0ZXh0YXJl
YXxidXR0b24vaS50ZXN0KGEubm9kZU5hbWUpO30sCi0KLQkJCS8vIDpoYXMoKQotCQkJaGFzOiBm
dW5jdGlvbihhLGksbSl7cmV0dXJuIGpRdWVyeS5maW5kKG1bM10sYSkubGVuZ3RoO30sCi0KLQkJ
CS8vIDpoZWFkZXIKLQkJCWhlYWRlcjogZnVuY3Rpb24oYSl7cmV0dXJuIC9oXGQvaS50ZXN0KGEu
bm9kZU5hbWUpO30sCi0KLQkJCS8vIDphbmltYXRlZAotCQkJYW5pbWF0ZWQ6IGZ1bmN0aW9uKGEp
e3JldHVybiBqUXVlcnkuZ3JlcChqUXVlcnkudGltZXJzLGZ1bmN0aW9uKGZuKXtyZXR1cm4gYT09
Zm4uZWxlbTt9KS5sZW5ndGg7fQotCQl9Ci0JfSwKLQkKLQkvLyBUaGUgcmVndWxhciBleHByZXNz
aW9ucyB0aGF0IHBvd2VyIHRoZSBwYXJzaW5nIGVuZ2luZQotCXBhcnNlOiBbCi0JCS8vIE1hdGNo
OiBbQHZhbHVlPSd0ZXN0J10sIFtAZm9vXQotCQkvXihcWykgKkA/KFtcdy1dKykgKihbISokXn49
XSopICooJz8iPykoLio/KVw0ICpcXS8sCi0KLQkJLy8gTWF0Y2g6IDpjb250YWlucygnZm9vJykK
LQkJL14oOikoW1x3LV0rKVwoIj8nPyguKj8oXCguKj9cKSk/W14oXSo/KSI/Jz9cKS8sCi0KLQkJ
Ly8gTWF0Y2g6IDpldmVuLCA6bGFzdC1jaGxpZCwgI2lkLCAuY2xhc3MKLQkJbmV3IFJlZ0V4cCgi
XihbOi4jXSopKCIgKyBjaGFycyArICIrKSIpCi0JXSwKLQotCW11bHRpRmlsdGVyOiBmdW5jdGlv
biggZXhwciwgZWxlbXMsIG5vdCApIHsKLQkJdmFyIG9sZCwgY3VyID0gW107Ci0KLQkJd2hpbGUg
KCBleHByICYmIGV4cHIgIT0gb2xkICkgewotCQkJb2xkID0gZXhwcjsKLQkJCXZhciBmID0galF1
ZXJ5LmZpbHRlciggZXhwciwgZWxlbXMsIG5vdCApOwotCQkJZXhwciA9IGYudC5yZXBsYWNlKC9e
XHMqLFxzKi8sICIiICk7Ci0JCQljdXIgPSBub3QgPyBlbGVtcyA9IGYuciA6IGpRdWVyeS5tZXJn
ZSggY3VyLCBmLnIgKTsKLQkJfQotCi0JCXJldHVybiBjdXI7Ci0JfSwKLQotCWZpbmQ6IGZ1bmN0
aW9uKCB0LCBjb250ZXh0ICkgewotCQkvLyBRdWlja2x5IGhhbmRsZSBub24tc3RyaW5nIGV4cHJl
c3Npb25zCi0JCWlmICggdHlwZW9mIHQgIT0gInN0cmluZyIgKQotCQkJcmV0dXJuIFsgdCBdOwot
Ci0JCS8vIGNoZWNrIHRvIG1ha2Ugc3VyZSBjb250ZXh0IGlzIGEgRE9NIGVsZW1lbnQgb3IgYSBk
b2N1bWVudAotCQlpZiAoIGNvbnRleHQgJiYgY29udGV4dC5ub2RlVHlwZSAhPSAxICYmIGNvbnRl
eHQubm9kZVR5cGUgIT0gOSkKLQkJCXJldHVybiBbIF07Ci0KLQkJLy8gU2V0IHRoZSBjb3JyZWN0
IGNvbnRleHQgKGlmIG5vbmUgaXMgcHJvdmlkZWQpCi0JCWNvbnRleHQgPSBjb250ZXh0IHx8IGRv
Y3VtZW50OwotCi0JCS8vIEluaXRpYWxpemUgdGhlIHNlYXJjaAotCQl2YXIgcmV0ID0gW2NvbnRl
eHRdLCBkb25lID0gW10sIGxhc3QsIG5vZGVOYW1lOwotCi0JCS8vIENvbnRpbnVlIHdoaWxlIGEg
c2VsZWN0b3IgZXhwcmVzc2lvbiBleGlzdHMsIGFuZCB3aGlsZQotCQkvLyB3ZSdyZSBubyBsb25n
ZXIgbG9vcGluZyB1cG9uIG91cnNlbHZlcwotCQl3aGlsZSAoIHQgJiYgbGFzdCAhPSB0ICkgewot
CQkJdmFyIHIgPSBbXTsKLQkJCWxhc3QgPSB0OwotCi0JCQl0ID0galF1ZXJ5LnRyaW0odCk7Ci0K
LQkJCXZhciBmb3VuZFRva2VuID0gZmFsc2U7Ci0KLQkJCS8vIEFuIGF0dGVtcHQgYXQgc3BlZWRp
bmcgdXAgY2hpbGQgc2VsZWN0b3JzIHRoYXQKLQkJCS8vIHBvaW50IHRvIGEgc3BlY2lmaWMgZWxl
bWVudCB0YWcKLQkJCXZhciByZSA9IHF1aWNrQ2hpbGQ7Ci0JCQl2YXIgbSA9IHJlLmV4ZWModCk7
Ci0KLQkJCWlmICggbSApIHsKLQkJCQlub2RlTmFtZSA9IG1bMV0udG9VcHBlckNhc2UoKTsKLQot
CQkJCS8vIFBlcmZvcm0gb3VyIG93biBpdGVyYXRpb24gYW5kIGZpbHRlcgotCQkJCWZvciAoIHZh
ciBpID0gMDsgcmV0W2ldOyBpKysgKQotCQkJCQlmb3IgKCB2YXIgYyA9IHJldFtpXS5maXJzdENo
aWxkOyBjOyBjID0gYy5uZXh0U2libGluZyApCi0JCQkJCQlpZiAoIGMubm9kZVR5cGUgPT0gMSAm
JiAobm9kZU5hbWUgPT0gIioiIHx8IGMubm9kZU5hbWUudG9VcHBlckNhc2UoKSA9PSBub2RlTmFt
ZSkgKQotCQkJCQkJCXIucHVzaCggYyApOwotCi0JCQkJcmV0ID0gcjsKLQkJCQl0ID0gdC5yZXBs
YWNlKCByZSwgIiIgKTsKLQkJCQlpZiAoIHQuaW5kZXhPZigiICIpID09IDAgKSBjb250aW51ZTsK
LQkJCQlmb3VuZFRva2VuID0gdHJ1ZTsKLQkJCX0gZWxzZSB7Ci0JCQkJcmUgPSAvXihbPit+XSlc
cyooXHcqKS9pOwotCi0JCQkJaWYgKCAobSA9IHJlLmV4ZWModCkpICE9IG51bGwgKSB7Ci0JCQkJ
CXIgPSBbXTsKLQotCQkJCQl2YXIgbWVyZ2UgPSB7fTsKLQkJCQkJbm9kZU5hbWUgPSBtWzJdLnRv
VXBwZXJDYXNlKCk7Ci0JCQkJCW0gPSBtWzFdOwotCi0JCQkJCWZvciAoIHZhciBqID0gMCwgcmwg
PSByZXQubGVuZ3RoOyBqIDwgcmw7IGorKyApIHsKLQkJCQkJCXZhciBuID0gbSA9PSAifiIgfHwg
bSA9PSAiKyIgPyByZXRbal0ubmV4dFNpYmxpbmcgOiByZXRbal0uZmlyc3RDaGlsZDsKLQkJCQkJ
CWZvciAoIDsgbjsgbiA9IG4ubmV4dFNpYmxpbmcgKQotCQkJCQkJCWlmICggbi5ub2RlVHlwZSA9
PSAxICkgewotCQkJCQkJCQl2YXIgaWQgPSBqUXVlcnkuZGF0YShuKTsKLQotCQkJCQkJCQlpZiAo
IG0gPT0gIn4iICYmIG1lcmdlW2lkXSApIGJyZWFrOwotCQkJCQkJCQkKLQkJCQkJCQkJaWYgKCFu
b2RlTmFtZSB8fCBuLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCkgPT0gbm9kZU5hbWUgKSB7Ci0JCQkJ
CQkJCQlpZiAoIG0gPT0gIn4iICkgbWVyZ2VbaWRdID0gdHJ1ZTsKLQkJCQkJCQkJCXIucHVzaCgg
biApOwotCQkJCQkJCQl9Ci0JCQkJCQkJCQotCQkJCQkJCQlpZiAoIG0gPT0gIisiICkgYnJlYWs7
Ci0JCQkJCQkJfQotCQkJCQl9Ci0KLQkJCQkJcmV0ID0gcjsKLQotCQkJCQkvLyBBbmQgcmVtb3Zl
IHRoZSB0b2tlbgotCQkJCQl0ID0galF1ZXJ5LnRyaW0oIHQucmVwbGFjZSggcmUsICIiICkgKTsK
LQkJCQkJZm91bmRUb2tlbiA9IHRydWU7Ci0JCQkJfQotCQkJfQotCi0JCQkvLyBTZWUgaWYgdGhl
cmUncyBzdGlsbCBhbiBleHByZXNzaW9uLCBhbmQgdGhhdCB3ZSBoYXZlbid0IGFscmVhZHkKLQkJ
CS8vIG1hdGNoZWQgYSB0b2tlbgotCQkJaWYgKCB0ICYmICFmb3VuZFRva2VuICkgewotCQkJCS8v
IEhhbmRsZSBtdWx0aXBsZSBleHByZXNzaW9ucwotCQkJCWlmICggIXQuaW5kZXhPZigiLCIpICkg
ewotCQkJCQkvLyBDbGVhbiB0aGUgcmVzdWx0IHNldAotCQkJCQlpZiAoIGNvbnRleHQgPT0gcmV0
WzBdICkgcmV0LnNoaWZ0KCk7Ci0KLQkJCQkJLy8gTWVyZ2UgdGhlIHJlc3VsdCBzZXRzCi0JCQkJ
CWRvbmUgPSBqUXVlcnkubWVyZ2UoIGRvbmUsIHJldCApOwotCi0JCQkJCS8vIFJlc2V0IHRoZSBj
b250ZXh0Ci0JCQkJCXIgPSByZXQgPSBbY29udGV4dF07Ci0KLQkJCQkJLy8gVG91Y2ggdXAgdGhl
IHNlbGVjdG9yIHN0cmluZwotCQkJCQl0ID0gIiAiICsgdC5zdWJzdHIoMSx0Lmxlbmd0aCk7Ci0K
LQkJCQl9IGVsc2UgewotCQkJCQkvLyBPcHRpbWl6ZSBmb3IgdGhlIGNhc2Ugbm9kZU5hbWUjaWRO
YW1lCi0JCQkJCXZhciByZTIgPSBxdWlja0lEOwotCQkJCQl2YXIgbSA9IHJlMi5leGVjKHQpOwot
CQkJCQkKLQkJCQkJLy8gUmUtb3JnYW5pemUgdGhlIHJlc3VsdHMsIHNvIHRoYXQgdGhleSdyZSBj
b25zaXN0ZW50Ci0JCQkJCWlmICggbSApIHsKLQkJCQkJCW0gPSBbIDAsIG1bMl0sIG1bM10sIG1b
MV0gXTsKLQotCQkJCQl9IGVsc2UgewotCQkJCQkJLy8gT3RoZXJ3aXNlLCBkbyBhIHRyYWRpdGlv
bmFsIGZpbHRlciBjaGVjayBmb3IKLQkJCQkJCS8vIElELCBjbGFzcywgYW5kIGVsZW1lbnQgc2Vs
ZWN0b3JzCi0JCQkJCQlyZTIgPSBxdWlja0NsYXNzOwotCQkJCQkJbSA9IHJlMi5leGVjKHQpOwot
CQkJCQl9Ci0KLQkJCQkJbVsyXSA9IG1bMl0ucmVwbGFjZSgvXFwvZywgIiIpOwotCi0JCQkJCXZh
ciBlbGVtID0gcmV0W3JldC5sZW5ndGgtMV07Ci0KLQkJCQkJLy8gVHJ5IHRvIGRvIGEgZ2xvYmFs
IHNlYXJjaCBieSBJRCwgd2hlcmUgd2UgY2FuCi0JCQkJCWlmICggbVsxXSA9PSAiIyIgJiYgZWxl
bSAmJiBlbGVtLmdldEVsZW1lbnRCeUlkICYmICFqUXVlcnkuaXNYTUxEb2MoZWxlbSkgKSB7Ci0J
CQkJCQkvLyBPcHRpbWl6YXRpb24gZm9yIEhUTUwgZG9jdW1lbnQgY2FzZQotCQkJCQkJdmFyIG9p
ZCA9IGVsZW0uZ2V0RWxlbWVudEJ5SWQobVsyXSk7Ci0JCQkJCQkKLQkJCQkJCS8vIERvIGEgcXVp
Y2sgY2hlY2sgZm9yIHRoZSBleGlzdGVuY2Ugb2YgdGhlIGFjdHVhbCBJRCBhdHRyaWJ1dGUKLQkJ
CQkJCS8vIHRvIGF2b2lkIHNlbGVjdGluZyBieSB0aGUgbmFtZSBhdHRyaWJ1dGUgaW4gSUUKLQkJ
CQkJCS8vIGFsc28gY2hlY2sgdG8gaW5zdXJlIGlkIGlzIGEgc3RyaW5nIHRvIGF2b2lkIHNlbGVj
dGluZyBhbiBlbGVtZW50IHdpdGggdGhlIG5hbWUgb2YgJ2lkJyBpbnNpZGUgYSBmb3JtCi0JCQkJ
CQlpZiAoIChqUXVlcnkuYnJvd3Nlci5tc2llfHxqUXVlcnkuYnJvd3Nlci5vcGVyYSkgJiYgb2lk
ICYmIHR5cGVvZiBvaWQuaWQgPT0gInN0cmluZyIgJiYgb2lkLmlkICE9IG1bMl0gKQotCQkJCQkJ
CW9pZCA9IGpRdWVyeSgnW0BpZD0iJyttWzJdKyciXScsIGVsZW0pWzBdOwotCi0JCQkJCQkvLyBE
byBhIHF1aWNrIGNoZWNrIGZvciBub2RlIG5hbWUgKHdoZXJlIGFwcGxpY2FibGUpIHNvCi0JCQkJ
CQkvLyB0aGF0IGRpdiNmb28gc2VhcmNoZXMgd2lsbCBiZSByZWFsbHkgZmFzdAotCQkJCQkJcmV0
ID0gciA9IG9pZCAmJiAoIW1bM10gfHwgalF1ZXJ5Lm5vZGVOYW1lKG9pZCwgbVszXSkpID8gW29p
ZF0gOiBbXTsKLQkJCQkJfSBlbHNlIHsKLQkJCQkJCS8vIFdlIG5lZWQgdG8gZmluZCBhbGwgZGVz
Y2VuZGFudCBlbGVtZW50cwotCQkJCQkJZm9yICggdmFyIGkgPSAwOyByZXRbaV07IGkrKyApIHsK
LQkJCQkJCQkvLyBHcmFiIHRoZSB0YWcgbmFtZSBiZWluZyBzZWFyY2hlZCBmb3IKLQkJCQkJCQl2
YXIgdGFnID0gbVsxXSA9PSAiIyIgJiYgbVszXSA/IG1bM10gOiBtWzFdICE9ICIiIHx8IG1bMF0g
PT0gIiIgPyAiKiIgOiBtWzJdOwotCi0JCQkJCQkJLy8gSGFuZGxlIElFNyBiZWluZyByZWFsbHkg
ZHVtYiBhYm91dCA8b2JqZWN0PnMKLQkJCQkJCQlpZiAoIHRhZyA9PSAiKiIgJiYgcmV0W2ldLm5v
ZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT0gIm9iamVjdCIgKQotCQkJCQkJCQl0YWcgPSAicGFyYW0i
OwotCi0JCQkJCQkJciA9IGpRdWVyeS5tZXJnZSggciwgcmV0W2ldLmdldEVsZW1lbnRzQnlUYWdO
YW1lKCB0YWcgKSk7Ci0JCQkJCQl9Ci0KLQkJCQkJCS8vIEl0J3MgZmFzdGVyIHRvIGZpbHRlciBi
eSBjbGFzcyBhbmQgYmUgZG9uZSB3aXRoIGl0Ci0JCQkJCQlpZiAoIG1bMV0gPT0gIi4iICkKLQkJ
CQkJCQlyID0galF1ZXJ5LmNsYXNzRmlsdGVyKCByLCBtWzJdICk7Ci0KLQkJCQkJCS8vIFNhbWUg
d2l0aCBJRCBmaWx0ZXJpbmcKLQkJCQkJCWlmICggbVsxXSA9PSAiIyIgKSB7Ci0JCQkJCQkJdmFy
IHRtcCA9IFtdOwotCi0JCQkJCQkJLy8gVHJ5IHRvIGZpbmQgdGhlIGVsZW1lbnQgd2l0aCB0aGUg
SUQKLQkJCQkJCQlmb3IgKCB2YXIgaSA9IDA7IHJbaV07IGkrKyApCi0JCQkJCQkJCWlmICggcltp
XS5nZXRBdHRyaWJ1dGUoImlkIikgPT0gbVsyXSApIHsKLQkJCQkJCQkJCXRtcCA9IFsgcltpXSBd
OwotCQkJCQkJCQkJYnJlYWs7Ci0JCQkJCQkJCX0KLQotCQkJCQkJCXIgPSB0bXA7Ci0JCQkJCQl9
Ci0KLQkJCQkJCXJldCA9IHI7Ci0JCQkJCX0KLQotCQkJCQl0ID0gdC5yZXBsYWNlKCByZTIsICIi
ICk7Ci0JCQkJfQotCi0JCQl9Ci0KLQkJCS8vIElmIGEgc2VsZWN0b3Igc3RyaW5nIHN0aWxsIGV4
aXN0cwotCQkJaWYgKCB0ICkgewotCQkJCS8vIEF0dGVtcHQgdG8gZmlsdGVyIGl0Ci0JCQkJdmFy
IHZhbCA9IGpRdWVyeS5maWx0ZXIodCxyKTsKLQkJCQlyZXQgPSByID0gdmFsLnI7Ci0JCQkJdCA9
IGpRdWVyeS50cmltKHZhbC50KTsKLQkJCX0KLQkJfQotCi0JCS8vIEFuIGVycm9yIG9jY3VycmVk
IHdpdGggdGhlIHNlbGVjdG9yOwotCQkvLyBqdXN0IHJldHVybiBhbiBlbXB0eSBzZXQgaW5zdGVh
ZAotCQlpZiAoIHQgKQotCQkJcmV0ID0gW107Ci0KLQkJLy8gUmVtb3ZlIHRoZSByb290IGNvbnRl
eHQKLQkJaWYgKCByZXQgJiYgY29udGV4dCA9PSByZXRbMF0gKQotCQkJcmV0LnNoaWZ0KCk7Ci0K
LQkJLy8gQW5kIGNvbWJpbmUgdGhlIHJlc3VsdHMKLQkJZG9uZSA9IGpRdWVyeS5tZXJnZSggZG9u
ZSwgcmV0ICk7Ci0KLQkJcmV0dXJuIGRvbmU7Ci0JfSwKLQotCWNsYXNzRmlsdGVyOiBmdW5jdGlv
bihyLG0sbm90KXsKLQkJbSA9ICIgIiArIG0gKyAiICI7Ci0JCXZhciB0bXAgPSBbXTsKLQkJZm9y
ICggdmFyIGkgPSAwOyByW2ldOyBpKysgKSB7Ci0JCQl2YXIgcGFzcyA9ICgiICIgKyByW2ldLmNs
YXNzTmFtZSArICIgIikuaW5kZXhPZiggbSApID49IDA7Ci0JCQlpZiAoICFub3QgJiYgcGFzcyB8
fCBub3QgJiYgIXBhc3MgKQotCQkJCXRtcC5wdXNoKCByW2ldICk7Ci0JCX0KLQkJcmV0dXJuIHRt
cDsKLQl9LAotCi0JZmlsdGVyOiBmdW5jdGlvbih0LHIsbm90KSB7Ci0JCXZhciBsYXN0OwotCi0J
CS8vIExvb2sgZm9yIGNvbW1vbiBmaWx0ZXIgZXhwcmVzc2lvbnMKLQkJd2hpbGUgKCB0ICYmIHQg
IT0gbGFzdCApIHsKLQkJCWxhc3QgPSB0OwotCi0JCQl2YXIgcCA9IGpRdWVyeS5wYXJzZSwgbTsK
LQotCQkJZm9yICggdmFyIGkgPSAwOyBwW2ldOyBpKysgKSB7Ci0JCQkJbSA9IHBbaV0uZXhlYygg
dCApOwotCi0JCQkJaWYgKCBtICkgewotCQkJCQkvLyBSZW1vdmUgd2hhdCB3ZSBqdXN0IG1hdGNo
ZWQKLQkJCQkJdCA9IHQuc3Vic3RyaW5nKCBtWzBdLmxlbmd0aCApOwotCi0JCQkJCW1bMl0gPSBt
WzJdLnJlcGxhY2UoL1xcL2csICIiKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCi0JCQlp
ZiAoICFtICkKLQkJCQlicmVhazsKLQotCQkJLy8gOm5vdCgpIGlzIGEgc3BlY2lhbCBjYXNlIHRo
YXQgY2FuIGJlIG9wdGltaXplZCBieQotCQkJLy8ga2VlcGluZyBpdCBvdXQgb2YgdGhlIGV4cHJl
c3Npb24gbGlzdAotCQkJaWYgKCBtWzFdID09ICI6IiAmJiBtWzJdID09ICJub3QiICkKLQkJCQkv
LyBvcHRpbWl6ZSBpZiBvbmx5IG9uZSBzZWxlY3RvciBmb3VuZCAobW9zdCBjb21tb24gY2FzZSkK
LQkJCQlyID0gaXNTaW1wbGUudGVzdCggbVszXSApID8KLQkJCQkJalF1ZXJ5LmZpbHRlcihtWzNd
LCByLCB0cnVlKS5yIDoKLQkJCQkJalF1ZXJ5KCByICkubm90KCBtWzNdICk7Ci0KLQkJCS8vIFdl
IGNhbiBnZXQgYSBiaWcgc3BlZWQgYm9vc3QgYnkgZmlsdGVyaW5nIGJ5IGNsYXNzIGhlcmUKLQkJ
CWVsc2UgaWYgKCBtWzFdID09ICIuIiApCi0JCQkJciA9IGpRdWVyeS5jbGFzc0ZpbHRlcihyLCBt
WzJdLCBub3QpOwotCi0JCQllbHNlIGlmICggbVsxXSA9PSAiWyIgKSB7Ci0JCQkJdmFyIHRtcCA9
IFtdLCB0eXBlID0gbVszXTsKLQkJCQkKLQkJCQlmb3IgKCB2YXIgaSA9IDAsIHJsID0gci5sZW5n
dGg7IGkgPCBybDsgaSsrICkgewotCQkJCQl2YXIgYSA9IHJbaV0sIHogPSBhWyBqUXVlcnkucHJv
cHNbbVsyXV0gfHwgbVsyXSBdOwotCQkJCQkKLQkJCQkJaWYgKCB6ID09IG51bGwgfHwgL2hyZWZ8
c3JjfHNlbGVjdGVkLy50ZXN0KG1bMl0pICkKLQkJCQkJCXogPSBqUXVlcnkuYXR0cihhLG1bMl0p
IHx8ICcnOwotCi0JCQkJCWlmICggKHR5cGUgPT0gIiIgJiYgISF6IHx8Ci0JCQkJCQkgdHlwZSA9
PSAiPSIgJiYgeiA9PSBtWzVdIHx8Ci0JCQkJCQkgdHlwZSA9PSAiIT0iICYmIHogIT0gbVs1XSB8
fAotCQkJCQkJIHR5cGUgPT0gIl49IiAmJiB6ICYmICF6LmluZGV4T2YobVs1XSkgfHwKLQkJCQkJ
CSB0eXBlID09ICIkPSIgJiYgei5zdWJzdHIoei5sZW5ndGggLSBtWzVdLmxlbmd0aCkgPT0gbVs1
XSB8fAotCQkJCQkJICh0eXBlID09ICIqPSIgfHwgdHlwZSA9PSAifj0iKSAmJiB6LmluZGV4T2Yo
bVs1XSkgPj0gMCkgXiBub3QgKQotCQkJCQkJCXRtcC5wdXNoKCBhICk7Ci0JCQkJfQotCQkJCQot
CQkJCXIgPSB0bXA7Ci0KLQkJCS8vIFdlIGNhbiBnZXQgYSBzcGVlZCBib29zdCBieSBoYW5kbGlu
ZyBudGgtY2hpbGQgaGVyZQotCQkJfSBlbHNlIGlmICggbVsxXSA9PSAiOiIgJiYgbVsyXSA9PSAi
bnRoLWNoaWxkIiApIHsKLQkJCQl2YXIgbWVyZ2UgPSB7fSwgdG1wID0gW10sCi0JCQkJCS8vIHBh
cnNlIGVxdWF0aW9ucyBsaWtlICdldmVuJywgJ29kZCcsICc1JywgJzJuJywgJzNuKzInLCAnNG4t
MScsICctbis2JwotCQkJCQl0ZXN0ID0gLygtPykoXGQqKW4oKD86XCt8LSk/XGQqKS8uZXhlYygK
LQkJCQkJCW1bM10gPT0gImV2ZW4iICYmICIybiIgfHwgbVszXSA9PSAib2RkIiAmJiAiMm4rMSIg
fHwKLQkJCQkJCSEvXEQvLnRlc3QobVszXSkgJiYgIjBuKyIgKyBtWzNdIHx8IG1bM10pLAotCQkJ
CQkvLyBjYWxjdWxhdGUgdGhlIG51bWJlcnMgKGZpcnN0KW4rKGxhc3QpIGluY2x1ZGluZyBpZiB0
aGV5IGFyZSBuZWdhdGl2ZQotCQkJCQlmaXJzdCA9ICh0ZXN0WzFdICsgKHRlc3RbMl0gfHwgMSkp
IC0gMCwgbGFzdCA9IHRlc3RbM10gLSAwOwotIAotCQkJCS8vIGxvb3AgdGhyb3VnaCBhbGwgdGhl
IGVsZW1lbnRzIGxlZnQgaW4gdGhlIGpRdWVyeSBvYmplY3QKLQkJCQlmb3IgKCB2YXIgaSA9IDAs
IHJsID0gci5sZW5ndGg7IGkgPCBybDsgaSsrICkgewotCQkJCQl2YXIgbm9kZSA9IHJbaV0sIHBh
cmVudE5vZGUgPSBub2RlLnBhcmVudE5vZGUsIGlkID0galF1ZXJ5LmRhdGEocGFyZW50Tm9kZSk7
Ci0KLQkJCQkJaWYgKCAhbWVyZ2VbaWRdICkgewotCQkJCQkJdmFyIGMgPSAxOwotCi0JCQkJCQlm
b3IgKCB2YXIgbiA9IHBhcmVudE5vZGUuZmlyc3RDaGlsZDsgbjsgbiA9IG4ubmV4dFNpYmxpbmcg
KQotCQkJCQkJCWlmICggbi5ub2RlVHlwZSA9PSAxICkKLQkJCQkJCQkJbi5ub2RlSW5kZXggPSBj
Kys7Ci0KLQkJCQkJCW1lcmdlW2lkXSA9IHRydWU7Ci0JCQkJCX0KLQotCQkJCQl2YXIgYWRkID0g
ZmFsc2U7Ci0KLQkJCQkJaWYgKCBmaXJzdCA9PSAwICkgewotCQkJCQkJaWYgKCBub2RlLm5vZGVJ
bmRleCA9PSBsYXN0ICkKLQkJCQkJCQlhZGQgPSB0cnVlOwotCQkJCQl9IGVsc2UgaWYgKCAobm9k
ZS5ub2RlSW5kZXggLSBsYXN0KSAlIGZpcnN0ID09IDAgJiYgKG5vZGUubm9kZUluZGV4IC0gbGFz
dCkgLyBmaXJzdCA+PSAwICkKLQkJCQkJCWFkZCA9IHRydWU7Ci0KLQkJCQkJaWYgKCBhZGQgXiBu
b3QgKQotCQkJCQkJdG1wLnB1c2goIG5vZGUgKTsKLQkJCQl9Ci0KLQkJCQlyID0gdG1wOwotCi0J
CQkvLyBPdGhlcndpc2UsIGZpbmQgdGhlIGV4cHJlc3Npb24gdG8gZXhlY3V0ZQotCQkJfSBlbHNl
IHsKLQkJCQl2YXIgZm4gPSBqUXVlcnkuZXhwclsgbVsxXSBdOwotCQkJCWlmICggdHlwZW9mIGZu
ID09ICJvYmplY3QiICkKLQkJCQkJZm4gPSBmblsgbVsyXSBdOwotCi0JCQkJaWYgKCB0eXBlb2Yg
Zm4gPT0gInN0cmluZyIgKQotCQkJCQlmbiA9IGV2YWwoImZhbHNlfHxmdW5jdGlvbihhLGkpe3Jl
dHVybiAiICsgZm4gKyAiO30iKTsKLQotCQkJCS8vIEV4ZWN1dGUgaXQgYWdhaW5zdCB0aGUgY3Vy
cmVudCBmaWx0ZXIKLQkJCQlyID0galF1ZXJ5LmdyZXAoIHIsIGZ1bmN0aW9uKGVsZW0sIGkpewot
CQkJCQlyZXR1cm4gZm4oZWxlbSwgaSwgbSwgcik7Ci0JCQkJfSwgbm90ICk7Ci0JCQl9Ci0JCX0K
LQotCQkvLyBSZXR1cm4gYW4gYXJyYXkgb2YgZmlsdGVyZWQgZWxlbWVudHMgKHIpCi0JCS8vIGFu
ZCB0aGUgbW9kaWZpZWQgZXhwcmVzc2lvbiBzdHJpbmcgKHQpCi0JCXJldHVybiB7IHI6IHIsIHQ6
IHQgfTsKLQl9LAotCi0JZGlyOiBmdW5jdGlvbiggZWxlbSwgZGlyICl7Ci0JCXZhciBtYXRjaGVk
ID0gW107Ci0JCXZhciBjdXIgPSBlbGVtW2Rpcl07Ci0JCXdoaWxlICggY3VyICYmIGN1ciAhPSBk
b2N1bWVudCApIHsKLQkJCWlmICggY3VyLm5vZGVUeXBlID09IDEgKQotCQkJCW1hdGNoZWQucHVz
aCggY3VyICk7Ci0JCQljdXIgPSBjdXJbZGlyXTsKLQkJfQotCQlyZXR1cm4gbWF0Y2hlZDsKLQl9
LAotCQotCW50aDogZnVuY3Rpb24oY3VyLHJlc3VsdCxkaXIsZWxlbSl7Ci0JCXJlc3VsdCA9IHJl
c3VsdCB8fCAxOwotCQl2YXIgbnVtID0gMDsKLQotCQlmb3IgKCA7IGN1cjsgY3VyID0gY3VyW2Rp
cl0gKQotCQkJaWYgKCBjdXIubm9kZVR5cGUgPT0gMSAmJiArK251bSA9PSByZXN1bHQgKQotCQkJ
CWJyZWFrOwotCi0JCXJldHVybiBjdXI7Ci0JfSwKLQkKLQlzaWJsaW5nOiBmdW5jdGlvbiggbiwg
ZWxlbSApIHsKLQkJdmFyIHIgPSBbXTsKLQotCQlmb3IgKCA7IG47IG4gPSBuLm5leHRTaWJsaW5n
ICkgewotCQkJaWYgKCBuLm5vZGVUeXBlID09IDEgJiYgKCFlbGVtIHx8IG4gIT0gZWxlbSkgKQot
CQkJCXIucHVzaCggbiApOwotCQl9Ci0KLQkJcmV0dXJuIHI7Ci0JfQotfSk7Ci0KLS8qCi0gKiBB
IG51bWJlciBvZiBoZWxwZXIgZnVuY3Rpb25zIHVzZWQgZm9yIG1hbmFnaW5nIGV2ZW50cy4KLSAq
IE1hbnkgb2YgdGhlIGlkZWFzIGJlaGluZCB0aGlzIGNvZGUgb3JpZ25hdGVkIGZyb20gCi0gKiBE
ZWFuIEVkd2FyZHMnIGFkZEV2ZW50IGxpYnJhcnkuCi0gKi8KLWpRdWVyeS5ldmVudCA9IHsKLQot
CS8vIEJpbmQgYW4gZXZlbnQgdG8gYW4gZWxlbWVudAotCS8vIE9yaWdpbmFsIGJ5IERlYW4gRWR3
YXJkcwotCWFkZDogZnVuY3Rpb24oZWxlbSwgdHlwZXMsIGhhbmRsZXIsIGRhdGEpIHsKLQkJaWYg
KCBlbGVtLm5vZGVUeXBlID09IDMgfHwgZWxlbS5ub2RlVHlwZSA9PSA4ICkKLQkJCXJldHVybjsK
LQotCQkvLyBGb3Igd2hhdGV2ZXIgcmVhc29uLCBJRSBoYXMgdHJvdWJsZSBwYXNzaW5nIHRoZSB3
aW5kb3cgb2JqZWN0Ci0JCS8vIGFyb3VuZCwgY2F1c2luZyBpdCB0byBiZSBjbG9uZWQgaW4gdGhl
IHByb2Nlc3MKLQkJaWYgKCBqUXVlcnkuYnJvd3Nlci5tc2llICYmIGVsZW0uc2V0SW50ZXJ2YWwg
IT0gdW5kZWZpbmVkICkKLQkJCWVsZW0gPSB3aW5kb3c7Ci0KLQkJLy8gTWFrZSBzdXJlIHRoYXQg
dGhlIGZ1bmN0aW9uIGJlaW5nIGV4ZWN1dGVkIGhhcyBhIHVuaXF1ZSBJRAotCQlpZiAoICFoYW5k
bGVyLmd1aWQgKQotCQkJaGFuZGxlci5ndWlkID0gdGhpcy5ndWlkKys7Ci0JCQkKLQkJLy8gaWYg
ZGF0YSBpcyBwYXNzZWQsIGJpbmQgdG8gaGFuZGxlciAKLQkJaWYoIGRhdGEgIT0gdW5kZWZpbmVk
ICkgeyAKLQkJCS8vIENyZWF0ZSB0ZW1wb3JhcnkgZnVuY3Rpb24gcG9pbnRlciB0byBvcmlnaW5h
bCBoYW5kbGVyIAotCQkJdmFyIGZuID0gaGFuZGxlcjsgCi0KLQkJCS8vIENyZWF0ZSB1bmlxdWUg
aGFuZGxlciBmdW5jdGlvbiwgd3JhcHBlZCBhcm91bmQgb3JpZ2luYWwgaGFuZGxlciAKLQkJCWhh
bmRsZXIgPSBmdW5jdGlvbigpIHsgCi0JCQkJLy8gUGFzcyBhcmd1bWVudHMgYW5kIGNvbnRleHQg
dG8gb3JpZ2luYWwgaGFuZGxlciAKLQkJCQlyZXR1cm4gZm4uYXBwbHkodGhpcywgYXJndW1lbnRz
KTsgCi0JCQl9OwotCi0JCQkvLyBTdG9yZSBkYXRhIGluIHVuaXF1ZSBoYW5kbGVyIAotCQkJaGFu
ZGxlci5kYXRhID0gZGF0YTsKLQotCQkJLy8gU2V0IHRoZSBndWlkIG9mIHVuaXF1ZSBoYW5kbGVy
IHRvIHRoZSBzYW1lIG9mIG9yaWdpbmFsIGhhbmRsZXIsIHNvIGl0IGNhbiBiZSByZW1vdmVkIAot
CQkJaGFuZGxlci5ndWlkID0gZm4uZ3VpZDsKLQkJfQotCi0JCS8vIEluaXQgdGhlIGVsZW1lbnQn
cyBldmVudCBzdHJ1Y3R1cmUKLQkJdmFyIGV2ZW50cyA9IGpRdWVyeS5kYXRhKGVsZW0sICJldmVu
dHMiKSB8fCBqUXVlcnkuZGF0YShlbGVtLCAiZXZlbnRzIiwge30pLAotCQkJaGFuZGxlID0galF1
ZXJ5LmRhdGEoZWxlbSwgImhhbmRsZSIpIHx8IGpRdWVyeS5kYXRhKGVsZW0sICJoYW5kbGUiLCBm
dW5jdGlvbigpewotCQkJCS8vIHJldHVybmVkIHVuZGVmaW5lZCBvciBmYWxzZQotCQkJCXZhciB2
YWw7Ci0KLQkJCQkvLyBIYW5kbGUgdGhlIHNlY29uZCBldmVudCBvZiBhIHRyaWdnZXIgYW5kIHdo
ZW4KLQkJCQkvLyBhbiBldmVudCBpcyBjYWxsZWQgYWZ0ZXIgYSBwYWdlIGhhcyB1bmxvYWRlZAot
CQkJCWlmICggdHlwZW9mIGpRdWVyeSA9PSAidW5kZWZpbmVkIiB8fCBqUXVlcnkuZXZlbnQudHJp
Z2dlcmVkICkKLQkJCQkJcmV0dXJuIHZhbDsKLQkJCi0JCQkJdmFsID0galF1ZXJ5LmV2ZW50Lmhh
bmRsZS5hcHBseShhcmd1bWVudHMuY2FsbGVlLmVsZW0sIGFyZ3VtZW50cyk7Ci0JCQotCQkJCXJl
dHVybiB2YWw7Ci0JCQl9KTsKLQkJLy8gQWRkIGVsZW0gYXMgYSBwcm9wZXJ0eSBvZiB0aGUgaGFu
ZGxlIGZ1bmN0aW9uCi0JCS8vIFRoaXMgaXMgdG8gcHJldmVudCBhIG1lbW9yeSBsZWFrIHdpdGgg
bm9uLW5hdGl2ZQotCQkvLyBldmVudCBpbiBJRS4KLQkJaGFuZGxlLmVsZW0gPSBlbGVtOwotCQkJ
Ci0JCQkvLyBIYW5kbGUgbXVsdGlwbGUgZXZlbnRzIHNlcGVyYXRlZCBieSBhIHNwYWNlCi0JCQkv
LyBqUXVlcnkoLi4uKS5iaW5kKCJtb3VzZW92ZXIgbW91c2VvdXQiLCBmbik7Ci0JCQlqUXVlcnku
ZWFjaCh0eXBlcy5zcGxpdCgvXHMrLyksIGZ1bmN0aW9uKGluZGV4LCB0eXBlKSB7Ci0JCQkJLy8g
TmFtZXNwYWNlZCBldmVudCBoYW5kbGVycwotCQkJCXZhciBwYXJ0cyA9IHR5cGUuc3BsaXQoIi4i
KTsKLQkJCQl0eXBlID0gcGFydHNbMF07Ci0JCQkJaGFuZGxlci50eXBlID0gcGFydHNbMV07Ci0K
LQkJCQkvLyBHZXQgdGhlIGN1cnJlbnQgbGlzdCBvZiBmdW5jdGlvbnMgYm91bmQgdG8gdGhpcyBl
dmVudAotCQkJCXZhciBoYW5kbGVycyA9IGV2ZW50c1t0eXBlXTsKLQotCQkJCS8vIEluaXQgdGhl
IGV2ZW50IGhhbmRsZXIgcXVldWUKLQkJCQlpZiAoIWhhbmRsZXJzKSB7Ci0JCQkJCWhhbmRsZXJz
ID0gZXZlbnRzW3R5cGVdID0ge307Ci0JCQotCQkJCQkvLyBDaGVjayBmb3IgYSBzcGVjaWFsIGV2
ZW50IGhhbmRsZXIKLQkJCQkJLy8gT25seSB1c2UgYWRkRXZlbnRMaXN0ZW5lci9hdHRhY2hFdmVu
dCBpZiB0aGUgc3BlY2lhbAotCQkJCQkvLyBldmVudHMgaGFuZGxlciByZXR1cm5zIGZhbHNlCi0J
CQkJCWlmICggIWpRdWVyeS5ldmVudC5zcGVjaWFsW3R5cGVdIHx8IGpRdWVyeS5ldmVudC5zcGVj
aWFsW3R5cGVdLnNldHVwLmNhbGwoZWxlbSkgPT09IGZhbHNlICkgewotCQkJCQkJLy8gQmluZCB0
aGUgZ2xvYmFsIGV2ZW50IGhhbmRsZXIgdG8gdGhlIGVsZW1lbnQKLQkJCQkJCWlmIChlbGVtLmFk
ZEV2ZW50TGlzdGVuZXIpCi0JCQkJCQkJZWxlbS5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGhhbmRs
ZSwgZmFsc2UpOwotCQkJCQkJZWxzZSBpZiAoZWxlbS5hdHRhY2hFdmVudCkKLQkJCQkJCQllbGVt
LmF0dGFjaEV2ZW50KCJvbiIgKyB0eXBlLCBoYW5kbGUpOwotCQkJCQl9Ci0JCQkJfQotCi0JCQkJ
Ly8gQWRkIHRoZSBmdW5jdGlvbiB0byB0aGUgZWxlbWVudCdzIGhhbmRsZXIgbGlzdAotCQkJCWhh
bmRsZXJzW2hhbmRsZXIuZ3VpZF0gPSBoYW5kbGVyOwotCi0JCQkJLy8gS2VlcCB0cmFjayBvZiB3
aGljaCBldmVudHMgaGF2ZSBiZWVuIHVzZWQsIGZvciBnbG9iYWwgdHJpZ2dlcmluZwotCQkJCWpR
dWVyeS5ldmVudC5nbG9iYWxbdHlwZV0gPSB0cnVlOwotCQkJfSk7Ci0JCQotCQkvLyBOdWxsaWZ5
IGVsZW0gdG8gcHJldmVudCBtZW1vcnkgbGVha3MgaW4gSUUKLQkJZWxlbSA9IG51bGw7Ci0JfSwK
LQotCWd1aWQ6IDEsCi0JZ2xvYmFsOiB7fSwKLQotCS8vIERldGFjaCBhbiBldmVudCBvciBzZXQg
b2YgZXZlbnRzIGZyb20gYW4gZWxlbWVudAotCXJlbW92ZTogZnVuY3Rpb24oZWxlbSwgdHlwZXMs
IGhhbmRsZXIpIHsKLQkJLy8gZG9uJ3QgZG8gZXZlbnRzIG9uIHRleHQgYW5kIGNvbW1lbnQgbm9k
ZXMKLQkJaWYgKCBlbGVtLm5vZGVUeXBlID09IDMgfHwgZWxlbS5ub2RlVHlwZSA9PSA4ICkKLQkJ
CXJldHVybjsKLQotCQl2YXIgZXZlbnRzID0galF1ZXJ5LmRhdGEoZWxlbSwgImV2ZW50cyIpLCBy
ZXQsIGluZGV4OwotCi0JCWlmICggZXZlbnRzICkgewotCQkJLy8gVW5iaW5kIGFsbCBldmVudHMg
Zm9yIHRoZSBlbGVtZW50Ci0JCQlpZiAoIHR5cGVzID09IHVuZGVmaW5lZCB8fCAodHlwZW9mIHR5
cGVzID09ICJzdHJpbmciICYmIHR5cGVzLmNoYXJBdCgwKSA9PSAiLiIpICkKLQkJCQlmb3IgKCB2
YXIgdHlwZSBpbiBldmVudHMgKQotCQkJCQl0aGlzLnJlbW92ZSggZWxlbSwgdHlwZSArICh0eXBl
cyB8fCAiIikgKTsKLQkJCWVsc2UgewotCQkJCS8vIHR5cGVzIGlzIGFjdHVhbGx5IGFuIGV2ZW50
IG9iamVjdCBoZXJlCi0JCQkJaWYgKCB0eXBlcy50eXBlICkgewotCQkJCQloYW5kbGVyID0gdHlw
ZXMuaGFuZGxlcjsKLQkJCQkJdHlwZXMgPSB0eXBlcy50eXBlOwotCQkJCX0KLQkJCQkKLQkJCQkv
LyBIYW5kbGUgbXVsdGlwbGUgZXZlbnRzIHNlcGVyYXRlZCBieSBhIHNwYWNlCi0JCQkJLy8galF1
ZXJ5KC4uLikudW5iaW5kKCJtb3VzZW92ZXIgbW91c2VvdXQiLCBmbik7Ci0JCQkJalF1ZXJ5LmVh
Y2godHlwZXMuc3BsaXQoL1xzKy8pLCBmdW5jdGlvbihpbmRleCwgdHlwZSl7Ci0JCQkJCS8vIE5h
bWVzcGFjZWQgZXZlbnQgaGFuZGxlcnMKLQkJCQkJdmFyIHBhcnRzID0gdHlwZS5zcGxpdCgiLiIp
OwotCQkJCQl0eXBlID0gcGFydHNbMF07Ci0JCQkJCQotCQkJCQlpZiAoIGV2ZW50c1t0eXBlXSAp
IHsKLQkJCQkJCS8vIHJlbW92ZSB0aGUgZ2l2ZW4gaGFuZGxlciBmb3IgdGhlIGdpdmVuIHR5cGUK
LQkJCQkJCWlmICggaGFuZGxlciApCi0JCQkJCQkJZGVsZXRlIGV2ZW50c1t0eXBlXVtoYW5kbGVy
Lmd1aWRdOwotCQkJCi0JCQkJCQkvLyByZW1vdmUgYWxsIGhhbmRsZXJzIGZvciB0aGUgZ2l2ZW4g
dHlwZQotCQkJCQkJZWxzZQotCQkJCQkJCWZvciAoIGhhbmRsZXIgaW4gZXZlbnRzW3R5cGVdICkK
LQkJCQkJCQkJLy8gSGFuZGxlIHRoZSByZW1vdmFsIG9mIG5hbWVzcGFjZWQgZXZlbnRzCi0JCQkJ
CQkJCWlmICggIXBhcnRzWzFdIHx8IGV2ZW50c1t0eXBlXVtoYW5kbGVyXS50eXBlID09IHBhcnRz
WzFdICkKLQkJCQkJCQkJCWRlbGV0ZSBldmVudHNbdHlwZV1baGFuZGxlcl07Ci0KLQkJCQkJCS8v
IHJlbW92ZSBnZW5lcmljIGV2ZW50IGhhbmRsZXIgaWYgbm8gbW9yZSBoYW5kbGVycyBleGlzdAot
CQkJCQkJZm9yICggcmV0IGluIGV2ZW50c1t0eXBlXSApIGJyZWFrOwotCQkJCQkJaWYgKCAhcmV0
ICkgewotCQkJCQkJCWlmICggIWpRdWVyeS5ldmVudC5zcGVjaWFsW3R5cGVdIHx8IGpRdWVyeS5l
dmVudC5zcGVjaWFsW3R5cGVdLnRlYXJkb3duLmNhbGwoZWxlbSkgPT09IGZhbHNlICkgewotCQkJ
CQkJCQlpZiAoZWxlbS5yZW1vdmVFdmVudExpc3RlbmVyKQotCQkJCQkJCQkJZWxlbS5yZW1vdmVF
dmVudExpc3RlbmVyKHR5cGUsIGpRdWVyeS5kYXRhKGVsZW0sICJoYW5kbGUiKSwgZmFsc2UpOwot
CQkJCQkJCQllbHNlIGlmIChlbGVtLmRldGFjaEV2ZW50KQotCQkJCQkJCQkJZWxlbS5kZXRhY2hF
dmVudCgib24iICsgdHlwZSwgalF1ZXJ5LmRhdGEoZWxlbSwgImhhbmRsZSIpKTsKLQkJCQkJCQl9
Ci0JCQkJCQkJcmV0ID0gbnVsbDsKLQkJCQkJCQlkZWxldGUgZXZlbnRzW3R5cGVdOwotCQkJCQkJ
fQotCQkJCQl9Ci0JCQkJfSk7Ci0JCQl9Ci0KLQkJCS8vIFJlbW92ZSB0aGUgZXhwYW5kbyBpZiBp
dCdzIG5vIGxvbmdlciB1c2VkCi0JCQlmb3IgKCByZXQgaW4gZXZlbnRzICkgYnJlYWs7Ci0JCQlp
ZiAoICFyZXQgKSB7Ci0JCQkJdmFyIGhhbmRsZSA9IGpRdWVyeS5kYXRhKCBlbGVtLCAiaGFuZGxl
IiApOwotCQkJCWlmICggaGFuZGxlICkgaGFuZGxlLmVsZW0gPSBudWxsOwotCQkJCWpRdWVyeS5y
ZW1vdmVEYXRhKCBlbGVtLCAiZXZlbnRzIiApOwotCQkJCWpRdWVyeS5yZW1vdmVEYXRhKCBlbGVt
LCAiaGFuZGxlIiApOwotCQkJfQotCQl9Ci0JfSwKLQotCXRyaWdnZXI6IGZ1bmN0aW9uKHR5cGUs
IGRhdGEsIGVsZW0sIGRvbmF0aXZlLCBleHRyYSkgewotCQkvLyBDbG9uZSB0aGUgaW5jb21pbmcg
ZGF0YSwgaWYgYW55Ci0JCWRhdGEgPSBqUXVlcnkubWFrZUFycmF5KGRhdGEgfHwgW10pOwotCi0J
CWlmICggdHlwZS5pbmRleE9mKCIhIikgPj0gMCApIHsKLQkJCXR5cGUgPSB0eXBlLnNsaWNlKDAs
IC0xKTsKLQkJCXZhciBleGNsdXNpdmUgPSB0cnVlOwotCQl9Ci0KLQkJLy8gSGFuZGxlIGEgZ2xv
YmFsIHRyaWdnZXIKLQkJaWYgKCAhZWxlbSApIHsKLQkJCS8vIE9ubHkgdHJpZ2dlciBpZiB3ZSd2
ZSBldmVyIGJvdW5kIGFuIGV2ZW50IGZvciBpdAotCQkJaWYgKCB0aGlzLmdsb2JhbFt0eXBlXSAp
Ci0JCQkJalF1ZXJ5KCIqIikuYWRkKFt3aW5kb3csIGRvY3VtZW50XSkudHJpZ2dlcih0eXBlLCBk
YXRhKTsKLQotCQkvLyBIYW5kbGUgdHJpZ2dlcmluZyBhIHNpbmdsZSBlbGVtZW50Ci0JCX0gZWxz
ZSB7Ci0JCQkvLyBkb24ndCBkbyBldmVudHMgb24gdGV4dCBhbmQgY29tbWVudCBub2RlcwotCQkJ
aWYgKCBlbGVtLm5vZGVUeXBlID09IDMgfHwgZWxlbS5ub2RlVHlwZSA9PSA4ICkKLQkJCQlyZXR1
cm4gdW5kZWZpbmVkOwotCi0JCQl2YXIgdmFsLCByZXQsIGZuID0galF1ZXJ5LmlzRnVuY3Rpb24o
IGVsZW1bIHR5cGUgXSB8fCBudWxsICksCi0JCQkJLy8gQ2hlY2sgdG8gc2VlIGlmIHdlIG5lZWQg
dG8gcHJvdmlkZSBhIGZha2UgZXZlbnQsIG9yIG5vdAotCQkJCWV2ZW50ID0gIWRhdGFbMF0gfHwg
IWRhdGFbMF0ucHJldmVudERlZmF1bHQ7Ci0JCQkKLQkJCS8vIFBhc3MgYWxvbmcgYSBmYWtlIGV2
ZW50Ci0JCQlpZiAoIGV2ZW50ICkKLQkJCQlkYXRhLnVuc2hpZnQoIHRoaXMuZml4KHsgdHlwZTog
dHlwZSwgdGFyZ2V0OiBlbGVtIH0pICk7Ci0KLQkJCS8vIEVuZm9yY2UgdGhlIHJpZ2h0IHRyaWdn
ZXIgdHlwZQotCQkJZGF0YVswXS50eXBlID0gdHlwZTsKLQkJCWlmICggZXhjbHVzaXZlICkKLQkJ
CQlkYXRhWzBdLmV4Y2x1c2l2ZSA9IHRydWU7Ci0KLQkJCS8vIFRyaWdnZXIgdGhlIGV2ZW50Ci0J
CQlpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBqUXVlcnkuZGF0YShlbGVtLCAiaGFuZGxlIikgKSAp
Ci0JCQkJdmFsID0galF1ZXJ5LmRhdGEoZWxlbSwgImhhbmRsZSIpLmFwcGx5KCBlbGVtLCBkYXRh
ICk7Ci0KLQkJCS8vIEhhbmRsZSB0cmlnZ2VyaW5nIG5hdGl2ZSAub25mb28gaGFuZGxlcnMKLQkJ
CWlmICggIWZuICYmIGVsZW1bIm9uIit0eXBlXSAmJiBlbGVtWyJvbiIrdHlwZV0uYXBwbHkoIGVs
ZW0sIGRhdGEgKSA9PT0gZmFsc2UgKQotCQkJCXZhbCA9IGZhbHNlOwotCi0JCQkvLyBFeHRyYSBm
dW5jdGlvbnMgZG9uJ3QgZ2V0IHRoZSBjdXN0b20gZXZlbnQgb2JqZWN0Ci0JCQlpZiAoIGV2ZW50
ICkKLQkJCQlkYXRhLnNoaWZ0KCk7Ci0KLQkJCS8vIEhhbmRsZSB0cmlnZ2VyaW5nIG9mIGV4dHJh
IGZ1bmN0aW9uCi0JCQlpZiAoIGV4dHJhICYmIGpRdWVyeS5pc0Z1bmN0aW9uKCBleHRyYSApICkg
ewotCQkJCS8vIGNhbGwgdGhlIGV4dHJhIGZ1bmN0aW9uIGFuZCB0YWNrIHRoZSBjdXJyZW50IHJl
dHVybiB2YWx1ZSBvbiB0aGUgZW5kIGZvciBwb3NzaWJsZSBpbnNwZWN0aW9uCi0JCQkJcmV0ID0g
ZXh0cmEuYXBwbHkoIGVsZW0sIHZhbCA9PSBudWxsID8gZGF0YSA6IGRhdGEuY29uY2F0KCB2YWwg
KSApOwotCQkJCS8vIGlmIGFueXRoaW5nIGlzIHJldHVybmVkLCBnaXZlIGl0IHByZWNlZGVuY2Ug
YW5kIGhhdmUgaXQgb3ZlcndyaXRlIHRoZSBwcmV2aW91cyB2YWx1ZQotCQkJCWlmIChyZXQgIT09
IHVuZGVmaW5lZCkKLQkJCQkJdmFsID0gcmV0OwotCQkJfQotCi0JCQkvLyBUcmlnZ2VyIHRoZSBu
YXRpdmUgZXZlbnRzIChleGNlcHQgZm9yIGNsaWNrcyBvbiBsaW5rcykKLQkJCWlmICggZm4gJiYg
ZG9uYXRpdmUgIT09IGZhbHNlICYmIHZhbCAhPT0gZmFsc2UgJiYgIShqUXVlcnkubm9kZU5hbWUo
ZWxlbSwgJ2EnKSAmJiB0eXBlID09ICJjbGljayIpICkgewotCQkJCXRoaXMudHJpZ2dlcmVkID0g
dHJ1ZTsKLQkJCQl0cnkgewotCQkJCQllbGVtWyB0eXBlIF0oKTsKLQkJCQkvLyBwcmV2ZW50IElF
IGZyb20gdGhyb3dpbmcgYW4gZXJyb3IgZm9yIHNvbWUgaGlkZGVuIGVsZW1lbnRzCi0JCQkJfSBj
YXRjaCAoZSkge30KLQkJCX0KLQotCQkJdGhpcy50cmlnZ2VyZWQgPSBmYWxzZTsKLQkJfQotCi0J
CXJldHVybiB2YWw7Ci0JfSwKLQotCWhhbmRsZTogZnVuY3Rpb24oZXZlbnQpIHsKLQkJLy8gcmV0
dXJuZWQgdW5kZWZpbmVkIG9yIGZhbHNlCi0JCXZhciB2YWw7Ci0KLQkJLy8gRW1wdHkgb2JqZWN0
IGlzIGZvciB0cmlnZ2VyZWQgZXZlbnRzIHdpdGggbm8gZGF0YQotCQlldmVudCA9IGpRdWVyeS5l
dmVudC5maXgoIGV2ZW50IHx8IHdpbmRvdy5ldmVudCB8fCB7fSApOyAKLQotCQkvLyBOYW1lc3Bh
Y2VkIGV2ZW50IGhhbmRsZXJzCi0JCXZhciBwYXJ0cyA9IGV2ZW50LnR5cGUuc3BsaXQoIi4iKTsK
LQkJZXZlbnQudHlwZSA9IHBhcnRzWzBdOwotCi0JCXZhciBoYW5kbGVycyA9IGpRdWVyeS5kYXRh
KHRoaXMsICJldmVudHMiKSAmJiBqUXVlcnkuZGF0YSh0aGlzLCAiZXZlbnRzIilbZXZlbnQudHlw
ZV0sIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCggYXJndW1lbnRzLCAxICk7Ci0J
CWFyZ3MudW5zaGlmdCggZXZlbnQgKTsKLQotCQlmb3IgKCB2YXIgaiBpbiBoYW5kbGVycyApIHsK
LQkJCXZhciBoYW5kbGVyID0gaGFuZGxlcnNbal07Ci0JCQkvLyBQYXNzIGluIGEgcmVmZXJlbmNl
IHRvIHRoZSBoYW5kbGVyIGZ1bmN0aW9uIGl0c2VsZgotCQkJLy8gU28gdGhhdCB3ZSBjYW4gbGF0
ZXIgcmVtb3ZlIGl0Ci0JCQlhcmdzWzBdLmhhbmRsZXIgPSBoYW5kbGVyOwotCQkJYXJnc1swXS5k
YXRhID0gaGFuZGxlci5kYXRhOwotCi0JCQkvLyBGaWx0ZXIgdGhlIGZ1bmN0aW9ucyBieSBjbGFz
cwotCQkJaWYgKCAhcGFydHNbMV0gJiYgIWV2ZW50LmV4Y2x1c2l2ZSB8fCBoYW5kbGVyLnR5cGUg
PT0gcGFydHNbMV0gKSB7Ci0JCQkJdmFyIHJldCA9IGhhbmRsZXIuYXBwbHkoIHRoaXMsIGFyZ3Mg
KTsKLQotCQkJCWlmICggdmFsICE9PSBmYWxzZSApCi0JCQkJCXZhbCA9IHJldDsKLQotCQkJCWlm
ICggcmV0ID09PSBmYWxzZSApIHsKLQkJCQkJZXZlbnQucHJldmVudERlZmF1bHQoKTsKLQkJCQkJ
ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkJLy8gQ2xlYW4g
dXAgYWRkZWQgcHJvcGVydGllcyBpbiBJRSB0byBwcmV2ZW50IG1lbW9yeSBsZWFrCi0JCWlmIChq
UXVlcnkuYnJvd3Nlci5tc2llKQotCQkJZXZlbnQudGFyZ2V0ID0gZXZlbnQucHJldmVudERlZmF1
bHQgPSBldmVudC5zdG9wUHJvcGFnYXRpb24gPQotCQkJCWV2ZW50LmhhbmRsZXIgPSBldmVudC5k
YXRhID0gbnVsbDsKLQotCQlyZXR1cm4gdmFsOwotCX0sCi0KLQlmaXg6IGZ1bmN0aW9uKGV2ZW50
KSB7Ci0JCS8vIHN0b3JlIGEgY29weSBvZiB0aGUgb3JpZ2luYWwgZXZlbnQgb2JqZWN0IAotCQkv
LyBhbmQgY2xvbmUgdG8gc2V0IHJlYWQtb25seSBwcm9wZXJ0aWVzCi0JCXZhciBvcmlnaW5hbEV2
ZW50ID0gZXZlbnQ7Ci0JCWV2ZW50ID0galF1ZXJ5LmV4dGVuZCh7fSwgb3JpZ2luYWxFdmVudCk7
Ci0JCQotCQkvLyBhZGQgcHJldmVudERlZmF1bHQgYW5kIHN0b3BQcm9wYWdhdGlvbiBzaW5jZSAK
LQkJLy8gdGhleSB3aWxsIG5vdCB3b3JrIG9uIHRoZSBjbG9uZQotCQlldmVudC5wcmV2ZW50RGVm
YXVsdCA9IGZ1bmN0aW9uKCkgewotCQkJLy8gaWYgcHJldmVudERlZmF1bHQgZXhpc3RzIHJ1biBp
dCBvbiB0aGUgb3JpZ2luYWwgZXZlbnQKLQkJCWlmIChvcmlnaW5hbEV2ZW50LnByZXZlbnREZWZh
dWx0KQotCQkJCW9yaWdpbmFsRXZlbnQucHJldmVudERlZmF1bHQoKTsKLQkJCS8vIG90aGVyd2lz
ZSBzZXQgdGhlIHJldHVyblZhbHVlIHByb3BlcnR5IG9mIHRoZSBvcmlnaW5hbCBldmVudCB0byBm
YWxzZSAoSUUpCi0JCQlvcmlnaW5hbEV2ZW50LnJldHVyblZhbHVlID0gZmFsc2U7Ci0JCX07Ci0J
CWV2ZW50LnN0b3BQcm9wYWdhdGlvbiA9IGZ1bmN0aW9uKCkgewotCQkJLy8gaWYgc3RvcFByb3Bh
Z2F0aW9uIGV4aXN0cyBydW4gaXQgb24gdGhlIG9yaWdpbmFsIGV2ZW50Ci0JCQlpZiAob3JpZ2lu
YWxFdmVudC5zdG9wUHJvcGFnYXRpb24pCi0JCQkJb3JpZ2luYWxFdmVudC5zdG9wUHJvcGFnYXRp
b24oKTsKLQkJCS8vIG90aGVyd2lzZSBzZXQgdGhlIGNhbmNlbEJ1YmJsZSBwcm9wZXJ0eSBvZiB0
aGUgb3JpZ2luYWwgZXZlbnQgdG8gdHJ1ZSAoSUUpCi0JCQlvcmlnaW5hbEV2ZW50LmNhbmNlbEJ1
YmJsZSA9IHRydWU7Ci0JCX07Ci0JCQotCQkvLyBGaXggdGFyZ2V0IHByb3BlcnR5LCBpZiBuZWNl
c3NhcnkKLQkJaWYgKCAhZXZlbnQudGFyZ2V0ICkKLQkJCWV2ZW50LnRhcmdldCA9IGV2ZW50LnNy
Y0VsZW1lbnQgfHwgZG9jdW1lbnQ7IC8vIEZpeGVzICMxOTI1IHdoZXJlIHNyY0VsZW1lbnQgbWln
aHQgbm90IGJlIGRlZmluZWQgZWl0aGVyCi0JCQkJCi0JCS8vIGNoZWNrIGlmIHRhcmdldCBpcyBh
IHRleHRub2RlIChzYWZhcmkpCi0JCWlmICggZXZlbnQudGFyZ2V0Lm5vZGVUeXBlID09IDMgKQot
CQkJZXZlbnQudGFyZ2V0ID0gb3JpZ2luYWxFdmVudC50YXJnZXQucGFyZW50Tm9kZTsKLQotCQkv
LyBBZGQgcmVsYXRlZFRhcmdldCwgaWYgbmVjZXNzYXJ5Ci0JCWlmICggIWV2ZW50LnJlbGF0ZWRU
YXJnZXQgJiYgZXZlbnQuZnJvbUVsZW1lbnQgKQotCQkJZXZlbnQucmVsYXRlZFRhcmdldCA9IGV2
ZW50LmZyb21FbGVtZW50ID09IGV2ZW50LnRhcmdldCA/IGV2ZW50LnRvRWxlbWVudCA6IGV2ZW50
LmZyb21FbGVtZW50OwotCi0JCS8vIENhbGN1bGF0ZSBwYWdlWC9ZIGlmIG1pc3NpbmcgYW5kIGNs
aWVudFgvWSBhdmFpbGFibGUKLQkJaWYgKCBldmVudC5wYWdlWCA9PSBudWxsICYmIGV2ZW50LmNs
aWVudFggIT0gbnVsbCApIHsKLQkJCXZhciBkb2MgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQs
IGJvZHkgPSBkb2N1bWVudC5ib2R5OwotCQkJZXZlbnQucGFnZVggPSBldmVudC5jbGllbnRYICsg
KGRvYyAmJiBkb2Muc2Nyb2xsTGVmdCB8fCBib2R5ICYmIGJvZHkuc2Nyb2xsTGVmdCB8fCAwKSAt
IChkb2MuY2xpZW50TGVmdCB8fCAwKTsKLQkJCWV2ZW50LnBhZ2VZID0gZXZlbnQuY2xpZW50WSAr
IChkb2MgJiYgZG9jLnNjcm9sbFRvcCB8fCBib2R5ICYmIGJvZHkuc2Nyb2xsVG9wIHx8IDApIC0g
KGRvYy5jbGllbnRUb3AgfHwgMCk7Ci0JCX0KLQkJCQotCQkvLyBBZGQgd2hpY2ggZm9yIGtleSBl
dmVudHMKLQkJaWYgKCAhZXZlbnQud2hpY2ggJiYgKChldmVudC5jaGFyQ29kZSB8fCBldmVudC5j
aGFyQ29kZSA9PT0gMCkgPyBldmVudC5jaGFyQ29kZSA6IGV2ZW50LmtleUNvZGUpICkKLQkJCWV2
ZW50LndoaWNoID0gZXZlbnQuY2hhckNvZGUgfHwgZXZlbnQua2V5Q29kZTsKLQkJCi0JCS8vIEFk
ZCBtZXRhS2V5IHRvIG5vbi1NYWMgYnJvd3NlcnMgKHVzZSBjdHJsIGZvciBQQydzIGFuZCBNZXRh
IGZvciBNYWNzKQotCQlpZiAoICFldmVudC5tZXRhS2V5ICYmIGV2ZW50LmN0cmxLZXkgKQotCQkJ
ZXZlbnQubWV0YUtleSA9IGV2ZW50LmN0cmxLZXk7Ci0KLQkJLy8gQWRkIHdoaWNoIGZvciBjbGlj
azogMSA9PSBsZWZ0OyAyID09IG1pZGRsZTsgMyA9PSByaWdodAotCQkvLyBOb3RlOiBidXR0b24g
aXMgbm90IG5vcm1hbGl6ZWQsIHNvIGRvbid0IHVzZSBpdAotCQlpZiAoICFldmVudC53aGljaCAm
JiBldmVudC5idXR0b24gKQotCQkJZXZlbnQud2hpY2ggPSAoZXZlbnQuYnV0dG9uICYgMSA/IDEg
OiAoIGV2ZW50LmJ1dHRvbiAmIDIgPyAzIDogKCBldmVudC5idXR0b24gJiA0ID8gMiA6IDAgKSAp
KTsKLQkJCQotCQlyZXR1cm4gZXZlbnQ7Ci0JfSwKLQkKLQlzcGVjaWFsOiB7Ci0JCXJlYWR5OiB7
Ci0JCQlzZXR1cDogZnVuY3Rpb24oKSB7Ci0JCQkJLy8gTWFrZSBzdXJlIHRoZSByZWFkeSBldmVu
dCBpcyBzZXR1cAotCQkJCWJpbmRSZWFkeSgpOwotCQkJCXJldHVybjsKLQkJCX0sCi0JCQkKLQkJ
CXRlYXJkb3duOiBmdW5jdGlvbigpIHsgcmV0dXJuOyB9Ci0JCX0sCi0JCQotCQltb3VzZWVudGVy
OiB7Ci0JCQlzZXR1cDogZnVuY3Rpb24oKSB7Ci0JCQkJaWYgKCBqUXVlcnkuYnJvd3Nlci5tc2ll
ICkgcmV0dXJuIGZhbHNlOwotCQkJCWpRdWVyeSh0aGlzKS5iaW5kKCJtb3VzZW92ZXIiLCBqUXVl
cnkuZXZlbnQuc3BlY2lhbC5tb3VzZWVudGVyLmhhbmRsZXIpOwotCQkJCXJldHVybiB0cnVlOwot
CQkJfSwKLQkJCi0JCQl0ZWFyZG93bjogZnVuY3Rpb24oKSB7Ci0JCQkJaWYgKCBqUXVlcnkuYnJv
d3Nlci5tc2llICkgcmV0dXJuIGZhbHNlOwotCQkJCWpRdWVyeSh0aGlzKS51bmJpbmQoIm1vdXNl
b3ZlciIsIGpRdWVyeS5ldmVudC5zcGVjaWFsLm1vdXNlZW50ZXIuaGFuZGxlcik7Ci0JCQkJcmV0
dXJuIHRydWU7Ci0JCQl9LAotCQkJCi0JCQloYW5kbGVyOiBmdW5jdGlvbihldmVudCkgewotCQkJ
CS8vIElmIHdlIGFjdHVhbGx5IGp1c3QgbW91c2VkIG9uIHRvIGEgc3ViLWVsZW1lbnQsIGlnbm9y
ZSBpdAotCQkJCWlmICggd2l0aGluRWxlbWVudChldmVudCwgdGhpcykgKSByZXR1cm4gdHJ1ZTsK
LQkJCQkvLyBFeGVjdXRlIHRoZSByaWdodCBoYW5kbGVycyBieSBzZXR0aW5nIHRoZSBldmVudCB0
eXBlIHRvIG1vdXNlZW50ZXIKLQkJCQlhcmd1bWVudHNbMF0udHlwZSA9ICJtb3VzZWVudGVyIjsK
LQkJCQlyZXR1cm4galF1ZXJ5LmV2ZW50LmhhbmRsZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwot
CQkJfQotCQl9LAotCQotCQltb3VzZWxlYXZlOiB7Ci0JCQlzZXR1cDogZnVuY3Rpb24oKSB7Ci0J
CQkJaWYgKCBqUXVlcnkuYnJvd3Nlci5tc2llICkgcmV0dXJuIGZhbHNlOwotCQkJCWpRdWVyeSh0
aGlzKS5iaW5kKCJtb3VzZW91dCIsIGpRdWVyeS5ldmVudC5zcGVjaWFsLm1vdXNlbGVhdmUuaGFu
ZGxlcik7Ci0JCQkJcmV0dXJuIHRydWU7Ci0JCQl9LAotCQkKLQkJCXRlYXJkb3duOiBmdW5jdGlv
bigpIHsKLQkJCQlpZiAoIGpRdWVyeS5icm93c2VyLm1zaWUgKSByZXR1cm4gZmFsc2U7Ci0JCQkJ
alF1ZXJ5KHRoaXMpLnVuYmluZCgibW91c2VvdXQiLCBqUXVlcnkuZXZlbnQuc3BlY2lhbC5tb3Vz
ZWxlYXZlLmhhbmRsZXIpOwotCQkJCXJldHVybiB0cnVlOwotCQkJfSwKLQkJCQotCQkJaGFuZGxl
cjogZnVuY3Rpb24oZXZlbnQpIHsKLQkJCQkvLyBJZiB3ZSBhY3R1YWxseSBqdXN0IG1vdXNlZCBv
biB0byBhIHN1Yi1lbGVtZW50LCBpZ25vcmUgaXQKLQkJCQlpZiAoIHdpdGhpbkVsZW1lbnQoZXZl
bnQsIHRoaXMpICkgcmV0dXJuIHRydWU7Ci0JCQkJLy8gRXhlY3V0ZSB0aGUgcmlnaHQgaGFuZGxl
cnMgYnkgc2V0dGluZyB0aGUgZXZlbnQgdHlwZSB0byBtb3VzZWxlYXZlCi0JCQkJYXJndW1lbnRz
WzBdLnR5cGUgPSAibW91c2VsZWF2ZSI7Ci0JCQkJcmV0dXJuIGpRdWVyeS5ldmVudC5oYW5kbGUu
YXBwbHkodGhpcywgYXJndW1lbnRzKTsKLQkJCX0KLQkJfQotCX0KLX07Ci0KLWpRdWVyeS5mbi5l
eHRlbmQoewotCWJpbmQ6IGZ1bmN0aW9uKCB0eXBlLCBkYXRhLCBmbiApIHsKLQkJcmV0dXJuIHR5
cGUgPT0gInVubG9hZCIgPyB0aGlzLm9uZSh0eXBlLCBkYXRhLCBmbikgOiB0aGlzLmVhY2goZnVu
Y3Rpb24oKXsKLQkJCWpRdWVyeS5ldmVudC5hZGQoIHRoaXMsIHR5cGUsIGZuIHx8IGRhdGEsIGZu
ICYmIGRhdGEgKTsKLQkJfSk7Ci0JfSwKLQkKLQlvbmU6IGZ1bmN0aW9uKCB0eXBlLCBkYXRhLCBm
biApIHsKLQkJcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpewotCQkJalF1ZXJ5LmV2ZW50LmFk
ZCggdGhpcywgdHlwZSwgZnVuY3Rpb24oZXZlbnQpIHsKLQkJCQlqUXVlcnkodGhpcykudW5iaW5k
KGV2ZW50KTsKLQkJCQlyZXR1cm4gKGZuIHx8IGRhdGEpLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMp
OwotCQkJfSwgZm4gJiYgZGF0YSk7Ci0JCX0pOwotCX0sCi0KLQl1bmJpbmQ6IGZ1bmN0aW9uKCB0
eXBlLCBmbiApIHsKLQkJcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpewotCQkJalF1ZXJ5LmV2
ZW50LnJlbW92ZSggdGhpcywgdHlwZSwgZm4gKTsKLQkJfSk7Ci0JfSwKLQotCXRyaWdnZXI6IGZ1
bmN0aW9uKCB0eXBlLCBkYXRhLCBmbiApIHsKLQkJcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigp
ewotCQkJalF1ZXJ5LmV2ZW50LnRyaWdnZXIoIHR5cGUsIGRhdGEsIHRoaXMsIHRydWUsIGZuICk7
Ci0JCX0pOwotCX0sCi0KLQl0cmlnZ2VySGFuZGxlcjogZnVuY3Rpb24oIHR5cGUsIGRhdGEsIGZu
ICkgewotCQlpZiAoIHRoaXNbMF0gKQotCQkJcmV0dXJuIGpRdWVyeS5ldmVudC50cmlnZ2VyKCB0
eXBlLCBkYXRhLCB0aGlzWzBdLCBmYWxzZSwgZm4gKTsKLQkJcmV0dXJuIHVuZGVmaW5lZDsKLQl9
LAotCi0JdG9nZ2xlOiBmdW5jdGlvbigpIHsKLQkJLy8gU2F2ZSByZWZlcmVuY2UgdG8gYXJndW1l
bnRzIGZvciBhY2Nlc3MgaW4gY2xvc3VyZQotCQl2YXIgYXJncyA9IGFyZ3VtZW50czsKLQotCQly
ZXR1cm4gdGhpcy5jbGljayhmdW5jdGlvbihldmVudCkgewotCQkJLy8gRmlndXJlIG91dCB3aGlj
aCBmdW5jdGlvbiB0byBleGVjdXRlCi0JCQl0aGlzLmxhc3RUb2dnbGUgPSAwID09IHRoaXMubGFz
dFRvZ2dsZSA/IDEgOiAwOwotCQkJCi0JCQkvLyBNYWtlIHN1cmUgdGhhdCBjbGlja3Mgc3RvcAot
CQkJZXZlbnQucHJldmVudERlZmF1bHQoKTsKLQkJCQotCQkJLy8gYW5kIGV4ZWN1dGUgdGhlIGZ1
bmN0aW9uCi0JCQlyZXR1cm4gYXJnc1t0aGlzLmxhc3RUb2dnbGVdLmFwcGx5KCB0aGlzLCBhcmd1
bWVudHMgKSB8fCBmYWxzZTsKLQkJfSk7Ci0JfSwKLQotCWhvdmVyOiBmdW5jdGlvbihmbk92ZXIs
IGZuT3V0KSB7Ci0JCXJldHVybiB0aGlzLmJpbmQoJ21vdXNlZW50ZXInLCBmbk92ZXIpLmJpbmQo
J21vdXNlbGVhdmUnLCBmbk91dCk7Ci0JfSwKLQkKLQlyZWFkeTogZnVuY3Rpb24oZm4pIHsKLQkJ
Ly8gQXR0YWNoIHRoZSBsaXN0ZW5lcnMKLQkJYmluZFJlYWR5KCk7Ci0KLQkJLy8gSWYgdGhlIERP
TSBpcyBhbHJlYWR5IHJlYWR5Ci0JCWlmICggalF1ZXJ5LmlzUmVhZHkgKQotCQkJLy8gRXhlY3V0
ZSB0aGUgZnVuY3Rpb24gaW1tZWRpYXRlbHkKLQkJCWZuLmNhbGwoIGRvY3VtZW50LCBqUXVlcnkg
KTsKLQkJCQotCQkvLyBPdGhlcndpc2UsIHJlbWVtYmVyIHRoZSBmdW5jdGlvbiBmb3IgbGF0ZXIK
LQkJZWxzZQotCQkJLy8gQWRkIHRoZSBmdW5jdGlvbiB0byB0aGUgd2FpdCBsaXN0Ci0JCQlqUXVl
cnkucmVhZHlMaXN0LnB1c2goIGZ1bmN0aW9uKCkgeyByZXR1cm4gZm4uY2FsbCh0aGlzLCBqUXVl
cnkpOyB9ICk7Ci0JCi0JCXJldHVybiB0aGlzOwotCX0KLX0pOwotCi1qUXVlcnkuZXh0ZW5kKHsK
LQlpc1JlYWR5OiBmYWxzZSwKLQlyZWFkeUxpc3Q6IFtdLAotCS8vIEhhbmRsZSB3aGVuIHRoZSBE
T00gaXMgcmVhZHkKLQlyZWFkeTogZnVuY3Rpb24oKSB7Ci0JCS8vIE1ha2Ugc3VyZSB0aGF0IHRo
ZSBET00gaXMgbm90IGFscmVhZHkgbG9hZGVkCi0JCWlmICggIWpRdWVyeS5pc1JlYWR5ICkgewot
CQkJLy8gUmVtZW1iZXIgdGhhdCB0aGUgRE9NIGlzIHJlYWR5Ci0JCQlqUXVlcnkuaXNSZWFkeSA9
IHRydWU7Ci0JCQkKLQkJCS8vIElmIHRoZXJlIGFyZSBmdW5jdGlvbnMgYm91bmQsIHRvIGV4ZWN1
dGUKLQkJCWlmICggalF1ZXJ5LnJlYWR5TGlzdCApIHsKLQkJCQkvLyBFeGVjdXRlIGFsbCBvZiB0
aGVtCi0JCQkJalF1ZXJ5LmVhY2goIGpRdWVyeS5yZWFkeUxpc3QsIGZ1bmN0aW9uKCl7Ci0JCQkJ
CXRoaXMuYXBwbHkoIGRvY3VtZW50ICk7Ci0JCQkJfSk7Ci0JCQkJCi0JCQkJLy8gUmVzZXQgdGhl
IGxpc3Qgb2YgZnVuY3Rpb25zCi0JCQkJalF1ZXJ5LnJlYWR5TGlzdCA9IG51bGw7Ci0JCQl9Ci0J
CQotCQkJLy8gVHJpZ2dlciBhbnkgYm91bmQgcmVhZHkgZXZlbnRzCi0JCQlqUXVlcnkoZG9jdW1l
bnQpLnRyaWdnZXJIYW5kbGVyKCJyZWFkeSIpOwotCQl9Ci0JfQotfSk7Ci0KLXZhciByZWFkeUJv
dW5kID0gZmFsc2U7Ci0KLWZ1bmN0aW9uIGJpbmRSZWFkeSgpewotCWlmICggcmVhZHlCb3VuZCAp
IHJldHVybjsKLQlyZWFkeUJvdW5kID0gdHJ1ZTsKLQotCS8vIE1vemlsbGEsIE9wZXJhIChzZWUg
ZnVydGhlciBiZWxvdyBmb3IgaXQpIGFuZCB3ZWJraXQgbmlnaHRsaWVzIGN1cnJlbnRseSBzdXBw
b3J0IHRoaXMgZXZlbnQKLQlpZiAoIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIgJiYgIWpRdWVy
eS5icm93c2VyLm9wZXJhKQotCQkvLyBVc2UgdGhlIGhhbmR5IGV2ZW50IGNhbGxiYWNrCi0JCWRv
Y3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoICJET01Db250ZW50TG9hZGVkIiwgalF1ZXJ5LnJlYWR5
LCBmYWxzZSApOwotCQotCS8vIElmIElFIGlzIHVzZWQgYW5kIGlzIG5vdCBpbiBhIGZyYW1lCi0J
Ly8gQ29udGludWFsbHkgY2hlY2sgdG8gc2VlIGlmIHRoZSBkb2N1bWVudCBpcyByZWFkeQotCWlm
ICggalF1ZXJ5LmJyb3dzZXIubXNpZSAmJiB3aW5kb3cgPT0gdG9wICkgKGZ1bmN0aW9uKCl7Ci0J
CWlmIChqUXVlcnkuaXNSZWFkeSkgcmV0dXJuOwotCQl0cnkgewotCQkJLy8gSWYgSUUgaXMgdXNl
ZCwgdXNlIHRoZSB0cmljayBieSBEaWVnbyBQZXJpbmkKLQkJCS8vIGh0dHA6Ly9qYXZhc2NyaXB0
Lm53Ym94LmNvbS9JRUNvbnRlbnRMb2FkZWQvCi0JCQlkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQu
ZG9TY3JvbGwoImxlZnQiKTsKLQkJfSBjYXRjaCggZXJyb3IgKSB7Ci0JCQlzZXRUaW1lb3V0KCBh
cmd1bWVudHMuY2FsbGVlLCAwICk7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJLy8gYW5kIGV4ZWN1dGUg
YW55IHdhaXRpbmcgZnVuY3Rpb25zCi0JCWpRdWVyeS5yZWFkeSgpOwotCX0pKCk7Ci0KLQlpZiAo
IGpRdWVyeS5icm93c2VyLm9wZXJhICkKLQkJZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggIkRP
TUNvbnRlbnRMb2FkZWQiLCBmdW5jdGlvbiAoKSB7Ci0JCQlpZiAoalF1ZXJ5LmlzUmVhZHkpIHJl
dHVybjsKLQkJCWZvciAodmFyIGkgPSAwOyBpIDwgZG9jdW1lbnQuc3R5bGVTaGVldHMubGVuZ3Ro
OyBpKyspCi0JCQkJaWYgKGRvY3VtZW50LnN0eWxlU2hlZXRzW2ldLmRpc2FibGVkKSB7Ci0JCQkJ
CXNldFRpbWVvdXQoIGFyZ3VtZW50cy5jYWxsZWUsIDAgKTsKLQkJCQkJcmV0dXJuOwotCQkJCX0K
LQkJCS8vIGFuZCBleGVjdXRlIGFueSB3YWl0aW5nIGZ1bmN0aW9ucwotCQkJalF1ZXJ5LnJlYWR5
KCk7Ci0JCX0sIGZhbHNlKTsKLQotCWlmICggalF1ZXJ5LmJyb3dzZXIuc2FmYXJpICkgewotCQl2
YXIgbnVtU3R5bGVzOwotCQkoZnVuY3Rpb24oKXsKLQkJCWlmIChqUXVlcnkuaXNSZWFkeSkgcmV0
dXJuOwotCQkJaWYgKCBkb2N1bWVudC5yZWFkeVN0YXRlICE9ICJsb2FkZWQiICYmIGRvY3VtZW50
LnJlYWR5U3RhdGUgIT0gImNvbXBsZXRlIiApIHsKLQkJCQlzZXRUaW1lb3V0KCBhcmd1bWVudHMu
Y2FsbGVlLCAwICk7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQkJaWYgKCBudW1TdHlsZXMgPT09IHVu
ZGVmaW5lZCApCi0JCQkJbnVtU3R5bGVzID0galF1ZXJ5KCJzdHlsZSwgbGlua1tyZWw9c3R5bGVz
aGVldF0iKS5sZW5ndGg7Ci0JCQlpZiAoIGRvY3VtZW50LnN0eWxlU2hlZXRzLmxlbmd0aCAhPSBu
dW1TdHlsZXMgKSB7Ci0JCQkJc2V0VGltZW91dCggYXJndW1lbnRzLmNhbGxlZSwgMCApOwotCQkJ
CXJldHVybjsKLQkJCX0KLQkJCS8vIGFuZCBleGVjdXRlIGFueSB3YWl0aW5nIGZ1bmN0aW9ucwot
CQkJalF1ZXJ5LnJlYWR5KCk7Ci0JCX0pKCk7Ci0JfQotCi0JLy8gQSBmYWxsYmFjayB0byB3aW5k
b3cub25sb2FkLCB0aGF0IHdpbGwgYWx3YXlzIHdvcmsKLQlqUXVlcnkuZXZlbnQuYWRkKCB3aW5k
b3csICJsb2FkIiwgalF1ZXJ5LnJlYWR5ICk7Ci19Ci0KLWpRdWVyeS5lYWNoKCAoImJsdXIsZm9j
dXMsbG9hZCxyZXNpemUsc2Nyb2xsLHVubG9hZCxjbGljayxkYmxjbGljaywiICsKLQkibW91c2Vk
b3duLG1vdXNldXAsbW91c2Vtb3ZlLG1vdXNlb3Zlcixtb3VzZW91dCxjaGFuZ2Usc2VsZWN0LCIg
KyAKLQkic3VibWl0LGtleWRvd24sa2V5cHJlc3Msa2V5dXAsZXJyb3IiKS5zcGxpdCgiLCIpLCBm
dW5jdGlvbihpLCBuYW1lKXsKLQkKLQkvLyBIYW5kbGUgZXZlbnQgYmluZGluZwotCWpRdWVyeS5m
bltuYW1lXSA9IGZ1bmN0aW9uKGZuKXsKLQkJcmV0dXJuIGZuID8gdGhpcy5iaW5kKG5hbWUsIGZu
KSA6IHRoaXMudHJpZ2dlcihuYW1lKTsKLQl9OwotfSk7Ci0KLS8vIENoZWNrcyBpZiBhbiBldmVu
dCBoYXBwZW5lZCBvbiBhbiBlbGVtZW50IHdpdGhpbiBhbm90aGVyIGVsZW1lbnQKLS8vIFVzZWQg
aW4galF1ZXJ5LmV2ZW50LnNwZWNpYWwubW91c2VlbnRlciBhbmQgbW91c2VsZWF2ZSBoYW5kbGVy
cwotdmFyIHdpdGhpbkVsZW1lbnQgPSBmdW5jdGlvbihldmVudCwgZWxlbSkgewotCS8vIENoZWNr
IGlmIG1vdXNlKG92ZXJ8b3V0KSBhcmUgc3RpbGwgd2l0aGluIHRoZSBzYW1lIHBhcmVudCBlbGVt
ZW50Ci0JdmFyIHBhcmVudCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQ7Ci0JLy8gVHJhdmVyc2UgdXAg
dGhlIHRyZWUKLQl3aGlsZSAoIHBhcmVudCAmJiBwYXJlbnQgIT0gZWxlbSApIHRyeSB7IHBhcmVu
dCA9IHBhcmVudC5wYXJlbnROb2RlOyB9IGNhdGNoKGVycm9yKSB7IHBhcmVudCA9IGVsZW07IH0K
LQkvLyBSZXR1cm4gdHJ1ZSBpZiB3ZSBhY3R1YWxseSBqdXN0IG1vdXNlZCBvbiB0byBhIHN1Yi1l
bGVtZW50Ci0JcmV0dXJuIHBhcmVudCA9PSBlbGVtOwotfTsKLQotLy8gUHJldmVudCBtZW1vcnkg
bGVha3MgaW4gSUUKLS8vIEFuZCBwcmV2ZW50IGVycm9ycyBvbiByZWZyZXNoIHdpdGggZXZlbnRz
IGxpa2UgbW91c2VvdmVyIGluIG90aGVyIGJyb3dzZXJzCi0vLyBXaW5kb3cgaXNuJ3QgaW5jbHVk
ZWQgc28gYXMgbm90IHRvIHVuYmluZCBleGlzdGluZyB1bmxvYWQgZXZlbnRzCi1qUXVlcnkod2lu
ZG93KS5iaW5kKCJ1bmxvYWQiLCBmdW5jdGlvbigpIHsKLQlqUXVlcnkoIioiKS5hZGQoZG9jdW1l
bnQpLnVuYmluZCgpOwotfSk7Ci1qUXVlcnkuZm4uZXh0ZW5kKHsKLQlsb2FkOiBmdW5jdGlvbigg
dXJsLCBwYXJhbXMsIGNhbGxiYWNrICkgewotCQlpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCB1cmwg
KSApCi0JCQlyZXR1cm4gdGhpcy5iaW5kKCJsb2FkIiwgdXJsKTsKLQotCQl2YXIgb2ZmID0gdXJs
LmluZGV4T2YoIiAiKTsKLQkJaWYgKCBvZmYgPj0gMCApIHsKLQkJCXZhciBzZWxlY3RvciA9IHVy
bC5zbGljZShvZmYsIHVybC5sZW5ndGgpOwotCQkJdXJsID0gdXJsLnNsaWNlKDAsIG9mZik7Ci0J
CX0KLQotCQljYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCl7fTsKLQotCQkvLyBEZWZh
dWx0IHRvIGEgR0VUIHJlcXVlc3QKLQkJdmFyIHR5cGUgPSAiR0VUIjsKLQotCQkvLyBJZiB0aGUg
c2Vjb25kIHBhcmFtZXRlciB3YXMgcHJvdmlkZWQKLQkJaWYgKCBwYXJhbXMgKQotCQkJLy8gSWYg
aXQncyBhIGZ1bmN0aW9uCi0JCQlpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBwYXJhbXMgKSApIHsK
LQkJCQkvLyBXZSBhc3N1bWUgdGhhdCBpdCdzIHRoZSBjYWxsYmFjawotCQkJCWNhbGxiYWNrID0g
cGFyYW1zOwotCQkJCXBhcmFtcyA9IG51bGw7Ci0KLQkJCS8vIE90aGVyd2lzZSwgYnVpbGQgYSBw
YXJhbSBzdHJpbmcKLQkJCX0gZWxzZSB7Ci0JCQkJcGFyYW1zID0galF1ZXJ5LnBhcmFtKCBwYXJh
bXMgKTsKLQkJCQl0eXBlID0gIlBPU1QiOwotCQkJfQotCi0JCXZhciBzZWxmID0gdGhpczsKLQot
CQkvLyBSZXF1ZXN0IHRoZSByZW1vdGUgZG9jdW1lbnQKLQkJalF1ZXJ5LmFqYXgoewotCQkJdXJs
OiB1cmwsCi0JCQl0eXBlOiB0eXBlLAotCQkJZGF0YVR5cGU6ICJodG1sIiwKLQkJCWRhdGE6IHBh
cmFtcywKLQkJCWNvbXBsZXRlOiBmdW5jdGlvbihyZXMsIHN0YXR1cyl7Ci0JCQkJLy8gSWYgc3Vj
Y2Vzc2Z1bCwgaW5qZWN0IHRoZSBIVE1MIGludG8gYWxsIHRoZSBtYXRjaGVkIGVsZW1lbnRzCi0J
CQkJaWYgKCBzdGF0dXMgPT0gInN1Y2Nlc3MiIHx8IHN0YXR1cyA9PSAibm90bW9kaWZpZWQiICkK
LQkJCQkJLy8gU2VlIGlmIGEgc2VsZWN0b3Igd2FzIHNwZWNpZmllZAotCQkJCQlzZWxmLmh0bWwo
IHNlbGVjdG9yID8KLQkJCQkJCS8vIENyZWF0ZSBhIGR1bW15IGRpdiB0byBob2xkIHRoZSByZXN1
bHRzCi0JCQkJCQlqUXVlcnkoIjxkaXYvPiIpCi0JCQkJCQkJLy8gaW5qZWN0IHRoZSBjb250ZW50
cyBvZiB0aGUgZG9jdW1lbnQgaW4sIHJlbW92aW5nIHRoZSBzY3JpcHRzCi0JCQkJCQkJLy8gdG8g
YXZvaWQgYW55ICdQZXJtaXNzaW9uIERlbmllZCcgZXJyb3JzIGluIElFCi0JCQkJCQkJLmFwcGVu
ZChyZXMucmVzcG9uc2VUZXh0LnJlcGxhY2UoLzxzY3JpcHQoLnxccykqP1wvc2NyaXB0Pi9nLCAi
IikpCi0KLQkJCQkJCQkvLyBMb2NhdGUgdGhlIHNwZWNpZmllZCBlbGVtZW50cwotCQkJCQkJCS5m
aW5kKHNlbGVjdG9yKSA6Ci0KLQkJCQkJCS8vIElmIG5vdCwganVzdCBpbmplY3QgdGhlIGZ1bGwg
cmVzdWx0Ci0JCQkJCQlyZXMucmVzcG9uc2VUZXh0ICk7Ci0KLQkJCQlzZWxmLmVhY2goIGNhbGxi
YWNrLCBbcmVzLnJlc3BvbnNlVGV4dCwgc3RhdHVzLCByZXNdICk7Ci0JCQl9Ci0JCX0pOwotCQly
ZXR1cm4gdGhpczsKLQl9LAotCi0Jc2VyaWFsaXplOiBmdW5jdGlvbigpIHsKLQkJcmV0dXJuIGpR
dWVyeS5wYXJhbSh0aGlzLnNlcmlhbGl6ZUFycmF5KCkpOwotCX0sCi0Jc2VyaWFsaXplQXJyYXk6
IGZ1bmN0aW9uKCkgewotCQlyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXsKLQkJCXJldHVybiBq
UXVlcnkubm9kZU5hbWUodGhpcywgImZvcm0iKSA/Ci0JCQkJalF1ZXJ5Lm1ha2VBcnJheSh0aGlz
LmVsZW1lbnRzKSA6IHRoaXM7Ci0JCX0pCi0JCS5maWx0ZXIoZnVuY3Rpb24oKXsKLQkJCXJldHVy
biB0aGlzLm5hbWUgJiYgIXRoaXMuZGlzYWJsZWQgJiYgCi0JCQkJKHRoaXMuY2hlY2tlZCB8fCAv
c2VsZWN0fHRleHRhcmVhL2kudGVzdCh0aGlzLm5vZGVOYW1lKSB8fCAKLQkJCQkJL3RleHR8aGlk
ZGVufHBhc3N3b3JkL2kudGVzdCh0aGlzLnR5cGUpKTsKLQkJfSkKLQkJLm1hcChmdW5jdGlvbihp
LCBlbGVtKXsKLQkJCXZhciB2YWwgPSBqUXVlcnkodGhpcykudmFsKCk7Ci0JCQlyZXR1cm4gdmFs
ID09IG51bGwgPyBudWxsIDoKLQkJCQl2YWwuY29uc3RydWN0b3IgPT0gQXJyYXkgPwotCQkJCQlq
UXVlcnkubWFwKCB2YWwsIGZ1bmN0aW9uKHZhbCwgaSl7Ci0JCQkJCQlyZXR1cm4ge25hbWU6IGVs
ZW0ubmFtZSwgdmFsdWU6IHZhbH07Ci0JCQkJCX0pIDoKLQkJCQkJe25hbWU6IGVsZW0ubmFtZSwg
dmFsdWU6IHZhbH07Ci0JCX0pLmdldCgpOwotCX0KLX0pOwotCi0vLyBBdHRhY2ggYSBidW5jaCBv
ZiBmdW5jdGlvbnMgZm9yIGhhbmRsaW5nIGNvbW1vbiBBSkFYIGV2ZW50cwotalF1ZXJ5LmVhY2go
ICJhamF4U3RhcnQsYWpheFN0b3AsYWpheENvbXBsZXRlLGFqYXhFcnJvcixhamF4U3VjY2Vzcyxh
amF4U2VuZCIuc3BsaXQoIiwiKSwgZnVuY3Rpb24oaSxvKXsKLQlqUXVlcnkuZm5bb10gPSBmdW5j
dGlvbihmKXsKLQkJcmV0dXJuIHRoaXMuYmluZChvLCBmKTsKLQl9OwotfSk7Ci0KLXZhciBqc2Mg
PSAobmV3IERhdGUpLmdldFRpbWUoKTsKLQotalF1ZXJ5LmV4dGVuZCh7Ci0JZ2V0OiBmdW5jdGlv
biggdXJsLCBkYXRhLCBjYWxsYmFjaywgdHlwZSApIHsKLQkJLy8gc2hpZnQgYXJndW1lbnRzIGlm
IGRhdGEgYXJndW1lbnQgd2FzIG9tbWl0ZWQKLQkJaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggZGF0
YSApICkgewotCQkJY2FsbGJhY2sgPSBkYXRhOwotCQkJZGF0YSA9IG51bGw7Ci0JCX0KLQkJCi0J
CXJldHVybiBqUXVlcnkuYWpheCh7Ci0JCQl0eXBlOiAiR0VUIiwKLQkJCXVybDogdXJsLAotCQkJ
ZGF0YTogZGF0YSwKLQkJCXN1Y2Nlc3M6IGNhbGxiYWNrLAotCQkJZGF0YVR5cGU6IHR5cGUKLQkJ
fSk7Ci0JfSwKLQotCWdldFNjcmlwdDogZnVuY3Rpb24oIHVybCwgY2FsbGJhY2sgKSB7Ci0JCXJl
dHVybiBqUXVlcnkuZ2V0KHVybCwgbnVsbCwgY2FsbGJhY2ssICJzY3JpcHQiKTsKLQl9LAotCi0J
Z2V0SlNPTjogZnVuY3Rpb24oIHVybCwgZGF0YSwgY2FsbGJhY2sgKSB7Ci0JCXJldHVybiBqUXVl
cnkuZ2V0KHVybCwgZGF0YSwgY2FsbGJhY2ssICJqc29uIik7Ci0JfSwKLQotCXBvc3Q6IGZ1bmN0
aW9uKCB1cmwsIGRhdGEsIGNhbGxiYWNrLCB0eXBlICkgewotCQlpZiAoIGpRdWVyeS5pc0Z1bmN0
aW9uKCBkYXRhICkgKSB7Ci0JCQljYWxsYmFjayA9IGRhdGE7Ci0JCQlkYXRhID0ge307Ci0JCX0K
LQotCQlyZXR1cm4galF1ZXJ5LmFqYXgoewotCQkJdHlwZTogIlBPU1QiLAotCQkJdXJsOiB1cmws
Ci0JCQlkYXRhOiBkYXRhLAotCQkJc3VjY2VzczogY2FsbGJhY2ssCi0JCQlkYXRhVHlwZTogdHlw
ZQotCQl9KTsKLQl9LAotCi0JYWpheFNldHVwOiBmdW5jdGlvbiggc2V0dGluZ3MgKSB7Ci0JCWpR
dWVyeS5leHRlbmQoIGpRdWVyeS5hamF4U2V0dGluZ3MsIHNldHRpbmdzICk7Ci0JfSwKLQotCWFq
YXhTZXR0aW5nczogewotCQlnbG9iYWw6IHRydWUsCi0JCXR5cGU6ICJHRVQiLAotCQl0aW1lb3V0
OiAwLAotCQljb250ZW50VHlwZTogImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIs
Ci0JCXByb2Nlc3NEYXRhOiB0cnVlLAotCQlhc3luYzogdHJ1ZSwKLQkJZGF0YTogbnVsbCwKLQkJ
dXNlcm5hbWU6IG51bGwsCi0JCXBhc3N3b3JkOiBudWxsLAotCQlhY2NlcHRzOiB7Ci0JCQl4bWw6
ICJhcHBsaWNhdGlvbi94bWwsIHRleHQveG1sIiwKLQkJCWh0bWw6ICJ0ZXh0L2h0bWwiLAotCQkJ
c2NyaXB0OiAidGV4dC9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9qYXZhc2NyaXB0IiwKLQkJCWpz
b246ICJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L2phdmFzY3JpcHQiLAotCQkJdGV4dDogInRleHQv
cGxhaW4iLAotCQkJX2RlZmF1bHQ6ICIqLyoiCi0JCX0KLQl9LAotCQotCS8vIExhc3QtTW9kaWZp
ZWQgaGVhZGVyIGNhY2hlIGZvciBuZXh0IHJlcXVlc3QKLQlsYXN0TW9kaWZpZWQ6IHt9LAotCi0J
YWpheDogZnVuY3Rpb24oIHMgKSB7Ci0JCXZhciBqc29ucCwganNyZSA9IC89XD8oJnwkKS9nLCBz
dGF0dXMsIGRhdGE7Ci0KLQkJLy8gRXh0ZW5kIHRoZSBzZXR0aW5ncywgYnV0IHJlLWV4dGVuZCAn
cycgc28gdGhhdCBpdCBjYW4gYmUKLQkJLy8gY2hlY2tlZCBhZ2FpbiBsYXRlciAoaW4gdGhlIHRl
c3Qgc3VpdGUsIHNwZWNpZmljYWxseSkKLQkJcyA9IGpRdWVyeS5leHRlbmQodHJ1ZSwgcywgalF1
ZXJ5LmV4dGVuZCh0cnVlLCB7fSwgalF1ZXJ5LmFqYXhTZXR0aW5ncywgcykpOwotCi0JCS8vIGNv
bnZlcnQgZGF0YSBpZiBub3QgYWxyZWFkeSBhIHN0cmluZwotCQlpZiAoIHMuZGF0YSAmJiBzLnBy
b2Nlc3NEYXRhICYmIHR5cGVvZiBzLmRhdGEgIT0gInN0cmluZyIgKQotCQkJcy5kYXRhID0galF1
ZXJ5LnBhcmFtKHMuZGF0YSk7Ci0KLQkJLy8gSGFuZGxlIEpTT05QIFBhcmFtZXRlciBDYWxsYmFj
a3MKLQkJaWYgKCBzLmRhdGFUeXBlID09ICJqc29ucCIgKSB7Ci0JCQlpZiAoIHMudHlwZS50b0xv
d2VyQ2FzZSgpID09ICJnZXQiICkgewotCQkJCWlmICggIXMudXJsLm1hdGNoKGpzcmUpICkKLQkJ
CQkJcy51cmwgKz0gKHMudXJsLm1hdGNoKC9cPy8pID8gIiYiIDogIj8iKSArIChzLmpzb25wIHx8
ICJjYWxsYmFjayIpICsgIj0/IjsKLQkJCX0gZWxzZSBpZiAoICFzLmRhdGEgfHwgIXMuZGF0YS5t
YXRjaChqc3JlKSApCi0JCQkJcy5kYXRhID0gKHMuZGF0YSA/IHMuZGF0YSArICImIiA6ICIiKSAr
IChzLmpzb25wIHx8ICJjYWxsYmFjayIpICsgIj0/IjsKLQkJCXMuZGF0YVR5cGUgPSAianNvbiI7
Ci0JCX0KLQotCQkvLyBCdWlsZCB0ZW1wb3JhcnkgSlNPTlAgZnVuY3Rpb24KLQkJaWYgKCBzLmRh
dGFUeXBlID09ICJqc29uIiAmJiAocy5kYXRhICYmIHMuZGF0YS5tYXRjaChqc3JlKSB8fCBzLnVy
bC5tYXRjaChqc3JlKSkgKSB7Ci0JCQlqc29ucCA9ICJqc29ucCIgKyBqc2MrKzsKLQotCQkJLy8g
UmVwbGFjZSB0aGUgPT8gc2VxdWVuY2UgYm90aCBpbiB0aGUgcXVlcnkgc3RyaW5nIGFuZCB0aGUg
ZGF0YQotCQkJaWYgKCBzLmRhdGEgKQotCQkJCXMuZGF0YSA9IChzLmRhdGEgKyAiIikucmVwbGFj
ZShqc3JlLCAiPSIgKyBqc29ucCArICIkMSIpOwotCQkJcy51cmwgPSBzLnVybC5yZXBsYWNlKGpz
cmUsICI9IiArIGpzb25wICsgIiQxIik7Ci0KLQkJCS8vIFdlIG5lZWQgdG8gbWFrZSBzdXJlCi0J
CQkvLyB0aGF0IGEgSlNPTlAgc3R5bGUgcmVzcG9uc2UgaXMgZXhlY3V0ZWQgcHJvcGVybHkKLQkJ
CXMuZGF0YVR5cGUgPSAic2NyaXB0IjsKLQotCQkJLy8gSGFuZGxlIEpTT05QLXN0eWxlIGxvYWRp
bmcKLQkJCXdpbmRvd1sganNvbnAgXSA9IGZ1bmN0aW9uKHRtcCl7Ci0JCQkJZGF0YSA9IHRtcDsK
LQkJCQlzdWNjZXNzKCk7Ci0JCQkJY29tcGxldGUoKTsKLQkJCQkvLyBHYXJiYWdlIGNvbGxlY3QK
LQkJCQl3aW5kb3dbIGpzb25wIF0gPSB1bmRlZmluZWQ7Ci0JCQkJdHJ5eyBkZWxldGUgd2luZG93
WyBqc29ucCBdOyB9IGNhdGNoKGUpe30KLQkJCQlpZiAoIGhlYWQgKQotCQkJCQloZWFkLnJlbW92
ZUNoaWxkKCBzY3JpcHQgKTsKLQkJCX07Ci0JCX0KLQotCQlpZiAoIHMuZGF0YVR5cGUgPT0gInNj
cmlwdCIgJiYgcy5jYWNoZSA9PSBudWxsICkKLQkJCXMuY2FjaGUgPSBmYWxzZTsKLQotCQlpZiAo
IHMuY2FjaGUgPT09IGZhbHNlICYmIHMudHlwZS50b0xvd2VyQ2FzZSgpID09ICJnZXQiICkgewot
CQkJdmFyIHRzID0gKG5ldyBEYXRlKCkpLmdldFRpbWUoKTsKLQkJCS8vIHRyeSByZXBsYWNpbmcg
Xz0gaWYgaXQgaXMgdGhlcmUKLQkJCXZhciByZXQgPSBzLnVybC5yZXBsYWNlKC8oXD98JilfPS4q
PygmfCQpLywgIiQxXz0iICsgdHMgKyAiJDIiKTsKLQkJCS8vIGlmIG5vdGhpbmcgd2FzIHJlcGxh
Y2VkLCBhZGQgdGltZXN0YW1wIHRvIHRoZSBlbmQKLQkJCXMudXJsID0gcmV0ICsgKChyZXQgPT0g
cy51cmwpID8gKHMudXJsLm1hdGNoKC9cPy8pID8gIiYiIDogIj8iKSArICJfPSIgKyB0cyA6ICIi
KTsKLQkJfQotCi0JCS8vIElmIGRhdGEgaXMgYXZhaWxhYmxlLCBhcHBlbmQgZGF0YSB0byB1cmwg
Zm9yIGdldCByZXF1ZXN0cwotCQlpZiAoIHMuZGF0YSAmJiBzLnR5cGUudG9Mb3dlckNhc2UoKSA9
PSAiZ2V0IiApIHsKLQkJCXMudXJsICs9IChzLnVybC5tYXRjaCgvXD8vKSA/ICImIiA6ICI/Iikg
KyBzLmRhdGE7Ci0KLQkJCS8vIElFIGxpa2VzIHRvIHNlbmQgYm90aCBnZXQgYW5kIHBvc3QgZGF0
YSwgcHJldmVudCB0aGlzCi0JCQlzLmRhdGEgPSBudWxsOwotCQl9Ci0KLQkJLy8gV2F0Y2ggZm9y
IGEgbmV3IHNldCBvZiByZXF1ZXN0cwotCQlpZiAoIHMuZ2xvYmFsICYmICEgalF1ZXJ5LmFjdGl2
ZSsrICkKLQkJCWpRdWVyeS5ldmVudC50cmlnZ2VyKCAiYWpheFN0YXJ0IiApOwotCi0JCS8vIElm
IHdlJ3JlIHJlcXVlc3RpbmcgYSByZW1vdGUgZG9jdW1lbnQKLQkJLy8gYW5kIHRyeWluZyB0byBs
b2FkIEpTT04gb3IgU2NyaXB0IHdpdGggYSBHRVQKLQkJaWYgKCAoIXMudXJsLmluZGV4T2YoImh0
dHAiKSB8fCAhcy51cmwuaW5kZXhPZigiLy8iKSkgJiYgcy5kYXRhVHlwZSA9PSAic2NyaXB0IiAm
JiBzLnR5cGUudG9Mb3dlckNhc2UoKSA9PSAiZ2V0IiApIHsKLQkJCXZhciBoZWFkID0gZG9jdW1l
bnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXTsKLQkJCXZhciBzY3JpcHQgPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTsKLQkJCXNjcmlwdC5zcmMgPSBzLnVybDsKLQkJ
CWlmIChzLnNjcmlwdENoYXJzZXQpCi0JCQkJc2NyaXB0LmNoYXJzZXQgPSBzLnNjcmlwdENoYXJz
ZXQ7Ci0KLQkJCS8vIEhhbmRsZSBTY3JpcHQgbG9hZGluZwotCQkJaWYgKCAhanNvbnAgKSB7Ci0J
CQkJdmFyIGRvbmUgPSBmYWxzZTsKLQotCQkJCS8vIEF0dGFjaCBoYW5kbGVycyBmb3IgYWxsIGJy
b3dzZXJzCi0JCQkJc2NyaXB0Lm9ubG9hZCA9IHNjcmlwdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBm
dW5jdGlvbigpewotCQkJCQlpZiAoICFkb25lICYmICghdGhpcy5yZWFkeVN0YXRlIHx8IAotCQkJ
CQkJCXRoaXMucmVhZHlTdGF0ZSA9PSAibG9hZGVkIiB8fCB0aGlzLnJlYWR5U3RhdGUgPT0gImNv
bXBsZXRlIikgKSB7Ci0JCQkJCQlkb25lID0gdHJ1ZTsKLQkJCQkJCXN1Y2Nlc3MoKTsKLQkJCQkJ
CWNvbXBsZXRlKCk7Ci0JCQkJCQloZWFkLnJlbW92ZUNoaWxkKCBzY3JpcHQgKTsKLQkJCQkJfQot
CQkJCX07Ci0JCQl9Ci0KLQkJCWhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0KTsKLQotCQkJLy8gV2Ug
aGFuZGxlIGV2ZXJ5dGhpbmcgdXNpbmcgdGhlIHNjcmlwdCBlbGVtZW50IGluamVjdGlvbgotCQkJ
cmV0dXJuIHVuZGVmaW5lZDsKLQkJfQotCi0JCXZhciByZXF1ZXN0RG9uZSA9IGZhbHNlOwotCi0J
CS8vIENyZWF0ZSB0aGUgcmVxdWVzdCBvYmplY3Q7IE1pY3Jvc29mdCBmYWlsZWQgdG8gcHJvcGVy
bHkKLQkJLy8gaW1wbGVtZW50IHRoZSBYTUxIdHRwUmVxdWVzdCBpbiBJRTcsIHNvIHdlIHVzZSB0
aGUgQWN0aXZlWE9iamVjdCB3aGVuIGl0IGlzIGF2YWlsYWJsZQotCQl2YXIgeG1sID0gd2luZG93
LkFjdGl2ZVhPYmplY3QgPyBuZXcgQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTEhUVFAiKSA6
IG5ldyBYTUxIdHRwUmVxdWVzdCgpOwotCi0JCS8vIE9wZW4gdGhlIHNvY2tldAotCQl4bWwub3Bl
bihzLnR5cGUsIHMudXJsLCBzLmFzeW5jLCBzLnVzZXJuYW1lLCBzLnBhc3N3b3JkKTsKLQotCQkv
LyBOZWVkIGFuIGV4dHJhIHRyeS9jYXRjaCBmb3IgY3Jvc3MgZG9tYWluIHJlcXVlc3RzIGluIEZp
cmVmb3ggMwotCQl0cnkgewotCQkJLy8gU2V0IHRoZSBjb3JyZWN0IGhlYWRlciwgaWYgZGF0YSBp
cyBiZWluZyBzZW50Ci0JCQlpZiAoIHMuZGF0YSApCi0JCQkJeG1sLnNldFJlcXVlc3RIZWFkZXIo
IkNvbnRlbnQtVHlwZSIsIHMuY29udGVudFR5cGUpOwotCi0JCQkvLyBTZXQgdGhlIElmLU1vZGlm
aWVkLVNpbmNlIGhlYWRlciwgaWYgaWZNb2RpZmllZCBtb2RlLgotCQkJaWYgKCBzLmlmTW9kaWZp
ZWQgKQotCQkJCXhtbC5zZXRSZXF1ZXN0SGVhZGVyKCJJZi1Nb2RpZmllZC1TaW5jZSIsCi0JCQkJ
CWpRdWVyeS5sYXN0TW9kaWZpZWRbcy51cmxdIHx8ICJUaHUsIDAxIEphbiAxOTcwIDAwOjAwOjAw
IEdNVCIgKTsKLQotCQkJLy8gU2V0IGhlYWRlciBzbyB0aGUgY2FsbGVkIHNjcmlwdCBrbm93cyB0
aGF0IGl0J3MgYW4gWE1MSHR0cFJlcXVlc3QKLQkJCXhtbC5zZXRSZXF1ZXN0SGVhZGVyKCJYLVJl
cXVlc3RlZC1XaXRoIiwgIlhNTEh0dHBSZXF1ZXN0Iik7Ci0KLQkJCS8vIFNldCB0aGUgQWNjZXB0
cyBoZWFkZXIgZm9yIHRoZSBzZXJ2ZXIsIGRlcGVuZGluZyBvbiB0aGUgZGF0YVR5cGUKLQkJCXht
bC5zZXRSZXF1ZXN0SGVhZGVyKCJBY2NlcHQiLCBzLmRhdGFUeXBlICYmIHMuYWNjZXB0c1sgcy5k
YXRhVHlwZSBdID8KLQkJCQlzLmFjY2VwdHNbIHMuZGF0YVR5cGUgXSArICIsICovKiIgOgotCQkJ
CXMuYWNjZXB0cy5fZGVmYXVsdCApOwotCQl9IGNhdGNoKGUpe30KLQotCQkvLyBBbGxvdyBjdXN0
b20gaGVhZGVycy9taW1ldHlwZXMKLQkJaWYgKCBzLmJlZm9yZVNlbmQgKQotCQkJcy5iZWZvcmVT
ZW5kKHhtbCk7Ci0JCQkKLQkJaWYgKCBzLmdsb2JhbCApCi0JCQlqUXVlcnkuZXZlbnQudHJpZ2dl
cigiYWpheFNlbmQiLCBbeG1sLCBzXSk7Ci0KLQkJLy8gV2FpdCBmb3IgYSByZXNwb25zZSB0byBj
b21lIGJhY2sKLQkJdmFyIG9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKGlzVGltZW91dCl7
Ci0JCQkvLyBUaGUgdHJhbnNmZXIgaXMgY29tcGxldGUgYW5kIHRoZSBkYXRhIGlzIGF2YWlsYWJs
ZSwgb3IgdGhlIHJlcXVlc3QgdGltZWQgb3V0Ci0JCQlpZiAoICFyZXF1ZXN0RG9uZSAmJiB4bWwg
JiYgKHhtbC5yZWFkeVN0YXRlID09IDQgfHwgaXNUaW1lb3V0ID09ICJ0aW1lb3V0IikgKSB7Ci0J
CQkJcmVxdWVzdERvbmUgPSB0cnVlOwotCQkJCQotCQkJCS8vIGNsZWFyIHBvbGwgaW50ZXJ2YWwK
LQkJCQlpZiAoaXZhbCkgewotCQkJCQljbGVhckludGVydmFsKGl2YWwpOwotCQkJCQlpdmFsID0g
bnVsbDsKLQkJCQl9Ci0JCQkJCi0JCQkJc3RhdHVzID0gaXNUaW1lb3V0ID09ICJ0aW1lb3V0IiAm
JiAidGltZW91dCIgfHwKLQkJCQkJIWpRdWVyeS5odHRwU3VjY2VzcyggeG1sICkgJiYgImVycm9y
IiB8fAotCQkJCQlzLmlmTW9kaWZpZWQgJiYgalF1ZXJ5Lmh0dHBOb3RNb2RpZmllZCggeG1sLCBz
LnVybCApICYmICJub3Rtb2RpZmllZCIgfHwKLQkJCQkJInN1Y2Nlc3MiOwotCi0JCQkJaWYgKCBz
dGF0dXMgPT0gInN1Y2Nlc3MiICkgewotCQkJCQkvLyBXYXRjaCBmb3IsIGFuZCBjYXRjaCwgWE1M
IGRvY3VtZW50IHBhcnNlIGVycm9ycwotCQkJCQl0cnkgewotCQkJCQkJLy8gcHJvY2VzcyB0aGUg
ZGF0YSAocnVucyB0aGUgeG1sIHRocm91Z2ggaHR0cERhdGEgcmVnYXJkbGVzcyBvZiBjYWxsYmFj
aykKLQkJCQkJCWRhdGEgPSBqUXVlcnkuaHR0cERhdGEoIHhtbCwgcy5kYXRhVHlwZSApOwotCQkJ
CQl9IGNhdGNoKGUpIHsKLQkJCQkJCXN0YXR1cyA9ICJwYXJzZXJlcnJvciI7Ci0JCQkJCX0KLQkJ
CQl9Ci0KLQkJCQkvLyBNYWtlIHN1cmUgdGhhdCB0aGUgcmVxdWVzdCB3YXMgc3VjY2Vzc2Z1bCBv
ciBub3Rtb2RpZmllZAotCQkJCWlmICggc3RhdHVzID09ICJzdWNjZXNzIiApIHsKLQkJCQkJLy8g
Q2FjaGUgTGFzdC1Nb2RpZmllZCBoZWFkZXIsIGlmIGlmTW9kaWZpZWQgbW9kZS4KLQkJCQkJdmFy
IG1vZFJlczsKLQkJCQkJdHJ5IHsKLQkJCQkJCW1vZFJlcyA9IHhtbC5nZXRSZXNwb25zZUhlYWRl
cigiTGFzdC1Nb2RpZmllZCIpOwotCQkJCQl9IGNhdGNoKGUpIHt9IC8vIHN3YWxsb3cgZXhjZXB0
aW9uIHRocm93biBieSBGRiBpZiBoZWFkZXIgaXMgbm90IGF2YWlsYWJsZQotCQotCQkJCQlpZiAo
IHMuaWZNb2RpZmllZCAmJiBtb2RSZXMgKQotCQkJCQkJalF1ZXJ5Lmxhc3RNb2RpZmllZFtzLnVy
bF0gPSBtb2RSZXM7Ci0KLQkJCQkJLy8gSlNPTlAgaGFuZGxlcyBpdHMgb3duIHN1Y2Nlc3MgY2Fs
bGJhY2sKLQkJCQkJaWYgKCAhanNvbnAgKQotCQkJCQkJc3VjY2VzcygpOwkKLQkJCQl9IGVsc2UK
LQkJCQkJalF1ZXJ5LmhhbmRsZUVycm9yKHMsIHhtbCwgc3RhdHVzKTsKLQotCQkJCS8vIEZpcmUg
dGhlIGNvbXBsZXRlIGhhbmRsZXJzCi0JCQkJY29tcGxldGUoKTsKLQotCQkJCS8vIFN0b3AgbWVt
b3J5IGxlYWtzCi0JCQkJaWYgKCBzLmFzeW5jICkKLQkJCQkJeG1sID0gbnVsbDsKLQkJCX0KLQkJ
fTsKLQkJCi0JCWlmICggcy5hc3luYyApIHsKLQkJCS8vIGRvbid0IGF0dGFjaCB0aGUgaGFuZGxl
ciB0byB0aGUgcmVxdWVzdCwganVzdCBwb2xsIGl0IGluc3RlYWQKLQkJCXZhciBpdmFsID0gc2V0
SW50ZXJ2YWwob25yZWFkeXN0YXRlY2hhbmdlLCAxMyk7IAotCi0JCQkvLyBUaW1lb3V0IGNoZWNr
ZXIKLQkJCWlmICggcy50aW1lb3V0ID4gMCApCi0JCQkJc2V0VGltZW91dChmdW5jdGlvbigpewot
CQkJCQkvLyBDaGVjayB0byBzZWUgaWYgdGhlIHJlcXVlc3QgaXMgc3RpbGwgaGFwcGVuaW5nCi0J
CQkJCWlmICggeG1sICkgewotCQkJCQkJLy8gQ2FuY2VsIHRoZSByZXF1ZXN0Ci0JCQkJCQl4bWwu
YWJvcnQoKTsKLQkKLQkJCQkJCWlmKCAhcmVxdWVzdERvbmUgKQotCQkJCQkJCW9ucmVhZHlzdGF0
ZWNoYW5nZSggInRpbWVvdXQiICk7Ci0JCQkJCX0KLQkJCQl9LCBzLnRpbWVvdXQpOwotCQl9Ci0J
CQkKLQkJLy8gU2VuZCB0aGUgZGF0YQotCQl0cnkgewotCQkJeG1sLnNlbmQocy5kYXRhKTsKLQkJ
fSBjYXRjaChlKSB7Ci0JCQlqUXVlcnkuaGFuZGxlRXJyb3IocywgeG1sLCBudWxsLCBlKTsKLQkJ
fQotCQkKLQkJLy8gZmlyZWZveCAxLjUgZG9lc24ndCBmaXJlIHN0YXRlY2hhbmdlIGZvciBzeW5j
IHJlcXVlc3RzCi0JCWlmICggIXMuYXN5bmMgKQotCQkJb25yZWFkeXN0YXRlY2hhbmdlKCk7Ci0K
LQkJZnVuY3Rpb24gc3VjY2VzcygpewotCQkJLy8gSWYgYSBsb2NhbCBjYWxsYmFjayB3YXMgc3Bl
Y2lmaWVkLCBmaXJlIGl0IGFuZCBwYXNzIGl0IHRoZSBkYXRhCi0JCQlpZiAoIHMuc3VjY2VzcyAp
Ci0JCQkJcy5zdWNjZXNzKCBkYXRhLCBzdGF0dXMgKTsKLQotCQkJLy8gRmlyZSB0aGUgZ2xvYmFs
IGNhbGxiYWNrCi0JCQlpZiAoIHMuZ2xvYmFsICkKLQkJCQlqUXVlcnkuZXZlbnQudHJpZ2dlcigg
ImFqYXhTdWNjZXNzIiwgW3htbCwgc10gKTsKLQkJfQotCi0JCWZ1bmN0aW9uIGNvbXBsZXRlKCl7
Ci0JCQkvLyBQcm9jZXNzIHJlc3VsdAotCQkJaWYgKCBzLmNvbXBsZXRlICkKLQkJCQlzLmNvbXBs
ZXRlKHhtbCwgc3RhdHVzKTsKLQotCQkJLy8gVGhlIHJlcXVlc3Qgd2FzIGNvbXBsZXRlZAotCQkJ
aWYgKCBzLmdsb2JhbCApCi0JCQkJalF1ZXJ5LmV2ZW50LnRyaWdnZXIoICJhamF4Q29tcGxldGUi
LCBbeG1sLCBzXSApOwotCi0JCQkvLyBIYW5kbGUgdGhlIGdsb2JhbCBBSkFYIGNvdW50ZXIKLQkJ
CWlmICggcy5nbG9iYWwgJiYgISAtLWpRdWVyeS5hY3RpdmUgKQotCQkJCWpRdWVyeS5ldmVudC50
cmlnZ2VyKCAiYWpheFN0b3AiICk7Ci0JCX0KLQkJCi0JCS8vIHJldHVybiBYTUxIdHRwUmVxdWVz
dCB0byBhbGxvdyBhYm9ydGluZyB0aGUgcmVxdWVzdCBldGMuCi0JCXJldHVybiB4bWw7Ci0JfSwK
LQotCWhhbmRsZUVycm9yOiBmdW5jdGlvbiggcywgeG1sLCBzdGF0dXMsIGUgKSB7Ci0JCS8vIElm
IGEgbG9jYWwgY2FsbGJhY2sgd2FzIHNwZWNpZmllZCwgZmlyZSBpdAotCQlpZiAoIHMuZXJyb3Ig
KSBzLmVycm9yKCB4bWwsIHN0YXR1cywgZSApOwotCi0JCS8vIEZpcmUgdGhlIGdsb2JhbCBjYWxs
YmFjawotCQlpZiAoIHMuZ2xvYmFsICkKLQkJCWpRdWVyeS5ldmVudC50cmlnZ2VyKCAiYWpheEVy
cm9yIiwgW3htbCwgcywgZV0gKTsKLQl9LAotCi0JLy8gQ291bnRlciBmb3IgaG9sZGluZyB0aGUg
bnVtYmVyIG9mIGFjdGl2ZSBxdWVyaWVzCi0JYWN0aXZlOiAwLAotCi0JLy8gRGV0ZXJtaW5lcyBp
ZiBhbiBYTUxIdHRwUmVxdWVzdCB3YXMgc3VjY2Vzc2Z1bCBvciBub3QKLQlodHRwU3VjY2Vzczog
ZnVuY3Rpb24oIHIgKSB7Ci0JCXRyeSB7Ci0JCQkvLyBJRSBlcnJvciBzb21ldGltZXMgcmV0dXJu
cyAxMjIzIHdoZW4gaXQgc2hvdWxkIGJlIDIwNCBzbyB0cmVhdCBpdCBhcyBzdWNjZXNzLCBzZWUg
IzE0NTAKLQkJCXJldHVybiAhci5zdGF0dXMgJiYgbG9jYXRpb24ucHJvdG9jb2wgPT0gImZpbGU6
IiB8fAotCQkJCSggci5zdGF0dXMgPj0gMjAwICYmIHIuc3RhdHVzIDwgMzAwICkgfHwgci5zdGF0
dXMgPT0gMzA0IHx8IHIuc3RhdHVzID09IDEyMjMgfHwKLQkJCQlqUXVlcnkuYnJvd3Nlci5zYWZh
cmkgJiYgci5zdGF0dXMgPT0gdW5kZWZpbmVkOwotCQl9IGNhdGNoKGUpe30KLQkJcmV0dXJuIGZh
bHNlOwotCX0sCi0KLQkvLyBEZXRlcm1pbmVzIGlmIGFuIFhNTEh0dHBSZXF1ZXN0IHJldHVybnMg
Tm90TW9kaWZpZWQKLQlodHRwTm90TW9kaWZpZWQ6IGZ1bmN0aW9uKCB4bWwsIHVybCApIHsKLQkJ
dHJ5IHsKLQkJCXZhciB4bWxSZXMgPSB4bWwuZ2V0UmVzcG9uc2VIZWFkZXIoIkxhc3QtTW9kaWZp
ZWQiKTsKLQotCQkJLy8gRmlyZWZveCBhbHdheXMgcmV0dXJucyAyMDAuIGNoZWNrIExhc3QtTW9k
aWZpZWQgZGF0ZQotCQkJcmV0dXJuIHhtbC5zdGF0dXMgPT0gMzA0IHx8IHhtbFJlcyA9PSBqUXVl
cnkubGFzdE1vZGlmaWVkW3VybF0gfHwKLQkJCQlqUXVlcnkuYnJvd3Nlci5zYWZhcmkgJiYgeG1s
LnN0YXR1cyA9PSB1bmRlZmluZWQ7Ci0JCX0gY2F0Y2goZSl7fQotCQlyZXR1cm4gZmFsc2U7Ci0J
fSwKLQotCWh0dHBEYXRhOiBmdW5jdGlvbiggciwgdHlwZSApIHsKLQkJdmFyIGN0ID0gci5nZXRS
ZXNwb25zZUhlYWRlcigiY29udGVudC10eXBlIik7Ci0JCXZhciB4bWwgPSB0eXBlID09ICJ4bWwi
IHx8ICF0eXBlICYmIGN0ICYmIGN0LmluZGV4T2YoInhtbCIpID49IDA7Ci0JCXZhciBkYXRhID0g
eG1sID8gci5yZXNwb25zZVhNTCA6IHIucmVzcG9uc2VUZXh0OwotCi0JCWlmICggeG1sICYmIGRh
dGEuZG9jdW1lbnRFbGVtZW50LnRhZ05hbWUgPT0gInBhcnNlcmVycm9yIiApCi0JCQl0aHJvdyAi
cGFyc2VyZXJyb3IiOwotCi0JCS8vIElmIHRoZSB0eXBlIGlzICJzY3JpcHQiLCBldmFsIGl0IGlu
IGdsb2JhbCBjb250ZXh0Ci0JCWlmICggdHlwZSA9PSAic2NyaXB0IiApCi0JCQlqUXVlcnkuZ2xv
YmFsRXZhbCggZGF0YSApOwotCi0JCS8vIEdldCB0aGUgSmF2YVNjcmlwdCBvYmplY3QsIGlmIEpT
T04gaXMgdXNlZC4KLQkJaWYgKCB0eXBlID09ICJqc29uIiApCi0JCQlkYXRhID0gZXZhbCgiKCIg
KyBkYXRhICsgIikiKTsKLQotCQlyZXR1cm4gZGF0YTsKLQl9LAotCi0JLy8gU2VyaWFsaXplIGFu
IGFycmF5IG9mIGZvcm0gZWxlbWVudHMgb3IgYSBzZXQgb2YKLQkvLyBrZXkvdmFsdWVzIGludG8g
YSBxdWVyeSBzdHJpbmcKLQlwYXJhbTogZnVuY3Rpb24oIGEgKSB7Ci0JCXZhciBzID0gW107Ci0K
LQkJLy8gSWYgYW4gYXJyYXkgd2FzIHBhc3NlZCBpbiwgYXNzdW1lIHRoYXQgaXQgaXMgYW4gYXJy
YXkKLQkJLy8gb2YgZm9ybSBlbGVtZW50cwotCQlpZiAoIGEuY29uc3RydWN0b3IgPT0gQXJyYXkg
fHwgYS5qcXVlcnkgKQotCQkJLy8gU2VyaWFsaXplIHRoZSBmb3JtIGVsZW1lbnRzCi0JCQlqUXVl
cnkuZWFjaCggYSwgZnVuY3Rpb24oKXsKLQkJCQlzLnB1c2goIGVuY29kZVVSSUNvbXBvbmVudCh0
aGlzLm5hbWUpICsgIj0iICsgZW5jb2RlVVJJQ29tcG9uZW50KCB0aGlzLnZhbHVlICkgKTsKLQkJ
CX0pOwotCi0JCS8vIE90aGVyd2lzZSwgYXNzdW1lIHRoYXQgaXQncyBhbiBvYmplY3Qgb2Yga2V5
L3ZhbHVlIHBhaXJzCi0JCWVsc2UKLQkJCS8vIFNlcmlhbGl6ZSB0aGUga2V5L3ZhbHVlcwotCQkJ
Zm9yICggdmFyIGogaW4gYSApCi0JCQkJLy8gSWYgdGhlIHZhbHVlIGlzIGFuIGFycmF5IHRoZW4g
dGhlIGtleSBuYW1lcyBuZWVkIHRvIGJlIHJlcGVhdGVkCi0JCQkJaWYgKCBhW2pdICYmIGFbal0u
Y29uc3RydWN0b3IgPT0gQXJyYXkgKQotCQkJCQlqUXVlcnkuZWFjaCggYVtqXSwgZnVuY3Rpb24o
KXsKLQkJCQkJCXMucHVzaCggZW5jb2RlVVJJQ29tcG9uZW50KGopICsgIj0iICsgZW5jb2RlVVJJ
Q29tcG9uZW50KCB0aGlzICkgKTsKLQkJCQkJfSk7Ci0JCQkJZWxzZQotCQkJCQlzLnB1c2goIGVu
Y29kZVVSSUNvbXBvbmVudChqKSArICI9IiArIGVuY29kZVVSSUNvbXBvbmVudCggYVtqXSApICk7
Ci0KLQkJLy8gUmV0dXJuIHRoZSByZXN1bHRpbmcgc2VyaWFsaXphdGlvbgotCQlyZXR1cm4gcy5q
b2luKCImIikucmVwbGFjZSgvJTIwL2csICIrIik7Ci0JfQotCi19KTsKLWpRdWVyeS5mbi5leHRl
bmQoewotCXNob3c6IGZ1bmN0aW9uKHNwZWVkLGNhbGxiYWNrKXsKLQkJcmV0dXJuIHNwZWVkID8K
LQkJCXRoaXMuYW5pbWF0ZSh7Ci0JCQkJaGVpZ2h0OiAic2hvdyIsIHdpZHRoOiAic2hvdyIsIG9w
YWNpdHk6ICJzaG93IgotCQkJfSwgc3BlZWQsIGNhbGxiYWNrKSA6Ci0JCQkKLQkJCXRoaXMuZmls
dGVyKCI6aGlkZGVuIikuZWFjaChmdW5jdGlvbigpewotCQkJCXRoaXMuc3R5bGUuZGlzcGxheSA9
IHRoaXMub2xkYmxvY2sgfHwgIiI7Ci0JCQkJaWYgKCBqUXVlcnkuY3NzKHRoaXMsImRpc3BsYXki
KSA9PSAibm9uZSIgKSB7Ci0JCQkJCXZhciBlbGVtID0galF1ZXJ5KCI8IiArIHRoaXMudGFnTmFt
ZSArICIgLz4iKS5hcHBlbmRUbygiYm9keSIpOwotCQkJCQl0aGlzLnN0eWxlLmRpc3BsYXkgPSBl
bGVtLmNzcygiZGlzcGxheSIpOwotCQkJCQkvLyBoYW5kbGUgYW4gZWRnZSBjb25kaXRpb24gd2hl
cmUgY3NzIGlzIC0gZGl2IHsgZGlzcGxheTpub25lOyB9IG9yIHNpbWlsYXIKLQkJCQkJaWYgKHRo
aXMuc3R5bGUuZGlzcGxheSA9PSAibm9uZSIpCi0JCQkJCQl0aGlzLnN0eWxlLmRpc3BsYXkgPSAi
YmxvY2siOwotCQkJCQllbGVtLnJlbW92ZSgpOwotCQkJCX0KLQkJCX0pLmVuZCgpOwotCX0sCi0J
Ci0JaGlkZTogZnVuY3Rpb24oc3BlZWQsY2FsbGJhY2spewotCQlyZXR1cm4gc3BlZWQgPwotCQkJ
dGhpcy5hbmltYXRlKHsKLQkJCQloZWlnaHQ6ICJoaWRlIiwgd2lkdGg6ICJoaWRlIiwgb3BhY2l0
eTogImhpZGUiCi0JCQl9LCBzcGVlZCwgY2FsbGJhY2spIDoKLQkJCQotCQkJdGhpcy5maWx0ZXIo
Ijp2aXNpYmxlIikuZWFjaChmdW5jdGlvbigpewotCQkJCXRoaXMub2xkYmxvY2sgPSB0aGlzLm9s
ZGJsb2NrIHx8IGpRdWVyeS5jc3ModGhpcywiZGlzcGxheSIpOwotCQkJCXRoaXMuc3R5bGUuZGlz
cGxheSA9ICJub25lIjsKLQkJCX0pLmVuZCgpOwotCX0sCi0KLQkvLyBTYXZlIHRoZSBvbGQgdG9n
Z2xlIGZ1bmN0aW9uCi0JX3RvZ2dsZTogalF1ZXJ5LmZuLnRvZ2dsZSwKLQkKLQl0b2dnbGU6IGZ1
bmN0aW9uKCBmbiwgZm4yICl7Ci0JCXJldHVybiBqUXVlcnkuaXNGdW5jdGlvbihmbikgJiYgalF1
ZXJ5LmlzRnVuY3Rpb24oZm4yKSA/Ci0JCQl0aGlzLl90b2dnbGUoIGZuLCBmbjIgKSA6Ci0JCQlm
biA/Ci0JCQkJdGhpcy5hbmltYXRlKHsKLQkJCQkJaGVpZ2h0OiAidG9nZ2xlIiwgd2lkdGg6ICJ0
b2dnbGUiLCBvcGFjaXR5OiAidG9nZ2xlIgotCQkJCX0sIGZuLCBmbjIpIDoKLQkJCQl0aGlzLmVh
Y2goZnVuY3Rpb24oKXsKLQkJCQkJalF1ZXJ5KHRoaXMpWyBqUXVlcnkodGhpcykuaXMoIjpoaWRk
ZW4iKSA/ICJzaG93IiA6ICJoaWRlIiBdKCk7Ci0JCQkJfSk7Ci0JfSwKLQkKLQlzbGlkZURvd246
IGZ1bmN0aW9uKHNwZWVkLGNhbGxiYWNrKXsKLQkJcmV0dXJuIHRoaXMuYW5pbWF0ZSh7aGVpZ2h0
OiAic2hvdyJ9LCBzcGVlZCwgY2FsbGJhY2spOwotCX0sCi0JCi0Jc2xpZGVVcDogZnVuY3Rpb24o
c3BlZWQsY2FsbGJhY2spewotCQlyZXR1cm4gdGhpcy5hbmltYXRlKHtoZWlnaHQ6ICJoaWRlIn0s
IHNwZWVkLCBjYWxsYmFjayk7Ci0JfSwKLQotCXNsaWRlVG9nZ2xlOiBmdW5jdGlvbihzcGVlZCwg
Y2FsbGJhY2spewotCQlyZXR1cm4gdGhpcy5hbmltYXRlKHtoZWlnaHQ6ICJ0b2dnbGUifSwgc3Bl
ZWQsIGNhbGxiYWNrKTsKLQl9LAotCQotCWZhZGVJbjogZnVuY3Rpb24oc3BlZWQsIGNhbGxiYWNr
KXsKLQkJcmV0dXJuIHRoaXMuYW5pbWF0ZSh7b3BhY2l0eTogInNob3cifSwgc3BlZWQsIGNhbGxi
YWNrKTsKLQl9LAotCQotCWZhZGVPdXQ6IGZ1bmN0aW9uKHNwZWVkLCBjYWxsYmFjayl7Ci0JCXJl
dHVybiB0aGlzLmFuaW1hdGUoe29wYWNpdHk6ICJoaWRlIn0sIHNwZWVkLCBjYWxsYmFjayk7Ci0J
fSwKLQkKLQlmYWRlVG86IGZ1bmN0aW9uKHNwZWVkLHRvLGNhbGxiYWNrKXsKLQkJcmV0dXJuIHRo
aXMuYW5pbWF0ZSh7b3BhY2l0eTogdG99LCBzcGVlZCwgY2FsbGJhY2spOwotCX0sCi0JCi0JYW5p
bWF0ZTogZnVuY3Rpb24oIHByb3AsIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICkgewotCQl2YXIg
b3B0YWxsID0galF1ZXJ5LnNwZWVkKHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrKTsKLQotCQlyZXR1
cm4gdGhpc1sgb3B0YWxsLnF1ZXVlID09PSBmYWxzZSA/ICJlYWNoIiA6ICJxdWV1ZSIgXShmdW5j
dGlvbigpewotCQkJaWYgKCB0aGlzLm5vZGVUeXBlICE9IDEpCi0JCQkJcmV0dXJuIGZhbHNlOwot
Ci0JCQl2YXIgb3B0ID0galF1ZXJ5LmV4dGVuZCh7fSwgb3B0YWxsKTsKLQkJCXZhciBoaWRkZW4g
PSBqUXVlcnkodGhpcykuaXMoIjpoaWRkZW4iKSwgc2VsZiA9IHRoaXM7Ci0JCQkKLQkJCWZvciAo
IHZhciBwIGluIHByb3AgKSB7Ci0JCQkJaWYgKCBwcm9wW3BdID09ICJoaWRlIiAmJiBoaWRkZW4g
fHwgcHJvcFtwXSA9PSAic2hvdyIgJiYgIWhpZGRlbiApCi0JCQkJCXJldHVybiBqUXVlcnkuaXNG
dW5jdGlvbihvcHQuY29tcGxldGUpICYmIG9wdC5jb21wbGV0ZS5hcHBseSh0aGlzKTsKLQotCQkJ
CWlmICggcCA9PSAiaGVpZ2h0IiB8fCBwID09ICJ3aWR0aCIgKSB7Ci0JCQkJCS8vIFN0b3JlIGRp
c3BsYXkgcHJvcGVydHkKLQkJCQkJb3B0LmRpc3BsYXkgPSBqUXVlcnkuY3NzKHRoaXMsICJkaXNw
bGF5Iik7Ci0KLQkJCQkJLy8gTWFrZSBzdXJlIHRoYXQgbm90aGluZyBzbmVha3Mgb3V0Ci0JCQkJ
CW9wdC5vdmVyZmxvdyA9IHRoaXMuc3R5bGUub3ZlcmZsb3c7Ci0JCQkJfQotCQkJfQotCi0JCQlp
ZiAoIG9wdC5vdmVyZmxvdyAhPSBudWxsICkKLQkJCQl0aGlzLnN0eWxlLm92ZXJmbG93ID0gImhp
ZGRlbiI7Ci0KLQkJCW9wdC5jdXJBbmltID0galF1ZXJ5LmV4dGVuZCh7fSwgcHJvcCk7Ci0JCQkK
LQkJCWpRdWVyeS5lYWNoKCBwcm9wLCBmdW5jdGlvbihuYW1lLCB2YWwpewotCQkJCXZhciBlID0g
bmV3IGpRdWVyeS5meCggc2VsZiwgb3B0LCBuYW1lICk7Ci0KLQkJCQlpZiAoIC90b2dnbGV8c2hv
d3xoaWRlLy50ZXN0KHZhbCkgKQotCQkJCQllWyB2YWwgPT0gInRvZ2dsZSIgPyBoaWRkZW4gPyAi
c2hvdyIgOiAiaGlkZSIgOiB2YWwgXSggcHJvcCApOwotCQkJCWVsc2UgewotCQkJCQl2YXIgcGFy
dHMgPSB2YWwudG9TdHJpbmcoKS5tYXRjaCgvXihbKy1dPSk/KFtcZCstLl0rKSguKikkLyksCi0J
CQkJCQlzdGFydCA9IGUuY3VyKHRydWUpIHx8IDA7Ci0KLQkJCQkJaWYgKCBwYXJ0cyApIHsKLQkJ
CQkJCXZhciBlbmQgPSBwYXJzZUZsb2F0KHBhcnRzWzJdKSwKLQkJCQkJCQl1bml0ID0gcGFydHNb
M10gfHwgInB4IjsKLQotCQkJCQkJLy8gV2UgbmVlZCB0byBjb21wdXRlIHN0YXJ0aW5nIHZhbHVl
Ci0JCQkJCQlpZiAoIHVuaXQgIT0gInB4IiApIHsKLQkJCQkJCQlzZWxmLnN0eWxlWyBuYW1lIF0g
PSAoZW5kIHx8IDEpICsgdW5pdDsKLQkJCQkJCQlzdGFydCA9ICgoZW5kIHx8IDEpIC8gZS5jdXIo
dHJ1ZSkpICogc3RhcnQ7Ci0JCQkJCQkJc2VsZi5zdHlsZVsgbmFtZSBdID0gc3RhcnQgKyB1bml0
OwotCQkJCQkJfQotCi0JCQkJCQkvLyBJZiBhICs9Ly09IHRva2VuIHdhcyBwcm92aWRlZCwgd2Un
cmUgZG9pbmcgYSByZWxhdGl2ZSBhbmltYXRpb24KLQkJCQkJCWlmICggcGFydHNbMV0gKQotCQkJ
CQkJCWVuZCA9ICgocGFydHNbMV0gPT0gIi09IiA/IC0xIDogMSkgKiBlbmQpICsgc3RhcnQ7Ci0K
LQkJCQkJCWUuY3VzdG9tKCBzdGFydCwgZW5kLCB1bml0ICk7Ci0JCQkJCX0gZWxzZQotCQkJCQkJ
ZS5jdXN0b20oIHN0YXJ0LCB2YWwsICIiICk7Ci0JCQkJfQotCQkJfSk7Ci0KLQkJCS8vIEZvciBK
UyBzdHJpY3QgY29tcGxpYW5jZQotCQkJcmV0dXJuIHRydWU7Ci0JCX0pOwotCX0sCi0JCi0JcXVl
dWU6IGZ1bmN0aW9uKHR5cGUsIGZuKXsKLQkJaWYgKCBqUXVlcnkuaXNGdW5jdGlvbih0eXBlKSB8
fCAoIHR5cGUgJiYgdHlwZS5jb25zdHJ1Y3RvciA9PSBBcnJheSApKSB7Ci0JCQlmbiA9IHR5cGU7
Ci0JCQl0eXBlID0gImZ4IjsKLQkJfQotCi0JCWlmICggIXR5cGUgfHwgKHR5cGVvZiB0eXBlID09
ICJzdHJpbmciICYmICFmbikgKQotCQkJcmV0dXJuIHF1ZXVlKCB0aGlzWzBdLCB0eXBlICk7Ci0K
LQkJcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpewotCQkJaWYgKCBmbi5jb25zdHJ1Y3RvciA9
PSBBcnJheSApCi0JCQkJcXVldWUodGhpcywgdHlwZSwgZm4pOwotCQkJZWxzZSB7Ci0JCQkJcXVl
dWUodGhpcywgdHlwZSkucHVzaCggZm4gKTsKLQkJCQotCQkJCWlmICggcXVldWUodGhpcywgdHlw
ZSkubGVuZ3RoID09IDEgKQotCQkJCQlmbi5hcHBseSh0aGlzKTsKLQkJCX0KLQkJfSk7Ci0JfSwK
LQotCXN0b3A6IGZ1bmN0aW9uKGNsZWFyUXVldWUsIGdvdG9FbmQpewotCQl2YXIgdGltZXJzID0g
alF1ZXJ5LnRpbWVyczsKLQotCQlpZiAoY2xlYXJRdWV1ZSkKLQkJCXRoaXMucXVldWUoW10pOwot
Ci0JCXRoaXMuZWFjaChmdW5jdGlvbigpewotCQkJLy8gZ28gaW4gcmV2ZXJzZSBvcmRlciBzbyBh
bnl0aGluZyBhZGRlZCB0byB0aGUgcXVldWUgZHVyaW5nIHRoZSBsb29wIGlzIGlnbm9yZWQKLQkJ
CWZvciAoIHZhciBpID0gdGltZXJzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tICkKLQkJCQlpZiAo
IHRpbWVyc1tpXS5lbGVtID09IHRoaXMgKSB7Ci0JCQkJCWlmIChnb3RvRW5kKQotCQkJCQkJLy8g
Zm9yY2UgdGhlIG5leHQgc3RlcCB0byBiZSB0aGUgbGFzdAotCQkJCQkJdGltZXJzW2ldKHRydWUp
OwotCQkJCQl0aW1lcnMuc3BsaWNlKGksIDEpOwotCQkJCX0KLQkJfSk7Ci0KLQkJLy8gc3RhcnQg
dGhlIG5leHQgaW4gdGhlIHF1ZXVlIGlmIHRoZSBsYXN0IHN0ZXAgd2Fzbid0IGZvcmNlZAotCQlp
ZiAoIWdvdG9FbmQpCi0JCQl0aGlzLmRlcXVldWUoKTsKLQotCQlyZXR1cm4gdGhpczsKLQl9Ci0K
LX0pOwotCi12YXIgcXVldWUgPSBmdW5jdGlvbiggZWxlbSwgdHlwZSwgYXJyYXkgKSB7Ci0JaWYg
KCAhZWxlbSApCi0JCXJldHVybiB1bmRlZmluZWQ7Ci0KLQl0eXBlID0gdHlwZSB8fCAiZngiOwot
Ci0JdmFyIHEgPSBqUXVlcnkuZGF0YSggZWxlbSwgdHlwZSArICJxdWV1ZSIgKTsKLQotCWlmICgg
IXEgfHwgYXJyYXkgKQotCQlxID0galF1ZXJ5LmRhdGEoIGVsZW0sIHR5cGUgKyAicXVldWUiLCAK
LQkJCWFycmF5ID8galF1ZXJ5Lm1ha2VBcnJheShhcnJheSkgOiBbXSApOwotCi0JcmV0dXJuIHE7
Ci19OwotCi1qUXVlcnkuZm4uZGVxdWV1ZSA9IGZ1bmN0aW9uKHR5cGUpewotCXR5cGUgPSB0eXBl
IHx8ICJmeCI7Ci0KLQlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Ci0JCXZhciBxID0gcXVl
dWUodGhpcywgdHlwZSk7Ci0KLQkJcS5zaGlmdCgpOwotCi0JCWlmICggcS5sZW5ndGggKQotCQkJ
cVswXS5hcHBseSggdGhpcyApOwotCX0pOwotfTsKLQotalF1ZXJ5LmV4dGVuZCh7Ci0JCi0Jc3Bl
ZWQ6IGZ1bmN0aW9uKHNwZWVkLCBlYXNpbmcsIGZuKSB7Ci0JCXZhciBvcHQgPSBzcGVlZCAmJiBz
cGVlZC5jb25zdHJ1Y3RvciA9PSBPYmplY3QgPyBzcGVlZCA6IHsKLQkJCWNvbXBsZXRlOiBmbiB8
fCAhZm4gJiYgZWFzaW5nIHx8IAotCQkJCWpRdWVyeS5pc0Z1bmN0aW9uKCBzcGVlZCApICYmIHNw
ZWVkLAotCQkJZHVyYXRpb246IHNwZWVkLAotCQkJZWFzaW5nOiBmbiAmJiBlYXNpbmcgfHwgZWFz
aW5nICYmIGVhc2luZy5jb25zdHJ1Y3RvciAhPSBGdW5jdGlvbiAmJiBlYXNpbmcKLQkJfTsKLQot
CQlvcHQuZHVyYXRpb24gPSAob3B0LmR1cmF0aW9uICYmIG9wdC5kdXJhdGlvbi5jb25zdHJ1Y3Rv
ciA9PSBOdW1iZXIgPyAKLQkJCW9wdC5kdXJhdGlvbiA6IAotCQkJeyBzbG93OiA2MDAsIGZhc3Q6
IDIwMCB9W29wdC5kdXJhdGlvbl0pIHx8IDQwMDsKLQkKLQkJLy8gUXVldWVpbmcKLQkJb3B0Lm9s
ZCA9IG9wdC5jb21wbGV0ZTsKLQkJb3B0LmNvbXBsZXRlID0gZnVuY3Rpb24oKXsKLQkJCWlmICgg
b3B0LnF1ZXVlICE9PSBmYWxzZSApCi0JCQkJalF1ZXJ5KHRoaXMpLmRlcXVldWUoKTsKLQkJCWlm
ICggalF1ZXJ5LmlzRnVuY3Rpb24oIG9wdC5vbGQgKSApCi0JCQkJb3B0Lm9sZC5hcHBseSggdGhp
cyApOwotCQl9OwotCQotCQlyZXR1cm4gb3B0OwotCX0sCi0JCi0JZWFzaW5nOiB7Ci0JCWxpbmVh
cjogZnVuY3Rpb24oIHAsIG4sIGZpcnN0TnVtLCBkaWZmICkgewotCQkJcmV0dXJuIGZpcnN0TnVt
ICsgZGlmZiAqIHA7Ci0JCX0sCi0JCXN3aW5nOiBmdW5jdGlvbiggcCwgbiwgZmlyc3ROdW0sIGRp
ZmYgKSB7Ci0JCQlyZXR1cm4gKCgtTWF0aC5jb3MocCpNYXRoLlBJKS8yKSArIDAuNSkgKiBkaWZm
ICsgZmlyc3ROdW07Ci0JCX0KLQl9LAotCQotCXRpbWVyczogW10sCi0JdGltZXJJZDogbnVsbCwK
LQotCWZ4OiBmdW5jdGlvbiggZWxlbSwgb3B0aW9ucywgcHJvcCApewotCQl0aGlzLm9wdGlvbnMg
PSBvcHRpb25zOwotCQl0aGlzLmVsZW0gPSBlbGVtOwotCQl0aGlzLnByb3AgPSBwcm9wOwotCi0J
CWlmICggIW9wdGlvbnMub3JpZyApCi0JCQlvcHRpb25zLm9yaWcgPSB7fTsKLQl9Ci0KLX0pOwot
Ci1qUXVlcnkuZngucHJvdG90eXBlID0gewotCi0JLy8gU2ltcGxlIGZ1bmN0aW9uIGZvciBzZXR0
aW5nIGEgc3R5bGUgdmFsdWUKLQl1cGRhdGU6IGZ1bmN0aW9uKCl7Ci0JCWlmICggdGhpcy5vcHRp
b25zLnN0ZXAgKQotCQkJdGhpcy5vcHRpb25zLnN0ZXAuYXBwbHkoIHRoaXMuZWxlbSwgWyB0aGlz
Lm5vdywgdGhpcyBdICk7Ci0KLQkJKGpRdWVyeS5meC5zdGVwW3RoaXMucHJvcF0gfHwgalF1ZXJ5
LmZ4LnN0ZXAuX2RlZmF1bHQpKCB0aGlzICk7Ci0KLQkJLy8gU2V0IGRpc3BsYXkgcHJvcGVydHkg
dG8gYmxvY2sgZm9yIGhlaWdodC93aWR0aCBhbmltYXRpb25zCi0JCWlmICggdGhpcy5wcm9wID09
ICJoZWlnaHQiIHx8IHRoaXMucHJvcCA9PSAid2lkdGgiICkKLQkJCXRoaXMuZWxlbS5zdHlsZS5k
aXNwbGF5ID0gImJsb2NrIjsKLQl9LAotCi0JLy8gR2V0IHRoZSBjdXJyZW50IHNpemUKLQljdXI6
IGZ1bmN0aW9uKGZvcmNlKXsKLQkJaWYgKCB0aGlzLmVsZW1bdGhpcy5wcm9wXSAhPSBudWxsICYm
IHRoaXMuZWxlbS5zdHlsZVt0aGlzLnByb3BdID09IG51bGwgKQotCQkJcmV0dXJuIHRoaXMuZWxl
bVsgdGhpcy5wcm9wIF07Ci0KLQkJdmFyIHIgPSBwYXJzZUZsb2F0KGpRdWVyeS5jc3ModGhpcy5l
bGVtLCB0aGlzLnByb3AsIGZvcmNlKSk7Ci0JCXJldHVybiByICYmIHIgPiAtMTAwMDAgPyByIDog
cGFyc2VGbG9hdChqUXVlcnkuY3VyQ1NTKHRoaXMuZWxlbSwgdGhpcy5wcm9wKSkgfHwgMDsKLQl9
LAotCi0JLy8gU3RhcnQgYW4gYW5pbWF0aW9uIGZyb20gb25lIG51bWJlciB0byBhbm90aGVyCi0J
Y3VzdG9tOiBmdW5jdGlvbihmcm9tLCB0bywgdW5pdCl7Ci0JCXRoaXMuc3RhcnRUaW1lID0gKG5l
dyBEYXRlKCkpLmdldFRpbWUoKTsKLQkJdGhpcy5zdGFydCA9IGZyb207Ci0JCXRoaXMuZW5kID0g
dG87Ci0JCXRoaXMudW5pdCA9IHVuaXQgfHwgdGhpcy51bml0IHx8ICJweCI7Ci0JCXRoaXMubm93
ID0gdGhpcy5zdGFydDsKLQkJdGhpcy5wb3MgPSB0aGlzLnN0YXRlID0gMDsKLQkJdGhpcy51cGRh
dGUoKTsKLQotCQl2YXIgc2VsZiA9IHRoaXM7Ci0JCWZ1bmN0aW9uIHQoZ290b0VuZCl7Ci0JCQly
ZXR1cm4gc2VsZi5zdGVwKGdvdG9FbmQpOwotCQl9Ci0KLQkJdC5lbGVtID0gdGhpcy5lbGVtOwot
Ci0JCWpRdWVyeS50aW1lcnMucHVzaCh0KTsKLQotCQlpZiAoIGpRdWVyeS50aW1lcklkID09IG51
bGwgKSB7Ci0JCQlqUXVlcnkudGltZXJJZCA9IHNldEludGVydmFsKGZ1bmN0aW9uKCl7Ci0JCQkJ
dmFyIHRpbWVycyA9IGpRdWVyeS50aW1lcnM7Ci0JCQkJCi0JCQkJZm9yICggdmFyIGkgPSAwOyBp
IDwgdGltZXJzLmxlbmd0aDsgaSsrICkKLQkJCQkJaWYgKCAhdGltZXJzW2ldKCkgKQotCQkJCQkJ
dGltZXJzLnNwbGljZShpLS0sIDEpOwotCi0JCQkJaWYgKCAhdGltZXJzLmxlbmd0aCApIHsKLQkJ
CQkJY2xlYXJJbnRlcnZhbCggalF1ZXJ5LnRpbWVySWQgKTsKLQkJCQkJalF1ZXJ5LnRpbWVySWQg
PSBudWxsOwotCQkJCX0KLQkJCX0sIDEzKTsKLQkJfQotCX0sCi0KLQkvLyBTaW1wbGUgJ3Nob3cn
IGZ1bmN0aW9uCi0Jc2hvdzogZnVuY3Rpb24oKXsKLQkJLy8gUmVtZW1iZXIgd2hlcmUgd2Ugc3Rh
cnRlZCwgc28gdGhhdCB3ZSBjYW4gZ28gYmFjayB0byBpdCBsYXRlcgotCQl0aGlzLm9wdGlvbnMu
b3JpZ1t0aGlzLnByb3BdID0galF1ZXJ5LmF0dHIoIHRoaXMuZWxlbS5zdHlsZSwgdGhpcy5wcm9w
ICk7Ci0JCXRoaXMub3B0aW9ucy5zaG93ID0gdHJ1ZTsKLQotCQkvLyBCZWdpbiB0aGUgYW5pbWF0
aW9uCi0JCXRoaXMuY3VzdG9tKDAsIHRoaXMuY3VyKCkpOwotCi0JCS8vIE1ha2Ugc3VyZSB0aGF0
IHdlIHN0YXJ0IGF0IGEgc21hbGwgd2lkdGgvaGVpZ2h0IHRvIGF2b2lkIGFueQotCQkvLyBmbGFz
aCBvZiBjb250ZW50Ci0JCWlmICggdGhpcy5wcm9wID09ICJ3aWR0aCIgfHwgdGhpcy5wcm9wID09
ICJoZWlnaHQiICkKLQkJCXRoaXMuZWxlbS5zdHlsZVt0aGlzLnByb3BdID0gIjFweCI7Ci0JCQot
CQkvLyBTdGFydCBieSBzaG93aW5nIHRoZSBlbGVtZW50Ci0JCWpRdWVyeSh0aGlzLmVsZW0pLnNo
b3coKTsKLQl9LAotCi0JLy8gU2ltcGxlICdoaWRlJyBmdW5jdGlvbgotCWhpZGU6IGZ1bmN0aW9u
KCl7Ci0JCS8vIFJlbWVtYmVyIHdoZXJlIHdlIHN0YXJ0ZWQsIHNvIHRoYXQgd2UgY2FuIGdvIGJh
Y2sgdG8gaXQgbGF0ZXIKLQkJdGhpcy5vcHRpb25zLm9yaWdbdGhpcy5wcm9wXSA9IGpRdWVyeS5h
dHRyKCB0aGlzLmVsZW0uc3R5bGUsIHRoaXMucHJvcCApOwotCQl0aGlzLm9wdGlvbnMuaGlkZSA9
IHRydWU7Ci0KLQkJLy8gQmVnaW4gdGhlIGFuaW1hdGlvbgotCQl0aGlzLmN1c3RvbSh0aGlzLmN1
cigpLCAwKTsKLQl9LAotCi0JLy8gRWFjaCBzdGVwIG9mIGFuIGFuaW1hdGlvbgotCXN0ZXA6IGZ1
bmN0aW9uKGdvdG9FbmQpewotCQl2YXIgdCA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7Ci0KLQkJ
aWYgKCBnb3RvRW5kIHx8IHQgPiB0aGlzLm9wdGlvbnMuZHVyYXRpb24gKyB0aGlzLnN0YXJ0VGlt
ZSApIHsKLQkJCXRoaXMubm93ID0gdGhpcy5lbmQ7Ci0JCQl0aGlzLnBvcyA9IHRoaXMuc3RhdGUg
PSAxOwotCQkJdGhpcy51cGRhdGUoKTsKLQotCQkJdGhpcy5vcHRpb25zLmN1ckFuaW1bIHRoaXMu
cHJvcCBdID0gdHJ1ZTsKLQotCQkJdmFyIGRvbmUgPSB0cnVlOwotCQkJZm9yICggdmFyIGkgaW4g
dGhpcy5vcHRpb25zLmN1ckFuaW0gKQotCQkJCWlmICggdGhpcy5vcHRpb25zLmN1ckFuaW1baV0g
IT09IHRydWUgKQotCQkJCQlkb25lID0gZmFsc2U7Ci0KLQkJCWlmICggZG9uZSApIHsKLQkJCQlp
ZiAoIHRoaXMub3B0aW9ucy5kaXNwbGF5ICE9IG51bGwgKSB7Ci0JCQkJCS8vIFJlc2V0IHRoZSBv
dmVyZmxvdwotCQkJCQl0aGlzLmVsZW0uc3R5bGUub3ZlcmZsb3cgPSB0aGlzLm9wdGlvbnMub3Zl
cmZsb3c7Ci0JCQkJCi0JCQkJCS8vIFJlc2V0IHRoZSBkaXNwbGF5Ci0JCQkJCXRoaXMuZWxlbS5z
dHlsZS5kaXNwbGF5ID0gdGhpcy5vcHRpb25zLmRpc3BsYXk7Ci0JCQkJCWlmICggalF1ZXJ5LmNz
cyh0aGlzLmVsZW0sICJkaXNwbGF5IikgPT0gIm5vbmUiICkKLQkJCQkJCXRoaXMuZWxlbS5zdHls
ZS5kaXNwbGF5ID0gImJsb2NrIjsKLQkJCQl9Ci0KLQkJCQkvLyBIaWRlIHRoZSBlbGVtZW50IGlm
IHRoZSAiaGlkZSIgb3BlcmF0aW9uIHdhcyBkb25lCi0JCQkJaWYgKCB0aGlzLm9wdGlvbnMuaGlk
ZSApCi0JCQkJCXRoaXMuZWxlbS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwotCi0JCQkJLy8gUmVz
ZXQgdGhlIHByb3BlcnRpZXMsIGlmIHRoZSBpdGVtIGhhcyBiZWVuIGhpZGRlbiBvciBzaG93bgot
CQkJCWlmICggdGhpcy5vcHRpb25zLmhpZGUgfHwgdGhpcy5vcHRpb25zLnNob3cgKQotCQkJCQlm
b3IgKCB2YXIgcCBpbiB0aGlzLm9wdGlvbnMuY3VyQW5pbSApCi0JCQkJCQlqUXVlcnkuYXR0cih0
aGlzLmVsZW0uc3R5bGUsIHAsIHRoaXMub3B0aW9ucy5vcmlnW3BdKTsKLQkJCX0KLQotCQkJLy8g
SWYgYSBjYWxsYmFjayB3YXMgcHJvdmlkZWQsIGV4ZWN1dGUgaXQKLQkJCWlmICggZG9uZSAmJiBq
UXVlcnkuaXNGdW5jdGlvbiggdGhpcy5vcHRpb25zLmNvbXBsZXRlICkgKQotCQkJCS8vIEV4ZWN1
dGUgdGhlIGNvbXBsZXRlIGZ1bmN0aW9uCi0JCQkJdGhpcy5vcHRpb25zLmNvbXBsZXRlLmFwcGx5
KCB0aGlzLmVsZW0gKTsKLQotCQkJcmV0dXJuIGZhbHNlOwotCQl9IGVsc2UgewotCQkJdmFyIG4g
PSB0IC0gdGhpcy5zdGFydFRpbWU7Ci0JCQl0aGlzLnN0YXRlID0gbiAvIHRoaXMub3B0aW9ucy5k
dXJhdGlvbjsKLQotCQkJLy8gUGVyZm9ybSB0aGUgZWFzaW5nIGZ1bmN0aW9uLCBkZWZhdWx0cyB0
byBzd2luZwotCQkJdGhpcy5wb3MgPSBqUXVlcnkuZWFzaW5nW3RoaXMub3B0aW9ucy5lYXNpbmcg
fHwgKGpRdWVyeS5lYXNpbmcuc3dpbmcgPyAic3dpbmciIDogImxpbmVhciIpXSh0aGlzLnN0YXRl
LCBuLCAwLCAxLCB0aGlzLm9wdGlvbnMuZHVyYXRpb24pOwotCQkJdGhpcy5ub3cgPSB0aGlzLnN0
YXJ0ICsgKCh0aGlzLmVuZCAtIHRoaXMuc3RhcnQpICogdGhpcy5wb3MpOwotCi0JCQkvLyBQZXJm
b3JtIHRoZSBuZXh0IHN0ZXAgb2YgdGhlIGFuaW1hdGlvbgotCQkJdGhpcy51cGRhdGUoKTsKLQkJ
fQotCi0JCXJldHVybiB0cnVlOwotCX0KLQotfTsKLQotalF1ZXJ5LmZ4LnN0ZXAgPSB7Ci0Jc2Ny
b2xsTGVmdDogZnVuY3Rpb24oZngpewotCQlmeC5lbGVtLnNjcm9sbExlZnQgPSBmeC5ub3c7Ci0J
fSwKLQotCXNjcm9sbFRvcDogZnVuY3Rpb24oZngpewotCQlmeC5lbGVtLnNjcm9sbFRvcCA9IGZ4
Lm5vdzsKLQl9LAotCi0Jb3BhY2l0eTogZnVuY3Rpb24oZngpewotCQlqUXVlcnkuYXR0cihmeC5l
bGVtLnN0eWxlLCAib3BhY2l0eSIsIGZ4Lm5vdyk7Ci0JfSwKLQotCV9kZWZhdWx0OiBmdW5jdGlv
bihmeCl7Ci0JCWZ4LmVsZW0uc3R5bGVbIGZ4LnByb3AgXSA9IGZ4Lm5vdyArIGZ4LnVuaXQ7Ci0J
fQotfTsKLS8vIFRoZSBPZmZzZXQgTWV0aG9kCi0vLyBPcmlnaW5hbGx5IEJ5IEJyYW5kb24gQWFy
b24sIHBhcnQgb2YgdGhlIERpbWVuc2lvbiBQbHVnaW4KLS8vIGh0dHA6Ly9qcXVlcnkuY29tL3Bs
dWdpbnMvcHJvamVjdC9kaW1lbnNpb25zCi1qUXVlcnkuZm4ub2Zmc2V0ID0gZnVuY3Rpb24oKSB7
Ci0JdmFyIGxlZnQgPSAwLCB0b3AgPSAwLCBlbGVtID0gdGhpc1swXSwgcmVzdWx0czsKLQkKLQlp
ZiAoIGVsZW0gKSB3aXRoICggalF1ZXJ5LmJyb3dzZXIgKSB7Ci0JCXZhciBwYXJlbnQgICAgICAg
PSBlbGVtLnBhcmVudE5vZGUsIAotCQkgICAgb2Zmc2V0Q2hpbGQgID0gZWxlbSwKLQkJICAgIG9m
ZnNldFBhcmVudCA9IGVsZW0ub2Zmc2V0UGFyZW50LCAKLQkJICAgIGRvYyAgICAgICAgICA9IGVs
ZW0ub3duZXJEb2N1bWVudCwKLQkJICAgIHNhZmFyaTIgICAgICA9IHNhZmFyaSAmJiBwYXJzZUlu
dCh2ZXJzaW9uKSA8IDUyMiAmJiAhL2Fkb2JlYWlyL2kudGVzdCh1c2VyQWdlbnQpLAotCQkgICAg
Zml4ZWQgICAgICAgID0galF1ZXJ5LmNzcyhlbGVtLCAicG9zaXRpb24iKSA9PSAiZml4ZWQiOwot
CQotCQkvLyBVc2UgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGlmIGF2YWlsYWJsZQotCQlpZiAoIGVs
ZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0ICkgewotCQkJdmFyIGJveCA9IGVsZW0uZ2V0Qm91bmRp
bmdDbGllbnRSZWN0KCk7Ci0JCQotCQkJLy8gQWRkIHRoZSBkb2N1bWVudCBzY3JvbGwgb2Zmc2V0
cwotCQkJYWRkKGJveC5sZWZ0ICsgTWF0aC5tYXgoZG9jLmRvY3VtZW50RWxlbWVudC5zY3JvbGxM
ZWZ0LCBkb2MuYm9keS5zY3JvbGxMZWZ0KSwKLQkJCQlib3gudG9wICArIE1hdGgubWF4KGRvYy5k
b2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wLCAgZG9jLmJvZHkuc2Nyb2xsVG9wKSk7Ci0JCQotCQkJ
Ly8gSUUgYWRkcyB0aGUgSFRNTCBlbGVtZW50J3MgYm9yZGVyLCBieSBkZWZhdWx0IGl0IGlzIG1l
ZGl1bSB3aGljaCBpcyAycHgKLQkJCS8vIElFIDYgYW5kIDcgcXVpcmtzIG1vZGUgdGhlIGJvcmRl
ciB3aWR0aCBpcyBvdmVyd3JpdGFibGUgYnkgdGhlIGZvbGxvd2luZyBjc3MgaHRtbCB7IGJvcmRl
cjogMDsgfQotCQkJLy8gSUUgNyBzdGFuZGFyZHMgbW9kZSwgdGhlIGJvcmRlciBpcyBhbHdheXMg
MnB4Ci0JCQkvLyBUaGlzIGJvcmRlci9vZmZzZXQgaXMgdHlwaWNhbGx5IHJlcHJlc2VudGVkIGJ5
IHRoZSBjbGllbnRMZWZ0IGFuZCBjbGllbnRUb3AgcHJvcGVydGllcwotCQkJLy8gSG93ZXZlciwg
aW4gSUU2IGFuZCA3IHF1aXJrcyBtb2RlIHRoZSBjbGllbnRMZWZ0IGFuZCBjbGllbnRUb3AgcHJv
cGVydGllcyBhcmUgbm90IHVwZGF0ZWQgd2hlbiBvdmVyd3JpdGluZyBpdCB2aWEgQ1NTCi0JCQkv
LyBUaGVyZWZvcmUgdGhpcyBtZXRob2Qgd2lsbCBiZSBvZmYgYnkgMnB4IGluIElFIHdoaWxlIGlu
IHF1aXJrc21vZGUKLQkJCWFkZCggLWRvYy5kb2N1bWVudEVsZW1lbnQuY2xpZW50TGVmdCwgLWRv
Yy5kb2N1bWVudEVsZW1lbnQuY2xpZW50VG9wICk7Ci0JCi0JCS8vIE90aGVyd2lzZSBsb29wIHRo
cm91Z2ggdGhlIG9mZnNldFBhcmVudHMgYW5kIHBhcmVudE5vZGVzCi0JCX0gZWxzZSB7Ci0JCQot
CQkJLy8gSW5pdGlhbCBlbGVtZW50IG9mZnNldHMKLQkJCWFkZCggZWxlbS5vZmZzZXRMZWZ0LCBl
bGVtLm9mZnNldFRvcCApOwotCQkJCi0JCQkvLyBHZXQgcGFyZW50IG9mZnNldHMKLQkJCXdoaWxl
ICggb2Zmc2V0UGFyZW50ICkgewotCQkJCS8vIEFkZCBvZmZzZXRQYXJlbnQgb2Zmc2V0cwotCQkJ
CWFkZCggb2Zmc2V0UGFyZW50Lm9mZnNldExlZnQsIG9mZnNldFBhcmVudC5vZmZzZXRUb3AgKTsK
LQkJCQotCQkJCS8vIE1vemlsbGEgYW5kIFNhZmFyaSA+IDIgZG9lcyBub3QgaW5jbHVkZSB0aGUg
Ym9yZGVyIG9uIG9mZnNldCBwYXJlbnRzCi0JCQkJLy8gSG93ZXZlciBNb3ppbGxhIGFkZHMgdGhl
IGJvcmRlciBmb3IgdGFibGUgb3IgdGFibGUgY2VsbHMKLQkJCQlpZiAoIG1vemlsbGEgJiYgIS9e
dChhYmxlfGR8aCkkL2kudGVzdChvZmZzZXRQYXJlbnQudGFnTmFtZSkgfHwgc2FmYXJpICYmICFz
YWZhcmkyICkKLQkJCQkJYm9yZGVyKCBvZmZzZXRQYXJlbnQgKTsKLQkJCQkJCi0JCQkJLy8gQWRk
IHRoZSBkb2N1bWVudCBzY3JvbGwgb2Zmc2V0cyBpZiBwb3NpdGlvbiBpcyBmaXhlZCBvbiBhbnkg
b2Zmc2V0UGFyZW50Ci0JCQkJaWYgKCAhZml4ZWQgJiYgalF1ZXJ5LmNzcyhvZmZzZXRQYXJlbnQs
ICJwb3NpdGlvbiIpID09ICJmaXhlZCIgKQotCQkJCQlmaXhlZCA9IHRydWU7Ci0JCQkKLQkJCQkv
LyBTZXQgb2Zmc2V0Q2hpbGQgdG8gcHJldmlvdXMgb2Zmc2V0UGFyZW50IHVubGVzcyBpdCBpcyB0
aGUgYm9keSBlbGVtZW50Ci0JCQkJb2Zmc2V0Q2hpbGQgID0gL15ib2R5JC9pLnRlc3Qob2Zmc2V0
UGFyZW50LnRhZ05hbWUpID8gb2Zmc2V0Q2hpbGQgOiBvZmZzZXRQYXJlbnQ7Ci0JCQkJLy8gR2V0
IG5leHQgb2Zmc2V0UGFyZW50Ci0JCQkJb2Zmc2V0UGFyZW50ID0gb2Zmc2V0UGFyZW50Lm9mZnNl
dFBhcmVudDsKLQkJCX0KLQkJCi0JCQkvLyBHZXQgcGFyZW50IHNjcm9sbCBvZmZzZXRzCi0JCQl3
aGlsZSAoIHBhcmVudCAmJiBwYXJlbnQudGFnTmFtZSAmJiAhL15ib2R5fGh0bWwkL2kudGVzdChw
YXJlbnQudGFnTmFtZSkgKSB7Ci0JCQkJLy8gUmVtb3ZlIHBhcmVudCBzY3JvbGwgVU5MRVNTIHRo
YXQgcGFyZW50IGlzIGlubGluZSBvciBhIHRhYmxlIHRvIHdvcmsgYXJvdW5kIE9wZXJhIGlubGlu
ZS90YWJsZSBzY3JvbGxMZWZ0L1RvcCBidWcKLQkJCQlpZiAoICEvXmlubGluZXx0YWJsZS4qJC9p
LnRlc3QoalF1ZXJ5LmNzcyhwYXJlbnQsICJkaXNwbGF5IikpICkKLQkJCQkJLy8gU3VidHJhY3Qg
cGFyZW50IHNjcm9sbCBvZmZzZXRzCi0JCQkJCWFkZCggLXBhcmVudC5zY3JvbGxMZWZ0LCAtcGFy
ZW50LnNjcm9sbFRvcCApOwotCQkJCi0JCQkJLy8gTW96aWxsYSBkb2VzIG5vdCBhZGQgdGhlIGJv
cmRlciBmb3IgYSBwYXJlbnQgdGhhdCBoYXMgb3ZlcmZsb3cgIT0gdmlzaWJsZQotCQkJCWlmICgg
bW96aWxsYSAmJiBqUXVlcnkuY3NzKHBhcmVudCwgIm92ZXJmbG93IikgIT0gInZpc2libGUiICkK
LQkJCQkJYm9yZGVyKCBwYXJlbnQgKTsKLQkJCQotCQkJCS8vIEdldCBuZXh0IHBhcmVudAotCQkJ
CXBhcmVudCA9IHBhcmVudC5wYXJlbnROb2RlOwotCQkJfQotCQkKLQkJCS8vIFNhZmFyaSA8PSAy
IGRvdWJsZXMgYm9keSBvZmZzZXRzIHdpdGggYSBmaXhlZCBwb3NpdGlvbiBlbGVtZW50L29mZnNl
dFBhcmVudCBvciBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQgb2Zmc2V0Q2hpbGQKLQkJCS8vIE1vemls
bGEgZG91YmxlcyBib2R5IG9mZnNldHMgd2l0aCBhIG5vbi1hYnNvbHV0ZWx5IHBvc2l0aW9uZWQg
b2Zmc2V0Q2hpbGQKLQkJCWlmICggKHNhZmFyaTIgJiYgKGZpeGVkIHx8IGpRdWVyeS5jc3Mob2Zm
c2V0Q2hpbGQsICJwb3NpdGlvbiIpID09ICJhYnNvbHV0ZSIpKSB8fCAKLQkJCQkobW96aWxsYSAm
JiBqUXVlcnkuY3NzKG9mZnNldENoaWxkLCAicG9zaXRpb24iKSAhPSAiYWJzb2x1dGUiKSApCi0J
CQkJCWFkZCggLWRvYy5ib2R5Lm9mZnNldExlZnQsIC1kb2MuYm9keS5vZmZzZXRUb3AgKTsKLQkJ
CQotCQkJLy8gQWRkIHRoZSBkb2N1bWVudCBzY3JvbGwgb2Zmc2V0cyBpZiBwb3NpdGlvbiBpcyBm
aXhlZAotCQkJaWYgKCBmaXhlZCApCi0JCQkJYWRkKE1hdGgubWF4KGRvYy5kb2N1bWVudEVsZW1l
bnQuc2Nyb2xsTGVmdCwgZG9jLmJvZHkuc2Nyb2xsTGVmdCksCi0JCQkJCU1hdGgubWF4KGRvYy5k
b2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wLCAgZG9jLmJvZHkuc2Nyb2xsVG9wKSk7Ci0JCX0KLQot
CQkvLyBSZXR1cm4gYW4gb2JqZWN0IHdpdGggdG9wIGFuZCBsZWZ0IHByb3BlcnRpZXMKLQkJcmVz
dWx0cyA9IHsgdG9wOiB0b3AsIGxlZnQ6IGxlZnQgfTsKLQl9Ci0KLQlmdW5jdGlvbiBib3JkZXIo
ZWxlbSkgewotCQlhZGQoIGpRdWVyeS5jdXJDU1MoZWxlbSwgImJvcmRlckxlZnRXaWR0aCIsIHRy
dWUpLCBqUXVlcnkuY3VyQ1NTKGVsZW0sICJib3JkZXJUb3BXaWR0aCIsIHRydWUpICk7Ci0JfQot
Ci0JZnVuY3Rpb24gYWRkKGwsIHQpIHsKLQkJbGVmdCArPSBwYXJzZUludChsKSB8fCAwOwotCQl0
b3AgKz0gcGFyc2VJbnQodCkgfHwgMDsKLQl9Ci0KLQlyZXR1cm4gcmVzdWx0czsKLX07Ci19KSgp
OwpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvd2Via2l0Lm9yZy9wZXJmL3NsaWNrc3BlZWQvZnJhbWV3
b3Jrcy9wcm90b3R5cGUuanMgYi9XZWJzaXRlcy93ZWJraXQub3JnL3BlcmYvc2xpY2tzcGVlZC9m
cmFtZXdvcmtzL3Byb3RvdHlwZS5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjM4
NTUwM2ExYzUyNmQ0ZDEzY2NjNzcwYmNlNzQyMDA4MjZlY2Q2YS4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9XZWJzaXRlcy93ZWJraXQub3JnL3BlcmYvc2xp
Y2tzcGVlZC9mcmFtZXdvcmtzL3Byb3RvdHlwZS5qcworKysgL2Rldi9udWxsCkBAIC0xLDQyMjEg
KzAsMCBAQAotLyogIFByb3RvdHlwZSBKYXZhU2NyaXB0IGZyYW1ld29yaywgdmVyc2lvbiAxLjYu
MC4yCi0gKiAgKGMpIDIwMDUtMjAwOCBTYW0gU3RlcGhlbnNvbgotICoKLSAqICBQcm90b3R5cGUg
aXMgZnJlZWx5IGRpc3RyaWJ1dGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIGFuIE1JVC1zdHlsZSBs
aWNlbnNlLgotICogIEZvciBkZXRhaWxzLCBzZWUgdGhlIFByb3RvdHlwZSB3ZWIgc2l0ZTogaHR0
cDovL3d3dy5wcm90b3R5cGVqcy5vcmcvCi0gKgotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXZh
ciBQcm90b3R5cGUgPSB7Ci0gIFZlcnNpb246ICcxLjYuMC4yJywKLQotICBCcm93c2VyOiB7Ci0g
ICAgSUU6ICAgICAhISh3aW5kb3cuYXR0YWNoRXZlbnQgJiYgIXdpbmRvdy5vcGVyYSksCi0gICAg
T3BlcmE6ICAhIXdpbmRvdy5vcGVyYSwKLSAgICBXZWJLaXQ6IG5hdmlnYXRvci51c2VyQWdlbnQu
aW5kZXhPZignQXBwbGVXZWJLaXQvJykgPiAtMSwKLSAgICBHZWNrbzogIG5hdmlnYXRvci51c2Vy
QWdlbnQuaW5kZXhPZignR2Vja28nKSA+IC0xICYmIG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhP
ZignS0hUTUwnKSA9PSAtMSwKLSAgICBNb2JpbGVTYWZhcmk6ICEhbmF2aWdhdG9yLnVzZXJBZ2Vu
dC5tYXRjaCgvQXBwbGUuKk1vYmlsZS4qU2FmYXJpLykKLSAgfSwKLQotICBCcm93c2VyRmVhdHVy
ZXM6IHsKLSAgICBYUGF0aDogISFkb2N1bWVudC5ldmFsdWF0ZSwKLSAgICBFbGVtZW50RXh0ZW5z
aW9uczogISF3aW5kb3cuSFRNTEVsZW1lbnQsCi0gICAgU3BlY2lmaWNFbGVtZW50RXh0ZW5zaW9u
czoKLSAgICAgIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLl9fcHJvdG9fXyAmJgotICAg
ICAgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykuX19wcm90b19fICE9PQotICAgICAgICBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCdmb3JtJykuX19wcm90b19fCi0gIH0sCi0KLSAgU2NyaXB0
RnJhZ21lbnQ6ICc8c2NyaXB0W14+XSo+KFtcXFNcXHNdKj8pPFwvc2NyaXB0PicsCi0gIEpTT05G
aWx0ZXI6IC9eXC9cKi1zZWN1cmUtKFtcc1xTXSopXCpcL1xzKiQvLAotCi0gIGVtcHR5RnVuY3Rp
b246IGZ1bmN0aW9uKCkgeyB9LAotICBLOiBmdW5jdGlvbih4KSB7IHJldHVybiB4IH0KLX07Ci0K
LWlmIChQcm90b3R5cGUuQnJvd3Nlci5Nb2JpbGVTYWZhcmkpCi0gIFByb3RvdHlwZS5Ccm93c2Vy
RmVhdHVyZXMuU3BlY2lmaWNFbGVtZW50RXh0ZW5zaW9ucyA9IGZhbHNlOwotCi0KLS8qIEJhc2Vk
IG9uIEFsZXggQXJuZWxsJ3MgaW5oZXJpdGFuY2UgaW1wbGVtZW50YXRpb24uICovCi12YXIgQ2xh
c3MgPSB7Ci0gIGNyZWF0ZTogZnVuY3Rpb24oKSB7Ci0gICAgdmFyIHBhcmVudCA9IG51bGwsIHBy
b3BlcnRpZXMgPSAkQShhcmd1bWVudHMpOwotICAgIGlmIChPYmplY3QuaXNGdW5jdGlvbihwcm9w
ZXJ0aWVzWzBdKSkKLSAgICAgIHBhcmVudCA9IHByb3BlcnRpZXMuc2hpZnQoKTsKLQotICAgIGZ1
bmN0aW9uIGtsYXNzKCkgewotICAgICAgdGhpcy5pbml0aWFsaXplLmFwcGx5KHRoaXMsIGFyZ3Vt
ZW50cyk7Ci0gICAgfQotCi0gICAgT2JqZWN0LmV4dGVuZChrbGFzcywgQ2xhc3MuTWV0aG9kcyk7
Ci0gICAga2xhc3Muc3VwZXJjbGFzcyA9IHBhcmVudDsKLSAgICBrbGFzcy5zdWJjbGFzc2VzID0g
W107Ci0KLSAgICBpZiAocGFyZW50KSB7Ci0gICAgICB2YXIgc3ViY2xhc3MgPSBmdW5jdGlvbigp
IHsgfTsKLSAgICAgIHN1YmNsYXNzLnByb3RvdHlwZSA9IHBhcmVudC5wcm90b3R5cGU7Ci0gICAg
ICBrbGFzcy5wcm90b3R5cGUgPSBuZXcgc3ViY2xhc3M7Ci0gICAgICBwYXJlbnQuc3ViY2xhc3Nl
cy5wdXNoKGtsYXNzKTsKLSAgICB9Ci0KLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRp
ZXMubGVuZ3RoOyBpKyspCi0gICAgICBrbGFzcy5hZGRNZXRob2RzKHByb3BlcnRpZXNbaV0pOwot
Ci0gICAgaWYgKCFrbGFzcy5wcm90b3R5cGUuaW5pdGlhbGl6ZSkKLSAgICAgIGtsYXNzLnByb3Rv
dHlwZS5pbml0aWFsaXplID0gUHJvdG90eXBlLmVtcHR5RnVuY3Rpb247Ci0KLSAgICBrbGFzcy5w
cm90b3R5cGUuY29uc3RydWN0b3IgPSBrbGFzczsKLQotICAgIHJldHVybiBrbGFzczsKLSAgfQot
fTsKLQotQ2xhc3MuTWV0aG9kcyA9IHsKLSAgYWRkTWV0aG9kczogZnVuY3Rpb24oc291cmNlKSB7
Ci0gICAgdmFyIGFuY2VzdG9yICAgPSB0aGlzLnN1cGVyY2xhc3MgJiYgdGhpcy5zdXBlcmNsYXNz
LnByb3RvdHlwZTsKLSAgICB2YXIgcHJvcGVydGllcyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7Ci0K
LSAgICBpZiAoIU9iamVjdC5rZXlzKHsgdG9TdHJpbmc6IHRydWUgfSkubGVuZ3RoKQotICAgICAg
cHJvcGVydGllcy5wdXNoKCJ0b1N0cmluZyIsICJ2YWx1ZU9mIik7Ci0KLSAgICBmb3IgKHZhciBp
ID0gMCwgbGVuZ3RoID0gcHJvcGVydGllcy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykgewotICAg
ICAgdmFyIHByb3BlcnR5ID0gcHJvcGVydGllc1tpXSwgdmFsdWUgPSBzb3VyY2VbcHJvcGVydHld
OwotICAgICAgaWYgKGFuY2VzdG9yICYmIE9iamVjdC5pc0Z1bmN0aW9uKHZhbHVlKSAmJgotICAg
ICAgICAgIHZhbHVlLmFyZ3VtZW50TmFtZXMoKS5maXJzdCgpID09ICIkc3VwZXIiKSB7Ci0gICAg
ICAgIHZhciBtZXRob2QgPSB2YWx1ZSwgdmFsdWUgPSBPYmplY3QuZXh0ZW5kKChmdW5jdGlvbiht
KSB7Ci0gICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeyByZXR1cm4gYW5jZXN0b3JbbV0uYXBw
bHkodGhpcywgYXJndW1lbnRzKSB9OwotICAgICAgICB9KShwcm9wZXJ0eSkud3JhcChtZXRob2Qp
LCB7Ci0gICAgICAgICAgdmFsdWVPZjogIGZ1bmN0aW9uKCkgeyByZXR1cm4gbWV0aG9kIH0sCi0g
ICAgICAgICAgdG9TdHJpbmc6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbWV0aG9kLnRvU3RyaW5nKCkg
fQotICAgICAgICB9KTsKLSAgICAgIH0KLSAgICAgIHRoaXMucHJvdG90eXBlW3Byb3BlcnR5XSA9
IHZhbHVlOwotICAgIH0KLQotICAgIHJldHVybiB0aGlzOwotICB9Ci19OwotCi12YXIgQWJzdHJh
Y3QgPSB7IH07Ci0KLU9iamVjdC5leHRlbmQgPSBmdW5jdGlvbihkZXN0aW5hdGlvbiwgc291cmNl
KSB7Ci0gIGZvciAodmFyIHByb3BlcnR5IGluIHNvdXJjZSkKLSAgICBkZXN0aW5hdGlvbltwcm9w
ZXJ0eV0gPSBzb3VyY2VbcHJvcGVydHldOwotICByZXR1cm4gZGVzdGluYXRpb247Ci19OwotCi1P
YmplY3QuZXh0ZW5kKE9iamVjdCwgewotICBpbnNwZWN0OiBmdW5jdGlvbihvYmplY3QpIHsKLSAg
ICB0cnkgewotICAgICAgaWYgKE9iamVjdC5pc1VuZGVmaW5lZChvYmplY3QpKSByZXR1cm4gJ3Vu
ZGVmaW5lZCc7Ci0gICAgICBpZiAob2JqZWN0ID09PSBudWxsKSByZXR1cm4gJ251bGwnOwotICAg
ICAgcmV0dXJuIG9iamVjdC5pbnNwZWN0ID8gb2JqZWN0Lmluc3BlY3QoKSA6IFN0cmluZyhvYmpl
Y3QpOwotICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgIGlmIChlIGluc3RhbmNlb2YgUmFuZ2VFcnJv
cikgcmV0dXJuICcuLi4nOwotICAgICAgdGhyb3cgZTsKLSAgICB9Ci0gIH0sCi0KLSAgdG9KU09O
OiBmdW5jdGlvbihvYmplY3QpIHsKLSAgICB2YXIgdHlwZSA9IHR5cGVvZiBvYmplY3Q7Ci0gICAg
c3dpdGNoICh0eXBlKSB7Ci0gICAgICBjYXNlICd1bmRlZmluZWQnOgotICAgICAgY2FzZSAnZnVu
Y3Rpb24nOgotICAgICAgY2FzZSAndW5rbm93bic6IHJldHVybjsKLSAgICAgIGNhc2UgJ2Jvb2xl
YW4nOiByZXR1cm4gb2JqZWN0LnRvU3RyaW5nKCk7Ci0gICAgfQotCi0gICAgaWYgKG9iamVjdCA9
PT0gbnVsbCkgcmV0dXJuICdudWxsJzsKLSAgICBpZiAob2JqZWN0LnRvSlNPTikgcmV0dXJuIG9i
amVjdC50b0pTT04oKTsKLSAgICBpZiAoT2JqZWN0LmlzRWxlbWVudChvYmplY3QpKSByZXR1cm47
Ci0KLSAgICB2YXIgcmVzdWx0cyA9IFtdOwotICAgIGZvciAodmFyIHByb3BlcnR5IGluIG9iamVj
dCkgewotICAgICAgdmFyIHZhbHVlID0gT2JqZWN0LnRvSlNPTihvYmplY3RbcHJvcGVydHldKTsK
LSAgICAgIGlmICghT2JqZWN0LmlzVW5kZWZpbmVkKHZhbHVlKSkKLSAgICAgICAgcmVzdWx0cy5w
dXNoKHByb3BlcnR5LnRvSlNPTigpICsgJzogJyArIHZhbHVlKTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gJ3snICsgcmVzdWx0cy5qb2luKCcsICcpICsgJ30nOwotICB9LAotCi0gIHRvUXVlcnlTdHJp
bmc6IGZ1bmN0aW9uKG9iamVjdCkgewotICAgIHJldHVybiAkSChvYmplY3QpLnRvUXVlcnlTdHJp
bmcoKTsKLSAgfSwKLQotICB0b0hUTUw6IGZ1bmN0aW9uKG9iamVjdCkgewotICAgIHJldHVybiBv
YmplY3QgJiYgb2JqZWN0LnRvSFRNTCA/IG9iamVjdC50b0hUTUwoKSA6IFN0cmluZy5pbnRlcnBy
ZXQob2JqZWN0KTsKLSAgfSwKLQotICBrZXlzOiBmdW5jdGlvbihvYmplY3QpIHsKLSAgICB2YXIg
a2V5cyA9IFtdOwotICAgIGZvciAodmFyIHByb3BlcnR5IGluIG9iamVjdCkKLSAgICAgIGtleXMu
cHVzaChwcm9wZXJ0eSk7Ci0gICAgcmV0dXJuIGtleXM7Ci0gIH0sCi0KLSAgdmFsdWVzOiBmdW5j
dGlvbihvYmplY3QpIHsKLSAgICB2YXIgdmFsdWVzID0gW107Ci0gICAgZm9yICh2YXIgcHJvcGVy
dHkgaW4gb2JqZWN0KQotICAgICAgdmFsdWVzLnB1c2gob2JqZWN0W3Byb3BlcnR5XSk7Ci0gICAg
cmV0dXJuIHZhbHVlczsKLSAgfSwKLQotICBjbG9uZTogZnVuY3Rpb24ob2JqZWN0KSB7Ci0gICAg
cmV0dXJuIE9iamVjdC5leHRlbmQoeyB9LCBvYmplY3QpOwotICB9LAotCi0gIGlzRWxlbWVudDog
ZnVuY3Rpb24ob2JqZWN0KSB7Ci0gICAgcmV0dXJuIG9iamVjdCAmJiBvYmplY3Qubm9kZVR5cGUg
PT0gMTsKLSAgfSwKLQotICBpc0FycmF5OiBmdW5jdGlvbihvYmplY3QpIHsKLSAgICByZXR1cm4g
b2JqZWN0ICE9IG51bGwgJiYgdHlwZW9mIG9iamVjdCA9PSAib2JqZWN0IiAmJgotICAgICAgJ3Nw
bGljZScgaW4gb2JqZWN0ICYmICdqb2luJyBpbiBvYmplY3Q7Ci0gIH0sCi0KLSAgaXNIYXNoOiBm
dW5jdGlvbihvYmplY3QpIHsKLSAgICByZXR1cm4gb2JqZWN0IGluc3RhbmNlb2YgSGFzaDsKLSAg
fSwKLQotICBpc0Z1bmN0aW9uOiBmdW5jdGlvbihvYmplY3QpIHsKLSAgICByZXR1cm4gdHlwZW9m
IG9iamVjdCA9PSAiZnVuY3Rpb24iOwotICB9LAotCi0gIGlzU3RyaW5nOiBmdW5jdGlvbihvYmpl
Y3QpIHsKLSAgICByZXR1cm4gdHlwZW9mIG9iamVjdCA9PSAic3RyaW5nIjsKLSAgfSwKLQotICBp
c051bWJlcjogZnVuY3Rpb24ob2JqZWN0KSB7Ci0gICAgcmV0dXJuIHR5cGVvZiBvYmplY3QgPT0g
Im51bWJlciI7Ci0gIH0sCi0KLSAgaXNVbmRlZmluZWQ6IGZ1bmN0aW9uKG9iamVjdCkgewotICAg
IHJldHVybiB0eXBlb2Ygb2JqZWN0ID09ICJ1bmRlZmluZWQiOwotICB9Ci19KTsKLQotT2JqZWN0
LmV4dGVuZChGdW5jdGlvbi5wcm90b3R5cGUsIHsKLSAgYXJndW1lbnROYW1lczogZnVuY3Rpb24o
KSB7Ci0gICAgdmFyIG5hbWVzID0gdGhpcy50b1N0cmluZygpLm1hdGNoKC9eW1xzXChdKmZ1bmN0
aW9uW14oXSpcKCguKj8pXCkvKVsxXS5zcGxpdCgiLCIpLmludm9rZSgic3RyaXAiKTsKLSAgICBy
ZXR1cm4gbmFtZXMubGVuZ3RoID09IDEgJiYgIW5hbWVzWzBdID8gW10gOiBuYW1lczsKLSAgfSwK
LQotICBiaW5kOiBmdW5jdGlvbigpIHsKLSAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIgJiYg
T2JqZWN0LmlzVW5kZWZpbmVkKGFyZ3VtZW50c1swXSkpIHJldHVybiB0aGlzOwotICAgIHZhciBf
X21ldGhvZCA9IHRoaXMsIGFyZ3MgPSAkQShhcmd1bWVudHMpLCBvYmplY3QgPSBhcmdzLnNoaWZ0
KCk7Ci0gICAgcmV0dXJuIGZ1bmN0aW9uKCkgewotICAgICAgcmV0dXJuIF9fbWV0aG9kLmFwcGx5
KG9iamVjdCwgYXJncy5jb25jYXQoJEEoYXJndW1lbnRzKSkpOwotICAgIH0KLSAgfSwKLQotICBi
aW5kQXNFdmVudExpc3RlbmVyOiBmdW5jdGlvbigpIHsKLSAgICB2YXIgX19tZXRob2QgPSB0aGlz
LCBhcmdzID0gJEEoYXJndW1lbnRzKSwgb2JqZWN0ID0gYXJncy5zaGlmdCgpOwotICAgIHJldHVy
biBmdW5jdGlvbihldmVudCkgewotICAgICAgcmV0dXJuIF9fbWV0aG9kLmFwcGx5KG9iamVjdCwg
W2V2ZW50IHx8IHdpbmRvdy5ldmVudF0uY29uY2F0KGFyZ3MpKTsKLSAgICB9Ci0gIH0sCi0KLSAg
Y3Vycnk6IGZ1bmN0aW9uKCkgewotICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIHRo
aXM7Ci0gICAgdmFyIF9fbWV0aG9kID0gdGhpcywgYXJncyA9ICRBKGFyZ3VtZW50cyk7Ci0gICAg
cmV0dXJuIGZ1bmN0aW9uKCkgewotICAgICAgcmV0dXJuIF9fbWV0aG9kLmFwcGx5KHRoaXMsIGFy
Z3MuY29uY2F0KCRBKGFyZ3VtZW50cykpKTsKLSAgICB9Ci0gIH0sCi0KLSAgZGVsYXk6IGZ1bmN0
aW9uKCkgewotICAgIHZhciBfX21ldGhvZCA9IHRoaXMsIGFyZ3MgPSAkQShhcmd1bWVudHMpLCB0
aW1lb3V0ID0gYXJncy5zaGlmdCgpICogMTAwMDsKLSAgICByZXR1cm4gd2luZG93LnNldFRpbWVv
dXQoZnVuY3Rpb24oKSB7Ci0gICAgICByZXR1cm4gX19tZXRob2QuYXBwbHkoX19tZXRob2QsIGFy
Z3MpOwotICAgIH0sIHRpbWVvdXQpOwotICB9LAotCi0gIHdyYXA6IGZ1bmN0aW9uKHdyYXBwZXIp
IHsKLSAgICB2YXIgX19tZXRob2QgPSB0aGlzOwotICAgIHJldHVybiBmdW5jdGlvbigpIHsKLSAg
ICAgIHJldHVybiB3cmFwcGVyLmFwcGx5KHRoaXMsIFtfX21ldGhvZC5iaW5kKHRoaXMpXS5jb25j
YXQoJEEoYXJndW1lbnRzKSkpOwotICAgIH0KLSAgfSwKLQotICBtZXRob2RpemU6IGZ1bmN0aW9u
KCkgewotICAgIGlmICh0aGlzLl9tZXRob2RpemVkKSByZXR1cm4gdGhpcy5fbWV0aG9kaXplZDsK
LSAgICB2YXIgX19tZXRob2QgPSB0aGlzOwotICAgIHJldHVybiB0aGlzLl9tZXRob2RpemVkID0g
ZnVuY3Rpb24oKSB7Ci0gICAgICByZXR1cm4gX19tZXRob2QuYXBwbHkobnVsbCwgW3RoaXNdLmNv
bmNhdCgkQShhcmd1bWVudHMpKSk7Ci0gICAgfTsKLSAgfQotfSk7Ci0KLUZ1bmN0aW9uLnByb3Rv
dHlwZS5kZWZlciA9IEZ1bmN0aW9uLnByb3RvdHlwZS5kZWxheS5jdXJyeSgwLjAxKTsKLQotRGF0
ZS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24oKSB7Ci0gIHJldHVybiAnIicgKyB0aGlzLmdl
dFVUQ0Z1bGxZZWFyKCkgKyAnLScgKwotICAgICh0aGlzLmdldFVUQ01vbnRoKCkgKyAxKS50b1Bh
ZGRlZFN0cmluZygyKSArICctJyArCi0gICAgdGhpcy5nZXRVVENEYXRlKCkudG9QYWRkZWRTdHJp
bmcoMikgKyAnVCcgKwotICAgIHRoaXMuZ2V0VVRDSG91cnMoKS50b1BhZGRlZFN0cmluZygyKSAr
ICc6JyArCi0gICAgdGhpcy5nZXRVVENNaW51dGVzKCkudG9QYWRkZWRTdHJpbmcoMikgKyAnOicg
KwotICAgIHRoaXMuZ2V0VVRDU2Vjb25kcygpLnRvUGFkZGVkU3RyaW5nKDIpICsgJ1oiJzsKLX07
Ci0KLXZhciBUcnkgPSB7Ci0gIHRoZXNlOiBmdW5jdGlvbigpIHsKLSAgICB2YXIgcmV0dXJuVmFs
dWU7Ci0KLSAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8
IGxlbmd0aDsgaSsrKSB7Ci0gICAgICB2YXIgbGFtYmRhID0gYXJndW1lbnRzW2ldOwotICAgICAg
dHJ5IHsKLSAgICAgICAgcmV0dXJuVmFsdWUgPSBsYW1iZGEoKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgICB9IGNhdGNoIChlKSB7IH0KLSAgICB9Ci0KLSAgICByZXR1cm4gcmV0dXJuVmFsdWU7Ci0g
IH0KLX07Ci0KLVJlZ0V4cC5wcm90b3R5cGUubWF0Y2ggPSBSZWdFeHAucHJvdG90eXBlLnRlc3Q7
Ci0KLVJlZ0V4cC5lc2NhcGUgPSBmdW5jdGlvbihzdHIpIHsKLSAgcmV0dXJuIFN0cmluZyhzdHIp
LnJlcGxhY2UoLyhbLiorP149IToke30oKXxbXF1cL1xcXSkvZywgJ1xcJDEnKTsKLX07Ci0KLS8q
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0qLwotCi12YXIgUGVyaW9kaWNhbEV4ZWN1dGVyID0gQ2xhc3MuY3Jl
YXRlKHsKLSAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oY2FsbGJhY2ssIGZyZXF1ZW5jeSkgewotICAg
IHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFjazsKLSAgICB0aGlzLmZyZXF1ZW5jeSA9IGZyZXF1ZW5j
eTsKLSAgICB0aGlzLmN1cnJlbnRseUV4ZWN1dGluZyA9IGZhbHNlOwotCi0gICAgdGhpcy5yZWdp
c3RlckNhbGxiYWNrKCk7Ci0gIH0sCi0KLSAgcmVnaXN0ZXJDYWxsYmFjazogZnVuY3Rpb24oKSB7
Ci0gICAgdGhpcy50aW1lciA9IHNldEludGVydmFsKHRoaXMub25UaW1lckV2ZW50LmJpbmQodGhp
cyksIHRoaXMuZnJlcXVlbmN5ICogMTAwMCk7Ci0gIH0sCi0KLSAgZXhlY3V0ZTogZnVuY3Rpb24o
KSB7Ci0gICAgdGhpcy5jYWxsYmFjayh0aGlzKTsKLSAgfSwKLQotICBzdG9wOiBmdW5jdGlvbigp
IHsKLSAgICBpZiAoIXRoaXMudGltZXIpIHJldHVybjsKLSAgICBjbGVhckludGVydmFsKHRoaXMu
dGltZXIpOwotICAgIHRoaXMudGltZXIgPSBudWxsOwotICB9LAotCi0gIG9uVGltZXJFdmVudDog
ZnVuY3Rpb24oKSB7Ci0gICAgaWYgKCF0aGlzLmN1cnJlbnRseUV4ZWN1dGluZykgewotICAgICAg
dHJ5IHsKLSAgICAgICAgdGhpcy5jdXJyZW50bHlFeGVjdXRpbmcgPSB0cnVlOwotICAgICAgICB0
aGlzLmV4ZWN1dGUoKTsKLSAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgIHRoaXMuY3VycmVudGx5
RXhlY3V0aW5nID0gZmFsc2U7Ci0gICAgICB9Ci0gICAgfQotICB9Ci19KTsKLU9iamVjdC5leHRl
bmQoU3RyaW5nLCB7Ci0gIGludGVycHJldDogZnVuY3Rpb24odmFsdWUpIHsKLSAgICByZXR1cm4g
dmFsdWUgPT0gbnVsbCA/ICcnIDogU3RyaW5nKHZhbHVlKTsKLSAgfSwKLSAgc3BlY2lhbENoYXI6
IHsKLSAgICAnXGInOiAnXFxiJywKLSAgICAnXHQnOiAnXFx0JywKLSAgICAnXG4nOiAnXFxuJywK
LSAgICAnXGYnOiAnXFxmJywKLSAgICAnXHInOiAnXFxyJywKLSAgICAnXFwnOiAnXFxcXCcKLSAg
fQotfSk7Ci0KLU9iamVjdC5leHRlbmQoU3RyaW5nLnByb3RvdHlwZSwgewotICBnc3ViOiBmdW5j
dGlvbihwYXR0ZXJuLCByZXBsYWNlbWVudCkgewotICAgIHZhciByZXN1bHQgPSAnJywgc291cmNl
ID0gdGhpcywgbWF0Y2g7Ci0gICAgcmVwbGFjZW1lbnQgPSBhcmd1bWVudHMuY2FsbGVlLnByZXBh
cmVSZXBsYWNlbWVudChyZXBsYWNlbWVudCk7Ci0KLSAgICB3aGlsZSAoc291cmNlLmxlbmd0aCA+
IDApIHsKLSAgICAgIGlmIChtYXRjaCA9IHNvdXJjZS5tYXRjaChwYXR0ZXJuKSkgewotICAgICAg
ICByZXN1bHQgKz0gc291cmNlLnNsaWNlKDAsIG1hdGNoLmluZGV4KTsKLSAgICAgICAgcmVzdWx0
ICs9IFN0cmluZy5pbnRlcnByZXQocmVwbGFjZW1lbnQobWF0Y2gpKTsKLSAgICAgICAgc291cmNl
ICA9IHNvdXJjZS5zbGljZShtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aCk7Ci0gICAgICB9
IGVsc2UgewotICAgICAgICByZXN1bHQgKz0gc291cmNlLCBzb3VyY2UgPSAnJzsKLSAgICAgIH0K
LSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfSwKLQotICBzdWI6IGZ1bmN0aW9uKHBhdHRl
cm4sIHJlcGxhY2VtZW50LCBjb3VudCkgewotICAgIHJlcGxhY2VtZW50ID0gdGhpcy5nc3ViLnBy
ZXBhcmVSZXBsYWNlbWVudChyZXBsYWNlbWVudCk7Ci0gICAgY291bnQgPSBPYmplY3QuaXNVbmRl
ZmluZWQoY291bnQpID8gMSA6IGNvdW50OwotCi0gICAgcmV0dXJuIHRoaXMuZ3N1YihwYXR0ZXJu
LCBmdW5jdGlvbihtYXRjaCkgewotICAgICAgaWYgKC0tY291bnQgPCAwKSByZXR1cm4gbWF0Y2hb
MF07Ci0gICAgICByZXR1cm4gcmVwbGFjZW1lbnQobWF0Y2gpOwotICAgIH0pOwotICB9LAotCi0g
IHNjYW46IGZ1bmN0aW9uKHBhdHRlcm4sIGl0ZXJhdG9yKSB7Ci0gICAgdGhpcy5nc3ViKHBhdHRl
cm4sIGl0ZXJhdG9yKTsKLSAgICByZXR1cm4gU3RyaW5nKHRoaXMpOwotICB9LAotCi0gIHRydW5j
YXRlOiBmdW5jdGlvbihsZW5ndGgsIHRydW5jYXRpb24pIHsKLSAgICBsZW5ndGggPSBsZW5ndGgg
fHwgMzA7Ci0gICAgdHJ1bmNhdGlvbiA9IE9iamVjdC5pc1VuZGVmaW5lZCh0cnVuY2F0aW9uKSA/
ICcuLi4nIDogdHJ1bmNhdGlvbjsKLSAgICByZXR1cm4gdGhpcy5sZW5ndGggPiBsZW5ndGggPwot
ICAgICAgdGhpcy5zbGljZSgwLCBsZW5ndGggLSB0cnVuY2F0aW9uLmxlbmd0aCkgKyB0cnVuY2F0
aW9uIDogU3RyaW5nKHRoaXMpOwotICB9LAotCi0gIHN0cmlwOiBmdW5jdGlvbigpIHsKLSAgICBy
ZXR1cm4gdGhpcy5yZXBsYWNlKC9eXHMrLywgJycpLnJlcGxhY2UoL1xzKyQvLCAnJyk7Ci0gIH0s
Ci0KLSAgc3RyaXBUYWdzOiBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gdGhpcy5yZXBsYWNlKC88
XC8/W14+XSs+L2dpLCAnJyk7Ci0gIH0sCi0KLSAgc3RyaXBTY3JpcHRzOiBmdW5jdGlvbigpIHsK
LSAgICByZXR1cm4gdGhpcy5yZXBsYWNlKG5ldyBSZWdFeHAoUHJvdG90eXBlLlNjcmlwdEZyYWdt
ZW50LCAnaW1nJyksICcnKTsKLSAgfSwKLQotICBleHRyYWN0U2NyaXB0czogZnVuY3Rpb24oKSB7
Ci0gICAgdmFyIG1hdGNoQWxsID0gbmV3IFJlZ0V4cChQcm90b3R5cGUuU2NyaXB0RnJhZ21lbnQs
ICdpbWcnKTsKLSAgICB2YXIgbWF0Y2hPbmUgPSBuZXcgUmVnRXhwKFByb3RvdHlwZS5TY3JpcHRG
cmFnbWVudCwgJ2ltJyk7Ci0gICAgcmV0dXJuICh0aGlzLm1hdGNoKG1hdGNoQWxsKSB8fCBbXSku
bWFwKGZ1bmN0aW9uKHNjcmlwdFRhZykgewotICAgICAgcmV0dXJuIChzY3JpcHRUYWcubWF0Y2go
bWF0Y2hPbmUpIHx8IFsnJywgJyddKVsxXTsKLSAgICB9KTsKLSAgfSwKLQotICBldmFsU2NyaXB0
czogZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIHRoaXMuZXh0cmFjdFNjcmlwdHMoKS5tYXAoZnVu
Y3Rpb24oc2NyaXB0KSB7IHJldHVybiBldmFsKHNjcmlwdCkgfSk7Ci0gIH0sCi0KLSAgZXNjYXBl
SFRNTDogZnVuY3Rpb24oKSB7Ci0gICAgdmFyIHNlbGYgPSBhcmd1bWVudHMuY2FsbGVlOwotICAg
IHNlbGYudGV4dC5kYXRhID0gdGhpczsKLSAgICByZXR1cm4gc2VsZi5kaXYuaW5uZXJIVE1MOwot
ICB9LAotCi0gIHVuZXNjYXBlSFRNTDogZnVuY3Rpb24oKSB7Ci0gICAgdmFyIGRpdiA9IG5ldyBF
bGVtZW50KCdkaXYnKTsKLSAgICBkaXYuaW5uZXJIVE1MID0gdGhpcy5zdHJpcFRhZ3MoKTsKLSAg
ICByZXR1cm4gZGl2LmNoaWxkTm9kZXNbMF0gPyAoZGl2LmNoaWxkTm9kZXMubGVuZ3RoID4gMSA/
Ci0gICAgICAkQShkaXYuY2hpbGROb2RlcykuaW5qZWN0KCcnLCBmdW5jdGlvbihtZW1vLCBub2Rl
KSB7IHJldHVybiBtZW1vK25vZGUubm9kZVZhbHVlIH0pIDoKLSAgICAgIGRpdi5jaGlsZE5vZGVz
WzBdLm5vZGVWYWx1ZSkgOiAnJzsKLSAgfSwKLQotICB0b1F1ZXJ5UGFyYW1zOiBmdW5jdGlvbihz
ZXBhcmF0b3IpIHsKLSAgICB2YXIgbWF0Y2ggPSB0aGlzLnN0cmlwKCkubWF0Y2goLyhbXj8jXSop
KCMuKik/JC8pOwotICAgIGlmICghbWF0Y2gpIHJldHVybiB7IH07Ci0KLSAgICByZXR1cm4gbWF0
Y2hbMV0uc3BsaXQoc2VwYXJhdG9yIHx8ICcmJykuaW5qZWN0KHsgfSwgZnVuY3Rpb24oaGFzaCwg
cGFpcikgewotICAgICAgaWYgKChwYWlyID0gcGFpci5zcGxpdCgnPScpKVswXSkgewotICAgICAg
ICB2YXIga2V5ID0gZGVjb2RlVVJJQ29tcG9uZW50KHBhaXIuc2hpZnQoKSk7Ci0gICAgICAgIHZh
ciB2YWx1ZSA9IHBhaXIubGVuZ3RoID4gMSA/IHBhaXIuam9pbignPScpIDogcGFpclswXTsKLSAg
ICAgICAgaWYgKHZhbHVlICE9IHVuZGVmaW5lZCkgdmFsdWUgPSBkZWNvZGVVUklDb21wb25lbnQo
dmFsdWUpOwotCi0gICAgICAgIGlmIChrZXkgaW4gaGFzaCkgewotICAgICAgICAgIGlmICghT2Jq
ZWN0LmlzQXJyYXkoaGFzaFtrZXldKSkgaGFzaFtrZXldID0gW2hhc2hba2V5XV07Ci0gICAgICAg
ICAgaGFzaFtrZXldLnB1c2godmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaGFzaFtr
ZXldID0gdmFsdWU7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gaGFzaDsKLSAgICB9KTsKLSAgfSwK
LQotICB0b0FycmF5OiBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gdGhpcy5zcGxpdCgnJyk7Ci0g
IH0sCi0KLSAgc3VjYzogZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIHRoaXMuc2xpY2UoMCwgdGhp
cy5sZW5ndGggLSAxKSArCi0gICAgICBTdHJpbmcuZnJvbUNoYXJDb2RlKHRoaXMuY2hhckNvZGVB
dCh0aGlzLmxlbmd0aCAtIDEpICsgMSk7Ci0gIH0sCi0KLSAgdGltZXM6IGZ1bmN0aW9uKGNvdW50
KSB7Ci0gICAgcmV0dXJuIGNvdW50IDwgMSA/ICcnIDogbmV3IEFycmF5KGNvdW50ICsgMSkuam9p
bih0aGlzKTsKLSAgfSwKLQotICBjYW1lbGl6ZTogZnVuY3Rpb24oKSB7Ci0gICAgdmFyIHBhcnRz
ID0gdGhpcy5zcGxpdCgnLScpLCBsZW4gPSBwYXJ0cy5sZW5ndGg7Ci0gICAgaWYgKGxlbiA9PSAx
KSByZXR1cm4gcGFydHNbMF07Ci0KLSAgICB2YXIgY2FtZWxpemVkID0gdGhpcy5jaGFyQXQoMCkg
PT0gJy0nCi0gICAgICA/IHBhcnRzWzBdLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgcGFydHNb
MF0uc3Vic3RyaW5nKDEpCi0gICAgICA6IHBhcnRzWzBdOwotCi0gICAgZm9yICh2YXIgaSA9IDE7
IGkgPCBsZW47IGkrKykKLSAgICAgIGNhbWVsaXplZCArPSBwYXJ0c1tpXS5jaGFyQXQoMCkudG9V
cHBlckNhc2UoKSArIHBhcnRzW2ldLnN1YnN0cmluZygxKTsKLQotICAgIHJldHVybiBjYW1lbGl6
ZWQ7Ci0gIH0sCi0KLSAgY2FwaXRhbGl6ZTogZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIHRoaXMu
Y2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB0aGlzLnN1YnN0cmluZygxKS50b0xvd2VyQ2FzZSgp
OwotICB9LAotCi0gIHVuZGVyc2NvcmU6IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiB0aGlzLmdz
dWIoLzo6LywgJy8nKS5nc3ViKC8oW0EtWl0rKShbQS1aXVthLXpdKS8sJyN7MX1fI3syfScpLmdz
dWIoLyhbYS16XGRdKShbQS1aXSkvLCcjezF9XyN7Mn0nKS5nc3ViKC8tLywnXycpLnRvTG93ZXJD
YXNlKCk7Ci0gIH0sCi0KLSAgZGFzaGVyaXplOiBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gdGhp
cy5nc3ViKC9fLywnLScpOwotICB9LAotCi0gIGluc3BlY3Q6IGZ1bmN0aW9uKHVzZURvdWJsZVF1
b3RlcykgewotICAgIHZhciBlc2NhcGVkU3RyaW5nID0gdGhpcy5nc3ViKC9bXHgwMC1ceDFmXFxd
LywgZnVuY3Rpb24obWF0Y2gpIHsKLSAgICAgIHZhciBjaGFyYWN0ZXIgPSBTdHJpbmcuc3BlY2lh
bENoYXJbbWF0Y2hbMF1dOwotICAgICAgcmV0dXJuIGNoYXJhY3RlciA/IGNoYXJhY3RlciA6ICdc
XHUwMCcgKyBtYXRjaFswXS5jaGFyQ29kZUF0KCkudG9QYWRkZWRTdHJpbmcoMiwgMTYpOwotICAg
IH0pOwotICAgIGlmICh1c2VEb3VibGVRdW90ZXMpIHJldHVybiAnIicgKyBlc2NhcGVkU3RyaW5n
LnJlcGxhY2UoLyIvZywgJ1xcIicpICsgJyInOwotICAgIHJldHVybiAiJyIgKyBlc2NhcGVkU3Ry
aW5nLnJlcGxhY2UoLycvZywgJ1xcXCcnKSArICInIjsKLSAgfSwKLQotICB0b0pTT046IGZ1bmN0
aW9uKCkgewotICAgIHJldHVybiB0aGlzLmluc3BlY3QodHJ1ZSk7Ci0gIH0sCi0KLSAgdW5maWx0
ZXJKU09OOiBmdW5jdGlvbihmaWx0ZXIpIHsKLSAgICByZXR1cm4gdGhpcy5zdWIoZmlsdGVyIHx8
IFByb3RvdHlwZS5KU09ORmlsdGVyLCAnI3sxfScpOwotICB9LAotCi0gIGlzSlNPTjogZnVuY3Rp
b24oKSB7Ci0gICAgdmFyIHN0ciA9IHRoaXM7Ci0gICAgaWYgKHN0ci5ibGFuaygpKSByZXR1cm4g
ZmFsc2U7Ci0gICAgc3RyID0gdGhpcy5yZXBsYWNlKC9cXC4vZywgJ0AnKS5yZXBsYWNlKC8iW14i
XFxcblxyXSoiL2csICcnKTsKLSAgICByZXR1cm4gKC9eWyw6e31cW1xdMC05LlwtK0VhZWZsbnIt
dSBcblxyXHRdKiQvKS50ZXN0KHN0cik7Ci0gIH0sCi0KLSAgZXZhbEpTT046IGZ1bmN0aW9uKHNh
bml0aXplKSB7Ci0gICAgdmFyIGpzb24gPSB0aGlzLnVuZmlsdGVySlNPTigpOwotICAgIHRyeSB7
Ci0gICAgICBpZiAoIXNhbml0aXplIHx8IGpzb24uaXNKU09OKCkpIHJldHVybiBldmFsKCcoJyAr
IGpzb24gKyAnKScpOwotICAgIH0gY2F0Y2ggKGUpIHsgfQotICAgIHRocm93IG5ldyBTeW50YXhF
cnJvcignQmFkbHkgZm9ybWVkIEpTT04gc3RyaW5nOiAnICsgdGhpcy5pbnNwZWN0KCkpOwotICB9
LAotCi0gIGluY2x1ZGU6IGZ1bmN0aW9uKHBhdHRlcm4pIHsKLSAgICByZXR1cm4gdGhpcy5pbmRl
eE9mKHBhdHRlcm4pID4gLTE7Ci0gIH0sCi0KLSAgc3RhcnRzV2l0aDogZnVuY3Rpb24ocGF0dGVy
bikgewotICAgIHJldHVybiB0aGlzLmluZGV4T2YocGF0dGVybikgPT09IDA7Ci0gIH0sCi0KLSAg
ZW5kc1dpdGg6IGZ1bmN0aW9uKHBhdHRlcm4pIHsKLSAgICB2YXIgZCA9IHRoaXMubGVuZ3RoIC0g
cGF0dGVybi5sZW5ndGg7Ci0gICAgcmV0dXJuIGQgPj0gMCAmJiB0aGlzLmxhc3RJbmRleE9mKHBh
dHRlcm4pID09PSBkOwotICB9LAotCi0gIGVtcHR5OiBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4g
dGhpcyA9PSAnJzsKLSAgfSwKLQotICBibGFuazogZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIC9e
XHMqJC8udGVzdCh0aGlzKTsKLSAgfSwKLQotICBpbnRlcnBvbGF0ZTogZnVuY3Rpb24ob2JqZWN0
LCBwYXR0ZXJuKSB7Ci0gICAgcmV0dXJuIG5ldyBUZW1wbGF0ZSh0aGlzLCBwYXR0ZXJuKS5ldmFs
dWF0ZShvYmplY3QpOwotICB9Ci19KTsKLQotaWYgKFByb3RvdHlwZS5Ccm93c2VyLldlYktpdCB8
fCBQcm90b3R5cGUuQnJvd3Nlci5JRSkgT2JqZWN0LmV4dGVuZChTdHJpbmcucHJvdG90eXBlLCB7
Ci0gIGVzY2FwZUhUTUw6IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiB0aGlzLnJlcGxhY2UoLyYv
ZywnJmFtcDsnKS5yZXBsYWNlKC88L2csJyZsdDsnKS5yZXBsYWNlKC8+L2csJyZndDsnKTsKLSAg
fSwKLSAgdW5lc2NhcGVIVE1MOiBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gdGhpcy5yZXBsYWNl
KC8mYW1wOy9nLCcmJykucmVwbGFjZSgvJmx0Oy9nLCc8JykucmVwbGFjZSgvJmd0Oy9nLCc+Jyk7
Ci0gIH0KLX0pOwotCi1TdHJpbmcucHJvdG90eXBlLmdzdWIucHJlcGFyZVJlcGxhY2VtZW50ID0g
ZnVuY3Rpb24ocmVwbGFjZW1lbnQpIHsKLSAgaWYgKE9iamVjdC5pc0Z1bmN0aW9uKHJlcGxhY2Vt
ZW50KSkgcmV0dXJuIHJlcGxhY2VtZW50OwotICB2YXIgdGVtcGxhdGUgPSBuZXcgVGVtcGxhdGUo
cmVwbGFjZW1lbnQpOwotICByZXR1cm4gZnVuY3Rpb24obWF0Y2gpIHsgcmV0dXJuIHRlbXBsYXRl
LmV2YWx1YXRlKG1hdGNoKSB9OwotfTsKLQotU3RyaW5nLnByb3RvdHlwZS5wYXJzZVF1ZXJ5ID0g
U3RyaW5nLnByb3RvdHlwZS50b1F1ZXJ5UGFyYW1zOwotCi1PYmplY3QuZXh0ZW5kKFN0cmluZy5w
cm90b3R5cGUuZXNjYXBlSFRNTCwgewotICBkaXY6ICBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdk
aXYnKSwKLSAgdGV4dDogZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJycpCi19KTsKLQotd2l0aCAo
U3RyaW5nLnByb3RvdHlwZS5lc2NhcGVIVE1MKSBkaXYuYXBwZW5kQ2hpbGQodGV4dCk7Ci0KLXZh
ciBUZW1wbGF0ZSA9IENsYXNzLmNyZWF0ZSh7Ci0gIGluaXRpYWxpemU6IGZ1bmN0aW9uKHRlbXBs
YXRlLCBwYXR0ZXJuKSB7Ci0gICAgdGhpcy50ZW1wbGF0ZSA9IHRlbXBsYXRlLnRvU3RyaW5nKCk7
Ci0gICAgdGhpcy5wYXR0ZXJuID0gcGF0dGVybiB8fCBUZW1wbGF0ZS5QYXR0ZXJuOwotICB9LAot
Ci0gIGV2YWx1YXRlOiBmdW5jdGlvbihvYmplY3QpIHsKLSAgICBpZiAoT2JqZWN0LmlzRnVuY3Rp
b24ob2JqZWN0LnRvVGVtcGxhdGVSZXBsYWNlbWVudHMpKQotICAgICAgb2JqZWN0ID0gb2JqZWN0
LnRvVGVtcGxhdGVSZXBsYWNlbWVudHMoKTsKLQotICAgIHJldHVybiB0aGlzLnRlbXBsYXRlLmdz
dWIodGhpcy5wYXR0ZXJuLCBmdW5jdGlvbihtYXRjaCkgewotICAgICAgaWYgKG9iamVjdCA9PSBu
dWxsKSByZXR1cm4gJyc7Ci0KLSAgICAgIHZhciBiZWZvcmUgPSBtYXRjaFsxXSB8fCAnJzsKLSAg
ICAgIGlmIChiZWZvcmUgPT0gJ1xcJykgcmV0dXJuIG1hdGNoWzJdOwotCi0gICAgICB2YXIgY3R4
ID0gb2JqZWN0LCBleHByID0gbWF0Y2hbM107Ci0gICAgICB2YXIgcGF0dGVybiA9IC9eKFteLltd
K3xcWygoPzouKj9bXlxcXSk/KVxdKShcLnxcW3wkKS87Ci0gICAgICBtYXRjaCA9IHBhdHRlcm4u
ZXhlYyhleHByKTsKLSAgICAgIGlmIChtYXRjaCA9PSBudWxsKSByZXR1cm4gYmVmb3JlOwotCi0g
ICAgICB3aGlsZSAobWF0Y2ggIT0gbnVsbCkgewotICAgICAgICB2YXIgY29tcCA9IG1hdGNoWzFd
LnN0YXJ0c1dpdGgoJ1snKSA/IG1hdGNoWzJdLmdzdWIoJ1xcXFxdJywgJ10nKSA6IG1hdGNoWzFd
OwotICAgICAgICBjdHggPSBjdHhbY29tcF07Ci0gICAgICAgIGlmIChudWxsID09IGN0eCB8fCAn
JyA9PSBtYXRjaFszXSkgYnJlYWs7Ci0gICAgICAgIGV4cHIgPSBleHByLnN1YnN0cmluZygnWycg
PT0gbWF0Y2hbM10gPyBtYXRjaFsxXS5sZW5ndGggOiBtYXRjaFswXS5sZW5ndGgpOwotICAgICAg
ICBtYXRjaCA9IHBhdHRlcm4uZXhlYyhleHByKTsKLSAgICAgIH0KLQotICAgICAgcmV0dXJuIGJl
Zm9yZSArIFN0cmluZy5pbnRlcnByZXQoY3R4KTsKLSAgICB9KTsKLSAgfQotfSk7Ci1UZW1wbGF0
ZS5QYXR0ZXJuID0gLyhefC58XHJ8XG4pKCNceyguKj8pXH0pLzsKLQotdmFyICRicmVhayA9IHsg
fTsKLQotdmFyIEVudW1lcmFibGUgPSB7Ci0gIGVhY2g6IGZ1bmN0aW9uKGl0ZXJhdG9yLCBjb250
ZXh0KSB7Ci0gICAgdmFyIGluZGV4ID0gMDsKLSAgICBpdGVyYXRvciA9IGl0ZXJhdG9yLmJpbmQo
Y29udGV4dCk7Ci0gICAgdHJ5IHsKLSAgICAgIHRoaXMuX2VhY2goZnVuY3Rpb24odmFsdWUpIHsK
LSAgICAgICAgaXRlcmF0b3IodmFsdWUsIGluZGV4KyspOwotICAgICAgfSk7Ci0gICAgfSBjYXRj
aCAoZSkgewotICAgICAgaWYgKGUgIT0gJGJyZWFrKSB0aHJvdyBlOwotICAgIH0KLSAgICByZXR1
cm4gdGhpczsKLSAgfSwKLQotICBlYWNoU2xpY2U6IGZ1bmN0aW9uKG51bWJlciwgaXRlcmF0b3Is
IGNvbnRleHQpIHsKLSAgICBpdGVyYXRvciA9IGl0ZXJhdG9yID8gaXRlcmF0b3IuYmluZChjb250
ZXh0KSA6IFByb3RvdHlwZS5LOwotICAgIHZhciBpbmRleCA9IC1udW1iZXIsIHNsaWNlcyA9IFtd
LCBhcnJheSA9IHRoaXMudG9BcnJheSgpOwotICAgIHdoaWxlICgoaW5kZXggKz0gbnVtYmVyKSA8
IGFycmF5Lmxlbmd0aCkKLSAgICAgIHNsaWNlcy5wdXNoKGFycmF5LnNsaWNlKGluZGV4LCBpbmRl
eCtudW1iZXIpKTsKLSAgICByZXR1cm4gc2xpY2VzLmNvbGxlY3QoaXRlcmF0b3IsIGNvbnRleHQp
OwotICB9LAotCi0gIGFsbDogZnVuY3Rpb24oaXRlcmF0b3IsIGNvbnRleHQpIHsKLSAgICBpdGVy
YXRvciA9IGl0ZXJhdG9yID8gaXRlcmF0b3IuYmluZChjb250ZXh0KSA6IFByb3RvdHlwZS5LOwot
ICAgIHZhciByZXN1bHQgPSB0cnVlOwotICAgIHRoaXMuZWFjaChmdW5jdGlvbih2YWx1ZSwgaW5k
ZXgpIHsKLSAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiAhIWl0ZXJhdG9yKHZhbHVlLCBpbmRleCk7
Ci0gICAgICBpZiAoIXJlc3VsdCkgdGhyb3cgJGJyZWFrOwotICAgIH0pOwotICAgIHJldHVybiBy
ZXN1bHQ7Ci0gIH0sCi0KLSAgYW55OiBmdW5jdGlvbihpdGVyYXRvciwgY29udGV4dCkgewotICAg
IGl0ZXJhdG9yID0gaXRlcmF0b3IgPyBpdGVyYXRvci5iaW5kKGNvbnRleHQpIDogUHJvdG90eXBl
Lks7Ci0gICAgdmFyIHJlc3VsdCA9IGZhbHNlOwotICAgIHRoaXMuZWFjaChmdW5jdGlvbih2YWx1
ZSwgaW5kZXgpIHsKLSAgICAgIGlmIChyZXN1bHQgPSAhIWl0ZXJhdG9yKHZhbHVlLCBpbmRleCkp
Ci0gICAgICAgIHRocm93ICRicmVhazsKLSAgICB9KTsKLSAgICByZXR1cm4gcmVzdWx0OwotICB9
LAotCi0gIGNvbGxlY3Q6IGZ1bmN0aW9uKGl0ZXJhdG9yLCBjb250ZXh0KSB7Ci0gICAgaXRlcmF0
b3IgPSBpdGVyYXRvciA/IGl0ZXJhdG9yLmJpbmQoY29udGV4dCkgOiBQcm90b3R5cGUuSzsKLSAg
ICB2YXIgcmVzdWx0cyA9IFtdOwotICAgIHRoaXMuZWFjaChmdW5jdGlvbih2YWx1ZSwgaW5kZXgp
IHsKLSAgICAgIHJlc3VsdHMucHVzaChpdGVyYXRvcih2YWx1ZSwgaW5kZXgpKTsKLSAgICB9KTsK
LSAgICByZXR1cm4gcmVzdWx0czsKLSAgfSwKLQotICBkZXRlY3Q6IGZ1bmN0aW9uKGl0ZXJhdG9y
LCBjb250ZXh0KSB7Ci0gICAgaXRlcmF0b3IgPSBpdGVyYXRvci5iaW5kKGNvbnRleHQpOwotICAg
IHZhciByZXN1bHQ7Ci0gICAgdGhpcy5lYWNoKGZ1bmN0aW9uKHZhbHVlLCBpbmRleCkgewotICAg
ICAgaWYgKGl0ZXJhdG9yKHZhbHVlLCBpbmRleCkpIHsKLSAgICAgICAgcmVzdWx0ID0gdmFsdWU7
Ci0gICAgICAgIHRocm93ICRicmVhazsKLSAgICAgIH0KLSAgICB9KTsKLSAgICByZXR1cm4gcmVz
dWx0OwotICB9LAotCi0gIGZpbmRBbGw6IGZ1bmN0aW9uKGl0ZXJhdG9yLCBjb250ZXh0KSB7Ci0g
ICAgaXRlcmF0b3IgPSBpdGVyYXRvci5iaW5kKGNvbnRleHQpOwotICAgIHZhciByZXN1bHRzID0g
W107Ci0gICAgdGhpcy5lYWNoKGZ1bmN0aW9uKHZhbHVlLCBpbmRleCkgewotICAgICAgaWYgKGl0
ZXJhdG9yKHZhbHVlLCBpbmRleCkpCi0gICAgICAgIHJlc3VsdHMucHVzaCh2YWx1ZSk7Ci0gICAg
fSk7Ci0gICAgcmV0dXJuIHJlc3VsdHM7Ci0gIH0sCi0KLSAgZ3JlcDogZnVuY3Rpb24oZmlsdGVy
LCBpdGVyYXRvciwgY29udGV4dCkgewotICAgIGl0ZXJhdG9yID0gaXRlcmF0b3IgPyBpdGVyYXRv
ci5iaW5kKGNvbnRleHQpIDogUHJvdG90eXBlLks7Ci0gICAgdmFyIHJlc3VsdHMgPSBbXTsKLQot
ICAgIGlmIChPYmplY3QuaXNTdHJpbmcoZmlsdGVyKSkKLSAgICAgIGZpbHRlciA9IG5ldyBSZWdF
eHAoZmlsdGVyKTsKLQotICAgIHRoaXMuZWFjaChmdW5jdGlvbih2YWx1ZSwgaW5kZXgpIHsKLSAg
ICAgIGlmIChmaWx0ZXIubWF0Y2godmFsdWUpKQotICAgICAgICByZXN1bHRzLnB1c2goaXRlcmF0
b3IodmFsdWUsIGluZGV4KSk7Ci0gICAgfSk7Ci0gICAgcmV0dXJuIHJlc3VsdHM7Ci0gIH0sCi0K
LSAgaW5jbHVkZTogZnVuY3Rpb24ob2JqZWN0KSB7Ci0gICAgaWYgKE9iamVjdC5pc0Z1bmN0aW9u
KHRoaXMuaW5kZXhPZikpCi0gICAgICBpZiAodGhpcy5pbmRleE9mKG9iamVjdCkgIT0gLTEpIHJl
dHVybiB0cnVlOwotCi0gICAgdmFyIGZvdW5kID0gZmFsc2U7Ci0gICAgdGhpcy5lYWNoKGZ1bmN0
aW9uKHZhbHVlKSB7Ci0gICAgICBpZiAodmFsdWUgPT0gb2JqZWN0KSB7Ci0gICAgICAgIGZvdW5k
ID0gdHJ1ZTsKLSAgICAgICAgdGhyb3cgJGJyZWFrOwotICAgICAgfQotICAgIH0pOwotICAgIHJl
dHVybiBmb3VuZDsKLSAgfSwKLQotICBpbkdyb3Vwc09mOiBmdW5jdGlvbihudW1iZXIsIGZpbGxX
aXRoKSB7Ci0gICAgZmlsbFdpdGggPSBPYmplY3QuaXNVbmRlZmluZWQoZmlsbFdpdGgpID8gbnVs
bCA6IGZpbGxXaXRoOwotICAgIHJldHVybiB0aGlzLmVhY2hTbGljZShudW1iZXIsIGZ1bmN0aW9u
KHNsaWNlKSB7Ci0gICAgICB3aGlsZShzbGljZS5sZW5ndGggPCBudW1iZXIpIHNsaWNlLnB1c2go
ZmlsbFdpdGgpOwotICAgICAgcmV0dXJuIHNsaWNlOwotICAgIH0pOwotICB9LAotCi0gIGluamVj
dDogZnVuY3Rpb24obWVtbywgaXRlcmF0b3IsIGNvbnRleHQpIHsKLSAgICBpdGVyYXRvciA9IGl0
ZXJhdG9yLmJpbmQoY29udGV4dCk7Ci0gICAgdGhpcy5lYWNoKGZ1bmN0aW9uKHZhbHVlLCBpbmRl
eCkgewotICAgICAgbWVtbyA9IGl0ZXJhdG9yKG1lbW8sIHZhbHVlLCBpbmRleCk7Ci0gICAgfSk7
Ci0gICAgcmV0dXJuIG1lbW87Ci0gIH0sCi0KLSAgaW52b2tlOiBmdW5jdGlvbihtZXRob2QpIHsK
LSAgICB2YXIgYXJncyA9ICRBKGFyZ3VtZW50cykuc2xpY2UoMSk7Ci0gICAgcmV0dXJuIHRoaXMu
bWFwKGZ1bmN0aW9uKHZhbHVlKSB7Ci0gICAgICByZXR1cm4gdmFsdWVbbWV0aG9kXS5hcHBseSh2
YWx1ZSwgYXJncyk7Ci0gICAgfSk7Ci0gIH0sCi0KLSAgbWF4OiBmdW5jdGlvbihpdGVyYXRvciwg
Y29udGV4dCkgewotICAgIGl0ZXJhdG9yID0gaXRlcmF0b3IgPyBpdGVyYXRvci5iaW5kKGNvbnRl
eHQpIDogUHJvdG90eXBlLks7Ci0gICAgdmFyIHJlc3VsdDsKLSAgICB0aGlzLmVhY2goZnVuY3Rp
b24odmFsdWUsIGluZGV4KSB7Ci0gICAgICB2YWx1ZSA9IGl0ZXJhdG9yKHZhbHVlLCBpbmRleCk7
Ci0gICAgICBpZiAocmVzdWx0ID09IG51bGwgfHwgdmFsdWUgPj0gcmVzdWx0KQotICAgICAgICBy
ZXN1bHQgPSB2YWx1ZTsKLSAgICB9KTsKLSAgICByZXR1cm4gcmVzdWx0OwotICB9LAotCi0gIG1p
bjogZnVuY3Rpb24oaXRlcmF0b3IsIGNvbnRleHQpIHsKLSAgICBpdGVyYXRvciA9IGl0ZXJhdG9y
ID8gaXRlcmF0b3IuYmluZChjb250ZXh0KSA6IFByb3RvdHlwZS5LOwotICAgIHZhciByZXN1bHQ7
Ci0gICAgdGhpcy5lYWNoKGZ1bmN0aW9uKHZhbHVlLCBpbmRleCkgewotICAgICAgdmFsdWUgPSBp
dGVyYXRvcih2YWx1ZSwgaW5kZXgpOwotICAgICAgaWYgKHJlc3VsdCA9PSBudWxsIHx8IHZhbHVl
IDwgcmVzdWx0KQotICAgICAgICByZXN1bHQgPSB2YWx1ZTsKLSAgICB9KTsKLSAgICByZXR1cm4g
cmVzdWx0OwotICB9LAotCi0gIHBhcnRpdGlvbjogZnVuY3Rpb24oaXRlcmF0b3IsIGNvbnRleHQp
IHsKLSAgICBpdGVyYXRvciA9IGl0ZXJhdG9yID8gaXRlcmF0b3IuYmluZChjb250ZXh0KSA6IFBy
b3RvdHlwZS5LOwotICAgIHZhciB0cnVlcyA9IFtdLCBmYWxzZXMgPSBbXTsKLSAgICB0aGlzLmVh
Y2goZnVuY3Rpb24odmFsdWUsIGluZGV4KSB7Ci0gICAgICAoaXRlcmF0b3IodmFsdWUsIGluZGV4
KSA/Ci0gICAgICAgIHRydWVzIDogZmFsc2VzKS5wdXNoKHZhbHVlKTsKLSAgICB9KTsKLSAgICBy
ZXR1cm4gW3RydWVzLCBmYWxzZXNdOwotICB9LAotCi0gIHBsdWNrOiBmdW5jdGlvbihwcm9wZXJ0
eSkgewotICAgIHZhciByZXN1bHRzID0gW107Ci0gICAgdGhpcy5lYWNoKGZ1bmN0aW9uKHZhbHVl
KSB7Ci0gICAgICByZXN1bHRzLnB1c2godmFsdWVbcHJvcGVydHldKTsKLSAgICB9KTsKLSAgICBy
ZXR1cm4gcmVzdWx0czsKLSAgfSwKLQotICByZWplY3Q6IGZ1bmN0aW9uKGl0ZXJhdG9yLCBjb250
ZXh0KSB7Ci0gICAgaXRlcmF0b3IgPSBpdGVyYXRvci5iaW5kKGNvbnRleHQpOwotICAgIHZhciBy
ZXN1bHRzID0gW107Ci0gICAgdGhpcy5lYWNoKGZ1bmN0aW9uKHZhbHVlLCBpbmRleCkgewotICAg
ICAgaWYgKCFpdGVyYXRvcih2YWx1ZSwgaW5kZXgpKQotICAgICAgICByZXN1bHRzLnB1c2godmFs
dWUpOwotICAgIH0pOwotICAgIHJldHVybiByZXN1bHRzOwotICB9LAotCi0gIHNvcnRCeTogZnVu
Y3Rpb24oaXRlcmF0b3IsIGNvbnRleHQpIHsKLSAgICBpdGVyYXRvciA9IGl0ZXJhdG9yLmJpbmQo
Y29udGV4dCk7Ci0gICAgcmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKHZhbHVlLCBpbmRleCkgewot
ICAgICAgcmV0dXJuIHt2YWx1ZTogdmFsdWUsIGNyaXRlcmlhOiBpdGVyYXRvcih2YWx1ZSwgaW5k
ZXgpfTsKLSAgICB9KS5zb3J0KGZ1bmN0aW9uKGxlZnQsIHJpZ2h0KSB7Ci0gICAgICB2YXIgYSA9
IGxlZnQuY3JpdGVyaWEsIGIgPSByaWdodC5jcml0ZXJpYTsKLSAgICAgIHJldHVybiBhIDwgYiA/
IC0xIDogYSA+IGIgPyAxIDogMDsKLSAgICB9KS5wbHVjaygndmFsdWUnKTsKLSAgfSwKLQotICB0
b0FycmF5OiBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gdGhpcy5tYXAoKTsKLSAgfSwKLQotICB6
aXA6IGZ1bmN0aW9uKCkgewotICAgIHZhciBpdGVyYXRvciA9IFByb3RvdHlwZS5LLCBhcmdzID0g
JEEoYXJndW1lbnRzKTsKLSAgICBpZiAoT2JqZWN0LmlzRnVuY3Rpb24oYXJncy5sYXN0KCkpKQot
ICAgICAgaXRlcmF0b3IgPSBhcmdzLnBvcCgpOwotCi0gICAgdmFyIGNvbGxlY3Rpb25zID0gW3Ro
aXNdLmNvbmNhdChhcmdzKS5tYXAoJEEpOwotICAgIHJldHVybiB0aGlzLm1hcChmdW5jdGlvbih2
YWx1ZSwgaW5kZXgpIHsKLSAgICAgIHJldHVybiBpdGVyYXRvcihjb2xsZWN0aW9ucy5wbHVjayhp
bmRleCkpOwotICAgIH0pOwotICB9LAotCi0gIHNpemU6IGZ1bmN0aW9uKCkgewotICAgIHJldHVy
biB0aGlzLnRvQXJyYXkoKS5sZW5ndGg7Ci0gIH0sCi0KLSAgaW5zcGVjdDogZnVuY3Rpb24oKSB7
Ci0gICAgcmV0dXJuICcjPEVudW1lcmFibGU6JyArIHRoaXMudG9BcnJheSgpLmluc3BlY3QoKSAr
ICc+JzsKLSAgfQotfTsKLQotT2JqZWN0LmV4dGVuZChFbnVtZXJhYmxlLCB7Ci0gIG1hcDogICAg
IEVudW1lcmFibGUuY29sbGVjdCwKLSAgZmluZDogICAgRW51bWVyYWJsZS5kZXRlY3QsCi0gIHNl
bGVjdDogIEVudW1lcmFibGUuZmluZEFsbCwKLSAgZmlsdGVyOiAgRW51bWVyYWJsZS5maW5kQWxs
LAotICBtZW1iZXI6ICBFbnVtZXJhYmxlLmluY2x1ZGUsCi0gIGVudHJpZXM6IEVudW1lcmFibGUu
dG9BcnJheSwKLSAgZXZlcnk6ICAgRW51bWVyYWJsZS5hbGwsCi0gIHNvbWU6ICAgIEVudW1lcmFi
bGUuYW55Ci19KTsKLWZ1bmN0aW9uICRBKGl0ZXJhYmxlKSB7Ci0gIGlmICghaXRlcmFibGUpIHJl
dHVybiBbXTsKLSAgaWYgKGl0ZXJhYmxlLnRvQXJyYXkpIHJldHVybiBpdGVyYWJsZS50b0FycmF5
KCk7Ci0gIHZhciBsZW5ndGggPSBpdGVyYWJsZS5sZW5ndGggfHwgMCwgcmVzdWx0cyA9IG5ldyBB
cnJheShsZW5ndGgpOwotICB3aGlsZSAobGVuZ3RoLS0pIHJlc3VsdHNbbGVuZ3RoXSA9IGl0ZXJh
YmxlW2xlbmd0aF07Ci0gIHJldHVybiByZXN1bHRzOwotfQotCi1pZiAoUHJvdG90eXBlLkJyb3dz
ZXIuV2ViS2l0KSB7Ci0gICRBID0gZnVuY3Rpb24oaXRlcmFibGUpIHsKLSAgICBpZiAoIWl0ZXJh
YmxlKSByZXR1cm4gW107Ci0gICAgaWYgKCEoT2JqZWN0LmlzRnVuY3Rpb24oaXRlcmFibGUpICYm
IGl0ZXJhYmxlID09ICdbb2JqZWN0IE5vZGVMaXN0XScpICYmCi0gICAgICAgIGl0ZXJhYmxlLnRv
QXJyYXkpIHJldHVybiBpdGVyYWJsZS50b0FycmF5KCk7Ci0gICAgdmFyIGxlbmd0aCA9IGl0ZXJh
YmxlLmxlbmd0aCB8fCAwLCByZXN1bHRzID0gbmV3IEFycmF5KGxlbmd0aCk7Ci0gICAgd2hpbGUg
KGxlbmd0aC0tKSByZXN1bHRzW2xlbmd0aF0gPSBpdGVyYWJsZVtsZW5ndGhdOwotICAgIHJldHVy
biByZXN1bHRzOwotICB9OwotfQotCi1BcnJheS5mcm9tID0gJEE7Ci0KLU9iamVjdC5leHRlbmQo
QXJyYXkucHJvdG90eXBlLCBFbnVtZXJhYmxlKTsKLQotaWYgKCFBcnJheS5wcm90b3R5cGUuX3Jl
dmVyc2UpIEFycmF5LnByb3RvdHlwZS5fcmV2ZXJzZSA9IEFycmF5LnByb3RvdHlwZS5yZXZlcnNl
OwotCi1PYmplY3QuZXh0ZW5kKEFycmF5LnByb3RvdHlwZSwgewotICBfZWFjaDogZnVuY3Rpb24o
aXRlcmF0b3IpIHsKLSAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gdGhpcy5sZW5ndGg7IGkg
PCBsZW5ndGg7IGkrKykKLSAgICAgIGl0ZXJhdG9yKHRoaXNbaV0pOwotICB9LAotCi0gIGNsZWFy
OiBmdW5jdGlvbigpIHsKLSAgICB0aGlzLmxlbmd0aCA9IDA7Ci0gICAgcmV0dXJuIHRoaXM7Ci0g
IH0sCi0KLSAgZmlyc3Q6IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiB0aGlzWzBdOwotICB9LAot
Ci0gIGxhc3Q6IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiB0aGlzW3RoaXMubGVuZ3RoIC0gMV07
Ci0gIH0sCi0KLSAgY29tcGFjdDogZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIHRoaXMuc2VsZWN0
KGZ1bmN0aW9uKHZhbHVlKSB7Ci0gICAgICByZXR1cm4gdmFsdWUgIT0gbnVsbDsKLSAgICB9KTsK
LSAgfSwKLQotICBmbGF0dGVuOiBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gdGhpcy5pbmplY3Qo
W10sIGZ1bmN0aW9uKGFycmF5LCB2YWx1ZSkgewotICAgICAgcmV0dXJuIGFycmF5LmNvbmNhdChP
YmplY3QuaXNBcnJheSh2YWx1ZSkgPwotICAgICAgICB2YWx1ZS5mbGF0dGVuKCkgOiBbdmFsdWVd
KTsKLSAgICB9KTsKLSAgfSwKLQotICB3aXRob3V0OiBmdW5jdGlvbigpIHsKLSAgICB2YXIgdmFs
dWVzID0gJEEoYXJndW1lbnRzKTsKLSAgICByZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24odmFs
dWUpIHsKLSAgICAgIHJldHVybiAhdmFsdWVzLmluY2x1ZGUodmFsdWUpOwotICAgIH0pOwotICB9
LAotCi0gIHJldmVyc2U6IGZ1bmN0aW9uKGlubGluZSkgewotICAgIHJldHVybiAoaW5saW5lICE9
PSBmYWxzZSA/IHRoaXMgOiB0aGlzLnRvQXJyYXkoKSkuX3JldmVyc2UoKTsKLSAgfSwKLQotICBy
ZWR1Y2U6IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiB0aGlzLmxlbmd0aCA+IDEgPyB0aGlzIDog
dGhpc1swXTsKLSAgfSwKLQotICB1bmlxOiBmdW5jdGlvbihzb3J0ZWQpIHsKLSAgICByZXR1cm4g
dGhpcy5pbmplY3QoW10sIGZ1bmN0aW9uKGFycmF5LCB2YWx1ZSwgaW5kZXgpIHsKLSAgICAgIGlm
ICgwID09IGluZGV4IHx8IChzb3J0ZWQgPyBhcnJheS5sYXN0KCkgIT0gdmFsdWUgOiAhYXJyYXku
aW5jbHVkZSh2YWx1ZSkpKQotICAgICAgICBhcnJheS5wdXNoKHZhbHVlKTsKLSAgICAgIHJldHVy
biBhcnJheTsKLSAgICB9KTsKLSAgfSwKLQotICBpbnRlcnNlY3Q6IGZ1bmN0aW9uKGFycmF5KSB7
Ci0gICAgcmV0dXJuIHRoaXMudW5pcSgpLmZpbmRBbGwoZnVuY3Rpb24oaXRlbSkgewotICAgICAg
cmV0dXJuIGFycmF5LmRldGVjdChmdW5jdGlvbih2YWx1ZSkgeyByZXR1cm4gaXRlbSA9PT0gdmFs
dWUgfSk7Ci0gICAgfSk7Ci0gIH0sCi0KLSAgY2xvbmU6IGZ1bmN0aW9uKCkgewotICAgIHJldHVy
biBbXS5jb25jYXQodGhpcyk7Ci0gIH0sCi0KLSAgc2l6ZTogZnVuY3Rpb24oKSB7Ci0gICAgcmV0
dXJuIHRoaXMubGVuZ3RoOwotICB9LAotCi0gIGluc3BlY3Q6IGZ1bmN0aW9uKCkgewotICAgIHJl
dHVybiAnWycgKyB0aGlzLm1hcChPYmplY3QuaW5zcGVjdCkuam9pbignLCAnKSArICddJzsKLSAg
fSwKLQotICB0b0pTT046IGZ1bmN0aW9uKCkgewotICAgIHZhciByZXN1bHRzID0gW107Ci0gICAg
dGhpcy5lYWNoKGZ1bmN0aW9uKG9iamVjdCkgewotICAgICAgdmFyIHZhbHVlID0gT2JqZWN0LnRv
SlNPTihvYmplY3QpOwotICAgICAgaWYgKCFPYmplY3QuaXNVbmRlZmluZWQodmFsdWUpKSByZXN1
bHRzLnB1c2godmFsdWUpOwotICAgIH0pOwotICAgIHJldHVybiAnWycgKyByZXN1bHRzLmpvaW4o
JywgJykgKyAnXSc7Ci0gIH0KLX0pOwotCi0vLyB1c2UgbmF0aXZlIGJyb3dzZXIgSlMgMS42IGlt
cGxlbWVudGF0aW9uIGlmIGF2YWlsYWJsZQotaWYgKE9iamVjdC5pc0Z1bmN0aW9uKEFycmF5LnBy
b3RvdHlwZS5mb3JFYWNoKSkKLSAgQXJyYXkucHJvdG90eXBlLl9lYWNoID0gQXJyYXkucHJvdG90
eXBlLmZvckVhY2g7Ci0KLWlmICghQXJyYXkucHJvdG90eXBlLmluZGV4T2YpIEFycmF5LnByb3Rv
dHlwZS5pbmRleE9mID0gZnVuY3Rpb24oaXRlbSwgaSkgewotICBpIHx8IChpID0gMCk7Ci0gIHZh
ciBsZW5ndGggPSB0aGlzLmxlbmd0aDsKLSAgaWYgKGkgPCAwKSBpID0gbGVuZ3RoICsgaTsKLSAg
Zm9yICg7IGkgPCBsZW5ndGg7IGkrKykKLSAgICBpZiAodGhpc1tpXSA9PT0gaXRlbSkgcmV0dXJu
IGk7Ci0gIHJldHVybiAtMTsKLX07Ci0KLWlmICghQXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9m
KSBBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YgPSBmdW5jdGlvbihpdGVtLCBpKSB7Ci0gIGkg
PSBpc05hTihpKSA/IHRoaXMubGVuZ3RoIDogKGkgPCAwID8gdGhpcy5sZW5ndGggKyBpIDogaSkg
KyAxOwotICB2YXIgbiA9IHRoaXMuc2xpY2UoMCwgaSkucmV2ZXJzZSgpLmluZGV4T2YoaXRlbSk7
Ci0gIHJldHVybiAobiA8IDApID8gbiA6IGkgLSBuIC0gMTsKLX07Ci0KLUFycmF5LnByb3RvdHlw
ZS50b0FycmF5ID0gQXJyYXkucHJvdG90eXBlLmNsb25lOwotCi1mdW5jdGlvbiAkdyhzdHJpbmcp
IHsKLSAgaWYgKCFPYmplY3QuaXNTdHJpbmcoc3RyaW5nKSkgcmV0dXJuIFtdOwotICBzdHJpbmcg
PSBzdHJpbmcuc3RyaXAoKTsKLSAgcmV0dXJuIHN0cmluZyA/IHN0cmluZy5zcGxpdCgvXHMrLykg
OiBbXTsKLX0KLQotaWYgKFByb3RvdHlwZS5Ccm93c2VyLk9wZXJhKXsKLSAgQXJyYXkucHJvdG90
eXBlLmNvbmNhdCA9IGZ1bmN0aW9uKCkgewotICAgIHZhciBhcnJheSA9IFtdOwotICAgIGZvciAo
dmFyIGkgPSAwLCBsZW5ndGggPSB0aGlzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSBhcnJheS5w
dXNoKHRoaXNbaV0pOwotICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBhcmd1bWVudHMubGVu
Z3RoOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgIGlmIChPYmplY3QuaXNBcnJheShhcmd1bWVu
dHNbaV0pKSB7Ci0gICAgICAgIGZvciAodmFyIGogPSAwLCBhcnJheUxlbmd0aCA9IGFyZ3VtZW50
c1tpXS5sZW5ndGg7IGogPCBhcnJheUxlbmd0aDsgaisrKQotICAgICAgICAgIGFycmF5LnB1c2go
YXJndW1lbnRzW2ldW2pdKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGFycmF5LnB1c2goYXJn
dW1lbnRzW2ldKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGFycmF5OwotICB9OwotfQot
T2JqZWN0LmV4dGVuZChOdW1iZXIucHJvdG90eXBlLCB7Ci0gIHRvQ29sb3JQYXJ0OiBmdW5jdGlv
bigpIHsKLSAgICByZXR1cm4gdGhpcy50b1BhZGRlZFN0cmluZygyLCAxNik7Ci0gIH0sCi0KLSAg
c3VjYzogZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIHRoaXMgKyAxOwotICB9LAotCi0gIHRpbWVz
OiBmdW5jdGlvbihpdGVyYXRvcikgewotICAgICRSKDAsIHRoaXMsIHRydWUpLmVhY2goaXRlcmF0
b3IpOwotICAgIHJldHVybiB0aGlzOwotICB9LAotCi0gIHRvUGFkZGVkU3RyaW5nOiBmdW5jdGlv
bihsZW5ndGgsIHJhZGl4KSB7Ci0gICAgdmFyIHN0cmluZyA9IHRoaXMudG9TdHJpbmcocmFkaXgg
fHwgMTApOwotICAgIHJldHVybiAnMCcudGltZXMobGVuZ3RoIC0gc3RyaW5nLmxlbmd0aCkgKyBz
dHJpbmc7Ci0gIH0sCi0KLSAgdG9KU09OOiBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gaXNGaW5p
dGUodGhpcykgPyB0aGlzLnRvU3RyaW5nKCkgOiAnbnVsbCc7Ci0gIH0KLX0pOwotCi0kdygnYWJz
IHJvdW5kIGNlaWwgZmxvb3InKS5lYWNoKGZ1bmN0aW9uKG1ldGhvZCl7Ci0gIE51bWJlci5wcm90
b3R5cGVbbWV0aG9kXSA9IE1hdGhbbWV0aG9kXS5tZXRob2RpemUoKTsKLX0pOwotZnVuY3Rpb24g
JEgob2JqZWN0KSB7Ci0gIHJldHVybiBuZXcgSGFzaChvYmplY3QpOwotfTsKLQotdmFyIEhhc2gg
PSBDbGFzcy5jcmVhdGUoRW51bWVyYWJsZSwgKGZ1bmN0aW9uKCkgewotCi0gIGZ1bmN0aW9uIHRv
UXVlcnlQYWlyKGtleSwgdmFsdWUpIHsKLSAgICBpZiAoT2JqZWN0LmlzVW5kZWZpbmVkKHZhbHVl
KSkgcmV0dXJuIGtleTsKLSAgICByZXR1cm4ga2V5ICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50
KFN0cmluZy5pbnRlcnByZXQodmFsdWUpKTsKLSAgfQotCi0gIHJldHVybiB7Ci0gICAgaW5pdGlh
bGl6ZTogZnVuY3Rpb24ob2JqZWN0KSB7Ci0gICAgICB0aGlzLl9vYmplY3QgPSBPYmplY3QuaXNI
YXNoKG9iamVjdCkgPyBvYmplY3QudG9PYmplY3QoKSA6IE9iamVjdC5jbG9uZShvYmplY3QpOwot
ICAgIH0sCi0KLSAgICBfZWFjaDogZnVuY3Rpb24oaXRlcmF0b3IpIHsKLSAgICAgIGZvciAodmFy
IGtleSBpbiB0aGlzLl9vYmplY3QpIHsKLSAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5fb2JqZWN0
W2tleV0sIHBhaXIgPSBba2V5LCB2YWx1ZV07Ci0gICAgICAgIHBhaXIua2V5ID0ga2V5OwotICAg
ICAgICBwYWlyLnZhbHVlID0gdmFsdWU7Ci0gICAgICAgIGl0ZXJhdG9yKHBhaXIpOwotICAgICAg
fQotICAgIH0sCi0KLSAgICBzZXQ6IGZ1bmN0aW9uKGtleSwgdmFsdWUpIHsKLSAgICAgIHJldHVy
biB0aGlzLl9vYmplY3Rba2V5XSA9IHZhbHVlOwotICAgIH0sCi0KLSAgICBnZXQ6IGZ1bmN0aW9u
KGtleSkgewotICAgICAgcmV0dXJuIHRoaXMuX29iamVjdFtrZXldOwotICAgIH0sCi0KLSAgICB1
bnNldDogZnVuY3Rpb24oa2V5KSB7Ci0gICAgICB2YXIgdmFsdWUgPSB0aGlzLl9vYmplY3Rba2V5
XTsKLSAgICAgIGRlbGV0ZSB0aGlzLl9vYmplY3Rba2V5XTsKLSAgICAgIHJldHVybiB2YWx1ZTsK
LSAgICB9LAotCi0gICAgdG9PYmplY3Q6IGZ1bmN0aW9uKCkgewotICAgICAgcmV0dXJuIE9iamVj
dC5jbG9uZSh0aGlzLl9vYmplY3QpOwotICAgIH0sCi0KLSAgICBrZXlzOiBmdW5jdGlvbigpIHsK
LSAgICAgIHJldHVybiB0aGlzLnBsdWNrKCdrZXknKTsKLSAgICB9LAotCi0gICAgdmFsdWVzOiBm
dW5jdGlvbigpIHsKLSAgICAgIHJldHVybiB0aGlzLnBsdWNrKCd2YWx1ZScpOwotICAgIH0sCi0K
LSAgICBpbmRleDogZnVuY3Rpb24odmFsdWUpIHsKLSAgICAgIHZhciBtYXRjaCA9IHRoaXMuZGV0
ZWN0KGZ1bmN0aW9uKHBhaXIpIHsKLSAgICAgICAgcmV0dXJuIHBhaXIudmFsdWUgPT09IHZhbHVl
OwotICAgICAgfSk7Ci0gICAgICByZXR1cm4gbWF0Y2ggJiYgbWF0Y2gua2V5OwotICAgIH0sCi0K
LSAgICBtZXJnZTogZnVuY3Rpb24ob2JqZWN0KSB7Ci0gICAgICByZXR1cm4gdGhpcy5jbG9uZSgp
LnVwZGF0ZShvYmplY3QpOwotICAgIH0sCi0KLSAgICB1cGRhdGU6IGZ1bmN0aW9uKG9iamVjdCkg
ewotICAgICAgcmV0dXJuIG5ldyBIYXNoKG9iamVjdCkuaW5qZWN0KHRoaXMsIGZ1bmN0aW9uKHJl
c3VsdCwgcGFpcikgewotICAgICAgICByZXN1bHQuc2V0KHBhaXIua2V5LCBwYWlyLnZhbHVlKTsK
LSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgIH0pOwotICAgIH0sCi0KLSAgICB0b1F1ZXJ5
U3RyaW5nOiBmdW5jdGlvbigpIHsKLSAgICAgIHJldHVybiB0aGlzLm1hcChmdW5jdGlvbihwYWly
KSB7Ci0gICAgICAgIHZhciBrZXkgPSBlbmNvZGVVUklDb21wb25lbnQocGFpci5rZXkpLCB2YWx1
ZXMgPSBwYWlyLnZhbHVlOwotCi0gICAgICAgIGlmICh2YWx1ZXMgJiYgdHlwZW9mIHZhbHVlcyA9
PSAnb2JqZWN0JykgewotICAgICAgICAgIGlmIChPYmplY3QuaXNBcnJheSh2YWx1ZXMpKQotICAg
ICAgICAgICAgcmV0dXJuIHZhbHVlcy5tYXAodG9RdWVyeVBhaXIuY3Vycnkoa2V5KSkuam9pbign
JicpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0b1F1ZXJ5UGFpcihrZXksIHZhbHVlcyk7
Ci0gICAgICB9KS5qb2luKCcmJyk7Ci0gICAgfSwKLQotICAgIGluc3BlY3Q6IGZ1bmN0aW9uKCkg
ewotICAgICAgcmV0dXJuICcjPEhhc2g6eycgKyB0aGlzLm1hcChmdW5jdGlvbihwYWlyKSB7Ci0g
ICAgICAgIHJldHVybiBwYWlyLm1hcChPYmplY3QuaW5zcGVjdCkuam9pbignOiAnKTsKLSAgICAg
IH0pLmpvaW4oJywgJykgKyAnfT4nOwotICAgIH0sCi0KLSAgICB0b0pTT046IGZ1bmN0aW9uKCkg
ewotICAgICAgcmV0dXJuIE9iamVjdC50b0pTT04odGhpcy50b09iamVjdCgpKTsKLSAgICB9LAot
Ci0gICAgY2xvbmU6IGZ1bmN0aW9uKCkgewotICAgICAgcmV0dXJuIG5ldyBIYXNoKHRoaXMpOwot
ICAgIH0KLSAgfQotfSkoKSk7Ci0KLUhhc2gucHJvdG90eXBlLnRvVGVtcGxhdGVSZXBsYWNlbWVu
dHMgPSBIYXNoLnByb3RvdHlwZS50b09iamVjdDsKLUhhc2guZnJvbSA9ICRIOwotdmFyIE9iamVj
dFJhbmdlID0gQ2xhc3MuY3JlYXRlKEVudW1lcmFibGUsIHsKLSAgaW5pdGlhbGl6ZTogZnVuY3Rp
b24oc3RhcnQsIGVuZCwgZXhjbHVzaXZlKSB7Ci0gICAgdGhpcy5zdGFydCA9IHN0YXJ0OwotICAg
IHRoaXMuZW5kID0gZW5kOwotICAgIHRoaXMuZXhjbHVzaXZlID0gZXhjbHVzaXZlOwotICB9LAot
Ci0gIF9lYWNoOiBmdW5jdGlvbihpdGVyYXRvcikgewotICAgIHZhciB2YWx1ZSA9IHRoaXMuc3Rh
cnQ7Ci0gICAgd2hpbGUgKHRoaXMuaW5jbHVkZSh2YWx1ZSkpIHsKLSAgICAgIGl0ZXJhdG9yKHZh
bHVlKTsKLSAgICAgIHZhbHVlID0gdmFsdWUuc3VjYygpOwotICAgIH0KLSAgfSwKLQotICBpbmNs
dWRlOiBmdW5jdGlvbih2YWx1ZSkgewotICAgIGlmICh2YWx1ZSA8IHRoaXMuc3RhcnQpCi0gICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHRoaXMuZXhjbHVzaXZlKQotICAgICAgcmV0dXJuIHZh
bHVlIDwgdGhpcy5lbmQ7Ci0gICAgcmV0dXJuIHZhbHVlIDw9IHRoaXMuZW5kOwotICB9Ci19KTsK
LQotdmFyICRSID0gZnVuY3Rpb24oc3RhcnQsIGVuZCwgZXhjbHVzaXZlKSB7Ci0gIHJldHVybiBu
ZXcgT2JqZWN0UmFuZ2Uoc3RhcnQsIGVuZCwgZXhjbHVzaXZlKTsKLX07Ci0KLXZhciBBamF4ID0g
ewotICBnZXRUcmFuc3BvcnQ6IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiBUcnkudGhlc2UoCi0g
ICAgICBmdW5jdGlvbigpIHtyZXR1cm4gbmV3IFhNTEh0dHBSZXF1ZXN0KCl9LAotICAgICAgZnVu
Y3Rpb24oKSB7cmV0dXJuIG5ldyBBY3RpdmVYT2JqZWN0KCdNc3htbDIuWE1MSFRUUCcpfSwKLSAg
ICAgIGZ1bmN0aW9uKCkge3JldHVybiBuZXcgQWN0aXZlWE9iamVjdCgnTWljcm9zb2Z0LlhNTEhU
VFAnKX0KLSAgICApIHx8IGZhbHNlOwotICB9LAotCi0gIGFjdGl2ZVJlcXVlc3RDb3VudDogMAot
fTsKLQotQWpheC5SZXNwb25kZXJzID0gewotICByZXNwb25kZXJzOiBbXSwKLQotICBfZWFjaDog
ZnVuY3Rpb24oaXRlcmF0b3IpIHsKLSAgICB0aGlzLnJlc3BvbmRlcnMuX2VhY2goaXRlcmF0b3Ip
OwotICB9LAotCi0gIHJlZ2lzdGVyOiBmdW5jdGlvbihyZXNwb25kZXIpIHsKLSAgICBpZiAoIXRo
aXMuaW5jbHVkZShyZXNwb25kZXIpKQotICAgICAgdGhpcy5yZXNwb25kZXJzLnB1c2gocmVzcG9u
ZGVyKTsKLSAgfSwKLQotICB1bnJlZ2lzdGVyOiBmdW5jdGlvbihyZXNwb25kZXIpIHsKLSAgICB0
aGlzLnJlc3BvbmRlcnMgPSB0aGlzLnJlc3BvbmRlcnMud2l0aG91dChyZXNwb25kZXIpOwotICB9
LAotCi0gIGRpc3BhdGNoOiBmdW5jdGlvbihjYWxsYmFjaywgcmVxdWVzdCwgdHJhbnNwb3J0LCBq
c29uKSB7Ci0gICAgdGhpcy5lYWNoKGZ1bmN0aW9uKHJlc3BvbmRlcikgewotICAgICAgaWYgKE9i
amVjdC5pc0Z1bmN0aW9uKHJlc3BvbmRlcltjYWxsYmFja10pKSB7Ci0gICAgICAgIHRyeSB7Ci0g
ICAgICAgICAgcmVzcG9uZGVyW2NhbGxiYWNrXS5hcHBseShyZXNwb25kZXIsIFtyZXF1ZXN0LCB0
cmFuc3BvcnQsIGpzb25dKTsKLSAgICAgICAgfSBjYXRjaCAoZSkgeyB9Ci0gICAgICB9Ci0gICAg
fSk7Ci0gIH0KLX07Ci0KLU9iamVjdC5leHRlbmQoQWpheC5SZXNwb25kZXJzLCBFbnVtZXJhYmxl
KTsKLQotQWpheC5SZXNwb25kZXJzLnJlZ2lzdGVyKHsKLSAgb25DcmVhdGU6ICAgZnVuY3Rpb24o
KSB7IEFqYXguYWN0aXZlUmVxdWVzdENvdW50KysgfSwKLSAgb25Db21wbGV0ZTogZnVuY3Rpb24o
KSB7IEFqYXguYWN0aXZlUmVxdWVzdENvdW50LS0gfQotfSk7Ci0KLUFqYXguQmFzZSA9IENsYXNz
LmNyZWF0ZSh7Ci0gIGluaXRpYWxpemU6IGZ1bmN0aW9uKG9wdGlvbnMpIHsKLSAgICB0aGlzLm9w
dGlvbnMgPSB7Ci0gICAgICBtZXRob2Q6ICAgICAgICdwb3N0JywKLSAgICAgIGFzeW5jaHJvbm91
czogdHJ1ZSwKLSAgICAgIGNvbnRlbnRUeXBlOiAgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJs
ZW5jb2RlZCcsCi0gICAgICBlbmNvZGluZzogICAgICdVVEYtOCcsCi0gICAgICBwYXJhbWV0ZXJz
OiAgICcnLAotICAgICAgZXZhbEpTT046ICAgICB0cnVlLAotICAgICAgZXZhbEpTOiAgICAgICB0
cnVlCi0gICAgfTsKLSAgICBPYmplY3QuZXh0ZW5kKHRoaXMub3B0aW9ucywgb3B0aW9ucyB8fCB7
IH0pOwotCi0gICAgdGhpcy5vcHRpb25zLm1ldGhvZCA9IHRoaXMub3B0aW9ucy5tZXRob2QudG9M
b3dlckNhc2UoKTsKLQotICAgIGlmIChPYmplY3QuaXNTdHJpbmcodGhpcy5vcHRpb25zLnBhcmFt
ZXRlcnMpKQotICAgICAgdGhpcy5vcHRpb25zLnBhcmFtZXRlcnMgPSB0aGlzLm9wdGlvbnMucGFy
YW1ldGVycy50b1F1ZXJ5UGFyYW1zKCk7Ci0gICAgZWxzZSBpZiAoT2JqZWN0LmlzSGFzaCh0aGlz
Lm9wdGlvbnMucGFyYW1ldGVycykpCi0gICAgICB0aGlzLm9wdGlvbnMucGFyYW1ldGVycyA9IHRo
aXMub3B0aW9ucy5wYXJhbWV0ZXJzLnRvT2JqZWN0KCk7Ci0gIH0KLX0pOwotCi1BamF4LlJlcXVl
c3QgPSBDbGFzcy5jcmVhdGUoQWpheC5CYXNlLCB7Ci0gIF9jb21wbGV0ZTogZmFsc2UsCi0KLSAg
aW5pdGlhbGl6ZTogZnVuY3Rpb24oJHN1cGVyLCB1cmwsIG9wdGlvbnMpIHsKLSAgICAkc3VwZXIo
b3B0aW9ucyk7Ci0gICAgdGhpcy50cmFuc3BvcnQgPSBBamF4LmdldFRyYW5zcG9ydCgpOwotICAg
IHRoaXMucmVxdWVzdCh1cmwpOwotICB9LAotCi0gIHJlcXVlc3Q6IGZ1bmN0aW9uKHVybCkgewot
ICAgIHRoaXMudXJsID0gdXJsOwotICAgIHRoaXMubWV0aG9kID0gdGhpcy5vcHRpb25zLm1ldGhv
ZDsKLSAgICB2YXIgcGFyYW1zID0gT2JqZWN0LmNsb25lKHRoaXMub3B0aW9ucy5wYXJhbWV0ZXJz
KTsKLQotICAgIGlmICghWydnZXQnLCAncG9zdCddLmluY2x1ZGUodGhpcy5tZXRob2QpKSB7Ci0g
ICAgICAvLyBzaW11bGF0ZSBvdGhlciB2ZXJicyBvdmVyIHBvc3QKLSAgICAgIHBhcmFtc1snX21l
dGhvZCddID0gdGhpcy5tZXRob2Q7Ci0gICAgICB0aGlzLm1ldGhvZCA9ICdwb3N0JzsKLSAgICB9
Ci0KLSAgICB0aGlzLnBhcmFtZXRlcnMgPSBwYXJhbXM7Ci0KLSAgICBpZiAocGFyYW1zID0gT2Jq
ZWN0LnRvUXVlcnlTdHJpbmcocGFyYW1zKSkgewotICAgICAgLy8gd2hlbiBHRVQsIGFwcGVuZCBw
YXJhbWV0ZXJzIHRvIFVSTAotICAgICAgaWYgKHRoaXMubWV0aG9kID09ICdnZXQnKQotICAgICAg
ICB0aGlzLnVybCArPSAodGhpcy51cmwuaW5jbHVkZSgnPycpID8gJyYnIDogJz8nKSArIHBhcmFt
czsKLSAgICAgIGVsc2UgaWYgKC9Lb25xdWVyb3J8U2FmYXJpfEtIVE1MLy50ZXN0KG5hdmlnYXRv
ci51c2VyQWdlbnQpKQotICAgICAgICBwYXJhbXMgKz0gJyZfPSc7Ci0gICAgfQotCi0gICAgdHJ5
IHsKLSAgICAgIHZhciByZXNwb25zZSA9IG5ldyBBamF4LlJlc3BvbnNlKHRoaXMpOwotICAgICAg
aWYgKHRoaXMub3B0aW9ucy5vbkNyZWF0ZSkgdGhpcy5vcHRpb25zLm9uQ3JlYXRlKHJlc3BvbnNl
KTsKLSAgICAgIEFqYXguUmVzcG9uZGVycy5kaXNwYXRjaCgnb25DcmVhdGUnLCB0aGlzLCByZXNw
b25zZSk7Ci0KLSAgICAgIHRoaXMudHJhbnNwb3J0Lm9wZW4odGhpcy5tZXRob2QudG9VcHBlckNh
c2UoKSwgdGhpcy51cmwsCi0gICAgICAgIHRoaXMub3B0aW9ucy5hc3luY2hyb25vdXMpOwotCi0g
ICAgICBpZiAodGhpcy5vcHRpb25zLmFzeW5jaHJvbm91cykgdGhpcy5yZXNwb25kVG9SZWFkeVN0
YXRlLmJpbmQodGhpcykuZGVmZXIoMSk7Ci0KLSAgICAgIHRoaXMudHJhbnNwb3J0Lm9ucmVhZHlz
dGF0ZWNoYW5nZSA9IHRoaXMub25TdGF0ZUNoYW5nZS5iaW5kKHRoaXMpOwotICAgICAgdGhpcy5z
ZXRSZXF1ZXN0SGVhZGVycygpOwotCi0gICAgICB0aGlzLmJvZHkgPSB0aGlzLm1ldGhvZCA9PSAn
cG9zdCcgPyAodGhpcy5vcHRpb25zLnBvc3RCb2R5IHx8IHBhcmFtcykgOiBudWxsOwotICAgICAg
dGhpcy50cmFuc3BvcnQuc2VuZCh0aGlzLmJvZHkpOwotCi0gICAgICAvKiBGb3JjZSBGaXJlZm94
IHRvIGhhbmRsZSByZWFkeSBzdGF0ZSA0IGZvciBzeW5jaHJvbm91cyByZXF1ZXN0cyAqLwotICAg
ICAgaWYgKCF0aGlzLm9wdGlvbnMuYXN5bmNocm9ub3VzICYmIHRoaXMudHJhbnNwb3J0Lm92ZXJy
aWRlTWltZVR5cGUpCi0gICAgICAgIHRoaXMub25TdGF0ZUNoYW5nZSgpOwotCi0gICAgfQotICAg
IGNhdGNoIChlKSB7Ci0gICAgICB0aGlzLmRpc3BhdGNoRXhjZXB0aW9uKGUpOwotICAgIH0KLSAg
fSwKLQotICBvblN0YXRlQ2hhbmdlOiBmdW5jdGlvbigpIHsKLSAgICB2YXIgcmVhZHlTdGF0ZSA9
IHRoaXMudHJhbnNwb3J0LnJlYWR5U3RhdGU7Ci0gICAgaWYgKHJlYWR5U3RhdGUgPiAxICYmICEo
KHJlYWR5U3RhdGUgPT0gNCkgJiYgdGhpcy5fY29tcGxldGUpKQotICAgICAgdGhpcy5yZXNwb25k
VG9SZWFkeVN0YXRlKHRoaXMudHJhbnNwb3J0LnJlYWR5U3RhdGUpOwotICB9LAotCi0gIHNldFJl
cXVlc3RIZWFkZXJzOiBmdW5jdGlvbigpIHsKLSAgICB2YXIgaGVhZGVycyA9IHsKLSAgICAgICdY
LVJlcXVlc3RlZC1XaXRoJzogJ1hNTEh0dHBSZXF1ZXN0JywKLSAgICAgICdYLVByb3RvdHlwZS1W
ZXJzaW9uJzogUHJvdG90eXBlLlZlcnNpb24sCi0gICAgICAnQWNjZXB0JzogJ3RleHQvamF2YXNj
cmlwdCwgdGV4dC9odG1sLCBhcHBsaWNhdGlvbi94bWwsIHRleHQveG1sLCAqLyonCi0gICAgfTsK
LQotICAgIGlmICh0aGlzLm1ldGhvZCA9PSAncG9zdCcpIHsKLSAgICAgIGhlYWRlcnNbJ0NvbnRl
bnQtdHlwZSddID0gdGhpcy5vcHRpb25zLmNvbnRlbnRUeXBlICsKLSAgICAgICAgKHRoaXMub3B0
aW9ucy5lbmNvZGluZyA/ICc7IGNoYXJzZXQ9JyArIHRoaXMub3B0aW9ucy5lbmNvZGluZyA6ICcn
KTsKLQotICAgICAgLyogRm9yY2UgIkNvbm5lY3Rpb246IGNsb3NlIiBmb3Igb2xkZXIgTW96aWxs
YSBicm93c2VycyB0byB3b3JrCi0gICAgICAgKiBhcm91bmQgYSBidWcgd2hlcmUgWE1MSHR0cFJl
cXVlc3Qgc2VuZHMgYW4gaW5jb3JyZWN0Ci0gICAgICAgKiBDb250ZW50LWxlbmd0aCBoZWFkZXIu
IFNlZSBNb3ppbGxhIEJ1Z3ppbGxhICMyNDY2NTEuCi0gICAgICAgKi8KLSAgICAgIGlmICh0aGlz
LnRyYW5zcG9ydC5vdmVycmlkZU1pbWVUeXBlICYmCi0gICAgICAgICAgKG5hdmlnYXRvci51c2Vy
QWdlbnQubWF0Y2goL0dlY2tvXC8oXGR7NH0pLykgfHwgWzAsMjAwNV0pWzFdIDwgMjAwNSkKLSAg
ICAgICAgICAgIGhlYWRlcnNbJ0Nvbm5lY3Rpb24nXSA9ICdjbG9zZSc7Ci0gICAgfQotCi0gICAg
Ly8gdXNlci1kZWZpbmVkIGhlYWRlcnMKLSAgICBpZiAodHlwZW9mIHRoaXMub3B0aW9ucy5yZXF1
ZXN0SGVhZGVycyA9PSAnb2JqZWN0JykgewotICAgICAgdmFyIGV4dHJhcyA9IHRoaXMub3B0aW9u
cy5yZXF1ZXN0SGVhZGVyczsKLQotICAgICAgaWYgKE9iamVjdC5pc0Z1bmN0aW9uKGV4dHJhcy5w
dXNoKSkKLSAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGV4dHJhcy5sZW5ndGg7IGkg
PCBsZW5ndGg7IGkgKz0gMikKLSAgICAgICAgICBoZWFkZXJzW2V4dHJhc1tpXV0gPSBleHRyYXNb
aSsxXTsKLSAgICAgIGVsc2UKLSAgICAgICAgJEgoZXh0cmFzKS5lYWNoKGZ1bmN0aW9uKHBhaXIp
IHsgaGVhZGVyc1twYWlyLmtleV0gPSBwYWlyLnZhbHVlIH0pOwotICAgIH0KLQotICAgIGZvciAo
dmFyIG5hbWUgaW4gaGVhZGVycykKLSAgICAgIHRoaXMudHJhbnNwb3J0LnNldFJlcXVlc3RIZWFk
ZXIobmFtZSwgaGVhZGVyc1tuYW1lXSk7Ci0gIH0sCi0KLSAgc3VjY2VzczogZnVuY3Rpb24oKSB7
Ci0gICAgdmFyIHN0YXR1cyA9IHRoaXMuZ2V0U3RhdHVzKCk7Ci0gICAgcmV0dXJuICFzdGF0dXMg
fHwgKHN0YXR1cyA+PSAyMDAgJiYgc3RhdHVzIDwgMzAwKTsKLSAgfSwKLQotICBnZXRTdGF0dXM6
IGZ1bmN0aW9uKCkgewotICAgIHRyeSB7Ci0gICAgICByZXR1cm4gdGhpcy50cmFuc3BvcnQuc3Rh
dHVzIHx8IDA7Ci0gICAgfSBjYXRjaCAoZSkgeyByZXR1cm4gMCB9Ci0gIH0sCi0KLSAgcmVzcG9u
ZFRvUmVhZHlTdGF0ZTogZnVuY3Rpb24ocmVhZHlTdGF0ZSkgewotICAgIHZhciBzdGF0ZSA9IEFq
YXguUmVxdWVzdC5FdmVudHNbcmVhZHlTdGF0ZV0sIHJlc3BvbnNlID0gbmV3IEFqYXguUmVzcG9u
c2UodGhpcyk7Ci0KLSAgICBpZiAoc3RhdGUgPT0gJ0NvbXBsZXRlJykgewotICAgICAgdHJ5IHsK
LSAgICAgICAgdGhpcy5fY29tcGxldGUgPSB0cnVlOwotICAgICAgICAodGhpcy5vcHRpb25zWydv
bicgKyByZXNwb25zZS5zdGF0dXNdCi0gICAgICAgICB8fCB0aGlzLm9wdGlvbnNbJ29uJyArICh0
aGlzLnN1Y2Nlc3MoKSA/ICdTdWNjZXNzJyA6ICdGYWlsdXJlJyldCi0gICAgICAgICB8fCBQcm90
b3R5cGUuZW1wdHlGdW5jdGlvbikocmVzcG9uc2UsIHJlc3BvbnNlLmhlYWRlckpTT04pOwotICAg
ICAgfSBjYXRjaCAoZSkgewotICAgICAgICB0aGlzLmRpc3BhdGNoRXhjZXB0aW9uKGUpOwotICAg
ICAgfQotCi0gICAgICB2YXIgY29udGVudFR5cGUgPSByZXNwb25zZS5nZXRIZWFkZXIoJ0NvbnRl
bnQtdHlwZScpOwotICAgICAgaWYgKHRoaXMub3B0aW9ucy5ldmFsSlMgPT0gJ2ZvcmNlJwotICAg
ICAgICAgIHx8ICh0aGlzLm9wdGlvbnMuZXZhbEpTICYmIHRoaXMuaXNTYW1lT3JpZ2luKCkgJiYg
Y29udGVudFR5cGUKLSAgICAgICAgICAmJiBjb250ZW50VHlwZS5tYXRjaCgvXlxzKih0ZXh0fGFw
cGxpY2F0aW9uKVwvKHgtKT8oamF2YXxlY21hKXNjcmlwdCg7LiopP1xzKiQvaSkpKQotICAgICAg
ICB0aGlzLmV2YWxSZXNwb25zZSgpOwotICAgIH0KLQotICAgIHRyeSB7Ci0gICAgICAodGhpcy5v
cHRpb25zWydvbicgKyBzdGF0ZV0gfHwgUHJvdG90eXBlLmVtcHR5RnVuY3Rpb24pKHJlc3BvbnNl
LCByZXNwb25zZS5oZWFkZXJKU09OKTsKLSAgICAgIEFqYXguUmVzcG9uZGVycy5kaXNwYXRjaCgn
b24nICsgc3RhdGUsIHRoaXMsIHJlc3BvbnNlLCByZXNwb25zZS5oZWFkZXJKU09OKTsKLSAgICB9
IGNhdGNoIChlKSB7Ci0gICAgICB0aGlzLmRpc3BhdGNoRXhjZXB0aW9uKGUpOwotICAgIH0KLQot
ICAgIGlmIChzdGF0ZSA9PSAnQ29tcGxldGUnKSB7Ci0gICAgICAvLyBhdm9pZCBtZW1vcnkgbGVh
ayBpbiBNU0lFOiBjbGVhbiB1cAotICAgICAgdGhpcy50cmFuc3BvcnQub25yZWFkeXN0YXRlY2hh
bmdlID0gUHJvdG90eXBlLmVtcHR5RnVuY3Rpb247Ci0gICAgfQotICB9LAotCi0gIGlzU2FtZU9y
aWdpbjogZnVuY3Rpb24oKSB7Ci0gICAgdmFyIG0gPSB0aGlzLnVybC5tYXRjaCgvXlxzKmh0dHBz
PzpcL1wvW15cL10qLyk7Ci0gICAgcmV0dXJuICFtIHx8IChtWzBdID09ICcje3Byb3RvY29sfS8v
I3tkb21haW59I3twb3J0fScuaW50ZXJwb2xhdGUoewotICAgICAgcHJvdG9jb2w6IGxvY2F0aW9u
LnByb3RvY29sLAotICAgICAgZG9tYWluOiBkb2N1bWVudC5kb21haW4sCi0gICAgICBwb3J0OiBs
b2NhdGlvbi5wb3J0ID8gJzonICsgbG9jYXRpb24ucG9ydCA6ICcnCi0gICAgfSkpOwotICB9LAot
Ci0gIGdldEhlYWRlcjogZnVuY3Rpb24obmFtZSkgewotICAgIHRyeSB7Ci0gICAgICByZXR1cm4g
dGhpcy50cmFuc3BvcnQuZ2V0UmVzcG9uc2VIZWFkZXIobmFtZSkgfHwgbnVsbDsKLSAgICB9IGNh
dGNoIChlKSB7IHJldHVybiBudWxsIH0KLSAgfSwKLQotICBldmFsUmVzcG9uc2U6IGZ1bmN0aW9u
KCkgewotICAgIHRyeSB7Ci0gICAgICByZXR1cm4gZXZhbCgodGhpcy50cmFuc3BvcnQucmVzcG9u
c2VUZXh0IHx8ICcnKS51bmZpbHRlckpTT04oKSk7Ci0gICAgfSBjYXRjaCAoZSkgewotICAgICAg
dGhpcy5kaXNwYXRjaEV4Y2VwdGlvbihlKTsKLSAgICB9Ci0gIH0sCi0KLSAgZGlzcGF0Y2hFeGNl
cHRpb246IGZ1bmN0aW9uKGV4Y2VwdGlvbikgewotICAgICh0aGlzLm9wdGlvbnMub25FeGNlcHRp
b24gfHwgUHJvdG90eXBlLmVtcHR5RnVuY3Rpb24pKHRoaXMsIGV4Y2VwdGlvbik7Ci0gICAgQWph
eC5SZXNwb25kZXJzLmRpc3BhdGNoKCdvbkV4Y2VwdGlvbicsIHRoaXMsIGV4Y2VwdGlvbik7Ci0g
IH0KLX0pOwotCi1BamF4LlJlcXVlc3QuRXZlbnRzID0KLSAgWydVbmluaXRpYWxpemVkJywgJ0xv
YWRpbmcnLCAnTG9hZGVkJywgJ0ludGVyYWN0aXZlJywgJ0NvbXBsZXRlJ107Ci0KLUFqYXguUmVz
cG9uc2UgPSBDbGFzcy5jcmVhdGUoewotICBpbml0aWFsaXplOiBmdW5jdGlvbihyZXF1ZXN0KXsK
LSAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0OwotICAgIHZhciB0cmFuc3BvcnQgID0gdGhpcy50
cmFuc3BvcnQgID0gcmVxdWVzdC50cmFuc3BvcnQsCi0gICAgICAgIHJlYWR5U3RhdGUgPSB0aGlz
LnJlYWR5U3RhdGUgPSB0cmFuc3BvcnQucmVhZHlTdGF0ZTsKLQotICAgIGlmKChyZWFkeVN0YXRl
ID4gMiAmJiAhUHJvdG90eXBlLkJyb3dzZXIuSUUpIHx8IHJlYWR5U3RhdGUgPT0gNCkgewotICAg
ICAgdGhpcy5zdGF0dXMgICAgICAgPSB0aGlzLmdldFN0YXR1cygpOwotICAgICAgdGhpcy5zdGF0
dXNUZXh0ICAgPSB0aGlzLmdldFN0YXR1c1RleHQoKTsKLSAgICAgIHRoaXMucmVzcG9uc2VUZXh0
ID0gU3RyaW5nLmludGVycHJldCh0cmFuc3BvcnQucmVzcG9uc2VUZXh0KTsKLSAgICAgIHRoaXMu
aGVhZGVySlNPTiAgID0gdGhpcy5fZ2V0SGVhZGVySlNPTigpOwotICAgIH0KLQotICAgIGlmKHJl
YWR5U3RhdGUgPT0gNCkgewotICAgICAgdmFyIHhtbCA9IHRyYW5zcG9ydC5yZXNwb25zZVhNTDsK
LSAgICAgIHRoaXMucmVzcG9uc2VYTUwgID0gT2JqZWN0LmlzVW5kZWZpbmVkKHhtbCkgPyBudWxs
IDogeG1sOwotICAgICAgdGhpcy5yZXNwb25zZUpTT04gPSB0aGlzLl9nZXRSZXNwb25zZUpTT04o
KTsKLSAgICB9Ci0gIH0sCi0KLSAgc3RhdHVzOiAgICAgIDAsCi0gIHN0YXR1c1RleHQ6ICcnLAot
Ci0gIGdldFN0YXR1czogQWpheC5SZXF1ZXN0LnByb3RvdHlwZS5nZXRTdGF0dXMsCi0KLSAgZ2V0
U3RhdHVzVGV4dDogZnVuY3Rpb24oKSB7Ci0gICAgdHJ5IHsKLSAgICAgIHJldHVybiB0aGlzLnRy
YW5zcG9ydC5zdGF0dXNUZXh0IHx8ICcnOwotICAgIH0gY2F0Y2ggKGUpIHsgcmV0dXJuICcnIH0K
LSAgfSwKLQotICBnZXRIZWFkZXI6IEFqYXguUmVxdWVzdC5wcm90b3R5cGUuZ2V0SGVhZGVyLAot
Ci0gIGdldEFsbEhlYWRlcnM6IGZ1bmN0aW9uKCkgewotICAgIHRyeSB7Ci0gICAgICByZXR1cm4g
dGhpcy5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKTsKLSAgICB9IGNhdGNoIChlKSB7IHJldHVybiBu
dWxsIH0KLSAgfSwKLQotICBnZXRSZXNwb25zZUhlYWRlcjogZnVuY3Rpb24obmFtZSkgewotICAg
IHJldHVybiB0aGlzLnRyYW5zcG9ydC5nZXRSZXNwb25zZUhlYWRlcihuYW1lKTsKLSAgfSwKLQot
ICBnZXRBbGxSZXNwb25zZUhlYWRlcnM6IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiB0aGlzLnRy
YW5zcG9ydC5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKTsKLSAgfSwKLQotICBfZ2V0SGVhZGVySlNP
TjogZnVuY3Rpb24oKSB7Ci0gICAgdmFyIGpzb24gPSB0aGlzLmdldEhlYWRlcignWC1KU09OJyk7
Ci0gICAgaWYgKCFqc29uKSByZXR1cm4gbnVsbDsKLSAgICBqc29uID0gZGVjb2RlVVJJQ29tcG9u
ZW50KGVzY2FwZShqc29uKSk7Ci0gICAgdHJ5IHsKLSAgICAgIHJldHVybiBqc29uLmV2YWxKU09O
KHRoaXMucmVxdWVzdC5vcHRpb25zLnNhbml0aXplSlNPTiB8fAotICAgICAgICAhdGhpcy5yZXF1
ZXN0LmlzU2FtZU9yaWdpbigpKTsKLSAgICB9IGNhdGNoIChlKSB7Ci0gICAgICB0aGlzLnJlcXVl
c3QuZGlzcGF0Y2hFeGNlcHRpb24oZSk7Ci0gICAgfQotICB9LAotCi0gIF9nZXRSZXNwb25zZUpT
T046IGZ1bmN0aW9uKCkgewotICAgIHZhciBvcHRpb25zID0gdGhpcy5yZXF1ZXN0Lm9wdGlvbnM7
Ci0gICAgaWYgKCFvcHRpb25zLmV2YWxKU09OIHx8IChvcHRpb25zLmV2YWxKU09OICE9ICdmb3Jj
ZScgJiYKLSAgICAgICEodGhpcy5nZXRIZWFkZXIoJ0NvbnRlbnQtdHlwZScpIHx8ICcnKS5pbmNs
dWRlKCdhcHBsaWNhdGlvbi9qc29uJykpIHx8Ci0gICAgICAgIHRoaXMucmVzcG9uc2VUZXh0LmJs
YW5rKCkpCi0gICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgdHJ5IHsKLSAgICAgIHJldHVybiB0
aGlzLnJlc3BvbnNlVGV4dC5ldmFsSlNPTihvcHRpb25zLnNhbml0aXplSlNPTiB8fAotICAgICAg
ICAhdGhpcy5yZXF1ZXN0LmlzU2FtZU9yaWdpbigpKTsKLSAgICB9IGNhdGNoIChlKSB7Ci0gICAg
ICB0aGlzLnJlcXVlc3QuZGlzcGF0Y2hFeGNlcHRpb24oZSk7Ci0gICAgfQotICB9Ci19KTsKLQot
QWpheC5VcGRhdGVyID0gQ2xhc3MuY3JlYXRlKEFqYXguUmVxdWVzdCwgewotICBpbml0aWFsaXpl
OiBmdW5jdGlvbigkc3VwZXIsIGNvbnRhaW5lciwgdXJsLCBvcHRpb25zKSB7Ci0gICAgdGhpcy5j
b250YWluZXIgPSB7Ci0gICAgICBzdWNjZXNzOiAoY29udGFpbmVyLnN1Y2Nlc3MgfHwgY29udGFp
bmVyKSwKLSAgICAgIGZhaWx1cmU6IChjb250YWluZXIuZmFpbHVyZSB8fCAoY29udGFpbmVyLnN1
Y2Nlc3MgPyBudWxsIDogY29udGFpbmVyKSkKLSAgICB9OwotCi0gICAgb3B0aW9ucyA9IE9iamVj
dC5jbG9uZShvcHRpb25zKTsKLSAgICB2YXIgb25Db21wbGV0ZSA9IG9wdGlvbnMub25Db21wbGV0
ZTsKLSAgICBvcHRpb25zLm9uQ29tcGxldGUgPSAoZnVuY3Rpb24ocmVzcG9uc2UsIGpzb24pIHsK
LSAgICAgIHRoaXMudXBkYXRlQ29udGVudChyZXNwb25zZS5yZXNwb25zZVRleHQpOwotICAgICAg
aWYgKE9iamVjdC5pc0Z1bmN0aW9uKG9uQ29tcGxldGUpKSBvbkNvbXBsZXRlKHJlc3BvbnNlLCBq
c29uKTsKLSAgICB9KS5iaW5kKHRoaXMpOwotCi0gICAgJHN1cGVyKHVybCwgb3B0aW9ucyk7Ci0g
IH0sCi0KLSAgdXBkYXRlQ29udGVudDogZnVuY3Rpb24ocmVzcG9uc2VUZXh0KSB7Ci0gICAgdmFy
IHJlY2VpdmVyID0gdGhpcy5jb250YWluZXJbdGhpcy5zdWNjZXNzKCkgPyAnc3VjY2VzcycgOiAn
ZmFpbHVyZSddLAotICAgICAgICBvcHRpb25zID0gdGhpcy5vcHRpb25zOwotCi0gICAgaWYgKCFv
cHRpb25zLmV2YWxTY3JpcHRzKSByZXNwb25zZVRleHQgPSByZXNwb25zZVRleHQuc3RyaXBTY3Jp
cHRzKCk7Ci0KLSAgICBpZiAocmVjZWl2ZXIgPSAkKHJlY2VpdmVyKSkgewotICAgICAgaWYgKG9w
dGlvbnMuaW5zZXJ0aW9uKSB7Ci0gICAgICAgIGlmIChPYmplY3QuaXNTdHJpbmcob3B0aW9ucy5p
bnNlcnRpb24pKSB7Ci0gICAgICAgICAgdmFyIGluc2VydGlvbiA9IHsgfTsgaW5zZXJ0aW9uW29w
dGlvbnMuaW5zZXJ0aW9uXSA9IHJlc3BvbnNlVGV4dDsKLSAgICAgICAgICByZWNlaXZlci5pbnNl
cnQoaW5zZXJ0aW9uKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIG9wdGlvbnMuaW5zZXJ0aW9u
KHJlY2VpdmVyLCByZXNwb25zZVRleHQpOwotICAgICAgfQotICAgICAgZWxzZSByZWNlaXZlci51
cGRhdGUocmVzcG9uc2VUZXh0KTsKLSAgICB9Ci0gIH0KLX0pOwotCi1BamF4LlBlcmlvZGljYWxV
cGRhdGVyID0gQ2xhc3MuY3JlYXRlKEFqYXguQmFzZSwgewotICBpbml0aWFsaXplOiBmdW5jdGlv
bigkc3VwZXIsIGNvbnRhaW5lciwgdXJsLCBvcHRpb25zKSB7Ci0gICAgJHN1cGVyKG9wdGlvbnMp
OwotICAgIHRoaXMub25Db21wbGV0ZSA9IHRoaXMub3B0aW9ucy5vbkNvbXBsZXRlOwotCi0gICAg
dGhpcy5mcmVxdWVuY3kgPSAodGhpcy5vcHRpb25zLmZyZXF1ZW5jeSB8fCAyKTsKLSAgICB0aGlz
LmRlY2F5ID0gKHRoaXMub3B0aW9ucy5kZWNheSB8fCAxKTsKLQotICAgIHRoaXMudXBkYXRlciA9
IHsgfTsKLSAgICB0aGlzLmNvbnRhaW5lciA9IGNvbnRhaW5lcjsKLSAgICB0aGlzLnVybCA9IHVy
bDsKLQotICAgIHRoaXMuc3RhcnQoKTsKLSAgfSwKLQotICBzdGFydDogZnVuY3Rpb24oKSB7Ci0g
ICAgdGhpcy5vcHRpb25zLm9uQ29tcGxldGUgPSB0aGlzLnVwZGF0ZUNvbXBsZXRlLmJpbmQodGhp
cyk7Ci0gICAgdGhpcy5vblRpbWVyRXZlbnQoKTsKLSAgfSwKLQotICBzdG9wOiBmdW5jdGlvbigp
IHsKLSAgICB0aGlzLnVwZGF0ZXIub3B0aW9ucy5vbkNvbXBsZXRlID0gdW5kZWZpbmVkOwotICAg
IGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKTsKLSAgICAodGhpcy5vbkNvbXBsZXRlIHx8IFByb3Rv
dHlwZS5lbXB0eUZ1bmN0aW9uKS5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwotICB9LAotCi0gIHVw
ZGF0ZUNvbXBsZXRlOiBmdW5jdGlvbihyZXNwb25zZSkgewotICAgIGlmICh0aGlzLm9wdGlvbnMu
ZGVjYXkpIHsKLSAgICAgIHRoaXMuZGVjYXkgPSAocmVzcG9uc2UucmVzcG9uc2VUZXh0ID09IHRo
aXMubGFzdFRleHQgPwotICAgICAgICB0aGlzLmRlY2F5ICogdGhpcy5vcHRpb25zLmRlY2F5IDog
MSk7Ci0KLSAgICAgIHRoaXMubGFzdFRleHQgPSByZXNwb25zZS5yZXNwb25zZVRleHQ7Ci0gICAg
fQotICAgIHRoaXMudGltZXIgPSB0aGlzLm9uVGltZXJFdmVudC5iaW5kKHRoaXMpLmRlbGF5KHRo
aXMuZGVjYXkgKiB0aGlzLmZyZXF1ZW5jeSk7Ci0gIH0sCi0KLSAgb25UaW1lckV2ZW50OiBmdW5j
dGlvbigpIHsKLSAgICB0aGlzLnVwZGF0ZXIgPSBuZXcgQWpheC5VcGRhdGVyKHRoaXMuY29udGFp
bmVyLCB0aGlzLnVybCwgdGhpcy5vcHRpb25zKTsKLSAgfQotfSk7Ci1mdW5jdGlvbiAkKGVsZW1l
bnQpIHsKLSAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7Ci0gICAgZm9yICh2YXIgaSA9IDAs
IGVsZW1lbnRzID0gW10sIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkr
KykKLSAgICAgIGVsZW1lbnRzLnB1c2goJChhcmd1bWVudHNbaV0pKTsKLSAgICByZXR1cm4gZWxl
bWVudHM7Ci0gIH0KLSAgaWYgKE9iamVjdC5pc1N0cmluZyhlbGVtZW50KSkKLSAgICBlbGVtZW50
ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWxlbWVudCk7Ci0gIHJldHVybiBFbGVtZW50LmV4
dGVuZChlbGVtZW50KTsKLX0KLQotaWYgKFByb3RvdHlwZS5Ccm93c2VyRmVhdHVyZXMuWFBhdGgp
IHsKLSAgZG9jdW1lbnQuX2dldEVsZW1lbnRzQnlYUGF0aCA9IGZ1bmN0aW9uKGV4cHJlc3Npb24s
IHBhcmVudEVsZW1lbnQpIHsKLSAgICB2YXIgcmVzdWx0cyA9IFtdOwotICAgIHZhciBxdWVyeSA9
IGRvY3VtZW50LmV2YWx1YXRlKGV4cHJlc3Npb24sICQocGFyZW50RWxlbWVudCkgfHwgZG9jdW1l
bnQsCi0gICAgICBudWxsLCBYUGF0aFJlc3VsdC5PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSwg
bnVsbCk7Ci0gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IHF1ZXJ5LnNuYXBzaG90TGVuZ3Ro
OyBpIDwgbGVuZ3RoOyBpKyspCi0gICAgICByZXN1bHRzLnB1c2goRWxlbWVudC5leHRlbmQocXVl
cnkuc25hcHNob3RJdGVtKGkpKSk7Ci0gICAgcmV0dXJuIHJlc3VsdHM7Ci0gIH07Ci19Ci0KLS8q
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0qLwotCi1pZiAoIXdpbmRvdy5Ob2RlKSB2YXIgTm9kZSA9IHsgfTsK
LQotaWYgKCFOb2RlLkVMRU1FTlRfTk9ERSkgewotICAvLyBET00gbGV2ZWwgMiBFQ01BU2NyaXB0
IExhbmd1YWdlIEJpbmRpbmcKLSAgT2JqZWN0LmV4dGVuZChOb2RlLCB7Ci0gICAgRUxFTUVOVF9O
T0RFOiAxLAotICAgIEFUVFJJQlVURV9OT0RFOiAyLAotICAgIFRFWFRfTk9ERTogMywKLSAgICBD
REFUQV9TRUNUSU9OX05PREU6IDQsCi0gICAgRU5USVRZX1JFRkVSRU5DRV9OT0RFOiA1LAotICAg
IEVOVElUWV9OT0RFOiA2LAotICAgIFBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERTogNywKLSAg
ICBDT01NRU5UX05PREU6IDgsCi0gICAgRE9DVU1FTlRfTk9ERTogOSwKLSAgICBET0NVTUVOVF9U
WVBFX05PREU6IDEwLAotICAgIERPQ1VNRU5UX0ZSQUdNRU5UX05PREU6IDExLAotICAgIE5PVEFU
SU9OX05PREU6IDEyCi0gIH0pOwotfQotCi0oZnVuY3Rpb24oKSB7Ci0gIHZhciBlbGVtZW50ID0g
dGhpcy5FbGVtZW50OwotICB0aGlzLkVsZW1lbnQgPSBmdW5jdGlvbih0YWdOYW1lLCBhdHRyaWJ1
dGVzKSB7Ci0gICAgYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMgfHwgeyB9OwotICAgIHRhZ05hbWUg
PSB0YWdOYW1lLnRvTG93ZXJDYXNlKCk7Ci0gICAgdmFyIGNhY2hlID0gRWxlbWVudC5jYWNoZTsK
LSAgICBpZiAoUHJvdG90eXBlLkJyb3dzZXIuSUUgJiYgYXR0cmlidXRlcy5uYW1lKSB7Ci0gICAg
ICB0YWdOYW1lID0gJzwnICsgdGFnTmFtZSArICcgbmFtZT0iJyArIGF0dHJpYnV0ZXMubmFtZSAr
ICciPic7Ci0gICAgICBkZWxldGUgYXR0cmlidXRlcy5uYW1lOwotICAgICAgcmV0dXJuIEVsZW1l
bnQud3JpdGVBdHRyaWJ1dGUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKSwgYXR0cmli
dXRlcyk7Ci0gICAgfQotICAgIGlmICghY2FjaGVbdGFnTmFtZV0pIGNhY2hlW3RhZ05hbWVdID0g
RWxlbWVudC5leHRlbmQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKSk7Ci0gICAgcmV0
dXJuIEVsZW1lbnQud3JpdGVBdHRyaWJ1dGUoY2FjaGVbdGFnTmFtZV0uY2xvbmVOb2RlKGZhbHNl
KSwgYXR0cmlidXRlcyk7Ci0gIH07Ci0gIE9iamVjdC5leHRlbmQodGhpcy5FbGVtZW50LCBlbGVt
ZW50IHx8IHsgfSk7Ci19KS5jYWxsKHdpbmRvdyk7Ci0KLUVsZW1lbnQuY2FjaGUgPSB7IH07Ci0K
LUVsZW1lbnQuTWV0aG9kcyA9IHsKLSAgdmlzaWJsZTogZnVuY3Rpb24oZWxlbWVudCkgewotICAg
IHJldHVybiAkKGVsZW1lbnQpLnN0eWxlLmRpc3BsYXkgIT0gJ25vbmUnOwotICB9LAotCi0gIHRv
Z2dsZTogZnVuY3Rpb24oZWxlbWVudCkgewotICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwotICAg
IEVsZW1lbnRbRWxlbWVudC52aXNpYmxlKGVsZW1lbnQpID8gJ2hpZGUnIDogJ3Nob3cnXShlbGVt
ZW50KTsKLSAgICByZXR1cm4gZWxlbWVudDsKLSAgfSwKLQotICBoaWRlOiBmdW5jdGlvbihlbGVt
ZW50KSB7Ci0gICAgJChlbGVtZW50KS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwotICAgIHJldHVy
biBlbGVtZW50OwotICB9LAotCi0gIHNob3c6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKLSAgICAkKGVs
ZW1lbnQpLnN0eWxlLmRpc3BsYXkgPSAnJzsKLSAgICByZXR1cm4gZWxlbWVudDsKLSAgfSwKLQot
ICByZW1vdmU6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKLSAgICBlbGVtZW50ID0gJChlbGVtZW50KTsK
LSAgICBlbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZWxlbWVudCk7Ci0gICAgcmV0dXJu
IGVsZW1lbnQ7Ci0gIH0sCi0KLSAgdXBkYXRlOiBmdW5jdGlvbihlbGVtZW50LCBjb250ZW50KSB7
Ci0gICAgZWxlbWVudCA9ICQoZWxlbWVudCk7Ci0gICAgaWYgKGNvbnRlbnQgJiYgY29udGVudC50
b0VsZW1lbnQpIGNvbnRlbnQgPSBjb250ZW50LnRvRWxlbWVudCgpOwotICAgIGlmIChPYmplY3Qu
aXNFbGVtZW50KGNvbnRlbnQpKSByZXR1cm4gZWxlbWVudC51cGRhdGUoKS5pbnNlcnQoY29udGVu
dCk7Ci0gICAgY29udGVudCA9IE9iamVjdC50b0hUTUwoY29udGVudCk7Ci0gICAgZWxlbWVudC5p
bm5lckhUTUwgPSBjb250ZW50LnN0cmlwU2NyaXB0cygpOwotICAgIGNvbnRlbnQuZXZhbFNjcmlw
dHMuYmluZChjb250ZW50KS5kZWZlcigpOwotICAgIHJldHVybiBlbGVtZW50OwotICB9LAotCi0g
IHJlcGxhY2U6IGZ1bmN0aW9uKGVsZW1lbnQsIGNvbnRlbnQpIHsKLSAgICBlbGVtZW50ID0gJChl
bGVtZW50KTsKLSAgICBpZiAoY29udGVudCAmJiBjb250ZW50LnRvRWxlbWVudCkgY29udGVudCA9
IGNvbnRlbnQudG9FbGVtZW50KCk7Ci0gICAgZWxzZSBpZiAoIU9iamVjdC5pc0VsZW1lbnQoY29u
dGVudCkpIHsKLSAgICAgIGNvbnRlbnQgPSBPYmplY3QudG9IVE1MKGNvbnRlbnQpOwotICAgICAg
dmFyIHJhbmdlID0gZWxlbWVudC5vd25lckRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7Ci0gICAgICBy
YW5nZS5zZWxlY3ROb2RlKGVsZW1lbnQpOwotICAgICAgY29udGVudC5ldmFsU2NyaXB0cy5iaW5k
KGNvbnRlbnQpLmRlZmVyKCk7Ci0gICAgICBjb250ZW50ID0gcmFuZ2UuY3JlYXRlQ29udGV4dHVh
bEZyYWdtZW50KGNvbnRlbnQuc3RyaXBTY3JpcHRzKCkpOwotICAgIH0KLSAgICBlbGVtZW50LnBh
cmVudE5vZGUucmVwbGFjZUNoaWxkKGNvbnRlbnQsIGVsZW1lbnQpOwotICAgIHJldHVybiBlbGVt
ZW50OwotICB9LAotCi0gIGluc2VydDogZnVuY3Rpb24oZWxlbWVudCwgaW5zZXJ0aW9ucykgewot
ICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwotCi0gICAgaWYgKE9iamVjdC5pc1N0cmluZyhpbnNl
cnRpb25zKSB8fCBPYmplY3QuaXNOdW1iZXIoaW5zZXJ0aW9ucykgfHwKLSAgICAgICAgT2JqZWN0
LmlzRWxlbWVudChpbnNlcnRpb25zKSB8fCAoaW5zZXJ0aW9ucyAmJiAoaW5zZXJ0aW9ucy50b0Vs
ZW1lbnQgfHwgaW5zZXJ0aW9ucy50b0hUTUwpKSkKLSAgICAgICAgICBpbnNlcnRpb25zID0ge2Jv
dHRvbTppbnNlcnRpb25zfTsKLQotICAgIHZhciBjb250ZW50LCBpbnNlcnQsIHRhZ05hbWUsIGNo
aWxkTm9kZXM7Ci0KLSAgICBmb3IgKHZhciBwb3NpdGlvbiBpbiBpbnNlcnRpb25zKSB7Ci0gICAg
ICBjb250ZW50ICA9IGluc2VydGlvbnNbcG9zaXRpb25dOwotICAgICAgcG9zaXRpb24gPSBwb3Np
dGlvbi50b0xvd2VyQ2FzZSgpOwotICAgICAgaW5zZXJ0ID0gRWxlbWVudC5faW5zZXJ0aW9uVHJh
bnNsYXRpb25zW3Bvc2l0aW9uXTsKLQotICAgICAgaWYgKGNvbnRlbnQgJiYgY29udGVudC50b0Vs
ZW1lbnQpIGNvbnRlbnQgPSBjb250ZW50LnRvRWxlbWVudCgpOwotICAgICAgaWYgKE9iamVjdC5p
c0VsZW1lbnQoY29udGVudCkpIHsKLSAgICAgICAgaW5zZXJ0KGVsZW1lbnQsIGNvbnRlbnQpOwot
ICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLQotICAgICAgY29udGVudCA9IE9iamVjdC50b0hU
TUwoY29udGVudCk7Ci0KLSAgICAgIHRhZ05hbWUgPSAoKHBvc2l0aW9uID09ICdiZWZvcmUnIHx8
IHBvc2l0aW9uID09ICdhZnRlcicpCi0gICAgICAgID8gZWxlbWVudC5wYXJlbnROb2RlIDogZWxl
bWVudCkudGFnTmFtZS50b1VwcGVyQ2FzZSgpOwotCi0gICAgICBjaGlsZE5vZGVzID0gRWxlbWVu
dC5fZ2V0Q29udGVudEZyb21Bbm9ueW1vdXNFbGVtZW50KHRhZ05hbWUsIGNvbnRlbnQuc3RyaXBT
Y3JpcHRzKCkpOwotCi0gICAgICBpZiAocG9zaXRpb24gPT0gJ3RvcCcgfHwgcG9zaXRpb24gPT0g
J2FmdGVyJykgY2hpbGROb2Rlcy5yZXZlcnNlKCk7Ci0gICAgICBjaGlsZE5vZGVzLmVhY2goaW5z
ZXJ0LmN1cnJ5KGVsZW1lbnQpKTsKLQotICAgICAgY29udGVudC5ldmFsU2NyaXB0cy5iaW5kKGNv
bnRlbnQpLmRlZmVyKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGVsZW1lbnQ7Ci0gIH0sCi0KLSAg
d3JhcDogZnVuY3Rpb24oZWxlbWVudCwgd3JhcHBlciwgYXR0cmlidXRlcykgewotICAgIGVsZW1l
bnQgPSAkKGVsZW1lbnQpOwotICAgIGlmIChPYmplY3QuaXNFbGVtZW50KHdyYXBwZXIpKQotICAg
ICAgJCh3cmFwcGVyKS53cml0ZUF0dHJpYnV0ZShhdHRyaWJ1dGVzIHx8IHsgfSk7Ci0gICAgZWxz
ZSBpZiAoT2JqZWN0LmlzU3RyaW5nKHdyYXBwZXIpKSB3cmFwcGVyID0gbmV3IEVsZW1lbnQod3Jh
cHBlciwgYXR0cmlidXRlcyk7Ci0gICAgZWxzZSB3cmFwcGVyID0gbmV3IEVsZW1lbnQoJ2Rpdics
IHdyYXBwZXIpOwotICAgIGlmIChlbGVtZW50LnBhcmVudE5vZGUpCi0gICAgICBlbGVtZW50LnBh
cmVudE5vZGUucmVwbGFjZUNoaWxkKHdyYXBwZXIsIGVsZW1lbnQpOwotICAgIHdyYXBwZXIuYXBw
ZW5kQ2hpbGQoZWxlbWVudCk7Ci0gICAgcmV0dXJuIHdyYXBwZXI7Ci0gIH0sCi0KLSAgaW5zcGVj
dDogZnVuY3Rpb24oZWxlbWVudCkgewotICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwotICAgIHZh
ciByZXN1bHQgPSAnPCcgKyBlbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKTsKLSAgICAkSCh7
J2lkJzogJ2lkJywgJ2NsYXNzTmFtZSc6ICdjbGFzcyd9KS5lYWNoKGZ1bmN0aW9uKHBhaXIpIHsK
LSAgICAgIHZhciBwcm9wZXJ0eSA9IHBhaXIuZmlyc3QoKSwgYXR0cmlidXRlID0gcGFpci5sYXN0
KCk7Ci0gICAgICB2YXIgdmFsdWUgPSAoZWxlbWVudFtwcm9wZXJ0eV0gfHwgJycpLnRvU3RyaW5n
KCk7Ci0gICAgICBpZiAodmFsdWUpIHJlc3VsdCArPSAnICcgKyBhdHRyaWJ1dGUgKyAnPScgKyB2
YWx1ZS5pbnNwZWN0KHRydWUpOwotICAgIH0pOwotICAgIHJldHVybiByZXN1bHQgKyAnPic7Ci0g
IH0sCi0KLSAgcmVjdXJzaXZlbHlDb2xsZWN0OiBmdW5jdGlvbihlbGVtZW50LCBwcm9wZXJ0eSkg
ewotICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwotICAgIHZhciBlbGVtZW50cyA9IFtdOwotICAg
IHdoaWxlIChlbGVtZW50ID0gZWxlbWVudFtwcm9wZXJ0eV0pCi0gICAgICBpZiAoZWxlbWVudC5u
b2RlVHlwZSA9PSAxKQotICAgICAgICBlbGVtZW50cy5wdXNoKEVsZW1lbnQuZXh0ZW5kKGVsZW1l
bnQpKTsKLSAgICByZXR1cm4gZWxlbWVudHM7Ci0gIH0sCi0KLSAgYW5jZXN0b3JzOiBmdW5jdGlv
bihlbGVtZW50KSB7Ci0gICAgcmV0dXJuICQoZWxlbWVudCkucmVjdXJzaXZlbHlDb2xsZWN0KCdw
YXJlbnROb2RlJyk7Ci0gIH0sCi0KLSAgZGVzY2VuZGFudHM6IGZ1bmN0aW9uKGVsZW1lbnQpIHsK
LSAgICByZXR1cm4gJChlbGVtZW50KS5zZWxlY3QoIioiKTsKLSAgfSwKLQotICBmaXJzdERlc2Nl
bmRhbnQ6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKLSAgICBlbGVtZW50ID0gJChlbGVtZW50KS5maXJz
dENoaWxkOwotICAgIHdoaWxlIChlbGVtZW50ICYmIGVsZW1lbnQubm9kZVR5cGUgIT0gMSkgZWxl
bWVudCA9IGVsZW1lbnQubmV4dFNpYmxpbmc7Ci0gICAgcmV0dXJuICQoZWxlbWVudCk7Ci0gIH0s
Ci0KLSAgaW1tZWRpYXRlRGVzY2VuZGFudHM6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKLSAgICBpZiAo
IShlbGVtZW50ID0gJChlbGVtZW50KS5maXJzdENoaWxkKSkgcmV0dXJuIFtdOwotICAgIHdoaWxl
IChlbGVtZW50ICYmIGVsZW1lbnQubm9kZVR5cGUgIT0gMSkgZWxlbWVudCA9IGVsZW1lbnQubmV4
dFNpYmxpbmc7Ci0gICAgaWYgKGVsZW1lbnQpIHJldHVybiBbZWxlbWVudF0uY29uY2F0KCQoZWxl
bWVudCkubmV4dFNpYmxpbmdzKCkpOwotICAgIHJldHVybiBbXTsKLSAgfSwKLQotICBwcmV2aW91
c1NpYmxpbmdzOiBmdW5jdGlvbihlbGVtZW50KSB7Ci0gICAgcmV0dXJuICQoZWxlbWVudCkucmVj
dXJzaXZlbHlDb2xsZWN0KCdwcmV2aW91c1NpYmxpbmcnKTsKLSAgfSwKLQotICBuZXh0U2libGlu
Z3M6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKLSAgICByZXR1cm4gJChlbGVtZW50KS5yZWN1cnNpdmVs
eUNvbGxlY3QoJ25leHRTaWJsaW5nJyk7Ci0gIH0sCi0KLSAgc2libGluZ3M6IGZ1bmN0aW9uKGVs
ZW1lbnQpIHsKLSAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKLSAgICByZXR1cm4gZWxlbWVudC5w
cmV2aW91c1NpYmxpbmdzKCkucmV2ZXJzZSgpLmNvbmNhdChlbGVtZW50Lm5leHRTaWJsaW5ncygp
KTsKLSAgfSwKLQotICBtYXRjaDogZnVuY3Rpb24oZWxlbWVudCwgc2VsZWN0b3IpIHsKLSAgICBp
ZiAoT2JqZWN0LmlzU3RyaW5nKHNlbGVjdG9yKSkKLSAgICAgIHNlbGVjdG9yID0gbmV3IFNlbGVj
dG9yKHNlbGVjdG9yKTsKLSAgICByZXR1cm4gc2VsZWN0b3IubWF0Y2goJChlbGVtZW50KSk7Ci0g
IH0sCi0KLSAgdXA6IGZ1bmN0aW9uKGVsZW1lbnQsIGV4cHJlc3Npb24sIGluZGV4KSB7Ci0gICAg
ZWxlbWVudCA9ICQoZWxlbWVudCk7Ci0gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMSkgcmV0
dXJuICQoZWxlbWVudC5wYXJlbnROb2RlKTsKLSAgICB2YXIgYW5jZXN0b3JzID0gZWxlbWVudC5h
bmNlc3RvcnMoKTsKLSAgICByZXR1cm4gT2JqZWN0LmlzTnVtYmVyKGV4cHJlc3Npb24pID8gYW5j
ZXN0b3JzW2V4cHJlc3Npb25dIDoKLSAgICAgIFNlbGVjdG9yLmZpbmRFbGVtZW50KGFuY2VzdG9y
cywgZXhwcmVzc2lvbiwgaW5kZXgpOwotICB9LAotCi0gIGRvd246IGZ1bmN0aW9uKGVsZW1lbnQs
IGV4cHJlc3Npb24sIGluZGV4KSB7Ci0gICAgZWxlbWVudCA9ICQoZWxlbWVudCk7Ci0gICAgaWYg
KGFyZ3VtZW50cy5sZW5ndGggPT0gMSkgcmV0dXJuIGVsZW1lbnQuZmlyc3REZXNjZW5kYW50KCk7
Ci0gICAgcmV0dXJuIE9iamVjdC5pc051bWJlcihleHByZXNzaW9uKSA/IGVsZW1lbnQuZGVzY2Vu
ZGFudHMoKVtleHByZXNzaW9uXSA6Ci0gICAgICBlbGVtZW50LnNlbGVjdChleHByZXNzaW9uKVtp
bmRleCB8fCAwXTsKLSAgfSwKLQotICBwcmV2aW91czogZnVuY3Rpb24oZWxlbWVudCwgZXhwcmVz
c2lvbiwgaW5kZXgpIHsKLSAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKLSAgICBpZiAoYXJndW1l
bnRzLmxlbmd0aCA9PSAxKSByZXR1cm4gJChTZWxlY3Rvci5oYW5kbGVycy5wcmV2aW91c0VsZW1l
bnRTaWJsaW5nKGVsZW1lbnQpKTsKLSAgICB2YXIgcHJldmlvdXNTaWJsaW5ncyA9IGVsZW1lbnQu
cHJldmlvdXNTaWJsaW5ncygpOwotICAgIHJldHVybiBPYmplY3QuaXNOdW1iZXIoZXhwcmVzc2lv
bikgPyBwcmV2aW91c1NpYmxpbmdzW2V4cHJlc3Npb25dIDoKLSAgICAgIFNlbGVjdG9yLmZpbmRF
bGVtZW50KHByZXZpb3VzU2libGluZ3MsIGV4cHJlc3Npb24sIGluZGV4KTsKLSAgfSwKLQotICBu
ZXh0OiBmdW5jdGlvbihlbGVtZW50LCBleHByZXNzaW9uLCBpbmRleCkgewotICAgIGVsZW1lbnQg
PSAkKGVsZW1lbnQpOwotICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpIHJldHVybiAkKFNl
bGVjdG9yLmhhbmRsZXJzLm5leHRFbGVtZW50U2libGluZyhlbGVtZW50KSk7Ci0gICAgdmFyIG5l
eHRTaWJsaW5ncyA9IGVsZW1lbnQubmV4dFNpYmxpbmdzKCk7Ci0gICAgcmV0dXJuIE9iamVjdC5p
c051bWJlcihleHByZXNzaW9uKSA/IG5leHRTaWJsaW5nc1tleHByZXNzaW9uXSA6Ci0gICAgICBT
ZWxlY3Rvci5maW5kRWxlbWVudChuZXh0U2libGluZ3MsIGV4cHJlc3Npb24sIGluZGV4KTsKLSAg
fSwKLQotICBzZWxlY3Q6IGZ1bmN0aW9uKCkgewotICAgIHZhciBhcmdzID0gJEEoYXJndW1lbnRz
KSwgZWxlbWVudCA9ICQoYXJncy5zaGlmdCgpKTsKLSAgICByZXR1cm4gU2VsZWN0b3IuZmluZENo
aWxkRWxlbWVudHMoZWxlbWVudCwgYXJncyk7Ci0gIH0sCi0KLSAgYWRqYWNlbnQ6IGZ1bmN0aW9u
KCkgewotICAgIHZhciBhcmdzID0gJEEoYXJndW1lbnRzKSwgZWxlbWVudCA9ICQoYXJncy5zaGlm
dCgpKTsKLSAgICByZXR1cm4gU2VsZWN0b3IuZmluZENoaWxkRWxlbWVudHMoZWxlbWVudC5wYXJl
bnROb2RlLCBhcmdzKS53aXRob3V0KGVsZW1lbnQpOwotICB9LAotCi0gIGlkZW50aWZ5OiBmdW5j
dGlvbihlbGVtZW50KSB7Ci0gICAgZWxlbWVudCA9ICQoZWxlbWVudCk7Ci0gICAgdmFyIGlkID0g
ZWxlbWVudC5yZWFkQXR0cmlidXRlKCdpZCcpLCBzZWxmID0gYXJndW1lbnRzLmNhbGxlZTsKLSAg
ICBpZiAoaWQpIHJldHVybiBpZDsKLSAgICBkbyB7IGlkID0gJ2Fub255bW91c19lbGVtZW50Xycg
KyBzZWxmLmNvdW50ZXIrKyB9IHdoaWxlICgkKGlkKSk7Ci0gICAgZWxlbWVudC53cml0ZUF0dHJp
YnV0ZSgnaWQnLCBpZCk7Ci0gICAgcmV0dXJuIGlkOwotICB9LAotCi0gIHJlYWRBdHRyaWJ1dGU6
IGZ1bmN0aW9uKGVsZW1lbnQsIG5hbWUpIHsKLSAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKLSAg
ICBpZiAoUHJvdG90eXBlLkJyb3dzZXIuSUUpIHsKLSAgICAgIHZhciB0ID0gRWxlbWVudC5fYXR0
cmlidXRlVHJhbnNsYXRpb25zLnJlYWQ7Ci0gICAgICBpZiAodC52YWx1ZXNbbmFtZV0pIHJldHVy
biB0LnZhbHVlc1tuYW1lXShlbGVtZW50LCBuYW1lKTsKLSAgICAgIGlmICh0Lm5hbWVzW25hbWVd
KSBuYW1lID0gdC5uYW1lc1tuYW1lXTsKLSAgICAgIGlmIChuYW1lLmluY2x1ZGUoJzonKSkgewot
ICAgICAgICByZXR1cm4gKCFlbGVtZW50LmF0dHJpYnV0ZXMgfHwgIWVsZW1lbnQuYXR0cmlidXRl
c1tuYW1lXSkgPyBudWxsIDoKLSAgICAgICAgIGVsZW1lbnQuYXR0cmlidXRlc1tuYW1lXS52YWx1
ZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGVsZW1lbnQuZ2V0QXR0cmlidXRlKG5hbWUp
OwotICB9LAotCi0gIHdyaXRlQXR0cmlidXRlOiBmdW5jdGlvbihlbGVtZW50LCBuYW1lLCB2YWx1
ZSkgewotICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwotICAgIHZhciBhdHRyaWJ1dGVzID0geyB9
LCB0ID0gRWxlbWVudC5fYXR0cmlidXRlVHJhbnNsYXRpb25zLndyaXRlOwotCi0gICAgaWYgKHR5
cGVvZiBuYW1lID09ICdvYmplY3QnKSBhdHRyaWJ1dGVzID0gbmFtZTsKLSAgICBlbHNlIGF0dHJp
YnV0ZXNbbmFtZV0gPSBPYmplY3QuaXNVbmRlZmluZWQodmFsdWUpID8gdHJ1ZSA6IHZhbHVlOwot
Ci0gICAgZm9yICh2YXIgYXR0ciBpbiBhdHRyaWJ1dGVzKSB7Ci0gICAgICBuYW1lID0gdC5uYW1l
c1thdHRyXSB8fCBhdHRyOwotICAgICAgdmFsdWUgPSBhdHRyaWJ1dGVzW2F0dHJdOwotICAgICAg
aWYgKHQudmFsdWVzW2F0dHJdKSBuYW1lID0gdC52YWx1ZXNbYXR0cl0oZWxlbWVudCwgdmFsdWUp
OwotICAgICAgaWYgKHZhbHVlID09PSBmYWxzZSB8fCB2YWx1ZSA9PT0gbnVsbCkKLSAgICAgICAg
ZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7Ci0gICAgICBlbHNlIGlmICh2YWx1ZSA9PT0g
dHJ1ZSkKLSAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUobmFtZSwgbmFtZSk7Ci0gICAgICBl
bHNlIGVsZW1lbnQuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTsKLSAgICB9Ci0gICAgcmV0dXJu
IGVsZW1lbnQ7Ci0gIH0sCi0KLSAgZ2V0SGVpZ2h0OiBmdW5jdGlvbihlbGVtZW50KSB7Ci0gICAg
cmV0dXJuICQoZWxlbWVudCkuZ2V0RGltZW5zaW9ucygpLmhlaWdodDsKLSAgfSwKLQotICBnZXRX
aWR0aDogZnVuY3Rpb24oZWxlbWVudCkgewotICAgIHJldHVybiAkKGVsZW1lbnQpLmdldERpbWVu
c2lvbnMoKS53aWR0aDsKLSAgfSwKLQotICBjbGFzc05hbWVzOiBmdW5jdGlvbihlbGVtZW50KSB7
Ci0gICAgcmV0dXJuIG5ldyBFbGVtZW50LkNsYXNzTmFtZXMoZWxlbWVudCk7Ci0gIH0sCi0KLSAg
aGFzQ2xhc3NOYW1lOiBmdW5jdGlvbihlbGVtZW50LCBjbGFzc05hbWUpIHsKLSAgICBpZiAoIShl
bGVtZW50ID0gJChlbGVtZW50KSkpIHJldHVybjsKLSAgICB2YXIgZWxlbWVudENsYXNzTmFtZSA9
IGVsZW1lbnQuY2xhc3NOYW1lOwotICAgIHJldHVybiAoZWxlbWVudENsYXNzTmFtZS5sZW5ndGgg
PiAwICYmIChlbGVtZW50Q2xhc3NOYW1lID09IGNsYXNzTmFtZSB8fAotICAgICAgbmV3IFJlZ0V4
cCgiKF58XFxzKSIgKyBjbGFzc05hbWUgKyAiKFxcc3wkKSIpLnRlc3QoZWxlbWVudENsYXNzTmFt
ZSkpKTsKLSAgfSwKLQotICBhZGRDbGFzc05hbWU6IGZ1bmN0aW9uKGVsZW1lbnQsIGNsYXNzTmFt
ZSkgewotICAgIGlmICghKGVsZW1lbnQgPSAkKGVsZW1lbnQpKSkgcmV0dXJuOwotICAgIGlmICgh
ZWxlbWVudC5oYXNDbGFzc05hbWUoY2xhc3NOYW1lKSkKLSAgICAgIGVsZW1lbnQuY2xhc3NOYW1l
ICs9IChlbGVtZW50LmNsYXNzTmFtZSA/ICcgJyA6ICcnKSArIGNsYXNzTmFtZTsKLSAgICByZXR1
cm4gZWxlbWVudDsKLSAgfSwKLQotICByZW1vdmVDbGFzc05hbWU6IGZ1bmN0aW9uKGVsZW1lbnQs
IGNsYXNzTmFtZSkgewotICAgIGlmICghKGVsZW1lbnQgPSAkKGVsZW1lbnQpKSkgcmV0dXJuOwot
ICAgIGVsZW1lbnQuY2xhc3NOYW1lID0gZWxlbWVudC5jbGFzc05hbWUucmVwbGFjZSgKLSAgICAg
IG5ldyBSZWdFeHAoIihefFxccyspIiArIGNsYXNzTmFtZSArICIoXFxzK3wkKSIpLCAnICcpLnN0
cmlwKCk7Ci0gICAgcmV0dXJuIGVsZW1lbnQ7Ci0gIH0sCi0KLSAgdG9nZ2xlQ2xhc3NOYW1lOiBm
dW5jdGlvbihlbGVtZW50LCBjbGFzc05hbWUpIHsKLSAgICBpZiAoIShlbGVtZW50ID0gJChlbGVt
ZW50KSkpIHJldHVybjsKLSAgICByZXR1cm4gZWxlbWVudFtlbGVtZW50Lmhhc0NsYXNzTmFtZShj
bGFzc05hbWUpID8KLSAgICAgICdyZW1vdmVDbGFzc05hbWUnIDogJ2FkZENsYXNzTmFtZSddKGNs
YXNzTmFtZSk7Ci0gIH0sCi0KLSAgLy8gcmVtb3ZlcyB3aGl0ZXNwYWNlLW9ubHkgdGV4dCBub2Rl
IGNoaWxkcmVuCi0gIGNsZWFuV2hpdGVzcGFjZTogZnVuY3Rpb24oZWxlbWVudCkgewotICAgIGVs
ZW1lbnQgPSAkKGVsZW1lbnQpOwotICAgIHZhciBub2RlID0gZWxlbWVudC5maXJzdENoaWxkOwot
ICAgIHdoaWxlIChub2RlKSB7Ci0gICAgICB2YXIgbmV4dE5vZGUgPSBub2RlLm5leHRTaWJsaW5n
OwotICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT0gMyAmJiAhL1xTLy50ZXN0KG5vZGUubm9kZVZh
bHVlKSkKLSAgICAgICAgZWxlbWVudC5yZW1vdmVDaGlsZChub2RlKTsKLSAgICAgIG5vZGUgPSBu
ZXh0Tm9kZTsKLSAgICB9Ci0gICAgcmV0dXJuIGVsZW1lbnQ7Ci0gIH0sCi0KLSAgZW1wdHk6IGZ1
bmN0aW9uKGVsZW1lbnQpIHsKLSAgICByZXR1cm4gJChlbGVtZW50KS5pbm5lckhUTUwuYmxhbmso
KTsKLSAgfSwKLQotICBkZXNjZW5kYW50T2Y6IGZ1bmN0aW9uKGVsZW1lbnQsIGFuY2VzdG9yKSB7
Ci0gICAgZWxlbWVudCA9ICQoZWxlbWVudCksIGFuY2VzdG9yID0gJChhbmNlc3Rvcik7Ci0gICAg
dmFyIG9yaWdpbmFsQW5jZXN0b3IgPSBhbmNlc3RvcjsKLQotICAgIGlmIChlbGVtZW50LmNvbXBh
cmVEb2N1bWVudFBvc2l0aW9uKQotICAgICAgcmV0dXJuIChlbGVtZW50LmNvbXBhcmVEb2N1bWVu
dFBvc2l0aW9uKGFuY2VzdG9yKSAmIDgpID09PSA4OwotCi0gICAgaWYgKGVsZW1lbnQuc291cmNl
SW5kZXggJiYgIVByb3RvdHlwZS5Ccm93c2VyLk9wZXJhKSB7Ci0gICAgICB2YXIgZSA9IGVsZW1l
bnQuc291cmNlSW5kZXgsIGEgPSBhbmNlc3Rvci5zb3VyY2VJbmRleCwKLSAgICAgICBuZXh0QW5j
ZXN0b3IgPSBhbmNlc3Rvci5uZXh0U2libGluZzsKLSAgICAgIGlmICghbmV4dEFuY2VzdG9yKSB7
Ci0gICAgICAgIGRvIHsgYW5jZXN0b3IgPSBhbmNlc3Rvci5wYXJlbnROb2RlOyB9Ci0gICAgICAg
IHdoaWxlICghKG5leHRBbmNlc3RvciA9IGFuY2VzdG9yLm5leHRTaWJsaW5nKSAmJiBhbmNlc3Rv
ci5wYXJlbnROb2RlKTsKLSAgICAgIH0KLSAgICAgIGlmIChuZXh0QW5jZXN0b3IgJiYgbmV4dEFu
Y2VzdG9yLnNvdXJjZUluZGV4KQotICAgICAgIHJldHVybiAoZSA+IGEgJiYgZSA8IG5leHRBbmNl
c3Rvci5zb3VyY2VJbmRleCk7Ci0gICAgfQotCi0gICAgd2hpbGUgKGVsZW1lbnQgPSBlbGVtZW50
LnBhcmVudE5vZGUpCi0gICAgICBpZiAoZWxlbWVudCA9PSBvcmlnaW5hbEFuY2VzdG9yKSByZXR1
cm4gdHJ1ZTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0sCi0KLSAgc2Nyb2xsVG86IGZ1bmN0aW9u
KGVsZW1lbnQpIHsKLSAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKLSAgICB2YXIgcG9zID0gZWxl
bWVudC5jdW11bGF0aXZlT2Zmc2V0KCk7Ci0gICAgd2luZG93LnNjcm9sbFRvKHBvc1swXSwgcG9z
WzFdKTsKLSAgICByZXR1cm4gZWxlbWVudDsKLSAgfSwKLQotICBnZXRTdHlsZTogZnVuY3Rpb24o
ZWxlbWVudCwgc3R5bGUpIHsKLSAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKLSAgICBzdHlsZSA9
IHN0eWxlID09ICdmbG9hdCcgPyAnY3NzRmxvYXQnIDogc3R5bGUuY2FtZWxpemUoKTsKLSAgICB2
YXIgdmFsdWUgPSBlbGVtZW50LnN0eWxlW3N0eWxlXTsKLSAgICBpZiAoIXZhbHVlKSB7Ci0gICAg
ICB2YXIgY3NzID0gZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50
LCBudWxsKTsKLSAgICAgIHZhbHVlID0gY3NzID8gY3NzW3N0eWxlXSA6IG51bGw7Ci0gICAgfQot
ICAgIGlmIChzdHlsZSA9PSAnb3BhY2l0eScpIHJldHVybiB2YWx1ZSA/IHBhcnNlRmxvYXQodmFs
dWUpIDogMS4wOwotICAgIHJldHVybiB2YWx1ZSA9PSAnYXV0bycgPyBudWxsIDogdmFsdWU7Ci0g
IH0sCi0KLSAgZ2V0T3BhY2l0eTogZnVuY3Rpb24oZWxlbWVudCkgewotICAgIHJldHVybiAkKGVs
ZW1lbnQpLmdldFN0eWxlKCdvcGFjaXR5Jyk7Ci0gIH0sCi0KLSAgc2V0U3R5bGU6IGZ1bmN0aW9u
KGVsZW1lbnQsIHN0eWxlcykgewotICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwotICAgIHZhciBl
bGVtZW50U3R5bGUgPSBlbGVtZW50LnN0eWxlLCBtYXRjaDsKLSAgICBpZiAoT2JqZWN0LmlzU3Ry
aW5nKHN0eWxlcykpIHsKLSAgICAgIGVsZW1lbnQuc3R5bGUuY3NzVGV4dCArPSAnOycgKyBzdHls
ZXM7Ci0gICAgICByZXR1cm4gc3R5bGVzLmluY2x1ZGUoJ29wYWNpdHknKSA/Ci0gICAgICAgIGVs
ZW1lbnQuc2V0T3BhY2l0eShzdHlsZXMubWF0Y2goL29wYWNpdHk6XHMqKFxkP1wuP1xkKikvKVsx
XSkgOiBlbGVtZW50OwotICAgIH0KLSAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBzdHlsZXMpCi0g
ICAgICBpZiAocHJvcGVydHkgPT0gJ29wYWNpdHknKSBlbGVtZW50LnNldE9wYWNpdHkoc3R5bGVz
W3Byb3BlcnR5XSk7Ci0gICAgICBlbHNlCi0gICAgICAgIGVsZW1lbnRTdHlsZVsocHJvcGVydHkg
PT0gJ2Zsb2F0JyB8fCBwcm9wZXJ0eSA9PSAnY3NzRmxvYXQnKSA/Ci0gICAgICAgICAgKE9iamVj
dC5pc1VuZGVmaW5lZChlbGVtZW50U3R5bGUuc3R5bGVGbG9hdCkgPyAnY3NzRmxvYXQnIDogJ3N0
eWxlRmxvYXQnKSA6Ci0gICAgICAgICAgICBwcm9wZXJ0eV0gPSBzdHlsZXNbcHJvcGVydHldOwot
Ci0gICAgcmV0dXJuIGVsZW1lbnQ7Ci0gIH0sCi0KLSAgc2V0T3BhY2l0eTogZnVuY3Rpb24oZWxl
bWVudCwgdmFsdWUpIHsKLSAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKLSAgICBlbGVtZW50LnN0
eWxlLm9wYWNpdHkgPSAodmFsdWUgPT0gMSB8fCB2YWx1ZSA9PT0gJycpID8gJycgOgotICAgICAg
KHZhbHVlIDwgMC4wMDAwMSkgPyAwIDogdmFsdWU7Ci0gICAgcmV0dXJuIGVsZW1lbnQ7Ci0gIH0s
Ci0KLSAgZ2V0RGltZW5zaW9uczogZnVuY3Rpb24oZWxlbWVudCkgewotICAgIGVsZW1lbnQgPSAk
KGVsZW1lbnQpOwotICAgIHZhciBkaXNwbGF5ID0gJChlbGVtZW50KS5nZXRTdHlsZSgnZGlzcGxh
eScpOwotICAgIGlmIChkaXNwbGF5ICE9ICdub25lJyAmJiBkaXNwbGF5ICE9IG51bGwpIC8vIFNh
ZmFyaSBidWcKLSAgICAgIHJldHVybiB7d2lkdGg6IGVsZW1lbnQub2Zmc2V0V2lkdGgsIGhlaWdo
dDogZWxlbWVudC5vZmZzZXRIZWlnaHR9OwotCi0gICAgLy8gQWxsICpXaWR0aCBhbmQgKkhlaWdo
dCBwcm9wZXJ0aWVzIGdpdmUgMCBvbiBlbGVtZW50cyB3aXRoIGRpc3BsYXkgbm9uZSwKLSAgICAv
LyBzbyBlbmFibGUgdGhlIGVsZW1lbnQgdGVtcG9yYXJpbHkKLSAgICB2YXIgZWxzID0gZWxlbWVu
dC5zdHlsZTsKLSAgICB2YXIgb3JpZ2luYWxWaXNpYmlsaXR5ID0gZWxzLnZpc2liaWxpdHk7Ci0g
ICAgdmFyIG9yaWdpbmFsUG9zaXRpb24gPSBlbHMucG9zaXRpb247Ci0gICAgdmFyIG9yaWdpbmFs
RGlzcGxheSA9IGVscy5kaXNwbGF5OwotICAgIGVscy52aXNpYmlsaXR5ID0gJ2hpZGRlbic7Ci0g
ICAgZWxzLnBvc2l0aW9uID0gJ2Fic29sdXRlJzsKLSAgICBlbHMuZGlzcGxheSA9ICdibG9jayc7
Ci0gICAgdmFyIG9yaWdpbmFsV2lkdGggPSBlbGVtZW50LmNsaWVudFdpZHRoOwotICAgIHZhciBv
cmlnaW5hbEhlaWdodCA9IGVsZW1lbnQuY2xpZW50SGVpZ2h0OwotICAgIGVscy5kaXNwbGF5ID0g
b3JpZ2luYWxEaXNwbGF5OwotICAgIGVscy5wb3NpdGlvbiA9IG9yaWdpbmFsUG9zaXRpb247Ci0g
ICAgZWxzLnZpc2liaWxpdHkgPSBvcmlnaW5hbFZpc2liaWxpdHk7Ci0gICAgcmV0dXJuIHt3aWR0
aDogb3JpZ2luYWxXaWR0aCwgaGVpZ2h0OiBvcmlnaW5hbEhlaWdodH07Ci0gIH0sCi0KLSAgbWFr
ZVBvc2l0aW9uZWQ6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKLSAgICBlbGVtZW50ID0gJChlbGVtZW50
KTsKLSAgICB2YXIgcG9zID0gRWxlbWVudC5nZXRTdHlsZShlbGVtZW50LCAncG9zaXRpb24nKTsK
LSAgICBpZiAocG9zID09ICdzdGF0aWMnIHx8ICFwb3MpIHsKLSAgICAgIGVsZW1lbnQuX21hZGVQ
b3NpdGlvbmVkID0gdHJ1ZTsKLSAgICAgIGVsZW1lbnQuc3R5bGUucG9zaXRpb24gPSAncmVsYXRp
dmUnOwotICAgICAgLy8gT3BlcmEgcmV0dXJucyB0aGUgb2Zmc2V0IHJlbGF0aXZlIHRvIHRoZSBw
b3NpdGlvbmluZyBjb250ZXh0LCB3aGVuIGFuCi0gICAgICAvLyBlbGVtZW50IGlzIHBvc2l0aW9u
IHJlbGF0aXZlIGJ1dCB0b3AgYW5kIGxlZnQgaGF2ZSBub3QgYmVlbiBkZWZpbmVkCi0gICAgICBp
ZiAod2luZG93Lm9wZXJhKSB7Ci0gICAgICAgIGVsZW1lbnQuc3R5bGUudG9wID0gMDsKLSAgICAg
ICAgZWxlbWVudC5zdHlsZS5sZWZ0ID0gMDsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGVs
ZW1lbnQ7Ci0gIH0sCi0KLSAgdW5kb1Bvc2l0aW9uZWQ6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKLSAg
ICBlbGVtZW50ID0gJChlbGVtZW50KTsKLSAgICBpZiAoZWxlbWVudC5fbWFkZVBvc2l0aW9uZWQp
IHsKLSAgICAgIGVsZW1lbnQuX21hZGVQb3NpdGlvbmVkID0gdW5kZWZpbmVkOwotICAgICAgZWxl
bWVudC5zdHlsZS5wb3NpdGlvbiA9Ci0gICAgICAgIGVsZW1lbnQuc3R5bGUudG9wID0KLSAgICAg
ICAgZWxlbWVudC5zdHlsZS5sZWZ0ID0KLSAgICAgICAgZWxlbWVudC5zdHlsZS5ib3R0b20gPQot
ICAgICAgICBlbGVtZW50LnN0eWxlLnJpZ2h0ID0gJyc7Ci0gICAgfQotICAgIHJldHVybiBlbGVt
ZW50OwotICB9LAotCi0gIG1ha2VDbGlwcGluZzogZnVuY3Rpb24oZWxlbWVudCkgewotICAgIGVs
ZW1lbnQgPSAkKGVsZW1lbnQpOwotICAgIGlmIChlbGVtZW50Ll9vdmVyZmxvdykgcmV0dXJuIGVs
ZW1lbnQ7Ci0gICAgZWxlbWVudC5fb3ZlcmZsb3cgPSBFbGVtZW50LmdldFN0eWxlKGVsZW1lbnQs
ICdvdmVyZmxvdycpIHx8ICdhdXRvJzsKLSAgICBpZiAoZWxlbWVudC5fb3ZlcmZsb3cgIT09ICdo
aWRkZW4nKQotICAgICAgZWxlbWVudC5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nOwotICAgIHJl
dHVybiBlbGVtZW50OwotICB9LAotCi0gIHVuZG9DbGlwcGluZzogZnVuY3Rpb24oZWxlbWVudCkg
ewotICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwotICAgIGlmICghZWxlbWVudC5fb3ZlcmZsb3cp
IHJldHVybiBlbGVtZW50OwotICAgIGVsZW1lbnQuc3R5bGUub3ZlcmZsb3cgPSBlbGVtZW50Ll9v
dmVyZmxvdyA9PSAnYXV0bycgPyAnJyA6IGVsZW1lbnQuX292ZXJmbG93OwotICAgIGVsZW1lbnQu
X292ZXJmbG93ID0gbnVsbDsKLSAgICByZXR1cm4gZWxlbWVudDsKLSAgfSwKLQotICBjdW11bGF0
aXZlT2Zmc2V0OiBmdW5jdGlvbihlbGVtZW50KSB7Ci0gICAgdmFyIHZhbHVlVCA9IDAsIHZhbHVl
TCA9IDA7Ci0gICAgZG8gewotICAgICAgdmFsdWVUICs9IGVsZW1lbnQub2Zmc2V0VG9wICB8fCAw
OwotICAgICAgdmFsdWVMICs9IGVsZW1lbnQub2Zmc2V0TGVmdCB8fCAwOwotICAgICAgZWxlbWVu
dCA9IGVsZW1lbnQub2Zmc2V0UGFyZW50OwotICAgIH0gd2hpbGUgKGVsZW1lbnQpOwotICAgIHJl
dHVybiBFbGVtZW50Ll9yZXR1cm5PZmZzZXQodmFsdWVMLCB2YWx1ZVQpOwotICB9LAotCi0gIHBv
c2l0aW9uZWRPZmZzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKLSAgICB2YXIgdmFsdWVUID0gMCwg
dmFsdWVMID0gMDsKLSAgICBkbyB7Ci0gICAgICB2YWx1ZVQgKz0gZWxlbWVudC5vZmZzZXRUb3Ag
IHx8IDA7Ci0gICAgICB2YWx1ZUwgKz0gZWxlbWVudC5vZmZzZXRMZWZ0IHx8IDA7Ci0gICAgICBl
bGVtZW50ID0gZWxlbWVudC5vZmZzZXRQYXJlbnQ7Ci0gICAgICBpZiAoZWxlbWVudCkgewotICAg
ICAgICBpZiAoZWxlbWVudC50YWdOYW1lID09ICdCT0RZJykgYnJlYWs7Ci0gICAgICAgIHZhciBw
ID0gRWxlbWVudC5nZXRTdHlsZShlbGVtZW50LCAncG9zaXRpb24nKTsKLSAgICAgICAgaWYgKHAg
IT09ICdzdGF0aWMnKSBicmVhazsKLSAgICAgIH0KLSAgICB9IHdoaWxlIChlbGVtZW50KTsKLSAg
ICByZXR1cm4gRWxlbWVudC5fcmV0dXJuT2Zmc2V0KHZhbHVlTCwgdmFsdWVUKTsKLSAgfSwKLQot
ICBhYnNvbHV0aXplOiBmdW5jdGlvbihlbGVtZW50KSB7Ci0gICAgZWxlbWVudCA9ICQoZWxlbWVu
dCk7Ci0gICAgaWYgKGVsZW1lbnQuZ2V0U3R5bGUoJ3Bvc2l0aW9uJykgPT0gJ2Fic29sdXRlJykg
cmV0dXJuOwotICAgIC8vIFBvc2l0aW9uLnByZXBhcmUoKTsgLy8gVG8gYmUgZG9uZSBtYW51YWxs
eSBieSBTY3JpcHR5IHdoZW4gaXQgbmVlZHMgaXQuCi0KLSAgICB2YXIgb2Zmc2V0cyA9IGVsZW1l
bnQucG9zaXRpb25lZE9mZnNldCgpOwotICAgIHZhciB0b3AgICAgID0gb2Zmc2V0c1sxXTsKLSAg
ICB2YXIgbGVmdCAgICA9IG9mZnNldHNbMF07Ci0gICAgdmFyIHdpZHRoICAgPSBlbGVtZW50LmNs
aWVudFdpZHRoOwotICAgIHZhciBoZWlnaHQgID0gZWxlbWVudC5jbGllbnRIZWlnaHQ7Ci0KLSAg
ICBlbGVtZW50Ll9vcmlnaW5hbExlZnQgICA9IGxlZnQgLSBwYXJzZUZsb2F0KGVsZW1lbnQuc3R5
bGUubGVmdCAgfHwgMCk7Ci0gICAgZWxlbWVudC5fb3JpZ2luYWxUb3AgICAgPSB0b3AgIC0gcGFy
c2VGbG9hdChlbGVtZW50LnN0eWxlLnRvcCB8fCAwKTsKLSAgICBlbGVtZW50Ll9vcmlnaW5hbFdp
ZHRoICA9IGVsZW1lbnQuc3R5bGUud2lkdGg7Ci0gICAgZWxlbWVudC5fb3JpZ2luYWxIZWlnaHQg
PSBlbGVtZW50LnN0eWxlLmhlaWdodDsKLQotICAgIGVsZW1lbnQuc3R5bGUucG9zaXRpb24gPSAn
YWJzb2x1dGUnOwotICAgIGVsZW1lbnQuc3R5bGUudG9wICAgID0gdG9wICsgJ3B4JzsKLSAgICBl
bGVtZW50LnN0eWxlLmxlZnQgICA9IGxlZnQgKyAncHgnOwotICAgIGVsZW1lbnQuc3R5bGUud2lk
dGggID0gd2lkdGggKyAncHgnOwotICAgIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gaGVpZ2h0ICsg
J3B4JzsKLSAgICByZXR1cm4gZWxlbWVudDsKLSAgfSwKLQotICByZWxhdGl2aXplOiBmdW5jdGlv
bihlbGVtZW50KSB7Ci0gICAgZWxlbWVudCA9ICQoZWxlbWVudCk7Ci0gICAgaWYgKGVsZW1lbnQu
Z2V0U3R5bGUoJ3Bvc2l0aW9uJykgPT0gJ3JlbGF0aXZlJykgcmV0dXJuOwotICAgIC8vIFBvc2l0
aW9uLnByZXBhcmUoKTsgLy8gVG8gYmUgZG9uZSBtYW51YWxseSBieSBTY3JpcHR5IHdoZW4gaXQg
bmVlZHMgaXQuCi0KLSAgICBlbGVtZW50LnN0eWxlLnBvc2l0aW9uID0gJ3JlbGF0aXZlJzsKLSAg
ICB2YXIgdG9wICA9IHBhcnNlRmxvYXQoZWxlbWVudC5zdHlsZS50b3AgIHx8IDApIC0gKGVsZW1l
bnQuX29yaWdpbmFsVG9wIHx8IDApOwotICAgIHZhciBsZWZ0ID0gcGFyc2VGbG9hdChlbGVtZW50
LnN0eWxlLmxlZnQgfHwgMCkgLSAoZWxlbWVudC5fb3JpZ2luYWxMZWZ0IHx8IDApOwotCi0gICAg
ZWxlbWVudC5zdHlsZS50b3AgICAgPSB0b3AgKyAncHgnOwotICAgIGVsZW1lbnQuc3R5bGUubGVm
dCAgID0gbGVmdCArICdweCc7Ci0gICAgZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBlbGVtZW50Ll9v
cmlnaW5hbEhlaWdodDsKLSAgICBlbGVtZW50LnN0eWxlLndpZHRoICA9IGVsZW1lbnQuX29yaWdp
bmFsV2lkdGg7Ci0gICAgcmV0dXJuIGVsZW1lbnQ7Ci0gIH0sCi0KLSAgY3VtdWxhdGl2ZVNjcm9s
bE9mZnNldDogZnVuY3Rpb24oZWxlbWVudCkgewotICAgIHZhciB2YWx1ZVQgPSAwLCB2YWx1ZUwg
PSAwOwotICAgIGRvIHsKLSAgICAgIHZhbHVlVCArPSBlbGVtZW50LnNjcm9sbFRvcCAgfHwgMDsK
LSAgICAgIHZhbHVlTCArPSBlbGVtZW50LnNjcm9sbExlZnQgfHwgMDsKLSAgICAgIGVsZW1lbnQg
PSBlbGVtZW50LnBhcmVudE5vZGU7Ci0gICAgfSB3aGlsZSAoZWxlbWVudCk7Ci0gICAgcmV0dXJu
IEVsZW1lbnQuX3JldHVybk9mZnNldCh2YWx1ZUwsIHZhbHVlVCk7Ci0gIH0sCi0KLSAgZ2V0T2Zm
c2V0UGFyZW50OiBmdW5jdGlvbihlbGVtZW50KSB7Ci0gICAgaWYgKGVsZW1lbnQub2Zmc2V0UGFy
ZW50KSByZXR1cm4gJChlbGVtZW50Lm9mZnNldFBhcmVudCk7Ci0gICAgaWYgKGVsZW1lbnQgPT0g
ZG9jdW1lbnQuYm9keSkgcmV0dXJuICQoZWxlbWVudCk7Ci0KLSAgICB3aGlsZSAoKGVsZW1lbnQg
PSBlbGVtZW50LnBhcmVudE5vZGUpICYmIGVsZW1lbnQgIT0gZG9jdW1lbnQuYm9keSkKLSAgICAg
IGlmIChFbGVtZW50LmdldFN0eWxlKGVsZW1lbnQsICdwb3NpdGlvbicpICE9ICdzdGF0aWMnKQot
ICAgICAgICByZXR1cm4gJChlbGVtZW50KTsKLQotICAgIHJldHVybiAkKGRvY3VtZW50LmJvZHkp
OwotICB9LAotCi0gIHZpZXdwb3J0T2Zmc2V0OiBmdW5jdGlvbihmb3JFbGVtZW50KSB7Ci0gICAg
dmFyIHZhbHVlVCA9IDAsIHZhbHVlTCA9IDA7Ci0KLSAgICB2YXIgZWxlbWVudCA9IGZvckVsZW1l
bnQ7Ci0gICAgZG8gewotICAgICAgdmFsdWVUICs9IGVsZW1lbnQub2Zmc2V0VG9wICB8fCAwOwot
ICAgICAgdmFsdWVMICs9IGVsZW1lbnQub2Zmc2V0TGVmdCB8fCAwOwotCi0gICAgICAvLyBTYWZh
cmkgZml4Ci0gICAgICBpZiAoZWxlbWVudC5vZmZzZXRQYXJlbnQgPT0gZG9jdW1lbnQuYm9keSAm
JgotICAgICAgICBFbGVtZW50LmdldFN0eWxlKGVsZW1lbnQsICdwb3NpdGlvbicpID09ICdhYnNv
bHV0ZScpIGJyZWFrOwotCi0gICAgfSB3aGlsZSAoZWxlbWVudCA9IGVsZW1lbnQub2Zmc2V0UGFy
ZW50KTsKLQotICAgIGVsZW1lbnQgPSBmb3JFbGVtZW50OwotICAgIGRvIHsKLSAgICAgIGlmICgh
UHJvdG90eXBlLkJyb3dzZXIuT3BlcmEgfHwgZWxlbWVudC50YWdOYW1lID09ICdCT0RZJykgewot
ICAgICAgICB2YWx1ZVQgLT0gZWxlbWVudC5zY3JvbGxUb3AgIHx8IDA7Ci0gICAgICAgIHZhbHVl
TCAtPSBlbGVtZW50LnNjcm9sbExlZnQgfHwgMDsKLSAgICAgIH0KLSAgICB9IHdoaWxlIChlbGVt
ZW50ID0gZWxlbWVudC5wYXJlbnROb2RlKTsKLQotICAgIHJldHVybiBFbGVtZW50Ll9yZXR1cm5P
ZmZzZXQodmFsdWVMLCB2YWx1ZVQpOwotICB9LAotCi0gIGNsb25lUG9zaXRpb246IGZ1bmN0aW9u
KGVsZW1lbnQsIHNvdXJjZSkgewotICAgIHZhciBvcHRpb25zID0gT2JqZWN0LmV4dGVuZCh7Ci0g
ICAgICBzZXRMZWZ0OiAgICB0cnVlLAotICAgICAgc2V0VG9wOiAgICAgdHJ1ZSwKLSAgICAgIHNl
dFdpZHRoOiAgIHRydWUsCi0gICAgICBzZXRIZWlnaHQ6ICB0cnVlLAotICAgICAgb2Zmc2V0VG9w
OiAgMCwKLSAgICAgIG9mZnNldExlZnQ6IDAKLSAgICB9LCBhcmd1bWVudHNbMl0gfHwgeyB9KTsK
LQotICAgIC8vIGZpbmQgcGFnZSBwb3NpdGlvbiBvZiBzb3VyY2UKLSAgICBzb3VyY2UgPSAkKHNv
dXJjZSk7Ci0gICAgdmFyIHAgPSBzb3VyY2Uudmlld3BvcnRPZmZzZXQoKTsKLQotICAgIC8vIGZp
bmQgY29vcmRpbmF0ZSBzeXN0ZW0gdG8gdXNlCi0gICAgZWxlbWVudCA9ICQoZWxlbWVudCk7Ci0g
ICAgdmFyIGRlbHRhID0gWzAsIDBdOwotICAgIHZhciBwYXJlbnQgPSBudWxsOwotICAgIC8vIGRl
bHRhIFswLDBdIHdpbGwgZG8gZmluZSB3aXRoIHBvc2l0aW9uOiBmaXhlZCBlbGVtZW50cywKLSAg
ICAvLyBwb3NpdGlvbjphYnNvbHV0ZSBuZWVkcyBvZmZzZXRQYXJlbnQgZGVsdGFzCi0gICAgaWYg
KEVsZW1lbnQuZ2V0U3R5bGUoZWxlbWVudCwgJ3Bvc2l0aW9uJykgPT0gJ2Fic29sdXRlJykgewot
ICAgICAgcGFyZW50ID0gZWxlbWVudC5nZXRPZmZzZXRQYXJlbnQoKTsKLSAgICAgIGRlbHRhID0g
cGFyZW50LnZpZXdwb3J0T2Zmc2V0KCk7Ci0gICAgfQotCi0gICAgLy8gY29ycmVjdCBieSBib2R5
IG9mZnNldHMgKGZpeGVzIFNhZmFyaSkKLSAgICBpZiAocGFyZW50ID09IGRvY3VtZW50LmJvZHkp
IHsKLSAgICAgIGRlbHRhWzBdIC09IGRvY3VtZW50LmJvZHkub2Zmc2V0TGVmdDsKLSAgICAgIGRl
bHRhWzFdIC09IGRvY3VtZW50LmJvZHkub2Zmc2V0VG9wOwotICAgIH0KLQotICAgIC8vIHNldCBw
b3NpdGlvbgotICAgIGlmIChvcHRpb25zLnNldExlZnQpICAgZWxlbWVudC5zdHlsZS5sZWZ0ICA9
IChwWzBdIC0gZGVsdGFbMF0gKyBvcHRpb25zLm9mZnNldExlZnQpICsgJ3B4JzsKLSAgICBpZiAo
b3B0aW9ucy5zZXRUb3ApICAgIGVsZW1lbnQuc3R5bGUudG9wICAgPSAocFsxXSAtIGRlbHRhWzFd
ICsgb3B0aW9ucy5vZmZzZXRUb3ApICsgJ3B4JzsKLSAgICBpZiAob3B0aW9ucy5zZXRXaWR0aCkg
IGVsZW1lbnQuc3R5bGUud2lkdGggPSBzb3VyY2Uub2Zmc2V0V2lkdGggKyAncHgnOwotICAgIGlm
IChvcHRpb25zLnNldEhlaWdodCkgZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBzb3VyY2Uub2Zmc2V0
SGVpZ2h0ICsgJ3B4JzsKLSAgICByZXR1cm4gZWxlbWVudDsKLSAgfQotfTsKLQotRWxlbWVudC5N
ZXRob2RzLmlkZW50aWZ5LmNvdW50ZXIgPSAxOwotCi1PYmplY3QuZXh0ZW5kKEVsZW1lbnQuTWV0
aG9kcywgewotICBnZXRFbGVtZW50c0J5U2VsZWN0b3I6IEVsZW1lbnQuTWV0aG9kcy5zZWxlY3Qs
Ci0gIGNoaWxkRWxlbWVudHM6IEVsZW1lbnQuTWV0aG9kcy5pbW1lZGlhdGVEZXNjZW5kYW50cwot
fSk7Ci0KLUVsZW1lbnQuX2F0dHJpYnV0ZVRyYW5zbGF0aW9ucyA9IHsKLSAgd3JpdGU6IHsKLSAg
ICBuYW1lczogewotICAgICAgY2xhc3NOYW1lOiAnY2xhc3MnLAotICAgICAgaHRtbEZvcjogICAn
Zm9yJwotICAgIH0sCi0gICAgdmFsdWVzOiB7IH0KLSAgfQotfTsKLQotaWYgKFByb3RvdHlwZS5C
cm93c2VyLk9wZXJhKSB7Ci0gIEVsZW1lbnQuTWV0aG9kcy5nZXRTdHlsZSA9IEVsZW1lbnQuTWV0
aG9kcy5nZXRTdHlsZS53cmFwKAotICAgIGZ1bmN0aW9uKHByb2NlZWQsIGVsZW1lbnQsIHN0eWxl
KSB7Ci0gICAgICBzd2l0Y2ggKHN0eWxlKSB7Ci0gICAgICAgIGNhc2UgJ2xlZnQnOiBjYXNlICd0
b3AnOiBjYXNlICdyaWdodCc6IGNhc2UgJ2JvdHRvbSc6Ci0gICAgICAgICAgaWYgKHByb2NlZWQo
ZWxlbWVudCwgJ3Bvc2l0aW9uJykgPT09ICdzdGF0aWMnKSByZXR1cm4gbnVsbDsKLSAgICAgICAg
Y2FzZSAnaGVpZ2h0JzogY2FzZSAnd2lkdGgnOgotICAgICAgICAgIC8vIHJldHVybnMgJzBweCcg
Zm9yIGhpZGRlbiBlbGVtZW50czsgd2Ugd2FudCBpdCB0byByZXR1cm4gbnVsbAotICAgICAgICAg
IGlmICghRWxlbWVudC52aXNpYmxlKGVsZW1lbnQpKSByZXR1cm4gbnVsbDsKLQotICAgICAgICAg
IC8vIHJldHVybnMgdGhlIGJvcmRlci1ib3ggZGltZW5zaW9ucyByYXRoZXIgdGhhbiB0aGUgY29u
dGVudC1ib3gKLSAgICAgICAgICAvLyBkaW1lbnNpb25zLCBzbyB3ZSBzdWJ0cmFjdCBwYWRkaW5n
IGFuZCBib3JkZXJzIGZyb20gdGhlIHZhbHVlCi0gICAgICAgICAgdmFyIGRpbSA9IHBhcnNlSW50
KHByb2NlZWQoZWxlbWVudCwgc3R5bGUpLCAxMCk7Ci0KLSAgICAgICAgICBpZiAoZGltICE9PSBl
bGVtZW50WydvZmZzZXQnICsgc3R5bGUuY2FwaXRhbGl6ZSgpXSkKLSAgICAgICAgICAgIHJldHVy
biBkaW0gKyAncHgnOwotCi0gICAgICAgICAgdmFyIHByb3BlcnRpZXM7Ci0gICAgICAgICAgaWYg
KHN0eWxlID09PSAnaGVpZ2h0JykgewotICAgICAgICAgICAgcHJvcGVydGllcyA9IFsnYm9yZGVy
LXRvcC13aWR0aCcsICdwYWRkaW5nLXRvcCcsCi0gICAgICAgICAgICAgJ3BhZGRpbmctYm90dG9t
JywgJ2JvcmRlci1ib3R0b20td2lkdGgnXTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICBwcm9wZXJ0aWVzID0gWydib3JkZXItbGVmdC13aWR0aCcsICdwYWRkaW5n
LWxlZnQnLAotICAgICAgICAgICAgICdwYWRkaW5nLXJpZ2h0JywgJ2JvcmRlci1yaWdodC13aWR0
aCddOwotICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gcHJvcGVydGllcy5pbmplY3QoZGlt
LCBmdW5jdGlvbihtZW1vLCBwcm9wZXJ0eSkgewotICAgICAgICAgICAgdmFyIHZhbCA9IHByb2Nl
ZWQoZWxlbWVudCwgcHJvcGVydHkpOwotICAgICAgICAgICAgcmV0dXJuIHZhbCA9PT0gbnVsbCA/
IG1lbW8gOiBtZW1vIC0gcGFyc2VJbnQodmFsLCAxMCk7Ci0gICAgICAgICAgfSkgKyAncHgnOwot
ICAgICAgICBkZWZhdWx0OiByZXR1cm4gcHJvY2VlZChlbGVtZW50LCBzdHlsZSk7Ci0gICAgICB9
Ci0gICAgfQotICApOwotCi0gIEVsZW1lbnQuTWV0aG9kcy5yZWFkQXR0cmlidXRlID0gRWxlbWVu
dC5NZXRob2RzLnJlYWRBdHRyaWJ1dGUud3JhcCgKLSAgICBmdW5jdGlvbihwcm9jZWVkLCBlbGVt
ZW50LCBhdHRyaWJ1dGUpIHsKLSAgICAgIGlmIChhdHRyaWJ1dGUgPT09ICd0aXRsZScpIHJldHVy
biBlbGVtZW50LnRpdGxlOwotICAgICAgcmV0dXJuIHByb2NlZWQoZWxlbWVudCwgYXR0cmlidXRl
KTsKLSAgICB9Ci0gICk7Ci19Ci0KLWVsc2UgaWYgKFByb3RvdHlwZS5Ccm93c2VyLklFKSB7Ci0g
IC8vIElFIGRvZXNuJ3QgcmVwb3J0IG9mZnNldHMgY29ycmVjdGx5IGZvciBzdGF0aWMgZWxlbWVu
dHMsIHNvIHdlIGNoYW5nZSB0aGVtCi0gIC8vIHRvICJyZWxhdGl2ZSIgdG8gZ2V0IHRoZSB2YWx1
ZXMsIHRoZW4gY2hhbmdlIHRoZW0gYmFjay4KLSAgRWxlbWVudC5NZXRob2RzLmdldE9mZnNldFBh
cmVudCA9IEVsZW1lbnQuTWV0aG9kcy5nZXRPZmZzZXRQYXJlbnQud3JhcCgKLSAgICBmdW5jdGlv
bihwcm9jZWVkLCBlbGVtZW50KSB7Ci0gICAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKLSAgICAg
IHZhciBwb3NpdGlvbiA9IGVsZW1lbnQuZ2V0U3R5bGUoJ3Bvc2l0aW9uJyk7Ci0gICAgICBpZiAo
cG9zaXRpb24gIT09ICdzdGF0aWMnKSByZXR1cm4gcHJvY2VlZChlbGVtZW50KTsKLSAgICAgIGVs
ZW1lbnQuc2V0U3R5bGUoeyBwb3NpdGlvbjogJ3JlbGF0aXZlJyB9KTsKLSAgICAgIHZhciB2YWx1
ZSA9IHByb2NlZWQoZWxlbWVudCk7Ci0gICAgICBlbGVtZW50LnNldFN0eWxlKHsgcG9zaXRpb246
IHBvc2l0aW9uIH0pOwotICAgICAgcmV0dXJuIHZhbHVlOwotICAgIH0KLSAgKTsKLQotICAkdygn
cG9zaXRpb25lZE9mZnNldCB2aWV3cG9ydE9mZnNldCcpLmVhY2goZnVuY3Rpb24obWV0aG9kKSB7
Ci0gICAgRWxlbWVudC5NZXRob2RzW21ldGhvZF0gPSBFbGVtZW50Lk1ldGhvZHNbbWV0aG9kXS53
cmFwKAotICAgICAgZnVuY3Rpb24ocHJvY2VlZCwgZWxlbWVudCkgewotICAgICAgICBlbGVtZW50
ID0gJChlbGVtZW50KTsKLSAgICAgICAgdmFyIHBvc2l0aW9uID0gZWxlbWVudC5nZXRTdHlsZSgn
cG9zaXRpb24nKTsKLSAgICAgICAgaWYgKHBvc2l0aW9uICE9PSAnc3RhdGljJykgcmV0dXJuIHBy
b2NlZWQoZWxlbWVudCk7Ci0gICAgICAgIC8vIFRyaWdnZXIgaGFzTGF5b3V0IG9uIHRoZSBvZmZz
ZXQgcGFyZW50IHNvIHRoYXQgSUU2IHJlcG9ydHMKLSAgICAgICAgLy8gYWNjdXJhdGUgb2Zmc2V0
VG9wIGFuZCBvZmZzZXRMZWZ0IHZhbHVlcyBmb3IgcG9zaXRpb246IGZpeGVkLgotICAgICAgICB2
YXIgb2Zmc2V0UGFyZW50ID0gZWxlbWVudC5nZXRPZmZzZXRQYXJlbnQoKTsKLSAgICAgICAgaWYg
KG9mZnNldFBhcmVudCAmJiBvZmZzZXRQYXJlbnQuZ2V0U3R5bGUoJ3Bvc2l0aW9uJykgPT09ICdm
aXhlZCcpCi0gICAgICAgICAgb2Zmc2V0UGFyZW50LnNldFN0eWxlKHsgem9vbTogMSB9KTsKLSAg
ICAgICAgZWxlbWVudC5zZXRTdHlsZSh7IHBvc2l0aW9uOiAncmVsYXRpdmUnIH0pOwotICAgICAg
ICB2YXIgdmFsdWUgPSBwcm9jZWVkKGVsZW1lbnQpOwotICAgICAgICBlbGVtZW50LnNldFN0eWxl
KHsgcG9zaXRpb246IHBvc2l0aW9uIH0pOwotICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgICB9
Ci0gICAgKTsKLSAgfSk7Ci0KLSAgRWxlbWVudC5NZXRob2RzLmdldFN0eWxlID0gZnVuY3Rpb24o
ZWxlbWVudCwgc3R5bGUpIHsKLSAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKLSAgICBzdHlsZSA9
IChzdHlsZSA9PSAnZmxvYXQnIHx8IHN0eWxlID09ICdjc3NGbG9hdCcpID8gJ3N0eWxlRmxvYXQn
IDogc3R5bGUuY2FtZWxpemUoKTsKLSAgICB2YXIgdmFsdWUgPSBlbGVtZW50LnN0eWxlW3N0eWxl
XTsKLSAgICBpZiAoIXZhbHVlICYmIGVsZW1lbnQuY3VycmVudFN0eWxlKSB2YWx1ZSA9IGVsZW1l
bnQuY3VycmVudFN0eWxlW3N0eWxlXTsKLQotICAgIGlmIChzdHlsZSA9PSAnb3BhY2l0eScpIHsK
LSAgICAgIGlmICh2YWx1ZSA9IChlbGVtZW50LmdldFN0eWxlKCdmaWx0ZXInKSB8fCAnJykubWF0
Y2goL2FscGhhXChvcGFjaXR5PSguKilcKS8pKQotICAgICAgICBpZiAodmFsdWVbMV0pIHJldHVy
biBwYXJzZUZsb2F0KHZhbHVlWzFdKSAvIDEwMDsKLSAgICAgIHJldHVybiAxLjA7Ci0gICAgfQot
Ci0gICAgaWYgKHZhbHVlID09ICdhdXRvJykgewotICAgICAgaWYgKChzdHlsZSA9PSAnd2lkdGgn
IHx8IHN0eWxlID09ICdoZWlnaHQnKSAmJiAoZWxlbWVudC5nZXRTdHlsZSgnZGlzcGxheScpICE9
ICdub25lJykpCi0gICAgICAgIHJldHVybiBlbGVtZW50WydvZmZzZXQnICsgc3R5bGUuY2FwaXRh
bGl6ZSgpXSArICdweCc7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0gICAgcmV0dXJuIHZh
bHVlOwotICB9OwotCi0gIEVsZW1lbnQuTWV0aG9kcy5zZXRPcGFjaXR5ID0gZnVuY3Rpb24oZWxl
bWVudCwgdmFsdWUpIHsKLSAgICBmdW5jdGlvbiBzdHJpcEFscGhhKGZpbHRlcil7Ci0gICAgICBy
ZXR1cm4gZmlsdGVyLnJlcGxhY2UoL2FscGhhXChbXlwpXSpcKS9naSwnJyk7Ci0gICAgfQotICAg
IGVsZW1lbnQgPSAkKGVsZW1lbnQpOwotICAgIHZhciBjdXJyZW50U3R5bGUgPSBlbGVtZW50LmN1
cnJlbnRTdHlsZTsKLSAgICBpZiAoKGN1cnJlbnRTdHlsZSAmJiAhY3VycmVudFN0eWxlLmhhc0xh
eW91dCkgfHwKLSAgICAgICghY3VycmVudFN0eWxlICYmIGVsZW1lbnQuc3R5bGUuem9vbSA9PSAn
bm9ybWFsJykpCi0gICAgICAgIGVsZW1lbnQuc3R5bGUuem9vbSA9IDE7Ci0KLSAgICB2YXIgZmls
dGVyID0gZWxlbWVudC5nZXRTdHlsZSgnZmlsdGVyJyksIHN0eWxlID0gZWxlbWVudC5zdHlsZTsK
LSAgICBpZiAodmFsdWUgPT0gMSB8fCB2YWx1ZSA9PT0gJycpIHsKLSAgICAgIChmaWx0ZXIgPSBz
dHJpcEFscGhhKGZpbHRlcikpID8KLSAgICAgICAgc3R5bGUuZmlsdGVyID0gZmlsdGVyIDogc3R5
bGUucmVtb3ZlQXR0cmlidXRlKCdmaWx0ZXInKTsKLSAgICAgIHJldHVybiBlbGVtZW50OwotICAg
IH0gZWxzZSBpZiAodmFsdWUgPCAwLjAwMDAxKSB2YWx1ZSA9IDA7Ci0gICAgc3R5bGUuZmlsdGVy
ID0gc3RyaXBBbHBoYShmaWx0ZXIpICsKLSAgICAgICdhbHBoYShvcGFjaXR5PScgKyAodmFsdWUg
KiAxMDApICsgJyknOwotICAgIHJldHVybiBlbGVtZW50OwotICB9OwotCi0gIEVsZW1lbnQuX2F0
dHJpYnV0ZVRyYW5zbGF0aW9ucyA9IHsKLSAgICByZWFkOiB7Ci0gICAgICBuYW1lczogewotICAg
ICAgICAnY2xhc3MnOiAnY2xhc3NOYW1lJywKLSAgICAgICAgJ2Zvcic6ICAgJ2h0bWxGb3InCi0g
ICAgICB9LAotICAgICAgdmFsdWVzOiB7Ci0gICAgICAgIF9nZXRBdHRyOiBmdW5jdGlvbihlbGVt
ZW50LCBhdHRyaWJ1dGUpIHsKLSAgICAgICAgICByZXR1cm4gZWxlbWVudC5nZXRBdHRyaWJ1dGUo
YXR0cmlidXRlLCAyKTsKLSAgICAgICAgfSwKLSAgICAgICAgX2dldEF0dHJOb2RlOiBmdW5jdGlv
bihlbGVtZW50LCBhdHRyaWJ1dGUpIHsKLSAgICAgICAgICB2YXIgbm9kZSA9IGVsZW1lbnQuZ2V0
QXR0cmlidXRlTm9kZShhdHRyaWJ1dGUpOwotICAgICAgICAgIHJldHVybiBub2RlID8gbm9kZS52
YWx1ZSA6ICIiOwotICAgICAgICB9LAotICAgICAgICBfZ2V0RXY6IGZ1bmN0aW9uKGVsZW1lbnQs
IGF0dHJpYnV0ZSkgewotICAgICAgICAgIGF0dHJpYnV0ZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRl
KGF0dHJpYnV0ZSk7Ci0gICAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZSA/IGF0dHJpYnV0ZS50b1N0
cmluZygpLnNsaWNlKDIzLCAtMikgOiBudWxsOwotICAgICAgICB9LAotICAgICAgICBfZmxhZzog
ZnVuY3Rpb24oZWxlbWVudCwgYXR0cmlidXRlKSB7Ci0gICAgICAgICAgcmV0dXJuICQoZWxlbWVu
dCkuaGFzQXR0cmlidXRlKGF0dHJpYnV0ZSkgPyBhdHRyaWJ1dGUgOiBudWxsOwotICAgICAgICB9
LAotICAgICAgICBzdHlsZTogZnVuY3Rpb24oZWxlbWVudCkgewotICAgICAgICAgIHJldHVybiBl
bGVtZW50LnN0eWxlLmNzc1RleHQudG9Mb3dlckNhc2UoKTsKLSAgICAgICAgfSwKLSAgICAgICAg
dGl0bGU6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKLSAgICAgICAgICByZXR1cm4gZWxlbWVudC50aXRs
ZTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfTsKLQotICBFbGVtZW50Ll9hdHRyaWJ1
dGVUcmFuc2xhdGlvbnMud3JpdGUgPSB7Ci0gICAgbmFtZXM6IE9iamVjdC5leHRlbmQoewotICAg
ICAgY2VsbHBhZGRpbmc6ICdjZWxsUGFkZGluZycsCi0gICAgICBjZWxsc3BhY2luZzogJ2NlbGxT
cGFjaW5nJwotICAgIH0sIEVsZW1lbnQuX2F0dHJpYnV0ZVRyYW5zbGF0aW9ucy5yZWFkLm5hbWVz
KSwKLSAgICB2YWx1ZXM6IHsKLSAgICAgIGNoZWNrZWQ6IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVl
KSB7Ci0gICAgICAgIGVsZW1lbnQuY2hlY2tlZCA9ICEhdmFsdWU7Ci0gICAgICB9LAotCi0gICAg
ICBzdHlsZTogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWUpIHsKLSAgICAgICAgZWxlbWVudC5zdHls
ZS5jc3NUZXh0ID0gdmFsdWUgPyB2YWx1ZSA6ICcnOwotICAgICAgfQotICAgIH0KLSAgfTsKLQot
ICBFbGVtZW50Ll9hdHRyaWJ1dGVUcmFuc2xhdGlvbnMuaGFzID0ge307Ci0KLSAgJHcoJ2NvbFNw
YW4gcm93U3BhbiB2QWxpZ24gZGF0ZVRpbWUgYWNjZXNzS2V5IHRhYkluZGV4ICcgKwotICAgICAg
J2VuY1R5cGUgbWF4TGVuZ3RoIHJlYWRPbmx5IGxvbmdEZXNjJykuZWFjaChmdW5jdGlvbihhdHRy
KSB7Ci0gICAgRWxlbWVudC5fYXR0cmlidXRlVHJhbnNsYXRpb25zLndyaXRlLm5hbWVzW2F0dHIu
dG9Mb3dlckNhc2UoKV0gPSBhdHRyOwotICAgIEVsZW1lbnQuX2F0dHJpYnV0ZVRyYW5zbGF0aW9u
cy5oYXNbYXR0ci50b0xvd2VyQ2FzZSgpXSA9IGF0dHI7Ci0gIH0pOwotCi0gIChmdW5jdGlvbih2
KSB7Ci0gICAgT2JqZWN0LmV4dGVuZCh2LCB7Ci0gICAgICBocmVmOiAgICAgICAgdi5fZ2V0QXR0
ciwKLSAgICAgIHNyYzogICAgICAgICB2Ll9nZXRBdHRyLAotICAgICAgdHlwZTogICAgICAgIHYu
X2dldEF0dHIsCi0gICAgICBhY3Rpb246ICAgICAgdi5fZ2V0QXR0ck5vZGUsCi0gICAgICBkaXNh
YmxlZDogICAgdi5fZmxhZywKLSAgICAgIGNoZWNrZWQ6ICAgICB2Ll9mbGFnLAotICAgICAgcmVh
ZG9ubHk6ICAgIHYuX2ZsYWcsCi0gICAgICBtdWx0aXBsZTogICAgdi5fZmxhZywKLSAgICAgIG9u
bG9hZDogICAgICB2Ll9nZXRFdiwKLSAgICAgIG9udW5sb2FkOiAgICB2Ll9nZXRFdiwKLSAgICAg
IG9uY2xpY2s6ICAgICB2Ll9nZXRFdiwKLSAgICAgIG9uZGJsY2xpY2s6ICB2Ll9nZXRFdiwKLSAg
ICAgIG9ubW91c2Vkb3duOiB2Ll9nZXRFdiwKLSAgICAgIG9ubW91c2V1cDogICB2Ll9nZXRFdiwK
LSAgICAgIG9ubW91c2VvdmVyOiB2Ll9nZXRFdiwKLSAgICAgIG9ubW91c2Vtb3ZlOiB2Ll9nZXRF
diwKLSAgICAgIG9ubW91c2VvdXQ6ICB2Ll9nZXRFdiwKLSAgICAgIG9uZm9jdXM6ICAgICB2Ll9n
ZXRFdiwKLSAgICAgIG9uYmx1cjogICAgICB2Ll9nZXRFdiwKLSAgICAgIG9ua2V5cHJlc3M6ICB2
Ll9nZXRFdiwKLSAgICAgIG9ua2V5ZG93bjogICB2Ll9nZXRFdiwKLSAgICAgIG9ua2V5dXA6ICAg
ICB2Ll9nZXRFdiwKLSAgICAgIG9uc3VibWl0OiAgICB2Ll9nZXRFdiwKLSAgICAgIG9ucmVzZXQ6
ICAgICB2Ll9nZXRFdiwKLSAgICAgIG9uc2VsZWN0OiAgICB2Ll9nZXRFdiwKLSAgICAgIG9uY2hh
bmdlOiAgICB2Ll9nZXRFdgotICAgIH0pOwotICB9KShFbGVtZW50Ll9hdHRyaWJ1dGVUcmFuc2xh
dGlvbnMucmVhZC52YWx1ZXMpOwotfQotCi1lbHNlIGlmIChQcm90b3R5cGUuQnJvd3Nlci5HZWNr
byAmJiAvcnY6MVwuOFwuMC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSkgewotICBFbGVtZW50
Lk1ldGhvZHMuc2V0T3BhY2l0eSA9IGZ1bmN0aW9uKGVsZW1lbnQsIHZhbHVlKSB7Ci0gICAgZWxl
bWVudCA9ICQoZWxlbWVudCk7Ci0gICAgZWxlbWVudC5zdHlsZS5vcGFjaXR5ID0gKHZhbHVlID09
IDEpID8gMC45OTk5OTkgOgotICAgICAgKHZhbHVlID09PSAnJykgPyAnJyA6ICh2YWx1ZSA8IDAu
MDAwMDEpID8gMCA6IHZhbHVlOwotICAgIHJldHVybiBlbGVtZW50OwotICB9OwotfQotCi1lbHNl
IGlmIChQcm90b3R5cGUuQnJvd3Nlci5XZWJLaXQpIHsKLSAgRWxlbWVudC5NZXRob2RzLnNldE9w
YWNpdHkgPSBmdW5jdGlvbihlbGVtZW50LCB2YWx1ZSkgewotICAgIGVsZW1lbnQgPSAkKGVsZW1l
bnQpOwotICAgIGVsZW1lbnQuc3R5bGUub3BhY2l0eSA9ICh2YWx1ZSA9PSAxIHx8IHZhbHVlID09
PSAnJykgPyAnJyA6Ci0gICAgICAodmFsdWUgPCAwLjAwMDAxKSA/IDAgOiB2YWx1ZTsKLQotICAg
IGlmICh2YWx1ZSA9PSAxKQotICAgICAgaWYoZWxlbWVudC50YWdOYW1lID09ICdJTUcnICYmIGVs
ZW1lbnQud2lkdGgpIHsKLSAgICAgICAgZWxlbWVudC53aWR0aCsrOyBlbGVtZW50LndpZHRoLS07
Ci0gICAgICB9IGVsc2UgdHJ5IHsKLSAgICAgICAgdmFyIG4gPSBkb2N1bWVudC5jcmVhdGVUZXh0
Tm9kZSgnICcpOwotICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKG4pOwotICAgICAgICBlbGVt
ZW50LnJlbW92ZUNoaWxkKG4pOwotICAgICAgfSBjYXRjaCAoZSkgeyB9Ci0KLSAgICByZXR1cm4g
ZWxlbWVudDsKLSAgfTsKLQotICAvLyBTYWZhcmkgcmV0dXJucyBtYXJnaW5zIG9uIGJvZHkgd2hp
Y2ggaXMgaW5jb3JyZWN0IGlmIHRoZSBjaGlsZCBpcyBhYnNvbHV0ZWx5Ci0gIC8vIHBvc2l0aW9u
ZWQuICBGb3IgcGVyZm9ybWFuY2UgcmVhc29ucywgcmVkZWZpbmUgRWxlbWVudCNjdW11bGF0aXZl
T2Zmc2V0IGZvcgotICAvLyBLSFRNTC9XZWJLaXQgb25seS4KLSAgRWxlbWVudC5NZXRob2RzLmN1
bXVsYXRpdmVPZmZzZXQgPSBmdW5jdGlvbihlbGVtZW50KSB7Ci0gICAgdmFyIHZhbHVlVCA9IDAs
IHZhbHVlTCA9IDA7Ci0gICAgZG8gewotICAgICAgdmFsdWVUICs9IGVsZW1lbnQub2Zmc2V0VG9w
ICB8fCAwOwotICAgICAgdmFsdWVMICs9IGVsZW1lbnQub2Zmc2V0TGVmdCB8fCAwOwotICAgICAg
aWYgKGVsZW1lbnQub2Zmc2V0UGFyZW50ID09IGRvY3VtZW50LmJvZHkpCi0gICAgICAgIGlmIChF
bGVtZW50LmdldFN0eWxlKGVsZW1lbnQsICdwb3NpdGlvbicpID09ICdhYnNvbHV0ZScpIGJyZWFr
OwotCi0gICAgICBlbGVtZW50ID0gZWxlbWVudC5vZmZzZXRQYXJlbnQ7Ci0gICAgfSB3aGlsZSAo
ZWxlbWVudCk7Ci0KLSAgICByZXR1cm4gRWxlbWVudC5fcmV0dXJuT2Zmc2V0KHZhbHVlTCwgdmFs
dWVUKTsKLSAgfTsKLX0KLQotaWYgKFByb3RvdHlwZS5Ccm93c2VyLklFIHx8IFByb3RvdHlwZS5C
cm93c2VyLk9wZXJhKSB7Ci0gIC8vIElFIGFuZCBPcGVyYSBhcmUgbWlzc2luZyAuaW5uZXJIVE1M
IHN1cHBvcnQgZm9yIFRBQkxFLXJlbGF0ZWQgYW5kIFNFTEVDVCBlbGVtZW50cwotICBFbGVtZW50
Lk1ldGhvZHMudXBkYXRlID0gZnVuY3Rpb24oZWxlbWVudCwgY29udGVudCkgewotICAgIGVsZW1l
bnQgPSAkKGVsZW1lbnQpOwotCi0gICAgaWYgKGNvbnRlbnQgJiYgY29udGVudC50b0VsZW1lbnQp
IGNvbnRlbnQgPSBjb250ZW50LnRvRWxlbWVudCgpOwotICAgIGlmIChPYmplY3QuaXNFbGVtZW50
KGNvbnRlbnQpKSByZXR1cm4gZWxlbWVudC51cGRhdGUoKS5pbnNlcnQoY29udGVudCk7Ci0KLSAg
ICBjb250ZW50ID0gT2JqZWN0LnRvSFRNTChjb250ZW50KTsKLSAgICB2YXIgdGFnTmFtZSA9IGVs
ZW1lbnQudGFnTmFtZS50b1VwcGVyQ2FzZSgpOwotCi0gICAgaWYgKHRhZ05hbWUgaW4gRWxlbWVu
dC5faW5zZXJ0aW9uVHJhbnNsYXRpb25zLnRhZ3MpIHsKLSAgICAgICRBKGVsZW1lbnQuY2hpbGRO
b2RlcykuZWFjaChmdW5jdGlvbihub2RlKSB7IGVsZW1lbnQucmVtb3ZlQ2hpbGQobm9kZSkgfSk7
Ci0gICAgICBFbGVtZW50Ll9nZXRDb250ZW50RnJvbUFub255bW91c0VsZW1lbnQodGFnTmFtZSwg
Y29udGVudC5zdHJpcFNjcmlwdHMoKSkKLSAgICAgICAgLmVhY2goZnVuY3Rpb24obm9kZSkgeyBl
bGVtZW50LmFwcGVuZENoaWxkKG5vZGUpIH0pOwotICAgIH0KLSAgICBlbHNlIGVsZW1lbnQuaW5u
ZXJIVE1MID0gY29udGVudC5zdHJpcFNjcmlwdHMoKTsKLQotICAgIGNvbnRlbnQuZXZhbFNjcmlw
dHMuYmluZChjb250ZW50KS5kZWZlcigpOwotICAgIHJldHVybiBlbGVtZW50OwotICB9OwotfQot
Ci1pZiAoJ291dGVySFRNTCcgaW4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpIHsKLSAg
RWxlbWVudC5NZXRob2RzLnJlcGxhY2UgPSBmdW5jdGlvbihlbGVtZW50LCBjb250ZW50KSB7Ci0g
ICAgZWxlbWVudCA9ICQoZWxlbWVudCk7Ci0KLSAgICBpZiAoY29udGVudCAmJiBjb250ZW50LnRv
RWxlbWVudCkgY29udGVudCA9IGNvbnRlbnQudG9FbGVtZW50KCk7Ci0gICAgaWYgKE9iamVjdC5p
c0VsZW1lbnQoY29udGVudCkpIHsKLSAgICAgIGVsZW1lbnQucGFyZW50Tm9kZS5yZXBsYWNlQ2hp
bGQoY29udGVudCwgZWxlbWVudCk7Ci0gICAgICByZXR1cm4gZWxlbWVudDsKLSAgICB9Ci0KLSAg
ICBjb250ZW50ID0gT2JqZWN0LnRvSFRNTChjb250ZW50KTsKLSAgICB2YXIgcGFyZW50ID0gZWxl
bWVudC5wYXJlbnROb2RlLCB0YWdOYW1lID0gcGFyZW50LnRhZ05hbWUudG9VcHBlckNhc2UoKTsK
LQotICAgIGlmIChFbGVtZW50Ll9pbnNlcnRpb25UcmFuc2xhdGlvbnMudGFnc1t0YWdOYW1lXSkg
ewotICAgICAgdmFyIG5leHRTaWJsaW5nID0gZWxlbWVudC5uZXh0KCk7Ci0gICAgICB2YXIgZnJh
Z21lbnRzID0gRWxlbWVudC5fZ2V0Q29udGVudEZyb21Bbm9ueW1vdXNFbGVtZW50KHRhZ05hbWUs
IGNvbnRlbnQuc3RyaXBTY3JpcHRzKCkpOwotICAgICAgcGFyZW50LnJlbW92ZUNoaWxkKGVsZW1l
bnQpOwotICAgICAgaWYgKG5leHRTaWJsaW5nKQotICAgICAgICBmcmFnbWVudHMuZWFjaChmdW5j
dGlvbihub2RlKSB7IHBhcmVudC5pbnNlcnRCZWZvcmUobm9kZSwgbmV4dFNpYmxpbmcpIH0pOwot
ICAgICAgZWxzZQotICAgICAgICBmcmFnbWVudHMuZWFjaChmdW5jdGlvbihub2RlKSB7IHBhcmVu
dC5hcHBlbmRDaGlsZChub2RlKSB9KTsKLSAgICB9Ci0gICAgZWxzZSBlbGVtZW50Lm91dGVySFRN
TCA9IGNvbnRlbnQuc3RyaXBTY3JpcHRzKCk7Ci0KLSAgICBjb250ZW50LmV2YWxTY3JpcHRzLmJp
bmQoY29udGVudCkuZGVmZXIoKTsKLSAgICByZXR1cm4gZWxlbWVudDsKLSAgfTsKLX0KLQotRWxl
bWVudC5fcmV0dXJuT2Zmc2V0ID0gZnVuY3Rpb24obCwgdCkgewotICB2YXIgcmVzdWx0ID0gW2ws
IHRdOwotICByZXN1bHQubGVmdCA9IGw7Ci0gIHJlc3VsdC50b3AgPSB0OwotICByZXR1cm4gcmVz
dWx0OwotfTsKLQotRWxlbWVudC5fZ2V0Q29udGVudEZyb21Bbm9ueW1vdXNFbGVtZW50ID0gZnVu
Y3Rpb24odGFnTmFtZSwgaHRtbCkgewotICB2YXIgZGl2ID0gbmV3IEVsZW1lbnQoJ2RpdicpLCB0
ID0gRWxlbWVudC5faW5zZXJ0aW9uVHJhbnNsYXRpb25zLnRhZ3NbdGFnTmFtZV07Ci0gIGlmICh0
KSB7Ci0gICAgZGl2LmlubmVySFRNTCA9IHRbMF0gKyBodG1sICsgdFsxXTsKLSAgICB0WzJdLnRp
bWVzKGZ1bmN0aW9uKCkgeyBkaXYgPSBkaXYuZmlyc3RDaGlsZCB9KTsKLSAgfSBlbHNlIGRpdi5p
bm5lckhUTUwgPSBodG1sOwotICByZXR1cm4gJEEoZGl2LmNoaWxkTm9kZXMpOwotfTsKLQotRWxl
bWVudC5faW5zZXJ0aW9uVHJhbnNsYXRpb25zID0gewotICBiZWZvcmU6IGZ1bmN0aW9uKGVsZW1l
bnQsIG5vZGUpIHsKLSAgICBlbGVtZW50LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG5vZGUsIGVs
ZW1lbnQpOwotICB9LAotICB0b3A6IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHsKLSAgICBlbGVt
ZW50Lmluc2VydEJlZm9yZShub2RlLCBlbGVtZW50LmZpcnN0Q2hpbGQpOwotICB9LAotICBib3R0
b206IGZ1bmN0aW9uKGVsZW1lbnQsIG5vZGUpIHsKLSAgICBlbGVtZW50LmFwcGVuZENoaWxkKG5v
ZGUpOwotICB9LAotICBhZnRlcjogZnVuY3Rpb24oZWxlbWVudCwgbm9kZSkgewotICAgIGVsZW1l
bnQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobm9kZSwgZWxlbWVudC5uZXh0U2libGluZyk7Ci0g
IH0sCi0gIHRhZ3M6IHsKLSAgICBUQUJMRTogIFsnPHRhYmxlPicsICAgICAgICAgICAgICAgICc8
L3RhYmxlPicsICAgICAgICAgICAgICAgICAgIDFdLAotICAgIFRCT0RZOiAgWyc8dGFibGU+PHRi
b2R5PicsICAgICAgICAgJzwvdGJvZHk+PC90YWJsZT4nLCAgICAgICAgICAgMl0sCi0gICAgVFI6
ICAgICBbJzx0YWJsZT48dGJvZHk+PHRyPicsICAgICAnPC90cj48L3Rib2R5PjwvdGFibGU+Jywg
ICAgICAzXSwKLSAgICBURDogICAgIFsnPHRhYmxlPjx0Ym9keT48dHI+PHRkPicsICc8L3RkPjwv
dHI+PC90Ym9keT48L3RhYmxlPicsIDRdLAotICAgIFNFTEVDVDogWyc8c2VsZWN0PicsICAgICAg
ICAgICAgICAgJzwvc2VsZWN0PicsICAgICAgICAgICAgICAgICAgMV0KLSAgfQotfTsKLQotKGZ1
bmN0aW9uKCkgewotICBPYmplY3QuZXh0ZW5kKHRoaXMudGFncywgewotICAgIFRIRUFEOiB0aGlz
LnRhZ3MuVEJPRFksCi0gICAgVEZPT1Q6IHRoaXMudGFncy5UQk9EWSwKLSAgICBUSDogICAgdGhp
cy50YWdzLlRECi0gIH0pOwotfSkuY2FsbChFbGVtZW50Ll9pbnNlcnRpb25UcmFuc2xhdGlvbnMp
OwotCi1FbGVtZW50Lk1ldGhvZHMuU2ltdWxhdGVkID0gewotICBoYXNBdHRyaWJ1dGU6IGZ1bmN0
aW9uKGVsZW1lbnQsIGF0dHJpYnV0ZSkgewotICAgIGF0dHJpYnV0ZSA9IEVsZW1lbnQuX2F0dHJp
YnV0ZVRyYW5zbGF0aW9ucy5oYXNbYXR0cmlidXRlXSB8fCBhdHRyaWJ1dGU7Ci0gICAgdmFyIG5v
ZGUgPSAkKGVsZW1lbnQpLmdldEF0dHJpYnV0ZU5vZGUoYXR0cmlidXRlKTsKLSAgICByZXR1cm4g
bm9kZSAmJiBub2RlLnNwZWNpZmllZDsKLSAgfQotfTsKLQotRWxlbWVudC5NZXRob2RzLkJ5VGFn
ID0geyB9OwotCi1PYmplY3QuZXh0ZW5kKEVsZW1lbnQsIEVsZW1lbnQuTWV0aG9kcyk7Ci0KLWlm
ICghUHJvdG90eXBlLkJyb3dzZXJGZWF0dXJlcy5FbGVtZW50RXh0ZW5zaW9ucyAmJgotICAgIGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLl9fcHJvdG9fXykgewotICB3aW5kb3cuSFRNTEVs
ZW1lbnQgPSB7IH07Ci0gIHdpbmRvdy5IVE1MRWxlbWVudC5wcm90b3R5cGUgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCdkaXYnKS5fX3Byb3RvX187Ci0gIFByb3RvdHlwZS5Ccm93c2VyRmVhdHVy
ZXMuRWxlbWVudEV4dGVuc2lvbnMgPSB0cnVlOwotfQotCi1FbGVtZW50LmV4dGVuZCA9IChmdW5j
dGlvbigpIHsKLSAgaWYgKFByb3RvdHlwZS5Ccm93c2VyRmVhdHVyZXMuU3BlY2lmaWNFbGVtZW50
RXh0ZW5zaW9ucykKLSAgICByZXR1cm4gUHJvdG90eXBlLks7Ci0KLSAgdmFyIE1ldGhvZHMgPSB7
IH0sIEJ5VGFnID0gRWxlbWVudC5NZXRob2RzLkJ5VGFnOwotCi0gIHZhciBleHRlbmQgPSBPYmpl
Y3QuZXh0ZW5kKGZ1bmN0aW9uKGVsZW1lbnQpIHsKLSAgICBpZiAoIWVsZW1lbnQgfHwgZWxlbWVu
dC5fZXh0ZW5kZWRCeVByb3RvdHlwZSB8fAotICAgICAgICBlbGVtZW50Lm5vZGVUeXBlICE9IDEg
fHwgZWxlbWVudCA9PSB3aW5kb3cpIHJldHVybiBlbGVtZW50OwotCi0gICAgdmFyIG1ldGhvZHMg
PSBPYmplY3QuY2xvbmUoTWV0aG9kcyksCi0gICAgICB0YWdOYW1lID0gZWxlbWVudC50YWdOYW1l
LCBwcm9wZXJ0eSwgdmFsdWU7Ci0KLSAgICAvLyBleHRlbmQgbWV0aG9kcyBmb3Igc3BlY2lmaWMg
dGFncwotICAgIGlmIChCeVRhZ1t0YWdOYW1lXSkgT2JqZWN0LmV4dGVuZChtZXRob2RzLCBCeVRh
Z1t0YWdOYW1lXSk7Ci0KLSAgICBmb3IgKHByb3BlcnR5IGluIG1ldGhvZHMpIHsKLSAgICAgIHZh
bHVlID0gbWV0aG9kc1twcm9wZXJ0eV07Ci0gICAgICBpZiAoT2JqZWN0LmlzRnVuY3Rpb24odmFs
dWUpICYmICEocHJvcGVydHkgaW4gZWxlbWVudCkpCi0gICAgICAgIGVsZW1lbnRbcHJvcGVydHld
ID0gdmFsdWUubWV0aG9kaXplKCk7Ci0gICAgfQotCi0gICAgZWxlbWVudC5fZXh0ZW5kZWRCeVBy
b3RvdHlwZSA9IFByb3RvdHlwZS5lbXB0eUZ1bmN0aW9uOwotICAgIHJldHVybiBlbGVtZW50Owot
Ci0gIH0sIHsKLSAgICByZWZyZXNoOiBmdW5jdGlvbigpIHsKLSAgICAgIC8vIGV4dGVuZCBtZXRo
b2RzIGZvciBhbGwgdGFncyAoU2FmYXJpIGRvZXNuJ3QgbmVlZCB0aGlzKQotICAgICAgaWYgKCFQ
cm90b3R5cGUuQnJvd3NlckZlYXR1cmVzLkVsZW1lbnRFeHRlbnNpb25zKSB7Ci0gICAgICAgIE9i
amVjdC5leHRlbmQoTWV0aG9kcywgRWxlbWVudC5NZXRob2RzKTsKLSAgICAgICAgT2JqZWN0LmV4
dGVuZChNZXRob2RzLCBFbGVtZW50Lk1ldGhvZHMuU2ltdWxhdGVkKTsKLSAgICAgIH0KLSAgICB9
Ci0gIH0pOwotCi0gIGV4dGVuZC5yZWZyZXNoKCk7Ci0gIHJldHVybiBleHRlbmQ7Ci19KSgpOwot
Ci1FbGVtZW50Lmhhc0F0dHJpYnV0ZSA9IGZ1bmN0aW9uKGVsZW1lbnQsIGF0dHJpYnV0ZSkgewot
ICBpZiAoZWxlbWVudC5oYXNBdHRyaWJ1dGUpIHJldHVybiBlbGVtZW50Lmhhc0F0dHJpYnV0ZShh
dHRyaWJ1dGUpOwotICByZXR1cm4gRWxlbWVudC5NZXRob2RzLlNpbXVsYXRlZC5oYXNBdHRyaWJ1
dGUoZWxlbWVudCwgYXR0cmlidXRlKTsKLX07Ci0KLUVsZW1lbnQuYWRkTWV0aG9kcyA9IGZ1bmN0
aW9uKG1ldGhvZHMpIHsKLSAgdmFyIEYgPSBQcm90b3R5cGUuQnJvd3NlckZlYXR1cmVzLCBUID0g
RWxlbWVudC5NZXRob2RzLkJ5VGFnOwotCi0gIGlmICghbWV0aG9kcykgewotICAgIE9iamVjdC5l
eHRlbmQoRm9ybSwgRm9ybS5NZXRob2RzKTsKLSAgICBPYmplY3QuZXh0ZW5kKEZvcm0uRWxlbWVu
dCwgRm9ybS5FbGVtZW50Lk1ldGhvZHMpOwotICAgIE9iamVjdC5leHRlbmQoRWxlbWVudC5NZXRo
b2RzLkJ5VGFnLCB7Ci0gICAgICAiRk9STSI6ICAgICBPYmplY3QuY2xvbmUoRm9ybS5NZXRob2Rz
KSwKLSAgICAgICJJTlBVVCI6ICAgIE9iamVjdC5jbG9uZShGb3JtLkVsZW1lbnQuTWV0aG9kcyks
Ci0gICAgICAiU0VMRUNUIjogICBPYmplY3QuY2xvbmUoRm9ybS5FbGVtZW50Lk1ldGhvZHMpLAot
ICAgICAgIlRFWFRBUkVBIjogT2JqZWN0LmNsb25lKEZvcm0uRWxlbWVudC5NZXRob2RzKQotICAg
IH0pOwotICB9Ci0KLSAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMikgewotICAgIHZhciB0YWdO
YW1lID0gbWV0aG9kczsKLSAgICBtZXRob2RzID0gYXJndW1lbnRzWzFdOwotICB9Ci0KLSAgaWYg
KCF0YWdOYW1lKSBPYmplY3QuZXh0ZW5kKEVsZW1lbnQuTWV0aG9kcywgbWV0aG9kcyB8fCB7IH0p
OwotICBlbHNlIHsKLSAgICBpZiAoT2JqZWN0LmlzQXJyYXkodGFnTmFtZSkpIHRhZ05hbWUuZWFj
aChleHRlbmQpOwotICAgIGVsc2UgZXh0ZW5kKHRhZ05hbWUpOwotICB9Ci0KLSAgZnVuY3Rpb24g
ZXh0ZW5kKHRhZ05hbWUpIHsKLSAgICB0YWdOYW1lID0gdGFnTmFtZS50b1VwcGVyQ2FzZSgpOwot
ICAgIGlmICghRWxlbWVudC5NZXRob2RzLkJ5VGFnW3RhZ05hbWVdKQotICAgICAgRWxlbWVudC5N
ZXRob2RzLkJ5VGFnW3RhZ05hbWVdID0geyB9OwotICAgIE9iamVjdC5leHRlbmQoRWxlbWVudC5N
ZXRob2RzLkJ5VGFnW3RhZ05hbWVdLCBtZXRob2RzKTsKLSAgfQotCi0gIGZ1bmN0aW9uIGNvcHko
bWV0aG9kcywgZGVzdGluYXRpb24sIG9ubHlJZkFic2VudCkgewotICAgIG9ubHlJZkFic2VudCA9
IG9ubHlJZkFic2VudCB8fCBmYWxzZTsKLSAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBtZXRob2Rz
KSB7Ci0gICAgICB2YXIgdmFsdWUgPSBtZXRob2RzW3Byb3BlcnR5XTsKLSAgICAgIGlmICghT2Jq
ZWN0LmlzRnVuY3Rpb24odmFsdWUpKSBjb250aW51ZTsKLSAgICAgIGlmICghb25seUlmQWJzZW50
IHx8ICEocHJvcGVydHkgaW4gZGVzdGluYXRpb24pKQotICAgICAgICBkZXN0aW5hdGlvbltwcm9w
ZXJ0eV0gPSB2YWx1ZS5tZXRob2RpemUoKTsKLSAgICB9Ci0gIH0KLQotICBmdW5jdGlvbiBmaW5k
RE9NQ2xhc3ModGFnTmFtZSkgewotICAgIHZhciBrbGFzczsKLSAgICB2YXIgdHJhbnMgPSB7Ci0g
ICAgICAiT1BUR1JPVVAiOiAiT3B0R3JvdXAiLCAiVEVYVEFSRUEiOiAiVGV4dEFyZWEiLCAiUCI6
ICJQYXJhZ3JhcGgiLAotICAgICAgIkZJRUxEU0VUIjogIkZpZWxkU2V0IiwgIlVMIjogIlVMaXN0
IiwgIk9MIjogIk9MaXN0IiwgIkRMIjogIkRMaXN0IiwKLSAgICAgICJESVIiOiAiRGlyZWN0b3J5
IiwgIkgxIjogIkhlYWRpbmciLCAiSDIiOiAiSGVhZGluZyIsICJIMyI6ICJIZWFkaW5nIiwKLSAg
ICAgICJINCI6ICJIZWFkaW5nIiwgIkg1IjogIkhlYWRpbmciLCAiSDYiOiAiSGVhZGluZyIsICJR
IjogIlF1b3RlIiwKLSAgICAgICJJTlMiOiAiTW9kIiwgIkRFTCI6ICJNb2QiLCAiQSI6ICJBbmNo
b3IiLCAiSU1HIjogIkltYWdlIiwgIkNBUFRJT04iOgotICAgICAgIlRhYmxlQ2FwdGlvbiIsICJD
T0wiOiAiVGFibGVDb2wiLCAiQ09MR1JPVVAiOiAiVGFibGVDb2wiLCAiVEhFQUQiOgotICAgICAg
IlRhYmxlU2VjdGlvbiIsICJURk9PVCI6ICJUYWJsZVNlY3Rpb24iLCAiVEJPRFkiOiAiVGFibGVT
ZWN0aW9uIiwgIlRSIjoKLSAgICAgICJUYWJsZVJvdyIsICJUSCI6ICJUYWJsZUNlbGwiLCAiVEQi
OiAiVGFibGVDZWxsIiwgIkZSQU1FU0VUIjoKLSAgICAgICJGcmFtZVNldCIsICJJRlJBTUUiOiAi
SUZyYW1lIgotICAgIH07Ci0gICAgaWYgKHRyYW5zW3RhZ05hbWVdKSBrbGFzcyA9ICdIVE1MJyAr
IHRyYW5zW3RhZ05hbWVdICsgJ0VsZW1lbnQnOwotICAgIGlmICh3aW5kb3dba2xhc3NdKSByZXR1
cm4gd2luZG93W2tsYXNzXTsKLSAgICBrbGFzcyA9ICdIVE1MJyArIHRhZ05hbWUgKyAnRWxlbWVu
dCc7Ci0gICAgaWYgKHdpbmRvd1trbGFzc10pIHJldHVybiB3aW5kb3dba2xhc3NdOwotICAgIGts
YXNzID0gJ0hUTUwnICsgdGFnTmFtZS5jYXBpdGFsaXplKCkgKyAnRWxlbWVudCc7Ci0gICAgaWYg
KHdpbmRvd1trbGFzc10pIHJldHVybiB3aW5kb3dba2xhc3NdOwotCi0gICAgd2luZG93W2tsYXNz
XSA9IHsgfTsKLSAgICB3aW5kb3dba2xhc3NdLnByb3RvdHlwZSA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQodGFnTmFtZSkuX19wcm90b19fOwotICAgIHJldHVybiB3aW5kb3dba2xhc3NdOwotICB9
Ci0KLSAgaWYgKEYuRWxlbWVudEV4dGVuc2lvbnMpIHsKLSAgICBjb3B5KEVsZW1lbnQuTWV0aG9k
cywgSFRNTEVsZW1lbnQucHJvdG90eXBlKTsKLSAgICBjb3B5KEVsZW1lbnQuTWV0aG9kcy5TaW11
bGF0ZWQsIEhUTUxFbGVtZW50LnByb3RvdHlwZSwgdHJ1ZSk7Ci0gIH0KLQotICBpZiAoRi5TcGVj
aWZpY0VsZW1lbnRFeHRlbnNpb25zKSB7Ci0gICAgZm9yICh2YXIgdGFnIGluIEVsZW1lbnQuTWV0
aG9kcy5CeVRhZykgewotICAgICAgdmFyIGtsYXNzID0gZmluZERPTUNsYXNzKHRhZyk7Ci0gICAg
ICBpZiAoT2JqZWN0LmlzVW5kZWZpbmVkKGtsYXNzKSkgY29udGludWU7Ci0gICAgICBjb3B5KFRb
dGFnXSwga2xhc3MucHJvdG90eXBlKTsKLSAgICB9Ci0gIH0KLQotICBPYmplY3QuZXh0ZW5kKEVs
ZW1lbnQsIEVsZW1lbnQuTWV0aG9kcyk7Ci0gIGRlbGV0ZSBFbGVtZW50LkJ5VGFnOwotCi0gIGlm
IChFbGVtZW50LmV4dGVuZC5yZWZyZXNoKSBFbGVtZW50LmV4dGVuZC5yZWZyZXNoKCk7Ci0gIEVs
ZW1lbnQuY2FjaGUgPSB7IH07Ci19OwotCi1kb2N1bWVudC52aWV3cG9ydCA9IHsKLSAgZ2V0RGlt
ZW5zaW9uczogZnVuY3Rpb24oKSB7Ci0gICAgdmFyIGRpbWVuc2lvbnMgPSB7IH07Ci0gICAgdmFy
IEIgPSBQcm90b3R5cGUuQnJvd3NlcjsKLSAgICAkdygnd2lkdGggaGVpZ2h0JykuZWFjaChmdW5j
dGlvbihkKSB7Ci0gICAgICB2YXIgRCA9IGQuY2FwaXRhbGl6ZSgpOwotICAgICAgZGltZW5zaW9u
c1tkXSA9IChCLldlYktpdCAmJiAhZG9jdW1lbnQuZXZhbHVhdGUpID8gc2VsZlsnaW5uZXInICsg
RF0gOgotICAgICAgICAoQi5PcGVyYSkgPyBkb2N1bWVudC5ib2R5WydjbGllbnQnICsgRF0gOiBk
b2N1bWVudC5kb2N1bWVudEVsZW1lbnRbJ2NsaWVudCcgKyBEXTsKLSAgICB9KTsKLSAgICByZXR1
cm4gZGltZW5zaW9uczsKLSAgfSwKLQotICBnZXRXaWR0aDogZnVuY3Rpb24oKSB7Ci0gICAgcmV0
dXJuIHRoaXMuZ2V0RGltZW5zaW9ucygpLndpZHRoOwotICB9LAotCi0gIGdldEhlaWdodDogZnVu
Y3Rpb24oKSB7Ci0gICAgcmV0dXJuIHRoaXMuZ2V0RGltZW5zaW9ucygpLmhlaWdodDsKLSAgfSwK
LQotICBnZXRTY3JvbGxPZmZzZXRzOiBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gRWxlbWVudC5f
cmV0dXJuT2Zmc2V0KAotICAgICAgd2luZG93LnBhZ2VYT2Zmc2V0IHx8IGRvY3VtZW50LmRvY3Vt
ZW50RWxlbWVudC5zY3JvbGxMZWZ0IHx8IGRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdCwKLSAgICAg
IHdpbmRvdy5wYWdlWU9mZnNldCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9w
IHx8IGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wKTsKLSAgfQotfTsKLS8qIFBvcnRpb25zIG9mIHRo
ZSBTZWxlY3RvciBjbGFzcyBhcmUgZGVyaXZlZCBmcm9tIEphY2sgU2xvY3Vt4oCZcyBEb21RdWVy
eSwKLSAqIHBhcnQgb2YgWVVJLUV4dCB2ZXJzaW9uIDAuNDAsIGRpc3RyaWJ1dGVkIHVuZGVyIHRo
ZSB0ZXJtcyBvZiBhbiBNSVQtc3R5bGUKLSAqIGxpY2Vuc2UuICBQbGVhc2Ugc2VlIGh0dHA6Ly93
d3cueXVpLWV4dC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLiAqLwotCi12YXIgU2VsZWN0b3Ig
PSBDbGFzcy5jcmVhdGUoewotICBpbml0aWFsaXplOiBmdW5jdGlvbihleHByZXNzaW9uKSB7Ci0g
ICAgdGhpcy5leHByZXNzaW9uID0gZXhwcmVzc2lvbi5zdHJpcCgpOwotICAgIHRoaXMuY29tcGls
ZU1hdGNoZXIoKTsKLSAgfSwKLQotICBzaG91bGRVc2VYUGF0aDogZnVuY3Rpb24oKSB7Ci0gICAg
aWYgKCFQcm90b3R5cGUuQnJvd3NlckZlYXR1cmVzLlhQYXRoKSByZXR1cm4gZmFsc2U7Ci0KLSAg
ICB2YXIgZSA9IHRoaXMuZXhwcmVzc2lvbjsKLQotICAgIC8vIFNhZmFyaSAzIGNob2tlcyBvbiA6
Ki1vZi10eXBlIGFuZCA6ZW1wdHkKLSAgICBpZiAoUHJvdG90eXBlLkJyb3dzZXIuV2ViS2l0ICYm
Ci0gICAgIChlLmluY2x1ZGUoIi1vZi10eXBlIikgfHwgZS5pbmNsdWRlKCI6ZW1wdHkiKSkpCi0g
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBYUGF0aCBjYW4ndCBkbyBuYW1lc3BhY2VkIGF0
dHJpYnV0ZXMsIG5vciBjYW4gaXQgcmVhZAotICAgIC8vIHRoZSAiY2hlY2tlZCIgcHJvcGVydHkg
ZnJvbSBET00gbm9kZXMKLSAgICBpZiAoKC8oXFtbXHctXSo/Onw6Y2hlY2tlZCkvKS50ZXN0KHRo
aXMuZXhwcmVzc2lvbikpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsK
LSAgfSwKLQotICBjb21waWxlTWF0Y2hlcjogZnVuY3Rpb24oKSB7Ci0gICAgaWYgKHRoaXMuc2hv
dWxkVXNlWFBhdGgoKSkKLSAgICAgIHJldHVybiB0aGlzLmNvbXBpbGVYUGF0aE1hdGNoZXIoKTsK
LQotICAgIHZhciBlID0gdGhpcy5leHByZXNzaW9uLCBwcyA9IFNlbGVjdG9yLnBhdHRlcm5zLCBo
ID0gU2VsZWN0b3IuaGFuZGxlcnMsCi0gICAgICAgIGMgPSBTZWxlY3Rvci5jcml0ZXJpYSwgbGUs
IHAsIG07Ci0KLSAgICBpZiAoU2VsZWN0b3IuX2NhY2hlW2VdKSB7Ci0gICAgICB0aGlzLm1hdGNo
ZXIgPSBTZWxlY3Rvci5fY2FjaGVbZV07Ci0gICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgdGhp
cy5tYXRjaGVyID0gWyJ0aGlzLm1hdGNoZXIgPSBmdW5jdGlvbihyb290KSB7IiwKLSAgICAgICAg
ICAgICAgICAgICAgInZhciByID0gcm9vdCwgaCA9IFNlbGVjdG9yLmhhbmRsZXJzLCBjID0gZmFs
c2UsIG47Il07Ci0KLSAgICB3aGlsZSAoZSAmJiBsZSAhPSBlICYmICgvXFMvKS50ZXN0KGUpKSB7
Ci0gICAgICBsZSA9IGU7Ci0gICAgICBmb3IgKHZhciBpIGluIHBzKSB7Ci0gICAgICAgIHAgPSBw
c1tpXTsKLSAgICAgICAgaWYgKG0gPSBlLm1hdGNoKHApKSB7Ci0gICAgICAgICAgdGhpcy5tYXRj
aGVyLnB1c2goT2JqZWN0LmlzRnVuY3Rpb24oY1tpXSkgPyBjW2ldKG0pIDoKLSAgICAJICAgICAg
bmV3IFRlbXBsYXRlKGNbaV0pLmV2YWx1YXRlKG0pKTsKLSAgICAgICAgICBlID0gZS5yZXBsYWNl
KG1bMF0sICcnKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0K
LQotICAgIHRoaXMubWF0Y2hlci5wdXNoKCJyZXR1cm4gaC51bmlxdWUobik7XG59Iik7Ci0gICAg
ZXZhbCh0aGlzLm1hdGNoZXIuam9pbignXG4nKSk7Ci0gICAgU2VsZWN0b3IuX2NhY2hlW3RoaXMu
ZXhwcmVzc2lvbl0gPSB0aGlzLm1hdGNoZXI7Ci0gIH0sCi0KLSAgY29tcGlsZVhQYXRoTWF0Y2hl
cjogZnVuY3Rpb24oKSB7Ci0gICAgdmFyIGUgPSB0aGlzLmV4cHJlc3Npb24sIHBzID0gU2VsZWN0
b3IucGF0dGVybnMsCi0gICAgICAgIHggPSBTZWxlY3Rvci54cGF0aCwgbGUsIG07Ci0KLSAgICBp
ZiAoU2VsZWN0b3IuX2NhY2hlW2VdKSB7Ci0gICAgICB0aGlzLnhwYXRoID0gU2VsZWN0b3IuX2Nh
Y2hlW2VdOyByZXR1cm47Ci0gICAgfQotCi0gICAgdGhpcy5tYXRjaGVyID0gWycuLy8qJ107Ci0g
ICAgd2hpbGUgKGUgJiYgbGUgIT0gZSAmJiAoL1xTLykudGVzdChlKSkgewotICAgICAgbGUgPSBl
OwotICAgICAgZm9yICh2YXIgaSBpbiBwcykgewotICAgICAgICBpZiAobSA9IGUubWF0Y2gocHNb
aV0pKSB7Ci0gICAgICAgICAgdGhpcy5tYXRjaGVyLnB1c2goT2JqZWN0LmlzRnVuY3Rpb24oeFtp
XSkgPyB4W2ldKG0pIDoKLSAgICAgICAgICAgIG5ldyBUZW1wbGF0ZSh4W2ldKS5ldmFsdWF0ZSht
KSk7Ci0gICAgICAgICAgZSA9IGUucmVwbGFjZShtWzBdLCAnJyk7Ci0gICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICB0aGlzLnhwYXRoID0gdGhpcy5tYXRj
aGVyLmpvaW4oJycpOwotICAgIFNlbGVjdG9yLl9jYWNoZVt0aGlzLmV4cHJlc3Npb25dID0gdGhp
cy54cGF0aDsKLSAgfSwKLQotICBmaW5kRWxlbWVudHM6IGZ1bmN0aW9uKHJvb3QpIHsKLSAgICBy
b290ID0gcm9vdCB8fCBkb2N1bWVudDsKLSAgICBpZiAodGhpcy54cGF0aCkgcmV0dXJuIGRvY3Vt
ZW50Ll9nZXRFbGVtZW50c0J5WFBhdGgodGhpcy54cGF0aCwgcm9vdCk7Ci0gICAgcmV0dXJuIHRo
aXMubWF0Y2hlcihyb290KTsKLSAgfSwKLQotICBtYXRjaDogZnVuY3Rpb24oZWxlbWVudCkgewot
ICAgIHRoaXMudG9rZW5zID0gW107Ci0KLSAgICB2YXIgZSA9IHRoaXMuZXhwcmVzc2lvbiwgcHMg
PSBTZWxlY3Rvci5wYXR0ZXJucywgYXMgPSBTZWxlY3Rvci5hc3NlcnRpb25zOwotICAgIHZhciBs
ZSwgcCwgbTsKLQotICAgIHdoaWxlIChlICYmIGxlICE9PSBlICYmICgvXFMvKS50ZXN0KGUpKSB7
Ci0gICAgICBsZSA9IGU7Ci0gICAgICBmb3IgKHZhciBpIGluIHBzKSB7Ci0gICAgICAgIHAgPSBw
c1tpXTsKLSAgICAgICAgaWYgKG0gPSBlLm1hdGNoKHApKSB7Ci0gICAgICAgICAgLy8gdXNlIHRo
ZSBTZWxlY3Rvci5hc3NlcnRpb25zIG1ldGhvZHMgdW5sZXNzIHRoZSBzZWxlY3RvcgotICAgICAg
ICAgIC8vIGlzIHRvbyBjb21wbGV4LgotICAgICAgICAgIGlmIChhc1tpXSkgewotICAgICAgICAg
ICAgdGhpcy50b2tlbnMucHVzaChbaSwgT2JqZWN0LmNsb25lKG0pXSk7Ci0gICAgICAgICAgICBl
ID0gZS5yZXBsYWNlKG1bMF0sICcnKTsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
Ly8gcmVsdWN0YW50bHkgZG8gYSBkb2N1bWVudC13aWRlIHNlYXJjaAotICAgICAgICAgICAgLy8g
YW5kIGxvb2sgZm9yIGEgbWF0Y2ggaW4gdGhlIGFycmF5Ci0gICAgICAgICAgICByZXR1cm4gdGhp
cy5maW5kRWxlbWVudHMoZG9jdW1lbnQpLmluY2x1ZGUoZWxlbWVudCk7Ci0gICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgdmFyIG1hdGNoID0gdHJ1ZSwgbmFtZSwg
bWF0Y2hlczsKLSAgICBmb3IgKHZhciBpID0gMCwgdG9rZW47IHRva2VuID0gdGhpcy50b2tlbnNb
aV07IGkrKykgewotICAgICAgbmFtZSA9IHRva2VuWzBdLCBtYXRjaGVzID0gdG9rZW5bMV07Ci0g
ICAgICBpZiAoIVNlbGVjdG9yLmFzc2VydGlvbnNbbmFtZV0oZWxlbWVudCwgbWF0Y2hlcykpIHsK
LSAgICAgICAgbWF0Y2ggPSBmYWxzZTsgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0
dXJuIG1hdGNoOwotICB9LAotCi0gIHRvU3RyaW5nOiBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4g
dGhpcy5leHByZXNzaW9uOwotICB9LAotCi0gIGluc3BlY3Q6IGZ1bmN0aW9uKCkgewotICAgIHJl
dHVybiAiIzxTZWxlY3RvcjoiICsgdGhpcy5leHByZXNzaW9uLmluc3BlY3QoKSArICI+IjsKLSAg
fQotfSk7Ci0KLU9iamVjdC5leHRlbmQoU2VsZWN0b3IsIHsKLSAgX2NhY2hlOiB7IH0sCi0KLSAg
eHBhdGg6IHsKLSAgICBkZXNjZW5kYW50OiAgICIvLyoiLAotICAgIGNoaWxkOiAgICAgICAgIi8q
IiwKLSAgICBhZGphY2VudDogICAgICIvZm9sbG93aW5nLXNpYmxpbmc6OipbMV0iLAotICAgIGxh
dGVyU2libGluZzogJy9mb2xsb3dpbmctc2libGluZzo6KicsCi0gICAgdGFnTmFtZTogICAgICBm
dW5jdGlvbihtKSB7Ci0gICAgICBpZiAobVsxXSA9PSAnKicpIHJldHVybiAnJzsKLSAgICAgIHJl
dHVybiAiW2xvY2FsLW5hbWUoKT0nIiArIG1bMV0udG9Mb3dlckNhc2UoKSArCi0gICAgICAgICAg
ICAgIicgb3IgbG9jYWwtbmFtZSgpPSciICsgbVsxXS50b1VwcGVyQ2FzZSgpICsgIiddIjsKLSAg
ICB9LAotICAgIGNsYXNzTmFtZTogICAgIltjb250YWlucyhjb25jYXQoJyAnLCBAY2xhc3MsICcg
JyksICcgI3sxfSAnKV0iLAotICAgIGlkOiAgICAgICAgICAgIltAaWQ9JyN7MX0nXSIsCi0gICAg
YXR0clByZXNlbmNlOiBmdW5jdGlvbihtKSB7Ci0gICAgICBtWzFdID0gbVsxXS50b0xvd2VyQ2Fz
ZSgpOwotICAgICAgcmV0dXJuIG5ldyBUZW1wbGF0ZSgiW0AjezF9XSIpLmV2YWx1YXRlKG0pOwot
ICAgIH0sCi0gICAgYXR0cjogZnVuY3Rpb24obSkgewotICAgICAgbVsxXSA9IG1bMV0udG9Mb3dl
ckNhc2UoKTsKLSAgICAgIG1bM10gPSBtWzVdIHx8IG1bNl07Ci0gICAgICByZXR1cm4gbmV3IFRl
bXBsYXRlKFNlbGVjdG9yLnhwYXRoLm9wZXJhdG9yc1ttWzJdXSkuZXZhbHVhdGUobSk7Ci0gICAg
fSwKLSAgICBwc2V1ZG86IGZ1bmN0aW9uKG0pIHsKLSAgICAgIHZhciBoID0gU2VsZWN0b3IueHBh
dGgucHNldWRvc1ttWzFdXTsKLSAgICAgIGlmICghaCkgcmV0dXJuICcnOwotICAgICAgaWYgKE9i
amVjdC5pc0Z1bmN0aW9uKGgpKSByZXR1cm4gaChtKTsKLSAgICAgIHJldHVybiBuZXcgVGVtcGxh
dGUoU2VsZWN0b3IueHBhdGgucHNldWRvc1ttWzFdXSkuZXZhbHVhdGUobSk7Ci0gICAgfSwKLSAg
ICBvcGVyYXRvcnM6IHsKLSAgICAgICc9JzogICJbQCN7MX09JyN7M30nXSIsCi0gICAgICAnIT0n
OiAiW0AjezF9IT0nI3szfSddIiwKLSAgICAgICdePSc6ICJbc3RhcnRzLXdpdGgoQCN7MX0sICcj
ezN9JyldIiwKLSAgICAgICckPSc6ICJbc3Vic3RyaW5nKEAjezF9LCAoc3RyaW5nLWxlbmd0aChA
I3sxfSkgLSBzdHJpbmctbGVuZ3RoKCcjezN9JykgKyAxKSk9JyN7M30nXSIsCi0gICAgICAnKj0n
OiAiW2NvbnRhaW5zKEAjezF9LCAnI3szfScpXSIsCi0gICAgICAnfj0nOiAiW2NvbnRhaW5zKGNv
bmNhdCgnICcsIEAjezF9LCAnICcpLCAnICN7M30gJyldIiwKLSAgICAgICd8PSc6ICJbY29udGFp
bnMoY29uY2F0KCctJywgQCN7MX0sICctJyksICctI3szfS0nKV0iCi0gICAgfSwKLSAgICBwc2V1
ZG9zOiB7Ci0gICAgICAnZmlyc3QtY2hpbGQnOiAnW25vdChwcmVjZWRpbmctc2libGluZzo6Kild
JywKLSAgICAgICdsYXN0LWNoaWxkJzogICdbbm90KGZvbGxvd2luZy1zaWJsaW5nOjoqKV0nLAot
ICAgICAgJ29ubHktY2hpbGQnOiAgJ1tub3QocHJlY2VkaW5nLXNpYmxpbmc6Oiogb3IgZm9sbG93
aW5nLXNpYmxpbmc6OiopXScsCi0gICAgICAnZW1wdHknOiAgICAgICAiW2NvdW50KCopID0gMCBh
bmQgKGNvdW50KHRleHQoKSkgPSAwIG9yIHRyYW5zbGF0ZSh0ZXh0KCksICcgXHRcclxuJywgJycp
ID0gJycpXSIsCi0gICAgICAnY2hlY2tlZCc6ICAgICAiW0BjaGVja2VkXSIsCi0gICAgICAnZGlz
YWJsZWQnOiAgICAiW0BkaXNhYmxlZF0iLAotICAgICAgJ2VuYWJsZWQnOiAgICAgIltub3QoQGRp
c2FibGVkKV0iLAotICAgICAgJ25vdCc6IGZ1bmN0aW9uKG0pIHsKLSAgICAgICAgdmFyIGUgPSBt
WzZdLCBwID0gU2VsZWN0b3IucGF0dGVybnMsCi0gICAgICAgICAgICB4ID0gU2VsZWN0b3IueHBh
dGgsIGxlLCB2OwotCi0gICAgICAgIHZhciBleGNsdXNpb24gPSBbXTsKLSAgICAgICAgd2hpbGUg
KGUgJiYgbGUgIT0gZSAmJiAoL1xTLykudGVzdChlKSkgewotICAgICAgICAgIGxlID0gZTsKLSAg
ICAgICAgICBmb3IgKHZhciBpIGluIHApIHsKLSAgICAgICAgICAgIGlmIChtID0gZS5tYXRjaChw
W2ldKSkgewotICAgICAgICAgICAgICB2ID0gT2JqZWN0LmlzRnVuY3Rpb24oeFtpXSkgPyB4W2ld
KG0pIDogbmV3IFRlbXBsYXRlKHhbaV0pLmV2YWx1YXRlKG0pOwotICAgICAgICAgICAgICBleGNs
dXNpb24ucHVzaCgiKCIgKyB2LnN1YnN0cmluZygxLCB2Lmxlbmd0aCAtIDEpICsgIikiKTsKLSAg
ICAgICAgICAgICAgZSA9IGUucmVwbGFjZShtWzBdLCAnJyk7Ci0gICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4g
Iltub3QoIiArIGV4Y2x1c2lvbi5qb2luKCIgYW5kICIpICsgIildIjsKLSAgICAgIH0sCi0gICAg
ICAnbnRoLWNoaWxkJzogICAgICBmdW5jdGlvbihtKSB7Ci0gICAgICAgIHJldHVybiBTZWxlY3Rv
ci54cGF0aC5wc2V1ZG9zLm50aCgiKGNvdW50KC4vcHJlY2VkaW5nLXNpYmxpbmc6OiopICsgMSkg
IiwgbSk7Ci0gICAgICB9LAotICAgICAgJ250aC1sYXN0LWNoaWxkJzogZnVuY3Rpb24obSkgewot
ICAgICAgICByZXR1cm4gU2VsZWN0b3IueHBhdGgucHNldWRvcy5udGgoIihjb3VudCguL2ZvbGxv
d2luZy1zaWJsaW5nOjoqKSArIDEpICIsIG0pOwotICAgICAgfSwKLSAgICAgICdudGgtb2YtdHlw
ZSc6ICAgIGZ1bmN0aW9uKG0pIHsKLSAgICAgICAgcmV0dXJuIFNlbGVjdG9yLnhwYXRoLnBzZXVk
b3MubnRoKCJwb3NpdGlvbigpICIsIG0pOwotICAgICAgfSwKLSAgICAgICdudGgtbGFzdC1vZi10
eXBlJzogZnVuY3Rpb24obSkgewotICAgICAgICByZXR1cm4gU2VsZWN0b3IueHBhdGgucHNldWRv
cy5udGgoIihsYXN0KCkgKyAxIC0gcG9zaXRpb24oKSkgIiwgbSk7Ci0gICAgICB9LAotICAgICAg
J2ZpcnN0LW9mLXR5cGUnOiAgZnVuY3Rpb24obSkgewotICAgICAgICBtWzZdID0gIjEiOyByZXR1
cm4gU2VsZWN0b3IueHBhdGgucHNldWRvc1snbnRoLW9mLXR5cGUnXShtKTsKLSAgICAgIH0sCi0g
ICAgICAnbGFzdC1vZi10eXBlJzogICBmdW5jdGlvbihtKSB7Ci0gICAgICAgIG1bNl0gPSAiMSI7
IHJldHVybiBTZWxlY3Rvci54cGF0aC5wc2V1ZG9zWydudGgtbGFzdC1vZi10eXBlJ10obSk7Ci0g
ICAgICB9LAotICAgICAgJ29ubHktb2YtdHlwZSc6ICAgZnVuY3Rpb24obSkgewotICAgICAgICB2
YXIgcCA9IFNlbGVjdG9yLnhwYXRoLnBzZXVkb3M7IHJldHVybiBwWydmaXJzdC1vZi10eXBlJ10o
bSkgKyBwWydsYXN0LW9mLXR5cGUnXShtKTsKLSAgICAgIH0sCi0gICAgICBudGg6IGZ1bmN0aW9u
KGZyYWdtZW50LCBtKSB7Ci0gICAgICAgIHZhciBtbSwgZm9ybXVsYSA9IG1bNl0sIHByZWRpY2F0
ZTsKLSAgICAgICAgaWYgKGZvcm11bGEgPT0gJ2V2ZW4nKSBmb3JtdWxhID0gJzJuKzAnOwotICAg
ICAgICBpZiAoZm9ybXVsYSA9PSAnb2RkJykgIGZvcm11bGEgPSAnMm4rMSc7Ci0gICAgICAgIGlm
IChtbSA9IGZvcm11bGEubWF0Y2goL14oXGQrKSQvKSkgLy8gZGlnaXQgb25seQotICAgICAgICAg
IHJldHVybiAnWycgKyBmcmFnbWVudCArICI9ICIgKyBtbVsxXSArICddJzsKLSAgICAgICAgaWYg
KG1tID0gZm9ybXVsYS5tYXRjaCgvXigtP1xkKik/bigoWystXSkoXGQrKSk/LykpIHsgLy8gYW4r
YgotICAgICAgICAgIGlmIChtbVsxXSA9PSAiLSIpIG1tWzFdID0gLTE7Ci0gICAgICAgICAgdmFy
IGEgPSBtbVsxXSA/IE51bWJlcihtbVsxXSkgOiAxOwotICAgICAgICAgIHZhciBiID0gbW1bMl0g
PyBOdW1iZXIobW1bMl0pIDogMDsKLSAgICAgICAgICBwcmVkaWNhdGUgPSAiWygoI3tmcmFnbWVu
dH0gLSAje2J9KSBtb2QgI3thfSA9IDApIGFuZCAiICsKLSAgICAgICAgICAiKCgje2ZyYWdtZW50
fSAtICN7Yn0pIGRpdiAje2F9ID49IDApXSI7Ci0gICAgICAgICAgcmV0dXJuIG5ldyBUZW1wbGF0
ZShwcmVkaWNhdGUpLmV2YWx1YXRlKHsKLSAgICAgICAgICAgIGZyYWdtZW50OiBmcmFnbWVudCwg
YTogYSwgYjogYiB9KTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfSwKLQotICBjcml0
ZXJpYTogewotICAgIHRhZ05hbWU6ICAgICAgJ24gPSBoLnRhZ05hbWUobiwgciwgIiN7MX0iLCBj
KTsgICAgICBjID0gZmFsc2U7JywKLSAgICBjbGFzc05hbWU6ICAgICduID0gaC5jbGFzc05hbWUo
biwgciwgIiN7MX0iLCBjKTsgICAgYyA9IGZhbHNlOycsCi0gICAgaWQ6ICAgICAgICAgICAnbiA9
IGguaWQobiwgciwgIiN7MX0iLCBjKTsgICAgICAgICAgIGMgPSBmYWxzZTsnLAotICAgIGF0dHJQ
cmVzZW5jZTogJ24gPSBoLmF0dHJQcmVzZW5jZShuLCByLCAiI3sxfSIsIGMpOyBjID0gZmFsc2U7
JywKLSAgICBhdHRyOiBmdW5jdGlvbihtKSB7Ci0gICAgICBtWzNdID0gKG1bNV0gfHwgbVs2XSk7
Ci0gICAgICByZXR1cm4gbmV3IFRlbXBsYXRlKCduID0gaC5hdHRyKG4sIHIsICIjezF9IiwgIiN7
M30iLCAiI3syfSIsIGMpOyBjID0gZmFsc2U7JykuZXZhbHVhdGUobSk7Ci0gICAgfSwKLSAgICBw
c2V1ZG86IGZ1bmN0aW9uKG0pIHsKLSAgICAgIGlmIChtWzZdKSBtWzZdID0gbVs2XS5yZXBsYWNl
KC8iL2csICdcXCInKTsKLSAgICAgIHJldHVybiBuZXcgVGVtcGxhdGUoJ24gPSBoLnBzZXVkbyhu
LCAiI3sxfSIsICIjezZ9IiwgciwgYyk7IGMgPSBmYWxzZTsnKS5ldmFsdWF0ZShtKTsKLSAgICB9
LAotICAgIGRlc2NlbmRhbnQ6ICAgJ2MgPSAiZGVzY2VuZGFudCI7JywKLSAgICBjaGlsZDogICAg
ICAgICdjID0gImNoaWxkIjsnLAotICAgIGFkamFjZW50OiAgICAgJ2MgPSAiYWRqYWNlbnQiOycs
Ci0gICAgbGF0ZXJTaWJsaW5nOiAnYyA9ICJsYXRlclNpYmxpbmciOycKLSAgfSwKLQotICBwYXR0
ZXJuczogewotICAgIC8vIGNvbWJpbmF0b3JzIG11c3QgYmUgbGlzdGVkIGZpcnN0Ci0gICAgLy8g
KGFuZCBkZXNjZW5kYW50IG5lZWRzIHRvIGJlIGxhc3QgY29tYmluYXRvcikKLSAgICBsYXRlclNp
Ymxpbmc6IC9eXHMqflxzKi8sCi0gICAgY2hpbGQ6ICAgICAgICAvXlxzKj5ccyovLAotICAgIGFk
amFjZW50OiAgICAgL15ccypcK1xzKi8sCi0gICAgZGVzY2VuZGFudDogICAvXlxzLywKLQotICAg
IC8vIHNlbGVjdG9ycyBmb2xsb3cKLSAgICB0YWdOYW1lOiAgICAgIC9eXHMqKFwqfFtcd1wtXSsp
KFxifCQpPy8sCi0gICAgaWQ6ICAgICAgICAgICAvXiMoW1x3XC1cKl0rKShcYnwkKS8sCi0gICAg
Y2xhc3NOYW1lOiAgICAvXlwuKFtcd1wtXCpdKykoXGJ8JCkvLAotICAgIHBzZXVkbzoKLS9eOigo
Zmlyc3R8bGFzdHxudGh8bnRoLWxhc3R8b25seSkoLWNoaWxkfC1vZi10eXBlKXxlbXB0eXxjaGVj
a2VkfChlbnxkaXMpYWJsZWR8bm90KShcKCguKj8pXCkpPyhcYnwkfCg/PVxzfFs6K34+XSkpLywK
LSAgICBhdHRyUHJlc2VuY2U6IC9eXFsoW1x3XSspXF0vLAotICAgIGF0dHI6ICAgICAgICAgL1xb
KCg/Oltcdy1dKjopP1tcdy1dKylccyooPzooWyFeJCp+fF0/PSlccyooKFsnIl0pKFteXDRdKj8p
XDR8KFteJyJdW15cXV0qPykpKT9cXS8KLSAgfSwKLQotICAvLyBmb3IgU2VsZWN0b3IubWF0Y2gg
YW5kIEVsZW1lbnQjbWF0Y2gKLSAgYXNzZXJ0aW9uczogewotICAgIHRhZ05hbWU6IGZ1bmN0aW9u
KGVsZW1lbnQsIG1hdGNoZXMpIHsKLSAgICAgIHJldHVybiBtYXRjaGVzWzFdLnRvVXBwZXJDYXNl
KCkgPT0gZWxlbWVudC50YWdOYW1lLnRvVXBwZXJDYXNlKCk7Ci0gICAgfSwKLQotICAgIGNsYXNz
TmFtZTogZnVuY3Rpb24oZWxlbWVudCwgbWF0Y2hlcykgewotICAgICAgcmV0dXJuIEVsZW1lbnQu
aGFzQ2xhc3NOYW1lKGVsZW1lbnQsIG1hdGNoZXNbMV0pOwotICAgIH0sCi0KLSAgICBpZDogZnVu
Y3Rpb24oZWxlbWVudCwgbWF0Y2hlcykgewotICAgICAgcmV0dXJuIGVsZW1lbnQuaWQgPT09IG1h
dGNoZXNbMV07Ci0gICAgfSwKLQotICAgIGF0dHJQcmVzZW5jZTogZnVuY3Rpb24oZWxlbWVudCwg
bWF0Y2hlcykgewotICAgICAgcmV0dXJuIEVsZW1lbnQuaGFzQXR0cmlidXRlKGVsZW1lbnQsIG1h
dGNoZXNbMV0pOwotICAgIH0sCi0KLSAgICBhdHRyOiBmdW5jdGlvbihlbGVtZW50LCBtYXRjaGVz
KSB7Ci0gICAgICB2YXIgbm9kZVZhbHVlID0gRWxlbWVudC5yZWFkQXR0cmlidXRlKGVsZW1lbnQs
IG1hdGNoZXNbMV0pOwotICAgICAgcmV0dXJuIG5vZGVWYWx1ZSAmJiBTZWxlY3Rvci5vcGVyYXRv
cnNbbWF0Y2hlc1syXV0obm9kZVZhbHVlLCBtYXRjaGVzWzVdIHx8IG1hdGNoZXNbNl0pOwotICAg
IH0KLSAgfSwKLQotICBoYW5kbGVyczogewotICAgIC8vIFVUSUxJVFkgRlVOQ1RJT05TCi0gICAg
Ly8gam9pbnMgdHdvIGNvbGxlY3Rpb25zCi0gICAgY29uY2F0OiBmdW5jdGlvbihhLCBiKSB7Ci0g
ICAgICBmb3IgKHZhciBpID0gMCwgbm9kZTsgbm9kZSA9IGJbaV07IGkrKykKLSAgICAgICAgYS5w
dXNoKG5vZGUpOwotICAgICAgcmV0dXJuIGE7Ci0gICAgfSwKLQotICAgIC8vIG1hcmtzIGFuIGFy
cmF5IG9mIG5vZGVzIGZvciBjb3VudGluZwotICAgIG1hcms6IGZ1bmN0aW9uKG5vZGVzKSB7Ci0g
ICAgICB2YXIgX3RydWUgPSBQcm90b3R5cGUuZW1wdHlGdW5jdGlvbjsKLSAgICAgIGZvciAodmFy
IGkgPSAwLCBub2RlOyBub2RlID0gbm9kZXNbaV07IGkrKykKLSAgICAgICAgbm9kZS5fY291bnRl
ZEJ5UHJvdG90eXBlID0gX3RydWU7Ci0gICAgICByZXR1cm4gbm9kZXM7Ci0gICAgfSwKLQotICAg
IHVubWFyazogZnVuY3Rpb24obm9kZXMpIHsKLSAgICAgIGZvciAodmFyIGkgPSAwLCBub2RlOyBu
b2RlID0gbm9kZXNbaV07IGkrKykKLSAgICAgICAgbm9kZS5fY291bnRlZEJ5UHJvdG90eXBlID0g
dW5kZWZpbmVkOwotICAgICAgcmV0dXJuIG5vZGVzOwotICAgIH0sCi0KLSAgICAvLyBtYXJrIGVh
Y2ggY2hpbGQgbm9kZSB3aXRoIGl0cyBwb3NpdGlvbiAoZm9yIG50aCBjYWxscykKLSAgICAvLyAi
b2ZUeXBlIiBmbGFnIGluZGljYXRlcyB3aGV0aGVyIHdlJ3JlIGluZGV4aW5nIGZvciBudGgtb2Yt
dHlwZQotICAgIC8vIHJhdGhlciB0aGFuIG50aC1jaGlsZAotICAgIGluZGV4OiBmdW5jdGlvbihw
YXJlbnROb2RlLCByZXZlcnNlLCBvZlR5cGUpIHsKLSAgICAgIHBhcmVudE5vZGUuX2NvdW50ZWRC
eVByb3RvdHlwZSA9IFByb3RvdHlwZS5lbXB0eUZ1bmN0aW9uOwotICAgICAgaWYgKHJldmVyc2Up
IHsKLSAgICAgICAgZm9yICh2YXIgbm9kZXMgPSBwYXJlbnROb2RlLmNoaWxkTm9kZXMsIGkgPSBu
b2Rlcy5sZW5ndGggLSAxLCBqID0gMTsgaSA+PSAwOyBpLS0pIHsKLSAgICAgICAgICB2YXIgbm9k
ZSA9IG5vZGVzW2ldOwotICAgICAgICAgIGlmIChub2RlLm5vZGVUeXBlID09IDEgJiYgKCFvZlR5
cGUgfHwgbm9kZS5fY291bnRlZEJ5UHJvdG90eXBlKSkgbm9kZS5ub2RlSW5kZXggPSBqKys7Ci0g
ICAgICAgIH0KLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwLCBqID0gMSwg
bm9kZXMgPSBwYXJlbnROb2RlLmNoaWxkTm9kZXM7IG5vZGUgPSBub2Rlc1tpXTsgaSsrKQotICAg
ICAgICAgIGlmIChub2RlLm5vZGVUeXBlID09IDEgJiYgKCFvZlR5cGUgfHwgbm9kZS5fY291bnRl
ZEJ5UHJvdG90eXBlKSkgbm9kZS5ub2RlSW5kZXggPSBqKys7Ci0gICAgICB9Ci0gICAgfSwKLQot
ICAgIC8vIGZpbHRlcnMgb3V0IGR1cGxpY2F0ZXMgYW5kIGV4dGVuZHMgYWxsIG5vZGVzCi0gICAg
dW5pcXVlOiBmdW5jdGlvbihub2RlcykgewotICAgICAgaWYgKG5vZGVzLmxlbmd0aCA9PSAwKSBy
ZXR1cm4gbm9kZXM7Ci0gICAgICB2YXIgcmVzdWx0cyA9IFtdLCBuOwotICAgICAgZm9yICh2YXIg
aSA9IDAsIGwgPSBub2Rlcy5sZW5ndGg7IGkgPCBsOyBpKyspCi0gICAgICAgIGlmICghKG4gPSBu
b2Rlc1tpXSkuX2NvdW50ZWRCeVByb3RvdHlwZSkgewotICAgICAgICAgIG4uX2NvdW50ZWRCeVBy
b3RvdHlwZSA9IFByb3RvdHlwZS5lbXB0eUZ1bmN0aW9uOwotICAgICAgICAgIHJlc3VsdHMucHVz
aChFbGVtZW50LmV4dGVuZChuKSk7Ci0gICAgICAgIH0KLSAgICAgIHJldHVybiBTZWxlY3Rvci5o
YW5kbGVycy51bm1hcmsocmVzdWx0cyk7Ci0gICAgfSwKLQotICAgIC8vIENPTUJJTkFUT1IgRlVO
Q1RJT05TCi0gICAgZGVzY2VuZGFudDogZnVuY3Rpb24obm9kZXMpIHsKLSAgICAgIHZhciBoID0g
U2VsZWN0b3IuaGFuZGxlcnM7Ci0gICAgICBmb3IgKHZhciBpID0gMCwgcmVzdWx0cyA9IFtdLCBu
b2RlOyBub2RlID0gbm9kZXNbaV07IGkrKykKLSAgICAgICAgaC5jb25jYXQocmVzdWx0cywgbm9k
ZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpKTsKLSAgICAgIHJldHVybiByZXN1bHRzOwotICAg
IH0sCi0KLSAgICBjaGlsZDogZnVuY3Rpb24obm9kZXMpIHsKLSAgICAgIHZhciBoID0gU2VsZWN0
b3IuaGFuZGxlcnM7Ci0gICAgICBmb3IgKHZhciBpID0gMCwgcmVzdWx0cyA9IFtdLCBub2RlOyBu
b2RlID0gbm9kZXNbaV07IGkrKykgewotICAgICAgICBmb3IgKHZhciBqID0gMCwgY2hpbGQ7IGNo
aWxkID0gbm9kZS5jaGlsZE5vZGVzW2pdOyBqKyspCi0gICAgICAgICAgaWYgKGNoaWxkLm5vZGVU
eXBlID09IDEgJiYgY2hpbGQudGFnTmFtZSAhPSAnIScpIHJlc3VsdHMucHVzaChjaGlsZCk7Ci0g
ICAgICB9Ci0gICAgICByZXR1cm4gcmVzdWx0czsKLSAgICB9LAotCi0gICAgYWRqYWNlbnQ6IGZ1
bmN0aW9uKG5vZGVzKSB7Ci0gICAgICBmb3IgKHZhciBpID0gMCwgcmVzdWx0cyA9IFtdLCBub2Rl
OyBub2RlID0gbm9kZXNbaV07IGkrKykgewotICAgICAgICB2YXIgbmV4dCA9IHRoaXMubmV4dEVs
ZW1lbnRTaWJsaW5nKG5vZGUpOwotICAgICAgICBpZiAobmV4dCkgcmVzdWx0cy5wdXNoKG5leHQp
OwotICAgICAgfQotICAgICAgcmV0dXJuIHJlc3VsdHM7Ci0gICAgfSwKLQotICAgIGxhdGVyU2li
bGluZzogZnVuY3Rpb24obm9kZXMpIHsKLSAgICAgIHZhciBoID0gU2VsZWN0b3IuaGFuZGxlcnM7
Ci0gICAgICBmb3IgKHZhciBpID0gMCwgcmVzdWx0cyA9IFtdLCBub2RlOyBub2RlID0gbm9kZXNb
aV07IGkrKykKLSAgICAgICAgaC5jb25jYXQocmVzdWx0cywgRWxlbWVudC5uZXh0U2libGluZ3Mo
bm9kZSkpOwotICAgICAgcmV0dXJuIHJlc3VsdHM7Ci0gICAgfSwKLQotICAgIG5leHRFbGVtZW50
U2libGluZzogZnVuY3Rpb24obm9kZSkgewotICAgICAgd2hpbGUgKG5vZGUgPSBub2RlLm5leHRT
aWJsaW5nKQotCSAgICAgIGlmIChub2RlLm5vZGVUeXBlID09IDEpIHJldHVybiBub2RlOwotICAg
ICAgcmV0dXJuIG51bGw7Ci0gICAgfSwKLQotICAgIHByZXZpb3VzRWxlbWVudFNpYmxpbmc6IGZ1
bmN0aW9uKG5vZGUpIHsKLSAgICAgIHdoaWxlIChub2RlID0gbm9kZS5wcmV2aW91c1NpYmxpbmcp
Ci0gICAgICAgIGlmIChub2RlLm5vZGVUeXBlID09IDEpIHJldHVybiBub2RlOwotICAgICAgcmV0
dXJuIG51bGw7Ci0gICAgfSwKLQotICAgIC8vIFRPS0VOIEZVTkNUSU9OUwotICAgIHRhZ05hbWU6
IGZ1bmN0aW9uKG5vZGVzLCByb290LCB0YWdOYW1lLCBjb21iaW5hdG9yKSB7Ci0gICAgICB2YXIg
dVRhZ05hbWUgPSB0YWdOYW1lLnRvVXBwZXJDYXNlKCk7Ci0gICAgICB2YXIgcmVzdWx0cyA9IFtd
LCBoID0gU2VsZWN0b3IuaGFuZGxlcnM7Ci0gICAgICBpZiAobm9kZXMpIHsKLSAgICAgICAgaWYg
KGNvbWJpbmF0b3IpIHsKLSAgICAgICAgICAvLyBmYXN0bGFuZSBmb3Igb3JkaW5hcnkgZGVzY2Vu
ZGFudCBjb21iaW5hdG9ycwotICAgICAgICAgIGlmIChjb21iaW5hdG9yID09ICJkZXNjZW5kYW50
IikgewotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIG5vZGU7IG5vZGUgPSBub2Rlc1tpXTsg
aSsrKQotICAgICAgICAgICAgICBoLmNvbmNhdChyZXN1bHRzLCBub2RlLmdldEVsZW1lbnRzQnlU
YWdOYW1lKHRhZ05hbWUpKTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHRzOwotICAgICAgICAg
IH0gZWxzZSBub2RlcyA9IHRoaXNbY29tYmluYXRvcl0obm9kZXMpOwotICAgICAgICAgIGlmICh0
YWdOYW1lID09ICIqIikgcmV0dXJuIG5vZGVzOwotICAgICAgICB9Ci0gICAgICAgIGZvciAodmFy
IGkgPSAwLCBub2RlOyBub2RlID0gbm9kZXNbaV07IGkrKykKLSAgICAgICAgICBpZiAobm9kZS50
YWdOYW1lLnRvVXBwZXJDYXNlKCkgPT09IHVUYWdOYW1lKSByZXN1bHRzLnB1c2gobm9kZSk7Ci0g
ICAgICAgIHJldHVybiByZXN1bHRzOwotICAgICAgfSBlbHNlIHJldHVybiByb290LmdldEVsZW1l
bnRzQnlUYWdOYW1lKHRhZ05hbWUpOwotICAgIH0sCi0KLSAgICBpZDogZnVuY3Rpb24obm9kZXMs
IHJvb3QsIGlkLCBjb21iaW5hdG9yKSB7Ci0gICAgICB2YXIgdGFyZ2V0Tm9kZSA9ICQoaWQpLCBo
ID0gU2VsZWN0b3IuaGFuZGxlcnM7Ci0gICAgICBpZiAoIXRhcmdldE5vZGUpIHJldHVybiBbXTsK
LSAgICAgIGlmICghbm9kZXMgJiYgcm9vdCA9PSBkb2N1bWVudCkgcmV0dXJuIFt0YXJnZXROb2Rl
XTsKLSAgICAgIGlmIChub2RlcykgewotICAgICAgICBpZiAoY29tYmluYXRvcikgewotICAgICAg
ICAgIGlmIChjb21iaW5hdG9yID09ICdjaGlsZCcpIHsKLSAgICAgICAgICAgIGZvciAodmFyIGkg
PSAwLCBub2RlOyBub2RlID0gbm9kZXNbaV07IGkrKykKLSAgICAgICAgICAgICAgaWYgKHRhcmdl
dE5vZGUucGFyZW50Tm9kZSA9PSBub2RlKSByZXR1cm4gW3RhcmdldE5vZGVdOwotICAgICAgICAg
IH0gZWxzZSBpZiAoY29tYmluYXRvciA9PSAnZGVzY2VuZGFudCcpIHsKLSAgICAgICAgICAgIGZv
ciAodmFyIGkgPSAwLCBub2RlOyBub2RlID0gbm9kZXNbaV07IGkrKykKLSAgICAgICAgICAgICAg
aWYgKEVsZW1lbnQuZGVzY2VuZGFudE9mKHRhcmdldE5vZGUsIG5vZGUpKSByZXR1cm4gW3Rhcmdl
dE5vZGVdOwotICAgICAgICAgIH0gZWxzZSBpZiAoY29tYmluYXRvciA9PSAnYWRqYWNlbnQnKSB7
Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbm9kZTsgbm9kZSA9IG5vZGVzW2ldOyBpKysp
Ci0gICAgICAgICAgICAgIGlmIChTZWxlY3Rvci5oYW5kbGVycy5wcmV2aW91c0VsZW1lbnRTaWJs
aW5nKHRhcmdldE5vZGUpID09IG5vZGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFt0YXJnZXRO
b2RlXTsKLSAgICAgICAgICB9IGVsc2Ugbm9kZXMgPSBoW2NvbWJpbmF0b3JdKG5vZGVzKTsKLSAg
ICAgICAgfQotICAgICAgICBmb3IgKHZhciBpID0gMCwgbm9kZTsgbm9kZSA9IG5vZGVzW2ldOyBp
KyspCi0gICAgICAgICAgaWYgKG5vZGUgPT0gdGFyZ2V0Tm9kZSkgcmV0dXJuIFt0YXJnZXROb2Rl
XTsKLSAgICAgICAgcmV0dXJuIFtdOwotICAgICAgfQotICAgICAgcmV0dXJuICh0YXJnZXROb2Rl
ICYmIEVsZW1lbnQuZGVzY2VuZGFudE9mKHRhcmdldE5vZGUsIHJvb3QpKSA/IFt0YXJnZXROb2Rl
XSA6IFtdOwotICAgIH0sCi0KLSAgICBjbGFzc05hbWU6IGZ1bmN0aW9uKG5vZGVzLCByb290LCBj
bGFzc05hbWUsIGNvbWJpbmF0b3IpIHsKLSAgICAgIGlmIChub2RlcyAmJiBjb21iaW5hdG9yKSBu
b2RlcyA9IHRoaXNbY29tYmluYXRvcl0obm9kZXMpOwotICAgICAgcmV0dXJuIFNlbGVjdG9yLmhh
bmRsZXJzLmJ5Q2xhc3NOYW1lKG5vZGVzLCByb290LCBjbGFzc05hbWUpOwotICAgIH0sCi0KLSAg
ICBieUNsYXNzTmFtZTogZnVuY3Rpb24obm9kZXMsIHJvb3QsIGNsYXNzTmFtZSkgewotICAgICAg
aWYgKCFub2Rlcykgbm9kZXMgPSBTZWxlY3Rvci5oYW5kbGVycy5kZXNjZW5kYW50KFtyb290XSk7
Ci0gICAgICB2YXIgbmVlZGxlID0gJyAnICsgY2xhc3NOYW1lICsgJyAnOwotICAgICAgZm9yICh2
YXIgaSA9IDAsIHJlc3VsdHMgPSBbXSwgbm9kZSwgbm9kZUNsYXNzTmFtZTsgbm9kZSA9IG5vZGVz
W2ldOyBpKyspIHsKLSAgICAgICAgbm9kZUNsYXNzTmFtZSA9IG5vZGUuY2xhc3NOYW1lOwotICAg
ICAgICBpZiAobm9kZUNsYXNzTmFtZS5sZW5ndGggPT0gMCkgY29udGludWU7Ci0gICAgICAgIGlm
IChub2RlQ2xhc3NOYW1lID09IGNsYXNzTmFtZSB8fCAoJyAnICsgbm9kZUNsYXNzTmFtZSArICcg
JykuaW5jbHVkZShuZWVkbGUpKQotICAgICAgICAgIHJlc3VsdHMucHVzaChub2RlKTsKLSAgICAg
IH0KLSAgICAgIHJldHVybiByZXN1bHRzOwotICAgIH0sCi0KLSAgICBhdHRyUHJlc2VuY2U6IGZ1
bmN0aW9uKG5vZGVzLCByb290LCBhdHRyLCBjb21iaW5hdG9yKSB7Ci0gICAgICBpZiAoIW5vZGVz
KSBub2RlcyA9IHJvb3QuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKTsKLSAgICAgIGlmIChub2Rl
cyAmJiBjb21iaW5hdG9yKSBub2RlcyA9IHRoaXNbY29tYmluYXRvcl0obm9kZXMpOwotICAgICAg
dmFyIHJlc3VsdHMgPSBbXTsKLSAgICAgIGZvciAodmFyIGkgPSAwLCBub2RlOyBub2RlID0gbm9k
ZXNbaV07IGkrKykKLSAgICAgICAgaWYgKEVsZW1lbnQuaGFzQXR0cmlidXRlKG5vZGUsIGF0dHIp
KSByZXN1bHRzLnB1c2gobm9kZSk7Ci0gICAgICByZXR1cm4gcmVzdWx0czsKLSAgICB9LAotCi0g
ICAgYXR0cjogZnVuY3Rpb24obm9kZXMsIHJvb3QsIGF0dHIsIHZhbHVlLCBvcGVyYXRvciwgY29t
YmluYXRvcikgewotICAgICAgaWYgKCFub2Rlcykgbm9kZXMgPSByb290LmdldEVsZW1lbnRzQnlU
YWdOYW1lKCIqIik7Ci0gICAgICBpZiAobm9kZXMgJiYgY29tYmluYXRvcikgbm9kZXMgPSB0aGlz
W2NvbWJpbmF0b3JdKG5vZGVzKTsKLSAgICAgIHZhciBoYW5kbGVyID0gU2VsZWN0b3Iub3BlcmF0
b3JzW29wZXJhdG9yXSwgcmVzdWx0cyA9IFtdOwotICAgICAgZm9yICh2YXIgaSA9IDAsIG5vZGU7
IG5vZGUgPSBub2Rlc1tpXTsgaSsrKSB7Ci0gICAgICAgIHZhciBub2RlVmFsdWUgPSBFbGVtZW50
LnJlYWRBdHRyaWJ1dGUobm9kZSwgYXR0cik7Ci0gICAgICAgIGlmIChub2RlVmFsdWUgPT09IG51
bGwpIGNvbnRpbnVlOwotICAgICAgICBpZiAoaGFuZGxlcihub2RlVmFsdWUsIHZhbHVlKSkgcmVz
dWx0cy5wdXNoKG5vZGUpOwotICAgICAgfQotICAgICAgcmV0dXJuIHJlc3VsdHM7Ci0gICAgfSwK
LQotICAgIHBzZXVkbzogZnVuY3Rpb24obm9kZXMsIG5hbWUsIHZhbHVlLCByb290LCBjb21iaW5h
dG9yKSB7Ci0gICAgICBpZiAobm9kZXMgJiYgY29tYmluYXRvcikgbm9kZXMgPSB0aGlzW2NvbWJp
bmF0b3JdKG5vZGVzKTsKLSAgICAgIGlmICghbm9kZXMpIG5vZGVzID0gcm9vdC5nZXRFbGVtZW50
c0J5VGFnTmFtZSgiKiIpOwotICAgICAgcmV0dXJuIFNlbGVjdG9yLnBzZXVkb3NbbmFtZV0obm9k
ZXMsIHZhbHVlLCByb290KTsKLSAgICB9Ci0gIH0sCi0KLSAgcHNldWRvczogewotICAgICdmaXJz
dC1jaGlsZCc6IGZ1bmN0aW9uKG5vZGVzLCB2YWx1ZSwgcm9vdCkgewotICAgICAgZm9yICh2YXIg
aSA9IDAsIHJlc3VsdHMgPSBbXSwgbm9kZTsgbm9kZSA9IG5vZGVzW2ldOyBpKyspIHsKLSAgICAg
ICAgaWYgKFNlbGVjdG9yLmhhbmRsZXJzLnByZXZpb3VzRWxlbWVudFNpYmxpbmcobm9kZSkpIGNv
bnRpbnVlOwotICAgICAgICAgIHJlc3VsdHMucHVzaChub2RlKTsKLSAgICAgIH0KLSAgICAgIHJl
dHVybiByZXN1bHRzOwotICAgIH0sCi0gICAgJ2xhc3QtY2hpbGQnOiBmdW5jdGlvbihub2Rlcywg
dmFsdWUsIHJvb3QpIHsKLSAgICAgIGZvciAodmFyIGkgPSAwLCByZXN1bHRzID0gW10sIG5vZGU7
IG5vZGUgPSBub2Rlc1tpXTsgaSsrKSB7Ci0gICAgICAgIGlmIChTZWxlY3Rvci5oYW5kbGVycy5u
ZXh0RWxlbWVudFNpYmxpbmcobm9kZSkpIGNvbnRpbnVlOwotICAgICAgICAgIHJlc3VsdHMucHVz
aChub2RlKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiByZXN1bHRzOwotICAgIH0sCi0gICAgJ29u
bHktY2hpbGQnOiBmdW5jdGlvbihub2RlcywgdmFsdWUsIHJvb3QpIHsKLSAgICAgIHZhciBoID0g
U2VsZWN0b3IuaGFuZGxlcnM7Ci0gICAgICBmb3IgKHZhciBpID0gMCwgcmVzdWx0cyA9IFtdLCBu
b2RlOyBub2RlID0gbm9kZXNbaV07IGkrKykKLSAgICAgICAgaWYgKCFoLnByZXZpb3VzRWxlbWVu
dFNpYmxpbmcobm9kZSkgJiYgIWgubmV4dEVsZW1lbnRTaWJsaW5nKG5vZGUpKQotICAgICAgICAg
IHJlc3VsdHMucHVzaChub2RlKTsKLSAgICAgIHJldHVybiByZXN1bHRzOwotICAgIH0sCi0gICAg
J250aC1jaGlsZCc6ICAgICAgICBmdW5jdGlvbihub2RlcywgZm9ybXVsYSwgcm9vdCkgewotICAg
ICAgcmV0dXJuIFNlbGVjdG9yLnBzZXVkb3MubnRoKG5vZGVzLCBmb3JtdWxhLCByb290KTsKLSAg
ICB9LAotICAgICdudGgtbGFzdC1jaGlsZCc6ICAgZnVuY3Rpb24obm9kZXMsIGZvcm11bGEsIHJv
b3QpIHsKLSAgICAgIHJldHVybiBTZWxlY3Rvci5wc2V1ZG9zLm50aChub2RlcywgZm9ybXVsYSwg
cm9vdCwgdHJ1ZSk7Ci0gICAgfSwKLSAgICAnbnRoLW9mLXR5cGUnOiAgICAgIGZ1bmN0aW9uKG5v
ZGVzLCBmb3JtdWxhLCByb290KSB7Ci0gICAgICByZXR1cm4gU2VsZWN0b3IucHNldWRvcy5udGgo
bm9kZXMsIGZvcm11bGEsIHJvb3QsIGZhbHNlLCB0cnVlKTsKLSAgICB9LAotICAgICdudGgtbGFz
dC1vZi10eXBlJzogZnVuY3Rpb24obm9kZXMsIGZvcm11bGEsIHJvb3QpIHsKLSAgICAgIHJldHVy
biBTZWxlY3Rvci5wc2V1ZG9zLm50aChub2RlcywgZm9ybXVsYSwgcm9vdCwgdHJ1ZSwgdHJ1ZSk7
Ci0gICAgfSwKLSAgICAnZmlyc3Qtb2YtdHlwZSc6ICAgIGZ1bmN0aW9uKG5vZGVzLCBmb3JtdWxh
LCByb290KSB7Ci0gICAgICByZXR1cm4gU2VsZWN0b3IucHNldWRvcy5udGgobm9kZXMsICIxIiwg
cm9vdCwgZmFsc2UsIHRydWUpOwotICAgIH0sCi0gICAgJ2xhc3Qtb2YtdHlwZSc6ICAgICBmdW5j
dGlvbihub2RlcywgZm9ybXVsYSwgcm9vdCkgewotICAgICAgcmV0dXJuIFNlbGVjdG9yLnBzZXVk
b3MubnRoKG5vZGVzLCAiMSIsIHJvb3QsIHRydWUsIHRydWUpOwotICAgIH0sCi0gICAgJ29ubHkt
b2YtdHlwZSc6ICAgICBmdW5jdGlvbihub2RlcywgZm9ybXVsYSwgcm9vdCkgewotICAgICAgdmFy
IHAgPSBTZWxlY3Rvci5wc2V1ZG9zOwotICAgICAgcmV0dXJuIHBbJ2xhc3Qtb2YtdHlwZSddKHBb
J2ZpcnN0LW9mLXR5cGUnXShub2RlcywgZm9ybXVsYSwgcm9vdCksIGZvcm11bGEsIHJvb3QpOwot
ICAgIH0sCi0KLSAgICAvLyBoYW5kbGVzIHRoZSBhbitiIGxvZ2ljCi0gICAgZ2V0SW5kaWNlczog
ZnVuY3Rpb24oYSwgYiwgdG90YWwpIHsKLSAgICAgIGlmIChhID09IDApIHJldHVybiBiID4gMCA/
IFtiXSA6IFtdOwotICAgICAgcmV0dXJuICRSKDEsIHRvdGFsKS5pbmplY3QoW10sIGZ1bmN0aW9u
KG1lbW8sIGkpIHsKLSAgICAgICAgaWYgKDAgPT0gKGkgLSBiKSAlIGEgJiYgKGkgLSBiKSAvIGEg
Pj0gMCkgbWVtby5wdXNoKGkpOwotICAgICAgICByZXR1cm4gbWVtbzsKLSAgICAgIH0pOwotICAg
IH0sCi0KLSAgICAvLyBoYW5kbGVzIG50aCgtbGFzdCktY2hpbGQsIG50aCgtbGFzdCktb2YtdHlw
ZSwgYW5kIChmaXJzdHxsYXN0KS1vZi10eXBlCi0gICAgbnRoOiBmdW5jdGlvbihub2RlcywgZm9y
bXVsYSwgcm9vdCwgcmV2ZXJzZSwgb2ZUeXBlKSB7Ci0gICAgICBpZiAobm9kZXMubGVuZ3RoID09
IDApIHJldHVybiBbXTsKLSAgICAgIGlmIChmb3JtdWxhID09ICdldmVuJykgZm9ybXVsYSA9ICcy
biswJzsKLSAgICAgIGlmIChmb3JtdWxhID09ICdvZGQnKSAgZm9ybXVsYSA9ICcybisxJzsKLSAg
ICAgIHZhciBoID0gU2VsZWN0b3IuaGFuZGxlcnMsIHJlc3VsdHMgPSBbXSwgaW5kZXhlZCA9IFtd
LCBtOwotICAgICAgaC5tYXJrKG5vZGVzKTsKLSAgICAgIGZvciAodmFyIGkgPSAwLCBub2RlOyBu
b2RlID0gbm9kZXNbaV07IGkrKykgewotICAgICAgICBpZiAoIW5vZGUucGFyZW50Tm9kZS5fY291
bnRlZEJ5UHJvdG90eXBlKSB7Ci0gICAgICAgICAgaC5pbmRleChub2RlLnBhcmVudE5vZGUsIHJl
dmVyc2UsIG9mVHlwZSk7Ci0gICAgICAgICAgaW5kZXhlZC5wdXNoKG5vZGUucGFyZW50Tm9kZSk7
Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGlmIChmb3JtdWxhLm1hdGNoKC9eXGQrJC8pKSB7
IC8vIGp1c3QgYSBudW1iZXIKLSAgICAgICAgZm9ybXVsYSA9IE51bWJlcihmb3JtdWxhKTsKLSAg
ICAgICAgZm9yICh2YXIgaSA9IDAsIG5vZGU7IG5vZGUgPSBub2Rlc1tpXTsgaSsrKQotICAgICAg
ICAgIGlmIChub2RlLm5vZGVJbmRleCA9PSBmb3JtdWxhKSByZXN1bHRzLnB1c2gobm9kZSk7Ci0g
ICAgICB9IGVsc2UgaWYgKG0gPSBmb3JtdWxhLm1hdGNoKC9eKC0/XGQqKT9uKChbKy1dKShcZCsp
KT8vKSkgeyAvLyBhbitiCi0gICAgICAgIGlmIChtWzFdID09ICItIikgbVsxXSA9IC0xOwotICAg
ICAgICB2YXIgYSA9IG1bMV0gPyBOdW1iZXIobVsxXSkgOiAxOwotICAgICAgICB2YXIgYiA9IG1b
Ml0gPyBOdW1iZXIobVsyXSkgOiAwOwotICAgICAgICB2YXIgaW5kaWNlcyA9IFNlbGVjdG9yLnBz
ZXVkb3MuZ2V0SW5kaWNlcyhhLCBiLCBub2Rlcy5sZW5ndGgpOwotICAgICAgICBmb3IgKHZhciBp
ID0gMCwgbm9kZSwgbCA9IGluZGljZXMubGVuZ3RoOyBub2RlID0gbm9kZXNbaV07IGkrKykgewot
ICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbDsgaisrKQotICAgICAgICAgICAgaWYgKG5v
ZGUubm9kZUluZGV4ID09IGluZGljZXNbal0pIHJlc3VsdHMucHVzaChub2RlKTsKLSAgICAgICAg
fQotICAgICAgfQotICAgICAgaC51bm1hcmsobm9kZXMpOwotICAgICAgaC51bm1hcmsoaW5kZXhl
ZCk7Ci0gICAgICByZXR1cm4gcmVzdWx0czsKLSAgICB9LAotCi0gICAgJ2VtcHR5JzogZnVuY3Rp
b24obm9kZXMsIHZhbHVlLCByb290KSB7Ci0gICAgICBmb3IgKHZhciBpID0gMCwgcmVzdWx0cyA9
IFtdLCBub2RlOyBub2RlID0gbm9kZXNbaV07IGkrKykgewotICAgICAgICAvLyBJRSB0cmVhdHMg
Y29tbWVudHMgYXMgZWxlbWVudCBub2RlcwotICAgICAgICBpZiAobm9kZS50YWdOYW1lID09ICch
JyB8fCAobm9kZS5maXJzdENoaWxkICYmICFub2RlLmlubmVySFRNTC5tYXRjaCgvXlxzKiQvKSkp
IGNvbnRpbnVlOwotICAgICAgICByZXN1bHRzLnB1c2gobm9kZSk7Ci0gICAgICB9Ci0gICAgICBy
ZXR1cm4gcmVzdWx0czsKLSAgICB9LAotCi0gICAgJ25vdCc6IGZ1bmN0aW9uKG5vZGVzLCBzZWxl
Y3Rvciwgcm9vdCkgewotICAgICAgdmFyIGggPSBTZWxlY3Rvci5oYW5kbGVycywgc2VsZWN0b3JU
eXBlLCBtOwotICAgICAgdmFyIGV4Y2x1c2lvbnMgPSBuZXcgU2VsZWN0b3Ioc2VsZWN0b3IpLmZp
bmRFbGVtZW50cyhyb290KTsKLSAgICAgIGgubWFyayhleGNsdXNpb25zKTsKLSAgICAgIGZvciAo
dmFyIGkgPSAwLCByZXN1bHRzID0gW10sIG5vZGU7IG5vZGUgPSBub2Rlc1tpXTsgaSsrKQotICAg
ICAgICBpZiAoIW5vZGUuX2NvdW50ZWRCeVByb3RvdHlwZSkgcmVzdWx0cy5wdXNoKG5vZGUpOwot
ICAgICAgaC51bm1hcmsoZXhjbHVzaW9ucyk7Ci0gICAgICByZXR1cm4gcmVzdWx0czsKLSAgICB9
LAotCi0gICAgJ2VuYWJsZWQnOiBmdW5jdGlvbihub2RlcywgdmFsdWUsIHJvb3QpIHsKLSAgICAg
IGZvciAodmFyIGkgPSAwLCByZXN1bHRzID0gW10sIG5vZGU7IG5vZGUgPSBub2Rlc1tpXTsgaSsr
KQotICAgICAgICBpZiAoIW5vZGUuZGlzYWJsZWQpIHJlc3VsdHMucHVzaChub2RlKTsKLSAgICAg
IHJldHVybiByZXN1bHRzOwotICAgIH0sCi0KLSAgICAnZGlzYWJsZWQnOiBmdW5jdGlvbihub2Rl
cywgdmFsdWUsIHJvb3QpIHsKLSAgICAgIGZvciAodmFyIGkgPSAwLCByZXN1bHRzID0gW10sIG5v
ZGU7IG5vZGUgPSBub2Rlc1tpXTsgaSsrKQotICAgICAgICBpZiAobm9kZS5kaXNhYmxlZCkgcmVz
dWx0cy5wdXNoKG5vZGUpOwotICAgICAgcmV0dXJuIHJlc3VsdHM7Ci0gICAgfSwKLQotICAgICdj
aGVja2VkJzogZnVuY3Rpb24obm9kZXMsIHZhbHVlLCByb290KSB7Ci0gICAgICBmb3IgKHZhciBp
ID0gMCwgcmVzdWx0cyA9IFtdLCBub2RlOyBub2RlID0gbm9kZXNbaV07IGkrKykKLSAgICAgICAg
aWYgKG5vZGUuY2hlY2tlZCkgcmVzdWx0cy5wdXNoKG5vZGUpOwotICAgICAgcmV0dXJuIHJlc3Vs
dHM7Ci0gICAgfQotICB9LAotCi0gIG9wZXJhdG9yczogewotICAgICc9JzogIGZ1bmN0aW9uKG52
LCB2KSB7IHJldHVybiBudiA9PSB2OyB9LAotICAgICchPSc6IGZ1bmN0aW9uKG52LCB2KSB7IHJl
dHVybiBudiAhPSB2OyB9LAotICAgICdePSc6IGZ1bmN0aW9uKG52LCB2KSB7IHJldHVybiBudi5z
dGFydHNXaXRoKHYpOyB9LAotICAgICckPSc6IGZ1bmN0aW9uKG52LCB2KSB7IHJldHVybiBudi5l
bmRzV2l0aCh2KTsgfSwKLSAgICAnKj0nOiBmdW5jdGlvbihudiwgdikgeyByZXR1cm4gbnYuaW5j
bHVkZSh2KTsgfSwKLSAgICAnfj0nOiBmdW5jdGlvbihudiwgdikgeyByZXR1cm4gKCcgJyArIG52
ICsgJyAnKS5pbmNsdWRlKCcgJyArIHYgKyAnICcpOyB9LAotICAgICd8PSc6IGZ1bmN0aW9uKG52
LCB2KSB7IHJldHVybiAoJy0nICsgbnYudG9VcHBlckNhc2UoKSArICctJykuaW5jbHVkZSgnLScg
KyB2LnRvVXBwZXJDYXNlKCkgKyAnLScpOyB9Ci0gIH0sCi0KLSAgc3BsaXQ6IGZ1bmN0aW9uKGV4
cHJlc3Npb24pIHsKLSAgICB2YXIgZXhwcmVzc2lvbnMgPSBbXTsKLSAgICBleHByZXNzaW9uLnNj
YW4oLygoW1x3Izoufj4rKClccy1dK3xcKnxcWy4qP1xdKSspXHMqKCx8JCkvLCBmdW5jdGlvbiht
KSB7Ci0gICAgICBleHByZXNzaW9ucy5wdXNoKG1bMV0uc3RyaXAoKSk7Ci0gICAgfSk7Ci0gICAg
cmV0dXJuIGV4cHJlc3Npb25zOwotICB9LAotCi0gIG1hdGNoRWxlbWVudHM6IGZ1bmN0aW9uKGVs
ZW1lbnRzLCBleHByZXNzaW9uKSB7Ci0gICAgdmFyIG1hdGNoZXMgPSAkJChleHByZXNzaW9uKSwg
aCA9IFNlbGVjdG9yLmhhbmRsZXJzOwotICAgIGgubWFyayhtYXRjaGVzKTsKLSAgICBmb3IgKHZh
ciBpID0gMCwgcmVzdWx0cyA9IFtdLCBlbGVtZW50OyBlbGVtZW50ID0gZWxlbWVudHNbaV07IGkr
KykKLSAgICAgIGlmIChlbGVtZW50Ll9jb3VudGVkQnlQcm90b3R5cGUpIHJlc3VsdHMucHVzaChl
bGVtZW50KTsKLSAgICBoLnVubWFyayhtYXRjaGVzKTsKLSAgICByZXR1cm4gcmVzdWx0czsKLSAg
fSwKLQotICBmaW5kRWxlbWVudDogZnVuY3Rpb24oZWxlbWVudHMsIGV4cHJlc3Npb24sIGluZGV4
KSB7Ci0gICAgaWYgKE9iamVjdC5pc051bWJlcihleHByZXNzaW9uKSkgewotICAgICAgaW5kZXgg
PSBleHByZXNzaW9uOyBleHByZXNzaW9uID0gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiBTZWxl
Y3Rvci5tYXRjaEVsZW1lbnRzKGVsZW1lbnRzLCBleHByZXNzaW9uIHx8ICcqJylbaW5kZXggfHwg
MF07Ci0gIH0sCi0KLSAgZmluZENoaWxkRWxlbWVudHM6IGZ1bmN0aW9uKGVsZW1lbnQsIGV4cHJl
c3Npb25zKSB7Ci0gICAgZXhwcmVzc2lvbnMgPSBTZWxlY3Rvci5zcGxpdChleHByZXNzaW9ucy5q
b2luKCcsJykpOwotICAgIHZhciByZXN1bHRzID0gW10sIGggPSBTZWxlY3Rvci5oYW5kbGVyczsK
LSAgICBmb3IgKHZhciBpID0gMCwgbCA9IGV4cHJlc3Npb25zLmxlbmd0aCwgc2VsZWN0b3I7IGkg
PCBsOyBpKyspIHsKLSAgICAgIHNlbGVjdG9yID0gbmV3IFNlbGVjdG9yKGV4cHJlc3Npb25zW2ld
LnN0cmlwKCkpOwotICAgICAgaC5jb25jYXQocmVzdWx0cywgc2VsZWN0b3IuZmluZEVsZW1lbnRz
KGVsZW1lbnQpKTsKLSAgICB9Ci0gICAgcmV0dXJuIChsID4gMSkgPyBoLnVuaXF1ZShyZXN1bHRz
KSA6IHJlc3VsdHM7Ci0gIH0KLX0pOwotCi1pZiAoUHJvdG90eXBlLkJyb3dzZXIuSUUpIHsKLSAg
T2JqZWN0LmV4dGVuZChTZWxlY3Rvci5oYW5kbGVycywgewotICAgIC8vIElFIHJldHVybnMgY29t
bWVudCBub2RlcyBvbiBnZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpLgotICAgIC8vIEZpbHRlciB0
aGVtIG91dC4KLSAgICBjb25jYXQ6IGZ1bmN0aW9uKGEsIGIpIHsKLSAgICAgIGZvciAodmFyIGkg
PSAwLCBub2RlOyBub2RlID0gYltpXTsgaSsrKQotICAgICAgICBpZiAobm9kZS50YWdOYW1lICE9
PSAiISIpIGEucHVzaChub2RlKTsKLSAgICAgIHJldHVybiBhOwotICAgIH0sCi0KLSAgICAvLyBJ
RSBpbXByb3Blcmx5IHNlcmlhbGl6ZXMgX2NvdW50ZWRCeVByb3RvdHlwZSBpbiAoaW5uZXJ8b3V0
ZXIpSFRNTC4KLSAgICB1bm1hcms6IGZ1bmN0aW9uKG5vZGVzKSB7Ci0gICAgICBmb3IgKHZhciBp
ID0gMCwgbm9kZTsgbm9kZSA9IG5vZGVzW2ldOyBpKyspCi0gICAgICAgIG5vZGUucmVtb3ZlQXR0
cmlidXRlKCdfY291bnRlZEJ5UHJvdG90eXBlJyk7Ci0gICAgICByZXR1cm4gbm9kZXM7Ci0gICAg
fQotICB9KTsKLX0KLQotZnVuY3Rpb24gJCQoKSB7Ci0gIHJldHVybiBTZWxlY3Rvci5maW5kQ2hp
bGRFbGVtZW50cyhkb2N1bWVudCwgJEEoYXJndW1lbnRzKSk7Ci19Ci12YXIgRm9ybSA9IHsKLSAg
cmVzZXQ6IGZ1bmN0aW9uKGZvcm0pIHsKLSAgICAkKGZvcm0pLnJlc2V0KCk7Ci0gICAgcmV0dXJu
IGZvcm07Ci0gIH0sCi0KLSAgc2VyaWFsaXplRWxlbWVudHM6IGZ1bmN0aW9uKGVsZW1lbnRzLCBv
cHRpb25zKSB7Ci0gICAgaWYgKHR5cGVvZiBvcHRpb25zICE9ICdvYmplY3QnKSBvcHRpb25zID0g
eyBoYXNoOiAhIW9wdGlvbnMgfTsKLSAgICBlbHNlIGlmIChPYmplY3QuaXNVbmRlZmluZWQob3B0
aW9ucy5oYXNoKSkgb3B0aW9ucy5oYXNoID0gdHJ1ZTsKLSAgICB2YXIga2V5LCB2YWx1ZSwgc3Vi
bWl0dGVkID0gZmFsc2UsIHN1Ym1pdCA9IG9wdGlvbnMuc3VibWl0OwotCi0gICAgdmFyIGRhdGEg
PSBlbGVtZW50cy5pbmplY3QoeyB9LCBmdW5jdGlvbihyZXN1bHQsIGVsZW1lbnQpIHsKLSAgICAg
IGlmICghZWxlbWVudC5kaXNhYmxlZCAmJiBlbGVtZW50Lm5hbWUpIHsKLSAgICAgICAga2V5ID0g
ZWxlbWVudC5uYW1lOyB2YWx1ZSA9ICQoZWxlbWVudCkuZ2V0VmFsdWUoKTsKLSAgICAgICAgaWYg
KHZhbHVlICE9IG51bGwgJiYgKGVsZW1lbnQudHlwZSAhPSAnc3VibWl0JyB8fCAoIXN1Ym1pdHRl
ZCAmJgotICAgICAgICAgICAgc3VibWl0ICE9PSBmYWxzZSAmJiAoIXN1Ym1pdCB8fCBrZXkgPT0g
c3VibWl0KSAmJiAoc3VibWl0dGVkID0gdHJ1ZSkpKSkgewotICAgICAgICAgIGlmIChrZXkgaW4g
cmVzdWx0KSB7Ci0gICAgICAgICAgICAvLyBhIGtleSBpcyBhbHJlYWR5IHByZXNlbnQ7IGNvbnN0
cnVjdCBhbiBhcnJheSBvZiB2YWx1ZXMKLSAgICAgICAgICAgIGlmICghT2JqZWN0LmlzQXJyYXko
cmVzdWx0W2tleV0pKSByZXN1bHRba2V5XSA9IFtyZXN1bHRba2V5XV07Ci0gICAgICAgICAgICBy
ZXN1bHRba2V5XS5wdXNoKHZhbHVlKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZSByZXN1
bHRba2V5XSA9IHZhbHVlOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICByZXR1cm4gcmVzdWx0
OwotICAgIH0pOwotCi0gICAgcmV0dXJuIG9wdGlvbnMuaGFzaCA/IGRhdGEgOiBPYmplY3QudG9R
dWVyeVN0cmluZyhkYXRhKTsKLSAgfQotfTsKLQotRm9ybS5NZXRob2RzID0gewotICBzZXJpYWxp
emU6IGZ1bmN0aW9uKGZvcm0sIG9wdGlvbnMpIHsKLSAgICByZXR1cm4gRm9ybS5zZXJpYWxpemVF
bGVtZW50cyhGb3JtLmdldEVsZW1lbnRzKGZvcm0pLCBvcHRpb25zKTsKLSAgfSwKLQotICBnZXRF
bGVtZW50czogZnVuY3Rpb24oZm9ybSkgewotICAgIHJldHVybiAkQSgkKGZvcm0pLmdldEVsZW1l
bnRzQnlUYWdOYW1lKCcqJykpLmluamVjdChbXSwKLSAgICAgIGZ1bmN0aW9uKGVsZW1lbnRzLCBj
aGlsZCkgewotICAgICAgICBpZiAoRm9ybS5FbGVtZW50LlNlcmlhbGl6ZXJzW2NoaWxkLnRhZ05h
bWUudG9Mb3dlckNhc2UoKV0pCi0gICAgICAgICAgZWxlbWVudHMucHVzaChFbGVtZW50LmV4dGVu
ZChjaGlsZCkpOwotICAgICAgICByZXR1cm4gZWxlbWVudHM7Ci0gICAgICB9Ci0gICAgKTsKLSAg
fSwKLQotICBnZXRJbnB1dHM6IGZ1bmN0aW9uKGZvcm0sIHR5cGVOYW1lLCBuYW1lKSB7Ci0gICAg
Zm9ybSA9ICQoZm9ybSk7Ci0gICAgdmFyIGlucHV0cyA9IGZvcm0uZ2V0RWxlbWVudHNCeVRhZ05h
bWUoJ2lucHV0Jyk7Ci0KLSAgICBpZiAoIXR5cGVOYW1lICYmICFuYW1lKSByZXR1cm4gJEEoaW5w
dXRzKS5tYXAoRWxlbWVudC5leHRlbmQpOwotCi0gICAgZm9yICh2YXIgaSA9IDAsIG1hdGNoaW5n
SW5wdXRzID0gW10sIGxlbmd0aCA9IGlucHV0cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykgewot
ICAgICAgdmFyIGlucHV0ID0gaW5wdXRzW2ldOwotICAgICAgaWYgKCh0eXBlTmFtZSAmJiBpbnB1
dC50eXBlICE9IHR5cGVOYW1lKSB8fCAobmFtZSAmJiBpbnB1dC5uYW1lICE9IG5hbWUpKQotICAg
ICAgICBjb250aW51ZTsKLSAgICAgIG1hdGNoaW5nSW5wdXRzLnB1c2goRWxlbWVudC5leHRlbmQo
aW5wdXQpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbWF0Y2hpbmdJbnB1dHM7Ci0gIH0sCi0KLSAg
ZGlzYWJsZTogZnVuY3Rpb24oZm9ybSkgewotICAgIGZvcm0gPSAkKGZvcm0pOwotICAgIEZvcm0u
Z2V0RWxlbWVudHMoZm9ybSkuaW52b2tlKCdkaXNhYmxlJyk7Ci0gICAgcmV0dXJuIGZvcm07Ci0g
IH0sCi0KLSAgZW5hYmxlOiBmdW5jdGlvbihmb3JtKSB7Ci0gICAgZm9ybSA9ICQoZm9ybSk7Ci0g
ICAgRm9ybS5nZXRFbGVtZW50cyhmb3JtKS5pbnZva2UoJ2VuYWJsZScpOwotICAgIHJldHVybiBm
b3JtOwotICB9LAotCi0gIGZpbmRGaXJzdEVsZW1lbnQ6IGZ1bmN0aW9uKGZvcm0pIHsKLSAgICB2
YXIgZWxlbWVudHMgPSAkKGZvcm0pLmdldEVsZW1lbnRzKCkuZmluZEFsbChmdW5jdGlvbihlbGVt
ZW50KSB7Ci0gICAgICByZXR1cm4gJ2hpZGRlbicgIT0gZWxlbWVudC50eXBlICYmICFlbGVtZW50
LmRpc2FibGVkOwotICAgIH0pOwotICAgIHZhciBmaXJzdEJ5SW5kZXggPSBlbGVtZW50cy5maW5k
QWxsKGZ1bmN0aW9uKGVsZW1lbnQpIHsKLSAgICAgIHJldHVybiBlbGVtZW50Lmhhc0F0dHJpYnV0
ZSgndGFiSW5kZXgnKSAmJiBlbGVtZW50LnRhYkluZGV4ID49IDA7Ci0gICAgfSkuc29ydEJ5KGZ1
bmN0aW9uKGVsZW1lbnQpIHsgcmV0dXJuIGVsZW1lbnQudGFiSW5kZXggfSkuZmlyc3QoKTsKLQot
ICAgIHJldHVybiBmaXJzdEJ5SW5kZXggPyBmaXJzdEJ5SW5kZXggOiBlbGVtZW50cy5maW5kKGZ1
bmN0aW9uKGVsZW1lbnQpIHsKLSAgICAgIHJldHVybiBbJ2lucHV0JywgJ3NlbGVjdCcsICd0ZXh0
YXJlYSddLmluY2x1ZGUoZWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCkpOwotICAgIH0pOwot
ICB9LAotCi0gIGZvY3VzRmlyc3RFbGVtZW50OiBmdW5jdGlvbihmb3JtKSB7Ci0gICAgZm9ybSA9
ICQoZm9ybSk7Ci0gICAgZm9ybS5maW5kRmlyc3RFbGVtZW50KCkuYWN0aXZhdGUoKTsKLSAgICBy
ZXR1cm4gZm9ybTsKLSAgfSwKLQotICByZXF1ZXN0OiBmdW5jdGlvbihmb3JtLCBvcHRpb25zKSB7
Ci0gICAgZm9ybSA9ICQoZm9ybSksIG9wdGlvbnMgPSBPYmplY3QuY2xvbmUob3B0aW9ucyB8fCB7
IH0pOwotCi0gICAgdmFyIHBhcmFtcyA9IG9wdGlvbnMucGFyYW1ldGVycywgYWN0aW9uID0gZm9y
bS5yZWFkQXR0cmlidXRlKCdhY3Rpb24nKSB8fCAnJzsKLSAgICBpZiAoYWN0aW9uLmJsYW5rKCkp
IGFjdGlvbiA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmOwotICAgIG9wdGlvbnMucGFyYW1ldGVycyA9
IGZvcm0uc2VyaWFsaXplKHRydWUpOwotCi0gICAgaWYgKHBhcmFtcykgewotICAgICAgaWYgKE9i
amVjdC5pc1N0cmluZyhwYXJhbXMpKSBwYXJhbXMgPSBwYXJhbXMudG9RdWVyeVBhcmFtcygpOwot
ICAgICAgT2JqZWN0LmV4dGVuZChvcHRpb25zLnBhcmFtZXRlcnMsIHBhcmFtcyk7Ci0gICAgfQot
Ci0gICAgaWYgKGZvcm0uaGFzQXR0cmlidXRlKCdtZXRob2QnKSAmJiAhb3B0aW9ucy5tZXRob2Qp
Ci0gICAgICBvcHRpb25zLm1ldGhvZCA9IGZvcm0ubWV0aG9kOwotCi0gICAgcmV0dXJuIG5ldyBB
amF4LlJlcXVlc3QoYWN0aW9uLCBvcHRpb25zKTsKLSAgfQotfTsKLQotLyotLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSovCi0KLUZvcm0uRWxlbWVudCA9IHsKLSAgZm9jdXM6IGZ1bmN0aW9uKGVsZW1lbnQpIHsK
LSAgICAkKGVsZW1lbnQpLmZvY3VzKCk7Ci0gICAgcmV0dXJuIGVsZW1lbnQ7Ci0gIH0sCi0KLSAg
c2VsZWN0OiBmdW5jdGlvbihlbGVtZW50KSB7Ci0gICAgJChlbGVtZW50KS5zZWxlY3QoKTsKLSAg
ICByZXR1cm4gZWxlbWVudDsKLSAgfQotfTsKLQotRm9ybS5FbGVtZW50Lk1ldGhvZHMgPSB7Ci0g
IHNlcmlhbGl6ZTogZnVuY3Rpb24oZWxlbWVudCkgewotICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQp
OwotICAgIGlmICghZWxlbWVudC5kaXNhYmxlZCAmJiBlbGVtZW50Lm5hbWUpIHsKLSAgICAgIHZh
ciB2YWx1ZSA9IGVsZW1lbnQuZ2V0VmFsdWUoKTsKLSAgICAgIGlmICh2YWx1ZSAhPSB1bmRlZmlu
ZWQpIHsKLSAgICAgICAgdmFyIHBhaXIgPSB7IH07Ci0gICAgICAgIHBhaXJbZWxlbWVudC5uYW1l
XSA9IHZhbHVlOwotICAgICAgICByZXR1cm4gT2JqZWN0LnRvUXVlcnlTdHJpbmcocGFpcik7Ci0g
ICAgICB9Ci0gICAgfQotICAgIHJldHVybiAnJzsKLSAgfSwKLQotICBnZXRWYWx1ZTogZnVuY3Rp
b24oZWxlbWVudCkgewotICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwotICAgIHZhciBtZXRob2Qg
PSBlbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKTsKLSAgICByZXR1cm4gRm9ybS5FbGVtZW50
LlNlcmlhbGl6ZXJzW21ldGhvZF0oZWxlbWVudCk7Ci0gIH0sCi0KLSAgc2V0VmFsdWU6IGZ1bmN0
aW9uKGVsZW1lbnQsIHZhbHVlKSB7Ci0gICAgZWxlbWVudCA9ICQoZWxlbWVudCk7Ci0gICAgdmFy
IG1ldGhvZCA9IGVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpOwotICAgIEZvcm0uRWxlbWVu
dC5TZXJpYWxpemVyc1ttZXRob2RdKGVsZW1lbnQsIHZhbHVlKTsKLSAgICByZXR1cm4gZWxlbWVu
dDsKLSAgfSwKLQotICBjbGVhcjogZnVuY3Rpb24oZWxlbWVudCkgewotICAgICQoZWxlbWVudCku
dmFsdWUgPSAnJzsKLSAgICByZXR1cm4gZWxlbWVudDsKLSAgfSwKLQotICBwcmVzZW50OiBmdW5j
dGlvbihlbGVtZW50KSB7Ci0gICAgcmV0dXJuICQoZWxlbWVudCkudmFsdWUgIT0gJyc7Ci0gIH0s
Ci0KLSAgYWN0aXZhdGU6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKLSAgICBlbGVtZW50ID0gJChlbGVt
ZW50KTsKLSAgICB0cnkgewotICAgICAgZWxlbWVudC5mb2N1cygpOwotICAgICAgaWYgKGVsZW1l
bnQuc2VsZWN0ICYmIChlbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKSAhPSAnaW5wdXQnIHx8
Ci0gICAgICAgICAgIVsnYnV0dG9uJywgJ3Jlc2V0JywgJ3N1Ym1pdCddLmluY2x1ZGUoZWxlbWVu
dC50eXBlKSkpCi0gICAgICAgIGVsZW1lbnQuc2VsZWN0KCk7Ci0gICAgfSBjYXRjaCAoZSkgeyB9
Ci0gICAgcmV0dXJuIGVsZW1lbnQ7Ci0gIH0sCi0KLSAgZGlzYWJsZTogZnVuY3Rpb24oZWxlbWVu
dCkgewotICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwotICAgIGVsZW1lbnQuYmx1cigpOwotICAg
IGVsZW1lbnQuZGlzYWJsZWQgPSB0cnVlOwotICAgIHJldHVybiBlbGVtZW50OwotICB9LAotCi0g
IGVuYWJsZTogZnVuY3Rpb24oZWxlbWVudCkgewotICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwot
ICAgIGVsZW1lbnQuZGlzYWJsZWQgPSBmYWxzZTsKLSAgICByZXR1cm4gZWxlbWVudDsKLSAgfQot
fTsKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXZhciBGaWVsZCA9IEZvcm0uRWxlbWVudDsK
LXZhciAkRiA9IEZvcm0uRWxlbWVudC5NZXRob2RzLmdldFZhbHVlOwotCi0vKi0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tKi8KLQotRm9ybS5FbGVtZW50LlNlcmlhbGl6ZXJzID0gewotICBpbnB1dDogZnVuY3Rp
b24oZWxlbWVudCwgdmFsdWUpIHsKLSAgICBzd2l0Y2ggKGVsZW1lbnQudHlwZS50b0xvd2VyQ2Fz
ZSgpKSB7Ci0gICAgICBjYXNlICdjaGVja2JveCc6Ci0gICAgICBjYXNlICdyYWRpbyc6Ci0gICAg
ICAgIHJldHVybiBGb3JtLkVsZW1lbnQuU2VyaWFsaXplcnMuaW5wdXRTZWxlY3RvcihlbGVtZW50
LCB2YWx1ZSk7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gRm9ybS5FbGVtZW50LlNl
cmlhbGl6ZXJzLnRleHRhcmVhKGVsZW1lbnQsIHZhbHVlKTsKLSAgICB9Ci0gIH0sCi0KLSAgaW5w
dXRTZWxlY3RvcjogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWUpIHsKLSAgICBpZiAoT2JqZWN0Lmlz
VW5kZWZpbmVkKHZhbHVlKSkgcmV0dXJuIGVsZW1lbnQuY2hlY2tlZCA/IGVsZW1lbnQudmFsdWUg
OiBudWxsOwotICAgIGVsc2UgZWxlbWVudC5jaGVja2VkID0gISF2YWx1ZTsKLSAgfSwKLQotICB0
ZXh0YXJlYTogZnVuY3Rpb24oZWxlbWVudCwgdmFsdWUpIHsKLSAgICBpZiAoT2JqZWN0LmlzVW5k
ZWZpbmVkKHZhbHVlKSkgcmV0dXJuIGVsZW1lbnQudmFsdWU7Ci0gICAgZWxzZSBlbGVtZW50LnZh
bHVlID0gdmFsdWU7Ci0gIH0sCi0KLSAgc2VsZWN0OiBmdW5jdGlvbihlbGVtZW50LCBpbmRleCkg
ewotICAgIGlmIChPYmplY3QuaXNVbmRlZmluZWQoaW5kZXgpKQotICAgICAgcmV0dXJuIHRoaXNb
ZWxlbWVudC50eXBlID09ICdzZWxlY3Qtb25lJyA/Ci0gICAgICAgICdzZWxlY3RPbmUnIDogJ3Nl
bGVjdE1hbnknXShlbGVtZW50KTsKLSAgICBlbHNlIHsKLSAgICAgIHZhciBvcHQsIHZhbHVlLCBz
aW5nbGUgPSAhT2JqZWN0LmlzQXJyYXkoaW5kZXgpOwotICAgICAgZm9yICh2YXIgaSA9IDAsIGxl
bmd0aCA9IGVsZW1lbnQubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgb3B0ID0g
ZWxlbWVudC5vcHRpb25zW2ldOwotICAgICAgICB2YWx1ZSA9IHRoaXMub3B0aW9uVmFsdWUob3B0
KTsKLSAgICAgICAgaWYgKHNpbmdsZSkgewotICAgICAgICAgIGlmICh2YWx1ZSA9PSBpbmRleCkg
ewotICAgICAgICAgICAgb3B0LnNlbGVjdGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBvcHQuc2VsZWN0ZWQgPSBpbmRl
eC5pbmNsdWRlKHZhbHVlKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0sCi0KLSAgc2VsZWN0T25lOiBm
dW5jdGlvbihlbGVtZW50KSB7Ci0gICAgdmFyIGluZGV4ID0gZWxlbWVudC5zZWxlY3RlZEluZGV4
OwotICAgIHJldHVybiBpbmRleCA+PSAwID8gdGhpcy5vcHRpb25WYWx1ZShlbGVtZW50Lm9wdGlv
bnNbaW5kZXhdKSA6IG51bGw7Ci0gIH0sCi0KLSAgc2VsZWN0TWFueTogZnVuY3Rpb24oZWxlbWVu
dCkgewotICAgIHZhciB2YWx1ZXMsIGxlbmd0aCA9IGVsZW1lbnQubGVuZ3RoOwotICAgIGlmICgh
bGVuZ3RoKSByZXR1cm4gbnVsbDsKLQotICAgIGZvciAodmFyIGkgPSAwLCB2YWx1ZXMgPSBbXTsg
aSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICB2YXIgb3B0ID0gZWxlbWVudC5vcHRpb25zW2ldOwot
ICAgICAgaWYgKG9wdC5zZWxlY3RlZCkgdmFsdWVzLnB1c2godGhpcy5vcHRpb25WYWx1ZShvcHQp
KTsKLSAgICB9Ci0gICAgcmV0dXJuIHZhbHVlczsKLSAgfSwKLQotICBvcHRpb25WYWx1ZTogZnVu
Y3Rpb24ob3B0KSB7Ci0gICAgLy8gZXh0ZW5kIGVsZW1lbnQgYmVjYXVzZSBoYXNBdHRyaWJ1dGUg
bWF5IG5vdCBiZSBuYXRpdmUKLSAgICByZXR1cm4gRWxlbWVudC5leHRlbmQob3B0KS5oYXNBdHRy
aWJ1dGUoJ3ZhbHVlJykgPyBvcHQudmFsdWUgOiBvcHQudGV4dDsKLSAgfQotfTsKLQotLyotLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSovCi0KLUFic3RyYWN0LlRpbWVkT2JzZXJ2ZXIgPSBDbGFzcy5jcmVhdGUo
UGVyaW9kaWNhbEV4ZWN1dGVyLCB7Ci0gIGluaXRpYWxpemU6IGZ1bmN0aW9uKCRzdXBlciwgZWxl
bWVudCwgZnJlcXVlbmN5LCBjYWxsYmFjaykgewotICAgICRzdXBlcihjYWxsYmFjaywgZnJlcXVl
bmN5KTsKLSAgICB0aGlzLmVsZW1lbnQgICA9ICQoZWxlbWVudCk7Ci0gICAgdGhpcy5sYXN0VmFs
dWUgPSB0aGlzLmdldFZhbHVlKCk7Ci0gIH0sCi0KLSAgZXhlY3V0ZTogZnVuY3Rpb24oKSB7Ci0g
ICAgdmFyIHZhbHVlID0gdGhpcy5nZXRWYWx1ZSgpOwotICAgIGlmIChPYmplY3QuaXNTdHJpbmco
dGhpcy5sYXN0VmFsdWUpICYmIE9iamVjdC5pc1N0cmluZyh2YWx1ZSkgPwotICAgICAgICB0aGlz
Lmxhc3RWYWx1ZSAhPSB2YWx1ZSA6IFN0cmluZyh0aGlzLmxhc3RWYWx1ZSkgIT0gU3RyaW5nKHZh
bHVlKSkgewotICAgICAgdGhpcy5jYWxsYmFjayh0aGlzLmVsZW1lbnQsIHZhbHVlKTsKLSAgICAg
IHRoaXMubGFzdFZhbHVlID0gdmFsdWU7Ci0gICAgfQotICB9Ci19KTsKLQotRm9ybS5FbGVtZW50
Lk9ic2VydmVyID0gQ2xhc3MuY3JlYXRlKEFic3RyYWN0LlRpbWVkT2JzZXJ2ZXIsIHsKLSAgZ2V0
VmFsdWU6IGZ1bmN0aW9uKCkgewotICAgIHJldHVybiBGb3JtLkVsZW1lbnQuZ2V0VmFsdWUodGhp
cy5lbGVtZW50KTsKLSAgfQotfSk7Ci0KLUZvcm0uT2JzZXJ2ZXIgPSBDbGFzcy5jcmVhdGUoQWJz
dHJhY3QuVGltZWRPYnNlcnZlciwgewotICBnZXRWYWx1ZTogZnVuY3Rpb24oKSB7Ci0gICAgcmV0
dXJuIEZvcm0uc2VyaWFsaXplKHRoaXMuZWxlbWVudCk7Ci0gIH0KLX0pOwotCi0vKi0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tKi8KLQotQWJzdHJhY3QuRXZlbnRPYnNlcnZlciA9IENsYXNzLmNyZWF0ZSh7Ci0g
IGluaXRpYWxpemU6IGZ1bmN0aW9uKGVsZW1lbnQsIGNhbGxiYWNrKSB7Ci0gICAgdGhpcy5lbGVt
ZW50ICA9ICQoZWxlbWVudCk7Ci0gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrOwotCi0gICAg
dGhpcy5sYXN0VmFsdWUgPSB0aGlzLmdldFZhbHVlKCk7Ci0gICAgaWYgKHRoaXMuZWxlbWVudC50
YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT0gJ2Zvcm0nKQotICAgICAgdGhpcy5yZWdpc3RlckZvcm1D
YWxsYmFja3MoKTsKLSAgICBlbHNlCi0gICAgICB0aGlzLnJlZ2lzdGVyQ2FsbGJhY2sodGhpcy5l
bGVtZW50KTsKLSAgfSwKLQotICBvbkVsZW1lbnRFdmVudDogZnVuY3Rpb24oKSB7Ci0gICAgdmFy
IHZhbHVlID0gdGhpcy5nZXRWYWx1ZSgpOwotICAgIGlmICh0aGlzLmxhc3RWYWx1ZSAhPSB2YWx1
ZSkgewotICAgICAgdGhpcy5jYWxsYmFjayh0aGlzLmVsZW1lbnQsIHZhbHVlKTsKLSAgICAgIHRo
aXMubGFzdFZhbHVlID0gdmFsdWU7Ci0gICAgfQotICB9LAotCi0gIHJlZ2lzdGVyRm9ybUNhbGxi
YWNrczogZnVuY3Rpb24oKSB7Ci0gICAgRm9ybS5nZXRFbGVtZW50cyh0aGlzLmVsZW1lbnQpLmVh
Y2godGhpcy5yZWdpc3RlckNhbGxiYWNrLCB0aGlzKTsKLSAgfSwKLQotICByZWdpc3RlckNhbGxi
YWNrOiBmdW5jdGlvbihlbGVtZW50KSB7Ci0gICAgaWYgKGVsZW1lbnQudHlwZSkgewotICAgICAg
c3dpdGNoIChlbGVtZW50LnR5cGUudG9Mb3dlckNhc2UoKSkgewotICAgICAgICBjYXNlICdjaGVj
a2JveCc6Ci0gICAgICAgIGNhc2UgJ3JhZGlvJzoKLSAgICAgICAgICBFdmVudC5vYnNlcnZlKGVs
ZW1lbnQsICdjbGljaycsIHRoaXMub25FbGVtZW50RXZlbnQuYmluZCh0aGlzKSk7Ci0gICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgRXZlbnQub2JzZXJ2ZShlbGVt
ZW50LCAnY2hhbmdlJywgdGhpcy5vbkVsZW1lbnRFdmVudC5iaW5kKHRoaXMpKTsKLSAgICAgICAg
ICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLX0pOwotCi1Gb3JtLkVsZW1lbnQuRXZlbnRP
YnNlcnZlciA9IENsYXNzLmNyZWF0ZShBYnN0cmFjdC5FdmVudE9ic2VydmVyLCB7Ci0gIGdldFZh
bHVlOiBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gRm9ybS5FbGVtZW50LmdldFZhbHVlKHRoaXMu
ZWxlbWVudCk7Ci0gIH0KLX0pOwotCi1Gb3JtLkV2ZW50T2JzZXJ2ZXIgPSBDbGFzcy5jcmVhdGUo
QWJzdHJhY3QuRXZlbnRPYnNlcnZlciwgewotICBnZXRWYWx1ZTogZnVuY3Rpb24oKSB7Ci0gICAg
cmV0dXJuIEZvcm0uc2VyaWFsaXplKHRoaXMuZWxlbWVudCk7Ci0gIH0KLX0pOwotaWYgKCF3aW5k
b3cuRXZlbnQpIHZhciBFdmVudCA9IHsgfTsKLQotT2JqZWN0LmV4dGVuZChFdmVudCwgewotICBL
RVlfQkFDS1NQQUNFOiA4LAotICBLRVlfVEFCOiAgICAgICA5LAotICBLRVlfUkVUVVJOOiAgIDEz
LAotICBLRVlfRVNDOiAgICAgIDI3LAotICBLRVlfTEVGVDogICAgIDM3LAotICBLRVlfVVA6ICAg
ICAgIDM4LAotICBLRVlfUklHSFQ6ICAgIDM5LAotICBLRVlfRE9XTjogICAgIDQwLAotICBLRVlf
REVMRVRFOiAgIDQ2LAotICBLRVlfSE9NRTogICAgIDM2LAotICBLRVlfRU5EOiAgICAgIDM1LAot
ICBLRVlfUEFHRVVQOiAgIDMzLAotICBLRVlfUEFHRURPV046IDM0LAotICBLRVlfSU5TRVJUOiAg
IDQ1LAotCi0gIGNhY2hlOiB7IH0sCi0KLSAgcmVsYXRlZFRhcmdldDogZnVuY3Rpb24oZXZlbnQp
IHsKLSAgICB2YXIgZWxlbWVudDsKLSAgICBzd2l0Y2goZXZlbnQudHlwZSkgewotICAgICAgY2Fz
ZSAnbW91c2VvdmVyJzogZWxlbWVudCA9IGV2ZW50LmZyb21FbGVtZW50OyBicmVhazsKLSAgICAg
IGNhc2UgJ21vdXNlb3V0JzogIGVsZW1lbnQgPSBldmVudC50b0VsZW1lbnQ7ICAgYnJlYWs7Ci0g
ICAgICBkZWZhdWx0OiByZXR1cm4gbnVsbDsKLSAgICB9Ci0gICAgcmV0dXJuIEVsZW1lbnQuZXh0
ZW5kKGVsZW1lbnQpOwotICB9Ci19KTsKLQotRXZlbnQuTWV0aG9kcyA9IChmdW5jdGlvbigpIHsK
LSAgdmFyIGlzQnV0dG9uOwotCi0gIGlmIChQcm90b3R5cGUuQnJvd3Nlci5JRSkgewotICAgIHZh
ciBidXR0b25NYXAgPSB7IDA6IDEsIDE6IDQsIDI6IDIgfTsKLSAgICBpc0J1dHRvbiA9IGZ1bmN0
aW9uKGV2ZW50LCBjb2RlKSB7Ci0gICAgICByZXR1cm4gZXZlbnQuYnV0dG9uID09IGJ1dHRvbk1h
cFtjb2RlXTsKLSAgICB9OwotCi0gIH0gZWxzZSBpZiAoUHJvdG90eXBlLkJyb3dzZXIuV2ViS2l0
KSB7Ci0gICAgaXNCdXR0b24gPSBmdW5jdGlvbihldmVudCwgY29kZSkgewotICAgICAgc3dpdGNo
IChjb2RlKSB7Ci0gICAgICAgIGNhc2UgMDogcmV0dXJuIGV2ZW50LndoaWNoID09IDEgJiYgIWV2
ZW50Lm1ldGFLZXk7Ci0gICAgICAgIGNhc2UgMTogcmV0dXJuIGV2ZW50LndoaWNoID09IDEgJiYg
ZXZlbnQubWV0YUtleTsKLSAgICAgICAgZGVmYXVsdDogcmV0dXJuIGZhbHNlOwotICAgICAgfQot
ICAgIH07Ci0KLSAgfSBlbHNlIHsKLSAgICBpc0J1dHRvbiA9IGZ1bmN0aW9uKGV2ZW50LCBjb2Rl
KSB7Ci0gICAgICByZXR1cm4gZXZlbnQud2hpY2ggPyAoZXZlbnQud2hpY2ggPT09IGNvZGUgKyAx
KSA6IChldmVudC5idXR0b24gPT09IGNvZGUpOwotICAgIH07Ci0gIH0KLQotICByZXR1cm4gewot
ICAgIGlzTGVmdENsaWNrOiAgIGZ1bmN0aW9uKGV2ZW50KSB7IHJldHVybiBpc0J1dHRvbihldmVu
dCwgMCkgfSwKLSAgICBpc01pZGRsZUNsaWNrOiBmdW5jdGlvbihldmVudCkgeyByZXR1cm4gaXNC
dXR0b24oZXZlbnQsIDEpIH0sCi0gICAgaXNSaWdodENsaWNrOiAgZnVuY3Rpb24oZXZlbnQpIHsg
cmV0dXJuIGlzQnV0dG9uKGV2ZW50LCAyKSB9LAotCi0gICAgZWxlbWVudDogZnVuY3Rpb24oZXZl
bnQpIHsKLSAgICAgIHZhciBub2RlID0gRXZlbnQuZXh0ZW5kKGV2ZW50KS50YXJnZXQ7Ci0gICAg
ICByZXR1cm4gRWxlbWVudC5leHRlbmQobm9kZS5ub2RlVHlwZSA9PSBOb2RlLlRFWFRfTk9ERSA/
IG5vZGUucGFyZW50Tm9kZSA6IG5vZGUpOwotICAgIH0sCi0KLSAgICBmaW5kRWxlbWVudDogZnVu
Y3Rpb24oZXZlbnQsIGV4cHJlc3Npb24pIHsKLSAgICAgIHZhciBlbGVtZW50ID0gRXZlbnQuZWxl
bWVudChldmVudCk7Ci0gICAgICBpZiAoIWV4cHJlc3Npb24pIHJldHVybiBlbGVtZW50OwotICAg
ICAgdmFyIGVsZW1lbnRzID0gW2VsZW1lbnRdLmNvbmNhdChlbGVtZW50LmFuY2VzdG9ycygpKTsK
LSAgICAgIHJldHVybiBTZWxlY3Rvci5maW5kRWxlbWVudChlbGVtZW50cywgZXhwcmVzc2lvbiwg
MCk7Ci0gICAgfSwKLQotICAgIHBvaW50ZXI6IGZ1bmN0aW9uKGV2ZW50KSB7Ci0gICAgICByZXR1
cm4gewotICAgICAgICB4OiBldmVudC5wYWdlWCB8fCAoZXZlbnQuY2xpZW50WCArCi0gICAgICAg
ICAgKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0IHx8IGRvY3VtZW50LmJvZHku
c2Nyb2xsTGVmdCkpLAotICAgICAgICB5OiBldmVudC5wYWdlWSB8fCAoZXZlbnQuY2xpZW50WSAr
Ci0gICAgICAgICAgKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgfHwgZG9jdW1l
bnQuYm9keS5zY3JvbGxUb3ApKQotICAgICAgfTsKLSAgICB9LAotCi0gICAgcG9pbnRlclg6IGZ1
bmN0aW9uKGV2ZW50KSB7IHJldHVybiBFdmVudC5wb2ludGVyKGV2ZW50KS54IH0sCi0gICAgcG9p
bnRlclk6IGZ1bmN0aW9uKGV2ZW50KSB7IHJldHVybiBFdmVudC5wb2ludGVyKGV2ZW50KS55IH0s
Ci0KLSAgICBzdG9wOiBmdW5jdGlvbihldmVudCkgewotICAgICAgRXZlbnQuZXh0ZW5kKGV2ZW50
KTsKLSAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Ci0gICAgICBldmVudC5zdG9wUHJvcGFn
YXRpb24oKTsKLSAgICAgIGV2ZW50LnN0b3BwZWQgPSB0cnVlOwotICAgIH0KLSAgfTsKLX0pKCk7
Ci0KLUV2ZW50LmV4dGVuZCA9IChmdW5jdGlvbigpIHsKLSAgdmFyIG1ldGhvZHMgPSBPYmplY3Qu
a2V5cyhFdmVudC5NZXRob2RzKS5pbmplY3QoeyB9LCBmdW5jdGlvbihtLCBuYW1lKSB7Ci0gICAg
bVtuYW1lXSA9IEV2ZW50Lk1ldGhvZHNbbmFtZV0ubWV0aG9kaXplKCk7Ci0gICAgcmV0dXJuIG07
Ci0gIH0pOwotCi0gIGlmIChQcm90b3R5cGUuQnJvd3Nlci5JRSkgewotICAgIE9iamVjdC5leHRl
bmQobWV0aG9kcywgewotICAgICAgc3RvcFByb3BhZ2F0aW9uOiBmdW5jdGlvbigpIHsgdGhpcy5j
YW5jZWxCdWJibGUgPSB0cnVlIH0sCi0gICAgICBwcmV2ZW50RGVmYXVsdDogIGZ1bmN0aW9uKCkg
eyB0aGlzLnJldHVyblZhbHVlID0gZmFsc2UgfSwKLSAgICAgIGluc3BlY3Q6IGZ1bmN0aW9uKCkg
eyByZXR1cm4gIltvYmplY3QgRXZlbnRdIiB9Ci0gICAgfSk7Ci0KLSAgICByZXR1cm4gZnVuY3Rp
b24oZXZlbnQpIHsKLSAgICAgIGlmICghZXZlbnQpIHJldHVybiBmYWxzZTsKLSAgICAgIGlmIChl
dmVudC5fZXh0ZW5kZWRCeVByb3RvdHlwZSkgcmV0dXJuIGV2ZW50OwotCi0gICAgICBldmVudC5f
ZXh0ZW5kZWRCeVByb3RvdHlwZSA9IFByb3RvdHlwZS5lbXB0eUZ1bmN0aW9uOwotICAgICAgdmFy
IHBvaW50ZXIgPSBFdmVudC5wb2ludGVyKGV2ZW50KTsKLSAgICAgIE9iamVjdC5leHRlbmQoZXZl
bnQsIHsKLSAgICAgICAgdGFyZ2V0OiBldmVudC5zcmNFbGVtZW50LAotICAgICAgICByZWxhdGVk
VGFyZ2V0OiBFdmVudC5yZWxhdGVkVGFyZ2V0KGV2ZW50KSwKLSAgICAgICAgcGFnZVg6ICBwb2lu
dGVyLngsCi0gICAgICAgIHBhZ2VZOiAgcG9pbnRlci55Ci0gICAgICB9KTsKLSAgICAgIHJldHVy
biBPYmplY3QuZXh0ZW5kKGV2ZW50LCBtZXRob2RzKTsKLSAgICB9OwotCi0gIH0gZWxzZSB7Ci0g
ICAgRXZlbnQucHJvdG90eXBlID0gRXZlbnQucHJvdG90eXBlIHx8IGRvY3VtZW50LmNyZWF0ZUV2
ZW50KCJIVE1MRXZlbnRzIikuX19wcm90b19fOwotICAgIE9iamVjdC5leHRlbmQoRXZlbnQucHJv
dG90eXBlLCBtZXRob2RzKTsKLSAgICByZXR1cm4gUHJvdG90eXBlLks7Ci0gIH0KLX0pKCk7Ci0K
LU9iamVjdC5leHRlbmQoRXZlbnQsIChmdW5jdGlvbigpIHsKLSAgdmFyIGNhY2hlID0gRXZlbnQu
Y2FjaGU7Ci0KLSAgZnVuY3Rpb24gZ2V0RXZlbnRJRChlbGVtZW50KSB7Ci0gICAgaWYgKGVsZW1l
bnQuX3Byb3RvdHlwZUV2ZW50SUQpIHJldHVybiBlbGVtZW50Ll9wcm90b3R5cGVFdmVudElEWzBd
OwotICAgIGFyZ3VtZW50cy5jYWxsZWUuaWQgPSBhcmd1bWVudHMuY2FsbGVlLmlkIHx8IDE7Ci0g
ICAgcmV0dXJuIGVsZW1lbnQuX3Byb3RvdHlwZUV2ZW50SUQgPSBbKythcmd1bWVudHMuY2FsbGVl
LmlkXTsKLSAgfQotCi0gIGZ1bmN0aW9uIGdldERPTUV2ZW50TmFtZShldmVudE5hbWUpIHsKLSAg
ICBpZiAoZXZlbnROYW1lICYmIGV2ZW50TmFtZS5pbmNsdWRlKCc6JykpIHJldHVybiAiZGF0YWF2
YWlsYWJsZSI7Ci0gICAgcmV0dXJuIGV2ZW50TmFtZTsKLSAgfQotCi0gIGZ1bmN0aW9uIGdldENh
Y2hlRm9ySUQoaWQpIHsKLSAgICByZXR1cm4gY2FjaGVbaWRdID0gY2FjaGVbaWRdIHx8IHsgfTsK
LSAgfQotCi0gIGZ1bmN0aW9uIGdldFdyYXBwZXJzRm9yRXZlbnROYW1lKGlkLCBldmVudE5hbWUp
IHsKLSAgICB2YXIgYyA9IGdldENhY2hlRm9ySUQoaWQpOwotICAgIHJldHVybiBjW2V2ZW50TmFt
ZV0gPSBjW2V2ZW50TmFtZV0gfHwgW107Ci0gIH0KLQotICBmdW5jdGlvbiBjcmVhdGVXcmFwcGVy
KGVsZW1lbnQsIGV2ZW50TmFtZSwgaGFuZGxlcikgewotICAgIHZhciBpZCA9IGdldEV2ZW50SUQo
ZWxlbWVudCk7Ci0gICAgdmFyIGMgPSBnZXRXcmFwcGVyc0ZvckV2ZW50TmFtZShpZCwgZXZlbnRO
YW1lKTsKLSAgICBpZiAoYy5wbHVjaygiaGFuZGxlciIpLmluY2x1ZGUoaGFuZGxlcikpIHJldHVy
biBmYWxzZTsKLQotICAgIHZhciB3cmFwcGVyID0gZnVuY3Rpb24oZXZlbnQpIHsKLSAgICAgIGlm
ICghRXZlbnQgfHwgIUV2ZW50LmV4dGVuZCB8fAotICAgICAgICAoZXZlbnQuZXZlbnROYW1lICYm
IGV2ZW50LmV2ZW50TmFtZSAhPSBldmVudE5hbWUpKQotICAgICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgICAgRXZlbnQuZXh0ZW5kKGV2ZW50KTsKLSAgICAgIGhhbmRsZXIuY2FsbChlbGVtZW50
LCBldmVudCk7Ci0gICAgfTsKLQotICAgIHdyYXBwZXIuaGFuZGxlciA9IGhhbmRsZXI7Ci0gICAg
Yy5wdXNoKHdyYXBwZXIpOwotICAgIHJldHVybiB3cmFwcGVyOwotICB9Ci0KLSAgZnVuY3Rpb24g
ZmluZFdyYXBwZXIoaWQsIGV2ZW50TmFtZSwgaGFuZGxlcikgewotICAgIHZhciBjID0gZ2V0V3Jh
cHBlcnNGb3JFdmVudE5hbWUoaWQsIGV2ZW50TmFtZSk7Ci0gICAgcmV0dXJuIGMuZmluZChmdW5j
dGlvbih3cmFwcGVyKSB7IHJldHVybiB3cmFwcGVyLmhhbmRsZXIgPT0gaGFuZGxlciB9KTsKLSAg
fQotCi0gIGZ1bmN0aW9uIGRlc3Ryb3lXcmFwcGVyKGlkLCBldmVudE5hbWUsIGhhbmRsZXIpIHsK
LSAgICB2YXIgYyA9IGdldENhY2hlRm9ySUQoaWQpOwotICAgIGlmICghY1tldmVudE5hbWVdKSBy
ZXR1cm4gZmFsc2U7Ci0gICAgY1tldmVudE5hbWVdID0gY1tldmVudE5hbWVdLndpdGhvdXQoZmlu
ZFdyYXBwZXIoaWQsIGV2ZW50TmFtZSwgaGFuZGxlcikpOwotICB9Ci0KLSAgZnVuY3Rpb24gZGVz
dHJveUNhY2hlKCkgewotICAgIGZvciAodmFyIGlkIGluIGNhY2hlKQotICAgICAgZm9yICh2YXIg
ZXZlbnROYW1lIGluIGNhY2hlW2lkXSkKLSAgICAgICAgY2FjaGVbaWRdW2V2ZW50TmFtZV0gPSBu
dWxsOwotICB9Ci0KLSAgaWYgKHdpbmRvdy5hdHRhY2hFdmVudCkgewotICAgIHdpbmRvdy5hdHRh
Y2hFdmVudCgib251bmxvYWQiLCBkZXN0cm95Q2FjaGUpOwotICB9Ci0KLSAgcmV0dXJuIHsKLSAg
ICBvYnNlcnZlOiBmdW5jdGlvbihlbGVtZW50LCBldmVudE5hbWUsIGhhbmRsZXIpIHsKLSAgICAg
IGVsZW1lbnQgPSAkKGVsZW1lbnQpOwotICAgICAgdmFyIG5hbWUgPSBnZXRET01FdmVudE5hbWUo
ZXZlbnROYW1lKTsKLQotICAgICAgdmFyIHdyYXBwZXIgPSBjcmVhdGVXcmFwcGVyKGVsZW1lbnQs
IGV2ZW50TmFtZSwgaGFuZGxlcik7Ci0gICAgICBpZiAoIXdyYXBwZXIpIHJldHVybiBlbGVtZW50
OwotCi0gICAgICBpZiAoZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKSB7Ci0gICAgICAgIGVsZW1l
bnQuYWRkRXZlbnRMaXN0ZW5lcihuYW1lLCB3cmFwcGVyLCBmYWxzZSk7Ci0gICAgICB9IGVsc2Ug
ewotICAgICAgICBlbGVtZW50LmF0dGFjaEV2ZW50KCJvbiIgKyBuYW1lLCB3cmFwcGVyKTsKLSAg
ICAgIH0KLQotICAgICAgcmV0dXJuIGVsZW1lbnQ7Ci0gICAgfSwKLQotICAgIHN0b3BPYnNlcnZp
bmc6IGZ1bmN0aW9uKGVsZW1lbnQsIGV2ZW50TmFtZSwgaGFuZGxlcikgewotICAgICAgZWxlbWVu
dCA9ICQoZWxlbWVudCk7Ci0gICAgICB2YXIgaWQgPSBnZXRFdmVudElEKGVsZW1lbnQpLCBuYW1l
ID0gZ2V0RE9NRXZlbnROYW1lKGV2ZW50TmFtZSk7Ci0KLSAgICAgIGlmICghaGFuZGxlciAmJiBl
dmVudE5hbWUpIHsKLSAgICAgICAgZ2V0V3JhcHBlcnNGb3JFdmVudE5hbWUoaWQsIGV2ZW50TmFt
ZSkuZWFjaChmdW5jdGlvbih3cmFwcGVyKSB7Ci0gICAgICAgICAgZWxlbWVudC5zdG9wT2JzZXJ2
aW5nKGV2ZW50TmFtZSwgd3JhcHBlci5oYW5kbGVyKTsKLSAgICAgICAgfSk7Ci0gICAgICAgIHJl
dHVybiBlbGVtZW50OwotCi0gICAgICB9IGVsc2UgaWYgKCFldmVudE5hbWUpIHsKLSAgICAgICAg
T2JqZWN0LmtleXMoZ2V0Q2FjaGVGb3JJRChpZCkpLmVhY2goZnVuY3Rpb24oZXZlbnROYW1lKSB7
Ci0gICAgICAgICAgZWxlbWVudC5zdG9wT2JzZXJ2aW5nKGV2ZW50TmFtZSk7Ci0gICAgICAgIH0p
OwotICAgICAgICByZXR1cm4gZWxlbWVudDsKLSAgICAgIH0KLQotICAgICAgdmFyIHdyYXBwZXIg
PSBmaW5kV3JhcHBlcihpZCwgZXZlbnROYW1lLCBoYW5kbGVyKTsKLSAgICAgIGlmICghd3JhcHBl
cikgcmV0dXJuIGVsZW1lbnQ7Ci0KLSAgICAgIGlmIChlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVu
ZXIpIHsKLSAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKG5hbWUsIHdyYXBwZXIs
IGZhbHNlKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGVsZW1lbnQuZGV0YWNoRXZlbnQoIm9u
IiArIG5hbWUsIHdyYXBwZXIpOwotICAgICAgfQotCi0gICAgICBkZXN0cm95V3JhcHBlcihpZCwg
ZXZlbnROYW1lLCBoYW5kbGVyKTsKLQotICAgICAgcmV0dXJuIGVsZW1lbnQ7Ci0gICAgfSwKLQot
ICAgIGZpcmU6IGZ1bmN0aW9uKGVsZW1lbnQsIGV2ZW50TmFtZSwgbWVtbykgewotICAgICAgZWxl
bWVudCA9ICQoZWxlbWVudCk7Ci0gICAgICBpZiAoZWxlbWVudCA9PSBkb2N1bWVudCAmJiBkb2N1
bWVudC5jcmVhdGVFdmVudCAmJiAhZWxlbWVudC5kaXNwYXRjaEV2ZW50KQotICAgICAgICBlbGVt
ZW50ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50OwotCi0gICAgICB2YXIgZXZlbnQ7Ci0gICAg
ICBpZiAoZG9jdW1lbnQuY3JlYXRlRXZlbnQpIHsKLSAgICAgICAgZXZlbnQgPSBkb2N1bWVudC5j
cmVhdGVFdmVudCgiSFRNTEV2ZW50cyIpOwotICAgICAgICBldmVudC5pbml0RXZlbnQoImRhdGFh
dmFpbGFibGUiLCB0cnVlLCB0cnVlKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGV2ZW50ID0g
ZG9jdW1lbnQuY3JlYXRlRXZlbnRPYmplY3QoKTsKLSAgICAgICAgZXZlbnQuZXZlbnRUeXBlID0g
Im9uZGF0YWF2YWlsYWJsZSI7Ci0gICAgICB9Ci0KLSAgICAgIGV2ZW50LmV2ZW50TmFtZSA9IGV2
ZW50TmFtZTsKLSAgICAgIGV2ZW50Lm1lbW8gPSBtZW1vIHx8IHsgfTsKLQotICAgICAgaWYgKGRv
Y3VtZW50LmNyZWF0ZUV2ZW50KSB7Ci0gICAgICAgIGVsZW1lbnQuZGlzcGF0Y2hFdmVudChldmVu
dCk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBlbGVtZW50LmZpcmVFdmVudChldmVudC5ldmVu
dFR5cGUsIGV2ZW50KTsKLSAgICAgIH0KLQotICAgICAgcmV0dXJuIEV2ZW50LmV4dGVuZChldmVu
dCk7Ci0gICAgfQotICB9OwotfSkoKSk7Ci0KLU9iamVjdC5leHRlbmQoRXZlbnQsIEV2ZW50Lk1l
dGhvZHMpOwotCi1FbGVtZW50LmFkZE1ldGhvZHMoewotICBmaXJlOiAgICAgICAgICBFdmVudC5m
aXJlLAotICBvYnNlcnZlOiAgICAgICBFdmVudC5vYnNlcnZlLAotICBzdG9wT2JzZXJ2aW5nOiBF
dmVudC5zdG9wT2JzZXJ2aW5nCi19KTsKLQotT2JqZWN0LmV4dGVuZChkb2N1bWVudCwgewotICBm
aXJlOiAgICAgICAgICBFbGVtZW50Lk1ldGhvZHMuZmlyZS5tZXRob2RpemUoKSwKLSAgb2JzZXJ2
ZTogICAgICAgRWxlbWVudC5NZXRob2RzLm9ic2VydmUubWV0aG9kaXplKCksCi0gIHN0b3BPYnNl
cnZpbmc6IEVsZW1lbnQuTWV0aG9kcy5zdG9wT2JzZXJ2aW5nLm1ldGhvZGl6ZSgpLAotICBsb2Fk
ZWQ6ICAgICAgICBmYWxzZQotfSk7Ci0KLShmdW5jdGlvbigpIHsKLSAgLyogU3VwcG9ydCBmb3Ig
dGhlIERPTUNvbnRlbnRMb2FkZWQgZXZlbnQgaXMgYmFzZWQgb24gd29yayBieSBEYW4gV2ViYiwK
LSAgICAgTWF0dGhpYXMgTWlsbGVyLCBEZWFuIEVkd2FyZHMgYW5kIEpvaG4gUmVzaWcuICovCi0K
LSAgdmFyIHRpbWVyOwotCi0gIGZ1bmN0aW9uIGZpcmVDb250ZW50TG9hZGVkRXZlbnQoKSB7Ci0g
ICAgaWYgKGRvY3VtZW50LmxvYWRlZCkgcmV0dXJuOwotICAgIGlmICh0aW1lcikgd2luZG93LmNs
ZWFySW50ZXJ2YWwodGltZXIpOwotICAgIGRvY3VtZW50LmZpcmUoImRvbTpsb2FkZWQiKTsKLSAg
ICBkb2N1bWVudC5sb2FkZWQgPSB0cnVlOwotICB9Ci0KLSAgaWYgKGRvY3VtZW50LmFkZEV2ZW50
TGlzdGVuZXIpIHsKLSAgICBpZiAoUHJvdG90eXBlLkJyb3dzZXIuV2ViS2l0KSB7Ci0gICAgICB0
aW1lciA9IHdpbmRvdy5zZXRJbnRlcnZhbChmdW5jdGlvbigpIHsKLSAgICAgICAgaWYgKC9sb2Fk
ZWR8Y29tcGxldGUvLnRlc3QoZG9jdW1lbnQucmVhZHlTdGF0ZSkpCi0gICAgICAgICAgZmlyZUNv
bnRlbnRMb2FkZWRFdmVudCgpOwotICAgICAgfSwgMCk7Ci0KLSAgICAgIEV2ZW50Lm9ic2VydmUo
d2luZG93LCAibG9hZCIsIGZpcmVDb250ZW50TG9hZGVkRXZlbnQpOwotCi0gICAgfSBlbHNlIHsK
LSAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLAotICAg
ICAgICBmaXJlQ29udGVudExvYWRlZEV2ZW50LCBmYWxzZSk7Ci0gICAgfQotCi0gIH0gZWxzZSB7
Ci0gICAgZG9jdW1lbnQud3JpdGUoIjxzY3JpcHQgaWQ9X19vbkRPTUNvbnRlbnRMb2FkZWQgZGVm
ZXIgc3JjPS8vOj48XC9zY3JpcHQ+Iik7Ci0gICAgJCgiX19vbkRPTUNvbnRlbnRMb2FkZWQiKS5v
bnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHsKLSAgICAgIGlmICh0aGlzLnJlYWR5U3Rh
dGUgPT0gImNvbXBsZXRlIikgewotICAgICAgICB0aGlzLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IG51
bGw7Ci0gICAgICAgIGZpcmVDb250ZW50TG9hZGVkRXZlbnQoKTsKLSAgICAgIH0KLSAgICB9Owot
ICB9Ci19KSgpOwotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERFUFJFQ0FURUQg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLUhhc2gudG9RdWVyeVN0cmluZyA9
IE9iamVjdC50b1F1ZXJ5U3RyaW5nOwotCi12YXIgVG9nZ2xlID0geyBkaXNwbGF5OiBFbGVtZW50
LnRvZ2dsZSB9OwotCi1FbGVtZW50Lk1ldGhvZHMuY2hpbGRPZiA9IEVsZW1lbnQuTWV0aG9kcy5k
ZXNjZW5kYW50T2Y7Ci0KLXZhciBJbnNlcnRpb24gPSB7Ci0gIEJlZm9yZTogZnVuY3Rpb24oZWxl
bWVudCwgY29udGVudCkgewotICAgIHJldHVybiBFbGVtZW50Lmluc2VydChlbGVtZW50LCB7YmVm
b3JlOmNvbnRlbnR9KTsKLSAgfSwKLQotICBUb3A6IGZ1bmN0aW9uKGVsZW1lbnQsIGNvbnRlbnQp
IHsKLSAgICByZXR1cm4gRWxlbWVudC5pbnNlcnQoZWxlbWVudCwge3RvcDpjb250ZW50fSk7Ci0g
IH0sCi0KLSAgQm90dG9tOiBmdW5jdGlvbihlbGVtZW50LCBjb250ZW50KSB7Ci0gICAgcmV0dXJu
IEVsZW1lbnQuaW5zZXJ0KGVsZW1lbnQsIHtib3R0b206Y29udGVudH0pOwotICB9LAotCi0gIEFm
dGVyOiBmdW5jdGlvbihlbGVtZW50LCBjb250ZW50KSB7Ci0gICAgcmV0dXJuIEVsZW1lbnQuaW5z
ZXJ0KGVsZW1lbnQsIHthZnRlcjpjb250ZW50fSk7Ci0gIH0KLX07Ci0KLXZhciAkY29udGludWUg
PSBuZXcgRXJyb3IoJyJ0aHJvdyAkY29udGludWUiIGlzIGRlcHJlY2F0ZWQsIHVzZSAicmV0dXJu
IiBpbnN0ZWFkJyk7Ci0KLS8vIFRoaXMgc2hvdWxkIGJlIG1vdmVkIHRvIHNjcmlwdC5hY3Vsby51
czsgbm90aWNlIHRoZSBkZXByZWNhdGVkIG1ldGhvZHMKLS8vIGZ1cnRoZXIgYmVsb3csIHRoYXQg
bWFwIHRvIHRoZSBuZXdlciBFbGVtZW50IG1ldGhvZHMuCi12YXIgUG9zaXRpb24gPSB7Ci0gIC8v
IHNldCB0byB0cnVlIGlmIG5lZWRlZCwgd2FybmluZzogZmlyZWZveCBwZXJmb3JtYW5jZSBwcm9i
bGVtcwotICAvLyBOT1QgbmVlZWRlZCBmb3IgcGFnZSBzY3JvbGxpbmcsIG9ubHkgaWYgZHJhZ2dh
YmxlIGNvbnRhaW5lZCBpbgotICAvLyBzY3JvbGxhYmxlIGVsZW1lbnRzCi0gIGluY2x1ZGVTY3Jv
bGxPZmZzZXRzOiBmYWxzZSwKLQotICAvLyBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgY2FsbGluZyB3
aXRoaW5JbmNsdWRpbmdTY3JvbGxvZmZzZXQsIGV2ZXJ5IHRpbWUgdGhlCi0gIC8vIHBhZ2UgaXMg
c2Nyb2xsZWQKLSAgcHJlcGFyZTogZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy5kZWx0YVggPSAgd2lu
ZG93LnBhZ2VYT2Zmc2V0Ci0gICAgICAgICAgICAgICAgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVt
ZW50LnNjcm9sbExlZnQKLSAgICAgICAgICAgICAgICB8fCBkb2N1bWVudC5ib2R5LnNjcm9sbExl
ZnQKLSAgICAgICAgICAgICAgICB8fCAwOwotICAgIHRoaXMuZGVsdGFZID0gIHdpbmRvdy5wYWdl
WU9mZnNldAotICAgICAgICAgICAgICAgIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3Jv
bGxUb3AKLSAgICAgICAgICAgICAgICB8fCBkb2N1bWVudC5ib2R5LnNjcm9sbFRvcAotICAgICAg
ICAgICAgICAgIHx8IDA7Ci0gIH0sCi0KLSAgLy8gY2FjaGVzIHgveSBjb29yZGluYXRlIHBhaXIg
dG8gdXNlIHdpdGggb3ZlcmxhcAotICB3aXRoaW46IGZ1bmN0aW9uKGVsZW1lbnQsIHgsIHkpIHsK
LSAgICBpZiAodGhpcy5pbmNsdWRlU2Nyb2xsT2Zmc2V0cykKLSAgICAgIHJldHVybiB0aGlzLndp
dGhpbkluY2x1ZGluZ1Njcm9sbG9mZnNldHMoZWxlbWVudCwgeCwgeSk7Ci0gICAgdGhpcy54Y29t
cCA9IHg7Ci0gICAgdGhpcy55Y29tcCA9IHk7Ci0gICAgdGhpcy5vZmZzZXQgPSBFbGVtZW50LmN1
bXVsYXRpdmVPZmZzZXQoZWxlbWVudCk7Ci0KLSAgICByZXR1cm4gKHkgPj0gdGhpcy5vZmZzZXRb
MV0gJiYKLSAgICAgICAgICAgIHkgPCAgdGhpcy5vZmZzZXRbMV0gKyBlbGVtZW50Lm9mZnNldEhl
aWdodCAmJgotICAgICAgICAgICAgeCA+PSB0aGlzLm9mZnNldFswXSAmJgotICAgICAgICAgICAg
eCA8ICB0aGlzLm9mZnNldFswXSArIGVsZW1lbnQub2Zmc2V0V2lkdGgpOwotICB9LAotCi0gIHdp
dGhpbkluY2x1ZGluZ1Njcm9sbG9mZnNldHM6IGZ1bmN0aW9uKGVsZW1lbnQsIHgsIHkpIHsKLSAg
ICB2YXIgb2Zmc2V0Y2FjaGUgPSBFbGVtZW50LmN1bXVsYXRpdmVTY3JvbGxPZmZzZXQoZWxlbWVu
dCk7Ci0KLSAgICB0aGlzLnhjb21wID0geCArIG9mZnNldGNhY2hlWzBdIC0gdGhpcy5kZWx0YVg7
Ci0gICAgdGhpcy55Y29tcCA9IHkgKyBvZmZzZXRjYWNoZVsxXSAtIHRoaXMuZGVsdGFZOwotICAg
IHRoaXMub2Zmc2V0ID0gRWxlbWVudC5jdW11bGF0aXZlT2Zmc2V0KGVsZW1lbnQpOwotCi0gICAg
cmV0dXJuICh0aGlzLnljb21wID49IHRoaXMub2Zmc2V0WzFdICYmCi0gICAgICAgICAgICB0aGlz
Lnljb21wIDwgIHRoaXMub2Zmc2V0WzFdICsgZWxlbWVudC5vZmZzZXRIZWlnaHQgJiYKLSAgICAg
ICAgICAgIHRoaXMueGNvbXAgPj0gdGhpcy5vZmZzZXRbMF0gJiYKLSAgICAgICAgICAgIHRoaXMu
eGNvbXAgPCAgdGhpcy5vZmZzZXRbMF0gKyBlbGVtZW50Lm9mZnNldFdpZHRoKTsKLSAgfSwKLQot
ICAvLyB3aXRoaW4gbXVzdCBiZSBjYWxsZWQgZGlyZWN0bHkgYmVmb3JlCi0gIG92ZXJsYXA6IGZ1
bmN0aW9uKG1vZGUsIGVsZW1lbnQpIHsKLSAgICBpZiAoIW1vZGUpIHJldHVybiAwOwotICAgIGlm
IChtb2RlID09ICd2ZXJ0aWNhbCcpCi0gICAgICByZXR1cm4gKCh0aGlzLm9mZnNldFsxXSArIGVs
ZW1lbnQub2Zmc2V0SGVpZ2h0KSAtIHRoaXMueWNvbXApIC8KLSAgICAgICAgZWxlbWVudC5vZmZz
ZXRIZWlnaHQ7Ci0gICAgaWYgKG1vZGUgPT0gJ2hvcml6b250YWwnKQotICAgICAgcmV0dXJuICgo
dGhpcy5vZmZzZXRbMF0gKyBlbGVtZW50Lm9mZnNldFdpZHRoKSAtIHRoaXMueGNvbXApIC8KLSAg
ICAgICAgZWxlbWVudC5vZmZzZXRXaWR0aDsKLSAgfSwKLQotICAvLyBEZXByZWNhdGlvbiBsYXll
ciAtLSB1c2UgbmV3ZXIgRWxlbWVudCBtZXRob2RzIG5vdyAoMS41LjIpLgotCi0gIGN1bXVsYXRp
dmVPZmZzZXQ6IEVsZW1lbnQuTWV0aG9kcy5jdW11bGF0aXZlT2Zmc2V0LAotCi0gIHBvc2l0aW9u
ZWRPZmZzZXQ6IEVsZW1lbnQuTWV0aG9kcy5wb3NpdGlvbmVkT2Zmc2V0LAotCi0gIGFic29sdXRp
emU6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKLSAgICBQb3NpdGlvbi5wcmVwYXJlKCk7Ci0gICAgcmV0
dXJuIEVsZW1lbnQuYWJzb2x1dGl6ZShlbGVtZW50KTsKLSAgfSwKLQotICByZWxhdGl2aXplOiBm
dW5jdGlvbihlbGVtZW50KSB7Ci0gICAgUG9zaXRpb24ucHJlcGFyZSgpOwotICAgIHJldHVybiBF
bGVtZW50LnJlbGF0aXZpemUoZWxlbWVudCk7Ci0gIH0sCi0KLSAgcmVhbE9mZnNldDogRWxlbWVu
dC5NZXRob2RzLmN1bXVsYXRpdmVTY3JvbGxPZmZzZXQsCi0KLSAgb2Zmc2V0UGFyZW50OiBFbGVt
ZW50Lk1ldGhvZHMuZ2V0T2Zmc2V0UGFyZW50LAotCi0gIHBhZ2U6IEVsZW1lbnQuTWV0aG9kcy52
aWV3cG9ydE9mZnNldCwKLQotICBjbG9uZTogZnVuY3Rpb24oc291cmNlLCB0YXJnZXQsIG9wdGlv
bnMpIHsKLSAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7IH07Ci0gICAgcmV0dXJuIEVsZW1lbnQu
Y2xvbmVQb3NpdGlvbih0YXJnZXQsIHNvdXJjZSwgb3B0aW9ucyk7Ci0gIH0KLX07Ci0KLS8qLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0qLwotCi1pZiAoIWRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUp
IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgPSBmdW5jdGlvbihpbnN0YW5jZU1ldGhv
ZHMpewotICBmdW5jdGlvbiBpdGVyKG5hbWUpIHsKLSAgICByZXR1cm4gbmFtZS5ibGFuaygpID8g
bnVsbCA6ICJbY29udGFpbnMoY29uY2F0KCcgJywgQGNsYXNzLCAnICcpLCAnICIgKyBuYW1lICsg
IiAnKV0iOwotICB9Ci0KLSAgaW5zdGFuY2VNZXRob2RzLmdldEVsZW1lbnRzQnlDbGFzc05hbWUg
PSBQcm90b3R5cGUuQnJvd3NlckZlYXR1cmVzLlhQYXRoID8KLSAgZnVuY3Rpb24oZWxlbWVudCwg
Y2xhc3NOYW1lKSB7Ci0gICAgY2xhc3NOYW1lID0gY2xhc3NOYW1lLnRvU3RyaW5nKCkuc3RyaXAo
KTsKLSAgICB2YXIgY29uZCA9IC9ccy8udGVzdChjbGFzc05hbWUpID8gJHcoY2xhc3NOYW1lKS5t
YXAoaXRlcikuam9pbignJykgOiBpdGVyKGNsYXNzTmFtZSk7Ci0gICAgcmV0dXJuIGNvbmQgPyBk
b2N1bWVudC5fZ2V0RWxlbWVudHNCeVhQYXRoKCcuLy8qJyArIGNvbmQsIGVsZW1lbnQpIDogW107
Ci0gIH0gOiBmdW5jdGlvbihlbGVtZW50LCBjbGFzc05hbWUpIHsKLSAgICBjbGFzc05hbWUgPSBj
bGFzc05hbWUudG9TdHJpbmcoKS5zdHJpcCgpOwotICAgIHZhciBlbGVtZW50cyA9IFtdLCBjbGFz
c05hbWVzID0gKC9ccy8udGVzdChjbGFzc05hbWUpID8gJHcoY2xhc3NOYW1lKSA6IG51bGwpOwot
ICAgIGlmICghY2xhc3NOYW1lcyAmJiAhY2xhc3NOYW1lKSByZXR1cm4gZWxlbWVudHM7Ci0KLSAg
ICB2YXIgbm9kZXMgPSAkKGVsZW1lbnQpLmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJyk7Ci0gICAg
Y2xhc3NOYW1lID0gJyAnICsgY2xhc3NOYW1lICsgJyAnOwotCi0gICAgZm9yICh2YXIgaSA9IDAs
IGNoaWxkLCBjbjsgY2hpbGQgPSBub2Rlc1tpXTsgaSsrKSB7Ci0gICAgICBpZiAoY2hpbGQuY2xh
c3NOYW1lICYmIChjbiA9ICcgJyArIGNoaWxkLmNsYXNzTmFtZSArICcgJykgJiYgKGNuLmluY2x1
ZGUoY2xhc3NOYW1lKSB8fAotICAgICAgICAgIChjbGFzc05hbWVzICYmIGNsYXNzTmFtZXMuYWxs
KGZ1bmN0aW9uKG5hbWUpIHsKLSAgICAgICAgICAgIHJldHVybiAhbmFtZS50b1N0cmluZygpLmJs
YW5rKCkgJiYgY24uaW5jbHVkZSgnICcgKyBuYW1lICsgJyAnKTsKLSAgICAgICAgICB9KSkpKQot
ICAgICAgICBlbGVtZW50cy5wdXNoKEVsZW1lbnQuZXh0ZW5kKGNoaWxkKSk7Ci0gICAgfQotICAg
IHJldHVybiBlbGVtZW50czsKLSAgfTsKLQotICByZXR1cm4gZnVuY3Rpb24oY2xhc3NOYW1lLCBw
YXJlbnRFbGVtZW50KSB7Ci0gICAgcmV0dXJuICQocGFyZW50RWxlbWVudCB8fCBkb2N1bWVudC5i
b2R5KS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNsYXNzTmFtZSk7Ci0gIH07Ci19KEVsZW1lbnQu
TWV0aG9kcyk7Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1FbGVtZW50LkNsYXNzTmFtZXMg
PSBDbGFzcy5jcmVhdGUoKTsKLUVsZW1lbnQuQ2xhc3NOYW1lcy5wcm90b3R5cGUgPSB7Ci0gIGlu
aXRpYWxpemU6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKLSAgICB0aGlzLmVsZW1lbnQgPSAkKGVsZW1l
bnQpOwotICB9LAotCi0gIF9lYWNoOiBmdW5jdGlvbihpdGVyYXRvcikgewotICAgIHRoaXMuZWxl
bWVudC5jbGFzc05hbWUuc3BsaXQoL1xzKy8pLnNlbGVjdChmdW5jdGlvbihuYW1lKSB7Ci0gICAg
ICByZXR1cm4gbmFtZS5sZW5ndGggPiAwOwotICAgIH0pLl9lYWNoKGl0ZXJhdG9yKTsKLSAgfSwK
LQotICBzZXQ6IGZ1bmN0aW9uKGNsYXNzTmFtZSkgewotICAgIHRoaXMuZWxlbWVudC5jbGFzc05h
bWUgPSBjbGFzc05hbWU7Ci0gIH0sCi0KLSAgYWRkOiBmdW5jdGlvbihjbGFzc05hbWVUb0FkZCkg
ewotICAgIGlmICh0aGlzLmluY2x1ZGUoY2xhc3NOYW1lVG9BZGQpKSByZXR1cm47Ci0gICAgdGhp
cy5zZXQoJEEodGhpcykuY29uY2F0KGNsYXNzTmFtZVRvQWRkKS5qb2luKCcgJykpOwotICB9LAot
Ci0gIHJlbW92ZTogZnVuY3Rpb24oY2xhc3NOYW1lVG9SZW1vdmUpIHsKLSAgICBpZiAoIXRoaXMu
aW5jbHVkZShjbGFzc05hbWVUb1JlbW92ZSkpIHJldHVybjsKLSAgICB0aGlzLnNldCgkQSh0aGlz
KS53aXRob3V0KGNsYXNzTmFtZVRvUmVtb3ZlKS5qb2luKCcgJykpOwotICB9LAotCi0gIHRvU3Ry
aW5nOiBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gJEEodGhpcykuam9pbignICcpOwotICB9Ci19
OwotCi1PYmplY3QuZXh0ZW5kKEVsZW1lbnQuQ2xhc3NOYW1lcy5wcm90b3R5cGUsIEVudW1lcmFi
bGUpOwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotRWxlbWVudC5hZGRNZXRob2RzKCk7Clwg
Tm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvd2Via2l0Lm9y
Zy9wZXJmL3NsaWNrc3BlZWQvaGVhZGVyLmh0bWwgYi9XZWJzaXRlcy93ZWJraXQub3JnL3BlcmYv
c2xpY2tzcGVlZC9oZWFkZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDdj
ZmYxMWU0ZDMzNmZmZTE1MzcwYmMzNzAyYTllNzMwZWUxYmRmNC4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9XZWJzaXRlcy93ZWJraXQub3JnL3BlcmYvc2xp
Y2tzcGVlZC9oZWFkZXIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTxoMT48
c3Bhbj5TbGlja1NwZWVkPC9zcGFuPjwvaDE+Ci08aDI+c3BlZWQvdmFsaWRpdHkgc2VsZWN0b3Jz
IHRlc3QgZm9yIGZyYW1ld29ya3MuPC9oMj4KLTxwPkV2ZXJ5IGZyYW1ld29yayBydW5zIGluIGl0
cyBvd24gaUZyYW1lLCB0aHVzIG5vIGNvbmZsaWN0cyBjYW4gaGFwcGVuLiBUZXN0cyBhcmUgcnVu
IHNlbGVjdG9yIGJ5IHNlbGVjdG9yLCB3aXRoIGFuIGludGVydmFsIHRvIHByZXZlbnQgdGhlIGJy
b3dzZXIgZnJvbSBmcmVlemluZy48L3A+Ci08cD5UZXN0cyBhcmUgcnVuIGluIGEgbmV1dHJhbCBl
bnZpcm9ubWVudCwgbm8gbGlicmFyeSBvciBmcmFtZXdvcmsgaXMgaW5jbHVkZWQgaW4gdGhlIG1h
aW4gamF2YXNjcmlwdCB0ZXN0LCB0byBhdm9pZCBmYXZvcml0aXNtLjwvcD4KLTxwPlRoZSBXZWJL
aXQgdmVyc2lvbiBvZiB0aGlzIHRlc3QgaW5jbHVkZXMgYSBudW1iZXIgb2YgbW9kaWZpY2F0aW9u
cy4gU3BlY2lmaWNhbGx5Ci08dWw+Ci08bGk+VGhlIHRlc3RzIGFyZSBydW4gMjUwIHRpbWVzIGlu
c3RlYWQgb2Ygb25jZSB0byBzaG93IHNwZWVkIGRpZmZlcmVuY2VzIG1vcmUgYWNjdXJhdGVseTwv
bGk+Ci08bGk+cXVlcnlTZWxlY3RvckFsbCBpcyBhZGRlZCBhcyBhIHN1cHBvcnRlZCAmcXVvdDts
aWJyYXJ5JnF1b3Q7PC9saT4KLTxsaT5DU1Mgc2VsZWN0b3JzIHRoYXQgbm90IGFsbCBpbXBsZW1l
bnRhdGlvbnMgc3VwcG9ydCBoYXZlIGJlZW4gcmVtb3ZlZCB0byBhdm9pZCBkaXN0b3J0aW5nIHRp
bWluZyByZXN1bHRzLiBUaGVzZSB3aWxsIGJlIGFkZGVkIGJhY2sgaW4gYXMgbmV3IHNlbGVjdG9y
cyBhcmUgaW1wbGVtZW50ZWQuPC9saT4KLTwvdWw+Ci08L3A+CmRpZmYgLS1naXQgYS9XZWJzaXRl
cy93ZWJraXQub3JnL3BlcmYvc2xpY2tzcGVlZC9pbmRleC5waHAgYi9XZWJzaXRlcy93ZWJraXQu
b3JnL3BlcmYvc2xpY2tzcGVlZC9pbmRleC5waHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDQxMWNjMmY1OWM2ZGJlMDYyNWUzYTdmZDhmNTI0NGY5MmE5MjgyOGQuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvV2Vic2l0ZXMvd2Via2l0Lm9yZy9w
ZXJmL3NsaWNrc3BlZWQvaW5kZXgucGhwCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotPD9w
aHAgaW5jbHVkZSgnc3lzdGVtL2luZGV4LnBocCcpOz8+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2Yg
ZmlsZQpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvd2Via2l0Lm9yZy9wZXJmL3NsaWNrc3BlZWQvaW5z
dHJ1Y3Rpb25zLnR4dCBiL1dlYnNpdGVzL3dlYmtpdC5vcmcvcGVyZi9zbGlja3NwZWVkL2luc3Ry
dWN0aW9ucy50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmMDRkMzU2MmE4NDg2
ODVmMGQ4Njg4NjExYTNiZTU5YmU5NGU1YTMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvV2Vic2l0ZXMvd2Via2l0Lm9yZy9wZXJmL3NsaWNrc3BlZWQvaW5z
dHJ1Y3Rpb25zLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotMSkgZWRpdCBjb25m
aWcuaW5pIGFuZCBmaWxsIGluIHlvdXIgZnJhbWV3b3JrIGxpc3QuCi0yKSBlZGl0IHNlbGVjdG9y
cy5saXN0IGFuZCBlZGl0IHlvdXIgc2VsZWN0b3JzIGxpc3QuCi0zKSBlZGl0IHN0eWxlLmNzcywg
aGVhZGVyLmh0bWwgYW5kIGZvb3Rlci5odG1sIGlmIHlvdSB3aXNoLgotNCkgZWRpdCB0ZW1wbGF0
ZS5odG1sIGlmIHlvdSB3YW50IHRvIGNoYW5nZSB0aGUgc2VsZWN0b3JzIGh0bWwgZmlsZS4gSXQg
RE9FUyBOT1QgYWNjZXB0IHRoZSBmdWxsIGRvY3VtZW50LCBqdXN0IGVsZW1lbnRzLgpcIE5vIG5l
d2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3dlYmtpdC5vcmcvcGVy
Zi9zbGlja3NwZWVkL2xvZ28ucG5nIGIvV2Vic2l0ZXMvd2Via2l0Lm9yZy9wZXJmL3NsaWNrc3Bl
ZWQvbG9nby5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0OTIzODU2ZTI3MWU1
MmI1OTM5M2VlZTM1MTA4OTRjZTlhZDA3NjkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmxpdGVy
YWwgNTgyOQp6Y21kXkQpbUliXzZKM3hGMT9pRncjYUozNzdpcDAwMT1hPFk/eWV0Rk9OVnJhZkhj
d18zcms3WShqYykqTitUKTQKej1sfTd8IV59TnI5YDFkYUdqfUZSUShjamloQEo9bDBGV3Z4JCFQ
LXNTaFdBSkppKEtIeGtRQUp7YT5OO2tUPit1Cnpha2xkQ2hQdUgzQVdMVSs3Pmx3YSlFY0dAZ0lm
QiE0I09rPmZGfVM9SENfM1FwRmNaQl5rUVM8MklwM0BEcWxebgp6cTMxVnU4WEZzM1VFT1FDYHBY
K3loWmxac1pFVTAjJTcwMC0/d3xKYjQzTHt4XzhsNztPLVZAfFRVc3spbzNge0AKejZjclZAYCsm
eitIZD1uRCZpPSQ/N000YVBzbCtDd3thanJRaSM5ZF8+d1piZ156I2RfYjh3bk5wJXlSITx6P2w/
CnpFdTdgZW5vY2Ztam9sdWZCVUVFampJQ3wkbXZfUk8yMF9UKS1wKFA5O3dKSSMhNGR5cCEtJS1W
I3FIcGdyS1FZYgp6NFhBfXhTYWZ7VDFqK2E2PmlSS2tTMSt4PSgxXyZScUtaTWw+aGlMMHNDYTR+
QnJYLSZKQW9TUEExRWxkVUQ9SzUKej8mQC1JYTthX1c0dnJRMVdVMVhVSTl9Wik9a0RwOW02O1dx
IyNVVFc0WVJVQSZDQ1BeMXZffnQ8PmxwamB1S01ZCnpQY3t5N0JnU0ROcDwhQCVjdUZPTzgzWn53
ZyRmN15mPTVReil6KGZkaFBuRG5NWntXOE8tJEgzOCYmbzI9bz1XdQp6PD90O29FVlE/XlRSRXRG
OXxqQ0IqcH5ESTB6PUoqPWF2KW1NWll6RVhoIXN6bm43d2lWNGw5OFd+UWNlXiRaWj4KenZ4VV9T
ZDFjVkIxWCttMSRCeT4pdyFSQDdNPWVCbWNTK3IrO2h+e3tJVExmMztuPjI7X2A8NHx3citFQ2I3
aUFACnpVVE5qfD5GTFNRKGI+dCM7bGFWX0AkdnJOLXFFakx5Vzg4bl5DQ1RTZTZ3M0YtS2FPSEV3
YD4mOXUoU1JYNENRYgp6QE5qSSthQ0I4fmQ8e0pRKTJ3NUxWLUQ+I3ZaQ0YkQVU9b28qKyEhZV9W
IzhyP2MxbEJmOT4hMEZHXiMhd2d5bHUKenRLMGtZOHs1K3h3dGNoOTZZSjJhNFF1NGcoJWk9T0pq
UVF0WEo+TlZhJCMkeWNZM2pQaWYmKzA3QlJKbVRGMn5RCnpGcEZFZSF6PTI4T0EzPUtuP3VWZ2xk
RF9Ibjd4dDNeX2lkT01mN2c+PGlnc3shVCM+PDVfLTNEVnQhP056aCNuZwp6MSslfXBlWHhZeXRF
I0xqRD1xNjdwQnRIKEA5Z080b0NLaihIITUyVmBqRSlrbTVyZiFpXi0rNil8U0BaOFRBU1QKek9X
aEJxdlN6akZ3b216MDRJXyhBQl8kPShsYW4xSSh7QTFkd0xgUXkqKk9Vcngje1R7eSopajdtNUw2
fENXQUFKCnpeKiExKGVmKV5nc21oQVYkWHYjWXYkSFdhRlQjSGwxbnwmUypMblFeNHVILXpKfF9W
MVR0aXQ3cjBjVk1YeVBCQgp6SkN9PEh1T2kkZUI0UjNsVGs/blQ1eiYmZiM/fjV6a1lmXjAzNmNR
aHZjYmg8e1YoblJKMmlhc0M3TXohQmVUdFkKendee3l8Z1QwWT1OdGMtYyp3Y0I8eFlXMTxKbGVX
KWdjUjBvSHdKQGU4YmNDSDQ8MDdhZDRGO3V7I3VPaEhVdHA1CnoxbnZmV3pWQEVEe15AQCNjQVpE
RCo+QGkpJDV2LTNAZ2lZPmpkQnF7cCpgXkRLVCp1KV93U2xQJXJTfS1ObT1eZQp6PE9HU25QWng4
MW8zJkx8UUx5bChjZXNjZDNoeHc1QnE7eDBrd3I+RHdEJnlLbEMhRG92ekFLWUgjej5WQmhrJWUK
ei1pZGhue0NOI3NQWjR7WDI2ej9PTzIwQ0w5fEQ2IylPYT11NHk9V2JXZUFRSWVINGFBezA8fTxD
VjJQZClNMUIjCno/TDtGYXVCT0ZSS3FtQGFuel8jTVZvPkhpUWpTZWF4aDtxVU1OfXZuNCZLJH43
bjZZXmhAJlopWDQySS0tb2w+RQp6cE19Rl9sdG1NTDtaZlo2dW5oNVU3RE52PHRoKGxQRCUkJXQj
WE58NTJldWI8QlEkRS1GWEMjQmB+MHQ7ISVtfmQKei1sKyp6X2cpSFo/e2NmPis9dk9mJldnSSZi
TGd8ckQ8XmgzbGMocFdzVXA5K147Jk1reyZgX3NaI2lzejkyVENOCnpve1NyJmVCa24tQCRWTVM7
SmFuQTx2N2oxZ3difnJOMW5IKVFeX0JVR1JndTdGZDIxV2ZSdj8tTUR1QFlsKntTRQp6XmFXbihx
ZXJXYiFtdztraE8xaERaeExDUGFgZiM7aiFSRGgkRDtQdnc8SHE0ZWgtTngxNnNZYHRpTU98d2VG
dTIKekh7NG17Nj9CPEtVJkEtZkZRTmBLc1RFWUpMM154UlZAKVRsOXQhYjBSOXR6fkdCS1psTEdZ
ITRZRXkheVM1Wm8/Cnpmd0okVkpwTkd7XlVDVV5vMlgoam9vNCVDS3szKWd3Q1ZYUSZ0T3A5WTFU
MlZSd3xyQG9NNWIybnxWa1RraTQ+Sgp6V2ltZipDI3hgSF5FXmRDPmZVYE1NblhvSHgpISpRZy1u
NHRBVUMzUDErJnorbykyNDZLMF9EMWNpS1NFXiZuQzEKeiM0bDhMPnN1MzhETzY4WUlVP0R8VnBq
dU1OVX1xK25tcGghcnhrO1g5O3VYSTZ7WkYkWU5gPTViRlIjJnRCPXNFCno5NmEtNVU/aC1HaHRf
MWduOFB9aTFmY0s7e0Y5dSpXcklSNnUlTUJkVjtPfHxBTlh6R2p2O2dwKF5iQ3BAVigoSQp6UntP
RUo4PDk8fHRFOGtJQX5lZnhsQ3h1OzdOKGJXcytBZm10TGt8MVdgPjduZiVPI2BycU52Kzk0WFVS
ZFVoc3wKekMyYmZGJnk+dSp7eys9RyRzb3Y4dl88WH1SUlI9NHZCeE4ycSN+I0pxLTQrbDBjQWZm
MmA/MnZzd3s/eG90TlMzCnohJHF0dng/IzBfSE9rNkNlbiM0PWJQTURmLU1PMl5KT0IrSGtVMUd8
UTU1cGxSZFgzZ3VRSG9mJlFvNU1INz9gKAp6I1B1MkJPVVljR3lkRSRFJDdhV35VTEtERjJmUz5j
JVdgckIrdUspNW1TZU9CRHRHZUpiM09pTngmYEoyQHs7UHoKekF6dVlAc0txIXZ5eHBWKSticWth
RExyb0J7SStAdj5obXtLSWRTKmBFRmJ3M3oyR3tRUjE/cSZ0Y0xmfTNgQ2IrCnokRGg3c3Q1OFNu
NnNQTHlGVVUzdERUdXYtdj8kSGFTdGpDYHMzUnxLciFrQzM4U2tWb0l7NHk9cUBKKSVGVTJSNQp6
S1N4emhCd3R4X3UxYkNOcUhxJXhqYGJwOWVedmZYTEZpempaeTtsQ2IrYSlSS0chXzB6d0UyWWUp
NFk1IzhBQnsKeiE0PkM/bUBZP2ZILSMlYS0qNVluY1FgP3dSKVMkN2BqXmRyQDQyd3YybE58O0dU
Ym9adHM9fEYzYVRjeTc4WElvCnpfS2JtMCNGUyhFRj5TUmlIbVNHSWlCaXVgZk1lKFM7fVRRemEo
NEA8JTg3KjlqRD1pb0JYUVFabXtPalRGN1lVRgp6JktsayVuR3hIWTl5MnFFT0JLOUk7OTF6fnEk
dX5sVisqdWE+Z1Vze0J5P2dtQWl0KmB7RlVvSU17I3FTaFRKP3gKeilDRz1mSX0zO0xQWjN3Wnl3
QnpmPEVeZDVRNF9OKjwzS3dCM3l5ZyE2PiY4fD8za0tYSCVoKmlJRFZCREArUkM/CnpaO1BxZEAr
e1c9QDV0ejB1IVg3MU0kKWp6Zm9PfjtgWEZeVHdkcHtnPD83OTdGTmVVbjVEfjZ2eW1PTkkrYSRy
YAp6MER0KzlKZ2k2bVVGdG5rdFgjTExmLXR6bEYqOSNYUFA4NnZkYTJtPVE+aW1SVnt8O2dJcW1t
RWxZWFRIP3wtWEwKeklvJEszQ0dHaTZ1YitvdDt8UlMyclJ0alVjKkJ7OG0jQ3FJKzlsTUd4NiY+
X1k3RkVlUTlAQzRRI1RWXyglbEstCnpLV35DZGl7PyVrPztWQUdycmEkZ1RiTGdHI2leNDQ+XyU1
MWJWSDZ8eFJ9XnFgK3w7RktoUSU9NH5DMHdBbSEwcAp6ZiYjVFBHWXhqOFojajxTVCQhWHVDWm9x
clZocVlYMklWZ3hBbCZ5S200aSY0KTEpLXk8b3ZfOVYjY2k8QG8jPVoKejhYQX1KWGBaWT5wezlf
N1g3I2FSb1lta3JVakVFT1ZTS1VgV0ZYM2s5aUNFSlg5OXtTKXQ5MTA8TFEyWTEoZWxkCnopaHtv
MClaVnQyRXF0YCptWUBZKCt4NTVkTUdyMXlKUE5NNGR+JUtNYUk1M1M2NnN0eWQ5KDxXLTZONX1x
dXpPSAp6TEc7OE9TMlhtRThSXzg8VVhvUVpONSMoN0paSU5DQmFnTmVsTC1HOFJ7I3tEV0RiTDdD
KVcqXjNwSXZDTWlIZ3wKejFxZVV+OW8tZklwLUZleld3JHpKSnhHXk8wKmU7U245Pnk7czs1Pkw8
UEM/IUh8MCUjZEg7MCtJN05ndkQ3dGFLCnpwMHlEbUxhbXB8V3BWQlU4MmA4Jl5PT0p5Vk5ATyFs
WUVUKCooaCVUUnE0blRDclhLa1JlaUwzb3shITQrQDw+aAp6QlJMTmNGKkVGRHRzRE1GeGJgPHdE
YHJ9dnRjMU9vKU19I0oyeUp+TkZiPW5yKUIyKkJgITRjall6bFRGRklUNCQKekRCT25XNE0hWnJ3
fV4oNnJEWUJ8UFVIT2pwSmdqNmpNIzR3JFl2SV9IS2JgQlYpcHIrTz9rcnhMU0tMUntXfEJOCnox
ZWJ3Mm8qNlA7e3djWCY+YXx0RXctMU9UaT9+PkVZPGNwKnRjY1lvdGtsUEtjdWZTTWtXV3BFXmR2
MT9faTVjdgp6YiE5VEZvRm9sa0grb0h0VkAoM3RDdkpQIzhuY29iMD5HOSY7O1RiO2BtZCFRVWwr
c0JDbVVqNntQVlRLSTJxblMKejB1P2M9NGs5MFBYVX5uU0IxPzBUWU09SGwjQ0IqRWRVMEN4MkND
YkI7RkB7U1huYlU4N3drRGJJSV5hXyFldy10CnpiYUBTfEE2JSgjY0RJLUN0YE0kJiE0cUJeTHtT
bFVaWnY2XzghTl4yMVU9UXdFVERGaXw0TjVtQjFuS0pQfGVMagp6S0wpeHtzeVBsMTU5ZjFgWU1V
TXIxYk10OW1maTBAcDxpX1EqaDN2cGI1RGE9JGF4PWdAZDl7MDd+JmM/MmR3Uk4KemNAPSl6NER3
LV4jSjlLYXNQYktCNjNrYTJAPDYjaUIxNXxNLSV9a3phMzBUMWxCXnFBdjJ0fkgqVGUyWkhjcTQk
CnptUipuQXZGdXMjPVF2Un5uLXZJKS1mb2JwWGRiYkZCM0pfYDBUPnpFJH41RjtAN2tvTlYwZEFY
OE8lbS1aIT1aeQp6YDgySFczRmthblhxeEw3WXNUcCslPkdIMmdJRTRJPy0qbUhEXzFjTENSV0tD
byVjTSU0N248UVR2Vz48XlhDYTkKelVAWVhzTUR7SmleTFQ0blRuI3VicFR9U3BWZWJDbyZeZmRn
eEN6dXF3dV59O0QqP0xkUmZla1dEMCsyNTJGJXBYCno3fTtYeTR1Q1QqKyhQJlI5KWQzaG9OYmR8
YENlU0opMH5ufGhKUUxCezNxQ3smalFqSjRvNGUoSVZTZm9BYHhOIwp6LUpVM0IhfEdFPWZHa0sx
JGtoZD40SFU1QlA7ak05Q0NJK25kNjxnVlhyQWcwd3tFUl5JdVcpSDdFSzJKe0p9bGsKenZCbGd6
NEtoUjkmXzhUSns8YntyUlIyVG9ebnQhI1VrQUVaMkAmRFBlfWtoejM4S1oyeUVmQDBWVGdMSTdp
YGJ4Cnp6amBpa0ExJXRLWTt3NjdTMVl1S0NgOHViZnxIKXReRSs+c1VxZkJ5c0xoPnVjbTZ2UzV8
PzViYVktZyVGQlFfWgp6WExwfkhKKFZpfUxaXzZUTGswQ2I7VHk7QElfY3hnPX5iZF5WRSY/QkZ8
YkFVayZMb2xufmltSTgpbjRrMDg8WksKem10YXhxRHA0a3I8dUpMTmApdThaRlBhUDxCfG8/PDwo
RE5ac1lze0l5bSpjQ3Rne2g3I1dmfW50NkgjcDZqRGZWCno2aTtAaiZ4WFg9PWJhZyo1YyFQNkh1
PnlDN0JhcXRYRn1LbldsZEdLRWt2fFB1Y0RrUnlmWDF+MnlvR3xBRTgkWQp6Un1UejxtcjF5QEVU
ZVdRSU5BNVQjJGptfVlBaHk+I2gqUSFDYDcqMHhyNEIhPjF7czArUGpXJFdaZn5rcWNzd00Keioh
KmJeZX5id3gmeU9IK047Sj1JTElNbEdtcUx2WmVNZjdVVHF3OVlTMWhyVmswT15POT0oWUBFOUVv
THFrMUJYCnoqQWZgb2FnZGk2JUhzRGVAJXJWRGokVn5oU3JEPzZNMyhjbkZFPjczeXp6JWxiMFB9
OClhVGh+T2YpJShOR1BtVwp6QGU2O3BQfndHKXYjIX1zMmd6dm9LRXAmRGRHYzVPdDdtfWcjfm9Q
cz81RDBWekduIzZ6SVNOc1FWNyhAdXVWblgKeig4PHwoQms9QXMyLXpXRioyQTt+YCN7X0o9fF85
NW5CSnZuej5mfiglKUpFQyE/aEMwX0A8QCMmU1hxWEIlIylwCnpBbChWSkVodlNfZVpZUUY0QjV6
Vk48b1leb09VKG1mTylIRHFpbEo1THN3dG82Myh2VDI9bykxV1ZFSVA2TDs5dAp6WmdmWXZeRWxy
Q0BzeXI1NmY+b3JOSTUrJTRjKHNpP2dtNjs5LTJHUlNAQTJjPHBGWktWez5PeEhHbmRBZ2NQTjkK
elBpPWxtVDBPT211JnYxJVQ1anEqN2FWVXgoOF9LIWg2MF94YWxXR0ElOTQ2a2luN2AyZTxPdmR2
PnJfNkp0cSE1Cno3ezdZalFCem9tUkdNKCpUanpfSyFnP3FEUzlBY0RqO35wZU0zPG19emxHTSU+
RTZ4VHJAcjduN2x2aFZUSGtnMgp6O3BPRXVGczczeWQpcDhwPktHJUlARTxDSXVKYD5hbERqSmlR
c29qVklPVEwzYyhRK201cjR+N2FVKHByNzteUF8Kem40Kj5WUntQKURYKG9iQHg2eGdIRkB6SjBV
Zj4jeXJVZTZgLUE5RD9DRDlCVkMzQU04K3QmezhQQHtNdTM/MVY3Cno9Jl96QWVpT1ZxK0UmTHIk
UnMpQ2ROTVhGPkx1dz4wdykwNEVhaHtMNyZwNV81PylsJWB+VzA/ZjdvdHtMR252Mgp6QDxWO2VV
ZGBIM2l5VFl1eiNqKig7PHgpUk1KO0otZXlyc3Vodkd9KTYxd0Y0YSp5fiZvSyt7YWxpdy14OXRG
PEMKej5JM0ptKitISD5IdX5JMXVJISFLYjMrUHplRSRZM2NHZ2x5XztiK0FHWTRya0t2KkV+PEVz
KXotVHtjJTVFYVhCCnpYVjZ+SFU1PXwpe1hvPUIhKmh2TGRjK0J5P3s+X05mVzFfWE40NmRYNXBv
PiFyKnAtJXlSVXxlQH4oKDtfZlBXbAp6JEFvfUJjKHppakdwNlMqKkpvUTxyRjVQQStUWlAxMG4+
NGxic3ErTnNCT0Z1UiFvR2hUZk1kKE5WWDQ8dmUmPXcKemtFZT9Kb3g5OXZUI0tFRHxJMHpZbiZt
ZkkyPjBeb1AoQ1Z8K0JtYjJYUVEkKkIrWComRSMmY3lfYEhyTyo8fGE4Cnp6RGFhR1lWR0NIJjNX
Zmx2JEw0JSU2OUFlZysyWVBUejJ2bDJock0xcmx9b28yU2M0dGBVVVFrUGxhNmZfJDFScQp6NGZX
Vmkhcz5VZyl7Rnl9aHR2MEEhbmxyVVdxYWloWWxiMVdaLTtpKWdpR0BEUEV+MGtSOXNVQXJOSj1n
fDBZOUwKem9eM2VLb35Hez56entxOEVzPUptK1dXPEFga1AkWWtKbDxLTnd+NnNAQGM4fVZPNTI+
Wlloc2BiaD4rOUlnNTYwCnpHcjQxIUNaXmtaUi0rSnFIRnsyPys9ckVGYGNGPXs/RVE+fiopcDg2
Xi05WExqY3ZJLVBsWUNpOyZ9dFhAJkB4Jgp6Z2QmRVM/WFN2NXY7I2JFaloxSSNFPVgkS2pjb1Rk
dSQpdWhpcCR7NV89cnR0a2JYSytjPzNqTkkmcHRvSGRWT2wKekZ3fTFlZElWP3E+aDBIOFZfQV5L
NSRXOUQ8MHZRWDZVdXt+aHQzYH4raGVJOzc8U0NKNTNffSY0OzdDYm43Q0plCnpUcis9Rkc/JXNG
Q2lrKGIkKVE7KmQ3MTsmK2YrZDA3P1ExNCVVN2g4QCNTbmx5WDw+YUZUMlNUcW5edWp5ZDJgZgp6
V2RSPnt0QHVtTEcoQ2VlQTY4a3glISRUeShVSWxWNn1RRXQjKWs9fV88NU02VU1pSjRkLWBrZVl0
eSh2M3JucVoKek8/IUtvWTR3K3gyRVUjNnl2Y3tER2k4alArI3IkOUhOMT9iPWV1dnpjMHJ4PShY
WVErJSRlRjxEfC1JJkpBRShOCno5eHVxdThvclJKKHIoKGA5S0s8NnQ/OyY0TX15TU8hMHsjYi08
PnFRenUwQ1VYYWBpKXRIRjxxNDBrUn05QWZPUgp6PUA8MFdvbCtgQENDdnd1bUZKYTlXVl5iKXJp
ODMjUyh8THVXQXg0LWJVZztqVm4qfEdkZzI4eWNNNFZZTytXNTIKeiY4aSZWM3xDdklVbEd0bCh2
MmN6YyNDWUZrbUB6Z1Rpb0ctQzxwUyljSVR4bj5iQDY3VkZ6Yy1AVWlZSnstJCR4CnojRVA0YHRu
eVBSM04lKkdQenxIPTxVM1E+NSZDJFl5SHpafVhzWWkoUmw8RzlqanZaPDtyUjhQPjM2JWNofXdF
agp6UEc/cVpAWDUlQ2tmXl97OTtjX2Y2RSpCdEB6KlVFIzFHNEsyWmByVks5MjlhOU96M19HYiNG
JDloKXokJmJ4KksKeik+X3laTypKMURASl9RN0twTFpZOzt1Jno1KU5sTGZnPytLOCNYeWsqO21W
RVYrPyU8NF9kLSsxY253QlVIJT1mCnpCa0l0NTZ9RF44X3tSK35UM2lEMUF1KD9zO3QkcHwxWiQw
TU1acFFhdm09XyV4c0lONXtpajlTezxWVmN0SCF6eQp6ZGlPTTZxd216ezUzTSlKUSZ1UCZBKE1p
cyRiYSRKVHYoaTkhcUk7YjZ5ZThLVUdQME87Kn4zUkUhejZXJXomWSMKenlIZUAzNU5rIXdYaTVZ
UiRxSFhoPlY9a0g4eUJ8KTRJR05ObFRwdFZgMFUrM2JRa2sxSk94TkQwVmorSCZyVzt0CnpEeytV
PiExO3VpPC1hdm57YzZ2I2FeSF9aVyhkJUJeNi13Nyp3TWdXYG58aCtxPFN6MiFVN1FMeEpyS3E+
MEFIJQpQTzlQYlUpI2JqK2VoVD4/REFFJGsKCmRpZmYgLS1naXQgYS9XZWJzaXRlcy93ZWJraXQu
b3JnL3BlcmYvc2xpY2tzcGVlZC9zZWxlY3RvcnMubGlzdCBiL1dlYnNpdGVzL3dlYmtpdC5vcmcv
cGVyZi9zbGlja3NwZWVkL3NlbGVjdG9ycy5saXN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA3YzgzNjgwOTgxOTM4YjQxYzFhOTkzN2RhM2Y0Mzc4MTJkNTY3YzhkLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1dlYnNpdGVzL3dlYmtpdC5vcmcv
cGVyZi9zbGlja3NwZWVkL3NlbGVjdG9ycy5saXN0CisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAs
MCBAQAotKgotZGl2Om9ubHktY2hpbGQKLWRpdjpmaXJzdC1jaGlsZAotZGl2Om50aC1jaGlsZChl
dmVuKQotZGl2Om50aC1jaGlsZCgybikKLWRpdjpudGgtY2hpbGQob2RkKQotZGl2Om50aC1jaGls
ZCgybisxKQotZGl2Om50aC1jaGlsZChuKQotZGl2Omxhc3QtY2hpbGQKLWRpdiA+IGRpdgotZGl2
ICsgZGl2Ci1kaXYgfiBkaXYKLWJvZHkKLWJvZHkgZGl2Ci1kaXYKLWRpdiBkaXYKLWRpdiBkaXYg
ZGl2Ci1kaXYsIGRpdiwgZGl2Ci1kaXYsIGEsIHNwYW4KLS5kaWFsb2cKLWRpdi5kaWFsb2cKLWRp
diAuZGlhbG9nCi1kaXYuY2hhcmFjdGVyLCBkaXYuZGlhbG9nCi0jc3BlZWNoNQotZGl2I3NwZWVj
aDUKLWRpdiAjc3BlZWNoNQotZGl2LnNjZW5lIGRpdi5kaWFsb2cKLWRpdiNzY2VuZTEgZGl2LmRp
YWxvZyBkaXYKLSNzY2VuZTEgI3NwZWVjaDEKLWRpdlslY2xhc3NdCi1kaXZbJWNsYXNzPWRpYWxv
Z10KLWRpdlslY2xhc3NePWRpYV0KLWRpdlslY2xhc3MkPWxvZ10KLWRpdlslY2xhc3MqPXNjZV0K
LWRpdlslY2xhc3N8PWRpYWxvZ10KLWRpdlslY2xhc3N+PWRpYWxvZ10KXCBObyBuZXdsaW5lIGF0
IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9XZWJzaXRlcy93ZWJraXQub3JnL3BlcmYvc2xpY2tz
cGVlZC9zdHlsZS5jc3MgYi9XZWJzaXRlcy93ZWJraXQub3JnL3BlcmYvc2xpY2tzcGVlZC9zdHls
ZS5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhOThjMDlhOTI0YzkxNjViOTM4
N2IyNTM1MGMxNzUxNGQ0OGNlMjcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvV2Vic2l0ZXMvd2Via2l0Lm9yZy9wZXJmL3NsaWNrc3BlZWQvc3R5bGUuY3Nz
CisrKyAvZGV2L251bGwKQEAgLTEsMTg5ICswLDAgQEAKLWJvZHkgewotCWZvbnQ6IDExcHggIkx1
Y2lkYSBHcmFuZGUiLCAiVHJlYnVjaGV0IE1TIiwgVmVyZGFuYSwgc2Fucy1zZXJpZjsKLQljb2xv
cjogIzQxNDY0RDsKLQltYXJnaW46IDA7Ci0JcGFkZGluZzogMDsKLQliYWNrZ3JvdW5kOiAjRjNG
MUYxOwotfQotCi0vKm1haW4gcnVsZXMqLwotCi1hOmxpbmssIGE6dmlzaXRlZCB7Ci0JY29sb3I6
ICM1MjhDRTA7Ci19Ci0KLWE6aG92ZXIsIGE6YWN0aXZlIHsKLQljb2xvcjogI0M2NUY1RTsKLX0K
LQotcCB7Ci0JZm9udC1zaXplOiAxM3B4OwotCW1hcmdpbjogMDsKLQlwYWRkaW5nOiAzcHggMDsK
LX0KLQotaWZyYW1lIHsKLQloZWlnaHQ6IDFweDsKLQl3aWR0aDogMXB4OwotCXZpc2liaWxpdHk6
IGhpZGRlbjsKLX0KLQotc3Bhbi5jbHIgewotCWRpc3BsYXk6IGJsb2NrOwotCWNsZWFyOiBib3Ro
OwotfQotCi0vKmhlYWRlciovCi0KLWgxIHsKLQlmb250LWZhbWlseTogR2VvcmdpYTsKLQltYXJn
aW46IDA7Ci0JcGFkZGluZzogMDsKLQliYWNrZ3JvdW5kOiB1cmwobG9nby5wbmcpIG5vLXJlcGVh
dCB0b3AgbGVmdDsKLQloZWlnaHQ6IDY5cHg7Ci0Jd2lkdGg6IDI4MHB4OwotfQotCi1oMSBzcGFu
IHsKLQlkaXNwbGF5OiBub25lOwotfQotCi1oMiB7Ci0JbWFyZ2luOiAwOwotCXBhZGRpbmc6IDEw
cHggMDsKLQlmb250LXNpemU6IDE1cHg7Ci19Ci0KLSNjb250YWluZXIgewotCXBhZGRpbmc6IDMw
cHg7Ci19Ci0KLS8qY29udHJvbHMqLwotCi0jY29udHJvbHMgYTpsaW5rLCAjY29udHJvbHMgYTp2
aXNpdGVkIHsKLQlkaXNwbGF5OiBibG9jazsKLQlmbG9hdDogcmlnaHQ7Ci0JYmFja2dyb3VuZDog
I0QwQzhDODsKLQlwYWRkaW5nOiA3cHggMTBweDsKLQlmb250LXNpemU6IDEzcHg7Ci0JZm9udC13
ZWlnaHQ6IGJvbGQ7Ci0JbWFyZ2luLWxlZnQ6IDEwcHg7Ci0JdGV4dC1hbGlnbjogY2VudGVyOwot
CXRleHQtZGVjb3JhdGlvbjogbm9uZTsKLQlib3JkZXI6IDNweCBzb2xpZCAjZmZmOwotCWNvbG9y
OiAjNDE0NjREOwotCXRleHQtc2hhZG93OiAycHggMnB4IDFweCAjQjlBQ0FDOwotfQotCi0jY29u
dHJvbHMgYTpob3ZlciwgI2NvbnRyb2xzIGE6YWN0aXZlIHsKLQl0ZXh0LXNoYWRvdzogbm9uZTsK
LQliYWNrZ3JvdW5kOiAjRjNGMUYxOwotCWNvbG9yOiAjNTI4Q0UwOwotfQotCi0vKnRhYmxlKi8K
LQotdGFibGUgewotCWJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7Ci0Jd2lkdGg6IDEwMCU7Ci0J
bWluLXdpZHRoOiA4MDBweDsKLQltYXJnaW46IDA7Ci0JcGFkZGluZzogMDsKLX0KLQotI2xlZ2Vu
ZCB0ZCB7Ci0JcGFkZGluZzogMTVweDsKLX0KLQotdGQsIHRoIHsKLQliYWNrZ3JvdW5kOiAjQzhD
QkQwOwotCXBhZGRpbmc6IDVweCA4cHg7Ci0JbWFyZ2luOiAwOwotCXdpZHRoOiAxNTBweDsKLQlm
b250LXdlaWdodDogYm9sZDsKLQlib3JkZXI6IDNweCBzb2xpZCAjZmZmOwotfQotCi10aCB7Ci0J
Zm9udC13ZWlnaHQ6IGJvbGQ7Ci0JYmFja2dyb3VuZDogI0QwQzhDODsKLQljb2xvcjogIzhBNzU3
NTsKLX0KLQotdGguZnJhbWV3b3JrIHsKLQlmb250LXNpemU6IDE1cHg7Ci0JdGV4dC1zaGFkb3c6
IDJweCAycHggMXB4ICNCOUFDQUM7Ci19Ci0KLXRkLnRlc3QsIHRkLmVtcHR5LCB0aCB7Ci0JdGV4
dC1hbGlnbjogcmlnaHQ7Ci19Ci0KLXRkLm5vcm1hbCB7Ci0JY29sb3I6ICM2MzZBNzU7Ci19Ci0K
LXRkLm1pc21hdGNoIHsKLQljb2xvcjogI0FENzUyMDsKLX0KLQotdGQuZ29vZCB7Ci0JY29sb3I6
ICM2NTc1Mjg7Ci0JYmFja2dyb3VuZDogI0NGRTc3MzsKLX0KLQotdGQuYmFkIHsKLQljb2xvcjog
I0IzM0YzRjsKLQliYWNrZ3JvdW5kOiAjRUU5QTlBOwotfQotCi10ZC5leGNlcHRpb24gewotCWNv
bG9yOiAjRjNGMUYxOwotCWJhY2tncm91bmQ6ICM0MTQ2NEQ7Ci19Ci0KLXNwYW4uZXhjZXB0aW9u
IHsKLQljb2xvcjogI0RCRUFGMDsKLQl0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKLQljdXJz
b3I6IGhlbHA7Ci19Ci0KLXRkLnplcm8gewotCWNvbG9yOiAjRjNGMUYxOwotCWJhY2tncm91bmQ6
ICM0MTQ2NEQ7Ci19Ci0KLXRoLnNlbGVjdG9yIHsKLQliYWNrZ3JvdW5kOiAjRDJFMEU2OwotCWNv
bG9yOiAjNTI4Q0UwOwotCXRleHQtYWxpZ246IGxlZnQ7Ci19Ci0KLXRoLnNjb3JlLXRpdGxlLCB0
aC5zZWxlY3RvcnMtdGl0bGUgewotCXRleHQtYWxpZ246IGxlZnQ7Ci0JZm9udC1zaXplOiAxMnB4
OwotCXdpZHRoOiAxODBweDsKLX0KLQotdGQuc2NvcmUgewotCWNvbG9yOiAjOEE3NTc1OwotCWJh
Y2tncm91bmQ6ICNEMEM4Qzg7Ci0JdGV4dC1hbGlnbjogY2VudGVyOwotCWZvbnQtc2l6ZTogMTJw
eDsKLX0KLQotdGQubWlzbWF0Y2ggewotCWJhY2tncm91bmQ6ICNFOEM4OTY7Ci19Ci0KLS8qcGFn
ZSBmb290ZXIqLwotCi1kaXYjZm9vdGVyIHsKLQlwYWRkaW5nOiAyMHB4IDA7Ci19Ci0KLWRpdiNm
b290ZXIgcCB7Ci0JZm9udC1zaXplOiAxMXB4OwotCWNvbG9yOiAjQjlBQ0FDOwotfQotCmRpZmYg
LS1naXQgYS9XZWJzaXRlcy93ZWJraXQub3JnL3BlcmYvc2xpY2tzcGVlZC9zeXN0ZW0vaW5kZXgu
cGhwIGIvV2Vic2l0ZXMvd2Via2l0Lm9yZy9wZXJmL3NsaWNrc3BlZWQvc3lzdGVtL2luZGV4LnBo
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzcxYzU5YzcwODAwZGYyNDg5Y2RhOTZh
ZTU1YmYxODcxMDJmNzY1MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9XZWJzaXRlcy93ZWJraXQub3JnL3BlcmYvc2xpY2tzcGVlZC9zeXN0ZW0vaW5kZXgu
cGhwCisrKyAvZGV2L251bGwKQEAgLTEsMTEyICswLDAgQEAKLTw/cGhwCi0KLQkkZnJhbWV3b3Jr
cyA9IHBhcnNlX2luaV9maWxlKCdjb25maWcuaW5pJywgdHJ1ZSk7Ci0JJHNlbGVjdG9ycyA9IGZp
bGVfZ2V0X2NvbnRlbnRzKCdzZWxlY3RvcnMubGlzdCcpOwotCi0/PgotPCFET0NUWVBFIGh0bWw+
Ci0KLTxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0i
ZW4iIGxhbmc9ImVuIj4KLTxoZWFkPgotCTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIg
Y29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ii8+Ci0JPHRpdGxlPlNsaWNrU3BlZWQg
U2VsZWN0b3JzIFRlc3Q8L3RpdGxlPgotCTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5
bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgbWVkaWE9InNjcmVlbiI+Ci0JCi0JPHNjcmlwdCB0eXBl
PSJ0ZXh0L2phdmFzY3JpcHQiPgotCQk8P3BocAotCQkkc2VsZWN0b3JzID0gZXhwbG9kZSgiXG4i
LCAkc2VsZWN0b3JzKTsKLQkJZm9yZWFjaCAoJHNlbGVjdG9ycyBhcyAkaSA9PiAkc2VsZWN0b3Ip
ICRsaXN0WyRpXSA9ICInIi4kc2VsZWN0b3IuIiciOwotCQkkbGlzdCA9IGltcGxvZGUoJywnLCAk
bGlzdCk7Ci0JCWVjaG8gIndpbmRvdy5zZWxlY3RvcnMgPSBbJGxpc3RdIjsKLQkJPz4KLQk8L3Nj
cmlwdD4KLQkKLQk8c2NyaXB0IHNyYz0ic3lzdGVtL3NsaWNrc3BlZWQuanMiIHR5cGU9InRleHQv
amF2YXNjcmlwdCI+PC9zY3JpcHQ+Ci08L2hlYWQ+Ci0KLTxib2R5PgotCQotPGRpdiBpZD0iY29u
dGFpbmVyIj4KLQkKLQk8ZGl2IGlkPSJjb250cm9scyI+Ci0JCTxhIGNsYXNzPSJzdG9wIiBocmVm
PSIjIj5zdG9wIHRlc3RzPC9hPgotCQk8YSBjbGFzcz0ic3RhcnQiIGhyZWY9IiMiPnN0YXJ0IHRl
c3RzPC9hPgotCTwvZGl2PgotCQotPD9waHAgaW5jbHVkZSgnaGVhZGVyLmh0bWwnKTsgPz4KLQot
PD9waHAKLQlmb3JlYWNoICgkZnJhbWV3b3JrcyBhcyAkZnJhbWV3b3JrID0+ICRwcm9wZXJ0aWVz
KXsKLQkJJGluY2x1ZGUgPSAkcHJvcGVydGllc1snZmlsZSddOwotCQkkZnVuY3Rpb24gPSAkcHJv
cGVydGllc1snZnVuY3Rpb24nXTsKLQkJJG1vZGlmaWVyID0gJHByb3BlcnRpZXNbJ21vZGlmaWVy
J107Ci0JCSR0aW1lID0gdGltZSgpOwotCQllY2hvICI8aWZyYW1lIG5hbWU9JyRmcmFtZXdvcmsn
IHNyYz0nc3lzdGVtL3RlbXBsYXRlLnBocD9pbmNsdWRlPSRpbmNsdWRlJmZ1bmN0aW9uPSRmdW5j
dGlvbiZtb2RpZmllcj0kbW9kaWZpZXImbm9jYWNoZT0kdGltZSc+PC9pZnJhbWU+XG5cbiI7Ci0J
fQotPz4KLQotPHRhYmxlPgotCi0JPHRoZWFkIGlkPSJ0aGVhZCI+Ci0JCTx0cj4KLQkJCTx0aCBj
bGFzcz0ic2VsZWN0b3JzLXRpdGxlIj5zZWxlY3RvcnM8L3RoPgotCQkJPD9waHAKLQkJCQlmb3Jl
YWNoICgkZnJhbWV3b3JrcyBhcyAkZnJhbWV3b3JrID0+ICRwcm9wZXJ0aWVzKXsKLQkJCQkJZWNo
byAiPHRoIGNsYXNzPSdmcmFtZXdvcmsnPiRmcmFtZXdvcms8L3RoPiI7Ci0JCQkJfQotCQkJPz4K
LQkJPC90cj4KLQk8L3RoZWFkPgotCi0JPHRib2R5IGlkPSJ0Ym9keSI+Ci0JCTw/cGhwCi0JCQlm
b3JlYWNoICgkc2VsZWN0b3JzIGFzICRzZWxlY3Rvcil7Ci0JCQkJZWNobyAiPHRyPiI7Ci0JCQkJ
JHNlbGVjdG9yID0gc3RyX3JlcGxhY2UoJyUnLCAnJywgJHNlbGVjdG9yKTsKLQkJCQllY2hvICI8
dGggY2xhc3M9J3NlbGVjdG9yJz4kc2VsZWN0b3I8L3RoPiI7Ci0JCQkJZm9yZWFjaCAoJGZyYW1l
d29ya3MgYXMgJGZyYW1ld29yayl7Ci0JCQkJCWVjaG8gIjx0ZCBjbGFzcz0nZW1wdHknPjwvdGQ+
IjsKLQkJCQl9Ci0JCQkJZWNobyAiPC90cj4iOwotCQkJfQotCQk/PgotCTwvdGJvZHk+Ci0JCi0J
PHRmb290IGlkPSJ0Zm9vdCI+Ci0JCTx0cj4KLQkJPHRoIGNsYXNzPSJzY29yZS10aXRsZSI+PHN0
cm9uZz5maW5hbCB0aW1lIChsZXNzIGlzIGJldHRlcik8L3N0cm9uZz48L3RoPgotCQk8P3BocAot
CQkJZm9yZWFjaCAoJGZyYW1ld29ya3MgYXMgJGZyYW1ld29yayl7Ci0JCQkJZWNobyAiPHRkIGNs
YXNzPSdzY29yZSc+MDwvdGQ+IjsKLQkJCX0KLQkJPz4KLQkJPC90cj4KLQk8L3Rmb290PgotCi08
L3RhYmxlPgotCi08aDI+TGVnZW5kPC9oMj4KLQotPHRhYmxlIGlkPSJsZWdlbmQiPgotCi0JPHRy
PgotCQk8dGg+dGhlIGZhc3RlcjwvdGg+Ci0JCTx0aD50aGUgc2xvd2VyPC90aD4KLQkJPHRoPmV4
Y2VwdGlvbiB0aHJvd24gb3IgemVybyBlbGVtZW50cyBmb3VuZDwvdGg+Ci0JCTx0aD5kaWZmZXJl
bnQgcmV0dXJuZWQgZWxlbWVudHM8L3RoPgotCTwvdHI+Ci0KLQk8dHI+Ci0JCTx0ZCBjbGFzcz0i
Z29vZCI+PC90ZD4KLQkJPHRkIGNsYXNzPSJiYWQiPjwvdGQ+Ci0JCTx0ZCBjbGFzcz0iZXhjZXB0
aW9uIj48L3RkPgotCQk8dGQgY2xhc3M9Im1pc21hdGNoIj48L3RkPgotCTwvdHI+Ci0KLTwvdGFi
bGU+Ci0KLTw/cGhwIGluY2x1ZGUoJ2Zvb3Rlci5odG1sJyk7ID8+Ci08L2Rpdj4KLQotPC9ib2R5
PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1dlYnNp
dGVzL3dlYmtpdC5vcmcvcGVyZi9zbGlja3NwZWVkL3N5c3RlbS9zbGlja3NwZWVkLmpzIGIvV2Vi
c2l0ZXMvd2Via2l0Lm9yZy9wZXJmL3NsaWNrc3BlZWQvc3lzdGVtL3NsaWNrc3BlZWQuanMKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlNGMxYjVjMTdmOTI5ODAwYzdkZjAxYmYwZDU3
OTQwMDFkNWM4ZTQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvV2Vic2l0ZXMvd2Via2l0Lm9yZy9wZXJmL3NsaWNrc3BlZWQvc3lzdGVtL3NsaWNrc3BlZWQu
anMKKysrIC9kZXYvbnVsbApAQCAtMSwxNTQgKzAsMCBAQAotLy9iYXNlIHRlc3QgZnVuY3Rpb25z
Ci0KLWZ1bmN0aW9uIGZvckVhY2goaXRlcmFibGUsIGZuLCBiaW5kKXsKLQlmb3IgKHZhciBpID0g
MCwgaiA9IGl0ZXJhYmxlLmxlbmd0aDsgaSA8IGo7IGkrKykgZm4uY2FsbChiaW5kLCBpdGVyYWJs
ZVtpXSwgaSwgaXRlcmFibGUpOwotfTsKLQotLy90ZXN0IHN0YXJ0Ci0KLXdpbmRvdy5vbmxvYWQg
PSBmdW5jdGlvbigpewotCQotCXZhciBmcmFtZXdvcmtzID0ge307Ci0JCi0JZm9yRWFjaChkb2N1
bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaWZyYW1lJyksIGZ1bmN0aW9uKGlmcmFtZSl7Ci0J
CWZyYW1ld29ya3NbaWZyYW1lLm5hbWVdID0gewotCQkJJ3Rlc3QnOiB3aW5kb3cuZnJhbWVzW2lm
cmFtZS5uYW1lXS50ZXN0LAotCQkJJ2F0dHJpYnV0ZSc6IHdpbmRvdy5mcmFtZXNbaWZyYW1lLm5h
bWVdLm1vZGlmaWVyIHx8ICcnLAotCQkJJ3NlbGVjdG9ycyc6IFtdCi0JCX07Ci0JfSk7Ci0JCi0J
dmFyIHRib2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rib2R5Jyk7Ci0JdmFyIHRmb290
ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rmb290Jyk7Ci0JdmFyIGxhc3Ryb3cgPSB0Zm9v
dC5nZXRFbGVtZW50c0J5VGFnTmFtZSgndHInKVswXTsKLQkKLQl2YXIgY29udHJvbHMgPSBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgnY29udHJvbHMnKTsKLQkKLQl2YXIgbGlua3MgPSBjb250cm9s
cy5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYScpOwotCQotCXZhciBzdGFydCA9IGxpbmtzWzFdOwot
CXZhciBzdG9wID0gbGlua3NbMF07Ci0JCi0Jc3RhcnQub25jbGljayA9IGZ1bmN0aW9uKCl7Ci0J
CXRlc3RSdW5uZXIoKTsKLQkJcmV0dXJuIGZhbHNlOwotCX07Ci0JCi0Jc3RvcC5vbmNsaWNrID0g
ZnVuY3Rpb24oKXsKLQkJY2xlYXJUaW1lb3V0KHRpbWVyKTsKLQkJdGltZXIgPSBudWxsOwotCQly
ZXR1cm4gZmFsc2U7Ci0JfTsKLQkKLQl2YXIgc2NvcmUgPSBbXTsKLQl2YXIgc2NvcmVzID0ge307
Ci0JCi0JdmFyIGZyeGkgPSAwOwotCWZvciAodmFyIG5hbWUgaW4gZnJhbWV3b3Jrcyl7Ci0JCXZh
ciBmcmFtZXdvcmsgPSBmcmFtZXdvcmtzW25hbWVdOwotCQlmb3JFYWNoKHdpbmRvdy5zZWxlY3Rv
cnMsIGZ1bmN0aW9uKHNlbGVjdG9yKXsKLQkJCXZhciBmcmFtZXdvcmtTZWxlY3RvciA9IHNlbGVj
dG9yLnJlcGxhY2UoJyUnLCBmcmFtZXdvcmtzW25hbWVdLmF0dHJpYnV0ZSk7Ci0JCQlmcmFtZXdv
cmsuc2VsZWN0b3JzLnB1c2goZnJhbWV3b3JrU2VsZWN0b3IpOwotCQl9KTsKLQkJc2NvcmVzW25h
bWVdID0gbGFzdHJvdy5nZXRFbGVtZW50c0J5VGFnTmFtZSgndGQnKVtmcnhpXTsKLQkJc2NvcmVb
bmFtZV0gPSAwOwotCQlmcnhpKys7Ci0JfQotCQotCXZhciB0ZXN0cyA9IFtdOwotCi0JZm9yRWFj
aCh3aW5kb3cuc2VsZWN0b3JzLCBmdW5jdGlvbihzZWxlY3RvciwgaSl7Ci0JCXZhciBmcnhpID0g
MDsKLQkJdmFyIHJvdyA9IHRib2R5LmdldEVsZW1lbnRzQnlUYWdOYW1lKCd0cicpW2ldOwotCQlm
b3IgKHZhciBuYW1lIGluIGZyYW1ld29ya3MpewotCQkJdmFyIGZyYW1ld29yayA9IGZyYW1ld29y
a3NbbmFtZV07Ci0JCQl2YXIgY2VsbCA9IHJvdy5nZXRFbGVtZW50c0J5VGFnTmFtZSgndGQnKVtm
cnhpXTsKLQkJCXRlc3RzLnB1c2goewotCQkJCSdleGVjdXRlJzogZnJhbWV3b3JrLnRlc3QsCi0J
CQkJJ3NlbGVjdG9yJzogZnJhbWV3b3JrLnNlbGVjdG9yc1tpXSwKLQkJCQknbmFtZSc6IG5hbWUs
Ci0JCQkJJ3Jvdyc6IHJvdywKLQkJCQknY2VsbCcgOiBjZWxsCi0JCQl9KTsKLQkJCWZyeGkrKzsK
LQkJfQotCX0pOwotCQotCXZhciB0aW1lciA9IG51bGw7Ci0JCi0JdmFyIHRlc3RSdW5uZXIgPSBm
dW5jdGlvbigpewotCQl2YXIgdGVzdCA9IHRlc3RzLnNoaWZ0KCk7Ci0JCWlmICghdGVzdCkgcmV0
dXJuOwotCQl2YXIgcmVzdWx0cyA9IHRlc3QuZXhlY3V0ZSh0ZXN0LnNlbGVjdG9yKTsKLQkJdGVz
dC5jZWxsLmNsYXNzTmFtZSA9ICd0ZXN0JzsKLQkJdGVzdC5jZWxsLmlubmVySFRNTCA9IHJlc3Vs
dHMudGltZSArICcgbXMgfCAnICsgcmVzdWx0cy5mb3VuZCArICcgZm91bmQnOwotCQl0ZXN0LmNl
bGwuc3BlZWQgPSByZXN1bHRzLnRpbWU7Ci0JCWlmIChyZXN1bHRzLmZvdW5kID09IDApewotCQkJ
dGVzdC5jZWxsLmlubmVySFRNTCA9IHJlc3VsdHMudGltZSArICcgbXMgfCB6ZXJvIHJlc3VsdHMn
OwotCQkJdGVzdC5jZWxsLmNsYXNzTmFtZSArPSAnIHplcm8nOwotCQkJdGVzdC5jZWxsLmZvdW5k
ID0gMDsKLQkJCXRlc3QuY2VsbC5lcnJvciA9IHRydWU7Ci0JCX0gZWxzZSBpZiAocmVzdWx0cy5l
cnJvcil7Ci0JCQl0ZXN0LmNlbGwuaW5uZXJIVE1MID0gcmVzdWx0cy50aW1lICsgJyBtcyB8IDxz
cGFuIGNsYXNzPSJleGNlcHRpb24iIHRpdGxlPSInICsgcmVzdWx0cy5lcnJvciArICciPmVycm9y
IHJldHVybmVkPC9hPic7Ci0JCQl0ZXN0LmNlbGwuY2xhc3NOYW1lICs9ICcgZXhjZXB0aW9uJzsK
LQkJCXRlc3QuY2VsbC5mb3VuZCA9IDA7Ci0JCQl0ZXN0LmNlbGwuZXJyb3IgPSB0cnVlOwotCQl9
IGVsc2UgewotCQkJdGVzdC5jZWxsLmZvdW5kID0gcmVzdWx0cy5mb3VuZDsKLQkJCXRlc3QuY2Vs
bC5lcnJvciA9IGZhbHNlOwotCQl9Ci0JCQotCQlzY29yZVt0ZXN0Lm5hbWVdICs9IHRlc3QuY2Vs
bC5zcGVlZDsKLQkJc2NvcmVzW3Rlc3QubmFtZV0uaW5uZXJIVE1MID0gICcmbmJzcDsnICsgc2Nv
cmVbdGVzdC5uYW1lXSArICcmbmJzcDsnOwotCQkKLQkJaWYgKHRlc3QuY2VsbCA9PSB0ZXN0LnJv
dy5sYXN0Q2hpbGQpIGNvbG91clJvdyh0ZXN0LnJvdyk7Ci0JCXRpbWVyID0gc2V0VGltZW91dCh0
ZXN0UnVubmVyLCAwKTsKLQl9OwotCQotCXZhciBjb2xvdXJSb3cgPSBmdW5jdGlvbihyb3cpewot
CQkKLQkJdmFyIGNlbGxzID0gW107Ci0JCQotCQl2YXIgdGRzID0gcm93LmdldEVsZW1lbnRzQnlU
YWdOYW1lKCd0ZCcpOwotCQlmb3JFYWNoKHRkcywgZnVuY3Rpb24odGQpewotCQkJY2VsbHMucHVz
aCh0ZCk7Ci0JCX0pOwotCQkKLQkJdmFyIHNwZWVkcyA9IFtdOwotCQkKLQkJZm9yRWFjaChjZWxs
cywgZnVuY3Rpb24oY2VsbCwgaSl7Ci0JCQlpZiAoIWNlbGwuZXJyb3IpIHNwZWVkc1tpXSA9IGNl
bGwuc3BlZWQ7Ci0JCQkvL2Vycm9yLCBzbyB3ZSBleGNsdWRlIGl0IGZyb20gY29sb3VyaW5nCi0J
CQllbHNlIHNwZWVkc1tpXSA9IDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OwotCQl9KTsKLQkJCi0J
CXZhciBtaW4gPSBNYXRoLm1pbi5hcHBseSh0aGlzLCBzcGVlZHMpOwotCQl2YXIgbWF4ID0gTWF0
aC5tYXguYXBwbHkodGhpcywgc3BlZWRzKTsKLQkJCi0JCXZhciBmb3VuZCA9IFtdOwotCQl2YXIg
bWlzbWF0Y2ggPSBmYWxzZTsKLQkJZm9yRWFjaChjZWxscywgZnVuY3Rpb24oY2VsbCwgaSl7Ci0J
CQlmb3VuZC5wdXNoKGNlbGwuZm91bmQpOwotCQkJaWYgKCFtaXNtYXRjaCl7Ci0JCQkJZm9yRWFj
aChmb3VuZCwgZnVuY3Rpb24obil7Ci0JCQkJCWlmIChjZWxsLmZvdW5kICYmIG4gJiYgY2VsbC5m
b3VuZCAhPSBuKXsKLQkJCQkJCW1pc21hdGNoID0gdHJ1ZTsKLQkJCQkJCXJldHVybjsKLQkJCQkJ
fQotCQkJCX0pOwotCQkJfQotCQkJaWYgKGNlbGwuc3BlZWQgPT0gbWluKSBjZWxsLmNsYXNzTmFt
ZSArPSAnIGdvb2QnOwotCQkJZWxzZSBpZiAoY2VsbC5zcGVlZCA9PSBtYXgpIGNlbGwuY2xhc3NO
YW1lICs9ICcgYmFkJzsKLQkJCWVsc2UgY2VsbC5jbGFzc05hbWUgKz0gJyBub3JtYWwnOwotCQl9
KTsKLQkJCi0JCWlmIChtaXNtYXRjaCl7Ci0JCQlmb3JFYWNoKGNlbGxzLCBmdW5jdGlvbihjZWxs
LCBpKXsKLQkJCQlpZiAoY2VsbC5mb3VuZCkgY2VsbC5jbGFzc05hbWUgKz0gJyBtaXNtYXRjaCc7
Ci0JCQl9KTsKLQkJfQotCQkKLQl9OwotCQotCi19OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZp
bGUKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL3dlYmtpdC5vcmcvcGVyZi9zbGlja3NwZWVkL3N5c3Rl
bS90ZW1wbGF0ZS5waHAgYi9XZWJzaXRlcy93ZWJraXQub3JnL3BlcmYvc2xpY2tzcGVlZC9zeXN0
ZW0vdGVtcGxhdGUucGhwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYmI3ZGNmZGIz
MDA5MzdmNTdjNjY2MDA5YzkyNDFiMjNkNWZjZmEzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1dlYnNpdGVzL3dlYmtpdC5vcmcvcGVyZi9zbGlja3NwZWVk
L3N5c3RlbS90ZW1wbGF0ZS5waHAKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi08IURP
Q1RZUEUgaHRtbD4KLQotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwi
IHhtbDpsYW5nPSJlbiIgbGFuZz0iZW4iIGRlYnVnPSJ0cnVlIj4KLTxoZWFkPgotCTxtZXRhIGh0
dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04
Ii8+Ci0JCi0JPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vZnJhbWV3b3Jr
cy88P3BocCBlY2hvICRfR0VUWydpbmNsdWRlJ107ID8+Ij48L3NjcmlwdD4KLQkKLQk8c2NyaXB0
IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci0JCQotCQl2YXIgbW9kaWZpZXIgPSA8P3BocCBlY2hv
ICciJy4kX0dFVFsnbW9kaWZpZXInXS4nIic7ID8+OwotCQotCQlmdW5jdGlvbiB0ZXN0KHNlbGVj
dG9yKXsKLQkJCXRyeSB7Ci0JCQkJdmFyIHN0YXJ0ID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7Ci0J
CQkJdmFyIGVsZW1lbnRzID0gPD9waHAgZWNobyAkX0dFVFsnZnVuY3Rpb24nXTsgPz4oc2VsZWN0
b3IpOwotCQkJCXZhciBzdGVwID0gKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC0gc3RhcnQpOwotCQkJ
CWlmIChzdGVwID4gNzUwKSByZXR1cm4geyd0aW1lJzogc3RlcCwgJ2ZvdW5kJzogZWxlbWVudHMu
bGVuZ3RofTsKLQkJCQlmb3IodmFyIGkgPSAwOyBpIDwgMjUwOyBpKyspCi0JCQkJewotCQkJCTw/
cGhwIGVjaG8gJF9HRVRbJ2Z1bmN0aW9uJ107ID8+KHNlbGVjdG9yKTsKLQkJCQl9Ci0JCQkJdmFy
IGVuZCA9IChuZXcgRGF0ZSgpLmdldFRpbWUoKSAtIHN0YXJ0KTsKLQkJCQlyZXR1cm4geyd0aW1l
JzogTWF0aC5yb3VuZChlbmQpLCAnZm91bmQnOiBlbGVtZW50cy5sZW5ndGh9OwotCQkJfSBjYXRj
aChlcnIpewotCQkJCWlmIChlbGVtZW50cyA9PSB1bmRlZmluZWQpIGVsZW1lbnRzID0ge2xlbmd0
aDogLTF9OwotCQkJCXJldHVybiAoeyd0aW1lJzogKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC0gc3Rh
cnQpLCAnZm91bmQnOiBlbGVtZW50cy5sZW5ndGgsICdlcnJvcic6IGVycn0pOwotCQkJfQotCi0J
CX07Ci0JCi0JPC9zY3JpcHQ+Ci0JCi08L2hlYWQ+Ci0KLTxib2R5PgotCQotCTw/cGhwIGluY2x1
ZGUoJy4uL3RlbXBsYXRlLmh0bWwnKTs/PgotCi08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQg
YS9XZWJzaXRlcy93ZWJraXQub3JnL3BlcmYvc2xpY2tzcGVlZC90ZW1wbGF0ZS5odG1sIGIvV2Vi
c2l0ZXMvd2Via2l0Lm9yZy9wZXJmL3NsaWNrc3BlZWQvdGVtcGxhdGUuaHRtbApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggYTlhMzc4ZThmMzZmOGM3Y2EwODk2NmY5NmVjMmYwZDExNDdi
ODgxMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9XZWJz
aXRlcy93ZWJraXQub3JnL3BlcmYvc2xpY2tzcGVlZC90ZW1wbGF0ZS5odG1sCisrKyAvZGV2L251
bGwKQEAgLTEsNTAzICswLDAgQEAKLTxkaXYgaWQ9InRlc3QiPgotCTxkaXYgY2xhc3M9ImRpYWxv
ZyI+Ci0JPGgyPkFzIFlvdSBMaWtlIEl0PC9oMj4KLQk8ZGl2IGlkPSJwbGF5d3JpZ2h0Ij4KLQot
CSAgYnkgV2lsbGlhbSBTaGFrZXNwZWFyZQotCi0KLQk8L2Rpdj4KLQk8ZGl2IGNsYXNzPSJkaWFs
b2cgc2NlbmUgdGhpcmRDbGFzcyIgaWQ9InNjZW5lMSI+Ci0JICA8aDM+QUNUIEksIFNDRU5FIElJ
SS4gQSByb29tIGluIHRoZSBwYWxhY2UuPC9oMz4KLQotCSAgPGRpdiBjbGFzcz0iZGlhbG9nIj4K
LQkgIDxkaXYgY2xhc3M9ImRpcmVjdGlvbiI+RW50ZXIgQ0VMSUEgYW5kIFJPU0FMSU5EPC9kaXY+
Ci0KLQkgIDwvZGl2PgotCi0JICA8ZGl2IGlkPSJzcGVlY2gxIiBjbGFzcz0iY2hhcmFjdGVyIj5D
RUxJQTwvZGl2PgotCi0JICA8ZGl2IGNsYXNzPSJkaWFsb2ciPgotCSAgPGRpdiBpZD0ic2NlbmUx
LjMuMSI+V2h5LCBjb3VzaW4hIHdoeSwgUm9zYWxpbmQhIEN1cGlkIGhhdmUgbWVyY3khIG5vdCBh
IHdvcmQ/PC9kaXY+Ci0KLQkgIDwvZGl2PgotCi0JICA8ZGl2IGlkPSJzcGVlY2gyIiBjbGFzcz0i
Y2hhcmFjdGVyIj5ST1NBTElORDwvZGl2PgotCi0JICA8ZGl2IGNsYXNzPSJkaWFsb2ciPgotCSAg
PGRpdiBpZD0ic2NlbmUxLjMuMiI+Tm90IG9uZSB0byB0aHJvdyBhdCBhIGRvZy48L2Rpdj4KLQot
CSAgPC9kaXY+Ci0KLQkgIDxkaXYgaWQ9InNwZWVjaDMiIGNsYXNzPSJjaGFyYWN0ZXIiPkNFTElB
PC9kaXY+Ci0KLQkgIDxkaXYgY2xhc3M9ImRpYWxvZyI+Ci0JICA8ZGl2IGlkPSJzY2VuZTEuMy4z
Ij5ObywgdGh5IHdvcmRzIGFyZSB0b28gcHJlY2lvdXMgdG8gYmUgY2FzdCBhd2F5IHVwb248L2Rp
dj4KLQotCSAgPGRpdiBpZD0ic2NlbmUxLjMuNCI+Y3VyczsgdGhyb3cgc29tZSBvZiB0aGVtIGF0
IG1lOyBjb21lLCBsYW1lIG1lIHdpdGggcmVhc29ucy48L2Rpdj4KLQkgIDwvZGl2PgotCi0JICA8
ZGl2IGlkPSJzcGVlY2g0IiBjbGFzcz0iY2hhcmFjdGVyIj5ST1NBTElORDwvZGl2PgotCi0JICA8
ZGl2IGlkPSJzcGVlY2g1IiBjbGFzcz0iY2hhcmFjdGVyIj5DRUxJQTwvZGl2PgotCi0JICA8ZGl2
IGNsYXNzPSJkaWFsb2ciPgotCSAgPGRpdiBpZD0ic2NlbmUxLjMuOCI+QnV0IGlzIGFsbCB0aGlz
IGZvciB5b3VyIGZhdGhlcj88L2Rpdj4KLQotCSAgPC9kaXY+Ci0KLQkgIDxkaXYgY2xhc3M9ImRp
YWxvZyI+Ci0JICA8ZGl2IGlkPSJzY2VuZTEuMy41Ij5UaGVuIHRoZXJlIHdlcmUgdHdvIGNvdXNp
bnMgbGFpZCB1cDsgd2hlbiB0aGUgb25lPC9kaXY+Ci0JICA8ZGl2IGlkPSJzY2VuZTEuMy42Ij5z
aG91bGQgYmUgbGFtZWQgd2l0aCByZWFzb25zIGFuZCB0aGUgb3RoZXIgbWFkPC9kaXY+Ci0KLQkg
IDxkaXYgaWQ9InNjZW5lMS4zLjciPndpdGhvdXQgYW55LjwvZGl2PgotCSAgPC9kaXY+Ci0KLQkg
IDxkaXYgaWQ9InNwZWVjaDYiIGNsYXNzPSJjaGFyYWN0ZXIiPlJPU0FMSU5EPC9kaXY+Ci0KLQkg
IDxkaXYgY2xhc3M9ImRpYWxvZyI+Ci0JICA8ZGl2IGlkPSJzY2VuZTEuMy45Ij5Obywgc29tZSBv
ZiBpdCBpcyBmb3IgbXkgY2hpbGQncyBmYXRoZXIuIE8sIGhvdzwvZGl2PgotCi0JICA8ZGl2IGlk
PSJzY2VuZTEuMy4xMCI+ZnVsbCBvZiBicmllcnMgaXMgdGhpcyB3b3JraW5nLWRheSB3b3JsZCE8
L2Rpdj4KLQotCSAgPC9kaXY+Ci0KLQkgIDxkaXYgaWQ9InNwZWVjaDciIGNsYXNzPSJjaGFyYWN0
ZXIiPkNFTElBPC9kaXY+Ci0KLQkgIDxkaXYgY2xhc3M9ImRpYWxvZyI+Ci0KLQkgIDxkaXYgaWQ9
InNjZW5lMS4zLjExIj5UaGV5IGFyZSBidXQgYnVycywgY291c2luLCB0aHJvd24gdXBvbiB0aGVl
IGluPC9kaXY+Ci0JICA8ZGl2IGlkPSJzY2VuZTEuMy4xMiI+aG9saWRheSBmb29sZXJ5OiBpZiB3
ZSB3YWxrIG5vdCBpbiB0aGUgdHJvZGRlbjwvZGl2PgotCi0JICA8ZGl2IGlkPSJzY2VuZTEuMy4x
MyI+cGF0aHMgb3VyIHZlcnkgcGV0dGljb2F0cyB3aWxsIGNhdGNoIHRoZW0uPC9kaXY+Ci0JICA8
L2Rpdj4KLQotCSAgPGRpdiBpZD0ic3BlZWNoOCIgY2xhc3M9ImNoYXJhY3RlciI+Uk9TQUxJTkQ8
L2Rpdj4KLQotCSAgPGRpdiBjbGFzcz0iZGlhbG9nIj4KLQkgIDxkaXYgaWQ9InNjZW5lMS4zLjE0
Ij5JIGNvdWxkIHNoYWtlIHRoZW0gb2ZmIG15IGNvYXQ6IHRoZXNlIGJ1cnMgYXJlIGluIG15IGhl
YXJ0LjwvZGl2PgotCSAgPC9kaXY+Ci0KLQkgIDxkaXYgaWQ9InNwZWVjaDkiIGNsYXNzPSJjaGFy
YWN0ZXIiPkNFTElBPC9kaXY+Ci0KLQkgIDxkaXYgY2xhc3M9ImRpYWxvZyI+Ci0JICA8ZGl2IGlk
PSJzY2VuZTEuMy4xNSI+SGVtIHRoZW0gYXdheS48L2Rpdj4KLQotCSAgPC9kaXY+Ci0KLQkgIDxk
aXYgaWQ9InNwZWVjaDEwIiBjbGFzcz0iY2hhcmFjdGVyIj5ST1NBTElORDwvZGl2PgotCi0JICA8
ZGl2IGNsYXNzPSJkaWFsb2ciPgotCi0JICA8ZGl2IGlkPSJzY2VuZTEuMy4xNiI+SSB3b3VsZCB0
cnksIGlmIEkgY291bGQgY3J5ICdoZW0nIGFuZCBoYXZlIGhpbS48L2Rpdj4KLQkgIDwvZGl2Pgot
Ci0JICA8ZGl2IGlkPSJzcGVlY2gxMSIgY2xhc3M9ImNoYXJhY3RlciI+Q0VMSUE8L2Rpdj4KLQot
CSAgPGRpdiBjbGFzcz0iZGlhbG9nIj4KLQkgIDxkaXYgaWQ9InNjZW5lMS4zLjE3Ij5Db21lLCBj
b21lLCB3cmVzdGxlIHdpdGggdGh5IGFmZmVjdGlvbnMuPC9kaXY+Ci0KLQkgIDwvZGl2PgotCi0J
ICA8ZGl2IGlkPSJzcGVlY2gxMiIgY2xhc3M9ImNoYXJhY3RlciI+Uk9TQUxJTkQ8L2Rpdj4KLQkg
IDxkaXYgY2xhc3M9ImRpYWxvZyI+Ci0JICA8ZGl2IGlkPSJzY2VuZTEuMy4xOCI+TywgdGhleSB0
YWtlIHRoZSBwYXJ0IG9mIGEgYmV0dGVyIHdyZXN0bGVyIHRoYW4gbXlzZWxmITwvZGl2PgotCi0J
ICA8L2Rpdj4KLQotCSAgPGRpdiBpZD0ic3BlZWNoMTMiIGNsYXNzPSJjaGFyYWN0ZXIiPkNFTElB
PC9kaXY+Ci0KLQkgIDxkaXYgY2xhc3M9ImRpYWxvZyI+Ci0KLQkgIDxkaXYgaWQ9InNjZW5lMS4z
LjE5Ij5PLCBhIGdvb2Qgd2lzaCB1cG9uIHlvdSEgeW91IHdpbGwgdHJ5IGluIHRpbWUsIGluPC9k
aXY+Ci0JICA8ZGl2IGlkPSJzY2VuZTEuMy4yMCI+ZGVzcGl0ZSBvZiBhIGZhbGwuIEJ1dCwgdHVy
bmluZyB0aGVzZSBqZXN0cyBvdXQgb2Y8L2Rpdj4KLQkgIDxkaXYgaWQ9InNjZW5lMS4zLjIxIj5z
ZXJ2aWNlLCBsZXQgdXMgdGFsayBpbiBnb29kIGVhcm5lc3Q6IGlzIGl0PC9kaXY+Ci0KLQkgIDxk
aXYgaWQ9InNjZW5lMS4zLjIyIj5wb3NzaWJsZSwgb24gc3VjaCBhIHN1ZGRlbiwgeW91IHNob3Vs
ZCBmYWxsIGludG8gc288L2Rpdj4KLQkgIDxkaXYgaWQ9InNjZW5lMS4zLjIzIj5zdHJvbmcgYSBs
aWtpbmcgd2l0aCBvbGQgU2lyIFJvd2xhbmQncyB5b3VuZ2VzdCBzb24/PC9kaXY+Ci0KLQkgIDwv
ZGl2PgotCi0JICA8ZGl2IGlkPSJzcGVlY2gxNCIgY2xhc3M9ImNoYXJhY3RlciI+Uk9TQUxJTkQ8
L2Rpdj4KLQkgIDxkaXYgY2xhc3M9ImRpYWxvZyI+Ci0JICA8ZGl2IGlkPSJzY2VuZTEuMy4yNCI+
VGhlIGR1a2UgbXkgZmF0aGVyIGxvdmVkIGhpcyBmYXRoZXIgZGVhcmx5LjwvZGl2PgotCi0JICA8
L2Rpdj4KLQotCSAgPGRpdiBpZD0ic3BlZWNoMTUiIGNsYXNzPSJjaGFyYWN0ZXIiPkNFTElBPC9k
aXY+Ci0KLQkgIDxkaXYgY2xhc3M9ImRpYWxvZyI+Ci0KLQkgIDxkaXYgaWQ9InNjZW5lMS4zLjI1
Ij5Eb3RoIGl0IHRoZXJlZm9yZSBlbnN1ZSB0aGF0IHlvdSBzaG91bGQgbG92ZSBoaXMgc29uPC9k
aXY+Ci0KLQkgIDxkaXYgaWQ9InNjZW5lMS4zLjI2Ij5kZWFybHk/IEJ5IHRoaXMga2luZCBvZiBj
aGFzZSwgSSBzaG91bGQgaGF0ZSBoaW0sPC9kaXY+Ci0KLQkgIDxkaXYgaWQ9InNjZW5lMS4zLjI3
Ij5mb3IgbXkgZmF0aGVyIGhhdGVkIGhpcyBmYXRoZXIgZGVhcmx5OyB5ZXQgSSBoYXRlPC9kaXY+
Ci0KLQkgIDxkaXYgaWQ9InNjZW5lMS4zLjI4Ij5ub3QgT3JsYW5kby48L2Rpdj4KLQotCSAgPC9k
aXY+Ci0KLQkgIDxkaXYgaWQ9InNwZWVjaDE2IiBjbGFzcz0iY2hhcmFjdGVyIj5ST1NBTElORDwv
ZGl2PgotCi0JICA8ZGl2IHRpdGxlPSJ3dGYiIGNsYXNzPSJkaWFsb2ciPgotCi0JICA8ZGl2IGlk
PSJzY2VuZTEuMy4yOSI+Tm8sIGZhaXRoLCBoYXRlIGhpbSBub3QsIGZvciBteSBzYWtlLjwvZGl2
PgotCi0JICA8L2Rpdj4KLQotCSAgPGRpdiBpZD0ic3BlZWNoMTciIGNsYXNzPSJjaGFyYWN0ZXIi
PkNFTElBPC9kaXY+Ci0KLQkgIDxkaXYgY2xhc3M9ImRpYWxvZyI+Ci0JICA8ZGl2IGlkPSJzY2Vu
ZTEuMy4zMCI+V2h5IHNob3VsZCBJIG5vdD8gZG90aCBoZSBub3QgZGVzZXJ2ZSB3ZWxsPzwvZGl2
PgotCi0JICA8L2Rpdj4KLQotCSAgPGRpdiBpZD0ic3BlZWNoMTgiIGNsYXNzPSJjaGFyYWN0ZXIi
PlJPU0FMSU5EPC9kaXY+Ci0KLQkgIDxkaXYgY2xhc3M9ImRpYWxvZyI+Ci0JICA8ZGl2IGlkPSJz
Y2VuZTEuMy4zMSI+TGV0IG1lIGxvdmUgaGltIGZvciB0aGF0LCBhbmQgZG8geW91IGxvdmUgaGlt
PC9kaXY+Ci0JICA8ZGl2IGlkPSJzY2VuZTEuMy4zMiI+YmVjYXVzZSBJIGRvLiBMb29rLCBoZXJl
IGNvbWVzIHRoZSBkdWtlLjwvZGl2PgotCSAgPC9kaXY+Ci0KLQkgIDxkaXYgaWQ9InNwZWVjaDE5
IiBjbGFzcz0iY2hhcmFjdGVyIj5DRUxJQTwvZGl2PgotCSAgPGRpdiBjbGFzcz0iZGlhbG9nIj4K
LQotCSAgPGRpdiBpZD0ic2NlbmUxLjMuMzMiPldpdGggaGlzIGV5ZXMgZnVsbCBvZiBhbmdlci48
L2Rpdj4KLQkgIDxkaXYgY2xhc3M9ImRpcmVjdGlvbiI+RW50ZXIgRFVLRSBGUkVERVJJQ0ssIHdp
dGggTG9yZHM8L2Rpdj4KLQkgIDwvZGl2PgotCi0JICA8ZGl2IGlkPSJzcGVlY2gyMCIgY2xhc3M9
ImNoYXJhY3RlciI+RFVLRSBGUkVERVJJQ0s8L2Rpdj4KLQotCSAgPGRpdiBjbGFzcz0iZGlhbG9n
Ij4KLQkgIDxkaXYgaWQ9InNjZW5lMS4zLjM0Ij5NaXN0cmVzcywgZGlzcGF0Y2ggeW91IHdpdGgg
eW91ciBzYWZlc3QgaGFzdGU8L2Rpdj4KLQotCSAgPGRpdiBpZD0ic2NlbmUxLjMuMzUiPkFuZCBn
ZXQgeW91IGZyb20gb3VyIGNvdXJ0LjwvZGl2PgotCSAgPC9kaXY+Ci0KLQkgIDxkaXYgaWQ9InNw
ZWVjaDIxIiBjbGFzcz0iY2hhcmFjdGVyIj5ST1NBTElORDwvZGl2PgotCi0JICA8ZGl2IGNsYXNz
PSJkaWFsb2ciPgotCi0JICA8ZGl2IGlkPSJzY2VuZTEuMy4zNiI+TWUsIHVuY2xlPzwvZGl2Pgot
Ci0JICA8L2Rpdj4KLQotCSAgPGRpdiBpZD0ic3BlZWNoMjIiIGNsYXNzPSJjaGFyYWN0ZXIiPkRV
S0UgRlJFREVSSUNLPC9kaXY+Ci0JICA8ZGl2IGNsYXNzPSJkaWFsb2ciPgotCSAgPGRpdiBpZD0i
c2NlbmUxLjMuMzciPllvdSwgY291c2luPC9kaXY+Ci0KLQkgIDxkaXYgaWQ9InNjZW5lMS4zLjM4
Ij5XaXRoaW4gdGhlc2UgdGVuIGRheXMgaWYgdGhhdCB0aG91IGJlJ3N0IGZvdW5kPC9kaXY+Ci0K
LQkgIDxkaXYgaWQ9InNjZW5lMS4zLjM5Ij5TbyBuZWFyIG91ciBwdWJsaWMgY291cnQgYXMgdHdl
bnR5IG1pbGVzLDwvZGl2PgotCi0JICA8ZGl2IGlkPSJzY2VuZTEuMy40MCI+VGhvdSBkaWVzdCBm
b3IgaXQuPC9kaXY+Ci0KLQkgIDwvZGl2PgotCi0JICA8ZGl2IGlkPSJzcGVlY2gyMyIgY2xhc3M9
ImNoYXJhY3RlciI+Uk9TQUxJTkQ8L2Rpdj4KLQotCSAgPGRpdiBjbGFzcz0iZGlhbG9nIj4KLQot
CSAgPGRpdiBpZD0ic2NlbmUxLjMuNDEiPiAgICAgICAgICAgICAgICAgIEkgZG8gYmVzZWVjaCB5
b3VyIGdyYWNlLDwvZGl2PgotCi0JICA8ZGl2IGlkPSJzY2VuZTEuMy40MiI+TGV0IG1lIHRoZSBr
bm93bGVkZ2Ugb2YgbXkgZmF1bHQgYmVhciB3aXRoIG1lOjwvZGl2PgotCSAgPGRpdiBpZD0ic2Nl
bmUxLjMuNDMiPklmIHdpdGggbXlzZWxmIEkgaG9sZCBpbnRlbGxpZ2VuY2U8L2Rpdj4KLQotCSAg
PGRpdiBpZD0ic2NlbmUxLjMuNDQiPk9yIGhhdmUgYWNxdWFpbnRhbmNlIHdpdGggbWluZSBvd24g
ZGVzaXJlcyw8L2Rpdj4KLQotCSAgPGRpdiBpZD0ic2NlbmUxLjMuNDUiPklmIHRoYXQgSSBkbyBu
b3QgZHJlYW0gb3IgYmUgbm90IGZyYW50aWMsLS08L2Rpdj4KLQotCSAgPGRpdiBpZD0ic2NlbmUx
LjMuNDYiPkFzIEkgZG8gdHJ1c3QgSSBhbSBub3QtLXRoZW4sIGRlYXIgdW5jbGUsPC9kaXY+Ci0K
LQkgIDxkaXYgaWQ9InNjZW5lMS4zLjQ3Ij5OZXZlciBzbyBtdWNoIGFzIGluIGEgdGhvdWdodCB1
bmJvcm48L2Rpdj4KLQotCSAgPGRpdiBpZD0ic2NlbmUxLjMuNDgiPkRpZCBJIG9mZmVuZCB5b3Vy
IGhpZ2huZXNzLjwvZGl2PgotCi0JICA8L2Rpdj4KLQotCSAgPGRpdiBpZD0ic3BlZWNoMjQiIGNs
YXNzPSJjaGFyYWN0ZXIiPkRVS0UgRlJFREVSSUNLPC9kaXY+Ci0KLQkgIDxkaXYgY2xhc3M9ImRp
YWxvZyI+Ci0JICA8ZGl2IGlkPSJzY2VuZTEuMy40OSI+VGh1cyBkbyBhbGwgdHJhaXRvcnM6PC9k
aXY+Ci0KLQkgIDxkaXYgaWQ9InNjZW5lMS4zLjUwIj5JZiB0aGVpciBwdXJnYXRpb24gZGlkIGNv
bnNpc3QgaW4gd29yZHMsPC9kaXY+Ci0KLQkgIDxkaXYgaWQ9InNjZW5lMS4zLjUxIj5UaGV5IGFy
ZSBhcyBpbm5vY2VudCBhcyBncmFjZSBpdHNlbGY6PC9kaXY+Ci0KLQkgIDxkaXYgaWQ9InNjZW5l
MS4zLjUyIj5MZXQgaXQgc3VmZmljZSB0aGVlIHRoYXQgSSB0cnVzdCB0aGVlIG5vdC48L2Rpdj4K
LQotCSAgPC9kaXY+Ci0KLQkgIDxkaXYgaWQ9InNwZWVjaDI1IiBjbGFzcz0iY2hhcmFjdGVyIj5S
T1NBTElORDwvZGl2PgotCi0JICA8ZGl2IGNsYXNzPSJkaWFsb2ciPgotCSAgPGRpdiBpZD0ic2Nl
bmUxLjMuNTMiPllldCB5b3VyIG1pc3RydXN0IGNhbm5vdCBtYWtlIG1lIGEgdHJhaXRvcjo8L2Rp
dj4KLQotCSAgPGRpdiBpZD0ic2NlbmUxLjMuNTQiPlRlbGwgbWUgd2hlcmVvbiB0aGUgbGlrZWxp
aG9vZCBkZXBlbmRzLjwvZGl2PgotCi0JICA8L2Rpdj4KLQotCSAgPGRpdiBpZD0ic3BlZWNoMjYi
IGNsYXNzPSJjaGFyYWN0ZXIiPkRVS0UgRlJFREVSSUNLPC9kaXY+Ci0JICA8ZGl2IGNsYXNzPSJk
aWFsb2ciPgotCi0JICA8ZGl2IGlkPSJzY2VuZTEuMy41NSI+VGhvdSBhcnQgdGh5IGZhdGhlcidz
IGRhdWdodGVyOyB0aGVyZSdzIGVub3VnaC48L2Rpdj4KLQotCSAgPC9kaXY+Ci0KLQkgIDxkaXYg
aWQ9InNwZWVjaDI3IiBjbGFzcz0iY2hhcmFjdGVyIj5ST1NBTElORDwvZGl2PgotCi0JICA8ZGl2
IGNsYXNzPSJkaWFsb2ciPgotCSAgPGRpdiBpZD0ic2NlbmUxLjMuNTYiPlNvIHdhcyBJIHdoZW4g
eW91ciBoaWdobmVzcyB0b29rIGhpcyBkdWtlZG9tOzwvZGl2PgotCSAgPGRpdiBpZD0ic2NlbmUx
LjMuNTciPlNvIHdhcyBJIHdoZW4geW91ciBoaWdobmVzcyBiYW5pc2gnZCBoaW06PC9kaXY+Ci0K
LQkgIDxkaXYgaWQ9InNjZW5lMS4zLjU4Ij5UcmVhc29uIGlzIG5vdCBpbmhlcml0ZWQsIG15IGxv
cmQ7PC9kaXY+Ci0KLQkgIDxkaXYgaWQ9InNjZW5lMS4zLjU5Ij5PciwgaWYgd2UgZGlkIGRlcml2
ZSBpdCBmcm9tIG91ciBmcmllbmRzLDwvZGl2PgotCi0JICA8ZGl2IGlkPSJzY2VuZTEuMy42MCI+
V2hhdCdzIHRoYXQgdG8gbWU/IG15IGZhdGhlciB3YXMgbm8gdHJhaXRvcjo8L2Rpdj4KLQotCSAg
PGRpdiBpZD0ic2NlbmUxLjMuNjEiPlRoZW4sIGdvb2QgbXkgbGllZ2UsIG1pc3Rha2UgbWUgbm90
IHNvIG11Y2g8L2Rpdj4KLQkgIDxkaXYgaWQ9InNjZW5lMS4zLjYyIj5UbyB0aGluayBteSBwb3Zl
cnR5IGlzIHRyZWFjaGVyb3VzLjwvZGl2PgotCi0JICA8L2Rpdj4KLQotCSAgPGRpdiBpZD0ic3Bl
ZWNoMjgiIGNsYXNzPSJjaGFyYWN0ZXIiPkNFTElBPC9kaXY+Ci0JICA8ZGl2IGNsYXNzPSJkaWFs
b2ciPgotCi0JICA8ZGl2IGlkPSJzY2VuZTEuMy42MyI+RGVhciBzb3ZlcmVpZ24sIGhlYXIgbWUg
c3BlYWsuPC9kaXY+Ci0KLQkgIDwvZGl2PgotCi0JICA8ZGl2IGlkPSJzcGVlY2gyOSIgY2xhc3M9
ImNoYXJhY3RlciI+RFVLRSBGUkVERVJJQ0s8L2Rpdj4KLQotCSAgPGRpdiBjbGFzcz0iZGlhbG9n
Ij4KLQkgIDxkaXYgaWQ9InNjZW5lMS4zLjY0Ij5BeSwgQ2VsaWE7IHdlIHN0YXknZCBoZXIgZm9y
IHlvdXIgc2FrZSw8L2Rpdj4KLQkgIDxkaXYgaWQ9InNjZW5lMS4zLjY1Ij5FbHNlIGhhZCBzaGUg
d2l0aCBoZXIgZmF0aGVyIHJhbmdlZCBhbG9uZy48L2Rpdj4KLQotCSAgPC9kaXY+Ci0KLQkgIDxk
aXYgaWQ9InNwZWVjaDMwIiBjbGFzcz0iY2hhcmFjdGVyIj5DRUxJQTwvZGl2PgotCi0JICA8ZGl2
IGNsYXNzPSJkaWFsb2ciPgotCi0JICA8ZGl2IGlkPSJzY2VuZTEuMy42NiI+SSBkaWQgbm90IHRo
ZW4gZW50cmVhdCB0byBoYXZlIGhlciBzdGF5OzwvZGl2PgotCSAgPGRpdiBpZD0ic2NlbmUxLjMu
NjciPkl0IHdhcyB5b3VyIHBsZWFzdXJlIGFuZCB5b3VyIG93biByZW1vcnNlOjwvZGl2PgotCSAg
PGRpdiBpZD0ic2NlbmUxLjMuNjgiPkkgd2FzIHRvbyB5b3VuZyB0aGF0IHRpbWUgdG8gdmFsdWUg
aGVyOzwvZGl2PgotCi0JICA8ZGl2IGlkPSJzY2VuZTEuMy42OSI+QnV0IG5vdyBJIGtub3cgaGVy
OiBpZiBzaGUgYmUgYSB0cmFpdG9yLDwvZGl2PgotCi0JICA8ZGl2IGlkPSJzY2VuZTEuMy43MCI+
V2h5IHNvIGFtIEk7IHdlIHN0aWxsIGhhdmUgc2xlcHQgdG9nZXRoZXIsPC9kaXY+Ci0KLQkgIDxk
aXYgaWQ9InNjZW5lMS4zLjcxIj5Sb3NlIGF0IGFuIGluc3RhbnQsIGxlYXJuJ2QsIHBsYXknZCwg
ZWF0IHRvZ2V0aGVyLDwvZGl2PgotCSAgPGRpdiBpZD0ic2NlbmUxLjMuNzIiPkFuZCB3aGVyZXNv
ZXZlciB3ZSB3ZW50LCBsaWtlIEp1bm8ncyBzd2Fucyw8L2Rpdj4KLQotCSAgPGRpdiBpZD0ic2Nl
bmUxLjMuNzMiPlN0aWxsIHdlIHdlbnQgY291cGxlZCBhbmQgaW5zZXBhcmFibGUuPC9kaXY+Ci0J
ICA8L2Rpdj4KLQotCSAgPGRpdiBpZD0ic3BlZWNoMzEiIGNsYXNzPSJjaGFyYWN0ZXIiPkRVS0Ug
RlJFREVSSUNLPC9kaXY+Ci0KLQkgIDxkaXYgY2xhc3M9ImRpYWxvZyI+Ci0JICA8ZGl2IGlkPSJz
Y2VuZTEuMy43NCI+U2hlIGlzIHRvbyBzdWJ0bGUgZm9yIHRoZWU7IGFuZCBoZXIgc21vb3RobmVz
cyw8L2Rpdj4KLQkgIDxkaXYgaWQ9InNjZW5lMS4zLjc1Ij5IZXIgdmVyeSBzaWxlbmNlIGFuZCBo
ZXIgcGF0aWVuY2U8L2Rpdj4KLQkgIDxkaXYgaWQ9InNjZW5lMS4zLjc2Ij5TcGVhayB0byB0aGUg
cGVvcGxlLCBhbmQgdGhleSBwaXR5IGhlci48L2Rpdj4KLQkgIDxkaXYgaWQ9InNjZW5lMS4zLjc3
Ij5UaG91IGFydCBhIGZvb2w6IHNoZSByb2JzIHRoZWUgb2YgdGh5IG5hbWU7PC9kaXY+Ci0KLQkg
IDxkaXYgaWQ9InNjZW5lMS4zLjc4Ij5BbmQgdGhvdSB3aWx0IHNob3cgbW9yZSBicmlnaHQgYW5k
IHNlZW0gbW9yZSB2aXJ0dW91czwvZGl2PgotCi0JICA8ZGl2IGlkPSJzY2VuZTEuMy43OSI+V2hl
biBzaGUgaXMgZ29uZS4gVGhlbiBvcGVuIG5vdCB0aHkgbGlwczo8L2Rpdj4KLQkgIDxkaXYgaWQ9
InNjZW5lMS4zLjgwIj5GaXJtIGFuZCBpcnJldm9jYWJsZSBpcyBteSBkb29tPC9kaXY+Ci0JICA8
ZGl2IGlkPSJzY2VuZTEuMy44MSI+V2hpY2ggSSBoYXZlIHBhc3MnZCB1cG9uIGhlcjsgc2hlIGlz
IGJhbmlzaCdkLjwvZGl2PgotCSAgPC9kaXY+Ci0KLQkgIDxkaXYgaWQ9InNwZWVjaDMyIiBjbGFz
cz0iY2hhcmFjdGVyIj5DRUxJQTwvZGl2PgotCi0JICA8ZGl2IGNsYXNzPSJkaWFsb2ciPgotCSAg
PGRpdiBpZD0ic2NlbmUxLjMuODIiPlByb25vdW5jZSB0aGF0IHNlbnRlbmNlIHRoZW4gb24gbWUs
IG15IGxpZWdlOjwvZGl2PgotCSAgPGRpdiBpZD0ic2NlbmUxLjMuODMiPkkgY2Fubm90IGxpdmUg
b3V0IG9mIGhlciBjb21wYW55LjwvZGl2PgotCSAgPC9kaXY+Ci0KLQkgIDxkaXYgaWQ9InNwZWVj
aDMzIiBjbGFzcz0iY2hhcmFjdGVyIj5EVUtFIEZSRURFUklDSzwvZGl2PgotCi0JICA8ZGl2IGNs
YXNzPSJkaWFsb2ciPgotCSAgPGRpdiBpZD0ic2NlbmUxLjMuODQiPllvdSBhcmUgYSBmb29sLiBZ
b3UsIG5pZWNlLCBwcm92aWRlIHlvdXJzZWxmOjwvZGl2PgotCi0JICA8ZGl2IGlkPSJzY2VuZTEu
My44NSI+SWYgeW91IG91dHN0YXkgdGhlIHRpbWUsIHVwb24gbWluZSBob25vdXIsPC9kaXY+Ci0J
ICA8ZGl2IGlkPSJzY2VuZTEuMy44NiI+QW5kIGluIHRoZSBncmVhdG5lc3Mgb2YgbXkgd29yZCwg
eW91IGRpZS48L2Rpdj4KLQkgIDxkaXYgY2xhc3M9ImRpcmVjdGlvbiI+RXhldW50IERVS0UgRlJF
REVSSUNLIGFuZCBMb3JkczwvZGl2PgotCSAgPC9kaXY+Ci0KLQkgIDxkaXYgaWQ9InNwZWVjaDM0
IiBjbGFzcz0iY2hhcmFjdGVyIj5DRUxJQTwvZGl2PgotCSAgPGRpdiBjbGFzcz0iZGlhbG9nIj4K
LQotCSAgPGRpdiBpZD0ic2NlbmUxLjMuODciPk8gbXkgcG9vciBSb3NhbGluZCwgd2hpdGhlciB3
aWx0IHRob3UgZ28/PC9kaXY+Ci0KLQkgIDxkaXYgaWQ9InNjZW5lMS4zLjg4Ij5XaWx0IHRob3Ug
Y2hhbmdlIGZhdGhlcnM/IEkgd2lsbCBnaXZlIHRoZWUgbWluZS48L2Rpdj4KLQkgIDxkaXYgaWQ9
InNjZW5lMS4zLjg5Ij5JIGNoYXJnZSB0aGVlLCBiZSBub3QgdGhvdSBtb3JlIGdyaWV2ZWQgdGhh
biBJIGFtLjwvZGl2PgotCi0JICA8L2Rpdj4KLQotCSAgPGRpdiBpZD0ic3BlZWNoMzUiIGNsYXNz
PSJjaGFyYWN0ZXIiPlJPU0FMSU5EPC9kaXY+Ci0KLQkgIDxkaXYgY2xhc3M9ImRpYWxvZyI+Ci0K
LQkgIDxkaXYgaWQ9InNjZW5lMS4zLjkwIj5JIGhhdmUgbW9yZSBjYXVzZS48L2Rpdj4KLQkgIDwv
ZGl2PgotCi0JICA8ZGl2IGlkPSJzcGVlY2gzNiIgY2xhc3M9ImNoYXJhY3RlciI+Q0VMSUE8L2Rp
dj4KLQotCSAgPGRpdiBjbGFzcz0iZGlhbG9nIj4KLQkgIDxkaXYgaWQ9InNjZW5lMS4zLjkxIj4g
ICAgICAgICAgICAgICAgICBUaG91IGhhc3Qgbm90LCBjb3VzaW47PC9kaXY+Ci0KLQkgIDxkaXYg
aWQ9InNjZW5lMS4zLjkyIj5Qcml0aGVlIGJlIGNoZWVyZnVsOiBrbm93J3N0IHRob3Ugbm90LCB0
aGUgZHVrZTwvZGl2PgotCi0JICA8ZGl2IGlkPSJzY2VuZTEuMy45MyI+SGF0aCBiYW5pc2gnZCBt
ZSwgaGlzIGRhdWdodGVyPzwvZGl2PgotCSAgPC9kaXY+Ci0KLQkgIDxkaXYgaWQ9InNwZWVjaDM3
IiBjbGFzcz0iY2hhcmFjdGVyIj5ST1NBTElORDwvZGl2PgotCSAgPGRpdiBjbGFzcz0iZGlhbG9n
Ij4KLQkgIDxkaXYgaWQ9InNjZW5lMS4zLjk0Ij5UaGF0IGhlIGhhdGggbm90LjwvZGl2PgotCi0J
ICA8L2Rpdj4KLQotCSAgPGRpdiBpZD0ic3BlZWNoMzgiIGNsYXNzPSJjaGFyYWN0ZXIiPkNFTElB
PC9kaXY+Ci0JICA8ZGl2IGNsYXNzPSJkaWFsb2ciPgotCi0JICA8ZGl2IGlkPSJzY2VuZTEuMy45
NSI+Tm8sIGhhdGggbm90PyBSb3NhbGluZCBsYWNrcyB0aGVuIHRoZSBsb3ZlPC9kaXY+Ci0KLQkg
IDxkaXYgaWQ9InNjZW5lMS4zLjk2Ij5XaGljaCB0ZWFjaGV0aCB0aGVlIHRoYXQgdGhvdSBhbmQg
SSBhbSBvbmU6PC9kaXY+Ci0JICA8ZGl2IGlkPSJzY2VuZTEuMy45NyI+U2hhbGwgd2UgYmUgc3Vu
ZGVyJ2Q/IHNoYWxsIHdlIHBhcnQsIHN3ZWV0IGdpcmw/PC9kaXY+Ci0KLQkgIDxkaXYgaWQ9InNj
ZW5lMS4zLjk4Ij5ObzogbGV0IG15IGZhdGhlciBzZWVrIGFub3RoZXIgaGVpci48L2Rpdj4KLQot
CSAgPGRpdiBpZD0ic2NlbmUxLjMuOTkiPlRoZXJlZm9yZSBkZXZpc2Ugd2l0aCBtZSBob3cgd2Ug
bWF5IGZseSw8L2Rpdj4KLQotCSAgPGRpdiBpZD0ic2NlbmUxLjMuMTAwIj5XaGl0aGVyIHRvIGdv
IGFuZCB3aGF0IHRvIGJlYXIgd2l0aCB1czs8L2Rpdj4KLQkgIDxkaXYgaWQ9InNjZW5lMS4zLjEw
MSI+QW5kIGRvIG5vdCBzZWVrIHRvIHRha2UgeW91ciBjaGFuZ2UgdXBvbiB5b3UsPC9kaXY+Ci0J
ICA8ZGl2IGlkPSJzY2VuZTEuMy4xMDIiPlRvIGJlYXIgeW91ciBncmllZnMgeW91cnNlbGYgYW5k
IGxlYXZlIG1lIG91dDs8L2Rpdj4KLQotCSAgPGRpdiBpZD0ic2NlbmUxLjMuMTAzIj5Gb3IsIGJ5
IHRoaXMgaGVhdmVuLCBub3cgYXQgb3VyIHNvcnJvd3MgcGFsZSw8L2Rpdj4KLQotCSAgPGRpdiBp
ZD0ic2NlbmUxLjMuMTA0Ij5TYXkgd2hhdCB0aG91IGNhbnN0LCBJJ2xsIGdvIGFsb25nIHdpdGgg
dGhlZS48L2Rpdj4KLQotCSAgPC9kaXY+Ci0KLQkgIDxkaXYgaWQ9InNwZWVjaDM5IiBjbGFzcz0i
Y2hhcmFjdGVyIj5ST1NBTElORDwvZGl2PgotCSAgPGRpdiBjbGFzcz0iZGlhbG9nIj4KLQotCSAg
PGRpdiBpZD0ic2NlbmUxLjMuMTA1Ij5XaHksIHdoaXRoZXIgc2hhbGwgd2UgZ28/PC9kaXY+Ci0K
LQkgIDwvZGl2PgotCi0JICA8ZGl2IGlkPSJzcGVlY2g0MCIgY2xhc3M9ImNoYXJhY3RlciI+Q0VM
SUE8L2Rpdj4KLQotCSAgPGRpdiBjbGFzcz0iZGlhbG9nIj4KLQkgIDxkaXYgaWQ9InNjZW5lMS4z
LjEwNiI+VG8gc2VlayBteSB1bmNsZSBpbiB0aGUgZm9yZXN0IG9mIEFyZGVuLjwvZGl2PgotCSAg
PC9kaXY+Ci0KLQkgIDxkaXYgaWQ9InNwZWVjaDQxIiBjbGFzcz0iY2hhcmFjdGVyIj5ST1NBTElO
RDwvZGl2PgotCi0JICA8ZGl2IGNsYXNzPSJkaWFsb2ciPgotCi0JICA8ZGl2IGlkPSJzY2VuZTEu
My4xMDciPkFsYXMsIHdoYXQgZGFuZ2VyIHdpbGwgaXQgYmUgdG8gdXMsPC9kaXY+Ci0KLQkgIDxk
aXYgaWQ9InNjZW5lMS4zLjEwOCI+TWFpZHMgYXMgd2UgYXJlLCB0byB0cmF2ZWwgZm9ydGggc28g
ZmFyITwvZGl2PgotCSAgPGRpdiBpZD0ic2NlbmUxLjMuMTA5Ij5CZWF1dHkgcHJvdm9rZXRoIHRo
aWV2ZXMgc29vbmVyIHRoYW4gZ29sZC48L2Rpdj4KLQotCSAgPC9kaXY+Ci0KLQkgIDxkaXYgaWQ9
InNwZWVjaDQyIiBjbGFzcz0iY2hhcmFjdGVyIj5DRUxJQTwvZGl2PgotCi0JICA8ZGl2IGNsYXNz
PSJkaWFsb2ciPgotCSAgPGRpdiBpZD0ic2NlbmUxLjMuMTEwIj5JJ2xsIHB1dCBteXNlbGYgaW4g
cG9vciBhbmQgbWVhbiBhdHRpcmU8L2Rpdj4KLQotCSAgPGRpdiBpZD0ic2NlbmUxLjMuMTExIj5B
bmQgd2l0aCBhIGtpbmQgb2YgdW1iZXIgc21pcmNoIG15IGZhY2U7PC9kaXY+Ci0JICA8ZGl2IGlk
PSJzY2VuZTEuMy4xMTIiPlRoZSBsaWtlIGRvIHlvdTogc28gc2hhbGwgd2UgcGFzcyBhbG9uZzwv
ZGl2PgotCi0JICA8ZGl2IGlkPSJzY2VuZTEuMy4xMTMiPkFuZCBuZXZlciBzdGlyIGFzc2FpbGFu
dHMuPC9kaXY+Ci0KLQkgIDwvZGl2PgotCi0JICA8ZGl2IGlkPSJzcGVlY2g0MyIgY2xhc3M9ImNo
YXJhY3RlciI+Uk9TQUxJTkQ8L2Rpdj4KLQkgIDxkaXYgY2xhc3M9ImRpYWxvZyI+Ci0KLQkgIDxk
aXYgaWQ9InNjZW5lMS4zLjExNCI+V2VyZSBpdCBub3QgYmV0dGVyLDwvZGl2PgotCi0JICA8ZGl2
IGlkPSJzY2VuZTEuMy4xMTUiPkJlY2F1c2UgdGhhdCBJIGFtIG1vcmUgdGhhbiBjb21tb24gdGFs
bCw8L2Rpdj4KLQotCSAgPGRpdiBpZD0ic2NlbmUxLjMuMTE2Ij5UaGF0IEkgZGlkIHN1aXQgbWUg
YWxsIHBvaW50cyBsaWtlIGEgbWFuPzwvZGl2PgotCi0JICA8ZGl2IGlkPSJzY2VuZTEuMy4xMTci
PkEgZ2FsbGFudCBjdXJ0bGUtYXhlIHVwb24gbXkgdGhpZ2gsPC9kaXY+Ci0KLQkgIDxkaXYgaWQ9
InNjZW5lMS4zLjExOCI+QSBib2FyLXNwZWFyIGluIG15IGhhbmQ7IGFuZC0taW4gbXkgaGVhcnQ8
L2Rpdj4KLQotCSAgPGRpdiBpZD0ic2NlbmUxLjMuMTE5Ij5MaWUgdGhlcmUgd2hhdCBoaWRkZW4g
d29tYW4ncyBmZWFyIHRoZXJlIHdpbGwtLTwvZGl2PgotCi0JICA8ZGl2IGlkPSJzY2VuZTEuMy4x
MjAiPldlJ2xsIGhhdmUgYSBzd2FzaGluZyBhbmQgYSBtYXJ0aWFsIG91dHNpZGUsPC9kaXY+Ci0K
LQkgIDxkaXYgaWQ9InNjZW5lMS4zLjEyMSI+QXMgbWFueSBvdGhlciBtYW5uaXNoIGNvd2FyZHMg
aGF2ZTwvZGl2PgotCi0JICA8ZGl2IGlkPSJzY2VuZTEuMy4xMjIiPlRoYXQgZG8gb3V0ZmFjZSBp
dCB3aXRoIHRoZWlyIHNlbWJsYW5jZXMuPC9kaXY+Ci0KLQkgIDwvZGl2PgotCi0JICA8ZGl2IGlk
PSJzcGVlY2g0NCIgY2xhc3M9ImNoYXJhY3RlciI+Q0VMSUE8L2Rpdj4KLQotCSAgPGRpdiBjbGFz
cz0iZGlhbG9nIj4KLQotCSAgPGRpdiBpZD0ic2NlbmUxLjMuMTIzIj5XaGF0IHNoYWxsIEkgY2Fs
bCB0aGVlIHdoZW4gdGhvdSBhcnQgYSBtYW4/PC9kaXY+Ci0JICA8L2Rpdj4KLQotCSAgPGRpdiBp
ZD0ic3BlZWNoNDUiIGNsYXNzPSJjaGFyYWN0ZXIiPlJPU0FMSU5EPC9kaXY+Ci0KLQkgIDxkaXYg
Y2xhc3M9ImRpYWxvZyI+Ci0JICA8ZGl2IGlkPSJzY2VuZTEuMy4xMjQiPkknbGwgaGF2ZSBubyB3
b3JzZSBhIG5hbWUgdGhhbiBKb3ZlJ3Mgb3duIHBhZ2U7PC9kaXY+Ci0KLQkgIDxkaXYgaWQ9InNj
ZW5lMS4zLjEyNSI+QW5kIHRoZXJlZm9yZSBsb29rIHlvdSBjYWxsIG1lIEdhbnltZWRlLjwvZGl2
PgotCi0JICA8ZGl2IGlkPSJzY2VuZTEuMy4xMjYiPkJ1dCB3aGF0IHdpbGwgeW91IGJlIGNhbGwn
ZD88L2Rpdj4KLQotCSAgPC9kaXY+Ci0KLQkgIDxkaXYgaWQ9InNwZWVjaDQ2IiBjbGFzcz0iY2hh
cmFjdGVyIj5DRUxJQTwvZGl2PgotCi0JICA8ZGl2IGNsYXNzPSJkaWFsb2ciPgotCi0JICA8ZGl2
IGlkPSJzY2VuZTEuMy4xMjciPlNvbWV0aGluZyB0aGF0IGhhdGggYSByZWZlcmVuY2UgdG8gbXkg
c3RhdGU8L2Rpdj4KLQkgIDxkaXYgaWQ9InNjZW5lMS4zLjEyOCI+Tm8gbG9uZ2VyIENlbGlhLCBi
dXQgQWxpZW5hLjwvZGl2PgotCi0JICA8L2Rpdj4KLQotCSAgPGRpdiBpZD0ic3BlZWNoNDciIGNs
YXNzPSJjaGFyYWN0ZXIiPlJPU0FMSU5EPC9kaXY+Ci0JICA8ZGl2IGNsYXNzPSJkaWFsb2ciPgot
Ci0JICA8ZGl2IGlkPSJzY2VuZTEuMy4xMjkiPkJ1dCwgY291c2luLCB3aGF0IGlmIHdlIGFzc2F5
J2QgdG8gc3RlYWw8L2Rpdj4KLQotCSAgPGRpdiBpZD0ic2NlbmUxLjMuMTMwIj5UaGUgY2xvd25p
c2ggZm9vbCBvdXQgb2YgeW91ciBmYXRoZXIncyBjb3VydD88L2Rpdj4KLQkgIDxkaXYgaWQ9InNj
ZW5lMS4zLjEzMSI+V291bGQgaGUgbm90IGJlIGEgY29tZm9ydCB0byBvdXIgdHJhdmVsPzwvZGl2
PgotCi0JICA8L2Rpdj4KLQotCSAgPGRpdiBpZD0ic3BlZWNoNDgiIGNsYXNzPSJjaGFyYWN0ZXIi
PkNFTElBPC9kaXY+Ci0KLQkgIDxkaXYgY2xhc3M9ImRpYWxvZyI+Ci0KLQkgIDxkaXYgaWQ9InNj
ZW5lMS4zLjEzMiI+SGUnbGwgZ28gYWxvbmcgbydlciB0aGUgd2lkZSB3b3JsZCB3aXRoIG1lOzwv
ZGl2PgotCi0JICA8ZGl2IGlkPSJzY2VuZTEuMy4xMzMiPkxlYXZlIG1lIGFsb25lIHRvIHdvbyBo
aW0uIExldCdzIGF3YXksPC9kaXY+Ci0JICA8ZGl2IGlkPSJzY2VuZTEuMy4xMzQiPkFuZCBnZXQg
b3VyIGpld2VscyBhbmQgb3VyIHdlYWx0aCB0b2dldGhlciw8L2Rpdj4KLQotCSAgPGRpdiBpZD0i
c2NlbmUxLjMuMTM1Ij5EZXZpc2UgdGhlIGZpdHRlc3QgdGltZSBhbmQgc2FmZXN0IHdheTwvZGl2
PgotCi0JICA8ZGl2IGlkPSJzY2VuZTEuMy4xMzYiPlRvIGhpZGUgdXMgZnJvbSBwdXJzdWl0IHRo
YXQgd2lsbCBiZSBtYWRlPC9kaXY+Ci0KLQkgIDxkaXYgaWQ9InNjZW5lMS4zLjEzNyI+QWZ0ZXIg
bXkgZmxpZ2h0LiBOb3cgZ28gd2UgaW4gY29udGVudDwvZGl2PgotCi0JICA8ZGl2IGlkPSJzY2Vu
ZTEuMy4xMzgiPlRvIGxpYmVydHkgYW5kIG5vdCB0byBiYW5pc2htZW50LjwvZGl2PgotCSAgPGRp
diBjbGFzcz0iZGlyZWN0aW9uIj5FeGV1bnQ8L2Rpdj4KLQotCSAgPC9kaXY+Ci0KLQk8L2Rpdj4K
LQk8L2Rpdj4KLTwvZGl2PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
</data>

          </attachment>
      

    </bug>

</bugzilla>